@quenty/nevermore-cli 4.41.1 → 4.42.1-canary.783.30683193716.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.
- package/CHANGELOG.md +28 -0
- package/dist/args/global-args.d.ts +13 -0
- package/dist/args/global-args.d.ts.map +1 -1
- package/dist/commands/batch-command/batch-deploy-command.d.ts +3 -0
- package/dist/commands/batch-command/batch-deploy-command.d.ts.map +1 -1
- package/dist/commands/batch-command/batch-deploy-command.js +90 -1
- package/dist/commands/batch-command/batch-deploy-command.js.map +1 -1
- package/dist/commands/batch-command/batch-test-command.d.ts.map +1 -1
- package/dist/commands/batch-command/batch-test-command.js +25 -4
- package/dist/commands/batch-command/batch-test-command.js.map +1 -1
- package/dist/commands/deploy-command/deploy-init.js +1 -1
- package/dist/commands/deploy-command/deploy-init.js.map +1 -1
- package/dist/commands/deploy-command/index.d.ts +3 -0
- package/dist/commands/deploy-command/index.d.ts.map +1 -1
- package/dist/commands/deploy-command/index.js +297 -60
- package/dist/commands/deploy-command/index.js.map +1 -1
- package/dist/commands/deploy-command/select-target.js +1 -1
- package/dist/commands/deploy-command/select-target.js.map +1 -1
- package/dist/commands/deploy-command/version-command.d.ts.map +1 -1
- package/dist/commands/deploy-command/version-command.js +138 -12
- package/dist/commands/deploy-command/version-command.js.map +1 -1
- package/dist/commands/test-command/test-command.d.ts.map +1 -1
- package/dist/commands/test-command/test-command.js +23 -11
- package/dist/commands/test-command/test-command.js.map +1 -1
- package/dist/nevermore.js +17 -0
- package/dist/nevermore.js.map +1 -1
- package/dist/utils/batch/changed-packages-utils.d.ts +1 -1
- package/dist/utils/batch/changed-packages-utils.d.ts.map +1 -1
- package/dist/utils/batch/changed-packages-utils.js +1 -1
- package/dist/utils/batch/changed-packages-utils.js.map +1 -1
- package/dist/utils/build/base-place-resolver-factory.d.ts +25 -0
- package/dist/utils/build/base-place-resolver-factory.d.ts.map +1 -0
- package/dist/utils/build/base-place-resolver-factory.js +40 -0
- package/dist/utils/build/base-place-resolver-factory.js.map +1 -0
- package/dist/utils/build/build.d.ts +13 -2
- package/dist/utils/build/build.d.ts.map +1 -1
- package/dist/utils/build/build.js.map +1 -1
- package/dist/utils/build/upload.d.ts +1 -1
- package/dist/utils/build/upload.d.ts.map +1 -1
- package/dist/utils/deploy/deploy-metadata.d.ts +1 -1
- package/dist/utils/deploy/deploy-metadata.d.ts.map +1 -1
- package/dist/utils/job-context/base-job-context.d.ts +3 -1
- package/dist/utils/job-context/base-job-context.d.ts.map +1 -1
- package/dist/utils/job-context/base-job-context.js +45 -6
- package/dist/utils/job-context/base-job-context.js.map +1 -1
- package/dist/utils/job-context/batch-script-job-context.d.ts +6 -0
- package/dist/utils/job-context/batch-script-job-context.d.ts.map +1 -1
- package/dist/utils/job-context/batch-script-job-context.js +13 -0
- package/dist/utils/job-context/batch-script-job-context.js.map +1 -1
- package/dist/utils/job-context/cloud-job-context.d.ts +2 -1
- package/dist/utils/job-context/cloud-job-context.d.ts.map +1 -1
- package/dist/utils/job-context/cloud-job-context.js +2 -2
- package/dist/utils/job-context/cloud-job-context.js.map +1 -1
- package/dist/utils/job-context/local-job-context.d.ts +2 -1
- package/dist/utils/job-context/local-job-context.d.ts.map +1 -1
- package/dist/utils/job-context/local-job-context.js +2 -2
- package/dist/utils/job-context/local-job-context.js.map +1 -1
- package/dist/utils/open-cloud/open-cloud-client.d.ts +20 -2
- package/dist/utils/open-cloud/open-cloud-client.d.ts.map +1 -1
- package/dist/utils/open-cloud/open-cloud-client.js +78 -21
- package/dist/utils/open-cloud/open-cloud-client.js.map +1 -1
- package/dist/utils/open-cloud/open-cloud-client.test.js +89 -12
- package/dist/utils/open-cloud/open-cloud-client.test.js.map +1 -1
- package/dist/utils/testing/parsers/batch-log-parser.d.ts +13 -5
- package/dist/utils/testing/parsers/batch-log-parser.d.ts.map +1 -1
- package/dist/utils/testing/parsers/batch-log-parser.js +114 -68
- package/dist/utils/testing/parsers/batch-log-parser.js.map +1 -1
- package/dist/utils/testing/parsers/batch-log-parser.test.js +57 -5
- package/dist/utils/testing/parsers/batch-log-parser.test.js.map +1 -1
- package/dist/utils/testing/parsers/traceback-parser.d.ts +31 -0
- package/dist/utils/testing/parsers/traceback-parser.d.ts.map +1 -0
- package/dist/utils/testing/parsers/traceback-parser.js +91 -0
- package/dist/utils/testing/parsers/traceback-parser.js.map +1 -0
- package/dist/utils/testing/parsers/traceback-parser.test.d.ts +2 -0
- package/dist/utils/testing/parsers/traceback-parser.test.d.ts.map +1 -0
- package/dist/utils/testing/parsers/traceback-parser.test.js +45 -0
- package/dist/utils/testing/parsers/traceback-parser.test.js.map +1 -0
- package/dist/utils/testing/runner/combined-project-generator.d.ts +1 -1
- package/dist/utils/testing/runner/combined-project-generator.d.ts.map +1 -1
- package/dist/utils/testing/runner/test-runner.d.ts +9 -1
- package/dist/utils/testing/runner/test-runner.d.ts.map +1 -1
- package/dist/utils/testing/runner/test-runner.js +28 -3
- package/dist/utils/testing/runner/test-runner.js.map +1 -1
- package/dist/utils/testing/runner/test-runner.test.d.ts +2 -0
- package/dist/utils/testing/runner/test-runner.test.d.ts.map +1 -0
- package/dist/utils/testing/runner/test-runner.test.js +18 -0
- package/dist/utils/testing/runner/test-runner.test.js.map +1 -0
- package/dist/utils/testing/test-log-parser.d.ts +32 -1
- package/dist/utils/testing/test-log-parser.d.ts.map +1 -1
- package/dist/utils/testing/test-log-parser.js +53 -9
- package/dist/utils/testing/test-log-parser.js.map +1 -1
- package/dist/utils/testing/test-log-parser.test.d.ts +2 -0
- package/dist/utils/testing/test-log-parser.test.d.ts.map +1 -0
- package/dist/utils/testing/test-log-parser.test.js +56 -0
- package/dist/utils/testing/test-log-parser.test.js.map +1 -0
- package/dist/utils/watch/github-context.d.ts +50 -0
- package/dist/utils/watch/github-context.d.ts.map +1 -0
- package/dist/utils/watch/github-context.js +125 -0
- package/dist/utils/watch/github-context.js.map +1 -0
- package/dist/utils/watch/github-context.test.d.ts +2 -0
- package/dist/utils/watch/github-context.test.d.ts.map +1 -0
- package/dist/utils/watch/github-context.test.js +112 -0
- package/dist/utils/watch/github-context.test.js.map +1 -0
- package/dist/utils/watch/http-watch-registry.d.ts +40 -0
- package/dist/utils/watch/http-watch-registry.d.ts.map +1 -0
- package/dist/utils/watch/http-watch-registry.js +262 -0
- package/dist/utils/watch/http-watch-registry.js.map +1 -0
- package/dist/utils/watch/http-watch-registry.test.d.ts +2 -0
- package/dist/utils/watch/http-watch-registry.test.d.ts.map +1 -0
- package/dist/utils/watch/http-watch-registry.test.js +211 -0
- package/dist/utils/watch/http-watch-registry.test.js.map +1 -0
- package/dist/utils/watch/local-watch-loop.d.ts +50 -0
- package/dist/utils/watch/local-watch-loop.d.ts.map +1 -0
- package/dist/utils/watch/local-watch-loop.js +103 -0
- package/dist/utils/watch/local-watch-loop.js.map +1 -0
- package/dist/utils/watch/local-watch-loop.test.d.ts +2 -0
- package/dist/utils/watch/local-watch-loop.test.d.ts.map +1 -0
- package/dist/utils/watch/local-watch-loop.test.js +170 -0
- package/dist/utils/watch/local-watch-loop.test.js.map +1 -0
- package/dist/utils/watch/register-notify-watches.d.ts +41 -0
- package/dist/utils/watch/register-notify-watches.d.ts.map +1 -0
- package/dist/utils/watch/register-notify-watches.js +159 -0
- package/dist/utils/watch/register-notify-watches.js.map +1 -0
- package/dist/utils/watch/register-notify-watches.test.d.ts +2 -0
- package/dist/utils/watch/register-notify-watches.test.d.ts.map +1 -0
- package/dist/utils/watch/register-notify-watches.test.js +225 -0
- package/dist/utils/watch/register-notify-watches.test.js.map +1 -0
- package/dist/utils/watch/register-watches.d.ts +68 -0
- package/dist/utils/watch/register-watches.d.ts.map +1 -0
- package/dist/utils/watch/register-watches.js +221 -0
- package/dist/utils/watch/register-watches.js.map +1 -0
- package/dist/utils/watch/register-watches.test.d.ts +2 -0
- package/dist/utils/watch/register-watches.test.d.ts.map +1 -0
- package/dist/utils/watch/register-watches.test.js +576 -0
- package/dist/utils/watch/register-watches.test.js.map +1 -0
- package/dist/utils/watch/stream-watch-loop.d.ts +54 -0
- package/dist/utils/watch/stream-watch-loop.d.ts.map +1 -0
- package/dist/utils/watch/stream-watch-loop.js +282 -0
- package/dist/utils/watch/stream-watch-loop.js.map +1 -0
- package/dist/utils/watch/stream-watch-loop.test.d.ts +2 -0
- package/dist/utils/watch/stream-watch-loop.test.d.ts.map +1 -0
- package/dist/utils/watch/stream-watch-loop.test.js +392 -0
- package/dist/utils/watch/stream-watch-loop.test.js.map +1 -0
- package/dist/utils/watch/websocket-watch-stream.d.ts +25 -0
- package/dist/utils/watch/websocket-watch-stream.d.ts.map +1 -0
- package/dist/utils/watch/websocket-watch-stream.js +306 -0
- package/dist/utils/watch/websocket-watch-stream.js.map +1 -0
- package/dist/utils/watch/websocket-watch-stream.test.d.ts +2 -0
- package/dist/utils/watch/websocket-watch-stream.test.d.ts.map +1 -0
- package/dist/utils/watch/websocket-watch-stream.test.js +475 -0
- package/dist/utils/watch/websocket-watch-stream.test.js.map +1 -0
- package/package.json +7 -4
- package/src/args/global-args.ts +13 -0
- package/src/commands/batch-command/batch-deploy-command.ts +105 -1
- package/src/commands/batch-command/batch-test-command.ts +86 -60
- package/src/commands/deploy-command/deploy-init.ts +1 -1
- package/src/commands/deploy-command/index.ts +327 -32
- package/src/commands/deploy-command/select-target.ts +1 -1
- package/src/commands/deploy-command/version-command.ts +215 -21
- package/src/commands/test-command/test-command.ts +31 -22
- package/src/nevermore.ts +19 -0
- package/src/utils/batch/changed-packages-utils.ts +1 -1
- package/src/utils/build/base-place-resolver-factory.ts +49 -0
- package/src/utils/build/build.ts +13 -2
- package/src/utils/build/upload.ts +1 -1
- package/src/utils/deploy/deploy-metadata.ts +1 -1
- package/src/utils/job-context/base-job-context.ts +68 -6
- package/src/utils/job-context/batch-script-job-context.ts +18 -0
- package/src/utils/job-context/cloud-job-context.ts +7 -2
- package/src/utils/job-context/local-job-context.ts +7 -2
- package/src/utils/open-cloud/open-cloud-client.test.ts +133 -14
- package/src/utils/open-cloud/open-cloud-client.ts +131 -35
- package/src/utils/testing/parsers/batch-log-parser.test.ts +70 -5
- package/src/utils/testing/parsers/batch-log-parser.ts +141 -80
- package/src/utils/testing/parsers/traceback-parser.test.ts +64 -0
- package/src/utils/testing/parsers/traceback-parser.ts +122 -0
- package/src/utils/testing/runner/combined-project-generator.ts +1 -1
- package/src/utils/testing/runner/test-runner.test.ts +29 -0
- package/src/utils/testing/runner/test-runner.ts +36 -4
- package/src/utils/testing/test-log-parser.test.ts +70 -0
- package/src/utils/testing/test-log-parser.ts +80 -10
- package/src/utils/watch/github-context.test.ts +154 -0
- package/src/utils/watch/github-context.ts +184 -0
- package/src/utils/watch/http-watch-registry.test.ts +330 -0
- package/src/utils/watch/http-watch-registry.ts +341 -0
- package/src/utils/watch/local-watch-loop.test.ts +197 -0
- package/src/utils/watch/local-watch-loop.ts +190 -0
- package/src/utils/watch/register-notify-watches.test.ts +282 -0
- package/src/utils/watch/register-notify-watches.ts +226 -0
- package/src/utils/watch/register-watches.test.ts +696 -0
- package/src/utils/watch/register-watches.ts +369 -0
- package/src/utils/watch/stream-watch-loop.test.ts +625 -0
- package/src/utils/watch/stream-watch-loop.ts +411 -0
- package/src/utils/watch/websocket-watch-stream.test.ts +581 -0
- package/src/utils/watch/websocket-watch-stream.ts +403 -0
- package/tsconfig.json +19 -6
- package/tsconfig.tsbuildinfo +1 -1
- package/dist/utils/build/deploy-config.d.ts +0 -71
- package/dist/utils/build/deploy-config.d.ts.map +0 -1
- package/dist/utils/build/deploy-config.js +0 -164
- package/dist/utils/build/deploy-config.js.map +0 -1
- package/dist/utils/build/deploy-config.test.d.ts +0 -2
- package/dist/utils/build/deploy-config.test.d.ts.map +0 -1
- package/dist/utils/build/deploy-config.test.js +0 -126
- package/dist/utils/build/deploy-config.test.js.map +0 -1
- package/src/utils/build/deploy-config.test.ts +0 -149
- package/src/utils/build/deploy-config.ts +0 -259
|
@@ -145,35 +145,112 @@ describe('OpenCloudClient.downloadPlaceAsync', () => {
|
|
|
145
145
|
await expect(client.downloadPlaceAsync(1, 22, undefined, 999999)).rejects.toThrowError(/no version 999999/);
|
|
146
146
|
});
|
|
147
147
|
});
|
|
148
|
-
describe('OpenCloudClient.
|
|
148
|
+
describe('OpenCloudClient.resolveLatestPlaceVersionAsync', () => {
|
|
149
149
|
afterEach(() => {
|
|
150
150
|
vi.restoreAllMocks();
|
|
151
151
|
});
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
152
|
+
/** Page the Assets API newest-first, as the real endpoint does. */
|
|
153
|
+
function makeVersionsLimiter(pages, urls = []) {
|
|
154
|
+
return {
|
|
155
155
|
fetchAsync: vi.fn(async (url) => {
|
|
156
156
|
urls.push(String(url));
|
|
157
|
-
|
|
157
|
+
const page = pages[urls.length - 1] ?? [];
|
|
158
|
+
return new Response(JSON.stringify({
|
|
159
|
+
assetVersions: page.map((entry) => ({
|
|
160
|
+
path: `assets/22/versions/${entry.version}`,
|
|
161
|
+
// The real API omits `published` entirely on save-only versions.
|
|
162
|
+
...(entry.published ? { published: true } : {}),
|
|
163
|
+
})),
|
|
164
|
+
...(urls.length < pages.length
|
|
165
|
+
? { nextPageToken: `token-${urls.length}` }
|
|
166
|
+
: {}),
|
|
167
|
+
}), { status: 200 });
|
|
158
168
|
}),
|
|
159
169
|
};
|
|
170
|
+
}
|
|
171
|
+
it('resolves "saved" to the newest version of any kind', async () => {
|
|
172
|
+
const urls = [];
|
|
160
173
|
const client = new OpenCloudClient({
|
|
161
174
|
apiKey: 'test-key',
|
|
162
|
-
rateLimiter:
|
|
175
|
+
rateLimiter: makeVersionsLimiter([[{ version: 5781 }, { version: 5780, published: true }]], urls),
|
|
176
|
+
});
|
|
177
|
+
expect(await client.resolveLatestPlaceVersionAsync(1, 22, 'saved')).toBe(5781);
|
|
178
|
+
expect(urls).toHaveLength(1);
|
|
179
|
+
expect(urls[0]).toBe('https://apis.roblox.com/assets/v1/assets/22/versions?maxPageSize=50');
|
|
180
|
+
});
|
|
181
|
+
it('resolves "published" past unpublished saves at the head', async () => {
|
|
182
|
+
const client = new OpenCloudClient({
|
|
183
|
+
apiKey: 'test-key',
|
|
184
|
+
rateLimiter: makeVersionsLimiter([
|
|
185
|
+
[
|
|
186
|
+
{ version: 5781 },
|
|
187
|
+
{ version: 5780 },
|
|
188
|
+
{ version: 5779, published: true },
|
|
189
|
+
],
|
|
190
|
+
]),
|
|
163
191
|
});
|
|
164
|
-
|
|
165
|
-
expect(version).toBe(5781);
|
|
166
|
-
expect(urls[0]).toBe('https://apis.roblox.com/assets/v1/assets/22');
|
|
192
|
+
expect(await client.resolveLatestPlaceVersionAsync(1, 22, 'published')).toBe(5779);
|
|
167
193
|
});
|
|
168
|
-
it('
|
|
194
|
+
it('pages only until the newest published version is found', async () => {
|
|
195
|
+
const urls = [];
|
|
196
|
+
const client = new OpenCloudClient({
|
|
197
|
+
apiKey: 'test-key',
|
|
198
|
+
rateLimiter: makeVersionsLimiter([
|
|
199
|
+
[{ version: 300 }, { version: 299 }],
|
|
200
|
+
[{ version: 298, published: true }, { version: 297 }],
|
|
201
|
+
[{ version: 296, published: true }],
|
|
202
|
+
], urls),
|
|
203
|
+
});
|
|
204
|
+
expect(await client.resolveLatestPlaceVersionAsync(1, 22, 'published')).toBe(298);
|
|
205
|
+
expect(urls).toHaveLength(2);
|
|
206
|
+
expect(urls[1]).toContain('pageToken=token-1');
|
|
207
|
+
});
|
|
208
|
+
it('throws when the place has never been published', async () => {
|
|
209
|
+
const client = new OpenCloudClient({
|
|
210
|
+
apiKey: 'test-key',
|
|
211
|
+
rateLimiter: makeVersionsLimiter([[{ version: 2 }, { version: 1 }]]),
|
|
212
|
+
});
|
|
213
|
+
await expect(client.resolveLatestPlaceVersionAsync(1, 22, 'published')).rejects.toThrowError(/no published version/);
|
|
214
|
+
});
|
|
215
|
+
it('refuses to guess when the API stops paging newest-first', async () => {
|
|
216
|
+
const client = new OpenCloudClient({
|
|
217
|
+
apiKey: 'test-key',
|
|
218
|
+
rateLimiter: makeVersionsLimiter([
|
|
219
|
+
[{ version: 1 }, { version: 2, published: true }],
|
|
220
|
+
]),
|
|
221
|
+
});
|
|
222
|
+
await expect(client.resolveLatestPlaceVersionAsync(1, 22, 'published')).rejects.toThrowError(/no longer paging newest-first/);
|
|
223
|
+
});
|
|
224
|
+
it('refuses a "saved" lookup when the page is not newest-first', async () => {
|
|
225
|
+
// "saved" answers from the first entry, so the ordering guard has to check
|
|
226
|
+
// the whole page before returning or this silently pins the oldest build.
|
|
227
|
+
const client = new OpenCloudClient({
|
|
228
|
+
apiKey: 'test-key',
|
|
229
|
+
rateLimiter: makeVersionsLimiter([
|
|
230
|
+
[{ version: 1 }, { version: 2 }, { version: 3 }],
|
|
231
|
+
]),
|
|
232
|
+
});
|
|
233
|
+
await expect(client.resolveLatestPlaceVersionAsync(1, 22, 'saved')).rejects.toThrowError(/no longer paging newest-first/);
|
|
234
|
+
});
|
|
235
|
+
it('reports the scan limit when every page is unpublished', async () => {
|
|
236
|
+
const pages = Array.from({ length: 25 }, (_, page) => Array.from({ length: 2 }, (_, i) => ({ version: 1000 - page * 2 - i })));
|
|
237
|
+
const client = new OpenCloudClient({
|
|
238
|
+
apiKey: 'test-key',
|
|
239
|
+
rateLimiter: makeVersionsLimiter(pages),
|
|
240
|
+
});
|
|
241
|
+
await expect(client.resolveLatestPlaceVersionAsync(1, 22, 'published')).rejects.toThrowError(/in its most recent 1000 versions/);
|
|
242
|
+
});
|
|
243
|
+
it('throws on an unparseable version path', async () => {
|
|
169
244
|
const fakeLimiter = {
|
|
170
|
-
fetchAsync: vi.fn(async () => new Response(JSON.stringify({
|
|
245
|
+
fetchAsync: vi.fn(async () => new Response(JSON.stringify({
|
|
246
|
+
assetVersions: [{ path: 'assets/22/versions/' }],
|
|
247
|
+
}), { status: 200 })),
|
|
171
248
|
};
|
|
172
249
|
const client = new OpenCloudClient({
|
|
173
250
|
apiKey: 'test-key',
|
|
174
251
|
rateLimiter: fakeLimiter,
|
|
175
252
|
});
|
|
176
|
-
await expect(client.
|
|
253
|
+
await expect(client.resolveLatestPlaceVersionAsync(1, 22, 'saved')).rejects.toThrowError(/unparseable version path/);
|
|
177
254
|
});
|
|
178
255
|
});
|
|
179
256
|
//# sourceMappingURL=open-cloud-client.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"open-cloud-client.test.js","sourceRoot":"","sources":["../../../src/utils/open-cloud/open-cloud-client.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"open-cloud-client.test.js","sourceRoot":"","sources":["../../../src/utils/open-cloud/open-cloud-client.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,6 +15,12 @@ export interface BatchPackageResult {
|
|
|
15
15
|
*/
|
|
16
16
|
tracebackCount: number;
|
|
17
17
|
}
|
|
18
|
+
interface SummaryEntry {
|
|
19
|
+
slug: string;
|
|
20
|
+
success: boolean;
|
|
21
|
+
durationMs?: number;
|
|
22
|
+
error?: string;
|
|
23
|
+
}
|
|
18
24
|
/**
|
|
19
25
|
* Parse the single batch execution's logs into per-package results.
|
|
20
26
|
*
|
|
@@ -31,11 +37,13 @@ export interface BatchPackageResult {
|
|
|
31
37
|
*/
|
|
32
38
|
export declare function parseBatchTestLogs(rawLogs: string, slugMap: Map<string, string>): Map<string, BatchPackageResult>;
|
|
33
39
|
/**
|
|
34
|
-
*
|
|
40
|
+
* Find the summary array in the lines following the summary marker.
|
|
35
41
|
*
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
-
*
|
|
42
|
+
* The marker is printed last, but the API does not deliver messages in order,
|
|
43
|
+
* so unrelated output can land after it. Treating everything past the marker as
|
|
44
|
+
* one JSON blob therefore fails intermittently — the same batch parses on one
|
|
45
|
+
* run and not the next. Scan for the array instead of assuming it is alone.
|
|
39
46
|
*/
|
|
40
|
-
export declare function
|
|
47
|
+
export declare function findSummaryEntries(lines: string[], startIndex: number): SummaryEntry[] | undefined;
|
|
48
|
+
export { countTracebacks } from '../test-log-parser.js';
|
|
41
49
|
//# sourceMappingURL=batch-log-parser.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"batch-log-parser.d.ts","sourceRoot":"","sources":["../../../../src/utils/testing/parsers/batch-log-parser.ts"],"names":[],"mappings":"AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"batch-log-parser.d.ts","sourceRoot":"","sources":["../../../../src/utils/testing/parsers/batch-log-parser.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,gBAAgB,EAGtB,MAAM,uBAAuB,CAAC;AAG/B,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,oEAAoE;IACpE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,6EAA6E;IAC7E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,cAAc,EAAE,MAAM,CAAC;CACxB;AAMD,UAAU,YAAY;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAC3B,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAmQjC;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,MAAM,EAAE,EACf,UAAU,EAAE,MAAM,GACjB,YAAY,EAAE,GAAG,SAAS,CA4B5B;AAED,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { OutputHelper } from '@quenty/cli-output-helpers';
|
|
2
|
-
import { parseTestCounts } from '../test-log-parser.js';
|
|
2
|
+
import { evaluateTestOutcome, parseTestCounts, } from '../test-log-parser.js';
|
|
3
|
+
import { formatTracebacks, parseTracebacks } from './traceback-parser.js';
|
|
3
4
|
const BEGIN_MARKER = '===BATCH_TEST_BEGIN ';
|
|
4
5
|
const END_MARKER = '===BATCH_TEST_END ';
|
|
5
6
|
const SUMMARY_MARKER = '===BATCH_TEST_SUMMARY===';
|
|
@@ -27,12 +28,17 @@ export function parseBatchTestLogs(rawLogs, slugMap) {
|
|
|
27
28
|
}
|
|
28
29
|
// ── Pass 1: Extract per-package log sections from markers ──
|
|
29
30
|
const logSections = new Map();
|
|
31
|
+
/** Sections closed by an END whose BEGIN never arrived — start of output lost. */
|
|
32
|
+
const partialSections = new Set();
|
|
30
33
|
const markerDurations = new Map();
|
|
31
34
|
let currentSlug = null;
|
|
32
35
|
let currentLines = [];
|
|
33
36
|
let summaryLineIndex = -1;
|
|
34
37
|
let beginMarkersSeen = 0;
|
|
35
38
|
let endMarkersSeen = 0;
|
|
39
|
+
let strayEndMarkers = 0;
|
|
40
|
+
/** Only one section can have lost its head: the one the log was cut inside. */
|
|
41
|
+
let headSectionClaimed = false;
|
|
36
42
|
// Matches "<slug> PASS|FAIL [<durationMs>]" — slugs have no whitespace.
|
|
37
43
|
const endInnerPattern = /^(\S+)\s+(?:PASS|FAIL)(?:\s+(\d+))?$/;
|
|
38
44
|
for (let i = 0; i < lines.length; i++) {
|
|
@@ -49,36 +55,57 @@ export function parseBatchTestLogs(rawLogs, slugMap) {
|
|
|
49
55
|
const match = endInnerPattern.exec(inner);
|
|
50
56
|
const endSlug = match ? match[1] : inner;
|
|
51
57
|
const durationStr = match?.[2];
|
|
52
|
-
|
|
53
|
-
|
|
58
|
+
// A section normally closes on the END matching its own BEGIN.
|
|
59
|
+
const closesOwnSection = endSlug === currentSlug;
|
|
60
|
+
// Open Cloud keeps only the tail of a long run's log, so BEGIN — printed
|
|
61
|
+
// first — can be lost while END and the summary survive. Recovering that
|
|
62
|
+
// means letting an END with no open section claim what precedes it, but
|
|
63
|
+
// only where the head can actually have been dropped: before any BEGIN
|
|
64
|
+
// has survived, and only once. Past that point the log is well-formed,
|
|
65
|
+
// and a BEGIN-less END is a message delivered out of order (the API does
|
|
66
|
+
// not order them), which must not be allowed to claim another package's
|
|
67
|
+
// output.
|
|
68
|
+
const closesDroppedHead = currentSlug === null && beginMarkersSeen === 0 && !headSectionClaimed;
|
|
69
|
+
if (closesOwnSection || closesDroppedHead) {
|
|
70
|
+
logSections.set(endSlug, currentLines.join('\n'));
|
|
71
|
+
if (closesDroppedHead) {
|
|
72
|
+
partialSections.add(endSlug);
|
|
73
|
+
headSectionClaimed = true;
|
|
74
|
+
}
|
|
54
75
|
if (durationStr !== undefined) {
|
|
55
|
-
markerDurations.set(
|
|
76
|
+
markerDurations.set(endSlug, parseInt(durationStr, 10));
|
|
56
77
|
}
|
|
57
78
|
currentSlug = null;
|
|
58
79
|
currentLines = [];
|
|
59
80
|
}
|
|
60
|
-
|
|
61
|
-
|
|
81
|
+
else {
|
|
82
|
+
// Reordered marker from another package. Ignore it without resetting
|
|
83
|
+
// state, so the section it interrupted still closes on its own END.
|
|
84
|
+
strayEndMarkers++;
|
|
85
|
+
}
|
|
62
86
|
continue;
|
|
63
87
|
}
|
|
64
88
|
if (trimmed === SUMMARY_MARKER) {
|
|
65
89
|
summaryLineIndex = i;
|
|
66
90
|
break;
|
|
67
91
|
}
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
92
|
+
// Accumulate unconditionally: output that precedes the first surviving
|
|
93
|
+
// BEGIN still belongs to whichever package's END closes it.
|
|
94
|
+
currentLines.push(lines[i]);
|
|
71
95
|
}
|
|
72
96
|
// ── Pass 2: Parse the JSON summary for authoritative pcall results ──
|
|
73
97
|
const summaryResults = new Map();
|
|
74
98
|
const summaryDurations = new Map();
|
|
75
99
|
if (summaryLineIndex >= 0 && summaryLineIndex + 1 < lines.length) {
|
|
76
|
-
const
|
|
77
|
-
|
|
78
|
-
.
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
100
|
+
const entries = findSummaryEntries(lines, summaryLineIndex + 1);
|
|
101
|
+
if (entries === undefined) {
|
|
102
|
+
OutputHelper.verbose(`[batch-log-parser] Failed to parse JSON summary after line ${summaryLineIndex}: ` +
|
|
103
|
+
lines
|
|
104
|
+
.slice(summaryLineIndex + 1, summaryLineIndex + 3)
|
|
105
|
+
.join('\n')
|
|
106
|
+
.slice(0, 200));
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
82
109
|
for (const entry of entries) {
|
|
83
110
|
summaryResults.set(entry.slug, entry.success);
|
|
84
111
|
if (typeof entry.durationMs === 'number') {
|
|
@@ -90,13 +117,14 @@ export function parseBatchTestLogs(rawLogs, slugMap) {
|
|
|
90
117
|
if (failures.length > 0) {
|
|
91
118
|
console.error(`[batch-log-parser] Luau pcall failures: ${JSON.stringify(failures)}`);
|
|
92
119
|
}
|
|
93
|
-
console.error(`[batch-log-parser] Parsed ${entries.length} summary entries, ${failures.length} failures`);
|
|
94
|
-
}
|
|
95
|
-
catch {
|
|
96
|
-
OutputHelper.verbose(`[batch-log-parser] Failed to parse JSON summary: ${jsonLine.slice(0, 200)}`);
|
|
120
|
+
console.error(`[batch-log-parser] Parsed ${entries.length} summary entries, ${failures.length} pcall failures`);
|
|
97
121
|
}
|
|
98
122
|
}
|
|
99
123
|
// ── Warn when the batch produced no recognizable output ──
|
|
124
|
+
if (strayEndMarkers > 0) {
|
|
125
|
+
OutputHelper.verbose(`[batch-log-parser] Ignored ${strayEndMarkers} out-of-order END marker(s); ` +
|
|
126
|
+
'their sections closed on their own boundaries.');
|
|
127
|
+
}
|
|
100
128
|
const noOutputAtAll = logSections.size === 0 && summaryResults.size === 0;
|
|
101
129
|
if (noOutputAtAll) {
|
|
102
130
|
OutputHelper.warn(`[batch-log-parser] No batch markers or summary found in logs (${lines.length} lines, ${rawLogs.length} chars). ` +
|
|
@@ -137,44 +165,54 @@ export function parseBatchTestLogs(rawLogs, slugMap) {
|
|
|
137
165
|
unattributedClaimed = true;
|
|
138
166
|
}
|
|
139
167
|
const summarySuccess = summaryResults.get(slug);
|
|
140
|
-
|
|
141
|
-
//
|
|
142
|
-
//
|
|
143
|
-
// Gate on attributed output only. Unattributed output is shown but not
|
|
144
|
-
// judged: whatever broke attribution is reason enough not to trust which
|
|
145
|
-
// package a failure line belongs to.
|
|
168
|
+
const reasons = [];
|
|
169
|
+
// The pcall result only proves the script did not throw. It is a floor, not
|
|
170
|
+
// a verdict — everything below can fail a run it called successful.
|
|
146
171
|
let success = summarySuccess ?? false;
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
172
|
+
if (summarySuccess === false) {
|
|
173
|
+
reasons.push('the batch runner reported a Luau error');
|
|
174
|
+
}
|
|
175
|
+
else if (summarySuccess === undefined) {
|
|
176
|
+
// Absent from the summary is a different fault from failing in it, and
|
|
177
|
+
// conflating them sends you hunting for a Luau error that never happened.
|
|
178
|
+
reasons.push('this package is missing from the batch summary');
|
|
179
|
+
}
|
|
180
|
+
if (attributedLogs !== undefined) {
|
|
181
|
+
const outcome = evaluateTestOutcome(attributedLogs, {
|
|
182
|
+
requireTestReport: true,
|
|
183
|
+
});
|
|
184
|
+
if (!outcome.success) {
|
|
151
185
|
success = false;
|
|
152
|
-
|
|
186
|
+
reasons.push(...outcome.failureReasons);
|
|
153
187
|
}
|
|
154
188
|
}
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
189
|
+
else {
|
|
190
|
+
// Judged unreadable rather than judged by content: whatever broke
|
|
191
|
+
// attribution is reason enough not to trust which package a line is from.
|
|
158
192
|
success = false;
|
|
159
|
-
|
|
160
|
-
`
|
|
161
|
-
|
|
162
|
-
|
|
193
|
+
reasons.push(`no output could be attributed to this package ` +
|
|
194
|
+
`(${rawLogs.length} chars received, ${beginMarkersSeen} BEGIN markers found)`);
|
|
195
|
+
}
|
|
196
|
+
if (partialSections.has(slug)) {
|
|
197
|
+
OutputHelper.warn(`[batch-log-parser] ${slug}: section closed by its END marker with no BEGIN — ` +
|
|
198
|
+
'the start of this output was dropped by the log window, so the section is partial.');
|
|
199
|
+
}
|
|
200
|
+
// Attribute by script path, not by log position: a deferred callback can
|
|
201
|
+
// fire during another package's section.
|
|
202
|
+
const tracebacks = parseTracebacks(sectionLogs);
|
|
203
|
+
const tracebackCount = tracebacks.reduce((sum, t) => sum + t.count, 0);
|
|
204
|
+
const owned = tracebacks.filter((t) => !t.owner || t.owner === slug);
|
|
205
|
+
if (tracebacks.length > owned.length) {
|
|
206
|
+
OutputHelper.verbose(`[batch-log-parser] ${slug}: ignored ${tracebacks.length - owned.length} traceback(s) belonging to other packages`);
|
|
163
207
|
}
|
|
164
|
-
if (
|
|
165
|
-
|
|
208
|
+
if (owned.length > 0) {
|
|
209
|
+
OutputHelper.warn(`[batch-log-parser] ${slug}: ${owned.length} distinct traceback(s):\n` +
|
|
210
|
+
formatTracebacks(owned));
|
|
166
211
|
}
|
|
167
|
-
|
|
168
|
-
// what failed, so a count read from it could belong to anything. The logs
|
|
169
|
-
// are still shown, so the jest summary remains readable by eye.
|
|
212
|
+
const error = reasons.length > 0 ? reasons.join('; ') : undefined;
|
|
170
213
|
const testCounts = attributedLogs
|
|
171
214
|
? parseTestCounts(attributedLogs)
|
|
172
215
|
: undefined;
|
|
173
|
-
const tracebackCount = countTracebacks(sectionLogs);
|
|
174
|
-
if (tracebackCount > 0) {
|
|
175
|
-
OutputHelper.warn(`[batch-log-parser] ${slug}: ${tracebackCount} Luau traceback(s) in output. ` +
|
|
176
|
-
'Jest does not count these — a deferred-callback crash fires outside any test.');
|
|
177
|
-
}
|
|
178
216
|
// Prefer the JSON summary (authoritative, immune to log reordering);
|
|
179
217
|
// fall back to the END-marker value if the summary was truncated.
|
|
180
218
|
const durationMs = summaryDurations.get(slug) ?? markerDurations.get(slug);
|
|
@@ -191,29 +229,37 @@ export function parseBatchTestLogs(rawLogs, slugMap) {
|
|
|
191
229
|
return results;
|
|
192
230
|
}
|
|
193
231
|
/**
|
|
194
|
-
*
|
|
232
|
+
* Find the summary array in the lines following the summary marker.
|
|
195
233
|
*
|
|
196
|
-
*
|
|
197
|
-
*
|
|
198
|
-
*
|
|
234
|
+
* The marker is printed last, but the API does not deliver messages in order,
|
|
235
|
+
* so unrelated output can land after it. Treating everything past the marker as
|
|
236
|
+
* one JSON blob therefore fails intermittently — the same batch parses on one
|
|
237
|
+
* run and not the next. Scan for the array instead of assuming it is alone.
|
|
199
238
|
*/
|
|
200
|
-
export function
|
|
201
|
-
|
|
202
|
-
|
|
239
|
+
export function findSummaryEntries(lines, startIndex) {
|
|
240
|
+
const MAX_SPAN = 50;
|
|
241
|
+
for (let i = startIndex; i < lines.length; i++) {
|
|
242
|
+
if (!lines[i].trim().startsWith('[')) {
|
|
243
|
+
continue;
|
|
244
|
+
}
|
|
245
|
+
// Normally one line, but allow the array to span a few in case the runner
|
|
246
|
+
// or the transport breaks it up.
|
|
247
|
+
for (let end = i; end < Math.min(lines.length, i + MAX_SPAN); end++) {
|
|
248
|
+
try {
|
|
249
|
+
const parsed = JSON.parse(lines
|
|
250
|
+
.slice(i, end + 1)
|
|
251
|
+
.join('\n')
|
|
252
|
+
.trim());
|
|
253
|
+
if (Array.isArray(parsed)) {
|
|
254
|
+
return parsed;
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
catch {
|
|
258
|
+
// Incomplete so far — grow the window and try again.
|
|
259
|
+
}
|
|
260
|
+
}
|
|
203
261
|
}
|
|
204
|
-
|
|
205
|
-
return cleanLogs.match(/Stack Begin\s/g)?.length ?? 0;
|
|
206
|
-
}
|
|
207
|
-
/**
|
|
208
|
-
* Check specifically for Jest test suite/test failures in logs.
|
|
209
|
-
* Unlike parseTestLogs, this ignores "Stack Begin" runtime errors since
|
|
210
|
-
* those can come from deferred callbacks of other packages in batch mode.
|
|
211
|
-
*/
|
|
212
|
-
function _hasJestFailuresInLogs(rawOutput) {
|
|
213
|
-
const cleanLogs = OutputHelper.stripAnsi(rawOutput);
|
|
214
|
-
const failedSuites = cleanLogs.match(/Test Suites:\s*(\d+)\s+failed/);
|
|
215
|
-
const failedTests = cleanLogs.match(/Tests:\s*(\d+)\s+failed/);
|
|
216
|
-
return ((failedSuites != null && parseInt(failedSuites[1], 10) > 0) ||
|
|
217
|
-
(failedTests != null && parseInt(failedTests[1], 10) > 0));
|
|
262
|
+
return undefined;
|
|
218
263
|
}
|
|
264
|
+
export { countTracebacks } from '../test-log-parser.js';
|
|
219
265
|
//# sourceMappingURL=batch-log-parser.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"batch-log-parser.js","sourceRoot":"","sources":["../../../../src/utils/testing/parsers/batch-log-parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,
|
|
1
|
+
{"version":3,"file":"batch-log-parser.js","sourceRoot":"","sources":["../../../../src/utils/testing/parsers/batch-log-parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { describe, expect, it } from 'vitest';
|
|
2
|
-
import { countTracebacks, parseBatchTestLogs } from './batch-log-parser.js';
|
|
2
|
+
import { countTracebacks, findSummaryEntries, parseBatchTestLogs, } from './batch-log-parser.js';
|
|
3
3
|
const SLUG_MAP = new Map([['egghunt2026', 'egghunt2026']]);
|
|
4
4
|
function buildLogs(section) {
|
|
5
5
|
return [
|
|
@@ -16,18 +16,53 @@ describe('parseBatchTestLogs', () => {
|
|
|
16
16
|
const result = parseBatchTestLogs(logs, SLUG_MAP).get('egghunt2026');
|
|
17
17
|
expect(result?.testCounts).toEqual({ passed: 275, failed: 0, total: 275 });
|
|
18
18
|
});
|
|
19
|
-
it('
|
|
20
|
-
//
|
|
21
|
-
//
|
|
19
|
+
it('attributes a section closed by END when its BEGIN was dropped', () => {
|
|
20
|
+
// Open Cloud keeps only the tail of a long run's log, so BEGIN — printed
|
|
21
|
+
// first — is the first casualty while END and the summary survive.
|
|
22
22
|
const logs = [
|
|
23
|
+
' ✓ some test that survived (3 ms)',
|
|
23
24
|
'Tests: 275 passed, 275 total',
|
|
24
25
|
'===BATCH_TEST_END egghunt2026 PASS 1000===',
|
|
25
26
|
'===BATCH_TEST_SUMMARY===',
|
|
26
27
|
'[{"slug":"egghunt2026","success":true,"durationMs":1000}]',
|
|
27
28
|
].join('\n');
|
|
28
29
|
const result = parseBatchTestLogs(logs, SLUG_MAP).get('egghunt2026');
|
|
30
|
+
expect(result?.success).toBe(true);
|
|
31
|
+
expect(result?.testCounts).toEqual({ passed: 275, failed: 0, total: 275 });
|
|
32
|
+
});
|
|
33
|
+
it('does not let an out-of-order END steal another package’s output', () => {
|
|
34
|
+
// The API does not deliver messages in order, so a stray END can arrive
|
|
35
|
+
// mid-section. Only the first section can have lost its head; past that the
|
|
36
|
+
// log is well-formed and a BEGIN-less END must not claim anything.
|
|
37
|
+
const twoPackages = new Map([
|
|
38
|
+
['alpha', 'alpha'],
|
|
39
|
+
['beta', 'beta'],
|
|
40
|
+
]);
|
|
41
|
+
const logs = [
|
|
42
|
+
'===BATCH_TEST_BEGIN alpha===',
|
|
43
|
+
'Tests: 10 passed, 10 total',
|
|
44
|
+
'===BATCH_TEST_END beta PASS 5===',
|
|
45
|
+
'===BATCH_TEST_END alpha PASS 10===',
|
|
46
|
+
'===BATCH_TEST_SUMMARY===',
|
|
47
|
+
'[{"slug":"alpha","success":true},{"slug":"beta","success":true}]',
|
|
48
|
+
].join('\n');
|
|
49
|
+
const results = parseBatchTestLogs(logs, twoPackages);
|
|
50
|
+
expect(results.get('alpha')?.testCounts?.total).toBe(10);
|
|
51
|
+
// beta never had a section of its own; it must not inherit alpha's.
|
|
52
|
+
expect(results.get('beta')?.testCounts).toBeUndefined();
|
|
53
|
+
expect(results.get('beta')?.success).toBe(false);
|
|
54
|
+
});
|
|
55
|
+
it('fails a pass it cannot read, rather than trusting the pcall', () => {
|
|
56
|
+
// No END marker either, so there is no boundary to attribute output with.
|
|
57
|
+
// The pcall said success, but nothing here saw a test run.
|
|
58
|
+
const logs = [
|
|
59
|
+
'Tests: 275 passed, 275 total',
|
|
60
|
+
'===BATCH_TEST_SUMMARY===',
|
|
61
|
+
'[{"slug":"egghunt2026","success":true,"durationMs":1000}]',
|
|
62
|
+
].join('\n');
|
|
63
|
+
const result = parseBatchTestLogs(logs, SLUG_MAP).get('egghunt2026');
|
|
29
64
|
expect(result?.success).toBe(false);
|
|
30
|
-
expect(result?.error).toContain('
|
|
65
|
+
expect(result?.error).toContain('no output could be attributed');
|
|
31
66
|
expect(result?.testCounts).toBeUndefined();
|
|
32
67
|
});
|
|
33
68
|
it('still shows output it could not attribute', () => {
|
|
@@ -54,6 +89,23 @@ describe('parseBatchTestLogs', () => {
|
|
|
54
89
|
expect(result?.tracebackCount).toBe(1);
|
|
55
90
|
});
|
|
56
91
|
});
|
|
92
|
+
describe('findSummaryEntries', () => {
|
|
93
|
+
it('finds the summary even when output landed after it', () => {
|
|
94
|
+
// Messages are not delivered in order, so a stray line can follow the
|
|
95
|
+
// summary. Treating the whole remainder as one JSON blob made the same
|
|
96
|
+
// batch parse on one run and fail on the next.
|
|
97
|
+
const lines = [
|
|
98
|
+
'[{"slug":"alpha","success":true}]',
|
|
99
|
+
' ✓ a stray line that arrived late',
|
|
100
|
+
];
|
|
101
|
+
expect(findSummaryEntries(lines, 0)).toEqual([
|
|
102
|
+
{ slug: 'alpha', success: true },
|
|
103
|
+
]);
|
|
104
|
+
});
|
|
105
|
+
it('returns undefined when there is no array to find', () => {
|
|
106
|
+
expect(findSummaryEntries(['not json at all'], 0)).toBeUndefined();
|
|
107
|
+
});
|
|
108
|
+
});
|
|
57
109
|
describe('countTracebacks', () => {
|
|
58
110
|
it('counts each traceback separately', () => {
|
|
59
111
|
expect(countTracebacks('Stack Begin\nfoo\nStack End\nStack Begin\n')).toBe(2);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"batch-log-parser.test.js","sourceRoot":"","sources":["../../../../src/utils/testing/parsers/batch-log-parser.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAE9C,OAAO,
|
|
1
|
+
{"version":3,"file":"batch-log-parser.test.js","sourceRoot":"","sources":["../../../../src/utils/testing/parsers/batch-log-parser.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAE9C,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,uBAAuB,CAAC;AAE/B,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;AAE3D,SAAS,SAAS,CAAC,OAAe;IAChC,OAAO;QACL,oCAAoC;QACpC,OAAO;QACP,4CAA4C;QAC5C,0BAA0B;QAC1B,2DAA2D;KAC5D,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAClC,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,MAAM,IAAI,GAAG,SAAS,CAAC,+BAA+B,CAAC,CAAC;QAExD,MAAM,MAAM,GAAG,kBAAkB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAErE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;IAC7E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+DAA+D,EAAE,GAAG,EAAE;QACvE,yEAAyE;QACzE,mEAAmE;QACnE,MAAM,IAAI,GAAG;YACX,oCAAoC;YACpC,+BAA+B;YAC/B,4CAA4C;YAC5C,0BAA0B;YAC1B,2DAA2D;SAC5D,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEb,MAAM,MAAM,GAAG,kBAAkB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAErE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;IAC7E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iEAAiE,EAAE,GAAG,EAAE;QACzE,wEAAwE;QACxE,4EAA4E;QAC5E,mEAAmE;QACnE,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC;YAC1B,CAAC,OAAO,EAAE,OAAO,CAAC;YAClB,CAAC,MAAM,EAAE,MAAM,CAAC;SACjB,CAAC,CAAC;QACH,MAAM,IAAI,GAAG;YACX,8BAA8B;YAC9B,6BAA6B;YAC7B,kCAAkC;YAClC,oCAAoC;YACpC,0BAA0B;YAC1B,kEAAkE;SACnE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEb,MAAM,OAAO,GAAG,kBAAkB,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QAEtD,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACzD,oEAAoE;QACpE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,UAAU,CAAC,CAAC,aAAa,EAAE,CAAC;QACxD,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6DAA6D,EAAE,GAAG,EAAE;QACrE,0EAA0E;QAC1E,2DAA2D;QAC3D,MAAM,IAAI,GAAG;YACX,+BAA+B;YAC/B,0BAA0B;YAC1B,2DAA2D;SAC5D,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEb,MAAM,MAAM,GAAG,kBAAkB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAErE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACpC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,SAAS,CAAC,+BAA+B,CAAC,CAAC;QACjE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,aAAa,EAAE,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACnD,2EAA2E;QAC3E,uCAAuC;QACvC,MAAM,IAAI,GAAG;YACX,yCAAyC;YACzC,0BAA0B;YAC1B,2DAA2D;SAC5D,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEb,MAAM,MAAM,GAAG,kBAAkB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAErE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;QAC7D,MAAM,IAAI,GAAG,SAAS,CACpB;YACE,+BAA+B;YAC/B,yCAAyC;YACzC,aAAa;YACb,sCAAsC;YACtC,WAAW;SACZ,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;QAEF,MAAM,MAAM,GAAG,kBAAkB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAErE,MAAM,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC3C,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAClC,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC5D,sEAAsE;QACtE,uEAAuE;QACvE,+CAA+C;QAC/C,MAAM,KAAK,GAAG;YACZ,mCAAmC;YACnC,oCAAoC;SACrC,CAAC;QAEF,MAAM,CAAC,kBAAkB,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;YAC3C,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE;SACjC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC1D,MAAM,CAAC,kBAAkB,CAAC,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;IACrE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC1C,MAAM,CAAC,eAAe,CAAC,4CAA4C,CAAC,CAAC,CAAC,IAAI,CACxE,CAAC,CACF,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;QAClC,MAAM,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|