티스토리 뷰

용도

데이터베이스를 통해 Typescript interface를 생성하기 위해 사용한다.

패키지 명은 @rmp135/sql-ts 이다.

NPM 주소 : https://www.npmjs.com/package/@rmp135/sql-ts

나는 node js 프로젝트에 있는 sequelize model에 타입을 적용하기 위해서 interface가 필요하여

적용하였다.

실습

cli를 통해서 실행할 수 도 있지만, 관리 용이성을 위해 js를 통해서 작업을 진행 하였다.

https://rmp135.github.io/sql-ts/#/?id=node-module

사전 설치

mariadb인 경우에 mysql2 패키지를 설치해준다.

npm install mysql2

참조: https://knexjs.org/guide/#node-js

generate-types.js

/* eslint-disable import/no-extraneous-dependencies, no-template-curly-in-string */
import { Client } from '@rmp135/sql-ts';
import path, { dirname } from 'path';
import fs from 'fs';
import { fileURLToPath } from 'url';

const config = {
    client: 'mysql2',
    connection: {
        host: '10.3.192.2',
        port: 3306,
        user: 'root',
        password: 'root1!',
        database: 'MyDB',
    },
    // output filename: models.d.ts
    filename: 'models.d',
    // table 명으로 파일 생성
    interfaceNameFormat: '${table}',
    // database 필드를 명시해도 다른 database 테이블이 불러와지는 문제로
    // schemas 필드를 추가
    schemas: ['SCS'],
};

Client.fromConfig(config)
    .fetchDatabase()
    .toTypescript()
    .then((res) => {
		    // 현재 경로
				const __dirname = dirname(fileURLToPath(import.meta.url));
				
        // export 제거 -> jsdoc에서 import 없이 참조하기 위함
        const result = res.replace(/export /g, '');
        fs.writeFileSync(path.join(__dirname, '/@types/models/models.d.ts'), result, 'utf-8');
    });

위 코드처럼 생성은 간단하다. 😀 몇가지 상세 설정은 공식 문서를 참조해서 작성하였다.

나는 JSDoc에 사용하기 위해서 export 구문을 제거하는 작업을 하여 파일을 생성했다. 🖖

 

댓글