@dxos/echo-db 2.31.1-dev.b7e357e5 → 2.31.2-dev.ab9a89e2

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.
@@ -3,5 +3,6 @@ export * from './entity';
3
3
  export * from './item';
4
4
  export * from './link';
5
5
  export * from './result-set';
6
+ export * from './schema';
6
7
  export * from './selection';
7
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/api/index.ts"],"names":[],"mappings":"AAIA,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC;AACvB,cAAc,QAAQ,CAAC;AACvB,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/api/index.ts"],"names":[],"mappings":"AAIA,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC;AACvB,cAAc,QAAQ,CAAC;AACvB,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC"}
@@ -18,5 +18,6 @@ __exportStar(require("./entity"), exports);
18
18
  __exportStar(require("./item"), exports);
19
19
  __exportStar(require("./link"), exports);
20
20
  __exportStar(require("./result-set"), exports);
21
+ __exportStar(require("./schema"), exports);
21
22
  __exportStar(require("./selection"), exports);
22
23
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/api/index.ts"],"names":[],"mappings":";AAAA,EAAE;AACF,0BAA0B;AAC1B,EAAE;;;;;;;;;;;;AAEF,6CAA2B;AAC3B,2CAAyB;AACzB,yCAAuB;AACvB,yCAAuB;AACvB,+CAA6B;AAC7B,8CAA4B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/api/index.ts"],"names":[],"mappings":";AAAA,EAAE;AACF,0BAA0B;AAC1B,EAAE;;;;;;;;;;;;AAEF,6CAA2B;AAC3B,2CAAyB;AACzB,yCAAuB;AACvB,yCAAuB;AACvB,+CAA6B;AAC7B,2CAAyB;AACzB,8CAA4B"}
@@ -0,0 +1,32 @@
1
+ import { ObjectModel } from '@dxos/object-model';
2
+ export declare const TYPE_SCHEMA = "dxos:type/schema";
3
+ export declare type FieldType = 'string' | 'number' | 'boolean' | 'ref';
4
+ export declare type SchemaRef = {
5
+ schema: string;
6
+ field: string;
7
+ };
8
+ export declare type SchemaField = {
9
+ key: string;
10
+ type?: FieldType;
11
+ required: boolean;
12
+ ref?: SchemaRef;
13
+ };
14
+ export declare type SchemaDef = {
15
+ schema: string;
16
+ fields: SchemaField[];
17
+ };
18
+ /**
19
+ * Wrapper for ECHO Item that represents an `ObjectModel` schema.
20
+ */
21
+ export declare class Schema {
22
+ private readonly _schema;
23
+ constructor(_schema: ObjectModel);
24
+ get schema(): string;
25
+ get fields(): SchemaField[];
26
+ getField(key: string): SchemaField | undefined;
27
+ validate(model: ObjectModel): boolean;
28
+ addField(newField: SchemaField): Promise<void>;
29
+ editField(currentKey: string, editedField: SchemaField): Promise<void>;
30
+ deleteField(key: string): Promise<void>;
31
+ }
32
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/api/schema.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,eAAO,MAAM,WAAW,qBAAqB,CAAC;AAE9C,oBAAY,SAAS,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,KAAK,CAAA;AAI/D,oBAAY,SAAS,GAAG;IACtB,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;CACd,CAAA;AAED,oBAAY,WAAW,GAAG;IACxB,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,QAAQ,EAAE,OAAO,CAAA;IACjB,GAAG,CAAC,EAAE,SAAS,CAAA;CAChB,CAAA;AAED,oBAAY,SAAS,GAAG;IACtB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,WAAW,EAAE,CAAA;CACtB,CAAA;AAED;;GAEG;AACH,qBAAa,MAAM;IAEf,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,WAAW;IAGvC,IAAI,MAAM,IAAK,MAAM,CAEpB;IAED,IAAI,MAAM,IAAK,WAAW,EAAE,CAE3B;IAED,QAAQ,CAAE,GAAG,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;IAK/C,QAAQ,CAAE,KAAK,EAAE,WAAW;IAyBtB,QAAQ,CAAE,QAAQ,EAAE,WAAW;IAU/B,SAAS,CAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW;IAUvD,WAAW,CAAE,GAAG,EAAE,MAAM;CAI/B"}
@@ -0,0 +1,72 @@
1
+ "use strict";
2
+ //
3
+ // Copyright 2022 DXOS.org
4
+ //
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.Schema = exports.TYPE_SCHEMA = void 0;
7
+ exports.TYPE_SCHEMA = 'dxos:type/schema';
8
+ /**
9
+ * Wrapper for ECHO Item that represents an `ObjectModel` schema.
10
+ */
11
+ class Schema {
12
+ constructor(_schema) {
13
+ this._schema = _schema;
14
+ }
15
+ get schema() {
16
+ return this._schema.get('schema');
17
+ }
18
+ get fields() {
19
+ var _a;
20
+ return Object.values((_a = this._schema.get('fields')) !== null && _a !== void 0 ? _a : {});
21
+ }
22
+ getField(key) {
23
+ return this.fields.find(field => field.key === key);
24
+ }
25
+ // TODO(kaplanski): What happens if an item has extra properties?
26
+ validate(model) {
27
+ this.fields.forEach(field => {
28
+ const value = model.get(field.key);
29
+ if (field.required) {
30
+ if (!value) {
31
+ return false;
32
+ }
33
+ }
34
+ if (field.type) {
35
+ if (typeof value !== field.type) {
36
+ return false;
37
+ }
38
+ }
39
+ if (field.ref) {
40
+ // TODO(kaplanski): Should this class have access to all items in the party to validate?
41
+ // Or maybe possible values should be provided?
42
+ }
43
+ });
44
+ return true;
45
+ }
46
+ // TODO(kaplanski): Should the field be added to each item using the schema in the party? (Empty value?)
47
+ // TODO(kaplanski): Should the type be infered from the first value added?
48
+ async addField(newField) {
49
+ const newFields = [
50
+ ...this.fields,
51
+ newField
52
+ ];
53
+ // TODO(kaplanski): Create a SET mutation to just modify the field (not all fields).
54
+ await this._schema.set('fields', newFields);
55
+ }
56
+ // TODO(kaplanski): Should editing a field modify all existing items using this schema?
57
+ async editField(currentKey, editedField) {
58
+ const newFields = this.fields.map(field => {
59
+ if (field.key === currentKey) {
60
+ return editedField;
61
+ }
62
+ return field;
63
+ });
64
+ await this._schema.set('fields', newFields);
65
+ }
66
+ async deleteField(key) {
67
+ const newFields = this.fields.filter(field => field.key !== key);
68
+ await this._schema.set('fields', newFields);
69
+ }
70
+ }
71
+ exports.Schema = Schema;
72
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/api/schema.ts"],"names":[],"mappings":";AAAA,EAAE;AACF,0BAA0B;AAC1B,EAAE;;;AAIW,QAAA,WAAW,GAAG,kBAAkB,CAAC;AAuB9C;;GAEG;AACH,MAAa,MAAM;IACjB,YACmB,OAAoB;QAApB,YAAO,GAAP,OAAO,CAAa;IACpC,CAAC;IAEJ,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACpC,CAAC;IAED,IAAI,MAAM;;QACR,OAAO,MAAM,CAAC,MAAM,CAAC,MAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,mCAAI,EAAE,CAAC,CAAC;IACzD,CAAC;IAED,QAAQ,CAAE,GAAW;QACnB,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;IACtD,CAAC;IAED,iEAAiE;IACjE,QAAQ,CAAE,KAAkB;QAC1B,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YAC1B,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACnC,IAAI,KAAK,CAAC,QAAQ,EAAE;gBAClB,IAAI,CAAC,KAAK,EAAE;oBACV,OAAO,KAAK,CAAC;iBACd;aACF;YAED,IAAI,KAAK,CAAC,IAAI,EAAE;gBACd,IAAI,OAAO,KAAK,KAAK,KAAK,CAAC,IAAI,EAAE;oBAC/B,OAAO,KAAK,CAAC;iBACd;aACF;YAED,IAAI,KAAK,CAAC,GAAG,EAAE;gBACb,wFAAwF;gBACxF,+CAA+C;aAChD;QACH,CAAC,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;IAED,wGAAwG;IACxG,0EAA0E;IAC1E,KAAK,CAAC,QAAQ,CAAE,QAAqB;QACnC,MAAM,SAAS,GAAG;YAChB,GAAG,IAAI,CAAC,MAAM;YACd,QAAQ;SACT,CAAC;QACF,oFAAoF;QACpF,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IAC9C,CAAC;IAED,uFAAuF;IACvF,KAAK,CAAC,SAAS,CAAE,UAAkB,EAAE,WAAwB;QAC3D,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;YACxC,IAAI,KAAK,CAAC,GAAG,KAAK,UAAU,EAAE;gBAC5B,OAAO,WAAW,CAAC;aACpB;YACD,OAAO,KAAK,CAAC;QACf,CAAC,CAAC,CAAC;QACH,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IAC9C,CAAC;IAED,KAAK,CAAC,WAAW,CAAE,GAAW;QAC5B,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;QACjE,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IAC9C,CAAC;CACF;AAnED,wBAmEC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=schema.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.test.d.ts","sourceRoot":"","sources":["../../../src/api/schema.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,157 @@
1
+ "use strict";
2
+ //
3
+ // Copyright 2022 DXOS.org
4
+ //
5
+ var __importDefault = (this && this.__importDefault) || function (mod) {
6
+ return (mod && mod.__esModule) ? mod : { "default": mod };
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ const chalk_1 = __importDefault(require("chalk"));
10
+ const columnify_1 = __importDefault(require("columnify"));
11
+ const expect_1 = __importDefault(require("expect"));
12
+ const faker_1 = __importDefault(require("faker"));
13
+ const debug_1 = require("@dxos/debug");
14
+ const testing_1 = require("../testing");
15
+ const schema_1 = require("./schema");
16
+ var TestType;
17
+ (function (TestType) {
18
+ TestType["Org"] = "example:type/org";
19
+ TestType["Person"] = "example:type/person";
20
+ })(TestType || (TestType = {}));
21
+ const schemaDefs = {
22
+ [TestType.Org]: {
23
+ schema: 'example:type/schema/organization',
24
+ fields: [
25
+ {
26
+ key: 'title',
27
+ required: true,
28
+ generator: () => faker_1.default.company.companyName()
29
+ },
30
+ {
31
+ key: 'website',
32
+ required: false,
33
+ generator: () => faker_1.default.internet.url()
34
+ },
35
+ {
36
+ key: 'collaborators',
37
+ required: false,
38
+ generator: () => faker_1.default.datatype.number().toString()
39
+ }
40
+ ]
41
+ },
42
+ [TestType.Person]: {
43
+ schema: 'example:type/schema/person',
44
+ fields: [
45
+ {
46
+ key: 'title',
47
+ required: true,
48
+ generator: () => `${faker_1.default.name.firstName()} ${faker_1.default.name.lastName()}`
49
+ }
50
+ ]
51
+ }
52
+ };
53
+ describe('Schemas', () => {
54
+ it('creation of Schema', async () => (0, testing_1.setup)(async (database) => {
55
+ const [schema] = await (0, testing_1.createSchemas)(database, [schemaDefs[TestType.Org]]);
56
+ (0, expect_1.default)(schema.schema).toBe(schemaDefs[TestType.Org].schema);
57
+ (0, expect_1.default)(schema.fields[0].key).toBe('title');
58
+ }));
59
+ it('add Schema field', async () => (0, testing_1.setup)(async (database) => {
60
+ const [schema] = await (0, testing_1.createSchemas)(database, [schemaDefs[TestType.Org]]);
61
+ const newField = {
62
+ key: 'location',
63
+ required: true
64
+ };
65
+ await schema.addField(newField);
66
+ (0, expect_1.default)(schema.getField('location')).toBeTruthy();
67
+ }));
68
+ it('add Schema linked field', async () => (0, testing_1.setup)(async (database) => {
69
+ const [orgSchema, personSchema] = await (0, testing_1.createSchemas)(database, Object.values(schemaDefs));
70
+ const fieldRef = {
71
+ key: 'organization',
72
+ required: false,
73
+ ref: {
74
+ schema: orgSchema.schema,
75
+ field: orgSchema.fields[0].key
76
+ }
77
+ };
78
+ await personSchema.addField(fieldRef);
79
+ await (0, testing_1.createData)(database, Object.values(schemaDefs), {
80
+ [schemaDefs[TestType.Org].schema]: 8,
81
+ [schemaDefs[TestType.Person].schema]: 16
82
+ });
83
+ const items = await database.select().exec().entities;
84
+ [orgSchema, personSchema].forEach(schema => {
85
+ items.forEach(item => {
86
+ (0, expect_1.default)(schema.validate(item.model)).toBeTruthy();
87
+ });
88
+ });
89
+ }));
90
+ it('Use schema to validate the fields of an item', () => (0, testing_1.setup)(async (database) => {
91
+ await (0, testing_1.createSchemas)(database, Object.values(schemaDefs));
92
+ await (0, testing_1.createData)(database, Object.values(schemaDefs), {
93
+ [schemaDefs[TestType.Org].schema]: 8,
94
+ [schemaDefs[TestType.Person].schema]: 16
95
+ });
96
+ const { entities: schemas } = database
97
+ .select({ type: schema_1.TYPE_SCHEMA })
98
+ .exec();
99
+ const { entities: orgs } = database
100
+ .select({ type: TestType.Org })
101
+ .exec();
102
+ const { entities: people } = database
103
+ .select({ type: TestType.Person })
104
+ .exec();
105
+ [...orgs, ...people].forEach(item => {
106
+ const schemaItem = schemas.find(schema => schema.model.get('schema') === item.type);
107
+ const schema = new schema_1.Schema(schemaItem.model);
108
+ (0, expect_1.default)(schema.validate(item.model)).toBeTruthy();
109
+ });
110
+ // Log tables.
111
+ schemas.forEach(schema => {
112
+ const type = schema.model.get('schema');
113
+ const { entities: items } = database.select({ type }).exec();
114
+ (0, testing_1.log)(renderItems(schema, items, database));
115
+ });
116
+ }));
117
+ });
118
+ /**
119
+ * Log the items for the given schema.
120
+ * @param schema
121
+ * @param items
122
+ * @param [party]
123
+ */
124
+ const renderItems = (schema, items, database) => {
125
+ const fields = Object.values(schema.model.get('fields'));
126
+ const columns = fields.map(({ key }) => key);
127
+ const logKey = (id) => (0, debug_1.truncateKey)(id, 4);
128
+ const logString = (value) => (0, debug_1.truncate)(value, 24, true);
129
+ const values = items.map(item => {
130
+ return fields.reduce((row, { key, type, ref }) => {
131
+ const value = item.model.get(key);
132
+ switch (type) {
133
+ case 'string': {
134
+ row[key] = chalk_1.default.green(logString(value));
135
+ break;
136
+ }
137
+ case 'ref': {
138
+ if (database) {
139
+ const { field } = ref;
140
+ const item = database.getItem(value);
141
+ row[key] = chalk_1.default.red(logString(item === null || item === void 0 ? void 0 : item.model.get(field)));
142
+ }
143
+ else {
144
+ row[key] = chalk_1.default.red(logKey(value));
145
+ }
146
+ break;
147
+ }
148
+ default: {
149
+ row[key] = value;
150
+ }
151
+ }
152
+ return row;
153
+ }, { id: chalk_1.default.blue(logKey(item.id)) });
154
+ });
155
+ return (0, columnify_1.default)(values, { columns: ['id', ...columns] });
156
+ };
157
+ //# sourceMappingURL=schema.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.test.js","sourceRoot":"","sources":["../../../src/api/schema.test.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,10 @@
1
+ import debug from 'debug';
1
2
  import { NetworkManagerOptions } from '@dxos/network-manager';
2
3
  import { IStorage } from '@dxos/random-access-multi-storage';
4
+ import { Database, Schema, SchemaDef, SchemaField } from '../api';
3
5
  import { ECHO } from '../echo';
4
6
  import { PartyInternal } from '../parties';
7
+ export declare const log: debug.Debugger;
5
8
  export declare const messageLogger: (tag: string) => (message: any) => void;
6
9
  export interface TestOptions {
7
10
  verboseLogging?: boolean;
@@ -22,4 +25,28 @@ export declare const createTestInstance: ({ verboseLogging, initialize, storage,
22
25
  * @returns Party instance on provided test instance.
23
26
  */
24
27
  export declare const inviteTestPeer: (party: PartyInternal, peer: ECHO) => Promise<PartyInternal>;
28
+ export declare type SchemaFieldWithGenerator = SchemaField & {
29
+ generator: () => string;
30
+ };
31
+ export declare type SchemaDefWithGenerator = Omit<SchemaDef, 'fields'> & {
32
+ fields: SchemaFieldWithGenerator[];
33
+ };
34
+ declare type Callback = (party: Database) => Promise<void>;
35
+ export declare const setup: (callback: Callback) => Promise<void>;
36
+ /**
37
+ * Create schema items.
38
+ */
39
+ export declare const createSchemas: (database: Database, schemas: SchemaDefWithGenerator[]) => Promise<Schema[]>;
40
+ /**
41
+ * Create items for a given schema.
42
+ * NOTE: Assumes that referenced items have already been constructed.
43
+ */
44
+ export declare const createItems: (database: Database, { schema, fields }: SchemaDefWithGenerator, numItems: number) => Promise<import("../api").Item<import("@dxos/model-factory").Model<any, any>>[]>;
45
+ /**
46
+ * Create data for all schemas.
47
+ */
48
+ export declare const createData: (database: Database, schemas: SchemaDefWithGenerator[], options?: {
49
+ [key: string]: number;
50
+ }) => Promise<void>;
51
+ export {};
25
52
  //# sourceMappingURL=testing.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"testing.d.ts","sourceRoot":"","sources":["../../../src/testing/testing.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAE,MAAM,mCAAmC,CAAC;AAG7D,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAC/B,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAK3C,eAAO,MAAM,aAAa,QAAS,MAAM,eAAe,GAAG,SAE1D,CAAC;AAEF,MAAM,WAAW,WAAW;IAC1B,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,OAAO,CAAC,EAAE,GAAG,CAAA;IACb,UAAU,CAAC,EAAE,GAAG,CAAA;IAChB,qBAAqB,CAAC,EAAE,qBAAqB,CAAA;IAE7C,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,eAAe,CAAC,EAAE,QAAQ,CAAA;CAC3B;AAED;;GAEG;AACH,eAAO,MAAM,kBAAkB,8HAS5B,WAAW,kBAuBb,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,cAAc,UAAiB,aAAa,QAAQ,IAAI,KAAG,QAAQ,aAAa,CAM5F,CAAC"}
1
+ {"version":3,"file":"testing.d.ts","sourceRoot":"","sources":["../../../src/testing/testing.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,MAAM,OAAO,CAAC;AAK1B,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAE9D,OAAO,EAAE,QAAQ,EAAE,MAAM,mCAAmC,CAAC;AAG7D,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,EAAe,MAAM,QAAQ,CAAC;AAE/E,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAC/B,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAG3C,eAAO,MAAM,GAAG,gBAAgC,CAAC;AAEjD,eAAO,MAAM,aAAa,QAAS,MAAM,eAAe,GAAG,SAE1D,CAAC;AAEF,MAAM,WAAW,WAAW;IAC1B,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,OAAO,CAAC,EAAE,GAAG,CAAA;IACb,UAAU,CAAC,EAAE,GAAG,CAAA;IAChB,qBAAqB,CAAC,EAAE,qBAAqB,CAAA;IAE7C,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,eAAe,CAAC,EAAE,QAAQ,CAAA;CAC3B;AAED;;GAEG;AACH,eAAO,MAAM,kBAAkB,8HAS5B,WAAW,kBAuBb,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,cAAc,UAAiB,aAAa,QAAQ,IAAI,KAAG,QAAQ,aAAa,CAM5F,CAAC;AAEF,oBAAY,wBAAwB,GAAG,WAAW,GAAG;IAAE,SAAS,EAAE,MAAM,MAAM,CAAA;CAAE,CAAA;AAChF,oBAAY,sBAAsB,GAAG,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,GAAG;IAAE,MAAM,EAAE,wBAAwB,EAAE,CAAA;CAAE,CAAC;AAExG,aAAK,QAAQ,GAAG,CAAC,KAAK,EAAE,QAAQ,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;AAElD,eAAO,MAAM,KAAK,aAAoB,QAAQ,kBAQ7C,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,aAAa,aAAoB,QAAQ,WAAW,sBAAsB,EAAE,sBAqBxF,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,WAAW,aAAoB,QAAQ,sBAAsB,sBAAsB,YAAY,MAAM,oFA2BjH,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,UAAU,aAAoB,QAAQ,WAAW,sBAAsB,EAAE;;mBAQrF,CAAC"}
@@ -6,15 +6,20 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
6
6
  return (mod && mod.__esModule) ? mod : { "default": mod };
7
7
  };
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
- exports.inviteTestPeer = exports.createTestInstance = exports.messageLogger = void 0;
9
+ exports.createData = exports.createItems = exports.createSchemas = exports.setup = exports.inviteTestPeer = exports.createTestInstance = exports.messageLogger = exports.log = void 0;
10
10
  const debug_1 = __importDefault(require("debug"));
11
+ const faker_1 = __importDefault(require("faker"));
11
12
  const crypto_1 = require("@dxos/crypto");
13
+ const model_factory_1 = require("@dxos/model-factory");
14
+ const object_model_1 = require("@dxos/object-model");
12
15
  const util_1 = require("@dxos/util");
16
+ const api_1 = require("../api");
17
+ const database_1 = require("../database");
13
18
  const echo_1 = require("../echo");
14
19
  const util_2 = require("../util");
15
- const log = (0, debug_1.default)('dxos:echo-db:testing');
20
+ exports.log = (0, debug_1.default)('dxos:echo-db:testing');
16
21
  const messageLogger = (tag) => (message) => {
17
- log(tag, JSON.stringify(message, util_1.jsonReplacer, 2));
22
+ (0, exports.log)(tag, JSON.stringify(message, util_1.jsonReplacer, 2));
18
23
  };
19
24
  exports.messageLogger = messageLogger;
20
25
  /**
@@ -54,4 +59,83 @@ const inviteTestPeer = async (party, peer) => {
54
59
  return peer.joinParty(invitation, async () => Buffer.from('0000'));
55
60
  };
56
61
  exports.inviteTestPeer = inviteTestPeer;
62
+ const setup = async (callback) => {
63
+ const modelFactory = new model_factory_1.ModelFactory().registerModel(object_model_1.ObjectModel);
64
+ const database = await (0, database_1.createInMemoryDatabase)(modelFactory);
65
+ try {
66
+ await callback(database);
67
+ }
68
+ finally {
69
+ await database.destroy();
70
+ }
71
+ };
72
+ exports.setup = setup;
73
+ /**
74
+ * Create schema items.
75
+ */
76
+ const createSchemas = async (database, schemas) => {
77
+ (0, exports.log)(`Creating schemas: [${schemas.map(({ schema }) => schema).join()}]`);
78
+ const schemaItems = await Promise.all(schemas.map(({ schema, fields }) => {
79
+ const schemaFields = fields.map(fieldWithGenerator => {
80
+ // eslint-disable-next-line unused-imports/no-unused-vars
81
+ const { generator, ...field } = fieldWithGenerator;
82
+ return field;
83
+ }).flat();
84
+ return database.createItem({
85
+ model: object_model_1.ObjectModel,
86
+ type: api_1.TYPE_SCHEMA,
87
+ props: {
88
+ schema,
89
+ fields: schemaFields
90
+ }
91
+ });
92
+ }));
93
+ return schemaItems.map(item => new api_1.Schema(item.model));
94
+ };
95
+ exports.createSchemas = createSchemas;
96
+ /**
97
+ * Create items for a given schema.
98
+ * NOTE: Assumes that referenced items have already been constructed.
99
+ */
100
+ const createItems = async (database, { schema, fields }, numItems) => {
101
+ (0, exports.log)(`Creating items for: ${schema}`);
102
+ return await Promise.all(Array.from({ length: numItems }).map(async () => {
103
+ const values = fields.map(field => {
104
+ if (field.ref) {
105
+ // Look-up item.
106
+ const { entities: items } = database.select().filter({ type: field.ref.schema }).exec();
107
+ if (items.length) {
108
+ return {
109
+ [field.key]: faker_1.default.random.arrayElement(items).id
110
+ };
111
+ }
112
+ }
113
+ else {
114
+ return {
115
+ [field.key]: field.generator()
116
+ };
117
+ }
118
+ return undefined;
119
+ }).filter(Boolean);
120
+ return await database.createItem({
121
+ type: schema,
122
+ props: Object.assign({}, ...values)
123
+ });
124
+ }));
125
+ };
126
+ exports.createItems = createItems;
127
+ /**
128
+ * Create data for all schemas.
129
+ */
130
+ const createData = async (database, schemas, options = {}) => {
131
+ var _a;
132
+ // Synchronous loop.
133
+ for (const schema of schemas) {
134
+ const count = (_a = options[schema.schema]) !== null && _a !== void 0 ? _a : 0;
135
+ if (count) {
136
+ await (0, exports.createItems)(database, schema, count);
137
+ }
138
+ }
139
+ };
140
+ exports.createData = createData;
57
141
  //# sourceMappingURL=testing.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"testing.js","sourceRoot":"","sources":["../../../src/testing/testing.ts"],"names":[],"mappings":";AAAA,EAAE;AACF,0BAA0B;AAC1B,EAAE;;;;;;AAEF,kDAA0B;AAE1B,yCAA6C;AAG7C,qCAA0C;AAE1C,kCAA+B;AAE/B,kCAA2C;AAE3C,MAAM,GAAG,GAAG,IAAA,eAAK,EAAC,sBAAsB,CAAC,CAAC;AAEnC,MAAM,aAAa,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,CAAC,OAAY,EAAE,EAAE;IAC7D,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,mBAAY,EAAE,CAAC,CAAC,CAAC,CAAC;AACrD,CAAC,CAAC;AAFW,QAAA,aAAa,iBAExB;AAcF;;GAEG;AACI,MAAM,kBAAkB,GAAG,KAAK,EAAE,EACvC,cAAc,GAAG,KAAK,EACtB,UAAU,GAAG,KAAK,EAClB,OAAO,GAAG,IAAA,uBAAgB,GAAE,EAC5B,UAAU,GAAG,SAAS,EACtB,qBAAqB,EACrB,eAAe,GAAG,IAAA,uBAAgB,GAAE,EACpC,SAAS,GAAG,IAAI,EAChB,gBAAgB,KACD,EAAE,EAAE,EAAE;IACrB,MAAM,IAAI,GAAG,IAAI,WAAI,CAAC;QACpB,WAAW,EAAE,OAAO;QACpB,UAAU;QACV,eAAe;QACf,gBAAgB;QAChB,SAAS;QACT,qBAAqB;QACrB,UAAU,EAAE,cAAc,CAAC,CAAC,CAAC,IAAA,qBAAa,EAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS;QAC7D,WAAW,EAAE,cAAc,CAAC,CAAC,CAAC,IAAA,qBAAa,EAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS;KAC/D,CAAC,CAAC;IAEH,IAAI,UAAU,EAAE;QACd,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YAC1B,MAAM,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,IAAA,sBAAa,GAAE,CAAC,CAAC;SACjD;QACD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;YAC5B,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;SAC1B;KACF;IAED,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAhCW,QAAA,kBAAkB,sBAgC7B;AAEF;;;GAGG;AACI,MAAM,cAAc,GAAG,KAAK,EAAE,KAAoB,EAAE,IAAU,EAA0B,EAAE;IAC/F,MAAM,UAAU,GAAG,MAAM,KAAK,CAAC,iBAAiB,CAAC,gBAAgB,CAAC;QAChE,eAAe,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI;KAClC,CAAC,CAAC;IAEH,OAAO,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,KAAK,IAAI,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AACrE,CAAC,CAAC;AANW,QAAA,cAAc,kBAMzB"}
1
+ {"version":3,"file":"testing.js","sourceRoot":"","sources":["../../../src/testing/testing.ts"],"names":[],"mappings":"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"}