Skip to content

Commit 4db0da2

Browse files
committed
Reorganize TypeScript building and NPM distribution
Changed: - Move NPM distribution settings like exports from root 'package.json' to 'dist/' to reduce extraneous features like scripts and development dependencies. - Convert root 'package.json' to workspace index. - Move TypeScript configuration files from root, 'dist/cjs/', and 'dist/esm/', to 'config/ts/'. - Add shell script to rename CommonJS JS/TS files to CJS/CTS to allow Node to correctly resolve module CJS/ESM types. - Separate TypeScript building for testing and distribution; for testing, include source maps for proper coverage reports.
1 parent 00680a8 commit 4db0da2

File tree

17 files changed

+306
-1679
lines changed

17 files changed

+306
-1679
lines changed

Makefile

Lines changed: 43 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,55 @@
1-
build: build-cjs build-esm
1+
publishable: publishable-cjs publishable-esm
22
@echo "Done"
33

4-
build-cjs: clean-cjs
5-
@echo "Building CJS"
6-
@npx tsc -p dist/cjs/tsconfig.json
4+
publishable-cjs: clean-cjs _publishable-cjs _fix-cjs
75

8-
build-esm: clean-esm
9-
@echo "Building ESM"
10-
@npx tsc -p dist/esm/tsconfig.json
6+
publishable-esm: clean-esm _publishable-esm
7+
8+
testable: testable-cjs testable-esm
9+
@echo "Done"
10+
11+
testable-cjs: clean-cjs _testable-cjs _fix-cjs
12+
13+
testable-esm: clean-esm _testable-esm
1114

1215
clean: clean-cjs clean-esm
1316
@echo "Done"
1417

1518
clean-cjs:
1619
@echo "Cleaning CJS"
17-
@rm -rf dist/cjs/*.js dist/cjs/*.js.map dist/cjs/*.d.ts dist/cjs/*.d.ts.map dist/cjs/lib 2> /dev/null
20+
@rm -rf dist/cjs/*.js dist/cjs/*.cjs dist/cjs/*.js.map dist/cjs/*.cjs.map dist/cjs/*.d.ts dist/cjs/*.d.cts dist/cjs/*.d.ts.map dist/cjs/*.d.cts.map dist/cjs/lib 2> /dev/null
1821

1922
clean-esm:
2023
@echo "Cleaning ESM"
21-
@rm -rf dist/esm/*.js dist/esm/*.js.map dist/esm/*.d.ts dist/esm/*.d.ts.map dist/esm/lib 2> /dev/null
24+
@rm -rf dist/esm/*.js dist/esm/*.mjs dist/esm/*.js.map dist/esm/*.mjs.map dist/esm/*.d.ts dist/esm/*.d.mts dist/esm/*.d.ts.map dist/esm/*.d.mts.map dist/esm/lib 2> /dev/null
25+
26+
lint:
27+
@echo "Linting"
28+
@npx tsc -p config/ts/esm.json --noEmit
29+
@npx eslint 'src/**/*.ts' 'tests/**/*.js' 'examples/**/*.js'
30+
31+
test:
32+
@echo "Testing"
33+
@npm run pretest:cjs
34+
@npm run pretest:esm
35+
@npm exec -- uvu tests
36+
37+
_fix-cjs:
38+
@echo "Fixing CJS"
39+
@bash ./build/fix-cjs.sh
40+
41+
_publishable-cjs:
42+
@echo "Building CJS for publishing"
43+
@npx tsc -p config/ts/cjs.json
44+
45+
_publishable-esm:
46+
@echo "Building ESM for publishing"
47+
@npx tsc -p config/ts/esm.json
48+
49+
_testable-cjs:
50+
@echo "Building CJS for testing"
51+
@npx tsc -p config/ts/cjs.json --declarationMap --sourceMap
52+
53+
_testable-esm:
54+
@echo "Building ESM for testing"
55+
@npx tsc -p config/ts/esm.json --declarationMap --sourceMap

build/fix-cjs.sh

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
#!/bin/bash
2+
3+
#
4+
# Rename imports from JS and TS to CJS and CTS.
5+
#
6+
7+
find dist/cjs -type f \( -name '*.ts' -o -name '*.js' -o -name '*.map' \) -exec gsed -i 's/\.js\b/.cjs/g' {} +
8+
find dist/cjs -type f \( -name '*.ts' -o -name '*.js' -o -name '*.map' \) -exec gsed -i 's/\.ts\b/.cts/g' {} +
9+
10+
#
11+
# Rename files from JS and TS to CJS and CTS.
12+
#
13+
14+
find dist/cjs -type f -name "*.js" -exec sh -c 'mv "$1" "${1%.js}.cjs"' _ {} \;
15+
find dist/cjs -type f -name "*.ts" -exec sh -c 'mv "$1" "${1%.ts}.cts"' _ {} \;
Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,17 @@
11
{
22
"compilerOptions": {
33
"declaration": true,
4-
"declarationMap": true,
5-
"esModuleInterop": false,
64
"forceConsistentCasingInFileNames": true,
7-
"noEmit": true,
85
"noEmitOnError": true,
96
"noFallthroughCasesInSwitch": true,
107
"noImplicitAny": true,
118
"noImplicitOverride": true,
129
"noImplicitReturns": true,
1310
"noImplicitThis": true,
14-
"outDir": "./dist",
15-
"sourceMap": true,
1611
"strict": true,
1712
"target": "ES2018"
1813
},
1914
"include": [
20-
"./src"
15+
"../../src"
2116
]
2217
}

