All files / blong-gogo/src/adapter/schema schemaProcedureSync.ts

0% Statements 0/37
0% Branches 0/1
0% Functions 0/1
0% Lines 0/37

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38                                                                           
import {library} from '@feasibleone/blong';
import {readFileSync, readdirSync} from 'node:fs';
import {join, basename} from 'node:path';

export default library(
    ({config}) =>
        async function schemaProcedureSync(
            procedures: string | Array<{name: string; sql: string}>,
        ): Promise<{created: string[]}> {
            // eslint-disable-next-line @typescript-eslint/no-explicit-any
            const knex = (config as Record<string, any>)?.context?.queryBuilder;
            if (!knex) throw new Error('Knex queryBuilder not available in adapter context');

            let definitions: Array<{name: string; sql: string}>;

            if (typeof procedures === 'string') {
                const dir = procedures;
                const files = readdirSync(dir).filter(f => f.endsWith('.sql'));
                definitions = files.map(f => ({
                    name: basename(f, '.sql'),
                    sql: readFileSync(join(dir, f), 'utf8'),
                }));
            } else {
                definitions = procedures;
            }

            const created: string[] = [];

            for (const {name, sql} of definitions) {
                await knex.raw(`DROP PROCEDURE IF EXISTS ??`, [name]);
                await knex.raw(sql);
                created.push(name);
            }

            return {created};
        },
);