Skip to content

Commit dbf115d

Browse files
authored
Merge pull request #43 from jsenv/extension_automapping_fix
Extension automapping fix
2 parents 4ab6d68 + d717d03 commit dbf115d

23 files changed

Lines changed: 130 additions & 53 deletions

File tree

.github/workflows/performance_impact.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,6 @@ jobs:
3838
- name: Setup npm
3939
run: npm install
4040
- name: Report performance impact
41-
run: node ./.github/workflows/performance_impact/report_performance_impact.mjs
41+
run: node --expose-gc ./.github/workflows/performance_impact/report_performance_impact.mjs
4242
env:
4343
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

babel.config.cjs

Lines changed: 4 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,10 @@
11
/*
2-
* This file is used to configure a list of babel plugins as documented in
3-
* https://babeljs.io/docs/en/config-files
4-
*
5-
* During dev: babel plugins natively supported by browsers and Node.js are not used.
6-
* During build:
7-
* - When "runtimeSupport" is configured, babel plugins already supported by these runtime won't be used
8-
* See https://github.com/jsenv/jsenv-template-node-package/blob/main/script/build/build.mjs#L25
9-
* - Otherwise all babel plugins are use
2+
* This file configure the list of babel plugins enabled
3+
* in this codebase
104
*
5+
* Read more at https://github.com/jsenv/jsenv-core/tree/master/packages/jsenv-babel-preset
116
*/
127

13-
// "@babel/preset-env" transforms async function to generators
14-
// but it's verbose and slow compared to using promises, so we:
15-
// 1. Exclude "transform-async-to-generator", "transform-regenerator"
16-
// 2. Enable "babel-plugin-transform-async-to-promises"
17-
// See https://github.com/babel/babel/issues/8121
188
module.exports = {
19-
presets: [
20-
[
21-
"@babel/preset-env",
22-
{
23-
modules: false,
24-
exclude: ["transform-async-to-generator", "transform-regenerator"],
25-
},
26-
],
27-
],
28-
plugins: ["babel-plugin-transform-async-to-promises"],
9+
presets: ["@jsenv/babel-preset"],
2910
}

jsenv.config.mjs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,10 @@
1+
/*
2+
* This file exports configuration reused by jsenv scripts such as
3+
*
4+
* script/test/test.mjs
5+
* script/build/build.mjs
6+
*
7+
* Read more at https://github.com/jsenv/jsenv-core#jsenvconfigmjs
8+
*/
9+
110
export const projectDirectoryUrl = String(new URL("./", import.meta.url))

