@airtable/blocks 1.11.1-experimental-68738f2-20220526 → 1.13.0

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 (115) hide show
  1. package/README.md +2 -2
  2. package/dist/cjs/error_utils.js +1 -19
  3. package/dist/cjs/global_config.js +3 -3
  4. package/dist/cjs/injected/airtable_interface.js +1 -1
  5. package/dist/cjs/models/base.js +9 -9
  6. package/dist/cjs/models/cursor.js +3 -3
  7. package/dist/cjs/models/field.js +3 -3
  8. package/dist/cjs/models/grouped_record_query_result.js +14 -5
  9. package/dist/cjs/models/linked_records_query_result.js +27 -78
  10. package/dist/cjs/models/mutations.js +163 -18
  11. package/dist/cjs/models/record.js +55 -310
  12. package/dist/cjs/models/record_query_result.js +2 -5
  13. package/dist/cjs/models/record_store.js +829 -555
  14. package/dist/cjs/models/session.js +3 -3
  15. package/dist/cjs/models/table.js +31 -31
  16. package/dist/cjs/models/table_or_view_query_result.js +419 -526
  17. package/dist/cjs/models/view.js +23 -1
  18. package/dist/cjs/models/view_data_store.js +295 -255
  19. package/dist/cjs/private_utils.js +0 -40
  20. package/dist/cjs/sdk.js +9 -12
  21. package/dist/cjs/settings_button.js +1 -1
  22. package/dist/cjs/testing/abstract_mock_airtable_interface.js +11 -57
  23. package/dist/cjs/types/airtable_interface.js +2 -17
  24. package/dist/cjs/ui/block_wrapper.js +2 -5
  25. package/dist/cjs/ui/expand_record_picker_async.js +1 -1
  26. package/dist/cjs/ui/global_config_synced_component_helpers.js +6 -0
  27. package/dist/cjs/ui/initialize_block.js +3 -3
  28. package/dist/cjs/ui/use_global_config.js +1 -1
  29. package/dist/cjs/ui/use_loadable.js +3 -3
  30. package/dist/cjs/ui/use_record_action_data.js +11 -11
  31. package/dist/cjs/ui/use_records.js +1 -5
  32. package/dist/cjs/ui/use_settings_button.js +1 -1
  33. package/dist/cjs/ui/viewport_constraint.js +1 -1
  34. package/dist/cjs/unstable_testing_utils.js +1 -61
  35. package/dist/cjs/viewport.js +9 -9
  36. package/dist/cjs/watchable.js +1 -15
  37. package/dist/types/src/error_utils.d.ts +1 -2
  38. package/dist/types/src/error_utils.d.ts.map +1 -1
  39. package/dist/types/src/global_config.d.ts +3 -3
  40. package/dist/types/src/models/base.d.ts +9 -9
  41. package/dist/types/src/models/cursor.d.ts +3 -3
  42. package/dist/types/src/models/field.d.ts +3 -3
  43. package/dist/types/src/models/grouped_record_query_result.d.ts +3 -3
  44. package/dist/types/src/models/grouped_record_query_result.d.ts.map +1 -1
  45. package/dist/types/src/models/linked_records_query_result.d.ts.map +1 -1
  46. package/dist/types/src/models/mutations.d.ts.map +1 -1
  47. package/dist/types/src/models/record.d.ts +3 -12
  48. package/dist/types/src/models/record.d.ts.map +1 -1
  49. package/dist/types/src/models/record_query_result.d.ts +4 -5
  50. package/dist/types/src/models/record_query_result.d.ts.map +1 -1
  51. package/dist/types/src/models/record_store.d.ts.map +1 -1
  52. package/dist/types/src/models/session.d.ts +3 -3
  53. package/dist/types/src/models/table.d.ts +25 -25
  54. package/dist/types/src/models/table_or_view_query_result.d.ts +5 -3
  55. package/dist/types/src/models/table_or_view_query_result.d.ts.map +1 -1
  56. package/dist/types/src/models/view.d.ts +11 -0
  57. package/dist/types/src/models/view.d.ts.map +1 -1
  58. package/dist/types/src/models/view_data_store.d.ts +1 -0
  59. package/dist/types/src/models/view_data_store.d.ts.map +1 -1
  60. package/dist/types/src/models/view_metadata_query_result.d.ts +1 -1
  61. package/dist/types/src/models/view_metadata_query_result.d.ts.map +1 -1
  62. package/dist/types/src/private_utils.d.ts +1 -24
  63. package/dist/types/src/private_utils.d.ts.map +1 -1
  64. package/dist/types/src/sdk.d.ts +3 -1
  65. package/dist/types/src/sdk.d.ts.map +1 -1
  66. package/dist/types/src/settings_button.d.ts +1 -1
  67. package/dist/types/src/testing/abstract_mock_airtable_interface.d.ts +11 -11
  68. package/dist/types/src/testing/abstract_mock_airtable_interface.d.ts.map +1 -1
  69. package/dist/types/src/types/airtable_interface.d.ts +20 -59
  70. package/dist/types/src/types/airtable_interface.d.ts.map +1 -1
  71. package/dist/types/src/types/field.d.ts +10 -5
  72. package/dist/types/src/types/field.d.ts.map +1 -1
  73. package/dist/types/src/types/table.d.ts +2 -0
  74. package/dist/types/src/types/table.d.ts.map +1 -1
  75. package/dist/types/src/types/view.d.ts +9 -3
  76. package/dist/types/src/types/view.d.ts.map +1 -1
  77. package/dist/types/src/ui/block_wrapper.d.ts.map +1 -1
  78. package/dist/types/src/ui/expand_record_picker_async.d.ts +1 -1
  79. package/dist/types/src/ui/global_config_synced_component_helpers.d.ts.map +1 -1
  80. package/dist/types/src/ui/initialize_block.d.ts +1 -1
  81. package/dist/types/src/ui/record_card.d.ts +1 -1
  82. package/dist/types/src/ui/use_global_config.d.ts +1 -1
  83. package/dist/types/src/ui/use_loadable.d.ts +2 -2
  84. package/dist/types/src/ui/use_record_action_data.d.ts +11 -11
  85. package/dist/types/src/ui/use_settings_button.d.ts +1 -1
  86. package/dist/types/src/ui/viewport_constraint.d.ts +3 -3
  87. package/dist/types/src/ui/viewport_constraint.d.ts.map +1 -1
  88. package/dist/types/src/unstable_testing_utils.d.ts +1 -4
  89. package/dist/types/src/unstable_testing_utils.d.ts.map +1 -1
  90. package/dist/types/src/viewport.d.ts +9 -9
  91. package/dist/types/src/watchable.d.ts.map +1 -1
  92. package/dist/types/{src/testing → test/airtable_interface_mocks}/fixture_data.d.ts +25 -44
  93. package/dist/types/test/airtable_interface_mocks/fixture_data.d.ts.map +1 -0
  94. package/dist/types/test/airtable_interface_mocks/linked_records.d.ts +1 -1
  95. package/dist/types/test/airtable_interface_mocks/linked_records.d.ts.map +1 -1
  96. package/dist/types/test/airtable_interface_mocks/mock_airtable_interface.d.ts +12 -19
  97. package/dist/types/test/airtable_interface_mocks/mock_airtable_interface.d.ts.map +1 -1
  98. package/dist/types/test/airtable_interface_mocks/project_tracker.d.ts +1 -1
  99. package/dist/types/test/airtable_interface_mocks/project_tracker.d.ts.map +1 -1
  100. package/dist/types/test/test_helpers.d.ts +0 -2
  101. package/dist/types/test/test_helpers.d.ts.map +1 -1
  102. package/package.json +2 -3
  103. package/dist/cjs/models/query_manager.js +0 -328
  104. package/dist/cjs/testing/fixture_data.js +0 -271
  105. package/dist/cjs/testing/mock_base_data_stores.js +0 -891
  106. package/dist/cjs/types/block_query_spec.js +0 -85
  107. package/dist/types/src/models/query_manager.d.ts +0 -2
  108. package/dist/types/src/models/query_manager.d.ts.map +0 -1
  109. package/dist/types/src/testing/fixture_data.d.ts.map +0 -1
  110. package/dist/types/src/testing/mock_base_data_stores.d.ts +0 -59
  111. package/dist/types/src/testing/mock_base_data_stores.d.ts.map +0 -1
  112. package/dist/types/src/types/block_query_spec.d.ts +0 -139
  113. package/dist/types/src/types/block_query_spec.d.ts.map +0 -1
  114. package/dist/types/test/testing/fixture_data.test.d.ts +0 -2
  115. package/dist/types/test/testing/fixture_data.test.d.ts.map +0 -1
