@teambit/schema 1.0.1079 → 1.0.1081
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.
- package/dist/api-diff-compute.spec.d.ts +1 -0
- package/dist/api-diff-compute.spec.js +547 -0
- package/dist/api-diff-compute.spec.js.map +1 -0
- package/dist/mock/button-diff.json +4 -20
- package/dist/mock/button-schemas.json +6 -146
- package/dist/mock/default-export/index.d.ts +5 -0
- package/dist/mock/default-export/index.js +21 -0
- package/dist/mock/default-export/index.js.map +1 -0
- package/dist/mock/default-export/tsconfig.json +19 -0
- package/dist/{preview-1785260578779.js → preview-1785278532531.js} +4 -4
- package/dist/schema-diff.cmd.d.ts +2 -0
- package/dist/schema-diff.cmd.js +51 -6
- package/dist/schema-diff.cmd.js.map +1 -1
- package/dist/schema.graphql.js +11 -0
- package/dist/schema.graphql.js.map +1 -1
- package/dist/schema.main.runtime.d.ts +33 -1
- package/dist/schema.main.runtime.js +157 -9
- package/dist/schema.main.runtime.js.map +1 -1
- package/dist/schema.spec.js +37 -0
- package/dist/schema.spec.js.map +1 -1
- package/mock/button-diff.json +4 -20
- package/mock/button-schemas.json +6 -146
- package/mock/default-export/index.ts +9 -0
- package/mock/default-export/tsconfig.json +19 -0
- package/package.json +21 -21
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_chalk","data","_interopRequireDefault","require","_semanticsEntities","e","__esModule","default","ownKeys","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","SchemaDiffCommand","constructor","schema","component","logger","report","args","pattern","baseVersion","compareVersion","diff","componentId","computeDiff","formatDiffResult","json","toAgentJson","host","getHost","ids","idsByPattern","Error","baseId","changeVersion","compareId","baseComponent","compareComponent","getMany","toString","debug","baseSchema","compareSchema","Promise","all","getSchema","assessor","getImpactAssessor","computeAPIDiff","toStringWithoutVersion","serializeChange","change","status","impact","exportName","schemaType","baseSignature","compareSignature","changes","details","map","d","changeKind","description","context","from","undefined","to","hasChanges","summary","added","removed","modified","breaking","nonBreaking","patch","publicAPI","publicChanges","internal","internalChanges","chalk","green","lines","bold","cyan","impactBadge","parts","red","yellow","impactParts","dim","join","formatSection","title","underline","sortChanges","formatChange","order","REMOVED","MODIFIED","ADDED","impactOrder","BREAKING","NON_BREAKING","PATCH","sort","a","b","statusDiff","indent","impactTag","kind","APIDiffStatus","truncateSig","strikethrough","detail","detailImpact","impactDot","desc","enhanceDescription","IMPACT_STYLES","badge","tag","dot","enhancer","DESCRIPTION_ENHANCERS","find","match","enhance","sig","maxLen","oneLine","replace","slice","exports","bgRed","white","bgGreen","bgBlue","ck","includes"],"sources":["schema-diff.cmd.ts"],"sourcesContent":["import chalk from 'chalk';\nimport type { Command, CommandOptions, CLIArgs } from '@teambit/cli';\nimport type { ComponentMain } from '@teambit/component';\nimport type { Logger } from '@teambit/logger';\nimport { computeAPIDiff, APIDiffStatus } from '@teambit/semantics.entities.semantic-schema-diff';\nimport type { APIDiffResult, APIDiffChange, ImpactLevel } from '@teambit/semantics.entities.semantic-schema-diff';\nimport type { SchemaMain } from './schema.main.runtime';\n\nexport class SchemaDiffCommand implements Command {\n name = 'diff <component> <base-version> <compare-version>';\n description = 'show API changes between two versions of a component';\n extendedDescription = `compares the public API schema between two versions of a component.\nshows added, removed, and modified exports with semantic impact analysis.\n\nexamples:\n bit schema diff my-component 0.0.1 0.0.2`;\n group = 'info-analysis';\n options = [['j', 'json', 'return the API diff in json format']] as CommandOptions;\n\n constructor(\n private schema: SchemaMain,\n private component: ComponentMain,\n private logger: Logger\n ) {}\n\n async report(args: CLIArgs): Promise<string> {\n const [pattern, baseVersion, compareVersion] = args as string[];\n const { diff, componentId } = await this.computeDiff(pattern, baseVersion, compareVersion);\n return this.formatDiffResult(diff, `${componentId} (${baseVersion} → ${compareVersion})`);\n }\n\n async json(args: CLIArgs): Promise<Record<string, any>> {\n const [pattern, baseVersion, compareVersion] = args as string[];\n const { diff, componentId } = await this.computeDiff(pattern, baseVersion, compareVersion);\n return this.toAgentJson(diff, componentId, baseVersion, compareVersion);\n }\n\n private async computeDiff(\n pattern: string,\n baseVersion: string,\n compareVersion: string\n ): Promise<{ diff: APIDiffResult; componentId: string }> {\n const host = this.component.getHost();\n const ids = await host.idsByPattern(pattern, true);\n\n if (ids.length === 0) {\n throw new Error(`no components found matching \"${pattern}\"`);\n }\n if (ids.length > 1) {\n throw new Error(`pattern \"${pattern}\" matches ${ids.length} components. please specify a single component.`);\n }\n\n const componentId = ids[0];\n const baseId = componentId.changeVersion(baseVersion);\n const compareId = componentId.changeVersion(compareVersion);\n\n const [baseComponent, compareComponent] = await host.getMany([baseId, compareId]);\n\n if (!baseComponent) throw new Error(`could not load ${baseId.toString()}`);\n if (!compareComponent) throw new Error(`could not load ${compareId.toString()}`);\n\n this.logger.debug(`computing API diff: ${baseId.toString()} -> ${compareId.toString()}`);\n\n const [baseSchema, compareSchema] = await Promise.all([\n this.schema.getSchema(baseComponent),\n this.schema.getSchema(compareComponent),\n ]);\n\n const assessor = this.schema.getImpactAssessor();\n const diff = computeAPIDiff(baseSchema, compareSchema, assessor);\n return { diff, componentId: componentId.toStringWithoutVersion() };\n }\n\n private toAgentJson(\n diff: APIDiffResult,\n componentId: string,\n baseVersion: string,\n compareVersion: string\n ): Record<string, any> {\n const serializeChange = (change: APIDiffChange) => ({\n status: change.status,\n impact: change.impact,\n exportName: change.exportName,\n schemaType: change.schemaType,\n ...(change.baseSignature ? { baseSignature: change.baseSignature } : {}),\n ...(change.compareSignature ? { compareSignature: change.compareSignature } : {}),\n ...(change.changes && change.changes.length > 0\n ? {\n details: change.changes.map((d) => ({\n changeKind: d.changeKind,\n description: d.description,\n impact: d.impact,\n context: d.context,\n ...(d.from !== undefined ? { from: d.from } : {}),\n ...(d.to !== undefined ? { to: d.to } : {}),\n })),\n }\n : {}),\n });\n\n return {\n componentId,\n baseVersion,\n compareVersion,\n hasChanges: diff.hasChanges,\n impact: diff.impact,\n summary: {\n added: diff.added,\n removed: diff.removed,\n modified: diff.modified,\n breaking: diff.breaking,\n nonBreaking: diff.nonBreaking,\n patch: diff.patch,\n },\n publicAPI: diff.publicChanges.map(serializeChange),\n internal: diff.internalChanges.map(serializeChange),\n };\n }\n\n private formatDiffResult(diff: APIDiffResult, pattern: string): string {\n if (!diff.hasChanges) {\n return chalk.green(`\\n No API changes detected for ${pattern}\\n`);\n }\n\n const lines: string[] = [''];\n\n lines.push(` ${chalk.bold('API Diff')} for ${chalk.cyan(pattern)} ${this.impactBadge(diff.impact)}`);\n lines.push('');\n\n const parts: string[] = [];\n if (diff.added > 0) parts.push(chalk.green(`${diff.added} added`));\n if (diff.removed > 0) parts.push(chalk.red(`${diff.removed} removed`));\n if (diff.modified > 0) parts.push(chalk.yellow(`${diff.modified} modified`));\n const impactParts: string[] = [];\n if (diff.breaking > 0) impactParts.push(chalk.red.bold(`${diff.breaking} breaking`));\n if (diff.nonBreaking > 0) impactParts.push(chalk.green(`${diff.nonBreaking} non-breaking`));\n if (diff.patch > 0) impactParts.push(chalk.dim(`${diff.patch} patch`));\n lines.push(` ${parts.join(chalk.dim(' · '))} ${chalk.dim('|')} ${impactParts.join(chalk.dim(' · '))}`);\n lines.push('');\n\n this.formatSection(lines, 'Public API', diff.publicChanges);\n this.formatSection(lines, 'Internal (non-exported)', diff.internalChanges);\n\n return lines.join('\\n');\n }\n\n private formatSection(lines: string[], title: string, changes: APIDiffChange[]): void {\n if (changes.length === 0) return;\n lines.push(` ${chalk.bold.underline(title)}`);\n lines.push('');\n for (const change of this.sortChanges(changes)) {\n lines.push(...this.formatChange(change));\n }\n }\n\n private sortChanges(changes: APIDiffChange[]): APIDiffChange[] {\n const order = { REMOVED: 0, MODIFIED: 1, ADDED: 2 };\n const impactOrder = { BREAKING: 0, NON_BREAKING: 1, PATCH: 2 };\n return [...changes].sort((a, b) => {\n const statusDiff = (order[a.status] ?? 3) - (order[b.status] ?? 3);\n if (statusDiff !== 0) return statusDiff;\n return (impactOrder[a.impact] ?? 3) - (impactOrder[b.impact] ?? 3);\n });\n }\n\n private formatChange(change: APIDiffChange): string[] {\n const lines: string[] = [];\n const indent = ' ';\n const impact = this.impactTag(change.impact);\n const kind = chalk.dim(`(${change.schemaType})`);\n\n switch (change.status) {\n case APIDiffStatus.ADDED:\n lines.push(` ${chalk.green.bold('+')} ${chalk.green(change.exportName)} ${kind} ${impact}`);\n if (change.compareSignature) {\n lines.push(`${indent}${chalk.dim(this.truncateSig(change.compareSignature))}`);\n }\n break;\n\n case APIDiffStatus.REMOVED:\n lines.push(` ${chalk.red.bold('−')} ${chalk.red(change.exportName)} ${kind} ${impact}`);\n if (change.baseSignature) {\n lines.push(`${indent}${chalk.dim.strikethrough(this.truncateSig(change.baseSignature))}`);\n }\n break;\n\n case APIDiffStatus.MODIFIED:\n lines.push(` ${chalk.yellow.bold('~')} ${chalk.yellow(change.exportName)} ${kind} ${impact}`);\n if (change.changes && change.changes.length > 0) {\n for (const detail of change.changes) {\n const detailImpact = this.impactDot(detail.impact);\n const desc = this.enhanceDescription(detail.description, detail.impact, detail.changeKind);\n lines.push(`${indent}${detailImpact} ${desc}`);\n if (detail.from != null && detail.to != null) {\n lines.push(`${indent} ${chalk.red(`- ${detail.from}`)}`);\n lines.push(`${indent} ${chalk.green(`+ ${detail.to}`)}`);\n }\n }\n }\n break;\n }\n\n lines.push('');\n return lines;\n }\n\n private static IMPACT_STYLES = {\n BREAKING: { badge: chalk.bgRed.white.bold(' BREAKING '), tag: chalk.red('breaking'), dot: chalk.red('●') },\n NON_BREAKING: {\n badge: chalk.bgGreen.white.bold(' NON-BREAKING '),\n tag: chalk.green('non-breaking'),\n dot: chalk.green('●'),\n },\n PATCH: { badge: chalk.bgBlue.white(' PATCH '), tag: chalk.dim('patch'), dot: chalk.dim('●') },\n };\n\n private impactBadge(impact: ImpactLevel): string {\n return SchemaDiffCommand.IMPACT_STYLES[impact].badge;\n }\n private impactTag(impact: ImpactLevel): string {\n return SchemaDiffCommand.IMPACT_STYLES[impact].tag;\n }\n private impactDot(impact: ImpactLevel): string {\n return SchemaDiffCommand.IMPACT_STYLES[impact].dot;\n }\n\n private static DESCRIPTION_ENHANCERS: Array<{\n match: (changeKind: string, impact: ImpactLevel) => boolean;\n enhance: (desc: string) => string;\n }> = [\n {\n match: (ck, i) => ck === 'return-type-changed' && i === 'NON_BREAKING',\n enhance: (d) => d.replace('return type changed:', 'return type widened:'),\n },\n {\n match: (ck, i) => ck === 'return-type-changed' && i === 'BREAKING',\n enhance: (d) => d.replace('return type changed:', 'return type narrowed:'),\n },\n {\n match: (ck, i) =>\n (ck === 'destructured-property-default-removed' || ck === 'parameter-default-removed') && i === 'BREAKING',\n enhance: (d) => (d.includes('breaking') ? d : `${d} — callers relying on the default will break`),\n },\n ];\n\n private enhanceDescription(description: string, impact: ImpactLevel, changeKind: string): string {\n const enhancer = SchemaDiffCommand.DESCRIPTION_ENHANCERS.find((e) => e.match(changeKind, impact));\n return enhancer ? enhancer.enhance(description) : description;\n }\n\n private truncateSig(sig: string, maxLen = 120): string {\n const oneLine = sig.replace(/\\n/g, ' ').replace(/\\s+/g, ' ');\n if (oneLine.length <= maxLen) return oneLine;\n return `${oneLine.slice(0, maxLen - 3)}...`;\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_chalk","data","_interopRequireDefault","require","_cli","_semanticsEntities","e","__esModule","default","ownKeys","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","SchemaDiffCommand","constructor","schema","component","logger","report","args","pattern","baseVersion","compareVersion","diff","componentId","computeDiff","formatDiffResult","json","toAgentJson","host","getHost","ids","idsByPattern","Error","baseId","changeVersion","compareId","baseComponent","compareComponent","getMany","toString","debug","computeAPIDiff","toStringWithoutVersion","serializeChange","change","status","impact","exportName","schemaType","baseSignature","compareSignature","changes","details","map","d","changeKind","description","context","from","undefined","to","base","compare","hasChanges","internalImpact","summary","added","removed","modified","breaking","nonBreaking","patch","publicAPI","publicChanges","internal","internalChanges","formatUnavailable","lines","formatWarningSummary","available","REASON_TEXT","reason","join","chalk","green","bold","cyan","impactBadge","parts","red","yellow","impactParts","dim","formatSection","title","badge","formatTitle","sortChanges","formatChange","order","REMOVED","MODIFIED","ADDED","impactOrder","BREAKING","NON_BREAKING","PATCH","sort","a","b","statusDiff","indent","impactTag","kind","APIDiffStatus","truncateSig","strikethrough","detail","detailImpact","impactDot","desc","enhanceDescription","IMPACT_STYLES","tag","dot","enhancer","DESCRIPTION_ENHANCERS","find","match","enhance","sig","maxLen","oneLine","replace","slice","exports","NOT_BUILT","NO_EXTRACTOR","DISABLED","FAILED","bgRed","white","bgGreen","bgBlue","ck","includes"],"sources":["schema-diff.cmd.ts"],"sourcesContent":["import chalk from 'chalk';\nimport type { Command, CommandOptions, CLIArgs } from '@teambit/cli';\nimport { formatWarningSummary, formatTitle } from '@teambit/cli';\nimport type { ComponentMain } from '@teambit/component';\nimport type { Logger } from '@teambit/logger';\nimport { APIDiffStatus } from '@teambit/semantics.entities.semantic-schema-diff';\nimport type {\n APIDiffResult,\n APIDiffChange,\n ImpactLevel,\n SchemaUnavailableReason,\n} from '@teambit/semantics.entities.semantic-schema-diff';\nimport type { SchemaMain } from './schema.main.runtime';\n\nexport class SchemaDiffCommand implements Command {\n name = 'diff <component> <base-version> <compare-version>';\n description = 'show API changes between two versions of a component';\n extendedDescription = `compares the public API schema between two versions of a component.\nshows added, removed, and modified exports with semantic impact analysis.\n\nexamples:\n bit schema diff my-component 0.0.1 0.0.2`;\n group = 'info-analysis';\n options = [['j', 'json', 'return the API diff in json format']] as CommandOptions;\n\n constructor(\n private schema: SchemaMain,\n private component: ComponentMain,\n private logger: Logger\n ) {}\n\n async report(args: CLIArgs): Promise<string> {\n const [pattern, baseVersion, compareVersion] = args as string[];\n const { diff, componentId } = await this.computeDiff(pattern, baseVersion, compareVersion);\n return this.formatDiffResult(diff, `${componentId} (${baseVersion} → ${compareVersion})`);\n }\n\n async json(args: CLIArgs): Promise<Record<string, any>> {\n const [pattern, baseVersion, compareVersion] = args as string[];\n const { diff, componentId } = await this.computeDiff(pattern, baseVersion, compareVersion);\n return this.toAgentJson(diff, componentId, baseVersion, compareVersion);\n }\n\n private async computeDiff(\n pattern: string,\n baseVersion: string,\n compareVersion: string\n ): Promise<{ diff: APIDiffResult; componentId: string }> {\n const host = this.component.getHost();\n const ids = await host.idsByPattern(pattern, true);\n\n if (ids.length === 0) {\n throw new Error(`no components found matching \"${pattern}\"`);\n }\n if (ids.length > 1) {\n throw new Error(`pattern \"${pattern}\" matches ${ids.length} components. please specify a single component.`);\n }\n\n const componentId = ids[0];\n const baseId = componentId.changeVersion(baseVersion);\n const compareId = componentId.changeVersion(compareVersion);\n\n const [baseComponent, compareComponent] = await host.getMany([baseId, compareId]);\n\n if (!baseComponent) throw new Error(`could not load ${baseId.toString()}`);\n if (!compareComponent) throw new Error(`could not load ${compareId.toString()}`);\n\n this.logger.debug(`computing API diff: ${baseId.toString()} -> ${compareId.toString()}`);\n\n // availability-aware and artifact-first (see SchemaMain.computeAPIDiff): a version without a\n // schema (NOT_BUILT/NO_EXTRACTOR/DISABLED/FAILED) short-circuits with an explicit status —\n // never diffed as an empty API — and built versions read their schema artifact instead of\n // running a live extraction pass.\n const diff = await this.schema.computeAPIDiff(baseComponent, compareComponent);\n if (!diff) throw new Error(`failed computing API diff for ${componentId.toString()}`);\n return { diff, componentId: componentId.toStringWithoutVersion() };\n }\n\n private toAgentJson(\n diff: APIDiffResult,\n componentId: string,\n baseVersion: string,\n compareVersion: string\n ): Record<string, any> {\n const serializeChange = (change: APIDiffChange) => ({\n status: change.status,\n impact: change.impact,\n exportName: change.exportName,\n schemaType: change.schemaType,\n ...(change.baseSignature ? { baseSignature: change.baseSignature } : {}),\n ...(change.compareSignature ? { compareSignature: change.compareSignature } : {}),\n ...(change.changes && change.changes.length > 0\n ? {\n details: change.changes.map((d) => ({\n changeKind: d.changeKind,\n description: d.description,\n impact: d.impact,\n context: d.context,\n ...(d.from !== undefined ? { from: d.from } : {}),\n ...(d.to !== undefined ? { to: d.to } : {}),\n })),\n }\n : {}),\n });\n\n return {\n componentId,\n baseVersion,\n compareVersion,\n status: diff.status,\n base: diff.base,\n compare: diff.compare,\n hasChanges: diff.hasChanges,\n // `impact` is consumer-facing (public changes only); `internalImpact` covers non-exported changes,\n // which still count toward `summary.breaking` — surface both so an internal-only breaking change\n // isn't read as a PATCH from `impact` alone.\n impact: diff.impact,\n internalImpact: diff.internalImpact,\n summary: {\n added: diff.added,\n removed: diff.removed,\n modified: diff.modified,\n breaking: diff.breaking,\n nonBreaking: diff.nonBreaking,\n patch: diff.patch,\n },\n publicAPI: diff.publicChanges.map(serializeChange),\n internal: diff.internalChanges.map(serializeChange),\n };\n }\n\n private static REASON_TEXT: Record<SchemaUnavailableReason, string> = {\n NOT_BUILT: 'was built before API extraction — no API snapshot exists',\n NO_EXTRACTOR: \"its env doesn't provide a schema extractor\",\n DISABLED: 'has schema extraction disabled',\n FAILED: 'API data could not be loaded',\n };\n\n private formatUnavailable(diff: APIDiffResult, pattern: string): string {\n const lines = ['', ` ${formatWarningSummary(`Unable to compute API diff for \"${pattern}\"`)}`, ''];\n if (!diff.base.available) {\n lines.push(` base version ${SchemaDiffCommand.REASON_TEXT[diff.base.reason || 'FAILED']}`);\n }\n if (!diff.compare.available) {\n lines.push(` compare version ${SchemaDiffCommand.REASON_TEXT[diff.compare.reason || 'FAILED']}`);\n }\n lines.push('');\n return lines.join('\\n');\n }\n\n private formatDiffResult(diff: APIDiffResult, pattern: string): string {\n // a missing schema is not an empty API — report which side lacks data instead of\n // pretending \"no changes\" (or worse, a fabricated full-surface diff).\n if (diff.status !== 'COMPUTED') {\n return this.formatUnavailable(diff, pattern);\n }\n\n if (!diff.hasChanges) {\n return chalk.green(`\\n No API changes detected for ${pattern}\\n`);\n }\n\n const lines: string[] = [''];\n\n lines.push(` ${chalk.bold('API Diff')} for ${chalk.cyan(pattern)} ${this.impactBadge(diff.impact)}`);\n lines.push('');\n\n const parts: string[] = [];\n if (diff.added > 0) parts.push(chalk.green(`${diff.added} added`));\n if (diff.removed > 0) parts.push(chalk.red(`${diff.removed} removed`));\n if (diff.modified > 0) parts.push(chalk.yellow(`${diff.modified} modified`));\n const impactParts: string[] = [];\n if (diff.breaking > 0) impactParts.push(chalk.red.bold(`${diff.breaking} breaking`));\n if (diff.nonBreaking > 0) impactParts.push(chalk.green(`${diff.nonBreaking} non-breaking`));\n if (diff.patch > 0) impactParts.push(chalk.dim(`${diff.patch} patch`));\n lines.push(` ${parts.join(chalk.dim(' · '))} ${chalk.dim('|')} ${impactParts.join(chalk.dim(' · '))}`);\n lines.push('');\n\n // the header badge above is the consumer-facing (public) impact. internal changes carry their own\n // impact — show it on the internal section so an internal-only breaking change is visible and not\n // masked by a PATCH header.\n this.formatSection(lines, 'Public API', diff.publicChanges);\n this.formatSection(lines, 'Internal (non-exported)', diff.internalChanges, diff.internalImpact);\n\n return lines.join('\\n');\n }\n\n private formatSection(lines: string[], title: string, changes: APIDiffChange[], impact?: ImpactLevel): void {\n if (changes.length === 0) return;\n const badge = impact ? ` ${this.impactBadge(impact)}` : '';\n lines.push(` ${formatTitle(title)}${badge}`);\n lines.push('');\n for (const change of this.sortChanges(changes)) {\n lines.push(...this.formatChange(change));\n }\n }\n\n private sortChanges(changes: APIDiffChange[]): APIDiffChange[] {\n const order = { REMOVED: 0, MODIFIED: 1, ADDED: 2 };\n const impactOrder = { BREAKING: 0, NON_BREAKING: 1, PATCH: 2 };\n return [...changes].sort((a, b) => {\n const statusDiff = (order[a.status] ?? 3) - (order[b.status] ?? 3);\n if (statusDiff !== 0) return statusDiff;\n return (impactOrder[a.impact] ?? 3) - (impactOrder[b.impact] ?? 3);\n });\n }\n\n private formatChange(change: APIDiffChange): string[] {\n const lines: string[] = [];\n const indent = ' ';\n const impact = this.impactTag(change.impact);\n const kind = chalk.dim(`(${change.schemaType})`);\n\n switch (change.status) {\n case APIDiffStatus.ADDED:\n lines.push(` ${chalk.green.bold('+')} ${chalk.green(change.exportName)} ${kind} ${impact}`);\n if (change.compareSignature) {\n lines.push(`${indent}${chalk.dim(this.truncateSig(change.compareSignature))}`);\n }\n break;\n\n case APIDiffStatus.REMOVED:\n lines.push(` ${chalk.red.bold('−')} ${chalk.red(change.exportName)} ${kind} ${impact}`);\n if (change.baseSignature) {\n lines.push(`${indent}${chalk.dim.strikethrough(this.truncateSig(change.baseSignature))}`);\n }\n break;\n\n case APIDiffStatus.MODIFIED:\n lines.push(` ${chalk.yellow.bold('~')} ${chalk.yellow(change.exportName)} ${kind} ${impact}`);\n if (change.changes && change.changes.length > 0) {\n for (const detail of change.changes) {\n const detailImpact = this.impactDot(detail.impact);\n const desc = this.enhanceDescription(detail.description, detail.impact, detail.changeKind);\n lines.push(`${indent}${detailImpact} ${desc}`);\n if (detail.from != null && detail.to != null) {\n lines.push(`${indent} ${chalk.red(`- ${detail.from}`)}`);\n lines.push(`${indent} ${chalk.green(`+ ${detail.to}`)}`);\n }\n }\n }\n break;\n }\n\n lines.push('');\n return lines;\n }\n\n private static IMPACT_STYLES = {\n BREAKING: { badge: chalk.bgRed.white.bold(' BREAKING '), tag: chalk.red('breaking'), dot: chalk.red('●') },\n NON_BREAKING: {\n badge: chalk.bgGreen.white.bold(' NON-BREAKING '),\n tag: chalk.green('non-breaking'),\n dot: chalk.green('●'),\n },\n PATCH: { badge: chalk.bgBlue.white(' PATCH '), tag: chalk.dim('patch'), dot: chalk.dim('●') },\n };\n\n private impactBadge(impact: ImpactLevel): string {\n return SchemaDiffCommand.IMPACT_STYLES[impact].badge;\n }\n private impactTag(impact: ImpactLevel): string {\n return SchemaDiffCommand.IMPACT_STYLES[impact].tag;\n }\n private impactDot(impact: ImpactLevel): string {\n return SchemaDiffCommand.IMPACT_STYLES[impact].dot;\n }\n\n private static DESCRIPTION_ENHANCERS: Array<{\n match: (changeKind: string, impact: ImpactLevel) => boolean;\n enhance: (desc: string) => string;\n }> = [\n {\n match: (ck, i) => ck === 'return-type-changed' && i === 'NON_BREAKING',\n enhance: (d) => d.replace('return type changed:', 'return type widened:'),\n },\n {\n match: (ck, i) => ck === 'return-type-changed' && i === 'BREAKING',\n enhance: (d) => d.replace('return type changed:', 'return type narrowed:'),\n },\n {\n match: (ck, i) =>\n (ck === 'destructured-property-default-removed' || ck === 'parameter-default-removed') && i === 'BREAKING',\n enhance: (d) => (d.includes('breaking') ? d : `${d} — callers relying on the default will break`),\n },\n ];\n\n private enhanceDescription(description: string, impact: ImpactLevel, changeKind: string): string {\n const enhancer = SchemaDiffCommand.DESCRIPTION_ENHANCERS.find((e) => e.match(changeKind, impact));\n return enhancer ? enhancer.enhance(description) : description;\n }\n\n private truncateSig(sig: string, maxLen = 120): string {\n const oneLine = sig.replace(/\\n/g, ' ').replace(/\\s+/g, ' ');\n if (oneLine.length <= maxLen) return oneLine;\n return `${oneLine.slice(0, maxLen - 3)}...`;\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
package/dist/schema.graphql.js
CHANGED
|
@@ -41,6 +41,7 @@ function schemaSchema(schema) {
|
|
|
41
41
|
impact: String!
|
|
42
42
|
from: String
|
|
43
43
|
to: String
|
|
44
|
+
signature: String
|
|
44
45
|
}
|
|
45
46
|
|
|
46
47
|
type APIDiffChange {
|
|
@@ -57,12 +58,22 @@ function schemaSchema(schema) {
|
|
|
57
58
|
changes: [APIDiffDetail!]
|
|
58
59
|
}
|
|
59
60
|
|
|
61
|
+
type SchemaSideAvailability {
|
|
62
|
+
available: Boolean!
|
|
63
|
+
reason: String
|
|
64
|
+
}
|
|
65
|
+
|
|
60
66
|
type APIDiffResult {
|
|
67
|
+
status: String!
|
|
68
|
+
base: SchemaSideAvailability!
|
|
69
|
+
compare: SchemaSideAvailability!
|
|
61
70
|
hasChanges: Boolean!
|
|
62
71
|
impact: String!
|
|
72
|
+
internalImpact: String!
|
|
63
73
|
publicChanges: [APIDiffChange!]!
|
|
64
74
|
internalChanges: [APIDiffChange!]!
|
|
65
75
|
changes: [APIDiffChange!]!
|
|
76
|
+
unresolvedExports: [String!]!
|
|
66
77
|
added: Int!
|
|
67
78
|
removed: Int!
|
|
68
79
|
modified: Int!
|
|
@@ -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","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":[]}
|
|
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 signature: 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 SchemaSideAvailability {\n available: Boolean!\n reason: String\n }\n\n type APIDiffResult {\n status: String!\n base: SchemaSideAvailability!\n compare: SchemaSideAvailability!\n hasChanges: Boolean!\n impact: String!\n internalImpact: String!\n publicChanges: [APIDiffChange!]!\n internalChanges: [APIDiffChange!]!\n changes: [APIDiffChange!]!\n unresolvedExports: [String!]!\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,7 +10,7 @@ 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';
|
|
13
|
+
import type { ImpactRule, APIDiffResult, SchemaAvailability } from '@teambit/semantics.entities.semantic-schema-diff';
|
|
14
14
|
import { ImpactAssessor } from '@teambit/semantics.entities.semantic-schema-diff';
|
|
15
15
|
import type { Parser } from './parser';
|
|
16
16
|
import type { SchemaExtractor } from './schema-extractor';
|
|
@@ -77,6 +77,21 @@ export declare class SchemaMain {
|
|
|
77
77
|
*
|
|
78
78
|
*/
|
|
79
79
|
getSchema(component: Component, shouldDisposeResourcesOnceDone?: boolean, alwaysRunExtractor?: boolean, tsserverPath?: string, contextPath?: string, skipInternals?: boolean, schemaTransformers?: SchemaTransformer[], apiTransformers?: SchemaNodeTransformer[], includeFiles?: string[]): Promise<APISchema>;
|
|
80
|
+
/**
|
|
81
|
+
* like getSchema, but reports whether a real schema was obtained. an empty schema
|
|
82
|
+
* with `available: false` means "no schema data exists for this version" — callers
|
|
83
|
+
* (e.g. API diff) must not treat it as an empty API surface.
|
|
84
|
+
*/
|
|
85
|
+
getSchemaWithAvailability(component: Component, shouldDisposeResourcesOnceDone?: boolean, alwaysRunExtractor?: boolean, tsserverPath?: string, contextPath?: string, skipInternals?: boolean, schemaTransformers?: SchemaTransformer[], apiTransformers?: SchemaNodeTransformer[], includeFiles?: string[]): Promise<{
|
|
86
|
+
schema: APISchema;
|
|
87
|
+
availability: SchemaAvailability;
|
|
88
|
+
}>;
|
|
89
|
+
/**
|
|
90
|
+
* read the schema.json artifact the schema build task produced for this exact version.
|
|
91
|
+
* returns null when the version has no such artifact (never built, or built before API
|
|
92
|
+
* extraction existed). throws on a corrupt artifact.
|
|
93
|
+
*/
|
|
94
|
+
private readSchemaFromArtifact;
|
|
80
95
|
getSchemaFromObject(obj: Record<string, any>): APISchema;
|
|
81
96
|
getSchemaFromRemote(id: string): Promise<APISchema>;
|
|
82
97
|
/**
|
|
@@ -102,7 +117,24 @@ export declare class SchemaMain {
|
|
|
102
117
|
/**
|
|
103
118
|
* Compute the semantic API diff between two component versions.
|
|
104
119
|
*/
|
|
120
|
+
/**
|
|
121
|
+
* in-memory memo + single-flight for computed diffs. several consumers hit this for the
|
|
122
|
+
* same immutable version pair (lane-diff status via component-compare, the compare UI's
|
|
123
|
+
* apiDiff GraphQL field) — without this, a cold page load runs schema extraction twice
|
|
124
|
+
* per pair. transient failures (FAILED availability / null) are never memoized.
|
|
125
|
+
*/
|
|
126
|
+
private apiDiffMemo;
|
|
127
|
+
private apiDiffInflight;
|
|
128
|
+
private static API_DIFF_MEMO_MAX;
|
|
105
129
|
computeAPIDiff(baseComp: Component, compareComp: Component): Promise<APIDiffResult | null>;
|
|
130
|
+
/**
|
|
131
|
+
* is this component the version currently checked out in the workspace, with local modifications
|
|
132
|
+
* on top? that's the one case where the live source — not the version's built artifact — is the
|
|
133
|
+
* authoritative API surface for a diff side. errs toward true when modification state can't be
|
|
134
|
+
* determined, so local changes are never masked by a stale artifact.
|
|
135
|
+
*/
|
|
136
|
+
private isModifiedCheckoutOf;
|
|
137
|
+
private doComputeAPIDiff;
|
|
106
138
|
isSchemaTaskDisabled(component: Component): any;
|
|
107
139
|
static runtime: import("@teambit/harmony").RuntimeDefinition;
|
|
108
140
|
static dependencies: import("@teambit/harmony").Aspect[];
|
|
@@ -161,6 +161,17 @@ class SchemaMain {
|
|
|
161
161
|
this.workspace = workspace;
|
|
162
162
|
this.logger = logger;
|
|
163
163
|
this.impactAssessor = impactAssessor;
|
|
164
|
+
/**
|
|
165
|
+
* Compute the semantic API diff between two component versions.
|
|
166
|
+
*/
|
|
167
|
+
/**
|
|
168
|
+
* in-memory memo + single-flight for computed diffs. several consumers hit this for the
|
|
169
|
+
* same immutable version pair (lane-diff status via component-compare, the compare UI's
|
|
170
|
+
* apiDiff GraphQL field) — without this, a cold page load runs schema extraction twice
|
|
171
|
+
* per pair. transient failures (FAILED availability / null) are never memoized.
|
|
172
|
+
*/
|
|
173
|
+
_defineProperty(this, "apiDiffMemo", new Map());
|
|
174
|
+
_defineProperty(this, "apiDiffInflight", new Map());
|
|
164
175
|
}
|
|
165
176
|
|
|
166
177
|
/**
|
|
@@ -213,9 +224,31 @@ class SchemaMain {
|
|
|
213
224
|
*
|
|
214
225
|
*/
|
|
215
226
|
async getSchema(component, shouldDisposeResourcesOnceDone = false, alwaysRunExtractor = false, tsserverPath, contextPath, skipInternals, schemaTransformers, apiTransformers, includeFiles) {
|
|
227
|
+
const {
|
|
228
|
+
schema
|
|
229
|
+
} = await this.getSchemaWithAvailability(component, shouldDisposeResourcesOnceDone, alwaysRunExtractor, tsserverPath, contextPath, skipInternals, schemaTransformers, apiTransformers, includeFiles);
|
|
230
|
+
return schema;
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
/**
|
|
234
|
+
* like getSchema, but reports whether a real schema was obtained. an empty schema
|
|
235
|
+
* with `available: false` means "no schema data exists for this version" — callers
|
|
236
|
+
* (e.g. API diff) must not treat it as an empty API surface.
|
|
237
|
+
*/
|
|
238
|
+
async getSchemaWithAvailability(component, shouldDisposeResourcesOnceDone = false, alwaysRunExtractor = false, tsserverPath, contextPath, skipInternals, schemaTransformers, apiTransformers, includeFiles) {
|
|
216
239
|
if (this.config.disabled) {
|
|
217
|
-
return
|
|
240
|
+
return {
|
|
241
|
+
schema: _semanticsEntities().APISchema.empty(component.id),
|
|
242
|
+
availability: {
|
|
243
|
+
available: false,
|
|
244
|
+
reason: 'DISABLED'
|
|
245
|
+
}
|
|
246
|
+
};
|
|
218
247
|
}
|
|
248
|
+
|
|
249
|
+
// when extraction is attempted and fails, remember why so the artifact-fallback
|
|
250
|
+
// miss below reports the actual cause rather than a generic NOT_BUILT.
|
|
251
|
+
let extractionFailure;
|
|
219
252
|
if (alwaysRunExtractor || this.workspace && component.buildStatus !== _legacy().BuildStatus.Succeed) {
|
|
220
253
|
try {
|
|
221
254
|
const env = this.envs.getEnv(component).env;
|
|
@@ -225,6 +258,7 @@ class SchemaMain {
|
|
|
225
258
|
return config;
|
|
226
259
|
}]);
|
|
227
260
|
if (typeof env.getSchemaExtractor === 'undefined') {
|
|
261
|
+
extractionFailure = 'NO_EXTRACTOR';
|
|
228
262
|
throw new Error(`No SchemaExtractor defined for ${env.name}`);
|
|
229
263
|
}
|
|
230
264
|
const schemaExtractor = env.getSchemaExtractor(undefined, tsserverPath, contextPath, schemaTransformers, apiTransformers);
|
|
@@ -236,17 +270,27 @@ class SchemaMain {
|
|
|
236
270
|
includeFiles
|
|
237
271
|
});
|
|
238
272
|
if (shouldDisposeResourcesOnceDone) schemaExtractor.dispose();
|
|
239
|
-
|
|
273
|
+
|
|
274
|
+
// `live`: extracted from source at call time, not read from the version's built artifact —
|
|
275
|
+
// consumers that key results by version (API diff memo/cache) must not persist it.
|
|
276
|
+
return {
|
|
277
|
+
schema: result,
|
|
278
|
+
availability: {
|
|
279
|
+
available: true,
|
|
280
|
+
live: true
|
|
281
|
+
}
|
|
282
|
+
};
|
|
240
283
|
} catch (err) {
|
|
241
284
|
if (alwaysRunExtractor) throw err;
|
|
285
|
+
extractionFailure = extractionFailure || 'FAILED';
|
|
242
286
|
const message = err instanceof Error ? err.message : String(err);
|
|
243
287
|
this.logger.warn(`failed extracting schema for ${component.id.toString()}, falling back to artifacts. extractor error: ${message}`, err);
|
|
244
288
|
}
|
|
245
289
|
}
|
|
246
290
|
|
|
247
291
|
// on scope get schema from builder api
|
|
248
|
-
const
|
|
249
|
-
if (
|
|
292
|
+
const fromArtifact = await this.readSchemaFromArtifact(component);
|
|
293
|
+
if (!fromArtifact) {
|
|
250
294
|
this.logger.debug(`no schema found for ${component.id.toString()}`);
|
|
251
295
|
|
|
252
296
|
/**
|
|
@@ -254,8 +298,30 @@ class SchemaMain {
|
|
|
254
298
|
* when tag/snap without build
|
|
255
299
|
* or backwards compatibility
|
|
256
300
|
*/
|
|
257
|
-
return
|
|
301
|
+
return {
|
|
302
|
+
schema: _semanticsEntities().APISchema.empty(component.id),
|
|
303
|
+
availability: {
|
|
304
|
+
available: false,
|
|
305
|
+
reason: extractionFailure || 'NOT_BUILT'
|
|
306
|
+
}
|
|
307
|
+
};
|
|
258
308
|
}
|
|
309
|
+
return {
|
|
310
|
+
schema: fromArtifact,
|
|
311
|
+
availability: {
|
|
312
|
+
available: true
|
|
313
|
+
}
|
|
314
|
+
};
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
/**
|
|
318
|
+
* read the schema.json artifact the schema build task produced for this exact version.
|
|
319
|
+
* returns null when the version has no such artifact (never built, or built before API
|
|
320
|
+
* extraction existed). throws on a corrupt artifact.
|
|
321
|
+
*/
|
|
322
|
+
async readSchemaFromArtifact(component) {
|
|
323
|
+
const schemaArtifact = await this.builder.getArtifactsVinylByAspectAndTaskName(component, _schema().SchemaAspect.id, _schema4().SCHEMA_TASK_NAME);
|
|
324
|
+
if (schemaArtifact.length === 0) return null;
|
|
259
325
|
const schemaJsonStr = schemaArtifact[0].contents.toString('utf-8');
|
|
260
326
|
try {
|
|
261
327
|
const schemaJson = JSON.parse(schemaJsonStr);
|
|
@@ -320,15 +386,96 @@ class SchemaMain {
|
|
|
320
386
|
this.impactAssessor.registerRules(this.impactRuleSlot.values().flat());
|
|
321
387
|
return this.impactAssessor;
|
|
322
388
|
}
|
|
389
|
+
async computeAPIDiff(baseComp, compareComp) {
|
|
390
|
+
const memoKey = `${baseComp.id.toString()}|${compareComp.id.toString()}`;
|
|
391
|
+
const cached = this.apiDiffMemo.get(memoKey);
|
|
392
|
+
if (cached) return cached;
|
|
393
|
+
const pending = this.apiDiffInflight.get(memoKey);
|
|
394
|
+
if (pending) return pending;
|
|
395
|
+
|
|
396
|
+
// un-built workspace components extract their schema from live source — the same id can
|
|
397
|
+
// yield different schemas as the user edits, so those results must not be memoized.
|
|
398
|
+
const immutable = baseComp.buildStatus === _legacy().BuildStatus.Succeed && compareComp.buildStatus === _legacy().BuildStatus.Succeed;
|
|
399
|
+
const promise = this.doComputeAPIDiff(baseComp, compareComp).then(result => {
|
|
400
|
+
const transient = !result || result.status !== 'COMPUTED' && (result.base.reason === 'FAILED' || result.compare.reason === 'FAILED');
|
|
401
|
+
// artifact-derived sides are immutable even when the local buildStatus says otherwise (a
|
|
402
|
+
// checked-out component reports "pending" for a CI-built snap), so a COMPUTED result whose
|
|
403
|
+
// sides are not live-extracted is safe to memoize regardless of buildStatus. a live side
|
|
404
|
+
// reflects the working tree and must never be memoized under the version pair.
|
|
405
|
+
const live = Boolean(result && (result.base.live || result.compare.live));
|
|
406
|
+
const memoizable = !transient && !live && (immutable || result.status === 'COMPUTED');
|
|
407
|
+
if (memoizable) {
|
|
408
|
+
if (this.apiDiffMemo.size >= SchemaMain.API_DIFF_MEMO_MAX) {
|
|
409
|
+
const firstKey = this.apiDiffMemo.keys().next().value;
|
|
410
|
+
if (firstKey) this.apiDiffMemo.delete(firstKey);
|
|
411
|
+
}
|
|
412
|
+
this.apiDiffMemo.set(memoKey, result);
|
|
413
|
+
}
|
|
414
|
+
return result;
|
|
415
|
+
}).finally(() => {
|
|
416
|
+
this.apiDiffInflight.delete(memoKey);
|
|
417
|
+
});
|
|
418
|
+
this.apiDiffInflight.set(memoKey, promise);
|
|
419
|
+
return promise;
|
|
420
|
+
}
|
|
323
421
|
|
|
324
422
|
/**
|
|
325
|
-
*
|
|
423
|
+
* is this component the version currently checked out in the workspace, with local modifications
|
|
424
|
+
* on top? that's the one case where the live source — not the version's built artifact — is the
|
|
425
|
+
* authoritative API surface for a diff side. errs toward true when modification state can't be
|
|
426
|
+
* determined, so local changes are never masked by a stale artifact.
|
|
326
427
|
*/
|
|
327
|
-
async
|
|
428
|
+
async isModifiedCheckoutOf(component) {
|
|
429
|
+
if (!this.workspace) return false;
|
|
430
|
+
const checkedOut = this.workspace.getIdIfExist(component.id);
|
|
431
|
+
if (!checkedOut) return false;
|
|
432
|
+
if (component.id.version && checkedOut.version !== component.id.version) return false;
|
|
328
433
|
try {
|
|
329
|
-
|
|
434
|
+
return await this.workspace.isModified(component);
|
|
435
|
+
} catch {
|
|
436
|
+
return true;
|
|
437
|
+
}
|
|
438
|
+
}
|
|
439
|
+
async doComputeAPIDiff(baseComp, compareComp) {
|
|
440
|
+
try {
|
|
441
|
+
// a side whose schema retrieval throws is reported as FAILED availability rather than
|
|
442
|
+
// failing the whole diff — the result then carries an explicit status instead of null.
|
|
443
|
+
const getSide = async comp => {
|
|
444
|
+
try {
|
|
445
|
+
// both sides are pinned versions, so the snap's built schema artifact is authoritative and
|
|
446
|
+
// cheap to read. `getSchemaWithAvailability` instead runs the live extractor for any
|
|
447
|
+
// checked-out component whose local buildStatus isn't "succeed" (which a plain checkout of
|
|
448
|
+
// a CI-built snap reports) — a tsserver pass per component, reflecting the working tree
|
|
449
|
+
// rather than the snap; a degraded workspace then fabricates placeholder schemas that get
|
|
450
|
+
// diffed and cached under the immutable pair. the working tree is only authoritative for a
|
|
451
|
+
// *modified* checkout of the exact version; everything else prefers the artifact.
|
|
452
|
+
if (!(await this.isModifiedCheckoutOf(comp))) {
|
|
453
|
+
const fromArtifact = await this.readSchemaFromArtifact(comp);
|
|
454
|
+
if (fromArtifact) return {
|
|
455
|
+
schema: fromArtifact,
|
|
456
|
+
availability: {
|
|
457
|
+
available: true
|
|
458
|
+
}
|
|
459
|
+
};
|
|
460
|
+
}
|
|
461
|
+
return await this.getSchemaWithAvailability(comp);
|
|
462
|
+
} catch (err) {
|
|
463
|
+
this.logger.warn(`failed getting schema for ${comp.id.toString()}: ${err.message}`);
|
|
464
|
+
return {
|
|
465
|
+
schema: _semanticsEntities().APISchema.empty(comp.id),
|
|
466
|
+
availability: {
|
|
467
|
+
available: false,
|
|
468
|
+
reason: 'FAILED'
|
|
469
|
+
}
|
|
470
|
+
};
|
|
471
|
+
}
|
|
472
|
+
};
|
|
473
|
+
const [base, compare] = await Promise.all([getSide(baseComp), getSide(compareComp)]);
|
|
330
474
|
const assessor = this.getImpactAssessor();
|
|
331
|
-
return (0, _semanticsEntities2().computeAPIDiff)(
|
|
475
|
+
return (0, _semanticsEntities2().computeAPIDiff)(base.schema, compare.schema, assessor, {
|
|
476
|
+
base: base.availability,
|
|
477
|
+
compare: compare.availability
|
|
478
|
+
});
|
|
332
479
|
} catch (err) {
|
|
333
480
|
this.logger.warn(`failed computing API diff: ${err.message}`);
|
|
334
481
|
return null;
|
|
@@ -361,6 +508,7 @@ class SchemaMain {
|
|
|
361
508
|
}
|
|
362
509
|
}
|
|
363
510
|
exports.SchemaMain = SchemaMain;
|
|
511
|
+
_defineProperty(SchemaMain, "API_DIFF_MEMO_MAX", 500);
|
|
364
512
|
_defineProperty(SchemaMain, "runtime", _cli().MainRuntime);
|
|
365
513
|
_defineProperty(SchemaMain, "dependencies", [_envs().EnvsAspect, _cli().CLIAspect, _component().ComponentAspect, _graphql().GraphqlAspect, _logger().LoggerAspect, _builder().BuilderAspect, _workspace().WorkspaceAspect, _scope().ScopeAspect]);
|
|
366
514
|
_defineProperty(SchemaMain, "slots", [_harmony().Slot.withType(), _harmony().Slot.withType()]);
|