@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
package/dist/index.d.ts CHANGED
@@ -1,6 +1,8 @@
1
1
  import * as Schemas from './schemas';
2
2
  export { SchemaNode, ISchemaNode } from './schema-node';
3
3
  export { APISchema } from './api-schema';
4
+ export { schemaDisplayName, typeStr, typesAreSemanticallyEqual, deepEqualNoLocation, diffDoc } from './schema-diff';
5
+ export type { SchemaChangeFact } from './schema-diff';
4
6
  export { Export, StaticProperties } from './export';
5
7
  export type { SchemaLocation as Location } from './schema-node';
6
8
  export { TagName } from './schemas/docs/tag';
package/dist/index.js CHANGED
@@ -8,6 +8,11 @@ var _exportNames = {
8
8
  SchemaNode: true,
9
9
  ISchemaNode: true,
10
10
  APISchema: true,
11
+ schemaDisplayName: true,
12
+ typeStr: true,
13
+ typesAreSemanticallyEqual: true,
14
+ deepEqualNoLocation: true,
15
+ diffDoc: true,
11
16
  Export: true,
12
17
  StaticProperties: true,
13
18
  TagName: true,
@@ -70,6 +75,36 @@ Object.defineProperty(exports, "TagName", {
70
75
  return _tag().TagName;
71
76
  }
72
77
  });
78
+ Object.defineProperty(exports, "deepEqualNoLocation", {
79
+ enumerable: true,
80
+ get: function () {
81
+ return _schemaDiff().deepEqualNoLocation;
82
+ }
83
+ });
84
+ Object.defineProperty(exports, "diffDoc", {
85
+ enumerable: true,
86
+ get: function () {
87
+ return _schemaDiff().diffDoc;
88
+ }
89
+ });
90
+ Object.defineProperty(exports, "schemaDisplayName", {
91
+ enumerable: true,
92
+ get: function () {
93
+ return _schemaDiff().schemaDisplayName;
94
+ }
95
+ });
96
+ Object.defineProperty(exports, "typeStr", {
97
+ enumerable: true,
98
+ get: function () {
99
+ return _schemaDiff().typeStr;
100
+ }
101
+ });
102
+ Object.defineProperty(exports, "typesAreSemanticallyEqual", {
103
+ enumerable: true,
104
+ get: function () {
105
+ return _schemaDiff().typesAreSemanticallyEqual;
106
+ }
107
+ });
73
108
  var Schemas = _interopRequireWildcard(require("./schemas"));
74
109
  exports.Schemas = Schemas;
