diff --git a/hammer.mjs b/hammer.mjs index 065e0326..d936b203 100644 --- a/hammer.mjs +++ b/hammer.mjs @@ -60,9 +60,9 @@ export async function build(target = 'target/build') { await test() await clean() await Promise.all([ - Build.Import.build(target), - Build.Require.build(target), - Build.Redirect.build(target) + Build.Package.build(target), + Build.Esm.build(target), + Build.Cjs.build(target), ]) await folder(target).add('readme.md') await folder(target).add('license') diff --git a/task/build/require/build.ts b/task/build/cjs/build.ts similarity index 91% rename from task/build/require/build.ts rename to task/build/cjs/build.ts index 52bba817..65f1c841 100644 --- a/task/build/require/build.ts +++ b/task/build/cjs/build.ts @@ -26,13 +26,13 @@ THE SOFTWARE. ---------------------------------------------------------------------------*/ -import { removeNotices } from '../common/remove-notices' +import { removeNotices } from '../notices/remove-notices' import { compile } from './compile' /** Builds the CommonJS version of this package */ export async function build(target: string) { - console.log('building...require') - const buildTarget = `${target}/build/require` + console.log('building...cjs') + const buildTarget = `${target}/build/cjs` await compile(buildTarget) await removeNotices(buildTarget) } diff --git a/task/build/require/compile.ts b/task/build/cjs/compile.ts similarity index 100% rename from task/build/require/compile.ts rename to task/build/cjs/compile.ts diff --git a/task/build/import/build.ts b/task/build/esm/build.ts similarity index 91% rename from task/build/import/build.ts rename to task/build/esm/build.ts index bb263787..04a0eb45 100644 --- a/task/build/import/build.ts +++ b/task/build/esm/build.ts @@ -26,14 +26,14 @@ THE SOFTWARE. ---------------------------------------------------------------------------*/ -import { removeNotices } from '../common/remove-notices' +import { removeNotices } from '../notices/remove-notices' import { convertToEsm } from './convert-to-esm' import { compile } from './compile' /** Builds the ESM version of this package */ export async function build(target: string) { - console.log('building...import') - const buildTarget = `${target}/build/import` + console.log('building...esm') + const buildTarget = `${target}/build/esm` await compile(buildTarget) await convertToEsm(buildTarget) await removeNotices(buildTarget) diff --git a/task/build/import/compile.ts b/task/build/esm/compile.ts similarity index 100% rename from task/build/import/compile.ts rename to task/build/esm/compile.ts diff --git a/task/build/import/convert-to-esm.ts b/task/build/esm/convert-to-esm.ts similarity index 100% rename from task/build/import/convert-to-esm.ts rename to task/build/esm/convert-to-esm.ts diff --git a/task/build/index.ts b/task/build/index.ts index 948330f6..e55ce670 100644 --- a/task/build/index.ts +++ b/task/build/index.ts @@ -26,6 +26,6 @@ THE SOFTWARE. ---------------------------------------------------------------------------*/ -export * as Import from './import/build' -export * as Require from './require/build' -export * as Redirect from './redirect/build' +export * as Package from './package/build' +export * as Esm from './esm/build' +export * as Cjs from './cjs/build' diff --git a/task/build/common/remove-notices.ts b/task/build/notices/remove-notices.ts similarity index 100% rename from task/build/common/remove-notices.ts rename to task/build/notices/remove-notices.ts diff --git a/task/build/redirect/build.ts b/task/build/package/build.ts similarity index 90% rename from task/build/redirect/build.ts rename to task/build/package/build.ts index f3eba27d..e7975ed7 100644 --- a/task/build/redirect/build.ts +++ b/task/build/package/build.ts @@ -26,13 +26,13 @@ THE SOFTWARE. ---------------------------------------------------------------------------*/ +import { createPackageJsonRedirect } from './create-package-json-redirect' import { createPackageJson } from './create-package-json' -import { createRedirectPaths } from './create-redirect-paths' /** Builds package.json and redirect directories */ export async function build(target: string) { - console.log('building...redirect') + console.log('building...package.json') const submodules = ['compiler', 'errors', 'system', 'type', 'value'] + await createPackageJsonRedirect(target, submodules) await createPackageJson(target, submodules) - await createRedirectPaths(target, submodules) } diff --git a/task/build/redirect/create-redirect-paths.ts b/task/build/package/create-package-json-redirect.ts similarity index 92% rename from task/build/redirect/create-redirect-paths.ts rename to task/build/package/create-package-json-redirect.ts index 3915b08e..f586763f 100644 --- a/task/build/redirect/create-redirect-paths.ts +++ b/task/build/package/create-package-json-redirect.ts @@ -28,6 +28,14 @@ THE SOFTWARE. import * as Fs from 'node:fs' +// prettier-ignore +function writeRedirect(target: string, submodule: string) { + Fs.mkdirSync(`${target}/${submodule}`, { recursive: true }) + Fs.writeFileSync(`${target}/${submodule}/package.json`,JSON.stringify({ + main: `../build/cjs/${submodule}/index.js`, + types: `../build/cjs/${submodule}/index.d.ts`, + }, null, 2)) +} // -------------------------------------------------------------------------------------------------------------------------- // Builds redirect directories for earlier versions of Node. Note that TypeScript will use these directories to // resolve types when tsconfig.json is configured for `moduleResolution: 'node'`. This approach is referred to as @@ -37,15 +45,6 @@ import * as Fs from 'node:fs' // -------------------------------------------------------------------------------------------------------------------------- // prettier-ignore -export function createRedirectPaths(target: string, submodules: string[]) { +export function createPackageJsonRedirect(target: string, submodules: string[]) { submodules.forEach((submodule) => writeRedirect(target, submodule)) } - -// prettier-ignore -function writeRedirect(target: string, submodule: string) { - Fs.mkdirSync(`${target}/${submodule}`, { recursive: true }) - Fs.writeFileSync(`${target}/${submodule}/package.json`,JSON.stringify({ - main: `../build/require/${submodule}/index.js`, - types: `../build/require/${submodule}/index.d.ts`, - }, null, 2)) -} diff --git a/task/build/redirect/create-package-json.ts b/task/build/package/create-package-json.ts similarity index 80% rename from task/build/redirect/create-package-json.ts rename to task/build/package/create-package-json.ts index d25cc61c..4113a763 100644 --- a/task/build/redirect/create-package-json.ts +++ b/task/build/package/create-package-json.ts @@ -48,13 +48,12 @@ function resolvePackageJson(submodules: string[]) { function resolveSubmoduleExports(submodule: string) { return { require: { - types: `./build/require/${submodule}/index.d.ts`, - default: `./build/require/${submodule}/index.js`, + types: `./build/cjs/${submodule}/index.d.ts`, + default: `./build/cjs/${submodule}/index.js`, }, import: { - types: `./build/import/${submodule}/index.d.mts`, - default: `./build/import/${submodule}/index.mjs`, - + types: `./build/esm/${submodule}/index.d.mts`, + default: `./build/esm/${submodule}/index.mjs`, } } } @@ -66,13 +65,13 @@ function resolveExports(submodules: string[]) { // ... and root module ".": { "require": { - "types": "./build/require/index.d.ts", - "default": "./build/require/index.js", + "types": "./build/cjs/index.d.ts", + "default": "./build/cjs/index.js", }, "import": { - "types": "./build/import/index.d.mts", - "default": "./build/import/index.mjs", + "types": "./build/esm/index.d.mts", + "default": "./build/esm/index.mjs", } } }) @@ -90,9 +89,12 @@ function resolveMetadata() { author: packageJson.author, license: packageJson.license, repository: packageJson.repository, - scripts: { test: 'echo test' }, // flagged by socket.dev - types: "./build/require/index.d.ts", - main: "./build/require/index.js", - module: "./build/import/index.mjs", + // flagged by socket.dev if not present + scripts: { test: 'echo test' }, + // disable auto bundle strategy: see https://github.com/esm-dev/esm.sh#bundling-strategy + 'esm.sh': { 'bundle': false }, + types: "./build/cjs/index.d.ts", + main: "./build/cjs/index.js", + module: "./build/esm/index.mjs" } }