extensions refactor

This commit is contained in:
Jan Prochazka
2020-11-21 20:12:33 +01:00
parent 3009724a82
commit 5ec39054a3
18 changed files with 200 additions and 227 deletions

View File

@@ -4,12 +4,12 @@ import getAsArray from '../utility/getAsArray';
import { getConnectionInfo } from '../utility/metadataLoaders';
import engines from 'dbgate-engines';
import { findObjectLike } from 'dbgate-tools';
import { findFileFormat } from '../fileformats';
import { findFileFormat } from '../utility/fileformats';
export function getTargetName(source, values) {
export function getTargetName(extensions, source, values) {
const key = `targetName_${source}`;
if (values[key]) return values[key];
const format = findFileFormat(values.targetStorageType);
const format = findFileFormat(extensions, values.targetStorageType);
if (format) {
const res = format.getDefaultOutputName ? format.getDefaultOutputName(source, values) : null;
if (res) return res;
@@ -18,10 +18,6 @@ export function getTargetName(source, values) {
return source;
}
export function isFileStorage(storageType) {
return !!findFileFormat(storageType);
}
function extractApiParameters(values, direction, format) {
const pairs = (format.args || [])
.filter((arg) => arg.apiName)
@@ -45,7 +41,7 @@ async function getConnection(storageType, conid, database) {
return [null, null];
}
function getSourceExpr(sourceName, values, sourceConnection, sourceDriver) {
function getSourceExpr(extensions, sourceName, values, sourceConnection, sourceDriver) {
const { sourceStorageType } = values;
if (sourceStorageType == 'database') {
const fullName = { schemaName: values.sourceSchemaName, pureName: sourceName };
@@ -66,9 +62,9 @@ function getSourceExpr(sourceName, values, sourceConnection, sourceDriver) {
},
];
}
if (isFileStorage(sourceStorageType)) {
if (findFileFormat(extensions, sourceStorageType)) {
const sourceFile = values[`sourceFile_${sourceName}`];
const format = findFileFormat(sourceStorageType);
const format = findFileFormat(extensions, sourceStorageType);
if (format && format.readerFunc) {
return [
format.readerFunc,
@@ -113,9 +109,9 @@ function getFlagsFroAction(action) {
};
}
function getTargetExpr(sourceName, values, targetConnection, targetDriver) {
function getTargetExpr(extensions, sourceName, values, targetConnection, targetDriver) {
const { targetStorageType } = values;
const format = findFileFormat(targetStorageType);
const format = findFileFormat(extensions, targetStorageType);
if (format && format.writerFunc) {
const outputParams = format.getOutputParams && format.getOutputParams(sourceName, values);
return [
@@ -124,7 +120,7 @@ function getTargetExpr(sourceName, values, targetConnection, targetDriver) {
...(outputParams
? outputParams
: {
fileName: getTargetName(sourceName, values),
fileName: getTargetName(extensions, sourceName, values),
}),
...extractApiParameters(values, 'target', format),
},
@@ -136,7 +132,7 @@ function getTargetExpr(sourceName, values, targetConnection, targetDriver) {
{
connection: targetConnection,
schemaName: values.targetSchemaName,
pureName: getTargetName(sourceName, values),
pureName: getTargetName(extensions, sourceName, values),
...getFlagsFroAction(values[`actionType_${sourceName}`]),
},
];
@@ -146,7 +142,7 @@ function getTargetExpr(sourceName, values, targetConnection, targetDriver) {
'archiveWriter',
{
folderName: values.targetArchiveFolder,
fileName: getTargetName(sourceName, values),
fileName: getTargetName(extensions, sourceName, values),
},
];
}
@@ -154,7 +150,7 @@ function getTargetExpr(sourceName, values, targetConnection, targetDriver) {
throw new Error(`Unknown target storage type: ${targetStorageType}`);
}
export default async function createImpExpScript(values, addEditorInfo = true) {
export default async function createImpExpScript(extensions, values, addEditorInfo = true) {
const script = new ScriptWriter();
const [sourceConnection, sourceDriver] = await getConnection(
@@ -172,11 +168,11 @@ export default async function createImpExpScript(values, addEditorInfo = true) {
for (const sourceName of sourceList) {
const sourceVar = script.allocVariable();
// @ts-ignore
script.assign(sourceVar, ...getSourceExpr(sourceName, values, sourceConnection, sourceDriver));
script.assign(sourceVar, ...getSourceExpr(extensions, sourceName, values, sourceConnection, sourceDriver));
const targetVar = script.allocVariable();
// @ts-ignore
script.assign(targetVar, ...getTargetExpr(sourceName, values, targetConnection, targetDriver));
script.assign(targetVar, ...getTargetExpr(extensions, sourceName, values, targetConnection, targetDriver));
script.copyStream(sourceVar, targetVar);
script.put();
@@ -188,9 +184,9 @@ export default async function createImpExpScript(values, addEditorInfo = true) {
return script.s;
}
export function getActionOptions(source, values, targetDbinfo) {
export function getActionOptions(extensions, source, values, targetDbinfo) {
const res = [];
const targetName = getTargetName(source, values);
const targetName = getTargetName(extensions, source, values);
if (values.targetStorageType == 'database') {
let existing = findObjectLike(
{ schemaName: values.targetSchemaName, pureName: targetName },
@@ -225,13 +221,13 @@ export function getActionOptions(source, values, targetDbinfo) {
return res;
}
export async function createPreviewReader(values, sourceName) {
export async function createPreviewReader(extensions, values, sourceName) {
const [sourceConnection, sourceDriver] = await getConnection(
values.sourceStorageType,
values.sourceConnectionId,
values.sourceDatabaseName
);
const [functionName, props] = getSourceExpr(sourceName, values, sourceConnection, sourceDriver);
const [functionName, props] = getSourceExpr(extensions, sourceName, values, sourceConnection, sourceDriver);
return {
functionName,
props: {