Skip to content

Commit ab8563f

Browse files
authored
refactor: unify all packages to rootDir "." pattern (#241)
* docs: unify all packages to use rootDir "." pattern Replace CLI vs Library distinction with unified TypeScript configuration: - ALL packages now use rootDir "." (not "src") - Consistent output: dist/{esm,cjs}/src/ for all packages - Prevents configuration errors when adding bin executables - Simplifies documentation and reduces maintenance burden This change documents the standard pattern going forward. Existing packages will be migrated incrementally. Rationale: Previous two-pattern approach required updating 6+ fields when converting library to CLI package, leading to errors. Unified approach makes wrong configuration impossible and future-proofs all packages for potential bin field addition. * docs: fix CONTRIBUTING.md tsconfig example to use rootDir "." Update quick start example to align with unified package structure. All packages must use rootDir "." for consistency. * fix(emulator): correct CLI bin file to use TypeScript source - Convert bin/ya-modbus-emulator.js to .ts (TypeScript source) - Update package.json bin to point to compiled version: ./dist/esm/bin/ya-modbus-emulator.js - Update tsconfig.esm.json: rootDir "src" → ".", include ["src"] → ["src", "bin"] - Update tsconfig.cjs.json: rootDir "src" → ".", include ["src"] → ["src", "bin"] - Fix import path in bin file to use ../src/cli.js (compiled structure) This follows the same pattern as @ya-modbus/cli package. The bin file is now compiled with the rest of the TypeScript code, ensuring it works correctly when the package is installed via npm. Verified: npx ya-modbus-emulator --help works both in monorepo and when installed * fix(emulator): complete migration to unified rootDir "." pattern Update package.json exports to match new tsconfig structure: - main: ./dist/cjs/src/index.js (was ./dist/cjs/index.js) - module: ./dist/esm/src/index.js (was ./dist/esm/index.js) - types: ./dist/esm/src/index.d.ts (was ./dist/esm/index.d.ts) - exports: all paths updated to include /src/ subdirectory - files: remove "bin" entry (now compiled to dist/) This completes the emulator migration started in commit 3c1f920. The package now follows the unified structure documented in docs/agents/package-creation.md. Verified: npx ya-modbus-emulator --help works correctly * refactor(driver-types): migrate to unified rootDir "." pattern Update TypeScript and package.json configuration: - tsconfig: rootDir "src" → "." - package.json: all paths updated to dist/{esm,cjs}/src/ Part of monorepo-wide migration to unified package structure. * refactor(driver-sdk): migrate to unified rootDir "." pattern * refactor(transport): migrate to unified rootDir "." pattern * refactor(driver-loader): migrate to unified rootDir "." pattern * refactor(driver-xymd1): migrate to unified rootDir "." pattern * refactor(driver-or-we-516): migrate to unified rootDir "." pattern * refactor(driver-ex9em): migrate to unified rootDir "." pattern * fix(driver-loader): correct testing export path for unified structure The testing subpath export was pointing to dist/esm/testing/ but with rootDir "." the actual location is dist/esm/src/testing/. Updated exports: - ./dist/esm/testing/index.js → ./dist/esm/src/testing/index.js - ./dist/cjs/testing/index.js → ./dist/cjs/src/testing/index.js This fixes module resolution for consumers importing from @ya-modbus/driver-loader/testing.
1 parent afbbd62 commit ab8563f

28 files changed

Lines changed: 108 additions & 96 deletions

CONTRIBUTING.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -604,7 +604,7 @@ cat > packages/my-package/tsconfig.json << 'EOF'
604604
"extends": "../../tsconfig.base.json",
605605
"compilerOptions": {
606606
"outDir": "dist",
607-
"rootDir": "src"
607+
"rootDir": "."
608608
},
609609
"include": ["src"]
610610
}

