Files
dbgate/packages/web/src/plugins/fileformats.ts
SPRINX0\prochazka 665ce22741 JSON import
2024-09-17 12:16:59 +02:00

93 lines
2.1 KiB
TypeScript

import type { FileFormatDefinition, QuickExportDefinition } from 'dbgate-types';
const jsonlFormat = {
storageType: 'jsonl',
extension: 'jsonl',
extensions: ['jsonl', 'ndjson'],
name: 'JSON lines/NDJSON',
readerFunc: 'jsonLinesReader',
writerFunc: 'jsonLinesWriter',
};
const jsonFormat = {
storageType: 'json',
extension: 'json',
name: 'JSON',
readerFunc: 'jsonReader',
writerFunc: 'jsonArrayWriter',
};
const sqlFormat = {
storageType: 'sql',
extension: 'sql',
name: 'SQL',
writerFunc: 'sqlDataWriter',
};
const jsonlQuickExport = {
label: 'JSON lines/NDJSON',
extension: 'jsonl',
createWriter: fileName => ({
functionName: 'jsonLinesWriter',
props: {
fileName,
},
}),
};
const jsonQuickExport = {
label: 'JSON',
extension: 'json',
createWriter: fileName => ({
functionName: 'jsonArrayWriter',
props: {
fileName,
},
}),
};
const sqlQuickExport = {
label: 'SQL',
extension: 'sql',
createWriter: (fileName, dataName) => ({
functionName: 'sqlDataWriter',
props: {
fileName,
dataName,
},
}),
};
export function buildFileFormats(plugins): FileFormatDefinition[] {
const res = [jsonlFormat, jsonFormat, sqlFormat];
for (const { content } of plugins) {
const { fileFormats } = content;
if (fileFormats) res.push(...fileFormats);
}
return res;
}
export function buildQuickExports(plugins): QuickExportDefinition[] {
const res = [jsonQuickExport, jsonlQuickExport, sqlQuickExport];
for (const { content } of plugins) {
if (content.quickExports) res.push(...content.quickExports);
}
return res;
}
export function findFileFormat(extensions, storageType) {
return extensions.fileFormats.find(x => x.storageType == storageType);
}
export function getFileFormatDirections(format) {
if (!format) return [];
const res = [];
if (format.readerFunc) res.push('source');
if (format.writerFunc) res.push('target');
return res;
}
export function getDefaultFileFormat(extensions) {
return extensions.fileFormats.find(x => x.storageType == 'csv') || jsonlFormat;
}