267 lines
6.9 KiB
Diff
267 lines
6.9 KiB
Diff
diff --git a/package.json b/package.json
|
|
index c7584c6..aca0441 100644
|
|
--- a/package.json
|
|
+++ b/package.json
|
|
@@ -30,7 +30,7 @@
|
|
"scripts": {
|
|
"format": "prettier --write .",
|
|
"format:check": "prettier --check .",
|
|
- "typegen": "tsc ./src/transformers.js --allowJs --declaration --emitDeclarationOnly --declarationMap --outDir types",
|
|
+ "typegen": "tsc",
|
|
"dev": "webpack serve --no-client-overlay",
|
|
"build": "webpack && npm run typegen",
|
|
"test": "node --experimental-vm-modules node_modules/jest/bin/jest.js --verbose",
|
|
@@ -62,6 +62,7 @@
|
|
"homepage": "https://github.com/huggingface/transformers.js#readme",
|
|
"dependencies": {
|
|
"@huggingface/jinja": "^0.3.2",
|
|
+ "@types/node": "^22.5.5",
|
|
"onnxruntime-node": "1.20.1",
|
|
"onnxruntime-web": "1.20.1",
|
|
"sharp": "^0.33.5"
|
|
@@ -74,7 +75,7 @@
|
|
"jest-environment-node": "^30.0.0-alpha.6",
|
|
"jsdoc-to-markdown": "^8.0.1",
|
|
"prettier": "3.3.3",
|
|
- "typescript": "^5.2.2",
|
|
+ "typescript": "^5.6.2",
|
|
"wavefile": "^11.0.0",
|
|
"webpack": "^5.80.0",
|
|
"webpack-cli": "^5.0.2",
|
|
diff --git a/src/backends/onnx.js b/src/backends/onnx.js
|
|
index 26d771b..7731bfd 100644
|
|
--- a/src/backends/onnx.js
|
|
+++ b/src/backends/onnx.js
|
|
@@ -18,15 +18,8 @@
|
|
|
|
import { env, apis } from '../env.js';
|
|
|
|
-// NOTE: Import order matters here. We need to import `onnxruntime-node` before `onnxruntime-web`.
|
|
-// In either case, we select the default export if it exists, otherwise we use the named export.
|
|
-import * as ONNX_NODE from 'onnxruntime-node';
|
|
-
|
|
-// Use subpath-imports to ensure Node.js and browser interoperability.
|
|
-// See package.json and https://nodejs.org/api/packages.html#subpath-imports
|
|
-// for more information.
|
|
-// @ts-ignore
|
|
import * as ONNX_WEB from '#onnxruntime-webgpu';
|
|
+const ONNX_NODE = null;
|
|
|
|
export { Tensor } from 'onnxruntime-common';
|
|
|
|
diff --git a/tsconfig.json b/tsconfig.json
|
|
new file mode 100644
|
|
index 0000000..8892b18
|
|
--- /dev/null
|
|
+++ b/tsconfig.json
|
|
@@ -0,0 +1,13 @@
|
|
+{
|
|
+ "files": [
|
|
+ "./src/transformers.js"
|
|
+ ],
|
|
+ "compilerOptions": {
|
|
+ "allowJs": true,
|
|
+ "declaration": true,
|
|
+ "emitDeclarationOnly": true,
|
|
+ "declarationMap": true,
|
|
+ "outDir": "types",
|
|
+ "types": [] // Or specify only the types you need
|
|
+ }
|
|
+}
|
|
diff --git a/webpack.config.js b/webpack.config.js
|
|
index 2182492..ef2540c 100644
|
|
--- a/webpack.config.js
|
|
+++ b/webpack.config.js
|
|
@@ -4,113 +4,106 @@ import path from "path";
|
|
|
|
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
|
|
-/**
|
|
- * Helper function to create webpack configurations.
|
|
- * @param {Object} options Options for creating a webpack target.
|
|
- * @param {string} options.name Name of output file.
|
|
- * @param {string} options.suffix Suffix of output file.
|
|
- * @param {string} options.type Type of library.
|
|
- * @param {string} options.ignoreModules The list of modules to ignore.
|
|
- * @param {string} options.externalModules The list of modules to set as external.
|
|
- * @returns {import('webpack').Configuration} One webpack target.
|
|
- */
|
|
-function buildConfig({
|
|
- name = "",
|
|
- suffix = ".js",
|
|
- type = "module", // 'module' | 'commonjs'
|
|
- ignoreModules = [],
|
|
- externalModules = [],
|
|
-} = {}) {
|
|
- const outputModule = type === "module";
|
|
-
|
|
- const alias = Object.fromEntries(
|
|
- ignoreModules.map((module) => {
|
|
- return [module, false];
|
|
- }),
|
|
- );
|
|
-
|
|
- /** @type {import('webpack').Configuration} */
|
|
- const config = {
|
|
+/** @type {import('webpack').Configuration[]} */
|
|
+const configs = [
|
|
+ {
|
|
mode: 'development',
|
|
devtool: 'source-map',
|
|
entry: {
|
|
- [`transformers${name}`]: './src/transformers.js',
|
|
- [`transformers${name}.min`]: './src/transformers.js',
|
|
+ 'transformers.min': './src/transformers.js',
|
|
},
|
|
output: {
|
|
- filename: `[name]${suffix}`,
|
|
+ filename: '[name].js',
|
|
path: path.join(__dirname, 'dist'),
|
|
library: {
|
|
- type,
|
|
+ type: 'module',
|
|
},
|
|
assetModuleFilename: '[name][ext]',
|
|
chunkFormat: 'module',
|
|
},
|
|
optimization: {
|
|
minimize: true,
|
|
- minimizer: [new TerserPlugin({
|
|
- test: new RegExp(`\\.min\\${suffix}$`),
|
|
- extractComments: false,
|
|
- })],
|
|
+ minimizer: [
|
|
+ new TerserPlugin({
|
|
+ test: /\.min\.js$/,
|
|
+ extractComments: false,
|
|
+ }),
|
|
+ ],
|
|
},
|
|
experiments: {
|
|
- outputModule,
|
|
+ outputModule: true,
|
|
+ },
|
|
+ resolve: {
|
|
+ alias: {
|
|
+ '#onnxruntime-webgpu': false,
|
|
+ },
|
|
+ },
|
|
+ externals: {
|
|
+ '#onnxruntime-webgpu': 'chrome://global/content/ml/ort.webgpu.mjs',
|
|
},
|
|
- resolve: { alias },
|
|
-
|
|
- externals: externalModules,
|
|
-
|
|
- // Development server
|
|
devServer: {
|
|
static: {
|
|
directory: __dirname,
|
|
},
|
|
port: 8080,
|
|
},
|
|
- };
|
|
-
|
|
- if (outputModule) {
|
|
- config.module = {
|
|
+ module: {
|
|
parser: {
|
|
javascript: {
|
|
- importMeta: false
|
|
- }
|
|
- }
|
|
- }
|
|
- } else {
|
|
- config.externalsType = 'commonjs';
|
|
- }
|
|
-
|
|
- return config;
|
|
-}
|
|
-
|
|
-// Do not bundle onnxruntime-web when packaging for Node.js.
|
|
-// Instead, we use the native library (onnxruntime-node).
|
|
-const NODE_IGNORE_MODULES = ["onnxruntime-web", "onnxruntime-web/webgpu"];
|
|
-
|
|
-// Do not bundle the following modules with webpack (mark as external)
|
|
-// NOTE: This is necessary for both type="module" and type="commonjs",
|
|
-// and will be ignored when building for web (only used for node/deno)
|
|
-const NODE_EXTERNAL_MODULES = ["onnxruntime-node", "sharp", "fs", "path", "url"];
|
|
-
|
|
-
|
|
-export default [
|
|
- // Web-only build
|
|
- buildConfig({
|
|
- type: "module",
|
|
- }),
|
|
-
|
|
- // Node-compatible builds
|
|
- buildConfig({
|
|
- suffix: ".mjs",
|
|
- type: "module",
|
|
- ignoreModules: NODE_IGNORE_MODULES,
|
|
- externalModules: NODE_EXTERNAL_MODULES,
|
|
- }),
|
|
- buildConfig({
|
|
- suffix: ".cjs",
|
|
- type: "commonjs",
|
|
- ignoreModules: NODE_IGNORE_MODULES,
|
|
- externalModules: NODE_EXTERNAL_MODULES,
|
|
- }),
|
|
+ importMeta: false,
|
|
+ },
|
|
+ },
|
|
+ },
|
|
+ },
|
|
+ {
|
|
+ mode: 'development',
|
|
+ devtool: 'source-map',
|
|
+ entry: {
|
|
+ transformers: './src/transformers.js',
|
|
+ },
|
|
+ output: {
|
|
+ filename: '[name].js',
|
|
+ path: path.join(__dirname, 'dist'),
|
|
+ library: {
|
|
+ type: 'module',
|
|
+ },
|
|
+ assetModuleFilename: '[name][ext]',
|
|
+ chunkFormat: 'module',
|
|
+ },
|
|
+ optimization: {
|
|
+ minimize: true,
|
|
+ minimizer: [
|
|
+ new TerserPlugin({
|
|
+ test: /\.min\.js$/,
|
|
+ extractComments: false,
|
|
+ }),
|
|
+ ],
|
|
+ },
|
|
+ experiments: {
|
|
+ outputModule: true,
|
|
+ },
|
|
+ resolve: {
|
|
+ alias: {
|
|
+ '#onnxruntime-webgpu': false,
|
|
+ },
|
|
+ },
|
|
+ externals: {
|
|
+ '#onnxruntime-webgpu': 'chrome://global/content/ml/ort.webgpu-dev.mjs',
|
|
+ },
|
|
+ devServer: {
|
|
+ static: {
|
|
+ directory: __dirname,
|
|
+ },
|
|
+ port: 8080,
|
|
+ },
|
|
+ module: {
|
|
+ parser: {
|
|
+ javascript: {
|
|
+ importMeta: false,
|
|
+ },
|
|
+ },
|
|
+ },
|
|
+ },
|
|
];
|
|
+
|
|
+export default configs;
|