Skip to content

Commit 64774b8

Browse files
committed
refactor: migrate to @pnpmfiles/nolyfill
Also add a dependency on `rollup` to `vite-plugin-top-level-await`.
1 parent 5ec7d2f commit 64774b8

File tree

3 files changed

+18
-202
lines changed

3 files changed

+18
-202
lines changed

.pnpmfile.cjs

Lines changed: 1 addition & 196 deletions
Original file line numberDiff line numberDiff line change
@@ -1,197 +1,2 @@
11
// @ts-check
2-
3-
/// PNPM Typedefs.
4-
// From <https://github.com/pnpm/pnpm/blob/eeb76cd1d0a3133d71d96de5646e305f34474652/hooks/pnpmfile/src/Hooks.ts> & <https://github.com/pnpm/pnpm/blob/d500d9f12e8819bf2659abece126938fb3a9ac87/packages/types/src/package.ts>.
5-
6-
const VERBOSE = false;
7-
8-
/**
9-
* A local `package.json` or a remote manifest from a registry as deserialized JSON.
10-
*
11-
* @typedef {Object} Pkg
12-
* @property {string?} name
13-
* @property {string?} version
14-
* @property {Record<string, string>?} dependencies
15-
*/
16-
17-
/**
18-
* A context object passed to hooks.
19-
* Currently contains naught but a logger.
20-
*
21-
* @typedef {Object} HookContext
22-
* @property {(message: string) => void} log
23-
*/
24-
25-
/// Ported code from the Yarn plugin.
26-
27-
/**
28-
* A full list of nolyfilled packages.
29-
*
30-
* Based on <https://github.com/wojtekmaj/yarn-plugin-nolyfill/blob/main/src/index.ts>.
31-
* Keep in sync with <https://github.com/SukkaW/nolyfill/blob/master/packages/tools/cli/src/all-packages.ts>.
32-
* Do note that nolyfill doesn't use CD, so check that the versions listed there have been published.
33-
*
34-
* @type {string[]}
35-
*/
36-
const allPackages = [
37-
"abab",
38-
"array-buffer-byte-length",
39-
"array-flatten",
40-
"array-includes",
41-
"array.from",
42-
"array.of",
43-
"array.prototype.at",
44-
"array.prototype.every",
45-
"array.prototype.find",
46-
"array.prototype.findlast",
47-
"array.prototype.findlastindex",
48-
"array.prototype.flat",
49-
"array.prototype.flatmap",
50-
"array.prototype.flatmap",
51-
"array.prototype.foreach",
52-
"array.prototype.reduce",
53-
"array.prototype.toreversed",
54-
"array.prototype.tosorted",
55-
"arraybuffer.prototype.slice",
56-
"assert",
57-
"asynciterator.prototype",
58-
"available-typed-arrays",
59-
"deep-equal",
60-
"deep-equal-json",
61-
"define-properties",
62-
"es-aggregate-error",
63-
"es-iterator-helpers",
64-
"es-set-tostringtag",
65-
"es6-object-assign",
66-
"function-bind",
67-
"function.prototype.name",
68-
"get-symbol-description",
69-
"globalthis",
70-
"gopd",
71-
"harmony-reflect",
72-
"has",
73-
"has-property-descriptors",
74-
"has-proto",
75-
"has-symbols",
76-
"has-tostringtag",
77-
"hasown",
78-
"internal-slot",
79-
"is-arguments",
80-
"is-array-buffer",
81-
"is-core-module",
82-
"is-date-object",
83-
"is-generator-function",
84-
"is-nan",
85-
"is-regex",
86-
"is-shared-array-buffer",
87-
"is-string",
88-
"is-symbol",
89-
"is-typed-array",
90-
"is-weakref",
91-
"isarray",
92-
"iterator.prototype",
93-
"json-stable-stringify",
94-
"jsonify",
95-
"number-is-nan",
96-
"object-is",
97-
"object-keys",
98-
"object.assign",
99-
"object.entries",
100-
"object.fromentries",
101-
"object.getownpropertydescriptors",
102-
"object.groupby",
103-
"object.hasown",
104-
"object.values",
105-
"promise.allsettled",
106-
"promise.any",
107-
"reflect.getprototypeof",
108-
"reflect.ownkeys",
109-
"regexp.prototype.flags",
110-
"safe-array-concat",
111-
"safe-buffer",
112-
"safe-regex-test",
113-
"safer-buffer",
114-
"set-function-length",
115-
"side-channel",
116-
"string.prototype.at",
117-
"string.prototype.codepointat",
118-
"string.prototype.includes",
119-
"string.prototype.matchall",
120-
"string.prototype.padend",
121-
"string.prototype.padstart",
122-
"string.prototype.repeat",
123-
"string.prototype.replaceall",
124-
"string.prototype.split",
125-
"string.prototype.startswith",
126-
"string.prototype.trim",
127-
"string.prototype.trimend",
128-
"string.prototype.trimleft",
129-
"string.prototype.trimright",
130-
"string.prototype.trimstart",
131-
"typed-array-buffer",
132-
"typed-array-byte-length",
133-
"typed-array-byte-offset",
134-
"typed-array-length",
135-
"typedarray",
136-
"typedarray.prototype.slice",
137-
"unbox-primitive",
138-
"util.promisify",
139-
"which-boxed-primitive",
140-
"which-typed-array",
141-
];
142-
143-
/**
144-
* A map of all nolyfilled packages.
145-
* The keys are the original package names, the values are the nolyfilled package names.
146-
*
147-
* @type {Map<string, string>}
148-
*/
149-
const PATCHES = new Map(allPackages.map((name) => [name, `@nolyfill/${name}`]));
150-
151-
/// Wiring code (pnpm specific)
152-
153-
/**
154-
* @param {Pkg} pkg - The package read.
155-
* @param {HookContext} context - The context of the hook.
156-
* @returns {Pkg} - The package to use.
157-
*/
158-
function readPackage(pkg, context) {
159-
// Not really necessary, but I prefer to keep the original package unmodified.
160-
const newPkg = { ...pkg };
161-
162-
// If the package has dependencies, check if any of them need to be nolyfilled.
163-
if (newPkg.dependencies) {
164-
// Iterate over all dependencies.
165-
for (const name of Object.keys(newPkg.dependencies)) {
166-
// Get the possible nolyfill package name.
167-
const nolyfill = PATCHES.get(name);
168-
169-
// Check if there is nolyfill for the package.
170-
if (nolyfill !== undefined) {
171-
// Replace the original package with the nolyfill.
172-
newPkg.dependencies[name] = `npm:${nolyfill}@^1`;
173-
174-
if (VERBOSE) {
175-
// Tell the user that the package has been nolyfilled.
176-
context.log(`${name} => ${nolyfill}`);
177-
}
178-
}
179-
}
180-
}
181-
182-
// Return the (possibly modified) package.
183-
return newPkg;
184-
}
185-
186-
/// Exports
187-
188-
/**
189-
* A pnpmfile allows you to use hooks to modify the behavior of pnpm.
190-
*
191-
* From <https://pnpm.io/pnpmfile>.
192-
*/
193-
module.exports = {
194-
hooks: {
195-
readPackage,
196-
},
197-
};
2+
module.exports = require("./node_modules/.pnpm-config/@pnpmfiles/nolyfill/.pnpmfile.cjs");

