@teambit/semantics.entities.semantic-schema 0.0.100 → 0.0.101

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.
Files changed (41) hide show
  1. package/dist/index.d.ts +2 -0
  2. package/dist/index.js +42 -0
  3. package/dist/index.js.map +1 -1
  4. package/dist/schema-diff-members.d.ts +3 -0
  5. package/dist/schema-diff-members.js +171 -0
  6. package/dist/schema-diff-members.js.map +1 -0
  7. package/dist/schema-diff.d.ts +13 -0
  8. package/dist/schema-diff.js +138 -0
  9. package/dist/schema-diff.js.map +1 -0
  10. package/dist/schema-node.d.ts +7 -0
  11. package/dist/schema-node.js +49 -0
  12. package/dist/schema-node.js.map +1 -1
  13. package/dist/schemas/class.d.ts +2 -0
  14. package/dist/schemas/class.js +11 -0
  15. package/dist/schemas/class.js.map +1 -1
  16. package/dist/schemas/enum.d.ts +2 -0
  17. package/dist/schemas/enum.js +55 -0
  18. package/dist/schemas/enum.js.map +1 -1
  19. package/dist/schemas/function-like.d.ts +9 -0
  20. package/dist/schemas/function-like.js +300 -0
  21. package/dist/schemas/function-like.js.map +1 -1
  22. package/dist/schemas/interface.d.ts +2 -0
  23. package/dist/schemas/interface.js +11 -0
  24. package/dist/schemas/interface.js.map +1 -1
  25. package/dist/schemas/type.d.ts +2 -0
  26. package/dist/schemas/type.js +25 -0
  27. package/dist/schemas/type.js.map +1 -1
  28. package/dist/schemas/variable-like.d.ts +2 -0
  29. package/dist/schemas/variable-like.js +60 -0
  30. package/dist/schemas/variable-like.js.map +1 -1
  31. package/index.ts +2 -0
  32. package/package.json +2 -2
  33. package/schema-diff-members.ts +164 -0
  34. package/schema-diff.ts +168 -0
  35. package/schema-node.ts +34 -0
  36. package/schemas/class.ts +7 -0
  37. package/schemas/enum.ts +46 -0
  38. package/schemas/function-like.ts +277 -0
  39. package/schemas/interface.ts +7 -0
  40. package/schemas/type.ts +18 -0
  41. package/schemas/variable-like.ts +54 -0
@@ -18,6 +18,13 @@ function _schemaNode() {
18
18
  };
19
19
  return data;
20
20
  }
