neet/refined-itsukara-link

View on GitHub
packages/@neet/vschedule-api-spec/src/api.ts

Summary

Maintainability
A
0 mins
Test Coverage
/* eslint-disable no-console */
/* eslint-disable @typescript-eslint/no-require-imports */
import fs from 'node:fs';
import path from 'node:path';

import {
  extendZodWithOpenApi,
  OpenAPIGenerator,
  OpenAPIRegistry,
} from '@asteasolutions/zod-to-openapi';
import glob from 'glob';
import { z } from 'zod';

// --- 1. Initialize zod ---
extendZodWithOpenApi(z);
const registry = new OpenAPIRegistry();
export { registry };

// --- 2. Load modules ---
const pattern = path.join(__dirname, './**/*.js');
const modules = glob.sync(pattern);
for (const module of modules) {
  require(module);
}

// --- 3. Generate document ---
const document = new OpenAPIGenerator(
  registry.definitions,
  '3.0.3',
).generateDocument({
  info: {
    title: 'VSchedule API',
    version: JSON.parse(
      fs.readFileSync(path.join(__dirname, '../package.json'), 'utf-8'),
    ).version,
    description: 'VSchedule Public API Definition',
    license: {
      name: 'MIT',
      url: 'https://opensource.org/licenses/MIT',
    },
  },
  servers: [
    {
      url: 'http://localhost:3000',
      description: 'Development environment',
    },
    {
      url: 'https://api.vschedule.app',
      description: 'Production',
    },
  ],
});

// --- 4. Stdout result ---
console.log(JSON.stringify(document, null, 2));