declapract-typescript-ehmpathy 0.47.10 → 0.47.12

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.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "dependencies": {
3
- "domain-objects": "@declapract{check.minVersion('0.31.7')}",
3
+ "domain-objects": "@declapract{check.minVersion('0.31.9')}",
4
4
  "type-fns": "@declapract{check.minVersion('1.21.0')}"
5
5
  }
6
6
  }
@@ -0,0 +1,56 @@
1
+ # rhachet prod-deps bad practice
2
+
3
+ ## what
4
+
5
+ detects `rhachet` and `rhachet-*` packages listed as production dependencies and moves them to devDependencies.
6
+
7
+ ## why
8
+
9
+ rhachet packages are build-time / development tooling only. they should never be shipped as production dependencies because:
10
+
11
+ 1. **no runtime usage** — rhachet is used for agent role management, skill linking, and development workflows. none of this runs at runtime in production.
12
+
13
+ 2. **bloated bundles** — including rhachet in prod deps unnecessarily inflates `node_modules` for deployed applications.
14
+
15
+ 3. **dependency hygiene** — packages that are only used during development belong in `devDependencies`. at worst, if downstream packages need them, they should be declared as `peerDependencies`.
16
+
17
+ ## packages covered
18
+
19
+ - `rhachet`
20
+ - `rhachet-roles-*` (e.g., `rhachet-roles-ehmpathy`, `rhachet-roles-bhrain`, `rhachet-roles-bhuild`)
21
+ - any future `rhachet-*` packages
22
+
23
+ ## fix
24
+
25
+ moves all matching packages from `dependencies` to `devDependencies`, preserving their versions.
26
+
27
+ ## correct placement
28
+
29
+ ```json
30
+ {
31
+ "devDependencies": {
32
+ "rhachet": "^1.19.0",
33
+ "rhachet-roles-ehmpathy": "^1.15.0"
34
+ }
35
+ }
36
+ ```
37
+
38
+ or, if downstream packages need to use them:
39
+
40
+ ```json
41
+ {
42
+ "peerDependencies": {
43
+ "rhachet": ">=1.0.0"
44
+ }
45
+ }
46
+ ```
47
+
48
+ never:
49
+
50
+ ```json
51
+ {
52
+ "dependencies": {
53
+ "rhachet": "^1.19.0"
54
+ }
55
+ }
56
+ ```
@@ -0,0 +1,5 @@
1
+ {
2
+ "dependencies": {
3
+ "rhachet": "@declapract{check.minVersion('0.0.0')}"
4
+ }
5
+ }
@@ -0,0 +1,47 @@
1
+ import type { FileCheckFunction, FileFixFunction } from 'declapract';
2
+
3
+ /**
4
+ * .what = detects rhachet and rhachet-* packages in production dependencies
5
+ * .why = these packages should be devDependencies or peerDependencies, never direct prod deps
6
+ */
7
+
8
+ const rhachetPackagePattern = /^rhachet(-.*)?$/;
9
+
10
+ export const check: FileCheckFunction = (contents) => {
11
+ if (!contents) throw new Error('does not match bad practice');
12
+
13
+ const packageJSON = JSON.parse(contents);
14
+ const prodDeps = Object.keys(packageJSON.dependencies ?? {});
15
+
16
+ // check if any rhachet package is in prod dependencies
17
+ const rhachetInProdDeps = prodDeps.some((dep) =>
18
+ rhachetPackagePattern.test(dep),
19
+ );
20
+
21
+ if (rhachetInProdDeps) return; // matches bad practice
22
+ throw new Error('does not match bad practice');
23
+ };
24
+
25
+ export const fix: FileFixFunction = (contents) => {
26
+ if (!contents) return { contents };
27
+
28
+ const packageJSON = JSON.parse(contents);
29
+ const prodDeps = { ...packageJSON.dependencies };
30
+ const devDeps = { ...packageJSON.devDependencies };
31
+
32
+ // find all rhachet packages in prod deps and move them to dev deps
33
+ for (const dep of Object.keys(prodDeps)) {
34
+ if (rhachetPackagePattern.test(dep)) {
35
+ devDeps[dep] = prodDeps[dep];
36
+ delete prodDeps[dep];
37
+ }
38
+ }
39
+
40
+ const fixedPackageJSON = {
41
+ ...packageJSON,
42
+ dependencies: Object.keys(prodDeps).length > 0 ? prodDeps : undefined,
43
+ devDependencies: Object.keys(devDeps).length > 0 ? devDeps : undefined,
44
+ };
45
+
46
+ return { contents: JSON.stringify(fixedPackageJSON, null, 2) };
47
+ };
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "declapract-typescript-ehmpathy",
3
3
  "author": "ehmpathy",
4
4
  "description": "declapract best practices declarations for typescript",
5
- "version": "0.47.10",
5
+ "version": "0.47.12",
6
6
  "license": "MIT",
7
7
  "main": "src/index.js",
8
8
  "repository": "ehmpathy/declapract-typescript-ehmpathy",