@dxos/plugin-debug 0.7.3-staging.971cd8d → 0.7.3-staging.d887a4b
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/{SpaceGenerator-2Z5WFX4T.mjs → SpaceGenerator-BQ3645OS.mjs} +22 -218
- package/dist/lib/browser/SpaceGenerator-BQ3645OS.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +9 -1
- package/dist/lib/browser/index.mjs.map +3 -3
- package/dist/lib/browser/meta.json +1 -1
- package/dist/types/src/DebugPlugin.d.ts.map +1 -1
- package/dist/types/src/components/SpaceGenerator/ObjectGenerator.d.ts.map +1 -1
- package/dist/types/src/components/SpaceGenerator/draw-util.d.ts.map +1 -1
- package/package.json +41 -41
- package/src/DebugPlugin.tsx +16 -0
- package/src/components/SpaceGenerator/ObjectGenerator.tsx +22 -59
- package/src/components/SpaceGenerator/draw-util.ts +1 -10
- package/dist/lib/browser/SpaceGenerator-2Z5WFX4T.mjs.map +0 -7
|
@@ -11,201 +11,27 @@ import { Testing } from "@dxos/schema/testing";
|
|
|
11
11
|
import { jsonKeyReplacer, sortKeys } from "@dxos/util";
|
|
12
12
|
|
|
13
13
|
// packages/plugins/plugin-debug/src/components/SpaceGenerator/ObjectGenerator.tsx
|
|
14
|
-
import { createTLStore, defaultBindingUtils, defaultShapeUtils, defaultShapeTools, defaultTools, Editor } from "@tldraw/tldraw";
|
|
15
14
|
import { create } from "@dxos/live-object";
|
|
16
15
|
import { DocumentType, TextType } from "@dxos/plugin-markdown/types";
|
|
17
16
|
import { addressToA1Notation, createSheet } from "@dxos/plugin-sheet";
|
|
18
17
|
import { SheetType } from "@dxos/plugin-sheet/types";
|
|
19
|
-
import {
|
|
20
|
-
import { faker
|
|
18
|
+
import { CanvasType, DiagramType } from "@dxos/plugin-sketch/types";
|
|
19
|
+
import { faker } from "@dxos/random";
|
|
21
20
|
import { Filter } from "@dxos/react-client/echo";
|
|
22
21
|
import { TableType } from "@dxos/react-ui-table";
|
|
23
22
|
import { createView } from "@dxos/schema";
|
|
24
23
|
import { createAsyncGenerator } from "@dxos/schema/testing";
|
|
25
|
-
import { range
|
|
26
|
-
|
|
27
|
-
// packages/plugins/plugin-debug/src/components/SpaceGenerator/draw-util.ts
|
|
28
|
-
import { Graph } from "@antv/graphlib";
|
|
29
|
-
import { D3ForceLayout, GridLayout, RadialLayout } from "@antv/layout";
|
|
30
|
-
import { createBindingId, createShapeId } from "@tldraw/tldraw";
|
|
31
|
-
import { faker } from "@dxos/random";
|
|
32
|
-
import { isNotFalsy, range } from "@dxos/util";
|
|
33
|
-
var generateGraph = () => {
|
|
34
|
-
const nodes = range(faker.number.int({
|
|
35
|
-
min: 8,
|
|
36
|
-
max: 32
|
|
37
|
-
})).map(() => ({
|
|
38
|
-
id: faker.string.uuid(),
|
|
39
|
-
data: {
|
|
40
|
-
label: faker.lorem.words(2).split(" ").map((word) => word.charAt(0).toUpperCase()).join("-")
|
|
41
|
-
}
|
|
42
|
-
}));
|
|
43
|
-
const unlinked = new Set(nodes.map((node) => node.id));
|
|
44
|
-
const pop = () => {
|
|
45
|
-
if (unlinked.size) {
|
|
46
|
-
const id = faker.helpers.arrayElement(Array.from(unlinked));
|
|
47
|
-
unlinked.delete(id);
|
|
48
|
-
return id;
|
|
49
|
-
}
|
|
50
|
-
};
|
|
51
|
-
const edges = [];
|
|
52
|
-
const link = (source2, target) => {
|
|
53
|
-
edges.push({
|
|
54
|
-
id: faker.string.uuid(),
|
|
55
|
-
source: source2,
|
|
56
|
-
target,
|
|
57
|
-
data: {}
|
|
58
|
-
});
|
|
59
|
-
};
|
|
60
|
-
const branching = 3;
|
|
61
|
-
const traverse = (source2) => {
|
|
62
|
-
const targets = range(faker.number.int({
|
|
63
|
-
min: 1,
|
|
64
|
-
max: branching
|
|
65
|
-
})).map(() => {
|
|
66
|
-
const target = pop();
|
|
67
|
-
if (target) {
|
|
68
|
-
link(source2, target);
|
|
69
|
-
}
|
|
70
|
-
return target;
|
|
71
|
-
}).filter(isNotFalsy);
|
|
72
|
-
for (const target of targets) {
|
|
73
|
-
traverse(target);
|
|
74
|
-
}
|
|
75
|
-
};
|
|
76
|
-
const source = pop();
|
|
77
|
-
if (source) {
|
|
78
|
-
traverse(source);
|
|
79
|
-
}
|
|
80
|
-
return new Graph({
|
|
81
|
-
nodes,
|
|
82
|
-
edges
|
|
83
|
-
});
|
|
84
|
-
};
|
|
85
|
-
var drawGraph = async (editor, graph) => {
|
|
86
|
-
const grid = 40;
|
|
87
|
-
const nodeSize = 80;
|
|
88
|
-
const snap = (n) => Math.round(n / grid) * grid;
|
|
89
|
-
const defaultOptions = {
|
|
90
|
-
center: [
|
|
91
|
-
0,
|
|
92
|
-
0
|
|
93
|
-
],
|
|
94
|
-
width: grid * 20,
|
|
95
|
-
height: grid * 20,
|
|
96
|
-
linkDistance: grid * 2,
|
|
97
|
-
nodeSize,
|
|
98
|
-
nodeSpacing: nodeSize,
|
|
99
|
-
preventOverlap: true
|
|
100
|
-
};
|
|
101
|
-
const layoutType = faker.helpers.arrayElement([
|
|
102
|
-
"d3force",
|
|
103
|
-
"grid",
|
|
104
|
-
"radial"
|
|
105
|
-
]);
|
|
106
|
-
let layout;
|
|
107
|
-
switch (layoutType) {
|
|
108
|
-
case "d3force": {
|
|
109
|
-
layout = new D3ForceLayout({
|
|
110
|
-
...defaultOptions,
|
|
111
|
-
nodeStrength: 0.3,
|
|
112
|
-
collideStrength: 0.8
|
|
113
|
-
});
|
|
114
|
-
break;
|
|
115
|
-
}
|
|
116
|
-
case "grid": {
|
|
117
|
-
layout = new GridLayout({
|
|
118
|
-
...defaultOptions
|
|
119
|
-
});
|
|
120
|
-
break;
|
|
121
|
-
}
|
|
122
|
-
case "radial":
|
|
123
|
-
default: {
|
|
124
|
-
layout = new RadialLayout({
|
|
125
|
-
...defaultOptions,
|
|
126
|
-
focusNode: graph.getAllNodes()[0],
|
|
127
|
-
unitRadius: grid * 2
|
|
128
|
-
});
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
const { nodes, edges } = await layout.execute(graph);
|
|
132
|
-
for (const node of nodes) {
|
|
133
|
-
const id = createShapeId(node.id);
|
|
134
|
-
editor.createShape({
|
|
135
|
-
id,
|
|
136
|
-
type: "geo",
|
|
137
|
-
x: snap(node.data.x),
|
|
138
|
-
y: snap(node.data.y),
|
|
139
|
-
props: {
|
|
140
|
-
w: nodeSize,
|
|
141
|
-
h: nodeSize,
|
|
142
|
-
text: node.data.label
|
|
143
|
-
}
|
|
144
|
-
});
|
|
145
|
-
}
|
|
146
|
-
for (const edge of edges) {
|
|
147
|
-
const arrowId = createShapeId(edge.id);
|
|
148
|
-
editor.createShape({
|
|
149
|
-
id: arrowId,
|
|
150
|
-
type: "arrow"
|
|
151
|
-
});
|
|
152
|
-
editor.createBinding({
|
|
153
|
-
id: createBindingId(),
|
|
154
|
-
type: "arrow",
|
|
155
|
-
fromId: arrowId,
|
|
156
|
-
toId: createShapeId(edge.source),
|
|
157
|
-
props: {
|
|
158
|
-
terminal: "start",
|
|
159
|
-
isExact: false,
|
|
160
|
-
isPrecise: false,
|
|
161
|
-
normalizedAnchor: {
|
|
162
|
-
x: 0.5,
|
|
163
|
-
y: 0.5
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
});
|
|
167
|
-
editor.createBinding({
|
|
168
|
-
id: createBindingId(),
|
|
169
|
-
type: "arrow",
|
|
170
|
-
fromId: arrowId,
|
|
171
|
-
toId: createShapeId(edge.target),
|
|
172
|
-
props: {
|
|
173
|
-
terminal: "end",
|
|
174
|
-
isExact: false,
|
|
175
|
-
isPrecise: false,
|
|
176
|
-
normalizedAnchor: {
|
|
177
|
-
x: 0.5,
|
|
178
|
-
y: 0.5
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
});
|
|
182
|
-
}
|
|
183
|
-
const data = editor.store.getStoreSnapshot();
|
|
184
|
-
const content = JSON.parse(JSON.stringify(data.store));
|
|
185
|
-
return content;
|
|
186
|
-
};
|
|
187
|
-
|
|
188
|
-
// packages/plugins/plugin-debug/src/components/SpaceGenerator/ObjectGenerator.tsx
|
|
189
|
-
var generator = faker2;
|
|
24
|
+
import { range } from "@dxos/util";
|
|
25
|
+
var generator = faker;
|
|
190
26
|
var staticGenerators = /* @__PURE__ */ new Map([
|
|
191
|
-
//
|
|
192
|
-
// DocumentType
|
|
193
|
-
//
|
|
194
27
|
[
|
|
195
28
|
DocumentType.typename,
|
|
196
29
|
async (space, n, cb) => {
|
|
197
|
-
const objects =
|
|
198
|
-
const content = range2(faker2.number.int({
|
|
199
|
-
min: 3,
|
|
200
|
-
max: 8
|
|
201
|
-
})).map(() => faker2.lorem.sentences(faker2.number.int({
|
|
202
|
-
min: 3,
|
|
203
|
-
max: 16
|
|
204
|
-
}))).join("\n\n");
|
|
30
|
+
const objects = range(n).map(() => {
|
|
205
31
|
const obj = space.db.add(create(DocumentType, {
|
|
206
|
-
name:
|
|
32
|
+
name: faker.commerce.productName(),
|
|
207
33
|
content: create(TextType, {
|
|
208
|
-
content
|
|
34
|
+
content: faker.lorem.sentences(5)
|
|
209
35
|
}),
|
|
210
36
|
threads: []
|
|
211
37
|
}));
|
|
@@ -215,57 +41,33 @@ var staticGenerators = /* @__PURE__ */ new Map([
|
|
|
215
41
|
return objects;
|
|
216
42
|
}
|
|
217
43
|
],
|
|
218
|
-
//
|
|
219
|
-
// DiagramType
|
|
220
|
-
//
|
|
221
44
|
[
|
|
222
45
|
DiagramType.typename,
|
|
223
46
|
async (space, n, cb) => {
|
|
224
|
-
const
|
|
225
|
-
bindingUtils: defaultBindingUtils,
|
|
226
|
-
shapeUtils: defaultShapeUtils,
|
|
227
|
-
tools: [
|
|
228
|
-
...defaultTools,
|
|
229
|
-
...defaultShapeTools
|
|
230
|
-
],
|
|
231
|
-
getContainer: () => document.body
|
|
232
|
-
};
|
|
233
|
-
const objects = await Promise.all(range2(n).map(async () => {
|
|
234
|
-
const store = createTLStore();
|
|
235
|
-
const editor = new Editor({
|
|
236
|
-
...options,
|
|
237
|
-
store
|
|
238
|
-
});
|
|
239
|
-
const graph = generateGraph();
|
|
240
|
-
const content = await drawGraph(editor, graph);
|
|
241
|
-
editor.dispose();
|
|
242
|
-
store.dispose();
|
|
47
|
+
const objects = range(n).map(() => {
|
|
243
48
|
const obj = space.db.add(create(DiagramType, {
|
|
244
|
-
name:
|
|
49
|
+
name: faker.commerce.productName(),
|
|
245
50
|
canvas: create(CanvasType, {
|
|
246
|
-
|
|
247
|
-
content
|
|
51
|
+
content: {}
|
|
248
52
|
})
|
|
249
53
|
}));
|
|
250
54
|
return obj;
|
|
251
|
-
})
|
|
55
|
+
});
|
|
252
56
|
cb?.(objects);
|
|
253
57
|
return objects;
|
|
254
58
|
}
|
|
255
59
|
],
|
|
256
|
-
//
|
|
257
|
-
// SheetType
|
|
258
|
-
//
|
|
60
|
+
// TODO(burdon): Create unit tests.
|
|
259
61
|
[
|
|
260
62
|
SheetType.typename,
|
|
261
63
|
async (space, n, cb) => {
|
|
262
|
-
const objects =
|
|
64
|
+
const objects = range(n).map(() => {
|
|
65
|
+
const cells = {};
|
|
263
66
|
const year = (/* @__PURE__ */ new Date()).getFullYear();
|
|
264
67
|
const cols = 4;
|
|
265
|
-
const rows =
|
|
266
|
-
const cells = {};
|
|
68
|
+
const rows = 16;
|
|
267
69
|
for (let col = 1; col <= cols; col++) {
|
|
268
|
-
for (let row = 1; row <=
|
|
70
|
+
for (let row = 1; row <= rows; row++) {
|
|
269
71
|
const cell = addressToA1Notation({
|
|
270
72
|
col,
|
|
271
73
|
row
|
|
@@ -294,7 +96,7 @@ var staticGenerators = /* @__PURE__ */ new Map([
|
|
|
294
96
|
}
|
|
295
97
|
}
|
|
296
98
|
return space.db.add(createSheet({
|
|
297
|
-
name:
|
|
99
|
+
name: faker.commerce.productName(),
|
|
298
100
|
cells
|
|
299
101
|
}));
|
|
300
102
|
});
|
|
@@ -307,10 +109,12 @@ var createGenerator = (type) => {
|
|
|
307
109
|
return async (space, n, cb) => {
|
|
308
110
|
const mutableSchema = await space.db.schemaRegistry.query();
|
|
309
111
|
const schema = mutableSchema.find((schema2) => schema2.typename === type.typename) ?? space.db.schemaRegistry.addSchema(type);
|
|
310
|
-
const generate = createAsyncGenerator(generator, schema.schema,
|
|
112
|
+
const generate = createAsyncGenerator(generator, schema.schema, {
|
|
113
|
+
db: space.db
|
|
114
|
+
});
|
|
311
115
|
const objects = await generate.createObjects(n);
|
|
312
116
|
const { objects: tables } = await space.db.query(Filter.schema(TableType)).run();
|
|
313
|
-
const table = tables.find((table2) => table2.view?.query?.
|
|
117
|
+
const table = tables.find((table2) => table2.view?.query?.type === type.typename);
|
|
314
118
|
if (!table) {
|
|
315
119
|
const name = type.typename.split("/").pop() ?? type.typename;
|
|
316
120
|
const view = createView({
|
|
@@ -466,4 +270,4 @@ var SpaceGenerator_default = SpaceGenerator;
|
|
|
466
270
|
export {
|
|
467
271
|
SpaceGenerator_default as default
|
|
468
272
|
};
|
|
469
|
-
//# sourceMappingURL=SpaceGenerator-
|
|
273
|
+
//# sourceMappingURL=SpaceGenerator-BQ3645OS.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 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 mutableSchema = await space.db.schemaRegistry.query();\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: mutableSchema.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 { type AbstractSchema, type BaseObject } from '@dxos/echo-schema';\nimport { create, type ReactiveObject } from '@dxos/live-object';\nimport { DocumentType, TextType } from '@dxos/plugin-markdown/types';\nimport { addressToA1Notation, createSheet } from '@dxos/plugin-sheet';\nimport { type CellValue } from '@dxos/plugin-sheet/types';\nimport { SheetType } 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: 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: 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: AbstractSchema<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 mutableSchema = await space.db.schemaRegistry.query();\n const schema =\n mutableSchema.find((schema) => schema.typename === type.typename) ?? space.db.schemaRegistry.addSchema(type);\n\n // Create objects.\n const generate = createAsyncGenerator(generator, schema.schema, { 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?.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 }));\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": "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",
|
|
6
|
+
"names": ["React", "useCallback", "useMemo", "useState", "DocumentType", "SheetType", "DiagramType", "useClient", "getTypename", "IconButton", "Input", "Toolbar", "useAsyncEffect", "SyntaxHighlighter", "Testing", "jsonKeyReplacer", "sortKeys", "create", "DocumentType", "TextType", "addressToA1Notation", "createSheet", "SheetType", "CanvasType", "DiagramType", "faker", "Filter", "TableType", "createView", "createAsyncGenerator", "range", "generator", "faker", "staticGenerators", "Map", "DocumentType", "typename", "space", "n", "cb", "objects", "range", "map", "obj", "db", "add", "create", "name", "commerce", "productName", "content", "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", "mutableSchema", "schemaRegistry", "query", "schema", "find", "addSchema", "generate", "createAsyncGenerator", "createObjects", "tables", "Filter", "TableType", "run", "table", "view", "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", "mutableSchema", "db", "schemaRegistry", "query", "staticSchema", "graph", "schemas", "objects", "run", "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", "Expander", "Input", "TextInput", "min", "max", "placeholder", "value", "onChange", "ev", "parseInt", "target", "SchemaTable", "types", "SyntaxHighlighter", "language", "JSON", "stringify", "jsonKeyReplacer", "truncate", "SpaceGenerator"]
|
|
7
|
+
}
|
|
@@ -388,7 +388,7 @@ var Wireframe = ({ classNames, label, object }) => {
|
|
|
388
388
|
// packages/plugins/plugin-debug/src/components/index.ts
|
|
389
389
|
var DebugApp = lazy(() => import("./DebugApp-HCHR6GKO.mjs"));
|
|
390
390
|
var DebugSpace = lazy(() => import("./DebugSpace-DHKEAMIC.mjs"));
|
|
391
|
-
var SpaceGenerator = lazy(() => import("./SpaceGenerator-
|
|
391
|
+
var SpaceGenerator = lazy(() => import("./SpaceGenerator-BQ3645OS.mjs"));
|
|
392
392
|
|
|
393
393
|
// packages/plugins/plugin-debug/src/translations.ts
|
|
394
394
|
var translations_default = [
|
|
@@ -566,6 +566,14 @@ var DebugPlugin = definePlugin((context) => {
|
|
|
566
566
|
filter: (node) => !!settings.debug && isSpace(node.data),
|
|
567
567
|
connector: ({ node }) => {
|
|
568
568
|
const space = node.data;
|
|
569
|
+
const state = toSignal((onChange) => space.state.subscribe(() => onChange()).unsubscribe, () => space.state.get());
|
|
570
|
+
if (state !== SpaceState.SPACE_READY) {
|
|
571
|
+
return;
|
|
572
|
+
}
|
|
573
|
+
const collection = space.properties[CollectionType.typename];
|
|
574
|
+
if (!collection) {
|
|
575
|
+
return;
|
|
576
|
+
}
|
|
569
577
|
return [
|
|
570
578
|
{
|
|
571
579
|
id: `${space.id}-debug`,
|