@sanity/pkg-utils 12.1.0 → 12.1.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.
@@ -1,7 +1,7 @@
1
1
  import { n as createLogger, r as isRecord, t as handleError } from "./handleError-83GwKIFM.js";
2
- import { a as loadPkgWithReporting, o as loadConfig, t as resolveBuildContext } from "./resolveBuildContext-clvZ-QQy.js";
2
+ import { a as loadPkgWithReporting, o as loadConfig, t as resolveBuildContext } from "./resolveBuildContext-DYZxWVVc.js";
3
3
  import { t as createSpinner } from "./spinner-DAHe7SuT.js";
4
- import { r as resolveTsdownBuilds, t as resolveTsdownConfig } from "./resolveTsdownConfig-fBDvhjvu.js";
4
+ import { r as resolveTsdownBuilds, t as resolveTsdownConfig } from "./resolveTsdownConfig-D4boYIwx.js";
5
5
  import { existsSync, readFileSync, rmSync, writeFileSync } from "node:fs";
6
6
  import path from "node:path";
7
7
  import { up } from "empathic/package";
@@ -32,7 +32,7 @@ async function build$1(options) {
32
32
  let config = await loadConfig({
33
33
  cwd,
34
34
  pkgPath
35
- }), { parseStrictOptions } = await import("./resolveBuildContext-clvZ-QQy.js").then((n) => n.n), strictOptions = parseStrictOptions(config?.strictOptions ?? {}), pkg = await loadPkgWithReporting({
35
+ }), { parseStrictOptions } = await import("./resolveBuildContext-DYZxWVVc.js").then((n) => n.n), strictOptions = parseStrictOptions(config?.strictOptions ?? {}), pkg = await loadPkgWithReporting({
36
36
  pkgPath,
37
37
  logger,
38
38
  strict,
@@ -147,4 +147,4 @@ async function buildAction(options) {
147
147
  }
148
148
  export { buildAction };
149
149
 
150
- //# sourceMappingURL=buildAction-BzyCXuxp.js.map
150
+ //# sourceMappingURL=buildAction-C8MCKsDz.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"buildAction-BzyCXuxp.js","names":["build","findPkgPath","tsdownBuild","build"],"sources":["../src/node/build.ts","../src/cli/buildAction.ts"],"sourcesContent":["import {existsSync, readFileSync, rmSync, writeFileSync} from 'node:fs'\nimport path from 'node:path'\nimport {up as findPkgPath} from 'empathic/package'\nimport {build as tsdownBuild, type TsdownBundle} from 'tsdown'\nimport {loadConfig} from './core/config/loadConfig.ts'\nimport {isRecord} from './core/isRecord.ts'\nimport {loadPkgWithReporting} from './core/pkg/loadPkgWithReporting.ts'\nimport {createLogger, type Logger} from './logger.ts'\nimport {resolveBuildContext} from './resolveBuildContext.ts'\nimport {createSpinner} from './spinner.ts'\nimport {\n resolveTsdownBuilds,\n type TsdownBuild as TsdownBuildDef,\n} from './tasks/tsdown/resolveTsdownBuilds.ts'\nimport {resolveTsdownConfig} from './tasks/tsdown/resolveTsdownConfig.ts'\n\nconst RE_TS_SOURCE = /\\.[cm]?tsx?$/\n\n/**\n * Build the distribution files of a npm package.\n *\n * @example\n * ```ts\n * import {build} from '@sanity/pkg-utils'\n *\n * build({\n * cwd: process.cwd(),\n * tsconfig: 'tsconfig.dist.json,\n * }).then(() => {\n * console.log('successfully built')\n * }).catch((err) => {\n * console.log(`build error: ${err.message}`)\n * })\n * ```\n *\n * @public\n */\nexport async function build(options: {\n cwd: string\n emitDeclarationOnly?: boolean\n strict?: boolean\n tsconfig?: string\n clean?: boolean\n quiet?: boolean\n}): Promise<void> {\n const {\n cwd,\n emitDeclarationOnly,\n strict = false,\n tsconfig: tsconfigOption,\n // `--no-clean` skips cleaning for this run; `true` (the CLI default — `--clean` still\n // parses as a no-op for v11 compatibility) defers to the `clean` config option\n clean = true,\n quiet = false,\n } = options\n const logger = createLogger(quiet)\n\n const pkgPath = findPkgPath({cwd})\n if (!pkgPath) {\n throw new Error('no package.json found', {cause: {cwd}})\n }\n const config = await loadConfig({cwd, pkgPath})\n\n const {parseStrictOptions} = await import('./strict.ts')\n const strictOptions = parseStrictOptions(config?.strictOptions ?? {})\n const pkg = await loadPkgWithReporting({pkgPath, logger, strict, strictOptions})\n\n const tsconfig = tsconfigOption || config?.tsconfig || 'tsconfig.json'\n\n const ctx = await resolveBuildContext({\n config,\n cwd,\n emitDeclarationOnly,\n logger,\n pkg,\n strict,\n tsconfig,\n })\n\n warnAboutTsdownConfigFiles(cwd, logger)\n\n const builds = resolveTsdownBuilds(ctx)\n\n let first = true\n for (const buildDef of builds) {\n // A types-only run skips builds without TypeScript sources entirely\n if (\n ctx.emitDeclarationOnly &&\n !buildDef.entries.some((entry) => RE_TS_SOURCE.test(entry.source))\n ) {\n continue\n }\n\n const taskName = buildTaskName(buildDef)\n const spinner = createSpinner(taskName, quiet)\n\n try {\n const inlineConfig = await resolveTsdownConfig(ctx, buildDef, {clean: first && clean})\n first = false\n\n const bundles = await tsdownBuild(inlineConfig)\n\n if (ctx.emitDeclarationOnly) {\n // `dts.emitDtsOnly` suppresses the JS chunks of the ES pass, but the CJS pass emits\n // its JS regardless (only its extra dts pass runs the dts plugin) — a types-only\n // build removes everything that is not a declaration file\n removeNonDeclarationOutputs(bundles)\n }\n\n if (buildDef.canonical) {\n restoreAuthoredTypes(ctx)\n }\n\n spinner.complete()\n ctx.logger.log()\n\n printBuildOutputs(ctx, bundles, buildDef)\n ctx.logger.log()\n } catch (err) {\n spinner.error()\n\n if (err instanceof Error) {\n const RE_CWD = new RegExp(escapeRegExp(cwd), 'g')\n\n ctx.logger.error((err.stack || err.message).replace(RE_CWD, '.'))\n ctx.logger.log()\n }\n\n process.exit(1)\n }\n }\n}\n\nfunction buildTaskName(buildDef: TsdownBuildDef): string {\n const formats = Array.from(new Set(buildDef.entries.flatMap((entry) => entry.formats)))\n return `build ${buildDef.key} (${formats.join(', ') || 'types'})`\n}\n\nconst RE_DTS_OUTPUT = /\\.d\\.[mc]?ts(\\.map)?$/\n\n/** Removes every emitted file that is not a declaration file (or its sourcemap). */\nfunction removeNonDeclarationOutputs(bundles: TsdownBundle[]): void {\n for (const bundle of bundles) {\n for (const chunk of bundle.chunks) {\n if (RE_DTS_OUTPUT.test(chunk.fileName)) continue\n rmSync(path.join(chunk.outDir, chunk.fileName), {force: true})\n rmSync(path.join(chunk.outDir, `${chunk.fileName}.map`), {force: true})\n }\n }\n}\n\n/**\n * Prints `<pkg>: <source> → <output>` for every entry chunk (JS and `.d.ts`) that tsdown\n * emitted, mirroring the per-file output of previous majors.\n */\nfunction printBuildOutputs(\n ctx: {\n cwd: string\n distPath: string\n emitDeclarationOnly: boolean\n logger: Logger\n pkg: {name: string}\n },\n bundles: TsdownBundle[],\n buildDef: TsdownBuildDef,\n): void {\n const {cwd, logger, pkg} = ctx\n const lines = new Set<string>()\n\n // Stylesheets are emitted as assets, which carry no `facadeModuleId` back to their source,\n // so the stylesheet build's lines come from its entry map instead.\n if (buildDef.css) {\n for (const entry of buildDef.entries) {\n const output = `./${path\n .relative(cwd, path.join(ctx.distPath, `${entry.alias}.css`))\n .replaceAll('\\\\', '/')}`\n lines.add(\n `${pkg.name}: ./${path.relative(cwd, path.resolve(cwd, entry.source)).replaceAll('\\\\', '/')} \\u2192 ${output}`,\n )\n }\n }\n\n for (const bundle of bundles) {\n for (const chunk of bundle.chunks) {\n if (chunk.type !== 'chunk' || !chunk.isEntry || !chunk.facadeModuleId) continue\n if (ctx.emitDeclarationOnly && !RE_DTS_OUTPUT.test(chunk.fileName)) continue\n const source = `./${path\n .relative(cwd, chunk.facadeModuleId)\n .replaceAll('\\\\', '/')\n // the dts chunks facade the fake `.d.ts` module ids of rolldown-plugin-dts; print the\n // actual `.ts` source instead\n .replace(/\\.d\\.([mc]?)ts$/, '.$1ts')}`\n const output = `./${path\n .relative(cwd, path.join(chunk.outDir, chunk.fileName))\n .replaceAll('\\\\', '/')}`\n lines.add(`${pkg.name}: ${source} \\u2192 ${output}`)\n }\n }\n\n for (const line of Array.from(lines).toSorted()) {\n logger.log(line)\n }\n}\n\n/**\n * tsdown's exports generation rewrites the top-level `types` field alongside `main`/`module`\n * when the `legacy` fields are maintained, preferring the CJS declarations (`.d.cts`) for\n * dual-format packages. The hand-written value is authoritative here (the Sanity convention\n * points `types` at the ESM `.d.ts`), so it is restored after the canonical build.\n */\nfunction restoreAuthoredTypes(ctx: {cwd: string; pkg: {types?: string | undefined}}): void {\n const authoredTypes = ctx.pkg.types\n if (!authoredTypes) return\n\n const pkgPath = path.resolve(ctx.cwd, 'package.json')\n let text: string\n try {\n text = readFileSync(pkgPath, 'utf8')\n } catch {\n return\n }\n const json: unknown = JSON.parse(text)\n if (!isRecord(json) || json['types'] === authoredTypes) return\n json['types'] = authoredTypes\n\n const indent = /^([ \\t]+)\\S/m.exec(text)?.[1] ?? 2\n let output = JSON.stringify(json, null, indent)\n if (text.endsWith('\\n')) output += '\\n'\n writeFileSync(pkgPath, output, 'utf8')\n}\n\n/**\n * pkg-utils owns its own experience: `tsdown.config.*` files are never loaded in pkg-utils\n * mode (`package.config.ts` is the sole config source), so their presence is worth a warning.\n */\nfunction warnAboutTsdownConfigFiles(cwd: string, logger: Logger): void {\n const candidates = [\n 'tsdown.config.ts',\n 'tsdown.config.mts',\n 'tsdown.config.cts',\n 'tsdown.config.js',\n 'tsdown.config.mjs',\n 'tsdown.config.cjs',\n 'tsdown.config.json',\n ]\n const found = candidates.find((candidate) => existsSync(path.resolve(cwd, candidate)))\n if (found) {\n logger.warn(\n `found \\`${found}\\`, which @sanity/pkg-utils does not load — \\`package.config.ts\\` is the only config source of \\`pkg build\\`. Either migrate the package fully to tsdown (and drop @sanity/pkg-utils), or move the configuration into \\`package.config.ts\\`.`,\n )\n }\n}\n\nfunction escapeRegExp(value: string): string {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')\n}\n","import {build} from '../node/build.ts'\nimport {handleError} from './handleError.ts'\n\nexport async function buildAction(options: {\n emitDeclarationOnly?: boolean\n strict?: boolean\n tsconfig?: string\n clean?: boolean\n quiet?: boolean\n}): Promise<void> {\n try {\n await build({\n cwd: process.cwd(),\n emitDeclarationOnly: options.emitDeclarationOnly,\n strict: options.strict,\n tsconfig: options.tsconfig,\n clean: options.clean,\n quiet: options.quiet,\n })\n } catch (err) {\n handleError(err)\n }\n}\n"],"mappings":";;;;;;;;AAgBA,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;AAqBrB,eAAsBA,QAAM,SAOV;CAChB,IAAM,EACJ,KACA,qBACA,SAAS,IACT,UAAU,gBAGV,QAAQ,IACR,QAAQ,OACN,SACE,SAAS,aAAa,KAAK,GAE3B,UAAUC,GAAY,EAAC,IAAG,CAAC;CACjC,IAAI,CAAC,SACH,MAAU,MAAM,yBAAyB,EAAC,OAAO,EAAC,IAAG,EAAC,CAAC;CAEzD,IAAM,SAAS,MAAM,WAAW;EAAC;EAAK;CAAO,CAAC,GAExC,EAAC,uBAAsB,MAAM,OAAO,oCAAc,CAAA,MAAA,MAAA,EAAA,CAAA,GAClD,gBAAgB,mBAAmB,QAAQ,iBAAiB,CAAC,CAAC,GAC9D,MAAM,MAAM,qBAAqB;EAAC;EAAS;EAAQ;EAAQ;CAAa,CAAC,GAEzE,WAAW,kBAAkB,QAAQ,YAAY,iBAEjD,MAAM,MAAM,oBAAoB;EACpC;EACA;EACA;EACA;EACA;EACA;EACA;CACF,CAAC;CAED,2BAA2B,KAAK,MAAM;CAEtC,IAAM,SAAS,oBAAoB,GAAG,GAElC,QAAQ;CACZ,KAAK,IAAM,YAAY,QAAQ;EAE7B,IACE,IAAI,uBACJ,CAAC,SAAS,QAAQ,MAAM,UAAU,aAAa,KAAK,MAAM,MAAM,CAAC,GAEjE;EAGF,IAAM,WAAW,cAAc,QAAQ,GACjC,UAAU,cAAc,UAAU,KAAK;EAE7C,IAAI;GACF,IAAM,eAAe,MAAM,oBAAoB,KAAK,UAAU,EAAC,OAAO,SAAS,MAAK,CAAC;GACrF,QAAQ;GAER,IAAM,UAAU,MAAMC,MAAY,YAAY;GAiB9C,AAfI,IAAI,uBAIN,4BAA4B,OAAO,GAGjC,SAAS,aACX,qBAAqB,GAAG,GAG1B,QAAQ,SAAS,GACjB,IAAI,OAAO,IAAI,GAEf,kBAAkB,KAAK,SAAS,QAAQ,GACxC,IAAI,OAAO,IAAI;EACjB,SAAS,KAAK;GAGZ,IAFA,QAAQ,MAAM,GAEV,eAAe,OAAO;IACxB,IAAM,SAAS,IAAI,OAAO,aAAa,GAAG,GAAG,GAAG;IAGhD,AADA,IAAI,OAAO,OAAO,IAAI,SAAS,IAAI,QAAA,CAAS,QAAQ,QAAQ,GAAG,CAAC,GAChE,IAAI,OAAO,IAAI;GACjB;GAEA,QAAQ,KAAK,CAAC;EAChB;CACF;AACF;AAEA,SAAS,cAAc,UAAkC;CACvD,IAAM,UAAU,MAAM,KAAK,IAAI,IAAI,SAAS,QAAQ,SAAS,UAAU,MAAM,OAAO,CAAC,CAAC;CACtF,OAAO,SAAS,SAAS,IAAI,IAAI,QAAQ,KAAK,IAAI,KAAK,QAAQ;AACjE;AAEA,MAAM,gBAAgB;;AAGtB,SAAS,4BAA4B,SAA+B;CAClE,KAAK,IAAM,UAAU,SACnB,KAAK,IAAM,SAAS,OAAO,QACrB,cAAc,KAAK,MAAM,QAAQ,MACrC,OAAO,KAAK,KAAK,MAAM,QAAQ,MAAM,QAAQ,GAAG,EAAC,OAAO,GAAI,CAAC,GAC7D,OAAO,KAAK,KAAK,MAAM,QAAQ,GAAG,MAAM,SAAS,KAAK,GAAG,EAAC,OAAO,GAAI,CAAC;AAG5E;;;;;AAMA,SAAS,kBACP,KAOA,SACA,UACM;CACN,IAAM,EAAC,KAAK,QAAQ,QAAO,KACrB,wBAAQ,IAAI,IAAY;CAI9B,IAAI,SAAS,KACX,KAAK,IAAM,SAAS,SAAS,SAAS;EACpC,IAAM,SAAS,KAAK,KACjB,SAAS,KAAK,KAAK,KAAK,IAAI,UAAU,GAAG,MAAM,MAAM,KAAK,CAAC,CAAC,CAC5D,WAAW,MAAM,GAAG;EACvB,MAAM,IACJ,GAAG,IAAI,KAAK,MAAM,KAAK,SAAS,KAAK,KAAK,QAAQ,KAAK,MAAM,MAAM,CAAC,CAAC,CAAC,WAAW,MAAM,GAAG,EAAE,UAAU,QACxG;CACF;CAGF,KAAK,IAAM,UAAU,SACnB,KAAK,IAAM,SAAS,OAAO,QAAQ;EAEjC,IADI,MAAM,SAAS,WAAW,CAAC,MAAM,WAAW,CAAC,MAAM,kBACnD,IAAI,uBAAuB,CAAC,cAAc,KAAK,MAAM,QAAQ,GAAG;EACpE,IAAM,SAAS,KAAK,KACjB,SAAS,KAAK,MAAM,cAAc,CAAC,CACnC,WAAW,MAAM,GAAG,CAAC,CAGrB,QAAQ,mBAAmB,OAAO,KAC/B,SAAS,KAAK,KACjB,SAAS,KAAK,KAAK,KAAK,MAAM,QAAQ,MAAM,QAAQ,CAAC,CAAC,CACtD,WAAW,MAAM,GAAG;EACvB,MAAM,IAAI,GAAG,IAAI,KAAK,IAAI,OAAO,UAAU,QAAQ;CACrD;CAGF,KAAK,IAAM,QAAQ,MAAM,KAAK,KAAK,CAAC,CAAC,SAAS,GAC5C,OAAO,IAAI,IAAI;AAEnB;;;;;;;AAQA,SAAS,qBAAqB,KAA6D;CACzF,IAAM,gBAAgB,IAAI,IAAI;CAC9B,IAAI,CAAC,eAAe;CAEpB,IAAM,UAAU,KAAK,QAAQ,IAAI,KAAK,cAAc,GAChD;CACJ,IAAI;EACF,OAAO,aAAa,SAAS,MAAM;CACrC,QAAQ;EACN;CACF;CACA,IAAM,OAAgB,KAAK,MAAM,IAAI;CACrC,IAAI,CAAC,SAAS,IAAI,KAAK,KAAK,UAAa,eAAe;CACxD,KAAK,QAAW;CAEhB,IAAM,SAAS,eAAe,KAAK,IAAI,CAAC,GAAG,MAAM,GAC7C,SAAS,KAAK,UAAU,MAAM,MAAM,MAAM;CAE9C,AADI,KAAK,SAAS,IAAI,MAAG,UAAU,OACnC,cAAc,SAAS,QAAQ,MAAM;AACvC;;;;;AAMA,SAAS,2BAA2B,KAAa,QAAsB;CAUrE,IAAM,QAAQ;EARZ;EACA;EACA;EACA;EACA;EACA;EACA;CAEqB,CAAC,CAAC,MAAM,cAAc,WAAW,KAAK,QAAQ,KAAK,SAAS,CAAC,CAAC;CACrF,AAAI,SACF,OAAO,KACL,WAAW,MAAM,6OACnB;AAEJ;AAEA,SAAS,aAAa,OAAuB;CAC3C,OAAO,MAAM,QAAQ,uBAAuB,MAAM;AACpD;AC5PA,eAAsB,YAAY,SAMhB;CAChB,IAAI;EACF,MAAMC,QAAM;GACV,KAAK,QAAQ,IAAI;GACjB,qBAAqB,QAAQ;GAC7B,QAAQ,QAAQ;GAChB,UAAU,QAAQ;GAClB,OAAO,QAAQ;GACf,OAAO,QAAQ;EACjB,CAAC;CACH,SAAS,KAAK;EACZ,YAAY,GAAG;CACjB;AACF"}
1
+ {"version":3,"file":"buildAction-C8MCKsDz.js","names":["build","findPkgPath","tsdownBuild","build"],"sources":["../src/node/build.ts","../src/cli/buildAction.ts"],"sourcesContent":["import {existsSync, readFileSync, rmSync, writeFileSync} from 'node:fs'\nimport path from 'node:path'\nimport {up as findPkgPath} from 'empathic/package'\nimport {build as tsdownBuild, type TsdownBundle} from 'tsdown'\nimport {loadConfig} from './core/config/loadConfig.ts'\nimport {isRecord} from './core/isRecord.ts'\nimport {loadPkgWithReporting} from './core/pkg/loadPkgWithReporting.ts'\nimport {createLogger, type Logger} from './logger.ts'\nimport {resolveBuildContext} from './resolveBuildContext.ts'\nimport {createSpinner} from './spinner.ts'\nimport {\n resolveTsdownBuilds,\n type TsdownBuild as TsdownBuildDef,\n} from './tasks/tsdown/resolveTsdownBuilds.ts'\nimport {resolveTsdownConfig} from './tasks/tsdown/resolveTsdownConfig.ts'\n\nconst RE_TS_SOURCE = /\\.[cm]?tsx?$/\n\n/**\n * Build the distribution files of a npm package.\n *\n * @example\n * ```ts\n * import {build} from '@sanity/pkg-utils'\n *\n * build({\n * cwd: process.cwd(),\n * tsconfig: 'tsconfig.dist.json,\n * }).then(() => {\n * console.log('successfully built')\n * }).catch((err) => {\n * console.log(`build error: ${err.message}`)\n * })\n * ```\n *\n * @public\n */\nexport async function build(options: {\n cwd: string\n emitDeclarationOnly?: boolean\n strict?: boolean\n tsconfig?: string\n clean?: boolean\n quiet?: boolean\n}): Promise<void> {\n const {\n cwd,\n emitDeclarationOnly,\n strict = false,\n tsconfig: tsconfigOption,\n // `--no-clean` skips cleaning for this run; `true` (the CLI default — `--clean` still\n // parses as a no-op for v11 compatibility) defers to the `clean` config option\n clean = true,\n quiet = false,\n } = options\n const logger = createLogger(quiet)\n\n const pkgPath = findPkgPath({cwd})\n if (!pkgPath) {\n throw new Error('no package.json found', {cause: {cwd}})\n }\n const config = await loadConfig({cwd, pkgPath})\n\n const {parseStrictOptions} = await import('./strict.ts')\n const strictOptions = parseStrictOptions(config?.strictOptions ?? {})\n const pkg = await loadPkgWithReporting({pkgPath, logger, strict, strictOptions})\n\n const tsconfig = tsconfigOption || config?.tsconfig || 'tsconfig.json'\n\n const ctx = await resolveBuildContext({\n config,\n cwd,\n emitDeclarationOnly,\n logger,\n pkg,\n strict,\n tsconfig,\n })\n\n warnAboutTsdownConfigFiles(cwd, logger)\n\n const builds = resolveTsdownBuilds(ctx)\n\n let first = true\n for (const buildDef of builds) {\n // A types-only run skips builds without TypeScript sources entirely\n if (\n ctx.emitDeclarationOnly &&\n !buildDef.entries.some((entry) => RE_TS_SOURCE.test(entry.source))\n ) {\n continue\n }\n\n const taskName = buildTaskName(buildDef)\n const spinner = createSpinner(taskName, quiet)\n\n try {\n const inlineConfig = await resolveTsdownConfig(ctx, buildDef, {clean: first && clean})\n first = false\n\n const bundles = await tsdownBuild(inlineConfig)\n\n if (ctx.emitDeclarationOnly) {\n // `dts.emitDtsOnly` suppresses the JS chunks of the ES pass, but the CJS pass emits\n // its JS regardless (only its extra dts pass runs the dts plugin) — a types-only\n // build removes everything that is not a declaration file\n removeNonDeclarationOutputs(bundles)\n }\n\n if (buildDef.canonical) {\n restoreAuthoredTypes(ctx)\n }\n\n spinner.complete()\n ctx.logger.log()\n\n printBuildOutputs(ctx, bundles, buildDef)\n ctx.logger.log()\n } catch (err) {\n spinner.error()\n\n if (err instanceof Error) {\n const RE_CWD = new RegExp(escapeRegExp(cwd), 'g')\n\n ctx.logger.error((err.stack || err.message).replace(RE_CWD, '.'))\n ctx.logger.log()\n }\n\n process.exit(1)\n }\n }\n}\n\nfunction buildTaskName(buildDef: TsdownBuildDef): string {\n const formats = Array.from(new Set(buildDef.entries.flatMap((entry) => entry.formats)))\n return `build ${buildDef.key} (${formats.join(', ') || 'types'})`\n}\n\nconst RE_DTS_OUTPUT = /\\.d\\.[mc]?ts(\\.map)?$/\n\n/** Removes every emitted file that is not a declaration file (or its sourcemap). */\nfunction removeNonDeclarationOutputs(bundles: TsdownBundle[]): void {\n for (const bundle of bundles) {\n for (const chunk of bundle.chunks) {\n if (RE_DTS_OUTPUT.test(chunk.fileName)) continue\n rmSync(path.join(chunk.outDir, chunk.fileName), {force: true})\n rmSync(path.join(chunk.outDir, `${chunk.fileName}.map`), {force: true})\n }\n }\n}\n\n/**\n * Prints `<pkg>: <source> → <output>` for every entry chunk (JS and `.d.ts`) that tsdown\n * emitted, mirroring the per-file output of previous majors.\n */\nfunction printBuildOutputs(\n ctx: {\n cwd: string\n distPath: string\n emitDeclarationOnly: boolean\n logger: Logger\n pkg: {name: string}\n },\n bundles: TsdownBundle[],\n buildDef: TsdownBuildDef,\n): void {\n const {cwd, logger, pkg} = ctx\n const lines = new Set<string>()\n\n // Stylesheets are emitted as assets, which carry no `facadeModuleId` back to their source,\n // so the stylesheet build's lines come from its entry map instead.\n if (buildDef.css) {\n for (const entry of buildDef.entries) {\n const output = `./${path\n .relative(cwd, path.join(ctx.distPath, `${entry.alias}.css`))\n .replaceAll('\\\\', '/')}`\n lines.add(\n `${pkg.name}: ./${path.relative(cwd, path.resolve(cwd, entry.source)).replaceAll('\\\\', '/')} \\u2192 ${output}`,\n )\n }\n }\n\n for (const bundle of bundles) {\n for (const chunk of bundle.chunks) {\n if (chunk.type !== 'chunk' || !chunk.isEntry || !chunk.facadeModuleId) continue\n if (ctx.emitDeclarationOnly && !RE_DTS_OUTPUT.test(chunk.fileName)) continue\n const source = `./${path\n .relative(cwd, chunk.facadeModuleId)\n .replaceAll('\\\\', '/')\n // the dts chunks facade the fake `.d.ts` module ids of rolldown-plugin-dts; print the\n // actual `.ts` source instead\n .replace(/\\.d\\.([mc]?)ts$/, '.$1ts')}`\n const output = `./${path\n .relative(cwd, path.join(chunk.outDir, chunk.fileName))\n .replaceAll('\\\\', '/')}`\n lines.add(`${pkg.name}: ${source} \\u2192 ${output}`)\n }\n }\n\n for (const line of Array.from(lines).toSorted()) {\n logger.log(line)\n }\n}\n\n/**\n * tsdown's exports generation rewrites the top-level `types` field alongside `main`/`module`\n * when the `legacy` fields are maintained, preferring the CJS declarations (`.d.cts`) for\n * dual-format packages. The hand-written value is authoritative here (the Sanity convention\n * points `types` at the ESM `.d.ts`), so it is restored after the canonical build.\n */\nfunction restoreAuthoredTypes(ctx: {cwd: string; pkg: {types?: string | undefined}}): void {\n const authoredTypes = ctx.pkg.types\n if (!authoredTypes) return\n\n const pkgPath = path.resolve(ctx.cwd, 'package.json')\n let text: string\n try {\n text = readFileSync(pkgPath, 'utf8')\n } catch {\n return\n }\n const json: unknown = JSON.parse(text)\n if (!isRecord(json) || json['types'] === authoredTypes) return\n json['types'] = authoredTypes\n\n const indent = /^([ \\t]+)\\S/m.exec(text)?.[1] ?? 2\n let output = JSON.stringify(json, null, indent)\n if (text.endsWith('\\n')) output += '\\n'\n writeFileSync(pkgPath, output, 'utf8')\n}\n\n/**\n * pkg-utils owns its own experience: `tsdown.config.*` files are never loaded in pkg-utils\n * mode (`package.config.ts` is the sole config source), so their presence is worth a warning.\n */\nfunction warnAboutTsdownConfigFiles(cwd: string, logger: Logger): void {\n const candidates = [\n 'tsdown.config.ts',\n 'tsdown.config.mts',\n 'tsdown.config.cts',\n 'tsdown.config.js',\n 'tsdown.config.mjs',\n 'tsdown.config.cjs',\n 'tsdown.config.json',\n ]\n const found = candidates.find((candidate) => existsSync(path.resolve(cwd, candidate)))\n if (found) {\n logger.warn(\n `found \\`${found}\\`, which @sanity/pkg-utils does not load — \\`package.config.ts\\` is the only config source of \\`pkg build\\`. Either migrate the package fully to tsdown (and drop @sanity/pkg-utils), or move the configuration into \\`package.config.ts\\`.`,\n )\n }\n}\n\nfunction escapeRegExp(value: string): string {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')\n}\n","import {build} from '../node/build.ts'\nimport {handleError} from './handleError.ts'\n\nexport async function buildAction(options: {\n emitDeclarationOnly?: boolean\n strict?: boolean\n tsconfig?: string\n clean?: boolean\n quiet?: boolean\n}): Promise<void> {\n try {\n await build({\n cwd: process.cwd(),\n emitDeclarationOnly: options.emitDeclarationOnly,\n strict: options.strict,\n tsconfig: options.tsconfig,\n clean: options.clean,\n quiet: options.quiet,\n })\n } catch (err) {\n handleError(err)\n }\n}\n"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { i as fileExists, n as createLogger, t as handleError } from "./handleError-83GwKIFM.js";
2
- import { a as loadPkgWithReporting, o as loadConfig, t as resolveBuildContext } from "./resolveBuildContext-clvZ-QQy.js";
2
+ import { a as loadPkgWithReporting, o as loadConfig, t as resolveBuildContext } from "./resolveBuildContext-DYZxWVVc.js";
3
3
  import { t as createSpinner } from "./spinner-DAHe7SuT.js";
4
4
  import { statSync } from "node:fs";
5
5
  import path from "node:path";
@@ -50,7 +50,7 @@ async function check(options) {
50
50
  let config = await loadConfig({
51
51
  cwd,
52
52
  pkgPath
53
- }), { parseStrictOptions } = await import("./resolveBuildContext-clvZ-QQy.js").then((n) => n.n), strictOptions = parseStrictOptions(config?.strictOptions ?? {}), pkg = await loadPkgWithReporting({
53
+ }), { parseStrictOptions } = await import("./resolveBuildContext-DYZxWVVc.js").then((n) => n.n), strictOptions = parseStrictOptions(config?.strictOptions ?? {}), pkg = await loadPkgWithReporting({
54
54
  pkgPath,
55
55
  logger,
56
56
  strict,
@@ -143,4 +143,4 @@ async function checkAction(options) {
143
143
  }
144
144
  export { checkAction };
145
145
 
146
- //# sourceMappingURL=checkAction--wB2oNGm.js.map
146
+ //# sourceMappingURL=checkAction-0QxzAxUd.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"checkAction--wB2oNGm.js","names":["findPkgPath"],"sources":["../src/node/getFilesize.ts","../src/node/printPackageTree.ts","../src/node/check.ts","../src/cli/checkAction.ts"],"sourcesContent":["import {statSync} from 'node:fs'\nimport prettyBytes from 'pretty-bytes'\n\nexport function getFilesize(file: string): string {\n const stats = statSync(file)\n\n return prettyBytes(stats.size)\n}\n","import path from 'node:path'\nimport chalk from 'chalk'\nimport treeify from 'treeify'\nimport type {PkgExport} from './core/config/types.ts'\nimport type {BuildContext} from './core/contexts/buildContext.ts'\nimport {fileExists} from './fileExists.ts'\nimport {getFilesize} from './getFilesize.ts'\n\nfunction getFileInfo(cwd: string, filePath: string) {\n const p = path.resolve(cwd, filePath)\n const exists = fileExists(p)\n const size = exists ? getFilesize(p) : undefined\n\n return {exists, size}\n}\n\nexport function printPackageTree(ctx: BuildContext): void {\n const {cwd, exports, logger, pkg} = ctx\n\n if (!exports) return\n\n logger.log(`${chalk.blue(pkg.name)}@${chalk.green(pkg.version)}`)\n\n const tree: Record<string, unknown> = {}\n\n if (pkg.type) {\n tree['type'] = chalk.yellow(pkg.type)\n }\n\n if (pkg.bin) {\n tree['bin'] = Object.fromEntries(\n Object.entries(pkg.bin).map(([name, file]) => [chalk.cyan(name), fileInfo(file)]),\n )\n }\n\n function fileInfo(file: string) {\n const info = getFileInfo(cwd, file)\n\n if (!info.size) {\n return `${chalk.gray(file)} ${chalk.red('does not exist')}`\n }\n\n return `${chalk.yellow(file)} ${chalk.gray(info.size)}`\n }\n\n tree['exports'] = Object.fromEntries(\n Object.entries(exports)\n .filter(([, entry]) => entry._exported)\n .map(([exportPath, entry]) => {\n const exp: Omit<PkgExport, '_exported'> = {\n source: fileInfo(entry.source),\n browser: undefined,\n require: undefined,\n node: undefined,\n import: undefined,\n default: fileInfo(entry.default),\n }\n\n if (entry.browser) {\n exp.browser = {source: fileInfo(entry.browser.source)}\n\n if (entry.browser.import) exp.browser.import = fileInfo(entry.browser.import)\n if (entry.browser.require) exp.browser.require = fileInfo(entry.browser.require)\n } else {\n delete exp.browser\n }\n\n if (entry.require) {\n exp.require = fileInfo(entry.require)\n } else {\n delete exp.require\n }\n\n if (entry.node) {\n exp.node = {}\n\n if (entry.node.source) exp.node.source = fileInfo(entry.node.source)\n if (entry.node.import) exp.node.import = fileInfo(entry.node.import)\n if (entry.node.require) exp.node.require = fileInfo(entry.node.require)\n } else {\n delete exp.node\n }\n\n if (entry.import) {\n exp.import = fileInfo(entry.import)\n } else {\n delete exp.import\n }\n\n return [chalk.cyan(path.join(pkg.name, exportPath)), exp]\n }),\n )\n\n logger.log(treeify.asTree(tree as Record<string, any>, true, true))\n}\n","import path from 'node:path'\nimport {checkTsdoc} from '@sanity/tsdown-config/tsdoc'\nimport {up as findPkgPath} from 'empathic/package'\nimport {loadConfig} from './core/config/loadConfig.ts'\nimport type {BuildContext} from './core/contexts/buildContext.ts'\nimport {loadPkgWithReporting} from './core/pkg/loadPkgWithReporting.ts'\nimport {fileExists} from './fileExists.ts'\nimport {createLogger} from './logger.ts'\nimport {printPackageTree} from './printPackageTree.ts'\nimport {resolveBuildContext} from './resolveBuildContext.ts'\nimport {createSpinner} from './spinner.ts'\n\n/** @public */\nexport async function check(options: {\n cwd: string\n strict?: boolean\n tsconfig?: string\n}): Promise<void> {\n const {cwd, strict = false, tsconfig: tsconfigOption} = options\n const logger = createLogger()\n const spinner = createSpinner('')\n try {\n const pkgPath = findPkgPath({cwd})\n if (!pkgPath) {\n throw new Error('no package.json found', {cause: {cwd}})\n }\n const config = await loadConfig({cwd, pkgPath})\n const {parseStrictOptions} = await import('./strict.ts')\n const strictOptions = parseStrictOptions(config?.strictOptions ?? {})\n const pkg = await loadPkgWithReporting({pkgPath, logger, strict, strictOptions})\n const tsconfig = tsconfigOption || config?.tsconfig || 'tsconfig.json'\n const ctx = await resolveBuildContext({config, cwd, logger, pkg, strict, tsconfig})\n\n printPackageTree(ctx)\n\n if (strict) {\n const missingFiles: string[] = []\n\n // Check if there are missing files\n for (const [, exp] of Object.entries(ctx.exports || {})) {\n if (exp.source && !fileExists(path.resolve(cwd, exp.source))) {\n missingFiles.push(exp.source)\n }\n\n if (exp.require && !fileExists(path.resolve(cwd, exp.require))) {\n missingFiles.push(exp.require)\n }\n\n if (exp.import && !fileExists(path.resolve(cwd, exp.import))) {\n missingFiles.push(exp.import)\n }\n }\n\n if (ctx.pkg.types && !fileExists(path.resolve(cwd, ctx.pkg.types))) {\n missingFiles.push(ctx.pkg.types)\n }\n\n if (missingFiles.length) {\n logger.error(`missing files: ${missingFiles.join(', ')}`)\n process.exit(1)\n }\n }\n\n // publint validates that the built package resolves in every runtime/bundler — it packs\n // the package (which applies `publishConfig`, so the source-condition convention checks\n // out the way consumers see it) and lints the result. This replaced the bespoke\n // esbuild-based resolution checks of previous majors.\n await runPublint(ctx)\n\n if (ctx.config?.tsdoc !== false) {\n await checkApiExtractorReleaseTags(ctx)\n }\n\n spinner.complete()\n } catch (err) {\n spinner.error()\n\n if (err instanceof Error) {\n const RE_CWD = new RegExp(cwd.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&'), 'g')\n\n logger.error((err.stack || err.message).replace(RE_CWD, '.'))\n logger.log()\n }\n\n process.exit(1)\n }\n}\n\nasync function runPublint(ctx: BuildContext): Promise<void> {\n const {cwd, logger, strict} = ctx\n const [{publint}, {formatMessage}] = await Promise.all([\n import('publint'),\n import('publint/utils'),\n ])\n\n const {messages, pkg} = await publint({pkgDir: cwd, strict})\n\n let hasErrors = false\n\n for (const message of messages) {\n const formatted = formatMessage(message, pkg)\n if (message.type === 'error') {\n hasErrors = true\n logger.error(`publint: ${formatted}`)\n } else if (message.type === 'warning') {\n logger.warn(`publint: ${formatted}`)\n } else {\n logger.log(`publint: ${formatted}`)\n }\n }\n\n if (hasErrors) {\n process.exit(1)\n }\n}\n\nasync function checkApiExtractorReleaseTags(ctx: BuildContext) {\n const tsdoc =\n ctx.config?.tsdoc === false || ctx.config?.tsdoc === true ? undefined : ctx.config?.tsdoc\n const entryDtsFiles: string[] = []\n const seen = new Set<string>()\n\n for (const exp of Object.values(ctx.exports || {})) {\n if (!exp._exported) continue\n // Prefer an explicit `types` condition; otherwise derive declarations from every runtime\n // file (`.js` → `.d.ts`, `.mjs` → `.d.mts`, `.cjs` → `.d.cts`) so dual-format / fixed-\n // extension packages are checked the same way as the build-time `tsdoc` hook.\n const candidates = new Set<string>()\n if (exp.types) candidates.add(exp.types)\n for (const js of [exp.default, exp.import, exp.require]) {\n if (!js) continue\n const dts = jsFileToDts(js)\n if (dts) candidates.add(dts)\n }\n for (const dtsPath of candidates) {\n const exportPath = path.resolve(ctx.cwd, dtsPath)\n // JS-only entries emit no declarations; there is nothing to check\n if (!fileExists(exportPath) || seen.has(exportPath)) continue\n seen.add(exportPath)\n entryDtsFiles.push(exportPath)\n }\n }\n\n if (entryDtsFiles.length === 0) return\n\n await checkTsdoc({\n cwd: ctx.cwd,\n entryDtsFiles,\n tsconfig: ctx.ts.configPath || 'tsconfig.json',\n outDir: ctx.ts.config?.options.outDir ?? ctx.distPath,\n bundledPackages: ctx.bundledPackages,\n customTags: tsdoc?.customTags,\n rules: tsdoc?.rules,\n logger: {\n log: (...args) => ctx.logger.log(...args),\n warn: (...args) => ctx.logger.warn(...args),\n error: (...args) => ctx.logger.error(...args),\n },\n })\n}\n\n/** `./dist/index.js` → `./dist/index.d.ts` (`.mjs` → `.d.mts`, `.cjs` → `.d.cts`). */\nfunction jsFileToDts(file: string): string | undefined {\n if (/\\.d\\.[mc]?ts$/.test(file)) return file\n if (file.endsWith('.mjs')) return file.replace(/\\.mjs$/, '.d.mts')\n if (file.endsWith('.cjs')) return file.replace(/\\.cjs$/, '.d.cts')\n if (file.endsWith('.js')) return file.replace(/\\.js$/, '.d.ts')\n return undefined\n}\n","import {check} from '../node/check.ts'\nimport {handleError} from './handleError.ts'\n\nexport async function checkAction(options: {strict?: boolean; tsconfig?: string}): Promise<void> {\n try {\n await check({\n cwd: process.cwd(),\n strict: options.strict,\n tsconfig: options.tsconfig,\n })\n } catch (err) {\n handleError(err)\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"checkAction-0QxzAxUd.js","names":["findPkgPath"],"sources":["../src/node/getFilesize.ts","../src/node/printPackageTree.ts","../src/node/check.ts","../src/cli/checkAction.ts"],"sourcesContent":["import {statSync} from 'node:fs'\nimport prettyBytes from 'pretty-bytes'\n\nexport function getFilesize(file: string): string {\n const stats = statSync(file)\n\n return prettyBytes(stats.size)\n}\n","import path from 'node:path'\nimport chalk from 'chalk'\nimport treeify from 'treeify'\nimport type {PkgExport} from './core/config/types.ts'\nimport type {BuildContext} from './core/contexts/buildContext.ts'\nimport {fileExists} from './fileExists.ts'\nimport {getFilesize} from './getFilesize.ts'\n\nfunction getFileInfo(cwd: string, filePath: string) {\n const p = path.resolve(cwd, filePath)\n const exists = fileExists(p)\n const size = exists ? getFilesize(p) : undefined\n\n return {exists, size}\n}\n\nexport function printPackageTree(ctx: BuildContext): void {\n const {cwd, exports, logger, pkg} = ctx\n\n if (!exports) return\n\n logger.log(`${chalk.blue(pkg.name)}@${chalk.green(pkg.version)}`)\n\n const tree: Record<string, unknown> = {}\n\n if (pkg.type) {\n tree['type'] = chalk.yellow(pkg.type)\n }\n\n if (pkg.bin) {\n tree['bin'] = Object.fromEntries(\n Object.entries(pkg.bin).map(([name, file]) => [chalk.cyan(name), fileInfo(file)]),\n )\n }\n\n function fileInfo(file: string) {\n const info = getFileInfo(cwd, file)\n\n if (!info.size) {\n return `${chalk.gray(file)} ${chalk.red('does not exist')}`\n }\n\n return `${chalk.yellow(file)} ${chalk.gray(info.size)}`\n }\n\n tree['exports'] = Object.fromEntries(\n Object.entries(exports)\n .filter(([, entry]) => entry._exported)\n .map(([exportPath, entry]) => {\n const exp: Omit<PkgExport, '_exported'> = {\n source: fileInfo(entry.source),\n browser: undefined,\n require: undefined,\n node: undefined,\n import: undefined,\n default: fileInfo(entry.default),\n }\n\n if (entry.browser) {\n exp.browser = {source: fileInfo(entry.browser.source)}\n\n if (entry.browser.import) exp.browser.import = fileInfo(entry.browser.import)\n if (entry.browser.require) exp.browser.require = fileInfo(entry.browser.require)\n } else {\n delete exp.browser\n }\n\n if (entry.require) {\n exp.require = fileInfo(entry.require)\n } else {\n delete exp.require\n }\n\n if (entry.node) {\n exp.node = {}\n\n if (entry.node.source) exp.node.source = fileInfo(entry.node.source)\n if (entry.node.import) exp.node.import = fileInfo(entry.node.import)\n if (entry.node.require) exp.node.require = fileInfo(entry.node.require)\n } else {\n delete exp.node\n }\n\n if (entry.import) {\n exp.import = fileInfo(entry.import)\n } else {\n delete exp.import\n }\n\n return [chalk.cyan(path.join(pkg.name, exportPath)), exp]\n }),\n )\n\n logger.log(treeify.asTree(tree as Record<string, any>, true, true))\n}\n","import path from 'node:path'\nimport {checkTsdoc} from '@sanity/tsdown-config/tsdoc'\nimport {up as findPkgPath} from 'empathic/package'\nimport {loadConfig} from './core/config/loadConfig.ts'\nimport type {BuildContext} from './core/contexts/buildContext.ts'\nimport {loadPkgWithReporting} from './core/pkg/loadPkgWithReporting.ts'\nimport {fileExists} from './fileExists.ts'\nimport {createLogger} from './logger.ts'\nimport {printPackageTree} from './printPackageTree.ts'\nimport {resolveBuildContext} from './resolveBuildContext.ts'\nimport {createSpinner} from './spinner.ts'\n\n/** @public */\nexport async function check(options: {\n cwd: string\n strict?: boolean\n tsconfig?: string\n}): Promise<void> {\n const {cwd, strict = false, tsconfig: tsconfigOption} = options\n const logger = createLogger()\n const spinner = createSpinner('')\n try {\n const pkgPath = findPkgPath({cwd})\n if (!pkgPath) {\n throw new Error('no package.json found', {cause: {cwd}})\n }\n const config = await loadConfig({cwd, pkgPath})\n const {parseStrictOptions} = await import('./strict.ts')\n const strictOptions = parseStrictOptions(config?.strictOptions ?? {})\n const pkg = await loadPkgWithReporting({pkgPath, logger, strict, strictOptions})\n const tsconfig = tsconfigOption || config?.tsconfig || 'tsconfig.json'\n const ctx = await resolveBuildContext({config, cwd, logger, pkg, strict, tsconfig})\n\n printPackageTree(ctx)\n\n if (strict) {\n const missingFiles: string[] = []\n\n // Check if there are missing files\n for (const [, exp] of Object.entries(ctx.exports || {})) {\n if (exp.source && !fileExists(path.resolve(cwd, exp.source))) {\n missingFiles.push(exp.source)\n }\n\n if (exp.require && !fileExists(path.resolve(cwd, exp.require))) {\n missingFiles.push(exp.require)\n }\n\n if (exp.import && !fileExists(path.resolve(cwd, exp.import))) {\n missingFiles.push(exp.import)\n }\n }\n\n if (ctx.pkg.types && !fileExists(path.resolve(cwd, ctx.pkg.types))) {\n missingFiles.push(ctx.pkg.types)\n }\n\n if (missingFiles.length) {\n logger.error(`missing files: ${missingFiles.join(', ')}`)\n process.exit(1)\n }\n }\n\n // publint validates that the built package resolves in every runtime/bundler — it packs\n // the package (which applies `publishConfig`, so the source-condition convention checks\n // out the way consumers see it) and lints the result. This replaced the bespoke\n // esbuild-based resolution checks of previous majors.\n await runPublint(ctx)\n\n if (ctx.config?.tsdoc !== false) {\n await checkApiExtractorReleaseTags(ctx)\n }\n\n spinner.complete()\n } catch (err) {\n spinner.error()\n\n if (err instanceof Error) {\n const RE_CWD = new RegExp(cwd.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&'), 'g')\n\n logger.error((err.stack || err.message).replace(RE_CWD, '.'))\n logger.log()\n }\n\n process.exit(1)\n }\n}\n\nasync function runPublint(ctx: BuildContext): Promise<void> {\n const {cwd, logger, strict} = ctx\n const [{publint}, {formatMessage}] = await Promise.all([\n import('publint'),\n import('publint/utils'),\n ])\n\n const {messages, pkg} = await publint({pkgDir: cwd, strict})\n\n let hasErrors = false\n\n for (const message of messages) {\n const formatted = formatMessage(message, pkg)\n if (message.type === 'error') {\n hasErrors = true\n logger.error(`publint: ${formatted}`)\n } else if (message.type === 'warning') {\n logger.warn(`publint: ${formatted}`)\n } else {\n logger.log(`publint: ${formatted}`)\n }\n }\n\n if (hasErrors) {\n process.exit(1)\n }\n}\n\nasync function checkApiExtractorReleaseTags(ctx: BuildContext) {\n const tsdoc =\n ctx.config?.tsdoc === false || ctx.config?.tsdoc === true ? undefined : ctx.config?.tsdoc\n const entryDtsFiles: string[] = []\n const seen = new Set<string>()\n\n for (const exp of Object.values(ctx.exports || {})) {\n if (!exp._exported) continue\n // Prefer an explicit `types` condition; otherwise derive declarations from every runtime\n // file (`.js` → `.d.ts`, `.mjs` → `.d.mts`, `.cjs` → `.d.cts`) so dual-format / fixed-\n // extension packages are checked the same way as the build-time `tsdoc` hook.\n const candidates = new Set<string>()\n if (exp.types) candidates.add(exp.types)\n for (const js of [exp.default, exp.import, exp.require]) {\n if (!js) continue\n const dts = jsFileToDts(js)\n if (dts) candidates.add(dts)\n }\n for (const dtsPath of candidates) {\n const exportPath = path.resolve(ctx.cwd, dtsPath)\n // JS-only entries emit no declarations; there is nothing to check\n if (!fileExists(exportPath) || seen.has(exportPath)) continue\n seen.add(exportPath)\n entryDtsFiles.push(exportPath)\n }\n }\n\n if (entryDtsFiles.length === 0) return\n\n await checkTsdoc({\n cwd: ctx.cwd,\n entryDtsFiles,\n tsconfig: ctx.ts.configPath || 'tsconfig.json',\n outDir: ctx.ts.config?.options.outDir ?? ctx.distPath,\n bundledPackages: ctx.bundledPackages,\n customTags: tsdoc?.customTags,\n rules: tsdoc?.rules,\n logger: {\n log: (...args) => ctx.logger.log(...args),\n warn: (...args) => ctx.logger.warn(...args),\n error: (...args) => ctx.logger.error(...args),\n },\n })\n}\n\n/** `./dist/index.js` → `./dist/index.d.ts` (`.mjs` → `.d.mts`, `.cjs` → `.d.cts`). */\nfunction jsFileToDts(file: string): string | undefined {\n if (/\\.d\\.[mc]?ts$/.test(file)) return file\n if (file.endsWith('.mjs')) return file.replace(/\\.mjs$/, '.d.mts')\n if (file.endsWith('.cjs')) return file.replace(/\\.cjs$/, '.d.cts')\n if (file.endsWith('.js')) return file.replace(/\\.js$/, '.d.ts')\n return undefined\n}\n","import {check} from '../node/check.ts'\nimport {handleError} from './handleError.ts'\n\nexport async function checkAction(options: {strict?: boolean; tsconfig?: string}): Promise<void> {\n try {\n await check({\n cwd: process.cwd(),\n strict: options.strict,\n tsconfig: options.tsconfig,\n })\n } catch (err) {\n handleError(err)\n }\n}\n"],"mappings":"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"}
package/dist/cli.js CHANGED
@@ -1,13 +1,13 @@
1
1
  import { cac } from "cac";
2
- var version = "12.1.0";
2
+ var version = "12.1.1";
3
3
  const cli = cac();
4
4
  cli.command("", "Check").alias("check").option("--strict", "Strict mode").option("--tsconfig [tsconfig]", "[string] tsconfig.json").action(async (options) => {
5
- let { checkAction } = await import("./checkAction--wB2oNGm.js");
5
+ let { checkAction } = await import("./checkAction-0QxzAxUd.js");
6
6
  return checkAction(options);
7
7
  }), cli.command("build", "Build package").option("--emitDeclarationOnly", "Emit d.ts only").option("--strict", "Strict mode").option("--tsconfig [tsconfig]", "[string] tsconfig.json").option("--check", "Run the check command after build (same as running `pkg build && pkg check`)").option("--no-clean", "Skip cleaning the `dist` folder before the build").option("--quiet", "Suppress all output except errors, warnings, and checks").action(async (options) => {
8
- let { check = !1, ...buildOptions } = options, { buildAction } = await import("./buildAction-BzyCXuxp.js");
8
+ let { check = !1, ...buildOptions } = options, { buildAction } = await import("./buildAction-C8MCKsDz.js");
9
9
  if (await buildAction(buildOptions), check) {
10
- let { checkAction } = await import("./checkAction--wB2oNGm.js");
10
+ let { checkAction } = await import("./checkAction-0QxzAxUd.js");
11
11
  await checkAction({
12
12
  strict: options.strict,
13
13
  tsconfig: options.tsconfig
@@ -17,7 +17,7 @@ cli.command("", "Check").alias("check").option("--strict", "Strict mode").option
17
17
  let { initAction } = await import("./initAction-CmOO8eod.js");
18
18
  return initAction({ path: p });
19
19
  }), cli.command("watch", "Watch package").option("--strict", "Strict mode").option("--tsconfig [tsconfig]", "[string] tsconfig.json").action(async (options) => {
20
- let { watchAction } = await import("./watchAction-CEADXNwO.js");
20
+ let { watchAction } = await import("./watchAction-PjRXiQRe.js");
21
21
  return watchAction(options);
22
22
  }), cli.help(), cli.version(version), cli.parse();
23
23
  export {};
@@ -385,48 +385,50 @@ async function loadPkgWithReporting(options) {
385
385
  exp.types && (shouldError = !0, logger.error(`exports["${expPath}"]: the \`types\` condition shouldn't be used as dts files are generated in such a way that both CJS and ESM is supported`)), exp.module && (shouldError = !0, logger.error(`exports["${expPath}"]: the \`module\` condition shouldn't be used as it's not well supported in all bundlers.`)), exp.development && exp.source && exp.development !== exp.source && (shouldError = !0, logger.error(`exports["${expPath}"]: the \`development\` condition must have the same value as \`source\` when both are present. Expected "${exp.source}" but got "${exp.development}"`)), exp.monorepo && exp.source && exp.monorepo !== exp.source && (shouldError = !0, logger.error(`exports["${expPath}"]: the \`monorepo\` condition must have the same value as \`source\` when both are present. Expected "${exp.source}" but got "${exp.monorepo}"`)), exp.node ? (exp.import && exp.node.import && !assertOrder("node", "import", keys) && (shouldError = !0, logger.error(`exports["${expPath}"]: the \`node\` property should come before the \`import\` property`)), exp.node.module && (shouldError = !0, logger.error(`exports["${expPath}"]: the \`node.module\` condition shouldn't be used as it's not well supported in all bundlers. A better strategy is to refactor the codebase to no longer be vulnerable to the "dual package hazard"`)), !exp.node.source && exp.node.import && (exp.node.require || exp.require) && (exp.node.import.endsWith(".cjs.js") || exp.node.import.endsWith(".cjs.mjs")) && (shouldError = !0, logger.error(`exports["${expPath}"]: the \`node.import\` re-export pattern shouldn't be used as it's not well supported in all bundlers. A better strategy is to refactor the codebase to no longer be vulnerable to the "dual package hazard"`)), exp.require && exp.node.require && exp.require === exp.node.require ? (shouldError = !0, logger.error(`exports["${expPath}"]: the \`node.require\` property isn't necessary as it's identical to \`require\``)) : exp.require && exp.node.require && !assertOrder("node", "require", keys) && (shouldError = !0, logger.error(`exports["${expPath}"]: the \`node\` property should come before the \`require\` property`))) : assertOrder("import", "require", keys) || logger.warn(`exports["${expPath}"]: the \`import\` property should come before the \`require\` property`), assertLast("default", keys) || (shouldError = !0, logger.error(`exports["${expPath}"]: the \`default\` property should be the last property`));
386
386
  }
387
387
  }
388
- if (strict && pkg.exports && Object.keys(pkg.exports).length > 0 && Object.entries(pkg.exports).some(([, exp]) => typeof exp == "string" || typeof exp == "object" && "svelte" in exp ? !1 : !!(exp.source || exp.development || exp.monorepo))) if (pkg.publishConfig?.exports) {
389
- let publishExports = pkg.publishConfig.exports, isBuiltCssExport = (exportPath) => {
390
- if (!exportPath.endsWith(".css")) return !1;
391
- let exp = pkg.exports?.[exportPath];
392
- return typeof exp == "object" && !!exp && "source" in exp;
393
- };
394
- for (let exportPath of Object.keys(pkg.exports)) !(exportPath in publishExports) && !isBuiltCssExport(exportPath) && (shouldError = !0, logger.error(`publishConfig.exports: missing export path "${exportPath}" that exists in exports`));
395
- for (let exportPath of Object.keys(publishExports)) exportPath in pkg.exports || (shouldError = !0, logger.error(`publishConfig.exports: unexpected export path "${exportPath}" that does not exist in exports`));
396
- for (let [exportPath, exp] of Object.entries(pkg.exports)) {
397
- if (isBuiltCssExport(exportPath)) continue;
398
- if (typeof exp == "string" || "svelte" in exp) {
388
+ if (strict && pkg.exports && Object.keys(pkg.exports).length > 0 && Object.entries(pkg.exports).some(([, exp]) => typeof exp == "string" || typeof exp == "object" && "svelte" in exp ? !1 : !!(exp.source || exp.development || exp.monorepo))) {
389
+ if (pkg.publishConfig?.exports) {
390
+ let publishExports = pkg.publishConfig.exports, isBuiltCssExport = (exportPath) => {
391
+ if (!exportPath.endsWith(".css")) return !1;
392
+ let exp = pkg.exports?.[exportPath];
393
+ return typeof exp == "object" && !!exp && "source" in exp;
394
+ };
395
+ for (let exportPath of Object.keys(pkg.exports)) !(exportPath in publishExports) && !isBuiltCssExport(exportPath) && (shouldError = !0, logger.error(`publishConfig.exports: missing export path "${exportPath}" that exists in exports`));
396
+ for (let exportPath of Object.keys(publishExports)) exportPath in pkg.exports || (shouldError = !0, logger.error(`publishConfig.exports: unexpected export path "${exportPath}" that does not exist in exports`));
397
+ for (let [exportPath, exp] of Object.entries(pkg.exports)) {
398
+ if (isBuiltCssExport(exportPath)) continue;
399
+ if (typeof exp == "string" || "svelte" in exp) {
400
+ let publishExp = publishExports[exportPath];
401
+ typeof publishExp != "string" && (typeof publishExp != "object" || !("svelte" in publishExp)) && (shouldError = !0, logger.error(`publishConfig.exports["${exportPath}"]: should be a string matching exports["${exportPath}"]`));
402
+ continue;
403
+ }
399
404
  let publishExp = publishExports[exportPath];
400
- typeof publishExp != "string" && (typeof publishExp != "object" || !("svelte" in publishExp)) && (shouldError = !0, logger.error(`publishConfig.exports["${exportPath}"]: should be a string matching exports["${exportPath}"]`));
401
- continue;
402
- }
403
- let publishExp = publishExports[exportPath];
404
- if (!publishExp) continue;
405
- if (typeof publishExp == "string") {
406
- let conditions = Object.keys(exp).filter((k) => k !== "source" && k !== "development" && k !== "monorepo");
407
- if (conditions.length !== 1 || conditions[0] !== "default") shouldError = !0, logger.error(`publishConfig.exports["${exportPath}"]: is a string but exports["${exportPath}"] has multiple conditions besides source/development/monorepo: ${conditions.join(", ")}`);
408
- else {
409
- let expectedValue = exp.default;
410
- publishExp !== expectedValue && (shouldError = !0, logger.error(`publishConfig.exports["${exportPath}"]: should be "${expectedValue}" but got "${publishExp}"`));
405
+ if (!publishExp) continue;
406
+ if (typeof publishExp == "string") {
407
+ let conditions = Object.keys(exp).filter((k) => k !== "source" && k !== "development" && k !== "monorepo");
408
+ if (conditions.length !== 1 || conditions[0] !== "default") shouldError = !0, logger.error(`publishConfig.exports["${exportPath}"]: is a string but exports["${exportPath}"] has multiple conditions besides source/development/monorepo: ${conditions.join(", ")}`);
409
+ else {
410
+ let expectedValue = exp.default;
411
+ publishExp !== expectedValue && (shouldError = !0, logger.error(`publishConfig.exports["${exportPath}"]: should be "${expectedValue}" but got "${publishExp}"`));
412
+ }
413
+ continue;
411
414
  }
412
- continue;
413
- }
414
- if ("svelte" in publishExp) continue;
415
- let exportConditions = Object.keys(exp).filter((k) => k !== "source" && k !== "development" && k !== "monorepo"), publishConditions = Object.keys(publishExp);
416
- "source" in publishExp && (shouldError = !0, logger.error(`publishConfig.exports["${exportPath}"]: should not contain the \`source\` condition`)), "development" in publishExp && (shouldError = !0, logger.error(`publishConfig.exports["${exportPath}"]: should not contain the \`development\` condition`)), "monorepo" in publishExp && (shouldError = !0, logger.error(`publishConfig.exports["${exportPath}"]: should not contain the \`monorepo\` condition`));
417
- for (let condition of exportConditions) condition in publishExp || (shouldError = !0, logger.error(`publishConfig.exports["${exportPath}"]: missing \`${condition}\` condition that exists in exports["${exportPath}"]`));
418
- for (let condition of publishConditions) exportConditions.includes(condition) || (shouldError = !0, logger.error(`publishConfig.exports["${exportPath}"]: unexpected \`${condition}\` condition that does not exist in exports["${exportPath}"]`));
419
- for (let condition of exportConditions) if (condition in publishExp) {
420
- let exportValue = exp[condition], publishValue = publishExp[condition];
421
- if (!areExportValuesEqual(exportValue, publishValue)) {
422
- let exportValueStr = typeof exportValue == "string" ? exportValue : JSON.stringify(exportValue), publishValueStr = typeof publishValue == "string" ? publishValue : JSON.stringify(publishValue);
423
- shouldError = !0, logger.error(`publishConfig.exports["${exportPath}"].${condition}: should be ${exportValueStr} but got ${publishValueStr}`);
415
+ if ("svelte" in publishExp) continue;
416
+ let exportConditions = Object.keys(exp).filter((k) => k !== "source" && k !== "development" && k !== "monorepo"), publishConditions = Object.keys(publishExp);
417
+ "source" in publishExp && (shouldError = !0, logger.error(`publishConfig.exports["${exportPath}"]: should not contain the \`source\` condition`)), "development" in publishExp && (shouldError = !0, logger.error(`publishConfig.exports["${exportPath}"]: should not contain the \`development\` condition`)), "monorepo" in publishExp && (shouldError = !0, logger.error(`publishConfig.exports["${exportPath}"]: should not contain the \`monorepo\` condition`));
418
+ for (let condition of exportConditions) condition in publishExp || (shouldError = !0, logger.error(`publishConfig.exports["${exportPath}"]: missing \`${condition}\` condition that exists in exports["${exportPath}"]`));
419
+ for (let condition of publishConditions) exportConditions.includes(condition) || (shouldError = !0, logger.error(`publishConfig.exports["${exportPath}"]: unexpected \`${condition}\` condition that does not exist in exports["${exportPath}"]`));
420
+ for (let condition of exportConditions) if (condition in publishExp) {
421
+ let exportValue = exp[condition], publishValue = publishExp[condition];
422
+ if (!areExportValuesEqual(exportValue, publishValue)) {
423
+ let exportValueStr = typeof exportValue == "string" ? exportValue : JSON.stringify(exportValue), publishValueStr = typeof publishValue == "string" ? publishValue : JSON.stringify(publishValue);
424
+ shouldError = !0, logger.error(`publishConfig.exports["${exportPath}"].${condition}: should be ${exportValueStr} but got ${publishValueStr}`);
425
+ }
424
426
  }
425
427
  }
428
+ } else {
429
+ let msg = "package.json: `publishConfig.exports` is missing. Adding it helps avoid publishing to npm with the `source`, `development`, or `monorepo` condition that points to code that cannot be used by the resolver. See https://tsdown.dev/options/package-exports#dev-exports for more information.";
430
+ strictOptions.noPublishConfigExports === "error" ? (shouldError = !0, logger.error(msg)) : strictOptions.noPublishConfigExports !== "off" && logger.warn(msg);
426
431
  }
427
- } else {
428
- let msg = "package.json: `publishConfig.exports` is missing. Adding it helps avoid publishing to npm with the `source`, `development`, or `monorepo` condition that points to code that cannot be used by the resolver. See https://tsdown.dev/options/package-exports#dev-exports for more information.";
429
- strictOptions.noPublishConfigExports === "error" ? (shouldError = !0, logger.error(msg)) : strictOptions.noPublishConfigExports !== "off" && logger.warn(msg);
430
432
  }
431
433
  return shouldError && process.exit(1), pkg;
432
434
  } catch (err) {
@@ -540,27 +542,30 @@ function parseAndValidateExports(options) {
540
542
  let _exports = parseExports({ pkg });
541
543
  strict && strictOptions.noPackageJsonTypings !== "off" && "typings" in pkg && report(strictOptions.noPackageJsonTypings, "package.json: `typings` should be `types`"), strict && strictOptions.alwaysPackageJsonTypes !== "off" && !pkg.types && typeof pkg.exports?.["."] == "object" && "source" in pkg.exports["."] && pkg.exports["."].source?.endsWith(".ts") && report(strictOptions.alwaysPackageJsonTypes, "package.json: `types` must be declared for the npm listing to show as a TypeScript module."), strict && !pkg.exports["./package.json"] && errors.push("package.json: `exports[\"./package.json\"] must be declared.");
542
544
  for (let [exportPath, exportEntry] of Object.entries(pkg.exports)) if (exportPath.endsWith(".json") || typeof exportEntry == "string" && exportEntry.endsWith(".json")) exportPath === "./package.json" && exportEntry !== "./package.json" && errors.push("package.json: `exports[\"./package.json\"]` must be \"./package.json\".");
543
- else if (exportPath.endsWith(".css")) if (typeof exportEntry == "string") existsSync(resolve(cwd, exportEntry)) || errors.push(`package.json: \`exports[${JSON.stringify(exportPath)}]\`: file does not exist.`);
544
- else if (isRecord(exportEntry)) for (let [condition, target] of Object.entries(exportEntry)) {
545
- if (typeof target != "string") {
546
- errors.push(`package.json: \`exports[${JSON.stringify(exportPath)}][${JSON.stringify(condition)}]\`: must be a string path.`);
547
- continue;
545
+ else if (exportPath.endsWith(".css")) {
546
+ if (typeof exportEntry == "string") existsSync(resolve(cwd, exportEntry)) || errors.push(`package.json: \`exports[${JSON.stringify(exportPath)}]\`: file does not exist.`);
547
+ else if (isRecord(exportEntry)) for (let [condition, target] of Object.entries(exportEntry)) {
548
+ if (typeof target != "string") {
549
+ errors.push(`package.json: \`exports[${JSON.stringify(exportPath)}][${JSON.stringify(condition)}]\`: must be a string path.`);
550
+ continue;
551
+ }
552
+ condition === "source" && !existsSync(resolve(cwd, target)) && errors.push(`package.json: \`exports[${JSON.stringify(exportPath)}].source\`: file does not exist.`);
548
553
  }
549
- condition === "source" && !existsSync(resolve(cwd, target)) && errors.push(`package.json: \`exports[${JSON.stringify(exportPath)}].source\`: file does not exist.`);
554
+ else errors.push(`package.json: \`exports[${JSON.stringify(exportPath)}]\`: must be a string path or an object of export conditions.`);
555
+ } else if (!(isRecord(exportEntry) && "svelte" in exportEntry)) {
556
+ if (isPkgExport(exportEntry)) {
557
+ let exp = {
558
+ _exported: !0,
559
+ _path: exportPath,
560
+ ...exportEntry
561
+ };
562
+ if (!exp.default) {
563
+ let fallback = type === "module" ? exp.import : exp.require;
564
+ fallback && (exp.default = fallback);
565
+ }
566
+ !exp.require && type === "commonjs" && exp.default && (exp.require = exp.default), !exp.import && type === "module" && exp.default && (exp.import = exp.default), exportPath === "." && (exportEntry.require && pkg.main && exportEntry.require !== pkg.main && errors.push("package.json: mismatch between \"main\" and \"exports.require\". These must be equal."), exportEntry.import && pkg.module && exportEntry.import !== pkg.module && errors.push("package.json: mismatch between \"module\" and \"exports.import\" These must be equal."));
567
+ } else isRecord(exportEntry) || errors.push("package.json: exports must be an object");
550
568
  }
551
- else errors.push(`package.json: \`exports[${JSON.stringify(exportPath)}]\`: must be a string path or an object of export conditions.`);
552
- else if (!(isRecord(exportEntry) && "svelte" in exportEntry)) if (isPkgExport(exportEntry)) {
553
- let exp = {
554
- _exported: !0,
555
- _path: exportPath,
556
- ...exportEntry
557
- };
558
- if (!exp.default) {
559
- let fallback = type === "module" ? exp.import : exp.require;
560
- fallback && (exp.default = fallback);
561
- }
562
- !exp.require && type === "commonjs" && exp.default && (exp.require = exp.default), !exp.import && type === "module" && exp.default && (exp.import = exp.default), exportPath === "." && (exportEntry.require && pkg.main && exportEntry.require !== pkg.main && errors.push("package.json: mismatch between \"main\" and \"exports.require\". These must be equal."), exportEntry.import && pkg.module && exportEntry.import !== pkg.module && errors.push("package.json: mismatch between \"module\" and \"exports.import\" These must be equal."));
563
- } else isRecord(exportEntry) || errors.push("package.json: exports must be an object");
564
569
  if (errors.push(...validateExports(_exports, { pkg })), errors.length) throw Error("\n- " + errors.join("\n- "));
565
570
  return _exports;
566
571
  }
@@ -734,4 +739,4 @@ function transformPackageName(packageName) {
734
739
  }
735
740
  export { loadPkgWithReporting as a, pkgExtMap as i, strict_exports as n, loadConfig as o, fileEnding as r, resolveBuildContext as t };
736
741
 
737
- //# sourceMappingURL=resolveBuildContext-clvZ-QQy.js.map
742
+ //# sourceMappingURL=resolveBuildContext-DYZxWVVc.js.map