@workos/oagen 0.19.1 → 0.19.3

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.
@@ -2345,14 +2345,75 @@ function collectFromImports(lines) {
2345
2345
  return byModule;
2346
2346
  }
2347
2347
  /**
2348
+ * Collect TypeScript imports, grouped by form. Handles single-line and
2349
+ * multi-line `{ … }` named imports. Disjoint from Python's `from X import Y`
2350
+ * syntax so this can be called in parallel with `collectFromImports`.
2351
+ */
2352
+ function collectTsImports(lines) {
2353
+ const out = {
2354
+ named: /* @__PURE__ */ new Map(),
2355
+ typeOnly: /* @__PURE__ */ new Map(),
2356
+ defaults: /* @__PURE__ */ new Map(),
2357
+ namespaces: /* @__PURE__ */ new Map(),
2358
+ sideEffects: /* @__PURE__ */ new Set()
2359
+ };
2360
+ for (let i = 0; i < lines.length; i++) {
2361
+ const trimmed = lines[i].trim();
2362
+ if (!/^import(\s|$)/.test(trimmed)) continue;
2363
+ let fullText = lines[i];
2364
+ if (fullText.includes("{") && !fullText.includes("}")) while (i + 1 < lines.length) {
2365
+ i++;
2366
+ fullText += " " + lines[i].trim();
2367
+ if (lines[i].includes("}")) break;
2368
+ }
2369
+ const normalized = fullText.replace(/\s+/g, " ").trim().replace(/;\s*$/, "");
2370
+ let m = normalized.match(/^import\s+['"]([^'"]+)['"]$/);
2371
+ if (m) {
2372
+ out.sideEffects.add(m[1]);
2373
+ continue;
2374
+ }
2375
+ m = normalized.match(/^import\s+\*\s+as\s+(\w+)\s+from\s+['"]([^'"]+)['"]$/);
2376
+ if (m) {
2377
+ out.namespaces.set(m[2], m[1]);
2378
+ continue;
2379
+ }
2380
+ m = normalized.match(/^import\s+(type\s+)?(?:(\w+)\s*,\s*)?\{\s*([^}]*)\s*\}\s+from\s+['"]([^'"]+)['"]$/);
2381
+ if (m) {
2382
+ const isTypeOnly = !!m[1];
2383
+ const defaultName = m[2];
2384
+ const namesRaw = m[3];
2385
+ const mod = m[4];
2386
+ if (defaultName) out.defaults.set(mod, defaultName);
2387
+ const names = namesRaw.split(",").map((s) => s.trim().replace(/\s+as\s+\w+$/, "")).filter(Boolean);
2388
+ const target = isTypeOnly ? out.typeOnly : out.named;
2389
+ if (!target.has(mod)) target.set(mod, /* @__PURE__ */ new Set());
2390
+ for (const n of names) target.get(mod).add(n);
2391
+ continue;
2392
+ }
2393
+ m = normalized.match(/^import\s+(?:type\s+)?(\w+)\s+from\s+['"]([^'"]+)['"]$/);
2394
+ if (m) {
2395
+ out.defaults.set(m[2], m[1]);
2396
+ continue;
2397
+ }
2398
+ }
2399
+ return out;
2400
+ }
2401
+ /**
2348
2402
  * Add imports from the existing file that are absent from the generated
2349
- * result. Handles both `import X` and `from X import Y` forms.
2403
+ * result. Handles:
2404
+ *
2405
+ * - Python: `import X` and `from X import Y`
2406
+ * - TypeScript: `import { X } from 'module'`, `import type { X } from 'module'`,
2407
+ * `import X from 'module'`, `import * as X from 'module'`, `import 'module'`
2408
+ * - PHP: `use Foo\Bar;` and `use Foo\Bar as Baz;` (namespace-qualified only)
2409
+ * - Ruby: `require '…'` and `require_relative '…'`
2410
+ *
2350
2411
  * Mutates `resultLines` in place.
2351
2412
  */
2352
2413
  function spliceExtraImports(existingLines, resultLines) {
2353
- const isSimpleImport = (l) => /^import\s+\w/.test(l);
2354
- const existingSimple = new Set(existingLines.filter(isSimpleImport).map((l) => l.trim()));
2355
- const generatedSimple = new Set(resultLines.filter(isSimpleImport).map((l) => l.trim()));
2414
+ const isPythonSimpleImport = (l) => /^import\s+\w/.test(l) && !/\sfrom\s/.test(l);
2415
+ const existingSimple = new Set(existingLines.filter(isPythonSimpleImport).map((l) => l.trim()));
2416
+ const generatedSimple = new Set(resultLines.filter(isPythonSimpleImport).map((l) => l.trim()));
2356
2417
  const extraSimple = [...existingSimple].filter((l) => !generatedSimple.has(l));
2357
2418
  const existingFrom = collectFromImports(existingLines);
2358
2419
  const generatedFrom = collectFromImports(resultLines);
@@ -2369,15 +2430,52 @@ function spliceExtraImports(existingLines, resultLines) {
2369
2430
  if (extra.length > 0) extraFromLines.push(`from ${mod} import ${extra.join(", ")}`);
2370
2431
  }
2371
2432
  }
