@budibase/server 0.9.185-alpha.10 → 0.9.185-alpha.14

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.
Files changed (186) hide show
  1. package/builder/assets/bb-space-man.5be51a45.svg +290 -0
  2. package/builder/assets/{index.34aca569.css → index.4a7c5636.css} +1 -1
  3. package/builder/assets/{index.a9806411.js → index.8ed163fd.js} +179 -180
  4. package/builder/index.html +2 -2
  5. package/coverage/clover.xml +189 -167
  6. package/coverage/coverage-final.json +6 -6
  7. package/coverage/lcov-report/api/controllers/analytics.js.html +1 -1
  8. package/coverage/lcov-report/api/controllers/apikeys.js.html +1 -1
  9. package/coverage/lcov-report/api/controllers/application.js.html +1 -1
  10. package/coverage/lcov-report/api/controllers/auth.js.html +1 -1
  11. package/coverage/lcov-report/api/controllers/automation.js.html +1 -1
  12. package/coverage/lcov-report/api/controllers/backup.js.html +1 -1
  13. package/coverage/lcov-report/api/controllers/cloud.js.html +1 -1
  14. package/coverage/lcov-report/api/controllers/component.js.html +1 -1
  15. package/coverage/lcov-report/api/controllers/datasource.js.html +102 -18
  16. package/coverage/lcov-report/api/controllers/dev.js.html +1 -1
  17. package/coverage/lcov-report/api/controllers/hosting.js.html +1 -1
  18. package/coverage/lcov-report/api/controllers/index.html +19 -19
  19. package/coverage/lcov-report/api/controllers/integration.js.html +1 -1
  20. package/coverage/lcov-report/api/controllers/layout.js.html +1 -1
  21. package/coverage/lcov-report/api/controllers/metadata.js.html +1 -1
  22. package/coverage/lcov-report/api/controllers/permission.js.html +1 -1
  23. package/coverage/lcov-report/api/controllers/query.js.html +1 -1
  24. package/coverage/lcov-report/api/controllers/role.js.html +1 -1
  25. package/coverage/lcov-report/api/controllers/routing.js.html +1 -1
  26. package/coverage/lcov-report/api/controllers/row/external.js.html +1 -1
  27. package/coverage/lcov-report/api/controllers/row/index.html +1 -1
  28. package/coverage/lcov-report/api/controllers/row/index.js.html +1 -1
  29. package/coverage/lcov-report/api/controllers/row/internal.js.html +1 -1
  30. package/coverage/lcov-report/api/controllers/row/internalSearch.js.html +1 -1
  31. package/coverage/lcov-report/api/controllers/row/utils.js.html +1 -1
  32. package/coverage/lcov-report/api/controllers/screen.js.html +1 -1
  33. package/coverage/lcov-report/api/controllers/script.js.html +1 -1
  34. package/coverage/lcov-report/api/controllers/table/external.js.html +29 -8
  35. package/coverage/lcov-report/api/controllers/table/index.html +13 -13
  36. package/coverage/lcov-report/api/controllers/table/index.js.html +1 -1
  37. package/coverage/lcov-report/api/controllers/table/internal.js.html +1 -1
  38. package/coverage/lcov-report/api/controllers/table/utils.js.html +1 -1
  39. package/coverage/lcov-report/api/controllers/templates.js.html +1 -1
  40. package/coverage/lcov-report/api/controllers/user.js.html +1 -1
  41. package/coverage/lcov-report/api/controllers/view/exporters.js.html +1 -1
  42. package/coverage/lcov-report/api/controllers/view/index.html +1 -1
  43. package/coverage/lcov-report/api/controllers/view/index.js.html +1 -1
  44. package/coverage/lcov-report/api/controllers/view/utils.js.html +1 -1
  45. package/coverage/lcov-report/api/controllers/view/viewBuilder.js.html +1 -1
  46. package/coverage/lcov-report/api/controllers/webhook.js.html +1 -1
  47. package/coverage/lcov-report/api/index.html +1 -1
  48. package/coverage/lcov-report/api/index.js.html +1 -1
  49. package/coverage/lcov-report/api/routes/analytics.js.html +1 -1
  50. package/coverage/lcov-report/api/routes/apikeys.js.html +1 -1
  51. package/coverage/lcov-report/api/routes/application.js.html +1 -1
  52. package/coverage/lcov-report/api/routes/auth.js.html +1 -1
  53. package/coverage/lcov-report/api/routes/automation.js.html +1 -1
  54. package/coverage/lcov-report/api/routes/backup.js.html +1 -1
  55. package/coverage/lcov-report/api/routes/cloud.js.html +1 -1
  56. package/coverage/lcov-report/api/routes/component.js.html +1 -1
  57. package/coverage/lcov-report/api/routes/datasource.js.html +1 -1
  58. package/coverage/lcov-report/api/routes/deploy.js.html +1 -1
  59. package/coverage/lcov-report/api/routes/dev.js.html +1 -1
  60. package/coverage/lcov-report/api/routes/hosting.js.html +1 -1
  61. package/coverage/lcov-report/api/routes/index.html +1 -1
  62. package/coverage/lcov-report/api/routes/index.js.html +1 -1
  63. package/coverage/lcov-report/api/routes/integration.js.html +1 -1
  64. package/coverage/lcov-report/api/routes/layout.js.html +1 -1
  65. package/coverage/lcov-report/api/routes/metadata.js.html +1 -1
  66. package/coverage/lcov-report/api/routes/permission.js.html +1 -1
  67. package/coverage/lcov-report/api/routes/query.js.html +1 -1
  68. package/coverage/lcov-report/api/routes/role.js.html +1 -1
  69. package/coverage/lcov-report/api/routes/routing.js.html +1 -1
  70. package/coverage/lcov-report/api/routes/row.js.html +1 -1
  71. package/coverage/lcov-report/api/routes/screen.js.html +1 -1
  72. package/coverage/lcov-report/api/routes/script.js.html +1 -1
  73. package/coverage/lcov-report/api/routes/static.js.html +1 -1
  74. package/coverage/lcov-report/api/routes/table.js.html +1 -1
  75. package/coverage/lcov-report/api/routes/templates.js.html +1 -1
  76. package/coverage/lcov-report/api/routes/user.js.html +1 -1
  77. package/coverage/lcov-report/api/routes/view.js.html +1 -1
  78. package/coverage/lcov-report/api/routes/webhook.js.html +1 -1
  79. package/coverage/lcov-report/automations/actions.js.html +1 -1
  80. package/coverage/lcov-report/automations/automationUtils.js.html +1 -1
  81. package/coverage/lcov-report/automations/bullboard.js.html +1 -1
  82. package/coverage/lcov-report/automations/index.html +1 -1
  83. package/coverage/lcov-report/automations/index.js.html +1 -1
  84. package/coverage/lcov-report/automations/steps/bash.js.html +1 -1
  85. package/coverage/lcov-report/automations/steps/createRow.js.html +1 -1
  86. package/coverage/lcov-report/automations/steps/delay.js.html +1 -1
  87. package/coverage/lcov-report/automations/steps/deleteRow.js.html +1 -1
  88. package/coverage/lcov-report/automations/steps/discord.js.html +1 -1
  89. package/coverage/lcov-report/automations/steps/executeQuery.js.html +1 -1
  90. package/coverage/lcov-report/automations/steps/executeScript.js.html +1 -1
  91. package/coverage/lcov-report/automations/steps/filter.js.html +1 -1
  92. package/coverage/lcov-report/automations/steps/index.html +1 -1
  93. package/coverage/lcov-report/automations/steps/integromat.js.html +1 -1
  94. package/coverage/lcov-report/automations/steps/outgoingWebhook.js.html +1 -1
  95. package/coverage/lcov-report/automations/steps/queryRows.js.html +1 -1
  96. package/coverage/lcov-report/automations/steps/sendSmtpEmail.js.html +1 -1
  97. package/coverage/lcov-report/automations/steps/serverLog.js.html +1 -1
  98. package/coverage/lcov-report/automations/steps/slack.js.html +1 -1
  99. package/coverage/lcov-report/automations/steps/updateRow.js.html +1 -1
  100. package/coverage/lcov-report/automations/steps/utils.js.html +1 -1
  101. package/coverage/lcov-report/automations/steps/zapier.js.html +1 -1
  102. package/coverage/lcov-report/automations/triggerInfo/app.js.html +1 -1
  103. package/coverage/lcov-report/automations/triggerInfo/cron.js.html +1 -1
  104. package/coverage/lcov-report/automations/triggerInfo/index.html +1 -1
  105. package/coverage/lcov-report/automations/triggerInfo/index.js.html +1 -1
  106. package/coverage/lcov-report/automations/triggerInfo/rowDeleted.js.html +1 -1
  107. package/coverage/lcov-report/automations/triggerInfo/rowSaved.js.html +1 -1
  108. package/coverage/lcov-report/automations/triggerInfo/rowUpdated.js.html +1 -1
  109. package/coverage/lcov-report/automations/triggerInfo/webhook.js.html +1 -1
  110. package/coverage/lcov-report/automations/triggers.js.html +1 -1
  111. package/coverage/lcov-report/automations/utils.js.html +1 -1
  112. package/coverage/lcov-report/constants/index.html +5 -5
  113. package/coverage/lcov-report/constants/index.js.html +25 -4
  114. package/coverage/lcov-report/constants/layouts.js.html +1 -1
  115. package/coverage/lcov-report/constants/screens.js.html +1 -1
  116. package/coverage/lcov-report/db/client.js.html +1 -1
  117. package/coverage/lcov-report/db/inMemoryView.js.html +1 -1
  118. package/coverage/lcov-report/db/index.html +1 -1
  119. package/coverage/lcov-report/db/index.js.html +1 -1
  120. package/coverage/lcov-report/db/linkedRows/LinkController.js.html +1 -1
  121. package/coverage/lcov-report/db/linkedRows/index.html +1 -1
  122. package/coverage/lcov-report/db/linkedRows/index.js.html +1 -1
  123. package/coverage/lcov-report/db/linkedRows/linkUtils.js.html +1 -1
  124. package/coverage/lcov-report/db/newid.js.html +1 -1
  125. package/coverage/lcov-report/db/utils.js.html +1 -1
  126. package/coverage/lcov-report/events/AutomationEmitter.js.html +1 -1
  127. package/coverage/lcov-report/events/index.html +1 -1
  128. package/coverage/lcov-report/events/index.js.html +1 -1
  129. package/coverage/lcov-report/events/utils.js.html +1 -1
  130. package/coverage/lcov-report/index.html +37 -37
  131. package/coverage/lcov-report/integrations/tests/TestConfiguration.js.html +1 -1
  132. package/coverage/lcov-report/integrations/tests/index.html +1 -1
  133. package/coverage/lcov-report/middleware/appInfo.js.html +1 -1
  134. package/coverage/lcov-report/middleware/authorized.js.html +1 -1
  135. package/coverage/lcov-report/middleware/builder.js.html +1 -1
  136. package/coverage/lcov-report/middleware/currentapp.js.html +1 -1
  137. package/coverage/lcov-report/middleware/index.html +1 -1
  138. package/coverage/lcov-report/middleware/joi-validator.js.html +1 -1
  139. package/coverage/lcov-report/middleware/resourceId.js.html +1 -1
  140. package/coverage/lcov-report/middleware/selfhost.js.html +1 -1
  141. package/coverage/lcov-report/middleware/usageQuota.js.html +1 -1
  142. package/coverage/lcov-report/middleware/utils.js.html +1 -1
  143. package/coverage/lcov-report/threads/automation.js.html +14 -8
  144. package/coverage/lcov-report/threads/index.html +27 -27
  145. package/coverage/lcov-report/threads/index.js.html +29 -11
  146. package/coverage/lcov-report/threads/query.js.html +16 -7
  147. package/coverage/lcov-report/utilities/bcrypt.js.html +1 -1
  148. package/coverage/lcov-report/utilities/budibaseDir.js.html +1 -1
  149. package/coverage/lcov-report/utilities/centralPath.js.html +1 -1
  150. package/coverage/lcov-report/utilities/csvParser.js.html +1 -1
  151. package/coverage/lcov-report/utilities/global.js.html +1 -1
  152. package/coverage/lcov-report/utilities/index.html +1 -1
  153. package/coverage/lcov-report/utilities/index.js.html +1 -1
  154. package/coverage/lcov-report/utilities/queue/inMemoryQueue.js.html +1 -1
  155. package/coverage/lcov-report/utilities/queue/index.html +1 -1
  156. package/coverage/lcov-report/utilities/routing/index.html +1 -1
  157. package/coverage/lcov-report/utilities/routing/index.js.html +1 -1
  158. package/coverage/lcov-report/utilities/rowProcessor/index.html +1 -1
  159. package/coverage/lcov-report/utilities/rowProcessor/index.js.html +1 -1
  160. package/coverage/lcov-report/utilities/rowProcessor/utils.js.html +1 -1
  161. package/coverage/lcov-report/utilities/scriptRunner.js.html +1 -1
  162. package/coverage/lcov-report/utilities/security.js.html +1 -1
  163. package/coverage/lcov-report/utilities/statusCodes.js.html +1 -1
  164. package/coverage/lcov-report/utilities/users.js.html +1 -1
  165. package/coverage/lcov-report/utilities/workerRequests.js.html +1 -1
  166. package/coverage/lcov.info +303 -259
  167. package/dist/api/controllers/datasource.js +25 -5
  168. package/dist/api/controllers/table/external.js +8 -1
  169. package/dist/constants/index.js +6 -0
  170. package/dist/environment.js +13 -0
  171. package/dist/integrations/utils.js +7 -1
  172. package/dist/package.json +4 -4
  173. package/dist/threads/automation.js +3 -1
  174. package/dist/threads/index.js +9 -3
  175. package/dist/threads/query.js +3 -0
  176. package/dist/tsconfig.tsbuildinfo +1 -1
  177. package/package.json +5 -5
  178. package/scripts/dev/manage.js +1 -0
  179. package/src/api/controllers/datasource.js +35 -7
  180. package/src/api/controllers/table/external.js +8 -1
  181. package/src/constants/index.js +7 -0
  182. package/src/environment.js +15 -0
  183. package/src/integrations/utils.ts +6 -1
  184. package/src/threads/automation.js +3 -1
  185. package/src/threads/index.js +9 -3
  186. package/src/threads/query.js +3 -0
