tshy 3.3.0 → 3.3.2

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.
@@ -1,4 +1,4 @@
1
1
  import { Package } from './types.js';
2
- declare const _default: (pkg: Package) => import("resolve-import").Imports | undefined;
2
+ declare const _default: (pkg: Package) => import("resolve-import/raw").Imports | undefined;
3
3
  export default _default;
4
4
  //# sourceMappingURL=built-imports.d.ts.map
@@ -1,4 +1,4 @@
1
- import { ConditionalValue, ExportsSubpaths } from 'resolve-import';
1
+ import type { ConditionalValue, ExportsSubpaths } from 'resolve-import';
2
2
  import type { PolyfillSet } from './polyfills.js';
3
3
  import { Package, TshyConfig } from './types.js';
4
4
  export declare const getImpTarget: (s: ConditionalValue | undefined, polyfills?: Map<string, PolyfillSet>) => string | null | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"exports.d.ts","sourceRoot":"","sources":["../../src/exports.ts"],"names":[],"mappings":"AACA,OAAO,EACL,gBAAgB,EAEhB,eAAe,EAChB,MAAM,gBAAgB,CAAA;AAKvB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAGjD,OAAO,EAAE,OAAO,EAAE,UAAU,EAAc,MAAM,YAAY,CAAA;AAuC5D,eAAO,MAAM,YAAY,sGAG8C,CAAA;AAEvE,eAAO,MAAM,YAAY,sGAUtB,CAAA;AAoIH,eAAO,MAAM,OAAO;;eAoCnB,CAAA;;AAKD,wBAA0B","sourcesContent":["import { relative, resolve } from 'node:path/posix'\nimport {\n ConditionalValue,\n ConditionalValueObject,\n ExportsSubpaths,\n} from 'resolve-import'\nimport config from './config.js'\nimport dialects from './dialects.js'\nimport fail from './fail.js'\nimport pkg from './package.js'\nimport type { PolyfillSet } from './polyfills.js'\nimport polyfills from './polyfills.js'\nimport { resolveExport } from './resolve-export.js'\nimport { Package, TshyConfig, TshyExport } from './types.js'\nconst { esmDialects = [], commonjsDialects = [] } = config\n\nconst liveDev =\n config.liveDev &&\n process.env.npm_command !== 'publish' &&\n process.env.npm_command !== 'pack'\n\nconst getTargetForDialectCondition = <T extends string>(\n s: string | TshyExport | undefined | null,\n dialect: T,\n condition: T extends 'esm' ? 'import'\n : T extends 'commonjs' ? 'require'\n : T,\n type: T extends 'esm' ? 'esm'\n : T extends 'commonjs' ? 'commonjs'\n : 'esm' | 'commonjs',\n polyfills: Map<string, PolyfillSet> = new Map(),\n): string | undefined | null => {\n if (s === undefined) return undefined\n if (typeof s === 'string') {\n // the excluded filename pattern\n const xts = type === 'commonjs' ? '.mts' : '.cts'\n if (s.endsWith(xts)) return undefined\n const pf = dialect === 'commonjs' ? 'cjs' : dialect\n const rel = relative(\n resolve('./src'),\n resolve(polyfills.get(pf)?.map.get(s) ?? s),\n )\n const target = liveDev ? rel : rel.replace(/\\.([mc]?)tsx?$/, '.$1js')\n return (\n !s || !s.startsWith('./src/') ? s\n : dialects.includes(type) ? `./dist/${dialect}/${target}`\n : undefined\n )\n }\n return resolveExport(s, [condition])\n}\n\nexport const getImpTarget = (\n s: string | TshyExport | undefined | null,\n polyfills: Map<string, PolyfillSet> = new Map(),\n) => getTargetForDialectCondition(s, 'esm', 'import', 'esm', polyfills)\n\nexport const getReqTarget = (\n s: string | TshyExport | undefined | null,\n polyfills: Map<string, PolyfillSet> = new Map(),\n) =>\n getTargetForDialectCondition(\n s,\n 'commonjs',\n 'require',\n 'commonjs',\n polyfills,\n )\n\nconst getExports = (\n c: TshyConfig,\n pkgType: 'commonjs' | 'module',\n): Record<string, ConditionalValue> => {\n // by this time it always exports, will get the default if missing\n /* c8 ignore start */\n if (!c.exports) {\n fail('no exports on tshy config (is there code in ./src?)')\n return process.exit(1)\n }\n /* c8 ignore stop */\n const e: Record<string, ConditionalValue> = {}\n for (const [sub, s] of Object.entries(c.exports)) {\n // external export, not built by us\n if (s !== null && (typeof s !== 'string' || !s.startsWith('./src/'))) {\n // already been validated, just accept as-is\n e[sub] = s as ConditionalValue\n continue\n }\n\n /* c8 ignore next - already guarded */\n if (s === null) continue\n\n const impTarget = getImpTarget(s, polyfills)\n const reqTarget = getReqTarget(s, polyfills)\n\n // should be impossible\n /* c8 ignore start */\n if (!impTarget && !reqTarget) continue\n /* c8 ignore stop */\n\n const exp: ConditionalValueObject = (e[sub] = {})\n if (impTarget) {\n for (const d of esmDialects) {\n const source = s && (polyfills.get(d)?.map.get(s) ?? s)\n\n const target = getTargetForDialectCondition(\n s,\n d,\n d,\n 'esm',\n polyfills,\n )\n if (target) {\n exp[d] =\n liveDev ?\n {\n ...(pkgType === 'commonjs' ?\n getSourceDialects(source, c)\n : {}),\n default: target,\n }\n : {\n ...(pkgType === 'commonjs' ?\n getSourceDialects(source, c)\n : {}),\n types: target.replace(/\\.js$/, '.d.ts'),\n default: target,\n }\n }\n }\n }\n\n if (reqTarget) {\n for (const d of commonjsDialects) {\n const source = s && (polyfills.get(d)?.map.get(s) ?? s)\n const target = getTargetForDialectCondition(\n s,\n d,\n d,\n 'commonjs',\n polyfills,\n )\n if (target) {\n exp[d] =\n liveDev ?\n {\n ...(pkgType === 'module' ?\n getSourceDialects(source, c)\n : {}),\n default: target,\n }\n : {\n ...(pkgType === 'module' ?\n getSourceDialects(source, c)\n : {}),\n types: target.replace(/\\.js$/, '.d.ts'),\n default: target,\n }\n }\n }\n }\n\n // put the default import/require after all the other special ones.\n if (impTarget) {\n exp.import =\n liveDev ?\n {\n ...(pkgType === 'module' ? getSourceDialects(s, c) : {}),\n default: impTarget,\n }\n : {\n ...(pkgType === 'module' ? getSourceDialects(s, c) : {}),\n types: impTarget.replace(/\\.(m?)js$/, '.d.$1ts'),\n default: impTarget,\n }\n }\n if (reqTarget) {\n exp.require =\n liveDev ?\n {\n ...(pkgType === 'commonjs' ? getSourceDialects(s, c) : {}),\n default: reqTarget,\n }\n : {\n ...(pkgType === 'commonjs' ? getSourceDialects(s, c) : {}),\n types: reqTarget.replace(/\\.(c?)js$/, '.d.$1ts'),\n default: reqTarget,\n }\n }\n }\n return e\n}\n\nconst getSourceDialects = (source: string, c: TshyConfig) => {\n const { sourceDialects } = c\n if (!sourceDialects) return {}\n return Object.fromEntries(sourceDialects.map(s => [s, source]))\n}\n\nexport const setMain = (\n c: TshyConfig | undefined,\n pkg: Package & { exports: ExportsSubpaths },\n) => {\n pkg.type = pkg.type === 'commonjs' ? 'commonjs' : 'module'\n const mod = resolveExport(pkg.exports['.'], ['require'])\n const main = c?.main ?? !!mod\n if (main) {\n if (!mod) {\n fail(`could not resolve exports['.'] for tshy.main 'require'`)\n return process.exit(1)\n }\n const types = resolveExport(pkg.exports['.'], ['require', 'types'])\n pkg.main = mod\n if (types && types !== mod) pkg.types = types\n else delete pkg.types\n } else {\n if (c && c.main !== false) delete c.main\n delete pkg.main\n delete pkg.types\n }\n\n // Set the package module to exports[\".\"]\n const importMod = resolveExport(pkg.exports['.'], ['import'])\n const module = c?.module ?? !!importMod\n if (module) {\n if (!importMod) {\n fail(`could not resolve exports['.'] for tshy.module 'import'`)\n return process.exit(1)\n }\n\n pkg.module = importMod\n } else {\n if (c && c.module !== false) delete c.module\n delete pkg.module\n }\n}\n\npkg.exports = getExports(config, pkg.type)\n\nsetMain(config, pkg as Package & { exports: ExportsSubpaths })\nexport default pkg.exports\n"]}
