@smoothbricks/cli 0.10.3 → 0.10.4

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.
Files changed (111) hide show
  1. package/README.md +9 -13
  2. package/dist/bun/preload.d.ts +13 -0
  3. package/dist/bun/preload.d.ts.map +1 -0
  4. package/dist/bun/preload.js +12 -0
  5. package/dist/cli.js +12 -4
  6. package/dist/generate/index.d.ts.map +1 -1
  7. package/dist/generate/index.js +0 -6
  8. package/dist/github-ci/index.d.ts.map +1 -1
  9. package/dist/github-ci/index.js +52 -16
  10. package/dist/github-ci/outputs.d.ts.map +1 -1
  11. package/dist/github-ci/outputs.js +1 -2
  12. package/dist/lib/cli-package.js +2 -2
  13. package/dist/lib/json.d.ts +118 -11
  14. package/dist/lib/json.d.ts.map +1 -1
  15. package/dist/lib/json.js +317 -29
  16. package/dist/lib/workspace.d.ts +7 -14
  17. package/dist/lib/workspace.d.ts.map +1 -1
  18. package/dist/lib/workspace.js +76 -82
  19. package/dist/monorepo/ci-workflow.d.ts +2 -0
  20. package/dist/monorepo/ci-workflow.d.ts.map +1 -1
  21. package/dist/monorepo/ci-workflow.js +27 -1
  22. package/dist/monorepo/git-config.js +2 -2
  23. package/dist/monorepo/index.d.ts +3 -1
  24. package/dist/monorepo/index.d.ts.map +1 -1
  25. package/dist/monorepo/index.js +6 -2
  26. package/dist/monorepo/lockfile.d.ts +13 -1
  27. package/dist/monorepo/lockfile.d.ts.map +1 -1
  28. package/dist/monorepo/lockfile.js +33 -21
  29. package/dist/monorepo/managed-files.d.ts +11 -0
  30. package/dist/monorepo/managed-files.d.ts.map +1 -1
  31. package/dist/monorepo/managed-files.js +52 -32
  32. package/dist/monorepo/package-policy.d.ts.map +1 -1
  33. package/dist/monorepo/package-policy.js +52 -45
  34. package/dist/monorepo/packed-manifest.d.ts +5 -2
  35. package/dist/monorepo/packed-manifest.d.ts.map +1 -1
  36. package/dist/monorepo/packed-manifest.js +16 -47
  37. package/dist/monorepo/packed-package.d.ts.map +1 -1
  38. package/dist/monorepo/packed-package.js +28 -16
  39. package/dist/monorepo/packs/index.d.ts.map +1 -1
  40. package/dist/monorepo/packs/index.js +13 -4
  41. package/dist/monorepo/publish-workflow.js +3 -1
  42. package/dist/monorepo/runtime.d.ts +15 -0
  43. package/dist/monorepo/runtime.d.ts.map +1 -1
  44. package/dist/monorepo/runtime.js +66 -12
  45. package/dist/monorepo/tool-validation.d.ts.map +1 -1
  46. package/dist/monorepo/tool-validation.js +32 -23
  47. package/dist/monorepo/wrangler.d.ts.map +1 -1
  48. package/dist/monorepo/wrangler.js +13 -13
  49. package/dist/nx/index.d.ts +9 -7
  50. package/dist/nx/index.d.ts.map +1 -1
  51. package/dist/nx/index.js +48 -31
  52. package/dist/pr/index.d.ts.map +1 -1
  53. package/dist/pr/index.js +28 -32
  54. package/dist/release/candidates.d.ts +3 -2
  55. package/dist/release/candidates.d.ts.map +1 -1
  56. package/dist/release/candidates.js +4 -5
  57. package/dist/release/index.d.ts +1 -0
  58. package/dist/release/index.d.ts.map +1 -1
  59. package/dist/release/index.js +82 -59
  60. package/dist/wrangler/prepare-env.d.ts +0 -1
  61. package/dist/wrangler/prepare-env.d.ts.map +1 -1
  62. package/dist/wrangler/prepare-env.js +100 -51
  63. package/dist/wrangler/scaffold.d.ts.map +1 -1
  64. package/dist/wrangler/scaffold.js +12 -12
  65. package/managed/raw/git-format-staged.yml +19 -1
  66. package/managed/raw/tooling/direnv/github-actions-bootstrap.sh +2 -1
  67. package/managed/raw/tooling/direnv/merge-newer-pins.sh +3 -3
  68. package/managed/raw/tooling/direnv/setup-environment.ts +150 -19
  69. package/managed/raw/tooling/git-hooks/pre-commit.sh +0 -6
  70. package/managed/templates/github/actions/cache-node-modules/action.yml +5 -2
  71. package/managed/templates/github/actions/cache-ttsc-plugins/action.yml +19 -0
  72. package/managed/templates/github/actions/setup-devenv/action.yml +5 -0
  73. package/managed/templates/github/workflows/managed-files.yml +80 -0
  74. package/package.json +15 -4
  75. package/src/bun/preload.ts +12 -0
  76. package/src/cli.ts +19 -7
  77. package/src/generate/index.ts +0 -6
  78. package/src/github-ci/index.ts +49 -18
  79. package/src/github-ci/outputs.ts +1 -2
  80. package/src/lib/cli-package.ts +2 -2
  81. package/src/lib/json.ts +291 -32
  82. package/src/lib/workspace.ts +88 -100
  83. package/src/monorepo/__tests__/ci-workflow.test.ts +3 -3
  84. package/src/monorepo/ci-workflow.ts +27 -1
  85. package/src/monorepo/git-config.ts +2 -2
  86. package/src/monorepo/index.ts +6 -2
  87. package/src/monorepo/lockfile.test.ts +35 -36
  88. package/src/monorepo/lockfile.ts +48 -24
  89. package/src/monorepo/managed-files.test.ts +1 -0
  90. package/src/monorepo/managed-files.ts +57 -38
  91. package/src/monorepo/package-policy.test.ts +20 -50
  92. package/src/monorepo/package-policy.ts +76 -59
  93. package/src/monorepo/packed-manifest.ts +18 -52
  94. package/src/monorepo/packed-package.ts +43 -22
  95. package/src/monorepo/packs/index.ts +13 -4
  96. package/src/monorepo/publish-workflow.ts +3 -1
  97. package/src/monorepo/runtime.test.ts +42 -3
  98. package/src/monorepo/runtime.ts +90 -12
  99. package/src/monorepo/tool-validation.ts +35 -25
  100. package/src/monorepo/wrangler.test.ts +11 -15
  101. package/src/monorepo/wrangler.ts +15 -15
  102. package/src/nx/index.test.ts +9 -5
  103. package/src/nx/index.ts +69 -42
  104. package/src/pr/index.ts +42 -36
  105. package/src/release/__tests__/candidates.test.ts +5 -4
  106. package/src/release/__tests__/trust-publisher.test.ts +7 -0
  107. package/src/release/candidates.ts +10 -17
  108. package/src/release/index.ts +104 -73
  109. package/src/wrangler/prepare-env.ts +75 -54
  110. package/src/wrangler/scaffold.test.ts +9 -12
  111. package/src/wrangler/scaffold.ts +13 -13
