@quenty/nevermore-cli 4.50.0 → 4.51.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 (90) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/commands/batch-command/batch-bundle-command.d.ts +12 -0
  3. package/dist/commands/batch-command/batch-bundle-command.d.ts.map +1 -0
  4. package/dist/commands/batch-command/batch-bundle-command.js +96 -0
  5. package/dist/commands/batch-command/batch-bundle-command.js.map +1 -0
  6. package/dist/commands/batch-command/batch-test-command.d.ts +1 -0
  7. package/dist/commands/batch-command/batch-test-command.d.ts.map +1 -1
  8. package/dist/commands/batch-command/batch-test-command.js +103 -15
  9. package/dist/commands/batch-command/batch-test-command.js.map +1 -1
  10. package/dist/commands/batch-command/index.d.ts.map +1 -1
  11. package/dist/commands/batch-command/index.js +2 -0
  12. package/dist/commands/batch-command/index.js.map +1 -1
  13. package/dist/commands/tools-command/ci-post-test-results.d.ts +1 -0
  14. package/dist/commands/tools-command/ci-post-test-results.d.ts.map +1 -1
  15. package/dist/commands/tools-command/ci-post-test-results.js +13 -4
  16. package/dist/commands/tools-command/ci-post-test-results.js.map +1 -1
  17. package/dist/utils/batch/changed-packages-utils.d.ts +8 -0
  18. package/dist/utils/batch/changed-packages-utils.d.ts.map +1 -1
  19. package/dist/utils/batch/changed-packages-utils.js +9 -11
  20. package/dist/utils/batch/changed-packages-utils.js.map +1 -1
  21. package/dist/utils/job-context/batch-script-job-context.d.ts +12 -0
  22. package/dist/utils/job-context/batch-script-job-context.d.ts.map +1 -1
  23. package/dist/utils/job-context/batch-script-job-context.js +19 -0
  24. package/dist/utils/job-context/batch-script-job-context.js.map +1 -1
  25. package/dist/utils/sourcemap/sourcemap-loader.d.ts +3 -3
  26. package/dist/utils/sourcemap/sourcemap-loader.d.ts.map +1 -1
  27. package/dist/utils/sourcemap/sourcemap-loader.js +6 -7
  28. package/dist/utils/sourcemap/sourcemap-loader.js.map +1 -1
  29. package/dist/utils/testing/batch-run.e2e.test.js +36 -0
  30. package/dist/utils/testing/batch-run.e2e.test.js.map +1 -1
  31. package/dist/utils/testing/parsers/annotation-workspace.d.ts +17 -0
  32. package/dist/utils/testing/parsers/annotation-workspace.d.ts.map +1 -0
  33. package/dist/utils/testing/parsers/annotation-workspace.js +47 -0
  34. package/dist/utils/testing/parsers/annotation-workspace.js.map +1 -0
  35. package/dist/utils/testing/parsers/index.d.ts +0 -1
  36. package/dist/utils/testing/parsers/index.d.ts.map +1 -1
  37. package/dist/utils/testing/parsers/index.js +0 -1
  38. package/dist/utils/testing/parsers/index.js.map +1 -1
  39. package/dist/utils/testing/parsers/jest-lua-parser.d.ts +14 -29
  40. package/dist/utils/testing/parsers/jest-lua-parser.d.ts.map +1 -1
  41. package/dist/utils/testing/parsers/jest-lua-parser.js +85 -100
  42. package/dist/utils/testing/parsers/jest-lua-parser.js.map +1 -1
  43. package/dist/utils/testing/parsers/jest-lua-parser.test.js +359 -56
  44. package/dist/utils/testing/parsers/jest-lua-parser.test.js.map +1 -1
  45. package/dist/utils/testing/parsers/roblox-path-resolver.d.ts +23 -17
  46. package/dist/utils/testing/parsers/roblox-path-resolver.d.ts.map +1 -1
  47. package/dist/utils/testing/parsers/roblox-path-resolver.js +89 -54
  48. package/dist/utils/testing/parsers/roblox-path-resolver.js.map +1 -1
  49. package/dist/utils/testing/parsers/roblox-path-resolver.test.js +76 -36
  50. package/dist/utils/testing/parsers/roblox-path-resolver.test.js.map +1 -1
  51. package/dist/utils/testing/runner/combined-project-generator.d.ts.map +1 -1
  52. package/dist/utils/testing/runner/combined-project-generator.js +5 -6
  53. package/dist/utils/testing/runner/combined-project-generator.js.map +1 -1
  54. package/dist/utils/testing/runner/prebuilt-batch-bundle.d.ts +26 -0
  55. package/dist/utils/testing/runner/prebuilt-batch-bundle.d.ts.map +1 -0
  56. package/dist/utils/testing/runner/prebuilt-batch-bundle.js +200 -0
  57. package/dist/utils/testing/runner/prebuilt-batch-bundle.js.map +1 -0
  58. package/dist/utils/testing/runner/prebuilt-batch-bundle.test.d.ts +2 -0
  59. package/dist/utils/testing/runner/prebuilt-batch-bundle.test.d.ts.map +1 -0
  60. package/dist/utils/testing/runner/prebuilt-batch-bundle.test.js +181 -0
  61. package/dist/utils/testing/runner/prebuilt-batch-bundle.test.js.map +1 -0
  62. package/dist/utils/testing/runner/test-project-slug.d.ts +11 -0
  63. package/dist/utils/testing/runner/test-project-slug.d.ts.map +1 -0
  64. package/dist/utils/testing/runner/test-project-slug.js +11 -0
  65. package/dist/utils/testing/runner/test-project-slug.js.map +1 -0
  66. package/dist/utils/testing/runner/test-runner.d.ts +8 -1
  67. package/dist/utils/testing/runner/test-runner.d.ts.map +1 -1
  68. package/dist/utils/testing/runner/test-runner.js +19 -6
  69. package/dist/utils/testing/runner/test-runner.js.map +1 -1
  70. package/package.json +7 -6
  71. package/src/commands/batch-command/batch-bundle-command.ts +140 -0
  72. package/src/commands/batch-command/batch-test-command.ts +156 -16
  73. package/src/commands/batch-command/index.ts +2 -0
  74. package/src/commands/tools-command/ci-post-test-results.ts +18 -3
  75. package/src/utils/batch/changed-packages-utils.ts +21 -12
  76. package/src/utils/job-context/batch-script-job-context.ts +34 -3
  77. package/src/utils/sourcemap/sourcemap-loader.ts +7 -9
  78. package/src/utils/testing/batch-run.e2e.test.ts +42 -0
  79. package/src/utils/testing/parsers/annotation-workspace.ts +74 -0
  80. package/src/utils/testing/parsers/index.ts +0 -1
  81. package/src/utils/testing/parsers/jest-lua-parser.test.ts +433 -65
  82. package/src/utils/testing/parsers/jest-lua-parser.ts +131 -109
  83. package/src/utils/testing/parsers/roblox-path-resolver.test.ts +144 -61
  84. package/src/utils/testing/parsers/roblox-path-resolver.ts +117 -56
  85. package/src/utils/testing/runner/combined-project-generator.ts +9 -13
  86. package/src/utils/testing/runner/prebuilt-batch-bundle.test.ts +252 -0
  87. package/src/utils/testing/runner/prebuilt-batch-bundle.ts +267 -0
  88. package/src/utils/testing/runner/test-project-slug.ts +18 -0
  89. package/src/utils/testing/runner/test-runner.ts +43 -13
  90. package/tsconfig.tsbuildinfo +1 -1
