Skip to content

Commit

Permalink
Refactor Build Tooling
Browse files Browse the repository at this point in the history
  • Loading branch information
sinclairzx81 committed Apr 28, 2024
1 parent 135ac79 commit 6df0af6
Show file tree
Hide file tree
Showing 11 changed files with 39 additions and 38 deletions.
6 changes: 3 additions & 3 deletions hammer.mjs
Expand Up @@ -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')
Expand Down
6 changes: 3 additions & 3 deletions task/build/require/build.ts → task/build/cjs/build.ts
Expand Up @@ -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)
}
File renamed without changes.
6 changes: 3 additions & 3 deletions task/build/import/build.ts → task/build/esm/build.ts
Expand Up @@ -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)
Expand Down
File renamed without changes.
File renamed without changes.
6 changes: 3 additions & 3 deletions task/build/index.ts
Expand Up @@ -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'
File renamed without changes.
6 changes: 3 additions & 3 deletions task/build/redirect/build.ts → task/build/package/build.ts
Expand Up @@ -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)
}
Expand Up @@ -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
Expand All @@ -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))
}
Expand Up @@ -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`,
}
}
}
Expand All @@ -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",
}
}
})
Expand All @@ -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"
}
}

0 comments on commit 6df0af6

Please sign in to comment.