@package-broker/cli 0.19.8 → 2.0.0-rc.2

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 (193) hide show
  1. package/LICENSE +661 -0
  2. package/dist/.tsbuildinfo +1 -0
  3. package/dist/bin.d.ts +3 -0
  4. package/dist/bin.d.ts.map +1 -0
  5. package/dist/bin.js +12 -0
  6. package/dist/bin.js.map +1 -0
  7. package/dist/build-artifacts.d.ts +27 -0
  8. package/dist/build-artifacts.d.ts.map +1 -0
  9. package/dist/build-artifacts.js +169 -0
  10. package/dist/build-artifacts.js.map +1 -0
  11. package/dist/build-assets.d.ts +36 -0
  12. package/dist/build-assets.d.ts.map +1 -0
  13. package/dist/build-assets.js +224 -0
  14. package/dist/build-assets.js.map +1 -0
  15. package/dist/build.d.ts +31 -0
  16. package/dist/build.d.ts.map +1 -0
  17. package/dist/build.js +277 -0
  18. package/dist/build.js.map +1 -0
  19. package/dist/cli.d.ts +2 -0
  20. package/dist/cli.d.ts.map +1 -0
  21. package/dist/cli.js +828 -0
  22. package/dist/cli.js.map +1 -0
  23. package/dist/cloudflare/d1-http-executor.d.ts +30 -0
  24. package/dist/cloudflare/d1-http-executor.d.ts.map +1 -0
  25. package/dist/cloudflare/d1-http-executor.js +230 -0
  26. package/dist/cloudflare/d1-http-executor.js.map +1 -0
  27. package/dist/cloudflare/d1-http-response.d.ts +4 -0
  28. package/dist/cloudflare/d1-http-response.d.ts.map +1 -0
  29. package/dist/cloudflare/d1-http-response.js +113 -0
  30. package/dist/cloudflare/d1-http-response.js.map +1 -0
  31. package/dist/commands/admin.d.ts +47 -0
  32. package/dist/commands/admin.d.ts.map +1 -0
  33. package/dist/commands/admin.js +447 -0
  34. package/dist/commands/admin.js.map +1 -0
  35. package/dist/commands/built-manifest.d.ts +13 -0
  36. package/dist/commands/built-manifest.d.ts.map +1 -0
  37. package/dist/commands/built-manifest.js +197 -0
  38. package/dist/commands/built-manifest.js.map +1 -0
  39. package/dist/commands/cloudflare/api.d.ts +132 -0
  40. package/dist/commands/cloudflare/api.d.ts.map +1 -0
  41. package/dist/commands/cloudflare/api.js +502 -0
  42. package/dist/commands/cloudflare/api.js.map +1 -0
  43. package/dist/commands/cloudflare/deploy.d.ts +111 -0
  44. package/dist/commands/cloudflare/deploy.d.ts.map +1 -0
  45. package/dist/commands/cloudflare/deploy.js +2170 -0
  46. package/dist/commands/cloudflare/deploy.js.map +1 -0
  47. package/dist/commands/cloudflare/inventory.d.ts +257 -0
  48. package/dist/commands/cloudflare/inventory.d.ts.map +1 -0
  49. package/dist/commands/cloudflare/inventory.js +842 -0
  50. package/dist/commands/cloudflare/inventory.js.map +1 -0
  51. package/dist/commands/cloudflare/janitor.d.ts +10 -0
  52. package/dist/commands/cloudflare/janitor.d.ts.map +1 -0
  53. package/dist/commands/cloudflare/janitor.js +84 -0
  54. package/dist/commands/cloudflare/janitor.js.map +1 -0
  55. package/dist/commands/cloudflare/migrations-check.d.ts +5 -0
  56. package/dist/commands/cloudflare/migrations-check.d.ts.map +1 -0
  57. package/dist/commands/cloudflare/migrations-check.js +10 -0
  58. package/dist/commands/cloudflare/migrations-check.js.map +1 -0
  59. package/dist/commands/cloudflare/providers-file.d.ts +17 -0
  60. package/dist/commands/cloudflare/providers-file.d.ts.map +1 -0
  61. package/dist/commands/cloudflare/providers-file.js +155 -0
  62. package/dist/commands/cloudflare/providers-file.js.map +1 -0
  63. package/dist/commands/cloudflare/provision.d.ts +79 -0
  64. package/dist/commands/cloudflare/provision.d.ts.map +1 -0
  65. package/dist/commands/cloudflare/provision.js +961 -0
  66. package/dist/commands/cloudflare/provision.js.map +1 -0
  67. package/dist/commands/cloudflare/queue-consumer.d.ts +4 -0
  68. package/dist/commands/cloudflare/queue-consumer.d.ts.map +1 -0
  69. package/dist/commands/cloudflare/queue-consumer.js +57 -0
  70. package/dist/commands/cloudflare/queue-consumer.js.map +1 -0
  71. package/dist/commands/cloudflare/routes.d.ts +3 -0
  72. package/dist/commands/cloudflare/routes.d.ts.map +1 -0
  73. package/dist/commands/cloudflare/routes.js +26 -0
  74. package/dist/commands/cloudflare/routes.js.map +1 -0
  75. package/dist/commands/cloudflare/setup.d.ts +50 -0
  76. package/dist/commands/cloudflare/setup.d.ts.map +1 -0
  77. package/dist/commands/cloudflare/setup.js +836 -0
  78. package/dist/commands/cloudflare/setup.js.map +1 -0
  79. package/dist/commands/cloudflare/smoke.d.ts +29 -0
  80. package/dist/commands/cloudflare/smoke.d.ts.map +1 -0
  81. package/dist/commands/cloudflare/smoke.js +701 -0
  82. package/dist/commands/cloudflare/smoke.js.map +1 -0
  83. package/dist/commands/cloudflare/teardown.d.ts +65 -0
  84. package/dist/commands/cloudflare/teardown.d.ts.map +1 -0
  85. package/dist/commands/cloudflare/teardown.js +984 -0
  86. package/dist/commands/cloudflare/teardown.js.map +1 -0
  87. package/dist/commands/cloudflare/worker-settings.d.ts +4 -0
  88. package/dist/commands/cloudflare/worker-settings.d.ts.map +1 -0
  89. package/dist/commands/cloudflare/worker-settings.js +93 -0
  90. package/dist/commands/cloudflare/worker-settings.js.map +1 -0
  91. package/dist/commands/cloudflare/zone.d.ts +3 -0
  92. package/dist/commands/cloudflare/zone.d.ts.map +1 -0
  93. package/dist/commands/cloudflare/zone.js +73 -0
  94. package/dist/commands/cloudflare/zone.js.map +1 -0
  95. package/dist/commands/cloudflare.d.ts +55 -0
  96. package/dist/commands/cloudflare.d.ts.map +1 -0
  97. package/dist/commands/cloudflare.js +393 -0
  98. package/dist/commands/cloudflare.js.map +1 -0
  99. package/dist/commands/import-cutover.d.ts +5 -0
  100. package/dist/commands/import-cutover.d.ts.map +1 -0
  101. package/dist/commands/import-cutover.js +25 -0
  102. package/dist/commands/import-cutover.js.map +1 -0
  103. package/dist/commands/import-private-packagist.d.ts +38 -0
  104. package/dist/commands/import-private-packagist.d.ts.map +1 -0
  105. package/dist/commands/import-private-packagist.js +232 -0
  106. package/dist/commands/import-private-packagist.js.map +1 -0
  107. package/dist/commands/import-satis.d.ts +11 -0
  108. package/dist/commands/import-satis.d.ts.map +1 -0
  109. package/dist/commands/import-satis.js +112 -0
  110. package/dist/commands/import-satis.js.map +1 -0
  111. package/dist/commands/import.d.ts +22 -0
  112. package/dist/commands/import.d.ts.map +1 -0
  113. package/dist/commands/import.js +343 -0
  114. package/dist/commands/import.js.map +1 -0
  115. package/dist/commands/openapi-specs.d.ts +4 -0
  116. package/dist/commands/openapi-specs.d.ts.map +1 -0
  117. package/dist/commands/openapi-specs.js +94 -0
  118. package/dist/commands/openapi-specs.js.map +1 -0
  119. package/dist/commands/openapi.d.ts +12 -0
  120. package/dist/commands/openapi.d.ts.map +1 -0
  121. package/dist/commands/openapi.js +44 -0
  122. package/dist/commands/openapi.js.map +1 -0
  123. package/dist/commands/source.d.ts +8 -0
  124. package/dist/commands/source.d.ts.map +1 -0
  125. package/dist/commands/source.js +61 -0
  126. package/dist/commands/source.js.map +1 -0
  127. package/dist/commands/sqlite.d.ts +11 -0
  128. package/dist/commands/sqlite.d.ts.map +1 -0
  129. package/dist/commands/sqlite.js +76 -0
  130. package/dist/commands/sqlite.js.map +1 -0
  131. package/dist/import/client.d.ts +71 -0
  132. package/dist/import/client.d.ts.map +1 -0
  133. package/dist/import/client.js +348 -0
  134. package/dist/import/client.js.map +1 -0
  135. package/dist/import/credential-refs.d.ts +2 -0
  136. package/dist/import/credential-refs.d.ts.map +1 -0
  137. package/dist/import/credential-refs.js +22 -0
  138. package/dist/import/credential-refs.js.map +1 -0
  139. package/dist/import/cutover.d.ts +64 -0
  140. package/dist/import/cutover.d.ts.map +1 -0
  141. package/dist/import/cutover.js +544 -0
  142. package/dist/import/cutover.js.map +1 -0
  143. package/dist/import/private-packagist/api.d.ts +57 -0
  144. package/dist/import/private-packagist/api.d.ts.map +1 -0
  145. package/dist/import/private-packagist/api.js +246 -0
  146. package/dist/import/private-packagist/api.js.map +1 -0
  147. package/dist/import/private-packagist/dates.d.ts +30 -0
  148. package/dist/import/private-packagist/dates.d.ts.map +1 -0
  149. package/dist/import/private-packagist/dates.js +189 -0
  150. package/dist/import/private-packagist/dates.js.map +1 -0
  151. package/dist/import/private-packagist/map.d.ts +48 -0
  152. package/dist/import/private-packagist/map.d.ts.map +1 -0
  153. package/dist/import/private-packagist/map.js +162 -0
  154. package/dist/import/private-packagist/map.js.map +1 -0
  155. package/dist/import/private-packagist/plan.d.ts +61 -0
  156. package/dist/import/private-packagist/plan.d.ts.map +1 -0
  157. package/dist/import/private-packagist/plan.js +936 -0
  158. package/dist/import/private-packagist/plan.js.map +1 -0
  159. package/dist/import/private-packagist/snapshot.d.ts +31 -0
  160. package/dist/import/private-packagist/snapshot.d.ts.map +1 -0
  161. package/dist/import/private-packagist/snapshot.js +406 -0
  162. package/dist/import/private-packagist/snapshot.js.map +1 -0
  163. package/dist/import/satis.d.ts +93 -0
  164. package/dist/import/satis.d.ts.map +1 -0
  165. package/dist/import/satis.js +873 -0
  166. package/dist/import/satis.js.map +1 -0
  167. package/dist/index.d.ts +3 -2
  168. package/dist/index.d.ts.map +1 -1
  169. package/dist/index.js +3 -96
  170. package/dist/index.js.map +1 -1
  171. package/dist/manifest.d.ts +56 -0
  172. package/dist/manifest.d.ts.map +1 -0
  173. package/dist/manifest.js +137 -0
  174. package/dist/manifest.js.map +1 -0
  175. package/dist/migrations-collect.d.ts +6 -0
  176. package/dist/migrations-collect.d.ts.map +1 -0
  177. package/dist/migrations-collect.js +39 -0
  178. package/dist/migrations-collect.js.map +1 -0
  179. package/dist/prebuilt-expected.json +7 -0
  180. package/dist/prebuilt.d.ts +27 -0
  181. package/dist/prebuilt.d.ts.map +1 -0
  182. package/dist/prebuilt.js +391 -0
  183. package/dist/prebuilt.js.map +1 -0
  184. package/package.json +22 -25
  185. package/README.md +0 -29
  186. package/dist/__tests__/migrate.test.d.ts +0 -2
  187. package/dist/__tests__/migrate.test.d.ts.map +0 -1
  188. package/dist/__tests__/migrate.test.js +0 -116
  189. package/dist/__tests__/migrate.test.js.map +0 -1
  190. package/dist/migrate.d.ts +0 -40
  191. package/dist/migrate.d.ts.map +0 -1
  192. package/dist/migrate.js +0 -335
  193. package/dist/migrate.js.map +0 -1
