@sanity/pkg-utils 12.0.0 → 12.0.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.
package/MIGRATE.md CHANGED
@@ -41,9 +41,9 @@ Other behavior changes:
41
41
  - **`pkg check` runs [publint](https://publint.dev)** on the packed package (with
42
42
  `publishConfig` applied) instead of the esbuild resolution checks. Fix what it reports — it
43
43
  lints what consumers actually install.
44
- - **Local builds keep `exports` in sync**: the map is regenerated from the build (with the
45
- `source`-condition development pattern and a `source`-less `publishConfig.exports`); CI uses
46
- the committed `package.json` as-is.
44
+ - **Builds keep `exports` in sync**: the map is regenerated from the build (with the
45
+ `source`-condition development pattern and a `source`-less `publishConfig.exports`), including
46
+ in CI — so environments that set `CI=true` without meaning "skip package.json" still behave.
47
47
  - `tsdown.config.*` files are **never** loaded by `pkg build` — `package.config.ts` is the only
48
48
  config source. For customization beyond the config surface, use `tsdown` +
49
49
  `@sanity/tsdown-config` directly.
package/README.md CHANGED
@@ -42,9 +42,13 @@ tsdown's programmatic `build()`.
42
42
  `pkg build`. For customizations beyond the options below, use `tsdown` +
43
43
  `@sanity/tsdown-config` directly instead.
44
44
 
45
- During local builds the `exports` map is regenerated from the build (with `source` conditions for
46
- development, and a `source`-less `publishConfig.exports` for publishing) and kept in sync; in CI
47
- the committed `package.json` is used as-is.
45
+ Builds regenerate the `exports` map from the build (with `source` conditions for development, and
46
+ a `source`-less `publishConfig.exports` for publishing) and keep it in sync — including in CI
47
+ so environments that set `CI=true` without meaning "skip package.json" still behave correctly.
48
+ For conditional entries, generated conditions are materialized in both maps, then the authored
49
+ subpath and condition order of each map is preserved independently on later builds. Plain-string
50
+ entries keep their compact shape. This lets you reorder conditions directly in `package.json`;
51
+ earlier matching conditions take precedence over later ones.
48
52
 
49
53
  ## Configuration
50
54
 
@@ -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-CwqbTV6p.js";
2
+ import { a as loadPkgWithReporting, o as loadConfig, t as resolveBuildContext } from "./resolveBuildContext-CbwvYKj1.js";
3
3
  import { t as createSpinner } from "./spinner-DAHe7SuT.js";
4
- import { n as resolveTsdownBuilds, t as resolveTsdownConfig } from "./resolveTsdownConfig-2OdGF-dM.js";
4
+ import { n as resolveTsdownBuilds, t as resolveTsdownConfig } from "./resolveTsdownConfig-CGE_7cMM.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,25 +32,25 @@ async function build$1(options) {
32
32
  let config = await loadConfig({
33
33
  cwd,
34
34
  pkgPath
35
- }), { parseStrictOptions } = await import("./resolveBuildContext-CwqbTV6p.js").then((n) => n.n), ctx = await resolveBuildContext({
35
+ }), { parseStrictOptions } = await import("./resolveBuildContext-CbwvYKj1.js").then((n) => n.n), strictOptions = parseStrictOptions(config?.strictOptions ?? {}), pkg = await loadPkgWithReporting({
36
+ pkgPath,
37
+ logger,
38
+ strict,
39
+ strictOptions
40
+ }), tsconfig = tsconfigOption || config?.tsconfig || "tsconfig.json", ctx = await resolveBuildContext({
36
41
  config,
37
42
  cwd,
38
43
  emitDeclarationOnly,
39
44
  logger,
40
- pkg: await loadPkgWithReporting({
41
- pkgPath,
42
- logger,
43
- strict,
44
- strictOptions: parseStrictOptions(config?.strictOptions ?? {})
45
- }),
45
+ pkg,
46
46
  strict,
47
- tsconfig: tsconfigOption || config?.tsconfig || "tsconfig.json"
47
+ tsconfig
48
48
  });
49
49
  warnAboutTsdownConfigFiles(cwd, logger);
50
50
  let builds = resolveTsdownBuilds(ctx), first = !0;
