bare-module-traverse 2.5.1 → 2.5.2
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.d.ts +4 -3
- package/index.js +113 -45
- package/lib/resolve/bare.js +4 -1
- package/lib/resolve/node.js +4 -1
- package/package.json +1 -1
package/index.d.ts
CHANGED
|
@@ -35,6 +35,7 @@ type AliasableExtension =
|
|
|
35
35
|
|
|
36
36
|
interface TraverseOptions extends ResolveOptions {
|
|
37
37
|
defaultType?: number
|
|
38
|
+
artifacts?: boolean
|
|
38
39
|
aliases?: Record<string, AliasableExtension>
|
|
39
40
|
/**
|
|
40
41
|
* @param entry - The import to resolve, as produced by `bare-module-lexer`.
|
|
@@ -83,7 +84,7 @@ declare function traverse(
|
|
|
83
84
|
declare function traverse(
|
|
84
85
|
entry: URL,
|
|
85
86
|
readModule: (url: URL) => Promise<Buffer | string | null>,
|
|
86
|
-
listPrefix?: (url: URL) => AsyncIterable<URL>,
|
|
87
|
+
listPrefix?: (url: URL, expand: boolean) => AsyncIterable<URL>,
|
|
87
88
|
probeModule?: (url: URL) => Promise<boolean | undefined>,
|
|
88
89
|
resolveModule?: (url: URL) => Promise<URL>
|
|
89
90
|
): AsyncIterable<Dependency>
|
|
@@ -92,7 +93,7 @@ declare function traverse(
|
|
|
92
93
|
entry: URL,
|
|
93
94
|
opts: TraverseOptions,
|
|
94
95
|
readModule: (url: URL) => Buffer | string | null,
|
|
95
|
-
listPrefix?: (url: URL) => Iterable<URL>,
|
|
96
|
+
listPrefix?: (url: URL, expand: true) => Iterable<URL>,
|
|
96
97
|
probeModule?: (url: URL) => boolean | undefined,
|
|
97
98
|
resolveModule?: (url: URL) => URL
|
|
98
99
|
): Iterable<Dependency>
|
|
@@ -101,7 +102,7 @@ declare function traverse(
|
|
|
101
102
|
entry: URL,
|
|
102
103
|
opts: TraverseOptions,
|
|
103
104
|
readModule: (url: URL) => Promise<Buffer | string | null>,
|
|
104
|
-
listPrefix?: (url: URL) => AsyncIterable<URL>,
|
|
105
|
+
listPrefix?: (url: URL, expand: true) => AsyncIterable<URL>,
|
|
105
106
|
probeModule?: (url: URL) => Promise<boolean | undefined>,
|
|
106
107
|
resolveModule?: (url: URL) => Promise<URL>
|
|
107
108
|
): AsyncIterable<Dependency>
|
package/index.js
CHANGED
|
@@ -43,7 +43,7 @@ module.exports = exports = function traverse(
|
|
|
43
43
|
|
|
44
44
|
return {
|
|
45
45
|
*[Symbol.iterator]() {
|
|
46
|
-
const artifacts = { addons: [], assets: [] }
|
|
46
|
+
const artifacts = opts.artifacts === false ? null : { addons: [], assets: [] }
|
|
47
47
|
|
|
48
48
|
const visited = opts.visited || new Set()
|
|
49
49
|
|
|
@@ -66,9 +66,13 @@ module.exports = exports = function traverse(
|
|
|
66
66
|
const result = []
|
|
67
67
|
|
|
68
68
|
if (typeof listPrefix === 'function') {
|
|
69
|
-
|
|
69
|
+
const listed = listPrefix(value.prefix, value.expand)
|
|
70
|
+
|
|
71
|
+
for (const url of listed) {
|
|
70
72
|
result.push(url)
|
|
71
73
|
}
|
|
74
|
+
|
|
75
|
+
result.resolved = listed.resolved === true
|
|
72
76
|
} else {
|
|
73
77
|
if (readModule(value.prefix) !== null) {
|
|
74
78
|
result.push(value.prefix)
|
|
@@ -101,7 +105,7 @@ module.exports = exports = function traverse(
|
|
|
101
105
|
},
|
|
102
106
|
|
|
103
107
|
async *[Symbol.asyncIterator]() {
|
|
104
|
-
const artifacts = { addons: [], assets: [] }
|
|
108
|
+
const artifacts = opts.artifacts === false ? null : { addons: [], assets: [] }
|
|
105
109
|
|
|
106
110
|
const visited = opts.visited || new Set()
|
|
107
111
|
|
|
@@ -124,9 +128,13 @@ module.exports = exports = function traverse(
|
|
|
124
128
|
const result = []
|
|
125
129
|
|
|
126
130
|
if (typeof listPrefix === 'function') {
|
|
127
|
-
|
|
131
|
+
const listed = listPrefix(value.prefix, value.expand)
|
|
132
|
+
|
|
133
|
+
for await (const url of listed) {
|
|
128
134
|
result.push(url)
|
|
129
135
|
}
|
|
136
|
+
|
|
137
|
+
result.resolved = listed.resolved === true
|
|
130
138
|
} else {
|
|
131
139
|
if ((await readModule(value.prefix)) !== null) {
|
|
132
140
|
result.push(value.prefix)
|
|
@@ -192,6 +200,9 @@ exports.module = function* (url, source, attributes, artifacts, visited, opts =
|
|
|
192
200
|
|
|
193
201
|
if (probed !== undefined) opts = { ...opts, probed: undefined }
|
|
194
202
|
|
|
203
|
+
if (opts.packages === undefined) opts = { ...opts, packages: new Map() }
|
|
204
|
+
if (opts.prefixes === undefined) opts = { ...opts, prefixes: new Map() }
|
|
205
|
+
|
|
195
206
|
attributes = attributes || {}
|
|
196
207
|
|
|
197
208
|
const artifact = asset === true || moduleType(url, attributes, null, opts) === constants.ADDON
|
|
@@ -225,20 +236,16 @@ exports.module = function* (url, source, attributes, artifacts, visited, opts =
|
|
|
225
236
|
let info = null
|
|
226
237
|
|
|
227
238
|
if (url.protocol !== 'data:') {
|
|
228
|
-
|
|
229
|
-
const source = yield { module: packageURL, artifact: false }
|
|
230
|
-
|
|
231
|
-
if (source !== null) {
|
|
232
|
-
info = JSON.parse(source)
|
|
239
|
+
const scope = yield* lookupPackage(url, opts)
|
|
233
240
|
|
|
234
|
-
|
|
241
|
+
if (scope !== null) {
|
|
242
|
+
info = scope.info
|
|
235
243
|
|
|
236
|
-
|
|
237
|
-
children: exports.package(packageURL, source, artifacts, visited, opts),
|
|
238
|
-
deferred: false
|
|
239
|
-
}
|
|
244
|
+
imports['#package'] = scope.url.href
|
|
240
245
|
|
|
241
|
-
|
|
246
|
+
yield {
|
|
247
|
+
children: exports.package(scope.url, scope.source, artifacts, visited, opts),
|
|
248
|
+
deferred: false
|
|
242
249
|
}
|
|
243
250
|
}
|
|
244
251
|
}
|
|
@@ -266,7 +273,7 @@ exports.module = function* (url, source, attributes, artifacts, visited, opts =
|
|
|
266
273
|
...opts,
|
|
267
274
|
referrerType: type
|
|
268
275
|
})
|
|
269
|
-
} else if (type === constants.ADDON) {
|
|
276
|
+
} else if (type === constants.ADDON && artifacts !== null) {
|
|
270
277
|
yield* exports.addons(url, artifacts, visited, opts)
|
|
271
278
|
}
|
|
272
279
|
}
|
|
@@ -308,7 +315,7 @@ exports.package = function* (url, source, artifacts, visited, opts = {}) {
|
|
|
308
315
|
}
|
|
309
316
|
}
|
|
310
317
|
|
|
311
|
-
if (info.assets) {
|
|
318
|
+
if (info.assets && artifacts !== null) {
|
|
312
319
|
yield {
|
|
313
320
|
children: exports.assets(info.assets, url, artifacts, visited, opts),
|
|
314
321
|
deferred: false
|
|
@@ -349,15 +356,17 @@ exports.preresolved = function* (url, source, resolutions, artifacts, visited, o
|
|
|
349
356
|
deferred: false
|
|
350
357
|
}
|
|
351
358
|
} else if (asset) {
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
359
|
+
if (artifacts !== null) {
|
|
360
|
+
addURL(artifacts.assets, url)
|
|
361
|
+
|
|
362
|
+
yield {
|
|
363
|
+
children: exports.module(url, null, {}, artifacts, visited, {
|
|
364
|
+
...opts,
|
|
365
|
+
asset: true,
|
|
366
|
+
referrerType: type
|
|
367
|
+
}),
|
|
368
|
+
deferred: true
|
|
369
|
+
}
|
|
361
370
|
}
|
|
362
371
|
} else if (
|
|
363
372
|
url.protocol !== builtinProtocol &&
|
|
@@ -465,7 +474,8 @@ function* resolveImport(entry, specifier, condition, parentURL, imports, artifac
|
|
|
465
474
|
builtinProtocol = 'builtin:',
|
|
466
475
|
linkedProtocol = 'linked:',
|
|
467
476
|
deferredProtocol = 'deferred:',
|
|
468
|
-
deferUnresolved = false
|
|
477
|
+
deferUnresolved = false,
|
|
478
|
+
prefixes = new Map()
|
|
469
479
|
} = opts
|
|
470
480
|
|
|
471
481
|
const matchedConditions = []
|
|
@@ -503,31 +513,55 @@ function* resolveImport(entry, specifier, condition, parentURL, imports, artifac
|
|
|
503
513
|
resolved = true
|
|
504
514
|
} else if (condition === 'asset') {
|
|
505
515
|
const prefix = url
|
|
516
|
+
const expand = artifacts !== null
|
|
506
517
|
|
|
507
|
-
let
|
|
518
|
+
let expanded = prefixes.get(prefix.href)
|
|
508
519
|
|
|
509
|
-
|
|
510
|
-
const
|
|
520
|
+
if (expanded === undefined) {
|
|
521
|
+
const listed = yield { prefix, expand }
|
|
511
522
|
|
|
512
|
-
|
|
523
|
+
const urls = []
|
|
513
524
|
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
525
|
+
let prefixResolution = null
|
|
526
|
+
let found = false
|
|
527
|
+
|
|
528
|
+
for (const url of listed) {
|
|
529
|
+
found = true
|
|
530
|
+
|
|
531
|
+
if (expand === false) break
|
|
532
|
+
|
|
533
|
+
const resolution = listed.resolved === true ? url : yield* postresolve(url)
|
|
534
|
+
|
|
535
|
+
if (url.href === prefix.href) prefixResolution = resolution
|
|
536
|
+
|
|
537
|
+
yield {
|
|
538
|
+
children: exports.module(resolution, null, {}, artifacts, visited, {
|
|
539
|
+
...opts,
|
|
540
|
+
asset: true
|
|
541
|
+
}),
|
|
542
|
+
deferred: true
|
|
543
|
+
}
|
|
544
|
+
|
|
545
|
+
urls.push(resolution)
|
|
520
546
|
}
|
|
521
547
|
|
|
522
|
-
|
|
548
|
+
if (found) {
|
|
549
|
+
expanded = { resolution: prefixResolution || (yield* postresolve(prefix)), urls }
|
|
523
550
|
|
|
524
|
-
|
|
551
|
+
prefixes.set(prefix.href, expanded)
|
|
552
|
+
}
|
|
525
553
|
}
|
|
526
554
|
|
|
527
|
-
if (
|
|
528
|
-
|
|
555
|
+
if (expanded !== undefined) {
|
|
556
|
+
if (expand) {
|
|
557
|
+
for (const url of expanded.urls) addURL(artifacts.assets, url)
|
|
558
|
+
}
|
|
559
|
+
|
|
560
|
+
resolution = expanded.resolution
|
|
529
561
|
|
|
530
562
|
addResolution(imports, specifier, matchedConditions, resolution)
|
|
563
|
+
|
|
564
|
+
resolved = true
|
|
531
565
|
}
|
|
532
566
|
} else if (
|
|
533
567
|
condition === 'addon' ||
|
|
@@ -586,7 +620,7 @@ function* resolveImport(entry, specifier, condition, parentURL, imports, artifac
|
|
|
586
620
|
}
|
|
587
621
|
|
|
588
622
|
if (resolved) {
|
|
589
|
-
if (condition === 'addon') addURL(artifacts.addons, resolution)
|
|
623
|
+
if (condition === 'addon' && artifacts !== null) addURL(artifacts.addons, resolution)
|
|
590
624
|
|
|
591
625
|
resolutions++
|
|
592
626
|
}
|
|
@@ -632,8 +666,10 @@ exports.addons = function* (parentURL, artifacts, visited, opts = {}) {
|
|
|
632
666
|
|
|
633
667
|
prefix.pathname = prefix.pathname.replace(ADDON_EXTENSION, '') + '/'
|
|
634
668
|
|
|
635
|
-
|
|
636
|
-
|
|
669
|
+
const listed = yield { prefix, expand: true }
|
|
670
|
+
|
|
671
|
+
for (const url of listed) {
|
|
672
|
+
const resolution = listed.resolved === true ? url : yield* postresolve(url)
|
|
637
673
|
|
|
638
674
|
yield {
|
|
639
675
|
children: exports.module(resolution, null, {}, artifacts, visited, opts),
|
|
@@ -698,7 +734,7 @@ exports.patternMatches = function* patternMatches(pattern, parentURL, matches, o
|
|
|
698
734
|
|
|
699
735
|
const prefix = new URL(patternBase, parentURL)
|
|
700
736
|
|
|
701
|
-
for (const url of yield { prefix }) {
|
|
737
|
+
for (const url of yield { prefix, expand: true }) {
|
|
702
738
|
if (patternIndex === -1) {
|
|
703
739
|
if (patternNegate) removeURL(matches, url)
|
|
704
740
|
else addURL(matches, url)
|
|
@@ -735,6 +771,38 @@ exports.patternMatches = function* patternMatches(pattern, parentURL, matches, o
|
|
|
735
771
|
return matches
|
|
736
772
|
}
|
|
737
773
|
|
|
774
|
+
function* lookupPackage(url, opts) {
|
|
775
|
+
const { packages = new Map() } = opts
|
|
776
|
+
|
|
777
|
+
const pending = []
|
|
778
|
+
|
|
779
|
+
for (const packageURL of lookupPackageScope(url, opts)) {
|
|
780
|
+
const scope = packages.get(packageURL.href)
|
|
781
|
+
|
|
782
|
+
if (scope !== undefined) {
|
|
783
|
+
for (const href of pending) packages.set(href, scope)
|
|
784
|
+
|
|
785
|
+
return scope
|
|
786
|
+
}
|
|
787
|
+
|
|
788
|
+
pending.push(packageURL.href)
|
|
789
|
+
|
|
790
|
+
const source = yield { module: packageURL, artifact: false }
|
|
791
|
+
|
|
792
|
+
if (source !== null) {
|
|
793
|
+
const scope = { url: packageURL, source, info: JSON.parse(source) }
|
|
794
|
+
|
|
795
|
+
for (const href of pending) packages.set(href, scope)
|
|
796
|
+
|
|
797
|
+
return scope
|
|
798
|
+
}
|
|
799
|
+
}
|
|
800
|
+
|
|
801
|
+
for (const href of pending) packages.set(href, null)
|
|
802
|
+
|
|
803
|
+
return null
|
|
804
|
+
}
|
|
805
|
+
|
|
738
806
|
function* postresolve(url) {
|
|
739
807
|
return (yield { resolution: url }) || url
|
|
740
808
|
}
|
package/lib/resolve/bare.js
CHANGED
|
@@ -5,6 +5,7 @@ const runtime = require('../runtime')
|
|
|
5
5
|
module.exports = function (entry, parentURL, opts = {}) {
|
|
6
6
|
const { linked = false, host = runtime.host, hosts = [host] } = opts
|
|
7
7
|
|
|
8
|
+
let directories = false
|
|
8
9
|
let extensions
|
|
9
10
|
let conditions = hosts.map((host) => ['bare', 'node', ...host.split('-')])
|
|
10
11
|
|
|
@@ -23,6 +24,7 @@ module.exports = function (entry, parentURL, opts = {}) {
|
|
|
23
24
|
|
|
24
25
|
if (entry.type & lex.constants.ASSET) {
|
|
25
26
|
conditions = conditions.map((conditions) => ['asset', ...conditions])
|
|
27
|
+
directories = true
|
|
26
28
|
} else {
|
|
27
29
|
extensions = ['.js', '.cjs', '.mjs', '.ts', '.cts', '.mts', '.json', '.bare', '.node']
|
|
28
30
|
|
|
@@ -36,6 +38,7 @@ module.exports = function (entry, parentURL, opts = {}) {
|
|
|
36
38
|
return resolve.module(entry.specifier, parentURL, {
|
|
37
39
|
...opts,
|
|
38
40
|
extensions,
|
|
39
|
-
conditions
|
|
41
|
+
conditions,
|
|
42
|
+
directories
|
|
40
43
|
})
|
|
41
44
|
}
|
package/lib/resolve/node.js
CHANGED
|
@@ -5,6 +5,7 @@ const runtime = require('../runtime')
|
|
|
5
5
|
module.exports = function (entry, parentURL, opts = {}) {
|
|
6
6
|
const { host = runtime.host, hosts = [host] } = opts
|
|
7
7
|
|
|
8
|
+
let directories = false
|
|
8
9
|
let extensions
|
|
9
10
|
let conditions = hosts.map((host) => ['node', ...host.split('-')])
|
|
10
11
|
|
|
@@ -22,6 +23,7 @@ module.exports = function (entry, parentURL, opts = {}) {
|
|
|
22
23
|
|
|
23
24
|
if (entry.type & lex.constants.ASSET) {
|
|
24
25
|
conditions = conditions.map((conditions) => ['asset', ...conditions])
|
|
26
|
+
directories = true
|
|
25
27
|
} else if (entry.type & lex.constants.REQUIRE) {
|
|
26
28
|
extensions = ['.js', '.json', '.node']
|
|
27
29
|
conditions = conditions.map((conditions) => ['require', ...conditions])
|
|
@@ -32,6 +34,7 @@ module.exports = function (entry, parentURL, opts = {}) {
|
|
|
32
34
|
return resolve.module(entry.specifier, parentURL, {
|
|
33
35
|
...opts,
|
|
34
36
|
extensions,
|
|
35
|
-
conditions
|
|
37
|
+
conditions,
|
|
38
|
+
directories
|
|
36
39
|
})
|
|
37
40
|
}
|