@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,544 @@
1
+ import { spawn } from 'node:child_process';
2
+ import { mkdir, mkdtemp, readFile, rm, stat, writeFile } from 'node:fs/promises';
3
+ import { tmpdir } from 'node:os';
4
+ import { join } from 'node:path';
5
+ const MESSAGES = {
6
+ passed: 'Composer cutover check passed.',
7
+ resolution_difference: 'Composer lock resolutions differ.',
8
+ old_dist_host: 'New repository lock still uses the old repository host.',
9
+ update_failed: 'Composer lock update failed.',
10
+ install_failed: 'Composer install failed.',
11
+ historic_failed: 'Historic lock check failed.',
12
+ composer_v2_required: 'Composer v2 is required; install Composer v2 and make it available on PATH.',
13
+ invalid_input: 'Supply a project, HTTP(S) repository URLs and named authentication environment variables.',
14
+ repository_match: 'Exactly one repository entry must match the old repository URL.',
15
+ input_unreadable: 'Could not read valid Composer project or historic lock files.',
16
+ local_failed: 'Could not prepare, read or remove temporary Composer files.',
17
+ };
18
+ class CutoverError extends Error {
19
+ code;
20
+ constructor(code) {
21
+ super(MESSAGES[code]);
22
+ this.code = code;
23
+ }
24
+ }
25
+ const defaultComposer = (args, options) => new Promise((resolve) => {
26
+ const { signal, timeout = 1_800_000, ...executionOptions } = options;
27
+ const child = spawn('composer', [...args], {
28
+ ...executionOptions,
29
+ detached: process.platform !== 'win32',
30
+ stdio: ['ignore', 'pipe', 'pipe'],
31
+ });
32
+ let errorCode;
33
+ let timedOut = false;
34
+ let terminated = false;
35
+ const terminate = () => {
36
+ if (terminated)
37
+ return;
38
+ terminated = true;
39
+ if (process.platform !== 'win32' && child.pid) {
40
+ try {
41
+ process.kill(-child.pid, 'SIGKILL');
42
+ }
43
+ catch (error) {
44
+ if (!object(error) || error.code !== 'ESRCH')
45
+ child.kill('SIGKILL');
46
+ }
47
+ }
48
+ else
49
+ child.kill('SIGKILL');
50
+ };
51
+ const timer = setTimeout(() => {
52
+ timedOut = true;
53
+ terminate();
54
+ }, timeout);
55
+ const output = () => {
56
+ const chunks = [];
57
+ let size = 0;
58
+ return {
59
+ append: (chunk) => {
60
+ if (terminated)
61
+ return;
62
+ size += chunk.length;
63
+ if (size > 64 * 1024 * 1024) {
64
+ errorCode = 'ERR_CHILD_PROCESS_STDIO_MAXBUFFER';
65
+ terminate();
66
+ }
67
+ else
68
+ chunks.push(chunk);
69
+ },
70
+ text: () => Buffer.concat(chunks).toString('utf8'),
71
+ };
72
+ };
73
+ const stdout = output();
74
+ const stderr = output();
75
+ child.stdout.on('data', stdout.append);
76
+ child.stderr.on('data', stderr.append);
77
+ child.on('error', (error) => {
78
+ errorCode = error.code;
79
+ });
80
+ signal?.addEventListener('abort', terminate, { once: true });
81
+ if (signal?.aborted)
82
+ terminate();
83
+ // Close follows process exit and drained streams, before temporary-file cleanup.
84
+ child.once('close', (code, exitSignal) => {
85
+ clearTimeout(timer);
86
+ signal?.removeEventListener('abort', terminate);
87
+ resolve({
88
+ exitCode: errorCode || timedOut ? null : code,
89
+ ...(timedOut ? { errorCode: 'ETIMEDOUT' } : errorCode ? { errorCode } : {}),
90
+ ...(exitSignal ? { signal: exitSignal } : {}),
91
+ stdout: stdout.text(),
92
+ stderr: stderr.text(),
93
+ });
94
+ });
95
+ });
96
+ const object = (value) => typeof value === 'object' && value !== null && !Array.isArray(value);
97
+ function repositoryHost(value) {
98
+ const url = new URL(value);
99
+ if (!['http:', 'https:'].includes(url.protocol) || url.username || url.password)
100
+ throw new CutoverError('invalid_input');
101
+ return url.hostname;
102
+ }
103
+ function auth(name) {
104
+ if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(name))
105
+ throw new CutoverError('invalid_input');
106
+ const value = process.env[name];
107
+ if (value === undefined || !object(JSON.parse(value)))
108
+ throw new CutoverError('invalid_input');
109
+ return value;
110
+ }
111
+ // Walk validated JSON tokens to replace only the matching URL's original byte span.
112
+ function rewriteRepository(text, oldUrl, newUrl) {
113
+ const json = JSON.parse(text.replace(/^\uFEFF/, ''));
114
+ if (!object(json))
115
+ throw new CutoverError('input_unreadable');
116
+ let cursor = 0;
117
+ const matches = [];
118
+ const whitespace = () => {
119
+ while (/\s/.test(text[cursor] ?? '') && cursor < text.length)
120
+ cursor++;
121
+ };
122
+ const string = () => {
123
+ const start = cursor++;
124
+ while (cursor < text.length) {
125
+ const char = text[cursor++];
126
+ if (char === '\\')
127
+ cursor++;
128
+ else if (char === '"')
129
+ break;
130
+ }
131
+ return { value: JSON.parse(text.slice(start, cursor)), start, end: cursor };
132
+ };
133
+ const walk = (path) => {
134
+ whitespace();
135
+ const char = text[cursor];
136
+ if (char === '"') {
137
+ const token = string();
138
+ if (path.length === 3 && path[0] === 'repositories' && path[2] === 'url') {
139
+ if (token.value === oldUrl)
140
+ matches.push(token);
141
+ }
142
+ }
143
+ else if (char === '{' || char === '[') {
144
+ cursor++;
145
+ whitespace();
146
+ const end = char === '{' ? '}' : ']';
147
+ const keys = new Set();
148
+ let index = 0;
149
+ while (text[cursor] !== end) {
150
+ whitespace();
151
+ const key = char === '{' ? string().value : String(index++);
152
+ if (keys.has(key))
153
+ throw new CutoverError('input_unreadable');
154
+ keys.add(key);
155
+ if (char === '{') {
156
+ whitespace();
157
+ cursor++;
158
+ }
159
+ walk([...path, key]);
160
+ whitespace();
161
+ if (text[cursor] !== ',')
162
+ break;
163
+ cursor++;
164
+ }
165
+ cursor++;
166
+ }
167
+ else {
168
+ while (cursor < text.length && !/[\s,\]}]/.test(text[cursor]))
169
+ cursor++;
170
+ }
171
+ };
172
+ walk([]);
173
+ if (matches.length !== 1)
174
+ throw new CutoverError('repository_match');
175
+ const match = matches[0];
176
+ return text.slice(0, match.start) + JSON.stringify(newUrl) + text.slice(match.end);
177
+ }
178
+ function packages(text) {
179
+ const lock = JSON.parse(text);
180
+ if (!object(lock) || !Array.isArray(lock.packages))
181
+ throw new Error();
182
+ const result = [];
183
+ for (const group of [lock.packages, lock['packages-dev'] ?? []]) {
184
+ if (!Array.isArray(group))
185
+ throw new Error();
186
+ for (const pkg of group) {
187
+ if (!object(pkg) ||
188
+ typeof pkg.name !== 'string' ||
189
+ !/^[a-z0-9_.-]+\/[a-z0-9_.-]+$/.test(pkg.name) ||
190
+ typeof pkg.version !== 'string')
191
+ throw new Error();
192
+ const reference = (value) => {
193
+ if (value === undefined || value === null)
194
+ return null;
195
+ if (!object(value))
196
+ throw new Error();
197
+ const ref = value.reference ?? null;
198
+ if (ref !== null && typeof ref !== 'string')
199
+ throw new Error();
200
+ return ref;
201
+ };
202
+ if (pkg.dist !== undefined && pkg.dist !== null && !object(pkg.dist))
203
+ throw new Error();
204
+ const distUrl = object(pkg.dist) ? (pkg.dist.url ?? undefined) : undefined;
205
+ if (distUrl !== undefined && typeof distUrl !== 'string')
206
+ throw new Error();
207
+ const sourceReference = reference(pkg.source);
208
+ const distReference = reference(pkg.dist);
209
+ result.push({
210
+ name: pkg.name,
211
+ identity: JSON.stringify([pkg.name, pkg.version]),
212
+ sourceReference,
213
+ distReference,
214
+ distUrl,
215
+ });
216
+ }
217
+ }
218
+ return result;
219
+ }
220
+ const names = (values) => [...new Set(values.map((p) => p.name))].sort();
221
+ function oldHostPackages(values, repository, sameHost) {
222
+ return names(values.filter((pkg) => {
223
+ if (pkg.distUrl === undefined)
224
+ return false;
225
+ try {
226
+ const url = new URL(pkg.distUrl);
227
+ return (url.hostname === repository.hostname &&
228
+ (!sameHost || url.pathname.split('/')[1] === repository.pathname.split('/')[1]));
229
+ }
230
+ catch {
231
+ return false;
232
+ }
233
+ }));
234
+ }
235
+ function missingPackages(output, locked) {
236
+ const lines = `${output.stdout}\n${output.stderr}`.split(/\r?\n/);
237
+ return names(locked).filter((name) => {
238
+ const escaped = name.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
239
+ const mentions = new RegExp(`(?:^|[^a-z0-9_.-])${escaped}(?=$|[^a-z0-9_.-]|[.](?:$|[^a-z0-9_.-]))`, 'i');
240
+ let missing = false;
241
+ for (const line of lines) {
242
+ if (!mentions.test(line))
243
+ continue;
244
+ if (/could not be found|cannot be found|not (?:found|available)|\b(?:404|410)\b|no matching package|could not find a matching version|does not match the constraint/i.test(line))
245
+ missing = true;
246
+ else if (/\b(?:Installing|Updating)\b.*(?:Cloning|Checking out|Extracting archive)|\bInstalled\b/i.test(line))
247
+ missing = false;
248
+ }
249
+ return missing;
250
+ });
251
+ }
252
+ export async function runCutoverCheck(options) {
253
+ const directories = [];
254
+ let result = {
255
+ exitCode: 2,
256
+ code: 'local_failed',
257
+ message: MESSAGES.local_failed,
258
+ counts: { old: 0, new: 0 },
259
+ differences: [],
260
+ distOnly: [],
261
+ oldHostPackages: [],
262
+ historic: [],
263
+ diagnostics: [],
264
+ };
265
+ const outcome = (code, exitCode) => {
266
+ result = { ...result, code, message: MESSAGES[code], exitCode };
267
+ };
268
+ const controller = new AbortController();
269
+ let activeChild;
270
+ let interrupted = false;
271
+ let preparation;
272
+ let cleanup;
273
+ let signalCleanup;
274
+ const ensureRunning = () => {
275
+ if (interrupted)
276
+ throw new CutoverError('local_failed');
277
+ };
278
+ const removeDirectories = () => (cleanup ??= (async () => {
279
+ for (const directory of directories) {
280
+ try {
281
+ await rm(directory, { recursive: true, force: true });
282
+ }
283
+ catch {
284
+ outcome('local_failed', 2);
285
+ }
286
+ }
287
+ })());
288
+ const signals = ['SIGINT', 'SIGTERM'];
289
+ const removeHandlers = () => {
290
+ for (const signal of signals)
291
+ process.off(signal, onSignal);
292
+ };
293
+ const onSignal = (signal) => {
294
+ if (interrupted)
295
+ return;
296
+ interrupted = true;
297
+ controller.abort();
298
+ signalCleanup = (async () => {
299
+ // A pending mkdtemp must finish registering its directory before cleanup.
300
+ await preparation?.catch(() => undefined);
301
+ await activeChild?.catch(() => undefined);
302
+ await removeDirectories();
303
+ removeHandlers();
304
+ process.kill(process.pid, signal);
305
+ })();
306
+ };
307
+ for (const signal of signals)
308
+ process.on(signal, onSignal);
309
+ try {
310
+ let oldRepository;
311
+ let sameHost;
312
+ let oldAuth;
313
+ let newAuth;
314
+ try {
315
+ if (!options.projectDir ||
316
+ options.oldRepository === options.newRepository ||
317
+ !Number.isInteger(options.timeoutSeconds ?? 1800) ||
318
+ (options.timeoutSeconds ?? 1800) < 1 ||
319
+ (options.timeoutSeconds ?? 1800) > 7200)
320
+ throw new Error();
321
+ const oldHost = repositoryHost(options.oldRepository);
322
+ sameHost = oldHost === repositoryHost(options.newRepository);
323
+ oldRepository = new URL(options.oldRepository);
324
+ if (sameHost) {
325
+ const oldOrganization = oldRepository.pathname.split('/')[1];
326
+ const newOrganization = new URL(options.newRepository).pathname.split('/')[1];
327
+ if (!oldOrganization || !newOrganization || oldOrganization === newOrganization)
328
+ throw new Error();
329
+ }
330
+ oldAuth = auth(options.oldAuthEnv);
331
+ newAuth = auth(options.newAuthEnv);
332
+ }
333
+ catch {
334
+ throw new CutoverError('invalid_input');
335
+ }
336
+ let original;
337
+ let rewritten;
338
+ let lock;
339
+ let historic;
340
+ try {
341
+ const project = await readFile(join(options.projectDir, 'composer.json'));
342
+ original = new TextDecoder('utf-8', { fatal: true, ignoreBOM: true }).decode(project);
343
+ rewritten = rewriteRepository(original, options.oldRepository, options.newRepository);
344
+ lock = await readFile(join(options.projectDir, 'composer.lock'));
345
+ packages(lock.toString('utf8'));
346
+ historic = [];
347
+ for (const path of options.historicLocks ?? []) {
348
+ const bytes = await readFile(path);
349
+ packages(bytes.toString('utf8'));
350
+ historic.push(bytes);
351
+ }
352
+ }
353
+ catch (error) {
354
+ throw error instanceof CutoverError ? error : new CutoverError('input_unreadable');
355
+ }
356
+ const composer = options.composer ?? defaultComposer;
357
+ const prepare = (json, bytes, credentials) => (preparation = (async () => {
358
+ ensureRunning();
359
+ const cwd = await mkdtemp(join(tmpdir(), 'pb-cutover-'));
360
+ directories.push(cwd);
361
+ if (((await stat(cwd)).mode & 0o777) !== 0o700)
362
+ throw new CutoverError('local_failed');
363
+ const home = join(cwd, '.composer-home');
364
+ await mkdir(home);
365
+ await writeFile(join(cwd, 'composer.json'), json);
366
+ await writeFile(join(cwd, 'composer.lock'), bytes);
367
+ const env = {};
368
+ for (const key of ['PATH', 'SystemRoot', 'WINDIR', 'TEMP', 'TMP']) {
369
+ if (process.env[key] !== undefined)
370
+ env[key] = process.env[key];
371
+ }
372
+ Object.assign(env, {
373
+ HOME: cwd,
374
+ USERPROFILE: cwd,
375
+ COMPOSER_HOME: home,
376
+ COMPOSER_CACHE_DIR: join(cwd, '.composer-cache'),
377
+ COMPOSER_VENDOR_DIR: join(cwd, 'vendor'),
378
+ COMPOSER_BIN_DIR: join(cwd, 'vendor', 'bin'),
379
+ COMPOSER_AUTH: credentials,
380
+ COMPOSER_NO_INTERACTION: '1',
381
+ });
382
+ ensureRunning();
383
+ return {
384
+ cwd,
385
+ env,
386
+ shell: false,
387
+ signal: controller.signal,
388
+ timeout: (options.timeoutSeconds ?? 1800) * 1000,
389
+ };
390
+ })());
391
+ const oldCopy = await prepare(original, lock, oldAuth);
392
+ const newCopy = await prepare(rewritten, lock, newAuth);
393
+ const execute = async (copy, args) => {
394
+ ensureRunning();
395
+ let execution;
396
+ try {
397
+ const pending = composer(args, copy);
398
+ if (!options.composer)
399
+ activeChild = pending;
400
+ execution = await pending;
401
+ }
402
+ catch (error) {
403
+ execution = {
404
+ exitCode: object(error) && typeof error.code === 'number' ? error.code : null,
405
+ stdout: '',
406
+ stderr: '',
407
+ ...(object(error) && typeof error.code === 'string' ? { errorCode: error.code } : {}),
408
+ };
409
+ }
410
+ finally {
411
+ activeChild = undefined;
412
+ }
413
+ if (execution.exitCode !== 0) {
414
+ const errorCode = [
415
+ 'ENOENT',
416
+ 'EACCES',
417
+ 'ETIMEDOUT',
418
+ 'ERR_CHILD_PROCESS_STDIO_MAXBUFFER',
419
+ 'ABORT_ERR',
420
+ ].includes(execution.errorCode ?? '')
421
+ ? execution.errorCode
422
+ : undefined;
423
+ const signal = [
424
+ 'SIGINT',
425
+ 'SIGTERM',
426
+ 'SIGKILL',
427
+ 'SIGABRT',
428
+ 'SIGSEGV',
429
+ 'SIGHUP',
430
+ 'SIGQUIT',
431
+ ].includes(execution.signal ?? '')
432
+ ? execution.signal
433
+ : undefined;
434
+ result = {
435
+ ...result,
436
+ diagnostics: [
437
+ ...result.diagnostics,
438
+ {
439
+ step: args[0] === '--version' ? 'version' : args[0],
440
+ exitCode: Number.isInteger(execution.exitCode) ? execution.exitCode : null,
441
+ ...(errorCode ? { errorCode } : {}),
442
+ ...(signal ? { signal } : {}),
443
+ },
444
+ ],
445
+ };
446
+ }
447
+ ensureRunning();
448
+ return execution;
449
+ };
450
+ const version = await execute(oldCopy, ['--version']);
451
+ if (version.exitCode !== 0 || !/^Composer(?: version)? 2\./m.test(version.stdout))
452
+ throw new CutoverError('composer_v2_required');
453
+ const update = ['update', '--lock', '--no-scripts', '--no-plugins'];
454
+ const install = ['install', '--no-scripts', '--no-plugins', '--no-autoloader'];
455
+ if ((await execute(oldCopy, update)).exitCode !== 0)
456
+ throw new CutoverError('update_failed');
457
+ if ((await execute(oldCopy, install)).exitCode !== 0)
458
+ throw new CutoverError('install_failed');
459
+ if ((await execute(newCopy, update)).exitCode !== 0)
460
+ throw new CutoverError('update_failed');
461
+ const oldPackages = packages(await readFile(join(oldCopy.cwd, 'composer.lock'), 'utf8'));
462
+ const newPackages = packages(await readFile(join(newCopy.cwd, 'composer.lock'), 'utf8'));
463
+ const oldByIdentity = new Map(oldPackages.map((pkg) => [pkg.identity, pkg]));
464
+ const newByIdentity = new Map(newPackages.map((pkg) => [pkg.identity, pkg]));
465
+ const resolutionKey = (pkg, peers) => {
466
+ const peer = peers.get(pkg.identity);
467
+ const useSource = pkg.sourceReference !== null && peer?.sourceReference != null;
468
+ return JSON.stringify([pkg.identity, useSource ? pkg.sourceReference : pkg.distReference]);
469
+ };
470
+ const oldSet = new Set(oldPackages.map((pkg) => resolutionKey(pkg, newByIdentity)));
471
+ const newSet = new Set(newPackages.map((pkg) => resolutionKey(pkg, oldByIdentity)));
472
+ const differences = names([
473
+ ...oldPackages.filter((pkg) => !newSet.has(resolutionKey(pkg, newByIdentity))),
474
+ ...newPackages.filter((pkg) => !oldSet.has(resolutionKey(pkg, oldByIdentity))),
475
+ ]);
476
+ const distOnly = names(oldPackages.filter((pkg) => {
477
+ const peer = newByIdentity.get(pkg.identity);
478
+ return (pkg.sourceReference !== null &&
479
+ peer?.sourceReference === pkg.sourceReference &&
480
+ peer.distReference !== pkg.distReference);
481
+ }));
482
+ const oldHosts = oldHostPackages(newPackages, oldRepository, sameHost);
483
+ result = {
484
+ ...result,
485
+ counts: { old: oldSet.size, new: newSet.size },
486
+ differences,
487
+ distOnly,
488
+ oldHostPackages: oldHosts,
489
+ };
490
+ const installed = await execute(newCopy, install);
491
+ if (installed.exitCode !== 0) {
492
+ if (oldHosts.length > 0)
493
+ throw new CutoverError('old_dist_host');
494
+ if (differences.length > 0)
495
+ throw new CutoverError('resolution_difference');
496
+ throw new CutoverError('install_failed');
497
+ }
498
+ const checks = [];
499
+ for (const [index, bytes] of historic.entries()) {
500
+ const copy = await prepare(rewritten, bytes, newAuth);
501
+ let execution = await execute(copy, update);
502
+ const oldHosts = execution.exitCode === 0
503
+ ? oldHostPackages(packages(await readFile(join(copy.cwd, 'composer.lock'), 'utf8')), oldRepository, sameHost)
504
+ : [];
505
+ if (execution.exitCode === 0)
506
+ execution = await execute(copy, install);
507
+ checks.push({
508
+ index: index + 1,
509
+ ok: execution.exitCode === 0 && oldHosts.length === 0,
510
+ missingPackages: execution.exitCode === 0
511
+ ? []
512
+ : missingPackages(execution, packages(bytes.toString('utf8'))),
513
+ });
514
+ result = {
515
+ ...result,
516
+ oldHostPackages: [...new Set([...result.oldHostPackages, ...oldHosts])].sort(),
517
+ historic: [...checks],
518
+ };
519
+ }
520
+ if (result.oldHostPackages.length > 0)
521
+ outcome('old_dist_host', 1);
522
+ else if (differences.length > 0)
523
+ outcome('resolution_difference', 1);
524
+ else if (checks.some((check) => !check.ok))
525
+ outcome('historic_failed', 1);
526
+ else
527
+ outcome('passed', 0);
528
+ }
529
+ catch (error) {
530
+ const code = error instanceof CutoverError ? error.code : 'local_failed';
531
+ outcome(code, ['update_failed', 'install_failed', 'old_dist_host', 'resolution_difference'].includes(code)
532
+ ? 1
533
+ : 2);
534
+ }
535
+ finally {
536
+ await signalCleanup;
537
+ await removeDirectories();
538
+ removeHandlers();
539
+ if (interrupted)
540
+ outcome('local_failed', 2);
541
+ }
542
+ return result;
543
+ }
544
+ //# sourceMappingURL=cutover.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cutover.js","sourceRoot":"","sources":["../../src/import/cutover.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ export declare const MAX_PAGE_BYTES: number;
2
+ export declare const MAX_PAGES = 10000;
3
+ export declare const MAX_OBJECTS = 200000;
4
+ declare const ERROR_TEXT: {
5
+ readonly get_only: "Private Packagist requests must use GET.";
6
+ readonly invalid_url: "Private Packagist request URL refused.";
7
+ readonly invalid_response: "Invalid Private Packagist response.";
8
+ readonly snapshot_limit_exceeded: "Private Packagist snapshot limit exceeded.";
9
+ readonly clock_skew: "Check the local clock before retrying Private Packagist.";
10
+ readonly packagist_auth: "Private Packagist authentication failed.";
11
+ readonly packagist_signature: "Private Packagist signature failed.";
12
+ readonly packagist_request: "Private Packagist request failed.";
13
+ readonly redirect_refused: "Private Packagist redirect refused.";
14
+ readonly org_mismatch: "Private Packagist organization does not match.";
15
+ readonly org_unverified: "Private Packagist organization could not be verified.";
16
+ readonly invalid_input: "Invalid Private Packagist fetch options.";
17
+ readonly credential_file: "Credential files must be owned by the current user, regular, with mode 0600 or stricter.";
18
+ readonly ambiguous_credentials: "Choose either a credential file flag or its environment variable.";
19
+ readonly output_exists: "Snapshot output already exists.";
20
+ readonly output_unwritable: "Snapshot output could not be written.";
21
+ };
22
+ export declare class PackagistError extends Error {
23
+ readonly code: keyof typeof ERROR_TEXT;
24
+ constructor(code: keyof typeof ERROR_TEXT);
25
+ }
26
+ export interface ApiOptions {
27
+ readonly key: string;
28
+ readonly secret: string;
29
+ readonly fetch?: typeof globalThis.fetch;
30
+ readonly now?: () => number;
31
+ readonly sleep?: (ms: number) => Promise<void>;
32
+ readonly random?: () => number;
33
+ readonly limits?: {
34
+ readonly pages?: number;
35
+ readonly objects?: number;
36
+ readonly bytes?: number;
37
+ };
38
+ }
39
+ export declare class PackagistApi {
40
+ private readonly options;
41
+ private active;
42
+ private readonly waiters;
43
+ private readonly fetcher;
44
+ private readonly now;
45
+ private readonly sleep;
46
+ constructor(options: ApiOptions);
47
+ assertNoCredentials(value: unknown): void;
48
+ private slot;
49
+ private body;
50
+ request(path: string, method?: string): Promise<{
51
+ data: unknown;
52
+ next: string | null;
53
+ }>;
54
+ list(path: string): Promise<unknown[]>;
55
+ }
56
+ export {};
57
+ //# sourceMappingURL=api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../../src/import/private-packagist/api.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,cAAc,QAAkB,CAAC;AAC9C,eAAO,MAAM,SAAS,QAAS,CAAC;AAChC,eAAO,MAAM,WAAW,SAAU,CAAC;AACnC,QAAA,MAAM,UAAU;;;;;;;;;;;;;;;;;CAkBN,CAAC;AAEX,qBAAa,cAAe,SAAQ,KAAK;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,OAAO,UAAU;gBAA7B,IAAI,EAAE,MAAM,OAAO,UAAU;CAInD;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;IACzC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/C,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,MAAM,CAAC;IAC/B,QAAQ,CAAC,MAAM,CAAC,EAAE;QAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACnG;AAiED,qBAAa,YAAY;IAOX,OAAO,CAAC,QAAQ,CAAC,OAAO;IANpC,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAsB;IAC9C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA0B;IAClD,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAe;IACnC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAgC;gBAEzB,OAAO,EAAE,UAAU;IAahD,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;YAM3B,IAAI;YAYJ,IAAI;IAyBZ,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,SAAQ,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,OAAO,CAAC;QAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;IAsEtF,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;CAqB7C"}