@cloudquery/plugin-sdk-javascript
Version:
This is the high-level package to use for developing CloudQuery plugins in JavaScript
42 lines • 1.74 kB
JavaScript
import { WriteError } from '../errors/errors.js';
import { decodeTable, decodeRecord, getPrimaryKeys } from '../schema/table.js';
export const createWrite = (
//eslint-disable-next-line @typescript-eslint/no-explicit-any
memoryDB, tables, overwrite, deleteStale) => {
return async (stream) => {
for await (const data of stream) {
const request = data;
switch (request.message) {
case 'migrate_table': {
// Update table schema in the `tables` map
const table = decodeTable(request.migrate_table.table);
tables[table.name] = table;
break;
}
case 'insert': {
const [tableName, batches] = decodeRecord(request.insert.record);
if (!memoryDB[tableName]) {
memoryDB[tableName] = [];
}
const tableSchema = tables[tableName];
const pks = getPrimaryKeys(tableSchema);
for (const batch of batches) {
//eslint-disable-next-line unicorn/no-array-for-each
for (const record of batch) {
overwrite(tableSchema, pks, record);
}
}
break;
}
case 'delete': {
deleteStale(request.delete);
break;
}
default: {
throw new WriteError(`Unknown request message type`, { props: { message: request.message } });
}
}
}
};
};
//# sourceMappingURL=write.js.map