├── .block
└── remote.json
├── .eslintrc.js
├── .gitignore
├── LICENSE.md
├── README.md
├── block.json
├── frontend
├── SettingsForm.js
├── index.js
└── settings.js
├── media
└── block.gif
├── package-lock.json
└── package.json
/.block/remote.json:
--------------------------------------------------------------------------------
1 | {
2 | "blockId": "blkNeu8QsnzGn97kw",
3 | "baseId": "appm25RDUu36zpdKP"
4 | }
5 |
--------------------------------------------------------------------------------
/.eslintrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | env: {
3 | browser: true,
4 | es6: true,
5 | },
6 | extends: ['eslint:recommended', 'plugin:react/recommended'],
7 | globals: {
8 | Atomics: 'readonly',
9 | SharedArrayBuffer: 'readonly',
10 | },
11 | parserOptions: {
12 | ecmaFeatures: {
13 | jsx: true,
14 | },
15 | ecmaVersion: 2018,
16 | sourceType: 'module',
17 | },
18 | plugins: ['react', 'react-hooks'],
19 | rules: {
20 | 'react/prop-types': 0,
21 | 'react-hooks/rules-of-hooks': 'error',
22 | 'react-hooks/exhaustive-deps': 'warn',
23 | },
24 | settings: {
25 | react: {
26 | version: 'detect',
27 | },
28 | },
29 | };
30 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | /node_modules
2 | /.airtableblocksrc.json
3 | /build
--------------------------------------------------------------------------------
/LICENSE.md:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2020 Airtable
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
6 | associated documentation files (the "Software"), to deal in the Software without restriction,
7 | including without limitation the rights to use, copy, modify, merge, publish, distribute,
8 | sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
9 | furnished to do so, subject to the following conditions:
10 |
11 | The above copyright notice and this permission notice shall be included in all copies or substantial
12 | portions of the Software.
13 |
14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT
15 | NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
16 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES
17 | OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
18 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
19 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # URL preview app
2 |
3 | When the user selects a record in grid view, this app gets a preview URL from the record and shows
4 | the corresponding preview. This app supports previews from the following services: YouTube, Vimeo,
5 | Spotify, Soundcloud, and Figma.
6 |
7 | The code shows:
8 |
9 | - How to use the Cursor API to detect when a user has selected a record in grid view, and how to
10 | get the selected record.
11 |
12 | - How to embed content in a app.
13 |
14 | ## How to run this app
15 |
16 | 1. Create a new base (or you can use an existing base).
17 |
18 | 2. Create a new app in your new base (see
19 | [Create a new app](https://airtable.com/developers/blocks/guides/hello-world-tutorial#create-a-new-app)),
20 | selecting "URL preview" as your template.
21 |
22 | 3. From the root of your new app, run `block run`.
23 |
24 | ## See the app running
25 |
26 | 
27 |
--------------------------------------------------------------------------------
/block.json:
--------------------------------------------------------------------------------
1 | {
2 | "frontendEntry": "./frontend/index.js"
3 | }
4 |
--------------------------------------------------------------------------------
/frontend/SettingsForm.js:
--------------------------------------------------------------------------------
1 | import PropTypes from 'prop-types';
2 | import React from 'react';
3 | import {
4 | useGlobalConfig,
5 | Box,
6 | Button,
7 | FieldPickerSynced,
8 | FormField,
9 | Heading,
10 | Switch,
11 | TablePickerSynced,
12 | Text,
13 | } from '@airtable/blocks/ui';
14 |
15 | import {useSettings, ConfigKeys, allowedUrlFieldTypes} from './settings';
16 |
17 | function SettingsForm({setIsSettingsOpen}) {
18 | const globalConfig = useGlobalConfig();
19 | const {
20 | isValid,
21 | message,
22 | settings: {isEnforced, urlTable},
23 | } = useSettings();
24 |
25 | const canUpdateSettings = globalConfig.hasPermissionToSet();
26 |
27 | return (
28 |
37 |
38 | Settings
39 |
40 | {
44 | globalConfig.setAsync(ConfigKeys.IS_ENFORCED, value);
45 | }}
46 | disabled={!canUpdateSettings}
47 | label="Use a specific field for previews"
48 | />
49 |
50 | {isEnforced
51 | ? 'The app will show previews for the selected record in grid view if the table has a supported URL in the specified field.'
52 | : 'The app will show previews if the selected cell in grid view has a supported URL.'}
53 |
54 |
55 | {isEnforced && (
56 |
57 |
58 |
59 | )}
60 | {isEnforced && urlTable && (
61 |
62 |
67 |
68 | )}
69 |
70 |
71 |
78 | {message}
79 |
80 |
88 |
89 |
90 | );
91 | }
92 |
93 | SettingsForm.propTypes = {
94 | setIsSettingsOpen: PropTypes.func.isRequired,
95 | };
96 |
97 | export default SettingsForm;
98 |
--------------------------------------------------------------------------------
/frontend/index.js:
--------------------------------------------------------------------------------
1 | import React, {Fragment, useState, useCallback, useEffect} from 'react';
2 | import {cursor} from '@airtable/blocks';
3 | import {ViewType} from '@airtable/blocks/models';
4 | import {
5 | initializeBlock,
6 | registerRecordActionDataCallback,
7 | useBase,
8 | useRecordById,
9 | useLoadable,
10 | useSettingsButton,
11 | useWatchable,
12 | Box,
13 | Dialog,
14 | Heading,
15 | Link,
16 | Text,
17 | TextButton,
18 | } from '@airtable/blocks/ui';
19 |
20 | import {useSettings} from './settings';
21 | import SettingsForm from './SettingsForm';
22 |
23 | // How this app chooses a preview to show:
24 | //
25 | // Without a specified Table & Field:
26 | //
27 | // - When the user selects a cell in grid view and the field's content is
28 | // a supported preview URL, the app uses this URL to construct an embed
29 | // URL and inserts this URL into an iframe.
30 | //
31 | // To Specify a Table & Field:
32 | //
33 | // - The user may use "Settings" to toggle a specified table and specified
34 | // field constraint. If the constraint switch is set to "Yes",he user must
35 | // set a specified table and specified field for URL previews.
36 | //
37 | // With a specified table & specified field:
38 | //
39 | // - When the user selects a cell in grid view and the active table matches
40 | // the specified table or when the user opens a record from a button field
41 | // in the specified table:
42 | // The app looks in the selected record for the
43 | // specified field containing a supported URL (e.g. https://www.youtube.com/watch?v=KYz2wyBy3kc),
44 | // and uses this URL to construct an embed URL and inserts this URL into
45 | // an iframe.
46 | //
47 | function UrlPreviewApp() {
48 | const [isSettingsOpen, setIsSettingsOpen] = useState(false);
49 | useSettingsButton(() => setIsSettingsOpen(!isSettingsOpen));
50 |
51 | const {
52 | isValid,
53 | settings: {isEnforced, urlTable},
54 | } = useSettings();
55 |
56 | // Caches the currently selected record and field in state. If the user
57 | // selects a record and a preview appears, and then the user de-selects the
58 | // record (but does not select another), the preview will remain. This is
59 | // useful when, for example, the user resizes the apps pane.
60 | const [selectedRecordId, setSelectedRecordId] = useState(null);
61 | const [selectedFieldId, setSelectedFieldId] = useState(null);
62 |
63 | const [recordActionErrorMessage, setRecordActionErrorMessage] = useState('');
64 |
65 | // cursor.selectedRecordIds and selectedFieldIds aren't loaded by default,
66 | // so we need to load them explicitly with the useLoadable hook. The rest of
67 | // the code in the component will not run until they are loaded.
68 | useLoadable(cursor);
69 |
70 | // Update the selectedRecordId and selectedFieldId state when the selected
71 | // record or field change.
72 | useWatchable(cursor, ['selectedRecordIds', 'selectedFieldIds'], () => {
73 | // If the update was triggered by a record being de-selected,
74 | // the current selectedRecordId will be retained. This is
75 | // what enables the caching described above.
76 | if (cursor.selectedRecordIds.length > 0) {
77 | // There might be multiple selected records. We'll use the first
78 | // one.
79 | setSelectedRecordId(cursor.selectedRecordIds[0]);
80 | }
81 | if (cursor.selectedFieldIds.length > 0) {
82 | // There might be multiple selected fields. We'll use the first
83 | // one.
84 | setSelectedFieldId(cursor.selectedFieldIds[0]);
85 | }
86 | });
87 |
88 | // Close the record action error dialog whenever settings are opened or the selected record
89 | // is updated. (This means you don't have to close the modal to see the settings, or when
90 | // you've opened a different record.)
91 | useEffect(() => {
92 | setRecordActionErrorMessage('');
93 | }, [isSettingsOpen, selectedRecordId]);
94 |
95 | // Register a callback to be called whenever a record action occurs (via button field)
96 | // useCallback is used to memoize the callback, to avoid having to register/unregister
97 | // it unnecessarily.
98 | const onRecordAction = useCallback(
99 | data => {
100 | // Ignore the event if settings are already open.
101 | // This means we can assume settings are valid (since we force settings to be open if
102 | // they are invalid).
103 | if (!isSettingsOpen) {
104 | if (isEnforced) {
105 | if (data.tableId === urlTable.id) {
106 | setSelectedRecordId(data.recordId);
107 | } else {
108 | // Record is from a mismatching table.
109 | setRecordActionErrorMessage(
110 | `This app is set up to preview URLs using records from the "${urlTable.name}" table, but was opened from a different table.`,
111 | );
112 | }
113 | } else {
114 | // Preview is not supported in this case, as we wouldn't know what field to preview.
115 | // Show a dialog to the user instead.
116 | setRecordActionErrorMessage(
117 | 'You must enable "Use a specific field for previews" to preview URLs with a button field.',
118 | );
119 | }
120 | }
121 | },
122 | [isSettingsOpen, isEnforced, urlTable],
123 | );
124 | useEffect(() => {
125 | // Return the unsubscribe function to ensure we clean up the handler.
126 | return registerRecordActionDataCallback(onRecordAction);
127 | }, [onRecordAction]);
128 |
129 | // This watch deletes the cached selectedRecordId and selectedFieldId when
130 | // the user moves to a new table or view. This prevents the following
131 | // scenario: User selects a record that contains a preview url. The preview appears.
132 | // User switches to a different table. The preview disappears. The user
133 | // switches back to the original table. Weirdly, the previously viewed preview
134 | // reappears, even though no record is selected.
135 | useWatchable(cursor, ['activeTableId', 'activeViewId'], () => {
136 | setSelectedRecordId(null);
137 | setSelectedFieldId(null);
138 | });
139 |
140 | const base = useBase();
141 | const activeTable = base.getTableByIdIfExists(cursor.activeTableId);
142 |
143 | useEffect(() => {
144 | // Display the settings form if the settings aren't valid.
145 | if (!isValid && !isSettingsOpen) {
146 | setIsSettingsOpen(true);
147 | }
148 | }, [isValid, isSettingsOpen]);
149 |
150 | // activeTable is briefly null when switching to a newly created table.
151 | if (!activeTable) {
152 | return null;
153 | }
154 |
155 | return (
156 |
157 | {isSettingsOpen ? (
158 |
159 | ) : (
160 |
166 | )}
167 | {recordActionErrorMessage && (
168 |
175 | )}
176 |
177 | );
178 | }
179 |
180 | // Shows a preview, or a dialog that displays information about what
181 | // kind of services (URLs) are supported by this app.
182 | function RecordPreviewWithDialog({
183 | activeTable,
184 | selectedRecordId,
185 | selectedFieldId,
186 | setIsSettingsOpen,
187 | }) {
188 | const [isDialogOpen, setIsDialogOpen] = useState(false);
189 |
190 | // Close the dialog when the selected record is changed.
191 | // The new record might have a preview, so we don't want to hide it behind this dialog.
192 | useEffect(() => {
193 | setIsDialogOpen(false);
194 | }, [selectedRecordId]);
195 |
196 | return (
197 |
198 |
209 |
216 |
217 | {isDialogOpen && (
218 |
240 | )}
241 |
242 | );
243 | }
244 |
245 | // Shows a preview, or a message about what the user should do to see a preview.
246 | function RecordPreview({
247 | activeTable,
248 | selectedRecordId,
249 | selectedFieldId,
250 | setIsDialogOpen,
251 | setIsSettingsOpen,
252 | }) {
253 | const {
254 | settings: {isEnforced, urlField, urlTable},
255 | } = useSettings();
256 |
257 | const table = (isEnforced && urlTable) || activeTable;
258 |
259 | // We use getFieldByIdIfExists because the field might be deleted.
260 | const selectedField = selectedFieldId ? table.getFieldByIdIfExists(selectedFieldId) : null;
261 | // When using a specific field for previews is enabled and that field exists,
262 | // use the selectedField
263 | const previewField = (isEnforced && urlField) || selectedField;
264 | // Triggers a re-render if the record changes. Preview URL cell value
265 | // might have changed, or record might have been deleted.
266 | const selectedRecord = useRecordById(table, selectedRecordId ? selectedRecordId : '', {
267 | fields: [previewField],
268 | });
269 |
270 | // Triggers a re-render if the user switches table or view.
271 | // RecordPreview may now need to render a preview, or render nothing at all.
272 | useWatchable(cursor, ['activeTableId', 'activeViewId']);
273 |
274 | // This button is re-used in two states so it's pulled out in a constant here.
275 | const viewSupportedURLsButton = (
276 | setIsDialogOpen(true)}>
277 | View supported URLs
278 |
279 | );
280 |
281 | if (
282 | // If there is/was a specified table enforced, but the cursor
283 | // is not presently in the specified table, display a message to the user.
284 | // Exception: selected record is from the specified table (has been opened
285 | // via button field or other means while cursor is on a different table.)
286 | isEnforced &&
287 | cursor.activeTableId !== table.id &&
288 | !(selectedRecord && selectedRecord.parentTable.id === table.id)
289 | ) {
290 | return (
291 |
292 | Switch to the “{table.name}” table to see previews.
293 | setIsSettingsOpen(true)}>
294 | Settings
295 |
296 |
297 | );
298 | } else if (
299 | // activeViewId is briefly null when switching views
300 | selectedRecord === null &&
301 | (cursor.activeViewId === null ||
302 | table.getViewById(cursor.activeViewId).type !== ViewType.GRID)
303 | ) {
304 | return Switch to a grid view to see previews;
305 | } else if (
306 | // selectedRecord will be null on app initialization, after
307 | // the user switches table or view, or if it was deleted.
308 | selectedRecord === null ||
309 | // The preview field may have been deleted.
310 | previewField === null
311 | ) {
312 | return (
313 |
314 | Select a cell to see a preview
315 | {viewSupportedURLsButton}
316 |
317 | );
318 | } else {
319 | // Using getCellValueAsString guarantees we get a string back. If
320 | // we use getCellValue, we might get back numbers, booleans, or
321 | // arrays depending on the field type.
322 | const cellValue = selectedRecord.getCellValueAsString(previewField);
323 |
324 | if (!cellValue) {
325 | return (
326 |
327 | The “{previewField.name}” field is empty
328 | {viewSupportedURLsButton}
329 |
330 | );
331 | } else {
332 | const previewUrl = getPreviewUrlForCellValue(cellValue);
333 |
334 | // In this case, the FIELD_NAME field of the currently selected
335 | // record either contains no URL, or contains a that cannot be
336 | // resolved to a supported preview.
337 | if (!previewUrl) {
338 | return (
339 |
340 | No preview
341 | {viewSupportedURLsButton}
342 |
343 | );
344 | } else {
345 | return (
346 |
360 | );
361 | }
362 | }
363 | }
364 | }
365 |
366 | function getPreviewUrlForCellValue(url) {
367 | if (!url) {
368 | return null;
369 | }
370 |
371 | // Try to extract the preview URL from the URL using regular expression
372 | // based helper functions for each service we support.
373 | //
374 | for (const converter of converters) {
375 | const previewUrl = converter(url);
376 | if (previewUrl) {
377 | return previewUrl;
378 | }
379 | }
380 | // If no converter is found, return null.
381 | return null;
382 | }
383 |
384 | const converters = [
385 | function getAirtablePreviewUrl(url) {
386 | const match = url.match(/airtable\.com(\/embed)?\/(shr[A-Za-z0-9]{14}.*)/);
387 | if (match) {
388 | return `https://airtable.com/embed/${match[2]}`;
389 | }
390 |
391 | // URL isn't for an Airtable share
392 | return null;
393 | },
394 | function getYoutubePreviewUrl(url) {
395 | // Standard youtube urls, e.g. https://www.youtube.com/watch?v=KYz2wyBy3kc
396 | let match = url.match(/youtube\.com\/.*v=([\w-]+)(&|$)/);
397 |
398 | if (match) {
399 | return `https://www.youtube.com/embed/${match[1]}`;
400 | }
401 |
402 | // Shortened youtube urls, e.g. https://youtu.be/KYz2wyBy3kc
403 | match = url.match(/youtu\.be\/([\w-]+)(\?|$)/);
404 | if (match) {
405 | return `https://www.youtube.com/embed/${match[1]}`;
406 | }
407 |
408 | // Youtube playlist urls, e.g. youtube.com/playlist?list=KYz2wyBy3kc
409 | match = url.match(/youtube\.com\/playlist\?.*list=([\w-]+)(&|$)/);
410 | if (match) {
411 | return `https://www.youtube.com/embed/videoseries?list=${match[1]}`;
412 | }
413 |
414 | // URL isn't for a youtube video
415 | return null;
416 | },
417 | function getVimeoPreviewUrl(url) {
418 | const match = url.match(/vimeo\.com\/([\w-]+)(\?|$)/);
419 | if (match) {
420 | return `https://player.vimeo.com/video/${match[1]}`;
421 | }
422 |
423 | // URL isn't for a Vimeo video
424 | return null;
425 | },
426 | function getSpotifyPreviewUrl(url) {
427 | // Spotify URLs for song, album, artist, playlist all have similar formats
428 | let match = url.match(/spotify\.com\/(track|album|artist|playlist)\/([\w-]+)(\?|$)/);
429 | if (match) {
430 | return `https://open.spotify.com/embed/${match[1]}/${match[2]}`;
431 | }
432 |
433 | // Spotify URLs for podcasts and episodes have a different format
434 | match = url.match(/spotify\.com\/(show|episode)\/([\w-]+)(\?|$)/);
435 | if (match) {
436 | return `https://open.spotify.com/embed-podcast/${match[1]}/${match[2]}`;
437 | }
438 |
439 | // URL isn't for Spotify
440 | return null;
441 | },
442 | function getSoundcloudPreviewUrl(url) {
443 | // Soundcloud url's don't have a clear format, so just check if they are from soundcloud and try
444 | // to embed them.
445 | if (url.match(/soundcloud\.com/)) {
446 | return `https://w.soundcloud.com/player/?url=${url}&color=%23ff5500&auto_play=false&hide_related=false&show_comments=true&show_user=true&show_reposts=false&show_teaser=true`;
447 | }
448 |
449 | // URL isn't for Soundcloud
450 | return null;
451 | },
452 | function getFigmaPreviewUrl(url) {
453 | // Figma has a regex they recommend matching against
454 | if (
455 | url.match(
456 | /(https:\/\/([\w.-]+\.)?)?figma.com\/(file|proto)\/([0-9a-zA-Z]{22,128})(?:\/.*)?$/,
457 | )
458 | ) {
459 | return `https://www.figma.com/embed?embed_host=astra&url=${url}`;
460 | }
461 |
462 | // URL isn't for Figma
463 | return null;
464 | },
465 | function getLoomPreviewUrl(url) {
466 | const match = url.match(/loom\.com\/share\/([\w-]+)(\?|$)/);
467 | if (match) {
468 | return `https://loom.com/embed/${match[1]}`;
469 | }
470 |
471 | // URL isn't for a Loom video
472 | return null;
473 | },
474 | function getGooglePreviewUrl(url) {
475 | // Google URLs for Google Drive files, Docs, Sheets, and Slides all have similar formats
476 | const match = url.match(
477 | /(docs|drive)\.google\.com\/(document|spreadsheets|presentation|file)\/d\/([\w-]+)/,
478 | );
479 | if (match) {
480 | return `https://${match[1]}.google.com/${match[2]}/d/${match[3]}/preview`;
481 | }
482 |
483 | // Google Drive folders have a different format and embed URL.
484 | const driveMatch = url.match(/drive\.google\.com\/drive\/folders\/([\w-]+)/);
485 | if (driveMatch) {
486 | return `https://drive.google.com/embeddedfolderview?id=${driveMatch[1]}`;
487 | }
488 |
489 | // URL isn't for a supported Google url format
490 | return null;
491 | },
492 | ];
493 |
494 | initializeBlock(() => );
495 |
--------------------------------------------------------------------------------
/frontend/settings.js:
--------------------------------------------------------------------------------
1 | import {useBase, useGlobalConfig} from '@airtable/blocks/ui';
2 | import {FieldType} from '@airtable/blocks/models';
3 |
4 | export const ConfigKeys = {
5 | IS_ENFORCED: 'isEnforced',
6 | URL_TABLE_ID: 'urlTableId',
7 | URL_FIELD_ID: 'urlFieldId',
8 | };
9 |
10 | export const allowedUrlFieldTypes = [
11 | FieldType.FORMULA,
12 | FieldType.SINGLE_LINE_TEXT,
13 | FieldType.MULTILINE_TEXT,
14 | FieldType.URL,
15 | ];
16 |
17 | /**
18 | * Return settings from GlobalConfig with defaults, and converts them to Airtable objects.
19 | * @param {object} globalConfig
20 | * @param {Base} base - The base being used by the app in order to convert id's to objects
21 | * @returns {{
22 | * isEnforced: true | false,
23 | * urlTable: Table | null,
24 | * urlField: Field | null,
25 | * }}
26 | */
27 | function getSettings(globalConfig, base) {
28 | const isEnforced = Boolean(globalConfig.get(ConfigKeys.IS_ENFORCED));
29 | const urlFieldId = globalConfig.get(ConfigKeys.URL_FIELD_ID);
30 | const urlTableId = globalConfig.get(ConfigKeys.URL_TABLE_ID);
31 |
32 | const urlTable = base.getTableByIdIfExists(urlTableId);
33 | const urlField = urlTable ? urlTable.getFieldByIdIfExists(urlFieldId) : null;
34 | return {
35 | isEnforced,
36 | urlField,
37 | urlTable,
38 | };
39 | }
40 |
41 | /**
42 | * Wraps the settings with validation information
43 | * @param {object} settings - The object returned by getSettings
44 | * @returns {{settings: *, isValid: boolean}|{settings: *, isValid: boolean, message: string}}
45 | */
46 | function getSettingsValidationResult(settings) {
47 | const {isEnforced, urlTable, urlField} = settings;
48 | let isValid = true;
49 | let message = null;
50 | // If the enforcement switch is set to "Yes"...
51 | if (isEnforced) {
52 | if (!urlTable) {
53 | // If table has not yet been selected...
54 | isValid = false;
55 | message = 'Please select a table for previews';
56 | } else if (!urlField) {
57 | // If a table has been selected, but no field...
58 | isValid = false;
59 | message = 'Please select a field for previews';
60 | } else if (!allowedUrlFieldTypes.includes(urlField.type)) {
61 | isValid = false;
62 | message = 'Please select a supported field for previews';
63 | }
64 | }
65 |
66 | return {
67 | isValid,
68 | message,
69 | settings,
70 | };
71 | }
72 |
73 | /**
74 | * A React hook to validate and access settings configured in SettingsForm.
75 | * @returns {{settings: *, isValid: boolean, message: string}|{settings: *, isValid: boolean}}
76 | */
77 | export function useSettings() {
78 | const base = useBase();
79 | const globalConfig = useGlobalConfig();
80 | const settings = getSettings(globalConfig, base);
81 | return getSettingsValidationResult(settings);
82 | }
83 |
--------------------------------------------------------------------------------
/media/block.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Airtable/apps-url-preview/c2c6a509ab8777fcb637b752bfdbf6dea91828cc/media/block.gif
--------------------------------------------------------------------------------
/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "@airtable/url-preview-block",
3 | "version": "1.1.7",
4 | "lockfileVersion": 1,
5 | "requires": true,
6 | "dependencies": {
7 | "@airtable/blocks": {
8 | "version": "0.0.53",
9 | "resolved": "https://registry.npmjs.org/@airtable/blocks/-/blocks-0.0.53.tgz",
10 | "integrity": "sha512-Op4QiV3ghfkmVrYrC6M/cx7LoAxIAsm+Y02kAA3Qt9A0gpy8yIlfxlzJwp3i/PwT7++WrFQsEYn3wYlNximcXg==",
11 | "requires": {
12 | "@airtable/eslint-plugin-blocks": "^1.0.2",
13 | "@babel/runtime": "^7.7.6",
14 | "@styled-system/core": "^5.1.2",
15 | "@types/hoist-non-react-statics": "^3.3.1",
16 | "@types/lodash.omit": "^4.5.6",
17 | "@types/prettier": "^1.19.0",
18 | "@types/prop-types": "^15.7.3",
19 | "@types/react": "^16.9.5",
20 | "@types/react-dom": "^16.9.1",
21 | "@types/react-window": "^1.8.1",
22 | "@types/styled-system": "^5.1.4",
23 | "core-js": "^3.4.8",
24 | "emotion": "^10.0.23",
25 | "fast-deep-equal": "^3.1.1",
26 | "hoist-non-react-statics": "^3.3.1",
27 | "lodash.omit": "^4.5.0",
28 | "prop-types": "15.7.2",
29 | "react-window": "1.8.5",
30 | "use-subscription": "^1.3.0"
31 | },
32 | "dependencies": {
33 | "fast-deep-equal": {
34 | "version": "3.1.3",
35 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
36 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
37 | }
38 | }
39 | },
40 | "@airtable/eslint-plugin-blocks": {
41 | "version": "1.0.2",
42 | "resolved": "https://registry.npmjs.org/@airtable/eslint-plugin-blocks/-/eslint-plugin-blocks-1.0.2.tgz",
43 | "integrity": "sha512-8Y+qGA6wIvROoWYADtREg41HlLPDQ31sH16CkWJy1sbFAZUT8V6WXsHnRZrEG22XN80J0eAAYfqUznHMwuo+VA=="
44 | },
45 | "@babel/code-frame": {
46 | "version": "7.5.5",
47 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz",
48 | "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==",
49 | "requires": {
50 | "@babel/highlight": "^7.0.0"
51 | }
52 | },
53 | "@babel/helper-module-imports": {
54 | "version": "7.10.4",
55 | "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz",
56 | "integrity": "sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw==",
57 | "requires": {
58 | "@babel/types": "^7.10.4"
59 | }
60 | },
61 | "@babel/helper-validator-identifier": {
62 | "version": "7.10.4",
63 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz",
64 | "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw=="
65 | },
66 | "@babel/highlight": {
67 | "version": "7.5.0",
68 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.5.0.tgz",
69 | "integrity": "sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ==",
70 | "requires": {
71 | "chalk": "^2.0.0",
72 | "esutils": "^2.0.2",
73 | "js-tokens": "^4.0.0"
74 | }
75 | },
76 | "@babel/runtime": {
77 | "version": "7.10.5",
78 | "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.10.5.tgz",
79 | "integrity": "sha512-otddXKhdNn7d0ptoFRHtMLa8LqDxLYwTjB4nYgM1yy5N6gU/MUf8zqyyLltCH3yAVitBzmwK4us+DD0l/MauAg==",
80 | "requires": {
81 | "regenerator-runtime": "^0.13.4"
82 | }
83 | },
84 | "@babel/types": {
85 | "version": "7.10.5",
86 | "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.5.tgz",
87 | "integrity": "sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q==",
88 | "requires": {
89 | "@babel/helper-validator-identifier": "^7.10.4",
90 | "lodash": "^4.17.19",
91 | "to-fast-properties": "^2.0.0"
92 | }
93 | },
94 | "@emotion/cache": {
95 | "version": "10.0.29",
96 | "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-10.0.29.tgz",
97 | "integrity": "sha512-fU2VtSVlHiF27empSbxi1O2JFdNWZO+2NFHfwO0pxgTep6Xa3uGb+3pVKfLww2l/IBGLNEZl5Xf/++A4wAYDYQ==",
98 | "requires": {
99 | "@emotion/sheet": "0.9.4",
100 | "@emotion/stylis": "0.8.5",
101 | "@emotion/utils": "0.11.3",
102 | "@emotion/weak-memoize": "0.2.5"
103 | }
104 | },
105 | "@emotion/hash": {
106 | "version": "0.8.0",
107 | "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.8.0.tgz",
108 | "integrity": "sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow=="
109 | },
110 | "@emotion/memoize": {
111 | "version": "0.7.4",
112 | "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.4.tgz",
113 | "integrity": "sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw=="
114 | },
115 | "@emotion/serialize": {
116 | "version": "0.11.16",
117 | "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-0.11.16.tgz",
118 | "integrity": "sha512-G3J4o8by0VRrO+PFeSc3js2myYNOXVJ3Ya+RGVxnshRYgsvErfAOglKAiy1Eo1vhzxqtUvjCyS5gtewzkmvSSg==",
119 | "requires": {
120 | "@emotion/hash": "0.8.0",
121 | "@emotion/memoize": "0.7.4",
122 | "@emotion/unitless": "0.7.5",
123 | "@emotion/utils": "0.11.3",
124 | "csstype": "^2.5.7"
125 | }
126 | },
127 | "@emotion/sheet": {
128 | "version": "0.9.4",
129 | "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-0.9.4.tgz",
130 | "integrity": "sha512-zM9PFmgVSqBw4zL101Q0HrBVTGmpAxFZH/pYx/cjJT5advXguvcgjHFTCaIO3enL/xr89vK2bh0Mfyj9aa0ANA=="
131 | },
132 | "@emotion/stylis": {
133 | "version": "0.8.5",
134 | "resolved": "https://registry.npmjs.org/@emotion/stylis/-/stylis-0.8.5.tgz",
135 | "integrity": "sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ=="
136 | },
137 | "@emotion/unitless": {
138 | "version": "0.7.5",
139 | "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.5.tgz",
140 | "integrity": "sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg=="
141 | },
142 | "@emotion/utils": {
143 | "version": "0.11.3",
144 | "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-0.11.3.tgz",
145 | "integrity": "sha512-0o4l6pZC+hI88+bzuaX/6BgOvQVhbt2PfmxauVaYOGgbsAw14wdKyvMCZXnsnsHys94iadcF+RG/wZyx6+ZZBw=="
146 | },
147 | "@emotion/weak-memoize": {
148 | "version": "0.2.5",
149 | "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.2.5.tgz",
150 | "integrity": "sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA=="
151 | },
152 | "@styled-system/core": {
153 | "version": "5.1.2",
154 | "resolved": "https://registry.npmjs.org/@styled-system/core/-/core-5.1.2.tgz",
155 | "integrity": "sha512-XclBDdNIy7OPOsN4HBsawG2eiWfCcuFt6gxKn1x4QfMIgeO6TOlA2pZZ5GWZtIhCUqEPTgIBta6JXsGyCkLBYw==",
156 | "requires": {
157 | "object-assign": "^4.1.1"
158 | }
159 | },
160 | "@types/hoist-non-react-statics": {
161 | "version": "3.3.1",
162 | "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz",
163 | "integrity": "sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==",
164 | "requires": {
165 | "@types/react": "*",
166 | "hoist-non-react-statics": "^3.3.0"
167 | }
168 | },
169 | "@types/lodash": {
170 | "version": "4.14.157",
171 | "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.157.tgz",
172 | "integrity": "sha512-Ft5BNFmv2pHDgxV5JDsndOWTRJ+56zte0ZpYLowp03tW+K+t8u8YMOzAnpuqPgzX6WO1XpDIUm7u04M8vdDiVQ=="
173 | },
174 | "@types/lodash.omit": {
175 | "version": "4.5.6",
176 | "resolved": "https://registry.npmjs.org/@types/lodash.omit/-/lodash.omit-4.5.6.tgz",
177 | "integrity": "sha512-KXPpOSNX2h0DAG2w7ajpk7TXvWF28ZHs5nJhOJyP0BQHkehgr948RVsToItMme6oi0XJkp19CbuNXkIX8FiBlQ==",
178 | "requires": {
179 | "@types/lodash": "*"
180 | }
181 | },
182 | "@types/parse-json": {
183 | "version": "4.0.0",
184 | "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz",
185 | "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA=="
186 | },
187 | "@types/prettier": {
188 | "version": "1.19.1",
189 | "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-1.19.1.tgz",
190 | "integrity": "sha512-5qOlnZscTn4xxM5MeGXAMOsIOIKIbh9e85zJWfBRVPlRMEVawzoPhINYbRGkBZCI8LxvBe7tJCdWiarA99OZfQ=="
191 | },
192 | "@types/prop-types": {
193 | "version": "15.7.3",
194 | "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.3.tgz",
195 | "integrity": "sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw=="
196 | },
197 | "@types/react": {
198 | "version": "16.9.43",
199 | "resolved": "https://registry.npmjs.org/@types/react/-/react-16.9.43.tgz",
200 | "integrity": "sha512-PxshAFcnJqIWYpJbLPriClH53Z2WlJcVZE+NP2etUtWQs2s7yIMj3/LDKZT/5CHJ/F62iyjVCDu2H3jHEXIxSg==",
201 | "requires": {
202 | "@types/prop-types": "*",
203 | "csstype": "^2.2.0"
204 | }
205 | },
206 | "@types/react-dom": {
207 | "version": "16.9.8",
208 | "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-16.9.8.tgz",
209 | "integrity": "sha512-ykkPQ+5nFknnlU6lDd947WbQ6TE3NNzbQAkInC2EKY1qeYdTKp7onFusmYZb+ityzx2YviqT6BXSu+LyWWJwcA==",
210 | "requires": {
211 | "@types/react": "*"
212 | }
213 | },
214 | "@types/react-window": {
215 | "version": "1.8.2",
216 | "resolved": "https://registry.npmjs.org/@types/react-window/-/react-window-1.8.2.tgz",
217 | "integrity": "sha512-gP1xam68Wc4ZTAee++zx6pTdDAH08rAkQrWm4B4F/y6hhmlT9Mgx2q8lTCXnrPHXsr15XjRN9+K2DLKcz44qEQ==",
218 | "requires": {
219 | "@types/react": "*"
220 | }
221 | },
222 | "@types/styled-system": {
223 | "version": "5.1.9",
224 | "resolved": "https://registry.npmjs.org/@types/styled-system/-/styled-system-5.1.9.tgz",
225 | "integrity": "sha512-QlWv6tmQV8dqk8s+LSLb9QAtmuQEnfv4f8lKKZkMgDqRFVmxJDBwEw0u4zhpxp56u0hdR+TCIk9dGfOw3TkCoQ==",
226 | "requires": {
227 | "csstype": "^2.6.9"
228 | }
229 | },
230 | "acorn": {
231 | "version": "7.2.0",
232 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.2.0.tgz",
233 | "integrity": "sha512-apwXVmYVpQ34m/i71vrApRrRKCWQnZZF1+npOD0WV5xZFfwWOmKGQ2RWlfdy9vWITsenisM8M0Qeq8agcFHNiQ==",
234 | "dev": true
235 | },
236 | "acorn-jsx": {
237 | "version": "5.1.0",
238 | "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.1.0.tgz",
239 | "integrity": "sha512-tMUqwBWfLFbJbizRmEcWSLw6HnFzfdJs2sOJEOwwtVPMoH/0Ay+E703oZz78VSXZiiDcZrQ5XKjPIUQixhmgVw==",
240 | "dev": true
241 | },
242 | "ajv": {
243 | "version": "6.10.2",
244 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz",
245 | "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==",
246 | "dev": true,
247 | "requires": {
248 | "fast-deep-equal": "^2.0.1",
249 | "fast-json-stable-stringify": "^2.0.0",
250 | "json-schema-traverse": "^0.4.1",
251 | "uri-js": "^4.2.2"
252 | }
253 | },
254 | "ansi-escapes": {
255 | "version": "4.3.0",
256 | "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.0.tgz",
257 | "integrity": "sha512-EiYhwo0v255HUL6eDyuLrXEkTi7WwVCLAw+SeOQ7M7qdun1z1pum4DEm/nuqIVbPvi9RPPc9k9LbyBv6H0DwVg==",
258 | "dev": true,
259 | "requires": {
260 | "type-fest": "^0.8.1"
261 | }
262 | },
263 | "ansi-regex": {
264 | "version": "5.0.0",
265 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
266 | "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
267 | "dev": true
268 | },
269 | "ansi-styles": {
270 | "version": "3.2.1",
271 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
272 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
273 | "requires": {
274 | "color-convert": "^1.9.0"
275 | }
276 | },
277 | "argparse": {
278 | "version": "1.0.10",
279 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
280 | "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
281 | "dev": true,
282 | "requires": {
283 | "sprintf-js": "~1.0.2"
284 | }
285 | },
286 | "array-includes": {
287 | "version": "3.1.0",
288 | "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.0.tgz",
289 | "integrity": "sha512-ONOEQoKrvXPKk7Su92Co0YMqYO32FfqJTzkKU9u2UpIXyYZIzLSvpdg4AwvSw4mSUW0czu6inK+zby6Oj6gDjQ==",
290 | "dev": true,
291 | "requires": {
292 | "define-properties": "^1.1.3",
293 | "es-abstract": "^1.17.0-next.0"
294 | }
295 | },
296 | "astral-regex": {
297 | "version": "1.0.0",
298 | "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz",
299 | "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==",
300 | "dev": true
301 | },
302 | "babel-plugin-emotion": {
303 | "version": "10.0.33",
304 | "resolved": "https://registry.npmjs.org/babel-plugin-emotion/-/babel-plugin-emotion-10.0.33.tgz",
305 | "integrity": "sha512-bxZbTTGz0AJQDHm8k6Rf3RQJ8tX2scsfsRyKVgAbiUPUNIRtlK+7JxP+TAd1kRLABFxe0CFm2VdK4ePkoA9FxQ==",
306 | "requires": {
307 | "@babel/helper-module-imports": "^7.0.0",
308 | "@emotion/hash": "0.8.0",
309 | "@emotion/memoize": "0.7.4",
310 | "@emotion/serialize": "^0.11.16",
311 | "babel-plugin-macros": "^2.0.0",
312 | "babel-plugin-syntax-jsx": "^6.18.0",
313 | "convert-source-map": "^1.5.0",
314 | "escape-string-regexp": "^1.0.5",
315 | "find-root": "^1.1.0",
316 | "source-map": "^0.5.7"
317 | }
318 | },
319 | "babel-plugin-macros": {
320 | "version": "2.8.0",
321 | "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz",
322 | "integrity": "sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg==",
323 | "requires": {
324 | "@babel/runtime": "^7.7.2",
325 | "cosmiconfig": "^6.0.0",
326 | "resolve": "^1.12.0"
327 | }
328 | },
329 | "babel-plugin-syntax-jsx": {
330 | "version": "6.18.0",
331 | "resolved": "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz",
332 | "integrity": "sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY="
333 | },
334 | "balanced-match": {
335 | "version": "1.0.0",
336 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
337 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
338 | "dev": true
339 | },
340 | "brace-expansion": {
341 | "version": "1.1.11",
342 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
343 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
344 | "dev": true,
345 | "requires": {
346 | "balanced-match": "^1.0.0",
347 | "concat-map": "0.0.1"
348 | }
349 | },
350 | "callsites": {
351 | "version": "3.1.0",
352 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
353 | "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ=="
354 | },
355 | "chalk": {
356 | "version": "2.4.2",
357 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
358 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
359 | "requires": {
360 | "ansi-styles": "^3.2.1",
361 | "escape-string-regexp": "^1.0.5",
362 | "supports-color": "^5.3.0"
363 | }
364 | },
365 | "chardet": {
366 | "version": "0.7.0",
367 | "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz",
368 | "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==",
369 | "dev": true
370 | },
371 | "cli-cursor": {
372 | "version": "3.1.0",
373 | "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz",
374 | "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==",
375 | "dev": true,
376 | "requires": {
377 | "restore-cursor": "^3.1.0"
378 | }
379 | },
380 | "cli-width": {
381 | "version": "2.2.0",
382 | "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz",
383 | "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=",
384 | "dev": true
385 | },
386 | "color-convert": {
387 | "version": "1.9.3",
388 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
389 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
390 | "requires": {
391 | "color-name": "1.1.3"
392 | }
393 | },
394 | "color-name": {
395 | "version": "1.1.3",
396 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
397 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
398 | },
399 | "concat-map": {
400 | "version": "0.0.1",
401 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
402 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
403 | "dev": true
404 | },
405 | "convert-source-map": {
406 | "version": "1.7.0",
407 | "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz",
408 | "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==",
409 | "requires": {
410 | "safe-buffer": "~5.1.1"
411 | }
412 | },
413 | "core-js": {
414 | "version": "3.6.5",
415 | "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz",
416 | "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA=="
417 | },
418 | "cosmiconfig": {
419 | "version": "6.0.0",
420 | "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz",
421 | "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==",
422 | "requires": {
423 | "@types/parse-json": "^4.0.0",
424 | "import-fresh": "^3.1.0",
425 | "parse-json": "^5.0.0",
426 | "path-type": "^4.0.0",
427 | "yaml": "^1.7.2"
428 | }
429 | },
430 | "create-emotion": {
431 | "version": "10.0.27",
432 | "resolved": "https://registry.npmjs.org/create-emotion/-/create-emotion-10.0.27.tgz",
433 | "integrity": "sha512-fIK73w82HPPn/RsAij7+Zt8eCE8SptcJ3WoRMfxMtjteYxud8GDTKKld7MYwAX2TVhrw29uR1N/bVGxeStHILg==",
434 | "requires": {
435 | "@emotion/cache": "^10.0.27",
436 | "@emotion/serialize": "^0.11.15",
437 | "@emotion/sheet": "0.9.4",
438 | "@emotion/utils": "0.11.3"
439 | }
440 | },
441 | "cross-spawn": {
442 | "version": "6.0.5",
443 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
444 | "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
445 | "dev": true,
446 | "requires": {
447 | "nice-try": "^1.0.4",
448 | "path-key": "^2.0.1",
449 | "semver": "^5.5.0",
450 | "shebang-command": "^1.2.0",
451 | "which": "^1.2.9"
452 | },
453 | "dependencies": {
454 | "semver": {
455 | "version": "5.7.1",
456 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
457 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
458 | "dev": true
459 | }
460 | }
461 | },
462 | "csstype": {
463 | "version": "2.6.11",
464 | "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.11.tgz",
465 | "integrity": "sha512-l8YyEC9NBkSm783PFTvh0FmJy7s5pFKrDp49ZL7zBGX3fWkO+N4EEyan1qqp8cwPLDcD0OSdyY6hAMoxp34JFw=="
466 | },
467 | "debug": {
468 | "version": "4.1.1",
469 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
470 | "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
471 | "dev": true,
472 | "requires": {
473 | "ms": "^2.1.1"
474 | }
475 | },
476 | "deep-is": {
477 | "version": "0.1.3",
478 | "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
479 | "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
480 | "dev": true
481 | },
482 | "define-properties": {
483 | "version": "1.1.3",
484 | "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
485 | "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
486 | "dev": true,
487 | "requires": {
488 | "object-keys": "^1.0.12"
489 | }
490 | },
491 | "doctrine": {
492 | "version": "3.0.0",
493 | "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
494 | "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
495 | "dev": true,
496 | "requires": {
497 | "esutils": "^2.0.2"
498 | }
499 | },
500 | "emoji-regex": {
501 | "version": "8.0.0",
502 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
503 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
504 | "dev": true
505 | },
506 | "emotion": {
507 | "version": "10.0.27",
508 | "resolved": "https://registry.npmjs.org/emotion/-/emotion-10.0.27.tgz",
509 | "integrity": "sha512-2xdDzdWWzue8R8lu4G76uWX5WhyQuzATon9LmNeCy/2BHVC6dsEpfhN1a0qhELgtDVdjyEA6J8Y/VlI5ZnaH0g==",
510 | "requires": {
511 | "babel-plugin-emotion": "^10.0.27",
512 | "create-emotion": "^10.0.27"
513 | }
514 | },
515 | "error-ex": {
516 | "version": "1.3.2",
517 | "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
518 | "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
519 | "requires": {
520 | "is-arrayish": "^0.2.1"
521 | }
522 | },
523 | "es-abstract": {
524 | "version": "1.17.0-next.1",
525 | "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.0-next.1.tgz",
526 | "integrity": "sha512-7MmGr03N7Rnuid6+wyhD9sHNE2n4tFSwExnU2lQl3lIo2ShXWGePY80zYaoMOmILWv57H0amMjZGHNzzGG70Rw==",
527 | "dev": true,
528 | "requires": {
529 | "es-to-primitive": "^1.2.1",
530 | "function-bind": "^1.1.1",
531 | "has": "^1.0.3",
532 | "has-symbols": "^1.0.1",
533 | "is-callable": "^1.1.4",
534 | "is-regex": "^1.0.4",
535 | "object-inspect": "^1.7.0",
536 | "object-keys": "^1.1.1",
537 | "object.assign": "^4.1.0",
538 | "string.prototype.trimleft": "^2.1.0",
539 | "string.prototype.trimright": "^2.1.0"
540 | }
541 | },
542 | "es-to-primitive": {
543 | "version": "1.2.1",
544 | "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
545 | "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
546 | "dev": true,
547 | "requires": {
548 | "is-callable": "^1.1.4",
549 | "is-date-object": "^1.0.1",
550 | "is-symbol": "^1.0.2"
551 | }
552 | },
553 | "escape-string-regexp": {
554 | "version": "1.0.5",
555 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
556 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
557 | },
558 | "eslint": {
559 | "version": "6.7.2",
560 | "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.7.2.tgz",
561 | "integrity": "sha512-qMlSWJaCSxDFr8fBPvJM9kJwbazrhNcBU3+DszDW1OlEwKBBRWsJc7NJFelvwQpanHCR14cOLD41x8Eqvo3Nng==",
562 | "dev": true,
563 | "requires": {
564 | "@babel/code-frame": "^7.0.0",
565 | "ajv": "^6.10.0",
566 | "chalk": "^2.1.0",
567 | "cross-spawn": "^6.0.5",
568 | "debug": "^4.0.1",
569 | "doctrine": "^3.0.0",
570 | "eslint-scope": "^5.0.0",
571 | "eslint-utils": "^1.4.3",
572 | "eslint-visitor-keys": "^1.1.0",
573 | "espree": "^6.1.2",
574 | "esquery": "^1.0.1",
575 | "esutils": "^2.0.2",
576 | "file-entry-cache": "^5.0.1",
577 | "functional-red-black-tree": "^1.0.1",
578 | "glob-parent": "^5.0.0",
579 | "globals": "^12.1.0",
580 | "ignore": "^4.0.6",
581 | "import-fresh": "^3.0.0",
582 | "imurmurhash": "^0.1.4",
583 | "inquirer": "^7.0.0",
584 | "is-glob": "^4.0.0",
585 | "js-yaml": "^3.13.1",
586 | "json-stable-stringify-without-jsonify": "^1.0.1",
587 | "levn": "^0.3.0",
588 | "lodash": "^4.17.14",
589 | "minimatch": "^3.0.4",
590 | "mkdirp": "^0.5.1",
591 | "natural-compare": "^1.4.0",
592 | "optionator": "^0.8.3",
593 | "progress": "^2.0.0",
594 | "regexpp": "^2.0.1",
595 | "semver": "^6.1.2",
596 | "strip-ansi": "^5.2.0",
597 | "strip-json-comments": "^3.0.1",
598 | "table": "^5.2.3",
599 | "text-table": "^0.2.0",
600 | "v8-compile-cache": "^2.0.3"
601 | }
602 | },
603 | "eslint-plugin-react": {
604 | "version": "7.14.3",
605 | "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.14.3.tgz",
606 | "integrity": "sha512-EzdyyBWC4Uz2hPYBiEJrKCUi2Fn+BJ9B/pJQcjw5X+x/H2Nm59S4MJIvL4O5NEE0+WbnQwEBxWY03oUk+Bc3FA==",
607 | "dev": true,
608 | "requires": {
609 | "array-includes": "^3.0.3",
610 | "doctrine": "^2.1.0",
611 | "has": "^1.0.3",
612 | "jsx-ast-utils": "^2.1.0",
613 | "object.entries": "^1.1.0",
614 | "object.fromentries": "^2.0.0",
615 | "object.values": "^1.1.0",
616 | "prop-types": "^15.7.2",
617 | "resolve": "^1.10.1"
618 | },
619 | "dependencies": {
620 | "doctrine": {
621 | "version": "2.1.0",
622 | "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
623 | "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
624 | "dev": true,
625 | "requires": {
626 | "esutils": "^2.0.2"
627 | }
628 | }
629 | }
630 | },
631 | "eslint-plugin-react-hooks": {
632 | "version": "2.3.0",
633 | "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-2.3.0.tgz",
634 | "integrity": "sha512-gLKCa52G4ee7uXzdLiorca7JIQZPPXRAQDXV83J4bUEeUuc5pIEyZYAZ45Xnxe5IuupxEqHS+hUhSLIimK1EMw==",
635 | "dev": true
636 | },
637 | "eslint-scope": {
638 | "version": "5.0.0",
639 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.0.0.tgz",
640 | "integrity": "sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw==",
641 | "dev": true,
642 | "requires": {
643 | "esrecurse": "^4.1.0",
644 | "estraverse": "^4.1.1"
645 | }
646 | },
647 | "eslint-utils": {
648 | "version": "1.4.3",
649 | "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz",
650 | "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==",
651 | "dev": true,
652 | "requires": {
653 | "eslint-visitor-keys": "^1.1.0"
654 | }
655 | },
656 | "eslint-visitor-keys": {
657 | "version": "1.1.0",
658 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz",
659 | "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==",
660 | "dev": true
661 | },
662 | "espree": {
663 | "version": "6.1.2",
664 | "resolved": "https://registry.npmjs.org/espree/-/espree-6.1.2.tgz",
665 | "integrity": "sha512-2iUPuuPP+yW1PZaMSDM9eyVf8D5P0Hi8h83YtZ5bPc/zHYjII5khoixIUTMO794NOY8F/ThF1Bo8ncZILarUTA==",
666 | "dev": true,
667 | "requires": {
668 | "acorn": "^7.1.0",
669 | "acorn-jsx": "^5.1.0",
670 | "eslint-visitor-keys": "^1.1.0"
671 | }
672 | },
673 | "esprima": {
674 | "version": "4.0.1",
675 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
676 | "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
677 | "dev": true
678 | },
679 | "esquery": {
680 | "version": "1.0.1",
681 | "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz",
682 | "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==",
683 | "dev": true,
684 | "requires": {
685 | "estraverse": "^4.0.0"
686 | }
687 | },
688 | "esrecurse": {
689 | "version": "4.2.1",
690 | "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz",
691 | "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==",
692 | "dev": true,
693 | "requires": {
694 | "estraverse": "^4.1.0"
695 | }
696 | },
697 | "estraverse": {
698 | "version": "4.3.0",
699 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
700 | "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
701 | "dev": true
702 | },
703 | "esutils": {
704 | "version": "2.0.2",
705 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
706 | "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs="
707 | },
708 | "external-editor": {
709 | "version": "3.1.0",
710 | "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz",
711 | "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==",
712 | "dev": true,
713 | "requires": {
714 | "chardet": "^0.7.0",
715 | "iconv-lite": "^0.4.24",
716 | "tmp": "^0.0.33"
717 | }
718 | },
719 | "fast-deep-equal": {
720 | "version": "2.0.1",
721 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
722 | "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=",
723 | "dev": true
724 | },
725 | "fast-json-stable-stringify": {
726 | "version": "2.1.0",
727 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
728 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
729 | "dev": true
730 | },
731 | "fast-levenshtein": {
732 | "version": "2.0.6",
733 | "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
734 | "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
735 | "dev": true
736 | },
737 | "figures": {
738 | "version": "3.1.0",
739 | "resolved": "https://registry.npmjs.org/figures/-/figures-3.1.0.tgz",
740 | "integrity": "sha512-ravh8VRXqHuMvZt/d8GblBeqDMkdJMBdv/2KntFH+ra5MXkO7nxNKpzQ3n6QD/2da1kH0aWmNISdvhM7gl2gVg==",
741 | "dev": true,
742 | "requires": {
743 | "escape-string-regexp": "^1.0.5"
744 | }
745 | },
746 | "file-entry-cache": {
747 | "version": "5.0.1",
748 | "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz",
749 | "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==",
750 | "dev": true,
751 | "requires": {
752 | "flat-cache": "^2.0.1"
753 | }
754 | },
755 | "find-root": {
756 | "version": "1.1.0",
757 | "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz",
758 | "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng=="
759 | },
760 | "flat-cache": {
761 | "version": "2.0.1",
762 | "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz",
763 | "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==",
764 | "dev": true,
765 | "requires": {
766 | "flatted": "^2.0.0",
767 | "rimraf": "2.6.3",
768 | "write": "1.0.3"
769 | }
770 | },
771 | "flatted": {
772 | "version": "2.0.1",
773 | "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.1.tgz",
774 | "integrity": "sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg==",
775 | "dev": true
776 | },
777 | "fs.realpath": {
778 | "version": "1.0.0",
779 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
780 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
781 | "dev": true
782 | },
783 | "function-bind": {
784 | "version": "1.1.1",
785 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
786 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
787 | "dev": true
788 | },
789 | "functional-red-black-tree": {
790 | "version": "1.0.1",
791 | "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
792 | "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
793 | "dev": true
794 | },
795 | "glob": {
796 | "version": "7.1.6",
797 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
798 | "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
799 | "dev": true,
800 | "requires": {
801 | "fs.realpath": "^1.0.0",
802 | "inflight": "^1.0.4",
803 | "inherits": "2",
804 | "minimatch": "^3.0.4",
805 | "once": "^1.3.0",
806 | "path-is-absolute": "^1.0.0"
807 | }
808 | },
809 | "glob-parent": {
810 | "version": "5.1.0",
811 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz",
812 | "integrity": "sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==",
813 | "dev": true,
814 | "requires": {
815 | "is-glob": "^4.0.1"
816 | }
817 | },
818 | "globals": {
819 | "version": "12.3.0",
820 | "resolved": "https://registry.npmjs.org/globals/-/globals-12.3.0.tgz",
821 | "integrity": "sha512-wAfjdLgFsPZsklLJvOBUBmzYE8/CwhEqSBEMRXA3qxIiNtyqvjYurAtIfDh6chlEPUfmTY3MnZh5Hfh4q0UlIw==",
822 | "dev": true,
823 | "requires": {
824 | "type-fest": "^0.8.1"
825 | }
826 | },
827 | "has": {
828 | "version": "1.0.3",
829 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
830 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
831 | "dev": true,
832 | "requires": {
833 | "function-bind": "^1.1.1"
834 | }
835 | },
836 | "has-flag": {
837 | "version": "3.0.0",
838 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
839 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0="
840 | },
841 | "has-symbols": {
842 | "version": "1.0.1",
843 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz",
844 | "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==",
845 | "dev": true
846 | },
847 | "hoist-non-react-statics": {
848 | "version": "3.3.2",
849 | "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz",
850 | "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==",
851 | "requires": {
852 | "react-is": "^16.7.0"
853 | }
854 | },
855 | "iconv-lite": {
856 | "version": "0.4.24",
857 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
858 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
859 | "dev": true,
860 | "requires": {
861 | "safer-buffer": ">= 2.1.2 < 3"
862 | }
863 | },
864 | "ignore": {
865 | "version": "4.0.6",
866 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
867 | "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
868 | "dev": true
869 | },
870 | "import-fresh": {
871 | "version": "3.1.0",
872 | "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.1.0.tgz",
873 | "integrity": "sha512-PpuksHKGt8rXfWEr9m9EHIpgyyaltBy8+eF6GJM0QCAxMgxCfucMF3mjecK2QsJr0amJW7gTqh5/wht0z2UhEQ==",
874 | "requires": {
875 | "parent-module": "^1.0.0",
876 | "resolve-from": "^4.0.0"
877 | }
878 | },
879 | "imurmurhash": {
880 | "version": "0.1.4",
881 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
882 | "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
883 | "dev": true
884 | },
885 | "inflight": {
886 | "version": "1.0.6",
887 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
888 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
889 | "dev": true,
890 | "requires": {
891 | "once": "^1.3.0",
892 | "wrappy": "1"
893 | }
894 | },
895 | "inherits": {
896 | "version": "2.0.4",
897 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
898 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
899 | "dev": true
900 | },
901 | "inquirer": {
902 | "version": "7.0.1",
903 | "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.0.1.tgz",
904 | "integrity": "sha512-V1FFQ3TIO15det8PijPLFR9M9baSlnRs9nL7zWu1MNVA2T9YVl9ZbrHJhYs7e9X8jeMZ3lr2JH/rdHFgNCBdYw==",
905 | "dev": true,
906 | "requires": {
907 | "ansi-escapes": "^4.2.1",
908 | "chalk": "^2.4.2",
909 | "cli-cursor": "^3.1.0",
910 | "cli-width": "^2.0.0",
911 | "external-editor": "^3.0.3",
912 | "figures": "^3.0.0",
913 | "lodash": "^4.17.15",
914 | "mute-stream": "0.0.8",
915 | "run-async": "^2.2.0",
916 | "rxjs": "^6.5.3",
917 | "string-width": "^4.1.0",
918 | "strip-ansi": "^5.1.0",
919 | "through": "^2.3.6"
920 | }
921 | },
922 | "is-arrayish": {
923 | "version": "0.2.1",
924 | "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
925 | "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0="
926 | },
927 | "is-callable": {
928 | "version": "1.1.4",
929 | "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz",
930 | "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==",
931 | "dev": true
932 | },
933 | "is-date-object": {
934 | "version": "1.0.1",
935 | "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz",
936 | "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=",
937 | "dev": true
938 | },
939 | "is-extglob": {
940 | "version": "2.1.1",
941 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
942 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
943 | "dev": true
944 | },
945 | "is-fullwidth-code-point": {
946 | "version": "3.0.0",
947 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
948 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
949 | "dev": true
950 | },
951 | "is-glob": {
952 | "version": "4.0.1",
953 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
954 | "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
955 | "dev": true,
956 | "requires": {
957 | "is-extglob": "^2.1.1"
958 | }
959 | },
960 | "is-promise": {
961 | "version": "2.1.0",
962 | "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz",
963 | "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=",
964 | "dev": true
965 | },
966 | "is-regex": {
967 | "version": "1.0.5",
968 | "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz",
969 | "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==",
970 | "dev": true,
971 | "requires": {
972 | "has": "^1.0.3"
973 | }
974 | },
975 | "is-symbol": {
976 | "version": "1.0.3",
977 | "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz",
978 | "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==",
979 | "dev": true,
980 | "requires": {
981 | "has-symbols": "^1.0.1"
982 | }
983 | },
984 | "isexe": {
985 | "version": "2.0.0",
986 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
987 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
988 | "dev": true
989 | },
990 | "js-tokens": {
991 | "version": "4.0.0",
992 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
993 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
994 | },
995 | "js-yaml": {
996 | "version": "3.13.1",
997 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz",
998 | "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==",
999 | "dev": true,
1000 | "requires": {
1001 | "argparse": "^1.0.7",
1002 | "esprima": "^4.0.0"
1003 | }
1004 | },
1005 | "json-parse-better-errors": {
1006 | "version": "1.0.2",
1007 | "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
1008 | "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw=="
1009 | },
1010 | "json-schema-traverse": {
1011 | "version": "0.4.1",
1012 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
1013 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
1014 | "dev": true
1015 | },
1016 | "json-stable-stringify-without-jsonify": {
1017 | "version": "1.0.1",
1018 | "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
1019 | "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
1020 | "dev": true
1021 | },
1022 | "jsx-ast-utils": {
1023 | "version": "2.2.3",
1024 | "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.2.3.tgz",
1025 | "integrity": "sha512-EdIHFMm+1BPynpKOpdPqiOsvnIrInRGJD7bzPZdPkjitQEqpdpUuFpq4T0npZFKTiB3RhWFdGN+oqOJIdhDhQA==",
1026 | "dev": true,
1027 | "requires": {
1028 | "array-includes": "^3.0.3",
1029 | "object.assign": "^4.1.0"
1030 | }
1031 | },
1032 | "levn": {
1033 | "version": "0.3.0",
1034 | "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
1035 | "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
1036 | "dev": true,
1037 | "requires": {
1038 | "prelude-ls": "~1.1.2",
1039 | "type-check": "~0.3.2"
1040 | }
1041 | },
1042 | "lines-and-columns": {
1043 | "version": "1.1.6",
1044 | "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz",
1045 | "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA="
1046 | },
1047 | "lodash": {
1048 | "version": "4.17.19",
1049 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz",
1050 | "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ=="
1051 | },
1052 | "lodash.omit": {
1053 | "version": "4.5.0",
1054 | "resolved": "https://registry.npmjs.org/lodash.omit/-/lodash.omit-4.5.0.tgz",
1055 | "integrity": "sha1-brGa5aHuHdnfC5aeZs4Lf6MLXmA="
1056 | },
1057 | "loose-envify": {
1058 | "version": "1.4.0",
1059 | "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
1060 | "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
1061 | "requires": {
1062 | "js-tokens": "^3.0.0 || ^4.0.0"
1063 | }
1064 | },
1065 | "memoize-one": {
1066 | "version": "5.1.1",
1067 | "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.1.1.tgz",
1068 | "integrity": "sha512-HKeeBpWvqiVJD57ZUAsJNm71eHTykffzcLZVYWiVfQeI1rJtuEaS7hQiEpWfVVk18donPwJEcFKIkCmPJNOhHA=="
1069 | },
1070 | "mimic-fn": {
1071 | "version": "2.1.0",
1072 | "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
1073 | "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
1074 | "dev": true
1075 | },
1076 | "minimatch": {
1077 | "version": "3.0.4",
1078 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
1079 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
1080 | "dev": true,
1081 | "requires": {
1082 | "brace-expansion": "^1.1.7"
1083 | }
1084 | },
1085 | "minimist": {
1086 | "version": "1.2.5",
1087 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
1088 | "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
1089 | "dev": true
1090 | },
1091 | "mkdirp": {
1092 | "version": "0.5.5",
1093 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
1094 | "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
1095 | "dev": true,
1096 | "requires": {
1097 | "minimist": "^1.2.5"
1098 | }
1099 | },
1100 | "ms": {
1101 | "version": "2.1.2",
1102 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
1103 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
1104 | "dev": true
1105 | },
1106 | "mute-stream": {
1107 | "version": "0.0.8",
1108 | "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz",
1109 | "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==",
1110 | "dev": true
1111 | },
1112 | "natural-compare": {
1113 | "version": "1.4.0",
1114 | "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
1115 | "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
1116 | "dev": true
1117 | },
1118 | "nice-try": {
1119 | "version": "1.0.5",
1120 | "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
1121 | "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
1122 | "dev": true
1123 | },
1124 | "object-assign": {
1125 | "version": "4.1.1",
1126 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
1127 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
1128 | },
1129 | "object-inspect": {
1130 | "version": "1.7.0",
1131 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz",
1132 | "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==",
1133 | "dev": true
1134 | },
1135 | "object-keys": {
1136 | "version": "1.1.1",
1137 | "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
1138 | "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
1139 | "dev": true
1140 | },
1141 | "object.assign": {
1142 | "version": "4.1.0",
1143 | "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz",
1144 | "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==",
1145 | "dev": true,
1146 | "requires": {
1147 | "define-properties": "^1.1.2",
1148 | "function-bind": "^1.1.1",
1149 | "has-symbols": "^1.0.0",
1150 | "object-keys": "^1.0.11"
1151 | }
1152 | },
1153 | "object.entries": {
1154 | "version": "1.1.1",
1155 | "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.1.tgz",
1156 | "integrity": "sha512-ilqR7BgdyZetJutmDPfXCDffGa0/Yzl2ivVNpbx/g4UeWrCdRnFDUBrKJGLhGieRHDATnyZXWBeCb29k9CJysQ==",
1157 | "dev": true,
1158 | "requires": {
1159 | "define-properties": "^1.1.3",
1160 | "es-abstract": "^1.17.0-next.1",
1161 | "function-bind": "^1.1.1",
1162 | "has": "^1.0.3"
1163 | }
1164 | },
1165 | "object.fromentries": {
1166 | "version": "2.0.2",
1167 | "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.2.tgz",
1168 | "integrity": "sha512-r3ZiBH7MQppDJVLx6fhD618GKNG40CZYH9wgwdhKxBDDbQgjeWGGd4AtkZad84d291YxvWe7bJGuE65Anh0dxQ==",
1169 | "dev": true,
1170 | "requires": {
1171 | "define-properties": "^1.1.3",
1172 | "es-abstract": "^1.17.0-next.1",
1173 | "function-bind": "^1.1.1",
1174 | "has": "^1.0.3"
1175 | }
1176 | },
1177 | "object.values": {
1178 | "version": "1.1.1",
1179 | "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.1.tgz",
1180 | "integrity": "sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA==",
1181 | "dev": true,
1182 | "requires": {
1183 | "define-properties": "^1.1.3",
1184 | "es-abstract": "^1.17.0-next.1",
1185 | "function-bind": "^1.1.1",
1186 | "has": "^1.0.3"
1187 | }
1188 | },
1189 | "once": {
1190 | "version": "1.4.0",
1191 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
1192 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
1193 | "dev": true,
1194 | "requires": {
1195 | "wrappy": "1"
1196 | }
1197 | },
1198 | "onetime": {
1199 | "version": "5.1.0",
1200 | "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz",
1201 | "integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==",
1202 | "dev": true,
1203 | "requires": {
1204 | "mimic-fn": "^2.1.0"
1205 | }
1206 | },
1207 | "optionator": {
1208 | "version": "0.8.3",
1209 | "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz",
1210 | "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==",
1211 | "dev": true,
1212 | "requires": {
1213 | "deep-is": "~0.1.3",
1214 | "fast-levenshtein": "~2.0.6",
1215 | "levn": "~0.3.0",
1216 | "prelude-ls": "~1.1.2",
1217 | "type-check": "~0.3.2",
1218 | "word-wrap": "~1.2.3"
1219 | }
1220 | },
1221 | "os-tmpdir": {
1222 | "version": "1.0.2",
1223 | "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
1224 | "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
1225 | "dev": true
1226 | },
1227 | "parent-module": {
1228 | "version": "1.0.1",
1229 | "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
1230 | "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
1231 | "requires": {
1232 | "callsites": "^3.0.0"
1233 | }
1234 | },
1235 | "parse-json": {
1236 | "version": "5.0.0",
1237 | "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.0.0.tgz",
1238 | "integrity": "sha512-OOY5b7PAEFV0E2Fir1KOkxchnZNCdowAJgQ5NuxjpBKTRP3pQhwkrkxqQjeoKJ+fO7bCpmIZaogI4eZGDMEGOw==",
1239 | "requires": {
1240 | "@babel/code-frame": "^7.0.0",
1241 | "error-ex": "^1.3.1",
1242 | "json-parse-better-errors": "^1.0.1",
1243 | "lines-and-columns": "^1.1.6"
1244 | }
1245 | },
1246 | "path-is-absolute": {
1247 | "version": "1.0.1",
1248 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
1249 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
1250 | "dev": true
1251 | },
1252 | "path-key": {
1253 | "version": "2.0.1",
1254 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
1255 | "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
1256 | "dev": true
1257 | },
1258 | "path-parse": {
1259 | "version": "1.0.6",
1260 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
1261 | "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw=="
1262 | },
1263 | "path-type": {
1264 | "version": "4.0.0",
1265 | "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
1266 | "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw=="
1267 | },
1268 | "prelude-ls": {
1269 | "version": "1.1.2",
1270 | "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
1271 | "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
1272 | "dev": true
1273 | },
1274 | "progress": {
1275 | "version": "2.0.3",
1276 | "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
1277 | "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
1278 | "dev": true
1279 | },
1280 | "prop-types": {
1281 | "version": "15.7.2",
1282 | "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz",
1283 | "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==",
1284 | "requires": {
1285 | "loose-envify": "^1.4.0",
1286 | "object-assign": "^4.1.1",
1287 | "react-is": "^16.8.1"
1288 | }
1289 | },
1290 | "punycode": {
1291 | "version": "2.1.1",
1292 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
1293 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
1294 | "dev": true
1295 | },
1296 | "react": {
1297 | "version": "16.12.0",
1298 | "resolved": "https://registry.npmjs.org/react/-/react-16.12.0.tgz",
1299 | "integrity": "sha512-fglqy3k5E+81pA8s+7K0/T3DBCF0ZDOher1elBFzF7O6arXJgzyu/FW+COxFvAWXJoJN9KIZbT2LXlukwphYTA==",
1300 | "requires": {
1301 | "loose-envify": "^1.1.0",
1302 | "object-assign": "^4.1.1",
1303 | "prop-types": "^15.6.2"
1304 | }
1305 | },
1306 | "react-dom": {
1307 | "version": "16.12.0",
1308 | "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.12.0.tgz",
1309 | "integrity": "sha512-LMxFfAGrcS3kETtQaCkTKjMiifahaMySFDn71fZUNpPHZQEzmk/GiAeIT8JSOrHB23fnuCOMruL2a8NYlw+8Gw==",
1310 | "requires": {
1311 | "loose-envify": "^1.1.0",
1312 | "object-assign": "^4.1.1",
1313 | "prop-types": "^15.6.2",
1314 | "scheduler": "^0.18.0"
1315 | }
1316 | },
1317 | "react-is": {
1318 | "version": "16.12.0",
1319 | "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.12.0.tgz",
1320 | "integrity": "sha512-rPCkf/mWBtKc97aLL9/txD8DZdemK0vkA3JMLShjlJB3Pj3s+lpf1KaBzMfQrAmhMQB0n1cU/SUGgKKBCe837Q=="
1321 | },
1322 | "react-window": {
1323 | "version": "1.8.5",
1324 | "resolved": "https://registry.npmjs.org/react-window/-/react-window-1.8.5.tgz",
1325 | "integrity": "sha512-HeTwlNa37AFa8MDZFZOKcNEkuF2YflA0hpGPiTT9vR7OawEt+GZbfM6wqkBahD3D3pUjIabQYzsnY/BSJbgq6Q==",
1326 | "requires": {
1327 | "@babel/runtime": "^7.0.0",
1328 | "memoize-one": ">=3.1.1 <6"
1329 | }
1330 | },
1331 | "regenerator-runtime": {
1332 | "version": "0.13.5",
1333 | "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz",
1334 | "integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA=="
1335 | },
1336 | "regexpp": {
1337 | "version": "2.0.1",
1338 | "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz",
1339 | "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==",
1340 | "dev": true
1341 | },
1342 | "resolve": {
1343 | "version": "1.13.1",
1344 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.13.1.tgz",
1345 | "integrity": "sha512-CxqObCX8K8YtAhOBRg+lrcdn+LK+WYOS8tSjqSFbjtrI5PnS63QPhZl4+yKfrU9tdsbMu9Anr/amegT87M9Z6w==",
1346 | "requires": {
1347 | "path-parse": "^1.0.6"
1348 | }
1349 | },
1350 | "resolve-from": {
1351 | "version": "4.0.0",
1352 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
1353 | "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g=="
1354 | },
1355 | "restore-cursor": {
1356 | "version": "3.1.0",
1357 | "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz",
1358 | "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==",
1359 | "dev": true,
1360 | "requires": {
1361 | "onetime": "^5.1.0",
1362 | "signal-exit": "^3.0.2"
1363 | }
1364 | },
1365 | "rimraf": {
1366 | "version": "2.6.3",
1367 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
1368 | "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
1369 | "dev": true,
1370 | "requires": {
1371 | "glob": "^7.1.3"
1372 | }
1373 | },
1374 | "run-async": {
1375 | "version": "2.3.0",
1376 | "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz",
1377 | "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=",
1378 | "dev": true,
1379 | "requires": {
1380 | "is-promise": "^2.1.0"
1381 | }
1382 | },
1383 | "rxjs": {
1384 | "version": "6.5.3",
1385 | "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.3.tgz",
1386 | "integrity": "sha512-wuYsAYYFdWTAnAaPoKGNhfpWwKZbJW+HgAJ+mImp+Epl7BG8oNWBCTyRM8gba9k4lk8BgWdoYm21Mo/RYhhbgA==",
1387 | "dev": true,
1388 | "requires": {
1389 | "tslib": "^1.9.0"
1390 | }
1391 | },
1392 | "safe-buffer": {
1393 | "version": "5.1.2",
1394 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
1395 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
1396 | },
1397 | "safer-buffer": {
1398 | "version": "2.1.2",
1399 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
1400 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
1401 | "dev": true
1402 | },
1403 | "scheduler": {
1404 | "version": "0.18.0",
1405 | "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.18.0.tgz",
1406 | "integrity": "sha512-agTSHR1Nbfi6ulI0kYNK0203joW2Y5W4po4l+v03tOoiJKpTBbxpNhWDvqc/4IcOw+KLmSiQLTasZ4cab2/UWQ==",
1407 | "requires": {
1408 | "loose-envify": "^1.1.0",
1409 | "object-assign": "^4.1.1"
1410 | }
1411 | },
1412 | "semver": {
1413 | "version": "6.3.0",
1414 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
1415 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
1416 | "dev": true
1417 | },
1418 | "shebang-command": {
1419 | "version": "1.2.0",
1420 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
1421 | "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
1422 | "dev": true,
1423 | "requires": {
1424 | "shebang-regex": "^1.0.0"
1425 | }
1426 | },
1427 | "shebang-regex": {
1428 | "version": "1.0.0",
1429 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
1430 | "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
1431 | "dev": true
1432 | },
1433 | "signal-exit": {
1434 | "version": "3.0.2",
1435 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
1436 | "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
1437 | "dev": true
1438 | },
1439 | "slice-ansi": {
1440 | "version": "2.1.0",
1441 | "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz",
1442 | "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==",
1443 | "dev": true,
1444 | "requires": {
1445 | "ansi-styles": "^3.2.0",
1446 | "astral-regex": "^1.0.0",
1447 | "is-fullwidth-code-point": "^2.0.0"
1448 | },
1449 | "dependencies": {
1450 | "is-fullwidth-code-point": {
1451 | "version": "2.0.0",
1452 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
1453 | "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
1454 | "dev": true
1455 | }
1456 | }
1457 | },
1458 | "source-map": {
1459 | "version": "0.5.7",
1460 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
1461 | "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
1462 | },
1463 | "sprintf-js": {
1464 | "version": "1.0.3",
1465 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
1466 | "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
1467 | "dev": true
1468 | },
1469 | "string-width": {
1470 | "version": "4.2.0",
1471 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz",
1472 | "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==",
1473 | "dev": true,
1474 | "requires": {
1475 | "emoji-regex": "^8.0.0",
1476 | "is-fullwidth-code-point": "^3.0.0",
1477 | "strip-ansi": "^6.0.0"
1478 | },
1479 | "dependencies": {
1480 | "strip-ansi": {
1481 | "version": "6.0.0",
1482 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
1483 | "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
1484 | "dev": true,
1485 | "requires": {
1486 | "ansi-regex": "^5.0.0"
1487 | }
1488 | }
1489 | }
1490 | },
1491 | "string.prototype.trimleft": {
1492 | "version": "2.1.0",
1493 | "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.0.tgz",
1494 | "integrity": "sha512-FJ6b7EgdKxxbDxc79cOlok6Afd++TTs5szo+zJTUyow3ycrRfJVE2pq3vcN53XexvKZu/DJMDfeI/qMiZTrjTw==",
1495 | "dev": true,
1496 | "requires": {
1497 | "define-properties": "^1.1.3",
1498 | "function-bind": "^1.1.1"
1499 | }
1500 | },
1501 | "string.prototype.trimright": {
1502 | "version": "2.1.0",
1503 | "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.0.tgz",
1504 | "integrity": "sha512-fXZTSV55dNBwv16uw+hh5jkghxSnc5oHq+5K/gXgizHwAvMetdAJlHqqoFC1FSDVPYWLkAKl2cxpUT41sV7nSg==",
1505 | "dev": true,
1506 | "requires": {
1507 | "define-properties": "^1.1.3",
1508 | "function-bind": "^1.1.1"
1509 | }
1510 | },
1511 | "strip-ansi": {
1512 | "version": "5.2.0",
1513 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
1514 | "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
1515 | "dev": true,
1516 | "requires": {
1517 | "ansi-regex": "^4.1.0"
1518 | },
1519 | "dependencies": {
1520 | "ansi-regex": {
1521 | "version": "4.1.0",
1522 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
1523 | "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
1524 | "dev": true
1525 | }
1526 | }
1527 | },
1528 | "strip-json-comments": {
1529 | "version": "3.0.1",
1530 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.0.1.tgz",
1531 | "integrity": "sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==",
1532 | "dev": true
1533 | },
1534 | "supports-color": {
1535 | "version": "5.5.0",
1536 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
1537 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
1538 | "requires": {
1539 | "has-flag": "^3.0.0"
1540 | }
1541 | },
1542 | "table": {
1543 | "version": "5.4.6",
1544 | "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz",
1545 | "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==",
1546 | "dev": true,
1547 | "requires": {
1548 | "ajv": "^6.10.2",
1549 | "lodash": "^4.17.14",
1550 | "slice-ansi": "^2.1.0",
1551 | "string-width": "^3.0.0"
1552 | },
1553 | "dependencies": {
1554 | "emoji-regex": {
1555 | "version": "7.0.3",
1556 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
1557 | "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==",
1558 | "dev": true
1559 | },
1560 | "is-fullwidth-code-point": {
1561 | "version": "2.0.0",
1562 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
1563 | "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
1564 | "dev": true
1565 | },
1566 | "string-width": {
1567 | "version": "3.1.0",
1568 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
1569 | "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
1570 | "dev": true,
1571 | "requires": {
1572 | "emoji-regex": "^7.0.1",
1573 | "is-fullwidth-code-point": "^2.0.0",
1574 | "strip-ansi": "^5.1.0"
1575 | }
1576 | }
1577 | }
1578 | },
1579 | "text-table": {
1580 | "version": "0.2.0",
1581 | "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
1582 | "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
1583 | "dev": true
1584 | },
1585 | "through": {
1586 | "version": "2.3.8",
1587 | "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
1588 | "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
1589 | "dev": true
1590 | },
1591 | "tmp": {
1592 | "version": "0.0.33",
1593 | "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
1594 | "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
1595 | "dev": true,
1596 | "requires": {
1597 | "os-tmpdir": "~1.0.2"
1598 | }
1599 | },
1600 | "to-fast-properties": {
1601 | "version": "2.0.0",
1602 | "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
1603 | "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4="
1604 | },
1605 | "tslib": {
1606 | "version": "1.10.0",
1607 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz",
1608 | "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==",
1609 | "dev": true
1610 | },
1611 | "type-check": {
1612 | "version": "0.3.2",
1613 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
1614 | "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
1615 | "dev": true,
1616 | "requires": {
1617 | "prelude-ls": "~1.1.2"
1618 | }
1619 | },
1620 | "type-fest": {
1621 | "version": "0.8.1",
1622 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
1623 | "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",
1624 | "dev": true
1625 | },
1626 | "uri-js": {
1627 | "version": "4.2.2",
1628 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz",
1629 | "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==",
1630 | "dev": true,
1631 | "requires": {
1632 | "punycode": "^2.1.0"
1633 | }
1634 | },
1635 | "use-subscription": {
1636 | "version": "1.4.1",
1637 | "resolved": "https://registry.npmjs.org/use-subscription/-/use-subscription-1.4.1.tgz",
1638 | "integrity": "sha512-7+IIwDG/4JICrWHL/Q/ZPK5yozEnvRm6vHImu0LKwQlmWGKeiF7mbAenLlK/cTNXrTtXHU/SFASQHzB6+oSJMQ==",
1639 | "requires": {
1640 | "object-assign": "^4.1.1"
1641 | }
1642 | },
1643 | "v8-compile-cache": {
1644 | "version": "2.1.0",
1645 | "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz",
1646 | "integrity": "sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g==",
1647 | "dev": true
1648 | },
1649 | "which": {
1650 | "version": "1.3.1",
1651 | "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
1652 | "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
1653 | "dev": true,
1654 | "requires": {
1655 | "isexe": "^2.0.0"
1656 | }
1657 | },
1658 | "word-wrap": {
1659 | "version": "1.2.3",
1660 | "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
1661 | "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
1662 | "dev": true
1663 | },
1664 | "wrappy": {
1665 | "version": "1.0.2",
1666 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
1667 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
1668 | "dev": true
1669 | },
1670 | "write": {
1671 | "version": "1.0.3",
1672 | "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz",
1673 | "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==",
1674 | "dev": true,
1675 | "requires": {
1676 | "mkdirp": "^0.5.1"
1677 | }
1678 | },
1679 | "yaml": {
1680 | "version": "1.10.0",
1681 | "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.0.tgz",
1682 | "integrity": "sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg=="
1683 | }
1684 | }
1685 | }
1686 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "@airtable/url-preview-app",
3 | "version": "1.1.7",
4 | "description": "When a user selects a record in grid view that has a supported URL, this app shows the corresponding preview.",
5 | "scripts": {
6 | "lint": "eslint frontend"
7 | },
8 | "dependencies": {
9 | "@airtable/blocks": "latest",
10 | "react": "^16.9.0",
11 | "react-dom": "^16.9.0"
12 | },
13 | "devDependencies": {
14 | "eslint": "^6.3.0",
15 | "eslint-plugin-react": "^7.14.3",
16 | "eslint-plugin-react-hooks": "^2.0.1"
17 | },
18 | "license": "MIT"
19 | }
20 |
--------------------------------------------------------------------------------