@quenty/nevermore-cli 4.18.0 → 4.19.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 +11 -0
- package/dist/commands/tools-command/ci-post-test-results.d.ts.map +1 -1
- package/dist/commands/tools-command/ci-post-test-results.js +18 -0
- package/dist/commands/tools-command/ci-post-test-results.js.map +1 -1
- package/dist/commands/tools-command/strip-sourcemap-jest-command.d.ts.map +1 -1
- package/dist/commands/tools-command/strip-sourcemap-jest-command.js.map +1 -1
- package/dist/utils/linting/parsers/moonwave-parser.d.ts.map +1 -1
- package/dist/utils/linting/parsers/moonwave-parser.js +2 -6
- package/dist/utils/linting/parsers/moonwave-parser.js.map +1 -1
- package/dist/utils/sourcemap/index.d.ts +4 -0
- package/dist/utils/sourcemap/index.d.ts.map +1 -0
- package/dist/utils/sourcemap/index.js +3 -0
- package/dist/utils/sourcemap/index.js.map +1 -0
- package/dist/utils/sourcemap/sourcemap-loader.d.ts +10 -0
- package/dist/utils/sourcemap/sourcemap-loader.d.ts.map +1 -0
- package/dist/utils/sourcemap/sourcemap-loader.js +29 -0
- package/dist/utils/sourcemap/sourcemap-loader.js.map +1 -0
- package/dist/utils/sourcemap/sourcemap-resolver.d.ts +30 -0
- package/dist/utils/sourcemap/sourcemap-resolver.d.ts.map +1 -0
- package/dist/utils/sourcemap/sourcemap-resolver.js +58 -0
- package/dist/utils/sourcemap/sourcemap-resolver.js.map +1 -0
- package/dist/utils/sourcemap/sourcemap-resolver.test.d.ts +2 -0
- package/dist/utils/sourcemap/sourcemap-resolver.test.d.ts.map +1 -0
- package/dist/utils/sourcemap/sourcemap-resolver.test.js +106 -0
- package/dist/utils/sourcemap/sourcemap-resolver.test.js.map +1 -0
- package/dist/utils/sourcemap/sourcemap-types.d.ts +13 -0
- package/dist/utils/sourcemap/sourcemap-types.d.ts.map +1 -0
- package/dist/utils/sourcemap/sourcemap-types.js +2 -0
- package/dist/utils/sourcemap/sourcemap-types.js.map +1 -0
- package/dist/utils/testing/parsers/index.d.ts +3 -0
- package/dist/utils/testing/parsers/index.d.ts.map +1 -0
- package/dist/utils/testing/parsers/index.js +3 -0
- package/dist/utils/testing/parsers/index.js.map +1 -0
- package/dist/utils/testing/parsers/jest-lua-parser.d.ts +41 -0
- package/dist/utils/testing/parsers/jest-lua-parser.d.ts.map +1 -0
- package/dist/utils/testing/parsers/jest-lua-parser.js +222 -0
- package/dist/utils/testing/parsers/jest-lua-parser.js.map +1 -0
- package/dist/utils/testing/parsers/jest-lua-parser.test.d.ts +2 -0
- package/dist/utils/testing/parsers/jest-lua-parser.test.d.ts.map +1 -0
- package/dist/utils/testing/parsers/jest-lua-parser.test.js +297 -0
- package/dist/utils/testing/parsers/jest-lua-parser.test.js.map +1 -0
- package/dist/utils/testing/parsers/roblox-path-resolver.d.ts +24 -0
- package/dist/utils/testing/parsers/roblox-path-resolver.d.ts.map +1 -0
- package/dist/utils/testing/parsers/roblox-path-resolver.js +71 -0
- package/dist/utils/testing/parsers/roblox-path-resolver.js.map +1 -0
- package/dist/utils/testing/parsers/roblox-path-resolver.test.d.ts +2 -0
- package/dist/utils/testing/parsers/roblox-path-resolver.test.d.ts.map +1 -0
- package/dist/utils/testing/parsers/roblox-path-resolver.test.js +76 -0
- package/dist/utils/testing/parsers/roblox-path-resolver.test.js.map +1 -0
- package/dist/utils/testing/test-log-parser.d.ts.map +1 -1
- package/dist/utils/testing/test-log-parser.js +2 -1
- package/dist/utils/testing/test-log-parser.js.map +1 -1
- package/package.json +6 -6
- package/src/commands/tools-command/ci-post-test-results.ts +26 -0
- package/src/commands/tools-command/strip-sourcemap-jest-command.ts +1 -7
- package/src/utils/linting/parsers/moonwave-parser.ts +2 -7
- package/src/utils/sourcemap/index.ts +3 -0
- package/src/utils/sourcemap/sourcemap-loader.ts +33 -0
- package/src/utils/sourcemap/sourcemap-resolver.test.ts +150 -0
- package/src/utils/sourcemap/sourcemap-resolver.ts +75 -0
- package/src/utils/sourcemap/sourcemap-types.ts +12 -0
- package/src/utils/testing/parsers/index.ts +2 -0
- package/src/utils/testing/parsers/jest-lua-parser.test.ts +350 -0
- package/src/utils/testing/parsers/jest-lua-parser.ts +279 -0
- package/src/utils/testing/parsers/roblox-path-resolver.test.ts +129 -0
- package/src/utils/testing/parsers/roblox-path-resolver.ts +85 -0
- package/src/utils/testing/test-log-parser.ts +3 -1
- package/tsconfig.tsbuildinfo +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,17 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
# [4.19.0](https://github.com/Quenty/Nevermore/compare/@quenty/nevermore-cli@4.18.0...@quenty/nevermore-cli@4.19.0) (2026-02-18)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Features
|
|
10
|
+
|
|
11
|
+
* **cli:** add GitHub Actions annotations for test failures ([2fd2f42](https://github.com/Quenty/Nevermore/commit/2fd2f423991ca6bf483fa2396045410f849223b6))
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
6
17
|
# [4.18.0](https://github.com/Quenty/Nevermore/compare/@quenty/nevermore-cli@4.17.0...@quenty/nevermore-cli@4.18.0) (2026-02-18)
|
|
7
18
|
|
|
8
19
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ci-post-test-results.d.ts","sourceRoot":"","sources":["../../../src/commands/tools-command/ci-post-test-results.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"ci-post-test-results.d.ts","sourceRoot":"","sources":["../../../src/commands/tools-command/ci-post-test-results.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAOtC,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAiBhE,UAAU,qBAAsB,SAAQ,mBAAmB;IACzD,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAcD,eAAO,MAAM,wBAAwB,EAAE,aAAa,CAClD,mBAAmB,EACnB,qBAAqB,CAgFtB,CAAC"}
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import { OutputHelper } from '@quenty/cli-output-helpers';
|
|
2
|
+
import { emitAnnotations, writeAnnotationSummaryAsync, } from '@quenty/cli-output-helpers/reporting';
|
|
2
3
|
import { GithubCommentTableReporter, GithubJobSummaryReporter, LoadedStateTracker, createTestCommentConfig, } from '../../utils/testing/reporting/index.js';
|
|
4
|
+
import { parseJestLuaOutput } from '../../utils/testing/parsers/index.js';
|
|
5
|
+
import { tryLoadSourcemapResolver } from '../../utils/sourcemap/index.js';
|
|
3
6
|
/** Create the standard set of GitHub reporters for posting results. */
|
|
4
7
|
function _createGithubReporters(state, concurrency) {
|
|
5
8
|
const config = createTestCommentConfig();
|
|
@@ -51,6 +54,21 @@ export const ciPostTestResultsCommand = {
|
|
|
51
54
|
}
|
|
52
55
|
return;
|
|
53
56
|
}
|
|
57
|
+
// Emit test failure annotations
|
|
58
|
+
const sourcemapResolver = tryLoadSourcemapResolver(process.cwd());
|
|
59
|
+
const allDiagnostics = [];
|
|
60
|
+
for (const failure of state.getFailures()) {
|
|
61
|
+
const diagnostics = parseJestLuaOutput(failure.logs, {
|
|
62
|
+
packageName: failure.packageName,
|
|
63
|
+
sourcemapResolver,
|
|
64
|
+
});
|
|
65
|
+
allDiagnostics.push(...diagnostics);
|
|
66
|
+
}
|
|
67
|
+
if (allDiagnostics.length > 0) {
|
|
68
|
+
OutputHelper.info(`Found ${allDiagnostics.length} test failure(s). Emitting annotations...`);
|
|
69
|
+
emitAnnotations(allDiagnostics);
|
|
70
|
+
await writeAnnotationSummaryAsync('Test Failures', allDiagnostics);
|
|
71
|
+
}
|
|
54
72
|
const reporters = _createGithubReporters(state, 1);
|
|
55
73
|
for (const r of reporters) {
|
|
56
74
|
await r.stopAsync();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ci-post-test-results.js","sourceRoot":"","sources":["../../../src/commands/tools-command/ci-post-test-results.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"ci-post-test-results.js","sourceRoot":"","sources":["../../../src/commands/tools-command/ci-post-test-results.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"strip-sourcemap-jest-command.d.ts","sourceRoot":"","sources":["../../../src/commands/tools-command/strip-sourcemap-jest-command.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAEtC,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"strip-sourcemap-jest-command.d.ts","sourceRoot":"","sources":["../../../src/commands/tools-command/strip-sourcemap-jest-command.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAEtC,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAGhE,UAAU,sBAAuB,SAAQ,mBAAmB;IAC1D,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,yBAAyB,EAAE,aAAa,CAAC,mBAAmB,EAAE,sBAAsB,CAkDhG,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"strip-sourcemap-jest-command.js","sourceRoot":"","sources":["../../../src/commands/tools-command/strip-sourcemap-jest-command.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"strip-sourcemap-jest-command.js","sourceRoot":"","sources":["../../../src/commands/tools-command/strip-sourcemap-jest-command.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAQ1D;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAA+D;IACnG,OAAO,EAAE,sBAAsB;IAC/B,QAAQ,EAAE,wEAAwE;IAClF,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;QACjB,OAAO,KAAK;aACT,MAAM,CAAC,WAAW,EAAE;YACnB,QAAQ,EAAE,wBAAwB;YAClC,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,gBAAgB;SAC1B,CAAC,CAAC;IACP,CAAC;IACD,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;QAChB,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAU,CAAC,CAAC;QAEpD,IAAI,OAAe,CAAC;QACpB,IAAI,CAAC;YACH,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;QACpD,CAAC;QAAC,MAAM,CAAC;YACP,YAAY,CAAC,KAAK,CAAC,wBAAwB,aAAa,EAAE,CAAC,CAAC;YAC5D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAkB,CAAC;QAEvD,IAAI,OAAO,GAAG,CAAC,CAAC;QAEhB,SAAS,eAAe,CAAC,IAAmB;YAC1C,IAAI,CAAC,IAAI,CAAC,QAAQ;gBAAE,OAAO;YAE3B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE;gBAC7C,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;oBAC1B,OAAO,EAAE,CAAC;oBACV,OAAO,KAAK,CAAC;gBACf,CAAC;gBACD,OAAO,IAAI,CAAC;YACd,CAAC,CAAC,CAAC;YAEH,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAClC,eAAe,CAAC,KAAK,CAAC,CAAC;YACzB,CAAC;QACH,CAAC;QAED,eAAe,CAAC,SAAS,CAAC,CAAC;QAE3B,EAAE,CAAC,aAAa,CAAC,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC;QAE3D,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;YAChB,YAAY,CAAC,IAAI,CAAC,WAAW,OAAO,sBAAsB,aAAa,EAAE,CAAC,CAAC;QAC7E,CAAC;IACH,CAAC;CACF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"moonwave-parser.d.ts","sourceRoot":"","sources":["../../../../src/utils/linting/parsers/moonwave-parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,KAAK,UAAU,EAA2B,MAAM,sCAAsC,CAAC;
|
|
1
|
+
{"version":3,"file":"moonwave-parser.d.ts","sourceRoot":"","sources":["../../../../src/utils/linting/parsers/moonwave-parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,KAAK,UAAU,EAA2B,MAAM,sCAAsC,CAAC;AAiChG,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,EAAE,CA6C7D"}
|
|
@@ -19,12 +19,8 @@
|
|
|
19
19
|
* The parser matches the severity header, then looks for the `┌─` location.
|
|
20
20
|
* moonwave only emits errors (no warnings).
|
|
21
21
|
*/
|
|
22
|
+
import { OutputHelper } from '@quenty/cli-output-helpers';
|
|
22
23
|
import { LERNA_PREFIX_PATTERN, LERNA_PREFIX_PATTERN_NC, resolvePackagePath, } from './lerna-utils.js';
|
|
23
|
-
/** Strip all ANSI escape sequences from a string. */
|
|
24
|
-
const ANSI_PATTERN = /\x1b\[[0-9;]*m/g;
|
|
25
|
-
function _stripAnsi(text) {
|
|
26
|
-
return text.replace(ANSI_PATTERN, '');
|
|
27
|
-
}
|
|
28
24
|
/**
|
|
29
25
|
* Matches the severity header line.
|
|
30
26
|
* Optional lerna prefix (captures package name).
|
|
@@ -43,7 +39,7 @@ export function parseMoonwaveOutput(raw) {
|
|
|
43
39
|
const lines = raw.split('\n');
|
|
44
40
|
let pending;
|
|
45
41
|
for (const rawLine of lines) {
|
|
46
|
-
const line =
|
|
42
|
+
const line = OutputHelper.stripAnsi(rawLine);
|
|
47
43
|
// Skip the "aborting due to diagnostic error" summary line
|
|
48
44
|
if (line.includes('aborting due to'))
|
|
49
45
|
continue;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"moonwave-parser.js","sourceRoot":"","sources":["../../../../src/utils/linting/parsers/moonwave-parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAGH,OAAO,
|
|
1
|
+
{"version":3,"file":"moonwave-parser.js","sourceRoot":"","sources":["../../../../src/utils/linting/parsers/moonwave-parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EACL,oBAAoB,EACpB,uBAAuB,EACvB,kBAAkB,GACnB,MAAM,kBAAkB,CAAC;AAE1B;;;;;;GAMG;AACH,MAAM,gBAAgB,GAAG,IAAI,MAAM,CACjC,OAAO,oBAAoB,iCAAiC,CAC7D,CAAC;AAEF;;;GAGG;AACH,MAAM,gBAAgB,GAAG,IAAI,MAAM,CACjC,OAAO,uBAAuB,8BAA8B,CAC7D,CAAC;AAQF,MAAM,UAAU,mBAAmB,CAAC,GAAW;IAC7C,MAAM,WAAW,GAAiB,EAAE,CAAC;IACrC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC9B,IAAI,OAAsC,CAAC;IAE3C,KAAK,MAAM,OAAO,IAAI,KAAK,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAG,YAAY,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QAE7C,2DAA2D;QAC3D,IAAI,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC;YAAE,SAAS;QAE/C,iCAAiC;QACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;QAC9C,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,CAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC;YACpD,OAAO,GAAG;gBACR,QAAQ,EAAE,QAA8B;gBACxC,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE;gBACvB,WAAW;aACZ,CAAC;YACF,SAAS;QACX,CAAC;QAED,kEAAkE;QAClE,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;YAC9C,IAAI,QAAQ,EAAE,CAAC;gBACb,MAAM,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,GAAG,QAAQ,CAAC;gBAC9C,MAAM,IAAI,GAAG,kBAAkB,CAAC,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;gBAC9D,WAAW,CAAC,IAAI,CAAC;oBACf,IAAI;oBACJ,IAAI,EAAE,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC;oBAC3B,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;oBAC5B,QAAQ,EAAE,OAAO,CAAC,QAAQ;oBAC1B,OAAO,EAAE,OAAO,CAAC,OAAO;oBACxB,KAAK,EAAE,UAAU;oBACjB,MAAM,EAAE,UAAU;iBACnB,CAAC,CAAC;gBACH,OAAO,GAAG,SAAS,CAAC;gBACpB,SAAS;YACX,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,WAAW,CAAC;AACrB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/sourcemap/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/sourcemap/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { SourcemapResolver } from './sourcemap-resolver.js';
|
|
2
|
+
/**
|
|
3
|
+
* Try to load a `SourcemapResolver` from `sourcemap.json` in the given
|
|
4
|
+
* directory.
|
|
5
|
+
*
|
|
6
|
+
* Returns `undefined` if the file doesn't exist or can't be parsed — callers
|
|
7
|
+
* should fall back to heuristic resolution.
|
|
8
|
+
*/
|
|
9
|
+
export declare function tryLoadSourcemapResolver(repoRoot: string): SourcemapResolver | undefined;
|
|
10
|
+
//# sourceMappingURL=sourcemap-loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sourcemap-loader.d.ts","sourceRoot":"","sources":["../../../src/utils/sourcemap/sourcemap-loader.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAE5D;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,MAAM,GACf,iBAAiB,GAAG,SAAS,CAkB/B"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import * as fs from 'fs';
|
|
2
|
+
import * as path from 'path';
|
|
3
|
+
import { SourcemapResolver } from './sourcemap-resolver.js';
|
|
4
|
+
/**
|
|
5
|
+
* Try to load a `SourcemapResolver` from `sourcemap.json` in the given
|
|
6
|
+
* directory.
|
|
7
|
+
*
|
|
8
|
+
* Returns `undefined` if the file doesn't exist or can't be parsed — callers
|
|
9
|
+
* should fall back to heuristic resolution.
|
|
10
|
+
*/
|
|
11
|
+
export function tryLoadSourcemapResolver(repoRoot) {
|
|
12
|
+
const sourcemapPath = path.join(repoRoot, 'sourcemap.json');
|
|
13
|
+
let content;
|
|
14
|
+
try {
|
|
15
|
+
content = fs.readFileSync(sourcemapPath, 'utf-8');
|
|
16
|
+
}
|
|
17
|
+
catch {
|
|
18
|
+
return undefined;
|
|
19
|
+
}
|
|
20
|
+
let root;
|
|
21
|
+
try {
|
|
22
|
+
root = JSON.parse(content);
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
return undefined;
|
|
26
|
+
}
|
|
27
|
+
return SourcemapResolver.fromSourcemap(root, repoRoot);
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=sourcemap-loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sourcemap-loader.js","sourceRoot":"","sources":["../../../src/utils/sourcemap/sourcemap-loader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAE5D;;;;;;GAMG;AACH,MAAM,UAAU,wBAAwB,CACtC,QAAgB;IAEhB,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC;IAE5D,IAAI,OAAe,CAAC;IACpB,IAAI,CAAC;QACH,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;IACpD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,IAAmB,CAAC;IACxB,IAAI,CAAC;QACH,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAkB,CAAC;IAC9C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO,iBAAiB,CAAC,aAAa,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AACzD,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { SourcemapNode } from './sourcemap-types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Builds a lookup index from a Rojo sourcemap tree so that dotted Roblox
|
|
4
|
+
* instance paths (e.g. `ServerScriptService.maid.Shared.Maid.spec`) can be
|
|
5
|
+
* resolved to repo-relative filesystem paths.
|
|
6
|
+
*/
|
|
7
|
+
export declare class SourcemapResolver {
|
|
8
|
+
private readonly _index;
|
|
9
|
+
private constructor();
|
|
10
|
+
/**
|
|
11
|
+
* Build a resolver from a parsed sourcemap root node.
|
|
12
|
+
*
|
|
13
|
+
* @param root - The top-level sourcemap node (typically named after the project)
|
|
14
|
+
* @param repoRoot - Absolute path to the repo root, used to convert absolute
|
|
15
|
+
* `filePaths` entries to repo-relative paths
|
|
16
|
+
* @param rootAlias - The Roblox service name that the root node maps to in
|
|
17
|
+
* test output. Defaults to `"ServerScriptService"`.
|
|
18
|
+
*/
|
|
19
|
+
static fromSourcemap(root: SourcemapNode, repoRoot: string, rootAlias?: string): SourcemapResolver;
|
|
20
|
+
/**
|
|
21
|
+
* Resolve a Roblox instance path to a repo-relative filesystem path.
|
|
22
|
+
*
|
|
23
|
+
* Strips any trailing `:LINE` suffix before lookup.
|
|
24
|
+
*
|
|
25
|
+
* @returns The repo-relative path, or `undefined` if the instance path is
|
|
26
|
+
* not in the sourcemap.
|
|
27
|
+
*/
|
|
28
|
+
resolve(instancePath: string): string | undefined;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=sourcemap-resolver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sourcemap-resolver.d.ts","sourceRoot":"","sources":["../../../src/utils/sourcemap/sourcemap-resolver.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE1D;;;;GAIG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAsB;IAE7C,OAAO;IAIP;;;;;;;;OAQG;IACH,MAAM,CAAC,aAAa,CAClB,IAAI,EAAE,aAAa,EACnB,QAAQ,EAAE,MAAM,EAChB,SAAS,SAAwB,GAChC,iBAAiB;IAMpB;;;;;;;OAOG;IACH,OAAO,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;CAIlD"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import * as path from 'path';
|
|
2
|
+
/**
|
|
3
|
+
* Builds a lookup index from a Rojo sourcemap tree so that dotted Roblox
|
|
4
|
+
* instance paths (e.g. `ServerScriptService.maid.Shared.Maid.spec`) can be
|
|
5
|
+
* resolved to repo-relative filesystem paths.
|
|
6
|
+
*/
|
|
7
|
+
export class SourcemapResolver {
|
|
8
|
+
_index;
|
|
9
|
+
constructor(index) {
|
|
10
|
+
this._index = index;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Build a resolver from a parsed sourcemap root node.
|
|
14
|
+
*
|
|
15
|
+
* @param root - The top-level sourcemap node (typically named after the project)
|
|
16
|
+
* @param repoRoot - Absolute path to the repo root, used to convert absolute
|
|
17
|
+
* `filePaths` entries to repo-relative paths
|
|
18
|
+
* @param rootAlias - The Roblox service name that the root node maps to in
|
|
19
|
+
* test output. Defaults to `"ServerScriptService"`.
|
|
20
|
+
*/
|
|
21
|
+
static fromSourcemap(root, repoRoot, rootAlias = 'ServerScriptService') {
|
|
22
|
+
const index = new Map();
|
|
23
|
+
_walkNode(root, rootAlias, repoRoot, index);
|
|
24
|
+
return new SourcemapResolver(index);
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Resolve a Roblox instance path to a repo-relative filesystem path.
|
|
28
|
+
*
|
|
29
|
+
* Strips any trailing `:LINE` suffix before lookup.
|
|
30
|
+
*
|
|
31
|
+
* @returns The repo-relative path, or `undefined` if the instance path is
|
|
32
|
+
* not in the sourcemap.
|
|
33
|
+
*/
|
|
34
|
+
resolve(instancePath) {
|
|
35
|
+
const cleaned = instancePath.replace(/:\d+$/, '');
|
|
36
|
+
return this._index.get(cleaned);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
/** Recursively walk the sourcemap tree, populating the index map. */
|
|
40
|
+
function _walkNode(node, dottedPath, repoRoot, index) {
|
|
41
|
+
const luaFile = _findLuaFilePath(node.filePaths);
|
|
42
|
+
if (luaFile) {
|
|
43
|
+
const relative = path.relative(repoRoot, luaFile);
|
|
44
|
+
index.set(dottedPath, relative);
|
|
45
|
+
}
|
|
46
|
+
if (!node.children)
|
|
47
|
+
return;
|
|
48
|
+
for (const child of node.children) {
|
|
49
|
+
_walkNode(child, `${dottedPath}.${child.name}`, repoRoot, index);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
/** Return the first `.lua` or `.luau` file path from a node's filePaths. */
|
|
53
|
+
function _findLuaFilePath(filePaths) {
|
|
54
|
+
if (!filePaths)
|
|
55
|
+
return undefined;
|
|
56
|
+
return filePaths.find((fp) => fp.endsWith('.lua') || fp.endsWith('.luau'));
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=sourcemap-resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sourcemap-resolver.js","sourceRoot":"","sources":["../../../src/utils/sourcemap/sourcemap-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAG7B;;;;GAIG;AACH,MAAM,OAAO,iBAAiB;IACX,MAAM,CAAsB;IAE7C,YAAoB,KAA0B;QAC5C,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;IACtB,CAAC;IAED;;;;;;;;OAQG;IACH,MAAM,CAAC,aAAa,CAClB,IAAmB,EACnB,QAAgB,EAChB,SAAS,GAAG,qBAAqB;QAEjC,MAAM,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAC;QACxC,SAAS,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;QAC5C,OAAO,IAAI,iBAAiB,CAAC,KAAK,CAAC,CAAC;IACtC,CAAC;IAED;;;;;;;OAOG;IACH,OAAO,CAAC,YAAoB;QAC1B,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QAClD,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAClC,CAAC;CACF;AAED,qEAAqE;AACrE,SAAS,SAAS,CAChB,IAAmB,EACnB,UAAkB,EAClB,QAAgB,EAChB,KAA0B;IAE1B,MAAM,OAAO,GAAG,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACjD,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAClD,KAAK,CAAC,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IAClC,CAAC;IAED,IAAI,CAAC,IAAI,CAAC,QAAQ;QAAE,OAAO;IAE3B,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClC,SAAS,CAAC,KAAK,EAAE,GAAG,UAAU,IAAI,KAAK,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;IACnE,CAAC;AACH,CAAC;AAED,4EAA4E;AAC5E,SAAS,gBAAgB,CAAC,SAAoB;IAC5C,IAAI,CAAC,SAAS;QAAE,OAAO,SAAS,CAAC;IACjC,OAAO,SAAS,CAAC,IAAI,CACnB,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CACpD,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sourcemap-resolver.test.d.ts","sourceRoot":"","sources":["../../../src/utils/sourcemap/sourcemap-resolver.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import { SourcemapResolver } from './sourcemap-resolver.js';
|
|
3
|
+
/**
|
|
4
|
+
* Minimal sourcemap tree that mirrors a typical Nevermore project:
|
|
5
|
+
*
|
|
6
|
+
* Nevermore (root)
|
|
7
|
+
* └─ observablecollection
|
|
8
|
+
* └─ Shared
|
|
9
|
+
* └─ ObservableList
|
|
10
|
+
* └─ ObservableList.spec
|
|
11
|
+
*/
|
|
12
|
+
function _createTestSourcemap(repoRoot) {
|
|
13
|
+
return {
|
|
14
|
+
name: 'Nevermore',
|
|
15
|
+
className: 'DataModel',
|
|
16
|
+
children: [
|
|
17
|
+
{
|
|
18
|
+
name: 'observablecollection',
|
|
19
|
+
className: 'Folder',
|
|
20
|
+
filePaths: [`${repoRoot}/src/observablecollection/default.project.json`],
|
|
21
|
+
children: [
|
|
22
|
+
{
|
|
23
|
+
name: 'Shared',
|
|
24
|
+
className: 'Folder',
|
|
25
|
+
children: [
|
|
26
|
+
{
|
|
27
|
+
name: 'ObservableList',
|
|
28
|
+
className: 'ModuleScript',
|
|
29
|
+
filePaths: [
|
|
30
|
+
`${repoRoot}/src/observablecollection/src/Shared/ObservableList.lua`,
|
|
31
|
+
],
|
|
32
|
+
children: [
|
|
33
|
+
{
|
|
34
|
+
name: 'ObservableList.spec',
|
|
35
|
+
className: 'ModuleScript',
|
|
36
|
+
filePaths: [
|
|
37
|
+
`${repoRoot}/src/observablecollection/src/Shared/ObservableList.spec.lua`,
|
|
38
|
+
],
|
|
39
|
+
},
|
|
40
|
+
],
|
|
41
|
+
},
|
|
42
|
+
],
|
|
43
|
+
},
|
|
44
|
+
],
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
name: 'maid',
|
|
48
|
+
className: 'Folder',
|
|
49
|
+
filePaths: [`${repoRoot}/src/maid/default.project.json`],
|
|
50
|
+
children: [
|
|
51
|
+
{
|
|
52
|
+
name: 'Shared',
|
|
53
|
+
className: 'Folder',
|
|
54
|
+
children: [
|
|
55
|
+
{
|
|
56
|
+
name: 'Maid',
|
|
57
|
+
className: 'ModuleScript',
|
|
58
|
+
filePaths: [`${repoRoot}/src/maid/src/Shared/Maid.lua`],
|
|
59
|
+
children: [
|
|
60
|
+
{
|
|
61
|
+
name: 'Maid.spec',
|
|
62
|
+
className: 'ModuleScript',
|
|
63
|
+
filePaths: [
|
|
64
|
+
`${repoRoot}/src/maid/src/Shared/Maid.spec.lua`,
|
|
65
|
+
],
|
|
66
|
+
},
|
|
67
|
+
],
|
|
68
|
+
},
|
|
69
|
+
],
|
|
70
|
+
},
|
|
71
|
+
],
|
|
72
|
+
},
|
|
73
|
+
],
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
describe('SourcemapResolver', () => {
|
|
77
|
+
const repoRoot = '/repo';
|
|
78
|
+
const resolver = SourcemapResolver.fromSourcemap(_createTestSourcemap(repoRoot), repoRoot);
|
|
79
|
+
it('resolves a spec file instance path', () => {
|
|
80
|
+
expect(resolver.resolve('ServerScriptService.observablecollection.Shared.ObservableList.ObservableList.spec')).toBe('src/observablecollection/src/Shared/ObservableList.spec.lua');
|
|
81
|
+
});
|
|
82
|
+
it('resolves a module instance path', () => {
|
|
83
|
+
expect(resolver.resolve('ServerScriptService.observablecollection.Shared.ObservableList')).toBe('src/observablecollection/src/Shared/ObservableList.lua');
|
|
84
|
+
});
|
|
85
|
+
it('strips :LINE suffix before lookup', () => {
|
|
86
|
+
expect(resolver.resolve('ServerScriptService.maid.Shared.Maid.Maid.spec:23')).toBe('src/maid/src/Shared/Maid.spec.lua');
|
|
87
|
+
});
|
|
88
|
+
it('returns undefined for unknown paths', () => {
|
|
89
|
+
expect(resolver.resolve('ServerScriptService.nonexistent.Shared.Foo')).toBeUndefined();
|
|
90
|
+
});
|
|
91
|
+
it('skips nodes that only have .project.json (no lua files)', () => {
|
|
92
|
+
// The "observablecollection" folder node only has a .project.json filePath.
|
|
93
|
+
// It should not be indexed.
|
|
94
|
+
expect(resolver.resolve('ServerScriptService.observablecollection')).toBeUndefined();
|
|
95
|
+
});
|
|
96
|
+
it('resolves paths in a different package', () => {
|
|
97
|
+
expect(resolver.resolve('ServerScriptService.maid.Shared.Maid')).toBe('src/maid/src/Shared/Maid.lua');
|
|
98
|
+
});
|
|
99
|
+
it('supports a custom root alias', () => {
|
|
100
|
+
const customResolver = SourcemapResolver.fromSourcemap(_createTestSourcemap(repoRoot), repoRoot, 'ReplicatedStorage');
|
|
101
|
+
expect(customResolver.resolve('ReplicatedStorage.maid.Shared.Maid')).toBe('src/maid/src/Shared/Maid.lua');
|
|
102
|
+
// ServerScriptService should NOT work with a different alias
|
|
103
|
+
expect(customResolver.resolve('ServerScriptService.maid.Shared.Maid')).toBeUndefined();
|
|
104
|
+
});
|
|
105
|
+
});
|
|
106
|
+
//# sourceMappingURL=sourcemap-resolver.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sourcemap-resolver.test.js","sourceRoot":"","sources":["../../../src/utils/sourcemap/sourcemap-resolver.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A node in the Rojo sourcemap tree (generated by `rojo sourcemap --absolute`).
|
|
3
|
+
*
|
|
4
|
+
* Each node represents a Roblox instance and optionally maps to one or more
|
|
5
|
+
* filesystem paths.
|
|
6
|
+
*/
|
|
7
|
+
export interface SourcemapNode {
|
|
8
|
+
name: string;
|
|
9
|
+
className?: string;
|
|
10
|
+
children?: SourcemapNode[];
|
|
11
|
+
filePaths?: string[];
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=sourcemap-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sourcemap-types.d.ts","sourceRoot":"","sources":["../../../src/utils/sourcemap/sourcemap-types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,aAAa,EAAE,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sourcemap-types.js","sourceRoot":"","sources":["../../../src/utils/sourcemap/sourcemap-types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/utils/testing/parsers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/utils/testing/parsers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parser for Jest-lua verbose output (`verbose=true, ci=true`).
|
|
3
|
+
*
|
|
4
|
+
* Handles two failure modes:
|
|
5
|
+
*
|
|
6
|
+
* 1. **Jest assertion failures** — `●` blocks:
|
|
7
|
+
* ```
|
|
8
|
+
* ● ObservableList > add and remove > should track count
|
|
9
|
+
*
|
|
10
|
+
* expect(received).toEqual(expected)
|
|
11
|
+
*
|
|
12
|
+
* Expected: 3
|
|
13
|
+
* Received: 2
|
|
14
|
+
*
|
|
15
|
+
* at ServerScriptService.observablecollection.Shared.ObservableList.spec:45
|
|
16
|
+
* ```
|
|
17
|
+
*
|
|
18
|
+
* 2. **Runtime errors** — `Stack Begin`/`Stack End` blocks:
|
|
19
|
+
* ```
|
|
20
|
+
* Error: attempt to index nil with "Connect"
|
|
21
|
+
* Stack Begin
|
|
22
|
+
* Script 'ServerScriptService.maid.Shared.Maid.spec', Line 23
|
|
23
|
+
* Stack End
|
|
24
|
+
* ```
|
|
25
|
+
*
|
|
26
|
+
* The parser is intentionally lenient — it extracts what it can, skips what
|
|
27
|
+
* it can't, and never crashes on unexpected input.
|
|
28
|
+
*/
|
|
29
|
+
import { type Diagnostic } from '@quenty/cli-output-helpers/reporting';
|
|
30
|
+
import type { SourcemapResolver } from '../../sourcemap/index.js';
|
|
31
|
+
/**
|
|
32
|
+
* Parse Jest-lua verbose output into `Diagnostic[]`.
|
|
33
|
+
*
|
|
34
|
+
* @param raw - Raw test output (may include ANSI codes)
|
|
35
|
+
* @param options.packageName - Package name for fallback path resolution
|
|
36
|
+
*/
|
|
37
|
+
export declare function parseJestLuaOutput(raw: string, options: {
|
|
38
|
+
packageName: string;
|
|
39
|
+
sourcemapResolver?: SourcemapResolver;
|
|
40
|
+
}): Diagnostic[];
|
|
41
|
+
//# sourceMappingURL=jest-lua-parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jest-lua-parser.d.ts","sourceRoot":"","sources":["../../../../src/utils/testing/parsers/jest-lua-parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAGH,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,sCAAsC,CAAC;AAEvE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AA8DlE;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,MAAM,EACX,OAAO,EAAE;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,iBAAiB,CAAC,EAAE,iBAAiB,CAAA;CAAE,GACtE,UAAU,EAAE,CA+Kd"}
|