diff --git a/api/fe.js b/api/fe.js new file mode 100644 index 00000000..b99a9582 --- /dev/null +++ b/api/fe.js @@ -0,0 +1,12 @@ +const { generateScript } = require('../forward_engineering/api/generateScript'); +const { generateContainerScript } = require('../forward_engineering/api/generateContainerScript'); +const { isDropInStatements } = require('../forward_engineering/api/isDropInStatements'); + +module.exports = { + generateScript, + generateViewScript(data, logger, callback, app) { + callback(new Error('Forward-Engineering of delta model on view level is not supported')); + }, + generateContainerScript, + isDropInStatements, +}; diff --git a/esbuild.package.js b/esbuild.package.js index b801da04..7fff735b 100644 --- a/esbuild.package.js +++ b/esbuild.package.js @@ -13,6 +13,7 @@ esbuild .build({ entryPoints: [ path.resolve(__dirname, 'api', 're.js'), + path.resolve(__dirname, 'api', 'fe.js'), path.resolve(__dirname, 'forward_engineering', 'api.js'), path.resolve(__dirname, 'forward_engineering', 'ddlProvider.js'), path.resolve(__dirname, 'forward_engineering', 'dbtProvider.js'), diff --git a/forward_engineering/api.js b/forward_engineering/api.js index 0cbdc0bb..52c94741 100644 --- a/forward_engineering/api.js +++ b/forward_engineering/api.js @@ -1,12 +1,8 @@ -const { DROP_STATEMENTS } = require('./helpers/constants'); -const logInfo = require('../reverse_engineering/helpers/logInfo'); -const { connect, getExternalBrowserUrl } = require('../reverse_engineering/api'); -const { logDatabaseVersion } = require('../reverse_engineering/reverseEngineeringService/reverseEngineeringService'); -const applyToInstanceHelper = require('./helpers/applyToInstanceHelper'); -const { - buildEntityLevelAlterScript, - parseDataForEntityLevelScript, -} = require('./helpers/alterScriptHelpers/alterScriptBuilder'); +const { generateScript } = require('./api/generateScript'); +const { generateContainerScript } = require('./api/generateContainerScript'); +const { isDropInStatements } = require('./api/isDropInStatements'); +const { testConnection, getExternalBrowserUrl } = require('./api/testConnection'); +const { applyToInstance } = require('./api/applyToInstance'); /** * @typedef {import('./helpers/alterScriptHelpers/types/AlterScriptDto').AlterScriptDto} AlterScriptDto @@ -17,10 +13,7 @@ const { * @typedef {import('./types/coreApplicationDataTypes').ExternalDefinitions} ExternalDefinitions * @typedef {import('./types/coreApplicationDataTypes').InternalDefinitions} InternalDefinitions * @typedef {import('./types/coreApplicationDataTypes').ModelDefinitions} ModelDefinitions - * @typedef {import('./types/coreApplicationTypes').App} App - * @typedef {import('./types/coreApplicationTypes').Logger} Logger - * @typedef {import('./types/coreApplicationTypes').CoreData} CoreData - * @typedef {import('./types/coreApplicationTypes').PluginError} PluginError + * * @typedef {(error?: PluginError | null, result?: any | null) => void} PluginCallback * */ @@ -44,90 +37,13 @@ const { */ module.exports = { - /** - * @param data {CoreData} - * @param logger {Logger} - * @param callback {PluginCallback} - * @param app {App} - * */ - generateScript(data, logger, callback, app) { - try { - const parsedData = parseDataForEntityLevelScript(data, app); - const scripts = buildEntityLevelAlterScript(data, app)(parsedData); - - callback(null, scripts); - } catch (error) { - logger.log( - 'error', - { message: error.message, stack: error.stack }, - 'MS SQL Server Forward-Engineering Error', - ); - - callback({ message: error.message, stack: error.stack }); - } - }, + generateScript, generateViewScript(data, logger, callback, app) { callback(new Error('Forward-Engineering of delta model on view level is not supported')); }, - generateContainerScript(data, logger, callback, app) { - try { - data.jsonSchema = data.collections[0]; - this.generateScript(data, logger, callback, app); - } catch (error) { - logger.log( - 'error', - { message: error.message, stack: error.stack }, - 'MS SQL Server Forward-Engineering Error', - ); - - callback({ message: error.message, stack: error.stack }); - } - }, - isDropInStatements(data, logger, callback, app) { - try { - const cb = (error, script = '') => - callback( - error, - DROP_STATEMENTS.some(statement => script.includes(statement)), - ); - - if (data.level === 'container') { - this.generateContainerScript(data, logger, cb, app); - } else { - this.generateScript(data, logger, cb, app); - } - } catch (e) { - callback({ message: e.message, stack: e.stack }); - } - }, - async testConnection(connectionInfo, logger, callback, app) { - try { - logInfo('Test connection', connectionInfo, logger); - if (connectionInfo.authMethod === 'Azure Active Directory (MFA)') { - await getExternalBrowserUrl(connectionInfo, logger, callback, app); - } else { - const client = await connect(connectionInfo, logger, () => {}, app); - await logDatabaseVersion({ client, logger }); - } - callback(null); - } catch (error) { - logger.log('error', { message: error.message, stack: error.stack, error }, 'Test connection'); - callback({ message: error.message, stack: error.stack }); - } - }, - async applyToInstance(connectionInfo, logger, callback, app) { - logger.clear(); - logInfo('Apply To Instance', connectionInfo, logger); - - try { - await applyToInstanceHelper.applyToInstance(connectionInfo, logger, app); - callback(null); - } catch (error) { - callback(error); - } - }, - - async getExternalBrowserUrl(connectionInfo, logger, cb, app) { - return getExternalBrowserUrl(connectionInfo, logger, cb, app); - }, + generateContainerScript, + isDropInStatements, + testConnection, + applyToInstance, + getExternalBrowserUrl, }; diff --git a/forward_engineering/api/applyToInstance.js b/forward_engineering/api/applyToInstance.js new file mode 100644 index 00000000..1e1083ef --- /dev/null +++ b/forward_engineering/api/applyToInstance.js @@ -0,0 +1,18 @@ +const applyToInstanceHelper = require('../helpers/applyToInstanceHelper'); +const logInfo = require('../../reverse_engineering/helpers/logInfo'); + +async function applyToInstance(connectionInfo, logger, callback, app) { + logger.clear(); + logInfo('Apply To Instance', connectionInfo, logger); + + try { + await applyToInstanceHelper.applyToInstance(connectionInfo, logger, app); + callback(null); + } catch (error) { + callback(error); + } +} + +module.exports = { + applyToInstance, +}; diff --git a/forward_engineering/api/generateContainerScript.js b/forward_engineering/api/generateContainerScript.js new file mode 100644 index 00000000..3e92c96d --- /dev/null +++ b/forward_engineering/api/generateContainerScript.js @@ -0,0 +1,16 @@ +const { generateScript } = require('./generateScript'); + +function generateContainerScript(data, logger, callback, app) { + try { + data.jsonSchema = data.collections[0]; + generateScript(data, logger, callback, app); + } catch (error) { + logger.log('error', { message: error.message, stack: error.stack }, 'MS SQL Server Forward-Engineering Error'); + + callback({ message: error.message, stack: error.stack }); + } +} + +module.exports = { + generateContainerScript, +}; diff --git a/forward_engineering/api/generateScript.js b/forward_engineering/api/generateScript.js new file mode 100644 index 00000000..2a1aef17 --- /dev/null +++ b/forward_engineering/api/generateScript.js @@ -0,0 +1,34 @@ +const { + parseDataForEntityLevelScript, + buildEntityLevelAlterScript, +} = require('../helpers/alterScriptHelpers/alterScriptBuilder'); + +/** + * @typedef {import('../types/coreApplicationTypes').App} App + * @typedef {import('../types/coreApplicationTypes').Logger} Logger + * @typedef {import('../types/coreApplicationTypes').CoreData} CoreData + * @typedef {import('../types/coreApplicationTypes').PluginError} PluginError + **/ + +/** + * @param data {CoreData} + * @param logger {Logger} + * @param callback {PluginCallback} + * @param app {App} + * */ +function generateScript(data, logger, callback, app) { + try { + const parsedData = parseDataForEntityLevelScript(data, app); + const scripts = buildEntityLevelAlterScript(data, app)(parsedData); + + callback(null, scripts); + } catch (error) { + logger.log('error', { message: error.message, stack: error.stack }, 'MS SQL Server Forward-Engineering Error'); + + callback({ message: error.message, stack: error.stack }); + } +} + +module.exports = { + generateScript, +}; diff --git a/forward_engineering/api/isDropInStatements.js b/forward_engineering/api/isDropInStatements.js new file mode 100644 index 00000000..2c035787 --- /dev/null +++ b/forward_engineering/api/isDropInStatements.js @@ -0,0 +1,25 @@ +const { DROP_STATEMENTS } = require('../helpers/constants'); +const { generateContainerScript } = require('./generateContainerScript'); +const { generateScript } = require('./generateScript'); + +function isDropInStatements(data, logger, callback, app) { + try { + const cb = (error, script = '') => + callback( + error, + DROP_STATEMENTS.some(statement => script.includes(statement)), + ); + + if (data.level === 'container') { + generateContainerScript(data, logger, cb, app); + } else { + generateScript(data, logger, cb, app); + } + } catch (e) { + callback({ message: e.message, stack: e.stack }); + } +} + +module.exports = { + isDropInStatements, +}; diff --git a/forward_engineering/api/testConnection.js b/forward_engineering/api/testConnection.js new file mode 100644 index 00000000..93477ea6 --- /dev/null +++ b/forward_engineering/api/testConnection.js @@ -0,0 +1,28 @@ +const { getExternalBrowserUrl, connect } = require('../../reverse_engineering/api'); +const logInfo = require('../../reverse_engineering/helpers/logInfo'); +const { logDatabaseVersion } = require('../../reverse_engineering/reverseEngineeringService/reverseEngineeringService'); + +async function getExternalBrowserUrlLocal(connectionInfo, logger, cb, app) { + return getExternalBrowserUrl(connectionInfo, logger, cb, app); +} + +async function testConnection(connectionInfo, logger, callback, app) { + try { + logInfo('Test connection', connectionInfo, logger); + if (connectionInfo.authMethod === 'Azure Active Directory (MFA)') { + await getExternalBrowserUrlLocal(connectionInfo, logger, callback, app); + } else { + const client = await connect(connectionInfo, logger, () => {}, app); + await logDatabaseVersion({ client, logger }); + } + callback(null); + } catch (error) { + logger.log('error', { message: error.message, stack: error.stack, error }, 'Test connection'); + callback({ message: error.message, stack: error.stack }); + } +} + +module.exports = { + testConnection, + getExternalBrowserUrl: getExternalBrowserUrlLocal, +}; diff --git a/package-lock.json b/package-lock.json index 3e463eaa..840c889c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "SQLServer", - "version": "0.2.21", + "version": "0.2.23", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "SQLServer", - "version": "0.2.21", + "version": "0.2.23", "dependencies": { "@azure/msal-node": "1.18.4", "axios": "1.7.4",