@dxos/echo 0.8.1 → 0.8.2-main.10c050d

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.
Files changed (46) hide show
  1. package/README.md +116 -0
  2. package/dist/lib/browser/index.mjs +241 -32
  3. package/dist/lib/browser/index.mjs.map +4 -4
  4. package/dist/lib/browser/meta.json +1 -1
  5. package/dist/lib/node/index.cjs +243 -28
  6. package/dist/lib/node/index.cjs.map +4 -4
  7. package/dist/lib/node/meta.json +1 -1
  8. package/dist/lib/node-esm/index.mjs +241 -32
  9. package/dist/lib/node-esm/index.mjs.map +4 -4
  10. package/dist/lib/node-esm/meta.json +1 -1
  11. package/dist/types/src/Obj.d.ts +39 -0
  12. package/dist/types/src/Obj.d.ts.map +1 -0
  13. package/dist/types/src/Ref.d.ts +11 -0
  14. package/dist/types/src/Ref.d.ts.map +1 -0
  15. package/dist/types/src/Relation.d.ts +19 -0
  16. package/dist/types/src/Relation.d.ts.map +1 -0
  17. package/dist/types/src/Type.d.ts +80 -42
  18. package/dist/types/src/Type.d.ts.map +1 -1
  19. package/dist/types/src/{Database.d.ts → experimental/database.d.ts} +1 -1
  20. package/dist/types/src/experimental/database.d.ts.map +1 -0
  21. package/dist/types/src/experimental/index.d.ts +1 -0
  22. package/dist/types/src/experimental/index.d.ts.map +1 -0
  23. package/dist/types/src/{Queue.d.ts → experimental/queue.d.ts} +1 -1
  24. package/dist/types/src/experimental/queue.d.ts.map +1 -0
  25. package/dist/types/src/{Space.d.ts → experimental/space.d.ts} +1 -1
  26. package/dist/types/src/experimental/space.d.ts.map +1 -0
  27. package/dist/types/src/index.d.ts +5 -5
  28. package/dist/types/src/index.d.ts.map +1 -1
  29. package/dist/types/src/{api.test.d.ts.map → test/api.test.d.ts.map} +1 -1
  30. package/dist/types/tsconfig.tsbuildinfo +1 -1
  31. package/package.json +14 -15
  32. package/src/Obj.ts +86 -0
  33. package/src/Ref.ts +21 -0
  34. package/src/Relation.ts +45 -0
  35. package/src/Type.ts +103 -75
  36. package/src/{Database.ts → experimental/database.ts} +1 -1
  37. package/src/experimental/index.ts +7 -0
  38. package/src/{Queue.ts → experimental/queue.ts} +1 -1
  39. package/src/index.ts +6 -7
  40. package/src/test/api.test.ts +128 -0
  41. package/dist/types/src/Database.d.ts.map +0 -1
  42. package/dist/types/src/Queue.d.ts.map +0 -1
  43. package/dist/types/src/Space.d.ts.map +0 -1
  44. package/src/api.test.ts +0 -94
  45. /package/dist/types/src/{api.test.d.ts → test/api.test.d.ts} +0 -0
  46. /package/src/{Space.ts → experimental/space.ts} +0 -0
package/src/api.test.ts DELETED
@@ -1,94 +0,0 @@
1
- //
2
- // Copyright 2025 DXOS.org
3
- //
4
-
5
- import { Schema as S } from 'effect';
6
- import { describe, test } from 'vitest';
7
-
8
- import { raise } from '@dxos/debug';
9
- import { FormatEnum, FormatAnnotation } from '@dxos/echo-schema';
10
-
11
- // Deliberately testing top-level import as if external consumer for @dxos/echo.
12
- import { Type } from '.';
13
-
14
- namespace Testing {
15
- export const Org = S.Struct({
16
- id: Type.ObjectId,
17
- name: S.String,
18
- }).pipe(
19
- Type.def({
20
- typename: 'example.com/type/Org',
21
- version: '0.1.0',
22
- }),
23
- );
24
-
25
- export interface Org extends S.Schema.Type<typeof Org> {}
26
-
27
- export const Contact = S.Struct({
28
- name: S.String,
29
- dob: S.optional(S.String),
30
- email: S.optional(S.String.pipe(FormatAnnotation.set(FormatEnum.Email))),
31
- org: S.optional(Type.Ref(Org)),
32
- }).pipe(
33
- Type.def({
34
- typename: 'example.com/type/Contact',
35
- version: '0.1.0',
36
- }),
37
- );
38
-
39
- export interface Contact extends S.Schema.Type<typeof Contact> {}
40
-
41
- export const Message = S.Struct({
42
- // TODO(burdon): Support S.Date; Custom Timestamp (with defaults).
43
- // TODO(burdon): Support defaults (update create and createStatic).
44
- timestamp: S.String.pipe(
45
- S.propertySignature,
46
- S.withConstructorDefault(() => new Date().toISOString()),
47
- ),
48
- });
49
-
50
- // TODO(burdon): Fix (Type.def currently removes TypeLiteral that implements the `make` function)..
51
- // }).pipe(
52
- // Type.def({
53
- // typename: 'example.com/type/Message',
54
- // version: '0.1.0',
55
- // }),
56
- // );
57
-
58
- export interface Message extends S.Schema.Type<typeof Message> {}
59
- }
60
-
61
- describe('Experimental API review', () => {
62
- test('type checks', ({ expect }) => {
63
- const contact = Type.create(Testing.Contact, { name: 'Test' });
64
- const type: S.Schema<Testing.Contact> = Type.getSchema(contact) ?? raise(new Error('No schema found'));
65
-
66
- expect(Type.getDXN(type)?.typename).to.eq(Testing.Contact.typename);
67
- expect(Type.getTypename(type)).to.eq('example.com/type/Contact');
68
- expect(Type.getVersion(type)).to.eq('0.1.0');
69
- expect(Type.getMeta(type)).to.deep.eq({
70
- kind: Type.Kind.Object,
71
- typename: 'example.com/type/Contact',
72
- version: '0.1.0',
73
- });
74
- });
75
-
76
- test('instance checks', ({ expect }) => {
77
- // TODO(burdon): Implement.
78
- // const org = Org.create({ name: 'DXOS' });
79
- const org = Type.create(Testing.Org, { name: 'DXOS' });
80
- const contact = Type.create(Testing.Contact, { name: 'Test', org: Type.ref(org) });
81
-
82
- expect(S.is(Testing.Contact)(contact)).to.be.true;
83
- expect(Testing.Contact.instanceOf(contact)).to.be.true;
84
- expect(Type.instanceOf(Testing.Contact, contact)).to.be.true;
85
- expect(Type.instanceOf(Testing.Org, contact.org?.target)).to.be.true;
86
- });
87
-
88
- test('default props', ({ expect }) => {
89
- // TODO(burdon): Doesn't work after pipe(Type.def).
90
- // Property 'make' does not exist on type 'EchoObjectSchema<Struct<{ timestamp: PropertySignature<":", string, never, ":", string, true, never>; }>>'.ts(2339)
91
- const message = Type.create(Testing.Message, Testing.Message.make({}));
92
- expect(message.timestamp).to.exist;
93
- });
94
- });
File without changes