bare-module-traverse 2.1.1 → 2.2.0

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/README.md CHANGED
@@ -62,7 +62,10 @@ options = {
62
62
  aliases: {
63
63
  // Map an extension to a supported extension, e.g. `'.ts': '.js'`. The
64
64
  // aliased extension is used for module type detection, so `readModule()`
65
- // must return source compatible with that type.
65
+ // must return source compatible with that type. Aliased modules are also
66
+ // emitted with the aliased extension, and resolutions to them are
67
+ // rewritten to match, so `'.ts': '.js'` yields a `file:///foo.js`
68
+ // dependency rather than `file:///foo.ts`.
66
69
  },
67
70
  resolve: resolve.default
68
71
  }
package/index.d.ts CHANGED
@@ -21,6 +21,9 @@ type AliasableExtension =
21
21
  | '.js'
22
22
  | '.cjs'
23
23
  | '.mjs'
24
+ | '.ts'
25
+ | '.cts'
26
+ | '.mts'
24
27
  | '.json'
25
28
  | '.bundle'
26
29
  | '.bare'
package/index.js CHANGED
@@ -109,6 +109,26 @@ module.exports = exports = function traverse(entry, opts, readModule, listPrefix
109
109
  exports.constants = constants
110
110
  exports.resolve = resolve
111
111
 
112
+ exports.alias = function alias(url, opts = {}) {
113
+ const { aliases = null } = opts
114
+
115
+ if (aliases === null) return url
116
+
117
+ const match = url.pathname.match(/\.[a-z]+$/)
118
+
119
+ if (match === null) return url
120
+
121
+ const [extension] = match
122
+
123
+ if (extension in aliases === false) return url
124
+
125
+ url = new URL(url)
126
+
127
+ url.pathname = url.pathname.slice(0, -extension.length) + aliases[extension]
128
+
129
+ return url
130
+ }
131
+
112
132
  exports.module = function* (url, source, attributes, artifacts, visited, opts = {}) {
113
133
  const { resolutions = null, defaultType = constants.SCRIPT, aliases = null } = opts
114
134
 
@@ -200,7 +220,8 @@ exports.module = function* (url, source, attributes, artifacts, visited, opts =
200
220
  if (aliases !== null && extension in aliases) extension = aliases[extension]
201
221
 
202
222
  switch (extension) {
203
- case '.js': {
223
+ case '.js':
224
+ case '.ts': {
204
225
  const isESM =
205
226
  defaultType === constants.MODULE || (info !== null && info.type === 'module')
206
227
 
@@ -208,9 +229,11 @@ exports.module = function* (url, source, attributes, artifacts, visited, opts =
208
229
  break
209
230
  }
210
231
  case '.cjs':
232
+ case '.cts':
211
233
  type = constants.SCRIPT
212
234
  break
213
235
  case '.mjs':
236
+ case '.mts':
214
237
  type = constants.MODULE
215
238
  break
216
239
  case '.json':
@@ -242,7 +265,12 @@ exports.module = function* (url, source, attributes, artifacts, visited, opts =
242
265
  }
243
266
 
244
267
  yield {
245
- dependency: { url, source, imports: compressImportsMap(imports), lexer }
268
+ dependency: {
269
+ url: exports.alias(url, opts),
270
+ source,
271
+ imports: compressImportsMap(imports),
272
+ lexer
273
+ }
246
274
  }
247
275
 
248
276
  return true
@@ -317,7 +345,7 @@ exports.preresolved = function* (url, source, resolutions, artifacts, visited, o
317
345
 
318
346
  yield {
319
347
  dependency: {
320
- url,
348
+ url: exports.alias(url, opts),
321
349
  source,
322
350
  imports: compressImportsMap(imports),
323
351
  lexer: { imports: [] }
@@ -421,7 +449,7 @@ exports.imports = function* (parentURL, source, imports, artifacts, lexer, visit
421
449
  const source = yield { module: url }
422
450
 
423
451
  if (source !== null) {
424
- addResolution(imports, specifier, matchedConditions, url)
452
+ addResolution(imports, specifier, matchedConditions, exports.alias(url, opts))
425
453
 
426
454
  let attributes = entry.attributes
427
455
 
@@ -24,7 +24,7 @@ module.exports = function (entry, parentURL, opts = {}) {
24
24
  if (entry.type & lex.constants.ASSET) {
25
25
  conditions = conditions.map((conditions) => ['asset', ...conditions])
26
26
  } else {
27
- extensions = ['.js', '.cjs', '.mjs', '.json', '.bare', '.node']
27
+ extensions = ['.js', '.cjs', '.mjs', '.ts', '.cts', '.mts', '.json', '.bare', '.node']
28
28
 
29
29
  if (entry.type & lex.constants.REQUIRE) {
30
30
  conditions = conditions.map((conditions) => ['require', ...conditions])
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bare-module-traverse",
3
- "version": "2.1.1",
3
+ "version": "2.2.0",
4
4
  "description": "Low-level module graph traversal for Bare",
5
5
  "exports": {
6
6
  ".": {
@@ -55,7 +55,7 @@
55
55
  "homepage": "https://github.com/holepunchto/bare-module-traverse#readme",
56
56
  "dependencies": {
57
57
  "bare-addon-resolve": "^1.5.0",
58
- "bare-module-lexer": "^1.4.0",
58
+ "bare-module-lexer": "^1.6.0",
59
59
  "bare-module-resolve": "^1.7.0"
60
60
  },
61
61
  "devDependencies": {