@shapeshift-labs/frontier-lang-compiler 0.2.92 → 0.2.94

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.
@@ -0,0 +1,43 @@
1
+ export interface SemanticPatchBundleRecordIndex {
2
+ readonly baseHashes: readonly string[];
3
+ readonly targetHashes: readonly string[];
4
+ readonly sourceHashes: readonly string[];
5
+ readonly sourcePaths: readonly string[];
6
+ readonly regionKeys: readonly string[];
7
+ readonly regionKinds: readonly string[];
8
+ readonly conflictKeys: readonly string[];
9
+ readonly sourceMapIds: readonly string[];
10
+ readonly sourceMapMappingIds: readonly string[];
11
+ readonly sourceMapLinkIds: readonly string[];
12
+ readonly evidenceIds: readonly string[];
13
+ readonly proofIds: readonly string[];
14
+ readonly historyIds: readonly string[];
15
+ readonly semanticOperationIds: readonly string[];
16
+ readonly semanticEditScriptIds: readonly string[];
17
+ readonly semanticEditProjectionIds: readonly string[];
18
+ readonly semanticEditReplayIds: readonly string[];
19
+ readonly semanticEditReplayStatuses: readonly string[];
20
+ readonly semanticEditReplayActions: readonly string[];
21
+ readonly semanticEditReplayCurrentHashes: readonly string[];
22
+ readonly semanticEditReplayOutputHashes: readonly string[];
23
+ readonly semanticEditKeys: readonly string[];
24
+ readonly semanticIdentityHashes: readonly string[];
25
+ readonly sourceIdentityHashes: readonly string[];
26
+ readonly operationContentHashes: readonly string[];
27
+ readonly editContentHashes: readonly string[];
28
+ readonly semanticTransformIds: readonly string[];
29
+ readonly semanticTransformKeys: readonly string[];
30
+ readonly semanticTransformIdentityHashes: readonly string[];
31
+ readonly semanticTransformContentHashes: readonly string[];
32
+ readonly projectionIdentityHashes: readonly string[];
33
+ readonly semanticTransformReadinesses: readonly string[];
34
+ readonly semanticTransformEvidenceIds: readonly string[];
35
+ readonly transformSourceLanguages: readonly string[];
36
+ readonly transformTargetLanguages: readonly string[];
37
+ readonly transformSourcePaths: readonly string[];
38
+ readonly transformTargetPaths: readonly string[];
39
+ readonly patchIds: readonly string[];
40
+ readonly mergeCandidateIds: readonly string[];
41
+ readonly readinesses: readonly string[];
42
+ readonly admissionStatuses: readonly string[];
43
+ }
@@ -6,6 +6,9 @@ export type SemanticPatchBundleOverlapKind =
6
6
  | 'semantic-edit-key'
7
7
  | 'semantic-identity'
8
8
  | 'source-identity'
9
+ | 'semantic-edit-replay'
10
+ | 'replay-output'
11
+ | 'replay-current'
9
12
  | 'transform-content'
10
13
  | 'semantic-transform'
11
14
  | 'projection-identity'
