@rezless/vitest 0.1.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 (63) hide show
  1. package/LICENSE +202 -0
  2. package/NOTICE +32 -0
  3. package/dist/cli.d.ts +3 -0
  4. package/dist/cli.d.ts.map +1 -0
  5. package/dist/cli.js +140 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/coverage-aggregate.d.ts +22 -0
  8. package/dist/coverage-aggregate.d.ts.map +1 -0
  9. package/dist/coverage-aggregate.js +65 -0
  10. package/dist/coverage-aggregate.js.map +1 -0
  11. package/dist/coverage-config.d.ts +10 -0
  12. package/dist/coverage-config.d.ts.map +1 -0
  13. package/dist/coverage-config.js +12 -0
  14. package/dist/coverage-config.js.map +1 -0
  15. package/dist/coverage-registry.d.ts +13 -0
  16. package/dist/coverage-registry.d.ts.map +1 -0
  17. package/dist/coverage-registry.js +111 -0
  18. package/dist/coverage-registry.js.map +1 -0
  19. package/dist/coverage-setup.d.ts +25 -0
  20. package/dist/coverage-setup.d.ts.map +1 -0
  21. package/dist/coverage-setup.js +42 -0
  22. package/dist/coverage-setup.js.map +1 -0
  23. package/dist/format/console.d.ts +7 -0
  24. package/dist/format/console.d.ts.map +1 -0
  25. package/dist/format/console.js +93 -0
  26. package/dist/format/console.js.map +1 -0
  27. package/dist/format/html.d.ts +11 -0
  28. package/dist/format/html.d.ts.map +1 -0
  29. package/dist/format/html.js +291 -0
  30. package/dist/format/html.js.map +1 -0
  31. package/dist/format/istanbul.d.ts +47 -0
  32. package/dist/format/istanbul.d.ts.map +1 -0
  33. package/dist/format/istanbul.js +50 -0
  34. package/dist/format/istanbul.js.map +1 -0
  35. package/dist/format/lcov.d.ts +19 -0
  36. package/dist/format/lcov.d.ts.map +1 -0
  37. package/dist/format/lcov.js +74 -0
  38. package/dist/format/lcov.js.map +1 -0
  39. package/dist/format/summary.d.ts +25 -0
  40. package/dist/format/summary.d.ts.map +1 -0
  41. package/dist/format/summary.js +48 -0
  42. package/dist/format/summary.js.map +1 -0
  43. package/dist/index.d.ts +7 -0
  44. package/dist/index.d.ts.map +1 -0
  45. package/dist/index.js +10 -0
  46. package/dist/index.js.map +1 -0
  47. package/dist/loadLinkset.d.ts +38 -0
  48. package/dist/loadLinkset.d.ts.map +1 -0
  49. package/dist/loadLinkset.js +77 -0
  50. package/dist/loadLinkset.js.map +1 -0
  51. package/dist/loadScript.d.ts +24 -0
  52. package/dist/loadScript.d.ts.map +1 -0
  53. package/dist/loadScript.js +45 -0
  54. package/dist/loadScript.js.map +1 -0
  55. package/dist/matchers.d.ts +34 -0
  56. package/dist/matchers.d.ts.map +1 -0
  57. package/dist/matchers.js +120 -0
  58. package/dist/matchers.js.map +1 -0
  59. package/dist/reporter.d.ts +82 -0
  60. package/dist/reporter.d.ts.map +1 -0
  61. package/dist/reporter.js +166 -0
  62. package/dist/reporter.js.map +1 -0
  63. package/package.json +69 -0