config/ts/cjs.json

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
{
2+
"extends": "./base.json",
3+
"compilerOptions": {
4+
"module": "CommonJS",
5+
"outDir": "../../dist/cjs"
6+
}
7+
}

config/ts/esm.json

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
{
2+
"extends": "./base.json",
3+
"compilerOptions": {
4+
"module": "ES2015",
5+
"outDir": "../../dist/esm"
6+
}
7+
}

dist/cjs/package.json

Lines changed: 0 additions & 4 deletions
This file was deleted.

dist/cjs/tsconfig.json

Lines changed: 0 additions & 8 deletions
This file was deleted.

dist/esm/package.json

Lines changed: 0 additions & 4 deletions
This file was deleted.

dist/esm/tsconfig.json

Lines changed: 0 additions & 8 deletions
This file was deleted.

dist/package.json

Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
{
2+
"name": "@mcaskill/html-build-attributes",
3+
"version": "0.2.2",
4+
"description": "Generate a string of HTML attributes.",
5+
"license": "MIT",
6+
"homepage": "https://github.com/mcaskill/js-html-build-attributes",
7+
"repository": {
8+
"type": "git",
9+
"url": "https://github.com/mcaskill/js-html-build-attributes.git"
10+
},
11+
"author": {
12+
"name": "Chauncey McAskill",
13+
"email": "chauncey@mcaskill.ca",
14+
"homepage": "https://github.com/mcaskill"
15+
},
16+
"keywords": [
17+
"front-end",
18+
"function",
19+
"html",
20+
"javascript",
21+
"templating"
22+
],
23+
"type": "module",
24+
"types": "./esm/index.d.ts",
25+
"main": "./esm/index.js",
26+
"exports": {
27+
".": {
28+
"import": {
29+
"types": "./esm/index.d.ts",
30+
"default": "./esm/index.js"
31+
},
32+
"require": {
33+
"types": "./cjs/index.d.cts",
34+
"default": "./cjs/index.cjs"
35+
}
36+
},
37+
"./*.js": {
38+
"import": {
39+
"types": "./esm/*.d.ts",
40+
"default": "./esm/*.js"
41+
},
42+
"require": {
43+
"types": "./cjs/*.d.cts",
44+
"default": "./cjs/*.cjs"
45+
}
46+
},
47+
"./lib": {
48+
"import": {
49+
"types": "./esm/lib/index.d.ts",
50+
"default": "./esm/lib/index.js"
51+
},
52+
"require": {
53+
"types": "./cjs/lib/index.d.cts",
54+
"default": "./cjs/lib/index.cjs"
55+
}
56+
},
57+
"./lib/escape": {
58+
"import": {
59+
"types": "./esm/lib/escape/index.d.ts",
60+
"default": "./esm/lib/escape/index.js"
61+
},
62+
"require": {
63+
"types": "./cjs/lib/escape/index.d.cts",
64+
"default": "./cjs/lib/escape/index.cjs"
65+
}
66+
},
67+
"./lib/filter": {
68+
"import": {
69+
"types": "./esm/lib/filter/index.d.ts",
70+
"default": "./esm/lib/filter/index.js"
71+
},
72+
"require": {
73+
"types": "./cjs/lib/filter/index.d.cts",
74+
"default": "./cjs/lib/filter/index.cjs"
75+
}
76+
},
77+
"./lib/sort": {
78+
"import": {
79+
"types": "./esm/lib/sort/index.d.ts",
80+
"default": "./esm/lib/sort/index.js"
81+
},
82+
"require": {
83+
"types": "./cjs/lib/sort/index.d.cts",
84+
"default": "./cjs/lib/sort/index.cjs"
85+
}
86+
},
87+
"./lib/util": {
88+
"import": {
89+
"types": "./esm/lib/util/index.d.ts",
90+
"default": "./esm/lib/util/index.js"
91+
},
92+
"require": {
93+
"types": "./cjs/lib/util/index.d.cts",
94+
"default": "./cjs/lib/util/index.cjs"
95+
}
96+
}
97+
},
98+
"sideEffects": false,
99+
"engines": {
100+
"node": ">=16"
101+
}
102+
}

0 commit comments

Comments
 (0)