@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,489 @@
1
+ import { deepStrictEqual, doesNotThrow, fail, strictEqual, } from 'node:assert/strict';
2
+ import { mkdir, mkdtemp, readFile, 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 { NovaConfig } from '../../lib/nova-config.js';
7
+ test('NovaConfig constructor', async (context) => {
8
+ await context.test('creates instance without errors', () => {
9
+ doesNotThrow(() => {
10
+ new NovaConfig();
11
+ });
12
+ });
13
+ await context.test('instance has expected public methods', () => {
14
+ const config = new NovaConfig();
15
+ strictEqual(typeof config.load, 'function');
16
+ strictEqual(typeof config.set, 'function');
17
+ strictEqual(typeof config.save, 'function');
18
+ });
19
+ });
20
+ test('NovaConfig set and save', async (context) => {
21
+ const originalCwd = process.cwd();
22
+ const sandboxRoot = await mkdtemp(join(tmpdir(), `nova-${context.name}-`));
23
+ context.after(async () => {
24
+ process.chdir(originalCwd);
25
+ await rm(sandboxRoot, {
26
+ recursive: true,
27
+ force: true,
28
+ });
29
+ });
30
+ await context.test('set accepts valid config and save writes file', async () => {
31
+ const projectDir = join(sandboxRoot, 'set-save');
32
+ await mkdir(projectDir, { recursive: true });
33
+ process.chdir(projectDir);
34
+ const config = new NovaConfig();
35
+ config.set({
36
+ project: {
37
+ name: {
38
+ slug: 'test-project',
39
+ title: 'Test Project',
40
+ },
41
+ description: {
42
+ short: 'A test project.',
43
+ },
44
+ },
45
+ });
46
+ await config.save(true);
47
+ const filePath = join(projectDir, 'nova.config.json');
48
+ const fileContents = await readFile(filePath, 'utf-8');
49
+ const parsed = JSON.parse(fileContents);
50
+ strictEqual(parsed.project.name.slug, 'test-project');
51
+ strictEqual(parsed.project.name.title, 'Test Project');
52
+ strictEqual(parsed.project.description.short, 'A test project.');
53
+ });
54
+ await context.test('set accepts valid workspace config', async () => {
55
+ const projectDir = join(sandboxRoot, 'set-workspaces');
56
+ await mkdir(projectDir, { recursive: true });
57
+ process.chdir(projectDir);
58
+ const config = new NovaConfig();
59
+ config.set({
60
+ project: {
61
+ name: {
62
+ slug: 'nova',
63
+ },
64
+ },
65
+ workspaces: {
66
+ '.': {
67
+ name: 'nova-project',
68
+ role: 'project',
69
+ policy: 'freezable',
70
+ },
71
+ 'apps/docs': {
72
+ name: 'nova-docs',
73
+ role: 'docs',
74
+ policy: 'freezable',
75
+ },
76
+ 'packages/nova': {
77
+ name: '@cbnventures/nova',
78
+ role: 'package',
79
+ policy: 'distributable',
80
+ },
81
+ },
82
+ });
83
+ await config.save(true);
84
+ const filePath = join(projectDir, 'nova.config.json');
85
+ const fileContents = await readFile(filePath, 'utf-8');
86
+ const parsed = JSON.parse(fileContents);
87
+ strictEqual(parsed.workspaces['.'].name, 'nova-project');
88
+ strictEqual(parsed.workspaces['.'].role, 'project');
89
+ strictEqual(parsed.workspaces['.'].policy, 'freezable');
90
+ strictEqual(parsed.workspaces['apps/docs'].name, 'nova-docs');
91
+ strictEqual(parsed.workspaces['packages/nova'].name, '@cbnventures/nova');
92
+ strictEqual(parsed.workspaces['packages/nova'].policy, 'distributable');
93
+ });
94
+ await context.test('set accepts valid entities config', async () => {
95
+ const projectDir = join(sandboxRoot, 'set-entities');
96
+ await mkdir(projectDir, { recursive: true });
97
+ process.chdir(projectDir);
98
+ const config = new NovaConfig();
99
+ config.set({
100
+ entities: [
101
+ {
102
+ name: 'John Doe',
103
+ email: 'john@example.com',
104
+ url: 'https://example.com',
105
+ roles: ['author'],
106
+ },
107
+ ],
108
+ });
109
+ await config.save(true);
110
+ const filePath = join(projectDir, 'nova.config.json');
111
+ const fileContents = await readFile(filePath, 'utf-8');
112
+ const parsed = JSON.parse(fileContents);
113
+ strictEqual(parsed.entities.length, 1);
114
+ strictEqual(parsed.entities[0].name, 'John Doe');
115
+ strictEqual(parsed.entities[0].email, 'john@example.com');
116
+ strictEqual(parsed.entities[0].url, 'https://example.com');
117
+ deepStrictEqual(parsed.entities[0].roles, ['author']);
118
+ });
119
+ await context.test('set accepts valid urls config', async () => {
120
+ const projectDir = join(sandboxRoot, 'set-urls');
121
+ await mkdir(projectDir, { recursive: true });
122
+ process.chdir(projectDir);
123
+ const config = new NovaConfig();
124
+ config.set({
125
+ urls: {
126
+ homepage: 'https://example.com',
127
+ repository: 'git+https://github.com/user/repo.git',
128
+ bugs: 'https://github.com/user/repo/issues',
129
+ fundSources: [
130
+ 'https://github.com/sponsors/user',
131
+ 'https://patreon.com/user',
132
+ ],
133
+ },
134
+ });
135
+ await config.save(true);
136
+ const filePath = join(projectDir, 'nova.config.json');
137
+ const fileContents = await readFile(filePath, 'utf-8');
138
+ const parsed = JSON.parse(fileContents);
139
+ strictEqual(parsed.urls.homepage, 'https://example.com');
140
+ strictEqual(parsed.urls.repository, 'git+https://github.com/user/repo.git');
141
+ strictEqual(parsed.urls.bugs, 'https://github.com/user/repo/issues');
142
+ deepStrictEqual(parsed.urls.fundSources, [
143
+ 'https://github.com/sponsors/user',
144
+ 'https://patreon.com/user',
145
+ ]);
146
+ });
147
+ });
148
+ test('NovaConfig load', async (context) => {
149
+ const originalCwd = process.cwd();
150
+ const sandboxRoot = await mkdtemp(join(tmpdir(), `nova-${context.name}-`));
151
+ context.after(async () => {
152
+ process.chdir(originalCwd);
153
+ await rm(sandboxRoot, {
154
+ recursive: true,
155
+ force: true,
156
+ });
157
+ });
158
+ await context.test('load reads config from filesystem', async () => {
159
+ const projectDir = join(sandboxRoot, 'load');
160
+ await mkdir(projectDir, { recursive: true });
161
+ const configData = {
162
+ project: {
163
+ name: {
164
+ slug: 'loaded-project',
165
+ title: 'Loaded Project',
166
+ },
167
+ },
168
+ };
169
+ await writeFile(join(projectDir, 'nova.config.json'), JSON.stringify(configData, null, 2), 'utf-8');
170
+ process.chdir(projectDir);
171
+ const config = new NovaConfig();
172
+ const loaded = await config.load();
173
+ const loadedProject = loaded.project;
174
+ if (loadedProject === undefined) {
175
+ fail('Expected project to be defined');
176
+ }
177
+ const loadedProjectName = loadedProject.name;
178
+ if (loadedProjectName === undefined) {
179
+ fail('Expected project name to be defined');
180
+ }
181
+ strictEqual(loadedProjectName.slug, 'loaded-project');
182
+ strictEqual(loadedProjectName.title, 'Loaded Project');
183
+ });
184
+ await context.test('load returns empty object when config file is missing', async () => {
185
+ const projectDir = join(sandboxRoot, 'missing');
186
+ await mkdir(projectDir, { recursive: true });
187
+ process.chdir(projectDir);
188
+ const config = new NovaConfig();
189
+ const loaded = await config.load();
190
+ deepStrictEqual(loaded, {});
191
+ });
192
+ await context.test('load strips unknown fields from config file', async () => {
193
+ const projectDir = join(sandboxRoot, 'strip-unknown');
194
+ await mkdir(projectDir, { recursive: true });
195
+ await writeFile(join(projectDir, 'nova.config.json'), JSON.stringify({
196
+ project: {
197
+ name: {
198
+ slug: 'test',
199
+ title: 'Test',
200
+ },
201
+ },
202
+ unknownField: 'should be ignored',
203
+ }, null, 2), 'utf-8');
204
+ process.chdir(projectDir);
205
+ const config = new NovaConfig();
206
+ const loaded = await config.load();
207
+ const loadedProject = loaded.project;
208
+ if (loadedProject === undefined) {
209
+ fail('Expected project to be defined');
210
+ }
211
+ const loadedProjectName = loadedProject.name;
212
+ if (loadedProjectName === undefined) {
213
+ fail('Expected project name to be defined');
214
+ }
215
+ strictEqual(loadedProjectName.slug, 'test');
216
+ strictEqual('unknownField' in loaded, false);
217
+ });
218
+ await context.test('load handles non-object config gracefully', async () => {
219
+ const projectDir = join(sandboxRoot, 'non-object');
220
+ await mkdir(projectDir, { recursive: true });
221
+ await writeFile(join(projectDir, 'nova.config.json'), '"just a string"', 'utf-8');
222
+ process.chdir(projectDir);
223
+ const config = new NovaConfig();
224
+ const loaded = await config.load();
225
+ deepStrictEqual(loaded, {});
226
+ });
227
+ await context.test('load strips empty strings from config', async () => {
228
+ const projectDir = join(sandboxRoot, 'empty-strings');
229
+ await mkdir(projectDir, { recursive: true });
230
+ await writeFile(join(projectDir, 'nova.config.json'), JSON.stringify({
231
+ project: {
232
+ name: {
233
+ slug: '',
234
+ title: 'Valid Title',
235
+ },
236
+ },
237
+ }, null, 2), 'utf-8');
238
+ process.chdir(projectDir);
239
+ const config = new NovaConfig();
240
+ const loaded = await config.load();
241
+ const loadedProject = loaded.project;
242
+ if (loadedProject === undefined) {
243
+ fail('Expected project to be defined');
244
+ }
245
+ const loadedProjectName = loadedProject.name;
246
+ if (loadedProjectName === undefined) {
247
+ fail('Expected project name to be defined');
248
+ }
249
+ strictEqual(loadedProjectName.slug, undefined);
250
+ strictEqual(loadedProjectName.title, 'Valid Title');
251
+ });
252
+ await context.test('load rejects workspace with invalid role', async () => {
253
+ const projectDir = join(sandboxRoot, 'bad-role');
254
+ await mkdir(projectDir, { recursive: true });
255
+ await writeFile(join(projectDir, 'nova.config.json'), JSON.stringify({
256
+ workspaces: {
257
+ '.': {
258
+ name: 'test',
259
+ role: 'invalid-role',
260
+ policy: 'freezable',
261
+ },
262
+ },
263
+ }, null, 2), 'utf-8');
264
+ process.chdir(projectDir);
265
+ const config = new NovaConfig();
266
+ const loaded = await config.load();
267
+ strictEqual(loaded.workspaces, undefined);
268
+ });
269
+ await context.test('load rejects workspace with invalid policy for role', async () => {
270
+ const projectDir = join(sandboxRoot, 'bad-policy');
271
+ await mkdir(projectDir, { recursive: true });
272
+ await writeFile(join(projectDir, 'nova.config.json'), JSON.stringify({
273
+ workspaces: {
274
+ '.': {
275
+ name: 'test-project',
276
+ role: 'project',
277
+ policy: 'distributable',
278
+ },
279
+ },
280
+ }, null, 2), 'utf-8');
281
+ process.chdir(projectDir);
282
+ const config = new NovaConfig();
283
+ const loaded = await config.load();
284
+ strictEqual(loaded.workspaces, undefined);
285
+ });
286
+ await context.test('load parses pinVersions boolean from workspace config', async () => {
287
+ const projectDir = join(sandboxRoot, 'pin-versions');
288
+ await mkdir(projectDir, { recursive: true });
289
+ await writeFile(join(projectDir, 'nova.config.json'), JSON.stringify({
290
+ workspaces: {
291
+ '.': {
292
+ name: 'project',
293
+ role: 'project',
294
+ policy: 'freezable',
295
+ pinVersions: true,
296
+ },
297
+ 'packages/core': {
298
+ name: '@test/core',
299
+ role: 'package',
300
+ policy: 'distributable',
301
+ },
302
+ },
303
+ }, null, 2), 'utf-8');
304
+ process.chdir(projectDir);
305
+ const config = new NovaConfig();
306
+ const loaded = await config.load();
307
+ const loadedWorkspaces = loaded.workspaces;
308
+ if (loadedWorkspaces === undefined) {
309
+ fail('Expected workspaces to be defined');
310
+ }
311
+ const rootWorkspace = loadedWorkspaces['.'];
312
+ if (rootWorkspace === undefined) {
313
+ fail('Expected root workspace to be defined');
314
+ }
315
+ const coreWorkspace = loadedWorkspaces['packages/core'];
316
+ if (coreWorkspace === undefined) {
317
+ fail('Expected packages/core workspace to be defined');
318
+ }
319
+ strictEqual(rootWorkspace.pinVersions, true);
320
+ strictEqual(coreWorkspace.pinVersions, undefined);
321
+ });
322
+ await context.test('load ignores non-boolean pinVersions values', async () => {
323
+ const projectDir = join(sandboxRoot, 'pin-versions-invalid');
324
+ await mkdir(projectDir, { recursive: true });
325
+ await writeFile(join(projectDir, 'nova.config.json'), JSON.stringify({
326
+ workspaces: {
327
+ '.': {
328
+ name: 'project',
329
+ role: 'project',
330
+ policy: 'freezable',
331
+ pinVersions: 'yes',
332
+ },
333
+ },
334
+ }, null, 2), 'utf-8');
335
+ process.chdir(projectDir);
336
+ const config = new NovaConfig();
337
+ const loaded = await config.load();
338
+ const loadedWorkspaces = loaded.workspaces;
339
+ if (loadedWorkspaces === undefined) {
340
+ fail('Expected workspaces to be defined');
341
+ }
342
+ const rootWorkspace = loadedWorkspaces['.'];
343
+ if (rootWorkspace === undefined) {
344
+ fail('Expected root workspace to be defined');
345
+ }
346
+ strictEqual(rootWorkspace.pinVersions, undefined);
347
+ });
348
+ await context.test('load parses syncLtsEngines boolean from workspace config', async () => {
349
+ const projectDir = join(sandboxRoot, 'sync-lts-engines');
350
+ await mkdir(projectDir, { recursive: true });
351
+ await writeFile(join(projectDir, 'nova.config.json'), JSON.stringify({
352
+ workspaces: {
353
+ '.': {
354
+ name: 'project',
355
+ role: 'project',
356
+ policy: 'freezable',
357
+ syncLtsEngines: true,
358
+ },
359
+ 'packages/core': {
360
+ name: '@test/core',
361
+ role: 'package',
362
+ policy: 'distributable',
363
+ },
364
+ },
365
+ }, null, 2), 'utf-8');
366
+ process.chdir(projectDir);
367
+ const config = new NovaConfig();
368
+ const loaded = await config.load();
369
+ const loadedWorkspaces = loaded.workspaces;
370
+ if (loadedWorkspaces === undefined) {
371
+ fail('Expected workspaces to be defined');
372
+ }
373
+ const rootWorkspace = loadedWorkspaces['.'];
374
+ if (rootWorkspace === undefined) {
375
+ fail('Expected root workspace to be defined');
376
+ }
377
+ const coreWorkspace = loadedWorkspaces['packages/core'];
378
+ if (coreWorkspace === undefined) {
379
+ fail('Expected packages/core workspace to be defined');
380
+ }
381
+ strictEqual(rootWorkspace.syncLtsEngines, true);
382
+ strictEqual(coreWorkspace.syncLtsEngines, undefined);
383
+ });
384
+ await context.test('load ignores non-boolean syncLtsEngines values', async () => {
385
+ const projectDir = join(sandboxRoot, 'sync-lts-engines-invalid');
386
+ await mkdir(projectDir, { recursive: true });
387
+ await writeFile(join(projectDir, 'nova.config.json'), JSON.stringify({
388
+ workspaces: {
389
+ '.': {
390
+ name: 'project',
391
+ role: 'project',
392
+ policy: 'freezable',
393
+ syncLtsEngines: 'yes',
394
+ },
395
+ },
396
+ }, null, 2), 'utf-8');
397
+ process.chdir(projectDir);
398
+ const config = new NovaConfig();
399
+ const loaded = await config.load();
400
+ const loadedWorkspaces = loaded.workspaces;
401
+ if (loadedWorkspaces === undefined) {
402
+ fail('Expected workspaces to be defined');
403
+ }
404
+ const rootWorkspace = loadedWorkspaces['.'];
405
+ if (rootWorkspace === undefined) {
406
+ fail('Expected root workspace to be defined');
407
+ }
408
+ strictEqual(rootWorkspace.syncLtsEngines, undefined);
409
+ });
410
+ await context.test('load filters invalid entity roles', async () => {
411
+ const projectDir = join(sandboxRoot, 'bad-entity-roles');
412
+ await mkdir(projectDir, { recursive: true });
413
+ await writeFile(join(projectDir, 'nova.config.json'), JSON.stringify({
414
+ entities: [
415
+ {
416
+ name: 'Test',
417
+ roles: ['invalid-role'],
418
+ },
419
+ ],
420
+ }, null, 2), 'utf-8');
421
+ process.chdir(projectDir);
422
+ const config = new NovaConfig();
423
+ const loaded = await config.load();
424
+ const loadedEntities = loaded.entities;
425
+ if (loadedEntities === undefined) {
426
+ fail('Expected entities to be defined');
427
+ }
428
+ const firstEntity = loadedEntities[0];
429
+ if (firstEntity === undefined) {
430
+ fail('Expected first entity to be defined');
431
+ }
432
+ strictEqual(firstEntity.roles, undefined);
433
+ });
434
+ await context.test('load filters invalid email format', async () => {
435
+ const projectDir = join(sandboxRoot, 'bad-email');
436
+ await mkdir(projectDir, { recursive: true });
437
+ await writeFile(join(projectDir, 'nova.config.json'), JSON.stringify({
438
+ entities: [
439
+ {
440
+ name: 'Test',
441
+ email: 'not-an-email',
442
+ },
443
+ ],
444
+ }, null, 2), 'utf-8');
445
+ process.chdir(projectDir);
446
+ const config = new NovaConfig();
447
+ const loaded = await config.load();
448
+ const loadedEntities = loaded.entities;
449
+ if (loadedEntities === undefined) {
450
+ fail('Expected entities to be defined');
451
+ }
452
+ const firstEntity = loadedEntities[0];
453
+ if (firstEntity === undefined) {
454
+ fail('Expected first entity to be defined');
455
+ }
456
+ strictEqual(firstEntity.email, undefined);
457
+ });
458
+ await context.test('load rejects invalid url protocol', async () => {
459
+ const projectDir = join(sandboxRoot, 'bad-url');
460
+ await mkdir(projectDir, { recursive: true });
461
+ await writeFile(join(projectDir, 'nova.config.json'), JSON.stringify({
462
+ urls: {
463
+ homepage: 'ftp://example.com',
464
+ },
465
+ }, null, 2), 'utf-8');
466
+ process.chdir(projectDir);
467
+ const config = new NovaConfig();
468
+ const loaded = await config.load();
469
+ strictEqual(loaded.urls, undefined);
470
+ });
471
+ await context.test('load accepts git protocol for repository field', async () => {
472
+ const projectDir = join(sandboxRoot, 'git-protocol');
473
+ await mkdir(projectDir, { recursive: true });
474
+ await writeFile(join(projectDir, 'nova.config.json'), JSON.stringify({
475
+ urls: {
476
+ repository: 'git://github.com/user/repo.git',
477
+ },
478
+ }, null, 2), 'utf-8');
479
+ process.chdir(projectDir);
480
+ const config = new NovaConfig();
481
+ const loaded = await config.load();
482
+ const loadedUrls = loaded.urls;
483
+ if (loadedUrls === undefined) {
484
+ fail('Expected urls to be defined');
485
+ }
486
+ strictEqual(loadedUrls.repository, 'git://github.com/user/repo.git');
487
+ });
488
+ });
489
+ //# sourceMappingURL=nova-config.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nova-config.test.js","sourceRoot":"","sources":["../../../../src/tests/lib/nova-config.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=regex.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"regex.test.d.ts","sourceRoot":"","sources":["../../../../src/tests/lib/regex.test.ts"],"names":[],"mappings":""}