@@ -0,0 +1,82 @@
1
+ /** When the reporter should activate. */
2
+ export type ReporterMode = 'auto' | 'always' | 'never';
3
+ export interface LslCoverageReporterOptions {
4
+ /**
5
+ * Activation policy:
6
+ * - 'auto' (default): activate when Vitest's own coverage flag is on
7
+ * (i.e. `vitest run --coverage` or `coverage.enabled: true` in
8
+ * `vitest.config.ts`), or when `LSL_COVERAGE=1` is in the env.
9
+ * - 'always': activate every run regardless of the coverage flag.
10
+ * - 'never': stay dormant. Useful for conditional config.
11
+ */
12
+ readonly mode?: ReporterMode;
13
+ /** Output directory; defaults to `<vitest reportsDirectory>/lsl` (or `coverage/lsl`). */
14
+ readonly outputDir?: string;
15
+ /** Skip the per-file `lcov.info` write. */
16
+ readonly disableLcov?: boolean;
17
+ /** Skip the `coverage-final.json` write. */
18
+ readonly disableIstanbul?: boolean;
19
+ /** Skip the `coverage-summary.json` write. */
20
+ readonly disableSummary?: boolean;
21
+ /** Skip the browseable `html/` directory. */
22
+ readonly disableHtml?: boolean;
23
+ /** Skip the end-of-run console table. */
24
+ readonly disableConsole?: boolean;
25
+ /**
26
+ * Include reports for synthetic filenames — `<inline>`, names without a
27
+ * path separator, or paths that don't exist on disk. Defaults to false
28
+ * since these are almost always throwaway test fixtures.
29
+ */
30
+ readonly includeFixtures?: boolean;
31
+ }
32
+ interface VitestLike {
33
+ config?: {
34
+ coverage?: {
35
+ enabled?: boolean;
36
+ reportsDirectory?: string;
37
+ };
38
+ setupFiles?: string[] | string;
39
+ };
40
+ /** Vitest 4 exposes per-project resolved configs here. */
41
+ projects?: ReadonlyArray<{
42
+ config?: {
43
+ setupFiles?: string[] | string;
44
+ };
45
+ vitenode?: unknown;
46
+ }>;
47
+ }
48
+ /**
49
+ * Vitest custom reporter for LSL script coverage.
50
+ *
51
+ * In its default `mode: 'auto'`, the reporter is dormant unless Vitest's
52
+ * `--coverage` flag is set. When active, it enables collection in test
53
+ * workers (via `LSL_COVERAGE=1`), reads per-worker coverage dumps at
54
+ * end-of-run, and writes:
55
+ * - `<outputDir>/lcov.info` (LCOV)
56
+ * - `<outputDir>/coverage-final.json` (Istanbul)
57
+ * - a console summary table
58
+ *
59
+ * Wire it up once in your `vitest.config.ts`:
60
+ *
61
+ * import { LslCoverageReporter } from '@rezless/vitest/reporter'
62
+ * export default defineConfig({
63
+ * test: {
64
+ * reporters: ['default', new LslCoverageReporter()],
65
+ * },
66
+ * })
67
+ *
68
+ * Then `vitest run --coverage` triggers both the JS and LSL coverage
69
+ * pipelines; plain `vitest run` stays free of coverage overhead.
70
+ */
71
+ export declare class LslCoverageReporter {
72
+ private readonly opts;
73
+ private outputDir;
74
+ private active;
75
+ constructor(opts?: LslCoverageReporterOptions);
76
+ onInit(vitest?: VitestLike): void;
77
+ private injectSetupFile;
78
+ onTestRunEnd(): void;
79
+ private shouldActivate;
80
+ }
81
+ export {};
82
+ //# sourceMappingURL=reporter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reporter.d.ts","sourceRoot":"","sources":["../src/reporter.ts"],"names":[],"mappings":"AAWA,yCAAyC;AACzC,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAA;AAEtD,MAAM,WAAW,0BAA0B;IACzC;;;;;;;OAOG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,YAAY,CAAA;IAC5B,yFAAyF;IACzF,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;IAC3B,2CAA2C;IAC3C,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAA;IAC9B,4CAA4C;IAC5C,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAA;IAClC,8CAA8C;IAC9C,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAA;IACjC,6CAA6C;IAC7C,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAA;IAC9B,yCAAyC;IACzC,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAA;IACjC;;;;OAIG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAA;CACnC;AAED,UAAU,UAAU;IAClB,MAAM,CAAC,EAAE;QACP,QAAQ,CAAC,EAAE;YAAE,OAAO,CAAC,EAAE,OAAO,CAAC;YAAC,gBAAgB,CAAC,EAAE,MAAM,CAAA;SAAE,CAAA;QAC3D,UAAU,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAAA;KAC/B,CAAA;IACD,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,aAAa,CAAC;QACvB,MAAM,CAAC,EAAE;YAAE,UAAU,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAAA;SAAE,CAAA;QAC3C,QAAQ,CAAC,EAAE,OAAO,CAAA;KACnB,CAAC,CAAA;CACH;AAUD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA4B;IACjD,OAAO,CAAC,SAAS,CAAoB;IACrC,OAAO,CAAC,MAAM,CAAQ;gBAEV,IAAI,GAAE,0BAA+B;IAKjD,MAAM,CAAC,MAAM,CAAC,EAAE,UAAU,GAAG,IAAI;IAyBjC,OAAO,CAAC,eAAe;IAsBvB,YAAY,IAAI,IAAI;IAoEpB,OAAO,CAAC,cAAc;CASvB"}
@@ -0,0 +1,166 @@
1
+ import * as fs from 'node:fs';
2
+ import * as path from 'node:path';
3
+ import { fileURLToPath } from 'node:url';
4
+ import { renderLcov } from './format/lcov.js';
5
+ import { renderIstanbul } from './format/istanbul.js';
6
+ import { renderConsoleSummary } from './format/console.js';
7
+ import { renderHtml } from './format/html.js';
8
+ import { renderSummary } from './format/summary.js';
9
+ import { readWorkerDumps, clearWorkerDumps } from './coverage-registry.js';
10
+ import { aggregateReports } from './coverage-aggregate.js';
11
+ /** Resolves to the absolute file path of `coverage-setup.js` next to this file. */
12
+ function coverageSetupFilePath() {
13
+ // import.meta.url points to dist/reporter.js once compiled; the setup
14
+ // file lives next to it. fileURLToPath handles cross-platform quirks
15
+ // (Windows drive letters, percent-encoded paths) that URL.pathname mangles.
16
+ return fileURLToPath(new URL('./coverage-setup.js', import.meta.url));
17
+ }
18
+ /**
19
+ * Vitest custom reporter for LSL script coverage.
20
+ *
21
+ * In its default `mode: 'auto'`, the reporter is dormant unless Vitest's
22
+ * `--coverage` flag is set. When active, it enables collection in test
23
+ * workers (via `LSL_COVERAGE=1`), reads per-worker coverage dumps at
24
+ * end-of-run, and writes:
25
+ * - `<outputDir>/lcov.info` (LCOV)
26
+ * - `<outputDir>/coverage-final.json` (Istanbul)
27
+ * - a console summary table
28
+ *
29
+ * Wire it up once in your `vitest.config.ts`:
30
+ *
31
+ * import { LslCoverageReporter } from '@rezless/vitest/reporter'
32
+ * export default defineConfig({
33
+ * test: {
34
+ * reporters: ['default', new LslCoverageReporter()],
35
+ * },
36
+ * })
37
+ *
38
+ * Then `vitest run --coverage` triggers both the JS and LSL coverage
39
+ * pipelines; plain `vitest run` stays free of coverage overhead.
40
+ */
41
+ export class LslCoverageReporter {
42
+ opts;
43
+ outputDir;
44
+ active = false;
45
+ constructor(opts = {}) {
46
+ this.opts = opts;
47
+ this.outputDir = opts.outputDir;
48
+ }
49
+ onInit(vitest) {
50
+ this.active = this.shouldActivate(vitest);
51
+ if (!this.active)
52
+ return;
53
+ // Resolve output dir: explicit option > Vitest's reportsDirectory + /lsl > coverage/lsl.
54
+ const fallback = path.join(process.cwd(), 'coverage', 'lsl');
55
+ if (!this.outputDir) {
56
+ const reportsDir = vitest?.config?.coverage?.reportsDirectory;
57
+ this.outputDir = reportsDir ? path.join(reportsDir, 'lsl') : fallback;
58
+ }
59
+ // Tell workers to collect (env var is read by loadScript / loadLinkset).
60
+ process.env['LSL_COVERAGE'] = '1';
61
+ // Inject our coverage-setup.js into vitest's setupFiles so each worker
62
+ // drains its registry to disk after every test file. Without this, the
63
+ // worker-thread's `process.on('exit')` doesn't fire until after the
64
+ // reporter's onTestRunEnd has already run.
65
+ this.injectSetupFile(vitest);
66
+ // Best-effort: clear stale per-worker dumps from a previous run so we
67
+ // don't merge old coverage into the new report.
68
+ clearWorkerDumps();
69
+ }
70
+ injectSetupFile(vitest) {
71
+ if (!vitest)
72
+ return;
73
+ const setupPath = coverageSetupFilePath();
74
+ const addTo = (target) => {
75
+ if (!target)
76
+ return;
77
+ const current = target.setupFiles;
78
+ if (!current) {
79
+ target.setupFiles = [setupPath];
80
+ return;
81
+ }
82
+ if (Array.isArray(current)) {
83
+ if (!current.includes(setupPath))
84
+ current.push(setupPath);
85
+ return;
86
+ }
87
+ if (current !== setupPath)
88
+ target.setupFiles = [current, setupPath];
89
+ };
90
+ addTo(vitest.config);
91
+ if (vitest.projects) {
92
+ for (const p of vitest.projects)
93
+ addTo(p.config);
94
+ }
95
+ }
96
+ onTestRunEnd() {
97
+ if (!this.active)
98
+ return;
99
+ const dumps = readWorkerDumps();
100
+ if (dumps.length === 0) {
101
+ if (!this.opts.disableConsole) {
102
+ process.stdout.write('No LSL coverage collected.\n');
103
+ }
104
+ // Clear any malformed dump files so a future run with valid data
105
+ // starts from a clean slate without manual intervention.
106
+ clearWorkerDumps();
107
+ return;
108
+ }
109
+ const aggregateOpts = this.opts.includeFixtures !== undefined
110
+ ? { includeFixtures: this.opts.includeFixtures }
111
+ : {};
112
+ const merged = aggregateReports(dumps, aggregateOpts);
113
+ if (merged.length === 0) {
114
+ if (!this.opts.disableConsole) {
115
+ process.stdout.write('No coverable LSL scripts after filtering — pass `includeFixtures: true` to keep test fixtures.\n');
116
+ }
117
+ clearWorkerDumps();
118
+ return;
119
+ }
120
+ const outputDir = this.outputDir ?? path.join(process.cwd(), 'coverage', 'lsl');
121
+ fs.mkdirSync(outputDir, { recursive: true });
122
+ if (!this.opts.disableLcov) {
123
+ const lcovPath = path.join(outputDir, 'lcov.info');
124
+ fs.writeFileSync(lcovPath, renderLcov(merged));
125
+ }
126
+ if (!this.opts.disableIstanbul) {
127
+ const istanbulPath = path.join(outputDir, 'coverage-final.json');
128
+ fs.writeFileSync(istanbulPath, JSON.stringify(renderIstanbul(merged), null, 2));
129
+ }
130
+ // Summary is its own toggle so CI tooling that only consumes the
131
+ // summary can still get it when the heavier per-file Istanbul detail
132
+ // is turned off.
133
+ if (!this.opts.disableSummary) {
134
+ const summaryPath = path.join(outputDir, 'coverage-summary.json');
135
+ fs.writeFileSync(summaryPath, JSON.stringify(renderSummary(merged), null, 2));
136
+ }
137
+ if (!this.opts.disableHtml) {
138
+ const htmlDir = path.join(outputDir, 'html');
139
+ fs.mkdirSync(htmlDir, { recursive: true });
140
+ for (const [name, content] of renderHtml(merged)) {
141
+ fs.writeFileSync(path.join(htmlDir, name), content);
142
+ }
143
+ }
144
+ if (!this.opts.disableConsole) {
145
+ process.stdout.write('\n' + renderConsoleSummary(merged));
146
+ if (!this.opts.disableHtml) {
147
+ process.stdout.write(`\nLSL HTML report: ${path.join(outputDir, 'html', 'index.html')}\n`);
148
+ }
149
+ }
150
+ clearWorkerDumps();
151
+ }
152
+ shouldActivate(vitest) {
153
+ const mode = this.opts.mode ?? 'auto';
154
+ if (mode === 'always')
155
+ return true;
156
+ if (mode === 'never')
157
+ return false;
158
+ // auto: track Vitest's coverage flag, with LSL_COVERAGE=1 as a manual override.
159
+ if (vitest?.config?.coverage?.enabled)
160
+ return true;
161
+ if (process.env['LSL_COVERAGE'] === '1')
162
+ return true;
163
+ return false;
164
+ }
165
+ }
166
+ //# sourceMappingURL=reporter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reporter.js","sourceRoot":"","sources":["../src/reporter.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,69 @@
1
+ {
2
+ "name": "@rezless/vitest",
3
+ "version": "0.1.0",
4
+ "description": "Vitest-style DSL for testing Linden Scripting Language (LSL) scripts.",
5
+ "license": "Apache-2.0",
6
+ "author": "i-doll",
7
+ "homepage": "https://github.com/i-doll/rezless#readme",
8
+ "bugs": {
9
+ "url": "https://github.com/i-doll/rezless/issues"
10
+ },
11
+ "repository": {
12
+ "type": "git",
13
+ "url": "git+https://github.com/i-doll/rezless.git",
14
+ "directory": "packages/vitest"
15
+ },
16
+ "keywords": [
17
+ "lsl",
18
+ "linden-scripting-language",
19
+ "second-life",
20
+ "vitest",
21
+ "testing",
22
+ "test-framework",
23
+ "rezless"
24
+ ],
25
+ "type": "module",
26
+ "main": "./dist/index.js",
27
+ "types": "./dist/index.d.ts",
28
+ "exports": {
29
+ ".": {
30
+ "types": "./dist/index.d.ts",
31
+ "import": "./dist/index.js"
32
+ },
33
+ "./reporter": {
34
+ "types": "./dist/reporter.d.ts",
35
+ "import": "./dist/reporter.js"
36
+ },
37
+ "./coverage-setup": {
38
+ "types": "./dist/coverage-setup.d.ts",
39
+ "import": "./dist/coverage-setup.js"
40
+ }
41
+ },
42
+ "bin": {
43
+ "rezless-coverage": "./dist/cli.js"
44
+ },
45
+ "files": [
46
+ "dist",
47
+ "LICENSE",
48
+ "NOTICE",
49
+ "README.md"
50
+ ],
51
+ "publishConfig": {
52
+ "access": "public"
53
+ },
54
+ "dependencies": {
55
+ "@rezless/parser": "0.1.0",
56
+ "@rezless/vm": "0.1.0"
57
+ },
58
+ "peerDependencies": {
59
+ "vitest": "^4.1.5"
60
+ },
61
+ "devDependencies": {
62
+ "typescript": "^5.7.0",
63
+ "vitest": "^4.1.5"
64
+ },
65
+ "scripts": {
66
+ "build": "tsc -p tsconfig.json",
67
+ "typecheck": "tsc -p tsconfig.json --noEmit"
68
+ }
69
+ }