@teambit/schema 1.0.927 → 1.0.929

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.
@@ -36,6 +36,7 @@ useful for understanding component interfaces and generating documentation.
36
36
  ${(0, _legacy().PATTERN_HELP)('schema')}`);
37
37
  _defineProperty(this, "group", 'info-analysis');
38
38
  _defineProperty(this, "options", [['r', 'remote', 'fetch schema from remote scope (works for components not in workspace)'], ['j', 'json', 'return the component schema in json format']]);
39
+ _defineProperty(this, "commands", []);
39
40
  }
40
41
  async report([pattern], {
41
42
  remote
@@ -1 +1 @@
1
- {"version":3,"names":["_pMapSeries","data","_interopRequireDefault","require","_legacy","e","__esModule","default","_defineProperty","r","t","_toPropertyKey","Object","defineProperty","value","enumerable","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","SchemaCommand","constructor","schema","component","logger","PATTERN_HELP","report","pattern","remote","schemas","getSchemas","map","toStringPerType","join","json","toObject","getSchemaFromRemote","host","getHost","ids","idsByPattern","components","getMany","longRunningLog","createLongProcessLogger","length","results","pMapSeries","logProgress","id","toString","getSchema","undefined","end","exports"],"sources":["schema.cmd.ts"],"sourcesContent":["import type { Command, CommandOptions } from '@teambit/cli';\nimport type { ComponentMain } from '@teambit/component';\nimport pMapSeries from 'p-map-series';\nimport type { Logger } from '@teambit/logger';\nimport type { APISchema } from '@teambit/semantics.entities.semantic-schema';\nimport { PATTERN_HELP } from '@teambit/legacy.constants';\nimport type { SchemaMain } from './schema.main.runtime';\n\nexport class SchemaCommand implements Command {\n name = 'schema <pattern>';\n description = 'display component API schema and type definitions';\n extendedDescription = `extracts and displays the public API structure of components including types, functions, classes, and interfaces.\nshows detailed type information, function signatures, and JSDoc documentation for exported elements.\nuseful for understanding component interfaces and generating documentation.\n\n${PATTERN_HELP('schema')}`;\n group = 'info-analysis';\n options = [\n ['r', 'remote', 'fetch schema from remote scope (works for components not in workspace)'],\n ['j', 'json', 'return the component schema in json format'],\n ] as CommandOptions;\n\n constructor(\n private schema: SchemaMain,\n private component: ComponentMain,\n private logger: Logger\n ) {}\n\n async report([pattern]: [string], { remote }: { remote: boolean }): Promise<string> {\n const schemas = await this.getSchemas([pattern], remote);\n return schemas.map((schema) => schema.toStringPerType()).join('\\n\\n\\n');\n }\n\n async json([pattern]: [string], { remote }: { remote: boolean }): Promise<Record<string, any>> {\n const schemas = await this.getSchemas([pattern], remote);\n return schemas.map((schema) => schema.toObject());\n }\n\n private async getSchemas([pattern]: [string], remote = false): Promise<APISchema[]> {\n if (remote) {\n const schema = await this.schema.getSchemaFromRemote(pattern);\n return [schema];\n }\n const host = this.component.getHost();\n const ids = await host.idsByPattern(pattern, true);\n const components = await host.getMany(ids);\n const longRunningLog = this.logger.createLongProcessLogger('generating schema', ids.length);\n const results = await pMapSeries(components, (component) => {\n longRunningLog.logProgress(component.id.toString());\n return this.schema.getSchema(component, undefined, true);\n });\n longRunningLog.end();\n return results;\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_pMapSeries","data","_interopRequireDefault","require","_legacy","e","__esModule","default","_defineProperty","r","t","_toPropertyKey","Object","defineProperty","value","enumerable","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","SchemaCommand","constructor","schema","component","logger","PATTERN_HELP","report","pattern","remote","schemas","getSchemas","map","toStringPerType","join","json","toObject","getSchemaFromRemote","host","getHost","ids","idsByPattern","components","getMany","longRunningLog","createLongProcessLogger","length","results","pMapSeries","logProgress","id","toString","getSchema","undefined","end","exports"],"sources":["schema.cmd.ts"],"sourcesContent":["import type { Command, CommandOptions } from '@teambit/cli';\nimport type { ComponentMain } from '@teambit/component';\nimport pMapSeries from 'p-map-series';\nimport type { Logger } from '@teambit/logger';\nimport type { APISchema } from '@teambit/semantics.entities.semantic-schema';\nimport { PATTERN_HELP } from '@teambit/legacy.constants';\nimport type { SchemaMain } from './schema.main.runtime';\n\nexport class SchemaCommand implements Command {\n name = 'schema <pattern>';\n description = 'display component API schema and type definitions';\n extendedDescription = `extracts and displays the public API structure of components including types, functions, classes, and interfaces.\nshows detailed type information, function signatures, and JSDoc documentation for exported elements.\nuseful for understanding component interfaces and generating documentation.\n\n${PATTERN_HELP('schema')}`;\n group = 'info-analysis';\n options = [\n ['r', 'remote', 'fetch schema from remote scope (works for components not in workspace)'],\n ['j', 'json', 'return the component schema in json format'],\n ] as CommandOptions;\n commands: Command[] = [];\n\n constructor(\n private schema: SchemaMain,\n private component: ComponentMain,\n private logger: Logger\n ) {}\n\n async report([pattern]: [string], { remote }: { remote: boolean }): Promise<string> {\n const schemas = await this.getSchemas([pattern], remote);\n return schemas.map((schema) => schema.toStringPerType()).join('\\n\\n\\n');\n }\n\n async json([pattern]: [string], { remote }: { remote: boolean }): Promise<Record<string, any>> {\n const schemas = await this.getSchemas([pattern], remote);\n return schemas.map((schema) => schema.toObject());\n }\n\n private async getSchemas([pattern]: [string], remote = false): Promise<APISchema[]> {\n if (remote) {\n const schema = await this.schema.getSchemaFromRemote(pattern);\n return [schema];\n }\n const host = this.component.getHost();\n const ids = await host.idsByPattern(pattern, true);\n const components = await host.getMany(ids);\n const longRunningLog = this.logger.createLongProcessLogger('generating schema', ids.length);\n const results = await pMapSeries(components, (component) => {\n longRunningLog.logProgress(component.id.toString());\n return this.schema.getSchema(component, undefined, true);\n });\n longRunningLog.end();\n return results;\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -34,8 +34,46 @@ function schemaSchema(schema) {
34
34
  return {
35
35
  typeDefs: (0, _graphqlTag().gql)`
36
36
  scalar JSONObject
37
+
38
+ type APIDiffDetail {
39
+ changeKind: String!
40
+ description: String!
41
+ impact: String!
42
+ from: String
43
+ to: String
44
+ }
45
+
46
+ type APIDiffChange {
47
+ status: String!
48
+ visibility: String!
49
+ exportName: String!
50
+ schemaType: String!
51
+ schemaTypeRaw: String!
52
+ impact: String!
53
+ baseSignature: String
54
+ compareSignature: String
55
+ baseNode: JSONObject
56
+ compareNode: JSONObject
57
+ changes: [APIDiffDetail!]
58
+ }
59
+
60
+ type APIDiffResult {
61
+ hasChanges: Boolean!
62
+ impact: String!
63
+ publicChanges: [APIDiffChange!]!
64
+ internalChanges: [APIDiffChange!]!
65
+ changes: [APIDiffChange!]!
66
+ added: Int!
67
+ removed: Int!
68
+ modified: Int!
69
+ breaking: Int!
70
+ nonBreaking: Int!
71
+ patch: Int!
72
+ }
73
+
37
74
  extend type ComponentHost {
38
75
  getSchema(id: String!, skipInternals: Boolean): JSONObject
76
+ apiDiff(baseId: String!, compareId: String!): APIDiffResult
39
77
  }
