Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,5 +25,5 @@ branding:
icon: 'refresh-cw'
color: 'blue'
runs:
using: 'node20'
using: 'node24'
main: 'packages/action/dist/index.js'
1 change: 1 addition & 0 deletions packages/action/dist/index.js
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import { createRequire as __docmendCreateRequire } from 'module'; const require = __docmendCreateRequire(import.meta.url);
var __create = Object.create;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
Expand Down
2 changes: 1 addition & 1 deletion packages/action/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
"dist"
],
"scripts": {
"build": "esbuild src/index.ts --bundle --platform=node --target=node20 --format=esm --external:@huggingface/transformers --outfile=dist/index.js && node scripts/copy-wasm.mjs",
"build": "node scripts/build.mjs",
"typecheck": "tsc -p tsconfig.json --noEmit"
},
"dependencies": {
Expand Down
50 changes: 50 additions & 0 deletions packages/action/scripts/build.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
import { build } from 'esbuild';
import { copyFileSync } from 'node:fs';
import { createRequire } from 'node:module';
import { basename, join } from 'node:path';
import { fileURLToPath } from 'node:url';

// esbuild's ESM output has no real `require`, so its internal shim throws
// whenever a bundled CJS dependency calls require() for something it can't
// statically resolve (e.g. the `tunnel` package, pulled in transitively via
// @actions/http-client's proxy support, does `require('net')` etc.). This
// banner gives the bundle a genuine `require` to find - esbuild's own
// documented fix for this exact class of error - so the output can stay ESM
// (needed for import.meta.url, which @docmend/core's wasm-path resolution
// depends on, and which esbuild empties out under CJS output instead).
await build({
entryPoints: ['src/index.ts'],
bundle: true,
platform: 'node',
target: 'node24',
format: 'esm',
external: ['@huggingface/transformers'],
outfile: 'dist/index.js',
banner: {
// Aliased import: @docmend/core's grammar-loader.ts already imports
// createRequire under its own name, and gets bundled into this same
// module scope - importing it again under the unaliased name here
// would be a duplicate declaration (SyntaxError), not just a harmless
// redundant import.
js: "import { createRequire as __docmendCreateRequire } from 'module'; const require = __docmendCreateRequire(import.meta.url);",
},
});

// Resolved from @docmend/core's own location (not this script's) so it works
// regardless of where npm happened to hoist these transitive dependencies.
const coreEntry = fileURLToPath(import.meta.resolve('@docmend/core'));
const coreRequire = createRequire(coreEntry);

const wasmFiles = [
coreRequire.resolve('web-tree-sitter/tree-sitter.wasm'),
coreRequire.resolve('tree-sitter-wasms/out/tree-sitter-typescript.wasm'),
coreRequire.resolve('tree-sitter-wasms/out/tree-sitter-tsx.wasm'),
coreRequire.resolve('tree-sitter-wasms/out/tree-sitter-javascript.wasm'),
coreRequire.resolve('tree-sitter-wasms/out/tree-sitter-python.wasm'),
];

for (const file of wasmFiles) {
copyFileSync(file, join('dist', basename(file)));
}

console.log(`copied ${wasmFiles.length} wasm files into dist/`);
23 changes: 0 additions & 23 deletions packages/action/scripts/copy-wasm.mjs

This file was deleted.

Loading