@xyo-network/schema-cache 2.72.9 → 2.73.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.
@@ -1,21 +0,0 @@
1
- import { delay } from '@xylabs/delay';
2
- export class Debounce {
3
- map = new Map();
4
- async one(key, closure, timeout = 10000) {
5
- const startTime = Date.now();
6
- while (this.map.get(key)) {
7
- await delay(100);
8
- if (Date.now() - startTime > timeout) {
9
- throw Error(`Debounce timed out [${key}]`);
10
- }
11
- }
12
- try {
13
- this.map.set(key, 1);
14
- return await closure();
15
- }
16
- finally {
17
- this.map.set(key, 0);
18
- }
19
- }
20
- }
21
- //# sourceMappingURL=Debounce.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Debounce.js","sourceRoot":"","sources":["../../src/Debounce.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AAErC,MAAM,OAAO,QAAQ;IACX,GAAG,GAAG,IAAI,GAAG,EAAgB,CAAA;IAErC,KAAK,CAAC,GAAG,CAAI,GAAS,EAAE,OAAyB,EAAE,OAAO,GAAG,KAAK;QAChE,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QAC5B,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;YACxB,MAAM,KAAK,CAAC,GAAG,CAAC,CAAA;YAChB,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,GAAG,OAAO,EAAE;gBACpC,MAAM,KAAK,CAAC,uBAAuB,GAAG,GAAG,CAAC,CAAA;aAC3C;SACF;QACD,IAAI;YACF,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAA;YACpB,OAAO,MAAM,OAAO,EAAE,CAAA;SACvB;gBAAS;YACR,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAA;SACrB;IACH,CAAC;CACF"}
@@ -1,100 +0,0 @@
1
- import { isAxiosError } from '@xyo-network/axios';
2
- import { DomainPayloadWrapper } from '@xyo-network/domain-payload-plugin';
3
- import { handleError } from '@xyo-network/error';
4
- import { SchemaSchema } from '@xyo-network/schema-payload-plugin';
5
- import Ajv from 'ajv';
6
- import { LRUCache } from 'lru-cache';
7
- import { Debounce } from './Debounce';
8
- const getSchemaNameFromSchema = (schema) => {
9
- if (schema.$id) {
10
- return schema.$id;
11
- }
12
- };
13
- export class SchemaCache {
14
- /**
15
- * Object representing `null` since LRU Cache types
16
- * only allow for types that derive from object
17
- */
18
- static NULL = { payload: { definition: {}, schema: SchemaSchema } };
19
- static _instance;
20
- onSchemaCached;
21
- proxy;
22
- _cache = new LRUCache({ max: 500, ttl: 1000 * 60 * 5 });
23
- _validators = {};
24
- //prevents double discovery
25
- getDebounce = new Debounce();
26
- constructor(proxy) {
27
- this.proxy = proxy;
28
- }
29
- static get instance() {
30
- if (!this._instance) {
31
- this._instance = new SchemaCache();
32
- }
33
- return this._instance;
34
- }
35
- /**
36
- * A map of cached schema (by name) to payload validators for the schema. A schema
37
- * must be cached via `get('schema.name')` before it's validator can be used as
38
- * they are compiled dynamically at runtime upon retrieval.
39
- */
40
- get validators() {
41
- return this._validators;
42
- }
43
- async get(schema) {
44
- if (schema) {
45
- await this.getDebounce.one(schema, async () => {
46
- // If we've never looked for it before, it will be undefined
47
- if (this._cache.get(schema) === undefined) {
48
- await this.fetchSchema(schema);
49
- }
50
- });
51
- const value = this._cache.get(schema);
52
- return value === SchemaCache.NULL ? null : value;
53
- }
54
- return undefined;
55
- }
56
- cacheSchemaIfValid(entry) {
57
- //only store them if they match the schema root
58
- if (entry.payload.definition) {
59
- const ajv = new Ajv({ strict: false });
60
- //check if it is a valid schema def
61
- const validator = ajv.compile(entry.payload.definition);
62
- const schemaName = getSchemaNameFromSchema(entry.payload.definition);
63
- if (schemaName) {
64
- this._cache.set(schemaName, entry);
65
- const key = schemaName;
66
- this._validators[key] = validator;
67
- this.onSchemaCached?.(schemaName, entry);
68
- }
69
- }
70
- }
71
- cacheSchemas(aliasEntries) {
72
- aliasEntries
73
- ?.filter((entry) => entry.payload.schema === SchemaSchema)
74
- .forEach((entry) => {
75
- this.cacheSchemaIfValid(entry);
76
- });
77
- }
78
- async fetchSchema(schema) {
79
- try {
80
- const domain = await DomainPayloadWrapper.discover(schema, this.proxy);
81
- await domain?.fetch();
82
- this.cacheSchemas(domain?.aliases);
83
- //if it is still undefined, mark it as null (not found)
84
- if (this._cache.get(schema) === undefined) {
85
- this._cache.set(schema, SchemaCache.NULL);
86
- }
87
- }
88
- catch (ex) {
89
- //if failed, set it to NULL, TODO: Make an entry for an error to try again in the future?
90
- this._cache.set(schema, SchemaCache.NULL);
91
- if (isAxiosError(ex)) {
92
- console.log(`Axios Url: ${ex.response?.config.url}`);
93
- }
94
- handleError(ex, (error) => {
95
- console.error(`fetchSchema threw: ${error.message}`);
96
- });
97
- }
98
- }
99
- }
100
- //# sourceMappingURL=SchemaCache.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SchemaCache.js","sourceRoot":"","sources":["../../src/SchemaCache.ts"],"names":[],"mappings":"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"}
@@ -1,4 +0,0 @@
1
- import { DomainSchema } from '@xyo-network/domain-payload-plugin';
2
- import { PayloadSchema } from '@xyo-network/payload-model';
3
- import { SchemaSchema } from '@xyo-network/schema-payload-plugin';
4
- //# sourceMappingURL=SchemaNameToValidatorMap.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SchemaNameToValidatorMap.js","sourceRoot":"","sources":["../../src/SchemaNameToValidatorMap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,YAAY,EAAE,MAAM,oCAAoC,CAAA;AAChF,OAAO,EAAW,aAAa,EAAE,MAAM,4BAA4B,CAAA;AACnE,OAAO,EAAiB,YAAY,EAAE,MAAM,oCAAoC,CAAA"}
package/dist/esm/index.js DELETED
@@ -1,4 +0,0 @@
1
- export * from './Debounce';
2
- export * from './SchemaCache';
3
- export * from './SchemaNameToValidatorMap';
4
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA;AAC1B,cAAc,eAAe,CAAA;AAC7B,cAAc,4BAA4B,CAAA"}
@@ -1,5 +0,0 @@
1
- export declare class Debounce<TKey = string> {
2
- private map;
3
- one<T>(key: TKey, closure: () => Promise<T>, timeout?: number): Promise<T>;
4
- }
5
- //# sourceMappingURL=Debounce.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Debounce.d.ts","sourceRoot":"","sources":["../../src/Debounce.ts"],"names":[],"mappings":"AAEA,qBAAa,QAAQ,CAAC,IAAI,GAAG,MAAM;IACjC,OAAO,CAAC,GAAG,CAA0B;IAE/B,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,SAAQ;CAenE"}
@@ -1,30 +0,0 @@
1
- import { FetchedPayload } from '@xyo-network/huri';
2
- import { SchemaPayload } from '@xyo-network/schema-payload-plugin';
3
- import { SchemaNameToValidatorMap } from './SchemaNameToValidatorMap';
4
- export type SchemaCacheEntry = FetchedPayload<SchemaPayload>;
5
- export declare class SchemaCache<T extends SchemaNameToValidatorMap = SchemaNameToValidatorMap> {
6
- /**
7
- * Object representing `null` since LRU Cache types
8
- * only allow for types that derive from object
9
- */
10
- protected static readonly NULL: SchemaCacheEntry;
11
- private static _instance?;
12
- onSchemaCached?: (name: string, entry: SchemaCacheEntry) => void;
13
- proxy?: string;
14
- private _cache;
15
- private _validators;
16
- private getDebounce;
17
- private constructor();
18
- static get instance(): SchemaCache<SchemaNameToValidatorMap>;
19
- /**
20
- * A map of cached schema (by name) to payload validators for the schema. A schema
21
- * must be cached via `get('schema.name')` before it's validator can be used as
22
- * they are compiled dynamically at runtime upon retrieval.
23
- */
24
- get validators(): T;
25
- get(schema?: string): Promise<SchemaCacheEntry | undefined | null>;
26
- private cacheSchemaIfValid;
27
- private cacheSchemas;
28
- private fetchSchema;
29
- }
30
- //# sourceMappingURL=SchemaCache.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SchemaCache.d.ts","sourceRoot":"","sources":["../../src/SchemaCache.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAClD,OAAO,EAAE,aAAa,EAAgB,MAAM,oCAAoC,CAAA;AAKhF,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAA;AAQrE,MAAM,MAAM,gBAAgB,GAAG,cAAc,CAAC,aAAa,CAAC,CAAA;AAE5D,qBAAa,WAAW,CAAC,CAAC,SAAS,wBAAwB,GAAG,wBAAwB;IACpF;;;OAGG;IACH,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAwD;IAExG,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAa;IAEtC,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAgB,KAAK,IAAI,CAAA;IAChE,KAAK,CAAC,EAAE,MAAM,CAAA;IAEd,OAAO,CAAC,MAAM,CAA2E;IACzF,OAAO,CAAC,WAAW,CAAa;IAGhC,OAAO,CAAC,WAAW,CAAiB;IAEpC,OAAO;IAIP,MAAM,KAAK,QAAQ,0CAKlB;IAED;;;;OAIG;IACH,IAAI,UAAU,IAAI,CAAC,CAElB;IAEK,GAAG,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,SAAS,GAAG,IAAI,CAAC;IAcxE,OAAO,CAAC,kBAAkB;IAgB1B,OAAO,CAAC,YAAY;YAQN,WAAW;CAqB1B"}
@@ -1,17 +0,0 @@
1
- import { DomainPayload, DomainSchema } from '@xyo-network/domain-payload-plugin';
2
- import { Payload, PayloadSchema } from '@xyo-network/payload-model';
3
- import { SchemaPayload, SchemaSchema } from '@xyo-network/schema-payload-plugin';
4
- /**
5
- * Used in conjunction with schema validation to support compile time type assertion
6
- * for known schema types.
7
- */
8
- export type NarrowPayload<T extends Payload = Payload> = ((x: Payload) => x is T) | undefined;
9
- /**
10
- * Used to map known schemas (byt their string name) to the validators which assert their types
11
- */
12
- export interface SchemaNameToValidatorMap {
13
- [DomainSchema]: NarrowPayload<DomainPayload>;
14
- [PayloadSchema]: NarrowPayload<Payload>;
15
- [SchemaSchema]: NarrowPayload<SchemaPayload>;
16
- }
17
- //# sourceMappingURL=SchemaNameToValidatorMap.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SchemaNameToValidatorMap.d.ts","sourceRoot":"","sources":["../../src/SchemaNameToValidatorMap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAA;AAChF,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AACnE,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAA;AAEhF;;;GAGG;AACH,MAAM,MAAM,aAAa,CAAC,CAAC,SAAS,OAAO,GAAG,OAAO,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,SAAS,CAAA;AAE7F;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,CAAC,YAAY,CAAC,EAAE,aAAa,CAAC,aAAa,CAAC,CAAA;IAC5C,CAAC,aAAa,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC,CAAA;IACvC,CAAC,YAAY,CAAC,EAAE,aAAa,CAAC,aAAa,CAAC,CAAA;CAC7C"}
@@ -1,4 +0,0 @@
1
- export * from './Debounce';
2
- export * from './SchemaCache';
3
- export * from './SchemaNameToValidatorMap';
4
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA;AAC1B,cAAc,eAAe,CAAA;AAC7B,cAAc,4BAA4B,CAAA"}