@@ -10,7 +10,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
10
10
  };
11
11
  const CouchDB = require("../../db");
12
12
  const { generateDatasourceID, getDatasourceParams, getQueryParams, DocumentTypes, BudibaseInternalDB, getTableParams, } = require("../../db/utils");
13
- const { BuildSchemaErrors } = require("../../constants");
13
+ const { BuildSchemaErrors, InvalidColumns } = require("../../constants");
14
14
  const { integrations } = require("../../integrations");
15
15
  const { getDatasourceAndQuery } = require("./row/utils");
16
16
  exports.fetch = function (ctx) {
@@ -127,6 +127,21 @@ exports.query = function (ctx) {
127
127
  }
128
128
  });
129
129
  };
130
+ function getErrorTables(errors, errorType) {
131
+ return Object.entries(errors)
132
+ .filter(entry => entry[1] === errorType)
133
+ .map(([name]) => name);
134
+ }
135
+ function updateError(error, newError, tables) {
136
+ if (!error) {
137
+ error = "";
138
+ }
139
+ if (error.length > 0) {
140
+ error += "\n";
141
+ }
142
+ error += `${newError} ${tables.join(", ")}`;
143
+ return error;
144
+ }
130
145
  const buildSchemaHelper = (datasource) => __awaiter(void 0, void 0, void 0, function* () {
131
146
  const Connector = integrations[datasource.source];
132
147
  // Connect to the DB and build the schema
@@ -146,10 +161,15 @@ const buildSchemaHelper = (datasource) => __awaiter(void 0, void 0, void 0, func
146
161
  const errors = connector.schemaErrors;
147
162
  let error = null;
148
163
  if (errors && Object.keys(errors).length > 0) {
149
- const noKeyTables = Object.entries(errors)
150
- .filter(entry => entry[1] === BuildSchemaErrors.NO_KEY)
151
- .map(([name]) => name);
152
- error = `No primary key constraint found for the following: ${noKeyTables.join(", ")}`;
164
+ const noKey = getErrorTables(errors, BuildSchemaErrors.NO_KEY);
165
+ const invalidCol = getErrorTables(errors, BuildSchemaErrors.INVALID_COLUMN);
166
+ if (noKey.length) {
167
+ error = updateError(error, "No primary key constraint found for the following:", noKey);
168
+ }
169
+ if (invalidCol.length) {
170
+ const invalidCols = Object.values(InvalidColumns).join(", ");
171
+ error = updateError(error, `Cannot use columns ${invalidCols} found in following:`, invalidCol);
172
+ }
153
173
  }
154
174
  return { tables: connector.tables, error };
155
175
  });
@@ -136,9 +136,13 @@ exports.save = function (ctx) {
136
136
  return __awaiter(this, void 0, void 0, function* () {
137
137
  const appId = ctx.appId;
138
138
  const table = ctx.request.body;
139
- // can't do this
139
+ // can't do this right now
140
140
  delete table.dataImport;
141
141
  const datasourceId = getDatasourceId(ctx.request.body);
142
+ // table doesn't exist already, note that it is created
143
+ if (!table._id) {
144
+ table.created = true;
145
+ }
142
146
  let tableToSave = Object.assign({ type: "table", _id: buildExternalTableId(datasourceId, table.name) }, table);
143
147
  let oldTable;
144
148
  if (ctx.request.body && ctx.request.body._id) {
@@ -213,6 +217,9 @@ exports.destroy = function (ctx) {
213
217
  return __awaiter(this, void 0, void 0, function* () {
214
218
  const appId = ctx.appId;
215
219
  const tableToDelete = yield getTable(appId, ctx.params.tableId);
220
+ if (!tableToDelete || !tableToDelete.created) {
221
+ ctx.throw(400, "Cannot delete tables which weren't created in Budibase.");
222
+ }
216
223
  const datasourceId = getDatasourceId(tableToDelete);
217
224
  const db = new CouchDB(appId);
218
225
  const datasource = yield db.get(datasourceId);
@@ -150,8 +150,14 @@ exports.MetadataTypes = {
150
150
  AUTOMATION_TEST_INPUT: "automationTestInput",
151
151
  AUTOMATION_TEST_HISTORY: "automationTestHistory",
152
152
  };
153
+ exports.InvalidColumns = {
154
+ ID: "_id",
155
+ REV: "_rev",
156
+ TABLE_ID: "tableId",
157
+ };
153
158
  exports.BuildSchemaErrors = {
154
159
  NO_KEY: "no_key",
160
+ INVALID_COLUMN: "invalid_column",
155
161
  };
156
162
  // pass through the list from the auth/core lib
157
163
  exports.ObjectStoreBuckets = ObjectStoreBuckets;
@@ -16,6 +16,7 @@ if (!LOADED && isDev() && !isTest()) {
16
16
  require("dotenv").config();
17
17
  LOADED = true;
18
18
  }
19
+ let inThread = false;
19
20
  module.exports = {
20
21
  // important
21
22
  PORT: process.env.PORT,
@@ -55,6 +56,7 @@ module.exports = {
55
56
  USERID_API_KEY: process.env.USERID_API_KEY,
56
57
  DEPLOYMENT_CREDENTIALS_URL: process.env.DEPLOYMENT_CREDENTIALS_URL,
57
58
  ALLOW_DEV_AUTOMATIONS: process.env.ALLOW_DEV_AUTOMATIONS,
59
+ DISABLE_THREADING: process.env.DISABLE_THREADING,
58
60
  _set(key, value) {
59
61
  process.env[key] = value;
60
62
  module.exports[key] = value;
@@ -65,7 +67,18 @@ module.exports = {
65
67
  isProd: () => {
66
68
  return !isDev();
67
69
  },
70
+ // used to check if already in a thread, don't thread further
71
+ setInThread: () => {
72
+ inThread = true;
73
+ },
74
+ isInThread: () => {
75
+ return inThread;
76
+ },
68
77
  };
78
+ // threading can cause memory issues with node-ts in development
79
+ if (isDev() && module.exports.DISABLE_THREADING == null) {
80
+ module.exports._set("DISABLE_THREADING", "1");
81
+ }
69
82
  // clean up any environment variable edge cases
70
83
  for (let [key, value] of Object.entries(module.exports)) {
71
84
  // handle the edge case of "0" to disable an environment variable
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.finaliseExternalTables = exports.isIsoDateString = exports.isSQL = exports.getSqlQuery = exports.convertSqlType = exports.breakRowIdField = exports.convertRowId = exports.isRowId = exports.generateRowIdField = exports.breakExternalTableId = exports.buildExternalTableId = exports.isExternalTable = exports.SqlClients = void 0;
4
4
  const datasource_1 = require("../definitions/datasource");
5
5
  const { DocumentTypes, SEPARATOR } = require("../db/utils");
6
- const { FieldTypes, BuildSchemaErrors } = require("../constants");
6
+ const { FieldTypes, BuildSchemaErrors, InvalidColumns } = require("../constants");
7
7
  const DOUBLE_SEPARATOR = `${SEPARATOR}${SEPARATOR}`;
8
8
  const ROW_ID_REGEX = /^\[.*]$/g;
9
9
  const SQL_TYPE_MAP = {
@@ -151,14 +151,20 @@ function copyExistingPropsOver(tableName, table, entities) {
151
151
  return table;
152
152
  }
153
153
  function finaliseExternalTables(tables, entities) {
154
+ const invalidColumns = Object.values(InvalidColumns);
154
155
  const finalTables = {};
155
156
  const errors = {};
156
157
  for (let [name, table] of Object.entries(tables)) {
158
+ const schemaFields = Object.keys(table.schema);
157
159
  // make sure every table has a key
158
160
  if (table.primary == null || table.primary.length === 0) {
159
161
  errors[name] = BuildSchemaErrors.NO_KEY;
160
162
  continue;
161
163
  }
164
+ else if (schemaFields.find(field => invalidColumns.includes(field))) {
165
+ errors[name] = BuildSchemaErrors.INVALID_COLUMN;
166
+ continue;
167
+ }
162
168
  // make sure all previous props have been added back
163
169
  finalTables[name] = copyExistingPropsOver(name, table, entities);
164
170
  }
package/dist/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@budibase/server",
3
3
  "email": "hi@budibase.com",
4
- "version": "0.9.185-alpha.9",
4
+ "version": "0.9.185-alpha.13",
5
5
  "description": "Budibase Web Server",
6
6
  "main": "src/index.js",
7
7
  "repository": {
@@ -68,9 +68,9 @@
68
68
  "author": "Budibase",
69
69
  "license": "AGPL-3.0-or-later",
70
70
  "dependencies": {
71
- "@budibase/auth": "^0.9.185-alpha.9",
72
- "@budibase/client": "^0.9.185-alpha.9",
73
- "@budibase/string-templates": "^0.9.185-alpha.9",
71
+ "@budibase/auth": "^0.9.185-alpha.13",
72
+ "@budibase/client": "^0.9.185-alpha.13",
73
+ "@budibase/string-templates": "^0.9.185-alpha.13",
74
74
  "@bull-board/api": "^3.7.0",
75
75
  "@bull-board/koa": "^3.7.0",
76
76
  "@elastic/elasticsearch": "7.10.0",
@@ -8,6 +8,9 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
8
8
  step((generator = generator.apply(thisArg, _arguments || [])).next());
9
9
  });
10
10
  };
11
+ // when thread starts, make sure it is recorded
12
+ const env = require("../environment");
13
+ env.setInThread();
11
14
  const actions = require("../automations/actions");
12
15
  const automationUtils = require("../automations/automationUtils");
13
16
  const AutomationEmitter = require("../events/AutomationEmitter");
@@ -16,7 +19,6 @@ const { DEFAULT_TENANT_ID } = require("@budibase/auth").constants;
16
19
  const CouchDB = require("../db");
17
20
  const { DocumentTypes, isDevAppID } = require("../db/utils");
18
21
  const { doInTenant } = require("@budibase/auth/tenancy");
19
- const env = require("../environment");
20
22
  const usage = require("../utilities/usageQuota");
21
23
  const { definitions: triggerDefs } = require("../automations/triggerInfo");
22
24
  const FILTER_STEP_ID = actions.ACTION_DEFINITIONS.FILTER.stepId;
@@ -22,10 +22,16 @@ function typeToFile(type) {
22
22
  class Thread {
23
23
  constructor(type, opts = { timeoutMs: null, count: 1 }) {
24
24
  this.type = type;
25
- if (!env.isTest()) {
25
+ this.count = opts.count ? opts.count : 1;
26
+ this.disableThreading =
27
+ env.isTest() ||
28
+ env.DISABLE_THREADING ||
29
+ this.count === 0 ||
30
+ env.isInThread();
31
+ if (!this.disableThreading) {
26
32
  const workerOpts = {
27
33
  autoStart: true,
28
- maxConcurrentWorkers: opts.count ? opts.count : 1,
34
+ maxConcurrentWorkers: this.count,
29
35
  };
30
36
  if (opts.timeoutMs) {
31
37
  workerOpts.maxCallTime = opts.timeoutMs;
@@ -37,7 +43,7 @@ class Thread {
37
43
  return new Promise((resolve, reject) => {
38
44
  let fncToCall;
39
45
  // if in test then don't use threading
40
- if (env.isTest()) {
46
+ if (this.disableThreading) {
41
47
  fncToCall = require(typeToFile(this.type));
42
48
  }
43
49
  else {
@@ -8,6 +8,9 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
8
8
  step((generator = generator.apply(thisArg, _arguments || [])).next());
9
9
  });
10
10
  };
11
+ // when thread starts, make sure it is recorded
12
+ const env = require("../environment");
13
+ env.setInThread();
11
14
  const ScriptRunner = require("../utilities/scriptRunner");
12
15
  const { integrations } = require("../integrations");
13
16
  function formatResponse(resp) {