@halospv3/hce.shared-config 3.0.0-develop.9 → 3.1.0-develop.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (74) hide show
  1. package/CHANGELOG.md +395 -67
  2. package/dotnet/.github/workflows/_unit_test.yml +3 -3
  3. package/dotnet/.github/workflows/dotnet-release.yml +3 -3
  4. package/dotnet/.github/workflows/sample-dotnet-build.yml +2 -2
  5. package/dotnet/PublishAll.targets +3 -2
  6. package/dotnet/ZipPublishDir.targets +24 -29
  7. package/dotnet/samples/HCE.Shared.SignAfterPack/sampleCert.samplepfx +0 -0
  8. package/mjs/debug.d.ts +4 -2
  9. package/mjs/debug.d.ts.map +1 -1
  10. package/mjs/debug.mjs +6 -4
  11. package/mjs/debug.mjs.map +1 -1
  12. package/mjs/dotnet/GitlabNugetRegistryInfo.d.ts +2 -3
  13. package/mjs/dotnet/GitlabNugetRegistryInfo.d.ts.map +1 -1
  14. package/mjs/dotnet/GitlabNugetRegistryInfo.mjs +2 -2
  15. package/mjs/dotnet/GitlabNugetRegistryInfo.mjs.map +1 -1
  16. package/mjs/dotnet/IsNextVersionAlreadyPublished.cli.mjs +39 -21
  17. package/mjs/dotnet/IsNextVersionAlreadyPublished.cli.mjs.map +1 -1
  18. package/mjs/dotnet/MSBuildProject.d.ts +4 -5
  19. package/mjs/dotnet/MSBuildProject.d.ts.map +1 -1
  20. package/mjs/dotnet/MSBuildProject.mjs +5 -5
  21. package/mjs/dotnet/MSBuildProject.mjs.map +1 -1
  22. package/mjs/dotnet/NugetProjectProperties.d.ts +3 -3
  23. package/mjs/dotnet/NugetProjectProperties.d.ts.map +1 -1
  24. package/mjs/dotnet/NugetRegistryInfo.d.ts +7 -7
  25. package/mjs/dotnet/NugetRegistryInfo.d.ts.map +1 -1
  26. package/mjs/dotnet/NugetRegistryInfo.mjs +4 -4
  27. package/mjs/dotnet/NugetRegistryInfo.mjs.map +1 -1
  28. package/mjs/dotnet/helpers.d.ts +2 -2
  29. package/mjs/dotnet/helpers.d.ts.map +1 -1
  30. package/mjs/dotnet/helpers.mjs +4 -4
  31. package/mjs/dotnet/helpers.mjs.map +1 -1
  32. package/mjs/dotnet/index.d.ts +0 -8
  33. package/mjs/dotnet/index.d.ts.map +1 -1
  34. package/mjs/dotnet.d.ts +0 -1
  35. package/mjs/dotnet.d.ts.map +1 -1
  36. package/mjs/eslintConfig.d.ts +2 -2
  37. package/mjs/eslintConfig.d.ts.map +1 -1
  38. package/mjs/eslintConfig.mjs +25 -60
  39. package/mjs/eslintConfig.mjs.map +1 -1
  40. package/mjs/semanticReleaseConfigDotnet.d.ts.map +1 -1
  41. package/mjs/semanticReleaseConfigDotnet.mjs +6 -5
  42. package/mjs/semanticReleaseConfigDotnet.mjs.map +1 -1
  43. package/mjs/utils/env.d.ts.map +1 -1
  44. package/mjs/utils/env.mjs +5 -1
  45. package/mjs/utils/env.mjs.map +1 -1
  46. package/mjs/utils/execAsync.d.ts +2 -2
  47. package/mjs/utils/execAsync.d.ts.map +1 -1
  48. package/mjs/utils/execAsync.mjs +2 -2
  49. package/mjs/utils/execAsync.mjs.map +1 -1
  50. package/mjs/utils/isError.d.ts +11 -0
  51. package/mjs/utils/isError.d.ts.map +1 -0
  52. package/mjs/utils/isError.mjs +19 -0
  53. package/mjs/utils/isError.mjs.map +1 -0
  54. package/mjs/utils/miscTypes.d.ts +1 -2
  55. package/mjs/utils/miscTypes.d.ts.map +1 -1
  56. package/package.json +22 -19
  57. package/src/debug.ts +5 -4
  58. package/src/dotnet/GitlabNugetRegistryInfo.ts +4 -5
  59. package/src/dotnet/IsNextVersionAlreadyPublished.cli.ts +53 -36
  60. package/src/dotnet/MSBuildProject.ts +8 -9
  61. package/src/dotnet/NugetProjectProperties.ts +2 -3
  62. package/src/dotnet/NugetRegistryInfo.ts +11 -12
  63. package/src/dotnet/helpers.ts +11 -9
  64. package/src/dotnet/index.ts +0 -9
  65. package/src/dotnet.ts +0 -1
  66. package/src/eslintConfig.ts +33 -125
  67. package/src/semanticReleaseConfigDotnet.ts +8 -12
  68. package/src/utils/env.ts +7 -1
  69. package/src/utils/execAsync.ts +4 -5
  70. package/src/utils/isError.ts +18 -0
  71. package/src/utils/miscTypes.ts +1 -2
  72. package/tsconfig.base.json +54 -0
  73. package/tsconfig.json +22 -0
  74. package/tsconfig.mjs.json +8 -0
