@budibase/server 1.2.58-alpha.6 → 1.2.58
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/__mocks__/mongodb.ts +0 -4
- package/__mocks__/node-fetch.ts +1 -8
- package/builder/assets/index.08dd0c5e.css +6 -0
- package/builder/assets/index.5cf58e77.js +975 -0
- package/builder/assets/{vendor.67dbd8fa.js → vendor.6bcafa60.js} +1 -1
- package/builder/index.html +3 -3
- package/coverage/clover.xml +524 -549
- package/coverage/coverage-final.json +20 -20
- package/coverage/lcov-report/api/controllers/apikeys.js.html +1 -1
- package/coverage/lcov-report/api/controllers/auth.js.html +1 -1
- package/coverage/lcov-report/api/controllers/automation.js.html +1 -1
- package/coverage/lcov-report/api/controllers/backup.js.html +1 -1
- package/coverage/lcov-report/api/controllers/cloud.js.html +1 -1
- package/coverage/lcov-report/api/controllers/component.js.html +1 -1
- package/coverage/lcov-report/api/controllers/datasource.js.html +1 -1
- package/coverage/lcov-report/api/controllers/dev.js.html +1 -1
- package/coverage/lcov-report/api/controllers/index.html +1 -1
- package/coverage/lcov-report/api/controllers/integration.js.html +1 -1
- package/coverage/lcov-report/api/controllers/layout.js.html +1 -1
- package/coverage/lcov-report/api/controllers/metadata.js.html +1 -1
- package/coverage/lcov-report/api/controllers/migrations.js.html +1 -1
- package/coverage/lcov-report/api/controllers/permission.js.html +1 -1
- package/coverage/lcov-report/api/controllers/query/index.html +1 -1
- package/coverage/lcov-report/api/controllers/query/validation.js.html +1 -1
- package/coverage/lcov-report/api/controllers/role.js.html +1 -1
- package/coverage/lcov-report/api/controllers/routing.js.html +1 -1
- package/coverage/lcov-report/api/controllers/row/external.js.html +1 -1
- package/coverage/lcov-report/api/controllers/row/index.html +25 -25
- package/coverage/lcov-report/api/controllers/row/internal.js.html +1 -1
- package/coverage/lcov-report/api/controllers/row/internalSearch.js.html +191 -317
- package/coverage/lcov-report/api/controllers/row/staticFormula.js.html +1 -1
- package/coverage/lcov-report/api/controllers/row/utils.js.html +18 -27
- package/coverage/lcov-report/api/controllers/screen.js.html +1 -1
- package/coverage/lcov-report/api/controllers/script.js.html +1 -1
- package/coverage/lcov-report/api/controllers/table/bulkFormula.js.html +1 -1
- package/coverage/lcov-report/api/controllers/table/external.js.html +2 -2
- package/coverage/lcov-report/api/controllers/table/index.html +1 -1
- package/coverage/lcov-report/api/controllers/table/index.js.html +1 -1
- package/coverage/lcov-report/api/controllers/templates.js.html +1 -1
- package/coverage/lcov-report/api/controllers/user.js.html +19 -19
- package/coverage/lcov-report/api/controllers/view/exporters.js.html +1 -1
- package/coverage/lcov-report/api/controllers/view/index.html +1 -1
- package/coverage/lcov-report/api/controllers/view/index.js.html +1 -1
- package/coverage/lcov-report/api/controllers/view/utils.js.html +1 -1
- package/coverage/lcov-report/api/controllers/view/viewBuilder.js.html +1 -1
- package/coverage/lcov-report/api/controllers/webhook.js.html +1 -1
- package/coverage/lcov-report/api/index.html +1 -1
- package/coverage/lcov-report/api/index.js.html +5 -5
- package/coverage/lcov-report/api/routes/analytics.js.html +1 -1
- package/coverage/lcov-report/api/routes/apikeys.js.html +1 -1
- package/coverage/lcov-report/api/routes/auth.js.html +1 -1
- package/coverage/lcov-report/api/routes/automation.js.html +1 -1
- package/coverage/lcov-report/api/routes/backup.js.html +1 -1
- package/coverage/lcov-report/api/routes/cloud.js.html +1 -1
- package/coverage/lcov-report/api/routes/component.js.html +1 -1
- package/coverage/lcov-report/api/routes/datasource.js.html +1 -1
- package/coverage/lcov-report/api/routes/deploy.js.html +1 -1
- package/coverage/lcov-report/api/routes/dev.js.html +1 -1
- package/coverage/lcov-report/api/routes/index.html +1 -1
- package/coverage/lcov-report/api/routes/integration.js.html +1 -1
- package/coverage/lcov-report/api/routes/layout.js.html +1 -1
- package/coverage/lcov-report/api/routes/metadata.js.html +1 -1
- package/coverage/lcov-report/api/routes/migrations.js.html +1 -1
- package/coverage/lcov-report/api/routes/permission.js.html +1 -1
- package/coverage/lcov-report/api/routes/query.js.html +1 -1
- package/coverage/lcov-report/api/routes/role.js.html +1 -1
- package/coverage/lcov-report/api/routes/routing.js.html +1 -1
- package/coverage/lcov-report/api/routes/screen.js.html +1 -1
- package/coverage/lcov-report/api/routes/script.js.html +1 -1
- package/coverage/lcov-report/api/routes/table.js.html +1 -1
- package/coverage/lcov-report/api/routes/templates.js.html +1 -1
- package/coverage/lcov-report/api/routes/user.js.html +1 -1
- package/coverage/lcov-report/api/routes/utils/index.html +1 -1
- package/coverage/lcov-report/api/routes/utils/validators.js.html +1 -1
- package/coverage/lcov-report/api/routes/view.js.html +1 -1
- package/coverage/lcov-report/api/routes/webhook.js.html +1 -1
- package/coverage/lcov-report/automations/actions.js.html +1 -1
- package/coverage/lcov-report/automations/automationUtils.js.html +1 -1
- package/coverage/lcov-report/automations/bullboard.js.html +6 -9
- package/coverage/lcov-report/automations/index.html +11 -11
- package/coverage/lcov-report/automations/index.js.html +1 -1
- package/coverage/lcov-report/automations/steps/bash.js.html +1 -1
- package/coverage/lcov-report/automations/steps/delay.js.html +1 -1
- package/coverage/lcov-report/automations/steps/discord.js.html +1 -1
- package/coverage/lcov-report/automations/steps/executeQuery.js.html +1 -1
- package/coverage/lcov-report/automations/steps/executeScript.js.html +1 -1
- package/coverage/lcov-report/automations/steps/filter.js.html +1 -1
- package/coverage/lcov-report/automations/steps/index.html +1 -1
- package/coverage/lcov-report/automations/steps/integromat.js.html +1 -1
- package/coverage/lcov-report/automations/steps/loop.js.html +1 -1
- package/coverage/lcov-report/automations/steps/outgoingWebhook.js.html +1 -1
- package/coverage/lcov-report/automations/steps/queryRows.js.html +1 -1
- package/coverage/lcov-report/automations/steps/sendSmtpEmail.js.html +1 -1
- package/coverage/lcov-report/automations/steps/serverLog.js.html +1 -1
- package/coverage/lcov-report/automations/steps/slack.js.html +1 -1
- package/coverage/lcov-report/automations/steps/updateRow.js.html +1 -1
- package/coverage/lcov-report/automations/steps/utils.js.html +1 -1
- package/coverage/lcov-report/automations/steps/zapier.js.html +1 -1
- package/coverage/lcov-report/automations/triggerInfo/app.js.html +1 -1
- package/coverage/lcov-report/automations/triggerInfo/cron.js.html +1 -1
- package/coverage/lcov-report/automations/triggerInfo/index.html +1 -1
- package/coverage/lcov-report/automations/triggerInfo/index.js.html +1 -1
- package/coverage/lcov-report/automations/triggerInfo/rowDeleted.js.html +1 -1
- package/coverage/lcov-report/automations/triggerInfo/rowSaved.js.html +1 -1
- package/coverage/lcov-report/automations/triggerInfo/rowUpdated.js.html +1 -1
- package/coverage/lcov-report/automations/triggerInfo/webhook.js.html +1 -1
- package/coverage/lcov-report/automations/triggers.js.html +1 -1
- package/coverage/lcov-report/constants/index.html +1 -1
- package/coverage/lcov-report/constants/index.js.html +30 -30
- package/coverage/lcov-report/constants/layouts.js.html +1 -1
- package/coverage/lcov-report/constants/screens.js.html +1 -1
- package/coverage/lcov-report/db/inMemoryView.js.html +1 -1
- package/coverage/lcov-report/db/index.html +1 -1
- package/coverage/lcov-report/db/index.js.html +1 -1
- package/coverage/lcov-report/db/linkedRows/LinkController.js.html +1 -1
- package/coverage/lcov-report/db/linkedRows/index.html +1 -1
- package/coverage/lcov-report/db/linkedRows/index.js.html +1 -1
- package/coverage/lcov-report/db/linkedRows/linkUtils.js.html +1 -1
- package/coverage/lcov-report/db/newid.js.html +4 -4
- package/coverage/lcov-report/db/utils.js.html +73 -73
- package/coverage/lcov-report/events/AutomationEmitter.js.html +1 -1
- package/coverage/lcov-report/events/index.html +1 -1
- package/coverage/lcov-report/events/index.js.html +1 -1
- package/coverage/lcov-report/events/utils.js.html +1 -1
- package/coverage/lcov-report/index.html +33 -33
- package/coverage/lcov-report/integrations/tests/TestConfiguration.js.html +1 -1
- package/coverage/lcov-report/integrations/tests/index.html +1 -1
- package/coverage/lcov-report/middleware/appInfo.js.html +1 -1
- package/coverage/lcov-report/middleware/builder.js.html +12 -12
- package/coverage/lcov-report/middleware/currentapp.js.html +33 -33
- package/coverage/lcov-report/middleware/index.html +10 -10
- package/coverage/lcov-report/middleware/joi-validator.js.html +9 -18
- package/coverage/lcov-report/middleware/publicApi.js.html +1 -1
- package/coverage/lcov-report/middleware/resourceId.js.html +12 -12
- package/coverage/lcov-report/middleware/selfhost.js.html +1 -1
- package/coverage/lcov-report/middleware/utils.js.html +2 -2
- package/coverage/lcov-report/utilities/budibaseDir.js.html +1 -1
- package/coverage/lcov-report/utilities/centralPath.js.html +1 -1
- package/coverage/lcov-report/utilities/csvParser.js.html +1 -1
- package/coverage/lcov-report/utilities/global.js.html +31 -31
- package/coverage/lcov-report/utilities/index.html +1 -1
- package/coverage/lcov-report/utilities/index.js.html +24 -24
- package/coverage/lcov-report/utilities/queue/inMemoryQueue.js.html +2 -2
- package/coverage/lcov-report/utilities/queue/index.html +1 -1
- package/coverage/lcov-report/utilities/routing/index.html +1 -1
- package/coverage/lcov-report/utilities/routing/index.js.html +1 -1
- package/coverage/lcov-report/utilities/rowProcessor/index.html +1 -1
- package/coverage/lcov-report/utilities/rowProcessor/index.js.html +1 -1
- package/coverage/lcov-report/utilities/rowProcessor/utils.js.html +1 -1
- package/coverage/lcov-report/utilities/scriptRunner.js.html +1 -1
- package/coverage/lcov-report/utilities/security.js.html +2 -2
- package/coverage/lcov-report/utilities/statusCodes.js.html +1 -1
- package/coverage/lcov-report/utilities/usageQuota/index.html +1 -1
- package/coverage/lcov-report/utilities/usageQuota/rows.js.html +20 -20
- package/coverage/lcov-report/utilities/usageQuota/usageQuoteReset.js.html +1 -1
- package/coverage/lcov-report/utilities/users.js.html +7 -7
- package/coverage/lcov-report/utilities/workerRequests.js.html +13 -13
- package/coverage/lcov.info +844 -888
- package/dist/api/controllers/application.js +14 -80
- package/dist/api/controllers/row/internalSearch.js +4 -39
- package/dist/api/controllers/row/utils.js +1 -3
- package/dist/api/controllers/static/index.js +2 -26
- package/dist/api/controllers/table/external.js +1 -1
- package/dist/api/routes/static.js +0 -3
- package/dist/app.js +3 -4
- package/dist/automations/bullboard.js +0 -1
- package/dist/automations/logging/index.js +0 -3
- package/dist/integrations/base/sql.js +30 -62
- package/dist/integrations/base/utils.js +27 -13
- package/dist/integrations/microsoftSqlServer.js +2 -5
- package/dist/integrations/mongodb.js +8 -35
- package/dist/integrations/mysql.js +2 -2
- package/dist/integrations/postgres.js +2 -5
- package/dist/middleware/joi-validator.js +4 -7
- package/dist/package.json +7 -7
- package/dist/threads/index.js +0 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/dist/utilities/fileSystem/index.js +1 -2
- package/dist/utilities/redis.js +0 -1
- package/package.json +8 -8
- package/src/api/controllers/application.ts +15 -96
- package/src/api/controllers/row/internalSearch.js +3 -45
- package/src/api/controllers/row/utils.js +1 -4
- package/src/api/controllers/static/index.ts +1 -21
- package/src/api/controllers/table/external.js +1 -1
- package/src/api/routes/static.ts +0 -12
- package/src/api/routes/tests/application.spec.js +0 -26
- package/src/api/routes/tests/static.spec.js +7 -19
- package/src/app.ts +3 -5
- package/src/automations/bullboard.js +0 -1
- package/src/automations/logging/index.ts +0 -3
- package/src/integrations/base/sql.ts +30 -67
- package/src/integrations/base/utils.ts +18 -9
- package/src/integrations/microsoftSqlServer.ts +2 -3
- package/src/integrations/mongodb.ts +8 -35
- package/src/integrations/mysql.ts +1 -1
- package/src/integrations/postgres.ts +1 -2
- package/src/integrations/tests/mongo.spec.js +0 -218
- package/src/integrations/tests/sql.spec.js +11 -101
- package/src/middleware/joi-validator.js +4 -7
- package/src/threads/index.ts +0 -1
- package/src/utilities/fileSystem/index.js +0 -2
- package/src/utilities/redis.js +0 -1
- package/builder/assets/index.7ba6d256.js +0 -875
- package/builder/assets/index.fdb1647e.css +0 -6
- package/dist/api/controllers/static/templates/preview.hbs +0 -103
- package/dist/integrations/base/query.js +0 -27
- package/src/api/controllers/static/templates/preview.hbs +0 -103
- package/src/api/routes/tests/data/old-app.txt +0 -3
- package/src/api/routes/tests/internalSearch.spec.js +0 -176
- package/src/integrations/base/query.ts +0 -16
|
@@ -36,7 +36,6 @@ const rows_1 = require("../../utilities/usageQuota/rows");
|
|
|
36
36
|
const pro_1 = require("@budibase/pro");
|
|
37
37
|
const backend_core_2 = require("@budibase/backend-core");
|
|
38
38
|
const types_1 = require("@budibase/types");
|
|
39
|
-
const layouts_1 = require("../../constants/layouts");
|
|
40
39
|
const URL_REGEX_SLASH = /\/|\\/g;
|
|
41
40
|
// utility function, need to do away with this
|
|
42
41
|
function getLayouts() {
|
|
@@ -210,17 +209,26 @@ const performAppCreate = (ctx) => __awaiter(void 0, void 0, void 0, function* ()
|
|
|
210
209
|
const instance = yield createInstance(instanceConfig);
|
|
211
210
|
const appId = instance._id;
|
|
212
211
|
const db = backend_core_1.context.getAppDB();
|
|
213
|
-
let
|
|
212
|
+
let _rev;
|
|
213
|
+
try {
|
|
214
|
+
// if template there will be an existing doc
|
|
215
|
+
const existing = yield db.get(utils_1.DocumentType.APP_METADATA);
|
|
216
|
+
_rev = existing._rev;
|
|
217
|
+
}
|
|
218
|
+
catch (err) {
|
|
219
|
+
// nothing to do
|
|
220
|
+
}
|
|
221
|
+
const newApplication = {
|
|
214
222
|
_id: utils_1.DocumentType.APP_METADATA,
|
|
215
|
-
_rev
|
|
216
|
-
appId,
|
|
223
|
+
_rev,
|
|
224
|
+
appId: instance._id,
|
|
217
225
|
type: "app",
|
|
218
226
|
version: package_json_1.default.version,
|
|
219
227
|
componentLibraries: ["@budibase/standard-components"],
|
|
220
228
|
name: name,
|
|
221
229
|
url: url,
|
|
222
|
-
template:
|
|
223
|
-
instance,
|
|
230
|
+
template: ctx.request.body.template,
|
|
231
|
+
instance: instance,
|
|
224
232
|
tenantId: getTenantId(),
|
|
225
233
|
updatedAt: new Date().toISOString(),
|
|
226
234
|
createdAt: new Date().toISOString(),
|
|
@@ -242,34 +250,6 @@ const performAppCreate = (ctx) => __awaiter(void 0, void 0, void 0, function* ()
|
|
|
242
250
|
buttonBorderRadius: "16px",
|
|
243
251
|
},
|
|
244
252
|
};
|
|
245
|
-
// If we used a template or imported an app there will be an existing doc.
|
|
246
|
-
// Fetch and migrate some metadata from the existing app.
|
|
247
|
-
try {
|
|
248
|
-
const existing = yield db.get(utils_1.DocumentType.APP_METADATA);
|
|
249
|
-
const keys = [
|
|
250
|
-
"_rev",
|
|
251
|
-
"navigation",
|
|
252
|
-
"theme",
|
|
253
|
-
"customTheme",
|
|
254
|
-
"icon",
|
|
255
|
-
];
|
|
256
|
-
keys.forEach(key => {
|
|
257
|
-
if (existing[key]) {
|
|
258
|
-
// @ts-ignore
|
|
259
|
-
newApplication[key] = existing[key];
|
|
260
|
-
}
|
|
261
|
-
});
|
|
262
|
-
// Migrate navigation settings and screens if required
|
|
263
|
-
if (existing && !existing.navigation) {
|
|
264
|
-
const navigation = yield migrateAppNavigation();
|
|
265
|
-
if (navigation) {
|
|
266
|
-
newApplication.navigation = navigation;
|
|
267
|
-
}
|
|
268
|
-
}
|
|
269
|
-
}
|
|
270
|
-
catch (err) {
|
|
271
|
-
// Nothing to do
|
|
272
|
-
}
|
|
273
253
|
const response = yield db.put(newApplication, { force: true });
|
|
274
254
|
newApplication._rev = response.rev;
|
|
275
255
|
/* istanbul ignore next */
|
|
@@ -531,49 +511,3 @@ const updateAppPackage = (appPackage, appId) => __awaiter(void 0, void 0, void 0
|
|
|
531
511
|
return newAppPackage;
|
|
532
512
|
}));
|
|
533
513
|
});
|
|
534
|
-
const migrateAppNavigation = () => __awaiter(void 0, void 0, void 0, function* () {
|
|
535
|
-
const db = backend_core_1.context.getAppDB();
|
|
536
|
-
const existing = yield db.get(utils_1.DocumentType.APP_METADATA);
|
|
537
|
-
const layouts = yield getLayouts();
|
|
538
|
-
const screens = yield getScreens();
|
|
539
|
-
// Migrate all screens, removing custom layouts
|
|
540
|
-
for (let screen of screens) {
|
|
541
|
-
if (!screen.layoutId) {
|
|
542
|
-
return;
|
|
543
|
-
}
|
|
544
|
-
const layout = layouts.find(layout => layout._id === screen.layoutId);
|
|
545
|
-
screen.layoutId = undefined;
|
|
546
|
-
screen.showNavigation = (layout === null || layout === void 0 ? void 0 : layout.props.navigation) !== "None";
|
|
547
|
-
screen.width = (layout === null || layout === void 0 ? void 0 : layout.props.width) || "Large";
|
|
548
|
-
yield db.put(screen);
|
|
549
|
-
}
|
|
550
|
-
// Migrate layout navigation settings
|
|
551
|
-
const { name, customTheme } = existing;
|
|
552
|
-
const layout = layouts === null || layouts === void 0 ? void 0 : layouts.find((layout) => layout._id === layouts_1.BASE_LAYOUT_PROP_IDS.PRIVATE);
|
|
553
|
-
if (layout) {
|
|
554
|
-
let navigationSettings = {
|
|
555
|
-
navigation: "Top",
|
|
556
|
-
title: name,
|
|
557
|
-
navWidth: "Large",
|
|
558
|
-
navBackground: (customTheme === null || customTheme === void 0 ? void 0 : customTheme.navBackground) || "var(--spectrum-global-color-gray-50)",
|
|
559
|
-
navTextColor: (customTheme === null || customTheme === void 0 ? void 0 : customTheme.navTextColor) || "var(--spectrum-global-color-gray-800)",
|
|
560
|
-
};
|
|
561
|
-
if (layout) {
|
|
562
|
-
navigationSettings.hideLogo = layout.props.hideLogo;
|
|
563
|
-
navigationSettings.hideTitle = layout.props.hideTitle;
|
|
564
|
-
navigationSettings.title = layout.props.title || name;
|
|
565
|
-
navigationSettings.logoUrl = layout.props.logoUrl;
|
|
566
|
-
navigationSettings.links = layout.props.links;
|
|
567
|
-
navigationSettings.navigation = layout.props.navigation || "Top";
|
|
568
|
-
navigationSettings.sticky = layout.props.sticky;
|
|
569
|
-
navigationSettings.navWidth = layout.props.width || "Large";
|
|
570
|
-
if (navigationSettings.navigation === "None") {
|
|
571
|
-
navigationSettings.navigation = "Top";
|
|
572
|
-
}
|
|
573
|
-
}
|
|
574
|
-
return navigationSettings;
|
|
575
|
-
}
|
|
576
|
-
else {
|
|
577
|
-
return null;
|
|
578
|
-
}
|
|
579
|
-
});
|
|
@@ -9,7 +9,6 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
9
9
|
});
|
|
10
10
|
};
|
|
11
11
|
const { SearchIndexes } = require("../../../db/utils");
|
|
12
|
-
const { removeKeyNumbering } = require("./utils");
|
|
13
12
|
const fetch = require("node-fetch");
|
|
14
13
|
const { getCouchInfo } = require("@budibase/backend-core/db");
|
|
15
14
|
const { getAppId } = require("@budibase/backend-core/context");
|
|
@@ -19,7 +18,7 @@ const { getAppId } = require("@budibase/backend-core/context");
|
|
|
19
18
|
*/
|
|
20
19
|
class QueryBuilder {
|
|
21
20
|
constructor(base) {
|
|
22
|
-
this.query = Object.assign({ allOr: false, string: {}, fuzzy: {}, range: {}, equal: {}, notEqual: {}, empty: {}, notEmpty: {}, oneOf: {}, contains: {}
|
|
21
|
+
this.query = Object.assign({ allOr: false, string: {}, fuzzy: {}, range: {}, equal: {}, notEqual: {}, empty: {}, notEmpty: {}, oneOf: {}, contains: {} }, base);
|
|
23
22
|
this.limit = 50;
|
|
24
23
|
this.sortOrder = "ascending";
|
|
25
24
|
this.sortType = "string";
|
|
@@ -105,14 +104,6 @@ class QueryBuilder {
|
|
|
105
104
|
this.query.contains[key] = value;
|
|
106
105
|
return this;
|
|
107
106
|
}
|
|
108
|
-
addNotContains(key, value) {
|
|
109
|
-
this.query.notContains[key] = value;
|
|
110
|
-
return this;
|
|
111
|
-
}
|
|
112
|
-
addContainsAny(key, value) {
|
|
113
|
-
this.query.containsAny[key] = value;
|
|
114
|
-
return this;
|
|
115
|
-
}
|
|
116
107
|
/**
|
|
117
108
|
* Preprocesses a value before going into a lucene search.
|
|
118
109
|
* Transforms strings to lowercase and wraps strings and bools in quotes.
|
|
@@ -155,27 +146,11 @@ class QueryBuilder {
|
|
|
155
146
|
}
|
|
156
147
|
return `${key}:${builder.preprocess(value, allPreProcessingOpts)}`;
|
|
157
148
|
};
|
|
158
|
-
const contains = (key, value
|
|
159
|
-
if (
|
|
149
|
+
const contains = (key, value) => {
|
|
150
|
+
if (!value && value !== 0) {
|
|
160
151
|
return null;
|
|
161
152
|
}
|
|
162
|
-
|
|
163
|
-
return `${key}:${value}`;
|
|
164
|
-
}
|
|
165
|
-
let statement = `${builder.preprocess(value[0], { escape: true })}`;
|
|
166
|
-
for (let i = 1; i < value.length; i++) {
|
|
167
|
-
statement += ` ${mode} ${builder.preprocess(value[i], {
|
|
168
|
-
escape: true,
|
|
169
|
-
})}`;
|
|
170
|
-
}
|
|
171
|
-
return `${key}:(${statement})`;
|
|
172
|
-
};
|
|
173
|
-
const notContains = (key, value) => {
|
|
174
|
-
const allPrefix = allOr === "" ? "*:* AND" : "";
|
|
175
|
-
return allPrefix + "NOT " + contains(key, value);
|
|
176
|
-
};
|
|
177
|
-
const containsAny = (key, value) => {
|
|
178
|
-
return contains(key, value, "OR");
|
|
153
|
+
return `${key}:${builder.preprocess(value, { escape: true })}`;
|
|
179
154
|
};
|
|
180
155
|
const oneOf = (key, value) => {
|
|
181
156
|
if (!Array.isArray(value)) {
|
|
@@ -194,8 +169,6 @@ class QueryBuilder {
|
|
|
194
169
|
};
|
|
195
170
|
function build(structure, queryFn) {
|
|
196
171
|
for (let [key, value] of Object.entries(structure)) {
|
|
197
|
-
// check for new format - remove numbering if needed
|
|
198
|
-
key = removeKeyNumbering(key);
|
|
199
172
|
key = builder.preprocess(key.replace(/ /g, "_"), {
|
|
200
173
|
escape: true,
|
|
201
174
|
});
|
|
@@ -273,12 +246,6 @@ class QueryBuilder {
|
|
|
273
246
|
if (this.query.contains) {
|
|
274
247
|
build(this.query.contains, contains);
|
|
275
248
|
}
|
|
276
|
-
if (this.query.notContains) {
|
|
277
|
-
build(this.query.notContains, notContains);
|
|
278
|
-
}
|
|
279
|
-
if (this.query.containsAny) {
|
|
280
|
-
build(this.query.containsAny, containsAny);
|
|
281
|
-
}
|
|
282
249
|
// make sure table ID is always added as an AND
|
|
283
250
|
if (tableId) {
|
|
284
251
|
query = `(${query})`;
|
|
@@ -313,8 +280,6 @@ class QueryBuilder {
|
|
|
313
280
|
});
|
|
314
281
|
}
|
|
315
282
|
}
|
|
316
|
-
// exported for unit testing
|
|
317
|
-
exports.QueryBuilder = QueryBuilder;
|
|
318
283
|
/**
|
|
319
284
|
* Executes a lucene search query.
|
|
320
285
|
* @param url The query URL
|
|
@@ -13,9 +13,8 @@ const { cloneDeep } = require("lodash/fp");
|
|
|
13
13
|
const { InternalTables } = require("../../../db/utils");
|
|
14
14
|
const userController = require("../user");
|
|
15
15
|
const { FieldTypes } = require("../../../constants");
|
|
16
|
+
const { makeExternalQuery } = require("../../../integrations/base/utils");
|
|
16
17
|
const { getAppDB } = require("@budibase/backend-core/context");
|
|
17
|
-
const { makeExternalQuery } = require("../../../integrations/base/query");
|
|
18
|
-
const { removeKeyNumbering } = require("../../../integrations/base/utils");
|
|
19
18
|
validateJs.extend(validateJs.validators.datetime, {
|
|
20
19
|
parse: function (value) {
|
|
21
20
|
return new Date(value).getTime();
|
|
@@ -25,7 +24,6 @@ validateJs.extend(validateJs.validators.datetime, {
|
|
|
25
24
|
return new Date(value).toISOString();
|
|
26
25
|
},
|
|
27
26
|
});
|
|
28
|
-
exports.removeKeyNumbering = removeKeyNumbering;
|
|
29
27
|
exports.getDatasourceAndQuery = (json) => __awaiter(void 0, void 0, void 0, function* () {
|
|
30
28
|
const datasourceId = json.endpoint.datasourceId;
|
|
31
29
|
const db = getAppDB();
|
|
@@ -9,7 +9,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
9
9
|
});
|
|
10
10
|
};
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.getSignedUploadURL = exports.serveClientLibrary = exports.
|
|
12
|
+
exports.getSignedUploadURL = exports.serveClientLibrary = exports.serveApp = exports.uploadFile = exports.serveBuilder = exports.toggleBetaUiFeature = void 0;
|
|
13
13
|
require("svelte/register");
|
|
14
14
|
const send = require("koa-send");
|
|
15
15
|
const { resolve, join } = require("../../../utilities/centralPath");
|
|
@@ -19,7 +19,7 @@ const { processString } = require("@budibase/string-templates");
|
|
|
19
19
|
const { loadHandlebarsFile, NODE_MODULES_PATH, TOP_LEVEL_PATH, } = require("../../../utilities/fileSystem");
|
|
20
20
|
const env = require("../../../environment");
|
|
21
21
|
const { clientLibraryPath } = require("../../../utilities");
|
|
22
|
-
const { upload
|
|
22
|
+
const { upload } = require("../../../utilities/fileSystem");
|
|
23
23
|
const { attachmentsRelativeURL } = require("../../../utilities");
|
|
24
24
|
const { DocumentType } = require("../../../db/utils");
|
|
25
25
|
const { getAppDB, getAppId } = require("@budibase/backend-core/context");
|
|
@@ -95,12 +95,6 @@ const uploadFile = function (ctx) {
|
|
|
95
95
|
});
|
|
96
96
|
};
|
|
97
97
|
exports.uploadFile = uploadFile;
|
|
98
|
-
const deleteObjects = function (ctx) {
|
|
99
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
100
|
-
ctx.body = yield deleteFiles(ObjectStoreBuckets.APPS, ctx.request.body.keys);
|
|
101
|
-
});
|
|
102
|
-
};
|
|
103
|
-
exports.deleteObjects = deleteObjects;
|
|
104
98
|
const serveApp = function (ctx) {
|
|
105
99
|
return __awaiter(this, void 0, void 0, function* () {
|
|
106
100
|
const db = getAppDB({ skip_setup: true });
|
|
@@ -129,24 +123,6 @@ const serveApp = function (ctx) {
|
|
|
129
123
|
});
|
|
130
124
|
};
|
|
131
125
|
exports.serveApp = serveApp;
|
|
132
|
-
const serveBuilderPreview = function (ctx) {
|
|
133
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
134
|
-
const db = getAppDB({ skip_setup: true });
|
|
135
|
-
const appInfo = yield db.get(DocumentType.APP_METADATA);
|
|
136
|
-
if (!env.isJest()) {
|
|
137
|
-
let appId = getAppId();
|
|
138
|
-
const previewHbs = loadHandlebarsFile(`${__dirname}/templates/preview.hbs`);
|
|
139
|
-
ctx.body = yield processString(previewHbs, {
|
|
140
|
-
clientLibPath: clientLibraryPath(appId, appInfo.version, ctx),
|
|
141
|
-
});
|
|
142
|
-
}
|
|
143
|
-
else {
|
|
144
|
-
// just return the app info for jest to assert on
|
|
145
|
-
ctx.body = Object.assign(Object.assign({}, appInfo), { builderPreview: true });
|
|
146
|
-
}
|
|
147
|
-
});
|
|
148
|
-
};
|
|
149
|
-
exports.serveBuilderPreview = serveBuilderPreview;
|
|
150
126
|
const serveClientLibrary = function (ctx) {
|
|
151
127
|
return __awaiter(this, void 0, void 0, function* () {
|
|
152
128
|
return send(ctx, "budibase-client.js", {
|
|
@@ -11,7 +11,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
11
11
|
const { buildExternalTableId, breakExternalTableId, } = require("../../../integrations/utils");
|
|
12
12
|
const { getTable, generateForeignKey, generateJunctionTableName, foreignKeyStructure, hasTypeChanged, } = require("./utils");
|
|
13
13
|
const { DataSourceOperation, FieldTypes, RelationshipTypes, } = require("../../../constants");
|
|
14
|
-
const { makeExternalQuery } = require("../../../integrations/base/
|
|
14
|
+
const { makeExternalQuery } = require("../../../integrations/base/utils");
|
|
15
15
|
const { cloneDeep } = require("lodash/fp");
|
|
16
16
|
const csvParser = require("../../../utilities/csvParser");
|
|
17
17
|
const { handleRequest } = require("../row/external");
|
|
@@ -68,11 +68,8 @@ router
|
|
|
68
68
|
// TODO: for now this builder endpoint is not authorized/secured, will need to be
|
|
69
69
|
.get("/builder/:file*", controller.serveBuilder)
|
|
70
70
|
.post("/api/attachments/process", (0, authorized_1.default)(permissions_1.BUILDER), controller.uploadFile)
|
|
71
|
-
.post("/api/attachments/delete", (0, authorized_1.default)(permissions_1.BUILDER), controller.deleteObjects)
|
|
72
71
|
.post("/api/beta/:feature", controller.toggleBetaUiFeature)
|
|
73
72
|
.post("/api/attachments/:tableId/upload", (0, resourceId_1.paramResource)("tableId"), (0, authorized_1.default)(permissions_1.PermissionTypes.TABLE, permissions_1.PermissionLevels.WRITE), controller.uploadFile)
|
|
74
|
-
.post("/api/attachments/:tableId/delete", (0, resourceId_1.paramResource)("tableId"), (0, authorized_1.default)(permissions_1.PermissionTypes.TABLE, permissions_1.PermissionLevels.WRITE), controller.deleteObjects)
|
|
75
|
-
.get("/preview", (0, authorized_1.default)(permissions_1.BUILDER), controller.serveBuilderPreview)
|
|
76
73
|
.get("/:appId/:path*", controller.serveApp)
|
|
77
74
|
.get("/app/:appUrl/:path*", controller.serveApp)
|
|
78
75
|
.post("/api/attachments/:datasourceId/url", (0, authorized_1.default)(permissions_1.PermissionTypes.TABLE, permissions_1.PermissionLevels.READ), controller.getSignedUploadURL);
|
package/dist/app.js
CHANGED
|
@@ -104,7 +104,9 @@ server.on("close", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
|
104
104
|
return;
|
|
105
105
|
}
|
|
106
106
|
shuttingDown = true;
|
|
107
|
-
|
|
107
|
+
if (!env.isTest()) {
|
|
108
|
+
console.log("Server Closed");
|
|
109
|
+
}
|
|
108
110
|
yield automations.shutdown();
|
|
109
111
|
yield redis_1.default.shutdown();
|
|
110
112
|
yield backend_core_1.events.shutdown();
|
|
@@ -172,6 +174,3 @@ process.on("uncaughtException", err => {
|
|
|
172
174
|
process.on("SIGTERM", () => {
|
|
173
175
|
shutdown();
|
|
174
176
|
});
|
|
175
|
-
process.on("SIGINT", () => {
|
|
176
|
-
shutdown();
|
|
177
|
-
});
|
|
@@ -56,9 +56,6 @@ function checkAppMetadata(apps) {
|
|
|
56
56
|
for (let [key, errors] of Object.entries(metadata.automationErrors)) {
|
|
57
57
|
const updated = [];
|
|
58
58
|
for (let error of errors) {
|
|
59
|
-
if (!error) {
|
|
60
|
-
continue;
|
|
61
|
-
}
|
|
62
59
|
const startDate = error.split(backend_core_1.db.SEPARATOR)[2];
|
|
63
60
|
if (startDate > maxStartDate) {
|
|
64
61
|
updated.push(error);
|
|
@@ -17,7 +17,6 @@ const types_1 = require("@budibase/types");
|
|
|
17
17
|
const utils_1 = require("../utils");
|
|
18
18
|
const sqlTable_1 = __importDefault(require("./sqlTable"));
|
|
19
19
|
const environment_1 = __importDefault(require("../../environment"));
|
|
20
|
-
const utils_2 = require("./utils");
|
|
21
20
|
const envLimit = environment_1.default.SQL_MAX_ROWS
|
|
22
21
|
? parseInt(environment_1.default.SQL_MAX_ROWS)
|
|
23
22
|
: null;
|
|
@@ -117,13 +116,12 @@ class InternalBuilder {
|
|
|
117
116
|
addFilters(query, filters, opts) {
|
|
118
117
|
function iterate(structure, fn) {
|
|
119
118
|
for (let [key, value] of Object.entries(structure)) {
|
|
120
|
-
const
|
|
121
|
-
const isRelationshipField = updatedKey.includes(".");
|
|
119
|
+
const isRelationshipField = key.includes(".");
|
|
122
120
|
if (!opts.relationship && !isRelationshipField) {
|
|
123
|
-
fn(`${opts.tableName}.${
|
|
121
|
+
fn(`${opts.tableName}.${key}`, value);
|
|
124
122
|
}
|
|
125
123
|
if (opts.relationship && isRelationshipField) {
|
|
126
|
-
fn(
|
|
124
|
+
fn(key, value);
|
|
127
125
|
}
|
|
128
126
|
}
|
|
129
127
|
}
|
|
@@ -141,56 +139,6 @@ class InternalBuilder {
|
|
|
141
139
|
]);
|
|
142
140
|
}
|
|
143
141
|
};
|
|
144
|
-
const contains = (mode, any = false) => {
|
|
145
|
-
const fnc = allOr ? "orWhere" : "where";
|
|
146
|
-
const rawFnc = `${fnc}Raw`;
|
|
147
|
-
const not = mode === (filters === null || filters === void 0 ? void 0 : filters.notContains) ? "NOT " : "";
|
|
148
|
-
function stringifyArray(value, quoteStyle = '"') {
|
|
149
|
-
for (let i in value) {
|
|
150
|
-
if (typeof value[i] === "string") {
|
|
151
|
-
value[i] = `${quoteStyle}${value[i]}${quoteStyle}`;
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
return `[${value.join(",")}]`;
|
|
155
|
-
}
|
|
156
|
-
if (this.client === utils_1.SqlClient.POSTGRES) {
|
|
157
|
-
iterate(mode, (key, value) => {
|
|
158
|
-
const wrap = any ? "" : "'";
|
|
159
|
-
const containsOp = any ? "\\?| array" : "@>";
|
|
160
|
-
const fieldNames = key.split(/\./g);
|
|
161
|
-
const tableName = fieldNames[0];
|
|
162
|
-
const columnName = fieldNames[1];
|
|
163
|
-
// @ts-ignore
|
|
164
|
-
query = query[rawFnc](`${not}"${tableName}"."${columnName}"::jsonb ${containsOp} ${wrap}${stringifyArray(value, any ? "'" : '"')}${wrap}`);
|
|
165
|
-
});
|
|
166
|
-
}
|
|
167
|
-
else if (this.client === utils_1.SqlClient.MY_SQL) {
|
|
168
|
-
const jsonFnc = any ? "JSON_OVERLAPS" : "JSON_CONTAINS";
|
|
169
|
-
iterate(mode, (key, value) => {
|
|
170
|
-
// @ts-ignore
|
|
171
|
-
query = query[rawFnc](`${not}${jsonFnc}(${key}, '${stringifyArray(value)}')`);
|
|
172
|
-
});
|
|
173
|
-
}
|
|
174
|
-
else {
|
|
175
|
-
const andOr = mode === (filters === null || filters === void 0 ? void 0 : filters.containsAny) ? " OR " : " AND ";
|
|
176
|
-
iterate(mode, (key, value) => {
|
|
177
|
-
let statement = "";
|
|
178
|
-
for (let i in value) {
|
|
179
|
-
if (typeof value[i] === "string") {
|
|
180
|
-
value[i] = `%"${value[i]}"%`;
|
|
181
|
-
}
|
|
182
|
-
else {
|
|
183
|
-
value[i] = `%${value[i]}%`;
|
|
184
|
-
}
|
|
185
|
-
statement +=
|
|
186
|
-
(statement ? andOr : "") +
|
|
187
|
-
`LOWER(${likeKey(this.client, key)}) LIKE ?`;
|
|
188
|
-
}
|
|
189
|
-
// @ts-ignore
|
|
190
|
-
query = query[rawFnc](`${not}(${statement})`, value);
|
|
191
|
-
});
|
|
192
|
-
}
|
|
193
|
-
};
|
|
194
142
|
if (!filters) {
|
|
195
143
|
return query;
|
|
196
144
|
}
|
|
@@ -264,13 +212,32 @@ class InternalBuilder {
|
|
|
264
212
|
});
|
|
265
213
|
}
|
|
266
214
|
if (filters.contains) {
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
215
|
+
const fnc = allOr ? "orWhere" : "where";
|
|
216
|
+
const rawFnc = `${fnc}Raw`;
|
|
217
|
+
if (this.client === utils_1.SqlClient.POSTGRES) {
|
|
218
|
+
iterate(filters.contains, (key, value) => {
|
|
219
|
+
const fieldNames = key.split(/\./g);
|
|
220
|
+
const tableName = fieldNames[0];
|
|
221
|
+
const columnName = fieldNames[1];
|
|
222
|
+
if (typeof value === "string") {
|
|
223
|
+
value = `"${value}"`;
|
|
224
|
+
}
|
|
225
|
+
// @ts-ignore
|
|
226
|
+
query = query[rawFnc](`"${tableName}"."${columnName}"::jsonb @> '[${value}]'`);
|
|
227
|
+
});
|
|
228
|
+
}
|
|
229
|
+
else if (this.client === utils_1.SqlClient.MY_SQL) {
|
|
230
|
+
iterate(filters.contains, (key, value) => {
|
|
231
|
+
if (typeof value === "string") {
|
|
232
|
+
value = `"${value}"`;
|
|
233
|
+
}
|
|
234
|
+
// @ts-ignore
|
|
235
|
+
query = query[rawFnc](`JSON_CONTAINS(${key}, '${value}')`);
|
|
236
|
+
});
|
|
237
|
+
}
|
|
238
|
+
else {
|
|
239
|
+
iterate(filters.contains, like);
|
|
240
|
+
}
|
|
274
241
|
}
|
|
275
242
|
return query;
|
|
276
243
|
}
|
|
@@ -581,3 +548,4 @@ class SqlQueryBuilder extends sqlTable_1.default {
|
|
|
581
548
|
}
|
|
582
549
|
}
|
|
583
550
|
exports.default = SqlQueryBuilder;
|
|
551
|
+
module.exports = SqlQueryBuilder;
|
|
@@ -1,16 +1,30 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
2
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
12
|
+
var DatasourceUtils;
|
|
13
|
+
(function (DatasourceUtils) {
|
|
14
|
+
const { integrations } = require("../index");
|
|
15
|
+
function makeExternalQuery(datasource, json) {
|
|
16
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
17
|
+
const Integration = integrations[datasource.source];
|
|
18
|
+
// query is the opinionated function
|
|
19
|
+
if (Integration.prototype.query) {
|
|
20
|
+
const integration = new Integration(datasource.config);
|
|
21
|
+
return integration.query(json);
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
throw "Datasource does not support query.";
|
|
25
|
+
}
|
|
26
|
+
});
|
|
11
27
|
}
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
}
|
|
16
|
-
exports.removeKeyNumbering = removeKeyNumbering;
|
|
28
|
+
DatasourceUtils.makeExternalQuery = makeExternalQuery;
|
|
29
|
+
module.exports.makeExternalQuery = makeExternalQuery;
|
|
30
|
+
})(DatasourceUtils || (DatasourceUtils = {}));
|
|
@@ -8,16 +8,13 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
8
8
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
9
|
});
|
|
10
10
|
};
|
|
11
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
-
};
|
|
14
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
12
|
const types_1 = require("@budibase/types");
|
|
16
13
|
const utils_1 = require("./utils");
|
|
17
|
-
const sql_1 = __importDefault(require("./base/sql"));
|
|
18
14
|
var MSSQLModule;
|
|
19
15
|
(function (MSSQLModule) {
|
|
20
16
|
const sqlServer = require("mssql");
|
|
17
|
+
const Sql = require("./base/sql");
|
|
21
18
|
const DEFAULT_SCHEMA = "dbo";
|
|
22
19
|
const SCHEMA = {
|
|
23
20
|
docs: "https://github.com/tediousjs/node-mssql",
|
|
@@ -72,7 +69,7 @@ var MSSQLModule;
|
|
|
72
69
|
},
|
|
73
70
|
},
|
|
74
71
|
};
|
|
75
|
-
class SqlServerIntegration extends
|
|
72
|
+
class SqlServerIntegration extends Sql {
|
|
76
73
|
constructor(config) {
|
|
77
74
|
super(utils_1.SqlClient.MS_SQL);
|
|
78
75
|
this.index = 0;
|
|
@@ -80,11 +80,10 @@ var MongoDBModule;
|
|
|
80
80
|
if (json[field] instanceof Object) {
|
|
81
81
|
json[field] = self.createObjectIds(json[field]);
|
|
82
82
|
}
|
|
83
|
-
if (typeof json[field] === "string"
|
|
84
|
-
json[
|
|
85
|
-
const id = (_a = json[field].match(/(?<=objectid\(['"]).*(?=['"]\))/gi)) === null || _a === void 0 ? void 0 : _a[0];
|
|
83
|
+
if (field === "_id" && typeof json[field] === "string") {
|
|
84
|
+
const id = (_a = json["_id"].match(/(?<=objectid\(['"]).*(?=['"]\))/gi)) === null || _a === void 0 ? void 0 : _a[0];
|
|
86
85
|
if (id) {
|
|
87
|
-
json[
|
|
86
|
+
json["_id"] = mongodb_1.ObjectID.createFromHexString(id);
|
|
88
87
|
}
|
|
89
88
|
}
|
|
90
89
|
}
|
|
@@ -99,33 +98,10 @@ var MongoDBModule;
|
|
|
99
98
|
return interpolateObjectIds(json);
|
|
100
99
|
}
|
|
101
100
|
parseQueryParams(params, mode) {
|
|
102
|
-
|
|
103
|
-
let
|
|
104
|
-
let
|
|
105
|
-
let
|
|
106
|
-
let i = 0;
|
|
107
|
-
let startIndex = 0;
|
|
108
|
-
for (let c of params) {
|
|
109
|
-
if (c === '"' && i > 0 && params[i - 1] !== "\\") {
|
|
110
|
-
inQuotes = !inQuotes;
|
|
111
|
-
}
|
|
112
|
-
if (c === "{" && !inQuotes) {
|
|
113
|
-
openCount++;
|
|
114
|
-
if (openCount === 1) {
|
|
115
|
-
startIndex = i;
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
else if (c === "}" && !inQuotes) {
|
|
119
|
-
if (openCount === 1) {
|
|
120
|
-
queryParams.push(JSON.parse(params.substring(startIndex, i + 1)));
|
|
121
|
-
}
|
|
122
|
-
openCount--;
|
|
123
|
-
}
|
|
124
|
-
i++;
|
|
125
|
-
}
|
|
126
|
-
let group1 = (_a = queryParams[0]) !== null && _a !== void 0 ? _a : {};
|
|
127
|
-
let group2 = (_b = queryParams[1]) !== null && _b !== void 0 ? _b : {};
|
|
128
|
-
let group3 = (_c = queryParams[2]) !== null && _c !== void 0 ? _c : {};
|
|
101
|
+
let queryParams = params.split(/(?<=}),[\n\s]*(?={)/g);
|
|
102
|
+
let group1 = queryParams[0] ? JSON.parse(queryParams[0]) : {};
|
|
103
|
+
let group2 = queryParams[1] ? JSON.parse(queryParams[1]) : {};
|
|
104
|
+
let group3 = queryParams[2] ? JSON.parse(queryParams[2]) : {};
|
|
129
105
|
if (mode === "update") {
|
|
130
106
|
return {
|
|
131
107
|
filter: group1,
|
|
@@ -183,10 +159,7 @@ var MongoDBModule;
|
|
|
183
159
|
return yield collection.findOne(json);
|
|
184
160
|
}
|
|
185
161
|
case "findOneAndUpdate": {
|
|
186
|
-
|
|
187
|
-
json = this.parseQueryParams(query.json, "update");
|
|
188
|
-
}
|
|
189
|
-
let findAndUpdateJson = this.createObjectIds(json);
|
|
162
|
+
let findAndUpdateJson = json;
|
|
190
163
|
return yield collection.findOneAndUpdate(findAndUpdateJson.filter, findAndUpdateJson.update, findAndUpdateJson.options);
|
|
191
164
|
}
|
|
192
165
|
case "count": {
|
|
@@ -16,10 +16,10 @@ const types_1 = require("@budibase/types");
|
|
|
16
16
|
const utils_1 = require("./utils");
|
|
17
17
|
const dayjs_1 = __importDefault(require("dayjs"));
|
|
18
18
|
const { NUMBER_REGEX } = require("../utilities");
|
|
19
|
-
const sql_1 = __importDefault(require("./base/sql"));
|
|
20
19
|
var MySQLModule;
|
|
21
20
|
(function (MySQLModule) {
|
|
22
21
|
const mysql = require("mysql2/promise");
|
|
22
|
+
const Sql = require("./base/sql");
|
|
23
23
|
const SCHEMA = {
|
|
24
24
|
docs: "https://github.com/sidorares/node-mysql2",
|
|
25
25
|
plus: true,
|
|
@@ -96,7 +96,7 @@ var MySQLModule;
|
|
|
96
96
|
}
|
|
97
97
|
return bindings;
|
|
98
98
|
}
|
|
99
|
-
class MySQLIntegration extends
|
|
99
|
+
class MySQLIntegration extends Sql {
|
|
100
100
|
constructor(config) {
|
|
101
101
|
super(utils_1.SqlClient.MY_SQL);
|
|
102
102
|
this.tables = {};
|