Skip to content

Commit

Permalink
fix: fixed jit
Browse files Browse the repository at this point in the history
  • Loading branch information
prisis committed Sep 18, 2024
1 parent d96ec64 commit 26f7e13
Show file tree
Hide file tree
Showing 6 changed files with 174 additions and 168 deletions.
53 changes: 34 additions & 19 deletions packages/packem/__tests__/intigration/jit.test.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
import { rm } from "node:fs/promises";

import { readFileSync, writeFileSync } from "@visulima/fs";
import { join } from "@visulima/path";
import { temporaryDirectory } from "tempy";
import { afterEach, beforeEach, describe, expect, it } from "vitest";

import packageJson from "../../package.json";
import { createPackageJson, createPackemConfig, createTsConfig, execPackemSync, installPackage } from "../helpers";

describe("packem build --jit", () => {
Expand Down Expand Up @@ -43,7 +45,7 @@ describe("packem build --jit", () => {
},
types: "./dist/index.d.ts",
});
await createPackemConfig(temporaryDirectoryPath, { declaration: false });
await createPackemConfig(temporaryDirectoryPath, {});

const binProcess = await execPackemSync("build", ["--jit"], {
cwd: temporaryDirectoryPath,
Expand All @@ -54,41 +56,54 @@ describe("packem build --jit", () => {

const cjsContent = readFileSync(`${temporaryDirectoryPath}/dist/index.cjs`);

const projectPath = join(__dirname, "..", "..", "..", "..");

expect(cjsContent)
.toBe(`const jiti = require("/home/prisis/WebstormProjects/visulima/packem/node_modules/.pnpm/jiti@1.21.6/node_modules/jiti/lib/index.js")
.toBe(`const { createJiti } = require("../../..${projectPath}/node_modules/.pnpm/jiti@${packageJson.dependencies.jiti}/node_modules/jiti/lib/jiti.cjs");
const _jiti = jiti(null, {
const jiti = createJiti(__filename, {
"alias": {},
"esmResolve": true,
"interopDefault": true
})
"debug": false,
"interopDefault": true,
"transformOptions": {
"babel": {
"plugins": []
}
}
});
/** @type {import("${temporaryDirectoryPath}/src/index")} */
module.exports = _jiti("${temporaryDirectoryPath}/src/index.ts")`);
/** @type {import("${temporaryDirectoryPath}/src/index.d.cts")} */
module.exports = jiti("${temporaryDirectoryPath}/src/index.ts")`);

const cDtsContent = readFileSync(`${temporaryDirectoryPath}/dist/index.d.cts`);

expect(cDtsContent).toBe(`export * from "${temporaryDirectoryPath}/src/index";
export { default } from "${temporaryDirectoryPath}/src/index";`);
expect(cDtsContent).toBe(`export * from "${temporaryDirectoryPath}/src/index.d.cts";
export { default } from "${temporaryDirectoryPath}/src/index.d.cts";`);

const mjsContent = readFileSync(`${temporaryDirectoryPath}/dist/index.mjs`);

expect(mjsContent).toBe(`import jiti from "/home/prisis/WebstormProjects/visulima/packem/node_modules/.pnpm/jiti@1.21.6/node_modules/jiti/lib/index.js";
expect(mjsContent)
.toBe(`import { createJiti } from "../../..${projectPath}/node_modules/.pnpm/jiti@${packageJson.dependencies.jiti}/node_modules/jiti/lib/jiti.mjs";
const _jiti = jiti(null, {
const jiti = createJiti(import.meta.url, {
"alias": {},
"esmResolve": true,
"interopDefault": true
})
"debug": false,
"interopDefault": true,
"transformOptions": {
"babel": {
"plugins": []
}
}
});
/** @type {import("${temporaryDirectoryPath}/src/index.ts")} */
const _module = await _jiti.import("${temporaryDirectoryPath}/src/index.ts");
/** @type {import("${temporaryDirectoryPath}/src/index.d.mts")} */
const _module = await jiti.import("${temporaryDirectoryPath}/src/index.ts");
export default _module;`);

const mDtsContent = readFileSync(`${temporaryDirectoryPath}/dist/index.d.mts`);

expect(mDtsContent).toBe(`export * from "${temporaryDirectoryPath}/src/index.ts";
export { default } from "${temporaryDirectoryPath}/src/index.ts";`);
expect(mDtsContent).toBe(`export * from "${temporaryDirectoryPath}/src/index.d.mts";
export { default } from "${temporaryDirectoryPath}/src/index.d.mts";`);
});
});
3 changes: 1 addition & 2 deletions packages/packem/__tests__/intigration/packem.test.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
import { rm } from "node:fs/promises";

import { readFileSync, writeFileSync } from "@visulima/fs";
import type { Plugin } from "rollup";
import { writeFileSync } from "@visulima/fs";
import { temporaryDirectory } from "tempy";
import { afterEach, beforeEach, describe, expect, it } from "vitest";

Expand Down
74 changes: 37 additions & 37 deletions packages/packem/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -199,43 +199,44 @@
"test:watch": "vitest"
},
"dependencies": {
"@antfu/install-pkg": "^0.4.1",
"@babel/parser": "^7.25.6",
"@clack/prompts": "^0.7.0",
"@rollup/plugin-alias": "^5.1.0",
"@rollup/plugin-commonjs": "^26.0.1",
"@rollup/plugin-dynamic-import-vars": "^2.1.2",
"@rollup/plugin-inject": "^5.0.5",
"@rollup/plugin-json": "^6.1.0",
"@rollup/plugin-node-resolve": "^15.2.3",
"@rollup/plugin-replace": "^5.0.7",
"@rollup/plugin-wasm": "^6.2.2",
"@rollup/pluginutils": "^5.1.0",
"@visulima/cerebro": "^1.1.20",
"@visulima/colorize": "^1.4.9",
"@visulima/find-cache-dir": "^1.0.10",
"@visulima/fs": "^2.1.17",
"@visulima/humanizer": "^1.0.11",
"@visulima/package": "^3.1.0",
"@visulima/pail": "^2.1.8",
"@visulima/path": "^1.0.8",
"@visulima/tsconfig": "^1.0.12",
"@antfu/install-pkg": "0.4.1",
"@babel/parser": "7.25.6",
"@clack/prompts": "0.7.0",
"@rollup/plugin-alias": "5.1.0",
"@rollup/plugin-commonjs": "26.0.1",
"@rollup/plugin-dynamic-import-vars": "2.1.2",
"@rollup/plugin-inject": "5.0.5",
"@rollup/plugin-json": "6.1.0",
"@rollup/plugin-node-resolve": "15.2.3",
"@rollup/plugin-replace": "5.0.7",
"@rollup/plugin-wasm": "6.2.2",
"@rollup/pluginutils": "5.1.0",
"@visulima/cerebro": "1.1.20",
"@visulima/colorize": "1.4.9",
"@visulima/find-cache-dir": "1.0.10",
"@visulima/fs": "2.1.17",
"@visulima/humanizer": "1.0.11",
"@visulima/package": "3.1.0",
"@visulima/pail": "2.1.8",
"@visulima/path": "1.0.8",
"@visulima/tsconfig": "1.0.12",
"defu": "6.1.4",
"es-module-lexer": "^1.5.4",
"fastest-levenshtein": "^1.0.16",
"glob-parent": "^6.0.2",
"hookable": "^5.5.3",
"is-glob": "^4.0.3",
"magic-string": "^0.30.11",
"mlly": "^1.7.1",
"oxc-parser": "^0.29.0",
"rollup": "^4.21.3",
"rollup-plugin-dts": "^6.1.1",
"rollup-plugin-license": "^3.5.2",
"rollup-plugin-polyfill-node": "^0.13.0",
"rollup-plugin-visualizer": "^5.12.0",
"semver": "^7.6.3",
"tinyglobby": "^0.2.6"
"es-module-lexer": "1.5.4",
"fastest-levenshtein": "1.0.16",
"glob-parent": "6.0.2",
"hookable": "5.5.3",
"is-glob": "4.0.3",
"magic-string": "0.30.11",
"mlly": "1.7.1",
"jiti": "2.0.0-beta.3",
"oxc-parser": "0.29.0",
"rollup": "4.21.3",
"rollup-plugin-dts": "6.1.1",
"rollup-plugin-license": "3.5.2",
"rollup-plugin-polyfill-node": "0.13.0",
"rollup-plugin-visualizer": "5.12.0",
"semver": "7.6.3",
"tinyglobby": "0.2.6"
},
"devDependencies": {
"@anolilab/eslint-config": "^15.0.3",
Expand Down Expand Up @@ -272,7 +273,6 @@
"eslint-plugin-vitest-globals": "^1.5.0",
"estree-walker": "^3.0.3",
"execa": "^9.4.0",
"jiti": "2.0.0-beta.3",
"oxc-transform": "^0.29.0",
"prettier": "^3.3.3",
"react": "^18.3.1",
Expand Down
105 changes: 52 additions & 53 deletions packages/packem/src/jit/create-stub.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import { readFile, writeFile } from "@visulima/fs";
import { dirname, extname, normalize, relative, resolve } from "@visulima/path";
import { readFile, writeFileSync } from "@visulima/fs";
import { dirname, normalize, relative, resolve } from "@visulima/path";
import { resolveModuleExportNames, resolvePath } from "mlly";

import { DEFAULT_EXTENSIONS } from "../constants";
import { DEFAULT_EXTENSIONS, ENDING_RE } from "../constants";
import { getShebang, makeExecutable } from "../rollup/plugins/shebang";
import resolveAliases from "../rollup/utils/resolve-aliases";
import type { BuildContext } from "../types";
Expand Down Expand Up @@ -61,39 +61,11 @@ const createStub = async (context: BuildContext): Promise<void> => {
const output = resolve(context.options.rootDir, context.options.outDir, entry.name as string);

const resolvedEntry = normalize(context.jiti.esmResolve(entry.input, { try: true }) ?? entry.input);
const resolvedEntryWithoutExtension = resolvedEntry.slice(0, Math.max(0, resolvedEntry.length - extname(resolvedEntry).length));
const resolvedEntryWithoutExtension = resolvedEntry.replace(ENDING_RE, "");
// eslint-disable-next-line no-await-in-loop
const code = await readFile(resolvedEntry);
const shebang = getShebang(code);

// CJS Stub
if (context.options.emitCJS) {
const jitiCJSPath = relative(
dirname(output),
// eslint-disable-next-line no-await-in-loop
await resolvePath("jiti", {
conditions: ["node", "require"],
url: import.meta.url,
}),
);

// eslint-disable-next-line no-await-in-loop
await writeFile(
`${output}.cjs`,
shebang +
[
`const { createJiti } = require(${JSON.stringify(jitiCJSPath)});`,
// eslint-disable-next-line @typescript-eslint/restrict-plus-operands
...importedBabelPlugins.map((plugin, index) => "const plugin" + index + " = require(" + JSON.stringify(plugin) + ")"),
"",
`const jiti = createJiti(__filename, ${serializedJitiOptions});`,
"",
`/** @type {import(${JSON.stringify(resolvedEntryWithoutExtension)})} */`,
`module.exports = jiti(${JSON.stringify(resolvedEntry)})`,
].join("\n"),
);
}

// MJS Stub
// Try to analyze exports
let namedExports: string[] = [];
Expand Down Expand Up @@ -123,42 +95,69 @@ const createStub = async (context: BuildContext): Promise<void> => {
}),
);

// eslint-disable-next-line no-await-in-loop
await writeFile(
const typePath = resolvedEntryWithoutExtension + ".d.mts";

writeFileSync(
`${output}.mjs`,
shebang +
[
"import { createJiti } from " + JSON.stringify(jitiESMPath) + ";",
'import { createJiti } from "' + jitiESMPath + '";',
// eslint-disable-next-line @typescript-eslint/restrict-plus-operands
...importedBabelPlugins.map((plugin, index) => "import plugin" + index + " from " + JSON.stringify(plugin)),
...importedBabelPlugins.map((plugin, index) => "import plugin" + index + ' from "' + plugin + '";'),
"",
"const jiti = createJiti(import.meta.url, " + serializedJitiOptions + ");",
"",
"/** @type {import(" + JSON.stringify(resolvedEntry) + ")} */",
"const _module = await jiti.import(" + JSON.stringify(resolvedEntry) + ");",
'/** @type {import("' + typePath + '")} */',
'const _module = await jiti.import("' + resolvedEntry + '");',
hasDefaultExport ? "\nexport default _module;" : "",
...namedExports.filter((name) => name !== "default").map((name) => `export const ${name} = _module.${name};`),
].join("\n"),
);
}

if (context.options.declaration) {
// DTS Stub
// eslint-disable-next-line no-await-in-loop
await writeFile(
`${output}.d.cts`,
[
`export * from ${JSON.stringify(resolvedEntryWithoutExtension)};`,
hasDefaultExport ? `export { default } from ${JSON.stringify(resolvedEntryWithoutExtension)};` : "",
].join("\n"),
if (context.options.declaration) {
writeFileSync(
`${output}.d.mts`,
'export * from "' + typePath + '";\n' + (hasDefaultExport ? 'export { default } from "' + typePath + '";' : ""),
);
}
}

// CJS Stub
if (context.options.emitCJS) {
const jitiCJSPath = relative(
dirname(output),
// eslint-disable-next-line no-await-in-loop
await resolvePath("jiti", {
conditions: ["node", "require"],
url: import.meta.url,
}),
);
// eslint-disable-next-line no-await-in-loop
await writeFile(
`${output}.d.mts`,
[`export * from ${JSON.stringify(resolvedEntry)};`, hasDefaultExport ? `export { default } from ${JSON.stringify(resolvedEntry)};` : ""].join(
"\n",
),

const typePath = resolvedEntryWithoutExtension + ".d.cts";

writeFileSync(
`${output}.cjs`,
shebang +
[
'const { createJiti } = require("' + jitiCJSPath + '");',
// eslint-disable-next-line @typescript-eslint/restrict-plus-operands
...importedBabelPlugins.map((plugin, index) => "const plugin" + index + " = require(" + JSON.stringify(plugin) + ")"),
"",
"const jiti = createJiti(__filename, " + serializedJitiOptions + ");",
"",
'/** @type {import("' + typePath + '")} */',
'module.exports = jiti("' + resolvedEntry + '")',
].join("\n"),
);

// DTS Stub
if (context.options.declaration) {
writeFileSync(
output + ".d.cts",
'export * from "' + typePath + '";\n' + (hasDefaultExport ? 'export { default } from "' + typePath + '";' : ""),
);
}
}

if (shebang) {
Expand Down
Loading

0 comments on commit 26f7e13

Please sign in to comment.