tshy 3.1.3 → 3.2.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.
@@ -56,8 +56,8 @@ const cleanRemovedOutputs = async (path, root) => {
56
56
  };
57
57
  export default async () => {
58
58
  const config = readTypescriptConfig();
59
- if (config.options.incremental !== true &&
60
- config.options.composite !== true) {
59
+ if (config.compilerOptions.incremental !== true &&
60
+ config.compilerOptions.composite !== true) {
61
61
  return await rimraf('.tshy-build');
62
62
  }
63
63
  let buildInfos = undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"clean-build-tmp.js","sourceRoot":"","sources":["../../src/clean-build-tmp.ts"],"names":[],"mappings":"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","sourcesContent":["// Remove the .tshy-build folder, but ONLY if\n// the \"incremental\" config value is not set, or if\n// it does not contain any tsbuildinfo files.\n// If we are in incremental mode, and have tsbuildinfo files,\n// then find and remove any files here that do not have a matching\n// source file in ./src\n\nimport { readdirSync } from 'fs'\nimport { parse } from 'path'\nimport { rimraf } from 'rimraf'\nimport * as console from './console.js'\nimport readTypescriptConfig from './read-typescript-config.js'\n\nconst cleanRemovedOutputs = async (path: string, root: string) => {\n const entries = readdirSync(`${root}/${path}`, {\n withFileTypes: true,\n })\n let sources: Set<string> | undefined = undefined\n try {\n sources = new Set(readdirSync(`src/${path}`))\n } catch {}\n // directory was removed\n if (!sources) {\n return await rimraf(`${root}/${path}`)\n }\n for (const e of entries) {\n const outputFile = `${path}/${e.name}`\n if (e.isDirectory()) {\n await cleanRemovedOutputs(outputFile, root)\n continue\n }\n let { ext, name } = parse(outputFile)\n if (ext === '.map') {\n continue\n }\n if (name.endsWith('.d') && ext.endsWith('ts')) {\n ext = '.d' + ext\n name = name.substring(0, name.length - '.d'.length)\n }\n\n const inputSearch =\n ext === '.js' || ext === '.d.ts' ? ['.tsx', '.ts']\n : ext === '.mjs' || ext === '.d.mts' ? ['.mts']\n : ext === '.cjs' || ext === '.d.cts' ? ['.cts']\n : []\n inputSearch.push(ext)\n let del = true\n for (const ext of inputSearch) {\n if (sources.has(`${name}${ext}`)) {\n del = false\n break\n }\n }\n if (del) {\n console.debug('removing output file', outputFile)\n await rimraf([`${root}/${outputFile}`, `${root}/${outputFile}.map`])\n }\n }\n}\n\nexport default async () => {\n const config = readTypescriptConfig()\n if (\n config.options.incremental !== true &&\n config.options.composite !== true\n ) {\n return await rimraf('.tshy-build')\n }\n\n let buildInfos: string[] | undefined = undefined\n try {\n buildInfos = readdirSync('.tshy-build/.tshy')\n } catch {}\n if (!buildInfos?.length) {\n return await rimraf('.tshy-build')\n }\n\n // delete anything that has been removed from src.\n for (const dialect of readdirSync('.tshy-build')) {\n if (dialect === '.tshy') continue\n await cleanRemovedOutputs('.', `.tshy-build/${dialect}`)\n }\n}\n"]}
1
+ {"version":3,"file":"clean-build-tmp.js","sourceRoot":"","sources":["../../src/clean-build-tmp.ts"],"names":[],"mappings":"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","sourcesContent":["// Remove the .tshy-build folder, but ONLY if\n// the \"incremental\" config value is not set, or if\n// it does not contain any tsbuildinfo files.\n// If we are in incremental mode, and have tsbuildinfo files,\n// then find and remove any files here that do not have a matching\n// source file in ./src\n\nimport { readdirSync } from 'fs'\nimport { parse } from 'path'\nimport { rimraf } from 'rimraf'\nimport * as console from './console.js'\nimport readTypescriptConfig from './read-typescript-config.js'\n\nconst cleanRemovedOutputs = async (path: string, root: string) => {\n const entries = readdirSync(`${root}/${path}`, {\n withFileTypes: true,\n })\n let sources: Set<string> | undefined = undefined\n try {\n sources = new Set(readdirSync(`src/${path}`))\n } catch {}\n // directory was removed\n if (!sources) {\n return await rimraf(`${root}/${path}`)\n }\n for (const e of entries) {\n const outputFile = `${path}/${e.name}`\n if (e.isDirectory()) {\n await cleanRemovedOutputs(outputFile, root)\n continue\n }\n let { ext, name } = parse(outputFile)\n if (ext === '.map') {\n continue\n }\n if (name.endsWith('.d') && ext.endsWith('ts')) {\n ext = '.d' + ext\n name = name.substring(0, name.length - '.d'.length)\n }\n\n const inputSearch =\n ext === '.js' || ext === '.d.ts' ? ['.tsx', '.ts']\n : ext === '.mjs' || ext === '.d.mts' ? ['.mts']\n : ext === '.cjs' || ext === '.d.cts' ? ['.cts']\n : []\n inputSearch.push(ext)\n let del = true\n for (const ext of inputSearch) {\n if (sources.has(`${name}${ext}`)) {\n del = false\n break\n }\n }\n if (del) {\n console.debug('removing output file', outputFile)\n await rimraf([`${root}/${outputFile}`, `${root}/${outputFile}.map`])\n }\n }\n}\n\nexport default async () => {\n const config = readTypescriptConfig()\n if (\n config.compilerOptions.incremental !== true &&\n config.compilerOptions.composite !== true\n ) {\n return await rimraf('.tshy-build')\n }\n\n let buildInfos: string[] | undefined = undefined\n try {\n buildInfos = readdirSync('.tshy-build/.tshy')\n } catch {}\n if (!buildInfos?.length) {\n return await rimraf('.tshy-build')\n }\n\n // delete anything that has been removed from src.\n for (const dialect of readdirSync('.tshy-build')) {\n if (dialect === '.tshy') continue\n await cleanRemovedOutputs('.', `.tshy-build/${dialect}`)\n }\n}\n"]}
@@ -8,7 +8,7 @@ import fail from './fail.js';
8
8
  import readTypescriptConfig from './read-typescript-config.js';
9
9
  export default () => {
10
10
  const config = readTypescriptConfig();
11
- if (config.options.verbatimModuleSyntax) {
11
+ if (config.compilerOptions.verbatimModuleSyntax) {
12
12
  fail('verbatimModuleSyntax detected');
13
13
  console.error(`verbatimModuleSyntax is incompatible with multi-dialect builds. Either remove
14
14
  this field from tsconfig.json, or set a single dialect in the "dialects"
@@ -1 +1 @@
1
- {"version":3,"file":"prevent-verbatim-module-syntax.js","sourceRoot":"","sources":["../../src/prevent-verbatim-module-syntax.ts"],"names":[],"mappings":"AAAA,qDAAqD;AACrD,0DAA0D;AAC1D,uCAAuC;AACvC,4DAA4D;AAC5D,aAAa;AACb,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AACvC,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,oBAAoB,MAAM,6BAA6B,CAAA;AAE9D,eAAe,GAAG,EAAE;IAClB,MAAM,MAAM,GAAG,oBAAoB,EAAE,CAAA;IACrC,IAAI,MAAM,CAAC,OAAO,CAAC,oBAAoB,EAAE,CAAC;QACxC,IAAI,CAAC,+BAA+B,CAAC,CAAA;QACrC,OAAO,CAAC,KAAK,CACX;;;;;;;;;;;;;;;;;CAiBL,CACI,CAAA;QACD,OAAO,CAAC,KAAK,EAAE,CAAA;QACf,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;AACH,CAAC,CAAA","sourcesContent":["// prevent the use of verbatimModuleSyntax: true when\n// more than one dialect is in use, since this cannot ever\n// be made to work in a hybrid context.\n// Note: cannot just use JSON.parse, because ts config files\n// are jsonc.\nimport * as console from './console.js'\nimport fail from './fail.js'\nimport readTypescriptConfig from './read-typescript-config.js'\n\nexport default () => {\n const config = readTypescriptConfig()\n if (config.options.verbatimModuleSyntax) {\n fail('verbatimModuleSyntax detected')\n console.error(\n `verbatimModuleSyntax is incompatible with multi-dialect builds. Either remove\nthis field from tsconfig.json, or set a single dialect in the \"dialects\"\nfield in package.json, for example:\n\n{\n \"tshy\": {\n \"dialects\": [\"esm\"]\n }\n}\n\nor\n\n{\n \"tshy\": {\n \"dialects\": [\"commonjs\"]\n }\n}\n`,\n )\n console.print()\n process.exit(1)\n }\n}\n"]}
1
+ {"version":3,"file":"prevent-verbatim-module-syntax.js","sourceRoot":"","sources":["../../src/prevent-verbatim-module-syntax.ts"],"names":[],"mappings":"AAAA,qDAAqD;AACrD,0DAA0D;AAC1D,uCAAuC;AACvC,4DAA4D;AAC5D,aAAa;AACb,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AACvC,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,oBAAoB,MAAM,6BAA6B,CAAA;AAE9D,eAAe,GAAG,EAAE;IAClB,MAAM,MAAM,GAAG,oBAAoB,EAAE,CAAA;IACrC,IAAI,MAAM,CAAC,eAAe,CAAC,oBAAoB,EAAE,CAAC;QAChD,IAAI,CAAC,+BAA+B,CAAC,CAAA;QACrC,OAAO,CAAC,KAAK,CACX;;;;;;;;;;;;;;;;;CAiBL,CACI,CAAA;QACD,OAAO,CAAC,KAAK,EAAE,CAAA;QACf,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;AACH,CAAC,CAAA","sourcesContent":["// prevent the use of verbatimModuleSyntax: true when\n// more than one dialect is in use, since this cannot ever\n// be made to work in a hybrid context.\n// Note: cannot just use JSON.parse, because ts config files\n// are jsonc.\nimport * as console from './console.js'\nimport fail from './fail.js'\nimport readTypescriptConfig from './read-typescript-config.js'\n\nexport default () => {\n const config = readTypescriptConfig()\n if (config.compilerOptions.verbatimModuleSyntax) {\n fail('verbatimModuleSyntax detected')\n console.error(\n `verbatimModuleSyntax is incompatible with multi-dialect builds. Either remove\nthis field from tsconfig.json, or set a single dialect in the \"dialects\"\nfield in package.json, for example:\n\n{\n \"tshy\": {\n \"dialects\": [\"esm\"]\n }\n}\n\nor\n\n{\n \"tshy\": {\n \"dialects\": [\"commonjs\"]\n }\n}\n`,\n )\n console.print()\n process.exit(1)\n }\n}\n"]}
@@ -1,4 +1,6 @@
1
- import ts from 'typescript';
2
- declare const _default: () => ts.ParsedCommandLine;
1
+ import type { ParsedCommandLine } from 'typescript';
2
+ declare const _default: () => Record<string, any> & {
3
+ compilerOptions: ParsedCommandLine["options"];
4
+ };
3
5
  export default _default;
4
6
  //# sourceMappingURL=read-typescript-config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"read-typescript-config.d.ts","sourceRoot":"","sources":["../../src/read-typescript-config.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,MAAM,YAAY,CAAA;;AAK3B,wBASC"}
1
+ {"version":3,"file":"read-typescript-config.d.ts","sourceRoot":"","sources":["../../src/read-typescript-config.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;;qBAchC,iBAAiB,CAAC,SAAS,CAAC;;AAE/C,wBAGC"}
@@ -1,16 +1,92 @@
1
1
  // read the actual configuration that tsc is using
2
- // Note: cannot just use JSON.parse, because ts config files
3
- // are jsonc.
4
- import { resolve } from 'path';
5
- import ts from 'typescript';
2
+ // reimplemented in this way to avoid pulling in the massive pile
3
+ // of CommonJS that is the typescript module, since we really do not
4
+ // need most of the logic that it (reasonably) applies when parsing
5
+ // configs, just for our purposes.
6
+ import { dirname, isAbsolute, resolve } from 'node:path';
6
7
  import config from './config.js';
7
- const { readFile } = ts.sys;
8
- let parsedTsConfig = undefined;
8
+ import { readFileSync, statSync } from 'node:fs';
9
+ import { walkUp } from 'walk-up-path';
10
+ import JSON from 'jsonc-simple-parser';
11
+ const isFile = (f) => {
12
+ try {
13
+ return statSync(f).isFile();
14
+ }
15
+ catch {
16
+ return false;
17
+ }
18
+ };
19
+ let parsedTsConfig;
9
20
  export default () => {
10
- if (parsedTsConfig)
11
- return parsedTsConfig;
12
- const configPath = config.project ?? resolve('tsconfig.json');
13
- const readResult = ts.readConfigFile(configPath, readFile);
14
- return (parsedTsConfig = ts.parseJsonConfigFileContent(readResult.config, ts.sys, process.cwd()));
21
+ const configPath = config.project ?? 'tsconfig.json';
22
+ return (parsedTsConfig ??= parseTsConfig(resolveConfig(configPath)));
23
+ };
24
+ const resolveConfig = (target, from = process.cwd()) => {
25
+ if (isAbsolute(target))
26
+ return target;
27
+ let local = resolve(from, target);
28
+ if (!isFile(local) && isFile(local + '.json'))
29
+ local += '.json';
30
+ if (isFile(local) ||
31
+ target.startsWith('.\\') ||
32
+ target.startsWith('./')) {
33
+ return local;
34
+ }
35
+ // starts with a package name?
36
+ for (const p of walkUp(from)) {
37
+ const found = resolve(p, 'node_modules', target);
38
+ if (isFile(found))
39
+ return found;
40
+ const pre = resolve(p, 'node_modules', target);
41
+ const foundTsconfig = resolve(pre, 'tsconfig.json');
42
+ if (isFile(foundTsconfig))
43
+ return foundTsconfig;
44
+ if (isFile(pre + '.json'))
45
+ return pre + '.json';
46
+ }
47
+ throw new Error('Could not resolve tsconfig file location', {
48
+ cause: {
49
+ target,
50
+ from,
51
+ },
52
+ });
53
+ };
54
+ const applyExtends = (data, base) => {
55
+ for (const [key, val] of Object.entries(base)) {
56
+ if (typeof val !== 'object' || Array.isArray(val)) {
57
+ data[key] ??= val;
58
+ }
59
+ else if (!(key in data)) {
60
+ data[key] = val;
61
+ }
62
+ else if (typeof data[key] === 'object' &&
63
+ !Array.isArray(data[key])) {
64
+ data[key] = applyExtends(data[key], val);
65
+ }
66
+ }
67
+ return data;
68
+ };
69
+ const parseTsConfig = (configPath, seen = new Set()) => {
70
+ try {
71
+ const data = JSON.parse(readFileSync(resolveConfig(configPath), 'utf8'));
72
+ if (!data || typeof data !== 'object' || Array.isArray(data)) {
73
+ throw new Error('invalid data, expected object', {
74
+ cause: data,
75
+ });
76
+ }
77
+ if (!data.compilerOptions)
78
+ data.compilerOptions = {};
79
+ if (typeof data.extends === 'string') {
80
+ const ext = resolveConfig(data.extends, dirname(configPath));
81
+ if (!seen.has(ext)) {
82
+ seen.add(ext);
83
+ applyExtends(data, parseTsConfig(ext, seen));
84
+ }
85
+ }
86
+ return data;
87
+ }
88
+ catch (e) {
89
+ throw new Error('Invalid tsconfig file', { cause: e });
90
+ }
15
91
  };
16
92
  //# sourceMappingURL=read-typescript-config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"read-typescript-config.js","sourceRoot":"","sources":["../../src/read-typescript-config.ts"],"names":[],"mappings":"AAAA,kDAAkD;AAClD,4DAA4D;AAC5D,aAAa;AACb,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AAC9B,OAAO,EAAE,MAAM,YAAY,CAAA;AAC3B,OAAO,MAAM,MAAM,aAAa,CAAA;AAChC,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,GAAG,CAAA;AAE3B,IAAI,cAAc,GAAqC,SAAS,CAAA;AAChE,eAAe,GAAG,EAAE;IAClB,IAAI,cAAc;QAAE,OAAO,cAAc,CAAA;IACzC,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,IAAI,OAAO,CAAC,eAAe,CAAC,CAAA;IAC7D,MAAM,UAAU,GAAG,EAAE,CAAC,cAAc,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAA;IAC1D,OAAO,CAAC,cAAc,GAAG,EAAE,CAAC,0BAA0B,CACpD,UAAU,CAAC,MAAM,EACjB,EAAE,CAAC,GAAG,EACN,OAAO,CAAC,GAAG,EAAE,CACd,CAAC,CAAA;AACJ,CAAC,CAAA","sourcesContent":["// read the actual configuration that tsc is using\n// Note: cannot just use JSON.parse, because ts config files\n// are jsonc.\nimport { resolve } from 'path'\nimport ts from 'typescript'\nimport config from './config.js'\nconst { readFile } = ts.sys\n\nlet parsedTsConfig: ts.ParsedCommandLine | undefined = undefined\nexport default () => {\n if (parsedTsConfig) return parsedTsConfig\n const configPath = config.project ?? resolve('tsconfig.json')\n const readResult = ts.readConfigFile(configPath, readFile)\n return (parsedTsConfig = ts.parseJsonConfigFileContent(\n readResult.config,\n ts.sys,\n process.cwd(),\n ))\n}\n"]}
1
+ {"version":3,"file":"read-typescript-config.js","sourceRoot":"","sources":["../../src/read-typescript-config.ts"],"names":[],"mappings":"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","sourcesContent":["// read the actual configuration that tsc is using\n// reimplemented in this way to avoid pulling in the massive pile\n// of CommonJS that is the typescript module, since we really do not\n// need most of the logic that it (reasonably) applies when parsing\n// configs, just for our purposes.\nimport { dirname, isAbsolute, resolve } from 'node:path'\nimport config from './config.js'\nimport type { ParsedCommandLine } from 'typescript'\nimport { readFileSync, statSync } from 'node:fs'\nimport { walkUp } from 'walk-up-path'\nimport JSON from 'jsonc-simple-parser'\n\nconst isFile = (f: string) => {\n try {\n return statSync(f).isFile()\n } catch {\n return false\n }\n}\n\nlet parsedTsConfig: Record<string, any> & {\n compilerOptions: ParsedCommandLine['options']\n}\nexport default () => {\n const configPath = config.project ?? 'tsconfig.json'\n return (parsedTsConfig ??= parseTsConfig(resolveConfig(configPath)))\n}\n\nconst resolveConfig = (\n target: string,\n from: string = process.cwd(),\n): string => {\n if (isAbsolute(target)) return target\n let local = resolve(from, target)\n if (!isFile(local) && isFile(local + '.json')) local += '.json'\n if (\n isFile(local) ||\n target.startsWith('.\\\\') ||\n target.startsWith('./')\n ) {\n return local\n }\n\n // starts with a package name?\n for (const p of walkUp(from)) {\n const found = resolve(p, 'node_modules', target)\n if (isFile(found)) return found\n const pre = resolve(p, 'node_modules', target)\n const foundTsconfig = resolve(pre, 'tsconfig.json')\n if (isFile(foundTsconfig)) return foundTsconfig\n if (isFile(pre + '.json')) return pre + '.json'\n }\n\n throw new Error('Could not resolve tsconfig file location', {\n cause: {\n target,\n from,\n },\n })\n}\n\nconst applyExtends = (\n data: Record<string, any>,\n base: Record<string, any>,\n) => {\n for (const [key, val] of Object.entries(base)) {\n if (typeof val !== 'object' || Array.isArray(val)) {\n data[key] ??= val\n } else if (!(key in data)) {\n data[key] = val\n } else if (\n typeof data[key] === 'object' &&\n !Array.isArray(data[key])\n ) {\n data[key] = applyExtends(data[key], val)\n }\n }\n return data\n}\n\nconst parseTsConfig = (configPath: string, seen = new Set<string>()) => {\n try {\n const data = JSON.parse(\n readFileSync(resolveConfig(configPath), 'utf8'),\n )\n if (!data || typeof data !== 'object' || Array.isArray(data)) {\n throw new Error('invalid data, expected object', {\n cause: data,\n })\n }\n if (!data.compilerOptions) data.compilerOptions = {}\n if (typeof data.extends === 'string') {\n const ext = resolveConfig(data.extends, dirname(configPath))\n if (!seen.has(ext)) {\n seen.add(ext)\n applyExtends(data, parseTsConfig(ext, seen))\n }\n }\n return data\n } catch (e) {\n throw new Error('Invalid tsconfig file', { cause: e })\n }\n}\n"]}
@@ -34,7 +34,7 @@ const build = () => ({
34
34
  '../tsconfig.json'
35
35
  : join('..', config.project),
36
36
  compilerOptions: {
37
- target: readTypescriptConfig().options.target === undefined ?
37
+ target: readTypescriptConfig().compilerOptions.target === undefined ?
38
38
  'es2022'
39
39
  : undefined,
40
40
  rootDir: '../src',
@@ -1 +1 @@
1
- {"version":3,"file":"tsconfig.js","sourceRoot":"","sources":["../../src/tsconfig.ts"],"names":[],"mappings":"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","sourcesContent":["import chalk from 'chalk'\nimport { mkdirpSync } from 'mkdirp'\nimport {\n existsSync,\n readdirSync,\n unlinkSync,\n writeFileSync,\n} from 'node:fs'\nimport { resolve } from 'node:path'\nimport { join } from 'node:path/posix'\nimport * as console from './console.js'\n\n// the commonjs build needs to exclude anything that will be polyfilled\nimport config from './config.js'\nimport polyfills from './polyfills.js'\nimport preventVerbatimModuleSyntax from './prevent-verbatim-module-syntax.js'\nimport readTypescriptConfig from './read-typescript-config.js'\n\nconst {\n dialects = ['esm', 'commonjs'],\n esmDialects = [],\n commonjsDialects = [],\n exclude = [],\n} = config\n\nconst relativeExclude = exclude.map(e => `../${e.replace(/^\\.\\//, '')}`)\n\nconst recommended: Record<string, any> = {\n compilerOptions: {\n declaration: true,\n declarationMap: true,\n esModuleInterop: true,\n forceConsistentCasingInFileNames: true,\n inlineSources: true,\n jsx: 'react',\n module: 'nodenext',\n moduleResolution: 'nodenext',\n noUncheckedIndexedAccess: true,\n resolveJsonModule: true,\n skipLibCheck: true,\n sourceMap: true,\n strict: true,\n target: 'es2022',\n },\n}\n\nconst build = (): Record<string, any> => ({\n extends:\n config.project === undefined ?\n '../tsconfig.json'\n : join('..', config.project),\n compilerOptions: {\n target:\n readTypescriptConfig().options.target === undefined ?\n 'es2022'\n : undefined,\n rootDir: '../src',\n module: 'nodenext',\n moduleResolution: 'nodenext',\n },\n})\n\nconst commonjs = (dialect: string): Record<string, any> => {\n const exclude = [\n ...relativeExclude,\n '../src/**/*.mts',\n '../src/package.json',\n ]\n for (const [d, pf] of polyfills) {\n if (d === dialect) continue\n for (const f of pf.map.keys()) {\n exclude.push(`../${join(f)}`)\n }\n }\n return {\n extends: './build.json',\n include: [\n '../src/**/*.ts',\n '../src/**/*.cts',\n '../src/**/*.tsx',\n '../src/**/*.json',\n ],\n exclude,\n compilerOptions: {\n outDir:\n '../.tshy-build/' + (dialect === 'cjs' ? 'commonjs' : dialect),\n },\n }\n}\n\nconst esm = (dialect: string): Record<string, any> => {\n const exclude: string[] = [...relativeExclude, '../src/package.json']\n for (const [d, pf] of polyfills) {\n if (d === dialect) continue\n for (const f of pf.map.keys()) {\n exclude.push(`../${f.replace(/^\\.\\//, '')}`)\n }\n }\n return {\n extends: './build.json',\n include: [\n '../src/**/*.ts',\n '../src/**/*.mts',\n '../src/**/*.tsx',\n '../src/**/*.json',\n ],\n exclude,\n compilerOptions: {\n outDir: '../.tshy-build/' + dialect,\n },\n }\n}\n\nmkdirpSync('.tshy')\nconst writeConfig = (name: string, data: Record<string, any>) =>\n writeFileSync(`.tshy/${name}.json`, JSON.stringify(data, null, 2) + '\\n')\n\nconsole.debug(chalk.cyan.dim('writing tsconfig files...'))\nif (config.project === undefined && !existsSync('tsconfig.json')) {\n console.debug('using recommended tsconfig.json')\n writeConfig('../tsconfig', recommended)\n} else {\n if (dialects.length > 1) preventVerbatimModuleSyntax()\n console.debug('using existing tsconfig.json')\n}\nfor (const f of readdirSync('.tshy')) {\n unlinkSync(resolve('.tshy', f))\n}\nwriteConfig('build', build())\nif (dialects.includes('commonjs')) {\n writeConfig('commonjs', commonjs('cjs'))\n for (const d of commonjsDialects) {\n writeConfig(d, commonjs(d))\n }\n}\nif (dialects.includes('esm')) {\n writeConfig('esm', esm('esm'))\n for (const d of esmDialects) {\n writeConfig(d, esm(d))\n }\n}\n"]}
1
+ {"version":3,"file":"tsconfig.js","sourceRoot":"","sources":["../../src/tsconfig.ts"],"names":[],"mappings":"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","sourcesContent":["import chalk from 'chalk'\nimport { mkdirpSync } from 'mkdirp'\nimport {\n existsSync,\n readdirSync,\n unlinkSync,\n writeFileSync,\n} from 'node:fs'\nimport { resolve } from 'node:path'\nimport { join } from 'node:path/posix'\nimport * as console from './console.js'\n\n// the commonjs build needs to exclude anything that will be polyfilled\nimport config from './config.js'\nimport polyfills from './polyfills.js'\nimport preventVerbatimModuleSyntax from './prevent-verbatim-module-syntax.js'\nimport readTypescriptConfig from './read-typescript-config.js'\n\nconst {\n dialects = ['esm', 'commonjs'],\n esmDialects = [],\n commonjsDialects = [],\n exclude = [],\n} = config\n\nconst relativeExclude = exclude.map(e => `../${e.replace(/^\\.\\//, '')}`)\n\nconst recommended: Record<string, any> = {\n compilerOptions: {\n declaration: true,\n declarationMap: true,\n esModuleInterop: true,\n forceConsistentCasingInFileNames: true,\n inlineSources: true,\n jsx: 'react',\n module: 'nodenext',\n moduleResolution: 'nodenext',\n noUncheckedIndexedAccess: true,\n resolveJsonModule: true,\n skipLibCheck: true,\n sourceMap: true,\n strict: true,\n target: 'es2022',\n },\n}\n\nconst build = (): Record<string, any> => ({\n extends:\n config.project === undefined ?\n '../tsconfig.json'\n : join('..', config.project),\n compilerOptions: {\n target:\n readTypescriptConfig().compilerOptions.target === undefined ?\n 'es2022'\n : undefined,\n rootDir: '../src',\n module: 'nodenext',\n moduleResolution: 'nodenext',\n },\n})\n\nconst commonjs = (dialect: string): Record<string, any> => {\n const exclude = [\n ...relativeExclude,\n '../src/**/*.mts',\n '../src/package.json',\n ]\n for (const [d, pf] of polyfills) {\n if (d === dialect) continue\n for (const f of pf.map.keys()) {\n exclude.push(`../${join(f)}`)\n }\n }\n return {\n extends: './build.json',\n include: [\n '../src/**/*.ts',\n '../src/**/*.cts',\n '../src/**/*.tsx',\n '../src/**/*.json',\n ],\n exclude,\n compilerOptions: {\n outDir:\n '../.tshy-build/' + (dialect === 'cjs' ? 'commonjs' : dialect),\n },\n }\n}\n\nconst esm = (dialect: string): Record<string, any> => {\n const exclude: string[] = [...relativeExclude, '../src/package.json']\n for (const [d, pf] of polyfills) {\n if (d === dialect) continue\n for (const f of pf.map.keys()) {\n exclude.push(`../${f.replace(/^\\.\\//, '')}`)\n }\n }\n return {\n extends: './build.json',\n include: [\n '../src/**/*.ts',\n '../src/**/*.mts',\n '../src/**/*.tsx',\n '../src/**/*.json',\n ],\n exclude,\n compilerOptions: {\n outDir: '../.tshy-build/' + dialect,\n },\n }\n}\n\nmkdirpSync('.tshy')\nconst writeConfig = (name: string, data: Record<string, any>) =>\n writeFileSync(`.tshy/${name}.json`, JSON.stringify(data, null, 2) + '\\n')\n\nconsole.debug(chalk.cyan.dim('writing tsconfig files...'))\nif (config.project === undefined && !existsSync('tsconfig.json')) {\n console.debug('using recommended tsconfig.json')\n writeConfig('../tsconfig', recommended)\n} else {\n if (dialects.length > 1) preventVerbatimModuleSyntax()\n console.debug('using existing tsconfig.json')\n}\nfor (const f of readdirSync('.tshy')) {\n unlinkSync(resolve('.tshy', f))\n}\nwriteConfig('build', build())\nif (dialects.includes('commonjs')) {\n writeConfig('commonjs', commonjs('cjs'))\n for (const d of commonjsDialects) {\n writeConfig(d, commonjs(d))\n }\n}\nif (dialects.includes('esm')) {\n writeConfig('esm', esm('esm'))\n for (const d of esmDialects) {\n writeConfig(d, esm(d))\n }\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tshy",
3
- "version": "3.1.3",
3
+ "version": "3.2.1",
4
4
  "description": "TypeScript HYbridizer - Hybrid (CommonJS/ESM) TypeScript node package builder",
5
5
  "author": "Isaac Z. Schlueter <i@izs.me> (https://izs.me)",
6
6
  "license": "BlueOak-1.0.0",
@@ -13,6 +13,7 @@
13
13
  "chalk": "^5.6.2",
14
14
  "chokidar": "^4.0.3",
15
15
  "foreground-child": "^4.0.0",
16
+ "jsonc-simple-parser": "^3.0.0",
16
17
  "minimatch": "^10.0.3",
17
18
  "mkdirp": "^3.0.1",
18
19
  "polite-json": "^5.0.0",