@airtable/blocks 1.3.0 → 1.5.1
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 +30 -1
- package/dist/cjs/index.js +30 -11
- package/dist/cjs/injected/airtable_interface.js +2 -1
- package/dist/cjs/models/cursor.js +4 -6
- package/dist/cjs/models/field.js +24 -0
- package/dist/cjs/models/grouped_record_query_result.js +475 -0
- package/dist/cjs/models/models.js +30 -0
- package/dist/cjs/models/mutations.js +41 -9
- package/dist/cjs/models/record_query_result.js +37 -12
- package/dist/cjs/models/session.js +65 -23
- package/dist/cjs/models/table_or_view_query_result.js +306 -97
- package/dist/cjs/models/view.js +71 -1
- package/dist/cjs/models/view_data_store.js +62 -20
- package/dist/cjs/models/view_metadata_query_result.js +41 -8
- package/dist/cjs/sdk.js +2 -2
- package/dist/cjs/testing/mock_airtable_interface.js +1 -110
- package/dist/cjs/types/airtable_interface.js +19 -1
- package/dist/cjs/types/mutations.js +2 -1
- package/dist/cjs/types/view.js +1 -0
- package/dist/cjs/ui/confirmation_dialog.js +12 -4
- package/dist/cjs/ui/expand_record.js +5 -5
- package/dist/cjs/ui/expand_record_list.js +2 -5
- package/dist/cjs/ui/expand_record_picker_async.js +9 -16
- package/dist/cjs/ui/form_field.js +2 -2
- package/dist/cjs/ui/icon_config.js +11 -4
- package/dist/cjs/ui/initialize_block.js +62 -10
- package/dist/cjs/ui/ui.js +9 -2
- package/dist/cjs/ui/use_loadable.js +2 -2
- package/dist/cjs/ui/use_records.js +54 -40
- package/dist/cjs/ui/use_view_metadata.js +1 -1
- package/dist/cjs/unstable_testing_utils.js +163 -0
- package/dist/types/src/color_utils.d.ts +4 -4
- package/dist/types/src/color_utils.d.ts.map +1 -1
- package/dist/types/src/index.d.ts +2 -2
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/injected/airtable_interface.d.ts.map +1 -1
- package/dist/types/src/models/cursor.d.ts +4 -6
- package/dist/types/src/models/cursor.d.ts.map +1 -1
- package/dist/types/src/models/field.d.ts +17 -1
- package/dist/types/src/models/field.d.ts.map +1 -1
- package/dist/types/src/models/grouped_record_query_result.d.ts +61 -0
- package/dist/types/src/models/grouped_record_query_result.d.ts.map +1 -0
- package/dist/types/src/models/models.d.ts +4 -1
- package/dist/types/src/models/models.d.ts.map +1 -1
- package/dist/types/src/models/mutations.d.ts.map +1 -1
- package/dist/types/src/models/record.d.ts +0 -2
- package/dist/types/src/models/record.d.ts.map +1 -1
- package/dist/types/src/models/record_query_result.d.ts +22 -0
- package/dist/types/src/models/record_query_result.d.ts.map +1 -1
- package/dist/types/src/models/session.d.ts +65 -23
- package/dist/types/src/models/session.d.ts.map +1 -1
- package/dist/types/src/models/table_or_view_query_result.d.ts +21 -0
- package/dist/types/src/models/table_or_view_query_result.d.ts.map +1 -1
- package/dist/types/src/models/view.d.ts +26 -1
- package/dist/types/src/models/view.d.ts.map +1 -1
- package/dist/types/src/models/view_data_store.d.ts +2 -0
- package/dist/types/src/models/view_data_store.d.ts.map +1 -1
- package/dist/types/src/models/view_metadata_query_result.d.ts +21 -0
- package/dist/types/src/models/view_metadata_query_result.d.ts.map +1 -1
- package/dist/types/src/sdk.d.ts +3 -0
- package/dist/types/src/sdk.d.ts.map +1 -1
- package/dist/types/src/testing/mock_airtable_interface.d.ts +79 -0
- package/dist/types/src/testing/mock_airtable_interface.d.ts.map +1 -1
- package/dist/types/src/types/airtable_interface.d.ts +28 -1
- package/dist/types/src/types/airtable_interface.d.ts.map +1 -1
- package/dist/types/src/types/field.d.ts +241 -1
- package/dist/types/src/types/field.d.ts.map +1 -1
- package/dist/types/src/types/mutations.d.ts +19 -3
- package/dist/types/src/types/mutations.d.ts.map +1 -1
- package/dist/types/src/types/view.d.ts +26 -1
- package/dist/types/src/types/view.d.ts.map +1 -1
- package/dist/types/src/ui/confirmation_dialog.d.ts +8 -0
- package/dist/types/src/ui/confirmation_dialog.d.ts.map +1 -1
- package/dist/types/src/ui/expand_record.d.ts +1 -0
- package/dist/types/src/ui/expand_record.d.ts.map +1 -1
- package/dist/types/src/ui/expand_record_list.d.ts.map +1 -1
- package/dist/types/src/ui/expand_record_picker_async.d.ts +0 -3
- package/dist/types/src/ui/expand_record_picker_async.d.ts.map +1 -1
- package/dist/types/src/ui/icon_config.d.ts +15 -8
- package/dist/types/src/ui/icon_config.d.ts.map +1 -1
- package/dist/types/src/ui/initialize_block.d.ts +19 -2
- package/dist/types/src/ui/initialize_block.d.ts.map +1 -1
- package/dist/types/src/ui/ui.d.ts +2 -2
- package/dist/types/src/ui/ui.d.ts.map +1 -1
- package/dist/types/src/ui/use_loadable.d.ts +2 -2
- package/dist/types/src/ui/use_records.d.ts +11 -1
- package/dist/types/src/ui/use_records.d.ts.map +1 -1
- package/dist/types/src/unstable_testing_utils.d.ts +13 -0
- package/dist/types/src/unstable_testing_utils.d.ts.map +1 -0
- package/dist/types/test/airtable_interface_mocks/linked_records.d.ts.map +1 -1
- package/dist/types/test/airtable_interface_mocks/mock_airtable_interface_internal.d.ts +32 -1
- package/dist/types/test/airtable_interface_mocks/mock_airtable_interface_internal.d.ts.map +1 -1
- package/dist/types/test/airtable_interface_mocks/project_tracker.d.ts.map +1 -1
- package/dist/types/test/ui/expand_record.test.d.ts +2 -0
- package/dist/types/test/ui/expand_record.test.d.ts.map +1 -0
- package/dist/types/test/ui/expand_record_list.test.d.ts +2 -0
- package/dist/types/test/ui/expand_record_list.test.d.ts.map +1 -0
- package/dist/types/test/ui/expand_record_picker_async.test.d.ts +2 -0
- package/dist/types/test/ui/expand_record_picker_async.test.d.ts.map +1 -0
- package/index.d.ts +4 -2
- package/package.json +4 -4
- package/types.d.ts +3 -0
- package/unstable_testing_utils.d.ts +1 -0
- package/unstable_testing_utils.js +1 -0
- package/dist/cjs/testing/inject_mock_airtable_interface.js +0 -63
- package/dist/cjs/testing/mock_airtable_interface_external.js +0 -741
- package/dist/cjs/testing/test_driver.js +0 -260
- package/dist/cjs/types/test_mutations.js +0 -32
- package/dist/cjs/unstable_testing.js +0 -17
- package/dist/types/src/testing/inject_mock_airtable_interface.d.ts +0 -2
- package/dist/types/src/testing/inject_mock_airtable_interface.d.ts.map +0 -1
- package/dist/types/src/testing/mock_airtable_interface_external.d.ts +0 -107
- package/dist/types/src/testing/mock_airtable_interface_external.d.ts.map +0 -1
- package/dist/types/src/testing/test_driver.d.ts +0 -90
- package/dist/types/src/testing/test_driver.d.ts.map +0 -1
- package/dist/types/src/types/test_mutations.d.ts +0 -27
- package/dist/types/src/types/test_mutations.d.ts.map +0 -1
- package/dist/types/src/unstable_testing.d.ts +0 -3
- package/dist/types/src/unstable_testing.d.ts.map +0 -1
- package/dist/types/test/testing/mock_airtable_interface_external.test.d.ts +0 -2
- package/dist/types/test/testing/mock_airtable_interface_external.test.d.ts.map +0 -1
- package/dist/types/test/testing/test_driver.test.d.ts +0 -2
- package/dist/types/test/testing/test_driver.test.d.ts.map +0 -1
- package/unstable_testing.d.ts +0 -1
- package/unstable_testing.js +0 -1
|
@@ -1,260 +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.object.to-string");
|
|
12
|
-
|
|
13
|
-
require("core-js/modules/es.promise");
|
|
14
|
-
|
|
15
|
-
require("core-js/modules/web.dom-collections.iterator");
|
|
16
|
-
|
|
17
|
-
Object.defineProperty(exports, "__esModule", {
|
|
18
|
-
value: true
|
|
19
|
-
});
|
|
20
|
-
exports.default = void 0;
|
|
21
|
-
|
|
22
|
-
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
23
|
-
|
|
24
|
-
require("regenerator-runtime/runtime");
|
|
25
|
-
|
|
26
|
-
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
27
|
-
|
|
28
|
-
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
29
|
-
|
|
30
|
-
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
31
|
-
|
|
32
|
-
var _react = _interopRequireDefault(require("react"));
|
|
33
|
-
|
|
34
|
-
var _error_utils = require("../error_utils");
|
|
35
|
-
|
|
36
|
-
var _sdk = _interopRequireDefault(require("../sdk"));
|
|
37
|
-
|
|
38
|
-
var _test_mutations = require("../types/test_mutations");
|
|
39
|
-
|
|
40
|
-
var _sdk_context = require("../ui/sdk_context");
|
|
41
|
-
|
|
42
|
-
var _mock_airtable_interface_external = _interopRequireDefault(require("./mock_airtable_interface_external"));
|
|
43
|
-
|
|
44
|
-
/**
|
|
45
|
-
* A class designed to faciliate the automated testing of Airtable Apps outside
|
|
46
|
-
* of a production Apps environment. Each instance creates a simulated Airtable
|
|
47
|
-
* Base which is distinct from any other Base created in this way. Custom Apps
|
|
48
|
-
* can be applied to a given instance; see {@link Container}.
|
|
49
|
-
*/
|
|
50
|
-
var TestDriver =
|
|
51
|
-
/*#__PURE__*/
|
|
52
|
-
function () {
|
|
53
|
-
/** @internal */
|
|
54
|
-
|
|
55
|
-
/** @internal */
|
|
56
|
-
|
|
57
|
-
/**
|
|
58
|
-
* Create an instance of the test driver, initializing a simulated Airtable
|
|
59
|
-
* Base to take the state described by the provided fixture data.
|
|
60
|
-
*/
|
|
61
|
-
function TestDriver(fixtureData) {
|
|
62
|
-
(0, _classCallCheck2.default)(this, TestDriver);
|
|
63
|
-
(0, _defineProperty2.default)(this, "_airtableInterface", void 0);
|
|
64
|
-
(0, _defineProperty2.default)(this, "_sdk", void 0);
|
|
65
|
-
this._airtableInterface = new _mock_airtable_interface_external.default(fixtureData);
|
|
66
|
-
this._sdk = new _sdk.default(this._airtableInterface);
|
|
67
|
-
this.Container = this.Container.bind(this);
|
|
68
|
-
}
|
|
69
|
-
/**
|
|
70
|
-
* The simulated Airtable Base associated with this instance.
|
|
71
|
-
*/
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
(0, _createClass2.default)(TestDriver, [{
|
|
75
|
-
key: "Container",
|
|
76
|
-
|
|
77
|
-
/**
|
|
78
|
-
* A React Component which may be used to wrap App Components, enabling
|
|
79
|
-
* them to run outside of a production Apps environment.
|
|
80
|
-
*
|
|
81
|
-
* @example
|
|
82
|
-
* ```js
|
|
83
|
-
* const MyCustomApp = require('../src/my_custom_app');
|
|
84
|
-
* const testDriver = new TestDriver(fixtureData);
|
|
85
|
-
*
|
|
86
|
-
* render(
|
|
87
|
-
* <testDriver.Container>
|
|
88
|
-
* <MyCustomApp />
|
|
89
|
-
* </testDriver.Container>
|
|
90
|
-
* );
|
|
91
|
-
* ```
|
|
92
|
-
*/
|
|
93
|
-
value: function Container(_ref) {
|
|
94
|
-
var children = _ref.children;
|
|
95
|
-
|
|
96
|
-
var fallback = _react.default.createElement('div', null);
|
|
97
|
-
|
|
98
|
-
return _react.default.createElement(_react.default.Suspense, {
|
|
99
|
-
fallback
|
|
100
|
-
}, _react.default.createElement(_sdk_context.SdkContext.Provider, {
|
|
101
|
-
value: this._sdk
|
|
102
|
-
}, children));
|
|
103
|
-
}
|
|
104
|
-
/**
|
|
105
|
-
* Destroy a Field in the simulated Base.
|
|
106
|
-
*/
|
|
107
|
-
|
|
108
|
-
}, {
|
|
109
|
-
key: "deleteFieldAsync",
|
|
110
|
-
value: function deleteFieldAsync(tableIdOrName, fieldIdOrName) {
|
|
111
|
-
var table, field;
|
|
112
|
-
return _regenerator.default.async(function deleteFieldAsync$(_context) {
|
|
113
|
-
while (1) {
|
|
114
|
-
switch (_context.prev = _context.next) {
|
|
115
|
-
case 0:
|
|
116
|
-
table = this.base.getTable(tableIdOrName);
|
|
117
|
-
field = table.getField(fieldIdOrName);
|
|
118
|
-
_context.next = 4;
|
|
119
|
-
return _regenerator.default.awrap(this._airtableInterface.applyMutationAsync({
|
|
120
|
-
type: _test_mutations.TestMutationTypes.DELETE_SINGLE_FIELD,
|
|
121
|
-
tableId: table.id,
|
|
122
|
-
id: field.id
|
|
123
|
-
}));
|
|
124
|
-
|
|
125
|
-
case 4:
|
|
126
|
-
case "end":
|
|
127
|
-
return _context.stop();
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
}, null, this);
|
|
131
|
-
}
|
|
132
|
-
/**
|
|
133
|
-
* Update the active Table and/or the active View of the App's {@link
|
|
134
|
-
* Cursor}. Either `table` or `view` must be specified.
|
|
135
|
-
*
|
|
136
|
-
* @example
|
|
137
|
-
* ```js
|
|
138
|
-
* testDriver.setActiveCursorModels({view: 'My grid view'});
|
|
139
|
-
* ```
|
|
140
|
-
*/
|
|
141
|
-
|
|
142
|
-
}, {
|
|
143
|
-
key: "setActiveCursorModels",
|
|
144
|
-
value: function setActiveCursorModels(_ref2) {
|
|
145
|
-
var tableIdOrName = _ref2.table,
|
|
146
|
-
viewIdOrName = _ref2.view;
|
|
147
|
-
(0, _error_utils.invariant)(tableIdOrName || viewIdOrName, 'One of `table` or `view` must be specified.');
|
|
148
|
-
var tableId = tableIdOrName ? this.base.getTable(tableIdOrName).id : this.cursor.activeTableId;
|
|
149
|
-
(0, _error_utils.invariant)(typeof tableId === 'string', 'Cannot set cursor model when table is not loaded');
|
|
150
|
-
var viewId = viewIdOrName ? this.base.getTable(tableId).getView(viewIdOrName).id : this.cursor.activeViewId;
|
|
151
|
-
(0, _error_utils.invariant)(!viewId || this.base.getTable(tableId).getViewIfExists(viewId), 'Cannot change active table to "%s" because active view ("%s") belongs to another table', tableIdOrName, viewId);
|
|
152
|
-
|
|
153
|
-
this._airtableInterface.triggerModelUpdates([{
|
|
154
|
-
path: ['activeTableId'],
|
|
155
|
-
value: tableId
|
|
156
|
-
}]);
|
|
157
|
-
|
|
158
|
-
if (viewIdOrName) {
|
|
159
|
-
this._airtableInterface.triggerModelUpdates([{
|
|
160
|
-
path: ['tablesById', tableId, 'activeViewId'],
|
|
161
|
-
value: viewId
|
|
162
|
-
}]);
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
/**
|
|
166
|
-
* Specify the outcome of internal permission checks. This influences the
|
|
167
|
-
* behavior of not only explicit permission checks from Apps code but also
|
|
168
|
-
* the outcome of model operations such as {@link createRecordsAsync}.
|
|
169
|
-
*/
|
|
170
|
-
|
|
171
|
-
}, {
|
|
172
|
-
key: "simulatePermissionCheck",
|
|
173
|
-
value: function simulatePermissionCheck(check) {
|
|
174
|
-
this._airtableInterface.setUserPermissionCheck(check);
|
|
175
|
-
}
|
|
176
|
-
/**
|
|
177
|
-
* Simulate a user visually selecting a set of Records in the active Table.
|
|
178
|
-
* This operation is unrelated to an App's programmatic "selection" of
|
|
179
|
-
* records via, e.g. {@link Table.selectRecords}. To deselect all records,
|
|
180
|
-
* invoke this method with an empty array.
|
|
181
|
-
*/
|
|
182
|
-
|
|
183
|
-
}, {
|
|
184
|
-
key: "userSelectRecords",
|
|
185
|
-
value: function userSelectRecords(recordIds) {
|
|
186
|
-
var baseData = this._airtableInterface.sdkInitData.baseData;
|
|
187
|
-
var activeTableId = baseData.activeTableId;
|
|
188
|
-
(0, _error_utils.invariant)(activeTableId, 'Cannot select records when no table is active');
|
|
189
|
-
var _iteratorNormalCompletion = true;
|
|
190
|
-
var _didIteratorError = false;
|
|
191
|
-
var _iteratorError = undefined;
|
|
192
|
-
|
|
193
|
-
try {
|
|
194
|
-
for (var _iterator = recordIds[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
|
|
195
|
-
var recordId = _step.value;
|
|
196
|
-
(0, _error_utils.invariant)(this._airtableInterface.hasRecord(activeTableId, recordId), 'Record with ID "%s" is not present in active table "%s"', recordId, activeTableId);
|
|
197
|
-
}
|
|
198
|
-
} catch (err) {
|
|
199
|
-
_didIteratorError = true;
|
|
200
|
-
_iteratorError = err;
|
|
201
|
-
} finally {
|
|
202
|
-
try {
|
|
203
|
-
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
204
|
-
_iterator.return();
|
|
205
|
-
}
|
|
206
|
-
} finally {
|
|
207
|
-
if (_didIteratorError) {
|
|
208
|
-
throw _iteratorError;
|
|
209
|
-
}
|
|
210
|
-
}
|
|
211
|
-
}
|
|
212
|
-
|
|
213
|
-
var selectedRecordIdSet = recordIds.reduce((all, recordId) => {
|
|
214
|
-
all[recordId] = true;
|
|
215
|
-
return all;
|
|
216
|
-
}, {});
|
|
217
|
-
|
|
218
|
-
this._airtableInterface.triggerModelUpdates([{
|
|
219
|
-
path: ['cursorData', 'selectedRecordIdSet'],
|
|
220
|
-
value: selectedRecordIdSet
|
|
221
|
-
}]);
|
|
222
|
-
}
|
|
223
|
-
/**
|
|
224
|
-
* Regsiter a function to be invoked in response to a given internal event.
|
|
225
|
-
*/
|
|
226
|
-
|
|
227
|
-
}, {
|
|
228
|
-
key: "watch",
|
|
229
|
-
value: function watch(key, fn) {
|
|
230
|
-
this._airtableInterface.on(key, fn);
|
|
231
|
-
}
|
|
232
|
-
/**
|
|
233
|
-
* De-regsiter a function which was previously registered with {@link
|
|
234
|
-
* watch}.
|
|
235
|
-
*/
|
|
236
|
-
|
|
237
|
-
}, {
|
|
238
|
-
key: "unwatch",
|
|
239
|
-
value: function unwatch(key, fn) {
|
|
240
|
-
this._airtableInterface.off(key, fn);
|
|
241
|
-
}
|
|
242
|
-
}, {
|
|
243
|
-
key: "base",
|
|
244
|
-
get: function get() {
|
|
245
|
-
return this._sdk.base;
|
|
246
|
-
}
|
|
247
|
-
/**
|
|
248
|
-
* The Cursor associated with this instance's Base.
|
|
249
|
-
*/
|
|
250
|
-
|
|
251
|
-
}, {
|
|
252
|
-
key: "cursor",
|
|
253
|
-
get: function get() {
|
|
254
|
-
return this._sdk.cursor;
|
|
255
|
-
}
|
|
256
|
-
}]);
|
|
257
|
-
return TestDriver;
|
|
258
|
-
}();
|
|
259
|
-
|
|
260
|
-
exports.default = TestDriver;
|
|
@@ -1,32 +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.array.filter");
|
|
8
|
-
|
|
9
|
-
require("core-js/modules/es.object.get-own-property-descriptors");
|
|
10
|
-
|
|
11
|
-
require("core-js/modules/web.dom-collections.for-each");
|
|
12
|
-
|
|
13
|
-
Object.defineProperty(exports, "__esModule", {
|
|
14
|
-
value: true
|
|
15
|
-
});
|
|
16
|
-
exports.TestMutationTypes = void 0;
|
|
17
|
-
|
|
18
|
-
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
19
|
-
|
|
20
|
-
var _mutations = require("./mutations");
|
|
21
|
-
|
|
22
|
-
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; }
|
|
23
|
-
|
|
24
|
-
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; }
|
|
25
|
-
|
|
26
|
-
/** @hidden */
|
|
27
|
-
var TestMutationTypes = Object.freeze(_objectSpread({}, _mutations.MutationTypes, {
|
|
28
|
-
DELETE_SINGLE_FIELD: 'deleteSingleField'
|
|
29
|
-
}));
|
|
30
|
-
/** @hidden */
|
|
31
|
-
|
|
32
|
-
exports.TestMutationTypes = TestMutationTypes;
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
|
-
Object.defineProperty(exports, "__esModule", {
|
|
6
|
-
value: true
|
|
7
|
-
});
|
|
8
|
-
Object.defineProperty(exports, "default", {
|
|
9
|
-
enumerable: true,
|
|
10
|
-
get: function get() {
|
|
11
|
-
return _test_driver.default;
|
|
12
|
-
}
|
|
13
|
-
});
|
|
14
|
-
|
|
15
|
-
require("./testing/inject_mock_airtable_interface");
|
|
16
|
-
|
|
17
|
-
var _test_driver = _interopRequireDefault(require("./testing/test_driver"));
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"inject_mock_airtable_interface.d.ts","sourceRoot":"","sources":["../../../../src/testing/inject_mock_airtable_interface.ts"],"names":[],"mappings":""}
|
|
@@ -1,107 +0,0 @@
|
|
|
1
|
-
import { BaseId } from '../types/base';
|
|
2
|
-
import { CollaboratorData } from '../types/collaborator';
|
|
3
|
-
import { TestMutation } from '../types/test_mutations';
|
|
4
|
-
import { RecordId } from '../types/record';
|
|
5
|
-
import { ObjectMap } from '../private_utils';
|
|
6
|
-
import { TableId } from '../types/table';
|
|
7
|
-
import { FieldId, FieldType } from '../types/field';
|
|
8
|
-
import { ViewId, ViewType } from '../types/view';
|
|
9
|
-
import Color from '../colors';
|
|
10
|
-
/** @hidden */
|
|
11
|
-
export interface WatchableKeysAndArgs {
|
|
12
|
-
mutation: TestMutation;
|
|
13
|
-
}
|
|
14
|
-
/**
|
|
15
|
-
* A complete set of information necessary to initialize a simulated Airtable
|
|
16
|
-
* Base in automated test environments.
|
|
17
|
-
*/
|
|
18
|
-
export interface FixtureData {
|
|
19
|
-
/** A representation of the state of an Airtable Base */
|
|
20
|
-
base: {
|
|
21
|
-
id: BaseId;
|
|
22
|
-
name: string;
|
|
23
|
-
tables: Array<TableFixtureData>;
|
|
24
|
-
collaborators: Array<CollaboratorData & {
|
|
25
|
-
isActive: boolean;
|
|
26
|
-
}>;
|
|
27
|
-
};
|
|
28
|
-
}
|
|
29
|
-
/** A representation of the state of a Table */
|
|
30
|
-
interface TableFixtureData {
|
|
31
|
-
/** A unique identifier for the simulated Tbale */
|
|
32
|
-
id: TableId;
|
|
33
|
-
/** The name to assign to the simulated Table */
|
|
34
|
-
name: string;
|
|
35
|
-
/** The description to assign to the simulated Table */
|
|
36
|
-
description: string | null;
|
|
37
|
-
/**
|
|
38
|
-
* Fixture data for the simulated Fields that should be present in the
|
|
39
|
-
* simulated Table when it is initialized.
|
|
40
|
-
*/
|
|
41
|
-
fields: Array<FieldFixtureData>;
|
|
42
|
-
/**
|
|
43
|
-
* Fixture data for the simulated Views that should be present in the
|
|
44
|
-
* simulated Table when it is initialized.
|
|
45
|
-
*/
|
|
46
|
-
views: Array<ViewFixtureData>;
|
|
47
|
-
/**
|
|
48
|
-
* Fixture data for the simulated Records that should be present in the
|
|
49
|
-
* simulated Table when it is initialized.
|
|
50
|
-
*/
|
|
51
|
-
records: Array<RecordFixtureData>;
|
|
52
|
-
}
|
|
53
|
-
/** A representation of the state of a Field */
|
|
54
|
-
interface FieldFixtureData {
|
|
55
|
-
/** A unique identifier for the simulated Field */
|
|
56
|
-
id: FieldId;
|
|
57
|
-
/** The name to assign to the simulated Field */
|
|
58
|
-
name: string;
|
|
59
|
-
/** The description to assign to the simulated Field */
|
|
60
|
-
description: string | null;
|
|
61
|
-
/** The type of the simulated Field */
|
|
62
|
-
type: FieldType;
|
|
63
|
-
/** Options associated with the simulated Field */
|
|
64
|
-
options: null | {
|
|
65
|
-
[key: string]: unknown;
|
|
66
|
-
};
|
|
67
|
-
}
|
|
68
|
-
/** A representation of the state of a View */
|
|
69
|
-
interface ViewFixtureData {
|
|
70
|
-
/** A unique identifier for the simulated View */
|
|
71
|
-
id: ViewId;
|
|
72
|
-
/** The name to assign to the simulated View */
|
|
73
|
-
name: string;
|
|
74
|
-
/** The type of the simulated view */
|
|
75
|
-
type: ViewType;
|
|
76
|
-
/**
|
|
77
|
-
* A description of how simulated Fields should be sequenced within the
|
|
78
|
-
* simulated View
|
|
79
|
-
*/
|
|
80
|
-
fieldOrder: {
|
|
81
|
-
fieldIds: Array<FieldId>;
|
|
82
|
-
visibleFieldCount: number;
|
|
83
|
-
};
|
|
84
|
-
/**
|
|
85
|
-
* A set of references to Records contained within the simulated view. This
|
|
86
|
-
* is distinct from the complete fixture data for the simulated Records.
|
|
87
|
-
*/
|
|
88
|
-
records: Array<ViewRecordFixtureData>;
|
|
89
|
-
}
|
|
90
|
-
/** @hidden */
|
|
91
|
-
interface ViewRecordFixtureData {
|
|
92
|
-
id: RecordId;
|
|
93
|
-
color: typeof Color | null;
|
|
94
|
-
}
|
|
95
|
-
/** A representation of the state of a Record */
|
|
96
|
-
interface RecordFixtureData {
|
|
97
|
-
/** A unique identifier for the simulated Record */
|
|
98
|
-
id: RecordId;
|
|
99
|
-
/** The number of comments to assign to the simulated record */
|
|
100
|
-
commentCount: number;
|
|
101
|
-
/** The time the simulated record should appear to have been created */
|
|
102
|
-
createdTime: string;
|
|
103
|
-
/** A mapping of field identifiers to cell values */
|
|
104
|
-
cellValuesByFieldId: ObjectMap<FieldId, unknown>;
|
|
105
|
-
}
|
|
106
|
-
export {};
|
|
107
|
-
//# sourceMappingURL=mock_airtable_interface_external.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mock_airtable_interface_external.d.ts","sourceRoot":"","sources":["../../../../src/testing/mock_airtable_interface_external.ts"],"names":[],"mappings":"AACA,OAAO,EAAW,MAAM,EAAC,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAC,gBAAgB,EAAC,MAAM,uBAAuB,CAAC;AAEvD,OAAO,EAAC,YAAY,EAAoB,MAAM,yBAAyB,CAAC;AACxE,OAAO,EAAa,QAAQ,EAAC,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAa,SAAS,EAAC,MAAM,kBAAkB,CAAC;AAEvD,OAAO,EAAC,OAAO,EAAC,MAAM,gBAAgB,CAAC;AACvC,OAAO,EAAY,OAAO,EAAE,SAAS,EAAC,MAAM,gBAAgB,CAAC;AAC7D,OAAO,EAAC,MAAM,EAAE,QAAQ,EAAC,MAAM,eAAe,CAAC;AAC/C,OAAO,KAAK,MAAM,WAAW,CAAC;AA0G9B,cAAc;AACd,MAAM,WAAW,oBAAoB;IACjC,QAAQ,EAAE,YAAY,CAAC;CAC1B;AAED;;;GAGG;AACH,MAAM,WAAW,WAAW;IACxB,wDAAwD;IACxD,IAAI,EAAE;QACF,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,KAAK,CAAC,gBAAgB,CAAC,CAAC;QAChC,aAAa,EAAE,KAAK,CAAC,gBAAgB,GAAG;YAAC,QAAQ,EAAE,OAAO,CAAA;SAAC,CAAC,CAAC;KAChE,CAAC;CACL;AAED,+CAA+C;AAC/C,UAAU,gBAAgB;IACtB,kDAAkD;IAClD,EAAE,EAAE,OAAO,CAAC;IACZ,gDAAgD;IAChD,IAAI,EAAE,MAAM,CAAC;IACb,uDAAuD;IACvD,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B;;;OAGG;IACH,MAAM,EAAE,KAAK,CAAC,gBAAgB,CAAC,CAAC;IAChC;;;OAGG;IACH,KAAK,EAAE,KAAK,CAAC,eAAe,CAAC,CAAC;IAC9B;;;OAGG;IACH,OAAO,EAAE,KAAK,CAAC,iBAAiB,CAAC,CAAC;CACrC;AAED,+CAA+C;AAC/C,UAAU,gBAAgB;IACtB,kDAAkD;IAClD,EAAE,EAAE,OAAO,CAAC;IACZ,gDAAgD;IAChD,IAAI,EAAE,MAAM,CAAC;IACb,uDAAuD;IACvD,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,sCAAsC;IACtC,IAAI,EAAE,SAAS,CAAC;IAChB,kDAAkD;IAClD,OAAO,EAAE,IAAI,GAAG;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAC,CAAC;CAC5C;AAED,8CAA8C;AAC9C,UAAU,eAAe;IACrB,iDAAiD;IACjD,EAAE,EAAE,MAAM,CAAC;IACX,+CAA+C;IAC/C,IAAI,EAAE,MAAM,CAAC;IACb,qCAAqC;IACrC,IAAI,EAAE,QAAQ,CAAC;IACf;;;OAGG;IACH,UAAU,EAAE;QACR,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QACzB,iBAAiB,EAAE,MAAM,CAAC;KAC7B,CAAC;IACF;;;OAGG;IACH,OAAO,EAAE,KAAK,CAAC,qBAAqB,CAAC,CAAC;CACzC;AAED,cAAc;AACd,UAAU,qBAAqB;IAC3B,EAAE,EAAE,QAAQ,CAAC;IACb,KAAK,EAAE,OAAO,KAAK,GAAG,IAAI,CAAC;CAC9B;AAED,gDAAgD;AAChD,UAAU,iBAAiB;IACvB,mDAAmD;IACnD,EAAE,EAAE,QAAQ,CAAC;IACb,+DAA+D;IAC/D,YAAY,EAAE,MAAM,CAAC;IACrB,uEAAuE;IACvE,WAAW,EAAE,MAAM,CAAC;IACpB,oDAAoD;IACpD,mBAAmB,EAAE,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;CACpD"}
|
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import { FieldId } from '../types/field';
|
|
3
|
-
import { Mutation } from '../types/mutations';
|
|
4
|
-
import { RecordId } from '../types/record';
|
|
5
|
-
import { TableId } from '../types/table';
|
|
6
|
-
import { ViewId } from '../types/view';
|
|
7
|
-
import { FixtureData, WatchableKeysAndArgs } from './mock_airtable_interface_external';
|
|
8
|
-
/**
|
|
9
|
-
* A class designed to faciliate the automated testing of Airtable Apps outside
|
|
10
|
-
* of a production Apps environment. Each instance creates a simulated Airtable
|
|
11
|
-
* Base which is distinct from any other Base created in this way. Custom Apps
|
|
12
|
-
* can be applied to a given instance; see {@link Container}.
|
|
13
|
-
*/
|
|
14
|
-
export default class TestDriver {
|
|
15
|
-
/**
|
|
16
|
-
* Create an instance of the test driver, initializing a simulated Airtable
|
|
17
|
-
* Base to take the state described by the provided fixture data.
|
|
18
|
-
*/
|
|
19
|
-
constructor(fixtureData: FixtureData);
|
|
20
|
-
/**
|
|
21
|
-
* The simulated Airtable Base associated with this instance.
|
|
22
|
-
*/
|
|
23
|
-
get base(): import("../models/base").default;
|
|
24
|
-
/**
|
|
25
|
-
* The Cursor associated with this instance's Base.
|
|
26
|
-
*/
|
|
27
|
-
get cursor(): import("../models/cursor").default;
|
|
28
|
-
/**
|
|
29
|
-
* A React Component which may be used to wrap App Components, enabling
|
|
30
|
-
* them to run outside of a production Apps environment.
|
|
31
|
-
*
|
|
32
|
-
* @example
|
|
33
|
-
* ```js
|
|
34
|
-
* const MyCustomApp = require('../src/my_custom_app');
|
|
35
|
-
* const testDriver = new TestDriver(fixtureData);
|
|
36
|
-
*
|
|
37
|
-
* render(
|
|
38
|
-
* <testDriver.Container>
|
|
39
|
-
* <MyCustomApp />
|
|
40
|
-
* </testDriver.Container>
|
|
41
|
-
* );
|
|
42
|
-
* ```
|
|
43
|
-
*/
|
|
44
|
-
Container({ children }: {
|
|
45
|
-
children: React.ReactNode;
|
|
46
|
-
}): React.FunctionComponentElement<React.SuspenseProps>;
|
|
47
|
-
/**
|
|
48
|
-
* Destroy a Field in the simulated Base.
|
|
49
|
-
*/
|
|
50
|
-
deleteFieldAsync(tableIdOrName: TableId | string, fieldIdOrName: FieldId | string): Promise<void>;
|
|
51
|
-
/**
|
|
52
|
-
* Update the active Table and/or the active View of the App's {@link
|
|
53
|
-
* Cursor}. Either `table` or `view` must be specified.
|
|
54
|
-
*
|
|
55
|
-
* @example
|
|
56
|
-
* ```js
|
|
57
|
-
* testDriver.setActiveCursorModels({view: 'My grid view'});
|
|
58
|
-
* ```
|
|
59
|
-
*/
|
|
60
|
-
setActiveCursorModels({ table: tableIdOrName, view: viewIdOrName, }: {
|
|
61
|
-
table: TableId | string;
|
|
62
|
-
view?: ViewId | string;
|
|
63
|
-
} | {
|
|
64
|
-
table?: TableId | string;
|
|
65
|
-
view: ViewId | string;
|
|
66
|
-
}): void;
|
|
67
|
-
/**
|
|
68
|
-
* Specify the outcome of internal permission checks. This influences the
|
|
69
|
-
* behavior of not only explicit permission checks from Apps code but also
|
|
70
|
-
* the outcome of model operations such as {@link createRecordsAsync}.
|
|
71
|
-
*/
|
|
72
|
-
simulatePermissionCheck(check: (mutation: Mutation) => boolean): void;
|
|
73
|
-
/**
|
|
74
|
-
* Simulate a user visually selecting a set of Records in the active Table.
|
|
75
|
-
* This operation is unrelated to an App's programmatic "selection" of
|
|
76
|
-
* records via, e.g. {@link Table.selectRecords}. To deselect all records,
|
|
77
|
-
* invoke this method with an empty array.
|
|
78
|
-
*/
|
|
79
|
-
userSelectRecords(recordIds: Array<RecordId>): void;
|
|
80
|
-
/**
|
|
81
|
-
* Regsiter a function to be invoked in response to a given internal event.
|
|
82
|
-
*/
|
|
83
|
-
watch<Key extends keyof WatchableKeysAndArgs>(key: Key, fn: (data: WatchableKeysAndArgs[Key]) => void): void;
|
|
84
|
-
/**
|
|
85
|
-
* De-regsiter a function which was previously registered with {@link
|
|
86
|
-
* watch}.
|
|
87
|
-
*/
|
|
88
|
-
unwatch<Key extends keyof WatchableKeysAndArgs>(key: Key, fn: (data: WatchableKeysAndArgs[Key]) => void): void;
|
|
89
|
-
}
|
|
90
|
-
//# sourceMappingURL=test_driver.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"test_driver.d.ts","sourceRoot":"","sources":["../../../../src/testing/test_driver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,OAAO,EAAC,OAAO,EAAC,MAAM,gBAAgB,CAAC;AACvC,OAAO,EAAC,QAAQ,EAAC,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAC,QAAQ,EAAC,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAC,OAAO,EAAC,MAAM,gBAAgB,CAAC;AACvC,OAAO,EAAC,MAAM,EAAC,MAAM,eAAe,CAAC;AAErC,OAA8B,EAC1B,WAAW,EACX,oBAAoB,EACvB,MAAM,oCAAoC,CAAC;AAE5C;;;;;GAKG;AACH,MAAM,CAAC,OAAO,OAAO,UAAU;IAM3B;;;OAGG;gBACS,WAAW,EAAE,WAAW;IAMpC;;OAEG;IACH,IAAI,IAAI,qCAEP;IAED;;OAEG;IACH,IAAI,MAAM,uCAET;IAED;;;;;;;;;;;;;;;OAeG;IACH,SAAS,CAAC,EAAC,QAAQ,EAAC,EAAE;QAAC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;KAAC;IASjD;;OAEG;IACG,gBAAgB,CAAC,aAAa,EAAE,OAAO,GAAG,MAAM,EAAE,aAAa,EAAE,OAAO,GAAG,MAAM;IAWvF;;;;;;;;OAQG;IACH,qBAAqB,CAAC,EAClB,KAAK,EAAE,aAAa,EACpB,IAAI,EAAE,YAAY,GACrB,EACK;QAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;KAAC,GACjD;QAAC,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAA;KAAC;IAqCvD;;;;OAIG;IACH,uBAAuB,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,OAAO;IAI9D;;;;;OAKG;IACH,iBAAiB,CAAC,SAAS,EAAE,KAAK,CAAC,QAAQ,CAAC;IA4B5C;;OAEG;IACH,KAAK,CAAC,GAAG,SAAS,MAAM,oBAAoB,EACxC,GAAG,EAAE,GAAG,EACR,EAAE,EAAE,CAAC,IAAI,EAAE,oBAAoB,CAAC,GAAG,CAAC,KAAK,IAAI;IAKjD;;;OAGG;IACH,OAAO,CAAC,GAAG,SAAS,MAAM,oBAAoB,EAC1C,GAAG,EAAE,GAAG,EACR,EAAE,EAAE,CAAC,IAAI,EAAE,oBAAoB,CAAC,GAAG,CAAC,KAAK,IAAI;CAIpD"}
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import { ObjectValues } from '../private_utils';
|
|
2
|
-
import { Mutation } from './mutations';
|
|
3
|
-
import { FieldId } from './field';
|
|
4
|
-
import { TableId } from './table';
|
|
5
|
-
/** @hidden */
|
|
6
|
-
export declare const TestMutationTypes: Readonly<{
|
|
7
|
-
DELETE_SINGLE_FIELD: "deleteSingleField";
|
|
8
|
-
SET_MULTIPLE_RECORDS_CELL_VALUES: "setMultipleRecordsCellValues";
|
|
9
|
-
DELETE_MULTIPLE_RECORDS: "deleteMultipleRecords";
|
|
10
|
-
CREATE_MULTIPLE_RECORDS: "createMultipleRecords";
|
|
11
|
-
SET_MULTIPLE_GLOBAL_CONFIG_PATHS: "setMultipleGlobalConfigPaths";
|
|
12
|
-
CREATE_SINGLE_FIELD: "createSingleField";
|
|
13
|
-
UPDATE_SINGLE_FIELD_CONFIG: "updateSingleFieldConfig";
|
|
14
|
-
CREATE_SINGLE_TABLE: "createSingleTable";
|
|
15
|
-
}>;
|
|
16
|
-
/** @hidden */
|
|
17
|
-
export declare type TestMutationType = ObjectValues<typeof TestMutationTypes>;
|
|
18
|
-
/** @hidden */
|
|
19
|
-
interface TestDeleteSingleFieldMutation {
|
|
20
|
-
readonly type: typeof TestMutationTypes.DELETE_SINGLE_FIELD;
|
|
21
|
-
readonly tableId: TableId;
|
|
22
|
-
readonly id: FieldId;
|
|
23
|
-
}
|
|
24
|
-
/** @hidden */
|
|
25
|
-
export declare type TestMutation = Mutation | TestDeleteSingleFieldMutation;
|
|
26
|
-
export {};
|
|
27
|
-
//# sourceMappingURL=test_mutations.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"test_mutations.d.ts","sourceRoot":"","sources":["../../../../src/types/test_mutations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAC,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAC,QAAQ,EAAgB,MAAM,aAAa,CAAC;AACpD,OAAO,EAAC,OAAO,EAAC,MAAM,SAAS,CAAC;AAChC,OAAO,EAAC,OAAO,EAAC,MAAM,SAAS,CAAC;AAEhC,cAAc;AACd,eAAO,MAAM,iBAAiB;;;;;;;;;EAG5B,CAAC;AAEH,cAAc;AACd,oBAAY,gBAAgB,GAAG,YAAY,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAEtE,cAAc;AACd,UAAU,6BAA6B;IACnC,QAAQ,CAAC,IAAI,EAAE,OAAO,iBAAiB,CAAC,mBAAmB,CAAC;IAC5D,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;CACxB;AAED,cAAc;AACd,oBAAY,YAAY,GAAG,QAAQ,GAAG,6BAA6B,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"unstable_testing.d.ts","sourceRoot":"","sources":["../../../src/unstable_testing.ts"],"names":[],"mappings":"AAEA,OAAO,0CAA0C,CAAC;AAElD,OAAO,EAAC,OAAO,EAAC,MAAM,uBAAuB,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mock_airtable_interface_external.test.d.ts","sourceRoot":"","sources":["../../../../test/testing/mock_airtable_interface_external.test.ts"],"names":[],"mappings":""}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"test_driver.test.d.ts","sourceRoot":"","sources":["../../../../test/testing/test_driver.test.ts"],"names":[],"mappings":""}
|
package/unstable_testing.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from './dist/types/src/unstable_testing';
|
package/unstable_testing.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
module.exports = require('./dist/cjs/unstable_testing');
|