@teambit/semantics.entities.semantic-schema 0.0.82 → 0.0.84

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,9 +1,17 @@
1
1
  import { SchemaNodeConstructor } from './schema-node-constructor';
2
+ type GetSchemaFunc = () => SchemaNodeConstructor[];
2
3
  export declare class SchemaRegistry {
3
4
  private static instance;
4
5
  private _schemas;
6
+ private _getSchemas;
5
7
  private constructor();
8
+ static registerGetSchemas(getSchemas: GetSchemaFunc): void;
9
+ /**
10
+ * @deprecated use registerGetSchemas instead
11
+ * registerGetSchemas is better for performance as it lazy-loads the schemas.
12
+ */
6
13
  static register(schema: SchemaNodeConstructor): void;
7
14
  static schemas(): Record<string, SchemaNodeConstructor>;
8
15
  static fromObject(obj: Record<string, any>): any;
9
16
  }
17
+ export {};
@@ -13,21 +13,40 @@ function _unknownSchemaFactory() {
13
13
  }
14
14
  class SchemaRegistry {
15
15
  static instance = new SchemaRegistry();
16
+ _getSchemas = [];
16
17
  constructor() {
17
18
  this._schemas = {};
18
19
  }
20
+ static registerGetSchemas(getSchemas) {
21
+ this.instance._getSchemas.push(getSchemas);
22
+ }
23
+
24
+ /**
25
+ * @deprecated use registerGetSchemas instead
26
+ * registerGetSchemas is better for performance as it lazy-loads the schemas.
27
+ */
19
28
  static register(schema) {
20
29
  if (this.instance._schemas[schema.name]) return;
21
30
  this.instance._schemas[schema.name] = schema;
22
31
  }
23
32
  static schemas() {
33
+ // this happens only once. as soon as the function is called, it registers all the schemas.
34
+ this.instance._getSchemas.forEach(getSchemas => {
35
+ const schemas = getSchemas();
36
+ schemas.forEach(schema => {
37
+ if (this.instance._schemas[schema.name]) return;
38
+ this.instance._schemas[schema.name] = schema;
39
+ });
40
+ });
41
+ this.instance._getSchemas = [];
24
42
  return this.instance._schemas;
25
43
  }
26
44
  static fromObject(obj) {
27
45
  if (!obj.__schema) {
28
46
  throw new Error(`fatal: "__schema" is missing, make sure the transformer is set on SchemaNode type`);
29
47
  }
30
- const SchemaClass = this.instance._schemas[obj.__schema];
48
+ const schemas = this.schemas();
49
+ const SchemaClass = schemas[obj.__schema];
31
50
  if (!SchemaClass) {
32
51
  // for backward and forward compatibility, to not break the users, it's better to return an unknown schema than throwing.
33
52
  return _unknownSchemaFactory().UnknownSchemaFactory.create(obj.location || {
@@ -1 +1 @@
1
- {"version":3,"names":["_unknownSchemaFactory","data","require","SchemaRegistry","instance","constructor","_schemas","register","schema","name","schemas","fromObject","obj","__schema","Error","SchemaClass","UnknownSchemaFactory","create","location","path","line","character","exports"],"sources":["schema-registry.ts"],"sourcesContent":["import { SchemaNodeConstructor } from './schema-node-constructor';\nimport { UnknownSchemaFactory } from './unknown-schema-factory';\n\nexport class SchemaRegistry {\n private static instance = new SchemaRegistry();\n private _schemas: Record<string, SchemaNodeConstructor>;\n\n private constructor() {\n this._schemas = {};\n }\n\n static register(schema: SchemaNodeConstructor) {\n if (this.instance._schemas[schema.name]) return;\n this.instance._schemas[schema.name] = schema;\n }\n\n static schemas() {\n return this.instance._schemas;\n }\n\n static fromObject(obj: Record<string, any>) {\n if (!obj.__schema) {\n throw new Error(`fatal: \"__schema\" is missing, make sure the transformer is set on SchemaNode type`);\n }\n\n const SchemaClass = this.instance._schemas[obj.__schema];\n if (!SchemaClass) {\n // for backward and forward compatibility, to not break the users, it's better to return an unknown schema than throwing.\n return UnknownSchemaFactory.create(obj.location || { path: '', line: 0, character: 0 }, obj.__schema, obj);\n }\n return SchemaClass.fromObject(obj);\n }\n}\n"],"mappings":";;;;;;AACA,SAAAA,sBAAA;EAAA,MAAAC,IAAA,GAAAC,OAAA;EAAAF,qBAAA,YAAAA,CAAA;IAAA,OAAAC,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAEO,MAAME,cAAc,CAAC;EAC1B,OAAeC,QAAQ,GAAG,IAAID,cAAc,CAAC,CAAC;EAGtCE,WAAWA,CAAA,EAAG;IACpB,IAAI,CAACC,QAAQ,GAAG,CAAC,CAAC;EACpB;EAEA,OAAOC,QAAQA,CAACC,MAA6B,EAAE;IAC7C,IAAI,IAAI,CAACJ,QAAQ,CAACE,QAAQ,CAACE,MAAM,CAACC,IAAI,CAAC,EAAE;IACzC,IAAI,CAACL,QAAQ,CAACE,QAAQ,CAACE,MAAM,CAACC,IAAI,CAAC,GAAGD,MAAM;EAC9C;EAEA,OAAOE,OAAOA,CAAA,EAAG;IACf,OAAO,IAAI,CAACN,QAAQ,CAACE,QAAQ;EAC/B;EAEA,OAAOK,UAAUA,CAACC,GAAwB,EAAE;IAC1C,IAAI,CAACA,GAAG,CAACC,QAAQ,EAAE;MACjB,MAAM,IAAIC,KAAK,CAAC,mFAAmF,CAAC;IACtG;IAEA,MAAMC,WAAW,GAAG,IAAI,CAACX,QAAQ,CAACE,QAAQ,CAACM,GAAG,CAACC,QAAQ,CAAC;IACxD,IAAI,CAACE,WAAW,EAAE;MAChB;MACA,OAAOC,4CAAoB,CAACC,MAAM,CAACL,GAAG,CAACM,QAAQ,IAAI;QAAEC,IAAI,EAAE,EAAE;QAAEC,IAAI,EAAE,CAAC;QAAEC,SAAS,EAAE;MAAE,CAAC,EAAET,GAAG,CAACC,QAAQ,EAAED,GAAG,CAAC;IAC5G;IACA,OAAOG,WAAW,CAACJ,UAAU,CAACC,GAAG,CAAC;EACpC;AACF;AAACU,OAAA,CAAAnB,cAAA,GAAAA,cAAA","ignoreList":[]}
1
+ {"version":3,"names":["_unknownSchemaFactory","data","require","SchemaRegistry","instance","_getSchemas","constructor","_schemas","registerGetSchemas","getSchemas","push","register","schema","name","schemas","forEach","fromObject","obj","__schema","Error","SchemaClass","UnknownSchemaFactory","create","location","path","line","character","exports"],"sources":["schema-registry.ts"],"sourcesContent":["import { SchemaNodeConstructor } from './schema-node-constructor';\nimport { UnknownSchemaFactory } from './unknown-schema-factory';\n\ntype GetSchemaFunc = () => SchemaNodeConstructor[];\n\nexport class SchemaRegistry {\n private static instance = new SchemaRegistry();\n private _schemas: Record<string, SchemaNodeConstructor>;\n private _getSchemas: GetSchemaFunc[] = [];\n\n private constructor() {\n this._schemas = {};\n }\n\n static registerGetSchemas(getSchemas: GetSchemaFunc) {\n this.instance._getSchemas.push(getSchemas);\n }\n\n /**\n * @deprecated use registerGetSchemas instead\n * registerGetSchemas is better for performance as it lazy-loads the schemas.\n */\n static register(schema: SchemaNodeConstructor) {\n if (this.instance._schemas[schema.name]) return;\n this.instance._schemas[schema.name] = schema;\n }\n\n static schemas() {\n // this happens only once. as soon as the function is called, it registers all the schemas.\n this.instance._getSchemas.forEach((getSchemas) => {\n const schemas = getSchemas();\n schemas.forEach((schema) => {\n if (this.instance._schemas[schema.name]) return;\n this.instance._schemas[schema.name] = schema;\n });\n });\n this.instance._getSchemas = [];\n return this.instance._schemas;\n }\n\n static fromObject(obj: Record<string, any>) {\n if (!obj.__schema) {\n throw new Error(`fatal: \"__schema\" is missing, make sure the transformer is set on SchemaNode type`);\n }\n const schemas = this.schemas();\n const SchemaClass = schemas[obj.__schema];\n if (!SchemaClass) {\n // for backward and forward compatibility, to not break the users, it's better to return an unknown schema than throwing.\n return UnknownSchemaFactory.create(obj.location || { path: '', line: 0, character: 0 }, obj.__schema, obj);\n }\n return SchemaClass.fromObject(obj);\n }\n}\n"],"mappings":";;;;;;AACA,SAAAA,sBAAA;EAAA,MAAAC,IAAA,GAAAC,OAAA;EAAAF,qBAAA,YAAAA,CAAA;IAAA,OAAAC,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAIO,MAAME,cAAc,CAAC;EAC1B,OAAeC,QAAQ,GAAG,IAAID,cAAc,CAAC,CAAC;EAEtCE,WAAW,GAAoB,EAAE;EAEjCC,WAAWA,CAAA,EAAG;IACpB,IAAI,CAACC,QAAQ,GAAG,CAAC,CAAC;EACpB;EAEA,OAAOC,kBAAkBA,CAACC,UAAyB,EAAE;IACnD,IAAI,CAACL,QAAQ,CAACC,WAAW,CAACK,IAAI,CAACD,UAAU,CAAC;EAC5C;;EAEA;AACF;AACA;AACA;EACE,OAAOE,QAAQA,CAACC,MAA6B,EAAE;IAC7C,IAAI,IAAI,CAACR,QAAQ,CAACG,QAAQ,CAACK,MAAM,CAACC,IAAI,CAAC,EAAE;IACzC,IAAI,CAACT,QAAQ,CAACG,QAAQ,CAACK,MAAM,CAACC,IAAI,CAAC,GAAGD,MAAM;EAC9C;EAEA,OAAOE,OAAOA,CAAA,EAAG;IACf;IACA,IAAI,CAACV,QAAQ,CAACC,WAAW,CAACU,OAAO,CAAEN,UAAU,IAAK;MAChD,MAAMK,OAAO,GAAGL,UAAU,CAAC,CAAC;MAC5BK,OAAO,CAACC,OAAO,CAAEH,MAAM,IAAK;QAC1B,IAAI,IAAI,CAACR,QAAQ,CAACG,QAAQ,CAACK,MAAM,CAACC,IAAI,CAAC,EAAE;QACzC,IAAI,CAACT,QAAQ,CAACG,QAAQ,CAACK,MAAM,CAACC,IAAI,CAAC,GAAGD,MAAM;MAC9C,CAAC,CAAC;IACJ,CAAC,CAAC;IACF,IAAI,CAACR,QAAQ,CAACC,WAAW,GAAG,EAAE;IAC9B,OAAO,IAAI,CAACD,QAAQ,CAACG,QAAQ;EAC/B;EAEA,OAAOS,UAAUA,CAACC,GAAwB,EAAE;IAC1C,IAAI,CAACA,GAAG,CAACC,QAAQ,EAAE;MACjB,MAAM,IAAIC,KAAK,CAAC,mFAAmF,CAAC;IACtG;IACA,MAAML,OAAO,GAAG,IAAI,CAACA,OAAO,CAAC,CAAC;IAC9B,MAAMM,WAAW,GAAGN,OAAO,CAACG,GAAG,CAACC,QAAQ,CAAC;IACzC,IAAI,CAACE,WAAW,EAAE;MAChB;MACA,OAAOC,4CAAoB,CAACC,MAAM,CAACL,GAAG,CAACM,QAAQ,IAAI;QAAEC,IAAI,EAAE,EAAE;QAAEC,IAAI,EAAE,CAAC;QAAEC,SAAS,EAAE;MAAE,CAAC,EAAET,GAAG,CAACC,QAAQ,EAAED,GAAG,CAAC;IAC5G;IACA,OAAOG,WAAW,CAACJ,UAAU,CAACC,GAAG,CAAC;EACpC;AACF;AAACU,OAAA,CAAAxB,cAAA,GAAAA,cAAA","ignoreList":[]}
@@ -32,7 +32,6 @@ class ParameterSchema extends _schemaNode().SchemaNode {
32
32
  this.isSpread = isSpread;
33
33
  this.type = type;
34
34
  this.objectBindingNodes = objectBindingNodes;
35
- this.isSpread = isSpread;
36
35
  }
37
36
  toString() {
38
37
  return `${this.name}${this.isOptional ? '?' : ''}: ${this.type.toString()}`;
@@ -1 +1 @@
1
- {"version":3,"names":["_schemaNode","data","require","_schemaRegistry","ParameterSchema","SchemaNode","getNodes","type","objectBindingNodes","constructor","location","name","isOptional","defaultValue","description","isSpread","toString","toFullSignature","options","paramStr","showDocs","paramName","length","bindingsStr","map","node","join","typeName","undefined","toObject","fromObject","obj","SchemaRegistry","exports"],"sources":["parameter.ts"],"sourcesContent":["import { SchemaLocation, SchemaNode } from '../schema-node';\nimport { SchemaRegistry } from '../schema-registry';\n\nexport class ParameterSchema<T extends SchemaNode = SchemaNode> extends SchemaNode {\n readonly type: T;\n readonly objectBindingNodes?: SchemaNode[];\n\n getNodes(): SchemaNode[] {\n return [this.type, ...(this.objectBindingNodes || [])];\n }\n\n constructor(\n readonly location: SchemaLocation,\n readonly name: string,\n type: T,\n readonly isOptional: boolean,\n readonly defaultValue?: any,\n readonly description?: string,\n objectBindingNodes?: SchemaNode[],\n readonly isSpread: boolean = false\n ) {\n super();\n this.type = type;\n this.objectBindingNodes = objectBindingNodes;\n this.isSpread = isSpread;\n }\n\n toString() {\n return `${this.name}${this.isOptional ? '?' : ''}: ${this.type.toString()}`;\n }\n\n toFullSignature(options?: { showDocs?: boolean }): string {\n let paramStr = '';\n\n if (options?.showDocs && this.description) {\n paramStr += `/** ${this.description} */\\n`;\n }\n\n if (this.isSpread) {\n paramStr += '...';\n }\n\n let paramName = '';\n\n if (this.objectBindingNodes && this.objectBindingNodes.length > 0) {\n const bindingsStr = this.objectBindingNodes.map((node) => node.toFullSignature(options)).join(', ');\n paramName += `{ ${bindingsStr} }`;\n } else {\n paramName += this.name;\n }\n\n if (this.isOptional) {\n paramName += '?';\n }\n\n paramStr += `${paramName}`;\n\n if (this.type && typeof this.type.toString === 'function') {\n const typeName = this.type.toString();\n if (typeName) {\n paramStr += `: ${typeName}`;\n }\n }\n\n if (this.defaultValue !== undefined) {\n paramStr += ` = ${this.defaultValue}`;\n }\n\n return paramStr;\n }\n\n toObject() {\n return {\n ...super.toObject(),\n name: this.name,\n type: this.type.toObject(),\n isOptional: this.isOptional,\n defaultValue: this.defaultValue,\n description: this.description,\n objectBindingNodes: this.objectBindingNodes?.map((node) => node.toObject()),\n isSpread: this.isSpread,\n };\n }\n\n static fromObject<T extends SchemaNode = SchemaNode>(obj: Record<string, any>): ParameterSchema<T> {\n const location = obj.location;\n const name = obj.name;\n const type = SchemaRegistry.fromObject(obj.type);\n const isOptional = obj.isOptional;\n const defaultValue = obj.defaultValue;\n const description = obj.description;\n const isSpread = obj.isSpread;\n const objectBindingNodes = obj.objectBindingNodes?.map((node: any) => SchemaRegistry.fromObject(node));\n return new ParameterSchema(\n location,\n name,\n type,\n isOptional,\n defaultValue,\n description,\n objectBindingNodes,\n isSpread\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_schemaNode","data","require","_schemaRegistry","ParameterSchema","SchemaNode","getNodes","type","objectBindingNodes","constructor","location","name","isOptional","defaultValue","description","isSpread","toString","toFullSignature","options","paramStr","showDocs","paramName","length","bindingsStr","map","node","join","typeName","undefined","toObject","fromObject","obj","SchemaRegistry","exports"],"sources":["parameter.ts"],"sourcesContent":["import { SchemaLocation, SchemaNode } from '../schema-node';\nimport { SchemaRegistry } from '../schema-registry';\n\nexport class ParameterSchema<T extends SchemaNode = SchemaNode> extends SchemaNode {\n readonly type: T;\n readonly objectBindingNodes?: SchemaNode[];\n\n getNodes(): SchemaNode[] {\n return [this.type, ...(this.objectBindingNodes || [])];\n }\n\n constructor(\n readonly location: SchemaLocation,\n readonly name: string,\n type: T,\n readonly isOptional: boolean,\n readonly defaultValue?: any,\n readonly description?: string,\n objectBindingNodes?: SchemaNode[],\n readonly isSpread: boolean = false\n ) {\n super();\n this.type = type;\n this.objectBindingNodes = objectBindingNodes;\n }\n\n toString() {\n return `${this.name}${this.isOptional ? '?' : ''}: ${this.type.toString()}`;\n }\n\n toFullSignature(options?: { showDocs?: boolean }): string {\n let paramStr = '';\n\n if (options?.showDocs && this.description) {\n paramStr += `/** ${this.description} */\\n`;\n }\n\n if (this.isSpread) {\n paramStr += '...';\n }\n\n let paramName = '';\n\n if (this.objectBindingNodes && this.objectBindingNodes.length > 0) {\n const bindingsStr = this.objectBindingNodes.map((node) => node.toFullSignature(options)).join(', ');\n paramName += `{ ${bindingsStr} }`;\n } else {\n paramName += this.name;\n }\n\n if (this.isOptional) {\n paramName += '?';\n }\n\n paramStr += `${paramName}`;\n\n if (this.type && typeof this.type.toString === 'function') {\n const typeName = this.type.toString();\n if (typeName) {\n paramStr += `: ${typeName}`;\n }\n }\n\n if (this.defaultValue !== undefined) {\n paramStr += ` = ${this.defaultValue}`;\n }\n\n return paramStr;\n }\n\n toObject() {\n return {\n ...super.toObject(),\n name: this.name,\n type: this.type.toObject(),\n isOptional: this.isOptional,\n defaultValue: this.defaultValue,\n description: this.description,\n objectBindingNodes: this.objectBindingNodes?.map((node) => node.toObject()),\n isSpread: this.isSpread,\n };\n }\n\n static fromObject<T extends SchemaNode = SchemaNode>(obj: Record<string, any>): ParameterSchema<T> {\n const location = obj.location;\n const name = obj.name;\n const type = SchemaRegistry.fromObject(obj.type);\n const isOptional = obj.isOptional;\n const defaultValue = obj.defaultValue;\n const description = obj.description;\n const isSpread = obj.isSpread;\n const objectBindingNodes = obj.objectBindingNodes?.map((node: any) => SchemaRegistry.fromObject(node));\n return new ParameterSchema(\n location,\n name,\n type,\n isOptional,\n defaultValue,\n description,\n objectBindingNodes,\n isSpread\n );\n }\n}\n"],"mappings":";;;;;;AAAA,SAAAA,YAAA;EAAA,MAAAC,IAAA,GAAAC,OAAA;EAAAF,WAAA,YAAAA,CAAA;IAAA,OAAAC,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAE,gBAAA;EAAA,MAAAF,IAAA,GAAAC,OAAA;EAAAC,eAAA,YAAAA,CAAA;IAAA,OAAAF,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAEO,MAAMG,eAAe,SAA4CC,wBAAU,CAAC;EAIjFC,QAAQA,CAAA,EAAiB;IACvB,OAAO,CAAC,IAAI,CAACC,IAAI,EAAE,IAAI,IAAI,CAACC,kBAAkB,IAAI,EAAE,CAAC,CAAC;EACxD;EAEAC,WAAWA,CACAC,QAAwB,EACxBC,IAAY,EACrBJ,IAAO,EACEK,UAAmB,EACnBC,YAAkB,EAClBC,WAAoB,EAC7BN,kBAAiC,EACxBO,QAAiB,GAAG,KAAK,EAClC;IACA,KAAK,CAAC,CAAC;IAAC,KATCL,QAAwB,GAAxBA,QAAwB;IAAA,KACxBC,IAAY,GAAZA,IAAY;IAAA,KAEZC,UAAmB,GAAnBA,UAAmB;IAAA,KACnBC,YAAkB,GAAlBA,YAAkB;IAAA,KAClBC,WAAoB,GAApBA,WAAoB;IAAA,KAEpBC,QAAiB,GAAjBA,QAAiB;IAG1B,IAAI,CAACR,IAAI,GAAGA,IAAI;IAChB,IAAI,CAACC,kBAAkB,GAAGA,kBAAkB;EAC9C;EAEAQ,QAAQA,CAAA,EAAG;IACT,OAAO,GAAG,IAAI,CAACL,IAAI,GAAG,IAAI,CAACC,UAAU,GAAG,GAAG,GAAG,EAAE,KAAK,IAAI,CAACL,IAAI,CAACS,QAAQ,CAAC,CAAC,EAAE;EAC7E;EAEAC,eAAeA,CAACC,OAAgC,EAAU;IACxD,IAAIC,QAAQ,GAAG,EAAE;IAEjB,IAAID,OAAO,EAAEE,QAAQ,IAAI,IAAI,CAACN,WAAW,EAAE;MACzCK,QAAQ,IAAI,OAAO,IAAI,CAACL,WAAW,OAAO;IAC5C;IAEA,IAAI,IAAI,CAACC,QAAQ,EAAE;MACjBI,QAAQ,IAAI,KAAK;IACnB;IAEA,IAAIE,SAAS,GAAG,EAAE;IAElB,IAAI,IAAI,CAACb,kBAAkB,IAAI,IAAI,CAACA,kBAAkB,CAACc,MAAM,GAAG,CAAC,EAAE;MACjE,MAAMC,WAAW,GAAG,IAAI,CAACf,kBAAkB,CAACgB,GAAG,CAAEC,IAAI,IAAKA,IAAI,CAACR,eAAe,CAACC,OAAO,CAAC,CAAC,CAACQ,IAAI,CAAC,IAAI,CAAC;MACnGL,SAAS,IAAI,KAAKE,WAAW,IAAI;IACnC,CAAC,MAAM;MACLF,SAAS,IAAI,IAAI,CAACV,IAAI;IACxB;IAEA,IAAI,IAAI,CAACC,UAAU,EAAE;MACnBS,SAAS,IAAI,GAAG;IAClB;IAEAF,QAAQ,IAAI,GAAGE,SAAS,EAAE;IAE1B,IAAI,IAAI,CAACd,IAAI,IAAI,OAAO,IAAI,CAACA,IAAI,CAACS,QAAQ,KAAK,UAAU,EAAE;MACzD,MAAMW,QAAQ,GAAG,IAAI,CAACpB,IAAI,CAACS,QAAQ,CAAC,CAAC;MACrC,IAAIW,QAAQ,EAAE;QACZR,QAAQ,IAAI,KAAKQ,QAAQ,EAAE;MAC7B;IACF;IAEA,IAAI,IAAI,CAACd,YAAY,KAAKe,SAAS,EAAE;MACnCT,QAAQ,IAAI,MAAM,IAAI,CAACN,YAAY,EAAE;IACvC;IAEA,OAAOM,QAAQ;EACjB;EAEAU,QAAQA,CAAA,EAAG;IACT,OAAO;MACL,GAAG,KAAK,CAACA,QAAQ,CAAC,CAAC;MACnBlB,IAAI,EAAE,IAAI,CAACA,IAAI;MACfJ,IAAI,EAAE,IAAI,CAACA,IAAI,CAACsB,QAAQ,CAAC,CAAC;MAC1BjB,UAAU,EAAE,IAAI,CAACA,UAAU;MAC3BC,YAAY,EAAE,IAAI,CAACA,YAAY;MAC/BC,WAAW,EAAE,IAAI,CAACA,WAAW;MAC7BN,kBAAkB,EAAE,IAAI,CAACA,kBAAkB,EAAEgB,GAAG,CAAEC,IAAI,IAAKA,IAAI,CAACI,QAAQ,CAAC,CAAC,CAAC;MAC3Ed,QAAQ,EAAE,IAAI,CAACA;IACjB,CAAC;EACH;EAEA,OAAOe,UAAUA,CAAoCC,GAAwB,EAAsB;IACjG,MAAMrB,QAAQ,GAAGqB,GAAG,CAACrB,QAAQ;IAC7B,MAAMC,IAAI,GAAGoB,GAAG,CAACpB,IAAI;IACrB,MAAMJ,IAAI,GAAGyB,gCAAc,CAACF,UAAU,CAACC,GAAG,CAACxB,IAAI,CAAC;IAChD,MAAMK,UAAU,GAAGmB,GAAG,CAACnB,UAAU;IACjC,MAAMC,YAAY,GAAGkB,GAAG,CAAClB,YAAY;IACrC,MAAMC,WAAW,GAAGiB,GAAG,CAACjB,WAAW;IACnC,MAAMC,QAAQ,GAAGgB,GAAG,CAAChB,QAAQ;IAC7B,MAAMP,kBAAkB,GAAGuB,GAAG,CAACvB,kBAAkB,EAAEgB,GAAG,CAAEC,IAAS,IAAKO,gCAAc,CAACF,UAAU,CAACL,IAAI,CAAC,CAAC;IACtG,OAAO,IAAIrB,eAAe,CACxBM,QAAQ,EACRC,IAAI,EACJJ,IAAI,EACJK,UAAU,EACVC,YAAY,EACZC,WAAW,EACXN,kBAAkB,EAClBO,QACF,CAAC;EACH;AACF;AAACkB,OAAA,CAAA7B,eAAA,GAAAA,eAAA","ignoreList":[]}
package/package.json CHANGED
@@ -1,17 +1,17 @@
1
1
  {
2
2
  "name": "@teambit/semantics.entities.semantic-schema",
3
- "version": "0.0.82",
3
+ "version": "0.0.84",
4
4
  "homepage": "https://bit.cloud/teambit/semantics/entities/semantic-schema",
5
5
  "main": "dist/index.js",
6
6
  "componentId": {
7
7
  "scope": "teambit.semantics",
8
8
  "name": "entities/semantic-schema",
9
- "version": "0.0.82"
9
+ "version": "0.0.84"
10
10
  },
11
11
  "dependencies": {
12
12
  "chalk": "4.1.2",
13
13
  "lodash": "4.17.21",
14
- "@teambit/component-id": "1.2.2"
14
+ "@teambit/component-id": "1.2.3"
15
15
  },
16
16
  "devDependencies": {
17
17
  "@types/lodash": "4.14.165",
@@ -1,20 +1,40 @@
1
1
  import { SchemaNodeConstructor } from './schema-node-constructor';
2
2
  import { UnknownSchemaFactory } from './unknown-schema-factory';
3
3
 
4
+ type GetSchemaFunc = () => SchemaNodeConstructor[];
5
+
4
6
  export class SchemaRegistry {
5
7
  private static instance = new SchemaRegistry();
6
8
  private _schemas: Record<string, SchemaNodeConstructor>;
9
+ private _getSchemas: GetSchemaFunc[] = [];
7
10
 
8
11
  private constructor() {
9
12
  this._schemas = {};
10
13
  }
11
14
 
15
+ static registerGetSchemas(getSchemas: GetSchemaFunc) {
16
+ this.instance._getSchemas.push(getSchemas);
17
+ }
18
+
19
+ /**
20
+ * @deprecated use registerGetSchemas instead
21
+ * registerGetSchemas is better for performance as it lazy-loads the schemas.
22
+ */
12
23
  static register(schema: SchemaNodeConstructor) {
13
24
  if (this.instance._schemas[schema.name]) return;
14
25
  this.instance._schemas[schema.name] = schema;
15
26
  }
16
27
 
17
28
  static schemas() {
29
+ // this happens only once. as soon as the function is called, it registers all the schemas.
30
+ this.instance._getSchemas.forEach((getSchemas) => {
31
+ const schemas = getSchemas();
32
+ schemas.forEach((schema) => {
33
+ if (this.instance._schemas[schema.name]) return;
34
+ this.instance._schemas[schema.name] = schema;
35
+ });
36
+ });
37
+ this.instance._getSchemas = [];
18
38
  return this.instance._schemas;
19
39
  }
20
40
 
@@ -22,8 +42,8 @@ export class SchemaRegistry {
22
42
  if (!obj.__schema) {
23
43
  throw new Error(`fatal: "__schema" is missing, make sure the transformer is set on SchemaNode type`);
24
44
  }
25
-
26
- const SchemaClass = this.instance._schemas[obj.__schema];
45
+ const schemas = this.schemas();
46
+ const SchemaClass = schemas[obj.__schema];
27
47
  if (!SchemaClass) {
28
48
  // for backward and forward compatibility, to not break the users, it's better to return an unknown schema than throwing.
29
49
  return UnknownSchemaFactory.create(obj.location || { path: '', line: 0, character: 0 }, obj.__schema, obj);
@@ -22,7 +22,6 @@ export class ParameterSchema<T extends SchemaNode = SchemaNode> extends SchemaNo
22
22
  super();
23
23
  this.type = type;
24
24
  this.objectBindingNodes = objectBindingNodes;
25
- this.isSpread = isSpread;
26
25
  }
27
26
 
28
27
  toString() {