@proposit/proposit-core 0.9.1 → 0.11.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 +147 -35
- package/dist/cli/commands/arguments.d.ts.map +1 -1
- package/dist/cli/commands/arguments.js +8 -16
- package/dist/cli/commands/arguments.js.map +1 -1
- package/dist/cli/commands/citations.d.ts +3 -0
- package/dist/cli/commands/citations.d.ts.map +1 -0
- package/dist/cli/commands/citations.js +89 -0
- package/dist/cli/commands/citations.js.map +1 -0
- package/dist/cli/commands/claims.d.ts.map +1 -1
- package/dist/cli/commands/claims.js +10 -2
- package/dist/cli/commands/claims.js.map +1 -1
- package/dist/cli/commands/parse.d.ts.map +1 -1
- package/dist/cli/commands/parse.js +9 -17
- package/dist/cli/commands/parse.js.map +1 -1
- package/dist/cli/commands/premises.d.ts.map +1 -1
- package/dist/cli/commands/premises.js +82 -5
- package/dist/cli/commands/premises.js.map +1 -1
- package/dist/cli/commands/render.d.ts.map +1 -1
- package/dist/cli/commands/render.js +46 -19
- package/dist/cli/commands/render.js.map +1 -1
- package/dist/cli/commands/variables.d.ts.map +1 -1
- package/dist/cli/commands/variables.js +1 -0
- package/dist/cli/commands/variables.js.map +1 -1
- package/dist/cli/engine.d.ts.map +1 -1
- package/dist/cli/engine.js +15 -9
- package/dist/cli/engine.js.map +1 -1
- package/dist/cli/import.d.ts +2 -4
- package/dist/cli/import.d.ts.map +1 -1
- package/dist/cli/import.js +78 -20
- package/dist/cli/import.js.map +1 -1
- package/dist/cli/router.js +1 -1
- package/dist/cli/router.js.map +1 -1
- package/dist/cli/storage/libraries.d.ts +4 -7
- package/dist/cli/storage/libraries.d.ts.map +1 -1
- package/dist/cli/storage/libraries.js +9 -28
- package/dist/cli/storage/libraries.js.map +1 -1
- package/dist/cli/storage/migrate-v0.10.d.ts +10 -0
- package/dist/cli/storage/migrate-v0.10.d.ts.map +1 -0
- package/dist/cli/storage/migrate-v0.10.js +213 -0
- package/dist/cli/storage/migrate-v0.10.js.map +1 -0
- package/dist/cli/storage/migrate-v0.11.d.ts +15 -0
- package/dist/cli/storage/migrate-v0.11.d.ts.map +1 -0
- package/dist/cli/storage/migrate-v0.11.js +125 -0
- package/dist/cli/storage/migrate-v0.11.js.map +1 -0
- package/dist/cli.js +2 -2
- package/dist/cli.js.map +1 -1
- package/dist/extensions/basics/argument-parser.d.ts +1 -2
- package/dist/extensions/basics/argument-parser.d.ts.map +1 -1
- package/dist/extensions/basics/argument-parser.js.map +1 -1
- package/dist/extensions/basics/schemata.d.ts +12 -1
- package/dist/extensions/basics/schemata.d.ts.map +1 -1
- package/dist/extensions/ieee/{source.d.ts → citation-claim.d.ts} +5 -3
- package/dist/extensions/ieee/citation-claim.d.ts.map +1 -0
- package/dist/extensions/ieee/{source.js → citation-claim.js} +5 -4
- package/dist/extensions/ieee/citation-claim.js.map +1 -0
- package/dist/extensions/ieee/index.d.ts +1 -1
- package/dist/extensions/ieee/index.d.ts.map +1 -1
- package/dist/extensions/ieee/index.js +1 -1
- package/dist/extensions/ieee/index.js.map +1 -1
- package/dist/lib/consts.d.ts.map +1 -1
- package/dist/lib/consts.js +15 -14
- package/dist/lib/consts.js.map +1 -1
- package/dist/lib/core/argument-engine.d.ts +47 -9
- package/dist/lib/core/argument-engine.d.ts.map +1 -1
- package/dist/lib/core/argument-engine.js +209 -20
- package/dist/lib/core/argument-engine.js.map +1 -1
- package/dist/lib/core/argument-library.d.ts +13 -15
- package/dist/lib/core/argument-library.d.ts.map +1 -1
- package/dist/lib/core/argument-library.js +23 -9
- package/dist/lib/core/argument-library.js.map +1 -1
- package/dist/lib/core/claim-citation-library.d.ts +44 -0
- package/dist/lib/core/claim-citation-library.d.ts.map +1 -0
- package/dist/lib/core/claim-citation-library.js +336 -0
- package/dist/lib/core/claim-citation-library.js.map +1 -0
- package/dist/lib/core/claim-library.d.ts +33 -1
- package/dist/lib/core/claim-library.d.ts.map +1 -1
- package/dist/lib/core/claim-library.js +71 -3
- package/dist/lib/core/claim-library.js.map +1 -1
- package/dist/lib/core/fork-library.d.ts +19 -10
- package/dist/lib/core/fork-library.d.ts.map +1 -1
- package/dist/lib/core/fork-library.js +16 -13
- package/dist/lib/core/fork-library.js.map +1 -1
- package/dist/lib/core/fork.d.ts +6 -7
- package/dist/lib/core/fork.d.ts.map +1 -1
- package/dist/lib/core/fork.js +8 -3
- package/dist/lib/core/fork.js.map +1 -1
- package/dist/lib/core/interfaces/argument-engine.interfaces.d.ts +132 -7
- package/dist/lib/core/interfaces/argument-engine.interfaces.d.ts.map +1 -1
- package/dist/lib/core/interfaces/index.d.ts +1 -1
- package/dist/lib/core/interfaces/index.d.ts.map +1 -1
- package/dist/lib/core/interfaces/library.interfaces.d.ts +76 -157
- package/dist/lib/core/interfaces/library.interfaces.d.ts.map +1 -1
- package/dist/lib/core/managed-derivation-premise-engine.d.ts +155 -0
- package/dist/lib/core/managed-derivation-premise-engine.d.ts.map +1 -0
- package/dist/lib/core/managed-derivation-premise-engine.js +517 -0
- package/dist/lib/core/managed-derivation-premise-engine.js.map +1 -0
- package/dist/lib/core/premise-engine.d.ts +6 -5
- package/dist/lib/core/premise-engine.d.ts.map +1 -1
- package/dist/lib/core/premise-engine.js +5 -3
- package/dist/lib/core/premise-engine.js.map +1 -1
- package/dist/lib/core/proposit-core.d.ts +30 -32
- package/dist/lib/core/proposit-core.d.ts.map +1 -1
- package/dist/lib/core/proposit-core.js +82 -89
- package/dist/lib/core/proposit-core.js.map +1 -1
- package/dist/lib/index.d.ts +5 -3
- package/dist/lib/index.d.ts.map +1 -1
- package/dist/lib/index.js +4 -3
- package/dist/lib/index.js.map +1 -1
- package/dist/lib/parsing/argument-parser.d.ts +9 -12
- package/dist/lib/parsing/argument-parser.d.ts.map +1 -1
- package/dist/lib/parsing/argument-parser.js +27 -45
- package/dist/lib/parsing/argument-parser.js.map +1 -1
- package/dist/lib/parsing/index.d.ts +2 -2
- package/dist/lib/parsing/index.d.ts.map +1 -1
- package/dist/lib/parsing/index.js +1 -1
- package/dist/lib/parsing/index.js.map +1 -1
- package/dist/lib/parsing/prompt-builder.d.ts.map +1 -1
- package/dist/lib/parsing/prompt-builder.js +31 -24
- package/dist/lib/parsing/prompt-builder.js.map +1 -1
- package/dist/lib/parsing/schemata.d.ts +7 -19
- package/dist/lib/parsing/schemata.d.ts.map +1 -1
- package/dist/lib/parsing/schemata.js +7 -14
- package/dist/lib/parsing/schemata.js.map +1 -1
- package/dist/lib/parsing/types.d.ts +1 -2
- package/dist/lib/parsing/types.d.ts.map +1 -1
- package/dist/lib/schemata/claim-citation.d.ts +11 -0
- package/dist/lib/schemata/claim-citation.d.ts.map +1 -0
- package/dist/lib/schemata/claim-citation.js +25 -0
- package/dist/lib/schemata/claim-citation.js.map +1 -0
- package/dist/lib/schemata/claim.d.ts +1 -0
- package/dist/lib/schemata/claim.d.ts.map +1 -1
- package/dist/lib/schemata/claim.js +3 -0
- package/dist/lib/schemata/claim.js.map +1 -1
- package/dist/lib/schemata/fork.d.ts +0 -11
- package/dist/lib/schemata/fork.d.ts.map +1 -1
- package/dist/lib/schemata/fork.js +0 -10
- package/dist/lib/schemata/fork.js.map +1 -1
- package/dist/lib/schemata/import.d.ts +39 -2
- package/dist/lib/schemata/import.d.ts.map +1 -1
- package/dist/lib/schemata/import.js +22 -1
- package/dist/lib/schemata/import.js.map +1 -1
- package/dist/lib/schemata/index.d.ts +1 -1
- package/dist/lib/schemata/index.d.ts.map +1 -1
- package/dist/lib/schemata/index.js +1 -1
- package/dist/lib/schemata/index.js.map +1 -1
- package/dist/lib/schemata/propositional.d.ts +32 -1
- package/dist/lib/schemata/propositional.d.ts.map +1 -1
- package/dist/lib/schemata/propositional.js +17 -2
- package/dist/lib/schemata/propositional.js.map +1 -1
- package/dist/lib/types/checksum.d.ts +3 -5
- package/dist/lib/types/checksum.d.ts.map +1 -1
- package/dist/lib/types/evaluation.d.ts +1 -1
- package/dist/lib/types/evaluation.d.ts.map +1 -1
- package/dist/lib/types/validation.d.ts +19 -7
- package/dist/lib/types/validation.d.ts.map +1 -1
- package/dist/lib/types/validation.js +21 -8
- package/dist/lib/types/validation.js.map +1 -1
- package/dist/lib/utils/derivation-validation.d.ts +24 -0
- package/dist/lib/utils/derivation-validation.d.ts.map +1 -0
- package/dist/lib/utils/derivation-validation.js +107 -0
- package/dist/lib/utils/derivation-validation.js.map +1 -0
- package/dist/lib/utils/lookup.d.ts +7 -15
- package/dist/lib/utils/lookup.d.ts.map +1 -1
- package/dist/lib/utils/lookup.js +9 -18
- package/dist/lib/utils/lookup.js.map +1 -1
- package/package.json +1 -1
- package/dist/cli/commands/sources.d.ts +0 -3
- package/dist/cli/commands/sources.d.ts.map +0 -1
- package/dist/cli/commands/sources.js +0 -103
- package/dist/cli/commands/sources.js.map +0 -1
- package/dist/extensions/ieee/source.d.ts.map +0 -1
- package/dist/extensions/ieee/source.js.map +0 -1
- package/dist/lib/core/claim-source-library.d.ts +0 -32
- package/dist/lib/core/claim-source-library.d.ts.map +0 -1
- package/dist/lib/core/claim-source-library.js +0 -193
- package/dist/lib/core/claim-source-library.js.map +0 -1
- package/dist/lib/core/source-library.d.ts +0 -23
- package/dist/lib/core/source-library.d.ts.map +0 -1
- package/dist/lib/core/source-library.js +0 -21
- package/dist/lib/core/source-library.js.map +0 -1
- package/dist/lib/schemata/source.d.ts +0 -18
- package/dist/lib/schemata/source.d.ts.map +0 -1
- package/dist/lib/schemata/source.js +0 -35
- package/dist/lib/schemata/source.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"argument-library.d.ts","sourceRoot":"","sources":["../../../src/lib/core/argument-library.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACR,aAAa,EACb,UAAU,EACV,
|
|
1
|
+
{"version":3,"file":"argument-library.d.ts","sourceRoot":"","sources":["../../../src/lib/core/argument-library.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { ArgumentEngine } from "./argument-engine.js";
|
|
2
2
|
import { ClaimLibrary } from "./claim-library.js";
|
|
3
|
-
import {
|
|
4
|
-
import { SourceLibrary } from "./source-library.js";
|
|
3
|
+
import { ClaimCitationLibrary } from "./claim-citation-library.js";
|
|
5
4
|
/**
|
|
6
5
|
* Engine registry with lifecycle management. Stores `ArgumentEngine` instances
|
|
7
6
|
* keyed by argument ID.
|
|
@@ -23,11 +22,16 @@ export class ArgumentLibrary {
|
|
|
23
22
|
* @returns The newly created engine.
|
|
24
23
|
* @throws If an engine with the same argument ID already exists.
|
|
25
24
|
*/
|
|
26
|
-
create(argument
|
|
25
|
+
create(argument
|
|
26
|
+
// TODO Phase 7: drop TSource/TAssoc generics from ArgumentEngine.
|
|
27
|
+
) {
|
|
27
28
|
if (this.engines.has(argument.id)) {
|
|
28
29
|
throw new Error(`ArgumentLibrary: argument "${argument.id}" already exists.`);
|
|
29
30
|
}
|
|
30
|
-
|
|
31
|
+
// TODO Phase 7: ArgumentEngine constructor will take
|
|
32
|
+
// (argument, claimLibrary, claimCitationLibrary, options) once its
|
|
33
|
+
// generics are reduced to drop TSource/TAssoc.
|
|
34
|
+
const engine = new ArgumentEngine(argument, this.libraries.claimLibrary, this.libraries.claimCitationLibrary, this.options);
|
|
31
35
|
this.engines.set(argument.id, engine);
|
|
32
36
|
return engine;
|
|
33
37
|
}
|
|
@@ -38,7 +42,9 @@ export class ArgumentLibrary {
|
|
|
38
42
|
* @param engine - The engine to register.
|
|
39
43
|
* @throws If an engine with the same argument ID already exists.
|
|
40
44
|
*/
|
|
41
|
-
register(
|
|
45
|
+
register(
|
|
46
|
+
// TODO Phase 7: drop TSource/TAssoc generics from ArgumentEngine.
|
|
47
|
+
engine) {
|
|
42
48
|
const id = engine.getArgument().id;
|
|
43
49
|
if (this.engines.has(id)) {
|
|
44
50
|
throw new Error(`ArgumentLibrary: argument "${id}" already exists.`);
|
|
@@ -52,7 +58,9 @@ export class ArgumentLibrary {
|
|
|
52
58
|
* @param argumentId - The argument ID to look up.
|
|
53
59
|
* @returns The engine, or `undefined`.
|
|
54
60
|
*/
|
|
55
|
-
get(argumentId
|
|
61
|
+
get(argumentId
|
|
62
|
+
// TODO Phase 7: drop TSource/TAssoc generics from ArgumentEngine.
|
|
63
|
+
) {
|
|
56
64
|
return this.engines.get(argumentId);
|
|
57
65
|
}
|
|
58
66
|
/**
|
|
@@ -60,6 +68,7 @@ export class ArgumentLibrary {
|
|
|
60
68
|
*
|
|
61
69
|
* @returns An array of all managed engines.
|
|
62
70
|
*/
|
|
71
|
+
// TODO Phase 7: drop TSource/TAssoc generics from ArgumentEngine.
|
|
63
72
|
getAll() {
|
|
64
73
|
return Array.from(this.engines.values());
|
|
65
74
|
}
|
|
@@ -70,7 +79,9 @@ export class ArgumentLibrary {
|
|
|
70
79
|
* @returns The removed engine.
|
|
71
80
|
* @throws If no engine with the given ID exists.
|
|
72
81
|
*/
|
|
73
|
-
remove(argumentId
|
|
82
|
+
remove(argumentId
|
|
83
|
+
// TODO Phase 7: drop TSource/TAssoc generics from ArgumentEngine.
|
|
84
|
+
) {
|
|
74
85
|
const engine = this.engines.get(argumentId);
|
|
75
86
|
if (engine === undefined) {
|
|
76
87
|
throw new Error(`ArgumentLibrary: argument "${argumentId}" not found.`);
|
|
@@ -106,14 +117,17 @@ export class ArgumentLibrary {
|
|
|
106
117
|
* `ArgumentEngine.fromSnapshot()` for each engine snapshot.
|
|
107
118
|
*
|
|
108
119
|
* @param snapshot - The serialized library snapshot.
|
|
109
|
-
* @param libraries - The shared library instances (claim,
|
|
120
|
+
* @param libraries - The shared library instances (claim, claim-citation).
|
|
110
121
|
* @param options - Optional engine construction options.
|
|
111
122
|
* @returns A fully restored `ArgumentLibrary`.
|
|
112
123
|
*/
|
|
113
124
|
static fromSnapshot(snapshot, libraries, options) {
|
|
114
125
|
const lib = new ArgumentLibrary(libraries, options);
|
|
115
126
|
for (const engineSnap of snapshot.arguments) {
|
|
116
|
-
|
|
127
|
+
// TODO Phase 7: ArgumentEngine.fromSnapshot will take
|
|
128
|
+
// (snapshot, claimLibrary, claimCitationLibrary, ...) once its
|
|
129
|
+
// generics are reduced to drop TSource/TAssoc.
|
|
130
|
+
const engine = ArgumentEngine.fromSnapshot(engineSnap, libraries.claimLibrary, libraries.claimCitationLibrary, undefined, "ignore", options?.generateId);
|
|
117
131
|
lib.engines.set(engine.getArgument().id, engine);
|
|
118
132
|
}
|
|
119
133
|
return lib;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"argument-library.js","sourceRoot":"","sources":["../../../src/lib/core/argument-library.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"argument-library.js","sourceRoot":"","sources":["../../../src/lib/core/argument-library.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import type { TCoreClaimCitation } from "../schemata/claim-citation.js";
|
|
2
|
+
import type { TCoreChecksumConfig } from "../types/checksum.js";
|
|
3
|
+
import type { TClaimLookup, TClaimCitationLibraryManagement, TClaimCitationLibrarySnapshot } from "./interfaces/library.interfaces.js";
|
|
4
|
+
import type { TInvariantValidationResult } from "../types/validation.js";
|
|
5
|
+
export declare class ClaimCitationLibrary<TCitation extends TCoreClaimCitation = TCoreClaimCitation> implements TClaimCitationLibraryManagement<TCitation> {
|
|
6
|
+
private citations;
|
|
7
|
+
private citingClaimToCitations;
|
|
8
|
+
private sourceClaimToCitations;
|
|
9
|
+
private claimLookup;
|
|
10
|
+
private checksumConfig?;
|
|
11
|
+
constructor(claimLookup: TClaimLookup, options?: {
|
|
12
|
+
checksumConfig?: TCoreChecksumConfig;
|
|
13
|
+
});
|
|
14
|
+
private restoreFromSnapshot;
|
|
15
|
+
private withValidation;
|
|
16
|
+
add(citation: Omit<TCitation, "checksum">): TCitation;
|
|
17
|
+
remove(id: string): TCitation;
|
|
18
|
+
getCitationsForCitingClaim(citingClaimId: string): TCitation[];
|
|
19
|
+
getCitationsForSourceClaim(sourceClaimId: string): TCitation[];
|
|
20
|
+
get(id: string): TCitation | undefined;
|
|
21
|
+
getAll(): TCitation[];
|
|
22
|
+
filter(predicate: (c: TCitation) => boolean): TCitation[];
|
|
23
|
+
snapshot(): TClaimCitationLibrarySnapshot<TCitation>;
|
|
24
|
+
/** Restores a claim-citation library from a snapshot, re-indexing all citations. */
|
|
25
|
+
static fromSnapshot<TCitation extends TCoreClaimCitation = TCoreClaimCitation>(snapshot: TClaimCitationLibrarySnapshot<TCitation>, claimLookup: TClaimLookup, options?: {
|
|
26
|
+
checksumConfig?: TCoreChecksumConfig;
|
|
27
|
+
}): ClaimCitationLibrary<TCitation>;
|
|
28
|
+
validate(): TInvariantValidationResult;
|
|
29
|
+
/**
|
|
30
|
+
* Detects all cycles in the ID-only projection of the citation graph.
|
|
31
|
+
* Returns one violation per cycle (deduped by the citation that closes
|
|
32
|
+
* each detected cycle).
|
|
33
|
+
*/
|
|
34
|
+
private detectAllCycles;
|
|
35
|
+
/**
|
|
36
|
+
* Returns true if adding an edge from `citingClaimId` to `sourceClaimId`
|
|
37
|
+
* would create a cycle in the claim-citation graph. Edges go from citing
|
|
38
|
+
* to source; a cycle exists when the citing claim is reachable from the
|
|
39
|
+
* proposed source claim by following outgoing source edges.
|
|
40
|
+
*/
|
|
41
|
+
private wouldCreateCycle;
|
|
42
|
+
private computeChecksum;
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=claim-citation-library.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claim-citation-library.d.ts","sourceRoot":"","sources":["../../../src/lib/core/claim-citation-library.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAA;AAEvE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAA;AAG/D,OAAO,KAAK,EACR,YAAY,EACZ,+BAA+B,EAC/B,6BAA6B,EAChC,MAAM,oCAAoC,CAAA;AAC3C,OAAO,KAAK,EACR,0BAA0B,EAE7B,MAAM,wBAAwB,CAAA;AAW/B,qBAAa,oBAAoB,CAC7B,SAAS,SAAS,kBAAkB,GAAG,kBAAkB,CAC3D,YAAW,+BAA+B,CAAC,SAAS,CAAC;IACnD,OAAO,CAAC,SAAS,CAAwB;IACzC,OAAO,CAAC,sBAAsB,CAA0B;IACxD,OAAO,CAAC,sBAAsB,CAA0B;IACxD,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,cAAc,CAAC,CAAqB;gBAGxC,WAAW,EAAE,YAAY,EACzB,OAAO,CAAC,EAAE;QAAE,cAAc,CAAC,EAAE,mBAAmB,CAAA;KAAE;IAStD,OAAO,CAAC,mBAAmB;IAwB3B,OAAO,CAAC,cAAc;IAkBf,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,GAAG,SAAS;IA4FrD,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS;IA2B7B,0BAA0B,CAAC,aAAa,EAAE,MAAM,GAAG,SAAS,EAAE;IAQ9D,0BAA0B,CAAC,aAAa,EAAE,MAAM,GAAG,SAAS,EAAE;IAQ9D,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS;IAItC,MAAM,IAAI,SAAS,EAAE;IAIrB,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,SAAS,KAAK,OAAO,GAAG,SAAS,EAAE;IAIzD,QAAQ,IAAI,6BAA6B,CAAC,SAAS,CAAC;IAI3D,oFAAoF;WACtE,YAAY,CACtB,SAAS,SAAS,kBAAkB,GAAG,kBAAkB,EAEzD,QAAQ,EAAE,6BAA6B,CAAC,SAAS,CAAC,EAClD,WAAW,EAAE,YAAY,EACzB,OAAO,CAAC,EAAE;QAAE,cAAc,CAAC,EAAE,mBAAmB,CAAA;KAAE,GACnD,oBAAoB,CAAC,SAAS,CAAC;IAgC3B,QAAQ,IAAI,0BAA0B;IAgE7C;;;;OAIG;IACH,OAAO,CAAC,eAAe;IA+CvB;;;;;OAKG;IACH,OAAO,CAAC,gBAAgB;IAgCxB,OAAO,CAAC,eAAe;CAS1B"}
|
|
@@ -0,0 +1,336 @@
|
|
|
1
|
+
import { Value } from "typebox/value";
|
|
2
|
+
import { CoreClaimCitationSchema } from "../schemata/claim-citation.js";
|
|
3
|
+
import { DEFAULT_CHECKSUM_CONFIG } from "../consts.js";
|
|
4
|
+
import { entityChecksum } from "./checksum.js";
|
|
5
|
+
import { CITATION_SCHEMA_INVALID, CITATION_DUPLICATE_ID, CITATION_CITING_REF_NOT_FOUND, CITATION_SOURCE_REF_NOT_FOUND, CITATION_SOURCE_NOT_CITATION_TYPE, CITATION_CYCLE_DETECTED, } from "../types/validation.js";
|
|
6
|
+
import { InvariantViolationError } from "./invariant-violation-error.js";
|
|
7
|
+
export class ClaimCitationLibrary {
|
|
8
|
+
citations;
|
|
9
|
+
citingClaimToCitations;
|
|
10
|
+
sourceClaimToCitations;
|
|
11
|
+
claimLookup;
|
|
12
|
+
checksumConfig;
|
|
13
|
+
constructor(claimLookup, options) {
|
|
14
|
+
this.citations = new Map();
|
|
15
|
+
this.citingClaimToCitations = new Map();
|
|
16
|
+
this.sourceClaimToCitations = new Map();
|
|
17
|
+
this.claimLookup = claimLookup;
|
|
18
|
+
this.checksumConfig = options?.checksumConfig;
|
|
19
|
+
}
|
|
20
|
+
restoreFromSnapshot(snap) {
|
|
21
|
+
this.citations = new Map();
|
|
22
|
+
this.citingClaimToCitations = new Map();
|
|
23
|
+
this.sourceClaimToCitations = new Map();
|
|
24
|
+
for (const citation of snap.claimCitations) {
|
|
25
|
+
this.citations.set(citation.id, citation);
|
|
26
|
+
}
|
|
27
|
+
for (const [id, citation] of this.citations) {
|
|
28
|
+
const citingKey = citation.citingClaimId;
|
|
29
|
+
if (!this.citingClaimToCitations.has(citingKey)) {
|
|
30
|
+
this.citingClaimToCitations.set(citingKey, new Set());
|
|
31
|
+
}
|
|
32
|
+
this.citingClaimToCitations.get(citingKey).add(id);
|
|
33
|
+
const sourceKey = citation.sourceClaimId;
|
|
34
|
+
if (!this.sourceClaimToCitations.has(sourceKey)) {
|
|
35
|
+
this.sourceClaimToCitations.set(sourceKey, new Set());
|
|
36
|
+
}
|
|
37
|
+
this.sourceClaimToCitations.get(sourceKey).add(id);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
withValidation(fn) {
|
|
41
|
+
const snap = this.snapshot();
|
|
42
|
+
try {
|
|
43
|
+
const result = fn();
|
|
44
|
+
const validation = this.validate();
|
|
45
|
+
if (!validation.ok) {
|
|
46
|
+
this.restoreFromSnapshot(snap);
|
|
47
|
+
throw new InvariantViolationError(validation.violations);
|
|
48
|
+
}
|
|
49
|
+
return result;
|
|
50
|
+
}
|
|
51
|
+
catch (e) {
|
|
52
|
+
if (!(e instanceof InvariantViolationError)) {
|
|
53
|
+
this.restoreFromSnapshot(snap);
|
|
54
|
+
}
|
|
55
|
+
throw e;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
add(citation) {
|
|
59
|
+
return this.withValidation(() => {
|
|
60
|
+
if (this.citations.has(citation.id)) {
|
|
61
|
+
throw new InvariantViolationError([
|
|
62
|
+
{
|
|
63
|
+
code: CITATION_DUPLICATE_ID,
|
|
64
|
+
message: `Citation with id ${citation.id} already exists`,
|
|
65
|
+
entityType: "citation",
|
|
66
|
+
entityId: citation.id,
|
|
67
|
+
},
|
|
68
|
+
]);
|
|
69
|
+
}
|
|
70
|
+
const citingClaim = this.claimLookup.get(citation.citingClaimId, citation.citingClaimVersion);
|
|
71
|
+
if (!citingClaim) {
|
|
72
|
+
throw new InvariantViolationError([
|
|
73
|
+
{
|
|
74
|
+
code: CITATION_CITING_REF_NOT_FOUND,
|
|
75
|
+
message: `Citation references unknown citing claim ${citation.citingClaimId}@${citation.citingClaimVersion}`,
|
|
76
|
+
entityType: "citation",
|
|
77
|
+
entityId: citation.id,
|
|
78
|
+
},
|
|
79
|
+
]);
|
|
80
|
+
}
|
|
81
|
+
const sourceClaim = this.claimLookup.get(citation.sourceClaimId, citation.sourceClaimVersion);
|
|
82
|
+
if (!sourceClaim) {
|
|
83
|
+
throw new InvariantViolationError([
|
|
84
|
+
{
|
|
85
|
+
code: CITATION_SOURCE_REF_NOT_FOUND,
|
|
86
|
+
message: `Citation references unknown source claim ${citation.sourceClaimId}@${citation.sourceClaimVersion}`,
|
|
87
|
+
entityType: "citation",
|
|
88
|
+
entityId: citation.id,
|
|
89
|
+
},
|
|
90
|
+
]);
|
|
91
|
+
}
|
|
92
|
+
if (sourceClaim.type !== "citation") {
|
|
93
|
+
throw new InvariantViolationError([
|
|
94
|
+
{
|
|
95
|
+
code: CITATION_SOURCE_NOT_CITATION_TYPE,
|
|
96
|
+
message: `Citation source claim ${citation.sourceClaimId} has type='${sourceClaim.type}'; only 'citation' is permitted on the source side`,
|
|
97
|
+
entityType: "citation",
|
|
98
|
+
entityId: citation.id,
|
|
99
|
+
},
|
|
100
|
+
]);
|
|
101
|
+
}
|
|
102
|
+
if (this.wouldCreateCycle(citation.citingClaimId, citation.sourceClaimId)) {
|
|
103
|
+
throw new InvariantViolationError([
|
|
104
|
+
{
|
|
105
|
+
code: CITATION_CYCLE_DETECTED,
|
|
106
|
+
message: `Adding citation from ${citation.citingClaimId} to ${citation.sourceClaimId} would create a cycle in the claim citation graph`,
|
|
107
|
+
entityType: "citation",
|
|
108
|
+
entityId: citation.id,
|
|
109
|
+
},
|
|
110
|
+
]);
|
|
111
|
+
}
|
|
112
|
+
const full = { ...citation, checksum: "" };
|
|
113
|
+
full.checksum = this.computeChecksum(full);
|
|
114
|
+
this.citations.set(full.id, full);
|
|
115
|
+
let citingSet = this.citingClaimToCitations.get(full.citingClaimId);
|
|
116
|
+
if (!citingSet) {
|
|
117
|
+
citingSet = new Set();
|
|
118
|
+
this.citingClaimToCitations.set(full.citingClaimId, citingSet);
|
|
119
|
+
}
|
|
120
|
+
citingSet.add(full.id);
|
|
121
|
+
let sourceSet = this.sourceClaimToCitations.get(full.sourceClaimId);
|
|
122
|
+
if (!sourceSet) {
|
|
123
|
+
sourceSet = new Set();
|
|
124
|
+
this.sourceClaimToCitations.set(full.sourceClaimId, sourceSet);
|
|
125
|
+
}
|
|
126
|
+
sourceSet.add(full.id);
|
|
127
|
+
return full;
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
remove(id) {
|
|
131
|
+
return this.withValidation(() => {
|
|
132
|
+
const citation = this.citations.get(id);
|
|
133
|
+
if (!citation) {
|
|
134
|
+
throw new Error(`ClaimCitation "${id}" not found.`);
|
|
135
|
+
}
|
|
136
|
+
this.citations.delete(id);
|
|
137
|
+
const citingSet = this.citingClaimToCitations.get(citation.citingClaimId);
|
|
138
|
+
if (citingSet) {
|
|
139
|
+
citingSet.delete(id);
|
|
140
|
+
}
|
|
141
|
+
const sourceSet = this.sourceClaimToCitations.get(citation.sourceClaimId);
|
|
142
|
+
if (sourceSet) {
|
|
143
|
+
sourceSet.delete(id);
|
|
144
|
+
}
|
|
145
|
+
return citation;
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
getCitationsForCitingClaim(citingClaimId) {
|
|
149
|
+
const ids = this.citingClaimToCitations.get(citingClaimId);
|
|
150
|
+
if (!ids)
|
|
151
|
+
return [];
|
|
152
|
+
return Array.from(ids)
|
|
153
|
+
.map((id) => this.citations.get(id))
|
|
154
|
+
.filter(Boolean);
|
|
155
|
+
}
|
|
156
|
+
getCitationsForSourceClaim(sourceClaimId) {
|
|
157
|
+
const ids = this.sourceClaimToCitations.get(sourceClaimId);
|
|
158
|
+
if (!ids)
|
|
159
|
+
return [];
|
|
160
|
+
return Array.from(ids)
|
|
161
|
+
.map((id) => this.citations.get(id))
|
|
162
|
+
.filter(Boolean);
|
|
163
|
+
}
|
|
164
|
+
get(id) {
|
|
165
|
+
return this.citations.get(id);
|
|
166
|
+
}
|
|
167
|
+
getAll() {
|
|
168
|
+
return Array.from(this.citations.values());
|
|
169
|
+
}
|
|
170
|
+
filter(predicate) {
|
|
171
|
+
return this.getAll().filter(predicate);
|
|
172
|
+
}
|
|
173
|
+
snapshot() {
|
|
174
|
+
return { claimCitations: this.getAll() };
|
|
175
|
+
}
|
|
176
|
+
/** Restores a claim-citation library from a snapshot, re-indexing all citations. */
|
|
177
|
+
static fromSnapshot(snapshot, claimLookup, options) {
|
|
178
|
+
const lib = new ClaimCitationLibrary(claimLookup, options);
|
|
179
|
+
for (const citation of snapshot.claimCitations) {
|
|
180
|
+
lib.citations.set(citation.id, citation);
|
|
181
|
+
let citingSet = lib.citingClaimToCitations.get(citation.citingClaimId);
|
|
182
|
+
if (!citingSet) {
|
|
183
|
+
citingSet = new Set();
|
|
184
|
+
lib.citingClaimToCitations.set(citation.citingClaimId, citingSet);
|
|
185
|
+
}
|
|
186
|
+
citingSet.add(citation.id);
|
|
187
|
+
let sourceSet = lib.sourceClaimToCitations.get(citation.sourceClaimId);
|
|
188
|
+
if (!sourceSet) {
|
|
189
|
+
sourceSet = new Set();
|
|
190
|
+
lib.sourceClaimToCitations.set(citation.sourceClaimId, sourceSet);
|
|
191
|
+
}
|
|
192
|
+
sourceSet.add(citation.id);
|
|
193
|
+
}
|
|
194
|
+
return lib;
|
|
195
|
+
}
|
|
196
|
+
validate() {
|
|
197
|
+
const violations = [];
|
|
198
|
+
for (const [id, citation] of this.citations) {
|
|
199
|
+
if (!Value.Check(CoreClaimCitationSchema, citation)) {
|
|
200
|
+
violations.push({
|
|
201
|
+
code: CITATION_SCHEMA_INVALID,
|
|
202
|
+
message: `Citation "${id}" does not conform to schema`,
|
|
203
|
+
entityType: "citation",
|
|
204
|
+
entityId: id,
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
if (!this.claimLookup.get(citation.citingClaimId, citation.citingClaimVersion)) {
|
|
208
|
+
violations.push({
|
|
209
|
+
code: CITATION_CITING_REF_NOT_FOUND,
|
|
210
|
+
message: `Citation "${id}" references non-existent citing claim "${citation.citingClaimId}" version ${citation.citingClaimVersion}`,
|
|
211
|
+
entityType: "citation",
|
|
212
|
+
entityId: id,
|
|
213
|
+
});
|
|
214
|
+
}
|
|
215
|
+
if (!this.claimLookup.get(citation.sourceClaimId, citation.sourceClaimVersion)) {
|
|
216
|
+
violations.push({
|
|
217
|
+
code: CITATION_SOURCE_REF_NOT_FOUND,
|
|
218
|
+
message: `Citation "${id}" references non-existent source claim "${citation.sourceClaimId}" version ${citation.sourceClaimVersion}`,
|
|
219
|
+
entityType: "citation",
|
|
220
|
+
entityId: id,
|
|
221
|
+
});
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
// Strict source-side type: every citation's source claim must have
|
|
225
|
+
// type='citation'. Catches tampered snapshots loaded via fromSnapshot.
|
|
226
|
+
for (const citation of this.citations.values()) {
|
|
227
|
+
const sourceClaim = this.claimLookup.get(citation.sourceClaimId, citation.sourceClaimVersion);
|
|
228
|
+
if (sourceClaim && sourceClaim.type !== "citation") {
|
|
229
|
+
violations.push({
|
|
230
|
+
code: CITATION_SOURCE_NOT_CITATION_TYPE,
|
|
231
|
+
message: `Citation ${citation.id} source claim ${citation.sourceClaimId} has type='${sourceClaim.type}'; only 'citation' is permitted on the source side`,
|
|
232
|
+
entityType: "citation",
|
|
233
|
+
entityId: citation.id,
|
|
234
|
+
});
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
// Acyclicity: walk the entire citation graph (ID-only) and detect
|
|
238
|
+
// cycles. Catches cycles introduced by snapshot tampering.
|
|
239
|
+
const cycleViolations = this.detectAllCycles();
|
|
240
|
+
for (const v of cycleViolations)
|
|
241
|
+
violations.push(v);
|
|
242
|
+
return { ok: violations.length === 0, violations };
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* Detects all cycles in the ID-only projection of the citation graph.
|
|
246
|
+
* Returns one violation per cycle (deduped by the citation that closes
|
|
247
|
+
* each detected cycle).
|
|
248
|
+
*/
|
|
249
|
+
detectAllCycles() {
|
|
250
|
+
const violations = [];
|
|
251
|
+
const visited = new Set();
|
|
252
|
+
const inProgress = new Set();
|
|
253
|
+
const reportedCycleIds = new Set();
|
|
254
|
+
const visit = (node, path) => {
|
|
255
|
+
if (inProgress.has(node)) {
|
|
256
|
+
// Cycle detected: report the citation that closes it.
|
|
257
|
+
// Find the citation linking the previous node to this one.
|
|
258
|
+
const prev = path[path.length - 1];
|
|
259
|
+
for (const citation of this.citations.values()) {
|
|
260
|
+
if (citation.citingClaimId === prev &&
|
|
261
|
+
citation.sourceClaimId === node &&
|
|
262
|
+
!reportedCycleIds.has(citation.id)) {
|
|
263
|
+
violations.push({
|
|
264
|
+
code: CITATION_CYCLE_DETECTED,
|
|
265
|
+
message: `Citation graph contains a cycle involving claim ${node}`,
|
|
266
|
+
entityType: "citation",
|
|
267
|
+
entityId: citation.id,
|
|
268
|
+
});
|
|
269
|
+
reportedCycleIds.add(citation.id);
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
return;
|
|
273
|
+
}
|
|
274
|
+
if (visited.has(node))
|
|
275
|
+
return;
|
|
276
|
+
visited.add(node);
|
|
277
|
+
inProgress.add(node);
|
|
278
|
+
const outgoing = this.citingClaimToCitations.get(node);
|
|
279
|
+
if (outgoing) {
|
|
280
|
+
for (const cid of outgoing) {
|
|
281
|
+
const c = this.citations.get(cid);
|
|
282
|
+
if (c)
|
|
283
|
+
visit(c.sourceClaimId, [...path, node]);
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
inProgress.delete(node);
|
|
287
|
+
};
|
|
288
|
+
for (const node of this.citingClaimToCitations.keys()) {
|
|
289
|
+
if (!visited.has(node))
|
|
290
|
+
visit(node, []);
|
|
291
|
+
}
|
|
292
|
+
return violations;
|
|
293
|
+
}
|
|
294
|
+
/**
|
|
295
|
+
* Returns true if adding an edge from `citingClaimId` to `sourceClaimId`
|
|
296
|
+
* would create a cycle in the claim-citation graph. Edges go from citing
|
|
297
|
+
* to source; a cycle exists when the citing claim is reachable from the
|
|
298
|
+
* proposed source claim by following outgoing source edges.
|
|
299
|
+
*/
|
|
300
|
+
wouldCreateCycle(citingClaimId, sourceClaimId) {
|
|
301
|
+
// Optimization: if citing-side has type "normal", it can never appear
|
|
302
|
+
// on the source side, so no cycle is reachable. Type is immutable
|
|
303
|
+
// post-creation, so v0's type is authoritative.
|
|
304
|
+
const citingClaimType = this.claimLookup.get(citingClaimId, 0)?.type;
|
|
305
|
+
if (citingClaimType === "normal")
|
|
306
|
+
return false;
|
|
307
|
+
// DFS from sourceClaimId following outgoing source edges via the
|
|
308
|
+
// citingClaimToCitations index (avoids scanning all citations).
|
|
309
|
+
const visited = new Set();
|
|
310
|
+
const stack = [sourceClaimId];
|
|
311
|
+
while (stack.length > 0) {
|
|
312
|
+
const node = stack.pop();
|
|
313
|
+
if (node === citingClaimId)
|
|
314
|
+
return true;
|
|
315
|
+
if (visited.has(node))
|
|
316
|
+
continue;
|
|
317
|
+
visited.add(node);
|
|
318
|
+
const outgoingIds = this.citingClaimToCitations.get(node);
|
|
319
|
+
if (outgoingIds) {
|
|
320
|
+
for (const cid of outgoingIds) {
|
|
321
|
+
const c = this.citations.get(cid);
|
|
322
|
+
if (c) {
|
|
323
|
+
stack.push(c.sourceClaimId);
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
return false;
|
|
329
|
+
}
|
|
330
|
+
computeChecksum(citation) {
|
|
331
|
+
const fields = this.checksumConfig?.claimCitationFields ??
|
|
332
|
+
DEFAULT_CHECKSUM_CONFIG.claimCitationFields;
|
|
333
|
+
return entityChecksum(citation, fields);
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
//# sourceMappingURL=claim-citation-library.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claim-citation-library.js","sourceRoot":"","sources":["../../../src/lib/core/claim-citation-library.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,15 @@ import type { TCoreClaim } from "../schemata/claim.js";
|
|
|
2
2
|
import type { TCoreChecksumConfig } from "../types/checksum.js";
|
|
3
3
|
import type { TClaimLibraryManagement, TClaimLibrarySnapshot } from "./interfaces/library.interfaces.js";
|
|
4
4
|
import { VersionedLibrary } from "./versioned-library.js";
|
|
5
|
+
/**
|
|
6
|
+
* Input shape for {@link ClaimLibrary.create}. The `type` field is required
|
|
7
|
+
* (and immutable thereafter); `id` is auto-generated when omitted. Other
|
|
8
|
+
* extension fields on `TClaim` are passed through as-is, matching the base
|
|
9
|
+
* {@link VersionedLibrary.create} contract.
|
|
10
|
+
*/
|
|
11
|
+
export type TClaimCreateInput<TClaim extends TCoreClaim = TCoreClaim> = Omit<TClaim, "version" | "frozen" | "checksum"> | (Omit<TClaim, "id" | "version" | "frozen" | "checksum"> & {
|
|
12
|
+
id?: string;
|
|
13
|
+
});
|
|
5
14
|
export declare class ClaimLibrary<TClaim extends TCoreClaim = TCoreClaim> extends VersionedLibrary<TClaim> implements TClaimLibraryManagement<TClaim> {
|
|
6
15
|
protected readonly entityLabel = "Claim";
|
|
7
16
|
protected readonly entityType: "claim";
|
|
@@ -10,14 +19,37 @@ export declare class ClaimLibrary<TClaim extends TCoreClaim = TCoreClaim> extend
|
|
|
10
19
|
version: import("typebox").TNumber;
|
|
11
20
|
frozen: import("typebox").TBoolean;
|
|
12
21
|
checksum: import("typebox").TString;
|
|
22
|
+
type: import("typebox").TUnion<[import("typebox").TLiteral<"normal">, import("typebox").TLiteral<"citation">]>;
|
|
13
23
|
}>;
|
|
14
24
|
protected readonly checksumFieldsKey: "claimFields";
|
|
15
25
|
protected readonly schemaInvalidCode = "CLAIM_SCHEMA_INVALID";
|
|
16
26
|
protected readonly frozenSuccessorCode = "CLAIM_FROZEN_NO_SUCCESSOR";
|
|
27
|
+
private readonly generateId;
|
|
28
|
+
constructor(options?: {
|
|
29
|
+
checksumConfig?: TCoreChecksumConfig;
|
|
30
|
+
generateId?: () => string;
|
|
31
|
+
});
|
|
32
|
+
/**
|
|
33
|
+
* Creates a new claim at version 0. The `type` field is required and is
|
|
34
|
+
* immutable across the claim's lifetime. `id` is auto-generated when omitted.
|
|
35
|
+
*/
|
|
36
|
+
create(input: TClaimCreateInput<TClaim>): TClaim;
|
|
37
|
+
/**
|
|
38
|
+
* Applies partial updates to the latest version of a claim. Rejects any
|
|
39
|
+
* update that would change the immutable `type` field.
|
|
40
|
+
*/
|
|
41
|
+
update(id: string, updates: Partial<Omit<TClaim, "id" | "version" | "frozen" | "checksum">>): TClaim;
|
|
17
42
|
snapshot(): TClaimLibrarySnapshot<TClaim>;
|
|
18
|
-
/**
|
|
43
|
+
/**
|
|
44
|
+
* Restores a claim library from a previously captured snapshot.
|
|
45
|
+
* Pre-screens for legacy (pre-v0.10.0) claim entries that lack the
|
|
46
|
+
* required `type` field and emits {@link LEGACY_CLAIM_MISSING_TYPE} so
|
|
47
|
+
* the caller gets a clear migration signal rather than a generic schema
|
|
48
|
+
* error.
|
|
49
|
+
*/
|
|
19
50
|
static fromSnapshot<TClaim extends TCoreClaim = TCoreClaim>(snapshot: TClaimLibrarySnapshot<TClaim>, options?: {
|
|
20
51
|
checksumConfig?: TCoreChecksumConfig;
|
|
52
|
+
generateId?: () => string;
|
|
21
53
|
}): ClaimLibrary<TClaim>;
|
|
22
54
|
}
|
|
23
55
|
//# sourceMappingURL=claim-library.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claim-library.d.ts","sourceRoot":"","sources":["../../../src/lib/core/claim-library.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAEtD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAA;AAC/D,OAAO,KAAK,EACR,uBAAuB,EACvB,qBAAqB,EACxB,MAAM,oCAAoC,CAAA;
|
|
1
|
+
{"version":3,"file":"claim-library.d.ts","sourceRoot":"","sources":["../../../src/lib/core/claim-library.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAEtD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAA;AAC/D,OAAO,KAAK,EACR,uBAAuB,EACvB,qBAAqB,EACxB,MAAM,oCAAoC,CAAA;AAS3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAEzD;;;;;GAKG;AACH,MAAM,MAAM,iBAAiB,CAAC,MAAM,SAAS,UAAU,GAAG,UAAU,IAC9D,IAAI,CAAC,MAAM,EAAE,SAAS,GAAG,QAAQ,GAAG,UAAU,CAAC,GAC/C,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,GAAG,SAAS,GAAG,QAAQ,GAAG,UAAU,CAAC,GAAG;IAAE,EAAE,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAAA;AAEhF,qBAAa,YAAY,CAAC,MAAM,SAAS,UAAU,GAAG,UAAU,CAC5D,SAAQ,gBAAgB,CAAC,MAAM,CAC/B,YAAW,uBAAuB,CAAC,MAAM,CAAC;IAE1C,SAAS,CAAC,QAAQ,CAAC,WAAW,WAAU;IACxC,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAG,OAAO,CAAS;IAChD,SAAS,CAAC,QAAQ,CAAC,MAAM;;;;;;OAAkB;IAC3C,SAAS,CAAC,QAAQ,CAAC,iBAAiB,EAAG,aAAa,CAAS;IAC7D,SAAS,CAAC,QAAQ,CAAC,iBAAiB,0BAAuB;IAC3D,SAAS,CAAC,QAAQ,CAAC,mBAAmB,+BAA4B;IAElE,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAc;gBAE7B,OAAO,CAAC,EAAE;QAClB,cAAc,CAAC,EAAE,mBAAmB,CAAA;QACpC,UAAU,CAAC,EAAE,MAAM,MAAM,CAAA;KAC5B;IAKD;;;OAGG;IACa,MAAM,CAAC,KAAK,EAAE,iBAAiB,CAAC,MAAM,CAAC,GAAG,MAAM;IAUhE;;;OAGG;IACa,MAAM,CAClB,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,GAAG,SAAS,GAAG,QAAQ,GAAG,UAAU,CAAC,CAAC,GACzE,MAAM;IAmBF,QAAQ,IAAI,qBAAqB,CAAC,MAAM,CAAC;IAIhD;;;;;;OAMG;WACW,YAAY,CAAC,MAAM,SAAS,UAAU,GAAG,UAAU,EAC7D,QAAQ,EAAE,qBAAqB,CAAC,MAAM,CAAC,EACvC,OAAO,CAAC,EAAE;QACN,cAAc,CAAC,EAAE,mBAAmB,CAAA;QACpC,UAAU,CAAC,EAAE,MAAM,MAAM,CAAA;KAC5B,GACF,YAAY,CAAC,MAAM,CAAC;CA8B1B"}
|