@dxos/echo-generator 0.8.4-main.5ea62a8 → 0.8.4-main.66e292d
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/index.mjs +41 -50
- package/dist/lib/browser/index.mjs.map +3 -3
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/node-esm/index.mjs +41 -50
- package/dist/lib/node-esm/index.mjs.map +3 -3
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/types/src/data.d.ts +1 -1
- package/dist/types/src/data.d.ts.map +1 -1
- package/dist/types/src/generator.d.ts +2 -2
- package/dist/types/src/generator.d.ts.map +1 -1
- package/dist/types/src/types.d.ts +2 -2
- package/dist/types/src/types.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +13 -14
- package/src/data.ts +12 -10
- package/src/generator.test.ts +12 -9
- package/src/generator.ts +5 -4
- package/src/types.ts +2 -2
|
@@ -2,33 +2,31 @@ import "@dxos/node-std/globals";
|
|
|
2
2
|
|
|
3
3
|
// src/data.ts
|
|
4
4
|
import { next as A } from "@automerge/automerge";
|
|
5
|
-
import
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
5
|
+
import * as Schema from "effect/Schema";
|
|
6
|
+
import { Ref, Type } from "@dxos/echo";
|
|
7
|
+
import { EchoObjectSchema } from "@dxos/echo/internal";
|
|
8
|
+
import { createDocAccessor } from "@dxos/echo-db";
|
|
8
9
|
import { faker as faker2 } from "@dxos/random";
|
|
9
10
|
|
|
10
11
|
// src/generator.ts
|
|
11
12
|
import { Filter } from "@dxos/client/echo";
|
|
12
|
-
import {
|
|
13
|
+
import { Obj } from "@dxos/echo";
|
|
14
|
+
import { EchoSchema, getTypeAnnotation } from "@dxos/echo/internal";
|
|
13
15
|
import { invariant } from "@dxos/invariant";
|
|
14
16
|
import { isLiveObject, live } from "@dxos/live-object";
|
|
15
17
|
import { faker } from "@dxos/random";
|
|
16
18
|
import { entries, range } from "@dxos/util";
|
|
17
|
-
function _define_property(obj, key, value) {
|
|
18
|
-
if (key in obj) {
|
|
19
|
-
Object.defineProperty(obj, key, {
|
|
20
|
-
value,
|
|
21
|
-
enumerable: true,
|
|
22
|
-
configurable: true,
|
|
23
|
-
writable: true
|
|
24
|
-
});
|
|
25
|
-
} else {
|
|
26
|
-
obj[key] = value;
|
|
27
|
-
}
|
|
28
|
-
return obj;
|
|
29
|
-
}
|
|
30
19
|
var __dxlog_file = "/__w/dxos/dxos/packages/core/echo/echo-generator/src/generator.ts";
|
|
31
20
|
var TestObjectGenerator = class {
|
|
21
|
+
_schemas;
|
|
22
|
+
_generators;
|
|
23
|
+
_provider;
|
|
24
|
+
// prettier-ignore
|
|
25
|
+
constructor(_schemas, _generators, _provider) {
|
|
26
|
+
this._schemas = _schemas;
|
|
27
|
+
this._generators = _generators;
|
|
28
|
+
this._provider = _provider;
|
|
29
|
+
}
|
|
32
30
|
get schemas() {
|
|
33
31
|
return Object.values(this._schemas);
|
|
34
32
|
}
|
|
@@ -45,7 +43,7 @@ var TestObjectGenerator = class {
|
|
|
45
43
|
return data;
|
|
46
44
|
}
|
|
47
45
|
const schema = this.getSchema(type);
|
|
48
|
-
return schema ?
|
|
46
|
+
return schema ? Obj.make(schema, data) : live(data);
|
|
49
47
|
}
|
|
50
48
|
// TODO(burdon): Based on dependencies (e.g., organization before contact).
|
|
51
49
|
async createObjects(map) {
|
|
@@ -66,17 +64,17 @@ var TestObjectGenerator = class {
|
|
|
66
64
|
}).flatMap((t) => t);
|
|
67
65
|
return Promise.all(tasks);
|
|
68
66
|
}
|
|
69
|
-
// prettier-ignore
|
|
70
|
-
constructor(_schemas, _generators, _provider) {
|
|
71
|
-
_define_property(this, "_schemas", void 0);
|
|
72
|
-
_define_property(this, "_generators", void 0);
|
|
73
|
-
_define_property(this, "_provider", void 0);
|
|
74
|
-
this._schemas = _schemas;
|
|
75
|
-
this._generators = _generators;
|
|
76
|
-
this._provider = _provider;
|
|
77
|
-
}
|
|
78
67
|
};
|
|
79
68
|
var SpaceObjectGenerator = class extends TestObjectGenerator {
|
|
69
|
+
_space;
|
|
70
|
+
_mutations;
|
|
71
|
+
constructor(_space, schemaMap, generators, _mutations) {
|
|
72
|
+
super(schemaMap, generators, async (type) => {
|
|
73
|
+
const schema = this.getSchema(type);
|
|
74
|
+
const { objects } = await this._space.db.query(schema ? Filter.type(schema) : Filter.nothing()).run();
|
|
75
|
+
return objects;
|
|
76
|
+
}), this._space = _space, this._mutations = _mutations;
|
|
77
|
+
}
|
|
80
78
|
async addSchemas() {
|
|
81
79
|
const result = [];
|
|
82
80
|
for (const [typename, schema] of Object.entries(this._schemas)) {
|
|
@@ -115,17 +113,17 @@ var SpaceObjectGenerator = class extends TestObjectGenerator {
|
|
|
115
113
|
async mutateObject(object, params) {
|
|
116
114
|
invariant(this._mutations, "Mutations not defined.", {
|
|
117
115
|
F: __dxlog_file,
|
|
118
|
-
L:
|
|
116
|
+
L: 131,
|
|
119
117
|
S: this,
|
|
120
118
|
A: [
|
|
121
119
|
"this._mutations",
|
|
122
120
|
"'Mutations not defined.'"
|
|
123
121
|
]
|
|
124
122
|
});
|
|
125
|
-
const type = getTypeAnnotation(getSchema(object)).typename;
|
|
123
|
+
const type = getTypeAnnotation(Obj.getSchema(object)).typename;
|
|
126
124
|
invariant(type && this._mutations?.[type], "Invalid object type.", {
|
|
127
125
|
F: __dxlog_file,
|
|
128
|
-
L:
|
|
126
|
+
L: 133,
|
|
129
127
|
S: this,
|
|
130
128
|
A: [
|
|
131
129
|
"type && this._mutations?.[type]",
|
|
@@ -139,13 +137,6 @@ var SpaceObjectGenerator = class extends TestObjectGenerator {
|
|
|
139
137
|
await this.mutateObject(object, params);
|
|
140
138
|
}
|
|
141
139
|
}
|
|
142
|
-
constructor(_space, schemaMap, generators, _mutations) {
|
|
143
|
-
super(schemaMap, generators, async (type) => {
|
|
144
|
-
const schema = this.getSchema(type);
|
|
145
|
-
const { objects } = await this._space.db.query(schema ? Filter.type(schema) : Filter.nothing()).run();
|
|
146
|
-
return objects;
|
|
147
|
-
}), _define_property(this, "_space", void 0), _define_property(this, "_mutations", void 0), this._space = _space, this._mutations = _mutations;
|
|
148
|
-
}
|
|
149
140
|
};
|
|
150
141
|
|
|
151
142
|
// src/util.ts
|
|
@@ -172,20 +163,20 @@ var Priority = [
|
|
|
172
163
|
4,
|
|
173
164
|
5
|
|
174
165
|
];
|
|
175
|
-
var TestSchemaType = /* @__PURE__ */ function(TestSchemaType2) {
|
|
166
|
+
var TestSchemaType = /* @__PURE__ */ (function(TestSchemaType2) {
|
|
176
167
|
TestSchemaType2["document"] = "example.com/type/Document";
|
|
177
168
|
TestSchemaType2["organization"] = "example.com/type/Organization";
|
|
178
|
-
TestSchemaType2["contact"] = "example.com/type/
|
|
169
|
+
TestSchemaType2["contact"] = "example.com/type/Person";
|
|
179
170
|
TestSchemaType2["project"] = "example.com/type/Project";
|
|
180
171
|
return TestSchemaType2;
|
|
181
|
-
}({});
|
|
172
|
+
})({});
|
|
182
173
|
var testSchemas = () => {
|
|
183
174
|
const document = Schema.Struct({
|
|
184
175
|
title: Schema.String.annotations({
|
|
185
176
|
description: "title of the document"
|
|
186
177
|
}),
|
|
187
178
|
content: Schema.String
|
|
188
|
-
}).pipe(
|
|
179
|
+
}).pipe(EchoObjectSchema({
|
|
189
180
|
typename: "example.com/type/Document",
|
|
190
181
|
version: "0.1.0"
|
|
191
182
|
}));
|
|
@@ -199,7 +190,7 @@ var testSchemas = () => {
|
|
|
199
190
|
description: Schema.String.annotations({
|
|
200
191
|
description: "short summary of the company"
|
|
201
192
|
})
|
|
202
|
-
}).pipe(
|
|
193
|
+
}).pipe(EchoObjectSchema({
|
|
203
194
|
typename: "example.com/type/Organization",
|
|
204
195
|
version: "0.1.0"
|
|
205
196
|
}));
|
|
@@ -208,11 +199,11 @@ var testSchemas = () => {
|
|
|
208
199
|
description: "name of the person"
|
|
209
200
|
}),
|
|
210
201
|
email: Schema.optional(Schema.String),
|
|
211
|
-
org: Schema.optional(Ref(organization)),
|
|
202
|
+
org: Schema.optional(Type.Ref(organization)),
|
|
212
203
|
lat: Schema.optional(Schema.Number),
|
|
213
204
|
lng: Schema.optional(Schema.Number)
|
|
214
|
-
}).pipe(
|
|
215
|
-
typename: "example.com/type/
|
|
205
|
+
}).pipe(EchoObjectSchema({
|
|
206
|
+
typename: "example.com/type/Person",
|
|
216
207
|
version: "0.1.0"
|
|
217
208
|
}));
|
|
218
209
|
const project = Schema.Struct({
|
|
@@ -225,15 +216,15 @@ var testSchemas = () => {
|
|
|
225
216
|
status: Schema.String,
|
|
226
217
|
priority: Schema.Number,
|
|
227
218
|
active: Schema.Boolean,
|
|
228
|
-
org: Schema.optional(Ref(organization))
|
|
229
|
-
}).pipe(
|
|
219
|
+
org: Schema.optional(Type.Ref(organization))
|
|
220
|
+
}).pipe(EchoObjectSchema({
|
|
230
221
|
typename: "example.com/type/Project",
|
|
231
222
|
version: "0.1.0"
|
|
232
223
|
}));
|
|
233
224
|
return {
|
|
234
225
|
["example.com/type/Document"]: document,
|
|
235
226
|
["example.com/type/Organization"]: organization,
|
|
236
|
-
["example.com/type/
|
|
227
|
+
["example.com/type/Person"]: contact,
|
|
237
228
|
["example.com/type/Project"]: project
|
|
238
229
|
};
|
|
239
230
|
};
|
|
@@ -255,7 +246,7 @@ var testObjectGenerators = {
|
|
|
255
246
|
}) ? faker2.internet.url() : void 0,
|
|
256
247
|
description: faker2.lorem.sentences()
|
|
257
248
|
}),
|
|
258
|
-
["example.com/type/
|
|
249
|
+
["example.com/type/Person"]: async (provider) => {
|
|
259
250
|
const organizations = await provider?.("example.com/type/Organization");
|
|
260
251
|
const location = faker2.datatype.boolean() ? faker2.geo.airport() : {};
|
|
261
252
|
return {
|
|
@@ -294,7 +285,7 @@ var testObjectMutators = {
|
|
|
294
285
|
["example.com/type/Organization"]: async () => {
|
|
295
286
|
throw new Error("Method not implemented.");
|
|
296
287
|
},
|
|
297
|
-
["example.com/type/
|
|
288
|
+
["example.com/type/Person"]: async () => {
|
|
298
289
|
throw new Error("Method not implemented.");
|
|
299
290
|
},
|
|
300
291
|
["example.com/type/Project"]: async () => {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/data.ts", "../../../src/generator.ts", "../../../src/util.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { next as A } from '@automerge/automerge';\nimport { Schema } from 'effect';\n\nimport { type Space, createDocAccessor } from '@dxos/client/echo';\nimport { EchoObject, Ref } from '@dxos/echo-schema';\nimport { faker } from '@dxos/random';\n\nimport { SpaceObjectGenerator, TestObjectGenerator } from './generator';\nimport { type TestGeneratorMap, type TestMutationsMap, type TestSchemaMap } from './types';\nimport { randomText } from './util';\n\n// TODO(burdon): Reconcile with @dxos/plugin-debug, @dxos/aurora/testing.\n// TODO(burdon): Bug when adding stale objects to space (e.g., static objects already added in previous story invocation).\n\n// TODO(burdon): Handle restricted values.\nexport const Status = ['pending', 'active', 'done'];\nexport const Priority = [1, 2, 3, 4, 5];\n\n/**\n * @deprecated\n */\nexport enum TestSchemaType {\n document = 'example.com/type/Document',\n organization = 'example.com/type/Organization',\n contact = 'example.com/type/Contact',\n project = 'example.com/type/Project',\n}\n\n/**\n * @deprecated\n */\nconst testSchemas = (): TestSchemaMap<TestSchemaType> => {\n const document = Schema.Struct({\n title: Schema.String.annotations({ description: 'title of the document' }),\n content: Schema.String,\n }).pipe(EchoObject({ typename: TestSchemaType.document, version: '0.1.0' }));\n\n const organization = Schema.Struct({\n name: Schema.String.annotations({ description: 'name of the company or organization' }),\n website: Schema.optional(Schema.String.annotations({ description: 'public website URL' })),\n description: Schema.String.annotations({ description: 'short summary of the company' }),\n }).pipe(EchoObject({ typename: TestSchemaType.organization, version: '0.1.0' }));\n\n const contact = Schema.Struct({\n name: Schema.String.annotations({ description: 'name of the person' }),\n email: Schema.optional(Schema.String),\n org: Schema.optional(Ref(organization)),\n lat: Schema.optional(Schema.Number),\n lng: Schema.optional(Schema.Number),\n }).pipe(EchoObject({ typename: TestSchemaType.contact, version: '0.1.0' }));\n\n const project = Schema.Struct({\n name: Schema.String.annotations({ description: 'name of the project' }),\n description: Schema.String,\n website: Schema.String,\n repo: Schema.String,\n status: Schema.String,\n priority: Schema.Number,\n active: Schema.Boolean,\n org: Schema.optional(Ref(organization)),\n }).pipe(EchoObject({ typename: TestSchemaType.project, version: '0.1.0' }));\n\n return {\n [TestSchemaType.document]: document,\n [TestSchemaType.organization]: organization,\n [TestSchemaType.contact]: contact,\n [TestSchemaType.project]: project,\n };\n};\n\nconst testObjectGenerators: TestGeneratorMap<TestSchemaType> = {\n [TestSchemaType.document]: async () => ({\n title: faker.lorem.sentence(3),\n content: faker.lorem.sentences({ min: 1, max: faker.number.int({ min: 1, max: 3 }) }),\n }),\n\n [TestSchemaType.organization]: async () => ({\n name: faker.company.name(),\n website: faker.datatype.boolean({ probability: 0.3 }) ? faker.internet.url() : undefined,\n description: faker.lorem.sentences(),\n }),\n\n [TestSchemaType.contact]: async (provider) => {\n const organizations = await provider?.(TestSchemaType.organization);\n const location = faker.datatype.boolean() ? faker.geo.airport() : {};\n\n return {\n name: faker.person.fullName(),\n email: faker.datatype.boolean({ probability: 0.5 }) ? faker.internet.email() : undefined,\n org:\n organizations?.length && faker.datatype.boolean({ probability: 0.8 })\n ? Ref.make(faker.helpers.arrayElement(organizations))\n : undefined,\n ...location,\n };\n },\n\n [TestSchemaType.project]: async () => ({\n name: faker.commerce.productName(),\n repo: faker.internet.url(),\n status: faker.helpers.arrayElement(Status),\n description: faker.lorem.sentences(),\n website: faker.internet.url(),\n priority: faker.helpers.arrayElement(Priority),\n active: faker.datatype.boolean(),\n }),\n};\n\nconst testObjectMutators: TestMutationsMap<TestSchemaType> = {\n [TestSchemaType.document]: async (object, params) => {\n const accessor = createDocAccessor(object, ['content']);\n for (let i = 0; i < params.count; i++) {\n const length = object.content?.content?.length ?? 0;\n accessor.handle.change((doc) => {\n A.splice(\n doc,\n accessor.path.slice(),\n 0,\n params.maxContentLength >= length ? 0 : params.mutationSize,\n randomText(params.mutationSize),\n );\n });\n }\n },\n [TestSchemaType.organization]: async () => {\n throw new Error('Method not implemented.');\n },\n [TestSchemaType.contact]: async () => {\n throw new Error('Method not implemented.');\n },\n [TestSchemaType.project]: async () => {\n throw new Error('Method not implemented.');\n },\n};\n\n/**\n * @deprecated Use generators in schema package.\n */\nexport const createTestObjectGenerator = () => new TestObjectGenerator(testSchemas(), testObjectGenerators);\n\n/**\n * @deprecated Use generators in schema package.\n */\nexport const createSpaceObjectGenerator = (space: Space) =>\n new SpaceObjectGenerator(space, testSchemas(), testObjectGenerators, testObjectMutators);\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { type Schema } from 'effect';\n\nimport { Filter, type Space } from '@dxos/client/echo';\nimport { type AnyLiveObject } from '@dxos/echo-db';\nimport { EchoSchema, getSchema, getTypeAnnotation } from '@dxos/echo-schema';\nimport { invariant } from '@dxos/invariant';\nimport { type Live, isLiveObject, live } from '@dxos/live-object';\nimport { faker } from '@dxos/random';\nimport { entries, range } from '@dxos/util';\n\nimport { type TestSchemaType } from './data';\nimport {\n type MutationsProviderParams,\n type TestGeneratorMap,\n type TestMutationsMap,\n type TestObjectProvider,\n type TestSchemaMap,\n} from './types';\n\n/**\n * Typed object generator.\n * @deprecated\n */\nexport class TestObjectGenerator<T extends string = TestSchemaType> {\n // prettier-ignore\n constructor(\n protected readonly _schemas: TestSchemaMap<T>,\n private readonly _generators: TestGeneratorMap<T>,\n private readonly _provider?: TestObjectProvider<T>,\n ) {}\n\n get schemas(): (EchoSchema | Schema.Schema.AnyNoContext)[] {\n return Object.values(this._schemas);\n }\n\n getSchema(type: T): EchoSchema | Schema.Schema.AnyNoContext | undefined {\n return this.schemas.find((schema) => getTypeAnnotation(schema)!.typename === type);\n }\n\n protected setSchema(type: T, schema: EchoSchema | Schema.Schema.AnyNoContext): void {\n this._schemas[type] = schema;\n }\n\n async createObject({ types }: { types?: T[] } = {}): Promise<Live<any>> {\n const type = faker.helpers.arrayElement(types ?? (Object.keys(this._schemas) as T[]));\n const data = await this._generators[type](this._provider);\n if (isLiveObject(data)) {\n return data;\n }\n\n const schema = this.getSchema(type);\n return schema ? live(schema, data) : live(data);\n }\n\n // TODO(burdon): Based on dependencies (e.g., organization before contact).\n async createObjects(map: Partial<Record<T, number>>) {\n const results: Live<any>[] = [];\n for (const [type, count] of entries(map)) {\n results.push(...(await Promise.all(range(count ?? 0, () => this.createObject({ types: [type as T] })))));\n }\n\n const tasks = Object.entries<number>(map as any)\n .map(([type, count]) => {\n return range(count, () => this.createObject({ types: [type as T] }));\n })\n .flatMap((t) => t);\n\n return Promise.all(tasks);\n }\n}\n\n/**\n * Typed object generator for a space.\n */\nexport class SpaceObjectGenerator<T extends string> extends TestObjectGenerator<T> {\n constructor(\n private readonly _space: Space,\n schemaMap: TestSchemaMap<T>,\n generators: TestGeneratorMap<T>,\n private readonly _mutations?: TestMutationsMap<T>,\n ) {\n super(schemaMap, generators, async (type: T) => {\n const schema = this.getSchema(type);\n const { objects } = await this._space.db.query(schema ? Filter.type(schema) : Filter.nothing()).run();\n return objects;\n });\n }\n\n async addSchemas() {\n const result: (EchoSchema | Schema.Schema.AnyNoContext)[] = [];\n for (const [typename, schema] of Object.entries(this._schemas)) {\n const echoSchema = await this._maybeRegisterSchema(typename, schema as EchoSchema | Schema.Schema.AnyNoContext);\n this.setSchema(typename as T, echoSchema);\n result.push(echoSchema);\n }\n\n return result;\n }\n\n override async createObject({ types }: { types?: T[] } = {}): Promise<AnyLiveObject<any>> {\n return this._space.db.add(await super.createObject({ types }));\n }\n\n private async _maybeRegisterSchema(\n typename: string,\n schema: EchoSchema | Schema.Schema.AnyNoContext,\n ): Promise<EchoSchema | Schema.Schema.AnyNoContext> {\n if (schema instanceof EchoSchema) {\n const existingSchema = this._space.db.schemaRegistry.getSchema(typename);\n if (existingSchema != null) {\n return existingSchema;\n }\n const [registeredSchema] = await this._space.db.schemaRegistry.register([schema]);\n return registeredSchema;\n } else {\n const existingSchema = this._space.db.graph.schemaRegistry.getSchema(typename);\n if (existingSchema != null) {\n return existingSchema;\n }\n this._space.db.graph.schemaRegistry.addSchema([schema]);\n return schema;\n }\n }\n\n async mutateObject(object: AnyLiveObject<any>, params: MutationsProviderParams): Promise<void> {\n invariant(this._mutations, 'Mutations not defined.');\n const type = getTypeAnnotation(getSchema(object)!)!.typename as T;\n invariant(type && this._mutations?.[type], 'Invalid object type.');\n\n await this._mutations;\n }\n\n async mutateObjects(objects: AnyLiveObject<any>[], params: MutationsProviderParams): Promise<void> {\n for (const object of objects) {\n await this.mutateObject(object, params);\n }\n }\n}\n", "//\n// Copyright 2023 DXOS.org\n//\n\nexport const randomText = (length: number) => {\n let result = '';\n const characters = 'abcdefghijklmnopqrstuvwxyz';\n const charactersLength = characters.length;\n for (let index = 0; index < length; index++) {\n result += characters.charAt(Math.floor(Math.random() * charactersLength));\n }\n\n return result;\n};\n"],
|
|
5
|
-
"mappings": ";;;AAIA,SAASA,QAAQC,SAAS;AAC1B,SAASC,
|
|
6
|
-
"names": ["next", "A", "Schema", "
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { next as A } from '@automerge/automerge';\nimport * as Schema from 'effect/Schema';\n\nimport { type Space } from '@dxos/client/echo';\nimport { Ref, Type } from '@dxos/echo';\nimport { EchoObjectSchema } from '@dxos/echo/internal';\nimport { createDocAccessor } from '@dxos/echo-db';\nimport { faker } from '@dxos/random';\n\nimport { SpaceObjectGenerator, TestObjectGenerator } from './generator';\nimport { type TestGeneratorMap, type TestMutationsMap, type TestSchemaMap } from './types';\nimport { randomText } from './util';\n\n// TODO(burdon): Reconcile with @dxos/plugin-debug, @dxos/aurora/testing.\n// TODO(burdon): Bug when adding stale objects to space (e.g., static objects already added in previous story invocation).\n\n// TODO(burdon): Handle restricted values.\nexport const Status = ['pending', 'active', 'done'];\nexport const Priority = [1, 2, 3, 4, 5];\n\n/**\n * @deprecated\n */\nexport enum TestSchemaType {\n document = 'example.com/type/Document',\n organization = 'example.com/type/Organization',\n contact = 'example.com/type/Person',\n project = 'example.com/type/Project',\n}\n\n/**\n * @deprecated\n */\nconst testSchemas = (): TestSchemaMap<TestSchemaType> => {\n const document = Schema.Struct({\n title: Schema.String.annotations({ description: 'title of the document' }),\n content: Schema.String,\n }).pipe(EchoObjectSchema({ typename: TestSchemaType.document, version: '0.1.0' }));\n\n const organization = Schema.Struct({\n name: Schema.String.annotations({ description: 'name of the company or organization' }),\n website: Schema.optional(Schema.String.annotations({ description: 'public website URL' })),\n description: Schema.String.annotations({ description: 'short summary of the company' }),\n }).pipe(EchoObjectSchema({ typename: TestSchemaType.organization, version: '0.1.0' }));\n\n const contact = Schema.Struct({\n name: Schema.String.annotations({ description: 'name of the person' }),\n email: Schema.optional(Schema.String),\n org: Schema.optional(Type.Ref(organization)),\n lat: Schema.optional(Schema.Number),\n lng: Schema.optional(Schema.Number),\n }).pipe(EchoObjectSchema({ typename: TestSchemaType.contact, version: '0.1.0' }));\n\n const project = Schema.Struct({\n name: Schema.String.annotations({ description: 'name of the project' }),\n description: Schema.String,\n website: Schema.String,\n repo: Schema.String,\n status: Schema.String,\n priority: Schema.Number,\n active: Schema.Boolean,\n org: Schema.optional(Type.Ref(organization)),\n }).pipe(EchoObjectSchema({ typename: TestSchemaType.project, version: '0.1.0' }));\n\n return {\n [TestSchemaType.document]: document,\n [TestSchemaType.organization]: organization,\n [TestSchemaType.contact]: contact,\n [TestSchemaType.project]: project,\n };\n};\n\nconst testObjectGenerators: TestGeneratorMap<TestSchemaType> = {\n [TestSchemaType.document]: async () => ({\n title: faker.lorem.sentence(3),\n content: faker.lorem.sentences({ min: 1, max: faker.number.int({ min: 1, max: 3 }) }),\n }),\n\n [TestSchemaType.organization]: async () => ({\n name: faker.company.name(),\n website: faker.datatype.boolean({ probability: 0.3 }) ? faker.internet.url() : undefined,\n description: faker.lorem.sentences(),\n }),\n\n [TestSchemaType.contact]: async (provider) => {\n const organizations = await provider?.(TestSchemaType.organization);\n const location = faker.datatype.boolean() ? faker.geo.airport() : {};\n\n return {\n name: faker.person.fullName(),\n email: faker.datatype.boolean({ probability: 0.5 }) ? faker.internet.email() : undefined,\n org:\n organizations?.length && faker.datatype.boolean({ probability: 0.8 })\n ? Ref.make(faker.helpers.arrayElement(organizations))\n : undefined,\n ...location,\n };\n },\n\n [TestSchemaType.project]: async () => ({\n name: faker.commerce.productName(),\n repo: faker.internet.url(),\n status: faker.helpers.arrayElement(Status),\n description: faker.lorem.sentences(),\n website: faker.internet.url(),\n priority: faker.helpers.arrayElement(Priority),\n active: faker.datatype.boolean(),\n }),\n};\n\nconst testObjectMutators: TestMutationsMap<TestSchemaType> = {\n [TestSchemaType.document]: async (object, params) => {\n const accessor = createDocAccessor(object, ['content']);\n for (let i = 0; i < params.count; i++) {\n const length = object.content?.content?.length ?? 0;\n accessor.handle.change((doc) => {\n A.splice(\n doc,\n accessor.path.slice(),\n 0,\n params.maxContentLength >= length ? 0 : params.mutationSize,\n randomText(params.mutationSize),\n );\n });\n }\n },\n [TestSchemaType.organization]: async () => {\n throw new Error('Method not implemented.');\n },\n [TestSchemaType.contact]: async () => {\n throw new Error('Method not implemented.');\n },\n [TestSchemaType.project]: async () => {\n throw new Error('Method not implemented.');\n },\n};\n\n/**\n * @deprecated Use generators in schema package.\n */\nexport const createTestObjectGenerator = () => new TestObjectGenerator(testSchemas(), testObjectGenerators);\n\n/**\n * @deprecated Use generators in schema package.\n */\nexport const createSpaceObjectGenerator = (space: Space) =>\n new SpaceObjectGenerator(space, testSchemas(), testObjectGenerators, testObjectMutators);\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport type * as Schema from 'effect/Schema';\n\nimport { Filter, type Space } from '@dxos/client/echo';\nimport { Obj } from '@dxos/echo';\nimport { EchoSchema, getTypeAnnotation } from '@dxos/echo/internal';\nimport { type AnyLiveObject } from '@dxos/echo-db';\nimport { invariant } from '@dxos/invariant';\nimport { type Live, isLiveObject, live } from '@dxos/live-object';\nimport { faker } from '@dxos/random';\nimport { entries, range } from '@dxos/util';\n\nimport { type TestSchemaType } from './data';\nimport {\n type MutationsProviderParams,\n type TestGeneratorMap,\n type TestMutationsMap,\n type TestObjectProvider,\n type TestSchemaMap,\n} from './types';\n\n/**\n * Typed object generator.\n * @deprecated\n */\nexport class TestObjectGenerator<T extends string = TestSchemaType> {\n // prettier-ignore\n constructor(\n protected readonly _schemas: TestSchemaMap<T>,\n private readonly _generators: TestGeneratorMap<T>,\n private readonly _provider?: TestObjectProvider<T>,\n ) {}\n\n get schemas(): (EchoSchema | Schema.Schema.AnyNoContext)[] {\n return Object.values(this._schemas);\n }\n\n getSchema(type: T): EchoSchema | Schema.Schema.AnyNoContext | undefined {\n return this.schemas.find((schema) => getTypeAnnotation(schema)!.typename === type);\n }\n\n protected setSchema(type: T, schema: EchoSchema | Schema.Schema.AnyNoContext): void {\n this._schemas[type] = schema;\n }\n\n async createObject({ types }: { types?: T[] } = {}): Promise<Live<any>> {\n const type = faker.helpers.arrayElement(types ?? (Object.keys(this._schemas) as T[]));\n const data = await this._generators[type](this._provider);\n if (isLiveObject(data)) {\n return data;\n }\n\n const schema = this.getSchema(type);\n return schema ? Obj.make(schema, data) : live(data);\n }\n\n // TODO(burdon): Based on dependencies (e.g., organization before contact).\n async createObjects(map: Partial<Record<T, number>>) {\n const results: Live<any>[] = [];\n for (const [type, count] of entries(map)) {\n results.push(...(await Promise.all(range(count ?? 0, () => this.createObject({ types: [type as T] })))));\n }\n\n const tasks = Object.entries<number>(map as any)\n .map(([type, count]) => {\n return range(count, () => this.createObject({ types: [type as T] }));\n })\n .flatMap((t) => t);\n\n return Promise.all(tasks);\n }\n}\n\n/**\n * Typed object generator for a space.\n */\nexport class SpaceObjectGenerator<T extends string> extends TestObjectGenerator<T> {\n constructor(\n private readonly _space: Space,\n schemaMap: TestSchemaMap<T>,\n generators: TestGeneratorMap<T>,\n private readonly _mutations?: TestMutationsMap<T>,\n ) {\n super(schemaMap, generators, async (type: T) => {\n const schema = this.getSchema(type);\n const { objects } = await this._space.db.query(schema ? Filter.type(schema) : Filter.nothing()).run();\n return objects;\n });\n }\n\n async addSchemas() {\n const result: (EchoSchema | Schema.Schema.AnyNoContext)[] = [];\n for (const [typename, schema] of Object.entries(this._schemas)) {\n const echoSchema = await this._maybeRegisterSchema(typename, schema as EchoSchema | Schema.Schema.AnyNoContext);\n this.setSchema(typename as T, echoSchema);\n result.push(echoSchema);\n }\n\n return result;\n }\n\n override async createObject({ types }: { types?: T[] } = {}): Promise<AnyLiveObject<any>> {\n return this._space.db.add(await super.createObject({ types }));\n }\n\n private async _maybeRegisterSchema(\n typename: string,\n schema: EchoSchema | Schema.Schema.AnyNoContext,\n ): Promise<EchoSchema | Schema.Schema.AnyNoContext> {\n if (schema instanceof EchoSchema) {\n const existingSchema = this._space.db.schemaRegistry.getSchema(typename);\n if (existingSchema != null) {\n return existingSchema;\n }\n const [registeredSchema] = await this._space.db.schemaRegistry.register([schema]);\n return registeredSchema;\n } else {\n const existingSchema = this._space.db.graph.schemaRegistry.getSchema(typename);\n if (existingSchema != null) {\n return existingSchema;\n }\n this._space.db.graph.schemaRegistry.addSchema([schema]);\n return schema;\n }\n }\n\n async mutateObject(object: AnyLiveObject<any>, params: MutationsProviderParams): Promise<void> {\n invariant(this._mutations, 'Mutations not defined.');\n const type = getTypeAnnotation(Obj.getSchema(object)!)!.typename as T;\n invariant(type && this._mutations?.[type], 'Invalid object type.');\n\n await this._mutations;\n }\n\n async mutateObjects(objects: AnyLiveObject<any>[], params: MutationsProviderParams): Promise<void> {\n for (const object of objects) {\n await this.mutateObject(object, params);\n }\n }\n}\n", "//\n// Copyright 2023 DXOS.org\n//\n\nexport const randomText = (length: number) => {\n let result = '';\n const characters = 'abcdefghijklmnopqrstuvwxyz';\n const charactersLength = characters.length;\n for (let index = 0; index < length; index++) {\n result += characters.charAt(Math.floor(Math.random() * charactersLength));\n }\n\n return result;\n};\n"],
|
|
5
|
+
"mappings": ";;;AAIA,SAASA,QAAQC,SAAS;AAC1B,YAAYC,YAAY;AAGxB,SAASC,KAAKC,YAAY;AAC1B,SAASC,wBAAwB;AACjC,SAASC,yBAAyB;AAClC,SAASC,SAAAA,cAAa;;;ACLtB,SAASC,cAA0B;AACnC,SAASC,WAAW;AACpB,SAASC,YAAYC,yBAAyB;AAE9C,SAASC,iBAAiB;AAC1B,SAAoBC,cAAcC,YAAY;AAC9C,SAASC,aAAa;AACtB,SAASC,SAASC,aAAa;;AAexB,IAAMC,sBAAN,MAAMA;;;;;EAEX,YACqBC,UACFC,aACAC,WACjB;SAHmBF,WAAAA;SACFC,cAAAA;SACAC,YAAAA;EAChB;EAEH,IAAIC,UAAuD;AACzD,WAAOC,OAAOC,OAAO,KAAKL,QAAQ;EACpC;EAEAM,UAAUC,MAA8D;AACtE,WAAO,KAAKJ,QAAQK,KAAK,CAACC,WAAWjB,kBAAkBiB,MAAAA,EAASC,aAAaH,IAAAA;EAC/E;EAEUI,UAAUJ,MAASE,QAAuD;AAClF,SAAKT,SAASO,IAAAA,IAAQE;EACxB;EAEA,MAAMG,aAAa,EAAEC,MAAK,IAAsB,CAAC,GAAuB;AACtE,UAAMN,OAAOX,MAAMkB,QAAQC,aAAaF,SAAUT,OAAOY,KAAK,KAAKhB,QAAQ,CAAA;AAC3E,UAAMiB,OAAO,MAAM,KAAKhB,YAAYM,IAAAA,EAAM,KAAKL,SAAS;AACxD,QAAIR,aAAauB,IAAAA,GAAO;AACtB,aAAOA;IACT;AAEA,UAAMR,SAAS,KAAKH,UAAUC,IAAAA;AAC9B,WAAOE,SAASnB,IAAI4B,KAAKT,QAAQQ,IAAAA,IAAQtB,KAAKsB,IAAAA;EAChD;;EAGA,MAAME,cAAcC,KAAiC;AACnD,UAAMC,UAAuB,CAAA;AAC7B,eAAW,CAACd,MAAMe,KAAAA,KAAUzB,QAAQuB,GAAAA,GAAM;AACxCC,cAAQE,KAAI,GAAK,MAAMC,QAAQC,IAAI3B,MAAMwB,SAAS,GAAG,MAAM,KAAKV,aAAa;QAAEC,OAAO;UAACN;;MAAW,CAAA,CAAA,CAAA,CAAA;IACpG;AAEA,UAAMmB,QAAQtB,OAAOP,QAAgBuB,GAAAA,EAClCA,IAAI,CAAC,CAACb,MAAMe,KAAAA,MAAM;AACjB,aAAOxB,MAAMwB,OAAO,MAAM,KAAKV,aAAa;QAAEC,OAAO;UAACN;;MAAW,CAAA,CAAA;IACnE,CAAA,EACCoB,QAAQ,CAACC,MAAMA,CAAAA;AAElB,WAAOJ,QAAQC,IAAIC,KAAAA;EACrB;AACF;AAKO,IAAMG,uBAAN,cAAqD9B,oBAAAA;;;EAC1D,YACmB+B,QACjBC,WACAC,YACiBC,YACjB;AACA,UAAMF,WAAWC,YAAY,OAAOzB,SAAAA;AAClC,YAAME,SAAS,KAAKH,UAAUC,IAAAA;AAC9B,YAAM,EAAE2B,QAAO,IAAK,MAAM,KAAKJ,OAAOK,GAAGC,MAAM3B,SAASpB,OAAOkB,KAAKE,MAAAA,IAAUpB,OAAOgD,QAAO,CAAA,EAAIC,IAAG;AACnG,aAAOJ;IACT,CAAA,GAAA,KATiBJ,SAAAA,QAAAA,KAGAG,aAAAA;EAOnB;EAEA,MAAMM,aAAa;AACjB,UAAMC,SAAsD,CAAA;AAC5D,eAAW,CAAC9B,UAAUD,MAAAA,KAAWL,OAAOP,QAAQ,KAAKG,QAAQ,GAAG;AAC9D,YAAMyC,aAAa,MAAM,KAAKC,qBAAqBhC,UAAUD,MAAAA;AAC7D,WAAKE,UAAUD,UAAe+B,UAAAA;AAC9BD,aAAOjB,KAAKkB,UAAAA;IACd;AAEA,WAAOD;EACT;EAEA,MAAe5B,aAAa,EAAEC,MAAK,IAAsB,CAAC,GAAgC;AACxF,WAAO,KAAKiB,OAAOK,GAAGQ,IAAI,MAAM,MAAM/B,aAAa;MAAEC;IAAM,CAAA,CAAA;EAC7D;EAEA,MAAc6B,qBACZhC,UACAD,QACkD;AAClD,QAAIA,kBAAkBlB,YAAY;AAChC,YAAMqD,iBAAiB,KAAKd,OAAOK,GAAGU,eAAevC,UAAUI,QAAAA;AAC/D,UAAIkC,kBAAkB,MAAM;AAC1B,eAAOA;MACT;AACA,YAAM,CAACE,gBAAAA,IAAoB,MAAM,KAAKhB,OAAOK,GAAGU,eAAeE,SAAS;QAACtC;OAAO;AAChF,aAAOqC;IACT,OAAO;AACL,YAAMF,iBAAiB,KAAKd,OAAOK,GAAGa,MAAMH,eAAevC,UAAUI,QAAAA;AACrE,UAAIkC,kBAAkB,MAAM;AAC1B,eAAOA;MACT;AACA,WAAKd,OAAOK,GAAGa,MAAMH,eAAeI,UAAU;QAACxC;OAAO;AACtD,aAAOA;IACT;EACF;EAEA,MAAMyC,aAAaC,QAA4BC,QAAgD;AAC7F3D,cAAU,KAAKwC,YAAY,0BAAA;;;;;;;;;AAC3B,UAAM1B,OAAOf,kBAAkBF,IAAIgB,UAAU6C,MAAAA,CAAAA,EAAWzC;AACxDjB,cAAUc,QAAQ,KAAK0B,aAAa1B,IAAAA,GAAO,wBAAA;;;;;;;;;AAE3C,UAAM,KAAK0B,WAAY1B,IAAAA,EAAM4C,QAAQC,MAAAA;EACvC;EAEA,MAAMC,cAAcnB,SAA+BkB,QAAgD;AACjG,eAAWD,UAAUjB,SAAS;AAC5B,YAAM,KAAKgB,aAAaC,QAAQC,MAAAA;IAClC;EACF;AACF;;;AC1IO,IAAME,aAAa,CAACC,WAAAA;AACzB,MAAIC,SAAS;AACb,QAAMC,aAAa;AACnB,QAAMC,mBAAmBD,WAAWF;AACpC,WAASI,QAAQ,GAAGA,QAAQJ,QAAQI,SAAS;AAC3CH,cAAUC,WAAWG,OAAOC,KAAKC,MAAMD,KAAKE,OAAM,IAAKL,gBAAAA,CAAAA;EACzD;AAEA,SAAOF;AACT;;;AFQO,IAAMQ,SAAS;EAAC;EAAW;EAAU;;AACrC,IAAMC,WAAW;EAAC;EAAG;EAAG;EAAG;EAAG;;AAK9B,IAAKC,iBAAAA,0BAAAA,iBAAAA;;;;;SAAAA;;AAUZ,IAAMC,cAAc,MAAA;AAClB,QAAMC,WAAkBC,cAAO;IAC7BC,OAAcC,cAAOC,YAAY;MAAEC,aAAa;IAAwB,CAAA;IACxEC,SAAgBH;EAClB,CAAA,EAAGI,KAAKC,iBAAiB;IAAEC,UAAQ;IAA2BC,SAAS;EAAQ,CAAA,CAAA;AAE/E,QAAMC,eAAsBV,cAAO;IACjCW,MAAaT,cAAOC,YAAY;MAAEC,aAAa;IAAsC,CAAA;IACrFQ,SAAgBC,gBAAgBX,cAAOC,YAAY;MAAEC,aAAa;IAAqB,CAAA,CAAA;IACvFA,aAAoBF,cAAOC,YAAY;MAAEC,aAAa;IAA+B,CAAA;EACvF,CAAA,EAAGE,KAAKC,iBAAiB;IAAEC,UAAQ;IAA+BC,SAAS;EAAQ,CAAA,CAAA;AAEnF,QAAMK,UAAiBd,cAAO;IAC5BW,MAAaT,cAAOC,YAAY;MAAEC,aAAa;IAAqB,CAAA;IACpEW,OAAcF,gBAAgBX,aAAM;IACpCc,KAAYH,gBAASI,KAAKC,IAAIR,YAAAA,CAAAA;IAC9BS,KAAYN,gBAAgBO,aAAM;IAClCC,KAAYR,gBAAgBO,aAAM;EACpC,CAAA,EAAGd,KAAKC,iBAAiB;IAAEC,UAAQ;IAA0BC,SAAS;EAAQ,CAAA,CAAA;AAE9E,QAAMa,UAAiBtB,cAAO;IAC5BW,MAAaT,cAAOC,YAAY;MAAEC,aAAa;IAAsB,CAAA;IACrEA,aAAoBF;IACpBU,SAAgBV;IAChBqB,MAAarB;IACbsB,QAAetB;IACfuB,UAAiBL;IACjBM,QAAeC;IACfX,KAAYH,gBAASI,KAAKC,IAAIR,YAAAA,CAAAA;EAChC,CAAA,EAAGJ,KAAKC,iBAAiB;IAAEC,UAAQ;IAA0BC,SAAS;EAAQ,CAAA,CAAA;AAE9E,SAAO;IACL,CAAA,2BAAA,GAA2BV;IAC3B,CAAA,+BAAA,GAA+BW;IAC/B,CAAA,yBAAA,GAA0BI;IAC1B,CAAA,0BAAA,GAA0BQ;EAC5B;AACF;AAEA,IAAMM,uBAAyD;EAC7D,CAAA,2BAAA,GAA2B,aAAa;IACtC3B,OAAO4B,OAAMC,MAAMC,SAAS,CAAA;IAC5B1B,SAASwB,OAAMC,MAAME,UAAU;MAAEC,KAAK;MAAGC,KAAKL,OAAMM,OAAOC,IAAI;QAAEH,KAAK;QAAGC,KAAK;MAAE,CAAA;IAAG,CAAA;EACrF;EAEA,CAAA,+BAAA,GAA+B,aAAa;IAC1CvB,MAAMkB,OAAMQ,QAAQ1B,KAAI;IACxBC,SAASiB,OAAMS,SAASC,QAAQ;MAAEC,aAAa;IAAI,CAAA,IAAKX,OAAMY,SAASC,IAAG,IAAKC;IAC/EvC,aAAayB,OAAMC,MAAME,UAAS;EACpC;EAEA,CAAA,yBAAA,GAA0B,OAAOY,aAAAA;AAC/B,UAAMC,gBAAgB,MAAMD,WAAAA,+BAAAA;AAC5B,UAAME,WAAWjB,OAAMS,SAASC,QAAO,IAAKV,OAAMkB,IAAIC,QAAO,IAAK,CAAC;AAEnE,WAAO;MACLrC,MAAMkB,OAAMoB,OAAOC,SAAQ;MAC3BnC,OAAOc,OAAMS,SAASC,QAAQ;QAAEC,aAAa;MAAI,CAAA,IAAKX,OAAMY,SAAS1B,MAAK,IAAK4B;MAC/E3B,KACE6B,eAAeM,UAAUtB,OAAMS,SAASC,QAAQ;QAAEC,aAAa;MAAI,CAAA,IAC/DtB,IAAIkC,KAAKvB,OAAMwB,QAAQC,aAAaT,aAAAA,CAAAA,IACpCF;MACN,GAAGG;IACL;EACF;EAEA,CAAA,0BAAA,GAA0B,aAAa;IACrCnC,MAAMkB,OAAM0B,SAASC,YAAW;IAChCjC,MAAMM,OAAMY,SAASC,IAAG;IACxBlB,QAAQK,OAAMwB,QAAQC,aAAa3D,MAAAA;IACnCS,aAAayB,OAAMC,MAAME,UAAS;IAClCpB,SAASiB,OAAMY,SAASC,IAAG;IAC3BjB,UAAUI,OAAMwB,QAAQC,aAAa1D,QAAAA;IACrC8B,QAAQG,OAAMS,SAASC,QAAO;EAChC;AACF;AAEA,IAAMkB,qBAAuD;EAC3D,CAAA,2BAAA,GAA2B,OAAOC,QAAQC,WAAAA;AACxC,UAAMC,WAAWC,kBAAkBH,QAAQ;MAAC;KAAU;AACtD,aAASI,IAAI,GAAGA,IAAIH,OAAOI,OAAOD,KAAK;AACrC,YAAMX,SAASO,OAAOrD,SAASA,SAAS8C,UAAU;AAClDS,eAASI,OAAOC,OAAO,CAACC,QAAAA;AACtBC,UAAEC,OACAF,KACAN,SAASS,KAAKC,MAAK,GACnB,GACAX,OAAOY,oBAAoBpB,SAAS,IAAIQ,OAAOa,cAC/CC,WAAWd,OAAOa,YAAY,CAAA;MAElC,CAAA;IACF;EACF;EACA,CAAA,+BAAA,GAA+B,YAAA;AAC7B,UAAM,IAAIE,MAAM,yBAAA;EAClB;EACA,CAAA,yBAAA,GAA0B,YAAA;AACxB,UAAM,IAAIA,MAAM,yBAAA;EAClB;EACA,CAAA,0BAAA,GAA0B,YAAA;AACxB,UAAM,IAAIA,MAAM,yBAAA;EAClB;AACF;AAKO,IAAMC,4BAA4B,MAAM,IAAIC,oBAAoB9E,YAAAA,GAAe8B,oBAAAA;AAK/E,IAAMiD,6BAA6B,CAACC,UACzC,IAAIC,qBAAqBD,OAAOhF,YAAAA,GAAe8B,sBAAsB6B,kBAAAA;",
|
|
6
|
+
"names": ["next", "A", "Schema", "Ref", "Type", "EchoObjectSchema", "createDocAccessor", "faker", "Filter", "Obj", "EchoSchema", "getTypeAnnotation", "invariant", "isLiveObject", "live", "faker", "entries", "range", "TestObjectGenerator", "_schemas", "_generators", "_provider", "schemas", "Object", "values", "getSchema", "type", "find", "schema", "typename", "setSchema", "createObject", "types", "helpers", "arrayElement", "keys", "data", "make", "createObjects", "map", "results", "count", "push", "Promise", "all", "tasks", "flatMap", "t", "SpaceObjectGenerator", "_space", "schemaMap", "generators", "_mutations", "objects", "db", "query", "nothing", "run", "addSchemas", "result", "echoSchema", "_maybeRegisterSchema", "add", "existingSchema", "schemaRegistry", "registeredSchema", "register", "graph", "addSchema", "mutateObject", "object", "params", "mutateObjects", "randomText", "length", "result", "characters", "charactersLength", "index", "charAt", "Math", "floor", "random", "Status", "Priority", "TestSchemaType", "testSchemas", "document", "Struct", "title", "String", "annotations", "description", "content", "pipe", "EchoObjectSchema", "typename", "version", "organization", "name", "website", "optional", "contact", "email", "org", "Type", "Ref", "lat", "Number", "lng", "project", "repo", "status", "priority", "active", "Boolean", "testObjectGenerators", "faker", "lorem", "sentence", "sentences", "min", "max", "number", "int", "company", "datatype", "boolean", "probability", "internet", "url", "undefined", "provider", "organizations", "location", "geo", "airport", "person", "fullName", "length", "make", "helpers", "arrayElement", "commerce", "productName", "testObjectMutators", "object", "params", "accessor", "createDocAccessor", "i", "count", "handle", "change", "doc", "A", "splice", "path", "slice", "maxContentLength", "mutationSize", "randomText", "Error", "createTestObjectGenerator", "TestObjectGenerator", "createSpaceObjectGenerator", "space", "SpaceObjectGenerator"]
|
|
7
7
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"inputs":{"src/generator.ts":{"bytes":
|
|
1
|
+
{"inputs":{"src/generator.ts":{"bytes":16756,"imports":[{"path":"@dxos/client/echo","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/echo/internal","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/live-object","kind":"import-statement","external":true},{"path":"@dxos/random","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true}],"format":"esm"},"src/util.ts":{"bytes":1567,"imports":[],"format":"esm"},"src/data.ts":{"bytes":19811,"imports":[{"path":"@automerge/automerge","kind":"import-statement","external":true},{"path":"effect/Schema","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/echo/internal","kind":"import-statement","external":true},{"path":"@dxos/echo-db","kind":"import-statement","external":true},{"path":"@dxos/random","kind":"import-statement","external":true},{"path":"src/generator.ts","kind":"import-statement","original":"./generator"},{"path":"src/util.ts","kind":"import-statement","original":"./util"}],"format":"esm"},"src/index.ts":{"bytes":661,"imports":[{"path":"src/data.ts","kind":"import-statement","original":"./data"},{"path":"src/generator.ts","kind":"import-statement","original":"./generator"},{"path":"src/util.ts","kind":"import-statement","original":"./util"}],"format":"esm"}},"outputs":{"dist/lib/browser/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":19050},"dist/lib/browser/index.mjs":{"imports":[{"path":"@automerge/automerge","kind":"import-statement","external":true},{"path":"effect/Schema","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/echo/internal","kind":"import-statement","external":true},{"path":"@dxos/echo-db","kind":"import-statement","external":true},{"path":"@dxos/random","kind":"import-statement","external":true},{"path":"@dxos/client/echo","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/echo/internal","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/live-object","kind":"import-statement","external":true},{"path":"@dxos/random","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true}],"exports":["Priority","SpaceObjectGenerator","Status","TestObjectGenerator","TestSchemaType","createSpaceObjectGenerator","createTestObjectGenerator","randomText"],"entryPoint":"src/index.ts","inputs":{"src/data.ts":{"bytesInOutput":4889},"src/generator.ts":{"bytesInOutput":4044},"src/util.ts":{"bytesInOutput":299},"src/index.ts":{"bytesInOutput":0}},"bytes":9540}}}
|
|
@@ -2,33 +2,31 @@ import { createRequire } from 'node:module';const require = createRequire(import
|
|
|
2
2
|
|
|
3
3
|
// src/data.ts
|
|
4
4
|
import { next as A } from "@automerge/automerge";
|
|
5
|
-
import
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
5
|
+
import * as Schema from "effect/Schema";
|
|
6
|
+
import { Ref, Type } from "@dxos/echo";
|
|
7
|
+
import { EchoObjectSchema } from "@dxos/echo/internal";
|
|
8
|
+
import { createDocAccessor } from "@dxos/echo-db";
|
|
8
9
|
import { faker as faker2 } from "@dxos/random";
|
|
9
10
|
|
|
10
11
|
// src/generator.ts
|
|
11
12
|
import { Filter } from "@dxos/client/echo";
|
|
12
|
-
import {
|
|
13
|
+
import { Obj } from "@dxos/echo";
|
|
14
|
+
import { EchoSchema, getTypeAnnotation } from "@dxos/echo/internal";
|
|
13
15
|
import { invariant } from "@dxos/invariant";
|
|
14
16
|
import { isLiveObject, live } from "@dxos/live-object";
|
|
15
17
|
import { faker } from "@dxos/random";
|
|
16
18
|
import { entries, range } from "@dxos/util";
|
|
17
|
-
function _define_property(obj, key, value) {
|
|
18
|
-
if (key in obj) {
|
|
19
|
-
Object.defineProperty(obj, key, {
|
|
20
|
-
value,
|
|
21
|
-
enumerable: true,
|
|
22
|
-
configurable: true,
|
|
23
|
-
writable: true
|
|
24
|
-
});
|
|
25
|
-
} else {
|
|
26
|
-
obj[key] = value;
|
|
27
|
-
}
|
|
28
|
-
return obj;
|
|
29
|
-
}
|
|
30
19
|
var __dxlog_file = "/__w/dxos/dxos/packages/core/echo/echo-generator/src/generator.ts";
|
|
31
20
|
var TestObjectGenerator = class {
|
|
21
|
+
_schemas;
|
|
22
|
+
_generators;
|
|
23
|
+
_provider;
|
|
24
|
+
// prettier-ignore
|
|
25
|
+
constructor(_schemas, _generators, _provider) {
|
|
26
|
+
this._schemas = _schemas;
|
|
27
|
+
this._generators = _generators;
|
|
28
|
+
this._provider = _provider;
|
|
29
|
+
}
|
|
32
30
|
get schemas() {
|
|
33
31
|
return Object.values(this._schemas);
|
|
34
32
|
}
|
|
@@ -45,7 +43,7 @@ var TestObjectGenerator = class {
|
|
|
45
43
|
return data;
|
|
46
44
|
}
|
|
47
45
|
const schema = this.getSchema(type);
|
|
48
|
-
return schema ?
|
|
46
|
+
return schema ? Obj.make(schema, data) : live(data);
|
|
49
47
|
}
|
|
50
48
|
// TODO(burdon): Based on dependencies (e.g., organization before contact).
|
|
51
49
|
async createObjects(map) {
|
|
@@ -66,17 +64,17 @@ var TestObjectGenerator = class {
|
|
|
66
64
|
}).flatMap((t) => t);
|
|
67
65
|
return Promise.all(tasks);
|
|
68
66
|
}
|
|
69
|
-
// prettier-ignore
|
|
70
|
-
constructor(_schemas, _generators, _provider) {
|
|
71
|
-
_define_property(this, "_schemas", void 0);
|
|
72
|
-
_define_property(this, "_generators", void 0);
|
|
73
|
-
_define_property(this, "_provider", void 0);
|
|
74
|
-
this._schemas = _schemas;
|
|
75
|
-
this._generators = _generators;
|
|
76
|
-
this._provider = _provider;
|
|
77
|
-
}
|
|
78
67
|
};
|
|
79
68
|
var SpaceObjectGenerator = class extends TestObjectGenerator {
|
|
69
|
+
_space;
|
|
70
|
+
_mutations;
|
|
71
|
+
constructor(_space, schemaMap, generators, _mutations) {
|
|
72
|
+
super(schemaMap, generators, async (type) => {
|
|
73
|
+
const schema = this.getSchema(type);
|
|
74
|
+
const { objects } = await this._space.db.query(schema ? Filter.type(schema) : Filter.nothing()).run();
|
|
75
|
+
return objects;
|
|
76
|
+
}), this._space = _space, this._mutations = _mutations;
|
|
77
|
+
}
|
|
80
78
|
async addSchemas() {
|
|
81
79
|
const result = [];
|
|
82
80
|
for (const [typename, schema] of Object.entries(this._schemas)) {
|
|
@@ -115,17 +113,17 @@ var SpaceObjectGenerator = class extends TestObjectGenerator {
|
|
|
115
113
|
async mutateObject(object, params) {
|
|
116
114
|
invariant(this._mutations, "Mutations not defined.", {
|
|
117
115
|
F: __dxlog_file,
|
|
118
|
-
L:
|
|
116
|
+
L: 131,
|
|
119
117
|
S: this,
|
|
120
118
|
A: [
|
|
121
119
|
"this._mutations",
|
|
122
120
|
"'Mutations not defined.'"
|
|
123
121
|
]
|
|
124
122
|
});
|
|
125
|
-
const type = getTypeAnnotation(getSchema(object)).typename;
|
|
123
|
+
const type = getTypeAnnotation(Obj.getSchema(object)).typename;
|
|
126
124
|
invariant(type && this._mutations?.[type], "Invalid object type.", {
|
|
127
125
|
F: __dxlog_file,
|
|
128
|
-
L:
|
|
126
|
+
L: 133,
|
|
129
127
|
S: this,
|
|
130
128
|
A: [
|
|
131
129
|
"type && this._mutations?.[type]",
|
|
@@ -139,13 +137,6 @@ var SpaceObjectGenerator = class extends TestObjectGenerator {
|
|
|
139
137
|
await this.mutateObject(object, params);
|
|
140
138
|
}
|
|
141
139
|
}
|
|
142
|
-
constructor(_space, schemaMap, generators, _mutations) {
|
|
143
|
-
super(schemaMap, generators, async (type) => {
|
|
144
|
-
const schema = this.getSchema(type);
|
|
145
|
-
const { objects } = await this._space.db.query(schema ? Filter.type(schema) : Filter.nothing()).run();
|
|
146
|
-
return objects;
|
|
147
|
-
}), _define_property(this, "_space", void 0), _define_property(this, "_mutations", void 0), this._space = _space, this._mutations = _mutations;
|
|
148
|
-
}
|
|
149
140
|
};
|
|
150
141
|
|
|
151
142
|
// src/util.ts
|
|
@@ -172,20 +163,20 @@ var Priority = [
|
|
|
172
163
|
4,
|
|
173
164
|
5
|
|
174
165
|
];
|
|
175
|
-
var TestSchemaType = /* @__PURE__ */ function(TestSchemaType2) {
|
|
166
|
+
var TestSchemaType = /* @__PURE__ */ (function(TestSchemaType2) {
|
|
176
167
|
TestSchemaType2["document"] = "example.com/type/Document";
|
|
177
168
|
TestSchemaType2["organization"] = "example.com/type/Organization";
|
|
178
|
-
TestSchemaType2["contact"] = "example.com/type/
|
|
169
|
+
TestSchemaType2["contact"] = "example.com/type/Person";
|
|
179
170
|
TestSchemaType2["project"] = "example.com/type/Project";
|
|
180
171
|
return TestSchemaType2;
|
|
181
|
-
}({});
|
|
172
|
+
})({});
|
|
182
173
|
var testSchemas = () => {
|
|
183
174
|
const document = Schema.Struct({
|
|
184
175
|
title: Schema.String.annotations({
|
|
185
176
|
description: "title of the document"
|
|
186
177
|
}),
|
|
187
178
|
content: Schema.String
|
|
188
|
-
}).pipe(
|
|
179
|
+
}).pipe(EchoObjectSchema({
|
|
189
180
|
typename: "example.com/type/Document",
|
|
190
181
|
version: "0.1.0"
|
|
191
182
|
}));
|
|
@@ -199,7 +190,7 @@ var testSchemas = () => {
|
|
|
199
190
|
description: Schema.String.annotations({
|
|
200
191
|
description: "short summary of the company"
|
|
201
192
|
})
|
|
202
|
-
}).pipe(
|
|
193
|
+
}).pipe(EchoObjectSchema({
|
|
203
194
|
typename: "example.com/type/Organization",
|
|
204
195
|
version: "0.1.0"
|
|
205
196
|
}));
|
|
@@ -208,11 +199,11 @@ var testSchemas = () => {
|
|
|
208
199
|
description: "name of the person"
|
|
209
200
|
}),
|
|
210
201
|
email: Schema.optional(Schema.String),
|
|
211
|
-
org: Schema.optional(Ref(organization)),
|
|
202
|
+
org: Schema.optional(Type.Ref(organization)),
|
|
212
203
|
lat: Schema.optional(Schema.Number),
|
|
213
204
|
lng: Schema.optional(Schema.Number)
|
|
214
|
-
}).pipe(
|
|
215
|
-
typename: "example.com/type/
|
|
205
|
+
}).pipe(EchoObjectSchema({
|
|
206
|
+
typename: "example.com/type/Person",
|
|
216
207
|
version: "0.1.0"
|
|
217
208
|
}));
|
|
218
209
|
const project = Schema.Struct({
|
|
@@ -225,15 +216,15 @@ var testSchemas = () => {
|
|
|
225
216
|
status: Schema.String,
|
|
226
217
|
priority: Schema.Number,
|
|
227
218
|
active: Schema.Boolean,
|
|
228
|
-
org: Schema.optional(Ref(organization))
|
|
229
|
-
}).pipe(
|
|
219
|
+
org: Schema.optional(Type.Ref(organization))
|
|
220
|
+
}).pipe(EchoObjectSchema({
|
|
230
221
|
typename: "example.com/type/Project",
|
|
231
222
|
version: "0.1.0"
|
|
232
223
|
}));
|
|
233
224
|
return {
|
|
234
225
|
["example.com/type/Document"]: document,
|
|
235
226
|
["example.com/type/Organization"]: organization,
|
|
236
|
-
["example.com/type/
|
|
227
|
+
["example.com/type/Person"]: contact,
|
|
237
228
|
["example.com/type/Project"]: project
|
|
238
229
|
};
|
|
239
230
|
};
|
|
@@ -255,7 +246,7 @@ var testObjectGenerators = {
|
|
|
255
246
|
}) ? faker2.internet.url() : void 0,
|
|
256
247
|
description: faker2.lorem.sentences()
|
|
257
248
|
}),
|
|
258
|
-
["example.com/type/
|
|
249
|
+
["example.com/type/Person"]: async (provider) => {
|
|
259
250
|
const organizations = await provider?.("example.com/type/Organization");
|
|
260
251
|
const location = faker2.datatype.boolean() ? faker2.geo.airport() : {};
|
|
261
252
|
return {
|
|
@@ -294,7 +285,7 @@ var testObjectMutators = {
|
|
|
294
285
|
["example.com/type/Organization"]: async () => {
|
|
295
286
|
throw new Error("Method not implemented.");
|
|
296
287
|
},
|
|
297
|
-
["example.com/type/
|
|
288
|
+
["example.com/type/Person"]: async () => {
|
|
298
289
|
throw new Error("Method not implemented.");
|
|
299
290
|
},
|
|
300
291
|
["example.com/type/Project"]: async () => {
|