@teambit/lanes 1.0.1099 → 1.0.1101

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.
@@ -99,6 +99,11 @@ function lanesSchema(lanesMainRuntime) {
99
99
  id: String!
100
100
  sourceHead: String!
101
101
  targetHead: String
102
+ """
103
+ where the compared base was resolved from: "workspace" (already local) or "scope" (fetched
104
+ on demand from the remote scope). null for a new component (no base) or a lane-vs-lane diff.
105
+ """
106
+ baseSource: String
102
107
  componentId: ComponentID!
103
108
  changeType: String @deprecated(reason: "Use changes")
104
109
  """
@@ -288,7 +293,15 @@ function lanesSchema(lanesMainRuntime) {
288
293
  }) => {
289
294
  const sourceLaneId = _laneId().LaneId.parse(source);
290
295
  const targetLaneId = target ? _laneId().LaneId.parse(target) : undefined;
291
- return lanesMain.diffStatus(sourceLaneId, targetLaneId, options);
296
+ // Defer `changes` derivation to the per-component field resolver so the eager pMap inside
297
+ // `diffStatus` is fast. The field resolver only fires when the client selects `changes`,
298
+ // and graphql-js runs each component's resolver in parallel via `Promise.all`.
299
+ // `prewarmCaches`: this is the UI caller, which fires the follow-up compare/host queries the
300
+ // prewarm warms. Non-UI callers of `diffStatus` leave it off so they don't pay the fan-out.
301
+ return lanesMain.diffStatus(sourceLaneId, targetLaneId, _objectSpread(_objectSpread({}, options), {}, {
302
+ deferChanges: true,
303
+ prewarmCaches: true
304
+ }));
292
305
  },
293
306
  removeUpdateDependents: async (lanesMain, {
294
307
  laneId,
@@ -304,7 +317,12 @@ function lanesSchema(lanesMainRuntime) {
304
317
  },
305
318
  LaneComponentDiffStatus: {
306
319
  id: diffCompStatus => `${diffCompStatus.componentId.toStringWithoutVersion()}-${diffCompStatus.sourceHead}-${diffCompStatus.targetHead}`,
307
- componentId: diffCompStatus => diffCompStatus.componentId.toObject()
320
+ componentId: diffCompStatus => diffCompStatus.componentId.toObject(),
321
+ changes: diffCompStatus => lanesMainRuntime.deriveComponentChanges(diffCompStatus),
322
+ changeType: async diffCompStatus => {
323
+ const changes = await lanesMainRuntime.deriveComponentChanges(diffCompStatus);
324
+ return changes?.[0];
325
+ }
308
326
  },
309
327
  Lane: {
310
328
  id: lane => lane.id.toObject(),
@@ -1 +1 @@
1
- {"version":3,"names":["_laneId","data","require","_componentId","_fuse","_interopRequireDefault","_graphqlTag","_lodash","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","lanesSchema","lanesMainRuntime","typeDefs","gql","resolvers","Lanes","id","list","lanesMain","ids","limit","offset","sort","by","direction","search","lanes","getLanes","showDefaultLane","flatten","Promise","all","map","getDefaultLaneId","name","LaneId","parse","fuseOptions","threshold","findAllMatches","location","distance","minMatchCharLength","ignoreLocation","shouldSort","includeScore","fuse","Fuse","result","item","a","b","aDate","log","date","bDate","aId","toString","bId","slice","defaultLane","current","currentLaneName","getCurrentLaneName","undefined","currentLane","diff","from","to","options","getDiffResults","getDiff","compsWithDiff","diffStatus","source","target","sourceLaneId","targetLaneId","removeUpdateDependents","laneId","laneIdParsed","compIds","ComponentID","fromString","LaneDiffStatus","LaneComponentDiffStatus","diffCompStatus","componentId","toStringWithoutVersion","sourceHead","targetHead","toObject","Lane","lane","laneComponentIds","componentIds","getLaneComponentIds","components","laneComponents","getLaneComponentModels","updateDependentIds","getLaneUpdateDependentIds","updateDependentComponents","getLaneUpdateDependentComponents","readmeComponent","laneReadmeComponent","getLaneReadmeComponent","createdAt","createdBy","username","email","profileImage","displayName","Query"],"sources":["lanes.graphql.ts"],"sourcesContent":["import type { Schema } from '@teambit/graphql';\nimport { LaneId } from '@teambit/lane-id';\nimport { ComponentID } from '@teambit/component-id';\nimport Fuse from 'fuse.js';\nimport type { LaneData } from '@teambit/legacy.scope';\nimport { gql } from 'graphql-tag';\nimport { flatten, slice } from 'lodash';\nimport type { LaneComponentDiffStatus, LaneDiffStatus, LaneDiffStatusOptions, LanesMain } from './lanes.main.runtime';\n\nexport function lanesSchema(lanesMainRuntime: LanesMain): Schema {\n return {\n typeDefs: gql`\n type FileDiff {\n filePath: String!\n diffOutput: String\n }\n\n type SnapDistance {\n onSource: [String!]!\n onTarget: [String!]!\n common: String\n }\n\n type FieldsDiff {\n fieldName: String!\n diffOutput: String\n }\n\n type DiffResults {\n id: String\n hasDiff: Boolean\n filesDiff: [FileDiff]\n fieldsDiff: [FieldsDiff]\n }\n\n type GetDiffResult {\n newComps: [String]\n compsWithNoChanges: [String]\n toLaneName: String\n compsWithDiff: [DiffResults]\n }\n\n input DiffOptions {\n color: Boolean\n }\n\n input DiffStatusOptions {\n skipChanges: Boolean\n skipUpToDate: Boolean\n }\n\n type LaneId {\n name: String!\n scope: String!\n }\n\n type LaneComponentDiffStatus {\n \"\"\"\n for apollo caching - component id\n \"\"\"\n id: String!\n sourceHead: String!\n targetHead: String\n componentId: ComponentID!\n changeType: String @deprecated(reason: \"Use changes\")\n \"\"\"\n list of all change types - Source Code, Dependency, Aspects, etc\n \"\"\"\n changes: [String!]\n upToDate: Boolean\n snapsDistance: SnapDistance\n unrelated: Boolean\n }\n\n type LaneDiffStatus {\n \"\"\"\n for apollo caching - source + target\n \"\"\"\n id: String!\n source: LaneId!\n target: LaneId!\n componentsStatus: [LaneComponentDiffStatus!]!\n }\n\n type LaneOwner {\n name: String\n username: String\n displayName: String\n email: String\n profileImage: String\n }\n\n type Lane {\n id: LaneId!\n hash: String\n laneComponentIds: [ComponentID!]!\n components(offset: Int, limit: Int): [Component!]!\n \"\"\"\n IDs of hidden cascade entries (lane.updateDependents). Separate from \\`laneComponentIds\\`\n so workspace-facing consumers don't surface them by default.\n \"\"\"\n updateDependentIds: [ComponentID!]!\n \"\"\"\n Hidden cascade entries materialized as Components. Separate from \\`components\\` for the\n same reason — consumers opt in by selecting this field.\n \"\"\"\n updateDependentComponents(offset: Int, limit: Int): [Component!]!\n readmeComponent: Component\n createdBy: LaneOwner\n createdAt: String\n updatedBy: LaneOwner\n updatedAt: String\n }\n\n input LaneSort {\n by: String\n direction: String\n }\n\n # Lane API\n type Lanes {\n id: String!\n list(ids: [String!], offset: Int, limit: Int, sort: LaneSort, search: String): [Lane!]!\n default: Lane\n diff(from: String!, to: String!, options: DiffOptions): GetDiffResult\n diffStatus(source: String!, target: String, options: DiffStatusOptions): LaneDiffStatus!\n removeUpdateDependents(laneId: String!, ids: [String!]): Boolean\n current: Lane\n }\n\n type Query {\n lanes: Lanes\n }\n `,\n resolvers: {\n Lanes: {\n // need this for Apollo InMemory Caching\n id: () => 'lanes',\n list: async (\n lanesMain: LanesMain,\n {\n ids,\n limit,\n offset,\n sort: { by = 'createdAt', direction = 'desc' } = { by: 'createdAt', direction: 'desc' },\n search,\n }: {\n ids?: string[];\n offset?: number;\n limit?: number;\n sort?: {\n by?: string;\n direction?: string;\n };\n search?: string;\n }\n ) => {\n let lanes: LaneData[] = [];\n\n if (!ids || ids.length === 0) {\n lanes = await lanesMain.getLanes({ showDefaultLane: true });\n } else {\n lanes = flatten(\n await Promise.all(\n ids.map((id) => {\n if (id === lanesMain.getDefaultLaneId().name) {\n return lanesMain.getLanes({ showDefaultLane: true, name: id });\n }\n return lanesMain.getLanes({ name: LaneId.parse(id).name });\n })\n )\n );\n }\n\n if (search) {\n const fuseOptions = {\n keys: ['id.name', 'id.scope', 'log.username', 'log.email', 'log.displayName'],\n threshold: search.length === 1 ? 0 : 0.3,\n findAllMatches: true,\n location: 0,\n distance: search.length === 1 ? 0 : 100,\n minMatchCharLength: 1,\n ignoreLocation: true,\n shouldSort: false,\n includeScore: true,\n };\n const fuse = new Fuse(lanes, fuseOptions);\n lanes = fuse.search(search).map((result) => result.item);\n }\n\n lanes = lanes.sort((a, b) => {\n switch (by) {\n default: {\n if (!a[by] || !b[by]) return 0;\n\n if (a[by] < b[by]) return direction === 'asc' ? -1 : 1;\n if (a[by] > b[by]) return direction === 'asc' ? -1 : 1;\n return 0;\n }\n case 'createdAt':\n case 'updatedAt': {\n const aDate = a.log?.date;\n const bDate = b.log?.date;\n\n if (!aDate || !bDate) return 0;\n\n if (+aDate < +bDate) return direction === 'asc' ? -1 : 1;\n if (+aDate > +bDate) return direction === 'asc' ? 1 : -1;\n return 0;\n }\n case 'id': {\n const aId = a[by].toString();\n const bId = b[by].toString();\n\n if (aId < bId) return direction === 'asc' ? -1 : 1;\n if (aId > bId) return direction === 'asc' ? -1 : 1;\n return 0;\n }\n }\n });\n\n if (limit || offset) {\n lanes = slice(lanes, offset, limit && limit + (offset || 0));\n }\n\n return lanes;\n },\n default: async (lanesMain: LanesMain) => {\n const [defaultLane] = await lanesMain.getLanes({\n showDefaultLane: true,\n name: lanesMain.getDefaultLaneId().name,\n });\n return defaultLane;\n },\n current: async (lanesMain: LanesMain) => {\n const currentLaneName = lanesMain.getCurrentLaneName();\n if (!currentLaneName) return undefined;\n const [currentLane] = await lanesMain.getLanes({ name: currentLaneName });\n return currentLane;\n },\n diff: async (\n lanesMain: LanesMain,\n { from, to, options }: { to: string; from: string; options: { color?: boolean } }\n ) => {\n const getDiffResults = await lanesMain.getDiff([from, to], options);\n return {\n ...getDiffResults,\n compsWithDiff: getDiffResults.compsWithDiff.map((item) => ({ ...item, id: item.id.toString() })),\n };\n },\n diffStatus: async (\n lanesMain: LanesMain,\n { source, target, options }: { source: string; target?: string; options?: LaneDiffStatusOptions }\n ) => {\n const sourceLaneId = LaneId.parse(source);\n const targetLaneId = target ? LaneId.parse(target) : undefined;\n return lanesMain.diffStatus(sourceLaneId, targetLaneId, options);\n },\n removeUpdateDependents: async (lanesMain: LanesMain, { laneId, ids }: { laneId: string; ids?: string[] }) => {\n const laneIdParsed = LaneId.parse(laneId);\n const compIds = ids?.map((id) => ComponentID.fromString(id));\n return lanesMain.removeUpdateDependents(laneIdParsed, compIds);\n },\n },\n LaneDiffStatus: {\n id: (diffStatus: LaneDiffStatus) => `${diffStatus.source.toString()}-${diffStatus.target.toString()}`,\n },\n LaneComponentDiffStatus: {\n id: (diffCompStatus: LaneComponentDiffStatus) =>\n `${diffCompStatus.componentId.toStringWithoutVersion()}-${diffCompStatus.sourceHead}-${\n diffCompStatus.targetHead\n }`,\n componentId: (diffCompStatus: LaneComponentDiffStatus) => diffCompStatus.componentId.toObject(),\n },\n Lane: {\n id: (lane: LaneData) => lane.id.toObject(),\n laneComponentIds: async (lane: LaneData) => {\n const componentIds = await lanesMainRuntime.getLaneComponentIds(lane);\n return componentIds.map((componentId) => componentId.toObject());\n },\n components: async (lane: LaneData) => {\n const laneComponents = await lanesMainRuntime.getLaneComponentModels(lane);\n return laneComponents;\n },\n updateDependentIds: async (lane: LaneData) => {\n const ids = await lanesMainRuntime.getLaneUpdateDependentIds(lane);\n return ids.map((id) => id.toObject());\n },\n updateDependentComponents: async (lane: LaneData) => {\n return lanesMainRuntime.getLaneUpdateDependentComponents(lane);\n },\n readmeComponent: async (lane: LaneData) => {\n const laneReadmeComponent = await lanesMainRuntime.getLaneReadmeComponent(lane);\n return laneReadmeComponent;\n },\n createdAt: async (lane: LaneData) => {\n return lane.log?.date;\n },\n createdBy: async (lane: LaneData) => {\n return {\n name: lane.log?.username,\n email: lane.log?.email,\n profileImage: lane.log?.profileImage,\n displayName: lane.log?.username,\n username: lane.log?.username,\n };\n },\n },\n Query: {\n lanes: () => lanesMainRuntime,\n },\n },\n };\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_laneId","data","require","_componentId","_fuse","_interopRequireDefault","_graphqlTag","_lodash","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","lanesSchema","lanesMainRuntime","typeDefs","gql","resolvers","Lanes","id","list","lanesMain","ids","limit","offset","sort","by","direction","search","lanes","getLanes","showDefaultLane","flatten","Promise","all","map","getDefaultLaneId","name","LaneId","parse","fuseOptions","threshold","findAllMatches","location","distance","minMatchCharLength","ignoreLocation","shouldSort","includeScore","fuse","Fuse","result","item","a","b","aDate","log","date","bDate","aId","toString","bId","slice","defaultLane","current","currentLaneName","getCurrentLaneName","undefined","currentLane","diff","from","to","options","getDiffResults","getDiff","compsWithDiff","diffStatus","source","target","sourceLaneId","targetLaneId","deferChanges","prewarmCaches","removeUpdateDependents","laneId","laneIdParsed","compIds","ComponentID","fromString","LaneDiffStatus","LaneComponentDiffStatus","diffCompStatus","componentId","toStringWithoutVersion","sourceHead","targetHead","toObject","changes","deriveComponentChanges","changeType","Lane","lane","laneComponentIds","componentIds","getLaneComponentIds","components","laneComponents","getLaneComponentModels","updateDependentIds","getLaneUpdateDependentIds","updateDependentComponents","getLaneUpdateDependentComponents","readmeComponent","laneReadmeComponent","getLaneReadmeComponent","createdAt","createdBy","username","email","profileImage","displayName","Query"],"sources":["lanes.graphql.ts"],"sourcesContent":["import type { Schema } from '@teambit/graphql';\nimport { LaneId } from '@teambit/lane-id';\nimport { ComponentID } from '@teambit/component-id';\nimport Fuse from 'fuse.js';\nimport type { LaneData } from '@teambit/legacy.scope';\nimport { gql } from 'graphql-tag';\nimport { flatten, slice } from 'lodash';\nimport type { LaneComponentDiffStatus, LaneDiffStatus, LaneDiffStatusOptions, LanesMain } from './lanes.main.runtime';\n\nexport function lanesSchema(lanesMainRuntime: LanesMain): Schema {\n return {\n typeDefs: gql`\n type FileDiff {\n filePath: String!\n diffOutput: String\n }\n\n type SnapDistance {\n onSource: [String!]!\n onTarget: [String!]!\n common: String\n }\n\n type FieldsDiff {\n fieldName: String!\n diffOutput: String\n }\n\n type DiffResults {\n id: String\n hasDiff: Boolean\n filesDiff: [FileDiff]\n fieldsDiff: [FieldsDiff]\n }\n\n type GetDiffResult {\n newComps: [String]\n compsWithNoChanges: [String]\n toLaneName: String\n compsWithDiff: [DiffResults]\n }\n\n input DiffOptions {\n color: Boolean\n }\n\n input DiffStatusOptions {\n skipChanges: Boolean\n skipUpToDate: Boolean\n }\n\n type LaneId {\n name: String!\n scope: String!\n }\n\n type LaneComponentDiffStatus {\n \"\"\"\n for apollo caching - component id\n \"\"\"\n id: String!\n sourceHead: String!\n targetHead: String\n \"\"\"\n where the compared base was resolved from: \"workspace\" (already local) or \"scope\" (fetched\n on demand from the remote scope). null for a new component (no base) or a lane-vs-lane diff.\n \"\"\"\n baseSource: String\n componentId: ComponentID!\n changeType: String @deprecated(reason: \"Use changes\")\n \"\"\"\n list of all change types - Source Code, Dependency, Aspects, etc\n \"\"\"\n changes: [String!]\n upToDate: Boolean\n snapsDistance: SnapDistance\n unrelated: Boolean\n }\n\n type LaneDiffStatus {\n \"\"\"\n for apollo caching - source + target\n \"\"\"\n id: String!\n source: LaneId!\n target: LaneId!\n componentsStatus: [LaneComponentDiffStatus!]!\n }\n\n type LaneOwner {\n name: String\n username: String\n displayName: String\n email: String\n profileImage: String\n }\n\n type Lane {\n id: LaneId!\n hash: String\n laneComponentIds: [ComponentID!]!\n components(offset: Int, limit: Int): [Component!]!\n \"\"\"\n IDs of hidden cascade entries (lane.updateDependents). Separate from \\`laneComponentIds\\`\n so workspace-facing consumers don't surface them by default.\n \"\"\"\n updateDependentIds: [ComponentID!]!\n \"\"\"\n Hidden cascade entries materialized as Components. Separate from \\`components\\` for the\n same reason — consumers opt in by selecting this field.\n \"\"\"\n updateDependentComponents(offset: Int, limit: Int): [Component!]!\n readmeComponent: Component\n createdBy: LaneOwner\n createdAt: String\n updatedBy: LaneOwner\n updatedAt: String\n }\n\n input LaneSort {\n by: String\n direction: String\n }\n\n # Lane API\n type Lanes {\n id: String!\n list(ids: [String!], offset: Int, limit: Int, sort: LaneSort, search: String): [Lane!]!\n default: Lane\n diff(from: String!, to: String!, options: DiffOptions): GetDiffResult\n diffStatus(source: String!, target: String, options: DiffStatusOptions): LaneDiffStatus!\n removeUpdateDependents(laneId: String!, ids: [String!]): Boolean\n current: Lane\n }\n\n type Query {\n lanes: Lanes\n }\n `,\n resolvers: {\n Lanes: {\n // need this for Apollo InMemory Caching\n id: () => 'lanes',\n list: async (\n lanesMain: LanesMain,\n {\n ids,\n limit,\n offset,\n sort: { by = 'createdAt', direction = 'desc' } = { by: 'createdAt', direction: 'desc' },\n search,\n }: {\n ids?: string[];\n offset?: number;\n limit?: number;\n sort?: {\n by?: string;\n direction?: string;\n };\n search?: string;\n }\n ) => {\n let lanes: LaneData[] = [];\n\n if (!ids || ids.length === 0) {\n lanes = await lanesMain.getLanes({ showDefaultLane: true });\n } else {\n lanes = flatten(\n await Promise.all(\n ids.map((id) => {\n if (id === lanesMain.getDefaultLaneId().name) {\n return lanesMain.getLanes({ showDefaultLane: true, name: id });\n }\n return lanesMain.getLanes({ name: LaneId.parse(id).name });\n })\n )\n );\n }\n\n if (search) {\n const fuseOptions = {\n keys: ['id.name', 'id.scope', 'log.username', 'log.email', 'log.displayName'],\n threshold: search.length === 1 ? 0 : 0.3,\n findAllMatches: true,\n location: 0,\n distance: search.length === 1 ? 0 : 100,\n minMatchCharLength: 1,\n ignoreLocation: true,\n shouldSort: false,\n includeScore: true,\n };\n const fuse = new Fuse(lanes, fuseOptions);\n lanes = fuse.search(search).map((result) => result.item);\n }\n\n lanes = lanes.sort((a, b) => {\n switch (by) {\n default: {\n if (!a[by] || !b[by]) return 0;\n\n if (a[by] < b[by]) return direction === 'asc' ? -1 : 1;\n if (a[by] > b[by]) return direction === 'asc' ? -1 : 1;\n return 0;\n }\n case 'createdAt':\n case 'updatedAt': {\n const aDate = a.log?.date;\n const bDate = b.log?.date;\n\n if (!aDate || !bDate) return 0;\n\n if (+aDate < +bDate) return direction === 'asc' ? -1 : 1;\n if (+aDate > +bDate) return direction === 'asc' ? 1 : -1;\n return 0;\n }\n case 'id': {\n const aId = a[by].toString();\n const bId = b[by].toString();\n\n if (aId < bId) return direction === 'asc' ? -1 : 1;\n if (aId > bId) return direction === 'asc' ? -1 : 1;\n return 0;\n }\n }\n });\n\n if (limit || offset) {\n lanes = slice(lanes, offset, limit && limit + (offset || 0));\n }\n\n return lanes;\n },\n default: async (lanesMain: LanesMain) => {\n const [defaultLane] = await lanesMain.getLanes({\n showDefaultLane: true,\n name: lanesMain.getDefaultLaneId().name,\n });\n return defaultLane;\n },\n current: async (lanesMain: LanesMain) => {\n const currentLaneName = lanesMain.getCurrentLaneName();\n if (!currentLaneName) return undefined;\n const [currentLane] = await lanesMain.getLanes({ name: currentLaneName });\n return currentLane;\n },\n diff: async (\n lanesMain: LanesMain,\n { from, to, options }: { to: string; from: string; options: { color?: boolean } }\n ) => {\n const getDiffResults = await lanesMain.getDiff([from, to], options);\n return {\n ...getDiffResults,\n compsWithDiff: getDiffResults.compsWithDiff.map((item) => ({ ...item, id: item.id.toString() })),\n };\n },\n diffStatus: async (\n lanesMain: LanesMain,\n { source, target, options }: { source: string; target?: string; options?: LaneDiffStatusOptions }\n ) => {\n const sourceLaneId = LaneId.parse(source);\n const targetLaneId = target ? LaneId.parse(target) : undefined;\n // Defer `changes` derivation to the per-component field resolver so the eager pMap inside\n // `diffStatus` is fast. The field resolver only fires when the client selects `changes`,\n // and graphql-js runs each component's resolver in parallel via `Promise.all`.\n // `prewarmCaches`: this is the UI caller, which fires the follow-up compare/host queries the\n // prewarm warms. Non-UI callers of `diffStatus` leave it off so they don't pay the fan-out.\n return lanesMain.diffStatus(sourceLaneId, targetLaneId, {\n ...options,\n deferChanges: true,\n prewarmCaches: true,\n });\n },\n removeUpdateDependents: async (lanesMain: LanesMain, { laneId, ids }: { laneId: string; ids?: string[] }) => {\n const laneIdParsed = LaneId.parse(laneId);\n const compIds = ids?.map((id) => ComponentID.fromString(id));\n return lanesMain.removeUpdateDependents(laneIdParsed, compIds);\n },\n },\n LaneDiffStatus: {\n id: (diffStatus: LaneDiffStatus) => `${diffStatus.source.toString()}-${diffStatus.target.toString()}`,\n },\n LaneComponentDiffStatus: {\n id: (diffCompStatus: LaneComponentDiffStatus) =>\n `${diffCompStatus.componentId.toStringWithoutVersion()}-${diffCompStatus.sourceHead}-${\n diffCompStatus.targetHead\n }`,\n componentId: (diffCompStatus: LaneComponentDiffStatus) => diffCompStatus.componentId.toObject(),\n changes: (diffCompStatus: LaneComponentDiffStatus) => lanesMainRuntime.deriveComponentChanges(diffCompStatus),\n changeType: async (diffCompStatus: LaneComponentDiffStatus) => {\n const changes = await lanesMainRuntime.deriveComponentChanges(diffCompStatus);\n return changes?.[0];\n },\n },\n Lane: {\n id: (lane: LaneData) => lane.id.toObject(),\n laneComponentIds: async (lane: LaneData) => {\n const componentIds = await lanesMainRuntime.getLaneComponentIds(lane);\n return componentIds.map((componentId) => componentId.toObject());\n },\n components: async (lane: LaneData) => {\n const laneComponents = await lanesMainRuntime.getLaneComponentModels(lane);\n return laneComponents;\n },\n updateDependentIds: async (lane: LaneData) => {\n const ids = await lanesMainRuntime.getLaneUpdateDependentIds(lane);\n return ids.map((id) => id.toObject());\n },\n updateDependentComponents: async (lane: LaneData) => {\n return lanesMainRuntime.getLaneUpdateDependentComponents(lane);\n },\n readmeComponent: async (lane: LaneData) => {\n const laneReadmeComponent = await lanesMainRuntime.getLaneReadmeComponent(lane);\n return laneReadmeComponent;\n },\n createdAt: async (lane: LaneData) => {\n return lane.log?.date;\n },\n createdBy: async (lane: LaneData) => {\n return {\n name: lane.log?.username,\n email: lane.log?.email,\n profileImage: lane.log?.profileImage,\n displayName: lane.log?.username,\n username: lane.log?.username,\n };\n },\n },\n Query: {\n lanes: () => lanesMainRuntime,\n },\n },\n };\n}\n"],"mappings":"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","ignoreList":[]}
@@ -53,10 +53,14 @@ export type SwitchLaneOptions = {
53
53
  override?: boolean;
54
54
  branch?: boolean;
55
55
  };
56
+ /** where the base was resolved from: `workspace` (already local) or `scope` (fetched from remote). */
57
+ export type DiffBaseSource = 'workspace' | 'scope';
56
58
  export type LaneComponentDiffStatus = {
57
59
  componentId: ComponentID;
58
60
  sourceHead: string;
59
61
  targetHead?: string;
62
+ /** where the base was resolved from (workspace vs remote scope). @see DiffBaseSource */
63
+ baseSource?: DiffBaseSource;
60
64
  /**
61
65
  * @deprecated
62
66
  * use changes to get list of all the changes
@@ -66,9 +70,40 @@ export type LaneComponentDiffStatus = {
66
70
  upToDate?: boolean;
67
71
  snapsDistance?: SnapsDistanceObj;
68
72
  unrelated?: boolean;
73
+ /**
74
+ * internal context for deferred derivation of `changes`. not exposed on the GraphQL schema —
75
+ * the `changes` field resolver consumes this via `deriveComponentChanges` so the heavy
76
+ * `componentCompare.compare()` + `getAPIDiff()` work only runs when the field is selected,
77
+ * lazily per-component, in parallel via graphql-js list resolution.
78
+ */
79
+ changesContext?: {
80
+ commonSnap?: {
81
+ hash: string;
82
+ } | null;
83
+ skipped?: boolean;
84
+ pending?: Promise<ChangeType[] | undefined>;
85
+ };
69
86
  };
70
87
  export type LaneDiffStatusOptions = {
88
+ /** skip importing the common snaps and computing `changes` entirely */
71
89
  skipChanges?: boolean;
90
+ /**
91
+ * drop components where the snaps-distance says the source already includes everything on the
92
+ * target. these contribute nothing to a target→source merge view but each costs an
93
+ * `importWithoutDeps` round trip + an `apiDiff` schema extraction.
94
+ */
95
+ skipUpToDate?: boolean;
96
+ /**
97
+ * still classify snap distance, but don't compute `changes` eagerly. callers derive them lazily
98
+ * via `deriveComponentChanges` (used by GraphQL field resolvers).
99
+ */
100
+ deferChanges?: boolean;
101
+ /**
102
+ * after computing the result, eagerly warm the compare/host caches the lane-compare UI will hit next.
103
+ * UI-only: it fans out concurrent component loads, so CLI/programmatic callers (which never make those
104
+ * follow-up queries) must leave it off to avoid paying — and multiplying — that cold-load cost.
105
+ */
106
+ prewarmCaches?: boolean;
72
107
  };
73
108
  export type DivergeDataPerId = {
74
109
  id: ComponentID;
@@ -103,6 +138,36 @@ export declare class LanesMain {
103
138
  readonly checkout: CheckoutMain;
104
139
  private install;
105
140
  constructor(workspace: Workspace | undefined, scope: ScopeMain, merging: MergingMain, componentAspect: ComponentMain, logger: Logger, importer: ImporterMain, exporter: ExportMain, componentCompare: ComponentCompareMain, componentWriter: ComponentWriterMain, remove: RemoveMain, checkout: CheckoutMain, install: InstallMain);
141
+ /**
142
+ * disk-persisted memo layer for the lane-diff computation (snaps-distance, change-types and the
143
+ * top-level result). extracted to its own class — see `LaneDiffCache` in lanes/diff.
144
+ */
145
+ private _laneDiffCache?;
146
+ private get laneDiffCache();
147
+ /**
148
+ * Bound the parallelism of `deriveChangeTypes` across all in-flight requests. graphql-js resolves
149
+ * list fields in parallel via `Promise.all`, so an uncapped derivation fires one `compare()` per
150
+ * component at once. The old cap of 4 existed because derivation also ran `getAPIDiff` (serial
151
+ * tsserver schema extraction) — that's now deferred to the API view, so derivation only does the
152
+ * I/O+CPU-bound `compare()`, which parallelizes well. Cap to the component concurrency limit.
153
+ */
154
+ private deriveChangesLimit;
155
+ /** single-flight for concurrent `deriveComponentChanges` calls on the same memo key. */
156
+ private changeTypesInflight;
157
+ private tryDiffStatusResultMemo;
158
+ /**
159
+ * Pre-warm the downstream caches the lane-compare UI hits right after `LaneDiffStatus`:
160
+ * - the scope's `ScopeComponentLoader.componentsCache` via `host.getMany([…])`
161
+ * - `componentCompare`'s disk-persisted result memo via `compareComponents(pairs)`
162
+ *
163
+ * Fire-and-forget. The UI's follow-up `Component` and `CompareComponents` queries arrive ~50–200 ms
164
+ * after we return; this kickoff happens *before* we return, so the work overlaps the UI's render
165
+ * tick and the response serialization. By the time the UI's queries land on the server, the caches
166
+ * are populated (or, worst case, the pre-warm work is in-flight and the resolver-level single-flight
167
+ * in `componentCompare` dedupes the load).
168
+ */
169
+ private prewarmCompareCaches;
170
+ private populateDiffStatusMemoAsync;
106
171
  /**
107
172
  * return the lane data without the deleted components.
108
173
  * the deleted components are filtered out in legacyScope.lanes.getLanesData()
@@ -152,9 +217,7 @@ export declare class LanesMain {
152
217
  exportLane(lane: Lane): Promise<void>;
153
218
  importLaneObject(laneId: LaneId, persistIfNotExists?: boolean, includeLaneHistory?: boolean): Promise<Lane>;
154
219
  eject(pattern: string): Promise<ComponentID[]>;
155
- /**
156
- * get the head hash (snap) of main. return undefined if the component exists only on a lane and was never merged to main
157
- */
220
+ /** head hash of main, with remote-scope fallback. undefined only for a genuinely-new component. */
158
221
  getHeadOnMain(componentId: ComponentID): Promise<string | undefined>;
159
222
  /**
160
223
  * fetch the lane object and its components from the remote.
@@ -206,7 +269,13 @@ export declare class LanesMain {
206
269
  }>;
207
270
  diffStatus(sourceLaneId: LaneId, targetLaneId?: LaneId, options?: LaneDiffStatusOptions): Promise<LaneDiffStatus>;
208
271
  private componentDiffStatus;
209
- componentDiffStatusOld(componentId: ComponentID, sourceHead: string, targetHead?: string, options?: LaneDiffStatusOptions): Promise<LaneComponentDiffStatus>;
272
+ /**
273
+ * Lazily derive the change types for a single component diff status. Used by the GraphQL `changes`
274
+ * field resolver so the (expensive) derivation only runs when the field is selected. Memoized per
275
+ * status object via `changesContext.pending`, so selecting both `changes` and `changeType` computes
276
+ * the value once.
277
+ */
278
+ deriveComponentChanges(status: LaneComponentDiffStatus): Promise<ChangeType[] | undefined>;
210
279
  private deriveChangeTypes;
211
280
  private recreateNewLaneIfDeleted;
212
281
  /**