51
51
  for (let buildDef of builds) {
52
52
  if (ctx.emitDeclarationOnly && !buildDef.entries.some((entry) => RE_TS_SOURCE.test(entry.source))) continue;
53
- let spinner = createSpinner(buildTaskName(buildDef), quiet);
53
+ let taskName = buildTaskName(buildDef), spinner = createSpinner(taskName, quiet);
54
54
  try {
55
55
  let inlineConfig = await resolveTsdownConfig(ctx, buildDef, { clean: first && clean });
56
56
  first = !1;
@@ -143,4 +143,4 @@ async function buildAction(options) {
143
143
  }
144
144
  export { buildAction };
145
145
 
146
- //# sourceMappingURL=buildAction-DFrmHzYY.js.map
146
+ //# sourceMappingURL=buildAction-D-M3KYyN.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"buildAction-DFrmHzYY.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)\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: {cwd: string; emitDeclarationOnly: boolean; logger: Logger; pkg: {name: string}},\n bundles: TsdownBundle[],\n): void {\n const {cwd, logger, pkg} = ctx\n const lines = new Set<string>()\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
+ {"version":3,"file":"buildAction-D-M3KYyN.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)\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: {cwd: string; emitDeclarationOnly: boolean; logger: Logger; pkg: {name: string}},\n bundles: TsdownBundle[],\n): void {\n const {cwd, logger, pkg} = ctx\n const lines = new Set<string>()\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-CwqbTV6p.js";
2
+ import { a as loadPkgWithReporting, o as loadConfig, t as resolveBuildContext } from "./resolveBuildContext-CbwvYKj1.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";
@@ -8,7 +8,8 @@ import chalk from "chalk";
8
8
  import treeify from "treeify";
9
9
  import prettyBytes from "pretty-bytes";
10
10
  function getFilesize(file) {
11
- return prettyBytes(statSync(file).size);
11
+ let stats = statSync(file);
12
+ return prettyBytes(stats.size);
12
13
  }
13
14
  function getFileInfo(cwd, filePath) {
14
15
  let p = path.resolve(cwd, filePath), exists = fileExists(p);
@@ -48,18 +49,18 @@ async function check(options) {
48
49
  let config = await loadConfig({
49
50
  cwd,
50
51
  pkgPath
51
- }), { parseStrictOptions } = await import("./resolveBuildContext-CwqbTV6p.js").then((n) => n.n), ctx = await resolveBuildContext({
52
+ }), { parseStrictOptions } = await import("./resolveBuildContext-CbwvYKj1.js").then((n) => n.n), strictOptions = parseStrictOptions(config?.strictOptions ?? {}), pkg = await loadPkgWithReporting({
53
+ pkgPath,
54
+ logger,
55
+ strict,
56
+ strictOptions
57
+ }), tsconfig = tsconfigOption || config?.tsconfig || "tsconfig.json", ctx = await resolveBuildContext({
52
58
  config,
53
59
  cwd,
54
60
  logger,
55
- pkg: await loadPkgWithReporting({
56
- pkgPath,
57
- logger,
58
- strict,
59
- strictOptions: parseStrictOptions(config?.strictOptions ?? {})
60
- }),
61
+ pkg,
61
62
  strict,
62
- tsconfig: tsconfigOption || config?.tsconfig || "tsconfig.json"
63
+ tsconfig
63
64
  });
64
65
  if (printPackageTree(ctx), strict) {
65
66
  let missingFiles = [];
@@ -90,7 +91,7 @@ async function checkApiExtractorReleaseTags(ctx) {
90
91
  let [{ Extractor, ExtractorConfig }, { createApiExtractorConfig }, { createTSDocConfig }, { getExtractMessagesConfig }, { printExtractMessages }] = await Promise.all([
91
92
  import("@microsoft/api-extractor"),
92
93
  import("./createApiExtractorConfig-CJoZqw8e.js"),
93
- import("./createTSDocConfig-CwaWneTR.js"),
94
+ import("./createTSDocConfig-ylfirNWP.js"),
94
95
  import("./getExtractMessagesConfig-CXljwFbQ.js"),
95
96
  import("./printExtractMessages-DyaYtByp.js")
96
97
  ]), tsdoc = ctx.config?.tsdoc === !1 ? void 0 : ctx.config?.tsdoc, customTags = tsdoc?.customTags || [], bundledPackages = ctx.bundledPackages, distPath = ctx.distPath, outDir = ctx.ts.config?.options.outDir ?? distPath, rules = tsdoc?.rules || {};
@@ -137,4 +138,4 @@ async function checkAction(options) {
137
138
  }
138
139
  export { checkAction };
139
140
 
140
- //# sourceMappingURL=checkAction-BMxszLZS.js.map
141
+ //# sourceMappingURL=checkAction-B8M5CP3j.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"checkAction-BMxszLZS.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 type {ExtractorMessage} from '@microsoft/api-extractor'\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 [\n {Extractor, ExtractorConfig},\n {createApiExtractorConfig},\n {createTSDocConfig},\n {getExtractMessagesConfig},\n {printExtractMessages},\n ] = await Promise.all([\n import('@microsoft/api-extractor'),\n import('./tasks/dts/createApiExtractorConfig.ts'),\n import('./tasks/dts/createTSDocConfig.ts'),\n import('./tasks/dts/getExtractMessagesConfig.ts'),\n import('./printExtractMessages.ts'),\n ])\n\n const tsdoc = ctx.config?.tsdoc === false ? undefined : ctx.config?.tsdoc\n const customTags = tsdoc?.customTags || []\n const bundledPackages = ctx.bundledPackages\n const distPath = ctx.distPath\n // api-extractor needs a `compilerOptions.outDir` for its path mapping; tsdown does not, so\n // fall back to the dist folder when the tsconfig leaves it unset\n const outDir = ctx.ts.config?.options.outDir ?? distPath\n const rules = tsdoc?.rules || {}\n\n for (const exp of Object.values(ctx.exports || {})) {\n if (!exp._exported || !exp.default.endsWith('.js')) continue\n const dtsPath = exp.default.replace(/\\.js$/, '.d.ts')\n const exportPath = path.resolve(ctx.cwd, dtsPath)\n\n // JS-only entries emit no declarations; there is nothing to check\n if (!fileExists(exportPath)) continue\n\n const tsdocConfigFile = await createTSDocConfig({\n customTags,\n })\n const extractorConfig = ExtractorConfig.prepare({\n configObject: createApiExtractorConfig({\n bundledPackages,\n distPath,\n exportPath,\n filePath: path.relative(outDir, dtsPath),\n messages: getExtractMessagesConfig({rules}),\n projectFolder: ctx.cwd,\n mainEntryPointFilePath: exportPath,\n tsconfig: ctx.ts.config!,\n tsconfigPath: path.resolve(ctx.cwd, ctx.ts.configPath || 'tsconfig.json'),\n dtsRollupEnabled: false,\n }),\n configObjectFullPath: undefined,\n tsdocConfigFile,\n packageJsonFullPath: path.resolve(ctx.cwd, 'package.json'),\n })\n const messages: ExtractorMessage[] = []\n // Invoke API Extractor\n Extractor.invoke(extractorConfig, {\n // Equivalent to the \"--local\" command-line parameter\n localBuild: true,\n // Equivalent to the \"--verbose\" command-line parameter\n showVerboseMessages: true,\n // handle messages\n messageCallback(message: ExtractorMessage) {\n messages.push(message)\n message.handled = true\n },\n })\n\n printExtractMessages(ctx, messages)\n }\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":";;;;;;;;;AAGA,SAAgB,YAAY,MAAsB;CAGhD,OAAO,YAFO,SAAS,IAEA,CAAC,CAAC,IAAI;AAC/B;ACCA,SAAS,YAAY,KAAa,UAAkB;CAClD,IAAM,IAAI,KAAK,QAAQ,KAAK,QAAQ,GAC9B,SAAS,WAAW,CAAC;CAG3B,OAAO;EAAC;EAAQ,MAFH,SAAS,YAAY,CAAC,IAAI,KAAA;CAEnB;AACtB;AAEA,SAAgB,iBAAiB,KAAyB;CACxD,IAAM,EAAC,KAAK,SAAS,QAAQ,QAAO;CAEpC,IAAI,CAAC,SAAS;CAEd,OAAO,IAAI,GAAG,MAAM,KAAK,IAAI,IAAI,EAAE,GAAG,MAAM,MAAM,IAAI,OAAO,GAAG;CAEhE,IAAM,OAAgC,CAAC;CAMvC,AAJI,IAAI,SACN,KAAK,OAAU,MAAM,OAAO,IAAI,IAAI,IAGlC,IAAI,QACN,KAAK,MAAS,OAAO,YACnB,OAAO,QAAQ,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,UAAU,CAAC,MAAM,KAAK,IAAI,GAAG,SAAS,IAAI,CAAC,CAAC,CAClF;CAGF,SAAS,SAAS,MAAc;EAC9B,IAAM,OAAO,YAAY,KAAK,IAAI;EAMlC,OAJK,KAAK,OAIH,GAAG,MAAM,OAAO,IAAI,EAAE,GAAG,MAAM,KAAK,KAAK,IAAI,MAH3C,GAAG,MAAM,KAAK,IAAI,EAAE,GAAG,MAAM,IAAI,gBAAgB;CAI5D;CAkDA,AAhDA,KAAK,UAAa,OAAO,YACvB,OAAO,QAAQ,OAAO,CAAC,CACpB,QAAQ,GAAG,WAAW,MAAM,SAAS,CAAC,CACtC,KAAK,CAAC,YAAY,WAAW;EAC5B,IAAM,MAAoC;GACxC,QAAQ,SAAS,MAAM,MAAM;GAC7B,SAAS,KAAA;GACT,SAAS,KAAA;GACT,MAAM,KAAA;GACN,QAAQ,KAAA;GACR,SAAS,SAAS,MAAM,OAAO;EACjC;EAiCA,OA/BI,MAAM,WACR,IAAI,UAAU,EAAC,QAAQ,SAAS,MAAM,QAAQ,MAAM,EAAC,GAEjD,MAAM,QAAQ,WAAQ,IAAI,QAAQ,SAAS,SAAS,MAAM,QAAQ,MAAM,IACxE,MAAM,QAAQ,YAAS,IAAI,QAAQ,UAAU,SAAS,MAAM,QAAQ,OAAO,MAE/E,OAAO,IAAI,SAGT,MAAM,UACR,IAAI,UAAU,SAAS,MAAM,OAAO,IAEpC,OAAO,IAAI,SAGT,MAAM,QACR,IAAI,OAAO,CAAC,GAER,MAAM,KAAK,WAAQ,IAAI,KAAK,SAAS,SAAS,MAAM,KAAK,MAAM,IAC/D,MAAM,KAAK,WAAQ,IAAI,KAAK,SAAS,SAAS,MAAM,KAAK,MAAM,IAC/D,MAAM,KAAK,YAAS,IAAI,KAAK,UAAU,SAAS,MAAM,KAAK,OAAO,MAEtE,OAAO,IAAI,MAGT,MAAM,SACR,IAAI,SAAS,SAAS,MAAM,MAAM,IAElC,OAAO,IAAI,QAGN,CAAC,MAAM,KAAK,KAAK,KAAK,IAAI,MAAM,UAAU,CAAC,GAAG,GAAG;CAC1D,CAAC,CACL,GAEA,OAAO,IAAI,QAAQ,OAAO,MAA6B,IAAM,EAAI,CAAC;AACpE;;ACjFA,eAAsB,MAAM,SAIV;CAChB,IAAM,EAAC,KAAK,SAAS,IAAO,UAAU,mBAAkB,SAClD,SAAS,aAAa,GACtB,UAAU,cAAc,EAAE;CAChC,IAAI;EACF,IAAM,UAAUA,GAAY,EAAC,IAAG,CAAC;EACjC,IAAI,CAAC,SACH,MAAU,MAAM,yBAAyB,EAAC,OAAO,EAAC,IAAG,EAAC,CAAC;EAEzD,IAAM,SAAS,MAAM,WAAW;GAAC;GAAK;EAAO,CAAC,GACxC,EAAC,uBAAsB,MAAM,OAAO,oCAAc,CAAA,MAAA,MAAA,EAAA,CAAA,GAIlD,MAAM,MAAM,oBAAoB;GAAC;GAAQ;GAAK;GAAQ,KAAA,MAF1C,qBAAqB;IAAC;IAAS;IAAQ;IAAQ,eAD3C,mBAAmB,QAAQ,iBAAiB,CAAC,CACU;GAAC,CAAC;GAEd;GAAQ,UADxD,kBAAkB,QAAQ,YAAY;EAC0B,CAAC;EAIlF,IAFA,iBAAiB,GAAG,GAEhB,QAAQ;GACV,IAAM,eAAyB,CAAC;GAGhC,KAAK,IAAM,GAAG,QAAQ,OAAO,QAAQ,IAAI,WAAW,CAAC,CAAC,GASpD,AARI,IAAI,UAAU,CAAC,WAAW,KAAK,QAAQ,KAAK,IAAI,MAAM,CAAC,KACzD,aAAa,KAAK,IAAI,MAAM,GAG1B,IAAI,WAAW,CAAC,WAAW,KAAK,QAAQ,KAAK,IAAI,OAAO,CAAC,KAC3D,aAAa,KAAK,IAAI,OAAO,GAG3B,IAAI,UAAU,CAAC,WAAW,KAAK,QAAQ,KAAK,IAAI,MAAM,CAAC,KACzD,aAAa,KAAK,IAAI,MAAM;GAQhC,AAJI,IAAI,IAAI,SAAS,CAAC,WAAW,KAAK,QAAQ,KAAK,IAAI,IAAI,KAAK,CAAC,KAC/D,aAAa,KAAK,IAAI,IAAI,KAAK,GAG7B,aAAa,WACf,OAAO,MAAM,kBAAkB,aAAa,KAAK,IAAI,GAAG,GACxD,QAAQ,KAAK,CAAC;EAElB;EAYA,AANA,MAAM,WAAW,GAAG,GAEhB,IAAI,QAAQ,UAAU,MACxB,MAAM,6BAA6B,GAAG,GAGxC,QAAQ,SAAS;CACnB,SAAS,KAAK;EAGZ,IAFA,QAAQ,MAAM,GAEV,eAAe,OAAO;GACxB,IAAM,SAAS,IAAI,OAAO,IAAI,QAAQ,uBAAuB,MAAM,GAAG,GAAG;GAGzE,AADA,OAAO,OAAO,IAAI,SAAS,IAAI,QAAA,CAAS,QAAQ,QAAQ,GAAG,CAAC,GAC5D,OAAO,IAAI;EACb;EAEA,QAAQ,KAAK,CAAC;CAChB;AACF;AAEA,eAAe,WAAW,KAAkC;CAC1D,IAAM,EAAC,KAAK,QAAQ,WAAU,KACxB,CAAC,EAAC,WAAU,EAAC,mBAAkB,MAAM,QAAQ,IAAI,CACrD,OAAO,YACP,OAAO,gBACT,CAAC,GAEK,EAAC,UAAU,QAAO,MAAM,QAAQ;EAAC,QAAQ;EAAK;CAAM,CAAC,GAEvD,YAAY;CAEhB,KAAK,IAAM,WAAW,UAAU;EAC9B,IAAM,YAAY,cAAc,SAAS,GAAG;EAC5C,AAAI,QAAQ,SAAS,WACnB,YAAY,IACZ,OAAO,MAAM,YAAY,WAAW,KAC3B,QAAQ,SAAS,YAC1B,OAAO,KAAK,YAAY,WAAW,IAEnC,OAAO,IAAI,YAAY,WAAW;CAEtC;CAEA,AAAI,aACF,QAAQ,KAAK,CAAC;AAElB;AAEA,eAAe,6BAA6B,KAAmB;CAC7D,IAAM,CACJ,EAAC,WAAW,mBACZ,EAAC,4BACD,EAAC,qBACD,EAAC,4BACD,EAAC,0BACC,MAAM,QAAQ,IAAI;EACpB,OAAO;EACP,OAAO;EACP,OAAO;EACP,OAAO;EACP,OAAO;CACT,CAAC,GAEK,QAAQ,IAAI,QAAQ,UAAU,KAAQ,KAAA,IAAY,IAAI,QAAQ,OAC9D,aAAa,OAAO,cAAc,CAAC,GACnC,kBAAkB,IAAI,iBACtB,WAAW,IAAI,UAGf,SAAS,IAAI,GAAG,QAAQ,QAAQ,UAAU,UAC1C,QAAQ,OAAO,SAAS,CAAC;CAE/B,KAAK,IAAM,OAAO,OAAO,OAAO,IAAI,WAAW,CAAC,CAAC,GAAG;EAClD,IAAI,CAAC,IAAI,aAAa,CAAC,IAAI,QAAQ,SAAS,KAAK,GAAG;EACpD,IAAM,UAAU,IAAI,QAAQ,QAAQ,SAAS,OAAO,GAC9C,aAAa,KAAK,QAAQ,IAAI,KAAK,OAAO;EAGhD,IAAI,CAAC,WAAW,UAAU,GAAG;EAE7B,IAAM,kBAAkB,MAAM,kBAAkB,EAC9C,WACF,CAAC,GACK,kBAAkB,gBAAgB,QAAQ;GAC9C,cAAc,yBAAyB;IACrC;IACA;IACA;IACA,UAAU,KAAK,SAAS,QAAQ,OAAO;IACvC,UAAU,yBAAyB,EAAC,MAAK,CAAC;IAC1C,eAAe,IAAI;IACnB,wBAAwB;IACxB,UAAU,IAAI,GAAG;IACjB,cAAc,KAAK,QAAQ,IAAI,KAAK,IAAI,GAAG,cAAc,eAAe;IACxE,kBAAkB;GACpB,CAAC;GACD,sBAAsB,KAAA;GACtB;GACA,qBAAqB,KAAK,QAAQ,IAAI,KAAK,cAAc;EAC3D,CAAC,GACK,WAA+B,CAAC;EActC,AAZA,UAAU,OAAO,iBAAiB;GAEhC,YAAY;GAEZ,qBAAqB;GAErB,gBAAgB,SAA2B;IAEzC,AADA,SAAS,KAAK,OAAO,GACrB,QAAQ,UAAU;GACpB;EACF,CAAC,GAED,qBAAqB,KAAK,QAAQ;CACpC;AACF;ACrLA,eAAsB,YAAY,SAA+D;CAC/F,IAAI;EACF,MAAM,MAAM;GACV,KAAK,QAAQ,IAAI;GACjB,QAAQ,QAAQ;GAChB,UAAU,QAAQ;EACpB,CAAC;CACH,SAAS,KAAK;EACZ,YAAY,GAAG;CACjB;AACF"}
1
+ {"version":3,"file":"checkAction-B8M5CP3j.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 type {ExtractorMessage} from '@microsoft/api-extractor'\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 [\n {Extractor, ExtractorConfig},\n {createApiExtractorConfig},\n {createTSDocConfig},\n {getExtractMessagesConfig},\n {printExtractMessages},\n ] = await Promise.all([\n import('@microsoft/api-extractor'),\n import('./tasks/dts/createApiExtractorConfig.ts'),\n import('./tasks/dts/createTSDocConfig.ts'),\n import('./tasks/dts/getExtractMessagesConfig.ts'),\n import('./printExtractMessages.ts'),\n ])\n\n const tsdoc = ctx.config?.tsdoc === false ? undefined : ctx.config?.tsdoc\n const customTags = tsdoc?.customTags || []\n const bundledPackages = ctx.bundledPackages\n const distPath = ctx.distPath\n // api-extractor needs a `compilerOptions.outDir` for its path mapping; tsdown does not, so\n // fall back to the dist folder when the tsconfig leaves it unset\n const outDir = ctx.ts.config?.options.outDir ?? distPath\n const rules = tsdoc?.rules || {}\n\n for (const exp of Object.values(ctx.exports || {})) {\n if (!exp._exported || !exp.default.endsWith('.js')) continue\n const dtsPath = exp.default.replace(/\\.js$/, '.d.ts')\n const exportPath = path.resolve(ctx.cwd, dtsPath)\n\n // JS-only entries emit no declarations; there is nothing to check\n if (!fileExists(exportPath)) continue\n\n const tsdocConfigFile = await createTSDocConfig({\n customTags,\n })\n const extractorConfig = ExtractorConfig.prepare({\n configObject: createApiExtractorConfig({\n bundledPackages,\n distPath,\n exportPath,\n filePath: path.relative(outDir, dtsPath),\n messages: getExtractMessagesConfig({rules}),\n projectFolder: ctx.cwd,\n mainEntryPointFilePath: exportPath,\n tsconfig: ctx.ts.config!,\n tsconfigPath: path.resolve(ctx.cwd, ctx.ts.configPath || 'tsconfig.json'),\n dtsRollupEnabled: false,\n }),\n configObjectFullPath: undefined,\n tsdocConfigFile,\n packageJsonFullPath: path.resolve(ctx.cwd, 'package.json'),\n })\n const messages: ExtractorMessage[] = []\n // Invoke API Extractor\n Extractor.invoke(extractorConfig, {\n // Equivalent to the \"--local\" command-line parameter\n localBuild: true,\n // Equivalent to the \"--verbose\" command-line parameter\n showVerboseMessages: true,\n // handle messages\n messageCallback(message: ExtractorMessage) {\n messages.push(message)\n message.handled = true\n },\n })\n\n printExtractMessages(ctx, messages)\n }\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,23 +1,23 @@
1
1
  import { cac } from "cac";
2
- var version = "12.0.0";
2
+ var version = "12.0.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-BMxszLZS.js");
5
+ let { checkAction } = await import("./checkAction-B8M5CP3j.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-DFrmHzYY.js");
8
+ let { check = !1, ...buildOptions } = options, { buildAction } = await import("./buildAction-D-M3KYyN.js");
9
9
  if (await buildAction(buildOptions), check) {
10
- let { checkAction } = await import("./checkAction-BMxszLZS.js");
10
+ let { checkAction } = await import("./checkAction-B8M5CP3j.js");
11
11
  await checkAction({
12
12
  strict: options.strict,
13
13
  tsconfig: options.tsconfig
14
14
  });
15
15
  }
16
16
  }), cli.command("init [path]", "Initialize package").action(async (p) => {
17
- let { initAction } = await import("./initAction-Cv0oRwWP.js");
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-uRPAvgLE.js");
20
+ let { watchAction } = await import("./watchAction-BQG5_hhl.js");
21
21
  return watchAction(options);
22
22
  }), cli.help(), cli.version(version), cli.parse();
23
23
  export {};
@@ -7,7 +7,7 @@ const require = createRequire(import.meta.url);
7
7
  async function createTSDocConfig(opts) {
8
8
  let { customTags } = opts;
9
9
  if (customTags.length === 0) return;
10
- let tsDocBaseConfig = parse((await readFile(require.resolve("@microsoft/api-extractor/extends/tsdoc-base.json"))).toString()), tagDefinitions = (tsDocBaseConfig.tagDefinitions || []).concat(customTags.map((t) => ({
10
+ let tsDocBaseBuf = await readFile(require.resolve("@microsoft/api-extractor/extends/tsdoc-base.json")), tsDocBaseConfig = parse(tsDocBaseBuf.toString()), tagDefinitions = (tsDocBaseConfig.tagDefinitions || []).concat(customTags.map((t) => ({
11
11
  tagName: `@${t.name}`,
12
12
  syntaxKind: t.syntaxKind,
13
13
  allowMultiple: t.allowMultiple
@@ -22,4 +22,4 @@ async function createTSDocConfig(opts) {
22
22
  }
23
23
  export { createTSDocConfig };
24
24
 
25
- //# sourceMappingURL=createTSDocConfig-CwaWneTR.js.map
25
+ //# sourceMappingURL=createTSDocConfig-ylfirNWP.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"createTSDocConfig-CwaWneTR.js","names":[],"sources":["../src/node/tasks/dts/createTSDocConfig.ts"],"sourcesContent":["import {readFile} from 'node:fs/promises'\nimport {createRequire} from 'node:module'\nimport {TSDocConfigFile} from '@microsoft/tsdoc-config'\nimport {parse} from 'jsonc-parser'\n\nconst require = createRequire(import.meta.url)\n\n/** @public */\nexport interface TSDocCustomTag {\n name: string\n syntaxKind: 'block' | 'modifier'\n allowMultiple?: boolean\n}\n\n/** @internal */\nexport async function createTSDocConfig(opts: {\n customTags: TSDocCustomTag[]\n}): Promise<TSDocConfigFile | undefined> {\n const {customTags} = opts\n\n if (customTags.length === 0) {\n return undefined\n }\n\n const tsDocBaseBuf = await readFile(\n require.resolve('@microsoft/api-extractor/extends/tsdoc-base.json'),\n )\n\n // Include the definitions that are required for API Extractor\n // extends: ['@microsoft/api-extractor/extends/tsdoc-base.json'],\n const tsDocBaseConfig = parse(tsDocBaseBuf.toString())\n\n // Define custom tags and specify how they should be parsed\n const tagDefinitions = (tsDocBaseConfig.tagDefinitions || []).concat(\n customTags.map((t) => ({\n tagName: `@${t.name}`,\n syntaxKind: t.syntaxKind,\n allowMultiple: t.allowMultiple,\n })),\n )\n\n // Indicate that custom tags are supported by your tooling.\n // (Without this, warnings may be reported saying that a tag is unsupported.)\n const supportForTags = {...tsDocBaseConfig.supportForTags}\n\n for (const customTag of customTags) {\n supportForTags[`@${customTag.name}`] = true\n }\n\n return TSDocConfigFile.loadFromObject({\n ...tsDocBaseConfig,\n noStandardTags: false,\n tagDefinitions,\n supportForTags,\n })\n}\n"],"mappings":";;;;AAKA,MAAM,UAAU,cAAc,OAAO,KAAK,GAAG;;AAU7C,eAAsB,kBAAkB,MAEC;CACvC,IAAM,EAAC,eAAc;CAErB,IAAI,WAAW,WAAW,GACxB;CASF,IAAM,kBAAkB,OAAM,MANH,SACzB,QAAQ,QAAQ,kDAAkD,CACpE,EAAA,CAI2C,SAAS,CAAC,GAG/C,kBAAkB,gBAAgB,kBAAkB,CAAC,EAAA,CAAG,OAC5D,WAAW,KAAK,OAAO;EACrB,SAAS,IAAI,EAAE;EACf,YAAY,EAAE;EACd,eAAe,EAAE;CACnB,EAAE,CACJ,GAIM,iBAAiB,EAAC,GAAG,gBAAgB,eAAc;CAEzD,KAAK,IAAM,aAAa,YACtB,eAAe,IAAI,UAAU,UAAU;CAGzC,OAAO,gBAAgB,eAAe;EACpC,GAAG;EACH,gBAAgB;EAChB;EACA;CACF,CAAC;AACH"}
1
+ {"version":3,"file":"createTSDocConfig-ylfirNWP.js","names":[],"sources":["../src/node/tasks/dts/createTSDocConfig.ts"],"sourcesContent":["import {readFile} from 'node:fs/promises'\nimport {createRequire} from 'node:module'\nimport {TSDocConfigFile} from '@microsoft/tsdoc-config'\nimport {parse} from 'jsonc-parser'\n\nconst require = createRequire(import.meta.url)\n\n/** @public */\nexport interface TSDocCustomTag {\n name: string\n syntaxKind: 'block' | 'modifier'\n allowMultiple?: boolean\n}\n\n/** @internal */\nexport async function createTSDocConfig(opts: {\n customTags: TSDocCustomTag[]\n}): Promise<TSDocConfigFile | undefined> {\n const {customTags} = opts\n\n if (customTags.length === 0) {\n return undefined\n }\n\n const tsDocBaseBuf = await readFile(\n require.resolve('@microsoft/api-extractor/extends/tsdoc-base.json'),\n )\n\n // Include the definitions that are required for API Extractor\n // extends: ['@microsoft/api-extractor/extends/tsdoc-base.json'],\n const tsDocBaseConfig = parse(tsDocBaseBuf.toString())\n\n // Define custom tags and specify how they should be parsed\n const tagDefinitions = (tsDocBaseConfig.tagDefinitions || []).concat(\n customTags.map((t) => ({\n tagName: `@${t.name}`,\n syntaxKind: t.syntaxKind,\n allowMultiple: t.allowMultiple,\n })),\n )\n\n // Indicate that custom tags are supported by your tooling.\n // (Without this, warnings may be reported saying that a tag is unsupported.)\n const supportForTags = {...tsDocBaseConfig.supportForTags}\n\n for (const customTag of customTags) {\n supportForTags[`@${customTag.name}`] = true\n }\n\n return TSDocConfigFile.loadFromObject({\n ...tsDocBaseConfig,\n noStandardTags: false,\n tagDefinitions,\n supportForTags,\n })\n}\n"],"mappings":";;;;AAKA,MAAM,UAAU,cAAc,YAAY,GAAG;;AAU7C,eAAsB,kBAAkB,MAEC;CACvC,IAAM,EAAC,eAAc;CAErB,IAAI,WAAW,WAAW,GACxB;CAGF,IAAM,eAAe,MAAM,SACzB,QAAQ,QAAQ,kDAAkD,CACpE,GAIM,kBAAkB,MAAM,aAAa,SAAS,CAAC,GAG/C,kBAAkB,gBAAgB,kBAAkB,CAAC,EAAA,CAAG,OAC5D,WAAW,KAAK,OAAO;EACrB,SAAS,IAAI,EAAE;EACf,YAAY,EAAE;EACd,eAAe,EAAE;CACnB,EAAE,CACJ,GAIM,iBAAiB,EAAC,GAAG,gBAAgB,eAAc;CAEzD,KAAK,IAAM,aAAa,YACtB,eAAe,IAAI,UAAU,UAAU;CAGzC,OAAO,gBAAgB,eAAe;EACpC,GAAG;EACH,gBAAgB;EAChB;EACA;CACF,CAAC;AACH"}
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../src/node/core/config/defineConfig.ts","../src/node/fileExists.ts","../src/node/core/config/findConfigFile.ts","../src/node/core/config/legacyConfig.ts","../src/node/core/config/loadConfig.ts","../src/node/core/defaults.ts","../src/node/core/template/define.ts"],"sourcesContent":["import type {PkgConfigOptions} from './types.ts'\n\n/** @public */\nexport function defineConfig<const T extends PkgConfigOptions>(configOptions: T): T {\n return configOptions\n}\n","import {statSync} from 'node:fs'\n\n/** @internal */\nexport function fileExists(filePath: string): boolean {\n try {\n statSync(filePath)\n\n return true\n } catch {\n return false\n }\n}\n","import path from 'node:path'\nimport findConfig from 'find-config'\nimport {fileExists} from '../../fileExists.ts'\n\nconst CONFIG_FILE_NAMES = [\n 'package.config.ts',\n 'package.config.js',\n 'package.config.cjs',\n 'package.config.mts',\n 'package.config.mjs',\n]\n\n/** @internal */\nexport function findConfigFile(cwd: string): string | undefined {\n const pkgJsonPath = findConfig('package.json', {cwd})\n\n if (!pkgJsonPath) return undefined\n\n const pkgPath = path.dirname(pkgJsonPath)\n\n for (const fileName of CONFIG_FILE_NAMES) {\n const configPath = path.resolve(pkgPath, fileName)\n\n const exists = fileExists(configPath)\n\n if (exists) {\n return configPath\n }\n }\n\n return undefined\n}\n","/**\n * Migration checks for `package.config.ts` options that were removed or deprecated in v12,\n * when `@sanity/pkg-utils` moved from its rollup/rolldown stack onto `tsdown` +\n * `@sanity/tsdown-config`.\n *\n * Removed options are \"tombstoned\": they stay declared on `PkgConfigOptions` (typed `never`,\n * tagged `@deprecated`) so editors surface the migration path, and the checks below throw a\n * runtime error with copy-pasteable migration instructions when they are set anyway — JS\n * configs bypass the types, and the error text is written to be actionable for humans and\n * agents alike.\n *\n * The checks are gated by the `legacyChecks` option, defaulting to on outside production\n * builds (`process.env.NODE_ENV !== 'production'`) so they add no overhead where migration\n * mistakes can no longer surface.\n */\n\nconst MIGRATION_GUIDE_URL =\n 'https://github.com/sanity-io/pkg-utils/blob/main/packages/@sanity/pkg-utils/MIGRATE.md'\n\ninterface LegacyCheck {\n option: string\n migration: string[]\n}\n\nconst tombstones: LegacyCheck[] = [\n {\n option: 'tsgo',\n migration: [\n 'The `dts` option is now passed through to tsdown as-is. Move the flag into it:',\n '',\n ' // package.config.ts',\n ' export default defineConfig({',\n ' dts: {tsgo: true},',\n ' })',\n ],\n },\n {\n option: 'extract',\n migration: [\n 'TSDoc/release-tag checking is configured with the top-level `tsdoc` option:',\n '',\n ' // extract: {enabled: false} -> tsdoc: false',\n ' // extract: {rules: {...}} -> tsdoc: {rules: {...}}',\n ' // extract: {customTags: [...]} -> tsdoc: {customTags: [...]}',\n '',\n 'Type inlining (`extract.bundledPackages`) follows the bundling decisions now:',\n 'devDependencies that are imported are inlined automatically (types included), and',\n '`deps: {alwaysBundle: [...]}` forces inlining a dependency/peerDependency.',\n '',\n '`extract.checkTypes` has no successor: type generation no longer type-checks',\n '(run `tsc --noEmit` for type checking).',\n ],\n },\n {\n option: 'babel',\n migration: [\n 'The Babel options moved to the top level:',\n '',\n ' // babel: {reactCompiler: true} -> reactCompiler: true',\n ' // babel: {styledComponents: true} -> styledComponents: true',\n '',\n '`styledComponents` now uses oxc\\u2019s native port of `babel-plugin-styled-components`,',\n 'so `babel-plugin-styled-components` can be uninstalled.',\n '',\n 'Custom Babel plugins (`babel.plugins`) run through the `plugins` option instead,',\n 'with a self-installed `@rolldown/plugin-babel`:',\n '',\n ' import pluginBabel from \"@rolldown/plugin-babel\"',\n ' export default defineConfig({',\n ' plugins: [await pluginBabel({plugins: [\"babel-plugin-example\"]})],',\n ' })',\n ],\n },\n {\n option: 'rollup',\n migration: [\n 'The rollup stack was replaced with tsdown:',\n '',\n ' // rollup: {vanillaExtract: true} -> vanillaExtract: true',\n ' // rollup: {plugins: [...]} -> plugins: [...] (rolldown plugins; most',\n ' // Rollup plugins are compatible)',\n '',\n '`rollup.output`, `rollup.treeshake`, `rollup.experimentalLogSideEffects` and',\n '`rollup.hashChunkFileNames` have no successor (chunk filenames are content-hashed now).',\n '',\n '`rollup.optimizeLodash` has no successor either \\u2014 and neither does the implicit',\n 'lodash-import optimization that was applied whenever `lodash` was a dependency.',\n 'Preferably drop lodash altogether (see https://e18e.dev for module replacements like',\n '`es-toolkit`), or import from `lodash-es`, which tree-shakes in consumers without',\n 'build-time rewriting.',\n ],\n },\n {\n option: 'reactCompilerOptions',\n migration: [\n 'Pass the compiler options to `reactCompiler` instead:',\n '',\n ' // babel: {reactCompiler: true}, reactCompilerOptions: {target: \"18\"}',\n ' // becomes:',\n ' reactCompiler: {target: \"18\"}',\n ],\n },\n {\n option: 'jsx',\n migration: [\n 'Configure JSX through `tsconfig.json` \\u2014 the bundler reads it from there:',\n '',\n ' // tsconfig.json',\n ' {\"compilerOptions\": {\"jsx\": \"react-jsx\"}}',\n ],\n },\n {\n option: 'jsxFactory',\n migration: ['Configure JSX through `tsconfig.json` (`compilerOptions.jsxFactory`).'],\n },\n {\n option: 'jsxFragment',\n migration: ['Configure JSX through `tsconfig.json` (`compilerOptions.jsxFragmentFactory`).'],\n },\n {\n option: 'jsxImportSource',\n migration: ['Configure JSX through `tsconfig.json` (`compilerOptions.jsxImportSource`).'],\n },\n]\n\n/**\n * Throws for tombstoned options and warns for grandfathered ones. `config` is the raw loaded\n * config object (before it is narrowed to `PkgConfigOptions`), so removed options are still\n * observable.\n * @internal\n */\nexport function runLegacyConfigChecks(config: Record<string, unknown>): void {\n const legacyChecks =\n typeof config['legacyChecks'] === 'boolean'\n ? config['legacyChecks']\n : process.env['NODE_ENV'] !== 'production'\n\n if (!legacyChecks) return\n\n for (const {option, migration} of tombstones) {\n if (config[option] === undefined) continue\n\n throw new Error(\n [\n `package.config.ts: the \\`${option}\\` option was removed in @sanity/pkg-utils v12.`,\n '',\n ...migration,\n '',\n `Full migration guide: ${MIGRATION_GUIDE_URL}`,\n 'Set `legacyChecks: false` in package.config.ts to skip this validation (it is also',\n 'skipped when NODE_ENV=production).',\n ].join('\\n'),\n )\n }\n\n // `dts` survived, but as a tsdown passthrough object — the old mode strings are tombstoned\n // with value-specific migration instructions.\n const dts = config['dts']\n if (typeof dts === 'string') {\n throw new Error(\n [\n `package.config.ts: \\`dts: '${dts}'\\` was removed in @sanity/pkg-utils v12 — the \\`dts\\``,\n 'option is now passed through to tsdown as-is (an options object, or `false`).',\n '',\n ...(dts === 'rolldown'\n ? [\n \"`dts: 'rolldown'` is the default behavior now: delete the option. Options that\",\n 'accompanied it move into the object, e.g. `tsgo: true` becomes `dts: {tsgo: true}`.',\n ]\n : [\n \"`dts: 'api-extractor'` type generation was removed. Types are generated with\",\n 'tsdown (rolldown-plugin-dts); api-extractor remains as the TSDoc/release-tag',\n 'checking that runs during `pkg check` — configure it with the `tsdoc` option.',\n ]),\n '',\n `Full migration guide: ${MIGRATION_GUIDE_URL}`,\n 'Set `legacyChecks: false` in package.config.ts to skip this validation (it is also',\n 'skipped when NODE_ENV=production).',\n ].join('\\n'),\n )\n }\n\n // Grandfathered: `external` still works (mapped onto tsdown's `deps`), with a nudge toward\n // its successor.\n if (config['external'] !== undefined) {\n // eslint-disable-next-line no-console -- config-load-time deprecation warning\n console.warn(\n [\n 'package.config.ts: `external` is deprecated. Use `deps: {neverBundle: [...]}` to mark',\n 'dependencies as external, and `deps: {alwaysBundle: [...]}` to bundle a dependency',\n '(the callback pattern that filtered entries out of the defaults).',\n ].join('\\n'),\n )\n }\n}\n","import path from 'node:path'\nimport {pathToFileURL} from 'node:url'\nimport {tsImport} from 'tsx/esm/api'\nimport {findConfigFile} from './findConfigFile.ts'\nimport {runLegacyConfigChecks} from './legacyConfig.ts'\nimport type {PkgConfigOptions} from './types.ts'\n\n/** @alpha */\nexport async function loadConfig(options: {\n cwd: string\n pkgPath: string\n}): Promise<PkgConfigOptions | undefined> {\n const {cwd, pkgPath} = options\n\n const root = path.dirname(pkgPath)\n\n const configFile = findConfigFile(root)\n\n if (!configFile) {\n return undefined\n }\n\n // Do not accept config files outside of the root\n if (!configFile.startsWith(cwd)) {\n return undefined\n }\n\n const mod = await tsImport(pathToFileURL(configFile).toString(), import.meta.url)\n\n const config = mod?.default || mod || undefined\n\n if (config && typeof config === 'object') {\n runLegacyConfigChecks(config)\n }\n\n return config\n}\n","import config from '@sanity/browserslist-config'\n\n/** @public */\nexport const DEFAULT_BROWSERSLIST_QUERY: string[] = config\n","import type {PkgTemplateOption} from './types.ts'\n\n/** @public */\nexport function defineTemplateOption<T>(option: PkgTemplateOption<T>): PkgTemplateOption<T> {\n return option\n}\n"],"mappings":";;;;;;;AAGA,SAAgB,aAA+C,eAAqB;CAClF,OAAO;AACT;;ACFA,SAAgB,WAAW,UAA2B;CACpD,IAAI;EAGF,OAFA,SAAS,QAAQ,GAEV;CACT,QAAQ;EACN,OAAO;CACT;AACF;ACPA,MAAM,oBAAoB;CACxB;CACA;CACA;CACA;CACA;AACF;;AAGA,SAAgB,eAAe,KAAiC;CAC9D,IAAM,cAAc,WAAW,gBAAgB,EAAC,IAAG,CAAC;CAEpD,IAAI,CAAC,aAAa;CAElB,IAAM,UAAU,KAAK,QAAQ,WAAW;CAExC,KAAK,IAAM,YAAY,mBAAmB;EACxC,IAAM,aAAa,KAAK,QAAQ,SAAS,QAAQ;EAIjD,IAFe,WAAW,UAEjB,GACP,OAAO;CAEX;AAGF;;;;;;;;;;;;;;;;ACfA,MAAM,sBACJ,0FAOI,aAA4B;CAChC;EACE,QAAQ;EACR,WAAW;GACT;GACA;GACA;GACA;GACA;GACA;EACF;CACF;CACA;EACE,QAAQ;EACR,WAAW;GACT;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACF;CACF;CACA;EACE,QAAQ;EACR,WAAW;GACT;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACF;CACF;CACA;EACE,QAAQ;EACR,WAAW;GACT;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACF;CACF;CACA;EACE,QAAQ;EACR,WAAW;GACT;GACA;GACA;GACA;GACA;EACF;CACF;CACA;EACE,QAAQ;EACR,WAAW;GACT;GACA;GACA;GACA;EACF;CACF;CACA;EACE,QAAQ;EACR,WAAW,CAAC,uEAAuE;CACrF;CACA;EACE,QAAQ;EACR,WAAW,CAAC,+EAA+E;CAC7F;CACA;EACE,QAAQ;EACR,WAAW,CAAC,4EAA4E;CAC1F;AACF;;;;;;;AAQA,SAAgB,sBAAsB,QAAuC;CAM3E,IAAI,EAJF,OAAO,OAAO,gBAAoB,YAC9B,OAAO,eACP,QAAQ,IAAI,aAAgB,eAEf;CAEnB,KAAK,IAAM,EAAC,QAAQ,eAAc,YAC5B,WAAO,YAAY,KAAA,GAEvB,MAAU,MACR;EACE,4BAA4B,OAAO;EACnC;EACA,GAAG;EACH;EACA,yBAAyB;EACzB;EACA;CACF,CAAC,CAAC,KAAK,IAAI,CACb;CAKF,IAAM,MAAM,OAAO;CACnB,IAAI,OAAO,OAAQ,UACjB,MAAU,MACR;EACE,8BAA8B,IAAI;EAClC;EACA;EACA,GAAI,QAAQ,aACR,CACE,kFACA,qFACF,IACA;GACE;GACA;GACA;EACF;EACJ;EACA,yBAAyB;EACzB;EACA;CACF,CAAC,CAAC,KAAK,IAAI,CACb;CAKF,AAAI,OAAO,aAAgB,KAAA,KAEzB,QAAQ,KACN;EACE;EACA;EACA;CACF,CAAC,CAAC,KAAK,IAAI,CACb;AAEJ;;AC1LA,eAAsB,WAAW,SAGS;CACxC,IAAM,EAAC,KAAK,YAAW,SAIjB,aAAa,eAFN,KAAK,QAAQ,OAEW,CAAC;CAOtC,IALI,CAAC,cAKD,CAAC,WAAW,WAAW,GAAG,GAC5B;CAGF,IAAM,MAAM,MAAM,SAAS,cAAc,UAAU,CAAC,CAAC,SAAS,GAAG,OAAO,KAAK,GAAG,GAE1E,SAAS,KAAK,WAAW,OAAO,KAAA;CAMtC,OAJI,UAAU,OAAO,UAAW,YAC9B,sBAAsB,MAAM,GAGvB;AACT;;ACjCA,MAAa,6BAAuC;;ACApD,SAAgB,qBAAwB,QAAoD;CAC1F,OAAO;AACT"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../src/node/core/config/defineConfig.ts","../src/node/fileExists.ts","../src/node/core/config/findConfigFile.ts","../src/node/core/config/legacyConfig.ts","../src/node/core/config/loadConfig.ts","../src/node/core/defaults.ts","../src/node/core/template/define.ts"],"sourcesContent":["import type {PkgConfigOptions} from './types.ts'\n\n/** @public */\nexport function defineConfig<const T extends PkgConfigOptions>(configOptions: T): T {\n return configOptions\n}\n","import {statSync} from 'node:fs'\n\n/** @internal */\nexport function fileExists(filePath: string): boolean {\n try {\n statSync(filePath)\n\n return true\n } catch {\n return false\n }\n}\n","import path from 'node:path'\nimport findConfig from 'find-config'\nimport {fileExists} from '../../fileExists.ts'\n\nconst CONFIG_FILE_NAMES = [\n 'package.config.ts',\n 'package.config.js',\n 'package.config.cjs',\n 'package.config.mts',\n 'package.config.mjs',\n]\n\n/** @internal */\nexport function findConfigFile(cwd: string): string | undefined {\n const pkgJsonPath = findConfig('package.json', {cwd})\n\n if (!pkgJsonPath) return undefined\n\n const pkgPath = path.dirname(pkgJsonPath)\n\n for (const fileName of CONFIG_FILE_NAMES) {\n const configPath = path.resolve(pkgPath, fileName)\n\n const exists = fileExists(configPath)\n\n if (exists) {\n return configPath\n }\n }\n\n return undefined\n}\n","/**\n * Migration checks for `package.config.ts` options that were removed or deprecated in v12,\n * when `@sanity/pkg-utils` moved from its rollup/rolldown stack onto `tsdown` +\n * `@sanity/tsdown-config`.\n *\n * Removed options are \"tombstoned\": they stay declared on `PkgConfigOptions` (typed `never`,\n * tagged `@deprecated`) so editors surface the migration path, and the checks below throw a\n * runtime error with copy-pasteable migration instructions when they are set anyway — JS\n * configs bypass the types, and the error text is written to be actionable for humans and\n * agents alike.\n *\n * The checks are gated by the `legacyChecks` option, defaulting to on outside production\n * builds (`process.env.NODE_ENV !== 'production'`) so they add no overhead where migration\n * mistakes can no longer surface.\n */\n\nconst MIGRATION_GUIDE_URL =\n 'https://github.com/sanity-io/pkg-utils/blob/main/packages/@sanity/pkg-utils/MIGRATE.md'\n\ninterface LegacyCheck {\n option: string\n migration: string[]\n}\n\nconst tombstones: LegacyCheck[] = [\n {\n option: 'tsgo',\n migration: [\n 'The `dts` option is now passed through to tsdown as-is. Move the flag into it:',\n '',\n ' // package.config.ts',\n ' export default defineConfig({',\n ' dts: {tsgo: true},',\n ' })',\n ],\n },\n {\n option: 'extract',\n migration: [\n 'TSDoc/release-tag checking is configured with the top-level `tsdoc` option:',\n '',\n ' // extract: {enabled: false} -> tsdoc: false',\n ' // extract: {rules: {...}} -> tsdoc: {rules: {...}}',\n ' // extract: {customTags: [...]} -> tsdoc: {customTags: [...]}',\n '',\n 'Type inlining (`extract.bundledPackages`) follows the bundling decisions now:',\n 'devDependencies that are imported are inlined automatically (types included), and',\n '`deps: {alwaysBundle: [...]}` forces inlining a dependency/peerDependency.',\n '',\n '`extract.checkTypes` has no successor: type generation no longer type-checks',\n '(run `tsc --noEmit` for type checking).',\n ],\n },\n {\n option: 'babel',\n migration: [\n 'The Babel options moved to the top level:',\n '',\n ' // babel: {reactCompiler: true} -> reactCompiler: true',\n ' // babel: {styledComponents: true} -> styledComponents: true',\n '',\n '`styledComponents` now uses oxc\\u2019s native port of `babel-plugin-styled-components`,',\n 'so `babel-plugin-styled-components` can be uninstalled.',\n '',\n 'Custom Babel plugins (`babel.plugins`) run through the `plugins` option instead,',\n 'with a self-installed `@rolldown/plugin-babel`:',\n '',\n ' import pluginBabel from \"@rolldown/plugin-babel\"',\n ' export default defineConfig({',\n ' plugins: [await pluginBabel({plugins: [\"babel-plugin-example\"]})],',\n ' })',\n ],\n },\n {\n option: 'rollup',\n migration: [\n 'The rollup stack was replaced with tsdown:',\n '',\n ' // rollup: {vanillaExtract: true} -> vanillaExtract: true',\n ' // rollup: {plugins: [...]} -> plugins: [...] (rolldown plugins; most',\n ' // Rollup plugins are compatible)',\n '',\n '`rollup.output`, `rollup.treeshake`, `rollup.experimentalLogSideEffects` and',\n '`rollup.hashChunkFileNames` have no successor (chunk filenames are content-hashed now).',\n '',\n '`rollup.optimizeLodash` has no successor either \\u2014 and neither does the implicit',\n 'lodash-import optimization that was applied whenever `lodash` was a dependency.',\n 'Preferably drop lodash altogether (see https://e18e.dev for module replacements like',\n '`es-toolkit`), or import from `lodash-es`, which tree-shakes in consumers without',\n 'build-time rewriting.',\n ],\n },\n {\n option: 'reactCompilerOptions',\n migration: [\n 'Pass the compiler options to `reactCompiler` instead:',\n '',\n ' // babel: {reactCompiler: true}, reactCompilerOptions: {target: \"18\"}',\n ' // becomes:',\n ' reactCompiler: {target: \"18\"}',\n ],\n },\n {\n option: 'jsx',\n migration: [\n 'Configure JSX through `tsconfig.json` \\u2014 the bundler reads it from there:',\n '',\n ' // tsconfig.json',\n ' {\"compilerOptions\": {\"jsx\": \"react-jsx\"}}',\n ],\n },\n {\n option: 'jsxFactory',\n migration: ['Configure JSX through `tsconfig.json` (`compilerOptions.jsxFactory`).'],\n },\n {\n option: 'jsxFragment',\n migration: ['Configure JSX through `tsconfig.json` (`compilerOptions.jsxFragmentFactory`).'],\n },\n {\n option: 'jsxImportSource',\n migration: ['Configure JSX through `tsconfig.json` (`compilerOptions.jsxImportSource`).'],\n },\n]\n\n/**\n * Throws for tombstoned options and warns for grandfathered ones. `config` is the raw loaded\n * config object (before it is narrowed to `PkgConfigOptions`), so removed options are still\n * observable.\n * @internal\n */\nexport function runLegacyConfigChecks(config: Record<string, unknown>): void {\n const legacyChecks =\n typeof config['legacyChecks'] === 'boolean'\n ? config['legacyChecks']\n : process.env['NODE_ENV'] !== 'production'\n\n if (!legacyChecks) return\n\n for (const {option, migration} of tombstones) {\n if (config[option] === undefined) continue\n\n throw new Error(\n [\n `package.config.ts: the \\`${option}\\` option was removed in @sanity/pkg-utils v12.`,\n '',\n ...migration,\n '',\n `Full migration guide: ${MIGRATION_GUIDE_URL}`,\n 'Set `legacyChecks: false` in package.config.ts to skip this validation (it is also',\n 'skipped when NODE_ENV=production).',\n ].join('\\n'),\n )\n }\n\n // `dts` survived, but as a tsdown passthrough object — the old mode strings are tombstoned\n // with value-specific migration instructions.\n const dts = config['dts']\n if (typeof dts === 'string') {\n throw new Error(\n [\n `package.config.ts: \\`dts: '${dts}'\\` was removed in @sanity/pkg-utils v12 — the \\`dts\\``,\n 'option is now passed through to tsdown as-is (an options object, or `false`).',\n '',\n ...(dts === 'rolldown'\n ? [\n \"`dts: 'rolldown'` is the default behavior now: delete the option. Options that\",\n 'accompanied it move into the object, e.g. `tsgo: true` becomes `dts: {tsgo: true}`.',\n ]\n : [\n \"`dts: 'api-extractor'` type generation was removed. Types are generated with\",\n 'tsdown (rolldown-plugin-dts); api-extractor remains as the TSDoc/release-tag',\n 'checking that runs during `pkg check` — configure it with the `tsdoc` option.',\n ]),\n '',\n `Full migration guide: ${MIGRATION_GUIDE_URL}`,\n 'Set `legacyChecks: false` in package.config.ts to skip this validation (it is also',\n 'skipped when NODE_ENV=production).',\n ].join('\\n'),\n )\n }\n\n // Grandfathered: `external` still works (mapped onto tsdown's `deps`), with a nudge toward\n // its successor.\n if (config['external'] !== undefined) {\n // eslint-disable-next-line no-console -- config-load-time deprecation warning\n console.warn(\n [\n 'package.config.ts: `external` is deprecated. Use `deps: {neverBundle: [...]}` to mark',\n 'dependencies as external, and `deps: {alwaysBundle: [...]}` to bundle a dependency',\n '(the callback pattern that filtered entries out of the defaults).',\n ].join('\\n'),\n )\n }\n}\n","import path from 'node:path'\nimport {pathToFileURL} from 'node:url'\nimport {tsImport} from 'tsx/esm/api'\nimport {findConfigFile} from './findConfigFile.ts'\nimport {runLegacyConfigChecks} from './legacyConfig.ts'\nimport type {PkgConfigOptions} from './types.ts'\n\n/** @alpha */\nexport async function loadConfig(options: {\n cwd: string\n pkgPath: string\n}): Promise<PkgConfigOptions | undefined> {\n const {cwd, pkgPath} = options\n\n const root = path.dirname(pkgPath)\n\n const configFile = findConfigFile(root)\n\n if (!configFile) {\n return undefined\n }\n\n // Do not accept config files outside of the root\n if (!configFile.startsWith(cwd)) {\n return undefined\n }\n\n const mod = await tsImport(pathToFileURL(configFile).toString(), import.meta.url)\n\n const config = mod?.default || mod || undefined\n\n if (config && typeof config === 'object') {\n runLegacyConfigChecks(config)\n }\n\n return config\n}\n","import config from '@sanity/browserslist-config'\n\n/** @public */\nexport const DEFAULT_BROWSERSLIST_QUERY: string[] = config\n","import type {PkgTemplateOption} from './types.ts'\n\n/** @public */\nexport function defineTemplateOption<T>(option: PkgTemplateOption<T>): PkgTemplateOption<T> {\n return option\n}\n"],"mappings":";;;;;;;AAGA,SAAgB,aAA+C,eAAqB;CAClF,OAAO;AACT;;ACFA,SAAgB,WAAW,UAA2B;CACpD,IAAI;EAGF,OAFA,SAAS,QAAQ,GAEV;CACT,QAAQ;EACN,OAAO;CACT;AACF;ACPA,MAAM,oBAAoB;CACxB;CACA;CACA;CACA;CACA;AACF;;AAGA,SAAgB,eAAe,KAAiC;CAC9D,IAAM,cAAc,WAAW,gBAAgB,EAAC,IAAG,CAAC;CAEpD,IAAI,CAAC,aAAa;CAElB,IAAM,UAAU,KAAK,QAAQ,WAAW;CAExC,KAAK,IAAM,YAAY,mBAAmB;EACxC,IAAM,aAAa,KAAK,QAAQ,SAAS,QAAQ;EAIjD,IAFe,WAAW,UAEjB,GACP,OAAO;CAEX;AAGF;;;;;;;;;;;;;;;;ACfA,MAAM,sBACJ,0FAOI,aAA4B;CAChC;EACE,QAAQ;EACR,WAAW;GACT;GACA;GACA;GACA;GACA;GACA;EACF;CACF;CACA;EACE,QAAQ;EACR,WAAW;GACT;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACF;CACF;CACA;EACE,QAAQ;EACR,WAAW;GACT;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACF;CACF;CACA;EACE,QAAQ;EACR,WAAW;GACT;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACF;CACF;CACA;EACE,QAAQ;EACR,WAAW;GACT;GACA;GACA;GACA;GACA;EACF;CACF;CACA;EACE,QAAQ;EACR,WAAW;GACT;GACA;GACA;GACA;EACF;CACF;CACA;EACE,QAAQ;EACR,WAAW,CAAC,uEAAuE;CACrF;CACA;EACE,QAAQ;EACR,WAAW,CAAC,+EAA+E;CAC7F;CACA;EACE,QAAQ;EACR,WAAW,CAAC,4EAA4E;CAC1F;AACF;;;;;;;AAQA,SAAgB,sBAAsB,QAAuC;CAM3E,IAAI,EAJF,OAAO,OAAO,gBAAoB,YAC9B,OAAO,eACP,QAAQ,IAAI,aAAgB,eAEf;CAEnB,KAAK,IAAM,EAAC,QAAQ,eAAc,YAC5B,WAAO,YAAY,KAAA,GAEvB,MAAU,MACR;EACE,4BAA4B,OAAO;EACnC;EACA,GAAG;EACH;EACA,yBAAyB;EACzB;EACA;CACF,CAAC,CAAC,KAAK,IAAI,CACb;CAKF,IAAM,MAAM,OAAO;CACnB,IAAI,OAAO,OAAQ,UACjB,MAAU,MACR;EACE,8BAA8B,IAAI;EAClC;EACA;EACA,GAAI,QAAQ,aACR,CACE,kFACA,qFACF,IACA;GACE;GACA;GACA;EACF;EACJ;EACA,yBAAyB;EACzB;EACA;CACF,CAAC,CAAC,KAAK,IAAI,CACb;CAKF,AAAI,OAAO,aAAgB,KAAA,KAEzB,QAAQ,KACN;EACE;EACA;EACA;CACF,CAAC,CAAC,KAAK,IAAI,CACb;AAEJ;;AC1LA,eAAsB,WAAW,SAGS;CACxC,IAAM,EAAC,KAAK,YAAW,SAIjB,aAAa,eAFN,KAAK,QAAQ,OAEQ,CAAI;CAOtC,IALI,CAAC,cAKD,CAAC,WAAW,WAAW,GAAG,GAC5B;CAGF,IAAM,MAAM,MAAM,SAAS,cAAc,UAAU,CAAC,CAAC,SAAS,GAAG,YAAY,GAAG,GAE1E,SAAS,KAAK,WAAW,OAAO,KAAA;CAMtC,OAJI,UAAU,OAAO,UAAW,YAC9B,sBAAsB,MAAM,GAGvB;AACT;;ACjCA,MAAa,6BAAuC;;ACApD,SAAgB,qBAAwB,QAAoD;CAC1F,OAAO;AACT"}
@@ -21,7 +21,7 @@ var __create = Object.create, __defProp = Object.defineProperty, __getOwnPropDes
21
21
  enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
22
22
  });
23
23
  return to;
24
- }, __toESM = (mod, isNodeMode, target) => (target = mod == null ? {} : __create(__getProtoOf(mod)), __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
24
+ }, __toESM = (mod, isNodeMode, target) => (target = mod == null ? {} : __create(__getProtoOf(mod)), __copyProps(isNodeMode || !mod || !mod.__esModule || !__hasOwnProp.call(mod, "default") ? __defProp(target, "default", {
25
25
  value: mod,
26
26
  enumerable: !0
27
27
  }) : target, mod)), __require = /* @__PURE__ */ createRequire(import.meta.url);
@@ -615,4 +615,4 @@ async function initAction(options) {
615
615
  }
616
616
  export { initAction, __exportAll as t };
617
617
 
618
- //# sourceMappingURL=initAction-Cv0oRwWP.js.map
618
+ //# sourceMappingURL=initAction-CmOO8eod.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"initAction-CmOO8eod.js","names":["parseGithubUrl","prettierConfig"],"sources":["../src/node/core/template/createFromTemplate.ts","../src/node/core/template/define.ts","../src/node/isEmptyDirectory.ts","../../../../node_modules/.pnpm/@sanity+prettier-config@3.0.0_prettier@3.9.6/node_modules/@sanity/prettier-config/dist/index.js","../../../../node_modules/.pnpm/parse-github-url@1.0.4/node_modules/parse-github-url/parse-url.js","../../../../node_modules/.pnpm/parse-github-url@1.0.4/node_modules/parse-github-url/index.js","../src/node/templates/default/template.ts","../src/node/init.ts","../src/cli/initAction.ts"],"sourcesContent":["import {writeFile} from 'node:fs/promises'\nimport {dirname, relative, resolve} from 'node:path'\nimport {mkdirp} from 'mkdirp'\nimport prompts from 'prompts'\nimport type {Logger} from '../../logger.ts'\nimport type {PkgTemplate} from './types.ts'\n\nconst promptsTypes = {\n string: 'text' as const,\n}\n\n/** @internal */\nexport async function createFromTemplate(options: {\n cwd: string\n logger: Logger\n packagePath: string\n template: PkgTemplate\n}): Promise<void> {\n const {cwd, logger, packagePath, template: templateOrResolver} = options\n\n const template =\n typeof templateOrResolver === 'function'\n ? await templateOrResolver({cwd, logger, packagePath})\n : templateOrResolver\n\n logger.log('create new package at', relative(cwd, packagePath))\n\n const templateOptions: Record<string, string> = {}\n\n for (const templateOption of template.options) {\n const templateValidate = templateOption.validate\n\n const res = await prompts(\n {\n type: promptsTypes[templateOption.type],\n name: templateOption.name,\n message: templateOption.description,\n validate: templateValidate ? (prev) => templateValidate(prev) : undefined,\n initial:\n typeof templateOption.initial === 'function'\n ? templateOption.initial(templateOptions)\n : templateOption.initial,\n },\n {onCancel: () => process.exit(0)},\n )\n\n templateOptions[templateOption.name] = templateOption.parse\n ? templateOption.parse(res[templateOption.name])\n : res[templateOption.name]\n }\n\n const features: Record<string, boolean> = {}\n\n for (const templateFeature of template.features) {\n const res = templateFeature.optional\n ? await prompts(\n {\n type: 'confirm',\n name: 'confirm',\n message: `use ${templateFeature.name}?`,\n initial: templateFeature.initial,\n },\n {onCancel: () => process.exit(0)},\n )\n : undefined\n\n features[templateFeature.name] = res?.confirm || !templateFeature.optional\n }\n\n const files = await template.getFiles(templateOptions, features)\n\n files.sort((a, b) => {\n return a.name.localeCompare(b.name)\n })\n\n for (const file of files) {\n const filePath = resolve(packagePath, file.name)\n\n await mkdirp(dirname(filePath))\n await writeFile(filePath, file.contents.trim() + '\\n')\n\n logger.success(`wrote ${relative(cwd, filePath)}`)\n }\n}\n","import type {PkgTemplateOption} from './types.ts'\n\n/** @public */\nexport function defineTemplateOption<T>(option: PkgTemplateOption<T>): PkgTemplateOption<T> {\n return option\n}\n","import {readdir} from 'node:fs/promises'\n\nexport async function isEmptyDirectory(dirPath: string): Promise<boolean> {\n return (await readdir(dirPath)).length === 0\n}\n","const overridableDefaults = {\n endOfLine: \"lf\",\n tabWidth: 2,\n useTabs: !1\n}, json5 = {\n files: [\"*.json5\"],\n options: {\n quoteProps: \"preserve\",\n singleQuote: !1\n }\n}, yaml = {\n files: [\"*.yml\"],\n options: {\n singleQuote: !1\n }\n}, config = {\n ...overridableDefaults,\n printWidth: 100,\n semi: !1,\n singleQuote: !0,\n quoteProps: \"consistent\",\n bracketSpacing: !1,\n plugins: [\"prettier-plugin-packagejson\"],\n overrides: [json5, yaml]\n};\nexport {\n config as default\n};\n//# sourceMappingURL=index.js.map\n","'use strict';\n\nvar urlModule = require('url');\nvar URLCtor = typeof URL === 'undefined' ? urlModule.URL || null : URL;\nvar legacyURLParse = URLCtor ? null : urlModule.parse;\n\nfunction parseWHATWG(str) {\n\ttry {\n\t\tvar u = new URLCtor(str);\n\t\tvar auth = null;\n\t\tif (u.username) {\n\t\t\tauth = u.password ? u.username + ':' + u.password : u.username;\n\t\t}\n\t\tvar host = u.host || null;\n\t\tvar hostname = u.hostname || null;\n\t\tvar pathname = u.pathname || null;\n\t\tvar path = u.pathname + (u.search || '') || null;\n\n\t\t// For non-special schemes without '//' (e.g. 'github:user/repo', 'foo:bar'),\n\t\t// the WHATWG URL API produces an opaque path (host is empty). Replicate the\n\t\t// legacy url.parse() behavior: treat the first path segment as the host.\n\t\tif (!host && pathname && str.indexOf('//') === -1) {\n\t\t\tvar slashIdx = pathname.indexOf('/');\n\t\t\tif (slashIdx === -1) {\n\t\t\t\t// e.g. 'foo:bar' — no path segment, only a host-like token → null path\n\t\t\t\thost = pathname;\n\t\t\t\thostname = pathname;\n\t\t\t\tpathname = null;\n\t\t\t\tpath = null;\n\t\t\t} else {\n\t\t\t\t// e.g. 'github:user/repo' — first segment is host, rest is path\n\t\t\t\thost = pathname.slice(0, slashIdx);\n\t\t\t\thostname = host;\n\t\t\t\tpathname = pathname.slice(slashIdx);\n\t\t\t\tpath = pathname + (u.search || '');\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tauth: auth,\n\t\t\thash: u.hash || null,\n\t\t\thost: host,\n\t\t\thostname: hostname,\n\t\t\thref: u.href,\n\t\t\tpath: path,\n\t\t\tpathname: pathname,\n\t\t\tport: u.port || null,\n\t\t\tprotocol: u.protocol || null,\n\t\t\tquery: u.search ? u.search.slice(1) : null,\n\t\t\tsearch: u.search || null,\n\t\t\tslashes: str.indexOf('//') === -1 ? null : true\n\t\t};\n\t} catch (_) {\n\t\t// Fall back for non-standard strings (bare paths, git@ URLs, etc.)\n\t\tvar hashIdx = str.indexOf('#');\n\t\tvar hash = hashIdx === -1 ? null : str.slice(hashIdx);\n\t\tvar pathPart = hashIdx === -1 ? str : str.slice(0, hashIdx);\n\t\tvar queryIdx = pathPart.indexOf('?');\n\t\tvar search = queryIdx === -1 ? null : pathPart.slice(queryIdx);\n\t\tvar pathnamePart = queryIdx === -1 ? pathPart : pathPart.slice(0, queryIdx);\n\t\treturn {\n\t\t\tauth: null,\n\t\t\thash: hash,\n\t\t\thost: null,\n\t\t\thostname: null,\n\t\t\thref: str,\n\t\t\tpath: pathPart || null,\n\t\t\tpathname: pathnamePart || null,\n\t\t\tport: null,\n\t\t\tprotocol: null,\n\t\t\tquery: search ? search.slice(1) : null,\n\t\t\tsearch: search,\n\t\t\tslashes: null\n\t\t};\n\t}\n}\n\nmodule.exports = URLCtor ? parseWHATWG : legacyURLParse;\n","/*!\n * parse-github-url <https://github.com/jonschlinkert/parse-github-url>\n *\n * Copyright (c) 2015-2017, Jon Schlinkert.\n * Released under the MIT License.\n */\n\n'use strict';\n\nvar parseURL = require('./parse-url');\nvar cache = { __proto__: null };\n\nfunction isChecksum(str) {\n\treturn (/^[a-f0-9]{40}$/i).test(str);\n}\n\nfunction getBranch(str, obj) {\n\tvar segs = str.split('#');\n\tvar branch;\n\tif (segs.length > 1) {\n\t\tbranch = segs[segs.length - 1];\n\t}\n\tif (!branch && obj.hash && obj.hash.charAt(0) === '#') {\n\t\tbranch = obj.hash.slice(1);\n\t}\n\treturn branch || 'master';\n}\n\nfunction trimSlash(path) {\n\treturn path.charAt(0) === '/' ? path.slice(1) : path;\n}\n\nfunction name(str) {\n\treturn str ? str.replace(/\\.git$/, '') : null;\n}\n\nfunction owner(str) {\n\tif (!str) {\n\t\treturn null;\n\t}\n\tvar idx = str.indexOf(':');\n\tif (idx > -1) {\n\t\treturn str.slice(idx + 1);\n\t}\n\treturn str;\n}\n\n/**\n * Extract the host from a git@ URL using the WHATWG URL API.\n */\nfunction getGitAtHost(str) {\n\tvar transformed = 'http://' + str.replace(/git@([^:]+):/, '$1/');\n\treturn parseURL(transformed).host || null;\n}\n\nfunction parse(str) {\n\tif (typeof str !== 'string' || !str.length) {\n\t\treturn null;\n\t}\n\n\tif (str.indexOf('git@gist') !== -1 || str.indexOf('//gist') !== -1) {\n\t\treturn null;\n\t}\n\n\t// parse the URL\n\tvar obj = parseURL(str);\n\tif (typeof obj.path !== 'string' || !obj.path.length || typeof obj.pathname !== 'string' || !obj.pathname.length) {\n\t\treturn null;\n\t}\n\n\tif (!obj.host && (/^git@/).test(str) === true) {\n\t\t// return the correct host for git@ URLs\n\t\tobj.host = getGitAtHost(str);\n\t}\n\n\tobj.path = trimSlash(obj.path);\n\tobj.pathname = trimSlash(obj.pathname);\n\tobj.filepath = null;\n\n\tif (obj.path.indexOf('repos') === 0) {\n\t\tobj.path = obj.path.slice(6);\n\t}\n\n\tvar seg = obj.path.split('/').filter(Boolean);\n\tvar hasBlob = seg[2] === 'blob';\n\tif (hasBlob && !isChecksum(seg[3])) {\n\t\tobj.branch = seg[3];\n\t\tif (seg.length > 4) {\n\t\t\tobj.filepath = seg.slice(4).join('/');\n\t\t}\n\t}\n\n\tvar blob = str.indexOf('blob');\n\tif (hasBlob && blob !== -1) {\n\t\tobj.blob = str.slice(blob + 5);\n\t}\n\n\tvar hasTree = seg[2] === 'tree';\n\tvar tree = str.indexOf('tree');\n\tif (hasTree && tree !== -1) {\n\t\tvar idx = tree + 5;\n\t\tvar branch = str.slice(idx);\n\t\tvar slash = branch.indexOf('/');\n\t\tif (slash !== -1) {\n\t\t\tbranch = branch.slice(0, slash);\n\t\t}\n\t\tobj.branch = branch;\n\t}\n\n\tobj.owner = owner(seg[0]);\n\tobj.name = name(seg[1]);\n\n\tif (seg.length > 1 && obj.owner && obj.name) {\n\t\tobj.repo = obj.owner + '/' + obj.name;\n\t} else {\n\t\tvar href = obj.href.split(':');\n\t\tif (href.length === 2 && obj.href.indexOf('//') === -1) {\n\t\t\tobj.repo = obj.repo || href[href.length - 1];\n\t\t\tvar repoSegments = obj.repo.split('/');\n\t\t\tobj.owner = repoSegments[0];\n\t\t\tobj.name = repoSegments[1];\n\n\t\t} else {\n\t\t\tvar match = obj.href.match(/\\/([^/]*)$/);\n\t\t\tobj.owner = match ? match[1] : null;\n\t\t\tobj.repo = null;\n\t\t}\n\n\t\tif (obj.repo && (!obj.owner || !obj.name)) {\n\t\t\tvar segs = obj.repo.split('/');\n\t\t\tif (segs.length === 2) {\n\t\t\t\tobj.owner = segs[0];\n\t\t\t\tobj.name = segs[1];\n\t\t\t}\n\t\t}\n\t}\n\n\tif (!obj.branch) {\n\t\tobj.branch = seg[2] || getBranch(obj.path, obj);\n\t\tif (seg.length > 3) {\n\t\t\tobj.filepath = seg.slice(3).join('/');\n\t\t}\n\t}\n\n\tobj.host = obj.host || 'github.com';\n\tobj.owner = obj.owner || null;\n\tobj.name = obj.name || null;\n\tobj.repository = obj.repo;\n\treturn obj;\n}\n\nmodule.exports = function parseGithubUrl(str) {\n\tif (!cache[str]) {\n\t\tcache[str] = parse(str);\n\t}\n\treturn cache[str];\n};\n","import {execSync} from 'node:child_process'\nimport {resolve} from 'node:path'\nimport type {PackageJSON} from '@sanity/parse-package-json'\nimport prettierConfig from '@sanity/prettier-config'\nimport {getLatestVersion} from 'get-latest-version'\nimport {outdent} from 'outdent'\nimport parseGithubUrl from 'parse-github-url'\nimport {format, type Config as PrettierConfig} from 'prettier'\nimport {isRecord} from '../../core/isRecord.ts'\nimport {defineTemplateOption} from '../../core/template/define.ts'\nimport {type PkgTemplate, type PkgTemplateFile} from '../../core/template/types.ts'\n\nconst RE_NAME = /^(?:@(?:[a-z0-9-*~][a-z0-9-*._~]*)\\/)?[a-z0-9-~][a-z0-9-._~]*$/i\n\nexport const defaultTemplate: PkgTemplate = async ({cwd, logger, packagePath}) => {\n const gitConfig = getGitUserConfig(cwd)\n\n return {\n options: [\n defineTemplateOption<{owner: string; name: string}>({\n name: 'repo',\n type: 'string',\n description: 'git url',\n validate: (v) => {\n if (!v) return true\n\n const result = parseGithubUrl(v)\n\n if (!result?.host || !result.owner || !result.name) {\n return 'invalid git url'\n }\n\n return true\n },\n parse: (v) => {\n if (!v) return null\n\n const result = parseGithubUrl(v)\n\n if (!result?.host || !result.owner || !result.name) {\n throw new Error('invalid git url')\n }\n\n return {source: result.host, owner: result.owner, name: result.name}\n },\n }),\n defineTemplateOption({\n name: 'pkgName',\n type: 'string',\n description: 'package name',\n initial: (options) => options['repo']?.name || undefined,\n validate: (v) => {\n if (!v) return 'package name is required'\n\n const match = RE_NAME.exec(v)\n\n if (!match) {\n return 'invalid package name'\n }\n\n return true\n },\n parse: (v) => {\n if (!v) {\n throw new Error('package name is required')\n }\n\n const match = RE_NAME.exec(v)\n\n if (!match) {\n throw new Error('invalid package name')\n }\n\n const [scope, name] = v.split('/')\n\n return {scope, name, fullName: v}\n },\n }),\n defineTemplateOption({\n name: 'description',\n type: 'string',\n description: 'package description',\n }),\n defineTemplateOption({\n name: 'authorName',\n type: 'string',\n description: 'package author name',\n initial: gitConfig.user,\n }),\n defineTemplateOption({\n name: 'authorEmail',\n type: 'string',\n description: 'package author email',\n initial: gitConfig.email,\n }),\n defineTemplateOption({\n name: 'license',\n type: 'string',\n description: 'package license',\n initial: 'MIT',\n validate: (v) => {\n if (!v) return 'license is required'\n\n return true\n },\n }),\n ],\n\n features: [\n {\n name: 'eslint',\n optional: true,\n initial: true,\n },\n {\n name: 'prettier',\n optional: true,\n initial: true,\n },\n {\n name: 'typescript',\n optional: true,\n initial: true,\n },\n ],\n\n async getFiles(options, features) {\n const {pkgName, repo} = options\n const {fullName: name} = pkgName\n\n const author =\n [options['authorName'], options['authorEmail'] && `<${options['authorEmail']}>`]\n .filter(Boolean)\n .join(' ') ?? undefined\n\n const pkgJson: PackageJSON & {\n prettier?: '@sanity/prettier-config'\n ['lint-staged']?: Record<string, string[]>\n } = {\n name,\n 'version': '0.0.0',\n 'description': options['description'] ?? undefined,\n 'keywords': [],\n 'homepage': undefined,\n 'bugs': undefined,\n 'repository': undefined,\n 'license': options['license'],\n author,\n 'sideEffects': false,\n 'type': 'module',\n 'exports': {\n '.': {\n source: features['typescript'] ? './src/index.ts' : './src/index.js',\n require: './dist/index.cjs',\n default: './dist/index.js',\n },\n './package.json': './package.json',\n },\n 'main': './dist/index.cjs',\n 'module': './dist/index.js',\n 'types': undefined,\n 'files': ['dist', 'src'],\n 'scripts': {\n build: 'pkg build --strict --clean --check',\n format: features['prettier'] ? 'prettier --write --cache --ignore-unknown .' : undefined,\n },\n 'lint-staged': features['prettier']\n ? {\n '*': ['prettier --write --cache --ignore-unknown'],\n }\n : undefined,\n 'browserslist': 'extends @sanity/browserslist-config',\n 'prettier': features['prettier'] ? '@sanity/prettier-config' : undefined,\n 'dependencies': {},\n 'devDependencies': {\n '@sanity/tsconfig': features['typescript'] ? '^1' : undefined,\n '@sanity/pkg-utils': '^9',\n '@sanity/prettier-config': features['prettier'] ? '^1' : undefined,\n '@typescript-eslint/eslint-plugin': undefined,\n '@typescript-eslint/parser': undefined,\n 'eslint': undefined,\n 'eslint-config-prettier': undefined,\n 'eslint-plugin-import': undefined,\n 'eslint-plugin-prettier': undefined,\n 'eslint-plugin-simple-import-sort': undefined,\n 'lint-staged': '^15',\n 'prettier': features['prettier'] ? '^3' : undefined,\n 'typescript': undefined,\n },\n 'engines': {\n node: '>=20.19 <22 || >=22.12',\n },\n }\n\n const files: PkgTemplateFile[] = []\n\n // .editorconfig\n files.push({\n name: '.editorconfig',\n contents: outdent`\n root = true\n\n [*]\n charset = utf-8\n indent_style = space\n indent_size = 2\n end_of_line = lf\n insert_final_newline = true\n trim_trailing_whitespace = true\n `,\n })\n\n // .gitignore\n files.push({\n name: '.gitignore',\n contents: outdent`\n *.local\n *.log\n *.tgz\n\n .DS_Store\n dist\n etc\n node_modules\n `,\n })\n\n if (features['prettier']) {\n files.push({\n name: '.prettierignore',\n contents: outdent`\n dist\n pnpm-lock.yaml\n `,\n })\n }\n\n if (repo) {\n pkgJson.repository = {\n type: 'git',\n url: `git+ssh://git@${repo.source}/${repo.owner}/${repo.name}.git`,\n }\n pkgJson.bugs = {\n url: `https://${repo.source}/${repo.owner}/${repo.name}/issues`,\n }\n pkgJson.homepage = `https://${repo.source}/${repo.owner}/${repo.name}#readme`\n }\n\n if (features['typescript']) {\n pkgJson.types = './dist/index.d.ts'\n\n pkgJson.scripts = {\n ...pkgJson.scripts,\n ['ts:check']: 'tsc --noEmit',\n }\n\n const devDependencies = pkgJson.devDependencies\n\n if (isRecord(devDependencies)) {\n devDependencies['typescript'] = '^5.9'\n }\n }\n\n if (features['eslint']) {\n const eslintConfig: any = {\n root: true,\n env: {\n browser: true,\n es6: true,\n node: true,\n },\n extends: [\n 'eslint:recommended',\n features['prettier'] ? 'plugin:prettier/recommended' : undefined,\n ].filter(Boolean),\n parserOptions: {\n ecmaVersion: 2020,\n sourceType: 'module',\n },\n plugins: [\n 'import',\n 'simple-import-sort',\n features['prettier'] ? 'prettier' : undefined,\n ].filter(Boolean),\n rules: {\n 'no-console': 'error',\n 'no-shadow': 'error',\n 'no-warning-comments': ['warn', {location: 'start', terms: ['todo', 'fixme']}],\n 'quote-props': ['warn', 'consistent-as-needed'],\n 'simple-import-sort/exports': 'warn',\n 'simple-import-sort/imports': 'warn',\n 'strict': ['warn', 'global'],\n },\n }\n\n files.push({\n name: '.eslintignore',\n contents: outdent`\n dist\n `,\n })\n\n pkgJson.scripts = {\n ...pkgJson.scripts,\n lint: features['typescript']\n ? 'eslint . --ext .cjs,.js,.ts,.tsx'\n : 'eslint . --ext .cjs,.js',\n }\n\n pkgJson.devDependencies = {\n ...pkgJson.devDependencies,\n 'eslint': '^8',\n 'eslint-config-prettier': features['prettier'] ? '^9' : undefined,\n 'eslint-plugin-import': '^2',\n 'eslint-plugin-prettier': features['prettier'] ? '^5' : undefined,\n 'eslint-plugin-simple-import-sort': '^12',\n }\n\n if (features['typescript']) {\n pkgJson.devDependencies = {\n ...pkgJson.devDependencies,\n '@typescript-eslint/eslint-plugin': '^7',\n '@typescript-eslint/parser': '^7',\n }\n\n const eslintConfigOverride: any = {\n files: ['**/*.ts', '**/*.tsx'],\n parser: '@typescript-eslint/parser',\n parserOptions: {\n project: ['./tsconfig.json'],\n },\n extends: [\n 'eslint:recommended',\n features['prettier'] ? 'plugin:prettier/recommended' : undefined,\n 'plugin:@typescript-eslint/eslint-recommended',\n 'plugin:@typescript-eslint/recommended',\n ].filter(Boolean),\n plugins: [\n 'import',\n '@typescript-eslint',\n 'simple-import-sort',\n features['prettier'] ? 'prettier' : undefined,\n ].filter(Boolean),\n rules: {\n '@typescript-eslint/explicit-module-boundary-types': 'error',\n '@typescript-eslint/interface-name-prefix': 'off',\n '@typescript-eslint/member-delimiter-style': 'off',\n '@typescript-eslint/no-empty-interface': 'off',\n },\n }\n\n eslintConfig.overrides = [eslintConfigOverride]\n }\n\n files.push({\n name: '.eslintrc.cjs',\n contents: await prettierFormat(\n resolve(packagePath, '.eslintrc.cjs'),\n outdent`\n 'use strict'\n\n /** @type import('eslint').Linter.Config */\n module.exports = ${JSON.stringify(eslintConfig, null, 2)}\n `,\n prettierConfig,\n ),\n })\n }\n\n if (features['typescript']) {\n files.push({\n name: 'tsconfig.settings.json',\n contents: await prettierFormat(\n resolve(packagePath, 'tsconfig.settings.json'),\n outdent`\n {\n \"extends\": \"@sanity/tsconfig/strictest\",\n \"compilerOptions\": {\n \"rootDir\": \".\",\n \"outDir\": \"./dist\"\n }\n }\n `,\n prettierConfig,\n ),\n })\n\n files.push({\n name: 'tsconfig.dist.json',\n contents: await prettierFormat(\n resolve(packagePath, 'tsconfig.dist.json'),\n outdent`\n {\n \"extends\": \"./tsconfig.settings\",\n \"include\": [\"./src\"],\n \"exclude\": [\"./src/**/*.test.ts\"]\n }\n `,\n prettierConfig,\n ),\n })\n\n files.push({\n name: 'tsconfig.json',\n contents: await prettierFormat(\n resolve(packagePath, 'tsconfig.json'),\n outdent`\n {\n \"extends\": \"./tsconfig.settings\",\n \"include\": [\"./**/*.cjs\", \"./**/*.ts\", \"./**/*.tsx\"],\n \"exclude\": [\"./node_modules\"]\n }\n `,\n prettierConfig,\n ),\n })\n }\n\n // source file\n if (features['typescript']) {\n files.push({\n name: 'package.config.ts',\n contents: await prettierFormat(\n resolve(packagePath, 'package.config.ts'),\n outdent`\n import {defineConfig} from '@sanity/pkg-utils'\n\n // https://github.com/sanity-io/pkg-utils#configuration\n export default defineConfig({\n // the path to the tsconfig file for distributed builds\n tsconfig: 'tsconfig.dist.json',\n })\n `,\n prettierConfig,\n ),\n })\n\n files.push({\n name: 'src/index.ts',\n contents: await prettierFormat(\n resolve(packagePath, 'src/index.ts'),\n outdent`\n /** @public */\n export function main(): void {\n //\n }\n `,\n prettierConfig,\n ),\n })\n } else {\n files.push({\n name: 'package.config.js',\n contents: await prettierFormat(\n resolve(packagePath, 'package.config.js'),\n outdent`\n import {defineConfig} from '@sanity/pkg-utils'\n\n export default defineConfig({\n extract: {\n rules: {\n // do not require internal members to be prefixed with \\`_\\`\n 'ae-internal-missing-underscore': 'off',\n },\n },\n })\n `,\n prettierConfig,\n ),\n })\n\n files.push({\n name: 'src/index.js',\n contents: await prettierFormat(\n resolve(packagePath, 'src/index.js'),\n outdent`\n /** @public */\n export function main() {\n //\n }\n `,\n prettierConfig,\n ),\n })\n }\n\n // Resolve latest dependencies\n try {\n pkgJson.dependencies = await resolveLatestDeps(pkgJson.dependencies ?? {})\n } catch (error) {\n logger.warn(error instanceof Error ? error.message : error)\n }\n\n // Resolve latest devDependencies\n try {\n pkgJson.devDependencies = await resolveLatestDeps(pkgJson.devDependencies ?? {})\n } catch (error) {\n logger.warn(error instanceof Error ? error.message : error)\n }\n\n files.push({\n name: 'package.json',\n contents: await prettierFormat(\n resolve(packagePath, 'package.json'),\n JSON.stringify(pkgJson, null, 2),\n prettierConfig,\n ),\n })\n\n return files\n },\n }\n}\n\nfunction prettierFormat(\n filepath: string,\n input: string,\n prettierOptions: PrettierConfig | undefined,\n) {\n return format(input, {...prettierOptions, plugins: [], filepath})\n}\n\nasync function resolveLatestDeps(deps: Record<string, string | undefined>) {\n const depsEntries = Object.entries(deps)\n const latestDeps: Record<string, string> = {}\n\n for (const entry of depsEntries) {\n const [name, version] = entry\n\n if (version) {\n const latestVersion = await getLatestVersion(name, {range: version})\n\n latestDeps[name] = latestVersion ? `^${latestVersion}` : version\n }\n }\n\n return latestDeps\n}\n\nfunction getGitUserConfig(cwd: string): {user: string | undefined; email: string | undefined} {\n let user: string | undefined\n let email: string | undefined\n\n try {\n user = execSync('git config user.name', {encoding: 'utf8', cwd}).trim() || undefined\n email = execSync('git config user.email', {encoding: 'utf8', cwd}).trim() || undefined\n } catch {\n /* ignore */\n }\n\n return {user, email}\n}\n","import {lstat} from 'node:fs/promises'\nimport {resolve} from 'node:path'\nimport {mkdirp} from 'mkdirp'\nimport {createFromTemplate} from './core/template/index.ts'\nimport {fileExists} from './fileExists.ts'\nimport {isEmptyDirectory} from './isEmptyDirectory.ts'\nimport {createLogger} from './logger.ts'\nimport {defaultTemplate} from './templates/default/template.ts'\n\n/** @public */\nexport async function init(options: {cwd: string; path: string}): Promise<void> {\n if (!options.cwd) {\n throw new Error('Missing required option: cwd')\n }\n\n if (!options.path) {\n throw new Error('Missing required option: path')\n }\n\n const logger = createLogger()\n\n const packagePath = resolve(options.cwd, options.path)\n\n await ensurePackagePath(packagePath)\n\n await createFromTemplate({\n cwd: options.cwd,\n logger,\n template: defaultTemplate,\n packagePath,\n })\n}\n\nasync function ensurePackagePath(packagePath: string): Promise<void> {\n const exists = fileExists(packagePath)\n\n if (!exists) {\n await mkdirp(packagePath)\n\n return\n }\n\n const dir = (await lstat(packagePath)).isDirectory()\n\n if (!dir) {\n throw new Error('the package path is a file, not a directory')\n }\n\n const empty = await isEmptyDirectory(packagePath)\n\n if (!empty) {\n throw new Error('the package directory is not empty')\n }\n}\n","import {init} from '../node/init.ts'\nimport {handleError} from './handleError.ts'\n\nexport async function initAction(options: {path: string}): Promise<void> {\n try {\n await init({\n cwd: process.cwd(),\n path: options.path,\n })\n } catch (err) {\n handleError(err)\n }\n}\n"],"x_google_ignoreList":[3,4,5],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { i as fileExists, r as isRecord } from "./handleError-83GwKIFM.js";
2
- import { t as __exportAll } from "./initAction-Cv0oRwWP.js";
2
+ import { t as __exportAll } from "./initAction-CmOO8eod.js";
3
3
  import { existsSync } from "node:fs";
4
4
  import path, { resolve } from "node:path";
5
5
  import { pathToFileURL } from "node:url";
@@ -706,8 +706,9 @@ function transformPackageName(packageName) {
706
706
  if (packageName.startsWith("@")) {
707
707
  let [scope, name] = packageName.split("/");
708
708
  return `@types/${scope?.slice(1)}__${name}`;
709
- } else return `@types/${packageName}`;
709
+ }
710
+ return `@types/${packageName}`;
710
711
  }
711
712
  export { loadPkgWithReporting as a, pkgExtMap as i, strict_exports as n, loadConfig as o, fileEnding as r, resolveBuildContext as t };
712
713
 
713
- //# sourceMappingURL=resolveBuildContext-CwqbTV6p.js.map
714
+ //# sourceMappingURL=resolveBuildContext-CbwvYKj1.js.map