@airtable/blocks 1.9.0 → 1.10.2-experimental-640bd10-20220211
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/CHANGELOG.md +20 -1
- package/dist/cjs/error_utils.js +44 -2
- package/dist/cjs/models/base.js +2 -1
- package/dist/cjs/models/cursor.js +2 -0
- package/dist/cjs/models/field.js +3 -13
- package/dist/cjs/models/grouped_record_query_result.js +5 -14
- package/dist/cjs/models/linked_records_query_result.js +78 -27
- package/dist/cjs/models/mutations.js +18 -162
- package/dist/cjs/models/query_manager.js +328 -0
- package/dist/cjs/models/record.js +311 -56
- package/dist/cjs/models/record_query_result.js +4 -1
- package/dist/cjs/models/record_store.js +557 -765
- package/dist/cjs/models/table.js +9 -8
- package/dist/cjs/models/table_or_view_query_result.js +526 -419
- package/dist/cjs/models/view.js +1 -1
- package/dist/cjs/models/view_data_store.js +255 -295
- package/dist/cjs/private_utils.js +40 -0
- package/dist/cjs/sdk.js +12 -2
- package/dist/cjs/testing/abstract_mock_airtable_interface.js +57 -11
- package/dist/cjs/testing/fixture_data.js +268 -0
- package/dist/cjs/testing/mock_base_data_stores.js +876 -0
- package/dist/cjs/types/airtable_interface.js +17 -2
- package/dist/cjs/types/block_query_spec.js +85 -0
- package/dist/cjs/ui/icon_config.js +4 -2
- package/dist/cjs/ui/use_global_config.js +1 -1
- package/dist/cjs/ui/use_records.js +5 -1
- package/dist/cjs/unstable_testing_utils.js +55 -1
- package/dist/cjs/watchable.js +15 -1
- package/dist/types/src/error_utils.d.ts +6 -0
- package/dist/types/src/error_utils.d.ts.map +1 -1
- package/dist/types/src/models/base.d.ts +2 -1
- package/dist/types/src/models/base.d.ts.map +1 -1
- package/dist/types/src/models/cursor.d.ts +2 -0
- package/dist/types/src/models/cursor.d.ts.map +1 -1
- package/dist/types/src/models/field.d.ts +3 -13
- package/dist/types/src/models/field.d.ts.map +1 -1
- package/dist/types/src/models/grouped_record_query_result.d.ts +3 -3
- package/dist/types/src/models/grouped_record_query_result.d.ts.map +1 -1
- package/dist/types/src/models/linked_records_query_result.d.ts.map +1 -1
- package/dist/types/src/models/mutations.d.ts.map +1 -1
- package/dist/types/src/models/query_manager.d.ts +2 -0
- package/dist/types/src/models/query_manager.d.ts.map +1 -0
- package/dist/types/src/models/record.d.ts +13 -4
- package/dist/types/src/models/record.d.ts.map +1 -1
- package/dist/types/src/models/record_query_result.d.ts +3 -2
- package/dist/types/src/models/record_query_result.d.ts.map +1 -1
- package/dist/types/src/models/record_store.d.ts.map +1 -1
- package/dist/types/src/models/table.d.ts +3 -2
- package/dist/types/src/models/table.d.ts.map +1 -1
- package/dist/types/src/models/table_or_view_query_result.d.ts +3 -5
- package/dist/types/src/models/table_or_view_query_result.d.ts.map +1 -1
- package/dist/types/src/models/view.d.ts +1 -1
- package/dist/types/src/models/view_data_store.d.ts +0 -1
- package/dist/types/src/models/view_data_store.d.ts.map +1 -1
- package/dist/types/src/models/view_metadata_query_result.d.ts +1 -1
- package/dist/types/src/models/view_metadata_query_result.d.ts.map +1 -1
- package/dist/types/src/private_utils.d.ts +26 -3
- package/dist/types/src/private_utils.d.ts.map +1 -1
- package/dist/types/src/sdk.d.ts.map +1 -1
- package/dist/types/src/testing/abstract_mock_airtable_interface.d.ts +11 -11
- package/dist/types/src/testing/abstract_mock_airtable_interface.d.ts.map +1 -1
- package/dist/types/{test/airtable_interface_mocks → src/testing}/fixture_data.d.ts +42 -19
- package/dist/types/src/testing/fixture_data.d.ts.map +1 -0
- package/dist/types/src/testing/mock_base_data_stores.d.ts +55 -0
- package/dist/types/src/testing/mock_base_data_stores.d.ts.map +1 -0
- package/dist/types/src/types/airtable_interface.d.ts +59 -20
- package/dist/types/src/types/airtable_interface.d.ts.map +1 -1
- package/dist/types/src/types/block_query_spec.d.ts +139 -0
- package/dist/types/src/types/block_query_spec.d.ts.map +1 -0
- package/dist/types/src/types/field.d.ts +7 -1
- package/dist/types/src/types/field.d.ts.map +1 -1
- package/dist/types/src/types/table.d.ts +0 -2
- package/dist/types/src/types/table.d.ts.map +1 -1
- package/dist/types/src/types/view.d.ts +3 -8
- package/dist/types/src/types/view.d.ts.map +1 -1
- package/dist/types/src/ui/icon_config.d.ts +5 -3
- package/dist/types/src/ui/icon_config.d.ts.map +1 -1
- package/dist/types/src/ui/link.d.ts +1 -1
- package/dist/types/src/ui/link.d.ts.map +1 -1
- package/dist/types/src/ui/record_card.d.ts +1 -1
- package/dist/types/src/ui/use_global_config.d.ts +1 -1
- package/dist/types/src/unstable_testing_utils.d.ts +4 -1
- package/dist/types/src/unstable_testing_utils.d.ts.map +1 -1
- package/dist/types/src/watchable.d.ts.map +1 -1
- package/dist/types/test/airtable_interface_mocks/linked_records.d.ts +1 -1
- package/dist/types/test/airtable_interface_mocks/linked_records.d.ts.map +1 -1
- package/dist/types/test/airtable_interface_mocks/mock_airtable_interface.d.ts +19 -12
- package/dist/types/test/airtable_interface_mocks/mock_airtable_interface.d.ts.map +1 -1
- package/dist/types/test/airtable_interface_mocks/project_tracker.d.ts +1 -1
- package/dist/types/test/airtable_interface_mocks/project_tracker.d.ts.map +1 -1
- package/dist/types/test/test_helpers.d.ts +2 -0
- package/dist/types/test/test_helpers.d.ts.map +1 -1
- package/dist/types/test/testing/fixture_data.test.d.ts +2 -0
- package/dist/types/test/testing/fixture_data.test.d.ts.map +1 -0
- package/package.json +3 -2
- package/dist/types/test/airtable_interface_mocks/fixture_data.d.ts.map +0 -1
|
@@ -22,6 +22,10 @@ require("core-js/modules/es.object.to-string");
|
|
|
22
22
|
|
|
23
23
|
require("core-js/modules/es.object.values");
|
|
24
24
|
|
|
25
|
+
require("core-js/modules/es.regexp.constructor");
|
|
26
|
+
|
|
27
|
+
require("core-js/modules/es.regexp.to-string");
|
|
28
|
+
|
|
25
29
|
require("core-js/modules/es.set");
|
|
26
30
|
|
|
27
31
|
require("core-js/modules/es.weak-map");
|
|
@@ -57,6 +61,7 @@ exports.getValueAtOwnPath = getValueAtOwnPath;
|
|
|
57
61
|
exports.arrayDifference = arrayDifference;
|
|
58
62
|
exports.debounce = debounce;
|
|
59
63
|
exports.isBlockDevelopmentRestrictionEnabled = isBlockDevelopmentRestrictionEnabled;
|
|
64
|
+
exports.isFieldId = isFieldId;
|
|
60
65
|
Object.defineProperty(exports, "isDeepEqual", {
|
|
61
66
|
enumerable: true,
|
|
62
67
|
get: function get() {
|
|
@@ -140,10 +145,16 @@ function cast(x) {
|
|
|
140
145
|
return x;
|
|
141
146
|
}
|
|
142
147
|
/**
|
|
148
|
+
* Used to turn a readonly type into a mutable copy: https://stackoverflow.com/a/50769802
|
|
149
|
+
* (used in the cloneDeep function)
|
|
150
|
+
*
|
|
143
151
|
* @hidden
|
|
144
152
|
*/
|
|
145
153
|
|
|
146
154
|
|
|
155
|
+
/**
|
|
156
|
+
* @hidden
|
|
157
|
+
*/
|
|
147
158
|
function cloneDeep(obj) {
|
|
148
159
|
var jsonString = JSON.stringify(obj);
|
|
149
160
|
|
|
@@ -553,4 +564,33 @@ function debounce(fn, timeoutMs) {
|
|
|
553
564
|
|
|
554
565
|
function isBlockDevelopmentRestrictionEnabled() {
|
|
555
566
|
return (0, _airtable_interface.default)().sdkInitData.baseData.isBlockDevelopmentRestrictionEnabled;
|
|
567
|
+
} // This is copied from hyper_id_generator in hyperbase
|
|
568
|
+
|
|
569
|
+
/**
|
|
570
|
+
* Airtable id format. All object ids to have this format:
|
|
571
|
+
* <3 char prefix (lower-case)> + <14 random chars (upper/lower-case & numbers)>
|
|
572
|
+
* e.g. app4iu8QmuwcCbWCE
|
|
573
|
+
*
|
|
574
|
+
* We call it an "objectId" rather than "modelId" because not everything with an id is a model,
|
|
575
|
+
* e.g. worker access tokens.
|
|
576
|
+
*/
|
|
577
|
+
|
|
578
|
+
|
|
579
|
+
var ALPHA_NUMERIC_CHAR_PATTERN = '[A-Za-z0-9]';
|
|
580
|
+
var OBJECT_ID_PREFIX_LENGTH = 3; // We allow shorter objectIds because our tests use non-standard AirtableIds
|
|
581
|
+
|
|
582
|
+
var OBJECT_ID_MIN_SUFFIX_LENGTH = 1;
|
|
583
|
+
var OBJECT_ID_SUFFIX_LENGTH = 14;
|
|
584
|
+
var OBJECT_ID_SUFFIX_PATTERN = ALPHA_NUMERIC_CHAR_PATTERN + '{' + OBJECT_ID_MIN_SUFFIX_LENGTH + ',' + OBJECT_ID_SUFFIX_LENGTH + '}';
|
|
585
|
+
var OBJECT_ID_PATTERN = '[a-z]{' + OBJECT_ID_PREFIX_LENGTH + '}' + OBJECT_ID_SUFFIX_PATTERN;
|
|
586
|
+
var OBJECT_ID_REGEX = new RegExp('^' + OBJECT_ID_PATTERN + '$');
|
|
587
|
+
|
|
588
|
+
function _isStringAnObjectId(str) {
|
|
589
|
+
return OBJECT_ID_REGEX.test(str);
|
|
590
|
+
}
|
|
591
|
+
/** @internal */
|
|
592
|
+
|
|
593
|
+
|
|
594
|
+
function isFieldId(str) {
|
|
595
|
+
return typeof str === 'string' && _isStringAnObjectId(str) && str.substr(0, 3) === 'fld';
|
|
556
596
|
}
|
package/dist/cjs/sdk.js
CHANGED
|
@@ -45,6 +45,8 @@ var _undo_redo = _interopRequireDefault(require("./undo_redo"));
|
|
|
45
45
|
|
|
46
46
|
var _perform_record_action = require("./perform_record_action");
|
|
47
47
|
|
|
48
|
+
var _query_manager = require("./models/query_manager");
|
|
49
|
+
|
|
48
50
|
/** @hidden */
|
|
49
51
|
|
|
50
52
|
/** */
|
|
@@ -101,6 +103,12 @@ function () {
|
|
|
101
103
|
|
|
102
104
|
/** Represents the current Airtable {@link Base}. */
|
|
103
105
|
|
|
106
|
+
/**
|
|
107
|
+
* Represents active queries and their state
|
|
108
|
+
*
|
|
109
|
+
* @internal
|
|
110
|
+
*/
|
|
111
|
+
|
|
104
112
|
/** Contains information about the current session. */
|
|
105
113
|
|
|
106
114
|
/** @internal */
|
|
@@ -152,6 +160,7 @@ function () {
|
|
|
152
160
|
(0, _defineProperty2.default)(this, "__airtableInterface", void 0);
|
|
153
161
|
(0, _defineProperty2.default)(this, "globalConfig", void 0);
|
|
154
162
|
(0, _defineProperty2.default)(this, "base", void 0);
|
|
163
|
+
(0, _defineProperty2.default)(this, "_queryManager", void 0);
|
|
155
164
|
(0, _defineProperty2.default)(this, "session", void 0);
|
|
156
165
|
(0, _defineProperty2.default)(this, "__mutations", void 0);
|
|
157
166
|
(0, _defineProperty2.default)(this, "installationId", void 0);
|
|
@@ -167,6 +176,7 @@ function () {
|
|
|
167
176
|
var sdkInitData = airtableInterface.sdkInitData;
|
|
168
177
|
this.globalConfig = new _global_config.default(sdkInitData.initialKvValuesByKey, this);
|
|
169
178
|
this.base = new _base.default(this);
|
|
179
|
+
this._queryManager = new _query_manager.QueryManager(this);
|
|
170
180
|
this.installationId = sdkInitData.blockInstallationId; // Bind the public methods on this class so users can import
|
|
171
181
|
// just the method, e.g.
|
|
172
182
|
// import {reload} from '@airtable/blocks';
|
|
@@ -176,7 +186,7 @@ function () {
|
|
|
176
186
|
this.viewport = new _viewport.default(sdkInitData.isFullscreen, airtableInterface);
|
|
177
187
|
this.cursor = new _cursor.default(this);
|
|
178
188
|
this.session = new _session.default(this);
|
|
179
|
-
this.__mutations = new _mutations.default(this, this.session, this.base,
|
|
189
|
+
this.__mutations = new _mutations.default(this, this.session, this.base, updates => this.__applyGlobalConfigUpdates(updates));
|
|
180
190
|
this.settingsButton = new _settings_button.default(airtableInterface);
|
|
181
191
|
this.undoRedo = new _undo_redo.default(airtableInterface);
|
|
182
192
|
this.performRecordAction = new _perform_record_action.PerformRecordAction(this, airtableInterface);
|
|
@@ -330,4 +340,4 @@ function () {
|
|
|
330
340
|
}();
|
|
331
341
|
|
|
332
342
|
exports.default = BlockSdk;
|
|
333
|
-
(0, _defineProperty2.default)(BlockSdk, "VERSION", "1.
|
|
343
|
+
(0, _defineProperty2.default)(BlockSdk, "VERSION", "1.10.2-experimental-640bd10-20220211");
|
|
@@ -4,17 +4,23 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
4
4
|
|
|
5
5
|
require("core-js/modules/es.array.concat");
|
|
6
6
|
|
|
7
|
-
require("core-js/modules/es.array.
|
|
7
|
+
require("core-js/modules/es.array.iterator");
|
|
8
8
|
|
|
9
9
|
require("core-js/modules/es.object.to-string");
|
|
10
10
|
|
|
11
11
|
require("core-js/modules/es.promise");
|
|
12
12
|
|
|
13
|
+
require("core-js/modules/web.dom-collections.iterator");
|
|
14
|
+
|
|
13
15
|
Object.defineProperty(exports, "__esModule", {
|
|
14
16
|
value: true
|
|
15
17
|
});
|
|
16
18
|
exports.AbstractMockAirtableInterface = void 0;
|
|
17
19
|
|
|
20
|
+
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
21
|
+
|
|
22
|
+
require("regenerator-runtime/runtime");
|
|
23
|
+
|
|
18
24
|
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
19
25
|
|
|
20
26
|
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
@@ -155,7 +161,8 @@ var globalConfigHelpers = {
|
|
|
155
161
|
var idGenerator = {
|
|
156
162
|
generateRecordId: () => 'recGeneratedMockId',
|
|
157
163
|
generateFieldId: () => 'fldGeneratedMockId',
|
|
158
|
-
generateTableId: () => 'tblGeneratedMockId'
|
|
164
|
+
generateTableId: () => 'tblGeneratedMockId',
|
|
165
|
+
generateViewId: () => 'viwGeneratedMockId'
|
|
159
166
|
};
|
|
160
167
|
/**
|
|
161
168
|
* An abstract base class with a common interface exposed to both Blocks SDK's
|
|
@@ -214,18 +221,15 @@ function (_EventEmitter) {
|
|
|
214
221
|
};
|
|
215
222
|
}
|
|
216
223
|
}, {
|
|
217
|
-
key: "
|
|
218
|
-
value: function
|
|
224
|
+
key: "createVisListWithRecordIds",
|
|
225
|
+
value: function createVisListWithRecordIds(recordIds, fieldDatas, sorts, tableId) {
|
|
219
226
|
return {
|
|
220
|
-
removeRecordIds(
|
|
227
|
+
removeRecordIds(removedRecordIds) {},
|
|
221
228
|
|
|
222
|
-
|
|
229
|
+
addRecordIds(addedRecordIds) {},
|
|
223
230
|
|
|
224
231
|
getOrderedRecordIds() {
|
|
225
|
-
return
|
|
226
|
-
var id = _ref.id;
|
|
227
|
-
return id;
|
|
228
|
-
});
|
|
232
|
+
return [...recordIds];
|
|
229
233
|
}
|
|
230
234
|
|
|
231
235
|
};
|
|
@@ -237,7 +241,49 @@ function (_EventEmitter) {
|
|
|
237
241
|
}
|
|
238
242
|
}, {
|
|
239
243
|
key: "setActiveViewOrTable",
|
|
240
|
-
value: function setActiveViewOrTable(tableId, viewId) {}
|
|
244
|
+
value: function setActiveViewOrTable(tableId, viewId) {}
|
|
245
|
+
}, {
|
|
246
|
+
key: "subscribeToQueryAndPopulateStoresAsync",
|
|
247
|
+
value: function subscribeToQueryAndPopulateStoresAsync(query, options) {
|
|
248
|
+
return _regenerator.default.async(function subscribeToQueryAndPopulateStoresAsync$(_context) {
|
|
249
|
+
while (1) {
|
|
250
|
+
switch (_context.prev = _context.next) {
|
|
251
|
+
case 0:
|
|
252
|
+
throw (0, _error_utils.spawnError)('subscribeToQueryAndPopulateStoresAsync unimplemented');
|
|
253
|
+
|
|
254
|
+
case 1:
|
|
255
|
+
case "end":
|
|
256
|
+
return _context.stop();
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
});
|
|
260
|
+
}
|
|
261
|
+
}, {
|
|
262
|
+
key: "unsubscribeFromQueryIdsAsync",
|
|
263
|
+
value: function unsubscribeFromQueryIdsAsync(querySpecIds) {
|
|
264
|
+
return _regenerator.default.async(function unsubscribeFromQueryIdsAsync$(_context2) {
|
|
265
|
+
while (1) {
|
|
266
|
+
switch (_context2.prev = _context2.next) {
|
|
267
|
+
case 0:
|
|
268
|
+
throw (0, _error_utils.spawnError)('unsubscribeFromQueryIdsAsync unimplemented');
|
|
269
|
+
|
|
270
|
+
case 1:
|
|
271
|
+
case "end":
|
|
272
|
+
return _context2.stop();
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
});
|
|
276
|
+
}
|
|
277
|
+
}, {
|
|
278
|
+
key: "getTableRecordStoreIfExists",
|
|
279
|
+
value: function getTableRecordStoreIfExists(tableId) {
|
|
280
|
+
throw (0, _error_utils.spawnError)('getTableRecordStoreIfExists unimplemented');
|
|
281
|
+
}
|
|
282
|
+
}, {
|
|
283
|
+
key: "getViewMetadataStoreIfExists",
|
|
284
|
+
value: function getViewMetadataStoreIfExists(tableId, viewId) {
|
|
285
|
+
throw (0, _error_utils.spawnError)('getViewMetadataStoreIfExists unimplemented');
|
|
286
|
+
} // TODO(jugglinmike): Implement
|
|
241
287
|
|
|
242
288
|
}, {
|
|
243
289
|
key: "subscribeToGlobalConfigUpdates",
|
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
require("core-js/modules/es.symbol");
|
|
6
|
+
|
|
7
|
+
require("core-js/modules/es.symbol.description");
|
|
8
|
+
|
|
9
|
+
require("core-js/modules/es.array.filter");
|
|
10
|
+
|
|
11
|
+
require("core-js/modules/es.array.includes");
|
|
12
|
+
|
|
13
|
+
require("core-js/modules/es.array.iterator");
|
|
14
|
+
|
|
15
|
+
require("core-js/modules/es.array.map");
|
|
16
|
+
|
|
17
|
+
require("core-js/modules/es.object.get-own-property-descriptors");
|
|
18
|
+
|
|
19
|
+
require("core-js/modules/es.object.to-string");
|
|
20
|
+
|
|
21
|
+
require("core-js/modules/es.string.includes");
|
|
22
|
+
|
|
23
|
+
require("core-js/modules/web.dom-collections.for-each");
|
|
24
|
+
|
|
25
|
+
require("core-js/modules/web.dom-collections.iterator");
|
|
26
|
+
|
|
27
|
+
Object.defineProperty(exports, "__esModule", {
|
|
28
|
+
value: true
|
|
29
|
+
});
|
|
30
|
+
exports.convertFixtureDataToSdkInitData = convertFixtureDataToSdkInitData;
|
|
31
|
+
|
|
32
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
33
|
+
|
|
34
|
+
var _private_utils = require("../private_utils");
|
|
35
|
+
|
|
36
|
+
var _airtable_interface = require("../types/airtable_interface");
|
|
37
|
+
|
|
38
|
+
var _error_utils = require("../error_utils");
|
|
39
|
+
|
|
40
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
|
|
41
|
+
|
|
42
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
|
43
|
+
|
|
44
|
+
// There are some values that FixtureData does not cover but SdkInitData
|
|
45
|
+
// requires, so we fill in some mock values for them if needed.
|
|
46
|
+
var MOCK_BLOCK_INSTALLATION_ID = 'blicPfOILwejF6HL2';
|
|
47
|
+
var MOCK_BLOCK_RUN_CONTEXT_TYPE = _airtable_interface.BlockRunContextType.DASHBOARD_APP;
|
|
48
|
+
var MOCK_BASE_PERMISSION_LEVEL = 'create';
|
|
49
|
+
var MOCK_CURRENT_USER_ID = 'usrGalSamari';
|
|
50
|
+
var MOCK_BASE_COLOR = 'purple';
|
|
51
|
+
var MOCK_BILLING_GROUP = 'pro';
|
|
52
|
+
/** @hidden */
|
|
53
|
+
|
|
54
|
+
function convertFixtureDataToSdkInitData(fixtureData) {
|
|
55
|
+
var _fixtureData$base = fixtureData.base,
|
|
56
|
+
id = _fixtureData$base.id,
|
|
57
|
+
name = _fixtureData$base.name,
|
|
58
|
+
color = _fixtureData$base.color,
|
|
59
|
+
tables = _fixtureData$base.tables,
|
|
60
|
+
collaborators = _fixtureData$base.collaborators,
|
|
61
|
+
globalConfig = fixtureData.globalConfig;
|
|
62
|
+
var tablesById = {};
|
|
63
|
+
|
|
64
|
+
if (tables.length === 0) {
|
|
65
|
+
throw (0, _error_utils.spawnError)('Fixture data must include at least one table');
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
var _iteratorNormalCompletion = true;
|
|
69
|
+
var _didIteratorError = false;
|
|
70
|
+
var _iteratorError = undefined;
|
|
71
|
+
|
|
72
|
+
try {
|
|
73
|
+
for (var _iterator = tables[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
|
|
74
|
+
var table = _step.value;
|
|
75
|
+
var tableData = convertTableFixtureDataToTableData(table);
|
|
76
|
+
|
|
77
|
+
if (tablesById[table.id]) {
|
|
78
|
+
throw (0, _error_utils.spawnError)('repeated table ID: %s', table.id);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
tablesById[table.id] = tableData;
|
|
82
|
+
}
|
|
83
|
+
} catch (err) {
|
|
84
|
+
_didIteratorError = true;
|
|
85
|
+
_iteratorError = err;
|
|
86
|
+
} finally {
|
|
87
|
+
try {
|
|
88
|
+
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
89
|
+
_iterator.return();
|
|
90
|
+
}
|
|
91
|
+
} finally {
|
|
92
|
+
if (_didIteratorError) {
|
|
93
|
+
throw _iteratorError;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
return {
|
|
99
|
+
isDevelopmentMode: false,
|
|
100
|
+
blockInstallationId: MOCK_BLOCK_INSTALLATION_ID,
|
|
101
|
+
isFirstRun: false,
|
|
102
|
+
isFullscreen: false,
|
|
103
|
+
initialKvValuesByKey: _objectSpread({}, globalConfig),
|
|
104
|
+
runContext: {
|
|
105
|
+
type: MOCK_BLOCK_RUN_CONTEXT_TYPE
|
|
106
|
+
},
|
|
107
|
+
baseData: {
|
|
108
|
+
id,
|
|
109
|
+
name,
|
|
110
|
+
color: color !== null && color !== void 0 ? color : MOCK_BASE_COLOR,
|
|
111
|
+
activeTableId: tables[0].id,
|
|
112
|
+
tableOrder: tables.map(t => t.id),
|
|
113
|
+
tablesById,
|
|
114
|
+
permissionLevel: MOCK_BASE_PERMISSION_LEVEL,
|
|
115
|
+
currentUserId: MOCK_CURRENT_USER_ID,
|
|
116
|
+
enabledFeatureNames: [],
|
|
117
|
+
collaboratorsById: (0, _private_utils.keyBy)(collaborators.map(c => {
|
|
118
|
+
// filter out c.isActive
|
|
119
|
+
var email = c.email,
|
|
120
|
+
profilePicUrl = c.profilePicUrl;
|
|
121
|
+
return {
|
|
122
|
+
id: c.id,
|
|
123
|
+
name: c.name,
|
|
124
|
+
email,
|
|
125
|
+
profilePicUrl
|
|
126
|
+
};
|
|
127
|
+
}), _private_utils.getId),
|
|
128
|
+
activeCollaboratorIds: collaborators.filter(c => c.isActive).map(c => c.id),
|
|
129
|
+
cursorData: null,
|
|
130
|
+
billingPlanGrouping: MOCK_BILLING_GROUP,
|
|
131
|
+
appInterface: {},
|
|
132
|
+
isBlockDevelopmentRestrictionEnabled: false
|
|
133
|
+
},
|
|
134
|
+
intentData: null
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
/** @internal */
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
function convertTableFixtureDataToTableData(tableFixtureData) {
|
|
141
|
+
var id = tableFixtureData.id,
|
|
142
|
+
name = tableFixtureData.name,
|
|
143
|
+
description = tableFixtureData.description,
|
|
144
|
+
fields = tableFixtureData.fields,
|
|
145
|
+
views = tableFixtureData.views,
|
|
146
|
+
records = tableFixtureData.records;
|
|
147
|
+
var tableRecordIds = records.map(_private_utils.getId);
|
|
148
|
+
var fieldsById = {};
|
|
149
|
+
|
|
150
|
+
if (fields.length === 0) {
|
|
151
|
+
throw (0, _error_utils.spawnError)('Every table in fixture data must specify at least one field, but table "%s" specified zero fields', id);
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
var _iteratorNormalCompletion2 = true;
|
|
155
|
+
var _didIteratorError2 = false;
|
|
156
|
+
var _iteratorError2 = undefined;
|
|
157
|
+
|
|
158
|
+
try {
|
|
159
|
+
for (var _iterator2 = fields[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
|
|
160
|
+
var field = _step2.value;
|
|
161
|
+
var fieldData = convertFieldFixtureDataToFieldData(field);
|
|
162
|
+
|
|
163
|
+
if (fieldsById[field.id]) {
|
|
164
|
+
throw (0, _error_utils.spawnError)('repeated field ID: %s', field.id);
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
fieldsById[field.id] = fieldData;
|
|
168
|
+
}
|
|
169
|
+
} catch (err) {
|
|
170
|
+
_didIteratorError2 = true;
|
|
171
|
+
_iteratorError2 = err;
|
|
172
|
+
} finally {
|
|
173
|
+
try {
|
|
174
|
+
if (!_iteratorNormalCompletion2 && _iterator2.return != null) {
|
|
175
|
+
_iterator2.return();
|
|
176
|
+
}
|
|
177
|
+
} finally {
|
|
178
|
+
if (_didIteratorError2) {
|
|
179
|
+
throw _iteratorError2;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
var viewsById = {};
|
|
185
|
+
|
|
186
|
+
if (views.length === 0) {
|
|
187
|
+
throw (0, _error_utils.spawnError)('Every table in fixture data must specify at least one view, but table "%s" specified zero views', id);
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
var _iteratorNormalCompletion3 = true;
|
|
191
|
+
var _didIteratorError3 = false;
|
|
192
|
+
var _iteratorError3 = undefined;
|
|
193
|
+
|
|
194
|
+
try {
|
|
195
|
+
for (var _iterator3 = views[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {
|
|
196
|
+
var view = _step3.value;
|
|
197
|
+
var viewData = view;
|
|
198
|
+
|
|
199
|
+
if (viewsById[view.id]) {
|
|
200
|
+
throw (0, _error_utils.spawnError)('repeated view ID: %s', view.id);
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
view.records.map(_private_utils.getId).forEach(viewRecordId => {
|
|
204
|
+
if (!tableRecordIds.includes(viewRecordId)) {
|
|
205
|
+
throw (0, _error_utils.spawnError)('record %s not present in table %s', viewRecordId, id);
|
|
206
|
+
}
|
|
207
|
+
});
|
|
208
|
+
viewsById[view.id] = viewData;
|
|
209
|
+
}
|
|
210
|
+
} catch (err) {
|
|
211
|
+
_didIteratorError3 = true;
|
|
212
|
+
_iteratorError3 = err;
|
|
213
|
+
} finally {
|
|
214
|
+
try {
|
|
215
|
+
if (!_iteratorNormalCompletion3 && _iterator3.return != null) {
|
|
216
|
+
_iterator3.return();
|
|
217
|
+
}
|
|
218
|
+
} finally {
|
|
219
|
+
if (_didIteratorError3) {
|
|
220
|
+
throw _iteratorError3;
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
return {
|
|
226
|
+
id,
|
|
227
|
+
name,
|
|
228
|
+
description,
|
|
229
|
+
primaryFieldId: fields[0].id,
|
|
230
|
+
fieldsById,
|
|
231
|
+
activeViewId: views[0].id,
|
|
232
|
+
viewOrder: views.map(v => v.id),
|
|
233
|
+
viewsById,
|
|
234
|
+
lock: null,
|
|
235
|
+
externalSyncById: null
|
|
236
|
+
};
|
|
237
|
+
}
|
|
238
|
+
/** @internal */
|
|
239
|
+
|
|
240
|
+
|
|
241
|
+
function convertFieldFixtureDataToFieldData(fieldFixtureData) {
|
|
242
|
+
var id = fieldFixtureData.id,
|
|
243
|
+
name = fieldFixtureData.name,
|
|
244
|
+
description = fieldFixtureData.description,
|
|
245
|
+
type = fieldFixtureData.type,
|
|
246
|
+
options = fieldFixtureData.options;
|
|
247
|
+
return {
|
|
248
|
+
id,
|
|
249
|
+
name,
|
|
250
|
+
type,
|
|
251
|
+
description,
|
|
252
|
+
typeOptions: options,
|
|
253
|
+
lock: null
|
|
254
|
+
};
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* A complete set of information necessary to initialize a simulated Airtable
|
|
258
|
+
* Base in automated test environments. This is currently copied from
|
|
259
|
+
* block-testing.
|
|
260
|
+
*
|
|
261
|
+
* Unlike SdkInitData which does not contain record data by design,
|
|
262
|
+
* FixtureData contains it in fixtureData.base.tables[number].records,
|
|
263
|
+
* and relies on dependent modules to simulate the hyperbase behavior of
|
|
264
|
+
* only making those records after corresponding necessary calls to
|
|
265
|
+
* AirtableInterface.
|
|
266
|
+
*
|
|
267
|
+
* @hidden
|
|
268
|
+
*/
|