From 6df03a5026f4f9fdac0c422127348749b287a442 Mon Sep 17 00:00:00 2001 From: Spencer Tuft Date: Fri, 20 Sep 2024 22:34:51 -0600 Subject: [PATCH] refactor: convert to esm --- .eslintrc.js => .eslintrc.cjs | 0 .gitignore | 9 +++--- package.json | 61 +++++++++++++++++++++++------------ src/env-ssm.ts | 8 +++-- src/index.ts | 1 + src/loaders/dotenv.ts | 2 +- src/loaders/index.ts | 8 ++--- src/loaders/process.ts | 2 +- src/loaders/ssm.ts | 4 +-- src/loaders/tfvars.ts | 2 +- test/env-ssm.spec.ts | 6 ++-- tsconfig.cjs.json | 22 +++++++++++++ tsconfig.eslint.json | 4 +++ tsconfig.json | 16 +++++++-- 14 files changed, 102 insertions(+), 43 deletions(-) rename .eslintrc.js => .eslintrc.cjs (100%) create mode 100644 src/index.ts create mode 100644 tsconfig.cjs.json diff --git a/.eslintrc.js b/.eslintrc.cjs similarity index 100% rename from .eslintrc.js rename to .eslintrc.cjs diff --git a/.gitignore b/.gitignore index b33a19f..dd27d1a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ -dist -node_modules -.idea -coverage +dist/ +node_modules/ +.idea/ +coverage/ +.tsimp/ diff --git a/package.json b/package.json index 1dfc80a..a0fc925 100644 --- a/package.json +++ b/package.json @@ -6,17 +6,36 @@ "Gary Crye ", "Spencer Tuft " ], - "main": "dist/env-ssm.js", - "types": "dist/env-ssm.d.ts", + "type": "module", + "main": "./dist/cjs/index.js", + "types": "./dist/cjs/index.d.ts", + "module": "./dist/esm/index.js", + "exports": { + "./package.json": "./package.json", + ".": { + "import": { + "types": "./dist/esm/index.d.ts", + "default": "./dist/esm/index.js" + }, + "require": { + "types": "./dist/cjs/index.d.ts", + "default": "./dist/cjs/index.js" + } + } + }, "files": [ "dist" ], "scripts": { - "build": "rimraf dist && tsc", + "build": "npm run clean && concurrently \"npm:build:*\" -c cyanBright --raw", + "build:cjs": "tsc -p tsconfig.cjs.json && echo-cli \"{\\\"type\\\": \\\"commonjs\\\"}\" > dist/cjs/package.json", + "build:esm": "tsc -p tsconfig.json && echo-cli \"{\\\"type\\\": \\\"module\\\"}\" > dist/esm/package.json", + "clean": "rimraf dist .tsimp", "lint": "eslint .", "lint:fix": "eslint . --fix", - "test": "jest --colors", - "test:coverage": "jest --colors --coverage || exit 0", + "//test": "ava test/**/*.spec.ts", + "test": "echo-cli \"The tests need to be converted to ava or node:test\" && exit 1", + "test:coverage": "c8 ava test/**/*.spec.ts", "test:watch": "jest --colors --watch", "prepublishOnly": "npm run build" }, @@ -45,20 +64,25 @@ "@types/lodash.merge": "^4.6.6", "@types/lodash.set": "^4.3.6", "@typescript-eslint/eslint-plugin": "^5.46.1", + "ava": "^6.1.3", + "aws-sdk-client-mock": "^4.0.1", + "c8": "^10.1.2", "commitizen": "^4.2.4", + "concurrently": "^8.2.2", "cz-conventional-changelog": "^3.3.0", "dotenv": "^8.2.0", + "echo-cli": "^2.0.0", "env-var": "^7.0.0", "eslint": "^8.29.0", "eslint-config-standard-with-typescript": "^23.0.0", "eslint-plugin-import": "^2.26.0", "eslint-plugin-n": "^15.6.0", "eslint-plugin-promise": "^6.1.1", - "jest": "^29.3.1", "lint-staged": "^10.5.4", "rimraf": "^3.0.2", - "ts-jest": "^29.0.3", - "typescript": "^4.9.4" + "sinon": "^18.0.0", + "tsimp": "^2.0.11", + "typescript": "^5.5.4" }, "peerDependencies": { "@aws-sdk/client-ssm": ">=3", @@ -68,19 +92,6 @@ "@byu-oit/dottfvars": "^0.0.6", "dotenv": "^8.2.0" }, - "jest": { - "transform": { - "^.+\\.(ts|tsx)$": "ts-jest" - }, - "coverageThreshold": { - "global": { - "branches": 80, - "functions": 80, - "lines": 80, - "statements": 80 - } - } - }, "lint-staged": { "*.ts": "npm run lint:fix" }, @@ -88,5 +99,13 @@ "commitizen": { "path": "./node_modules/cz-conventional-changelog" } + }, + "ava": { + "extensions": { + "ts": "module" + }, + "nodeArguments": [ + "--import=tsimp/import" + ] } } diff --git a/src/env-ssm.ts b/src/env-ssm.ts index 77396ac..41c7255 100644 --- a/src/env-ssm.ts +++ b/src/env-ssm.ts @@ -12,8 +12,8 @@ import { resolveProcessEnv, resolveSSMClient, resolveTfVar -} from './loaders' -import { PathSsm, PathSsmLike } from './path-ssm' +} from './loaders/index.js' +import { PathSsm, PathSsmLike } from './path-ssm.js' export interface Options { /** @@ -75,7 +75,7 @@ async function resolveOptions (input: PathSsmLike | PathSsmLike[] | Options = {} /** * Creates an environment container from an SSM Parameter Store path */ -export default async function EnvSsm> (input: PathSsmLike | PathSsmLike[] | Options = {}, delimiter?: string): Promise> { +export async function EnvSsm> (input: PathSsmLike | PathSsmLike[] | Options = {}, delimiter?: string): Promise> { const options = await resolveOptions(input, delimiter) const { tfvar, dotenv, processEnv, ssm, paths } = options @@ -90,6 +90,7 @@ export default async function EnvSsm> (input: // Ensure all parameter values are of type string for (const prop in container) { + /* eslint-disable-next-line @typescript-eslint/strict-boolean-expressions */ if (!Object.hasOwnProperty.call(container, prop) || typeof container[prop] === 'string') continue container[prop] = JSON.stringify(container[prop]) } @@ -97,3 +98,4 @@ export default async function EnvSsm> (input: // Return an instance of EnvVar for read-able and typed interactions with environment variables return from(container) } +export default EnvSsm diff --git a/src/index.ts b/src/index.ts new file mode 100644 index 0000000..0c329d2 --- /dev/null +++ b/src/index.ts @@ -0,0 +1 @@ +export * from './env-ssm.js' diff --git a/src/loaders/dotenv.ts b/src/loaders/dotenv.ts index c8643b3..0e7121c 100644 --- a/src/loaders/dotenv.ts +++ b/src/loaders/dotenv.ts @@ -1,5 +1,5 @@ import fs from 'fs' -import { Options } from '../env-ssm' +import { Options } from '../env-ssm.js' import Debugger from 'debug' import path from 'path' diff --git a/src/loaders/index.ts b/src/loaders/index.ts index b1f324d..b3441da 100644 --- a/src/loaders/index.ts +++ b/src/loaders/index.ts @@ -1,4 +1,4 @@ -export * from './dotenv' -export * from './process' -export * from './ssm' -export * from './tfvars' +export * from './dotenv.js' +export * from './process.js' +export * from './ssm.js' +export * from './tfvars.js' diff --git a/src/loaders/process.ts b/src/loaders/process.ts index 46b839a..73336bb 100644 --- a/src/loaders/process.ts +++ b/src/loaders/process.ts @@ -1,5 +1,5 @@ import Debugger from 'debug' -import { Options } from '../env-ssm' +import { Options } from '../env-ssm.js' const logger = Debugger('env-ssm/process-loader') diff --git a/src/loaders/ssm.ts b/src/loaders/ssm.ts index 0749d81..151eb3b 100644 --- a/src/loaders/ssm.ts +++ b/src/loaders/ssm.ts @@ -8,8 +8,8 @@ import { ParameterMetadata, SSMClient } from '@aws-sdk/client-ssm' -import { Options } from '../env-ssm' -import { PathSsm } from '../path-ssm' +import { Options } from '../env-ssm.js' +import { PathSsm } from '../path-ssm.js' import Debugger from 'debug' const logger = Debugger('env-ssm/ssm-loader') diff --git a/src/loaders/tfvars.ts b/src/loaders/tfvars.ts index c371856..6e09c41 100644 --- a/src/loaders/tfvars.ts +++ b/src/loaders/tfvars.ts @@ -1,5 +1,5 @@ import fs from 'fs' -import { Options } from '../env-ssm' +import { Options } from '../env-ssm.js' import Debugger from 'debug' import path from 'path' diff --git a/test/env-ssm.spec.ts b/test/env-ssm.spec.ts index 420dcd4..a76dab4 100644 --- a/test/env-ssm.spec.ts +++ b/test/env-ssm.spec.ts @@ -1,6 +1,6 @@ import fs from 'fs' -import { SSMClient } from './__mocks__/@aws-sdk/client-ssm' -import EnvSsm from '../src/env-ssm' +import { SSMClient } from './__mocks__/@aws-sdk/client-ssm.js' +import EnvSsm from '../src/env-ssm.js' import { DescribeParametersResult, GetParametersByPathResult, GetParametersResult } from '@aws-sdk/client-ssm' import { ENV_SSM_DOTENV_KEY, @@ -12,7 +12,7 @@ import { resolvePathDelimiter, resolvePaths, resolveProcessEnv, resolveTfVar -} from '../src/loaders' +} from '../src/loaders/index.js' const ssm = new SSMClient({ region: 'us-west-2' }) diff --git a/tsconfig.cjs.json b/tsconfig.cjs.json new file mode 100644 index 0000000..496f920 --- /dev/null +++ b/tsconfig.cjs.json @@ -0,0 +1,22 @@ +{ + "compilerOptions": { + "declaration": true, + "declarationDir": "dist/cjs", + "outDir": "dist/cjs", + "target": "es2022", + "declaration": true, + "declarationMap": true, + "module": "CommonJS", + "moduleResolution": "node", + "esModuleInterop": true, + "importHelpers": true, + "strictNullChecks": true, + "lib": [ + "DOM", + "ES2022" + ] + }, + "include": [ + "src" + ] +} diff --git a/tsconfig.eslint.json b/tsconfig.eslint.json index dceb2b9..bea7997 100644 --- a/tsconfig.eslint.json +++ b/tsconfig.eslint.json @@ -1,6 +1,10 @@ { "extends": "./tsconfig.json", + "compilerOptions": { + "noEmit": true + }, "include": [ + "src", "test" ] } diff --git a/tsconfig.json b/tsconfig.json index 3265a90..df96941 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,9 +1,19 @@ { - "extends": "@tsconfig/node18/tsconfig.json", "compilerOptions": { - "outDir": "dist", "declaration": true, - "sourceMap": true + "declarationDir": "dist/esm", + "outDir": "dist/esm", + "target": "ES2022", + "module": "NodeNext", + "moduleResolution": "NodeNext", + "strictNullChecks": true, + "skipLibCheck": true, + "esModuleInterop": true, + "importHelpers": true, + "lib": [ + "DOM", + "ES2022" + ] }, "include": [ "src"