@ue-shed/map-history 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 +21 -0
  2. package/README.md +47 -0
  3. package/dist/baseline-materialization.d.ts +17 -0
  4. package/dist/baseline-materialization.d.ts.map +1 -0
  5. package/dist/baseline-materialization.js +86 -0
  6. package/dist/baseline-materialization.js.map +1 -0
  7. package/dist/diff.d.ts +7 -0
  8. package/dist/diff.d.ts.map +1 -0
  9. package/dist/diff.js +159 -0
  10. package/dist/diff.js.map +1 -0
  11. package/dist/errors.d.ts +14 -0
  12. package/dist/errors.d.ts.map +1 -0
  13. package/dist/errors.js +27 -0
  14. package/dist/errors.js.map +1 -0
  15. package/dist/fast-history-target.d.ts +61 -0
  16. package/dist/fast-history-target.d.ts.map +1 -0
  17. package/dist/fast-history-target.js +248 -0
  18. package/dist/fast-history-target.js.map +1 -0
  19. package/dist/historical-project-tree.d.ts +18 -0
  20. package/dist/historical-project-tree.d.ts.map +1 -0
  21. package/dist/historical-project-tree.js +123 -0
  22. package/dist/historical-project-tree.js.map +1 -0
  23. package/dist/index.d.ts +14 -0
  24. package/dist/index.d.ts.map +1 -0
  25. package/dist/index.js +14 -0
  26. package/dist/index.js.map +1 -0
  27. package/dist/map-history.d.ts +24 -0
  28. package/dist/map-history.d.ts.map +1 -0
  29. package/dist/map-history.js +365 -0
  30. package/dist/map-history.js.map +1 -0
  31. package/dist/package-correlation.d.ts +16 -0
  32. package/dist/package-correlation.d.ts.map +1 -0
  33. package/dist/package-correlation.js +76 -0
  34. package/dist/package-correlation.js.map +1 -0
  35. package/dist/perforce-map-scope.d.ts +56 -0
  36. package/dist/perforce-map-scope.d.ts.map +1 -0
  37. package/dist/perforce-map-scope.js +284 -0
  38. package/dist/perforce-map-scope.js.map +1 -0
  39. package/dist/perforce.d.ts +105 -0
  40. package/dist/perforce.d.ts.map +1 -0
  41. package/dist/perforce.js +441 -0
  42. package/dist/perforce.js.map +1 -0
  43. package/dist/playback.d.ts +60 -0
  44. package/dist/playback.d.ts.map +1 -0
  45. package/dist/playback.js +168 -0
  46. package/dist/playback.js.map +1 -0
  47. package/dist/revision-materialization.d.ts +14 -0
  48. package/dist/revision-materialization.d.ts.map +1 -0
  49. package/dist/revision-materialization.js +68 -0
  50. package/dist/revision-materialization.js.map +1 -0
  51. package/dist/revision-plan.d.ts +44 -0
  52. package/dist/revision-plan.d.ts.map +1 -0
  53. package/dist/revision-plan.js +84 -0
  54. package/dist/revision-plan.js.map +1 -0
  55. package/dist/schema.d.ts +7964 -0
  56. package/dist/schema.d.ts.map +1 -0
  57. package/dist/schema.js +292 -0
  58. package/dist/schema.js.map +1 -0
  59. package/dist/submitted-change-selection.d.ts +22 -0
  60. package/dist/submitted-change-selection.d.ts.map +1 -0
  61. package/dist/submitted-change-selection.js +101 -0
  62. package/dist/submitted-change-selection.js.map +1 -0
  63. package/package.json +57 -0