docs/NEW-PACKAGE.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -170,12 +170,14 @@ Packages typically extend the base tsconfig:
170170
"extends": "../../tsconfig.base.json",
171171
"compilerOptions": {
172172
"outDir": "./dist",
173-
"rootDir": "./src"
173+
"rootDir": "."
174174
},
175175
"include": ["src"]
176176
}
177177
```
178178

179+
**IMPORTANT:** Always use `rootDir: "."` (not `"src"`). This ensures consistent output structure across all packages and prevents configuration errors when adding bin executables later.
180+
179181
### Engine Requirements
180182

181183
All packages MUST specify the Node.js engine requirement:

docs/agents/package-creation.md

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -30,24 +30,29 @@ See: packages/driver-xymd1/tsconfig.cjs.json for CJS build config
3030

3131
CRITICAL: Add references to BOTH tsconfig files for each dependency.
3232

33-
### Package Types: CLI vs Library
33+
### TypeScript Configuration
3434

35-
**Library packages** (drivers, transport, etc.):
35+
ALL packages MUST use consistent tsconfig structure:
3636

37-
- Use `rootDir: "src"` in tsconfig
38-
- Output: `dist/esm/index.js` and `dist/cjs/index.js`
39-
- Exports point to `dist/{esm,cjs}/index.js`
37+
**tsconfig.esm.json and tsconfig.cjs.json:**
4038

41-
**CLI packages** (cli, device-profiler, mqtt-bridge):
39+
- Use `rootDir: "."` (NEVER use `rootDir: "src"`)
40+
- Include `["src"]` for library packages
41+
- Include `["src", "bin"]` for packages with CLI executables
42+
- Output: `dist/esm/src/` and `dist/cjs/src/` for all packages
4243

43-
- Use `rootDir: "."` in tsconfig
44-
- Include both `src` and `bin` directories
45-
- Output: `dist/esm/src/` and `dist/esm/bin/`
46-
- Exports point to `dist/{esm,cjs}/src/index.js`
47-
- Bin field points to `dist/esm/bin/*.js`
44+
**package.json structure:**
4845

49-
See: packages/cli/tsconfig.esm.json for CLI package structure
50-
See: packages/driver-xymd1/tsconfig.esm.json for library package structure
46+
- `main`: `"./dist/cjs/src/index.js"`
47+
- `module`: `"./dist/esm/src/index.js"`
48+
- `types`: `"./dist/esm/src/index.d.ts"`
49+
- `exports["."]` points to `dist/{esm,cjs}/src/index.js`
50+
- `bin` (if present): `"./dist/esm/bin/<name>.js"`
51+
52+
CRITICAL: Using `rootDir: "."` for all packages ensures consistent output structure and prevents configuration errors when adding bin executables.
53+
54+
See: packages/cli for reference package with bin executable
55+
See: packages/driver-xymd1 for reference library package
5156

5257
### CommonJS Module Interop
5358

packages/driver-ex9em/package.json

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@
1515
"author": "Geno Roupsky <185580+groupsky@users.noreply.github.com>",
1616
"license": "GPL-3.0-or-later",
1717
"type": "module",
18-
"main": "./dist/cjs/index.js",
19-
"types": "./dist/esm/index.d.ts",
18+
"main": "./dist/cjs/src/index.js",
19+
"types": "./dist/esm/src/index.d.ts",
2020
"files": [
2121
"dist",
2222
"README.md",
@@ -54,16 +54,16 @@
5454
"engines": {
5555
"node": ">=20.0.0"
5656
},
57-
"module": "./dist/esm/index.js",
57+
"module": "./dist/esm/src/index.js",
5858
"exports": {
5959
".": {
6060
"import": {
61-
"types": "./dist/esm/index.d.ts",
62-
"default": "./dist/esm/index.js"
61+
"types": "./dist/esm/src/index.d.ts",
62+
"default": "./dist/esm/src/index.js"
6363
},
6464
"require": {
65-
"types": "./dist/cjs/index.d.ts",
66-
"default": "./dist/cjs/index.js"
65+
"types": "./dist/cjs/src/index.d.ts",
66+
"default": "./dist/cjs/src/index.js"
6767
}
6868
}
6969
}

packages/driver-ex9em/tsconfig.cjs.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"extends": "../../tsconfig.cjs.json",
33
"compilerOptions": {
44
"outDir": "dist/cjs",
5-
"rootDir": "src"
5+
"rootDir": "."
66
},
77
"include": ["src"],
88
"references": [

packages/driver-ex9em/tsconfig.esm.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"extends": "../../tsconfig.esm.json",
33
"compilerOptions": {
44
"outDir": "dist/esm",
5-
"rootDir": "src"
5+
"rootDir": "."
66
},
77
"include": ["src"],
88
"references": [

packages/driver-loader/package.json

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -10,28 +10,28 @@
1010
],
1111
"author": "Geno Roupsky <185580+groupsky@users.noreply.github.com>",
1212
"license": "GPL-3.0-or-later",
13-
"main": "./dist/cjs/index.js",
14-
"module": "./dist/esm/index.js",
15-
"types": "./dist/esm/index.d.ts",
13+
"main": "./dist/cjs/src/index.js",
14+
"module": "./dist/esm/src/index.js",
15+
"types": "./dist/esm/src/index.d.ts",
1616
"exports": {
1717
".": {
1818
"import": {
19-
"types": "./dist/esm/index.d.ts",
20-
"default": "./dist/esm/index.js"
19+
"types": "./dist/esm/src/index.d.ts",
20+
"default": "./dist/esm/src/index.js"
2121
},
2222
"require": {
23-
"types": "./dist/cjs/index.d.ts",
24-
"default": "./dist/cjs/index.js"
23+
"types": "./dist/cjs/src/index.d.ts",
24+
"default": "./dist/cjs/src/index.js"
2525
}
2626
},
2727
"./testing": {
2828
"import": {
29-
"types": "./dist/esm/testing/index.d.ts",
30-
"default": "./dist/esm/testing/index.js"
29+
"types": "./dist/esm/src/testing/index.d.ts",
30+
"default": "./dist/esm/src/testing/index.js"
3131
},
3232
"require": {
33-
"types": "./dist/cjs/testing/index.d.ts",
34-
"default": "./dist/cjs/testing/index.js"
33+
"types": "./dist/cjs/src/testing/index.d.ts",
34+
"default": "./dist/cjs/src/testing/index.js"
3535
}
3636
}
3737
},

packages/driver-loader/tsconfig.cjs.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"extends": "../../tsconfig.cjs.json",
33
"compilerOptions": {
44
"outDir": "dist/cjs",
5-
"rootDir": "src"
5+
"rootDir": "."
66
},
77
"include": ["src"],
88
"references": [{ "path": "../driver-types/tsconfig.cjs.json" }]

packages/driver-loader/tsconfig.esm.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"extends": "../../tsconfig.esm.json",
33
"compilerOptions": {
44
"outDir": "dist/esm",
5-
"rootDir": "src"
5+
"rootDir": "."
66
},
77
"include": ["src"],
88
"references": [{ "path": "../driver-types/tsconfig.esm.json" }]

packages/driver-or-we-516/package.json

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@
1515
"author": "Geno Roupsky <185580+groupsky@users.noreply.github.com>",
1616
"license": "GPL-3.0-or-later",
1717
"type": "module",
18-
"main": "./dist/cjs/index.js",
19-
"types": "./dist/esm/index.d.ts",
18+
"main": "./dist/cjs/src/index.js",
19+
"types": "./dist/esm/src/index.d.ts",
2020
"files": [
2121
"dist",
2222
"README.md",
@@ -54,16 +54,16 @@
5454
"engines": {
5555
"node": ">=20.0.0"
5656
},
57-
"module": "./dist/esm/index.js",
57+
"module": "./dist/esm/src/index.js",
5858
"exports": {
5959
".": {
6060
"import": {
61-
"types": "./dist/esm/index.d.ts",
62-
"default": "./dist/esm/index.js"
61+
"types": "./dist/esm/src/index.d.ts",
62+
"default": "./dist/esm/src/index.js"
6363
},
6464
"require": {
65-
"types": "./dist/cjs/index.d.ts",
66-
"default": "./dist/cjs/index.js"
65+
"types": "./dist/cjs/src/index.d.ts",
66+
"default": "./dist/cjs/src/index.js"
6767
}
6868
}
6969
}

0 commit comments

Comments
 (0)