@checkdigit/typescript-config 3.3.0-PR.30-01ed → 3.3.0-PR.30-0551

Sign up to get free protection for your applications and to get access to all the features.
package/package.json CHANGED
@@ -1 +1 @@
1
- {"name":"@checkdigit/typescript-config","version":"3.3.0-PR.30-01ed","description":"Check Digit standard Typescript configuration","prettier":"@checkdigit/prettier-config","engines":{"node":">=16"},"peerDependencies":{"@types/node":">=16","typescript":">=5.0.4 <5.1"},"repository":{"type":"git","url":"git+https://github.com/checkdigit/typescript-config.git"},"author":"Check Digit, LLC","license":"MIT","bugs":{"url":"https://github.com/checkdigit/typescript-config/issues"},"homepage":"https://github.com/checkdigit/typescript-config#readme","scripts":{"preversion":"npm test","postversion":"git push && git push --tags","lint:fix":"eslint -f unix --ext .ts src --fix","lint":"eslint -f unix --ext .ts src","prettier":"prettier --ignore-path .gitignore --list-different .","prettier:fix":"prettier --ignore-path .gitignore --write .","test":"npm run ci:compile && npm run ci:test && npm run ci:lint && npm run ci:style","build-tsc-cjs":"rimraf build-tsc-cjs && tsc --outDir build-tsc-cjs","build-esbuild-cjs":"rimraf build-esbuild-cjs && esbuild ./src/*.ts ./src/*/*.ts --platform=node --bundle --format=cjs --sourcemap=inline --sources-content=false --outdir=build-esbuild-cjs","build-esbuild-cjs-bundle":"rimraf build-esbuild-cjs-bundle && esbuild ./src/index.ts --bundle --platform=node --format=cjs --sourcemap=inline --sources-content=false --outfile=build-esbuild-cjs-bundle/index.cjs","build-esbuild-esm":"rimraf build-esbuild-esm && node builder.mjs --outDir=build-esbuild-esm","build-esbuild-esm-bundle":"rimraf build-esbuild-esm-bundle && esbuild ./src/index.ts --bundle --platform=node --format=esm --sourcemap=inline --sources-content=false --outfile=build-esbuild-esm-bundle/index.mjs","test-jest-cjs":"jest --coverage=false","test-jest-esm":"NODE_OPTIONS=\"--no-warnings --experimental-vm-modules\" jest --coverage=false","test-tsc-cjs":"node --test build-tsc-cjs/index.js","test-esbuild-cjs":"node --test build-esbuild-cjs/index.js","test-esbuild-cjs-bundle":"node --test build-esbuild-cjs-bundle/index.cjs","test-esbuild-esm":"node --test build-esbuild-esm/index.mjs","test-esbuild-esm-bundle":"echo 'node -test build-esbuild-esm-bundle/index.mjs'","ci:test":"npm run test-jest-cjs && npm run test-tsc-cjs && npm run test-esbuild-cjs && npm run test-esbuild-cjs-bundle && npm run test-esbuild-esm && npm run test-esbuild-esm-bundle","ci:compile":"npm run build-tsc-cjs && npm run build-esbuild-cjs && npm run build-esbuild-cjs-bundle && npm run build-esbuild-esm && npm run build-esbuild-esm-bundle","ci:lint":"npm run lint","ci:style":"npm run prettier"},"devDependencies":{"@checkdigit/prettier-config":"^3.4.0","@typescript-eslint/eslint-plugin":"^5.59.0","@typescript-eslint/parser":"^5.59.0","@types/jest":"^29.5.1","esbuild":"^0.17.18","eslint":"^8.38.0","eslint-config-prettier":"^8.8.0","get-port":"^6.1.2","got":"11.8.6","jest":"^29.5.0","rimraf":"^5.0.0","ts-jest":"^29.1.0"},"eslintConfig":{"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint"],"parserOptions":{"project":"./tsconfig.json"},"extends":["eslint:all","plugin:@typescript-eslint/recommended","plugin:@typescript-eslint/recommended-requiring-type-checking","plugin:@typescript-eslint/strict","prettier"],"rules":{"@typescript-eslint/ban-types":"off","@typescript-eslint/require-await":"off","@typescript-eslint/consistent-type-definitions":"off","@typescript-eslint/ban-ts-comment":"off","@typescript-eslint/no-unnecessary-condition":"off","@typescript-eslint/consistent-indexed-object-style":"off","@typescript-eslint/no-unused-vars":"off","@typescript-eslint/no-unsafe-member-access":"off","sort-imports":"off","capitalized-comments":"off","line-comment-position":"off","no-inline-comments":"off","no-param-reassign":"off","id-length":"off","no-magic-numbers":"off","sort-keys":"off","func-style":"off","func-names":"off","no-undefined":"off","one-var":"off","no-ternary":"off","no-duplicate-imports":"off","symbol-description":"off"}},"jest":{"extensionsToTreatAsEsm":[".mts"],"transform":{"^.+\\.ts$":["ts-jest",{"isolatedModules":true,"diagnostics":false,"useESM":false}]},"collectCoverageFrom":["<rootDir>/src/**","!<rootDir>/src/**/*.spec.ts","!<rootDir>/src/**/*.test.ts"],"testMatch":["<rootDir>/src/**/*.spec.ts"]},"files":["tsconfig.json","SECURITY.md","/src/"]}
1
+ {"name":"@checkdigit/typescript-config","version":"3.3.0-PR.30-0551","description":"Check Digit standard Typescript configuration","prettier":"@checkdigit/prettier-config","engines":{"node":">=16"},"peerDependencies":{"@types/node":">=16","typescript":">=5.0.4 <5.1"},"repository":{"type":"git","url":"git+https://github.com/checkdigit/typescript-config.git"},"author":"Check Digit, LLC","license":"MIT","bugs":{"url":"https://github.com/checkdigit/typescript-config/issues"},"homepage":"https://github.com/checkdigit/typescript-config#readme","scripts":{"preversion":"npm test","postversion":"git push && git push --tags","lint:fix":"eslint -f unix --ext .ts,.mts src --fix","lint":"eslint -f unix --ext .ts,.mts src","prettier":"prettier --ignore-path .gitignore --list-different .","prettier:fix":"prettier --ignore-path .gitignore --write .","test":"npm run ci:compile && npm run ci:test && npm run ci:lint && npm run ci:style","build-builder":"tsc --module nodenext --outDir build-builder ./src/builder.mts","build-tsc-cjs":"rimraf build-tsc-cjs && tsc --outDir build-tsc-cjs","build-esbuild-cjs":"rimraf build-esbuild-cjs && esbuild ./src/*.ts ./src/*/*.ts --platform=node --bundle --format=cjs --sourcemap=inline --sources-content=false --outdir=build-esbuild-cjs","build-esbuild-cjs-bundle":"rimraf build-esbuild-cjs-bundle && esbuild src/index.test.ts --bundle --platform=node --format=cjs --sourcemap=inline --sources-content=false --outfile=build-esbuild-cjs-bundle/index.test.cjs","build-esbuild-esm":"rimraf build-esbuild-esm && node builder.mjs --outDir=build-esbuild-esm","build-esbuild-esm-bundle":"rimraf build-esbuild-esm-bundle && esbuild src/index.test.ts --bundle --platform=node --format=esm --sourcemap=inline --sources-content=false --outfile=build-esbuild-esm-bundle/index.test.mjs","test-jest":"NODE_OPTIONS=\"--experimental-vm-modules --enable-source-maps\" jest --runInBand --coverage=false esm","test-tsc-cjs":"node --test build-tsc-cjs/index.test.js","test-esbuild-cjs":"node --test build-esbuild-cjs/index.test.js","test-esbuild-cjs-bundle":"node --test build-esbuild-cjs-bundle/index.test.cjs","test-esbuild-esm":"node --test build-esbuild-esm/index.test.mjs","test-esbuild-esm-bundle":"echo 'node -test build-esbuild-esm-bundle/index.test.mjs'","ci:test":"npm run test-jest && npm run test-tsc-cjs && npm run test-esbuild-cjs && npm run test-esbuild-cjs-bundle && npm run test-esbuild-esm && npm run test-esbuild-esm-bundle","ci:compile":"npm run build-tsc-cjs && npm run build-esbuild-cjs && npm run build-esbuild-cjs-bundle && npm run build-esbuild-esm && npm run build-esbuild-esm-bundle","ci:lint":"npm run lint","ci:style":"npm run prettier"},"devDependencies":{"@checkdigit/prettier-config":"^3.4.0","@typescript-eslint/eslint-plugin":"^5.59.1","@typescript-eslint/parser":"^5.59.1","@types/jest":"^29.5.1","esbuild":"^0.17.18","eslint":"^8.39.0","eslint-config-prettier":"^8.8.0","get-port":"^6.1.2","got":"11.8.6","jest":"^29.5.0","rimraf":"^5.0.0","ts-jest":"^29.1.0"},"eslintConfig":{"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint"],"parserOptions":{"project":"./tsconfig.json"},"extends":["eslint:all","plugin:@typescript-eslint/recommended","plugin:@typescript-eslint/recommended-requiring-type-checking","plugin:@typescript-eslint/strict","prettier"],"rules":{"@typescript-eslint/non-nullable-type-assertion-style":"error","capitalized-comments":"off","one-var":"off","sort-keys":"off","func-style":["error","declaration",{"allowArrowFunctions":true}],"no-magic-numbers":["error",{"ignore":[1]}],"no-undefined":"off","no-ternary":"off"},"overrides":[{"files":["*.spec.mts","*.test.mts","*.spec.ts","*.test.ts"],"rules":{"@typescript-eslint/non-nullable-type-assertion-style":"off","@typescript-eslint/ban-types":"off","@typescript-eslint/require-await":"off","@typescript-eslint/consistent-type-definitions":"off","@typescript-eslint/ban-ts-comment":"off","@typescript-eslint/no-unnecessary-condition":"off","@typescript-eslint/consistent-indexed-object-style":"off","@typescript-eslint/no-unused-vars":"off","@typescript-eslint/no-unsafe-member-access":"off","sort-imports":"off","line-comment-position":"off","no-inline-comments":"off","no-param-reassign":"off","id-length":"off","no-magic-numbers":"off","func-names":"off","no-duplicate-imports":"off","symbol-description":"off"}}]},"jest":{"moduleFileExtensions":["js","mjs","cjs","ts","mts","json","node"],"extensionsToTreatAsEsm":[".mts"],"globals":{"ts-jest":{"compiler":"./node_modules/typescript"}},"transform":{"^.+\\.mts$":["ts-jest",{"isolatedModules":true,"diagnostics":false,"useESM":true}],"^.+\\.ts$":["ts-jest",{"isolatedModules":true,"diagnostics":false,"useESM":false}]},"collectCoverageFrom":["<rootDir>/src/**","!<rootDir>/src/**/*.spec.mts","!<rootDir>/src/**/*.test.mts","!<rootDir>/src/**/*.spec.ts","!<rootDir>/src/**/*.test.ts"],"testMatch":["<rootDir>/src/**/*.spec.ts","<rootDir>/src/**/*.spec.mts"]},"files":["tsconfig.json","SECURITY.md","/src/"]}
@@ -0,0 +1,120 @@
1
+ // builder.mts
2
+
3
+ import { strict as assert } from 'node:assert';
4
+ import { promises as fs } from 'node:fs';
5
+ import path from 'node:path';
6
+ import typescript from 'typescript';
7
+ import url from 'node:url';
8
+ // import { parseArgs } from 'node:util';
9
+
10
+ /*
11
+ * import { PluginBuild } from 'esbuild';
12
+ * import { build, PluginBuild } from 'esbuild';
13
+ */
14
+
15
+ /**
16
+ * Recursively obtains all files in a directory
17
+ * @param {string} directory
18
+ * @returns {Promise<string[]>}
19
+ */
20
+ async function getFiles(directory: string): Promise<string[]> {
21
+ const entries = await fs.readdir(directory, { withFileTypes: true });
22
+ const files = await Promise.all(
23
+ entries.map((entry) => {
24
+ const result = path.resolve(directory, entry.name);
25
+ return entry.isDirectory() ? getFiles(result) : result;
26
+ })
27
+ );
28
+ return files.flat();
29
+ }
30
+
31
+ // function setup(pluginBuild: PluginBuild) {
32
+ // pluginBuild.onResolve({ filter: /.*/u }, async (resolved) => {
33
+ // if (resolved.kind === 'entry-point' || !resolved.path.startsWith('.') || resolved.path.endsWith('.js')) {
34
+ // return { external: resolved.kind !== 'entry-point' };
35
+ // }
36
+ // let isDirectory = false;
37
+ // try {
38
+ // const stats = await fs.lstat(path.join(resolved.resolveDir, resolved.path));
39
+ // isDirectory = stats.isDirectory();
40
+ // } catch {
41
+ // // do nothing
42
+ // }
43
+ // let newPath = resolved.path;
44
+ // newPath += isDirectory ? `/index.mjs` : `.mjs`;
45
+ // return { path: newPath, external: true };
46
+ // });
47
+ // }
48
+
49
+ const inDir = 'lib',
50
+ outDir = 'hello';
51
+
52
+ /*
53
+ * const {
54
+ * values: { inDir, outDir },
55
+ * } = parseArgs({
56
+ * options: {
57
+ * inDir: { type: 'string', short: 'i', default: 'src' },
58
+ * outDir: { type: 'string', short: 'o', default: 'build' },
59
+ * },
60
+ * });
61
+ */
62
+
63
+ /**
64
+ * Emit declarations using typescript compiler
65
+ */
66
+ const sourceDirectory = path.join(path.dirname(url.fileURLToPath(import.meta.url)), inDir as string);
67
+ const allSourceFiles = await getFiles(sourceDirectory);
68
+ const productionSourceFiles = allSourceFiles.filter(
69
+ // && !file.endsWith('.test.ts') && !file.endsWith('.spec.ts')
70
+ (file) => file.endsWith('.ts')
71
+ );
72
+
73
+ // eslint-disable-next-line @typescript-eslint/unbound-method
74
+ const configFile = typescript.readConfigFile('./tsconfig.json', typescript.sys.readFile);
75
+ const compilerOptions = typescript.parseJsonConfigFileContent(configFile.config, typescript.sys, './');
76
+
77
+ const program = typescript.createProgram(productionSourceFiles, {
78
+ ...compilerOptions.options,
79
+ noEmitOnError: true,
80
+ emitDeclarationOnly: true,
81
+ rootDir: inDir as string,
82
+ outDir: outDir as string,
83
+ });
84
+ const emitResult = program.emit();
85
+ const allDiagnostics = [...typescript.getPreEmitDiagnostics(program), ...emitResult.diagnostics];
86
+ for (const diagnostic of allDiagnostics) {
87
+ if (diagnostic.file) {
88
+ assert.ok(diagnostic.start !== undefined);
89
+ const { line, character } = typescript.getLineAndCharacterOfPosition(diagnostic.file, diagnostic.start);
90
+ const message = typescript.flattenDiagnosticMessageText(diagnostic.messageText, '\n');
91
+ // eslint-disable-next-line no-console
92
+ console.log(`${diagnostic.file.fileName} (${line + 1},${character + 1}): ${message}`);
93
+ } else {
94
+ // eslint-disable-next-line no-console
95
+ console.log(typescript.flattenDiagnosticMessageText(diagnostic.messageText, '\n'));
96
+ }
97
+ }
98
+ // if (emitResult.emitSkipped) {
99
+ // throw new Error('TypeScript compilation failed');
100
+ // }
101
+ //
102
+ // /**
103
+ // * Emit ESM javascript using esbuild
104
+ // */
105
+ // await build({
106
+ // entryPoints: productionSourceFiles,
107
+ // bundle: true,
108
+ // platform: 'node',
109
+ // format: 'esm',
110
+ // outdir: outDir as string,
111
+ // sourcemap: 'inline',
112
+ // sourcesContent: false,
113
+ // outExtension: { '.js': '.mjs' },
114
+ // plugins: [
115
+ // {
116
+ // name: 'resolve-ts',
117
+ // setup,
118
+ // },
119
+ // ],
120
+ // });
@@ -0,0 +1,9 @@
1
+ // builder.spec.mts
2
+
3
+ import './builder';
4
+
5
+ describe('test builder', () => {
6
+ it('should build', () => {
7
+ expect(true).toBe(true);
8
+ });
9
+ });
@@ -0,0 +1,11 @@
1
+ // typescript-5.0-esm.spec.ts
2
+
3
+ import { strict as assert } from 'node:assert';
4
+
5
+ import getPort from 'get-port'; // ESM version of get-port
6
+
7
+ describe('typescript-5.0 ESM', () => {
8
+ it('should work with ESM modules', async () => {
9
+ assert.equal(typeof (await getPort()), 'number');
10
+ });
11
+ });
package/tsconfig.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "compilerOptions": {
3
- "module": "commonjs",
3
+ "module": "nodenext",
4
4
  "target": "esnext",
5
5
  "sourceMap": true,
6
6
  "inlineSources": true,
@@ -1,11 +0,0 @@
1
- // describe-it.ts
2
-
3
- import { describe as nodeDescribe, it as nodeIt } from 'node:test';
4
-
5
- /**
6
- * If we're running inside a Jest environment, "describe" and "it" will be defined globally. If not, we fall back to
7
- * the built-in node.js test runner.
8
- */
9
-
10
- export const describe = globalThis.describe ?? nodeDescribe;
11
- export const it = globalThis.it ?? nodeIt;
package/src/index.ts DELETED
@@ -1,12 +0,0 @@
1
- // index.ts
2
-
3
- import './lib/es2023.spec';
4
- import './lib/esnext.full.spec';
5
-
6
- import './typescript-4.4.spec';
7
- import './typescript-4.5.spec';
8
- import './typescript-4.6.spec';
9
- import './typescript-4.7.spec';
10
- import './typescript-4.8.spec';
11
- import './typescript-4.9.spec';
12
- import './typescript-5.0.spec';
package/src/module.ts DELETED
@@ -1,9 +0,0 @@
1
- // module.ts
2
-
3
- export function test() {
4
- return 'export function test';
5
- }
6
-
7
- export default function () {
8
- return 'export default function';
9
- }