@sanity/pkg-utils 6.4.1 → 6.5.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/dist/_chunks-cjs/consoleSpy.cjs +39 -11
- package/dist/_chunks-cjs/consoleSpy.cjs.map +1 -1
- package/dist/cli.cjs +1 -1
- package/dist/index.cjs +2 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +78 -0
- package/dist/index.d.ts +78 -0
- package/dist/index.js +39 -10
- package/dist/index.js.map +1 -1
- package/package.json +6 -5
- package/src/node/__snapshots__/strict.test.ts.snap +145 -0
- package/src/node/core/config/types.ts +7 -1
- package/src/node/core/pkg/parseExports.ts +15 -3
- package/src/node/index.ts +1 -0
- package/src/node/resolveBuildContext.ts +28 -8
- package/src/node/strict.test-d.ts +7 -0
- package/src/node/strict.ts +66 -0
package/dist/index.js
CHANGED
|
@@ -10,6 +10,7 @@ import fs, { writeFile, readFile, readdir, lstat } from "node:fs/promises";
|
|
|
10
10
|
import browserslist from "browserslist";
|
|
11
11
|
import config from "@sanity/browserslist-config";
|
|
12
12
|
import ts from "typescript";
|
|
13
|
+
import { errorMap } from "zod-validation-error";
|
|
13
14
|
import { Observable, switchMap } from "rxjs";
|
|
14
15
|
import { ExtractorConfig, Extractor } from "@microsoft/api-extractor";
|
|
15
16
|
import { mkdirp } from "mkdirp";
|
|
@@ -269,7 +270,9 @@ function validateExports(_exports, options2) {
|
|
|
269
270
|
return errors;
|
|
270
271
|
}
|
|
271
272
|
function parseExports(options2) {
|
|
272
|
-
const { pkg, strict, legacyExports } = options2, type = pkg.type || "commonjs", errors = []
|
|
273
|
+
const { pkg, strict, strictOptions: strictOptions2, legacyExports, logger } = options2, type = pkg.type || "commonjs", errors = [], report = (kind, message) => {
|
|
274
|
+
kind === "warn" ? logger.warn(message) : errors.push(message);
|
|
275
|
+
};
|
|
273
276
|
if (pkg.source) {
|
|
274
277
|
if (strict && pkg.exports?.["."] && typeof pkg.exports["."] == "object" && "source" in pkg.exports["."] && pkg.exports["."].source === pkg.source)
|
|
275
278
|
errors.push(
|
|
@@ -345,7 +348,7 @@ function parseExports(options2) {
|
|
|
345
348
|
- `)
|
|
346
349
|
);
|
|
347
350
|
const _exports = [];
|
|
348
|
-
strict && "typings" in pkg &&
|
|
351
|
+
strict && strictOptions2.noPackageJsonTypings !== "off" && "typings" in pkg && report(strictOptions2.noPackageJsonTypings, "package.json: `typings` should be `types`"), strict && !pkg.types && pkg.source?.endsWith(".ts") && errors.push(
|
|
349
352
|
"package.json: `types` must be declared for the npm listing to show as a TypeScript module."
|
|
350
353
|
), strict && !pkg.exports["./package.json"] && errors.push('package.json: `exports["./package.json"] must be declared.');
|
|
351
354
|
for (const [exportPath, exportEntry] of Object.entries(pkg.exports))
|
|
@@ -520,6 +523,16 @@ function resolveNodeTarget(versions) {
|
|
|
520
523
|
if (target.length !== 0)
|
|
521
524
|
return target;
|
|
522
525
|
}
|
|
526
|
+
const toggle = z.union([z.literal("error"), z.literal("warn"), z.literal("off")]), strictOptions = z.object({
|
|
527
|
+
noPackageJsonTypings: toggle.default("error"),
|
|
528
|
+
noImplicitSideEffects: toggle.default("warn"),
|
|
529
|
+
noImplicitBrowsersList: toggle.default("warn")
|
|
530
|
+
}).strict(), validationSchema = z.object({
|
|
531
|
+
strictOptions: strictOptions.default({})
|
|
532
|
+
});
|
|
533
|
+
function parseStrictOptions(input) {
|
|
534
|
+
return validationSchema.parse({ strictOptions: input }, { errorMap }).strictOptions;
|
|
535
|
+
}
|
|
523
536
|
async function resolveBuildContext(options2) {
|
|
524
537
|
const {
|
|
525
538
|
config: config2,
|
|
@@ -529,15 +542,27 @@ async function resolveBuildContext(options2) {
|
|
|
529
542
|
pkg,
|
|
530
543
|
strict,
|
|
531
544
|
tsconfig: tsconfigPath
|
|
532
|
-
} = options2, tsconfig = await loadTSConfig({ cwd, tsconfigPath });
|
|
545
|
+
} = options2, tsconfig = await loadTSConfig({ cwd, tsconfigPath }), strictOptions2 = parseStrictOptions(config2?.strictOptions ?? {});
|
|
533
546
|
let browserslist2 = pkg.browserslist;
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
547
|
+
if (!browserslist2) {
|
|
548
|
+
if (strict && strictOptions2.noImplicitBrowsersList !== "off") {
|
|
549
|
+
if (strictOptions2.noImplicitBrowsersList === "error")
|
|
550
|
+
throw new Error(
|
|
551
|
+
'\n- package.json: "browserslist" is missing, set it to `"browserslist": "extends @sanity/browserslist-config"`'
|
|
552
|
+
);
|
|
553
|
+
logger.warn(
|
|
554
|
+
'Could not detect a `browserslist` property in `package.json`, using default configuration. Add `"browserslist": "extends @sanity/browserslist-config"` to silence this warning.'
|
|
555
|
+
);
|
|
556
|
+
}
|
|
557
|
+
browserslist2 = DEFAULT_BROWSERSLIST_QUERY;
|
|
558
|
+
}
|
|
537
559
|
const targetVersions = browserslistToEsbuild(browserslist2);
|
|
538
|
-
strict && typeof pkg.sideEffects > "u"
|
|
539
|
-
|
|
540
|
-
|
|
560
|
+
if (strict && strictOptions2.noImplicitSideEffects !== "off" && typeof pkg.sideEffects > "u") {
|
|
561
|
+
const msg = "package.json: `sideEffects` is missing, see https://webpack.js.org/guides/tree-shaking/#clarifying-tree-shaking-and-sideeffects for how to define `sideEffects`";
|
|
562
|
+
if (strictOptions2.noImplicitSideEffects === "error")
|
|
563
|
+
throw new Error(msg);
|
|
564
|
+
logger.warn(msg);
|
|
565
|
+
}
|
|
541
566
|
const nodeTarget = resolveNodeTarget(targetVersions), webTarget = resolveBrowserTarget(targetVersions);
|
|
542
567
|
if (!nodeTarget)
|
|
543
568
|
throw new Error("no matching `node` target");
|
|
@@ -550,7 +575,9 @@ async function resolveBuildContext(options2) {
|
|
|
550
575
|
}, parsedExports = parseExports({
|
|
551
576
|
pkg,
|
|
552
577
|
strict,
|
|
553
|
-
legacyExports: config2?.legacyExports ?? !1
|
|
578
|
+
legacyExports: config2?.legacyExports ?? !1,
|
|
579
|
+
strictOptions: strictOptions2,
|
|
580
|
+
logger
|
|
554
581
|
}).reduce((acc, x) => {
|
|
555
582
|
const { _path: exportPath, ...exportEntry } = x;
|
|
556
583
|
return { ...acc, [exportPath]: exportEntry };
|
|
@@ -21585,6 +21612,8 @@ export {
|
|
|
21585
21612
|
rollupLegacyTask,
|
|
21586
21613
|
rollupTask,
|
|
21587
21614
|
rollupWatchTask,
|
|
21615
|
+
strictOptions,
|
|
21616
|
+
toggle,
|
|
21588
21617
|
watch,
|
|
21589
21618
|
watchTaskHandlers
|
|
21590
21619
|
};
|