@thallylabs/migrate 0.2.33 → 0.2.35

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.
@@ -165,6 +165,12 @@ interface MigrationNavigationGroup {
165
165
  hidden?: boolean;
166
166
  pages: Array<string | MigrationNavigationGroup>;
167
167
  }
168
+ /** A group of an API tab's authored sidebar: `METHOD /path` operation keys and nested groups. */
169
+ interface MigrationApiGroup {
170
+ group: string;
171
+ icon?: string;
172
+ pages: Array<string | MigrationApiGroup>;
173
+ }
168
174
  interface MigrationNavigationTab {
169
175
  tab: string;
170
176
  /** Reader-facing label when `tab` includes a version for unique identity. */
@@ -180,6 +186,7 @@ interface MigrationNavigationTab {
180
186
  api?: {
181
187
  source: string;
182
188
  navigation?: boolean;
189
+ groups?: Array<MigrationApiGroup>;
183
190
  };
184
191
  }
185
192
  interface MigrationBannerConfig {
@@ -238,6 +245,8 @@ interface MigrationDocsConfig {
238
245
  stylesheets?: Array<string>;
239
246
  /** `false` hides the breadcrumb trail; Mintlify pages show only a group eyebrow. */
240
247
  breadcrumbs?: boolean;
248
+ /** `path` shows the full group path above the title (Mintlify `styling.eyebrows: "breadcrumbs"`); the default shows the nearest group. */
249
+ eyebrow?: 'group' | 'path';
241
250
  tabs: Array<MigrationNavigationTab>;
242
251
  navigation?: {
243
252
  /** How sibling documentation collections are presented to readers. */
@@ -272,6 +281,7 @@ interface MigrationDocsConfig {
272
281
  colors?: Partial<Record<'light' | 'dark', {
273
282
  primary?: string;
274
283
  accent?: string;
284
+ background?: string;
275
285
  }>>;
276
286
  icons?: {
277
287
  library?: 'lucide' | 'fontawesome' | 'tabler';
@@ -439,6 +449,10 @@ interface RemoteApiSpec {
439
449
  hidden?: boolean;
440
450
  /** Every `directory` docs.json mounts this spec under: several API tabs may share one spec URL. */
441
451
  directories?: Array<RemoteApiSpecDirectory>;
452
+ /** The operation groups docs.json authors for the tab this spec binds to, merged across every reference that shares it. */
453
+ groups?: Array<MigrationApiGroup>;
454
+ /** Every reference sharing the tab lists operations and none survives (all hidden or restricted): no endpoint navigation is generated for it. */
455
+ navigation?: false;
442
456
  /** Operation keys (`get /x`) only access-restricted pages document; marked `x-excluded` after download. */
443
457
  withheldOperations?: Array<string>;
444
458
  /** Operation keys published pages or docs.json also name; keeps a shared `$ref` path item public. */
@@ -1 +1 @@
1
- export { a as MigrationAsset, f as MigrationBundle, h as MigrationCapture, i as MigrationCaptureProvider, j as MigrationCaptureState, k as MigrationCapturedAsset, g as MigrationDocsConfig, l as MigrationEvidence, m as MigrationFetchRequest, n as MigrationFetchResponse, d as MigrationFetcher, o as MigrationJournalAsset, b as MigrationNavigationGroup, p as MigrationNavigationOccurrence, q as MigrationNavigationTab, M as MigrationPage, e as MigrationPlatform, c as MigrationWarning, R as RenderedMigrationFile, U as UrlMigrationCheckpoint, r as UrlMigrationCheckpointDelta, s as UrlMigrationIssue, t as UrlMigrationRecord, u as UrlMigrationRun, v as UrlMigrationRunOptions, w as UrlMigrationValidation, x as classifyMigrationResponse, z as renderMigrationFiles, A as runUrlMigration, B as validateUrlMigration } from './url-migration-_wVauqSg.js';
1
+ export { a as MigrationAsset, f as MigrationBundle, h as MigrationCapture, i as MigrationCaptureProvider, j as MigrationCaptureState, k as MigrationCapturedAsset, g as MigrationDocsConfig, l as MigrationEvidence, m as MigrationFetchRequest, n as MigrationFetchResponse, d as MigrationFetcher, o as MigrationJournalAsset, b as MigrationNavigationGroup, p as MigrationNavigationOccurrence, q as MigrationNavigationTab, M as MigrationPage, e as MigrationPlatform, c as MigrationWarning, R as RenderedMigrationFile, U as UrlMigrationCheckpoint, r as UrlMigrationCheckpointDelta, s as UrlMigrationIssue, t as UrlMigrationRecord, u as UrlMigrationRun, v as UrlMigrationRunOptions, w as UrlMigrationValidation, x as classifyMigrationResponse, z as renderMigrationFiles, A as runUrlMigration, B as validateUrlMigration } from './url-migration-peVzTLjL.js';
@@ -1065,8 +1065,11 @@ var JS_GLOBALS = /* @__PURE__ */ new Set([
1065
1065
  "MessageChannel",
1066
1066
  "BroadcastChannel"
1067
1067
  ]);
1068
- function parse(source) {
1069
- return ts.createSourceFile("inline.tsx", source, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);
1068
+ function scriptKindFor(fileName) {
1069
+ return /\.[cm]?ts$/.test(fileName) ? ts.ScriptKind.TS : ts.ScriptKind.TSX;
1070
+ }
1071
+ function parse(source, fileName = "inline.tsx") {
1072
+ return ts.createSourceFile(fileName, source, ts.ScriptTarget.Latest, true, scriptKindFor(fileName));
1070
1073
  }
1071
1074
  function bindingNames(name, into) {
1072
1075
  if (ts.isIdentifier(name)) into.add(name.text);
@@ -1075,20 +1078,44 @@ function bindingNames(name, into) {
1075
1078
  function isFunctionLike(node) {
1076
1079
  return ts.isFunctionDeclaration(node) || ts.isFunctionExpression(node) || ts.isArrowFunction(node) || ts.isMethodDeclaration(node) || ts.isConstructorDeclaration(node) || ts.isGetAccessorDeclaration(node) || ts.isSetAccessorDeclaration(node);
1077
1080
  }
1081
+ function hoistedVarNames(root, into) {
1082
+ const collect = (node) => {
1083
+ if (isFunctionLike(node) || ts.isClassLike(node) || ts.isModuleDeclaration(node)) return;
1084
+ if (ts.isVariableDeclaration(node) && !ts.isCatchClause(node.parent) && !(ts.getCombinedNodeFlags(node) & ts.NodeFlags.BlockScoped)) bindingNames(node.name, into);
1085
+ ts.forEachChild(node, collect);
1086
+ };
1087
+ collect(root);
1088
+ }
1078
1089
  function functionScope(fn) {
1079
1090
  const scope = /* @__PURE__ */ new Set();
1080
1091
  if ((ts.isFunctionExpression(fn) || ts.isFunctionDeclaration(fn)) && fn.name) scope.add(fn.name.text);
1081
1092
  for (const parameter of fn.parameters) bindingNames(parameter.name, scope);
1082
- function collect(node) {
1083
- if (ts.isVariableDeclaration(node)) bindingNames(node.name, scope);
1084
- if ((ts.isFunctionDeclaration(node) || ts.isClassDeclaration(node)) && node.name) scope.add(node.name.text);
1085
- if (isFunctionLike(node)) return;
1086
- ts.forEachChild(node, collect);
1087
- }
1088
- if (fn.body) ts.forEachChild(fn.body, collect);
1089
- if (fn.body && !ts.isBlock(fn.body)) collect(fn.body);
1090
1093
  return scope;
1091
1094
  }
1095
+ function lexicalNames(statements) {
1096
+ const names = /* @__PURE__ */ new Set();
1097
+ for (const statement of statements) {
1098
+ if (ts.isVariableStatement(statement)) {
1099
+ if (statement.declarationList.flags & ts.NodeFlags.BlockScoped) for (const declaration of statement.declarationList.declarations) bindingNames(declaration.name, names);
1100
+ } else if ((ts.isFunctionDeclaration(statement) || ts.isClassDeclaration(statement)) && statement.name) names.add(statement.name.text);
1101
+ }
1102
+ return names;
1103
+ }
1104
+ function ownScope(node) {
1105
+ if (ts.isBlock(node)) return lexicalNames(node.statements);
1106
+ if (ts.isCaseBlock(node)) return lexicalNames(node.clauses.flatMap((clause) => [...clause.statements]));
1107
+ if ((ts.isForStatement(node) || ts.isForInStatement(node) || ts.isForOfStatement(node)) && node.initializer && ts.isVariableDeclarationList(node.initializer)) {
1108
+ const names = /* @__PURE__ */ new Set();
1109
+ if (node.initializer.flags & ts.NodeFlags.BlockScoped) for (const declaration of node.initializer.declarations) bindingNames(declaration.name, names);
1110
+ return names;
1111
+ }
1112
+ if (ts.isCatchClause(node) && node.variableDeclaration) {
1113
+ const names = /* @__PURE__ */ new Set();
1114
+ bindingNames(node.variableDeclaration.name, names);
1115
+ return names;
1116
+ }
1117
+ return void 0;
1118
+ }
1092
1119
  function collectRefs(root) {
1093
1120
  const refs = [];
1094
1121
  const assigned = [];
@@ -1103,13 +1130,22 @@ function collectRefs(root) {
1103
1130
  function walkNode(node, scopes, inAsync) {
1104
1131
  if (ts.isTypeNode(node)) return;
1105
1132
  if (isFunctionLike(node)) {
1106
- const nextScopes = [...scopes, functionScope(node)];
1133
+ const parameterScopes = [...scopes, functionScope(node)];
1107
1134
  const async = !!node.modifiers?.some((modifier) => modifier.kind === ts.SyntaxKind.AsyncKeyword);
1108
1135
  for (const parameter of node.parameters) {
1109
- if (!ts.isIdentifier(parameter.name)) walkNode(parameter.name, nextScopes, async);
1110
- if (parameter.initializer) walkNode(parameter.initializer, nextScopes, async);
1136
+ if (!ts.isIdentifier(parameter.name)) walkNode(parameter.name, parameterScopes, async);
1137
+ if (parameter.initializer) walkNode(parameter.initializer, parameterScopes, async);
1111
1138
  }
1112
- if (node.body) walkNode(node.body, nextScopes, async);
1139
+ if (node.body) {
1140
+ const hoisted = /* @__PURE__ */ new Set();
1141
+ hoistedVarNames(node.body, hoisted);
1142
+ walkNode(node.body, [...parameterScopes, hoisted], async);
1143
+ }
1144
+ return;
1145
+ }
1146
+ const own = ownScope(node);
1147
+ if (own) {
1148
+ ts.forEachChild(node, (child) => walkNode(child, [...scopes, own], inAsync));
1113
1149
  return;
1114
1150
  }
1115
1151
  if (ts.isAwaitExpression(node) && !inAsync) awaitOutsideAsync = true;
@@ -1233,12 +1269,14 @@ function expressionRefs(expression) {
1233
1269
  function pageScopeNames(esmSources) {
1234
1270
  const names = /* @__PURE__ */ new Set();
1235
1271
  for (const source of esmSources) {
1236
- for (const statement of parse(source).statements) {
1272
+ const sf = parse(source);
1273
+ for (const statement of sf.statements) {
1237
1274
  for (const local of importLocals(statement.getText())) names.add(local);
1238
1275
  if (ts.isImportDeclaration(statement)) continue;
1239
1276
  const target2 = ts.isExportDeclaration(statement) || ts.isExportAssignment(statement) ? void 0 : statement;
1240
1277
  if (target2) for (const name of declaredNames(target2).names) names.add(name);
1241
1278
  }
1279
+ hoistedVarNames(sf, names);
1242
1280
  }
1243
1281
  return names;
1244
1282
  }
@@ -4303,13 +4341,7 @@ function hash2(value) {
4303
4341
  return createHash2("sha256").update(value).digest("hex").slice(0, 12);
4304
4342
  }
4305
4343
  function sourceFile(source, filename) {
4306
- return ts2.createSourceFile(
4307
- filename,
4308
- source,
4309
- ts2.ScriptTarget.Latest,
4310
- true,
4311
- /\.[cm]?ts$/.test(filename) ? ts2.ScriptKind.TS : ts2.ScriptKind.TSX
4312
- );
4344
+ return ts2.createSourceFile(filename, source, ts2.ScriptTarget.Latest, true, scriptKindFor(filename));
4313
4345
  }
4314
4346
  function mergeComponentRegistry(existing, incoming) {
4315
4347
  const fingerprint = hash2(incoming);