UNPKG

@grandlinex/bundle-sqlight

Version:

> SQLight support GrandlineX using better-sqlite3

77 lines (76 loc) 2.18 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.convertSpecialFields = convertSpecialFields; exports.objToTable = objToTable; exports.rowToObj = rowToObj; exports.tableToObj = tableToObj; function convertSpecialFields(meta, clone, key, params) { switch (meta.dataType) { case 'date': if (clone[key] !== null) { params.push(clone[key].toISOString()); } else { params.push(null); } break; case 'json': params.push(JSON.stringify(clone[key])); break; case 'boolean': params.push(clone[key] ? 1 : 0); break; default: params.push(clone[key]); break; } } function objToTable(entity, config, update) { const clone = entity; const keysOriginal = Object.keys(entity); const keys = []; const params = []; const values = []; keysOriginal.forEach((key) => { const meta = config.meta.get(key); if (!meta) { throw new Error('No col meta'); } if (meta.primaryKey && update) { return; } convertSpecialFields(meta, clone, key, params); if (update) { values.push(`${String(key)}=?`); } else { values.push(`?`); } keys.push(key); }); if (values.length === params.length && params.length === keys.length) { return [keys, values, params]; } throw new Error('Invalid output length'); } function rowToObj(config, row) { const clone = row; config.meta.forEach((value, key) => { switch (value.dataType) { case 'json': clone[key] = clone[key] !== null ? JSON.parse(clone[key]) : null; break; case 'date': clone[key] = clone[key] !== null ? new Date(clone[key]) : null; break; default: break; } }); return clone; } function tableToObj(config, table) { return table.map((row) => { return rowToObj(config, row); }); }