diff --git a/.env.with-ssm b/.env.with-ssm deleted file mode 100644 index 15bf24f..0000000 --- a/.env.with-ssm +++ /dev/null @@ -1 +0,0 @@ -PASSWORD=SSM:/test/hfd/rds/DB_USER \ No newline at end of file diff --git a/bin/bin.js b/bin/bin.js index 63440b4..924fff1 100755 --- a/bin/bin.js +++ b/bin/bin.js @@ -1,2 +1,2 @@ #!/usr/bin/env node -import '../dist/start.js'; +import '../dist/index.js'; diff --git a/package.json b/package.json index a36c764..3d0150d 100644 --- a/package.json +++ b/package.json @@ -6,8 +6,8 @@ "license": "GPL-3.0", "scripts": { "test:lint": "eslint", - "build": "tsc --build", - "build:dev": "tsc --build --watch", + "build": "ncc build src/start.ts -o dist", + "build:dev": "ncc build src/start.ts -o dist --watch", "test:unit": "vitest --run --passWithNoTests", "test": "pnpm run \"/^test:/\"" }, @@ -21,6 +21,7 @@ "@pnpm/find-workspace-packages": "6.0.9", "@types/node": "24.2.0", "@types/yargs": "^17.0.33", + "@vercel/ncc": "^0.38.3", "@vitest/coverage-v8": "3.2.4", "eslint": "9.32.0", "eslint-config-prettier": "10.1.8", @@ -29,14 +30,12 @@ "prettier": "3.6.2", "typescript": "5.9.2", "typescript-eslint": "8.39.0", - "vitest": "3.2.4" - }, - "name": "@morten-olsen/with-ssm", - "version": "1.0.0", - "dependencies": { + "vitest": "3.2.4", "@aws-sdk/client-ssm": "^3.859.0", "dotenv": "^17.2.1", "execa": "^9.6.0", "yargs": "^18.0.0" - } + }, + "name": "@morten-olsen/with-ssm", + "version": "1.0.0" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 62716b0..4e390ca 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -36,6 +36,9 @@ importers: '@types/yargs': specifier: ^17.0.33 version: 17.0.33 + '@vercel/ncc': + specifier: ^0.38.3 + version: 0.38.3 '@vitest/coverage-v8': specifier: 3.2.4 version: 3.2.4(vitest@3.2.4(@types/node@24.2.0)) @@ -975,6 +978,10 @@ packages: resolution: {integrity: sha512-ldgiJ+VAhQCfIjeOgu8Kj5nSxds0ktPOSO9p4+0VDH2R2pLvQraaM5Oen2d7NxzMCm+Sn/vJT+mv2H5u6b/3fA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@vercel/ncc@0.38.3': + resolution: {integrity: sha512-rnK6hJBS6mwc+Bkab+PGPs9OiS0i/3kdTO+CkI8V0/VrW3vmz7O2Pxjw/owOlmo6PKEIxRSeZKv/kuL9itnpYA==} + hasBin: true + '@vitest/coverage-v8@3.2.4': resolution: {integrity: sha512-EyF9SXU6kS5Ku/U82E259WSnvg6c8KTjppUncuNdm5QHpe17mwREHnjDzozC8x9MZ0xfBUFSaLkRv4TMA75ALQ==} peerDependencies: @@ -3916,6 +3923,8 @@ snapshots: '@typescript-eslint/types': 8.39.0 eslint-visitor-keys: 4.2.1 + '@vercel/ncc@0.38.3': {} + '@vitest/coverage-v8@3.2.4(vitest@3.2.4(@types/node@24.2.0))': dependencies: '@ampproject/remapping': 2.3.0 diff --git a/src/start.ts b/src/start.ts index 33d184a..f436e9f 100644 --- a/src/start.ts +++ b/src/start.ts @@ -5,41 +5,48 @@ import { exec } from './utils/exec.js'; import { getEnv } from './utils/env.js'; import { replaceParams } from './utils/ssm.js'; -const argv = await yargs(hideBin(process.argv)) - .usage('Usage: $0 [options] -- ') - .option('region', { - type: 'string', - description: 'The AWS region to use for SSM.', - }) - .option('profile', { - type: 'string', - description: 'The AWS profile to use from your credentials file.', - }) - .option('file', { - alias: 'f', - type: 'string', - description: 'The file to use for environment variables. (multiple files can be specified)', - default: ['.env', '.env.with-ssm'], - }) - .demandCommand(1, 'Error: You must provide a command to execute after --') - .alias('h', 'help') - .epilogue('For more information, check the documentation.') - .parse(); +const main = async () => { + const argv = await yargs(hideBin(process.argv)) + .usage('Usage: $0 [options] -- ') + .option('region', { + type: 'string', + description: 'The AWS region to use for SSM.', + }) + .option('profile', { + type: 'string', + description: 'The AWS profile to use from your credentials file.', + }) + .option('file', { + alias: 'f', + type: 'string', + description: 'The file to use for environment variables. (multiple files can be specified)', + default: ['.env', '.env.with-ssm'], + }) + .demandCommand(1, 'Error: You must provide a command to execute after --') + .alias('h', 'help') + .epilogue('For more information, check the documentation.') + .parse(); -const command = argv._[0] as string; -const commandArgs = argv._.slice(1).map(String); + const command = argv._[0] as string; + const commandArgs = argv._.slice(1).map(String); -if (!command) { - console.error('No command provided'); + if (!command) { + console.error('No command provided'); + process.exit(1); + } + + const files = argv.file && Array.isArray(argv.file) ? argv.file : [argv.file]; + const hostEnv = await getEnv(files); + const env = await replaceParams(hostEnv); + + exec({ + command, + env, + args: commandArgs, + }); +}; + +main().catch((err) => { + console.error(err); process.exit(1); -} - -const files = argv.file && Array.isArray(argv.file) ? argv.file : [argv.file]; -const hostEnv = await getEnv(files); -const env = await replaceParams(hostEnv); - -exec({ - command, - env, - args: commandArgs, }); diff --git a/tsconfig.json b/tsconfig.json index eef1372..5d12336 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -10,6 +10,7 @@ "resolveJsonModule": true, "allowSyntheticDefaultImports": true, "skipLibCheck": true, + "noEmit": true, "outDir": "dist", "jsx": "react-jsx", "isolatedModules": true,