@cbnventures/nova 0.12.0 → 0.13.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.
Files changed (183) hide show
  1. package/build/eslint.config.d.ts +32 -1
  2. package/build/eslint.config.d.ts.map +1 -1
  3. package/build/eslint.config.js +9 -1
  4. package/build/eslint.config.js.map +1 -1
  5. package/build/package.json +63 -59
  6. package/build/src/api/node-releases.d.ts +7 -0
  7. package/build/src/api/node-releases.d.ts.map +1 -0
  8. package/build/src/api/node-releases.js +67 -0
  9. package/build/src/api/node-releases.js.map +1 -0
  10. package/build/src/api/spdx-licenses.d.ts +7 -0
  11. package/build/src/api/spdx-licenses.d.ts.map +1 -0
  12. package/build/src/api/spdx-licenses.js +43 -0
  13. package/build/src/api/spdx-licenses.js.map +1 -0
  14. package/build/src/cli/index.js +60 -18
  15. package/build/src/cli/index.js.map +1 -1
  16. package/build/src/cli/recipe/pin-versions.d.ts +7 -0
  17. package/build/src/cli/recipe/pin-versions.d.ts.map +1 -0
  18. package/build/src/cli/recipe/pin-versions.js +145 -0
  19. package/build/src/cli/recipe/pin-versions.js.map +1 -0
  20. package/build/src/cli/recipe/sync-lts-engines.d.ts +6 -0
  21. package/build/src/cli/recipe/sync-lts-engines.d.ts.map +1 -0
  22. package/build/src/cli/recipe/sync-lts-engines.js +118 -0
  23. package/build/src/cli/recipe/sync-lts-engines.js.map +1 -0
  24. package/build/src/cli/recipe/sync-packages.d.ts +18 -0
  25. package/build/src/cli/recipe/sync-packages.d.ts.map +1 -0
  26. package/build/src/cli/recipe/sync-packages.js +1212 -0
  27. package/build/src/cli/recipe/sync-packages.js.map +1 -0
  28. package/build/src/cli/utility/changelog.d.ts +11 -0
  29. package/build/src/cli/utility/changelog.d.ts.map +1 -0
  30. package/build/src/cli/utility/changelog.js +670 -0
  31. package/build/src/cli/utility/changelog.js.map +1 -0
  32. package/build/src/cli/utility/initialize.d.ts +9 -5
  33. package/build/src/cli/utility/initialize.d.ts.map +1 -1
  34. package/build/src/cli/utility/initialize.js +478 -210
  35. package/build/src/cli/utility/initialize.js.map +1 -1
  36. package/build/src/cli/utility/type-check.d.ts +9 -0
  37. package/build/src/cli/utility/type-check.d.ts.map +1 -0
  38. package/build/src/cli/utility/type-check.js +59 -0
  39. package/build/src/cli/utility/type-check.js.map +1 -0
  40. package/build/src/cli/utility/version.d.ts +2 -2
  41. package/build/src/cli/utility/version.d.ts.map +1 -1
  42. package/build/src/cli/utility/version.js +107 -68
  43. package/build/src/cli/utility/version.js.map +1 -1
  44. package/build/src/lib/item.d.ts +23 -5
  45. package/build/src/lib/item.d.ts.map +1 -1
  46. package/build/src/lib/item.js +329 -4
  47. package/build/src/lib/item.js.map +1 -1
  48. package/build/src/lib/nova-config.d.ts +4 -4
  49. package/build/src/lib/nova-config.d.ts.map +1 -1
  50. package/build/src/lib/nova-config.js +76 -88
  51. package/build/src/lib/nova-config.js.map +1 -1
  52. package/build/src/lib/regex.d.ts +9 -1
  53. package/build/src/lib/regex.d.ts.map +1 -1
  54. package/build/src/lib/regex.js +9 -1
  55. package/build/src/lib/regex.js.map +1 -1
  56. package/build/src/lib/schema.d.ts +18 -0
  57. package/build/src/lib/schema.d.ts.map +1 -0
  58. package/build/src/lib/schema.js +13 -0
  59. package/build/src/lib/schema.js.map +1 -0
  60. package/build/src/lib/utility.d.ts +9 -1
  61. package/build/src/lib/utility.d.ts.map +1 -1
  62. package/build/src/lib/utility.js +219 -40
  63. package/build/src/lib/utility.js.map +1 -1
  64. package/build/src/presets/eslint/dx-code-style.d.mts.map +1 -1
  65. package/build/src/presets/eslint/dx-code-style.mjs +0 -20
  66. package/build/src/presets/eslint/dx-code-style.mjs.map +1 -1
  67. package/build/src/presets/eslint/lang-mdx.d.mts.map +1 -1
  68. package/build/src/presets/eslint/lang-mdx.mjs +0 -21
  69. package/build/src/presets/eslint/lang-mdx.mjs.map +1 -1
  70. package/build/src/presets/tsconfig/dx-strict.json +2 -1
  71. package/build/src/rules/eslint/index.d.ts +4 -0
  72. package/build/src/rules/eslint/index.d.ts.map +1 -1
  73. package/build/src/rules/eslint/index.js +4 -0
  74. package/build/src/rules/eslint/index.js.map +1 -1
  75. package/build/src/rules/eslint/no-logger-dev.d.ts +3 -1
  76. package/build/src/rules/eslint/no-logger-dev.d.ts.map +1 -1
  77. package/build/src/rules/eslint/no-logger-dev.js +4 -4
  78. package/build/src/rules/eslint/no-logger-dev.js.map +1 -1
  79. package/build/src/rules/eslint/no-raw-text-in-code.d.ts +6 -0
  80. package/build/src/rules/eslint/no-raw-text-in-code.d.ts.map +1 -0
  81. package/build/src/rules/eslint/no-raw-text-in-code.js +34 -0
  82. package/build/src/rules/eslint/no-raw-text-in-code.js.map +1 -0
  83. package/build/src/rules/eslint/no-regex-literal-flags.d.ts +6 -0
  84. package/build/src/rules/eslint/no-regex-literal-flags.d.ts.map +1 -0
  85. package/build/src/rules/eslint/no-regex-literal-flags.js +30 -0
  86. package/build/src/rules/eslint/no-regex-literal-flags.js.map +1 -0
  87. package/build/src/rules/eslint/no-regex-literals.d.ts +9 -0
  88. package/build/src/rules/eslint/no-regex-literals.d.ts.map +1 -0
  89. package/build/src/rules/eslint/no-regex-literals.js +55 -0
  90. package/build/src/rules/eslint/no-regex-literals.js.map +1 -0
  91. package/build/src/rules/eslint/switch-case-blocks.d.ts +6 -0
  92. package/build/src/rules/eslint/switch-case-blocks.d.ts.map +1 -0
  93. package/build/src/rules/eslint/switch-case-blocks.js +36 -0
  94. package/build/src/rules/eslint/switch-case-blocks.js.map +1 -0
  95. package/build/src/tests/api/node-releases.test.d.ts +2 -0
  96. package/build/src/tests/api/node-releases.test.d.ts.map +1 -0
  97. package/build/src/tests/api/node-releases.test.js +193 -0
  98. package/build/src/tests/api/node-releases.test.js.map +1 -0
  99. package/build/src/tests/api/spdx-licenses.test.d.ts +2 -0
  100. package/build/src/tests/api/spdx-licenses.test.d.ts.map +1 -0
  101. package/build/src/tests/api/spdx-licenses.test.js +91 -0
  102. package/build/src/tests/api/spdx-licenses.test.js.map +1 -0
  103. package/build/src/tests/cli/recipe/pin-versions.test.d.ts +2 -0
  104. package/build/src/tests/cli/recipe/pin-versions.test.d.ts.map +1 -0
  105. package/build/src/tests/cli/recipe/pin-versions.test.js +197 -0
  106. package/build/src/tests/cli/recipe/pin-versions.test.js.map +1 -0
  107. package/build/src/tests/cli/recipe/sync-lts-engines.test.d.ts +2 -0
  108. package/build/src/tests/cli/recipe/sync-lts-engines.test.d.ts.map +1 -0
  109. package/build/src/tests/cli/recipe/sync-lts-engines.test.js +131 -0
  110. package/build/src/tests/cli/recipe/sync-lts-engines.test.js.map +1 -0
  111. package/build/src/tests/lib/item.test.d.ts +2 -0
  112. package/build/src/tests/lib/item.test.d.ts.map +1 -0
  113. package/build/src/tests/lib/item.test.js +142 -0
  114. package/build/src/tests/lib/item.test.js.map +1 -0
  115. package/build/src/tests/lib/nova-config.test.d.ts +2 -0
  116. package/build/src/tests/lib/nova-config.test.d.ts.map +1 -0
  117. package/build/src/tests/lib/nova-config.test.js +489 -0
  118. package/build/src/tests/lib/nova-config.test.js.map +1 -0
  119. package/build/src/tests/lib/regex.test.d.ts +2 -0
  120. package/build/src/tests/lib/regex.test.d.ts.map +1 -0
  121. package/build/src/tests/lib/regex.test.js +342 -0
  122. package/build/src/tests/lib/regex.test.js.map +1 -0
  123. package/build/src/tests/lib/schema.test.d.ts +2 -0
  124. package/build/src/tests/lib/schema.test.d.ts.map +1 -0
  125. package/build/src/tests/lib/schema.test.js +260 -0
  126. package/build/src/tests/lib/schema.test.js.map +1 -0
  127. package/build/src/tests/lib/utility.test.js +704 -44
  128. package/build/src/tests/lib/utility.test.js.map +1 -1
  129. package/build/src/tests/rules/eslint/no-logger-dev.test.d.ts +2 -0
  130. package/build/src/tests/rules/eslint/no-logger-dev.test.d.ts.map +1 -0
  131. package/build/src/tests/rules/eslint/no-logger-dev.test.js +55 -0
  132. package/build/src/tests/rules/eslint/no-logger-dev.test.js.map +1 -0
  133. package/build/src/tests/rules/eslint/no-raw-text-in-code.test.d.ts +2 -0
  134. package/build/src/tests/rules/eslint/no-raw-text-in-code.test.d.ts.map +1 -0
  135. package/build/src/tests/rules/eslint/no-raw-text-in-code.test.js +47 -0
  136. package/build/src/tests/rules/eslint/no-raw-text-in-code.test.js.map +1 -0
  137. package/build/src/tests/rules/eslint/no-regex-literal-flags.test.d.ts +2 -0
  138. package/build/src/tests/rules/eslint/no-regex-literal-flags.test.d.ts.map +1 -0
  139. package/build/src/tests/rules/eslint/no-regex-literal-flags.test.js +47 -0
  140. package/build/src/tests/rules/eslint/no-regex-literal-flags.test.js.map +1 -0
  141. package/build/src/tests/rules/eslint/no-regex-literals.test.d.ts +2 -0
  142. package/build/src/tests/rules/eslint/no-regex-literals.test.d.ts.map +1 -0
  143. package/build/src/tests/rules/eslint/no-regex-literals.test.js +49 -0
  144. package/build/src/tests/rules/eslint/no-regex-literals.test.js.map +1 -0
  145. package/build/src/tests/rules/eslint/switch-case-blocks.test.d.ts +2 -0
  146. package/build/src/tests/rules/eslint/switch-case-blocks.test.d.ts.map +1 -0
  147. package/build/src/tests/rules/eslint/switch-case-blocks.test.js +43 -0
  148. package/build/src/tests/rules/eslint/switch-case-blocks.test.js.map +1 -0
  149. package/build/src/tests/toolkit/cli-header.test.d.ts +2 -0
  150. package/build/src/tests/toolkit/cli-header.test.d.ts.map +1 -0
  151. package/build/src/tests/toolkit/cli-header.test.js +143 -0
  152. package/build/src/tests/toolkit/cli-header.test.js.map +1 -0
  153. package/build/src/tests/toolkit/logger.test.d.ts +2 -0
  154. package/build/src/tests/toolkit/logger.test.d.ts.map +1 -0
  155. package/build/src/tests/toolkit/logger.test.js +96 -0
  156. package/build/src/tests/toolkit/logger.test.js.map +1 -0
  157. package/build/src/tests/toolkit/markdown-table.test.d.ts +2 -0
  158. package/build/src/tests/toolkit/markdown-table.test.d.ts.map +1 -0
  159. package/build/src/tests/toolkit/markdown-table.test.js +138 -0
  160. package/build/src/tests/toolkit/markdown-table.test.js.map +1 -0
  161. package/build/src/toolkit/cli-header.d.ts +1 -0
  162. package/build/src/toolkit/cli-header.d.ts.map +1 -1
  163. package/build/src/toolkit/cli-header.js +24 -13
  164. package/build/src/toolkit/cli-header.js.map +1 -1
  165. package/build/src/toolkit/index.d.ts +1 -1
  166. package/build/src/toolkit/index.d.ts.map +1 -1
  167. package/build/src/toolkit/index.js +1 -1
  168. package/build/src/toolkit/index.js.map +1 -1
  169. package/build/src/toolkit/logger.d.ts.map +1 -1
  170. package/build/src/toolkit/logger.js +25 -10
  171. package/build/src/toolkit/logger.js.map +1 -1
  172. package/build/src/toolkit/markdown-table.d.ts.map +1 -1
  173. package/build/src/toolkit/markdown-table.js +3 -3
  174. package/build/src/toolkit/markdown-table.js.map +1 -1
  175. package/package.json +63 -59
  176. package/build/src/cli/recipe/sync-metadata.d.ts +0 -5
  177. package/build/src/cli/recipe/sync-metadata.d.ts.map +0 -1
  178. package/build/src/cli/recipe/sync-metadata.js +0 -7
  179. package/build/src/cli/recipe/sync-metadata.js.map +0 -1
  180. package/build/src/cli/recipe/sync-versions.d.ts +0 -5
  181. package/build/src/cli/recipe/sync-versions.d.ts.map +0 -1
  182. package/build/src/cli/recipe/sync-versions.js +0 -7
  183. package/build/src/cli/recipe/sync-versions.js.map +0 -1
