{"_id":"@apec1/node-utils","_rev":"2-b4726f4a4087c03c555872fa03ec4591","name":"@apec1/node-utils","dist-tags":{"latest":"1.0.1"},"versions":{"1.0.0":{"name":"@apec1/node-utils","version":"1.0.0","keywords":["APEC1","node","utils","paths","dotenv"],"author":{"name":"aarya11","email":"arpitarya@users.noreply.github.com"},"license":"MIT","_id":"@apec1/node-utils@1.0.0","maintainers":[{"name":"aarya11","email":"arpitarya.dev@gmail.com"}],"homepage":"https://github.com/arpitarya/node-utils#readme","bugs":{"url":"https://github.com/arpitarya/node-utils/issues"},"dist":{"shasum":"038881af260753e61170b64286ad235e41ced749","tarball":"https://registry.npmjs.org/@apec1/node-utils/-/node-utils-1.0.0.tgz","fileCount":59,"integrity":"sha512-gLxVmmmTD8gAledNizY8U/lhO9QNmbbwdMk9NsYXS4k8njYhlfWHEMKw1g9n5wvbij1HQFGidUqdkt4yBJoCEQ==","signatures":[{"sig":"MEUCIEo9KSky93xZNvaOjRy0vspb6/Topfbo55MH5VyQlLOrAiEAkESxw5/KeZ9k6xJByvFBxLxKmlh+EPSQRg0/6SFxG24=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":121150},"main":"./dist/index.cjs","type":"module","_from":"file:apec1-node-utils-1.0.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"}},"private":false,"scripts":{"dev":"rslib dev","test":"rstest","build":"rslib build"},"_npmUser":{"name":"aarya11","email":"arpitarya.dev@gmail.com"},"_resolved":"/private/var/folders/jh/xlrx0c9d7_vgkqm9xbjvf7d40000gn/T/2c4c76caaa9146a69cd1766e92c39ba7/apec1-node-utils-1.0.0.tgz","_integrity":"sha512-gLxVmmmTD8gAledNizY8U/lhO9QNmbbwdMk9NsYXS4k8njYhlfWHEMKw1g9n5wvbij1HQFGidUqdkt4yBJoCEQ==","repository":{"url":"git+https://github.com/arpitarya/node-utils.git","type":"git"},"_npmVersion":"11.6.2","description":"Reusable Node utilities for APEC1 (paths, dotenv helpers)","directories":{},"_nodeVersion":"24.13.0","dependencies":{"dotenv":"17.2.4","dotenv-expand":"12.0.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"chalk":"5.6.2","typescript":"5.9.3","@rslib/core":"0.19.5","@types/node":"25.2.1","@biomejs/biome":"2.3.14"},"_npmOperationalInternal":{"tmp":"tmp/node-utils_1.0.0_1772686689284_0.30252541665346677","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@apec1/node-utils","version":"1.0.1","description":"Reusable Node utilities for APEC1 (paths, dotenv helpers)","license":"MIT","author":{"name":"aarya11","email":"arpitarya@users.noreply.github.com"},"private":false,"type":"module","repository":{"type":"git","url":"git+https://github.com/arpitarya/node-utils.git"},"engines":{"node":">=20"},"main":"./dist/index.cjs","module":"./dist/index.mjs","types":"./dist/index.d.ts","exports":{".":{"import":"./dist/index.mjs","require":"./dist/index.cjs","types":"./dist/index.d.ts"}},"publishConfig":{"access":"public"},"keywords":["APEC1","node","utils","paths","dotenv"],"devDependencies":{"@biomejs/biome":"2.3.14","@rslib/core":"0.19.5","@types/node":"25.2.1","chalk":"5.6.2","typescript":"5.9.3"},"dependencies":{"dotenv":"17.2.4","dotenv-expand":"12.0.3"},"scripts":{"build":"rslib build","dev":"rslib dev","test":"rstest"},"_id":"@apec1/node-utils@1.0.1","bugs":{"url":"https://github.com/arpitarya/node-utils/issues"},"homepage":"https://github.com/arpitarya/node-utils#readme","_integrity":"sha512-BwYg7HKRflPa7/LS0+GP5O3SEOTvMOSc5y1Ee2eI6O4EYMWa2Cr3cdETSx5TUT7a2ZN33TavKWsyTNhZ8fj+HA==","_resolved":"/tmp/8e6f78122f0a3a656e6a797e2ae1bdf9/apec1-node-utils-1.0.1.tgz","_from":"file:apec1-node-utils-1.0.1.tgz","_nodeVersion":"24.14.0","_npmVersion":"11.9.0","dist":{"integrity":"sha512-BwYg7HKRflPa7/LS0+GP5O3SEOTvMOSc5y1Ee2eI6O4EYMWa2Cr3cdETSx5TUT7a2ZN33TavKWsyTNhZ8fj+HA==","shasum":"c5007831cb824f3e3b85faaaf3fe4e5d7350ebc6","tarball":"https://registry.npmjs.org/@apec1/node-utils/-/node-utils-1.0.1.tgz","fileCount":59,"unpackedSize":121198,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@apec1%2fnode-utils@1.0.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCPXINTKtDUX7x5+XOc9JlpgAg2PPApv4g2OudLHgZ2TQIhAKfCwdjbfStVL2l5/DlIWndgwgJoDrQpGkkuD3QdsJ8p"}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:2549bba5-9a2f-4938-83aa-3ae38c44832d"}},"directories":{},"maintainers":[{"name":"aarya11","email":"arpitarya.dev@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/node-utils_1.0.1_1772688077447_0.5008900802746534"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-05T04:58:09.228Z","modified":"2026-03-05T05:21:17.957Z","1.0.0":"2026-03-05T04:58:09.449Z","1.0.1":"2026-03-05T05:21:17.618Z"},"bugs":{"url":"https://github.com/arpitarya/node-utils/issues"},"author":{"name":"aarya11","email":"arpitarya@users.noreply.github.com"},"license":"MIT","homepage":"https://github.com/arpitarya/node-utils#readme","keywords":["APEC1","node","utils","paths","dotenv"],"repository":{"type":"git","url":"git+https://github.com/arpitarya/node-utils.git"},"description":"Reusable Node utilities for APEC1 (paths, dotenv helpers)","maintainers":[{"name":"aarya11","email":"arpitarya.dev@gmail.com"}],"readme":"# @apec1/node-utils\n\nUtilities for Node.js apps that need reliable path resolution and predictable `.env` loading in workspace/monorepo setups.\n\n## Why this package\n\n- Resolve paths from either workspace root or current package directory\n- Load layered `.env` files with one function call\n- Keep setup small and dependency-light\n- Ship ESM + CJS + TypeScript types\n\n## Requirements\n\n- Node.js `>=20`\n\n## Installation\n\n```bash\npnpm add @apec1/node-utils\n# npm install @apec1/node-utils\n# yarn add @apec1/node-utils\n```\n\n## Quick Start\n\n```ts\nimport {\n  syncExpandDotEnv,\n  resolveRootPath,\n  resolveWorkspaceDirectory,\n} from \"@apec1/node-utils\";\n\nprocess.env.NODE_ENV = process.env.NODE_ENV ?? \"development\";\nawait syncExpandDotEnv(\".env\");\n\nconst appConfigPath = resolveRootPath(\"config/app.json\");\nconst localLogPath = resolveWorkspaceDirectory(\"tmp/app.log\");\n\nconsole.log({ appConfigPath, localLogPath });\n```\n\n## API Reference\n\n### `syncExpandDotEnv(path: string): Promise<void>`\n\nLoads environment files in this order (if they exist):\n\n1. `${path}.${NODE_ENV}.local`\n2. `${path}.${NODE_ENV}`\n3. `${path}.local` (skipped when `NODE_ENV === \"test\"`)\n4. `${path}`\n\nExample:\n\n```ts\nimport { syncExpandDotEnv } from \"@apec1/node-utils\";\n\nprocess.env.NODE_ENV = \"production\";\nawait syncExpandDotEnv(\".env\");\n```\n\n### `asyncExpandDotEnv(path: string): Promise<void>`\n\nAsynchronous `.env` loader with the same file precedence as `syncExpandDotEnv`.\n\n```ts\nimport { asyncExpandDotEnv } from \"@apec1/node-utils\";\n\nawait asyncExpandDotEnv(\".env\");\n```\n\n### `resolveRootPath(relativePath: string): string`\n\nResolves a path relative to detected root working directory (`ROOT_WORKING_DIRECTORY`) and falls back to `process.cwd()`.\n\n```ts\nimport { resolveRootPath } from \"@apec1/node-utils\";\n\nconst absolutePath = resolveRootPath(\"packages/api/src/index.ts\");\n```\n\n### `resolveWorkspaceDirectory(relativePath: string): string`\n\nResolves a path relative to the current process working directory.\n\n```ts\nimport { resolveWorkspaceDirectory } from \"@apec1/node-utils\";\n\nconst absolutePath = resolveWorkspaceDirectory(\"src/index.ts\");\n```\n\n## Environment Variables\n\n- `NODE_ENV`:\n  - Influences dotenv file selection\n  - Set this explicitly for deterministic loading behavior\n- `ROOT_WORKING_DIRECTORY`:\n  - Optional override for root path resolution\n- `ENABLE_WORKING_DIR_LOGS_LEVEL`:\n  - Internal path-resolution logging level (`none`, `info`, `verbose`)\n\n## Common Usage Patterns\n\n### Monorepo bootstrap\n\n```ts\nimport { syncExpandDotEnv, resolveRootPath } from \"@apec1/node-utils\";\n\nawait syncExpandDotEnv(\".env\");\nconst dbConfigPath = resolveRootPath(\"packages/api/config/database.json\");\n```\n\n### Package-local paths\n\n```ts\nimport { resolveWorkspaceDirectory } from \"@apec1/node-utils\";\n\nconst migrationDir = resolveWorkspaceDirectory(\"migrations\");\n```\n\n## Development\n\n```bash\npnpm install\npnpm build\npnpm test\n```\n\nScripts:\n\n- `pnpm build` — build package with `rslib`\n- `pnpm dev` — dev/watch build with `rslib`\n- `pnpm test` — run tests with `rstest`\n\n## Package Output\n\n- ESM: `dist/index.mjs`\n- CJS: `dist/index.cjs`\n- Types: `dist/index.d.ts`\n\n## License\n\nMIT\n","readmeFilename":"README.md"}