@dxos/echo-generator 0.4.10-main.fe71b4c → 0.4.10-next.169e4e3
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 +20 -23
- package/dist/lib/browser/index.mjs.map +3 -3
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/node/index.cjs +21 -24
- package/dist/lib/node/index.cjs.map +3 -3
- package/dist/lib/node/meta.json +1 -1
- package/dist/types/src/generator.d.ts +3 -3
- package/dist/types/src/generator.d.ts.map +1 -1
- package/dist/types/src/types.d.ts +1 -1
- package/dist/types/src/types.d.ts.map +1 -1
- package/package.json +5 -5
- package/src/data.ts +5 -5
- package/src/generator.test.ts +6 -6
- package/src/generator.ts +17 -18
- package/src/types.ts +1 -1
|
@@ -12,7 +12,7 @@ import { S, DynamicEchoSchema, effectToJsonSchema, StoredEchoSchema, create as c
|
|
|
12
12
|
import { faker as faker2 } from "@dxos/random";
|
|
13
13
|
|
|
14
14
|
// packages/core/echo/echo-generator/src/generator.ts
|
|
15
|
-
import { Filter } from "@dxos/echo
|
|
15
|
+
import { Filter } from "@dxos/client/echo";
|
|
16
16
|
import { create } from "@dxos/echo-schema";
|
|
17
17
|
import { faker } from "@dxos/random";
|
|
18
18
|
|
|
@@ -39,36 +39,34 @@ var TestObjectGenerator = class {
|
|
|
39
39
|
this._schemas[type] = schema;
|
|
40
40
|
}
|
|
41
41
|
// TODO(burdon): Runtime type check via: https://github.com/Effect-TS/schema (or zod).
|
|
42
|
-
createObject({ types } = {}) {
|
|
42
|
+
async createObject({ types } = {}) {
|
|
43
43
|
const type = faker.helpers.arrayElement(types ?? Object.keys(this._schemas));
|
|
44
|
-
const data = this._generators[type](this._provider);
|
|
44
|
+
const data = await this._generators[type](this._provider);
|
|
45
45
|
const schema = this.getSchema(type);
|
|
46
46
|
return schema ? create(schema, data) : create(data);
|
|
47
47
|
}
|
|
48
48
|
// TODO(burdon): Create batch.
|
|
49
49
|
// TODO(burdon): Based on dependencies (e.g., organization before contact).
|
|
50
|
-
createObjects(map) {
|
|
51
|
-
const
|
|
52
|
-
|
|
53
|
-
range(() => objects.push(this.createObject({
|
|
50
|
+
async createObjects(map) {
|
|
51
|
+
const tasks = Object.entries(map).map(([type, count]) => {
|
|
52
|
+
return range(() => this.createObject({
|
|
54
53
|
types: [
|
|
55
54
|
type
|
|
56
55
|
]
|
|
57
|
-
})
|
|
58
|
-
});
|
|
59
|
-
return
|
|
56
|
+
}), count);
|
|
57
|
+
}).flatMap((t) => t);
|
|
58
|
+
return Promise.all(tasks);
|
|
60
59
|
}
|
|
61
60
|
};
|
|
62
61
|
var SpaceObjectGenerator = class extends TestObjectGenerator {
|
|
63
62
|
constructor(_space, schemaMap, generators) {
|
|
64
|
-
super(schemaMap, generators, (type) => {
|
|
63
|
+
super(schemaMap, generators, async (type) => {
|
|
65
64
|
const schema = this.getSchema(type);
|
|
66
|
-
return (schema && this._space.db.query(Filter.schema(schema)).objects) ?? [];
|
|
65
|
+
return (schema && (await this._space.db.query(Filter.schema(schema)).run()).objects) ?? [];
|
|
67
66
|
});
|
|
68
67
|
this._space = _space;
|
|
69
|
-
const schemas = this._space.db.schemaRegistry.getAll();
|
|
70
68
|
Object.entries(schemaMap).forEach(([type, dynamicSchema]) => {
|
|
71
|
-
let schema =
|
|
69
|
+
let schema = this._space.db.schemaRegistry.getRegisteredByTypename(type);
|
|
72
70
|
if (schema == null) {
|
|
73
71
|
schema = this._space.db.schemaRegistry.add(dynamicSchema.schema);
|
|
74
72
|
}
|
|
@@ -77,9 +75,8 @@ var SpaceObjectGenerator = class extends TestObjectGenerator {
|
|
|
77
75
|
}
|
|
78
76
|
addSchemas() {
|
|
79
77
|
const result = [];
|
|
80
|
-
const dbSchemas = this._space.db.schemaRegistry.getAll();
|
|
81
78
|
this.schemas.forEach((schema) => {
|
|
82
|
-
const existing =
|
|
79
|
+
const existing = this._space.db.schemaRegistry.getRegisteredByTypename(schema.typename);
|
|
83
80
|
if (existing == null) {
|
|
84
81
|
result.push(this._space.db.schemaRegistry.add(schema.schema));
|
|
85
82
|
} else {
|
|
@@ -88,8 +85,8 @@ var SpaceObjectGenerator = class extends TestObjectGenerator {
|
|
|
88
85
|
});
|
|
89
86
|
return result;
|
|
90
87
|
}
|
|
91
|
-
createObject({ types } = {}) {
|
|
92
|
-
return this._space.db.add(super.createObject({
|
|
88
|
+
async createObject({ types } = {}) {
|
|
89
|
+
return this._space.db.add(await super.createObject({
|
|
93
90
|
types
|
|
94
91
|
}));
|
|
95
92
|
}
|
|
@@ -158,7 +155,7 @@ var testSchemas = () => {
|
|
|
158
155
|
};
|
|
159
156
|
};
|
|
160
157
|
var testObjectGenerators = {
|
|
161
|
-
["example.com/schema/document"]: () => ({
|
|
158
|
+
["example.com/schema/document"]: async () => ({
|
|
162
159
|
title: faker2.lorem.sentence(3),
|
|
163
160
|
content: faker2.lorem.sentences({
|
|
164
161
|
min: 1,
|
|
@@ -168,15 +165,15 @@ var testObjectGenerators = {
|
|
|
168
165
|
})
|
|
169
166
|
})
|
|
170
167
|
}),
|
|
171
|
-
["example.com/schema/organization"]: () => ({
|
|
168
|
+
["example.com/schema/organization"]: async () => ({
|
|
172
169
|
name: faker2.company.name(),
|
|
173
170
|
website: faker2.datatype.boolean({
|
|
174
171
|
probability: 0.3
|
|
175
172
|
}) ? faker2.internet.url() : void 0,
|
|
176
173
|
description: faker2.lorem.sentences()
|
|
177
174
|
}),
|
|
178
|
-
["example.com/schema/contact"]: (provider) => {
|
|
179
|
-
const organizations = provider?.("example.com/schema/organization");
|
|
175
|
+
["example.com/schema/contact"]: async (provider) => {
|
|
176
|
+
const organizations = await provider?.("example.com/schema/organization");
|
|
180
177
|
const location = faker2.datatype.boolean() ? faker2.helpers.arrayElement(locations) : void 0;
|
|
181
178
|
return {
|
|
182
179
|
name: faker2.person.fullName(),
|
|
@@ -189,7 +186,7 @@ var testObjectGenerators = {
|
|
|
189
186
|
...location
|
|
190
187
|
};
|
|
191
188
|
},
|
|
192
|
-
["example.com/schema/project"]: () => ({
|
|
189
|
+
["example.com/schema/project"]: async () => ({
|
|
193
190
|
name: faker2.commerce.productName(),
|
|
194
191
|
repo: faker2.datatype.boolean({
|
|
195
192
|
probability: 0.3
|
|
@@ -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\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\nimport { type Space } from '@dxos/client/echo';\nimport { S, DynamicEchoSchema, effectToJsonSchema, StoredEchoSchema, create, ref, echoObject } from '@dxos/echo-schema';\nimport { faker } from '@dxos/random';\n\nimport { SpaceObjectGenerator, TestObjectGenerator } from './generator';\nimport { type TestGeneratorMap, type TestSchemaMap } from './types';\n\n// TODO(burdon): Handle restricted values.\nexport const Status = ['pending', 'active', 'done'];\nexport const Priority = [1, 2, 3, 4, 5];\n\nexport enum TestSchemaType {\n document = 'example.com/schema/document',\n organization = 'example.com/schema/organization',\n contact = 'example.com/schema/contact',\n project = 'example.com/schema/project',\n}\n\nconst createDynamicSchema = (typename: string, fields: S.Struct.Fields): DynamicEchoSchema => {\n const typeSchema = S.partial(S.struct(fields)).pipe(echoObject(typename, '1.0.0'));\n return new DynamicEchoSchema(\n create(StoredEchoSchema, {\n typename,\n version: '1.0.0',\n jsonSchema: effectToJsonSchema(typeSchema),\n }),\n );\n};\n\nconst testSchemas = (): TestSchemaMap<TestSchemaType> => {\n const document = createDynamicSchema(TestSchemaType.document, {\n title: S.string.pipe(S.description('title of the document')),\n content: S.string,\n });\n\n const organization = createDynamicSchema(TestSchemaType.organization, {\n name: S.string.pipe(S.description('name of the company or organization')),\n website: S.string.pipe(S.description('public website URL')),\n description: S.string.pipe(S.description('short summary of the company')),\n });\n\n const contact = createDynamicSchema(TestSchemaType.contact, {\n name: S.string.pipe(S.description('name of the person')),\n email: S.string,\n org: ref(organization),\n lat: S.number,\n lng: S.number,\n });\n\n const project = createDynamicSchema(TestSchemaType.project, {\n name: S.string.pipe(S.description('name of the project')),\n description: S.string,\n website: S.string,\n repo: S.string,\n status: S.string,\n priority: S.number,\n active: S.boolean,\n org: ref(organization),\n });\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]: () => ({\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]: () => ({\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]: (provider) => {\n const organizations = provider?.(TestSchemaType.organization);\n const location = faker.datatype.boolean() ? faker.helpers.arrayElement(locations) : undefined;\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.3 })\n ? faker.helpers.arrayElement(organizations)\n : undefined,\n ...location,\n };\n },\n\n [TestSchemaType.project]: () => ({\n name: faker.commerce.productName(),\n repo: faker.datatype.boolean({ probability: 0.3 }) ? faker.internet.url() : undefined,\n status: faker.helpers.arrayElement(Status),\n priority: faker.helpers.arrayElement(Priority),\n active: faker.datatype.boolean(),\n }),\n};\n\nexport const createTestObjectGenerator = () => new TestObjectGenerator(testSchemas(), testObjectGenerators);\n\nexport const createSpaceObjectGenerator = (space: Space) =>\n new SpaceObjectGenerator(space, testSchemas(), testObjectGenerators);\n\n// TODO(burdon): Move to @dxos/random.\nconst locations = [\n { lat: 139.74946157054467, lng: 35.686962764371174 },\n { lat: -73.98196278740681, lng: 40.75192492259464 },\n { lat: -99.1329340602939, lng: 19.444388301415472 },\n { lat: 72.85504343876647, lng: 19.0189362343566 },\n { lat: -46.62696583905523, lng: -23.55673372837896 },\n { lat: 77.22805816860182, lng: 28.671938757181522 },\n { lat: 121.43455881982015, lng: 31.218398311228327 },\n { lat: 88.32272979950551, lng: 22.49691515689642 },\n { lat: 90.40663360810754, lng: 23.725005570312817 },\n { lat: -58.399477232331435, lng: -34.600555749907414 },\n { lat: -118.18192636994041, lng: 33.99192410876543 },\n { lat: 66.98806305137339, lng: 24.87193814681484 },\n { lat: 31.248022361126118, lng: 30.051906205103705 },\n { lat: -43.22696665284366, lng: -22.923077315615956 },\n { lat: 135.4581989565952, lng: 34.75198107491417 },\n { lat: 116.38633982565943, lng: 39.93083808990906 },\n { lat: 120.9802713035424, lng: 14.606104813440538 },\n { lat: 37.6135769672714, lng: 55.75410998124818 },\n { lat: 29.008055727002613, lng: 41.10694201243979 },\n { lat: 2.33138946713035, lng: 48.86863878981461 },\n { lat: 126.99778513820195, lng: 37.56829495838895 },\n { lat: 3.3895852125984334, lng: 6.445207512093191 },\n { lat: 106.82749176247012, lng: -6.172471846798885 },\n { lat: -87.75200083270931, lng: 41.83193651927843 },\n { lat: 113.32306427226172, lng: 23.14692716047989 },\n { lat: -0.11866770247593195, lng: 51.5019405883275 },\n { lat: -77.05200795343472, lng: -12.04606681752557 },\n { lat: 51.42239817500899, lng: 35.673888627001304 },\n { lat: 15.313026023171744, lng: -4.327778243275986 },\n { lat: -74.08528981377441, lng: 4.598369421147822 },\n { lat: 114.1201772298325, lng: 22.554316369677963 },\n { lat: 114.26807118958311, lng: 30.581977209337822 },\n { lat: 114.18306345846304, lng: 22.30692675357551 },\n { lat: 117.19807322410043, lng: 39.13197212310894 },\n { lat: 80.27805287890033, lng: 13.091933670856292 },\n { lat: 121.568333333333, lng: 25.0358333333333 },\n { lat: 77.55806386521755, lng: 12.97194099507442 },\n { lat: 100.51469879369489, lng: 13.751945064087977 },\n { lat: 74.34807892054346, lng: 31.56191739488844 },\n { lat: 106.59303578916195, lng: 29.566922888044644 },\n { lat: 78.47800771287751, lng: 17.401928991511454 },\n { lat: -70.66898671317483, lng: -33.448067956934096 },\n { lat: -80.22605193945003, lng: 25.789556555021534 },\n { lat: -43.916950376804834, lng: -19.91308016391116 },\n { lat: -3.6852975446125242, lng: 40.40197212311381 },\n { lat: -75.17194183200792, lng: 40.001919022526465 },\n { lat: 72.57805776168215, lng: 23.031998775062675 },\n { lat: 106.69308136207889, lng: 10.781971309193409 },\n { lat: -79.42196665298843, lng: 43.70192573640844 },\n { lat: 103.85387481909902, lng: 1.2949793251059418 },\n { lat: 13.23248118266855, lng: -8.836340255012658 },\n { lat: 44.391922914564134, lng: 33.34059435615865 },\n { lat: 2.181424460619155, lng: 41.385245438547486 },\n { lat: 88.32994665421205, lng: 22.580390440861947 },\n { lat: -96.84196278749818, lng: 32.82196968167733 },\n { lat: 123.44802765120869, lng: 41.80692512604918 },\n { lat: 32.532233380011576, lng: 15.590024084277673 },\n { lat: 73.84805776168719, lng: 18.531963374654026 },\n { lat: 151.1832339501475, lng: -33.91806510862875 },\n { lat: 30.314074200315076, lng: 59.94096036375191 },\n { lat: 91.79802154756635, lng: 22.33193814680459 },\n { lat: 113.74277634138707, lng: 23.050834758613007 },\n { lat: -84.40189524187565, lng: 33.83195971260585 },\n { lat: -71.07195953218684, lng: 42.33190600170229 },\n { lat: 46.770795798688255, lng: 24.642779007816443 },\n { lat: -95.341925149146, lng: 29.821920243188856 },\n { lat: 105.8480683412422, lng: 21.035273107737055 },\n { lat: -77.01136443943716, lng: 38.901495235087054 },\n { lat: -103.33198008081848, lng: 20.671961950508944 },\n { lat: 144.97307037590406, lng: -37.81808545369631 },\n { lat: 29.948050030391755, lng: 31.201965205759393 },\n { lat: 104.06807363094873, lng: 30.671945877957796 },\n { lat: -83.0820016464927, lng: 42.33190600170229 },\n { lat: 96.16473175266185, lng: 16.785299963188777 },\n { lat: 108.89305043760862, lng: 34.27697130928732 },\n { lat: -51.20195790450316, lng: -30.048068770722466 },\n { lat: 121.465, lng: 25.0127777777778 },\n { lat: 72.83809356897484, lng: 21.20192960187819 },\n { lat: 109.60911291406296, lng: 23.09653464659317 },\n { lat: -4.041994118507091, lng: 5.321942826098564 },\n { lat: -47.91799814700306, lng: -15.781394372878992 },\n { lat: 32.862445782356644, lng: 39.929184444075474 },\n { lat: -100.33193064232995, lng: 25.671940995125283 },\n { lat: 139.60202098994017, lng: 35.43065615270891 },\n { lat: 118.77802846499208, lng: 32.05196500231233 },\n { lat: -73.58524281670213, lng: 45.50194506421502 },\n { lat: 106.7180927553083, lng: 26.581988806001448 },\n { lat: -34.91755136960728, lng: -8.073699467249241 },\n { lat: 126.64803904445057, lng: 45.75192980542715 },\n { lat: -38.58192718342411, lng: -3.7480720258257634 },\n { lat: -112.07193755969467, lng: 33.5419257363676 },\n { lat: 117.67001623440774, lng: 24.520375385531167 },\n { lat: -38.48193328693924, lng: -12.968026046044827 },\n { lat: 129.00810170722048, lng: 35.09699877511093 },\n { lat: -122.41716877355225, lng: 37.76919562968743 },\n { lat: 28.028063865019476, lng: -26.16809888138414 },\n { lat: 13.399602764700546, lng: 52.523764522251156 },\n { lat: 3.048606670909237, lng: 36.765010656628135 },\n { lat: 125.75274485499392, lng: 39.02138455800434 },\n { lat: 12.481312562873995, lng: 41.89790148509894 },\n];\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { type Space } from '@dxos/client/echo';\nimport { type DynamicEchoSchema, Filter, type ReactiveObject } from '@dxos/echo-schema';\nimport { create } from '@dxos/echo-schema';\nimport { faker } from '@dxos/random';\n\nimport { type TestSchemaType } from './data';\nimport { type TestGeneratorMap, type TestObjectProvider, type TestSchemaMap } from './types';\nimport { range } from './util';\n\n/**\n * Typed object generator.\n */\nexport class TestObjectGenerator<T extends string = TestSchemaType> {\n // prettier-ignore\n constructor(\n private readonly _schemas: TestSchemaMap<T>,\n private readonly _generators: TestGeneratorMap<T>,\n private readonly _provider?: TestObjectProvider<T>\n ) {}\n\n get schemas(): DynamicEchoSchema[] {\n return Object.values(this._schemas);\n }\n\n getSchema(type: T): DynamicEchoSchema | undefined {\n return this.schemas.find((schema) => schema.typename === type);\n }\n\n protected setSchema(type: T, schema: DynamicEchoSchema) {\n this._schemas[type] = schema;\n }\n\n // TODO(burdon): Runtime type check via: https://github.com/Effect-TS/schema (or zod).\n createObject({ types }: { types?: T[] } = {}): ReactiveObject<any> {\n const type = faker.helpers.arrayElement(types ?? (Object.keys(this._schemas) as T[]));\n const data = this._generators[type](this._provider);\n const schema = this.getSchema(type);\n return schema ? create(schema, data) : create(data);\n }\n\n // TODO(burdon): Create batch.\n // TODO(burdon): Based on dependencies (e.g., organization before contact).\n createObjects(map: Partial<Record<T, number>>): ReactiveObject<any>[] {\n const objects: ReactiveObject<any>[] = [];\n Object.entries<number>(map as any).forEach(([type, count]) => {\n range(() => objects.push(this.createObject({ types: [type as T] })), count);\n });\n\n return objects;\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 ) {\n super(schemaMap, generators, (type: T) => {\n const schema = this.getSchema(type);\n return (schema && this._space.db.query(Filter.schema(schema)).objects) ?? [];\n });\n\n // TODO(burdon): Map initially are objects that have not been added to the space.\n // Merge existing schema in space with defaults.\n const schemas = this._space.db.schemaRegistry.getAll();\n Object.entries<DynamicEchoSchema>(schemaMap).forEach(([type, dynamicSchema]) => {\n let schema = schemas.find((object) => object.typename === type);\n if (schema == null) {\n schema = this._space.db.schemaRegistry.add(dynamicSchema.schema);\n }\n this.setSchema(type as T, schema);\n });\n }\n\n addSchemas() {\n const result: DynamicEchoSchema[] = [];\n const dbSchemas = this._space.db.schemaRegistry.getAll();\n this.schemas.forEach((schema) => {\n const existing = dbSchemas.find((object) => object.typename === schema.typename);\n if (existing == null) {\n result.push(this._space.db.schemaRegistry.add(schema.schema));\n } else {\n result.push(existing);\n }\n });\n\n return result;\n }\n\n override createObject({ types }: { types?: T[] } = {}): ReactiveObject<any> {\n return this._space.db.add(super.createObject({ types }));\n }\n}\n", "//\n// Copyright 2023 DXOS.org\n//\n\n// TODO(burdon): Util.\nexport const range = <T>(fn: (i: number) => T | undefined, length: number): T[] =>\n Array.from({ length })\n .map((_, i) => fn(i))\n .filter(Boolean) as T[];\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;AAQA,SAASA,GAAGC,mBAAmBC,oBAAoBC,kBAAkBC,UAAAA,SAAQC,KAAKC,kBAAkB;AACpG,SAASC,SAAAA,cAAa;;;
|
|
6
|
-
"names": ["S", "DynamicEchoSchema", "effectToJsonSchema", "StoredEchoSchema", "create", "ref", "echoObject", "faker", "Filter", "create", "faker", "range", "fn", "length", "Array", "from", "map", "_", "i", "filter", "Boolean", "TestObjectGenerator", "constructor", "_schemas", "_generators", "_provider", "schemas", "Object", "values", "getSchema", "type", "find", "schema", "typename", "setSchema", "createObject", "types", "faker", "helpers", "arrayElement", "keys", "data", "create", "createObjects", "map", "
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\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\nimport { type Space } from '@dxos/client/echo';\nimport { S, DynamicEchoSchema, effectToJsonSchema, StoredEchoSchema, create, ref, echoObject } from '@dxos/echo-schema';\nimport { faker } from '@dxos/random';\n\nimport { SpaceObjectGenerator, TestObjectGenerator } from './generator';\nimport { type TestGeneratorMap, type TestSchemaMap } from './types';\n\n// TODO(burdon): Handle restricted values.\nexport const Status = ['pending', 'active', 'done'];\nexport const Priority = [1, 2, 3, 4, 5];\n\nexport enum TestSchemaType {\n document = 'example.com/schema/document',\n organization = 'example.com/schema/organization',\n contact = 'example.com/schema/contact',\n project = 'example.com/schema/project',\n}\n\nconst createDynamicSchema = (typename: string, fields: S.Struct.Fields): DynamicEchoSchema => {\n const typeSchema = S.partial(S.struct(fields)).pipe(echoObject(typename, '1.0.0'));\n return new DynamicEchoSchema(\n create(StoredEchoSchema, {\n typename,\n version: '1.0.0',\n jsonSchema: effectToJsonSchema(typeSchema),\n }),\n );\n};\n\nconst testSchemas = (): TestSchemaMap<TestSchemaType> => {\n const document = createDynamicSchema(TestSchemaType.document, {\n title: S.string.pipe(S.description('title of the document')),\n content: S.string,\n });\n\n const organization = createDynamicSchema(TestSchemaType.organization, {\n name: S.string.pipe(S.description('name of the company or organization')),\n website: S.string.pipe(S.description('public website URL')),\n description: S.string.pipe(S.description('short summary of the company')),\n });\n\n const contact = createDynamicSchema(TestSchemaType.contact, {\n name: S.string.pipe(S.description('name of the person')),\n email: S.string,\n org: ref(organization),\n lat: S.number,\n lng: S.number,\n });\n\n const project = createDynamicSchema(TestSchemaType.project, {\n name: S.string.pipe(S.description('name of the project')),\n description: S.string,\n website: S.string,\n repo: S.string,\n status: S.string,\n priority: S.number,\n active: S.boolean,\n org: ref(organization),\n });\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.helpers.arrayElement(locations) : undefined;\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.3 })\n ? faker.helpers.arrayElement(organizations)\n : undefined,\n ...location,\n };\n },\n\n [TestSchemaType.project]: async () => ({\n name: faker.commerce.productName(),\n repo: faker.datatype.boolean({ probability: 0.3 }) ? faker.internet.url() : undefined,\n status: faker.helpers.arrayElement(Status),\n priority: faker.helpers.arrayElement(Priority),\n active: faker.datatype.boolean(),\n }),\n};\n\nexport const createTestObjectGenerator = () => new TestObjectGenerator(testSchemas(), testObjectGenerators);\n\nexport const createSpaceObjectGenerator = (space: Space) =>\n new SpaceObjectGenerator(space, testSchemas(), testObjectGenerators);\n\n// TODO(burdon): Move to @dxos/random.\nconst locations = [\n { lat: 139.74946157054467, lng: 35.686962764371174 },\n { lat: -73.98196278740681, lng: 40.75192492259464 },\n { lat: -99.1329340602939, lng: 19.444388301415472 },\n { lat: 72.85504343876647, lng: 19.0189362343566 },\n { lat: -46.62696583905523, lng: -23.55673372837896 },\n { lat: 77.22805816860182, lng: 28.671938757181522 },\n { lat: 121.43455881982015, lng: 31.218398311228327 },\n { lat: 88.32272979950551, lng: 22.49691515689642 },\n { lat: 90.40663360810754, lng: 23.725005570312817 },\n { lat: -58.399477232331435, lng: -34.600555749907414 },\n { lat: -118.18192636994041, lng: 33.99192410876543 },\n { lat: 66.98806305137339, lng: 24.87193814681484 },\n { lat: 31.248022361126118, lng: 30.051906205103705 },\n { lat: -43.22696665284366, lng: -22.923077315615956 },\n { lat: 135.4581989565952, lng: 34.75198107491417 },\n { lat: 116.38633982565943, lng: 39.93083808990906 },\n { lat: 120.9802713035424, lng: 14.606104813440538 },\n { lat: 37.6135769672714, lng: 55.75410998124818 },\n { lat: 29.008055727002613, lng: 41.10694201243979 },\n { lat: 2.33138946713035, lng: 48.86863878981461 },\n { lat: 126.99778513820195, lng: 37.56829495838895 },\n { lat: 3.3895852125984334, lng: 6.445207512093191 },\n { lat: 106.82749176247012, lng: -6.172471846798885 },\n { lat: -87.75200083270931, lng: 41.83193651927843 },\n { lat: 113.32306427226172, lng: 23.14692716047989 },\n { lat: -0.11866770247593195, lng: 51.5019405883275 },\n { lat: -77.05200795343472, lng: -12.04606681752557 },\n { lat: 51.42239817500899, lng: 35.673888627001304 },\n { lat: 15.313026023171744, lng: -4.327778243275986 },\n { lat: -74.08528981377441, lng: 4.598369421147822 },\n { lat: 114.1201772298325, lng: 22.554316369677963 },\n { lat: 114.26807118958311, lng: 30.581977209337822 },\n { lat: 114.18306345846304, lng: 22.30692675357551 },\n { lat: 117.19807322410043, lng: 39.13197212310894 },\n { lat: 80.27805287890033, lng: 13.091933670856292 },\n { lat: 121.568333333333, lng: 25.0358333333333 },\n { lat: 77.55806386521755, lng: 12.97194099507442 },\n { lat: 100.51469879369489, lng: 13.751945064087977 },\n { lat: 74.34807892054346, lng: 31.56191739488844 },\n { lat: 106.59303578916195, lng: 29.566922888044644 },\n { lat: 78.47800771287751, lng: 17.401928991511454 },\n { lat: -70.66898671317483, lng: -33.448067956934096 },\n { lat: -80.22605193945003, lng: 25.789556555021534 },\n { lat: -43.916950376804834, lng: -19.91308016391116 },\n { lat: -3.6852975446125242, lng: 40.40197212311381 },\n { lat: -75.17194183200792, lng: 40.001919022526465 },\n { lat: 72.57805776168215, lng: 23.031998775062675 },\n { lat: 106.69308136207889, lng: 10.781971309193409 },\n { lat: -79.42196665298843, lng: 43.70192573640844 },\n { lat: 103.85387481909902, lng: 1.2949793251059418 },\n { lat: 13.23248118266855, lng: -8.836340255012658 },\n { lat: 44.391922914564134, lng: 33.34059435615865 },\n { lat: 2.181424460619155, lng: 41.385245438547486 },\n { lat: 88.32994665421205, lng: 22.580390440861947 },\n { lat: -96.84196278749818, lng: 32.82196968167733 },\n { lat: 123.44802765120869, lng: 41.80692512604918 },\n { lat: 32.532233380011576, lng: 15.590024084277673 },\n { lat: 73.84805776168719, lng: 18.531963374654026 },\n { lat: 151.1832339501475, lng: -33.91806510862875 },\n { lat: 30.314074200315076, lng: 59.94096036375191 },\n { lat: 91.79802154756635, lng: 22.33193814680459 },\n { lat: 113.74277634138707, lng: 23.050834758613007 },\n { lat: -84.40189524187565, lng: 33.83195971260585 },\n { lat: -71.07195953218684, lng: 42.33190600170229 },\n { lat: 46.770795798688255, lng: 24.642779007816443 },\n { lat: -95.341925149146, lng: 29.821920243188856 },\n { lat: 105.8480683412422, lng: 21.035273107737055 },\n { lat: -77.01136443943716, lng: 38.901495235087054 },\n { lat: -103.33198008081848, lng: 20.671961950508944 },\n { lat: 144.97307037590406, lng: -37.81808545369631 },\n { lat: 29.948050030391755, lng: 31.201965205759393 },\n { lat: 104.06807363094873, lng: 30.671945877957796 },\n { lat: -83.0820016464927, lng: 42.33190600170229 },\n { lat: 96.16473175266185, lng: 16.785299963188777 },\n { lat: 108.89305043760862, lng: 34.27697130928732 },\n { lat: -51.20195790450316, lng: -30.048068770722466 },\n { lat: 121.465, lng: 25.0127777777778 },\n { lat: 72.83809356897484, lng: 21.20192960187819 },\n { lat: 109.60911291406296, lng: 23.09653464659317 },\n { lat: -4.041994118507091, lng: 5.321942826098564 },\n { lat: -47.91799814700306, lng: -15.781394372878992 },\n { lat: 32.862445782356644, lng: 39.929184444075474 },\n { lat: -100.33193064232995, lng: 25.671940995125283 },\n { lat: 139.60202098994017, lng: 35.43065615270891 },\n { lat: 118.77802846499208, lng: 32.05196500231233 },\n { lat: -73.58524281670213, lng: 45.50194506421502 },\n { lat: 106.7180927553083, lng: 26.581988806001448 },\n { lat: -34.91755136960728, lng: -8.073699467249241 },\n { lat: 126.64803904445057, lng: 45.75192980542715 },\n { lat: -38.58192718342411, lng: -3.7480720258257634 },\n { lat: -112.07193755969467, lng: 33.5419257363676 },\n { lat: 117.67001623440774, lng: 24.520375385531167 },\n { lat: -38.48193328693924, lng: -12.968026046044827 },\n { lat: 129.00810170722048, lng: 35.09699877511093 },\n { lat: -122.41716877355225, lng: 37.76919562968743 },\n { lat: 28.028063865019476, lng: -26.16809888138414 },\n { lat: 13.399602764700546, lng: 52.523764522251156 },\n { lat: 3.048606670909237, lng: 36.765010656628135 },\n { lat: 125.75274485499392, lng: 39.02138455800434 },\n { lat: 12.481312562873995, lng: 41.89790148509894 },\n];\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { type Space, Filter } from '@dxos/client/echo';\nimport { type DynamicEchoSchema, type ReactiveObject } from '@dxos/echo-schema';\nimport { create } from '@dxos/echo-schema';\nimport { faker } from '@dxos/random';\n\nimport { type TestSchemaType } from './data';\nimport { type TestGeneratorMap, type TestObjectProvider, type TestSchemaMap } from './types';\nimport { range } from './util';\n\n/**\n * Typed object generator.\n */\nexport class TestObjectGenerator<T extends string = TestSchemaType> {\n // prettier-ignore\n constructor(\n private readonly _schemas: TestSchemaMap<T>,\n private readonly _generators: TestGeneratorMap<T>,\n private readonly _provider?: TestObjectProvider<T>\n ) {}\n\n get schemas(): DynamicEchoSchema[] {\n return Object.values(this._schemas);\n }\n\n getSchema(type: T): DynamicEchoSchema | undefined {\n return this.schemas.find((schema) => schema.typename === type);\n }\n\n protected setSchema(type: T, schema: DynamicEchoSchema) {\n this._schemas[type] = schema;\n }\n\n // TODO(burdon): Runtime type check via: https://github.com/Effect-TS/schema (or zod).\n async createObject({ types }: { types?: T[] } = {}): Promise<ReactiveObject<any>> {\n const type = faker.helpers.arrayElement(types ?? (Object.keys(this._schemas) as T[]));\n const data = await this._generators[type](this._provider);\n const schema = this.getSchema(type);\n return schema ? create(schema, data) : create(data);\n }\n\n // TODO(burdon): Create batch.\n // TODO(burdon): Based on dependencies (e.g., organization before contact).\n async createObjects(map: Partial<Record<T, number>>): Promise<ReactiveObject<any>[]> {\n const tasks = Object.entries<number>(map as any)\n .map(([type, count]) => {\n return range(() => this.createObject({ types: [type as T] }), count);\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 ) {\n super(schemaMap, generators, async (type: T) => {\n const schema = this.getSchema(type);\n return (schema && (await this._space.db.query(Filter.schema(schema)).run()).objects) ?? [];\n });\n\n // TODO(burdon): Map initially are objects that have not been added to the space.\n // Merge existing schema in space with defaults.\n Object.entries<DynamicEchoSchema>(schemaMap).forEach(([type, dynamicSchema]) => {\n let schema = this._space.db.schemaRegistry.getRegisteredByTypename(type);\n if (schema == null) {\n schema = this._space.db.schemaRegistry.add(dynamicSchema.schema);\n }\n this.setSchema(type as T, schema);\n });\n }\n\n addSchemas() {\n const result: DynamicEchoSchema[] = [];\n this.schemas.forEach((schema) => {\n const existing = this._space.db.schemaRegistry.getRegisteredByTypename(schema.typename);\n if (existing == null) {\n result.push(this._space.db.schemaRegistry.add(schema.schema));\n } else {\n result.push(existing);\n }\n });\n\n return result;\n }\n\n override async createObject({ types }: { types?: T[] } = {}): Promise<ReactiveObject<any>> {\n return this._space.db.add(await super.createObject({ types }));\n }\n}\n", "//\n// Copyright 2023 DXOS.org\n//\n\n// TODO(burdon): Util.\nexport const range = <T>(fn: (i: number) => T | undefined, length: number): T[] =>\n Array.from({ length })\n .map((_, i) => fn(i))\n .filter(Boolean) as T[];\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["S", "DynamicEchoSchema", "effectToJsonSchema", "StoredEchoSchema", "create", "ref", "echoObject", "faker", "Filter", "create", "faker", "range", "fn", "length", "Array", "from", "map", "_", "i", "filter", "Boolean", "TestObjectGenerator", "constructor", "_schemas", "_generators", "_provider", "schemas", "Object", "values", "getSchema", "type", "find", "schema", "typename", "setSchema", "createObject", "types", "faker", "helpers", "arrayElement", "keys", "data", "create", "createObjects", "map", "tasks", "entries", "count", "range", "flatMap", "t", "Promise", "all", "SpaceObjectGenerator", "_space", "schemaMap", "generators", "db", "query", "Filter", "run", "objects", "forEach", "dynamicSchema", "schemaRegistry", "getRegisteredByTypename", "add", "addSchemas", "result", "existing", "push", "Status", "Priority", "TestSchemaType", "createDynamicSchema", "typename", "fields", "typeSchema", "S", "partial", "struct", "pipe", "echoObject", "DynamicEchoSchema", "create", "StoredEchoSchema", "version", "jsonSchema", "effectToJsonSchema", "testSchemas", "document", "title", "string", "description", "content", "organization", "name", "website", "contact", "email", "org", "ref", "lat", "number", "lng", "project", "repo", "status", "priority", "active", "boolean", "testObjectGenerators", "faker", "lorem", "sentence", "sentences", "min", "max", "int", "company", "datatype", "probability", "internet", "url", "undefined", "provider", "organizations", "location", "helpers", "arrayElement", "locations", "person", "fullName", "length", "commerce", "productName", "createTestObjectGenerator", "TestObjectGenerator", "createSpaceObjectGenerator", "space", "SpaceObjectGenerator"]
|
|
7
7
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"inputs":{"inject-globals:@inject-globals":{"bytes":384,"imports":[{"path":"@dxos/node-std/inject-globals","kind":"import-statement","external":true}],"format":"esm"},"packages/core/echo/echo-generator/src/util.ts":{"bytes":1057,"imports":[{"path":"@inject-globals","kind":"import-statement","external":true}],"format":"esm"},"packages/core/echo/echo-generator/src/generator.ts":{"bytes":
|
|
1
|
+
{"inputs":{"inject-globals:@inject-globals":{"bytes":384,"imports":[{"path":"@dxos/node-std/inject-globals","kind":"import-statement","external":true}],"format":"esm"},"packages/core/echo/echo-generator/src/util.ts":{"bytes":1057,"imports":[{"path":"@inject-globals","kind":"import-statement","external":true}],"format":"esm"},"packages/core/echo/echo-generator/src/generator.ts":{"bytes":11762,"imports":[{"path":"@dxos/client/echo","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"@dxos/random","kind":"import-statement","external":true},{"path":"packages/core/echo/echo-generator/src/util.ts","kind":"import-statement","original":"./util"},{"path":"@inject-globals","kind":"import-statement","external":true}],"format":"esm"},"packages/core/echo/echo-generator/src/data.ts":{"bytes":35633,"imports":[{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"@dxos/random","kind":"import-statement","external":true},{"path":"packages/core/echo/echo-generator/src/generator.ts","kind":"import-statement","original":"./generator"},{"path":"@inject-globals","kind":"import-statement","external":true}],"format":"esm"},"packages/core/echo/echo-generator/src/types.ts":{"bytes":1005,"imports":[{"path":"@inject-globals","kind":"import-statement","external":true}],"format":"esm"},"packages/core/echo/echo-generator/src/index.ts":{"bytes":715,"imports":[{"path":"packages/core/echo/echo-generator/src/data.ts","kind":"import-statement","original":"./data"},{"path":"packages/core/echo/echo-generator/src/generator.ts","kind":"import-statement","original":"./generator"},{"path":"packages/core/echo/echo-generator/src/types.ts","kind":"import-statement","original":"./types"},{"path":"packages/core/echo/echo-generator/src/util.ts","kind":"import-statement","original":"./util"},{"path":"@inject-globals","kind":"import-statement","external":true}],"format":"esm"}},"outputs":{"packages/core/echo/echo-generator/dist/lib/browser/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":23478},"packages/core/echo/echo-generator/dist/lib/browser/index.mjs":{"imports":[{"path":"@dxos/node-std/inject-globals","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","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-schema","kind":"import-statement","external":true},{"path":"@dxos/random","kind":"import-statement","external":true}],"exports":["Priority","SpaceObjectGenerator","Status","TestObjectGenerator","TestSchemaType","createSpaceObjectGenerator","createTestObjectGenerator","range"],"entryPoint":"packages/core/echo/echo-generator/src/index.ts","inputs":{"inject-globals:@inject-globals":{"bytesInOutput":79},"packages/core/echo/echo-generator/src/data.ts":{"bytesInOutput":10310},"packages/core/echo/echo-generator/src/generator.ts":{"bytesInOutput":2426},"packages/core/echo/echo-generator/src/util.ts":{"bytesInOutput":91},"packages/core/echo/echo-generator/src/index.ts":{"bytesInOutput":0}},"bytes":13435}}}
|
package/dist/lib/node/index.cjs
CHANGED
|
@@ -30,8 +30,8 @@ __export(node_exports, {
|
|
|
30
30
|
module.exports = __toCommonJS(node_exports);
|
|
31
31
|
var import_echo_schema = require("@dxos/echo-schema");
|
|
32
32
|
var import_random = require("@dxos/random");
|
|
33
|
+
var import_echo = require("@dxos/client/echo");
|
|
33
34
|
var import_echo_schema2 = require("@dxos/echo-schema");
|
|
34
|
-
var import_echo_schema3 = require("@dxos/echo-schema");
|
|
35
35
|
var import_random2 = require("@dxos/random");
|
|
36
36
|
var range = (fn, length) => Array.from({
|
|
37
37
|
length
|
|
@@ -53,36 +53,34 @@ var TestObjectGenerator = class {
|
|
|
53
53
|
this._schemas[type] = schema;
|
|
54
54
|
}
|
|
55
55
|
// TODO(burdon): Runtime type check via: https://github.com/Effect-TS/schema (or zod).
|
|
56
|
-
createObject({ types } = {}) {
|
|
56
|
+
async createObject({ types } = {}) {
|
|
57
57
|
const type = import_random2.faker.helpers.arrayElement(types ?? Object.keys(this._schemas));
|
|
58
|
-
const data = this._generators[type](this._provider);
|
|
58
|
+
const data = await this._generators[type](this._provider);
|
|
59
59
|
const schema = this.getSchema(type);
|
|
60
|
-
return schema ? (0,
|
|
60
|
+
return schema ? (0, import_echo_schema2.create)(schema, data) : (0, import_echo_schema2.create)(data);
|
|
61
61
|
}
|
|
62
62
|
// TODO(burdon): Create batch.
|
|
63
63
|
// TODO(burdon): Based on dependencies (e.g., organization before contact).
|
|
64
|
-
createObjects(map) {
|
|
65
|
-
const
|
|
66
|
-
|
|
67
|
-
range(() => objects.push(this.createObject({
|
|
64
|
+
async createObjects(map) {
|
|
65
|
+
const tasks = Object.entries(map).map(([type, count]) => {
|
|
66
|
+
return range(() => this.createObject({
|
|
68
67
|
types: [
|
|
69
68
|
type
|
|
70
69
|
]
|
|
71
|
-
})
|
|
72
|
-
});
|
|
73
|
-
return
|
|
70
|
+
}), count);
|
|
71
|
+
}).flatMap((t) => t);
|
|
72
|
+
return Promise.all(tasks);
|
|
74
73
|
}
|
|
75
74
|
};
|
|
76
75
|
var SpaceObjectGenerator = class extends TestObjectGenerator {
|
|
77
76
|
constructor(_space, schemaMap, generators) {
|
|
78
|
-
super(schemaMap, generators, (type) => {
|
|
77
|
+
super(schemaMap, generators, async (type) => {
|
|
79
78
|
const schema = this.getSchema(type);
|
|
80
|
-
return (schema && this._space.db.query(
|
|
79
|
+
return (schema && (await this._space.db.query(import_echo.Filter.schema(schema)).run()).objects) ?? [];
|
|
81
80
|
});
|
|
82
81
|
this._space = _space;
|
|
83
|
-
const schemas = this._space.db.schemaRegistry.getAll();
|
|
84
82
|
Object.entries(schemaMap).forEach(([type, dynamicSchema]) => {
|
|
85
|
-
let schema =
|
|
83
|
+
let schema = this._space.db.schemaRegistry.getRegisteredByTypename(type);
|
|
86
84
|
if (schema == null) {
|
|
87
85
|
schema = this._space.db.schemaRegistry.add(dynamicSchema.schema);
|
|
88
86
|
}
|
|
@@ -91,9 +89,8 @@ var SpaceObjectGenerator = class extends TestObjectGenerator {
|
|
|
91
89
|
}
|
|
92
90
|
addSchemas() {
|
|
93
91
|
const result = [];
|
|
94
|
-
const dbSchemas = this._space.db.schemaRegistry.getAll();
|
|
95
92
|
this.schemas.forEach((schema) => {
|
|
96
|
-
const existing =
|
|
93
|
+
const existing = this._space.db.schemaRegistry.getRegisteredByTypename(schema.typename);
|
|
97
94
|
if (existing == null) {
|
|
98
95
|
result.push(this._space.db.schemaRegistry.add(schema.schema));
|
|
99
96
|
} else {
|
|
@@ -102,8 +99,8 @@ var SpaceObjectGenerator = class extends TestObjectGenerator {
|
|
|
102
99
|
});
|
|
103
100
|
return result;
|
|
104
101
|
}
|
|
105
|
-
createObject({ types } = {}) {
|
|
106
|
-
return this._space.db.add(super.createObject({
|
|
102
|
+
async createObject({ types } = {}) {
|
|
103
|
+
return this._space.db.add(await super.createObject({
|
|
107
104
|
types
|
|
108
105
|
}));
|
|
109
106
|
}
|
|
@@ -170,7 +167,7 @@ var testSchemas = () => {
|
|
|
170
167
|
};
|
|
171
168
|
};
|
|
172
169
|
var testObjectGenerators = {
|
|
173
|
-
["example.com/schema/document"]: () => ({
|
|
170
|
+
["example.com/schema/document"]: async () => ({
|
|
174
171
|
title: import_random.faker.lorem.sentence(3),
|
|
175
172
|
content: import_random.faker.lorem.sentences({
|
|
176
173
|
min: 1,
|
|
@@ -180,15 +177,15 @@ var testObjectGenerators = {
|
|
|
180
177
|
})
|
|
181
178
|
})
|
|
182
179
|
}),
|
|
183
|
-
["example.com/schema/organization"]: () => ({
|
|
180
|
+
["example.com/schema/organization"]: async () => ({
|
|
184
181
|
name: import_random.faker.company.name(),
|
|
185
182
|
website: import_random.faker.datatype.boolean({
|
|
186
183
|
probability: 0.3
|
|
187
184
|
}) ? import_random.faker.internet.url() : void 0,
|
|
188
185
|
description: import_random.faker.lorem.sentences()
|
|
189
186
|
}),
|
|
190
|
-
["example.com/schema/contact"]: (provider) => {
|
|
191
|
-
const organizations = provider?.("example.com/schema/organization");
|
|
187
|
+
["example.com/schema/contact"]: async (provider) => {
|
|
188
|
+
const organizations = await provider?.("example.com/schema/organization");
|
|
192
189
|
const location = import_random.faker.datatype.boolean() ? import_random.faker.helpers.arrayElement(locations) : void 0;
|
|
193
190
|
return {
|
|
194
191
|
name: import_random.faker.person.fullName(),
|
|
@@ -201,7 +198,7 @@ var testObjectGenerators = {
|
|
|
201
198
|
...location
|
|
202
199
|
};
|
|
203
200
|
},
|
|
204
|
-
["example.com/schema/project"]: () => ({
|
|
201
|
+
["example.com/schema/project"]: async () => ({
|
|
205
202
|
name: import_random.faker.commerce.productName(),
|
|
206
203
|
repo: import_random.faker.datatype.boolean({
|
|
207
204
|
probability: 0.3
|
|
@@ -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\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\nimport { type Space } from '@dxos/client/echo';\nimport { S, DynamicEchoSchema, effectToJsonSchema, StoredEchoSchema, create, ref, echoObject } from '@dxos/echo-schema';\nimport { faker } from '@dxos/random';\n\nimport { SpaceObjectGenerator, TestObjectGenerator } from './generator';\nimport { type TestGeneratorMap, type TestSchemaMap } from './types';\n\n// TODO(burdon): Handle restricted values.\nexport const Status = ['pending', 'active', 'done'];\nexport const Priority = [1, 2, 3, 4, 5];\n\nexport enum TestSchemaType {\n document = 'example.com/schema/document',\n organization = 'example.com/schema/organization',\n contact = 'example.com/schema/contact',\n project = 'example.com/schema/project',\n}\n\nconst createDynamicSchema = (typename: string, fields: S.Struct.Fields): DynamicEchoSchema => {\n const typeSchema = S.partial(S.struct(fields)).pipe(echoObject(typename, '1.0.0'));\n return new DynamicEchoSchema(\n create(StoredEchoSchema, {\n typename,\n version: '1.0.0',\n jsonSchema: effectToJsonSchema(typeSchema),\n }),\n );\n};\n\nconst testSchemas = (): TestSchemaMap<TestSchemaType> => {\n const document = createDynamicSchema(TestSchemaType.document, {\n title: S.string.pipe(S.description('title of the document')),\n content: S.string,\n });\n\n const organization = createDynamicSchema(TestSchemaType.organization, {\n name: S.string.pipe(S.description('name of the company or organization')),\n website: S.string.pipe(S.description('public website URL')),\n description: S.string.pipe(S.description('short summary of the company')),\n });\n\n const contact = createDynamicSchema(TestSchemaType.contact, {\n name: S.string.pipe(S.description('name of the person')),\n email: S.string,\n org: ref(organization),\n lat: S.number,\n lng: S.number,\n });\n\n const project = createDynamicSchema(TestSchemaType.project, {\n name: S.string.pipe(S.description('name of the project')),\n description: S.string,\n website: S.string,\n repo: S.string,\n status: S.string,\n priority: S.number,\n active: S.boolean,\n org: ref(organization),\n });\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]: () => ({\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]: () => ({\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]: (provider) => {\n const organizations = provider?.(TestSchemaType.organization);\n const location = faker.datatype.boolean() ? faker.helpers.arrayElement(locations) : undefined;\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.3 })\n ? faker.helpers.arrayElement(organizations)\n : undefined,\n ...location,\n };\n },\n\n [TestSchemaType.project]: () => ({\n name: faker.commerce.productName(),\n repo: faker.datatype.boolean({ probability: 0.3 }) ? faker.internet.url() : undefined,\n status: faker.helpers.arrayElement(Status),\n priority: faker.helpers.arrayElement(Priority),\n active: faker.datatype.boolean(),\n }),\n};\n\nexport const createTestObjectGenerator = () => new TestObjectGenerator(testSchemas(), testObjectGenerators);\n\nexport const createSpaceObjectGenerator = (space: Space) =>\n new SpaceObjectGenerator(space, testSchemas(), testObjectGenerators);\n\n// TODO(burdon): Move to @dxos/random.\nconst locations = [\n { lat: 139.74946157054467, lng: 35.686962764371174 },\n { lat: -73.98196278740681, lng: 40.75192492259464 },\n { lat: -99.1329340602939, lng: 19.444388301415472 },\n { lat: 72.85504343876647, lng: 19.0189362343566 },\n { lat: -46.62696583905523, lng: -23.55673372837896 },\n { lat: 77.22805816860182, lng: 28.671938757181522 },\n { lat: 121.43455881982015, lng: 31.218398311228327 },\n { lat: 88.32272979950551, lng: 22.49691515689642 },\n { lat: 90.40663360810754, lng: 23.725005570312817 },\n { lat: -58.399477232331435, lng: -34.600555749907414 },\n { lat: -118.18192636994041, lng: 33.99192410876543 },\n { lat: 66.98806305137339, lng: 24.87193814681484 },\n { lat: 31.248022361126118, lng: 30.051906205103705 },\n { lat: -43.22696665284366, lng: -22.923077315615956 },\n { lat: 135.4581989565952, lng: 34.75198107491417 },\n { lat: 116.38633982565943, lng: 39.93083808990906 },\n { lat: 120.9802713035424, lng: 14.606104813440538 },\n { lat: 37.6135769672714, lng: 55.75410998124818 },\n { lat: 29.008055727002613, lng: 41.10694201243979 },\n { lat: 2.33138946713035, lng: 48.86863878981461 },\n { lat: 126.99778513820195, lng: 37.56829495838895 },\n { lat: 3.3895852125984334, lng: 6.445207512093191 },\n { lat: 106.82749176247012, lng: -6.172471846798885 },\n { lat: -87.75200083270931, lng: 41.83193651927843 },\n { lat: 113.32306427226172, lng: 23.14692716047989 },\n { lat: -0.11866770247593195, lng: 51.5019405883275 },\n { lat: -77.05200795343472, lng: -12.04606681752557 },\n { lat: 51.42239817500899, lng: 35.673888627001304 },\n { lat: 15.313026023171744, lng: -4.327778243275986 },\n { lat: -74.08528981377441, lng: 4.598369421147822 },\n { lat: 114.1201772298325, lng: 22.554316369677963 },\n { lat: 114.26807118958311, lng: 30.581977209337822 },\n { lat: 114.18306345846304, lng: 22.30692675357551 },\n { lat: 117.19807322410043, lng: 39.13197212310894 },\n { lat: 80.27805287890033, lng: 13.091933670856292 },\n { lat: 121.568333333333, lng: 25.0358333333333 },\n { lat: 77.55806386521755, lng: 12.97194099507442 },\n { lat: 100.51469879369489, lng: 13.751945064087977 },\n { lat: 74.34807892054346, lng: 31.56191739488844 },\n { lat: 106.59303578916195, lng: 29.566922888044644 },\n { lat: 78.47800771287751, lng: 17.401928991511454 },\n { lat: -70.66898671317483, lng: -33.448067956934096 },\n { lat: -80.22605193945003, lng: 25.789556555021534 },\n { lat: -43.916950376804834, lng: -19.91308016391116 },\n { lat: -3.6852975446125242, lng: 40.40197212311381 },\n { lat: -75.17194183200792, lng: 40.001919022526465 },\n { lat: 72.57805776168215, lng: 23.031998775062675 },\n { lat: 106.69308136207889, lng: 10.781971309193409 },\n { lat: -79.42196665298843, lng: 43.70192573640844 },\n { lat: 103.85387481909902, lng: 1.2949793251059418 },\n { lat: 13.23248118266855, lng: -8.836340255012658 },\n { lat: 44.391922914564134, lng: 33.34059435615865 },\n { lat: 2.181424460619155, lng: 41.385245438547486 },\n { lat: 88.32994665421205, lng: 22.580390440861947 },\n { lat: -96.84196278749818, lng: 32.82196968167733 },\n { lat: 123.44802765120869, lng: 41.80692512604918 },\n { lat: 32.532233380011576, lng: 15.590024084277673 },\n { lat: 73.84805776168719, lng: 18.531963374654026 },\n { lat: 151.1832339501475, lng: -33.91806510862875 },\n { lat: 30.314074200315076, lng: 59.94096036375191 },\n { lat: 91.79802154756635, lng: 22.33193814680459 },\n { lat: 113.74277634138707, lng: 23.050834758613007 },\n { lat: -84.40189524187565, lng: 33.83195971260585 },\n { lat: -71.07195953218684, lng: 42.33190600170229 },\n { lat: 46.770795798688255, lng: 24.642779007816443 },\n { lat: -95.341925149146, lng: 29.821920243188856 },\n { lat: 105.8480683412422, lng: 21.035273107737055 },\n { lat: -77.01136443943716, lng: 38.901495235087054 },\n { lat: -103.33198008081848, lng: 20.671961950508944 },\n { lat: 144.97307037590406, lng: -37.81808545369631 },\n { lat: 29.948050030391755, lng: 31.201965205759393 },\n { lat: 104.06807363094873, lng: 30.671945877957796 },\n { lat: -83.0820016464927, lng: 42.33190600170229 },\n { lat: 96.16473175266185, lng: 16.785299963188777 },\n { lat: 108.89305043760862, lng: 34.27697130928732 },\n { lat: -51.20195790450316, lng: -30.048068770722466 },\n { lat: 121.465, lng: 25.0127777777778 },\n { lat: 72.83809356897484, lng: 21.20192960187819 },\n { lat: 109.60911291406296, lng: 23.09653464659317 },\n { lat: -4.041994118507091, lng: 5.321942826098564 },\n { lat: -47.91799814700306, lng: -15.781394372878992 },\n { lat: 32.862445782356644, lng: 39.929184444075474 },\n { lat: -100.33193064232995, lng: 25.671940995125283 },\n { lat: 139.60202098994017, lng: 35.43065615270891 },\n { lat: 118.77802846499208, lng: 32.05196500231233 },\n { lat: -73.58524281670213, lng: 45.50194506421502 },\n { lat: 106.7180927553083, lng: 26.581988806001448 },\n { lat: -34.91755136960728, lng: -8.073699467249241 },\n { lat: 126.64803904445057, lng: 45.75192980542715 },\n { lat: -38.58192718342411, lng: -3.7480720258257634 },\n { lat: -112.07193755969467, lng: 33.5419257363676 },\n { lat: 117.67001623440774, lng: 24.520375385531167 },\n { lat: -38.48193328693924, lng: -12.968026046044827 },\n { lat: 129.00810170722048, lng: 35.09699877511093 },\n { lat: -122.41716877355225, lng: 37.76919562968743 },\n { lat: 28.028063865019476, lng: -26.16809888138414 },\n { lat: 13.399602764700546, lng: 52.523764522251156 },\n { lat: 3.048606670909237, lng: 36.765010656628135 },\n { lat: 125.75274485499392, lng: 39.02138455800434 },\n { lat: 12.481312562873995, lng: 41.89790148509894 },\n];\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { type Space } from '@dxos/client/echo';\nimport { type DynamicEchoSchema, Filter, type ReactiveObject } from '@dxos/echo-schema';\nimport { create } from '@dxos/echo-schema';\nimport { faker } from '@dxos/random';\n\nimport { type TestSchemaType } from './data';\nimport { type TestGeneratorMap, type TestObjectProvider, type TestSchemaMap } from './types';\nimport { range } from './util';\n\n/**\n * Typed object generator.\n */\nexport class TestObjectGenerator<T extends string = TestSchemaType> {\n // prettier-ignore\n constructor(\n private readonly _schemas: TestSchemaMap<T>,\n private readonly _generators: TestGeneratorMap<T>,\n private readonly _provider?: TestObjectProvider<T>\n ) {}\n\n get schemas(): DynamicEchoSchema[] {\n return Object.values(this._schemas);\n }\n\n getSchema(type: T): DynamicEchoSchema | undefined {\n return this.schemas.find((schema) => schema.typename === type);\n }\n\n protected setSchema(type: T, schema: DynamicEchoSchema) {\n this._schemas[type] = schema;\n }\n\n // TODO(burdon): Runtime type check via: https://github.com/Effect-TS/schema (or zod).\n createObject({ types }: { types?: T[] } = {}): ReactiveObject<any> {\n const type = faker.helpers.arrayElement(types ?? (Object.keys(this._schemas) as T[]));\n const data = this._generators[type](this._provider);\n const schema = this.getSchema(type);\n return schema ? create(schema, data) : create(data);\n }\n\n // TODO(burdon): Create batch.\n // TODO(burdon): Based on dependencies (e.g., organization before contact).\n createObjects(map: Partial<Record<T, number>>): ReactiveObject<any>[] {\n const objects: ReactiveObject<any>[] = [];\n Object.entries<number>(map as any).forEach(([type, count]) => {\n range(() => objects.push(this.createObject({ types: [type as T] })), count);\n });\n\n return objects;\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 ) {\n super(schemaMap, generators, (type: T) => {\n const schema = this.getSchema(type);\n return (schema && this._space.db.query(Filter.schema(schema)).objects) ?? [];\n });\n\n // TODO(burdon): Map initially are objects that have not been added to the space.\n // Merge existing schema in space with defaults.\n const schemas = this._space.db.schemaRegistry.getAll();\n Object.entries<DynamicEchoSchema>(schemaMap).forEach(([type, dynamicSchema]) => {\n let schema = schemas.find((object) => object.typename === type);\n if (schema == null) {\n schema = this._space.db.schemaRegistry.add(dynamicSchema.schema);\n }\n this.setSchema(type as T, schema);\n });\n }\n\n addSchemas() {\n const result: DynamicEchoSchema[] = [];\n const dbSchemas = this._space.db.schemaRegistry.getAll();\n this.schemas.forEach((schema) => {\n const existing = dbSchemas.find((object) => object.typename === schema.typename);\n if (existing == null) {\n result.push(this._space.db.schemaRegistry.add(schema.schema));\n } else {\n result.push(existing);\n }\n });\n\n return result;\n }\n\n override createObject({ types }: { types?: T[] } = {}): ReactiveObject<any> {\n return this._space.db.add(super.createObject({ types }));\n }\n}\n", "//\n// Copyright 2023 DXOS.org\n//\n\n// TODO(burdon): Util.\nexport const range = <T>(fn: (i: number) => T | undefined, length: number): T[] =>\n Array.from({ length })\n .map((_, i) => fn(i))\n .filter(Boolean) as T[];\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAQA,yBAAoG;AACpG,oBAAsB;
|
|
6
|
-
"names": ["import_echo_schema", "import_random", "range", "fn", "length", "Array", "from", "map", "_", "i", "filter", "Boolean", "TestObjectGenerator", "constructor", "_schemas", "_generators", "_provider", "schemas", "Object", "values", "getSchema", "type", "find", "schema", "typename", "setSchema", "createObject", "types", "faker", "helpers", "arrayElement", "keys", "data", "create", "createObjects", "
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\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\nimport { type Space } from '@dxos/client/echo';\nimport { S, DynamicEchoSchema, effectToJsonSchema, StoredEchoSchema, create, ref, echoObject } from '@dxos/echo-schema';\nimport { faker } from '@dxos/random';\n\nimport { SpaceObjectGenerator, TestObjectGenerator } from './generator';\nimport { type TestGeneratorMap, type TestSchemaMap } from './types';\n\n// TODO(burdon): Handle restricted values.\nexport const Status = ['pending', 'active', 'done'];\nexport const Priority = [1, 2, 3, 4, 5];\n\nexport enum TestSchemaType {\n document = 'example.com/schema/document',\n organization = 'example.com/schema/organization',\n contact = 'example.com/schema/contact',\n project = 'example.com/schema/project',\n}\n\nconst createDynamicSchema = (typename: string, fields: S.Struct.Fields): DynamicEchoSchema => {\n const typeSchema = S.partial(S.struct(fields)).pipe(echoObject(typename, '1.0.0'));\n return new DynamicEchoSchema(\n create(StoredEchoSchema, {\n typename,\n version: '1.0.0',\n jsonSchema: effectToJsonSchema(typeSchema),\n }),\n );\n};\n\nconst testSchemas = (): TestSchemaMap<TestSchemaType> => {\n const document = createDynamicSchema(TestSchemaType.document, {\n title: S.string.pipe(S.description('title of the document')),\n content: S.string,\n });\n\n const organization = createDynamicSchema(TestSchemaType.organization, {\n name: S.string.pipe(S.description('name of the company or organization')),\n website: S.string.pipe(S.description('public website URL')),\n description: S.string.pipe(S.description('short summary of the company')),\n });\n\n const contact = createDynamicSchema(TestSchemaType.contact, {\n name: S.string.pipe(S.description('name of the person')),\n email: S.string,\n org: ref(organization),\n lat: S.number,\n lng: S.number,\n });\n\n const project = createDynamicSchema(TestSchemaType.project, {\n name: S.string.pipe(S.description('name of the project')),\n description: S.string,\n website: S.string,\n repo: S.string,\n status: S.string,\n priority: S.number,\n active: S.boolean,\n org: ref(organization),\n });\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.helpers.arrayElement(locations) : undefined;\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.3 })\n ? faker.helpers.arrayElement(organizations)\n : undefined,\n ...location,\n };\n },\n\n [TestSchemaType.project]: async () => ({\n name: faker.commerce.productName(),\n repo: faker.datatype.boolean({ probability: 0.3 }) ? faker.internet.url() : undefined,\n status: faker.helpers.arrayElement(Status),\n priority: faker.helpers.arrayElement(Priority),\n active: faker.datatype.boolean(),\n }),\n};\n\nexport const createTestObjectGenerator = () => new TestObjectGenerator(testSchemas(), testObjectGenerators);\n\nexport const createSpaceObjectGenerator = (space: Space) =>\n new SpaceObjectGenerator(space, testSchemas(), testObjectGenerators);\n\n// TODO(burdon): Move to @dxos/random.\nconst locations = [\n { lat: 139.74946157054467, lng: 35.686962764371174 },\n { lat: -73.98196278740681, lng: 40.75192492259464 },\n { lat: -99.1329340602939, lng: 19.444388301415472 },\n { lat: 72.85504343876647, lng: 19.0189362343566 },\n { lat: -46.62696583905523, lng: -23.55673372837896 },\n { lat: 77.22805816860182, lng: 28.671938757181522 },\n { lat: 121.43455881982015, lng: 31.218398311228327 },\n { lat: 88.32272979950551, lng: 22.49691515689642 },\n { lat: 90.40663360810754, lng: 23.725005570312817 },\n { lat: -58.399477232331435, lng: -34.600555749907414 },\n { lat: -118.18192636994041, lng: 33.99192410876543 },\n { lat: 66.98806305137339, lng: 24.87193814681484 },\n { lat: 31.248022361126118, lng: 30.051906205103705 },\n { lat: -43.22696665284366, lng: -22.923077315615956 },\n { lat: 135.4581989565952, lng: 34.75198107491417 },\n { lat: 116.38633982565943, lng: 39.93083808990906 },\n { lat: 120.9802713035424, lng: 14.606104813440538 },\n { lat: 37.6135769672714, lng: 55.75410998124818 },\n { lat: 29.008055727002613, lng: 41.10694201243979 },\n { lat: 2.33138946713035, lng: 48.86863878981461 },\n { lat: 126.99778513820195, lng: 37.56829495838895 },\n { lat: 3.3895852125984334, lng: 6.445207512093191 },\n { lat: 106.82749176247012, lng: -6.172471846798885 },\n { lat: -87.75200083270931, lng: 41.83193651927843 },\n { lat: 113.32306427226172, lng: 23.14692716047989 },\n { lat: -0.11866770247593195, lng: 51.5019405883275 },\n { lat: -77.05200795343472, lng: -12.04606681752557 },\n { lat: 51.42239817500899, lng: 35.673888627001304 },\n { lat: 15.313026023171744, lng: -4.327778243275986 },\n { lat: -74.08528981377441, lng: 4.598369421147822 },\n { lat: 114.1201772298325, lng: 22.554316369677963 },\n { lat: 114.26807118958311, lng: 30.581977209337822 },\n { lat: 114.18306345846304, lng: 22.30692675357551 },\n { lat: 117.19807322410043, lng: 39.13197212310894 },\n { lat: 80.27805287890033, lng: 13.091933670856292 },\n { lat: 121.568333333333, lng: 25.0358333333333 },\n { lat: 77.55806386521755, lng: 12.97194099507442 },\n { lat: 100.51469879369489, lng: 13.751945064087977 },\n { lat: 74.34807892054346, lng: 31.56191739488844 },\n { lat: 106.59303578916195, lng: 29.566922888044644 },\n { lat: 78.47800771287751, lng: 17.401928991511454 },\n { lat: -70.66898671317483, lng: -33.448067956934096 },\n { lat: -80.22605193945003, lng: 25.789556555021534 },\n { lat: -43.916950376804834, lng: -19.91308016391116 },\n { lat: -3.6852975446125242, lng: 40.40197212311381 },\n { lat: -75.17194183200792, lng: 40.001919022526465 },\n { lat: 72.57805776168215, lng: 23.031998775062675 },\n { lat: 106.69308136207889, lng: 10.781971309193409 },\n { lat: -79.42196665298843, lng: 43.70192573640844 },\n { lat: 103.85387481909902, lng: 1.2949793251059418 },\n { lat: 13.23248118266855, lng: -8.836340255012658 },\n { lat: 44.391922914564134, lng: 33.34059435615865 },\n { lat: 2.181424460619155, lng: 41.385245438547486 },\n { lat: 88.32994665421205, lng: 22.580390440861947 },\n { lat: -96.84196278749818, lng: 32.82196968167733 },\n { lat: 123.44802765120869, lng: 41.80692512604918 },\n { lat: 32.532233380011576, lng: 15.590024084277673 },\n { lat: 73.84805776168719, lng: 18.531963374654026 },\n { lat: 151.1832339501475, lng: -33.91806510862875 },\n { lat: 30.314074200315076, lng: 59.94096036375191 },\n { lat: 91.79802154756635, lng: 22.33193814680459 },\n { lat: 113.74277634138707, lng: 23.050834758613007 },\n { lat: -84.40189524187565, lng: 33.83195971260585 },\n { lat: -71.07195953218684, lng: 42.33190600170229 },\n { lat: 46.770795798688255, lng: 24.642779007816443 },\n { lat: -95.341925149146, lng: 29.821920243188856 },\n { lat: 105.8480683412422, lng: 21.035273107737055 },\n { lat: -77.01136443943716, lng: 38.901495235087054 },\n { lat: -103.33198008081848, lng: 20.671961950508944 },\n { lat: 144.97307037590406, lng: -37.81808545369631 },\n { lat: 29.948050030391755, lng: 31.201965205759393 },\n { lat: 104.06807363094873, lng: 30.671945877957796 },\n { lat: -83.0820016464927, lng: 42.33190600170229 },\n { lat: 96.16473175266185, lng: 16.785299963188777 },\n { lat: 108.89305043760862, lng: 34.27697130928732 },\n { lat: -51.20195790450316, lng: -30.048068770722466 },\n { lat: 121.465, lng: 25.0127777777778 },\n { lat: 72.83809356897484, lng: 21.20192960187819 },\n { lat: 109.60911291406296, lng: 23.09653464659317 },\n { lat: -4.041994118507091, lng: 5.321942826098564 },\n { lat: -47.91799814700306, lng: -15.781394372878992 },\n { lat: 32.862445782356644, lng: 39.929184444075474 },\n { lat: -100.33193064232995, lng: 25.671940995125283 },\n { lat: 139.60202098994017, lng: 35.43065615270891 },\n { lat: 118.77802846499208, lng: 32.05196500231233 },\n { lat: -73.58524281670213, lng: 45.50194506421502 },\n { lat: 106.7180927553083, lng: 26.581988806001448 },\n { lat: -34.91755136960728, lng: -8.073699467249241 },\n { lat: 126.64803904445057, lng: 45.75192980542715 },\n { lat: -38.58192718342411, lng: -3.7480720258257634 },\n { lat: -112.07193755969467, lng: 33.5419257363676 },\n { lat: 117.67001623440774, lng: 24.520375385531167 },\n { lat: -38.48193328693924, lng: -12.968026046044827 },\n { lat: 129.00810170722048, lng: 35.09699877511093 },\n { lat: -122.41716877355225, lng: 37.76919562968743 },\n { lat: 28.028063865019476, lng: -26.16809888138414 },\n { lat: 13.399602764700546, lng: 52.523764522251156 },\n { lat: 3.048606670909237, lng: 36.765010656628135 },\n { lat: 125.75274485499392, lng: 39.02138455800434 },\n { lat: 12.481312562873995, lng: 41.89790148509894 },\n];\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { type Space, Filter } from '@dxos/client/echo';\nimport { type DynamicEchoSchema, type ReactiveObject } from '@dxos/echo-schema';\nimport { create } from '@dxos/echo-schema';\nimport { faker } from '@dxos/random';\n\nimport { type TestSchemaType } from './data';\nimport { type TestGeneratorMap, type TestObjectProvider, type TestSchemaMap } from './types';\nimport { range } from './util';\n\n/**\n * Typed object generator.\n */\nexport class TestObjectGenerator<T extends string = TestSchemaType> {\n // prettier-ignore\n constructor(\n private readonly _schemas: TestSchemaMap<T>,\n private readonly _generators: TestGeneratorMap<T>,\n private readonly _provider?: TestObjectProvider<T>\n ) {}\n\n get schemas(): DynamicEchoSchema[] {\n return Object.values(this._schemas);\n }\n\n getSchema(type: T): DynamicEchoSchema | undefined {\n return this.schemas.find((schema) => schema.typename === type);\n }\n\n protected setSchema(type: T, schema: DynamicEchoSchema) {\n this._schemas[type] = schema;\n }\n\n // TODO(burdon): Runtime type check via: https://github.com/Effect-TS/schema (or zod).\n async createObject({ types }: { types?: T[] } = {}): Promise<ReactiveObject<any>> {\n const type = faker.helpers.arrayElement(types ?? (Object.keys(this._schemas) as T[]));\n const data = await this._generators[type](this._provider);\n const schema = this.getSchema(type);\n return schema ? create(schema, data) : create(data);\n }\n\n // TODO(burdon): Create batch.\n // TODO(burdon): Based on dependencies (e.g., organization before contact).\n async createObjects(map: Partial<Record<T, number>>): Promise<ReactiveObject<any>[]> {\n const tasks = Object.entries<number>(map as any)\n .map(([type, count]) => {\n return range(() => this.createObject({ types: [type as T] }), count);\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 ) {\n super(schemaMap, generators, async (type: T) => {\n const schema = this.getSchema(type);\n return (schema && (await this._space.db.query(Filter.schema(schema)).run()).objects) ?? [];\n });\n\n // TODO(burdon): Map initially are objects that have not been added to the space.\n // Merge existing schema in space with defaults.\n Object.entries<DynamicEchoSchema>(schemaMap).forEach(([type, dynamicSchema]) => {\n let schema = this._space.db.schemaRegistry.getRegisteredByTypename(type);\n if (schema == null) {\n schema = this._space.db.schemaRegistry.add(dynamicSchema.schema);\n }\n this.setSchema(type as T, schema);\n });\n }\n\n addSchemas() {\n const result: DynamicEchoSchema[] = [];\n this.schemas.forEach((schema) => {\n const existing = this._space.db.schemaRegistry.getRegisteredByTypename(schema.typename);\n if (existing == null) {\n result.push(this._space.db.schemaRegistry.add(schema.schema));\n } else {\n result.push(existing);\n }\n });\n\n return result;\n }\n\n override async createObject({ types }: { types?: T[] } = {}): Promise<ReactiveObject<any>> {\n return this._space.db.add(await super.createObject({ types }));\n }\n}\n", "//\n// Copyright 2023 DXOS.org\n//\n\n// TODO(burdon): Util.\nexport const range = <T>(fn: (i: number) => T | undefined, length: number): T[] =>\n Array.from({ length })\n .map((_, i) => fn(i))\n .filter(Boolean) as T[];\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["import_echo_schema", "import_random", "range", "fn", "length", "Array", "from", "map", "_", "i", "filter", "Boolean", "TestObjectGenerator", "constructor", "_schemas", "_generators", "_provider", "schemas", "Object", "values", "getSchema", "type", "find", "schema", "typename", "setSchema", "createObject", "types", "faker", "helpers", "arrayElement", "keys", "data", "create", "createObjects", "tasks", "entries", "count", "flatMap", "t", "Promise", "all", "SpaceObjectGenerator", "_space", "schemaMap", "generators", "db", "query", "Filter", "run", "objects", "forEach", "dynamicSchema", "schemaRegistry", "getRegisteredByTypename", "add", "addSchemas", "result", "existing", "push", "Status", "Priority", "TestSchemaType", "createDynamicSchema", "fields", "typeSchema", "S", "partial", "struct", "pipe", "echoObject", "DynamicEchoSchema", "StoredEchoSchema", "version", "jsonSchema", "effectToJsonSchema", "testSchemas", "document", "title", "string", "description", "content", "organization", "name", "website", "contact", "email", "org", "ref", "lat", "number", "lng", "project", "repo", "status", "priority", "active", "boolean", "testObjectGenerators", "lorem", "sentence", "sentences", "min", "max", "int", "company", "datatype", "probability", "internet", "url", "undefined", "provider", "organizations", "location", "locations", "person", "fullName", "commerce", "productName", "createTestObjectGenerator", "createSpaceObjectGenerator", "space"]
|
|
7
7
|
}
|
package/dist/lib/node/meta.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"inputs":{"packages/core/echo/echo-generator/src/util.ts":{"bytes":1057,"imports":[],"format":"esm"},"packages/core/echo/echo-generator/src/generator.ts":{"bytes":
|
|
1
|
+
{"inputs":{"packages/core/echo/echo-generator/src/util.ts":{"bytes":1057,"imports":[],"format":"esm"},"packages/core/echo/echo-generator/src/generator.ts":{"bytes":11762,"imports":[{"path":"@dxos/client/echo","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"@dxos/random","kind":"import-statement","external":true},{"path":"packages/core/echo/echo-generator/src/util.ts","kind":"import-statement","original":"./util"}],"format":"esm"},"packages/core/echo/echo-generator/src/data.ts":{"bytes":35633,"imports":[{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"@dxos/random","kind":"import-statement","external":true},{"path":"packages/core/echo/echo-generator/src/generator.ts","kind":"import-statement","original":"./generator"}],"format":"esm"},"packages/core/echo/echo-generator/src/types.ts":{"bytes":1005,"imports":[],"format":"esm"},"packages/core/echo/echo-generator/src/index.ts":{"bytes":715,"imports":[{"path":"packages/core/echo/echo-generator/src/data.ts","kind":"import-statement","original":"./data"},{"path":"packages/core/echo/echo-generator/src/generator.ts","kind":"import-statement","original":"./generator"},{"path":"packages/core/echo/echo-generator/src/types.ts","kind":"import-statement","original":"./types"},{"path":"packages/core/echo/echo-generator/src/util.ts","kind":"import-statement","original":"./util"}],"format":"esm"}},"outputs":{"packages/core/echo/echo-generator/dist/lib/node/index.cjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":23469},"packages/core/echo/echo-generator/dist/lib/node/index.cjs":{"imports":[{"path":"@dxos/echo-schema","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-schema","kind":"import-statement","external":true},{"path":"@dxos/random","kind":"import-statement","external":true}],"exports":["Priority","SpaceObjectGenerator","Status","TestObjectGenerator","TestSchemaType","createSpaceObjectGenerator","createTestObjectGenerator","range"],"entryPoint":"packages/core/echo/echo-generator/src/index.ts","inputs":{"packages/core/echo/echo-generator/src/data.ts":{"bytesInOutput":10310},"packages/core/echo/echo-generator/src/generator.ts":{"bytesInOutput":2426},"packages/core/echo/echo-generator/src/util.ts":{"bytesInOutput":91},"packages/core/echo/echo-generator/src/index.ts":{"bytesInOutput":0}},"bytes":13287}}}
|
|
@@ -15,8 +15,8 @@ export declare class TestObjectGenerator<T extends string = TestSchemaType> {
|
|
|
15
15
|
protected setSchema(type: T, schema: DynamicEchoSchema): void;
|
|
16
16
|
createObject({ types }?: {
|
|
17
17
|
types?: T[];
|
|
18
|
-
}): ReactiveObject<any
|
|
19
|
-
createObjects(map: Partial<Record<T, number>>): ReactiveObject<any>[]
|
|
18
|
+
}): Promise<ReactiveObject<any>>;
|
|
19
|
+
createObjects(map: Partial<Record<T, number>>): Promise<ReactiveObject<any>[]>;
|
|
20
20
|
}
|
|
21
21
|
/**
|
|
22
22
|
* Typed object generator for a space.
|
|
@@ -27,6 +27,6 @@ export declare class SpaceObjectGenerator<T extends string> extends TestObjectGe
|
|
|
27
27
|
addSchemas(): DynamicEchoSchema[];
|
|
28
28
|
createObject({ types }?: {
|
|
29
29
|
types?: T[];
|
|
30
|
-
}): ReactiveObject<any
|
|
30
|
+
}): Promise<ReactiveObject<any>>;
|
|
31
31
|
}
|
|
32
32
|
//# sourceMappingURL=generator.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../../../src/generator.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,KAAK,
|
|
1
|
+
{"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../../../src/generator.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,KAAK,EAAU,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,KAAK,iBAAiB,EAAE,KAAK,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAIhF,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,QAAQ,CAAC;AAC7C,OAAO,EAAE,KAAK,gBAAgB,EAAE,KAAK,kBAAkB,EAAE,KAAK,aAAa,EAAE,MAAM,SAAS,CAAC;AAG7F;;GAEG;AACH,qBAAa,mBAAmB,CAAC,CAAC,SAAS,MAAM,GAAG,cAAc;IAG9D,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;gBAFV,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,EAC1B,WAAW,EAAE,gBAAgB,CAAC,CAAC,CAAC,EAChC,SAAS,CAAC,mCAAuB;IAGpD,IAAI,OAAO,IAAI,iBAAiB,EAAE,CAEjC;IAED,SAAS,CAAC,IAAI,EAAE,CAAC,GAAG,iBAAiB,GAAG,SAAS;IAIjD,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,iBAAiB;IAKhD,YAAY,CAAC,EAAE,KAAK,EAAE,GAAE;QAAE,KAAK,CAAC,EAAE,CAAC,EAAE,CAAA;KAAO,GAAG,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;IAS3E,aAAa,CAAC,GAAG,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;CASrF;AAED;;GAEG;AACH,qBAAa,oBAAoB,CAAC,CAAC,SAAS,MAAM,CAAE,SAAQ,mBAAmB,CAAC,CAAC,CAAC;IAE9E,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,KAAK,EAC9B,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC,EAC3B,UAAU,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAkBjC,UAAU;IAcK,YAAY,CAAC,EAAE,KAAK,EAAE,GAAE;QAAE,KAAK,CAAC,EAAE,CAAC,EAAE,CAAA;KAAO,GAAG,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;CAG3F"}
|
|
@@ -4,5 +4,5 @@ export type TestObject = {
|
|
|
4
4
|
} & Record<string, any>;
|
|
5
5
|
export type TestSchemaMap<T extends string> = Record<T, DynamicEchoSchema>;
|
|
6
6
|
export type TestGeneratorMap<T extends string> = Record<T, (provider: TestObjectProvider<T> | undefined) => any>;
|
|
7
|
-
export type TestObjectProvider<T extends string> = (type: T) => ReactiveObject<any>[]
|
|
7
|
+
export type TestObjectProvider<T extends string> = (type: T) => Promise<ReactiveObject<any>[]>;
|
|
8
8
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/types.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,iBAAiB,EAAE,KAAK,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEhF,MAAM,MAAM,UAAU,GAAG;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAE9D,MAAM,MAAM,aAAa,CAAC,CAAC,SAAS,MAAM,IAAI,MAAM,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC;AAE3E,MAAM,MAAM,gBAAgB,CAAC,CAAC,SAAS,MAAM,IAAI,MAAM,CAAC,CAAC,EAAE,CAAC,QAAQ,EAAE,kBAAkB,CAAC,CAAC,CAAC,GAAG,SAAS,KAAK,GAAG,CAAC,CAAC;AAEjH,MAAM,MAAM,kBAAkB,CAAC,CAAC,SAAS,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/types.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,iBAAiB,EAAE,KAAK,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEhF,MAAM,MAAM,UAAU,GAAG;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAE9D,MAAM,MAAM,aAAa,CAAC,CAAC,SAAS,MAAM,IAAI,MAAM,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC;AAE3E,MAAM,MAAM,gBAAgB,CAAC,CAAC,SAAS,MAAM,IAAI,MAAM,CAAC,CAAC,EAAE,CAAC,QAAQ,EAAE,kBAAkB,CAAC,CAAC,CAAC,GAAG,SAAS,KAAK,GAAG,CAAC,CAAC;AAEjH,MAAM,MAAM,kBAAkB,CAAC,CAAC,SAAS,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dxos/echo-generator",
|
|
3
|
-
"version": "0.4.10-
|
|
3
|
+
"version": "0.4.10-next.169e4e3",
|
|
4
4
|
"description": "ECHO data generator for testing.",
|
|
5
5
|
"homepage": "https://dxos.org",
|
|
6
6
|
"bugs": "https://github.com/dxos/dxos/issues",
|
|
@@ -16,10 +16,10 @@
|
|
|
16
16
|
"src"
|
|
17
17
|
],
|
|
18
18
|
"dependencies": {
|
|
19
|
-
"@dxos/
|
|
20
|
-
"@dxos/node-std": "0.4.10-
|
|
21
|
-
"@dxos/
|
|
22
|
-
"@dxos/
|
|
19
|
+
"@dxos/echo-schema": "0.4.10-next.169e4e3",
|
|
20
|
+
"@dxos/node-std": "0.4.10-next.169e4e3",
|
|
21
|
+
"@dxos/client": "0.4.10-next.169e4e3",
|
|
22
|
+
"@dxos/random": "0.4.10-next.169e4e3"
|
|
23
23
|
},
|
|
24
24
|
"devDependencies": {},
|
|
25
25
|
"publishConfig": {
|
package/src/data.ts
CHANGED
|
@@ -74,19 +74,19 @@ const testSchemas = (): TestSchemaMap<TestSchemaType> => {
|
|
|
74
74
|
};
|
|
75
75
|
|
|
76
76
|
const testObjectGenerators: TestGeneratorMap<TestSchemaType> = {
|
|
77
|
-
[TestSchemaType.document]: () => ({
|
|
77
|
+
[TestSchemaType.document]: async () => ({
|
|
78
78
|
title: faker.lorem.sentence(3),
|
|
79
79
|
content: faker.lorem.sentences({ min: 1, max: faker.number.int({ min: 1, max: 3 }) }),
|
|
80
80
|
}),
|
|
81
81
|
|
|
82
|
-
[TestSchemaType.organization]: () => ({
|
|
82
|
+
[TestSchemaType.organization]: async () => ({
|
|
83
83
|
name: faker.company.name(),
|
|
84
84
|
website: faker.datatype.boolean({ probability: 0.3 }) ? faker.internet.url() : undefined,
|
|
85
85
|
description: faker.lorem.sentences(),
|
|
86
86
|
}),
|
|
87
87
|
|
|
88
|
-
[TestSchemaType.contact]: (provider) => {
|
|
89
|
-
const organizations = provider?.(TestSchemaType.organization);
|
|
88
|
+
[TestSchemaType.contact]: async (provider) => {
|
|
89
|
+
const organizations = await provider?.(TestSchemaType.organization);
|
|
90
90
|
const location = faker.datatype.boolean() ? faker.helpers.arrayElement(locations) : undefined;
|
|
91
91
|
return {
|
|
92
92
|
name: faker.person.fullName(),
|
|
@@ -99,7 +99,7 @@ const testObjectGenerators: TestGeneratorMap<TestSchemaType> = {
|
|
|
99
99
|
};
|
|
100
100
|
},
|
|
101
101
|
|
|
102
|
-
[TestSchemaType.project]: () => ({
|
|
102
|
+
[TestSchemaType.project]: async () => ({
|
|
103
103
|
name: faker.commerce.productName(),
|
|
104
104
|
repo: faker.datatype.boolean({ probability: 0.3 }) ? faker.internet.url() : undefined,
|
|
105
105
|
status: faker.helpers.arrayElement(Status),
|
package/src/generator.test.ts
CHANGED
|
@@ -14,11 +14,11 @@ import { createSpaceObjectGenerator, createTestObjectGenerator, TestSchemaType }
|
|
|
14
14
|
faker.seed(3);
|
|
15
15
|
|
|
16
16
|
describe('TestObjectGenerator', () => {
|
|
17
|
-
test('basic', () => {
|
|
17
|
+
test('basic', async () => {
|
|
18
18
|
const generator = createTestObjectGenerator();
|
|
19
19
|
|
|
20
20
|
// Create raw object.
|
|
21
|
-
const object = generator.createObject({ types: [TestSchemaType.contact] });
|
|
21
|
+
const object = await generator.createObject({ types: [TestSchemaType.contact] });
|
|
22
22
|
expect(object).to.exist;
|
|
23
23
|
});
|
|
24
24
|
|
|
@@ -29,11 +29,11 @@ describe('TestObjectGenerator', () => {
|
|
|
29
29
|
generator.addSchemas();
|
|
30
30
|
|
|
31
31
|
// Create org object.
|
|
32
|
-
const organization = generator.createObject({ types: [TestSchemaType.organization] });
|
|
32
|
+
const organization = await generator.createObject({ types: [TestSchemaType.organization] });
|
|
33
33
|
expect(getType(organization)).to.exist;
|
|
34
34
|
|
|
35
35
|
// Expect at least one person object with a linked org reference.
|
|
36
|
-
const objects = generator.createObjects({ [TestSchemaType.contact]: 10 });
|
|
36
|
+
const objects = await generator.createObjects({ [TestSchemaType.contact]: 10 });
|
|
37
37
|
expect(objects.some((object) => object.org === organization)).to.be.true;
|
|
38
38
|
});
|
|
39
39
|
|
|
@@ -45,14 +45,14 @@ describe('TestObjectGenerator', () => {
|
|
|
45
45
|
{
|
|
46
46
|
const generator = createSpaceObjectGenerator(space);
|
|
47
47
|
generator.addSchemas();
|
|
48
|
-
const organization = generator.createObject({ types: [TestSchemaType.organization] });
|
|
48
|
+
const organization = await generator.createObject({ types: [TestSchemaType.organization] });
|
|
49
49
|
schemaId.push(getType(organization)!.itemId);
|
|
50
50
|
}
|
|
51
51
|
|
|
52
52
|
{
|
|
53
53
|
const generator = createSpaceObjectGenerator(space);
|
|
54
54
|
generator.addSchemas();
|
|
55
|
-
const organization = generator.createObject({ types: [TestSchemaType.organization] });
|
|
55
|
+
const organization = await generator.createObject({ types: [TestSchemaType.organization] });
|
|
56
56
|
schemaId.push(getType(organization)!.itemId);
|
|
57
57
|
}
|
|
58
58
|
|
package/src/generator.ts
CHANGED
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
// Copyright 2023 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import { type Space } from '@dxos/client/echo';
|
|
6
|
-
import { type DynamicEchoSchema,
|
|
5
|
+
import { type Space, Filter } from '@dxos/client/echo';
|
|
6
|
+
import { type DynamicEchoSchema, type ReactiveObject } from '@dxos/echo-schema';
|
|
7
7
|
import { create } from '@dxos/echo-schema';
|
|
8
8
|
import { faker } from '@dxos/random';
|
|
9
9
|
|
|
@@ -35,22 +35,23 @@ export class TestObjectGenerator<T extends string = TestSchemaType> {
|
|
|
35
35
|
}
|
|
36
36
|
|
|
37
37
|
// TODO(burdon): Runtime type check via: https://github.com/Effect-TS/schema (or zod).
|
|
38
|
-
createObject({ types }: { types?: T[] } = {}): ReactiveObject<any
|
|
38
|
+
async createObject({ types }: { types?: T[] } = {}): Promise<ReactiveObject<any>> {
|
|
39
39
|
const type = faker.helpers.arrayElement(types ?? (Object.keys(this._schemas) as T[]));
|
|
40
|
-
const data = this._generators[type](this._provider);
|
|
40
|
+
const data = await this._generators[type](this._provider);
|
|
41
41
|
const schema = this.getSchema(type);
|
|
42
42
|
return schema ? create(schema, data) : create(data);
|
|
43
43
|
}
|
|
44
44
|
|
|
45
45
|
// TODO(burdon): Create batch.
|
|
46
46
|
// TODO(burdon): Based on dependencies (e.g., organization before contact).
|
|
47
|
-
createObjects(map: Partial<Record<T, number>>): ReactiveObject<any>[] {
|
|
48
|
-
const
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
47
|
+
async createObjects(map: Partial<Record<T, number>>): Promise<ReactiveObject<any>[]> {
|
|
48
|
+
const tasks = Object.entries<number>(map as any)
|
|
49
|
+
.map(([type, count]) => {
|
|
50
|
+
return range(() => this.createObject({ types: [type as T] }), count);
|
|
51
|
+
})
|
|
52
|
+
.flatMap((t) => t);
|
|
52
53
|
|
|
53
|
-
return
|
|
54
|
+
return Promise.all(tasks);
|
|
54
55
|
}
|
|
55
56
|
}
|
|
56
57
|
|
|
@@ -63,16 +64,15 @@ export class SpaceObjectGenerator<T extends string> extends TestObjectGenerator<
|
|
|
63
64
|
schemaMap: TestSchemaMap<T>,
|
|
64
65
|
generators: TestGeneratorMap<T>,
|
|
65
66
|
) {
|
|
66
|
-
super(schemaMap, generators, (type: T) => {
|
|
67
|
+
super(schemaMap, generators, async (type: T) => {
|
|
67
68
|
const schema = this.getSchema(type);
|
|
68
|
-
return (schema && this._space.db.query(Filter.schema(schema)).objects) ?? [];
|
|
69
|
+
return (schema && (await this._space.db.query(Filter.schema(schema)).run()).objects) ?? [];
|
|
69
70
|
});
|
|
70
71
|
|
|
71
72
|
// TODO(burdon): Map initially are objects that have not been added to the space.
|
|
72
73
|
// Merge existing schema in space with defaults.
|
|
73
|
-
const schemas = this._space.db.schemaRegistry.getAll();
|
|
74
74
|
Object.entries<DynamicEchoSchema>(schemaMap).forEach(([type, dynamicSchema]) => {
|
|
75
|
-
let schema =
|
|
75
|
+
let schema = this._space.db.schemaRegistry.getRegisteredByTypename(type);
|
|
76
76
|
if (schema == null) {
|
|
77
77
|
schema = this._space.db.schemaRegistry.add(dynamicSchema.schema);
|
|
78
78
|
}
|
|
@@ -82,9 +82,8 @@ export class SpaceObjectGenerator<T extends string> extends TestObjectGenerator<
|
|
|
82
82
|
|
|
83
83
|
addSchemas() {
|
|
84
84
|
const result: DynamicEchoSchema[] = [];
|
|
85
|
-
const dbSchemas = this._space.db.schemaRegistry.getAll();
|
|
86
85
|
this.schemas.forEach((schema) => {
|
|
87
|
-
const existing =
|
|
86
|
+
const existing = this._space.db.schemaRegistry.getRegisteredByTypename(schema.typename);
|
|
88
87
|
if (existing == null) {
|
|
89
88
|
result.push(this._space.db.schemaRegistry.add(schema.schema));
|
|
90
89
|
} else {
|
|
@@ -95,7 +94,7 @@ export class SpaceObjectGenerator<T extends string> extends TestObjectGenerator<
|
|
|
95
94
|
return result;
|
|
96
95
|
}
|
|
97
96
|
|
|
98
|
-
override createObject({ types }: { types?: T[] } = {}): ReactiveObject<any
|
|
99
|
-
return this._space.db.add(super.createObject({ types }));
|
|
97
|
+
override async createObject({ types }: { types?: T[] } = {}): Promise<ReactiveObject<any>> {
|
|
98
|
+
return this._space.db.add(await super.createObject({ types }));
|
|
100
99
|
}
|
|
101
100
|
}
|
package/src/types.ts
CHANGED
|
@@ -10,4 +10,4 @@ export type TestSchemaMap<T extends string> = Record<T, DynamicEchoSchema>;
|
|
|
10
10
|
|
|
11
11
|
export type TestGeneratorMap<T extends string> = Record<T, (provider: TestObjectProvider<T> | undefined) => any>;
|
|
12
12
|
|
|
13
|
-
export type TestObjectProvider<T extends string> = (type: T) => ReactiveObject<any>[]
|
|
13
|
+
export type TestObjectProvider<T extends string> = (type: T) => Promise<ReactiveObject<any>[]>;
|