@gjsify/resolve-npm 0.1.7 → 0.1.9

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.
@@ -0,0 +1,159 @@
1
+ /**
2
+ * Map from global identifier → bare-specifier register subpath.
3
+ *
4
+ * Used by the `@gjsify/cli` `--globals` flag (via `@gjsify/esbuild-plugin-gjsify/globals`)
5
+ * to resolve the user's explicit list of globals into the set of `/register`
6
+ * modules that must be injected into the bundle.
7
+ *
8
+ * The register paths use bare specifiers ("fetch/register/fetch" rather than
9
+ * "@gjsify/fetch/register/fetch") so they go through the normal ALIASES_WEB_FOR_GJS
10
+ * / ALIASES_WEB_FOR_NODE resolution — which means they become no-ops on Node
11
+ * (where native globals already exist) and resolve to the real
12
+ * `@gjsify/<pkg>/register/<subpath>` modules on GJS.
13
+ *
14
+ * Granular subpaths (e.g. "dom-events/register/event-target" vs "dom-events/register")
15
+ * ensure that --globals auto injects only the register code for identifiers
16
+ * actually referenced in the bundle, keeping unused globals out of the output.
17
+ */
18
+ /**
19
+ * Pre-defined groups of identifiers that can be used as shorthand in `--globals`.
20
+ *
21
+ * - `node` — Node.js core globals: Buffer, Blob, File, process, URL, …
22
+ * - `web` — Web API globals: fetch, crypto, streams, AbortController, events, …
23
+ * - `dom` — DOM/GTK-only globals: document, HTMLCanvasElement, Image, …
24
+ *
25
+ * A group token in `--globals` expands to all individual identifiers in that
26
+ * group before the usual map lookup. Groups can be combined:
27
+ * --globals node,web,dom
28
+ */
29
+ export const GJS_GLOBALS_GROUPS = {
30
+ node: [
31
+ 'Buffer', 'Blob', 'File',
32
+ 'process', 'setImmediate', 'clearImmediate', 'queueMicrotask',
33
+ 'structuredClone', 'btoa', 'atob', 'URL', 'URLSearchParams',
34
+ ],
35
+ web: [
36
+ 'fetch', 'Headers', 'Request', 'Response',
37
+ 'FormData',
38
+ 'ReadableStream', 'WritableStream', 'TransformStream',
39
+ 'TextEncoderStream', 'TextDecoderStream',
40
+ 'ByteLengthQueuingStrategy', 'CountQueuingStrategy',
41
+ 'CompressionStream', 'DecompressionStream',
42
+ 'crypto',
43
+ 'AbortController', 'AbortSignal',
44
+ 'Event', 'EventTarget', 'CustomEvent', 'MessageEvent',
45
+ 'ErrorEvent', 'CloseEvent', 'ProgressEvent', 'UIEvent',
46
+ 'MouseEvent', 'PointerEvent', 'KeyboardEvent', 'WheelEvent', 'FocusEvent',
47
+ 'EventSource',
48
+ 'DOMException',
49
+ 'performance', 'PerformanceObserver',
50
+ 'XMLHttpRequest',
51
+ 'DOMParser',
52
+ 'AudioContext', 'webkitAudioContext', 'Audio', 'HTMLAudioElement',
53
+ 'GamepadEvent',
54
+ ],
55
+ dom: [
56
+ 'document', 'Image', 'HTMLCanvasElement', 'HTMLImageElement',
57
+ 'HTMLElement', 'MutationObserver', 'ResizeObserver', 'IntersectionObserver',
58
+ 'FontFace', 'matchMedia', 'location', 'navigator',
59
+ ],
60
+ };
61
+
62
+ export const GJS_GLOBALS_MAP = {
63
+ // --- Node.js globals (granular register subpaths) ----------------------
64
+ Buffer: '@gjsify/node-globals/register/buffer',
65
+ process: '@gjsify/node-globals/register/process',
66
+ setImmediate: '@gjsify/node-globals/register/timers',
67
+ clearImmediate: '@gjsify/node-globals/register/timers',
68
+ queueMicrotask: '@gjsify/node-globals/register/microtask',
69
+ structuredClone: '@gjsify/node-globals/register/structured-clone',
70
+ btoa: '@gjsify/node-globals/register/encoding',
71
+ atob: '@gjsify/node-globals/register/encoding',
72
+
73
+ // --- URL (shared Node + Web) -------------------------------------------
74
+ URL: '@gjsify/node-globals/register/url',
75
+ URLSearchParams: '@gjsify/node-globals/register/url',
76
+
77
+ // --- Blob / File (exposed via node:buffer and Web File API) ------------
78
+ Blob: '@gjsify/buffer/register',
79
+ File: '@gjsify/buffer/register',
80
+
81
+ // --- Fetch stack -------------------------------------------------------
82
+ fetch: 'fetch/register/fetch',
83
+ Headers: 'fetch/register/fetch',
84
+ Request: 'fetch/register/fetch',
85
+ Response: 'fetch/register/fetch',
86
+
87
+ // --- FormData ----------------------------------------------------------
88
+ FormData: '@gjsify/web-globals/register/formdata',
89
+
90
+ // --- WHATWG Streams (granular register subpaths) ------------------------
91
+ ReadableStream: 'web-streams/register/readable',
92
+ WritableStream: 'web-streams/register/writable',
93
+ TransformStream: 'web-streams/register/transform',
94
+ TextEncoderStream: 'web-streams/register/text-streams',
95
+ TextDecoderStream: 'web-streams/register/text-streams',
96
+ ByteLengthQueuingStrategy: 'web-streams/register/queuing',
97
+ CountQueuingStrategy: 'web-streams/register/queuing',
98
+
99
+ // --- Compression Streams -----------------------------------------------
100
+ CompressionStream: 'compression-streams/register',
101
+ DecompressionStream: 'compression-streams/register',
102
+
103
+ // --- WebCrypto ---------------------------------------------------------
104
+ crypto: 'webcrypto/register',
105
+
106
+ // --- Events + Abort (granular register subpaths) -----------------------
107
+ AbortController: 'abort-controller/register',
108
+ AbortSignal: 'abort-controller/register',
109
+ Event: 'dom-events/register/event-target',
110
+ EventTarget: 'dom-events/register/event-target',
111
+ CustomEvent: 'dom-events/register/custom-events',
112
+ MessageEvent: 'dom-events/register/custom-events',
113
+ ErrorEvent: 'dom-events/register/custom-events',
114
+ CloseEvent: 'dom-events/register/custom-events',
115
+ ProgressEvent: 'dom-events/register/custom-events',
116
+ UIEvent: 'dom-events/register/ui-events',
117
+ MouseEvent: 'dom-events/register/ui-events',
118
+ PointerEvent: 'dom-events/register/ui-events',
119
+ KeyboardEvent: 'dom-events/register/ui-events',
120
+ WheelEvent: 'dom-events/register/ui-events',
121
+ FocusEvent: 'dom-events/register/ui-events',
122
+ EventSource: 'eventsource/register',
123
+
124
+ // --- Performance -------------------------------------------------------
125
+ performance: '@gjsify/web-globals/register/performance',
126
+ PerformanceObserver: '@gjsify/web-globals/register/performance',
127
+
128
+ // --- DOMException ------------------------------------------------------
129
+ DOMException: 'dom-exception/register',
130
+
131
+ // --- XMLHttpRequest + URL.createObjectURL ------------------------------
132
+ XMLHttpRequest: '@gjsify/xmlhttprequest/register',
133
+
134
+ // --- DOMParser ---------------------------------------------------------
135
+ DOMParser: '@gjsify/domparser/register',
136
+
137
+ // --- Web Audio API (GStreamer backend) ----------------------------------
138
+ AudioContext: '@gjsify/webaudio/register',
139
+ webkitAudioContext: '@gjsify/webaudio/register',
140
+ Audio: '@gjsify/webaudio/register',
141
+ HTMLAudioElement: '@gjsify/webaudio/register',
142
+
143
+ // --- Gamepad API (libmanette backend) -----------------------------------
144
+ GamepadEvent: '@gjsify/gamepad/register',
145
+
146
+ // --- DOM elements (granular register subpaths) -------------------------
147
+ document: '@gjsify/dom-elements/register/document',
148
+ Image: '@gjsify/dom-elements/register/image',
149
+ HTMLCanvasElement: '@gjsify/dom-elements/register/canvas',
150
+ HTMLImageElement: '@gjsify/dom-elements/register/image',
151
+ HTMLElement: '@gjsify/dom-elements/register/document',
152
+ MutationObserver: '@gjsify/dom-elements/register/observers',
153
+ ResizeObserver: '@gjsify/dom-elements/register/observers',
154
+ IntersectionObserver: '@gjsify/dom-elements/register/observers',
155
+ FontFace: '@gjsify/dom-elements/register/font-face',
156
+ matchMedia: '@gjsify/dom-elements/register/match-media',
157
+ location: '@gjsify/dom-elements/register/location',
158
+ navigator: '@gjsify/dom-elements/register/navigator',
159
+ };
package/lib/index.mjs CHANGED
@@ -63,7 +63,14 @@ export const EXTERNALS_NPM = [
63
63
  ]