package/dist/lib/json.js CHANGED
@@ -1,21 +1,275 @@
1
1
  import { existsSync, readFileSync, writeFileSync } from 'node:fs';
2
- import { hasOwn, hasOwnString, isRecord } from '@smoothbricks/validation';
3
- export { hasOwn, hasOwnString, isRecord };
4
- export function stringProperty(record, key) {
5
- const value = record[key];
6
- return typeof value === 'string' && value.length > 0 ? value : null;
2
+ import typia from 'typia';
3
+ /** Parse package.json text. Invalid JSON throws; wrong shape returns null. */
4
+ export const parsePackageJsonText = (() => {
5
+ const _ip0 = (input, _vctx = {}) => undefined === input["name"] || "string" === typeof input["name"];
6
+ const _ip1 = (input, _vctx = {}) => undefined === input["version"] || "string" === typeof input["version"];
7
+ const _ip2 = (input, _vctx = {}) => undefined === input["private"] || "boolean" === typeof input["private"];
8
+ const _ip3 = (input, _vctx = {}) => undefined === input["license"] || "string" === typeof input["license"];
9
+ const _ip4 = (input, _vctx = {}) => undefined === input["types"] || "string" === typeof input["types"];
10
+ const _ip5 = (input, _vctx = {}) => undefined === input["packageManager"] || "string" === typeof input["packageManager"];
11
+ const _ip6 = (input, _vctx = {}) => undefined === input["files"] || Array.isArray(input["files"]) && input["files"].every(elem => "string" === typeof elem);
12
+ const _ip7 = (input, _vctx = {}) => null !== input["bin"] && (undefined === input["bin"] || "string" === typeof input["bin"] || "object" === typeof input["bin"] && null !== input["bin"] && false === Array.isArray(input["bin"]) && _io1(input["bin"], _vctx));
13
+ const _ip8 = (input, _vctx = {}) => null === input["exports"] || undefined === input["exports"] || "string" === typeof input["exports"] || "object" === typeof input["exports"] && null !== input["exports"] && false === Array.isArray(input["exports"]) && _io2(input["exports"], _vctx);
14
+ const _ip9 = (input, _vctx = {}) => null !== input["workspaces"] && (undefined === input["workspaces"] || (Array.isArray(input["workspaces"]) && input["workspaces"].every(elem => "string" === typeof elem) || "object" === typeof input["workspaces"] && null !== input["workspaces"] && false === Array.isArray(input["workspaces"]) && _io3(input["workspaces"], _vctx)));
15
+ const _ip10 = (input, _vctx = {}) => undefined === input["dependencies"] || "object" === typeof input["dependencies"] && null !== input["dependencies"] && false === Array.isArray(input["dependencies"]) && _io1(input["dependencies"], _vctx);
16
+ const _ip11 = (input, _vctx = {}) => undefined === input["devDependencies"] || "object" === typeof input["devDependencies"] && null !== input["devDependencies"] && false === Array.isArray(input["devDependencies"]) && _io1(input["devDependencies"], _vctx);
17
+ const _ip12 = (input, _vctx = {}) => undefined === input["peerDependencies"] || "object" === typeof input["peerDependencies"] && null !== input["peerDependencies"] && false === Array.isArray(input["peerDependencies"]) && _io1(input["peerDependencies"], _vctx);
18
+ const _ip13 = (input, _vctx = {}) => undefined === input["optionalDependencies"] || "object" === typeof input["optionalDependencies"] && null !== input["optionalDependencies"] && false === Array.isArray(input["optionalDependencies"]) && _io1(input["optionalDependencies"], _vctx);
19
+ const _ip14 = (input, _vctx = {}) => undefined === input["engines"] || "object" === typeof input["engines"] && null !== input["engines"] && false === Array.isArray(input["engines"]) && _io1(input["engines"], _vctx);
20
+ const _ip15 = (input, _vctx = {}) => undefined === input["scripts"] || "object" === typeof input["scripts"] && null !== input["scripts"] && false === Array.isArray(input["scripts"]) && _io1(input["scripts"], _vctx);
21
+ const _ip16 = (input, _vctx = {}) => undefined === input["publishConfig"] || "object" === typeof input["publishConfig"] && null !== input["publishConfig"] && false === Array.isArray(input["publishConfig"]) && _io4(input["publishConfig"], _vctx);
22
+ const _ip17 = (input, _vctx = {}) => null !== input["repository"] && (undefined === input["repository"] || "string" === typeof input["repository"] || "object" === typeof input["repository"] && null !== input["repository"] && false === Array.isArray(input["repository"]) && _io5(input["repository"], _vctx));
23
+ const _ip18 = (input, _vctx = {}) => undefined === input["nx"] || "object" === typeof input["nx"] && null !== input["nx"] && false === Array.isArray(input["nx"]) && _io6(input["nx"], _vctx);
24
+ const _ip19 = (input, _vctx = {}) => undefined === input["smoo"] || "object" === typeof input["smoo"] && null !== input["smoo"] && false === Array.isArray(input["smoo"]) && _io12(input["smoo"], _vctx);
25
+ const _io0 = (input, _vctx = {}) => _ip0(input, _vctx) && _ip1(input, _vctx) && _ip2(input, _vctx) && _ip3(input, _vctx) && _ip4(input, _vctx) && _ip5(input, _vctx) && _ip6(input, _vctx) && _ip7(input, _vctx) && _ip8(input, _vctx) && _ip9(input, _vctx) && _ip10(input, _vctx) && _ip11(input, _vctx) && _ip12(input, _vctx) && _ip13(input, _vctx) && _ip14(input, _vctx) && _ip15(input, _vctx) && _ip16(input, _vctx) && _ip17(input, _vctx) && _ip18(input, _vctx) && _ip19(input, _vctx);
26
+ const _io1 = (input, _vctx = {}) => Object.keys(input).every(key => {
27
+ const value = input[key];
28
+ if (undefined === value)
29
+ return true;
30
+ return "string" === typeof value;
31
+ });
32
+ const _io10 = (input, _vctx = {}) => Object.keys(input).every(key => {
33
+ const value = input[key];
34
+ if (undefined === value)
35
+ return true;
36
+ return true;
37
+ });
38
+ const _io11 = (input, _vctx = {}) => Object.keys(input).every(key => {
39
+ const value = input[key];
40
+ if (undefined === value)
41
+ return true;
42
+ return true;
43
+ });
44
+ const _io12 = (input, _vctx = {}) => undefined === input.github || "object" === typeof input.github && null !== input.github && false === Array.isArray(input.github) && _io13(input.github, _vctx);
45
+ const _io13 = (input, _vctx = {}) => undefined === input.pushBranches || Array.isArray(input.pushBranches) && input.pushBranches.every(elem => "string" === typeof elem);
46
+ const _io2 = (input, _vctx = {}) => (_vctx.io2 || (_vctx.io2 = new WeakSet())).has(input) ? true : (_vctx.io2.add(input), (Object.keys(input).every(key => {
47
+ const value = input[key];
48
+ if (undefined === value)
49
+ return true;
50
+ return null === value || undefined === value || "string" === typeof value || "object" === typeof value && null !== value && false === Array.isArray(value) && _io2(value, _vctx);
51
+ })) || (_vctx.io2.delete(input), false));
52
+ const _io3 = (input, _vctx = {}) => undefined === input.packages || Array.isArray(input.packages) && input.packages.every(elem => "string" === typeof elem);
53
+ const _io4 = (input, _vctx = {}) => undefined === input.access || "string" === typeof input.access;
54
+ const _io5 = (input, _vctx = {}) => (undefined === input.type || "string" === typeof input.type) && (undefined === input.url || "string" === typeof input.url) && (undefined === input.directory || "string" === typeof input.directory);
55
+ const _io6 = (input, _vctx = {}) => _ip0(input, _vctx) && (undefined === input.tags || Array.isArray(input.tags) && input.tags.every(elem => "string" === typeof elem)) && (undefined === input.includedScripts || Array.isArray(input.includedScripts) && input.includedScripts.every(elem => "string" === typeof elem)) && (undefined === input.targets || "object" === typeof input.targets && null !== input.targets && false === Array.isArray(input.targets) && _io7(input.targets, _vctx));
56
+ const _io7 = (input, _vctx = {}) => (_vctx.io7 || (_vctx.io7 = new WeakSet())).has(input) ? true : (_vctx.io7.add(input), (Object.keys(input).every(key => {
57
+ const value = input[key];
58
+ if (undefined === value)
59
+ return true;
60
+ return "object" === typeof value && null !== value && false === Array.isArray(value) && _io8(value, _vctx);
61
+ })) || (_vctx.io7.delete(input), false));
62
+ const _io8 = (input, _vctx = {}) => (_vctx.io8 || (_vctx.io8 = new WeakSet())).has(input) ? true : (_vctx.io8.add(input), ((undefined === input.executor || "string" === typeof input.executor) && (undefined === input.dependsOn || Array.isArray(input.dependsOn) && input.dependsOn.every(elem => null !== elem && undefined !== elem && ("string" === typeof elem || "object" === typeof elem && null !== elem && _io9(elem, _vctx)))) && (undefined === input.outputs || Array.isArray(input.outputs) && input.outputs.every(elem => "string" === typeof elem)) && (undefined === input.inputs || Array.isArray(input.inputs) && input.inputs.every(elem => null !== elem && undefined !== elem && ("string" === typeof elem || "object" === typeof elem && null !== elem && false === Array.isArray(elem) && _io10(elem, _vctx)))) && (undefined === input.options || "object" === typeof input.options && null !== input.options && false === Array.isArray(input.options) && _io11(input.options, _vctx)) && (undefined === input.configurations || "object" === typeof input.configurations && null !== input.configurations && false === Array.isArray(input.configurations) && _io7(input.configurations, _vctx)) && (undefined === input.cache || "boolean" === typeof input.cache) && (undefined === input.command || "string" === typeof input.command) && (undefined === input.parallelism || "boolean" === typeof input.parallelism)) || (_vctx.io8.delete(input), false));
63
+ const _io9 = (input, _vctx = {}) => "string" === typeof input.target && (null !== input.projects && (undefined === input.projects || "string" === typeof input.projects || Array.isArray(input.projects) && input.projects.every(elem => "string" === typeof elem)));
64
+ const __is = (input, _vctx = {}) => "object" === typeof input && null !== input && false === Array.isArray(input) && _io0(input, _vctx);
65
+ return input => { input = JSON.parse(input); return __is(input) ? input : null; };
66
+ })();
67
+ /** Parse `nx show project --json` output. Invalid JSON throws; wrong shape returns null. */
68
+ export const parseNxProjectJsonText = (() => {
69
+ const _io0 = (input, _vctx = {}) => (undefined === input.name || "string" === typeof input.name) && (undefined === input.root || "string" === typeof input.root) && (undefined === input.targets || "object" === typeof input.targets && null !== input.targets && false === Array.isArray(input.targets) && _io1(input.targets, _vctx));
70
+ const _io1 = (input, _vctx = {}) => (_vctx.io1 || (_vctx.io1 = new WeakSet())).has(input) ? true : (_vctx.io1.add(input), (Object.keys(input).every(key => {
71
+ const value = input[key];
72
+ if (undefined === value)
73
+ return true;
74
+ return "object" === typeof value && null !== value && false === Array.isArray(value) && _io2(value, _vctx);
75
+ })) || (_vctx.io1.delete(input), false));
76
+ const _io2 = (input, _vctx = {}) => (_vctx.io2 || (_vctx.io2 = new WeakSet())).has(input) ? true : (_vctx.io2.add(input), ((undefined === input.executor || "string" === typeof input.executor) && (undefined === input.dependsOn || Array.isArray(input.dependsOn) && input.dependsOn.every(elem => null !== elem && undefined !== elem && ("string" === typeof elem || "object" === typeof elem && null !== elem && _io3(elem, _vctx)))) && (undefined === input.outputs || Array.isArray(input.outputs) && input.outputs.every(elem => "string" === typeof elem)) && (undefined === input.inputs || Array.isArray(input.inputs) && input.inputs.every(elem => null !== elem && undefined !== elem && ("string" === typeof elem || "object" === typeof elem && null !== elem && false === Array.isArray(elem) && _io4(elem, _vctx)))) && (undefined === input.options || "object" === typeof input.options && null !== input.options && false === Array.isArray(input.options) && _io5(input.options, _vctx)) && (undefined === input.configurations || "object" === typeof input.configurations && null !== input.configurations && false === Array.isArray(input.configurations) && _io1(input.configurations, _vctx)) && (undefined === input.cache || "boolean" === typeof input.cache) && (undefined === input.command || "string" === typeof input.command) && (undefined === input.parallelism || "boolean" === typeof input.parallelism)) || (_vctx.io2.delete(input), false));
77
+ const _io3 = (input, _vctx = {}) => "string" === typeof input.target && (null !== input.projects && (undefined === input.projects || "string" === typeof input.projects || Array.isArray(input.projects) && input.projects.every(elem => "string" === typeof elem)));
78
+ const _io4 = (input, _vctx = {}) => Object.keys(input).every(key => {
79
+ const value = input[key];
80
+ if (undefined === value)
81
+ return true;
82
+ return true;
83
+ });
84
+ const _io5 = (input, _vctx = {}) => Object.keys(input).every(key => {
85
+ const value = input[key];
86
+ if (undefined === value)
87
+ return true;
88
+ return true;
89
+ });
90
+ const __is = (input, _vctx = {}) => "object" === typeof input && null !== input && false === Array.isArray(input) && _io0(input, _vctx);
91
+ return input => { input = JSON.parse(input); return __is(input) ? input : null; };
92
+ })();
93
+ /** Parse nx.json text. Invalid JSON throws; wrong shape returns null. */
94
+ export const parseNxJsonText = (() => {
95
+ const _io0 = input => undefined === input.namedInputs || "object" === typeof input.namedInputs && null !== input.namedInputs && false === Array.isArray(input.namedInputs) && _io1(input.namedInputs);
96
+ const _io1 = input => Object.keys(input).every(key => {
97
+ const value = input[key];
98
+ if (undefined === value)
99
+ return true;
100
+ return null !== value && undefined !== value && ("string" === typeof value || Array.isArray(value) && value.every(elem => null !== elem && undefined !== elem && ("string" === typeof elem || "object" === typeof elem && null !== elem && false === Array.isArray(elem) && _io2(elem))));
101
+ });
102
+ const _io2 = input => Object.keys(input).every(key => {
103
+ const value = input[key];
104
+ if (undefined === value)
105
+ return true;
106
+ return true;
107
+ });
108
+ const __is = input => "object" === typeof input && null !== input && false === Array.isArray(input) && _io0(input);
109
+ return input => { input = JSON.parse(input); return __is(input) ? input : null; };
110
+ })();
111
+ /** Parse a JSON string array. Invalid JSON throws; non-arrays return null. */
112
+ export const parseStringArrayText = (() => {
113
+ const __is = input => Array.isArray(input) && input.every(elem => "string" === typeof elem);
114
+ return input => { input = JSON.parse(input); return __is(input) ? input : null; };
115
+ })();
116
+ const isPackageJsonValue = (() => {
117
+ const _ip0 = (input, _vctx = {}) => undefined === input["name"] || "string" === typeof input["name"];
118
+ const _ip1 = (input, _vctx = {}) => undefined === input["version"] || "string" === typeof input["version"];
119
+ const _ip2 = (input, _vctx = {}) => undefined === input["private"] || "boolean" === typeof input["private"];
120
+ const _ip3 = (input, _vctx = {}) => undefined === input["license"] || "string" === typeof input["license"];
121
+ const _ip4 = (input, _vctx = {}) => undefined === input["types"] || "string" === typeof input["types"];
122
+ const _ip5 = (input, _vctx = {}) => undefined === input["packageManager"] || "string" === typeof input["packageManager"];
123
+ const _ip6 = (input, _vctx = {}) => undefined === input["files"] || Array.isArray(input["files"]) && input["files"].every(elem => "string" === typeof elem);
124
+ const _ip7 = (input, _vctx = {}) => null !== input["bin"] && (undefined === input["bin"] || "string" === typeof input["bin"] || "object" === typeof input["bin"] && null !== input["bin"] && false === Array.isArray(input["bin"]) && _io1(input["bin"], _vctx));
125
+ const _ip8 = (input, _vctx = {}) => null === input["exports"] || undefined === input["exports"] || "string" === typeof input["exports"] || "object" === typeof input["exports"] && null !== input["exports"] && false === Array.isArray(input["exports"]) && _io2(input["exports"], _vctx);
126
+ const _ip9 = (input, _vctx = {}) => null !== input["workspaces"] && (undefined === input["workspaces"] || (Array.isArray(input["workspaces"]) && input["workspaces"].every(elem => "string" === typeof elem) || "object" === typeof input["workspaces"] && null !== input["workspaces"] && false === Array.isArray(input["workspaces"]) && _io3(input["workspaces"], _vctx)));
127
+ const _ip10 = (input, _vctx = {}) => undefined === input["dependencies"] || "object" === typeof input["dependencies"] && null !== input["dependencies"] && false === Array.isArray(input["dependencies"]) && _io1(input["dependencies"], _vctx);
128
+ const _ip11 = (input, _vctx = {}) => undefined === input["devDependencies"] || "object" === typeof input["devDependencies"] && null !== input["devDependencies"] && false === Array.isArray(input["devDependencies"]) && _io1(input["devDependencies"], _vctx);
129
+ const _ip12 = (input, _vctx = {}) => undefined === input["peerDependencies"] || "object" === typeof input["peerDependencies"] && null !== input["peerDependencies"] && false === Array.isArray(input["peerDependencies"]) && _io1(input["peerDependencies"], _vctx);
130
+ const _ip13 = (input, _vctx = {}) => undefined === input["optionalDependencies"] || "object" === typeof input["optionalDependencies"] && null !== input["optionalDependencies"] && false === Array.isArray(input["optionalDependencies"]) && _io1(input["optionalDependencies"], _vctx);
131
+ const _ip14 = (input, _vctx = {}) => undefined === input["engines"] || "object" === typeof input["engines"] && null !== input["engines"] && false === Array.isArray(input["engines"]) && _io1(input["engines"], _vctx);
132
+ const _ip15 = (input, _vctx = {}) => undefined === input["scripts"] || "object" === typeof input["scripts"] && null !== input["scripts"] && false === Array.isArray(input["scripts"]) && _io1(input["scripts"], _vctx);
133
+ const _ip16 = (input, _vctx = {}) => undefined === input["publishConfig"] || "object" === typeof input["publishConfig"] && null !== input["publishConfig"] && false === Array.isArray(input["publishConfig"]) && _io4(input["publishConfig"], _vctx);
134
+ const _ip17 = (input, _vctx = {}) => null !== input["repository"] && (undefined === input["repository"] || "string" === typeof input["repository"] || "object" === typeof input["repository"] && null !== input["repository"] && false === Array.isArray(input["repository"]) && _io5(input["repository"], _vctx));
135
+ const _ip18 = (input, _vctx = {}) => undefined === input["nx"] || "object" === typeof input["nx"] && null !== input["nx"] && false === Array.isArray(input["nx"]) && _io6(input["nx"], _vctx);
136
+ const _ip19 = (input, _vctx = {}) => undefined === input["smoo"] || "object" === typeof input["smoo"] && null !== input["smoo"] && false === Array.isArray(input["smoo"]) && _io12(input["smoo"], _vctx);
137
+ const _io0 = (input, _vctx = {}) => _ip0(input, _vctx) && _ip1(input, _vctx) && _ip2(input, _vctx) && _ip3(input, _vctx) && _ip4(input, _vctx) && _ip5(input, _vctx) && _ip6(input, _vctx) && _ip7(input, _vctx) && _ip8(input, _vctx) && _ip9(input, _vctx) && _ip10(input, _vctx) && _ip11(input, _vctx) && _ip12(input, _vctx) && _ip13(input, _vctx) && _ip14(input, _vctx) && _ip15(input, _vctx) && _ip16(input, _vctx) && _ip17(input, _vctx) && _ip18(input, _vctx) && _ip19(input, _vctx);
138
+ const _io1 = (input, _vctx = {}) => Object.keys(input).every(key => {
139
+ const value = input[key];
140
+ if (undefined === value)
141
+ return true;
142
+ return "string" === typeof value;
143
+ });
144
+ const _io10 = (input, _vctx = {}) => Object.keys(input).every(key => {
145
+ const value = input[key];
146
+ if (undefined === value)
147
+ return true;
148
+ return true;
149
+ });
150
+ const _io11 = (input, _vctx = {}) => Object.keys(input).every(key => {
151
+ const value = input[key];
152
+ if (undefined === value)
153
+ return true;
154
+ return true;
155
+ });
156
+ const _io12 = (input, _vctx = {}) => undefined === input.github || "object" === typeof input.github && null !== input.github && false === Array.isArray(input.github) && _io13(input.github, _vctx);
157
+ const _io13 = (input, _vctx = {}) => undefined === input.pushBranches || Array.isArray(input.pushBranches) && input.pushBranches.every(elem => "string" === typeof elem);
158
+ const _io2 = (input, _vctx = {}) => (_vctx.io2 || (_vctx.io2 = new WeakSet())).has(input) ? true : (_vctx.io2.add(input), (Object.keys(input).every(key => {
159
+ const value = input[key];
160
+ if (undefined === value)
161
+ return true;
162
+ return null === value || undefined === value || "string" === typeof value || "object" === typeof value && null !== value && false === Array.isArray(value) && _io2(value, _vctx);
163
+ })) || (_vctx.io2.delete(input), false));
164
+ const _io3 = (input, _vctx = {}) => undefined === input.packages || Array.isArray(input.packages) && input.packages.every(elem => "string" === typeof elem);
165
+ const _io4 = (input, _vctx = {}) => undefined === input.access || "string" === typeof input.access;
166
+ const _io5 = (input, _vctx = {}) => (undefined === input.type || "string" === typeof input.type) && (undefined === input.url || "string" === typeof input.url) && (undefined === input.directory || "string" === typeof input.directory);
167
+ const _io6 = (input, _vctx = {}) => _ip0(input, _vctx) && (undefined === input.tags || Array.isArray(input.tags) && input.tags.every(elem => "string" === typeof elem)) && (undefined === input.includedScripts || Array.isArray(input.includedScripts) && input.includedScripts.every(elem => "string" === typeof elem)) && (undefined === input.targets || "object" === typeof input.targets && null !== input.targets && false === Array.isArray(input.targets) && _io7(input.targets, _vctx));
168
+ const _io7 = (input, _vctx = {}) => (_vctx.io7 || (_vctx.io7 = new WeakSet())).has(input) ? true : (_vctx.io7.add(input), (Object.keys(input).every(key => {
169
+ const value = input[key];
170
+ if (undefined === value)
171
+ return true;
172
+ return "object" === typeof value && null !== value && false === Array.isArray(value) && _io8(value, _vctx);
173
+ })) || (_vctx.io7.delete(input), false));
174
+ const _io8 = (input, _vctx = {}) => (_vctx.io8 || (_vctx.io8 = new WeakSet())).has(input) ? true : (_vctx.io8.add(input), ((undefined === input.executor || "string" === typeof input.executor) && (undefined === input.dependsOn || Array.isArray(input.dependsOn) && input.dependsOn.every(elem => null !== elem && undefined !== elem && ("string" === typeof elem || "object" === typeof elem && null !== elem && _io9(elem, _vctx)))) && (undefined === input.outputs || Array.isArray(input.outputs) && input.outputs.every(elem => "string" === typeof elem)) && (undefined === input.inputs || Array.isArray(input.inputs) && input.inputs.every(elem => null !== elem && undefined !== elem && ("string" === typeof elem || "object" === typeof elem && null !== elem && false === Array.isArray(elem) && _io10(elem, _vctx)))) && (undefined === input.options || "object" === typeof input.options && null !== input.options && false === Array.isArray(input.options) && _io11(input.options, _vctx)) && (undefined === input.configurations || "object" === typeof input.configurations && null !== input.configurations && false === Array.isArray(input.configurations) && _io7(input.configurations, _vctx)) && (undefined === input.cache || "boolean" === typeof input.cache) && (undefined === input.command || "string" === typeof input.command) && (undefined === input.parallelism || "boolean" === typeof input.parallelism)) || (_vctx.io8.delete(input), false));
175
+ const _io9 = (input, _vctx = {}) => "string" === typeof input.target && (null !== input.projects && (undefined === input.projects || "string" === typeof input.projects || Array.isArray(input.projects) && input.projects.every(elem => "string" === typeof elem)));
176
+ return (input, _vctx = {}) => "object" === typeof input && null !== input && false === Array.isArray(input) && _io0(input, _vctx);
177
+ })();
178
+ export function readJsonObject(path) {
179
+ if (!existsSync(path)) {
180
+ return null;
181
+ }
182
+ try {
183
+ return parsePackageJsonText(readFileSync(path, 'utf8'));
184
+ }
185
+ catch {
186
+ return null;
187
+ }
188
+ }
189
+ export function requiredJsonObject(path) {
190
+ const json = readJsonObject(path);
191
+ if (!json) {
192
+ throw new Error(`${path} not found or invalid`);
193
+ }
194
+ return json;
195
+ }
196
+ export function writeJsonObject(path, value) {
197
+ writeFileSync(path, jsonObjectText(value));
198
+ }
199
+ export function jsonObjectText(value) {
200
+ return `${JSON.stringify(value, null, 2)}\n`;
201
+ }
202
+ export function readJson(path) {
203
+ if (!existsSync(path)) {
204
+ return null;
205
+ }
206
+ return JSON.parse(readFileSync(path, 'utf8'));
207
+ }
208
+ export function isPackageJson(value) {
209
+ return isPackageJsonValue(value);
210
+ }
211
+ /** Ensure package.json.scripts exists. */
212
+ export function ensureScripts(pkg) {
213
+ if (isStringMap(pkg.scripts)) {
214
+ return pkg.scripts;
215
+ }
216
+ const next = {};
217
+ pkg.scripts = next;
218
+ return next;
219
+ }
220
+ /** Ensure package.json.dependencies (or other string-map dep field) exists. */
221
+ export function ensureDependencyMap(pkg, key) {
222
+ const current = pkg[key];
223
+ if (isStringMap(current)) {
224
+ return current;
225
+ }
226
+ const next = {};
227
+ pkg[key] = next;
228
+ return next;
229
+ }
230
+ /** Ensure package.json.engines exists. */
231
+ export function ensureEngines(pkg) {
232
+ if (isStringMap(pkg.engines)) {
233
+ return pkg.engines;
234
+ }
235
+ const next = {};
236
+ pkg.engines = next;
237
+ return next;
238
+ }
239
+ /** Ensure package.json.nx exists. */
240
+ export function ensureNx(pkg) {
241
+ if (isPackageNxConfig(pkg.nx)) {
242
+ return pkg.nx;
243
+ }
244
+ const next = {};
245
+ pkg.nx = next;
246
+ return next;
7
247
  }
8
- export function recordProperty(record, key) {
9
- const value = record[key];
10
- return isRecord(value) ? value : null;
248
+ /** Ensure package.json.nx.targets exists. */
249
+ export function ensureNxTargets(nx) {
250
+ if (isNxTargets(nx.targets)) {
251
+ return nx.targets;
252
+ }
253
+ const next = {};
254
+ nx.targets = next;
255
+ return next;
11
256
  }
12
- export function getOrCreateRecord(record, key) {
13
- const value = record[key];
14
- if (isRecord(value)) {
15
- return value;
257
+ /** Ensure package.json.publishConfig exists. */
258
+ export function ensurePublishConfig(pkg) {
259
+ if (isPublishConfig(pkg.publishConfig)) {
260
+ return pkg.publishConfig;
16
261
  }
17
262
  const next = {};
18
- record[key] = next;
263
+ pkg.publishConfig = next;
264
+ return next;
265
+ }
266
+ /** Ensure package.json.repository is an object (not a string URL). */
267
+ export function ensureRepositoryObject(pkg) {
268
+ if (isRepositoryObject(pkg.repository)) {
269
+ return pkg.repository;
270
+ }
271
+ const next = {};
272
+ pkg.repository = next;
19
273
  return next;
20
274
  }
21
275
  export function setStringProperty(record, key, value) {
@@ -32,26 +286,60 @@ export function setMissingStringProperty(record, key, value) {
32
286
  record[key] = value;
33
287
  return true;
34
288
  }
35
- export function requiredJsonObject(path) {
36
- const json = readJsonObject(path);
37
- if (!json) {
38
- throw new Error(`${path} not found or invalid`);
289
+ export function setPackageStringField(pkg, key, value) {
290
+ if (pkg[key] === value) {
291
+ return false;
39
292
  }
40
- return json;
293
+ pkg[key] = value;
294
+ return true;
41
295
  }
42
- export function readJsonObject(path) {
43
- const json = readJson(path);
44
- return isRecord(json) ? json : null;
296
+ export function setMissingPackageStringField(pkg, key, value) {
297
+ if (typeof pkg[key] === 'string') {
298
+ return false;
299
+ }
300
+ pkg[key] = value;
301
+ return true;
45
302
  }
46
- export function writeJsonObject(path, value) {
47
- writeFileSync(path, jsonObjectText(value));
303
+ export function setNxName(nx, value) {
304
+ if (nx.name === value) {
305
+ return false;
306
+ }
307
+ nx.name = value;
308
+ return true;
48
309
  }
49
- export function jsonObjectText(value) {
50
- return `${JSON.stringify(value, null, 2)}\n`;
310
+ export function setPublishAccess(publishConfig, value) {
311
+ if (publishConfig.access === value) {
312
+ return false;
313
+ }
314
+ publishConfig.access = value;
315
+ return true;
51
316
  }
52
- export function readJson(path) {
53
- if (!existsSync(path)) {
54
- return null;
317
+ export function setRepositoryField(repository, key, value) {
318
+ if (repository[key] === value) {
319
+ return false;
55
320
  }
56
- return JSON.parse(readFileSync(path, 'utf8'));
321
+ repository[key] = value;
322
+ return true;
323
+ }
324
+ export function setMissingRepositoryField(repository, key, value) {
325
+ if (typeof repository[key] === 'string') {
326
+ return false;
327
+ }
328
+ repository[key] = value;
329
+ return true;
330
+ }
331
+ function isStringMap(value) {
332
+ return value !== null && value !== undefined && typeof value === 'object' && !Array.isArray(value);
333
+ }
334
+ function isPackageNxConfig(value) {
335
+ return value !== null && value !== undefined && typeof value === 'object' && !Array.isArray(value);
336
+ }
337
+ function isNxTargets(value) {
338
+ return value !== null && value !== undefined && typeof value === 'object' && !Array.isArray(value);
339
+ }
340
+ function isPublishConfig(value) {
341
+ return value !== null && value !== undefined && typeof value === 'object' && !Array.isArray(value);
342
+ }
343
+ function isRepositoryObject(value) {
344
+ return value !== null && value !== undefined && typeof value === 'object' && !Array.isArray(value);
57
345
  }
@@ -1,3 +1,5 @@
1
+ import { type PackageJson, type PackageNxConfig, type PackageRepository } from './json.js';
2
+ export type { PackageJson, PackageNxConfig, PackageRepository };
1
3
  export interface PackageInfo {
2
4
  name: string;
3
5
  projectName: string;
@@ -6,7 +8,7 @@ export interface PackageInfo {
6
8
  tags: string[];
7
9
  path: string;
8
10
  packageJsonPath: string;
9
- json: Record<string, unknown>;
11
+ json: PackageJson;
10
12
  }
11
13
  export interface WorkspacePackageManifest {
12
14
  name: string;
@@ -14,23 +16,14 @@ export interface WorkspacePackageManifest {
14
16
  private: boolean;
15
17
  path: string;
16
18
  packageJsonPath: string;
17
- json: Record<string, unknown>;
18
- }
19
- export interface PackageJson extends Record<string, unknown> {
20
- name?: string;
21
- version?: string;
22
- private?: boolean;
23
- workspaces?: unknown;
24
- devDependencies?: unknown;
25
- dependencies?: unknown;
26
- nx?: unknown;
27
- repository?: unknown;
19
+ json: PackageJson;
28
20
  }
29
21
  export interface RepositoryInfo {
30
22
  type: string;
31
23
  url: string;
32
24
  }
33
25
  export declare const workspaceDependencyFields: readonly ['dependencies', 'devDependencies', 'peerDependencies', 'optionalDependencies'];
26
+ export type WorkspaceDependencyField = (typeof workspaceDependencyFields)[number];
34
27
  export declare function listPublicPackages(root: string): PackageInfo[];
35
28
  export declare function listReleasePackages(root: string, rootPackage?: PackageInfo | null): PackageInfo[];
36
29
  export declare function rootRepositoryInfo(root: string): RepositoryInfo | null;
@@ -45,8 +38,8 @@ export declare function getWorkspacePatterns(root: string): string[];
45
38
  export declare function readPackageJson(path: string): PackageInfo | null;
46
39
  export declare function readWorkspacePackageManifest(path: string): WorkspacePackageManifest | null;
47
40
  export declare function readPackageJsonObject(path: string): PackageJson | null;
48
- export declare function getNxTags(pkg: Record<string, unknown>): string[];
49
- export declare function repositoryInfo(pkg: Record<string, unknown>): RepositoryInfo | null;
41
+ export declare function getNxTags(pkg: PackageJson): string[];
42
+ export declare function repositoryInfo(pkg: PackageJson): RepositoryInfo | null;
50
43
  export declare function sameRepositoryAfterNormalization(left: string, right: string): boolean;
51
44
  export declare function escapeRegex(value: string): string;
52
45
  //# sourceMappingURL=workspace.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"workspace.d.ts","sourceRoot":"","sources":["../../src/lib/workspace.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"workspace.d.ts","sourceRoot":"","sources":["../../src/lib/workspace.ts"],"names":[],"mappings":"AAGA,OAAO,EAEL,KAAK,WAAW,EAChB,KAAK,eAAe,EACpB,KAAK,iBAAiB,EAGvB,MAAM,WAAW,CAAC;AAEnB,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,iBAAiB,EAAE,CAAC;AAEhE,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,eAAe,EAAE,MAAM,CAAC;IACxB,IAAI,EAAE,WAAW,CAAC;CACnB;AAED,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,eAAe,EAAE,MAAM,CAAC;IACxB,IAAI,EAAE,WAAW,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;CACb;AAED,eAAO,MAAM,yBAAyB,YACpC,cAAc,EACd,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,CACd,CAAC;AAEX,MAAM,MAAM,wBAAwB,GAAG,CAAC,OAAO,yBAAyB,CAAC,CAAC,MAAM,CAAC,CAAC;AAElF,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,EAAE,CAE9D;AAED,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,EACZ,WAAW,qBAA8C,GACxD,WAAW,EAAE,CAMf;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAGtE;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAG3D;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE5D;AAED,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,WAAW,GAAG,cAAc,GAAG,IAAI,CAE7E;AAED,wBAAgB,cAAc,CAAC,cAAc,EAAE,cAAc,EAAE,GAAG,EAAE,WAAW,GAAG,OAAO,CAGxF;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,EAAE,CAEhE;AAED,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,MAAM,GAAG,wBAAwB,EAAE,CAErF;AA8DD,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,EAAE,CASlE;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAI3D;AAaD,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAehE;AAED,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,MAAM,GAAG,wBAAwB,GAAG,IAAI,CAa1F;AAMD,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAEtE;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,WAAW,GAAG,MAAM,EAAE,CAMpD;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,WAAW,GAAG,cAAc,GAAG,IAAI,CAatE;AAED,wBAAgB,gCAAgC,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAErF;AA6BD,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEjD"}