Compare commits

...

2 Commits

Author SHA1 Message Date
Derrick Hammer 1f5eb3657e
*Update dist 2022-12-20 13:29:04 -05:00
Derrick Hammer 49c07dda52
*Add support for node-gyp-build 2022-12-20 13:28:49 -05:00
4 changed files with 1395 additions and 227 deletions

24
dist/index.js vendored
View File

@ -8,7 +8,10 @@ const ast_matcher_1 = __importDefault(require("ast-matcher"));
const magic_string_1 = __importDefault(require("magic-string")); const magic_string_1 = __importDefault(require("magic-string"));
// @ts-ignore // @ts-ignore
const loady_1 = __importDefault(require("loady")); const loady_1 = __importDefault(require("loady"));
// @ts-ignore
const node_gyp_build_1 = __importDefault(require("node-gyp-build"));
const fs_1 = __importDefault(require("fs")); const fs_1 = __importDefault(require("fs"));
const path_1 = __importDefault(require("path"));
const loaderFunction = `function loadNativeModuleTemp(module, data) { const loaderFunction = `function loadNativeModuleTemp(module, data) {
const tempDir = require("os").tmpdir(); const tempDir = require("os").tmpdir();
const fs = require("fs"); const fs = require("fs");
@ -33,9 +36,6 @@ function bundleNativeModulesPlugin() {
if (!/\.(js)$/.test(id)) { if (!/\.(js)$/.test(id)) {
return null; return null;
} }
if (!/binding/.test(src)) {
return null;
}
const magicString = new magic_string_1.default(src); const magicString = new magic_string_1.default(src);
const parse = (code, source = code) => { const parse = (code, source = code) => {
try { try {
@ -81,6 +81,24 @@ function bundleNativeModulesPlugin() {
} }
} }
} }
const findNodeBuildGyp = (0, ast_matcher_1.default)("require('node-gyp-build')(__any)");
const nodeBuildGypMatches = findNodeBuildGyp(ast);
if (nodeBuildGypMatches?.length) {
for (const match of nodeBuildGypMatches) {
if (markEdited(match.node, edits)) {
const modulePath = node_gyp_build_1.default.path(path_1.default.dirname(id));
const moduleName = modulePath
.split("node_modules")
.pop()
.split("/")
.slice(1)
.shift();
const moduleFile = fs_1.default.readFileSync(modulePath);
const moduleB64 = moduleFile.toString("base64");
magicString.overwrite(match.node.start, match.node.end, `require('loady')('${moduleName}', loadNativeModuleTemp('${moduleName}', '${moduleB64}'))`);
}
}
}
if (edits.length === 0) { if (edits.length === 0) {
return null; return null;
} }

View File

@ -5,12 +5,14 @@
"dependencies": { "dependencies": {
"ast-matcher": "^1.1.1", "ast-matcher": "^1.1.1",
"loady": "^0.0.5", "loady": "^0.0.5",
"magic-string": "^0.27.0" "magic-string": "^0.27.0",
"node-gyp-build": "^4.5.0"
}, },
"devDependencies": { "devDependencies": {
"@types/node": "^18.11.14", "@types/node": "^18.11.14",
"prettier": "^2.8.1", "prettier": "^2.8.1",
"rollup": "^3.7.4", "rollup": "^3.7.4",
"typescript": "^4.9.4",
"vite": "^4.0.1" "vite": "^4.0.1"
} }
} }

View File

@ -2,9 +2,12 @@ import astMatcher from "ast-matcher";
import MagicString from "magic-string"; import MagicString from "magic-string";
// @ts-ignore // @ts-ignore
import loady from "loady"; import loady from "loady";
// @ts-ignore
import nodeGybBuild from "node-gyp-build";
import fs from "fs"; import fs from "fs";
import type { PluginContext } from "rollup"; import type { PluginContext } from "rollup";
import type { Plugin } from "vite"; import type { Plugin } from "vite";
import path from "path";
const loaderFunction = `function loadNativeModuleTemp(module, data) { const loaderFunction = `function loadNativeModuleTemp(module, data) {
const tempDir = require("os").tmpdir(); const tempDir = require("os").tmpdir();
@ -34,10 +37,6 @@ export default function bundleNativeModulesPlugin() {
if (!/\.(js)$/.test(id)) { if (!/\.(js)$/.test(id)) {
return null; return null;
} }
if (!/binding/.test(src)) {
return null;
}
const magicString = new MagicString(src); const magicString = new MagicString(src);
const parse = ( const parse = (
@ -99,6 +98,30 @@ export default function bundleNativeModulesPlugin() {
} }
} }
const findNodeBuildGyp = astMatcher("require('node-gyp-build')(__any)");
const nodeBuildGypMatches = findNodeBuildGyp(ast);
if (nodeBuildGypMatches?.length) {
for (const match of nodeBuildGypMatches) {
if (markEdited(match.node, edits)) {
const modulePath = nodeGybBuild.path(path.dirname(id));
const moduleName = modulePath
.split("node_modules")
.pop()
.split("/")
.slice(1)
.shift();
const moduleFile = fs.readFileSync(modulePath);
const moduleB64 = moduleFile.toString("base64");
magicString.overwrite(
match.node.start,
match.node.end,
`require('loady')('${moduleName}', loadNativeModuleTemp('${moduleName}', '${moduleB64}'))`
);
}
}
}
if (edits.length === 0) { if (edits.length === 0) {
return null; return null;
} }

1563
yarn.lock

File diff suppressed because it is too large Load Diff