@@ -1,328 +0,0 @@
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.iterator");
10
-
11
- require("core-js/modules/es.map");
12
-
13
- require("core-js/modules/es.object.to-string");
14
-
15
- require("core-js/modules/es.promise");
16
-
17
- require("core-js/modules/web.dom-collections.for-each");
18
-
19
- require("core-js/modules/web.dom-collections.iterator");
20
-
21
- Object.defineProperty(exports, "__esModule", {
22
- value: true
23
- });
24
- exports.QueryManager = void 0;
25
-
26
- var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
27
-
28
- require("regenerator-runtime/runtime");
29
-
30
- var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
31
-
32
- var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
33
-
34
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
35
-
36
- var _error_utils = require("../error_utils");
37
-
38
- var _private_utils = require("../private_utils");
39
-
40
- /**
41
- * This provides a singleton instance which is responsible for all queries sent
42
- * to PublicAirtableInterface.
43
- *
44
- * This can allow looking up queries by queryId.
45
- *
46
- * @internal
47
- */
48
- var QueryManager =
49
- /*#__PURE__*/
50
- function () {
51
- function QueryManager(sdk) {
52
- (0, _classCallCheck2.default)(this, QueryManager);
53
- (0, _defineProperty2.default)(this, "_airtableInterface", void 0);
54
- (0, _defineProperty2.default)(this, "_sdk", void 0);
55
- (0, _defineProperty2.default)(this, "_queryRegistrationInfosByWatchKey", new Map());
56
- (0, _defineProperty2.default)(this, "fetchAndSubscribeToQueryAsync", (query, querySubscriptionOptions) => {
57
- var queryResponse;
58
- return _regenerator.default.async(function _callee$(_context) {
59
- while (1) {
60
- switch (_context.prev = _context.next) {
61
- case 0:
62
- _context.next = 2;
63
- return _regenerator.default.awrap(this._airtableInterface.subscribeToQueryAndPopulateStoresAsync(query, querySubscriptionOptions !== null && querySubscriptionOptions !== void 0 ? querySubscriptionOptions : {}));
64
-
65
- case 2:
66
- queryResponse = _context.sent;
67
-
68
- if (queryResponse.success) {
69
- _context.next = 5;
70
- break;
71
- }
72
-
73
- throw (0, _error_utils.spawnError)('Subscription to query failed - unhandled error');
74
-
75
- case 5:
76
- return _context.abrupt("return", queryResponse.blockQueryId);
77
-
78
- case 6:
79
- case "end":
80
- return _context.stop();
81
- }
82
- }
83
- }, null, this);
84
- });
85
- (0, _defineProperty2.default)(this, "unsubscribeFromQueryIds", queryIds => {
86
- var _iteratorNormalCompletion = true;
87
- var _didIteratorError = false;
88
- var _iteratorError = undefined;
89
-
90
- try {
91
- for (var _iterator = queryIds[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
92
- var queryId = _step.value;
93
- // TODO: (#proj-blocks-sdk-record-limits) Add support for unsubscribing multiple at the same time
94
- this.unsubscribeFromQueryId(queryId);
95
- }
96
- } catch (err) {
97
- _didIteratorError = true;
98
- _iteratorError = err;
99
- } finally {
100
- try {
101
- if (!_iteratorNormalCompletion && _iterator.return != null) {
102
- _iterator.return();
103
- }
104
- } finally {
105
- if (_didIteratorError) {
106
- throw _iteratorError;
107
- }
108
- }
109
- }
110
- });
111
- (0, _defineProperty2.default)(this, "unsubscribeFromQueryId", queryId => {
112
- (0, _private_utils.fireAndForgetPromise)(() => this._airtableInterface.unsubscribeFromQueryIdsAsync([queryId]));
113
- });
114
- (0, _defineProperty2.default)(this, "watchWithQuerySpec", (callbackPriority, query, watchableModel, watchKey, watchOnChangeCallback, callbackForRegistration, context) => {
115
- var isOnChangeCallbackCanceled = false;
116
-
117
- var callbackForCancelOnChange = () => isOnChangeCallbackCanceled = true;
118
-
119
- var onChangeCallback = changes => {
120
- if (isOnChangeCallbackCanceled) {
121
- return;
122
- }
123
-
124
- watchableModel.__incrementOnChangeCount();
125
-
126
- watchOnChangeCallback(changes);
127
- };
128
-
129
- var blockQueryIdPromise = this.fetchAndSubscribeToQueryAsync(query, {
130
- onChangeCallback,
131
- callbackPriority
132
- });
133
-
134
- var queryRegistrationInfosForKey = this._queryRegistrationInfosByWatchKey.get(watchKey);
135
-
136
- if (!queryRegistrationInfosForKey) {
137
- queryRegistrationInfosForKey = [];
138
-
139
- this._queryRegistrationInfosByWatchKey.set(watchKey, queryRegistrationInfosForKey);
140
- } // It is safe to push onto queryRegistrationInfosForKey (vs copying) as long
141
- // as we don't release the event loop when we iterate over it, which only
142
- // happens in unwatchFromQueryKeys
143
-
144
-
145
- queryRegistrationInfosForKey.push({
146
- blockQueryIdPromise,
147
- callbackForCancelOnChange,
148
- callbackForRegistration,
149
- context,
150
- onChangeCallback,
151
- watchableModel
152
- });
153
- });
154
- (0, _defineProperty2.default)(this, "_unwatchFromQueryRegistrationInfoAsync", queryRegistrationInfo => {
155
- var blockQueryIdPromise, callbackForCancelOnChange, queryId;
156
- return _regenerator.default.async(function _callee2$(_context2) {
157
- while (1) {
158
- switch (_context2.prev = _context2.next) {
159
- case 0:
160
- blockQueryIdPromise = queryRegistrationInfo.blockQueryIdPromise, callbackForCancelOnChange = queryRegistrationInfo.callbackForCancelOnChange;
161
- callbackForCancelOnChange();
162
- _context2.next = 4;
163
- return _regenerator.default.awrap(blockQueryIdPromise);
164
-
165
- case 4:
166
- queryId = _context2.sent;
167
- this.unsubscribeFromQueryId(queryId);
168
-
169
- case 6:
170
- case "end":
171
- return _context2.stop();
172
- }
173
- }
174
- }, null, this);
175
- });
176
- (0, _defineProperty2.default)(this, "unwatchFromQueryKey", (watchKey, callbackForRegistration, context) => {
177
- var queryRegistrationInfos = this._queryRegistrationInfosByWatchKey.get(watchKey);
178
-
179
- if (queryRegistrationInfos) {
180
- var watchersToUnwatch = [];
181
- var watchersToKeep = [];
182
- queryRegistrationInfos.forEach(watcher => {
183
- var isCallbackToUnwatch = watcher.callbackForRegistration === callbackForRegistration && watcher.context === context;
184
-
185
- if (isCallbackToUnwatch) {
186
- watchersToUnwatch.push(watcher);
187
- } else {
188
- watchersToKeep.push(watcher);
189
- }
190
- });
191
-
192
- if (watchersToKeep.length > 0) {
193
- this._queryRegistrationInfosByWatchKey.set(watchKey, watchersToKeep);
194
- } else {
195
- this._queryRegistrationInfosByWatchKey.delete(watchKey);
196
- }
197
-
198
- if (watchersToUnwatch.length > 0) {
199
- // Do not await the response since unwatch is not async
200
- watchersToUnwatch.forEach(this._unwatchFromQueryRegistrationInfoAsync);
201
- }
202
- }
203
- });
204
- this._airtableInterface = sdk.__airtableInterface;
205
- this._sdk = sdk;
206
- }
207
-
208
- (0, _createClass2.default)(QueryManager, [{
209
- key: "_onChange",
210
- value: function _onChange(watchableModel, watchKey) {
211
- var queryRegistrationInfos = this._queryRegistrationInfosByWatchKey.get(watchKey);
212
-
213
- if (!queryRegistrationInfos) {
214
- return;
215
- }
216
-
217
- var _iteratorNormalCompletion2 = true;
218
- var _didIteratorError2 = false;
219
- var _iteratorError2 = undefined;
220
-
221
- try {
222
- for (var _iterator2 = queryRegistrationInfos[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
223
- var watcher = _step2.value;
224
-
225
- if (watcher.watchableModel === watchableModel) {
226
- watcher.onChangeCallback([]);
227
- }
228
- }
229
- } catch (err) {
230
- _didIteratorError2 = true;
231
- _iteratorError2 = err;
232
- } finally {
233
- try {
234
- if (!_iteratorNormalCompletion2 && _iterator2.return != null) {
235
- _iterator2.return();
236
- }
237
- } finally {
238
- if (_didIteratorError2) {
239
- throw _iteratorError2;
240
- }
241
- }
242
- }
243
- }
244
- }, {
245
- key: "onLoadKeys",
246
- value: function onLoadKeys(watchableModel, watchKeys) {
247
- var _iteratorNormalCompletion3 = true;
248
- var _didIteratorError3 = false;
249
- var _iteratorError3 = undefined;
250
-
251
- try {
252
- for (var _iterator3 = watchKeys[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {
253
- var key = _step3.value;
254
-
255
- this._onChange(watchableModel, key);
256
- }
257
- } catch (err) {
258
- _didIteratorError3 = true;
259
- _iteratorError3 = err;
260
- } finally {
261
- try {
262
- if (!_iteratorNormalCompletion3 && _iterator3.return != null) {
263
- _iterator3.return();
264
- }
265
- } finally {
266
- if (_didIteratorError3) {
267
- throw _iteratorError3;
268
- }
269
- }
270
- }
271
- }
272
- }, {
273
- key: "forceUnloadWatchesOnWatchableModel",
274
- value: function forceUnloadWatchesOnWatchableModel(watchableModel) {
275
- var _iteratorNormalCompletion4 = true;
276
- var _didIteratorError4 = false;
277
- var _iteratorError4 = undefined;
278
-
279
- try {
280
- for (var _iterator4 = this._queryRegistrationInfosByWatchKey.values()[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {
281
- var queryRegistrationInfos = _step4.value;
282
- var _iteratorNormalCompletion5 = true;
283
- var _didIteratorError5 = false;
284
- var _iteratorError5 = undefined;
285
-
286
- try {
287
- for (var _iterator5 = queryRegistrationInfos[Symbol.iterator](), _step5; !(_iteratorNormalCompletion5 = (_step5 = _iterator5.next()).done); _iteratorNormalCompletion5 = true) {
288
- var watcher = _step5.value;
289
-
290
- if (watcher.watchableModel === watchableModel) {
291
- this._unwatchFromQueryRegistrationInfoAsync(watcher);
292
- }
293
- }
294
- } catch (err) {
295
- _didIteratorError5 = true;
296
- _iteratorError5 = err;
297
- } finally {
298
- try {
299
- if (!_iteratorNormalCompletion5 && _iterator5.return != null) {
300
- _iterator5.return();
301
- }
302
- } finally {
303
- if (_didIteratorError5) {
304
- throw _iteratorError5;
305
- }
306
- }
307
- }
308
- }
309
- } catch (err) {
310
- _didIteratorError4 = true;
311
- _iteratorError4 = err;
312
- } finally {
313
- try {
314
- if (!_iteratorNormalCompletion4 && _iterator4.return != null) {
315
- _iterator4.return();
316
- }
317
- } finally {
318
- if (_didIteratorError4) {
319
- throw _iteratorError4;
320
- }
321
- }
322
- }
323
- }
324
- }]);
325
- return QueryManager;
326
- }();
327
-
328
- exports.QueryManager = QueryManager;
@@ -1,271 +0,0 @@
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
- var MOCK_WORKSPACE_ID = 'wspUai0ZmWFWfSBtb';
53
- /** @hidden */
54
-
55
- function convertFixtureDataToSdkInitData(fixtureData) {
56
- var _fixtureData$base = fixtureData.base,
57
- id = _fixtureData$base.id,
58
- name = _fixtureData$base.name,
59
- color = _fixtureData$base.color,
60
- tables = _fixtureData$base.tables,
61
- collaborators = _fixtureData$base.collaborators,
62
- workspaceId = _fixtureData$base.workspaceId,
63
- globalConfig = fixtureData.globalConfig;
64
- var tablesById = {};
65
-
66
- if (tables.length === 0) {
67
- throw (0, _error_utils.spawnError)('Fixture data must include at least one table');
68
- }
69
-
70
- var _iteratorNormalCompletion = true;
71
- var _didIteratorError = false;
72
- var _iteratorError = undefined;
73
-
74
- try {
75
- for (var _iterator = tables[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
76
- var table = _step.value;
77
- var tableData = convertTableFixtureDataToTableData(table);
78
-
79
- if (tablesById[table.id]) {
80
- throw (0, _error_utils.spawnError)('repeated table ID: %s', table.id);
81
- }
82
-
83
- tablesById[table.id] = tableData;
84
- }
85
- } catch (err) {
86
- _didIteratorError = true;
87
- _iteratorError = err;
88
- } finally {
89
- try {
90
- if (!_iteratorNormalCompletion && _iterator.return != null) {
91
- _iterator.return();
92
- }
93
- } finally {
94
- if (_didIteratorError) {
95
- throw _iteratorError;
96
- }
97
- }
98
- }
99
-
100
- return {
101
- isDevelopmentMode: false,
102
- blockInstallationId: MOCK_BLOCK_INSTALLATION_ID,
103
- isFirstRun: false,
104
- isFullscreen: false,
105
- initialKvValuesByKey: _objectSpread({}, globalConfig),
106
- runContext: {
107
- type: MOCK_BLOCK_RUN_CONTEXT_TYPE
108
- },
109
- baseData: {
110
- id,
111
- name,
112
- color: color !== null && color !== void 0 ? color : MOCK_BASE_COLOR,
113
- activeTableId: tables[0].id,
114
- tableOrder: tables.map(t => t.id),
115
- tablesById,
116
- permissionLevel: MOCK_BASE_PERMISSION_LEVEL,
117
- currentUserId: MOCK_CURRENT_USER_ID,
118
- enabledFeatureNames: [],
119
- collaboratorsById: (0, _private_utils.keyBy)(collaborators.map(c => {
120
- // filter out c.isActive
121
- var email = c.email,
122
- profilePicUrl = c.profilePicUrl;
123
- return {
124
- id: c.id,
125
- name: c.name,
126
- email,
127
- profilePicUrl
128
- };
129
- }), _private_utils.getId),
130
- activeCollaboratorIds: collaborators.filter(c => c.isActive).map(c => c.id),
131
- workspaceId: workspaceId !== null && workspaceId !== void 0 ? workspaceId : MOCK_WORKSPACE_ID,
132
- cursorData: null,
133
- billingPlanGrouping: MOCK_BILLING_GROUP,
134
- appInterface: {},
135
- isBlockDevelopmentRestrictionEnabled: false
136
- },
137
- intentData: null
138
- };
139
- }
140
- /** @internal */
141
-
142
-
143
- function convertTableFixtureDataToTableData(tableFixtureData) {
144
- var id = tableFixtureData.id,
145
- name = tableFixtureData.name,
146
- description = tableFixtureData.description,
147
- fields = tableFixtureData.fields,
148
- views = tableFixtureData.views,
149
- records = tableFixtureData.records;
150
- var tableRecordIds = records.map(_private_utils.getId);
151
- var fieldsById = {};
152
-
153
- if (fields.length === 0) {
154
- throw (0, _error_utils.spawnError)('Every table in fixture data must specify at least one field, but table "%s" specified zero fields', id);
155
- }
156
-
157
- var _iteratorNormalCompletion2 = true;
158
- var _didIteratorError2 = false;
159
- var _iteratorError2 = undefined;
160
-
161
- try {
162
- for (var _iterator2 = fields[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
163
- var field = _step2.value;
164
- var fieldData = convertFieldFixtureDataToFieldData(field);
165
-
166
- if (fieldsById[field.id]) {
167
- throw (0, _error_utils.spawnError)('repeated field ID: %s', field.id);
168
- }
169
-
170
- fieldsById[field.id] = fieldData;
171
- }
172
- } catch (err) {
173
- _didIteratorError2 = true;
174
- _iteratorError2 = err;
175
- } finally {
176
- try {
177
- if (!_iteratorNormalCompletion2 && _iterator2.return != null) {
178
- _iterator2.return();
179
- }
180
- } finally {
181
- if (_didIteratorError2) {
182
- throw _iteratorError2;
183
- }
184
- }
185
- }
186
-
187
- var viewsById = {};
188
-
189
- if (views.length === 0) {
190
- throw (0, _error_utils.spawnError)('Every table in fixture data must specify at least one view, but table "%s" specified zero views', id);
191
- }
192
-
193
- var _iteratorNormalCompletion3 = true;
194
- var _didIteratorError3 = false;
195
- var _iteratorError3 = undefined;
196
-
197
- try {
198
- for (var _iterator3 = views[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {
199
- var view = _step3.value;
200
- var viewData = view;
201
-
202
- if (viewsById[view.id]) {
203
- throw (0, _error_utils.spawnError)('repeated view ID: %s', view.id);
204
- }
205
-
206
- view.records.map(_private_utils.getId).forEach(viewRecordId => {
207
- if (!tableRecordIds.includes(viewRecordId)) {
208
- throw (0, _error_utils.spawnError)('record %s not present in table %s', viewRecordId, id);
209
- }
210
- });
211
- viewsById[view.id] = viewData;
212
- }
213
- } catch (err) {
214
- _didIteratorError3 = true;
215
- _iteratorError3 = err;
216
- } finally {
217
- try {
218
- if (!_iteratorNormalCompletion3 && _iterator3.return != null) {
219
- _iterator3.return();
220
- }
221
- } finally {
222
- if (_didIteratorError3) {
223
- throw _iteratorError3;
224
- }
225
- }
226
- }
227
-
228
- return {
229
- id,
230
- name,
231
- description,
232
- primaryFieldId: fields[0].id,
233
- fieldsById,
234
- activeViewId: views[0].id,
235
- viewOrder: views.map(v => v.id),
236
- viewsById,
237
- lock: null,
238
- externalSyncById: null
239
- };
240
- }
241
- /** @internal */
242
-
243
-
244
- function convertFieldFixtureDataToFieldData(fieldFixtureData) {
245
- var id = fieldFixtureData.id,
246
- name = fieldFixtureData.name,
247
- description = fieldFixtureData.description,
248
- type = fieldFixtureData.type,
249
- options = fieldFixtureData.options;
250
- return {
251
- id,
252
- name,
253
- type,
254
- description,
255
- typeOptions: options,
256
- lock: null
257
- };
258
- }
259
- /**
260
- * A complete set of information necessary to initialize a simulated Airtable
261
- * Base in automated test environments. This is currently copied from
262
- * block-testing.
263
- *
264
- * Unlike SdkInitData which does not contain record data by design,
265
- * FixtureData contains it in fixtureData.base.tables[number].records,
266
- * and relies on dependent modules to simulate the hyperbase behavior of
267
- * only making those records after corresponding necessary calls to
268
- * AirtableInterface.
269
- *
270
- * @hidden
271
- */