pnpm-lock.yaml

Lines changed: 5 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pnpm-workspace.yaml

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,6 @@ ignorePatchFailures: false
1010

1111
hoist: false
1212

13-
peerDependencyRules:
14-
allowedVersions:
15-
eslint: ^9.0.0
16-
1713
onlyBuiltDependencies:
1814
- "@swc/core"
1915
- esbuild
@@ -26,6 +22,15 @@ ignoredBuiltDependencies:
2622
overrides:
2723
vitest>jsdom: "-"
2824

25+
peerDependencyRules:
26+
allowedVersions:
27+
eslint: ^9.0.0
28+
29+
packageExtensions:
30+
vite-plugin-top-level-await:
31+
peerDependencies:
32+
rollup: "*"
33+
2934
patchedDependencies:
3035
eslint-config-sheriff: patches/eslint-config-sheriff.patch
3136

@@ -124,3 +129,6 @@ catalog:
124129
workbox-window: ^7.3.0
125130
zod: ^3.24.2
126131
zod-validation-error: ^3.4.0
132+
133+
configDependencies:
134+
"@pnpmfiles/nolyfill": 0.0.1+sha512-xP8Yijxn1ej9e9hwNssvofdmmlC91kCWtkpRGkDawxvulO2zebnSGiWN5WseRT66tfSgPGyyWHCfER3QyLv0GA==

0 commit comments

Comments
 (0)