@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.
- package/MIGRATE.md +26 -25
- package/README.md +66 -7
- package/dist/{buildAction-DFrmHzYY.js → buildAction-BzyCXuxp.js} +18 -14
- package/dist/buildAction-BzyCXuxp.js.map +1 -0
- package/dist/{checkAction-BMxszLZS.js → checkAction--wB2oNGm.js} +51 -45
- package/dist/checkAction--wB2oNGm.js.map +1 -0
- package/dist/cli.js +6 -6
- package/dist/index.d.ts +40 -26
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -1
- package/dist/index.js.map +1 -1
- package/dist/{initAction-Cv0oRwWP.js → initAction-CmOO8eod.js} +2 -2
- package/dist/initAction-CmOO8eod.js.map +1 -0
- package/dist/{resolveBuildContext-CwqbTV6p.js → resolveBuildContext-clvZ-QQy.js} +33 -9
- package/dist/resolveBuildContext-clvZ-QQy.js.map +1 -0
- package/dist/{resolveTsdownConfig-2OdGF-dM.js → resolveTsdownConfig-fBDvhjvu.js} +182 -26
- package/dist/resolveTsdownConfig-fBDvhjvu.js.map +1 -0
- package/dist/watchAction-CEADXNwO.js +117 -0
- package/dist/watchAction-CEADXNwO.js.map +1 -0
- package/dist/writeBundleCssExports-8AIeBdCf.js +64 -0
- package/dist/writeBundleCssExports-8AIeBdCf.js.map +1 -0
- package/package.json +9 -8
- package/dist/buildAction-DFrmHzYY.js.map +0 -1
- package/dist/checkAction-BMxszLZS.js.map +0 -1
- package/dist/createApiExtractorConfig-CJoZqw8e.js +0 -30
- package/dist/createApiExtractorConfig-CJoZqw8e.js.map +0 -1
- package/dist/createTSDocConfig-CwaWneTR.js +0 -25
- package/dist/createTSDocConfig-CwaWneTR.js.map +0 -1
- package/dist/getExtractMessagesConfig-CXljwFbQ.js +0 -75
- package/dist/getExtractMessagesConfig-CXljwFbQ.js.map +0 -1
- package/dist/initAction-Cv0oRwWP.js.map +0 -1
- package/dist/printExtractMessages-DyaYtByp.js +0 -33
- package/dist/printExtractMessages-DyaYtByp.js.map +0 -1
- package/dist/resolveBuildContext-CwqbTV6p.js.map +0 -1
- package/dist/resolveTsdownConfig-2OdGF-dM.js.map +0 -1
- package/dist/watchAction-uRPAvgLE.js +0 -179
- 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
|
|
13
|
-
|
|
|
14
|
-
| `dts: 'rolldown'`
|
|
15
|
-
| `dts: 'api-extractor'`
|
|
16
|
-
| `tsgo: true`
|
|
17
|
-
| `babel: {reactCompiler: true}`
|
|
18
|
-
| `reactCompilerOptions: {...}`
|
|
19
|
-
| `babel: {styledComponents: true}`
|
|
20
|
-
| `babel: {plugins: [...]}`
|
|
21
|
-
| `rollup: {vanillaExtract: true}`
|
|
22
|
-
| `
|
|
23
|
-
| `rollup: {
|
|
24
|
-
| `
|
|
25
|
-
| `extract: {
|
|
26
|
-
| `extract: {
|
|
27
|
-
| `
|
|
28
|
-
| `external:
|
|
29
|
-
| `
|
|
30
|
-
| `
|
|
31
|
-
| `process.env.
|
|
32
|
-
| `process.env.
|
|
33
|
-
| `
|
|
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
|
-
- **
|
|
45
|
-
`source`-condition development pattern and a `source`-less `publishConfig.exports`)
|
|
46
|
-
|
|
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
|
-
|
|
46
|
-
|
|
47
|
-
|
|
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: `
|
|
210
|
-
- Default: `
|
|
213
|
+
- Type: `boolean | PackageTsdocOptions`
|
|
214
|
+
- Default: `true`
|
|
211
215
|
|
|
212
|
-
Runs [API Extractor](https://api-extractor.com/) during `pkg
|
|
213
|
-
valid and release tags are correct. Set
|
|
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-
|
|
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 {
|
|
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-
|
|
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
|
|
41
|
-
pkgPath,
|
|
42
|
-
logger,
|
|
43
|
-
strict,
|
|
44
|
-
strictOptions: parseStrictOptions(config?.strictOptions ?? {})
|
|
45
|
-
}),
|
|
45
|
+
pkg,
|
|
46
46
|
strict,
|
|
47
|
-
tsconfig
|
|
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
|
|
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-
|
|
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-
|
|
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
|
-
|
|
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-
|
|
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
|
|
56
|
-
pkgPath,
|
|
57
|
-
logger,
|
|
58
|
-
strict,
|
|
59
|
-
strictOptions: parseStrictOptions(config?.strictOptions ?? {})
|
|
60
|
-
}),
|
|
62
|
+
pkg,
|
|
61
63
|
strict,
|
|
62
|
-
tsconfig
|
|
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
|
|
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
|
|
99
|
-
let
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
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
|
|
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.
|
|
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
|
|
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-
|
|
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
|
|
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-
|
|
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-
|
|
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
|
-
/**
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
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
|
|
151
|
+
* checking that runs during `pkg build` and `pkg check`.
|
|
150
152
|
* @public
|
|
153
|
+
* @deprecated Use `PackageTsdocOptions` from `@sanity/pkg-utils`.
|
|
151
154
|
*/
|
|
152
|
-
|
|
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`
|
|
261
|
-
*
|
|
262
|
-
*
|
|
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?:
|
|
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
|
package/dist/index.d.ts.map
CHANGED
|
@@ -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;;;
|
|
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
|
|
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",
|