@sdk-it/cli 0.46.2 → 0.46.4

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/index.js CHANGED
@@ -22,6 +22,8 @@ async function analyzeProject(tsconfig, config) {
22
22
  }
23
23
  const { paths, components } = await analyze(tsconfig, {
24
24
  responseAnalyzer: honoResponseAnalyzer,
25
+ securitySchemes: config.securitySchemes,
26
+ middlewareSecurity: config.middlewareSecurity,
25
27
  ...prisma ? {
26
28
  imports: prisma.imports,
27
29
  typesMap: {
@@ -224,9 +226,16 @@ ${ts3.formatDiagnosticsWithColorAndContext(
224
226
  }
225
227
  async function synchronizeGeneratedManifest(output, packageName) {
226
228
  const manifestPath = join2(output, "package.json");
227
- const manifest = JSON.parse(
228
- await readFile2(manifestPath, "utf8")
229
+ const manifest = generatedPackageManifest(
230
+ packageName,
231
+ JSON.parse(
232
+ await readFile2(manifestPath, "utf8")
233
+ )
229
234
  );
235
+ await writeFile(manifestPath, `${JSON.stringify(manifest, null, 2)}
236
+ `);
237
+ }
238
+ function generatedPackageManifest(packageName, manifest) {
230
239
  Object.assign(manifest, {
231
240
  name: packageName,
232
241
  version: "0.0.1",
@@ -250,8 +259,7 @@ async function synchronizeGeneratedManifest(output, packageName) {
250
259
  "fast-content-type-parse": "^3.0.0",
251
260
  zod: "^4.3.0"
252
261
  };
253
- await writeFile(manifestPath, `${JSON.stringify(manifest, null, 2)}
254
- `);
262
+ return manifest;
255
263
  }
256
264
 
257
265
  // packages/cli/src/lib/project/output.ts
@@ -272,8 +280,8 @@ async function writeProjectClient(openapi, config) {
272
280
  }
273
281
 
274
282
  // packages/cli/src/lib/project/config.ts
275
- import { access as access2, readFile as readFile3, stat, writeFile as writeFile3 } from "node:fs/promises";
276
- import { dirname, join as join4, relative as relative2, resolve as resolve2 } from "node:path";
283
+ import { access as access2, mkdir, readFile as readFile3, stat, writeFile as writeFile3 } from "node:fs/promises";
284
+ import { basename, dirname, join as join4, relative as relative2, resolve as resolve2 } from "node:path";
277
285
  import { pathToFileURL } from "node:url";
278
286
  function defineConfig(config) {
279
287
  return config;
@@ -292,21 +300,41 @@ async function loadProjectConfig(options = {}) {
292
300
  return {
293
301
  ...config,
294
302
  tsconfig: resolve2(directory, config.tsconfig),
295
- output: resolve2(directory, config.output ?? ".sdk-it")
303
+ output: resolve2(directory, config.output ?? ".sdk-it"),
304
+ ...config.middlewareSecurity ? {
305
+ middlewareSecurity: config.middlewareSecurity.map((rule) => ({
306
+ ...rule,
307
+ middleware: {
308
+ ...rule.middleware,
309
+ from: resolve2(directory, rule.middleware.from)
310
+ }
311
+ }))
312
+ } : {}
296
313
  };
297
314
  }
298
315
  async function initializeProject(options) {
299
316
  const cwd = resolve2(options.cwd ?? process.cwd());
300
- const configPath = join4(cwd, "sdk-it.config.ts");
301
317
  const tsconfigPath = resolve2(cwd, options.tsconfig);
302
318
  await validateTsconfig(tsconfigPath);
303
- const tsconfig = relative2(cwd, tsconfigPath).replaceAll("\\", "/");
319
+ const projectDirectory = dirname(tsconfigPath);
320
+ const configPath = join4(projectDirectory, "sdk-it.config.ts");
321
+ const { directory: workspaceDirectory, manifest } = await findWorkspace(projectDirectory);
322
+ const packageName = generatedPackageName(
323
+ manifest.name,
324
+ projectDirectory,
325
+ workspaceDirectory
326
+ );
327
+ const tsconfig = relative2(projectDirectory, tsconfigPath).replaceAll(
328
+ "\\",
329
+ "/"
330
+ );
304
331
  const relativeTsconfig = tsconfig.startsWith(".") ? tsconfig : `./${tsconfig}`;
305
332
  const configSource = `import { defineConfig } from '@sdk-it/cli';
306
333
 
307
334
  export default defineConfig({
308
335
  tsconfig: '${relativeTsconfig}',
309
- });
336
+ ${projectDirectory === workspaceDirectory ? "" : ` packageName: '${packageName}',
337
+ `}});
310
338
  `;
311
339
  const existingConfig = await readOptionalFile2(configPath);
312
340
  if (existingConfig !== void 0 && existingConfig !== configSource) {
@@ -314,43 +342,96 @@ export default defineConfig({
314
342
  `${configPath} already exists with different settings. Review it before replacing the file.`
315
343
  );
316
344
  }
317
- const packagePath = join4(cwd, "package.json");
318
- const manifest = JSON.parse(
319
- await readFile3(packagePath, "utf8")
345
+ const output = join4(projectDirectory, ".sdk-it");
346
+ const manifestPath = join4(output, "package.json");
347
+ const existingManifest = await readOptionalFile2(manifestPath);
348
+ const generatedManifest = generatedPackageManifest(
349
+ packageName,
350
+ existingManifest ? JSON.parse(existingManifest) : {}
351
+ );
352
+ const generatedManifestSource = `${JSON.stringify(generatedManifest, null, 2)}
353
+ `;
354
+ const workspacePath = relative2(workspaceDirectory, output).replaceAll(
355
+ "\\",
356
+ "/"
320
357
  );
321
- const manifestChanged = addGeneratedWorkspace(manifest);
322
- const gitignorePath = join4(cwd, ".gitignore");
358
+ const manifestChanged = addGeneratedWorkspace(manifest, workspacePath);
359
+ const gitignorePath = join4(workspaceDirectory, ".gitignore");
323
360
  const gitignore = await readOptionalFile2(gitignorePath) ?? "";
324
- if (!ignoresGeneratedWorkspace(gitignore)) {
325
- const prefix = gitignore.length > 0 && !gitignore.endsWith("\n") ? "\n" : "";
326
- await writeFile3(gitignorePath, `${gitignore}${prefix}.sdk-it/
327
- `);
361
+ const updatedGitignore = withGeneratedWorkspaceIgnore(
362
+ gitignore,
363
+ workspacePath
364
+ );
365
+ if (updatedGitignore !== gitignore) {
366
+ await writeFile3(gitignorePath, updatedGitignore);
328
367
  }
329
368
  if (manifestChanged) {
330
- await writeFile3(packagePath, `${JSON.stringify(manifest, null, 2)}
331
- `);
369
+ await writeFile3(
370
+ join4(workspaceDirectory, "package.json"),
371
+ `${JSON.stringify(manifest, null, 2)}
372
+ `
373
+ );
332
374
  }
333
375
  if (existingConfig === void 0) {
334
376
  await writeFile3(configPath, configSource);
335
377
  }
378
+ if (existingManifest !== generatedManifestSource) {
379
+ await mkdir(output, { recursive: true });
380
+ await writeFile3(manifestPath, generatedManifestSource);
381
+ }
336
382
  }
337
- function addGeneratedWorkspace(manifest) {
383
+ function addGeneratedWorkspace(manifest, workspace) {
338
384
  const workspaces = manifest.workspaces;
339
385
  if (Array.isArray(workspaces)) {
340
- if (workspaces.includes(".sdk-it")) return false;
341
- workspaces.push(".sdk-it");
386
+ if (workspaces.includes(workspace)) return false;
387
+ workspaces.push(workspace);
342
388
  return true;
343
389
  }
344
390
  if (workspaces && Array.isArray(workspaces.packages)) {
345
- if (workspaces.packages.includes(".sdk-it")) return false;
346
- workspaces.packages.push(".sdk-it");
391
+ if (workspaces.packages.includes(workspace)) return false;
392
+ workspaces.packages.push(workspace);
347
393
  return true;
348
394
  }
349
- manifest.workspaces = [".sdk-it"];
395
+ manifest.workspaces = [workspace];
350
396
  return true;
351
397
  }
352
- function ignoresGeneratedWorkspace(gitignore) {
353
- return gitignore.split(/\r?\n/).some((line) => line.trim() === ".sdk-it/" || line.trim() === ".sdk-it");
398
+ function withGeneratedWorkspaceIgnore(gitignore, workspace) {
399
+ const patterns = [
400
+ `!${workspace}/`,
401
+ `${workspace}/*`,
402
+ `!${workspace}/package.json`
403
+ ];
404
+ const lines = gitignore.split(/\r?\n/).filter((line) => !patterns.includes(line.trim()));
405
+ while (lines.at(-1) === "") lines.pop();
406
+ return `${lines.length ? `${lines.join("\n")}
407
+ ` : ""}${patterns.join("\n")}
408
+ `;
409
+ }
410
+ async function findWorkspace(start) {
411
+ let directory = start;
412
+ let nearest;
413
+ while (true) {
414
+ const source = await readOptionalFile2(join4(directory, "package.json"));
415
+ if (source) {
416
+ const candidate = {
417
+ directory,
418
+ manifest: JSON.parse(source)
419
+ };
420
+ nearest ??= candidate;
421
+ if (candidate.manifest.workspaces !== void 0) return candidate;
422
+ }
423
+ const parent = dirname(directory);
424
+ if (parent === directory) break;
425
+ directory = parent;
426
+ }
427
+ if (nearest) return nearest;
428
+ throw new Error(`Could not find a package.json from ${start}.`);
429
+ }
430
+ function generatedPackageName(workspaceName, projectDirectory, workspaceDirectory) {
431
+ if (projectDirectory === workspaceDirectory) return "@sdk-it/client";
432
+ const project = basename(projectDirectory).toLowerCase().replace(/[^a-z0-9._-]+/g, "-");
433
+ const scope = workspaceName?.match(/^@([^/]+)\//)?.[1];
434
+ return scope ? `@${scope}/${project}-client` : `${project}-client`;
354
435
  }
355
436
  async function validateTsconfig(path) {
356
437
  try {
package/dist/index.js.map CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/lib/project.ts", "../src/lib/project/analysis.ts", "../src/lib/project/output.ts", "../src/lib/project/cache.ts", "../src/lib/project/compiler.ts", "../src/lib/project/config.ts"],
4
- "sourcesContent": ["import { resolve } from 'node:path';\n\nimport { analyzeProject } from './project/analysis.ts';\nimport type { ProjectConfig } from './project/config.ts';\nimport { writeProjectClient } from './project/output.ts';\n\nexport {\n defineConfig,\n initializeProject,\n loadProjectConfig,\n} from './project/config.ts';\nexport type {\n InitializeProjectOptions,\n LoadProjectConfigOptions,\n ProjectConfig,\n ResolvedProjectConfig,\n} from './project/config.ts';\n\nexport async function generateProject(config: ProjectConfig): Promise<void> {\n const tsconfig = resolve(config.tsconfig);\n const openapi = await analyzeProject(tsconfig, config);\n await writeProjectClient(openapi, config);\n}\n", "import { createRequire } from 'node:module';\nimport ts from 'typescript';\n\nimport { type InjectImport, defaultTypesMap, getProgram } from '@sdk-it/core';\nimport { analyze } from '@sdk-it/generic';\nimport { responseAnalyzer as honoResponseAnalyzer } from '@sdk-it/hono';\n\nimport type { ProjectConfig } from './config.ts';\n\nexport async function analyzeProject(tsconfig: string, config: ProjectConfig) {\n const framework = resolveFramework(tsconfig, config.framework);\n if (framework === 'auto') {\n throw new Error(\n `Could not detect a supported framework from ${config.tsconfig}. Set framework to 'hono' to select it explicitly.`,\n );\n }\n\n const prisma = config.preset === 'none' ? undefined : detectPrisma(tsconfig);\n if (config.preset === 'prisma' && !prisma) {\n throw new Error(\n `Prisma preset was requested, but no Prisma client import was found in ${tsconfig}. Run prisma generate or set preset to 'none'.`,\n );\n }\n\n const { paths, components } = await analyze(tsconfig, {\n responseAnalyzer: honoResponseAnalyzer,\n ...(prisma\n ? {\n imports: prisma.imports,\n typesMap: {\n ...defaultTypesMap,\n Decimal: 'string',\n },\n }\n : {}),\n });\n\n return {\n openapi: '3.1.0' as const,\n info: {\n title: 'API',\n version: '0.0.0',\n },\n paths,\n components,\n };\n}\n\nfunction resolveFramework(\n tsconfig: string,\n configured: ProjectConfig['framework'],\n): 'hono' | 'auto' {\n return configured === undefined || configured === 'auto'\n ? detectFramework(tsconfig)\n : configured;\n}\n\nfunction detectFramework(tsconfig: string): 'hono' | 'auto' {\n const program = getProgram(tsconfig);\n for (const sourceFile of program.getSourceFiles()) {\n if (sourceFile.isDeclarationFile) continue;\n for (const statement of sourceFile.statements) {\n if (\n ts.isImportDeclaration(statement) &&\n ts.isStringLiteral(statement.moduleSpecifier) &&\n (statement.moduleSpecifier.text === 'hono' ||\n statement.moduleSpecifier.text.startsWith('@sdk-it/hono'))\n ) {\n return 'hono';\n }\n }\n }\n return 'auto';\n}\n\nfunction detectPrisma(\n tsconfig: string,\n): { imports: InjectImport[] } | undefined {\n const program = getProgram(tsconfig);\n const imports: InjectImport[] = [];\n const reportedModules = new Set<string>();\n for (const sourceFile of program.getSourceFiles()) {\n if (sourceFile.isDeclarationFile) continue;\n for (const statement of sourceFile.statements) {\n const prismaImport = getPrismaImport(statement);\n if (!prismaImport) continue;\n const resolvedModule = ts.resolveModuleName(\n prismaImport.moduleSpecifier,\n sourceFile.fileName,\n program.getCompilerOptions(),\n ts.sys,\n );\n if (!resolvedModule.resolvedModule) continue;\n\n let runtimeModule: string;\n try {\n runtimeModule = createRequire(sourceFile.fileName).resolve(\n prismaImport.moduleSpecifier,\n );\n } catch {\n continue;\n }\n\n if (!reportedModules.has(runtimeModule)) {\n console.log(`SDKIT: detected Prisma from ${runtimeModule}`);\n reportedModules.add(runtimeModule);\n }\n for (const { imported, local } of prismaImport.bindings) {\n if (\n !imports.some(\n (item) => item.import === local && item.from === runtimeModule,\n )\n ) {\n imports.push({\n import: local,\n from: runtimeModule,\n property: imported,\n });\n }\n }\n }\n }\n return imports.length > 0 ? { imports } : undefined;\n}\n\nfunction getPrismaImport(statement: ts.Statement):\n | {\n moduleSpecifier: string;\n bindings: Array<{ imported: string; local: string }>;\n }\n | undefined {\n if (\n !ts.isImportDeclaration(statement) ||\n !ts.isStringLiteral(statement.moduleSpecifier) ||\n !statement.importClause?.namedBindings ||\n !ts.isNamedImports(statement.importClause.namedBindings)\n ) {\n return undefined;\n }\n const bindings = statement.importClause.namedBindings.elements\n .map((element) => ({\n imported: element.propertyName?.text ?? element.name.text,\n local: element.name.text,\n }))\n .filter(({ imported }) => imported === 'Prisma' || imported === '$Enums');\n return bindings.length > 0\n ? { moduleSpecifier: statement.moduleSpecifier.text, bindings }\n : undefined;\n}\n", "import { writeFile } from 'node:fs/promises';\nimport { join, resolve } from 'node:path';\n\nimport { generate } from '@sdk-it/typescript';\n\nimport { hashProject, isCurrentGeneratedPackage } from './cache.ts';\nimport { compileGeneratedPackage } from './compiler.ts';\nimport type { ProjectConfig } from './config.ts';\n\ntype ProjectOpenApi = Parameters<typeof generate>[0];\n\nexport async function writeProjectClient(\n openapi: ProjectOpenApi,\n config: ProjectConfig,\n): Promise<void> {\n const output = resolve(config.output ?? '.sdk-it');\n const packageName = config.packageName ?? '@sdk-it/client';\n const hash = hashProject(openapi, packageName);\n if (await isCurrentGeneratedPackage(output, hash)) return;\n\n await generate(openapi, {\n output,\n mode: 'full',\n name: 'Client',\n packageName,\n readme: false,\n });\n await compileGeneratedPackage(output, packageName);\n await writeFile(join(output, '.project-hash'), hash);\n}\n", "import { createHash } from 'node:crypto';\nimport { access, readFile, readdir } from 'node:fs/promises';\nimport { createRequire } from 'node:module';\nimport { join, relative } from 'node:path';\nimport ts from 'typescript';\n\nimport type { generate } from '@sdk-it/typescript';\n\nconst require = createRequire(import.meta.url);\nconst projectGeneratorVersions = {\n cli: require('@sdk-it/cli/package.json').version,\n compiler: ts.version,\n typescript: require('@sdk-it/typescript/package.json').version,\n};\n\ntype ProjectOpenApi = Parameters<typeof generate>[0];\n\nexport function hashProject(\n openapi: ProjectOpenApi,\n packageName: string,\n): string {\n return createHash('sha256')\n .update(JSON.stringify({ openapi, packageName, projectGeneratorVersions }))\n .digest('hex');\n}\n\nexport async function isCurrentGeneratedPackage(\n output: string,\n hash: string,\n): Promise<boolean> {\n return (\n (await readOptionalFile(join(output, '.project-hash'))) === hash &&\n (await generatedPackageExists(output))\n );\n}\n\nasync function generatedPackageExists(output: string): Promise<boolean> {\n try {\n const sourceRoot = join(output, 'src');\n const sources = await findSourceFiles(sourceRoot);\n if (!sources.includes(join(sourceRoot, 'index.ts'))) return false;\n\n await Promise.all([\n access(join(output, 'package.json')),\n ...sources.flatMap((source) =>\n expectedCompiledFiles(output, sourceRoot, source).map((file) =>\n access(file),\n ),\n ),\n ]);\n return true;\n } catch {\n return false;\n }\n}\n\nfunction expectedCompiledFiles(\n output: string,\n sourceRoot: string,\n source: string,\n): string[] {\n const compiled = relative(sourceRoot, source).slice(0, -3);\n return [\n join(output, 'dist', `${compiled}.js`),\n join(output, 'dist', `${compiled}.d.ts`),\n ];\n}\n\nasync function findSourceFiles(directory: string): Promise<string[]> {\n const entries = await readdir(directory, { withFileTypes: true });\n const files = await Promise.all(\n entries.map(async (entry) => {\n const path = join(directory, entry.name);\n if (entry.isDirectory()) return findSourceFiles(path);\n return entry.isFile() && path.endsWith('.ts') && !path.endsWith('.d.ts')\n ? [path]\n : [];\n }),\n );\n return files.flat();\n}\n\nasync function readOptionalFile(path: string): Promise<string | undefined> {\n try {\n return await readFile(path, 'utf8');\n } catch (error) {\n if (error instanceof Error && 'code' in error && error.code === 'ENOENT') {\n return undefined;\n }\n throw error;\n }\n}\n", "import { readFile, writeFile } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport ts from 'typescript';\n\ninterface GeneratedPackageManifest {\n name?: string;\n version?: string;\n type?: string;\n main?: string;\n module?: string;\n types?: string;\n publishConfig?: Record<string, unknown>;\n exports?: Record<string, unknown>;\n dependencies?: Record<string, string>;\n}\n\nexport async function compileGeneratedPackage(\n output: string,\n packageName: string,\n): Promise<void> {\n const source = join(output, 'src');\n const program = ts.createProgram({\n rootNames: ts.sys.readDirectory(source, ['.ts']),\n options: {\n allowSyntheticDefaultImports: true,\n declaration: true,\n module: ts.ModuleKind.ESNext,\n moduleResolution: ts.ModuleResolutionKind.Bundler,\n noEmitOnError: true,\n outDir: join(output, 'dist'),\n rewriteRelativeImportExtensions: true,\n rootDir: source,\n skipLibCheck: true,\n target: ts.ScriptTarget.ESNext,\n verbatimModuleSyntax: true,\n },\n });\n const result = program.emit();\n const diagnostics = [\n ...ts.getPreEmitDiagnostics(program),\n ...result.diagnostics,\n ].filter((diagnostic) => diagnostic.category === ts.DiagnosticCategory.Error);\n if (result.emitSkipped || diagnostics.length > 0) {\n throw new Error(formatCompilationError(output, diagnostics));\n }\n\n await synchronizeGeneratedManifest(output, packageName);\n}\n\nfunction formatCompilationError(\n output: string,\n diagnostics: readonly ts.Diagnostic[],\n): string {\n return `Failed to compile generated client:\\n${ts.formatDiagnosticsWithColorAndContext(\n diagnostics,\n {\n getCanonicalFileName: (fileName) => fileName,\n getCurrentDirectory: () => output,\n getNewLine: () => '\\n',\n },\n )}`;\n}\n\nasync function synchronizeGeneratedManifest(\n output: string,\n packageName: string,\n): Promise<void> {\n const manifestPath = join(output, 'package.json');\n const manifest = JSON.parse(\n await readFile(manifestPath, 'utf8'),\n ) as GeneratedPackageManifest;\n Object.assign(manifest, {\n name: packageName,\n version: '0.0.1',\n type: 'module',\n main: './dist/index.js',\n module: './dist/index.js',\n types: './dist/index.d.ts',\n });\n manifest.publishConfig = { ...manifest.publishConfig, access: 'public' };\n manifest.exports = {\n ...manifest.exports,\n './package.json': './package.json',\n '.': {\n types: './dist/index.d.ts',\n import: './dist/index.js',\n default: './dist/index.js',\n },\n };\n manifest.dependencies = {\n ...manifest.dependencies,\n 'fast-content-type-parse': '^3.0.0',\n zod: '^4.3.0',\n };\n await writeFile(manifestPath, `${JSON.stringify(manifest, null, 2)}\\n`);\n}\n", "import { access, readFile, stat, writeFile } from 'node:fs/promises';\nimport { dirname, join, relative, resolve } from 'node:path';\nimport { pathToFileURL } from 'node:url';\n\nexport interface ProjectConfig {\n tsconfig: string;\n framework?: 'auto' | 'hono';\n preset?: 'auto' | 'prisma' | 'none';\n output?: string;\n packageName?: string;\n}\n\nexport interface ResolvedProjectConfig extends ProjectConfig {\n output: string;\n}\n\nexport interface LoadProjectConfigOptions {\n cwd?: string;\n config?: string;\n}\n\nexport interface InitializeProjectOptions {\n cwd?: string;\n tsconfig: string;\n}\n\ninterface ProjectPackageManifest {\n workspaces?: string[] | { packages?: string[]; [key: string]: unknown };\n [key: string]: unknown;\n}\n\nexport function defineConfig<const Config extends ProjectConfig>(\n config: Config,\n): Config {\n return config;\n}\n\nexport async function loadProjectConfig(\n options: LoadProjectConfigOptions = {},\n): Promise<ResolvedProjectConfig> {\n const cwd = resolve(options.cwd ?? process.cwd());\n const configPath = options.config\n ? resolve(cwd, options.config)\n : await findProjectConfig(cwd);\n const loaded = await import(pathToFileURL(configPath).href);\n const config = loaded.default as ProjectConfig | undefined;\n if (!config || typeof config.tsconfig !== 'string') {\n throw new Error(\n `Expected ${configPath} to default export an SDK-IT config with a tsconfig path.`,\n );\n }\n\n const directory = dirname(configPath);\n return {\n ...config,\n tsconfig: resolve(directory, config.tsconfig),\n output: resolve(directory, config.output ?? '.sdk-it'),\n };\n}\n\nexport async function initializeProject(\n options: InitializeProjectOptions,\n): Promise<void> {\n const cwd = resolve(options.cwd ?? process.cwd());\n const configPath = join(cwd, 'sdk-it.config.ts');\n const tsconfigPath = resolve(cwd, options.tsconfig);\n await validateTsconfig(tsconfigPath);\n const tsconfig = relative(cwd, tsconfigPath).replaceAll('\\\\', '/');\n const relativeTsconfig = tsconfig.startsWith('.')\n ? tsconfig\n : `./${tsconfig}`;\n const configSource = `import { defineConfig } from '@sdk-it/cli';\n\nexport default defineConfig({\n tsconfig: '${relativeTsconfig}',\n});\n`;\n\n const existingConfig = await readOptionalFile(configPath);\n if (existingConfig !== undefined && existingConfig !== configSource) {\n throw new Error(\n `${configPath} already exists with different settings. Review it before replacing the file.`,\n );\n }\n\n const packagePath = join(cwd, 'package.json');\n const manifest = JSON.parse(\n await readFile(packagePath, 'utf8'),\n ) as ProjectPackageManifest;\n const manifestChanged = addGeneratedWorkspace(manifest);\n\n const gitignorePath = join(cwd, '.gitignore');\n const gitignore = (await readOptionalFile(gitignorePath)) ?? '';\n if (!ignoresGeneratedWorkspace(gitignore)) {\n const prefix =\n gitignore.length > 0 && !gitignore.endsWith('\\n') ? '\\n' : '';\n await writeFile(gitignorePath, `${gitignore}${prefix}.sdk-it/\\n`);\n }\n\n if (manifestChanged) {\n await writeFile(packagePath, `${JSON.stringify(manifest, null, 2)}\\n`);\n }\n\n if (existingConfig === undefined) {\n await writeFile(configPath, configSource);\n }\n}\n\nfunction addGeneratedWorkspace(manifest: ProjectPackageManifest): boolean {\n const workspaces = manifest.workspaces;\n if (Array.isArray(workspaces)) {\n if (workspaces.includes('.sdk-it')) return false;\n workspaces.push('.sdk-it');\n return true;\n }\n if (workspaces && Array.isArray(workspaces.packages)) {\n if (workspaces.packages.includes('.sdk-it')) return false;\n workspaces.packages.push('.sdk-it');\n return true;\n }\n manifest.workspaces = ['.sdk-it'];\n return true;\n}\n\nfunction ignoresGeneratedWorkspace(gitignore: string): boolean {\n return gitignore\n .split(/\\r?\\n/)\n .some((line) => line.trim() === '.sdk-it/' || line.trim() === '.sdk-it');\n}\n\nasync function validateTsconfig(path: string): Promise<void> {\n try {\n if ((await stat(path)).isFile()) return;\n } catch (error) {\n if (!(\n error instanceof Error &&\n 'code' in error &&\n error.code === 'ENOENT'\n )) {\n throw error;\n }\n }\n throw new Error(`Could not find a TypeScript project at ${path}.`);\n}\n\nasync function findProjectConfig(start: string): Promise<string> {\n let directory = start;\n while (true) {\n const candidate = join(directory, 'sdk-it.config.ts');\n try {\n await access(candidate);\n return candidate;\n } catch {\n const parent = dirname(directory);\n if (parent === directory) {\n throw new Error(\n `Could not find sdk-it.config.ts from ${start} or any parent directory.`,\n );\n }\n directory = parent;\n }\n }\n}\n\nasync function readOptionalFile(path: string): Promise<string | undefined> {\n try {\n return await readFile(path, 'utf8');\n } catch (error) {\n if (error instanceof Error && 'code' in error && error.code === 'ENOENT') {\n return undefined;\n }\n throw error;\n }\n}\n"],
5
- "mappings": "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",
6
- "names": ["resolve", "writeFile", "join", "createRequire", "ts", "require", "readFile", "join", "ts", "writeFile", "join", "access", "readFile", "writeFile", "join", "relative", "resolve", "readOptionalFile", "resolve"]
4
+ "sourcesContent": ["import { resolve } from 'node:path';\n\nimport { analyzeProject } from './project/analysis.ts';\nimport type { ProjectConfig } from './project/config.ts';\nimport { writeProjectClient } from './project/output.ts';\n\nexport {\n defineConfig,\n initializeProject,\n loadProjectConfig,\n} from './project/config.ts';\nexport type {\n InitializeProjectOptions,\n LoadProjectConfigOptions,\n ProjectConfig,\n ResolvedProjectConfig,\n} from './project/config.ts';\n\nexport async function generateProject(config: ProjectConfig): Promise<void> {\n const tsconfig = resolve(config.tsconfig);\n const openapi = await analyzeProject(tsconfig, config);\n await writeProjectClient(openapi, config);\n}\n", "import { createRequire } from 'node:module';\nimport ts from 'typescript';\n\nimport { type InjectImport, defaultTypesMap, getProgram } from '@sdk-it/core';\nimport { analyze } from '@sdk-it/generic';\nimport { responseAnalyzer as honoResponseAnalyzer } from '@sdk-it/hono';\n\nimport type { ProjectConfig } from './config.ts';\n\nexport async function analyzeProject(tsconfig: string, config: ProjectConfig) {\n const framework = resolveFramework(tsconfig, config.framework);\n if (framework === 'auto') {\n throw new Error(\n `Could not detect a supported framework from ${config.tsconfig}. Set framework to 'hono' to select it explicitly.`,\n );\n }\n\n const prisma = config.preset === 'none' ? undefined : detectPrisma(tsconfig);\n if (config.preset === 'prisma' && !prisma) {\n throw new Error(\n `Prisma preset was requested, but no Prisma client import was found in ${tsconfig}. Run prisma generate or set preset to 'none'.`,\n );\n }\n\n const { paths, components } = await analyze(tsconfig, {\n responseAnalyzer: honoResponseAnalyzer,\n securitySchemes: config.securitySchemes,\n middlewareSecurity: config.middlewareSecurity,\n ...(prisma\n ? {\n imports: prisma.imports,\n typesMap: {\n ...defaultTypesMap,\n Decimal: 'string',\n },\n }\n : {}),\n });\n\n return {\n openapi: '3.1.0' as const,\n info: {\n title: 'API',\n version: '0.0.0',\n },\n paths,\n components,\n };\n}\n\nfunction resolveFramework(\n tsconfig: string,\n configured: ProjectConfig['framework'],\n): 'hono' | 'auto' {\n return configured === undefined || configured === 'auto'\n ? detectFramework(tsconfig)\n : configured;\n}\n\nfunction detectFramework(tsconfig: string): 'hono' | 'auto' {\n const program = getProgram(tsconfig);\n for (const sourceFile of program.getSourceFiles()) {\n if (sourceFile.isDeclarationFile) continue;\n for (const statement of sourceFile.statements) {\n if (\n ts.isImportDeclaration(statement) &&\n ts.isStringLiteral(statement.moduleSpecifier) &&\n (statement.moduleSpecifier.text === 'hono' ||\n statement.moduleSpecifier.text.startsWith('@sdk-it/hono'))\n ) {\n return 'hono';\n }\n }\n }\n return 'auto';\n}\n\nfunction detectPrisma(\n tsconfig: string,\n): { imports: InjectImport[] } | undefined {\n const program = getProgram(tsconfig);\n const imports: InjectImport[] = [];\n const reportedModules = new Set<string>();\n for (const sourceFile of program.getSourceFiles()) {\n if (sourceFile.isDeclarationFile) continue;\n for (const statement of sourceFile.statements) {\n const prismaImport = getPrismaImport(statement);\n if (!prismaImport) continue;\n const resolvedModule = ts.resolveModuleName(\n prismaImport.moduleSpecifier,\n sourceFile.fileName,\n program.getCompilerOptions(),\n ts.sys,\n );\n if (!resolvedModule.resolvedModule) continue;\n\n let runtimeModule: string;\n try {\n runtimeModule = createRequire(sourceFile.fileName).resolve(\n prismaImport.moduleSpecifier,\n );\n } catch {\n continue;\n }\n\n if (!reportedModules.has(runtimeModule)) {\n console.log(`SDKIT: detected Prisma from ${runtimeModule}`);\n reportedModules.add(runtimeModule);\n }\n for (const { imported, local } of prismaImport.bindings) {\n if (\n !imports.some(\n (item) => item.import === local && item.from === runtimeModule,\n )\n ) {\n imports.push({\n import: local,\n from: runtimeModule,\n property: imported,\n });\n }\n }\n }\n }\n return imports.length > 0 ? { imports } : undefined;\n}\n\nfunction getPrismaImport(statement: ts.Statement):\n | {\n moduleSpecifier: string;\n bindings: Array<{ imported: string; local: string }>;\n }\n | undefined {\n if (\n !ts.isImportDeclaration(statement) ||\n !ts.isStringLiteral(statement.moduleSpecifier) ||\n !statement.importClause?.namedBindings ||\n !ts.isNamedImports(statement.importClause.namedBindings)\n ) {\n return undefined;\n }\n const bindings = statement.importClause.namedBindings.elements\n .map((element) => ({\n imported: element.propertyName?.text ?? element.name.text,\n local: element.name.text,\n }))\n .filter(({ imported }) => imported === 'Prisma' || imported === '$Enums');\n return bindings.length > 0\n ? { moduleSpecifier: statement.moduleSpecifier.text, bindings }\n : undefined;\n}\n", "import { writeFile } from 'node:fs/promises';\nimport { join, resolve } from 'node:path';\n\nimport { generate } from '@sdk-it/typescript';\n\nimport { hashProject, isCurrentGeneratedPackage } from './cache.ts';\nimport { compileGeneratedPackage } from './compiler.ts';\nimport type { ProjectConfig } from './config.ts';\n\ntype ProjectOpenApi = Parameters<typeof generate>[0];\n\nexport async function writeProjectClient(\n openapi: ProjectOpenApi,\n config: ProjectConfig,\n): Promise<void> {\n const output = resolve(config.output ?? '.sdk-it');\n const packageName = config.packageName ?? '@sdk-it/client';\n const hash = hashProject(openapi, packageName);\n if (await isCurrentGeneratedPackage(output, hash)) return;\n\n await generate(openapi, {\n output,\n mode: 'full',\n name: 'Client',\n packageName,\n readme: false,\n });\n await compileGeneratedPackage(output, packageName);\n await writeFile(join(output, '.project-hash'), hash);\n}\n", "import { createHash } from 'node:crypto';\nimport { access, readFile, readdir } from 'node:fs/promises';\nimport { createRequire } from 'node:module';\nimport { join, relative } from 'node:path';\nimport ts from 'typescript';\n\nimport type { generate } from '@sdk-it/typescript';\n\nconst require = createRequire(import.meta.url);\nconst projectGeneratorVersions = {\n cli: require('@sdk-it/cli/package.json').version,\n compiler: ts.version,\n typescript: require('@sdk-it/typescript/package.json').version,\n};\n\ntype ProjectOpenApi = Parameters<typeof generate>[0];\n\nexport function hashProject(\n openapi: ProjectOpenApi,\n packageName: string,\n): string {\n return createHash('sha256')\n .update(JSON.stringify({ openapi, packageName, projectGeneratorVersions }))\n .digest('hex');\n}\n\nexport async function isCurrentGeneratedPackage(\n output: string,\n hash: string,\n): Promise<boolean> {\n return (\n (await readOptionalFile(join(output, '.project-hash'))) === hash &&\n (await generatedPackageExists(output))\n );\n}\n\nasync function generatedPackageExists(output: string): Promise<boolean> {\n try {\n const sourceRoot = join(output, 'src');\n const sources = await findSourceFiles(sourceRoot);\n if (!sources.includes(join(sourceRoot, 'index.ts'))) return false;\n\n await Promise.all([\n access(join(output, 'package.json')),\n ...sources.flatMap((source) =>\n expectedCompiledFiles(output, sourceRoot, source).map((file) =>\n access(file),\n ),\n ),\n ]);\n return true;\n } catch {\n return false;\n }\n}\n\nfunction expectedCompiledFiles(\n output: string,\n sourceRoot: string,\n source: string,\n): string[] {\n const compiled = relative(sourceRoot, source).slice(0, -3);\n return [\n join(output, 'dist', `${compiled}.js`),\n join(output, 'dist', `${compiled}.d.ts`),\n ];\n}\n\nasync function findSourceFiles(directory: string): Promise<string[]> {\n const entries = await readdir(directory, { withFileTypes: true });\n const files = await Promise.all(\n entries.map(async (entry) => {\n const path = join(directory, entry.name);\n if (entry.isDirectory()) return findSourceFiles(path);\n return entry.isFile() && path.endsWith('.ts') && !path.endsWith('.d.ts')\n ? [path]\n : [];\n }),\n );\n return files.flat();\n}\n\nasync function readOptionalFile(path: string): Promise<string | undefined> {\n try {\n return await readFile(path, 'utf8');\n } catch (error) {\n if (error instanceof Error && 'code' in error && error.code === 'ENOENT') {\n return undefined;\n }\n throw error;\n }\n}\n", "import { readFile, writeFile } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport ts from 'typescript';\n\ninterface GeneratedPackageManifest {\n name?: string;\n version?: string;\n type?: string;\n main?: string;\n module?: string;\n types?: string;\n publishConfig?: Record<string, unknown>;\n exports?: Record<string, unknown>;\n dependencies?: Record<string, string>;\n}\n\nexport async function compileGeneratedPackage(\n output: string,\n packageName: string,\n): Promise<void> {\n const source = join(output, 'src');\n const program = ts.createProgram({\n rootNames: ts.sys.readDirectory(source, ['.ts']),\n options: {\n allowSyntheticDefaultImports: true,\n declaration: true,\n module: ts.ModuleKind.ESNext,\n moduleResolution: ts.ModuleResolutionKind.Bundler,\n noEmitOnError: true,\n outDir: join(output, 'dist'),\n rewriteRelativeImportExtensions: true,\n rootDir: source,\n skipLibCheck: true,\n target: ts.ScriptTarget.ESNext,\n verbatimModuleSyntax: true,\n },\n });\n const result = program.emit();\n const diagnostics = [\n ...ts.getPreEmitDiagnostics(program),\n ...result.diagnostics,\n ].filter((diagnostic) => diagnostic.category === ts.DiagnosticCategory.Error);\n if (result.emitSkipped || diagnostics.length > 0) {\n throw new Error(formatCompilationError(output, diagnostics));\n }\n\n await synchronizeGeneratedManifest(output, packageName);\n}\n\nfunction formatCompilationError(\n output: string,\n diagnostics: readonly ts.Diagnostic[],\n): string {\n return `Failed to compile generated client:\\n${ts.formatDiagnosticsWithColorAndContext(\n diagnostics,\n {\n getCanonicalFileName: (fileName) => fileName,\n getCurrentDirectory: () => output,\n getNewLine: () => '\\n',\n },\n )}`;\n}\n\nasync function synchronizeGeneratedManifest(\n output: string,\n packageName: string,\n): Promise<void> {\n const manifestPath = join(output, 'package.json');\n const manifest = generatedPackageManifest(\n packageName,\n JSON.parse(\n await readFile(manifestPath, 'utf8'),\n ) as GeneratedPackageManifest,\n );\n await writeFile(manifestPath, `${JSON.stringify(manifest, null, 2)}\\n`);\n}\n\nexport function generatedPackageManifest(\n packageName: string,\n manifest: GeneratedPackageManifest,\n): GeneratedPackageManifest {\n Object.assign(manifest, {\n name: packageName,\n version: '0.0.1',\n type: 'module',\n main: './dist/index.js',\n module: './dist/index.js',\n types: './dist/index.d.ts',\n });\n manifest.publishConfig = { ...manifest.publishConfig, access: 'public' };\n manifest.exports = {\n ...manifest.exports,\n './package.json': './package.json',\n '.': {\n types: './dist/index.d.ts',\n import: './dist/index.js',\n default: './dist/index.js',\n },\n };\n manifest.dependencies = {\n ...manifest.dependencies,\n 'fast-content-type-parse': '^3.0.0',\n zod: '^4.3.0',\n };\n return manifest;\n}\n", "import { access, mkdir, readFile, stat, writeFile } from 'node:fs/promises';\nimport { basename, dirname, join, relative, resolve } from 'node:path';\nimport { pathToFileURL } from 'node:url';\n\nimport type { OpenAPISecuritySchemeObject } from '@sdk-it/core';\nimport type { MiddlewareSecurityRule } from '@sdk-it/generic';\n\nimport { generatedPackageManifest } from './compiler.ts';\n\nexport interface ProjectConfig {\n tsconfig: string;\n framework?: 'auto' | 'hono';\n preset?: 'auto' | 'prisma' | 'none';\n output?: string;\n packageName?: string;\n securitySchemes?: Record<string, OpenAPISecuritySchemeObject>;\n middlewareSecurity?: readonly MiddlewareSecurityRule[];\n}\n\nexport interface ResolvedProjectConfig extends ProjectConfig {\n output: string;\n}\n\nexport interface LoadProjectConfigOptions {\n cwd?: string;\n config?: string;\n}\n\nexport interface InitializeProjectOptions {\n cwd?: string;\n tsconfig: string;\n}\n\ninterface ProjectPackageManifest {\n name?: string;\n workspaces?: string[] | { packages?: string[]; [key: string]: unknown };\n [key: string]: unknown;\n}\n\nexport function defineConfig<const Config extends ProjectConfig>(\n config: Config,\n): Config {\n return config;\n}\n\nexport async function loadProjectConfig(\n options: LoadProjectConfigOptions = {},\n): Promise<ResolvedProjectConfig> {\n const cwd = resolve(options.cwd ?? process.cwd());\n const configPath = options.config\n ? resolve(cwd, options.config)\n : await findProjectConfig(cwd);\n const loaded = await import(pathToFileURL(configPath).href);\n const config = loaded.default as ProjectConfig | undefined;\n if (!config || typeof config.tsconfig !== 'string') {\n throw new Error(\n `Expected ${configPath} to default export an SDK-IT config with a tsconfig path.`,\n );\n }\n\n const directory = dirname(configPath);\n return {\n ...config,\n tsconfig: resolve(directory, config.tsconfig),\n output: resolve(directory, config.output ?? '.sdk-it'),\n ...(config.middlewareSecurity\n ? {\n middlewareSecurity: config.middlewareSecurity.map((rule) => ({\n ...rule,\n middleware: {\n ...rule.middleware,\n from: resolve(directory, rule.middleware.from),\n },\n })),\n }\n : {}),\n };\n}\n\nexport async function initializeProject(\n options: InitializeProjectOptions,\n): Promise<void> {\n const cwd = resolve(options.cwd ?? process.cwd());\n const tsconfigPath = resolve(cwd, options.tsconfig);\n await validateTsconfig(tsconfigPath);\n const projectDirectory = dirname(tsconfigPath);\n const configPath = join(projectDirectory, 'sdk-it.config.ts');\n const { directory: workspaceDirectory, manifest } =\n await findWorkspace(projectDirectory);\n const packageName = generatedPackageName(\n manifest.name,\n projectDirectory,\n workspaceDirectory,\n );\n const tsconfig = relative(projectDirectory, tsconfigPath).replaceAll(\n '\\\\',\n '/',\n );\n const relativeTsconfig = tsconfig.startsWith('.')\n ? tsconfig\n : `./${tsconfig}`;\n const configSource = `import { defineConfig } from '@sdk-it/cli';\n\nexport default defineConfig({\n tsconfig: '${relativeTsconfig}',\n${projectDirectory === workspaceDirectory ? '' : ` packageName: '${packageName}',\\n`}});\n`;\n\n const existingConfig = await readOptionalFile(configPath);\n if (existingConfig !== undefined && existingConfig !== configSource) {\n throw new Error(\n `${configPath} already exists with different settings. Review it before replacing the file.`,\n );\n }\n\n const output = join(projectDirectory, '.sdk-it');\n const manifestPath = join(output, 'package.json');\n const existingManifest = await readOptionalFile(manifestPath);\n const generatedManifest = generatedPackageManifest(\n packageName,\n existingManifest\n ? (JSON.parse(existingManifest) as ProjectPackageManifest)\n : {},\n );\n const generatedManifestSource = `${JSON.stringify(generatedManifest, null, 2)}\\n`;\n const workspacePath = relative(workspaceDirectory, output).replaceAll(\n '\\\\',\n '/',\n );\n const manifestChanged = addGeneratedWorkspace(manifest, workspacePath);\n\n const gitignorePath = join(workspaceDirectory, '.gitignore');\n const gitignore = (await readOptionalFile(gitignorePath)) ?? '';\n const updatedGitignore = withGeneratedWorkspaceIgnore(\n gitignore,\n workspacePath,\n );\n if (updatedGitignore !== gitignore) {\n await writeFile(gitignorePath, updatedGitignore);\n }\n\n if (manifestChanged) {\n await writeFile(\n join(workspaceDirectory, 'package.json'),\n `${JSON.stringify(manifest, null, 2)}\\n`,\n );\n }\n\n if (existingConfig === undefined) {\n await writeFile(configPath, configSource);\n }\n if (existingManifest !== generatedManifestSource) {\n await mkdir(output, { recursive: true });\n await writeFile(manifestPath, generatedManifestSource);\n }\n}\n\nfunction addGeneratedWorkspace(\n manifest: ProjectPackageManifest,\n workspace: string,\n): boolean {\n const workspaces = manifest.workspaces;\n if (Array.isArray(workspaces)) {\n if (workspaces.includes(workspace)) return false;\n workspaces.push(workspace);\n return true;\n }\n if (workspaces && Array.isArray(workspaces.packages)) {\n if (workspaces.packages.includes(workspace)) return false;\n workspaces.packages.push(workspace);\n return true;\n }\n manifest.workspaces = [workspace];\n return true;\n}\n\nfunction withGeneratedWorkspaceIgnore(\n gitignore: string,\n workspace: string,\n): string {\n const patterns = [\n `!${workspace}/`,\n `${workspace}/*`,\n `!${workspace}/package.json`,\n ];\n const lines = gitignore\n .split(/\\r?\\n/)\n .filter((line) => !patterns.includes(line.trim()));\n while (lines.at(-1) === '') lines.pop();\n return `${lines.length ? `${lines.join('\\n')}\\n` : ''}${patterns.join('\\n')}\\n`;\n}\n\nasync function findWorkspace(\n start: string,\n): Promise<{ directory: string; manifest: ProjectPackageManifest }> {\n let directory = start;\n let nearest:\n { directory: string; manifest: ProjectPackageManifest } | undefined;\n while (true) {\n const source = await readOptionalFile(join(directory, 'package.json'));\n if (source) {\n const candidate = {\n directory,\n manifest: JSON.parse(source) as ProjectPackageManifest,\n };\n nearest ??= candidate;\n if (candidate.manifest.workspaces !== undefined) return candidate;\n }\n const parent = dirname(directory);\n if (parent === directory) break;\n directory = parent;\n }\n if (nearest) return nearest;\n throw new Error(`Could not find a package.json from ${start}.`);\n}\n\nfunction generatedPackageName(\n workspaceName: string | undefined,\n projectDirectory: string,\n workspaceDirectory: string,\n): string {\n if (projectDirectory === workspaceDirectory) return '@sdk-it/client';\n const project = basename(projectDirectory)\n .toLowerCase()\n .replace(/[^a-z0-9._-]+/g, '-');\n const scope = workspaceName?.match(/^@([^/]+)\\//)?.[1];\n return scope ? `@${scope}/${project}-client` : `${project}-client`;\n}\n\nasync function validateTsconfig(path: string): Promise<void> {\n try {\n if ((await stat(path)).isFile()) return;\n } catch (error) {\n if (!(\n error instanceof Error &&\n 'code' in error &&\n error.code === 'ENOENT'\n )) {\n throw error;\n }\n }\n throw new Error(`Could not find a TypeScript project at ${path}.`);\n}\n\nasync function findProjectConfig(start: string): Promise<string> {\n let directory = start;\n while (true) {\n const candidate = join(directory, 'sdk-it.config.ts');\n try {\n await access(candidate);\n return candidate;\n } catch {\n const parent = dirname(directory);\n if (parent === directory) {\n throw new Error(\n `Could not find sdk-it.config.ts from ${start} or any parent directory.`,\n );\n }\n directory = parent;\n }\n }\n}\n\nasync function readOptionalFile(path: string): Promise<string | undefined> {\n try {\n return await readFile(path, 'utf8');\n } catch (error) {\n if (error instanceof Error && 'code' in error && error.code === 'ENOENT') {\n return undefined;\n }\n throw error;\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["resolve", "writeFile", "join", "createRequire", "ts", "require", "readFile", "join", "ts", "writeFile", "join", "access", "readFile", "writeFile", "join", "relative", "resolve", "resolve", "join", "relative", "readOptionalFile", "writeFile", "access", "readFile", "resolve"]
7
7
  }
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/lib/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAW,MAAM,WAAW,CAAC;AAuG7C,QAAA,MAAM,GAAG,SAWa,CAAC;AAEvB,eAAe,GAAG,CAAC"}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/lib/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAW,MAAM,WAAW,CAAC;AA4B7C,QAAA,MAAM,GAAG,SAWa,CAAC;AAEvB,eAAe,GAAG,CAAC"}
@@ -1,4 +1,4 @@
1
1
  import { Command } from 'commander';
2
- declare const init: Command;
3
- export default init;
2
+ declare const _default: Command;
3
+ export default _default;
4
4
  //# sourceMappingURL=init.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/lib/commands/init.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgMpC,QAAA,MAAM,IAAI,SAqPN,CAAC;AAEL,eAAe,IAAI,CAAC"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/lib/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;;AAIpC,wBAMK"}
@@ -1,10 +1,4 @@
1
1
  import { Command } from 'commander';
2
- import type { DartOptions } from '../types.ts';
3
- type Options = Omit<DartOptions, 'pagination'> & {
4
- output: string;
5
- pagination?: DartOptions['pagination'] | string;
6
- };
7
2
  declare const _default: Command;
8
3
  export default _default;
9
- export declare function runDart(options: Options): Promise<void>;
10
4
  //# sourceMappingURL=dart.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"dart.d.ts","sourceRoot":"","sources":["../../../src/lib/generators/dart.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAapC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C,KAAK,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,GAAG;IAC/C,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,WAAW,CAAC,YAAY,CAAC,GAAG,MAAM,CAAC;CACjD,CAAC;;AACF,wBAaK;AAEL,wBAAsB,OAAO,CAAC,OAAO,EAAE,OAAO,iBA2B7C"}
1
+ {"version":3,"file":"dart.d.ts","sourceRoot":"","sources":["../../../src/lib/generators/dart.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;;AAmBpC,wBAaK"}
@@ -1,6 +1,4 @@
1
1
  import { Command } from 'commander';
2
- import type { PythonOptions } from '../types.ts';
3
2
  declare const _default: Command;
4
3
  export default _default;
5
- export declare function runPython(options: PythonOptions): Promise<void>;
6
4
  //# sourceMappingURL=python.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"python.d.ts","sourceRoot":"","sources":["../../../src/lib/generators/python.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;;AAEjD,wBASK;AAEL,wBAAsB,SAAS,CAAC,OAAO,EAAE,aAAa,iBAsCrD"}
1
+ {"version":3,"file":"python.d.ts","sourceRoot":"","sources":["../../../src/lib/generators/python.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;;AASpC,wBASK"}
@@ -1,5 +1,4 @@
1
1
  import { Command } from 'commander';
2
2
  declare const _default: Command;
3
3
  export default _default;
4
- export declare function runReadme(specFile: string, output: string): Promise<void>;
5
4
  //# sourceMappingURL=readme.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"readme.d.ts","sourceRoot":"","sources":["../../../src/lib/generators/readme.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;;AAQpC,wBAMK;AAEL,wBAAsB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,iBAI/D"}
1
+ {"version":3,"file":"readme.d.ts","sourceRoot":"","sources":["../../../src/lib/generators/readme.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;;AAQpC,wBAMK"}
@@ -1,10 +1,4 @@
1
1
  import { Command } from 'commander';
2
- import type { TypeScriptOptions } from '../types.ts';
3
- type Options = Omit<TypeScriptOptions, 'pagination'> & {
4
- output: string;
5
- pagination?: TypeScriptOptions['pagination'] | string;
6
- };
7
2
  declare const _default: Command;
8
3
  export default _default;
9
- export declare function runTypescript(options: Options): Promise<void>;
10
4
  //# sourceMappingURL=typescript.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"typescript.d.ts","sourceRoot":"","sources":["../../../src/lib/generators/typescript.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAC;AAmB5C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAErD,KAAK,OAAO,GAAG,IAAI,CAAC,iBAAiB,EAAE,YAAY,CAAC,GAAG;IACrD,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,iBAAiB,CAAC,YAAY,CAAC,GAAG,MAAM,CAAC;CACvD,CAAC;;AAEF,wBAkDK;AAEL,wBAAsB,aAAa,CAAC,OAAO,EAAE,OAAO,iBAkBnD"}
1
+ {"version":3,"file":"typescript.d.ts","sourceRoot":"","sources":["../../../src/lib/generators/typescript.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAC;;AA0B5C,wBAkDK"}
@@ -6,6 +6,6 @@ export declare function analyzeProject(tsconfig: string, config: ProjectConfig):
6
6
  version: string;
7
7
  };
8
8
  paths: import("openapi3-ts/oas31").PathsObject;
9
- components: import("openapi3-ts/oas31").ComponentsObject;
9
+ components: import("@sdk-it/core").OpenAPIComponentsObject;
10
10
  }>;
11
11
  //# sourceMappingURL=analysis.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"analysis.d.ts","sourceRoot":"","sources":["../../../src/lib/project/analysis.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,wBAAsB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa;;;;;;;;GAqC3E"}
1
+ {"version":3,"file":"analysis.d.ts","sourceRoot":"","sources":["../../../src/lib/project/analysis.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,wBAAsB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa;;;;;;;;GAuC3E"}
@@ -1,2 +1,15 @@
1
+ interface GeneratedPackageManifest {
2
+ name?: string;
3
+ version?: string;
4
+ type?: string;
5
+ main?: string;
6
+ module?: string;
7
+ types?: string;
8
+ publishConfig?: Record<string, unknown>;
9
+ exports?: Record<string, unknown>;
10
+ dependencies?: Record<string, string>;
11
+ }
1
12
  export declare function compileGeneratedPackage(output: string, packageName: string): Promise<void>;
13
+ export declare function generatedPackageManifest(packageName: string, manifest: GeneratedPackageManifest): GeneratedPackageManifest;
14
+ export {};
2
15
  //# sourceMappingURL=compiler.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"compiler.d.ts","sourceRoot":"","sources":["../../../src/lib/project/compiler.ts"],"names":[],"mappings":"AAgBA,wBAAsB,uBAAuB,CAC3C,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,IAAI,CAAC,CA4Bf"}
1
+ {"version":3,"file":"compiler.d.ts","sourceRoot":"","sources":["../../../src/lib/project/compiler.ts"],"names":[],"mappings":"AAIA,UAAU,wBAAwB;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACxC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACvC;AAED,wBAAsB,uBAAuB,CAC3C,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,IAAI,CAAC,CA4Bf;AA8BD,wBAAgB,wBAAwB,CACtC,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,wBAAwB,GACjC,wBAAwB,CAyB1B"}
@@ -1,9 +1,13 @@
1
+ import type { OpenAPISecuritySchemeObject } from '@sdk-it/core';
2
+ import type { MiddlewareSecurityRule } from '@sdk-it/generic';
1
3
  export interface ProjectConfig {
2
4
  tsconfig: string;
3
5
  framework?: 'auto' | 'hono';
4
6
  preset?: 'auto' | 'prisma' | 'none';
5
7
  output?: string;
6
8
  packageName?: string;
9
+ securitySchemes?: Record<string, OpenAPISecuritySchemeObject>;
10
+ middlewareSecurity?: readonly MiddlewareSecurityRule[];
7
11
  }
8
12
  export interface ResolvedProjectConfig extends ProjectConfig {
9
13
  output: string;
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/lib/project/config.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC5B,MAAM,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,MAAM,CAAC;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,qBAAsB,SAAQ,aAAa;IAC1D,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,wBAAwB;IACvC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,wBAAwB;IACvC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB;AAOD,wBAAgB,YAAY,CAAC,KAAK,CAAC,MAAM,SAAS,aAAa,EAC7D,MAAM,EAAE,MAAM,GACb,MAAM,CAER;AAED,wBAAsB,iBAAiB,CACrC,OAAO,GAAE,wBAA6B,GACrC,OAAO,CAAC,qBAAqB,CAAC,CAmBhC;AAED,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,wBAAwB,GAChC,OAAO,CAAC,IAAI,CAAC,CA4Cf"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/lib/project/config.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,cAAc,CAAC;AAChE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAI9D,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC5B,MAAM,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,MAAM,CAAC;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,2BAA2B,CAAC,CAAC;IAC9D,kBAAkB,CAAC,EAAE,SAAS,sBAAsB,EAAE,CAAC;CACxD;AAED,MAAM,WAAW,qBAAsB,SAAQ,aAAa;IAC1D,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,wBAAwB;IACvC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,wBAAwB;IACvC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB;AAQD,wBAAgB,YAAY,CAAC,KAAK,CAAC,MAAM,SAAS,aAAa,EAC7D,MAAM,EAAE,MAAM,GACb,MAAM,CAER;AAED,wBAAsB,iBAAiB,CACrC,OAAO,GAAE,wBAA6B,GACrC,OAAO,CAAC,qBAAqB,CAAC,CA8BhC;AAED,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,wBAAwB,GAChC,OAAO,CAAC,IAAI,CAAC,CA0Ef"}
@@ -35,22 +35,4 @@ export interface DartOptions extends BaseGeneratorOptions {
35
35
  formatter?: string;
36
36
  pagination?: PaginationConfig | false;
37
37
  }
38
- /**
39
- * Complete SDK configuration file structure
40
- */
41
- export interface SdkConfig {
42
- readme?: {
43
- spec: string;
44
- output: string;
45
- };
46
- apiref?: {
47
- spec: string;
48
- output: string;
49
- };
50
- generators: {
51
- typescript?: TypeScriptOptions;
52
- python?: PythonOptions;
53
- dart?: DartOptions;
54
- };
55
- }
56
38
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAErD;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAkB,SAAQ,oBAAoB;IAC7D,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,gBAAgB,GAAG,KAAK,CAAC;CACvC;AAED;;GAEG;AACH,MAAM,WAAW,aAAc,SAAQ,oBAAoB;IACzD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,WAAY,SAAQ,oBAAoB;IACvD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,gBAAgB,GAAG,KAAK,CAAC;CACvC;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,MAAM,CAAC,EAAE;QACP,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,MAAM,CAAC,EAAE;QACP,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,UAAU,EAAE;QACV,UAAU,CAAC,EAAE,iBAAiB,CAAC;QAC/B,MAAM,CAAC,EAAE,aAAa,CAAC;QACvB,IAAI,CAAC,EAAE,WAAW,CAAC;KACpB,CAAC;CACH"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAErD;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAkB,SAAQ,oBAAoB;IAC7D,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,gBAAgB,GAAG,KAAK,CAAC;CACvC;AAED;;GAEG;AACH,MAAM,WAAW,aAAc,SAAQ,oBAAoB;IACzD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,WAAY,SAAQ,oBAAoB;IACvD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,gBAAgB,GAAG,KAAK,CAAC;CACvC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sdk-it/cli",
3
- "version": "0.46.2",
3
+ "version": "0.46.4",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.js",
@@ -22,20 +22,19 @@
22
22
  "!**/*.test.*"
23
23
  ],
24
24
  "dependencies": {
25
- "@sdk-it/typescript": "0.46.2",
26
- "@sdk-it/dart": "0.46.2",
27
- "@sdk-it/spec": "0.46.2",
25
+ "@sdk-it/typescript": "0.46.4",
26
+ "@sdk-it/dart": "0.46.4",
27
+ "@sdk-it/spec": "0.46.4",
28
28
  "commander": "^13.1.0",
29
- "@sdk-it/core": "0.46.2",
30
- "@sdk-it/generic": "0.46.2",
31
- "@sdk-it/hono": "0.46.2",
29
+ "@sdk-it/core": "0.46.4",
30
+ "@sdk-it/generic": "0.46.4",
31
+ "@sdk-it/hono": "0.46.4",
32
32
  "libnpmpublish": "^11.0.0",
33
33
  "openapi3-ts": "4.5.0",
34
34
  "registry-auth-token": "^5.1.0",
35
- "@sdk-it/python": "0.46.2",
35
+ "@sdk-it/python": "0.46.4",
36
36
  "execa": "^9.6.0",
37
- "@sdk-it/readme": "0.46.2",
38
- "@inquirer/prompts": "^7.7.1"
37
+ "@sdk-it/readme": "0.46.4"
39
38
  },
40
39
  "peerDependencies": {
41
40
  "typescript": "^6.0.3"