@@ -1,81 +1,41 @@
1
1
  import eslint from '@eslint/js';
2
+ import { defineConfig, globalIgnores as setGlobalIgnores } from 'eslint/config';
3
+ import { type Linter } from 'eslint';
2
4
  import stylistic, { type RuleOptions } from '@stylistic/eslint-plugin';
3
- import type { TSESLint } from '@typescript-eslint/utils';
4
- import jsonc from 'eslint-plugin-jsonc';
5
+ import json from '@eslint/json';
5
6
  import globals from 'globals/globals.json' with { type: 'json' };
6
7
  import tseslint from 'typescript-eslint';
7
8
 
8
9
  // https://eslint.org/docs/latest/use/configure/migration-guide#using-eslintrc-configs-in-flat-config
9
10
  // https://www.google.com/search?q=javascript+recurse+through+object+and+remove+undefined+properties
10
11
 
11
- const globalIgnores: TSESLint.FlatConfig.Config = {
12
- name: 'global ignores',
13
- ignores: [
14
- '_tsout/**/*',
15
- '_tsout/*',
16
- '_tsout/',
17
- 'cjs/**/*',
18
- 'cjs/*/*',
19
- 'cjs/*',
20
- 'mjs/**/*',
21
- 'mjs/*',
22
- 'mjs/',
23
- 'node_modules/**/*',
24
- '**/node_modules/**/*',
25
- '**/*.tsbuildinfo',
26
- '**/bin/**/*',
27
- '**/obj/**/*',
28
- ],
29
- };
12
+ const globalIgnores: ReturnType<typeof setGlobalIgnores> = setGlobalIgnores([
13
+ '_tsout/**/*',
14
+ '_tsout/*',
15
+ '_tsout/',
16
+ 'cjs/**/*',
17
+ 'cjs/*/*',
18
+ 'cjs/*',
19
+ 'mjs/**/*',
20
+ 'mjs/*',
21
+ 'mjs/',
22
+ 'node_modules/**/*',
23
+ '**/node_modules/**/*',
24
+ '**/*.tsbuildinfo',
25
+ '**/bin/**/*',
26
+ '**/obj/**/*',
27
+ '.pnp.cjs',
28
+ '.pnp.loader.mjs',
29
+ '.yarn/sdks/**',
30
+ ]);
30
31
 
