@jterrazz/typescript 3.0.0 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +29 -18
- package/bin/ts-build.sh +13 -49
- package/bin/ts-dev.sh +14 -35
- package/config/rolldown.build.config.js +30 -0
- package/config/rolldown.dev.config.js +11 -0
- package/package.json +9 -25
package/README.md
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
|
|
1
|
+
*Hey there – I'm Jean-Baptiste, just another developer doing weird things with code. All my projects live on [jterrazz.com](https://jterrazz.com) – complete with backstories and lessons learned. Feel free to poke around – you might just find something useful!*
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
# @jterrazz/typescript
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
Drop-in TypeScript build tooling with zero configuration.
|
|
6
6
|
|
|
7
7
|
## Installation
|
|
8
8
|
|
|
@@ -16,30 +16,33 @@ npm install @jterrazz/typescript
|
|
|
16
16
|
|
|
17
17
|
```json
|
|
18
18
|
// tsconfig.json - Pick one:
|
|
19
|
-
{
|
|
20
|
-
|
|
21
|
-
}
|
|
22
|
-
{
|
|
23
|
-
"extends": "@jterrazz/typescript/tsconfig/next" // Next.js projects
|
|
24
|
-
}
|
|
25
|
-
{
|
|
26
|
-
"extends": "@jterrazz/typescript/tsconfig/expo" // Expo/React Native
|
|
27
|
-
}
|
|
19
|
+
{ "extends": "@jterrazz/typescript/tsconfig/node" } // Node.js projects
|
|
20
|
+
{ "extends": "@jterrazz/typescript/tsconfig/next" } // Next.js projects
|
|
21
|
+
{ "extends": "@jterrazz/typescript/tsconfig/expo" } // Expo/React Native
|
|
28
22
|
```
|
|
29
23
|
|
|
30
24
|
### 2. Use the build commands
|
|
31
25
|
|
|
32
26
|
```bash
|
|
33
27
|
npx ts-dev # Development with watch mode
|
|
34
|
-
npx ts-build # Production build
|
|
28
|
+
npx ts-build # Production build
|
|
35
29
|
```
|
|
36
30
|
|
|
37
31
|
## What you get
|
|
38
32
|
|
|
39
|
-
- **
|
|
40
|
-
- **Zero configuration**
|
|
41
|
-
- **Multiple outputs**
|
|
42
|
-
- **Source maps**
|
|
33
|
+
- **Blazing fast** — Powered by [Rolldown](https://rolldown.rs) (Rust) and [tsgo](https://github.com/nicolo-ribaudo/typescript-go) (Go)
|
|
34
|
+
- **Zero configuration** — Works out of the box
|
|
35
|
+
- **Multiple outputs** — ESM + CommonJS + TypeScript declarations
|
|
36
|
+
- **Source maps** — Full debugging support
|
|
37
|
+
|
|
38
|
+
### Build outputs
|
|
39
|
+
|
|
40
|
+
| Mode | Output | Description |
|
|
41
|
+
|------|--------|-------------|
|
|
42
|
+
| `ts-dev` | `dist/index.js` | ESM only, fast rebuilds (~20ms) |
|
|
43
|
+
| `ts-build` | `dist/index.js` | ESM bundle |
|
|
44
|
+
| | `dist/index.cjs` | CommonJS bundle |
|
|
45
|
+
| | `dist/index.d.ts` | TypeScript declarations |
|
|
43
46
|
|
|
44
47
|
## Project structure
|
|
45
48
|
|
|
@@ -51,7 +54,15 @@ your-project/
|
|
|
51
54
|
└── tsconfig.json # Extends this package
|
|
52
55
|
```
|
|
53
56
|
|
|
54
|
-
|
|
57
|
+
## How it works
|
|
58
|
+
|
|
59
|
+
The package uses a fully compiled toolchain — no JavaScript in the hot path:
|
|
60
|
+
|
|
61
|
+
| Step | Tool | Language |
|
|
62
|
+
|------|------|----------|
|
|
63
|
+
| Transpile | [Oxc](https://oxc.rs) (via Rolldown) | Rust |
|
|
64
|
+
| Bundle | [Rolldown](https://rolldown.rs) | Rust |
|
|
65
|
+
| Declarations | [tsgo](https://github.com/nicolo-ribaudo/typescript-go) | Go |
|
|
55
66
|
|
|
56
67
|
## License
|
|
57
68
|
|
package/bin/ts-build.sh
CHANGED
|
@@ -3,70 +3,34 @@
|
|
|
3
3
|
# Exit on error
|
|
4
4
|
set -e
|
|
5
5
|
|
|
6
|
-
# Colors for output
|
|
6
|
+
# Colors for output
|
|
7
7
|
RED='\033[0;31m'
|
|
8
8
|
GREEN='\033[0;32m'
|
|
9
|
-
CYAN_BG='\033[46m'
|
|
10
|
-
BRIGHT_WHITE='\033[1;30m'
|
|
11
|
-
NC='\033[0m'
|
|
9
|
+
CYAN_BG='\033[46m'
|
|
10
|
+
BRIGHT_WHITE='\033[1;30m'
|
|
11
|
+
NC='\033[0m'
|
|
12
12
|
|
|
13
13
|
# Get the directory where the script is being called from (caller's project root)
|
|
14
|
-
# If called through bin, we need to get the directory where the command was executed
|
|
15
14
|
if [ -n "$INIT_CWD" ]; then
|
|
16
15
|
PROJECT_ROOT="$INIT_CWD"
|
|
17
16
|
else
|
|
18
17
|
PROJECT_ROOT=$(pwd)
|
|
19
18
|
fi
|
|
20
19
|
|
|
21
|
-
|
|
20
|
+
# Get the directory where this script lives (inside @jterrazz/typescript)
|
|
21
|
+
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
22
|
+
CONFIG_PATH="$SCRIPT_DIR/../config/rolldown.build.config.js"
|
|
22
23
|
|
|
23
|
-
|
|
24
|
-
IN_PATH="$PROJECT_ROOT/src"
|
|
25
|
-
OUT_PATH="$PROJECT_ROOT/dist"
|
|
24
|
+
printf "${CYAN_BG}${BRIGHT_WHITE} BUILD ${NC} Building with Rolldown...\n\n"
|
|
26
25
|
|
|
27
|
-
printf "
|
|
28
|
-
printf "
|
|
26
|
+
printf "Project root: %s\n" "$PROJECT_ROOT"
|
|
27
|
+
printf "Config path: %s\n\n" "$CONFIG_PATH"
|
|
29
28
|
|
|
30
|
-
# Convert tsconfig.json to .swcrc
|
|
31
|
-
printf "\n${CYAN_BG}${BRIGHT_WHITE} RUN ${NC} Converting tsconfig.json to .swcrc\n\n"
|
|
32
|
-
TMP_SWCRC=$(mktemp -q /tmp/.swcrc.XXXXXX)
|
|
33
|
-
if [ $? -ne 0 ]; then
|
|
34
|
-
printf "${RED}✗ Error: Can't create temporary .swcrc file${NC}\n"
|
|
35
|
-
exit 1
|
|
36
|
-
fi
|
|
37
|
-
|
|
38
|
-
# Ensure we're in the project root directory for TypeScript configuration
|
|
39
29
|
cd "$PROJECT_ROOT"
|
|
40
|
-
npx tsconfig-to-swcconfig --output="$TMP_SWCRC"
|
|
41
|
-
printf "${GREEN}✓ Completed${NC}\n"
|
|
42
|
-
|
|
43
|
-
# Create typescript declaration files
|
|
44
|
-
printf "\n${CYAN_BG}${BRIGHT_WHITE} RUN ${NC} Generating TypeScript declaration files\n\n"
|
|
45
|
-
npx tsc --rootDir "$IN_PATH" --declaration --emitDeclarationOnly --outDir "$OUT_PATH"
|
|
46
|
-
printf "${GREEN}✓ Completed${NC}\n"
|
|
47
|
-
|
|
48
|
-
# Create javascript ESM files with improved source maps
|
|
49
|
-
printf "\n${CYAN_BG}${BRIGHT_WHITE} RUN ${NC} Compiling TypeScript to ESM with source maps\n\n"
|
|
50
|
-
if ! "$PROJECT_ROOT/node_modules/.bin/swc" "$IN_PATH" \
|
|
51
|
-
--source-maps \
|
|
52
|
-
--copy-files \
|
|
53
|
-
--config-file "$TMP_SWCRC" \
|
|
54
|
-
--out-dir "$OUT_PATH" \
|
|
55
|
-
--strip-leading-paths \
|
|
56
|
-
--log-watch-compilation \
|
|
57
|
-
"$@"; then
|
|
58
|
-
printf "${RED}✗ SWC compilation failed${NC}\n"
|
|
59
|
-
exit 1
|
|
60
|
-
fi
|
|
61
|
-
printf "${GREEN}✓ Completed${NC}\n"
|
|
62
30
|
|
|
63
|
-
|
|
64
|
-
printf "
|
|
65
|
-
if ! npx rollup "$OUT_PATH/index.js" --format cjs --file "$OUT_PATH/index.cjs" --silent; then
|
|
66
|
-
printf "${RED}✗ Rollup bundling failed${NC}\n"
|
|
31
|
+
if ! npx rolldown --config "$CONFIG_PATH"; then
|
|
32
|
+
printf "${RED}✗ Build failed${NC}\n"
|
|
67
33
|
exit 1
|
|
68
34
|
fi
|
|
69
|
-
printf "${GREEN}✓ Completed${NC}\n"
|
|
70
35
|
|
|
71
|
-
printf "\n${
|
|
72
|
-
printf "${GREEN}✓ Completed${NC}\n"
|
|
36
|
+
printf "\n${GREEN}✓ Build completed${NC}\n"
|
package/bin/ts-dev.sh
CHANGED
|
@@ -3,54 +3,33 @@
|
|
|
3
3
|
# Exit on error
|
|
4
4
|
set -e
|
|
5
5
|
|
|
6
|
-
# Colors for output
|
|
6
|
+
# Colors for output
|
|
7
7
|
RED='\033[0;31m'
|
|
8
8
|
GREEN='\033[0;32m'
|
|
9
|
-
CYAN_BG='\033[46m'
|
|
10
|
-
BRIGHT_WHITE='\033[1;30m'
|
|
11
|
-
NC='\033[0m'
|
|
9
|
+
CYAN_BG='\033[46m'
|
|
10
|
+
BRIGHT_WHITE='\033[1;30m'
|
|
11
|
+
NC='\033[0m'
|
|
12
12
|
|
|
13
13
|
# Get the directory where the script is being called from (caller's project root)
|
|
14
|
-
# If called through bin, we need to get the directory where the command was executed
|
|
15
14
|
if [ -n "$INIT_CWD" ]; then
|
|
16
15
|
PROJECT_ROOT="$INIT_CWD"
|
|
17
16
|
else
|
|
18
17
|
PROJECT_ROOT=$(pwd)
|
|
19
18
|
fi
|
|
20
19
|
|
|
21
|
-
|
|
20
|
+
# Get the directory where this script lives (inside @jterrazz/typescript)
|
|
21
|
+
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
22
|
+
CONFIG_PATH="$SCRIPT_DIR/../config/rolldown.dev.config.js"
|
|
22
23
|
|
|
23
|
-
|
|
24
|
-
IN_PATH="$PROJECT_ROOT/src"
|
|
25
|
-
OUT_PATH="$PROJECT_ROOT/dist"
|
|
24
|
+
printf "${CYAN_BG}${BRIGHT_WHITE} DEV ${NC} Starting watch mode...\n\n"
|
|
26
25
|
|
|
27
|
-
printf "
|
|
28
|
-
printf "
|
|
26
|
+
printf "Project root: %s\n" "$PROJECT_ROOT"
|
|
27
|
+
printf "Config path: %s\n" "$CONFIG_PATH"
|
|
28
|
+
printf "Watching: %s/src\n\n" "$PROJECT_ROOT"
|
|
29
29
|
|
|
30
|
-
# Convert tsconfig.json to .swcrc
|
|
31
|
-
printf "\n${CYAN_BG}${BRIGHT_WHITE} RUN ${NC} Converting tsconfig.json to .swcrc\n\n"
|
|
32
|
-
TMP_SWCRC=$(mktemp -q /tmp/.swcrc.XXXXXX)
|
|
33
|
-
if [ $? -ne 0 ]; then
|
|
34
|
-
printf "${RED}✗ Error: Can't create temporary .swcrc file${NC}\n"
|
|
35
|
-
exit 1
|
|
36
|
-
fi
|
|
37
|
-
|
|
38
|
-
# Ensure we're in the project root directory for TypeScript configuration
|
|
39
30
|
cd "$PROJECT_ROOT"
|
|
40
|
-
npx tsconfig-to-swcconfig --output="$TMP_SWCRC"
|
|
41
|
-
printf "${GREEN}✓ Successfully converted tsconfig.json to .swcrc${NC}\n"
|
|
42
|
-
|
|
43
|
-
printf "\n${CYAN_BG}${BRIGHT_WHITE} RUN ${NC} Starting watch mode with nodemon\n\n"
|
|
44
|
-
printf "Watching for changes in: %s\n" "$IN_PATH"
|
|
45
31
|
|
|
46
|
-
# Watch for changes in the src directory, compile and run
|
|
47
32
|
npx nodemon --quiet \
|
|
48
|
-
--watch
|
|
49
|
-
--ext '
|
|
50
|
-
--exec "printf '
|
|
51
|
-
--source-maps \
|
|
52
|
-
--copy-files \
|
|
53
|
-
--config-file $TMP_SWCRC \
|
|
54
|
-
--out-dir $OUT_PATH \
|
|
55
|
-
--strip-leading-paths \
|
|
56
|
-
&& printf '${GREEN}✓ Completed${NC}\\n\n' && node --enable-source-maps $OUT_PATH/index.js"
|
|
33
|
+
--watch src \
|
|
34
|
+
--ext 'ts,tsx,js,json' \
|
|
35
|
+
--exec "if OUTPUT=\$(npx rolldown --config \"$CONFIG_PATH\" 2>&1); then printf '${GREEN}✓ Rebuilt${NC}\n'; node --enable-source-maps dist/index.js; else echo \"\$OUTPUT\" | grep -v 'tsgo.*experimental' | grep -v 'PLUGIN_TIMINGS'; exit 1; fi"
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { defineConfig } from 'rolldown';
|
|
2
|
+
import { dts } from 'rolldown-plugin-dts';
|
|
3
|
+
|
|
4
|
+
// ESM build with .d.ts generation
|
|
5
|
+
const esmBuild = defineConfig({
|
|
6
|
+
input: './src/index.ts',
|
|
7
|
+
plugins: [
|
|
8
|
+
dts({
|
|
9
|
+
// Use TypeScript Go for fastest .d.ts generation (experimental)
|
|
10
|
+
tsgo: true,
|
|
11
|
+
}),
|
|
12
|
+
],
|
|
13
|
+
output: {
|
|
14
|
+
dir: 'dist',
|
|
15
|
+
format: 'esm',
|
|
16
|
+
sourcemap: true,
|
|
17
|
+
},
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
// CJS build (no dts - already generated by ESM build)
|
|
21
|
+
const cjsBuild = defineConfig({
|
|
22
|
+
input: './src/index.ts',
|
|
23
|
+
output: {
|
|
24
|
+
file: 'dist/index.cjs',
|
|
25
|
+
format: 'cjs',
|
|
26
|
+
sourcemap: true,
|
|
27
|
+
},
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
export default [esmBuild, cjsBuild];
|
package/package.json
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jterrazz/typescript",
|
|
3
3
|
"author": "Jean-Baptiste Terrazzoni <contact@jterrazz.com>",
|
|
4
|
-
"version": "
|
|
4
|
+
"version": "4.0.0",
|
|
5
5
|
"files": [
|
|
6
6
|
"tsconfig",
|
|
7
|
-
"bin"
|
|
7
|
+
"bin",
|
|
8
|
+
"config"
|
|
8
9
|
],
|
|
9
10
|
"type": "module",
|
|
10
11
|
"bin": {
|
|
@@ -12,35 +13,18 @@
|
|
|
12
13
|
"ts-dev": "bin/ts-dev.sh"
|
|
13
14
|
},
|
|
14
15
|
"scripts": {
|
|
15
|
-
"lint": "
|
|
16
|
+
"lint": "biome check",
|
|
16
17
|
"test": "# no test script",
|
|
17
18
|
"build": "# no build script"
|
|
18
19
|
},
|
|
19
20
|
"devDependencies": {
|
|
20
|
-
"@jterrazz/quality": "^
|
|
21
|
+
"@jterrazz/quality": "^5.0.1"
|
|
21
22
|
},
|
|
22
23
|
"dependencies": {
|
|
23
|
-
"@
|
|
24
|
-
"
|
|
25
|
-
"
|
|
26
|
-
"
|
|
27
|
-
"rollup": "4.41.1",
|
|
28
|
-
"tsconfig-to-swcconfig": "2.8.1",
|
|
29
|
-
"typescript": "5.8.3"
|
|
30
|
-
},
|
|
31
|
-
"optionalDependencies": {
|
|
32
|
-
"@swc/core-linux-arm64-gnu": "1.11.29",
|
|
33
|
-
"@swc/core-linux-x64-gnu": "1.11.29",
|
|
34
|
-
"@swc/core-linux-x64-musl": "1.11.29",
|
|
35
|
-
"@swc/core-darwin-x64": "1.11.29",
|
|
36
|
-
"@swc/core-darwin-arm64": "1.11.29",
|
|
37
|
-
"@swc/core-win32-x64-msvc": "1.11.29",
|
|
38
|
-
"@rollup/rollup-linux-arm64-gnu": "4.41.1",
|
|
39
|
-
"@rollup/rollup-linux-x64-gnu": "4.41.1",
|
|
40
|
-
"@rollup/rollup-linux-x64-musl": "4.41.1",
|
|
41
|
-
"@rollup/rollup-darwin-x64": "4.41.1",
|
|
42
|
-
"@rollup/rollup-darwin-arm64": "4.41.1",
|
|
43
|
-
"@rollup/rollup-win32-x64-msvc": "4.41.1"
|
|
24
|
+
"@typescript/native-preview": "^7.0.0-dev.20250610.1",
|
|
25
|
+
"nodemon": "3.1.11",
|
|
26
|
+
"rolldown": "^1.0.0-beta.9",
|
|
27
|
+
"rolldown-plugin-dts": "^0.18.3"
|
|
44
28
|
},
|
|
45
29
|
"publishConfig": {
|
|
46
30
|
"registry": "https://registry.npmjs.org/"
|