예제

예시: example.sql.ts

export default
`
    SELECT 1
`;

[1] global-sql-cache.ts

import * as path from 'path';
import * as glob from 'glob';

export const sqlCache: {
    path: string;
    query: string;
}[] = [];

/** 모든 .sql.ts 파일 내용을 캐시에 저장 (리턴: 저장된 개수)  */
export function CreateSqlCache(rootDir: string) {

    // 하위 디렉토리에서 *.sql.ts 패턴을 가진 파일들 찾기
    const pattern = '**/*.sql.ts';
    const sqlFiles = glob.sync(pattern, { cwd: rootDir });

    // 파일 내용을 읽어와서 변수 추출
    sqlFiles.forEach((file) => {
        const filePath = path.join(rootDir, file);

        // CommonJS require 사용 (TypeScript의 import로는 동적으로 파일을 가져오기 어려움)
        const fileContent = require(filePath);

        // 파일에서 export default 된 변수가 존재하는 경우 저장
        if (fileContent && typeof fileContent.default !== 'undefined') {
            sqlCache.push({ path: filePath, query: fileContent.default });
        }
    });

    return sqlCache.length;
}

[2] 호출자: server.ts

async function runApp() {

    const app = new Koa();
    
    if(serverConfig.isDevMode) {
        const sqlCacheSize = CreateSqlCache(`${__dirname}/api`);
        console.log(`SQL Cache Generated: ${sqlCacheSize}`)
    }

    // ...
}