@@ -0,0 +1,200 @@
1
+ import * as fs from 'fs/promises';
2
+ import { createReadStream, createWriteStream } from 'fs';
3
+ import * as path from 'path';
4
+ import * as tar from 'tar';
5
+ import { BuildContext } from '@quenty/nevermore-template-helpers';
6
+ import { PLACE_UPLOAD_MAX_BYTES } from '../../open-cloud/open-cloud-client.js';
7
+ /** Suggested file suffix, following `deploy.nevermore.json`. */
8
+ export const BUNDLE_FILE_SUFFIX = '.nevermore.tests.tar';
9
+ const MANIFEST_FILE_NAME = 'manifest.json';
10
+ const FORMAT_VERSION = 1;
11
+ const MAX_CHUNKS = 32;
12
+ const MAX_PACKAGES = 1000;
13
+ const MAX_MANIFEST_BYTES = 1024 * 1024;
14
+ const CHUNK_FILE_PATTERN = /^place-\d{1,3}\.rbxl$/;
15
+ // Names reach the bot's PR comment, so a fork's bundle gets no Markdown links,
16
+ // images, URLs, tables or @mentions: only a leading scope `@`, and plain text
17
+ // for a multi-place target's place name ("pkg - Hub (Test)").
18
+ const PACKAGE_NAME_PATTERN = /^@?[\p{L}\p{N} /()+.,'_~-]{1,200}$/u;
19
+ const SLUG_PATTERN = /^[A-Za-z0-9_.-]{1,100}$/;
20
+ export async function writePrebuiltBatchBundleAsync(file, chunks, hasJestConfig) {
21
+ const stage = await BuildContext.createAsync({ prefix: 'test-bundle-' });
22
+ const stageDir = stage.buildDir;
23
+ try {
24
+ const manifest = {
25
+ formatVersion: FORMAT_VERSION,
26
+ chunks: [],
27
+ };
28
+ for (const [index, chunk] of chunks.entries()) {
29
+ const placeFile = `place-${index + 1}.rbxl`;
30
+ await fs.copyFile(chunk.rbxlPath, path.join(stageDir, placeFile));
31
+ manifest.chunks.push({
32
+ file: placeFile,
33
+ packages: [...chunk.slugMap].map(([name, slug]) => ({
34
+ name,
35
+ slug,
36
+ hasJestConfig: hasJestConfig.get(name) ?? false,
37
+ })),
38
+ });
39
+ }
40
+ await fs.writeFile(path.join(stageDir, MANIFEST_FILE_NAME), JSON.stringify(manifest, null, 2));
41
+ await fs.mkdir(path.dirname(path.resolve(file)), { recursive: true });
42
+ await tar.c({ file, cwd: stageDir, portable: true }, [
43
+ MANIFEST_FILE_NAME,
44
+ ...manifest.chunks.map((c) => c.file),
45
+ ]);
46
+ }
47
+ finally {
48
+ await stage.cleanupAsync();
49
+ }
50
+ }
51
+ /**
52
+ * Read a bundle file. It is untrusted: entries are read from the archive, never
53
+ * extracted by it, and only `manifest.json` and `place-N.rbxl` regular files
54
+ * are accepted.
55
+ */
56
+ export async function readPrebuiltBatchBundleAsync(file) {
57
+ let stat;
58
+ try {
59
+ stat = await fs.lstat(file);
60
+ }
61
+ catch {
62
+ throw new Error(`Bundle file not found: ${file}`);
63
+ }
64
+ if (!stat.isFile()) {
65
+ throw new Error(`Bundle ${file} is not a regular file`);
66
+ }
67
+ const buildContext = await BuildContext.createAsync({
68
+ prefix: 'test-bundle-',
69
+ });
70
+ const dir = buildContext.buildDir;
71
+ try {
72
+ const { manifestText, placeSizes } = await _unpackAsync(file, dir);
73
+ return { ..._parseManifest(manifestText, dir, placeSizes), buildContext };
74
+ }
75
+ catch (err) {
76
+ await buildContext.cleanupAsync();
77
+ throw err;
78
+ }
79
+ }
80
+ async function _unpackAsync(file, dir) {
81
+ let manifestText;
82
+ const placeSizes = new Map();
83
+ const writes = [];
84
+ let failure;
85
+ const parser = new tar.Parser({
86
+ strict: true,
87
+ onReadEntry: (entry) => {
88
+ const name = entry.path;
89
+ const reject = (message) => {
90
+ failure ??= new Error(message);
91
+ entry.resume();
92
+ };
93
+ if (entry.type !== 'File' && entry.type !== 'OldFile') {
94
+ return reject(`Bundle entry ${name} is not a regular file`);
95
+ }
96
+ if (name === MANIFEST_FILE_NAME) {
97
+ if (manifestText !== undefined || entry.size > MAX_MANIFEST_BYTES) {
98
+ return reject('Bundle has more than one manifest, or one too large');
99
+ }
100
+ const parts = [];
101
+ entry.on('data', (part) => parts.push(part));
102
+ entry.on('end', () => {
103
+ manifestText = Buffer.concat(parts).toString('utf-8');
104
+ });
105
+ return;
106
+ }
107
+ if (!CHUNK_FILE_PATTERN.test(name) || placeSizes.has(name)) {
108
+ return reject(`Bundle has an unexpected entry: ${name}`);
109
+ }
110
+ if (placeSizes.size >= MAX_CHUNKS) {
111
+ return reject(`Bundle must hold at most ${MAX_CHUNKS} places`);
112
+ }
113
+ if (entry.size > PLACE_UPLOAD_MAX_BYTES) {
114
+ return reject(`${name} is over the place upload limit`);
115
+ }
116
+ placeSizes.set(name, entry.size);
117
+ writes.push(new Promise((resolve, rejectWrite) => {
118
+ const out = createWriteStream(path.join(dir, name));
119
+ out.on('finish', () => resolve());
120
+ out.on('error', rejectWrite);
121
+ entry.on('error', rejectWrite);
122
+ entry.pipe(out);
123
+ }));
124
+ },
125
+ });
126
+ await new Promise((resolve, rejectRead) => {
127
+ const input = createReadStream(file);
128
+ input.on('error', rejectRead);
129
+ parser.on('error', (err) => rejectRead(new Error(`Bundle is not a valid tar file: ${err.message}`)));
130
+ parser.on('end', () => resolve());
131
+ input.pipe(parser);
132
+ });
133
+ await Promise.all(writes);
134
+ if (failure) {
135
+ throw failure;
136
+ }
137
+ if (manifestText === undefined) {
138
+ throw new Error(`Bundle is missing ${MANIFEST_FILE_NAME}`);
139
+ }
140
+ return { manifestText, placeSizes };
141
+ }
142
+ function _parseManifest(manifestText, dir, placeSizes) {
143
+ let parsed;
144
+ try {
145
+ parsed = JSON.parse(manifestText);
146
+ }
147
+ catch {
148
+ throw new Error('Bundle manifest is not valid JSON');
149
+ }
150
+ const manifest = parsed;
151
+ if (manifest?.formatVersion !== FORMAT_VERSION) {
152
+ throw new Error(`Unsupported bundle format ${String(manifest?.formatVersion)} ` +
153
+ `(expected ${FORMAT_VERSION})`);
154
+ }
155
+ if (!Array.isArray(manifest.chunks) || manifest.chunks.length > MAX_CHUNKS) {
156
+ throw new Error(`Bundle must list at most ${MAX_CHUNKS} places`);
157
+ }
158
+ if (manifest.chunks.length !== placeSizes.size) {
159
+ throw new Error('Bundle manifest does not list every place it holds');
160
+ }
161
+ const seenNames = new Set();
162
+ const seenSlugs = new Set();
163
+ const seenFiles = new Set();
164
+ const chunks = [];
165
+ const packages = [];
166
+ for (const entry of manifest.chunks) {
167
+ const file = entry?.file;
168
+ const sizeBytes = typeof file === 'string' ? placeSizes.get(file) : undefined;
169
+ if (sizeBytes === undefined || seenFiles.has(file)) {
170
+ throw new Error(`Bundle lists an invalid place file: ${String(file)}`);
171
+ }
172
+ seenFiles.add(file);
173
+ if (!Array.isArray(entry.packages) || entry.packages.length === 0) {
174
+ throw new Error(`${file} lists no packages`);
175
+ }
176
+ const slugMap = new Map();
177
+ for (const pkg of entry.packages) {
178
+ const { name, slug, hasJestConfig } = pkg ?? {};
179
+ if (typeof name !== 'string' || !PACKAGE_NAME_PATTERN.test(name)) {
180
+ throw new Error(`Bundle lists an invalid package name: ${String(name)}`);
181
+ }
182
+ if (typeof slug !== 'string' || !SLUG_PATTERN.test(slug)) {
183
+ throw new Error(`Bundle lists an invalid slug for ${name}`);
184
+ }
185
+ if (seenNames.has(name) || seenSlugs.has(slug)) {
186
+ throw new Error(`Bundle lists ${name} (${slug}) more than once`);
187
+ }
188
+ seenNames.add(name);
189
+ seenSlugs.add(slug);
190
+ slugMap.set(name, slug);
191
+ packages.push({ name, hasJestConfig: hasJestConfig === true });
192
+ }
193
+ chunks.push({ rbxlPath: path.join(dir, file), slugMap, sizeBytes });
194
+ }
195
+ if (packages.length > MAX_PACKAGES) {
196
+ throw new Error(`Bundle lists more than ${MAX_PACKAGES} packages`);
197
+ }
198
+ return { chunks, packages };
199
+ }
200
+ //# sourceMappingURL=prebuilt-batch-bundle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prebuilt-batch-bundle.js","sourceRoot":"","sources":["../../../../src/utils/testing/runner/prebuilt-batch-bundle.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=prebuilt-batch-bundle.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prebuilt-batch-bundle.test.d.ts","sourceRoot":"","sources":["../../../../src/utils/testing/runner/prebuilt-batch-bundle.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,181 @@
1
+ import * as fs from 'fs/promises';
2
+ import * as os from 'os';
3
+ import * as path from 'path';
4
+ import { Header } from 'tar';
5
+ import { afterEach, beforeEach, describe, expect, it } from 'vitest';
6
+ import { readPrebuiltBatchBundleAsync, writePrebuiltBatchBundleAsync, } from './prebuilt-batch-bundle.js';
7
+ function rawTar(entries) {
8
+ const blocks = [];
9
+ for (const entry of entries) {
10
+ const body = Buffer.from(entry.body ?? '');
11
+ const header = new Header({
12
+ path: entry.path,
13
+ type: entry.type ?? 'File',
14
+ linkpath: entry.linkpath,
15
+ size: entry.type && entry.type !== 'File' ? 0 : body.length,
16
+ mode: 0o644,
17
+ mtime: new Date(0),
18
+ });
19
+ header.encode();
20
+ blocks.push(header.block);
21
+ if (!entry.type || entry.type === 'File') {
22
+ const padded = Buffer.alloc(Math.ceil(body.length / 512) * 512);
23
+ body.copy(padded);
24
+ blocks.push(padded);
25
+ }
26
+ }
27
+ blocks.push(Buffer.alloc(1024));
28
+ return Buffer.concat(blocks);
29
+ }
30
+ function validManifest() {
31
+ return {
32
+ formatVersion: 1,
33
+ chunks: [
34
+ {
35
+ file: 'place-1.rbxl',
36
+ packages: [
37
+ { name: '@quenty/rx', slug: 'rx', hasJestConfig: true },
38
+ { name: '@quenty/maid', slug: 'maid', hasJestConfig: false },
39
+ ],
40
+ },
41
+ ],
42
+ };
43
+ }
44
+ describe('prebuilt batch bundle', () => {
45
+ let workDir;
46
+ const opened = [];
47
+ beforeEach(async () => {
48
+ workDir = await fs.mkdtemp(path.join(os.tmpdir(), 'prebuilt-bundle-'));
49
+ });
50
+ afterEach(async () => {
51
+ for (const bundle of opened.splice(0)) {
52
+ await bundle.buildContext.cleanupAsync();
53
+ }
54
+ await fs.rm(workDir, { recursive: true, force: true });
55
+ });
56
+ async function readAsync(file) {
57
+ const bundle = await readPrebuiltBatchBundleAsync(file);
58
+ opened.push(bundle);
59
+ return bundle;
60
+ }
61
+ async function writeRawAsync(entries) {
62
+ const file = path.join(workDir, 'raw.nevermore.tests.tar');
63
+ await fs.writeFile(file, rawTar(entries));
64
+ return file;
65
+ }
66
+ async function writeManifestAsync(manifest) {
67
+ return writeRawAsync([
68
+ { path: 'manifest.json', body: JSON.stringify(manifest) },
69
+ { path: 'place-1.rbxl', body: 'place bytes' },
70
+ ]);
71
+ }
72
+ it('round-trips places, slugs and jest.config flags through one file', async () => {
73
+ const source = path.join(workDir, 'source.rbxl');
74
+ await fs.writeFile(source, 'place bytes');
75
+ const file = path.join(workDir, 'out', 'pr-1.nevermore.tests.tar');
76
+ await writePrebuiltBatchBundleAsync(file, [
77
+ {
78
+ rbxlPath: source,
79
+ slugMap: new Map([
80
+ ['@quenty/rx', 'rx'],
81
+ ['@quenty/maid', 'maid'],
82
+ ]),
83
+ sizeBytes: 11,
84
+ },
85
+ ], new Map([['@quenty/rx', true]]));
86
+ const bundle = await readAsync(file);
87
+ expect(bundle.packages).toEqual([
88
+ { name: '@quenty/rx', hasJestConfig: true },
89
+ { name: '@quenty/maid', hasJestConfig: false },
90
+ ]);
91
+ expect(bundle.chunks).toHaveLength(1);
92
+ expect(bundle.chunks[0].sizeBytes).toBe(11);
93
+ expect([...bundle.chunks[0].slugMap]).toEqual([
94
+ ['@quenty/rx', 'rx'],
95
+ ['@quenty/maid', 'maid'],
96
+ ]);
97
+ expect(await fs.readFile(bundle.chunks[0].rbxlPath, 'utf-8')).toBe('place bytes');
98
+ });
99
+ it('reads an empty bundle as no packages', async () => {
100
+ const file = path.join(workDir, 'empty.nevermore.tests.tar');
101
+ await writePrebuiltBatchBundleAsync(file, [], new Map());
102
+ const bundle = await readAsync(file);
103
+ expect(bundle.packages).toEqual([]);
104
+ expect(bundle.chunks).toEqual([]);
105
+ });
106
+ it('removes the unpacked places on cleanup', async () => {
107
+ const bundle = await readPrebuiltBatchBundleAsync(await writeManifestAsync(validManifest()));
108
+ const placePath = bundle.chunks[0].rbxlPath;
109
+ await bundle.buildContext.cleanupAsync();
110
+ await expect(fs.stat(placePath)).rejects.toThrow();
111
+ });
112
+ it('never writes outside its own directory for an entry that escapes', async () => {
113
+ const file = await writeRawAsync([
114
+ { path: 'manifest.json', body: JSON.stringify(validManifest()) },
115
+ { path: 'place-1.rbxl', body: 'place bytes' },
116
+ { path: '../escaped.rbxl', body: 'evil' },
117
+ ]);
118
+ await expect(readAsync(file)).rejects.toThrow('unexpected entry');
119
+ await expect(fs.stat(path.join(os.tmpdir(), 'escaped.rbxl'))).rejects.toThrow();
120
+ });
121
+ it('rejects a symlink entry', async () => {
122
+ const file = await writeRawAsync([
123
+ { path: 'manifest.json', body: JSON.stringify(validManifest()) },
124
+ { path: 'place-1.rbxl', type: 'SymbolicLink', linkpath: '/etc/passwd' },
125
+ ]);
126
+ await expect(readAsync(file)).rejects.toThrow('not a regular file');
127
+ });
128
+ it('rejects a place the manifest does not list', async () => {
129
+ const file = await writeRawAsync([
130
+ { path: 'manifest.json', body: JSON.stringify(validManifest()) },
131
+ { path: 'place-1.rbxl', body: 'place bytes' },
132
+ { path: 'place-2.rbxl', body: 'extra' },
133
+ ]);
134
+ await expect(readAsync(file)).rejects.toThrow('every place it holds');
135
+ });
136
+ it('rejects a manifest that lists a place the bundle does not hold', async () => {
137
+ const manifest = validManifest();
138
+ manifest.chunks[0].file = 'place-2.rbxl';
139
+ await expect(readAsync(await writeManifestAsync(manifest))).rejects.toThrow('invalid place file');
140
+ });
141
+ it('rejects a file that is not a tar', async () => {
142
+ const file = path.join(workDir, 'junk.nevermore.tests.tar');
143
+ await fs.writeFile(file, 'not a tar at all');
144
+ await expect(readAsync(file)).rejects.toThrow();
145
+ });
146
+ it('rejects a slug that could break out of the batch script', async () => {
147
+ const manifest = validManifest();
148
+ manifest.chunks[0].packages[0].slug = 'rx"]] print("hi") --';
149
+ await expect(readAsync(await writeManifestAsync(manifest))).rejects.toThrow('invalid slug');
150
+ });
151
+ it('accepts a multi-place target name with a free-form place name', async () => {
152
+ const manifest = validManifest();
153
+ manifest.chunks[0].packages[0].name = '@quenty/rx - Hub (Test) + Lobby é';
154
+ const bundle = await readAsync(await writeManifestAsync(manifest));
155
+ expect(bundle.packages[0].name).toBe('@quenty/rx - Hub (Test) + Lobby é');
156
+ });
157
+ it.each([
158
+ '@quenty/rx | injected',
159
+ '@quenty/rx<img>',
160
+ '@quenty/rx\nline',
161
+ '@quenty/rx [Approved](https://evil.example)',
162
+ '@quenty/rx ![x](p.png)',
163
+ '@quenty/rx cc @someuser',
164
+ '@quenty/rx https://evil.example',
165
+ ])('rejects a package name that could break the PR comment: %j', async (name) => {
166
+ const manifest = validManifest();
167
+ manifest.chunks[0].packages[0].name = name;
168
+ await expect(readAsync(await writeManifestAsync(manifest))).rejects.toThrow('invalid package name');
169
+ });
170
+ it('rejects a package listed twice', async () => {
171
+ const manifest = validManifest();
172
+ manifest.chunks[0].packages[1].name = '@quenty/rx';
173
+ await expect(readAsync(await writeManifestAsync(manifest))).rejects.toThrow('more than once');
174
+ });
175
+ it('rejects an unknown format version', async () => {
176
+ const manifest = validManifest();
177
+ manifest.formatVersion = 2;
178
+ await expect(readAsync(await writeManifestAsync(manifest))).rejects.toThrow('Unsupported bundle format');
179
+ });
180
+ });
181
+ //# sourceMappingURL=prebuilt-batch-bundle.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prebuilt-batch-bundle.test.js","sourceRoot":"","sources":["../../../../src/utils/testing/runner/prebuilt-batch-bundle.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ export interface TestRojoProject {
2
+ tree?: {
3
+ ServerScriptService?: Record<string, unknown>;
4
+ };
5
+ }
6
+ /**
7
+ * A package's instance name in its test place: the first non-`$`,
8
+ * non-`Script` key under ServerScriptService.
9
+ */
10
+ export declare function findTestProjectSlug(project: TestRojoProject): string | undefined;
11
+ //# sourceMappingURL=test-project-slug.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-project-slug.d.ts","sourceRoot":"","sources":["../../../../src/utils/testing/runner/test-project-slug.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,EAAE;QAAE,mBAAmB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC;CAC1D;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,eAAe,GACvB,MAAM,GAAG,SAAS,CAOpB"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * A package's instance name in its test place: the first non-`$`,
3
+ * non-`Script` key under ServerScriptService.
4
+ */
5
+ export function findTestProjectSlug(project) {
6
+ const serverScriptService = project.tree?.ServerScriptService;
7
+ if (!serverScriptService)
8
+ return undefined;
9
+ return Object.keys(serverScriptService).find((key) => !key.startsWith('$') && key !== 'Script');
10
+ }
11
+ //# sourceMappingURL=test-project-slug.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-project-slug.js","sourceRoot":"","sources":["../../../../src/utils/testing/runner/test-project-slug.ts"],"names":[],"mappings":"AAIA;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CACjC,OAAwB;IAExB,MAAM,mBAAmB,GAAG,OAAO,CAAC,IAAI,EAAE,mBAAmB,CAAC;IAC9D,IAAI,CAAC,mBAAmB;QAAE,OAAO,SAAS,CAAC;IAE3C,OAAO,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAC1C,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,QAAQ,CAClD,CAAC;AACJ,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import { type DeployTarget } from '@quenty/nevermore-deploy';
2
- import { type JobContext } from '../../job-context/job-context.js';
2
+ import { type BuiltPlace, type JobContext } from '../../job-context/job-context.js';
3
3
  import { type DeployOverrides } from '../../build/build.js';
