diff --git a/esbuild.mjs b/esbuild.mjs index 598304a..4419700 100644 --- a/esbuild.mjs +++ b/esbuild.mjs @@ -16,28 +16,100 @@ */ import esbuild from 'esbuild'; +import nodePath from 'node:path'; -await esbuild.build({ +const buildOptionsBase = { entryPoints: ['./src/index.ts'], outdir: 'dist', bundle: true, minify: true, - format: 'cjs', entryNames: '[name]', platform: 'node', external: ['esbuild'], +}; + +const formats = ['cjs', 'esm']; + +const filterListeners = (includeListeners, excludeListeners) => ({ + name: 'filterListeners', + setup(build) { + build.onLoad( + { + filter: /./, + namespace: 'filterListeners', + }, + () => ({ + contents: + 'const x = () => {throw Error("Unsupported listener in this build")}; export default x;', + loader: 'js', + }), + ); + + build.onResolve( + { + filter: /./, + namespace: 'file', + }, + ({ path, resolveDir }) => { + const resolvedPath = nodePath.resolve(resolveDir, path); + + if (!/\/src\/listeners\/[^/]+$/.test(resolvedPath)) return; + + const baseName = nodePath.basename(path); + + if ( + (!excludeListeners || + !excludeListeners.includes(baseName)) && + (!includeListeners || includeListeners.includes(baseName)) + ) { + return; + } + + return { + external: false, + namespace: 'filterListeners', + path: path, + }; + }, + ); + }, }); -await esbuild.build({ - entryPoints: ['./src/index.ts'], - outdir: 'dist', - bundle: true, - minify: true, +await Promise.resolve( + formats.map((format) => { + return esbuild.build({ + ...buildOptionsBase, + format, + outExtension: { + '.js': format === 'esm' ? '.mjs' : '.js', + }, + plugins: [ + filterListeners(undefined, ['deno', 'cloudflare-workers']), + ], + }); + }), +); + +await Promise.resolve( + formats.map((format) => { + return esbuild.build({ + ...buildOptionsBase, + format, + entryNames: 'cloudflare-workers', + outExtension: { + '.js': format === 'esm' ? '.mjs' : '.js', + }, + plugins: [filterListeners(['cloudflare-workers', 'dynamic'])], + }); + }), +); + +esbuild.build({ + ...buildOptionsBase, + entryNames: 'deno', format: 'esm', - entryNames: '[name]', - platform: 'node', - external: ['esbuild'], outExtension: { '.js': '.mjs', }, + plugins: [filterListeners(['deno', 'dynamic'])], }); diff --git a/package-lock.json b/package-lock.json index 7e173a9..dedd04f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@exact-realty/routemate", - "version": "1.0.0", + "version": "1.0.1", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@exact-realty/routemate", - "version": "1.0.0", + "version": "1.0.1", "hasInstallScript": true, "license": "ISC", "devDependencies": { diff --git a/package.json b/package.json index db7001b..1a33f87 100644 --- a/package.json +++ b/package.json @@ -1,13 +1,24 @@ { "name": "@exact-realty/routemate", - "version": "1.0.0", + "version": "1.0.1", "description": "", "dist": "dist/index.js", "main": "dist/index.js", "module": "./dist/index.mjs", "exports": { - "import": "./dist/index.mjs", - "require": "./dist/index.js" + ".": { + "deno": "./dist/deno.mjs", + "cloudflare-workers": { + "import": "./dist/cloudflare-workers.mjs", + "require": "./dist/cloudflare-workers.mjs" + }, + "import": "./dist/index.mjs", + "require": "./dist/index.js" + }, + "./cloudflare-workers": { + "import": "./dist/cloudflare-workers.mjs", + "require": "./dist/cloudflare-workers.mjs" + } }, "files": [ "dist/**/*" diff --git a/src/index.ts b/src/index.ts index cc283ed..68f0d27 100644 --- a/src/index.ts +++ b/src/index.ts @@ -19,7 +19,7 @@ export { default as ResponseError_, handleResponseError as handleResponseError, } from './ResponseError'; -export * as default from './server'; +export { default, Router } from './server'; export type { TErrorHandler, TListen, diff --git a/src/listeners/node/node.spec.ts b/src/listeners/node/index.spec.ts similarity index 100% rename from src/listeners/node/node.spec.ts rename to src/listeners/node/index.spec.ts