diff --git a/api/fe.js b/api/fe.js new file mode 100644 index 0000000..cbafddd --- /dev/null +++ b/api/fe.js @@ -0,0 +1,7 @@ +const { generateScript } = require('../forward_engineering/generateScript'); +const { generateContainerScript } = require('../forward_engineering/generateContainerScript'); + +module.exports = { + generateScript, + generateContainerScript, +}; diff --git a/esbuild.package.js b/esbuild.package.js index 09709dc..527dc90 100644 --- a/esbuild.package.js +++ b/esbuild.package.js @@ -12,6 +12,7 @@ const RELEASE_FOLDER_PATH = path.join(DEFAULT_RELEASE_FOLDER_PATH, `${packageDat esbuild .build({ entryPoints: [ + path.resolve(__dirname, 'api', 'fe.js'), path.resolve(__dirname, 'forward_engineering', 'api.js'), path.resolve(__dirname, 'reverse_engineering', 'api.js'), ], diff --git a/forward_engineering/api.js b/forward_engineering/api.js index 894655c..a943d6e 100644 --- a/forward_engineering/api.js +++ b/forward_engineering/api.js @@ -6,7 +6,7 @@ * @typedef {import('../shared/types').Callback} Callback */ -const { get, first } = require('lodash'); +const { first } = require('lodash'); const connectionHelper = require('../shared/helpers/connectionHelper'); const clusterHelper = require('../shared/helpers/clusterHelper'); const logHelper = require('../shared/helpers/logHelper'); @@ -18,8 +18,6 @@ const { ERROR_HAS_BEEN_THROWN_WHILE_CONNECTING_TO_BUCKET, ERROR_HAS_BEEN_THROWN_WHILE_CREATING_BUCKET_IN_COUCHBASE_INSTANCE, ERROR_HAS_BEEN_THROWN_WHILE_APPLYING_SCRIPT_TO_COUCHBASE_INSTANCE, - GENERATING_CONTAINER_SCRIPT, - GENERATING_ENTITY_SCRIPT, CREATING_A_BUCKET, } = require('../shared/enums/staticMessages'); const { @@ -28,125 +26,9 @@ const { getSuccessfullyCreatedBucketMessage, } = require('../shared/enums/dynamicMessages'); const { HTTP_ERROR_CODES } = require('../shared/enums/httpCodes'); - const { applyScript, logApplyScriptAttempt } = require('./services/applyToInstanceService'); -const ForwardEngineeringScriptBuilder = require('./services/forwardEngineeringScriptBuilder'); - -const includeSamples = (additionalOptions = []) => - Boolean(additionalOptions.find(option => option.id === 'INCLUDE_SAMPLES' && option.value)); - -/** - * @param {ConnectionInfo} connectionInfo - * @param {AppLogger} appLogger - * @param {Callback} callback - * @param {App} app - */ -const generateContainerScript = async (connectionInfo, appLogger, callback, app) => { - const logger = logHelper.createLogger({ - title: GENERATING_CONTAINER_SCRIPT, - hiddenKeys: connectionInfo.hiddenKeys, - logger: appLogger, - }); - - try { - const scriptBuilder = new ForwardEngineeringScriptBuilder(); - - const { jsonData, collections, options } = connectionInfo; - const { origin, additionalOptions } = options; - const rawScope = get(connectionInfo.containerData, '[0]', {}); - const scope = { - ...rawScope, - bucketName: rawScope?.bucket ?? '', - }; - const collectionsData = collections.map(schema => ({ - ...JSON.parse(schema), - namespace: scope?.namespace, - bucketName: scope?.bucketName, - scopeName: scope?.name, - })); - - scriptBuilder.addScopeScript(scope); - collectionsData.forEach(collection => scriptBuilder.addCollectionScripts(collection)); - - if (!includeSamples(additionalOptions)) { - const { script } = scriptBuilder.buildScriptSeparateFromInsertScripts(); - return callback(null, script); - } - - scriptBuilder.addContainerInsertScripts({ collections: collectionsData, jsonData }); - - if (origin !== 'ui') { - return callback(null, scriptBuilder.buildScriptConcatenatedWithInsertScripts('\n\n')); - } - - const { script, insertScripts } = scriptBuilder.buildScriptSeparateFromInsertScripts(); - callback(null, [ - { title: 'Couchbase script', script }, - { - title: 'Sample data', - script: insertScripts, - }, - ]); - } catch (error) { - logger.error(error); - - callback({ message: error.message, stack: error.stack }); - } -}; - -/** - * @param {ConnectionInfo} connectionInfo - * @param {AppLogger} appLogger - * @param {Callback} callback - * @param {App} app - */ -const generateScript = async (connectionInfo, appLogger, callback, app) => { - const logger = logHelper.createLogger({ - title: GENERATING_ENTITY_SCRIPT, - hiddenKeys: connectionInfo.hiddenKeys, - logger: appLogger, - }); - - try { - const scriptBuilder = new ForwardEngineeringScriptBuilder(); - - const { jsonData, jsonSchema, containerData, options } = connectionInfo; - const { additionalOptions } = options; - const scope = get(containerData, '[0]', {}); - const rawCollectionData = JSON.parse(jsonSchema); - const collectionData = { - ...rawCollectionData, - namespace: scope?.namespace, - bucketName: scope?.bucket, - scopeName: scope?.name, - collectionName: rawCollectionData.title, - }; - - scriptBuilder.addCollectionScripts(collectionData); - if (!includeSamples(additionalOptions)) { - const { script } = scriptBuilder.buildScriptSeparateFromInsertScripts(); - return callback(null, script); - } - - scriptBuilder.addCollectionInsertScripts({ - jsonData, - collection: collectionData, - }); - - const { script, insertScripts } = scriptBuilder.buildScriptSeparateFromInsertScripts(); - callback(null, [ - { title: 'Couchbase script', script }, - { - title: 'Sample data', - script: insertScripts, - }, - ]); - } catch (error) { - logger.error(error); - - callback({ message: error.message, stack: error.stack }); - } -}; +const { generateContainerScript } = require('./generateContainerScript'); +const { generateScript } = require('./generateScript'); /** * @param {ConnectionInfo} connectionInfo diff --git a/forward_engineering/generateContainerScript.js b/forward_engineering/generateContainerScript.js new file mode 100644 index 0000000..955c022 --- /dev/null +++ b/forward_engineering/generateContainerScript.js @@ -0,0 +1,68 @@ +const { get } = require('lodash'); +const logHelper = require('../shared/helpers/logHelper'); +const ForwardEngineeringScriptBuilder = require('./services/forwardEngineeringScriptBuilder'); +const { GENERATING_CONTAINER_SCRIPT } = require('../shared/enums/staticMessages'); +const { includeSamples } = require('./utils/includeSamples'); + +/** + * @param {ConnectionInfo} connectionInfo + * @param {AppLogger} appLogger + * @param {Callback} callback + * @param {App} app + */ +const generateContainerScript = async (connectionInfo, appLogger, callback, app) => { + const logger = logHelper.createLogger({ + title: GENERATING_CONTAINER_SCRIPT, + hiddenKeys: connectionInfo.hiddenKeys, + logger: appLogger, + }); + + try { + const scriptBuilder = new ForwardEngineeringScriptBuilder(); + + const { jsonData, collections, options } = connectionInfo; + const { origin, additionalOptions } = options; + const rawScope = get(connectionInfo.containerData, '[0]', {}); + const scope = { + ...rawScope, + bucketName: rawScope?.bucket ?? '', + }; + const collectionsData = collections.map(schema => ({ + ...JSON.parse(schema), + namespace: scope?.namespace, + bucketName: scope?.bucketName, + scopeName: scope?.name, + })); + + scriptBuilder.addScopeScript(scope); + collectionsData.forEach(collection => scriptBuilder.addCollectionScripts(collection)); + + if (!includeSamples(additionalOptions)) { + const { script } = scriptBuilder.buildScriptSeparateFromInsertScripts(); + return callback(null, script); + } + + scriptBuilder.addContainerInsertScripts({ collections: collectionsData, jsonData }); + + if (origin !== 'ui') { + return callback(null, scriptBuilder.buildScriptConcatenatedWithInsertScripts('\n\n')); + } + + const { script, insertScripts } = scriptBuilder.buildScriptSeparateFromInsertScripts(); + callback(null, [ + { title: 'Couchbase script', script }, + { + title: 'Sample data', + script: insertScripts, + }, + ]); + } catch (error) { + logger.error(error); + + callback({ message: error.message, stack: error.stack }); + } +}; + +module.exports = { + generateContainerScript, +}; diff --git a/forward_engineering/generateScript.js b/forward_engineering/generateScript.js new file mode 100644 index 0000000..ecac692 --- /dev/null +++ b/forward_engineering/generateScript.js @@ -0,0 +1,63 @@ +const { get } = require('lodash'); +const logHelper = require('../shared/helpers/logHelper'); +const { GENERATING_ENTITY_SCRIPT } = require('../shared/enums/staticMessages'); +const ForwardEngineeringScriptBuilder = require('./services/forwardEngineeringScriptBuilder'); +const { includeSamples } = require('./utils/includeSamples'); + +/** + * @param {ConnectionInfo} connectionInfo + * @param {AppLogger} appLogger + * @param {Callback} callback + * @param {App} app + */ +const generateScript = async (connectionInfo, appLogger, callback, app) => { + const logger = logHelper.createLogger({ + title: GENERATING_ENTITY_SCRIPT, + hiddenKeys: connectionInfo.hiddenKeys, + logger: appLogger, + }); + + try { + const scriptBuilder = new ForwardEngineeringScriptBuilder(); + + const { jsonData, jsonSchema, containerData, options } = connectionInfo; + const { additionalOptions } = options; + const scope = get(containerData, '[0]', {}); + const rawCollectionData = JSON.parse(jsonSchema); + const collectionData = { + ...rawCollectionData, + namespace: scope?.namespace, + bucketName: scope?.bucket, + scopeName: scope?.name, + collectionName: rawCollectionData.title, + }; + + scriptBuilder.addCollectionScripts(collectionData); + if (!includeSamples(additionalOptions)) { + const { script } = scriptBuilder.buildScriptSeparateFromInsertScripts(); + return callback(null, script); + } + + scriptBuilder.addCollectionInsertScripts({ + jsonData, + collection: collectionData, + }); + + const { script, insertScripts } = scriptBuilder.buildScriptSeparateFromInsertScripts(); + callback(null, [ + { title: 'Couchbase script', script }, + { + title: 'Sample data', + script: insertScripts, + }, + ]); + } catch (error) { + logger.error(error); + + callback({ message: error.message, stack: error.stack }); + } +}; + +module.exports = { + generateScript, +}; diff --git a/forward_engineering/utils/includeSamples.js b/forward_engineering/utils/includeSamples.js new file mode 100644 index 0000000..62a35da --- /dev/null +++ b/forward_engineering/utils/includeSamples.js @@ -0,0 +1,6 @@ +const includeSamples = (additionalOptions = []) => + Boolean(additionalOptions.find(option => option.id === 'INCLUDE_SAMPLES' && option.value)); + +module.exports = { + includeSamples, +}; diff --git a/package-lock.json b/package-lock.json index 658a340..552aaba 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "CouchbaseV7Plus", - "version": "0.2.3", + "version": "0.2.5", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "CouchbaseV7Plus", - "version": "0.2.3", + "version": "0.2.5", "dependencies": { "@hackolade/fetch": "1.1.0", "antlr4": "4.9.2", diff --git a/package.json b/package.json index 2947003..4ab6659 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,8 @@ }, "scripts": { "lint": "eslint . --max-warnings=0", - "package": "node esbuild.package.js" + "package": "node esbuild.package.js", + "postinstall": "npx simple-git-hooks" }, "dependencies": { "@hackolade/fetch": "1.1.0", @@ -57,4 +58,4 @@ "prettier": "3.2.5", "simple-git-hooks": "2.11.1" } -} \ No newline at end of file +}