31
- const json_json = {
32
- /** jsonc config union types are a pain to work with. Each union member is mutually exclusive to the others */
33
- ...jsonc.configs['flat/recommended-with-json']
34
- .map(v => v as JsoncCfgReducerIn)
35
- .flatMap(a => jsonCfgReducer(a, {}))
36
- // eslint-disable-next-line unicorn/no-array-reduce
37
- .reduce((accumulator, element) => jsonCfgReducer(accumulator, element), {} as JsoncCfgReducerOut),
38
- name: 'flat/recommended-with-json - https://github.com/ota-meshi/eslint-plugin-jsonc' as const,
39
- files: ['*.json', '**/*.json'] as ['*.json', '**/*.json'],
40
- ignores: globalIgnores.ignores,
41
- };
42
- const json_json5 = {
43
- /** jsonc config union types are a pain to work with. Each union member is mutually exclusive to the others */
44
- ...jsonc.configs['flat/recommended-with-json5']
45
- .map(v => v as JsoncCfgReducerIn)
46
- .flatMap(a => jsonCfgReducer(a, {}))
47
- // eslint-disable-next-line unicorn/no-array-reduce
48
- .reduce((accumulator, element) => jsonCfgReducer(accumulator, element), {} as JsoncCfgReducerOut),
49
- name: 'flat/recommended-with-json5 - https://github.com/ota-meshi/eslint-plugin-jsonc' as const,
50
- files: ['*.json5', '**/*.json5'] as ['*.json5', '**/*.json5'],
51
- ignores: globalIgnores.ignores,
52
- };
53
- const json_jsonc = {
54
- /** jsonc config union types are a pain to work with. Each union member is mutually exclusive to the others */
55
- ...jsonc.configs['flat/recommended-with-jsonc']
56
- .map(v => v as JsoncCfgReducerIn)
57
- .flatMap(a => jsonCfgReducer(a, {}))
58
- // eslint-disable-next-line unicorn/no-array-reduce
59
- .reduce((accumulator, element) => jsonCfgReducer(accumulator, element), {} as JsoncCfgReducerOut),
60
- name: 'flat/recommended-with-jsonc - https://github.com/ota-meshi/eslint-plugin-jsonc' as const,
61
- files: ['*.jsonc', '**/*.jsonc'] as ['*.jsonc', '**/*.jsonc'],
62
- ignores: globalIgnores.ignores,
63
- };
64
-
65
- const stylisticWarn = stylistic.configs.customize({
32
+ const stylisticWarn: Linter.Config = stylistic.configs.customize({
66
33
  quoteProps: 'as-needed',
67
34
  semi: true,
68
35
  indent: 2,
69
- }) as TSESLint.FlatConfig.Config & { rules: { [K in keyof RuleOptions]: TSESLint.SharedConfig.RuleLevel | [TSESLint.SharedConfig.RuleLevel, ...RuleOptions[K]] } };
70
- // change all stylistic error-severity to warn-severity. Style violations should not denote code errors.
71
- for (const key in stylisticWarn.rules) {
72
- const element = stylisticWarn.rules[key];
73
- if (Array.isArray(element) && (element[0] === 2 || element[0] === 'error'))
74
- element[0] = 'warn';
75
- else if (element === 2 || element === 'error') {
76
- stylisticWarn.rules[key] = 'warn' satisfies TSESLint.SharedConfig.RuleLevel;
77
- }
78
- }
36
+ severity: 'warn',
37
+ });
38
+ stylisticWarn.rules ??= {};
79
39
 
80
40
  stylisticWarn.rules['@stylistic/no-extra-parens'] = [
81
41
  'warn',
@@ -84,7 +44,7 @@ stylisticWarn.rules['@stylistic/no-extra-parens'] = [
84
44
  allowParensAfterCommentPattern: '@type|@satisfies',
85
45
  nestedBinaryExpressions: false,
86
46
  },
87
- ];
47
+ ] satisfies Linter.RuleEntry<RuleOptions['@stylistic/no-extra-parens']>;
88
48
 