@@ -0,0 +1,391 @@
1
+ import { createHash, randomUUID } from 'node:crypto';
2
+ import { lstat, mkdir, mkdtemp, readFile, readdir, realpath, rename, rm, writeFile, } from 'node:fs/promises';
3
+ import { createRequire } from 'node:module';
4
+ import { basename, dirname, isAbsolute, relative, resolve as resolvePath, sep } from 'node:path';
5
+ import { CloudflareError } from './commands/cloudflare/api.js';
6
+ import { validateDeploymentArtifact } from './commands/cloudflare/deploy.js';
7
+ const PACKAGE = '@package-broker/dist-cloudflare';
8
+ const hash = (bytes) => createHash('sha256').update(bytes).digest('hex');
9
+ const digest = (value) => typeof value === 'string' && /^[a-f0-9]{64}$/.test(value);
10
+ const invalid = () => {
11
+ throw new CloudflareError('prebuilt_invalid', 2, false, 'prebuilt');
12
+ };
13
+ const unsafe = () => {
14
+ throw new CloudflareError('unsafe_path', 2, false, 'prebuilt');
15
+ };
16
+ const mismatch = () => {
17
+ throw new CloudflareError('checksum_mismatch', 3, false, 'prebuilt');
18
+ };
19
+ function object(value) {
20
+ if (!value || typeof value !== 'object' || Array.isArray(value))
21
+ return invalid();
22
+ return value;
23
+ }
24
+ function keys(value, names) {
25
+ if (Object.keys(value).length !== names.length ||
26
+ names.some((name) => !Object.hasOwn(value, name)))
27
+ invalid();
28
+ }
29
+ function pathParts(name) {
30
+ if (isAbsolute(name) || name.includes('\\') || name.includes('\0') || name.includes(':'))
31
+ return unsafe();
32
+ const parts = name.split('/');
33
+ if (parts.some((p) => !p || p === '.' || p === '..'))
34
+ return unsafe();
35
+ return parts;
36
+ }
37
+ const deploymentFile = (name) => ['worker.js', 'build-info.json', 'generated/manifest.json', 'assets.json'].includes(name) ||
38
+ name.startsWith('assets/') ||
39
+ name.startsWith('migrations/');
40
+ async function stat(path) {
41
+ try {
42
+ return await lstat(path);
43
+ }
44
+ catch (error) {
45
+ if (error.code === 'ENOENT')
46
+ return null;
47
+ throw error;
48
+ }
49
+ }
50
+ async function regular(root, name) {
51
+ let current = root;
52
+ const parts = pathParts(name);
53
+ for (const [index, part] of parts.entries()) {
54
+ current = resolvePath(current, part);
55
+ const entry = await stat(current);
56
+ if (!entry)
57
+ return mismatch();
58
+ if (entry.isSymbolicLink() ||
59
+ (index === parts.length - 1 ? !entry.isFile() : !entry.isDirectory()))
60
+ return unsafe();
61
+ }
62
+ return readFile(current);
63
+ }
64
+ function record(value) {
65
+ const r = object(value);
66
+ keys(r, [
67
+ 'schemaVersion',
68
+ 'package',
69
+ 'version',
70
+ 'target',
71
+ 'payload',
72
+ 'gitSha',
73
+ 'lockfileSha256',
74
+ 'toolchain',
75
+ 'plugins',
76
+ 'files',
77
+ 'artifactSha256',
78
+ ]);
79
+ if (r.schemaVersion !== 1 ||
80
+ r.package !== PACKAGE ||
81
+ r.target !== 'cloudflare' ||
82
+ r.payload !== 'cloudflare' ||
83
+ typeof r.version !== 'string' ||
84
+ typeof r.gitSha !== 'string' ||
85
+ !/^[a-f0-9]{40}$/i.test(r.gitSha) ||
86
+ !digest(r.lockfileSha256) ||
87
+ !digest(r.artifactSha256))
88
+ return invalid();
89
+ const toolchain = object(r.toolchain);
90
+ keys(toolchain, ['node', 'esbuild', 'os', 'arch']);
91
+ if (Object.values(toolchain).some((v) => typeof v !== 'string') ||
92
+ Object.values(object(r.plugins)).some((v) => typeof v !== 'string'))
93
+ invalid();
94
+ const files = object(r.files);
95
+ for (const [name, value] of Object.entries(files)) {
96
+ pathParts(name);
97
+ if (typeof value !== 'string' || !/^sha256:[a-f0-9]{64}$/.test(value))
98
+ invalid();
99
+ if (!deploymentFile(name) && name !== 'wrangler.toml')
100
+ invalid();
101
+ }
102
+ for (const name of [
103
+ 'worker.js',
104
+ 'build-info.json',
105
+ 'generated/manifest.json',
106
+ 'assets.json',
107
+ 'assets/manifest.json',
108
+ ])
109
+ if (!Object.hasOwn(files, name))
110
+ mismatch();
111
+ return {
112
+ ...r,
113
+ files,
114
+ version: r.version,
115
+ gitSha: r.gitSha,
116
+ lockfileSha256: r.lockfileSha256,
117
+ artifactSha256: r.artifactSha256,
118
+ };
119
+ }
120
+ export function prebuiltEnvelope(result) {
121
+ return {
122
+ package: result.package,
123
+ version: result.version,
124
+ gitSha: result.gitSha,
125
+ artifact_sha256: result.artifactSha256,
126
+ };
127
+ }
128
+ export async function assertPrebuiltConfiguration(project, configPath) {
129
+ if (configPath !== undefined || (await stat(resolvePath(project, 'broker.config.ts')))) {
130
+ const error = new CloudflareError('invalid_input', 2, false, 'prebuilt');
131
+ error.message = 'custom configuration needs a build: run pb build or omit --prebuilt';
132
+ throw error;
133
+ }
134
+ }
135
+ async function checkOutput(project, out, source) {
136
+ const rel = relative(project, out);
137
+ if (!rel ||
138
+ isAbsolute(rel) ||
139
+ rel === '..' ||
140
+ rel.startsWith(`..${sep}`) ||
141
+ rel.split(sep).includes('.git') ||
142
+ rel === `.pb${sep}state` ||
143
+ rel.startsWith(`.pb${sep}state${sep}`) ||
144
+ !relative(out, source).startsWith(`..${sep}`) ||
145
+ !relative(source, out).startsWith(`..${sep}`))
146
+ return unsafe();
147
+ let current = project;
148
+ for (const part of rel.split(sep)) {
149
+ current = resolvePath(current, part);
150
+ const entry = await stat(current);
151
+ if (entry && (!entry.isDirectory() || entry.isSymbolicLink()))
152
+ return unsafe();
153
+ }
154
+ }
155
+ async function canonical(path) {
156
+ const entry = await stat(path);
157
+ if (entry)
158
+ return realpath(path);
159
+ return resolvePath(await canonical(dirname(path)), basename(path));
160
+ }
161
+ async function locked(out) {
162
+ const path = `${out}.lock`;
163
+ try {
164
+ const entry = await stat(path);
165
+ if (!entry)
166
+ return false;
167
+ if (!entry.isFile() || entry.isSymbolicLink())
168
+ return true;
169
+ const pid = JSON.parse(await readFile(path, 'utf8'));
170
+ if (typeof pid !== 'number' || !Number.isSafeInteger(pid) || pid <= 0)
171
+ return true;
172
+ try {
173
+ process.kill(pid, 0);
174
+ return true;
175
+ }
176
+ catch (error) {
177
+ return error.code !== 'ESRCH';
178
+ }
179
+ }
180
+ catch (error) {
181
+ return error.code !== 'ENOENT';
182
+ }
183
+ }
184
+ export async function removePrebuilt(out) {
185
+ await rm(out, { recursive: true, force: true });
186
+ await rm(`${out}.lock`, { force: true });
187
+ }
188
+ async function sweep(selectedOut, source) {
189
+ const parent = dirname(selectedOut);
190
+ const prefix = basename(selectedOut);
191
+ const uuid = '[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}';
192
+ const run = new RegExp(`^${uuid}$`);
193
+ const temporary = new RegExp(`^${uuid}\\.tmp-[A-Za-z0-9]{6}$`);
194
+ const lock = new RegExp(`^${uuid}\\.lock$`);
195
+ const entries = await readdir(parent, { withFileTypes: true }).catch(() => []);
196
+ for (const entry of entries) {
197
+ try {
198
+ if (!entry.name.startsWith(`${prefix}.`))
199
+ continue;
200
+ const suffix = entry.name.slice(prefix.length + 1);
201
+ const path = resolvePath(parent, entry.name);
202
+ if (!relative(path, source).startsWith(`..${sep}`) ||
203
+ !relative(source, path).startsWith(`..${sep}`))
204
+ continue;
205
+ if (entry.isFile() && lock.test(suffix)) {
206
+ const owner = path.slice(0, -'.lock'.length);
207
+ if (!(await locked(owner)) && !(await stat(owner)))
208
+ await rm(path, { force: true });
209
+ continue;
210
+ }
211
+ if (!entry.isDirectory())
212
+ continue;
213
+ const isTemporary = temporary.test(suffix);
214
+ if (!isTemporary && !run.test(suffix))
215
+ continue;
216
+ const owner = isTemporary ? path.slice(0, path.lastIndexOf('.tmp-')) : path;
217
+ if (await locked(owner))
218
+ continue;
219
+ if (!isTemporary) {
220
+ const marker = object(JSON.parse((await regular(path, 'prebuilt.json')).toString('utf8')));
221
+ if (marker.package !== PACKAGE)
222
+ continue;
223
+ }
224
+ await rm(path, { recursive: true, force: true });
225
+ await rm(`${owner}.lock`, { force: true });
226
+ }
227
+ catch {
228
+ continue;
229
+ }
230
+ }
231
+ }
232
+ export async function materializePrebuilt(o) {
233
+ try {
234
+ const project = await realpath(resolvePath(o.project));
235
+ const requestedOut = resolvePath(o.project, o.outDir ?? '.pb/prebuilt/cloudflare');
236
+ if ((await stat(requestedOut))?.isSymbolicLink())
237
+ return unsafe();
238
+ const selectedOut = await canonical(requestedOut);
239
+ const outDir = `${selectedOut}.${randomUUID()}`;
240
+ let expected = o.expected;
241
+ if (expected === undefined) {
242
+ try {
243
+ expected = JSON.parse(await readFile(new URL('./prebuilt-expected.json', import.meta.url), 'utf8'));
244
+ }
245
+ catch {
246
+ throw new CloudflareError('prebuilt_unverifiable', 2, false, 'prebuilt');
247
+ }
248
+ }
249
+ const e = object(expected);
250
+ keys(e, ['schemaVersion', 'package', 'version', 'artifactSha256', 'prebuiltJsonSha256']);
251
+ if (e.schemaVersion !== 1 ||
252
+ e.package !== PACKAGE ||
253
+ typeof e.version !== 'string' ||
254
+ !digest(e.artifactSha256) ||
255
+ !digest(e.prebuiltJsonSha256))
256
+ invalid();
257
+ const cliVersion = o.cliVersion ??
258
+ object(JSON.parse(await readFile(new URL('../package.json', import.meta.url), 'utf8')))
259
+ .version;
260
+ let packagePath;
261
+ try {
262
+ packagePath = (o.resolve ?? createRequire(import.meta.url).resolve)(`${PACKAGE}/package.json`);
263
+ }
264
+ catch {
265
+ throw new CloudflareError('prebuilt_unavailable', 2, false, 'prebuilt');
266
+ }
267
+ let root, bytes;
268
+ try {
269
+ root = await realpath(dirname(packagePath));
270
+ const entry = await stat(resolvePath(root, 'prebuilt.json'));
271
+ if (!entry)
272
+ throw new CloudflareError('prebuilt_unavailable', 2, false, 'prebuilt');
273
+ if (!entry.isFile() || entry.isSymbolicLink())
274
+ return unsafe();
275
+ bytes = await readFile(resolvePath(root, 'prebuilt.json'));
276
+ }
277
+ catch (error) {
278
+ if (error.code === 'ENOENT')
279
+ throw new CloudflareError('prebuilt_unavailable', 2, false, 'prebuilt');
280
+ throw error;
281
+ }
282
+ const pkg = object(JSON.parse((await regular(root, 'package.json')).toString('utf8')));
283
+ if (pkg.version !== cliVersion || e.version !== cliVersion)
284
+ throw new CloudflareError('prebuilt_version_mismatch', 2, false, 'prebuilt');
285
+ if (hash(bytes) !== e.prebuiltJsonSha256)
286
+ return mismatch();
287
+ const r = record(JSON.parse(bytes.toString('utf8')));
288
+ if (pkg.name !== PACKAGE)
289
+ invalid();
290
+ if ([
291
+ 'dependencies',
292
+ 'optionalDependencies',
293
+ 'peerDependencies',
294
+ 'bundleDependencies',
295
+ 'bundledDependencies',
296
+ ].some((key) => Object.hasOwn(pkg, key)) ||
297
+ pkg.gypfile === true ||
298
+ (await stat(resolvePath(root, 'binding.gyp'))) !== null ||
299
+ ['install', 'preinstall', 'postinstall', 'prepare'].some((key) => Object.hasOwn(object(pkg.scripts ?? {}), key)))
300
+ throw new CloudflareError('prebuilt_dependencies_refused', 2, false, 'prebuilt');
301
+ if (r.version !== cliVersion)
302
+ throw new CloudflareError('prebuilt_version_mismatch', 2, false, 'prebuilt');
303
+ const payload = resolvePath(root, 'cloudflare');
304
+ const payloadStat = await stat(payload);
305
+ if (!payloadStat?.isDirectory() || payloadStat.isSymbolicLink())
306
+ return unsafe();
307
+ const listed = new Set(Object.keys(r.files));
308
+ async function inventory(dir, prefix = '') {
309
+ for (const entry of await readdir(dir, { withFileTypes: true })) {
310
+ const name = `${prefix}${entry.name}`;
311
+ pathParts(name);
312
+ if (entry.isSymbolicLink() || (!entry.isDirectory() && !entry.isFile()))
313
+ return unsafe();
314
+ if (entry.isDirectory())
315
+ await inventory(resolvePath(dir, entry.name), `${name}/`);
316
+ else if (!listed.has(name))
317
+ return mismatch();
318
+ }
319
+ }
320
+ await inventory(payload);
321
+ const files = new Map();
322
+ for (const name of listed) {
323
+ const content = await regular(payload, name);
324
+ files.set(name, content);
325
+ }
326
+ await checkOutput(project, selectedOut, root);
327
+ await mkdir(dirname(outDir), { recursive: true });
328
+ await sweep(selectedOut, root);
329
+ // Reserve the run before creating any payload directory; the command keeps this lock.
330
+ await writeFile(`${outDir}.lock`, JSON.stringify(process.pid), { flag: 'wx' });
331
+ let temporary;
332
+ let published = false;
333
+ try {
334
+ temporary = await mkdtemp(`${outDir}.tmp-`);
335
+ const tree = resolvePath(temporary, 'tree');
336
+ await mkdir(tree);
337
+ for (const [name, content] of files) {
338
+ const destination = resolvePath(tree, name);
339
+ await mkdir(dirname(destination), { recursive: true });
340
+ await writeFile(destination, content, { flag: 'wx' });
341
+ if (`sha256:${hash(await readFile(destination))}` !== r.files[name])
342
+ return mismatch();
343
+ }
344
+ const info = object(JSON.parse(files.get('build-info.json').toString('utf8')));
345
+ if (info.dirty !== false)
346
+ throw new CloudflareError('prebuilt_dirty', 2, false, 'prebuilt');
347
+ if (info.gitSha !== r.gitSha)
348
+ throw new CloudflareError('prebuilt_git_sha_mismatch', 2, false, 'prebuilt');
349
+ if (info.lockfileSha256 !== r.lockfileSha256)
350
+ throw new CloudflareError('prebuilt_lockfile_mismatch', 2, false, 'prebuilt');
351
+ await rm(resolvePath(tree, 'wrangler.toml'), { force: true });
352
+ const artifact = await validateDeploymentArtifact(tree);
353
+ if (artifact.artifactHash !== r.artifactSha256 || artifact.artifactHash !== e.artifactSha256)
354
+ return mismatch();
355
+ await writeFile(resolvePath(tree, 'prebuilt.json'), bytes, { flag: 'wx' });
356
+ await checkOutput(project, outDir, root);
357
+ await rename(tree, outDir);
358
+ published = true;
359
+ }
360
+ finally {
361
+ try {
362
+ if (temporary)
363
+ await rm(temporary, { recursive: true, force: true });
364
+ }
365
+ finally {
366
+ if (!published)
367
+ await removePrebuilt(outDir);
368
+ }
369
+ }
370
+ return {
371
+ outDir,
372
+ package: PACKAGE,
373
+ version: r.version,
374
+ gitSha: r.gitSha,
375
+ artifactSha256: r.artifactSha256,
376
+ };
377
+ }
378
+ catch (error) {
379
+ if (error instanceof CloudflareError) {
380
+ if (error.stage === 'prebuilt')
381
+ throw error;
382
+ return invalid();
383
+ }
384
+ if (error instanceof SyntaxError)
385
+ return invalid();
386
+ if (/^E[A-Z0-9]+$/.test(error?.code ?? ''))
387
+ throw new CloudflareError('prebuilt_io_failure', 1, false, 'prebuilt');
388
+ throw error;
389
+ }
390
+ }
391
+ //# sourceMappingURL=prebuilt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prebuilt.js","sourceRoot":"","sources":["../src/prebuilt.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,40 +1,37 @@
1
1
  {
2
2
  "name": "@package-broker/cli",
3
- "version": "0.19.8",
4
- "description": "CLI tool to initialize PACKAGE.broker configuration",
3
+ "version": "2.0.0-rc.2",
4
+ "description": "Package Broker CLI (pb)",
5
+ "license": "AGPL-3.0-only",
5
6
  "type": "module",
6
7
  "bin": {
7
- "package-broker": "./dist/index.js",
8
- "package-broker-migrate": "./dist/migrate.js"
8
+ "pb": "./dist/bin.js"
9
+ },
10
+ "exports": {
11
+ ".": {
12
+ "types": "./dist/index.d.ts",
13
+ "default": "./dist/index.js"
14
+ },
15
+ "./package.json": "./package.json"
9
16
  },
10
17
  "files": [
11
18
  "dist",
12
- "package.json",
13
- "README.md"
19
+ "!dist/**/*.test.*"
14
20
  ],
15
- "scripts": {
16
- "lint": "echo 'no linting configured'",
17
- "build": "tsc -p tsconfig.build.json",
18
- "clean": "rm -rf dist",
19
- "typecheck": "tsc --noEmit",
20
- "prepublishOnly": "npm run clean && npm run build"
21
- },
22
21
  "dependencies": {
23
- "@package-broker/main": "^0.19.8"
24
- },
25
- "devDependencies": {
26
- "@types/node": "^22.20.0",
27
- "typescript": "^6.0.3"
22
+ "@package-broker/core": "2.0.0-rc.2",
23
+ "@package-broker/db-sqlite": "2.0.0-rc.2",
24
+ "@package-broker/plugin-sso-oidc": "0.1.0-rc.2",
25
+ "@package-broker/runtime-cloudflare": "2.0.0-rc.2",
26
+ "@package-broker/runtime-node": "2.0.0-rc.2",
27
+ "esbuild": "0.28.2"
28
28
  },
29
29
  "repository": {
30
30
  "type": "git",
31
- "url": "https://github.com/package-broker/server",
31
+ "url": "git+https://github.com/package-broker/broker.git",
32
32
  "directory": "packages/cli"
33
33
  },
34
- "publishConfig": {
35
- "access": "public"
36
- },
37
- "engines": {
38
- "node": ">=22.0.0"
34
+ "optionalDependencies": {
35
+ "@package-broker/dist-cloudflare": "2.0.0-rc.2"
39
36
  }
40
- }
37
+ }
package/README.md DELETED
@@ -1,29 +0,0 @@
1
- # PACKAGE.broker CLI
2
-
3
- CLI tool to initialize PACKAGE.broker configuration in your project.
4
-
5
- ## Usage
6
-
7
- ```bash
8
- npm install @package-broker/cli @package-broker/main
9
- npx package-broker
10
- ```
11
-
12
- This command will:
13
- - Copy `wrangler.toml` configuration template to your project
14
- - Copy database migrations to `migrations/` directory
15
- - Display next steps for setting up Cloudflare resources
16
-
17
- ## What's Next?
18
-
19
- After running the init command, follow the displayed instructions to:
20
-
21
- 1. Configure your worker name and encryption key in `wrangler.toml`
22
- 2. Login to Cloudflare with `wrangler login`
23
- 3. Create required Cloudflare resources (D1, KV, R2)
24
- 4. Apply database migrations
25
- 5. Deploy your worker
26
-
27
- ## Documentation
28
-
29
- For full documentation, visit: https://package.broker/docs/
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=migrate.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"migrate.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/migrate.test.ts"],"names":[],"mappings":""}
@@ -1,116 +0,0 @@
1
- import { describe, it, expect, vi, beforeEach } from 'vitest';
2
- import { rewriteComposerJson, estimateSavings, discoverFromSatis, discoverFromPrivatePackagist, } from '../migrate';
3
- const mockFetch = vi.fn();
4
- vi.stubGlobal('fetch', mockFetch);
5
- describe('rewriteComposerJson', () => {
6
- it('should replace matching repository URL', () => {
7
- const input = {
8
- name: 'acme/app',
9
- repositories: [
10
- { type: 'composer', url: 'https://satis.example.com' },
11
- { type: 'vcs', url: 'https://github.com/acme/lib' },
12
- ],
13
- };
14
- const result = rewriteComposerJson(input, 'https://satis.example.com', 'https://broker.example.com');
15
- expect(result.repositories).toEqual([
16
- { type: 'composer', url: 'https://broker.example.com' },
17
- { type: 'vcs', url: 'https://github.com/acme/lib' },
18
- ]);
19
- });
20
- it('should handle trailing slashes', () => {
21
- const input = {
22
- repositories: [
23
- { type: 'composer', url: 'https://satis.example.com/' },
24
- ],
25
- };
26
- const result = rewriteComposerJson(input, 'https://satis.example.com', 'https://broker.example.com/');
27
- expect(result.repositories[0].url).toBe('https://broker.example.com');
28
- });
29
- it('should be case insensitive for URL matching', () => {
30
- const input = {
31
- repositories: [
32
- { type: 'composer', url: 'https://Satis.Example.COM' },
33
- ],
34
- };
35
- const result = rewriteComposerJson(input, 'https://satis.example.com', 'https://broker.example.com');
36
- expect(result.repositories[0].url).toBe('https://broker.example.com');
37
- });
38
- it('should not modify non-matching repositories', () => {
39
- const input = {
40
- repositories: [
41
- { type: 'composer', url: 'https://other-registry.com' },
42
- ],
43
- };
44
- const result = rewriteComposerJson(input, 'https://satis.example.com', 'https://broker.example.com');
45
- expect(result.repositories[0].url).toBe('https://other-registry.com');
46
- });
47
- it('should handle missing repositories array', () => {
48
- const input = { name: 'acme/app' };
49
- const result = rewriteComposerJson(input, 'https://satis.example.com', 'https://broker.example.com');
50
- expect(result.repositories).toBeUndefined();
51
- });
52
- });
53
- describe('estimateSavings', () => {
54
- it('should estimate Private Packagist costs by tier', () => {
55
- expect(estimateSavings('packagist', 3).monthly_cost).toBe(0);
56
- expect(estimateSavings('packagist', 8).monthly_cost).toBe(7);
57
- expect(estimateSavings('packagist', 30).monthly_cost).toBe(35);
58
- expect(estimateSavings('packagist', 100).monthly_cost).toBe(119);
59
- expect(estimateSavings('packagist', 200).monthly_cost).toBe(299);
60
- });
61
- it('should estimate Satis hosting costs', () => {
62
- const small = estimateSavings('satis', 20);
63
- expect(small.monthly_cost).toBe(10);
64
- const large = estimateSavings('satis', 100);
65
- expect(large.monthly_cost).toBe(20);
66
- });
67
- it('should calculate annual savings', () => {
68
- const result = estimateSavings('packagist', 100);
69
- expect(result.annual_cost).toBe(result.monthly_cost * 12);
70
- expect(result.annual_savings).toBe(result.annual_cost);
71
- });
72
- });
73
- describe('discoverFromSatis', () => {
74
- beforeEach(() => {
75
- mockFetch.mockReset();
76
- });
77
- it('should discover packages from Satis packages.json', async () => {
78
- mockFetch.mockResolvedValueOnce(new Response(JSON.stringify({
79
- packages: {
80
- 'acme/foo': { '1.0.0': {}, '2.0.0': {} },
81
- 'acme/bar': { '1.0.0': {} },
82
- },
83
- }), { status: 200, headers: { 'Content-Type': 'application/json' } }));
84
- const packages = await discoverFromSatis('https://satis.example.com');
85
- expect(packages).toHaveLength(2);
86
- expect(packages[0]).toEqual({ name: 'acme/foo', versions: ['1.0.0', '2.0.0'] });
87
- expect(packages[1]).toEqual({ name: 'acme/bar', versions: ['1.0.0'] });
88
- });
89
- it('should throw on HTTP error', async () => {
90
- mockFetch.mockResolvedValueOnce(new Response('Not Found', { status: 404 }));
91
- await expect(discoverFromSatis('https://satis.example.com')).rejects.toThrow('HTTP 404');
92
- });
93
- });
94
- describe('discoverFromPrivatePackagist', () => {
95
- beforeEach(() => {
96
- mockFetch.mockReset();
97
- });
98
- it('should discover packages with authentication', async () => {
99
- mockFetch.mockResolvedValueOnce(new Response(JSON.stringify({
100
- packages: {
101
- 'acme/premium': { '3.0.0': {} },
102
- },
103
- }), { status: 200, headers: { 'Content-Type': 'application/json' } }));
104
- const packages = await discoverFromPrivatePackagist('https://repo.packagist.com/acme', 'pp_token123');
105
- expect(packages).toHaveLength(1);
106
- expect(packages[0].name).toBe('acme/premium');
107
- // Verify auth header was sent
108
- const callHeaders = mockFetch.mock.calls[0][1]?.headers;
109
- expect(callHeaders?.Authorization).toBe('Bearer pp_token123');
110
- });
111
- it('should throw on auth failure', async () => {
112
- mockFetch.mockResolvedValueOnce(new Response('Unauthorized', { status: 401 }));
113
- await expect(discoverFromPrivatePackagist('https://repo.packagist.com/acme', 'bad-token')).rejects.toThrow('Authentication failed');
114
- });
115
- });
116
- //# sourceMappingURL=migrate.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"migrate.test.js","sourceRoot":"","sources":["../../src/__tests__/migrate.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAC9D,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,iBAAiB,EACjB,4BAA4B,GAE7B,MAAM,YAAY,CAAC;AAEpB,MAAM,SAAS,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;AAC1B,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;AAElC,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACnC,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAChD,MAAM,KAAK,GAAiB;YAC1B,IAAI,EAAE,UAAU;YAChB,YAAY,EAAE;gBACZ,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,2BAA2B,EAAE;gBACtD,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,6BAA6B,EAAE;aACpD;SACF,CAAC;QAEF,MAAM,MAAM,GAAG,mBAAmB,CAChC,KAAK,EACL,2BAA2B,EAC3B,4BAA4B,CAC7B,CAAC;QAEF,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC;YAClC,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,4BAA4B,EAAE;YACvD,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,6BAA6B,EAAE;SACpD,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACxC,MAAM,KAAK,GAAiB;YAC1B,YAAY,EAAE;gBACZ,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,4BAA4B,EAAE;aACxD;SACF,CAAC;QAEF,MAAM,MAAM,GAAG,mBAAmB,CAChC,KAAK,EACL,2BAA2B,EAC3B,6BAA6B,CAC9B,CAAC;QAEF,MAAM,CAAC,MAAM,CAAC,YAAa,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;IACzE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,KAAK,GAAiB;YAC1B,YAAY,EAAE;gBACZ,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,2BAA2B,EAAE;aACvD;SACF,CAAC;QAEF,MAAM,MAAM,GAAG,mBAAmB,CAChC,KAAK,EACL,2BAA2B,EAC3B,4BAA4B,CAC7B,CAAC;QAEF,MAAM,CAAC,MAAM,CAAC,YAAa,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;IACzE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,KAAK,GAAiB;YAC1B,YAAY,EAAE;gBACZ,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,4BAA4B,EAAE;aACxD;SACF,CAAC;QAEF,MAAM,MAAM,GAAG,mBAAmB,CAChC,KAAK,EACL,2BAA2B,EAC3B,4BAA4B,CAC7B,CAAC;QAEF,MAAM,CAAC,MAAM,CAAC,YAAa,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;IACzE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,MAAM,KAAK,GAAiB,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;QAEjD,MAAM,MAAM,GAAG,mBAAmB,CAChC,KAAK,EACL,2BAA2B,EAC3B,4BAA4B,CAC7B,CAAC;QAEF,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,aAAa,EAAE,CAAC;IAC9C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;QACzD,MAAM,CAAC,eAAe,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC7D,MAAM,CAAC,eAAe,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC7D,MAAM,CAAC,eAAe,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC/D,MAAM,CAAC,eAAe,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACjE,MAAM,CAAC,eAAe,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACnE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC7C,MAAM,KAAK,GAAG,eAAe,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QAC3C,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEpC,MAAM,KAAK,GAAG,eAAe,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QAC5C,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;QACzC,MAAM,MAAM,GAAG,eAAe,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;QACjD,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,GAAG,EAAE,CAAC,CAAC;QAC1D,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,UAAU,CAAC,GAAG,EAAE;QACd,SAAS,CAAC,SAAS,EAAE,CAAC;IACxB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,KAAK,IAAI,EAAE;QACjE,SAAS,CAAC,qBAAqB,CAC7B,IAAI,QAAQ,CACV,IAAI,CAAC,SAAS,CAAC;YACb,QAAQ,EAAE;gBACR,UAAU,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;gBACxC,UAAU,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;aAC5B;SACF,CAAC,EACF,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,EAAE,CACjE,CACF,CAAC;QAEF,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CAAC,2BAA2B,CAAC,CAAC;QAEtE,MAAM,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACjC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;QAChF,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACzE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4BAA4B,EAAE,KAAK,IAAI,EAAE;QAC1C,SAAS,CAAC,qBAAqB,CAC7B,IAAI,QAAQ,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAC3C,CAAC;QAEF,MAAM,MAAM,CAAC,iBAAiB,CAAC,2BAA2B,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAC3F,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,8BAA8B,EAAE,GAAG,EAAE;IAC5C,UAAU,CAAC,GAAG,EAAE;QACd,SAAS,CAAC,SAAS,EAAE,CAAC;IACxB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;QAC5D,SAAS,CAAC,qBAAqB,CAC7B,IAAI,QAAQ,CACV,IAAI,CAAC,SAAS,CAAC;YACb,QAAQ,EAAE;gBACR,cAAc,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;aAChC;SACF,CAAC,EACF,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,EAAE,CACjE,CACF,CAAC;QAEF,MAAM,QAAQ,GAAG,MAAM,4BAA4B,CACjD,iCAAiC,EACjC,aAAa,CACd,CAAC;QAEF,MAAM,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACjC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAE9C,8BAA8B;QAC9B,MAAM,WAAW,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,OAAiC,CAAC;QAClF,MAAM,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8BAA8B,EAAE,KAAK,IAAI,EAAE;QAC5C,SAAS,CAAC,qBAAqB,CAC7B,IAAI,QAAQ,CAAC,cAAc,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAC9C,CAAC;QAEF,MAAM,MAAM,CACV,4BAA4B,CAAC,iCAAiC,EAAE,WAAW,CAAC,CAC7E,CAAC,OAAO,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}