From 4b9890497ca9542bf3e0f9ea7af9ff0c3ab0e36f Mon Sep 17 00:00:00 2001 From: gagik Date: Fri, 30 Dec 2022 15:34:24 +0100 Subject: [PATCH 01/20] Refactor and cleanup for version 11. --- flipper-plugin-realm/.prettierrc | 2 +- flipper-plugin-realm/src/CommonTypes.tsx | 70 ++++----- .../src/components/CustomDropdown.tsx | 30 ++-- .../src/components/DataTabHeader.tsx | 6 +- .../src/components/DataTable.tsx | 141 +++++++++--------- .../src/components/DataVisualizerWrapper.tsx | 8 +- .../components/{Mermaid.js => Mermaid.tsx} | 24 +-- flipper-plugin-realm/src/components/Query.tsx | 2 +- .../src/components/RealmDataInspector.tsx | 47 +++--- .../src/components/SchemaSelect.tsx | 11 +- .../objectManipulation/FieldEdit.tsx | 8 +- .../objectManipulation/ObjectAdd.tsx | 18 ++- .../objectManipulation/ObjectEdit.tsx | 8 +- .../objectManipulation/PropertiesModify.tsx | 16 +- .../objectManipulation/PropertyRender.tsx | 5 +- .../objectManipulation/types/ObjectInput.tsx | 12 +- flipper-plugin-realm/src/index.tsx | 116 +++++++------- .../src/pages/DataVisualizer.tsx | 76 ++++++---- .../src/pages/SchemaGraph.tsx | 16 +- .../src/pages/SchemaVisualizer.tsx | 61 ++++---- .../src/utils/ConvertFunctions.ts | 42 +++--- flipper-plugin-realm/src/utils/Renderer.tsx | 114 ++++++++------ .../src/utils/generateMenuItems.tsx | 50 ------- .../src/utils/linkedObject.ts | 7 +- .../src/ConvertFunctions.tsx | 93 ++++++------ realm-flipper-plugin-device/src/Listener.ts | 98 ------------ .../src/PluginConnectObjects.ts | 94 ++++++++++++ .../src/RealmPlugin.tsx | 130 ++++++++-------- 28 files changed, 655 insertions(+), 650 deletions(-) rename flipper-plugin-realm/src/components/{Mermaid.js => Mermaid.tsx} (70%) delete mode 100644 flipper-plugin-realm/src/utils/generateMenuItems.tsx delete mode 100644 realm-flipper-plugin-device/src/Listener.ts create mode 100644 realm-flipper-plugin-device/src/PluginConnectObjects.ts diff --git a/flipper-plugin-realm/.prettierrc b/flipper-plugin-realm/.prettierrc index 11d9d42..72f7c03 100644 --- a/flipper-plugin-realm/.prettierrc +++ b/flipper-plugin-realm/.prettierrc @@ -1,5 +1,5 @@ { "printWidth": 80, "singleQuote": true, - "trailingComma": "es5" + "trailingComma": "all" } diff --git a/flipper-plugin-realm/src/CommonTypes.tsx b/flipper-plugin-realm/src/CommonTypes.tsx index 0e701bc..e4bf00f 100644 --- a/flipper-plugin-realm/src/CommonTypes.tsx +++ b/flipper-plugin-realm/src/CommonTypes.tsx @@ -1,11 +1,30 @@ +// A helper interface which extends Realm.Object with +// a string index signature and object key field for reference. +export interface IndexableRealmObject extends Realm.Object { + [key: string]: unknown; + // Contains the object key that was sent by the device. + _pluginObjectKey: string; +} + +// A Realm.CanonicalObjectSchema interface sorting order reference. +export interface SortedObjectSchema extends Realm.CanonicalObjectSchema { + order: string[]; +} + +export interface CanonicalObjectSchemaPropertyRow + extends Realm.CanonicalObjectSchemaProperty { + key: number; + primaryKey: boolean; +} + export type RealmPluginState = { deviceSerial: string; realms: string[]; selectedRealm: string; - objects: RealmObject[]; - schemas: SchemaObject[]; - currentSchema: SchemaObject | null; - schemaHistory: SchemaObject[]; + objects: IndexableRealmObject[]; + schemas: SortedObjectSchema[]; + currentSchema: SortedObjectSchema | null; + schemaHistory: SortedObjectSchema[]; schemaHistoryIndex: number; cursor: string | null; totalObjects: number; @@ -17,25 +36,6 @@ export type RealmPluginState = { errorMessage?: string; }; -export type RealmObject = Record - -export type SchemaObject = { - name: string; - embedded: boolean; - asymmetric: boolean; - primaryKey: string; - properties: { [key: string]: SchemaProperty }; - order: Array; -}; - -export type SchemaProperty = { - name: string; - indexed: boolean; - optional: boolean; - type: string; - mapTo: string; - objectType?: string; -}; export type Events = { getObjects: ObjectsMessage; getSchemas: SchemaMessage; @@ -47,12 +47,12 @@ export type Events = { executeQuery: QueryResult; }; export type Methods = { - executeQuery: (query: QueryObject) => Promise; + executeQuery: (query: QueryObject) => Promise; getObjects: (data: getForwardsObjectsRequest) => Promise; getSchemas: (data: RealmRequest) => Promise; getRealms: () => Promise; - addObject: (object: AddObject) => Promise; - modifyObject: (newObject: EditObject) => Promise; + addObject: (object: AddObject) => Promise; + modifyObject: (newObject: EditObject) => Promise; removeObject: (object: RemoveObject) => Promise; receivedCurrentQuery: (request: { schema: string | null; @@ -73,7 +73,7 @@ type DataDownloadRequest = { export type EditObject = { schema?: string; realm?: string; - object: RealmObject; + object: Realm.Object; propsChanged?: string[]; objectKey: string; }; @@ -81,14 +81,14 @@ export type EditObject = { export type RemoveObject = { schema?: string; realm?: string; - object: RealmObject; + object: Realm.Object; objectKey: string; }; export type AddObject = { schema?: string; realm?: string; - object: RealmObject; + object: Realm.Object; propsChanged?: string[]; }; export type RealmsMessage = { @@ -97,17 +97,17 @@ export type RealmsMessage = { total: number; }; export type ObjectsMessage = { - objects: Array; + objects: IndexableRealmObject[]; total: number; nextCursor: string; prev_cursor: { [sortingField: string]: number }; hasMore: boolean; }; export type ObjectMessage = { - object: RealmObject; + object: Realm.Object; }; export type SchemaMessage = { - schemas: Array; + schemas: Array; }; type RealmRequest = { realm: string; @@ -127,7 +127,7 @@ export type ObjectRequest = { primaryKey: string; }; export type AddLiveObjectRequest = { - newObject: RealmObject; + newObject: IndexableRealmObject; index: number; schema: string; newObjectKey: string; @@ -137,7 +137,7 @@ export type DeleteLiveObjectRequest = { schema: string; }; export type EditLiveObjectRequest = { - newObject: RealmObject; + newObject: IndexableRealmObject; index: number; schema: string; newObjectKey: string; @@ -148,5 +148,5 @@ type QueryObject = { realm: string; }; export type QueryResult = { - result: Array | string; + result: Array | string; }; diff --git a/flipper-plugin-realm/src/components/CustomDropdown.tsx b/flipper-plugin-realm/src/components/CustomDropdown.tsx index f33a4c7..60b9ad5 100644 --- a/flipper-plugin-realm/src/components/CustomDropdown.tsx +++ b/flipper-plugin-realm/src/components/CustomDropdown.tsx @@ -1,11 +1,12 @@ +/* eslint-disable react-native/no-inline-styles */ import React, { useState } from 'react'; -import { RealmObject, SchemaObject, SchemaProperty } from '../CommonTypes'; import { theme } from 'flipper-plugin'; +import { IndexableRealmObject } from '../CommonTypes'; export type DropdownPropertyType = { - record: RealmObject; - schemaProperty: SchemaProperty | null; - currentSchema: SchemaObject; + record: IndexableRealmObject | null; + schemaProperty: Realm.CanonicalObjectSchemaProperty | null; + currentSchema: Realm.ObjectSchema; visible: boolean; pointerX: number; pointerY: number; @@ -21,12 +22,13 @@ type MenuItem = { }; export type MenuItemGenerator = ( - row: RealmObject, - schemaProperty: SchemaProperty, - schema: SchemaObject + row: IndexableRealmObject, + schemaProperty: Realm.CanonicalObjectSchemaProperty, + schema: Realm.ObjectSchema, ) => Array; const listItem = (menuItem: MenuItem) => { + // eslint-disable-next-line react-hooks/rules-of-hooks const [hover, setHover] = useState(false); const handleMouseEnter = () => { @@ -54,7 +56,7 @@ const listItem = (menuItem: MenuItem) => { padding: '5px 12px', whiteSpace: 'nowrap', backgroundColor: hover ? theme.primaryColor : 'white', - zIndex: 99 + zIndex: 99, }} > {' '} @@ -72,9 +74,9 @@ export const CustomDropdown = ({ pointerX, pointerY, scrollX, - scrollY + scrollY, }: DropdownPropertyType) => { - if (visible && schemaProperty) { + if (visible && schemaProperty && record) { const menuItems = generateMenuItems(record, schemaProperty, currentSchema); return (
    {menuItems.map((menuItem) => listItem(menuItem))}
); - } else return <>; -}; \ No newline at end of file + } else { + return <>; + } +}; diff --git a/flipper-plugin-realm/src/components/DataTabHeader.tsx b/flipper-plugin-realm/src/components/DataTabHeader.tsx index b191fad..48b06e1 100644 --- a/flipper-plugin-realm/src/components/DataTabHeader.tsx +++ b/flipper-plugin-realm/src/components/DataTabHeader.tsx @@ -1,13 +1,13 @@ import { Col, Row, Typography } from 'antd'; -import { Layout, usePlugin } from 'flipper-plugin'; +import { usePlugin } from 'flipper-plugin'; import React from 'react'; import { plugin } from '..'; -import { SchemaObject } from '../CommonTypes'; +import { SortedObjectSchema } from '../CommonTypes'; import { ObjectAdd } from './objectManipulation/ObjectAdd'; import { RealmQueryInput } from './Query'; type InputType = { - currentSchema: SchemaObject; + currentSchema: SortedObjectSchema; totalObjects: number; }; diff --git a/flipper-plugin-realm/src/components/DataTable.tsx b/flipper-plugin-realm/src/components/DataTable.tsx index cd4b14c..0b874ff 100644 --- a/flipper-plugin-realm/src/components/DataTable.tsx +++ b/flipper-plugin-realm/src/components/DataTable.tsx @@ -1,16 +1,23 @@ +/* eslint-disable react-native/no-inline-styles */ import { PlusOutlined } from '@ant-design/icons'; import { Button, Table } from 'antd'; -import { SorterResult } from 'antd/lib/table/interface'; +import { + ColumnsType, + FilterValue, + Key, + SorterResult, + TablePaginationConfig, +} from 'antd/lib/table/interface'; import { Layout, Spinner, usePlugin, useValue } from 'flipper-plugin'; import React, { useEffect, useState } from 'react'; import { plugin } from '..'; -import { RealmObject, SchemaObject, SchemaProperty } from '../CommonTypes'; // import { parsePropToCell } from '../utils/Parser'; import InfiniteScroll from 'react-infinite-scroller'; import { InspectionDataType } from './RealmDataInspector'; import { renderValue } from '../utils/Renderer'; import { ColumnTitle } from './ColumnTitle'; import { MenuItemGenerator } from './CustomDropdown'; +import { IndexableRealmObject, SortedObjectSchema } from '../CommonTypes'; export type ColumnType = { optional: boolean; @@ -22,37 +29,39 @@ export type ColumnType = { type PropertyType = { columns: ColumnType[]; - objects: RealmObject[]; - schemas: SchemaObject[]; - currentSchema: SchemaObject; - sortingDirection: 'ascend' | 'descend' | null; + objects: IndexableRealmObject[]; + schemas: SortedObjectSchema[]; + currentSchema: Realm.CanonicalObjectSchema; + sortingDirection?: 'ascend' | 'descend' | null; sortingColumn: string | null; generateMenuItems?: MenuItemGenerator; style?: Record; setdropdownProp: Function; dropdownProp: Object; - scrollX: number; - scrollY: number; + scrollX?: number; + scrollY?: number; enableSort: boolean; hasMore: boolean; totalObjects?: number; - fetchMore: () => void; - setNewInspectionData: ( + fetchMore?: () => void; + setNewInspectionData?: ( inspectionData: InspectionDataType, - wipeStacks?: boolean + wipeStacks?: boolean, ) => void; - clickAction?: (object: RealmObject) => void; + clickAction?: (object: IndexableRealmObject) => void; }; type ClickableTextType = { - displayText: string; + displayText: string | number | JSX.Element; isLongString: boolean; value: Record; inspectorView: 'object' | 'property'; }; // Receives a schema and returns column objects for the table. -export const schemaObjToColumns = (schema: SchemaObject): ColumnType[] => { +export const schemaObjToColumns = ( + schema: SortedObjectSchema, +): ColumnType[] => { return schema.order.map((propertyName) => { const obj = schema.properties[propertyName]; const isPrimaryKey = obj.name === schema.primaryKey; @@ -79,10 +88,12 @@ export const DataTable = ({ setNewInspectionData, enableSort, hasMore, - totalObjects, - fetchMore, + totalObjects = 0, + // eslint-disable-next-line @typescript-eslint/no-empty-function + fetchMore = () => {}, clickAction, }: // rowSelection +// TODO: this should probably not use PropertyType as its type. PropertyType) => { const instance = usePlugin(plugin); const state = useValue(instance.state); @@ -99,20 +110,19 @@ PropertyType) => { const [rowExpansionProp, setRowExpansionProp] = useState({ expandedRowRender: () => { - return; + return <>; }, - expandedRowKeys: [], showExpandColumn: false, }); /** Hook to close the nested Table when clicked outside of it. */ useEffect(() => { const closeNestedTable = () => { - setRowExpansionProp({ ...rowExpansionProp, expandedRowKeys: [] }); + setRowExpansionProp({ ...rowExpansionProp }); }; document.body.addEventListener('click', closeNestedTable); return () => document.body.removeEventListener('click', closeNestedTable); - }, []); + }); if (!currentSchema) { return Please select schema.; @@ -134,9 +144,12 @@ PropertyType) => { color: isLongString ? undefined : '#6831c7', textDecoration: isHovering ? 'underline' : undefined, }} - onClick={() => - setNewInspectionData({ data: value, view: inspectorView }, true) - } + onClick={() => { + // TODO: this should probably be defined at all times. + if (setNewInspectionData) { + setNewInspectionData({ data: value, view: inspectorView }, true); + } + }} onMouseEnter={() => setHovering(true)} onMouseLeave={() => setHovering(false)} > @@ -156,21 +169,18 @@ PropertyType) => { }; /** Definition of antd-specific columns. This constant is passed to the antd table as a property. */ - const antdColumns = columns.map((column) => { - const property: SchemaProperty = currentSchema.properties[column.name]; + const antdColumns:ColumnsType = columns.map((column) => { + const property: Realm.CanonicalObjectSchemaProperty = + currentSchema.properties[column.name]; /* A function that is applied for every cell to specify what to render in each cell on top of the pure value specified in the 'dataSource' property of the antd table.*/ - const render = (value: unknown, row: RealmObject) => { + const render = (value: IndexableRealmObject, row: IndexableRealmObject) => { /** Apply the renderValue function on the value in the cell to create a standard cell. */ - const cellValue: string | number | JSX.Element = renderValue( - value, - property, - schemas - ); + const cellValue = renderValue(value, property, schemas); const linkedSchema = schemas.find( - (schema) => schema.name === property.objectType + (schema) => schema.name === property.objectType, ); /** Render buttons to expand the row and a clickable text if the cell contains a linked Realm object. */ @@ -190,12 +200,17 @@ PropertyType) => { icon={} onClick={(event) => { event.stopPropagation(); - expandRow(row._objectKey, linkedSchema, value as RealmObject); + expandRow( + row._pluginObjectKey, + linkedSchema, + value, + ); }} ghost /> { { property, /** The function listening for onCell events, here listening for left-clicks on the cell to render the context menu.*/ - onCell: (object: RealmObject) => { + onCell: (object: IndexableRealmObject) => { if (generateMenuItems) { return { - onContextMenu: (env: Event) => { + onContextMenu: (env: React.MouseEvent) => { env.preventDefault(); setdropdownProp({ ...dropdownProp, @@ -250,9 +265,7 @@ PropertyType) => { schemaProperty: property, currentSchema: currentSchema, visible: true, - //@ts-ignore pointerX: env.clientX - 290, - //@ts-ignore pointerY: env.clientY - 225, scrollX, scrollY, @@ -260,10 +273,11 @@ PropertyType) => { }, }; } + return {} }, /** Enabling/Disabling sorting if the property.type is a sortable type */ - sorter: enableSort && sortableTypes.has(property.type), + sorter: enableSort && sortableTypes.has(property.type), /** Defining the sorting order. */ sortOrder: @@ -274,12 +288,11 @@ PropertyType) => { /** Updating the rowExpansion property of the antd table to expand the correct row and render a nested table inside of it. */ const expandRow = ( rowToExpandKey: any, - linkedSchema: SchemaObject, - objectToRender: RealmObject + linkedSchema: SortedObjectSchema, + objectToRender: IndexableRealmObject, ) => { const newRowExpansionProp = { ...rowExpansionProp, - expandedRowKeys: [rowToExpandKey], expandedRowRender: () => { return ( { generateMenuItems={generateMenuItems} setdropdownProp={setdropdownProp} dropdownProp={dropdownProp} + enableSort={false} /> ); }, @@ -313,17 +327,22 @@ PropertyType) => { /** Handling sorting. Is called when the 'state' of the Ant D Table changes, ie. you sort on a column. */ const handleOnChange = ( pagination: TablePaginationConfig, - filters: Record, + filters: Record, sorter: SorterResult | SorterResult[], - extra: any + extra: any, ) => { if (extra.action === 'sort') { if (state.loading) { return; } - if (state.sortingColumn !== sorter.field) { + // TODO: properly handle SorterResult[] case + let sortedField = Array.isArray(sorter) ? sorter[0].field : sorter.field + + if (state.sortingColumn !== sortedField) { instance.setSortingDirection('ascend'); - instance.setSortingColumn(sorter.field); + + // TODO: using "as string" may be error-prone + instance.setSortingColumn(sortedField as string); } else { instance.toggleSortingDirection(); } @@ -355,7 +374,7 @@ PropertyType) => { }} key={0} > - + } > @@ -364,7 +383,7 @@ PropertyType) => { bordered={true} showSorterTooltip={false} dataSource={objects} - onRow={(object: RealmObject) => { + onRow={(object: IndexableRealmObject) => { if (clickAction) { return { onClick: () => { @@ -372,9 +391,10 @@ PropertyType) => { }, }; } + return {} }} rowKey={(record) => { - return record._objectKey; + return record._pluginObjectKey; }} expandable={rowExpansionProp} columns={antdColumns} @@ -401,35 +421,14 @@ const createTitle = (column: ColumnType) => { }; /** Internal component to render a nested table for exploring linked objects. */ -const NestedTable = ({ - columns, - objects, - schemas, - currentSchema, - sortingColumn, - generateMenuItems, - setdropdownProp, - dropdownProp, - hasMore, -}: PropertyType) => { +const NestedTable = (props: PropertyType) => { return (
- +
); }; diff --git a/flipper-plugin-realm/src/components/DataVisualizerWrapper.tsx b/flipper-plugin-realm/src/components/DataVisualizerWrapper.tsx index 04dda15..c48f201 100644 --- a/flipper-plugin-realm/src/components/DataVisualizerWrapper.tsx +++ b/flipper-plugin-realm/src/components/DataVisualizerWrapper.tsx @@ -1,15 +1,15 @@ import { Layout } from 'flipper-plugin'; import React from 'react'; -import { SchemaObject, RealmObject } from '../CommonTypes'; +import { IndexableRealmObject, SortedObjectSchema } from '../CommonTypes'; import DataVisualizer from '../pages/DataVisualizer'; import { DataTabHeader } from './DataTabHeader'; import SchemaSelect from './SchemaSelect'; type InputType = { - schemas: SchemaObject[]; - objects: RealmObject[]; - currentSchema: SchemaObject; + schemas: SortedObjectSchema[]; + objects: IndexableRealmObject[]; + currentSchema: SortedObjectSchema; sortingDirection: 'ascend' | 'descend' | null; sortingColumn: string | null; hasMore: boolean; diff --git a/flipper-plugin-realm/src/components/Mermaid.js b/flipper-plugin-realm/src/components/Mermaid.tsx similarity index 70% rename from flipper-plugin-realm/src/components/Mermaid.js rename to flipper-plugin-realm/src/components/Mermaid.tsx index d88ac83..d838ac8 100644 --- a/flipper-plugin-realm/src/components/Mermaid.js +++ b/flipper-plugin-realm/src/components/Mermaid.tsx @@ -1,10 +1,12 @@ -import React from 'react'; +import React, { useEffect } from 'react'; import mermaid from 'mermaid'; mermaid.initialize({ startOnLoad: true, - theme: 'default', - securityLevel: 'loose', + //@ts-expect-error Mermaid types are not currently properly exported + theme: "default", + //@ts-expect-error Mermaid types are not currently properly exported + securityLevel: "loose", themeCSS: ` g.classGroup rect { fill: #282a36; @@ -50,14 +52,14 @@ mermaid.initialize({ stroke: #f8f8f2; stroke-width: 1; }`, - fontFamily: 'Fira Code', }); -export default class Mermaid extends React.Component { - componentDidMount() { - mermaid.contentLoaded(); - } - render() { - return
{this.props.chart}
; - } +interface MermaidProps { + chart: string; +} + +export default function Mermaid({chart}:MermaidProps) { + useEffect(mermaid.contentLoaded); + + return
{chart}
; } diff --git a/flipper-plugin-realm/src/components/Query.tsx b/flipper-plugin-realm/src/components/Query.tsx index b92ce1b..b887ac3 100644 --- a/flipper-plugin-realm/src/components/Query.tsx +++ b/flipper-plugin-realm/src/components/Query.tsx @@ -6,7 +6,7 @@ import React, { useState } from 'react'; import { plugin } from '..'; type InputType = { - execute: (query: string) => undefined | 'string'; + execute: (query: string) => Promise; }; const wrapItem = (query: string, id: number) => ({ diff --git a/flipper-plugin-realm/src/components/RealmDataInspector.tsx b/flipper-plugin-realm/src/components/RealmDataInspector.tsx index 5d7d844..fa1dfa8 100644 --- a/flipper-plugin-realm/src/components/RealmDataInspector.tsx +++ b/flipper-plugin-realm/src/components/RealmDataInspector.tsx @@ -7,29 +7,38 @@ import { import { Button, Col, Layout, Radio, Row, Space, Tooltip } from 'antd'; import { DataInspector, DetailSidebar } from 'flipper-plugin'; import React, { useEffect, useState } from 'react'; -import { RealmObject, SchemaObject } from '../CommonTypes'; import { BoldSpan } from './SchemaSelect'; export type InspectionDataType = { - data: RealmObject; + data: Record; view: 'object' | 'schema' | 'property'; }; type PropertyType = { - schemas: SchemaObject[]; + schemas: Realm.CanonicalObjectSchema[]; inspectionData: InspectionDataType | undefined; setInspectionData: React.Dispatch< React.SetStateAction >; showSidebar: boolean; setShowSidebar: (value: boolean) => void; - goBackStack: Array; - setGoBackStack: React.Dispatch>; - goForwardStack: Array; - setGoForwardStack: React.Dispatch>; + goBackStack: Array; + setGoBackStack: React.Dispatch>; + goForwardStack: Array; + setGoForwardStack: React.Dispatch>; setNewInspectionData: (newInspectionData: InspectionDataType) => void; }; + // Helper function to traverse through a Realm object given a path + // Can return any type that a Realm Object could contain. + function traverseThroughObject(object: Record, path: string[]) { + let traversedObject: any = object; + path.forEach( + (key) => (traversedObject = traversedObject[key]) + ); + return traversedObject as Type + } + export const RealmDataInspector = ({ schemas, inspectionData, @@ -113,13 +122,14 @@ export const RealmDataInspector = ({ + {/* @ts-expect-error See https://github.com/facebook/flipper/issues/3996 */} { // Finding out if the currently rendered value has a schema belonging to it and assigning it to linkedSchema - let linkedSchema: SchemaObject | undefined = schemas.find( + let linkedSchema: Realm.CanonicalObjectSchema | undefined = schemas.find( (schema) => schema.properties[name] && // The schema has the currently rendered property schemas.find( @@ -131,15 +141,10 @@ export const RealmDataInspector = ({ ) ); - // If the current field is named objectType find the SchemaObject corresponding to its value (if there is one) and assign it to linkedSchema. - // Assigning inspectionData to linkedSchemaName and then traverse it using path to get the linkedSchemaName. + // If the current field is named objectType find the Realm.ObjectSchema corresponding to its value (if there is one) and assign it to linkedSchema. + // Traverse the current inspection data using path to get the linkedSchemaName. if (name === 'objectType' && inspectionData.data) { - let linkedSchemaName: string | RealmObject = - inspectionData.data; - path.forEach( - //@ts-ignore - (key) => (linkedSchemaName = linkedSchemaName[key]) - ); + let linkedSchemaName = traverseThroughObject(inspectionData.data, path) linkedSchema = schemas.find( (schema) => schema.name === linkedSchemaName @@ -185,13 +190,15 @@ export const RealmDataInspector = ({ icon={} ghost onClick={(event) => { - // event.preventDefault() event.stopPropagation(); - let object = inspectionData.data; - path.forEach((key) => (object = object[key])); + if (!linkedSchema) { + return; + } + + let traversedObject = traverseThroughObject(inspectionData.data, path) setNewInspectionData({ data: { - [linkedSchema.name]: object, + [linkedSchema.name]: traversedObject, }, view: 'object', }); diff --git a/flipper-plugin-realm/src/components/SchemaSelect.tsx b/flipper-plugin-realm/src/components/SchemaSelect.tsx index 761cbe3..78d4a58 100644 --- a/flipper-plugin-realm/src/components/SchemaSelect.tsx +++ b/flipper-plugin-realm/src/components/SchemaSelect.tsx @@ -1,7 +1,6 @@ import { Button, Select } from 'antd'; import { styled, Toolbar, usePlugin, useValue } from 'flipper-plugin'; import React from 'react'; -import { SchemaObject } from '../CommonTypes'; import { plugin } from '../index'; import SchemaHistoryActions from './SchemaHistoryActions'; @@ -14,7 +13,7 @@ export const BoldSpan = styled.span({ textTransform: 'uppercase', }); type InputType = { - schemas: SchemaObject[]; + schemas: Realm.CanonicalObjectSchema[]; } const SchemaSelect = ({ @@ -24,17 +23,17 @@ const SchemaSelect = ({ const state = useValue(instance.state); const onSchemaSelected = (selected: string) => { - let selectedSchemaObject: SchemaObject | null = null; + let selectedObjectSchema: Realm.CanonicalObjectSchema | null = null; schemas.forEach((schema) => { if (schema.name === selected) { - selectedSchemaObject = schema; + selectedObjectSchema = schema; return; } }); - if (!selectedSchemaObject) { + if (!selectedObjectSchema) { return; } - instance.setSelectedSchema(selectedSchemaObject); + instance.setSelectedSchema(selectedObjectSchema); instance.getObjects(); }; diff --git a/flipper-plugin-realm/src/components/objectManipulation/FieldEdit.tsx b/flipper-plugin-realm/src/components/objectManipulation/FieldEdit.tsx index df1698a..da82d21 100644 --- a/flipper-plugin-realm/src/components/objectManipulation/FieldEdit.tsx +++ b/flipper-plugin-realm/src/components/objectManipulation/FieldEdit.tsx @@ -1,11 +1,11 @@ import React from 'react'; -import { RealmObject, SchemaObject } from '../../CommonTypes'; +import { IndexableRealmObject, SortedObjectSchema } from '../../CommonTypes'; import { ObjectEdit } from './ObjectEdit'; type InputType = { - schema: SchemaObject; + schema: SortedObjectSchema; fieldName: string; - value: RealmObject; + value: IndexableRealmObject; setVisible: (value: boolean) => void; visible: boolean; }; @@ -17,7 +17,7 @@ export const FieldEdit = ({ setVisible, visible, }: InputType) => { - const mockSchema: SchemaObject = { + const mockSchema: SortedObjectSchema = { name: fieldName, embedded: false, asymmetric: false, diff --git a/flipper-plugin-realm/src/components/objectManipulation/ObjectAdd.tsx b/flipper-plugin-realm/src/components/objectManipulation/ObjectAdd.tsx index b3813de..59d01d4 100644 --- a/flipper-plugin-realm/src/components/objectManipulation/ObjectAdd.tsx +++ b/flipper-plugin-realm/src/components/objectManipulation/ObjectAdd.tsx @@ -1,39 +1,43 @@ import { Modal, Radio } from 'antd'; import { useState } from 'react'; -import { RealmObject, SchemaObject } from '../../CommonTypes'; import { PlusOutlined } from '@ant-design/icons'; import { Layout, usePlugin } from 'flipper-plugin'; import React from 'react'; import { plugin } from '../..'; import { PropertiesModify } from './PropertiesModify'; +import { IndexableRealmObject, SortedObjectSchema } from '../../CommonTypes'; type PropertyType = { - schema: SchemaObject; + schema: SortedObjectSchema; }; export const ObjectAdd = ({ schema }: PropertyType) => { const { addObject } = usePlugin(plugin); - const [values, setValues] = useState({}); + const [values, setValues] = useState(null); const [visible, setVisible] = useState(false); const showModal = () => { - setValues({}); + setValues(null); setVisible(true); }; const hideModal = () => { - setValues({}); + setValues(null); setVisible(false); }; const onOk = () => { + if (!values) { + // TODO: handle this case better. + return; + } addObject(values); hideModal(); }; - if (!schema) { + if (!schema || !values) { return <>; } @@ -55,7 +59,7 @@ export const ObjectAdd = ({ schema }: PropertyType) => { cancelText="Cancel" destroyOnClose > - + ); diff --git a/flipper-plugin-realm/src/components/objectManipulation/ObjectEdit.tsx b/flipper-plugin-realm/src/components/objectManipulation/ObjectEdit.tsx index 69619bf..ff5e5a1 100644 --- a/flipper-plugin-realm/src/components/objectManipulation/ObjectEdit.tsx +++ b/flipper-plugin-realm/src/components/objectManipulation/ObjectEdit.tsx @@ -2,12 +2,12 @@ import { Modal } from 'antd'; import React, { useState } from 'react'; import { PropertiesModify } from './PropertiesModify'; import { usePlugin } from 'flipper-plugin'; -import { RealmObject, SchemaObject } from '../../CommonTypes'; import { plugin } from '../..'; +import { IndexableRealmObject, SortedObjectSchema } from '../../CommonTypes'; type InputType = { - schema: SchemaObject; - initialObject: RealmObject; + schema: SortedObjectSchema; + initialObject: IndexableRealmObject; setVisible: (value: boolean) => void; visible: boolean; }; @@ -44,7 +44,7 @@ export const ObjectEdit = ({ value={value} setValue={setValue} setPropsChanges={setPropsChanges} - > + /> ); }; diff --git a/flipper-plugin-realm/src/components/objectManipulation/PropertiesModify.tsx b/flipper-plugin-realm/src/components/objectManipulation/PropertiesModify.tsx index f18bba3..4545759 100644 --- a/flipper-plugin-realm/src/components/objectManipulation/PropertiesModify.tsx +++ b/flipper-plugin-realm/src/components/objectManipulation/PropertiesModify.tsx @@ -1,13 +1,13 @@ import { Col, Row } from 'antd'; import React from 'react'; -import { RealmObject, SchemaObject } from '../../CommonTypes'; +import { IndexableRealmObject, SortedObjectSchema } from '../../CommonTypes'; import { PropertyRender } from './PropertyRender'; import { getDefault } from './types/TypeInput'; type InputType = { - schema: SchemaObject; - value: RealmObject; - setValue: (v: RealmObject) => void; + schema: SortedObjectSchema; + value: IndexableRealmObject; + setValue: (v: IndexableRealmObject) => void; setPropsChanges?: React.Dispatch>>; }; @@ -28,10 +28,10 @@ export const PropertiesModify = ({ schema, value, setValue, setPropsChanges }: I return old.add(propertyName); }) } - setValue({ - ...value, - [propertyName]: val, - }) + + // TODO: check whether this works as intended. + value[propertyName] = val; + setValue(value); }; return ( diff --git a/flipper-plugin-realm/src/components/objectManipulation/PropertyRender.tsx b/flipper-plugin-realm/src/components/objectManipulation/PropertyRender.tsx index 85de748..4ab221e 100644 --- a/flipper-plugin-realm/src/components/objectManipulation/PropertyRender.tsx +++ b/flipper-plugin-realm/src/components/objectManipulation/PropertyRender.tsx @@ -1,16 +1,15 @@ import { Col, Form, Row, Tag } from 'antd'; import React from 'react'; -import { SchemaProperty } from '../../CommonTypes'; import { TypeInput } from './types/TypeInput'; type PropertyType = { initialValue: unknown; - property: SchemaProperty; + property: Realm.CanonicalObjectSchemaProperty; isPrimary: boolean; set: (value: unknown) => void; }; -export const typeToString = (property: SchemaProperty): string => { +export const typeToString = (property: Realm.CanonicalObjectSchemaProperty): string => { let title = ''; switch (property.type) { diff --git a/flipper-plugin-realm/src/components/objectManipulation/types/ObjectInput.tsx b/flipper-plugin-realm/src/components/objectManipulation/types/ObjectInput.tsx index 921e946..96d3cb2 100644 --- a/flipper-plugin-realm/src/components/objectManipulation/types/ObjectInput.tsx +++ b/flipper-plugin-realm/src/components/objectManipulation/types/ObjectInput.tsx @@ -3,7 +3,7 @@ import { Button, Col, Modal, Row, Tag, Typography } from 'antd'; import { Layout, usePlugin, useValue } from 'flipper-plugin'; import React, { useState } from 'react'; import { plugin } from '../../..'; -import { ObjectsMessage, RealmObject } from '../../../CommonTypes'; +import { IndexableRealmObject, ObjectsMessage } from '../../../CommonTypes'; import DataVisualizer from '../../../pages/DataVisualizer'; import { TypeInputProps } from './TypeInput'; @@ -18,12 +18,12 @@ export const ObjectInput = ({ instance.state ); - const [value, setValue] = useState(defaultValue as RealmObject); + const [value, setValue] = useState(defaultValue as IndexableRealmObject); const [chosen, setChosen] = useState(!!value); const [visible, setVisible] = useState(false); - const [objects, setObjects] = useState([]); + const [objects, setObjects] = useState([]); const [hasMore, setHasMore] = useState(false); - const [cursor, setCursor] = useState(null); + const [cursor, setCursor] = useState(null); const [totalObjects, setTotalObjects] = useState(0); const targetSchema = schemas.find( @@ -41,7 +41,7 @@ export const ObjectInput = ({ content = `${targetSchema.primaryKey}: ${val}`; } else { - const val = value._objectKey; + const val = value._pluginObjectKey; content = `_objectKey: ${val}`; } @@ -76,7 +76,7 @@ export const ObjectInput = ({ setObjects([]); setCursor(null); }; - const onChosen = (object: RealmObject) => { + const onChosen = (object: IndexableRealmObject) => { if (!object) { return; } diff --git a/flipper-plugin-realm/src/index.tsx b/flipper-plugin-realm/src/index.tsx index 8242c36..3d8fed8 100644 --- a/flipper-plugin-realm/src/index.tsx +++ b/flipper-plugin-realm/src/index.tsx @@ -1,17 +1,19 @@ import { createState, PluginClient, usePlugin, useValue } from 'flipper-plugin'; import React, { useState } from 'react'; +import Realm from 'realm'; import { AddLiveObjectRequest, DeleteLiveObjectRequest, EditLiveObjectRequest, Events, - Methods, ObjectsMessage, - RealmObject, + IndexableRealmObject, + Methods, + ObjectsMessage, RealmPluginState, RealmsMessage, SchemaMessage, - SchemaObject + SortedObjectSchema, } from './CommonTypes'; import { CommonHeader } from './components/common/CommonHeader'; import { DataVisualizerWrapper } from './components/DataVisualizerWrapper'; @@ -52,13 +54,13 @@ export function plugin(client: PluginClient) { }); }); - const sortSchemaProperties = (schema: SchemaObject) => { + const sortSchemaProperties = (schema: Realm.CanonicalObjectSchema) => { const sortedPropKeys = Object.keys(schema.properties).sort(function (a, b) { return a.toLowerCase().localeCompare(b.toLowerCase()); }); const primKeyIndex = sortedPropKeys.findIndex( - (key) => schema.primaryKey === key + (key) => schema.primaryKey === key, ); if (primKeyIndex >= 0) { const primKey = sortedPropKeys[primKeyIndex]; @@ -66,7 +68,7 @@ export function plugin(client: PluginClient) { sortedPropKeys.splice(0, 0, primKey); } - const newSchemaObj: SchemaObject = { + const newSchemaObj: SortedObjectSchema = { ...schema, order: sortedPropKeys, }; @@ -81,24 +83,21 @@ export function plugin(client: PluginClient) { client.onMessage('liveObjectAdded', (data: AddLiveObjectRequest) => { const state = pluginState.get(); - const { index, schema, newObject, newObjectKey } = data; - if (schema != state.currentSchema?.name) { + const { index, schema, newObject } = data; + if (schema !== state.currentSchema?.name) { return; } - if (index > state.objects.length) { - pluginState.set({ - ...state, - totalObjects: state.totalObjects + 1, - }); + + // Object already inserted + if (index < state.objects.length && state.objects[index]._pluginObjectKey == newObject._pluginObjectKey) { return; } const clone = structuredClone(newObject); - clone._objectKey = newObjectKey; const copyOfObjects = state.objects; const addedObject = convertObjects( [clone], state.currentSchema, - downloadData + downloadData, )[0]; copyOfObjects.splice(index, 0, addedObject); const newLastObject = copyOfObjects[copyOfObjects.length - 1]; @@ -106,57 +105,58 @@ export function plugin(client: PluginClient) { ...state, objects: [...copyOfObjects], totalObjects: state.totalObjects + 1, - cursor: newLastObject._objectKey as string, + cursor: newLastObject._pluginObjectKey, }); }); client.onMessage('liveObjectDeleted', (data: DeleteLiveObjectRequest) => { const state = pluginState.get(); const { index, schema } = data; - if (schema != state.currentSchema?.name) { + if (schema !== state.currentSchema?.name) { return; } + + // Object already deleted. if (index > state.objects.length) { - pluginState.set({ - ...state, - totalObjects: state.totalObjects - 1, - }); return; } - const newObjects = state.objects; - newObjects.splice(index, 1); - const newLastObject = newObjects[newObjects.length - 1]; + // const newObjects = state.objects; + state.objects.splice(index, 1); + const newLastObject = state.objects[state.objects.length - 1]; pluginState.set({ ...state, - objects: [...newObjects], + objects: state.objects, totalObjects: state.totalObjects - 1, - cursor: newLastObject ? newLastObject._objectKey as string: null, + cursor: newLastObject ? newLastObject._pluginObjectKey : null, }); }); client.onMessage('liveObjectEdited', (data: EditLiveObjectRequest) => { const state = pluginState.get(); - const { index, schema, newObject, newObjectKey } = data; - if (schema != state.currentSchema?.name) { + const { index, schema, newObject } = data; + if (schema !== state.currentSchema?.name) { return; } if (index > state.objects.length) { return; } + // Edited object not at index. + if (state.objects[index]._pluginObjectKey != data.newObject._pluginObjectKey) { + return; + } const clone = structuredClone(newObject); - clone._objectKey = newObjectKey; const copyOfObjects = state.objects; const addedObject = convertObjects( [clone], state.currentSchema, - downloadData + downloadData, )[0]; copyOfObjects.splice(index, 1, addedObject); const newLastObject = copyOfObjects[copyOfObjects.length - 1]; pluginState.set({ ...state, objects: [...copyOfObjects], - cursor: newLastObject._objectKey as string, + cursor: newLastObject._pluginObjectKey, }); }); @@ -182,7 +182,7 @@ export function plugin(client: PluginClient) { const requestObjects = ( schema?: string | null, realm?: string | null, - toRestore?: RealmObject[], + toRestore?: Realm.Object[], cursor?: string | null, query?: string, ): Promise => { @@ -203,8 +203,8 @@ export function plugin(client: PluginClient) { const getObjects = ( schema?: string | null, realm?: string | null, - toRestore?: RealmObject[], - cursor?: string | null + toRestore?: Realm.Object[], + cursor?: string | null, ) => { const state = pluginState.get(); if (!state.currentSchema) { @@ -220,7 +220,7 @@ export function plugin(client: PluginClient) { requestObjects(schema, realm, toRestore, cursor) .then( (response: ObjectsMessage) => { - const state = pluginState.get(); + // const state = pluginState.get(); if (response.objects && !response.objects.length) { pluginState.set({ ...state, @@ -240,7 +240,7 @@ export function plugin(client: PluginClient) { const objects = convertObjects( response.objects, state.currentSchema, - downloadData + downloadData, ); pluginState.set({ ...state, @@ -259,7 +259,7 @@ export function plugin(client: PluginClient) { objects: [], loading: false, }); - } + }, ) .catch((error) => { pluginState.set({ @@ -273,7 +273,7 @@ export function plugin(client: PluginClient) { const downloadData = ( schema: string, objectKey: string, - propertyName: string + propertyName: string, ) => { const state = pluginState.get(); return client.send('downloadData', { @@ -289,7 +289,7 @@ export function plugin(client: PluginClient) { .send('getSchemas', { realm: realm }) .then((schemaResult: SchemaMessage) => { const newSchemas = schemaResult.schemas.map((schema) => - sortSchemaProperties(schema) + sortSchemaProperties(schema), ); const state = pluginState.get(); pluginState.set({ @@ -307,7 +307,6 @@ export function plugin(client: PluginClient) { const state = pluginState.get(); addToHistory(query); // clear pagination... - const prevObjects = Array.from(state.objects); pluginState.set({ ...state, cursor: null, @@ -318,7 +317,7 @@ export function plugin(client: PluginClient) { getObjects(); }; - const addObject = (object: Record) => { + const addObject = (object: Realm.Object) => { const state = pluginState.get(); if (!state.currentSchema) { return; @@ -327,14 +326,14 @@ export function plugin(client: PluginClient) { .send('addObject', { realm: state.selectedRealm, schema: state.currentSchema?.name, - object: object, + object, }) .catch((reason) => { pluginState.set({ ...state, errorMessage: reason.error }); }); }; - const setSelectedSchema = (schema: SchemaObject) => { + const setSelectedSchema = (schema: SortedObjectSchema) => { const state = pluginState.get(); // target schema is already selected @@ -363,7 +362,7 @@ export function plugin(client: PluginClient) { }); }; - const goBackSchemaHistory = (schema: SchemaObject) => { + const goBackSchemaHistory = (schema: SortedObjectSchema) => { const state = pluginState.get(); pluginState.set({ ...state, @@ -375,7 +374,7 @@ export function plugin(client: PluginClient) { }); }; - const goForwardSchemaHistory = (schema: SchemaObject) => { + const goForwardSchemaHistory = (schema: SortedObjectSchema) => { const state = pluginState.get(); pluginState.set({ ...state, @@ -401,22 +400,25 @@ export function plugin(client: PluginClient) { const state = pluginState.get(); pluginState.set({ ...state, - deviceSerial: client.device.description.serial, + deviceSerial: client.device.serial, }); getRealms(); }); - const modifyObject = (newObject: RealmObject, propsChanged: Set) => { + const modifyObject = ( + newObject: IndexableRealmObject, + propsChanged: Set, + ) => { const state = pluginState.get(); client .send('modifyObject', { realm: state.selectedRealm, schema: state.currentSchema?.name, object: newObject, - objectKey: newObject._objectKey, + objectKey: newObject._pluginObjectKey, propsChanged: Array.from(propsChanged.values()), }) - .catch((e) => { + .catch((e: Error) => { pluginState.set({ ...state, errorMessage: e.message, @@ -424,7 +426,7 @@ export function plugin(client: PluginClient) { }); }; - const removeObject = (object: RealmObject) => { + const removeObject = (object: IndexableRealmObject) => { const state = pluginState.get(); const schema = state.currentSchema; if (!schema) { @@ -434,7 +436,7 @@ export function plugin(client: PluginClient) { realm: state.selectedRealm, schema: schema.name, object: object, - objectKey: object._objectKey, + objectKey: object._pluginObjectKey, }); }; @@ -535,7 +537,7 @@ export function Component() { } = useValue(state); const [viewMode, setViewMode] = useState<'data' | 'schemas' | 'schemaGraph'>( - 'data' + 'data', ); return ( @@ -560,18 +562,12 @@ export function Component() { {viewMode === 'schemas' ? ( <> - + ) : null} {/* {viewMode === 'RQL' ? <> : null} */} {viewMode === 'schemaGraph' ? ( - + ) : null} ); diff --git a/flipper-plugin-realm/src/pages/DataVisualizer.tsx b/flipper-plugin-realm/src/pages/DataVisualizer.tsx index bcd7f19..249c290 100644 --- a/flipper-plugin-realm/src/pages/DataVisualizer.tsx +++ b/flipper-plugin-realm/src/pages/DataVisualizer.tsx @@ -1,7 +1,9 @@ +/* eslint-disable react-native/no-inline-styles */ import { usePlugin } from 'flipper-plugin'; import React, { useEffect, useRef, useState } from 'react'; +import { CanonicalObjectSchemaProperty } from 'realm'; import { plugin } from '..'; -import { RealmObject, SchemaObject, SchemaProperty } from '../CommonTypes'; +import { IndexableRealmObject, SortedObjectSchema } from '../CommonTypes'; import { CustomDropdown, DropdownPropertyType, @@ -16,15 +18,15 @@ import { } from '../components/RealmDataInspector'; type PropertyType = { - objects: Array; - schemas: Array; - currentSchema: SchemaObject; + objects: Array; + schemas: Array; + currentSchema: SortedObjectSchema; sortingDirection: 'ascend' | 'descend' | null; sortingColumn: string | null; hasMore: boolean; totalObjects?: number; enableSort: boolean; - clickAction?: (object: RealmObject) => void; + clickAction?: (object: IndexableRealmObject) => void; fetchMore: () => void; handleDataInspector?: () => void; }; @@ -45,12 +47,12 @@ const DataVisualizer = ({ const [inspectionData, setInspectionData] = useState(); const [showSidebar, setShowSidebar] = useState(false); const [goBackStack, setGoBackStack] = useState>([]); - const [goForwardStack, setGoForwardStack] = useState>([]); + const [goForwardStack, setGoForwardStack] = useState>([]); /** Hook to open/close the editing dialog and set its properties. */ const [editingObject, setEditingObject] = useState<{ editing: boolean; - object?: RealmObject; + object?: IndexableRealmObject; // schemaProperty?: SchemaProperty; type?: 'field' | 'object'; fieldName?: string; @@ -65,10 +67,13 @@ const DataVisualizer = ({ const scrollY = useRef(0); /** Functions for deleting and editing rows/objects */ - const deleteRow = (row: RealmObject) => { + const deleteRow = (row: IndexableRealmObject) => { removeObject(row); }; - const editField = (row: RealmObject, schemaProperty: SchemaProperty) => { + const editField = ( + row: IndexableRealmObject, + schemaProperty: CanonicalObjectSchemaProperty, + ) => { setEditingObject({ editing: true, object: row, @@ -76,7 +81,7 @@ const DataVisualizer = ({ fieldName: schemaProperty.name, }); }; - const editObject = (row: RealmObject) => { + const editObject = (row: IndexableRealmObject) => { setEditingObject({ editing: true, object: row, @@ -86,36 +91,43 @@ const DataVisualizer = ({ /** Generate MenuItem objects for the context menu with all necessary data and functions.*/ const generateMenuItems: MenuItemGenerator = ( - row: RealmObject, - schemaProperty: SchemaProperty, - schema: SchemaObject + row: IndexableRealmObject, + schemaProperty: CanonicalObjectSchemaProperty, + schema: Realm.ObjectSchema, ) => [ { key: 1, text: 'Inspect Object', onClick: () => { - const object: RealmObject = {}; + const object: IndexableRealmObject = Object(); Object.keys(row).forEach((key) => { - object[key as keyof RealmObject] = row[key]; + object[key] = row[key]; }); - setNewInspectionData({ - data: { - [schema.name]: object, + setNewInspectionData( + { + data: { + [schema.name]: object, + }, + view: 'object', }, - view: 'object', - },true); + true, + ); }, }, { key: 2, text: 'Inspect Property', onClick: () => { - setNewInspectionData({ - data: { - [schema.name + '.' + schemaProperty.name]: row[schemaProperty.name], + setNewInspectionData( + { + data: { + [schema.name + '.' + schemaProperty.name]: + row[schemaProperty.name], + }, + view: 'property', }, - view: 'property', - },true); + true, + ); }, }, { @@ -139,7 +151,7 @@ const DataVisualizer = ({ const [dropdownProp, setdropdownProp] = useState({ generateMenuItems, currentSchema: currentSchema, - record: {}, + record: null, schemaProperty: null, visible: false, pointerX: 0, @@ -155,7 +167,7 @@ const DataVisualizer = ({ }; document.body.addEventListener('click', closeDropdown); return () => document.body.removeEventListener('click', closeDropdown); - }, []); + }); /** Handler to keep track of the current x and y position of the scrollcontainer. This is needed to render the dropdown in the correct place when scrolled. */ const handleScroll = (event: React.BaseSyntheticEvent) => { @@ -184,7 +196,7 @@ const DataVisualizer = ({
- {editingObject.editing && editingObject.type === 'object' ? ( + {editingObject.object && editingObject.editing && editingObject.type === 'object' ? ( { setEditingObject((obj) => ({ ...obj, @@ -207,7 +219,7 @@ const DataVisualizer = ({ })); }} visible={editingObject.editing} - > + /> ) : editingObject.editing && editingObject.type === 'field' && editingObject.object ? ( @@ -263,7 +275,7 @@ const DataVisualizer = ({ // update inspectionData and push object to GoBackStack function setNewInspectionData( newInspectionData: InspectionDataType, - wipeStacks?: boolean + wipeStacks?: boolean, ) { showSidebar ? null : setShowSidebar(true); if (inspectionData !== undefined && !wipeStacks) { diff --git a/flipper-plugin-realm/src/pages/SchemaGraph.tsx b/flipper-plugin-realm/src/pages/SchemaGraph.tsx index bd1eec8..e8b090f 100644 --- a/flipper-plugin-realm/src/pages/SchemaGraph.tsx +++ b/flipper-plugin-realm/src/pages/SchemaGraph.tsx @@ -1,7 +1,6 @@ import { Layout } from 'flipper-plugin'; import React from 'react'; -import Mermaid from '../components/Mermaid.js'; -import { SchemaObject, SchemaProperty } from '../CommonTypes'; +import Mermaid from '../components/Mermaid'; // based on https://github.com/realm/realm-js/blob/master/packages/realm-tools/src/realm-schema.ts @@ -11,12 +10,11 @@ type Relationship = { }; type InputType = { - schemas: SchemaObject[]; + schemas: Realm.ObjectSchema[]; selectedRealm: string; }; - -const calculateMermaid = (schemas: SchemaObject[]): string => { +const calculateMermaid = (schemas: Realm.ObjectSchema[]): string => { let str = ''; function writer(line: string) { str += line + '\n'; @@ -43,7 +41,7 @@ const calculateMermaid = (schemas: SchemaObject[]): string => { const name = objectSchema.name; writer(`class ${name} {`); Object.keys(objectSchema.properties).forEach((propertyName) => { - const prop = objectSchema.properties[propertyName] as SchemaProperty; + const prop = objectSchema.properties[propertyName] as Realm.CanonicalObjectSchemaProperty; if (collectionTypes.includes(prop.type) || prop.type === 'object') { const objectType = prop.objectType ?? '__unknown__'; if (!primitiveTypes.includes(objectType)) { @@ -69,10 +67,10 @@ const calculateMermaid = (schemas: SchemaObject[]): string => { // let fd = fs.openSync(args.outputFileName, "w"); export const SchemaGraph = ({ schemas }: InputType) => { const str = calculateMermaid(schemas); - + return ( - + ); -}; \ No newline at end of file +}; diff --git a/flipper-plugin-realm/src/pages/SchemaVisualizer.tsx b/flipper-plugin-realm/src/pages/SchemaVisualizer.tsx index 3173517..ce01e20 100644 --- a/flipper-plugin-realm/src/pages/SchemaVisualizer.tsx +++ b/flipper-plugin-realm/src/pages/SchemaVisualizer.tsx @@ -2,19 +2,19 @@ import { message, Table, Typography } from 'antd'; import { Layout, useMemoize, usePlugin } from 'flipper-plugin'; import React from 'react'; import { plugin } from '../index'; -import { SchemaProperty, SchemaObject } from '../CommonTypes'; import { isPropertyLinked } from '../utils/linkedObject'; import BooleanValue from '../components/BooleanValue'; +import { + CanonicalObjectSchemaPropertyRow, + SortedObjectSchema, +} from '../CommonTypes'; const { Text } = Typography; const { Link } = Typography; -const createRows = ( - order: string[], - properties: { [key: string]: SchemaProperty }, - primaryKey: string -) => { - const newRows: Record[] = []; +const createRows = (currentSchema: SortedObjectSchema) => { + const { order, properties, primaryKey } = currentSchema; + const newRows: CanonicalObjectSchemaPropertyRow[] = []; order.forEach((propName: string, index: number) => { const value = properties[propName]; newRows.push({ @@ -28,8 +28,8 @@ const createRows = ( }; const renderPropertyLinked = ( objectType: string, - schemas: SchemaObject[], - onSchemaSelected: (selectedSchema: SchemaObject) => void + schemas: SortedObjectSchema[], + onSchemaSelected: (selectedSchema: SortedObjectSchema) => void, ): string | JSX.Element => { const targetSchema = schemas.find((schema) => schema.name === objectType); if (!targetSchema) { @@ -43,9 +43,9 @@ const renderPropertyLinked = ( }; const renderFullType = ( - property: SchemaProperty, - schemas: SchemaObject[], - onSchemaSelected: (selectedSchema: SchemaObject) => void + property: Realm.CanonicalObjectSchemaProperty, + schemas: SortedObjectSchema[], + onSchemaSelected: (selectedSchema: SortedObjectSchema) => void, ): string | JSX.Element => { let title; @@ -59,7 +59,7 @@ const renderFullType = ( {renderPropertyLinked( property.objectType as string, schemas, - onSchemaSelected + onSchemaSelected, )} ); @@ -103,8 +103,8 @@ const renderFullType = ( }; type InputType = { - schemas: Array; - currentSchema: SchemaObject | null; + schemas: Array; + currentSchema: SortedObjectSchema | null; }; const SchemaVisualizer = ({ schemas, currentSchema }: InputType) => { @@ -115,9 +115,10 @@ const SchemaVisualizer = ({ schemas, currentSchema }: InputType) => { if (!schemas || !schemas.length) { return
No schemas found
; } + // eslint-disable-next-line react-hooks/rules-of-hooks const instance = usePlugin(plugin); - const onSchemaSelected = (selectedSchema: SchemaObject) => { + const onSchemaSelected = (selectedSchema: SortedObjectSchema) => { if (currentSchema.name === selectedSchema.name) { message.info('You are already viewing this schema'); } @@ -130,7 +131,7 @@ const SchemaVisualizer = ({ schemas, currentSchema }: InputType) => { title: columnName, dataIndex: columnName, // onFilter: (value: string, record: any) => record[col].startsWith(value), - render: (cellContent: string, record: SchemaProperty) => + render: (cellContent: string, record: CanonicalObjectSchemaPropertyRow) => renderTableCells(cellContent, typeof cellContent, columnName, record), // filterSearch: true, }); @@ -143,7 +144,10 @@ const SchemaVisualizer = ({ schemas, currentSchema }: InputType) => { title: 'full type', dataIndex: 'string format', key: 'string format', - render: (cellContent: string, record: SchemaProperty) => { + render: ( + cellContent: string, + record: CanonicalObjectSchemaPropertyRow, + ) => { return renderFullType(record, schemas, onSchemaSelected); }, }, @@ -151,8 +155,9 @@ const SchemaVisualizer = ({ schemas, currentSchema }: InputType) => { ], }; + // TODO: Consider using more descriptive column names const simpleColumns = ['primaryKey', 'name', 'indexed'].map( - simpleColumnGenerator + simpleColumnGenerator, ); return [...simpleColumns, typeColumnGroup]; @@ -162,20 +167,23 @@ const SchemaVisualizer = ({ schemas, currentSchema }: InputType) => { value: unknown, type: string, column: string, - record: SchemaProperty + record: Realm.CanonicalObjectSchemaProperty, ) => { if (column === 'objectType' && isPropertyLinked(record)) { return renderPropertyLinked( record.objectType as string, schemas, - onSchemaSelected + onSchemaSelected, ); } switch (type) { case 'boolean': return ( - + ); case 'string': return {value as string}; @@ -184,7 +192,6 @@ const SchemaVisualizer = ({ schemas, currentSchema }: InputType) => { } }; - const { order, properties, primaryKey } = currentSchema; const columns = [ 'primaryKey', 'name', @@ -194,12 +201,10 @@ const SchemaVisualizer = ({ schemas, currentSchema }: InputType) => { 'optional', 'objectType', ]; - const columnObjs = useMemoize( - (columns: string[]) => createColumnConfig(), - [columns] - ); + // eslint-disable-next-line react-hooks/rules-of-hooks + const columnObjs = useMemoize((_) => createColumnConfig(), [columns]); - const rows = createRows(order, properties, primaryKey); + const rows = createRows(currentSchema); return ( diff --git a/flipper-plugin-realm/src/utils/ConvertFunctions.ts b/flipper-plugin-realm/src/utils/ConvertFunctions.ts index 4d04a0b..b8a0771 100644 --- a/flipper-plugin-realm/src/utils/ConvertFunctions.ts +++ b/flipper-plugin-realm/src/utils/ConvertFunctions.ts @@ -1,25 +1,29 @@ -import { RealmObject, SchemaObject } from '../CommonTypes'; +// type PropertyDescription -// type PropertyDescription +import { IndexableRealmObject } from '../CommonTypes'; const convertObject = ( - object: RealmObject, - schema: SchemaObject, - downloadData: (schema: string, objectKey: string, propertyName: string) => Promise, + object: IndexableRealmObject, + schema: Realm.CanonicalObjectSchema, + downloadData: ( + schema: string, + objectKey: string, + propertyName: string, + ) => Promise, ) => { const properties = schema.properties; - const newObj: RealmObject = {}; - Object.keys(object).forEach(key => { + const newObj: IndexableRealmObject = Object(); + Object.keys(object).forEach((key) => { const value = object[key]; const property = properties[key]; - if (property && property.type == 'data') { + if (property && property.type === 'data') { newObj[key] = { - length: (value as Record<"$binaryData", number>).$binaryData, - downloadData: () => downloadData(schema.name, object._objectKey as string, property.name), - } - } - else { + length: (value as Record<'$binaryData', number>).$binaryData, + downloadData: () => + downloadData(schema.name, object._pluginObjectKey, property.name), + }; + } else { newObj[key] = value; } }); @@ -27,9 +31,13 @@ const convertObject = ( }; export const convertObjects = ( - objects: RealmObject[], - schema: SchemaObject, - downloadData: (schema: string, objectKey: unknown, propertyName: string) => Promise, + objects: IndexableRealmObject[], + schema: Realm.CanonicalObjectSchema, + downloadData: ( + schema: string, + objectKey: string, + propertyName: string, + ) => Promise, ) => { - return objects.map(v => convertObject(v, schema, downloadData)); + return objects.map((v) => convertObject(v, schema, downloadData)); }; diff --git a/flipper-plugin-realm/src/utils/Renderer.tsx b/flipper-plugin-realm/src/utils/Renderer.tsx index 8a10d55..aa4c2a2 100644 --- a/flipper-plugin-realm/src/utils/Renderer.tsx +++ b/flipper-plugin-realm/src/utils/Renderer.tsx @@ -1,8 +1,9 @@ -import { SchemaObject } from '../CommonTypes'; import React from 'react'; import BooleanValue from '../components/BooleanValue'; import { Button, message, Typography } from 'antd'; -import fileDownload from 'js-file-download' +import fileDownload from 'js-file-download'; +import { CanonicalObjectSchema } from 'realm'; +import { IndexableRealmObject } from '../CommonTypes'; type TypeDescription = { type: string; @@ -12,20 +13,25 @@ type TypeDescription = { export const renderValue = ( value: unknown, property: TypeDescription, - schemas: SchemaObject[], + schemas: CanonicalObjectSchema[], inner?: boolean, ) => { if (value === null) { - return inner ? "null" : null; + return inner ? 'null' : null; } if (value === undefined) { - return inner ? "undefined" : undefined; + return inner ? ( + 'undefined' + ) : ( + undefined + ); } let schema; let returnValue: JSX.Element | string | number = ''; switch (property.type) { case 'string': + //@ts-expect-error These type errors are okay because the Realm data types guarantee type safety here. returnValue = parseSimpleData(value); break; case 'double': @@ -33,32 +39,33 @@ export const renderValue = ( case 'float': case 'objectId': case 'date': - case 'uuid': //@ts-ignore --> These type errors are okay because the Realm data types guarantee type safety here. + case 'uuid': //@ts-expect-error returnValue = parseSimpleData(value); break; - case 'bool': //@ts-ignore + case 'bool': //@ts-expect-error returnValue = parseBoolean(value); break; case 'list': - case 'set': //@ts-ignore - //@ts-ignore + case 'set': //@ts-expect-error returnValue = parseSetOrList(value, property, schemas); break; - case 'data': //@ts-ignore + case 'data': //@ts-expect-error returnValue = parseData(value); break; - case 'dictionary': //@ts-ignore + case 'dictionary': //@ts-expect-error returnValue = parseDictionary(value); break; - case 'decimal128': //@ts-ignore + case 'decimal128': //@ts-expect-error returnValue = parseDecimal128(value); break; - case 'object': //@ts-ignore + case 'object': + // eslint-disable-next-line @typescript-eslint/no-shadow schema = schemas.find((schema) => schema.name === property.objectType); - returnValue = parseLinkedObject(schema as SchemaObject, value); + //@ts-expect-error + returnValue = parseLinkedObject(schema as Realm.ObjectSchema, value); break; case 'mixed': - returnValue = parseMixed(value, schemas); + returnValue = parseMixed(value); break; } @@ -69,19 +76,33 @@ function parseSimpleData(input: string | number): string | number { return input; } -function parseSetOrList(input: unknown, property: TypeDescription, schemas: SchemaObject[]): string { +function parseSetOrList( + input: Realm.Set | Realm.List, + property: TypeDescription, + schemas: Realm.CanonicalObjectSchema[], +): string { const output = input.map((value: unknown) => { // check if the container holds objects - if (schemas.some(schema => schema.name === property.objectType)) { - return renderValue(value, { - type: 'object', - objectType: property.objectType, - }, schemas, true); + if (schemas.some((schema) => schema.name === property.objectType)) { + return renderValue( + value, + { + type: 'object', + objectType: property.objectType, + }, + schemas, + true, + ); } - return renderValue(value, { - type: property.objectType as string, - }, schemas, true); + return renderValue( + value, + { + type: property.objectType as string, + }, + schemas, + true, + ); }); return '[' + output + ']'; @@ -91,7 +112,10 @@ function parseDictionary(input: Record): string { return JSON.stringify(input); } -function parseData(input) { +function parseData(input: { + downloadData: () => Promise<{ data: Uint8Array }>; + length: number; +}) { if (input.downloadData === undefined) { return data; } @@ -102,23 +126,22 @@ function parseData(input) { } */ const handleDownload = () => { - (input.downloadData() as Promise<{ - data: number[], - }>).then(res => { - fileDownload(new Uint8Array(res.data).buffer, 'data'); - }, reason => { - message.error('downloading failed', reason.message); - }); + input.downloadData().then( + (res) => { + fileDownload(new Uint8Array(res.data).buffer, 'data'); + }, + (reason) => { + message.error('downloading failed', reason.message); + }, + ); }; - return ( - - ) + return ; } function parseBoolean(input: boolean): JSX.Element { const inputAsString = input.toString(); - return + return ; } function parseDecimal128(input: { $numberDecimal: string }): string { @@ -126,12 +149,12 @@ function parseDecimal128(input: { $numberDecimal: string }): string { } function parseLinkedObject( - schema: SchemaObject, - linkedObj: Record + schema: Realm.ObjectSchema, + linkedObj: IndexableRealmObject, ): string { let returnValue = ''; - const childSchema: SchemaObject | undefined = schema; - if (childSchema.primaryKey != undefined && childSchema !== undefined) { + const childSchema: Realm.ObjectSchema | undefined = schema; + if (childSchema.primaryKey !== undefined && childSchema !== undefined) { returnValue = '[' + childSchema.name + @@ -140,17 +163,14 @@ function parseLinkedObject( childSchema.primaryKey + ': ' + linkedObj[childSchema.primaryKey]; - } - else { - returnValue = '[' + childSchema.name + ']._objectKey: ' + linkedObj._objectKey; + } else { + returnValue = + '[' + childSchema.name + ']._objectKey: ' + linkedObj._pluginObjectKey; } return returnValue; } -function parseMixed( - input: any, - schemas: SchemaObject[] -): string | JSX.Element | number { +function parseMixed(input: unknown): string | JSX.Element | number { return JSON.stringify(input); } diff --git a/flipper-plugin-realm/src/utils/generateMenuItems.tsx b/flipper-plugin-realm/src/utils/generateMenuItems.tsx deleted file mode 100644 index ec965ef..0000000 --- a/flipper-plugin-realm/src/utils/generateMenuItems.tsx +++ /dev/null @@ -1,50 +0,0 @@ -const generateMenuItems: MenuItemGenerator = ( - row: RealmObject, - schemaProperty: SchemaProperty, - schema: SchemaObject -) => [ - { - key: 1, - text: 'Inspect Object', - onClick: () => { - const object = {}; - Object.keys(row).forEach((key) => { - object[key] = row[key]; - }); - handleDataInspector({ - data: { - [schema.name]: object, - }, - view: 'object', - }); - }, - }, - { - key: 2, - text: 'Inspect Property', - onClick: () => { - handleDataInspector({ - data: { - [schema.name + '.' + schemaProperty.name]: row[schemaProperty.name], - }, - view: 'property', - }); - }, - }, - { - key: 3, - text: 'Edit Object', - onClick: () => editObject(row), - }, - { - key: 4, - text: 'Edit Property', - onClick: () => editField(row, schemaProperty), - }, - { - key: 5, - text: 'Delete Object', - onClick: () => deleteRow(row), - }, -]; - diff --git a/flipper-plugin-realm/src/utils/linkedObject.ts b/flipper-plugin-realm/src/utils/linkedObject.ts index 53ef9a7..9669344 100644 --- a/flipper-plugin-realm/src/utils/linkedObject.ts +++ b/flipper-plugin-realm/src/utils/linkedObject.ts @@ -1,6 +1,6 @@ -import { SchemaProperty } from '../CommonTypes'; +import { CanonicalObjectSchemaProperty } from 'realm'; -export const isPropertyLinked = (property: SchemaProperty) => { +export const isPropertyLinked = (property: CanonicalObjectSchemaProperty) => { const primitiveTypes = new Set([ 'bool', 'int', @@ -18,7 +18,6 @@ export const isPropertyLinked = (property: SchemaProperty) => { ]); return ( - property.objectType && - !primitiveTypes.has(property.objectType as string) + property.objectType && !primitiveTypes.has(property.objectType as string) ); }; diff --git a/realm-flipper-plugin-device/src/ConvertFunctions.tsx b/realm-flipper-plugin-device/src/ConvertFunctions.tsx index c57b0da..8d10203 100644 --- a/realm-flipper-plugin-device/src/ConvertFunctions.tsx +++ b/realm-flipper-plugin-device/src/ConvertFunctions.tsx @@ -4,31 +4,35 @@ import { CanonicalObjectSchema, CanonicalObjectSchemaProperty, Object as RealmObject, -} from "realm"; + ObjectSchema, +} from 'realm'; type PropertyDescription = { type: string; objectType?: string; }; +// TODO: this function can probably be simplified as it largely just +// serializes object.toJSON() which supports circular relationships now. const convertObjectToDesktop = ( object: RealmObject, - properties: { - [keys: string]: PropertyDescription; - } + properties: Realm.PropertiesTypes, ) => { - const obj = {}; - Object.keys(properties).forEach((key) => { + const obj = Object(); + Object.keys(properties).forEach(key => { + const jsonifiedObject = object.toJSON(); const property = properties[key] as PropertyDescription; // make a copy of the object - obj[key] = object.toJSON()[key]; + obj[key] = jsonifiedObject[key]; - if (property.type === "object" && obj[key]) { + if (property.type === 'object' && obj[key]) { + //@ts-expect-error We know the key exists const objectKey = object[key]._objectKey(); - obj[key]._objectKey = objectKey; + // Store object key as a seperate key for the plugin + obj[key]._pluginObjectKey = objectKey; } }); - const replacer = (key, value) => { + const replacer = (key: any, value: any) => { if (!key) { return value; } @@ -36,11 +40,11 @@ const convertObjectToDesktop = ( if (!property) { return value; } - if (property.type === "data") { + if (property.type === 'data') { return { $binaryData: value?.byteLength, }; - } else if (property.type === "mixed") { + } else if (property.type === 'mixed') { return value; } else { return value; @@ -55,15 +59,15 @@ const convertObjectToDesktop = ( return {}; } // save so that it's sent over -> serialization would remove a function - after._objectKey = object._objectKey(); + after._pluginObjectKey = object._objectKey(); return after; }; export const convertObjectsToDesktop = ( - objects: RealmObject[], - schema: CanonicalObjectSchema + objects: RealmObject[], + schema: ObjectSchema, ) => { - return objects.map((obj) => convertObjectToDesktop(obj, schema.properties)); + return objects.map(obj => convertObjectToDesktop(obj, schema.properties)); }; /* @@ -74,19 +78,19 @@ if that's not the case, can be changed to shallow conversion of all the properti export const convertObjectsFromDesktop = ( objects: RealmObject[], realm: Realm, - schemaName?: string + schemaName?: string, ) => { - return objects.map((obj) => convertObjectFromDesktop(obj, realm, schemaName)); + return objects.map(obj => convertObjectFromDesktop(obj, realm, schemaName)); }; // convert object from a schema to realm one const convertObjectFromDesktop = ( object: any, realm: Realm, - schemaName?: string + schemaName?: string, ) => { delete object._objectKey; if (!schemaName) { - throw new Error("Converting with missing schema name"); + throw new Error('Converting with missing schema name'); } const readObject = (objectType: string, value: any) => { if (value === null) { @@ -94,37 +98,36 @@ const convertObjectFromDesktop = ( } const objectKey = value._objectKey; if (objectKey !== undefined) { + //@ts-expect-error _objectForObjectKey is not public. return realm._objectForObjectKey(objectType, objectKey); } // have to use primary key, walkaround for #105 - const schemaObject = realm.schema.find( - (schemaObj) => schemaObj.name === objectType + const schema = realm.schema.find( + schemaObj => schemaObj.name === objectType, ) as CanonicalObjectSchema; - let primaryKey = object[schemaObject.primaryKey as string]; - if ( - schemaObject.properties[schemaObject.primaryKey as string].type === "uuid" - ) { + let primaryKey = object[schema.primaryKey as string]; + if (schema.properties[schema.primaryKey as string].type === 'uuid') { primaryKey = new BSON.UUID(primaryKey); } return realm.objectForPrimaryKey(objectType, primaryKey); }; const convertLeaf = (value: any, type: string, objectType?: string) => { - if (realm.schema.some((schemaObj) => schemaObj.name === type)) { + if (realm.schema.some(schemaObj => schemaObj.name === type)) { return readObject(type, value); } switch (type) { - case "object": + case 'object': return readObject(objectType as string, value); - case "uuid": + case 'uuid': return new BSON.UUID(value); - case "decimal128": + case 'decimal128': return new BSON.Decimal128(value); - case "objectId": + case 'objectId': return new BSON.ObjectId(value); - case "data": + case 'data': const arr = new Uint8Array(value); return arr; default: @@ -133,39 +136,39 @@ const convertObjectFromDesktop = ( }; const convertRoot = (val: any, property: CanonicalObjectSchemaProperty) => { - if (val === null) { + if (val === null || property === undefined) { return null; } switch (property.type) { - case "set": + case 'set': // due to a problem with serialization, Set is being passed over as a list - const realVal = (val as any[]).map((value) => { + const realVal = (val as unknown[]).map(value => { return convertLeaf(value, property.objectType); }); return realVal; - case "list": - return val.map((obj) => { + case 'list': + return val.map((obj: unknown) => { return convertLeaf(obj, property.objectType as string); }); - case "dictionary": - const res = {}; - Object.keys(val).forEach((key) => { + case 'dictionary': + const res: Record = {}; + Object.keys(val).forEach(key => { res[key] = convertLeaf(val[key], property.objectType as string); }); return res; - case "object": + case 'object': return readObject(property.objectType as string, val); default: return convertLeaf(val, property.type, property.objectType); } }; - const schemaObj = realm.schema.find((schema) => schema.name === schemaName); + const schemaObj = realm.schema.find(schema => schema.name === schemaName); - const obj = {}; + const obj = Object(); Object.entries(object).forEach((value: [string, unknown]) => { - const type = schemaObj?.properties[value[0]]; + const type = schemaObj.properties[value[0]]; obj[value[0]] = convertRoot(value[1], type); }); return obj; -}; \ No newline at end of file +}; diff --git a/realm-flipper-plugin-device/src/Listener.ts b/realm-flipper-plugin-device/src/Listener.ts deleted file mode 100644 index 9b1a703..0000000 --- a/realm-flipper-plugin-device/src/Listener.ts +++ /dev/null @@ -1,98 +0,0 @@ -import { Flipper } from "react-native-flipper"; -import { convertObjectsToDesktop } from "./ConvertFunctions"; - -export class Listener { - objectsCurrentlyListeningTo: Realm.Results; - schema: string; - objects: Realm.Results; - sortingColumn: string; - sortingDirection: "ascend" | "descend"; - connection: Flipper.FlipperConnection; - schemas; - constructor( - objectsCurrentlyListeningTo: Realm.Results, - schema: string, - objects: Realm.Results, - sortingColumn: string, - sortingDirection: "ascend" | "descend", - connection: Flipper.FlipperConnection, - schemas: Realm.ObjectSchema[] - ) { - this.objectsCurrentlyListeningTo = objectsCurrentlyListeningTo; - this.schema = schema; - this.objects = objects; - this.sortingColumn = sortingColumn; - this.sortingDirection = sortingDirection; - this.connection = connection; - this.schemas = schemas; - } - - removeAllListeners() { - if (this.objectsCurrentlyListeningTo.length) { - this.objectsCurrentlyListeningTo.removeAllListeners(); - } - } - - handleAddListener() { - if (this.objectsCurrentlyListeningTo.length) { - this.objectsCurrentlyListeningTo.removeAllListeners(); - } - let objectsToListenTo: Realm.Results = this.objects; - const shouldSortDescending = this.sortingDirection === "descend"; - if (this.sortingColumn) { - objectsToListenTo = this.objects.sorted( - this.sortingColumn, - shouldSortDescending - ); - } - objectsToListenTo.addListener(this.onObjectsChange); - this.objectsCurrentlyListeningTo = objectsToListenTo; - return this.objectsCurrentlyListeningTo; - } - - onObjectsChange = (objects, changes) => { - changes.deletions.forEach((index: number) => { - if (this.connection) { - this.connection.send("liveObjectDeleted", { - index: index, - schema: this.schema, - }); - this.connection.send("getCurrentQuery"); - } - }); - - changes.insertions.forEach((index: number) => { - const inserted = objects[index]; - const schema = this.schemas.find( - (schemaObj: Record) => this.schema === schemaObj.name - ); - const converted = convertObjectsToDesktop([inserted], schema)[0]; - if (this.connection) { - this.connection.send("liveObjectAdded", { - newObject: converted, - index: index, - schema: this.schema, - newObjectKey: inserted._objectKey(), - }); - this.connection.send("getCurrentQuery"); - } - }); - - changes.modifications.forEach((index: number) => { - const modified = objects[index]; - const schema = this.schemas.find( - (schemaObj) => this.schema === schemaObj.name - ); - const converted = convertObjectsToDesktop([modified], schema)[0]; - if (this.connection) { - this.connection.send("liveObjectEdited", { - newObject: converted, - index: index, - schema: this.schema, - newObjectKey: modified._objectKey(), - }); - this.connection.send("getCurrentQuery"); - } - }); - }; -} diff --git a/realm-flipper-plugin-device/src/PluginConnectObjects.ts b/realm-flipper-plugin-device/src/PluginConnectObjects.ts new file mode 100644 index 0000000..5c0d464 --- /dev/null +++ b/realm-flipper-plugin-device/src/PluginConnectObjects.ts @@ -0,0 +1,94 @@ +import {Flipper} from 'react-native-flipper'; +import {convertObjectsToDesktop} from './ConvertFunctions'; + +// Attaches a listener to the collections which sends update +// notifications to the Flipper plugin. +export class PluginConnectedObjects { + // Connected objects that the listener is attached to. + connectedObjects: Realm.Results; + schema: string; + objects: Realm.Results; + sortingColumn: string; + sortingDirection: 'ascend' | 'descend'; + connection: Flipper.FlipperConnection; + schemas; + constructor( + objects: Realm.Results, + schema: string, + sortingColumn: string, + sortingDirection: 'ascend' | 'descend', + connection: Flipper.FlipperConnection, + schemas: Realm.ObjectSchema[], + ) { + this.schema = schema; + this.objects = objects; + const shouldSortDescending = sortingDirection === 'descend'; + if (sortingColumn) { + this.connectedObjects = this.objects.sorted( + sortingColumn, + shouldSortDescending, + ); + } else { + this.connectedObjects = this.objects; + } + this.sortingColumn = sortingColumn; + this.sortingDirection = sortingDirection; + this.connection = connection; + this.schemas = schemas; + + this.connectedObjects.addListener(this.onObjectsChange); + } + + removeListener() { + this.connectedObjects.removeListener(this.onObjectsChange); + } + + onObjectsChange: Realm.CollectionChangeCallback = ( + objects, + changes, + ) => { + changes.deletions.forEach((index: number) => { + if (this.connection) { + this.connection.send('liveObjectDeleted', { + index: index, + schema: this.schema, + }); + this.connection.send('getCurrentQuery', undefined); + } + }); + + changes.insertions.forEach((index: number) => { + const inserted = objects[index]; + const schema = this.schemas.find( + (schemaObj: Realm.ObjectSchema) => this.schema === schemaObj.name, + ); + const converted = convertObjectsToDesktop([inserted], schema)[0]; + if (this.connection) { + this.connection.send('liveObjectAdded', { + newObject: converted, + index: index, + schema: this.schema, + objects: objects, + }); + this.connection.send('getCurrentQuery', undefined); + } + }); + + // TODO: should oldModifications be considered too? + changes.newModifications.forEach((index: number) => { + const modified = objects[index]; + const schema = this.schemas.find( + schemaObj => this.schema === schemaObj.name, + ); + const converted = convertObjectsToDesktop([modified], schema)[0]; + if (this.connection) { + this.connection.send('liveObjectEdited', { + newObject: converted, + index: index, + schema: this.schema, + }); + this.connection.send('getCurrentQuery', undefined); + } + }); + }; +} diff --git a/realm-flipper-plugin-device/src/RealmPlugin.tsx b/realm-flipper-plugin-device/src/RealmPlugin.tsx index 4ab31bd..cce491f 100644 --- a/realm-flipper-plugin-device/src/RealmPlugin.tsx +++ b/realm-flipper-plugin-device/src/RealmPlugin.tsx @@ -1,86 +1,82 @@ -import React, { useEffect } from "react"; -import { addPlugin, Flipper } from "react-native-flipper"; -import Realm, { CanonicalObjectSchema } from "realm"; +import React, {useEffect, useRef} from 'react'; +import {addPlugin} from 'react-native-flipper'; +import Realm, {CanonicalObjectSchema} from 'realm'; import { convertObjectsFromDesktop, convertObjectsToDesktop, -} from "./ConvertFunctions"; -import { Listener } from "./Listener"; - -type PluginConfig = { - realms: Realm[]; - connection: Flipper.FlipperConnection; -}; +} from './ConvertFunctions'; +import {PluginConnectedObjects} from './PluginConnectObjects'; type getObjectsQuery = { schema: string; realm: string; cursor: string; limit: number; - sortingDirection: "ascend" | "descend"; + sortingDirection: 'ascend' | 'descend'; sortingColumn: string; query: string; }; -const RealmPlugin = React.memo((props: { realms: Realm[] }) => { - let realmsMap = new Map(); - let listenerHandler: Listener; - const { realms } = props; +const RealmPlugin = React.memo((props: {realms: Realm[]}) => { + const realms = useRef(props.realms); + useEffect(() => { - let objectsCurrentlyListeningTo: Realm.Results = []; - realms.forEach((realm) => { + let connectedObjects: PluginConnectedObjects = null; + let realmsMap = new Map(); + + realms.current.forEach(realm => { realmsMap.set(realm.path, realm); }); addPlugin({ getId() { - return "realm"; + return 'realm'; }, onConnect(connection) { - // connection.receive - connection.send("getCurrentQuery", undefined); + connection.send('getCurrentQuery', undefined); - connection.receive("receivedCurrentQuery", (obj) => { + connection.receive('receivedCurrentQuery', obj => { const realm = realmsMap.get(obj.realm); if (!realm || !obj.schema) { return; } - listenerHandler = new Listener( - objectsCurrentlyListeningTo, - obj.schema, + if (connectedObjects != null) { + connectedObjects.removeListener(); + } + connectedObjects = new PluginConnectedObjects( realm.objects(obj.schema), + obj.schema, obj.sortingColumn, obj.sortingDirection, connection, - realm.schema + realm.schema, ); - objectsCurrentlyListeningTo = listenerHandler.handleAddListener(); }); - connection.receive("getRealms", (_, responder) => { + connection.receive('getRealms', (_, responder) => { responder.success({ realms: Array.from(realmsMap.keys()), }); }); - connection.receive("getObjects", (req: getObjectsQuery, responder) => { + connection.receive('getObjects', (req: getObjectsQuery, responder) => { const realm = realmsMap.get(req.realm); if (!realm) { - responder.error({ message: "No realm found" }); + responder.error({message: 'No realm found'}); return; } - const { schema, sortingColumn, sortingDirection, query, cursor } = - req; + const {schema, sortingColumn, sortingDirection, query, cursor} = req; let objects = realm.objects(schema); - listenerHandler = new Listener( - objectsCurrentlyListeningTo, - schema, + if (connectedObjects != null) { + connectedObjects.removeListener(); + } + connectedObjects = new PluginConnectedObjects( objects, + schema, sortingColumn, sortingDirection, connection, - realm.schema + realm.schema, ); - objectsCurrentlyListeningTo = listenerHandler.handleAddListener(); const totalObjects = objects.length; if (!totalObjects || objects.isEmpty()) { responder.success({ @@ -93,15 +89,17 @@ const RealmPlugin = React.memo((props: { realms: Realm[] }) => { } let queryCursor = null; const LIMIT = 50; - const shouldSortDescending = sortingDirection === "descend"; + const shouldSortDescending = sortingDirection === 'descend'; queryCursor = cursor ?? objects[0]._objectKey(); //If no cursor, choose first object in the collection if (sortingColumn) { objects = objects.sorted(sortingColumn, shouldSortDescending); queryCursor = cursor ?? objects[0]._objectKey(); } + + //@ts-expect-error This is not a method which is exposed publically const firstObject = realm._objectForObjectKey(schema, queryCursor); //First object to send let indexOfFirstObject = objects.findIndex( - (obj) => obj._objectKey() === firstObject._objectKey() + obj => obj._objectKey() === firstObject._objectKey(), ); if (query) { //Filtering if RQL query is provided @@ -114,16 +112,18 @@ const RealmPlugin = React.memo((props: { realms: Realm[] }) => { return; } } - objects = objects.slice( + let slicedObjects = objects.slice( //Send over list from index of first object to the limit indexOfFirstObject === 0 ? indexOfFirstObject : indexOfFirstObject + 1, - indexOfFirstObject + (LIMIT + 1) + indexOfFirstObject + (LIMIT + 1), ); const afterConversion = convertObjectsToDesktop( - objects, - realm.schema.find((schemaa) => schemaa.name === schema) + slicedObjects, + realm.schema.find( + convertedSchema => convertedSchema.name === schema, + ), ); responder.success({ objects: afterConversion, @@ -133,29 +133,30 @@ const RealmPlugin = React.memo((props: { realms: Realm[] }) => { }); }); - connection.receive("getSchemas", (obj, responder) => { + connection.receive('getSchemas', (obj, responder) => { const realm = realmsMap.get(obj.realm); if (!realm) { - responder.error({ message: "No realm found," }); + responder.error({message: 'No realm found,'}); return; } const schemas = realm.schema; - responder.success({ schemas: schemas }); + responder.success({schemas: schemas}); }); - connection.receive("downloadData", (obj, responder) => { + connection.receive('downloadData', (obj, responder) => { const realm = realmsMap.get(obj.realm); if (!realm) { - responder.error({ message: "Realm not found" }); + responder.error({message: 'Realm not found'}); return; } + //@ts-expect-error This is not a method which is exposed publically const object = realm._objectForObjectKey(obj.schema, obj.objectKey); responder.success({ data: Array.from(new Uint8Array(object[obj.propertyName])), }); }); - connection.receive("addObject", (obj, responder) => { + connection.receive('addObject', (obj, responder) => { const realm = realmsMap.get(obj.realm); if (!realm) { return; @@ -163,7 +164,7 @@ const RealmPlugin = React.memo((props: { realms: Realm[] }) => { const converted = convertObjectsFromDesktop( [obj.object], realm, - obj.schema + obj.schema, )[0]; try { realm.write(() => { @@ -177,46 +178,49 @@ const RealmPlugin = React.memo((props: { realms: Realm[] }) => { } responder.success(undefined); }); - connection.receive("modifyObject", (obj, responder) => { + connection.receive('modifyObject', (obj, responder) => { const realm = realmsMap.get(obj.realm); if (!realm) { return; } const propsChanged = obj.propsChanged; const schema = realm.schema.find( - (schemaObj) => schemaObj.name === obj.schema + schemaObj => schemaObj.name === obj.schema, ) as CanonicalObjectSchema; - const converted = convertObjectsFromDesktop( + const converted: Record = convertObjectsFromDesktop( [obj.object], realm, - obj.schema + obj.schema, )[0]; + //@ts-expect-error This is not a method which is exposed publically const realmObj = realm._objectForObjectKey( schema.name, - obj.objectKey + obj.objectKey, ); if (!realmObj) { - responder.error({ message: "Realm Object removed while editing." }); + responder.error({message: 'Realm Object removed while editing.'}); return; } realm.write(() => { - propsChanged.forEach((propName) => { + propsChanged.forEach((propName: string) => { realmObj[propName] = converted[propName]; }); }); }); - connection.receive("removeObject", (obj) => { + connection.receive('removeObject', obj => { const realm = realmsMap.get(obj.realm); if (!realm) { return; } + + //@ts-expect-error This is not a method which is exposed publically const foundObject = realm._objectForObjectKey( obj.schema, - obj.objectKey + obj.objectKey, ); realm.write(() => { realm.delete(foundObject); @@ -224,17 +228,17 @@ const RealmPlugin = React.memo((props: { realms: Realm[] }) => { }); }, onDisconnect() { - if (listenerHandler) { - listenerHandler.removeAllListeners(); + if (connectedObjects) { + connectedObjects.removeListener(); } }, }); return () => { - if (listenerHandler) { - listenerHandler.removeAllListeners(); + if (connectedObjects) { + connectedObjects.removeListener(); } }; - }); + }, []); return <>; }); From 98d8b9437415fc0533f521428b61b6682aad8399 Mon Sep 17 00:00:00 2001 From: gagik Date: Wed, 4 Jan 2023 18:57:29 +0100 Subject: [PATCH 02/20] Attempt at updating testApp --- flipper-plugin-realm/src/CommonTypes.tsx | 2 +- .../src/components/CustomDropdown.tsx | 2 - .../src/components/DataTable.tsx | 77 +- .../objectManipulation/ObjectAdd.tsx | 1 - .../objectManipulation/PropertyRender.tsx | 4 +- flipper-plugin-realm/src/index.tsx | 1 - realm-flipper-plugin-device/package-lock.json | 8 +- testApp/.bundle/config | 2 - testApp/.eslintrc.js | 12 + testApp/.flowconfig | 67 - testApp/App.tsx | 240 - testApp/Gemfile.lock | 100 - .../__tests__/{App-test.js => App-test.tsx} | 0 testApp/android/app/_BUCK | 4 +- testApp/android/app/build.gradle | 7 +- .../ReactNativeFlipper.java | 2 +- .../android/app/src/main/AndroidManifest.xml | 2 +- .../MainActivity.java | 4 +- .../MainApplication.java | 6 +- .../MainApplicationReactNativeHost.java | 8 +- .../components/MainComponentsRegistry.java | 2 +- ...ApplicationTurboModuleManagerDelegate.java | 4 +- testApp/android/app/src/main/jni/Android.mk | 2 +- ...ainApplicationTurboModuleManagerDelegate.h | 2 +- .../app/src/main/jni/MainComponentsRegistry.h | 2 +- .../app/src/main/res/values/strings.xml | 2 +- testApp/android/build.gradle | 4 - testApp/android/settings.gradle | 2 +- testApp/app.json | 4 +- testApp/app/AppNonSync.tsx | 22 + testApp/app/AppSync.tsx | 57 + testApp/app/AppWrapperNonSync.tsx | 26 + testApp/app/AppWrapperSync.tsx | 36 + testApp/app/components/AddTaskForm.tsx | 71 + testApp/app/components/IntroText.tsx | 51 + testApp/app/components/LoginScreen.tsx | 167 + testApp/app/components/TaskItem.tsx | 81 + testApp/app/components/TaskList.tsx | 44 + testApp/app/components/TaskManager.tsx | 95 + testApp/app/flipperTest/LegacyTestView.tsx | 107 + .../app/flipperTest/PluginTestAppNonSync.tsx | 34 + .../{TestData => app/flipperTest}/Schemas.tsx | 32 +- .../app/flipperTest/TaskManagerWrapper.tsx | 18 + .../testData}/createAllTypesTestData.tsx | 4 +- .../testData/createParcelTestData.tsx} | 0 testApp/app/models/Task.ts | 26 + testApp/app/models/index.ts | 6 + testApp/app/styles/button.ts | 20 + testApp/app/styles/colors.ts | 10 + testApp/app/styles/shadows.ts | 17 + testApp/babel.config.js | 4 + testApp/index.js | 13 +- .../project.pbxproj | 162 +- .../xcschemes/FlipperTester.xcscheme} | 24 +- .../contents.xcworkspacedata | 2 +- .../xcshareddata/IDEWorkspaceChecks.plist | 0 .../{realmApp => FlipperTester}/AppDelegate.h | 0 .../AppDelegate.mm | 2 +- .../AppIcon.appiconset/Contents.json | 0 .../Images.xcassets/Contents.json | 0 .../{realmApp => FlipperTester}/Info.plist | 2 +- .../LaunchScreen.storyboard | 2 +- .../ios/{realmApp => FlipperTester}/main.m | 0 .../FlipperTesterTests.m} | 4 +- .../Info.plist | 0 testApp/ios/Podfile | 24 +- testApp/ios/Podfile.lock | 541 +- testApp/metro.config.js | 12 +- testApp/package.json | 91 +- testApp/sync.config.js | 6 + testApp/tsconfig.json | 105 + testApp/yarn.lock | 8209 +++++++++++++++++ 72 files changed, 9786 insertions(+), 914 deletions(-) delete mode 100644 testApp/.bundle/config delete mode 100644 testApp/.flowconfig delete mode 100644 testApp/App.tsx delete mode 100644 testApp/Gemfile.lock rename testApp/__tests__/{App-test.js => App-test.tsx} (100%) rename testApp/android/app/src/debug/java/com/{realmapp => flippertester}/ReactNativeFlipper.java (99%) rename testApp/android/app/src/main/java/com/{realmapp => flippertester}/MainActivity.java (95%) rename testApp/android/app/src/main/java/com/{realmapp => flippertester}/MainApplication.java (94%) rename testApp/android/app/src/main/java/com/{realmapp => flippertester}/newarchitecture/MainApplicationReactNativeHost.java (94%) rename testApp/android/app/src/main/java/com/{realmapp => flippertester}/newarchitecture/components/MainComponentsRegistry.java (95%) rename testApp/android/app/src/main/java/com/{realmapp => flippertester}/newarchitecture/modules/MainApplicationTurboModuleManagerDelegate.java (94%) create mode 100644 testApp/app/AppNonSync.tsx create mode 100644 testApp/app/AppSync.tsx create mode 100644 testApp/app/AppWrapperNonSync.tsx create mode 100644 testApp/app/AppWrapperSync.tsx create mode 100644 testApp/app/components/AddTaskForm.tsx create mode 100644 testApp/app/components/IntroText.tsx create mode 100644 testApp/app/components/LoginScreen.tsx create mode 100644 testApp/app/components/TaskItem.tsx create mode 100644 testApp/app/components/TaskList.tsx create mode 100644 testApp/app/components/TaskManager.tsx create mode 100644 testApp/app/flipperTest/LegacyTestView.tsx create mode 100644 testApp/app/flipperTest/PluginTestAppNonSync.tsx rename testApp/{TestData => app/flipperTest}/Schemas.tsx (85%) create mode 100644 testApp/app/flipperTest/TaskManagerWrapper.tsx rename testApp/{TestData => app/flipperTest/testData}/createAllTypesTestData.tsx (98%) rename testApp/{TestData/parcelExample.tsx => app/flipperTest/testData/createParcelTestData.tsx} (100%) create mode 100644 testApp/app/models/Task.ts create mode 100644 testApp/app/models/index.ts create mode 100644 testApp/app/styles/button.ts create mode 100644 testApp/app/styles/colors.ts create mode 100644 testApp/app/styles/shadows.ts rename testApp/ios/{realmApp.xcodeproj => FlipperTester.xcodeproj}/project.pbxproj (72%) rename testApp/ios/{realmApp.xcodeproj/xcshareddata/xcschemes/realmApp.xcscheme => FlipperTester.xcodeproj/xcshareddata/xcschemes/FlipperTester.xcscheme} (79%) mode change 100755 => 100644 rename testApp/ios/{realmApp.xcworkspace => FlipperTester.xcworkspace}/contents.xcworkspacedata (78%) mode change 100755 => 100644 rename testApp/ios/{realmApp.xcworkspace => FlipperTester.xcworkspace}/xcshareddata/IDEWorkspaceChecks.plist (100%) mode change 100755 => 100644 rename testApp/ios/{realmApp => FlipperTester}/AppDelegate.h (100%) mode change 100755 => 100644 rename testApp/ios/{realmApp => FlipperTester}/AppDelegate.mm (97%) mode change 100755 => 100644 rename testApp/ios/{realmApp => FlipperTester}/Images.xcassets/AppIcon.appiconset/Contents.json (100%) mode change 100755 => 100644 rename testApp/ios/{realmApp => FlipperTester}/Images.xcassets/Contents.json (100%) mode change 100755 => 100644 rename testApp/ios/{realmApp => FlipperTester}/Info.plist (97%) mode change 100755 => 100644 rename testApp/ios/{realmApp => FlipperTester}/LaunchScreen.storyboard (94%) mode change 100755 => 100644 rename testApp/ios/{realmApp => FlipperTester}/main.m (100%) mode change 100755 => 100644 rename testApp/ios/{realmAppTests/realmAppTests.m => FlipperTesterTests/FlipperTesterTests.m} (96%) mode change 100755 => 100644 rename testApp/ios/{realmAppTests => FlipperTesterTests}/Info.plist (100%) mode change 100755 => 100644 mode change 100755 => 100644 testApp/ios/Podfile mode change 100755 => 100644 testApp/ios/Podfile.lock create mode 100644 testApp/sync.config.js create mode 100644 testApp/tsconfig.json create mode 100644 testApp/yarn.lock diff --git a/flipper-plugin-realm/src/CommonTypes.tsx b/flipper-plugin-realm/src/CommonTypes.tsx index e4bf00f..a04c368 100644 --- a/flipper-plugin-realm/src/CommonTypes.tsx +++ b/flipper-plugin-realm/src/CommonTypes.tsx @@ -6,7 +6,7 @@ export interface IndexableRealmObject extends Realm.Object { _pluginObjectKey: string; } -// A Realm.CanonicalObjectSchema interface sorting order reference. +// A Realm.CanonicalObjectSchema interface with a sorting order field. export interface SortedObjectSchema extends Realm.CanonicalObjectSchema { order: string[]; } diff --git a/flipper-plugin-realm/src/components/CustomDropdown.tsx b/flipper-plugin-realm/src/components/CustomDropdown.tsx index 60b9ad5..94c75c5 100644 --- a/flipper-plugin-realm/src/components/CustomDropdown.tsx +++ b/flipper-plugin-realm/src/components/CustomDropdown.tsx @@ -1,4 +1,3 @@ -/* eslint-disable react-native/no-inline-styles */ import React, { useState } from 'react'; import { theme } from 'flipper-plugin'; import { IndexableRealmObject } from '../CommonTypes'; @@ -28,7 +27,6 @@ export type MenuItemGenerator = ( ) => Array; const listItem = (menuItem: MenuItem) => { - // eslint-disable-next-line react-hooks/rules-of-hooks const [hover, setHover] = useState(false); const handleMouseEnter = () => { diff --git a/flipper-plugin-realm/src/components/DataTable.tsx b/flipper-plugin-realm/src/components/DataTable.tsx index 0b874ff..d1b017e 100644 --- a/flipper-plugin-realm/src/components/DataTable.tsx +++ b/flipper-plugin-realm/src/components/DataTable.tsx @@ -1,17 +1,14 @@ -/* eslint-disable react-native/no-inline-styles */ import { PlusOutlined } from '@ant-design/icons'; import { Button, Table } from 'antd'; import { ColumnsType, FilterValue, - Key, SorterResult, TablePaginationConfig, } from 'antd/lib/table/interface'; import { Layout, Spinner, usePlugin, useValue } from 'flipper-plugin'; import React, { useEffect, useState } from 'react'; import { plugin } from '..'; -// import { parsePropToCell } from '../utils/Parser'; import InfiniteScroll from 'react-infinite-scroller'; import { InspectionDataType } from './RealmDataInspector'; import { renderValue } from '../utils/Renderer'; @@ -27,7 +24,7 @@ export type ColumnType = { isPrimaryKey: boolean; }; -type PropertyType = { +type DataTableProps = { columns: ColumnType[]; objects: IndexableRealmObject[]; schemas: SortedObjectSchema[]; @@ -43,8 +40,8 @@ type PropertyType = { enableSort: boolean; hasMore: boolean; totalObjects?: number; - fetchMore?: () => void; - setNewInspectionData?: ( + fetchMore: () => void; + setNewInspectionData: ( inspectionData: InspectionDataType, wipeStacks?: boolean, ) => void; @@ -75,26 +72,24 @@ export const schemaObjToColumns = ( }); }; -export const DataTable = ({ - columns, - objects, - schemas, - currentSchema, - generateMenuItems, - setdropdownProp, - dropdownProp, - scrollX, - scrollY, - setNewInspectionData, - enableSort, - hasMore, - totalObjects = 0, - // eslint-disable-next-line @typescript-eslint/no-empty-function - fetchMore = () => {}, - clickAction, -}: // rowSelection -// TODO: this should probably not use PropertyType as its type. -PropertyType) => { +export const DataTable = (dataTableProps: DataTableProps) => { + const { + columns, + objects, + schemas, + currentSchema, + generateMenuItems, + setdropdownProp, + dropdownProp, + scrollX, + scrollY, + setNewInspectionData, + enableSort, + hasMore, + totalObjects = 0, + fetchMore = () => undefined, + clickAction, + } = dataTableProps; const instance = usePlugin(plugin); const state = useValue(instance.state); const sortableTypes = new Set([ @@ -122,7 +117,7 @@ PropertyType) => { }; document.body.addEventListener('click', closeNestedTable); return () => document.body.removeEventListener('click', closeNestedTable); - }); + }, []); if (!currentSchema) { return Please select schema.; @@ -145,10 +140,7 @@ PropertyType) => { textDecoration: isHovering ? 'underline' : undefined, }} onClick={() => { - // TODO: this should probably be defined at all times. - if (setNewInspectionData) { - setNewInspectionData({ data: value, view: inspectorView }, true); - } + setNewInspectionData({ data: value, view: inspectorView }, true); }} onMouseEnter={() => setHovering(true)} onMouseLeave={() => setHovering(false)} @@ -210,7 +202,6 @@ PropertyType) => { /> { { /** Updating the rowExpansion property of the antd table to expand the correct row and render a nested table inside of it. */ const expandRow = ( + // TODO: figure out the purpose of these variables. rowToExpandKey: any, linkedSchema: SortedObjectSchema, objectToRender: IndexableRealmObject, @@ -296,16 +288,7 @@ PropertyType) => { expandedRowRender: () => { return ( ); }, @@ -326,8 +309,8 @@ PropertyType) => { /** Handling sorting. Is called when the 'state' of the Ant D Table changes, ie. you sort on a column. */ const handleOnChange = ( - pagination: TablePaginationConfig, - filters: Record, + _pagination: TablePaginationConfig, + _filters: Record, sorter: SorterResult | SorterResult[], extra: any, ) => { @@ -336,12 +319,11 @@ PropertyType) => { return; } // TODO: properly handle SorterResult[] case - let sortedField = Array.isArray(sorter) ? sorter[0].field : sorter.field + const sortedField = Array.isArray(sorter) ? sorter[0].field : sorter.field if (state.sortingColumn !== sortedField) { instance.setSortingDirection('ascend'); - // TODO: using "as string" may be error-prone instance.setSortingColumn(sortedField as string); } else { instance.toggleSortingDirection(); @@ -401,7 +383,6 @@ PropertyType) => { onChange={handleOnChange} pagination={false} scroll={{ scrollToFirstRowOnChange: false }} - // tableLayout="auto" /> @@ -421,7 +402,7 @@ const createTitle = (column: ColumnType) => { }; /** Internal component to render a nested table for exploring linked objects. */ -const NestedTable = (props: PropertyType) => { +const NestedTable = (props: DataTableProps) => { return (
{ const onOk = () => { if (!values) { - // TODO: handle this case better. return; } addObject(values); diff --git a/flipper-plugin-realm/src/components/objectManipulation/PropertyRender.tsx b/flipper-plugin-realm/src/components/objectManipulation/PropertyRender.tsx index 4ab221e..37922bc 100644 --- a/flipper-plugin-realm/src/components/objectManipulation/PropertyRender.tsx +++ b/flipper-plugin-realm/src/components/objectManipulation/PropertyRender.tsx @@ -2,7 +2,7 @@ import { Col, Form, Row, Tag } from 'antd'; import React from 'react'; import { TypeInput } from './types/TypeInput'; -type PropertyType = { +type ProperyRenderProps = { initialValue: unknown; property: Realm.CanonicalObjectSchemaProperty; isPrimary: boolean; @@ -47,7 +47,7 @@ export const PropertyRender = ({ property, isPrimary, set, -}: PropertyType) => { +}: ProperyRenderProps) => { const title = typeToString(property); return ( diff --git a/flipper-plugin-realm/src/index.tsx b/flipper-plugin-realm/src/index.tsx index 3d8fed8..6e92d51 100644 --- a/flipper-plugin-realm/src/index.tsx +++ b/flipper-plugin-realm/src/index.tsx @@ -220,7 +220,6 @@ export function plugin(client: PluginClient) { requestObjects(schema, realm, toRestore, cursor) .then( (response: ObjectsMessage) => { - // const state = pluginState.get(); if (response.objects && !response.objects.length) { pluginState.set({ ...state, diff --git a/realm-flipper-plugin-device/package-lock.json b/realm-flipper-plugin-device/package-lock.json index 5c68a08..0c9467a 100644 --- a/realm-flipper-plugin-device/package-lock.json +++ b/realm-flipper-plugin-device/package-lock.json @@ -1,17 +1,16 @@ { "name": "realm-flipper-plugin-device", - "version": "1.0.26", + "version": "1.0.28", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "realm-flipper-plugin-device", - "version": "1.0.26", + "version": "1.0.28", "license": "Apache-2.0", "dependencies": { - "react": ">=17", "react-native-flipper": ">=0.162.0", - "realm": ">=10.0.0" + "realm": ">=10.20.0" }, "devDependencies": { "@types/react": "^18.0.25", @@ -14249,6 +14248,7 @@ "version": "18.1.0", "resolved": "https://registry.npmjs.org/react/-/react-18.1.0.tgz", "integrity": "sha512-4oL8ivCz5ZEPyclFQXaNksK3adutVS8l2xzZU0cqEFrE9Sb7fC0EFK5uEk74wIreL1DERyjvsU915j1pcT2uEQ==", + "peer": true, "requires": { "loose-envify": "^1.1.0" } diff --git a/testApp/.bundle/config b/testApp/.bundle/config deleted file mode 100644 index 848943b..0000000 --- a/testApp/.bundle/config +++ /dev/null @@ -1,2 +0,0 @@ -BUNDLE_PATH: "vendor/bundle" -BUNDLE_FORCE_RUBY_PLATFORM: 1 diff --git a/testApp/.eslintrc.js b/testApp/.eslintrc.js index 40c6dcd..dcf0be0 100644 --- a/testApp/.eslintrc.js +++ b/testApp/.eslintrc.js @@ -1,4 +1,16 @@ module.exports = { root: true, extends: '@react-native-community', + parser: '@typescript-eslint/parser', + plugins: ['@typescript-eslint'], + overrides: [ + { + files: ['*.ts', '*.tsx'], + rules: { + '@typescript-eslint/no-shadow': ['error'], + 'no-shadow': 'off', + 'no-undef': 'off', + }, + }, + ], }; diff --git a/testApp/.flowconfig b/testApp/.flowconfig deleted file mode 100644 index 975227d..0000000 --- a/testApp/.flowconfig +++ /dev/null @@ -1,67 +0,0 @@ -[ignore] -; We fork some components by platform -.*/*[.]android.js - -; Ignore "BUCK" generated dirs -/\.buckd/ - -; Ignore polyfills -node_modules/react-native/Libraries/polyfills/.* - -; Flow doesn't support platforms -.*/Libraries/Utilities/LoadingView.js - -.*/node_modules/resolve/test/resolver/malformed_package_json/package\.json$ - -[untyped] -.*/node_modules/@react-native-community/cli/.*/.* - -[include] - -[libs] -node_modules/react-native/interface.js -node_modules/react-native/flow/ - -[options] -emoji=true - -exact_by_default=true - -format.bracket_spacing=false - -module.file_ext=.js -module.file_ext=.json -module.file_ext=.ios.js - -munge_underscores=true - -module.name_mapper='^react-native/\(.*\)$' -> '/node_modules/react-native/\1' -module.name_mapper='^@?[./a-zA-Z0-9$_-]+\.\(bmp\|gif\|jpg\|jpeg\|png\|psd\|svg\|webp\|m4v\|mov\|mp4\|mpeg\|mpg\|webm\|aac\|aiff\|caf\|m4a\|mp3\|wav\|html\|pdf\)$' -> '/node_modules/react-native/Libraries/Image/RelativeImageStub' - -suppress_type=$FlowIssue -suppress_type=$FlowFixMe -suppress_type=$FlowFixMeProps -suppress_type=$FlowFixMeState - -[lints] -sketchy-null-number=warn -sketchy-null-mixed=warn -sketchy-number=warn -untyped-type-import=warn -nonstrict-import=warn -deprecated-type=warn -unsafe-getters-setters=warn -unnecessary-invariant=warn -signature-verification-failure=warn - -[strict] -deprecated-type -nonstrict-import -sketchy-null -unclear-type -unsafe-getters-setters -untyped-import -untyped-type-import - -[version] -^0.170.0 diff --git a/testApp/App.tsx b/testApp/App.tsx deleted file mode 100644 index a4fe2b6..0000000 --- a/testApp/App.tsx +++ /dev/null @@ -1,240 +0,0 @@ -/** - * Sample React Native App - * https://github.com/facebook/react-native - * - * @format - * @flow strict-local - */ - -import React from 'react'; -import Realm from 'realm'; - -import type {Node} from 'react'; - -import {createAllTypesTestData} from './TestData/createAllTypesTestData'; - -// const {UUID} = Realm.BSON; - -import { - BananaSchema, - AllTypesSchema, - TaskSchema, - MaybeSchema, - NoPrimaryKey, - DictSchema, - SetsSchema, - Parcel, - ParcelService, - Delivery, - MailCarrier, - DataSchema, - Person, - NoPrimaryKeyLink, -} from './TestData/Schemas'; - -import { - SafeAreaView, - ScrollView, - StatusBar, - StyleSheet, - Text, - useColorScheme, - View, - Button, -} from 'react-native'; - -// import RealmPlugin from 'realm-flipper-plugin-device'; -import RealmPlugin from './RealmPlugin'; - -import { - Colors, - DebugInstructions, - Header, - LearnMoreLinks, - ReloadInstructions, -} from 'react-native/Libraries/NewAppScreen'; - -import {createParcelTestData} from './TestData/parcelExample'; - -// Open a Realm -const realm = new Realm({ - schema: [ - TaskSchema, - BananaSchema, - MaybeSchema, - AllTypesSchema, - NoPrimaryKey, - DictSchema, - SetsSchema, - DataSchema, - Person, - NoPrimaryKeyLink, - ], - path: 'main', - schemaVersion: 404, -}); - -const realm2 = new Realm({ - schema: [Parcel, ParcelService, Delivery, MailCarrier], - schemaVersion: 7, -}); - -//realmPlugin.newfunc(); -// Write a ToDo with random ID to database -function createToDo() { - let task1; - realm.write(() => { - task1 = realm.create('Task', { - _id: Math.floor(Math.random() * 100000), - name: 'go grocery shopping', - status: 'Open', - }); - console.log(`created one task: ${task1.name} with id ${task1._id}`); - }); -} -let i = 4; - -function createBanana() { - let banana1; - realm.write(() => { - banana1 = realm.create('Banana', { - _id: Math.floor(Math.random() * 100000000), - name: 'Jack', - color: 'yellow', - length: 40, - weight: 309, - }); - console.log(`created one banana: ${banana1.name} with id ${banana1._id}`); - i++; - }); -} - -// for (let i = 0; i<1000000; i++) { -// createBanana(); -// } - -function deleteBanana() { - realm.write(() => { - //realm.delete(realm.objects("Banana")); - realm.delete(realm.objects('Banana')[0]); - }); -} - -let index = 0; - -function editBanana() { - const bananas = realm.objects('Banana'); - - realm.write(() => { - bananas[Math.floor(Math.random() * bananas.length)].color = 'blue'; - }); - index++; -} - -const Section = ({children, title}): Node => { - const isDarkMode = useColorScheme() === 'dark'; - return ( - - - {title} - - - {children} - - - ); -}; - -const App: () => Node = () => { - const isDarkMode = useColorScheme() === 'dark'; - - const backgroundStyle = { - backgroundColor: isDarkMode ? Colors.darker : Colors.lighter, - }; - - return ( - - - - -
- -
- Edit App.js to change this - screen and then come back to see your edits. -
- - - - - - -
- -
-
- -
-
- Read the docs to discover what to do next: -
- -
- - - ); -}; - -const styles = StyleSheet.create({ - sectionContainer: { - marginTop: 32, - paddingHorizontal: 24, - }, - sectionTitle: { - fontSize: 24, - fontWeight: '600', - }, - sectionDescription: { - marginTop: 8, - fontSize: 18, - fontWeight: '400', - }, - highlight: { - fontWeight: '700', - }, -}); - -export default App; diff --git a/testApp/Gemfile.lock b/testApp/Gemfile.lock deleted file mode 100644 index 5628351..0000000 --- a/testApp/Gemfile.lock +++ /dev/null @@ -1,100 +0,0 @@ -GEM - remote: https://rubygems.org/ - specs: - CFPropertyList (3.0.5) - rexml - activesupport (6.1.5) - concurrent-ruby (~> 1.0, >= 1.0.2) - i18n (>= 1.6, < 2) - minitest (>= 5.1) - tzinfo (~> 2.0) - zeitwerk (~> 2.3) - addressable (2.8.0) - public_suffix (>= 2.0.2, < 5.0) - algoliasearch (1.27.5) - httpclient (~> 2.8, >= 2.8.3) - json (>= 1.5.1) - atomos (0.1.3) - claide (1.1.0) - cocoapods (1.11.3) - addressable (~> 2.8) - claide (>= 1.0.2, < 2.0) - cocoapods-core (= 1.11.3) - cocoapods-deintegrate (>= 1.0.3, < 2.0) - cocoapods-downloader (>= 1.4.0, < 2.0) - cocoapods-plugins (>= 1.0.0, < 2.0) - cocoapods-search (>= 1.0.0, < 2.0) - cocoapods-trunk (>= 1.4.0, < 2.0) - cocoapods-try (>= 1.1.0, < 2.0) - colored2 (~> 3.1) - escape (~> 0.0.4) - fourflusher (>= 2.3.0, < 3.0) - gh_inspector (~> 1.0) - molinillo (~> 0.8.0) - nap (~> 1.0) - ruby-macho (>= 1.0, < 3.0) - xcodeproj (>= 1.21.0, < 2.0) - cocoapods-core (1.11.3) - activesupport (>= 5.0, < 7) - addressable (~> 2.8) - algoliasearch (~> 1.0) - concurrent-ruby (~> 1.1) - fuzzy_match (~> 2.0.4) - nap (~> 1.0) - netrc (~> 0.11) - public_suffix (~> 4.0) - typhoeus (~> 1.0) - cocoapods-deintegrate (1.0.5) - cocoapods-downloader (1.6.3) - cocoapods-plugins (1.0.0) - nap - cocoapods-search (1.0.1) - cocoapods-trunk (1.6.0) - nap (>= 0.8, < 2.0) - netrc (~> 0.11) - cocoapods-try (1.2.0) - colored2 (3.1.2) - concurrent-ruby (1.1.10) - escape (0.0.4) - ethon (0.15.0) - ffi (>= 1.15.0) - ffi (1.15.5) - fourflusher (2.3.1) - fuzzy_match (2.0.4) - gh_inspector (1.1.3) - httpclient (2.8.3) - i18n (1.10.0) - concurrent-ruby (~> 1.0) - json (2.6.1) - minitest (5.15.0) - molinillo (0.8.0) - nanaimo (0.3.0) - nap (1.1.0) - netrc (0.11.0) - public_suffix (4.0.7) - rexml (3.2.5) - ruby-macho (2.5.1) - typhoeus (1.4.0) - ethon (>= 0.9.0) - tzinfo (2.0.4) - concurrent-ruby (~> 1.0) - xcodeproj (1.21.0) - CFPropertyList (>= 2.3.3, < 4.0) - atomos (~> 0.1.3) - claide (>= 1.0.2, < 2.0) - colored2 (~> 3.1) - nanaimo (~> 0.3.0) - rexml (~> 3.2.4) - zeitwerk (2.5.4) - -PLATFORMS - ruby - -DEPENDENCIES - cocoapods (~> 1.11, >= 1.11.2) - -RUBY VERSION - ruby 2.7.4p191 - -BUNDLED WITH - 2.2.27 diff --git a/testApp/__tests__/App-test.js b/testApp/__tests__/App-test.tsx similarity index 100% rename from testApp/__tests__/App-test.js rename to testApp/__tests__/App-test.tsx diff --git a/testApp/android/app/_BUCK b/testApp/android/app/_BUCK index a9b1539..e91f6d9 100644 --- a/testApp/android/app/_BUCK +++ b/testApp/android/app/_BUCK @@ -35,12 +35,12 @@ android_library( android_build_config( name = "build_config", - package = "com.realmapp", + package = "com.flippertester", ) android_resource( name = "res", - package = "com.realmapp", + package = "com.flippertester", res = "src/main/res", ) diff --git a/testApp/android/app/build.gradle b/testApp/android/app/build.gradle index 1151257..72e9e38 100644 --- a/testApp/android/app/build.gradle +++ b/testApp/android/app/build.gradle @@ -135,7 +135,7 @@ android { compileSdkVersion rootProject.ext.compileSdkVersion defaultConfig { - applicationId "com.realmapp" + applicationId "com.flippertester" minSdkVersion rootProject.ext.minSdkVersion targetSdkVersion rootProject.ext.targetSdkVersion versionCode 1 @@ -157,12 +157,11 @@ android { cppFlags "-std=c++17" // Make sure this target name is the same you specify inside the // src/main/jni/Android.mk file for the `LOCAL_MODULE` variable. - targets "realmapp_appmodules" + targets "flippertester_appmodules" // Fix for windows limit on number of character in file paths and in command lines if (Os.isFamily(Os.FAMILY_WINDOWS)) { - arguments "NDK_OUT=${rootProject.projectDir.getParent()}\\.cxx", - "NDK_APP_SHORT_COMMANDS=true" + arguments "NDK_APP_SHORT_COMMANDS=true" } } } diff --git a/testApp/android/app/src/debug/java/com/realmapp/ReactNativeFlipper.java b/testApp/android/app/src/debug/java/com/flippertester/ReactNativeFlipper.java similarity index 99% rename from testApp/android/app/src/debug/java/com/realmapp/ReactNativeFlipper.java rename to testApp/android/app/src/debug/java/com/flippertester/ReactNativeFlipper.java index 1e59e0d..9032f95 100644 --- a/testApp/android/app/src/debug/java/com/realmapp/ReactNativeFlipper.java +++ b/testApp/android/app/src/debug/java/com/flippertester/ReactNativeFlipper.java @@ -4,7 +4,7 @@ *

This source code is licensed under the MIT license found in the LICENSE file in the root * directory of this source tree. */ -package com.realmapp; +package com.flippertester; import android.content.Context; import com.facebook.flipper.android.AndroidFlipperClient; diff --git a/testApp/android/app/src/main/AndroidManifest.xml b/testApp/android/app/src/main/AndroidManifest.xml index 8762f9a..46ab972 100644 --- a/testApp/android/app/src/main/AndroidManifest.xml +++ b/testApp/android/app/src/main/AndroidManifest.xml @@ -1,5 +1,5 @@ + package="com.flippertester"> diff --git a/testApp/android/app/src/main/java/com/realmapp/MainActivity.java b/testApp/android/app/src/main/java/com/flippertester/MainActivity.java similarity index 95% rename from testApp/android/app/src/main/java/com/realmapp/MainActivity.java rename to testApp/android/app/src/main/java/com/flippertester/MainActivity.java index 08ebb30..2ce8ea0 100644 --- a/testApp/android/app/src/main/java/com/realmapp/MainActivity.java +++ b/testApp/android/app/src/main/java/com/flippertester/MainActivity.java @@ -1,4 +1,4 @@ -package com.realmapp; +package com.flippertester; import com.facebook.react.ReactActivity; import com.facebook.react.ReactActivityDelegate; @@ -12,7 +12,7 @@ public class MainActivity extends ReactActivity { */ @Override protected String getMainComponentName() { - return "realmApp"; + return "FlipperTester"; } /** diff --git a/testApp/android/app/src/main/java/com/realmapp/MainApplication.java b/testApp/android/app/src/main/java/com/flippertester/MainApplication.java similarity index 94% rename from testApp/android/app/src/main/java/com/realmapp/MainApplication.java rename to testApp/android/app/src/main/java/com/flippertester/MainApplication.java index f4fbe43..4a7a61d 100644 --- a/testApp/android/app/src/main/java/com/realmapp/MainApplication.java +++ b/testApp/android/app/src/main/java/com/flippertester/MainApplication.java @@ -1,4 +1,4 @@ -package com.realmapp; +package com.flippertester; import android.app.Application; import android.content.Context; @@ -9,7 +9,7 @@ import com.facebook.react.ReactPackage; import com.facebook.react.config.ReactFeatureFlags; import com.facebook.soloader.SoLoader; -import com.realmapp.newarchitecture.MainApplicationReactNativeHost; +import com.flippertester.newarchitecture.MainApplicationReactNativeHost; import java.lang.reflect.InvocationTargetException; import java.util.List; @@ -73,7 +73,7 @@ private static void initializeFlipper( We use reflection here to pick up the class that initializes Flipper, since Flipper library is not available in release mode */ - Class aClass = Class.forName("com.realmapp.ReactNativeFlipper"); + Class aClass = Class.forName("com.flippertester.ReactNativeFlipper"); aClass .getMethod("initializeFlipper", Context.class, ReactInstanceManager.class) .invoke(null, context, reactInstanceManager); diff --git a/testApp/android/app/src/main/java/com/realmapp/newarchitecture/MainApplicationReactNativeHost.java b/testApp/android/app/src/main/java/com/flippertester/newarchitecture/MainApplicationReactNativeHost.java similarity index 94% rename from testApp/android/app/src/main/java/com/realmapp/newarchitecture/MainApplicationReactNativeHost.java rename to testApp/android/app/src/main/java/com/flippertester/newarchitecture/MainApplicationReactNativeHost.java index 0c48737..bafa0c2 100644 --- a/testApp/android/app/src/main/java/com/realmapp/newarchitecture/MainApplicationReactNativeHost.java +++ b/testApp/android/app/src/main/java/com/flippertester/newarchitecture/MainApplicationReactNativeHost.java @@ -1,4 +1,4 @@ -package com.realmapp.newarchitecture; +package com.flippertester.newarchitecture; import android.app.Application; import androidx.annotation.NonNull; @@ -19,9 +19,9 @@ import com.facebook.react.fabric.EmptyReactNativeConfig; import com.facebook.react.fabric.FabricJSIModuleProvider; import com.facebook.react.uimanager.ViewManagerRegistry; -import com.realmapp.BuildConfig; -import com.realmapp.newarchitecture.components.MainComponentsRegistry; -import com.realmapp.newarchitecture.modules.MainApplicationTurboModuleManagerDelegate; +import com.flippertester.BuildConfig; +import com.flippertester.newarchitecture.components.MainComponentsRegistry; +import com.flippertester.newarchitecture.modules.MainApplicationTurboModuleManagerDelegate; import java.util.ArrayList; import java.util.List; diff --git a/testApp/android/app/src/main/java/com/realmapp/newarchitecture/components/MainComponentsRegistry.java b/testApp/android/app/src/main/java/com/flippertester/newarchitecture/components/MainComponentsRegistry.java similarity index 95% rename from testApp/android/app/src/main/java/com/realmapp/newarchitecture/components/MainComponentsRegistry.java rename to testApp/android/app/src/main/java/com/flippertester/newarchitecture/components/MainComponentsRegistry.java index 5d794e9..bfbe566 100644 --- a/testApp/android/app/src/main/java/com/realmapp/newarchitecture/components/MainComponentsRegistry.java +++ b/testApp/android/app/src/main/java/com/flippertester/newarchitecture/components/MainComponentsRegistry.java @@ -1,4 +1,4 @@ -package com.realmapp.newarchitecture.components; +package com.flippertester.newarchitecture.components; import com.facebook.jni.HybridData; import com.facebook.proguard.annotations.DoNotStrip; diff --git a/testApp/android/app/src/main/java/com/realmapp/newarchitecture/modules/MainApplicationTurboModuleManagerDelegate.java b/testApp/android/app/src/main/java/com/flippertester/newarchitecture/modules/MainApplicationTurboModuleManagerDelegate.java similarity index 94% rename from testApp/android/app/src/main/java/com/realmapp/newarchitecture/modules/MainApplicationTurboModuleManagerDelegate.java rename to testApp/android/app/src/main/java/com/flippertester/newarchitecture/modules/MainApplicationTurboModuleManagerDelegate.java index aadcce5..335221b 100644 --- a/testApp/android/app/src/main/java/com/realmapp/newarchitecture/modules/MainApplicationTurboModuleManagerDelegate.java +++ b/testApp/android/app/src/main/java/com/flippertester/newarchitecture/modules/MainApplicationTurboModuleManagerDelegate.java @@ -1,4 +1,4 @@ -package com.realmapp.newarchitecture.modules; +package com.flippertester.newarchitecture.modules; import com.facebook.jni.HybridData; import com.facebook.react.ReactPackage; @@ -41,7 +41,7 @@ protected synchronized void maybeLoadOtherSoLibraries() { if (!sIsSoLibraryLoaded) { // If you change the name of your application .so file in the Android.mk file, // make sure you update the name here as well. - SoLoader.loadLibrary("realmapp_appmodules"); + SoLoader.loadLibrary("flippertester_appmodules"); sIsSoLibraryLoaded = true; } } diff --git a/testApp/android/app/src/main/jni/Android.mk b/testApp/android/app/src/main/jni/Android.mk index f2ac856..8e2cf28 100644 --- a/testApp/android/app/src/main/jni/Android.mk +++ b/testApp/android/app/src/main/jni/Android.mk @@ -10,7 +10,7 @@ include $(CLEAR_VARS) LOCAL_PATH := $(THIS_DIR) # You can customize the name of your application .so file here. -LOCAL_MODULE := realmapp_appmodules +LOCAL_MODULE := flippertester_appmodules LOCAL_C_INCLUDES := $(LOCAL_PATH) LOCAL_SRC_FILES := $(wildcard $(LOCAL_PATH)/*.cpp) diff --git a/testApp/android/app/src/main/jni/MainApplicationTurboModuleManagerDelegate.h b/testApp/android/app/src/main/jni/MainApplicationTurboModuleManagerDelegate.h index 04d1989..15530f1 100644 --- a/testApp/android/app/src/main/jni/MainApplicationTurboModuleManagerDelegate.h +++ b/testApp/android/app/src/main/jni/MainApplicationTurboModuleManagerDelegate.h @@ -14,7 +14,7 @@ class MainApplicationTurboModuleManagerDelegate public: // Adapt it to the package you used for your Java class. static constexpr auto kJavaDescriptor = - "Lcom/realmapp/newarchitecture/modules/MainApplicationTurboModuleManagerDelegate;"; + "Lcom/flippertester/newarchitecture/modules/MainApplicationTurboModuleManagerDelegate;"; static jni::local_ref initHybrid(jni::alias_ref); diff --git a/testApp/android/app/src/main/jni/MainComponentsRegistry.h b/testApp/android/app/src/main/jni/MainComponentsRegistry.h index 6e3e4a9..18e0b49 100644 --- a/testApp/android/app/src/main/jni/MainComponentsRegistry.h +++ b/testApp/android/app/src/main/jni/MainComponentsRegistry.h @@ -13,7 +13,7 @@ class MainComponentsRegistry public: // Adapt it to the package you used for your Java class. constexpr static auto kJavaDescriptor = - "Lcom/realmapp/newarchitecture/components/MainComponentsRegistry;"; + "Lcom/flippertester/newarchitecture/components/MainComponentsRegistry;"; static void registerNatives(); diff --git a/testApp/android/app/src/main/res/values/strings.xml b/testApp/android/app/src/main/res/values/strings.xml index a2f16af..d0a8ba4 100644 --- a/testApp/android/app/src/main/res/values/strings.xml +++ b/testApp/android/app/src/main/res/values/strings.xml @@ -1,3 +1,3 @@ - realmApp + FlipperTester diff --git a/testApp/android/build.gradle b/testApp/android/build.gradle index e7156fc..5dfc68a 100644 --- a/testApp/android/build.gradle +++ b/testApp/android/build.gradle @@ -12,10 +12,6 @@ buildscript { if (System.properties['os.arch'] == "aarch64") { // For M1 Users we need to use the NDK 24 which added support for aarch64 ndkVersion = "24.0.8215888" - } else if (Os.isFamily(Os.FAMILY_WINDOWS)) { - // For Android Users, we need to use NDK 23, otherwise the build will - // fail due to paths longer than the OS limit - ndkVersion = "23.1.7779620" } else { // Otherwise we default to the side-by-side NDK version from AGP. ndkVersion = "21.4.7075529" diff --git a/testApp/android/settings.gradle b/testApp/android/settings.gradle index 75ddc3f..c938e30 100644 --- a/testApp/android/settings.gradle +++ b/testApp/android/settings.gradle @@ -1,4 +1,4 @@ -rootProject.name = 'realmApp' +rootProject.name = 'FlipperTester' apply from: file("../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesSettingsGradle(settings) include ':app' includeBuild('../node_modules/react-native-gradle-plugin') diff --git a/testApp/app.json b/testApp/app.json index 7e1da32..ac624d7 100644 --- a/testApp/app.json +++ b/testApp/app.json @@ -1,4 +1,4 @@ { - "name": "realmApp", - "displayName": "realmApp" + "name": "FlipperTester", + "displayName": "FlipperTester" } \ No newline at end of file diff --git a/testApp/app/AppNonSync.tsx b/testApp/app/AppNonSync.tsx new file mode 100644 index 0000000..88152d1 --- /dev/null +++ b/testApp/app/AppNonSync.tsx @@ -0,0 +1,22 @@ +import React, {useMemo} from 'react'; + +import {Task} from './models/Task'; +import {TaskRealmContext} from './models'; +import {TaskManager} from './components/TaskManager'; +import RealmPlugin from 'realm-flipper-plugin-device'; + +const {useQuery, useRealm} = TaskRealmContext; + +export const AppNonSync = () => { + const result = useQuery(Task); + const realm = useRealm(); + + const tasks = useMemo(() => result.sorted('createdAt'), [result]); + + return ( + <> + + + + ); +}; diff --git a/testApp/app/AppSync.tsx b/testApp/app/AppSync.tsx new file mode 100644 index 0000000..25ec816 --- /dev/null +++ b/testApp/app/AppSync.tsx @@ -0,0 +1,57 @@ +import React, {useCallback, useEffect, useMemo} from 'react'; +import {useApp, useUser} from '@realm/react'; +import {Pressable, StyleSheet, Text} from 'react-native'; + +import {Task} from './models/Task'; +import {TaskRealmContext} from './models'; +import {TaskManager} from './components/TaskManager'; +import {buttonStyles} from './styles/button'; +import {shadows} from './styles/shadows'; +import colors from './styles/colors'; + +const {useRealm, useQuery} = TaskRealmContext; + +export const AppSync: React.FC = () => { + const realm = useRealm(); + const user = useUser(); + const app = useApp(); + const result = useQuery(Task); + + const tasks = useMemo(() => result.sorted('createdAt'), [result]); + + useEffect(() => { + realm.subscriptions.update(mutableSubs => { + mutableSubs.add(realm.objects(Task)); + }); + }, [realm, result]); + + const handleLogout = useCallback(() => { + user?.logOut(); + }, [user]); + + return ( + <> + Syncing with app id: {app.id} + + + {`Logout ${user?.profile.email}`} + + + ); +}; + +const styles = StyleSheet.create({ + idText: { + color: '#999', + paddingHorizontal: 20, + }, + authButton: { + ...buttonStyles.button, + ...shadows, + backgroundColor: colors.purpleDark, + }, + authButtonText: { + ...buttonStyles.text, + }, +}); diff --git a/testApp/app/AppWrapperNonSync.tsx b/testApp/app/AppWrapperNonSync.tsx new file mode 100644 index 0000000..fcc71ea --- /dev/null +++ b/testApp/app/AppWrapperNonSync.tsx @@ -0,0 +1,26 @@ +import React from 'react'; +import {SafeAreaView, StyleSheet} from 'react-native'; + +import colors from './styles/colors'; +import {PluginTestRealmContext} from './flipperTest/Schemas'; +import PluginTestAppNonSync from './flipperTest/PluginTestAppNonSync'; + +export const AppWrapperNonSync = () => { + const {RealmProvider} = PluginTestRealmContext; + + // If sync is disabled, setup the app without any sync functionality and return early + return ( + + + + + + ); +}; + +const styles = StyleSheet.create({ + screen: { + flex: 1, + backgroundColor: colors.darkBlue, + }, +}); diff --git a/testApp/app/AppWrapperSync.tsx b/testApp/app/AppWrapperSync.tsx new file mode 100644 index 0000000..7f24c9e --- /dev/null +++ b/testApp/app/AppWrapperSync.tsx @@ -0,0 +1,36 @@ +import React from 'react'; +import {AppProvider, UserProvider} from '@realm/react'; +import {SafeAreaView, StyleSheet} from 'react-native'; + +import {TaskRealmContext} from './models'; +import {LoginScreen} from './components/LoginScreen'; +import colors from './styles/colors'; +import {AppSync} from './AppSync'; + +export const AppWrapperSync: React.FC<{ + appId: string; +}> = ({appId}) => { + const {RealmProvider} = TaskRealmContext; + + // If we are logged in, add the sync configuration the the RealmProvider and render the app + return ( + + + + + + + + + + ); +}; + +const styles = StyleSheet.create({ + screen: { + flex: 1, + backgroundColor: colors.darkBlue, + }, +}); + +export default AppWrapperSync; diff --git a/testApp/app/components/AddTaskForm.tsx b/testApp/app/components/AddTaskForm.tsx new file mode 100644 index 0000000..4fb09b6 --- /dev/null +++ b/testApp/app/components/AddTaskForm.tsx @@ -0,0 +1,71 @@ +import React, {useState} from 'react'; +import { + View, + Text, + TextInput, + Pressable, + Platform, + StyleSheet, +} from 'react-native'; + +import {buttonStyles} from '../styles/button'; +import colors from '../styles/colors'; +import {shadows} from '../styles/shadows'; + +type AddTaskFormProps = { + onSubmit: (description: string) => void; +}; + +export const AddTaskForm: React.FC = ({onSubmit}) => { + const [description, setDescription] = useState(''); + + const handleSubmit = () => { + onSubmit(description); + setDescription(''); + }; + + return ( + + + + + + + ); +}; + +const styles = StyleSheet.create({ + form: { + height: 50, + marginBottom: 20, + flexDirection: 'row', + ...shadows, + }, + textInput: { + flex: 1, + paddingHorizontal: 15, + paddingVertical: Platform.OS === 'ios' ? 15 : 0, + borderRadius: 5, + backgroundColor: colors.white, + fontSize: 17, + }, + submit: { + ...buttonStyles.button, + width: 50, + height: '100%', + paddingHorizontal: 0, + paddingVertical: 0, + marginLeft: 20, + marginRight: 0, + }, + icon: { + ...buttonStyles.text, + }, +}); diff --git a/testApp/app/components/IntroText.tsx b/testApp/app/components/IntroText.tsx new file mode 100644 index 0000000..b54ebd8 --- /dev/null +++ b/testApp/app/components/IntroText.tsx @@ -0,0 +1,51 @@ +import React from 'react'; +import {View, Text, Pressable, StyleSheet} from 'react-native'; +// @ts-ignore openURLInBrowser will open the url in your machine browser. (This isn't currently typed in React Native) +import openURLInBrowser from 'react-native/Libraries/Core/Devtools/openURLInBrowser'; + +import colors from '../styles/colors'; + +export const IntroText = () => { + return ( + + + Welcome to the Realm React Native TypeScript Template + + + Start adding a task using the form at the top of the screen to see how + they are created in Realm. You can also toggle the task status or remove + it from the list. + + + Learn more about the React Native Realm SDK at: + + + openURLInBrowser('https://docs.mongodb.com/realm/sdk/react-native/') + }> + + docs.mongodb.com/realm/sdk/react-native + + + + ); +}; + +const styles = StyleSheet.create({ + content: { + flex: 1, + marginHorizontal: 20, + justifyContent: 'center', + }, + paragraph: { + marginVertical: 10, + textAlign: 'center', + color: 'white', + fontSize: 17, + fontWeight: '500', + }, + link: { + color: colors.purple, + fontWeight: 'bold', + }, +}); diff --git a/testApp/app/components/LoginScreen.tsx b/testApp/app/components/LoginScreen.tsx new file mode 100644 index 0000000..7eb1956 --- /dev/null +++ b/testApp/app/components/LoginScreen.tsx @@ -0,0 +1,167 @@ +import React, {useCallback, useState} from 'react'; +import {View, Text, StyleSheet, TextInput, Pressable} from 'react-native'; +import colors from '../styles/colors'; +import {shadows} from '../styles/shadows'; +import {buttonStyles} from '../styles/button'; +import {Realm, useApp} from '@realm/react'; + +export enum AuthState { + None, + Loading, + LoginError, + RegisterError, +} + +export const LoginScreen = () => { + const app = useApp(); + const [email, setEmail] = useState(''); + const [password, setPassword] = useState(''); + const [authState, setAuthState] = useState(AuthState.None); + + // If the user presses "login" from the auth screen, try to log them in + // with the supplied credentials + const handleLogin = useCallback(async () => { + setAuthState(AuthState.Loading); + const credentials = Realm.Credentials.emailPassword(email, password); + try { + await app.logIn(credentials); + setAuthState(AuthState.None); + } catch (e) { + console.log('Error logging in', e); + setAuthState(AuthState.LoginError); + } + }, [email, password, setAuthState, app]); + + // If the user presses "register" from the auth screen, try to register a + // new account with the supplied credentials and login as the newly created user + const handleRegister = useCallback(async () => { + setAuthState(AuthState.Loading); + + try { + // Register the user... + await app.emailPasswordAuth.registerUser({email, password}); + // ...then login with the newly created user + const credentials = Realm.Credentials.emailPassword(email, password); + + await app.logIn(credentials); + setAuthState(AuthState.None); + } catch (e) { + console.log('Error registering', e); + setAuthState(AuthState.RegisterError); + } + }, [email, password, setAuthState, app]); + + return ( + + + + + + + + + {authState === AuthState.LoginError && ( + + There was an error logging in, please try again + + )} + {authState === AuthState.RegisterError && ( + + There was an error registering, please try again + + )} + + + + Login + + + + Register + + + + ); +}; + +const styles = StyleSheet.create({ + content: { + flex: 1, + alignItems: 'center', + justifyContent: 'center', + backgroundColor: colors.darkBlue, + }, + + inputContainer: { + padding: 10, + alignSelf: 'stretch', + marginHorizontal: 10, + }, + + error: { + textAlign: 'center', + marginTop: 10, + marginBottom: 10, + fontSize: 14, + color: colors.white, + }, + + input: { + borderWidth: 1, + borderColor: colors.gray, + padding: 10, + height: 50, + marginVertical: 8, + backgroundColor: colors.white, + borderRadius: 5, + ...shadows, + }, + + buttons: { + marginTop: 16, + flexDirection: 'row', + }, + + button: { + ...buttonStyles.button, + ...shadows, + }, + + buttonDisabled: { + opacity: 0.5, + }, + + registerButton: { + backgroundColor: colors.purpleDark, + }, +}); diff --git a/testApp/app/components/TaskItem.tsx b/testApp/app/components/TaskItem.tsx new file mode 100644 index 0000000..95aae8e --- /dev/null +++ b/testApp/app/components/TaskItem.tsx @@ -0,0 +1,81 @@ +import React from 'react'; +import Realm from 'realm'; +import {View, Text, Pressable, StyleSheet} from 'react-native'; + +import {shadows} from '../styles/shadows'; +import colors from '../styles/colors'; +import {Task} from '../models/Task'; + +type TaskItemProps = { + task: Task & Realm.Object; + onToggleStatus: () => void; + onDelete: () => void; +}; + +export const TaskItem = React.memo( + ({task, onToggleStatus, onDelete}) => { + return ( + + + {task.isComplete ? '✓' : '○'} + + + + {task.description} + + + + Delete + + + ); + }, +); + +const styles = StyleSheet.create({ + task: { + height: 50, + alignSelf: 'stretch', + flexDirection: 'row', + marginVertical: 8, + backgroundColor: colors.white, + borderRadius: 5, + ...shadows, + }, + descriptionContainer: { + flex: 1, + justifyContent: 'center', + }, + description: { + paddingHorizontal: 10, + color: colors.black, + fontSize: 17, + }, + status: { + width: 50, + height: '100%', + justifyContent: 'center', + borderTopLeftRadius: 5, + borderBottomLeftRadius: 5, + backgroundColor: colors.gray, + }, + completed: { + backgroundColor: colors.purple, + }, + deleteButton: { + justifyContent: 'center', + }, + deleteText: { + marginHorizontal: 10, + color: colors.gray, + fontSize: 17, + }, + icon: { + color: colors.white, + textAlign: 'center', + fontSize: 17, + fontWeight: 'bold', + }, +}); diff --git a/testApp/app/components/TaskList.tsx b/testApp/app/components/TaskList.tsx new file mode 100644 index 0000000..054fdf2 --- /dev/null +++ b/testApp/app/components/TaskList.tsx @@ -0,0 +1,44 @@ +import React from 'react'; +import {View, FlatList, StyleSheet} from 'react-native'; +import {Realm} from '@realm/react'; + +import {Task} from '../models/Task'; +import {TaskItem} from './TaskItem'; + +type TaskListProps = { + tasks: Realm.Results; + onToggleTaskStatus: (task: Task & Realm.Object) => void; + onDeleteTask: (task: Task & Realm.Object) => void; +}; + +export const TaskList: React.FC = ({ + tasks, + onToggleTaskStatus, + onDeleteTask, +}) => { + return ( + + task._id.toString()} + renderItem={({item}) => ( + onToggleTaskStatus(item)} + onDelete={() => onDeleteTask(item)} + // Don't spread the Realm item as such: {...item} + /> + )} + /> + + ); +}; + +const styles = StyleSheet.create({ + listContainer: { + flex: 1, + justifyContent: 'center', + }, +}); + +export default TaskList; diff --git a/testApp/app/components/TaskManager.tsx b/testApp/app/components/TaskManager.tsx new file mode 100644 index 0000000..e6918a5 --- /dev/null +++ b/testApp/app/components/TaskManager.tsx @@ -0,0 +1,95 @@ +import React, {useCallback} from 'react'; +import {View, StyleSheet} from 'react-native'; + +import {Task} from '../models/Task'; +import {IntroText} from './IntroText'; +import {AddTaskForm} from './AddTaskForm'; +import TaskList from './TaskList'; +import {PluginTestRealmContext} from '../flipperTest/Schemas'; + +const {useRealm} = PluginTestRealmContext; + +export const TaskManager: React.FC<{ + tasks: Realm.Results; + userId?: string; +}> = ({tasks, userId}) => { + const realm = useRealm(); + + const handleAddTask = useCallback( + (description: string): void => { + if (!description) { + return; + } + + // Everything in the function passed to "realm.write" is a transaction and will + // hence succeed or fail together. A transcation is the smallest unit of transfer + // in Realm so we want to be mindful of how much we put into one single transaction + // and split them up if appropriate (more commonly seen server side). Since clients + // may occasionally be online during short time spans we want to increase the probability + // of sync participants to successfully sync everything in the transaction, otherwise + // no changes propagate and the transaction needs to start over when connectivity allows. + realm.write(() => { + return new Task(realm, description, userId); + }); + }, + [realm, userId], + ); + + const handleToggleTaskStatus = useCallback( + (task: Task & Realm.Object): void => { + realm.write(() => { + // Normally when updating a record in a NoSQL or SQL database, we have to type + // a statement that will later be interpreted and used as instructions for how + // to update the record. But in RealmDB, the objects are "live" because they are + // actually referencing the object's location in memory on the device (memory mapping). + // So rather than typing a statement, we modify the object directly by changing + // the property values. If the changes adhere to the schema, Realm will accept + // this new version of the object and wherever this object is being referenced + // locally will also see the changes "live". + task.isComplete = !task.isComplete; + }); + + // Alternatively if passing the ID as the argument to handleToggleTaskStatus: + // realm?.write(() => { + // const task = realm?.objectForPrimaryKey('Task', id); // If the ID is passed as an ObjectId + // const task = realm?.objectForPrimaryKey('Task', Realm.BSON.ObjectId(id)); // If the ID is passed as a string + // task.isComplete = !task.isComplete; + // }); + }, + [realm], + ); + + const handleDeleteTask = useCallback( + (task: Task & Realm.Object): void => { + realm.write(() => { + realm.delete(task); + + // Alternatively if passing the ID as the argument to handleDeleteTask: + // realm?.delete(realm?.objectForPrimaryKey('Task', id)); + }); + }, + [realm], + ); + return ( + + + {tasks.length === 0 ? ( + + ) : ( + + )} + + ); +}; + +const styles = StyleSheet.create({ + content: { + flex: 1, + paddingTop: 20, + paddingHorizontal: 20, + }, +}); diff --git a/testApp/app/flipperTest/LegacyTestView.tsx b/testApp/app/flipperTest/LegacyTestView.tsx new file mode 100644 index 0000000..99a7198 --- /dev/null +++ b/testApp/app/flipperTest/LegacyTestView.tsx @@ -0,0 +1,107 @@ +//@ts-nocheck +import {createAllTypesTestData} from './testData/createAllTypesTestData'; +import React from 'react'; + +import { + SafeAreaView, + ScrollView, + StatusBar, + useColorScheme, + View, + Button, +} from 'react-native'; + +import {Colors} from 'react-native/Libraries/NewAppScreen'; + +import {PluginTestRealmContext} from './Schemas'; + +// Write a ToDo with random ID to database +function createToDo(realm) { + let task1; + realm.write(() => { + task1 = realm.create('Info', { + _id: Math.floor(Math.random() * 100000), + name: 'go grocery shopping', + status: 'Open', + }); + console.log(`created one task: ${task1.name} with id ${task1._id}`); + }); +} +function createBanana(realm) { + let banana1; + realm.write(() => { + banana1 = realm.create('Banana', { + _id: Math.floor(Math.random() * 100000000), + name: 'Jack', + color: 'yellow', + length: 40, + weight: 309, + }); + console.log(`created one banana: ${banana1.name} with id ${banana1._id}`); + }); +} + +function deleteBanana(realm) { + realm.write(() => { + realm.delete(realm.objects('Banana')[0]); + }); +} + +function editBanana(realm) { + const bananas = realm.objects('Banana'); + + realm.write(() => { + bananas[Math.floor(Math.random() * bananas.length)].color = 'blue'; + }); +} + +const LegacyTestView: () => Node = () => { + const realm = PluginTestRealmContext.useRealm(); + // const realm2 = LegacyTestSecondRealmContext.useRealm(); + const isDarkMode = useColorScheme() === 'dark'; + + const backgroundStyle = { + backgroundColor: isDarkMode ? Colors.darker : Colors.lighter, + paddingTop: 100, + height: '100%', + }; + + return ( + + + + + + + + + + {/* */} + + + + ); +}; + +export default LegacyTestView; diff --git a/testApp/app/flipperTest/PluginTestAppNonSync.tsx b/testApp/app/flipperTest/PluginTestAppNonSync.tsx new file mode 100644 index 0000000..70e9a5c --- /dev/null +++ b/testApp/app/flipperTest/PluginTestAppNonSync.tsx @@ -0,0 +1,34 @@ +import {useState} from 'react'; +import React from 'react'; +import {FlexAlignType, View, Text, Switch} from 'react-native'; +import LegacyTestView from './LegacyTestView'; +import TaskManagerWithPlugin from './TaskManagerWrapper'; +import RealmPlugin from 'realm-flipper-plugin-device'; +import {PluginTestRealmContext} from './Schemas'; + +export default function PluginTestAppNonSync() { + const realm = PluginTestRealmContext.useRealm(); + const [isLegacyTester, setIsLegacyTester] = useState(false); + const toggleSwitch = () => setIsLegacyTester(previousState => !previousState); + const textStyle = { + color: '#fff', + padding: 20, + }; + const testSwitcherStyle = { + flexDirection: 'row' as 'row', + alignItems: 'center' as FlexAlignType, + }; + return ( + <> + + <> + + To Do App + + Legacy Tester + + {isLegacyTester ? : } + + + ); +} diff --git a/testApp/TestData/Schemas.tsx b/testApp/app/flipperTest/Schemas.tsx similarity index 85% rename from testApp/TestData/Schemas.tsx rename to testApp/app/flipperTest/Schemas.tsx index 116cd61..b0a2cd6 100644 --- a/testApp/TestData/Schemas.tsx +++ b/testApp/app/flipperTest/Schemas.tsx @@ -1,3 +1,6 @@ +import {createRealmContext} from '@realm/react'; +import {Task} from '../models/Task'; + export const Person = { name: 'Person', properties: { @@ -9,8 +12,8 @@ export const Person = { primaryKey: '_id', }; -export const TaskSchema = { - name: 'Task', +export const InfoSchema = { + name: 'Info', properties: { _id: 'int', name: 'string', @@ -27,7 +30,7 @@ export const BananaSchema = { color: 'string', length: 'int', weight: 'int', - task: 'Task?', + task: 'Info?', }, primaryKey: '_id', }; @@ -205,3 +208,26 @@ export const NoPrimaryKeyLink = { }, }, }; + +export const PluginTestRealmContext = createRealmContext({ + schema: [ + Task, + InfoSchema, + BananaSchema, + MaybeSchema, + AllTypesSchema, + NoPrimaryKey, + DictSchema, + SetsSchema, + DataSchema, + Person, + NoPrimaryKeyLink, + ], +}); + +export const LegacyTestSecondRealmContext = createRealmContext({ + schema: [Parcel, ParcelService, Delivery, MailCarrier], +}); +export const TaskRealmContext = createRealmContext({ + schema: [Task], +}); diff --git a/testApp/app/flipperTest/TaskManagerWrapper.tsx b/testApp/app/flipperTest/TaskManagerWrapper.tsx new file mode 100644 index 0000000..bb538ce --- /dev/null +++ b/testApp/app/flipperTest/TaskManagerWrapper.tsx @@ -0,0 +1,18 @@ +import {useMemo} from 'react'; +import React from 'react'; +import {Task} from '../models/Task'; +import {TaskManager} from '../components/TaskManager'; +import {PluginTestRealmContext} from './Schemas'; +const {useQuery} = PluginTestRealmContext; + +export default function TaskManagerWithPlugin() { + const result = useQuery(Task); + + const tasks = useMemo(() => result.sorted('createdAt'), [result]); + + return ( + <> + + + ); +} diff --git a/testApp/TestData/createAllTypesTestData.tsx b/testApp/app/flipperTest/testData/createAllTypesTestData.tsx similarity index 98% rename from testApp/TestData/createAllTypesTestData.tsx rename to testApp/app/flipperTest/testData/createAllTypesTestData.tsx index 177ba95..864540b 100644 --- a/testApp/TestData/createAllTypesTestData.tsx +++ b/testApp/app/flipperTest/testData/createAllTypesTestData.tsx @@ -46,10 +46,10 @@ export function createAllTypesTestData(realm: Realm) { mixed: new Date('August 17, 2020'), uuid: new UUID(), }; - // console.log(buffer); realm.write(() => { const t = realm.create('AllTypes', AllTypes1); - console.log('created alltypes', new Uint8Array(t['data'])); + //@ts-expect-error + console.log('created alltypes', new Uint8Array(t.data)); }); let uuid2 = new UUID(); diff --git a/testApp/TestData/parcelExample.tsx b/testApp/app/flipperTest/testData/createParcelTestData.tsx similarity index 100% rename from testApp/TestData/parcelExample.tsx rename to testApp/app/flipperTest/testData/createParcelTestData.tsx diff --git a/testApp/app/models/Task.ts b/testApp/app/models/Task.ts new file mode 100644 index 0000000..93f1971 --- /dev/null +++ b/testApp/app/models/Task.ts @@ -0,0 +1,26 @@ +// This TS version of the Task model shows how to create Realm objects using +// TypeScript syntax, using `@realm/babel-plugin` +// (https://github.com/realm/realm-js/blob/master/packages/babel-plugin/). +// +// If you are not using TypeScript and `@realm/babel-plugin`, you instead need +// to defining a schema on the class - see `Task.js` in the Realm example app +// for an example of this. + +import {Realm} from '@realm/react'; + +// To use a class as a Realm object type in Typescript with the `@realm/babel-plugin` plugin, +// simply define the properties on the class with the correct type and the plugin will convert +// it to a Realm schema automatically. +export class Task extends Realm.Object { + _id: Realm.BSON.ObjectId = new Realm.BSON.ObjectId(); + description!: string; + isComplete: boolean = false; + createdAt: Date = new Date(); + userId!: string; + + static primaryKey = '_id'; + + constructor(realm: Realm, description: string, userId?: string) { + super(realm, {description, userId: userId || '_SYNC_DISABLED_'}); + } +} diff --git a/testApp/app/models/index.ts b/testApp/app/models/index.ts new file mode 100644 index 0000000..0fd3d9d --- /dev/null +++ b/testApp/app/models/index.ts @@ -0,0 +1,6 @@ +import {createRealmContext} from '@realm/react'; +import {Task} from './Task'; + +export const TaskRealmContext = createRealmContext({ + schema: [Task], +}); diff --git a/testApp/app/styles/button.ts b/testApp/app/styles/button.ts new file mode 100644 index 0000000..28a0966 --- /dev/null +++ b/testApp/app/styles/button.ts @@ -0,0 +1,20 @@ +import {StyleSheet} from 'react-native'; +import colors from './colors'; + +export const buttonStyles: StyleSheet.NamedStyles = { + button: { + paddingVertical: 10, + paddingHorizontal: 20, + justifyContent: 'center', + alignItems: 'center', + marginHorizontal: 10, + borderRadius: 5, + backgroundColor: colors.purple, + }, + text: { + color: colors.white, + textAlign: 'center', + fontSize: 17, + fontWeight: 'bold', + }, +}; diff --git a/testApp/app/styles/colors.ts b/testApp/app/styles/colors.ts new file mode 100644 index 0000000..5956c5d --- /dev/null +++ b/testApp/app/styles/colors.ts @@ -0,0 +1,10 @@ +const colors = { + darkBlue: '#2A3642', + purple: '#6E60F9', + purpleDark: '#4238a6', + gray: '#B5B5B5', + white: '#FFFFFF', + black: '#000000', +}; + +export default colors; diff --git a/testApp/app/styles/shadows.ts b/testApp/app/styles/shadows.ts new file mode 100644 index 0000000..105c248 --- /dev/null +++ b/testApp/app/styles/shadows.ts @@ -0,0 +1,17 @@ +import {Platform} from 'react-native'; +import colors from './colors'; + +export const shadows = Platform.select({ + ios: { + shadowColor: colors.black, + shadowOffset: { + width: 0, + height: 4, + }, + shadowOpacity: 0.7, + shadowRadius: 3, + }, + android: { + elevation: 3, + }, +}); diff --git a/testApp/babel.config.js b/testApp/babel.config.js index f842b77..4723d5e 100644 --- a/testApp/babel.config.js +++ b/testApp/babel.config.js @@ -1,3 +1,7 @@ module.exports = { presets: ['module:metro-react-native-babel-preset'], + plugins: [ + '@realm/babel-plugin', + ['@babel/plugin-proposal-decorators', {legacy: true}], + ], }; diff --git a/testApp/index.js b/testApp/index.js index a850d03..abe35ca 100644 --- a/testApp/index.js +++ b/testApp/index.js @@ -2,8 +2,19 @@ * @format */ +import 'react-native-get-random-values'; +import React from 'react'; import {AppRegistry} from 'react-native'; -import App from './App'; +import {AppWrapperNonSync} from './app/AppWrapperNonSync'; +import {AppWrapperSync} from './app/AppWrapperSync'; import {name as appName} from './app.json'; +import {SYNC_CONFIG} from './sync.config'; + +const App = () => + SYNC_CONFIG.enabled ? ( + + ) : ( + + ); AppRegistry.registerComponent(appName, () => App); diff --git a/testApp/ios/realmApp.xcodeproj/project.pbxproj b/testApp/ios/FlipperTester.xcodeproj/project.pbxproj similarity index 72% rename from testApp/ios/realmApp.xcodeproj/project.pbxproj rename to testApp/ios/FlipperTester.xcodeproj/project.pbxproj index 9d3bec6..4414671 100644 --- a/testApp/ios/realmApp.xcodeproj/project.pbxproj +++ b/testApp/ios/FlipperTester.xcodeproj/project.pbxproj @@ -7,12 +7,12 @@ objects = { /* Begin PBXBuildFile section */ - 00E356F31AD99517003FC87E /* realmAppTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* realmAppTests.m */; }; - 0C80B921A6F3F58F76C31292 /* libPods-realmApp.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5DCACB8F33CDC322A6C60F78 /* libPods-realmApp.a */; }; + 00E356F31AD99517003FC87E /* FlipperTesterTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* FlipperTesterTests.m */; }; + 0C80B921A6F3F58F76C31292 /* libPods-FlipperTester.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5DCACB8F33CDC322A6C60F78 /* libPods-FlipperTester.a */; }; 13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.mm */; }; 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; }; 13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; }; - 7699B88040F8A987B510C191 /* libPods-realmApp-realmAppTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 19F6CBCC0A4E27FBF8BF4A61 /* libPods-realmApp-realmAppTests.a */; }; + 7699B88040F8A987B510C191 /* libPods-FlipperTester-FlipperTesterTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 19F6CBCC0A4E27FBF8BF4A61 /* libPods-FlipperTester-FlipperTesterTests.a */; }; 81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */; }; /* End PBXBuildFile section */ @@ -22,27 +22,27 @@ containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */; proxyType = 1; remoteGlobalIDString = 13B07F861A680F5B00A75B9A; - remoteInfo = realmApp; + remoteInfo = FlipperTester; }; /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ - 00E356EE1AD99517003FC87E /* realmAppTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = realmAppTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 00E356EE1AD99517003FC87E /* FlipperTesterTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = FlipperTesterTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 00E356F11AD99517003FC87E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 00E356F21AD99517003FC87E /* realmAppTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = realmAppTests.m; sourceTree = ""; }; - 13B07F961A680F5B00A75B9A /* realmApp.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = realmApp.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = realmApp/AppDelegate.h; sourceTree = ""; }; - 13B07FB01A68108700A75B9A /* AppDelegate.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = AppDelegate.mm; path = realmApp/AppDelegate.mm; sourceTree = ""; }; - 13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = realmApp/Images.xcassets; sourceTree = ""; }; - 13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = realmApp/Info.plist; sourceTree = ""; }; - 13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = realmApp/main.m; sourceTree = ""; }; - 19F6CBCC0A4E27FBF8BF4A61 /* libPods-realmApp-realmAppTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-realmApp-realmAppTests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; - 3B4392A12AC88292D35C810B /* Pods-realmApp.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-realmApp.debug.xcconfig"; path = "Target Support Files/Pods-realmApp/Pods-realmApp.debug.xcconfig"; sourceTree = ""; }; - 5709B34CF0A7D63546082F79 /* Pods-realmApp.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-realmApp.release.xcconfig"; path = "Target Support Files/Pods-realmApp/Pods-realmApp.release.xcconfig"; sourceTree = ""; }; - 5B7EB9410499542E8C5724F5 /* Pods-realmApp-realmAppTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-realmApp-realmAppTests.debug.xcconfig"; path = "Target Support Files/Pods-realmApp-realmAppTests/Pods-realmApp-realmAppTests.debug.xcconfig"; sourceTree = ""; }; - 5DCACB8F33CDC322A6C60F78 /* libPods-realmApp.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-realmApp.a"; sourceTree = BUILT_PRODUCTS_DIR; }; - 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = LaunchScreen.storyboard; path = realmApp/LaunchScreen.storyboard; sourceTree = ""; }; - 89C6BE57DB24E9ADA2F236DE /* Pods-realmApp-realmAppTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-realmApp-realmAppTests.release.xcconfig"; path = "Target Support Files/Pods-realmApp-realmAppTests/Pods-realmApp-realmAppTests.release.xcconfig"; sourceTree = ""; }; + 00E356F21AD99517003FC87E /* FlipperTesterTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FlipperTesterTests.m; sourceTree = ""; }; + 13B07F961A680F5B00A75B9A /* FlipperTester.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = FlipperTester.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = FlipperTester/AppDelegate.h; sourceTree = ""; }; + 13B07FB01A68108700A75B9A /* AppDelegate.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = AppDelegate.mm; path = FlipperTester/AppDelegate.mm; sourceTree = ""; }; + 13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = FlipperTester/Images.xcassets; sourceTree = ""; }; + 13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = FlipperTester/Info.plist; sourceTree = ""; }; + 13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = FlipperTester/main.m; sourceTree = ""; }; + 19F6CBCC0A4E27FBF8BF4A61 /* libPods-FlipperTester-FlipperTesterTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-FlipperTester-FlipperTesterTests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 3B4392A12AC88292D35C810B /* Pods-FlipperTester.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-FlipperTester.debug.xcconfig"; path = "Target Support Files/Pods-FlipperTester/Pods-FlipperTester.debug.xcconfig"; sourceTree = ""; }; + 5709B34CF0A7D63546082F79 /* Pods-FlipperTester.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-FlipperTester.release.xcconfig"; path = "Target Support Files/Pods-FlipperTester/Pods-FlipperTester.release.xcconfig"; sourceTree = ""; }; + 5B7EB9410499542E8C5724F5 /* Pods-FlipperTester-FlipperTesterTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-FlipperTester-FlipperTesterTests.debug.xcconfig"; path = "Target Support Files/Pods-FlipperTester-FlipperTesterTests/Pods-FlipperTester-FlipperTesterTests.debug.xcconfig"; sourceTree = ""; }; + 5DCACB8F33CDC322A6C60F78 /* libPods-FlipperTester.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-FlipperTester.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = LaunchScreen.storyboard; path = FlipperTester/LaunchScreen.storyboard; sourceTree = ""; }; + 89C6BE57DB24E9ADA2F236DE /* Pods-FlipperTester-FlipperTesterTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-FlipperTester-FlipperTesterTests.release.xcconfig"; path = "Target Support Files/Pods-FlipperTester-FlipperTesterTests/Pods-FlipperTester-FlipperTesterTests.release.xcconfig"; sourceTree = ""; }; ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; }; /* End PBXFileReference section */ @@ -51,7 +51,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 7699B88040F8A987B510C191 /* libPods-realmApp-realmAppTests.a in Frameworks */, + 7699B88040F8A987B510C191 /* libPods-FlipperTester-FlipperTesterTests.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -59,20 +59,20 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 0C80B921A6F3F58F76C31292 /* libPods-realmApp.a in Frameworks */, + 0C80B921A6F3F58F76C31292 /* libPods-FlipperTester.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 00E356EF1AD99517003FC87E /* realmAppTests */ = { + 00E356EF1AD99517003FC87E /* FlipperTesterTests */ = { isa = PBXGroup; children = ( - 00E356F21AD99517003FC87E /* realmAppTests.m */, + 00E356F21AD99517003FC87E /* FlipperTesterTests.m */, 00E356F01AD99517003FC87E /* Supporting Files */, ); - path = realmAppTests; + path = FlipperTesterTests; sourceTree = ""; }; 00E356F01AD99517003FC87E /* Supporting Files */ = { @@ -83,7 +83,7 @@ name = "Supporting Files"; sourceTree = ""; }; - 13B07FAE1A68108700A75B9A /* realmApp */ = { + 13B07FAE1A68108700A75B9A /* FlipperTester */ = { isa = PBXGroup; children = ( 13B07FAF1A68108700A75B9A /* AppDelegate.h */, @@ -93,15 +93,15 @@ 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */, 13B07FB71A68108700A75B9A /* main.m */, ); - name = realmApp; + name = FlipperTester; sourceTree = ""; }; 2D16E6871FA4F8E400B85C8A /* Frameworks */ = { isa = PBXGroup; children = ( ED297162215061F000B7C4FE /* JavaScriptCore.framework */, - 5DCACB8F33CDC322A6C60F78 /* libPods-realmApp.a */, - 19F6CBCC0A4E27FBF8BF4A61 /* libPods-realmApp-realmAppTests.a */, + 5DCACB8F33CDC322A6C60F78 /* libPods-FlipperTester.a */, + 19F6CBCC0A4E27FBF8BF4A61 /* libPods-FlipperTester-FlipperTesterTests.a */, ); name = Frameworks; sourceTree = ""; @@ -116,9 +116,9 @@ 83CBB9F61A601CBA00E9B192 = { isa = PBXGroup; children = ( - 13B07FAE1A68108700A75B9A /* realmApp */, + 13B07FAE1A68108700A75B9A /* FlipperTester */, 832341AE1AAA6A7D00B99B32 /* Libraries */, - 00E356EF1AD99517003FC87E /* realmAppTests */, + 00E356EF1AD99517003FC87E /* FlipperTesterTests */, 83CBBA001A601CBA00E9B192 /* Products */, 2D16E6871FA4F8E400B85C8A /* Frameworks */, BBD78D7AC51CEA395F1C20DB /* Pods */, @@ -131,8 +131,8 @@ 83CBBA001A601CBA00E9B192 /* Products */ = { isa = PBXGroup; children = ( - 13B07F961A680F5B00A75B9A /* realmApp.app */, - 00E356EE1AD99517003FC87E /* realmAppTests.xctest */, + 13B07F961A680F5B00A75B9A /* FlipperTester.app */, + 00E356EE1AD99517003FC87E /* FlipperTesterTests.xctest */, ); name = Products; sourceTree = ""; @@ -140,10 +140,10 @@ BBD78D7AC51CEA395F1C20DB /* Pods */ = { isa = PBXGroup; children = ( - 3B4392A12AC88292D35C810B /* Pods-realmApp.debug.xcconfig */, - 5709B34CF0A7D63546082F79 /* Pods-realmApp.release.xcconfig */, - 5B7EB9410499542E8C5724F5 /* Pods-realmApp-realmAppTests.debug.xcconfig */, - 89C6BE57DB24E9ADA2F236DE /* Pods-realmApp-realmAppTests.release.xcconfig */, + 3B4392A12AC88292D35C810B /* Pods-FlipperTester.debug.xcconfig */, + 5709B34CF0A7D63546082F79 /* Pods-FlipperTester.release.xcconfig */, + 5B7EB9410499542E8C5724F5 /* Pods-FlipperTester-FlipperTesterTests.debug.xcconfig */, + 89C6BE57DB24E9ADA2F236DE /* Pods-FlipperTester-FlipperTesterTests.release.xcconfig */, ); path = Pods; sourceTree = ""; @@ -151,9 +151,9 @@ /* End PBXGroup section */ /* Begin PBXNativeTarget section */ - 00E356ED1AD99517003FC87E /* realmAppTests */ = { + 00E356ED1AD99517003FC87E /* FlipperTesterTests */ = { isa = PBXNativeTarget; - buildConfigurationList = 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "realmAppTests" */; + buildConfigurationList = 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "FlipperTesterTests" */; buildPhases = ( A55EABD7B0C7F3A422A6CC61 /* [CP] Check Pods Manifest.lock */, 00E356EA1AD99517003FC87E /* Sources */, @@ -167,14 +167,14 @@ dependencies = ( 00E356F51AD99517003FC87E /* PBXTargetDependency */, ); - name = realmAppTests; - productName = realmAppTests; - productReference = 00E356EE1AD99517003FC87E /* realmAppTests.xctest */; + name = FlipperTesterTests; + productName = FlipperTesterTests; + productReference = 00E356EE1AD99517003FC87E /* FlipperTesterTests.xctest */; productType = "com.apple.product-type.bundle.unit-test"; }; - 13B07F861A680F5B00A75B9A /* realmApp */ = { + 13B07F861A680F5B00A75B9A /* FlipperTester */ = { isa = PBXNativeTarget; - buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "realmApp" */; + buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "FlipperTester" */; buildPhases = ( C38B50BA6285516D6DCD4F65 /* [CP] Check Pods Manifest.lock */, FD10A7F022414F080027D42C /* Start Packager */, @@ -189,9 +189,9 @@ ); dependencies = ( ); - name = realmApp; - productName = realmApp; - productReference = 13B07F961A680F5B00A75B9A /* realmApp.app */; + name = FlipperTester; + productName = FlipperTester; + productReference = 13B07F961A680F5B00A75B9A /* FlipperTester.app */; productType = "com.apple.product-type.application"; }; /* End PBXNativeTarget section */ @@ -211,7 +211,7 @@ }; }; }; - buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "realmApp" */; + buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "FlipperTester" */; compatibilityVersion = "Xcode 12.0"; developmentRegion = en; hasScannedForEncodings = 0; @@ -224,8 +224,8 @@ projectDirPath = ""; projectRoot = ""; targets = ( - 13B07F861A680F5B00A75B9A /* realmApp */, - 00E356ED1AD99517003FC87E /* realmAppTests */, + 13B07F861A680F5B00A75B9A /* FlipperTester */, + 00E356ED1AD99517003FC87E /* FlipperTesterTests */, ); }; /* End PBXProject section */ @@ -270,15 +270,15 @@ files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-realmApp/Pods-realmApp-frameworks-${CONFIGURATION}-input-files.xcfilelist", + "${PODS_ROOT}/Target Support Files/Pods-FlipperTester/Pods-FlipperTester-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-realmApp/Pods-realmApp-frameworks-${CONFIGURATION}-output-files.xcfilelist", + "${PODS_ROOT}/Target Support Files/Pods-FlipperTester/Pods-FlipperTester-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-realmApp/Pods-realmApp-frameworks.sh\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-FlipperTester/Pods-FlipperTester-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; A55EABD7B0C7F3A422A6CC61 /* [CP] Check Pods Manifest.lock */ = { @@ -296,7 +296,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-realmApp-realmAppTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-FlipperTester-FlipperTesterTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -318,7 +318,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-realmApp-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-FlipperTester-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -331,15 +331,15 @@ files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-realmApp-realmAppTests/Pods-realmApp-realmAppTests-frameworks-${CONFIGURATION}-input-files.xcfilelist", + "${PODS_ROOT}/Target Support Files/Pods-FlipperTester-FlipperTesterTests/Pods-FlipperTester-FlipperTesterTests-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-realmApp-realmAppTests/Pods-realmApp-realmAppTests-frameworks-${CONFIGURATION}-output-files.xcfilelist", + "${PODS_ROOT}/Target Support Files/Pods-FlipperTester-FlipperTesterTests/Pods-FlipperTester-FlipperTesterTests-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-realmApp-realmAppTests/Pods-realmApp-realmAppTests-frameworks.sh\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-FlipperTester-FlipperTesterTests/Pods-FlipperTester-FlipperTesterTests-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; E235C05ADACE081382539298 /* [CP] Copy Pods Resources */ = { @@ -348,15 +348,15 @@ files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-realmApp/Pods-realmApp-resources-${CONFIGURATION}-input-files.xcfilelist", + "${PODS_ROOT}/Target Support Files/Pods-FlipperTester/Pods-FlipperTester-resources-${CONFIGURATION}-input-files.xcfilelist", ); name = "[CP] Copy Pods Resources"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-realmApp/Pods-realmApp-resources-${CONFIGURATION}-output-files.xcfilelist", + "${PODS_ROOT}/Target Support Files/Pods-FlipperTester/Pods-FlipperTester-resources-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-realmApp/Pods-realmApp-resources.sh\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-FlipperTester/Pods-FlipperTester-resources.sh\"\n"; showEnvVarsInLog = 0; }; F6A41C54EA430FDDC6A6ED99 /* [CP] Copy Pods Resources */ = { @@ -365,15 +365,15 @@ files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-realmApp-realmAppTests/Pods-realmApp-realmAppTests-resources-${CONFIGURATION}-input-files.xcfilelist", + "${PODS_ROOT}/Target Support Files/Pods-FlipperTester-FlipperTesterTests/Pods-FlipperTester-FlipperTesterTests-resources-${CONFIGURATION}-input-files.xcfilelist", ); name = "[CP] Copy Pods Resources"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-realmApp-realmAppTests/Pods-realmApp-realmAppTests-resources-${CONFIGURATION}-output-files.xcfilelist", + "${PODS_ROOT}/Target Support Files/Pods-FlipperTester-FlipperTesterTests/Pods-FlipperTester-FlipperTesterTests-resources-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-realmApp-realmAppTests/Pods-realmApp-realmAppTests-resources.sh\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-FlipperTester-FlipperTesterTests/Pods-FlipperTester-FlipperTesterTests-resources.sh\"\n"; showEnvVarsInLog = 0; }; FD10A7F022414F080027D42C /* Start Packager */ = { @@ -402,7 +402,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 00E356F31AD99517003FC87E /* realmAppTests.m in Sources */, + 00E356F31AD99517003FC87E /* FlipperTesterTests.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -420,7 +420,7 @@ /* Begin PBXTargetDependency section */ 00E356F51AD99517003FC87E /* PBXTargetDependency */ = { isa = PBXTargetDependency; - target = 13B07F861A680F5B00A75B9A /* realmApp */; + target = 13B07F861A680F5B00A75B9A /* FlipperTester */; targetProxy = 00E356F41AD99517003FC87E /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ @@ -428,14 +428,14 @@ /* Begin XCBuildConfiguration section */ 00E356F61AD99517003FC87E /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5B7EB9410499542E8C5724F5 /* Pods-realmApp-realmAppTests.debug.xcconfig */; + baseConfigurationReference = 5B7EB9410499542E8C5724F5 /* Pods-FlipperTester-FlipperTesterTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", "$(inherited)", ); - INFOPLIST_FILE = realmAppTests/Info.plist; + INFOPLIST_FILE = FlipperTesterTests/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 11.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", @@ -449,17 +449,17 @@ ); PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/realmApp.app/realmApp"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/FlipperTester.app/FlipperTester"; }; name = Debug; }; 00E356F71AD99517003FC87E /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 89C6BE57DB24E9ADA2F236DE /* Pods-realmApp-realmAppTests.release.xcconfig */; + baseConfigurationReference = 89C6BE57DB24E9ADA2F236DE /* Pods-FlipperTester-FlipperTesterTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; COPY_PHASE_STRIP = NO; - INFOPLIST_FILE = realmAppTests/Info.plist; + INFOPLIST_FILE = FlipperTesterTests/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 11.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", @@ -473,19 +473,19 @@ ); PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/realmApp.app/realmApp"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/FlipperTester.app/FlipperTester"; }; name = Release; }; 13B07F941A680F5B00A75B9A /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3B4392A12AC88292D35C810B /* Pods-realmApp.debug.xcconfig */; + baseConfigurationReference = 3B4392A12AC88292D35C810B /* Pods-FlipperTester.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = 1; ENABLE_BITCODE = NO; - INFOPLIST_FILE = realmApp/Info.plist; + INFOPLIST_FILE = FlipperTester/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -496,7 +496,7 @@ "-lc++", ); PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = realmApp; + PRODUCT_NAME = FlipperTester; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 5.0; VERSIONING_SYSTEM = "apple-generic"; @@ -505,12 +505,12 @@ }; 13B07F951A680F5B00A75B9A /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5709B34CF0A7D63546082F79 /* Pods-realmApp.release.xcconfig */; + baseConfigurationReference = 5709B34CF0A7D63546082F79 /* Pods-FlipperTester.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = 1; - INFOPLIST_FILE = realmApp/Info.plist; + INFOPLIST_FILE = FlipperTester/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -521,7 +521,7 @@ "-lc++", ); PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = realmApp; + PRODUCT_NAME = FlipperTester; SWIFT_VERSION = 5.0; VERSIONING_SYSTEM = "apple-generic"; }; @@ -594,6 +594,7 @@ "-DFOLLY_MOBILE=1", "-DFOLLY_USE_LIBCPP=1", ); + REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native"; SDKROOT = iphoneos; }; name = Debug; @@ -657,6 +658,7 @@ "-DFOLLY_MOBILE=1", "-DFOLLY_USE_LIBCPP=1", ); + REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native"; SDKROOT = iphoneos; VALIDATE_PRODUCT = YES; }; @@ -665,7 +667,7 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "realmAppTests" */ = { + 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "FlipperTesterTests" */ = { isa = XCConfigurationList; buildConfigurations = ( 00E356F61AD99517003FC87E /* Debug */, @@ -674,7 +676,7 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "realmApp" */ = { + 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "FlipperTester" */ = { isa = XCConfigurationList; buildConfigurations = ( 13B07F941A680F5B00A75B9A /* Debug */, @@ -683,7 +685,7 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "realmApp" */ = { + 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "FlipperTester" */ = { isa = XCConfigurationList; buildConfigurations = ( 83CBBA201A601CBA00E9B192 /* Debug */, diff --git a/testApp/ios/realmApp.xcodeproj/xcshareddata/xcschemes/realmApp.xcscheme b/testApp/ios/FlipperTester.xcodeproj/xcshareddata/xcschemes/FlipperTester.xcscheme old mode 100755 new mode 100644 similarity index 79% rename from testApp/ios/realmApp.xcodeproj/xcshareddata/xcschemes/realmApp.xcscheme rename to testApp/ios/FlipperTester.xcodeproj/xcshareddata/xcschemes/FlipperTester.xcscheme index a561732..3d8b937 --- a/testApp/ios/realmApp.xcodeproj/xcshareddata/xcschemes/realmApp.xcscheme +++ b/testApp/ios/FlipperTester.xcodeproj/xcshareddata/xcschemes/FlipperTester.xcscheme @@ -15,9 +15,9 @@ + BuildableName = "FlipperTester.app" + BlueprintName = "FlipperTester" + ReferencedContainer = "container:FlipperTester.xcodeproj"> @@ -33,9 +33,9 @@ + BuildableName = "FlipperTesterTests.xctest" + BlueprintName = "FlipperTesterTests" + ReferencedContainer = "container:FlipperTester.xcodeproj"> @@ -55,9 +55,9 @@ + BuildableName = "FlipperTester.app" + BlueprintName = "FlipperTester" + ReferencedContainer = "container:FlipperTester.xcodeproj"> @@ -72,9 +72,9 @@ + BuildableName = "FlipperTester.app" + BlueprintName = "FlipperTester" + ReferencedContainer = "container:FlipperTester.xcodeproj"> diff --git a/testApp/ios/realmApp.xcworkspace/contents.xcworkspacedata b/testApp/ios/FlipperTester.xcworkspace/contents.xcworkspacedata old mode 100755 new mode 100644 similarity index 78% rename from testApp/ios/realmApp.xcworkspace/contents.xcworkspacedata rename to testApp/ios/FlipperTester.xcworkspace/contents.xcworkspacedata index 8ad7a6c..9b33189 --- a/testApp/ios/realmApp.xcworkspace/contents.xcworkspacedata +++ b/testApp/ios/FlipperTester.xcworkspace/contents.xcworkspacedata @@ -2,7 +2,7 @@ + location = "group:FlipperTester.xcodeproj"> diff --git a/testApp/ios/realmApp.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/testApp/ios/FlipperTester.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist old mode 100755 new mode 100644 similarity index 100% rename from testApp/ios/realmApp.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist rename to testApp/ios/FlipperTester.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist diff --git a/testApp/ios/realmApp/AppDelegate.h b/testApp/ios/FlipperTester/AppDelegate.h old mode 100755 new mode 100644 similarity index 100% rename from testApp/ios/realmApp/AppDelegate.h rename to testApp/ios/FlipperTester/AppDelegate.h diff --git a/testApp/ios/realmApp/AppDelegate.mm b/testApp/ios/FlipperTester/AppDelegate.mm old mode 100755 new mode 100644 similarity index 97% rename from testApp/ios/realmApp/AppDelegate.mm rename to testApp/ios/FlipperTester/AppDelegate.mm index a3058f3..b627202 --- a/testApp/ios/realmApp/AppDelegate.mm +++ b/testApp/ios/FlipperTester/AppDelegate.mm @@ -41,7 +41,7 @@ - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:( bridge.surfacePresenter = _bridgeAdapter.surfacePresenter; #endif - UIView *rootView = RCTAppSetupDefaultRootView(bridge, @"realmApp", nil); + UIView *rootView = RCTAppSetupDefaultRootView(bridge, @"FlipperTester", nil); if (@available(iOS 13.0, *)) { rootView.backgroundColor = [UIColor systemBackgroundColor]; diff --git a/testApp/ios/realmApp/Images.xcassets/AppIcon.appiconset/Contents.json b/testApp/ios/FlipperTester/Images.xcassets/AppIcon.appiconset/Contents.json old mode 100755 new mode 100644 similarity index 100% rename from testApp/ios/realmApp/Images.xcassets/AppIcon.appiconset/Contents.json rename to testApp/ios/FlipperTester/Images.xcassets/AppIcon.appiconset/Contents.json diff --git a/testApp/ios/realmApp/Images.xcassets/Contents.json b/testApp/ios/FlipperTester/Images.xcassets/Contents.json old mode 100755 new mode 100644 similarity index 100% rename from testApp/ios/realmApp/Images.xcassets/Contents.json rename to testApp/ios/FlipperTester/Images.xcassets/Contents.json diff --git a/testApp/ios/realmApp/Info.plist b/testApp/ios/FlipperTester/Info.plist old mode 100755 new mode 100644 similarity index 97% rename from testApp/ios/realmApp/Info.plist rename to testApp/ios/FlipperTester/Info.plist index 5bf3841..4e249b5 --- a/testApp/ios/realmApp/Info.plist +++ b/testApp/ios/FlipperTester/Info.plist @@ -5,7 +5,7 @@ CFBundleDevelopmentRegion en CFBundleDisplayName - realmApp + FlipperTester CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier diff --git a/testApp/ios/realmApp/LaunchScreen.storyboard b/testApp/ios/FlipperTester/LaunchScreen.storyboard old mode 100755 new mode 100644 similarity index 94% rename from testApp/ios/realmApp/LaunchScreen.storyboard rename to testApp/ios/FlipperTester/LaunchScreen.storyboard index c127e4f..0012e6c --- a/testApp/ios/realmApp/LaunchScreen.storyboard +++ b/testApp/ios/FlipperTester/LaunchScreen.storyboard @@ -16,7 +16,7 @@ -

No schemas found
; } - // eslint-disable-next-line react-hooks/rules-of-hooks const instance = usePlugin(plugin); const onSchemaSelected = (selectedSchema: SortedObjectSchema) => { @@ -201,7 +200,7 @@ const SchemaVisualizer = ({ schemas, currentSchema }: InputType) => { 'optional', 'objectType', ]; - // eslint-disable-next-line react-hooks/rules-of-hooks + // eslint-disable-next-line @typescript-eslint/no-unused-vars const columnObjs = useMemoize((_) => createColumnConfig(), [columns]); const rows = createRows(currentSchema); diff --git a/flipper-plugin-realm/yarn.lock b/flipper-plugin-realm/yarn.lock index bc88a42..ad0f7d9 100644 --- a/flipper-plugin-realm/yarn.lock +++ b/flipper-plugin-realm/yarn.lock @@ -1617,16 +1617,7 @@ "@jridgewell/set-array" "^1.0.0" "@jridgewell/sourcemap-codec" "^1.4.10" -"@jridgewell/gen-mapping@^0.3.0": - "integrity" "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==" - "resolved" "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz" - "version" "0.3.2" - dependencies: - "@jridgewell/set-array" "^1.0.1" - "@jridgewell/sourcemap-codec" "^1.4.10" - "@jridgewell/trace-mapping" "^0.3.9" - -"@jridgewell/gen-mapping@^0.3.2": +"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": "integrity" "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==" "resolved" "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz" "version" "0.3.2" @@ -2035,16 +2026,16 @@ "@types/node" "*" "form-data" "^3.0.0" -"@types/node@*", "@types/node@^17.0.31": - "integrity" "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==" - "resolved" "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz" - "version" "17.0.45" - -"@types/node@^16.11.26": +"@types/node@*", "@types/node@^16.11.26": "integrity" "sha512-aFcUkv7EddxxOa/9f74DINReQ/celqH8DiB3fRYgVDM2Xm5QJL8sl80QKuAnGvwAsMn+H3IFA6WCrQh1CY7m1A==" "resolved" "https://registry.npmjs.org/@types/node/-/node-16.11.56.tgz" "version" "16.11.56" +"@types/node@^17.0.31": + "integrity" "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==" + "resolved" "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz" + "version" "17.0.45" + "@types/parse-json@^4.0.0": "integrity" "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" "resolved" "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz" @@ -2355,7 +2346,37 @@ "resolved" "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz" "version" "1.0.1" -"ajv@^6.10.0", "ajv@^6.12.2", "ajv@^6.12.3", "ajv@^6.12.4": +"ajv@^6.10.0": + "integrity" "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==" + "resolved" "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" + "version" "6.12.6" + dependencies: + "fast-deep-equal" "^3.1.1" + "fast-json-stable-stringify" "^2.0.0" + "json-schema-traverse" "^0.4.1" + "uri-js" "^4.2.2" + +"ajv@^6.12.2": + "integrity" "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==" + "resolved" "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" + "version" "6.12.6" + dependencies: + "fast-deep-equal" "^3.1.1" + "fast-json-stable-stringify" "^2.0.0" + "json-schema-traverse" "^0.4.1" + "uri-js" "^4.2.2" + +"ajv@^6.12.3": + "integrity" "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==" + "resolved" "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" + "version" "6.12.6" + dependencies: + "fast-deep-equal" "^3.1.1" + "fast-json-stable-stringify" "^2.0.0" + "json-schema-traverse" "^0.4.1" + "uri-js" "^4.2.2" + +"ajv@^6.12.4": "integrity" "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==" "resolved" "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" "version" "6.12.6" @@ -3218,7 +3239,12 @@ "lodash.camelcase" "^4.3.0" "typical" "^4.0.0" -"commander@^2.20.0", "commander@^2.8.1": +"commander@^2.20.0": + "integrity" "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + "resolved" "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz" + "version" "2.20.3" + +"commander@^2.8.1": "integrity" "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" "resolved" "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz" "version" "2.20.3" @@ -3308,12 +3334,7 @@ "resolved" "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.23.4.tgz" "version" "3.23.4" -"core-util-is@~1.0.0": - "integrity" "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" - "resolved" "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz" - "version" "1.0.3" - -"core-util-is@1.0.2": +"core-util-is@~1.0.0", "core-util-is@1.0.2": "integrity" "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==" "resolved" "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz" "version" "1.0.2" @@ -4495,7 +4516,15 @@ "resolved" "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz" "version" "1.1.0" -"find-up@^4.0.0", "find-up@^4.1.0": +"find-up@^4.0.0": + "integrity" "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==" + "resolved" "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz" + "version" "4.1.0" + dependencies: + "locate-path" "^5.0.0" + "path-exists" "^4.0.0" + +"find-up@^4.1.0": "integrity" "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==" "resolved" "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz" "version" "4.1.0" @@ -4519,10 +4548,10 @@ "flatted" "^3.1.0" "rimraf" "^3.0.2" -"flatted@^3.1.0": - "integrity" "sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ==" - "resolved" "https://registry.npmjs.org/flatted/-/flatted-3.2.6.tgz" - "version" "3.2.6" +"flatted@^3.1.0", "flatted@^3.2.7": + "integrity" "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==" + "resolved" "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz" + "version" "3.2.7" "flipper-babel-transformer@0.153.0": "integrity" "sha512-Ar2ngL+P8L5L8/RgUrqooLf0RmDim01RilBorMyl/TEfLM8AWbdqHLiNHY5edTPhMAIkwrS6TUPxzvbgo0zsdQ==" @@ -4687,7 +4716,16 @@ "jsonfile" "^2.1.0" "klaw" "^1.0.0" -"fs-extra@^10.0.0", "fs-extra@^10.1.0": +"fs-extra@^10.0.0": + "integrity" "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==" + "resolved" "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz" + "version" "10.1.0" + dependencies: + "graceful-fs" "^4.2.0" + "jsonfile" "^6.0.1" + "universalify" "^2.0.0" + +"fs-extra@^10.1.0": "integrity" "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==" "resolved" "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz" "version" "10.1.0" @@ -4705,16 +4743,7 @@ "jsonfile" "^4.0.0" "universalify" "^0.1.0" -"fs-extra@^8.1.0": - "integrity" "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==" - "resolved" "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz" - "version" "8.1.0" - dependencies: - "graceful-fs" "^4.2.0" - "jsonfile" "^4.0.0" - "universalify" "^0.1.0" - -"fs-extra@^8.1": +"fs-extra@^8.1", "fs-extra@^8.1.0": "integrity" "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==" "resolved" "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz" "version" "8.1.0" @@ -4831,12 +4860,7 @@ dependencies: "pump" "^3.0.0" -"get-stream@^6.0.0": - "integrity" "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==" - "resolved" "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz" - "version" "6.0.1" - -"get-stream@^6.0.1": +"get-stream@^6.0.0", "get-stream@^6.0.1": "integrity" "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==" "resolved" "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz" "version" "6.0.1" @@ -4875,19 +4899,7 @@ dependencies: "is-glob" "^4.0.3" -"glob@^7.1.3", "glob@^7.1.4", "glob@^7.2.0": - "integrity" "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==" - "resolved" "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" - "version" "7.2.3" - dependencies: - "fs.realpath" "^1.0.0" - "inflight" "^1.0.4" - "inherits" "2" - "minimatch" "^3.1.1" - "once" "^1.3.0" - "path-is-absolute" "^1.0.0" - -"glob@7.2.0": +"glob@^7.1.3", "glob@^7.1.4", "glob@^7.2.0", "glob@7.2.0": "integrity" "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==" "resolved" "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz" "version" "7.2.0" @@ -5250,7 +5262,17 @@ "resolved" "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" "version" "2.0.4" -"ini@^1.3.4", "ini@^1.3.7", "ini@~1.3.0": +"ini@^1.3.4": + "integrity" "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + "resolved" "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz" + "version" "1.3.8" + +"ini@^1.3.7": + "integrity" "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + "resolved" "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz" + "version" "1.3.8" + +"ini@~1.3.0": "integrity" "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" "resolved" "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz" "version" "1.3.8" @@ -6043,7 +6065,15 @@ "resolved" "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" "version" "4.0.0" -"js-yaml@^3.13.1", "js-yaml@^3.14.1": +"js-yaml@^3.13.1": + "integrity" "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==" + "resolved" "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz" + "version" "3.14.1" + dependencies: + "argparse" "^1.0.7" + "esprima" "^4.0.0" + +"js-yaml@^3.14.1": "integrity" "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==" "resolved" "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz" "version" "3.14.1" @@ -6742,7 +6772,7 @@ "resolved" "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz" "version" "3.1.0" -"minimatch@^3.0.4", "minimatch@^3.0.5", "minimatch@^3.1.1", "minimatch@^3.1.2": +"minimatch@^3.0.4", "minimatch@^3.0.5", "minimatch@^3.1.2": "integrity" "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==" "resolved" "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" "version" "3.1.2" @@ -7127,14 +7157,7 @@ dependencies: "p-try" "^2.0.0" -"p-limit@^3.0.2": - "integrity" "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==" - "resolved" "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" - "version" "3.1.0" - dependencies: - "yocto-queue" "^0.1.0" - -"p-limit@^3.1.0": +"p-limit@^3.0.2", "p-limit@^3.1.0": "integrity" "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==" "resolved" "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" "version" "3.1.0" @@ -8369,26 +8392,32 @@ "resolved" "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz" "version" "5.7.1" -"semver@^6.0.0", "semver@^6.1.1", "semver@^6.1.2", "semver@^6.2.0", "semver@^6.3.0": +"semver@^6.0.0": "integrity" "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" "resolved" "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" "version" "6.3.0" -"semver@^7.3.2": - "integrity" "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==" - "resolved" "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz" - "version" "7.3.7" - dependencies: - "lru-cache" "^6.0.0" +"semver@^6.1.1": + "integrity" "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "resolved" "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" + "version" "6.3.0" -"semver@^7.3.5": - "integrity" "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==" - "resolved" "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz" - "version" "7.3.7" - dependencies: - "lru-cache" "^6.0.0" +"semver@^6.1.2": + "integrity" "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "resolved" "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" + "version" "6.3.0" + +"semver@^6.2.0": + "integrity" "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "resolved" "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" + "version" "6.3.0" -"semver@^7.3.7": +"semver@^6.3.0": + "integrity" "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "resolved" "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" + "version" "6.3.0" + +"semver@^7.3.2", "semver@^7.3.5", "semver@^7.3.7", "semver@7.x": "integrity" "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==" "resolved" "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz" "version" "7.3.7" @@ -8407,13 +8436,6 @@ "resolved" "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz" "version" "7.0.0" -"semver@7.x": - "integrity" "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==" - "resolved" "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz" - "version" "7.3.7" - dependencies: - "lru-cache" "^6.0.0" - "serialize-error@^2.1.0": "integrity" "sha512-ghgmKt5o4Tly5yEG/UJp8qTd0AN7Xalw4XBtDEKP655B699qMEtra1WlXeE6WIvdEG481JvRxULKsInq/iNysw==" "resolved" "https://registry.npmjs.org/serialize-error/-/serialize-error-2.1.0.tgz" @@ -9180,12 +9202,7 @@ "resolved" "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz" "version" "2.0.0" -"universalify@^0.1.0": - "integrity" "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" - "resolved" "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz" - "version" "0.1.2" - -"universalify@^0.1.2": +"universalify@^0.1.0", "universalify@^0.1.2": "integrity" "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" "resolved" "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz" "version" "0.1.2" diff --git a/realm-flipper-plugin-device/package-lock.json b/realm-flipper-plugin-device/package-lock.json index cbd54df..24375d4 100644 --- a/realm-flipper-plugin-device/package-lock.json +++ b/realm-flipper-plugin-device/package-lock.json @@ -9,8 +9,8 @@ "version": "1.0.28", "license": "Apache-2.0", "dependencies": { - "react-native-flipper": ">=0.162.0", - "realm": ">=10.20.0" + "flatted": "^3.2.7", + "react-native-flipper": ">=0.162.0" }, "devDependencies": { "@types/react": "^18.0.25", @@ -2384,12 +2384,14 @@ "node_modules/@realm/common": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/@realm/common/-/common-0.1.4.tgz", - "integrity": "sha512-bKpIRZIQ4ykribFi0igCwuvf7P4+Ex2XYKqDw1JDe6sCGAaPMwhazooyM6h32fUjtXRTbdAWH2S9JH8Xh/LrqQ==" + "integrity": "sha512-bKpIRZIQ4ykribFi0igCwuvf7P4+Ex2XYKqDw1JDe6sCGAaPMwhazooyM6h32fUjtXRTbdAWH2S9JH8Xh/LrqQ==", + "peer": true }, "node_modules/@realm/network-transport": { "version": "0.7.2", "resolved": "https://registry.npmjs.org/@realm/network-transport/-/network-transport-0.7.2.tgz", "integrity": "sha512-IZ6yd+mGOYvSMVEVFf/v5qtZOi8bk4ZBxoj25GNQFyeFKxOs1WH+z4IDZscMC2GhQ4hdmI3Sg+RUEphimtHupQ==", + "peer": true, "dependencies": { "@realm/common": "^0.1.4", "abort-controller": "^3.0.0", @@ -2489,6 +2491,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "peer": true, "dependencies": { "event-target-shim": "^5.0.0" }, @@ -2519,6 +2522,7 @@ "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -2630,6 +2634,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==", + "peer": true, "engines": { "node": ">=6" } @@ -2646,12 +2651,14 @@ "node_modules/asap": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", + "peer": true }, "node_modules/asn1": { "version": "0.2.6", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "peer": true, "dependencies": { "safer-buffer": "~2.1.0" } @@ -2660,6 +2667,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "peer": true, "engines": { "node": ">=0.8" } @@ -2709,7 +2717,8 @@ "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "peer": true }, "node_modules/atob": { "version": "2.1.2", @@ -2727,14 +2736,16 @@ "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", + "peer": true, "engines": { "node": "*" } }, "node_modules/aws4": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", - "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz", + "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==", + "peer": true }, "node_modules/babel-core": { "version": "7.0.0-bridge.0", @@ -2881,12 +2892,14 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "peer": true }, "node_modules/bcrypt-pbkdf": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "peer": true, "dependencies": { "tweetnacl": "^0.14.3" } @@ -2895,6 +2908,7 @@ "version": "1.5.0", "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "peer": true, "dependencies": { "file-uri-to-path": "1.0.0" } @@ -2903,6 +2917,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "peer": true, "dependencies": { "buffer": "^5.5.0", "inherits": "^2.0.4", @@ -2972,6 +2987,7 @@ "version": "4.4.1", "resolved": "https://registry.npmjs.org/bson/-/bson-4.4.1.tgz", "integrity": "sha512-Uu4OCZa0jouQJCKOk1EmmyqtdWAP5HVLru4lQxTwzJzxT+sJ13lVpEZU/MATDxtHiekWMAL84oQY3Xn1LpJVSg==", + "peer": true, "dependencies": { "buffer": "^5.6.0" }, @@ -2997,6 +3013,7 @@ "url": "https://feross.org/support" } ], + "peer": true, "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" @@ -3005,7 +3022,8 @@ "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "peer": true }, "node_modules/bytes": { "version": "3.0.0", @@ -3100,7 +3118,8 @@ "node_modules/caseless": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==" + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", + "peer": true }, "node_modules/chalk": { "version": "4.1.2", @@ -3122,6 +3141,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "peer": true, "engines": { "node": ">=10" } @@ -3341,6 +3361,7 @@ "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "peer": true, "dependencies": { "delayed-stream": "~1.0.0" }, @@ -3358,6 +3379,7 @@ "version": "5.2.1", "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz", "integrity": "sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==", + "peer": true, "dependencies": { "array-back": "^3.1.0", "find-replace": "^3.0.0", @@ -3369,9 +3391,9 @@ } }, "node_modules/commander": { - "version": "9.4.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.4.1.tgz", - "integrity": "sha512-5EEkTNyHNGFPD2H+c/dXXfQZYa/scCKasxWcXJaWnNJ99pnQN9Vnmqow+p+PlFPE63Q6mThaZws1T+HxfpgtPw==", + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", + "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", "peer": true, "engines": { "node": "^12.20.0 || >=14" @@ -3432,6 +3454,7 @@ "engines": [ "node >= 0.8" ], + "peer": true, "dependencies": { "buffer-from": "^1.0.0", "inherits": "^2.0.3", @@ -3443,6 +3466,7 @@ "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "peer": true, "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -3457,6 +3481,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "peer": true, "dependencies": { "safe-buffer": "~5.1.0" } @@ -3507,7 +3532,8 @@ "node_modules/core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==" + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", + "peer": true }, "node_modules/cosmiconfig": { "version": "5.2.1", @@ -3559,6 +3585,7 @@ "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", + "peer": true, "dependencies": { "assert-plus": "^1.0.0" }, @@ -3570,6 +3597,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.0.tgz", "integrity": "sha512-Vr3mLBA8qWmcuschSLAOogKgQ/Jwxulv3RNE4FXnYWRGujzrRWQI4m12fQqRkwX06C0KanhLr4hK+GydchZsaA==", + "peer": true, "engines": { "node": ">= 12" } @@ -3611,6 +3639,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "peer": true, "dependencies": { "mimic-response": "^3.1.0" }, @@ -3625,6 +3654,7 @@ "version": "0.6.0", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "peer": true, "engines": { "node": ">=4.0.0" } @@ -3667,6 +3697,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "peer": true, "engines": { "node": ">=0.4.0" } @@ -3700,6 +3731,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz", "integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==", + "peer": true, "engines": { "node": ">=8" } @@ -3708,6 +3740,7 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", + "peer": true, "dependencies": { "jsbn": "~0.1.0", "safer-buffer": "^2.1.0" @@ -3744,6 +3777,7 @@ "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "peer": true, "dependencies": { "once": "^1.4.0" } @@ -3856,6 +3890,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "peer": true, "engines": { "node": ">=6" } @@ -4004,6 +4039,7 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", + "peer": true, "engines": { "node": ">=6" } @@ -4011,7 +4047,8 @@ "node_modules/extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "peer": true }, "node_modules/extend-shallow": { "version": "3.0.2", @@ -4084,17 +4121,20 @@ "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", "engines": [ "node >=0.6.0" - ] + ], + "peer": true }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "peer": true }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "peer": true }, "node_modules/fb-watchman": { "version": "2.0.2", @@ -4119,6 +4159,7 @@ "url": "https://paypal.me/jimmywarting" } ], + "peer": true, "dependencies": { "node-domexception": "^1.0.0", "web-streams-polyfill": "^3.0.3" @@ -4130,7 +4171,8 @@ "node_modules/file-uri-to-path": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "peer": true }, "node_modules/fill-range": { "version": "7.0.1", @@ -4180,6 +4222,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz", "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==", + "peer": true, "dependencies": { "array-back": "^3.0.1" }, @@ -4200,6 +4243,11 @@ "node": ">=8" } }, + "node_modules/flatted": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==" + }, "node_modules/flow-parser": { "version": "0.121.0", "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.121.0.tgz", @@ -4222,6 +4270,7 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", + "peer": true, "engines": { "node": "*" } @@ -4230,6 +4279,7 @@ "version": "2.3.3", "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "peer": true, "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.6", @@ -4243,6 +4293,7 @@ "version": "4.0.10", "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", + "peer": true, "dependencies": { "fetch-blob": "^3.1.2" }, @@ -4274,7 +4325,8 @@ "node_modules/fs-constants": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "peer": true }, "node_modules/fs-extra": { "version": "8.1.0", @@ -4294,6 +4346,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "peer": true, "dependencies": { "minipass": "^3.0.0" }, @@ -4305,6 +4358,7 @@ "version": "3.3.6", "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "peer": true, "dependencies": { "yallist": "^4.0.0" }, @@ -4315,7 +4369,8 @@ "node_modules/fs-minipass/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "peer": true }, "node_modules/fs.realpath": { "version": "1.0.0", @@ -4384,6 +4439,7 @@ "version": "0.1.7", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", + "peer": true, "dependencies": { "assert-plus": "^1.0.0" } @@ -4391,7 +4447,8 @@ "node_modules/github-from-package": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", - "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==" + "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", + "peer": true }, "node_modules/glob": { "version": "7.2.3", @@ -4425,12 +4482,14 @@ "node_modules/graceful-fs": { "version": "4.2.10", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "peer": true }, "node_modules/har-schema": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", + "peer": true, "engines": { "node": ">=4" } @@ -4440,6 +4499,7 @@ "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", "deprecated": "this library is no longer supported", + "peer": true, "dependencies": { "ajv": "^6.12.3", "har-schema": "^2.0.0" @@ -4562,6 +4622,7 @@ "version": "2.5.1", "resolved": "https://registry.npmjs.org/http-basic/-/http-basic-2.5.1.tgz", "integrity": "sha512-q/qOkgjcnZ90v0wSaMwamhfAhIf6lhOsH0ehHFnQHAt1lA9MedSnmqEEnh8bq0njTBAK3IsmS2gEuXryfWCDkw==", + "peer": true, "dependencies": { "caseless": "~0.11.0", "concat-stream": "^1.4.6", @@ -4571,7 +4632,8 @@ "node_modules/http-basic/node_modules/caseless": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz", - "integrity": "sha512-ODLXH644w9C2fMPAm7bMDQ3GRvipZWZfKc+8As6hIadRIelE0n0xZuN38NS6kiK3KPEVrpymmQD8bvncAHWQkQ==" + "integrity": "sha512-ODLXH644w9C2fMPAm7bMDQ3GRvipZWZfKc+8As6hIadRIelE0n0xZuN38NS6kiK3KPEVrpymmQD8bvncAHWQkQ==", + "peer": true }, "node_modules/http-errors": { "version": "2.0.0", @@ -4601,12 +4663,14 @@ "node_modules/http-response-object": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/http-response-object/-/http-response-object-1.1.0.tgz", - "integrity": "sha512-adERueQxEMtIfGk4ee/9CG7AGUjS09OyHeKrubTjmHUsEVXesrGlZLWYnCL8fajPZIX9H4NDnXyyzBPrF078sA==" + "integrity": "sha512-adERueQxEMtIfGk4ee/9CG7AGUjS09OyHeKrubTjmHUsEVXesrGlZLWYnCL8fajPZIX9H4NDnXyyzBPrF078sA==", + "peer": true }, "node_modules/http-signature": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", + "peer": true, "dependencies": { "assert-plus": "^1.0.0", "jsprim": "^1.2.2", @@ -4634,7 +4698,8 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "peer": true }, "node_modules/image-size": { "version": "0.6.3", @@ -4683,12 +4748,14 @@ "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "peer": true }, "node_modules/ini": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "peer": true }, "node_modules/invariant": { "version": "2.2.4", @@ -4838,7 +4905,8 @@ "node_modules/is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "peer": true }, "node_modules/is-unicode-supported": { "version": "0.1.0", @@ -4873,7 +4941,8 @@ "node_modules/isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "peer": true }, "node_modules/isexe": { "version": "2.0.0", @@ -4893,7 +4962,8 @@ "node_modules/isstream": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==" + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", + "peer": true }, "node_modules/jest-get-type": { "version": "26.3.0", @@ -5045,7 +5115,8 @@ "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "peer": true }, "node_modules/js-yaml": { "version": "3.14.1", @@ -5063,7 +5134,8 @@ "node_modules/jsbn": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==" + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", + "peer": true }, "node_modules/jsc-android": { "version": "250230.2.1", @@ -5279,17 +5351,20 @@ "node_modules/json-schema": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "peer": true }, "node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "peer": true }, "node_modules/json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==" + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "peer": true }, "node_modules/json5": { "version": "2.2.3", @@ -5307,6 +5382,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "peer": true, "optionalDependencies": { "graceful-fs": "^4.1.6" } @@ -5315,6 +5391,7 @@ "version": "1.4.2", "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", + "peer": true, "dependencies": { "assert-plus": "1.0.0", "extsprintf": "1.3.0", @@ -5376,7 +5453,8 @@ "node_modules/lodash.camelcase": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==" + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", + "peer": true }, "node_modules/lodash.debounce": { "version": "4.0.8", @@ -5424,6 +5502,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "peer": true, "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" }, @@ -5957,6 +6036,7 @@ "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "peer": true, "engines": { "node": ">= 0.6" } @@ -5965,6 +6045,7 @@ "version": "2.1.35", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "peer": true, "dependencies": { "mime-db": "1.52.0" }, @@ -5985,6 +6066,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "peer": true, "engines": { "node": ">=10" }, @@ -6008,6 +6090,7 @@ "version": "1.2.7", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", + "peer": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -6016,6 +6099,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.0.0.tgz", "integrity": "sha512-g2Uuh2jEKoht+zvO6vJqXmYpflPqzRBT+Th2h01DKh5z7wbY/AZ2gCQ78cP70YoHPyFdY30YBV5WxgLOEwOykw==", + "peer": true, "dependencies": { "yallist": "^4.0.0" }, @@ -6026,12 +6110,14 @@ "node_modules/minipass/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "peer": true }, "node_modules/minizlib": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "peer": true, "dependencies": { "minipass": "^3.0.0", "yallist": "^4.0.0" @@ -6044,6 +6130,7 @@ "version": "3.3.6", "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "peer": true, "dependencies": { "yallist": "^4.0.0" }, @@ -6054,7 +6141,8 @@ "node_modules/minizlib/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "peer": true }, "node_modules/mixin-deep": { "version": "1.3.2", @@ -6084,7 +6172,8 @@ "node_modules/mkdirp-classic": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "peer": true }, "node_modules/ms": { "version": "2.0.0", @@ -6117,7 +6206,8 @@ "node_modules/napi-build-utils": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", - "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==" + "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==", + "peer": true }, "node_modules/negotiator": { "version": "0.6.3", @@ -6153,6 +6243,7 @@ "version": "3.30.0", "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.30.0.tgz", "integrity": "sha512-qWO5l3SCqbwQavymOmtTVuCWZE23++S+rxyoHjXqUmPyzRcaoI4lA2gO55/drddGnedAyjA7sk76SfQ5lfUMnw==", + "peer": true, "dependencies": { "semver": "^7.3.5" }, @@ -6164,6 +6255,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "peer": true, "dependencies": { "yallist": "^4.0.0" }, @@ -6175,6 +6267,7 @@ "version": "7.3.8", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "peer": true, "dependencies": { "lru-cache": "^6.0.0" }, @@ -6188,12 +6281,14 @@ "node_modules/node-abi/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "peer": true }, "node_modules/node-addon-api": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.2.0.tgz", - "integrity": "sha512-eazsqzwG2lskuzBqCGPi7Ac2UgOoMz8JVOXVhTvvPDYhthvNpefx8jWD8Np7Gv+2Sz0FlPWZk0nJV0z598Wn8Q==" + "integrity": "sha512-eazsqzwG2lskuzBqCGPi7Ac2UgOoMz8JVOXVhTvvPDYhthvNpefx8jWD8Np7Gv+2Sz0FlPWZk0nJV0z598Wn8Q==", + "peer": true }, "node_modules/node-dir": { "version": "0.1.17", @@ -6221,6 +6316,7 @@ "url": "https://paypal.me/jimmywarting" } ], + "peer": true, "engines": { "node": ">=10.5.0" } @@ -6229,6 +6325,7 @@ "version": "2.6.7", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "peer": true, "dependencies": { "whatwg-url": "^5.0.0" }, @@ -6253,7 +6350,8 @@ "node_modules/node-machine-id": { "version": "1.1.12", "resolved": "https://registry.npmjs.org/node-machine-id/-/node-machine-id-1.1.12.tgz", - "integrity": "sha512-QNABxbrPa3qEIfrE6GOJ7BYIuignnJw7iQ2YPbc3Nla1HzRJjXzZOiikfF8m7eAMfichLt3M4VgLOetqgDmgGQ==" + "integrity": "sha512-QNABxbrPa3qEIfrE6GOJ7BYIuignnJw7iQ2YPbc3Nla1HzRJjXzZOiikfF8m7eAMfichLt3M4VgLOetqgDmgGQ==", + "peer": true }, "node_modules/node-releases": { "version": "2.0.8", @@ -6305,6 +6403,7 @@ "version": "0.9.0", "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "peer": true, "engines": { "node": "*" } @@ -6319,6 +6418,7 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "peer": true, "engines": { "node": ">=0.10.0" } @@ -6457,6 +6557,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "peer": true, "dependencies": { "wrappy": "1" } @@ -6643,7 +6744,8 @@ "node_modules/performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==" + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", + "peer": true }, "node_modules/picocolors": { "version": "1.0.0", @@ -6752,6 +6854,7 @@ "version": "7.1.1", "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.1.tgz", "integrity": "sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==", + "peer": true, "dependencies": { "detect-libc": "^2.0.0", "expand-template": "^2.0.3", @@ -6816,12 +6919,14 @@ "node_modules/process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "peer": true }, "node_modules/progress": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "peer": true, "engines": { "node": ">=0.4.0" } @@ -6852,6 +6957,7 @@ "version": "15.8.1", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "peer": true, "dependencies": { "loose-envify": "^1.4.0", "object-assign": "^4.1.1", @@ -6861,17 +6967,20 @@ "node_modules/prop-types/node_modules/react-is": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "peer": true }, "node_modules/psl": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", + "peer": true }, "node_modules/pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "peer": true, "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -6881,6 +6990,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "peer": true, "engines": { "node": ">=6" } @@ -6889,6 +6999,7 @@ "version": "6.5.3", "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", + "peer": true, "engines": { "node": ">=0.6" } @@ -6896,7 +7007,8 @@ "node_modules/querystringify": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "peer": true }, "node_modules/range-parser": { "version": "1.2.1", @@ -6911,6 +7023,7 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "peer": true, "dependencies": { "deep-extend": "^0.6.0", "ini": "~1.3.0", @@ -7072,6 +7185,7 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "peer": true, "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -7092,6 +7206,7 @@ "resolved": "https://registry.npmjs.org/realm/-/realm-11.3.1.tgz", "integrity": "sha512-yctWhfHp4RlQSXXSCJ3+QNK5Nq8ZEiMlO9DLmtrDbSQD0CntfarTDnU55okXWuCkpzykxPO8y5zotA3QVkZcZg==", "hasInstallScript": true, + "peer": true, "dependencies": { "@realm/common": "^0.1.4", "@realm/network-transport": "^0.7.2", @@ -7130,6 +7245,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-2.1.0.tgz", "integrity": "sha512-Q89Z26KAfA3lpPGhbF6XMfYAm3jIV3avViy6KOJ2JLzFbeWHOvPQUu5aSJIWXap3gDZC2y1eF5HXEPI2wGqgvw==", + "peer": true, "engines": { "node": ">=0.10.0" } @@ -7138,6 +7254,7 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", + "peer": true, "dependencies": { "graceful-fs": "^4.1.2", "jsonfile": "^4.0.0", @@ -7148,6 +7265,7 @@ "version": "3.3.0", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.0.tgz", "integrity": "sha512-BKwRP/O0UvoMKp7GNdwPlObhYGB5DQqwhEDQlNKuoqwVYSxkSZCSbHjnFFmUEtwSKRPU4kNK8PbDYYitwaE3QA==", + "peer": true, "dependencies": { "data-uri-to-buffer": "^4.0.0", "fetch-blob": "^3.1.4", @@ -7298,6 +7416,7 @@ "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", + "peer": true, "dependencies": { "aws-sign2": "~0.7.0", "aws4": "^1.8.0", @@ -7342,7 +7461,8 @@ "node_modules/requires-port": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "peer": true }, "node_modules/resolve": { "version": "1.22.1", @@ -7453,7 +7573,8 @@ "node_modules/safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "peer": true }, "node_modules/safe-regex": { "version": "1.1.0", @@ -7467,7 +7588,8 @@ "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "peer": true }, "node_modules/scheduler": { "version": "0.22.0", @@ -7687,7 +7809,8 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "peer": true }, "node_modules/simple-get": { "version": "4.0.1", @@ -7707,6 +7830,7 @@ "url": "https://feross.org/support" } ], + "peer": true, "dependencies": { "decompress-response": "^6.0.0", "once": "^1.3.1", @@ -8022,6 +8146,7 @@ "version": "1.17.0", "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", + "peer": true, "dependencies": { "asn1": "~0.2.3", "assert-plus": "^1.0.0", @@ -8169,6 +8294,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/stream-counter/-/stream-counter-1.0.0.tgz", "integrity": "sha512-4nfHc1016AhNOs0CFDR3S0FNeqnYbT7xZ408coajcx2Msj8malNNjvFHzWYIfIAXNK5i0eaKIVfgBYPOkyOTIg==", + "peer": true, "engines": { "node": ">=0.10.20" } @@ -8177,6 +8303,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "peer": true, "dependencies": { "safe-buffer": "~5.2.0" } @@ -8198,7 +8325,8 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "peer": true }, "node_modules/string-width": { "version": "4.2.3", @@ -8269,6 +8397,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "peer": true, "engines": { "node": ">=0.10.0" } @@ -8306,6 +8435,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/sync-request/-/sync-request-3.0.1.tgz", "integrity": "sha512-bnOSypECs6aB9ScWHcJAkS9z55jOhO3tdLefLfJ+J58vC2HCi5tjxmFMxLv0RxvuAFFQ/G4BupVehqpAlbi+3Q==", + "peer": true, "dependencies": { "concat-stream": "^1.4.7", "http-response-object": "^1.0.1", @@ -8316,6 +8446,7 @@ "version": "6.1.13", "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.13.tgz", "integrity": "sha512-jdIBIN6LTIe2jqzay/2vtYLlBHa3JF42ot3h1dW8Q0PaAG4v8rm0cvpVePtau5C6OKXGGcgO9q2AMNSWxiLqKw==", + "peer": true, "dependencies": { "chownr": "^2.0.0", "fs-minipass": "^2.0.0", @@ -8332,6 +8463,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "peer": true, "dependencies": { "chownr": "^1.1.1", "mkdirp-classic": "^0.5.2", @@ -8342,12 +8474,14 @@ "node_modules/tar-fs/node_modules/chownr": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "peer": true }, "node_modules/tar-stream": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "peer": true, "dependencies": { "bl": "^4.0.3", "end-of-stream": "^1.4.1", @@ -8363,6 +8497,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "peer": true, "bin": { "mkdirp": "bin/cmd.js" }, @@ -8373,7 +8508,8 @@ "node_modules/tar/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "peer": true }, "node_modules/temp": { "version": "0.8.3", @@ -8401,6 +8537,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/then-request/-/then-request-2.2.0.tgz", "integrity": "sha512-YM/Fho1bQ3JFX9dgFQsBswc3aSTePXvtNHl3aXJTZNz/444yC86EVJR92aWMRNA0O9X0UfmojyCTUcT8Lbo5yA==", + "peer": true, "dependencies": { "caseless": "~0.11.0", "concat-stream": "^1.4.7", @@ -8413,12 +8550,14 @@ "node_modules/then-request/node_modules/caseless": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz", - "integrity": "sha512-ODLXH644w9C2fMPAm7bMDQ3GRvipZWZfKc+8As6hIadRIelE0n0xZuN38NS6kiK3KPEVrpymmQD8bvncAHWQkQ==" + "integrity": "sha512-ODLXH644w9C2fMPAm7bMDQ3GRvipZWZfKc+8As6hIadRIelE0n0xZuN38NS6kiK3KPEVrpymmQD8bvncAHWQkQ==", + "peer": true }, "node_modules/then-request/node_modules/promise": { "version": "7.3.1", "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "peer": true, "dependencies": { "asap": "~2.0.3" } @@ -8542,6 +8681,7 @@ "version": "2.5.0", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "peer": true, "dependencies": { "psl": "^1.1.28", "punycode": "^2.1.1" @@ -8553,7 +8693,8 @@ "node_modules/tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "peer": true }, "node_modules/tslib": { "version": "2.4.1", @@ -8565,6 +8706,7 @@ "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "peer": true, "dependencies": { "safe-buffer": "^5.0.1" }, @@ -8575,7 +8717,8 @@ "node_modules/tweetnacl": { "version": "0.14.5", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==" + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", + "peer": true }, "node_modules/type-fest": { "version": "0.7.1", @@ -8589,7 +8732,8 @@ "node_modules/typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==" + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", + "peer": true }, "node_modules/typescript": { "version": "4.9.4", @@ -8609,6 +8753,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz", "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==", + "peer": true, "engines": { "node": ">=8" } @@ -8713,6 +8858,7 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "peer": true, "engines": { "node": ">= 4.0.0" } @@ -8804,6 +8950,7 @@ "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "peer": true, "dependencies": { "punycode": "^2.1.0" } @@ -8819,6 +8966,7 @@ "version": "1.5.10", "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "peer": true, "dependencies": { "querystringify": "^2.1.1", "requires-port": "^1.0.0" @@ -8845,7 +8993,8 @@ "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "peer": true }, "node_modules/utils-merge": { "version": "1.0.1", @@ -8861,6 +9010,7 @@ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "peer": true, "bin": { "uuid": "bin/uuid" } @@ -8881,6 +9031,7 @@ "engines": [ "node >=0.6.0" ], + "peer": true, "dependencies": { "assert-plus": "^1.0.0", "core-util-is": "1.0.2", @@ -8915,6 +9066,7 @@ "version": "3.2.1", "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz", "integrity": "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==", + "peer": true, "engines": { "node": ">= 8" } @@ -8922,7 +9074,8 @@ "node_modules/webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "peer": true }, "node_modules/whatwg-fetch": { "version": "3.6.2", @@ -8934,6 +9087,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "peer": true, "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" @@ -8986,7 +9140,8 @@ "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "peer": true }, "node_modules/write-file-atomic": { "version": "2.4.3", @@ -10787,12 +10942,14 @@ "@realm/common": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/@realm/common/-/common-0.1.4.tgz", - "integrity": "sha512-bKpIRZIQ4ykribFi0igCwuvf7P4+Ex2XYKqDw1JDe6sCGAaPMwhazooyM6h32fUjtXRTbdAWH2S9JH8Xh/LrqQ==" + "integrity": "sha512-bKpIRZIQ4ykribFi0igCwuvf7P4+Ex2XYKqDw1JDe6sCGAaPMwhazooyM6h32fUjtXRTbdAWH2S9JH8Xh/LrqQ==", + "peer": true }, "@realm/network-transport": { "version": "0.7.2", "resolved": "https://registry.npmjs.org/@realm/network-transport/-/network-transport-0.7.2.tgz", "integrity": "sha512-IZ6yd+mGOYvSMVEVFf/v5qtZOi8bk4ZBxoj25GNQFyeFKxOs1WH+z4IDZscMC2GhQ4hdmI3Sg+RUEphimtHupQ==", + "peer": true, "requires": { "@realm/common": "^0.1.4", "abort-controller": "^3.0.0", @@ -10892,6 +11049,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "peer": true, "requires": { "event-target-shim": "^5.0.0" } @@ -10916,6 +11074,7 @@ "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "peer": true, "requires": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -11001,7 +11160,8 @@ "array-back": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", - "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==" + "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==", + "peer": true }, "array-unique": { "version": "0.3.2", @@ -11012,12 +11172,14 @@ "asap": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", + "peer": true }, "asn1": { "version": "0.2.6", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "peer": true, "requires": { "safer-buffer": "~2.1.0" } @@ -11025,7 +11187,8 @@ "assert-plus": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==" + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "peer": true }, "assign-symbols": { "version": "1.0.0", @@ -11063,7 +11226,8 @@ "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "peer": true }, "atob": { "version": "2.1.2", @@ -11074,12 +11238,14 @@ "aws-sign2": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==" + "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", + "peer": true }, "aws4": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", - "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz", + "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==", + "peer": true }, "babel-core": { "version": "7.0.0-bridge.0", @@ -11194,12 +11360,14 @@ "base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "peer": true }, "bcrypt-pbkdf": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "peer": true, "requires": { "tweetnacl": "^0.14.3" } @@ -11208,6 +11376,7 @@ "version": "1.5.0", "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "peer": true, "requires": { "file-uri-to-path": "1.0.0" } @@ -11216,6 +11385,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "peer": true, "requires": { "buffer": "^5.5.0", "inherits": "^2.0.4", @@ -11266,6 +11436,7 @@ "version": "4.4.1", "resolved": "https://registry.npmjs.org/bson/-/bson-4.4.1.tgz", "integrity": "sha512-Uu4OCZa0jouQJCKOk1EmmyqtdWAP5HVLru4lQxTwzJzxT+sJ13lVpEZU/MATDxtHiekWMAL84oQY3Xn1LpJVSg==", + "peer": true, "requires": { "buffer": "^5.6.0" } @@ -11274,6 +11445,7 @@ "version": "5.7.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "peer": true, "requires": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" @@ -11282,7 +11454,8 @@ "buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "peer": true }, "bytes": { "version": "3.0.0", @@ -11346,7 +11519,8 @@ "caseless": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==" + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", + "peer": true }, "chalk": { "version": "4.1.2", @@ -11361,7 +11535,8 @@ "chownr": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==" + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "peer": true }, "ci-info": { "version": "2.0.0", @@ -11538,6 +11713,7 @@ "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "peer": true, "requires": { "delayed-stream": "~1.0.0" } @@ -11552,6 +11728,7 @@ "version": "5.2.1", "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz", "integrity": "sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==", + "peer": true, "requires": { "array-back": "^3.1.0", "find-replace": "^3.0.0", @@ -11560,9 +11737,9 @@ } }, "commander": { - "version": "9.4.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.4.1.tgz", - "integrity": "sha512-5EEkTNyHNGFPD2H+c/dXXfQZYa/scCKasxWcXJaWnNJ99pnQN9Vnmqow+p+PlFPE63Q6mThaZws1T+HxfpgtPw==", + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", + "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", "peer": true }, "commondir": { @@ -11611,6 +11788,7 @@ "version": "1.6.2", "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "peer": true, "requires": { "buffer-from": "^1.0.0", "inherits": "^2.0.3", @@ -11622,6 +11800,7 @@ "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "peer": true, "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -11636,6 +11815,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "peer": true, "requires": { "safe-buffer": "~5.1.0" } @@ -11678,7 +11858,8 @@ "core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==" + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", + "peer": true }, "cosmiconfig": { "version": "5.2.1", @@ -11723,6 +11904,7 @@ "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", + "peer": true, "requires": { "assert-plus": "^1.0.0" } @@ -11730,7 +11912,8 @@ "data-uri-to-buffer": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.0.tgz", - "integrity": "sha512-Vr3mLBA8qWmcuschSLAOogKgQ/Jwxulv3RNE4FXnYWRGujzrRWQI4m12fQqRkwX06C0KanhLr4hK+GydchZsaA==" + "integrity": "sha512-Vr3mLBA8qWmcuschSLAOogKgQ/Jwxulv3RNE4FXnYWRGujzrRWQI4m12fQqRkwX06C0KanhLr4hK+GydchZsaA==", + "peer": true }, "dayjs": { "version": "1.11.7", @@ -11763,6 +11946,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "peer": true, "requires": { "mimic-response": "^3.1.0" } @@ -11770,7 +11954,8 @@ "deep-extend": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "peer": true }, "deepmerge": { "version": "3.3.0", @@ -11800,7 +11985,8 @@ "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "peer": true }, "denodeify": { "version": "1.2.1", @@ -11823,12 +12009,14 @@ "detect-libc": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz", - "integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==" + "integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==", + "peer": true }, "ecc-jsbn": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", + "peer": true, "requires": { "jsbn": "~0.1.0", "safer-buffer": "^2.1.0" @@ -11862,6 +12050,7 @@ "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "peer": true, "requires": { "once": "^1.4.0" } @@ -11945,7 +12134,8 @@ "event-target-shim": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==" + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "peer": true }, "execa": { "version": "1.0.0", @@ -12063,12 +12253,14 @@ "expand-template": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", - "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==" + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", + "peer": true }, "extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "peer": true }, "extend-shallow": { "version": "3.0.2", @@ -12125,17 +12317,20 @@ "extsprintf": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==" + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", + "peer": true }, "fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "peer": true }, "fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "peer": true }, "fb-watchman": { "version": "2.0.2", @@ -12150,6 +12345,7 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", + "peer": true, "requires": { "node-domexception": "^1.0.0", "web-streams-polyfill": "^3.0.3" @@ -12158,7 +12354,8 @@ "file-uri-to-path": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "peer": true }, "fill-range": { "version": "7.0.1", @@ -12199,6 +12396,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz", "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==", + "peer": true, "requires": { "array-back": "^3.0.1" } @@ -12213,6 +12411,11 @@ "path-exists": "^4.0.0" } }, + "flatted": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==" + }, "flow-parser": { "version": "0.121.0", "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.121.0.tgz", @@ -12228,12 +12431,14 @@ "forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==" + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", + "peer": true }, "form-data": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "peer": true, "requires": { "asynckit": "^0.4.0", "combined-stream": "^1.0.6", @@ -12244,6 +12449,7 @@ "version": "4.0.10", "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", + "peer": true, "requires": { "fetch-blob": "^3.1.2" } @@ -12266,7 +12472,8 @@ "fs-constants": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "peer": true }, "fs-extra": { "version": "8.1.0", @@ -12283,6 +12490,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "peer": true, "requires": { "minipass": "^3.0.0" }, @@ -12291,6 +12499,7 @@ "version": "3.3.6", "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "peer": true, "requires": { "yallist": "^4.0.0" } @@ -12298,7 +12507,8 @@ "yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "peer": true } } }, @@ -12350,6 +12560,7 @@ "version": "0.1.7", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", + "peer": true, "requires": { "assert-plus": "^1.0.0" } @@ -12357,7 +12568,8 @@ "github-from-package": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", - "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==" + "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", + "peer": true }, "glob": { "version": "7.2.3", @@ -12382,17 +12594,20 @@ "graceful-fs": { "version": "4.2.10", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "peer": true }, "har-schema": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==" + "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", + "peer": true }, "har-validator": { "version": "5.1.5", "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "peer": true, "requires": { "ajv": "^6.12.3", "har-schema": "^2.0.0" @@ -12492,6 +12707,7 @@ "version": "2.5.1", "resolved": "https://registry.npmjs.org/http-basic/-/http-basic-2.5.1.tgz", "integrity": "sha512-q/qOkgjcnZ90v0wSaMwamhfAhIf6lhOsH0ehHFnQHAt1lA9MedSnmqEEnh8bq0njTBAK3IsmS2gEuXryfWCDkw==", + "peer": true, "requires": { "caseless": "~0.11.0", "concat-stream": "^1.4.6", @@ -12501,7 +12717,8 @@ "caseless": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz", - "integrity": "sha512-ODLXH644w9C2fMPAm7bMDQ3GRvipZWZfKc+8As6hIadRIelE0n0xZuN38NS6kiK3KPEVrpymmQD8bvncAHWQkQ==" + "integrity": "sha512-ODLXH644w9C2fMPAm7bMDQ3GRvipZWZfKc+8As6hIadRIelE0n0xZuN38NS6kiK3KPEVrpymmQD8bvncAHWQkQ==", + "peer": true } } }, @@ -12529,12 +12746,14 @@ "http-response-object": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/http-response-object/-/http-response-object-1.1.0.tgz", - "integrity": "sha512-adERueQxEMtIfGk4ee/9CG7AGUjS09OyHeKrubTjmHUsEVXesrGlZLWYnCL8fajPZIX9H4NDnXyyzBPrF078sA==" + "integrity": "sha512-adERueQxEMtIfGk4ee/9CG7AGUjS09OyHeKrubTjmHUsEVXesrGlZLWYnCL8fajPZIX9H4NDnXyyzBPrF078sA==", + "peer": true }, "http-signature": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", + "peer": true, "requires": { "assert-plus": "^1.0.0", "jsprim": "^1.2.2", @@ -12544,7 +12763,8 @@ "ieee754": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "peer": true }, "image-size": { "version": "0.6.3", @@ -12581,12 +12801,14 @@ "inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "peer": true }, "ini": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "peer": true }, "invariant": { "version": "2.2.4", @@ -12703,7 +12925,8 @@ "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "peer": true }, "is-unicode-supported": { "version": "0.1.0", @@ -12726,7 +12949,8 @@ "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "peer": true }, "isexe": { "version": "2.0.0", @@ -12743,7 +12967,8 @@ "isstream": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==" + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", + "peer": true }, "jest-get-type": { "version": "26.3.0", @@ -12865,7 +13090,8 @@ "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "peer": true }, "js-yaml": { "version": "3.14.1", @@ -12880,7 +13106,8 @@ "jsbn": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==" + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", + "peer": true }, "jsc-android": { "version": "250230.2.1", @@ -13059,17 +13286,20 @@ "json-schema": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "peer": true }, "json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "peer": true }, "json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==" + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "peer": true }, "json5": { "version": "2.2.3", @@ -13081,6 +13311,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "peer": true, "requires": { "graceful-fs": "^4.1.6" } @@ -13089,6 +13320,7 @@ "version": "1.4.2", "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", + "peer": true, "requires": { "assert-plus": "1.0.0", "extsprintf": "1.3.0", @@ -13135,7 +13367,8 @@ "lodash.camelcase": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==" + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", + "peer": true }, "lodash.debounce": { "version": "4.0.8", @@ -13174,6 +13407,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "peer": true, "requires": { "js-tokens": "^3.0.0 || ^4.0.0" } @@ -13632,12 +13866,14 @@ "mime-db": { "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "peer": true }, "mime-types": { "version": "2.1.35", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "peer": true, "requires": { "mime-db": "1.52.0" } @@ -13651,7 +13887,8 @@ "mimic-response": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==" + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "peer": true }, "minimatch": { "version": "3.1.2", @@ -13665,12 +13902,14 @@ "minimist": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", - "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==" + "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", + "peer": true }, "minipass": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.0.0.tgz", "integrity": "sha512-g2Uuh2jEKoht+zvO6vJqXmYpflPqzRBT+Th2h01DKh5z7wbY/AZ2gCQ78cP70YoHPyFdY30YBV5WxgLOEwOykw==", + "peer": true, "requires": { "yallist": "^4.0.0" }, @@ -13678,7 +13917,8 @@ "yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "peer": true } } }, @@ -13686,6 +13926,7 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "peer": true, "requires": { "minipass": "^3.0.0", "yallist": "^4.0.0" @@ -13695,6 +13936,7 @@ "version": "3.3.6", "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "peer": true, "requires": { "yallist": "^4.0.0" } @@ -13702,7 +13944,8 @@ "yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "peer": true } } }, @@ -13728,7 +13971,8 @@ "mkdirp-classic": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "peer": true }, "ms": { "version": "2.0.0", @@ -13758,7 +14002,8 @@ "napi-build-utils": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", - "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==" + "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==", + "peer": true }, "negotiator": { "version": "0.6.3", @@ -13788,6 +14033,7 @@ "version": "3.30.0", "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.30.0.tgz", "integrity": "sha512-qWO5l3SCqbwQavymOmtTVuCWZE23++S+rxyoHjXqUmPyzRcaoI4lA2gO55/drddGnedAyjA7sk76SfQ5lfUMnw==", + "peer": true, "requires": { "semver": "^7.3.5" }, @@ -13796,6 +14042,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "peer": true, "requires": { "yallist": "^4.0.0" } @@ -13804,6 +14051,7 @@ "version": "7.3.8", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "peer": true, "requires": { "lru-cache": "^6.0.0" } @@ -13811,14 +14059,16 @@ "yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "peer": true } } }, "node-addon-api": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.2.0.tgz", - "integrity": "sha512-eazsqzwG2lskuzBqCGPi7Ac2UgOoMz8JVOXVhTvvPDYhthvNpefx8jWD8Np7Gv+2Sz0FlPWZk0nJV0z598Wn8Q==" + "integrity": "sha512-eazsqzwG2lskuzBqCGPi7Ac2UgOoMz8JVOXVhTvvPDYhthvNpefx8jWD8Np7Gv+2Sz0FlPWZk0nJV0z598Wn8Q==", + "peer": true }, "node-dir": { "version": "0.1.17", @@ -13832,12 +14082,14 @@ "node-domexception": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", - "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==" + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", + "peer": true }, "node-fetch": { "version": "2.6.7", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "peer": true, "requires": { "whatwg-url": "^5.0.0" } @@ -13851,7 +14103,8 @@ "node-machine-id": { "version": "1.1.12", "resolved": "https://registry.npmjs.org/node-machine-id/-/node-machine-id-1.1.12.tgz", - "integrity": "sha512-QNABxbrPa3qEIfrE6GOJ7BYIuignnJw7iQ2YPbc3Nla1HzRJjXzZOiikfF8m7eAMfichLt3M4VgLOetqgDmgGQ==" + "integrity": "sha512-QNABxbrPa3qEIfrE6GOJ7BYIuignnJw7iQ2YPbc3Nla1HzRJjXzZOiikfF8m7eAMfichLt3M4VgLOetqgDmgGQ==", + "peer": true }, "node-releases": { "version": "2.0.8", @@ -13889,7 +14142,8 @@ "oauth-sign": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "peer": true }, "ob1": { "version": "0.72.3", @@ -13900,7 +14154,8 @@ "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "peer": true }, "object-copy": { "version": "0.1.0", @@ -14007,6 +14262,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "peer": true, "requires": { "wrappy": "1" } @@ -14141,7 +14397,8 @@ "performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==" + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", + "peer": true }, "picocolors": { "version": "1.0.0", @@ -14222,6 +14479,7 @@ "version": "7.1.1", "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.1.tgz", "integrity": "sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==", + "peer": true, "requires": { "detect-libc": "^2.0.0", "expand-template": "^2.0.3", @@ -14276,12 +14534,14 @@ "process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "peer": true }, "progress": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==" + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "peer": true }, "promise": { "version": "8.3.0", @@ -14306,6 +14566,7 @@ "version": "15.8.1", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "peer": true, "requires": { "loose-envify": "^1.4.0", "object-assign": "^4.1.1", @@ -14315,19 +14576,22 @@ "react-is": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "peer": true } } }, "psl": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", + "peer": true }, "pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "peer": true, "requires": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -14336,17 +14600,20 @@ "punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "peer": true }, "qs": { "version": "6.5.3", "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", - "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==" + "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", + "peer": true }, "querystringify": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "peer": true }, "range-parser": { "version": "1.2.1", @@ -14358,6 +14625,7 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "peer": true, "requires": { "deep-extend": "^0.6.0", "ini": "~1.3.0", @@ -14483,6 +14751,7 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "peer": true, "requires": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -14499,6 +14768,7 @@ "version": "11.3.1", "resolved": "https://registry.npmjs.org/realm/-/realm-11.3.1.tgz", "integrity": "sha512-yctWhfHp4RlQSXXSCJ3+QNK5Nq8ZEiMlO9DLmtrDbSQD0CntfarTDnU55okXWuCkpzykxPO8y5zotA3QVkZcZg==", + "peer": true, "requires": { "@realm/common": "^0.1.4", "@realm/network-transport": "^0.7.2", @@ -14524,12 +14794,14 @@ "deepmerge": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-2.1.0.tgz", - "integrity": "sha512-Q89Z26KAfA3lpPGhbF6XMfYAm3jIV3avViy6KOJ2JLzFbeWHOvPQUu5aSJIWXap3gDZC2y1eF5HXEPI2wGqgvw==" + "integrity": "sha512-Q89Z26KAfA3lpPGhbF6XMfYAm3jIV3avViy6KOJ2JLzFbeWHOvPQUu5aSJIWXap3gDZC2y1eF5HXEPI2wGqgvw==", + "peer": true }, "fs-extra": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", + "peer": true, "requires": { "graceful-fs": "^4.1.2", "jsonfile": "^4.0.0", @@ -14540,6 +14812,7 @@ "version": "3.3.0", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.0.tgz", "integrity": "sha512-BKwRP/O0UvoMKp7GNdwPlObhYGB5DQqwhEDQlNKuoqwVYSxkSZCSbHjnFFmUEtwSKRPU4kNK8PbDYYitwaE3QA==", + "peer": true, "requires": { "data-uri-to-buffer": "^4.0.0", "fetch-blob": "^3.1.4", @@ -14661,6 +14934,7 @@ "version": "2.88.2", "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "peer": true, "requires": { "aws-sign2": "~0.7.0", "aws4": "^1.8.0", @@ -14699,7 +14973,8 @@ "requires-port": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "peer": true }, "resolve": { "version": "1.22.1", @@ -14779,7 +15054,8 @@ "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "peer": true }, "safe-regex": { "version": "1.1.0", @@ -14793,7 +15069,8 @@ "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "peer": true }, "scheduler": { "version": "0.22.0", @@ -14958,12 +15235,14 @@ "simple-concat": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==" + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "peer": true }, "simple-get": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", + "peer": true, "requires": { "decompress-response": "^6.0.0", "once": "^1.3.1", @@ -15228,6 +15507,7 @@ "version": "1.17.0", "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", + "peer": true, "requires": { "asn1": "~0.2.3", "assert-plus": "^1.0.0", @@ -15342,12 +15622,14 @@ "stream-counter": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/stream-counter/-/stream-counter-1.0.0.tgz", - "integrity": "sha512-4nfHc1016AhNOs0CFDR3S0FNeqnYbT7xZ408coajcx2Msj8malNNjvFHzWYIfIAXNK5i0eaKIVfgBYPOkyOTIg==" + "integrity": "sha512-4nfHc1016AhNOs0CFDR3S0FNeqnYbT7xZ408coajcx2Msj8malNNjvFHzWYIfIAXNK5i0eaKIVfgBYPOkyOTIg==", + "peer": true }, "string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "peer": true, "requires": { "safe-buffer": "~5.2.0" }, @@ -15355,7 +15637,8 @@ "safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "peer": true } } }, @@ -15413,7 +15696,8 @@ "strip-json-comments": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==" + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "peer": true }, "sudo-prompt": { "version": "9.2.1", @@ -15439,6 +15723,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/sync-request/-/sync-request-3.0.1.tgz", "integrity": "sha512-bnOSypECs6aB9ScWHcJAkS9z55jOhO3tdLefLfJ+J58vC2HCi5tjxmFMxLv0RxvuAFFQ/G4BupVehqpAlbi+3Q==", + "peer": true, "requires": { "concat-stream": "^1.4.7", "http-response-object": "^1.0.1", @@ -15449,6 +15734,7 @@ "version": "6.1.13", "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.13.tgz", "integrity": "sha512-jdIBIN6LTIe2jqzay/2vtYLlBHa3JF42ot3h1dW8Q0PaAG4v8rm0cvpVePtau5C6OKXGGcgO9q2AMNSWxiLqKw==", + "peer": true, "requires": { "chownr": "^2.0.0", "fs-minipass": "^2.0.0", @@ -15461,12 +15747,14 @@ "mkdirp": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "peer": true }, "yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "peer": true } } }, @@ -15474,6 +15762,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "peer": true, "requires": { "chownr": "^1.1.1", "mkdirp-classic": "^0.5.2", @@ -15484,7 +15773,8 @@ "chownr": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "peer": true } } }, @@ -15492,6 +15782,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "peer": true, "requires": { "bl": "^4.0.3", "end-of-stream": "^1.4.1", @@ -15522,6 +15813,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/then-request/-/then-request-2.2.0.tgz", "integrity": "sha512-YM/Fho1bQ3JFX9dgFQsBswc3aSTePXvtNHl3aXJTZNz/444yC86EVJR92aWMRNA0O9X0UfmojyCTUcT8Lbo5yA==", + "peer": true, "requires": { "caseless": "~0.11.0", "concat-stream": "^1.4.7", @@ -15534,12 +15826,14 @@ "caseless": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz", - "integrity": "sha512-ODLXH644w9C2fMPAm7bMDQ3GRvipZWZfKc+8As6hIadRIelE0n0xZuN38NS6kiK3KPEVrpymmQD8bvncAHWQkQ==" + "integrity": "sha512-ODLXH644w9C2fMPAm7bMDQ3GRvipZWZfKc+8As6hIadRIelE0n0xZuN38NS6kiK3KPEVrpymmQD8bvncAHWQkQ==", + "peer": true }, "promise": { "version": "7.3.1", "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "peer": true, "requires": { "asap": "~2.0.3" } @@ -15651,6 +15945,7 @@ "version": "2.5.0", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "peer": true, "requires": { "psl": "^1.1.28", "punycode": "^2.1.1" @@ -15659,7 +15954,8 @@ "tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "peer": true }, "tslib": { "version": "2.4.1", @@ -15671,6 +15967,7 @@ "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "peer": true, "requires": { "safe-buffer": "^5.0.1" } @@ -15678,7 +15975,8 @@ "tweetnacl": { "version": "0.14.5", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==" + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", + "peer": true }, "type-fest": { "version": "0.7.1", @@ -15689,7 +15987,8 @@ "typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==" + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", + "peer": true }, "typescript": { "version": "4.9.4", @@ -15701,7 +16000,8 @@ "typical": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz", - "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==" + "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==", + "peer": true }, "uglify-es": { "version": "3.3.9", @@ -15778,7 +16078,8 @@ "universalify": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "peer": true }, "unpipe": { "version": "1.0.0", @@ -15840,6 +16141,7 @@ "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "peer": true, "requires": { "punycode": "^2.1.0" } @@ -15854,6 +16156,7 @@ "version": "1.5.10", "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "peer": true, "requires": { "querystringify": "^2.1.1", "requires-port": "^1.0.0" @@ -15875,7 +16178,8 @@ "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "peer": true }, "utils-merge": { "version": "1.0.1", @@ -15886,7 +16190,8 @@ "uuid": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "peer": true }, "vary": { "version": "1.1.2", @@ -15898,6 +16203,7 @@ "version": "1.10.0", "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", + "peer": true, "requires": { "assert-plus": "^1.0.0", "core-util-is": "1.0.2", @@ -15931,12 +16237,14 @@ "web-streams-polyfill": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz", - "integrity": "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==" + "integrity": "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==", + "peer": true }, "webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "peer": true }, "whatwg-fetch": { "version": "3.6.2", @@ -15948,6 +16256,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "peer": true, "requires": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" @@ -15993,7 +16302,8 @@ "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "peer": true }, "write-file-atomic": { "version": "2.4.3", diff --git a/realm-flipper-plugin-device/package.json b/realm-flipper-plugin-device/package.json index 8fc9d8a..e712859 100644 --- a/realm-flipper-plugin-device/package.json +++ b/realm-flipper-plugin-device/package.json @@ -42,8 +42,8 @@ "realm": ">=10.0.0" }, "dependencies": { - "react-native-flipper": ">=0.162.0", - "realm": ">=10.20.0" + "flatted": "^3.2.7", + "react-native-flipper": ">=0.162.0" }, "devDependencies": { "@types/react": "^18.0.25", diff --git a/realm-flipper-plugin-device/rollup.config.js b/realm-flipper-plugin-device/rollup.config.js index 0708bb0..b92d44b 100644 --- a/realm-flipper-plugin-device/rollup.config.js +++ b/realm-flipper-plugin-device/rollup.config.js @@ -6,5 +6,5 @@ export default { file: "./dist/index.js", }, plugins: [typescript()], - external: ["react", "react-dom", "react-native-flipper", "realm"], + external: ["react", "react-dom", "react-native-flipper", "realm", "flatted"], }; diff --git a/testApp/app/flipperTest/testData/createAllTypesTestData.tsx b/testApp/app/flipperTest/testData/createAllTypesTestData.tsx index 864540b..243d13b 100644 --- a/testApp/app/flipperTest/testData/createAllTypesTestData.tsx +++ b/testApp/app/flipperTest/testData/createAllTypesTestData.tsx @@ -43,7 +43,7 @@ export function createAllTypesTestData(realm: Realm) { price: 400123, }, set: [1, 2, 3, 4], - mixed: new Date('August 17, 2020'), + mixed: new Date('2006-11-17T03:24:00'), uuid: new UUID(), }; realm.write(() => { @@ -134,7 +134,6 @@ export function createAllTypesTestData(realm: Realm) { realm.write(() => { realm.create('AllTypes', AllTypes3); - // console.log('create object', t) }); let NoPrimaryKey1 = { diff --git a/testApp/ios/FlipperTester.xcodeproj/project.pbxproj b/testApp/ios/FlipperTester.xcodeproj/project.pbxproj index 42739f6..3cd87b7 100644 --- a/testApp/ios/FlipperTester.xcodeproj/project.pbxproj +++ b/testApp/ios/FlipperTester.xcodeproj/project.pbxproj @@ -560,7 +560,7 @@ COPY_PHASE_STRIP = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = ""; + "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = i386; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; GCC_NO_COMMON_BLOCKS = YES; @@ -632,7 +632,7 @@ COPY_PHASE_STRIP = YES; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = ""; + "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = i386; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_NO_COMMON_BLOCKS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; diff --git a/testApp/ios/Podfile b/testApp/ios/Podfile index 33d5823..d1bc948 100644 --- a/testApp/ios/Podfile +++ b/testApp/ios/Podfile @@ -15,7 +15,7 @@ target 'FlipperTester' do # Hermes is now enabled by default. Disable by setting this flag to false. # Upcoming versions of React Native may rely on get_default_flags(), but # we make it explicit here to aid in the React Native upgrade process. - :hermes_enabled => false, + :hermes_enabled => true, :fabric_enabled => flags[:fabric_enabled], # Enables Flipper. # diff --git a/testApp/ios/Podfile.lock b/testApp/ios/Podfile.lock index 04c1ddb..45846c8 100644 --- a/testApp/ios/Podfile.lock +++ b/testApp/ios/Podfile.lock @@ -73,6 +73,7 @@ PODS: - FlipperKit/FlipperKitNetworkPlugin - fmt (6.2.1) - glog (0.3.5) + - hermes-engine (0.70.3) - libevent (2.1.12) - OpenSSL-Universal (1.1.1100) - RCT-Folly (2021.07.22.00): @@ -86,6 +87,12 @@ PODS: - DoubleConversion - fmt (~> 6.2.1) - glog + - RCT-Folly/Futures (2021.07.22.00): + - boost + - DoubleConversion + - fmt (~> 6.2.1) + - glog + - libevent - RCTRequired (0.70.3) - RCTTypeSafety (0.70.3): - FBLazyVector (= 0.70.3) @@ -263,6 +270,17 @@ PODS: - React-logger (= 0.70.3) - React-perflogger (= 0.70.3) - React-runtimeexecutor (= 0.70.3) + - React-hermes (0.70.3): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly (= 2021.07.22.00) + - RCT-Folly/Futures (= 2021.07.22.00) + - React-cxxreact (= 0.70.3) + - React-jsi (= 0.70.3) + - React-jsiexecutor (= 0.70.3) + - React-jsinspector (= 0.70.3) + - React-perflogger (= 0.70.3) - React-jsi (0.70.3): - boost (= 1.76.0) - DoubleConversion @@ -388,6 +406,8 @@ DEPENDENCIES: - FlipperKit/FlipperKitUserDefaultsPlugin (= 0.125.0) - FlipperKit/SKIOSNetworkPlugin (= 0.125.0) - glog (from `../node_modules/react-native/third-party-podspecs/glog.podspec`) + - hermes-engine (from `../node_modules/react-native/sdks/hermes/hermes-engine.podspec`) + - libevent (~> 2.1.12) - OpenSSL-Universal (= 1.1.1100) - RCT-Folly (from `../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec`) - RCTRequired (from `../node_modules/react-native/Libraries/RCTRequired`) @@ -401,6 +421,7 @@ DEPENDENCIES: - React-Core/RCTWebSocket (from `../node_modules/react-native/`) - React-CoreModules (from `../node_modules/react-native/React/CoreModules`) - React-cxxreact (from `../node_modules/react-native/ReactCommon/cxxreact`) + - React-hermes (from `../node_modules/react-native/ReactCommon/hermes`) - React-jsi (from `../node_modules/react-native/ReactCommon/jsi`) - React-jsiexecutor (from `../node_modules/react-native/ReactCommon/jsiexecutor`) - React-jsinspector (from `../node_modules/react-native/ReactCommon/jsinspector`) @@ -451,6 +472,8 @@ EXTERNAL SOURCES: :path: "../node_modules/react-native/React/FBReactNativeSpec" glog: :podspec: "../node_modules/react-native/third-party-podspecs/glog.podspec" + hermes-engine: + :podspec: "../node_modules/react-native/sdks/hermes/hermes-engine.podspec" RCT-Folly: :podspec: "../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec" RCTRequired: @@ -471,6 +494,8 @@ EXTERNAL SOURCES: :path: "../node_modules/react-native/React/CoreModules" React-cxxreact: :path: "../node_modules/react-native/ReactCommon/cxxreact" + React-hermes: + :path: "../node_modules/react-native/ReactCommon/hermes" React-jsi: :path: "../node_modules/react-native/ReactCommon/jsi" React-jsiexecutor: @@ -529,6 +554,7 @@ SPEC CHECKSUMS: FlipperKit: cbdee19bdd4e7f05472a66ce290f1b729ba3cb86 fmt: ff9d55029c625d3757ed641535fd4a75fedc7ce9 glog: 04b94705f318337d7ead9e6d17c019bd9b1f6b1b + hermes-engine: bb344d89a0d14c2c91ad357480a79698bb80e186 libevent: 4049cae6c81cdb3654a443be001fb9bdceff7913 OpenSSL-Universal: ebc357f1e6bc71fa463ccb2fe676756aff50e88c RCT-Folly: 0080d0a6ebf2577475bda044aa59e2ca1f909cda @@ -541,6 +567,7 @@ SPEC CHECKSUMS: React-Core: a689b4d1bd13e15915a05c9918c2b01df96cd811 React-CoreModules: d262214db6b704b042bc5c0735b06c346a371d7f React-cxxreact: 81d5bf256313bf96cb925eb0e654103291161a17 + React-hermes: 1c35cbfbdc7a888c3a1aa05e6d0ca004d92c923c React-jsi: 7f99dc3055bec9a0eeb4230f8b6ac873514c8421 React-jsiexecutor: 7e2e1772ef7b97168c880eeaf3749d8c145ffd6e React-jsinspector: 0553c9fe7218e1f127be070bd5a4d2fc19fb8190 @@ -564,6 +591,6 @@ SPEC CHECKSUMS: Yoga: 2ed968a4f060a92834227c036279f2736de0fce3 YogaKit: f782866e155069a2cca2517aafea43200b01fd5a -PODFILE CHECKSUM: 74404a4e3c08dae8a1d6d19834d2b24f1f7e95f0 +PODFILE CHECKSUM: a00ae2d2ae8cfaaf7cadd3e4ebb25e6c7f522918 COCOAPODS: 1.11.3 From bc13feb45019b0a8ffa29f39ef040c265f546a5d Mon Sep 17 00:00:00 2001 From: gagik Date: Thu, 12 Jan 2023 14:31:11 +0100 Subject: [PATCH 07/20] Add styleguides from realm-react. --- .../.prettierrc => .prettierrc | 0 flipper-plugin-realm/.eslintrc | 18 + flipper-plugin-realm/package-lock.json | 923 +++++++++++++++++- .../src/components/Mermaid.tsx | 2 - flipper-plugin-realm/yarn.lock | 349 ++++++- realm-flipper-plugin-device/.eslintrc | 17 + 6 files changed, 1257 insertions(+), 52 deletions(-) rename flipper-plugin-realm/.prettierrc => .prettierrc (100%) create mode 100644 flipper-plugin-realm/.eslintrc create mode 100644 realm-flipper-plugin-device/.eslintrc diff --git a/flipper-plugin-realm/.prettierrc b/.prettierrc similarity index 100% rename from flipper-plugin-realm/.prettierrc rename to .prettierrc diff --git a/flipper-plugin-realm/.eslintrc b/flipper-plugin-realm/.eslintrc new file mode 100644 index 0000000..382af7a --- /dev/null +++ b/flipper-plugin-realm/.eslintrc @@ -0,0 +1,18 @@ +// From https://github.com/realm/realm-js/blob/master/packages/realm-react/.eslintrc.json +{ + "plugins": [ + "eslint-plugin-tsdoc" + ], + "parser": "@typescript-eslint/parser", + "extends": [ + "plugin:@typescript-eslint/recommended", + "plugin:react-hooks/recommended" + ], + "rules": { + "@typescript-eslint/explicit-function-return-type": "off", + "react-hooks/rules-of-hooks": "error", + "react-hooks/exhaustive-deps": "warn", + "tsdoc/syntax": "warn" + } + } + \ No newline at end of file diff --git a/flipper-plugin-realm/package-lock.json b/flipper-plugin-realm/package-lock.json index 8f1e975..f6fcbf9 100644 --- a/flipper-plugin-realm/package-lock.json +++ b/flipper-plugin-realm/package-lock.json @@ -4183,6 +4183,35 @@ "@types/ms": "*" } }, + "node_modules/@types/eslint": { + "version": "8.4.10", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.10.tgz", + "integrity": "sha512-Sl/HOqN8NKPmhWo2VBEPm0nvHnu2LL3v9vKo8MEq0EtbJ4eVzGPl41VNPvn5E1i5poMk4/XD8UriLHpJvEP/Nw==", + "dev": true, + "peer": true, + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.4", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", + "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", + "dev": true, + "peer": true, + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "0.0.51", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", + "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", + "dev": true, + "peer": true + }, "node_modules/@types/fs-extra": { "version": "9.0.13", "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.13.tgz", @@ -4652,6 +4681,181 @@ "url": "https://opencollective.com/typescript-eslint" } }, + "node_modules/@webassemblyjs/ast": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", + "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", + "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", + "dev": true, + "peer": true + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", + "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", + "dev": true, + "peer": true + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", + "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", + "dev": true, + "peer": true + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", + "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", + "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", + "dev": true, + "peer": true + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", + "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", + "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", + "dev": true, + "peer": true, + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", + "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", + "dev": true, + "peer": true, + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", + "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", + "dev": true, + "peer": true + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", + "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/helper-wasm-section": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-opt": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "@webassemblyjs/wast-printer": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", + "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", + "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", + "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", + "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true, + "peer": true + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true, + "peer": true + }, "node_modules/abab": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", @@ -4727,6 +4931,16 @@ "node": ">=0.4.0" } }, + "node_modules/acorn-import-assertions": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", + "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", + "dev": true, + "peer": true, + "peerDependencies": { + "acorn": "^8" + } + }, "node_modules/acorn-jsx": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", @@ -5771,6 +5985,16 @@ "node": ">=10" } }, + "node_modules/chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6.0" + } + }, "node_modules/ci-info": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.2.tgz", @@ -7464,6 +7688,13 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/es-module-lexer": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", + "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", + "dev": true, + "peer": true + }, "node_modules/es-shim-unscopables": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", @@ -8029,6 +8260,16 @@ "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", "dev": true }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.8.x" + } + }, "node_modules/execa": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", @@ -9035,6 +9276,13 @@ "node": ">=10.13.0" } }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true, + "peer": true + }, "node_modules/global-agent": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/global-agent/-/global-agent-3.0.0.tgz", @@ -12591,6 +12839,16 @@ "node": ">= 10.0.0" } }, + "node_modules/loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6.11.5" + } + }, "node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", @@ -15626,6 +15884,16 @@ } ] }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "peer": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, "node_modules/rc": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", @@ -16277,7 +16545,6 @@ "version": "17.0.2", "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", - "dev": true, "dependencies": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1" @@ -16308,7 +16575,6 @@ "version": "17.0.2", "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", - "dev": true, "dependencies": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1", @@ -16964,12 +17230,64 @@ "version": "0.20.2", "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", - "dev": true, "dependencies": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1" } }, + "node_modules/schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "peer": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/schema-utils/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "peer": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/schema-utils/node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "peer": true, + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/schema-utils/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "peer": true + }, "node_modules/scroll-into-view-if-needed": { "version": "2.2.29", "resolved": "https://registry.npmjs.org/scroll-into-view-if-needed/-/scroll-into-view-if-needed-2.2.29.tgz", @@ -17073,6 +17391,16 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "dev": true, + "peer": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, "node_modules/set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", @@ -17776,6 +18104,82 @@ "node": ">=10" } }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.6", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.6.tgz", + "integrity": "sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ==", + "dev": true, + "peer": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.14", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.0", + "terser": "^5.14.1" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/terser-webpack-plugin/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/terser-webpack-plugin/node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "peer": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/terser-webpack-plugin/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, "node_modules/terser/node_modules/commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", @@ -18545,6 +18949,20 @@ "makeerror": "1.0.12" } }, + "node_modules/watchpack": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", + "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "dev": true, + "peer": true, + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, "node_modules/watskeburt": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/watskeburt/-/watskeburt-0.8.1.tgz", @@ -18586,6 +19004,64 @@ "node": ">=12" } }, + "node_modules/webpack": { + "version": "5.75.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.75.0.tgz", + "integrity": "sha512-piaIaoVJlqMsPtX/+3KTTO6jfvrSYgauFVdt8cr9LTHKmcq/AMd4mhzsiP7ZF/PGRNPGA8336jldh9l2Kt2ogQ==", + "dev": true, + "peer": true, + "dependencies": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^0.0.51", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.7.6", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.10.0", + "es-module-lexer": "^0.9.0", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.1.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "dev": true, + "peer": true, + "engines": { + "node": ">=10.13.0" + } + }, "node_modules/whatwg-encoding": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", @@ -20631,7 +21107,8 @@ "version": "0.2.4", "resolved": "https://registry.npmjs.org/@icons/material/-/material-0.2.4.tgz", "integrity": "sha512-QPcGmICAPbGLGb6F/yNf/KzKqvFx8z5qx3D1yFqVAjoFmXK35EgyW+cJ57Te3CNsmzblwtzakLGFqHPqrfb4Tw==", - "dev": true + "dev": true, + "requires": {} }, "@istanbuljs/load-nyc-config": { "version": "1.1.0", @@ -21947,6 +22424,35 @@ "@types/ms": "*" } }, + "@types/eslint": { + "version": "8.4.10", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.10.tgz", + "integrity": "sha512-Sl/HOqN8NKPmhWo2VBEPm0nvHnu2LL3v9vKo8MEq0EtbJ4eVzGPl41VNPvn5E1i5poMk4/XD8UriLHpJvEP/Nw==", + "dev": true, + "peer": true, + "requires": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "@types/eslint-scope": { + "version": "3.7.4", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", + "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", + "dev": true, + "peer": true, + "requires": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "@types/estree": { + "version": "0.0.51", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", + "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", + "dev": true, + "peer": true + }, "@types/fs-extra": { "version": "9.0.13", "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.13.tgz", @@ -22319,6 +22825,181 @@ "eslint-visitor-keys": "^3.3.0" } }, + "@webassemblyjs/ast": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", + "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", + "dev": true, + "peer": true, + "requires": { + "@webassemblyjs/helper-numbers": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1" + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", + "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", + "dev": true, + "peer": true + }, + "@webassemblyjs/helper-api-error": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", + "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", + "dev": true, + "peer": true + }, + "@webassemblyjs/helper-buffer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", + "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", + "dev": true, + "peer": true + }, + "@webassemblyjs/helper-numbers": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", + "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", + "dev": true, + "peer": true, + "requires": { + "@webassemblyjs/floating-point-hex-parser": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", + "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", + "dev": true, + "peer": true + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", + "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", + "dev": true, + "peer": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1" + } + }, + "@webassemblyjs/ieee754": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", + "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", + "dev": true, + "peer": true, + "requires": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "@webassemblyjs/leb128": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", + "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", + "dev": true, + "peer": true, + "requires": { + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/utf8": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", + "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", + "dev": true, + "peer": true + }, + "@webassemblyjs/wasm-edit": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", + "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", + "dev": true, + "peer": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/helper-wasm-section": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-opt": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "@webassemblyjs/wast-printer": "1.11.1" + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", + "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", + "dev": true, + "peer": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", + "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", + "dev": true, + "peer": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1" + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", + "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", + "dev": true, + "peer": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", + "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", + "dev": true, + "peer": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true, + "peer": true + }, + "@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true, + "peer": true + }, "abab": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", @@ -22375,11 +23056,20 @@ } } }, + "acorn-import-assertions": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", + "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", + "dev": true, + "peer": true, + "requires": {} + }, "acorn-jsx": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true + "dev": true, + "requires": {} }, "acorn-jsx-walk": { "version": "2.0.0", @@ -22444,7 +23134,8 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", - "dev": true + "dev": true, + "requires": {} }, "algoliasearch": { "version": "4.13.1", @@ -23185,6 +23876,13 @@ "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", "dev": true }, + "chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "dev": true, + "peer": true + }, "ci-info": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.2.tgz", @@ -24498,6 +25196,13 @@ "unbox-primitive": "^1.0.2" } }, + "es-module-lexer": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", + "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", + "dev": true, + "peer": true + }, "es-shim-unscopables": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", @@ -24742,7 +25447,8 @@ "version": "8.5.0", "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", - "dev": true + "dev": true, + "requires": {} }, "eslint-plugin-prettier": { "version": "4.2.1", @@ -24900,6 +25606,13 @@ "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", "dev": true }, + "events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "peer": true + }, "execa": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", @@ -25702,6 +26415,13 @@ "is-glob": "^4.0.3" } }, + "glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true, + "peer": true + }, "global-agent": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/global-agent/-/global-agent-3.0.0.tgz", @@ -26061,7 +26781,8 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "dev": true + "dev": true, + "requires": {} }, "ieee754": { "version": "1.2.1", @@ -27444,13 +28165,15 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/jest-mock-console/-/jest-mock-console-2.0.0.tgz", "integrity": "sha512-7zrKtXVut+6doalosFxw/2O9spLepQJ9VukODtyLIub2fFkWKe1TyQrxr/GyQogTQcdkHfhvFJdx1OEzLqf/mw==", - "dev": true + "dev": true, + "requires": {} }, "jest-pnp-resolver": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", - "dev": true + "dev": true, + "requires": {} }, "jest-regex-util": { "version": "28.0.2", @@ -28354,6 +29077,13 @@ } } }, + "loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "dev": true, + "peer": true + }, "locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", @@ -28915,7 +29645,8 @@ "version": "7.5.8", "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.8.tgz", "integrity": "sha512-ri1Id1WinAX5Jqn9HejiGb8crfRio0Qgu8+MtL36rlTA6RLsMdWt1Az/19A2Qij6uSHUMphEFaTKa4WG+UNHNw==", - "dev": true + "dev": true, + "requires": {} }, "y18n": { "version": "4.0.3", @@ -29436,7 +30167,8 @@ "version": "7.5.8", "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.8.tgz", "integrity": "sha512-ri1Id1WinAX5Jqn9HejiGb8crfRio0Qgu8+MtL36rlTA6RLsMdWt1Az/19A2Qij6uSHUMphEFaTKa4WG+UNHNw==", - "dev": true + "dev": true, + "requires": {} }, "y18n": { "version": "4.0.3", @@ -30440,7 +31172,8 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", - "dev": true + "dev": true, + "requires": {} }, "postcss-modules-local-by-default": { "version": "4.0.0", @@ -30707,6 +31440,16 @@ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "dev": true }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "peer": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, "rc": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", @@ -31174,7 +31917,6 @@ "version": "17.0.2", "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", - "dev": true, "requires": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1" @@ -31199,7 +31941,6 @@ "version": "17.0.2", "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", - "dev": true, "requires": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1", @@ -31707,12 +32448,53 @@ "version": "0.20.2", "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", - "dev": true, "requires": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1" } }, + "schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "peer": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "dependencies": { + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "peer": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "peer": true, + "requires": {} + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "peer": true + } + } + }, "scroll-into-view-if-needed": { "version": "2.2.29", "resolved": "https://registry.npmjs.org/scroll-into-view-if-needed/-/scroll-into-view-if-needed-2.2.29.tgz", @@ -31791,6 +32573,16 @@ } } }, + "serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "dev": true, + "peer": true, + "requires": { + "randombytes": "^2.1.0" + } + }, "set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", @@ -32352,6 +33144,51 @@ } } }, + "terser-webpack-plugin": { + "version": "5.3.6", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.6.tgz", + "integrity": "sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ==", + "dev": true, + "peer": true, + "requires": { + "@jridgewell/trace-mapping": "^0.3.14", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.0", + "terser": "^5.14.1" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "peer": true + }, + "jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "peer": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + } + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "peer": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, "test-exclude": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", @@ -32920,6 +33757,17 @@ "makeerror": "1.0.12" } }, + "watchpack": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", + "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "dev": true, + "peer": true, + "requires": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + } + }, "watskeburt": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/watskeburt/-/watskeburt-0.8.1.tgz", @@ -32949,6 +33797,46 @@ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==" }, + "webpack": { + "version": "5.75.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.75.0.tgz", + "integrity": "sha512-piaIaoVJlqMsPtX/+3KTTO6jfvrSYgauFVdt8cr9LTHKmcq/AMd4mhzsiP7ZF/PGRNPGA8336jldh9l2Kt2ogQ==", + "dev": true, + "peer": true, + "requires": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^0.0.51", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.7.6", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.10.0", + "es-module-lexer": "^0.9.0", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.1.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + } + }, + "webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "dev": true, + "peer": true + }, "whatwg-encoding": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", @@ -33084,7 +33972,8 @@ "ws": { "version": "8.8.0", "resolved": "https://registry.npmjs.org/ws/-/ws-8.8.0.tgz", - "integrity": "sha512-JDAgSYQ1ksuwqfChJusw1LSJ8BizJ2e/vVu5Lxjq3YvNJNlROv1ui4i+c/kUUrPheBvQl4c5UbERhTwKa6QBJQ==" + "integrity": "sha512-JDAgSYQ1ksuwqfChJusw1LSJ8BizJ2e/vVu5Lxjq3YvNJNlROv1ui4i+c/kUUrPheBvQl4c5UbERhTwKa6QBJQ==", + "requires": {} }, "xml-name-validator": { "version": "4.0.0", diff --git a/flipper-plugin-realm/src/components/Mermaid.tsx b/flipper-plugin-realm/src/components/Mermaid.tsx index d838ac8..1c68ea2 100644 --- a/flipper-plugin-realm/src/components/Mermaid.tsx +++ b/flipper-plugin-realm/src/components/Mermaid.tsx @@ -3,9 +3,7 @@ import mermaid from 'mermaid'; mermaid.initialize({ startOnLoad: true, - //@ts-expect-error Mermaid types are not currently properly exported theme: "default", - //@ts-expect-error Mermaid types are not currently properly exported securityLevel: "loose", themeCSS: ` g.classGroup rect { diff --git a/flipper-plugin-realm/yarn.lock b/flipper-plugin-realm/yarn.lock index ad0f7d9..ccf28e8 100644 --- a/flipper-plugin-realm/yarn.lock +++ b/flipper-plugin-realm/yarn.lock @@ -126,7 +126,7 @@ "resolved" "https://registry.npmjs.org/@ant-design/icons-svg/-/icons-svg-4.2.1.tgz" "version" "4.2.1" -"@ant-design/icons@^4.7.0": +"@ant-design/icons@^4.2.2", "@ant-design/icons@^4.7.0": "integrity" "sha512-aoB4Z7JA431rt6d4u+8xcNPPCrdufSRMUOpxa1ab6mz1JCQZOEVolj2WVs/tDFmN62zzK30mNelEsprLYsSF3g==" "resolved" "https://registry.npmjs.org/@ant-design/icons/-/icons-4.7.0.tgz" "version" "4.7.0" @@ -160,7 +160,7 @@ "resolved" "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.8.tgz" "version" "7.18.8" -"@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.14.0", "@babel/core@^7.17.10": +"@babel/core@^7.0.0", "@babel/core@^7.0.0-0", "@babel/core@^7.11.6", "@babel/core@^7.12.0", "@babel/core@^7.12.3", "@babel/core@^7.13.0", "@babel/core@^7.14.0", "@babel/core@^7.17.10", "@babel/core@^7.4.0-0", "@babel/core@^7.8.0", "@babel/core@>=7.0.0-beta.0 <8": "integrity" "sha512-cQbWBpxcbbs/IUredIPkHiAGULLV8iwgNRMFzvbhEXISp4f3rUUXE5+TIw6KwUWUR3DwyI6gmBRnmAtYaWehwQ==" "resolved" "https://registry.npmjs.org/@babel/core/-/core-7.18.6.tgz" "version" "7.18.6" @@ -1284,7 +1284,7 @@ "resolved" "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.5.tgz" "version" "0.7.5" -"@emotion/react@^11.8.2": +"@emotion/react@^11.0.0-rc.0", "@emotion/react@^11.8.2": "integrity" "sha512-g9Q1GcTOlzOEjqwuLF/Zd9LC+4FljjPjDfxSM7KmEakm+hsHXk+bYZ2q+/hTJzr0OUNkujo72pXLQvXj6H+GJQ==" "resolved" "https://registry.npmjs.org/@emotion/react/-/react-11.9.3.tgz" "version" "11.9.3" @@ -1597,7 +1597,7 @@ "@types/yargs" "^16.0.0" "chalk" "^4.0.0" -"@jest/types@^28.1.3": +"@jest/types@^28.0.0", "@jest/types@^28.1.3": "integrity" "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==" "resolved" "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz" "version" "28.1.3" @@ -1649,7 +1649,7 @@ "resolved" "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz" "version" "1.4.14" -"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.13", "@jridgewell/trace-mapping@^0.3.9": +"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.13", "@jridgewell/trace-mapping@^0.3.14", "@jridgewell/trace-mapping@^0.3.9": "integrity" "sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==" "resolved" "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz" "version" "0.3.14" @@ -1869,7 +1869,7 @@ dependencies: "defer-to-connect" "^1.0.1" -"@testing-library/dom@^7.28.1": +"@testing-library/dom@^7.26.3", "@testing-library/dom@^7.28.1": "integrity" "sha512-3UqjCpey6HiTZT92vODYLPxTBWlM8ZOOjr3LX5F37/VRipW2M1kX6I/Cm4VXzteZqfGfagg8yXywpcOgQBlNsQ==" "resolved" "https://registry.npmjs.org/@testing-library/dom/-/dom-7.31.2.tgz" "version" "7.31.2" @@ -1883,7 +1883,7 @@ "lz-string" "^1.4.4" "pretty-format" "^26.6.2" -"@testing-library/react@latest": +"@testing-library/react@^11.1.0", "@testing-library/react@latest": "integrity" "sha512-tzRNp7pzd5QmbtXNG/mhdcl7Awfu/Iz1RaVHY75zTdOkmHCuzMhRL83gWHSgOAcjS3CCbyfwUHMZgRJb4kAfpA==" "resolved" "https://registry.npmjs.org/@testing-library/react/-/react-11.2.7.tgz" "version" "11.2.7" @@ -1941,6 +1941,27 @@ dependencies: "@types/ms" "*" +"@types/eslint-scope@^3.7.3": + "integrity" "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==" + "resolved" "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz" + "version" "3.7.4" + dependencies: + "@types/eslint" "*" + "@types/estree" "*" + +"@types/eslint@*": + "integrity" "sha512-Sl/HOqN8NKPmhWo2VBEPm0nvHnu2LL3v9vKo8MEq0EtbJ4eVzGPl41VNPvn5E1i5poMk4/XD8UriLHpJvEP/Nw==" + "resolved" "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.10.tgz" + "version" "8.4.10" + dependencies: + "@types/estree" "*" + "@types/json-schema" "*" + +"@types/estree@*", "@types/estree@^0.0.51": + "integrity" "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==" + "resolved" "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz" + "version" "0.0.51" + "@types/fs-extra@^9.0.12", "@types/fs-extra@^9.0.13": "integrity" "sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==" "resolved" "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.13.tgz" @@ -1991,7 +2012,7 @@ "@types/parse5" "*" "@types/tough-cookie" "*" -"@types/json-schema@^7.0.9": +"@types/json-schema@*", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": "integrity" "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==" "resolved" "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz" "version" "7.0.11" @@ -2191,7 +2212,7 @@ "semver" "^7.3.7" "tsutils" "^3.21.0" -"@typescript-eslint/parser@^5.32.0": +"@typescript-eslint/parser@^5.0.0", "@typescript-eslint/parser@^5.32.0": "integrity" "sha512-IxRtsehdGV9GFQ35IGm5oKKR2OGcazUoiNBxhRV160iF9FoyuXxjY+rIqs1gfnd+4eL98OjeGnMpE7RF/NBb3A==" "resolved" "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.32.0.tgz" "version" "5.32.0" @@ -2256,6 +2277,137 @@ "@typescript-eslint/types" "5.32.0" "eslint-visitor-keys" "^3.3.0" +"@webassemblyjs/ast@1.11.1": + "integrity" "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz" + "version" "1.11.1" + dependencies: + "@webassemblyjs/helper-numbers" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + +"@webassemblyjs/floating-point-hex-parser@1.11.1": + "integrity" "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz" + "version" "1.11.1" + +"@webassemblyjs/helper-api-error@1.11.1": + "integrity" "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz" + "version" "1.11.1" + +"@webassemblyjs/helper-buffer@1.11.1": + "integrity" "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz" + "version" "1.11.1" + +"@webassemblyjs/helper-numbers@1.11.1": + "integrity" "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz" + "version" "1.11.1" + dependencies: + "@webassemblyjs/floating-point-hex-parser" "1.11.1" + "@webassemblyjs/helper-api-error" "1.11.1" + "@xtuc/long" "4.2.2" + +"@webassemblyjs/helper-wasm-bytecode@1.11.1": + "integrity" "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz" + "version" "1.11.1" + +"@webassemblyjs/helper-wasm-section@1.11.1": + "integrity" "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz" + "version" "1.11.1" + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-buffer" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + "@webassemblyjs/wasm-gen" "1.11.1" + +"@webassemblyjs/ieee754@1.11.1": + "integrity" "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz" + "version" "1.11.1" + dependencies: + "@xtuc/ieee754" "^1.2.0" + +"@webassemblyjs/leb128@1.11.1": + "integrity" "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz" + "version" "1.11.1" + dependencies: + "@xtuc/long" "4.2.2" + +"@webassemblyjs/utf8@1.11.1": + "integrity" "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz" + "version" "1.11.1" + +"@webassemblyjs/wasm-edit@1.11.1": + "integrity" "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz" + "version" "1.11.1" + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-buffer" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + "@webassemblyjs/helper-wasm-section" "1.11.1" + "@webassemblyjs/wasm-gen" "1.11.1" + "@webassemblyjs/wasm-opt" "1.11.1" + "@webassemblyjs/wasm-parser" "1.11.1" + "@webassemblyjs/wast-printer" "1.11.1" + +"@webassemblyjs/wasm-gen@1.11.1": + "integrity" "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz" + "version" "1.11.1" + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + "@webassemblyjs/ieee754" "1.11.1" + "@webassemblyjs/leb128" "1.11.1" + "@webassemblyjs/utf8" "1.11.1" + +"@webassemblyjs/wasm-opt@1.11.1": + "integrity" "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz" + "version" "1.11.1" + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-buffer" "1.11.1" + "@webassemblyjs/wasm-gen" "1.11.1" + "@webassemblyjs/wasm-parser" "1.11.1" + +"@webassemblyjs/wasm-parser@1.11.1": + "integrity" "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz" + "version" "1.11.1" + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-api-error" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + "@webassemblyjs/ieee754" "1.11.1" + "@webassemblyjs/leb128" "1.11.1" + "@webassemblyjs/utf8" "1.11.1" + +"@webassemblyjs/wast-printer@1.11.1": + "integrity" "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz" + "version" "1.11.1" + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@xtuc/long" "4.2.2" + +"@xtuc/ieee754@^1.2.0": + "integrity" "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" + "resolved" "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz" + "version" "1.2.0" + +"@xtuc/long@4.2.2": + "integrity" "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" + "resolved" "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz" + "version" "4.2.2" + "abab@^2.0.5", "abab@^2.0.6": "integrity" "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==" "resolved" "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz" @@ -2289,6 +2441,11 @@ "acorn" "^7.1.1" "acorn-walk" "^7.1.1" +"acorn-import-assertions@^1.7.6": + "integrity" "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==" + "resolved" "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz" + "version" "1.8.0" + "acorn-jsx-walk@2.0.0": "integrity" "sha512-uuo6iJj4D4ygkdzd6jPtcxs8vZgDX9YFIkqczGImoypX2fQ4dVImmu3UzA4ynixCIMTrEOWW+95M2HuBaCEOVA==" "resolved" "https://registry.npmjs.org/acorn-jsx-walk/-/acorn-jsx-walk-2.0.0.tgz" @@ -2316,16 +2473,16 @@ "resolved" "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz" "version" "8.2.0" +"acorn@^6.0.0 || ^7.0.0 || ^8.0.0", "acorn@^8", "acorn@^8.5.0", "acorn@^8.7.1", "acorn@^8.8.0", "acorn@8.8.1": + "integrity" "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==" + "resolved" "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz" + "version" "8.8.1" + "acorn@^7.1.1": "integrity" "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" "resolved" "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz" "version" "7.4.1" -"acorn@^8.5.0", "acorn@^8.8.0", "acorn@8.8.1": - "integrity" "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==" - "resolved" "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz" - "version" "8.8.1" - "agent-base@6": "integrity" "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==" "resolved" "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz" @@ -2346,6 +2503,11 @@ "resolved" "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz" "version" "1.0.1" +"ajv-keywords@^3.5.2": + "integrity" "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==" + "resolved" "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz" + "version" "3.5.2" + "ajv@^6.10.0": "integrity" "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==" "resolved" "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" @@ -2386,7 +2548,17 @@ "json-schema-traverse" "^0.4.1" "uri-js" "^4.2.2" -"ajv@8.11.0": +"ajv@^6.12.5", "ajv@^6.9.1": + "integrity" "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==" + "resolved" "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" + "version" "6.12.6" + dependencies: + "fast-deep-equal" "^3.1.1" + "fast-json-stable-stringify" "^2.0.0" + "json-schema-traverse" "^0.4.1" + "uri-js" "^4.2.2" + +"ajv@>=5.0.0", "ajv@8.11.0": "integrity" "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==" "resolved" "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz" "version" "8.11.0" @@ -2457,7 +2629,7 @@ "resolved" "https://registry.npmjs.org/ansicolors/-/ansicolors-0.3.2.tgz" "version" "0.3.2" -"antd@latest": +"antd@^4.11.2", "antd@latest": "integrity" "sha512-6sizu/2CT0ofxl0nEvWUg5x2z7UOXZV+OqNcnQvrp+nGYI3ySAyzu8rxPvWIoA7NIa3TYnbrFayGy2gAqDGpuA==" "resolved" "https://registry.npmjs.org/antd/-/antd-4.21.6.tgz" "version" "4.21.6" @@ -2625,7 +2797,7 @@ dependencies: "follow-redirects" "^1.14.0" -"babel-jest@^28.1.3": +"babel-jest@^28.0.0", "babel-jest@^28.1.3": "integrity" "sha512-epUaPOEWMk3cWX0M/sPvCHHCe9fMFAa/9hXEgKP8nFfNl/jlGkE9ucq9NqkZGXLDduCJYS0UvSlPUwC0S+rH6Q==" "resolved" "https://registry.npmjs.org/babel-jest/-/babel-jest-28.1.3.tgz" "version" "28.1.3" @@ -2836,7 +3008,7 @@ "resolved" "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz" "version" "1.0.0" -"browserslist@^4.20.2", "browserslist@^4.21.1": +"browserslist@^4.14.5", "browserslist@^4.20.2", "browserslist@^4.21.1", "browserslist@>= 4.21.0": "integrity" "sha512-Nq8MFCSrnJXSc88yliwlzQe3qNe3VntIjhsArW9IJOEPSHNx23FalwApUVbzAWABLhYJJ7y8AynWI/XM8OdfjQ==" "resolved" "https://registry.npmjs.org/browserslist/-/browserslist-4.21.1.tgz" "version" "4.21.1" @@ -3062,6 +3234,11 @@ "resolved" "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz" "version" "2.0.0" +"chrome-trace-event@^1.0.2": + "integrity" "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==" + "resolved" "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz" + "version" "1.0.3" + "ci-info@^2.0.0": "integrity" "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" "resolved" "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz" @@ -4035,7 +4212,7 @@ dependencies: "once" "^1.4.0" -"enhanced-resolve@^5.7.0", "enhanced-resolve@5.10.0": +"enhanced-resolve@^5.10.0", "enhanced-resolve@^5.7.0", "enhanced-resolve@5.10.0": "integrity" "sha512-T0yTFjdpldGY8PmuXXR0PyQ1ufZpEGiHVrp7zHKB7jdR4qlmZHhONVM5AQOAWXuF/w3dnHbEQVrNptJgt7F+cQ==" "resolved" "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.10.0.tgz" "version" "5.10.0" @@ -4091,6 +4268,11 @@ "string.prototype.trimstart" "^1.0.5" "unbox-primitive" "^1.0.2" +"es-module-lexer@^0.9.0": + "integrity" "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==" + "resolved" "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz" + "version" "0.9.3" + "es-shim-unscopables@^1.0.0": "integrity" "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==" "resolved" "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz" @@ -4181,7 +4363,7 @@ "semver" "^6.3.0" "string.prototype.matchall" "^4.0.7" -"eslint-scope@^5.1.1": +"eslint-scope@^5.1.1", "eslint-scope@5.1.1": "integrity" "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==" "resolved" "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz" "version" "5.1.1" @@ -4214,7 +4396,7 @@ "resolved" "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz" "version" "3.3.0" -"eslint@^8.21.0": +"eslint@*", "eslint@^3 || ^4 || ^5 || ^6 || ^7 || ^8", "eslint@^6.0.0 || ^7.0.0 || ^8.0.0", "eslint@^8.21.0", "eslint@>=5", "eslint@>=7.0.0", "eslint@>=7.28.0": "integrity" "sha512-/XJ1+Qurf1T9G2M5IHrsjp+xrGT73RZf23xA1z5wB1ZzzEAWSZKvRwhWxTFp1rvkvCfwcvAUNAP31bhKTTGfDA==" "resolved" "https://registry.npmjs.org/eslint/-/eslint-8.21.0.tgz" "version" "8.21.0" @@ -4312,6 +4494,11 @@ "resolved" "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz" "version" "4.0.7" +"events@^3.2.0": + "integrity" "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==" + "resolved" "https://registry.npmjs.org/events/-/events-3.3.0.tgz" + "version" "3.3.0" + "execa@^5.0.0": "integrity" "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==" "resolved" "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz" @@ -4899,6 +5086,11 @@ dependencies: "is-glob" "^4.0.3" +"glob-to-regexp@^0.4.1": + "integrity" "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" + "resolved" "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz" + "version" "0.4.1" + "glob@^7.1.3", "glob@^7.1.4", "glob@^7.2.0", "glob@7.2.0": "integrity" "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==" "resolved" "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz" @@ -5853,7 +6045,7 @@ "jest-regex-util" "^28.0.2" "jest-snapshot" "^28.1.3" -"jest-resolve@^28.1.3": +"jest-resolve@*", "jest-resolve@^28.1.3": "integrity" "sha512-Z1W3tTjE6QaNI90qo/BJpfnvpxtaFTFw5CDgwpyE/Kz8U/06N1Hjf4ia9quUhCh39qIGWF1ZuxFiBiJQwSEYKQ==" "resolved" "https://registry.npmjs.org/jest-resolve/-/jest-resolve-28.1.3.tgz" "version" "28.1.3" @@ -6031,6 +6223,15 @@ "merge-stream" "^2.0.0" "supports-color" "^8.0.0" +"jest-worker@^27.4.5": + "integrity" "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==" + "resolved" "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz" + "version" "27.5.1" + dependencies: + "@types/node" "*" + "merge-stream" "^2.0.0" + "supports-color" "^8.0.0" + "jest-worker@^28.1.3": "integrity" "sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==" "resolved" "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.3.tgz" @@ -6040,7 +6241,7 @@ "merge-stream" "^2.0.0" "supports-color" "^8.0.0" -"jest@latest": +"jest@^28.0.0", "jest@>= 22.4.2", "jest@latest": "integrity" "sha512-N4GT5on8UkZgH0O5LUavMRV1EDEhNTL0KEfRmDIeZHSV7p2XgLoY9t9VDUgL6o+yfdgYHVxuz81G8oB9VG5uyA==" "resolved" "https://registry.npmjs.org/jest/-/jest-28.1.3.tgz" "version" "28.1.3" @@ -6146,7 +6347,7 @@ "resolved" "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz" "version" "1.0.2" -"json-parse-even-better-errors@^2.3.0": +"json-parse-even-better-errors@^2.3.0", "json-parse-even-better-errors@^2.3.1": "integrity" "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" "resolved" "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz" "version" "2.3.1" @@ -6331,6 +6532,11 @@ "tar" "^6.1.10" "url-join" "^4.0.1" +"loader-runner@^4.2.0": + "integrity" "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==" + "resolved" "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz" + "version" "4.3.0" + "locate-path@^5.0.0": "integrity" "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==" "resolved" "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz" @@ -6866,7 +7072,7 @@ "resolved" "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz" "version" "0.6.3" -"neo-async@^2.6.0": +"neo-async@^2.6.0", "neo-async@^2.6.2": "integrity" "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" "resolved" "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz" "version" "2.6.2" @@ -7370,7 +7576,7 @@ "resolved" "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz" "version" "4.2.0" -"postcss@^8.4.7": +"postcss@^8.1.0", "postcss@^8.4.7": "integrity" "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==" "resolved" "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz" "version" "8.4.14" @@ -7419,7 +7625,7 @@ dependencies: "fast-diff" "^1.1.2" -"prettier@^2.7.1": +"prettier@^2.7.1", "prettier@>=2.0.0": "integrity" "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==" "resolved" "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz" "version" "2.7.1" @@ -7526,6 +7732,13 @@ "resolved" "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" "version" "1.2.3" +"randombytes@^2.1.0": + "integrity" "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==" + "resolved" "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz" + "version" "2.1.0" + dependencies: + "safe-buffer" "^5.1.0" + "rc-align@^4.0.0": "integrity" "sha512-3DuwSJp8iC/dgHzwreOQl52soj40LchlfUHtgACOUtwGuoFIOVh6n/sCpfqCU8kO5+iz6qR0YKvjgB8iPdE3aQ==" "resolved" "https://registry.npmjs.org/rc-align/-/rc-align-4.0.12.tgz" @@ -7915,7 +8128,7 @@ "reactcss" "^1.2.0" "tinycolor2" "^1.4.1" -"react-dom@latest": +"react-dom@*", "react-dom@^0.14.8 || ^15.0.1 || ^16.0.0 || ^17.0.1", "react-dom@>=16.0.0", "react-dom@>=16.11.0", "react-dom@>=16.9.0", "react-dom@latest": "integrity" "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==" "resolved" "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz" "version" "17.0.2" @@ -7972,7 +8185,7 @@ dependencies: "@reach/observe-rect" "^1.1.0" -"react@latest": +"react@*", "react@^0.14.8 || ^15.0.1 || ^16.0.0 || ^17.0.1", "react@^0.14.9 || ^15.3.0 || ^16.0.0 || ^17.0.0 || ^18.0.0", "react@^16.6.3 || ^17.0.0", "react@>=16.0.0", "react@>=16.11.0", "react@>=16.8.0", "react@>=16.9.0", "react@17.0.2", "react@latest": "integrity" "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==" "resolved" "https://registry.npmjs.org/react/-/react-17.0.2.tgz" "version" "17.0.2" @@ -8324,7 +8537,7 @@ dependencies: "tslib" "^2.1.0" -"safe-buffer@^5.0.1", "safe-buffer@^5.1.1", "safe-buffer@^5.1.2", "safe-buffer@~5.1.0", "safe-buffer@~5.1.1": +"safe-buffer@^5.0.1", "safe-buffer@^5.1.0", "safe-buffer@^5.1.1", "safe-buffer@^5.1.2", "safe-buffer@~5.1.0", "safe-buffer@~5.1.1": "integrity" "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" "resolved" "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" "version" "5.1.2" @@ -8361,6 +8574,15 @@ "loose-envify" "^1.1.0" "object-assign" "^4.1.1" +"schema-utils@^3.1.0", "schema-utils@^3.1.1": + "integrity" "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==" + "resolved" "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz" + "version" "3.1.1" + dependencies: + "@types/json-schema" "^7.0.8" + "ajv" "^6.12.5" + "ajv-keywords" "^3.5.2" + "scroll-into-view-if-needed@^2.2.25": "integrity" "sha512-hxpAR6AN+Gh53AdAimHM6C8oTN1ppwVZITihix+WqalywBeFcQ6LdQP5ABNl26nX8GTEL7VT+b8lKpdqq65wXg==" "resolved" "https://registry.npmjs.org/scroll-into-view-if-needed/-/scroll-into-view-if-needed-2.2.29.tgz" @@ -8448,6 +8670,13 @@ dependencies: "type-fest" "^0.13.1" +"serialize-javascript@^6.0.0": + "integrity" "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==" + "resolved" "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz" + "version" "6.0.0" + dependencies: + "randombytes" "^2.1.0" + "set-blocking@^2.0.0": "integrity" "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" "resolved" "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz" @@ -8820,7 +9049,7 @@ "http-response-object" "^1.0.1" "then-request" "^2.0.1" -"tapable@^2.2.0": +"tapable@^2.1.1", "tapable@^2.2.0": "integrity" "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==" "resolved" "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz" "version" "2.2.1" @@ -8892,7 +9121,18 @@ "ansi-escapes" "^4.2.1" "supports-hyperlinks" "^2.0.0" -"terser@^5.10.0": +"terser-webpack-plugin@^5.1.3": + "integrity" "sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ==" + "resolved" "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.6.tgz" + "version" "5.3.6" + dependencies: + "@jridgewell/trace-mapping" "^0.3.14" + "jest-worker" "^27.4.5" + "schema-utils" "^3.1.1" + "serialize-javascript" "^6.0.0" + "terser" "^5.14.1" + +"terser@^5.10.0", "terser@^5.14.1": "integrity" "sha512-xvQfyfA1ayT0qdK47zskQgRZeWLoOQ8JQ6mIgRGVNwZKdQMU+5FkCBjmv4QjcrTzyZquRw2FVtlJSRUmMKQslw==" "resolved" "https://registry.npmjs.org/terser/-/terser-5.16.1.tgz" "version" "5.16.1" @@ -9138,7 +9378,7 @@ "resolved" "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz" "version" "0.0.6" -"typescript@^4.4.4": +"typescript@^4.4.4", "typescript@>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta", "typescript@>=4.3": "integrity" "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==" "resolved" "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz" "version" "4.7.4" @@ -9326,6 +9566,14 @@ dependencies: "makeerror" "1.0.12" +"watchpack@^2.4.0": + "integrity" "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==" + "resolved" "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz" + "version" "2.4.0" + dependencies: + "glob-to-regexp" "^0.4.1" + "graceful-fs" "^4.1.2" + "watskeburt@0.8.1": "integrity" "sha512-QpTiPIyYJMzr+HxwZSM1pZk9sfOFhycuINSC2N+SmFwA4PVA++GNxaCC8Lr9PGWGwxB+uGlpTlF9IrfiqUBPeg==" "resolved" "https://registry.npmjs.org/watskeburt/-/watskeburt-0.8.1.tgz" @@ -9355,6 +9603,41 @@ "resolved" "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz" "version" "7.0.0" +"webpack-sources@^3.2.3": + "integrity" "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==" + "resolved" "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz" + "version" "3.2.3" + +"webpack@^5.0.0", "webpack@^5.1.0": + "integrity" "sha512-piaIaoVJlqMsPtX/+3KTTO6jfvrSYgauFVdt8cr9LTHKmcq/AMd4mhzsiP7ZF/PGRNPGA8336jldh9l2Kt2ogQ==" + "resolved" "https://registry.npmjs.org/webpack/-/webpack-5.75.0.tgz" + "version" "5.75.0" + dependencies: + "@types/eslint-scope" "^3.7.3" + "@types/estree" "^0.0.51" + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/wasm-edit" "1.11.1" + "@webassemblyjs/wasm-parser" "1.11.1" + "acorn" "^8.7.1" + "acorn-import-assertions" "^1.7.6" + "browserslist" "^4.14.5" + "chrome-trace-event" "^1.0.2" + "enhanced-resolve" "^5.10.0" + "es-module-lexer" "^0.9.0" + "eslint-scope" "5.1.1" + "events" "^3.2.0" + "glob-to-regexp" "^0.4.1" + "graceful-fs" "^4.2.9" + "json-parse-even-better-errors" "^2.3.1" + "loader-runner" "^4.2.0" + "mime-types" "^2.1.27" + "neo-async" "^2.6.2" + "schema-utils" "^3.1.0" + "tapable" "^2.1.1" + "terser-webpack-plugin" "^5.1.3" + "watchpack" "^2.4.0" + "webpack-sources" "^3.2.3" + "whatwg-encoding@^2.0.0": "integrity" "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==" "resolved" "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz" diff --git a/realm-flipper-plugin-device/.eslintrc b/realm-flipper-plugin-device/.eslintrc new file mode 100644 index 0000000..72cbb2d --- /dev/null +++ b/realm-flipper-plugin-device/.eslintrc @@ -0,0 +1,17 @@ +// From https://github.com/realm/realm-js/blob/master/packages/realm-react/.eslintrc.json +{ + "plugins": [ + "eslint-plugin-tsdoc" + ], + "parser": "@typescript-eslint/parser", + "extends": [ + "plugin:@typescript-eslint/recommended", + "plugin:react-hooks/recommended" + ], + "rules": { + "@typescript-eslint/explicit-function-return-type": "off", + "react-hooks/rules-of-hooks": "error", + "react-hooks/exhaustive-deps": "warn", + "tsdoc/syntax": "warn" + } + } \ No newline at end of file From fdd81eb59774b04b52864517c9600e0fe88b32b8 Mon Sep 17 00:00:00 2001 From: gagik Date: Thu, 12 Jan 2023 15:28:51 +0100 Subject: [PATCH 08/20] Add Contributing guide. --- CONTRIBUTING.md | 73 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 CONTRIBUTING.md diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..90b60c3 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,73 @@ +# Contributing + +## Filing Issues + +Whether you find a bug, typo or an API call that could be clarified, please [file an issue](https://github.com/realm/realm-flipper-plugin/issues) on our GitHub repository. + +When filing an issue, please provide as much of the following information as possible in order to help others fix it: + +1. **Goals** +2. **Expected results** +3. **Actual results** +4. **Steps to reproduce** +5. **Code sample that highlights the issue** (full Xcode / Android Studio projects that we can compile ourselves are ideal) +6. **Version of Realm / Flipper Desktop Plugin / Flipper Device Plugin / Your OS** + +If you'd like to send us sensitive sample code to help troubleshoot your issue, you can email directly. + +## Contributing Bug Fixes and Enhancements + +We love contributions to Realm! If you'd like to fix bugs, contribute code, documentation, or add any other improvements, we recommend that create a new issue to pitch what you would like to work on. Once you are ready to contribute, please [file a Pull Request](https://github.com/realm/realm-flipper-plugin/pulls) on our GitHub repository. Make sure to accept our [CLA](#cla). + +If you're on the MongoDB payroll, please ensure you're familiar with [the Realm SDK cross-team working agreement](https://docs.google.com/document/d/1AB9Z1F29oLmubnPAjfphYwGz1xqqeotHaMWK5OKkL3A/edit). + +When creating a PR as an external contributor, please express your intent with your PR; what do you want to solve? To avoid duplication, please link your PR to an existing issue. + +Moreover, indicate how you would like us to support you. We will happily guide you and work with you to move the PR to a point where it can be merged. It might require considerable work at your end to meet our expectations (code quality, API docs, TS defs, tests, etc.). In the case you want to move on and not work with us, please let us know. If the PR meets our expectations, we will merge it - and if it doesn't, we will either take over or close it, depending on the requirement on our time and our current priorities. + +### Branching + +If you’re working on a long-living branch, keep it updated with upstream changes by rebasing it on the target branch on a regular basis. This requires a force-push, so you should coordinate with anyone working on the same branch team when doing that. + +### Commit Messages + +Although we don’t enforce a strict format for commit messages, we prefer that you follow the guidelines below, which are common among open source projects. Following these guidelines helps with the review process, searching commit logs and documentation of implementation details. At a high level, the contents of the commit message should convey the rationale of the change, without delving into much detail. For example, `setter names were not set right` leaves the reviewer wondering about which bits and why they weren’t “right”. In contrast, `[RLMProperty] Correctly capitalize setterName` conveys almost all there is to the change. + +Below are some guidelines about the format of the commit message itself: + +* Separate the commit message into a single-line title and a separate body that describes the change. +* Make the title concise to be easily read within a commit log. +* Make the body concise, while including the complete reasoning. Unless required to understand the change, additional code examples or other details should be left to the pull request. +* If the commit fixes a bug, include the number of the issue in the message. +* Use the first person present tense - for example "Fix …" instead of "Fixes …" or "Fixed …". +* For text formatting and spelling, follow the same rules as documentation and in-code comments — for example, the use of capitalization and periods. +* If the commit is a bug fix on top of another recently committed change, or a revert or reapply of a patch, include the Git revision number of the prior related commit, e.g. `Revert abcd3fg because it caused #1234`. + +### CLA + +Realm welcomes all contributions! The only requirement we have is that, like many other projects, we need to have a [Contributor License Agreement](https://en.wikipedia.org/wiki/Contributor_License_Agreement) (CLA) in place before we can accept any external code. Our own CLA is a modified version of the Apache Software Foundation’s CLA. + +[Please submit your CLA electronically using our Google form](https://docs.google.com/forms/d/e/1FAIpQLSeQ9ROFaTu9pyrmPhXc-dEnLD84DbLuT_-tPNZDOL9J10tOKQ/viewform) so we can accept your submissions. The GitHub username you file there will need to match that of your Pull Requests. If you have any questions or cannot file the CLA electronically, you can email . + +## Building and Debugging the Realm Flipper Plugin Locally +This guide assumes that development is happening on a Mac. +### 1. Building `realm-flipper-plugin-device` +1. Navigate to the device plugin directory: `cd realm-flipper-plugin-device`. +2. Install dependencies with `npm install`. +3. Build with `npm run build` or `npm run build -- --watch` for live build updates. + +### 2. Building and using `flipper-plugin-realm` +1. Navigate to the device plugin directory: `cd flipper-plugin-realm`. +2. Install dependencies with `npm install` +3. Build with `npm run build` or `npm run build -- --watch` for live build updates. +4. **Add the path to your `flipper-plugin-realm` directory to `"pluginPaths"` of your `~/.flipper/config.json`. See [Flipper Docs](https://fbflipper.com/docs/extending/loading-custom-plugins/) for more information**. + +### 3. Testing the plugin with the Realm Flipper Tester +The plugin directory contains `testApp` which is a sample React Native application you can use to test the local device plugin. If you would like to embed the local device plugin version to a different app, refer to the `metro.config.json` and `package.json` of `testApp` as a reference for how that could be done. +1. Navigate to the test app directory `cd testApp`. +2. Install dependencies with `npm install`. +3. Install Pods with `cd ios && pod install` +4. Run the application by going back to `testApp` root with `cd ..` and `npm run ios`. + +That's it! `testApp` will use the current build of `realm-flipper-plugin-device`. + From 33252559c9795d3c4c0fd16ef7539db1793943d8 Mon Sep 17 00:00:00 2001 From: gagik Date: Thu, 12 Jan 2023 15:41:48 +0100 Subject: [PATCH 09/20] Remove unnecessary comment --- flipper-plugin-realm/src/index.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/flipper-plugin-realm/src/index.tsx b/flipper-plugin-realm/src/index.tsx index f2214ed..f381f52 100644 --- a/flipper-plugin-realm/src/index.tsx +++ b/flipper-plugin-realm/src/index.tsx @@ -120,7 +120,6 @@ export function plugin(client: PluginClient) { if (index > state.objects.length) { return; } - // const newObjects = state.objects; state.objects.splice(index, 1); const newLastObject = state.objects[state.objects.length - 1]; pluginState.set({ From 10bc9e7107def50a94d57c97a869e583de10fb60 Mon Sep 17 00:00:00 2001 From: gagik Date: Fri, 13 Jan 2023 13:03:35 +0100 Subject: [PATCH 10/20] Fix expanded row --- flipper-plugin-realm/src/components/DataTable.tsx | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/flipper-plugin-realm/src/components/DataTable.tsx b/flipper-plugin-realm/src/components/DataTable.tsx index d1b017e..423aeaf 100644 --- a/flipper-plugin-realm/src/components/DataTable.tsx +++ b/flipper-plugin-realm/src/components/DataTable.tsx @@ -278,17 +278,20 @@ export const DataTable = (dataTableProps: DataTableProps) => { /** Updating the rowExpansion property of the antd table to expand the correct row and render a nested table inside of it. */ const expandRow = ( - // TODO: figure out the purpose of these variables. rowToExpandKey: any, linkedSchema: SortedObjectSchema, objectToRender: IndexableRealmObject, ) => { const newRowExpansionProp = { ...rowExpansionProp, + expandedRowKeys: [rowToExpandKey], expandedRowRender: () => { return ( ); }, From 5b8be81139b274aa552bad461a7b546b0ae2aeff Mon Sep 17 00:00:00 2001 From: gagik Date: Tue, 17 Jan 2023 12:46:08 +0100 Subject: [PATCH 11/20] Fixes from feedback --- flipper-plugin-realm/src/CommonTypes.tsx | 34 ++++++++------- .../src/components/DataTable.tsx | 19 ++++----- .../src/components/RealmDataInspector.tsx | 2 +- .../objectManipulation/PropertiesModify.tsx | 1 - flipper-plugin-realm/src/index.tsx | 42 +++++++++---------- .../src/utils/ConvertFunctions.ts | 4 +- realm-flipper-plugin-device/package.json | 3 +- .../src/ConvertFunctions.tsx | 3 +- .../src/PluginConnectObjects.ts | 17 ++++---- .../src/RealmPlugin.tsx | 28 ++++++------- 10 files changed, 75 insertions(+), 78 deletions(-) diff --git a/flipper-plugin-realm/src/CommonTypes.tsx b/flipper-plugin-realm/src/CommonTypes.tsx index a04c368..04d6bbd 100644 --- a/flipper-plugin-realm/src/CommonTypes.tsx +++ b/flipper-plugin-realm/src/CommonTypes.tsx @@ -54,24 +54,26 @@ export type Methods = { addObject: (object: AddObject) => Promise; modifyObject: (newObject: EditObject) => Promise; removeObject: (object: RemoveObject) => Promise; - receivedCurrentQuery: (request: { - schema: string | null; - realm: string; - sortingDirection: 'ascend' | 'descend' | null; - sortingColumn: string | null; - }) => Promise; + receivedCurrentQuery: (request: ReceivedCurrentQueryRequest) => Promise; downloadData: (data: DataDownloadRequest) => Promise; }; +type ReceivedCurrentQueryRequest = { + schemaName: string | null; + realm: string; + sortingDirection: 'ascend' | 'descend' | null; + sortingColumn: string | null; +} + type DataDownloadRequest = { - schema: string; + schemaName: string; realm: string; objectKey: string; propertyName: string; }; export type EditObject = { - schema?: string; + schemaName?: string; realm?: string; object: Realm.Object; propsChanged?: string[]; @@ -79,14 +81,14 @@ export type EditObject = { }; export type RemoveObject = { - schema?: string; + schemaName?: string; realm?: string; object: Realm.Object; objectKey: string; }; export type AddObject = { - schema?: string; + schemaName?: string; realm?: string; object: Realm.Object; propsChanged?: string[]; @@ -113,7 +115,7 @@ type RealmRequest = { realm: string; }; type getForwardsObjectsRequest = { - schema: string; + schemaName: string; realm: string; cursor: string | null; sortingColumn: string | null; @@ -122,28 +124,28 @@ type getForwardsObjectsRequest = { }; export type ObjectRequest = { - schema: string; + schemaName: string; realm: string; primaryKey: string; }; export type AddLiveObjectRequest = { newObject: IndexableRealmObject; index: number; - schema: string; + schemaName: string; newObjectKey: string; }; export type DeleteLiveObjectRequest = { index: number; - schema: string; + schemaName: string; }; export type EditLiveObjectRequest = { newObject: IndexableRealmObject; index: number; - schema: string; + schemaName: string; newObjectKey: string; }; type QueryObject = { - schema: string; + schemaName: string; query: string; realm: string; }; diff --git a/flipper-plugin-realm/src/components/DataTable.tsx b/flipper-plugin-realm/src/components/DataTable.tsx index 423aeaf..feba9c9 100644 --- a/flipper-plugin-realm/src/components/DataTable.tsx +++ b/flipper-plugin-realm/src/components/DataTable.tsx @@ -2,9 +2,7 @@ import { PlusOutlined } from '@ant-design/icons'; import { Button, Table } from 'antd'; import { ColumnsType, - FilterValue, SorterResult, - TablePaginationConfig, } from 'antd/lib/table/interface'; import { Layout, Spinner, usePlugin, useValue } from 'flipper-plugin'; import React, { useEffect, useState } from 'react'; @@ -29,7 +27,7 @@ type DataTableProps = { objects: IndexableRealmObject[]; schemas: SortedObjectSchema[]; currentSchema: Realm.CanonicalObjectSchema; - sortingDirection?: 'ascend' | 'descend' | null; + sortingDirection: 'ascend' | 'descend' | null; sortingColumn: string | null; generateMenuItems?: MenuItemGenerator; style?: Record; @@ -49,7 +47,8 @@ type DataTableProps = { }; type ClickableTextType = { - displayText: string | number | JSX.Element; + /** Content to be displayed for the given value. */ + displayValue: string | number | JSX.Element; isLongString: boolean; value: Record; inspectorView: 'object' | 'property'; @@ -125,7 +124,7 @@ export const DataTable = (dataTableProps: DataTableProps) => { /** Functional component to render clickable text which opens the DataInspector.*/ const ClickableText = ({ - displayText, + displayValue, isLongString, value, inspectorView, @@ -145,7 +144,7 @@ export const DataTable = (dataTableProps: DataTableProps) => { onMouseEnter={() => setHovering(true)} onMouseLeave={() => setHovering(false)} > - {displayText} + {displayValue}
{isLongString ? (
{ { @@ -217,7 +216,7 @@ export const DataTable = (dataTableProps: DataTableProps) => { return ( @@ -312,8 +311,6 @@ export const DataTable = (dataTableProps: DataTableProps) => { /** Handling sorting. Is called when the 'state' of the Ant D Table changes, ie. you sort on a column. */ const handleOnChange = ( - _pagination: TablePaginationConfig, - _filters: Record, sorter: SorterResult | SorterResult[], extra: any, ) => { @@ -383,7 +380,7 @@ export const DataTable = (dataTableProps: DataTableProps) => { }} expandable={rowExpansionProp} columns={antdColumns} - onChange={handleOnChange} + onChange={(_, __, sorter, extra) => handleOnChange(sorter, extra)} pagination={false} scroll={{ scrollToFirstRowOnChange: false }} /> diff --git a/flipper-plugin-realm/src/components/RealmDataInspector.tsx b/flipper-plugin-realm/src/components/RealmDataInspector.tsx index 986cf77..799b80c 100644 --- a/flipper-plugin-realm/src/components/RealmDataInspector.tsx +++ b/flipper-plugin-realm/src/components/RealmDataInspector.tsx @@ -196,7 +196,7 @@ export const RealmDataInspector = ({ return; } - let traversedObject = traverseThroughObject(inspectionData.data, path) + const traversedObject = traverseThroughObject(inspectionData.data, path) setNewInspectionData({ data: { [linkedSchema.name]: traversedObject, diff --git a/flipper-plugin-realm/src/components/objectManipulation/PropertiesModify.tsx b/flipper-plugin-realm/src/components/objectManipulation/PropertiesModify.tsx index 4545759..40ddcee 100644 --- a/flipper-plugin-realm/src/components/objectManipulation/PropertiesModify.tsx +++ b/flipper-plugin-realm/src/components/objectManipulation/PropertiesModify.tsx @@ -29,7 +29,6 @@ export const PropertiesModify = ({ schema, value, setValue, setPropsChanges }: I }) } - // TODO: check whether this works as intended. value[propertyName] = val; setValue(value); }; diff --git a/flipper-plugin-realm/src/index.tsx b/flipper-plugin-realm/src/index.tsx index f381f52..e82a342 100644 --- a/flipper-plugin-realm/src/index.tsx +++ b/flipper-plugin-realm/src/index.tsx @@ -47,7 +47,7 @@ export function plugin(client: PluginClient) { client.onMessage('getCurrentQuery', () => { const state = pluginState.get(); client.send('receivedCurrentQuery', { - schema: state.currentSchema ? state.currentSchema.name : null, + schemaName: state.currentSchema ? state.currentSchema.name : null, realm: state.selectedRealm, sortingColumn: state.sortingColumn, sortingDirection: state.sortingDirection, @@ -83,8 +83,8 @@ export function plugin(client: PluginClient) { client.onMessage('liveObjectAdded', (data: AddLiveObjectRequest) => { const state = pluginState.get(); - const { index, schema, newObject } = data; - if (schema !== state.currentSchema?.name) { + const { index, schemaName, newObject } = data; + if (schemaName !== state.currentSchema?.name) { return; } @@ -111,8 +111,8 @@ export function plugin(client: PluginClient) { client.onMessage('liveObjectDeleted', (data: DeleteLiveObjectRequest) => { const state = pluginState.get(); - const { index, schema } = data; - if (schema !== state.currentSchema?.name) { + const { index, schemaName } = data; + if (schemaName !== state.currentSchema?.name) { return; } @@ -132,8 +132,8 @@ export function plugin(client: PluginClient) { client.onMessage('liveObjectEdited', (data: EditLiveObjectRequest) => { const state = pluginState.get(); - const { index, schema, newObject } = data; - if (schema !== state.currentSchema?.name) { + const { index, schemaName, newObject } = data; + if (schemaName !== state.currentSchema?.name) { return; } if (index > state.objects.length) { @@ -179,7 +179,7 @@ export function plugin(client: PluginClient) { }; const requestObjects = ( - schema?: string | null, + schemaName?: string | null, realm?: string | null, toRestore?: Realm.Object[], cursor?: string | null, @@ -190,17 +190,17 @@ export function plugin(client: PluginClient) { return Promise.reject(); } return client.send('getObjects', { - schema: schema ?? state.currentSchema?.name, + schemaName: schemaName ?? state.currentSchema?.name, realm: realm ?? state.selectedRealm, cursor: cursor === undefined ? null : cursor, sortingColumn: state.sortingColumn, - sortingDirection: state.sortingDirection, + sortingDirection: state.sortingDirection ? state.sortingDirection : null, query: query ? query : state.query, }); }; const getObjects = ( - schema?: string | null, + schemaName?: string | null, realm?: string | null, toRestore?: Realm.Object[], cursor?: string | null, @@ -209,14 +209,14 @@ export function plugin(client: PluginClient) { if (!state.currentSchema) { return; } - schema = schema ?? state.currentSchema.name; + schemaName = schemaName ?? state.currentSchema.name; realm = realm ?? state.selectedRealm; cursor = cursor ?? state.cursor; pluginState.set({ ...state, loading: true, }); - requestObjects(schema, realm, toRestore, cursor) + requestObjects(schemaName, realm, toRestore, cursor) .then( (response: ObjectsMessage) => { if (response.objects && !response.objects.length) { @@ -232,7 +232,7 @@ export function plugin(client: PluginClient) { const nextCursor = response.nextCursor; - if (!state.currentSchema || state.currentSchema?.name !== schema) { + if (!state.currentSchema || state.currentSchema?.name !== schemaName) { return; } const objects = convertObjects( @@ -269,16 +269,16 @@ export function plugin(client: PluginClient) { }); }; const downloadData = ( - schema: string, + schemaName: string, objectKey: string, propertyName: string, ) => { const state = pluginState.get(); return client.send('downloadData', { - schema: schema, + schemaName, realm: state.selectedRealm, - objectKey: objectKey, - propertyName: propertyName, + objectKey, + propertyName, }); }; @@ -323,7 +323,7 @@ export function plugin(client: PluginClient) { client .send('addObject', { realm: state.selectedRealm, - schema: state.currentSchema?.name, + schemaName: state.currentSchema?.name, object, }) .catch((reason) => { @@ -411,7 +411,7 @@ export function plugin(client: PluginClient) { client .send('modifyObject', { realm: state.selectedRealm, - schema: state.currentSchema?.name, + schemaName: state.currentSchema?.name, object: newObject, objectKey: newObject._pluginObjectKey, propsChanged: Array.from(propsChanged.values()), @@ -432,7 +432,7 @@ export function plugin(client: PluginClient) { } client.send('removeObject', { realm: state.selectedRealm, - schema: schema.name, + schemaName: schema.name, object: object, objectKey: object._pluginObjectKey, }); diff --git a/flipper-plugin-realm/src/utils/ConvertFunctions.ts b/flipper-plugin-realm/src/utils/ConvertFunctions.ts index b8a0771..8c59c8d 100644 --- a/flipper-plugin-realm/src/utils/ConvertFunctions.ts +++ b/flipper-plugin-realm/src/utils/ConvertFunctions.ts @@ -6,7 +6,7 @@ const convertObject = ( object: IndexableRealmObject, schema: Realm.CanonicalObjectSchema, downloadData: ( - schema: string, + schemaName: string, objectKey: string, propertyName: string, ) => Promise, @@ -34,7 +34,7 @@ export const convertObjects = ( objects: IndexableRealmObject[], schema: Realm.CanonicalObjectSchema, downloadData: ( - schema: string, + schemaName: string, objectKey: string, propertyName: string, ) => Promise, diff --git a/realm-flipper-plugin-device/package.json b/realm-flipper-plugin-device/package.json index e712859..7d5f55a 100644 --- a/realm-flipper-plugin-device/package.json +++ b/realm-flipper-plugin-device/package.json @@ -42,8 +42,7 @@ "realm": ">=10.0.0" }, "dependencies": { - "flatted": "^3.2.7", - "react-native-flipper": ">=0.162.0" + "flatted": "^3.2.7" }, "devDependencies": { "@types/react": "^18.0.25", diff --git a/realm-flipper-plugin-device/src/ConvertFunctions.tsx b/realm-flipper-plugin-device/src/ConvertFunctions.tsx index 8d10203..c9729f7 100644 --- a/realm-flipper-plugin-device/src/ConvertFunctions.tsx +++ b/realm-flipper-plugin-device/src/ConvertFunctions.tsx @@ -32,7 +32,7 @@ const convertObjectToDesktop = ( obj[key]._pluginObjectKey = objectKey; } }); - const replacer = (key: any, value: any) => { + const replacer = (key: keyof typeof properties, value: unknown) => { if (!key) { return value; } @@ -42,6 +42,7 @@ const convertObjectToDesktop = ( } if (property.type === 'data') { return { + //@ts-expect-error Realm data type will have byteLength field. $binaryData: value?.byteLength, }; } else if (property.type === 'mixed') { diff --git a/realm-flipper-plugin-device/src/PluginConnectObjects.ts b/realm-flipper-plugin-device/src/PluginConnectObjects.ts index 5c0d464..41a5eb6 100644 --- a/realm-flipper-plugin-device/src/PluginConnectObjects.ts +++ b/realm-flipper-plugin-device/src/PluginConnectObjects.ts @@ -6,7 +6,7 @@ import {convertObjectsToDesktop} from './ConvertFunctions'; export class PluginConnectedObjects { // Connected objects that the listener is attached to. connectedObjects: Realm.Results; - schema: string; + schemaName: string; objects: Realm.Results; sortingColumn: string; sortingDirection: 'ascend' | 'descend'; @@ -14,13 +14,13 @@ export class PluginConnectedObjects { schemas; constructor( objects: Realm.Results, - schema: string, + schemaName: string, sortingColumn: string, sortingDirection: 'ascend' | 'descend', connection: Flipper.FlipperConnection, schemas: Realm.ObjectSchema[], ) { - this.schema = schema; + this.schemaName = schemaName; this.objects = objects; const shouldSortDescending = sortingDirection === 'descend'; if (sortingColumn) { @@ -51,7 +51,7 @@ export class PluginConnectedObjects { if (this.connection) { this.connection.send('liveObjectDeleted', { index: index, - schema: this.schema, + schemaName: this.schemaName, }); this.connection.send('getCurrentQuery', undefined); } @@ -60,32 +60,31 @@ export class PluginConnectedObjects { changes.insertions.forEach((index: number) => { const inserted = objects[index]; const schema = this.schemas.find( - (schemaObj: Realm.ObjectSchema) => this.schema === schemaObj.name, + (schemaObj: Realm.ObjectSchema) => this.schemaName === schemaObj.name, ); const converted = convertObjectsToDesktop([inserted], schema)[0]; if (this.connection) { this.connection.send('liveObjectAdded', { newObject: converted, index: index, - schema: this.schema, + schemaName: this.schemaName, objects: objects, }); this.connection.send('getCurrentQuery', undefined); } }); - // TODO: should oldModifications be considered too? changes.newModifications.forEach((index: number) => { const modified = objects[index]; const schema = this.schemas.find( - schemaObj => this.schema === schemaObj.name, + schemaObj => this.schemaName === schemaObj.name, ); const converted = convertObjectsToDesktop([modified], schema)[0]; if (this.connection) { this.connection.send('liveObjectEdited', { newObject: converted, index: index, - schema: this.schema, + schemaName: this.schemaName, }); this.connection.send('getCurrentQuery', undefined); } diff --git a/realm-flipper-plugin-device/src/RealmPlugin.tsx b/realm-flipper-plugin-device/src/RealmPlugin.tsx index d734ffc..1c1a248 100644 --- a/realm-flipper-plugin-device/src/RealmPlugin.tsx +++ b/realm-flipper-plugin-device/src/RealmPlugin.tsx @@ -8,7 +8,7 @@ import { import {PluginConnectedObjects} from './PluginConnectObjects'; type getObjectsQuery = { - schema: string; + schemaName: string; realm: string; cursor: string; limit: number; @@ -36,15 +36,15 @@ const RealmPlugin = React.memo((props: {realms: Realm[]}) => { connection.receive('receivedCurrentQuery', obj => { const realm = realmsMap.get(obj.realm); - if (!realm || !obj.schema) { + if (!realm || !obj.schemaName) { return; } if (connectedObjects != null) { connectedObjects.removeListener(); } connectedObjects = new PluginConnectedObjects( - realm.objects(obj.schema), - obj.schema, + realm.objects(obj.schemaName), + obj.schemaName, obj.sortingColumn, obj.sortingDirection, connection, @@ -64,14 +64,14 @@ const RealmPlugin = React.memo((props: {realms: Realm[]}) => { responder.error({message: 'No realm found'}); return; } - const {schema, sortingColumn, sortingDirection, query, cursor} = req; - let objects = realm.objects(schema); + const {schemaName, sortingColumn, sortingDirection, query, cursor} = req; + let objects = realm.objects(schemaName); if (connectedObjects != null) { connectedObjects.removeListener(); } connectedObjects = new PluginConnectedObjects( objects, - schema, + schemaName, sortingColumn, sortingDirection, connection, @@ -97,7 +97,7 @@ const RealmPlugin = React.memo((props: {realms: Realm[]}) => { } //@ts-expect-error This is not a method which is exposed publically - const firstObject = realm._objectForObjectKey(schema, queryCursor); //First object to send + const firstObject = realm._objectForObjectKey(schemaName, queryCursor); //First object to send let indexOfFirstObject = objects.findIndex( obj => obj._objectKey() === firstObject._objectKey(), ); @@ -122,7 +122,7 @@ const RealmPlugin = React.memo((props: {realms: Realm[]}) => { const afterConversion = convertObjectsToDesktop( slicedObjects, realm.schema.find( - convertedSchema => convertedSchema.name === schema, + convertedSchema => convertedSchema.name === schemaName, ), ); responder.success({ @@ -150,7 +150,7 @@ const RealmPlugin = React.memo((props: {realms: Realm[]}) => { return; } //@ts-expect-error This is not a method which is exposed publically - const object = realm._objectForObjectKey(obj.schema, obj.objectKey); + const object = realm._objectForObjectKey(obj.schemaName, obj.objectKey); responder.success({ data: Array.from(new Uint8Array(object[obj.propertyName])), }); @@ -164,11 +164,11 @@ const RealmPlugin = React.memo((props: {realms: Realm[]}) => { const converted = convertObjectsFromDesktop( [obj.object], realm, - obj.schema, + obj.schemaName, )[0]; try { realm.write(() => { - realm.create(obj.schema, converted); + realm.create(obj.schemaName, converted); }); } catch (err) { responder.error({ @@ -191,7 +191,7 @@ const RealmPlugin = React.memo((props: {realms: Realm[]}) => { const converted: Record = convertObjectsFromDesktop( [obj.object], realm, - obj.schema, + obj.schemaName, )[0]; //@ts-expect-error This is not a method which is exposed publically @@ -219,7 +219,7 @@ const RealmPlugin = React.memo((props: {realms: Realm[]}) => { //@ts-expect-error This is not a method which is exposed publically const foundObject = realm._objectForObjectKey( - obj.schema, + obj.schemaName, obj.objectKey, ); realm.write(() => { From 3cecea419b5619b2bb721255ee4f61f746cce1f0 Mon Sep 17 00:00:00 2001 From: gagik Date: Thu, 12 Jan 2023 14:03:21 +0100 Subject: [PATCH 12/20] Use serialization with lazy-loading. --- flipper-plugin-realm/src/CommonTypes.tsx | 127 +++++++++++++----- .../src/components/CustomDropdown.tsx | 26 +--- .../src/components/DataTable.tsx | 61 ++++++--- .../src/components/DataVisualizerWrapper.tsx | 4 +- .../src/components/RealmDataInspector.tsx | 114 +++++++--------- .../src/components/SchemaSelect.tsx | 26 ++-- .../objectManipulation/FieldEdit.tsx | 4 +- .../objectManipulation/ObjectAdd.tsx | 6 +- .../objectManipulation/ObjectEdit.tsx | 4 +- .../objectManipulation/PropertiesModify.tsx | 12 +- .../objectManipulation/types/ObjectInput.tsx | 18 +-- flipper-plugin-realm/src/index.tsx | 107 +++++++++++---- .../src/pages/DataVisualizer.tsx | 73 +++++----- .../src/pages/SchemaVisualizer.tsx | 1 - .../src/utils/ConvertFunctions.ts | 34 +++-- flipper-plugin-realm/src/utils/Renderer.tsx | 53 +++----- .../src/ConvertFunctions.tsx | 117 ++++++++-------- .../src/PluginConnectObjects.ts | 7 +- .../src/RealmPlugin.tsx | 49 +++++-- testApp/app/components/LoginScreen.tsx | 4 +- .../app/flipperTest/FlipperTestAppNonSync.tsx | 2 +- testApp/app/flipperTest/LegacyTestView.tsx | 5 + testApp/app/flipperTest/Schemas.tsx | 44 ++++-- .../testData/createCornerCaseData.tsx | 26 ++++ 24 files changed, 555 insertions(+), 369 deletions(-) create mode 100644 testApp/app/flipperTest/testData/createCornerCaseData.tsx diff --git a/flipper-plugin-realm/src/CommonTypes.tsx b/flipper-plugin-realm/src/CommonTypes.tsx index 04d6bbd..5af7375 100644 --- a/flipper-plugin-realm/src/CommonTypes.tsx +++ b/flipper-plugin-realm/src/CommonTypes.tsx @@ -1,12 +1,36 @@ -// A helper interface which extends Realm.Object with -// a string index signature and object key field for reference. -export interface IndexableRealmObject extends Realm.Object { - [key: string]: unknown; - // Contains the object key that was sent by the device. - _pluginObjectKey: string; +export type PlainRealmObject = Record + +/** + * An interface containing refereence information about a Realm object sent + * from the device plugin. + */ +export interface RealmObjectReference { + // The object key of the stored Realm object + objectKey: string; + objectType: string; } -// A Realm.CanonicalObjectSchema interface with a sorting order field. +/** + * An interface for receiving and sending Realm Objects between + * the desktop plugin and the device. + * @see DeserializedRealmObject +**/ +export interface SerializedRealmObject extends RealmObjectReference { + // Result of serializaing a Realm object from flatted.toJSON(realmObject.toJSON()) + realmObject: never; +} + +/** + * A helper interface which wraps Realm.Object with + * information about its object type and key for reference. + * @see SerializedRealmObject +**/ +export interface DeserializedRealmObject extends RealmObjectReference { + // A plain representation of the Realm object + realmObject: PlainRealmObject; +} + +/** A Realm.CanonicalObjectSchema interface with a sorting order field. */ export interface SortedObjectSchema extends Realm.CanonicalObjectSchema { order: string[]; } @@ -21,7 +45,7 @@ export type RealmPluginState = { deviceSerial: string; realms: string[]; selectedRealm: string; - objects: IndexableRealmObject[]; + objects: DeserializedRealmObject[]; schemas: SortedObjectSchema[]; currentSchema: SortedObjectSchema | null; schemaHistory: SortedObjectSchema[]; @@ -37,22 +61,23 @@ export type RealmPluginState = { }; export type Events = { - getObjects: ObjectsMessage; - getSchemas: SchemaMessage; + getObjects: GetObjectsResponse; + getSchemas: GetSchemasResponse; liveObjectAdded: AddLiveObjectRequest; liveObjectDeleted: DeleteLiveObjectRequest; liveObjectEdited: EditLiveObjectRequest; getCurrentQuery: undefined; - getRealms: RealmsMessage; + getRealms: GetRealmResponse; executeQuery: QueryResult; }; export type Methods = { executeQuery: (query: QueryObject) => Promise; - getObjects: (data: getForwardsObjectsRequest) => Promise; - getSchemas: (data: RealmRequest) => Promise; - getRealms: () => Promise; - addObject: (object: AddObject) => Promise; - modifyObject: (newObject: EditObject) => Promise; + getObjects: (data: GetObjectsRequest) => Promise; + getObject: (data: GetObjectRequest) => Promise; + getSchemas: (data: GetSchemasRequest) => Promise; + getRealms: () => Promise; + addObject: (object: AddObjectsRequest) => Promise; + modifyObject: (newObject: EditObject) => Promise; removeObject: (object: RemoveObject) => Promise; receivedCurrentQuery: (request: ReceivedCurrentQueryRequest) => Promise; downloadData: (data: DataDownloadRequest) => Promise; @@ -75,7 +100,7 @@ type DataDownloadRequest = { export type EditObject = { schemaName?: string; realm?: string; - object: Realm.Object; + object: PlainRealmObject; propsChanged?: string[]; objectKey: string; }; @@ -83,38 +108,41 @@ export type EditObject = { export type RemoveObject = { schemaName?: string; realm?: string; - object: Realm.Object; + object: PlainRealmObject; objectKey: string; }; -export type AddObject = { +export type AddObjectsRequest = { schemaName?: string; realm?: string; - object: Realm.Object; + object: PlainRealmObject; propsChanged?: string[]; }; -export type RealmsMessage = { +export type GetRealmResponse = { realms: string[]; objects: Record[]; total: number; }; -export type ObjectsMessage = { - objects: IndexableRealmObject[]; - total: number; - nextCursor: string; - prev_cursor: { [sortingField: string]: number }; - hasMore: boolean; -}; + export type ObjectMessage = { object: Realm.Object; }; -export type SchemaMessage = { + +type GetSchemasRequest = { + realm: string; +}; + +export type GetSchemasResponse = { schemas: Array; }; -type RealmRequest = { + +type GetObjectRequest = { + schema: string; realm: string; + objectKey: string; }; -type getForwardsObjectsRequest = { + +export type GetObjectsRequest = { schemaName: string; realm: string; cursor: string | null; @@ -123,13 +151,21 @@ type getForwardsObjectsRequest = { query: string; }; +export type GetObjectsResponse = { + objects: SerializedRealmObject[]; + total: number; + nextCursor: string; + prev_cursor: { [sortingField: string]: number }; + hasMore: boolean; +}; + export type ObjectRequest = { schemaName: string; realm: string; primaryKey: string; }; export type AddLiveObjectRequest = { - newObject: IndexableRealmObject; + newObject: SerializedRealmObject; index: number; schemaName: string; newObjectKey: string; @@ -139,7 +175,7 @@ export type DeleteLiveObjectRequest = { schemaName: string; }; export type EditLiveObjectRequest = { - newObject: IndexableRealmObject; + newObject: SerializedRealmObject; index: number; schemaName: string; newObjectKey: string; @@ -152,3 +188,28 @@ type QueryObject = { export type QueryResult = { result: Array | string; }; + + +export type MenuItem = { + key: number; + text: string; + onClick: () => void; +}; + +export type MenuItemGenerator = ( + row: DeserializedRealmObject, + schemaProperty: Realm.CanonicalObjectSchemaProperty, + schema: Realm.ObjectSchema, +) => Array; + +export type DropdownPropertyType = { + record: DeserializedRealmObject | null; + schemaProperty: Realm.CanonicalObjectSchemaProperty | null; + currentSchema: Realm.ObjectSchema; + visible: boolean; + pointerX: number; + pointerY: number; + scrollX: number; + scrollY: number; + generateMenuItems: MenuItemGenerator; +}; diff --git a/flipper-plugin-realm/src/components/CustomDropdown.tsx b/flipper-plugin-realm/src/components/CustomDropdown.tsx index 94c75c5..ee3935c 100644 --- a/flipper-plugin-realm/src/components/CustomDropdown.tsx +++ b/flipper-plugin-realm/src/components/CustomDropdown.tsx @@ -1,30 +1,6 @@ import React, { useState } from 'react'; import { theme } from 'flipper-plugin'; -import { IndexableRealmObject } from '../CommonTypes'; - -export type DropdownPropertyType = { - record: IndexableRealmObject | null; - schemaProperty: Realm.CanonicalObjectSchemaProperty | null; - currentSchema: Realm.ObjectSchema; - visible: boolean; - pointerX: number; - pointerY: number; - scrollX: number; - scrollY: number; - generateMenuItems: MenuItemGenerator; -}; - -type MenuItem = { - key: number; - text: string; - onClick: () => void; -}; - -export type MenuItemGenerator = ( - row: IndexableRealmObject, - schemaProperty: Realm.CanonicalObjectSchemaProperty, - schema: Realm.ObjectSchema, -) => Array; +import { DropdownPropertyType, MenuItem } from '../CommonTypes'; const listItem = (menuItem: MenuItem) => { const [hover, setHover] = useState(false); diff --git a/flipper-plugin-realm/src/components/DataTable.tsx b/flipper-plugin-realm/src/components/DataTable.tsx index feba9c9..eaa1b47 100644 --- a/flipper-plugin-realm/src/components/DataTable.tsx +++ b/flipper-plugin-realm/src/components/DataTable.tsx @@ -11,8 +11,7 @@ import InfiniteScroll from 'react-infinite-scroller'; import { InspectionDataType } from './RealmDataInspector'; import { renderValue } from '../utils/Renderer'; import { ColumnTitle } from './ColumnTitle'; -import { MenuItemGenerator } from './CustomDropdown'; -import { IndexableRealmObject, SortedObjectSchema } from '../CommonTypes'; +import { DropdownPropertyType, MenuItemGenerator, PlainRealmObject, DeserializedRealmObject, SortedObjectSchema, RealmObjectReference } from '../CommonTypes'; export type ColumnType = { optional: boolean; @@ -22,19 +21,20 @@ export type ColumnType = { isPrimaryKey: boolean; }; + type DataTableProps = { columns: ColumnType[]; - objects: IndexableRealmObject[]; + objects: DeserializedRealmObject[]; schemas: SortedObjectSchema[]; currentSchema: Realm.CanonicalObjectSchema; sortingDirection: 'ascend' | 'descend' | null; sortingColumn: string | null; generateMenuItems?: MenuItemGenerator; style?: Record; - setdropdownProp: Function; - dropdownProp: Object; - scrollX?: number; - scrollY?: number; + dropdownProp: DropdownPropertyType; + setdropdownProp: React.Dispatch>; + scrollX: number; + scrollY: number; enableSort: boolean; hasMore: boolean; totalObjects?: number; @@ -43,14 +43,15 @@ type DataTableProps = { inspectionData: InspectionDataType, wipeStacks?: boolean, ) => void; - clickAction?: (object: IndexableRealmObject) => void; + clickAction?: (object: DeserializedRealmObject) => void; }; type ClickableTextType = { /** Content to be displayed for the given value. */ displayValue: string | number | JSX.Element; isLongString: boolean; - value: Record; + value: PlainRealmObject | RealmObjectReference; + isReference?: boolean; inspectorView: 'object' | 'property'; }; @@ -119,7 +120,15 @@ export const DataTable = (dataTableProps: DataTableProps) => { }, []); if (!currentSchema) { - return Please select schema.; + return Please select schema.; + } + + if (currentSchema.embedded) { + return Embedded objects cannot be queried. Please view them from their parent schema or select a different schema.; + } + + if (!schemas || !schemas.length) { + return No schemas found. Check selected Realm.; } /** Functional component to render clickable text which opens the DataInspector.*/ @@ -128,6 +137,7 @@ export const DataTable = (dataTableProps: DataTableProps) => { isLongString, value, inspectorView, + isReference = false, }: ClickableTextType) => { const [isHovering, setHovering] = useState(false); return ( @@ -139,7 +149,7 @@ export const DataTable = (dataTableProps: DataTableProps) => { textDecoration: isHovering ? 'underline' : undefined, }} onClick={() => { - setNewInspectionData({ data: value, view: inspectorView }, true); + setNewInspectionData({ data: value, view: inspectorView, isReference }, true); }} onMouseEnter={() => setHovering(true)} onMouseLeave={() => setHovering(false)} @@ -160,13 +170,13 @@ export const DataTable = (dataTableProps: DataTableProps) => { }; /** Definition of antd-specific columns. This constant is passed to the antd table as a property. */ - const antdColumns:ColumnsType = columns.map((column) => { + const antdColumns:ColumnsType = columns.map((column) => { const property: Realm.CanonicalObjectSchemaProperty = currentSchema.properties[column.name]; /* A function that is applied for every cell to specify what to render in each cell on top of the pure value specified in the 'dataSource' property of the antd table.*/ - const render = (value: IndexableRealmObject, row: IndexableRealmObject) => { + const render = (value: PlainRealmObject, row: DeserializedRealmObject) => { /** Apply the renderValue function on the value in the cell to create a standard cell. */ const cellValue = renderValue(value, property, schemas); @@ -174,8 +184,10 @@ export const DataTable = (dataTableProps: DataTableProps) => { (schema) => schema.name === property.objectType, ); - /** Render buttons to expand the row and a clickable text if the cell contains a linked Realm object. */ + /** Render buttons to expand the row and a clickable text if the cell contains a linked or embedded Realm object. */ if (value !== null && linkedSchema && property.type === 'object') { + const isEmbedded = linkedSchema.embedded; + return ( { onClick={(event) => { event.stopPropagation(); expandRow( - row._pluginObjectKey, + row.objectKey, linkedSchema, value, ); @@ -201,10 +213,15 @@ export const DataTable = (dataTableProps: DataTableProps) => { /> { } @@ -229,7 +246,7 @@ export const DataTable = (dataTableProps: DataTableProps) => { /** Simple antd table props defined in their documentation */ minWidth: 20000, key: property.name, - dataIndex: property.name, + dataIndex: ["realmObject", property.name], width: 300, ellipsis: { showTitle: false, @@ -244,7 +261,7 @@ export const DataTable = (dataTableProps: DataTableProps) => { property, /** The function listening for onCell events, here listening for left-clicks on the cell to render the context menu.*/ - onCell: (object: IndexableRealmObject) => { + onCell: (object: DeserializedRealmObject) => { if (generateMenuItems) { return { onContextMenu: (env: React.MouseEvent) => { @@ -279,7 +296,7 @@ export const DataTable = (dataTableProps: DataTableProps) => { const expandRow = ( rowToExpandKey: any, linkedSchema: SortedObjectSchema, - objectToRender: IndexableRealmObject, + objectToRender: PlainRealmObject, ) => { const newRowExpansionProp = { ...rowExpansionProp, @@ -365,7 +382,7 @@ export const DataTable = (dataTableProps: DataTableProps) => { bordered={true} showSorterTooltip={false} dataSource={objects} - onRow={(object: IndexableRealmObject) => { + onRow={(object: DeserializedRealmObject) => { if (clickAction) { return { onClick: () => { @@ -376,7 +393,7 @@ export const DataTable = (dataTableProps: DataTableProps) => { return {} }} rowKey={(record) => { - return record._pluginObjectKey; + return record.objectKey; }} expandable={rowExpansionProp} columns={antdColumns} diff --git a/flipper-plugin-realm/src/components/DataVisualizerWrapper.tsx b/flipper-plugin-realm/src/components/DataVisualizerWrapper.tsx index c48f201..7c08b30 100644 --- a/flipper-plugin-realm/src/components/DataVisualizerWrapper.tsx +++ b/flipper-plugin-realm/src/components/DataVisualizerWrapper.tsx @@ -1,6 +1,6 @@ import { Layout } from 'flipper-plugin'; import React from 'react'; -import { IndexableRealmObject, SortedObjectSchema } from '../CommonTypes'; +import { DeserializedRealmObject, SortedObjectSchema } from '../CommonTypes'; import DataVisualizer from '../pages/DataVisualizer'; import { DataTabHeader } from './DataTabHeader'; @@ -8,7 +8,7 @@ import SchemaSelect from './SchemaSelect'; type InputType = { schemas: SortedObjectSchema[]; - objects: IndexableRealmObject[]; + objects: DeserializedRealmObject[]; currentSchema: SortedObjectSchema; sortingDirection: 'ascend' | 'descend' | null; sortingColumn: string | null; diff --git a/flipper-plugin-realm/src/components/RealmDataInspector.tsx b/flipper-plugin-realm/src/components/RealmDataInspector.tsx index 799b80c..a4fd846 100644 --- a/flipper-plugin-realm/src/components/RealmDataInspector.tsx +++ b/flipper-plugin-realm/src/components/RealmDataInspector.tsx @@ -5,16 +5,19 @@ import { SearchOutlined, } from '@ant-design/icons'; import { Button, Col, Layout, Radio, Row, Space, Tooltip } from 'antd'; -import { DataInspector, DetailSidebar } from 'flipper-plugin'; +import { DataInspector, DetailSidebar, Spinner } from 'flipper-plugin'; import React, { useEffect, useState } from 'react'; +import { PlainRealmObject, RealmObjectReference } from '../CommonTypes'; import { BoldSpan } from './SchemaSelect'; export type InspectionDataType = { - data: Record; + data: PlainRealmObject | RealmObjectReference; + // Whether the data specified is a reference to another object that needs to be lazy loaded. + isReference: boolean; view: 'object' | 'schema' | 'property'; }; -type PropertyType = { +type RealmDataInspectorProps = { schemas: Realm.CanonicalObjectSchema[]; inspectionData: InspectionDataType | undefined; setInspectionData: React.Dispatch< @@ -27,6 +30,7 @@ type PropertyType = { goForwardStack: Array; setGoForwardStack: React.Dispatch>; setNewInspectionData: (newInspectionData: InspectionDataType) => void; + getObject: (object: RealmObjectReference) => Promise; }; // Helper function to traverse through a Realm object given a path @@ -51,15 +55,35 @@ export const RealmDataInspector = ({ goForwardStack, setGoForwardStack, setNewInspectionData, -}: PropertyType) => { + getObject, +}: RealmDataInspectorProps) => { if (!showSidebar || inspectionData === undefined) return null; /** Utilities to trigger a brief flickering when the InspectionData is updated. * In some cases this makes it easier to see when the data changed. */ const [flickering, setFlickering] = useState(false); const doFlicker = () => { - setFlickering(true); - setTimeout(() => setFlickering(false), 5); + if(inspectionData.isReference && inspectionData.data != null) { + getObject(inspectionData.data as RealmObjectReference).then((loadedObject) => { + if(loadedObject === null) { + // TODO: Better handling. + return; + } + setInspectionData({ + data: { + [inspectionData.data.objectType as string]: + loadedObject, + }, + view: inspectionData.view, + isReference: false, + }) + }) + return; + } else if(!inspectionData.isReference) { + // Do not flicker when referenced data is being fetched. + setFlickering(true); + setTimeout(() => setFlickering(false), 5); + } }; useEffect(doFlicker, [inspectionData]); const flickerStyle = { @@ -100,7 +124,6 @@ export const RealmDataInspector = ({ padding: '5px', }} > - {/* */}