@runelight/changes 0.0.10
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/LICENSE +21 -0
- package/dist/index.d.ts +219 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +532 -0
- package/dist/index.js.map +1 -0
- package/package.json +45 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 tuoxiansp
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @internal Shared implementation detail for Runelight workspace change classification.
|
|
3
|
+
*/
|
|
4
|
+
export type RunelightVisualDiffComponent = {
|
|
5
|
+
componentName?: string;
|
|
6
|
+
coordinate: string;
|
|
7
|
+
dependencies?: readonly string[];
|
|
8
|
+
frameDependencies?: Record<string, readonly string[]>;
|
|
9
|
+
exportName: string;
|
|
10
|
+
filePath: string;
|
|
11
|
+
frames?: readonly {
|
|
12
|
+
name: string;
|
|
13
|
+
}[];
|
|
14
|
+
frameVisualSignatures?: Record<string, string>;
|
|
15
|
+
sourceHash?: string;
|
|
16
|
+
visualSignature?: string;
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* @internal Shared implementation detail for Runelight workspace change classification.
|
|
20
|
+
*/
|
|
21
|
+
export type RunelightVisualDiffFile = {
|
|
22
|
+
components: readonly RunelightVisualDiffComponent[];
|
|
23
|
+
path: string;
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* @internal Shared implementation detail for Runelight workspace change classification.
|
|
27
|
+
*/
|
|
28
|
+
export type RunelightVisualDiffGraphInput = {
|
|
29
|
+
files: readonly RunelightVisualDiffFile[];
|
|
30
|
+
};
|
|
31
|
+
/**
|
|
32
|
+
* @internal Shared implementation detail for Runelight workspace change classification.
|
|
33
|
+
*/
|
|
34
|
+
export type RunelightWorkspaceVisualChangeKind = "changed" | "unchanged" | "unknown";
|
|
35
|
+
/**
|
|
36
|
+
* @internal Shared implementation detail for Runelight workspace change classification.
|
|
37
|
+
*/
|
|
38
|
+
export type RunelightWorkspaceVisualFrameChangeKind = "added" | "deleted" | "changed" | "unchanged" | "unknown";
|
|
39
|
+
/**
|
|
40
|
+
* @internal Shared implementation detail for Runelight workspace change classification.
|
|
41
|
+
*/
|
|
42
|
+
export type RunelightWorkspaceVisualFrameChange = {
|
|
43
|
+
kind: RunelightWorkspaceVisualFrameChangeKind;
|
|
44
|
+
name: string;
|
|
45
|
+
};
|
|
46
|
+
/**
|
|
47
|
+
* @internal Shared implementation detail for Runelight workspace change classification.
|
|
48
|
+
*/
|
|
49
|
+
export type RunelightWorkspaceVisualChangeClassification = {
|
|
50
|
+
changedComponentKeys: string[];
|
|
51
|
+
frameChangesByComponentKey: Record<string, RunelightWorkspaceVisualFrameChange[]>;
|
|
52
|
+
kind: RunelightWorkspaceVisualChangeKind;
|
|
53
|
+
unknownComponentKeys: string[];
|
|
54
|
+
};
|
|
55
|
+
/**
|
|
56
|
+
* @internal Shared implementation detail for Runelight workspace change classification.
|
|
57
|
+
*/
|
|
58
|
+
export type ClassifyRunelightWorkspaceVisualChangeInput = {
|
|
59
|
+
baselineFile?: RunelightVisualDiffFile;
|
|
60
|
+
baselineGraph?: RunelightVisualDiffGraphInput;
|
|
61
|
+
baselinePathPrefix?: string;
|
|
62
|
+
componentKeys?: readonly string[];
|
|
63
|
+
currentFile?: RunelightVisualDiffFile;
|
|
64
|
+
currentGraph: RunelightVisualDiffGraphInput;
|
|
65
|
+
};
|
|
66
|
+
/**
|
|
67
|
+
* @internal Shared implementation detail for Runelight workspace change classification.
|
|
68
|
+
*/
|
|
69
|
+
export type RunelightWorkspaceFileChangeKind = "added" | "modified" | "deleted";
|
|
70
|
+
/**
|
|
71
|
+
* @internal Shared implementation detail for Runelight workspace change classification.
|
|
72
|
+
*/
|
|
73
|
+
export type RunelightWorkspaceComponentUIStatus = "added" | "deleted" | "changed" | "unchanged" | "unknown";
|
|
74
|
+
/**
|
|
75
|
+
* @internal Shared implementation detail for Runelight workspace change classification.
|
|
76
|
+
*/
|
|
77
|
+
export type RunelightWorkspaceFileStatus = {
|
|
78
|
+
kind: RunelightWorkspaceFileChangeKind;
|
|
79
|
+
path: string;
|
|
80
|
+
};
|
|
81
|
+
/**
|
|
82
|
+
* @internal Shared implementation detail for Runelight workspace change classification.
|
|
83
|
+
*/
|
|
84
|
+
export type RunelightWorkspaceChangesFrameReport = {
|
|
85
|
+
name: string;
|
|
86
|
+
status: RunelightWorkspaceVisualFrameChangeKind;
|
|
87
|
+
};
|
|
88
|
+
/**
|
|
89
|
+
* @internal Shared implementation detail for Runelight workspace change classification.
|
|
90
|
+
*/
|
|
91
|
+
export type RunelightWorkspaceChangesComponentReport = {
|
|
92
|
+
codeStatus: RunelightWorkspaceFileChangeKind;
|
|
93
|
+
componentName?: string;
|
|
94
|
+
coordinate: string;
|
|
95
|
+
exportName: string;
|
|
96
|
+
file: string;
|
|
97
|
+
frames: RunelightWorkspaceChangesFrameReport[];
|
|
98
|
+
uiStatus: RunelightWorkspaceComponentUIStatus;
|
|
99
|
+
};
|
|
100
|
+
/**
|
|
101
|
+
* @internal Shared implementation detail for Runelight workspace change classification. User automation should use `runelight changes --json`.
|
|
102
|
+
*/
|
|
103
|
+
export type RunelightWorkspaceChangesReport = {
|
|
104
|
+
base: {
|
|
105
|
+
kind: "git" | "none";
|
|
106
|
+
ref?: string;
|
|
107
|
+
};
|
|
108
|
+
components: RunelightWorkspaceChangesComponentReport[];
|
|
109
|
+
diagnostics: Array<{
|
|
110
|
+
code: string;
|
|
111
|
+
file?: string;
|
|
112
|
+
message: string;
|
|
113
|
+
severity: "error" | "warning";
|
|
114
|
+
stage: string;
|
|
115
|
+
}>;
|
|
116
|
+
schemaVersion: 1;
|
|
117
|
+
summary: {
|
|
118
|
+
files: Record<RunelightWorkspaceFileChangeKind, number>;
|
|
119
|
+
ui: Record<RunelightWorkspaceComponentUIStatus, number>;
|
|
120
|
+
};
|
|
121
|
+
};
|
|
122
|
+
/**
|
|
123
|
+
* @internal Shared implementation detail for Runelight workspace change classification.
|
|
124
|
+
*/
|
|
125
|
+
export type CreateRunelightWorkspaceChangesReportInput = {
|
|
126
|
+
baseRef?: string;
|
|
127
|
+
baselineGraph?: RunelightVisualDiffGraphInput;
|
|
128
|
+
baselinePathPrefix?: string;
|
|
129
|
+
currentGraph: RunelightVisualDiffGraphInput;
|
|
130
|
+
diagnostics?: RunelightWorkspaceChangesReport["diagnostics"];
|
|
131
|
+
statuses: readonly RunelightWorkspaceFileStatus[];
|
|
132
|
+
};
|
|
133
|
+
/**
|
|
134
|
+
* @internal Shared implementation detail for Runelight workspace change classification.
|
|
135
|
+
*/
|
|
136
|
+
export type RunelightWorkspaceChangesGraphInput = RunelightVisualDiffGraphInput & {
|
|
137
|
+
diagnostics?: RunelightWorkspaceChangesReport["diagnostics"];
|
|
138
|
+
};
|
|
139
|
+
/**
|
|
140
|
+
* @internal Shared implementation detail for Runelight workspace change classification.
|
|
141
|
+
*/
|
|
142
|
+
export type CreateRunelightWorkspaceChangesReportFromGitInput = {
|
|
143
|
+
baselineRoot: string;
|
|
144
|
+
buildBaselineGraph: (input: {
|
|
145
|
+
cwd: string;
|
|
146
|
+
}) => RunelightWorkspaceChangesGraphInput | undefined;
|
|
147
|
+
buildCurrentGraph: () => RunelightWorkspaceChangesGraphInput;
|
|
148
|
+
cacheKeyParts?: Record<string, unknown>;
|
|
149
|
+
cwd: string;
|
|
150
|
+
pathspecs: readonly string[];
|
|
151
|
+
runtimeImportSpecifier?: string;
|
|
152
|
+
sourceRoot: string;
|
|
153
|
+
};
|
|
154
|
+
type VisualGraph = {
|
|
155
|
+
componentsByKey: Map<string, RunelightVisualDiffComponent>;
|
|
156
|
+
coordinateToKey: Map<string, string>;
|
|
157
|
+
};
|
|
158
|
+
/**
|
|
159
|
+
* @internal Shared implementation detail for Runelight workspace change classification.
|
|
160
|
+
*/
|
|
161
|
+
export declare function classifyRunelightWorkspaceVisualChange(input: ClassifyRunelightWorkspaceVisualChangeInput): RunelightWorkspaceVisualChangeClassification;
|
|
162
|
+
/**
|
|
163
|
+
* @internal Shared implementation detail for Runelight workspace change classification.
|
|
164
|
+
*/
|
|
165
|
+
export declare function createRunelightVisualGraph(input: RunelightVisualDiffGraphInput, options?: {
|
|
166
|
+
baselinePathPrefix?: string;
|
|
167
|
+
}): VisualGraph;
|
|
168
|
+
/**
|
|
169
|
+
* @internal Shared implementation detail for Runelight workspace change classification.
|
|
170
|
+
*/
|
|
171
|
+
export declare function runelightVisualComponentKey(component: Pick<RunelightVisualDiffComponent, "exportName" | "filePath">, baselinePathPrefix?: string): string;
|
|
172
|
+
/**
|
|
173
|
+
* @internal Shared implementation detail for Runelight workspace change classification. User automation should use `runelight changes --json`.
|
|
174
|
+
*/
|
|
175
|
+
export declare function createRunelightWorkspaceChangesReportFromGit(input: CreateRunelightWorkspaceChangesReportFromGitInput): RunelightWorkspaceChangesReport;
|
|
176
|
+
/**
|
|
177
|
+
* @internal Shared implementation detail for Runelight workspace change classification.
|
|
178
|
+
*/
|
|
179
|
+
export declare function readRunelightWorkspaceFileStatuses(cwd: string, pathspecs: readonly string[]): RunelightWorkspaceFileStatus[];
|
|
180
|
+
/**
|
|
181
|
+
* @internal Shared implementation detail for Runelight workspace change classification.
|
|
182
|
+
*/
|
|
183
|
+
export declare function isRunelightWorkspaceChangePath(path: string): boolean;
|
|
184
|
+
/**
|
|
185
|
+
* @internal Shared implementation detail for Runelight workspace change classification.
|
|
186
|
+
*/
|
|
187
|
+
export declare function runelightWorkspaceChangesCacheKey(input: {
|
|
188
|
+
cacheKeyParts?: Record<string, unknown>;
|
|
189
|
+
cwd: string;
|
|
190
|
+
pathspecs: readonly string[];
|
|
191
|
+
runtimeImportSpecifier?: string;
|
|
192
|
+
sourceRoot: string;
|
|
193
|
+
statuses: readonly RunelightWorkspaceFileStatus[];
|
|
194
|
+
}): string;
|
|
195
|
+
/**
|
|
196
|
+
* @internal Shared implementation detail for Runelight workspace change classification.
|
|
197
|
+
*/
|
|
198
|
+
export declare function prepareRunelightWorkspaceBaselineSource(input: {
|
|
199
|
+
baselineRoot: string;
|
|
200
|
+
cacheKeyParts?: Record<string, unknown>;
|
|
201
|
+
cwd: string;
|
|
202
|
+
pathspecs: readonly string[];
|
|
203
|
+
runtimeImportSpecifier?: string;
|
|
204
|
+
sourceRoot: string;
|
|
205
|
+
}): boolean;
|
|
206
|
+
/**
|
|
207
|
+
* @internal Shared implementation detail for Runelight workspace change classification.
|
|
208
|
+
*/
|
|
209
|
+
export declare function prefixRunelightBaselineGraph<T extends RunelightVisualDiffGraphInput | undefined>(graph: T, baselineRoot: string): T;
|
|
210
|
+
/**
|
|
211
|
+
* @internal Shared implementation detail for Runelight workspace change classification. User automation should use `runelight changes --json`.
|
|
212
|
+
*/
|
|
213
|
+
export declare function createRunelightWorkspaceChangesReport(input: CreateRunelightWorkspaceChangesReportInput): RunelightWorkspaceChangesReport;
|
|
214
|
+
/**
|
|
215
|
+
* @internal Shared implementation detail for Runelight workspace change classification.
|
|
216
|
+
*/
|
|
217
|
+
export declare function stripRunelightBaselinePathPrefix(path: string, baselinePathPrefix?: string): string;
|
|
218
|
+
export {};
|
|
219
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,532 @@
|
|
|
1
|
+
import { execFileSync } from "node:child_process";
|
|
2
|
+
import { createHash } from "node:crypto";
|
|
3
|
+
import { mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
4
|
+
import { dirname, relative, resolve, sep } from "node:path";
|
|
5
|
+
const effectiveSignatureCacheUnknown = Symbol("runelight.visual-diff.unknown");
|
|
6
|
+
/**
|
|
7
|
+
* @internal Shared implementation detail for Runelight workspace change classification.
|
|
8
|
+
*/
|
|
9
|
+
export function classifyRunelightWorkspaceVisualChange(input) {
|
|
10
|
+
const currentGraph = createRunelightVisualGraph(input.currentGraph, { baselinePathPrefix: input.baselinePathPrefix });
|
|
11
|
+
const baselineGraph = input.baselineGraph
|
|
12
|
+
? createRunelightVisualGraph(input.baselineGraph, { baselinePathPrefix: input.baselinePathPrefix })
|
|
13
|
+
: undefined;
|
|
14
|
+
if (!baselineGraph) {
|
|
15
|
+
return {
|
|
16
|
+
changedComponentKeys: [],
|
|
17
|
+
frameChangesByComponentKey: {},
|
|
18
|
+
kind: "unknown",
|
|
19
|
+
unknownComponentKeys: visualFileComponentKeys(input.currentFile, input.baselinePathPrefix),
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
const componentKeys = new Set(input.componentKeys?.map((key) => stripRunelightBaselinePathPrefix(key, input.baselinePathPrefix)) ?? [
|
|
23
|
+
...visualFileComponentKeys(input.currentFile, input.baselinePathPrefix),
|
|
24
|
+
...visualFileComponentKeys(input.baselineFile, input.baselinePathPrefix),
|
|
25
|
+
]);
|
|
26
|
+
if (componentKeys.size === 0) {
|
|
27
|
+
return { changedComponentKeys: [], frameChangesByComponentKey: {}, kind: "unknown", unknownComponentKeys: [] };
|
|
28
|
+
}
|
|
29
|
+
const changedComponentKeys = [];
|
|
30
|
+
const unknownComponentKeys = [];
|
|
31
|
+
const frameChangesByComponentKey = {};
|
|
32
|
+
const currentSignatures = new Map();
|
|
33
|
+
const baselineSignatures = new Map();
|
|
34
|
+
const currentFrameSignatures = new Map();
|
|
35
|
+
const baselineFrameSignatures = new Map();
|
|
36
|
+
for (const key of componentKeys) {
|
|
37
|
+
const currentComponent = currentGraph.componentsByKey.get(key);
|
|
38
|
+
const baselineComponent = baselineGraph.componentsByKey.get(key);
|
|
39
|
+
const frameChanges = runelightVisualFrameChanges({
|
|
40
|
+
baselineComponent,
|
|
41
|
+
baselineFrameSignatures,
|
|
42
|
+
baselineGraph,
|
|
43
|
+
currentComponent,
|
|
44
|
+
currentFrameSignatures,
|
|
45
|
+
currentGraph,
|
|
46
|
+
key,
|
|
47
|
+
});
|
|
48
|
+
frameChangesByComponentKey[key] = frameChanges;
|
|
49
|
+
if (!currentComponent || !baselineComponent) {
|
|
50
|
+
changedComponentKeys.push(key);
|
|
51
|
+
continue;
|
|
52
|
+
}
|
|
53
|
+
const currentSignature = runelightEffectiveVisualSignature(currentGraph, key, currentSignatures, new Set());
|
|
54
|
+
const baselineSignature = runelightEffectiveVisualSignature(baselineGraph, key, baselineSignatures, new Set());
|
|
55
|
+
if (currentSignature === effectiveSignatureCacheUnknown || baselineSignature === effectiveSignatureCacheUnknown) {
|
|
56
|
+
unknownComponentKeys.push(key);
|
|
57
|
+
continue;
|
|
58
|
+
}
|
|
59
|
+
if (currentSignature !== baselineSignature ||
|
|
60
|
+
frameChanges.some((frame) => frame.kind === "added" || frame.kind === "deleted" || frame.kind === "changed")) {
|
|
61
|
+
changedComponentKeys.push(key);
|
|
62
|
+
}
|
|
63
|
+
else if (frameChanges.some((frame) => frame.kind === "unknown")) {
|
|
64
|
+
unknownComponentKeys.push(key);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return {
|
|
68
|
+
changedComponentKeys,
|
|
69
|
+
frameChangesByComponentKey,
|
|
70
|
+
kind: changedComponentKeys.length > 0 ? "changed" : unknownComponentKeys.length > 0 ? "unknown" : "unchanged",
|
|
71
|
+
unknownComponentKeys,
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* @internal Shared implementation detail for Runelight workspace change classification.
|
|
76
|
+
*/
|
|
77
|
+
export function createRunelightVisualGraph(input, options = {}) {
|
|
78
|
+
const componentsByKey = new Map();
|
|
79
|
+
const coordinateToKey = new Map();
|
|
80
|
+
for (const file of input.files) {
|
|
81
|
+
for (const component of file.components) {
|
|
82
|
+
const key = runelightVisualComponentKey(component, options.baselinePathPrefix);
|
|
83
|
+
componentsByKey.set(key, component);
|
|
84
|
+
coordinateToKey.set(component.coordinate, key);
|
|
85
|
+
coordinateToKey.set(stripRunelightBaselinePathPrefix(component.coordinate, options.baselinePathPrefix), key);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
return { componentsByKey, coordinateToKey };
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* @internal Shared implementation detail for Runelight workspace change classification.
|
|
92
|
+
*/
|
|
93
|
+
export function runelightVisualComponentKey(component, baselinePathPrefix) {
|
|
94
|
+
return `${stripRunelightBaselinePathPrefix(component.filePath, baselinePathPrefix)}#${component.exportName}`;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* @internal Shared implementation detail for Runelight workspace change classification. User automation should use `runelight changes --json`.
|
|
98
|
+
*/
|
|
99
|
+
export function createRunelightWorkspaceChangesReportFromGit(input) {
|
|
100
|
+
const baselineRoot = input.baselineRoot;
|
|
101
|
+
const statuses = readRunelightWorkspaceFileStatuses(input.cwd, input.pathspecs)
|
|
102
|
+
.filter((status) => isRunelightWorkspaceChangePath(status.path));
|
|
103
|
+
const currentGraph = input.buildCurrentGraph();
|
|
104
|
+
const baselineGraph = statuses.some((status) => status.kind !== "added") && prepareRunelightWorkspaceBaselineSource({
|
|
105
|
+
baselineRoot,
|
|
106
|
+
cacheKeyParts: input.cacheKeyParts,
|
|
107
|
+
cwd: input.cwd,
|
|
108
|
+
pathspecs: input.pathspecs,
|
|
109
|
+
runtimeImportSpecifier: input.runtimeImportSpecifier,
|
|
110
|
+
sourceRoot: input.sourceRoot,
|
|
111
|
+
})
|
|
112
|
+
? prefixRunelightBaselineGraph(input.buildBaselineGraph({ cwd: resolve(input.cwd, baselineRoot) }), baselineRoot)
|
|
113
|
+
: undefined;
|
|
114
|
+
return createRunelightWorkspaceChangesReport({
|
|
115
|
+
baseRef: "HEAD",
|
|
116
|
+
baselineGraph,
|
|
117
|
+
baselinePathPrefix: `${baselineRoot}/`,
|
|
118
|
+
currentGraph,
|
|
119
|
+
diagnostics: [...(currentGraph.diagnostics ?? []), ...(baselineGraph?.diagnostics ?? [])],
|
|
120
|
+
statuses,
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* @internal Shared implementation detail for Runelight workspace change classification.
|
|
125
|
+
*/
|
|
126
|
+
export function readRunelightWorkspaceFileStatuses(cwd, pathspecs) {
|
|
127
|
+
let output;
|
|
128
|
+
try {
|
|
129
|
+
output = execFileSync("git", ["-C", cwd, "status", "--porcelain=v1", "--untracked-files=all", "--", ...pathspecs], {
|
|
130
|
+
encoding: "utf8",
|
|
131
|
+
stdio: ["ignore", "pipe", "ignore"],
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
catch {
|
|
135
|
+
return [];
|
|
136
|
+
}
|
|
137
|
+
return output
|
|
138
|
+
.split(/\r?\n/)
|
|
139
|
+
.flatMap((line) => parseGitStatusLine(line))
|
|
140
|
+
.sort((left, right) => left.path.localeCompare(right.path));
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* @internal Shared implementation detail for Runelight workspace change classification.
|
|
144
|
+
*/
|
|
145
|
+
export function isRunelightWorkspaceChangePath(path) {
|
|
146
|
+
return path.endsWith(".g.tsx") || path.endsWith(".g.vue");
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* @internal Shared implementation detail for Runelight workspace change classification.
|
|
150
|
+
*/
|
|
151
|
+
export function runelightWorkspaceChangesCacheKey(input) {
|
|
152
|
+
return JSON.stringify({
|
|
153
|
+
...input.cacheKeyParts,
|
|
154
|
+
head: readGitHeadRevision(input.cwd),
|
|
155
|
+
pathspecs: [...input.pathspecs],
|
|
156
|
+
runtimeImportSpecifier: input.runtimeImportSpecifier,
|
|
157
|
+
sourceRoot: input.sourceRoot,
|
|
158
|
+
statuses: input.statuses.map((status) => ({
|
|
159
|
+
kind: status.kind,
|
|
160
|
+
path: status.path,
|
|
161
|
+
sourceHash: status.kind === "deleted" ? undefined : hashFileIfExists(input.cwd, status.path),
|
|
162
|
+
})),
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* @internal Shared implementation detail for Runelight workspace change classification.
|
|
167
|
+
*/
|
|
168
|
+
export function prepareRunelightWorkspaceBaselineSource(input) {
|
|
169
|
+
const baselineRoot = input.baselineRoot;
|
|
170
|
+
const baselineAbsoluteRoot = resolve(input.cwd, baselineRoot);
|
|
171
|
+
const cacheKey = runelightBaselineSourceCacheKey({ ...input, baselineRoot });
|
|
172
|
+
const cacheKeyPath = resolve(baselineAbsoluteRoot, ".baseline-key");
|
|
173
|
+
if (readTextFileIfExists(cacheKeyPath) === cacheKey)
|
|
174
|
+
return true;
|
|
175
|
+
const filePaths = readGitHeadFiles(input.cwd, input.pathspecs);
|
|
176
|
+
if (filePaths.length === 0)
|
|
177
|
+
return false;
|
|
178
|
+
for (const filePath of filePaths) {
|
|
179
|
+
const content = readGitHeadFile(input.cwd, filePath);
|
|
180
|
+
if (!content)
|
|
181
|
+
continue;
|
|
182
|
+
const outputPath = resolve(input.cwd, baselineRoot, filePath);
|
|
183
|
+
mkdirSync(dirname(outputPath), { recursive: true });
|
|
184
|
+
if (shouldRewriteBaselineSourceImports(filePath)) {
|
|
185
|
+
writeFileSync(outputPath, rewriteRunelightWorkspaceBaselineSourceImports(content.toString("utf8"), {
|
|
186
|
+
baselineRoot,
|
|
187
|
+
filePath,
|
|
188
|
+
runtimeImportSpecifier: input.runtimeImportSpecifier,
|
|
189
|
+
sourceRoot: input.sourceRoot,
|
|
190
|
+
}));
|
|
191
|
+
}
|
|
192
|
+
else {
|
|
193
|
+
writeFileSync(outputPath, content);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
mkdirSync(baselineAbsoluteRoot, { recursive: true });
|
|
197
|
+
writeFileSync(cacheKeyPath, cacheKey);
|
|
198
|
+
writeFileSync(resolve(baselineAbsoluteRoot, "runelight.config.js"), "module.exports = {}\n");
|
|
199
|
+
return true;
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* @internal Shared implementation detail for Runelight workspace change classification.
|
|
203
|
+
*/
|
|
204
|
+
export function prefixRunelightBaselineGraph(graph, baselineRoot) {
|
|
205
|
+
if (!graph)
|
|
206
|
+
return graph;
|
|
207
|
+
const prefixPath = (path) => `${baselineRoot}/${path}`.replaceAll("\\", "/");
|
|
208
|
+
const prefixCoordinate = (coordinate) => {
|
|
209
|
+
const separatorIndex = coordinate.lastIndexOf("#");
|
|
210
|
+
if (separatorIndex < 0)
|
|
211
|
+
return prefixPath(coordinate);
|
|
212
|
+
return `${prefixPath(coordinate.slice(0, separatorIndex))}${coordinate.slice(separatorIndex)}`;
|
|
213
|
+
};
|
|
214
|
+
return {
|
|
215
|
+
...graph,
|
|
216
|
+
files: graph.files.map((file) => ({
|
|
217
|
+
...file,
|
|
218
|
+
path: prefixPath(file.path),
|
|
219
|
+
components: file.components.map((component) => ({
|
|
220
|
+
...component,
|
|
221
|
+
coordinate: prefixCoordinate(component.coordinate),
|
|
222
|
+
filePath: prefixPath(component.filePath),
|
|
223
|
+
...(component.dependencies ? { dependencies: component.dependencies.map(prefixCoordinate) } : {}),
|
|
224
|
+
...(component.frameDependencies ? {
|
|
225
|
+
frameDependencies: Object.fromEntries(Object.entries(component.frameDependencies).map(([frameName, dependencies]) => [
|
|
226
|
+
frameName,
|
|
227
|
+
dependencies.map(prefixCoordinate),
|
|
228
|
+
])),
|
|
229
|
+
} : {}),
|
|
230
|
+
})),
|
|
231
|
+
})),
|
|
232
|
+
};
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* @internal Shared implementation detail for Runelight workspace change classification. User automation should use `runelight changes --json`.
|
|
236
|
+
*/
|
|
237
|
+
export function createRunelightWorkspaceChangesReport(input) {
|
|
238
|
+
const currentGraph = createRunelightVisualGraph(input.currentGraph, { baselinePathPrefix: input.baselinePathPrefix });
|
|
239
|
+
const baselineGraph = input.baselineGraph
|
|
240
|
+
? createRunelightVisualGraph(input.baselineGraph, { baselinePathPrefix: input.baselinePathPrefix })
|
|
241
|
+
: undefined;
|
|
242
|
+
const currentFilesByPath = new Map(input.currentGraph.files.map((file) => [file.path, file]));
|
|
243
|
+
const baselineFilesByOriginalPath = new Map((input.baselineGraph?.files ?? []).map((file) => [
|
|
244
|
+
stripRunelightBaselinePathPrefix(file.path, input.baselinePathPrefix),
|
|
245
|
+
file,
|
|
246
|
+
]));
|
|
247
|
+
const components = [];
|
|
248
|
+
for (const status of input.statuses) {
|
|
249
|
+
const currentFile = currentFilesByPath.get(status.path);
|
|
250
|
+
const baselineFile = baselineFilesByOriginalPath.get(status.path);
|
|
251
|
+
if (status.kind === "added") {
|
|
252
|
+
for (const component of currentFile?.components ?? []) {
|
|
253
|
+
components.push(runelightWorkspaceChangesComponentReport(status, component, "added", runelightStaticFrameReports(component, "added"), input.baselinePathPrefix));
|
|
254
|
+
}
|
|
255
|
+
continue;
|
|
256
|
+
}
|
|
257
|
+
if (status.kind === "deleted") {
|
|
258
|
+
for (const component of baselineFile?.components ?? []) {
|
|
259
|
+
components.push(runelightWorkspaceChangesComponentReport(status, component, "deleted", runelightStaticFrameReports(component, "deleted"), input.baselinePathPrefix));
|
|
260
|
+
}
|
|
261
|
+
continue;
|
|
262
|
+
}
|
|
263
|
+
const classification = classifyRunelightWorkspaceVisualChange({
|
|
264
|
+
baselineFile,
|
|
265
|
+
baselineGraph: input.baselineGraph,
|
|
266
|
+
baselinePathPrefix: input.baselinePathPrefix,
|
|
267
|
+
currentFile,
|
|
268
|
+
currentGraph: input.currentGraph,
|
|
269
|
+
});
|
|
270
|
+
const componentKeys = new Set([
|
|
271
|
+
...visualFileComponentKeys(currentFile, input.baselinePathPrefix),
|
|
272
|
+
...visualFileComponentKeys(baselineFile, input.baselinePathPrefix),
|
|
273
|
+
]);
|
|
274
|
+
for (const key of [...componentKeys].sort()) {
|
|
275
|
+
const component = currentGraph.componentsByKey.get(key) ?? baselineGraph?.componentsByKey.get(key);
|
|
276
|
+
if (!component)
|
|
277
|
+
continue;
|
|
278
|
+
const uiStatus = classification.changedComponentKeys.includes(key)
|
|
279
|
+
? "changed"
|
|
280
|
+
: classification.unknownComponentKeys.includes(key)
|
|
281
|
+
? "unknown"
|
|
282
|
+
: "unchanged";
|
|
283
|
+
const frameChanges = classification.frameChangesByComponentKey[key];
|
|
284
|
+
const frames = frameChanges
|
|
285
|
+
? frameChanges.map((frame) => ({ name: frame.name, status: frame.kind }))
|
|
286
|
+
: runelightStaticFrameReports(component, uiStatus === "unknown" ? "unknown" : "unchanged");
|
|
287
|
+
components.push(runelightWorkspaceChangesComponentReport(status, component, uiStatus, frames, input.baselinePathPrefix));
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
const files = {
|
|
291
|
+
added: input.statuses.filter((status) => status.kind === "added").length,
|
|
292
|
+
deleted: input.statuses.filter((status) => status.kind === "deleted").length,
|
|
293
|
+
modified: input.statuses.filter((status) => status.kind === "modified").length,
|
|
294
|
+
};
|
|
295
|
+
const ui = {
|
|
296
|
+
added: components.filter((component) => component.uiStatus === "added").length,
|
|
297
|
+
changed: components.filter((component) => component.uiStatus === "changed").length,
|
|
298
|
+
deleted: components.filter((component) => component.uiStatus === "deleted").length,
|
|
299
|
+
unchanged: components.filter((component) => component.uiStatus === "unchanged").length,
|
|
300
|
+
unknown: components.filter((component) => component.uiStatus === "unknown").length,
|
|
301
|
+
};
|
|
302
|
+
return {
|
|
303
|
+
base: input.statuses.length > 0 ? { kind: "git", ref: input.baseRef ?? "HEAD" } : { kind: "none" },
|
|
304
|
+
components,
|
|
305
|
+
diagnostics: input.diagnostics ?? [],
|
|
306
|
+
schemaVersion: 1,
|
|
307
|
+
summary: { files, ui },
|
|
308
|
+
};
|
|
309
|
+
}
|
|
310
|
+
function runelightWorkspaceChangesComponentReport(status, component, uiStatus, frames, baselinePathPrefix) {
|
|
311
|
+
return {
|
|
312
|
+
codeStatus: status.kind,
|
|
313
|
+
componentName: "componentName" in component && typeof component.componentName === "string" ? component.componentName : undefined,
|
|
314
|
+
coordinate: stripRunelightBaselinePathPrefix(component.coordinate, baselinePathPrefix),
|
|
315
|
+
exportName: component.exportName,
|
|
316
|
+
file: status.path,
|
|
317
|
+
frames: [...frames],
|
|
318
|
+
uiStatus,
|
|
319
|
+
};
|
|
320
|
+
}
|
|
321
|
+
function runelightStaticFrameReports(component, kind) {
|
|
322
|
+
const frameNames = component.frames?.map((frame) => frame.name) ?? Object.keys(component.frameVisualSignatures ?? {});
|
|
323
|
+
return frameNames.map((name) => ({ name, status: kind }));
|
|
324
|
+
}
|
|
325
|
+
function visualFileComponentKeys(file, baselinePathPrefix) {
|
|
326
|
+
return file?.components.map((component) => runelightVisualComponentKey(component, baselinePathPrefix)) ?? [];
|
|
327
|
+
}
|
|
328
|
+
function runelightEffectiveVisualSignature(graph, key, cache, visiting) {
|
|
329
|
+
const cached = cache.get(key);
|
|
330
|
+
if (cached)
|
|
331
|
+
return cached;
|
|
332
|
+
const component = graph.componentsByKey.get(key);
|
|
333
|
+
if (!component?.visualSignature) {
|
|
334
|
+
cache.set(key, effectiveSignatureCacheUnknown);
|
|
335
|
+
return effectiveSignatureCacheUnknown;
|
|
336
|
+
}
|
|
337
|
+
if (visiting.has(key)) {
|
|
338
|
+
return hashVisualSignature({ cycle: key, own: component.visualSignature });
|
|
339
|
+
}
|
|
340
|
+
visiting.add(key);
|
|
341
|
+
const dependencySignatures = [];
|
|
342
|
+
for (const dependencyCoordinate of component.dependencies ?? []) {
|
|
343
|
+
const dependencyKey = graph.coordinateToKey.get(dependencyCoordinate) ?? graph.coordinateToKey.get(stripRunelightBaselinePathPrefix(dependencyCoordinate));
|
|
344
|
+
if (!dependencyKey)
|
|
345
|
+
continue;
|
|
346
|
+
const dependencySignature = runelightEffectiveVisualSignature(graph, dependencyKey, cache, visiting);
|
|
347
|
+
if (dependencySignature === effectiveSignatureCacheUnknown) {
|
|
348
|
+
cache.set(key, effectiveSignatureCacheUnknown);
|
|
349
|
+
visiting.delete(key);
|
|
350
|
+
return effectiveSignatureCacheUnknown;
|
|
351
|
+
}
|
|
352
|
+
dependencySignatures.push({ key: dependencyKey, signature: dependencySignature });
|
|
353
|
+
}
|
|
354
|
+
visiting.delete(key);
|
|
355
|
+
const signature = hashVisualSignature({
|
|
356
|
+
dependencies: dependencySignatures.sort((left, right) => left.key.localeCompare(right.key)),
|
|
357
|
+
own: component.visualSignature,
|
|
358
|
+
});
|
|
359
|
+
cache.set(key, signature);
|
|
360
|
+
return signature;
|
|
361
|
+
}
|
|
362
|
+
function runelightEffectiveVisualFrameSignature(graph, key, frameName, cache, visiting) {
|
|
363
|
+
const cacheKey = `${key}:${frameName}`;
|
|
364
|
+
const cached = cache.get(cacheKey);
|
|
365
|
+
if (cached)
|
|
366
|
+
return cached;
|
|
367
|
+
const component = graph.componentsByKey.get(key);
|
|
368
|
+
const ownSignature = component?.frameVisualSignatures?.[frameName] ?? component?.visualSignature;
|
|
369
|
+
if (!component || !ownSignature) {
|
|
370
|
+
cache.set(cacheKey, effectiveSignatureCacheUnknown);
|
|
371
|
+
return effectiveSignatureCacheUnknown;
|
|
372
|
+
}
|
|
373
|
+
if (visiting.has(cacheKey)) {
|
|
374
|
+
return hashVisualSignature({ cycle: cacheKey, own: ownSignature });
|
|
375
|
+
}
|
|
376
|
+
visiting.add(cacheKey);
|
|
377
|
+
const dependencySignatures = [];
|
|
378
|
+
const dependencyCoordinates = component.frameDependencies?.[frameName];
|
|
379
|
+
if (!dependencyCoordinates) {
|
|
380
|
+
cache.set(cacheKey, effectiveSignatureCacheUnknown);
|
|
381
|
+
visiting.delete(cacheKey);
|
|
382
|
+
return effectiveSignatureCacheUnknown;
|
|
383
|
+
}
|
|
384
|
+
for (const dependencyCoordinate of dependencyCoordinates) {
|
|
385
|
+
const dependencyKey = graph.coordinateToKey.get(dependencyCoordinate) ?? graph.coordinateToKey.get(stripRunelightBaselinePathPrefix(dependencyCoordinate));
|
|
386
|
+
if (!dependencyKey)
|
|
387
|
+
continue;
|
|
388
|
+
const dependencySignature = runelightEffectiveVisualSignature(graph, dependencyKey, new Map(), new Set());
|
|
389
|
+
if (dependencySignature === effectiveSignatureCacheUnknown) {
|
|
390
|
+
cache.set(cacheKey, effectiveSignatureCacheUnknown);
|
|
391
|
+
visiting.delete(cacheKey);
|
|
392
|
+
return effectiveSignatureCacheUnknown;
|
|
393
|
+
}
|
|
394
|
+
dependencySignatures.push({ key: dependencyKey, signature: dependencySignature });
|
|
395
|
+
}
|
|
396
|
+
visiting.delete(cacheKey);
|
|
397
|
+
const signature = hashVisualSignature({
|
|
398
|
+
dependencies: dependencySignatures.sort((left, right) => left.key.localeCompare(right.key)),
|
|
399
|
+
own: ownSignature,
|
|
400
|
+
});
|
|
401
|
+
cache.set(cacheKey, signature);
|
|
402
|
+
return signature;
|
|
403
|
+
}
|
|
404
|
+
function runelightVisualFrameChanges(input) {
|
|
405
|
+
const currentFrameNames = new Set(input.currentComponent?.frames?.map((frame) => frame.name) ?? Object.keys(input.currentComponent?.frameVisualSignatures ?? {}));
|
|
406
|
+
const baselineFrameNames = new Set(input.baselineComponent?.frames?.map((frame) => frame.name) ?? Object.keys(input.baselineComponent?.frameVisualSignatures ?? {}));
|
|
407
|
+
const frameNames = [...new Set([...currentFrameNames, ...baselineFrameNames])].sort();
|
|
408
|
+
return frameNames.map((name) => {
|
|
409
|
+
if (!baselineFrameNames.has(name))
|
|
410
|
+
return { kind: "added", name };
|
|
411
|
+
if (!currentFrameNames.has(name))
|
|
412
|
+
return { kind: "deleted", name };
|
|
413
|
+
const currentSignature = runelightEffectiveVisualFrameSignature(input.currentGraph, input.key, name, input.currentFrameSignatures, new Set());
|
|
414
|
+
const baselineSignature = runelightEffectiveVisualFrameSignature(input.baselineGraph, input.key, name, input.baselineFrameSignatures, new Set());
|
|
415
|
+
if (currentSignature === effectiveSignatureCacheUnknown || baselineSignature === effectiveSignatureCacheUnknown) {
|
|
416
|
+
return { kind: "unknown", name };
|
|
417
|
+
}
|
|
418
|
+
return { kind: currentSignature === baselineSignature ? "unchanged" : "changed", name };
|
|
419
|
+
});
|
|
420
|
+
}
|
|
421
|
+
function hashVisualSignature(value) {
|
|
422
|
+
return createHash("sha256").update(JSON.stringify(value)).digest("hex");
|
|
423
|
+
}
|
|
424
|
+
/**
|
|
425
|
+
* @internal Shared implementation detail for Runelight workspace change classification.
|
|
426
|
+
*/
|
|
427
|
+
export function stripRunelightBaselinePathPrefix(path, baselinePathPrefix) {
|
|
428
|
+
if (!baselinePathPrefix)
|
|
429
|
+
return path;
|
|
430
|
+
return path.startsWith(baselinePathPrefix) ? path.slice(baselinePathPrefix.length) : path;
|
|
431
|
+
}
|
|
432
|
+
function parseGitStatusLine(line) {
|
|
433
|
+
if (!line.trim())
|
|
434
|
+
return [];
|
|
435
|
+
const status = line.slice(0, 2);
|
|
436
|
+
const rawPath = line.slice(3);
|
|
437
|
+
const path = normalizeGitStatusPath(rawPath.includes(" -> ") ? rawPath.split(" -> ").at(-1) ?? rawPath : rawPath);
|
|
438
|
+
const staged = status[0];
|
|
439
|
+
const unstaged = status[1];
|
|
440
|
+
if (status === "??" || staged === "A" || unstaged === "A")
|
|
441
|
+
return [{ kind: "added", path }];
|
|
442
|
+
if (staged === "D" || unstaged === "D")
|
|
443
|
+
return [{ kind: "deleted", path }];
|
|
444
|
+
return [{ kind: "modified", path }];
|
|
445
|
+
}
|
|
446
|
+
function normalizeGitStatusPath(path) {
|
|
447
|
+
const unquoted = path.startsWith('"') && path.endsWith('"') ? path.slice(1, -1) : path;
|
|
448
|
+
return unquoted.replaceAll("\\", "/");
|
|
449
|
+
}
|
|
450
|
+
function runelightBaselineSourceCacheKey(input) {
|
|
451
|
+
return JSON.stringify({
|
|
452
|
+
...input.cacheKeyParts,
|
|
453
|
+
head: readGitHeadRevision(input.cwd),
|
|
454
|
+
pathspecs: [...input.pathspecs],
|
|
455
|
+
runtimeImportSpecifier: input.runtimeImportSpecifier,
|
|
456
|
+
sourceRoot: input.sourceRoot,
|
|
457
|
+
});
|
|
458
|
+
}
|
|
459
|
+
function readGitHeadRevision(cwd) {
|
|
460
|
+
try {
|
|
461
|
+
return execFileSync("git", ["-C", cwd, "rev-parse", "HEAD"], {
|
|
462
|
+
encoding: "utf8",
|
|
463
|
+
stdio: ["ignore", "pipe", "ignore"],
|
|
464
|
+
}).trim();
|
|
465
|
+
}
|
|
466
|
+
catch {
|
|
467
|
+
return undefined;
|
|
468
|
+
}
|
|
469
|
+
}
|
|
470
|
+
function readGitHeadFiles(cwd, pathspecs) {
|
|
471
|
+
let output;
|
|
472
|
+
try {
|
|
473
|
+
output = execFileSync("git", ["-C", cwd, "ls-tree", "-r", "--name-only", "HEAD", "--", ...pathspecs], {
|
|
474
|
+
encoding: "utf8",
|
|
475
|
+
stdio: ["ignore", "pipe", "ignore"],
|
|
476
|
+
});
|
|
477
|
+
}
|
|
478
|
+
catch {
|
|
479
|
+
return [];
|
|
480
|
+
}
|
|
481
|
+
return output.split(/\r?\n/).filter(Boolean).map((path) => path.replaceAll("\\", "/"));
|
|
482
|
+
}
|
|
483
|
+
function readGitHeadFile(cwd, path) {
|
|
484
|
+
try {
|
|
485
|
+
return execFileSync("git", ["-C", cwd, "show", `HEAD:${path}`], {
|
|
486
|
+
encoding: "buffer",
|
|
487
|
+
stdio: ["ignore", "pipe", "ignore"],
|
|
488
|
+
});
|
|
489
|
+
}
|
|
490
|
+
catch {
|
|
491
|
+
return undefined;
|
|
492
|
+
}
|
|
493
|
+
}
|
|
494
|
+
function readTextFileIfExists(path) {
|
|
495
|
+
try {
|
|
496
|
+
return readFileSync(path, "utf8");
|
|
497
|
+
}
|
|
498
|
+
catch {
|
|
499
|
+
return undefined;
|
|
500
|
+
}
|
|
501
|
+
}
|
|
502
|
+
function hashFileIfExists(cwd, path) {
|
|
503
|
+
try {
|
|
504
|
+
return createHash("sha256").update(readFileSync(resolve(cwd, path))).digest("hex");
|
|
505
|
+
}
|
|
506
|
+
catch {
|
|
507
|
+
return undefined;
|
|
508
|
+
}
|
|
509
|
+
}
|
|
510
|
+
function shouldRewriteBaselineSourceImports(path) {
|
|
511
|
+
return /\.(c|m)?(t|j)sx?$/.test(path);
|
|
512
|
+
}
|
|
513
|
+
function rewriteRunelightWorkspaceBaselineSourceImports(source, options) {
|
|
514
|
+
const aliasRewritten = source
|
|
515
|
+
.replaceAll(/(from\s*["'])@\/([^"']+)(["'])/g, (_match, before, target, after) => `${before}${runelightWorkspaceBaselineRelativeAliasSpecifier(options, target)}${after}`)
|
|
516
|
+
.replaceAll(/(import\s*\(\s*["'])@\/([^"']+)(["']\s*\))/g, (_match, before, target, after) => `${before}${runelightWorkspaceBaselineRelativeAliasSpecifier(options, target)}${after}`);
|
|
517
|
+
if (!options.runtimeImportSpecifier || !isRunelightBaselineProtocolFile(options.filePath))
|
|
518
|
+
return aliasRewritten;
|
|
519
|
+
return aliasRewritten
|
|
520
|
+
.replaceAll(/(from\s*["'])@runelight\/core(["'])/g, (_match, before, after) => `${before}${options.runtimeImportSpecifier}${after}`)
|
|
521
|
+
.replaceAll(/(import\s*\(\s*["'])@runelight\/core(["']\s*\))/g, (_match, before, after) => `${before}${options.runtimeImportSpecifier}${after}`);
|
|
522
|
+
}
|
|
523
|
+
function runelightWorkspaceBaselineRelativeAliasSpecifier(options, target) {
|
|
524
|
+
const fromDirectory = dirname(`${options.baselineRoot}/${options.filePath}`);
|
|
525
|
+
const toPath = `${options.baselineRoot}/${options.sourceRoot}/${target}`.replaceAll("\\", "/");
|
|
526
|
+
const relativePath = relative(fromDirectory, toPath).split(sep).join("/");
|
|
527
|
+
return relativePath.startsWith(".") ? relativePath : `./${relativePath}`;
|
|
528
|
+
}
|
|
529
|
+
function isRunelightBaselineProtocolFile(path) {
|
|
530
|
+
return path.endsWith(".g.tsx") || path.endsWith(".g.vue");
|
|
531
|
+
}
|
|
532
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@runelight/changes",
|
|
3
|
+
"version": "0.0.10",
|
|
4
|
+
"description": "Shared implementation package for Runelight workspace change classification.",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "git+https://github.com/tuoxiansp/runelight.git",
|
|
10
|
+
"directory": "packages/changes"
|
|
11
|
+
},
|
|
12
|
+
"bugs": {
|
|
13
|
+
"url": "https://github.com/tuoxiansp/runelight/issues"
|
|
14
|
+
},
|
|
15
|
+
"homepage": "https://github.com/tuoxiansp/runelight#readme",
|
|
16
|
+
"keywords": [
|
|
17
|
+
"runelight",
|
|
18
|
+
"changes",
|
|
19
|
+
"visual-diff",
|
|
20
|
+
"component-preview"
|
|
21
|
+
],
|
|
22
|
+
"exports": {
|
|
23
|
+
".": {
|
|
24
|
+
"types": "./dist/index.d.ts",
|
|
25
|
+
"import": "./dist/index.js",
|
|
26
|
+
"default": "./dist/index.js"
|
|
27
|
+
}
|
|
28
|
+
},
|
|
29
|
+
"files": [
|
|
30
|
+
"dist"
|
|
31
|
+
],
|
|
32
|
+
"devDependencies": {
|
|
33
|
+
"typescript": "^6.0.3",
|
|
34
|
+
"vitest": "^4.1.7"
|
|
35
|
+
},
|
|
36
|
+
"publishConfig": {
|
|
37
|
+
"access": "public"
|
|
38
|
+
},
|
|
39
|
+
"scripts": {
|
|
40
|
+
"clean": "node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"",
|
|
41
|
+
"build": "pnpm clean && tsc -p tsconfig.build.json",
|
|
42
|
+
"test": "vitest run",
|
|
43
|
+
"typecheck": "tsc -p tsconfig.json --noEmit"
|
|
44
|
+
}
|
|
45
|
+
}
|