21
+ function _schemaDiffMembers() {
22
+ const data = require("../schema-diff-members");
23
+ _schemaDiffMembers = function () {
24
+ return data;
25
+ };
26
+ return data;
27
+ }
21
28
  function _docs() {
22
29
  const data = require("./docs");
23
30
  _docs = function () {
@@ -92,6 +99,10 @@ class InterfaceSchema extends _schemaNode().SchemaNode {
92
99
  typeParams: this.typeParams
93
100
  };
94
101
  }
102
+ diff(other) {
103
+ if (!(other instanceof InterfaceSchema)) return super.diff(other);
104
+ return (0, _schemaDiffMembers().diffMembers)(this.toObject(), other.toObject(), this, other);
105
+ }
95
106
  static fromObject(obj) {
96
107
  const location = obj.location;
97
108
  const name = obj.name;
@@ -1 +1 @@
1
- {"version":3,"names":["_chalk","data","_interopRequireDefault","require","_schemaNode","_docs","_expressionWithArguments","_schemaRegistry","e","__esModule","default","InterfaceSchema","SchemaNode","constructor","location","name","signature","extendsNodes","members","doc","typeParams","getNodes","toString","options","boldUnderline","color","chalk","bold","underline","str","membersStr","map","m","join","toFullSignature","result","showDocs","interfaceDeclaration","length","extendsStr","node","member","memberStr","split","line","toObject","fromObject","obj","ExpressionWithTypeArgumentsSchema","SchemaRegistry","DocSchema","undefined","exports"],"sources":["interface.ts"],"sourcesContent":["import chalk from 'chalk';\nimport type { SchemaLocation } from '../schema-node';\nimport { SchemaNode } from '../schema-node';\nimport { DocSchema } from './docs';\nimport { ExpressionWithTypeArgumentsSchema } from './expression-with-arguments';\nimport { SchemaRegistry } from '../schema-registry';\n\nexport class InterfaceSchema extends SchemaNode {\n readonly members: SchemaNode[];\n readonly doc?: DocSchema;\n\n constructor(\n readonly location: SchemaLocation,\n readonly name: string,\n readonly signature: string,\n readonly extendsNodes: ExpressionWithTypeArgumentsSchema[],\n members: SchemaNode[],\n doc?: DocSchema,\n readonly typeParams?: string[]\n ) {\n super();\n this.members = members;\n this.doc = doc;\n }\n\n getNodes() {\n return this.members;\n }\n\n toString(options?: { color?: boolean }): string {\n const boldUnderline = options?.color ? chalk.bold.underline : (str: string) => str;\n const membersStr = this.members.map((m) => `* ${m.toString(options)}`).join('\\n');\n return `${boldUnderline(this.name)}\\n${membersStr}`;\n }\n\n toFullSignature(options?: { showDocs?: boolean }): string {\n let result = '';\n\n if (options?.showDocs && this.doc) {\n result += `${this.doc.toFullSignature()}\\n`;\n }\n\n let interfaceDeclaration = `interface ${this.name}`;\n\n if (this.typeParams && this.typeParams.length > 0) {\n interfaceDeclaration += `<${this.typeParams.join(', ')}>`;\n }\n\n if (this.extendsNodes && this.extendsNodes.length > 0) {\n const extendsStr = this.extendsNodes.map((node) => node.toFullSignature(options)).join(', ');\n interfaceDeclaration += ` extends ${extendsStr}`;\n }\n\n result += `${interfaceDeclaration} {\\n`;\n\n const membersStr = this.members\n .map((member) => {\n const memberStr = member.toFullSignature(options);\n return memberStr\n .split('\\n')\n .map((line) => ` ${line}`)\n .join('\\n');\n })\n .join('\\n');\n\n result += `${membersStr}\\n`;\n\n result += `}`;\n\n return result;\n }\n\n toObject() {\n return {\n ...super.toObject(),\n name: this.name,\n members: this.members.map((member) => member.toObject()),\n doc: this.doc?.toObject(),\n signature: this.signature,\n extendsNodes: this.extendsNodes?.map((node) => node.toObject()),\n typeParams: this.typeParams,\n };\n }\n\n static fromObject(obj: Record<string, any>): InterfaceSchema {\n const location = obj.location;\n const name = obj.name;\n const signature = obj.signature;\n const extendsNodes = obj.extendsNodes?.map((node: any) => ExpressionWithTypeArgumentsSchema.fromObject(node));\n const members = obj.members.map((member: any) => SchemaRegistry.fromObject(member));\n const doc = obj.doc ? DocSchema.fromObject(obj.doc) : undefined;\n const typeParams = obj.typeParams;\n return new InterfaceSchema(location, name, signature, extendsNodes, members, doc, typeParams);\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_chalk","data","_interopRequireDefault","require","_schemaNode","_schemaDiffMembers","_docs","_expressionWithArguments","_schemaRegistry","e","__esModule","default","InterfaceSchema","SchemaNode","constructor","location","name","signature","extendsNodes","members","doc","typeParams","getNodes","toString","options","boldUnderline","color","chalk","bold","underline","str","membersStr","map","m","join","toFullSignature","result","showDocs","interfaceDeclaration","length","extendsStr","node","member","memberStr","split","line","toObject","diff","other","diffMembers","fromObject","obj","ExpressionWithTypeArgumentsSchema","SchemaRegistry","DocSchema","undefined","exports"],"sources":["interface.ts"],"sourcesContent":["import chalk from 'chalk';\nimport type { SchemaLocation } from '../schema-node';\nimport { SchemaNode } from '../schema-node';\nimport type { SchemaChangeFact } from '../schema-diff';\nimport { diffMembers } from '../schema-diff-members';\nimport { DocSchema } from './docs';\nimport { ExpressionWithTypeArgumentsSchema } from './expression-with-arguments';\nimport { SchemaRegistry } from '../schema-registry';\n\nexport class InterfaceSchema extends SchemaNode {\n readonly members: SchemaNode[];\n readonly doc?: DocSchema;\n\n constructor(\n readonly location: SchemaLocation,\n readonly name: string,\n readonly signature: string,\n readonly extendsNodes: ExpressionWithTypeArgumentsSchema[],\n members: SchemaNode[],\n doc?: DocSchema,\n readonly typeParams?: string[]\n ) {\n super();\n this.members = members;\n this.doc = doc;\n }\n\n getNodes() {\n return this.members;\n }\n\n toString(options?: { color?: boolean }): string {\n const boldUnderline = options?.color ? chalk.bold.underline : (str: string) => str;\n const membersStr = this.members.map((m) => `* ${m.toString(options)}`).join('\\n');\n return `${boldUnderline(this.name)}\\n${membersStr}`;\n }\n\n toFullSignature(options?: { showDocs?: boolean }): string {\n let result = '';\n\n if (options?.showDocs && this.doc) {\n result += `${this.doc.toFullSignature()}\\n`;\n }\n\n let interfaceDeclaration = `interface ${this.name}`;\n\n if (this.typeParams && this.typeParams.length > 0) {\n interfaceDeclaration += `<${this.typeParams.join(', ')}>`;\n }\n\n if (this.extendsNodes && this.extendsNodes.length > 0) {\n const extendsStr = this.extendsNodes.map((node) => node.toFullSignature(options)).join(', ');\n interfaceDeclaration += ` extends ${extendsStr}`;\n }\n\n result += `${interfaceDeclaration} {\\n`;\n\n const membersStr = this.members\n .map((member) => {\n const memberStr = member.toFullSignature(options);\n return memberStr\n .split('\\n')\n .map((line) => ` ${line}`)\n .join('\\n');\n })\n .join('\\n');\n\n result += `${membersStr}\\n`;\n\n result += `}`;\n\n return result;\n }\n\n toObject() {\n return {\n ...super.toObject(),\n name: this.name,\n members: this.members.map((member) => member.toObject()),\n doc: this.doc?.toObject(),\n signature: this.signature,\n extendsNodes: this.extendsNodes?.map((node) => node.toObject()),\n typeParams: this.typeParams,\n };\n }\n\n diff(other: SchemaNode): SchemaChangeFact[] {\n if (!(other instanceof InterfaceSchema)) return super.diff(other);\n return diffMembers(this.toObject(), other.toObject(), this, other);\n }\n\n static fromObject(obj: Record<string, any>): InterfaceSchema {\n const location = obj.location;\n const name = obj.name;\n const signature = obj.signature;\n const extendsNodes = obj.extendsNodes?.map((node: any) => ExpressionWithTypeArgumentsSchema.fromObject(node));\n const members = obj.members.map((member: any) => SchemaRegistry.fromObject(member));\n const doc = obj.doc ? DocSchema.fromObject(obj.doc) : undefined;\n const typeParams = obj.typeParams;\n return new InterfaceSchema(location, name, signature, extendsNodes, members, doc, typeParams);\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1,5 +1,6 @@
1
1
  import type { SchemaLocation } from '../schema-node';
2
2
  import { SchemaNode } from '../schema-node';
3
+ import type { SchemaChangeFact } from '../schema-diff';
3
4
  import { DocSchema } from './docs';
4
5
  export declare class TypeSchema extends SchemaNode {
5
6
  readonly location: SchemaLocation;
@@ -20,5 +21,6 @@ export declare class TypeSchema extends SchemaNode {
20
21
  type: Record<string, any>;
21
22
  signature: string;
22
23
  };
24
+ diff(other: SchemaNode): SchemaChangeFact[];
23
25
  static fromObject(obj: Record<string, any>): TypeSchema;
24
26
  }
@@ -18,6 +18,13 @@ function _schemaNode() {
18
18
  };
19
19
  return data;
20
20
  }
21
+ function _schemaDiff() {
22
+ const data = require("../schema-diff");
23
+ _schemaDiff = function () {
24
+ return data;
25
+ };
26
+ return data;
27
+ }
21
28
  function _docs() {
22
29
  const data = require("./docs");
23
30
  _docs = function () {
@@ -66,6 +73,24 @@ class TypeSchema extends _schemaNode().SchemaNode {
66
73
  signature: this.signature
67
74
  };
68
75
  }
76
+ diff(other) {
77
+ if (!(other instanceof TypeSchema)) return super.diff(other);
78
+ const facts = [];
79
+ if (!(0, _schemaDiff().typesAreSemanticallyEqual)(this.type.toObject(), other.type.toObject())) {
80
+ facts.push({
81
+ changeKind: 'type-definition-changed',
82
+ description: 'type definition changed',
83
+ context: {
84
+ fromSignature: this.signature,
85
+ toSignature: other.signature
86
+ },
87
+ from: this.signature,
88
+ to: other.signature
89
+ });
90
+ }
91
+ facts.push(...(0, _schemaDiff().diffDoc)(this.doc?.toObject(), other.doc?.toObject()));
92
+ return facts;
93
+ }
69
94
  static fromObject(obj) {
70
95
  const location = obj.location;
71
96
  const name = obj.name;
@@ -1 +1 @@
1
- {"version":3,"names":["_chalk","data","_interopRequireDefault","require","_schemaNode","_docs","_schemaRegistry","e","__esModule","default","TypeSchema","SchemaNode","constructor","location","name","type","signature","doc","toString","options","bold","color","chalk","str","toFullSignature","typeSignature","showDocs","docString","getNodes","toObject","fromObject","obj","SchemaRegistry","DocSchema","undefined","exports"],"sources":["type.ts"],"sourcesContent":["import chalk from 'chalk';\nimport type { SchemaLocation } from '../schema-node';\nimport { SchemaNode } from '../schema-node';\nimport { DocSchema } from './docs';\nimport { SchemaRegistry } from '../schema-registry';\n\nexport class TypeSchema extends SchemaNode {\n readonly type: SchemaNode;\n readonly doc?: DocSchema;\n\n constructor(\n readonly location: SchemaLocation,\n readonly name: string,\n type: SchemaNode,\n readonly signature: string,\n doc?: DocSchema\n ) {\n super();\n this.type = type;\n this.doc = doc;\n }\n\n toString(options?: { color?: boolean }) {\n const bold = options?.color ? chalk.bold : (str: string) => str;\n return `type ${bold(this.name)}: ${this.type.toString(options)}`;\n }\n\n toFullSignature(options?: { showDocs?: boolean }): string {\n const typeSignature = this.type.toFullSignature(options);\n\n let signature = `type ${this.name}: ${typeSignature}`;\n\n if (options?.showDocs && this.doc) {\n const docString = this.doc.toFullSignature();\n signature = `${docString}\\n${signature}`;\n }\n\n return signature;\n }\n\n getNodes() {\n return [this.type];\n }\n\n toObject() {\n return {\n ...super.toObject(),\n name: this.name,\n type: this.type.toObject(),\n signature: this.signature,\n };\n }\n\n static fromObject(obj: Record<string, any>): TypeSchema {\n const location = obj.location;\n const name = obj.name;\n const type = SchemaRegistry.fromObject(obj.type);\n const signature = obj.signature;\n const doc = obj.doc ? DocSchema.fromObject(obj.doc) : undefined;\n return new TypeSchema(location, name, type, signature, doc);\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_chalk","data","_interopRequireDefault","require","_schemaNode","_schemaDiff","_docs","_schemaRegistry","e","__esModule","default","TypeSchema","SchemaNode","constructor","location","name","type","signature","doc","toString","options","bold","color","chalk","str","toFullSignature","typeSignature","showDocs","docString","getNodes","toObject","diff","other","facts","typesAreSemanticallyEqual","push","changeKind","description","context","fromSignature","toSignature","from","to","diffDoc","fromObject","obj","SchemaRegistry","DocSchema","undefined","exports"],"sources":["type.ts"],"sourcesContent":["import chalk from 'chalk';\nimport type { SchemaLocation } from '../schema-node';\nimport { SchemaNode } from '../schema-node';\nimport type { SchemaChangeFact } from '../schema-diff';\nimport { typesAreSemanticallyEqual, diffDoc } from '../schema-diff';\nimport { DocSchema } from './docs';\nimport { SchemaRegistry } from '../schema-registry';\n\nexport class TypeSchema extends SchemaNode {\n readonly type: SchemaNode;\n readonly doc?: DocSchema;\n\n constructor(\n readonly location: SchemaLocation,\n readonly name: string,\n type: SchemaNode,\n readonly signature: string,\n doc?: DocSchema\n ) {\n super();\n this.type = type;\n this.doc = doc;\n }\n\n toString(options?: { color?: boolean }) {\n const bold = options?.color ? chalk.bold : (str: string) => str;\n return `type ${bold(this.name)}: ${this.type.toString(options)}`;\n }\n\n toFullSignature(options?: { showDocs?: boolean }): string {\n const typeSignature = this.type.toFullSignature(options);\n\n let signature = `type ${this.name}: ${typeSignature}`;\n\n if (options?.showDocs && this.doc) {\n const docString = this.doc.toFullSignature();\n signature = `${docString}\\n${signature}`;\n }\n\n return signature;\n }\n\n getNodes() {\n return [this.type];\n }\n\n toObject() {\n return {\n ...super.toObject(),\n name: this.name,\n type: this.type.toObject(),\n signature: this.signature,\n };\n }\n\n diff(other: SchemaNode): SchemaChangeFact[] {\n if (!(other instanceof TypeSchema)) return super.diff(other);\n const facts: SchemaChangeFact[] = [];\n if (!typesAreSemanticallyEqual(this.type.toObject(), other.type.toObject())) {\n facts.push({\n changeKind: 'type-definition-changed',\n description: 'type definition changed',\n context: { fromSignature: this.signature, toSignature: other.signature },\n from: this.signature,\n to: other.signature,\n });\n }\n facts.push(...diffDoc(this.doc?.toObject(), other.doc?.toObject()));\n return facts;\n }\n\n static fromObject(obj: Record<string, any>): TypeSchema {\n const location = obj.location;\n const name = obj.name;\n const type = SchemaRegistry.fromObject(obj.type);\n const signature = obj.signature;\n const doc = obj.doc ? DocSchema.fromObject(obj.doc) : undefined;\n return new TypeSchema(location, name, type, signature, doc);\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1,5 +1,6 @@
1
1
  import type { SchemaLocation } from '../schema-node';
2
2
  import { SchemaNode } from '../schema-node';
3
+ import type { SchemaChangeFact } from '../schema-diff';
3
4
  import { DocSchema } from './docs';
4
5
  /**
5
6
  * can be also a property or property-signature
@@ -44,5 +45,6 @@ export declare class VariableLikeSchema extends SchemaNode {
44
45
  } | undefined;
45
46
  defaultValue: string | undefined;
46
47
  };
48
+ diff(other: SchemaNode): SchemaChangeFact[];
47
49
  static fromObject(obj: Record<string, any>): VariableLikeSchema;
48
50
  }
@@ -18,6 +18,13 @@ function _schemaNode() {
18
18
  };
19
19
  return data;
20
20
  }
21
+ function _schemaDiff() {
22
+ const data = require("../schema-diff");
23
+ _schemaDiff = function () {
24
+ return data;
25
+ };
26
+ return data;
27
+ }
21
28
  function _docs() {
22
29
  const data = require("./docs");
23
30
  _docs = function () {
@@ -79,6 +86,59 @@ class VariableLikeSchema extends _schemaNode().SchemaNode {
79
86
  defaultValue: this.defaultValue
80
87
  };
81
88
  }
89
+ diff(other) {
90
+ if (!(other instanceof VariableLikeSchema)) return super.diff(other);
91
+ const facts = [];
92
+ if (!(0, _schemaDiff().typesAreSemanticallyEqual)(this.type.toObject(), other.type.toObject())) {
93
+ facts.push({
94
+ changeKind: 'type-annotation-changed',
95
+ description: `type changed: ${(0, _schemaDiff().typeStr)(this.type.toObject())} → ${(0, _schemaDiff().typeStr)(other.type.toObject())}`,
96
+ context: {
97
+ fromType: (0, _schemaDiff().typeStr)(this.type.toObject()),
98
+ toType: (0, _schemaDiff().typeStr)(other.type.toObject()),
99
+ position: 'variable'
100
+ },
101
+ from: (0, _schemaDiff().typeStr)(this.type.toObject()),
102
+ to: (0, _schemaDiff().typeStr)(other.type.toObject())
103
+ });
104
+ }
105
+ if (this.isOptional && !other.isOptional) {
106
+ facts.push({
107
+ changeKind: 'became-required',
108
+ description: 'became required (was optional)',
109
+ context: {
110
+ position: 'variable'
111
+ },
112
+ from: 'optional',
113
+ to: 'required'
114
+ });
115
+ } else if (!this.isOptional && other.isOptional) {
116
+ facts.push({
117
+ changeKind: 'became-optional',
118
+ description: 'became optional (was required)',
119
+ context: {
120
+ position: 'variable'
121
+ },
122
+ from: 'required',
123
+ to: 'optional'
124
+ });
125
+ }
126
+ if (this.defaultValue !== other.defaultValue) {
127
+ const changeKind = this.defaultValue === undefined ? 'parameter-default-added' : other.defaultValue === undefined ? 'parameter-default-removed' : 'parameter-default-changed';
128
+ facts.push({
129
+ changeKind,
130
+ description: `default value changed: ${this.defaultValue ?? 'none'} → ${other.defaultValue ?? 'none'}`,
131
+ context: {
132
+ previousDefault: this.defaultValue,
133
+ newDefault: other.defaultValue
134
+ },
135
+ from: this.defaultValue,
136
+ to: other.defaultValue
137
+ });
138
+ }
139
+ facts.push(...(0, _schemaDiff().diffDoc)(this.doc?.toObject(), other.doc?.toObject()));
140
+ return facts;
141
+ }
82
142
  static fromObject(obj) {
83
143
  const location = obj.location;
84
144
  const name = obj.name;
@@ -1 +1 @@
1
- {"version":3,"names":["_chalk","data","_interopRequireDefault","require","_schemaNode","_docs","_schemaRegistry","e","__esModule","default","VariableLikeSchema","SchemaNode","displaySchemaName","constructor","location","name","signature","type","isOptional","doc","defaultValue","getNodes","toString","options","bold","color","chalk","str","toFullSignature","namePart","typeSignature","undefined","showDocs","docString","toObject","fromObject","obj","SchemaRegistry","DocSchema","exports"],"sources":["variable-like.ts"],"sourcesContent":["import chalk from 'chalk';\nimport type { SchemaLocation } from '../schema-node';\nimport { SchemaNode } from '../schema-node';\nimport { DocSchema } from './docs';\nimport { SchemaRegistry } from '../schema-registry';\n\n/**\n * can be also a property or property-signature\n */\nexport class VariableLikeSchema extends SchemaNode {\n type: SchemaNode;\n readonly doc?: DocSchema;\n readonly displaySchemaName = 'Variables';\n\n constructor(\n readonly location: SchemaLocation,\n readonly name: string,\n readonly signature: string,\n type: SchemaNode,\n readonly isOptional: boolean,\n doc?: DocSchema,\n readonly defaultValue?: string\n ) {\n super();\n this.type = type;\n this.doc = doc;\n }\n\n getNodes() {\n return [this.type];\n }\n\n toString(options?: { color?: boolean }) {\n const bold = options?.color ? chalk.bold : (str: string) => str;\n return `${bold(this.name)}${this.isOptional ? '?' : ''}: ${this.type.toString(options)}`;\n }\n\n toFullSignature(options?: { showDocs?: boolean }): string {\n const namePart = `${this.name}${this.isOptional ? '?' : ''}`;\n const typeSignature = this.type.toFullSignature(options);\n let signature = `${namePart}: ${typeSignature}`;\n\n if (this.defaultValue !== undefined) {\n signature += ` = ${this.defaultValue}`;\n }\n\n if (options?.showDocs && this.doc) {\n const docString = this.doc.toFullSignature();\n signature = `${docString}\\n${signature}`;\n }\n\n return signature;\n }\n\n toObject() {\n return {\n ...super.toObject(),\n name: this.name,\n signature: this.signature,\n type: this.type.toObject(),\n isOptional: this.isOptional,\n doc: this.doc?.toObject(),\n defaultValue: this.defaultValue,\n };\n }\n\n static fromObject(obj: Record<string, any>): VariableLikeSchema {\n const location = obj.location;\n const name = obj.name;\n const signature = obj.signature;\n const type = SchemaRegistry.fromObject(obj.type);\n const isOptional = obj.isOptional;\n const doc = obj.doc ? DocSchema.fromObject(obj.doc) : undefined;\n const defaultValue = obj.defaultValue;\n return new VariableLikeSchema(location, name, signature, type, isOptional, doc, defaultValue);\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_chalk","data","_interopRequireDefault","require","_schemaNode","_schemaDiff","_docs","_schemaRegistry","e","__esModule","default","VariableLikeSchema","SchemaNode","displaySchemaName","constructor","location","name","signature","type","isOptional","doc","defaultValue","getNodes","toString","options","bold","color","chalk","str","toFullSignature","namePart","typeSignature","undefined","showDocs","docString","toObject","diff","other","facts","typesAreSemanticallyEqual","push","changeKind","description","typeStr","context","fromType","toType","position","from","to","previousDefault","newDefault","diffDoc","fromObject","obj","SchemaRegistry","DocSchema","exports"],"sources":["variable-like.ts"],"sourcesContent":["import chalk from 'chalk';\nimport type { SchemaLocation } from '../schema-node';\nimport { SchemaNode } from '../schema-node';\nimport type { SchemaChangeFact } from '../schema-diff';\nimport { typesAreSemanticallyEqual, typeStr, diffDoc } from '../schema-diff';\nimport { DocSchema } from './docs';\nimport { SchemaRegistry } from '../schema-registry';\n\n/**\n * can be also a property or property-signature\n */\nexport class VariableLikeSchema extends SchemaNode {\n type: SchemaNode;\n readonly doc?: DocSchema;\n readonly displaySchemaName = 'Variables';\n\n constructor(\n readonly location: SchemaLocation,\n readonly name: string,\n readonly signature: string,\n type: SchemaNode,\n readonly isOptional: boolean,\n doc?: DocSchema,\n readonly defaultValue?: string\n ) {\n super();\n this.type = type;\n this.doc = doc;\n }\n\n getNodes() {\n return [this.type];\n }\n\n toString(options?: { color?: boolean }) {\n const bold = options?.color ? chalk.bold : (str: string) => str;\n return `${bold(this.name)}${this.isOptional ? '?' : ''}: ${this.type.toString(options)}`;\n }\n\n toFullSignature(options?: { showDocs?: boolean }): string {\n const namePart = `${this.name}${this.isOptional ? '?' : ''}`;\n const typeSignature = this.type.toFullSignature(options);\n let signature = `${namePart}: ${typeSignature}`;\n\n if (this.defaultValue !== undefined) {\n signature += ` = ${this.defaultValue}`;\n }\n\n if (options?.showDocs && this.doc) {\n const docString = this.doc.toFullSignature();\n signature = `${docString}\\n${signature}`;\n }\n\n return signature;\n }\n\n toObject() {\n return {\n ...super.toObject(),\n name: this.name,\n signature: this.signature,\n type: this.type.toObject(),\n isOptional: this.isOptional,\n doc: this.doc?.toObject(),\n defaultValue: this.defaultValue,\n };\n }\n\n diff(other: SchemaNode): SchemaChangeFact[] {\n if (!(other instanceof VariableLikeSchema)) return super.diff(other);\n const facts: SchemaChangeFact[] = [];\n if (!typesAreSemanticallyEqual(this.type.toObject(), other.type.toObject())) {\n facts.push({\n changeKind: 'type-annotation-changed',\n description: `type changed: ${typeStr(this.type.toObject())} → ${typeStr(other.type.toObject())}`,\n context: {\n fromType: typeStr(this.type.toObject()),\n toType: typeStr(other.type.toObject()),\n position: 'variable',\n },\n from: typeStr(this.type.toObject()),\n to: typeStr(other.type.toObject()),\n });\n }\n if (this.isOptional && !other.isOptional) {\n facts.push({\n changeKind: 'became-required',\n description: 'became required (was optional)',\n context: { position: 'variable' },\n from: 'optional',\n to: 'required',\n });\n } else if (!this.isOptional && other.isOptional) {\n facts.push({\n changeKind: 'became-optional',\n description: 'became optional (was required)',\n context: { position: 'variable' },\n from: 'required',\n to: 'optional',\n });\n }\n if (this.defaultValue !== other.defaultValue) {\n const changeKind =\n this.defaultValue === undefined\n ? 'parameter-default-added'\n : other.defaultValue === undefined\n ? 'parameter-default-removed'\n : 'parameter-default-changed';\n facts.push({\n changeKind,\n description: `default value changed: ${this.defaultValue ?? 'none'} → ${other.defaultValue ?? 'none'}`,\n context: { previousDefault: this.defaultValue, newDefault: other.defaultValue },\n from: this.defaultValue,\n to: other.defaultValue,\n });\n }\n facts.push(...diffDoc(this.doc?.toObject(), other.doc?.toObject()));\n return facts;\n }\n\n static fromObject(obj: Record<string, any>): VariableLikeSchema {\n const location = obj.location;\n const name = obj.name;\n const signature = obj.signature;\n const type = SchemaRegistry.fromObject(obj.type);\n const isOptional = obj.isOptional;\n const doc = obj.doc ? DocSchema.fromObject(obj.doc) : undefined;\n const defaultValue = obj.defaultValue;\n return new VariableLikeSchema(location, name, signature, type, isOptional, doc, defaultValue);\n }\n}\n"],"mappings":"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","ignoreList":[]}
package/index.ts CHANGED
@@ -2,6 +2,8 @@ import * as Schemas from './schemas';
2
2
 
3
3
  export { SchemaNode, ISchemaNode } from './schema-node';
4
4
  export { APISchema } from './api-schema';
5
+ export { schemaDisplayName, typeStr, typesAreSemanticallyEqual, deepEqualNoLocation, diffDoc } from './schema-diff';
6
+ export type { SchemaChangeFact } from './schema-diff';
5
7
  export { Export, StaticProperties } from './export';
6
8
  export type { SchemaLocation as Location } from './schema-node';
7
9
  export { TagName } from './schemas/docs/tag';
package/package.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@teambit/semantics.entities.semantic-schema",
3
- "version": "0.0.100",
3
+ "version": "0.0.101",
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.100"
9
+ "version": "0.0.101"
10
10
  },
11
11
  "dependencies": {
12
12
  "chalk": "4.1.2",
@@ -0,0 +1,164 @@
1
+ import type { SchemaNode } from './schema-node';
2
+ import type { SchemaChangeFact } from './schema-diff';
3
+ import { deepEqualNoLocation, diffDoc, schemaDisplayName, typeStr } from './schema-diff';
4
+
5
+ type MemberMap = Map<string, Record<string, any>>;
6
+
7
+ const MEMBER_CHANGE_LABELS: Record<string, string> = {
8
+ 'member-documentation-changed': 'documentation changed',
9
+ 'member-signature-changed': 'signature changed',
10
+ 'member-definition-changed': 'internal definition changed',
11
+ };
12
+
13
+ function memberKey(m: Record<string, any>): string {
14
+ return m.name || m.signature || '';
15
+ }
16
+
17
+ function toMemberMap(members: Record<string, any>[]): MemberMap {
18
+ return new Map(members.map((m) => [memberKey(m), m]));
19
+ }
20
+
21
+ function classifyMemberChange(base: Record<string, any>, compare: Record<string, any>): string {
22
+ const baseStripped = { ...base, location: undefined, doc: undefined };
23
+ const compareStripped = { ...compare, location: undefined, doc: undefined };
24
+ if (deepEqualNoLocation(baseStripped, compareStripped)) return 'member-documentation-changed';
25
+ if (base.signature !== compare.signature) return 'member-signature-changed';
26
+ return 'member-definition-changed';
27
+ }
28
+
29
+ function diffAddedMembers(compareMemberMap: MemberMap, baseMemberMap: MemberMap): SchemaChangeFact[] {
30
+ const facts: SchemaChangeFact[] = [];
31
+ for (const [name, member] of compareMemberMap) {
32
+ if (baseMemberMap.has(name)) continue;
33
+ const kind = schemaDisplayName(member.__schema || '', true);
34
+ facts.push({
35
+ changeKind: 'member-added',
36
+ description: `${kind} '${name}' added${member.isOptional ? ' (optional)' : ''}: ${member.signature || name}`,
37
+ context: {
38
+ memberName: name,
39
+ memberKind: kind,
40
+ isOptional: !!member.isOptional,
41
+ signature: member.signature || name,
42
+ },
43
+ to: member.signature || name,
44
+ });
45
+ }
46
+ return facts;
47
+ }
48
+
49
+ function diffRemovedMembers(baseMemberMap: MemberMap, compareMemberMap: MemberMap): SchemaChangeFact[] {
50
+ const facts: SchemaChangeFact[] = [];
51
+ for (const [name, member] of baseMemberMap) {
52
+ if (compareMemberMap.has(name)) continue;
53
+ const kind = schemaDisplayName(member.__schema || '', true);
54
+ const isPublic = !(member.modifiers || []).includes('private');
55
+ facts.push({
56
+ changeKind: 'member-removed',
57
+ description: `${kind} '${name}' removed${isPublic ? ' — consumers using it will break' : ' (was private)'}`,
58
+ context: { memberName: name, memberKind: kind, isPublic, signature: member.signature || name },
59
+ from: member.signature || name,
60
+ });
61
+ }
62
+ return facts;
63
+ }
64
+
65
+ function diffModifiedMembers(
66
+ baseMemberMap: MemberMap,
67
+ compareMemberMap: MemberMap,
68
+ baseNode: SchemaNode,
69
+ compareNode: SchemaNode
70
+ ): SchemaChangeFact[] {
71
+ const facts: SchemaChangeFact[] = [];
72
+ for (const [name, baseMember] of baseMemberMap) {
73
+ const compareMember = compareMemberMap.get(name);
74
+ if (!compareMember) continue;
75
+ if (deepEqualNoLocation({ ...baseMember, location: undefined }, { ...compareMember, location: undefined }))
76
+ continue;
77
+
78
+ const kind = schemaDisplayName(baseMember.__schema || '', true);
79
+
80
+ if (baseMember.__schema === 'FunctionLikeSchema' && compareMember.__schema === 'FunctionLikeSchema') {
81
+ const bNode = ((baseNode as any).members as SchemaNode[])?.find((n: any) => n.name === name);
82
+ const cNode = ((compareNode as any).members as SchemaNode[])?.find((n: any) => n.name === name);
83
+ if (bNode && cNode) {
84
+ for (const d of bNode.diff(cNode)) {
85
+ facts.push({ ...d, description: `${kind} '${name}': ${d.description}` });
86
+ }
87
+ continue;
88
+ }
89
+ }
90
+
91
+ const changeKind = classifyMemberChange(baseMember, compareMember);
92
+ facts.push({
93
+ changeKind,
94
+ description: `${kind} '${name}' ${MEMBER_CHANGE_LABELS[changeKind]}`,
95
+ context: { memberName: name, memberKind: kind },
96
+ from: baseMember.signature || name,
97
+ to: compareMember.signature || name,
98
+ });
99
+ }
100
+ return facts;
101
+ }
102
+
103
+ function diffStructural(baseObj: Record<string, any>, compareObj: Record<string, any>): SchemaChangeFact[] {
104
+ const facts: SchemaChangeFact[] = [];
105
+
106
+ if (!deepEqualNoLocation(baseObj.typeParams, compareObj.typeParams)) {
107
+ const from = (baseObj.typeParams || []).join(', ');
108
+ const to = (compareObj.typeParams || []).join(', ');
109
+ facts.push({
110
+ changeKind: 'type-parameters-changed',
111
+ description: `type parameters changed: <${from || 'none'}> → <${to || 'none'}>`,
112
+ context: { from, to },
113
+ from,
114
+ to,
115
+ });
116
+ }
117
+
118
+ if (!deepEqualNoLocation(baseObj.extendsNodes, compareObj.extendsNodes)) {
119
+ const from = (baseObj.extendsNodes || []).map((n: any) => n.name || typeStr(n)).join(', ') || 'none';
120
+ const to = (compareObj.extendsNodes || []).map((n: any) => n.name || typeStr(n)).join(', ') || 'none';
121
+ facts.push({
122
+ changeKind: 'extends-changed',
123
+ description: `extends changed: ${from} → ${to}`,
124
+ context: { from, to },
125
+ from,
126
+ to,
127
+ });
128
+ }
129
+
130
+ if (
131
+ (baseObj.implementNodes || compareObj.implementNodes) &&
132
+ !deepEqualNoLocation(baseObj.implementNodes, compareObj.implementNodes)
133
+ ) {
134
+ const from = (baseObj.implementNodes || []).map((n: any) => n.name || typeStr(n)).join(', ') || 'none';
135
+ const to = (compareObj.implementNodes || []).map((n: any) => n.name || typeStr(n)).join(', ') || 'none';
136
+ facts.push({
137
+ changeKind: 'implements-changed',
138
+ description: `implements changed: ${from} → ${to}`,
139
+ context: { from, to },
140
+ from,
141
+ to,
142
+ });
143
+ }
144
+
145
+ return facts;
146
+ }
147
+
148
+ export function diffMembers(
149
+ baseObj: Record<string, any>,
150
+ compareObj: Record<string, any>,
151
+ baseNode: SchemaNode,
152
+ compareNode: SchemaNode
153
+ ): SchemaChangeFact[] {
154
+ const baseMemberMap = toMemberMap(baseObj.members || []);
155
+ const compareMemberMap = toMemberMap(compareObj.members || []);
156
+
157
+ return [
158
+ ...diffAddedMembers(compareMemberMap, baseMemberMap),
159
+ ...diffRemovedMembers(baseMemberMap, compareMemberMap),
160
+ ...diffModifiedMembers(baseMemberMap, compareMemberMap, baseNode, compareNode),
161
+ ...diffStructural(baseObj, compareObj),
162
+ ...diffDoc(baseObj.doc, compareObj.doc),
163
+ ];
164
+ }
package/schema-diff.ts ADDED
@@ -0,0 +1,168 @@
1
+ export type SchemaChangeFact = {
2
+ changeKind: string;
3
+ description: string;
4
+ /** Structured metadata for the impact assessor to reason about. */
5
+ context: Record<string, any>;
6
+ from?: string;
7
+ to?: string;
8
+ };
9
+
10
+ const SCHEMA_DISPLAY_NAMES: Record<string, string> = {
11
+ FunctionLikeSchema: 'Function',
12
+ ClassSchema: 'Class',
13
+ InterfaceSchema: 'Interface',
14
+ TypeSchema: 'Type Alias',
15
+ EnumSchema: 'Enum',
16
+ VariableLikeSchema: 'Variable',
17
+ ModuleSchema: 'Namespace',
18
+ ReactSchema: 'React Component',
19
+ TypeRefSchema: 'Type Reference',
20
+ TypeUnionSchema: 'Union Type',
21
+ TypeIntersectionSchema: 'Intersection Type',
22
+ TypeLiteralSchema: 'Type Literal',
23
+ TypeArraySchema: 'Array Type',
24
+ TupleTypeSchema: 'Tuple Type',
25
+ ParameterSchema: 'Parameter',
26
+ ExportSchema: 'Export',
27
+ DecoratorSchema: 'Decorator',
28
+ ConstructorSchema: 'Constructor',
29
+ GetAccessorSchema: 'Getter',
30
+ SetAccessorSchema: 'Setter',
31
+ IndexSignatureSchema: 'Index Signature',
32
+ KeywordTypeSchema: 'Keyword Type',
33
+ LiteralTypeSchema: 'Literal Type',
34
+ InferenceTypeSchema: 'Inferred Type',
35
+ };
36
+
37
+ export function schemaDisplayName(rawSchemaType: string, singular = true): string {
38
+ const name = SCHEMA_DISPLAY_NAMES[rawSchemaType];
39
+ if (name) return singular ? name : pluralize(name);
40
+ const cleaned = rawSchemaType
41
+ .replace(/Schema$/, '')
42
+ .replace(/([A-Z])/g, ' $1')
43
+ .trim();
44
+ return singular ? cleaned : pluralize(cleaned);
45
+ }
46
+
47
+ function pluralize(word: string): string {
48
+ if (word.endsWith('s') || word.endsWith('x') || word.endsWith('z')) return `${word}es`;
49
+ if (word.endsWith('y') && !/[aeiou]y$/i.test(word)) return `${word.slice(0, -1)}ies`;
50
+ return `${word}s`;
51
+ }
52
+
53
+ type TypeRenderer = (node: Record<string, any>) => string;
54
+
55
+ const TYPE_RENDERERS: Record<string, TypeRenderer> = {
56
+ TypeUnionSchema: (n) => (n.types || []).map((t: any) => typeStr(t)).join(' | ') || 'unknown',
57
+ TypeIntersectionSchema: (n) => (n.types || []).map((t: any) => typeStr(t)).join(' & ') || 'unknown',
58
+ TypeArraySchema: (n) => `${typeStr(n.type)}[]`,
59
+ TupleTypeSchema: (n) => `[${(n.members || []).map((t: any) => typeStr(t)).join(', ')}]`,
60
+ InferenceTypeSchema: (n) => n.type || n.name || 'inferred',
61
+ KeywordTypeSchema: (n) => n.name || 'keyword',
62
+ LiteralTypeSchema: (n) => (n.value !== undefined ? String(n.value) : n.name || 'literal'),
63
+ TypeRefSchema: (n) => {
64
+ const base = n.name || 'Ref';
65
+ return n.typeArgs?.length ? `${base}<${n.typeArgs.map((a: any) => typeStr(a)).join(', ')}>` : base;
66
+ },
67
+ TypeLiteralSchema: (n) => {
68
+ const members = (n.members || []).map((m: any) => m.signature || m.name || '').filter(Boolean);
69
+ return members.length <= 3 ? `{ ${members.join('; ')} }` : `{ ${members.slice(0, 3).join('; ')}; ... }`;
70
+ },
71
+ ParenthesizedTypeSchema: (n) => `(${typeStr(n.type)})`,
72
+ };
73
+
74
+ export function typeStr(node: Record<string, any> | undefined): string {
75
+ if (!node) return 'unknown';
76
+ const renderer = TYPE_RENDERERS[node.__schema];
77
+ if (renderer) return renderer(node);
78
+ return node.signature || node.name || typeStrFallback(node);
79
+ }
80
+
81
+ function typeStrFallback(node: Record<string, any>): string {
82
+ if (node.type && typeof node.type === 'string') return node.type;
83
+ if (node.type && typeof node.type === 'object') return typeStr(node.type);
84
+ return schemaDisplayName(node.__schema || 'unknown', true);
85
+ }
86
+
87
+ export function typesAreSemanticallyEqual(
88
+ base: Record<string, any> | undefined,
89
+ compare: Record<string, any> | undefined
90
+ ): boolean {
91
+ if (!base && !compare) return true;
92
+ if (!base || !compare) return false;
93
+
94
+ if (base.__schema === 'TypeRefSchema' && compare.__schema === 'TypeRefSchema') {
95
+ if (base.name !== compare.name) return false;
96
+ const baseArgs = base.typeArgs || [];
97
+ const compareArgs = compare.typeArgs || [];
98
+ if (baseArgs.length !== compareArgs.length) return false;
99
+ return baseArgs.every((a: any, i: number) => typesAreSemanticallyEqual(a, compareArgs[i]));
100
+ }
101
+
102
+ return deepEqualNoLocation(base, compare);
103
+ }
104
+
105
+ export function deepEqualNoLocation(a: any, b: any): boolean {
106
+ if (a === b) return true;
107
+ if (a == null || b == null) return false;
108
+ if (typeof a !== typeof b) return false;
109
+
110
+ if (Array.isArray(a)) {
111
+ if (!Array.isArray(b) || a.length !== b.length) return false;
112
+ return a.every((item, i) => deepEqualNoLocation(item, b[i]));
113
+ }
114
+
115
+ if (typeof a === 'object') {
116
+ const keysA = Object.keys(a).filter((k) => k !== 'location');
117
+ const keysB = Object.keys(b).filter((k) => k !== 'location');
118
+ if (keysA.length !== keysB.length) return false;
119
+ return keysA.every((key) => deepEqualNoLocation(a[key], b[key]));
120
+ }
121
+
122
+ return false;
123
+ }
124
+
125
+ export function diffDoc(
126
+ baseDoc: Record<string, any> | undefined,
127
+ compareDoc: Record<string, any> | undefined
128
+ ): SchemaChangeFact[] {
129
+ if (deepEqualNoLocation(baseDoc, compareDoc)) return [];
130
+
131
+ if (!baseDoc && compareDoc) {
132
+ return [
133
+ {
134
+ changeKind: 'documentation-added',
135
+ description: 'documentation added',
136
+ context: {},
137
+ to: compareDoc.comment || '(doc added)',
138
+ },
139
+ ];
140
+ }
141
+ if (baseDoc && !compareDoc) {
142
+ return [
143
+ {
144
+ changeKind: 'documentation-removed',
145
+ description: 'documentation removed',
146
+ context: {},
147
+ from: baseDoc.comment || '(doc removed)',
148
+ },
149
+ ];
150
+ }
151
+
152
+ const changes: string[] = [];
153
+ if (baseDoc?.comment !== compareDoc?.comment) changes.push('description');
154
+ const baseTags = (baseDoc?.tags || []).map((t: any) => t.tagName || t.name).sort();
155
+ const compareTags = (compareDoc?.tags || []).map((t: any) => t.tagName || t.name).sort();
156
+ if (!deepEqualNoLocation(baseTags, compareTags)) changes.push('tags');
157
+ if (changes.length === 0) changes.push('content');
158
+
159
+ return [
160
+ {
161
+ changeKind: 'documentation-changed',
162
+ description: `documentation ${changes.join(' and ')} changed`,
163
+ context: {},
164
+ from: baseDoc?.comment,
165
+ to: compareDoc?.comment,
166
+ },
167
+ ];
168
+ }