40
78
  `,
41
79
  resolvers: {
@@ -52,6 +90,15 @@ function schemaSchema(schema) {
52
90
  const api = await schema.getSchema(component, undefined, undefined, undefined, undefined, skipInternals);
53
91
  if (!api) return empty;
54
92
  return filterUnimplementedAndAddDefaults(api);
93
+ },
94
+ apiDiff: async (host, {
95
+ baseId,
96
+ compareId
97
+ }) => {
98
+ const [baseCompId, compareCompId] = await Promise.all([host.resolveComponentId(baseId), host.resolveComponentId(compareId)]);
99
+ const [baseComp, compareComp] = await Promise.all([host.get(baseCompId), host.get(compareCompId)]);
100
+ if (!baseComp || !compareComp) return null;
101
+ return schema.computeAPIDiff(baseComp, compareComp);
55
102
  }
56
103
  }
57
104
  }
@@ -1 +1 @@
1
- {"version":3,"names":["_graphqlTypeJson","data","require","_graphqlTag","_semanticsEntities","ownKeys","e","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","_toPropertyKey","value","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","schemaSchema","schema","typeDefs","gql","resolvers","JSONObject","GraphQLJSONObject","ComponentHost","getSchema","host","id","skipInternals","componentId","resolveComponentId","component","get","empty","APISchema","toObject","api","undefined","filterUnimplementedAndAddDefaults","apiObject","filteredExports","module","exports","exp","exportNode","__schema","UnImplementedSchema","name","filteredInternals","internals","map","internalObject","filteredInternalExports","filteredInternalNodes","filteredTaggedExports","taggedModuleExports","defaultTaggedExports","exportedModule"],"sources":["schema.graphql.ts"],"sourcesContent":["import type { ComponentFactory } from '@teambit/component';\nimport { GraphQLJSONObject } from 'graphql-type-json';\nimport { gql } from 'graphql-tag';\nimport { APISchema, UnImplementedSchema } from '@teambit/semantics.entities.semantic-schema';\nimport type { Schema } from '@teambit/graphql';\nimport type { SchemaMain } from './schema.main.runtime';\n\nexport function schemaSchema(schema: SchemaMain): Schema {\n return {\n typeDefs: gql`\n scalar JSONObject\n extend type ComponentHost {\n getSchema(id: String!, skipInternals: Boolean): JSONObject\n }\n `,\n resolvers: {\n JSONObject: GraphQLJSONObject,\n ComponentHost: {\n getSchema: async (host: ComponentFactory, { id, skipInternals }: { id: string; skipInternals?: boolean }) => {\n const componentId = await host.resolveComponentId(id);\n const component = await host.get(componentId);\n const empty = APISchema.empty(componentId).toObject();\n\n if (!component) return empty;\n const api = await schema.getSchema(component, undefined, undefined, undefined, undefined, skipInternals);\n if (!api) return empty;\n\n return filterUnimplementedAndAddDefaults(api);\n },\n },\n },\n };\n}\n\nfunction filterUnimplementedAndAddDefaults(api: APISchema) {\n const apiObject = api.toObject();\n\n const filteredExports = apiObject.module.exports.filter((exp) => {\n if (exp.exportNode) {\n return exp.exportNode.__schema !== UnImplementedSchema.name;\n }\n return (exp as Record<string, any>).__schema !== UnImplementedSchema.name;\n });\n\n const filteredInternals = apiObject.internals.map((internalObject) => {\n const filteredInternalExports = internalObject.exports.filter((exp) => {\n if (exp.exportNode) {\n return exp.exportNode.__schema !== UnImplementedSchema.name;\n }\n return (exp as Record<string, any>).__schema !== UnImplementedSchema.name;\n });\n const filteredInternalNodes = internalObject.internals.filter((exp) => exp.__schema !== UnImplementedSchema.name);\n return {\n ...internalObject,\n exports: filteredInternalExports,\n internals: filteredInternalNodes,\n };\n });\n\n const filteredTaggedExports = apiObject.taggedModuleExports.filter(\n (exp) => exp.__schema !== UnImplementedSchema.name\n );\n\n const defaultTaggedExports = filteredExports\n .filter((exportedModule) => {\n if (exportedModule.exportNode) {\n return exportedModule.exportNode.__schema === 'ReactSchema';\n }\n return (exportedModule as Record<string, any>).__schema === 'ReactSchema';\n })\n .map((exportedModule) => {\n if (exportedModule.exportNode) {\n return exportedModule.exportNode;\n }\n return exportedModule;\n });\n\n return {\n ...apiObject,\n internals: filteredInternals,\n taggedModuleExports: filteredTaggedExports.length > 0 ? filteredTaggedExports : defaultTaggedExports,\n };\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_graphqlTypeJson","data","require","_graphqlTag","_semanticsEntities","ownKeys","e","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","_toPropertyKey","value","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","schemaSchema","schema","typeDefs","gql","resolvers","JSONObject","GraphQLJSONObject","ComponentHost","getSchema","host","id","skipInternals","componentId","resolveComponentId","component","get","empty","APISchema","toObject","api","undefined","filterUnimplementedAndAddDefaults","apiDiff","baseId","compareId","baseCompId","compareCompId","Promise","all","baseComp","compareComp","computeAPIDiff","apiObject","filteredExports","module","exports","exp","exportNode","__schema","UnImplementedSchema","name","filteredInternals","internals","map","internalObject","filteredInternalExports","filteredInternalNodes","filteredTaggedExports","taggedModuleExports","defaultTaggedExports","exportedModule"],"sources":["schema.graphql.ts"],"sourcesContent":["import type { ComponentFactory } from '@teambit/component';\nimport { GraphQLJSONObject } from 'graphql-type-json';\nimport { gql } from 'graphql-tag';\nimport { APISchema, UnImplementedSchema } from '@teambit/semantics.entities.semantic-schema';\nimport type { Schema } from '@teambit/graphql';\nimport type { SchemaMain } from './schema.main.runtime';\n\nexport function schemaSchema(schema: SchemaMain): Schema {\n return {\n typeDefs: gql`\n scalar JSONObject\n\n type APIDiffDetail {\n changeKind: String!\n description: String!\n impact: String!\n from: String\n to: String\n }\n\n type APIDiffChange {\n status: String!\n visibility: String!\n exportName: String!\n schemaType: String!\n schemaTypeRaw: String!\n impact: String!\n baseSignature: String\n compareSignature: String\n baseNode: JSONObject\n compareNode: JSONObject\n changes: [APIDiffDetail!]\n }\n\n type APIDiffResult {\n hasChanges: Boolean!\n impact: String!\n publicChanges: [APIDiffChange!]!\n internalChanges: [APIDiffChange!]!\n changes: [APIDiffChange!]!\n added: Int!\n removed: Int!\n modified: Int!\n breaking: Int!\n nonBreaking: Int!\n patch: Int!\n }\n\n extend type ComponentHost {\n getSchema(id: String!, skipInternals: Boolean): JSONObject\n apiDiff(baseId: String!, compareId: String!): APIDiffResult\n }\n `,\n resolvers: {\n JSONObject: GraphQLJSONObject,\n ComponentHost: {\n getSchema: async (host: ComponentFactory, { id, skipInternals }: { id: string; skipInternals?: boolean }) => {\n const componentId = await host.resolveComponentId(id);\n const component = await host.get(componentId);\n const empty = APISchema.empty(componentId).toObject();\n\n if (!component) return empty;\n const api = await schema.getSchema(component, undefined, undefined, undefined, undefined, skipInternals);\n if (!api) return empty;\n\n return filterUnimplementedAndAddDefaults(api);\n },\n apiDiff: async (host: ComponentFactory, { baseId, compareId }: { baseId: string; compareId: string }) => {\n const [baseCompId, compareCompId] = await Promise.all([\n host.resolveComponentId(baseId),\n host.resolveComponentId(compareId),\n ]);\n const [baseComp, compareComp] = await Promise.all([host.get(baseCompId), host.get(compareCompId)]);\n if (!baseComp || !compareComp) return null;\n return schema.computeAPIDiff(baseComp, compareComp);\n },\n },\n },\n };\n}\n\nfunction filterUnimplementedAndAddDefaults(api: APISchema) {\n const apiObject = api.toObject();\n\n const filteredExports = apiObject.module.exports.filter((exp) => {\n if (exp.exportNode) {\n return exp.exportNode.__schema !== UnImplementedSchema.name;\n }\n return (exp as Record<string, any>).__schema !== UnImplementedSchema.name;\n });\n\n const filteredInternals = apiObject.internals.map((internalObject) => {\n const filteredInternalExports = internalObject.exports.filter((exp) => {\n if (exp.exportNode) {\n return exp.exportNode.__schema !== UnImplementedSchema.name;\n }\n return (exp as Record<string, any>).__schema !== UnImplementedSchema.name;\n });\n const filteredInternalNodes = internalObject.internals.filter((exp) => exp.__schema !== UnImplementedSchema.name);\n return {\n ...internalObject,\n exports: filteredInternalExports,\n internals: filteredInternalNodes,\n };\n });\n\n const filteredTaggedExports = apiObject.taggedModuleExports.filter(\n (exp) => exp.__schema !== UnImplementedSchema.name\n );\n\n const defaultTaggedExports = filteredExports\n .filter((exportedModule) => {\n if (exportedModule.exportNode) {\n return exportedModule.exportNode.__schema === 'ReactSchema';\n }\n return (exportedModule as Record<string, any>).__schema === 'ReactSchema';\n })\n .map((exportedModule) => {\n if (exportedModule.exportNode) {\n return exportedModule.exportNode;\n }\n return exportedModule;\n });\n\n return {\n ...apiObject,\n internals: filteredInternals,\n taggedModuleExports: filteredTaggedExports.length > 0 ? filteredTaggedExports : defaultTaggedExports,\n };\n}\n"],"mappings":"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","ignoreList":[]}
@@ -10,9 +10,12 @@ import type { BuilderMain } from '@teambit/builder';
10
10
  import type { Workspace } from '@teambit/workspace';
11
11
  import type { ScopeMain } from '@teambit/scope';
12
12
  import type { SchemaNodeTransformer, SchemaTransformer } from '@teambit/typescript';
13
+ import type { ImpactRule, APIDiffResult } from '@teambit/semantics.entities.semantic-schema-diff';
14
+ import { ImpactAssessor } from '@teambit/semantics.entities.semantic-schema-diff';
13
15
  import type { Parser } from './parser';
14
16
  import type { SchemaExtractor } from './schema-extractor';
15
17
  export type ParserSlot = SlotRegistry<Parser>;
18
+ export type ImpactRuleSlot = SlotRegistry<ImpactRule[]>;
16
19
  export type SchemaConfig = {
17
20
  /**
18
21
  * default parser
@@ -31,16 +34,25 @@ export declare class SchemaMain {
31
34
  * parsers slot.
32
35
  */
33
36
  private parserSlot;
37
+ /**
38
+ * impact rules slot — other aspects register custom rules via registerImpactRules().
39
+ */
40
+ private impactRuleSlot;
34
41
  private envs;
35
42
  private config;
36
43
  private builder;
37
44
  private workspace;
38
45
  private logger;
46
+ private impactAssessor;
39
47
  constructor(
40
48
  /**
41
49
  * parsers slot.
42
50
  */
43
- parserSlot: ParserSlot, envs: EnvsMain, config: SchemaConfig, builder: BuilderMain, workspace: Workspace, logger: Logger);
51
+ parserSlot: ParserSlot,
52
+ /**
53
+ * impact rules slot — other aspects register custom rules via registerImpactRules().
54
+ */
55
+ impactRuleSlot: ImpactRuleSlot, envs: EnvsMain, config: SchemaConfig, builder: BuilderMain, workspace: Workspace, logger: Logger, impactAssessor: ImpactAssessor);
44
56
  /**
45
57
  * get the default parser.
46
58
  */
@@ -77,10 +89,24 @@ export declare class SchemaMain {
77
89
  getSchemaData(component: Component): {
78
90
  [key: string]: any;
79
91
  } | undefined;
92
+ /**
93
+ * Register custom impact rules for API diff assessment.
94
+ * Custom rules take priority over default rules.
95
+ * This allows environments to customize what constitutes a breaking change.
96
+ */
97
+ registerImpactRules(rules: ImpactRule[]): void;
98
+ /**
99
+ * Get the ImpactAssessor with default + all registered custom rules from the slot.
100
+ */
101
+ getImpactAssessor(): ImpactAssessor;
102
+ /**
103
+ * Compute the semantic API diff between two component versions.
104
+ */
105
+ computeAPIDiff(baseComp: Component, compareComp: Component): Promise<APIDiffResult | null>;
80
106
  isSchemaTaskDisabled(component: Component): any;
81
107
  static runtime: import("@teambit/harmony").RuntimeDefinition;
82
108
  static dependencies: import("@teambit/harmony").Aspect[];
83
- static slots: ((registerFn: () => string) => SlotRegistry<Parser>)[];
109
+ static slots: (((registerFn: () => string) => SlotRegistry<Parser>) | ((registerFn: () => string) => SlotRegistry<ImpactRule[]>))[];
84
110
  static defaultConfig: {
85
111
  defaultParser: string;
86
112
  disabled: boolean;
@@ -94,6 +120,6 @@ export declare class SchemaMain {
94
120
  BuilderMain,
95
121
  Workspace,
96
122
  ScopeMain
97
- ], config: SchemaConfig, [parserSlot]: [ParserSlot]): Promise<SchemaMain>;
123
+ ], config: SchemaConfig, [parserSlot, impactRuleSlot]: [ParserSlot, ImpactRuleSlot]): Promise<SchemaMain>;
98
124
  }
99
125
  export default SchemaMain;
@@ -88,6 +88,13 @@ function _scope2() {
88
88
  };
89
89
  return data;
90
90
  }
91
+ function _semanticsEntities2() {
92
+ const data = require("@teambit/semantics.entities.semantic-schema-diff");
93
+ _semanticsEntities2 = function () {
94
+ return data;
95
+ };
96
+ return data;
97
+ }
91
98
  function _schema() {
92
99
  const data = require("./schema.aspect");
93
100
  _schema = function () {
@@ -102,6 +109,13 @@ function _schema2() {
102
109
  };
103
110
  return data;
104
111
  }
112
+ function _schemaDiff() {
113
+ const data = require("./schema-diff.cmd");
114
+ _schemaDiff = function () {
115
+ return data;
116
+ };
117
+ return data;
118
+ }
105
119
  function _schema3() {
106
120
  const data = require("./schema.graphql");
107
121
  _schema3 = function () {
@@ -134,13 +148,19 @@ class SchemaMain {
134
148
  /**
135
149
  * parsers slot.
136
150
  */
137
- parserSlot, envs, config, builder, workspace, logger) {
151
+ parserSlot,
152
+ /**
153
+ * impact rules slot — other aspects register custom rules via registerImpactRules().
154
+ */
155
+ impactRuleSlot, envs, config, builder, workspace, logger, impactAssessor) {
138
156
  this.parserSlot = parserSlot;
157
+ this.impactRuleSlot = impactRuleSlot;
139
158
  this.envs = envs;
140
159
  this.config = config;
141
160
  this.builder = builder;
142
161
  this.workspace = workspace;
143
162
  this.logger = logger;
163
+ this.impactAssessor = impactAssessor;
144
164
  }
145
165
 
146
166
  /**
@@ -283,15 +303,50 @@ class SchemaMain {
283
303
  getSchemaData(component) {
284
304
  return component.state.aspects.get(_schema().SchemaAspect.id)?.data;
285
305
  }
306
+
307
+ /**
308
+ * Register custom impact rules for API diff assessment.
309
+ * Custom rules take priority over default rules.
310
+ * This allows environments to customize what constitutes a breaking change.
311
+ */
312
+ registerImpactRules(rules) {
313
+ this.impactRuleSlot.register(rules);
314
+ }
315
+
316
+ /**
317
+ * Get the ImpactAssessor with default + all registered custom rules from the slot.
318
+ */
319
+ getImpactAssessor() {
320
+ this.impactAssessor.registerRules(this.impactRuleSlot.values().flat());
321
+ return this.impactAssessor;
322
+ }
323
+
324
+ /**
325
+ * Compute the semantic API diff between two component versions.
326
+ */
327
+ async computeAPIDiff(baseComp, compareComp) {
328
+ try {
329
+ const [baseSchema, compareSchema] = await Promise.all([this.getSchema(baseComp), this.getSchema(compareComp)]);
330
+ const assessor = this.getImpactAssessor();
331
+ return (0, _semanticsEntities2().computeAPIDiff)(baseSchema, compareSchema, assessor);
332
+ } catch (err) {
333
+ this.logger.warn(`failed computing API diff: ${err.message}`);
334
+ return null;
335
+ }
336
+ }
286
337
  isSchemaTaskDisabled(component) {
287
338
  return this.getSchemaData(component)?.disabled;
288
339
  }
289
- static async provider([envs, cli, component, graphql, loggerMain, builder, workspace, scope], config, [parserSlot]) {
340
+ static async provider([envs, cli, component, graphql, loggerMain, builder, workspace, scope], config, [parserSlot, impactRuleSlot]) {
290
341
  const logger = loggerMain.createLogger(_schema().SchemaAspect.id);
291
- const schema = new SchemaMain(parserSlot, envs, config, builder, workspace, logger);
342
+ const impactAssessor = new (_semanticsEntities2().ImpactAssessor)();
343
+ impactAssessor.registerDefaultRules(_semanticsEntities2().DEFAULT_IMPACT_RULES);
344
+ const schema = new SchemaMain(parserSlot, impactRuleSlot, envs, config, builder, workspace, logger, impactAssessor);
292
345
  const schemaTask = new (_schema4().SchemaTask)(_schema().SchemaAspect.id, schema, logger);
293
346
  builder.registerBuildTasks([schemaTask]);
294
- cli.register(new (_schema2().SchemaCommand)(schema, component, logger));
347
+ const schemaCmd = new (_schema2().SchemaCommand)(schema, component, logger);
348
+ schemaCmd.commands = [new (_schemaDiff().SchemaDiffCommand)(schema, component, logger)];
349
+ cli.register(schemaCmd);
295
350
  graphql.register(() => (0, _schema3().schemaSchema)(schema));
296
351
  envs.registerService(new (_schema5().SchemaService)());
297
352
  if (workspace) {
@@ -308,7 +363,7 @@ class SchemaMain {
308
363
  exports.SchemaMain = SchemaMain;
309
364
  _defineProperty(SchemaMain, "runtime", _cli().MainRuntime);
310
365
  _defineProperty(SchemaMain, "dependencies", [_envs().EnvsAspect, _cli().CLIAspect, _component().ComponentAspect, _graphql().GraphqlAspect, _logger().LoggerAspect, _builder().BuilderAspect, _workspace().WorkspaceAspect, _scope().ScopeAspect]);
311
- _defineProperty(SchemaMain, "slots", [_harmony().Slot.withType()]);
366
+ _defineProperty(SchemaMain, "slots", [_harmony().Slot.withType(), _harmony().Slot.withType()]);
312
367
  _defineProperty(SchemaMain, "defaultConfig", {
313
368
  defaultParser: 'teambit.typescript/typescript',
314
369
  disabled: false
@@ -1 +1 @@
1
- {"version":3,"names":["_cli","data","require","_component","_harmony","_graphql","_envs","_logger","_semanticsEntities","_builder","_workspace","_scope","_legacy","_scope2","_schema","_schema2","_schema3","_schema4","_schema5","_defineProperty","e","r","t","_toPropertyKey","Object","defineProperty","value","enumerable","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","SchemaMain","constructor","parserSlot","envs","config","builder","workspace","logger","getDefaultParser","get","defaultParser","registerSchemaClass","schema","SchemaRegistry","register","registerSchemaClasses","getSchemas","registerGetSchemas","parseModule","path","content","parsers","toArray","maybeParser","find","parser","match","extension","getSchemaExtractor","component","tsserverPath","contextPath","env","getEnv","Error","name","undefined","getSchema","shouldDisposeResourcesOnceDone","alwaysRunExtractor","skipInternals","schemaTransformers","apiTransformers","includeFiles","disabled","APISchema","empty","id","buildStatus","BuildStatus","Succeed","formatter","getFormatter","setKey","schemaExtractor","result","extract","dispose","err","message","warn","toString","schemaArtifact","getArtifactsVinylByAspectAndTaskName","SchemaAspect","SCHEMA_TASK_NAME","length","debug","schemaJsonStr","contents","schemaJson","JSON","parse","getSchemaFromObject","SyntaxError","error","obj","fromObject","getSchemaFromRemote","isPattern","some","char","includes","getId","startsWith","compId","resolveComponentIdFromPackageName","compIdStr","http","Http","connect","SYMPHONY_GRAPHQL","CENTRAL_BIT_HUB_NAME","response","registerParser","calcSchemaData","getSchemaData","state","aspects","isSchemaTaskDisabled","provider","cli","graphql","loggerMain","scope","createLogger","schemaTask","SchemaTask","registerBuildTasks","SchemaCommand","schemaSchema","registerService","SchemaService","registerOnComponentLoad","registerOnCompAspectReCalc","values","Schemas","exports","MainRuntime","EnvsAspect","CLIAspect","ComponentAspect","GraphqlAspect","LoggerAspect","BuilderAspect","WorkspaceAspect","ScopeAspect","Slot","withType","addRuntime","_default","default"],"sources":["schema.main.runtime.ts"],"sourcesContent":["import type { CLIMain } from '@teambit/cli';\nimport { MainRuntime, CLIAspect } from '@teambit/cli';\nimport type { Component, ComponentMain } from '@teambit/component';\nimport { ComponentAspect } from '@teambit/component';\nimport type { SlotRegistry } from '@teambit/harmony';\nimport { Slot } from '@teambit/harmony';\nimport type { GraphqlMain } from '@teambit/graphql';\nimport { GraphqlAspect } from '@teambit/graphql';\nimport type { EnvsMain } from '@teambit/envs';\nimport { EnvsAspect } from '@teambit/envs';\nimport type { Logger, LoggerMain } from '@teambit/logger';\nimport { LoggerAspect } from '@teambit/logger';\nimport type { PrettierConfigMutator } from '@teambit/defender.prettier.config-mutator';\nimport type { Export, SchemaNodeConstructor } from '@teambit/semantics.entities.semantic-schema';\nimport { APISchema, Schemas, SchemaRegistry } from '@teambit/semantics.entities.semantic-schema';\nimport type { BuilderMain } from '@teambit/builder';\nimport { BuilderAspect } from '@teambit/builder';\nimport type { Workspace } from '@teambit/workspace';\nimport { WorkspaceAspect } from '@teambit/workspace';\nimport type { ScopeMain } from '@teambit/scope';\nimport { ScopeAspect } from '@teambit/scope';\nimport type { Formatter } from '@teambit/formatter';\nimport type { SchemaNodeTransformer, SchemaTransformer } from '@teambit/typescript';\nimport { BuildStatus, CENTRAL_BIT_HUB_NAME, SYMPHONY_GRAPHQL } from '@teambit/legacy.constants';\nimport { Http } from '@teambit/scope.network';\nimport type { Parser } from './parser';\nimport { SchemaAspect } from './schema.aspect';\nimport type { SchemaExtractor } from './schema-extractor';\nimport { SchemaCommand } from './schema.cmd';\nimport { schemaSchema } from './schema.graphql';\nimport { SchemaTask, SCHEMA_TASK_NAME } from './schema.task';\nimport { SchemaService } from './schema.service';\n\nexport type ParserSlot = SlotRegistry<Parser>;\n\nexport type SchemaConfig = {\n /**\n * default parser\n */\n defaultParser: string;\n /**\n * disable extracting schema\n */\n disabled?: boolean;\n};\n\n/**\n * extension for extracting component schemas.\n */\nexport class SchemaMain {\n constructor(\n /**\n * parsers slot.\n */\n private parserSlot: ParserSlot,\n\n private envs: EnvsMain,\n\n private config: SchemaConfig,\n\n private builder: BuilderMain,\n\n private workspace: Workspace,\n\n private logger: Logger\n ) {}\n\n /**\n * get the default parser.\n */\n getDefaultParser(): Parser {\n return this.parserSlot.get(this.config.defaultParser) as Parser;\n }\n\n /**\n * @deprecated use registerSchemaClasses instead\n * registerSchemaClasses is better for performance as it lazy-loads the schemas.\n */\n registerSchemaClass(schema: SchemaNodeConstructor) {\n SchemaRegistry.register(schema);\n }\n\n registerSchemaClasses(getSchemas: () => SchemaNodeConstructor[]) {\n SchemaRegistry.registerGetSchemas(getSchemas);\n }\n\n /**\n * parse a module into a component schema.\n */\n parseModule(path: string, content?: string): Export[] {\n const parsers = this.parserSlot.toArray();\n let maybeParser = parsers.find(([, parser]) => {\n const match = path.match(parser.extension);\n return match;\n });\n\n if (!maybeParser) {\n maybeParser = [this.config.defaultParser, this.getDefaultParser()];\n }\n\n const [, parser] = maybeParser;\n return parser.parseModule(path, content);\n }\n\n getSchemaExtractor(component: Component, tsserverPath?: string, contextPath?: string): SchemaExtractor {\n const env = this.envs.getEnv(component).env;\n if (typeof env.getSchemaExtractor === 'undefined') {\n throw new Error(`No SchemaExtractor defined for ${env.name}`);\n }\n\n return env.getSchemaExtractor(undefined, tsserverPath, contextPath);\n }\n\n /**\n * get a schema of a component.\n * @param component target component.\n * @param shouldDisposeResourcesOnceDone for long-running processes, such as bit-start/bit-watch, this is not\n * relevant. for calling the API only to get a schema for one component, this is needed to ensure the ts-server is\n * not kept alive. otherwise, the process will never end.\n *\n */\n async getSchema(\n component: Component,\n shouldDisposeResourcesOnceDone = false,\n alwaysRunExtractor = false,\n tsserverPath?: string,\n contextPath?: string,\n skipInternals?: boolean,\n schemaTransformers?: SchemaTransformer[],\n apiTransformers?: SchemaNodeTransformer[],\n includeFiles?: string[]\n ): Promise<APISchema> {\n if (this.config.disabled) {\n return APISchema.empty(component.id as any);\n }\n\n if (alwaysRunExtractor || (this.workspace && component.buildStatus !== BuildStatus.Succeed)) {\n try {\n const env = this.envs.getEnv(component).env;\n // types need to be fixed\n const formatter: Formatter | undefined = env.getFormatter?.(null, [\n (config: PrettierConfigMutator) => {\n config.setKey('parser', 'typescript');\n return config;\n },\n ]);\n if (typeof env.getSchemaExtractor === 'undefined') {\n throw new Error(`No SchemaExtractor defined for ${env.name}`);\n }\n const schemaExtractor: SchemaExtractor = env.getSchemaExtractor(\n undefined,\n tsserverPath,\n contextPath,\n schemaTransformers,\n apiTransformers\n );\n\n const result = await schemaExtractor.extract(component, {\n formatter,\n tsserverPath,\n contextPath,\n skipInternals,\n includeFiles,\n });\n if (shouldDisposeResourcesOnceDone) schemaExtractor.dispose();\n\n return result;\n } catch (err) {\n if (alwaysRunExtractor) throw err;\n const message = err instanceof Error ? err.message : String(err);\n this.logger.warn(\n `failed extracting schema for ${component.id.toString()}, falling back to artifacts. extractor error: ${message}`,\n err\n );\n }\n }\n\n // on scope get schema from builder api\n const schemaArtifact = await this.builder.getArtifactsVinylByAspectAndTaskName(\n component,\n SchemaAspect.id,\n SCHEMA_TASK_NAME\n );\n\n if (schemaArtifact.length === 0) {\n this.logger.debug(`no schema found for ${component.id.toString()}`);\n\n /**\n * return empty schema\n * when tag/snap without build\n * or backwards compatibility\n */\n return APISchema.empty(component.id as any);\n }\n\n const schemaJsonStr = schemaArtifact[0].contents.toString('utf-8');\n\n try {\n const schemaJson = JSON.parse(schemaJsonStr);\n return this.getSchemaFromObject(schemaJson);\n } catch (e) {\n if (e instanceof SyntaxError) {\n this.logger.error(e.message);\n throw new Error(`Invalid schema.json for ${component.id}`);\n }\n throw e;\n }\n }\n\n getSchemaFromObject(obj: Record<string, any>): APISchema {\n return APISchema.fromObject(obj);\n }\n\n async getSchemaFromRemote(id: string): Promise<APISchema> {\n const isPattern = ['*', ',', '!', '$', ':'].some((char) => id.includes(char));\n if (isPattern) {\n throw new Error(`remote schema command doesn't support pattern matching. please use a specific component id`);\n }\n const getId = async () => {\n if (!id.startsWith('@')) return id;\n if (!this.workspace) throw new Error(`Please provide a component ID. The ${id} recognized as a package name.`);\n const compId = await this.workspace.resolveComponentIdFromPackageName(id, true);\n return compId.toString();\n };\n const compIdStr = await getId();\n const http = await Http.connect(SYMPHONY_GRAPHQL, CENTRAL_BIT_HUB_NAME);\n const response = await http.getSchema(compIdStr);\n return this.getSchemaFromObject(response);\n }\n\n /**\n * register a new parser.\n */\n registerParser(parser: Parser): SchemaMain {\n this.parserSlot.register(parser);\n return this;\n }\n\n async calcSchemaData(): Promise<{ disabled?: boolean }> {\n return {\n disabled: this.config.disabled,\n };\n }\n\n getSchemaData(component: Component) {\n return component.state.aspects.get(SchemaAspect.id)?.data;\n }\n\n isSchemaTaskDisabled(component: Component) {\n return this.getSchemaData(component)?.disabled;\n }\n\n static runtime = MainRuntime;\n static dependencies = [\n EnvsAspect,\n CLIAspect,\n ComponentAspect,\n GraphqlAspect,\n LoggerAspect,\n BuilderAspect,\n WorkspaceAspect,\n ScopeAspect,\n ];\n static slots = [Slot.withType<Parser>()];\n\n static defaultConfig = {\n defaultParser: 'teambit.typescript/typescript',\n disabled: false,\n };\n\n static async provider(\n [envs, cli, component, graphql, loggerMain, builder, workspace, scope]: [\n EnvsMain,\n CLIMain,\n ComponentMain,\n GraphqlMain,\n LoggerMain,\n BuilderMain,\n Workspace,\n ScopeMain,\n ],\n config: SchemaConfig,\n [parserSlot]: [ParserSlot]\n ) {\n const logger = loggerMain.createLogger(SchemaAspect.id);\n const schema = new SchemaMain(parserSlot, envs, config, builder, workspace, logger);\n const schemaTask = new SchemaTask(SchemaAspect.id, schema, logger);\n builder.registerBuildTasks([schemaTask]);\n cli.register(new SchemaCommand(schema, component, logger));\n graphql.register(() => schemaSchema(schema));\n envs.registerService(new SchemaService());\n if (workspace) {\n workspace.registerOnComponentLoad(async () => schema.calcSchemaData());\n }\n if (scope) {\n scope.registerOnCompAspectReCalc(async () => schema.calcSchemaData());\n }\n // register all default schema classes\n schema.registerSchemaClasses(() => Object.values(Schemas));\n\n return schema;\n }\n}\n\nSchemaAspect.addRuntime(SchemaMain);\n\nexport default SchemaMain;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_cli","data","require","_component","_harmony","_graphql","_envs","_logger","_semanticsEntities","_builder","_workspace","_scope","_legacy","_scope2","_semanticsEntities2","_schema","_schema2","_schemaDiff","_schema3","_schema4","_schema5","_defineProperty","e","r","t","_toPropertyKey","Object","defineProperty","value","enumerable","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","SchemaMain","constructor","parserSlot","impactRuleSlot","envs","config","builder","workspace","logger","impactAssessor","getDefaultParser","get","defaultParser","registerSchemaClass","schema","SchemaRegistry","register","registerSchemaClasses","getSchemas","registerGetSchemas","parseModule","path","content","parsers","toArray","maybeParser","find","parser","match","extension","getSchemaExtractor","component","tsserverPath","contextPath","env","getEnv","Error","name","undefined","getSchema","shouldDisposeResourcesOnceDone","alwaysRunExtractor","skipInternals","schemaTransformers","apiTransformers","includeFiles","disabled","APISchema","empty","id","buildStatus","BuildStatus","Succeed","formatter","getFormatter","setKey","schemaExtractor","result","extract","dispose","err","message","warn","toString","schemaArtifact","getArtifactsVinylByAspectAndTaskName","SchemaAspect","SCHEMA_TASK_NAME","length","debug","schemaJsonStr","contents","schemaJson","JSON","parse","getSchemaFromObject","SyntaxError","error","obj","fromObject","getSchemaFromRemote","isPattern","some","char","includes","getId","startsWith","compId","resolveComponentIdFromPackageName","compIdStr","http","Http","connect","SYMPHONY_GRAPHQL","CENTRAL_BIT_HUB_NAME","response","registerParser","calcSchemaData","getSchemaData","state","aspects","registerImpactRules","rules","getImpactAssessor","registerRules","values","flat","computeAPIDiff","baseComp","compareComp","baseSchema","compareSchema","Promise","all","assessor","isSchemaTaskDisabled","provider","cli","graphql","loggerMain","scope","createLogger","ImpactAssessor","registerDefaultRules","DEFAULT_IMPACT_RULES","schemaTask","SchemaTask","registerBuildTasks","schemaCmd","SchemaCommand","commands","SchemaDiffCommand","schemaSchema","registerService","SchemaService","registerOnComponentLoad","registerOnCompAspectReCalc","Schemas","exports","MainRuntime","EnvsAspect","CLIAspect","ComponentAspect","GraphqlAspect","LoggerAspect","BuilderAspect","WorkspaceAspect","ScopeAspect","Slot","withType","addRuntime","_default","default"],"sources":["schema.main.runtime.ts"],"sourcesContent":["import type { CLIMain } from '@teambit/cli';\nimport { MainRuntime, CLIAspect } from '@teambit/cli';\nimport type { Component, ComponentMain } from '@teambit/component';\nimport { ComponentAspect } from '@teambit/component';\nimport type { SlotRegistry } from '@teambit/harmony';\nimport { Slot } from '@teambit/harmony';\nimport type { GraphqlMain } from '@teambit/graphql';\nimport { GraphqlAspect } from '@teambit/graphql';\nimport type { EnvsMain } from '@teambit/envs';\nimport { EnvsAspect } from '@teambit/envs';\nimport type { Logger, LoggerMain } from '@teambit/logger';\nimport { LoggerAspect } from '@teambit/logger';\nimport type { PrettierConfigMutator } from '@teambit/defender.prettier.config-mutator';\nimport type { Export, SchemaNodeConstructor } from '@teambit/semantics.entities.semantic-schema';\nimport { APISchema, Schemas, SchemaRegistry } from '@teambit/semantics.entities.semantic-schema';\nimport type { BuilderMain } from '@teambit/builder';\nimport { BuilderAspect } from '@teambit/builder';\nimport type { Workspace } from '@teambit/workspace';\nimport { WorkspaceAspect } from '@teambit/workspace';\nimport type { ScopeMain } from '@teambit/scope';\nimport { ScopeAspect } from '@teambit/scope';\nimport type { Formatter } from '@teambit/formatter';\nimport type { SchemaNodeTransformer, SchemaTransformer } from '@teambit/typescript';\nimport { BuildStatus, CENTRAL_BIT_HUB_NAME, SYMPHONY_GRAPHQL } from '@teambit/legacy.constants';\nimport { Http } from '@teambit/scope.network';\nimport type { ImpactRule, APIDiffResult } from '@teambit/semantics.entities.semantic-schema-diff';\nimport { ImpactAssessor, DEFAULT_IMPACT_RULES, computeAPIDiff } from '@teambit/semantics.entities.semantic-schema-diff';\nimport type { Parser } from './parser';\nimport { SchemaAspect } from './schema.aspect';\nimport type { SchemaExtractor } from './schema-extractor';\nimport { SchemaCommand } from './schema.cmd';\nimport { SchemaDiffCommand } from './schema-diff.cmd';\nimport { schemaSchema } from './schema.graphql';\nimport { SchemaTask, SCHEMA_TASK_NAME } from './schema.task';\nimport { SchemaService } from './schema.service';\n\nexport type ParserSlot = SlotRegistry<Parser>;\nexport type ImpactRuleSlot = SlotRegistry<ImpactRule[]>;\n\nexport type SchemaConfig = {\n /**\n * default parser\n */\n defaultParser: string;\n /**\n * disable extracting schema\n */\n disabled?: boolean;\n};\n\n/**\n * extension for extracting component schemas.\n */\nexport class SchemaMain {\n constructor(\n /**\n * parsers slot.\n */\n private parserSlot: ParserSlot,\n\n /**\n * impact rules slot — other aspects register custom rules via registerImpactRules().\n */\n private impactRuleSlot: ImpactRuleSlot,\n\n private envs: EnvsMain,\n\n private config: SchemaConfig,\n\n private builder: BuilderMain,\n\n private workspace: Workspace,\n\n private logger: Logger,\n\n private impactAssessor: ImpactAssessor\n ) {}\n\n /**\n * get the default parser.\n */\n getDefaultParser(): Parser {\n return this.parserSlot.get(this.config.defaultParser) as Parser;\n }\n\n /**\n * @deprecated use registerSchemaClasses instead\n * registerSchemaClasses is better for performance as it lazy-loads the schemas.\n */\n registerSchemaClass(schema: SchemaNodeConstructor) {\n SchemaRegistry.register(schema);\n }\n\n registerSchemaClasses(getSchemas: () => SchemaNodeConstructor[]) {\n SchemaRegistry.registerGetSchemas(getSchemas);\n }\n\n /**\n * parse a module into a component schema.\n */\n parseModule(path: string, content?: string): Export[] {\n const parsers = this.parserSlot.toArray();\n let maybeParser = parsers.find(([, parser]) => {\n const match = path.match(parser.extension);\n return match;\n });\n\n if (!maybeParser) {\n maybeParser = [this.config.defaultParser, this.getDefaultParser()];\n }\n\n const [, parser] = maybeParser;\n return parser.parseModule(path, content);\n }\n\n getSchemaExtractor(component: Component, tsserverPath?: string, contextPath?: string): SchemaExtractor {\n const env = this.envs.getEnv(component).env;\n if (typeof env.getSchemaExtractor === 'undefined') {\n throw new Error(`No SchemaExtractor defined for ${env.name}`);\n }\n\n return env.getSchemaExtractor(undefined, tsserverPath, contextPath);\n }\n\n /**\n * get a schema of a component.\n * @param component target component.\n * @param shouldDisposeResourcesOnceDone for long-running processes, such as bit-start/bit-watch, this is not\n * relevant. for calling the API only to get a schema for one component, this is needed to ensure the ts-server is\n * not kept alive. otherwise, the process will never end.\n *\n */\n async getSchema(\n component: Component,\n shouldDisposeResourcesOnceDone = false,\n alwaysRunExtractor = false,\n tsserverPath?: string,\n contextPath?: string,\n skipInternals?: boolean,\n schemaTransformers?: SchemaTransformer[],\n apiTransformers?: SchemaNodeTransformer[],\n includeFiles?: string[]\n ): Promise<APISchema> {\n if (this.config.disabled) {\n return APISchema.empty(component.id as any);\n }\n\n if (alwaysRunExtractor || (this.workspace && component.buildStatus !== BuildStatus.Succeed)) {\n try {\n const env = this.envs.getEnv(component).env;\n // types need to be fixed\n const formatter: Formatter | undefined = env.getFormatter?.(null, [\n (config: PrettierConfigMutator) => {\n config.setKey('parser', 'typescript');\n return config;\n },\n ]);\n if (typeof env.getSchemaExtractor === 'undefined') {\n throw new Error(`No SchemaExtractor defined for ${env.name}`);\n }\n const schemaExtractor: SchemaExtractor = env.getSchemaExtractor(\n undefined,\n tsserverPath,\n contextPath,\n schemaTransformers,\n apiTransformers\n );\n\n const result = await schemaExtractor.extract(component, {\n formatter,\n tsserverPath,\n contextPath,\n skipInternals,\n includeFiles,\n });\n if (shouldDisposeResourcesOnceDone) schemaExtractor.dispose();\n\n return result;\n } catch (err) {\n if (alwaysRunExtractor) throw err;\n const message = err instanceof Error ? err.message : String(err);\n this.logger.warn(\n `failed extracting schema for ${component.id.toString()}, falling back to artifacts. extractor error: ${message}`,\n err\n );\n }\n }\n\n // on scope get schema from builder api\n const schemaArtifact = await this.builder.getArtifactsVinylByAspectAndTaskName(\n component,\n SchemaAspect.id,\n SCHEMA_TASK_NAME\n );\n\n if (schemaArtifact.length === 0) {\n this.logger.debug(`no schema found for ${component.id.toString()}`);\n\n /**\n * return empty schema\n * when tag/snap without build\n * or backwards compatibility\n */\n return APISchema.empty(component.id as any);\n }\n\n const schemaJsonStr = schemaArtifact[0].contents.toString('utf-8');\n\n try {\n const schemaJson = JSON.parse(schemaJsonStr);\n return this.getSchemaFromObject(schemaJson);\n } catch (e) {\n if (e instanceof SyntaxError) {\n this.logger.error(e.message);\n throw new Error(`Invalid schema.json for ${component.id}`);\n }\n throw e;\n }\n }\n\n getSchemaFromObject(obj: Record<string, any>): APISchema {\n return APISchema.fromObject(obj);\n }\n\n async getSchemaFromRemote(id: string): Promise<APISchema> {\n const isPattern = ['*', ',', '!', '$', ':'].some((char) => id.includes(char));\n if (isPattern) {\n throw new Error(`remote schema command doesn't support pattern matching. please use a specific component id`);\n }\n const getId = async () => {\n if (!id.startsWith('@')) return id;\n if (!this.workspace) throw new Error(`Please provide a component ID. The ${id} recognized as a package name.`);\n const compId = await this.workspace.resolveComponentIdFromPackageName(id, true);\n return compId.toString();\n };\n const compIdStr = await getId();\n const http = await Http.connect(SYMPHONY_GRAPHQL, CENTRAL_BIT_HUB_NAME);\n const response = await http.getSchema(compIdStr);\n return this.getSchemaFromObject(response);\n }\n\n /**\n * register a new parser.\n */\n registerParser(parser: Parser): SchemaMain {\n this.parserSlot.register(parser);\n return this;\n }\n\n async calcSchemaData(): Promise<{ disabled?: boolean }> {\n return {\n disabled: this.config.disabled,\n };\n }\n\n getSchemaData(component: Component) {\n return component.state.aspects.get(SchemaAspect.id)?.data;\n }\n\n /**\n * Register custom impact rules for API diff assessment.\n * Custom rules take priority over default rules.\n * This allows environments to customize what constitutes a breaking change.\n */\n registerImpactRules(rules: ImpactRule[]): void {\n this.impactRuleSlot.register(rules);\n }\n\n /**\n * Get the ImpactAssessor with default + all registered custom rules from the slot.\n */\n getImpactAssessor(): ImpactAssessor {\n this.impactAssessor.registerRules(this.impactRuleSlot.values().flat());\n return this.impactAssessor;\n }\n\n /**\n * Compute the semantic API diff between two component versions.\n */\n async computeAPIDiff(baseComp: Component, compareComp: Component): Promise<APIDiffResult | null> {\n try {\n const [baseSchema, compareSchema] = await Promise.all([this.getSchema(baseComp), this.getSchema(compareComp)]);\n const assessor = this.getImpactAssessor();\n return computeAPIDiff(baseSchema, compareSchema, assessor);\n } catch (err: any) {\n this.logger.warn(`failed computing API diff: ${err.message}`);\n return null;\n }\n }\n\n isSchemaTaskDisabled(component: Component) {\n return this.getSchemaData(component)?.disabled;\n }\n\n static runtime = MainRuntime;\n static dependencies = [\n EnvsAspect,\n CLIAspect,\n ComponentAspect,\n GraphqlAspect,\n LoggerAspect,\n BuilderAspect,\n WorkspaceAspect,\n ScopeAspect,\n ];\n static slots = [Slot.withType<Parser>(), Slot.withType<ImpactRule[]>()];\n\n static defaultConfig = {\n defaultParser: 'teambit.typescript/typescript',\n disabled: false,\n };\n\n static async provider(\n [envs, cli, component, graphql, loggerMain, builder, workspace, scope]: [\n EnvsMain,\n CLIMain,\n ComponentMain,\n GraphqlMain,\n LoggerMain,\n BuilderMain,\n Workspace,\n ScopeMain,\n ],\n config: SchemaConfig,\n [parserSlot, impactRuleSlot]: [ParserSlot, ImpactRuleSlot]\n ) {\n const logger = loggerMain.createLogger(SchemaAspect.id);\n const impactAssessor = new ImpactAssessor();\n impactAssessor.registerDefaultRules(DEFAULT_IMPACT_RULES);\n const schema = new SchemaMain(parserSlot, impactRuleSlot, envs, config, builder, workspace, logger, impactAssessor);\n const schemaTask = new SchemaTask(SchemaAspect.id, schema, logger);\n builder.registerBuildTasks([schemaTask]);\n const schemaCmd = new SchemaCommand(schema, component, logger);\n schemaCmd.commands = [new SchemaDiffCommand(schema, component, logger)];\n cli.register(schemaCmd);\n graphql.register(() => schemaSchema(schema));\n envs.registerService(new SchemaService());\n if (workspace) {\n workspace.registerOnComponentLoad(async () => schema.calcSchemaData());\n }\n if (scope) {\n scope.registerOnCompAspectReCalc(async () => schema.calcSchemaData());\n }\n // register all default schema classes\n schema.registerSchemaClasses(() => Object.values(Schemas));\n\n return schema;\n }\n}\n\nSchemaAspect.addRuntime(SchemaMain);\n\nexport default SchemaMain;\n"],"mappings":";;;;;;AACA,SAAAA,KAAA;EAAA,MAAAC,IAAA,GAAAC,OAAA;EAAAF,IAAA,YAAAA,CAAA;IAAA,OAAAC,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAEA,SAAAE,WAAA;EAAA,MAAAF,IAAA,GAAAC,OAAA;EAAAC,UAAA,YAAAA,CAAA;IAAA,OAAAF,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAEA,SAAAG,SAAA;EAAA,MAAAH,IAAA,GAAAC,OAAA;EAAAE,QAAA,YAAAA,CAAA;IAAA,OAAAH,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAEA,SAAAI,SAAA;EAAA,MAAAJ,IAAA,GAAAC,OAAA;EAAAG,QAAA,YAAAA,CAAA;IAAA,OAAAJ,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAEA,SAAAK,MAAA;EAAA,MAAAL,IAAA,GAAAC,OAAA;EAAAI,KAAA,YAAAA,CAAA;IAAA,OAAAL,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAEA,SAAAM,QAAA;EAAA,MAAAN,IAAA,GAAAC,OAAA;EAAAK,OAAA,YAAAA,CAAA;IAAA,OAAAN,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAGA,SAAAO,mBAAA;EAAA,MAAAP,IAAA,GAAAC,OAAA;EAAAM,kBAAA,YAAAA,CAAA;IAAA,OAAAP,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAEA,SAAAQ,SAAA;EAAA,MAAAR,IAAA,GAAAC,OAAA;EAAAO,QAAA,YAAAA,CAAA;IAAA,OAAAR,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAEA,SAAAS,WAAA;EAAA,MAAAT,IAAA,GAAAC,OAAA;EAAAQ,UAAA,YAAAA,CAAA;IAAA,OAAAT,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAEA,SAAAU,OAAA;EAAA,MAAAV,IAAA,GAAAC,OAAA;EAAAS,MAAA,YAAAA,CAAA;IAAA,OAAAV,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAGA,SAAAW,QAAA;EAAA,MAAAX,IAAA,GAAAC,OAAA;EAAAU,OAAA,YAAAA,CAAA;IAAA,OAAAX,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAY,QAAA;EAAA,MAAAZ,IAAA,GAAAC,OAAA;EAAAW,OAAA,YAAAA,CAAA;IAAA,OAAAZ,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAEA,SAAAa,oBAAA;EAAA,MAAAb,IAAA,GAAAC,OAAA;EAAAY,mBAAA,YAAAA,CAAA;IAAA,OAAAb,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAEA,SAAAc,QAAA;EAAA,MAAAd,IAAA,GAAAC,OAAA;EAAAa,OAAA,YAAAA,CAAA;IAAA,OAAAd,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAEA,SAAAe,SAAA;EAAA,MAAAf,IAAA,GAAAC,OAAA;EAAAc,QAAA,YAAAA,CAAA;IAAA,OAAAf,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAgB,YAAA;EAAA,MAAAhB,IAAA,GAAAC,OAAA;EAAAe,WAAA,YAAAA,CAAA;IAAA,OAAAhB,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAiB,SAAA;EAAA,MAAAjB,IAAA,GAAAC,OAAA;EAAAgB,QAAA,YAAAA,CAAA;IAAA,OAAAjB,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAkB,SAAA;EAAA,MAAAlB,IAAA,GAAAC,OAAA;EAAAiB,QAAA,YAAAA,CAAA;IAAA,OAAAlB,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAmB,SAAA;EAAA,MAAAnB,IAAA,GAAAC,OAAA;EAAAkB,QAAA,YAAAA,CAAA;IAAA,OAAAnB,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAAiD,SAAAoB,gBAAAC,CAAA,EAAAC,CAAA,EAAAC,CAAA,YAAAD,CAAA,GAAAE,cAAA,CAAAF,CAAA,MAAAD,CAAA,GAAAI,MAAA,CAAAC,cAAA,CAAAL,CAAA,EAAAC,CAAA,IAAAK,KAAA,EAAAJ,CAAA,EAAAK,UAAA,MAAAC,YAAA,MAAAC,QAAA,UAAAT,CAAA,CAAAC,CAAA,IAAAC,CAAA,EAAAF,CAAA;AAAA,SAAAG,eAAAD,CAAA,QAAAQ,CAAA,GAAAC,YAAA,CAAAT,CAAA,uCAAAQ,CAAA,GAAAA,CAAA,GAAAA,CAAA;AAAA,SAAAC,aAAAT,CAAA,EAAAD,CAAA,2BAAAC,CAAA,KAAAA,CAAA,SAAAA,CAAA,MAAAF,CAAA,GAAAE,CAAA,CAAAU,MAAA,CAAAC,WAAA,kBAAAb,CAAA,QAAAU,CAAA,GAAAV,CAAA,CAAAc,IAAA,CAAAZ,CAAA,EAAAD,CAAA,uCAAAS,CAAA,SAAAA,CAAA,YAAAK,SAAA,yEAAAd,CAAA,GAAAe,MAAA,GAAAC,MAAA,EAAAf,CAAA;AAgBjD;AACA;AACA;AACO,MAAMgB,UAAU,CAAC;EACtBC,WAAWA;EACT;AACJ;AACA;EACYC,UAAsB;EAE9B;AACJ;AACA;EACYC,cAA8B,EAE9BC,IAAc,EAEdC,MAAoB,EAEpBC,OAAoB,EAEpBC,SAAoB,EAEpBC,MAAc,EAEdC,cAA8B,EACtC;IAAA,KAlBQP,UAAsB,GAAtBA,UAAsB;IAAA,KAKtBC,cAA8B,GAA9BA,cAA8B;IAAA,KAE9BC,IAAc,GAAdA,IAAc;IAAA,KAEdC,MAAoB,GAApBA,MAAoB;IAAA,KAEpBC,OAAoB,GAApBA,OAAoB;IAAA,KAEpBC,SAAoB,GAApBA,SAAoB;IAAA,KAEpBC,MAAc,GAAdA,MAAc;IAAA,KAEdC,cAA8B,GAA9BA,cAA8B;EACrC;;EAEH;AACF;AACA;EACEC,gBAAgBA,CAAA,EAAW;IACzB,OAAO,IAAI,CAACR,UAAU,CAACS,GAAG,CAAC,IAAI,CAACN,MAAM,CAACO,aAAa,CAAC;EACvD;;EAEA;AACF;AACA;AACA;EACEC,mBAAmBA,CAACC,MAA6B,EAAE;IACjDC,mCAAc,CAACC,QAAQ,CAACF,MAAM,CAAC;EACjC;EAEAG,qBAAqBA,CAACC,UAAyC,EAAE;IAC/DH,mCAAc,CAACI,kBAAkB,CAACD,UAAU,CAAC;EAC/C;;EAEA;AACF;AACA;EACEE,WAAWA,CAACC,IAAY,EAAEC,OAAgB,EAAY;IACpD,MAAMC,OAAO,GAAG,IAAI,CAACrB,UAAU,CAACsB,OAAO,CAAC,CAAC;IACzC,IAAIC,WAAW,GAAGF,OAAO,CAACG,IAAI,CAAC,CAAC,GAAGC,MAAM,CAAC,KAAK;MAC7C,MAAMC,KAAK,GAAGP,IAAI,CAACO,KAAK,CAACD,MAAM,CAACE,SAAS,CAAC;MAC1C,OAAOD,KAAK;IACd,CAAC,CAAC;IAEF,IAAI,CAACH,WAAW,EAAE;MAChBA,WAAW,GAAG,CAAC,IAAI,CAACpB,MAAM,CAACO,aAAa,EAAE,IAAI,CAACF,gBAAgB,CAAC,CAAC,CAAC;IACpE;IAEA,MAAM,GAAGiB,MAAM,CAAC,GAAGF,WAAW;IAC9B,OAAOE,MAAM,CAACP,WAAW,CAACC,IAAI,EAAEC,OAAO,CAAC;EAC1C;EAEAQ,kBAAkBA,CAACC,SAAoB,EAAEC,YAAqB,EAAEC,WAAoB,EAAmB;IACrG,MAAMC,GAAG,GAAG,IAAI,CAAC9B,IAAI,CAAC+B,MAAM,CAACJ,SAAS,CAAC,CAACG,GAAG;IAC3C,IAAI,OAAOA,GAAG,CAACJ,kBAAkB,KAAK,WAAW,EAAE;MACjD,MAAM,IAAIM,KAAK,CAAC,kCAAkCF,GAAG,CAACG,IAAI,EAAE,CAAC;IAC/D;IAEA,OAAOH,GAAG,CAACJ,kBAAkB,CAACQ,SAAS,EAAEN,YAAY,EAAEC,WAAW,CAAC;EACrE;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACE,MAAMM,SAASA,CACbR,SAAoB,EACpBS,8BAA8B,GAAG,KAAK,EACtCC,kBAAkB,GAAG,KAAK,EAC1BT,YAAqB,EACrBC,WAAoB,EACpBS,aAAuB,EACvBC,kBAAwC,EACxCC,eAAyC,EACzCC,YAAuB,EACH;IACpB,IAAI,IAAI,CAACxC,MAAM,CAACyC,QAAQ,EAAE;MACxB,OAAOC,8BAAS,CAACC,KAAK,CAACjB,SAAS,CAACkB,EAAS,CAAC;IAC7C;IAEA,IAAIR,kBAAkB,IAAK,IAAI,CAAClC,SAAS,IAAIwB,SAAS,CAACmB,WAAW,KAAKC,qBAAW,CAACC,OAAQ,EAAE;MAC3F,IAAI;QACF,MAAMlB,GAAG,GAAG,IAAI,CAAC9B,IAAI,CAAC+B,MAAM,CAACJ,SAAS,CAAC,CAACG,GAAG;QAC3C;QACA,MAAMmB,SAAgC,GAAGnB,GAAG,CAACoB,YAAY,GAAG,IAAI,EAAE,CAC/DjD,MAA6B,IAAK;UACjCA,MAAM,CAACkD,MAAM,CAAC,QAAQ,EAAE,YAAY,CAAC;UACrC,OAAOlD,MAAM;QACf,CAAC,CACF,CAAC;QACF,IAAI,OAAO6B,GAAG,CAACJ,kBAAkB,KAAK,WAAW,EAAE;UACjD,MAAM,IAAIM,KAAK,CAAC,kCAAkCF,GAAG,CAACG,IAAI,EAAE,CAAC;QAC/D;QACA,MAAMmB,eAAgC,GAAGtB,GAAG,CAACJ,kBAAkB,CAC7DQ,SAAS,EACTN,YAAY,EACZC,WAAW,EACXU,kBAAkB,EAClBC,eACF,CAAC;QAED,MAAMa,MAAM,GAAG,MAAMD,eAAe,CAACE,OAAO,CAAC3B,SAAS,EAAE;UACtDsB,SAAS;UACTrB,YAAY;UACZC,WAAW;UACXS,aAAa;UACbG;QACF,CAAC,CAAC;QACF,IAAIL,8BAA8B,EAAEgB,eAAe,CAACG,OAAO,CAAC,CAAC;QAE7D,OAAOF,MAAM;MACf,CAAC,CAAC,OAAOG,GAAG,EAAE;QACZ,IAAInB,kBAAkB,EAAE,MAAMmB,GAAG;QACjC,MAAMC,OAAO,GAAGD,GAAG,YAAYxB,KAAK,GAAGwB,GAAG,CAACC,OAAO,GAAG/D,MAAM,CAAC8D,GAAG,CAAC;QAChE,IAAI,CAACpD,MAAM,CAACsD,IAAI,CACd,gCAAgC/B,SAAS,CAACkB,EAAE,CAACc,QAAQ,CAAC,CAAC,iDAAiDF,OAAO,EAAE,EACjHD,GACF,CAAC;MACH;IACF;;IAEA;IACA,MAAMI,cAAc,GAAG,MAAM,IAAI,CAAC1D,OAAO,CAAC2D,oCAAoC,CAC5ElC,SAAS,EACTmC,sBAAY,CAACjB,EAAE,EACfkB,2BACF,CAAC;IAED,IAAIH,cAAc,CAACI,MAAM,KAAK,CAAC,EAAE;MAC/B,IAAI,CAAC5D,MAAM,CAAC6D,KAAK,CAAC,uBAAuBtC,SAAS,CAACkB,EAAE,CAACc,QAAQ,CAAC,CAAC,EAAE,CAAC;;MAEnE;AACN;AACA;AACA;AACA;MACM,OAAOhB,8BAAS,CAACC,KAAK,CAACjB,SAAS,CAACkB,EAAS,CAAC;IAC7C;IAEA,MAAMqB,aAAa,GAAGN,cAAc,CAAC,CAAC,CAAC,CAACO,QAAQ,CAACR,QAAQ,CAAC,OAAO,CAAC;IAElE,IAAI;MACF,MAAMS,UAAU,GAAGC,IAAI,CAACC,KAAK,CAACJ,aAAa,CAAC;MAC5C,OAAO,IAAI,CAACK,mBAAmB,CAACH,UAAU,CAAC;IAC7C,CAAC,CAAC,OAAO1F,CAAC,EAAE;MACV,IAAIA,CAAC,YAAY8F,WAAW,EAAE;QAC5B,IAAI,CAACpE,MAAM,CAACqE,KAAK,CAAC/F,CAAC,CAAC+E,OAAO,CAAC;QAC5B,MAAM,IAAIzB,KAAK,CAAC,2BAA2BL,SAAS,CAACkB,EAAE,EAAE,CAAC;MAC5D;MACA,MAAMnE,CAAC;IACT;EACF;EAEA6F,mBAAmBA,CAACG,GAAwB,EAAa;IACvD,OAAO/B,8BAAS,CAACgC,UAAU,CAACD,GAAG,CAAC;EAClC;EAEA,MAAME,mBAAmBA,CAAC/B,EAAU,EAAsB;IACxD,MAAMgC,SAAS,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAACC,IAAI,CAAEC,IAAI,IAAKlC,EAAE,CAACmC,QAAQ,CAACD,IAAI,CAAC,CAAC;IAC7E,IAAIF,SAAS,EAAE;MACb,MAAM,IAAI7C,KAAK,CAAC,4FAA4F,CAAC;IAC/G;IACA,MAAMiD,KAAK,GAAG,MAAAA,CAAA,KAAY;MACxB,IAAI,CAACpC,EAAE,CAACqC,UAAU,CAAC,GAAG,CAAC,EAAE,OAAOrC,EAAE;MAClC,IAAI,CAAC,IAAI,CAAC1C,SAAS,EAAE,MAAM,IAAI6B,KAAK,CAAC,sCAAsCa,EAAE,gCAAgC,CAAC;MAC9G,MAAMsC,MAAM,GAAG,MAAM,IAAI,CAAChF,SAAS,CAACiF,iCAAiC,CAACvC,EAAE,EAAE,IAAI,CAAC;MAC/E,OAAOsC,MAAM,CAACxB,QAAQ,CAAC,CAAC;IAC1B,CAAC;IACD,MAAM0B,SAAS,GAAG,MAAMJ,KAAK,CAAC,CAAC;IAC/B,MAAMK,IAAI,GAAG,MAAMC,cAAI,CAACC,OAAO,CAACC,0BAAgB,EAAEC,8BAAoB,CAAC;IACvE,MAAMC,QAAQ,GAAG,MAAML,IAAI,CAACnD,SAAS,CAACkD,SAAS,CAAC;IAChD,OAAO,IAAI,CAACd,mBAAmB,CAACoB,QAAQ,CAAC;EAC3C;;EAEA;AACF;AACA;EACEC,cAAcA,CAACrE,MAAc,EAAc;IACzC,IAAI,CAACzB,UAAU,CAACc,QAAQ,CAACW,MAAM,CAAC;IAChC,OAAO,IAAI;EACb;EAEA,MAAMsE,cAAcA,CAAA,EAAoC;IACtD,OAAO;MACLnD,QAAQ,EAAE,IAAI,CAACzC,MAAM,CAACyC;IACxB,CAAC;EACH;EAEAoD,aAAaA,CAACnE,SAAoB,EAAE;IAClC,OAAOA,SAAS,CAACoE,KAAK,CAACC,OAAO,CAACzF,GAAG,CAACuD,sBAAY,CAACjB,EAAE,CAAC,EAAExF,IAAI;EAC3D;;EAEA;AACF;AACA;AACA;AACA;EACE4I,mBAAmBA,CAACC,KAAmB,EAAQ;IAC7C,IAAI,CAACnG,cAAc,CAACa,QAAQ,CAACsF,KAAK,CAAC;EACrC;;EAEA;AACF;AACA;EACEC,iBAAiBA,CAAA,EAAmB;IAClC,IAAI,CAAC9F,cAAc,CAAC+F,aAAa,CAAC,IAAI,CAACrG,cAAc,CAACsG,MAAM,CAAC,CAAC,CAACC,IAAI,CAAC,CAAC,CAAC;IACtE,OAAO,IAAI,CAACjG,cAAc;EAC5B;;EAEA;AACF;AACA;EACE,MAAMkG,cAAcA,CAACC,QAAmB,EAAEC,WAAsB,EAAiC;IAC/F,IAAI;MACF,MAAM,CAACC,UAAU,EAAEC,aAAa,CAAC,GAAG,MAAMC,OAAO,CAACC,GAAG,CAAC,CAAC,IAAI,CAAC1E,SAAS,CAACqE,QAAQ,CAAC,EAAE,IAAI,CAACrE,SAAS,CAACsE,WAAW,CAAC,CAAC,CAAC;MAC9G,MAAMK,QAAQ,GAAG,IAAI,CAACX,iBAAiB,CAAC,CAAC;MACzC,OAAO,IAAAI,oCAAc,EAACG,UAAU,EAAEC,aAAa,EAAEG,QAAQ,CAAC;IAC5D,CAAC,CAAC,OAAOtD,GAAQ,EAAE;MACjB,IAAI,CAACpD,MAAM,CAACsD,IAAI,CAAC,8BAA8BF,GAAG,CAACC,OAAO,EAAE,CAAC;MAC7D,OAAO,IAAI;IACb;EACF;EAEAsD,oBAAoBA,CAACpF,SAAoB,EAAE;IACzC,OAAO,IAAI,CAACmE,aAAa,CAACnE,SAAS,CAAC,EAAEe,QAAQ;EAChD;EAoBA,aAAasE,QAAQA,CACnB,CAAChH,IAAI,EAAEiH,GAAG,EAAEtF,SAAS,EAAEuF,OAAO,EAAEC,UAAU,EAAEjH,OAAO,EAAEC,SAAS,EAAEiH,KAAK,CASpE,EACDnH,MAAoB,EACpB,CAACH,UAAU,EAAEC,cAAc,CAA+B,EAC1D;IACA,MAAMK,MAAM,GAAG+G,UAAU,CAACE,YAAY,CAACvD,sBAAY,CAACjB,EAAE,CAAC;IACvD,MAAMxC,cAAc,GAAG,KAAIiH,oCAAc,EAAC,CAAC;IAC3CjH,cAAc,CAACkH,oBAAoB,CAACC,0CAAoB,CAAC;IACzD,MAAM9G,MAAM,GAAG,IAAId,UAAU,CAACE,UAAU,EAAEC,cAAc,EAAEC,IAAI,EAAEC,MAAM,EAAEC,OAAO,EAAEC,SAAS,EAAEC,MAAM,EAAEC,cAAc,CAAC;IACnH,MAAMoH,UAAU,GAAG,KAAIC,qBAAU,EAAC5D,sBAAY,CAACjB,EAAE,EAAEnC,MAAM,EAAEN,MAAM,CAAC;IAClEF,OAAO,CAACyH,kBAAkB,CAAC,CAACF,UAAU,CAAC,CAAC;IACxC,MAAMG,SAAS,GAAG,KAAIC,wBAAa,EAACnH,MAAM,EAAEiB,SAAS,EAAEvB,MAAM,CAAC;IAC9DwH,SAAS,CAACE,QAAQ,GAAG,CAAC,KAAIC,+BAAiB,EAACrH,MAAM,EAAEiB,SAAS,EAAEvB,MAAM,CAAC,CAAC;IACvE6G,GAAG,CAACrG,QAAQ,CAACgH,SAAS,CAAC;IACvBV,OAAO,CAACtG,QAAQ,CAAC,MAAM,IAAAoH,uBAAY,EAACtH,MAAM,CAAC,CAAC;IAC5CV,IAAI,CAACiI,eAAe,CAAC,KAAIC,wBAAa,EAAC,CAAC,CAAC;IACzC,IAAI/H,SAAS,EAAE;MACbA,SAAS,CAACgI,uBAAuB,CAAC,YAAYzH,MAAM,CAACmF,cAAc,CAAC,CAAC,CAAC;IACxE;IACA,IAAIuB,KAAK,EAAE;MACTA,KAAK,CAACgB,0BAA0B,CAAC,YAAY1H,MAAM,CAACmF,cAAc,CAAC,CAAC,CAAC;IACvE;IACA;IACAnF,MAAM,CAACG,qBAAqB,CAAC,MAAM/B,MAAM,CAACuH,MAAM,CAACgC,4BAAO,CAAC,CAAC;IAE1D,OAAO3H,MAAM;EACf;AACF;AAAC4H,OAAA,CAAA1I,UAAA,GAAAA,UAAA;AAAAnB,eAAA,CAvSYmB,UAAU,aAiPJ2I,kBAAW;AAAA9J,eAAA,CAjPjBmB,UAAU,kBAkPC,CACpB4I,kBAAU,EACVC,gBAAS,EACTC,4BAAe,EACfC,wBAAa,EACbC,sBAAY,EACZC,wBAAa,EACbC,4BAAe,EACfC,oBAAW,CACZ;AAAAtK,eAAA,CA3PUmB,UAAU,WA4PN,CAACoJ,eAAI,CAACC,QAAQ,CAAS,CAAC,EAAED,eAAI,CAACC,QAAQ,CAAe,CAAC,CAAC;AAAAxK,eAAA,CA5P5DmB,UAAU,mBA8PE;EACrBY,aAAa,EAAE,+BAA+B;EAC9CkC,QAAQ,EAAE;AACZ,CAAC;AAwCHoB,sBAAY,CAACoF,UAAU,CAACtJ,UAAU,CAAC;AAAC,IAAAuJ,QAAA,GAAAb,OAAA,CAAAc,OAAA,GAErBxJ,UAAU","ignoreList":[]}
@@ -28,6 +28,13 @@ function _semanticsEntities() {
28
28
  };
29
29
  return data;
30
30
  }
31
+ function _semanticsEntities2() {
32
+ const data = require("@teambit/semantics.entities.semantic-schema-diff");
33
+ _semanticsEntities2 = function () {
34
+ return data;
35
+ };
36
+ return data;
37
+ }
31
38
  function _chaiSubset() {
32
39
  const data = _interopRequireDefault(require("chai-subset"));
33
40
  _chaiSubset = function () {
@@ -78,6 +85,11 @@ function _schema() {
78
85
  return data;
79
86
  }
80
87
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
88
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
89
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
90
+ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
91
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
92
+ function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
81
93
  (0, _chai().use)(_chaiSubset().default);
82
94
  describe('SchemaAspect', function () {
83
95
  this.timeout(0);
@@ -149,7 +161,103 @@ describe('SchemaAspect', function () {
149
161
  });
150
162
  });
151
163
  });
164
+ describe('schema diff', () => {
165
+ let diffResult;
166
+ before(async () => {
167
+ // Use v1 schema from the golden file (already validated by getSchema test)
168
+ const v1JsonPath = _path().default.join(getMockDir(), 'button-schemas.json');
169
+ const v1Json = _fsExtra().default.readJsonSync(v1JsonPath);
170
+ const baseSchema = schema.getSchemaFromObject(v1Json);
171
+
172
+ // Extract v2 schema from the button-v2 fixture
173
+ const {
174
+ workspacePath
175
+ } = workspaceData;
176
+ const compDirV2 = _path().default.join(workspacePath, 'button-v2');
177
+ const srcV2 = _path().default.join(getMockDir(), 'button-v2');
178
+ await _fsExtra().default.copy(srcV2, compDirV2);
179
+ const harmony = await (0, _harmonyTesting().loadManyAspects)([_workspace().WorkspaceAspect, _schema().SchemaAspect, _tracker().TrackerAspect], workspacePath);
180
+ const ws = harmony.get(_workspace().WorkspaceAspect.id);
181
+ const tracker = harmony.get(_tracker().TrackerAspect.id);
182
+ await tracker.track({
183
+ rootDir: compDirV2,
184
+ defaultScope: 'org.scope'
185
+ });
186
+ await ws.bitMap.write();
187
+ const schemaMain = harmony.get(_schema().SchemaAspect.id);
188
+ const compIdV2 = await ws.resolveComponentId('button-v2');
189
+ const compV2 = await ws.get(compIdV2);
190
+ const compareSchema = await schemaMain.getSchema(compV2, true);
191
+
192
+ // Compute diff using impact assessor from the aspect
193
+ const assessor = schemaMain.getImpactAssessor();
194
+ diffResult = (0, _semanticsEntities2().computeAPIDiff)(baseSchema, compareSchema, assessor);
195
+ });
196
+ it('should produce a diff result matching the golden file', () => {
197
+ const result = serializeDiffResult(diffResult);
198
+ const expectedJsonPath = _path().default.join(getMockDir(), 'button-diff.json');
199
+ // uncomment the next line temporarily to sync the expected json with new diff changes
200
+ // fs.outputFileSync(expectedJsonPath, JSON.stringify(result, undefined, 2));
201
+ const expectedJson = _fsExtra().default.readJsonSync(expectedJsonPath);
202
+ (0, _chai().expect)(result).to.containSubset(expectedJson);
203
+ });
204
+ it('should detect changes', () => {
205
+ (0, _chai().expect)(diffResult.hasChanges).to.be.true;
206
+ });
207
+ it('should detect added exports', () => {
208
+ (0, _chai().expect)(diffResult.added).to.be.greaterThan(0);
209
+ const addedNames = diffResult.changes.filter(c => c.status === 'ADDED').map(c => c.exportName);
210
+ (0, _chai().expect)(addedNames).to.include('newUtility');
211
+ });
212
+ it('should detect modified exports', () => {
213
+ (0, _chai().expect)(diffResult.modified).to.be.greaterThan(0);
214
+ });
215
+ it('should correctly assess impact of non-breaking additions', () => {
216
+ const added = diffResult.changes.find(c => c.exportName === 'newUtility');
217
+ (0, _chai().expect)(added?.impact).to.equal('NON_BREAKING');
218
+ });
219
+ });
152
220
  });
221
+
222
+ /**
223
+ * Serialize a diff result for golden file comparison.
224
+ * Strips raw schema nodes (baseNode/compareNode) since they're large and tested separately.
225
+ */
226
+ function serializeDiffResult(diff) {
227
+ const serializeChange = change => _objectSpread(_objectSpread(_objectSpread({
228
+ status: change.status,
229
+ visibility: change.visibility,
230
+ impact: change.impact,
231
+ exportName: change.exportName,
232
+ schemaType: change.schemaType
233
+ }, change.baseSignature ? {
234
+ baseSignature: change.baseSignature
235
+ } : {}), change.compareSignature ? {
236
+ compareSignature: change.compareSignature
237
+ } : {}), change.changes && change.changes.length > 0 ? {
238
+ details: change.changes.map(d => _objectSpread(_objectSpread({
239
+ changeKind: d.changeKind,
240
+ description: d.description,
241
+ impact: d.impact
242
+ }, d.from !== undefined ? {
243
+ from: d.from
244
+ } : {}), d.to !== undefined ? {
245
+ to: d.to
246
+ } : {}))
247
+ } : {});
248
+ return {
249
+ hasChanges: diff.hasChanges,
250
+ impact: diff.impact,
251
+ added: diff.added,
252
+ removed: diff.removed,
253
+ modified: diff.modified,
254
+ breaking: diff.breaking,
255
+ nonBreaking: diff.nonBreaking,
256
+ patch: diff.patch,
257
+ publicChanges: diff.publicChanges.map(serializeChange),
258
+ internalChanges: diff.internalChanges.map(serializeChange)
259
+ };
260
+ }
153
261
  function getCurrentDir() {
154
262
  const currentDir = __dirname;
155
263
  if (currentDir.endsWith(`${_path().default.sep}dist`)) return currentDir.slice(0, -5);