Skip to content

Commit 89bba5d

Browse files
Guard packed export entrypoints
1 parent f17ebc9 commit 89bba5d

2 files changed

Lines changed: 31 additions & 4 deletions

File tree

scripts/release/pack-check.mjs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -577,7 +577,7 @@ function assertNoPackedPackageScripts(packageName, manifest) {
577577
}
578578
}
579579

580-
function assertRootExportTypes(packageName, manifest) {
580+
function assertRootExportEntrypoints(packageName, manifest) {
581581
if (!isRecord(manifest.exports)) {
582582
throw new Error(`${packageName} package.json exports must be an object`);
583583
}
@@ -590,6 +590,12 @@ function assertRootExportTypes(packageName, manifest) {
590590
if (rootExport.types !== manifest.types) {
591591
throw new Error(`${packageName} package.json exports["."].types must match package.json types`);
592592
}
593+
594+
if (rootExport.default !== manifest.main) {
595+
throw new Error(
596+
`${packageName} package.json exports["."].default must match package.json main`,
597+
);
598+
}
593599
}
594600

595601
export function assertPackedPackageManifest(packageName, manifest, entries) {
@@ -617,7 +623,7 @@ export function assertPackedPackageManifest(packageName, manifest, entries) {
617623
if (manifest.exports === undefined) {
618624
throw new Error(`${packageName} package.json exports must be present`);
619625
}
620-
assertRootExportTypes(packageName, manifest);
626+
assertRootExportEntrypoints(packageName, manifest);
621627

622628
const exportTargets = [];
623629
collectExportTargets(packageName, manifest.exports, "exports", exportTargets);

scripts/release/pack-check.test.ts

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -559,13 +559,14 @@ test("assertPackedPackageManifest rejects broken entry point targets", () => {
559559
exports: {
560560
".": {
561561
types: "./dist/index.d.ts",
562-
default: "./dist/missing.js",
562+
development: "./src/missing.ts",
563+
default: "./dist/index.js",
563564
},
564565
},
565566
}),
566567
safePackedManifestEntries,
567568
),
568-
/@razroo\/ray-sdk package\.json exports\["\."\]\.default points to missing entry package\/dist\/missing\.js/,
569+
/@razroo\/ray-sdk package\.json exports\["\."\]\.development points to missing entry package\/src\/missing\.ts/,
569570
);
570571

571572
assert.throws(
@@ -614,6 +615,26 @@ test("assertPackedPackageManifest requires root export types", () => {
614615
);
615616
});
616617

618+
test("assertPackedPackageManifest requires root export default", () => {
619+
assert.throws(
620+
() =>
621+
assertPackedPackageManifest(
622+
"@razroo/ray-sdk",
623+
safePackedManifest({
624+
exports: {
625+
".": {
626+
types: "./dist/index.d.ts",
627+
development: "./src/index.ts",
628+
default: "./dist/other.js",
629+
},
630+
},
631+
}),
632+
[...safePackedManifestEntries, "package/dist/other.js"],
633+
),
634+
/@razroo\/ray-sdk package\.json exports\["\."\]\.default must match package\.json main/,
635+
);
636+
});
637+
617638
test("assertPackedPackageManifest rejects local-only dependencies and package scripts", () => {
618639
assert.throws(
619640
() =>

0 commit comments

Comments
 (0)