@ekairos/domain 1.21.3-beta.0 → 1.21.4-beta.0

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.
@@ -0,0 +1,67 @@
1
+ import { i } from "@instantdb/core";
2
+ import type { EntitiesDef, LinksDef, RoomsDef, InstantSchemaDef, EntityDef } from "@instantdb/core";
3
+ export type DomainDefinition<E extends EntitiesDef, L extends LinksDef<E>, R extends RoomsDef> = {
4
+ entities: E;
5
+ links: L;
6
+ rooms: R;
7
+ };
8
+ export type DomainInstance<E extends EntitiesDef, L extends LinksDef<E>, R extends RoomsDef> = DomainDefinition<E, L, R> & {
9
+ schema: () => any;
10
+ compose: <E2 extends EntitiesDef, L2 extends LinksDef<E2>, R2 extends RoomsDef>(other: DomainInstance<E2, L2, R2> | DomainDefinition<E2, L2, R2>) => DomainInstance<E & E2, LinksDef<E & E2>, R & R2>;
11
+ };
12
+ export type SchemaOf<D extends DomainDefinition<any, any, any> | DomainSchemaResult<any, any, any>> = D extends DomainSchemaResult<any, any, any> ? ReturnType<D["toInstantSchema"]> : InstantSchemaDef<D["entities"], LinksDef<D["entities"]>, D["rooms"]>;
13
+ type EntitiesOf<S> = S extends InstantSchemaDef<infer E, any, any> ? E : never;
14
+ type LinksOf<S> = S extends InstantSchemaDef<any, infer L, any> ? L : never;
15
+ /**
16
+ * Verifies that Full schema includes all entities and links from Required schema.
17
+ * Returns Full if compatible, never otherwise.
18
+ */
19
+ type EnsureIncludesSchema<Full extends InstantSchemaDef<any, any, any>, Required extends InstantSchemaDef<any, any, any>> = {
20
+ [K in keyof EntitiesOf<Required>]: K extends keyof EntitiesOf<Full> ? (EntitiesOf<Full>[K] extends EntitiesOf<Required>[K] ? unknown : never) : never;
21
+ }[keyof EntitiesOf<Required>] extends never ? ({
22
+ [K in keyof LinksOf<Required>]: K extends keyof LinksOf<Full> ? (LinksOf<Full>[K] extends LinksOf<Required>[K] ? unknown : never) : never;
23
+ }[keyof LinksOf<Required>] extends never ? Full : never) : never;
24
+ /**
25
+ * Schema S restricted to be compatible with RequiredDomain.
26
+ * Returns S if compatible, never otherwise.
27
+ *
28
+ * This is a generic helper that works with any database type wrapper.
29
+ * Consumers should wrap it with their specific DB type (e.g., InstantAdminDatabase).
30
+ *
31
+ * Usage in @ekairos/story:
32
+ * ```ts
33
+ * import type { InstantAdminDatabase } from "@instantdb/admin";
34
+ *
35
+ * export function createAgent<S extends InstantSchemaDef<any, any, any>>(
36
+ * db: InstantAdminDatabase<CompatibleSchemaForDomain<S, typeof storyDomain>>
37
+ * ): CreateAgentEntry
38
+ * ```
39
+ */
40
+ export type CompatibleSchemaForDomain<S extends InstantSchemaDef<any, any, any>, RequiredDomain extends DomainDefinition<any, any, any> | DomainSchemaResult<any, any, any> | DomainInstance<any, any, any>> = EnsureIncludesSchema<S, SchemaOf<RequiredDomain>>;
41
+ type MergeEntities<A extends EntitiesDef, B extends EntitiesDef> = {
42
+ [K in keyof A | keyof B]: K extends keyof A ? A[K] : K extends keyof B ? B[K] : never;
43
+ };
44
+ type MergeLinks<A extends LinksDef<any>, B extends LinksDef<any>> = {
45
+ [K in keyof A | keyof B]: K extends keyof A ? A[K] : K extends keyof B ? B[K] : never;
46
+ };
47
+ export type DomainSchemaResult<E extends EntitiesDef = EntitiesDef, L extends LinksDef<any> = LinksDef<any>, R extends RoomsDef = RoomsDef> = ReturnType<typeof i.schema<WithBase<E>, L, R>> & {
48
+ readonly originalEntities: E;
49
+ toInstantSchema: () => ReturnType<typeof i.schema<WithBase<E>, L, R>>;
50
+ };
51
+ type BaseEntitiesPhantom = {
52
+ $users: EntityDef<any, any, any>;
53
+ $files: EntityDef<any, any, any>;
54
+ };
55
+ type WithBase<E extends EntitiesDef> = MergeEntities<E, BaseEntitiesPhantom>;
56
+ export type DomainBuilder<AccumE extends EntitiesDef, AccumL extends LinksDef<any> = LinksDef<any>> = {
57
+ includes<E2 extends EntitiesDef, L2 extends LinksDef<any> = {}>(other: DomainInstance<E2, L2, any> | DomainSchemaResult<E2, L2, any> | InstantSchemaDef<E2, L2, any> | (() => DomainInstance<E2, L2, any> | DomainSchemaResult<E2, L2, any> | InstantSchemaDef<E2, L2, any>) | undefined): DomainBuilder<MergeEntities<AccumE, E2>, MergeLinks<AccumL, L2>>;
58
+ schema<LE extends EntitiesDef, const LL extends LinksDef<WithBase<MergeEntities<AccumE, LE>>>>(def: {
59
+ entities: LE;
60
+ links: LL;
61
+ rooms: RoomsDef;
62
+ }): DomainSchemaResult<MergeEntities<AccumE, LE>, MergeLinks<AccumL, LL>, RoomsDef>;
63
+ };
64
+ export declare function domain<E extends EntitiesDef, L extends LinksDef<E>, R extends RoomsDef>(def: DomainDefinition<E, L, R>): DomainInstance<E, L, R>;
65
+ export declare function domain(name?: string): DomainBuilder<{}, {}>;
66
+ export {};
67
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js ADDED
@@ -0,0 +1,200 @@
1
+ import { i } from "@instantdb/core";
2
+ function makeInstance(def) {
3
+ function schema() {
4
+ return i.schema({
5
+ entities: def.entities,
6
+ links: def.links,
7
+ rooms: def.rooms,
8
+ });
9
+ }
10
+ function compose(other) {
11
+ const otherDef = "schema" in other
12
+ ? { entities: other.entities, links: other.links, rooms: other.rooms }
13
+ : other;
14
+ const mergedEntities = { ...def.entities, ...otherDef.entities };
15
+ const mergedLinks = { ...def.links, ...otherDef.links };
16
+ const mergedRooms = { ...def.rooms, ...otherDef.rooms };
17
+ return makeInstance({
18
+ entities: mergedEntities,
19
+ links: mergedLinks,
20
+ rooms: mergedRooms,
21
+ });
22
+ }
23
+ return {
24
+ entities: def.entities,
25
+ links: def.links,
26
+ rooms: def.rooms,
27
+ schema,
28
+ compose,
29
+ };
30
+ }
31
+ // Impl
32
+ export function domain(arg) {
33
+ if (typeof arg === "object" && arg !== null) {
34
+ // classic API path: def provided directly
35
+ const def = arg;
36
+ return makeInstance(def);
37
+ }
38
+ // builder API - runtime state tracks accumulated dependencies
39
+ // Support lazy includes for circular dependencies by storing references and resolving at schema()/toInstantSchema() time
40
+ // AL preserves literal link keys from included domains
41
+ function createBuilder(deps, linkDeps, lazyIncludes = []) {
42
+ return {
43
+ includes(other) {
44
+ // Support lazy includes via function for circular dependencies
45
+ if (typeof other === 'function') {
46
+ const lazyGetter = () => {
47
+ try {
48
+ return other();
49
+ }
50
+ catch (e) {
51
+ return undefined;
52
+ }
53
+ };
54
+ // Preserve link literal keys using MergeLinks
55
+ return createBuilder(deps, linkDeps, [...lazyIncludes, lazyGetter]);
56
+ }
57
+ // If other is undefined (circular dependency), store a lazy getter
58
+ // Entities will be resolved from app domain composition at toInstantSchema() time
59
+ if (!other || other === undefined) {
60
+ // Create a lazy getter that returns undefined
61
+ // Entities will be available from app domain's merged entities when toInstantSchema() is called
62
+ const lazyGetter = () => undefined;
63
+ // Preserve link literal keys
64
+ return createBuilder(deps, linkDeps, [...lazyIncludes, lazyGetter]);
65
+ }
66
+ // Try to get entities and links immediately
67
+ try {
68
+ const entities = other.entities;
69
+ if (!entities) {
70
+ // If entities don't exist yet, store as lazy
71
+ const lazyGetter = () => other;
72
+ // Preserve link literal keys
73
+ return createBuilder(deps, linkDeps, [...lazyIncludes, lazyGetter]);
74
+ }
75
+ const links = other.links;
76
+ const mergedEntities = { ...deps, ...entities };
77
+ // Preserve literal link keys by merging directly (not casting to LinksDef)
78
+ const mergedLinks = (links ? { ...linkDeps, ...links } : { ...linkDeps });
79
+ return createBuilder(mergedEntities, mergedLinks, lazyIncludes);
80
+ }
81
+ catch (e) {
82
+ // If accessing entities throws, store as lazy
83
+ const lazyGetter = () => other;
84
+ // Preserve link literal keys
85
+ return createBuilder(deps, linkDeps, [...lazyIncludes, lazyGetter]);
86
+ }
87
+ },
88
+ schema(def) {
89
+ // Resolve lazy includes at schema() time (when all domains should be initialized)
90
+ // This handles circular dependencies by deferring entity resolution
91
+ let resolvedDeps = { ...deps };
92
+ // Preserve literal link keys from accumulated links
93
+ let resolvedLinks = { ...linkDeps };
94
+ for (const lazyGetter of lazyIncludes) {
95
+ try {
96
+ const other = lazyGetter();
97
+ if (other) {
98
+ const entities = other.entities;
99
+ if (entities) {
100
+ resolvedDeps = { ...resolvedDeps, ...entities };
101
+ }
102
+ const links = other.links;
103
+ if (links) {
104
+ // Merge links preserving literal keys
105
+ resolvedLinks = { ...resolvedLinks, ...links };
106
+ }
107
+ }
108
+ }
109
+ catch (e) {
110
+ // If lazy resolution fails, continue - entities might be available via string references
111
+ // This is expected for circular dependencies that will be resolved when all domains are composed
112
+ }
113
+ }
114
+ // Runtime merge for output; compile-time validation handled by types above
115
+ const allEntities = { ...resolvedDeps, ...def.entities };
116
+ // allLinks contains merged links from included domains + current domain
117
+ // Preserve literal link keys (owner, related, parent, etc.) by using MergeLinks
118
+ const allLinks = { ...resolvedLinks, ...def.links };
119
+ return {
120
+ entities: allEntities,
121
+ // Strip base phantom from public type so it's assignable to i.schema()
122
+ links: allLinks,
123
+ rooms: def.rooms,
124
+ // Add originalEntities for type-safe access to original entity definitions
125
+ originalEntities: allEntities,
126
+ toInstantSchema: (() => {
127
+ // Capture allEntities and allLinks in closure to avoid TypeScript scoping issues
128
+ const capturedEntities = allEntities;
129
+ const capturedLinks = allLinks;
130
+ return () => {
131
+ // i is already imported at the top of the file
132
+ // Final resolution: capturedEntities contains merged entities from all includes()
133
+ // For app domain, this includes all domains, so all entities are available
134
+ // Resolve any remaining lazy includes that couldn't be resolved at schema() time
135
+ let finalEntities = { ...capturedEntities };
136
+ // Preserve literal link keys from capturedLinks
137
+ let finalLinks = { ...capturedLinks };
138
+ // Try to resolve lazy includes one more time (domains should be initialized by now)
139
+ for (const lazyGetter of lazyIncludes) {
140
+ try {
141
+ const other = lazyGetter();
142
+ if (other) {
143
+ const entities = other.entities;
144
+ if (entities) {
145
+ // Merge entities that weren't available during schema() call
146
+ finalEntities = { ...finalEntities, ...entities };
147
+ }
148
+ const links = other.links;
149
+ if (links) {
150
+ // Merge links preserving literal keys (owner, related, parent, etc.)
151
+ finalLinks = { ...finalLinks, ...links };
152
+ }
153
+ }
154
+ }
155
+ catch (e) {
156
+ // If still can't resolve, entities should already be in allEntities from app domain composition
157
+ }
158
+ }
159
+ // Include base entities ($users, $files) that InstantDB manages
160
+ // These need to be explicitly included since InstantDB doesn't auto-add them
161
+ const baseEntities = {
162
+ $users: i.entity({
163
+ email: i.string().optional().indexed(),
164
+ }),
165
+ $files: i.entity({
166
+ path: i.string(),
167
+ url: i.string().optional(),
168
+ contentType: i.string().optional(),
169
+ size: i.number().optional(),
170
+ }),
171
+ };
172
+ // Merge base entities with user entities, user entities take precedence
173
+ const allEntitiesWithBase = { ...baseEntities, ...finalEntities };
174
+ // Create schema with merged links - preserve literal link keys
175
+ // The actual links object has literal keys (owner, related, parent, etc.)
176
+ // that need to be preserved for query validation
177
+ const schemaResult = i.schema({
178
+ entities: allEntitiesWithBase,
179
+ links: finalLinks,
180
+ rooms: def.rooms,
181
+ });
182
+ // Return schema result - i.schema() enriches entities with link labels automatically
183
+ // The type system should preserve this enrichment through the return type of toInstantSchema()
184
+ // which uses ReturnType<typeof i.schema<WithBase<E>, L, R>> where L is MergeLinks<AL, LL>
185
+ // This preserves both the enriched entities and the literal link keys
186
+ return schemaResult;
187
+ };
188
+ })(),
189
+ };
190
+ },
191
+ };
192
+ }
193
+ // Default include: start with an empty entities object
194
+ // Base entities ($users, $files) are added at toInstantSchema() time to ensure they're always available
195
+ // This allows links to reference them even when they're not explicitly defined in domains
196
+ const base = i.schema({ entities: {}, links: {}, rooms: {} });
197
+ const baseEntities = { ...base.entities };
198
+ return createBuilder(baseEntities, {});
199
+ }
200
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "name": "@ekairos/domain",
3
- "version": "1.21.3-beta.0",
3
+ "version": "1.21.4-beta.0",
4
4
  "description": "Pulzar Domain Utilities",
5
- "type": "commonjs",
6
- "main": "dist/index.js",
7
- "types": "dist/index.d.ts",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
8
  "files": [
9
9
  "dist"
10
10
  ],
@@ -20,7 +20,7 @@
20
20
  "exports": {
21
21
  ".": {
22
22
  "types": "./dist/index.d.ts",
23
- "require": "./dist/index.js",
23
+ "import": "./dist/index.js",
24
24
  "default": "./dist/index.js"
25
25
  }
26
26
  },