@@ -0,0 +1,365 @@
1
+ import { Context, Effect, Exit, Layer, Ref } from "effect";
2
+ import { AssetReader, AssetReaderLive } from "@ue-shed/unreal-assets";
3
+ import { materializeBaseline } from "./baseline-materialization.js";
4
+ import { diffSavedWorldSnapshots } from "./diff.js";
5
+ import { MapHistoryError } from "./errors.js";
6
+ import { resolvePerforceFastMapScope } from "./fast-history-target.js";
7
+ import { acquireHistoricalProjectTree } from "./historical-project-tree.js";
8
+ import { findUnclassifiedPackageChanges } from "./package-correlation.js";
9
+ import { perforceHistorySourceLayer, PerforceProjectContext, PerforceHistorySource } from "./perforce.js";
10
+ import { resolvePerforceMapLineage, resolvePerforceMapScope, scopedPerforceFile } from "./perforce-map-scope.js";
11
+ import { materializePlannedRevision } from "./revision-materialization.js";
12
+ import { planScopedRevision } from "./revision-plan.js";
13
+ import {} from "./schema.js";
14
+ import { selectSubmittedChanges } from "./submitted-change-selection.js";
15
+ /** The Perforce-first Map History workflow. It owns no credentials or source-control policy. */
16
+ export class MapHistory extends Context.Service()("@ue-shed/map-history/MapHistory") {
17
+ }
18
+ function progress(phase, processedChangelists, totalChangelists) {
19
+ return { phase, processedChangelists, totalChangelists };
20
+ }
21
+ function savedWorldError(operation, error) {
22
+ return new MapHistoryError({
23
+ kind: error.kind === "resource_limit" ? "resource_limit" : "saved_world_decode",
24
+ message: `${operation}: ${error.message}`,
25
+ recovery: error.kind === "resource_limit"
26
+ ? "Narrow the map scope or raise maxPackages explicitly."
27
+ : "Confirm the historical map files can be read and retry.",
28
+ retrySafe: error.retrySafe
29
+ });
30
+ }
31
+ function historicalLayoutError(scope, world) {
32
+ return new MapHistoryError({
33
+ kind: "unsupported_history_layout",
34
+ message: `Historical map storage is ${world.sourceKind}, but the selected map currently uses ${scope.sourceKind}.`,
35
+ recovery: "Choose a range that does not cross a conventional-level and World Partition conversion.",
36
+ retrySafe: false
37
+ });
38
+ }
39
+ function evidenceError(file) {
40
+ return new MapHistoryError({
41
+ kind: "perforce_command",
42
+ message: `Perforce reported no exact revision for changed map file ${file.depotPath}.`,
43
+ recovery: "Check the submitted changelist metadata and retry.",
44
+ retrySafe: false
45
+ });
46
+ }
47
+ function compareText(left, right) {
48
+ return left < right ? -1 : left > right ? 1 : 0;
49
+ }
50
+ function packageChangeEvidence(changes) {
51
+ return changes.map((change) => ({
52
+ action: change.action,
53
+ afterRevision: change.afterRevision,
54
+ beforeRevision: change.beforeRevision,
55
+ depotPath: change.depotPath,
56
+ packageName: change.packageName
57
+ }));
58
+ }
59
+ function packageRevisionEvidence(files, scopes) {
60
+ const evidence = [];
61
+ for (const file of files) {
62
+ if (!scopes.some((scope) => scopedPerforceFile(scope, file.depotPath) !== undefined))
63
+ continue;
64
+ if (file.revision === null || file.revision <= 0)
65
+ return Effect.fail(evidenceError(file));
66
+ evidence.push({
67
+ action: file.action,
68
+ depotPath: file.depotPath,
69
+ revision: file.revision
70
+ });
71
+ }
72
+ evidence.sort((left, right) => compareText(left.depotPath, right.depotPath));
73
+ return Effect.succeed(evidence);
74
+ }
75
+ function lineageScopeAtChange(lineage, change) {
76
+ let index = 0;
77
+ while (true) {
78
+ const move = lineage.moves[index];
79
+ if (move === undefined || move.change > change)
80
+ break;
81
+ index += 1;
82
+ }
83
+ const scope = lineage.locations[index];
84
+ if (scope === undefined) {
85
+ throw new Error("Resolved map lineage has no location for the requested changelist.");
86
+ }
87
+ return scope;
88
+ }
89
+ function scopedFilesForRevision(files, scopes) {
90
+ const byDepotPath = new Map();
91
+ for (const file of files) {
92
+ for (const scope of scopes) {
93
+ const scoped = scopedPerforceFile(scope, file.depotPath);
94
+ if (scoped !== undefined)
95
+ byDepotPath.set(scoped.depotPath, scoped);
96
+ }
97
+ }
98
+ return [...byDepotPath.values()];
99
+ }
100
+ function assertResolvedMove(options) {
101
+ const deletesCurrentMap = options.files.some((file) => file.depotPath === options.before.mapDepotPath && file.action === "move/delete");
102
+ if (!deletesCurrentMap || options.after.mapDepotPath !== options.before.mapDepotPath) {
103
+ return Effect.void;
104
+ }
105
+ return Effect.fail(new MapHistoryError({
106
+ kind: "ambiguous_map_lineage",
107
+ message: `Changelist ${options.change} moves ${options.before.mapDepotPath}, but Perforce did not provide one bounded direct destination.`,
108
+ recovery: "Inspect the map's direct Perforce move records and retry.",
109
+ retrySafe: false
110
+ }));
111
+ }
112
+ function emptyWorldBeforeCreation(world) {
113
+ return { ...world, actors: [], diagnostics: [] };
114
+ }
115
+ function deduplicateDiagnostics(diagnostics) {
116
+ const unique = new Map();
117
+ for (const diagnostic of diagnostics) {
118
+ unique.set(`${diagnostic.code}\u0000${diagnostic.message}\u0000${diagnostic.retrySafe}`, diagnostic);
119
+ }
120
+ return [...unique.values()].sort((left, right) => compareText(`${left.code}\u0000${left.message}`, `${right.code}\u0000${right.message}`));
121
+ }
122
+ function readHistoricalWorld(options) {
123
+ return Effect.fn("MapHistory.readHistoricalWorld")(function* () {
124
+ const reader = yield* AssetReader;
125
+ const world = yield* reader
126
+ .readSavedWorld({
127
+ concurrency: options.limits.maxConcurrency,
128
+ mapPath: options.scope.mapProjectRelativePath,
129
+ maximumAssets: options.limits.maxPackages,
130
+ projectRoot: options.treeProjectRoot
131
+ })
132
+ .pipe(Effect.mapError((error) => savedWorldError("Could not read historical map", error)));
133
+ if (world.sourceKind !== options.scope.sourceKind) {
134
+ return yield* Effect.fail(historicalLayoutError(options.scope, world));
135
+ }
136
+ return world;
137
+ })();
138
+ }
139
+ function snapshotOf(world, scope) {
140
+ return {
141
+ actors: world.actors,
142
+ completeness: world.completeness,
143
+ diagnostics: world.diagnostics,
144
+ mapPackage: world.authority.mapPackage,
145
+ mapPath: scope.mapProjectRelativePath,
146
+ sourceKind: world.sourceKind,
147
+ summary: world.summary
148
+ };
149
+ }
150
+ function reconstructScopedMapHistory(options) {
151
+ return Effect.fn("MapHistory.reconstructScopedMapHistory")(function* () {
152
+ const { limits, range, reportProgress, scope } = options;
153
+ yield* reportProgress(progress("listing_changes", 0, 0));
154
+ const lineage = yield* resolvePerforceMapLineage({
155
+ limits,
156
+ projectRoot: options.projectRoot,
157
+ scope
158
+ });
159
+ const selection = yield* selectSubmittedChanges({
160
+ fileSpecs: lineage.locations.flatMap((location) => location.fileSpecs),
161
+ maxChangelists: limits.maxChangelists,
162
+ range
163
+ });
164
+ const totalChangelists = selection.revisions.length;
165
+ const tree = yield* acquireHistoricalProjectTree();
166
+ const diagnostics = [];
167
+ let complete = true;
168
+ let materializedFiles = 0;
169
+ let previous;
170
+ let previousScope;
171
+ let rangeStartSnapshot;
172
+ if (selection.baseline !== undefined) {
173
+ const baselineScope = lineageScopeAtChange(lineage, selection.baseline.change);
174
+ yield* reportProgress(progress("materializing_baseline", 0, totalChangelists));
175
+ materializedFiles += yield* materializeBaseline({
176
+ change: selection.baseline.change,
177
+ concurrency: limits.maxConcurrency,
178
+ maxFiles: limits.maxMaterializedFiles,
179
+ scope: baselineScope,
180
+ tree
181
+ });
182
+ yield* reportProgress(progress("parsing", 0, totalChangelists));
183
+ previous = yield* readHistoricalWorld({
184
+ limits,
185
+ scope: baselineScope,
186
+ treeProjectRoot: tree.projectRoot
187
+ });
188
+ complete &&= previous.completeness === "complete";
189
+ diagnostics.push(...previous.diagnostics);
190
+ previousScope = baselineScope;
191
+ rangeStartSnapshot = snapshotOf(previous, baselineScope);
192
+ }
193
+ const source = yield* PerforceHistorySource;
194
+ const revisions = [];
195
+ for (const [index, selected] of selection.revisions.entries()) {
196
+ yield* reportProgress(progress("applying_revision", index, totalChangelists));
197
+ const described = yield* source.describeChangelist(selected.change);
198
+ if (described.status !== "submitted") {
199
+ return yield* Effect.fail(new MapHistoryError({
200
+ kind: "perforce_command",
201
+ message: `Changelist ${selected.change} is not submitted.`,
202
+ recovery: "Select submitted Perforce history and retry.",
203
+ retrySafe: false
204
+ }));
205
+ }
206
+ const beforeScope = lineageScopeAtChange(lineage, selected.change - 1);
207
+ const afterScope = lineageScopeAtChange(lineage, selected.change);
208
+ yield* assertResolvedMove({
209
+ after: afterScope,
210
+ before: beforeScope,
211
+ change: selected.change,
212
+ files: described.files
213
+ });
214
+ const revisionScopes = beforeScope.mapDepotPath === afterScope.mapDepotPath
215
+ ? [afterScope]
216
+ : [beforeScope, afterScope];
217
+ const plan = planScopedRevision({
218
+ files: described.files,
219
+ scope: scopedFilesForRevision(described.files, revisionScopes)
220
+ });
221
+ const remainingMaterializations = limits.maxMaterializedFiles - materializedFiles;
222
+ materializedFiles += yield* materializePlannedRevision({
223
+ change: selected.change,
224
+ concurrency: limits.maxConcurrency,
225
+ maxFiles: Math.max(0, remainingMaterializations),
226
+ plan,
227
+ tree
228
+ });
229
+ yield* reportProgress(progress("parsing", index, totalChangelists));
230
+ const current = yield* readHistoricalWorld({
231
+ limits,
232
+ scope: afterScope,
233
+ treeProjectRoot: tree.projectRoot
234
+ });
235
+ yield* reportProgress(progress("diffing", index, totalChangelists));
236
+ const before = previous ?? emptyWorldBeforeCreation(current);
237
+ const snapshotDiff = diffSavedWorldSnapshots(before, current);
238
+ const evidence = yield* packageRevisionEvidence(described.files, revisionScopes);
239
+ const unclassifiedPackageChanges = findUnclassifiedPackageChanges({
240
+ after: current,
241
+ before,
242
+ diff: snapshotDiff,
243
+ packageChanges: plan.kind === "ready" ? packageChangeEvidence(plan.packageChanges) : []
244
+ });
245
+ const revisionDiagnostics = [...current.diagnostics, ...snapshotDiff.diagnostics];
246
+ revisions.push({
247
+ ...(selected.description === undefined
248
+ ? {}
249
+ : { description: selected.description }),
250
+ ...(selected.user === undefined ? {} : { user: selected.user }),
251
+ change: selected.change,
252
+ changes: snapshotDiff.changes,
253
+ completeness: current.completeness,
254
+ diagnostics: revisionDiagnostics,
255
+ files: evidence,
256
+ submittedAt: selected.submittedAt,
257
+ unclassifiedPackageChanges
258
+ });
259
+ complete &&= current.completeness === "complete";
260
+ diagnostics.push(...revisionDiagnostics);
261
+ previous = current;
262
+ previousScope = afterScope;
263
+ yield* reportProgress(progress("applying_revision", index + 1, totalChangelists));
264
+ }
265
+ const completeness = complete ? "complete" : "partial";
266
+ return {
267
+ baseline: selection.baseline === undefined
268
+ ? { status: "map_not_yet_created" }
269
+ : {
270
+ change: selection.baseline.change,
271
+ status: "available"
272
+ },
273
+ completeness,
274
+ diagnostics: deduplicateDiagnostics(diagnostics),
275
+ ...(scope.externalActorDepotRoot === undefined
276
+ ? {}
277
+ : { externalActorDepotRoot: scope.externalActorDepotRoot }),
278
+ mapDepotPath: (lineage.locations.at(-1) ?? scope).mapDepotPath,
279
+ ...(rangeStartSnapshot === undefined ? {} : { rangeStartSnapshot }),
280
+ ...(previous === undefined || previousScope === undefined
281
+ ? {}
282
+ : { rangeEndSnapshot: snapshotOf(previous, previousScope) }),
283
+ revisions
284
+ };
285
+ })();
286
+ }
287
+ function readPerforceMapHistoryWorkflow(query, reportProgress) {
288
+ return Effect.fn("MapHistory.readPerforceMapHistory")(function* () {
289
+ yield* reportProgress(progress("resolving_scope", 0, 0));
290
+ const scope = yield* resolvePerforceMapScope(query);
291
+ const body = yield* reconstructScopedMapHistory({
292
+ limits: query.limits,
293
+ projectRoot: query.projectRoot,
294
+ range: query.range,
295
+ reportProgress,
296
+ scope
297
+ });
298
+ return {
299
+ ...body,
300
+ query,
301
+ schemaVersion: 1
302
+ };
303
+ })();
304
+ }
305
+ function readPerforceFastMapHistoryWorkflow(query, reportProgress) {
306
+ return Effect.fn("MapHistory.readPerforceFastMapHistory")(function* () {
307
+ yield* reportProgress(progress("resolving_scope", 0, 0));
308
+ const resolved = yield* resolvePerforceFastMapScope(query);
309
+ const body = yield* reconstructScopedMapHistory({
310
+ limits: query.limits,
311
+ projectRoot: query.projectRoot,
312
+ range: query.range,
313
+ reportProgress,
314
+ scope: resolved.scope
315
+ });
316
+ return {
317
+ ...body,
318
+ coverage: resolved.coverage,
319
+ mode: "fast",
320
+ query,
321
+ schemaVersion: 1
322
+ };
323
+ })();
324
+ }
325
+ function durationError(maxDurationMs) {
326
+ return new MapHistoryError({
327
+ kind: "resource_limit",
328
+ message: `Map history exceeded its ${maxDurationMs}ms duration limit.`,
329
+ recovery: "Narrow the history range or raise maxDurationMs explicitly.",
330
+ retrySafe: true
331
+ });
332
+ }
333
+ /** Builds Map History from injected snapshot and Perforce boundaries. */
334
+ export const mapHistoryLayer = Layer.effect(MapHistory, Effect.gen(function* () {
335
+ const reader = yield* AssetReader;
336
+ const perforce = yield* PerforceHistorySource;
337
+ const latestProgress = yield* Ref.make(progress("idle", 0, 0));
338
+ const reportProgress = (value) => Ref.set(latestProgress, value);
339
+ return MapHistory.of({
340
+ progress: () => Ref.get(latestProgress),
341
+ readPerforceFastMapHistory: (query) => Effect.scoped(readPerforceFastMapHistoryWorkflow(query, reportProgress)).pipe(Effect.provideService(AssetReader, reader), Effect.provideService(PerforceHistorySource, perforce), Effect.provideService(PerforceProjectContext, query.projectRoot), Effect.timeoutOrElse({
342
+ duration: query.limits.maxDurationMs,
343
+ orElse: () => Effect.fail(durationError(query.limits.maxDurationMs))
344
+ }), Effect.onExit((exit) => reportProgress(progress(Exit.isSuccess(exit) ? "ready" : "failed", 0, 0))), Effect.withSpan("map_history.read_perforce_fast")),
345
+ readPerforceMapHistory: (query) => Effect.scoped(readPerforceMapHistoryWorkflow(query, reportProgress)).pipe(Effect.provideService(AssetReader, reader), Effect.provideService(PerforceHistorySource, perforce), Effect.provideService(PerforceProjectContext, query.projectRoot), Effect.timeoutOrElse({
346
+ duration: query.limits.maxDurationMs,
347
+ orElse: () => Effect.fail(durationError(query.limits.maxDurationMs))
348
+ }), Effect.onExit((exit) => reportProgress(progress(Exit.isSuccess(exit) ? "ready" : "failed", 0, 0))), Effect.withSpan("map_history.read_perforce"))
349
+ });
350
+ }));
351
+ /** The optional default layer uses the configured asset reader and local Perforce configuration. */
352
+ export const mapHistoryLiveLayer = Layer.provide(mapHistoryLayer, Layer.merge(AssetReaderLive, perforceHistorySourceLayer()));
353
+ export function makeMapHistoryTestLayer(service) {
354
+ return Layer.succeed(MapHistory, MapHistory.of(service));
355
+ }
356
+ export function readPerforceMapHistory(query) {
357
+ return Effect.flatMap(MapHistory, (history) => history.readPerforceMapHistory(query));
358
+ }
359
+ export function readPerforceFastMapHistory(query) {
360
+ return Effect.flatMap(MapHistory, (history) => history.readPerforceFastMapHistory(query));
361
+ }
362
+ export function mapHistoryProgress() {
363
+ return Effect.flatMap(MapHistory, (history) => history.progress());
364
+ }
365
+ //# sourceMappingURL=map-history.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"map-history.js","sourceRoot":"","sources":["../src/map-history.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import type { SavedWorld } from "@ue-shed/protocol";
2
+ import type { MapSnapshotDiff, SavedPackageChangeEvidence, UnclassifiedPackageChange } from "./schema.js";
3
+ export interface CorrelatePackageChangesOptions {
4
+ readonly after: SavedWorld;
5
+ readonly before: SavedWorld;
6
+ readonly diff: MapSnapshotDiff;
7
+ readonly packageChanges: readonly SavedPackageChangeEvidence[];
8
+ }
9
+ /**
10
+ * Retains every changed saved package that the supported actor projection cannot explain.
11
+ *
12
+ * `packageName` is supplied by the verified depot-to-project mapping boundary. This function does
13
+ * not infer Unreal package identity from depot strings.
14
+ */
15
+ export declare function findUnclassifiedPackageChanges(options: CorrelatePackageChangesOptions): readonly UnclassifiedPackageChange[];
16
+ //# sourceMappingURL=package-correlation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-correlation.d.ts","sourceRoot":"","sources":["../src/package-correlation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAmB,MAAM,mBAAmB,CAAC;AAErE,OAAO,KAAK,EAGX,eAAe,EACf,0BAA0B,EAC1B,yBAAyB,EACzB,MAAM,aAAa,CAAC;AAoDrB,MAAM,WAAW,8BAA8B;IAC9C,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC;IAC/B,QAAQ,CAAC,cAAc,EAAE,SAAS,0BAA0B,EAAE,CAAC;CAC/D;AAED;;;;;GAKG;AACH,wBAAgB,8BAA8B,CAC7C,OAAO,EAAE,8BAA8B,GACrC,SAAS,yBAAyB,EAAE,CAgCtC"}
@@ -0,0 +1,76 @@
1
+ import { actorIdentityKey, actorIdentityOf } from "./diff.js";
2
+ function actorPackagesForChange(change) {
3
+ switch (change.kind) {
4
+ case "actor_added":
5
+ return [change.after.packageName];
6
+ case "actor_removed":
7
+ return [change.before.packageName];
8
+ case "actor_moved":
9
+ case "actor_label_changed":
10
+ case "actor_class_changed":
11
+ case "actor_package_changed":
12
+ case "actor_position_resolution_changed":
13
+ return [change.before.packageName, change.after.packageName];
14
+ case "snapshot_coverage_changed":
15
+ return [];
16
+ }
17
+ }
18
+ function ambiguousPackageNames(world) {
19
+ const actorsByIdentity = new Map();
20
+ for (const actor of world.actors) {
21
+ const key = actorIdentityKey(actorIdentityOf(actor));
22
+ const actors = actorsByIdentity.get(key);
23
+ if (actors === undefined)
24
+ actorsByIdentity.set(key, [actor]);
25
+ else
26
+ actors.push(actor);
27
+ }
28
+ return new Set([...actorsByIdentity.values()]
29
+ .filter((actors) => actors.length > 1)
30
+ .flatMap((actors) => actors.map((actor) => actor.packageName)));
31
+ }
32
+ function identitiesInPackage(packageName, before, after, ambiguousPackages) {
33
+ if (ambiguousPackages.has(packageName))
34
+ return [];
35
+ const identities = new Map();
36
+ for (const actor of [...before.actors, ...after.actors]) {
37
+ if (actor.packageName !== packageName)
38
+ continue;
39
+ const identity = actorIdentityOf(actor);
40
+ identities.set(actorIdentityKey(identity), identity);
41
+ }
42
+ return [...identities.entries()]
43
+ .sort(([left], [right]) => left.localeCompare(right))
44
+ .map(([, identity]) => identity);
45
+ }
46
+ /**
47
+ * Retains every changed saved package that the supported actor projection cannot explain.
48
+ *
49
+ * `packageName` is supplied by the verified depot-to-project mapping boundary. This function does
50
+ * not infer Unreal package identity from depot strings.
51
+ */
52
+ export function findUnclassifiedPackageChanges(options) {
53
+ const explainedPackages = new Set(options.diff.changes.flatMap((change) => actorPackagesForChange(change)));
54
+ const ambiguousPackages = new Set([
55
+ ...ambiguousPackageNames(options.before),
56
+ ...ambiguousPackageNames(options.after)
57
+ ]);
58
+ const snapshotPartial = options.before.completeness === "partial" || options.after.completeness === "partial";
59
+ return [...options.packageChanges]
60
+ .sort((left, right) => left.depotPath.localeCompare(right.depotPath))
61
+ .filter((change) => !explainedPackages.has(change.packageName))
62
+ .map((change) => ({
63
+ action: change.action,
64
+ actorIdentities: identitiesInPackage(change.packageName, options.before, options.after, ambiguousPackages),
65
+ afterRevision: change.afterRevision,
66
+ beforeRevision: change.beforeRevision,
67
+ depotPath: change.depotPath,
68
+ packageName: change.packageName,
69
+ reason: snapshotPartial
70
+ ? "snapshot_partial"
71
+ : ambiguousPackages.has(change.packageName)
72
+ ? "actor_identity_unavailable"
73
+ : "projection_unchanged"
74
+ }));
75
+ }
76
+ //# sourceMappingURL=package-correlation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-correlation.js","sourceRoot":"","sources":["../src/package-correlation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ import { AssetReader } from "@ue-shed/unreal-assets";
2
+ import type { SavedWorld } from "@ue-shed/protocol";
3
+ import { Effect } from "effect";
4
+ import { MapHistoryError } from "./errors.js";
5
+ import { PerforceHistorySource, type PerforceMapMove } from "./perforce.js";
6
+ import type { ScopedPerforceFile } from "./revision-plan.js";
7
+ import type { PerforceMapHistoryQuery } from "./schema.js";
8
+ export interface ResolvedPerforceMapScope {
9
+ /**
10
+ * When set, only these package names may enter historical materialization. Fast History uses
11
+ * this to keep unrelated external actors out of a targeted reconstruction.
12
+ */
13
+ readonly allowedPackageNames?: ReadonlySet<string>;
14
+ readonly externalActorDepotRoot?: string;
15
+ readonly externalActorProjectRoot?: string;
16
+ readonly fileSpecs: readonly string[];
17
+ readonly mapDepotPath: string;
18
+ readonly mapPackageName: string;
19
+ readonly mapProjectRelativePath: string;
20
+ readonly sourceKind: "level" | "world_partition";
21
+ }
22
+ export interface ResolvedPerforceMapLineage {
23
+ readonly locations: readonly ResolvedPerforceMapScope[];
24
+ readonly moves: readonly PerforceMapMove[];
25
+ }
26
+ export declare const MAX_DIRECT_MAP_MOVES = 16;
27
+ declare function depotPackageFileSpec(depotPath: string): string;
28
+ /**
29
+ * Converts a `/Game/...` package name to the project-relative saved package path for a primary
30
+ * `.uasset` or `.umap` file. Companion sidecar extensions are derived later from depot listings.
31
+ */
32
+ export declare function projectRelativePathForPackageName(packageName: string, extension: ".uasset" | ".umap"): string | undefined;
33
+ /**
34
+ * Converts a depot path to one exact, supported saved-package file in the selected map scope.
35
+ * Paths outside the map or current external-actor subtree, including unrelated depot metadata,
36
+ * deliberately return `undefined` rather than becoming historical project files.
37
+ */
38
+ export declare function scopedPerforceFile(scope: ResolvedPerforceMapScope, depotPath: string): ScopedPerforceFile | undefined;
39
+ /** Resolves the selected saved map and its present-day World Partition actor subtree to P4 scopes. */
40
+ export declare function resolvePerforceMapScope(query: PerforceMapHistoryQuery): Effect.Effect<ResolvedPerforceMapScope, MapHistoryError, AssetReader | PerforceHistorySource>;
41
+ /** Resolves only direct map moves and keeps every resulting location inside the selected project. */
42
+ export declare function resolvePerforceMapLineage(options: {
43
+ readonly limits: PerforceMapHistoryQuery["limits"];
44
+ readonly projectRoot: PerforceMapHistoryQuery["projectRoot"];
45
+ readonly scope: ResolvedPerforceMapScope;
46
+ }): Effect.Effect<ResolvedPerforceMapLineage, MapHistoryError, PerforceHistorySource>;
47
+ export declare function resolvePresentDayMapScope(query: {
48
+ readonly limits: PerforceMapHistoryQuery["limits"];
49
+ readonly mapPath: PerforceMapHistoryQuery["mapPath"];
50
+ readonly projectRoot: PerforceMapHistoryQuery["projectRoot"];
51
+ }): Effect.Effect<{
52
+ readonly scope: ResolvedPerforceMapScope;
53
+ readonly world: SavedWorld;
54
+ }, MapHistoryError, AssetReader | PerforceHistorySource>;
55
+ export { depotPackageFileSpec };
56
+ //# sourceMappingURL=perforce-map-scope.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"perforce-map-scope.d.ts","sourceRoot":"","sources":["../src/perforce-map-scope.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAyB,MAAM,wBAAwB,CAAC;AAC5E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,qBAAqB,EAAE,KAAK,eAAe,EAAE,MAAM,eAAe,CAAC;AAC5E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAE3D,MAAM,WAAW,wBAAwB;IACxC;;;OAGG;IACH,QAAQ,CAAC,mBAAmB,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACnD,QAAQ,CAAC,sBAAsB,CAAC,EAAE,MAAM,CAAC;IACzC,QAAQ,CAAC,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAC3C,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,sBAAsB,EAAE,MAAM,CAAC;IACxC,QAAQ,CAAC,UAAU,EAAE,OAAO,GAAG,iBAAiB,CAAC;CACjD;AAED,MAAM,WAAW,0BAA0B;IAC1C,QAAQ,CAAC,SAAS,EAAE,SAAS,wBAAwB,EAAE,CAAC;IACxD,QAAQ,CAAC,KAAK,EAAE,SAAS,eAAe,EAAE,CAAC;CAC3C;AAED,eAAO,MAAM,oBAAoB,KAAK,CAAC;AA2BvC,iBAAS,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAIvD;AAmCD;;;GAGG;AACH,wBAAgB,iCAAiC,CAChD,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,SAAS,GAAG,OAAO,GAC5B,MAAM,GAAG,SAAS,CAWpB;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CACjC,KAAK,EAAE,wBAAwB,EAC/B,SAAS,EAAE,MAAM,GACf,kBAAkB,GAAG,SAAS,CAkDhC;AAED,sGAAsG;AACtG,wBAAgB,uBAAuB,CACtC,KAAK,EAAE,uBAAuB,GAC5B,MAAM,CAAC,MAAM,CAAC,wBAAwB,EAAE,eAAe,EAAE,WAAW,GAAG,qBAAqB,CAAC,CAK/F;AAED,qGAAqG;AACrG,wBAAgB,yBAAyB,CAAC,OAAO,EAAE;IAClD,QAAQ,CAAC,MAAM,EAAE,uBAAuB,CAAC,QAAQ,CAAC,CAAC;IACnD,QAAQ,CAAC,WAAW,EAAE,uBAAuB,CAAC,aAAa,CAAC,CAAC;IAC7D,QAAQ,CAAC,KAAK,EAAE,wBAAwB,CAAC;CACzC,GAAG,MAAM,CAAC,MAAM,CAAC,0BAA0B,EAAE,eAAe,EAAE,qBAAqB,CAAC,CAyGpF;AAED,wBAAgB,yBAAyB,CAAC,KAAK,EAAE;IAChD,QAAQ,CAAC,MAAM,EAAE,uBAAuB,CAAC,QAAQ,CAAC,CAAC;IACnD,QAAQ,CAAC,OAAO,EAAE,uBAAuB,CAAC,SAAS,CAAC,CAAC;IACrD,QAAQ,CAAC,WAAW,EAAE,uBAAuB,CAAC,aAAa,CAAC,CAAC;CAC7D,GAAG,MAAM,CAAC,MAAM,CAChB;IAAE,QAAQ,CAAC,KAAK,EAAE,wBAAwB,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAA;CAAE,EACxE,eAAe,EACf,WAAW,GAAG,qBAAqB,CACnC,CAwEA;AAED,OAAO,EAAE,oBAAoB,EAAE,CAAC"}