@grandlinex/bundle-sqlight
Version:
> SQLight support GrandlineX using better-sqlite3
77 lines (76 loc) • 2.15 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.convertSpecialFields = convertSpecialFields;
exports.objToTable = objToTable;
exports.rowToObj = rowToObj;
exports.tableToObj = tableToObj;
function convertSpecialFields(meta, value, params) {
switch (meta.dataType) {
case 'date':
if (value !== null) {
params.push(value.toISOString());
}
else {
params.push(null);
}
break;
case 'json':
params.push(JSON.stringify(value));
break;
case 'boolean':
params.push(value ? 1 : 0);
break;
default:
params.push(value);
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);
});
}