Skip to content

Commit 3bcc64a

Browse files
committed
feat(esm): add Node.js ESM/CJS interop support
Add `export { x as 'module.exports' }` hint to all default exports and use .default accessor when requiring ESM modules: - maintained-node-versions - package-default-node-range - package-default-socket-categories - package-extensions - lifecycle-script-names The export hint documents intended ESM/CJS interop behavior while .default accessors handle frozen objects at runtime.
1 parent 1342817 commit 3bcc64a

7 files changed

Lines changed: 27 additions & 11 deletions

src/constants/node.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ let _maintainedNodeVersions:
2424
| undefined
2525
export function getMaintainedNodeVersions() {
2626
if (_maintainedNodeVersions === undefined) {
27-
_maintainedNodeVersions = require('#lib/maintained-node-versions')
27+
_maintainedNodeVersions = require('#lib/maintained-node-versions').default
2828
}
2929
return _maintainedNodeVersions
3030
}

src/constants/packages.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,8 @@ export const PACKAGE_DEFAULT_VERSION = '1.0.0'
2020
// Package default Node range.
2121
export function getPackageDefaultNodeRange(): string | undefined {
2222
if (_packageDefaultNodeRange === undefined) {
23-
_packageDefaultNodeRange = require('#lib/package-default-node-range')
23+
_packageDefaultNodeRange =
24+
require('#lib/package-default-node-range').default
2425
}
2526
return _packageDefaultNodeRange
2627
}
@@ -29,15 +30,15 @@ export function getPackageDefaultNodeRange(): string | undefined {
2930
export function getPackageDefaultSocketCategories() {
3031
if (_packageDefaultSocketCategories === undefined) {
3132
_packageDefaultSocketCategories =
32-
require('#lib/package-default-socket-categories')
33+
require('#lib/package-default-socket-categories').default
3334
}
3435
return _packageDefaultSocketCategories
3536
}
3637

3738
// Package extensions.
3839
export function getPackageExtensions(): Iterable<[string, unknown]> {
3940
if (_packageExtensions === undefined) {
40-
const exts = require('#lib/package-extensions')
41+
const exts = require('#lib/package-extensions').default
4142
_packageExtensions = Object.entries(exts)
4243
}
4344
return _packageExtensions
@@ -51,7 +52,7 @@ export function getNpmLifecycleEvent(): string | undefined {
5152
// Lifecycle script names.
5253
export function getLifecycleScriptNames(): string[] {
5354
if (_lifecycleScriptNames === undefined) {
54-
const scriptNamesSet = require('#lib/lifecycle-script-names')
55+
const scriptNamesSet = require('#lib/lifecycle-script-names').default
5556
_lifecycleScriptNames = Array.from(scriptNamesSet)
5657
}
5758
return _lifecycleScriptNames

src/lifecycle-script-names.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
* https://docs.npmjs.com/cli/v10/using-npm/scripts#life-cycle-scripts
66
*/
77

8-
export default new Set(
8+
const lifecycleScriptNames = new Set(
99
[
1010
'dependencies',
1111
'prepublishOnly',
@@ -21,3 +21,6 @@ export default new Set(
2121
].map(n => [`pre${n}`, n, `post${n}`]),
2222
].flat(),
2323
)
24+
25+
export default lifecycleScriptNames
26+
export { lifecycleScriptNames as 'module.exports' }

src/maintained-node-versions.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ const current = '22.20.0'
2222
const previous = '20.19.5'
2323
const last = '18.20.8'
2424

25-
export default ObjectFreeze(
25+
const maintainedNodeVersions = ObjectFreeze(
2626
Object.assign([last, previous, current, next], {
2727
current,
2828
last,
@@ -35,3 +35,6 @@ export default ObjectFreeze(
3535
next: string
3636
previous: string
3737
}
38+
39+
export default maintainedNodeVersions
40+
export { maintainedNodeVersions as 'module.exports' }

src/package-default-node-range.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,10 @@
22
* @fileoverview Default Node.js version range for packages.
33
*/
44

5-
const maintainedNodeVersions = require('#lib/maintained-node-versions')
5+
const maintainedNodeVersions = require('#lib/maintained-node-versions').default
66
const semver = require('./external/semver')
77

8-
export default `>=${semver.parse(maintainedNodeVersions.last).major}`
8+
const packageDefaultNodeRange = `>=${semver.parse(maintainedNodeVersions.last).major}`
9+
10+
export default packageDefaultNodeRange
11+
export { packageDefaultNodeRange as 'module.exports' }

src/package-default-socket-categories.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,7 @@
33
*/
44

55
// Default category for new packages
6-
export default Object.freeze(['cleanup'])
6+
const packageDefaultSocketCategories = Object.freeze(['cleanup'])
7+
8+
export default packageDefaultSocketCategories
9+
export { packageDefaultSocketCategories as 'module.exports' }

src/package-extensions.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ const { freeze: ObjectFreeze } = Object
99

1010
const yarnPkgExtensions = require('./external/@yarnpkg/extensions')
1111

12-
export default ObjectFreeze(
12+
const packageExtensions = ObjectFreeze(
1313
[
1414
yarnPkgExtensions.packageExtensions,
1515
[
@@ -50,3 +50,6 @@ export default ObjectFreeze(
5050
return 0
5151
}),
5252
)
53+
54+
export default packageExtensions
55+
export { packageExtensions as 'module.exports' }

0 commit comments

Comments
 (0)