UNPKG

realm-flipper-plugin

Version:

A Flipper Plugin to debug Realm applications.

1,571 lines (1,295 loc) 4.15 MB
var __BUNDLE_START_TIME__=this.nativePerformanceNow?nativePerformanceNow():Date.now(),__DEV__=true,process=this.process||{},__METRO_GLOBAL_PREFIX__='';process.env=process.env||{};process.env.NODE_ENV=process.env.NODE_ENV||"development"; (function (global) { "use strict"; global.__r = metroRequire; global[`${__METRO_GLOBAL_PREFIX__}__d`] = define; global.__c = clear; global.__registerSegment = registerSegment; var modules = clear(); const EMPTY = {}; const { hasOwnProperty } = {}; if (__DEV__) { global.$RefreshReg$ = () => {}; global.$RefreshSig$ = () => type => type; } function clear() { modules = Object.create(null); return modules; } if (__DEV__) { var verboseNamesToModuleIds = Object.create(null); var initializingModuleIds = []; } function define(factory, moduleId, dependencyMap) { if (modules[moduleId] != null) { if (__DEV__) { const inverseDependencies = arguments[4]; if (inverseDependencies) { global.__accept(moduleId, factory, dependencyMap, inverseDependencies); } } return; } const mod = { dependencyMap, factory, hasError: false, importedAll: EMPTY, importedDefault: EMPTY, isInitialized: false, publicModule: { exports: {} } }; modules[moduleId] = mod; if (__DEV__) { mod.hot = createHotReloadingObject(); const verboseName = arguments[3]; if (verboseName) { mod.verboseName = verboseName; verboseNamesToModuleIds[verboseName] = moduleId; } } } function metroRequire(moduleId) { if (__DEV__ && typeof moduleId === "string") { const verboseName = moduleId; moduleId = verboseNamesToModuleIds[verboseName]; if (moduleId == null) { throw new Error(`Unknown named module: "${verboseName}"`); } else { console.warn(`Requiring module "${verboseName}" by name is only supported for ` + "debugging purposes and will BREAK IN PRODUCTION!"); } } const moduleIdReallyIsNumber = moduleId; if (__DEV__) { const initializingIndex = initializingModuleIds.indexOf(moduleIdReallyIsNumber); if (initializingIndex !== -1) { const cycle = initializingModuleIds.slice(initializingIndex).map(id => modules[id] ? modules[id].verboseName : "[unknown]"); cycle.push(cycle[0]); console.warn(`Require cycle: ${cycle.join(" -> ")}\n\n` + "Require cycles are allowed, but can result in uninitialized values. " + "Consider refactoring to remove the need for a cycle."); } } const module = modules[moduleIdReallyIsNumber]; return module && module.isInitialized ? module.publicModule.exports : guardedLoadModule(moduleIdReallyIsNumber, module); } function metroImportDefault(moduleId) { if (__DEV__ && typeof moduleId === "string") { const verboseName = moduleId; moduleId = verboseNamesToModuleIds[verboseName]; } const moduleIdReallyIsNumber = moduleId; if (modules[moduleIdReallyIsNumber] && modules[moduleIdReallyIsNumber].importedDefault !== EMPTY) { return modules[moduleIdReallyIsNumber].importedDefault; } const exports = metroRequire(moduleIdReallyIsNumber); const importedDefault = exports && exports.__esModule ? exports.default : exports; return modules[moduleIdReallyIsNumber].importedDefault = importedDefault; } metroRequire.importDefault = metroImportDefault; function metroImportAll(moduleId) { if (__DEV__ && typeof moduleId === "string") { const verboseName = moduleId; moduleId = verboseNamesToModuleIds[verboseName]; } const moduleIdReallyIsNumber = moduleId; if (modules[moduleIdReallyIsNumber] && modules[moduleIdReallyIsNumber].importedAll !== EMPTY) { return modules[moduleIdReallyIsNumber].importedAll; } const exports = metroRequire(moduleIdReallyIsNumber); let importedAll; if (exports && exports.__esModule) { importedAll = exports; } else { importedAll = {}; if (exports) { for (const key in exports) { if (hasOwnProperty.call(exports, key)) { importedAll[key] = exports[key]; } } } importedAll.default = exports; } return modules[moduleIdReallyIsNumber].importedAll = importedAll; } metroRequire.importAll = metroImportAll; let inGuard = false; function guardedLoadModule(moduleId, module) { if (!inGuard && global.ErrorUtils) { inGuard = true; let returnValue; try { returnValue = loadModuleImplementation(moduleId, module); } catch (e) { global.ErrorUtils.reportFatalError(e); } inGuard = false; return returnValue; } else { return loadModuleImplementation(moduleId, module); } } const ID_MASK_SHIFT = 16; const LOCAL_ID_MASK = ~0 >>> ID_MASK_SHIFT; function unpackModuleId(moduleId) { const segmentId = moduleId >>> ID_MASK_SHIFT; const localId = moduleId & LOCAL_ID_MASK; return { segmentId, localId }; } metroRequire.unpackModuleId = unpackModuleId; function packModuleId(value) { return (value.segmentId << ID_MASK_SHIFT) + value.localId; } metroRequire.packModuleId = packModuleId; const moduleDefinersBySegmentID = []; const definingSegmentByModuleID = new Map(); function registerSegment(segmentId, moduleDefiner, moduleIds) { moduleDefinersBySegmentID[segmentId] = moduleDefiner; if (__DEV__) { if (segmentId === 0 && moduleIds) { throw new Error("registerSegment: Expected moduleIds to be null for main segment"); } if (segmentId !== 0 && !moduleIds) { throw new Error("registerSegment: Expected moduleIds to be passed for segment #" + segmentId); } } if (moduleIds) { moduleIds.forEach(moduleId => { if (!modules[moduleId] && !definingSegmentByModuleID.has(moduleId)) { definingSegmentByModuleID.set(moduleId, segmentId); } }); } } function loadModuleImplementation(moduleId, module) { if (!module && moduleDefinersBySegmentID.length > 0) { var _definingSegmentByMod; const segmentId = (_definingSegmentByMod = definingSegmentByModuleID.get(moduleId)) !== null && _definingSegmentByMod !== void 0 ? _definingSegmentByMod : 0; const definer = moduleDefinersBySegmentID[segmentId]; if (definer != null) { definer(moduleId); module = modules[moduleId]; definingSegmentByModuleID.delete(moduleId); } } const nativeRequire = global.nativeRequire; if (!module && nativeRequire) { const { segmentId, localId } = unpackModuleId(moduleId); nativeRequire(localId, segmentId); module = modules[moduleId]; } if (!module) { throw unknownModuleError(moduleId); } if (module.hasError) { throw moduleThrewError(moduleId, module.error); } if (__DEV__) { var Systrace = requireSystrace(); var Refresh = requireRefresh(); } module.isInitialized = true; const { factory, dependencyMap } = module; if (__DEV__) { initializingModuleIds.push(moduleId); } try { if (__DEV__) { Systrace.beginEvent("JS_require_" + (module.verboseName || moduleId)); } const moduleObject = module.publicModule; if (__DEV__) { moduleObject.hot = module.hot; var prevRefreshReg = global.$RefreshReg$; var prevRefreshSig = global.$RefreshSig$; if (Refresh != null) { const RefreshRuntime = Refresh; global.$RefreshReg$ = (type, id) => { RefreshRuntime.register(type, moduleId + " " + id); }; global.$RefreshSig$ = RefreshRuntime.createSignatureFunctionForTransform; } } moduleObject.id = moduleId; factory(global, metroRequire, metroImportDefault, metroImportAll, moduleObject, moduleObject.exports, dependencyMap); if (!__DEV__) { module.factory = undefined; module.dependencyMap = undefined; } if (__DEV__) { Systrace.endEvent(); if (Refresh != null) { registerExportsForReactRefresh(Refresh, moduleObject.exports, moduleId); } } return moduleObject.exports; } catch (e) { module.hasError = true; module.error = e; module.isInitialized = false; module.publicModule.exports = undefined; throw e; } finally { if (__DEV__) { if (initializingModuleIds.pop() !== moduleId) { throw new Error("initializingModuleIds is corrupt; something is terribly wrong"); } global.$RefreshReg$ = prevRefreshReg; global.$RefreshSig$ = prevRefreshSig; } } } function unknownModuleError(id) { let message = 'Requiring unknown module "' + id + '".'; if (__DEV__) { message += " If you are sure the module exists, try restarting Metro. " + "You may also want to run `yarn` or `npm install`."; } return Error(message); } function moduleThrewError(id, error) { const displayName = __DEV__ && modules[id] && modules[id].verboseName || id; return Error('Requiring module "' + displayName + '", which threw an exception: ' + error); } if (__DEV__) { metroRequire.Systrace = { beginEvent: () => {}, endEvent: () => {} }; metroRequire.getModules = () => { return modules; }; var createHotReloadingObject = function () { const hot = { _acceptCallback: null, _disposeCallback: null, _didAccept: false, accept: callback => { hot._didAccept = true; hot._acceptCallback = callback; }, dispose: callback => { hot._disposeCallback = callback; } }; return hot; }; let reactRefreshTimeout = null; const metroHotUpdateModule = function (id, factory, dependencyMap, inverseDependencies) { const mod = modules[id]; if (!mod) { if (factory) { return; } throw unknownModuleError(id); } if (!mod.hasError && !mod.isInitialized) { mod.factory = factory; mod.dependencyMap = dependencyMap; return; } const Refresh = requireRefresh(); const refreshBoundaryIDs = new Set(); let didBailOut = false; const updatedModuleIDs = topologicalSort([id], pendingID => { const pendingModule = modules[pendingID]; if (pendingModule == null) { return []; } const pendingHot = pendingModule.hot; if (pendingHot == null) { throw new Error("[Refresh] Expected module.hot to always exist in DEV."); } let canAccept = pendingHot._didAccept; if (!canAccept && Refresh != null) { const isBoundary = isReactRefreshBoundary(Refresh, pendingModule.publicModule.exports); if (isBoundary) { canAccept = true; refreshBoundaryIDs.add(pendingID); } } if (canAccept) { return []; } const parentIDs = inverseDependencies[pendingID]; if (parentIDs.length === 0) { performFullRefresh("No root boundary", { source: mod, failed: pendingModule }); didBailOut = true; return []; } return parentIDs; }, () => didBailOut).reverse(); if (didBailOut) { return; } const seenModuleIDs = new Set(); for (let i = 0; i < updatedModuleIDs.length; i++) { const updatedID = updatedModuleIDs[i]; if (seenModuleIDs.has(updatedID)) { continue; } seenModuleIDs.add(updatedID); const updatedMod = modules[updatedID]; if (updatedMod == null) { throw new Error("[Refresh] Expected to find the updated module."); } const prevExports = updatedMod.publicModule.exports; const didError = runUpdatedModule(updatedID, updatedID === id ? factory : undefined, updatedID === id ? dependencyMap : undefined); const nextExports = updatedMod.publicModule.exports; if (didError) { return; } if (refreshBoundaryIDs.has(updatedID)) { const isNoLongerABoundary = !isReactRefreshBoundary(Refresh, nextExports); const didInvalidate = shouldInvalidateReactRefreshBoundary(Refresh, prevExports, nextExports); if (isNoLongerABoundary || didInvalidate) { const parentIDs = inverseDependencies[updatedID]; if (parentIDs.length === 0) { performFullRefresh(isNoLongerABoundary ? "No longer a boundary" : "Invalidated boundary", { source: mod, failed: updatedMod }); return; } for (let j = 0; j < parentIDs.length; j++) { const parentID = parentIDs[j]; const parentMod = modules[parentID]; if (parentMod == null) { throw new Error("[Refresh] Expected to find parent module."); } const canAcceptParent = isReactRefreshBoundary(Refresh, parentMod.publicModule.exports); if (canAcceptParent) { refreshBoundaryIDs.add(parentID); updatedModuleIDs.push(parentID); } else { performFullRefresh("Invalidated boundary", { source: mod, failed: parentMod }); return; } } } } } if (Refresh != null) { if (reactRefreshTimeout == null) { reactRefreshTimeout = setTimeout(() => { reactRefreshTimeout = null; Refresh.performReactRefresh(); }, 30); } } }; const topologicalSort = function (roots, getEdges, earlyStop) { const result = []; const visited = new Set(); function traverseDependentNodes(node) { visited.add(node); const dependentNodes = getEdges(node); if (earlyStop(node)) { return; } dependentNodes.forEach(dependent => { if (visited.has(dependent)) { return; } traverseDependentNodes(dependent); }); result.push(node); } roots.forEach(root => { if (!visited.has(root)) { traverseDependentNodes(root); } }); return result; }; const runUpdatedModule = function (id, factory, dependencyMap) { const mod = modules[id]; if (mod == null) { throw new Error("[Refresh] Expected to find the module."); } const { hot } = mod; if (!hot) { throw new Error("[Refresh] Expected module.hot to always exist in DEV."); } if (hot._disposeCallback) { try { hot._disposeCallback(); } catch (error) { console.error(`Error while calling dispose handler for module ${id}: `, error); } } if (factory) { mod.factory = factory; } if (dependencyMap) { mod.dependencyMap = dependencyMap; } mod.hasError = false; mod.error = undefined; mod.importedAll = EMPTY; mod.importedDefault = EMPTY; mod.isInitialized = false; const prevExports = mod.publicModule.exports; mod.publicModule.exports = {}; hot._didAccept = false; hot._acceptCallback = null; hot._disposeCallback = null; metroRequire(id); if (mod.hasError) { mod.hasError = false; mod.isInitialized = true; mod.error = null; mod.publicModule.exports = prevExports; return true; } if (hot._acceptCallback) { try { hot._acceptCallback(); } catch (error) { console.error(`Error while calling accept handler for module ${id}: `, error); } } return false; }; const performFullRefresh = (reason, modules) => { if (typeof window !== "undefined" && window.location != null && typeof window.location.reload === "function") { window.location.reload(); } else { const Refresh = requireRefresh(); if (Refresh != null) { var _modules$source$verbo, _modules$source, _modules$failed$verbo, _modules$failed; const sourceName = (_modules$source$verbo = (_modules$source = modules.source) === null || _modules$source === void 0 ? void 0 : _modules$source.verboseName) !== null && _modules$source$verbo !== void 0 ? _modules$source$verbo : "unknown"; const failedName = (_modules$failed$verbo = (_modules$failed = modules.failed) === null || _modules$failed === void 0 ? void 0 : _modules$failed.verboseName) !== null && _modules$failed$verbo !== void 0 ? _modules$failed$verbo : "unknown"; Refresh.performFullRefresh(`Fast Refresh - ${reason} <${sourceName}> <${failedName}>`); } else { console.warn("Could not reload the application after an edit."); } } }; var isReactRefreshBoundary = function (Refresh, moduleExports) { if (Refresh.isLikelyComponentType(moduleExports)) { return true; } if (moduleExports == null || typeof moduleExports !== "object") { return false; } let hasExports = false; let areAllExportsComponents = true; for (const key in moduleExports) { hasExports = true; if (key === "__esModule") { continue; } const desc = Object.getOwnPropertyDescriptor(moduleExports, key); if (desc && desc.get) { return false; } const exportValue = moduleExports[key]; if (!Refresh.isLikelyComponentType(exportValue)) { areAllExportsComponents = false; } } return hasExports && areAllExportsComponents; }; var shouldInvalidateReactRefreshBoundary = (Refresh, prevExports, nextExports) => { const prevSignature = getRefreshBoundarySignature(Refresh, prevExports); const nextSignature = getRefreshBoundarySignature(Refresh, nextExports); if (prevSignature.length !== nextSignature.length) { return true; } for (let i = 0; i < nextSignature.length; i++) { if (prevSignature[i] !== nextSignature[i]) { return true; } } return false; }; var getRefreshBoundarySignature = (Refresh, moduleExports) => { const signature = []; signature.push(Refresh.getFamilyByType(moduleExports)); if (moduleExports == null || typeof moduleExports !== "object") { return signature; } for (const key in moduleExports) { if (key === "__esModule") { continue; } const desc = Object.getOwnPropertyDescriptor(moduleExports, key); if (desc && desc.get) { continue; } const exportValue = moduleExports[key]; signature.push(key); signature.push(Refresh.getFamilyByType(exportValue)); } return signature; }; var registerExportsForReactRefresh = (Refresh, moduleExports, moduleID) => { Refresh.register(moduleExports, moduleID + " %exports%"); if (moduleExports == null || typeof moduleExports !== "object") { return; } for (const key in moduleExports) { const desc = Object.getOwnPropertyDescriptor(moduleExports, key); if (desc && desc.get) { continue; } const exportValue = moduleExports[key]; const typeID = moduleID + " %exports% " + key; Refresh.register(exportValue, typeID); } }; global.__accept = metroHotUpdateModule; } if (__DEV__) { var requireSystrace = function requireSystrace() { return global[__METRO_GLOBAL_PREFIX__ + "__SYSTRACE"] || metroRequire.Systrace; }; var requireRefresh = function requireRefresh() { return global[__METRO_GLOBAL_PREFIX__ + "__ReactRefresh"] || metroRequire.Refresh; }; } })(typeof globalThis !== 'undefined' ? globalThis : typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : this); __d(function (global, _$$_REQUIRE, _$$_IMPORT_DEFAULT, _$$_IMPORT_ALL, module, exports, _dependencyMap) { Object.defineProperty(exports, "__esModule", { value: true }); exports.Component = Component; exports.plugin = plugin; var _flipperPlugin = global.FlipperPlugin; var _react = _interopRequireWildcard(global.React); var _CommonHeader = _$$_REQUIRE(_dependencyMap[0], "./components/common/CommonHeader"); var _DataVisualizerWrapper = _$$_REQUIRE(_dependencyMap[1], "./components/DataVisualizerWrapper"); var _Query = _$$_REQUIRE(_dependencyMap[2], "./components/Query"); var _SchemaSelect = _interopRequireDefault(_$$_REQUIRE(_dependencyMap[3], "./components/SchemaSelect")); var _SchemaGraph = _$$_REQUIRE(_dependencyMap[4], "./pages/SchemaGraph"); var _SchemaVisualizer = _interopRequireDefault(_$$_REQUIRE(_dependencyMap[5], "./pages/SchemaVisualizer")); var _ConvertFunctions = _$$_REQUIRE(_dependencyMap[6], "./utils/ConvertFunctions"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } function plugin(client) { const pluginState = (0, _flipperPlugin.createState)({ deviceSerial: '', realms: [], selectedRealm: '', objects: [], schemas: [], schemaHistory: [], schemaHistoryIndex: 0, cursor: null, totalObjects: 0, sortingColumn: null, sortingDirection: null, hasMore: false, currentSchema: null, loading: false, query: '' }); client.onMessage('getCurrentQuery', () => { const state = pluginState.get(); client.send('receivedCurrentQuery', { schemaName: state.currentSchema ? state.currentSchema.name : null, realm: state.selectedRealm, sortingColumn: state.sortingColumn, sortingDirection: state.sortingDirection }); }); const sortSchemaProperties = schema => { const sortedPropKeys = Object.keys(schema.properties).sort(function (a, b) { return a.toLowerCase().localeCompare(b.toLowerCase()); }); const primKeyIndex = sortedPropKeys.findIndex(key => schema.primaryKey === key); if (primKeyIndex >= 0) { const primKey = sortedPropKeys[primKeyIndex]; sortedPropKeys.splice(primKeyIndex, 1); sortedPropKeys.splice(0, 0, primKey); } const newSchemaObj = { ...schema, order: sortedPropKeys }; Object.defineProperty(newSchemaObj, 'order', { enumerable: false, writable: true }); return newSchemaObj; }; client.onMessage('liveObjectAdded', data => { var _state$currentSchema; const state = pluginState.get(); const { index, schemaName, newObject } = data; if (schemaName !== ((_state$currentSchema = state.currentSchema) === null || _state$currentSchema === void 0 ? void 0 : _state$currentSchema.name)) { return; } if (index < state.objects.length && state.objects[index].objectKey == newObject.objectKey) { return; } const clone = structuredClone(newObject); const copyOfObjects = state.objects; const addedObject = (0, _ConvertFunctions.deserializeRealmObject)(clone, state.currentSchema); copyOfObjects.splice(index, 0, addedObject); const newLastObject = copyOfObjects[copyOfObjects.length - 1]; pluginState.set({ ...state, objects: [...copyOfObjects], totalObjects: state.totalObjects + 1, cursor: newLastObject.objectKey }); }); client.onMessage('liveObjectDeleted', data => { var _state$currentSchema2; const state = pluginState.get(); const { index, schemaName } = data; if (schemaName !== ((_state$currentSchema2 = state.currentSchema) === null || _state$currentSchema2 === void 0 ? void 0 : _state$currentSchema2.name)) { return; } if (index > state.objects.length) { return; } state.objects.splice(index, 1); const newLastObject = state.objects[state.objects.length - 1]; pluginState.set({ ...state, objects: state.objects, totalObjects: state.totalObjects - 1, cursor: newLastObject ? newLastObject.objectKey : null }); }); client.onMessage('liveObjectEdited', data => { var _state$currentSchema3; const state = pluginState.get(); const { index, schemaName, newObject } = data; if (schemaName !== ((_state$currentSchema3 = state.currentSchema) === null || _state$currentSchema3 === void 0 ? void 0 : _state$currentSchema3.name)) { return; } if (index > state.objects.length) { return; } if (state.objects[index].objectKey != data.newObject.objectKey) { return; } const clone = structuredClone(newObject); const copyOfObjects = state.objects; const addedObject = (0, _ConvertFunctions.deserializeRealmObject)(clone, state.currentSchema); copyOfObjects.splice(index, 1, addedObject); const newLastObject = copyOfObjects[copyOfObjects.length - 1]; pluginState.set({ ...state, objects: [...copyOfObjects], cursor: newLastObject.objectKey }); }); client.addMenuEntry({ action: 'clear', handler: async () => {} }); const getRealms = () => { client.send('getRealms', undefined).then(realms => { const state = pluginState.get(); pluginState.set({ ...state, realms: realms.realms, selectedRealm: realms.realms[0] }); getSchemas(realms.realms[0]); }); }; const requestObjects = (schemaName, realm, toRestore, cursor, query) => { var _state$currentSchema4; const state = pluginState.get(); if (!state.currentSchema) { return Promise.reject(); } return client.send('getObjects', { schemaName: schemaName !== null && schemaName !== void 0 ? schemaName : (_state$currentSchema4 = state.currentSchema) === null || _state$currentSchema4 === void 0 ? void 0 : _state$currentSchema4.name, realm: realm !== null && realm !== void 0 ? realm : state.selectedRealm, cursor: cursor === undefined ? null : cursor, sortingColumn: state.sortingColumn, sortingDirection: state.sortingDirection ? state.sortingDirection : null, query: query ? query : state.query }); }; const getObject = (realm, schemaName, objectKey) => { const state = pluginState.get(); pluginState.set({ ...state, loading: true }); return client.send('getObject', { realm, schemaName, objectKey }).then(serializedObject => { const actualSchema = state.schemas.find(schema => schema.name === schemaName); if (!actualSchema) { return null; } const deserializedObject = (0, _ConvertFunctions.deserializeRealmObject)(serializedObject, actualSchema); return deserializedObject; }, reason => { pluginState.set({ ...state, errorMessage: reason.message }); return null; }).catch(error => { pluginState.set({ ...state, errorMessage: error.message }); return null; }); }; const getObjects = (schemaName, realm, toRestore, cursor) => { var _schemaName, _realm, _cursor; const state = pluginState.get(); if (!state.currentSchema || state.currentSchema.embedded) { return; } schemaName = (_schemaName = schemaName) !== null && _schemaName !== void 0 ? _schemaName : state.currentSchema.name; realm = (_realm = realm) !== null && _realm !== void 0 ? _realm : state.selectedRealm; cursor = (_cursor = cursor) !== null && _cursor !== void 0 ? _cursor : state.cursor; pluginState.set({ ...state, loading: true }); requestObjects(schemaName, realm, toRestore, cursor).then(response => { var _state$currentSchema5; if (response.objects && !response.objects.length) { pluginState.set({ ...state, hasMore: false, loading: false, totalObjects: response.total, cursor: null }); return; } const nextCursor = response.nextCursor; if (!state.currentSchema || ((_state$currentSchema5 = state.currentSchema) === null || _state$currentSchema5 === void 0 ? void 0 : _state$currentSchema5.name) !== schemaName) { return; } const objects = (0, _ConvertFunctions.deserializeRealmObjects)(response.objects, state.currentSchema); pluginState.set({ ...state, objects: [...state.objects, ...objects], cursor: nextCursor, totalObjects: response.total, hasMore: response.hasMore, errorMessage: '', loading: false }); }, reason => { pluginState.set({ ...state, errorMessage: reason.message, objects: [], loading: false }); }).catch(error => { pluginState.set({ ...state, errorMessage: error.message, objects: [], loading: false }); }); }; const downloadData = (schemaName, objectKey, propertyName) => { const state = pluginState.get(); return client.send('downloadData', { schemaName, realm: state.selectedRealm, objectKey, propertyName }); }; const getSchemas = realm => { client.send('getSchemas', { realm: realm }).then(schemaResult => { const newSchemas = schemaResult.schemas.map(schema => sortSchemaProperties(schema)); const state = pluginState.get(); pluginState.set({ ...state, schemas: newSchemas }); if (newSchemas.length) { setSelectedSchema(newSchemas[0]); getObjects(newSchemas[0].name, state.selectedRealm); } }); }; const executeQuery = async query => { const state = pluginState.get(); (0, _Query.addToHistory)(query); pluginState.set({ ...state, cursor: null, sortingColumn: null, query: query, objects: [] }); getObjects(); }; const addObject = object => { var _state$currentSchema6; const state = pluginState.get(); if (!state.currentSchema) { return; } client.send('addObject', { realm: state.selectedRealm, schemaName: (_state$currentSchema6 = state.currentSchema) === null || _state$currentSchema6 === void 0 ? void 0 : _state$currentSchema6.name, object }).catch(reason => { pluginState.set({ ...state, errorMessage: reason.error }); }); }; const setSelectedSchema = schema => { var _state$currentSchema7; const state = pluginState.get(); if (((_state$currentSchema7 = state.currentSchema) === null || _state$currentSchema7 === void 0 ? void 0 : _state$currentSchema7.name) === schema.name) { return; } const newHistory = Array.from(state.schemaHistory); const index = state.schemaHistoryIndex; newHistory.splice(index + 1); newHistory.push(schema); const length = newHistory.length - 1; pluginState.set({ ...state, schemaHistory: [...newHistory], schemaHistoryIndex: length, cursor: null, objects: [], sortingColumn: null, currentSchema: schema, query: '', errorMessage: '' }); }; const goBackSchemaHistory = schema => { const state = pluginState.get(); pluginState.set({ ...state, schemaHistoryIndex: state.schemaHistoryIndex - 1, cursor: null, objects: [], sortingColumn: null, currentSchema: schema }); }; const goForwardSchemaHistory = schema => { const state = pluginState.get(); pluginState.set({ ...state, schemaHistoryIndex: state.schemaHistoryIndex + 1, cursor: null, objects: [], sortingColumn: null, currentSchema: schema }); }; const setSelectedRealm = realm => { const state = pluginState.get(); pluginState.set({ ...state, selectedRealm: realm, objects: [], cursor: null }); }; client.onConnect(() => { const state = pluginState.get(); pluginState.set({ ...state, deviceSerial: client.device.serial }); getRealms(); }); const modifyObject = (newObject, propsChanged) => { var _state$currentSchema8; if (newObject.realmObject == undefined) { return; } const state = pluginState.get(); client.send('modifyObject', { realm: state.selectedRealm, schemaName: (_state$currentSchema8 = state.currentSchema) === null || _state$currentSchema8 === void 0 ? void 0 : _state$currentSchema8.name, object: newObject.realmObject, objectKey: newObject.objectKey, propsChanged: Array.from(propsChanged.values()) }).catch(e => { pluginState.set({ ...state, errorMessage: e.message }); }); }; const removeObject = removedObject => { if (removedObject.realmObject == undefined) { return; } const state = pluginState.get(); const schema = state.currentSchema; if (!schema) { return; } client.send('removeObject', { realm: state.selectedRealm, schemaName: schema.name, object: removedObject.realmObject, objectKey: removedObject.objectKey }); }; const setSortingColumn = sortingColumn => { const state = pluginState.get(); pluginState.set({ ...state, objects: [], sortingColumn: sortingColumn, cursor: null }); }; const toggleSortingDirection = () => { let state = pluginState.get(); let newSortingDirection = null; if (state.sortingDirection === null) { newSortingDirection = 'ascend'; } else if (state.sortingDirection === 'ascend') { newSortingDirection = 'descend'; } else { newSortingDirection = null; setSortingColumn(null); } state = pluginState.get(); pluginState.set({ ...state, sortingDirection: newSortingDirection, cursor: null, objects: [] }); }; const setSortingDirection = direction => { const state = pluginState.get(); pluginState.set({ ...state, sortingDirection: direction }); }; const refreshState = () => { const state = pluginState.get(); pluginState.set({ ...state, cursor: null, sortingColumn: null, sortingDirection: null, loading: false, query: '', errorMessage: '', objects: [] }); getObjects(); }; const clearError = () => { const state = pluginState.get(); pluginState.set({ ...state, errorMessage: undefined }); }; return { state: pluginState, getObject, getObjects, getSchemas, executeQuery, addObject, setSelectedSchema, setSelectedRealm, modifyObject, removeObject, goBackSchemaHistory, goForwardSchemaHistory, setSortingColumn, toggleSortingDirection, setSortingDirection, refreshState, clearError, requestObjects, downloadData }; } function Component() { const { state, getObjects } = (0, _flipperPlugin.usePlugin)(plugin); const { realms, objects, schemas, sortingDirection, sortingColumn, currentSchema, hasMore, selectedRealm, totalObjects } = (0, _flipperPlugin.useValue)(state); const [viewMode, setViewMode] = (0, _react.useState)('data'); return _react.default.createElement(_react.default.Fragment, null, _react.default.createElement(_CommonHeader.CommonHeader, { viewMode: viewMode, setViewMode: setViewMode, realms: realms }), viewMode === 'data' && currentSchema ? _react.default.createElement(_DataVisualizerWrapper.DataVisualizerWrapper, { schemas: schemas, objects: objects, hasMore: hasMore, currentSchema: currentSchema, sortingDirection: sortingDirection, sortingColumn: sortingColumn, totalObjects: totalObjects, fetchMore: getObjects }) : null, viewMode === 'schemas' ? _react.default.createElement(_react.default.Fragment, null, _react.default.createElement(_SchemaSelect.default, { schemas: schemas }), _react.default.createElement(_SchemaVisualizer.default, { schemas: schemas, currentSchema: currentSchema })) : null, viewMode === 'schemaGraph' ? _react.default.createElement(_SchemaGraph.SchemaGraph, { schemas: schemas, selectedRealm: selectedRealm }) : null); } },0,[1,6,55,3,56,1403,48],"src/index.tsx"); __d(function (global, _$$_REQUIRE, _$$_IMPORT_DEFAULT, _$$_IMPORT_ALL, module, exports, _dependencyMap) { Object.defineProperty(exports, "__esModule", { value: true }); exports.CommonHeader = void 0; var _flipperPlugin = global.FlipperPlugin; var _react = _interopRequireDefault(global.React); var _RealmSelect = _$$_REQUIRE(_dependencyMap[0], "./RealmSelect"); var _ViewModeTabs = _interopRequireDefault(_$$_REQUIRE(_dependencyMap[1], "./ViewModeTabs")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } const CommonHeader = ({ viewMode, setViewMode, realms }) => { return _react.default.createElement(_flipperPlugin.Toolbar, { position: "top", right: _react.default.createElement(_RealmSelect.RealmSelect, { realms: realms }) }, _react.default.createElement(_ViewModeTabs.default, { viewMode: viewMode, setViewMode: setViewMode })); }; exports.CommonHeader = CommonHeader; },1,[2,5],"src/components/common/CommonHeader.tsx"); __d(function (global, _$$_REQUIRE, _$$_IMPORT_DEFAULT, _$$_IMPORT_ALL, module, exports, _dependencyMap) { Object.defineProperty(exports, "__esModule", { value: true }); exports.RealmSelect = void 0; var _antd = global.antd; var _flipperPlugin = global.FlipperPlugin; var _react = _interopRequireWildcard(global.React); var _ = _$$_REQUIRE(_dependencyMap[0], "../.."); var _SchemaSelect = _$$_REQUIRE(_dependencyMap[1], "../SchemaSelect"); function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } const RealmSelect = ({ realms }) => { const instance = (0, _flipperPlugin.usePlugin)(_.plugin); const state = (0, _flipperPlugin.useValue)(instance.state); const realmName = (realmPath, serial) => { const firstIndexOfSerial = realmPath.indexOf(serial); return realmPath.substring(firstIndexOfSerial + serial.length); }; const onRealmSelected = (0, _react.useCallback)(selected => { instance.getSchemas(selected); instance.setSelectedRealm(selected); }, [instance]); const realmOptions = realms.map(realm => _react.default.createElement(_antd.Select.Option, { key: realm, value: realm }, realmName(realm, state.deviceSerial))); return _react.default.createElement("div", null, _react.default.createElement(_SchemaSelect.BoldSpan, null, "Realm "), _react.default.createElement(_antd.Select, { showSearch: true, value: state.selectedRealm, onChange: onRealmSelected, style: { maxWidth: '400px' }, dropdownMatchSelectWidth: false }, realmOptions)); }; exports.RealmSelect = RealmSelect; },2,[0,3],"src/components/common/RealmSelect.tsx"); __d(function (global, _$$_REQUIRE, _$$_IMPORT_DEFAULT, _$$_IMPORT_ALL, module, exports, _dependencyMap) { Object.defineProperty(exports, "__esModule", { value: true }); exports.default = exports.BoldSpan = void 0; var _antd = global.antd; var _flipperPlugin = global.FlipperPlugin; var _react = _interopRequireDefault(global.React); var _index = _$$_REQUIRE(_dependencyMap[0], "../index"); var _SchemaHistoryActions = _interopRequireDefault(_$$_REQUIRE(_dependencyMap[1], "./SchemaHistoryActions")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } const { Option } = _antd.Select; const BoldSpan = _flipperPlugin.styled.span({ fontSize: 12, color: '#90949c', fontWeight: 'bold', textTransform: 'uppercase' }); exports.BoldSpan = BoldSpan; const SchemaSelect = ({ schemas }) => { var _state$currentSchema; const instance = (0, _flipperPlugin.usePlugin)(_index.plugin); const state = (0, _flipperPlugin.useValue)(instance.state); const onSchemaSelected = selected => { let selectedObjectSchema = schemas.find(schema => schema.name === selected); if (!selectedObjectSchema) { return; } instance.setSelectedSchema(selectedObjectSchema); if (selectedObjectSchema && !selectedObjectSchema.embedded) { instance.getObjects(); } else { instance.state.set({ ...instance.state.get(), totalObjects: 0, objects: [] }); } }; const schemaOptions = schemas.map(schema => _react.default.createElement(Option, { key: schema.name, value: schema.name }, schema.name)); return _react.default.createElement(_flipperPlugin.Toolbar, { position: "top" }, _react.default.createElement(_SchemaHistoryActions.default, null), _react.default.createElement(BoldSpan, null, "Object type"), _react.default.createElement(_antd.Select, { showSearch: true, value: (_state$currentSchema = state.currentSchema) === null || _state$currentSchema === void 0 ? void 0 : _state$currentSchema.name, onChange: onSchemaSelected, style: { flex: 1 }, dropdownMatchSelectWidth: false }, schemaOptions), _react.default.createElement(_antd.Button, { onClick: () => instance.refreshState(), type: "default" }, "Refresh")); }; var _default = _react.default.memo(SchemaSelect); exports.default = _default; },3,[0,4],"src/components/SchemaSelect.tsx"); __d(function (global, _$$_REQUIRE, _$$_IMPORT_DEFAULT, _$$_IMPORT_ALL, module, exports, _dependencyMap) { Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _icons = global.antdesign_icons; var _antd = global.antd; var _flipperPlugin = global.FlipperPlugin; var _react = _interopRequireWildcard(global.React); var _ = _$$_REQUIRE(_dependencyMap[0], ".."); function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } const SchemaHistoryActions = () => { const instance = (0, _flipperPlugin.usePlugin)(_.plugin); const state = (0, _flipperPlugin.useValue)(instance.state); const goBack = (0, _react.useCallback)(() => { const newSelectedSchema = state.schemaHistory[state.schemaHistoryIndex - 1]; if (!newSelectedSchema) { return; } instance.goBackSchemaHistory(newSelectedSchema); instance.getObjects(); }, [state.currentSchema]); const goForward = (0, _react.useCallback)(() => { const newSelectedSchema = state.schemaHistory[state.schemaHistoryIndex + 1]; if (!newSelectedSchema) { return; } instance.goForwardSchemaHistory(newSelectedSchema); instance.getObjects(); }, [state.currentSchema]); return _react.default.createElement("span", { style: { display: 'flex', justifyContent: 'flex-end', gap: '5px', padding: '5px' } }, _react.default.createElement(_antd.Button, { disabled: !state.realms.length || !state.schemas.length || !state.currentSchema || state.schemaHistoryIndex === 0, value: "table", onClick: goBack }, _react.default.createElement(_icons.ArrowLeftOutlined, { style: { marginRight: 5 } })), _react.default.createElement(_antd.Button, { disabled: !state.realms.length || !state.schemas.length || !state.currentSchema || state.schemaHistoryIndex === state.schemaHistory.length - 1, onClick: goForward, value: "object" }, _react.default.createElement(_icons.ArrowRightOutlined, { style: { marginRight: 5 } }))); }; var _default = _react.default.memo(SchemaHistoryActions); exports.default = _default; },4,[0],"src/components/SchemaHistoryActions.tsx"); __d(function (global, _$$_REQUIRE, _$$_IMPORT_DEFAULT, _$$_IMPORT_ALL, module, exports, _dependencyMap) { Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _icons = global.antdesign_icons; var _antd = global.antd; var _react = _interopRequireDefault(global.React); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } const ViewModeTabs = props => { return _react.default.createElement(_antd.Radio.Group, { value: props.viewMode }, _react.default.createElement(_antd.Radio.Button, { value: "data", onClick: () => props.setViewMode('data') }, _react.default.createElement(_icons.TableOutlined, { style: { marginRight: 5 } }), _react.default.createElement(_antd.Typography.Text, null, "Data")), _react.default.createElement(_antd.Radio.Button, { onClick: () => props.setViewMode('schemas'), value: "schemas" }, _react.default.createElement(_icons.SettingOutlined, { style: { marginRight: 5 } }), _react.default.createElement(_antd.Typography.Text, null, "Schema")), _react.default.createElement(_antd.Radio.Button, { onClick: () => props.setViewMode('schemaGraph'), value: "schemaGraph" }, _react.default.createElement(_icons.RadarChartOutlined, { style: { marginRight: 5 }