@sanity/pkg-utils 12.0.0 → 12.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/MIGRATE.md +26 -25
  2. package/README.md +66 -7
  3. package/dist/{buildAction-DFrmHzYY.js → buildAction-BzyCXuxp.js} +18 -14
  4. package/dist/buildAction-BzyCXuxp.js.map +1 -0
  5. package/dist/{checkAction-BMxszLZS.js → checkAction--wB2oNGm.js} +51 -45
  6. package/dist/checkAction--wB2oNGm.js.map +1 -0
  7. package/dist/cli.js +6 -6
  8. package/dist/index.d.ts +40 -26
  9. package/dist/index.d.ts.map +1 -1
  10. package/dist/index.js +12 -1
  11. package/dist/index.js.map +1 -1
  12. package/dist/{initAction-Cv0oRwWP.js → initAction-CmOO8eod.js} +2 -2
  13. package/dist/initAction-CmOO8eod.js.map +1 -0
  14. package/dist/{resolveBuildContext-CwqbTV6p.js → resolveBuildContext-clvZ-QQy.js} +33 -9
  15. package/dist/resolveBuildContext-clvZ-QQy.js.map +1 -0
  16. package/dist/{resolveTsdownConfig-2OdGF-dM.js → resolveTsdownConfig-fBDvhjvu.js} +182 -26
  17. package/dist/resolveTsdownConfig-fBDvhjvu.js.map +1 -0
  18. package/dist/watchAction-CEADXNwO.js +117 -0
  19. package/dist/watchAction-CEADXNwO.js.map +1 -0
  20. package/dist/writeBundleCssExports-8AIeBdCf.js +64 -0
  21. package/dist/writeBundleCssExports-8AIeBdCf.js.map +1 -0
  22. package/package.json +9 -8
  23. package/dist/buildAction-DFrmHzYY.js.map +0 -1
  24. package/dist/checkAction-BMxszLZS.js.map +0 -1
  25. package/dist/createApiExtractorConfig-CJoZqw8e.js +0 -30
  26. package/dist/createApiExtractorConfig-CJoZqw8e.js.map +0 -1
  27. package/dist/createTSDocConfig-CwaWneTR.js +0 -25
  28. package/dist/createTSDocConfig-CwaWneTR.js.map +0 -1
  29. package/dist/getExtractMessagesConfig-CXljwFbQ.js +0 -75
  30. package/dist/getExtractMessagesConfig-CXljwFbQ.js.map +0 -1
  31. package/dist/initAction-Cv0oRwWP.js.map +0 -1
  32. package/dist/printExtractMessages-DyaYtByp.js +0 -33
  33. package/dist/printExtractMessages-DyaYtByp.js.map +0 -1
  34. package/dist/resolveBuildContext-CwqbTV6p.js.map +0 -1
  35. package/dist/resolveTsdownConfig-2OdGF-dM.js.map +0 -1
  36. package/dist/watchAction-uRPAvgLE.js +0 -179
  37. package/dist/watchAction-uRPAvgLE.js.map +0 -1
