Skip to content

Commit

Permalink
HCK-9607: browser support (#48)
Browse files Browse the repository at this point in the history
* feat: allowed FE features in browser

* chore: added `postinstall` hook
  • Loading branch information
chulanovskyi-bs authored Jan 23, 2025
1 parent dc9f31e commit 89630c6
Show file tree
Hide file tree
Showing 8 changed files with 153 additions and 125 deletions.
7 changes: 7 additions & 0 deletions api/fe.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
const { generateScript } = require('../forward_engineering/generateScript');
const { generateContainerScript } = require('../forward_engineering/generateContainerScript');

module.exports = {
generateScript,
generateContainerScript,
};
1 change: 1 addition & 0 deletions esbuild.package.js
Original file line number Diff line number Diff line change
Expand Up @@ -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'),
],
Expand Down
124 changes: 3 additions & 121 deletions forward_engineering/api.js
Original file line number Diff line number Diff line change
Expand Up @@ -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');
Expand All @@ -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 {
Expand All @@ -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
Expand Down
68 changes: 68 additions & 0 deletions forward_engineering/generateContainerScript.js
Original file line number Diff line number Diff line change
@@ -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,
};
63 changes: 63 additions & 0 deletions forward_engineering/generateScript.js
Original file line number Diff line number Diff line change
@@ -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,
};
6 changes: 6 additions & 0 deletions forward_engineering/utils/includeSamples.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
const includeSamples = (additionalOptions = []) =>
Boolean(additionalOptions.find(option => option.id === 'INCLUDE_SAMPLES' && option.value));

module.exports = {
includeSamples,
};
4 changes: 2 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 3 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down Expand Up @@ -57,4 +58,4 @@
"prettier": "3.2.5",
"simple-git-hooks": "2.11.1"
}
}
}

0 comments on commit 89630c6

Please sign in to comment.