2372
- const allExtra = [...extraSimple, ...extraFromLines];
2433
+ const existingTs = collectTsImports(existingLines);
2434
+ const generatedTs = collectTsImports(resultLines);
2435
+ const extraTsLines = [];
2436
+ for (const mod of existingTs.sideEffects) if (!generatedTs.sideEffects.has(mod)) extraTsLines.push(`import '${mod}';`);
2437
+ for (const [mod, name] of existingTs.defaults) {
2438
+ if (generatedTs.defaults.has(mod)) continue;
2439
+ extraTsLines.push(`import ${name} from '${mod}';`);
2440
+ }
2441
+ for (const [mod, name] of existingTs.namespaces) if (!generatedTs.namespaces.has(mod)) extraTsLines.push(`import * as ${name} from '${mod}';`);
2442
+ for (const [mod, existIds] of existingTs.named) {
2443
+ const genIds = generatedTs.named.get(mod) ?? /* @__PURE__ */ new Set();
2444
+ const genTypeIds = generatedTs.typeOnly.get(mod) ?? /* @__PURE__ */ new Set();
2445
+ const extra = [...existIds].filter((id) => !genIds.has(id) && !genTypeIds.has(id));
2446
+ if (extra.length > 0) extraTsLines.push(`import { ${extra.join(", ")} } from '${mod}';`);
2447
+ }
2448
+ for (const [mod, existIds] of existingTs.typeOnly) {
2449
+ const genIds = generatedTs.typeOnly.get(mod) ?? /* @__PURE__ */ new Set();
2450
+ const genNamedIds = generatedTs.named.get(mod) ?? /* @__PURE__ */ new Set();
2451
+ const extra = [...existIds].filter((id) => !genIds.has(id) && !genNamedIds.has(id));
2452
+ if (extra.length > 0) extraTsLines.push(`import type { ${extra.join(", ")} } from '${mod}';`);
2453
+ }
2454
+ const isPhpUseImport = (l) => /^use\s+[\w\\]+\\[\w\\]*(\s+as\s+\w+)?\s*;?$/.test(l);
2455
+ const existingPhpUse = new Set(existingLines.filter(isPhpUseImport).map((l) => l.trim()));
2456
+ const generatedPhpUse = new Set(resultLines.filter(isPhpUseImport).map((l) => l.trim()));
2457
+ const extraPhpUse = [...existingPhpUse].filter((l) => !generatedPhpUse.has(l));
2458
+ const isRubyRequire = (l) => /^require(_relative)?\s+['"][^'"]+['"]\s*$/.test(l);
2459
+ const existingRubyRequire = new Set(existingLines.filter(isRubyRequire).map((l) => l.trim()));
2460
+ const generatedRubyRequire = new Set(resultLines.filter(isRubyRequire).map((l) => l.trim()));
2461
+ const extraRubyRequire = [...existingRubyRequire].filter((l) => !generatedRubyRequire.has(l));
2462
+ const allExtra = [
2463
+ ...extraSimple,
2464
+ ...extraFromLines,
2465
+ ...extraTsLines,
2466
+ ...extraPhpUse,
2467
+ ...extraRubyRequire
2468
+ ];
2373
2469
  if (allExtra.length === 0) return;
2470
+ const isImportStart = (l) => /^\s*import(\s|$)/.test(l) || /^from\s+/.test(l) || /^\s*use\s+[\w\\]/.test(l) || /^\s*require(_relative)?\s+['"]/.test(l);
2374
2471
  let lastImportIdx = -1;
2375
- for (let i = 0; i < resultLines.length; i++) if (isSimpleImport(resultLines[i]) || /^from\s+/.test(resultLines[i])) {
2472
+ for (let i = 0; i < resultLines.length; i++) {
2473
+ if (!isImportStart(resultLines[i])) continue;
2376
2474
  lastImportIdx = i;
2377
- if (resultLines[i].includes("(") && !resultLines[i].includes(")")) while (i + 1 < resultLines.length) {
2475
+ if ((resultLines[i].match(/[({]/g) ?? []).length > (resultLines[i].match(/[)}]/g) ?? []).length) while (i + 1 < resultLines.length) {
2378
2476
  i++;
2379
2477
  lastImportIdx = i;
2380
- if (resultLines[i].includes(")")) break;
2478
+ if ((resultLines[i].match(/[)}]/g) ?? []).length > 0) break;
2381
2479
  }
2382
2480
  }
2383
2481
  if (lastImportIdx >= 0) resultLines.splice(lastImportIdx + 1, 0, ...allExtra);
@@ -3377,4 +3475,4 @@ function summarize(changes) {
3377
3475
  //#endregion
3378
3476
  export { MANIFEST_FILENAME as a, treeShakeFiles as c, collectReferencedNames as d, generateAllFiles as f, resolveOperations as h, generate as i, applyFileHeaders as l, deriveMethodName as m, getEmitter as n, integrateGeneratedFiles as o, generateFiles as p, registerEmitter as r, mapFilesForTargetIntegration as s, diffSpecs as t, buildEmitterContext as u };
3379
3477
 
3380
- //# sourceMappingURL=diff-BcQbWkj4.mjs.map
3478
+ //# sourceMappingURL=diff-DQ9greXC.mjs.map