89
49
  stylisticWarn.rules['@stylistic/semi'] = [
90
50
  'warn',
@@ -93,12 +53,13 @@ stylisticWarn.rules['@stylistic/semi'] = [
93
53
  omitLastInOneLineBlock: false,
94
54
  omitLastInOneLineClassBody: false,
95
55
  },
96
- ] satisfies TSESLint.SharedConfig.RuleEntry | [TSESLint.SharedConfig.RuleLevelAndOptions, RuleOptions['@stylistic/semi'][0], RuleOptions['@stylistic/semi'][1]];
56
+ ] satisfies Linter.RuleEntry<RuleOptions['@stylistic/semi']>;
97
57
 
98
- const config: TSESLint.FlatConfig.ConfigArray = tseslint.config(
99
- json_json,
100
- json_json5,
101
- json_jsonc,
58
+ const config: ReturnType<typeof defineConfig> = defineConfig(
59
+ { ...json.configs.recommended, name: 'JSON Recommended', files: ['**/*.json'], language: 'json/json' },
60
+ { name: 'JSON - Allow empty keys in package-lock.json', files: ['**/package-lock.json'], rules: { 'json/no-empty-keys': 'off' } },
61
+ { ...json.configs.recommended, name: 'JSONC Recommended', files: ['**/*.jsonc'], language: 'json/jsonc' },
62
+ { ...json.configs.recommended, name: 'JSON5 Recommended', files: ['**/*.json5'], language: 'json/json5' },
102
63
  {
103
64
  name: 'TSJS',
104
65
  extends: [
@@ -128,56 +89,3 @@ const config: TSESLint.FlatConfig.ConfigArray = tseslint.config(
128
89
  globalIgnores,
129
90
  );
130
91
  export default config;
131
-
132
- type JsoncCfgReducerIn = Partial<typeof jsonc.configs['flat/recommended-with-jsonc'][number]>
133
- | Partial<typeof jsonc.configs['flat/recommended-with-json5'][number]>;
134
-
135
- interface JsoncCfgReducerOut {
136
- files: NonNullable<(typeof jsonc.configs)['flat/base'][number]['files']> | ['*.json', '**/*.json', '*.json5', '**/*.json5', '*.jsonc', '**/*.jsonc'];
137
- plugins: typeof jsonc.configs['flat/base'][number]['plugins'];
138
- languageOptions: {
139
- parser: typeof import('jsonc-eslint-parser');
140
- };
141
- rules: NonNullable<
142
- typeof jsonc['configs']['flat/recommended-with-json5'][number]['rules']
143
- | typeof jsonc.configs['flat/recommended-with-jsonc'][number]['rules']
144
- >;
145
- }
146
-
147
- /**
148
- * Merge erroneously mutually-exclusive configs from `eslint-plugin-jsonc`.
149
- * @param a A config exported by `eslint-plugin-jsonc` -OR- the output of this function.
150
- * @param b A config exported by `eslint-plugin-jsonc` -OR- the output of this function.
151
- * @returns A merged combination of {@link a} and {@link b}.
152
- */
153
- function jsonCfgReducer(
154
- a: JsoncCfgReducerIn | JsoncCfgReducerOut,
155
- b: JsoncCfgReducerIn | JsoncCfgReducerOut,
156
- ): JsoncCfgReducerOut {
157
- const baseRules = jsonc.configs['flat/base']
158
- .find(
159
- v => v.rules !== undefined,
160
- )?.rules ?? (() => { throw new Error('Unable to find jsonc base rules'); })();
161
-
162
- return {
163
- files: jsonc.configs['flat/base']
164
- .filter(v => v.files !== undefined)
165
- .flatMap(v => v.files),
166
- plugins: {
167
- jsonc: jsonc.configs['flat/base']
168
- .find(v =>
169
- v.plugins?.jsonc !== undefined,
170
- )?.plugins?.jsonc ?? (() => { throw new Error('Unable to find jsonc plugin'); })(),
171
- },
172
- languageOptions: {
173
- parser: jsonc.configs['flat/base']
174
- .find(v => v.languageOptions?.parser)
175
- ?.languageOptions?.parser ?? (() => { throw new Error('Unable to find jsonc parser'); })(),
176
- },
177
- rules: {
178
- ...a.rules,
179
- ...b.rules,
180
- ...baseRules,
181
- },
182
- };
183
- }
@@ -80,7 +80,7 @@ export class SemanticReleaseConfigDotnet {
80
80
  this._projectsToPublish = p;
81
81
  }
82
82
  else if (debug.enabled) {
83
- debug.log(new Error('At least one project must be published. `projectsToPackAndPush` is empty and environment variable `PROJECTS_TO_PUBLISH` is undefined or empty.'));
83
+ debug(new Error('At least one project must be published. `projectsToPackAndPush` is empty and environment variable `PROJECTS_TO_PUBLISH` is undefined or empty.'));
84
84
  }
85
85
  }
86
86
 
@@ -91,7 +91,7 @@ export class SemanticReleaseConfigDotnet {
91
91
  this._projectsToPackAndPush = p;
92
92
  }
93
93
  else if (debug.enabled) {
94
- debug.log(new Error('projectsToPackAndPush.length must be > 0 or PROJECTS_TO_PACK_AND_PUSH must be defined and contain at least one path.'));
94
+ debug(new Error('projectsToPackAndPush.length must be > 0 or PROJECTS_TO_PACK_AND_PUSH must be defined and contain at least one path.'));
95
95
  }
96
96
  }
97
97
 
@@ -185,16 +185,13 @@ Appending it to the end of the array...This may cause an unexpected order of ope
185
185
  ? `${execOptions.verifyConditionsCmd} && ${verifyConditionsCmdAppendix}`
186
186
  : verifyConditionsCmdAppendix;
187
187
 
188
- const verifyReleaseCmdAppendix = await Promise.all(
189
- this.ProjectsToPackAndPush
188
+ const verifyReleaseCmdAppendix
189
+ = this.ProjectsToPackAndPush
190
190
  .filter(project =>
191
191
  typeof project !== 'string',
192
192
  ).map(project =>
193
193
  project.GetIsNextVersionAlreadyPublishedCommand(),
194
- ),
195
- ).then(cmds =>
196
- cmds.join(' && '),
197
- );
194
+ ).join(' && ');
198
195
  execOptions.verifyReleaseCmd
199
196
  = execOptions.verifyReleaseCmd && execOptions.verifyReleaseCmd.trim().length > 0
200
197
  ? `${execOptions.verifyReleaseCmd} && ${verifyReleaseCmdAppendix}`
@@ -364,7 +361,7 @@ export async function getConfig(
364
361
  projectsToPackAndPush?: string[] | NugetRegistryInfo[],
365
362
  ): Promise<Options> {
366
363
  if (debug.enabled) {
367
- debug.log(
364
+ debug(
368
365
  'hce.shared-config:\n' + inspect(baseConfig, false, Infinity, true),
369
366
  );
370
367
  }
@@ -410,9 +407,8 @@ export async function getConfig(
410
407
 
411
408
  const options: Options = config.toOptions();
412
409
  if (debug.enabled) {
413
- console.debug(
414
- `modified plugins array:\n${inspect(options.plugins, false, Infinity)}`,
415
- );
410
+ debug('modified plugins array:');
411
+ debug(inspect(options.plugins, false, Infinity));
416
412
  }
417
413
 
418
414
  return options;
package/src/utils/env.ts CHANGED
@@ -5,6 +5,9 @@ import { get,
5
5
  } from '@dotenvx/dotenvx';
6
6
  import { env } from 'node:process';
7
7
 
8
+ /** `get` can return `undefined`. It can also return a `Record`, but that's internal. */
9
+ type Get = (key: string, options?: GetOptions) => string | undefined;
10
+
8
11
  /**
9
12
  * A thin wrapper for {@link loadDotenv}. Loads a .env file from {@link process.cwd()} with the given options (or defaults), returns the new value of {@link process.env} with optional overrides.
10
13
  * @param [dotenvOptions] An optional {@link DotenvConfigOptions} object to pass to {@link loadDotenv}.
@@ -36,7 +39,10 @@ export function getEnv(dotenvOptions?: DotenvConfigOptions, overrides?: NodeJS.P
36
39
  */
37
40
  export function getEnvVarValue(envVar: string, options?: GetOptions): string | undefined {
38
41
  options ??= { ignore: ['MISSING_KEY', 'MISSING_ENV_FILE'] };
39
- const value = String(env[envVar] ?? get(envVar, options)).trim();
42
+ let value = env[envVar];
43
+ const x = (get as Get)(envVar, options);
44
+ if (typeof x === 'string')
45
+ value = x;
40
46
  // I hate this. Why is undefined converted to a string?
41
47
  return value === '' || value === 'undefined'
42
48
  ? undefined
@@ -1,10 +1,9 @@
1
1
  /* eslint-disable jsdoc/no-defaults */
2
- import { type } from 'arktype';
3
- import type { ObjectType } from 'arktype/internal/methods/object.ts';
2
+ import { type, type Type } from 'arktype';
4
3
  import { exec } from 'node:child_process';
5
4
  import { constants } from 'node:os';
6
5
  import { promisify } from 'node:util';
7
- import { isNativeError } from 'node:util/types';
6
+ import { isError } from './isError.js';
8
7
 
9
8
  /**
10
9
  * A `promisify(exec)` wrapper to optionally assign the child process's STDERR as the {@link Error.prototype.cause}.
@@ -19,7 +18,7 @@ export async function execAsync(command: string, setStderrAsCause = false): Prom
19
18
  stderr: string;
20
19
  }> {
21
20
  return await promisify(exec)(command).catch((error: unknown): never => {
22
- if (!isNativeError(error))
21
+ if (!isError(error))
23
22
  throw new Error(JSON.stringify(error));
24
23
 
25
24
  if (setStderrAsCause && 'stderr' in error && typeof error.stderr === 'string' && error.stderr !== '')
@@ -40,7 +39,7 @@ export async function execAsync(command: string, setStderrAsCause = false): Prom
40
39
  });
41
40
  }
42
41
 
43
- const T_ExecException: ObjectType<{
42
+ const T_ExecException: Type<{
44
43
  name: string;
45
44
  message: string;
46
45
  stack?: string | undefined;
@@ -0,0 +1,18 @@
1
+ import { isNativeError } from 'node:util/types';
2
+
3
+ /** @import 'typescript/lib/lib.esnext.error.d.ts' */
4
+
5
+ /**
6
+ * Compatibility wrapper for ES2026 (Node.js 25)
7
+ * {@link Error.isError Error.isError}
8
+ * with failover to the deprecated {@link isNativeError utils.types.isNativeError}.
9
+ * @param error A parameter which may be an Error.
10
+ * @returns `true` if {@link error} is derived from or is sufficiently similar to {@link Error}. Else, `false`.
11
+ * Note: DOMExceptions will result in `false`
12
+ */
13
+ export function isError(error: unknown): error is Error {
14
+ return 'isError' in Error && typeof Error.isError === 'function' && Error.isError.length > 0
15
+ ? (Error.isError as typeof isError)(error)
16
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
17
+ : isNativeError(error);
18
+ }
@@ -1,7 +1,6 @@
1
1
  import { type, type Type } from 'arktype';
2
- import type { StringType } from 'arktype/internal/methods/string.ts';
3
2
 
4
- export const tBooleanString: StringType<'false' | 'true'> = type('"true" | "false"');
3
+ export const tBooleanString: Type<'false' | 'true'> = type('"true" | "false"');
5
4
  export type BooleanString = typeof tBooleanString.infer;
6
5
 
7
6
  export const tEmptyOrBooleanString: Type<'' | 'false' | 'true'> = type(tBooleanString.or('""'));
@@ -0,0 +1,54 @@
1
+ {
2
+ "$schema": "https://json.schemastore.org/tsconfig#",
3
+ "//": {
4
+ "Typescript Node.js Target Mapping": "https://github.com/microsoft/TypeScript/wiki/Node-Target-Mapping",
5
+ "Node.js ECMAScript Mapping": "https://node.green/",
6
+ "vscode-versions": "https://github.com/ewanharris/vscode-versions",
7
+ "Recommended TSConfig Bases": "https://github.com/tsconfig/bases?tab=readme-ov-file#table-of-tsconfigs",
8
+ "Available/Latest GitHub Runner Images": "https://github.com/actions/runner-images/tree/main?tab=readme-ov-file#available-images",
9
+ "Node.js versions in GitHub Runner Images": {
10
+ "Ubuntu 2404 - Node.js version(s)": {
11
+ "installed": "https://github.com/actions/runner-images/blob/main/images/ubuntu/Ubuntu2404-Readme.md#language-and-runtime",
12
+ "cached": "https://github.com/actions/runner-images/blob/main/images/ubuntu/Ubuntu2404-Readme.md#nodejs"
13
+ },
14
+ "macOS 14": {
15
+ "installed": "https://github.com/actions/runner-images/blob/main/images/macos/macos-14-Readme.md#language-and-runtime",
16
+ "cached": "https://github.com/actions/runner-images/blob/main/images/macos/macos-14-Readme.md#nodejs"
17
+ },
18
+ "Windows Server 2022": {
19
+ "!note!": "[Windows 19 and 22] Node.js version 16 will be removed from Windows images on 2025-05-05. See https://github.com/actions/runner-images/issues/11710",
20
+ "installed": "https://github.com/actions/runner-images/blob/main/images/windows/Windows2022-Readme.md#language-and-runtime",
21
+ "cached": "https://github.com/actions/runner-images/blob/main/images/windows/Windows2022-Readme.md#nodejs"
22
+ }
23
+ }
24
+ },
25
+ "compileOnSave": true,
26
+ "extends": "./node_modules/@tsconfig/node20/tsconfig.json",
27
+ "compilerOptions": {
28
+ "composite": true,
29
+ "declarationMap": true,
30
+ "emitDeclarationOnly": true,
31
+ "forceConsistentCasingInFileNames": true,
32
+ "isolatedDeclarations": true,
33
+ "isolatedModules": true,
34
+ "module": "Node18",
35
+ "noEmitOnError": true,
36
+ "noErrorTruncation": true,
37
+ "noFallthroughCasesInSwitch": true,
38
+ "noImplicitOverride": true,
39
+ "noImplicitReturns": true,
40
+ "noPropertyAccessFromIndexSignature": true,
41
+ "noUncheckedIndexedAccess": true,
42
+ "noUnusedLocals": true,
43
+ "noUnusedParameters": true,
44
+ "resolveJsonModule": true,
45
+ "skipLibCheck": true,
46
+ "sourceMap": true,
47
+ "verbatimModuleSyntax": true
48
+ },
49
+ "exclude": [
50
+ "**/node_modules/**",
51
+ "**/tsconfig.json",
52
+ "**/tsconfig.*.json"
53
+ ]
54
+ }
package/tsconfig.json ADDED
@@ -0,0 +1,22 @@
1
+ {
2
+ "extends": "./tsconfig.base.json",
3
+ "compilerOptions": {
4
+ "allowImportingTsExtensions": true,
5
+ "outDir": "_tsout",
6
+ "target": "es2020",
7
+ "erasableSyntaxOnly": true
8
+ },
9
+ "include": [
10
+ "./*.cts",
11
+ "./*.mts",
12
+ "./*.ts"
13
+ ],
14
+ "references": [
15
+ {
16
+ "path": "./tests/tsconfig.json"
17
+ },
18
+ {
19
+ "path": "./src/tsconfig.json"
20
+ }
21
+ ]
22
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "extends": "./src/tsconfig.json",
3
+ "compilerOptions": {
4
+ "declarationDir": "./mjs/",
5
+ "outDir": "./mjs/",
6
+ "rootDir": "./src/"
7
+ }
8
+ }