@aburi/diff 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.
- package/README.md +62 -0
- package/dist/index.d.mts +277 -0
- package/dist/index.d.mts.map +1 -0
- package/dist/index.mjs +1041 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +50 -0
- package/src/components.ts +105 -0
- package/src/delta.ts +301 -0
- package/src/diff.ts +237 -0
- package/src/errors.ts +35 -0
- package/src/index.ts +45 -0
- package/src/match.ts +338 -0
- package/src/signature.ts +53 -0
- package/src/similarity.ts +134 -0
- package/src/status.ts +36 -0
package/README.md
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# @aburi/diff
|
|
2
|
+
|
|
3
|
+
Aburi diff engine. Takes two IRs (base + head) and emits an `aburi.diff.v1`
|
|
4
|
+
projection: matched Symbol pairs, per-Symbol status + delta, Component / Dependency
|
|
5
|
+
diffs, and canonical JSON output. Pure — write-to-disk is delegated to the caller
|
|
6
|
+
so mid-pipeline gate evaluation can happen before serialisation.
|
|
7
|
+
|
|
8
|
+
## 5-stage matcher
|
|
9
|
+
|
|
10
|
+
Symbols are paired across base / head via cascading stages:
|
|
11
|
+
|
|
12
|
+
1. **id-match** — `<language>:<path>#<qname>` equal → same Symbol.
|
|
13
|
+
2. **git-rename** — optional table (from `git diff --find-renames`) rescues moved
|
|
14
|
+
files whose ids diverged only in the path segment.
|
|
15
|
+
3. **logic-fingerprint** — remaining Symbols with the same `fingerprint.logic`
|
|
16
|
+
hash pair up (rename-invariant, whitespace-invariant).
|
|
17
|
+
4. **name+signature** — same simple name + compatible `Signature` (input/output
|
|
18
|
+
set + throws) — the fuzzy layer.
|
|
19
|
+
5. **dropped-weak** — last-resort match for pairs where both sides are dropped
|
|
20
|
+
(e.g. two empty stubs with matching qnames).
|
|
21
|
+
|
|
22
|
+
Unmatched base Symbols become `removed`, unmatched head Symbols become `added`.
|
|
23
|
+
Matched pairs are classified into one of five statuses per
|
|
24
|
+
[`design/details/diff-algorithm.md`](../../design/details/diff-algorithm.md):
|
|
25
|
+
`unchanged` / `moved` / `changed` / `moved+changed` / `dropped-toggled`
|
|
26
|
+
(with `to-dropped` / `to-kept` direction).
|
|
27
|
+
|
|
28
|
+
Per-Symbol delta records what specifically changed: rules array delta, effects
|
|
29
|
+
array delta, calls array delta, decorators delta, signature delta, and the three
|
|
30
|
+
boolean summary bits `apiChanged` / `logicChanged` / `syntaxChanged`.
|
|
31
|
+
|
|
32
|
+
## Install
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
pnpm add @aburi/diff
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## Usage
|
|
39
|
+
|
|
40
|
+
```ts
|
|
41
|
+
import { buildDiff, writeCanonicalDiff } from "@aburi/diff"
|
|
42
|
+
|
|
43
|
+
const diff = buildDiff({
|
|
44
|
+
baseIR,
|
|
45
|
+
headIR,
|
|
46
|
+
base: { ref: "main", irSchema: "https://aburi.dev/schema/aburi.ir.v1.json" },
|
|
47
|
+
head: { ref: "HEAD", irSchema: "https://aburi.dev/schema/aburi.ir.v1.json" },
|
|
48
|
+
gitRenames: null, // optional: { oldPath: newPath } table
|
|
49
|
+
})
|
|
50
|
+
|
|
51
|
+
diff.summary
|
|
52
|
+
// { added, removed, moved, movedChanged, changed, droppedToggled, ... }
|
|
53
|
+
|
|
54
|
+
await writeFile("out/diff.json", writeCanonicalDiff(diff), "utf8")
|
|
55
|
+
// Or, to mirror `aburi diff --compact`:
|
|
56
|
+
await writeFile("out/diff.json", writeCanonicalDiff(diff, { format: "compact" }), "utf8")
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## See also
|
|
60
|
+
|
|
61
|
+
- [`schema/aburi.diff.v1.json`](../../schema/aburi.diff.v1.json)
|
|
62
|
+
- [`design/details/diff-algorithm.md`](../../design/details/diff-algorithm.md)
|
package/dist/index.d.mts
ADDED
|
@@ -0,0 +1,277 @@
|
|
|
1
|
+
import { SerializeOptions } from "@aburi/core";
|
|
2
|
+
import { Component, ComponentDiff, Dependency, DependencyDiff, DiffResult, IR, IRRef, MatchRationale, Signature, Symbol, SymbolDelta } from "@aburi/types";
|
|
3
|
+
|
|
4
|
+
//#region src/components.d.ts
|
|
5
|
+
/**
|
|
6
|
+
* §6.1 — Component diff. Component identity is `id`; when a Component is present in both
|
|
7
|
+
* base and head with the same id, the three delta booleans describe which axes actually
|
|
8
|
+
* moved (roots reshuffle, public API globs, or framework hint list). `modified` deltas
|
|
9
|
+
* are intentionally absent from this diff (§5.2.3): fields are reported as before/after
|
|
10
|
+
* pairs via the `changed[]` entries so consumers can render them without stringifying
|
|
11
|
+
* arrays.
|
|
12
|
+
*/
|
|
13
|
+
declare function diffComponents(base: readonly Component[], head: readonly Component[]): ComponentDiff;
|
|
14
|
+
/**
|
|
15
|
+
* §6.2 — Dependency diff. Identity is the composite `(from, to, via)` triple; direction
|
|
16
|
+
* and effect changes are surfaced as an added + removed pair so `modified` is not part of
|
|
17
|
+
* the schema (§6.2 tail).
|
|
18
|
+
*/
|
|
19
|
+
declare function diffDependencies(base: readonly Dependency[], head: readonly Dependency[]): DependencyDiff;
|
|
20
|
+
//#endregion
|
|
21
|
+
//#region src/delta.d.ts
|
|
22
|
+
declare const DEFAULT_LINE_FUZZ = 2;
|
|
23
|
+
declare const MAX_LINE_FUZZ = 10;
|
|
24
|
+
declare const MIN_LINE_FUZZ = 0;
|
|
25
|
+
interface DeltaOptions {
|
|
26
|
+
/**
|
|
27
|
+
* §5.2.1 line fuzz for rule/call identity. Must be an integer in
|
|
28
|
+
* `[MIN_LINE_FUZZ, MAX_LINE_FUZZ]` (`0..10`); anything outside — or a non-finite value —
|
|
29
|
+
* throws `DiffError({ code: "invalid-line-fuzz" })`. Setting `0` disables fuzz; omitting
|
|
30
|
+
* the field falls back to `DEFAULT_LINE_FUZZ` (2).
|
|
31
|
+
*/
|
|
32
|
+
lineFuzz?: number;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* §5 — Compute the full per-Symbol delta between two paired Symbols. The three axis
|
|
36
|
+
* booleans (`apiChanged` / `logicChanged` / `syntaxChanged`) come from fingerprint
|
|
37
|
+
* comparison; the array deltas (`rules` / `effects` / `calls` / `decorators`) come from
|
|
38
|
+
* identity-preserving diff with configurable line fuzz.
|
|
39
|
+
*/
|
|
40
|
+
declare function computeSymbolDelta(base: Symbol, head: Symbol, options?: DeltaOptions): SymbolDelta;
|
|
41
|
+
//#endregion
|
|
42
|
+
//#region src/match.d.ts
|
|
43
|
+
/**
|
|
44
|
+
* A concluded pairing of one base Symbol with one head Symbol, along with the
|
|
45
|
+
* `MatchRationale` that placed them in the same pair. Stage 4 uses this shape both to
|
|
46
|
+
* carry results out and to feed the delta / status classifier downstream.
|
|
47
|
+
*/
|
|
48
|
+
interface SymbolPair {
|
|
49
|
+
base: Symbol;
|
|
50
|
+
head: Symbol;
|
|
51
|
+
rationale: MatchRationale;
|
|
52
|
+
}
|
|
53
|
+
/** Optional map returned by git for stage 2 (`old path` → `new path`). */
|
|
54
|
+
type GitRenameMap = ReadonlyMap<string, string>;
|
|
55
|
+
/**
|
|
56
|
+
* §3.1 — segments Symbols with identical `id` into paired matches. Runs first because it
|
|
57
|
+
* is the highest-confidence signal (no heuristics, just hash lookup).
|
|
58
|
+
*/
|
|
59
|
+
declare function matchStageId(base: readonly Symbol[], head: readonly Symbol[]): {
|
|
60
|
+
matched: SymbolPair[];
|
|
61
|
+
remainingBase: Symbol[];
|
|
62
|
+
remainingHead: Symbol[];
|
|
63
|
+
};
|
|
64
|
+
/**
|
|
65
|
+
* §3.2 — git rename detection. When a rename map is available (typical of ref-driven
|
|
66
|
+
* scans), rewrite the base id with the head-side file path and look for a hit.
|
|
67
|
+
*
|
|
68
|
+
* The rewriter only touches the `file` portion of the id — the `<language>:` prefix and
|
|
69
|
+
* the trailing `#<qualified-name>` segment stay unchanged so a moved file with the same
|
|
70
|
+
* qualified name is picked up correctly. When a Symbol's file is not in the rename map,
|
|
71
|
+
* it is left for later stages.
|
|
72
|
+
*/
|
|
73
|
+
declare function matchStageGitRename(remainingBase: readonly Symbol[], remainingHead: readonly Symbol[], renameMap: GitRenameMap | null): {
|
|
74
|
+
matched: SymbolPair[];
|
|
75
|
+
remainingBase: Symbol[];
|
|
76
|
+
remainingHead: Symbol[];
|
|
77
|
+
};
|
|
78
|
+
/**
|
|
79
|
+
* §3.3 — group base Symbols by `fingerprint.logic` and match head Symbols whose logic
|
|
80
|
+
* fingerprint is in the map. Two disambiguation branches:
|
|
81
|
+
* - single candidate → paired with `logic-fingerprint`
|
|
82
|
+
* - multiple candidates → best `nameSimilarity` wins if ≥ 0.85; otherwise leave both
|
|
83
|
+
* sides in remaining for stage 4 to re-evaluate
|
|
84
|
+
*
|
|
85
|
+
* Dropped symbols are excluded (§3.3 tail) — their logic fingerprint is the sentinel
|
|
86
|
+
* `"000000000000"` and would collide with every other dropped Symbol in the workspace.
|
|
87
|
+
* They flow to the stage-4.5 weak matcher instead.
|
|
88
|
+
*/
|
|
89
|
+
declare function matchStageLogicFingerprint(remainingBase: readonly Symbol[], remainingHead: readonly Symbol[]): {
|
|
90
|
+
matched: SymbolPair[];
|
|
91
|
+
remainingBase: Symbol[];
|
|
92
|
+
remainingHead: Symbol[];
|
|
93
|
+
};
|
|
94
|
+
/**
|
|
95
|
+
* §3.4 — name + signature similarity with `(kind, signatureNullness)` bucket pre-filter.
|
|
96
|
+
* `signatureNullness` distinguishes symbols with no signature (`interface`, `type`,
|
|
97
|
+
* `class`) from callable ones so that a class body is never paired against a function.
|
|
98
|
+
*
|
|
99
|
+
* The composite score:
|
|
100
|
+
* 0.5 * nameSimilarity + 0.3 * signatureSimilarity + 0.2 * ownerSimilarity
|
|
101
|
+
*
|
|
102
|
+
* §3.4.3 threshold table:
|
|
103
|
+
* - 1-token name → 1.0 (unreachable → never paired; false-positive shield)
|
|
104
|
+
* - 2-token name → 0.95 (strict, avoids `getUser` vs `getUsers`)
|
|
105
|
+
* - default → 0.85
|
|
106
|
+
*
|
|
107
|
+
* §3.4.3 tail — if both sides are signature-less, we skip pairing entirely because
|
|
108
|
+
* signatureSimilarity always returns 1.0 for `null + null` and would flood the bucket with
|
|
109
|
+
* false pairings.
|
|
110
|
+
*/
|
|
111
|
+
declare function matchStageNameSignature(remainingBase: readonly Symbol[], remainingHead: readonly Symbol[]): {
|
|
112
|
+
matched: SymbolPair[];
|
|
113
|
+
remainingBase: Symbol[];
|
|
114
|
+
remainingHead: Symbol[];
|
|
115
|
+
};
|
|
116
|
+
/**
|
|
117
|
+
* §3.4.5 — dropped-only weak matcher. For dropped Symbols the fingerprint is zeroed and
|
|
118
|
+
* name/signature are the only remaining signals. Score is a coarse "did the last name
|
|
119
|
+
* segment or file basename survive?" — if either half matches we pair (threshold 0.5).
|
|
120
|
+
*
|
|
121
|
+
* This is deliberately lax; diff-algorithm.md §3.4.5 already accepts that dropped Symbols live
|
|
122
|
+
* outside the main IR review surface, so occasional false pairings only affect the
|
|
123
|
+
* "Drop-rule variation" fold-out section in the Markdown projection.
|
|
124
|
+
*/
|
|
125
|
+
declare function matchStageDroppedWeak(remainingBase: readonly Symbol[], remainingHead: readonly Symbol[]): {
|
|
126
|
+
matched: SymbolPair[];
|
|
127
|
+
remainingBase: Symbol[];
|
|
128
|
+
remainingHead: Symbol[];
|
|
129
|
+
};
|
|
130
|
+
//#endregion
|
|
131
|
+
//#region src/diff.d.ts
|
|
132
|
+
interface DiffInput {
|
|
133
|
+
baseIR: IR;
|
|
134
|
+
headIR: IR;
|
|
135
|
+
/** IR reference metadata (git ref / file path) for provenance. */
|
|
136
|
+
base: IRRef;
|
|
137
|
+
head: IRRef;
|
|
138
|
+
/** Generator record for the diff output. Defaults to `{name: "aburi", version: "0.0.0"}`. */
|
|
139
|
+
generator?: {
|
|
140
|
+
name: string;
|
|
141
|
+
version: string;
|
|
142
|
+
};
|
|
143
|
+
/** Optional stage-2 rename table. When null/undefined stage 2 is skipped. */
|
|
144
|
+
gitRenames?: GitRenameMap | null;
|
|
145
|
+
/** Passed through to computeSymbolDelta (§5.2.1 line fuzz). */
|
|
146
|
+
delta?: DeltaOptions;
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Top-level entry: run the 5-stage matcher, classify each pair, produce array deltas,
|
|
150
|
+
* fold in Component / Dependency diffs, and assemble the `aburi.diff.v1` JSON projection.
|
|
151
|
+
* The function is pure; write-to-disk is delegated to `writeCanonicalDiff` so callers can
|
|
152
|
+
* pipe the result through additional steps (Markdown projection, `--fail-on` gate) before
|
|
153
|
+
* serialisation.
|
|
154
|
+
*/
|
|
155
|
+
declare function buildDiff(input: DiffInput): DiffResult;
|
|
156
|
+
/**
|
|
157
|
+
* Byte-deterministic serialiser for a DiffResult. Delegates to `@aburi/core`
|
|
158
|
+
* `serializeCanonical` so the sort order, NFC normalisation, and codepoint key sort are
|
|
159
|
+
* shared with the IR side.
|
|
160
|
+
*/
|
|
161
|
+
declare function writeCanonicalDiff(diff: DiffResult, options?: SerializeOptions): string;
|
|
162
|
+
//#endregion
|
|
163
|
+
//#region src/errors.d.ts
|
|
164
|
+
/**
|
|
165
|
+
* Coded error class for every @aburi/diff failure. Consumers branch on `code` without
|
|
166
|
+
* parsing message text. Codes are stable and additions are non-breaking; renames are not.
|
|
167
|
+
*/
|
|
168
|
+
type DiffErrorCode = /** `base.$schema` and `head.$schema` disagree; a diff across schema versions cannot be trusted (§9.1). */"schema-mismatch" /** `config.diff.lineFuzz` was outside the documented [0, 10] range (diff-algorithm.md §5.2.1). */ | "invalid-line-fuzz"
|
|
169
|
+
/**
|
|
170
|
+
* `baseIR` or `headIR` failed the top-level shape check that `buildDiff` enforces
|
|
171
|
+
* before touching any Symbol. Missing / non-array `symbols`, `components`,
|
|
172
|
+
* `dependencies`, or an absent `$schema` — anything that would otherwise crash with a
|
|
173
|
+
* cryptic `TypeError: undefined is not iterable` deep in a matching stage.
|
|
174
|
+
*/
|
|
175
|
+
| "ir-shape-invalid";
|
|
176
|
+
interface DiffErrorDetail {
|
|
177
|
+
code: DiffErrorCode;
|
|
178
|
+
/** Offending value (schema id, fuzz value, etc.) when applicable. */
|
|
179
|
+
value?: string;
|
|
180
|
+
}
|
|
181
|
+
declare class DiffError extends Error {
|
|
182
|
+
readonly code: DiffErrorCode;
|
|
183
|
+
readonly value: string | undefined;
|
|
184
|
+
constructor(message: string, detail: DiffErrorDetail, options?: {
|
|
185
|
+
cause?: unknown;
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
//#endregion
|
|
189
|
+
//#region src/signature.d.ts
|
|
190
|
+
/**
|
|
191
|
+
* §3.4.2 signatureSimilarity — averaged type-similarity across `inputs`, `outputs`, and
|
|
192
|
+
* `throws`. Follows diff-algorithm.md §3.4.2:
|
|
193
|
+
* - null + null → 1.0 (both symbols are signature-less; nothing to compare)
|
|
194
|
+
* - null + non-null (either side) → 0.0
|
|
195
|
+
* - both non-null: mean of three subscores
|
|
196
|
+
*
|
|
197
|
+
* Subscores:
|
|
198
|
+
* - inputs: ordered type-string equality rate (`i-th type equal` counts as 1, else 0)
|
|
199
|
+
* - outputs: same shape, but outputs is an array of type strings
|
|
200
|
+
* - throws: unordered set intersection over union
|
|
201
|
+
*
|
|
202
|
+
* Empty subarrays on both sides count as 1.0 (they are trivially equal); on one side only
|
|
203
|
+
* they count as 0.0 (asymmetric information).
|
|
204
|
+
*/
|
|
205
|
+
declare function signatureSimilarity(base: Signature | null | undefined, head: Signature | null | undefined): number;
|
|
206
|
+
//#endregion
|
|
207
|
+
//#region src/similarity.d.ts
|
|
208
|
+
/**
|
|
209
|
+
* String similarity utilities dedicated to the diff engine. Kept in one file so the
|
|
210
|
+
* name/signature/owner formulas are auditable side by side against diff-algorithm.md §3.4.
|
|
211
|
+
*/
|
|
212
|
+
/**
|
|
213
|
+
* Tokenise a qualified name into normalised lowercase word segments. Splits on:
|
|
214
|
+
* - camelCase / PascalCase boundaries (`fooBar` → `foo`, `Bar`)
|
|
215
|
+
* - snake_case underscores (`foo_bar` → `foo`, `bar`)
|
|
216
|
+
* - dotted namespaces (`ns.Class` → `ns`, `Class`)
|
|
217
|
+
* - `::` static-method separator (`Class::method` → `Class`, `method`)
|
|
218
|
+
* - runs of digits (`get2Users` → `get`, `2`, `Users`)
|
|
219
|
+
*
|
|
220
|
+
* The result is de-duplicated so `InvoiceService.createInvoice` collapses to
|
|
221
|
+
* `["invoice", "service", "create"]` — Jaccard similarity relies on set semantics, so
|
|
222
|
+
* repeated tokens must not double-count.
|
|
223
|
+
*/
|
|
224
|
+
declare function tokenizeName(input: string): string[];
|
|
225
|
+
/**
|
|
226
|
+
* Jaccard similarity between two token multisets. Formula: |A ∩ B| / |A ∪ B|.
|
|
227
|
+
* Empty on both sides returns 1.0 (both are "no tokens", which are equivalent for the
|
|
228
|
+
* purpose of §3.4.1). Empty on one side only returns 0.0.
|
|
229
|
+
*/
|
|
230
|
+
declare function jaccard(a: readonly string[], b: readonly string[]): number;
|
|
231
|
+
/** name-token Jaccard shortcut used by nameSimilarity and ownerSimilarity call sites. */
|
|
232
|
+
declare function jaccardTokens(a: string, b: string): number;
|
|
233
|
+
/**
|
|
234
|
+
* §3.4.1 — Jaccard over the tokens of the full qualified name. The last segment is not
|
|
235
|
+
* given extra weight; the entire path contributes uniformly because the intersection is
|
|
236
|
+
* what the score should reward.
|
|
237
|
+
*/
|
|
238
|
+
declare function nameSimilarity(baseName: string, headName: string): number;
|
|
239
|
+
/**
|
|
240
|
+
* §3.4.6 — owner similarity: same as nameSimilarity but restricted to everything **before**
|
|
241
|
+
* the last segment. Compensates for the R-8 same-name-different-class collision, where
|
|
242
|
+
* `UserRepo.getUser` should not be pair-swapped with `AdminRepo.getUser`.
|
|
243
|
+
*
|
|
244
|
+
* Owner extraction:
|
|
245
|
+
* - `Class::method` → `Class`
|
|
246
|
+
* - `A.B.C.method` → `A.B.C`
|
|
247
|
+
* - `topLevel` → `` (empty)
|
|
248
|
+
*
|
|
249
|
+
* When both owners are empty (top-level functions), returns 1.0 because both live in the
|
|
250
|
+
* same "no-owner" bucket. When one is empty and the other is not, returns 0.0 because the
|
|
251
|
+
* two Symbols live in structurally different scopes.
|
|
252
|
+
*/
|
|
253
|
+
declare function ownerSimilarity(baseName: string, headName: string): number;
|
|
254
|
+
/** §3.4.1 tail note — used by drop-4.5 weak matcher and threshold lookup. */
|
|
255
|
+
declare function lastSegment(qname: string): string;
|
|
256
|
+
//#endregion
|
|
257
|
+
//#region src/status.d.ts
|
|
258
|
+
type SymbolStatus = "unchanged" | "moved" | "changed" | "moved+changed" | "dropped-toggled";
|
|
259
|
+
/**
|
|
260
|
+
* §4 — determine which of the five statuses a matched pair falls into. `dropped-toggled`
|
|
261
|
+
* has absolute priority: whenever `dropped` differs between base and head, every other
|
|
262
|
+
* signal is ignored because the underlying fingerprint change is a consequence of the
|
|
263
|
+
* drop-rule flip, not a genuine code edit (§4.1 rationale).
|
|
264
|
+
*
|
|
265
|
+
* "pathChanged" catches both physical file relocation AND in-file rename: any Symbol id
|
|
266
|
+
* mismatch between base and head means the identifier moved, and DF9 ("method 名 rename
|
|
267
|
+
* (同 file、同 logic) → moved") relies on this. Stage-1 pairs cannot trigger the id branch
|
|
268
|
+
* (they match by exact id), so this only affects stage-2+ pairings where the pair was
|
|
269
|
+
* discovered via fingerprint or name/signature similarity.
|
|
270
|
+
*/
|
|
271
|
+
declare function classifyStatus(base: Symbol, head: Symbol): SymbolStatus;
|
|
272
|
+
/** Direction of a `dropped-toggled` transition (§7.1 SymbolDroppedToggled). */
|
|
273
|
+
type DropDirection = "to-dropped" | "to-kept";
|
|
274
|
+
declare function dropDirection(head: Symbol): DropDirection;
|
|
275
|
+
//#endregion
|
|
276
|
+
export { DEFAULT_LINE_FUZZ, type DeltaOptions, DiffError, type DiffErrorCode, type DiffErrorDetail, type DiffInput, type DropDirection, type GitRenameMap, MAX_LINE_FUZZ, MIN_LINE_FUZZ, type SymbolPair, type SymbolStatus, buildDiff, classifyStatus, computeSymbolDelta, diffComponents, diffDependencies, dropDirection, jaccard, jaccardTokens, lastSegment, matchStageDroppedWeak, matchStageGitRename, matchStageId, matchStageLogicFingerprint, matchStageNameSignature, nameSimilarity, ownerSimilarity, signatureSimilarity, tokenizeName, writeCanonicalDiff };
|
|
277
|
+
//# sourceMappingURL=index.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/components.ts","../src/delta.ts","../src/match.ts","../src/diff.ts","../src/errors.ts","../src/signature.ts","../src/similarity.ts","../src/status.ts"],"mappings":"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"}
|