bare-module 1.9.3 → 1.9.5
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/index.js +71 -29
- package/package.json +1 -1
- package/prebuilds/darwin-arm64/addon.bare +0 -0
package/index.js
CHANGED
|
@@ -29,6 +29,7 @@ const Module = module.exports = class Module {
|
|
|
29
29
|
static _builtins = Object.create(null)
|
|
30
30
|
static _imports = Object.create(null)
|
|
31
31
|
static _cache = Object.create(null)
|
|
32
|
+
static _bundles = Object.create(null)
|
|
32
33
|
|
|
33
34
|
static _onimport (specifier, assertions, referrerFilename, dynamic) {
|
|
34
35
|
const referrer = this._cache[referrerFilename]
|
|
@@ -82,7 +83,7 @@ const Module = module.exports = class Module {
|
|
|
82
83
|
source = null
|
|
83
84
|
}
|
|
84
85
|
|
|
85
|
-
|
|
86
|
+
let {
|
|
86
87
|
imports = this._imports,
|
|
87
88
|
protocol = this._protocolFor(specifier, this._protocols['file:']),
|
|
88
89
|
referrer = null,
|
|
@@ -91,6 +92,22 @@ const Module = module.exports = class Module {
|
|
|
91
92
|
|
|
92
93
|
if (this._cache[specifier]) return this._transform(this._cache[specifier], referrer, dynamic)
|
|
93
94
|
|
|
95
|
+
const bundle = this._bundleFor(specifier, protocol, source)
|
|
96
|
+
|
|
97
|
+
if (bundle) {
|
|
98
|
+
imports = { ...imports, ...bundle.imports }
|
|
99
|
+
|
|
100
|
+
protocol = new Protocol({
|
|
101
|
+
exists (filename) {
|
|
102
|
+
return bundle.exists(filename)
|
|
103
|
+
},
|
|
104
|
+
|
|
105
|
+
read (filename) {
|
|
106
|
+
return bundle.read(filename)
|
|
107
|
+
}
|
|
108
|
+
})
|
|
109
|
+
}
|
|
110
|
+
|
|
94
111
|
const module = this._cache[specifier] = new this(specifier)
|
|
95
112
|
|
|
96
113
|
let dirname = module.dirname
|
|
@@ -126,12 +143,28 @@ const Module = module.exports = class Module {
|
|
|
126
143
|
dirname = process.cwd()
|
|
127
144
|
}
|
|
128
145
|
|
|
129
|
-
|
|
146
|
+
let {
|
|
130
147
|
imports = this._imports,
|
|
131
148
|
protocol = this._protocols['file:'],
|
|
132
149
|
referrer = null
|
|
133
150
|
} = opts
|
|
134
151
|
|
|
152
|
+
const bundle = this._bundleFor(specifier, protocol)
|
|
153
|
+
|
|
154
|
+
if (bundle) {
|
|
155
|
+
imports = { ...imports, ...bundle.imports }
|
|
156
|
+
|
|
157
|
+
protocol = new Protocol({
|
|
158
|
+
exists (filename) {
|
|
159
|
+
return bundle.exists(filename)
|
|
160
|
+
},
|
|
161
|
+
|
|
162
|
+
read (filename) {
|
|
163
|
+
return bundle.read(filename)
|
|
164
|
+
}
|
|
165
|
+
})
|
|
166
|
+
}
|
|
167
|
+
|
|
135
168
|
const [resolved = null] = this._resolve(specifier, dirname, protocol, imports)
|
|
136
169
|
|
|
137
170
|
if (resolved === null) {
|
|
@@ -209,7 +242,7 @@ const Module = module.exports = class Module {
|
|
|
209
242
|
}
|
|
210
243
|
|
|
211
244
|
static * _resolveNodeModules (specifier, dirname, protocol) {
|
|
212
|
-
for (const nodeModules of this.
|
|
245
|
+
for (const nodeModules of this._resolveNodeModulesPaths(dirname)) {
|
|
213
246
|
const filename = path.join(nodeModules, specifier)
|
|
214
247
|
|
|
215
248
|
yield * this._resolveFile(filename, protocol)
|
|
@@ -217,7 +250,7 @@ const Module = module.exports = class Module {
|
|
|
217
250
|
}
|
|
218
251
|
}
|
|
219
252
|
|
|
220
|
-
static *
|
|
253
|
+
static * _resolveNodeModulesPaths (start) {
|
|
221
254
|
if (start === path.sep) return yield path.join(start, 'node_modules')
|
|
222
255
|
|
|
223
256
|
const parts = start.split(path.sep)
|
|
@@ -230,21 +263,44 @@ const Module = module.exports = class Module {
|
|
|
230
263
|
}
|
|
231
264
|
|
|
232
265
|
static _protocolFor (specifier, fallback = null) {
|
|
266
|
+
let protocol = fallback
|
|
267
|
+
|
|
233
268
|
const i = specifier.indexOf(':')
|
|
234
269
|
|
|
235
|
-
if (i
|
|
270
|
+
if (i >= 2) { // Allow drive letters in Windows paths
|
|
271
|
+
const name = specifier.slice(0, i + 1)
|
|
236
272
|
|
|
237
|
-
|
|
273
|
+
protocol = this._protocols[name] || fallback
|
|
238
274
|
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
throw errors.UNKNOWN_PROTOCOL(`Unknown protocol '${protocol}' in specifier '${specifier}'`)
|
|
275
|
+
if (protocol === null) {
|
|
276
|
+
throw errors.UNKNOWN_PROTOCOL(`Unknown protocol '${name}' in specifier '${specifier}'`)
|
|
242
277
|
}
|
|
243
|
-
|
|
244
|
-
return fallback
|
|
245
278
|
}
|
|
246
279
|
|
|
247
|
-
return
|
|
280
|
+
return protocol
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
static _bundleFor (specifier, protocol, source = null) {
|
|
284
|
+
let name = specifier
|
|
285
|
+
do {
|
|
286
|
+
if (path.extname(name) === '.bundle') {
|
|
287
|
+
break
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
name = path.dirname(name)
|
|
291
|
+
} while (name !== '/' && name !== '.')
|
|
292
|
+
|
|
293
|
+
if (path.extname(name) !== '.bundle') return null
|
|
294
|
+
|
|
295
|
+
let bundle = this._bundles[name]
|
|
296
|
+
|
|
297
|
+
if (bundle) return bundle
|
|
298
|
+
|
|
299
|
+
if (source === null || name !== specifier) source = protocol.read(name)
|
|
300
|
+
|
|
301
|
+
bundle = this._bundles[name] = Bundle.from(source).mount(name)
|
|
302
|
+
|
|
303
|
+
return bundle
|
|
248
304
|
}
|
|
249
305
|
|
|
250
306
|
static _transform (module, referrer = null, dynamic = false) {
|
|
@@ -299,8 +355,8 @@ Module._extensions['.js'] = function (module, source, referrer, protocol, import
|
|
|
299
355
|
// The package is explicitly declared as an ES module.
|
|
300
356
|
(module._info && module._info.type === 'module') ||
|
|
301
357
|
|
|
302
|
-
// The referrer is itself an ES module.
|
|
303
|
-
(referrer && referrer._type === 'esm')
|
|
358
|
+
// The source is a data: URI and the referrer is itself an ES module.
|
|
359
|
+
(protocol === this._protocols['data:'] && referrer && referrer._type === 'esm')
|
|
304
360
|
)
|
|
305
361
|
|
|
306
362
|
const loader = this._extensions[isESM ? '.mjs' : '.cjs']
|
|
@@ -392,28 +448,14 @@ Module._extensions['.node'] = function (module, source, referrer, protocol, impo
|
|
|
392
448
|
}
|
|
393
449
|
|
|
394
450
|
Module._extensions['.bundle'] = function (module, source, referrer, protocol, imports) {
|
|
395
|
-
if (source === null) source = protocol.read(module.filename)
|
|
396
|
-
|
|
397
451
|
if (typeof source === 'string') source = Buffer.from(source)
|
|
398
452
|
|
|
399
|
-
const bundle =
|
|
453
|
+
const bundle = this._bundleFor(module.filename, protocol, source)
|
|
400
454
|
|
|
401
455
|
module._type = 'bundle'
|
|
402
456
|
module._protocol = protocol
|
|
403
457
|
module._imports = imports
|
|
404
458
|
|
|
405
|
-
protocol = new Protocol({
|
|
406
|
-
exists (filename) {
|
|
407
|
-
return bundle.exists(filename)
|
|
408
|
-
},
|
|
409
|
-
|
|
410
|
-
read (filename) {
|
|
411
|
-
return bundle.read(filename)
|
|
412
|
-
}
|
|
413
|
-
})
|
|
414
|
-
|
|
415
|
-
imports = bundle.imports
|
|
416
|
-
|
|
417
459
|
module.exports = Module.load(bundle.main, bundle.read(bundle.main), { protocol, imports, referrer }).exports
|
|
418
460
|
}
|
|
419
461
|
|
package/package.json
CHANGED
|
Binary file
|