package.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@jsenv/importmap-node-module",
3-
"version": "2.3.1",
3+
"version": "2.3.2",
44
"description": "Generate importmap for node_modules",
55
"license": "MIT",
66
"repository": {
@@ -29,7 +29,7 @@
2929
"scripts": {
3030
"eslint-check": "node ./node_modules/eslint/bin/eslint.js .",
3131
"generate-importmap": "node ./script/importmap/generate_importmap.mjs",
32-
"measure-performances": "node ./script/performance/generate_performance_report.mjs --local",
32+
"measure-performances": "node --expose-gc ./script/performance/generate_performance_report.mjs --local",
3333
"dist": "npm run build",
3434
"build": "node --experimental-import-meta-resolve ./script/build/build.mjs",
3535
"test": "node ./script/test/test.mjs",
@@ -54,10 +54,10 @@
5454
"@babel/plugin-proposal-class-properties": "7.14.5",
5555
"@babel/plugin-proposal-decorators": "7.15.4",
5656
"@babel/plugin-syntax-jsx": "7.14.5",
57-
"@babel/preset-env": "7.15.6",
57+
"@jsenv/babel-preset": "1.1.0",
5858
"@jsenv/assert": "2.3.1",
5959
"@jsenv/codecov-upload": "3.5.0",
60-
"@jsenv/core": "22.0.3",
60+
"@jsenv/core": "22.2.0",
6161
"@jsenv/eslint-config": "16.0.6",
6262
"@jsenv/github-release-package": "1.2.3",
6363
"@jsenv/importmap-eslint-resolver": "5.1.2",

script/performance/measure_import/measure_import.mjs

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { fork } from "node:child_process"
1+
import { Worker } from "node:worker_threads"
22
import { fileURLToPath } from "node:url"
33
import {
44
measurePerformanceMultipleTimes,
@@ -7,21 +7,21 @@ import {
77
} from "@jsenv/performance-impact"
88

99
export const measureImport = async ({ iterations = 10 } = {}) => {
10-
const childProcessFileUrl = new URL(
11-
"./child_process_measuring_import.mjs",
10+
if (!global.gc) {
11+
throw new Error("missing --expose-gc")
12+
}
13+
const workerFileUrl = new URL(
14+
"./worker_measuring_import.mjs",
1215
import.meta.url,
1316
)
14-
const childProcessFilePath = fileURLToPath(childProcessFileUrl)
17+
const workerFilePath = fileURLToPath(workerFileUrl)
1518

1619
const metrics = await measurePerformanceMultipleTimes(
1720
async () => {
18-
const childProcess = fork(childProcessFilePath, {
19-
execArgv: ["--expose-gc"],
20-
})
21-
const { msEllapsed, heapUsed } = await new Promise((resolve) => {
22-
childProcess.on("message", (message) => {
23-
resolve(message)
24-
})
21+
const worker = new Worker(workerFilePath)
22+
const { msEllapsed, heapUsed } = await new Promise((resolve, reject) => {
23+
worker.on("message", resolve)
24+
worker.on("error", reject)
2525
})
2626

2727
return {

script/performance/measure_import/child_process_measuring_import.mjs renamed to script/performance/measure_import/worker_measuring_import.mjs

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,21 @@
1-
/* eslint-disable no-unused-vars */
2-
import { memoryUsage } from "process"
1+
import { parentPort } from "node:worker_threads"
2+
import { memoryUsage } from "node:process"
33

44
global.gc()
55
const beforeHeapUsed = memoryUsage().heapUsed
66
const beforeMs = Date.now()
77

8-
let namespace = await import(`../../../index.js?t=${Date.now()}`)
8+
let namespace = await import("@jsenv/importmap-node-module")
99

1010
const afterMs = Date.now()
11-
12-
const msEllapsed = afterMs - beforeMs
1311
const afterHeapUsed = memoryUsage().heapUsed
14-
15-
const heapUsed = afterHeapUsed - beforeHeapUsed
16-
process.send({ msEllapsed, heapUsed })
17-
12+
// eslint-disable-next-line no-unused-vars
1813
namespace = null
1914
global.gc()
15+
16+
const heapUsed = afterHeapUsed - beforeHeapUsed
17+
const msEllapsed = afterMs - beforeMs
18+
parentPort.postMessage({
19+
heapUsed,
20+
msEllapsed,
21+
})

src/internal/from-js/visitSourceFiles.js

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -310,15 +310,22 @@ const createImportResolver = ({
310310
importer,
311311
),
312312
})
313-
const packageDirectoryUrl = packageDirectoryUrlFromUrl(
314-
url,
313+
314+
const importerUrl = httpUrlToFileUrl(importer, {
315+
projectDirectoryUrl,
316+
baseUrl,
317+
})
318+
const importerPackageDirectoryUrl = packageDirectoryUrlFromUrl(
319+
importerUrl,
315320
projectDirectoryUrl,
316321
)
317-
const packageFileUrl = resolveUrl("package.json", packageDirectoryUrl)
318322
const scope =
319-
packageDirectoryUrl === projectDirectoryUrl
323+
importerPackageDirectoryUrl === projectDirectoryUrl
320324
? undefined
321-
: `./${urlToRelativeUrl(packageDirectoryUrl, projectDirectoryUrl)}`
325+
: `./${urlToRelativeUrl(
326+
importerPackageDirectoryUrl,
327+
projectDirectoryUrl,
328+
)}`
322329
const automapping = {
323330
scope,
324331
from: specifier,
@@ -369,6 +376,11 @@ const createImportResolver = ({
369376
}
370377
if (magicExtension) {
371378
if (!extensionlessAutomapping) {
379+
const packageDirectoryUrl = packageDirectoryUrlFromUrl(
380+
url,
381+
projectDirectoryUrl,
382+
)
383+
const packageFileUrl = resolveUrl("package.json", packageDirectoryUrl)
372384
const mappingFoundInPackageExports =
373385
await extensionIsMappedInPackageExports(packageFileUrl)
374386
if (!mappingFoundInPackageExports) {

test/auto_mapping_bare_specifier/auto_mapping_bare_specifier.test.mjs renamed to test/auto_mapping/auto_mapping_bare_specifier/auto_mapping_bare_specifier.test.mjs

File renamed without changes.
File renamed without changes.
File renamed without changes.

0 commit comments

Comments
 (0)