@caspiandb/data-api-local
Version:
AWS Aurora Serverless Data API emulator for local development.
90 lines • 3.04 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const pg_1 = require("pg");
const transformStringValue = (value) => {
if (typeof value === 'string') {
return value;
}
else {
return JSON.stringify(value);
}
};
const parseTimestamp = (value) => {
return new Date(value).toISOString();
};
const parseDate = (value) => {
return new Date(value).toISOString().substring(0, 10); // 2021-01-01
};
const parseLongValue = (value) => {
if (typeof value === 'string') {
return parseInt(value);
}
else {
return value;
}
};
const transformArray = (typeId, array) => {
if (Array.isArray(array[0])) {
return { arrayValues: array.map((value) => transformArray(typeId, value)) };
}
switch (typeId) {
case 1000:
return { booleanValues: array };
case 1115:
case 1182:
case 1185:
return { stringValues: array.map((value) => parseTimestamp(value)) };
case 1005:
case 1007:
case 1028:
return { longValues: array.map((value) => parseLongValue(value)) };
case 1021:
case 1022:
return { doubleValues: array };
default:
return { stringValues: array.map((value) => transformStringValue(value)) };
}
};
const transformValue = (field, value) => {
if (value === null) {
return { isNull: true };
}
else {
// should always serialize JSON(B) into `stringValue`
if ([pg_1.types.builtins.JSON, pg_1.types.builtins.JSONB].includes(field.dataTypeID)) {
return { stringValue: transformStringValue(value) };
}
if (Array.isArray(value)) {
return { arrayValue: transformArray(field.dataTypeID, value) };
}
switch (field.dataTypeID) {
case pg_1.types.builtins.BOOL:
return { booleanValue: value };
case pg_1.types.builtins.BYTEA:
return { blobValue: value };
case pg_1.types.builtins.INT2:
case pg_1.types.builtins.INT4:
case pg_1.types.builtins.INT8:
return { longValue: parseLongValue(value) };
case pg_1.types.builtins.FLOAT4:
case pg_1.types.builtins.FLOAT8:
return { doubleValue: value };
case pg_1.types.builtins.TIMESTAMP:
case pg_1.types.builtins.TIMESTAMPTZ:
return { stringValue: parseTimestamp(value.toString()) };
case pg_1.types.builtins.DATE:
return { stringValue: parseDate(value.toString()) };
default:
return { stringValue: transformStringValue(value) };
}
}
};
exports.transformResult = (result) => {
return result.rows.map((columns) => {
return columns.map((value, index) => {
const field = result.fields[index];
return transformValue(field, value);
});
});
};
//# sourceMappingURL=transformResult.js.map