4
4
  import { type ParsedTestCounts } from '../test-log-parser.js';
5
5
  export interface SingleTestResult {
@@ -51,6 +51,11 @@ export interface SingleTestOptions {
51
51
  */
52
52
  suppressCountsProvenance?: boolean;
53
53
  }
54
+ export interface PreparedTest {
55
+ builtPlace: BuiltPlace;
56
+ scriptContent: string;
57
+ hasJestConfig: boolean;
58
+ }
54
59
  /**
55
60
  * Build, deploy, and run a test for a single package using the provided
56
61
  * JobContext. The context determines the execution environment (cloud or local).
@@ -58,6 +63,8 @@ export interface SingleTestOptions {
58
63
  * Creates and releases its own deployment handle — the caller owns the context lifetime.
59
64
  */
60
65
  export declare function runSingleTestAsync(context: JobContext, options: SingleTestOptions): Promise<SingleTestResult>;
66
+ export declare function prepareTestAsync(context: JobContext, options: SingleTestOptions): Promise<PreparedTest>;
67
+ export declare function executePreparedTestAsync(context: JobContext, prepared: PreparedTest, options: SingleTestOptions): Promise<SingleTestResult>;
61
68
  /**
62
69
  * Whether this package ships a jest.config, i.e. whether it has specs to run.
63
70
  *
@@ -1 +1 @@
1
- {"version":3,"file":"test-runner.d.ts","sourceRoot":"","sources":["../../../../src/utils/testing/runner/test-runner.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,kCAAkC,CAAC;AACnE,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EACL,KAAK,gBAAgB,EAGtB,MAAM,uBAAuB,CAAC;AAkB/B,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,yEAAyE;IACzE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,YAAY,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;IACtC,2EAA2E;IAC3E,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,YAAY,EAAE,MAAM,GAAG,SAAS,EAChC,UAAU,EAAE,MAAM,EAAE,GACnB,MAAM,EAAE,CAOV;AAED,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,MAAM,EAAE,YAAY,CAAC;IACrB,kFAAkF;IAClF,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,8EAA8E;IAC9E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,wBAAwB,CAAC,EAAE,OAAO,CAAC;CACpC;AAED;;;;;GAKG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,UAAU,EACnB,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,gBAAgB,CAAC,CA2J3B;AA4ED;;;;;;;;GAQG;AACH,wBAAsB,yBAAyB,CAC7C,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,OAAO,CAAC,CAmClB;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,GAAG,SAAS,GAC7B,OAAO,CAAC,MAAM,CAAC,CAajB"}
1
+ {"version":3,"file":"test-runner.d.ts","sourceRoot":"","sources":["../../../../src/utils/testing/runner/test-runner.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EACL,KAAK,UAAU,EACf,KAAK,UAAU,EAChB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EACL,KAAK,gBAAgB,EAGtB,MAAM,uBAAuB,CAAC;AAkB/B,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,yEAAyE;IACzE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,YAAY,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;IACtC,2EAA2E;IAC3E,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,YAAY,EAAE,MAAM,GAAG,SAAS,EAChC,UAAU,EAAE,MAAM,EAAE,GACnB,MAAM,EAAE,CAOV;AAED,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,MAAM,EAAE,YAAY,CAAC;IACrB,kFAAkF;IAClF,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,8EAA8E;IAC9E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,wBAAwB,CAAC,EAAE,OAAO,CAAC;CACpC;AAED,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,UAAU,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,OAAO,CAAC;CACxB;AAED;;;;;GAKG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,UAAU,EACnB,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,gBAAgB,CAAC,CAG3B;AAED,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,UAAU,EACnB,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,YAAY,CAAC,CAsCvB;AAED,wBAAsB,wBAAwB,CAC5C,OAAO,EAAE,UAAU,EACnB,QAAQ,EAAE,YAAY,EACtB,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,gBAAgB,CAAC,CA4H3B;AA4ED;;;;;;;;GAQG;AACH,wBAAsB,yBAAyB,CAC7C,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,OAAO,CAAC,CAmClB;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,GAAG,SAAS,GAC7B,OAAO,CAAC,MAAM,CAAC,CAajB"}
@@ -29,11 +29,11 @@ export function mergeFailureReasons(contextError, logReasons) {
29
29
  * Creates and releases its own deployment handle — the caller owns the context lifetime.
30
30
  */
31
31
  export async function runSingleTestAsync(context, options) {
32
- const { packagePath, packageName,
33
- // 300s is the Open Cloud maximum. The old 120s default failed real suites
34
- // with no jest summary at all, so "--timeout 300" had become folklore
35
- // everyone had to know before their first useful run.
36
- timeoutMs = 300_000, scriptText, target, overrides, } = options;
32
+ const prepared = await prepareTestAsync(context, options);
33
+ return executePreparedTestAsync(context, prepared, options);
34
+ }
35
+ export async function prepareTestAsync(context, options) {
36
+ const { packagePath, packageName, scriptText, target, overrides } = options;
37
37
  const sessionId = randomUUID();
38
38
  const builtPlace = await context.buildPlaceAsync({
39
39
  target,
@@ -57,6 +57,19 @@ export async function runSingleTestAsync(context, options) {
57
57
  }
58
58
  const scriptContent = scriptText ??
59
59
  (await readTestScriptAsync(packagePath, builtPlace.target.scriptTemplate));
60
+ return {
61
+ builtPlace,
62
+ scriptContent,
63
+ hasJestConfig: await packageHasJestConfigAsync(packagePath),
64
+ };
65
+ }
66
+ export async function executePreparedTestAsync(context, prepared, options) {
67
+ const { packagePath, packageName,
68
+ // 300s is the Open Cloud maximum. The old 120s default failed real suites
69
+ // with no jest summary at all, so "--timeout 300" had become folklore
70
+ // everyone had to know before their first useful run.
71
+ timeoutMs = 300_000, scriptText, } = options;
72
+ const { builtPlace, scriptContent, hasJestConfig } = prepared;
60
73
  const deployment = await context.deployBuiltPlaceAsync({
61
74
  builtPlace,
62
75
  packageName,
@@ -95,7 +108,7 @@ export async function runSingleTestAsync(context, options) {
95
108
  const smokeTestedWithSpecs = structured !== undefined &&
96
109
  !structured.ranJest &&
97
110
  scriptText === undefined &&
98
- (await packageHasJestConfigAsync(packagePath));
111
+ hasJestConfig;
99
112
  const reasons = mergeFailureReasons(result.errorMessage, [
100
113
  ...(smokeTestedWithSpecs
101
114
  ? [
@@ -1 +1 @@
1
- {"version":3,"file":"test-runner.js","sourceRoot":"","sources":["../../../../src/utils/testing/runner/test-runner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAIpC,OAAO,EAEL,aAAa,EACb,eAAe,GAChB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAEL,0BAA0B,EAC1B,yBAAyB,EACzB,wBAAwB,EACxB,kBAAkB,GACnB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EACL,6BAA6B,EAC7B,mBAAmB,EACnB,gCAAgC,EAChC,wBAAwB,GACzB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAwBvE;;;;;;GAMG;AACH,MAAM,UAAU,mBAAmB,CACjC,YAAgC,EAChC,UAAoB;IAEpB,OAAO;QACL,GAAG,IAAI,GAAG,CAAC;YACT,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACjD,GAAG,UAAU;SACd,CAAC;KACH,CAAC;AACJ,CAAC;AAuBD;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,OAAmB,EACnB,OAA0B;IAE1B,MAAM,EACJ,WAAW,EACX,WAAW;IACX,0EAA0E;IAC1E,sEAAsE;IACtE,sDAAsD;IACtD,SAAS,GAAG,OAAO,EACnB,UAAU,EACV,MAAM,EACN,SAAS,GACV,GAAG,OAAO,CAAC;IAEZ,MAAM,SAAS,GAAG,UAAU,EAAE,CAAC;IAC/B,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,eAAe,CAAC;QAC/C,MAAM;QACN,cAAc,EAAE,QAAQ,SAAS,OAAO;QACxC,WAAW;QACX,WAAW;QACX,SAAS;KACV,CAAC,CAAC;IAEH,8EAA8E;IAC9E,4EAA4E;IAC5E,0EAA0E;IAC1E,IAAI,MAAM,wBAAwB,CAAC,WAAW,CAAC,EAAE,CAAC;QAChD,MAAM,gCAAgC,CACpC,UAAU,CAAC,QAAQ,EACnB,6BAA6B,CAAC,mBAAmB,EAAE,EAAE;YACnD,MAAM,EAAE,MAAM;YACd,SAAS,EAAE,KAAK;YAChB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,OAAO,EAAE,UAAU,CAAC,MAAM,CAAC,OAAO;YAClC,UAAU,EAAE,UAAU,CAAC,MAAM,CAAC,UAAU;YACxC,cAAc,EAAE,MAAM,uBAAuB,CAAC,WAAW,CAAC;SAC3D,CAAC,CACH,CAAC;IACJ,CAAC;IAED,MAAM,aAAa,GACjB,UAAU;QACV,CAAC,MAAM,mBAAmB,CAAC,WAAW,EAAE,UAAU,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC;IAE7E,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,qBAAqB,CAAC;QACrD,UAAU;QACV,WAAW;QACX,WAAW;KACZ,CAAC,CAAC;IAEH,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,cAAc,CAAC,UAAU,EAAE;YACtD,aAAa;YACb,WAAW;YACX,SAAS;SACV,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;QACpD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC;QAC1B,MAAM,SAAS,GAAG,iBAAiB,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAEzD,4EAA4E;QAC5E,2EAA2E;QAC3E,2EAA2E;QAC3E,0BAA0B;QAC1B,EAAE;QACF,2EAA2E;QAC3E,yEAAyE;QACzE,sEAAsE;QACtE,MAAM,UAAU,GACd,MAAM,CAAC,WAAW,IAAI,yBAAyB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QAEvE,2EAA2E;QAC3E,0EAA0E;QAC1E,yEAAyE;QACzE,2DAA2D;QAC3D,MAAM,MAAM,GAAG,aAAa,CAAC,OAAO,EAAE;YACpC,iBAAiB,EAAE,UAAU,KAAK,SAAS,IAAI,UAAU,KAAK,SAAS;SACxE,CAAC,CAAC;QAEH,qEAAqE;QACrE,wEAAwE;QACxE,6EAA6E;QAC7E,wEAAwE;QACxE,8CAA8C;QAC9C,MAAM,oBAAoB,GACxB,UAAU,KAAK,SAAS;YACxB,CAAC,UAAU,CAAC,OAAO;YACnB,UAAU,KAAK,SAAS;YACxB,CAAC,MAAM,yBAAyB,CAAC,WAAW,CAAC,CAAC,CAAC;QAEjD,MAAM,OAAO,GAAG,mBAAmB,CAAC,MAAM,CAAC,YAAY,EAAE;YACvD,GAAG,CAAC,oBAAoB;gBACtB,CAAC,CAAC;oBACE,qEAAqE;wBACnE,8CAA8C;iBACjD;gBACH,CAAC,CAAC,EAAE,CAAC;YACP,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,wBAAwB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3D,GAAG,MAAM,CAAC,cAAc;YACxB,wEAAwE;YACxE,wEAAwE;YACxE,0EAA0E;YAC1E,sEAAsE;YACtE,sEAAsE;YACtE,6BAA6B;YAC7B,GAAG,CAAC,UAAU,KAAK,SAAS;gBAC5B,MAAM,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC;gBAChC,OAAO,CAAC,MAAM,GAAG,CAAC;gBAChB,CAAC,CAAC,CAAC,qCAAqC,SAAS,GAAG,CAAC;gBACrD,CAAC,CAAC,EAAE,CAAC;SACR,CAAC,CAAC;QAEH,kEAAkE;QAClE,0CAA0C;QAC1C,MAAM,aAAa,GAAG,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACnD,MAAM,UAAU,GAAG,UAAU;YAC3B,CAAC,CAAC,kBAAkB,CAAC,UAAU,CAAC;YAChC,CAAC,CAAC,aAAa,CAAC;QAElB,sBAAsB,CAAC;YACrB,WAAW;YACX,UAAU;YACV,aAAa;YACb,SAAS;YACT,yEAAyE;YACzE,yEAAyE;YACzE,yEAAyE;YACzE,sCAAsC;YACtC,MAAM,EACJ,UAAU,KAAK,SAAS;gBACxB,MAAM,CAAC,WAAW,KAAK,SAAS;gBAChC,CAAC,OAAO,CAAC,wBAAwB,IAAI,KAAK,CAAC;YAC7C,gBAAgB,EAAE,MAAM,CAAC,YAAY,KAAK,SAAS;SACpD,CAAC,CAAC;QAEH,OAAO;YACL,OAAO,EACL,MAAM,CAAC,OAAO;gBACd,MAAM,CAAC,OAAO;gBACd,CAAC,UAAU,EAAE,OAAO,IAAI,IAAI,CAAC;gBAC7B,CAAC,oBAAoB;YACvB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,UAAU;YACV,YAAY,EAAE,UAAU;gBACtB,CAAC,CAAC,UAAU;gBACZ,CAAC,CAAC,aAAa;oBACf,CAAC,CAAC,SAAS;oBACX,CAAC,CAAC,SAAS;YACb,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,KAAK,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;YAC1D,QAAQ,EAAE,MAAM,CAAC,QAAQ;SAC1B,CAAC;IACJ,CAAC;YAAS,CAAC;QACT,MAAM,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;IACzC,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,sBAAsB,CAAC,OAQ/B;IACC,MAAM,EACJ,WAAW,EACX,UAAU,EACV,aAAa,EACb,MAAM,EACN,gBAAgB,EAChB,SAAS,GACV,GAAG,OAAO,CAAC;IAEZ,IAAI,MAAM,EAAE,CAAC;QACX,OAAO;IACT,CAAC;IAED,IAAI,UAAU,EAAE,CAAC;QACf,YAAY,CAAC,IAAI,CACf,GAAG,WAAW,iCAAiC;YAC7C,GAAG,UAAU,CAAC,MAAM,YAAY,UAAU,CAAC,MAAM,WAAW;YAC5D,GAAG,UAAU,CAAC,KAAK,SAAS,CAC/B,CAAC;QAEF,MAAM,WAAW,GAAG,0BAA0B,CAAC,UAAU,CAAC,CAAC;QAC3D,IAAI,WAAW,EAAE,CAAC;YAChB,YAAY,CAAC,IAAI,CAAC,GAAG,WAAW,KAAK,WAAW,EAAE,CAAC,CAAC;QACtD,CAAC;QAED,2EAA2E;QAC3E,IAAI,UAAU,CAAC,OAAO,IAAI,UAAU,CAAC,KAAK,KAAK,CAAC,EAAE,CAAC;YACjD,YAAY,CAAC,IAAI,CACf,GAAG,WAAW,4DAA4D;gBACxE,8CAA8C,CACjD,CAAC;QACJ,CAAC;QAED,2EAA2E;QAC3E,6CAA6C;QAC7C,IAAI,aAAa,IAAI,aAAa,CAAC,KAAK,KAAK,UAAU,CAAC,KAAK,EAAE,CAAC;YAC9D,YAAY,CAAC,IAAI,CACf,GAAG,WAAW,6DAA6D;gBACzE,GAAG,UAAU,CAAC,MAAM,IAAI,UAAU,CAAC,MAAM,IAAI,UAAU,CAAC,KAAK,GAAG;gBAChE,8CAA8C;gBAC9C,GAAG,aAAa,CAAC,MAAM,IAAI,aAAa,CAAC,MAAM,IAAI,aAAa,CAAC,KAAK,IAAI;gBAC1E,kEAAkE,CACrE,CAAC;QACJ,CAAC;QACD,OAAO;IACT,CAAC;IAED,MAAM,MAAM,GAAG,aAAa;QAC1B,CAAC,CAAC,gEAAgE;QAClE,CAAC,CAAC,yDAAyD,CAAC;IAC9D,MAAM,MAAM,GAAG,gBAAgB;QAC7B,CAAC,CAAC,wFAAwF;QAC1F,CAAC,CAAC,2CAA2C,CAAC;IAChD,YAAY,CAAC,IAAI,CAAC,GAAG,WAAW,KAAK,MAAM,KAAK,MAAM,EAAE,CAAC,CAAC;IAC1D,YAAY,CAAC,OAAO,CAAC,GAAG,WAAW,gBAAgB,SAAS,EAAE,CAAC,CAAC;AAClE,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,WAAmB;IAEnB,KAAK,UAAU,SAAS,CAAC,GAAW,EAAE,KAAa;QACjD,IAAI,OAAO,CAAC;QACZ,IAAI,CAAC;YACH,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3D,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;QAED,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,IAAI,KAAK,CAAC,MAAM,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;gBAC3D,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QAED,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;YAChB,OAAO,KAAK,CAAC;QACf,CAAC;QAED,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;gBACzB,SAAS;YACX,CAAC;YACD,+DAA+D;YAC/D,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBAC3D,SAAS;YACX,CAAC;YACD,IAAI,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC;gBAC3D,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;AACnC,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,WAAmB,EACnB,UAA8B;IAE9B,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CACb,mDAAmD,WAAW,2EAA2E,CAC1I,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;IACvD,IAAI,CAAC;QACH,OAAO,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC9C,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,0BAA0B,QAAQ,EAAE,CAAC,CAAC;IACxD,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"test-runner.js","sourceRoot":"","sources":["../../../../src/utils/testing/runner/test-runner.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@quenty/nevermore-cli",
3
- "version": "4.50.0",
3
+ "version": "4.51.0",
4
4
  "description": "CLI interface for Nevermore",
5
5
  "type": "module",
6
6
  "keywords": [
@@ -25,15 +25,16 @@
25
25
  "Quenty"
26
26
  ],
27
27
  "dependencies": {
28
- "@quenty/cli-output-helpers": "1.19.0",
29
- "@quenty/nevermore-cli-helpers": "1.20.0",
28
+ "@quenty/cli-output-helpers": "1.20.0",
29
+ "@quenty/nevermore-cli-helpers": "1.21.0",
30
30
  "@quenty/nevermore-deploy": "1.1.1",
31
- "@quenty/nevermore-template-helpers": "1.21.0",
32
- "@quenty/studio-bridge": "0.22.0",
31
+ "@quenty/nevermore-template-helpers": "1.22.0",
32
+ "@quenty/studio-bridge": "0.23.0",
33
33
  "execa": "^9.6.1",
34
34
  "find-git-root": "^1.0.4",
35
35
  "inquirer": "^13.2.0",
36
36
  "node-fetch": "^3.3.2",
37
+ "tar": "^7.5.11",
37
38
  "typescript-memoize": "^1.1.1",
38
39
  "ws": "^8.18.0",
39
40
  "yargs": "^18.0.0"
@@ -60,5 +61,5 @@
60
61
  "engines": {
61
62
  "node": ">=16"
62
63
  },
63
- "gitHead": "8ccad9d519f633a4af6659664374605cf2df7ecf"
64
+ "gitHead": "2cc8ce7136d877fc883c13bc5b174693fd7059be"
64
65
  }