package/MIGRATE.md CHANGED
@@ -9,28 +9,29 @@ stops with an error that contains these same migration instructions (skipped whe
9
9
 
10
10
  ## TL;DR
11
11
 
12
- | v11 | v12 |
13
- | ----------------------------------- | ------------------------------------------------------------------- |
14
- | `dts: 'rolldown'` | delete it (it's the default now) |
15
- | `dts: 'api-extractor'` | delete it (types come from tsdown) |
16
- | `tsgo: true` | `dts: {tsgo: true}` |
17
- | `babel: {reactCompiler: true}` | `reactCompiler: true` |
18
- | `reactCompilerOptions: {...}` | `reactCompiler: {...}` |
19
- | `babel: {styledComponents: true}` | `styledComponents: true` |
20
- | `babel: {plugins: [...]}` | `plugins` + [`@rolldown/plugin-babel`](#custom-babel-plugins) |
21
- | `rollup: {vanillaExtract: true}` | `vanillaExtract: true` |
22
- | `rollup: {plugins: [...]}` | `plugins: [...]` |
23
- | `rollup: {optimizeLodash: ...}` | removed — see [lodash](#lodash) |
24
- | `extract: {enabled: false}` | `tsdoc: false` |
25
- | `extract: {rules, customTags}` | `tsdoc: {rules, customTags}` |
26
- | `extract: {bundledPackages: [...]}` | `deps: {alwaysBundle: [...]}` — see [type inlining](#type-inlining) |
27
- | `external: [...]` | `deps: {neverBundle: [...]}` (deprecated, still works) |
28
- | `external: (prev) => prev.filter()` | `deps: {alwaysBundle: [...]}` (deprecated, still works) |
29
- | `jsx`, `jsxFactory`, … | `tsconfig.json` `compilerOptions.jsx` and friends |
30
- | `process.env.PKG_FORMAT` | [`package.json#imports` conditions](#pkg_format-and-pkg_runtime) |
31
- | `process.env.PKG_RUNTIME` | [`package.json#imports` conditions](#pkg_format-and-pkg_runtime) |
32
- | `process.env.PKG_FILE_PATH` | [`import.meta.url`](#pkg_file_path) |
33
- | `pkg build --clean` | delete it (cleaning is on by default; `--no-clean` skips it) |
12
+ | v11 | v12 |
13
+ | ---------------------------------------------- | --------------------------------------------------------------------------------------- |
14
+ | `dts: 'rolldown'` | delete it (it's the default now) |
15
+ | `dts: 'api-extractor'` | delete it (types come from tsdown) |
16
+ | `tsgo: true` | `dts: {tsgo: true}` |
17
+ | `babel: {reactCompiler: true}` | `reactCompiler: true` |
18
+ | `reactCompilerOptions: {...}` | `reactCompiler: {...}` |
19
+ | `babel: {styledComponents: true}` | `styledComponents: true` |
20
+ | `babel: {plugins: [...]}` | `plugins` + [`@rolldown/plugin-babel`](#custom-babel-plugins) |
21
+ | `rollup: {vanillaExtract: true}` | `vanillaExtract: true` |
22
+ | `vanillaExtract: {inject: {nodeCompat: true}}` | `vanillaExtract: {inject: true, exports: {nodeCompat: true}}` (deprecated, still works) |
23
+ | `rollup: {plugins: [...]}` | `plugins: [...]` |
24
+ | `rollup: {optimizeLodash: ...}` | removed — see [lodash](#lodash) |
25
+ | `extract: {enabled: false}` | `tsdoc: false` |
26
+ | `extract: {rules, customTags}` | `tsdoc: {rules, customTags}` |
27
+ | `extract: {bundledPackages: [...]}` | `deps: {alwaysBundle: [...]}` see [type inlining](#type-inlining) |
28
+ | `external: [...]` | `deps: {neverBundle: [...]}` (deprecated, still works) |
29
+ | `external: (prev) => prev.filter()` | `deps: {alwaysBundle: [...]}` (deprecated, still works) |
30
+ | `jsx`, `jsxFactory`, … | `tsconfig.json` `compilerOptions.jsx` and friends |
31
+ | `process.env.PKG_FORMAT` | [`package.json#imports` conditions](#pkg_format-and-pkg_runtime) |
32
+ | `process.env.PKG_RUNTIME` | [`package.json#imports` conditions](#pkg_format-and-pkg_runtime) |
33
+ | `process.env.PKG_FILE_PATH` | [`import.meta.url`](#pkg_file_path) |
34
+ | `pkg build --clean` | delete it (cleaning is on by default; `--no-clean` skips it) |
34
35
 
35
36
  Other behavior changes:
36
37
 
@@ -41,9 +42,9 @@ Other behavior changes:
41
42
  - **`pkg check` runs [publint](https://publint.dev)** on the packed package (with
42
43
  `publishConfig` applied) instead of the esbuild resolution checks. Fix what it reports — it
43
44
  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.
45
+ - **Builds keep `exports` in sync**: the map is regenerated from the build (with the
46
+ `source`-condition development pattern and a `source`-less `publishConfig.exports`), including
47
+ in CI — so environments that set `CI=true` without meaning "skip package.json" still behave.
47
48
  - `tsdown.config.*` files are **never** loaded by `pkg build` — `package.config.ts` is the only
48
49
  config source. For customization beyond the config surface, use `tsdown` +
49
50
  `@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
 
@@ -206,11 +210,12 @@ The path to the TypeScript configuration file.
206
210
 
207
211
  #### `tsdoc`
208
212
 
209
- - Type: `false | {customTags?: TSDocCustomTag[]; rules?: {...}}`
210
- - Default: `undefined` (enabled)
213
+ - Type: `boolean | PackageTsdocOptions`
214
+ - Default: `true`
211
215
 
212
- Runs [API Extractor](https://api-extractor.com/) during `pkg check` to check that TSDoc tags are
213
- valid and release tags are correct. Set `tsdoc: false` to disable it.
216
+ Runs [API Extractor](https://api-extractor.com/) during `pkg build` and again during
217
+ `pkg check` to check that TSDoc tags are valid and release tags are correct. Set
218
+ `tsdoc: false` to disable it.
214
219
 
215
220
  #### `vanillaExtract`
216
221
 
@@ -222,6 +227,60 @@ Extracts the CSS from [vanilla-extract](https://vanilla-extract.style) `.css.ts`
222
227
  `import "<pkg>/bundle.css"`, emits a no-op `bundle-css.js` shim for runtimes that cannot import
223
228
  `.css` files, and writes the conditional `"./bundle.css"` export to `package.json`.
224
229
 
230
+ #### `css`
231
+
232
+ - Type: `PackageCssOptions`
233
+ - Default: `undefined`
234
+
235
+ Enables the [`@tsdown/css`](https://www.npmjs.com/package/@tsdown/css) pipeline (install it
236
+ first — it is an optional peer dependency) for plain CSS, CSS modules, preprocessors, and
237
+ Lightning CSS / PostCSS. The emitted CSS gets the same minify and lowering settings as
238
+ [`vanillaExtract`](#vanillaextract), and the same conditional CSS export treatment: the
239
+ self-referential `import "<pkg>/style.css"`, a no-op `style-css.js` shim with its
240
+ `style-css.d.ts` declaration, and the conditional `"./style.css"` export written to
241
+ `package.json`.
242
+
243
+ ### Shipping a stylesheet as its own export subpath
244
+
245
+ A package can also publish a stylesheet directly, without any JS importing it. Declare a `.css`
246
+ export subpath with a `source` and nothing else:
247
+
248
+ ```json
249
+ {
250
+ "exports": {
251
+ ".": {"source": "./src/index.ts", "default": "./dist/index.js"},
252
+ "./ui/styles.css": {"source": "./src/ui/styles.css"},
253
+ "./package.json": "./package.json"
254
+ }
255
+ }
256
+ ```
257
+
258
+ `pkg build` compiles `./src/ui/styles.css` to `dist/ui/styles.css` — the emitted path follows the
259
+ export subpath — and fills in the rest of the conditions:
260
+
261
+ ```json
262
+ "./ui/styles.css": {
263
+ "source": "./src/ui/styles.css",
264
+ "types": "./dist/ui/styles-css.d.ts",
265
+ "browser": "./dist/ui/styles.css",
266
+ "style": "./dist/ui/styles.css",
267
+ "node": "./dist/ui/styles-css.js",
268
+ "default": "./dist/ui/styles-css.js"
269
+ }
270
+ ```
271
+
272
+ Consumers then `import "<pkg>/ui/styles.css"`, which resolves to the stylesheet in bundlers and
273
+ browsers, and to the no-op shim in Node and similar runtimes. This turns on the `@tsdown/css`
274
+ pipeline automatically; set [`css`](#css) explicitly to customize it.
275
+
276
+ Add the CSS to `sideEffects` in `package.json` so it survives tree-shaking in consumers:
277
+
278
+ ```json
279
+ {
280
+ "sideEffects": ["*.css"]
281
+ }
282
+ ```
283
+
225
284
  ## Migrating to v12
226
285
 
227
286
  v12 replaced the rollup/rolldown build stack with `tsdown` + `@sanity/tsdown-config`. Most
@@ -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-clvZ-QQy.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 { r as resolveTsdownBuilds, t as resolveTsdownConfig } from "./resolveTsdownConfig-fBDvhjvu.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,30 +32,30 @@ 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-clvZ-QQy.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;
57
57
  let bundles = await build(inlineConfig);
58
- ctx.emitDeclarationOnly && removeNonDeclarationOutputs(bundles), buildDef.canonical && restoreAuthoredTypes(ctx), spinner.complete(), ctx.logger.log(), printBuildOutputs(ctx, bundles), ctx.logger.log();
58
+ ctx.emitDeclarationOnly && removeNonDeclarationOutputs(bundles), buildDef.canonical && restoreAuthoredTypes(ctx), spinner.complete(), ctx.logger.log(), printBuildOutputs(ctx, bundles, buildDef), ctx.logger.log();
59
59
  } catch (err) {
60
60
  if (spinner.error(), err instanceof Error) {
61
61
  let RE_CWD = new RegExp(escapeRegExp(cwd), "g");
@@ -78,8 +78,12 @@ function removeNonDeclarationOutputs(bundles) {
78
78
  * Prints `<pkg>: <source> → <output>` for every entry chunk (JS and `.d.ts`) that tsdown
79
79
  * emitted, mirroring the per-file output of previous majors.
80
80
  */
81
- function printBuildOutputs(ctx, bundles) {
81
+ function printBuildOutputs(ctx, bundles, buildDef) {
82
82
  let { cwd, logger, pkg } = ctx, lines = /* @__PURE__ */ new Set();
83
+ if (buildDef.css) for (let entry of buildDef.entries) {
84
+ let output = `./${path.relative(cwd, path.join(ctx.distPath, `${entry.alias}.css`)).replaceAll("\\", "/")}`;
85
+ lines.add(`${pkg.name}: ./${path.relative(cwd, path.resolve(cwd, entry.source)).replaceAll("\\", "/")} \u2192 ${output}`);
86
+ }
83
87
  for (let bundle of bundles) for (let chunk of bundle.chunks) {
84
88
  if (chunk.type !== "chunk" || !chunk.isEntry || !chunk.facadeModuleId || ctx.emitDeclarationOnly && !RE_DTS_OUTPUT.test(chunk.fileName)) continue;
85
89
  let source = `./${path.relative(cwd, chunk.facadeModuleId).replaceAll("\\", "/").replace(/\.d\.([mc]?)ts$/, ".$1ts")}`, output = `./${path.relative(cwd, path.join(chunk.outDir, chunk.fileName)).replaceAll("\\", "/")}`;
@@ -143,4 +147,4 @@ async function buildAction(options) {
143
147
  }
144
148
  export { buildAction };
145
149
 
146
- //# sourceMappingURL=buildAction-DFrmHzYY.js.map
150
+ //# sourceMappingURL=buildAction-BzyCXuxp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buildAction-BzyCXuxp.js","names":["build","findPkgPath","tsdownBuild","build"],"sources":["../src/node/build.ts","../src/cli/buildAction.ts"],"sourcesContent":["import {existsSync, readFileSync, rmSync, writeFileSync} from 'node:fs'\nimport path from 'node:path'\nimport {up as findPkgPath} from 'empathic/package'\nimport {build as tsdownBuild, type TsdownBundle} from 'tsdown'\nimport {loadConfig} from './core/config/loadConfig.ts'\nimport {isRecord} from './core/isRecord.ts'\nimport {loadPkgWithReporting} from './core/pkg/loadPkgWithReporting.ts'\nimport {createLogger, type Logger} from './logger.ts'\nimport {resolveBuildContext} from './resolveBuildContext.ts'\nimport {createSpinner} from './spinner.ts'\nimport {\n resolveTsdownBuilds,\n type TsdownBuild as TsdownBuildDef,\n} from './tasks/tsdown/resolveTsdownBuilds.ts'\nimport {resolveTsdownConfig} from './tasks/tsdown/resolveTsdownConfig.ts'\n\nconst RE_TS_SOURCE = /\\.[cm]?tsx?$/\n\n/**\n * Build the distribution files of a npm package.\n *\n * @example\n * ```ts\n * import {build} from '@sanity/pkg-utils'\n *\n * build({\n * cwd: process.cwd(),\n * tsconfig: 'tsconfig.dist.json,\n * }).then(() => {\n * console.log('successfully built')\n * }).catch((err) => {\n * console.log(`build error: ${err.message}`)\n * })\n * ```\n *\n * @public\n */\nexport async function build(options: {\n cwd: string\n emitDeclarationOnly?: boolean\n strict?: boolean\n tsconfig?: string\n clean?: boolean\n quiet?: boolean\n}): Promise<void> {\n const {\n cwd,\n emitDeclarationOnly,\n strict = false,\n tsconfig: tsconfigOption,\n // `--no-clean` skips cleaning for this run; `true` (the CLI default — `--clean` still\n // parses as a no-op for v11 compatibility) defers to the `clean` config option\n clean = true,\n quiet = false,\n } = options\n const logger = createLogger(quiet)\n\n const pkgPath = findPkgPath({cwd})\n if (!pkgPath) {\n throw new Error('no package.json found', {cause: {cwd}})\n }\n const config = await loadConfig({cwd, pkgPath})\n\n const {parseStrictOptions} = await import('./strict.ts')\n const strictOptions = parseStrictOptions(config?.strictOptions ?? {})\n const pkg = await loadPkgWithReporting({pkgPath, logger, strict, strictOptions})\n\n const tsconfig = tsconfigOption || config?.tsconfig || 'tsconfig.json'\n\n const ctx = await resolveBuildContext({\n config,\n cwd,\n emitDeclarationOnly,\n logger,\n pkg,\n strict,\n tsconfig,\n })\n\n warnAboutTsdownConfigFiles(cwd, logger)\n\n const builds = resolveTsdownBuilds(ctx)\n\n let first = true\n for (const buildDef of builds) {\n // A types-only run skips builds without TypeScript sources entirely\n if (\n ctx.emitDeclarationOnly &&\n !buildDef.entries.some((entry) => RE_TS_SOURCE.test(entry.source))\n ) {\n continue\n }\n\n const taskName = buildTaskName(buildDef)\n const spinner = createSpinner(taskName, quiet)\n\n try {\n const inlineConfig = await resolveTsdownConfig(ctx, buildDef, {clean: first && clean})\n first = false\n\n const bundles = await tsdownBuild(inlineConfig)\n\n if (ctx.emitDeclarationOnly) {\n // `dts.emitDtsOnly` suppresses the JS chunks of the ES pass, but the CJS pass emits\n // its JS regardless (only its extra dts pass runs the dts plugin) — a types-only\n // build removes everything that is not a declaration file\n removeNonDeclarationOutputs(bundles)\n }\n\n if (buildDef.canonical) {\n restoreAuthoredTypes(ctx)\n }\n\n spinner.complete()\n ctx.logger.log()\n\n printBuildOutputs(ctx, bundles, buildDef)\n ctx.logger.log()\n } catch (err) {\n spinner.error()\n\n if (err instanceof Error) {\n const RE_CWD = new RegExp(escapeRegExp(cwd), 'g')\n\n ctx.logger.error((err.stack || err.message).replace(RE_CWD, '.'))\n ctx.logger.log()\n }\n\n process.exit(1)\n }\n }\n}\n\nfunction buildTaskName(buildDef: TsdownBuildDef): string {\n const formats = Array.from(new Set(buildDef.entries.flatMap((entry) => entry.formats)))\n return `build ${buildDef.key} (${formats.join(', ') || 'types'})`\n}\n\nconst RE_DTS_OUTPUT = /\\.d\\.[mc]?ts(\\.map)?$/\n\n/** Removes every emitted file that is not a declaration file (or its sourcemap). */\nfunction removeNonDeclarationOutputs(bundles: TsdownBundle[]): void {\n for (const bundle of bundles) {\n for (const chunk of bundle.chunks) {\n if (RE_DTS_OUTPUT.test(chunk.fileName)) continue\n rmSync(path.join(chunk.outDir, chunk.fileName), {force: true})\n rmSync(path.join(chunk.outDir, `${chunk.fileName}.map`), {force: true})\n }\n }\n}\n\n/**\n * Prints `<pkg>: <source> → <output>` for every entry chunk (JS and `.d.ts`) that tsdown\n * emitted, mirroring the per-file output of previous majors.\n */\nfunction printBuildOutputs(\n ctx: {\n cwd: string\n distPath: string\n emitDeclarationOnly: boolean\n logger: Logger\n pkg: {name: string}\n },\n bundles: TsdownBundle[],\n buildDef: TsdownBuildDef,\n): void {\n const {cwd, logger, pkg} = ctx\n const lines = new Set<string>()\n\n // Stylesheets are emitted as assets, which carry no `facadeModuleId` back to their source,\n // so the stylesheet build's lines come from its entry map instead.\n if (buildDef.css) {\n for (const entry of buildDef.entries) {\n const output = `./${path\n .relative(cwd, path.join(ctx.distPath, `${entry.alias}.css`))\n .replaceAll('\\\\', '/')}`\n lines.add(\n `${pkg.name}: ./${path.relative(cwd, path.resolve(cwd, entry.source)).replaceAll('\\\\', '/')} \\u2192 ${output}`,\n )\n }\n }\n\n for (const bundle of bundles) {\n for (const chunk of bundle.chunks) {\n if (chunk.type !== 'chunk' || !chunk.isEntry || !chunk.facadeModuleId) continue\n if (ctx.emitDeclarationOnly && !RE_DTS_OUTPUT.test(chunk.fileName)) continue\n const source = `./${path\n .relative(cwd, chunk.facadeModuleId)\n .replaceAll('\\\\', '/')\n // the dts chunks facade the fake `.d.ts` module ids of rolldown-plugin-dts; print the\n // actual `.ts` source instead\n .replace(/\\.d\\.([mc]?)ts$/, '.$1ts')}`\n const output = `./${path\n .relative(cwd, path.join(chunk.outDir, chunk.fileName))\n .replaceAll('\\\\', '/')}`\n lines.add(`${pkg.name}: ${source} \\u2192 ${output}`)\n }\n }\n\n for (const line of Array.from(lines).toSorted()) {\n logger.log(line)\n }\n}\n\n/**\n * tsdown's exports generation rewrites the top-level `types` field alongside `main`/`module`\n * when the `legacy` fields are maintained, preferring the CJS declarations (`.d.cts`) for\n * dual-format packages. The hand-written value is authoritative here (the Sanity convention\n * points `types` at the ESM `.d.ts`), so it is restored after the canonical build.\n */\nfunction restoreAuthoredTypes(ctx: {cwd: string; pkg: {types?: string | undefined}}): void {\n const authoredTypes = ctx.pkg.types\n if (!authoredTypes) return\n\n const pkgPath = path.resolve(ctx.cwd, 'package.json')\n let text: string\n try {\n text = readFileSync(pkgPath, 'utf8')\n } catch {\n return\n }\n const json: unknown = JSON.parse(text)\n if (!isRecord(json) || json['types'] === authoredTypes) return\n json['types'] = authoredTypes\n\n const indent = /^([ \\t]+)\\S/m.exec(text)?.[1] ?? 2\n let output = JSON.stringify(json, null, indent)\n if (text.endsWith('\\n')) output += '\\n'\n writeFileSync(pkgPath, output, 'utf8')\n}\n\n/**\n * pkg-utils owns its own experience: `tsdown.config.*` files are never loaded in pkg-utils\n * mode (`package.config.ts` is the sole config source), so their presence is worth a warning.\n */\nfunction warnAboutTsdownConfigFiles(cwd: string, logger: Logger): void {\n const candidates = [\n 'tsdown.config.ts',\n 'tsdown.config.mts',\n 'tsdown.config.cts',\n 'tsdown.config.js',\n 'tsdown.config.mjs',\n 'tsdown.config.cjs',\n 'tsdown.config.json',\n ]\n const found = candidates.find((candidate) => existsSync(path.resolve(cwd, candidate)))\n if (found) {\n logger.warn(\n `found \\`${found}\\`, which @sanity/pkg-utils does not load — \\`package.config.ts\\` is the only config source of \\`pkg build\\`. Either migrate the package fully to tsdown (and drop @sanity/pkg-utils), or move the configuration into \\`package.config.ts\\`.`,\n )\n }\n}\n\nfunction escapeRegExp(value: string): string {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')\n}\n","import {build} from '../node/build.ts'\nimport {handleError} from './handleError.ts'\n\nexport async function buildAction(options: {\n emitDeclarationOnly?: boolean\n strict?: boolean\n tsconfig?: string\n clean?: boolean\n quiet?: boolean\n}): Promise<void> {\n try {\n await build({\n cwd: process.cwd(),\n emitDeclarationOnly: options.emitDeclarationOnly,\n strict: options.strict,\n tsconfig: options.tsconfig,\n clean: options.clean,\n quiet: options.quiet,\n })\n } catch (err) {\n handleError(err)\n }\n}\n"],"mappings":"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"}
@@ -1,14 +1,16 @@
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-clvZ-QQy.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";
6
6
  import { up } from "empathic/package";
7
7
  import chalk from "chalk";
8
+ import { checkTsdoc } from "@sanity/tsdown-config/tsdoc";
8
9
  import treeify from "treeify";
9
10
  import prettyBytes from "pretty-bytes";
10
11
  function getFilesize(file) {
11
- return prettyBytes(statSync(file).size);
12
+ let stats = statSync(file);
13
+ return prettyBytes(stats.size);
12
14
  }
13
15
  function getFileInfo(cwd, filePath) {
14
16
  let p = path.resolve(cwd, filePath), exists = fileExists(p);
@@ -48,18 +50,18 @@ async function check(options) {
48
50
  let config = await loadConfig({
49
51
  cwd,
50
52
  pkgPath
51
- }), { parseStrictOptions } = await import("./resolveBuildContext-CwqbTV6p.js").then((n) => n.n), ctx = await resolveBuildContext({
53
+ }), { parseStrictOptions } = await import("./resolveBuildContext-clvZ-QQy.js").then((n) => n.n), strictOptions = parseStrictOptions(config?.strictOptions ?? {}), pkg = await loadPkgWithReporting({
54
+ pkgPath,
55
+ logger,
56
+ strict,
57
+ strictOptions
58
+ }), tsconfig = tsconfigOption || config?.tsconfig || "tsconfig.json", ctx = await resolveBuildContext({
52
59
  config,
53
60
  cwd,
54
61
  logger,
55
- pkg: await loadPkgWithReporting({
56
- pkgPath,
57
- logger,
58
- strict,
59
- strictOptions: parseStrictOptions(config?.strictOptions ?? {})
60
- }),
62
+ pkg,
61
63
  strict,
62
- tsconfig: tsconfigOption || config?.tsconfig || "tsconfig.json"
64
+ tsconfig
63
65
  });
64
66
  if (printPackageTree(ctx), strict) {
65
67
  let missingFiles = [];
@@ -87,42 +89,46 @@ async function runPublint(ctx) {
87
89
  hasErrors && process.exit(1);
88
90
  }
89
91
  async function checkApiExtractorReleaseTags(ctx) {
90
- let [{ Extractor, ExtractorConfig }, { createApiExtractorConfig }, { createTSDocConfig }, { getExtractMessagesConfig }, { printExtractMessages }] = await Promise.all([
91
- import("@microsoft/api-extractor"),
92
- import("./createApiExtractorConfig-CJoZqw8e.js"),
93
- import("./createTSDocConfig-CwaWneTR.js"),
94
- import("./getExtractMessagesConfig-CXljwFbQ.js"),
95
- import("./printExtractMessages-DyaYtByp.js")
96
- ]), 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 || {};
92
+ let tsdoc = ctx.config?.tsdoc === !1 || ctx.config?.tsdoc === !0 ? void 0 : ctx.config?.tsdoc, entryDtsFiles = [], seen = /* @__PURE__ */ new Set();
97
93
  for (let exp of Object.values(ctx.exports || {})) {
98
- if (!exp._exported || !exp.default.endsWith(".js")) continue;
99
- let dtsPath = exp.default.replace(/\.js$/, ".d.ts"), exportPath = path.resolve(ctx.cwd, dtsPath);
100
- if (!fileExists(exportPath)) continue;
101
- let tsdocConfigFile = await createTSDocConfig({ customTags }), extractorConfig = ExtractorConfig.prepare({
102
- configObject: createApiExtractorConfig({
103
- bundledPackages,
104
- distPath,
105
- exportPath,
106
- filePath: path.relative(outDir, dtsPath),
107
- messages: getExtractMessagesConfig({ rules }),
108
- projectFolder: ctx.cwd,
109
- mainEntryPointFilePath: exportPath,
110
- tsconfig: ctx.ts.config,
111
- tsconfigPath: path.resolve(ctx.cwd, ctx.ts.configPath || "tsconfig.json"),
112
- dtsRollupEnabled: !1
113
- }),
114
- configObjectFullPath: void 0,
115
- tsdocConfigFile,
116
- packageJsonFullPath: path.resolve(ctx.cwd, "package.json")
117
- }), messages = [];
118
- Extractor.invoke(extractorConfig, {
119
- localBuild: !0,
120
- showVerboseMessages: !0,
121
- messageCallback(message) {
122
- messages.push(message), message.handled = !0;
123
- }
124
- }), printExtractMessages(ctx, messages);
94
+ if (!exp._exported) continue;
95
+ let candidates = /* @__PURE__ */ new Set();
96
+ exp.types && candidates.add(exp.types);
97
+ for (let js of [
98
+ exp.default,
99
+ exp.import,
100
+ exp.require
101
+ ]) {
102
+ if (!js) continue;
103
+ let dts = jsFileToDts(js);
104
+ dts && candidates.add(dts);
105
+ }
106
+ for (let dtsPath of candidates) {
107
+ let exportPath = path.resolve(ctx.cwd, dtsPath);
108
+ !fileExists(exportPath) || seen.has(exportPath) || (seen.add(exportPath), entryDtsFiles.push(exportPath));
109
+ }
125
110
  }
111
+ entryDtsFiles.length !== 0 && await checkTsdoc({
112
+ cwd: ctx.cwd,
113
+ entryDtsFiles,
114
+ tsconfig: ctx.ts.configPath || "tsconfig.json",
115
+ outDir: ctx.ts.config?.options.outDir ?? ctx.distPath,
116
+ bundledPackages: ctx.bundledPackages,
117
+ customTags: tsdoc?.customTags,
118
+ rules: tsdoc?.rules,
119
+ logger: {
120
+ log: (...args) => ctx.logger.log(...args),
121
+ warn: (...args) => ctx.logger.warn(...args),
122
+ error: (...args) => ctx.logger.error(...args)
123
+ }
124
+ });
125
+ }
126
+ /** `./dist/index.js` → `./dist/index.d.ts` (`.mjs` → `.d.mts`, `.cjs` → `.d.cts`). */
127
+ function jsFileToDts(file) {
128
+ if (/\.d\.[mc]?ts$/.test(file)) return file;
129
+ if (file.endsWith(".mjs")) return file.replace(/\.mjs$/, ".d.mts");
130
+ if (file.endsWith(".cjs")) return file.replace(/\.cjs$/, ".d.cts");
131
+ if (file.endsWith(".js")) return file.replace(/\.js$/, ".d.ts");
126
132
  }
127
133
  async function checkAction(options) {
128
134
  try {
@@ -137,4 +143,4 @@ async function checkAction(options) {
137
143
  }
138
144
  export { checkAction };
139
145
 
140
- //# sourceMappingURL=checkAction-BMxszLZS.js.map
146
+ //# sourceMappingURL=checkAction--wB2oNGm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkAction--wB2oNGm.js","names":["findPkgPath"],"sources":["../src/node/getFilesize.ts","../src/node/printPackageTree.ts","../src/node/check.ts","../src/cli/checkAction.ts"],"sourcesContent":["import {statSync} from 'node:fs'\nimport prettyBytes from 'pretty-bytes'\n\nexport function getFilesize(file: string): string {\n const stats = statSync(file)\n\n return prettyBytes(stats.size)\n}\n","import path from 'node:path'\nimport chalk from 'chalk'\nimport treeify from 'treeify'\nimport type {PkgExport} from './core/config/types.ts'\nimport type {BuildContext} from './core/contexts/buildContext.ts'\nimport {fileExists} from './fileExists.ts'\nimport {getFilesize} from './getFilesize.ts'\n\nfunction getFileInfo(cwd: string, filePath: string) {\n const p = path.resolve(cwd, filePath)\n const exists = fileExists(p)\n const size = exists ? getFilesize(p) : undefined\n\n return {exists, size}\n}\n\nexport function printPackageTree(ctx: BuildContext): void {\n const {cwd, exports, logger, pkg} = ctx\n\n if (!exports) return\n\n logger.log(`${chalk.blue(pkg.name)}@${chalk.green(pkg.version)}`)\n\n const tree: Record<string, unknown> = {}\n\n if (pkg.type) {\n tree['type'] = chalk.yellow(pkg.type)\n }\n\n if (pkg.bin) {\n tree['bin'] = Object.fromEntries(\n Object.entries(pkg.bin).map(([name, file]) => [chalk.cyan(name), fileInfo(file)]),\n )\n }\n\n function fileInfo(file: string) {\n const info = getFileInfo(cwd, file)\n\n if (!info.size) {\n return `${chalk.gray(file)} ${chalk.red('does not exist')}`\n }\n\n return `${chalk.yellow(file)} ${chalk.gray(info.size)}`\n }\n\n tree['exports'] = Object.fromEntries(\n Object.entries(exports)\n .filter(([, entry]) => entry._exported)\n .map(([exportPath, entry]) => {\n const exp: Omit<PkgExport, '_exported'> = {\n source: fileInfo(entry.source),\n browser: undefined,\n require: undefined,\n node: undefined,\n import: undefined,\n default: fileInfo(entry.default),\n }\n\n if (entry.browser) {\n exp.browser = {source: fileInfo(entry.browser.source)}\n\n if (entry.browser.import) exp.browser.import = fileInfo(entry.browser.import)\n if (entry.browser.require) exp.browser.require = fileInfo(entry.browser.require)\n } else {\n delete exp.browser\n }\n\n if (entry.require) {\n exp.require = fileInfo(entry.require)\n } else {\n delete exp.require\n }\n\n if (entry.node) {\n exp.node = {}\n\n if (entry.node.source) exp.node.source = fileInfo(entry.node.source)\n if (entry.node.import) exp.node.import = fileInfo(entry.node.import)\n if (entry.node.require) exp.node.require = fileInfo(entry.node.require)\n } else {\n delete exp.node\n }\n\n if (entry.import) {\n exp.import = fileInfo(entry.import)\n } else {\n delete exp.import\n }\n\n return [chalk.cyan(path.join(pkg.name, exportPath)), exp]\n }),\n )\n\n logger.log(treeify.asTree(tree as Record<string, any>, true, true))\n}\n","import path from 'node:path'\nimport {checkTsdoc} from '@sanity/tsdown-config/tsdoc'\nimport {up as findPkgPath} from 'empathic/package'\nimport {loadConfig} from './core/config/loadConfig.ts'\nimport type {BuildContext} from './core/contexts/buildContext.ts'\nimport {loadPkgWithReporting} from './core/pkg/loadPkgWithReporting.ts'\nimport {fileExists} from './fileExists.ts'\nimport {createLogger} from './logger.ts'\nimport {printPackageTree} from './printPackageTree.ts'\nimport {resolveBuildContext} from './resolveBuildContext.ts'\nimport {createSpinner} from './spinner.ts'\n\n/** @public */\nexport async function check(options: {\n cwd: string\n strict?: boolean\n tsconfig?: string\n}): Promise<void> {\n const {cwd, strict = false, tsconfig: tsconfigOption} = options\n const logger = createLogger()\n const spinner = createSpinner('')\n try {\n const pkgPath = findPkgPath({cwd})\n if (!pkgPath) {\n throw new Error('no package.json found', {cause: {cwd}})\n }\n const config = await loadConfig({cwd, pkgPath})\n const {parseStrictOptions} = await import('./strict.ts')\n const strictOptions = parseStrictOptions(config?.strictOptions ?? {})\n const pkg = await loadPkgWithReporting({pkgPath, logger, strict, strictOptions})\n const tsconfig = tsconfigOption || config?.tsconfig || 'tsconfig.json'\n const ctx = await resolveBuildContext({config, cwd, logger, pkg, strict, tsconfig})\n\n printPackageTree(ctx)\n\n if (strict) {\n const missingFiles: string[] = []\n\n // Check if there are missing files\n for (const [, exp] of Object.entries(ctx.exports || {})) {\n if (exp.source && !fileExists(path.resolve(cwd, exp.source))) {\n missingFiles.push(exp.source)\n }\n\n if (exp.require && !fileExists(path.resolve(cwd, exp.require))) {\n missingFiles.push(exp.require)\n }\n\n if (exp.import && !fileExists(path.resolve(cwd, exp.import))) {\n missingFiles.push(exp.import)\n }\n }\n\n if (ctx.pkg.types && !fileExists(path.resolve(cwd, ctx.pkg.types))) {\n missingFiles.push(ctx.pkg.types)\n }\n\n if (missingFiles.length) {\n logger.error(`missing files: ${missingFiles.join(', ')}`)\n process.exit(1)\n }\n }\n\n // publint validates that the built package resolves in every runtime/bundler — it packs\n // the package (which applies `publishConfig`, so the source-condition convention checks\n // out the way consumers see it) and lints the result. This replaced the bespoke\n // esbuild-based resolution checks of previous majors.\n await runPublint(ctx)\n\n if (ctx.config?.tsdoc !== false) {\n await checkApiExtractorReleaseTags(ctx)\n }\n\n spinner.complete()\n } catch (err) {\n spinner.error()\n\n if (err instanceof Error) {\n const RE_CWD = new RegExp(cwd.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&'), 'g')\n\n logger.error((err.stack || err.message).replace(RE_CWD, '.'))\n logger.log()\n }\n\n process.exit(1)\n }\n}\n\nasync function runPublint(ctx: BuildContext): Promise<void> {\n const {cwd, logger, strict} = ctx\n const [{publint}, {formatMessage}] = await Promise.all([\n import('publint'),\n import('publint/utils'),\n ])\n\n const {messages, pkg} = await publint({pkgDir: cwd, strict})\n\n let hasErrors = false\n\n for (const message of messages) {\n const formatted = formatMessage(message, pkg)\n if (message.type === 'error') {\n hasErrors = true\n logger.error(`publint: ${formatted}`)\n } else if (message.type === 'warning') {\n logger.warn(`publint: ${formatted}`)\n } else {\n logger.log(`publint: ${formatted}`)\n }\n }\n\n if (hasErrors) {\n process.exit(1)\n }\n}\n\nasync function checkApiExtractorReleaseTags(ctx: BuildContext) {\n const tsdoc =\n ctx.config?.tsdoc === false || ctx.config?.tsdoc === true ? undefined : ctx.config?.tsdoc\n const entryDtsFiles: string[] = []\n const seen = new Set<string>()\n\n for (const exp of Object.values(ctx.exports || {})) {\n if (!exp._exported) continue\n // Prefer an explicit `types` condition; otherwise derive declarations from every runtime\n // file (`.js` → `.d.ts`, `.mjs` → `.d.mts`, `.cjs` → `.d.cts`) so dual-format / fixed-\n // extension packages are checked the same way as the build-time `tsdoc` hook.\n const candidates = new Set<string>()\n if (exp.types) candidates.add(exp.types)\n for (const js of [exp.default, exp.import, exp.require]) {\n if (!js) continue\n const dts = jsFileToDts(js)\n if (dts) candidates.add(dts)\n }\n for (const dtsPath of candidates) {\n const exportPath = path.resolve(ctx.cwd, dtsPath)\n // JS-only entries emit no declarations; there is nothing to check\n if (!fileExists(exportPath) || seen.has(exportPath)) continue\n seen.add(exportPath)\n entryDtsFiles.push(exportPath)\n }\n }\n\n if (entryDtsFiles.length === 0) return\n\n await checkTsdoc({\n cwd: ctx.cwd,\n entryDtsFiles,\n tsconfig: ctx.ts.configPath || 'tsconfig.json',\n outDir: ctx.ts.config?.options.outDir ?? ctx.distPath,\n bundledPackages: ctx.bundledPackages,\n customTags: tsdoc?.customTags,\n rules: tsdoc?.rules,\n logger: {\n log: (...args) => ctx.logger.log(...args),\n warn: (...args) => ctx.logger.warn(...args),\n error: (...args) => ctx.logger.error(...args),\n },\n })\n}\n\n/** `./dist/index.js` → `./dist/index.d.ts` (`.mjs` → `.d.mts`, `.cjs` → `.d.cts`). */\nfunction jsFileToDts(file: string): string | undefined {\n if (/\\.d\\.[mc]?ts$/.test(file)) return file\n if (file.endsWith('.mjs')) return file.replace(/\\.mjs$/, '.d.mts')\n if (file.endsWith('.cjs')) return file.replace(/\\.cjs$/, '.d.cts')\n if (file.endsWith('.js')) return file.replace(/\\.js$/, '.d.ts')\n return undefined\n}\n","import {check} from '../node/check.ts'\nimport {handleError} from './handleError.ts'\n\nexport async function checkAction(options: {strict?: boolean; tsconfig?: string}): Promise<void> {\n try {\n await check({\n cwd: process.cwd(),\n strict: options.strict,\n tsconfig: options.tsconfig,\n })\n } catch (err) {\n handleError(err)\n }\n}\n"],"mappings":"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"}
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.1.0";
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--wB2oNGm.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-BzyCXuxp.js");
9
9
  if (await buildAction(buildOptions), check) {
10
- let { checkAction } = await import("./checkAction-BMxszLZS.js");
10
+ let { checkAction } = await import("./checkAction--wB2oNGm.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-CEADXNwO.js");
21
21
  return watchAction(options);
22
22
  }), cli.help(), cli.version(version), cli.parse();
23
23
  export {};
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { PkgExport, PkgExports, PkgExports as PkgExports$1 } from "@sanity/parse-package-json";
2
- import { PackageVanillaExtractOptions, PackageVanillaExtractOptions as PackageVanillaExtractOptions$1, ReactCompilerOptions, ReactCompilerOptions as ReactCompilerOptions$1, StyledComponentsOptions, StyledComponentsOptions as StyledComponentsOptions$1 } from "@sanity/tsdown-config";
2
+ import { PackageCssOptions, PackageTsdocCustomTag, PackageTsdocCustomTag as PackageTsdocCustomTag$1, PackageTsdocOptions, PackageTsdocOptions as PackageTsdocOptions$1, PackageTsdocRuleLevel, PackageTsdocRuleLevel as PackageTsdocRuleLevel$1, PackageVanillaExtractOptions, PackageVanillaExtractOptions as PackageVanillaExtractOptions$1, ReactCompilerOptions, ReactCompilerOptions as ReactCompilerOptions$1, StyledComponentsOptions, StyledComponentsOptions as StyledComponentsOptions$1 } from "@sanity/tsdown-config";
3
3
  import { UserConfig } from "tsdown";
4
4
  type ToggleType = "error" | "warn" | "off";
5
5
  /**
@@ -136,30 +136,23 @@ interface PkgBundle {
136
136
  require?: string;
137
137
  runtime?: PkgRuntime;
138
138
  }
139
- /** @public */
140
- type PkgRuleLevel = "error" | "warn" | "info" | "off";
141
- /** @public */
142
- interface TSDocCustomTag {
143
- name: string;
144
- syntaxKind: "block" | "modifier";
145
- allowMultiple?: boolean;
146
- }
139
+ /**
140
+ * @public
141
+ * @deprecated Use `PackageTsdocRuleLevel` from `@sanity/pkg-utils`.
142
+ */
143
+ type PkgRuleLevel = PackageTsdocRuleLevel$1;
144
+ /**
145
+ * @public
146
+ * @deprecated Use `PackageTsdocCustomTag` from `@sanity/pkg-utils`.
147
+ */
148
+ type TSDocCustomTag = PackageTsdocCustomTag$1;
147
149
  /**
148
150
  * Options for the `tsdoc` option: the `@microsoft/api-extractor` powered TSDoc and release-tag
149
- * checking that runs during `pkg check` (and `pkg build --check`).
151
+ * checking that runs during `pkg build` and `pkg check`.
150
152
  * @public
153
+ * @deprecated Use `PackageTsdocOptions` from `@sanity/pkg-utils`.
151
154
  */
152
- interface PkgTsdocOptions {
153
- customTags?: TSDocCustomTag[];
154
- rules?: {
155
- "ae-incompatible-release-tags"?: PkgRuleLevel;
156
- "ae-internal-missing-underscore"?: PkgRuleLevel;
157
- "ae-missing-release-tag"?: PkgRuleLevel;
158
- "tsdoc-link-tag-unescaped-text"?: PkgRuleLevel;
159
- "tsdoc-undefined-tag"?: PkgRuleLevel;
160
- "tsdoc-unsupported-tag"?: PkgRuleLevel;
161
- };
162
- }
155
+ type PkgTsdocOptions = PackageTsdocOptions$1;
163
156
  /** @public */
164
157
  interface PkgConfigOptions {
165
158
  bundles?: PkgBundle[];
@@ -172,6 +165,26 @@ interface PkgConfigOptions {
172
165
  * @defaultValue true
173
166
  */
174
167
  clean?: UserConfig["clean"];
168
+ /**
169
+ * Enables the `@tsdown/css` pipeline (requires `@tsdown/css` to be installed): plain CSS,
170
+ * CSS modules, preprocessors, Lightning CSS / PostCSS. The emitted CSS is minified and
171
+ * lowered with the same settings as {@link PkgConfigOptions.vanillaExtract | `vanillaExtract`},
172
+ * and gets the same conditional CSS export treatment — the self-referential
173
+ * `import "<pkg>/style.css"`, a no-op `style-css.js` shim with its `style-css.d.ts`
174
+ * declaration, and the conditional `"./style.css"` export written to `package.json`.
175
+ *
176
+ * It is enabled automatically (with these defaults) for a package that declares a `.css`
177
+ * export subpath with a `source`, e.g.
178
+ *
179
+ * ```json
180
+ * "./ui/styles.css": {"source": "./src/ui/styles.css"}
181
+ * ```
182
+ *
183
+ * which builds `./src/ui/styles.css` to `dist/ui/styles.css` and fills in the remaining
184
+ * export conditions. Set the option explicitly to customize the pipeline.
185
+ * @alpha
186
+ */
187
+ css?: PackageCssOptions;
175
188
  /** @alpha */
176
189
  define?: Record<string, string | number | boolean | undefined | null>;
177
190
  /**
@@ -257,11 +270,12 @@ interface PkgConfigOptions {
257
270
  styledComponents?: boolean | StyledComponentsOptions$1;
258
271
  tsconfig?: string;
259
272
  /**
260
- * Runs `@microsoft/api-extractor` during `pkg check` to check that TSDoc tags are valid and
261
- * release tags are correct. This is useful for packages that are consumed by TSDoc-based
262
- * tooling. It's enabled by default; set `tsdoc: false` to disable it.
273
+ * Runs `@microsoft/api-extractor` to check that TSDoc tags are valid and release tags are
274
+ * correct. Enabled during `pkg build` and again during `pkg check`. Set `tsdoc: false` to
275
+ * disable it.
276
+ * @defaultValue true
263
277
  */
264
- tsdoc?: false | PkgTsdocOptions;
278
+ tsdoc?: boolean | PackageTsdocOptions$1;
265
279
  /**
266
280
  * Enables `@sanity/vanilla-extract-tsdown-plugin` to extract CSS from `.css.ts` files into a
267
281
  * separate file (`dist/bundle.css` by default), minified and lowered with `lightningcss`.
@@ -348,5 +362,5 @@ interface PkgTemplateStringOption<T = string> {
348
362
  type PkgTemplateOption<T = string> = PkgTemplateStringOption<T>;
349
363
  /** @public */
350
364
  declare function defineTemplateOption<T>(option: PkgTemplateOption<T>): PkgTemplateOption<T>;
351
- export { DEFAULT_BROWSERSLIST_QUERY, type PackageVanillaExtractOptions, type PkgBundle, type PkgConfigOptions, type PkgConfigProperty, type PkgConfigPropertyResolver, type PkgExport, type PkgExports, type PkgFormat, type PkgRuleLevel, type PkgRuntime, type PkgTsdocOptions, type ReactCompilerOptions, type StyledComponentsOptions, type TSDocCustomTag, defineConfig, defineTemplateOption, loadConfig };
365
+ export { DEFAULT_BROWSERSLIST_QUERY, type PackageTsdocCustomTag, type PackageTsdocOptions, type PackageTsdocRuleLevel, type PackageVanillaExtractOptions, type PkgBundle, type PkgConfigOptions, type PkgConfigProperty, type PkgConfigPropertyResolver, type PkgExport, type PkgExports, type PkgFormat, type PkgRuleLevel, type PkgRuntime, type PkgTsdocOptions, type ReactCompilerOptions, type StyledComponentsOptions, type TSDocCustomTag, defineConfig, defineTemplateOption, loadConfig };
352
366
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../src/node/strict.ts","../src/node/core/config/types.ts","../src/node/core/config/defineConfig.ts","../src/node/core/config/loadConfig.ts","../src/node/core/defaults.ts","../src/node/core/template/types.ts","../src/node/core/template/define.ts"],"mappings":";;;KAKK;;;;UAwCY;;;;;EAKf,sBAAsB;;;;;EAKtB,uBAAuB;;;;;;;;;EASvB,wBAAwB;;;;;EAKxB,wBAAwB;;;;;EAKxB,wBAAwB;;;;;EAKxB,cAAc;;;;;EAKd,sBAAsB;;;;;EAKtB,4BAA4B;;;;;EAK5B,kBAAkB;;;;;EAKlB,wBAAwB;;;;;EAKxB,yBAAyB;;;;;EAKzB,0BAA0B;;;;;EAK1B,6BAA6B;;;;;EAK7B,oBAAoB;;;;;EAKpB,8BAA8B;;;;;EAK9B,mBAAmB;;;;;EAKnB,sBAAsB;;;;;EAKtB,wBAAwB;;;;;EAKxB,2BAA2B;;;;;EAK3B,uBAAuB;;;;;EAKvB,sBAAsB;;;;;EAKtB,8BAA8B;;;KC9IpB;;KAGA;;KAGA,0BAA0B,MAAM,MAAM,MAAM;;KAG5C,kBAAkB,KAAK,0BAA0B,KAAK;;UAGjD;EACf;EACA;EACA;EACA,UAAU;;;KAIA;;UAGK;EACf;EACA;EACA;;;;;;;UAQe;EACf,aAAa;EACb;IACE,iCAAiC;IACjC,mCAAmC;IACnC,2BAA2B;IAC3B,kCAAkC;IAClC,wBAAwB;IACxB,0BAA0B;;;;UAKb;EACf,UAAU;;;;;;;;;EASV,QAAQ;;EAER,SAAS;;;;;;;;EAQT,OAAO;;;;EAIP;;;;;;;EAOA,cAAc,QAAQ,YAAY;EAClC,UAAU,kBAAkB;;;;;;;;;;;EAW5B,WAAW;;;;;;;;EAQX;;;;;;;;EAQA;;;;;;;EAOA,UAAU;;;;;;;EAOV,0BAA0B;;;;EAI1B,UAAU;EACV;;;;EAIA;;;;EAIA,gBAAgB,QAAQ;;;;;;;EAOxB,6BAA6B;EAC7B;;;;;;EAMA,gBAAgB;;;;;;;;;;EAUhB,2BAA2B;;;;;;;EAa3B;;;;;;;;EAQA;;;;;EAKA;;;;;EAKA;;;;;EAKA;;;;;EAKA;;;;;EAKA;;;;;;;;EAQA;;;;;EAKA;;;iBCtOc,mBAAmB,UAAU,kBAAkB,eAAe,IAAI;;iBCK5D,WAAW;EAC/B;EACA;IACE,QAAQ;;cCRC;;UCMI,wBAAwB;EACvC;EACA;EACA;EACA,UAAU,MAAM,SAAS,wBAAwB;EACjD,SAAS,cAAc;EACvB,YAAY;;;KAIF,kBAAkB,cAAc,wBAAwB;;iBChBpD,qBAAqB,GAAG,QAAQ,kBAAkB,KAAK,kBAAkB"}
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../src/node/strict.ts","../src/node/core/config/types.ts","../src/node/core/config/defineConfig.ts","../src/node/core/config/loadConfig.ts","../src/node/core/defaults.ts","../src/node/core/template/types.ts","../src/node/core/template/define.ts"],"mappings":";;;KAKK;;;;UAwCY;;;;;EAKf,sBAAsB;;;;;EAKtB,uBAAuB;;;;;;;;;EASvB,wBAAwB;;;;;EAKxB,wBAAwB;;;;;EAKxB,wBAAwB;;;;;EAKxB,cAAc;;;;;EAKd,sBAAsB;;;;;EAKtB,4BAA4B;;;;;EAK5B,kBAAkB;;;;;EAKlB,wBAAwB;;;;;EAKxB,yBAAyB;;;;;EAKzB,0BAA0B;;;;;EAK1B,6BAA6B;;;;;EAK7B,oBAAoB;;;;;EAKpB,8BAA8B;;;;;EAK9B,mBAAmB;;;;;EAKnB,sBAAsB;;;;;EAKtB,wBAAwB;;;;;EAKxB,2BAA2B;;;;;EAK3B,uBAAuB;;;;;EAKvB,sBAAsB;;;;;EAKtB,8BAA8B;;;KCtIpB;;KAGA;;KAGA,0BAA0B,MAAM,MAAM,MAAM;;KAG5C,kBAAkB,KAAK,0BAA0B,KAAK;;UAGjD;EACf;EACA;EACA;EACA,UAAU;;;;;;KAOA,eAAe;;;;;KAMf,iBAAiB;;;;;;;KAQjB,kBAAkB;;UAGb;EACf,UAAU;;;;;;;;;EASV,QAAQ;;;;;;;;;;;;;;;;;;;;EAoBR,MAAM;;EAEN,SAAS;;;;;;;;EAQT,OAAO;;;;EAIP;;;;;;;EAOA,cAAc,QAAQ,YAAY;EAClC,UAAU,kBAAkB;;;;;;;;;;;EAW5B,WAAW;;;;;;;;EAQX;;;;;;;;EAQA;;;;;;;EAOA,UAAU;;;;;;;EAOV,0BAA0B;;;;EAI1B,UAAU;EACV;;;;EAIA;;;;EAIA,gBAAgB,QAAQ;;;;;;;EAOxB,6BAA6B;EAC7B;;;;;;;EAOA,kBAAkB;;;;;;;;;;EAUlB,2BAA2B;;;;;;;EAa3B;;;;;;;;EAQA;;;;;EAKA;;;;;EAKA;;;;;EAKA;;;;;EAKA;;;;;EAKA;;;;;;;;EAQA;;;;;EAKA;;;iBC5Pc,mBAAmB,UAAU,kBAAkB,eAAe,IAAI;;iBCK5D,WAAW;EAC/B;EACA;IACE,QAAQ;;cCRC;;UCMI,wBAAwB;EACvC;EACA;EACA;EACA,UAAU,MAAM,SAAS,wBAAwB;EACjD,SAAS,cAAc;EACvB,YAAY;;;KAIF,kBAAkB,cAAc,wBAAwB;;iBChBpD,qBAAqB,GAAG,QAAQ,kBAAkB,KAAK,kBAAkB"}
package/dist/index.js CHANGED
@@ -173,13 +173,24 @@ function runLegacyConfigChecks(config) {
173
173
  ...dts === "rolldown" ? ["`dts: 'rolldown'` is the default behavior now: delete the option. Options that", "accompanied it move into the object, e.g. `tsgo: true` becomes `dts: {tsgo: true}`."] : [
174
174
  "`dts: 'api-extractor'` type generation was removed. Types are generated with",
175
175
  "tsdown (rolldown-plugin-dts); api-extractor remains as the TSDoc/release-tag",
176
- "checking that runs during `pkg check` — configure it with the `tsdoc` option."
176
+ "checking that runs during `pkg build`/`pkg check` — configure it with the",
177
+ "`tsdoc` option."
177
178
  ],
178
179
  "",
179
180
  `Full migration guide: ${MIGRATION_GUIDE_URL}`,
180
181
  "Set `legacyChecks: false` in package.config.ts to skip this validation (it is also",
181
182
  "skipped when NODE_ENV=production)."
182
183
  ].join("\n"));
184
+ for (let option of ["vanillaExtract", "css"]) {
185
+ let value = config[option];
186
+ if (typeof value != "object" || !value) continue;
187
+ let inject = value.inject;
188
+ typeof inject != "object" || !inject || inject.nodeCompat !== void 0 && console.warn([
189
+ `package.config.ts: \`${option}.inject.nodeCompat\` is deprecated. Use`,
190
+ `\`${option}: {inject: true, exports: {nodeCompat: true}}\` instead — \`nodeCompat\``,
191
+ "configures the package exports, not the injected import."
192
+ ].join("\n"));
193
+ }
183
194
  config.external !== void 0 && console.warn([
184
195
  "package.config.ts: `external` is deprecated. Use `deps: {neverBundle: [...]}` to mark",
185
196
  "dependencies as external, and `deps: {alwaysBundle: [...]}` to bundle a dependency",