@spool-lab/core 0.4.0 → 0.4.1
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/package.json +2 -2
- package/dist/connectors/capabilities/cookies-chrome.d.ts +0 -19
- package/dist/connectors/capabilities/cookies-chrome.d.ts.map +0 -1
- package/dist/connectors/capabilities/cookies-chrome.js +0 -199
- package/dist/connectors/capabilities/cookies-chrome.js.map +0 -1
- package/dist/connectors/capabilities/exec-impl.d.ts +0 -3
- package/dist/connectors/capabilities/exec-impl.d.ts.map +0 -1
- package/dist/connectors/capabilities/exec-impl.js +0 -108
- package/dist/connectors/capabilities/exec-impl.js.map +0 -1
- package/dist/connectors/capabilities/fetch-impl.d.ts +0 -3
- package/dist/connectors/capabilities/fetch-impl.d.ts.map +0 -1
- package/dist/connectors/capabilities/fetch-impl.js +0 -4
- package/dist/connectors/capabilities/fetch-impl.js.map +0 -1
- package/dist/connectors/capabilities/index.d.ts +0 -6
- package/dist/connectors/capabilities/index.d.ts.map +0 -1
- package/dist/connectors/capabilities/index.js +0 -6
- package/dist/connectors/capabilities/index.js.map +0 -1
- package/dist/connectors/capabilities/log-impl.d.ts +0 -3
- package/dist/connectors/capabilities/log-impl.d.ts.map +0 -1
- package/dist/connectors/capabilities/log-impl.js +0 -26
- package/dist/connectors/capabilities/log-impl.js.map +0 -1
- package/dist/connectors/capabilities/sqlite-impl.d.ts +0 -3
- package/dist/connectors/capabilities/sqlite-impl.d.ts.map +0 -1
- package/dist/connectors/capabilities/sqlite-impl.js +0 -19
- package/dist/connectors/capabilities/sqlite-impl.js.map +0 -1
- package/dist/connectors/loader.d.ts +0 -47
- package/dist/connectors/loader.d.ts.map +0 -1
- package/dist/connectors/loader.js +0 -328
- package/dist/connectors/loader.js.map +0 -1
- package/dist/connectors/npm-install.d.ts +0 -26
- package/dist/connectors/npm-install.d.ts.map +0 -1
- package/dist/connectors/npm-install.js +0 -74
- package/dist/connectors/npm-install.js.map +0 -1
- package/dist/connectors/prerequisites.d.ts +0 -14
- package/dist/connectors/prerequisites.d.ts.map +0 -1
- package/dist/connectors/prerequisites.js +0 -109
- package/dist/connectors/prerequisites.js.map +0 -1
- package/dist/connectors/registry-fetch.d.ts +0 -22
- package/dist/connectors/registry-fetch.d.ts.map +0 -1
- package/dist/connectors/registry-fetch.js +0 -54
- package/dist/connectors/registry-fetch.js.map +0 -1
- package/dist/connectors/registry.d.ts +0 -23
- package/dist/connectors/registry.d.ts.map +0 -1
- package/dist/connectors/registry.js +0 -59
- package/dist/connectors/registry.js.map +0 -1
- package/dist/connectors/sync-engine.d.ts +0 -31
- package/dist/connectors/sync-engine.d.ts.map +0 -1
- package/dist/connectors/sync-engine.js +0 -604
- package/dist/connectors/sync-engine.js.map +0 -1
- package/dist/connectors/sync-scheduler.d.ts +0 -56
- package/dist/connectors/sync-scheduler.d.ts.map +0 -1
- package/dist/connectors/sync-scheduler.js +0 -238
- package/dist/connectors/sync-scheduler.js.map +0 -1
- package/dist/connectors/trust-store.d.ts +0 -13
- package/dist/connectors/trust-store.d.ts.map +0 -1
- package/dist/connectors/trust-store.js +0 -48
- package/dist/connectors/trust-store.js.map +0 -1
- package/dist/connectors/types.d.ts +0 -111
- package/dist/connectors/types.d.ts.map +0 -1
- package/dist/connectors/types.js +0 -50
- package/dist/connectors/types.js.map +0 -1
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
import { readFileSync, writeFileSync, mkdirSync } from 'node:fs';
|
|
2
|
-
import { join } from 'node:path';
|
|
3
|
-
import { fileURLToPath } from 'node:url';
|
|
4
|
-
const DEFAULT_REGISTRY_URL = 'https://raw.githubusercontent.com/spool-lab/spool/main/packages/landing/public/registry.json';
|
|
5
|
-
const CACHE_FILE = 'registry-cache.json';
|
|
6
|
-
const TIMEOUT_MS = 3_000;
|
|
7
|
-
function isFileSource(url) {
|
|
8
|
-
return url.startsWith('file://') || url.startsWith('/');
|
|
9
|
-
}
|
|
10
|
-
function readLocalRegistry(url) {
|
|
11
|
-
const path = url.startsWith('file://') ? fileURLToPath(url) : url;
|
|
12
|
-
const raw = readFileSync(path, 'utf-8');
|
|
13
|
-
const data = JSON.parse(raw);
|
|
14
|
-
return data.connectors ?? [];
|
|
15
|
-
}
|
|
16
|
-
export async function fetchRegistry(opts) {
|
|
17
|
-
const { fetchFn = globalThis.fetch, cacheDir, url = DEFAULT_REGISTRY_URL } = opts;
|
|
18
|
-
const cachePath = join(cacheDir, CACHE_FILE);
|
|
19
|
-
if (isFileSource(url)) {
|
|
20
|
-
try {
|
|
21
|
-
return readLocalRegistry(url);
|
|
22
|
-
}
|
|
23
|
-
catch {
|
|
24
|
-
return readCachedRegistry(cachePath);
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
try {
|
|
28
|
-
const res = await fetchFn(url, { signal: AbortSignal.timeout(TIMEOUT_MS) });
|
|
29
|
-
if (!res.ok)
|
|
30
|
-
throw new Error(`HTTP ${res.status}`);
|
|
31
|
-
const data = (await res.json());
|
|
32
|
-
const connectors = data.connectors ?? [];
|
|
33
|
-
try {
|
|
34
|
-
mkdirSync(cacheDir, { recursive: true });
|
|
35
|
-
writeFileSync(cachePath, JSON.stringify({ connectors, fetchedAt: Date.now() }));
|
|
36
|
-
}
|
|
37
|
-
catch { }
|
|
38
|
-
return connectors;
|
|
39
|
-
}
|
|
40
|
-
catch {
|
|
41
|
-
return readCachedRegistry(cachePath);
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
function readCachedRegistry(cachePath) {
|
|
45
|
-
try {
|
|
46
|
-
const raw = readFileSync(cachePath, 'utf-8');
|
|
47
|
-
const cached = JSON.parse(raw);
|
|
48
|
-
return cached.connectors ?? [];
|
|
49
|
-
}
|
|
50
|
-
catch {
|
|
51
|
-
return [];
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
//# sourceMappingURL=registry-fetch.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"registry-fetch.js","sourceRoot":"","sources":["../../src/connectors/registry-fetch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAChE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAExC,MAAM,oBAAoB,GACxB,8FAA8F,CAAA;AAChG,MAAM,UAAU,GAAG,qBAAqB,CAAA;AACxC,MAAM,UAAU,GAAG,KAAK,CAAA;AAuBxB,SAAS,YAAY,CAAC,GAAW;IAC/B,OAAO,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;AACzD,CAAC;AAED,SAAS,iBAAiB,CAAC,GAAW;IACpC,MAAM,IAAI,GAAG,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAA;IACjE,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;IACvC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAyC,CAAA;IACpE,OAAO,IAAI,CAAC,UAAU,IAAI,EAAE,CAAA;AAC9B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAAuB;IACzD,MAAM,EAAE,OAAO,GAAG,UAAU,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,GAAG,oBAAoB,EAAE,GAAG,IAAI,CAAA;IACjF,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAA;IAE5C,IAAI,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC;QACtB,IAAI,CAAC;YACH,OAAO,iBAAiB,CAAC,GAAG,CAAC,CAAA;QAC/B,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,kBAAkB,CAAC,SAAS,CAAC,CAAA;QACtC,CAAC;IACH,CAAC;IAED,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC,CAAA;QAC3E,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,QAAQ,GAAG,CAAC,MAAM,EAAE,CAAC,CAAA;QAClD,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAyC,CAAA;QACvE,MAAM,UAAU,GAAwB,IAAI,CAAC,UAAU,IAAI,EAAE,CAAA;QAC7D,IAAI,CAAC;YACH,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;YACxC,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAA;QACjF,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;QACV,OAAO,UAAU,CAAA;IACnB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,kBAAkB,CAAC,SAAS,CAAC,CAAA;IACtC,CAAC;AACH,CAAC;AAED,SAAS,kBAAkB,CAAC,SAAiB;IAC3C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;QAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QAC9B,OAAO,MAAM,CAAC,UAAU,IAAI,EAAE,CAAA;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAA;IACX,CAAC;AACH,CAAC"}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import type { Connector, ConnectorPackage } from './types.js';
|
|
2
|
-
/**
|
|
3
|
-
* In-memory registry of available connectors.
|
|
4
|
-
*
|
|
5
|
-
* Connectors are registered at app startup. The registry is the single source
|
|
6
|
-
* of truth for "what connectors exist" — the scheduler and UI both read from it.
|
|
7
|
-
*/
|
|
8
|
-
export declare class ConnectorRegistry {
|
|
9
|
-
private connectors;
|
|
10
|
-
private packages;
|
|
11
|
-
register(connector: Connector): void;
|
|
12
|
-
registerPackage(pkg: ConnectorPackage): void;
|
|
13
|
-
getPackage(id: string): ConnectorPackage | undefined;
|
|
14
|
-
listPackages(): ConnectorPackage[];
|
|
15
|
-
get(id: string): Connector;
|
|
16
|
-
has(id: string): boolean;
|
|
17
|
-
remove(id: string): boolean;
|
|
18
|
-
clear(): void;
|
|
19
|
-
list(): Connector[];
|
|
20
|
-
/** List connectors for a specific platform. */
|
|
21
|
-
listByPlatform(platform: string): Connector[];
|
|
22
|
-
}
|
|
23
|
-
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/connectors/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAE7D;;;;;GAKG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,UAAU,CAA+B;IACjD,OAAO,CAAC,QAAQ,CAAsC;IAEtD,QAAQ,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI;IAIpC,eAAe,CAAC,GAAG,EAAE,gBAAgB,GAAG,IAAI;IAgB5C,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS;IAIpD,YAAY,IAAI,gBAAgB,EAAE;IAIlC,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS;IAM1B,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAIxB,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAI3B,KAAK,IAAI,IAAI;IAKb,IAAI,IAAI,SAAS,EAAE;IAInB,+CAA+C;IAC/C,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAAE;CAG9C"}
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* In-memory registry of available connectors.
|
|
3
|
-
*
|
|
4
|
-
* Connectors are registered at app startup. The registry is the single source
|
|
5
|
-
* of truth for "what connectors exist" — the scheduler and UI both read from it.
|
|
6
|
-
*/
|
|
7
|
-
export class ConnectorRegistry {
|
|
8
|
-
connectors = new Map();
|
|
9
|
-
packages = new Map();
|
|
10
|
-
register(connector) {
|
|
11
|
-
this.connectors.set(connector.id, connector);
|
|
12
|
-
}
|
|
13
|
-
registerPackage(pkg) {
|
|
14
|
-
const existing = this.packages.get(pkg.id);
|
|
15
|
-
if (existing) {
|
|
16
|
-
// Multi-connector packages register once per sub-connector — merge the connectors list
|
|
17
|
-
const mergedConnectors = [...existing.connectors];
|
|
18
|
-
for (const c of pkg.connectors) {
|
|
19
|
-
if (!mergedConnectors.some(e => e.id === c.id)) {
|
|
20
|
-
mergedConnectors.push(c);
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
this.packages.set(pkg.id, { ...pkg, connectors: mergedConnectors });
|
|
24
|
-
}
|
|
25
|
-
else {
|
|
26
|
-
this.packages.set(pkg.id, pkg);
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
getPackage(id) {
|
|
30
|
-
return this.packages.get(id);
|
|
31
|
-
}
|
|
32
|
-
listPackages() {
|
|
33
|
-
return Array.from(this.packages.values());
|
|
34
|
-
}
|
|
35
|
-
get(id) {
|
|
36
|
-
const connector = this.connectors.get(id);
|
|
37
|
-
if (!connector)
|
|
38
|
-
throw new Error(`Connector "${id}" not found`);
|
|
39
|
-
return connector;
|
|
40
|
-
}
|
|
41
|
-
has(id) {
|
|
42
|
-
return this.connectors.has(id);
|
|
43
|
-
}
|
|
44
|
-
remove(id) {
|
|
45
|
-
return this.connectors.delete(id);
|
|
46
|
-
}
|
|
47
|
-
clear() {
|
|
48
|
-
this.connectors.clear();
|
|
49
|
-
this.packages.clear();
|
|
50
|
-
}
|
|
51
|
-
list() {
|
|
52
|
-
return Array.from(this.connectors.values());
|
|
53
|
-
}
|
|
54
|
-
/** List connectors for a specific platform. */
|
|
55
|
-
listByPlatform(platform) {
|
|
56
|
-
return this.list().filter(c => c.platform === platform);
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
//# sourceMappingURL=registry.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/connectors/registry.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,MAAM,OAAO,iBAAiB;IACpB,UAAU,GAAG,IAAI,GAAG,EAAqB,CAAA;IACzC,QAAQ,GAAG,IAAI,GAAG,EAA4B,CAAA;IAEtD,QAAQ,CAAC,SAAoB;QAC3B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,EAAE,SAAS,CAAC,CAAA;IAC9C,CAAC;IAED,eAAe,CAAC,GAAqB;QACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QAC1C,IAAI,QAAQ,EAAE,CAAC;YACb,uFAAuF;YACvF,MAAM,gBAAgB,GAAG,CAAC,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAA;YACjD,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;gBAC/B,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;oBAC/C,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;gBAC1B,CAAC;YACH,CAAC;YACD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,UAAU,EAAE,gBAAgB,EAAE,CAAC,CAAA;QACrE,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAA;QAChC,CAAC;IACH,CAAC;IAED,UAAU,CAAC,EAAU;QACnB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IAC9B,CAAC;IAED,YAAY;QACV,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAA;IAC3C,CAAC;IAED,GAAG,CAAC,EAAU;QACZ,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QACzC,IAAI,CAAC,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,cAAc,EAAE,aAAa,CAAC,CAAA;QAC9D,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,GAAG,CAAC,EAAU;QACZ,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IAChC,CAAC;IAED,MAAM,CAAC,EAAU;QACf,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;IACnC,CAAC;IAED,KAAK;QACH,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAA;QACvB,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAA;IACvB,CAAC;IAED,IAAI;QACF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAA;IAC7C,CAAC;IAED,+CAA+C;IAC/C,cAAc,CAAC,QAAgB;QAC7B,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAA;IACzD,CAAC;CACF"}
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import type Database from 'better-sqlite3';
|
|
2
|
-
import { Effect } from 'effect';
|
|
3
|
-
import type { Connector, SyncState, SyncOptions, ConnectorSyncResult } from './types.js';
|
|
4
|
-
export declare function loadSyncState(db: Database.Database, connectorId: string): SyncState;
|
|
5
|
-
export declare function saveSyncState(db: Database.Database, state: SyncState): void;
|
|
6
|
-
export declare function deleteConnectorItems(db: Database.Database, connectorId: string): void;
|
|
7
|
-
export declare class SyncEngine {
|
|
8
|
-
private db;
|
|
9
|
-
constructor(db: Database.Database);
|
|
10
|
-
loadState(connectorId: string): SyncState;
|
|
11
|
-
/**
|
|
12
|
-
* Effect-native entry point. Returns an Effect that, when run, executes a
|
|
13
|
-
* full sync cycle (ephemeral or dual-frontier persistent) and records the
|
|
14
|
-
* outcome in connector_sync_state. The Effect is `Effect<ConnectorSyncResult, never>`
|
|
15
|
-
* because all SyncErrors are caught internally and encoded in `result.error`.
|
|
16
|
-
*
|
|
17
|
-
* Preferred by callers that already live in the Effect world (the Scheduler
|
|
18
|
-
* Effect migration, tests that want to inject Logger / Tracer layers via
|
|
19
|
-
* `Effect.provide`). Promise-based callers should use `sync()` instead.
|
|
20
|
-
*/
|
|
21
|
-
syncEffect(connector: Connector, opts?: SyncOptions): Effect.Effect<ConnectorSyncResult>;
|
|
22
|
-
sync(connector: Connector, opts?: SyncOptions): Promise<ConnectorSyncResult>;
|
|
23
|
-
/**
|
|
24
|
-
* Fetch pages in an Effect-based loop until a stop condition is met.
|
|
25
|
-
* Errors are caught internally and returned in the result (never fails).
|
|
26
|
-
*/
|
|
27
|
-
private fetchLoopEffect;
|
|
28
|
-
private syncPersistentEffect;
|
|
29
|
-
private syncEphemeralEffect;
|
|
30
|
-
}
|
|
31
|
-
//# sourceMappingURL=sync-engine.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sync-engine.d.ts","sourceRoot":"","sources":["../../src/connectors/sync-engine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAA;AAE1C,OAAO,EAA6B,MAAM,EAAS,MAAM,QAAQ,CAAA;AACjE,OAAO,KAAK,EACV,SAAS,EAET,SAAS,EACT,WAAW,EACX,mBAAmB,EAEpB,MAAM,YAAY,CAAA;AAqEnB,wBAAgB,aAAa,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,WAAW,EAAE,MAAM,GAAG,SAAS,CA0CnF;AAED,wBAAgB,aAAa,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,KAAK,EAAE,SAAS,GAAG,IAAI,CAgC3E;AAyED,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CA4BrF;AA6BD,qBAAa,UAAU;IACT,OAAO,CAAC,EAAE;gBAAF,EAAE,EAAE,QAAQ,CAAC,QAAQ;IAEzC,SAAS,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS;IAIzC;;;;;;;;;OASG;IACH,UAAU,CACR,SAAS,EAAE,SAAS,EACpB,IAAI,GAAE,WAAgB,GACrB,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC;IA0C/B,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,GAAE,WAAgB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IA6BtF;;;OAGG;IACH,OAAO,CAAC,eAAe;IAoMvB,OAAO,CAAC,oBAAoB;IA6G5B,OAAO,CAAC,mBAAmB;CA+G5B"}
|