From 456841f1dd5cb5d83541692b2fda1e5a22f3cda4 Mon Sep 17 00:00:00 2001 From: sinclair Date: Sun, 28 Apr 2024 18:30:39 +0900 Subject: [PATCH] Refactor Build Tooling --- hammer.mjs | 4 ++-- package.json | 3 +++ task/build/{require => cjs}/build.ts | 6 ++--- task/build/{require => cjs}/compile.ts | 0 task/build/{import => esm}/build.ts | 6 ++--- task/build/{import => esm}/compile.ts | 0 task/build/{import => esm}/convert-to-esm.ts | 0 task/build/index.ts | 6 ++--- .../{common => notices}/remove-notices.ts | 0 task/build/{redirect => package}/build.ts | 6 ++--- .../create-package-json-redirect.ts} | 19 ++++++++-------- .../create-package-json.ts | 22 +++++++++++-------- 12 files changed, 39 insertions(+), 33 deletions(-) rename task/build/{require => cjs}/build.ts (91%) rename task/build/{require => cjs}/compile.ts (100%) rename task/build/{import => esm}/build.ts (91%) rename task/build/{import => esm}/compile.ts (100%) rename task/build/{import => esm}/convert-to-esm.ts (100%) rename task/build/{common => notices}/remove-notices.ts (100%) rename task/build/{redirect => package}/build.ts (90%) rename task/build/{redirect/create-redirect-paths.ts => package/create-package-json-redirect.ts} (92%) rename task/build/{redirect => package}/create-package-json.ts (84%) diff --git a/hammer.mjs b/hammer.mjs index 065e0326..9d20e9d6 100644 --- a/hammer.mjs +++ b/hammer.mjs @@ -57,12 +57,12 @@ export async function build_check(target = 'target/build') { await shell(`cd ${target} && attw sinclair-typebox-${version}.tgz`) } export async function build(target = 'target/build') { - await test() + // await test() await clean() await Promise.all([ + Build.Package.build(target), Build.Import.build(target), Build.Require.build(target), - Build.Redirect.build(target) ]) await folder(target).add('readme.md') await folder(target).add('license') diff --git a/package.json b/package.json index f2162e4e..8df5a6ee 100644 --- a/package.json +++ b/package.json @@ -14,6 +14,9 @@ "type": "git", "url": "https://github.com/sinclairzx81/typebox" }, + "esm.sh": { + "bundle": false + }, "scripts": { "test:typescript": "hammer task test_typescript", "test:static": "hammer task test_static", 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..57052816 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 Import from './esm/build' +export * as Require from './cjs/build' +export * as Package from './package/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 84% rename from task/build/redirect/create-package-json.ts rename to task/build/package/create-package-json.ts index d25cc61c..89cd89da 100644 --- a/task/build/redirect/create-package-json.ts +++ b/task/build/package/create-package-json.ts @@ -48,12 +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 +66,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 +90,13 @@ function resolveMetadata() { author: packageJson.author, license: packageJson.license, repository: packageJson.repository, - scripts: { test: 'echo test' }, // flagged by socket.dev + // disable auto bundling via esm.sh + 'esm.sh': packageJson['esm.sh'], + // flagged by socket.dev + scripts: { test: 'echo test' }, types: "./build/require/index.d.ts", main: "./build/require/index.js", module: "./build/import/index.mjs", + } }