unity-open-mcp 0.5.0 → 0.7.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/README.md +24 -73
- package/dist/batch-spawn.d.ts +4 -0
- package/dist/batch-spawn.js +73 -18
- package/dist/batch-spawn.js.map +1 -1
- package/dist/capabilities/build-capabilities.d.ts +5 -5
- package/dist/capabilities/build-capabilities.js +2 -2
- package/dist/capabilities/cost-hints.js +20 -0
- package/dist/capabilities/cost-hints.js.map +1 -1
- package/dist/capabilities/lifecycle.js +1 -1
- package/dist/capabilities/lifecycle.js.map +1 -1
- package/dist/capabilities/tool-groups.d.ts +6 -9
- package/dist/capabilities/tool-groups.js +11 -13
- package/dist/capabilities/tool-groups.js.map +1 -1
- package/dist/cli/commands.js +9 -8
- package/dist/cli/commands.js.map +1 -1
- package/dist/compressible-router.js +6 -0
- package/dist/compressible-router.js.map +1 -1
- package/dist/constants.d.ts +89 -0
- package/dist/constants.js +109 -0
- package/dist/constants.js.map +1 -0
- package/dist/dialog-dismiss.d.ts +0 -7
- package/dist/dialog-dismiss.js +17 -19
- package/dist/dialog-dismiss.js.map +1 -1
- package/dist/hub-control.d.ts +6 -2
- package/dist/hub-control.js +8 -8
- package/dist/hub-control.js.map +1 -1
- package/dist/index.js +12 -13
- package/dist/index.js.map +1 -1
- package/dist/instance-discovery.js +2 -1
- package/dist/instance-discovery.js.map +1 -1
- package/dist/live-client.d.ts +49 -0
- package/dist/live-client.js +292 -255
- package/dist/live-client.js.map +1 -1
- package/dist/offline/api.d.ts +171 -0
- package/dist/offline/api.js +855 -0
- package/dist/offline/api.js.map +1 -0
- package/dist/offline/hierarchy.d.ts +24 -0
- package/dist/offline/hierarchy.js +242 -0
- package/dist/offline/hierarchy.js.map +1 -0
- package/dist/offline/index-builders.d.ts +11 -0
- package/dist/offline/index-builders.js +202 -0
- package/dist/offline/index-builders.js.map +1 -0
- package/dist/offline/model.d.ts +8 -0
- package/dist/offline/model.js +188 -0
- package/dist/offline/model.js.map +1 -0
- package/dist/offline/names.d.ts +7 -0
- package/dist/offline/names.js +20 -0
- package/dist/offline/names.js.map +1 -0
- package/dist/offline/overrides.d.ts +17 -0
- package/dist/offline/overrides.js +266 -0
- package/dist/offline/overrides.js.map +1 -0
- package/dist/offline/parse.d.ts +25 -0
- package/dist/offline/parse.js +236 -0
- package/dist/offline/parse.js.map +1 -0
- package/dist/offline/paths.d.ts +4 -0
- package/dist/offline/paths.js +23 -0
- package/dist/offline/paths.js.map +1 -0
- package/dist/offline/primitives.d.ts +17 -0
- package/dist/offline/primitives.js +195 -0
- package/dist/offline/primitives.js.map +1 -0
- package/dist/offline/references.d.ts +9 -0
- package/dist/offline/references.js +55 -0
- package/dist/offline/references.js.map +1 -0
- package/dist/offline/types.d.ts +65 -0
- package/dist/offline/types.js +154 -0
- package/dist/offline/types.js.map +1 -0
- package/dist/offline.d.ts +2 -180
- package/dist/offline.js +27 -2282
- package/dist/offline.js.map +1 -1
- package/dist/project-health.d.ts +1 -1
- package/dist/project-health.js +66 -3
- package/dist/project-health.js.map +1 -1
- package/dist/routers.js +6 -5
- package/dist/routers.js.map +1 -1
- package/dist/tool-router.d.ts +13 -0
- package/dist/tool-router.js +179 -251
- package/dist/tool-router.js.map +1 -1
- package/dist/tool-session-state.js +18 -9
- package/dist/tool-session-state.js.map +1 -1
- package/dist/tools/apply-fix.js +7 -2
- package/dist/tools/apply-fix.js.map +1 -1
- package/dist/tools/batch-execute.js +8 -2
- package/dist/tools/batch-execute.js.map +1 -1
- package/dist/tools/bridge-status.js +1 -2
- package/dist/tools/bridge-status.js.map +1 -1
- package/dist/tools/checkpoint-create.js +1 -0
- package/dist/tools/checkpoint-create.js.map +1 -1
- package/dist/tools/component-get.js +44 -11
- package/dist/tools/component-get.js.map +1 -1
- package/dist/tools/delta.js +1 -0
- package/dist/tools/delta.js.map +1 -1
- package/dist/tools/dependencies.js +4 -1
- package/dist/tools/dependencies.js.map +1 -1
- package/dist/tools/editor-status.js +3 -2
- package/dist/tools/editor-status.js.map +1 -1
- package/dist/tools/execute-csharp.js +3 -2
- package/dist/tools/execute-csharp.js.map +1 -1
- package/dist/tools/find-references.js +8 -1
- package/dist/tools/find-references.js.map +1 -1
- package/dist/tools/index.js +19 -17
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/inputsystem-asset-create.js +4 -4
- package/dist/tools/inputsystem-asset-create.js.map +1 -1
- package/dist/tools/invoke-method.js +2 -1
- package/dist/tools/invoke-method.js.map +1 -1
- package/dist/tools/manage-tools.js +10 -10
- package/dist/tools/manage-tools.js.map +1 -1
- package/dist/tools/navigation-surface-add.js +6 -5
- package/dist/tools/navigation-surface-add.js.map +1 -1
- package/dist/tools/probuilder-create-shape.js +4 -4
- package/dist/tools/probuilder-create-shape.js.map +1 -1
- package/dist/tools/read-compile-errors.js +44 -31
- package/dist/tools/read-compile-errors.js.map +1 -1
- package/dist/tools/scene-get-data.js +10 -2
- package/dist/tools/scene-get-data.js.map +1 -1
- package/dist/tools/scene-save.js +16 -5
- package/dist/tools/scene-save.js.map +1 -1
- package/dist/tools/scene-set-active.js +22 -6
- package/dist/tools/scene-set-active.js.map +1 -1
- package/dist/tools/scene-unload.js +20 -6
- package/dist/tools/scene-unload.js.map +1 -1
- package/dist/tools/search-assets.js +3 -1
- package/dist/tools/search-assets.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
// YAML + JSON text parsing for the offline asset reader.
|
|
2
|
+
//
|
|
3
|
+
// Extracted from the former monolithic offline.ts (M28-refactoring Plan 3,
|
|
4
|
+
// T3.1). Two parsing paths:
|
|
5
|
+
// - parseAsset — splits a Unity YAML document stream into ParsedObjects,
|
|
6
|
+
// extracting the per-object key fields (m_Name, component IDs, transform
|
|
7
|
+
// parent links, source-prefab refs, m_Script GUIDs). Runs the prefab
|
|
8
|
+
// override name-resolution pass at the end of parsing.
|
|
9
|
+
// - The JSON asset path (.asmdef / .shadergraph / .shadersubgraph): a
|
|
10
|
+
// brace-depth stream splitter + per-object discriminator. unity-scanner
|
|
11
|
+
// handles YAML only, so this is the coverage differentiator.
|
|
12
|
+
//
|
|
13
|
+
// Depends on types + primitives + overrides (for applyPrefabNameOverrides at
|
|
14
|
+
// parse time).
|
|
15
|
+
import { EMPTY_PARSED } from "./types.js";
|
|
16
|
+
import { parseHeaderLine, readComponentIDs, readFileIDField, readGUIDField, readScalar, scanObjectTypeLine, } from "./primitives.js";
|
|
17
|
+
import { applyPrefabNameOverrides } from "./overrides.js";
|
|
18
|
+
// ===========================================================================
|
|
19
|
+
// YAML parser — split YAML into documents, extract key fields per object.
|
|
20
|
+
// ===========================================================================
|
|
21
|
+
export function parseAsset(data) {
|
|
22
|
+
const objects = [];
|
|
23
|
+
const byID = new Map();
|
|
24
|
+
const lines = data.split("\n");
|
|
25
|
+
let current = null;
|
|
26
|
+
for (const line of lines) {
|
|
27
|
+
const header = parseHeaderLine(line);
|
|
28
|
+
if (header) {
|
|
29
|
+
if (current)
|
|
30
|
+
finishObject(current, objects, byID);
|
|
31
|
+
current = {
|
|
32
|
+
id: header.id,
|
|
33
|
+
classID: header.classID,
|
|
34
|
+
type: "",
|
|
35
|
+
lines: [],
|
|
36
|
+
order: objects.length,
|
|
37
|
+
name: "",
|
|
38
|
+
componentIDs: [],
|
|
39
|
+
gameObjectID: "",
|
|
40
|
+
fatherTransformID: "",
|
|
41
|
+
sourceObjectID: "",
|
|
42
|
+
sourceGUID: "",
|
|
43
|
+
scriptGUID: "",
|
|
44
|
+
};
|
|
45
|
+
continue;
|
|
46
|
+
}
|
|
47
|
+
if (current === null)
|
|
48
|
+
continue;
|
|
49
|
+
current.lines.push(line);
|
|
50
|
+
scanObjectTypeLine(current, line);
|
|
51
|
+
}
|
|
52
|
+
if (current)
|
|
53
|
+
finishObject(current, objects, byID);
|
|
54
|
+
if (objects.length === 0) {
|
|
55
|
+
throw new Error("no Unity YAML objects found");
|
|
56
|
+
}
|
|
57
|
+
applyPrefabNameOverrides(objects);
|
|
58
|
+
return { path: "", kind: "", guid: "", objects, byID };
|
|
59
|
+
}
|
|
60
|
+
function finishObject(o, objects, byID) {
|
|
61
|
+
if (o.lines.length > 0) {
|
|
62
|
+
o.name = readScalar(o.lines, "m_Name");
|
|
63
|
+
switch (o.type) {
|
|
64
|
+
case "GameObject":
|
|
65
|
+
o.componentIDs = readComponentIDs(o.lines);
|
|
66
|
+
break;
|
|
67
|
+
case "Transform":
|
|
68
|
+
case "RectTransform":
|
|
69
|
+
o.gameObjectID = readFileIDField(o.lines, "m_GameObject");
|
|
70
|
+
o.fatherTransformID = readFileIDField(o.lines, "m_Father");
|
|
71
|
+
break;
|
|
72
|
+
default:
|
|
73
|
+
o.gameObjectID = readFileIDField(o.lines, "m_GameObject");
|
|
74
|
+
break;
|
|
75
|
+
}
|
|
76
|
+
o.sourceObjectID = readFileIDField(o.lines, "m_CorrespondingSourceObject");
|
|
77
|
+
o.sourceGUID = readGUIDField(o.lines, "m_CorrespondingSourceObject");
|
|
78
|
+
if (o.type === "MonoBehaviour") {
|
|
79
|
+
o.scriptGUID = readGUIDField(o.lines, "m_Script");
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
objects.push(o);
|
|
83
|
+
byID.set(o.id, o);
|
|
84
|
+
}
|
|
85
|
+
// ===========================================================================
|
|
86
|
+
// M24 — JSON asset parser (.asmdef / .shadergraph / .shadersubgraph).
|
|
87
|
+
//
|
|
88
|
+
// unity-scanner handles YAML only; this path is the coverage differentiator.
|
|
89
|
+
// Each kind has a distinct on-disk shape:
|
|
90
|
+
// - .asmdef → a single JSON object (assembly-definition manifest).
|
|
91
|
+
// - .shadergraph / .shadersubgraph → a JSON-document stream: multiple pretty-
|
|
92
|
+
// printed JSON objects concatenated on blank-line boundaries, each carrying
|
|
93
|
+
// an "m_Type" discriminator. The first is always the graph root.
|
|
94
|
+
// GUID references inside the JSON are resolved against the meta index the same
|
|
95
|
+
// way YAML field refs are.
|
|
96
|
+
// ===========================================================================
|
|
97
|
+
export function parseJsonAsset(data, issues) {
|
|
98
|
+
const ext = "json";
|
|
99
|
+
const chunks = splitJsonStream(data);
|
|
100
|
+
if (chunks.length === 0) {
|
|
101
|
+
issues.push({ code: "malformed_json", detail: "no JSON objects found", severity: "error" });
|
|
102
|
+
return [];
|
|
103
|
+
}
|
|
104
|
+
const out = [];
|
|
105
|
+
for (let i = 0; i < chunks.length; i++) {
|
|
106
|
+
let value;
|
|
107
|
+
try {
|
|
108
|
+
value = JSON.parse(chunks[i]);
|
|
109
|
+
}
|
|
110
|
+
catch (e) {
|
|
111
|
+
issues.push({
|
|
112
|
+
code: "malformed_json",
|
|
113
|
+
detail: `object ${i + 1}: ${e.message}`,
|
|
114
|
+
severity: "error",
|
|
115
|
+
});
|
|
116
|
+
continue;
|
|
117
|
+
}
|
|
118
|
+
out.push(jsonParsedObject(value, i));
|
|
119
|
+
}
|
|
120
|
+
return out;
|
|
121
|
+
function jsonParsedObject(value, index) {
|
|
122
|
+
if (value !== null && typeof value === "object" && !Array.isArray(value)) {
|
|
123
|
+
const obj = value;
|
|
124
|
+
const type = typeof obj.m_Type === "string" && obj.m_Type !== ""
|
|
125
|
+
? jsonShortType(obj.m_Type)
|
|
126
|
+
: "json";
|
|
127
|
+
const name = pickString(obj.m_Name) ??
|
|
128
|
+
pickString(obj.m_ObjectId) ??
|
|
129
|
+
pickString(obj.name) ??
|
|
130
|
+
(type !== "json" ? `${type}#${index}` : `object#${index}`);
|
|
131
|
+
return { name, type, value };
|
|
132
|
+
}
|
|
133
|
+
return { name: `value#${index}`, type: ext, value };
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
export function pickString(v) {
|
|
137
|
+
return typeof v === "string" && v !== "" ? v : undefined;
|
|
138
|
+
}
|
|
139
|
+
/** Shorten a ShaderGraph m_Type like "UnityEditor.ShaderGraph.MultiplyNode" → "MultiplyNode". */
|
|
140
|
+
export function jsonShortType(full) {
|
|
141
|
+
const dot = full.lastIndexOf(".");
|
|
142
|
+
return dot >= 0 ? full.slice(dot + 1) : full;
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* A `.shadergraph` is a stream of pretty-printed JSON objects. They are
|
|
146
|
+
* separated by blank lines, but a single object's pretty-printed body also
|
|
147
|
+
* contains newlines — so the split must track brace depth, not line gaps.
|
|
148
|
+
* `.asmdef` is a single object; this still returns a one-element array.
|
|
149
|
+
*/
|
|
150
|
+
export function splitJsonStream(data) {
|
|
151
|
+
const trimmed = data.trim();
|
|
152
|
+
if (trimmed === "")
|
|
153
|
+
return [];
|
|
154
|
+
const chunks = [];
|
|
155
|
+
let depth = 0;
|
|
156
|
+
let inString = false;
|
|
157
|
+
let escape = false;
|
|
158
|
+
let start = -1;
|
|
159
|
+
for (let i = 0; i < trimmed.length; i++) {
|
|
160
|
+
const ch = trimmed[i];
|
|
161
|
+
if (inString) {
|
|
162
|
+
if (escape)
|
|
163
|
+
escape = false;
|
|
164
|
+
else if (ch === "\\")
|
|
165
|
+
escape = true;
|
|
166
|
+
else if (ch === '"')
|
|
167
|
+
inString = false;
|
|
168
|
+
continue;
|
|
169
|
+
}
|
|
170
|
+
if (ch === '"') {
|
|
171
|
+
inString = true;
|
|
172
|
+
continue;
|
|
173
|
+
}
|
|
174
|
+
if (ch === "{") {
|
|
175
|
+
if (depth === 0)
|
|
176
|
+
start = i;
|
|
177
|
+
depth++;
|
|
178
|
+
}
|
|
179
|
+
else if (ch === "}") {
|
|
180
|
+
depth--;
|
|
181
|
+
if (depth === 0 && start >= 0) {
|
|
182
|
+
chunks.push(trimmed.slice(start, i + 1));
|
|
183
|
+
start = -1;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
// Fallback: if brace tracking found nothing (e.g. a top-level array or a
|
|
188
|
+
// malformed file), try a single JSON.parse on the whole content so the
|
|
189
|
+
// malformed_json issue path can report it.
|
|
190
|
+
if (chunks.length === 0)
|
|
191
|
+
chunks.push(trimmed);
|
|
192
|
+
return chunks;
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Flatten a parsed JSON value into display fields. Scalars, arrays, and nested
|
|
196
|
+
* objects are summarized into short `name: value` rows, mirroring the YAML
|
|
197
|
+
* field renderer. GUID refs are resolved against the meta index via the
|
|
198
|
+
* injected resolver (avoids a direct reference-resolution import here).
|
|
199
|
+
*/
|
|
200
|
+
export function jsonFields(value, limit, guidIndex, resolveRef) {
|
|
201
|
+
if (value === null || typeof value !== "object" || Array.isArray(value))
|
|
202
|
+
return [];
|
|
203
|
+
const obj = value;
|
|
204
|
+
const out = [];
|
|
205
|
+
for (const [key, raw] of Object.entries(obj)) {
|
|
206
|
+
if (out.length >= limit && limit > 0)
|
|
207
|
+
break;
|
|
208
|
+
out.push({ name: key, value: jsonScalar(raw, guidIndex, resolveRef) });
|
|
209
|
+
}
|
|
210
|
+
return out;
|
|
211
|
+
}
|
|
212
|
+
export function jsonScalar(value, guidIndex, resolveRef) {
|
|
213
|
+
if (value === null)
|
|
214
|
+
return "null";
|
|
215
|
+
switch (typeof value) {
|
|
216
|
+
case "string":
|
|
217
|
+
return resolveRef(value, guidIndex, EMPTY_PARSED);
|
|
218
|
+
case "number":
|
|
219
|
+
case "boolean":
|
|
220
|
+
return String(value);
|
|
221
|
+
default: {
|
|
222
|
+
if (Array.isArray(value))
|
|
223
|
+
return `[${value.length}]`;
|
|
224
|
+
const obj = value;
|
|
225
|
+
// Inline {fileID, guid, type} PPtr → resolve to asset name.
|
|
226
|
+
if (typeof obj.guid === "string" && obj.guid.length === 32) {
|
|
227
|
+
return resolveRef(`{fileID: ${obj.fileID ?? 0}, guid: ${obj.guid}, type: ${obj.type ?? 0}}`, guidIndex, EMPTY_PARSED);
|
|
228
|
+
}
|
|
229
|
+
const keys = Object.keys(obj);
|
|
230
|
+
if (keys.length === 0)
|
|
231
|
+
return "{}";
|
|
232
|
+
return `{${keys.slice(0, 4).join(", ")}${keys.length > 4 ? ", …" : ""}}`;
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
//# sourceMappingURL=parse.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse.js","sourceRoot":"","sources":["../../src/offline/parse.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
// Path-normalization helpers for the offline reader.
|
|
2
|
+
//
|
|
3
|
+
// Extracted from the former monolithic offline.ts (M28-refactoring Plan 3,
|
|
4
|
+
// T3.1). Converts absolute filesystem paths to project-relative asset paths
|
|
5
|
+
// (forward-slash normalized) and to relative directory segments. A leaf
|
|
6
|
+
// module — depends only on node:path.
|
|
7
|
+
import { relative, sep } from "node:path";
|
|
8
|
+
import { shouldSkipDir } from "./types.js";
|
|
9
|
+
export function toAssetPath(projectRoot, absPath) {
|
|
10
|
+
let rel = relative(projectRoot, absPath);
|
|
11
|
+
if (sep === "\\")
|
|
12
|
+
rel = rel.replace(/\\/g, "/");
|
|
13
|
+
return rel;
|
|
14
|
+
}
|
|
15
|
+
export function relativeDir(projectRoot, absPath) {
|
|
16
|
+
let rel = absPath.slice(projectRoot.length).replace(/\\/g, "/");
|
|
17
|
+
if (rel.startsWith("/"))
|
|
18
|
+
rel = rel.slice(1);
|
|
19
|
+
const lastSlash = rel.lastIndexOf("/");
|
|
20
|
+
return lastSlash >= 0 ? rel.slice(0, lastSlash) : rel;
|
|
21
|
+
}
|
|
22
|
+
export { shouldSkipDir };
|
|
23
|
+
//# sourceMappingURL=paths.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/offline/paths.ts"],"names":[],"mappings":"AAAA,qDAAqD;AACrD,EAAE;AACF,2EAA2E;AAC3E,4EAA4E;AAC5E,wEAAwE;AACxE,sCAAsC;AAEtC,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3C,MAAM,UAAU,WAAW,CAAC,WAAmB,EAAE,OAAe;IAC9D,IAAI,GAAG,GAAG,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IACzC,IAAI,GAAG,KAAK,IAAI;QAAE,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAChD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,WAAmB,EAAE,OAAe;IAC9D,IAAI,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAChE,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC5C,MAAM,SAAS,GAAG,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IACvC,OAAO,SAAS,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;AACxD,CAAC;AAED,OAAO,EAAE,aAAa,EAAE,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { HeaderInfo, ParsedObject } from "./types.js";
|
|
2
|
+
export declare function scanObjectTypeLine(obj: ParsedObject, line: string): boolean;
|
|
3
|
+
export declare function parseHeaderLine(line: string): HeaderInfo | null;
|
|
4
|
+
export declare function parsePositiveInt(value: string): number | null;
|
|
5
|
+
export declare function readScalar(lines: string[], key: string): string;
|
|
6
|
+
export declare function readFileIDField(lines: string[], key: string): string;
|
|
7
|
+
export declare function readGUIDField(lines: string[], key: string): string;
|
|
8
|
+
export declare function readComponentIDs(lines: string[]): string[];
|
|
9
|
+
export declare function extractFileID(line: string): string;
|
|
10
|
+
export declare function extractGUID(line: string): string;
|
|
11
|
+
export declare function findGUIDs(value: string): string[];
|
|
12
|
+
export declare function findFileIDs(value: string): string[];
|
|
13
|
+
export declare function scanGUID(value: string): string;
|
|
14
|
+
export declare function isHex(code: number): boolean;
|
|
15
|
+
export declare function cleanScalar(value: string): string;
|
|
16
|
+
export declare function shortGUID(guid: string): string;
|
|
17
|
+
export declare function readMetaGUID(data: string): string;
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
// Low-level extraction primitives for the offline YAML/JSON parser.
|
|
2
|
+
//
|
|
3
|
+
// Extracted from the former monolithic offline.ts (M28-refactoring Plan 3,
|
|
4
|
+
// T3.1). These are the leaf scanning functions — GUID/fileID extraction,
|
|
5
|
+
// scalar cleaning, header parsing, line-shape classification. They depend only
|
|
6
|
+
// on the shared types module; no cross-submodule runtime imports.
|
|
7
|
+
// ===========================================================================
|
|
8
|
+
// Line-scanning helpers.
|
|
9
|
+
// ===========================================================================
|
|
10
|
+
export function scanObjectTypeLine(obj, line) {
|
|
11
|
+
if (obj.type !== "" || line.length <= 1 || line[0] === " " || !line.endsWith(":")) {
|
|
12
|
+
return false;
|
|
13
|
+
}
|
|
14
|
+
obj.type = line.slice(0, -1).trim();
|
|
15
|
+
return true;
|
|
16
|
+
}
|
|
17
|
+
// ===========================================================================
|
|
18
|
+
// Low-level extraction primitives.
|
|
19
|
+
// ===========================================================================
|
|
20
|
+
export function parseHeaderLine(line) {
|
|
21
|
+
const prefix = "--- !u!";
|
|
22
|
+
if (!line.startsWith(prefix))
|
|
23
|
+
return null;
|
|
24
|
+
const rest = line.slice(prefix.length);
|
|
25
|
+
const space = rest.indexOf(" ");
|
|
26
|
+
if (space <= 0 || space + 2 > rest.length || rest[space + 1] !== "&")
|
|
27
|
+
return null;
|
|
28
|
+
const classID = parsePositiveInt(rest.slice(0, space));
|
|
29
|
+
if (classID === null)
|
|
30
|
+
return null;
|
|
31
|
+
let id = rest.slice(space + 2);
|
|
32
|
+
const fields = id.split(/\s+/);
|
|
33
|
+
if (fields.length > 0)
|
|
34
|
+
id = fields[0];
|
|
35
|
+
if (id === "")
|
|
36
|
+
return null;
|
|
37
|
+
return { classID, id };
|
|
38
|
+
}
|
|
39
|
+
export function parsePositiveInt(value) {
|
|
40
|
+
if (value.length === 0)
|
|
41
|
+
return null;
|
|
42
|
+
let out = 0;
|
|
43
|
+
for (const ch of value) {
|
|
44
|
+
if (ch < "0" || ch > "9")
|
|
45
|
+
return null;
|
|
46
|
+
out = out * 10 + (ch.charCodeAt(0) - "0".charCodeAt(0));
|
|
47
|
+
}
|
|
48
|
+
return out;
|
|
49
|
+
}
|
|
50
|
+
export function readScalar(lines, key) {
|
|
51
|
+
const prefix = ` ${key}:`;
|
|
52
|
+
for (const line of lines) {
|
|
53
|
+
if (line.startsWith(prefix))
|
|
54
|
+
return cleanScalar(line.slice(prefix.length).trim());
|
|
55
|
+
}
|
|
56
|
+
return "";
|
|
57
|
+
}
|
|
58
|
+
export function readFileIDField(lines, key) {
|
|
59
|
+
const prefix = ` ${key}:`;
|
|
60
|
+
for (const line of lines) {
|
|
61
|
+
if (line.startsWith(prefix))
|
|
62
|
+
return extractFileID(line);
|
|
63
|
+
}
|
|
64
|
+
return "";
|
|
65
|
+
}
|
|
66
|
+
export function readGUIDField(lines, key) {
|
|
67
|
+
const prefix = ` ${key}:`;
|
|
68
|
+
for (const line of lines) {
|
|
69
|
+
if (line.startsWith(prefix))
|
|
70
|
+
return extractGUID(line);
|
|
71
|
+
}
|
|
72
|
+
return "";
|
|
73
|
+
}
|
|
74
|
+
export function readComponentIDs(lines) {
|
|
75
|
+
const ids = [];
|
|
76
|
+
for (const line of lines) {
|
|
77
|
+
if (line.includes("- component:")) {
|
|
78
|
+
const id = extractFileID(line);
|
|
79
|
+
if (id !== "" && id !== "0")
|
|
80
|
+
ids.push(id);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
return ids;
|
|
84
|
+
}
|
|
85
|
+
export function extractFileID(line) {
|
|
86
|
+
const start = line.indexOf("fileID:");
|
|
87
|
+
if (start < 0)
|
|
88
|
+
return "";
|
|
89
|
+
let i = start + "fileID:".length;
|
|
90
|
+
while (i < line.length && line[i] === " ")
|
|
91
|
+
i++;
|
|
92
|
+
const begin = i;
|
|
93
|
+
if (i < line.length && line[i] === "-")
|
|
94
|
+
i++;
|
|
95
|
+
while (i < line.length && line[i] >= "0" && line[i] <= "9")
|
|
96
|
+
i++;
|
|
97
|
+
if (i === begin || (line[begin] === "-" && i === begin + 1))
|
|
98
|
+
return "";
|
|
99
|
+
return line.slice(begin, i);
|
|
100
|
+
}
|
|
101
|
+
export function extractGUID(line) {
|
|
102
|
+
const start = line.indexOf("guid:");
|
|
103
|
+
if (start < 0)
|
|
104
|
+
return "";
|
|
105
|
+
return scanGUID(line.slice(start + "guid:".length));
|
|
106
|
+
}
|
|
107
|
+
export function findGUIDs(value) {
|
|
108
|
+
const out = [];
|
|
109
|
+
let offset = 0;
|
|
110
|
+
while (offset < value.length) {
|
|
111
|
+
const start = value.indexOf("guid:", offset);
|
|
112
|
+
if (start < 0)
|
|
113
|
+
break;
|
|
114
|
+
offset = start + "guid:".length;
|
|
115
|
+
const guid = scanGUID(value.slice(offset));
|
|
116
|
+
if (guid !== "") {
|
|
117
|
+
out.push(guid);
|
|
118
|
+
offset += guid.length;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
return out;
|
|
122
|
+
}
|
|
123
|
+
export function findFileIDs(value) {
|
|
124
|
+
const out = [];
|
|
125
|
+
let offset = 0;
|
|
126
|
+
while (offset < value.length) {
|
|
127
|
+
const start = value.indexOf("fileID:", offset);
|
|
128
|
+
if (start < 0)
|
|
129
|
+
break;
|
|
130
|
+
offset = start + "fileID:".length;
|
|
131
|
+
while (offset < value.length && value[offset] === " ")
|
|
132
|
+
offset++;
|
|
133
|
+
const begin = offset;
|
|
134
|
+
if (offset < value.length && value[offset] === "-")
|
|
135
|
+
offset++;
|
|
136
|
+
while (offset < value.length && value[offset] >= "0" && value[offset] <= "9")
|
|
137
|
+
offset++;
|
|
138
|
+
if (offset === begin || (value[begin] === "-" && offset === begin + 1))
|
|
139
|
+
continue;
|
|
140
|
+
out.push(value.slice(begin, offset));
|
|
141
|
+
}
|
|
142
|
+
return out;
|
|
143
|
+
}
|
|
144
|
+
export function scanGUID(value) {
|
|
145
|
+
let i = 0;
|
|
146
|
+
while (i < value.length && value[i] === " ")
|
|
147
|
+
i++;
|
|
148
|
+
const start = i;
|
|
149
|
+
while (i < value.length && isHex(value.charCodeAt(i)))
|
|
150
|
+
i++;
|
|
151
|
+
if (i === start)
|
|
152
|
+
return "";
|
|
153
|
+
return value.slice(start, i).toLowerCase();
|
|
154
|
+
}
|
|
155
|
+
export function isHex(code) {
|
|
156
|
+
return ((code >= 48 && code <= 57) ||
|
|
157
|
+
(code >= 97 && code <= 102) ||
|
|
158
|
+
(code >= 65 && code <= 70));
|
|
159
|
+
}
|
|
160
|
+
export function cleanScalar(value) {
|
|
161
|
+
value = value.trim();
|
|
162
|
+
if (value.length >= 2 && value[0] === '"' && value[value.length - 1] === '"') {
|
|
163
|
+
try {
|
|
164
|
+
return JSON.parse(value);
|
|
165
|
+
}
|
|
166
|
+
catch {
|
|
167
|
+
return value.slice(1, -1);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
return value;
|
|
171
|
+
}
|
|
172
|
+
export function shortGUID(guid) {
|
|
173
|
+
if (guid.length <= 8)
|
|
174
|
+
return guid;
|
|
175
|
+
return guid.slice(0, 8);
|
|
176
|
+
}
|
|
177
|
+
// ===========================================================================
|
|
178
|
+
// .meta GUID extraction — reads the guid: line from a .meta file's contents.
|
|
179
|
+
// ===========================================================================
|
|
180
|
+
export function readMetaGUID(data) {
|
|
181
|
+
let start;
|
|
182
|
+
if (data.startsWith("guid:")) {
|
|
183
|
+
start = "guid:".length;
|
|
184
|
+
}
|
|
185
|
+
else {
|
|
186
|
+
const idx = data.indexOf("\nguid:");
|
|
187
|
+
if (idx < 0)
|
|
188
|
+
return "";
|
|
189
|
+
start = idx + 1 + "guid:".length;
|
|
190
|
+
}
|
|
191
|
+
const end = data.indexOf("\n", start);
|
|
192
|
+
const slice = end < 0 ? data.slice(start) : data.slice(start, end);
|
|
193
|
+
return slice.trim();
|
|
194
|
+
}
|
|
195
|
+
//# sourceMappingURL=primitives.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"primitives.js","sourceRoot":"","sources":["../../src/offline/primitives.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { GUIDIndex, ParsedAsset } from "./types.js";
|
|
2
|
+
import { componentName, localReferenceLabel, objectPath } from "./hierarchy.js";
|
|
3
|
+
export declare function resolveReferences(value: string, guidIndex: GUIDIndex, asset: ParsedAsset): string;
|
|
4
|
+
export declare const OVERRIDE_LABEL_HELPERS: {
|
|
5
|
+
objectPath: typeof objectPath;
|
|
6
|
+
localReferenceLabel: typeof localReferenceLabel;
|
|
7
|
+
componentName: typeof componentName;
|
|
8
|
+
resolveReferences: typeof resolveReferences;
|
|
9
|
+
};
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
// Reference resolution for the offline reader.
|
|
2
|
+
//
|
|
3
|
+
// Extracted from the former monolithic offline.ts (M28-refactoring Plan 3,
|
|
4
|
+
// T3.1). resolveReferences rewrites a scalar field value to inline the
|
|
5
|
+
// human-readable names of the assets it points at — via the GUID→path index for
|
|
6
|
+
// external refs, and via the local FileID→object map for in-file refs. This is
|
|
7
|
+
// the resolution primitive the hierarchy builder and JSON scalar renderer both
|
|
8
|
+
// consume (injected, to keep the dependency one-directional).
|
|
9
|
+
import { basename, extname } from "node:path";
|
|
10
|
+
import { findFileIDs, findGUIDs } from "./primitives.js";
|
|
11
|
+
import { componentName, localReferenceLabel, objectPath, } from "./hierarchy.js";
|
|
12
|
+
export function resolveReferences(value, guidIndex, asset) {
|
|
13
|
+
const guids = findGUIDs(value);
|
|
14
|
+
if (guids.length > 0) {
|
|
15
|
+
const refs = [];
|
|
16
|
+
const seen = new Set();
|
|
17
|
+
for (const guid of guids) {
|
|
18
|
+
const path = guidIndex.get(guid);
|
|
19
|
+
if (!path || seen.has(path))
|
|
20
|
+
continue;
|
|
21
|
+
seen.add(path);
|
|
22
|
+
const name = basename(path);
|
|
23
|
+
const ext = extname(name);
|
|
24
|
+
refs.push(ext ? name.slice(0, -ext.length) : name);
|
|
25
|
+
}
|
|
26
|
+
if (refs.length > 0)
|
|
27
|
+
return `${value} -> ${refs.join(", ")}`;
|
|
28
|
+
}
|
|
29
|
+
if (guids.length === 0) {
|
|
30
|
+
const refs = [];
|
|
31
|
+
const seen = new Set();
|
|
32
|
+
for (const fileID of findFileIDs(value)) {
|
|
33
|
+
const label = localReferenceLabel(asset, fileID);
|
|
34
|
+
if (label === "" || seen.has(label))
|
|
35
|
+
continue;
|
|
36
|
+
seen.add(label);
|
|
37
|
+
refs.push(label);
|
|
38
|
+
}
|
|
39
|
+
if (refs.length > 0)
|
|
40
|
+
return `${value} -> ${refs.join(", ")}`;
|
|
41
|
+
}
|
|
42
|
+
return value;
|
|
43
|
+
}
|
|
44
|
+
// Wire the overrides label-registry with this module's hierarchy-backed
|
|
45
|
+
// implementations. overrides.ts needs objectPath / localReferenceLabel /
|
|
46
|
+
// componentName / resolveReferences for its label resolver, but cannot import
|
|
47
|
+
// references.ts (references imports overrides' collectOverrides). The
|
|
48
|
+
// late-bound registry breaks the cycle; this is the only wiring site.
|
|
49
|
+
export const OVERRIDE_LABEL_HELPERS = {
|
|
50
|
+
objectPath,
|
|
51
|
+
localReferenceLabel,
|
|
52
|
+
componentName,
|
|
53
|
+
resolveReferences,
|
|
54
|
+
};
|
|
55
|
+
//# sourceMappingURL=references.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"references.js","sourceRoot":"","sources":["../../src/offline/references.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAC/C,EAAE;AACF,2EAA2E;AAC3E,uEAAuE;AACvE,gFAAgF;AAChF,+EAA+E;AAC/E,+EAA+E;AAC/E,8DAA8D;AAE9D,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAE9C,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EACL,aAAa,EACb,mBAAmB,EACnB,UAAU,GACX,MAAM,gBAAgB,CAAC;AAExB,MAAM,UAAU,iBAAiB,CAC/B,KAAa,EACb,SAAoB,EACpB,KAAkB;IAElB,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;IAC/B,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrB,MAAM,IAAI,GAAa,EAAE,CAAC;QAC1B,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;QAC/B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACjC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;gBAAE,SAAS;YACtC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACf,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;YAC5B,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;YAC1B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACrD,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,GAAG,KAAK,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;IAC/D,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,GAAa,EAAE,CAAC;QAC1B,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;QAC/B,KAAK,MAAM,MAAM,IAAI,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;YACxC,MAAM,KAAK,GAAG,mBAAmB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;YACjD,IAAI,KAAK,KAAK,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;gBAAE,SAAS;YAC9C,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAChB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnB,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,GAAG,KAAK,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;IAC/D,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,wEAAwE;AACxE,yEAAyE;AACzE,8EAA8E;AAC9E,sEAAsE;AACtE,sEAAsE;AACtE,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,UAAU;IACV,mBAAmB;IACnB,aAAa;IACb,iBAAiB;CAClB,CAAC"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import type { PrefabOverrideEntry, AssetIntegrityIssue } from "../compression/asset-model.js";
|
|
2
|
+
export interface ParsedObject {
|
|
3
|
+
id: string;
|
|
4
|
+
classID: number;
|
|
5
|
+
type: string;
|
|
6
|
+
lines: string[];
|
|
7
|
+
order: number;
|
|
8
|
+
name: string;
|
|
9
|
+
componentIDs: string[];
|
|
10
|
+
gameObjectID: string;
|
|
11
|
+
fatherTransformID: string;
|
|
12
|
+
sourceObjectID: string;
|
|
13
|
+
sourceGUID: string;
|
|
14
|
+
scriptGUID: string;
|
|
15
|
+
}
|
|
16
|
+
export interface HierarchyResult {
|
|
17
|
+
gameObject: ParsedObject;
|
|
18
|
+
children: HierarchyResult[];
|
|
19
|
+
path: string;
|
|
20
|
+
depth: number;
|
|
21
|
+
}
|
|
22
|
+
export interface ParsedAsset {
|
|
23
|
+
path: string;
|
|
24
|
+
kind: string;
|
|
25
|
+
guid: string;
|
|
26
|
+
objects: ParsedObject[];
|
|
27
|
+
byID: Map<string, ParsedObject>;
|
|
28
|
+
}
|
|
29
|
+
export type ScriptIndex = Map<string, string>;
|
|
30
|
+
export type GUIDIndex = Map<string, string>;
|
|
31
|
+
export interface PrefabOverride {
|
|
32
|
+
kind: string;
|
|
33
|
+
target: string;
|
|
34
|
+
propertyPath: string;
|
|
35
|
+
value: string;
|
|
36
|
+
addedObject: string;
|
|
37
|
+
}
|
|
38
|
+
export interface HeaderInfo {
|
|
39
|
+
classID: number;
|
|
40
|
+
id: string;
|
|
41
|
+
}
|
|
42
|
+
export interface JsonParsedObject {
|
|
43
|
+
/** Display label (m_Name / m_ObjectId / name key, or a generated label). */
|
|
44
|
+
name: string;
|
|
45
|
+
/** Type label (top-level kind, or the m_Type discriminator for shadergraph). */
|
|
46
|
+
type: string;
|
|
47
|
+
/** The parsed JSON value. */
|
|
48
|
+
value: unknown;
|
|
49
|
+
}
|
|
50
|
+
export type { PrefabOverrideEntry, AssetIntegrityIssue };
|
|
51
|
+
export declare const nativeClassNames: Record<number, string>;
|
|
52
|
+
export declare function nativeClassName(classID: number): string;
|
|
53
|
+
export declare const extToKind: Record<string, string>;
|
|
54
|
+
export declare const YAML_PARSEABLE_EXTENSIONS: Set<string>;
|
|
55
|
+
export declare const JSON_PARSEABLE_EXTENSIONS: Set<string>;
|
|
56
|
+
export declare const OFFLINE_PARSEABLE_EXTENSIONS: Set<string>;
|
|
57
|
+
export declare function offlineParseKind(assetPath: string): "yaml" | "json" | null;
|
|
58
|
+
export declare const kindAliases: Record<string, string>;
|
|
59
|
+
export declare function kindForPath(path: string): string;
|
|
60
|
+
export declare function normalizeKind(kind: string): string;
|
|
61
|
+
export declare function parseKindSet(raw: string): Set<string>;
|
|
62
|
+
export declare const skipDirs: Set<string>;
|
|
63
|
+
export declare function shouldSkipDir(name: string): boolean;
|
|
64
|
+
export declare const skipFieldNames: Set<string>;
|
|
65
|
+
export declare const EMPTY_PARSED: ParsedAsset;
|