@gitwand/core 2.0.0 → 2.2.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 +58 -0
- package/dist/__tests__/bench.bench.js +39 -0
- package/dist/__tests__/bench.bench.js.map +1 -1
- package/dist/__tests__/corpus.d.ts.map +1 -1
- package/dist/__tests__/corpus.js +363 -0
- package/dist/__tests__/corpus.js.map +1 -1
- package/dist/__tests__/diff/block-move.test.d.ts +5 -0
- package/dist/__tests__/diff/block-move.test.d.ts.map +1 -0
- package/dist/__tests__/diff/block-move.test.js +132 -0
- package/dist/__tests__/diff/block-move.test.js.map +1 -0
- package/dist/__tests__/diff/histogram.test.d.ts +8 -0
- package/dist/__tests__/diff/histogram.test.d.ts.map +1 -0
- package/dist/__tests__/diff/histogram.test.js +150 -0
- package/dist/__tests__/diff/histogram.test.js.map +1 -0
- package/dist/__tests__/diff/parity.test.d.ts +17 -0
- package/dist/__tests__/diff/parity.test.d.ts.map +1 -0
- package/dist/__tests__/diff/parity.test.js +149 -0
- package/dist/__tests__/diff/parity.test.js.map +1 -0
- package/dist/__tests__/diff.test.js +6 -2
- package/dist/__tests__/diff.test.js.map +1 -1
- package/dist/__tests__/format-profiles/integration.test.d.ts +7 -0
- package/dist/__tests__/format-profiles/integration.test.d.ts.map +1 -0
- package/dist/__tests__/format-profiles/integration.test.js +193 -0
- package/dist/__tests__/format-profiles/integration.test.js.map +1 -0
- package/dist/__tests__/format-profiles/json-patch.test.d.ts +12 -0
- package/dist/__tests__/format-profiles/json-patch.test.d.ts.map +1 -0
- package/dist/__tests__/format-profiles/json-patch.test.js +222 -0
- package/dist/__tests__/format-profiles/json-patch.test.js.map +1 -0
- package/dist/__tests__/format-profiles/registry.test.d.ts +5 -0
- package/dist/__tests__/format-profiles/registry.test.d.ts.map +1 -0
- package/dist/__tests__/format-profiles/registry.test.js +124 -0
- package/dist/__tests__/format-profiles/registry.test.js.map +1 -0
- package/dist/__tests__/patterns/make-score.test.d.ts +9 -0
- package/dist/__tests__/patterns/make-score.test.d.ts.map +1 -0
- package/dist/__tests__/patterns/make-score.test.js +49 -0
- package/dist/__tests__/patterns/make-score.test.js.map +1 -0
- package/dist/diff/block-move.d.ts +53 -0
- package/dist/diff/block-move.d.ts.map +1 -0
- package/dist/diff/block-move.js +192 -0
- package/dist/diff/block-move.js.map +1 -0
- package/dist/diff/histogram.d.ts +45 -0
- package/dist/diff/histogram.d.ts.map +1 -0
- package/dist/diff/histogram.js +172 -0
- package/dist/diff/histogram.js.map +1 -0
- package/dist/diff/index.d.ts +30 -0
- package/dist/diff/index.d.ts.map +1 -0
- package/dist/diff/index.js +47 -0
- package/dist/diff/index.js.map +1 -0
- package/dist/diff/lcs.d.ts +34 -0
- package/dist/diff/lcs.d.ts.map +1 -0
- package/dist/diff/lcs.js +184 -0
- package/dist/diff/lcs.js.map +1 -0
- package/dist/diff/shared.d.ts +54 -0
- package/dist/diff/shared.d.ts.map +1 -0
- package/dist/diff/shared.js +164 -0
- package/dist/diff/shared.js.map +1 -0
- package/dist/diff.d.ts +6 -65
- package/dist/diff.d.ts.map +1 -1
- package/dist/diff.js +6 -324
- package/dist/diff.js.map +1 -1
- package/dist/format-profiles/index.d.ts +34 -0
- package/dist/format-profiles/index.d.ts.map +1 -0
- package/dist/format-profiles/index.js +86 -0
- package/dist/format-profiles/index.js.map +1 -0
- package/dist/format-profiles/json-patch.d.ts +61 -0
- package/dist/format-profiles/json-patch.d.ts.map +1 -0
- package/dist/format-profiles/json-patch.js +269 -0
- package/dist/format-profiles/json-patch.js.map +1 -0
- package/dist/format-profiles/merge-strategies.d.ts +54 -0
- package/dist/format-profiles/merge-strategies.d.ts.map +1 -0
- package/dist/format-profiles/merge-strategies.js +156 -0
- package/dist/format-profiles/merge-strategies.js.map +1 -0
- package/dist/format-profiles/profiles/composer.d.ts +18 -0
- package/dist/format-profiles/profiles/composer.d.ts.map +1 -0
- package/dist/format-profiles/profiles/composer.js +45 -0
- package/dist/format-profiles/profiles/composer.js.map +1 -0
- package/dist/format-profiles/profiles/helm-values.d.ts +21 -0
- package/dist/format-profiles/profiles/helm-values.d.ts.map +1 -0
- package/dist/format-profiles/profiles/helm-values.js +40 -0
- package/dist/format-profiles/profiles/helm-values.js.map +1 -0
- package/dist/format-profiles/profiles/kubernetes.d.ts +22 -0
- package/dist/format-profiles/profiles/kubernetes.d.ts.map +1 -0
- package/dist/format-profiles/profiles/kubernetes.js +60 -0
- package/dist/format-profiles/profiles/kubernetes.js.map +1 -0
- package/dist/format-profiles/profiles/package-json.d.ts +18 -0
- package/dist/format-profiles/profiles/package-json.d.ts.map +1 -0
- package/dist/format-profiles/profiles/package-json.js +36 -0
- package/dist/format-profiles/profiles/package-json.js.map +1 -0
- package/dist/format-profiles/profiles/tsconfig.d.ts +21 -0
- package/dist/format-profiles/profiles/tsconfig.d.ts.map +1 -0
- package/dist/format-profiles/profiles/tsconfig.js +47 -0
- package/dist/format-profiles/profiles/tsconfig.js.map +1 -0
- package/dist/format-profiles/types.d.ts +67 -0
- package/dist/format-profiles/types.d.ts.map +1 -0
- package/dist/format-profiles/types.js +9 -0
- package/dist/format-profiles/types.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -1
- package/dist/patterns/insertion-at-boundary.d.ts.map +1 -1
- package/dist/patterns/insertion-at-boundary.js +15 -33
- package/dist/patterns/insertion-at-boundary.js.map +1 -1
- package/dist/patterns/utils.d.ts +11 -8
- package/dist/patterns/utils.d.ts.map +1 -1
- package/dist/patterns/utils.js +28 -10
- package/dist/patterns/utils.js.map +1 -1
- package/dist/resolver/format-dispatch.d.ts.map +1 -1
- package/dist/resolver/format-dispatch.js +3 -1
- package/dist/resolver/format-dispatch.js.map +1 -1
- package/dist/resolver/policy.d.ts.map +1 -1
- package/dist/resolver/policy.js +2 -0
- package/dist/resolver/policy.js.map +1 -1
- package/dist/resolvers/dispatcher.d.ts +5 -1
- package/dist/resolvers/dispatcher.d.ts.map +1 -1
- package/dist/resolvers/dispatcher.js +8 -3
- package/dist/resolvers/dispatcher.js.map +1 -1
- package/dist/resolvers/json.d.ts +11 -2
- package/dist/resolvers/json.d.ts.map +1 -1
- package/dist/resolvers/json.js +55 -7
- package/dist/resolvers/json.js.map +1 -1
- package/dist/resolvers/yaml.d.ts +8 -2
- package/dist/resolvers/yaml.d.ts.map +1 -1
- package/dist/resolvers/yaml.js +156 -2
- package/dist/resolvers/yaml.js.map +1 -1
- package/dist/types.d.ts +25 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GitWand — Profil "Kubernetes manifests"
|
|
3
|
+
*
|
|
4
|
+
* Match : fichiers .yaml / .yml dans un dossier k8s/, kubernetes/, manifests/
|
|
5
|
+
* ou un déploiement courant (deployment.yaml, service.yaml, etc.). Heuristique
|
|
6
|
+
* de path — pas de parsing du contenu pour confirmer le type de manifest
|
|
7
|
+
* (Deployment vs Service vs ConfigMap), donc on applique des stratégies safe
|
|
8
|
+
* sur les paths conventionnels qui n'existent que dans les types pertinents.
|
|
9
|
+
*
|
|
10
|
+
* Stratégies (alignées Kubernetes API conventions name-keyed lists) :
|
|
11
|
+
* - /spec/template/spec/containers → set par "name"
|
|
12
|
+
* - /spec/template/spec/initContainers → set par "name"
|
|
13
|
+
* - /spec/template/spec/volumes → set par "name"
|
|
14
|
+
* - /spec/template/spec/imagePullSecrets → set par "name"
|
|
15
|
+
* - /spec/ports → set par "port" (Service)
|
|
16
|
+
* - /spec/rules → set par "host" (Ingress) — fallback JSON.stringify si pas
|
|
17
|
+
* de host (Ingress sans rule "default")
|
|
18
|
+
* - défaut → merge-keys
|
|
19
|
+
*/
|
|
20
|
+
import type { FormatProfile } from "../types.js";
|
|
21
|
+
export declare const kubernetesProfile: FormatProfile;
|
|
22
|
+
//# sourceMappingURL=kubernetes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kubernetes.d.ts","sourceRoot":"","sources":["../../../src/format-profiles/profiles/kubernetes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AA0BjD,eAAO,MAAM,iBAAiB,EAAE,aAiB/B,CAAC"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GitWand — Profil "Kubernetes manifests"
|
|
3
|
+
*
|
|
4
|
+
* Match : fichiers .yaml / .yml dans un dossier k8s/, kubernetes/, manifests/
|
|
5
|
+
* ou un déploiement courant (deployment.yaml, service.yaml, etc.). Heuristique
|
|
6
|
+
* de path — pas de parsing du contenu pour confirmer le type de manifest
|
|
7
|
+
* (Deployment vs Service vs ConfigMap), donc on applique des stratégies safe
|
|
8
|
+
* sur les paths conventionnels qui n'existent que dans les types pertinents.
|
|
9
|
+
*
|
|
10
|
+
* Stratégies (alignées Kubernetes API conventions name-keyed lists) :
|
|
11
|
+
* - /spec/template/spec/containers → set par "name"
|
|
12
|
+
* - /spec/template/spec/initContainers → set par "name"
|
|
13
|
+
* - /spec/template/spec/volumes → set par "name"
|
|
14
|
+
* - /spec/template/spec/imagePullSecrets → set par "name"
|
|
15
|
+
* - /spec/ports → set par "port" (Service)
|
|
16
|
+
* - /spec/rules → set par "host" (Ingress) — fallback JSON.stringify si pas
|
|
17
|
+
* de host (Ingress sans rule "default")
|
|
18
|
+
* - défaut → merge-keys
|
|
19
|
+
*/
|
|
20
|
+
const NAME_KEYED = (item) => {
|
|
21
|
+
if (typeof item === "object" && item !== null && "name" in item) {
|
|
22
|
+
return String(item.name);
|
|
23
|
+
}
|
|
24
|
+
return JSON.stringify(item);
|
|
25
|
+
};
|
|
26
|
+
const PORT_KEYED = (item) => {
|
|
27
|
+
if (typeof item === "object" && item !== null && "port" in item) {
|
|
28
|
+
return String(item.port);
|
|
29
|
+
}
|
|
30
|
+
return JSON.stringify(item);
|
|
31
|
+
};
|
|
32
|
+
const HOST_KEYED = (item) => {
|
|
33
|
+
if (typeof item === "object" && item !== null && "host" in item) {
|
|
34
|
+
return String(item.host);
|
|
35
|
+
}
|
|
36
|
+
return JSON.stringify(item);
|
|
37
|
+
};
|
|
38
|
+
const K8S_DIR = /(^|\/)(k8s|kubernetes|manifests)\//;
|
|
39
|
+
const K8S_BASENAME = /^(deployment|service|ingress|configmap|secret|statefulset|daemonset|job|cronjob|replicaset|pod|namespace)\.(ya?ml)$/i;
|
|
40
|
+
export const kubernetesProfile = {
|
|
41
|
+
name: "kubernetes",
|
|
42
|
+
matches: (filePath) => {
|
|
43
|
+
if (!/\.ya?ml$/.test(filePath))
|
|
44
|
+
return false;
|
|
45
|
+
if (K8S_DIR.test(filePath))
|
|
46
|
+
return true;
|
|
47
|
+
const basename = filePath.split("/").pop() ?? "";
|
|
48
|
+
return K8S_BASENAME.test(basename);
|
|
49
|
+
},
|
|
50
|
+
paths: {
|
|
51
|
+
"/spec/template/spec/containers": { kind: "set", identity: NAME_KEYED },
|
|
52
|
+
"/spec/template/spec/initContainers": { kind: "set", identity: NAME_KEYED },
|
|
53
|
+
"/spec/template/spec/volumes": { kind: "set", identity: NAME_KEYED },
|
|
54
|
+
"/spec/template/spec/imagePullSecrets": { kind: "set", identity: NAME_KEYED },
|
|
55
|
+
"/spec/ports": { kind: "set", identity: PORT_KEYED },
|
|
56
|
+
"/spec/rules": { kind: "set", identity: HOST_KEYED },
|
|
57
|
+
},
|
|
58
|
+
default: { kind: "merge-keys" },
|
|
59
|
+
};
|
|
60
|
+
//# sourceMappingURL=kubernetes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kubernetes.js","sourceRoot":"","sources":["../../../src/format-profiles/profiles/kubernetes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAIH,MAAM,UAAU,GAAG,CAAC,IAAa,EAAU,EAAE;IAC3C,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;QAChE,OAAO,MAAM,CAAE,IAA0B,CAAC,IAAI,CAAC,CAAC;IAClD,CAAC;IACD,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AAC9B,CAAC,CAAC;AAEF,MAAM,UAAU,GAAG,CAAC,IAAa,EAAU,EAAE;IAC3C,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;QAChE,OAAO,MAAM,CAAE,IAA0B,CAAC,IAAI,CAAC,CAAC;IAClD,CAAC;IACD,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AAC9B,CAAC,CAAC;AAEF,MAAM,UAAU,GAAG,CAAC,IAAa,EAAU,EAAE;IAC3C,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;QAChE,OAAO,MAAM,CAAE,IAA0B,CAAC,IAAI,CAAC,CAAC;IAClD,CAAC;IACD,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AAC9B,CAAC,CAAC;AAEF,MAAM,OAAO,GAAG,oCAAoC,CAAC;AACrD,MAAM,YAAY,GAAG,sHAAsH,CAAC;AAE5I,MAAM,CAAC,MAAM,iBAAiB,GAAkB;IAC9C,IAAI,EAAE,YAAY;IAClB,OAAO,EAAE,CAAC,QAAQ,EAAE,EAAE;QACpB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC;YAAE,OAAO,KAAK,CAAC;QAC7C,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC;YAAE,OAAO,IAAI,CAAC;QACxC,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;QACjD,OAAO,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACrC,CAAC;IACD,KAAK,EAAE;QACL,gCAAgC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE;QACvE,oCAAoC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE;QAC3E,6BAA6B,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE;QACpE,sCAAsC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE;QAC7E,aAAa,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE;QACpD,aAAa,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE;KACrD;IACD,OAAO,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE;CAChC,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GitWand — Profil "package.json"
|
|
3
|
+
*
|
|
4
|
+
* Match : tout fichier nommé exactement "package.json" (à la racine ou dans
|
|
5
|
+
* un workspace). On exclut les fichiers générés type "package-lock.json"
|
|
6
|
+
* (couverts par les résolveurs lockfile dédiés).
|
|
7
|
+
*
|
|
8
|
+
* Stratégies :
|
|
9
|
+
* - /dependencies, /devDependencies, /peerDependencies, /optionalDependencies
|
|
10
|
+
* → merge-keys (objets clé-par-clé, comportement existant)
|
|
11
|
+
* - /scripts → merge-keys (objets clé-par-clé)
|
|
12
|
+
* - /keywords → set (tableau, identité = JSON.stringify de l'item)
|
|
13
|
+
* - /workspaces (cas tableau) → set
|
|
14
|
+
* - défaut → merge-keys
|
|
15
|
+
*/
|
|
16
|
+
import type { FormatProfile } from "../types.js";
|
|
17
|
+
export declare const packageJsonProfile: FormatProfile;
|
|
18
|
+
//# sourceMappingURL=package-json.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package-json.d.ts","sourceRoot":"","sources":["../../../src/format-profiles/profiles/package-json.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,eAAO,MAAM,kBAAkB,EAAE,aAmBhC,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GitWand — Profil "package.json"
|
|
3
|
+
*
|
|
4
|
+
* Match : tout fichier nommé exactement "package.json" (à la racine ou dans
|
|
5
|
+
* un workspace). On exclut les fichiers générés type "package-lock.json"
|
|
6
|
+
* (couverts par les résolveurs lockfile dédiés).
|
|
7
|
+
*
|
|
8
|
+
* Stratégies :
|
|
9
|
+
* - /dependencies, /devDependencies, /peerDependencies, /optionalDependencies
|
|
10
|
+
* → merge-keys (objets clé-par-clé, comportement existant)
|
|
11
|
+
* - /scripts → merge-keys (objets clé-par-clé)
|
|
12
|
+
* - /keywords → set (tableau, identité = JSON.stringify de l'item)
|
|
13
|
+
* - /workspaces (cas tableau) → set
|
|
14
|
+
* - défaut → merge-keys
|
|
15
|
+
*/
|
|
16
|
+
export const packageJsonProfile = {
|
|
17
|
+
name: "package.json",
|
|
18
|
+
matches: (filePath) => {
|
|
19
|
+
const basename = filePath.split("/").pop() ?? filePath;
|
|
20
|
+
return basename === "package.json";
|
|
21
|
+
},
|
|
22
|
+
paths: {
|
|
23
|
+
"/dependencies": { kind: "merge-keys" },
|
|
24
|
+
"/devDependencies": { kind: "merge-keys" },
|
|
25
|
+
"/peerDependencies": { kind: "merge-keys" },
|
|
26
|
+
"/optionalDependencies": { kind: "merge-keys" },
|
|
27
|
+
"/bundledDependencies": { kind: "set" },
|
|
28
|
+
"/bundleDependencies": { kind: "set" },
|
|
29
|
+
"/scripts": { kind: "merge-keys" },
|
|
30
|
+
"/keywords": { kind: "set" },
|
|
31
|
+
"/files": { kind: "set" },
|
|
32
|
+
"/workspaces": { kind: "set" },
|
|
33
|
+
},
|
|
34
|
+
default: { kind: "merge-keys" },
|
|
35
|
+
};
|
|
36
|
+
//# sourceMappingURL=package-json.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package-json.js","sourceRoot":"","sources":["../../../src/format-profiles/profiles/package-json.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH,MAAM,CAAC,MAAM,kBAAkB,GAAkB;IAC/C,IAAI,EAAE,cAAc;IACpB,OAAO,EAAE,CAAC,QAAQ,EAAE,EAAE;QACpB,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,QAAQ,CAAC;QACvD,OAAO,QAAQ,KAAK,cAAc,CAAC;IACrC,CAAC;IACD,KAAK,EAAE;QACL,eAAe,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE;QACvC,kBAAkB,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE;QAC1C,mBAAmB,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE;QAC3C,uBAAuB,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE;QAC/C,sBAAsB,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE;QACvC,qBAAqB,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE;QACtC,UAAU,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE;QAClC,WAAW,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE;QAC5B,QAAQ,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE;QACzB,aAAa,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE;KAC/B;IACD,OAAO,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE;CAChC,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GitWand — Profil "tsconfig.json" (et tsconfig.*.json)
|
|
3
|
+
*
|
|
4
|
+
* Match : tout fichier nommé tsconfig.json ou tsconfig.<variant>.json
|
|
5
|
+
* (ex: tsconfig.build.json, tsconfig.app.json) à n'importe quelle profondeur
|
|
6
|
+
* dans le repo.
|
|
7
|
+
*
|
|
8
|
+
* Stratégies :
|
|
9
|
+
* - /compilerOptions → merge-keys (objet de flags : on merge clé-par-clé)
|
|
10
|
+
* - /compilerOptions/lib → set (tableau de strings, ordre indifférent)
|
|
11
|
+
* - /compilerOptions/types → set
|
|
12
|
+
* - /compilerOptions/typeRoots → set
|
|
13
|
+
* - /include → set (globs, ordre indifférent)
|
|
14
|
+
* - /exclude → set
|
|
15
|
+
* - /references → set par "path" (objets {path: "..."} avec identité = path)
|
|
16
|
+
* - /files → set
|
|
17
|
+
* - défaut → merge-keys
|
|
18
|
+
*/
|
|
19
|
+
import type { FormatProfile } from "../types.js";
|
|
20
|
+
export declare const tsconfigProfile: FormatProfile;
|
|
21
|
+
//# sourceMappingURL=tsconfig.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tsconfig.d.ts","sourceRoot":"","sources":["../../../src/format-profiles/profiles/tsconfig.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAIjD,eAAO,MAAM,eAAe,EAAE,aA0B7B,CAAC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GitWand — Profil "tsconfig.json" (et tsconfig.*.json)
|
|
3
|
+
*
|
|
4
|
+
* Match : tout fichier nommé tsconfig.json ou tsconfig.<variant>.json
|
|
5
|
+
* (ex: tsconfig.build.json, tsconfig.app.json) à n'importe quelle profondeur
|
|
6
|
+
* dans le repo.
|
|
7
|
+
*
|
|
8
|
+
* Stratégies :
|
|
9
|
+
* - /compilerOptions → merge-keys (objet de flags : on merge clé-par-clé)
|
|
10
|
+
* - /compilerOptions/lib → set (tableau de strings, ordre indifférent)
|
|
11
|
+
* - /compilerOptions/types → set
|
|
12
|
+
* - /compilerOptions/typeRoots → set
|
|
13
|
+
* - /include → set (globs, ordre indifférent)
|
|
14
|
+
* - /exclude → set
|
|
15
|
+
* - /references → set par "path" (objets {path: "..."} avec identité = path)
|
|
16
|
+
* - /files → set
|
|
17
|
+
* - défaut → merge-keys
|
|
18
|
+
*/
|
|
19
|
+
const TSCONFIG_NAME = /^tsconfig(\..+)?\.json$/;
|
|
20
|
+
export const tsconfigProfile = {
|
|
21
|
+
name: "tsconfig.json",
|
|
22
|
+
matches: (filePath) => {
|
|
23
|
+
const basename = filePath.split("/").pop() ?? filePath;
|
|
24
|
+
return TSCONFIG_NAME.test(basename);
|
|
25
|
+
},
|
|
26
|
+
paths: {
|
|
27
|
+
"/compilerOptions": { kind: "merge-keys" },
|
|
28
|
+
"/compilerOptions/lib": { kind: "set" },
|
|
29
|
+
"/compilerOptions/types": { kind: "set" },
|
|
30
|
+
"/compilerOptions/typeRoots": { kind: "set" },
|
|
31
|
+
"/compilerOptions/paths": { kind: "merge-keys" },
|
|
32
|
+
"/include": { kind: "set" },
|
|
33
|
+
"/exclude": { kind: "set" },
|
|
34
|
+
"/files": { kind: "set" },
|
|
35
|
+
"/references": {
|
|
36
|
+
kind: "set",
|
|
37
|
+
identity: (item) => {
|
|
38
|
+
if (typeof item === "object" && item !== null && "path" in item) {
|
|
39
|
+
return String(item.path);
|
|
40
|
+
}
|
|
41
|
+
return JSON.stringify(item);
|
|
42
|
+
},
|
|
43
|
+
},
|
|
44
|
+
},
|
|
45
|
+
default: { kind: "merge-keys" },
|
|
46
|
+
};
|
|
47
|
+
//# sourceMappingURL=tsconfig.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tsconfig.js","sourceRoot":"","sources":["../../../src/format-profiles/profiles/tsconfig.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAIH,MAAM,aAAa,GAAG,yBAAyB,CAAC;AAEhD,MAAM,CAAC,MAAM,eAAe,GAAkB;IAC5C,IAAI,EAAE,eAAe;IACrB,OAAO,EAAE,CAAC,QAAQ,EAAE,EAAE;QACpB,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,QAAQ,CAAC;QACvD,OAAO,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACtC,CAAC;IACD,KAAK,EAAE;QACL,kBAAkB,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE;QAC1C,sBAAsB,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE;QACvC,wBAAwB,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE;QACzC,4BAA4B,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE;QAC7C,wBAAwB,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE;QAChD,UAAU,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE;QAC3B,UAAU,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE;QAC3B,QAAQ,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE;QACzB,aAAa,EAAE;YACb,IAAI,EAAE,KAAK;YACX,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE;gBACjB,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;oBAChE,OAAO,MAAM,CAAE,IAA0B,CAAC,IAAI,CAAC,CAAC;gBAClD,CAAC;gBACD,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YAC9B,CAAC;SACF;KACF;IACD,OAAO,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE;CAChC,CAAC"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GitWand — Types du registre de profils par format
|
|
3
|
+
*
|
|
4
|
+
* Un FormatProfile annote des chemins JSON Pointer (RFC 6901) avec une
|
|
5
|
+
* stratégie de merge. C'est l'analogue local des "commutative parents" de
|
|
6
|
+
* Mergiraf, mais piloté par configuration plutôt que par grammaire.
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Stratégie de merge appliquée à un chemin donné dans un document JSON/YAML.
|
|
10
|
+
*
|
|
11
|
+
* - "set" : merge par identité d'élément. La fonction identity extrait une
|
|
12
|
+
* clé stable depuis chaque item ; deux items avec la même clé sont
|
|
13
|
+
* considérés comme "le même", et les modifications se mergent par
|
|
14
|
+
* récursion. Sans identity, fallback JSON.stringify(item).
|
|
15
|
+
* - "ordered-list" : RFC 6902 add/remove. On diffe base->ours et base->theirs,
|
|
16
|
+
* on les concatène si les paths sont disjoints, on rejette sinon.
|
|
17
|
+
* - "merge-keys" : objets ; récursion clé-par-clé (comportement actuel de
|
|
18
|
+
* mergeObjects).
|
|
19
|
+
* - "opaque" : aucune tentative de merge sémantique, retombée fallback textuel.
|
|
20
|
+
*/
|
|
21
|
+
export type PathStrategy = {
|
|
22
|
+
kind: "set";
|
|
23
|
+
identity?: (item: unknown) => string;
|
|
24
|
+
} | {
|
|
25
|
+
kind: "ordered-list";
|
|
26
|
+
} | {
|
|
27
|
+
kind: "merge-keys";
|
|
28
|
+
} | {
|
|
29
|
+
kind: "opaque";
|
|
30
|
+
};
|
|
31
|
+
/**
|
|
32
|
+
* Profil de merge pour un type de fichier (ou pattern).
|
|
33
|
+
*
|
|
34
|
+
* Le registre essaie chaque profil dans l'ordre d'enregistrement ; le premier
|
|
35
|
+
* dont matches(filePath) retourne true est utilisé. Les chemins sont des
|
|
36
|
+
* JSON Pointers (par exemple /dependencies, ou des paths avec wildcard de
|
|
37
|
+
* segment unique pour itérer sur une liste). Les wildcards "*" matchent un
|
|
38
|
+
* segment unique (équivalent shallow-glob).
|
|
39
|
+
*/
|
|
40
|
+
export interface FormatProfile {
|
|
41
|
+
/** Identifiant lisible (pour les traces) — ex: "package.json". */
|
|
42
|
+
name: string;
|
|
43
|
+
/** Match sur le filePath. Le registre s'arrête au premier profil matching. */
|
|
44
|
+
matches: (filePath: string) => boolean;
|
|
45
|
+
/** Stratégie par chemin JSON Pointer (RFC 6901). */
|
|
46
|
+
paths: Record<string, PathStrategy>;
|
|
47
|
+
/** Stratégie par défaut pour les chemins non listés. */
|
|
48
|
+
default: PathStrategy;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Une opération RFC 6902 minimale. On ne supporte que add, remove, replace.
|
|
52
|
+
* move et copy peuvent toujours être exprimées par séquences add/remove, et
|
|
53
|
+
* leur omission garde le code en dessous de 2KB ajoutés.
|
|
54
|
+
*/
|
|
55
|
+
export type JsonPatchOp = {
|
|
56
|
+
op: "add";
|
|
57
|
+
path: string;
|
|
58
|
+
value: unknown;
|
|
59
|
+
} | {
|
|
60
|
+
op: "remove";
|
|
61
|
+
path: string;
|
|
62
|
+
} | {
|
|
63
|
+
op: "replace";
|
|
64
|
+
path: string;
|
|
65
|
+
value: unknown;
|
|
66
|
+
};
|
|
67
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/format-profiles/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,YAAY,GACpB;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,MAAM,CAAA;CAAE,GACrD;IAAE,IAAI,EAAE,cAAc,CAAA;CAAE,GACxB;IAAE,IAAI,EAAE,YAAY,CAAA;CAAE,GACtB;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,CAAC;AAEvB;;;;;;;;GAQG;AACH,MAAM,WAAW,aAAa;IAC5B,kEAAkE;IAClE,IAAI,EAAE,MAAM,CAAC;IACb,8EAA8E;IAC9E,OAAO,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC;IACvC,oDAAoD;IACpD,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACpC,wDAAwD;IACxD,OAAO,EAAE,YAAY,CAAC;CACvB;AAED;;;;GAIG;AACH,MAAM,MAAM,WAAW,GACnB;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,GAC3C;IAAE,EAAE,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC9B;IAAE,EAAE,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GitWand — Types du registre de profils par format
|
|
3
|
+
*
|
|
4
|
+
* Un FormatProfile annote des chemins JSON Pointer (RFC 6901) avec une
|
|
5
|
+
* stratégie de merge. C'est l'analogue local des "commutative parents" de
|
|
6
|
+
* Mergiraf, mais piloté par configuration plutôt que par grammaire.
|
|
7
|
+
*/
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/format-profiles/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
|
package/dist/index.d.ts
CHANGED
|
@@ -20,6 +20,10 @@
|
|
|
20
20
|
export { resolve } from "./resolver.js";
|
|
21
21
|
export { parseConflictMarkers, classifyConflict } from "./parser.js";
|
|
22
22
|
export { mergeNonOverlapping, computeDiff, lcs } from "./diff.js";
|
|
23
|
+
export { histogramDiff, detectBlockMove, lcsLegacy, type HistogramOptions, type MovedBlock, type BlockMoveOptions, } from "./diff/index.js";
|
|
24
|
+
export { profileForFile, registerFormatProfile, strategyForPath, type FormatProfile, type PathStrategy, } from "./format-profiles/index.js";
|
|
25
|
+
export { diffJson, applyJsonPatch, mergeJsonPatches, parseJsonPointer, buildJsonPointer, jsonStructEqual, } from "./format-profiles/json-patch.js";
|
|
26
|
+
export type { JsonPatchOp } from "./format-profiles/types.js";
|
|
23
27
|
export { tryResolveJsonConflict, stripJsoncComments } from "./resolvers/json.js";
|
|
24
28
|
export { tryResolveMarkdownConflict, parseSections, extractFrontmatter } from "./resolvers/markdown.js";
|
|
25
29
|
export { tryResolveYamlConflict } from "./resolvers/yaml.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAGlE,OAAO,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACjF,OAAO,EAAE,0BAA0B,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAGxG,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,wBAAwB,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACjF,OAAO,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAC3E,OAAO,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAG1E,OAAO,EAAE,6BAA6B,EAAE,MAAM,6BAA6B,CAAC;AAC5E,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAC1E,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAG1E,OAAO,EACL,SAAS,EACT,sBAAsB,EACtB,cAAc,EACd,cAAc,EACd,cAAc,GACf,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,qBAAqB,EACrB,UAAU,EACV,cAAc,EACd,UAAU,EACV,QAAQ,EACR,SAAS,EACT,SAAS,EACT,aAAa,EACb,cAAc,EACd,cAAc,EACd,UAAU,GACX,MAAM,2BAA2B,CAAC;AAEnC,YAAY,EACV,UAAU,EACV,WAAW,EACX,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,UAAU,EAEV,eAAe,EACf,cAAc,EACd,cAAc,EAEd,aAAa,EACb,SAAS,EAET,gBAAgB,GACjB,MAAM,YAAY,CAAC;AAEpB,YAAY,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC3D,YAAY,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AACpF,YAAY,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACtE,YAAY,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACjF,YAAY,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACnE,YAAY,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAClE,YAAY,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AACrE,YAAY,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AACvE,YAAY,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACxE,YAAY,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACxE,YAAY,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AACjE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAGlE,OAAO,EACL,aAAa,EACb,eAAe,EACf,SAAS,EACT,KAAK,gBAAgB,EACrB,KAAK,UAAU,EACf,KAAK,gBAAgB,GACtB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EACL,cAAc,EACd,qBAAqB,EACrB,eAAe,EACf,KAAK,aAAa,EAClB,KAAK,YAAY,GAClB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,QAAQ,EACR,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,GAChB,MAAM,iCAAiC,CAAC;AACzC,YAAY,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAG9D,OAAO,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACjF,OAAO,EAAE,0BAA0B,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAGxG,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,wBAAwB,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACjF,OAAO,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAC3E,OAAO,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAG1E,OAAO,EAAE,6BAA6B,EAAE,MAAM,6BAA6B,CAAC;AAC5E,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAC1E,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAG1E,OAAO,EACL,SAAS,EACT,sBAAsB,EACtB,cAAc,EACd,cAAc,EACd,cAAc,GACf,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,qBAAqB,EACrB,UAAU,EACV,cAAc,EACd,UAAU,EACV,QAAQ,EACR,SAAS,EACT,SAAS,EACT,aAAa,EACb,cAAc,EACd,cAAc,EACd,UAAU,GACX,MAAM,2BAA2B,CAAC;AAEnC,YAAY,EACV,UAAU,EACV,WAAW,EACX,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,UAAU,EAEV,eAAe,EACf,cAAc,EACd,cAAc,EAEd,aAAa,EACb,SAAS,EAET,gBAAgB,GACjB,MAAM,YAAY,CAAC;AAEpB,YAAY,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC3D,YAAY,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AACpF,YAAY,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACtE,YAAY,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACjF,YAAY,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACnE,YAAY,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAClE,YAAY,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AACrE,YAAY,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AACvE,YAAY,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACxE,YAAY,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACxE,YAAY,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AACjE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -20,6 +20,11 @@
|
|
|
20
20
|
export { resolve } from "./resolver.js";
|
|
21
21
|
export { parseConflictMarkers, classifyConflict } from "./parser.js";
|
|
22
22
|
export { mergeNonOverlapping, computeDiff, lcs } from "./diff.js";
|
|
23
|
+
// v2.1 — nouveaux backends diff exposés
|
|
24
|
+
export { histogramDiff, detectBlockMove, lcsLegacy, } from "./diff/index.js";
|
|
25
|
+
// v2.2 — registre de profils de format + RFC 6902
|
|
26
|
+
export { profileForFile, registerFormatProfile, strategyForPath, } from "./format-profiles/index.js";
|
|
27
|
+
export { diffJson, applyJsonPatch, mergeJsonPatches, parseJsonPointer, buildJsonPointer, jsonStructEqual, } from "./format-profiles/json-patch.js";
|
|
23
28
|
// Phase 7.3 — Résolveurs spécialisés par format
|
|
24
29
|
export { tryResolveJsonConflict, stripJsoncComments } from "./resolvers/json.js";
|
|
25
30
|
export { tryResolveMarkdownConflict, parseSections, extractFrontmatter } from "./resolvers/markdown.js";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAElE,gDAAgD;AAChD,OAAO,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACjF,OAAO,EAAE,0BAA0B,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAExG,8EAA8E;AAC9E,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,wBAAwB,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACjF,OAAO,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAC3E,OAAO,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAE1E,oEAAoE;AACpE,OAAO,EAAE,6BAA6B,EAAE,MAAM,6BAA6B,CAAC;AAC5E,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAC1E,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAE1E,8DAA8D;AAC9D,OAAO,EACL,SAAS,EACT,sBAAsB,EACtB,cAAc,EACd,cAAc,EACd,cAAc,GACf,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,qBAAqB,EACrB,UAAU,EACV,cAAc,EACd,UAAU,EACV,QAAQ,EACR,SAAS,EACT,SAAS,EACT,aAAa,EACb,cAAc,EACd,cAAc,EACd,UAAU,GACX,MAAM,2BAA2B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAElE,wCAAwC;AACxC,OAAO,EACL,aAAa,EACb,eAAe,EACf,SAAS,GAIV,MAAM,iBAAiB,CAAC;AAEzB,kDAAkD;AAClD,OAAO,EACL,cAAc,EACd,qBAAqB,EACrB,eAAe,GAGhB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,QAAQ,EACR,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,GAChB,MAAM,iCAAiC,CAAC;AAGzC,gDAAgD;AAChD,OAAO,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACjF,OAAO,EAAE,0BAA0B,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAExG,8EAA8E;AAC9E,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,wBAAwB,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACjF,OAAO,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAC3E,OAAO,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAE1E,oEAAoE;AACpE,OAAO,EAAE,6BAA6B,EAAE,MAAM,6BAA6B,CAAC;AAC5E,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAC1E,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAE1E,8DAA8D;AAC9D,OAAO,EACL,SAAS,EACT,sBAAsB,EACtB,cAAc,EACd,cAAc,EACd,cAAc,GACf,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,qBAAqB,EACrB,UAAU,EACV,cAAc,EACd,UAAU,EACV,QAAQ,EACR,SAAS,EACT,SAAS,EACT,aAAa,EACb,cAAc,EACd,cAAc,EACd,UAAU,GACX,MAAM,2BAA2B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"insertion-at-boundary.d.ts","sourceRoot":"","sources":["../../src/patterns/insertion-at-boundary.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAkC,aAAa,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"insertion-at-boundary.d.ts","sourceRoot":"","sources":["../../src/patterns/insertion-at-boundary.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAkC,aAAa,EAAE,MAAM,aAAa,CAAC;AAmFjF,QAAA,MAAM,mBAAmB,EAAE,aA6D1B,CAAC;AAEF,eAAe,mBAAmB,CAAC"}
|
|
@@ -17,40 +17,22 @@
|
|
|
17
17
|
* point de frontière (le LCS échoue) mais l'analyse sémantique réussit
|
|
18
18
|
*/
|
|
19
19
|
import { scopeImpact, makeScore, normalizeLine } from "./utils.js";
|
|
20
|
+
import { lcs } from "../diff/index.js";
|
|
20
21
|
// ─── LCS helpers ─────────────────────────────────────────────
|
|
22
|
+
//
|
|
23
|
+
// v2.1 : on utilise le backend `lcs` partagé (Histogram par défaut, legacy via
|
|
24
|
+
// `GITWAND_DIFF=lcs`) plutôt que le DP plein local. Le code retiré ressemblait
|
|
25
|
+
// au DP de `lcs.ts` mais avec une structure de retour différente — on adapte
|
|
26
|
+
// donc juste la sortie de `lcs()` (paires `[i, j]`) en un Set d'indices côté
|
|
27
|
+
// `modified`.
|
|
21
28
|
/**
|
|
22
|
-
* Calcule
|
|
23
|
-
*
|
|
29
|
+
* Calcule l'ensemble des indices de `a` qui sont dans le LCS avec `b`.
|
|
30
|
+
* Wrapper sur le backend partagé.
|
|
24
31
|
*/
|
|
25
32
|
function lcsIndices(a, b) {
|
|
26
|
-
const m = a.length;
|
|
27
|
-
const n = b.length;
|
|
28
|
-
// dp[i][j] = longueur du LCS de a[0..i-1] et b[0..j-1]
|
|
29
|
-
const dp = Array.from({ length: m + 1 }, () => new Array(n + 1).fill(0));
|
|
30
|
-
for (let i = 1; i <= m; i++) {
|
|
31
|
-
for (let j = 1; j <= n; j++) {
|
|
32
|
-
dp[i][j] = a[i - 1] === b[j - 1]
|
|
33
|
-
? dp[i - 1][j - 1] + 1
|
|
34
|
-
: Math.max(dp[i - 1][j], dp[i][j - 1]);
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
// Backtrack pour récupérer les indices dans `a`
|
|
38
33
|
const inLcs = new Set();
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
while (i > 0 && j > 0) {
|
|
42
|
-
if (a[i - 1] === b[j - 1]) {
|
|
43
|
-
inLcs.add(i - 1);
|
|
44
|
-
i--;
|
|
45
|
-
j--;
|
|
46
|
-
}
|
|
47
|
-
else if (dp[i - 1][j] > dp[i][j - 1]) {
|
|
48
|
-
i--;
|
|
49
|
-
}
|
|
50
|
-
else {
|
|
51
|
-
j--;
|
|
52
|
-
}
|
|
53
|
-
}
|
|
34
|
+
for (const [i] of lcs(a, b))
|
|
35
|
+
inLcs.add(i);
|
|
54
36
|
return inLcs;
|
|
55
37
|
}
|
|
56
38
|
/**
|
|
@@ -58,16 +40,16 @@ function lcsIndices(a, b) {
|
|
|
58
40
|
* Ces lignes sont les "additions" par rapport à la base.
|
|
59
41
|
*/
|
|
60
42
|
function lcsAdditions(base, modified) {
|
|
61
|
-
const
|
|
62
|
-
return modified.filter((_, i) => !
|
|
43
|
+
const lcsSet = lcsIndices(modified, base); // indices dans modified qui sont dans le LCS
|
|
44
|
+
return modified.filter((_, i) => !lcsSet.has(i));
|
|
63
45
|
}
|
|
64
46
|
/**
|
|
65
47
|
* Retourne les lignes de `base` qui ne sont plus dans `modified`.
|
|
66
48
|
* Ces lignes sont les "suppressions" par rapport à la base.
|
|
67
49
|
*/
|
|
68
50
|
function lcsRemovals(base, modified) {
|
|
69
|
-
const
|
|
70
|
-
return base.filter((_, i) => !
|
|
51
|
+
const lcsSet = lcsIndices(base, modified); // indices dans base qui sont dans le LCS
|
|
52
|
+
return base.filter((_, i) => !lcsSet.has(i));
|
|
71
53
|
}
|
|
72
54
|
/** Vérifie si deux tableaux ont des éléments communs */
|
|
73
55
|
function hasOverlap(a, b) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"insertion-at-boundary.js","sourceRoot":"","sources":["../../src/patterns/insertion-at-boundary.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAGH,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"insertion-at-boundary.js","sourceRoot":"","sources":["../../src/patterns/insertion-at-boundary.ts"],"names":[],"mappings":"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"}
|
package/dist/patterns/utils.d.ts
CHANGED
|
@@ -21,17 +21,20 @@ export declare function labelFromScore(score: number): Confidence;
|
|
|
21
21
|
/**
|
|
22
22
|
* Construit un ConfidenceScore à partir des dimensions et des justifications.
|
|
23
23
|
*
|
|
24
|
-
* Formule
|
|
24
|
+
* Formule v2.1 :
|
|
25
25
|
* `score = typeClassification
|
|
26
|
-
* − dataRisk
|
|
27
|
-
* − scopeImpact
|
|
28
|
-
* − fileFrequency
|
|
29
|
-
* + baseAvailability
|
|
26
|
+
* − dataRisk × 0.40
|
|
27
|
+
* − scopeImpact × 0.15
|
|
28
|
+
* − fileFrequency × 0.10
|
|
29
|
+
* + baseAvailability × 0.05
|
|
30
|
+
* − algorithmStability × 0.10`
|
|
30
31
|
*
|
|
31
|
-
*
|
|
32
|
-
*
|
|
32
|
+
* Tous les paramètres après `penalties` sont optionnels (défaut 0). Quand un
|
|
33
|
+
* pattern n'set pas `algorithmStability`, son score est numériquement
|
|
34
|
+
* identique à v1.4 — la dimension est *présente dans le type* mais reste à 0
|
|
35
|
+
* tant que les producteurs (block-move detection en v2.6) ne l'alimentent pas.
|
|
33
36
|
*/
|
|
34
|
-
export declare function makeScore(typeClassification: number, dataRisk: number, si: number, boosters: string[], penalties: string[], fileFrequency?: number, baseAvailability?: number): ConfidenceScore;
|
|
37
|
+
export declare function makeScore(typeClassification: number, dataRisk: number, si: number, boosters: string[], penalties: string[], fileFrequency?: number, baseAvailability?: number, algorithmStability?: number): ConfidenceScore;
|
|
35
38
|
/**
|
|
36
39
|
* Normalise les lignes d'un bloc pour la comparaison whitespace-only.
|
|
37
40
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/patterns/utils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAI/D;;;GAGG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAKjD;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,CAKxD;AAED
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/patterns/utils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAI/D;;;GAGG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAKjD;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,CAKxD;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,SAAS,CACvB,kBAAkB,EAAE,MAAM,EAC1B,QAAQ,EAAE,MAAM,EAChB,EAAE,EAAE,MAAM,EACV,QAAQ,EAAE,MAAM,EAAE,EAClB,SAAS,EAAE,MAAM,EAAE,EACnB,aAAa,SAAI,EACjB,gBAAgB,SAAI,EACpB,kBAAkB,SAAI,GACrB,eAAe,CA8BjB;AAID;;;;;;;;GAQG;AACH,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CAOnE;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAElD;AAID,wFAAwF;AACxF,eAAO,MAAM,iBAAiB,UAQ7B,CAAC;AAEF;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAqChE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAEnD;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,MAAM,EAAE,EACnB,WAAW,EAAE,MAAM,EAAE,GACpB;IAAE,eAAe,EAAE,eAAe,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAiEvF"}
|
package/dist/patterns/utils.js
CHANGED
|
@@ -37,27 +37,45 @@ export function labelFromScore(score) {
|
|
|
37
37
|
/**
|
|
38
38
|
* Construit un ConfidenceScore à partir des dimensions et des justifications.
|
|
39
39
|
*
|
|
40
|
-
* Formule
|
|
40
|
+
* Formule v2.1 :
|
|
41
41
|
* `score = typeClassification
|
|
42
|
-
* − dataRisk
|
|
43
|
-
* − scopeImpact
|
|
44
|
-
* − fileFrequency
|
|
45
|
-
* + baseAvailability
|
|
42
|
+
* − dataRisk × 0.40
|
|
43
|
+
* − scopeImpact × 0.15
|
|
44
|
+
* − fileFrequency × 0.10
|
|
45
|
+
* + baseAvailability × 0.05
|
|
46
|
+
* − algorithmStability × 0.10`
|
|
46
47
|
*
|
|
47
|
-
*
|
|
48
|
-
*
|
|
48
|
+
* Tous les paramètres après `penalties` sont optionnels (défaut 0). Quand un
|
|
49
|
+
* pattern n'set pas `algorithmStability`, son score est numériquement
|
|
50
|
+
* identique à v1.4 — la dimension est *présente dans le type* mais reste à 0
|
|
51
|
+
* tant que les producteurs (block-move detection en v2.6) ne l'alimentent pas.
|
|
49
52
|
*/
|
|
50
|
-
export function makeScore(typeClassification, dataRisk, si, boosters, penalties, fileFrequency = 0, baseAvailability = 0) {
|
|
53
|
+
export function makeScore(typeClassification, dataRisk, si, boosters, penalties, fileFrequency = 0, baseAvailability = 0, algorithmStability = 0) {
|
|
51
54
|
const raw = typeClassification
|
|
52
55
|
- dataRisk * 0.40
|
|
53
56
|
- si * 0.15
|
|
54
57
|
- fileFrequency * 0.10
|
|
55
|
-
+ baseAvailability * 0.05
|
|
58
|
+
+ baseAvailability * 0.05
|
|
59
|
+
- algorithmStability * 0.10;
|
|
56
60
|
const score = Math.round(Math.max(0, Math.min(100, raw)));
|
|
61
|
+
// On ne pousse `algorithmStability` dans `dimensions` que s'il est non-zéro,
|
|
62
|
+
// pour que les snapshots de tests existants (qui asserent l'objet exact)
|
|
63
|
+
// restent verts. Les nouveaux consommateurs peuvent toujours le lire (le
|
|
64
|
+
// type le marque optionnel).
|
|
65
|
+
const dimensions = {
|
|
66
|
+
typeClassification,
|
|
67
|
+
dataRisk,
|
|
68
|
+
scopeImpact: si,
|
|
69
|
+
fileFrequency,
|
|
70
|
+
baseAvailability,
|
|
71
|
+
};
|
|
72
|
+
if (algorithmStability !== 0) {
|
|
73
|
+
dimensions.algorithmStability = algorithmStability;
|
|
74
|
+
}
|
|
57
75
|
return {
|
|
58
76
|
score,
|
|
59
77
|
label: labelFromScore(score),
|
|
60
|
-
dimensions
|
|
78
|
+
dimensions,
|
|
61
79
|
boosters,
|
|
62
80
|
penalties,
|
|
63
81
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/patterns/utils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,gEAAgE;AAEhE;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,KAAa;IACvC,IAAI,KAAK,IAAI,CAAC;QAAE,OAAO,CAAC,CAAC;IACzB,IAAI,KAAK,IAAI,EAAE;QAAE,OAAO,EAAE,CAAC;IAC3B,IAAI,KAAK,IAAI,EAAE;QAAE,OAAO,EAAE,CAAC;IAC3B,OAAO,EAAE,CAAC;AACZ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,KAAa;IAC1C,IAAI,KAAK,IAAI,EAAE;QAAE,OAAO,SAAS,CAAC;IAClC,IAAI,KAAK,IAAI,EAAE;QAAE,OAAO,MAAM,CAAC;IAC/B,IAAI,KAAK,IAAI,EAAE;QAAE,OAAO,QAAQ,CAAC;IACjC,OAAO,KAAK,CAAC;AACf,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/patterns/utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"format-dispatch.d.ts","sourceRoot":"","sources":["../../src/resolver/format-dispatch.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAIhE,MAAM,MAAM,oBAAoB;AAC9B,0DAA0D;AACxD;IAAE,MAAM,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE;AACzD,qGAAqG;GACnG;IAAE,MAAM,EAAE,iBAAiB,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE;AAC/C,0FAA0F;GACxF;IAAE,MAAM,EAAE,gBAAgB,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAE/C;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,YAAY,EAClB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,QAAQ,CAAC,cAAc,CAAC,GAChC,oBAAoB,
|
|
1
|
+
{"version":3,"file":"format-dispatch.d.ts","sourceRoot":"","sources":["../../src/resolver/format-dispatch.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAIhE,MAAM,MAAM,oBAAoB;AAC9B,0DAA0D;AACxD;IAAE,MAAM,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE;AACzD,qGAAqG;GACnG;IAAE,MAAM,EAAE,iBAAiB,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE;AAC/C,0FAA0F;GACxF;IAAE,MAAM,EAAE,gBAAgB,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAE/C;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,YAAY,EAClB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,QAAQ,CAAC,cAAc,CAAC,GAChC,oBAAoB,CAgCtB"}
|