@@ -0,0 +1,197 @@
1
+ import { strictEqual } from 'node:assert/strict';
2
+ import { mkdir, mkdtemp, readFile, realpath, rm, writeFile, } from 'node:fs/promises';
3
+ import { tmpdir } from 'node:os';
4
+ import { join } from 'node:path';
5
+ import { test } from 'node:test';
6
+ import { CLIRecipePinVersions } from '../../../cli/recipe/pin-versions.js';
7
+ test('CLIRecipePinVersions.run', async (context) => {
8
+ const originalCwd = process.cwd();
9
+ const sandboxRoot = await mkdtemp(join(tmpdir(), `nova-${context.name}-`));
10
+ context.after(async () => {
11
+ process.chdir(originalCwd);
12
+ process.exitCode = undefined;
13
+ await rm(sandboxRoot, {
14
+ recursive: true,
15
+ force: true,
16
+ });
17
+ });
18
+ await context.test('strips caret prefix from dependencies', async () => {
19
+ const projectRoot = join(sandboxRoot, 'strip-caret');
20
+ await mkdir(projectRoot, { recursive: true });
21
+ const novaConfigJson = JSON.stringify({
22
+ workspaces: {
23
+ './': {
24
+ name: 'project',
25
+ role: 'project',
26
+ policy: 'freezable',
27
+ pinVersions: true,
28
+ },
29
+ },
30
+ }, null, 2);
31
+ await writeFile(join(projectRoot, 'nova.config.json'), novaConfigJson, 'utf-8');
32
+ const packageJson = JSON.stringify({
33
+ name: 'project',
34
+ dependencies: {
35
+ 'some-dep': '^1.2.3',
36
+ 'another-dep': '~4.5.6',
37
+ },
38
+ devDependencies: {
39
+ 'dev-dep': '^7.8.9',
40
+ },
41
+ }, null, 2);
42
+ await writeFile(join(projectRoot, 'package.json'), `${packageJson}\n`, 'utf-8');
43
+ const realProjectRoot = await realpath(projectRoot);
44
+ process.chdir(realProjectRoot);
45
+ await CLIRecipePinVersions.run({ replaceFile: true });
46
+ const written = JSON.parse(await readFile(join(realProjectRoot, 'package.json'), 'utf-8'));
47
+ strictEqual(written.dependencies['some-dep'], '1.2.3');
48
+ strictEqual(written.dependencies['another-dep'], '4.5.6');
49
+ strictEqual(written.devDependencies['dev-dep'], '7.8.9');
50
+ });
51
+ await context.test('leaves already-pinned versions unchanged', async () => {
52
+ const projectRoot = join(sandboxRoot, 'already-pinned');
53
+ await mkdir(projectRoot, { recursive: true });
54
+ const novaConfigJson = JSON.stringify({
55
+ workspaces: {
56
+ './': {
57
+ name: 'project',
58
+ role: 'project',
59
+ policy: 'freezable',
60
+ pinVersions: true,
61
+ },
62
+ },
63
+ }, null, 2);
64
+ await writeFile(join(projectRoot, 'nova.config.json'), novaConfigJson, 'utf-8');
65
+ const packageJson = JSON.stringify({
66
+ name: 'project',
67
+ dependencies: {
68
+ 'pinned-dep': '1.2.3',
69
+ 'file-dep': 'file:../local',
70
+ },
71
+ }, null, 2);
72
+ await writeFile(join(projectRoot, 'package.json'), `${packageJson}\n`, 'utf-8');
73
+ const realProjectRoot = await realpath(projectRoot);
74
+ process.chdir(realProjectRoot);
75
+ await CLIRecipePinVersions.run({ replaceFile: true });
76
+ const written = JSON.parse(await readFile(join(realProjectRoot, 'package.json'), 'utf-8'));
77
+ strictEqual(written.dependencies['pinned-dep'], '1.2.3');
78
+ strictEqual(written.dependencies['file-dep'], 'file:../local');
79
+ });
80
+ await context.test('sets exit code 1 for unpinnable versions', async () => {
81
+ const projectRoot = join(sandboxRoot, 'unpinnable');
82
+ await mkdir(projectRoot, { recursive: true });
83
+ const novaConfigJson = JSON.stringify({
84
+ workspaces: {
85
+ './': {
86
+ name: 'project',
87
+ role: 'project',
88
+ policy: 'freezable',
89
+ pinVersions: true,
90
+ },
91
+ },
92
+ }, null, 2);
93
+ await writeFile(join(projectRoot, 'nova.config.json'), novaConfigJson, 'utf-8');
94
+ const packageJson = JSON.stringify({
95
+ name: 'project',
96
+ dependencies: {
97
+ 'wild-dep': '*',
98
+ 'latest-dep': 'latest',
99
+ },
100
+ }, null, 2);
101
+ await writeFile(join(projectRoot, 'package.json'), `${packageJson}\n`, 'utf-8');
102
+ const realProjectRoot = await realpath(projectRoot);
103
+ process.chdir(realProjectRoot);
104
+ process.exitCode = undefined;
105
+ await CLIRecipePinVersions.run({ replaceFile: true });
106
+ strictEqual(process.exitCode, 1);
107
+ });
108
+ await context.test('does not write files in dry-run mode', async () => {
109
+ const projectRoot = join(sandboxRoot, 'dry-run');
110
+ await mkdir(projectRoot, { recursive: true });
111
+ const novaConfigJson = JSON.stringify({
112
+ workspaces: {
113
+ './': {
114
+ name: 'project',
115
+ role: 'project',
116
+ policy: 'freezable',
117
+ pinVersions: true,
118
+ },
119
+ },
120
+ }, null, 2);
121
+ await writeFile(join(projectRoot, 'nova.config.json'), novaConfigJson, 'utf-8');
122
+ const packageJson = JSON.stringify({
123
+ name: 'project',
124
+ dependencies: {
125
+ 'some-dep': '^1.2.3',
126
+ },
127
+ }, null, 2);
128
+ const originalContents = `${packageJson}\n`;
129
+ await writeFile(join(projectRoot, 'package.json'), originalContents, 'utf-8');
130
+ const realProjectRoot = await realpath(projectRoot);
131
+ process.chdir(realProjectRoot);
132
+ await CLIRecipePinVersions.run({ dryRun: true });
133
+ const afterContents = await readFile(join(realProjectRoot, 'package.json'), 'utf-8');
134
+ strictEqual(afterContents, originalContents);
135
+ });
136
+ await context.test('skips workspaces without pinVersions enabled', async () => {
137
+ const projectRoot = join(sandboxRoot, 'skip-disabled');
138
+ await mkdir(projectRoot, { recursive: true });
139
+ const novaConfigJson = JSON.stringify({
140
+ workspaces: {
141
+ './': {
142
+ name: 'project',
143
+ role: 'project',
144
+ policy: 'freezable',
145
+ },
146
+ },
147
+ }, null, 2);
148
+ await writeFile(join(projectRoot, 'nova.config.json'), novaConfigJson, 'utf-8');
149
+ const packageJson = JSON.stringify({
150
+ name: 'project',
151
+ dependencies: {
152
+ 'some-dep': '^1.2.3',
153
+ },
154
+ }, null, 2);
155
+ const originalContents = `${packageJson}\n`;
156
+ await writeFile(join(projectRoot, 'package.json'), originalContents, 'utf-8');
157
+ const realProjectRoot = await realpath(projectRoot);
158
+ process.chdir(realProjectRoot);
159
+ await CLIRecipePinVersions.run({ replaceFile: true });
160
+ const afterContents = await readFile(join(realProjectRoot, 'package.json'), 'utf-8');
161
+ strictEqual(afterContents, originalContents);
162
+ });
163
+ await context.test('strips >= > <= < prefixes', async () => {
164
+ const projectRoot = join(sandboxRoot, 'range-prefixes');
165
+ await mkdir(projectRoot, { recursive: true });
166
+ const novaConfigJson = JSON.stringify({
167
+ workspaces: {
168
+ './': {
169
+ name: 'project',
170
+ role: 'project',
171
+ policy: 'freezable',
172
+ pinVersions: true,
173
+ },
174
+ },
175
+ }, null, 2);
176
+ await writeFile(join(projectRoot, 'nova.config.json'), novaConfigJson, 'utf-8');
177
+ const packageJson = JSON.stringify({
178
+ name: 'project',
179
+ dependencies: {
180
+ 'gte-dep': '>=1.0.0',
181
+ 'gt-dep': '>2.0.0',
182
+ 'lte-dep': '<=3.0.0',
183
+ 'lt-dep': '<4.0.0',
184
+ },
185
+ }, null, 2);
186
+ await writeFile(join(projectRoot, 'package.json'), `${packageJson}\n`, 'utf-8');
187
+ const realProjectRoot = await realpath(projectRoot);
188
+ process.chdir(realProjectRoot);
189
+ await CLIRecipePinVersions.run({ replaceFile: true });
190
+ const written = JSON.parse(await readFile(join(realProjectRoot, 'package.json'), 'utf-8'));
191
+ strictEqual(written.dependencies['gte-dep'], '1.0.0');
192
+ strictEqual(written.dependencies['gt-dep'], '2.0.0');
193
+ strictEqual(written.dependencies['lte-dep'], '3.0.0');
194
+ strictEqual(written.dependencies['lt-dep'], '4.0.0');
195
+ });
196
+ });
197
+ //# sourceMappingURL=pin-versions.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pin-versions.test.js","sourceRoot":"","sources":["../../../../../src/tests/cli/recipe/pin-versions.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=sync-lts-engines.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync-lts-engines.test.d.ts","sourceRoot":"","sources":["../../../../../src/tests/cli/recipe/sync-lts-engines.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,131 @@
1
+ import { notStrictEqual, ok, strictEqual } from 'node:assert/strict';
2
+ import { mkdir, mkdtemp, readFile, realpath, rm, writeFile, } from 'node:fs/promises';
3
+ import { tmpdir } from 'node:os';
4
+ import { join } from 'node:path';
5
+ import { test } from 'node:test';
6
+ import { NodeReleases } from '../../../api/node-releases.js';
7
+ import { CLIRecipeSyncLtsEngines } from '../../../cli/recipe/sync-lts-engines.js';
8
+ test('CLIRecipeSyncLtsEngines.run', async (context) => {
9
+ const originalCwd = process.cwd();
10
+ const sandboxRoot = await mkdtemp(join(tmpdir(), `nova-${context.name}-`));
11
+ context.after(async () => {
12
+ process.chdir(originalCwd);
13
+ process.exitCode = undefined;
14
+ NodeReleases.resetForTesting();
15
+ await rm(sandboxRoot, {
16
+ recursive: true,
17
+ force: true,
18
+ });
19
+ });
20
+ await context.test('creates engines.node when engines field does not exist', async () => {
21
+ const projectRoot = join(sandboxRoot, 'create-engines');
22
+ await mkdir(projectRoot, { recursive: true });
23
+ const novaConfigJson = JSON.stringify({
24
+ workspaces: {
25
+ './': {
26
+ name: 'project',
27
+ role: 'project',
28
+ policy: 'freezable',
29
+ syncLtsEngines: true,
30
+ },
31
+ },
32
+ }, null, 2);
33
+ await writeFile(join(projectRoot, 'nova.config.json'), novaConfigJson, 'utf-8');
34
+ const packageJson = JSON.stringify({
35
+ name: 'project',
36
+ }, null, 2);
37
+ await writeFile(join(projectRoot, 'package.json'), `${packageJson}\n`, 'utf-8');
38
+ const realProjectRoot = await realpath(projectRoot);
39
+ process.chdir(realProjectRoot);
40
+ await CLIRecipeSyncLtsEngines.run({ replaceFile: true });
41
+ const written = JSON.parse(await readFile(join(realProjectRoot, 'package.json'), 'utf-8'));
42
+ const writtenEngines = written.engines;
43
+ notStrictEqual(writtenEngines, undefined);
44
+ ok(typeof writtenEngines.node === 'string');
45
+ ok(writtenEngines.node.includes('^'));
46
+ });
47
+ await context.test('updates engines.node when it differs from current LTS', async () => {
48
+ const projectRoot = join(sandboxRoot, 'update-engines');
49
+ await mkdir(projectRoot, { recursive: true });
50
+ const novaConfigJson = JSON.stringify({
51
+ workspaces: {
52
+ './': {
53
+ name: 'project',
54
+ role: 'project',
55
+ policy: 'freezable',
56
+ syncLtsEngines: true,
57
+ },
58
+ },
59
+ }, null, 2);
60
+ await writeFile(join(projectRoot, 'nova.config.json'), novaConfigJson, 'utf-8');
61
+ const packageJson = JSON.stringify({
62
+ name: 'project',
63
+ engines: {
64
+ node: '^16',
65
+ },
66
+ }, null, 2);
67
+ await writeFile(join(projectRoot, 'package.json'), `${packageJson}\n`, 'utf-8');
68
+ const realProjectRoot = await realpath(projectRoot);
69
+ process.chdir(realProjectRoot);
70
+ await CLIRecipeSyncLtsEngines.run({ replaceFile: true });
71
+ const written = JSON.parse(await readFile(join(realProjectRoot, 'package.json'), 'utf-8'));
72
+ notStrictEqual(written.engines.node, '^16');
73
+ ok(written.engines.node.includes('||'));
74
+ });
75
+ await context.test('skips workspaces without syncLtsEngines enabled', async () => {
76
+ const projectRoot = join(sandboxRoot, 'skip-disabled');
77
+ await mkdir(projectRoot, { recursive: true });
78
+ const novaConfigJson = JSON.stringify({
79
+ workspaces: {
80
+ './': {
81
+ name: 'project',
82
+ role: 'project',
83
+ policy: 'freezable',
84
+ },
85
+ },
86
+ }, null, 2);
87
+ await writeFile(join(projectRoot, 'nova.config.json'), novaConfigJson, 'utf-8');
88
+ const packageJson = JSON.stringify({
89
+ name: 'project',
90
+ engines: {
91
+ node: '^16',
92
+ },
93
+ }, null, 2);
94
+ const originalContents = `${packageJson}\n`;
95
+ await writeFile(join(projectRoot, 'package.json'), originalContents, 'utf-8');
96
+ const realProjectRoot = await realpath(projectRoot);
97
+ process.chdir(realProjectRoot);
98
+ await CLIRecipeSyncLtsEngines.run({ replaceFile: true });
99
+ const afterContents = await readFile(join(realProjectRoot, 'package.json'), 'utf-8');
100
+ strictEqual(afterContents, originalContents);
101
+ });
102
+ await context.test('does not write files in dry-run mode', async () => {
103
+ const projectRoot = join(sandboxRoot, 'dry-run');
104
+ await mkdir(projectRoot, { recursive: true });
105
+ const novaConfigJson = JSON.stringify({
106
+ workspaces: {
107
+ './': {
108
+ name: 'project',
109
+ role: 'project',
110
+ policy: 'freezable',
111
+ syncLtsEngines: true,
112
+ },
113
+ },
114
+ }, null, 2);
115
+ await writeFile(join(projectRoot, 'nova.config.json'), novaConfigJson, 'utf-8');
116
+ const packageJson = JSON.stringify({
117
+ name: 'project',
118
+ engines: {
119
+ node: '^16',
120
+ },
121
+ }, null, 2);
122
+ const originalContents = `${packageJson}\n`;
123
+ await writeFile(join(projectRoot, 'package.json'), originalContents, 'utf-8');
124
+ const realProjectRoot = await realpath(projectRoot);
125
+ process.chdir(realProjectRoot);
126
+ await CLIRecipeSyncLtsEngines.run({ dryRun: true });
127
+ const afterContents = await readFile(join(realProjectRoot, 'package.json'), 'utf-8');
128
+ strictEqual(afterContents, originalContents);
129
+ });
130
+ });
131
+ //# sourceMappingURL=sync-lts-engines.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync-lts-engines.test.js","sourceRoot":"","sources":["../../../../../src/tests/cli/recipe/sync-lts-engines.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=item.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"item.test.d.ts","sourceRoot":"","sources":["../../../../src/tests/lib/item.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,142 @@
1
+ import { ok, strictEqual } from 'node:assert/strict';
2
+ import { test } from 'node:test';
3
+ import { itemAllowedPoliciesByRole, itemAllowedRoles, itemAllowedSyncProperties, itemChangelogAdjectives, itemChangelogCategoryBumpMap, itemChangelogNouns, itemChangelogValidBumps, itemChangelogValidCategories, itemChangelogVerbs, itemPackageJsonKeysBundler, itemPackageJsonKeysCorepack, itemPackageJsonKeysNodeJs, itemPackageJsonKeysNpm, itemPackageJsonSortOrder, itemPrettyNamesBrand, itemPrettyNamesCategory, itemPrettyNamesColumnTitle, itemPrettyNamesType, } from '../../lib/item.js';
4
+ test('allowed roles and policies', async (context) => {
5
+ await context.test('itemAllowedRoles contains expected roles', () => {
6
+ ok(itemAllowedRoles.includes('project'));
7
+ ok(itemAllowedRoles.includes('docs'));
8
+ ok(itemAllowedRoles.includes('config'));
9
+ ok(itemAllowedRoles.includes('app'));
10
+ ok(itemAllowedRoles.includes('package'));
11
+ ok(itemAllowedRoles.includes('tool'));
12
+ ok(itemAllowedRoles.includes('template'));
13
+ });
14
+ await context.test('itemAllowedRoles has no duplicates', () => {
15
+ const unique = new Set(itemAllowedRoles);
16
+ strictEqual(unique.size, itemAllowedRoles.length);
17
+ });
18
+ await context.test('itemAllowedPoliciesByRole covers all roles', () => {
19
+ for (const role of itemAllowedRoles) {
20
+ ok(role in itemAllowedPoliciesByRole, `Missing policies for role "${role}"`);
21
+ }
22
+ });
23
+ await context.test('itemAllowedPoliciesByRole has no extra roles', () => {
24
+ const policyRoles = Object.keys(itemAllowedPoliciesByRole);
25
+ for (const role of policyRoles) {
26
+ const found = itemAllowedRoles.find((allowedRole) => allowedRole === role);
27
+ ok(found !== undefined, `Unexpected role "${role}" in policies`);
28
+ }
29
+ });
30
+ });
31
+ test('itemAllowedSyncProperties', async (context) => {
32
+ await context.test('has no duplicates', () => {
33
+ const unique = new Set(itemAllowedSyncProperties);
34
+ strictEqual(unique.size, itemAllowedSyncProperties.length);
35
+ });
36
+ await context.test('contains expected properties', () => {
37
+ ok(itemAllowedSyncProperties.includes('description'));
38
+ ok(itemAllowedSyncProperties.includes('author'));
39
+ ok(itemAllowedSyncProperties.includes('repository'));
40
+ });
41
+ });
42
+ test('changelog constants', async (context) => {
43
+ await context.test('itemChangelogValidBumps has no duplicates', () => {
44
+ const unique = new Set(itemChangelogValidBumps);
45
+ strictEqual(unique.size, itemChangelogValidBumps.length);
46
+ });
47
+ await context.test('itemChangelogValidBumps contains major, minor, patch', () => {
48
+ ok(itemChangelogValidBumps.includes('major'));
49
+ ok(itemChangelogValidBumps.includes('minor'));
50
+ ok(itemChangelogValidBumps.includes('patch'));
51
+ });
52
+ await context.test('itemChangelogValidCategories has no duplicates', () => {
53
+ const unique = new Set(itemChangelogValidCategories);
54
+ strictEqual(unique.size, itemChangelogValidCategories.length);
55
+ });
56
+ await context.test('itemChangelogValidCategories contains expected categories', () => {
57
+ ok(itemChangelogValidCategories.includes('added'));
58
+ ok(itemChangelogValidCategories.includes('updated'));
59
+ ok(itemChangelogValidCategories.includes('fixed'));
60
+ ok(itemChangelogValidCategories.includes('removed'));
61
+ });
62
+ await context.test('itemChangelogCategoryBumpMap covers all categories', () => {
63
+ for (const category of itemChangelogValidCategories) {
64
+ ok(category in itemChangelogCategoryBumpMap, `Missing bump for category "${category}"`);
65
+ }
66
+ });
67
+ await context.test('itemChangelogCategoryBumpMap values are valid bumps', () => {
68
+ for (const [category, bump] of Object.entries(itemChangelogCategoryBumpMap)) {
69
+ ok(itemChangelogValidBumps.includes(bump), `Invalid bump "${bump}" for category "${category}"`);
70
+ }
71
+ });
72
+ await context.test('itemChangelogAdjectives has no duplicates', () => {
73
+ const unique = new Set(itemChangelogAdjectives);
74
+ strictEqual(unique.size, itemChangelogAdjectives.length);
75
+ });
76
+ await context.test('itemChangelogNouns has no duplicates', () => {
77
+ const unique = new Set(itemChangelogNouns);
78
+ strictEqual(unique.size, itemChangelogNouns.length);
79
+ });
80
+ await context.test('itemChangelogVerbs has no duplicates', () => {
81
+ const unique = new Set(itemChangelogVerbs);
82
+ strictEqual(unique.size, itemChangelogVerbs.length);
83
+ });
84
+ await context.test('word arrays have minimum length for sufficient combinations', () => {
85
+ ok(itemChangelogAdjectives.length >= 10);
86
+ ok(itemChangelogNouns.length >= 10);
87
+ ok(itemChangelogVerbs.length >= 10);
88
+ });
89
+ });
90
+ test('package.json key arrays', async (context) => {
91
+ await context.test('itemPackageJsonSortOrder has no duplicates', () => {
92
+ const unique = new Set(itemPackageJsonSortOrder);
93
+ strictEqual(unique.size, itemPackageJsonSortOrder.length);
94
+ });
95
+ await context.test('itemPackageJsonSortOrder contains critical keys', () => {
96
+ ok(itemPackageJsonSortOrder.includes('name'));
97
+ ok(itemPackageJsonSortOrder.includes('version'));
98
+ ok(itemPackageJsonSortOrder.includes('description'));
99
+ ok(itemPackageJsonSortOrder.includes('license'));
100
+ ok(itemPackageJsonSortOrder.includes('dependencies'));
101
+ ok(itemPackageJsonSortOrder.includes('devDependencies'));
102
+ });
103
+ await context.test('itemPackageJsonKeysNpm has no duplicates', () => {
104
+ const unique = new Set(itemPackageJsonKeysNpm);
105
+ strictEqual(unique.size, itemPackageJsonKeysNpm.length);
106
+ });
107
+ await context.test('itemPackageJsonKeysNodeJs has no duplicates', () => {
108
+ const unique = new Set(itemPackageJsonKeysNodeJs);
109
+ strictEqual(unique.size, itemPackageJsonKeysNodeJs.length);
110
+ });
111
+ await context.test('itemPackageJsonKeysBundler has no duplicates', () => {
112
+ const unique = new Set(itemPackageJsonKeysBundler);
113
+ strictEqual(unique.size, itemPackageJsonKeysBundler.length);
114
+ });
115
+ await context.test('itemPackageJsonKeysCorepack has no duplicates', () => {
116
+ const unique = new Set(itemPackageJsonKeysCorepack);
117
+ strictEqual(unique.size, itemPackageJsonKeysCorepack.length);
118
+ });
119
+ });
120
+ test('pretty name maps', async (context) => {
121
+ await context.test('itemPrettyNamesBrand values are non-empty strings', () => {
122
+ for (const [key, value] of Object.entries(itemPrettyNamesBrand)) {
123
+ ok(value.length > 0, `Empty value for brand key "${key}"`);
124
+ }
125
+ });
126
+ await context.test('itemPrettyNamesCategory values are non-empty strings', () => {
127
+ for (const [key, value] of Object.entries(itemPrettyNamesCategory)) {
128
+ ok(value.length > 0, `Empty value for category key "${key}"`);
129
+ }
130
+ });
131
+ await context.test('itemPrettyNamesColumnTitle values are non-empty strings', () => {
132
+ for (const [key, value] of Object.entries(itemPrettyNamesColumnTitle)) {
133
+ ok(value.length > 0, `Empty value for column title key "${key}"`);
134
+ }
135
+ });
136
+ await context.test('itemPrettyNamesType values are non-empty strings', () => {
137
+ for (const [key, value] of Object.entries(itemPrettyNamesType)) {
138
+ ok(value.length > 0, `Empty value for type key "${key}"`);
139
+ }
140
+ });
141
+ });
142
+ //# sourceMappingURL=item.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"item.test.js","sourceRoot":"","sources":["../../../../src/tests/lib/item.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=nova-config.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nova-config.test.d.ts","sourceRoot":"","sources":["../../../../src/tests/lib/nova-config.test.ts"],"names":[],"mappings":""}