1
+ {"version":3,"file":"exports.d.ts","sourceRoot":"","sources":["../../src/exports.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,gBAAgB,EAEhB,eAAe,EAChB,MAAM,gBAAgB,CAAA;AAKvB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAGjD,OAAO,EAAE,OAAO,EAAE,UAAU,EAAc,MAAM,YAAY,CAAA;AAuC5D,eAAO,MAAM,YAAY,sGAG8C,CAAA;AAEvE,eAAO,MAAM,YAAY,sGAUtB,CAAA;AAoIH,eAAO,MAAM,OAAO;;eAoCnB,CAAA;;AAKD,wBAA0B","sourcesContent":["import { relative, resolve } from 'node:path/posix'\nimport type {\n ConditionalValue,\n ConditionalValueObject,\n ExportsSubpaths,\n} from 'resolve-import'\nimport config from './config.js'\nimport dialects from './dialects.js'\nimport fail from './fail.js'\nimport pkg from './package.js'\nimport type { PolyfillSet } from './polyfills.js'\nimport polyfills from './polyfills.js'\nimport { resolveExport } from './resolve-export.js'\nimport { Package, TshyConfig, TshyExport } from './types.js'\nconst { esmDialects = [], commonjsDialects = [] } = config\n\nconst liveDev =\n config.liveDev &&\n process.env.npm_command !== 'publish' &&\n process.env.npm_command !== 'pack'\n\nconst getTargetForDialectCondition = <T extends string>(\n s: string | TshyExport | undefined | null,\n dialect: T,\n condition: T extends 'esm' ? 'import'\n : T extends 'commonjs' ? 'require'\n : T,\n type: T extends 'esm' ? 'esm'\n : T extends 'commonjs' ? 'commonjs'\n : 'esm' | 'commonjs',\n polyfills: Map<string, PolyfillSet> = new Map(),\n): string | undefined | null => {\n if (s === undefined) return undefined\n if (typeof s === 'string') {\n // the excluded filename pattern\n const xts = type === 'commonjs' ? '.mts' : '.cts'\n if (s.endsWith(xts)) return undefined\n const pf = dialect === 'commonjs' ? 'cjs' : dialect\n const rel = relative(\n resolve('./src'),\n resolve(polyfills.get(pf)?.map.get(s) ?? s),\n )\n const target = liveDev ? rel : rel.replace(/\\.([mc]?)tsx?$/, '.$1js')\n return (\n !s || !s.startsWith('./src/') ? s\n : dialects.includes(type) ? `./dist/${dialect}/${target}`\n : undefined\n )\n }\n return resolveExport(s, [condition])\n}\n\nexport const getImpTarget = (\n s: string | TshyExport | undefined | null,\n polyfills: Map<string, PolyfillSet> = new Map(),\n) => getTargetForDialectCondition(s, 'esm', 'import', 'esm', polyfills)\n\nexport const getReqTarget = (\n s: string | TshyExport | undefined | null,\n polyfills: Map<string, PolyfillSet> = new Map(),\n) =>\n getTargetForDialectCondition(\n s,\n 'commonjs',\n 'require',\n 'commonjs',\n polyfills,\n )\n\nconst getExports = (\n c: TshyConfig,\n pkgType: 'commonjs' | 'module',\n): Record<string, ConditionalValue> => {\n // by this time it always exports, will get the default if missing\n /* c8 ignore start */\n if (!c.exports) {\n fail('no exports on tshy config (is there code in ./src?)')\n return process.exit(1)\n }\n /* c8 ignore stop */\n const e: Record<string, ConditionalValue> = {}\n for (const [sub, s] of Object.entries(c.exports)) {\n // external export, not built by us\n if (s !== null && (typeof s !== 'string' || !s.startsWith('./src/'))) {\n // already been validated, just accept as-is\n e[sub] = s as ConditionalValue\n continue\n }\n\n /* c8 ignore next - already guarded */\n if (s === null) continue\n\n const impTarget = getImpTarget(s, polyfills)\n const reqTarget = getReqTarget(s, polyfills)\n\n // should be impossible\n /* c8 ignore start */\n if (!impTarget && !reqTarget) continue\n /* c8 ignore stop */\n\n const exp: ConditionalValueObject = (e[sub] = {})\n if (impTarget) {\n for (const d of esmDialects) {\n const source = s && (polyfills.get(d)?.map.get(s) ?? s)\n\n const target = getTargetForDialectCondition(\n s,\n d,\n d,\n 'esm',\n polyfills,\n )\n if (target) {\n exp[d] =\n liveDev ?\n {\n ...(pkgType === 'commonjs' ?\n getSourceDialects(source, c)\n : {}),\n default: target,\n }\n : {\n ...(pkgType === 'commonjs' ?\n getSourceDialects(source, c)\n : {}),\n types: target.replace(/\\.js$/, '.d.ts'),\n default: target,\n }\n }\n }\n }\n\n if (reqTarget) {\n for (const d of commonjsDialects) {\n const source = s && (polyfills.get(d)?.map.get(s) ?? s)\n const target = getTargetForDialectCondition(\n s,\n d,\n d,\n 'commonjs',\n polyfills,\n )\n if (target) {\n exp[d] =\n liveDev ?\n {\n ...(pkgType === 'module' ?\n getSourceDialects(source, c)\n : {}),\n default: target,\n }\n : {\n ...(pkgType === 'module' ?\n getSourceDialects(source, c)\n : {}),\n types: target.replace(/\\.js$/, '.d.ts'),\n default: target,\n }\n }\n }\n }\n\n // put the default import/require after all the other special ones.\n if (impTarget) {\n exp.import =\n liveDev ?\n {\n ...(pkgType === 'module' ? getSourceDialects(s, c) : {}),\n default: impTarget,\n }\n : {\n ...(pkgType === 'module' ? getSourceDialects(s, c) : {}),\n types: impTarget.replace(/\\.(m?)js$/, '.d.$1ts'),\n default: impTarget,\n }\n }\n if (reqTarget) {\n exp.require =\n liveDev ?\n {\n ...(pkgType === 'commonjs' ? getSourceDialects(s, c) : {}),\n default: reqTarget,\n }\n : {\n ...(pkgType === 'commonjs' ? getSourceDialects(s, c) : {}),\n types: reqTarget.replace(/\\.(c?)js$/, '.d.$1ts'),\n default: reqTarget,\n }\n }\n }\n return e\n}\n\nconst getSourceDialects = (source: string, c: TshyConfig) => {\n const { sourceDialects } = c\n if (!sourceDialects) return {}\n return Object.fromEntries(sourceDialects.map(s => [s, source]))\n}\n\nexport const setMain = (\n c: TshyConfig | undefined,\n pkg: Package & { exports: ExportsSubpaths },\n) => {\n pkg.type = pkg.type === 'commonjs' ? 'commonjs' : 'module'\n const mod = resolveExport(pkg.exports['.'], ['require'])\n const main = c?.main ?? !!mod\n if (main) {\n if (!mod) {\n fail(`could not resolve exports['.'] for tshy.main 'require'`)\n return process.exit(1)\n }\n const types = resolveExport(pkg.exports['.'], ['require', 'types'])\n pkg.main = mod\n if (types && types !== mod) pkg.types = types\n else delete pkg.types\n } else {\n if (c && c.main !== false) delete c.main\n delete pkg.main\n delete pkg.types\n }\n\n // Set the package module to exports[\".\"]\n const importMod = resolveExport(pkg.exports['.'], ['import'])\n const module = c?.module ?? !!importMod\n if (module) {\n if (!importMod) {\n fail(`could not resolve exports['.'] for tshy.module 'import'`)\n return process.exit(1)\n }\n\n pkg.module = importMod\n } else {\n if (c && c.module !== false) delete c.module\n delete pkg.module\n }\n}\n\npkg.exports = getExports(config, pkg.type)\n\nsetMain(config, pkg as Package & { exports: ExportsSubpaths })\nexport default pkg.exports\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"exports.js","sourceRoot":"","sources":["../../src/exports.ts"],"names":[],"mappings":"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","sourcesContent":["import { relative, resolve } from 'node:path/posix'\nimport {\n ConditionalValue,\n ConditionalValueObject,\n ExportsSubpaths,\n} from 'resolve-import'\nimport config from './config.js'\nimport dialects from './dialects.js'\nimport fail from './fail.js'\nimport pkg from './package.js'\nimport type { PolyfillSet } from './polyfills.js'\nimport polyfills from './polyfills.js'\nimport { resolveExport } from './resolve-export.js'\nimport { Package, TshyConfig, TshyExport } from './types.js'\nconst { esmDialects = [], commonjsDialects = [] } = config\n\nconst liveDev =\n config.liveDev &&\n process.env.npm_command !== 'publish' &&\n process.env.npm_command !== 'pack'\n\nconst getTargetForDialectCondition = <T extends string>(\n s: string | TshyExport | undefined | null,\n dialect: T,\n condition: T extends 'esm' ? 'import'\n : T extends 'commonjs' ? 'require'\n : T,\n type: T extends 'esm' ? 'esm'\n : T extends 'commonjs' ? 'commonjs'\n : 'esm' | 'commonjs',\n polyfills: Map<string, PolyfillSet> = new Map(),\n): string | undefined | null => {\n if (s === undefined) return undefined\n if (typeof s === 'string') {\n // the excluded filename pattern\n const xts = type === 'commonjs' ? '.mts' : '.cts'\n if (s.endsWith(xts)) return undefined\n const pf = dialect === 'commonjs' ? 'cjs' : dialect\n const rel = relative(\n resolve('./src'),\n resolve(polyfills.get(pf)?.map.get(s) ?? s),\n )\n const target = liveDev ? rel : rel.replace(/\\.([mc]?)tsx?$/, '.$1js')\n return (\n !s || !s.startsWith('./src/') ? s\n : dialects.includes(type) ? `./dist/${dialect}/${target}`\n : undefined\n )\n }\n return resolveExport(s, [condition])\n}\n\nexport const getImpTarget = (\n s: string | TshyExport | undefined | null,\n polyfills: Map<string, PolyfillSet> = new Map(),\n) => getTargetForDialectCondition(s, 'esm', 'import', 'esm', polyfills)\n\nexport const getReqTarget = (\n s: string | TshyExport | undefined | null,\n polyfills: Map<string, PolyfillSet> = new Map(),\n) =>\n getTargetForDialectCondition(\n s,\n 'commonjs',\n 'require',\n 'commonjs',\n polyfills,\n )\n\nconst getExports = (\n c: TshyConfig,\n pkgType: 'commonjs' | 'module',\n): Record<string, ConditionalValue> => {\n // by this time it always exports, will get the default if missing\n /* c8 ignore start */\n if (!c.exports) {\n fail('no exports on tshy config (is there code in ./src?)')\n return process.exit(1)\n }\n /* c8 ignore stop */\n const e: Record<string, ConditionalValue> = {}\n for (const [sub, s] of Object.entries(c.exports)) {\n // external export, not built by us\n if (s !== null && (typeof s !== 'string' || !s.startsWith('./src/'))) {\n // already been validated, just accept as-is\n e[sub] = s as ConditionalValue\n continue\n }\n\n /* c8 ignore next - already guarded */\n if (s === null) continue\n\n const impTarget = getImpTarget(s, polyfills)\n const reqTarget = getReqTarget(s, polyfills)\n\n // should be impossible\n /* c8 ignore start */\n if (!impTarget && !reqTarget) continue\n /* c8 ignore stop */\n\n const exp: ConditionalValueObject = (e[sub] = {})\n if (impTarget) {\n for (const d of esmDialects) {\n const source = s && (polyfills.get(d)?.map.get(s) ?? s)\n\n const target = getTargetForDialectCondition(\n s,\n d,\n d,\n 'esm',\n polyfills,\n )\n if (target) {\n exp[d] =\n liveDev ?\n {\n ...(pkgType === 'commonjs' ?\n getSourceDialects(source, c)\n : {}),\n default: target,\n }\n : {\n ...(pkgType === 'commonjs' ?\n getSourceDialects(source, c)\n : {}),\n types: target.replace(/\\.js$/, '.d.ts'),\n default: target,\n }\n }\n }\n }\n\n if (reqTarget) {\n for (const d of commonjsDialects) {\n const source = s && (polyfills.get(d)?.map.get(s) ?? s)\n const target = getTargetForDialectCondition(\n s,\n d,\n d,\n 'commonjs',\n polyfills,\n )\n if (target) {\n exp[d] =\n liveDev ?\n {\n ...(pkgType === 'module' ?\n getSourceDialects(source, c)\n : {}),\n default: target,\n }\n : {\n ...(pkgType === 'module' ?\n getSourceDialects(source, c)\n : {}),\n types: target.replace(/\\.js$/, '.d.ts'),\n default: target,\n }\n }\n }\n }\n\n // put the default import/require after all the other special ones.\n if (impTarget) {\n exp.import =\n liveDev ?\n {\n ...(pkgType === 'module' ? getSourceDialects(s, c) : {}),\n default: impTarget,\n }\n : {\n ...(pkgType === 'module' ? getSourceDialects(s, c) : {}),\n types: impTarget.replace(/\\.(m?)js$/, '.d.$1ts'),\n default: impTarget,\n }\n }\n if (reqTarget) {\n exp.require =\n liveDev ?\n {\n ...(pkgType === 'commonjs' ? getSourceDialects(s, c) : {}),\n default: reqTarget,\n }\n : {\n ...(pkgType === 'commonjs' ? getSourceDialects(s, c) : {}),\n types: reqTarget.replace(/\\.(c?)js$/, '.d.$1ts'),\n default: reqTarget,\n }\n }\n }\n return e\n}\n\nconst getSourceDialects = (source: string, c: TshyConfig) => {\n const { sourceDialects } = c\n if (!sourceDialects) return {}\n return Object.fromEntries(sourceDialects.map(s => [s, source]))\n}\n\nexport const setMain = (\n c: TshyConfig | undefined,\n pkg: Package & { exports: ExportsSubpaths },\n) => {\n pkg.type = pkg.type === 'commonjs' ? 'commonjs' : 'module'\n const mod = resolveExport(pkg.exports['.'], ['require'])\n const main = c?.main ?? !!mod\n if (main) {\n if (!mod) {\n fail(`could not resolve exports['.'] for tshy.main 'require'`)\n return process.exit(1)\n }\n const types = resolveExport(pkg.exports['.'], ['require', 'types'])\n pkg.main = mod\n if (types && types !== mod) pkg.types = types\n else delete pkg.types\n } else {\n if (c && c.main !== false) delete c.main\n delete pkg.main\n delete pkg.types\n }\n\n // Set the package module to exports[\".\"]\n const importMod = resolveExport(pkg.exports['.'], ['import'])\n const module = c?.module ?? !!importMod\n if (module) {\n if (!importMod) {\n fail(`could not resolve exports['.'] for tshy.module 'import'`)\n return process.exit(1)\n }\n\n pkg.module = importMod\n } else {\n if (c && c.module !== false) delete c.module\n delete pkg.module\n }\n}\n\npkg.exports = getExports(config, pkg.type)\n\nsetMain(config, pkg as Package & { exports: ExportsSubpaths })\nexport default pkg.exports\n"]}
1
+ {"version":3,"file":"exports.js","sourceRoot":"","sources":["../../src/exports.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AAMnD,OAAO,MAAM,MAAM,aAAa,CAAA;AAChC,OAAO,QAAQ,MAAM,eAAe,CAAA;AACpC,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,GAAG,MAAM,cAAc,CAAA;AAE9B,OAAO,SAAS,MAAM,gBAAgB,CAAA;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAEnD,MAAM,EAAE,WAAW,GAAG,EAAE,EAAE,gBAAgB,GAAG,EAAE,EAAE,GAAG,MAAM,CAAA;AAE1D,MAAM,OAAO,GACX,MAAM,CAAC,OAAO;IACd,OAAO,CAAC,GAAG,CAAC,WAAW,KAAK,SAAS;IACrC,OAAO,CAAC,GAAG,CAAC,WAAW,KAAK,MAAM,CAAA;AAEpC,MAAM,4BAA4B,GAAG,CACnC,CAAyC,EACzC,OAAU,EACV,SAEG,EACH,IAEoB,EACpB,SAAS,GAA6B,IAAI,GAAG,EAAE,EACpB,EAAE,CAAC;IAC9B,IAAI,CAAC,KAAK,SAAS;QAAE,OAAO,SAAS,CAAA;IACrC,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;QAC1B,gCAAgC;QAChC,MAAM,GAAG,GAAG,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAA;QACjD,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC;YAAE,OAAO,SAAS,CAAA;QACrC,MAAM,EAAE,GAAG,OAAO,KAAK,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAA;QACnD,MAAM,GAAG,GAAG,QAAQ,CAClB,OAAO,CAAC,OAAO,CAAC,EAChB,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAC5C,CAAA;QACD,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAA;QACrE,OAAO,CACL,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;YACjC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,OAAO,IAAI,MAAM,EAAE;gBACzD,CAAC,CAAC,SAAS,CACZ,CAAA;IACH,CAAC;IACD,OAAO,aAAa,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAA;AAAA,CACrC,CAAA;AAED,MAAM,CAAC,MAAM,YAAY,GAAG,CAC1B,CAAyC,EACzC,SAAS,GAA6B,IAAI,GAAG,EAAE,EAC/C,EAAE,CAAC,4BAA4B,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,CAAC,CAAA;AAEvE,MAAM,CAAC,MAAM,YAAY,GAAG,CAC1B,CAAyC,EACzC,SAAS,GAA6B,IAAI,GAAG,EAAE,EAC/C,EAAE,CACF,4BAA4B,CAC1B,CAAC,EACD,UAAU,EACV,SAAS,EACT,UAAU,EACV,SAAS,CACV,CAAA;AAEH,MAAM,UAAU,GAAG,CACjB,CAAa,EACb,OAA8B,EACI,EAAE,CAAC;IACrC,kEAAkE;IAClE,qBAAqB;IACrB,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;QACf,IAAI,CAAC,qDAAqD,CAAC,CAAA;QAC3D,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACxB,CAAC;IACD,oBAAoB;IACpB,MAAM,CAAC,GAAqC,EAAE,CAAA;IAC9C,KAAK,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;QACjD,mCAAmC;QACnC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;YACrE,4CAA4C;YAC5C,CAAC,CAAC,GAAG,CAAC,GAAG,CAAqB,CAAA;YAC9B,SAAQ;QACV,CAAC;QAED,sCAAsC;QACtC,IAAI,CAAC,KAAK,IAAI;YAAE,SAAQ;QAExB,MAAM,SAAS,GAAG,YAAY,CAAC,CAAC,EAAE,SAAS,CAAC,CAAA;QAC5C,MAAM,SAAS,GAAG,YAAY,CAAC,CAAC,EAAE,SAAS,CAAC,CAAA;QAE5C,uBAAuB;QACvB,qBAAqB;QACrB,IAAI,CAAC,SAAS,IAAI,CAAC,SAAS;YAAE,SAAQ;QACtC,oBAAoB;QAEpB,MAAM,GAAG,GAA2B,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAA;QACjD,IAAI,SAAS,EAAE,CAAC;YACd,KAAK,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC;gBAC5B,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;gBAEvD,MAAM,MAAM,GAAG,4BAA4B,CACzC,CAAC,EACD,CAAC,EACD,CAAC,EACD,KAAK,EACL,SAAS,CACV,CAAA;gBACD,IAAI,MAAM,EAAE,CAAC;oBACX,GAAG,CAAC,CAAC,CAAC;wBACJ,OAAO,CAAC,CAAC;4BACP;gCACE,GAAG,CAAC,OAAO,KAAK,UAAU,CAAC,CAAC;oCAC1B,iBAAiB,CAAC,MAAM,EAAE,CAAC,CAAC;oCAC9B,CAAC,CAAC,EAAE,CAAC;gCACL,OAAO,EAAE,MAAM;6BAChB;4BACH,CAAC,CAAC;gCACE,GAAG,CAAC,OAAO,KAAK,UAAU,CAAC,CAAC;oCAC1B,iBAAiB,CAAC,MAAM,EAAE,CAAC,CAAC;oCAC9B,CAAC,CAAC,EAAE,CAAC;gCACL,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC;gCACvC,OAAO,EAAE,MAAM;6BAChB,CAAA;gBACP,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,SAAS,EAAE,CAAC;YACd,KAAK,MAAM,CAAC,IAAI,gBAAgB,EAAE,CAAC;gBACjC,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;gBACvD,MAAM,MAAM,GAAG,4BAA4B,CACzC,CAAC,EACD,CAAC,EACD,CAAC,EACD,UAAU,EACV,SAAS,CACV,CAAA;gBACD,IAAI,MAAM,EAAE,CAAC;oBACX,GAAG,CAAC,CAAC,CAAC;wBACJ,OAAO,CAAC,CAAC;4BACP;gCACE,GAAG,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC;oCACxB,iBAAiB,CAAC,MAAM,EAAE,CAAC,CAAC;oCAC9B,CAAC,CAAC,EAAE,CAAC;gCACL,OAAO,EAAE,MAAM;6BAChB;4BACH,CAAC,CAAC;gCACE,GAAG,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC;oCACxB,iBAAiB,CAAC,MAAM,EAAE,CAAC,CAAC;oCAC9B,CAAC,CAAC,EAAE,CAAC;gCACL,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC;gCACvC,OAAO,EAAE,MAAM;6BAChB,CAAA;gBACP,CAAC;YACH,CAAC;QACH,CAAC;QAED,mEAAmE;QACnE,IAAI,SAAS,EAAE,CAAC;YACd,GAAG,CAAC,MAAM;gBACR,OAAO,CAAC,CAAC;oBACP;wBACE,GAAG,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;wBACxD,OAAO,EAAE,SAAS;qBACnB;oBACH,CAAC,CAAC;wBACE,GAAG,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;wBACxD,KAAK,EAAE,SAAS,CAAC,OAAO,CAAC,WAAW,EAAE,SAAS,CAAC;wBAChD,OAAO,EAAE,SAAS;qBACnB,CAAA;QACP,CAAC;QACD,IAAI,SAAS,EAAE,CAAC;YACd,GAAG,CAAC,OAAO;gBACT,OAAO,CAAC,CAAC;oBACP;wBACE,GAAG,CAAC,OAAO,KAAK,UAAU,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;wBAC1D,OAAO,EAAE,SAAS;qBACnB;oBACH,CAAC,CAAC;wBACE,GAAG,CAAC,OAAO,KAAK,UAAU,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;wBAC1D,KAAK,EAAE,SAAS,CAAC,OAAO,CAAC,WAAW,EAAE,SAAS,CAAC;wBAChD,OAAO,EAAE,SAAS;qBACnB,CAAA;QACP,CAAC;IACH,CAAC;IACD,OAAO,CAAC,CAAA;AAAA,CACT,CAAA;AAED,MAAM,iBAAiB,GAAG,CAAC,MAAc,EAAE,CAAa,EAAE,EAAE,CAAC;IAC3D,MAAM,EAAE,cAAc,EAAE,GAAG,CAAC,CAAA;IAC5B,IAAI,CAAC,cAAc;QAAE,OAAO,EAAE,CAAA;IAC9B,OAAO,MAAM,CAAC,WAAW,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAA;AAAA,CAChE,CAAA;AAED,MAAM,CAAC,MAAM,OAAO,GAAG,CACrB,CAAyB,EACzB,GAA2C,EAC3C,EAAE,CAAC;IACH,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAA;IAC1D,MAAM,GAAG,GAAG,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAA;IACxD,MAAM,IAAI,GAAG,CAAC,EAAE,IAAI,IAAI,CAAC,CAAC,GAAG,CAAA;IAC7B,IAAI,IAAI,EAAE,CAAC;QACT,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,IAAI,CAAC,wDAAwD,CAAC,CAAA;YAC9D,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACxB,CAAC;QACD,MAAM,KAAK,GAAG,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAA;QACnE,GAAG,CAAC,IAAI,GAAG,GAAG,CAAA;QACd,IAAI,KAAK,IAAI,KAAK,KAAK,GAAG;YAAE,GAAG,CAAC,KAAK,GAAG,KAAK,CAAA;;YACxC,OAAO,GAAG,CAAC,KAAK,CAAA;IACvB,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,KAAK;YAAE,OAAO,CAAC,CAAC,IAAI,CAAA;QACxC,OAAO,GAAG,CAAC,IAAI,CAAA;QACf,OAAO,GAAG,CAAC,KAAK,CAAA;IAClB,CAAC;IAED,yCAAyC;IACzC,MAAM,SAAS,GAAG,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAA;IAC7D,MAAM,MAAM,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC,CAAC,SAAS,CAAA;IACvC,IAAI,MAAM,EAAE,CAAC;QACX,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,IAAI,CAAC,yDAAyD,CAAC,CAAA;YAC/D,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACxB,CAAC;QAED,GAAG,CAAC,MAAM,GAAG,SAAS,CAAA;IACxB,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,KAAK;YAAE,OAAO,CAAC,CAAC,MAAM,CAAA;QAC5C,OAAO,GAAG,CAAC,MAAM,CAAA;IACnB,CAAC;AAAA,CACF,CAAA;AAED,GAAG,CAAC,OAAO,GAAG,UAAU,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,CAAA;AAE1C,OAAO,CAAC,MAAM,EAAE,GAA6C,CAAC,CAAA;AAC9D,eAAe,GAAG,CAAC,OAAO,CAAA","sourcesContent":["import { relative, resolve } from 'node:path/posix'\nimport type {\n ConditionalValue,\n ConditionalValueObject,\n ExportsSubpaths,\n} from 'resolve-import'\nimport config from './config.js'\nimport dialects from './dialects.js'\nimport fail from './fail.js'\nimport pkg from './package.js'\nimport type { PolyfillSet } from './polyfills.js'\nimport polyfills from './polyfills.js'\nimport { resolveExport } from './resolve-export.js'\nimport { Package, TshyConfig, TshyExport } from './types.js'\nconst { esmDialects = [], commonjsDialects = [] } = config\n\nconst liveDev =\n config.liveDev &&\n process.env.npm_command !== 'publish' &&\n process.env.npm_command !== 'pack'\n\nconst getTargetForDialectCondition = <T extends string>(\n s: string | TshyExport | undefined | null,\n dialect: T,\n condition: T extends 'esm' ? 'import'\n : T extends 'commonjs' ? 'require'\n : T,\n type: T extends 'esm' ? 'esm'\n : T extends 'commonjs' ? 'commonjs'\n : 'esm' | 'commonjs',\n polyfills: Map<string, PolyfillSet> = new Map(),\n): string | undefined | null => {\n if (s === undefined) return undefined\n if (typeof s === 'string') {\n // the excluded filename pattern\n const xts = type === 'commonjs' ? '.mts' : '.cts'\n if (s.endsWith(xts)) return undefined\n const pf = dialect === 'commonjs' ? 'cjs' : dialect\n const rel = relative(\n resolve('./src'),\n resolve(polyfills.get(pf)?.map.get(s) ?? s),\n )\n const target = liveDev ? rel : rel.replace(/\\.([mc]?)tsx?$/, '.$1js')\n return (\n !s || !s.startsWith('./src/') ? s\n : dialects.includes(type) ? `./dist/${dialect}/${target}`\n : undefined\n )\n }\n return resolveExport(s, [condition])\n}\n\nexport const getImpTarget = (\n s: string | TshyExport | undefined | null,\n polyfills: Map<string, PolyfillSet> = new Map(),\n) => getTargetForDialectCondition(s, 'esm', 'import', 'esm', polyfills)\n\nexport const getReqTarget = (\n s: string | TshyExport | undefined | null,\n polyfills: Map<string, PolyfillSet> = new Map(),\n) =>\n getTargetForDialectCondition(\n s,\n 'commonjs',\n 'require',\n 'commonjs',\n polyfills,\n )\n\nconst getExports = (\n c: TshyConfig,\n pkgType: 'commonjs' | 'module',\n): Record<string, ConditionalValue> => {\n // by this time it always exports, will get the default if missing\n /* c8 ignore start */\n if (!c.exports) {\n fail('no exports on tshy config (is there code in ./src?)')\n return process.exit(1)\n }\n /* c8 ignore stop */\n const e: Record<string, ConditionalValue> = {}\n for (const [sub, s] of Object.entries(c.exports)) {\n // external export, not built by us\n if (s !== null && (typeof s !== 'string' || !s.startsWith('./src/'))) {\n // already been validated, just accept as-is\n e[sub] = s as ConditionalValue\n continue\n }\n\n /* c8 ignore next - already guarded */\n if (s === null) continue\n\n const impTarget = getImpTarget(s, polyfills)\n const reqTarget = getReqTarget(s, polyfills)\n\n // should be impossible\n /* c8 ignore start */\n if (!impTarget && !reqTarget) continue\n /* c8 ignore stop */\n\n const exp: ConditionalValueObject = (e[sub] = {})\n if (impTarget) {\n for (const d of esmDialects) {\n const source = s && (polyfills.get(d)?.map.get(s) ?? s)\n\n const target = getTargetForDialectCondition(\n s,\n d,\n d,\n 'esm',\n polyfills,\n )\n if (target) {\n exp[d] =\n liveDev ?\n {\n ...(pkgType === 'commonjs' ?\n getSourceDialects(source, c)\n : {}),\n default: target,\n }\n : {\n ...(pkgType === 'commonjs' ?\n getSourceDialects(source, c)\n : {}),\n types: target.replace(/\\.js$/, '.d.ts'),\n default: target,\n }\n }\n }\n }\n\n if (reqTarget) {\n for (const d of commonjsDialects) {\n const source = s && (polyfills.get(d)?.map.get(s) ?? s)\n const target = getTargetForDialectCondition(\n s,\n d,\n d,\n 'commonjs',\n polyfills,\n )\n if (target) {\n exp[d] =\n liveDev ?\n {\n ...(pkgType === 'module' ?\n getSourceDialects(source, c)\n : {}),\n default: target,\n }\n : {\n ...(pkgType === 'module' ?\n getSourceDialects(source, c)\n : {}),\n types: target.replace(/\\.js$/, '.d.ts'),\n default: target,\n }\n }\n }\n }\n\n // put the default import/require after all the other special ones.\n if (impTarget) {\n exp.import =\n liveDev ?\n {\n ...(pkgType === 'module' ? getSourceDialects(s, c) : {}),\n default: impTarget,\n }\n : {\n ...(pkgType === 'module' ? getSourceDialects(s, c) : {}),\n types: impTarget.replace(/\\.(m?)js$/, '.d.$1ts'),\n default: impTarget,\n }\n }\n if (reqTarget) {\n exp.require =\n liveDev ?\n {\n ...(pkgType === 'commonjs' ? getSourceDialects(s, c) : {}),\n default: reqTarget,\n }\n : {\n ...(pkgType === 'commonjs' ? getSourceDialects(s, c) : {}),\n types: reqTarget.replace(/\\.(c?)js$/, '.d.$1ts'),\n default: reqTarget,\n }\n }\n }\n return e\n}\n\nconst getSourceDialects = (source: string, c: TshyConfig) => {\n const { sourceDialects } = c\n if (!sourceDialects) return {}\n return Object.fromEntries(sourceDialects.map(s => [s, source]))\n}\n\nexport const setMain = (\n c: TshyConfig | undefined,\n pkg: Package & { exports: ExportsSubpaths },\n) => {\n pkg.type = pkg.type === 'commonjs' ? 'commonjs' : 'module'\n const mod = resolveExport(pkg.exports['.'], ['require'])\n const main = c?.main ?? !!mod\n if (main) {\n if (!mod) {\n fail(`could not resolve exports['.'] for tshy.main 'require'`)\n return process.exit(1)\n }\n const types = resolveExport(pkg.exports['.'], ['require', 'types'])\n pkg.main = mod\n if (types && types !== mod) pkg.types = types\n else delete pkg.types\n } else {\n if (c && c.main !== false) delete c.main\n delete pkg.main\n delete pkg.types\n }\n\n // Set the package module to exports[\".\"]\n const importMod = resolveExport(pkg.exports['.'], ['import'])\n const module = c?.module ?? !!importMod\n if (module) {\n if (!importMod) {\n fail(`could not resolve exports['.'] for tshy.module 'import'`)\n return process.exit(1)\n }\n\n pkg.module = importMod\n } else {\n if (c && c.module !== false) delete c.module\n delete pkg.module\n }\n}\n\npkg.exports = getExports(config, pkg.type)\n\nsetMain(config, pkg as Package & { exports: ExportsSubpaths })\nexport default pkg.exports\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"unbuilt-imports.d.ts","sourceRoot":"","sources":["../../src/unbuilt-imports.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAKpC,eAAO,MAAM,IAAI,wBAkBhB,CAAA;AAwCD,eAAO,MAAM,IAAI,8DAiChB,CAAA;AAGD,eAAO,MAAM,MAAM,8CAelB,CAAA","sourcesContent":["// this is the thing that supports top-level package.json imports\n// via symlinks, not the tshy.imports which are just config.\nimport { writeFileSync } from 'fs'\nimport { symlink } from 'fs/promises'\nimport { mkdirp } from 'mkdirp'\nimport { dirname, relative, resolve, sep } from 'path'\nimport {\n getAllConditionalValues,\n getUniqueConditionSets,\n resolveAllLocalImports,\n} from 'resolve-import'\nimport { rimraf } from 'rimraf'\nimport { fileURLToPath } from 'url'\nimport * as console from './console.js'\nimport { Package } from './types.js'\n\nconst dirsMade = new Set<string>()\n\n// write out the steps to the save file script\nexport const save = (f: string): boolean => {\n const links = [...saveSet.entries()]\n if (!links.length) return false\n const dirs = new Set<string>(links.map(([dest]) => dirname(dest)))\n console.debug('save import linker', f)\n writeFileSync(\n f,\n `import { mkdirSync } from 'node:fs'\nimport { symlink } from 'node:fs/promises'\nconst dirs = ${JSON.stringify([...dirs])}\nconst links = [\n${links.map(l => ` ${JSON.stringify(l)},\\n`).join('')}]\nconst e = (er) => { if (er.code !== 'EEXIST') throw er }\nfor (const d of dirs) mkdirSync(d, { recursive: true })\nPromise.all(links.map(([dest, src]) => symlink(src, dest).catch(e)))\n`,\n )\n return true\n}\n\nlet targets: undefined | string[] = undefined\n// Get the targets that will have to be linked, because they're not\n// a target in ./src\nconst getTargets = async (imports: Record<string, any>) => {\n const conds = getAllConditionalValues(imports).filter(\n c => !c.startsWith('./src/'),\n )\n if (!conds.some(c => c.includes('*'))) {\n // fast path\n return (targets = conds.filter(c => c.startsWith('./')))\n }\n const sets = getUniqueConditionSets(imports)\n const t = new Set<string>()\n const pj = resolve('package.json')\n for (const conditions of sets) {\n const imps = await resolveAllLocalImports(pj, { conditions })\n for (const url of Object.values(imps)) {\n // node builtin\n if (typeof url === 'string') continue\n const p = fileURLToPath(url)\n const rel = relative(process.cwd(), p)\n // if it's empty, a dep in node_modules, or a built module, skip\n if (\n !rel ||\n rel.startsWith('..' + sep) ||\n rel.startsWith('src' + sep) ||\n rel.startsWith('node_modules' + sep)\n )\n continue\n t.add('./' + rel.replace(/\\\\/g, '/'))\n }\n }\n return (targets = [...t])\n}\n\nconst saveSet = new Map<string, string>()\n\n// create symlinks for the package imports in the target dir\nexport const link = async (pkg: Package, dir: string, save = false) => {\n const { imports } = pkg\n if (!imports) return\n if (!targets) targets = await getTargets(imports)\n if (!targets.length) return\n console.debug(`link import targets in ${dir}`, targets)\n const rel = relative(resolve(dir), process.cwd())\n const lps: Promise<any>[] = []\n for (const t of targets) {\n const l = t.replace(/^\\.\\//, '')\n const df = dirname(l)\n const dfrel =\n df === '.' ? '' : (\n df\n .split('/')\n .map(() => '../')\n .join('')\n )\n const dest = dir + '/' + l\n const src = rel + '/' + dfrel + l\n if (save) saveSet.set(dest, src)\n lps.push(\n mkdirp(dirname(dest))\n .then(d => {\n // if we aren't saving, then this is a transient link\n // save the dirs created so that we can clean them up\n if (!save && d) dirsMade.add(d)\n return rimraf(dest)\n })\n .then(() => symlink(src, dest)),\n )\n }\n await Promise.all(lps)\n}\n\n// remove symlinks created for package imports in the target dir\nexport const unlink = async (pkg: Package, dir: string) => {\n const { imports } = pkg\n if (!imports) return\n // will always have targets by this point\n /* c8 ignore start */\n if (!targets) targets = await getTargets(imports)\n /* c8 ignore stop */\n console.debug(`unlink import targets in ${dir}`, targets)\n const lps: Promise<any>[] = []\n for (const t of targets) {\n const dest = resolve(dir, t)\n lps.push(rimraf(dest))\n }\n for (const d of dirsMade) lps.push(rimraf(d))\n await Promise.all(lps)\n}\n"]}
1
+ {"version":3,"file":"unbuilt-imports.d.ts","sourceRoot":"","sources":["../../src/unbuilt-imports.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAKpC,eAAO,MAAM,IAAI,wBAkBhB,CAAA;AAwCD,eAAO,MAAM,IAAI,8DAiChB,CAAA;AAGD,eAAO,MAAM,MAAM,8CAelB,CAAA","sourcesContent":["// this is the thing that supports top-level package.json imports\n// via symlinks, not the tshy.imports which are just config.\nimport { writeFileSync } from 'fs'\nimport { symlink } from 'fs/promises'\nimport { mkdirp } from 'mkdirp'\nimport { dirname, relative, resolve, sep } from 'path'\nimport { getAllConditionalValues } from 'resolve-import/get-all-conditional-values'\nimport { getUniqueConditionSets } from 'resolve-import/get-unique-condition-sets'\nimport { resolveAllLocalImports } from 'resolve-import/resolve-all-local-imports'\nimport { rimraf } from 'rimraf'\nimport { fileURLToPath } from 'url'\nimport * as console from './console.js'\nimport { Package } from './types.js'\n\nconst dirsMade = new Set<string>()\n\n// write out the steps to the save file script\nexport const save = (f: string): boolean => {\n const links = [...saveSet.entries()]\n if (!links.length) return false\n const dirs = new Set<string>(links.map(([dest]) => dirname(dest)))\n console.debug('save import linker', f)\n writeFileSync(\n f,\n `import { mkdirSync } from 'node:fs'\nimport { symlink } from 'node:fs/promises'\nconst dirs = ${JSON.stringify([...dirs])}\nconst links = [\n${links.map(l => ` ${JSON.stringify(l)},\\n`).join('')}]\nconst e = (er) => { if (er.code !== 'EEXIST') throw er }\nfor (const d of dirs) mkdirSync(d, { recursive: true })\nPromise.all(links.map(([dest, src]) => symlink(src, dest).catch(e)))\n`,\n )\n return true\n}\n\nlet targets: undefined | string[] = undefined\n// Get the targets that will have to be linked, because they're not\n// a target in ./src\nconst getTargets = async (imports: Record<string, any>) => {\n const conds = getAllConditionalValues(imports).filter(\n c => !c.startsWith('./src/'),\n )\n if (!conds.some(c => c.includes('*'))) {\n // fast path\n return (targets = conds.filter(c => c.startsWith('./')))\n }\n const sets = getUniqueConditionSets(imports)\n const t = new Set<string>()\n const pj = resolve('package.json')\n for (const conditions of sets) {\n const imps = await resolveAllLocalImports(pj, { conditions })\n for (const url of Object.values(imps)) {\n // node builtin\n if (typeof url === 'string') continue\n const p = fileURLToPath(url)\n const rel = relative(process.cwd(), p)\n // if it's empty, a dep in node_modules, or a built module, skip\n if (\n !rel ||\n rel.startsWith('..' + sep) ||\n rel.startsWith('src' + sep) ||\n rel.startsWith('node_modules' + sep)\n )\n continue\n t.add('./' + rel.replace(/\\\\/g, '/'))\n }\n }\n return (targets = [...t])\n}\n\nconst saveSet = new Map<string, string>()\n\n// create symlinks for the package imports in the target dir\nexport const link = async (pkg: Package, dir: string, save = false) => {\n const { imports } = pkg\n if (!imports) return\n if (!targets) targets = await getTargets(imports)\n if (!targets.length) return\n console.debug(`link import targets in ${dir}`, targets)\n const rel = relative(resolve(dir), process.cwd())\n const lps: Promise<any>[] = []\n for (const t of targets) {\n const l = t.replace(/^\\.\\//, '')\n const df = dirname(l)\n const dfrel =\n df === '.' ? '' : (\n df\n .split('/')\n .map(() => '../')\n .join('')\n )\n const dest = dir + '/' + l\n const src = rel + '/' + dfrel + l\n if (save) saveSet.set(dest, src)\n lps.push(\n mkdirp(dirname(dest))\n .then(d => {\n // if we aren't saving, then this is a transient link\n // save the dirs created so that we can clean them up\n if (!save && d) dirsMade.add(d)\n return rimraf(dest)\n })\n .then(() => symlink(src, dest)),\n )\n }\n await Promise.all(lps)\n}\n\n// remove symlinks created for package imports in the target dir\nexport const unlink = async (pkg: Package, dir: string) => {\n const { imports } = pkg\n if (!imports) return\n // will always have targets by this point\n /* c8 ignore start */\n if (!targets) targets = await getTargets(imports)\n /* c8 ignore stop */\n console.debug(`unlink import targets in ${dir}`, targets)\n const lps: Promise<any>[] = []\n for (const t of targets) {\n const dest = resolve(dir, t)\n lps.push(rimraf(dest))\n }\n for (const d of dirsMade) lps.push(rimraf(d))\n await Promise.all(lps)\n}\n"]}
@@ -4,7 +4,9 @@ import { writeFileSync } from 'fs';
4
4
  import { symlink } from 'fs/promises';
5
5
  import { mkdirp } from 'mkdirp';
6
6
  import { dirname, relative, resolve, sep } from 'path';
7
- import { getAllConditionalValues, getUniqueConditionSets, resolveAllLocalImports, } from 'resolve-import';
7
+ import { getAllConditionalValues } from 'resolve-import/get-all-conditional-values';
8
+ import { getUniqueConditionSets } from 'resolve-import/get-unique-condition-sets';
9
+ import { resolveAllLocalImports } from 'resolve-import/resolve-all-local-imports';
8
10
  import { rimraf } from 'rimraf';
9
11
  import { fileURLToPath } from 'url';
10
12
  import * as console from './console.js';
@@ -1 +1 @@
1
- {"version":3,"file":"unbuilt-imports.js","sourceRoot":"","sources":["../../src/unbuilt-imports.ts"],"names":[],"mappings":"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","sourcesContent":["// this is the thing that supports top-level package.json imports\n// via symlinks, not the tshy.imports which are just config.\nimport { writeFileSync } from 'fs'\nimport { symlink } from 'fs/promises'\nimport { mkdirp } from 'mkdirp'\nimport { dirname, relative, resolve, sep } from 'path'\nimport {\n getAllConditionalValues,\n getUniqueConditionSets,\n resolveAllLocalImports,\n} from 'resolve-import'\nimport { rimraf } from 'rimraf'\nimport { fileURLToPath } from 'url'\nimport * as console from './console.js'\nimport { Package } from './types.js'\n\nconst dirsMade = new Set<string>()\n\n// write out the steps to the save file script\nexport const save = (f: string): boolean => {\n const links = [...saveSet.entries()]\n if (!links.length) return false\n const dirs = new Set<string>(links.map(([dest]) => dirname(dest)))\n console.debug('save import linker', f)\n writeFileSync(\n f,\n `import { mkdirSync } from 'node:fs'\nimport { symlink } from 'node:fs/promises'\nconst dirs = ${JSON.stringify([...dirs])}\nconst links = [\n${links.map(l => ` ${JSON.stringify(l)},\\n`).join('')}]\nconst e = (er) => { if (er.code !== 'EEXIST') throw er }\nfor (const d of dirs) mkdirSync(d, { recursive: true })\nPromise.all(links.map(([dest, src]) => symlink(src, dest).catch(e)))\n`,\n )\n return true\n}\n\nlet targets: undefined | string[] = undefined\n// Get the targets that will have to be linked, because they're not\n// a target in ./src\nconst getTargets = async (imports: Record<string, any>) => {\n const conds = getAllConditionalValues(imports).filter(\n c => !c.startsWith('./src/'),\n )\n if (!conds.some(c => c.includes('*'))) {\n // fast path\n return (targets = conds.filter(c => c.startsWith('./')))\n }\n const sets = getUniqueConditionSets(imports)\n const t = new Set<string>()\n const pj = resolve('package.json')\n for (const conditions of sets) {\n const imps = await resolveAllLocalImports(pj, { conditions })\n for (const url of Object.values(imps)) {\n // node builtin\n if (typeof url === 'string') continue\n const p = fileURLToPath(url)\n const rel = relative(process.cwd(), p)\n // if it's empty, a dep in node_modules, or a built module, skip\n if (\n !rel ||\n rel.startsWith('..' + sep) ||\n rel.startsWith('src' + sep) ||\n rel.startsWith('node_modules' + sep)\n )\n continue\n t.add('./' + rel.replace(/\\\\/g, '/'))\n }\n }\n return (targets = [...t])\n}\n\nconst saveSet = new Map<string, string>()\n\n// create symlinks for the package imports in the target dir\nexport const link = async (pkg: Package, dir: string, save = false) => {\n const { imports } = pkg\n if (!imports) return\n if (!targets) targets = await getTargets(imports)\n if (!targets.length) return\n console.debug(`link import targets in ${dir}`, targets)\n const rel = relative(resolve(dir), process.cwd())\n const lps: Promise<any>[] = []\n for (const t of targets) {\n const l = t.replace(/^\\.\\//, '')\n const df = dirname(l)\n const dfrel =\n df === '.' ? '' : (\n df\n .split('/')\n .map(() => '../')\n .join('')\n )\n const dest = dir + '/' + l\n const src = rel + '/' + dfrel + l\n if (save) saveSet.set(dest, src)\n lps.push(\n mkdirp(dirname(dest))\n .then(d => {\n // if we aren't saving, then this is a transient link\n // save the dirs created so that we can clean them up\n if (!save && d) dirsMade.add(d)\n return rimraf(dest)\n })\n .then(() => symlink(src, dest)),\n )\n }\n await Promise.all(lps)\n}\n\n// remove symlinks created for package imports in the target dir\nexport const unlink = async (pkg: Package, dir: string) => {\n const { imports } = pkg\n if (!imports) return\n // will always have targets by this point\n /* c8 ignore start */\n if (!targets) targets = await getTargets(imports)\n /* c8 ignore stop */\n console.debug(`unlink import targets in ${dir}`, targets)\n const lps: Promise<any>[] = []\n for (const t of targets) {\n const dest = resolve(dir, t)\n lps.push(rimraf(dest))\n }\n for (const d of dirsMade) lps.push(rimraf(d))\n await Promise.all(lps)\n}\n"]}
1
+ {"version":3,"file":"unbuilt-imports.js","sourceRoot":"","sources":["../../src/unbuilt-imports.ts"],"names":[],"mappings":"AAAA,iEAAiE;AACjE,4DAA4D;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,IAAI,CAAA;AAClC,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC/B,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,MAAM,CAAA;AACtD,OAAO,EAAE,uBAAuB,EAAE,MAAM,2CAA2C,CAAA;AACnF,OAAO,EAAE,sBAAsB,EAAE,MAAM,0CAA0C,CAAA;AACjF,OAAO,EAAE,sBAAsB,EAAE,MAAM,0CAA0C,CAAA;AACjF,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC/B,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAA;AACnC,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AAGvC,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAA;AAElC,8CAA8C;AAC9C,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,CAAS,EAAW,EAAE,CAAC;IAC1C,MAAM,KAAK,GAAG,CAAC,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAAA;IACpC,IAAI,CAAC,KAAK,CAAC,MAAM;QAAE,OAAO,KAAK,CAAA;IAC/B,MAAM,IAAI,GAAG,IAAI,GAAG,CAAS,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IAClE,OAAO,CAAC,KAAK,CAAC,oBAAoB,EAAE,CAAC,CAAC,CAAA;IACtC,aAAa,CACX,CAAC,EACD;;eAEW,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;;EAEtC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;;;;CAIrD,CACE,CAAA;IACD,OAAO,IAAI,CAAA;AAAA,CACZ,CAAA;AAED,IAAI,OAAO,GAAyB,SAAS,CAAA;AAC7C,mEAAmE;AACnE,oBAAoB;AACpB,MAAM,UAAU,GAAG,KAAK,EAAE,OAA4B,EAAE,EAAE,CAAC;IACzD,MAAM,KAAK,GAAG,uBAAuB,CAAC,OAAO,CAAC,CAAC,MAAM,CACnD,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,CAC7B,CAAA;IACD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;QACtC,YAAY;QACZ,OAAO,CAAC,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IAC1D,CAAC;IACD,MAAM,IAAI,GAAG,sBAAsB,CAAC,OAAO,CAAC,CAAA;IAC5C,MAAM,CAAC,GAAG,IAAI,GAAG,EAAU,CAAA;IAC3B,MAAM,EAAE,GAAG,OAAO,CAAC,cAAc,CAAC,CAAA;IAClC,KAAK,MAAM,UAAU,IAAI,IAAI,EAAE,CAAC;QAC9B,MAAM,IAAI,GAAG,MAAM,sBAAsB,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,CAAA;QAC7D,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YACtC,eAAe;YACf,IAAI,OAAO,GAAG,KAAK,QAAQ;gBAAE,SAAQ;YACrC,MAAM,CAAC,GAAG,aAAa,CAAC,GAAG,CAAC,CAAA;YAC5B,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAA;YACtC,gEAAgE;YAChE,IACE,CAAC,GAAG;gBACJ,GAAG,CAAC,UAAU,CAAC,IAAI,GAAG,GAAG,CAAC;gBAC1B,GAAG,CAAC,UAAU,CAAC,KAAK,GAAG,GAAG,CAAC;gBAC3B,GAAG,CAAC,UAAU,CAAC,cAAc,GAAG,GAAG,CAAC;gBAEpC,SAAQ;YACV,CAAC,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAA;QACvC,CAAC;IACH,CAAC;IACD,OAAO,CAAC,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;AAAA,CAC1B,CAAA;AAED,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAA;AAEzC,4DAA4D;AAC5D,MAAM,CAAC,MAAM,IAAI,GAAG,KAAK,EAAE,GAAY,EAAE,GAAW,EAAE,IAAI,GAAG,KAAK,EAAE,EAAE,CAAC;IACrE,MAAM,EAAE,OAAO,EAAE,GAAG,GAAG,CAAA;IACvB,IAAI,CAAC,OAAO;QAAE,OAAM;IACpB,IAAI,CAAC,OAAO;QAAE,OAAO,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,CAAA;IACjD,IAAI,CAAC,OAAO,CAAC,MAAM;QAAE,OAAM;IAC3B,OAAO,CAAC,KAAK,CAAC,0BAA0B,GAAG,EAAE,EAAE,OAAO,CAAC,CAAA;IACvD,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAA;IACjD,MAAM,GAAG,GAAmB,EAAE,CAAA;IAC9B,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAA;QAChC,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;QACrB,MAAM,KAAK,GACT,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAChB,EAAE;aACC,KAAK,CAAC,GAAG,CAAC;aACV,GAAG,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC;aAChB,IAAI,CAAC,EAAE,CAAC,CACZ,CAAA;QACH,MAAM,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAA;QAC1B,MAAM,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,KAAK,GAAG,CAAC,CAAA;QACjC,IAAI,IAAI;YAAE,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;QAChC,GAAG,CAAC,IAAI,CACN,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;aAClB,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YACT,qDAAqD;YACrD,qDAAqD;YACrD,IAAI,CAAC,IAAI,IAAI,CAAC;gBAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;YAC/B,OAAO,MAAM,CAAC,IAAI,CAAC,CAAA;QAAA,CACpB,CAAC;aACD,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAClC,CAAA;IACH,CAAC;IACD,MAAM,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;AAAA,CACvB,CAAA;AAED,gEAAgE;AAChE,MAAM,CAAC,MAAM,MAAM,GAAG,KAAK,EAAE,GAAY,EAAE,GAAW,EAAE,EAAE,CAAC;IACzD,MAAM,EAAE,OAAO,EAAE,GAAG,GAAG,CAAA;IACvB,IAAI,CAAC,OAAO;QAAE,OAAM;IACpB,yCAAyC;IACzC,qBAAqB;IACrB,IAAI,CAAC,OAAO;QAAE,OAAO,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,CAAA;IACjD,oBAAoB;IACpB,OAAO,CAAC,KAAK,CAAC,4BAA4B,GAAG,EAAE,EAAE,OAAO,CAAC,CAAA;IACzD,MAAM,GAAG,GAAmB,EAAE,CAAA;IAC9B,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAA;QAC5B,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAA;IACxB,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,QAAQ;QAAE,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;IAC7C,MAAM,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;AAAA,CACvB,CAAA","sourcesContent":["// this is the thing that supports top-level package.json imports\n// via symlinks, not the tshy.imports which are just config.\nimport { writeFileSync } from 'fs'\nimport { symlink } from 'fs/promises'\nimport { mkdirp } from 'mkdirp'\nimport { dirname, relative, resolve, sep } from 'path'\nimport { getAllConditionalValues } from 'resolve-import/get-all-conditional-values'\nimport { getUniqueConditionSets } from 'resolve-import/get-unique-condition-sets'\nimport { resolveAllLocalImports } from 'resolve-import/resolve-all-local-imports'\nimport { rimraf } from 'rimraf'\nimport { fileURLToPath } from 'url'\nimport * as console from './console.js'\nimport { Package } from './types.js'\n\nconst dirsMade = new Set<string>()\n\n// write out the steps to the save file script\nexport const save = (f: string): boolean => {\n const links = [...saveSet.entries()]\n if (!links.length) return false\n const dirs = new Set<string>(links.map(([dest]) => dirname(dest)))\n console.debug('save import linker', f)\n writeFileSync(\n f,\n `import { mkdirSync } from 'node:fs'\nimport { symlink } from 'node:fs/promises'\nconst dirs = ${JSON.stringify([...dirs])}\nconst links = [\n${links.map(l => ` ${JSON.stringify(l)},\\n`).join('')}]\nconst e = (er) => { if (er.code !== 'EEXIST') throw er }\nfor (const d of dirs) mkdirSync(d, { recursive: true })\nPromise.all(links.map(([dest, src]) => symlink(src, dest).catch(e)))\n`,\n )\n return true\n}\n\nlet targets: undefined | string[] = undefined\n// Get the targets that will have to be linked, because they're not\n// a target in ./src\nconst getTargets = async (imports: Record<string, any>) => {\n const conds = getAllConditionalValues(imports).filter(\n c => !c.startsWith('./src/'),\n )\n if (!conds.some(c => c.includes('*'))) {\n // fast path\n return (targets = conds.filter(c => c.startsWith('./')))\n }\n const sets = getUniqueConditionSets(imports)\n const t = new Set<string>()\n const pj = resolve('package.json')\n for (const conditions of sets) {\n const imps = await resolveAllLocalImports(pj, { conditions })\n for (const url of Object.values(imps)) {\n // node builtin\n if (typeof url === 'string') continue\n const p = fileURLToPath(url)\n const rel = relative(process.cwd(), p)\n // if it's empty, a dep in node_modules, or a built module, skip\n if (\n !rel ||\n rel.startsWith('..' + sep) ||\n rel.startsWith('src' + sep) ||\n rel.startsWith('node_modules' + sep)\n )\n continue\n t.add('./' + rel.replace(/\\\\/g, '/'))\n }\n }\n return (targets = [...t])\n}\n\nconst saveSet = new Map<string, string>()\n\n// create symlinks for the package imports in the target dir\nexport const link = async (pkg: Package, dir: string, save = false) => {\n const { imports } = pkg\n if (!imports) return\n if (!targets) targets = await getTargets(imports)\n if (!targets.length) return\n console.debug(`link import targets in ${dir}`, targets)\n const rel = relative(resolve(dir), process.cwd())\n const lps: Promise<any>[] = []\n for (const t of targets) {\n const l = t.replace(/^\\.\\//, '')\n const df = dirname(l)\n const dfrel =\n df === '.' ? '' : (\n df\n .split('/')\n .map(() => '../')\n .join('')\n )\n const dest = dir + '/' + l\n const src = rel + '/' + dfrel + l\n if (save) saveSet.set(dest, src)\n lps.push(\n mkdirp(dirname(dest))\n .then(d => {\n // if we aren't saving, then this is a transient link\n // save the dirs created so that we can clean them up\n if (!save && d) dirsMade.add(d)\n return rimraf(dest)\n })\n .then(() => symlink(src, dest)),\n )\n }\n await Promise.all(lps)\n}\n\n// remove symlinks created for package imports in the target dir\nexport const unlink = async (pkg: Package, dir: string) => {\n const { imports } = pkg\n if (!imports) return\n // will always have targets by this point\n /* c8 ignore start */\n if (!targets) targets = await getTargets(imports)\n /* c8 ignore stop */\n console.debug(`unlink import targets in ${dir}`, targets)\n const lps: Promise<any>[] = []\n for (const t of targets) {\n const dest = resolve(dir, t)\n lps.push(rimraf(dest))\n }\n for (const d of dirsMade) lps.push(rimraf(d))\n await Promise.all(lps)\n}\n"]}
@@ -1,3 +1,3 @@
1
- declare const _default: (e: any) => e is (string | string[] | Record<string, import("resolve-import").ConditionalValue>) & Record<string, import("resolve-import").ConditionalValue>;
1
+ declare const _default: (e: any) => e is (string | string[] | Record<string, import("resolve-import/raw").ConditionalValue>) & Record<string, import("resolve-import/raw").ConditionalValue>;
2
2
  export default _default;
3
3
  //# sourceMappingURL=valid-exports.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"which-tsc.d.ts","sourceRoot":"","sources":["../../src/which-tsc.ts"],"names":[],"mappings":";AA2BA,wBAAkE","sourcesContent":["// find the location of the tsc binary\n// This is necessary because pnpm install trees don't expose binaries\n// of meta-deps, and it's nicer to not require that the tshy user has\n// a dep on typescript directly if they don't need it otherwise.\n// However, if they DO have a direct dep on typescript, then load the\n// tsc from their local node_modules/.bin/tsc location.\nimport { resolveImport } from 'resolve-import'\nimport { fileURLToPath } from 'url'\nimport config from './config.js'\n\nconst provider = {\n tsgo: '@typescript/native-preview',\n tsc: 'typescript',\n} as const\n\n// use theirs if possible, otherwise use tshy's\nconst resolve = async (pkg: (typeof provider)[keyof typeof provider]) =>\n await resolveImport(pkg + '/package.json', process.cwd() + '/x').catch(\n () => resolveImport(pkg + '/package.json', import.meta.url),\n )\n\nconst { compiler = 'tsc' } = config\nconst provPkg = provider[compiler]\n\nconst pjToCompiler = (pj: string) =>\n pj.slice(0, -1 * (provPkg + '/package.json').length) + `.bin/${compiler}`\n\nexport default pjToCompiler(fileURLToPath(await resolve(provPkg)))\n"]}
1
+ {"version":3,"file":"which-tsc.d.ts","sourceRoot":"","sources":["../../src/which-tsc.ts"],"names":[],"mappings":";AAgCA,wBAAkE","sourcesContent":["// find the location of the tsc binary\n// This is necessary because pnpm install trees don't expose binaries\n// of meta-deps, and it's nicer to not require that the tshy user has\n// a dep on typescript directly if they don't need it otherwise.\n// However, if they DO have a direct dep on typescript, then load the\n// tsc from their local node_modules/.bin/tsc location.\nimport { resolveImport } from 'resolve-import/resolve-import-async'\nimport { fileURLToPath } from 'url'\nimport config from './config.js'\n\nconst provider = {\n tsgo: '@typescript/native-preview',\n tsc: 'typescript',\n} as const\n\nconst pjToCompilerPath = {\n tsgo: 'bin/tsgo.js',\n tsc: 'bin/tsc',\n} as const\n\n// use theirs if possible, otherwise use tshy's\nconst resolve = async (pkg: (typeof provider)[keyof typeof provider]) =>\n await resolveImport(pkg + '/package.json', process.cwd() + '/x').catch(\n () => resolveImport(pkg + '/package.json', import.meta.url),\n )\n\nconst { compiler = 'tsc' } = config\nconst provPkg = provider[compiler]\n\nconst pjToCompiler = (pj: string) =>\n pj.slice(0, -1 * 'package.json'.length) + pjToCompilerPath[compiler]\n\nexport default pjToCompiler(fileURLToPath(await resolve(provPkg)))\n"]}
@@ -4,17 +4,21 @@
4
4
  // a dep on typescript directly if they don't need it otherwise.
5
5
  // However, if they DO have a direct dep on typescript, then load the
6
6
  // tsc from their local node_modules/.bin/tsc location.
7
- import { resolveImport } from 'resolve-import';
7
+ import { resolveImport } from 'resolve-import/resolve-import-async';
8
8
  import { fileURLToPath } from 'url';
9
9
  import config from './config.js';
10
10
  const provider = {
11
11
  tsgo: '@typescript/native-preview',
12
12
  tsc: 'typescript',
13
13
  };
14
+ const pjToCompilerPath = {
15
+ tsgo: 'bin/tsgo.js',
16
+ tsc: 'bin/tsc',
17
+ };
14
18
  // use theirs if possible, otherwise use tshy's
15
19
  const resolve = async (pkg) => await resolveImport(pkg + '/package.json', process.cwd() + '/x').catch(() => resolveImport(pkg + '/package.json', import.meta.url));
16
20
  const { compiler = 'tsc' } = config;
17
21
  const provPkg = provider[compiler];
18
- const pjToCompiler = (pj) => pj.slice(0, -1 * (provPkg + '/package.json').length) + `.bin/${compiler}`;
22
+ const pjToCompiler = (pj) => pj.slice(0, -1 * 'package.json'.length) + pjToCompilerPath[compiler];
19
23
  export default pjToCompiler(fileURLToPath(await resolve(provPkg)));
20
24
  //# sourceMappingURL=which-tsc.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"which-tsc.js","sourceRoot":"","sources":["../../src/which-tsc.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,qEAAqE;AACrE,qEAAqE;AACrE,gEAAgE;AAChE,qEAAqE;AACrE,uDAAuD;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAA;AACnC,OAAO,MAAM,MAAM,aAAa,CAAA;AAEhC,MAAM,QAAQ,GAAG;IACf,IAAI,EAAE,4BAA4B;IAClC,GAAG,EAAE,YAAY;CACT,CAAA;AAEV,+CAA+C;AAC/C,MAAM,OAAO,GAAG,KAAK,EAAE,GAA6C,EAAE,EAAE,CACtE,MAAM,aAAa,CAAC,GAAG,GAAG,eAAe,EAAE,OAAO,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,KAAK,CACpE,GAAG,EAAE,CAAC,aAAa,CAAC,GAAG,GAAG,eAAe,EAAE,OAAO,IAAI,CAAC,GAAG,CAAC,CAC5D,CAAA;AAEH,MAAM,EAAE,QAAQ,GAAG,KAAK,EAAE,GAAG,MAAM,CAAA;AACnC,MAAM,OAAO,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAA;AAElC,MAAM,YAAY,GAAG,CAAC,EAAU,EAAE,EAAE,CAClC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,OAAO,GAAG,eAAe,CAAC,CAAC,MAAM,CAAC,GAAG,QAAQ,QAAQ,EAAE,CAAA;AAE3E,eAAe,YAAY,CAAC,aAAa,CAAC,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA","sourcesContent":["// find the location of the tsc binary\n// This is necessary because pnpm install trees don't expose binaries\n// of meta-deps, and it's nicer to not require that the tshy user has\n// a dep on typescript directly if they don't need it otherwise.\n// However, if they DO have a direct dep on typescript, then load the\n// tsc from their local node_modules/.bin/tsc location.\nimport { resolveImport } from 'resolve-import'\nimport { fileURLToPath } from 'url'\nimport config from './config.js'\n\nconst provider = {\n tsgo: '@typescript/native-preview',\n tsc: 'typescript',\n} as const\n\n// use theirs if possible, otherwise use tshy's\nconst resolve = async (pkg: (typeof provider)[keyof typeof provider]) =>\n await resolveImport(pkg + '/package.json', process.cwd() + '/x').catch(\n () => resolveImport(pkg + '/package.json', import.meta.url),\n )\n\nconst { compiler = 'tsc' } = config\nconst provPkg = provider[compiler]\n\nconst pjToCompiler = (pj: string) =>\n pj.slice(0, -1 * (provPkg + '/package.json').length) + `.bin/${compiler}`\n\nexport default pjToCompiler(fileURLToPath(await resolve(provPkg)))\n"]}
1
+ {"version":3,"file":"which-tsc.js","sourceRoot":"","sources":["../../src/which-tsc.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,qEAAqE;AACrE,qEAAqE;AACrE,gEAAgE;AAChE,qEAAqE;AACrE,uDAAuD;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAA;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAA;AACnC,OAAO,MAAM,MAAM,aAAa,CAAA;AAEhC,MAAM,QAAQ,GAAG;IACf,IAAI,EAAE,4BAA4B;IAClC,GAAG,EAAE,YAAY;CACT,CAAA;AAEV,MAAM,gBAAgB,GAAG;IACvB,IAAI,EAAE,aAAa;IACnB,GAAG,EAAE,SAAS;CACN,CAAA;AAEV,+CAA+C;AAC/C,MAAM,OAAO,GAAG,KAAK,EAAE,GAA6C,EAAE,EAAE,CACtE,MAAM,aAAa,CAAC,GAAG,GAAG,eAAe,EAAE,OAAO,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,KAAK,CACpE,GAAG,EAAE,CAAC,aAAa,CAAC,GAAG,GAAG,eAAe,EAAE,OAAO,IAAI,CAAC,GAAG,CAAC,CAC5D,CAAA;AAEH,MAAM,EAAE,QAAQ,GAAG,KAAK,EAAE,GAAG,MAAM,CAAA;AACnC,MAAM,OAAO,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAA;AAElC,MAAM,YAAY,GAAG,CAAC,EAAU,EAAE,EAAE,CAClC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,cAAc,CAAC,MAAM,CAAC,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAA;AAEtE,eAAe,YAAY,CAAC,aAAa,CAAC,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA","sourcesContent":["// find the location of the tsc binary\n// This is necessary because pnpm install trees don't expose binaries\n// of meta-deps, and it's nicer to not require that the tshy user has\n// a dep on typescript directly if they don't need it otherwise.\n// However, if they DO have a direct dep on typescript, then load the\n// tsc from their local node_modules/.bin/tsc location.\nimport { resolveImport } from 'resolve-import/resolve-import-async'\nimport { fileURLToPath } from 'url'\nimport config from './config.js'\n\nconst provider = {\n tsgo: '@typescript/native-preview',\n tsc: 'typescript',\n} as const\n\nconst pjToCompilerPath = {\n tsgo: 'bin/tsgo.js',\n tsc: 'bin/tsc',\n} as const\n\n// use theirs if possible, otherwise use tshy's\nconst resolve = async (pkg: (typeof provider)[keyof typeof provider]) =>\n await resolveImport(pkg + '/package.json', process.cwd() + '/x').catch(\n () => resolveImport(pkg + '/package.json', import.meta.url),\n )\n\nconst { compiler = 'tsc' } = config\nconst provPkg = provider[compiler]\n\nconst pjToCompiler = (pj: string) =>\n pj.slice(0, -1 * 'package.json'.length) + pjToCompilerPath[compiler]\n\nexport default pjToCompiler(fileURLToPath(await resolve(provPkg)))\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tshy",
3
- "version": "3.3.0",
3
+ "version": "3.3.2",
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",
@@ -18,7 +18,7 @@
18
18
  "minimatch": "^10.0.3",
19
19
  "mkdirp": "^3.0.1",
20
20
  "polite-json": "^5.0.0",
21
- "resolve-import": "^2.1.1",
21
+ "resolve-import": "^2.4.0",
22
22
  "rimraf": "^6.1.2",
23
23
  "sync-content": "^2.0.3",
24
24
  "typescript": "^5.9.3",