64
64
 
65
65
  /** General record of modules for Gjs */
66
- export const ALIASES_GENERAL_FOR_GJS = {}
66
+ export const ALIASES_GENERAL_FOR_GJS = {
67
+ // Third-party Node-only packages that must be stripped from GJS bundles.
68
+ // jsdom is pulled in by @excaliburjs/plugin-tiled as a fallback when
69
+ // DOMParser is not available; on GJS we provide DOMParser via
70
+ // @gjsify/domparser, so jsdom and its whatwg-url/webidl-conversions
71
+ // deps (which use SharedArrayBuffer — unavailable in GJS) are never needed.
72
+ 'jsdom': '@gjsify/empty',
73
+ }
67
74
 
68
75
  /** Record of Node.js modules (build in or not) and his replacement for Gjs */
69
76
  export const ALIASES_NODE_FOR_GJS = {
@@ -129,6 +136,7 @@ export const ALIASES_NODE_FOR_GJS = {
129
136
 
130
137
  /** Record of Web modules and his replacement for Gjs */
131
138
  export const ALIASES_WEB_FOR_GJS = {
139
+ // Bare specifiers (named imports, pure — no side-effects after Stage 2)
132
140
  'abort-controller': '@gjsify/abort-controller',
133
141
  'compression-streams': '@gjsify/compression-streams',
134
142
  'dom-events': '@gjsify/dom-events',
@@ -142,11 +150,56 @@ export const ALIASES_WEB_FOR_GJS = {
142
150
  'webgl': '@gjsify/webgl',
143
151
  'websocket': '@gjsify/websocket',
144
152
  'webstorage': '@gjsify/webstorage',
153
+
154
+ // /register subpaths (side-effect only — opt-in to global registration)
155
+ 'abort-controller/register': '@gjsify/abort-controller/register',
156
+ 'compression-streams/register': '@gjsify/compression-streams/register',
157
+ 'dom-events/register': '@gjsify/dom-events/register',
158
+ 'dom-events/register/event-target': '@gjsify/dom-events/register/event-target',
159
+ 'dom-events/register/custom-events': '@gjsify/dom-events/register/custom-events',
160
+ 'dom-events/register/ui-events': '@gjsify/dom-events/register/ui-events',
161
+ 'dom-exception/register': '@gjsify/dom-exception/register',
162
+ 'eventsource/register': '@gjsify/eventsource/register',
163
+ 'fetch/register': '@gjsify/fetch/register',
164
+ 'fetch/register/fetch': '@gjsify/fetch/register/fetch',
165
+ 'webcrypto/register': '@gjsify/webcrypto/register',
166
+ 'web-streams/register': '@gjsify/web-streams/register',
167
+ 'web-streams/register/readable': '@gjsify/web-streams/register/readable',
168
+ 'web-streams/register/writable': '@gjsify/web-streams/register/writable',
169
+ 'web-streams/register/transform': '@gjsify/web-streams/register/transform',
170
+ 'web-streams/register/text-streams': '@gjsify/web-streams/register/text-streams',
171
+ 'web-streams/register/queuing': '@gjsify/web-streams/register/queuing',
172
+
173
+ // xmlhttprequest + DOMParser
174
+ 'xmlhttprequest': '@gjsify/xmlhttprequest',
175
+ 'xmlhttprequest/register': '@gjsify/xmlhttprequest/register',
176
+ 'domparser': '@gjsify/domparser',
177
+ 'domparser/register': '@gjsify/domparser/register',
178
+
179
+ // Web Audio API (GStreamer backend)
180
+ 'webaudio': '@gjsify/webaudio',
181
+ 'webaudio/register': '@gjsify/webaudio/register',
182
+
183
+ // Gamepad API (libmanette backend)
184
+ 'gamepad': '@gjsify/gamepad',
185
+ 'gamepad/register': '@gjsify/gamepad/register',
145
186
  }
146
187
 
147
188
  /** General record of modules for Node */
148
189
  export const ALIASES_GENERAL_FOR_NODE = {
149
190
  '@gjsify/node-globals': '@gjsify/empty',
191
+ '@gjsify/node-globals/register': '@gjsify/empty',
192
+ '@gjsify/node-globals/register/process': '@gjsify/empty',
193
+ '@gjsify/node-globals/register/buffer': '@gjsify/empty',
194
+ '@gjsify/node-globals/register/timers': '@gjsify/empty',
195
+ '@gjsify/node-globals/register/encoding': '@gjsify/empty',
196
+ '@gjsify/node-globals/register/url': '@gjsify/empty',
197
+ '@gjsify/node-globals/register/structured-clone': '@gjsify/empty',
198
+ '@gjsify/node-globals/register/microtask': '@gjsify/empty',
199
+ '@gjsify/web-globals': '@gjsify/empty',
200
+ '@gjsify/web-globals/register': '@gjsify/empty',
201
+ '@gjsify/web-globals/register/performance': '@gjsify/empty',
202
+ '@gjsify/web-globals/register/formdata': '@gjsify/empty',
150
203
  }
151
204
 
152
205
  /** Record of Gjs modules (build in or not) and his replacement for Node */
@@ -156,6 +209,7 @@ export { ALIASES_GJS_FOR_NODE };
156
209
 
157
210
  /** Record of Web modules and his replacement for Node */
158
211
  export const ALIASES_WEB_FOR_NODE = {
212
+ // Bare specifiers → native re-exports (works for both named and side-effect imports)
159
213
  'abort-controller': '@gjsify/abort-controller/globals',
160
214
  'compression-streams': '@gjsify/compression-streams/globals',
161
215
  'dom-events': '@gjsify/dom-events/globals',
@@ -168,4 +222,68 @@ export const ALIASES_WEB_FOR_NODE = {
168
222
  'webgl': '@gjsify/webgl',
169
223
  'websocket': '@gjsify/websocket/globals',
170
224
  'webstorage': '@gjsify/webstorage',
225
+
226
+ // /register subpaths — no-op on Node (native globals are already set)
227
+ 'abort-controller/register': '@gjsify/empty',
228
+ 'compression-streams/register': '@gjsify/empty',
229
+ 'dom-events/register': '@gjsify/empty',
230
+ 'dom-events/register/event-target': '@gjsify/empty',
231
+ 'dom-events/register/custom-events': '@gjsify/empty',
232
+ 'dom-events/register/ui-events': '@gjsify/empty',
233
+ 'dom-exception/register': '@gjsify/empty',
234
+ 'eventsource/register': '@gjsify/empty',
235
+ 'fetch/register': '@gjsify/empty',
236
+ 'fetch/register/fetch': '@gjsify/empty',
237
+ 'webcrypto/register': '@gjsify/empty',
238
+ 'web-streams/register': '@gjsify/empty',
239
+ 'web-streams/register/readable': '@gjsify/empty',
240
+ 'web-streams/register/writable': '@gjsify/empty',
241
+ 'web-streams/register/transform': '@gjsify/empty',
242
+ 'web-streams/register/text-streams': '@gjsify/empty',
243
+ 'web-streams/register/queuing': '@gjsify/empty',
244
+ '@gjsify/abort-controller/register': '@gjsify/empty',
245
+ '@gjsify/compression-streams/register': '@gjsify/empty',
246
+ '@gjsify/dom-events/register': '@gjsify/empty',
247
+ '@gjsify/dom-events/register/event-target': '@gjsify/empty',
248
+ '@gjsify/dom-events/register/custom-events': '@gjsify/empty',
249
+ '@gjsify/dom-events/register/ui-events': '@gjsify/empty',
250
+ '@gjsify/dom-exception/register': '@gjsify/empty',
251
+ '@gjsify/eventsource/register': '@gjsify/empty',
252
+ '@gjsify/fetch/register': '@gjsify/empty',
253
+ '@gjsify/fetch/register/fetch': '@gjsify/empty',
254
+ '@gjsify/webcrypto/register': '@gjsify/empty',
255
+ '@gjsify/web-streams/register': '@gjsify/empty',
256
+ '@gjsify/web-streams/register/readable': '@gjsify/empty',
257
+ '@gjsify/web-streams/register/writable': '@gjsify/empty',
258
+ '@gjsify/web-streams/register/transform': '@gjsify/empty',
259
+ '@gjsify/web-streams/register/text-streams': '@gjsify/empty',
260
+ '@gjsify/web-streams/register/queuing': '@gjsify/empty',
261
+ '@gjsify/dom-elements/register': '@gjsify/empty',
262
+ '@gjsify/dom-elements/register/document': '@gjsify/empty',
263
+ '@gjsify/dom-elements/register/canvas': '@gjsify/empty',
264
+ '@gjsify/dom-elements/register/image': '@gjsify/empty',
265
+ '@gjsify/dom-elements/register/observers': '@gjsify/empty',
266
+ '@gjsify/dom-elements/register/font-face': '@gjsify/empty',
267
+ '@gjsify/dom-elements/register/match-media': '@gjsify/empty',
268
+ '@gjsify/dom-elements/register/location': '@gjsify/empty',
269
+ '@gjsify/dom-elements/register/navigator': '@gjsify/empty',
270
+ '@gjsify/buffer/register': '@gjsify/empty',
271
+
272
+ // xmlhttprequest + DOMParser — no-op on Node
273
+ 'xmlhttprequest': '@gjsify/empty',
274
+ 'xmlhttprequest/register': '@gjsify/empty',
275
+ '@gjsify/xmlhttprequest/register': '@gjsify/empty',
276
+ 'domparser': '@gjsify/empty',
277
+ 'domparser/register': '@gjsify/empty',
278
+ '@gjsify/domparser/register': '@gjsify/empty',
279
+
280
+ // Web Audio API — no-op on Node (experimental --experimental-web-audio not widely available)
281
+ 'webaudio': '@gjsify/empty',
282
+ 'webaudio/register': '@gjsify/empty',
283
+ '@gjsify/webaudio/register': '@gjsify/empty',
284
+
285
+ // Gamepad API — no-op on Node
286
+ 'gamepad': '@gjsify/empty',
287
+ 'gamepad/register': '@gjsify/empty',
288
+ '@gjsify/gamepad/register': '@gjsify/empty',
171
289
  }
package/package.json CHANGED
@@ -1,11 +1,19 @@
1
1
  {
2
2
  "name": "@gjsify/resolve-npm",
3
- "version": "0.1.7",
3
+ "version": "0.1.9",
4
4
  "description": "Resolve NPM package aliases",
5
5
  "type": "module",
6
6
  "main": "lib/index.mjs",
7
7
  "module": "lib/index.mjs",
8
8
  "types": "lib/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "types": "./lib/index.d.ts",
12
+ "default": "./lib/index.mjs"
13
+ },
14
+ "./globals-map": "./lib/globals-map.mjs",
15
+ "./package.json": "./package.json"
16
+ },
9
17
  "scripts": {
10
18
  "clear": "echo 'nothing to do'",
11
19
  "check": "true",