@dxos/plugin-debug 0.7.5-main.9cb18ac → 0.7.5-main.9d2a38b
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/browser/{DebugApp-HCHR6GKO.mjs → DebugApp-LQHFFK3Y.mjs} +4 -2
- package/dist/lib/browser/{DebugApp-HCHR6GKO.mjs.map → DebugApp-LQHFFK3Y.mjs.map} +3 -3
- package/dist/lib/browser/{DebugSpace-V3K3PQP6.mjs → DebugSpace-4JHYA7FG.mjs} +7 -5
- package/dist/lib/browser/{DebugSpace-V3K3PQP6.mjs.map → DebugSpace-4JHYA7FG.mjs.map} +3 -3
- package/dist/lib/browser/{SpaceGenerator-Y2NXBQVR.mjs → SpaceGenerator-NJCG57CU.mjs} +7 -5
- package/dist/lib/browser/{SpaceGenerator-Y2NXBQVR.mjs.map → SpaceGenerator-NJCG57CU.mjs.map} +3 -3
- package/dist/lib/browser/app-graph-builder-FXELWOFS.mjs +177 -0
- package/dist/lib/browser/app-graph-builder-FXELWOFS.mjs.map +7 -0
- package/dist/lib/browser/{chunk-CAENAAHY.mjs → chunk-I3ON45JK.mjs} +3 -3
- package/dist/lib/browser/chunk-I3ON45JK.mjs.map +7 -0
- package/dist/lib/browser/{chunk-6CGQHKET.mjs → chunk-P7GHHMDB.mjs} +1 -1
- package/dist/lib/browser/chunk-P7GHHMDB.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +66 -712
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/react-context-OZU6J7G3.mjs +37 -0
- package/dist/lib/browser/react-context-OZU6J7G3.mjs.map +7 -0
- package/dist/lib/browser/react-surface-5GNO6NWP.mjs +468 -0
- package/dist/lib/browser/react-surface-5GNO6NWP.mjs.map +7 -0
- package/dist/lib/browser/settings-JCZUA643.mjs +25 -0
- package/dist/lib/browser/settings-JCZUA643.mjs.map +7 -0
- package/dist/types/src/DebugPlugin.d.ts +1 -2
- package/dist/types/src/DebugPlugin.d.ts.map +1 -1
- package/dist/types/src/capabilities/app-graph-builder.d.ts +181 -0
- package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -0
- package/dist/types/src/capabilities/index.d.ts +185 -0
- package/dist/types/src/capabilities/index.d.ts.map +1 -0
- package/dist/types/src/capabilities/react-context.d.ts +8 -0
- package/dist/types/src/capabilities/react-context.d.ts.map +1 -0
- package/dist/types/src/capabilities/react-surface.d.ts +4 -0
- package/dist/types/src/capabilities/react-surface.d.ts.map +1 -0
- package/dist/types/src/capabilities/settings.d.ts +4 -0
- package/dist/types/src/capabilities/settings.d.ts.map +1 -0
- package/dist/types/src/components/DebugStatus.d.ts.map +1 -1
- package/dist/types/src/index.d.ts +1 -2
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/meta.d.ts +1 -2
- package/dist/types/src/meta.d.ts.map +1 -1
- package/dist/types/src/types.d.ts +0 -3
- package/dist/types/src/types.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +43 -51
- package/src/DebugPlugin.tsx +58 -345
- package/src/capabilities/app-graph-builder.ts +177 -0
- package/src/capabilities/index.ts +10 -0
- package/src/capabilities/react-context.tsx +38 -0
- package/src/capabilities/react-surface.tsx +138 -0
- package/src/capabilities/settings.ts +18 -0
- package/src/components/DebugApp/DebugApp.tsx +1 -1
- package/src/components/DebugSettings.tsx +4 -4
- package/src/components/DebugSpace/DebugSpace.tsx +1 -1
- package/src/components/DebugStatus.tsx +3 -9
- package/src/components/SpaceGenerator/ObjectGenerator.tsx +3 -3
- package/src/components/SpaceGenerator/SpaceGenerator.tsx +1 -1
- package/src/index.ts +1 -4
- package/src/meta.ts +1 -1
- package/src/types.ts +0 -13
- package/dist/lib/browser/chunk-6CGQHKET.mjs.map +0 -7
- package/dist/lib/browser/chunk-CAENAAHY.mjs.map +0 -7
- package/dist/lib/browser/meta.mjs +0 -9
- package/dist/lib/browser/meta.mjs.map +0 -7
- package/dist/types/src/components/DebugSurface.d.ts +0 -9
- package/dist/types/src/components/DebugSurface.d.ts.map +0 -1
- package/src/components/DebugSurface.tsx +0 -55
|
@@ -144,7 +144,9 @@ var DebugApp = ({ graph }) => {
|
|
|
144
144
|
title: "Config"
|
|
145
145
|
}, /* @__PURE__ */ React2.createElement(Gear, {
|
|
146
146
|
className: getSize(5)
|
|
147
|
-
}))), /* @__PURE__ */ React2.createElement(Toolbar.
|
|
147
|
+
}))), /* @__PURE__ */ React2.createElement(Toolbar.Separator, {
|
|
148
|
+
variant: "gap"
|
|
149
|
+
}), /* @__PURE__ */ React2.createElement(Button, {
|
|
148
150
|
onClick: (event) => handleResetClient(event.shiftKey),
|
|
149
151
|
title: "Reset client"
|
|
150
152
|
}, /* @__PURE__ */ React2.createElement(Warning, {
|
|
@@ -170,4 +172,4 @@ var DebugApp_default = DebugApp;
|
|
|
170
172
|
export {
|
|
171
173
|
DebugApp_default as default
|
|
172
174
|
};
|
|
173
|
-
//# sourceMappingURL=DebugApp-
|
|
175
|
+
//# sourceMappingURL=DebugApp-LQHFFK3Y.mjs.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/components/DebugApp/DebugApp.tsx", "../../../src/components/DebugApp/Tree.tsx", "../../../src/components/DebugApp/index.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { Gauge, Graph as GraphIcon, Gear, Toolbox, Warning } from '@phosphor-icons/react';\nimport React, { type FC, useEffect, useState } from 'react';\n\nimport { type Graph } from '@dxos/plugin-graph';\nimport { useClient, useConfig } from '@dxos/react-client';\nimport { Button, ToggleGroup, ToggleGroupItem, Toolbar } from '@dxos/react-ui';\nimport { getSize, mx } from '@dxos/react-ui-theme';\n\nimport { Json, Tree } from './Tree';\nimport { Container } from '../Container';\n\nexport const DebugApp: FC<{ graph: Graph }> = ({ graph }) => {\n const [view, setView] = useState<'config' | 'diagnostics' | 'graph'>('graph');\n const [data, setData] = useState<any>({});\n const client = useClient();\n const config = useConfig();\n const handleRefresh = async () => {\n const data = await client.diagnostics({ truncate: true });\n setData(data);\n };\n useEffect(() => {\n void handleRefresh();\n }, []);\n\n const handleResetClient = async (force = false) => {\n if (!force && !window.confirm('Reset storage?')) {\n return;\n }\n\n // TODO(burdon): Throws exception.\n await client.reset();\n window.location.href = window.location.origin;\n };\n\n const handleOpenDevtools = () => {\n const vaultUrl = config.values?.runtime?.client?.remoteSource;\n if (vaultUrl) {\n window.open(`https://devtools.dev.dxos.org/?target=${vaultUrl}`);\n }\n };\n\n return (\n <Container\n toolbar={\n <Toolbar.Root classNames='p-1'>\n <ToggleGroup type='single' value={view}>\n <ToggleGroupItem value={'graph'} onClick={() => setView('graph')} title={'Plugin graph'}>\n <GraphIcon className={getSize(5)} />\n </ToggleGroupItem>\n <ToggleGroupItem value={'diagnostics'} onClick={() => setView('diagnostics')} title={'Diagnostics'}>\n <Gauge className={getSize(5)} />\n </ToggleGroupItem>\n <ToggleGroupItem value={'config'} onClick={() => setView('config')} title={'Config'}>\n <Gear className={getSize(5)} />\n </ToggleGroupItem>\n </ToggleGroup>\n\n <Toolbar.
|
|
5
|
-
"mappings": "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
|
|
6
|
-
"names": ["Gauge", "Graph", "GraphIcon", "Gear", "Toolbox", "Warning", "React", "useEffect", "useState", "useClient", "useConfig", "Button", "ToggleGroup", "ToggleGroupItem", "Toolbar", "getSize", "mx", "React", "useState", "SyntaxHighlighter", "mx", "arrayToBuffer", "replacer", "key", "value", "Uint8Array", "arrayToBuffer", "toString", "type", "Buffer", "from", "data", "undefined", "Json", "SyntaxHighlighter", "language", "JSON", "stringify", "Tree", "div", "className", "Node", "root", "Scalar", "Array", "isArray", "map", "index", "KeyValue", "label", "String", "Object", "entries", "open", "setOpen", "useState", "Box", "mx", "onClick", "children", "props", "DebugApp", "graph", "view", "setView", "useState", "data", "setData", "client", "useClient", "config", "useConfig", "handleRefresh", "diagnostics", "truncate", "useEffect", "handleResetClient", "force", "window", "confirm", "reset", "location", "href", "origin", "handleOpenDevtools", "vaultUrl", "values", "runtime", "remoteSource", "open", "React", "Container", "toolbar", "Toolbar", "Root", "classNames", "ToggleGroup", "type", "value", "ToggleGroupItem", "onClick", "title", "GraphIcon", "className", "getSize", "Gauge", "Gear", "
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { Gauge, Graph as GraphIcon, Gear, Toolbox, Warning } from '@phosphor-icons/react';\nimport React, { type FC, useEffect, useState } from 'react';\n\nimport { type Graph } from '@dxos/plugin-graph';\nimport { useClient, useConfig } from '@dxos/react-client';\nimport { Button, ToggleGroup, ToggleGroupItem, Toolbar } from '@dxos/react-ui';\nimport { getSize, mx } from '@dxos/react-ui-theme';\n\nimport { Json, Tree } from './Tree';\nimport { Container } from '../Container';\n\nexport const DebugApp: FC<{ graph: Graph }> = ({ graph }) => {\n const [view, setView] = useState<'config' | 'diagnostics' | 'graph'>('graph');\n const [data, setData] = useState<any>({});\n const client = useClient();\n const config = useConfig();\n const handleRefresh = async () => {\n const data = await client.diagnostics({ truncate: true });\n setData(data);\n };\n useEffect(() => {\n void handleRefresh();\n }, []);\n\n const handleResetClient = async (force = false) => {\n if (!force && !window.confirm('Reset storage?')) {\n return;\n }\n\n // TODO(burdon): Throws exception.\n await client.reset();\n window.location.href = window.location.origin;\n };\n\n const handleOpenDevtools = () => {\n const vaultUrl = config.values?.runtime?.client?.remoteSource;\n if (vaultUrl) {\n window.open(`https://devtools.dev.dxos.org/?target=${vaultUrl}`);\n }\n };\n\n return (\n <Container\n toolbar={\n <Toolbar.Root classNames='p-1'>\n <ToggleGroup type='single' value={view}>\n <ToggleGroupItem value={'graph'} onClick={() => setView('graph')} title={'Plugin graph'}>\n <GraphIcon className={getSize(5)} />\n </ToggleGroupItem>\n <ToggleGroupItem value={'diagnostics'} onClick={() => setView('diagnostics')} title={'Diagnostics'}>\n <Gauge className={getSize(5)} />\n </ToggleGroupItem>\n <ToggleGroupItem value={'config'} onClick={() => setView('config')} title={'Config'}>\n <Gear className={getSize(5)} />\n </ToggleGroupItem>\n </ToggleGroup>\n\n <Toolbar.Separator variant='gap' />\n <Button onClick={(event) => handleResetClient(event.shiftKey)} title='Reset client'>\n <Warning className={mx(getSize(5), 'text-red-700')} />\n </Button>\n <Button onClick={handleOpenDevtools} title='Open Devtools'>\n <Toolbox weight='duotone' className={mx(getSize(5), 'text-700')} />\n </Button>\n </Toolbar.Root>\n }\n >\n {view === 'graph' && <Tree data={graph.toJSON()} />}\n {view === 'config' && <Json data={data.diagnostics?.config} />}\n {view === 'diagnostics' && <Json data={data} />}\n </Container>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { type FC, type HTMLAttributes, useState } from 'react';\n\nimport { SyntaxHighlighter } from '@dxos/react-ui-syntax-highlighter';\nimport { mx } from '@dxos/react-ui-theme';\nimport { arrayToBuffer } from '@dxos/util';\n\n// TODO(burdon): Copied form devtools.\n\nexport const replacer = (key: any, value: any) => {\n if (typeof value === 'object') {\n if (value instanceof Uint8Array) {\n return arrayToBuffer(value).toString('hex');\n }\n\n if (value?.type === 'Buffer') {\n return Buffer.from(value.data).toString('hex');\n }\n\n if (key === 'downloaded') {\n return undefined;\n }\n }\n\n return value;\n};\n\nexport const Json: FC<{ data?: object }> = ({ data }) => {\n return <SyntaxHighlighter language='json'>{JSON.stringify(data, replacer, 2)}</SyntaxHighlighter>;\n};\n\nexport const Tree: FC<{ data?: object }> = ({ data }) => {\n return (\n <div className='p-2'>\n <Node data={data} root />\n </div>\n );\n};\n\nexport const Node: FC<{ data?: any; root?: boolean }> = ({ data, root }) => {\n if (typeof data !== 'object' || data === undefined || data === null) {\n return <Scalar value={data} />;\n }\n\n if (Array.isArray(data)) {\n return (\n <div className='flex flex-col space-y-2'>\n {data.map((value, index) => (\n <KeyValue key={index} label={String(index)} data={value} className='bg-teal-50' />\n ))}\n </div>\n );\n }\n\n return (\n <div className='flex flex-col space-y-2'>\n {Object.entries(data).map(([key, value]) => (\n <KeyValue key={key} label={key} data={value} className='bg-blue-50' />\n ))}\n </div>\n );\n};\n\nexport const KeyValue: FC<{ label: string; data?: any; className?: string }> = ({ label, data, className }) => {\n const [open, setOpen] = useState(true);\n if (data === undefined) {\n return null;\n }\n\n return (\n <div className='flex'>\n <Box\n className={mx('border-blue-200 text-sm select-none cursor-pointer', className)}\n onClick={() => setOpen((open) => !open)}\n >\n {label}\n </Box>\n {open && <Node data={data} />}\n </div>\n );\n};\n\nconst Scalar: FC<{ value: any }> = ({ value }) => {\n return (\n <Box className='bg-green-50 border-green-200 rounded-r text-sm font-thin'>\n {(value === undefined && 'undefined') ||\n (value === null && 'null') ||\n (typeof value === 'string' && value) ||\n JSON.stringify(value)}\n </Box>\n );\n};\n\nconst Box: FC<HTMLAttributes<HTMLDivElement>> = ({ children, className, ...props }) => {\n return (\n <div className={mx('flex px-2 border border-l-0 font-mono truncate', className)} {...props}>\n {children}\n </div>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { DebugApp } from './DebugApp';\n\nexport default DebugApp;\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["Gauge", "Graph", "GraphIcon", "Gear", "Toolbox", "Warning", "React", "useEffect", "useState", "useClient", "useConfig", "Button", "ToggleGroup", "ToggleGroupItem", "Toolbar", "getSize", "mx", "React", "useState", "SyntaxHighlighter", "mx", "arrayToBuffer", "replacer", "key", "value", "Uint8Array", "arrayToBuffer", "toString", "type", "Buffer", "from", "data", "undefined", "Json", "SyntaxHighlighter", "language", "JSON", "stringify", "Tree", "div", "className", "Node", "root", "Scalar", "Array", "isArray", "map", "index", "KeyValue", "label", "String", "Object", "entries", "open", "setOpen", "useState", "Box", "mx", "onClick", "children", "props", "DebugApp", "graph", "view", "setView", "useState", "data", "setData", "client", "useClient", "config", "useConfig", "handleRefresh", "diagnostics", "truncate", "useEffect", "handleResetClient", "force", "window", "confirm", "reset", "location", "href", "origin", "handleOpenDevtools", "vaultUrl", "values", "runtime", "remoteSource", "open", "React", "Container", "toolbar", "Toolbar", "Root", "classNames", "ToggleGroup", "type", "value", "ToggleGroupItem", "onClick", "title", "GraphIcon", "className", "getSize", "Gauge", "Gear", "Separator", "variant", "Button", "event", "shiftKey", "Warning", "mx", "Toolbox", "weight", "Tree", "toJSON", "Json", "DebugApp"]
|
|
7
7
|
}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
DebugContext
|
|
3
|
-
} from "./chunk-6CGQHKET.mjs";
|
|
4
1
|
import {
|
|
5
2
|
Container
|
|
6
3
|
} from "./chunk-GSJS3HEM.mjs";
|
|
4
|
+
import {
|
|
5
|
+
DebugContext
|
|
6
|
+
} from "./chunk-P7GHHMDB.mjs";
|
|
7
7
|
|
|
8
8
|
// packages/plugins/plugin-debug/src/components/DebugSpace/DebugSpace.tsx
|
|
9
9
|
import React2, { useContext, useMemo as useMemo2, useState as useState2 } from "react";
|
|
@@ -247,7 +247,9 @@ var DebugSpace = ({ space, onAddObjects }) => {
|
|
|
247
247
|
label: "Download",
|
|
248
248
|
size: 5,
|
|
249
249
|
onClick: handleDownload
|
|
250
|
-
}), /* @__PURE__ */ React2.createElement(Toolbar2.
|
|
250
|
+
}), /* @__PURE__ */ React2.createElement(Toolbar2.Separator, {
|
|
251
|
+
variant: "gap"
|
|
252
|
+
}), /* @__PURE__ */ React2.createElement(IconButton2, {
|
|
251
253
|
icon: "ph--flag-pennant--regular",
|
|
252
254
|
iconOnly: true,
|
|
253
255
|
label: "Create epoch",
|
|
@@ -272,4 +274,4 @@ var DebugSpace_default = DebugSpace;
|
|
|
272
274
|
export {
|
|
273
275
|
DebugSpace_default as default
|
|
274
276
|
};
|
|
275
|
-
//# sourceMappingURL=DebugSpace-
|
|
277
|
+
//# sourceMappingURL=DebugSpace-4JHYA7FG.mjs.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/components/DebugSpace/DebugSpace.tsx", "../../../src/components/DebugSpace/ObjectCreator.tsx", "../../../src/components/DebugSpace/index.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { type FC, useContext, useMemo, useState } from 'react';\n\nimport { createSpaceObjectGenerator } from '@dxos/echo-generator';\nimport { type ReactiveObject } from '@dxos/live-object';\nimport { DocumentType } from '@dxos/plugin-markdown/types';\nimport { Invitation } from '@dxos/protocols/proto/dxos/client/services';\nimport { faker } from '@dxos/random';\nimport { useClient } from '@dxos/react-client';\nimport { Filter, type Space, useSpaceInvitation } from '@dxos/react-client/echo';\nimport { InvitationEncoder } from '@dxos/react-client/invitations';\nimport { useAsyncEffect } from '@dxos/react-hooks';\nimport { Icon, IconButton, Input, type IconProps, type TextInputProps, Toolbar, useFileDownload } from '@dxos/react-ui';\nimport { safeParseInt } from '@dxos/util';\n\nimport { ObjectCreator } from './ObjectCreator';\nimport { DebugContext } from '../../types';\nimport { Container } from '../Container';\n\nconst DEFAULT_COUNT = 100;\nconst DEFAULT_PERIOD = 500;\nconst DEFAULT_JITTER = 50;\n\nconst useRefresh = (): [any, () => void] => {\n const [update, setUpdate] = useState({});\n return [update, () => setUpdate({})];\n};\n\nconst CustomInput = ({ icon, ...props }: Pick<IconProps, 'icon'> & TextInputProps) => {\n return (\n <div role='none' className='relative'>\n <Input.Root>\n <Input.TextInput classNames='w-[100px] text-right pie-[22px]' size={5} {...props} />\n </Input.Root>\n <Icon icon={icon} size={3} classNames='absolute inline-end-1 block-start-1 mt-[6px]' />\n </div>\n );\n};\n\nexport const DebugSpace: FC<{\n space: Space;\n onAddObjects?: (objects: ReactiveObject<any>[]) => void;\n}> = ({ space, onAddObjects }) => {\n const { connect } = useSpaceInvitation(space?.key);\n const client = useClient();\n const [data, setData] = useState<any>({});\n\n const [update, handleUpdate] = useRefresh();\n useAsyncEffect(\n async (isMounted) => {\n const data = await client.diagnostics({ truncate: true });\n if (isMounted()) {\n setData(\n data?.diagnostics?.spaces?.find(({ key }: any) => {\n return space.key.toHex().startsWith(key);\n }),\n );\n }\n },\n [space, update],\n );\n\n const download = useFileDownload();\n const handleDownload = async () => {\n download(\n new Blob([JSON.stringify(data, undefined, 2)], { type: 'text/plain' }),\n `${new Date().toISOString().replace(/\\W/g, '-')}.json`,\n );\n };\n\n const [mutationCount, setMutationCount] = useState(String(DEFAULT_COUNT));\n const [mutationInterval, setMutationInterval] = useState(String(DEFAULT_PERIOD));\n const [mutationJitter, setMutationJitter] = useState(String(DEFAULT_JITTER));\n\n const generator = useMemo(() => createSpaceObjectGenerator(space), [space]);\n\n // TODO(burdon): Note: this is shared across all spaces!\n const { running, start, stop } = useContext(DebugContext);\n const handleToggleRunning = () => {\n if (running) {\n stop();\n handleUpdate();\n } else {\n start(\n async () => {\n const { objects } = await space.db.query(Filter.schema(DocumentType)).run();\n if (objects.length) {\n const object = faker.helpers.arrayElement(objects);\n await generator.mutateObject(object, { count: 10, mutationSize: 10, maxContentLength: 1000 });\n }\n },\n {\n count: safeParseInt(mutationCount) ?? 0,\n interval: safeParseInt(mutationInterval) ?? 0,\n jitter: safeParseInt(mutationJitter) ?? 0,\n },\n );\n }\n };\n\n const handleCreateInvitation = () => {\n const invitation = space.share({\n type: Invitation.Type.INTERACTIVE,\n authMethod: Invitation.AuthMethod.NONE,\n multiUse: true,\n });\n\n // TODO(burdon): Refactor.\n // TODO(burdon): Unsubscribe?\n connect(invitation);\n const code = InvitationEncoder.encode(invitation.get());\n new URL(window.origin).searchParams.set('spaceInvitationCode', code);\n const url = `${window.origin}?spaceInvitationCode=${code}`;\n void navigator.clipboard.writeText(url);\n };\n\n const handleCreateEpoch = async () => {\n await space.internal.createEpoch();\n handleUpdate();\n };\n\n return (\n <Container\n toolbar={\n <Toolbar.Root classNames='p-1'>\n <CustomInput\n icon='ph--flag--regular'\n autoComplete='off'\n placeholder='Count'\n value={mutationCount}\n onChange={({ target: { value } }) => setMutationCount(value)}\n />\n <CustomInput\n icon='ph--timer--regular'\n autoComplete='off'\n placeholder='Interval'\n value={mutationInterval}\n onChange={({ target: { value } }) => setMutationInterval(value)}\n />\n <CustomInput\n icon='ph--plus-minus--regular'\n autoComplete='off'\n placeholder='Jitter'\n value={mutationJitter}\n onChange={({ target: { value } }) => setMutationJitter(value)}\n />\n\n <IconButton\n icon={running ? 'ph--pause-circle--regular' : 'ph--play-circle--regular'}\n iconOnly\n label='Start/stop'\n size={5}\n onClick={handleToggleRunning}\n />\n <IconButton icon='ph--arrow-clockwise--regular' iconOnly label='Refresh' size={5} onClick={handleUpdate} />\n <IconButton icon='ph--download-simple--regular' iconOnly label='Download' size={5} onClick={handleDownload} />\n\n <Toolbar.
|
|
5
|
-
"mappings": "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
|
|
6
|
-
"names": ["React", "useContext", "useMemo", "useState", "createSpaceObjectGenerator", "DocumentType", "Invitation", "faker", "useClient", "Filter", "useSpaceInvitation", "InvitationEncoder", "useAsyncEffect", "Icon", "IconButton", "Input", "Toolbar", "useFileDownload", "safeParseInt", "React", "useMemo", "useState", "TestSchemaType", "createSpaceObjectGenerator", "IconButton", "Toolbar", "createColumnBuilder", "Table", "BATCH_SIZE", "ObjectCreator", "space", "onAddObjects", "generator", "useMemo", "createSpaceObjectGenerator", "objects", "setObjects", "useState", "Object", "values", "TestSchemaType", "map", "schema", "enabled", "mutations", "count", "mutationSize", "maxContentLength", "handleCreate", "params", "objectsCreated", "createObjects", "Math", "min", "mutateObjects", "length", "db", "flush", "handleUpdate", "row", "key", "value", "newObjects", "assign", "find", "object", "helper", "builder", "createColumnBuilder", "columns", "accessor", "switch", "label", "onUpdate", "string", "classNames", "number", "obj", "id", "Table", "Root", "Viewport", "Main", "data", "Toolbar", "IconButton", "icon", "onClick", "DEFAULT_COUNT", "DEFAULT_PERIOD", "DEFAULT_JITTER", "useRefresh", "update", "setUpdate", "useState", "CustomInput", "icon", "props", "React", "div", "role", "className", "Input", "Root", "TextInput", "classNames", "size", "Icon", "DebugSpace", "space", "onAddObjects", "connect", "useSpaceInvitation", "key", "client", "useClient", "data", "setData", "handleUpdate", "useAsyncEffect", "isMounted", "diagnostics", "truncate", "spaces", "find", "toHex", "startsWith", "download", "useFileDownload", "handleDownload", "Blob", "JSON", "stringify", "undefined", "type", "Date", "toISOString", "replace", "mutationCount", "setMutationCount", "String", "mutationInterval", "setMutationInterval", "mutationJitter", "setMutationJitter", "generator", "useMemo", "createSpaceObjectGenerator", "running", "start", "stop", "useContext", "DebugContext", "handleToggleRunning", "objects", "db", "query", "Filter", "schema", "DocumentType", "run", "length", "object", "faker", "helpers", "arrayElement", "mutateObject", "count", "mutationSize", "maxContentLength", "safeParseInt", "interval", "jitter", "handleCreateInvitation", "invitation", "share", "Invitation", "Type", "INTERACTIVE", "authMethod", "AuthMethod", "NONE", "multiUse", "code", "InvitationEncoder", "encode", "get", "URL", "window", "origin", "searchParams", "set", "url", "navigator", "clipboard", "writeText", "handleCreateEpoch", "internal", "createEpoch", "Container", "toolbar", "Toolbar", "autoComplete", "placeholder", "value", "onChange", "target", "IconButton", "iconOnly", "label", "onClick", "
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { type FC, useContext, useMemo, useState } from 'react';\n\nimport { createSpaceObjectGenerator } from '@dxos/echo-generator';\nimport { type ReactiveObject } from '@dxos/live-object';\nimport { DocumentType } from '@dxos/plugin-markdown/types';\nimport { Invitation } from '@dxos/protocols/proto/dxos/client/services';\nimport { faker } from '@dxos/random';\nimport { useClient } from '@dxos/react-client';\nimport { Filter, type Space, useSpaceInvitation } from '@dxos/react-client/echo';\nimport { InvitationEncoder } from '@dxos/react-client/invitations';\nimport { useAsyncEffect } from '@dxos/react-hooks';\nimport { Icon, IconButton, Input, type IconProps, type TextInputProps, Toolbar, useFileDownload } from '@dxos/react-ui';\nimport { safeParseInt } from '@dxos/util';\n\nimport { ObjectCreator } from './ObjectCreator';\nimport { DebugContext } from '../../types';\nimport { Container } from '../Container';\n\nconst DEFAULT_COUNT = 100;\nconst DEFAULT_PERIOD = 500;\nconst DEFAULT_JITTER = 50;\n\nconst useRefresh = (): [any, () => void] => {\n const [update, setUpdate] = useState({});\n return [update, () => setUpdate({})];\n};\n\nconst CustomInput = ({ icon, ...props }: Pick<IconProps, 'icon'> & TextInputProps) => {\n return (\n <div role='none' className='relative'>\n <Input.Root>\n <Input.TextInput classNames='w-[100px] text-right pie-[22px]' size={5} {...props} />\n </Input.Root>\n <Icon icon={icon} size={3} classNames='absolute inline-end-1 block-start-1 mt-[6px]' />\n </div>\n );\n};\n\nexport const DebugSpace: FC<{\n space: Space;\n onAddObjects?: (objects: ReactiveObject<any>[]) => void;\n}> = ({ space, onAddObjects }) => {\n const { connect } = useSpaceInvitation(space?.key);\n const client = useClient();\n const [data, setData] = useState<any>({});\n\n const [update, handleUpdate] = useRefresh();\n useAsyncEffect(\n async (isMounted) => {\n const data = await client.diagnostics({ truncate: true });\n if (isMounted()) {\n setData(\n data?.diagnostics?.spaces?.find(({ key }: any) => {\n return space.key.toHex().startsWith(key);\n }),\n );\n }\n },\n [space, update],\n );\n\n const download = useFileDownload();\n const handleDownload = async () => {\n download(\n new Blob([JSON.stringify(data, undefined, 2)], { type: 'text/plain' }),\n `${new Date().toISOString().replace(/\\W/g, '-')}.json`,\n );\n };\n\n const [mutationCount, setMutationCount] = useState(String(DEFAULT_COUNT));\n const [mutationInterval, setMutationInterval] = useState(String(DEFAULT_PERIOD));\n const [mutationJitter, setMutationJitter] = useState(String(DEFAULT_JITTER));\n\n const generator = useMemo(() => createSpaceObjectGenerator(space), [space]);\n\n // TODO(burdon): Note: this is shared across all spaces!\n const { running, start, stop } = useContext(DebugContext);\n const handleToggleRunning = () => {\n if (running) {\n stop();\n handleUpdate();\n } else {\n start(\n async () => {\n const { objects } = await space.db.query(Filter.schema(DocumentType)).run();\n if (objects.length) {\n const object = faker.helpers.arrayElement(objects);\n await generator.mutateObject(object, { count: 10, mutationSize: 10, maxContentLength: 1000 });\n }\n },\n {\n count: safeParseInt(mutationCount) ?? 0,\n interval: safeParseInt(mutationInterval) ?? 0,\n jitter: safeParseInt(mutationJitter) ?? 0,\n },\n );\n }\n };\n\n const handleCreateInvitation = () => {\n const invitation = space.share({\n type: Invitation.Type.INTERACTIVE,\n authMethod: Invitation.AuthMethod.NONE,\n multiUse: true,\n });\n\n // TODO(burdon): Refactor.\n // TODO(burdon): Unsubscribe?\n connect(invitation);\n const code = InvitationEncoder.encode(invitation.get());\n new URL(window.origin).searchParams.set('spaceInvitationCode', code);\n const url = `${window.origin}?spaceInvitationCode=${code}`;\n void navigator.clipboard.writeText(url);\n };\n\n const handleCreateEpoch = async () => {\n await space.internal.createEpoch();\n handleUpdate();\n };\n\n return (\n <Container\n toolbar={\n <Toolbar.Root classNames='p-1'>\n <CustomInput\n icon='ph--flag--regular'\n autoComplete='off'\n placeholder='Count'\n value={mutationCount}\n onChange={({ target: { value } }) => setMutationCount(value)}\n />\n <CustomInput\n icon='ph--timer--regular'\n autoComplete='off'\n placeholder='Interval'\n value={mutationInterval}\n onChange={({ target: { value } }) => setMutationInterval(value)}\n />\n <CustomInput\n icon='ph--plus-minus--regular'\n autoComplete='off'\n placeholder='Jitter'\n value={mutationJitter}\n onChange={({ target: { value } }) => setMutationJitter(value)}\n />\n\n <IconButton\n icon={running ? 'ph--pause-circle--regular' : 'ph--play-circle--regular'}\n iconOnly\n label='Start/stop'\n size={5}\n onClick={handleToggleRunning}\n />\n <IconButton icon='ph--arrow-clockwise--regular' iconOnly label='Refresh' size={5} onClick={handleUpdate} />\n <IconButton icon='ph--download-simple--regular' iconOnly label='Download' size={5} onClick={handleDownload} />\n\n <Toolbar.Separator variant='gap' />\n <IconButton\n icon='ph--flag-pennant--regular'\n iconOnly\n label='Create epoch'\n size={5}\n onClick={handleCreateEpoch}\n />\n <IconButton\n icon='ph--user-circle-plus--regular'\n iconOnly\n iconClassNames='text-blue-500'\n label='Create Invitation'\n size={5}\n onClick={handleCreateInvitation}\n />\n </Toolbar.Root>\n }\n >\n <ObjectCreator space={space} onAddObjects={onAddObjects} />\n </Container>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { useMemo, useState } from 'react';\n\nimport { type MutationsProviderParams, TestSchemaType, createSpaceObjectGenerator } from '@dxos/echo-generator';\nimport { type ReactiveEchoObject, type ReactiveObject, type Space } from '@dxos/react-client/echo';\nimport { IconButton, Toolbar } from '@dxos/react-ui';\nimport { createColumnBuilder, type TableColumnDef, Table } from '@dxos/react-ui-table/deprecated';\n\nconst BATCH_SIZE = 10;\n\nexport type CreateObjectsParams = {\n schema: string;\n enabled: boolean;\n objects: number;\n mutations: Pick<MutationsProviderParams, 'count' | 'mutationSize' | 'maxContentLength'>;\n};\n\nexport type ObjectCreatorProps = {\n space: Space;\n onAddObjects?: (objects: ReactiveObject<any>[]) => void;\n};\n\nexport const ObjectCreator = ({ space, onAddObjects }: ObjectCreatorProps) => {\n const generator = useMemo(() => createSpaceObjectGenerator(space), [space]);\n\n const [objects, setObjects] = useState<CreateObjectsParams[]>(\n Object.values(TestSchemaType).map((schema) => ({\n schema,\n enabled: true,\n objects: 10,\n mutations: {\n count: 10,\n mutationSize: 10,\n maxContentLength: 1000,\n },\n })),\n );\n\n const handleCreate = async () => {\n for (const params of objects) {\n if (!params.enabled) {\n continue;\n }\n\n let objectsCreated = 0;\n while (objectsCreated < params.objects) {\n const objects = (await generator.createObjects({\n [params.schema]: Math.min(BATCH_SIZE, params.objects - objectsCreated),\n })) as ReactiveEchoObject<any>[];\n\n await generator.mutateObjects(objects, params.mutations);\n objectsCreated += objects.length;\n onAddObjects?.(objects);\n }\n }\n\n await space.db.flush();\n };\n\n const handleUpdate = (row: CreateObjectsParams, key: string, value: any) => {\n const newObjects = [...objects];\n Object.assign(newObjects.find((object) => object.schema === row.schema)!, { [key]: value });\n setObjects(newObjects);\n };\n\n const { helper, builder } = createColumnBuilder<CreateObjectsParams>();\n const columns: TableColumnDef<CreateObjectsParams>[] = [\n helper.accessor('enabled', builder.switch({ label: 'Live', onUpdate: handleUpdate })),\n helper.accessor('schema', builder.string({ label: 'Schema', classNames: 'font-mono' })),\n helper.accessor('objects', builder.number({ label: 'Objects', onUpdate: handleUpdate })),\n helper.accessor((obj) => obj.mutations.count, {\n id: 'mutations',\n ...builder.number({ label: 'Mutations', onUpdate: handleUpdate }),\n }),\n helper.accessor((obj) => obj.mutations.mutationSize, {\n id: 'mutationSize',\n ...builder.number({ label: 'Mut. Size', onUpdate: handleUpdate }),\n }),\n helper.accessor((obj) => obj.mutations.maxContentLength, {\n id: 'mutationMaxContentLength',\n ...builder.number({ label: 'Length', onUpdate: handleUpdate }),\n }),\n ];\n\n return (\n <>\n <Table.Root>\n <Table.Viewport>\n <Table.Main<CreateObjectsParams> columns={columns} data={objects} />\n </Table.Viewport>\n </Table.Root>\n <Toolbar.Root classNames='p-1'>\n <IconButton icon='ph--plus--regular' label='Create' onClick={handleCreate} />\n </Toolbar.Root>\n </>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { DebugSpace } from './DebugSpace';\n\nexport default DebugSpace;\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["React", "useContext", "useMemo", "useState", "createSpaceObjectGenerator", "DocumentType", "Invitation", "faker", "useClient", "Filter", "useSpaceInvitation", "InvitationEncoder", "useAsyncEffect", "Icon", "IconButton", "Input", "Toolbar", "useFileDownload", "safeParseInt", "React", "useMemo", "useState", "TestSchemaType", "createSpaceObjectGenerator", "IconButton", "Toolbar", "createColumnBuilder", "Table", "BATCH_SIZE", "ObjectCreator", "space", "onAddObjects", "generator", "useMemo", "createSpaceObjectGenerator", "objects", "setObjects", "useState", "Object", "values", "TestSchemaType", "map", "schema", "enabled", "mutations", "count", "mutationSize", "maxContentLength", "handleCreate", "params", "objectsCreated", "createObjects", "Math", "min", "mutateObjects", "length", "db", "flush", "handleUpdate", "row", "key", "value", "newObjects", "assign", "find", "object", "helper", "builder", "createColumnBuilder", "columns", "accessor", "switch", "label", "onUpdate", "string", "classNames", "number", "obj", "id", "Table", "Root", "Viewport", "Main", "data", "Toolbar", "IconButton", "icon", "onClick", "DEFAULT_COUNT", "DEFAULT_PERIOD", "DEFAULT_JITTER", "useRefresh", "update", "setUpdate", "useState", "CustomInput", "icon", "props", "React", "div", "role", "className", "Input", "Root", "TextInput", "classNames", "size", "Icon", "DebugSpace", "space", "onAddObjects", "connect", "useSpaceInvitation", "key", "client", "useClient", "data", "setData", "handleUpdate", "useAsyncEffect", "isMounted", "diagnostics", "truncate", "spaces", "find", "toHex", "startsWith", "download", "useFileDownload", "handleDownload", "Blob", "JSON", "stringify", "undefined", "type", "Date", "toISOString", "replace", "mutationCount", "setMutationCount", "String", "mutationInterval", "setMutationInterval", "mutationJitter", "setMutationJitter", "generator", "useMemo", "createSpaceObjectGenerator", "running", "start", "stop", "useContext", "DebugContext", "handleToggleRunning", "objects", "db", "query", "Filter", "schema", "DocumentType", "run", "length", "object", "faker", "helpers", "arrayElement", "mutateObject", "count", "mutationSize", "maxContentLength", "safeParseInt", "interval", "jitter", "handleCreateInvitation", "invitation", "share", "Invitation", "Type", "INTERACTIVE", "authMethod", "AuthMethod", "NONE", "multiUse", "code", "InvitationEncoder", "encode", "get", "URL", "window", "origin", "searchParams", "set", "url", "navigator", "clipboard", "writeText", "handleCreateEpoch", "internal", "createEpoch", "Container", "toolbar", "Toolbar", "autoComplete", "placeholder", "value", "onChange", "target", "IconButton", "iconOnly", "label", "onClick", "Separator", "variant", "iconClassNames", "ObjectCreator", "DebugSpace"]
|
|
7
7
|
}
|
|
@@ -13,14 +13,14 @@ import { jsonKeyReplacer, sortKeys } from "@dxos/util";
|
|
|
13
13
|
// packages/plugins/plugin-debug/src/components/SpaceGenerator/ObjectGenerator.tsx
|
|
14
14
|
import { addressToA1Notation } from "@dxos/compute";
|
|
15
15
|
import { create, makeRef } from "@dxos/live-object";
|
|
16
|
-
import { DocumentType
|
|
17
|
-
import { createSheet } from "@dxos/plugin-sheet";
|
|
16
|
+
import { DocumentType } from "@dxos/plugin-markdown/types";
|
|
17
|
+
import { createSheet } from "@dxos/plugin-sheet/types";
|
|
18
18
|
import { SheetType } from "@dxos/plugin-sheet/types";
|
|
19
19
|
import { CanvasType, DiagramType } from "@dxos/plugin-sketch/types";
|
|
20
20
|
import { faker } from "@dxos/random";
|
|
21
21
|
import { Filter } from "@dxos/react-client/echo";
|
|
22
22
|
import { TableType } from "@dxos/react-ui-table";
|
|
23
|
-
import { createView } from "@dxos/schema";
|
|
23
|
+
import { createView, TextType } from "@dxos/schema";
|
|
24
24
|
import { createAsyncGenerator } from "@dxos/schema/testing";
|
|
25
25
|
import { range } from "@dxos/util";
|
|
26
26
|
var generator = faker;
|
|
@@ -238,7 +238,9 @@ var SpaceGenerator = ({ space, onCreateObjects }) => {
|
|
|
238
238
|
iconOnly: true,
|
|
239
239
|
label: "Refresh",
|
|
240
240
|
onClick: updateInfo
|
|
241
|
-
}), /* @__PURE__ */ React2.createElement(Toolbar.
|
|
241
|
+
}), /* @__PURE__ */ React2.createElement(Toolbar.Separator, {
|
|
242
|
+
variant: "gap"
|
|
243
|
+
}), /* @__PURE__ */ React2.createElement("div", {
|
|
242
244
|
className: "flex"
|
|
243
245
|
}, /* @__PURE__ */ React2.createElement(Input.Root, null, /* @__PURE__ */ React2.createElement(Input.TextInput, {
|
|
244
246
|
type: "number",
|
|
@@ -274,4 +276,4 @@ var SpaceGenerator_default = SpaceGenerator;
|
|
|
274
276
|
export {
|
|
275
277
|
SpaceGenerator_default as default
|
|
276
278
|
};
|
|
277
|
-
//# sourceMappingURL=SpaceGenerator-
|
|
279
|
+
//# sourceMappingURL=SpaceGenerator-NJCG57CU.mjs.map
|
package/dist/lib/browser/{SpaceGenerator-Y2NXBQVR.mjs.map → SpaceGenerator-NJCG57CU.mjs.map}
RENAMED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/components/SpaceGenerator/SpaceGenerator.tsx", "../../../src/components/SpaceGenerator/ObjectGenerator.tsx", "../../../src/components/SpaceGenerator/SchemaTable.tsx", "../../../src/components/SpaceGenerator/index.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useCallback, useMemo, useState } from 'react';\n\nimport { type ReactiveObject } from '@dxos/live-object';\nimport { DocumentType } from '@dxos/plugin-markdown/types';\nimport { SheetType } from '@dxos/plugin-sheet/types';\nimport { DiagramType } from '@dxos/plugin-sketch/types';\nimport { useClient } from '@dxos/react-client';\nimport { getTypename, type Space } from '@dxos/react-client/echo';\nimport { IconButton, Input, Toolbar, useAsyncEffect } from '@dxos/react-ui';\nimport { SyntaxHighlighter } from '@dxos/react-ui-syntax-highlighter';\nimport { Testing } from '@dxos/schema/testing';\nimport { jsonKeyReplacer, sortKeys } from '@dxos/util';\n\nimport { type ObjectGenerator, createGenerator, staticGenerators } from './ObjectGenerator';\nimport { SchemaTable } from './SchemaTable';\n\nexport type SpaceGeneratorProps = {\n space: Space;\n onCreateObjects?: (objects: ReactiveObject<any>[]) => void;\n};\n\nexport const SpaceGenerator = ({ space, onCreateObjects }: SpaceGeneratorProps) => {\n const client = useClient();\n const staticTypes = [DocumentType, DiagramType, SheetType]; // TODO(burdon): Make extensible.\n const mutableTypes = [Testing.OrgType, Testing.ProjectType, Testing.ContactType];\n const [count, setCount] = useState(1);\n const [info, setInfo] = useState<any>({});\n\n // Create type generators.\n const typeMap = useMemo(() => {\n client.addTypes(staticTypes);\n const mutableGenerators = new Map<string, ObjectGenerator<any>>(\n mutableTypes.map((type) => [type.typename, createGenerator(type)]),\n );\n\n return new Map([...staticGenerators, ...mutableGenerators]);\n }, [client, mutableTypes]);\n\n // Query space to get info.\n const updateInfo = async () => {\n // Create schema map.\n const echoSchema = await space.db.schemaRegistry.query().run();\n const staticSchema = space.db.graph.schemaRegistry.schemas;\n\n // Create object map.\n const { objects } = await space.db.query().run();\n const objectMap = sortKeys(\n objects.reduce<Record<string, number>>((map, obj) => {\n const type = getTypename(obj);\n if (type) {\n const count = map[type] ?? 0;\n map[type] = count + 1;\n }\n return map;\n }, {}),\n );\n\n setInfo({\n schema: {\n static: staticSchema.length,\n mutable: echoSchema.length,\n },\n objects: objectMap,\n });\n };\n\n useAsyncEffect(updateInfo, [space]);\n\n const handleCreateData = useCallback(\n async (typename: string) => {\n const constructor = typeMap.get(typename);\n if (constructor) {\n // TODO(burdon): Input to specify number of objects.\n await constructor(space, count, onCreateObjects);\n await updateInfo();\n }\n },\n [typeMap, count],\n );\n\n return (\n <div role='none' className='flex flex-col divide-y divide-separator'>\n <Toolbar.Root classNames='p-1'>\n <IconButton icon='ph--arrow-clockwise--regular' iconOnly label='Refresh' onClick={updateInfo} />\n <Toolbar.Expander />\n <div className='flex'>\n <Input.Root>\n <Input.TextInput\n type='number'\n min={1}\n max={100}\n placeholder={'Count'}\n classNames='w-[80px]'\n value={count}\n onChange={(ev) => setCount(parseInt(ev.target.value))}\n />\n </Input.Root>\n </div>\n </Toolbar.Root>\n\n <SchemaTable types={staticTypes} objects={info.objects} label='Static Types' onClick={handleCreateData} />\n <SchemaTable types={mutableTypes} objects={info.objects} label='Mutable Types' onClick={handleCreateData} />\n\n <SyntaxHighlighter classNames='flex text-xs' language='json'>\n {JSON.stringify({ space, ...info }, jsonKeyReplacer({ truncate: true }), 2)}\n </SyntaxHighlighter>\n </div>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { addressToA1Notation } from '@dxos/compute';\nimport { type BaseObject, type TypedObject } from '@dxos/echo-schema';\nimport { create, makeRef, type ReactiveObject } from '@dxos/live-object';\nimport { DocumentType, TextType } from '@dxos/plugin-markdown/types';\nimport { createSheet } from '@dxos/plugin-sheet';\nimport { SheetType, type CellValue } from '@dxos/plugin-sheet/types';\nimport { CanvasType, DiagramType } from '@dxos/plugin-sketch/types';\nimport { faker } from '@dxos/random';\nimport { Filter, type Space } from '@dxos/react-client/echo';\nimport { TableType } from '@dxos/react-ui-table';\nimport { createView } from '@dxos/schema';\nimport { createAsyncGenerator, type ValueGenerator } from '@dxos/schema/testing';\nimport { range } from '@dxos/util';\n\nconst generator: ValueGenerator = faker as any;\n\n// TODO(burdon): Add objects to collections.\n// TODO(burdon): Create docs.\n// TODO(burdon): Create sketches.\n// TODO(burdon): Create sheets.\n// TODO(burdon): Create comments.\n// TODO(burdon): Reuse in testbench-app.\n// TODO(burdon): Mutator running in background (factor out): from echo-generator.\n\nexport type ObjectGenerator<T extends BaseObject> = (\n space: Space,\n n: number,\n cb?: (objects: ReactiveObject<any>[]) => void,\n) => Promise<ReactiveObject<T>[]>;\n\nexport const staticGenerators = new Map<string, ObjectGenerator<any>>([\n [\n DocumentType.typename,\n async (space, n, cb) => {\n const objects = range(n).map(() => {\n const obj = space.db.add(\n create(DocumentType, {\n name: faker.commerce.productName(),\n content: makeRef(create(TextType, { content: faker.lorem.sentences(5) })),\n threads: [],\n }),\n );\n\n return obj;\n });\n\n cb?.(objects);\n return objects;\n },\n ],\n [\n DiagramType.typename,\n async (space, n, cb) => {\n const objects = range(n).map(() => {\n // TODO(burdon): Generate diagram.\n const obj = space.db.add(\n create(DiagramType, {\n name: faker.commerce.productName(),\n canvas: makeRef(create(CanvasType, { content: {} })),\n }),\n );\n\n return obj;\n });\n\n cb?.(objects);\n return objects;\n },\n ],\n // TODO(burdon): Create unit tests.\n [\n SheetType.typename,\n async (space, n, cb) => {\n const objects = range(n).map(() => {\n const cells: Record<string, CellValue> = {};\n const year = new Date().getFullYear();\n const cols = 4;\n const rows = 16;\n for (let col = 1; col <= cols; col++) {\n for (let row = 1; row <= rows; row++) {\n const cell = addressToA1Notation({ col, row });\n if (row === 1) {\n cells[cell] = { value: `${year} Q${col}` };\n } else if (row === rows) {\n const from = addressToA1Notation({ col, row: 2 });\n const to = addressToA1Notation({ col, row: rows - 1 });\n cells[cell] = { value: `=SUM(${from}:${to})` };\n } else if (row > 2 && row < rows - 1) {\n cells[cell] = { value: Math.floor(Math.random() * 10_000) };\n }\n }\n }\n\n // TODO(burdon): Set width.\n // TODO(burdon): Set formatting for columns.\n return space.db.add(\n createSheet({\n name: faker.commerce.productName(),\n cells,\n }),\n );\n });\n\n cb?.(objects);\n return objects;\n },\n ],\n]);\n\nexport const createGenerator = <T extends BaseObject>(type: TypedObject<T>): ObjectGenerator<T> => {\n return async (\n space: Space,\n n: number,\n cb?: (objects: ReactiveObject<any>[]) => void,\n ): Promise<ReactiveObject<T>[]> => {\n // Find or create mutable schema.\n const schema =\n (await space.db.schemaRegistry.query({ typename: type.typename }).firstOrUndefined()) ??\n (await space.db.schemaRegistry.register([type]))[0];\n\n // Create objects.\n const generate = createAsyncGenerator(generator, schema.getSchemaSnapshot(), { db: space.db });\n const objects = await generate.createObjects(n);\n\n // Find or create table and view.\n const { objects: tables } = await space.db.query(Filter.schema(TableType)).run();\n const table = tables.find((table) => table.view?.target?.query?.type === type.typename);\n if (!table) {\n const name = type.typename.split('/').pop() ?? type.typename;\n const view = createView({ name, typename: type.typename, jsonSchema: schema.jsonSchema });\n const table = space.db.add(create(TableType, { name, view: makeRef(view) }));\n cb?.([table]);\n }\n\n return objects;\n };\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React from 'react';\n\nimport { IconButton } from '@dxos/react-ui';\n\nexport type SchemaTableProps = {\n types: any[];\n objects?: Record<string, number | undefined>;\n label: string;\n onClick: (typename: string) => void;\n};\n\nexport const SchemaTable = ({ types, objects = {}, label, onClick }: SchemaTableProps) => {\n return (\n <div className='grid grid-cols-[1fr_80px_40px] gap-1 overflow-hidden'>\n <div className='grid grid-cols-subgrid col-span-3'>\n <div className='px-2 text-sm text-primary-500'>{label}</div>\n <div className='px-2 text-xs text-subdued text-right'>count</div>\n </div>\n {types.map((type) => (\n <div key={type.typename} className='grid grid-cols-subgrid col-span-3 items-center'>\n <div className='px-2 text-sm font-mono text-green-500'>{type.typename}</div>\n <div className='px-2 text-right font-mono'>{objects[type.typename] ?? 0}</div>\n <IconButton\n variant='ghost'\n icon='ph--plus--regular'\n iconOnly\n label='Create data'\n onClick={() => onClick(type.typename)}\n />\n </div>\n ))}\n </div>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { SpaceGenerator } from './SpaceGenerator';\n\nexport default SpaceGenerator;\n"],
|
|
5
|
-
"mappings": ";AAIA,OAAOA,UAASC,aAAaC,SAASC,gBAAgB;AAGtD,SAASC,gBAAAA,qBAAoB;AAC7B,SAASC,aAAAA,kBAAiB;AAC1B,SAASC,eAAAA,oBAAmB;AAC5B,SAASC,iBAAiB;AAC1B,SAASC,mBAA+B;AACxC,SAASC,cAAAA,aAAYC,OAAOC,SAASC,sBAAsB;AAC3D,SAASC,yBAAyB;AAClC,SAASC,eAAe;AACxB,SAASC,iBAAiBC,gBAAgB;;;ACX1C,SAASC,2BAA2B;AAEpC,SAASC,QAAQC,eAAoC;AACrD,SAASC,
|
|
6
|
-
"names": ["React", "useCallback", "useMemo", "useState", "DocumentType", "SheetType", "DiagramType", "useClient", "getTypename", "IconButton", "Input", "Toolbar", "useAsyncEffect", "SyntaxHighlighter", "Testing", "jsonKeyReplacer", "sortKeys", "addressToA1Notation", "create", "makeRef", "DocumentType", "
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useCallback, useMemo, useState } from 'react';\n\nimport { type ReactiveObject } from '@dxos/live-object';\nimport { DocumentType } from '@dxos/plugin-markdown/types';\nimport { SheetType } from '@dxos/plugin-sheet/types';\nimport { DiagramType } from '@dxos/plugin-sketch/types';\nimport { useClient } from '@dxos/react-client';\nimport { getTypename, type Space } from '@dxos/react-client/echo';\nimport { IconButton, Input, Toolbar, useAsyncEffect } from '@dxos/react-ui';\nimport { SyntaxHighlighter } from '@dxos/react-ui-syntax-highlighter';\nimport { Testing } from '@dxos/schema/testing';\nimport { jsonKeyReplacer, sortKeys } from '@dxos/util';\n\nimport { type ObjectGenerator, createGenerator, staticGenerators } from './ObjectGenerator';\nimport { SchemaTable } from './SchemaTable';\n\nexport type SpaceGeneratorProps = {\n space: Space;\n onCreateObjects?: (objects: ReactiveObject<any>[]) => void;\n};\n\nexport const SpaceGenerator = ({ space, onCreateObjects }: SpaceGeneratorProps) => {\n const client = useClient();\n const staticTypes = [DocumentType, DiagramType, SheetType]; // TODO(burdon): Make extensible.\n const mutableTypes = [Testing.OrgType, Testing.ProjectType, Testing.ContactType];\n const [count, setCount] = useState(1);\n const [info, setInfo] = useState<any>({});\n\n // Create type generators.\n const typeMap = useMemo(() => {\n client.addTypes(staticTypes);\n const mutableGenerators = new Map<string, ObjectGenerator<any>>(\n mutableTypes.map((type) => [type.typename, createGenerator(type)]),\n );\n\n return new Map([...staticGenerators, ...mutableGenerators]);\n }, [client, mutableTypes]);\n\n // Query space to get info.\n const updateInfo = async () => {\n // Create schema map.\n const echoSchema = await space.db.schemaRegistry.query().run();\n const staticSchema = space.db.graph.schemaRegistry.schemas;\n\n // Create object map.\n const { objects } = await space.db.query().run();\n const objectMap = sortKeys(\n objects.reduce<Record<string, number>>((map, obj) => {\n const type = getTypename(obj);\n if (type) {\n const count = map[type] ?? 0;\n map[type] = count + 1;\n }\n return map;\n }, {}),\n );\n\n setInfo({\n schema: {\n static: staticSchema.length,\n mutable: echoSchema.length,\n },\n objects: objectMap,\n });\n };\n\n useAsyncEffect(updateInfo, [space]);\n\n const handleCreateData = useCallback(\n async (typename: string) => {\n const constructor = typeMap.get(typename);\n if (constructor) {\n // TODO(burdon): Input to specify number of objects.\n await constructor(space, count, onCreateObjects);\n await updateInfo();\n }\n },\n [typeMap, count],\n );\n\n return (\n <div role='none' className='flex flex-col divide-y divide-separator'>\n <Toolbar.Root classNames='p-1'>\n <IconButton icon='ph--arrow-clockwise--regular' iconOnly label='Refresh' onClick={updateInfo} />\n <Toolbar.Separator variant='gap' />\n <div className='flex'>\n <Input.Root>\n <Input.TextInput\n type='number'\n min={1}\n max={100}\n placeholder={'Count'}\n classNames='w-[80px]'\n value={count}\n onChange={(ev) => setCount(parseInt(ev.target.value))}\n />\n </Input.Root>\n </div>\n </Toolbar.Root>\n\n <SchemaTable types={staticTypes} objects={info.objects} label='Static Types' onClick={handleCreateData} />\n <SchemaTable types={mutableTypes} objects={info.objects} label='Mutable Types' onClick={handleCreateData} />\n\n <SyntaxHighlighter classNames='flex text-xs' language='json'>\n {JSON.stringify({ space, ...info }, jsonKeyReplacer({ truncate: true }), 2)}\n </SyntaxHighlighter>\n </div>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { addressToA1Notation } from '@dxos/compute';\nimport { type BaseObject, type TypedObject } from '@dxos/echo-schema';\nimport { create, makeRef, type ReactiveObject } from '@dxos/live-object';\nimport { DocumentType } from '@dxos/plugin-markdown/types';\nimport { createSheet } from '@dxos/plugin-sheet/types';\nimport { SheetType, type CellValue } from '@dxos/plugin-sheet/types';\nimport { CanvasType, DiagramType } from '@dxos/plugin-sketch/types';\nimport { faker } from '@dxos/random';\nimport { Filter, type Space } from '@dxos/react-client/echo';\nimport { TableType } from '@dxos/react-ui-table';\nimport { createView, TextType } from '@dxos/schema';\nimport { createAsyncGenerator, type ValueGenerator } from '@dxos/schema/testing';\nimport { range } from '@dxos/util';\n\nconst generator: ValueGenerator = faker as any;\n\n// TODO(burdon): Add objects to collections.\n// TODO(burdon): Create docs.\n// TODO(burdon): Create sketches.\n// TODO(burdon): Create sheets.\n// TODO(burdon): Create comments.\n// TODO(burdon): Reuse in testbench-app.\n// TODO(burdon): Mutator running in background (factor out): from echo-generator.\n\nexport type ObjectGenerator<T extends BaseObject> = (\n space: Space,\n n: number,\n cb?: (objects: ReactiveObject<any>[]) => void,\n) => Promise<ReactiveObject<T>[]>;\n\nexport const staticGenerators = new Map<string, ObjectGenerator<any>>([\n [\n DocumentType.typename,\n async (space, n, cb) => {\n const objects = range(n).map(() => {\n const obj = space.db.add(\n create(DocumentType, {\n name: faker.commerce.productName(),\n content: makeRef(create(TextType, { content: faker.lorem.sentences(5) })),\n threads: [],\n }),\n );\n\n return obj;\n });\n\n cb?.(objects);\n return objects;\n },\n ],\n [\n DiagramType.typename,\n async (space, n, cb) => {\n const objects = range(n).map(() => {\n // TODO(burdon): Generate diagram.\n const obj = space.db.add(\n create(DiagramType, {\n name: faker.commerce.productName(),\n canvas: makeRef(create(CanvasType, { content: {} })),\n }),\n );\n\n return obj;\n });\n\n cb?.(objects);\n return objects;\n },\n ],\n // TODO(burdon): Create unit tests.\n [\n SheetType.typename,\n async (space, n, cb) => {\n const objects = range(n).map(() => {\n const cells: Record<string, CellValue> = {};\n const year = new Date().getFullYear();\n const cols = 4;\n const rows = 16;\n for (let col = 1; col <= cols; col++) {\n for (let row = 1; row <= rows; row++) {\n const cell = addressToA1Notation({ col, row });\n if (row === 1) {\n cells[cell] = { value: `${year} Q${col}` };\n } else if (row === rows) {\n const from = addressToA1Notation({ col, row: 2 });\n const to = addressToA1Notation({ col, row: rows - 1 });\n cells[cell] = { value: `=SUM(${from}:${to})` };\n } else if (row > 2 && row < rows - 1) {\n cells[cell] = { value: Math.floor(Math.random() * 10_000) };\n }\n }\n }\n\n // TODO(burdon): Set width.\n // TODO(burdon): Set formatting for columns.\n return space.db.add(\n createSheet({\n name: faker.commerce.productName(),\n cells,\n }),\n );\n });\n\n cb?.(objects);\n return objects;\n },\n ],\n]);\n\nexport const createGenerator = <T extends BaseObject>(type: TypedObject<T>): ObjectGenerator<T> => {\n return async (\n space: Space,\n n: number,\n cb?: (objects: ReactiveObject<any>[]) => void,\n ): Promise<ReactiveObject<T>[]> => {\n // Find or create mutable schema.\n const schema =\n (await space.db.schemaRegistry.query({ typename: type.typename }).firstOrUndefined()) ??\n (await space.db.schemaRegistry.register([type]))[0];\n\n // Create objects.\n const generate = createAsyncGenerator(generator, schema.getSchemaSnapshot(), { db: space.db });\n const objects = await generate.createObjects(n);\n\n // Find or create table and view.\n const { objects: tables } = await space.db.query(Filter.schema(TableType)).run();\n const table = tables.find((table) => table.view?.target?.query?.type === type.typename);\n if (!table) {\n const name = type.typename.split('/').pop() ?? type.typename;\n const view = createView({ name, typename: type.typename, jsonSchema: schema.jsonSchema });\n const table = space.db.add(create(TableType, { name, view: makeRef(view) }));\n cb?.([table]);\n }\n\n return objects;\n };\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React from 'react';\n\nimport { IconButton } from '@dxos/react-ui';\n\nexport type SchemaTableProps = {\n types: any[];\n objects?: Record<string, number | undefined>;\n label: string;\n onClick: (typename: string) => void;\n};\n\nexport const SchemaTable = ({ types, objects = {}, label, onClick }: SchemaTableProps) => {\n return (\n <div className='grid grid-cols-[1fr_80px_40px] gap-1 overflow-hidden'>\n <div className='grid grid-cols-subgrid col-span-3'>\n <div className='px-2 text-sm text-primary-500'>{label}</div>\n <div className='px-2 text-xs text-subdued text-right'>count</div>\n </div>\n {types.map((type) => (\n <div key={type.typename} className='grid grid-cols-subgrid col-span-3 items-center'>\n <div className='px-2 text-sm font-mono text-green-500'>{type.typename}</div>\n <div className='px-2 text-right font-mono'>{objects[type.typename] ?? 0}</div>\n <IconButton\n variant='ghost'\n icon='ph--plus--regular'\n iconOnly\n label='Create data'\n onClick={() => onClick(type.typename)}\n />\n </div>\n ))}\n </div>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { SpaceGenerator } from './SpaceGenerator';\n\nexport default SpaceGenerator;\n"],
|
|
5
|
+
"mappings": ";AAIA,OAAOA,UAASC,aAAaC,SAASC,gBAAgB;AAGtD,SAASC,gBAAAA,qBAAoB;AAC7B,SAASC,aAAAA,kBAAiB;AAC1B,SAASC,eAAAA,oBAAmB;AAC5B,SAASC,iBAAiB;AAC1B,SAASC,mBAA+B;AACxC,SAASC,cAAAA,aAAYC,OAAOC,SAASC,sBAAsB;AAC3D,SAASC,yBAAyB;AAClC,SAASC,eAAe;AACxB,SAASC,iBAAiBC,gBAAgB;;;ACX1C,SAASC,2BAA2B;AAEpC,SAASC,QAAQC,eAAoC;AACrD,SAASC,oBAAoB;AAC7B,SAASC,mBAAmB;AAC5B,SAASC,iBAAiC;AAC1C,SAASC,YAAYC,mBAAmB;AACxC,SAASC,aAAa;AACtB,SAASC,cAA0B;AACnC,SAASC,iBAAiB;AAC1B,SAASC,YAAYC,gBAAgB;AACrC,SAASC,4BAAiD;AAC1D,SAASC,aAAa;AAEtB,IAAMC,YAA4BC;AAgB3B,IAAMC,mBAAmB,oBAAIC,IAAkC;EACpE;IACEC,aAAaC;IACb,OAAOC,OAAOC,GAAGC,OAAAA;AACf,YAAMC,UAAUC,MAAMH,CAAAA,EAAGI,IAAI,MAAA;AAC3B,cAAMC,MAAMN,MAAMO,GAAGC,IACnBC,OAAOX,cAAc;UACnBY,MAAMf,MAAMgB,SAASC,YAAW;UAChCC,SAASC,QAAQL,OAAOM,UAAU;YAAEF,SAASlB,MAAMqB,MAAMC,UAAU,CAAA;UAAG,CAAA,CAAA;UACtEC,SAAS,CAAA;QACX,CAAA,CAAA;AAGF,eAAOZ;MACT,CAAA;AAEAJ,WAAKC,OAAAA;AACL,aAAOA;IACT;;EAEF;IACEgB,YAAYpB;IACZ,OAAOC,OAAOC,GAAGC,OAAAA;AACf,YAAMC,UAAUC,MAAMH,CAAAA,EAAGI,IAAI,MAAA;AAE3B,cAAMC,MAAMN,MAAMO,GAAGC,IACnBC,OAAOU,aAAa;UAClBT,MAAMf,MAAMgB,SAASC,YAAW;UAChCQ,QAAQN,QAAQL,OAAOY,YAAY;YAAER,SAAS,CAAC;UAAE,CAAA,CAAA;QACnD,CAAA,CAAA;AAGF,eAAOP;MACT,CAAA;AAEAJ,WAAKC,OAAAA;AACL,aAAOA;IACT;;;EAGF;IACEmB,UAAUvB;IACV,OAAOC,OAAOC,GAAGC,OAAAA;AACf,YAAMC,UAAUC,MAAMH,CAAAA,EAAGI,IAAI,MAAA;AAC3B,cAAMkB,QAAmC,CAAC;AAC1C,cAAMC,QAAO,oBAAIC,KAAAA,GAAOC,YAAW;AACnC,cAAMC,OAAO;AACb,cAAMC,OAAO;AACb,iBAASC,MAAM,GAAGA,OAAOF,MAAME,OAAO;AACpC,mBAASC,MAAM,GAAGA,OAAOF,MAAME,OAAO;AACpC,kBAAMC,OAAOC,oBAAoB;cAAEH;cAAKC;YAAI,CAAA;AAC5C,gBAAIA,QAAQ,GAAG;AACbP,oBAAMQ,IAAAA,IAAQ;gBAAEE,OAAO,GAAGT,IAAAA,KAASK,GAAAA;cAAM;YAC3C,WAAWC,QAAQF,MAAM;AACvB,oBAAMM,OAAOF,oBAAoB;gBAAEH;gBAAKC,KAAK;cAAE,CAAA;AAC/C,oBAAMK,KAAKH,oBAAoB;gBAAEH;gBAAKC,KAAKF,OAAO;cAAE,CAAA;AACpDL,oBAAMQ,IAAAA,IAAQ;gBAAEE,OAAO,QAAQC,IAAAA,IAAQC,EAAAA;cAAM;YAC/C,WAAWL,MAAM,KAAKA,MAAMF,OAAO,GAAG;AACpCL,oBAAMQ,IAAAA,IAAQ;gBAAEE,OAAOG,KAAKC,MAAMD,KAAKE,OAAM,IAAK,GAAA;cAAQ;YAC5D;UACF;QACF;AAIA,eAAOtC,MAAMO,GAAGC,IACd+B,YAAY;UACV7B,MAAMf,MAAMgB,SAASC,YAAW;UAChCW;QACF,CAAA,CAAA;MAEJ,CAAA;AAEArB,WAAKC,OAAAA;AACL,aAAOA;IACT;;CAEH;AAEM,IAAMqC,kBAAkB,CAAuBC,SAAAA;AACpD,SAAO,OACLzC,OACAC,GACAC,OAAAA;AAGA,UAAMwC,SACH,MAAM1C,MAAMO,GAAGoC,eAAeC,MAAM;MAAE7C,UAAU0C,KAAK1C;IAAS,CAAA,EAAG8C,iBAAgB,MACjF,MAAM7C,MAAMO,GAAGoC,eAAeG,SAAS;MAACL;KAAK,GAAG,CAAA;AAGnD,UAAMM,WAAWC,qBAAqBtD,WAAWgD,OAAOO,kBAAiB,GAAI;MAAE1C,IAAIP,MAAMO;IAAG,CAAA;AAC5F,UAAMJ,UAAU,MAAM4C,SAASG,cAAcjD,CAAAA;AAG7C,UAAM,EAAEE,SAASgD,OAAM,IAAK,MAAMnD,MAAMO,GAAGqC,MAAMQ,OAAOV,OAAOW,SAAAA,CAAAA,EAAYC,IAAG;AAC9E,UAAMC,QAAQJ,OAAOK,KAAK,CAACD,WAAUA,OAAME,MAAMC,QAAQd,OAAOH,SAASA,KAAK1C,QAAQ;AACtF,QAAI,CAACwD,OAAO;AACV,YAAM7C,OAAO+B,KAAK1C,SAAS4D,MAAM,GAAA,EAAKC,IAAG,KAAMnB,KAAK1C;AACpD,YAAM0D,OAAOI,WAAW;QAAEnD;QAAMX,UAAU0C,KAAK1C;QAAU+D,YAAYpB,OAAOoB;MAAW,CAAA;AACvF,YAAMP,SAAQvD,MAAMO,GAAGC,IAAIC,OAAO4C,WAAW;QAAE3C;QAAM+C,MAAM3C,QAAQ2C,IAAAA;MAAM,CAAA,CAAA;AACzEvD,WAAK;QAACqD;OAAM;IACd;AAEA,WAAOpD;EACT;AACF;;;ACxIA,OAAO4D,WAAW;AAElB,SAASC,kBAAkB;AASpB,IAAMC,cAAc,CAAC,EAAEC,OAAOC,UAAU,CAAC,GAAGC,OAAOC,QAAO,MAAoB;AACnF,SACE,sBAAA,cAACC,OAAAA;IAAIC,WAAU;KACb,sBAAA,cAACD,OAAAA;IAAIC,WAAU;KACb,sBAAA,cAACD,OAAAA;IAAIC,WAAU;KAAiCH,KAAAA,GAChD,sBAAA,cAACE,OAAAA;IAAIC,WAAU;KAAuC,OAAA,CAAA,GAEvDL,MAAMM,IAAI,CAACC,SACV,sBAAA,cAACH,OAAAA;IAAII,KAAKD,KAAKE;IAAUJ,WAAU;KACjC,sBAAA,cAACD,OAAAA;IAAIC,WAAU;KAAyCE,KAAKE,QAAQ,GACrE,sBAAA,cAACL,OAAAA;IAAIC,WAAU;KAA6BJ,QAAQM,KAAKE,QAAQ,KAAK,CAAA,GACtE,sBAAA,cAACC,YAAAA;IACCC,SAAQ;IACRC,MAAK;IACLC,UAAAA;IACAX,OAAM;IACNC,SAAS,MAAMA,QAAQI,KAAKE,QAAQ;;AAMhD;;;AFZO,IAAMK,iBAAiB,CAAC,EAAEC,OAAOC,gBAAe,MAAuB;AAC5E,QAAMC,SAASC,UAAAA;AACf,QAAMC,cAAc;IAACC;IAAcC;IAAaC;;AAChD,QAAMC,eAAe;IAACC,QAAQC;IAASD,QAAQE;IAAaF,QAAQG;;AACpE,QAAM,CAACC,OAAOC,QAAAA,IAAYC,SAAS,CAAA;AACnC,QAAM,CAACC,MAAMC,OAAAA,IAAWF,SAAc,CAAC,CAAA;AAGvC,QAAMG,UAAUC,QAAQ,MAAA;AACtBjB,WAAOkB,SAAShB,WAAAA;AAChB,UAAMiB,oBAAoB,IAAIC,IAC5Bd,aAAae,IAAI,CAACC,SAAS;MAACA,KAAKC;MAAUC,gBAAgBF,IAAAA;KAAM,CAAA;AAGnE,WAAO,IAAIF,IAAI;SAAIK;SAAqBN;KAAkB;EAC5D,GAAG;IAACnB;IAAQM;GAAa;AAGzB,QAAMoB,aAAa,YAAA;AAEjB,UAAMC,aAAa,MAAM7B,MAAM8B,GAAGC,eAAeC,MAAK,EAAGC,IAAG;AAC5D,UAAMC,eAAelC,MAAM8B,GAAGK,MAAMJ,eAAeK;AAGnD,UAAM,EAAEC,QAAO,IAAK,MAAMrC,MAAM8B,GAAGE,MAAK,EAAGC,IAAG;AAC9C,UAAMK,YAAYC,SAChBF,QAAQG,OAA+B,CAACjB,KAAKkB,QAAAA;AAC3C,YAAMjB,OAAOkB,YAAYD,GAAAA;AACzB,UAAIjB,MAAM;AACR,cAAMX,SAAQU,IAAIC,IAAAA,KAAS;AAC3BD,YAAIC,IAAAA,IAAQX,SAAQ;MACtB;AACA,aAAOU;IACT,GAAG,CAAC,CAAA,CAAA;AAGNN,YAAQ;MACN0B,QAAQ;QACNC,QAAQV,aAAaW;QACrBC,SAASjB,WAAWgB;MACtB;MACAR,SAASC;IACX,CAAA;EACF;AAEAS,iBAAenB,YAAY;IAAC5B;GAAM;AAElC,QAAMgD,mBAAmBC,YACvB,OAAOxB,aAAAA;AACL,UAAMyB,cAAchC,QAAQiC,IAAI1B,QAAAA;AAChC,QAAIyB,aAAa;AAEf,YAAMA,YAAYlD,OAAOa,OAAOZ,eAAAA;AAChC,YAAM2B,WAAAA;IACR;EACF,GACA;IAACV;IAASL;GAAM;AAGlB,SACE,gBAAAuC,OAAA,cAACC,OAAAA;IAAIC,MAAK;IAAOC,WAAU;KACzB,gBAAAH,OAAA,cAACI,QAAQC,MAAI;IAACC,YAAW;KACvB,gBAAAN,OAAA,cAACO,aAAAA;IAAWC,MAAK;IAA+BC,UAAAA;IAASC,OAAM;IAAUC,SAASnC;MAClF,gBAAAwB,OAAA,cAACI,QAAQQ,WAAS;IAACC,SAAQ;MAC3B,gBAAAb,OAAA,cAACC,OAAAA;IAAIE,WAAU;KACb,gBAAAH,OAAA,cAACc,MAAMT,MAAI,MACT,gBAAAL,OAAA,cAACc,MAAMC,WAAS;IACd3C,MAAK;IACL4C,KAAK;IACLC,KAAK;IACLC,aAAa;IACbZ,YAAW;IACXa,OAAO1D;IACP2D,UAAU,CAACC,OAAO3D,SAAS4D,SAASD,GAAGE,OAAOJ,KAAK,CAAA;SAM3D,gBAAAnB,OAAA,cAACwB,aAAAA;IAAYC,OAAOzE;IAAaiC,SAASrB,KAAKqB;IAASyB,OAAM;IAAeC,SAASf;MACtF,gBAAAI,OAAA,cAACwB,aAAAA;IAAYC,OAAOrE;IAAc6B,SAASrB,KAAKqB;IAASyB,OAAM;IAAgBC,SAASf;MAExF,gBAAAI,OAAA,cAAC0B,mBAAAA;IAAkBpB,YAAW;IAAeqB,UAAS;KACnDC,KAAKC,UAAU;IAAEjF;IAAO,GAAGgB;EAAK,GAAGkE,gBAAgB;IAAEC,UAAU;EAAK,CAAA,GAAI,CAAA,CAAA,CAAA;AAIjF;;;AG1GA,IAAA,yBAAeC;",
|
|
6
|
+
"names": ["React", "useCallback", "useMemo", "useState", "DocumentType", "SheetType", "DiagramType", "useClient", "getTypename", "IconButton", "Input", "Toolbar", "useAsyncEffect", "SyntaxHighlighter", "Testing", "jsonKeyReplacer", "sortKeys", "addressToA1Notation", "create", "makeRef", "DocumentType", "createSheet", "SheetType", "CanvasType", "DiagramType", "faker", "Filter", "TableType", "createView", "TextType", "createAsyncGenerator", "range", "generator", "faker", "staticGenerators", "Map", "DocumentType", "typename", "space", "n", "cb", "objects", "range", "map", "obj", "db", "add", "create", "name", "commerce", "productName", "content", "makeRef", "TextType", "lorem", "sentences", "threads", "DiagramType", "canvas", "CanvasType", "SheetType", "cells", "year", "Date", "getFullYear", "cols", "rows", "col", "row", "cell", "addressToA1Notation", "value", "from", "to", "Math", "floor", "random", "createSheet", "createGenerator", "type", "schema", "schemaRegistry", "query", "firstOrUndefined", "register", "generate", "createAsyncGenerator", "getSchemaSnapshot", "createObjects", "tables", "Filter", "TableType", "run", "table", "find", "view", "target", "split", "pop", "createView", "jsonSchema", "React", "IconButton", "SchemaTable", "types", "objects", "label", "onClick", "div", "className", "map", "type", "key", "typename", "IconButton", "variant", "icon", "iconOnly", "SpaceGenerator", "space", "onCreateObjects", "client", "useClient", "staticTypes", "DocumentType", "DiagramType", "SheetType", "mutableTypes", "Testing", "OrgType", "ProjectType", "ContactType", "count", "setCount", "useState", "info", "setInfo", "typeMap", "useMemo", "addTypes", "mutableGenerators", "Map", "map", "type", "typename", "createGenerator", "staticGenerators", "updateInfo", "echoSchema", "db", "schemaRegistry", "query", "run", "staticSchema", "graph", "schemas", "objects", "objectMap", "sortKeys", "reduce", "obj", "getTypename", "schema", "static", "length", "mutable", "useAsyncEffect", "handleCreateData", "useCallback", "constructor", "get", "React", "div", "role", "className", "Toolbar", "Root", "classNames", "IconButton", "icon", "iconOnly", "label", "onClick", "Separator", "variant", "Input", "TextInput", "min", "max", "placeholder", "value", "onChange", "ev", "parseInt", "target", "SchemaTable", "types", "SyntaxHighlighter", "language", "JSON", "stringify", "jsonKeyReplacer", "truncate", "SpaceGenerator"]
|
|
7
7
|
}
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
import {
|
|
2
|
+
DEBUG_PLUGIN
|
|
3
|
+
} from "./chunk-I3ON45JK.mjs";
|
|
4
|
+
|
|
5
|
+
// packages/plugins/plugin-debug/src/capabilities/app-graph-builder.ts
|
|
6
|
+
import { contributes, Capabilities } from "@dxos/app-framework";
|
|
7
|
+
import { ClientCapabilities } from "@dxos/plugin-client";
|
|
8
|
+
import { createExtension, toSignal } from "@dxos/plugin-graph";
|
|
9
|
+
import { memoizeQuery } from "@dxos/plugin-space";
|
|
10
|
+
import { CollectionType } from "@dxos/plugin-space/types";
|
|
11
|
+
import { getTypename, parseId, SpaceState } from "@dxos/react-client/echo";
|
|
12
|
+
import { isSpace } from "@dxos/react-client/echo";
|
|
13
|
+
var app_graph_builder_default = (context) => {
|
|
14
|
+
const resolve = (typename) => context.requestCapabilities(Capabilities.Metadata).find(({ id }) => id === typename)?.metadata ?? {};
|
|
15
|
+
return contributes(Capabilities.AppGraphBuilder, [
|
|
16
|
+
// Devtools node.
|
|
17
|
+
createExtension({
|
|
18
|
+
id: "dxos.org/plugin/debug/devtools",
|
|
19
|
+
filter: (node) => {
|
|
20
|
+
const settings = context.requestCapabilities(Capabilities.SettingsStore)[0]?.getStore(DEBUG_PLUGIN)?.value;
|
|
21
|
+
return !!settings?.devtools && node.id === "root";
|
|
22
|
+
},
|
|
23
|
+
connector: () => [
|
|
24
|
+
{
|
|
25
|
+
// TODO(zan): Removed `/` because it breaks deck layout reload. Fix?
|
|
26
|
+
id: "dxos.org.plugin.debug.devtools",
|
|
27
|
+
data: "devtools",
|
|
28
|
+
type: "dxos.org/plugin/debug/devtools",
|
|
29
|
+
properties: {
|
|
30
|
+
label: [
|
|
31
|
+
"devtools label",
|
|
32
|
+
{
|
|
33
|
+
ns: DEBUG_PLUGIN
|
|
34
|
+
}
|
|
35
|
+
],
|
|
36
|
+
icon: "ph--hammer--regular"
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
]
|
|
40
|
+
}),
|
|
41
|
+
// Debug node.
|
|
42
|
+
createExtension({
|
|
43
|
+
id: "dxos.org/plugin/debug/debug",
|
|
44
|
+
filter: (node) => {
|
|
45
|
+
const settings = context.requestCapabilities(Capabilities.SettingsStore)[0]?.getStore(DEBUG_PLUGIN)?.value;
|
|
46
|
+
return !!settings?.debug && node.id === "root";
|
|
47
|
+
},
|
|
48
|
+
connector: () => {
|
|
49
|
+
const graph = context.requestCapability(Capabilities.AppGraph);
|
|
50
|
+
return [
|
|
51
|
+
{
|
|
52
|
+
id: "dxos.org/plugin/debug/debug",
|
|
53
|
+
type: "dxos.org/plugin/debug/debug",
|
|
54
|
+
data: {
|
|
55
|
+
graph
|
|
56
|
+
},
|
|
57
|
+
properties: {
|
|
58
|
+
label: [
|
|
59
|
+
"debug label",
|
|
60
|
+
{
|
|
61
|
+
ns: DEBUG_PLUGIN
|
|
62
|
+
}
|
|
63
|
+
],
|
|
64
|
+
icon: "ph--bug--regular"
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
];
|
|
68
|
+
}
|
|
69
|
+
}),
|
|
70
|
+
// Space debug nodes.
|
|
71
|
+
createExtension({
|
|
72
|
+
id: "dxos.org/plugin/debug/spaces",
|
|
73
|
+
filter: (node) => {
|
|
74
|
+
const settings = context.requestCapabilities(Capabilities.SettingsStore)[0]?.getStore(DEBUG_PLUGIN)?.value;
|
|
75
|
+
return !!settings?.debug && isSpace(node.data);
|
|
76
|
+
},
|
|
77
|
+
connector: ({ node }) => {
|
|
78
|
+
const space = node.data;
|
|
79
|
+
const state = toSignal((onChange) => space.state.subscribe(() => onChange()).unsubscribe, () => space.state.get(), space.id);
|
|
80
|
+
if (state !== SpaceState.SPACE_READY) {
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
const collection = space.properties[CollectionType.typename]?.target;
|
|
84
|
+
if (!collection) {
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
return [
|
|
88
|
+
{
|
|
89
|
+
id: `${space.id}-debug`,
|
|
90
|
+
type: "dxos.org/plugin/debug/space",
|
|
91
|
+
data: {
|
|
92
|
+
space,
|
|
93
|
+
type: "dxos.org/plugin/debug/space"
|
|
94
|
+
},
|
|
95
|
+
properties: {
|
|
96
|
+
label: [
|
|
97
|
+
"debug label",
|
|
98
|
+
{
|
|
99
|
+
ns: DEBUG_PLUGIN
|
|
100
|
+
}
|
|
101
|
+
],
|
|
102
|
+
icon: "ph--bug--regular"
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
];
|
|
106
|
+
}
|
|
107
|
+
}),
|
|
108
|
+
// Create nodes for debug sidebar.
|
|
109
|
+
createExtension({
|
|
110
|
+
id: `${DEBUG_PLUGIN}/debug-for-subject`,
|
|
111
|
+
resolver: ({ id }) => {
|
|
112
|
+
if (!id.endsWith("~debug")) {
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
const type = "orphan-settings-for-subject";
|
|
116
|
+
const icon = "ph--bug--regular";
|
|
117
|
+
const client = context.requestCapability(ClientCapabilities.Client);
|
|
118
|
+
const [subjectId] = id.split("~");
|
|
119
|
+
const { spaceId, objectId } = parseId(subjectId);
|
|
120
|
+
const spaces = toSignal((onChange) => client.spaces.subscribe(() => onChange()).unsubscribe, () => client.spaces.get());
|
|
121
|
+
const space = spaces?.find((space2) => space2.state.get() === SpaceState.SPACE_READY && space2.id === spaceId);
|
|
122
|
+
if (!objectId) {
|
|
123
|
+
const label2 = space ? space.properties.name || [
|
|
124
|
+
"unnamed space label",
|
|
125
|
+
{
|
|
126
|
+
ns: DEBUG_PLUGIN
|
|
127
|
+
}
|
|
128
|
+
] : [
|
|
129
|
+
"unnamed object settings label",
|
|
130
|
+
{
|
|
131
|
+
ns: DEBUG_PLUGIN
|
|
132
|
+
}
|
|
133
|
+
];
|
|
134
|
+
return {
|
|
135
|
+
id,
|
|
136
|
+
type,
|
|
137
|
+
data: null,
|
|
138
|
+
properties: {
|
|
139
|
+
icon,
|
|
140
|
+
label: label2,
|
|
141
|
+
showResolvedThreads: false,
|
|
142
|
+
object: null,
|
|
143
|
+
space
|
|
144
|
+
}
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
const [object] = memoizeQuery(space, {
|
|
148
|
+
id: objectId
|
|
149
|
+
});
|
|
150
|
+
if (!object || !subjectId) {
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
const meta = resolve(getTypename(object) ?? "");
|
|
154
|
+
const label = meta.label?.(object) || object.name || meta.placeholder || [
|
|
155
|
+
"unnamed object settings label",
|
|
156
|
+
{
|
|
157
|
+
ns: DEBUG_PLUGIN
|
|
158
|
+
}
|
|
159
|
+
];
|
|
160
|
+
return {
|
|
161
|
+
id,
|
|
162
|
+
type,
|
|
163
|
+
data: null,
|
|
164
|
+
properties: {
|
|
165
|
+
icon,
|
|
166
|
+
label,
|
|
167
|
+
object
|
|
168
|
+
}
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
})
|
|
172
|
+
]);
|
|
173
|
+
};
|
|
174
|
+
export {
|
|
175
|
+
app_graph_builder_default as default
|
|
176
|
+
};
|
|
177
|
+
//# sourceMappingURL=app-graph-builder-FXELWOFS.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/capabilities/app-graph-builder.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { contributes, Capabilities, type PluginsContext } from '@dxos/app-framework';\nimport { ClientCapabilities } from '@dxos/plugin-client';\nimport { createExtension, toSignal, type Node } from '@dxos/plugin-graph';\nimport { memoizeQuery } from '@dxos/plugin-space';\nimport { CollectionType } from '@dxos/plugin-space/types';\nimport { getTypename, parseId, SpaceState } from '@dxos/react-client/echo';\nimport { isSpace, type Space } from '@dxos/react-client/echo';\n\nimport { DEBUG_PLUGIN } from '../meta';\nimport { type DebugSettingsProps } from '../types';\n\nexport default (context: PluginsContext) => {\n const resolve = (typename: string) =>\n context.requestCapabilities(Capabilities.Metadata).find(({ id }) => id === typename)?.metadata ?? {};\n\n return contributes(Capabilities.AppGraphBuilder, [\n // Devtools node.\n createExtension({\n id: 'dxos.org/plugin/debug/devtools',\n filter: (node): node is Node<null> => {\n const settings = context\n .requestCapabilities(Capabilities.SettingsStore)[0]\n ?.getStore<DebugSettingsProps>(DEBUG_PLUGIN)?.value;\n return !!settings?.devtools && node.id === 'root';\n },\n connector: () => [\n {\n // TODO(zan): Removed `/` because it breaks deck layout reload. Fix?\n id: 'dxos.org.plugin.debug.devtools',\n data: 'devtools',\n type: 'dxos.org/plugin/debug/devtools',\n properties: {\n label: ['devtools label', { ns: DEBUG_PLUGIN }],\n icon: 'ph--hammer--regular',\n },\n },\n ],\n }),\n\n // Debug node.\n createExtension({\n id: 'dxos.org/plugin/debug/debug',\n filter: (node): node is Node<null> => {\n const settings = context\n .requestCapabilities(Capabilities.SettingsStore)[0]\n ?.getStore<DebugSettingsProps>(DEBUG_PLUGIN)?.value;\n return !!settings?.debug && node.id === 'root';\n },\n connector: () => {\n const graph = context.requestCapability(Capabilities.AppGraph);\n\n return [\n {\n id: 'dxos.org/plugin/debug/debug',\n type: 'dxos.org/plugin/debug/debug',\n data: { graph },\n properties: {\n label: ['debug label', { ns: DEBUG_PLUGIN }],\n icon: 'ph--bug--regular',\n },\n },\n ];\n },\n }),\n\n // Space debug nodes.\n createExtension({\n id: 'dxos.org/plugin/debug/spaces',\n filter: (node): node is Node<Space> => {\n const settings = context\n .requestCapabilities(Capabilities.SettingsStore)[0]\n ?.getStore<DebugSettingsProps>(DEBUG_PLUGIN)?.value;\n return !!settings?.debug && isSpace(node.data);\n },\n connector: ({ node }) => {\n const space = node.data;\n const state = toSignal(\n (onChange) => space.state.subscribe(() => onChange()).unsubscribe,\n () => space.state.get(),\n space.id,\n );\n if (state !== SpaceState.SPACE_READY) {\n return;\n }\n\n // Not adding the debug node until the root collection is available aligns the behaviour of this\n // extension with that of the space plugin adding objects. This ensures that the debug node is added at\n // the same time as objects and prevents order from changing as the nodes are added.\n const collection = space.properties[CollectionType.typename]?.target as CollectionType | undefined;\n if (!collection) {\n return;\n }\n\n return [\n {\n id: `${space.id}-debug`, // TODO(burdon): Change to slashes consistently.\n type: 'dxos.org/plugin/debug/space',\n data: { space, type: 'dxos.org/plugin/debug/space' },\n properties: {\n label: ['debug label', { ns: DEBUG_PLUGIN }],\n icon: 'ph--bug--regular',\n },\n },\n ];\n },\n }),\n\n // Create nodes for debug sidebar.\n createExtension({\n id: `${DEBUG_PLUGIN}/debug-for-subject`,\n resolver: ({ id }) => {\n // TODO(Zan): Find util (or make one).\n if (!id.endsWith('~debug')) {\n return;\n }\n\n const type = 'orphan-settings-for-subject';\n const icon = 'ph--bug--regular';\n\n const client = context.requestCapability(ClientCapabilities.Client);\n const [subjectId] = id.split('~');\n const { spaceId, objectId } = parseId(subjectId);\n const spaces = toSignal(\n (onChange) => client.spaces.subscribe(() => onChange()).unsubscribe,\n () => client.spaces.get(),\n );\n const space = spaces?.find((space) => space.state.get() === SpaceState.SPACE_READY && space.id === spaceId);\n if (!objectId) {\n // TODO(burdon): Ref SPACE_PLUGIN ns.\n const label = space\n ? space.properties.name || ['unnamed space label', { ns: DEBUG_PLUGIN }]\n : ['unnamed object settings label', { ns: DEBUG_PLUGIN }];\n\n // TODO(wittjosiah): Support comments for arbitrary subjects.\n // This is to ensure that the comments panel is not stuck on an old object.\n return {\n id,\n type,\n data: null,\n properties: {\n icon,\n label,\n showResolvedThreads: false,\n object: null,\n space,\n },\n };\n }\n\n const [object] = memoizeQuery(space, { id: objectId });\n if (!object || !subjectId) {\n return;\n }\n\n const meta = resolve(getTypename(object) ?? '');\n const label = meta.label?.(object) ||\n object.name ||\n meta.placeholder || ['unnamed object settings label', { ns: DEBUG_PLUGIN }];\n\n return {\n id,\n type,\n data: null,\n properties: {\n icon,\n label,\n object,\n },\n };\n },\n }),\n ]);\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["contributes", "Capabilities", "ClientCapabilities", "createExtension", "toSignal", "memoizeQuery", "CollectionType", "getTypename", "parseId", "SpaceState", "isSpace", "context", "resolve", "typename", "requestCapabilities", "Capabilities", "Metadata", "find", "id", "metadata", "contributes", "AppGraphBuilder", "createExtension", "filter", "node", "settings", "SettingsStore", "getStore", "DEBUG_PLUGIN", "value", "devtools", "connector", "data", "type", "properties", "label", "ns", "icon", "debug", "graph", "requestCapability", "AppGraph", "isSpace", "space", "state", "toSignal", "onChange", "subscribe", "unsubscribe", "get", "SpaceState", "SPACE_READY", "collection", "CollectionType", "target", "resolver", "endsWith", "client", "ClientCapabilities", "Client", "subjectId", "split", "spaceId", "objectId", "parseId", "spaces", "name", "showResolvedThreads", "object", "memoizeQuery", "meta", "getTypename", "placeholder"]
|
|
7
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// packages/plugins/plugin-debug/src/meta.ts
|
|
2
2
|
var DEBUG_PLUGIN = "dxos.org/plugin/debug";
|
|
3
|
-
var
|
|
3
|
+
var meta = {
|
|
4
4
|
id: DEBUG_PLUGIN,
|
|
5
5
|
name: "Debug",
|
|
6
6
|
description: "DXOS debugging tools.",
|
|
@@ -13,6 +13,6 @@ var meta_default = {
|
|
|
13
13
|
|
|
14
14
|
export {
|
|
15
15
|
DEBUG_PLUGIN,
|
|
16
|
-
|
|
16
|
+
meta
|
|
17
17
|
};
|
|
18
|
-
//# sourceMappingURL=chunk-
|
|
18
|
+
//# sourceMappingURL=chunk-I3ON45JK.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/meta.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { type PluginMeta } from '@dxos/app-framework';\n\nexport const DEBUG_PLUGIN = 'dxos.org/plugin/debug';\n\nexport const meta = {\n id: DEBUG_PLUGIN,\n name: 'Debug',\n description: 'DXOS debugging tools.',\n icon: 'ph--bug--regular',\n source: 'https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-debug',\n tags: ['experimental'],\n} satisfies PluginMeta;\n"],
|
|
5
|
+
"mappings": ";AAMO,IAAMA,eAAe;AAErB,IAAMC,OAAO;EAClBC,IAAIF;EACJG,MAAM;EACNC,aAAa;EACbC,MAAM;EACNC,QAAQ;EACRC,MAAM;IAAC;;AACT;",
|
|
6
|
+
"names": ["DEBUG_PLUGIN", "meta", "id", "name", "description", "icon", "source", "tags"]
|
|
7
|
+
}
|