@lapidist/dtif-parser 0.5.0 → 1.0.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/CHANGELOG.md +56 -0
- package/README.md +24 -6
- package/dist/adapters/domain/diagnostics.d.ts +7 -0
- package/dist/adapters/domain/diagnostics.d.ts.map +1 -0
- package/dist/adapters/domain/diagnostics.js +30 -0
- package/dist/adapters/domain/diagnostics.js.map +1 -0
- package/dist/adapters/domain/document-source.d.ts +12 -0
- package/dist/adapters/domain/document-source.d.ts.map +1 -0
- package/dist/adapters/domain/document-source.js +96 -0
- package/dist/adapters/domain/document-source.js.map +1 -0
- package/dist/adapters/domain/index.d.ts +8 -0
- package/dist/adapters/domain/index.d.ts.map +1 -0
- package/dist/adapters/domain/index.js +5 -0
- package/dist/adapters/domain/index.js.map +1 -0
- package/dist/adapters/domain/plugins.d.ts +20 -0
- package/dist/adapters/domain/plugins.d.ts.map +1 -0
- package/dist/adapters/domain/plugins.js +99 -0
- package/dist/adapters/domain/plugins.js.map +1 -0
- package/dist/adapters/domain/services.d.ts +82 -0
- package/dist/adapters/domain/services.d.ts.map +1 -0
- package/dist/adapters/domain/services.js +368 -0
- package/dist/adapters/domain/services.js.map +1 -0
- package/dist/adapters/node/token-parser.d.ts +7 -6
- package/dist/adapters/node/token-parser.d.ts.map +1 -1
- package/dist/adapters/node/token-parser.js +4 -4
- package/dist/adapters/node/token-parser.js.map +1 -1
- package/dist/application/factory.d.ts +14 -0
- package/dist/application/factory.d.ts.map +1 -0
- package/dist/application/factory.js +81 -0
- package/dist/application/factory.js.map +1 -0
- package/dist/application/index.d.ts +6 -0
- package/dist/application/index.d.ts.map +1 -0
- package/dist/application/index.js +4 -0
- package/dist/application/index.js.map +1 -0
- package/dist/application/inline.d.ts +6 -0
- package/dist/application/inline.d.ts.map +1 -0
- package/dist/application/inline.js +82 -0
- package/dist/application/inline.js.map +1 -0
- package/dist/application/requests.d.ts +12 -0
- package/dist/application/requests.d.ts.map +1 -0
- package/dist/application/requests.js +82 -0
- package/dist/application/requests.js.map +1 -0
- package/dist/application/use-cases.d.ts +61 -0
- package/dist/application/use-cases.d.ts.map +1 -0
- package/dist/application/use-cases.js +545 -0
- package/dist/application/use-cases.js.map +1 -0
- package/dist/ast/normaliser/context.d.ts +7 -6
- package/dist/ast/normaliser/context.d.ts.map +1 -1
- package/dist/ast/normaliser/context.js +1 -1
- package/dist/ast/normaliser/context.js.map +1 -1
- package/dist/ast/normaliser/document.js +1 -1
- package/dist/ast/normaliser/document.js.map +1 -1
- package/dist/ast/normaliser.d.ts +2 -2
- package/dist/ast/normaliser.d.ts.map +1 -1
- package/dist/ast/normaliser.js.map +1 -1
- package/dist/cli/parse.d.ts.map +1 -1
- package/dist/cli/parse.js +29 -12
- package/dist/cli/parse.js.map +1 -1
- package/dist/cli/serialize.d.ts +3 -4
- package/dist/cli/serialize.d.ts.map +1 -1
- package/dist/cli/serialize.js +19 -5
- package/dist/cli/serialize.js.map +1 -1
- package/dist/diagnostics/format.d.ts +7 -0
- package/dist/diagnostics/format.d.ts.map +1 -0
- package/dist/diagnostics/format.js +94 -0
- package/dist/diagnostics/format.js.map +1 -0
- package/dist/domain/index.d.ts +5 -0
- package/dist/domain/index.d.ts.map +1 -0
- package/dist/domain/index.js +5 -0
- package/dist/domain/index.js.map +1 -0
- package/dist/domain/models.d.ts +88 -0
- package/dist/domain/models.d.ts.map +1 -0
- package/dist/domain/models.js +2 -0
- package/dist/domain/models.js.map +1 -0
- package/dist/domain/ports.d.ts +69 -0
- package/dist/domain/ports.d.ts.map +1 -0
- package/dist/domain/ports.js +2 -0
- package/dist/domain/ports.js.map +1 -0
- package/dist/domain/primitives.d.ts +17 -0
- package/dist/domain/primitives.d.ts.map +1 -0
- package/dist/domain/primitives.js +2 -0
- package/dist/domain/primitives.js.map +1 -0
- package/dist/domain/services.d.ts +35 -0
- package/dist/domain/services.d.ts.map +1 -0
- package/dist/domain/services.js +2 -0
- package/dist/domain/services.js.map +1 -0
- package/dist/index.d.ts +10 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -3
- package/dist/index.js.map +1 -1
- package/dist/io/decoder.d.ts +3 -2
- package/dist/io/decoder.d.ts.map +1 -1
- package/dist/io/decoder.js +14 -8
- package/dist/io/decoder.js.map +1 -1
- package/dist/io/document-cache.d.ts +3 -2
- package/dist/io/document-cache.d.ts.map +1 -1
- package/dist/io/document-cache.js +8 -5
- package/dist/io/document-cache.js.map +1 -1
- package/dist/plugins/registry.d.ts +3 -2
- package/dist/plugins/registry.d.ts.map +1 -1
- package/dist/plugins/registry.js.map +1 -1
- package/dist/plugins/types.d.ts +8 -8
- package/dist/plugins/types.d.ts.map +1 -1
- package/dist/resolver/document-resolver.d.ts +1 -1
- package/dist/resolver/document-resolver.d.ts.map +1 -1
- package/dist/resolver/document-resolver.js +22 -30
- package/dist/resolver/document-resolver.js.map +1 -1
- package/dist/resolver/internal/constants.d.ts +3 -3
- package/dist/resolver/internal/constants.d.ts.map +1 -1
- package/dist/resolver/internal/constants.js.map +1 -1
- package/dist/resolver/internal/context.d.ts +1 -1
- package/dist/resolver/internal/context.d.ts.map +1 -1
- package/dist/resolver/internal/diagnostics.d.ts +8 -0
- package/dist/resolver/internal/diagnostics.d.ts.map +1 -0
- package/dist/resolver/internal/diagnostics.js +21 -0
- package/dist/resolver/internal/diagnostics.js.map +1 -0
- package/dist/resolver/internal/helpers.d.ts +7 -6
- package/dist/resolver/internal/helpers.d.ts.map +1 -1
- package/dist/resolver/internal/helpers.js.map +1 -1
- package/dist/resolver/internal/resolved-token.d.ts +4 -3
- package/dist/resolver/internal/resolved-token.d.ts.map +1 -1
- package/dist/resolver/internal/resolved-token.js.map +1 -1
- package/dist/resolver/types.d.ts +6 -5
- package/dist/resolver/types.d.ts.map +1 -1
- package/dist/session/internal/options.d.ts +2 -2
- package/dist/session/internal/options.d.ts.map +1 -1
- package/dist/session/internal/options.js +1 -1
- package/dist/session/internal/options.js.map +1 -1
- package/dist/session/types.d.ts +2 -2
- package/dist/session/types.d.ts.map +1 -1
- package/dist/session.d.ts +13 -8
- package/dist/session.d.ts.map +1 -1
- package/dist/session.js +12 -167
- package/dist/session.js.map +1 -1
- package/dist/tokens/cache.d.ts +24 -20
- package/dist/tokens/cache.d.ts.map +1 -1
- package/dist/tokens/cache.js +25 -24
- package/dist/tokens/cache.js.map +1 -1
- package/dist/tokens/inputs.d.ts +16 -0
- package/dist/tokens/inputs.d.ts.map +1 -0
- package/dist/tokens/inputs.js +180 -0
- package/dist/tokens/inputs.js.map +1 -0
- package/dist/tokens/parse-tokens.d.ts +12 -15
- package/dist/tokens/parse-tokens.d.ts.map +1 -1
- package/dist/tokens/parse-tokens.js +57 -444
- package/dist/tokens/parse-tokens.js.map +1 -1
- package/dist/tokens/snapshots.d.ts +2 -2
- package/dist/tokens/snapshots.d.ts.map +1 -1
- package/dist/tokens/snapshots.js.map +1 -1
- package/dist/tokens/types.d.ts +1 -34
- package/dist/tokens/types.d.ts.map +1 -1
- package/dist/types.d.ts +13 -58
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/bytes.d.ts +2 -0
- package/dist/utils/bytes.d.ts.map +1 -0
- package/dist/utils/bytes.js +15 -0
- package/dist/utils/bytes.js.map +1 -0
- package/dist/validation/schema-guard.d.ts +3 -3
- package/dist/validation/schema-guard.d.ts.map +1 -1
- package/dist/validation/schema-guard.js +1 -1
- package/dist/validation/schema-guard.js.map +1 -1
- package/package.json +3 -3
- package/dist/diagnostics/bag.d.ts +0 -26
- package/dist/diagnostics/bag.d.ts.map +0 -1
- package/dist/diagnostics/bag.js +0 -106
- package/dist/diagnostics/bag.js.map +0 -1
- package/dist/tokens/diagnostics.d.ts +0 -5
- package/dist/tokens/diagnostics.d.ts.map +0 -1
- package/dist/tokens/diagnostics.js +0 -124
- package/dist/tokens/diagnostics.js.map +0 -1
package/dist/session.js
CHANGED
|
@@ -1,11 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { DiagnosticBag } from './diagnostics/bag.js';
|
|
3
|
-
import { DiagnosticCodes } from './diagnostics/codes.js';
|
|
4
|
-
import { buildDocumentGraph } from './graph/builder.js';
|
|
5
|
-
import { DocumentLoaderError } from './io/document-loader.js';
|
|
6
|
-
import { decodeDocument } from './io/decoder.js';
|
|
7
|
-
import { createDocumentResolver } from './resolver/index.js';
|
|
1
|
+
import { ParseDocumentUseCase } from './application/use-cases.js';
|
|
8
2
|
import { resolveOptions } from './session/internal/options.js';
|
|
3
|
+
import { createParseDocumentUseCase } from './application/factory.js';
|
|
4
|
+
import { createDocumentRequest } from './application/requests.js';
|
|
9
5
|
function isAsyncIterable(value) {
|
|
10
6
|
const root = value;
|
|
11
7
|
let current = root;
|
|
@@ -44,182 +40,31 @@ async function* toAsyncIterable(inputs) {
|
|
|
44
40
|
}
|
|
45
41
|
export class ParseSession {
|
|
46
42
|
options;
|
|
43
|
+
#documents;
|
|
47
44
|
constructor(options = {}) {
|
|
48
45
|
this.options = resolveOptions(options);
|
|
46
|
+
this.#documents = createParseDocumentUseCase(this.options);
|
|
49
47
|
}
|
|
50
48
|
async parseDocument(input) {
|
|
51
|
-
const
|
|
52
|
-
const
|
|
53
|
-
|
|
54
|
-
return { diagnostics };
|
|
55
|
-
}
|
|
56
|
-
const cachedDocument = await this.getCachedDocument(handle, diagnostics);
|
|
57
|
-
const document = cachedDocument ?? (await this.decodeDocumentHandle(handle, diagnostics));
|
|
58
|
-
if (!document) {
|
|
59
|
-
return { diagnostics };
|
|
60
|
-
}
|
|
61
|
-
if (!cachedDocument) {
|
|
62
|
-
await this.storeDocumentInCache(document, diagnostics);
|
|
63
|
-
}
|
|
64
|
-
const schemaValid = this.validateDocumentSchema(document, diagnostics);
|
|
65
|
-
if (!schemaValid) {
|
|
66
|
-
return {
|
|
67
|
-
document,
|
|
68
|
-
diagnostics
|
|
69
|
-
};
|
|
70
|
-
}
|
|
71
|
-
const normalised = normalizeDocument(document, {
|
|
72
|
-
extensions: this.options.plugins
|
|
73
|
-
});
|
|
74
|
-
diagnostics.addMany(normalised.diagnostics);
|
|
75
|
-
if (!normalised.ast) {
|
|
76
|
-
return {
|
|
77
|
-
document,
|
|
78
|
-
extensions: normalised.extensions,
|
|
79
|
-
diagnostics
|
|
80
|
-
};
|
|
81
|
-
}
|
|
82
|
-
const graphResult = buildDocumentGraph(normalised.ast);
|
|
83
|
-
diagnostics.addMany(graphResult.diagnostics);
|
|
84
|
-
const graph = graphResult.graph;
|
|
85
|
-
const resolver = graph &&
|
|
86
|
-
createDocumentResolver(graph, {
|
|
87
|
-
context: this.options.overrideContext,
|
|
88
|
-
maxDepth: this.options.maxDepth,
|
|
89
|
-
document,
|
|
90
|
-
transforms: this.options.plugins?.transforms
|
|
91
|
-
});
|
|
92
|
-
return {
|
|
93
|
-
document,
|
|
94
|
-
ast: normalised.ast,
|
|
95
|
-
graph,
|
|
96
|
-
resolver,
|
|
97
|
-
extensions: normalised.extensions,
|
|
98
|
-
diagnostics
|
|
99
|
-
};
|
|
49
|
+
const request = createDocumentRequest(input);
|
|
50
|
+
const execution = await this.#documents.execute({ request });
|
|
51
|
+
return execution;
|
|
100
52
|
}
|
|
101
53
|
async parseCollection(inputs) {
|
|
102
54
|
const results = [];
|
|
103
|
-
const diagnostics =
|
|
55
|
+
const diagnostics = [];
|
|
104
56
|
for await (const input of toAsyncIterable(inputs)) {
|
|
105
57
|
const result = await this.parseDocument(input);
|
|
106
58
|
results.push(result);
|
|
107
|
-
|
|
59
|
+
if (result.diagnostics.length > 0) {
|
|
60
|
+
diagnostics.push(...result.diagnostics);
|
|
61
|
+
}
|
|
108
62
|
}
|
|
109
63
|
return {
|
|
110
64
|
results,
|
|
111
65
|
diagnostics
|
|
112
66
|
};
|
|
113
67
|
}
|
|
114
|
-
async loadDocumentHandle(input, diagnostics) {
|
|
115
|
-
try {
|
|
116
|
-
return await this.options.loader.load(input);
|
|
117
|
-
}
|
|
118
|
-
catch (error) {
|
|
119
|
-
if (error instanceof DocumentLoaderError) {
|
|
120
|
-
diagnostics.add({
|
|
121
|
-
code: DiagnosticCodes.loader.TOO_LARGE,
|
|
122
|
-
message: error.message,
|
|
123
|
-
severity: 'error'
|
|
124
|
-
});
|
|
125
|
-
}
|
|
126
|
-
else {
|
|
127
|
-
diagnostics.add({
|
|
128
|
-
code: DiagnosticCodes.loader.FAILED,
|
|
129
|
-
message: error instanceof Error ? error.message : 'Failed to load DTIF document.',
|
|
130
|
-
severity: 'error'
|
|
131
|
-
});
|
|
132
|
-
}
|
|
133
|
-
return undefined;
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
async decodeDocumentHandle(handle, diagnostics) {
|
|
137
|
-
try {
|
|
138
|
-
return await decodeDocument(handle);
|
|
139
|
-
}
|
|
140
|
-
catch (error) {
|
|
141
|
-
diagnostics.add({
|
|
142
|
-
code: DiagnosticCodes.decoder.FAILED,
|
|
143
|
-
message: error instanceof Error ? error.message : 'Failed to decode DTIF document.',
|
|
144
|
-
severity: 'error'
|
|
145
|
-
});
|
|
146
|
-
return undefined;
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
validateDocumentSchema(document, diagnostics) {
|
|
150
|
-
try {
|
|
151
|
-
const result = this.options.schemaGuard.validate(document);
|
|
152
|
-
if (!result.valid) {
|
|
153
|
-
diagnostics.addMany(result.diagnostics);
|
|
154
|
-
}
|
|
155
|
-
return result.valid;
|
|
156
|
-
}
|
|
157
|
-
catch (error) {
|
|
158
|
-
diagnostics.add({
|
|
159
|
-
code: DiagnosticCodes.schemaGuard.FAILED,
|
|
160
|
-
message: error instanceof Error
|
|
161
|
-
? error.message
|
|
162
|
-
: 'Failed to validate DTIF document against the schema.',
|
|
163
|
-
severity: 'error'
|
|
164
|
-
});
|
|
165
|
-
return false;
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
async getCachedDocument(handle, diagnostics) {
|
|
169
|
-
const cache = this.options.cache;
|
|
170
|
-
if (!cache) {
|
|
171
|
-
return undefined;
|
|
172
|
-
}
|
|
173
|
-
try {
|
|
174
|
-
const cached = await cache.get(handle.uri);
|
|
175
|
-
if (!cached) {
|
|
176
|
-
return undefined;
|
|
177
|
-
}
|
|
178
|
-
return areByteArraysEqual(cached.bytes, handle.bytes) ? cached : undefined;
|
|
179
|
-
}
|
|
180
|
-
catch (error) {
|
|
181
|
-
diagnostics.add({
|
|
182
|
-
code: DiagnosticCodes.core.CACHE_FAILED,
|
|
183
|
-
message: error instanceof Error
|
|
184
|
-
? `Failed to read DTIF document from cache: ${error.message}`
|
|
185
|
-
: 'Failed to read DTIF document from cache.',
|
|
186
|
-
severity: 'warning'
|
|
187
|
-
});
|
|
188
|
-
return undefined;
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
async storeDocumentInCache(document, diagnostics) {
|
|
192
|
-
const cache = this.options.cache;
|
|
193
|
-
if (!cache) {
|
|
194
|
-
return;
|
|
195
|
-
}
|
|
196
|
-
try {
|
|
197
|
-
await cache.set(document);
|
|
198
|
-
}
|
|
199
|
-
catch (error) {
|
|
200
|
-
diagnostics.add({
|
|
201
|
-
code: DiagnosticCodes.core.CACHE_FAILED,
|
|
202
|
-
message: error instanceof Error
|
|
203
|
-
? `Failed to update DTIF document cache: ${error.message}`
|
|
204
|
-
: 'Failed to update DTIF document cache.',
|
|
205
|
-
severity: 'warning'
|
|
206
|
-
});
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
|
-
}
|
|
210
|
-
function areByteArraysEqual(left, right) {
|
|
211
|
-
if (left === right) {
|
|
212
|
-
return true;
|
|
213
|
-
}
|
|
214
|
-
if (left.byteLength !== right.byteLength) {
|
|
215
|
-
return false;
|
|
216
|
-
}
|
|
217
|
-
for (let index = 0; index < left.byteLength; index++) {
|
|
218
|
-
if (left[index] !== right[index]) {
|
|
219
|
-
return false;
|
|
220
|
-
}
|
|
221
|
-
}
|
|
222
|
-
return true;
|
|
223
68
|
}
|
|
224
69
|
export function createSession(options = {}) {
|
|
225
70
|
return new ParseSession(options);
|
package/dist/session.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.js","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"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"}
|
package/dist/tokens/cache.d.ts
CHANGED
|
@@ -1,38 +1,42 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import type { DtifFlattenedToken, ResolvedTokenView, TokenDiagnostic, TokenId, TokenMetadataSnapshot } from './types.js';
|
|
1
|
+
import type { DtifFlattenedToken, ResolvedTokenView, TokenId, TokenMetadataSnapshot } from './types.js';
|
|
3
2
|
import type { RawDocument } from '../types.js';
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
export interface
|
|
3
|
+
import type { TokenCachePort, TokenCacheKey as DomainTokenCacheKey } from '../domain/ports.js';
|
|
4
|
+
import type { RawDocumentIdentity } from '../domain/models.js';
|
|
5
|
+
import type { DiagnosticEvent } from '../domain/models.js';
|
|
6
|
+
export type TokenCacheKey = DomainTokenCacheKey;
|
|
7
|
+
export interface TokenCacheVariantOptions {
|
|
9
8
|
readonly flatten: boolean;
|
|
10
9
|
readonly includeGraphs: boolean;
|
|
11
10
|
}
|
|
12
|
-
export type
|
|
13
|
-
export interface
|
|
11
|
+
export type TokenCacheVariantOverrides = Partial<TokenCacheVariantOptions>;
|
|
12
|
+
export interface TokenCacheSnapshot {
|
|
14
13
|
readonly documentHash: string;
|
|
15
14
|
readonly flattened?: readonly DtifFlattenedToken[];
|
|
16
15
|
readonly metadataIndex?: ReadonlyMap<TokenId, TokenMetadataSnapshot>;
|
|
17
16
|
readonly resolutionIndex?: ReadonlyMap<TokenId, ResolvedTokenView>;
|
|
18
|
-
readonly diagnostics?: readonly
|
|
17
|
+
readonly diagnostics?: readonly DiagnosticEvent[];
|
|
19
18
|
readonly timestamp: number;
|
|
20
19
|
}
|
|
21
|
-
export interface
|
|
22
|
-
|
|
23
|
-
|
|
20
|
+
export interface TokenCacheConfiguration {
|
|
21
|
+
readonly resolutionDepth: number;
|
|
22
|
+
readonly overrideContext?: ReadonlyMap<string, unknown>;
|
|
23
|
+
readonly transformSignature?: string;
|
|
24
|
+
readonly variantSignature?: string;
|
|
24
25
|
}
|
|
25
|
-
export
|
|
26
|
+
export type TokenCache = TokenCachePort<TokenCacheSnapshot>;
|
|
27
|
+
export interface InMemoryTokenCacheOptions {
|
|
26
28
|
readonly maxEntries?: number;
|
|
27
29
|
readonly ttlMs?: number;
|
|
30
|
+
readonly defaultVariant?: string;
|
|
28
31
|
}
|
|
29
|
-
export declare class
|
|
32
|
+
export declare class InMemoryTokenCache implements TokenCache {
|
|
30
33
|
#private;
|
|
31
|
-
constructor(options?:
|
|
32
|
-
get(key:
|
|
33
|
-
set(key:
|
|
34
|
+
constructor(options?: InMemoryTokenCacheOptions);
|
|
35
|
+
get(key: TokenCacheKey): TokenCacheSnapshot | undefined;
|
|
36
|
+
set(key: TokenCacheKey, value: TokenCacheSnapshot): void;
|
|
34
37
|
}
|
|
35
|
-
export declare function
|
|
38
|
+
export declare function createTokenCache(options?: InMemoryTokenCacheOptions): InMemoryTokenCache;
|
|
36
39
|
export declare function computeDocumentHash(input: Uint8Array | RawDocument): string;
|
|
37
|
-
export declare function
|
|
40
|
+
export declare function createTokenCacheVariant(configuration: TokenCacheConfiguration, variantOptions?: TokenCacheVariantOverrides): string;
|
|
41
|
+
export declare function createTokenCacheKey(identity: RawDocumentIdentity, configuration: TokenCacheConfiguration, variantOptions?: TokenCacheVariantOverrides): TokenCacheKey;
|
|
38
42
|
//# sourceMappingURL=cache.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/tokens/cache.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/tokens/cache.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,kBAAkB,EAClB,iBAAiB,EACjB,OAAO,EACP,qBAAqB,EACtB,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,IAAI,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC/F,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAE3D,MAAM,MAAM,aAAa,GAAG,mBAAmB,CAAC;AAEhD,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;CACjC;AAED,MAAM,MAAM,0BAA0B,GAAG,OAAO,CAAC,wBAAwB,CAAC,CAAC;AAE3E,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,kBAAkB,EAAE,CAAC;IACnD,QAAQ,CAAC,aAAa,CAAC,EAAE,WAAW,CAAC,OAAO,EAAE,qBAAqB,CAAC,CAAC;IACrE,QAAQ,CAAC,eAAe,CAAC,EAAE,WAAW,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;IACnE,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,eAAe,EAAE,CAAC;IAClD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,eAAe,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACxD,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;CACpC;AAED,MAAM,MAAM,UAAU,GAAG,cAAc,CAAC,kBAAkB,CAAC,CAAC;AAE5D,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;CAClC;AASD,qBAAa,kBAAmB,YAAW,UAAU;;gBASvC,OAAO,GAAE,yBAA8B;IAMnD,GAAG,CAAC,GAAG,EAAE,aAAa,GAAG,kBAAkB,GAAG,SAAS;IAkBvD,GAAG,CAAC,GAAG,EAAE,aAAa,EAAE,KAAK,EAAE,kBAAkB,GAAG,IAAI;CAqBzD;AAED,wBAAgB,gBAAgB,CAAC,OAAO,CAAC,EAAE,yBAAyB,GAAG,kBAAkB,CAExF;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,UAAU,GAAG,WAAW,GAAG,MAAM,CAU3E;AAED,wBAAgB,uBAAuB,CACrC,aAAa,EAAE,uBAAuB,EACtC,cAAc,CAAC,EAAE,0BAA0B,GAC1C,MAAM,CAGR;AAkBD,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,mBAAmB,EAC7B,aAAa,EAAE,uBAAuB,EACtC,cAAc,CAAC,EAAE,0BAA0B,GAC1C,aAAa,CAKf"}
|
package/dist/tokens/cache.js
CHANGED
|
@@ -5,16 +5,19 @@ const DEFAULT_CACHE_VARIANT_OPTIONS = Object.freeze({
|
|
|
5
5
|
flatten: true,
|
|
6
6
|
includeGraphs: true
|
|
7
7
|
});
|
|
8
|
-
|
|
8
|
+
const DEFAULT_VARIANT = 'default';
|
|
9
|
+
export class InMemoryTokenCache {
|
|
9
10
|
#maxEntries;
|
|
10
11
|
#ttlMs;
|
|
11
12
|
#store = new Map();
|
|
13
|
+
#defaultVariant;
|
|
12
14
|
constructor(options = {}) {
|
|
13
15
|
this.#maxEntries = options.maxEntries ?? DEFAULT_MAX_ENTRIES;
|
|
14
16
|
this.#ttlMs = options.ttlMs;
|
|
17
|
+
this.#defaultVariant = options.defaultVariant ?? DEFAULT_VARIANT;
|
|
15
18
|
}
|
|
16
19
|
get(key) {
|
|
17
|
-
const id = serializeKey(key);
|
|
20
|
+
const id = serializeKey(key, this.#defaultVariant);
|
|
18
21
|
const stored = this.#store.get(id);
|
|
19
22
|
if (!stored) {
|
|
20
23
|
return undefined;
|
|
@@ -29,7 +32,7 @@ export class InMemoryParseCache {
|
|
|
29
32
|
return stored.entry;
|
|
30
33
|
}
|
|
31
34
|
set(key, value) {
|
|
32
|
-
const id = serializeKey(key);
|
|
35
|
+
const id = serializeKey(key, this.#defaultVariant);
|
|
33
36
|
this.#store.delete(id);
|
|
34
37
|
this.#store.set(id, { entry: value, createdAt: Date.now() });
|
|
35
38
|
this.#evict();
|
|
@@ -48,8 +51,8 @@ export class InMemoryParseCache {
|
|
|
48
51
|
}
|
|
49
52
|
}
|
|
50
53
|
}
|
|
51
|
-
export function
|
|
52
|
-
return new
|
|
54
|
+
export function createTokenCache(options) {
|
|
55
|
+
return new InMemoryTokenCache(options);
|
|
53
56
|
}
|
|
54
57
|
export function computeDocumentHash(input) {
|
|
55
58
|
if (input instanceof Uint8Array) {
|
|
@@ -60,25 +63,29 @@ export function computeDocumentHash(input) {
|
|
|
60
63
|
}
|
|
61
64
|
return createHash('sha256').update(input.bytes).digest('hex');
|
|
62
65
|
}
|
|
63
|
-
export function
|
|
66
|
+
export function createTokenCacheVariant(configuration, variantOptions) {
|
|
64
67
|
const resolvedVariantOptions = resolveVariantOptions(variantOptions);
|
|
65
|
-
return
|
|
66
|
-
uri,
|
|
67
|
-
variant: createOptionsVariant(options, resolvedVariantOptions)
|
|
68
|
-
};
|
|
68
|
+
return createOptionsVariant(configuration, resolvedVariantOptions);
|
|
69
69
|
}
|
|
70
|
-
function createOptionsVariant(
|
|
70
|
+
function createOptionsVariant(configuration, variantOptions) {
|
|
71
71
|
const payload = {
|
|
72
|
-
|
|
73
|
-
context: normalizeContext(
|
|
74
|
-
|
|
72
|
+
depth: configuration.resolutionDepth,
|
|
73
|
+
context: normalizeContext(configuration.overrideContext),
|
|
74
|
+
transforms: configuration.transformSignature,
|
|
75
|
+
variant: configuration.variantSignature,
|
|
75
76
|
flatten: variantOptions.flatten,
|
|
76
77
|
includeGraphs: variantOptions.includeGraphs
|
|
77
78
|
};
|
|
78
79
|
return createHash('sha1').update(JSON.stringify(payload)).digest('hex');
|
|
79
80
|
}
|
|
81
|
+
export function createTokenCacheKey(identity, configuration, variantOptions) {
|
|
82
|
+
return {
|
|
83
|
+
document: identity,
|
|
84
|
+
variant: createTokenCacheVariant(configuration, variantOptions)
|
|
85
|
+
};
|
|
86
|
+
}
|
|
80
87
|
function normalizeContext(context) {
|
|
81
|
-
if (context.size === 0) {
|
|
88
|
+
if (!context || context.size === 0) {
|
|
82
89
|
return undefined;
|
|
83
90
|
}
|
|
84
91
|
const entries = Array.from(context.entries()).sort(([a], [b]) => a.localeCompare(b));
|
|
@@ -88,20 +95,14 @@ function normalizeContext(context) {
|
|
|
88
95
|
}
|
|
89
96
|
return normalized;
|
|
90
97
|
}
|
|
91
|
-
function normalizePlugins(plugins) {
|
|
92
|
-
if (!plugins) {
|
|
93
|
-
return undefined;
|
|
94
|
-
}
|
|
95
|
-
const transformCount = String(plugins.transforms.length);
|
|
96
|
-
return [`transforms:${transformCount}`];
|
|
97
|
-
}
|
|
98
98
|
function resolveVariantOptions(variantOptions) {
|
|
99
99
|
return {
|
|
100
100
|
flatten: variantOptions?.flatten ?? DEFAULT_CACHE_VARIANT_OPTIONS.flatten,
|
|
101
101
|
includeGraphs: variantOptions?.includeGraphs ?? DEFAULT_CACHE_VARIANT_OPTIONS.includeGraphs
|
|
102
102
|
};
|
|
103
103
|
}
|
|
104
|
-
function serializeKey(key) {
|
|
105
|
-
|
|
104
|
+
function serializeKey(key, defaultVariant) {
|
|
105
|
+
const variant = key.variant ?? defaultVariant;
|
|
106
|
+
return `${key.document.uri.href}::${variant}`;
|
|
106
107
|
}
|
|
107
108
|
//# sourceMappingURL=cache.js.map
|
package/dist/tokens/cache.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/tokens/cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/tokens/cache.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { DesignTokenInterchangeFormat } from '@lapidist/dtif-schema';
|
|
2
|
+
import type { ParseDataInputRecord, ParseInput, ParseInputRecord } from '../types.js';
|
|
3
|
+
import type { InlineDocumentRequestInput } from '../application/requests.js';
|
|
4
|
+
export type ParseTokensInput = ParseInput | DesignTokenInterchangeFormat | {
|
|
5
|
+
readonly contents: string;
|
|
6
|
+
readonly uri?: string;
|
|
7
|
+
};
|
|
8
|
+
export type InlineInput = InlineDocumentRequestInput;
|
|
9
|
+
export declare function normalizeInput(input: ParseTokensInput): ParseInput;
|
|
10
|
+
export declare function normalizeInlineInput(input: ParseTokensInput): InlineInput | undefined;
|
|
11
|
+
export declare function createMemoryUriFromText(text: string): string;
|
|
12
|
+
export declare function createMemoryUriFromDesignTokens(value: DesignTokenInterchangeFormat, kind: string): string;
|
|
13
|
+
export declare function isParseInputRecord(value: unknown): value is ParseInputRecord;
|
|
14
|
+
export declare function isParseDataRecord(value: unknown): value is ParseDataInputRecord;
|
|
15
|
+
export declare function isDesignTokenDocument(value: unknown): value is DesignTokenInterchangeFormat;
|
|
16
|
+
//# sourceMappingURL=inputs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inputs.d.ts","sourceRoot":"","sources":["../../src/tokens/inputs.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,uBAAuB,CAAC;AAE1E,OAAO,KAAK,EAAe,oBAAoB,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAGnG,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAC;AAE7E,MAAM,MAAM,gBAAgB,GACxB,UAAU,GACV,4BAA4B,GAC5B;IAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAEzD,MAAM,MAAM,WAAW,GAAG,0BAA0B,CAAC;AAErD,wBAAgB,cAAc,CAAC,KAAK,EAAE,gBAAgB,GAAG,UAAU,CAmBlE;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,gBAAgB,GAAG,WAAW,GAAG,SAAS,CA8ErF;AAiCD,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAG5D;AAED,wBAAgB,+BAA+B,CAC7C,KAAK,EAAE,4BAA4B,EACnC,IAAI,EAAE,MAAM,GACX,MAAM,CAGR;AAcD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,gBAAgB,CAkB5E;AAeD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,oBAAoB,CAU/E;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,4BAA4B,CAW3F"}
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
import { hashJsonValue } from '../utils/hash-json.js';
|
|
3
|
+
import { isSingleLineInlineYaml } from '../io/decoder/inline-yaml.js';
|
|
4
|
+
export function normalizeInput(input) {
|
|
5
|
+
if (typeof input === 'string' || input instanceof Uint8Array || input instanceof URL) {
|
|
6
|
+
return input;
|
|
7
|
+
}
|
|
8
|
+
if (isRecord(input)) {
|
|
9
|
+
if (isParseInputRecord(input) || isParseDataRecord(input) || isDesignTokenDocument(input)) {
|
|
10
|
+
return input;
|
|
11
|
+
}
|
|
12
|
+
if (isContentsRecord(input)) {
|
|
13
|
+
return {
|
|
14
|
+
uri: input.uri,
|
|
15
|
+
content: input.contents
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
throw new TypeError('Unsupported parse tokens input.');
|
|
20
|
+
}
|
|
21
|
+
export function normalizeInlineInput(input) {
|
|
22
|
+
if (typeof input === 'string') {
|
|
23
|
+
if (!looksLikeInlineDocument(input)) {
|
|
24
|
+
return undefined;
|
|
25
|
+
}
|
|
26
|
+
return {
|
|
27
|
+
uri: createMemoryUriFromText(input),
|
|
28
|
+
text: input,
|
|
29
|
+
contentType: detectContentTypeFromContent(input) ?? 'application/json'
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
if (input instanceof Uint8Array) {
|
|
33
|
+
const text = new TextDecoder().decode(input);
|
|
34
|
+
return {
|
|
35
|
+
uri: createMemoryUriFromText(text),
|
|
36
|
+
text,
|
|
37
|
+
contentType: detectContentTypeFromContent(text) ?? 'application/json'
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
if (input instanceof URL) {
|
|
41
|
+
return undefined;
|
|
42
|
+
}
|
|
43
|
+
if (isRecord(input)) {
|
|
44
|
+
if (isParseInputRecord(input)) {
|
|
45
|
+
if (typeof input.content === 'string') {
|
|
46
|
+
const content = input.content;
|
|
47
|
+
return {
|
|
48
|
+
uri: resolveInlineUri(input.uri, () => createMemoryUriFromText(content)),
|
|
49
|
+
text: content,
|
|
50
|
+
contentType: input.contentType ?? detectContentTypeFromContent(content) ?? 'application/json'
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
const decoded = new TextDecoder().decode(input.content);
|
|
54
|
+
return {
|
|
55
|
+
uri: resolveInlineUri(input.uri, () => createMemoryUriFromText(decoded)),
|
|
56
|
+
text: decoded,
|
|
57
|
+
contentType: input.contentType ?? detectContentTypeFromContent(decoded) ?? 'application/json'
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
if (isContentsRecord(input)) {
|
|
61
|
+
const uri = input.uri ?? createMemoryUriFromText(input.contents);
|
|
62
|
+
return {
|
|
63
|
+
uri,
|
|
64
|
+
text: input.contents,
|
|
65
|
+
contentType: detectContentTypeFromContent(input.contents) ?? 'application/json'
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
if (isParseDataRecord(input)) {
|
|
69
|
+
const uri = resolveInlineUri(input.uri, () => createMemoryUriFromDesignTokens(input.data, 'token'));
|
|
70
|
+
return {
|
|
71
|
+
uri,
|
|
72
|
+
contentType: input.contentType ?? 'application/json',
|
|
73
|
+
data: input.data
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
if (isDesignTokenDocument(input)) {
|
|
77
|
+
const uri = createMemoryUriFromDesignTokens(input, 'token');
|
|
78
|
+
return {
|
|
79
|
+
uri,
|
|
80
|
+
contentType: 'application/json',
|
|
81
|
+
data: input
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
return undefined;
|
|
86
|
+
}
|
|
87
|
+
function looksLikeInlineDocument(value) {
|
|
88
|
+
const trimmed = value.trimStart();
|
|
89
|
+
if (trimmed.length === 0) {
|
|
90
|
+
return true;
|
|
91
|
+
}
|
|
92
|
+
if (trimmed.startsWith('{') || trimmed.startsWith('[') || trimmed.startsWith('---')) {
|
|
93
|
+
return true;
|
|
94
|
+
}
|
|
95
|
+
if (trimmed.startsWith('%YAML') || trimmed.includes('\n')) {
|
|
96
|
+
return true;
|
|
97
|
+
}
|
|
98
|
+
if (isSingleLineInlineYaml(trimmed)) {
|
|
99
|
+
return true;
|
|
100
|
+
}
|
|
101
|
+
return false;
|
|
102
|
+
}
|
|
103
|
+
function detectContentTypeFromContent(value) {
|
|
104
|
+
const trimmed = value.trimStart();
|
|
105
|
+
if (trimmed.startsWith('{') || trimmed.startsWith('[')) {
|
|
106
|
+
return 'application/json';
|
|
107
|
+
}
|
|
108
|
+
if (trimmed.startsWith('---') || trimmed.startsWith('%YAML') || trimmed.includes('\n')) {
|
|
109
|
+
return 'application/yaml';
|
|
110
|
+
}
|
|
111
|
+
if (isSingleLineInlineYaml(trimmed)) {
|
|
112
|
+
return 'application/yaml';
|
|
113
|
+
}
|
|
114
|
+
return undefined;
|
|
115
|
+
}
|
|
116
|
+
export function createMemoryUriFromText(text) {
|
|
117
|
+
const hash = createHash('sha1').update(text).digest('hex');
|
|
118
|
+
return `memory://dtif-inline/${hash}.txt`;
|
|
119
|
+
}
|
|
120
|
+
export function createMemoryUriFromDesignTokens(value, kind) {
|
|
121
|
+
const hash = hashJsonValue(value, { algorithm: 'sha1' });
|
|
122
|
+
return `memory://dtif-${kind}/${hash}.json`;
|
|
123
|
+
}
|
|
124
|
+
function resolveInlineUri(value, fallback) {
|
|
125
|
+
if (typeof value === 'string') {
|
|
126
|
+
return value;
|
|
127
|
+
}
|
|
128
|
+
if (value instanceof URL) {
|
|
129
|
+
return value.toString();
|
|
130
|
+
}
|
|
131
|
+
return fallback();
|
|
132
|
+
}
|
|
133
|
+
export function isParseInputRecord(value) {
|
|
134
|
+
if (!isRecord(value)) {
|
|
135
|
+
return false;
|
|
136
|
+
}
|
|
137
|
+
const content = value.content;
|
|
138
|
+
if (typeof content !== 'string' && !(content instanceof Uint8Array)) {
|
|
139
|
+
return false;
|
|
140
|
+
}
|
|
141
|
+
const { uri, contentType } = value;
|
|
142
|
+
const validUri = uri === undefined || typeof uri === 'string' || uri instanceof URL;
|
|
143
|
+
const validContentType = contentType === undefined ||
|
|
144
|
+
contentType === 'application/json' ||
|
|
145
|
+
contentType === 'application/yaml';
|
|
146
|
+
return validUri && validContentType;
|
|
147
|
+
}
|
|
148
|
+
function isContentsRecord(value) {
|
|
149
|
+
if (!isRecord(value)) {
|
|
150
|
+
return false;
|
|
151
|
+
}
|
|
152
|
+
if (typeof value.contents !== 'string') {
|
|
153
|
+
return false;
|
|
154
|
+
}
|
|
155
|
+
const { uri } = value;
|
|
156
|
+
return uri === undefined || typeof uri === 'string';
|
|
157
|
+
}
|
|
158
|
+
export function isParseDataRecord(value) {
|
|
159
|
+
if (!isRecord(value)) {
|
|
160
|
+
return false;
|
|
161
|
+
}
|
|
162
|
+
if (!('data' in value)) {
|
|
163
|
+
return false;
|
|
164
|
+
}
|
|
165
|
+
return isDesignTokenDocument(value.data);
|
|
166
|
+
}
|
|
167
|
+
export function isDesignTokenDocument(value) {
|
|
168
|
+
if (!value || typeof value !== 'object') {
|
|
169
|
+
return false;
|
|
170
|
+
}
|
|
171
|
+
if (value instanceof URL || value instanceof Uint8Array) {
|
|
172
|
+
return false;
|
|
173
|
+
}
|
|
174
|
+
const prototype = Reflect.getPrototypeOf(value);
|
|
175
|
+
return prototype === Object.prototype || prototype === null;
|
|
176
|
+
}
|
|
177
|
+
function isRecord(value) {
|
|
178
|
+
return Boolean(value) && typeof value === 'object';
|
|
179
|
+
}
|
|
180
|
+
//# sourceMappingURL=inputs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inputs.js","sourceRoot":"","sources":["../../src/tokens/inputs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAKzC,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AAUtE,MAAM,UAAU,cAAc,CAAC,KAAuB;IACpD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,YAAY,UAAU,IAAI,KAAK,YAAY,GAAG,EAAE,CAAC;QACrF,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACpB,IAAI,kBAAkB,CAAC,KAAK,CAAC,IAAI,iBAAiB,CAAC,KAAK,CAAC,IAAI,qBAAqB,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1F,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;YAC5B,OAAO;gBACL,GAAG,EAAE,KAAK,CAAC,GAAG;gBACd,OAAO,EAAE,KAAK,CAAC,QAAQ;aACH,CAAC;QACzB,CAAC;IACH,CAAC;IAED,MAAM,IAAI,SAAS,CAAC,iCAAiC,CAAC,CAAC;AACzD,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,KAAuB;IAC1D,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,EAAE,CAAC;YACpC,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,OAAO;YACL,GAAG,EAAE,uBAAuB,CAAC,KAAK,CAAC;YACnC,IAAI,EAAE,KAAK;YACX,WAAW,EAAE,4BAA4B,CAAC,KAAK,CAAC,IAAI,kBAAkB;SACjD,CAAC;IAC1B,CAAC;IAED,IAAI,KAAK,YAAY,UAAU,EAAE,CAAC;QAChC,MAAM,IAAI,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC7C,OAAO;YACL,GAAG,EAAE,uBAAuB,CAAC,IAAI,CAAC;YAClC,IAAI;YACJ,WAAW,EAAE,4BAA4B,CAAC,IAAI,CAAC,IAAI,kBAAkB;SAChD,CAAC;IAC1B,CAAC;IAED,IAAI,KAAK,YAAY,GAAG,EAAE,CAAC;QACzB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACpB,IAAI,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9B,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;gBACtC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;gBAC9B,OAAO;oBACL,GAAG,EAAE,gBAAgB,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC;oBACxE,IAAI,EAAE,OAAO;oBACb,WAAW,EACT,KAAK,CAAC,WAAW,IAAI,4BAA4B,CAAC,OAAO,CAAC,IAAI,kBAAkB;iBAC7D,CAAC;YAC1B,CAAC;YAED,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACxD,OAAO;gBACL,GAAG,EAAE,gBAAgB,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC;gBACxE,IAAI,EAAE,OAAO;gBACb,WAAW,EACT,KAAK,CAAC,WAAW,IAAI,4BAA4B,CAAC,OAAO,CAAC,IAAI,kBAAkB;aAC7D,CAAC;QAC1B,CAAC;QAED,IAAI,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;YAC5B,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,IAAI,uBAAuB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YACjE,OAAO;gBACL,GAAG;gBACH,IAAI,EAAE,KAAK,CAAC,QAAQ;gBACpB,WAAW,EAAE,4BAA4B,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,kBAAkB;aAC1D,CAAC;QAC1B,CAAC;QAED,IAAI,iBAAiB,CAAC,KAAK,CAAC,EAAE,CAAC;YAC7B,MAAM,GAAG,GAAG,gBAAgB,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,CAC3C,+BAA+B,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CACrD,CAAC;YACF,OAAO;gBACL,GAAG;gBACH,WAAW,EAAE,KAAK,CAAC,WAAW,IAAI,kBAAkB;gBACpD,IAAI,EAAE,KAAK,CAAC,IAAI;aACK,CAAC;QAC1B,CAAC;QAED,IAAI,qBAAqB,CAAC,KAAK,CAAC,EAAE,CAAC;YACjC,MAAM,GAAG,GAAG,+BAA+B,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;YAC5D,OAAO;gBACL,GAAG;gBACH,WAAW,EAAE,kBAAkB;gBAC/B,IAAI,EAAE,KAAK;aACU,CAAC;QAC1B,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,uBAAuB,CAAC,KAAa;IAC5C,MAAM,OAAO,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;IAClC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QACpF,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1D,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,sBAAsB,CAAC,OAAO,CAAC,EAAE,CAAC;QACpC,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,4BAA4B,CAAC,KAAa;IACjD,MAAM,OAAO,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;IAClC,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACvD,OAAO,kBAAkB,CAAC;IAC5B,CAAC;IACD,IAAI,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACvF,OAAO,kBAAkB,CAAC;IAC5B,CAAC;IACD,IAAI,sBAAsB,CAAC,OAAO,CAAC,EAAE,CAAC;QACpC,OAAO,kBAAkB,CAAC;IAC5B,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,IAAY;IAClD,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC3D,OAAO,wBAAwB,IAAI,MAAM,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,+BAA+B,CAC7C,KAAmC,EACnC,IAAY;IAEZ,MAAM,IAAI,GAAG,aAAa,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;IACzD,OAAO,iBAAiB,IAAI,IAAI,IAAI,OAAO,CAAC;AAC9C,CAAC;AAED,SAAS,gBAAgB,CAAC,KAA+B,EAAE,QAAsB;IAC/E,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,KAAK,YAAY,GAAG,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC;IAC1B,CAAC;IAED,OAAO,QAAQ,EAAE,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,KAAc;IAC/C,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACrB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;IAC9B,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,CAAC,CAAC,OAAO,YAAY,UAAU,CAAC,EAAE,CAAC;QACpE,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,KAAK,CAAC;IACnC,MAAM,QAAQ,GAAG,GAAG,KAAK,SAAS,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,YAAY,GAAG,CAAC;IACpF,MAAM,gBAAgB,GACpB,WAAW,KAAK,SAAS;QACzB,WAAW,KAAK,kBAAkB;QAClC,WAAW,KAAK,kBAAkB,CAAC;IAErC,OAAO,QAAQ,IAAI,gBAAgB,CAAC;AACtC,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAc;IACtC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACrB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,OAAO,KAAK,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACvC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC;IACtB,OAAO,GAAG,KAAK,SAAS,IAAI,OAAO,GAAG,KAAK,QAAQ,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAAc;IAC9C,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACrB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,qBAAqB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,KAAc;IAClD,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACxC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,KAAK,YAAY,GAAG,IAAI,KAAK,YAAY,UAAU,EAAE,CAAC;QACxD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,SAAS,GAAG,OAAO,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IAChD,OAAO,SAAS,KAAK,MAAM,CAAC,SAAS,IAAI,SAAS,KAAK,IAAI,CAAC;AAC9D,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,CAAC,KAAK,CAAC,IAAI,OAAO,KAAK,KAAK,QAAQ,CAAC;AACrD,CAAC"}
|