Skip to content

Commit 7363491

Browse files
HCK-9680: browser support (#23)
<!--do not remove this marker, its needed to replace info when ticket title is updated --> <!--jira-description-action-hidden-marker-start--> <table> <td> <a href="https://hackolade.atlassian.net/browse/HCK-9680" title="HCK-9680" target="_blank"><img alt="Sub-bug" src="https://hackolade.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10303?size=medium" />HCK-9680</a> [Browser][DocumentDB][FE] Unable to generate script in browser </td></table> <br /> <!--jira-description-action-hidden-marker-end--> ## Technical details * allowed FE features in browser
1 parent ecc1603 commit 7363491

File tree

7 files changed

+6302
-6137
lines changed

7 files changed

+6302
-6137
lines changed

api/fe.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
const { generateScript } = require('../forward_engineering/generateScript');
2+
const { generateContainerScript } = require('../forward_engineering/generateContainerScript');
3+
4+
module.exports = {
5+
generateScript,
6+
generateContainerScript,
7+
};

esbuild.package.js

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ const fs = require('fs');
22
const path = require('path');
33
const esbuild = require('esbuild');
44
const { clean } = require('esbuild-plugin-clean');
5+
const { copy } = require('esbuild-plugin-copy');
56
const { copyFolderFiles, addReleaseFlag } = require('@hackolade/hck-esbuild-plugins-pack');
67
const { EXCLUDED_EXTENSIONS, EXCLUDED_FILES, DEFAULT_RELEASE_FOLDER_PATH } = require('./buildConstants');
78

@@ -11,11 +12,11 @@ const RELEASE_FOLDER_PATH = path.join(DEFAULT_RELEASE_FOLDER_PATH, `${packageDat
1112
esbuild
1213
.build({
1314
entryPoints: [
15+
path.resolve(__dirname, 'api', 'fe.js'),
1416
path.resolve(__dirname, 'forward_engineering', 'api.js'),
1517
path.resolve(__dirname, 'reverse_engineering', 'api.js'),
1618
],
1719
bundle: true,
18-
treeShaking: true,
1920
keepNames: true,
2021
platform: 'node',
2122
target: 'node16',
@@ -26,6 +27,12 @@ esbuild
2627
clean({
2728
patterns: [DEFAULT_RELEASE_FOLDER_PATH],
2829
}),
30+
copy({
31+
assets: {
32+
from: [path.join('node_modules', 'lodash', '**', '*')],
33+
to: [path.join('node_modules', 'lodash')],
34+
},
35+
}),
2936
copyFolderFiles({
3037
fromPath: __dirname,
3138
targetFolderPath: RELEASE_FOLDER_PATH,
@@ -34,6 +41,6 @@ esbuild
3441
}),
3542
addReleaseFlag(path.resolve(RELEASE_FOLDER_PATH, 'package.json')),
3643
],
37-
external: ['electron'],
44+
external: ['electron', 'lodash'],
3845
})
3946
.catch(() => process.exit(1));

forward_engineering/api.js

Lines changed: 7 additions & 85 deletions
Original file line numberDiff line numberDiff line change
@@ -1,88 +1,10 @@
1-
const _ = require('lodash');
2-
const applyToInstanceHelper = require('./helpers/applyToInstanceHelper');
3-
const scriptHelper = require('./helpers/scriptHelper');
1+
const { generateScript } = require('./generateScript');
2+
const { generateContainerScript } = require('./generateContainerScript');
3+
const { applyToInstance, testConnection } = require('./helpers/applyToInstanceHelper');
44

55
module.exports = {
6-
generateContainerScript(data, logger, callback) {
7-
try {
8-
const insertSamplesOption =
9-
_.get(data, 'options.additionalOptions', []).find(option => option.id === 'INCLUDE_SAMPLES') || {};
10-
const withSamples = data.options.origin !== 'ui';
11-
const useDb = scriptHelper.useDbStatement(data.containerData);
12-
let script =
13-
useDb +
14-
'\n\n' +
15-
data.entities
16-
.map(entityId => {
17-
const entityData = data.entityData[entityId];
18-
const script = scriptHelper.getScript({
19-
entityData,
20-
containerData: data.containerData,
21-
jsonSchema: JSON.parse(data.jsonSchema[entityId]),
22-
definitions: {
23-
internal: JSON.parse(data.internalDefinitions[entityId]),
24-
model: JSON.parse(data.modelDefinitions),
25-
external: JSON.parse(data.externalDefinitions),
26-
},
27-
});
28-
29-
if (entityData?.[0]?.isActivated) {
30-
return script;
31-
}
32-
33-
return `/*\n${script}\n*/`;
34-
})
35-
.join('\n\n');
36-
37-
const samples = scriptHelper.insertSamples(data);
38-
script += withSamples ? '\n' + samples : '';
39-
40-
if (withSamples || !insertSamplesOption.value) {
41-
return callback(null, script);
42-
}
43-
44-
return callback(null, [
45-
{ title: 'MongoDB script', script },
46-
{
47-
title: 'Sample data',
48-
script: samples,
49-
},
50-
]);
51-
} catch (e) {
52-
const error = { message: e.message, stack: e.stack };
53-
logger.log('error', error, 'DocumentDB forward engineering error');
54-
callback(error);
55-
}
56-
},
57-
58-
generateScript(data, logger, callback) {
59-
try {
60-
const useDb = scriptHelper.useDbStatement(data.containerData);
61-
const script = scriptHelper.getScript({
62-
containerData: data.containerData,
63-
entityData: data.entityData,
64-
jsonSchema: JSON.parse(data.jsonSchema),
65-
definitions: {
66-
model: JSON.parse(data.modelDefinitions),
67-
internal: JSON.parse(data.internalDefinitions),
68-
external: JSON.parse(data.externalDefinitions),
69-
},
70-
});
71-
const samples = scriptHelper.insertSample({
72-
containerData: data.containerData,
73-
entityData: data.entityData,
74-
sample: data.jsonData,
75-
});
76-
77-
return callback(null, [useDb, script, samples].join('\n\n'));
78-
} catch (e) {
79-
const error = { message: e.message, stack: e.stack };
80-
logger.log('error', error, 'DocumentDB forward engineering error');
81-
callback(error);
82-
}
83-
},
84-
85-
applyToInstance: applyToInstanceHelper.applyToInstance,
86-
87-
testConnection: applyToInstanceHelper.testConnection,
6+
generateScript,
7+
generateContainerScript,
8+
applyToInstance,
9+
testConnection,
8810
};
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
const _ = require('lodash');
2+
const scriptHelper = require('./helpers/scriptHelper');
3+
4+
const generateContainerScript = (data, logger, callback) => {
5+
try {
6+
const insertSamplesOption =
7+
_.get(data, 'options.additionalOptions', []).find(option => option.id === 'INCLUDE_SAMPLES') || {};
8+
const withSamples = data.options.origin !== 'ui';
9+
const useDb = scriptHelper.useDbStatement(data.containerData);
10+
let script =
11+
useDb +
12+
'\n\n' +
13+
data.entities
14+
.map(entityId => {
15+
const entityData = data.entityData[entityId];
16+
const script = scriptHelper.getScript({
17+
entityData,
18+
containerData: data.containerData,
19+
jsonSchema: JSON.parse(data.jsonSchema[entityId]),
20+
definitions: {
21+
internal: JSON.parse(data.internalDefinitions[entityId]),
22+
model: JSON.parse(data.modelDefinitions),
23+
external: JSON.parse(data.externalDefinitions),
24+
},
25+
});
26+
27+
if (entityData?.[0]?.isActivated) {
28+
return script;
29+
}
30+
31+
return `/*\n${script}\n*/`;
32+
})
33+
.join('\n\n');
34+
35+
const samples = scriptHelper.insertSamples(data);
36+
script += withSamples ? '\n' + samples : '';
37+
38+
if (withSamples || !insertSamplesOption.value) {
39+
return callback(null, script);
40+
}
41+
42+
return callback(null, [
43+
{ title: 'MongoDB script', script },
44+
{
45+
title: 'Sample data',
46+
script: samples,
47+
},
48+
]);
49+
} catch (e) {
50+
const error = { message: e.message, stack: e.stack };
51+
logger.log('error', error, 'DocumentDB forward engineering error');
52+
callback(error);
53+
}
54+
};
55+
56+
module.exports = {
57+
generateContainerScript,
58+
};
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
const scriptHelper = require('./helpers/scriptHelper');
2+
3+
const generateScript = (data, logger, callback) => {
4+
try {
5+
const useDb = scriptHelper.useDbStatement(data.containerData);
6+
const script = scriptHelper.getScript({
7+
containerData: data.containerData,
8+
entityData: data.entityData,
9+
jsonSchema: JSON.parse(data.jsonSchema),
10+
definitions: {
11+
model: JSON.parse(data.modelDefinitions),
12+
internal: JSON.parse(data.internalDefinitions),
13+
external: JSON.parse(data.externalDefinitions),
14+
},
15+
});
16+
const samples = scriptHelper.insertSample({
17+
containerData: data.containerData,
18+
entityData: data.entityData,
19+
sample: data.jsonData,
20+
});
21+
22+
return callback(null, [useDb, script, samples].join('\n\n'));
23+
} catch (e) {
24+
const error = { message: e.message, stack: e.stack };
25+
logger.log('error', error, 'DocumentDB forward engineering error');
26+
callback(error);
27+
}
28+
};
29+
30+
module.exports = {
31+
generateScript,
32+
};

0 commit comments

Comments
 (0)