@@ -27,6 +30,11 @@ export interface SemanticPatchBundleOverlapShared {
27
30
  readonly semanticEditKeys: readonly string[];
28
31
  readonly semanticIdentityHashes: readonly string[];
29
32
  readonly sourceIdentityHashes: readonly string[];
33
+ readonly semanticEditReplayIds: readonly string[];
34
+ readonly semanticEditReplayStatuses: readonly string[];
35
+ readonly semanticEditReplayActions: readonly string[];
36
+ readonly semanticEditReplayCurrentHashes: readonly string[];
37
+ readonly semanticEditReplayOutputHashes: readonly string[];
30
38
  readonly semanticTransformContentHashes: readonly string[];
31
39
  readonly semanticTransformIdentityHashes: readonly string[];
32
40
  readonly projectionIdentityHashes: readonly string[];
@@ -97,6 +105,16 @@ export interface SemanticPatchBundleOverlapQuery {
97
105
  readonly conflictKeys?: readonly string[];
98
106
  readonly semanticEditKey?: string | readonly string[];
99
107
  readonly semanticEditKeys?: readonly string[];
108
+ readonly semanticEditReplayId?: string | readonly string[];
109
+ readonly semanticEditReplayIds?: readonly string[];
110
+ readonly semanticEditReplayStatus?: string | readonly string[];
111
+ readonly semanticEditReplayStatuses?: readonly string[];
112
+ readonly semanticEditReplayAction?: string | readonly string[];
113
+ readonly semanticEditReplayActions?: readonly string[];
114
+ readonly semanticEditReplayCurrentHash?: string | readonly string[];
115
+ readonly semanticEditReplayCurrentHashes?: readonly string[];
116
+ readonly semanticEditReplayOutputHash?: string | readonly string[];
117
+ readonly semanticEditReplayOutputHashes?: readonly string[];
100
118
  readonly semanticTransformIdentityHash?: string | readonly string[];
101
119
  readonly semanticTransformIdentityHashes?: readonly string[];
102
120
  readonly semanticTransformContentHash?: string | readonly string[];
@@ -7,9 +7,12 @@ import type {
7
7
  SourceSpan
8
8
  } from '@shapeshift-labs/frontier-lang-kernel';
9
9
  import type { NativeSourceChangeKind, NativeSourceChangeSet } from './native-diff.js';
10
- import type { SemanticEditProjection, SemanticEditScript } from './semantic-edit-script.js';
10
+ import type { SemanticEditProjection, SemanticEditReplay, SemanticEditScript } from './semantic-edit-script.js';
11
+ import type { SemanticPatchBundleRecordIndex } from './semantic-patch-bundle-index.js';
11
12
  import type { SemanticTransformIdentityRecord } from './semantic-transform-identity.js';
12
13
 
14
+ export type { SemanticPatchBundleRecordIndex } from './semantic-patch-bundle-index.js';
15
+
13
16
  export type SemanticPatchBundleAdmissionStatus = 'proposed' | 'queued' | 'admitted' | 'needs-review' | 'blocked' | 'rejected' | string;
14
17
 
15
18
  export interface SemanticPatchBundleSourceRef {
@@ -108,45 +111,6 @@ export interface SemanticPatchBundleTransformAdmission {
108
111
  readonly evidenceIds?: readonly string[];
109
112
  }
110
113
 
111
- export interface SemanticPatchBundleRecordIndex {
112
- readonly baseHashes: readonly string[];
113
- readonly targetHashes: readonly string[];
114
- readonly sourceHashes: readonly string[];
115
- readonly sourcePaths: readonly string[];
116
- readonly regionKeys: readonly string[];
117
- readonly regionKinds: readonly string[];
118
- readonly conflictKeys: readonly string[];
119
- readonly sourceMapIds: readonly string[];
120
- readonly sourceMapMappingIds: readonly string[];
121
- readonly sourceMapLinkIds: readonly string[];
122
- readonly evidenceIds: readonly string[];
123
- readonly proofIds: readonly string[];
124
- readonly historyIds: readonly string[];
125
- readonly semanticOperationIds: readonly string[];
126
- readonly semanticEditScriptIds: readonly string[];
127
- readonly semanticEditProjectionIds: readonly string[];
128
- readonly semanticEditKeys: readonly string[];
129
- readonly semanticIdentityHashes: readonly string[];
130
- readonly sourceIdentityHashes: readonly string[];
131
- readonly operationContentHashes: readonly string[];
132
- readonly editContentHashes: readonly string[];
133
- readonly semanticTransformIds: readonly string[];
134
- readonly semanticTransformKeys: readonly string[];
135
- readonly semanticTransformIdentityHashes: readonly string[];
136
- readonly semanticTransformContentHashes: readonly string[];
137
- readonly projectionIdentityHashes: readonly string[];
138
- readonly semanticTransformReadinesses: readonly string[];
139
- readonly semanticTransformEvidenceIds: readonly string[];
140
- readonly transformSourceLanguages: readonly string[];
141
- readonly transformTargetLanguages: readonly string[];
142
- readonly transformSourcePaths: readonly string[];
143
- readonly transformTargetPaths: readonly string[];
144
- readonly patchIds: readonly string[];
145
- readonly mergeCandidateIds: readonly string[];
146
- readonly readinesses: readonly string[];
147
- readonly admissionStatuses: readonly string[];
148
- }
149
-
150
114
  export interface SemanticPatchBundleRecord {
151
115
  readonly kind: 'frontier.lang.semanticPatchBundleRecord';
152
116
  readonly version: 1;
@@ -168,6 +132,7 @@ export interface SemanticPatchBundleRecord {
168
132
  readonly semanticOperationIds: readonly string[];
169
133
  readonly semanticEditScriptIds: readonly string[];
170
134
  readonly semanticEditProjectionIds: readonly string[];
135
+ readonly semanticEditReplayIds: readonly string[];
171
136
  readonly semanticTransformIdentityIds: readonly string[];
172
137
  readonly admission: SemanticPatchBundleAdmission;
173
138
  readonly index: SemanticPatchBundleRecordIndex;
@@ -180,7 +145,9 @@ export interface SemanticPatchBundleRecord {
180
145
  readonly semanticOperations: number;
181
146
  readonly semanticEditScripts: number;
182
147
  readonly semanticEditProjections: number;
148
+ readonly semanticEditReplays: number;
183
149
  readonly semanticEditProjectionEdits: number;
150
+ readonly semanticEditReplayEdits: number;
184
151
  readonly semanticTransformIdentities: number;
185
152
  readonly reviewRequired: boolean;
186
153
  readonly autoMergeClaim: false;
@@ -214,6 +181,8 @@ export interface CreateSemanticPatchBundleRecordOptions {
214
181
  readonly semanticEditScripts?: readonly SemanticEditScript[] | SemanticEditScript;
215
182
  readonly semanticEditProjection?: SemanticEditProjection;
216
183
  readonly semanticEditProjections?: readonly SemanticEditProjection[] | SemanticEditProjection;
184
+ readonly semanticEditReplay?: SemanticEditReplay;
185
+ readonly semanticEditReplays?: readonly SemanticEditReplay[] | SemanticEditReplay;
217
186
  readonly semanticTransformIdentity?: SemanticTransformIdentityRecord | Record<string, unknown>;
218
187
  readonly semanticTransformIdentities?: readonly (SemanticTransformIdentityRecord | Record<string, unknown>)[];
219
188
  readonly sourceLanguage?: FrontierSourceLanguage | string;
@@ -264,6 +233,16 @@ export interface SemanticPatchBundleRecordQuery {
264
233
  readonly semanticEditScriptIds?: readonly string[];
265
234
  readonly semanticEditProjectionId?: string | readonly string[];
266
235
  readonly semanticEditProjectionIds?: readonly string[];
236
+ readonly semanticEditReplayId?: string | readonly string[];
237
+ readonly semanticEditReplayIds?: readonly string[];
238
+ readonly semanticEditReplayStatus?: string | readonly string[];
239
+ readonly semanticEditReplayStatuses?: readonly string[];
240
+ readonly semanticEditReplayAction?: string | readonly string[];
241
+ readonly semanticEditReplayActions?: readonly string[];
242
+ readonly semanticEditReplayCurrentHash?: string | readonly string[];
243
+ readonly semanticEditReplayCurrentHashes?: readonly string[];
244
+ readonly semanticEditReplayOutputHash?: string | readonly string[];
245
+ readonly semanticEditReplayOutputHashes?: readonly string[];
267
246
  readonly semanticEditKey?: string | readonly string[];
268
247
  readonly semanticEditKeys?: readonly string[];
269
248
  readonly semanticIdentityHash?: string | readonly string[];
package/dist/index.d.ts CHANGED
@@ -19,6 +19,7 @@ export * from './declarations/semantic-merge-conflicts.js';
19
19
  export * from './declarations/semantic-edit-script.js';
20
20
  export * from './declarations/semantic-lineage.js';
21
21
  export * from './declarations/semantic-history.js';
22
+ export * from './declarations/semantic-patch-bundle-index.js';
22
23
  export * from './declarations/semantic-patch-bundle.js';
23
24
  export * from './declarations/semantic-patch-bundle-overlaps.js';
24
25
  export * from './declarations/semantic-transform-identity.js';
@@ -0,0 +1,56 @@
1
+ import { uniqueStrings } from '../../native-import-utils.js';
2
+
3
+ export function semanticEditRecordIndex(scripts, projections, replays, source = {}) {
4
+ const operations = scripts.flatMap((script) => array(script.operations));
5
+ const edits = projections.flatMap((projection) => array(projection.edits));
6
+ const replayEdits = replays.flatMap((replay) => array(replay.edits));
7
+ const index = source.index ?? {};
8
+ const summary = source.metadata?.semanticEditSummary ?? {};
9
+ return {
10
+ semanticEditScriptIds: uniqueStrings([...strings(source.semanticEditScriptIds), ...strings(source.semanticEditScriptId), ...strings(index.semanticEditScriptIds), ...strings(summary.scriptIds), ...scripts.map((script) => script.id), ...replays.map((replay) => replay.scriptId)]),
11
+ semanticEditProjectionIds: uniqueStrings([...strings(source.semanticEditProjectionIds), ...strings(source.semanticEditProjectionId), ...strings(index.semanticEditProjectionIds), ...strings(summary.projectionIds), ...projections.map((projection) => projection.id), ...replays.map((replay) => replay.projectionId)]),
12
+ semanticEditReplayIds: uniqueStrings([...strings(source.semanticEditReplayIds), ...strings(source.semanticEditReplayId), ...strings(index.semanticEditReplayIds), ...strings(summary.replayIds), ...replays.map((replay) => replay.id)]),
13
+ semanticEditOperationIds: uniqueStrings([...strings(source.semanticOperationIds), ...strings(index.semanticOperationIds), ...operations.map((operation) => operation.id), ...replayOperationIds(replays)]),
14
+ semanticEditProjectionEditCount: edits.length,
15
+ semanticEditReplayEditCount: replayEdits.length,
16
+ semanticEditReplayStatuses: uniqueStrings([...strings(source.semanticEditReplayStatuses), ...strings(index.semanticEditReplayStatuses), ...strings(summary.replayStatuses), ...replays.map((replay) => replay.status)]),
17
+ semanticEditReplayActions: uniqueStrings([...strings(source.semanticEditReplayActions), ...strings(index.semanticEditReplayActions), ...strings(summary.replayActions), ...replays.map((replay) => replay.admission?.action)]),
18
+ semanticEditReplayCurrentHashes: uniqueStrings([...strings(source.semanticEditReplayCurrentHashes), ...strings(index.semanticEditReplayCurrentHashes), ...replays.map((replay) => replay.currentHash)]),
19
+ semanticEditReplayOutputHashes: uniqueStrings([...strings(source.semanticEditReplayOutputHashes), ...strings(index.semanticEditReplayOutputHashes), ...replays.map((replay) => replay.outputHash)]),
20
+ semanticEditKeys: uniqueStrings([...strings(source.semanticEditKeys), ...strings(index.semanticEditKeys), ...operations.map((operation) => operation.semanticKey), ...edits.map((edit) => edit.semanticKey), ...replayEdits.map((edit) => edit.semanticKey)]),
21
+ semanticIdentityHashes: uniqueStrings([...strings(source.semanticIdentityHashes), ...strings(index.semanticIdentityHashes), ...operations.map((operation) => operation.semanticIdentityHash), ...edits.map((edit) => edit.semanticIdentityHash), ...replayEdits.map((edit) => edit.semanticIdentityHash)]),
22
+ sourceIdentityHashes: uniqueStrings([...strings(source.sourceIdentityHashes), ...strings(index.sourceIdentityHashes), ...operations.map((operation) => operation.sourceIdentityHash), ...edits.map((edit) => edit.sourceIdentityHash), ...replayEdits.map((edit) => edit.sourceIdentityHash)]),
23
+ operationContentHashes: uniqueStrings([...strings(source.operationContentHashes), ...strings(index.operationContentHashes), ...operations.map((operation) => operation.operationContentHash), ...edits.map((edit) => edit.operationContentHash)]),
24
+ editContentHashes: uniqueStrings([...strings(source.editContentHashes), ...strings(index.editContentHashes), ...edits.map((edit) => edit.editContentHash), ...replayEdits.map((edit) => edit.editContentHash)]),
25
+ anchorKeys: uniqueStrings([...operations.map((operation) => operation.anchor?.key), ...edits.map((edit) => edit.anchorKey)]),
26
+ conflictKeys: uniqueStrings([...operations.map((operation) => operation.anchor?.conflictKey), ...edits.map((edit) => edit.conflictKey)]),
27
+ projectedSourcePaths: uniqueStrings([...projections.map((projection) => projection.sourcePath), ...edits.flatMap((edit) => [edit.sourcePath, edit.targetSourcePath]), ...replays.map((replay) => replay.sourcePath), ...replayEdits.map((edit) => edit.sourcePath)])
28
+ };
29
+ }
30
+
31
+ export function semanticEditSummary(index) {
32
+ if (!index.semanticEditScriptIds.length && !index.semanticEditProjectionIds.length && !index.semanticEditReplayIds.length) return undefined;
33
+ return compactRecord({
34
+ scriptIds: index.semanticEditScriptIds,
35
+ projectionIds: index.semanticEditProjectionIds,
36
+ replayIds: index.semanticEditReplayIds,
37
+ replayStatuses: index.semanticEditReplayStatuses,
38
+ replayActions: index.semanticEditReplayActions,
39
+ semanticEditKeys: index.semanticEditKeys,
40
+ operationContentHashes: index.operationContentHashes,
41
+ editContentHashes: index.editContentHashes,
42
+ projectedSourcePaths: index.projectedSourcePaths,
43
+ replayEditCount: index.semanticEditReplayEditCount
44
+ });
45
+ }
46
+
47
+ function replayOperationIds(replays) {
48
+ return replays.flatMap((replay) => [
49
+ ...array(replay.appliedOperations),
50
+ ...array(replay.skippedOperations),
51
+ ...array(replay.edits).map((edit) => edit.operationId)
52
+ ]);
53
+ }
54
+ function array(value) { if (value === undefined || value === null) return []; return Array.isArray(value) ? value : [value]; }
55
+ function strings(value) { return array(value).map((entry) => String(entry ?? '')).filter(Boolean); }
56
+ function compactRecord(value) { return Object.fromEntries(Object.entries(value ?? {}).filter(([, entry]) => entry !== undefined && (!Array.isArray(entry) || entry.length > 0))); }
@@ -6,6 +6,9 @@ export const SemanticPatchBundleOverlapKinds=Object.freeze([
6
6
  'semantic-edit-key',
7
7
  'semantic-identity',
8
8
  'source-identity',
9
+ 'semantic-edit-replay',
10
+ 'replay-output',
11
+ 'replay-current',
9
12
  'transform-content',
10
13
  'semantic-transform',
11
14
  'projection-identity',
@@ -27,6 +30,9 @@ const KIND_FIELDS=Object.freeze({
27
30
  'semantic-edit-key':'semanticEditKeys',
28
31
  'semantic-identity':'semanticIdentityHashes',
29
32
  'source-identity':'sourceIdentityHashes',
33
+ 'semantic-edit-replay':'semanticEditReplayIds',
34
+ 'replay-output':'semanticEditReplayOutputHashes',
35
+ 'replay-current':'semanticEditReplayCurrentHashes',
30
36
  'transform-content':'semanticTransformContentHashes',
31
37
  'semantic-transform':'semanticTransformIdentityHashes',
32
38
  'projection-identity':'projectionIdentityHashes',
@@ -55,9 +61,9 @@ export function compareSemanticPatchBundleRecords(left={},right={},options={}){
55
61
  score:overlapScore(admission.status,shared,admission.reasonCodes),
56
62
  summary:{
57
63
  sharedKeys:countShared(shared),
58
- duplicateSignals:shared.operationContentHashes.length+shared.editContentHashes.length+shared.semanticTransformContentHashes.length,
64
+ duplicateSignals:shared.operationContentHashes.length+shared.editContentHashes.length+shared.semanticTransformContentHashes.length+shared.semanticEditReplayIds.length+shared.semanticEditReplayOutputHashes.length,
59
65
  semanticSignals:shared.semanticEditKeys.length+shared.semanticIdentityHashes.length+shared.sourceIdentityHashes.length+shared.semanticTransformIdentityHashes.length+shared.projectionIdentityHashes.length,
60
- sourceSignals:shared.regionKeys.length+shared.conflictKeys.length+shared.sourcePaths.length,
66
+ sourceSignals:shared.regionKeys.length+shared.conflictKeys.length+shared.sourcePaths.length+shared.semanticEditReplayCurrentHashes.length,
61
67
  baseHashMismatch:admission.reasonCodes.includes('base-hash-mismatch'),
62
68
  targetHashMismatch:admission.reasonCodes.includes('target-hash-mismatch')
63
69
  },
@@ -90,6 +96,11 @@ function sharedIndex(left,right,options){
90
96
  semanticEditKeys:intersect(left.semanticEditKeys,right.semanticEditKeys),
91
97
  semanticIdentityHashes:intersect(left.semanticIdentityHashes,right.semanticIdentityHashes),
92
98
  sourceIdentityHashes:intersect(left.sourceIdentityHashes,right.sourceIdentityHashes),
99
+ semanticEditReplayIds:intersect(left.semanticEditReplayIds,right.semanticEditReplayIds),
100
+ semanticEditReplayStatuses:intersect(left.semanticEditReplayStatuses,right.semanticEditReplayStatuses),
101
+ semanticEditReplayActions:intersect(left.semanticEditReplayActions,right.semanticEditReplayActions),
102
+ semanticEditReplayCurrentHashes:intersect(left.semanticEditReplayCurrentHashes,right.semanticEditReplayCurrentHashes),
103
+ semanticEditReplayOutputHashes:intersect(left.semanticEditReplayOutputHashes,right.semanticEditReplayOutputHashes),
93
104
  semanticTransformContentHashes:intersect(left.semanticTransformContentHashes,right.semanticTransformContentHashes),
94
105
  semanticTransformIdentityHashes:intersect(left.semanticTransformIdentityHashes,right.semanticTransformIdentityHashes),
95
106
  projectionIdentityHashes:intersect(left.projectionIdentityHashes,right.projectionIdentityHashes),
@@ -102,9 +113,9 @@ function sharedIndex(left,right,options){
102
113
  }
103
114
 
104
115
  function overlapAdmission(shared,{leftIndex,rightIndex,options}){
105
- const duplicate=shared.operationContentHashes.length||shared.editContentHashes.length||shared.semanticTransformContentHashes.length;
116
+ const duplicate=shared.operationContentHashes.length||shared.editContentHashes.length||shared.semanticTransformContentHashes.length||shared.semanticEditReplayIds.length||shared.semanticEditReplayOutputHashes.length;
106
117
  const semantic=shared.semanticEditKeys.length||shared.semanticIdentityHashes.length||shared.sourceIdentityHashes.length||shared.semanticTransformIdentityHashes.length||shared.projectionIdentityHashes.length;
107
- const source=shared.regionKeys.length||shared.conflictKeys.length||shared.sourcePaths.length;
118
+ const source=shared.regionKeys.length||shared.conflictKeys.length||shared.sourcePaths.length||shared.semanticEditReplayCurrentHashes.length;
108
119
  const status=duplicate?'duplicate':semantic?'semantic-overlap':source?'source-overlap':'independent';
109
120
  const reasonCodes=uniqueStrings([
110
121
  shared.operationContentHashes.length?'same-operation-content':undefined,
@@ -113,6 +124,9 @@ function overlapAdmission(shared,{leftIndex,rightIndex,options}){
113
124
  shared.semanticEditKeys.length?'same-semantic-edit-key':undefined,
114
125
  shared.semanticIdentityHashes.length?'same-semantic-identity':undefined,
115
126
  shared.sourceIdentityHashes.length?'same-source-identity':undefined,
127
+ shared.semanticEditReplayIds.length?'same-semantic-edit-replay':undefined,
128
+ shared.semanticEditReplayOutputHashes.length?'same-replay-output':undefined,
129
+ shared.semanticEditReplayCurrentHashes.length?'same-replay-current':undefined,
116
130
  shared.semanticTransformIdentityHashes.length?'same-semantic-transform':undefined,
117
131
  shared.projectionIdentityHashes.length?'same-projection-identity':undefined,
118
132
  shared.regionKeys.length?'same-region-key':undefined,
@@ -141,6 +155,11 @@ function bundleIndex(record){
141
155
  semanticEditKeys:uniqueStrings(index.semanticEditKeys),
142
156
  semanticIdentityHashes:uniqueStrings(index.semanticIdentityHashes),
143
157
  sourceIdentityHashes:uniqueStrings(index.sourceIdentityHashes),
158
+ semanticEditReplayIds:uniqueStrings(index.semanticEditReplayIds),
159
+ semanticEditReplayStatuses:uniqueStrings(index.semanticEditReplayStatuses),
160
+ semanticEditReplayActions:uniqueStrings(index.semanticEditReplayActions),
161
+ semanticEditReplayCurrentHashes:uniqueStrings(index.semanticEditReplayCurrentHashes),
162
+ semanticEditReplayOutputHashes:uniqueStrings(index.semanticEditReplayOutputHashes),
144
163
  semanticTransformContentHashes:uniqueStrings(index.semanticTransformContentHashes),
145
164
  semanticTransformIdentityHashes:uniqueStrings(index.semanticTransformIdentityHashes),
146
165
  projectionIdentityHashes:uniqueStrings(index.projectionIdentityHashes),
@@ -161,6 +180,11 @@ function matchesOverlap(overlap,query){
161
180
  &&matchAny(queryValues(query.sourcePath,query.sourcePaths),overlap.shared.sourcePaths)
162
181
  &&matchAny(queryValues(query.conflictKey,query.conflictKeys),overlap.shared.conflictKeys)
163
182
  &&matchAny(queryValues(query.semanticEditKey,query.semanticEditKeys),overlap.shared.semanticEditKeys)
183
+ &&matchAny(queryValues(query.semanticEditReplayId,query.semanticEditReplayIds),overlap.shared.semanticEditReplayIds)
184
+ &&matchAny(queryValues(query.semanticEditReplayStatus,query.semanticEditReplayStatuses),overlap.shared.semanticEditReplayStatuses)
185
+ &&matchAny(queryValues(query.semanticEditReplayAction,query.semanticEditReplayActions),overlap.shared.semanticEditReplayActions)
186
+ &&matchAny(queryValues(query.semanticEditReplayCurrentHash,query.semanticEditReplayCurrentHashes),overlap.shared.semanticEditReplayCurrentHashes)
187
+ &&matchAny(queryValues(query.semanticEditReplayOutputHash,query.semanticEditReplayOutputHashes),overlap.shared.semanticEditReplayOutputHashes)
164
188
  &&matchAny(queryValues(query.semanticTransformIdentityHash,query.semanticTransformIdentityHashes),overlap.shared.semanticTransformIdentityHashes)
165
189
  &&matchAny(queryValues(query.semanticTransformContentHash,query.semanticTransformContentHashes),overlap.shared.semanticTransformContentHashes)
166
190
  &&matchAny(queryValues(query.projectionIdentityHash,query.projectionIdentityHashes),overlap.shared.projectionIdentityHashes)
@@ -1,5 +1,6 @@
1
1
  import{idFragment,normalizeSemanticMergeReadiness,uniqueStrings}from'../../native-import-utils.js';
2
2
  import{createSemanticPatchBundleAdmission}from'./semanticPatchBundleAdmission.js';
3
+ import{semanticEditRecordIndex,semanticEditSummary}from'./semanticEditBundleIndex.js';
3
4
  import{normalizeSemanticTransformIdentityRecords,semanticTransformInputs,semanticTransformRecordIndex,semanticTransformSummary}from'./semanticTransformIdentityRecords.js';
4
5
 
5
6
  export const SemanticPatchBundleAdmissionStatuses=Object.freeze(['proposed','queued','admitted','needs-review','blocked','rejected']);
@@ -10,7 +11,8 @@ export function createSemanticPatchBundleRecord(input={},options={}){
10
11
  const mergeCandidate=options.mergeCandidate??source.mergeCandidate??source.candidate;
11
12
  const semanticEditScripts=array(options.semanticEditScripts??source.semanticEditScripts??source.semanticEditScript);
12
13
  const semanticEditProjections=array(options.semanticEditProjections??source.semanticEditProjections??source.semanticEditProjection);
13
- const semanticEditIndex=semanticEditRecordIndex(semanticEditScripts,semanticEditProjections,source);
14
+ const semanticEditReplays=array(options.semanticEditReplays??source.semanticEditReplays??source.semanticEditReplay);
15
+ const semanticEditIndex=semanticEditRecordIndex(semanticEditScripts,semanticEditProjections,semanticEditReplays,source);
14
16
  const transformContext={sourceLanguage:options.sourceLanguage??source.sourceLanguage??source.language,targetLanguage:options.targetLanguage??source.targetLanguage};
15
17
  const semanticTransformIdentities=normalizeSemanticTransformIdentityRecords(semanticTransformInputs(source,options),transformContext);
16
18
  const semanticTransformIndex=semanticTransformRecordIndex(semanticTransformIdentities,source);
@@ -70,10 +72,11 @@ export function createSemanticPatchBundleRecord(input={},options={}){
70
72
  semanticOperationIds,
71
73
  semanticEditScriptIds:semanticEditIndex.semanticEditScriptIds,
72
74
  semanticEditProjectionIds:semanticEditIndex.semanticEditProjectionIds,
75
+ semanticEditReplayIds:semanticEditIndex.semanticEditReplayIds,
73
76
  semanticTransformIdentityIds:semanticTransformIndex.semanticTransformIds,
74
77
  admission,
75
78
  index,
76
- summary:{changedRegions:changedRegions.length,sourceMapLinks:sourceMapLinks.length,evidenceIds:evidenceIds.length,proofIds:proofIds.length,historyIds:historyIds.length,semanticOperations:semanticOperationIds.length,semanticEditScripts:semanticEditScripts.length,semanticEditProjections:semanticEditProjections.length,semanticEditProjectionEdits:semanticEditIndex.semanticEditProjectionEditCount,semanticTransformIdentities:semanticTransformIdentities.length,reviewRequired:admission.reviewRequired,autoMergeClaim:admission.autoMergeClaim},
79
+ summary:{changedRegions:changedRegions.length,sourceMapLinks:sourceMapLinks.length,evidenceIds:evidenceIds.length,proofIds:proofIds.length,historyIds:historyIds.length,semanticOperations:semanticOperationIds.length,semanticEditScripts:semanticEditScripts.length,semanticEditProjections:semanticEditProjections.length,semanticEditReplays:semanticEditReplays.length,semanticEditProjectionEdits:semanticEditIndex.semanticEditProjectionEditCount,semanticEditReplayEdits:semanticEditIndex.semanticEditReplayEditCount,semanticTransformIdentities:semanticTransformIdentities.length,reviewRequired:admission.reviewRequired,autoMergeClaim:admission.autoMergeClaim},
77
80
  metadata:compactRecord({
78
81
  sourceChangeSetId:source.kind==='frontier.lang.nativeSourceChangeSet'?source.id:undefined,
79
82
  patchRisk:patch?.risk,
@@ -186,7 +189,7 @@ function normalizeSourceMapLinks(links){
186
189
  }
187
190
 
188
191
  function recordIndex(parts){
189
- const semanticEditIndex=parts.semanticEditIndex??semanticEditRecordIndex([],[]);
192
+ const semanticEditIndex=parts.semanticEditIndex??semanticEditRecordIndex([],[],[],parts);
190
193
  const semanticTransformIndex=parts.semanticTransformIndex??semanticTransformRecordIndex([],parts);
191
194
  return{
192
195
  baseHashes:uniqueStrings([parts.baseHash,...parts.sources.map((item)=>item.baseHash)]),
@@ -205,6 +208,11 @@ function recordIndex(parts){
205
208
  semanticOperationIds:uniqueStrings(parts.semanticOperationIds),
206
209
  semanticEditScriptIds:semanticEditIndex.semanticEditScriptIds,
207
210
  semanticEditProjectionIds:semanticEditIndex.semanticEditProjectionIds,
211
+ semanticEditReplayIds:semanticEditIndex.semanticEditReplayIds,
212
+ semanticEditReplayStatuses:semanticEditIndex.semanticEditReplayStatuses,
213
+ semanticEditReplayActions:semanticEditIndex.semanticEditReplayActions,
214
+ semanticEditReplayCurrentHashes:semanticEditIndex.semanticEditReplayCurrentHashes,
215
+ semanticEditReplayOutputHashes:semanticEditIndex.semanticEditReplayOutputHashes,
208
216
  semanticEditKeys:semanticEditIndex.semanticEditKeys,
209
217
  semanticIdentityHashes:semanticEditIndex.semanticIdentityHashes,
210
218
  sourceIdentityHashes:semanticEditIndex.sourceIdentityHashes,
@@ -249,6 +257,11 @@ function matchesRecord(record,query){
249
257
  &&matchAny(queryValues(query.semanticOperationId,query.semanticOperationIds),index.semanticOperationIds)
250
258
  &&matchAny(queryValues(query.semanticEditScriptId,query.semanticEditScriptIds),index.semanticEditScriptIds)
251
259
  &&matchAny(queryValues(query.semanticEditProjectionId,query.semanticEditProjectionIds),index.semanticEditProjectionIds)
260
+ &&matchAny(queryValues(query.semanticEditReplayId,query.semanticEditReplayIds),index.semanticEditReplayIds)
261
+ &&matchAny(queryValues(query.semanticEditReplayStatus,query.semanticEditReplayStatuses),index.semanticEditReplayStatuses)
262
+ &&matchAny(queryValues(query.semanticEditReplayAction,query.semanticEditReplayActions),index.semanticEditReplayActions)
263
+ &&matchAny(queryValues(query.semanticEditReplayCurrentHash,query.semanticEditReplayCurrentHashes),index.semanticEditReplayCurrentHashes)
264
+ &&matchAny(queryValues(query.semanticEditReplayOutputHash,query.semanticEditReplayOutputHashes),index.semanticEditReplayOutputHashes)
252
265
  &&matchAny(queryValues(query.semanticEditKey,query.semanticEditKeys),index.semanticEditKeys)
253
266
  &&matchAny(queryValues(query.semanticIdentityHash,query.semanticIdentityHashes),index.semanticIdentityHashes)
254
267
  &&matchAny(queryValues(query.sourceIdentityHash,query.sourceIdentityHashes),index.sourceIdentityHashes)
@@ -269,36 +282,6 @@ function matchesRecord(record,query){
269
282
  &&matchAny(queryValues(query.admissionStatus,query.admissionStatuses),index.admissionStatuses);
270
283
  }
271
284
 
272
- function semanticEditRecordIndex(scripts,projections,source={}){
273
- const operations=scripts.flatMap((script)=>array(script.operations));
274
- const edits=projections.flatMap((projection)=>array(projection.edits));
275
- const index=source.index??{};
276
- return{
277
- semanticEditScriptIds:uniqueStrings([...strings(source.semanticEditScriptIds),...strings(source.semanticEditScriptId),...strings(index.semanticEditScriptIds),...scripts.map((script)=>script.id)]),
278
- semanticEditProjectionIds:uniqueStrings([...strings(source.semanticEditProjectionIds),...strings(source.semanticEditProjectionId),...strings(index.semanticEditProjectionIds),...projections.map((projection)=>projection.id)]),
279
- semanticEditOperationIds:uniqueStrings([...strings(source.semanticOperationIds),...strings(index.semanticOperationIds),...operations.map((operation)=>operation.id)]),
280
- semanticEditProjectionEditCount:edits.length,
281
- semanticEditKeys:uniqueStrings([...strings(source.semanticEditKeys),...strings(index.semanticEditKeys),...operations.map((operation)=>operation.semanticKey),...edits.map((edit)=>edit.semanticKey)]),
282
- semanticIdentityHashes:uniqueStrings([...strings(source.semanticIdentityHashes),...strings(index.semanticIdentityHashes),...operations.map((operation)=>operation.semanticIdentityHash),...edits.map((edit)=>edit.semanticIdentityHash)]),
283
- sourceIdentityHashes:uniqueStrings([...strings(source.sourceIdentityHashes),...strings(index.sourceIdentityHashes),...operations.map((operation)=>operation.sourceIdentityHash),...edits.map((edit)=>edit.sourceIdentityHash)]),
284
- operationContentHashes:uniqueStrings([...strings(source.operationContentHashes),...strings(index.operationContentHashes),...operations.map((operation)=>operation.operationContentHash),...edits.map((edit)=>edit.operationContentHash)]),
285
- editContentHashes:uniqueStrings([...strings(source.editContentHashes),...strings(index.editContentHashes),...edits.map((edit)=>edit.editContentHash)]),
286
- anchorKeys:uniqueStrings([...operations.map((operation)=>operation.anchor?.key),...edits.map((edit)=>edit.anchorKey)]),
287
- conflictKeys:uniqueStrings([...operations.map((operation)=>operation.anchor?.conflictKey),...edits.map((edit)=>edit.conflictKey)]),
288
- projectedSourcePaths:uniqueStrings([...projections.map((projection)=>projection.sourcePath),...edits.flatMap((edit)=>[edit.sourcePath,edit.targetSourcePath])])
289
- };
290
- }
291
- function semanticEditSummary(index){
292
- if(!index.semanticEditScriptIds.length&&!index.semanticEditProjectionIds.length)return undefined;
293
- return compactRecord({
294
- scriptIds:index.semanticEditScriptIds,
295
- projectionIds:index.semanticEditProjectionIds,
296
- semanticEditKeys:index.semanticEditKeys,
297
- operationContentHashes:index.operationContentHashes,
298
- editContentHashes:index.editContentHashes,
299
- projectedSourcePaths:index.projectedSourcePaths
300
- });
301
- }
302
285
  function queryValues(...values){return uniqueStrings(values.flatMap((value)=>strings(value)));}
303
286
  function matchAny(filters,values){if(filters.length===0)return true;const valueSet=new Set(strings(values));return filters.some((filter)=>valueSet.has(filter));}
304
287
  function array(value){if(value===undefined||value===null)return[];return Array.isArray(value)?value:[value];}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@shapeshift-labs/frontier-lang-compiler",
3
- "version": "0.2.92",
3
+ "version": "0.2.94",
4
4
  "description": "Compiler facade for Frontier Lang source documents and language projection adapters.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",