@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,342 @@
1
+ import { doesNotMatch, fail, match, strictEqual, } from 'node:assert/strict';
2
+ import { test } from 'node:test';
3
+ import { CHARACTER_DOUBLE_QUOTE, CHARACTER_PIPE, CHARACTER_SINGLE_QUOTE, LINEBREAK_CRLF_OR_LF, PATTERN_ANSI, PATTERN_ANSI_START, PATTERN_DIGITS, PATTERN_DOUBLE_QUOTED_STRING_CAPTURE, PATTERN_EMAIL_SIMPLE, PATTERN_ERROR_PREFIX, PATTERN_LEADING_NEWLINES, PATTERN_LEADING_NON_DIGITS, PATTERN_LEADING_V, PATTERN_NAME_AT_VERSION, PATTERN_NOVA_PREFIX, PATTERN_RANGE_CAPTURE_REMAINDER, PATTERN_RANGE_GREATER_EQUAL_MAJOR, PATTERN_RANGE_MAJOR, PATTERN_REGISTRY_QUERY_LINE, PATTERN_RUSTC_VERSION_LINE, PATTERN_SEMVER, PATTERN_SLUG_SCOPED, PATTERN_SLUG_SIMPLE, PATTERN_WHITESPACE, } from '../../lib/regex.js';
4
+ test('character patterns', async (context) => {
5
+ await context.test('CHARACTER_DOUBLE_QUOTE matches double quote', () => {
6
+ match('"hello"', CHARACTER_DOUBLE_QUOTE);
7
+ });
8
+ await context.test('CHARACTER_DOUBLE_QUOTE does not match single quote', () => {
9
+ doesNotMatch('\'hello\'', CHARACTER_DOUBLE_QUOTE);
10
+ });
11
+ await context.test('CHARACTER_PIPE matches pipe', () => {
12
+ match('a | b', CHARACTER_PIPE);
13
+ });
14
+ await context.test('CHARACTER_PIPE does not match plain text', () => {
15
+ doesNotMatch('hello', CHARACTER_PIPE);
16
+ });
17
+ await context.test('CHARACTER_SINGLE_QUOTE matches single quote', () => {
18
+ match('it\'s', CHARACTER_SINGLE_QUOTE);
19
+ });
20
+ await context.test('CHARACTER_SINGLE_QUOTE does not match double quote', () => {
21
+ doesNotMatch('"hello"', CHARACTER_SINGLE_QUOTE);
22
+ });
23
+ });
24
+ test('LINEBREAK_CRLF_OR_LF', async (context) => {
25
+ await context.test('matches LF', () => {
26
+ match('line1\nline2', LINEBREAK_CRLF_OR_LF);
27
+ });
28
+ await context.test('matches CRLF', () => {
29
+ match('line1\r\nline2', LINEBREAK_CRLF_OR_LF);
30
+ });
31
+ await context.test('does not match plain text', () => {
32
+ doesNotMatch('no linebreak', LINEBREAK_CRLF_OR_LF);
33
+ });
34
+ });
35
+ test('ANSI patterns', async (context) => {
36
+ await context.test('PATTERN_ANSI matches escape code', () => {
37
+ match('\x1b[31mred\x1b[0m', PATTERN_ANSI);
38
+ });
39
+ await context.test('PATTERN_ANSI does not match plain text', () => {
40
+ doesNotMatch('plain text', PATTERN_ANSI);
41
+ });
42
+ await context.test('PATTERN_ANSI_START matches escape at start', () => {
43
+ match('\x1b[31mred', PATTERN_ANSI_START);
44
+ });
45
+ await context.test('PATTERN_ANSI_START does not match escape in middle', () => {
46
+ doesNotMatch('text\x1b[31m', PATTERN_ANSI_START);
47
+ });
48
+ });
49
+ test('PATTERN_DIGITS', async (context) => {
50
+ await context.test('matches digits in string', () => {
51
+ match('abc123', PATTERN_DIGITS);
52
+ });
53
+ await context.test('does not match non-digit string', () => {
54
+ doesNotMatch('abcdef', PATTERN_DIGITS);
55
+ });
56
+ });
57
+ test('PATTERN_DOUBLE_QUOTED_STRING_CAPTURE', async (context) => {
58
+ await context.test('captures content between double quotes', () => {
59
+ const matches = '"hello world"'.match(PATTERN_DOUBLE_QUOTED_STRING_CAPTURE);
60
+ if (matches === null) {
61
+ fail('Expected regex to match');
62
+ }
63
+ strictEqual(matches[1], 'hello world');
64
+ });
65
+ await context.test('does not match unquoted string', () => {
66
+ doesNotMatch('hello world', PATTERN_DOUBLE_QUOTED_STRING_CAPTURE);
67
+ });
68
+ await context.test('does not match single-quoted string', () => {
69
+ doesNotMatch('\'hello world\'', PATTERN_DOUBLE_QUOTED_STRING_CAPTURE);
70
+ });
71
+ });
72
+ test('PATTERN_EMAIL_SIMPLE', async (context) => {
73
+ await context.test('matches standard email', () => {
74
+ match('user@example.com', PATTERN_EMAIL_SIMPLE);
75
+ });
76
+ await context.test('matches email with subdomain', () => {
77
+ match('user@mail.example.com', PATTERN_EMAIL_SIMPLE);
78
+ });
79
+ await context.test('does not match missing at sign', () => {
80
+ doesNotMatch('userexample.com', PATTERN_EMAIL_SIMPLE);
81
+ });
82
+ await context.test('does not match missing domain', () => {
83
+ doesNotMatch('user@', PATTERN_EMAIL_SIMPLE);
84
+ });
85
+ });
86
+ test('PATTERN_ERROR_PREFIX', async (context) => {
87
+ await context.test('matches error prefix', () => {
88
+ match('error: something went wrong', PATTERN_ERROR_PREFIX);
89
+ });
90
+ await context.test('does not match warning prefix', () => {
91
+ doesNotMatch('warning: something', PATTERN_ERROR_PREFIX);
92
+ });
93
+ });
94
+ test('PATTERN_LEADING_NEWLINES', async (context) => {
95
+ await context.test('matches leading newlines', () => {
96
+ match('\n\ncontent', PATTERN_LEADING_NEWLINES);
97
+ });
98
+ await context.test('does not match text without leading newlines', () => {
99
+ doesNotMatch('content\n', PATTERN_LEADING_NEWLINES);
100
+ });
101
+ });
102
+ test('PATTERN_LEADING_NON_DIGITS', async (context) => {
103
+ await context.test('matches leading non-digit characters', () => {
104
+ const matches = 'abc123'.match(PATTERN_LEADING_NON_DIGITS);
105
+ if (matches === null) {
106
+ fail('Expected regex to match');
107
+ }
108
+ strictEqual(matches[0], 'abc');
109
+ });
110
+ await context.test('returns empty match when string starts with digit', () => {
111
+ const matches = '123abc'.match(PATTERN_LEADING_NON_DIGITS);
112
+ if (matches === null) {
113
+ fail('Expected regex to match');
114
+ }
115
+ strictEqual(matches[0], '');
116
+ });
117
+ });
118
+ test('PATTERN_LEADING_V', async (context) => {
119
+ await context.test('matches leading v', () => {
120
+ match('v20', PATTERN_LEADING_V);
121
+ });
122
+ await context.test('does not match string without leading v', () => {
123
+ doesNotMatch('20', PATTERN_LEADING_V);
124
+ });
125
+ });
126
+ test('PATTERN_NAME_AT_VERSION', async (context) => {
127
+ await context.test('matches name at version', () => {
128
+ match('node@20', PATTERN_NAME_AT_VERSION);
129
+ });
130
+ await context.test('does not match scoped package', () => {
131
+ doesNotMatch('@scope/package', PATTERN_NAME_AT_VERSION);
132
+ });
133
+ });
134
+ test('PATTERN_NOVA_PREFIX', async (context) => {
135
+ await context.test('matches nova prefix', () => {
136
+ match('nova-project', PATTERN_NOVA_PREFIX);
137
+ });
138
+ await context.test('does not match unrelated string', () => {
139
+ doesNotMatch('other-project', PATTERN_NOVA_PREFIX);
140
+ });
141
+ });
142
+ test('PATTERN_RANGE_CAPTURE_REMAINDER', async (context) => {
143
+ await context.test('captures remainder after caret prefix', () => {
144
+ const matches = '^1.2.3'.match(PATTERN_RANGE_CAPTURE_REMAINDER);
145
+ if (matches === null) {
146
+ fail('Expected regex to match');
147
+ }
148
+ strictEqual(matches[1], '1.2.3');
149
+ });
150
+ await context.test('captures remainder after tilde prefix', () => {
151
+ const matches = '~1.2.3'.match(PATTERN_RANGE_CAPTURE_REMAINDER);
152
+ if (matches === null) {
153
+ fail('Expected regex to match');
154
+ }
155
+ strictEqual(matches[1], '1.2.3');
156
+ });
157
+ await context.test('captures remainder after >= prefix', () => {
158
+ const matches = '>=1.2.3'.match(PATTERN_RANGE_CAPTURE_REMAINDER);
159
+ if (matches === null) {
160
+ fail('Expected regex to match');
161
+ }
162
+ strictEqual(matches[1], '1.2.3');
163
+ });
164
+ await context.test('captures remainder after > prefix', () => {
165
+ const matches = '>1.2.3'.match(PATTERN_RANGE_CAPTURE_REMAINDER);
166
+ if (matches === null) {
167
+ fail('Expected regex to match');
168
+ }
169
+ strictEqual(matches[1], '1.2.3');
170
+ });
171
+ await context.test('captures remainder after <= prefix', () => {
172
+ const matches = '<=2.0.0'.match(PATTERN_RANGE_CAPTURE_REMAINDER);
173
+ if (matches === null) {
174
+ fail('Expected regex to match');
175
+ }
176
+ strictEqual(matches[1], '2.0.0');
177
+ });
178
+ await context.test('captures remainder after < prefix', () => {
179
+ const matches = '<2.0.0'.match(PATTERN_RANGE_CAPTURE_REMAINDER);
180
+ if (matches === null) {
181
+ fail('Expected regex to match');
182
+ }
183
+ strictEqual(matches[1], '2.0.0');
184
+ });
185
+ await context.test('does not match already-pinned version', () => {
186
+ doesNotMatch('1.2.3', PATTERN_RANGE_CAPTURE_REMAINDER);
187
+ });
188
+ await context.test('does not match file protocol', () => {
189
+ doesNotMatch('file:../local', PATTERN_RANGE_CAPTURE_REMAINDER);
190
+ });
191
+ await context.test('does not match wildcard', () => {
192
+ doesNotMatch('*', PATTERN_RANGE_CAPTURE_REMAINDER);
193
+ });
194
+ await context.test('does not match latest', () => {
195
+ doesNotMatch('latest', PATTERN_RANGE_CAPTURE_REMAINDER);
196
+ });
197
+ });
198
+ test('version range patterns', async (context) => {
199
+ await context.test('PATTERN_RANGE_GREATER_EQUAL_MAJOR captures major from >= range', () => {
200
+ const matches = '>=18'.match(PATTERN_RANGE_GREATER_EQUAL_MAJOR);
201
+ if (matches === null) {
202
+ fail('Expected regex to match');
203
+ }
204
+ strictEqual(matches[1], '18');
205
+ });
206
+ await context.test('PATTERN_RANGE_GREATER_EQUAL_MAJOR does not match caret range', () => {
207
+ doesNotMatch('^18', PATTERN_RANGE_GREATER_EQUAL_MAJOR);
208
+ });
209
+ await context.test('PATTERN_RANGE_MAJOR captures major from caret range', () => {
210
+ const matches = '^20'.match(PATTERN_RANGE_MAJOR);
211
+ if (matches === null) {
212
+ fail('Expected regex to match');
213
+ }
214
+ strictEqual(matches[1], '20');
215
+ });
216
+ await context.test('PATTERN_RANGE_MAJOR captures major from tilde range', () => {
217
+ const matches = '~18'.match(PATTERN_RANGE_MAJOR);
218
+ if (matches === null) {
219
+ fail('Expected regex to match');
220
+ }
221
+ strictEqual(matches[1], '18');
222
+ });
223
+ await context.test('PATTERN_RANGE_MAJOR captures major from bare number', () => {
224
+ const matches = '22'.match(PATTERN_RANGE_MAJOR);
225
+ if (matches === null) {
226
+ fail('Expected regex to match');
227
+ }
228
+ strictEqual(matches[1], '22');
229
+ });
230
+ });
231
+ test('PATTERN_REGISTRY_QUERY_LINE', async (context) => {
232
+ await context.test('matches Windows registry line', () => {
233
+ const matches = ' ProductName REG_SZ Windows 10 Pro'.match(PATTERN_REGISTRY_QUERY_LINE);
234
+ if (matches === null) {
235
+ fail('Expected regex to match');
236
+ }
237
+ strictEqual(matches[1], 'ProductName');
238
+ strictEqual(matches[2], 'REG_SZ');
239
+ strictEqual(matches[3], 'Windows 10 Pro');
240
+ });
241
+ await context.test('does not match empty line', () => {
242
+ doesNotMatch('', PATTERN_REGISTRY_QUERY_LINE);
243
+ });
244
+ });
245
+ test('PATTERN_RUSTC_VERSION_LINE', async (context) => {
246
+ await context.test('matches rustc version output', () => {
247
+ const matches = 'rustc 1.75.0 (82e1608df 2023-12-21)'.match(PATTERN_RUSTC_VERSION_LINE);
248
+ if (matches === null) {
249
+ fail('Expected regex to match');
250
+ }
251
+ strictEqual(matches[1], '1.75.0');
252
+ strictEqual(matches[2], '82e1608df');
253
+ strictEqual(matches[3], '2023-12-21');
254
+ });
255
+ await context.test('does not match unrelated version string', () => {
256
+ doesNotMatch('node v20.10.0', PATTERN_RUSTC_VERSION_LINE);
257
+ });
258
+ });
259
+ test('PATTERN_SEMVER', async (context) => {
260
+ await context.test('matches simple semver', () => {
261
+ const matches = '1.2.3'.match(PATTERN_SEMVER);
262
+ if (matches === null) {
263
+ fail('Expected regex to match');
264
+ }
265
+ const matchGroups = matches.groups;
266
+ if (matchGroups === undefined) {
267
+ fail('Expected match groups');
268
+ }
269
+ strictEqual(matchGroups['semver'], '1.2.3');
270
+ });
271
+ await context.test('matches semver with prerelease', () => {
272
+ const matches = '1.0.0-beta.1'.match(PATTERN_SEMVER);
273
+ if (matches === null) {
274
+ fail('Expected regex to match');
275
+ }
276
+ const matchGroups = matches.groups;
277
+ if (matchGroups === undefined) {
278
+ fail('Expected match groups');
279
+ }
280
+ strictEqual(matchGroups['semver'], '1.0.0-beta.1');
281
+ });
282
+ await context.test('matches semver with build metadata', () => {
283
+ const matches = '1.0.0+build.123'.match(PATTERN_SEMVER);
284
+ if (matches === null) {
285
+ fail('Expected regex to match');
286
+ }
287
+ const matchGroups = matches.groups;
288
+ if (matchGroups === undefined) {
289
+ fail('Expected match groups');
290
+ }
291
+ strictEqual(matchGroups['semver'], '1.0.0+build.123');
292
+ });
293
+ await context.test('matches semver embedded in text', () => {
294
+ const matches = 'version 2.5.10 released'.match(PATTERN_SEMVER);
295
+ if (matches === null) {
296
+ fail('Expected regex to match');
297
+ }
298
+ const matchGroups = matches.groups;
299
+ if (matchGroups === undefined) {
300
+ fail('Expected match groups');
301
+ }
302
+ strictEqual(matchGroups['semver'], '2.5.10');
303
+ });
304
+ await context.test('does not match two-part version', () => {
305
+ doesNotMatch('1.2', PATTERN_SEMVER);
306
+ });
307
+ });
308
+ test('slug patterns', async (context) => {
309
+ await context.test('PATTERN_SLUG_SIMPLE matches simple slug', () => {
310
+ match('my-package', PATTERN_SLUG_SIMPLE);
311
+ });
312
+ await context.test('PATTERN_SLUG_SIMPLE matches single word', () => {
313
+ match('nova', PATTERN_SLUG_SIMPLE);
314
+ });
315
+ await context.test('PATTERN_SLUG_SIMPLE does not match uppercase', () => {
316
+ doesNotMatch('MyPackage', PATTERN_SLUG_SIMPLE);
317
+ });
318
+ await context.test('PATTERN_SLUG_SIMPLE does not match scoped name', () => {
319
+ doesNotMatch('@scope/name', PATTERN_SLUG_SIMPLE);
320
+ });
321
+ await context.test('PATTERN_SLUG_SCOPED matches scoped package', () => {
322
+ match('@cbnventures/nova', PATTERN_SLUG_SCOPED);
323
+ });
324
+ await context.test('PATTERN_SLUG_SCOPED does not match unscoped name', () => {
325
+ doesNotMatch('nova', PATTERN_SLUG_SCOPED);
326
+ });
327
+ await context.test('PATTERN_SLUG_SCOPED does not match uppercase scope', () => {
328
+ doesNotMatch('@Scope/name', PATTERN_SLUG_SCOPED);
329
+ });
330
+ });
331
+ test('PATTERN_WHITESPACE', async (context) => {
332
+ await context.test('matches spaces', () => {
333
+ match('hello world', PATTERN_WHITESPACE);
334
+ });
335
+ await context.test('matches tabs', () => {
336
+ match('hello\tworld', PATTERN_WHITESPACE);
337
+ });
338
+ await context.test('does not match non-whitespace string', () => {
339
+ doesNotMatch('helloworld', PATTERN_WHITESPACE);
340
+ });
341
+ });
342
+ //# sourceMappingURL=regex.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"regex.test.js","sourceRoot":"","sources":["../../../../src/tests/lib/regex.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=schema.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.test.d.ts","sourceRoot":"","sources":["../../../../src/tests/lib/schema.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,260 @@
1
+ import { fail, strictEqual, throws } from 'node:assert/strict';
2
+ import { test } from 'node:test';
3
+ import { schemaNodeReleasesScheduleEntry, schemaNodeReleasesSchedule, schemaSpdxLicensesLicense, schemaSpdxLicensesResponse, } from '../../lib/schema.js';
4
+ test('schemaNodeReleasesScheduleEntry', async (context) => {
5
+ await context.test('accepts entry with lts and end', () => {
6
+ const result = schemaNodeReleasesScheduleEntry.parse({
7
+ lts: '2024-10-29',
8
+ end: '2027-04-30',
9
+ });
10
+ strictEqual(result.lts, '2024-10-29');
11
+ strictEqual(result.end, '2027-04-30');
12
+ });
13
+ await context.test('accepts entry without lts', () => {
14
+ const result = schemaNodeReleasesScheduleEntry.parse({
15
+ end: '2025-04-01',
16
+ });
17
+ strictEqual(result.lts, undefined);
18
+ strictEqual(result.end, '2025-04-01');
19
+ });
20
+ await context.test('strips unknown properties', () => {
21
+ const result = schemaNodeReleasesScheduleEntry.parse({
22
+ lts: '2024-10-29',
23
+ end: '2027-04-30',
24
+ maintenance: '2025-10-01',
25
+ start: '2024-04-01',
26
+ });
27
+ strictEqual(result.lts, '2024-10-29');
28
+ strictEqual(result.end, '2027-04-30');
29
+ strictEqual('maintenance' in result, false);
30
+ strictEqual('start' in result, false);
31
+ });
32
+ await context.test('rejects entry missing end', () => {
33
+ throws(() => {
34
+ schemaNodeReleasesScheduleEntry.parse({});
35
+ });
36
+ });
37
+ await context.test('rejects entry with non-string end', () => {
38
+ throws(() => {
39
+ schemaNodeReleasesScheduleEntry.parse({ end: 123 });
40
+ });
41
+ });
42
+ await context.test('rejects entry with non-string lts', () => {
43
+ throws(() => {
44
+ schemaNodeReleasesScheduleEntry.parse({
45
+ lts: 123,
46
+ end: '2027-04-30',
47
+ });
48
+ });
49
+ });
50
+ await context.test('rejects null', () => {
51
+ throws(() => {
52
+ schemaNodeReleasesScheduleEntry.parse(null);
53
+ });
54
+ });
55
+ await context.test('rejects non-object value', () => {
56
+ throws(() => {
57
+ schemaNodeReleasesScheduleEntry.parse('string');
58
+ });
59
+ });
60
+ });
61
+ test('schemaNodeReleasesSchedule', async (context) => {
62
+ await context.test('accepts schedule with multiple entries', () => {
63
+ const result = schemaNodeReleasesSchedule.parse({
64
+ 'v18': {
65
+ lts: '2022-10-25',
66
+ end: '2025-04-30',
67
+ },
68
+ 'v19': { end: '2023-06-01' },
69
+ 'v20': {
70
+ lts: '2023-10-24',
71
+ end: '2026-04-30',
72
+ },
73
+ });
74
+ strictEqual(Object.keys(result).length, 3);
75
+ const v18 = result['v18'];
76
+ const v19 = result['v19'];
77
+ const v20 = result['v20'];
78
+ if (v18 === undefined) {
79
+ fail('Expected v18 to be defined');
80
+ }
81
+ if (v19 === undefined) {
82
+ fail('Expected v19 to be defined');
83
+ }
84
+ if (v20 === undefined) {
85
+ fail('Expected v20 to be defined');
86
+ }
87
+ strictEqual(v18.lts, '2022-10-25');
88
+ strictEqual(v19.lts, undefined);
89
+ strictEqual(v20.end, '2026-04-30');
90
+ });
91
+ await context.test('accepts empty schedule', () => {
92
+ const result = schemaNodeReleasesSchedule.parse({});
93
+ strictEqual(Object.keys(result).length, 0);
94
+ });
95
+ await context.test('accepts single entry', () => {
96
+ const result = schemaNodeReleasesSchedule.parse({
97
+ 'v22': {
98
+ lts: '2024-10-29',
99
+ end: '2027-04-30',
100
+ },
101
+ });
102
+ strictEqual(Object.keys(result).length, 1);
103
+ const v22 = result['v22'];
104
+ if (v22 === undefined) {
105
+ fail('Expected v22 to be defined');
106
+ }
107
+ strictEqual(v22.lts, '2024-10-29');
108
+ });
109
+ await context.test('rejects schedule with invalid entry value', () => {
110
+ throws(() => {
111
+ schemaNodeReleasesSchedule.parse({
112
+ 'v20': { lts: 123 },
113
+ });
114
+ });
115
+ });
116
+ await context.test('rejects schedule with null entry value', () => {
117
+ throws(() => {
118
+ schemaNodeReleasesSchedule.parse({
119
+ 'v20': null,
120
+ });
121
+ });
122
+ });
123
+ await context.test('rejects schedule with string entry value', () => {
124
+ throws(() => {
125
+ schemaNodeReleasesSchedule.parse({
126
+ 'v20': 'not-an-entry',
127
+ });
128
+ });
129
+ });
130
+ await context.test('rejects null', () => {
131
+ throws(() => {
132
+ schemaNodeReleasesSchedule.parse(null);
133
+ });
134
+ });
135
+ await context.test('rejects array', () => {
136
+ throws(() => {
137
+ schemaNodeReleasesSchedule.parse([]);
138
+ });
139
+ });
140
+ });
141
+ test('schemaSpdxLicensesLicense', async (context) => {
142
+ await context.test('accepts valid license', () => {
143
+ const result = schemaSpdxLicensesLicense.parse({
144
+ licenseId: 'MIT',
145
+ });
146
+ strictEqual(result.licenseId, 'MIT');
147
+ });
148
+ await context.test('strips unknown properties', () => {
149
+ const result = schemaSpdxLicensesLicense.parse({
150
+ licenseId: 'Apache-2.0',
151
+ name: 'Apache License 2.0',
152
+ isOsiApproved: true,
153
+ });
154
+ strictEqual(result.licenseId, 'Apache-2.0');
155
+ strictEqual('name' in result, false);
156
+ strictEqual('isOsiApproved' in result, false);
157
+ });
158
+ await context.test('rejects license missing licenseId', () => {
159
+ throws(() => {
160
+ schemaSpdxLicensesLicense.parse({});
161
+ });
162
+ });
163
+ await context.test('rejects license with non-string licenseId', () => {
164
+ throws(() => {
165
+ schemaSpdxLicensesLicense.parse({ licenseId: 123 });
166
+ });
167
+ });
168
+ await context.test('rejects null', () => {
169
+ throws(() => {
170
+ schemaSpdxLicensesLicense.parse(null);
171
+ });
172
+ });
173
+ await context.test('rejects non-object value', () => {
174
+ throws(() => {
175
+ schemaSpdxLicensesLicense.parse('MIT');
176
+ });
177
+ });
178
+ });
179
+ test('schemaSpdxLicensesResponse', async (context) => {
180
+ await context.test('accepts response with multiple licenses', () => {
181
+ const result = schemaSpdxLicensesResponse.parse({
182
+ licenses: [
183
+ { licenseId: 'MIT' },
184
+ { licenseId: 'Apache-2.0' },
185
+ { licenseId: 'GPL-3.0-only' },
186
+ ],
187
+ });
188
+ strictEqual(result.licenses.length, 3);
189
+ const license0 = result.licenses[0];
190
+ const license1 = result.licenses[1];
191
+ const license2 = result.licenses[2];
192
+ if (license0 === undefined) {
193
+ fail('Expected license at index 0');
194
+ }
195
+ if (license1 === undefined) {
196
+ fail('Expected license at index 1');
197
+ }
198
+ if (license2 === undefined) {
199
+ fail('Expected license at index 2');
200
+ }
201
+ strictEqual(license0.licenseId, 'MIT');
202
+ strictEqual(license1.licenseId, 'Apache-2.0');
203
+ strictEqual(license2.licenseId, 'GPL-3.0-only');
204
+ });
205
+ await context.test('accepts response with empty licenses array', () => {
206
+ const result = schemaSpdxLicensesResponse.parse({
207
+ licenses: [],
208
+ });
209
+ strictEqual(result.licenses.length, 0);
210
+ });
211
+ await context.test('accepts response with single license', () => {
212
+ const result = schemaSpdxLicensesResponse.parse({
213
+ licenses: [{ licenseId: 'ISC' }],
214
+ });
215
+ strictEqual(result.licenses.length, 1);
216
+ const license0 = result.licenses[0];
217
+ if (license0 === undefined) {
218
+ fail('Expected license at index 0');
219
+ }
220
+ strictEqual(license0.licenseId, 'ISC');
221
+ });
222
+ await context.test('rejects response missing licenses', () => {
223
+ throws(() => {
224
+ schemaSpdxLicensesResponse.parse({});
225
+ });
226
+ });
227
+ await context.test('rejects response with non-array licenses', () => {
228
+ throws(() => {
229
+ schemaSpdxLicensesResponse.parse({ licenses: 'not-array' });
230
+ });
231
+ });
232
+ await context.test('rejects response with invalid license entry', () => {
233
+ throws(() => {
234
+ schemaSpdxLicensesResponse.parse({
235
+ licenses: [{ licenseId: 123 }],
236
+ });
237
+ });
238
+ });
239
+ await context.test('rejects response with mixed valid and invalid entries', () => {
240
+ throws(() => {
241
+ schemaSpdxLicensesResponse.parse({
242
+ licenses: [
243
+ { licenseId: 'MIT' },
244
+ { invalid: true },
245
+ ],
246
+ });
247
+ });
248
+ });
249
+ await context.test('rejects null', () => {
250
+ throws(() => {
251
+ schemaSpdxLicensesResponse.parse(null);
252
+ });
253
+ });
254
+ await context.test('rejects non-object value', () => {
255
+ throws(() => {
256
+ schemaSpdxLicensesResponse.parse(42);
257
+ });
258
+ });
259
+ });
260
+ //# sourceMappingURL=schema.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.test.js","sourceRoot":"","sources":["../../../../src/tests/lib/schema.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EACL,+BAA+B,EAC/B,0BAA0B,EAC1B,yBAAyB,EACzB,0BAA0B,GAC3B,MAAM,iBAAiB,CAAC;AAOzB,IAAI,CAAC,iCAAiC,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;IACxD,MAAM,OAAO,CAAC,IAAI,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACxD,MAAM,MAAM,GAAG,+BAA+B,CAAC,KAAK,CAAC;YACnD,GAAG,EAAE,YAAY;YACjB,GAAG,EAAE,YAAY;SAClB,CAAC,CAAC;QAEH,WAAW,CAAC,MAAM,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;QACtC,WAAW,CAAC,MAAM,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,MAAM,OAAO,CAAC,IAAI,CAAC,2BAA2B,EAAE,GAAG,EAAE;QACnD,MAAM,MAAM,GAAG,+BAA+B,CAAC,KAAK,CAAC;YACnD,GAAG,EAAE,YAAY;SAClB,CAAC,CAAC;QAEH,WAAW,CAAC,MAAM,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QACnC,WAAW,CAAC,MAAM,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,MAAM,OAAO,CAAC,IAAI,CAAC,2BAA2B,EAAE,GAAG,EAAE;QACnD,MAAM,MAAM,GAAG,+BAA+B,CAAC,KAAK,CAAC;YACnD,GAAG,EAAE,YAAY;YACjB,GAAG,EAAE,YAAY;YACjB,WAAW,EAAE,YAAY;YACzB,KAAK,EAAE,YAAY;SACpB,CAAC,CAAC;QAEH,WAAW,CAAC,MAAM,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;QACtC,WAAW,CAAC,MAAM,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;QACtC,WAAW,CAAC,aAAa,IAAI,MAAM,EAAE,KAAK,CAAC,CAAC;QAC5C,WAAW,CAAC,OAAO,IAAI,MAAM,EAAE,KAAK,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,MAAM,OAAO,CAAC,IAAI,CAAC,2BAA2B,EAAE,GAAG,EAAE;QACnD,MAAM,CAAC,GAAG,EAAE;YACV,+BAA+B,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,MAAM,OAAO,CAAC,IAAI,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC3D,MAAM,CAAC,GAAG,EAAE;YACV,+BAA+B,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QACtD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,MAAM,OAAO,CAAC,IAAI,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC3D,MAAM,CAAC,GAAG,EAAE;YACV,+BAA+B,CAAC,KAAK,CAAC;gBACpC,GAAG,EAAE,GAAG;gBACR,GAAG,EAAE,YAAY;aAClB,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,MAAM,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,GAAG,EAAE;QACtC,MAAM,CAAC,GAAG,EAAE;YACV,+BAA+B,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC9C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,MAAM,OAAO,CAAC,IAAI,CAAC,0BAA0B,EAAE,GAAG,EAAE;QAClD,MAAM,CAAC,GAAG,EAAE;YACV,+BAA+B,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAOH,IAAI,CAAC,4BAA4B,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;IACnD,MAAM,OAAO,CAAC,IAAI,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAChE,MAAM,MAAM,GAAG,0BAA0B,CAAC,KAAK,CAAC;YAC9C,KAAK,EAAE;gBACL,GAAG,EAAE,YAAY;gBACjB,GAAG,EAAE,YAAY;aAClB;YACD,KAAK,EAAE,EAAE,GAAG,EAAE,YAAY,EAAE;YAC5B,KAAK,EAAE;gBACL,GAAG,EAAE,YAAY;gBACjB,GAAG,EAAE,YAAY;aAClB;SACF,CAAC,CAAC;QAEH,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAE3C,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QAC1B,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QAC1B,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QAE1B,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACtB,IAAI,CAAC,4BAA4B,CAAC,CAAC;QACrC,CAAC;QAED,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACtB,IAAI,CAAC,4BAA4B,CAAC,CAAC;QACrC,CAAC;QAED,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACtB,IAAI,CAAC,4BAA4B,CAAC,CAAC;QACrC,CAAC;QAED,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;QACnC,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QAChC,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,MAAM,OAAO,CAAC,IAAI,CAAC,wBAAwB,EAAE,GAAG,EAAE;QAChD,MAAM,MAAM,GAAG,0BAA0B,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAEpD,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,MAAM,OAAO,CAAC,IAAI,CAAC,sBAAsB,EAAE,GAAG,EAAE;QAC9C,MAAM,MAAM,GAAG,0BAA0B,CAAC,KAAK,CAAC;YAC9C,KAAK,EAAE;gBACL,GAAG,EAAE,YAAY;gBACjB,GAAG,EAAE,YAAY;aAClB;SACF,CAAC,CAAC;QAEH,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAE3C,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QAE1B,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACtB,IAAI,CAAC,4BAA4B,CAAC,CAAC;QACrC,CAAC;QAED,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,MAAM,OAAO,CAAC,IAAI,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACnE,MAAM,CAAC,GAAG,EAAE;YACV,0BAA0B,CAAC,KAAK,CAAC;gBAC/B,KAAK,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE;aACpB,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,MAAM,OAAO,CAAC,IAAI,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAChE,MAAM,CAAC,GAAG,EAAE;YACV,0BAA0B,CAAC,KAAK,CAAC;gBAC/B,KAAK,EAAE,IAAI;aACZ,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,MAAM,OAAO,CAAC,IAAI,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClE,MAAM,CAAC,GAAG,EAAE;YACV,0BAA0B,CAAC,KAAK,CAAC;gBAC/B,KAAK,EAAE,cAAc;aACtB,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,MAAM,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,GAAG,EAAE;QACtC,MAAM,CAAC,GAAG,EAAE;YACV,0BAA0B,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,MAAM,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,GAAG,EAAE;QACvC,MAAM,CAAC,GAAG,EAAE;YACV,0BAA0B,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAOH,IAAI,CAAC,2BAA2B,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;IAClD,MAAM,OAAO,CAAC,IAAI,CAAC,uBAAuB,EAAE,GAAG,EAAE;QAC/C,MAAM,MAAM,GAAG,yBAAyB,CAAC,KAAK,CAAC;YAC7C,SAAS,EAAE,KAAK;SACjB,CAAC,CAAC;QAEH,WAAW,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,MAAM,OAAO,CAAC,IAAI,CAAC,2BAA2B,EAAE,GAAG,EAAE;QACnD,MAAM,MAAM,GAAG,yBAAyB,CAAC,KAAK,CAAC;YAC7C,SAAS,EAAE,YAAY;YACvB,IAAI,EAAE,oBAAoB;YAC1B,aAAa,EAAE,IAAI;SACpB,CAAC,CAAC;QAEH,WAAW,CAAC,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;QAC5C,WAAW,CAAC,MAAM,IAAI,MAAM,EAAE,KAAK,CAAC,CAAC;QACrC,WAAW,CAAC,eAAe,IAAI,MAAM,EAAE,KAAK,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,MAAM,OAAO,CAAC,IAAI,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC3D,MAAM,CAAC,GAAG,EAAE;YACV,yBAAyB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,MAAM,OAAO,CAAC,IAAI,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACnE,MAAM,CAAC,GAAG,EAAE;YACV,yBAAyB,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC;QACtD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,MAAM,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,GAAG,EAAE;QACtC,MAAM,CAAC,GAAG,EAAE;YACV,yBAAyB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,MAAM,OAAO,CAAC,IAAI,CAAC,0BAA0B,EAAE,GAAG,EAAE;QAClD,MAAM,CAAC,GAAG,EAAE;YACV,yBAAyB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAOH,IAAI,CAAC,4BAA4B,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;IACnD,MAAM,OAAO,CAAC,IAAI,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACjE,MAAM,MAAM,GAAG,0BAA0B,CAAC,KAAK,CAAC;YAC9C,QAAQ,EAAE;gBACR,EAAE,SAAS,EAAE,KAAK,EAAE;gBACpB,EAAE,SAAS,EAAE,YAAY,EAAE;gBAC3B,EAAE,SAAS,EAAE,cAAc,EAAE;aAC9B;SACF,CAAC,CAAC;QAEH,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAEvC,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QACpC,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QACpC,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAEpC,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,IAAI,CAAC,6BAA6B,CAAC,CAAC;QACtC,CAAC;QAED,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,IAAI,CAAC,6BAA6B,CAAC,CAAC;QACtC,CAAC;QAED,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,IAAI,CAAC,6BAA6B,CAAC,CAAC;QACtC,CAAC;QAED,WAAW,CAAC,QAAQ,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QACvC,WAAW,CAAC,QAAQ,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;QAC9C,WAAW,CAAC,QAAQ,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,MAAM,OAAO,CAAC,IAAI,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpE,MAAM,MAAM,GAAG,0BAA0B,CAAC,KAAK,CAAC;YAC9C,QAAQ,EAAE,EAAE;SACb,CAAC,CAAC;QAEH,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,MAAM,OAAO,CAAC,IAAI,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC9D,MAAM,MAAM,GAAG,0BAA0B,CAAC,KAAK,CAAC;YAC9C,QAAQ,EAAE,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;SACjC,CAAC,CAAC;QAEH,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAEvC,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAEpC,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,IAAI,CAAC,6BAA6B,CAAC,CAAC;QACtC,CAAC;QAED,WAAW,CAAC,QAAQ,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,MAAM,OAAO,CAAC,IAAI,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC3D,MAAM,CAAC,GAAG,EAAE;YACV,0BAA0B,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,MAAM,OAAO,CAAC,IAAI,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClE,MAAM,CAAC,GAAG,EAAE;YACV,0BAA0B,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC,CAAC;QAC9D,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,MAAM,OAAO,CAAC,IAAI,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrE,MAAM,CAAC,GAAG,EAAE;YACV,0BAA0B,CAAC,KAAK,CAAC;gBAC/B,QAAQ,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;aAC/B,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,MAAM,OAAO,CAAC,IAAI,CAAC,uDAAuD,EAAE,GAAG,EAAE;QAC/E,MAAM,CAAC,GAAG,EAAE;YACV,0BAA0B,CAAC,KAAK,CAAC;gBAC/B,QAAQ,EAAE;oBACR,EAAE,SAAS,EAAE,KAAK,EAAE;oBACpB,EAAE,OAAO,EAAE,IAAI,EAAE;iBAClB;aACF,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,MAAM,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,GAAG,EAAE;QACtC,MAAM,CAAC,GAAG,EAAE;YACV,0BAA0B,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,MAAM,OAAO,CAAC,IAAI,CAAC,0BAA0B,EAAE,GAAG,EAAE;QAClD,MAAM,CAAC,GAAG,EAAE;YACV,0BAA0B,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}