75
110
  Object.keys(Schemas).forEach(function (key) {
@@ -97,6 +132,13 @@ function _apiSchema() {
97
132
  };
98
133
  return data;
99
134
  }
135
+ function _schemaDiff() {
136
+ const data = require("./schema-diff");
137
+ _schemaDiff = function () {
138
+ return data;
139
+ };
140
+ return data;
141
+ }
100
142
  function _export() {
101
143
  const data = require("./export");
102
144
  _export = function () {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"names":["Schemas","_interopRequireWildcard","require","exports","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","defineProperty","enumerable","get","_schemaNode","data","_apiSchema","_export","_tag","_schemaRegistry","_schemaNodeConstructor","_functionLike","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","set","getOwnPropertyDescriptor"],"sources":["index.ts"],"sourcesContent":["import * as Schemas from './schemas';\n\nexport { SchemaNode, ISchemaNode } from './schema-node';\nexport { APISchema } from './api-schema';\nexport { Export, StaticProperties } from './export';\nexport type { SchemaLocation as Location } from './schema-node';\nexport { TagName } from './schemas/docs/tag';\nexport { SchemaRegistry } from './schema-registry';\nexport { SchemaNodeConstructor } from './schema-node-constructor';\nexport { Modifier } from './schemas/function-like';\nexport { Schemas };\n\nexport * from './schemas';\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["Schemas","_interopRequireWildcard","require","exports","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","defineProperty","enumerable","get","_schemaNode","data","_apiSchema","_schemaDiff","_export","_tag","_schemaRegistry","_schemaNodeConstructor","_functionLike","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","set","getOwnPropertyDescriptor"],"sources":["index.ts"],"sourcesContent":["import * as Schemas from './schemas';\n\nexport { SchemaNode, ISchemaNode } from './schema-node';\nexport { APISchema } from './api-schema';\nexport { schemaDisplayName, typeStr, typesAreSemanticallyEqual, deepEqualNoLocation, diffDoc } from './schema-diff';\nexport type { SchemaChangeFact } from './schema-diff';\nexport { Export, StaticProperties } from './export';\nexport type { SchemaLocation as Location } from './schema-node';\nexport { TagName } from './schemas/docs/tag';\nexport { SchemaRegistry } from './schema-registry';\nexport { SchemaNodeConstructor } from './schema-node-constructor';\nexport { Modifier } from './schemas/function-like';\nexport { Schemas };\n\nexport * from './schemas';\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,3 @@
1
+ import type { SchemaNode } from './schema-node';
2
+ import type { SchemaChangeFact } from './schema-diff';
3
+ export declare function diffMembers(baseObj: Record<string, any>, compareObj: Record<string, any>, baseNode: SchemaNode, compareNode: SchemaNode): SchemaChangeFact[];
@@ -0,0 +1,171 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.diffMembers = diffMembers;
7
+ function _schemaDiff() {
8
+ const data = require("./schema-diff");
9
+ _schemaDiff = function () {
10
+ return data;
11
+ };
12
+ return data;
13
+ }
14
+ const MEMBER_CHANGE_LABELS = {
15
+ 'member-documentation-changed': 'documentation changed',
16
+ 'member-signature-changed': 'signature changed',
17
+ 'member-definition-changed': 'internal definition changed'
18
+ };
19
+ function memberKey(m) {
20
+ return m.name || m.signature || '';
21
+ }
22
+ function toMemberMap(members) {
23
+ return new Map(members.map(m => [memberKey(m), m]));
24
+ }
25
+ function classifyMemberChange(base, compare) {
26
+ const baseStripped = {
27
+ ...base,
28
+ location: undefined,
29
+ doc: undefined
30
+ };
31
+ const compareStripped = {
32
+ ...compare,
33
+ location: undefined,
34
+ doc: undefined
35
+ };
36
+ if ((0, _schemaDiff().deepEqualNoLocation)(baseStripped, compareStripped)) return 'member-documentation-changed';
37
+ if (base.signature !== compare.signature) return 'member-signature-changed';
38
+ return 'member-definition-changed';
39
+ }
40
+ function diffAddedMembers(compareMemberMap, baseMemberMap) {
41
+ const facts = [];
42
+ for (const [name, member] of compareMemberMap) {
43
+ if (baseMemberMap.has(name)) continue;
44
+ const kind = (0, _schemaDiff().schemaDisplayName)(member.__schema || '', true);
45
+ facts.push({
46
+ changeKind: 'member-added',
47
+ description: `${kind} '${name}' added${member.isOptional ? ' (optional)' : ''}: ${member.signature || name}`,
48
+ context: {
49
+ memberName: name,
50
+ memberKind: kind,
51
+ isOptional: !!member.isOptional,
52
+ signature: member.signature || name
53
+ },
54
+ to: member.signature || name
55
+ });
56
+ }
57
+ return facts;
58
+ }
59
+ function diffRemovedMembers(baseMemberMap, compareMemberMap) {
60
+ const facts = [];
61
+ for (const [name, member] of baseMemberMap) {
62
+ if (compareMemberMap.has(name)) continue;
63
+ const kind = (0, _schemaDiff().schemaDisplayName)(member.__schema || '', true);
64
+ const isPublic = !(member.modifiers || []).includes('private');
65
+ facts.push({
66
+ changeKind: 'member-removed',
67
+ description: `${kind} '${name}' removed${isPublic ? ' — consumers using it will break' : ' (was private)'}`,
68
+ context: {
69
+ memberName: name,
70
+ memberKind: kind,
71
+ isPublic,
72
+ signature: member.signature || name
73
+ },
74
+ from: member.signature || name
75
+ });
76
+ }
77
+ return facts;
78
+ }
79
+ function diffModifiedMembers(baseMemberMap, compareMemberMap, baseNode, compareNode) {
80
+ const facts = [];
81
+ for (const [name, baseMember] of baseMemberMap) {
82
+ const compareMember = compareMemberMap.get(name);
83
+ if (!compareMember) continue;
84
+ if ((0, _schemaDiff().deepEqualNoLocation)({
85
+ ...baseMember,
86
+ location: undefined
87
+ }, {
88
+ ...compareMember,
89
+ location: undefined
90
+ })) continue;
91
+ const kind = (0, _schemaDiff().schemaDisplayName)(baseMember.__schema || '', true);
92
+ if (baseMember.__schema === 'FunctionLikeSchema' && compareMember.__schema === 'FunctionLikeSchema') {
93
+ const bNode = baseNode.members?.find(n => n.name === name);
94
+ const cNode = compareNode.members?.find(n => n.name === name);
95
+ if (bNode && cNode) {
96
+ for (const d of bNode.diff(cNode)) {
97
+ facts.push({
98
+ ...d,
99
+ description: `${kind} '${name}': ${d.description}`
100
+ });
101
+ }
102
+ continue;
103
+ }
104
+ }
105
+ const changeKind = classifyMemberChange(baseMember, compareMember);
106
+ facts.push({
107
+ changeKind,
108
+ description: `${kind} '${name}' ${MEMBER_CHANGE_LABELS[changeKind]}`,
109
+ context: {
110
+ memberName: name,
111
+ memberKind: kind
112
+ },
113
+ from: baseMember.signature || name,
114
+ to: compareMember.signature || name
115
+ });
116
+ }
117
+ return facts;
118
+ }
119
+ function diffStructural(baseObj, compareObj) {
120
+ const facts = [];
121
+ if (!(0, _schemaDiff().deepEqualNoLocation)(baseObj.typeParams, compareObj.typeParams)) {
122
+ const from = (baseObj.typeParams || []).join(', ');
123
+ const to = (compareObj.typeParams || []).join(', ');
124
+ facts.push({
125
+ changeKind: 'type-parameters-changed',
126
+ description: `type parameters changed: <${from || 'none'}> → <${to || 'none'}>`,
127
+ context: {
128
+ from,
129
+ to
130
+ },
131
+ from,
132
+ to
133
+ });
134
+ }
135
+ if (!(0, _schemaDiff().deepEqualNoLocation)(baseObj.extendsNodes, compareObj.extendsNodes)) {
136
+ const from = (baseObj.extendsNodes || []).map(n => n.name || (0, _schemaDiff().typeStr)(n)).join(', ') || 'none';
137
+ const to = (compareObj.extendsNodes || []).map(n => n.name || (0, _schemaDiff().typeStr)(n)).join(', ') || 'none';
138
+ facts.push({
139
+ changeKind: 'extends-changed',
140
+ description: `extends changed: ${from} → ${to}`,
141
+ context: {
142
+ from,
143
+ to
144
+ },
145
+ from,
146
+ to
147
+ });
148
+ }
149
+ if ((baseObj.implementNodes || compareObj.implementNodes) && !(0, _schemaDiff().deepEqualNoLocation)(baseObj.implementNodes, compareObj.implementNodes)) {
150
+ const from = (baseObj.implementNodes || []).map(n => n.name || (0, _schemaDiff().typeStr)(n)).join(', ') || 'none';
151
+ const to = (compareObj.implementNodes || []).map(n => n.name || (0, _schemaDiff().typeStr)(n)).join(', ') || 'none';
152
+ facts.push({
153
+ changeKind: 'implements-changed',
154
+ description: `implements changed: ${from} → ${to}`,
155
+ context: {
156
+ from,
157
+ to
158
+ },
159
+ from,
160
+ to
161
+ });
162
+ }
163
+ return facts;
164
+ }
165
+ function diffMembers(baseObj, compareObj, baseNode, compareNode) {
166
+ const baseMemberMap = toMemberMap(baseObj.members || []);
167
+ const compareMemberMap = toMemberMap(compareObj.members || []);
168
+ return [...diffAddedMembers(compareMemberMap, baseMemberMap), ...diffRemovedMembers(baseMemberMap, compareMemberMap), ...diffModifiedMembers(baseMemberMap, compareMemberMap, baseNode, compareNode), ...diffStructural(baseObj, compareObj), ...(0, _schemaDiff().diffDoc)(baseObj.doc, compareObj.doc)];
169
+ }
170
+
171
+ //# sourceMappingURL=schema-diff-members.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_schemaDiff","data","require","MEMBER_CHANGE_LABELS","memberKey","m","name","signature","toMemberMap","members","Map","map","classifyMemberChange","base","compare","baseStripped","location","undefined","doc","compareStripped","deepEqualNoLocation","diffAddedMembers","compareMemberMap","baseMemberMap","facts","member","has","kind","schemaDisplayName","__schema","push","changeKind","description","isOptional","context","memberName","memberKind","to","diffRemovedMembers","isPublic","modifiers","includes","from","diffModifiedMembers","baseNode","compareNode","baseMember","compareMember","get","bNode","find","n","cNode","d","diff","diffStructural","baseObj","compareObj","typeParams","join","extendsNodes","typeStr","implementNodes","diffMembers","diffDoc"],"sources":["schema-diff-members.ts"],"sourcesContent":["import type { SchemaNode } from './schema-node';\nimport type { SchemaChangeFact } from './schema-diff';\nimport { deepEqualNoLocation, diffDoc, schemaDisplayName, typeStr } from './schema-diff';\n\ntype MemberMap = Map<string, Record<string, any>>;\n\nconst MEMBER_CHANGE_LABELS: Record<string, string> = {\n 'member-documentation-changed': 'documentation changed',\n 'member-signature-changed': 'signature changed',\n 'member-definition-changed': 'internal definition changed',\n};\n\nfunction memberKey(m: Record<string, any>): string {\n return m.name || m.signature || '';\n}\n\nfunction toMemberMap(members: Record<string, any>[]): MemberMap {\n return new Map(members.map((m) => [memberKey(m), m]));\n}\n\nfunction classifyMemberChange(base: Record<string, any>, compare: Record<string, any>): string {\n const baseStripped = { ...base, location: undefined, doc: undefined };\n const compareStripped = { ...compare, location: undefined, doc: undefined };\n if (deepEqualNoLocation(baseStripped, compareStripped)) return 'member-documentation-changed';\n if (base.signature !== compare.signature) return 'member-signature-changed';\n return 'member-definition-changed';\n}\n\nfunction diffAddedMembers(compareMemberMap: MemberMap, baseMemberMap: MemberMap): SchemaChangeFact[] {\n const facts: SchemaChangeFact[] = [];\n for (const [name, member] of compareMemberMap) {\n if (baseMemberMap.has(name)) continue;\n const kind = schemaDisplayName(member.__schema || '', true);\n facts.push({\n changeKind: 'member-added',\n description: `${kind} '${name}' added${member.isOptional ? ' (optional)' : ''}: ${member.signature || name}`,\n context: {\n memberName: name,\n memberKind: kind,\n isOptional: !!member.isOptional,\n signature: member.signature || name,\n },\n to: member.signature || name,\n });\n }\n return facts;\n}\n\nfunction diffRemovedMembers(baseMemberMap: MemberMap, compareMemberMap: MemberMap): SchemaChangeFact[] {\n const facts: SchemaChangeFact[] = [];\n for (const [name, member] of baseMemberMap) {\n if (compareMemberMap.has(name)) continue;\n const kind = schemaDisplayName(member.__schema || '', true);\n const isPublic = !(member.modifiers || []).includes('private');\n facts.push({\n changeKind: 'member-removed',\n description: `${kind} '${name}' removed${isPublic ? ' — consumers using it will break' : ' (was private)'}`,\n context: { memberName: name, memberKind: kind, isPublic, signature: member.signature || name },\n from: member.signature || name,\n });\n }\n return facts;\n}\n\nfunction diffModifiedMembers(\n baseMemberMap: MemberMap,\n compareMemberMap: MemberMap,\n baseNode: SchemaNode,\n compareNode: SchemaNode\n): SchemaChangeFact[] {\n const facts: SchemaChangeFact[] = [];\n for (const [name, baseMember] of baseMemberMap) {\n const compareMember = compareMemberMap.get(name);\n if (!compareMember) continue;\n if (deepEqualNoLocation({ ...baseMember, location: undefined }, { ...compareMember, location: undefined }))\n continue;\n\n const kind = schemaDisplayName(baseMember.__schema || '', true);\n\n if (baseMember.__schema === 'FunctionLikeSchema' && compareMember.__schema === 'FunctionLikeSchema') {\n const bNode = ((baseNode as any).members as SchemaNode[])?.find((n: any) => n.name === name);\n const cNode = ((compareNode as any).members as SchemaNode[])?.find((n: any) => n.name === name);\n if (bNode && cNode) {\n for (const d of bNode.diff(cNode)) {\n facts.push({ ...d, description: `${kind} '${name}': ${d.description}` });\n }\n continue;\n }\n }\n\n const changeKind = classifyMemberChange(baseMember, compareMember);\n facts.push({\n changeKind,\n description: `${kind} '${name}' ${MEMBER_CHANGE_LABELS[changeKind]}`,\n context: { memberName: name, memberKind: kind },\n from: baseMember.signature || name,\n to: compareMember.signature || name,\n });\n }\n return facts;\n}\n\nfunction diffStructural(baseObj: Record<string, any>, compareObj: Record<string, any>): SchemaChangeFact[] {\n const facts: SchemaChangeFact[] = [];\n\n if (!deepEqualNoLocation(baseObj.typeParams, compareObj.typeParams)) {\n const from = (baseObj.typeParams || []).join(', ');\n const to = (compareObj.typeParams || []).join(', ');\n facts.push({\n changeKind: 'type-parameters-changed',\n description: `type parameters changed: <${from || 'none'}> → <${to || 'none'}>`,\n context: { from, to },\n from,\n to,\n });\n }\n\n if (!deepEqualNoLocation(baseObj.extendsNodes, compareObj.extendsNodes)) {\n const from = (baseObj.extendsNodes || []).map((n: any) => n.name || typeStr(n)).join(', ') || 'none';\n const to = (compareObj.extendsNodes || []).map((n: any) => n.name || typeStr(n)).join(', ') || 'none';\n facts.push({\n changeKind: 'extends-changed',\n description: `extends changed: ${from} → ${to}`,\n context: { from, to },\n from,\n to,\n });\n }\n\n if (\n (baseObj.implementNodes || compareObj.implementNodes) &&\n !deepEqualNoLocation(baseObj.implementNodes, compareObj.implementNodes)\n ) {\n const from = (baseObj.implementNodes || []).map((n: any) => n.name || typeStr(n)).join(', ') || 'none';\n const to = (compareObj.implementNodes || []).map((n: any) => n.name || typeStr(n)).join(', ') || 'none';\n facts.push({\n changeKind: 'implements-changed',\n description: `implements changed: ${from} → ${to}`,\n context: { from, to },\n from,\n to,\n });\n }\n\n return facts;\n}\n\nexport function diffMembers(\n baseObj: Record<string, any>,\n compareObj: Record<string, any>,\n baseNode: SchemaNode,\n compareNode: SchemaNode\n): SchemaChangeFact[] {\n const baseMemberMap = toMemberMap(baseObj.members || []);\n const compareMemberMap = toMemberMap(compareObj.members || []);\n\n return [\n ...diffAddedMembers(compareMemberMap, baseMemberMap),\n ...diffRemovedMembers(baseMemberMap, compareMemberMap),\n ...diffModifiedMembers(baseMemberMap, compareMemberMap, baseNode, compareNode),\n ...diffStructural(baseObj, compareObj),\n ...diffDoc(baseObj.doc, compareObj.doc),\n ];\n}\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,13 @@
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
+ export declare function schemaDisplayName(rawSchemaType: string, singular?: boolean): string;
10
+ export declare function typeStr(node: Record<string, any> | undefined): string;
11
+ export declare function typesAreSemanticallyEqual(base: Record<string, any> | undefined, compare: Record<string, any> | undefined): boolean;
12
+ export declare function deepEqualNoLocation(a: any, b: any): boolean;
13
+ export declare function diffDoc(baseDoc: Record<string, any> | undefined, compareDoc: Record<string, any> | undefined): SchemaChangeFact[];
@@ -0,0 +1,138 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.deepEqualNoLocation = deepEqualNoLocation;
7
+ exports.diffDoc = diffDoc;
8
+ exports.schemaDisplayName = schemaDisplayName;
9
+ exports.typeStr = typeStr;
10
+ exports.typesAreSemanticallyEqual = typesAreSemanticallyEqual;
11
+ const SCHEMA_DISPLAY_NAMES = {
12
+ FunctionLikeSchema: 'Function',
13
+ ClassSchema: 'Class',
14
+ InterfaceSchema: 'Interface',
15
+ TypeSchema: 'Type Alias',
16
+ EnumSchema: 'Enum',
17
+ VariableLikeSchema: 'Variable',
18
+ ModuleSchema: 'Namespace',
19
+ ReactSchema: 'React Component',
20
+ TypeRefSchema: 'Type Reference',
21
+ TypeUnionSchema: 'Union Type',
22
+ TypeIntersectionSchema: 'Intersection Type',
23
+ TypeLiteralSchema: 'Type Literal',
24
+ TypeArraySchema: 'Array Type',
25
+ TupleTypeSchema: 'Tuple Type',
26
+ ParameterSchema: 'Parameter',
27
+ ExportSchema: 'Export',
28
+ DecoratorSchema: 'Decorator',
29
+ ConstructorSchema: 'Constructor',
30
+ GetAccessorSchema: 'Getter',
31
+ SetAccessorSchema: 'Setter',
32
+ IndexSignatureSchema: 'Index Signature',
33
+ KeywordTypeSchema: 'Keyword Type',
34
+ LiteralTypeSchema: 'Literal Type',
35
+ InferenceTypeSchema: 'Inferred Type'
36
+ };
37
+ function schemaDisplayName(rawSchemaType, singular = true) {
38
+ const name = SCHEMA_DISPLAY_NAMES[rawSchemaType];
39
+ if (name) return singular ? name : pluralize(name);
40
+ const cleaned = rawSchemaType.replace(/Schema$/, '').replace(/([A-Z])/g, ' $1').trim();
41
+ return singular ? cleaned : pluralize(cleaned);
42
+ }
43
+ function pluralize(word) {
44
+ if (word.endsWith('s') || word.endsWith('x') || word.endsWith('z')) return `${word}es`;
45
+ if (word.endsWith('y') && !/[aeiou]y$/i.test(word)) return `${word.slice(0, -1)}ies`;
46
+ return `${word}s`;
47
+ }
48
+ const TYPE_RENDERERS = {
49
+ TypeUnionSchema: n => (n.types || []).map(t => typeStr(t)).join(' | ') || 'unknown',
50
+ TypeIntersectionSchema: n => (n.types || []).map(t => typeStr(t)).join(' & ') || 'unknown',
51
+ TypeArraySchema: n => `${typeStr(n.type)}[]`,
52
+ TupleTypeSchema: n => `[${(n.members || []).map(t => typeStr(t)).join(', ')}]`,
53
+ InferenceTypeSchema: n => n.type || n.name || 'inferred',
54
+ KeywordTypeSchema: n => n.name || 'keyword',
55
+ LiteralTypeSchema: n => n.value !== undefined ? String(n.value) : n.name || 'literal',
56
+ TypeRefSchema: n => {
57
+ const base = n.name || 'Ref';
58
+ return n.typeArgs?.length ? `${base}<${n.typeArgs.map(a => typeStr(a)).join(', ')}>` : base;
59
+ },
60
+ TypeLiteralSchema: n => {
61
+ const members = (n.members || []).map(m => m.signature || m.name || '').filter(Boolean);
62
+ return members.length <= 3 ? `{ ${members.join('; ')} }` : `{ ${members.slice(0, 3).join('; ')}; ... }`;
63
+ },
64
+ ParenthesizedTypeSchema: n => `(${typeStr(n.type)})`
65
+ };
66
+ function typeStr(node) {
67
+ if (!node) return 'unknown';
68
+ const renderer = TYPE_RENDERERS[node.__schema];
69
+ if (renderer) return renderer(node);
70
+ return node.signature || node.name || typeStrFallback(node);
71
+ }
72
+ function typeStrFallback(node) {
73
+ if (node.type && typeof node.type === 'string') return node.type;
74
+ if (node.type && typeof node.type === 'object') return typeStr(node.type);
75
+ return schemaDisplayName(node.__schema || 'unknown', true);
76
+ }
77
+ function typesAreSemanticallyEqual(base, compare) {
78
+ if (!base && !compare) return true;
79
+ if (!base || !compare) return false;
80
+ if (base.__schema === 'TypeRefSchema' && compare.__schema === 'TypeRefSchema') {
81
+ if (base.name !== compare.name) return false;
82
+ const baseArgs = base.typeArgs || [];
83
+ const compareArgs = compare.typeArgs || [];
84
+ if (baseArgs.length !== compareArgs.length) return false;
85
+ return baseArgs.every((a, i) => typesAreSemanticallyEqual(a, compareArgs[i]));
86
+ }
87
+ return deepEqualNoLocation(base, compare);
88
+ }
89
+ function deepEqualNoLocation(a, b) {
90
+ if (a === b) return true;
91
+ if (a == null || b == null) return false;
92
+ if (typeof a !== typeof b) return false;
93
+ if (Array.isArray(a)) {
94
+ if (!Array.isArray(b) || a.length !== b.length) return false;
95
+ return a.every((item, i) => deepEqualNoLocation(item, b[i]));
96
+ }
97
+ if (typeof a === 'object') {
98
+ const keysA = Object.keys(a).filter(k => k !== 'location');
99
+ const keysB = Object.keys(b).filter(k => k !== 'location');
100
+ if (keysA.length !== keysB.length) return false;
101
+ return keysA.every(key => deepEqualNoLocation(a[key], b[key]));
102
+ }
103
+ return false;
104
+ }
105
+ function diffDoc(baseDoc, compareDoc) {
106
+ if (deepEqualNoLocation(baseDoc, compareDoc)) return [];
107
+ if (!baseDoc && compareDoc) {
108
+ return [{
109
+ changeKind: 'documentation-added',
110
+ description: 'documentation added',
111
+ context: {},
112
+ to: compareDoc.comment || '(doc added)'
113
+ }];
114
+ }
115
+ if (baseDoc && !compareDoc) {
116
+ return [{
117
+ changeKind: 'documentation-removed',
118
+ description: 'documentation removed',
119
+ context: {},
120
+ from: baseDoc.comment || '(doc removed)'
121
+ }];
122
+ }
123
+ const changes = [];
124
+ if (baseDoc?.comment !== compareDoc?.comment) changes.push('description');
125
+ const baseTags = (baseDoc?.tags || []).map(t => t.tagName || t.name).sort();
126
+ const compareTags = (compareDoc?.tags || []).map(t => t.tagName || t.name).sort();
127
+ if (!deepEqualNoLocation(baseTags, compareTags)) changes.push('tags');
128
+ if (changes.length === 0) changes.push('content');
129
+ return [{
130
+ changeKind: 'documentation-changed',
131
+ description: `documentation ${changes.join(' and ')} changed`,
132
+ context: {},
133
+ from: baseDoc?.comment,
134
+ to: compareDoc?.comment
135
+ }];
136
+ }
137
+
138
+ //# sourceMappingURL=schema-diff.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["SCHEMA_DISPLAY_NAMES","FunctionLikeSchema","ClassSchema","InterfaceSchema","TypeSchema","EnumSchema","VariableLikeSchema","ModuleSchema","ReactSchema","TypeRefSchema","TypeUnionSchema","TypeIntersectionSchema","TypeLiteralSchema","TypeArraySchema","TupleTypeSchema","ParameterSchema","ExportSchema","DecoratorSchema","ConstructorSchema","GetAccessorSchema","SetAccessorSchema","IndexSignatureSchema","KeywordTypeSchema","LiteralTypeSchema","InferenceTypeSchema","schemaDisplayName","rawSchemaType","singular","name","pluralize","cleaned","replace","trim","word","endsWith","test","slice","TYPE_RENDERERS","n","types","map","t","typeStr","join","type","members","value","undefined","String","base","typeArgs","length","a","m","signature","filter","Boolean","ParenthesizedTypeSchema","node","renderer","__schema","typeStrFallback","typesAreSemanticallyEqual","compare","baseArgs","compareArgs","every","i","deepEqualNoLocation","b","Array","isArray","item","keysA","Object","keys","k","keysB","key","diffDoc","baseDoc","compareDoc","changeKind","description","context","to","comment","from","changes","push","baseTags","tags","tagName","sort","compareTags"],"sources":["schema-diff.ts"],"sourcesContent":["export type SchemaChangeFact = {\n changeKind: string;\n description: string;\n /** Structured metadata for the impact assessor to reason about. */\n context: Record<string, any>;\n from?: string;\n to?: string;\n};\n\nconst SCHEMA_DISPLAY_NAMES: Record<string, string> = {\n FunctionLikeSchema: 'Function',\n ClassSchema: 'Class',\n InterfaceSchema: 'Interface',\n TypeSchema: 'Type Alias',\n EnumSchema: 'Enum',\n VariableLikeSchema: 'Variable',\n ModuleSchema: 'Namespace',\n ReactSchema: 'React Component',\n TypeRefSchema: 'Type Reference',\n TypeUnionSchema: 'Union Type',\n TypeIntersectionSchema: 'Intersection Type',\n TypeLiteralSchema: 'Type Literal',\n TypeArraySchema: 'Array Type',\n TupleTypeSchema: 'Tuple Type',\n ParameterSchema: 'Parameter',\n ExportSchema: 'Export',\n DecoratorSchema: 'Decorator',\n ConstructorSchema: 'Constructor',\n GetAccessorSchema: 'Getter',\n SetAccessorSchema: 'Setter',\n IndexSignatureSchema: 'Index Signature',\n KeywordTypeSchema: 'Keyword Type',\n LiteralTypeSchema: 'Literal Type',\n InferenceTypeSchema: 'Inferred Type',\n};\n\nexport function schemaDisplayName(rawSchemaType: string, singular = true): string {\n const name = SCHEMA_DISPLAY_NAMES[rawSchemaType];\n if (name) return singular ? name : pluralize(name);\n const cleaned = rawSchemaType\n .replace(/Schema$/, '')\n .replace(/([A-Z])/g, ' $1')\n .trim();\n return singular ? cleaned : pluralize(cleaned);\n}\n\nfunction pluralize(word: string): string {\n if (word.endsWith('s') || word.endsWith('x') || word.endsWith('z')) return `${word}es`;\n if (word.endsWith('y') && !/[aeiou]y$/i.test(word)) return `${word.slice(0, -1)}ies`;\n return `${word}s`;\n}\n\ntype TypeRenderer = (node: Record<string, any>) => string;\n\nconst TYPE_RENDERERS: Record<string, TypeRenderer> = {\n TypeUnionSchema: (n) => (n.types || []).map((t: any) => typeStr(t)).join(' | ') || 'unknown',\n TypeIntersectionSchema: (n) => (n.types || []).map((t: any) => typeStr(t)).join(' & ') || 'unknown',\n TypeArraySchema: (n) => `${typeStr(n.type)}[]`,\n TupleTypeSchema: (n) => `[${(n.members || []).map((t: any) => typeStr(t)).join(', ')}]`,\n InferenceTypeSchema: (n) => n.type || n.name || 'inferred',\n KeywordTypeSchema: (n) => n.name || 'keyword',\n LiteralTypeSchema: (n) => (n.value !== undefined ? String(n.value) : n.name || 'literal'),\n TypeRefSchema: (n) => {\n const base = n.name || 'Ref';\n return n.typeArgs?.length ? `${base}<${n.typeArgs.map((a: any) => typeStr(a)).join(', ')}>` : base;\n },\n TypeLiteralSchema: (n) => {\n const members = (n.members || []).map((m: any) => m.signature || m.name || '').filter(Boolean);\n return members.length <= 3 ? `{ ${members.join('; ')} }` : `{ ${members.slice(0, 3).join('; ')}; ... }`;\n },\n ParenthesizedTypeSchema: (n) => `(${typeStr(n.type)})`,\n};\n\nexport function typeStr(node: Record<string, any> | undefined): string {\n if (!node) return 'unknown';\n const renderer = TYPE_RENDERERS[node.__schema];\n if (renderer) return renderer(node);\n return node.signature || node.name || typeStrFallback(node);\n}\n\nfunction typeStrFallback(node: Record<string, any>): string {\n if (node.type && typeof node.type === 'string') return node.type;\n if (node.type && typeof node.type === 'object') return typeStr(node.type);\n return schemaDisplayName(node.__schema || 'unknown', true);\n}\n\nexport function typesAreSemanticallyEqual(\n base: Record<string, any> | undefined,\n compare: Record<string, any> | undefined\n): boolean {\n if (!base && !compare) return true;\n if (!base || !compare) return false;\n\n if (base.__schema === 'TypeRefSchema' && compare.__schema === 'TypeRefSchema') {\n if (base.name !== compare.name) return false;\n const baseArgs = base.typeArgs || [];\n const compareArgs = compare.typeArgs || [];\n if (baseArgs.length !== compareArgs.length) return false;\n return baseArgs.every((a: any, i: number) => typesAreSemanticallyEqual(a, compareArgs[i]));\n }\n\n return deepEqualNoLocation(base, compare);\n}\n\nexport function deepEqualNoLocation(a: any, b: any): boolean {\n if (a === b) return true;\n if (a == null || b == null) return false;\n if (typeof a !== typeof b) return false;\n\n if (Array.isArray(a)) {\n if (!Array.isArray(b) || a.length !== b.length) return false;\n return a.every((item, i) => deepEqualNoLocation(item, b[i]));\n }\n\n if (typeof a === 'object') {\n const keysA = Object.keys(a).filter((k) => k !== 'location');\n const keysB = Object.keys(b).filter((k) => k !== 'location');\n if (keysA.length !== keysB.length) return false;\n return keysA.every((key) => deepEqualNoLocation(a[key], b[key]));\n }\n\n return false;\n}\n\nexport function diffDoc(\n baseDoc: Record<string, any> | undefined,\n compareDoc: Record<string, any> | undefined\n): SchemaChangeFact[] {\n if (deepEqualNoLocation(baseDoc, compareDoc)) return [];\n\n if (!baseDoc && compareDoc) {\n return [\n {\n changeKind: 'documentation-added',\n description: 'documentation added',\n context: {},\n to: compareDoc.comment || '(doc added)',\n },\n ];\n }\n if (baseDoc && !compareDoc) {\n return [\n {\n changeKind: 'documentation-removed',\n description: 'documentation removed',\n context: {},\n from: baseDoc.comment || '(doc removed)',\n },\n ];\n }\n\n const changes: string[] = [];\n if (baseDoc?.comment !== compareDoc?.comment) changes.push('description');\n const baseTags = (baseDoc?.tags || []).map((t: any) => t.tagName || t.name).sort();\n const compareTags = (compareDoc?.tags || []).map((t: any) => t.tagName || t.name).sort();\n if (!deepEqualNoLocation(baseTags, compareTags)) changes.push('tags');\n if (changes.length === 0) changes.push('content');\n\n return [\n {\n changeKind: 'documentation-changed',\n description: `documentation ${changes.join(' and ')} changed`,\n context: {},\n from: baseDoc?.comment,\n to: compareDoc?.comment,\n },\n ];\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1,4 +1,5 @@
1
1
  import type { DocSchema } from './schemas';
2
+ import type { SchemaChangeFact } from './schema-diff';
2
3
  export interface ISchemaNode {
3
4
  __schema: string;
4
5
  location: SchemaLocation;
@@ -40,6 +41,12 @@ export declare abstract class SchemaNode implements ISchemaNode {
40
41
  getNodes(): SchemaNode[];
41
42
  getAllNodesRecursively(visitedNodes?: Set<SchemaNode>): SchemaNode[];
42
43
  findNode(predicate: (node: SchemaNode) => boolean, visitedNodes?: Set<SchemaNode>): SchemaNode | undefined;
44
+ /**
45
+ * Compute neutral change facts between this node and another node of the same type.
46
+ * Subclasses should override with type-specific comparison logic.
47
+ * Returns facts without impact judgment — impact is assessed separately.
48
+ */
49
+ diff(other: SchemaNode): SchemaChangeFact[];
43
50
  }
44
51
  export type SchemaLocation = {
45
52
  /**
@@ -18,6 +18,13 @@ function _pluralize() {
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 _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
22
29
  /**
23
30
  * a convenient abstract class for all schema to extend.
@@ -61,6 +68,48 @@ class SchemaNode {
61
68
  }
62
69
  return undefined;
63
70
  }
71
+
72
+ /**
73
+ * Compute neutral change facts between this node and another node of the same type.
74
+ * Subclasses should override with type-specific comparison logic.
75
+ * Returns facts without impact judgment — impact is assessed separately.
76
+ */
77
+ diff(other) {
78
+ const facts = [];
79
+ const baseObj = this.toObject();
80
+ const compareObj = other.toObject();
81
+
82
+ // Doc changes
83
+ facts.push(...(0, _schemaDiff().diffDoc)(baseObj.doc, compareObj.doc));
84
+
85
+ // If only doc changed, we're done
86
+ const baseNoDoc = {
87
+ ...baseObj,
88
+ doc: undefined,
89
+ location: undefined
90
+ };
91
+ const compareNoDoc = {
92
+ ...compareObj,
93
+ doc: undefined,
94
+ location: undefined
95
+ };
96
+ if ((0, _schemaDiff().deepEqualNoLocation)(baseNoDoc, compareNoDoc)) return facts;
97
+
98
+ // Signature changed
99
+ if (baseObj.signature !== compareObj.signature) {
100
+ facts.push({
101
+ changeKind: 'signature-changed',
102
+ description: 'signature changed',
103
+ context: {
104
+ fromSignature: baseObj.signature,
105
+ toSignature: compareObj.signature
106
+ },
107
+ from: baseObj.signature,
108
+ to: compareObj.signature
109
+ });
110
+ }
111
+ return facts;
112
+ }
64
113
  }
65
114
  exports.SchemaNode = SchemaNode;
66
115
 
@@ -1 +1 @@
1
- {"version":3,"names":["_lodash","data","require","_pluralize","_interopRequireDefault","e","__esModule","default","SchemaNode","__schema","constructor","name","displaySchemaName","pluralize","replace","trim","fromObject","obj","Error","toObject","pickBy","location","doc","undefined","signature","v","getNodes","getAllNodesRecursively","visitedNodes","Set","has","add","nodes","flatMap","node","findNode","predicate","child","foundNode","exports"],"sources":["schema-node.ts"],"sourcesContent":["import { pickBy } from 'lodash';\nimport pluralize from 'pluralize';\nimport type { DocSchema } from './schemas';\n\nexport interface ISchemaNode {\n __schema: string;\n location: SchemaLocation;\n doc?: DocSchema;\n signature?: string;\n name?: string;\n toObject(): Record<string, any>;\n toString(options?: { color?: boolean }): string;\n toFullSignature(options?: { showDocs?: boolean }): string;\n getNodes(): SchemaNode[];\n findNode(predicate: (node: SchemaNode) => boolean, visitedNodes?: Set<SchemaNode>): SchemaNode | undefined;\n getAllNodesRecursively(visitedNodes?: Set<SchemaNode>): SchemaNode[];\n displaySchemaName: string;\n}\n\n/**\n * a convenient abstract class for all schema to extend.\n * the reason for having it as an abstract class and not an interface, for now, is mostly for the `__schema` prop.\n * this way it won't need to be implemented in each one of the subclasses.\n */\nexport abstract class SchemaNode implements ISchemaNode {\n readonly __schema = this.constructor.name;\n readonly displaySchemaName = pluralize(\n this.constructor.name\n .replace(/Schema$/, '')\n .replace(/([A-Z])/g, ' $1')\n .trim()\n );\n\n abstract readonly location: SchemaLocation;\n readonly doc?: DocSchema;\n readonly signature?: string;\n readonly name?: string;\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n static fromObject(obj: Record<string, any>): SchemaNode {\n throw new Error(`Method 'fromObject' not implemented in subclass.`);\n }\n\n toObject(): Record<string, any> {\n return pickBy(\n {\n __schema: this.__schema,\n location: this.location,\n doc: this.doc ? this.doc.toObject() : undefined,\n signature: this.signature,\n name: this.name,\n },\n (v) => v !== undefined\n );\n }\n\n abstract toString(options?: { color?: boolean }): string;\n abstract toFullSignature(options?: { showDocs?: boolean }): string;\n\n getNodes(): SchemaNode[] {\n return [this];\n }\n\n getAllNodesRecursively(visitedNodes = new Set<SchemaNode>()): SchemaNode[] {\n if (visitedNodes.has(this)) {\n return [];\n }\n\n visitedNodes.add(this);\n\n const nodes = this.getNodes();\n return [this, ...nodes.flatMap((node) => node.getAllNodesRecursively(visitedNodes))];\n }\n\n findNode(predicate: (node: SchemaNode) => boolean, visitedNodes = new Set<SchemaNode>()): SchemaNode | undefined {\n if (predicate(this)) return this;\n if (visitedNodes.has(this)) return undefined;\n\n visitedNodes.add(this);\n\n for (const child of this.getNodes()) {\n const foundNode = child.findNode(predicate, visitedNodes);\n if (foundNode) return foundNode;\n }\n\n return undefined;\n }\n}\n\nexport type SchemaLocation = {\n /**\n * file-path relative to the component root-dir. normalized to Linux.\n */\n filePath: string;\n line: number;\n character: number;\n};\n"],"mappings":";;;;;;AAAA,SAAAA,QAAA;EAAA,MAAAC,IAAA,GAAAC,OAAA;EAAAF,OAAA,YAAAA,CAAA;IAAA,OAAAC,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAE,WAAA;EAAA,MAAAF,IAAA,GAAAG,sBAAA,CAAAF,OAAA;EAAAC,UAAA,YAAAA,CAAA;IAAA,OAAAF,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAAkC,SAAAG,uBAAAC,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAkBlC;AACA;AACA;AACA;AACA;AACO,MAAeG,UAAU,CAAwB;EAC7CC,QAAQ,GAAG,IAAI,CAACC,WAAW,CAACC,IAAI;EAChCC,iBAAiB,GAAG,IAAAC,oBAAS,EACpC,IAAI,CAACH,WAAW,CAACC,IAAI,CAClBG,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CACtBA,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC,CAC1BC,IAAI,CAAC,CACV,CAAC;EAMD;EACA,OAAOC,UAAUA,CAACC,GAAwB,EAAc;IACtD,MAAM,IAAIC,KAAK,CAAC,kDAAkD,CAAC;EACrE;EAEAC,QAAQA,CAAA,EAAwB;IAC9B,OAAO,IAAAC,gBAAM,EACX;MACEX,QAAQ,EAAE,IAAI,CAACA,QAAQ;MACvBY,QAAQ,EAAE,IAAI,CAACA,QAAQ;MACvBC,GAAG,EAAE,IAAI,CAACA,GAAG,GAAG,IAAI,CAACA,GAAG,CAACH,QAAQ,CAAC,CAAC,GAAGI,SAAS;MAC/CC,SAAS,EAAE,IAAI,CAACA,SAAS;MACzBb,IAAI,EAAE,IAAI,CAACA;IACb,CAAC,EACAc,CAAC,IAAKA,CAAC,KAAKF,SACf,CAAC;EACH;EAKAG,QAAQA,CAAA,EAAiB;IACvB,OAAO,CAAC,IAAI,CAAC;EACf;EAEAC,sBAAsBA,CAACC,YAAY,GAAG,IAAIC,GAAG,CAAa,CAAC,EAAgB;IACzE,IAAID,YAAY,CAACE,GAAG,CAAC,IAAI,CAAC,EAAE;MAC1B,OAAO,EAAE;IACX;IAEAF,YAAY,CAACG,GAAG,CAAC,IAAI,CAAC;IAEtB,MAAMC,KAAK,GAAG,IAAI,CAACN,QAAQ,CAAC,CAAC;IAC7B,OAAO,CAAC,IAAI,EAAE,GAAGM,KAAK,CAACC,OAAO,CAAEC,IAAI,IAAKA,IAAI,CAACP,sBAAsB,CAACC,YAAY,CAAC,CAAC,CAAC;EACtF;EAEAO,QAAQA,CAACC,SAAwC,EAAER,YAAY,GAAG,IAAIC,GAAG,CAAa,CAAC,EAA0B;IAC/G,IAAIO,SAAS,CAAC,IAAI,CAAC,EAAE,OAAO,IAAI;IAChC,IAAIR,YAAY,CAACE,GAAG,CAAC,IAAI,CAAC,EAAE,OAAOP,SAAS;IAE5CK,YAAY,CAACG,GAAG,CAAC,IAAI,CAAC;IAEtB,KAAK,MAAMM,KAAK,IAAI,IAAI,CAACX,QAAQ,CAAC,CAAC,EAAE;MACnC,MAAMY,SAAS,GAAGD,KAAK,CAACF,QAAQ,CAACC,SAAS,EAAER,YAAY,CAAC;MACzD,IAAIU,SAAS,EAAE,OAAOA,SAAS;IACjC;IAEA,OAAOf,SAAS;EAClB;AACF;AAACgB,OAAA,CAAA/B,UAAA,GAAAA,UAAA","ignoreList":[]}
1
+ {"version":3,"names":["_lodash","data","require","_pluralize","_interopRequireDefault","_schemaDiff","e","__esModule","default","SchemaNode","__schema","constructor","name","displaySchemaName","pluralize","replace","trim","fromObject","obj","Error","toObject","pickBy","location","doc","undefined","signature","v","getNodes","getAllNodesRecursively","visitedNodes","Set","has","add","nodes","flatMap","node","findNode","predicate","child","foundNode","diff","other","facts","baseObj","compareObj","push","diffDoc","baseNoDoc","compareNoDoc","deepEqualNoLocation","changeKind","description","context","fromSignature","toSignature","from","to","exports"],"sources":["schema-node.ts"],"sourcesContent":["import { pickBy } from 'lodash';\nimport pluralize from 'pluralize';\nimport type { DocSchema } from './schemas';\nimport type { SchemaChangeFact } from './schema-diff';\nimport { deepEqualNoLocation, diffDoc } from './schema-diff';\n\nexport interface ISchemaNode {\n __schema: string;\n location: SchemaLocation;\n doc?: DocSchema;\n signature?: string;\n name?: string;\n toObject(): Record<string, any>;\n toString(options?: { color?: boolean }): string;\n toFullSignature(options?: { showDocs?: boolean }): string;\n getNodes(): SchemaNode[];\n findNode(predicate: (node: SchemaNode) => boolean, visitedNodes?: Set<SchemaNode>): SchemaNode | undefined;\n getAllNodesRecursively(visitedNodes?: Set<SchemaNode>): SchemaNode[];\n displaySchemaName: string;\n}\n\n/**\n * a convenient abstract class for all schema to extend.\n * the reason for having it as an abstract class and not an interface, for now, is mostly for the `__schema` prop.\n * this way it won't need to be implemented in each one of the subclasses.\n */\nexport abstract class SchemaNode implements ISchemaNode {\n readonly __schema = this.constructor.name;\n readonly displaySchemaName = pluralize(\n this.constructor.name\n .replace(/Schema$/, '')\n .replace(/([A-Z])/g, ' $1')\n .trim()\n );\n\n abstract readonly location: SchemaLocation;\n readonly doc?: DocSchema;\n readonly signature?: string;\n readonly name?: string;\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n static fromObject(obj: Record<string, any>): SchemaNode {\n throw new Error(`Method 'fromObject' not implemented in subclass.`);\n }\n\n toObject(): Record<string, any> {\n return pickBy(\n {\n __schema: this.__schema,\n location: this.location,\n doc: this.doc ? this.doc.toObject() : undefined,\n signature: this.signature,\n name: this.name,\n },\n (v) => v !== undefined\n );\n }\n\n abstract toString(options?: { color?: boolean }): string;\n abstract toFullSignature(options?: { showDocs?: boolean }): string;\n\n getNodes(): SchemaNode[] {\n return [this];\n }\n\n getAllNodesRecursively(visitedNodes = new Set<SchemaNode>()): SchemaNode[] {\n if (visitedNodes.has(this)) {\n return [];\n }\n\n visitedNodes.add(this);\n\n const nodes = this.getNodes();\n return [this, ...nodes.flatMap((node) => node.getAllNodesRecursively(visitedNodes))];\n }\n\n findNode(predicate: (node: SchemaNode) => boolean, visitedNodes = new Set<SchemaNode>()): SchemaNode | undefined {\n if (predicate(this)) return this;\n if (visitedNodes.has(this)) return undefined;\n\n visitedNodes.add(this);\n\n for (const child of this.getNodes()) {\n const foundNode = child.findNode(predicate, visitedNodes);\n if (foundNode) return foundNode;\n }\n\n return undefined;\n }\n\n /**\n * Compute neutral change facts between this node and another node of the same type.\n * Subclasses should override with type-specific comparison logic.\n * Returns facts without impact judgment — impact is assessed separately.\n */\n diff(other: SchemaNode): SchemaChangeFact[] {\n const facts: SchemaChangeFact[] = [];\n const baseObj = this.toObject();\n const compareObj = other.toObject();\n\n // Doc changes\n facts.push(...diffDoc(baseObj.doc, compareObj.doc));\n\n // If only doc changed, we're done\n const baseNoDoc = { ...baseObj, doc: undefined, location: undefined };\n const compareNoDoc = { ...compareObj, doc: undefined, location: undefined };\n if (deepEqualNoLocation(baseNoDoc, compareNoDoc)) return facts;\n\n // Signature changed\n if (baseObj.signature !== compareObj.signature) {\n facts.push({\n changeKind: 'signature-changed',\n description: 'signature changed',\n context: { fromSignature: baseObj.signature, toSignature: compareObj.signature },\n from: baseObj.signature,\n to: compareObj.signature,\n });\n }\n\n return facts;\n }\n}\n\nexport type SchemaLocation = {\n /**\n * file-path relative to the component root-dir. normalized to Linux.\n */\n filePath: string;\n line: number;\n character: number;\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
  import { ExpressionWithTypeArgumentsSchema } from './expression-with-arguments';
5
6
  export declare class ClassSchema extends SchemaNode {
@@ -56,5 +57,6 @@ export declare class ClassSchema extends SchemaNode {
56
57
  decorators: Record<string, any>[] | undefined;
57
58
  };
58
59
  static fromObject(obj: Record<string, any>): ClassSchema;
60
+ diff(other: SchemaNode): SchemaChangeFact[];
59
61
  static fromSchema(node: ClassSchema, memberTransformer?: (_node: SchemaNode) => SchemaNode): ClassSchema;
60
62
  }
@@ -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 () {
@@ -117,6 +124,10 @@ class ClassSchema extends _schemaNode().SchemaNode {
117
124
  const decorators = obj.decorators?.map(decorator => _schemaRegistry().SchemaRegistry.fromObject(decorator));
118
125
  return new ClassSchema(name, members, location, signature, doc, typeParams, extendsNodes, implementNodes, decorators);
119
126
  }
127
+ diff(other) {
128
+ if (!(other instanceof ClassSchema)) return super.diff(other);
129
+ return (0, _schemaDiffMembers().diffMembers)(this.toObject(), other.toObject(), this, other);
130
+ }
120
131
  static fromSchema(node, memberTransformer = _node => _node) {
121
132
  return new ClassSchema(node.name, node.members.map(memberTransformer), node.location, node.signature, node.doc, node.typeParams, node.extendsNodes, node.implementNodes, node.decorators);
122
133
  }