Skip to content

Commit ec30990

Browse files
authored
HCK-9614: adapt FE to work in the browser (#146)
* HCK-9614: adapt FE to work in the browser * HCK-9614: Update lodash handling * HCK-9614: fix an issue with config loading * HCK-9614: Fix warnings * HCK-9614: change let to const * HCK-9614: fix small typo * HCK-9614: Remove'use strict' * HCK-9614: Change propertyName to fieldName * HCK-9614: Adapt config properties * HCK-9614: fix wrong usage of lodash * HCK-9614: fix wrong usage of lodash * HCK-9614: rework more lodash usage * HCK-9614: Possible solution for the failing test * HCK-9614: Rework async dependency
1 parent a076855 commit ec30990

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

43 files changed

+824
-626
lines changed

api/fe.js

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

esbuild.package.js

Lines changed: 9 additions & 0 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,6 +12,7 @@ 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, 'forward_engineering', 'ddlProvider', 'ddlProvider.js'),
1618
path.resolve(__dirname, 'reverse_engineering', 'api.js'),
@@ -22,10 +24,17 @@ esbuild
2224
outdir: RELEASE_FOLDER_PATH,
2325
minify: true,
2426
logLevel: 'info',
27+
external: ['lodash'],
2528
plugins: [
2629
clean({
2730
patterns: [DEFAULT_RELEASE_FOLDER_PATH],
2831
}),
32+
copy({
33+
assets: {
34+
from: [path.join('node_modules', 'lodash', '**', '*')],
35+
to: [path.join('node_modules', 'lodash')],
36+
},
37+
}),
2938
copyFolderFiles({
3039
fromPath: __dirname,
3140
targetFolderPath: RELEASE_FOLDER_PATH,

forward_engineering/api.js

Lines changed: 8 additions & 209 deletions
Original file line numberDiff line numberDiff line change
@@ -1,183 +1,14 @@
1-
'use strict';
2-
3-
const {
4-
retrieveContainerName,
5-
retrieveEntityName,
6-
retrieveUDA,
7-
retrieveUDF,
8-
retrieveIndexes,
9-
retrieveIsItemActivated,
10-
commentDeactivatedStatement,
11-
getUserDefinedAggregations,
12-
getUserDefinedFunctions,
13-
} = require('./helpers/generalHelper');
14-
const { getTableStatement } = require('./helpers/tableHelper');
15-
const { sortUdt, getUdtMap, getUdtScripts, prepareDefinitions } = require('./helpers/udtHelper');
16-
const { getIndexes } = require('./helpers/indexHelper');
17-
const { getKeyspaceStatement } = require('./helpers/keyspaceHelper');
18-
const { getViewScript } = require('./helpers/viewHelper');
19-
const { getCreateTableScript } = require('./helpers/createHelper');
20-
const { setDependencies } = require('./helpers/appDependencies');
211
const { applyToInstance, testConnection } = require('./helpers/dbConnectionService/index');
22-
const { getScriptOptions } = require('./helpers/getScriptOptions');
23-
const { buildContainerLevelAlterScript, isDropInStatements } = require('./helpers/alterScriptBuilder');
2+
const { generateScript } = require('./generateScript');
3+
const { generateViewScript } = require('./generateViewScript');
4+
const { generateContainerScript } = require('./generateContainerScript');
5+
const { isDropInStatements } = require('./isDropInStatements');
246

257
module.exports = {
26-
generateScript(data, logger, callback, app) {
27-
try {
28-
setDependencies(app);
29-
const { udtTypeMap, modelDefinitions, externalDefinitions } = prepareDefinitions(data);
30-
const jsonSchema = JSON.parse(data.jsonSchema);
31-
const internalDefinitions = sortUdt(JSON.parse(data.internalDefinitions));
32-
data = { ...data, jsonSchema, udtTypeMap, modelDefinitions, externalDefinitions, internalDefinitions };
33-
34-
if (data.isUpdateScript) {
35-
data.scriptOptions = getScriptOptions(data);
36-
37-
callback(null, buildContainerLevelAlterScript(data.jsonSchema, udtTypeMap, data));
38-
} else {
39-
const isKeyspaceActivated = retrieveIsItemActivated(data.containerData);
40-
const statement = `${getKeyspaceStatement(data.containerData)}\n\n${getCreateTableScript(data, isKeyspaceActivated)}`;
41-
const script = commentDeactivatedStatement(statement, isKeyspaceActivated);
42-
callback(null, script);
43-
}
44-
} catch (e) {
45-
logger.log('error', { message: e.message, stack: e.stack }, 'Cassandra Forward-Engineering Error');
46-
47-
setTimeout(() => {
48-
callback({ message: e.message, stack: e.stack });
49-
}, 150);
50-
}
51-
},
52-
53-
generateViewScript(data, logger, callback, app) {
54-
setDependencies(app);
55-
const viewSchema = JSON.parse(data.jsonSchema || '{}');
56-
const entitySchema = JSON.parse(data.jsonSchema[viewSchema.viewOn] || '{}');
57-
58-
const script = getViewScript({
59-
schema: viewSchema,
60-
entitySchema,
61-
viewData: data.viewData,
62-
entityData: data.entityData,
63-
containerData: data.containerData,
64-
collectionRefsDefinitionsMap: data.collectionRefsDefinitionsMap,
65-
ifNotExist: viewSchema.viewIfNotExist,
66-
});
67-
68-
callback(null, script);
69-
},
70-
71-
generateContainerScript(data, logger, callback, app) {
72-
try {
73-
setDependencies(app);
74-
if (data.isUpdateScript) {
75-
const { udtTypeMap, modelDefinitions, externalDefinitions } = prepareDefinitions(data);
76-
data = { ...data, udtTypeMap, modelDefinitions, externalDefinitions };
77-
data.scriptOptions = getScriptOptions(data);
78-
79-
const scripts = data.entities.map(entityId => {
80-
const jsonSchema = JSON.parse(data.jsonSchema[entityId]);
81-
data.internalDefinitions = sortUdt(JSON.parse(data.internalDefinitions[entityId]));
82-
return buildContainerLevelAlterScript(jsonSchema, data.udtTypeMap, data);
83-
});
84-
callback(null, scripts.filter(Boolean).join('\n\n'));
85-
} else {
86-
const modelDefinitions = sortUdt(JSON.parse(data.modelDefinitions));
87-
const externalDefinitions = JSON.parse(data.externalDefinitions);
88-
const containerData = data.containerData;
89-
let cqlScriptData = [];
90-
91-
const containerName = retrieveContainerName(containerData);
92-
const keyspace = getKeyspaceStatement(containerData);
93-
const isKeyspaceActivated = retrieveIsItemActivated(containerData);
94-
95-
const generalUdtTypeMap = getUdtMap([modelDefinitions, externalDefinitions]);
96-
let generalUDT = getUdtScripts(
97-
containerName,
98-
[externalDefinitions, modelDefinitions],
99-
generalUdtTypeMap,
100-
isKeyspaceActivated,
101-
);
102-
103-
const UDF = getUserDefinedFunctions(retrieveUDF(containerData));
104-
const UDA = getUserDefinedAggregations(retrieveUDA(containerData));
105-
106-
const dbVersion = data.modelData[0].dbVersion;
107-
108-
cqlScriptData.push(keyspace, ...generalUDT);
109-
110-
data.entities.forEach(entityId => {
111-
const internalDefinitions = sortUdt(JSON.parse(data.internalDefinitions[entityId]));
112-
const jsonSchema = JSON.parse(data.jsonSchema[entityId]);
113-
const entityData = data.entityData[entityId];
114-
const udtTypeMap = Object.assign(
115-
{},
116-
generalUdtTypeMap,
117-
getUdtMap([internalDefinitions, jsonSchema]),
118-
);
119-
120-
const entityName = retrieveEntityName(entityData);
121-
const isEntityActivated = retrieveIsItemActivated(entityData);
122-
const dataSources = [jsonSchema, modelDefinitions, internalDefinitions, externalDefinitions];
123-
const internalUdt = getUdtScripts(
124-
containerName,
125-
[internalDefinitions, jsonSchema],
126-
udtTypeMap,
127-
isKeyspaceActivated && isEntityActivated,
128-
).map(udtStatement =>
129-
commentDeactivatedStatement(udtStatement, isEntityActivated, isKeyspaceActivated),
130-
);
131-
132-
const table = getTableStatement({
133-
tableData: jsonSchema,
134-
tableMetaData: entityData,
135-
keyspaceMetaData: containerData,
136-
dataSources,
137-
udtTypeMap,
138-
isKeyspaceActivated,
139-
});
140-
const indexes = getIndexes(
141-
retrieveIndexes(entityData, dbVersion),
142-
dataSources,
143-
entityName,
144-
containerName,
145-
isEntityActivated,
146-
isKeyspaceActivated,
147-
dbVersion,
148-
);
149-
150-
cqlScriptData.push(...internalUdt, table, indexes);
151-
});
152-
153-
cqlScriptData = cqlScriptData.concat(
154-
data.views.map(viewId => {
155-
const viewSchema = JSON.parse(data.jsonSchema[viewId] || '{}');
156-
157-
return getViewScript({
158-
schema: viewSchema,
159-
viewData: data.viewData[viewId],
160-
entityData: data.entityData[viewSchema.viewOn],
161-
containerData: data.containerData,
162-
collectionRefsDefinitionsMap: data.collectionRefsDefinitionsMap,
163-
isKeyspaceActivated,
164-
ifNotExist: viewSchema.viewIfNotExist,
165-
});
166-
}),
167-
);
168-
169-
cqlScriptData.push(UDF, UDA);
170-
171-
callback(null, commentDeactivatedStatement(getScript(cqlScriptData), isKeyspaceActivated));
172-
}
173-
} catch (e) {
174-
logger.log('error', { message: e.message, stack: e.stack }, 'Cassandra Forward-Engineering Error');
175-
176-
setTimeout(() => {
177-
callback({ message: e.message, stack: e.stack });
178-
}, 150);
179-
}
180-
},
8+
generateScript,
9+
generateViewScript,
10+
generateContainerScript,
11+
isDropInStatements,
18112

18213
applyToInstance(connectionInfo, logger, callback, app) {
18314
logger.clear();
@@ -195,36 +26,4 @@ module.exports = {
19526
testConnection(connectionInfo, logger, callback, app) {
19627
testConnection(connectionInfo, app).then(callback, callback);
19728
},
198-
199-
isDropInStatements(data, logger, callback, app) {
200-
try {
201-
setDependencies(app);
202-
let result;
203-
const { udtTypeMap, modelDefinitions, externalDefinitions } = prepareDefinitions(data);
204-
205-
if (data.level === 'container') {
206-
data = { ...data, udtTypeMap, modelDefinitions, externalDefinitions };
207-
result = data.entities
208-
.map(entityId => {
209-
const jsonSchema = JSON.parse(data.jsonSchema[entityId]);
210-
data.internalDefinitions = sortUdt(JSON.parse(data.internalDefinitions[entityId]));
211-
return isDropInStatements(jsonSchema, data.udtTypeMap, data);
212-
})
213-
.some(Boolean);
214-
} else if (data.level === 'entity') {
215-
const jsonSchema = JSON.parse(data.jsonSchema);
216-
const internalDefinitions = sortUdt(JSON.parse(data.internalDefinitions));
217-
data = { ...data, udtTypeMap, modelDefinitions, externalDefinitions, jsonSchema, internalDefinitions };
218-
result = isDropInStatements(data.jsonSchema, data.udtTypeMap, data);
219-
}
220-
221-
callback(null, result);
222-
} catch (e) {
223-
callback({ message: e.message, stack: e.stack });
224-
}
225-
},
226-
};
227-
228-
const getScript = structure => {
229-
return structure.filter(item => item).join('\n\n');
23029
};

forward_engineering/ddlProvider/ddlProvider.js

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,15 +13,14 @@ const { parseToString } = require('../helpers/tableOptionService/parseToString')
1313
const { getViewName } = require('../helpers/updateHelpers/viewHelper');
1414
const { getOptionsScript } = require('../helpers/viewHelper');
1515
const { wrapInQuotes } = require('../helpers/updateHelpers/generalHelper');
16+
const assignTemplates = require('../utils/assignTemplates');
1617

1718
const alterTablePrefix = (tableName, keySpace) =>
1819
keySpace
1920
? `ALTER TABLE ${wrapInQuotes(keySpace)}.${wrapInQuotes(tableName)}`
2021
: `ALTER TABLE ${wrapInQuotes(tableName)}`;
2122

22-
module.exports = app => {
23-
const { assignTemplates } = app.require('@hackolade/ddl-fe-utils');
24-
23+
module.exports = () => {
2524
return {
2625
dropTable(name) {
2726
return assignTemplates(templates.dropTable, { name });

0 commit comments

Comments
 (0)