@party-stack/ontology 0.1.1 → 0.3.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.
Files changed (124) hide show
  1. package/lib/OntologyConfig.d.ts +2 -1
  2. package/lib/OntologyConfig.d.ts.map +1 -1
  3. package/lib/cli/generate.d.ts.map +1 -1
  4. package/lib/cli/generate.js +1 -7
  5. package/lib/cli/generate.js.map +1 -1
  6. package/lib/cli/index.js +1 -7
  7. package/lib/cli/index.js.map +1 -1
  8. package/lib/cli/pull.d.ts.map +1 -1
  9. package/lib/cli/pull.js +7 -2
  10. package/lib/cli/pull.js.map +1 -1
  11. package/lib/examples/blog.d.ts +56 -0
  12. package/lib/examples/blog.d.ts.map +1 -1
  13. package/lib/examples/blog.js +89 -0
  14. package/lib/examples/blog.js.map +1 -1
  15. package/lib/examples/blog.live-queries.d.ts +3 -3
  16. package/lib/examples/blog.live-queries.d.ts.map +1 -1
  17. package/lib/examples/generated/live.d.ts +3 -3
  18. package/lib/examples/generated/live.d.ts.map +1 -1
  19. package/lib/examples/generated/live.js +5 -2
  20. package/lib/examples/generated/live.js.map +1 -1
  21. package/lib/examples/generated/types.d.ts +23 -2
  22. package/lib/examples/generated/types.d.ts.map +1 -1
  23. package/lib/generate/live.d.ts.map +1 -1
  24. package/lib/generate/live.js +12 -2
  25. package/lib/generate/live.js.map +1 -1
  26. package/lib/generate/ontology.d.ts.map +1 -1
  27. package/lib/generate/ontology.js +96 -5
  28. package/lib/generate/ontology.js.map +1 -1
  29. package/lib/generate/types.d.ts.map +1 -1
  30. package/lib/generate/types.js +169 -27
  31. package/lib/generate/types.js.map +1 -1
  32. package/lib/generate/types.test.d.ts +2 -0
  33. package/lib/generate/types.test.d.ts.map +1 -0
  34. package/lib/generate/types.test.js +127 -0
  35. package/lib/generate/types.test.js.map +1 -0
  36. package/lib/index.d.ts +2 -3
  37. package/lib/index.d.ts.map +1 -1
  38. package/lib/index.js +1 -2
  39. package/lib/index.js.map +1 -1
  40. package/lib/ir/generated/builders.d.ts +156 -12
  41. package/lib/ir/generated/builders.d.ts.map +1 -1
  42. package/lib/ir/generated/builders.js +60 -5
  43. package/lib/ir/generated/builders.js.map +1 -1
  44. package/lib/ir/generated/types.d.ts +98 -3
  45. package/lib/ir/generated/types.d.ts.map +1 -1
  46. package/lib/ir/generated/validators.d.ts +17 -1
  47. package/lib/ir/generated/validators.d.ts.map +1 -1
  48. package/lib/ir/generated/validators.js +66 -2
  49. package/lib/ir/generated/validators.js.map +1 -1
  50. package/lib/ir/schema.d.ts +2 -1
  51. package/lib/ir/schema.d.ts.map +1 -1
  52. package/lib/ir/schema.js +307 -1
  53. package/lib/ir/schema.js.map +1 -1
  54. package/lib/ir/validate.d.ts.map +1 -1
  55. package/lib/ir/validate.js +253 -22
  56. package/lib/ir/validate.js.map +1 -1
  57. package/lib/ir/validate.test.js +258 -1
  58. package/lib/ir/validate.test.js.map +1 -1
  59. package/lib/live/LiveOntology.d.ts +40 -0
  60. package/lib/live/LiveOntology.d.ts.map +1 -0
  61. package/lib/live/LiveOntology.js +78 -0
  62. package/lib/live/LiveOntology.js.map +1 -0
  63. package/lib/live/OntologyAdapter.d.ts +25 -0
  64. package/lib/live/OntologyAdapter.d.ts.map +1 -0
  65. package/lib/live/OntologyAdapter.js.map +1 -0
  66. package/lib/live/applyActionLogic.d.ts +10 -0
  67. package/lib/live/applyActionLogic.d.ts.map +1 -0
  68. package/lib/live/applyActionLogic.js +59 -0
  69. package/lib/live/applyActionLogic.js.map +1 -0
  70. package/lib/live/createLiveOntologyAttachments.d.ts +20 -0
  71. package/lib/live/createLiveOntologyAttachments.d.ts.map +1 -0
  72. package/lib/live/createLiveOntologyAttachments.js +30 -0
  73. package/lib/live/createLiveOntologyAttachments.js.map +1 -0
  74. package/lib/live/expression.d.ts +6 -0
  75. package/lib/live/expression.d.ts.map +1 -0
  76. package/lib/live/expression.js +81 -0
  77. package/lib/live/expression.js.map +1 -0
  78. package/lib/live/index.d.ts +3 -0
  79. package/lib/live/index.d.ts.map +1 -0
  80. package/lib/live/index.js +3 -0
  81. package/lib/live/index.js.map +1 -0
  82. package/lib/live/materializeActionParameters.d.ts +11 -0
  83. package/lib/live/materializeActionParameters.d.ts.map +1 -0
  84. package/lib/live/materializeActionParameters.js +86 -0
  85. package/lib/live/materializeActionParameters.js.map +1 -0
  86. package/lib/meta/pull.d.ts +6 -2
  87. package/lib/meta/pull.d.ts.map +1 -1
  88. package/lib/meta/pull.js +6 -4
  89. package/lib/meta/pull.js.map +1 -1
  90. package/lib/ontology/generated/live.d.ts +3 -3
  91. package/lib/ontology/generated/live.d.ts.map +1 -1
  92. package/lib/ontology/generated/live.js +5 -2
  93. package/lib/ontology/generated/live.js.map +1 -1
  94. package/lib/ontology/generated/types.d.ts +104 -3
  95. package/lib/ontology/generated/types.d.ts.map +1 -1
  96. package/lib/ontology/ontology.d.ts +1 -0
  97. package/lib/ontology/ontology.d.ts.map +1 -1
  98. package/lib/ontology/ontology.js +7 -0
  99. package/lib/ontology/ontology.js.map +1 -1
  100. package/lib/utils/index.d.ts +3 -0
  101. package/lib/utils/index.d.ts.map +1 -0
  102. package/lib/utils/index.js +2 -0
  103. package/lib/utils/index.js.map +1 -0
  104. package/lib/utils/types.d.ts +9 -0
  105. package/lib/utils/types.d.ts.map +1 -0
  106. package/lib/utils/types.js +27 -0
  107. package/lib/utils/types.js.map +1 -0
  108. package/lib/utils/types.test.d.ts +2 -0
  109. package/lib/utils/types.test.d.ts.map +1 -0
  110. package/lib/utils/types.test.js +137 -0
  111. package/lib/utils/types.test.js.map +1 -0
  112. package/lib/utils/values.d.ts +8 -0
  113. package/lib/utils/values.d.ts.map +1 -0
  114. package/lib/utils/values.js +2 -0
  115. package/lib/utils/values.js.map +1 -0
  116. package/package.json +17 -5
  117. package/lib/LiveOntology.d.ts +0 -22
  118. package/lib/LiveOntology.d.ts.map +0 -1
  119. package/lib/LiveOntology.js +0 -25
  120. package/lib/LiveOntology.js.map +0 -1
  121. package/lib/OntologyAdapter.d.ts +0 -8
  122. package/lib/OntologyAdapter.d.ts.map +0 -1
  123. package/lib/OntologyAdapter.js.map +0 -1
  124. /package/lib/{OntologyAdapter.js → live/OntologyAdapter.js} +0 -0
@@ -0,0 +1,27 @@
1
+ import { invariant } from "@bobbyfidz/panic";
2
+ export function resolveType(ir, type) {
3
+ if (type.kind !== "ref") {
4
+ return type;
5
+ }
6
+ const resolvedType = ir.types.find((candidate) => candidate.name === type.value.name)?.type;
7
+ invariant(resolvedType !== undefined, `Unknown type reference "${type.value.name}".`);
8
+ return resolveType(ir, resolvedType);
9
+ }
10
+ export function unwrapValueType(ir, type) {
11
+ if (type.kind === "optional") {
12
+ return unwrapValueType(ir, type.value.type);
13
+ }
14
+ if (type.kind === "list") {
15
+ return unwrapValueType(ir, type.value.elementType);
16
+ }
17
+ const resolvedType = resolveType(ir, type);
18
+ return resolvedType === type ? type : unwrapValueType(ir, resolvedType);
19
+ }
20
+ export function getTargetValueType(ir, target) {
21
+ const objectType = ir.objectTypes.find((candidate) => candidate.name === target.objectType);
22
+ invariant(objectType !== undefined, `Unknown object type "${target.objectType}".`);
23
+ const property = objectType.properties.find((candidate) => candidate.name === target.property);
24
+ invariant(property !== undefined, `Unknown property "${target.property}" on "${target.objectType}".`);
25
+ return unwrapValueType(ir, property.type);
26
+ }
27
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/utils/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAU7C,MAAM,UAAU,WAAW,CAAC,EAAc,EAAE,IAAa;IACrD,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;QACtB,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,MAAM,YAAY,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC;IAC5F,SAAS,CAAC,YAAY,KAAK,SAAS,EAAE,2BAA2B,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC;IACtF,OAAO,WAAW,CAAC,EAAE,EAAE,YAAY,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,EAAc,EAAE,IAAa;IACzD,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QAC3B,OAAO,eAAe,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAChD,CAAC;IACD,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QACvB,OAAO,eAAe,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IACvD,CAAC;IACD,MAAM,YAAY,GAAG,WAAW,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IAC3C,OAAO,YAAY,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,eAAe,CAAC,EAAE,EAAE,YAAY,CAAC,CAAC;AAC5E,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,EAAc,EAAE,MAA8B;IAC7E,MAAM,UAAU,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,KAAK,MAAM,CAAC,UAAU,CAAC,CAAC;IAC5F,SAAS,CAAC,UAAU,KAAK,SAAS,EAAE,wBAAwB,MAAM,CAAC,UAAU,IAAI,CAAC,CAAC;IACnF,MAAM,QAAQ,GAAG,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,KAAK,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC/F,SAAS,CAAC,QAAQ,KAAK,SAAS,EAAE,qBAAqB,MAAM,CAAC,QAAQ,SAAS,MAAM,CAAC,UAAU,IAAI,CAAC,CAAC;IACtG,OAAO,eAAe,CAAC,EAAE,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC9C,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.test.d.ts","sourceRoot":"","sources":["../../src/utils/types.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,137 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { o } from "../ir/generated/builders.js";
3
+ import { getTargetValueType, resolveType, unwrapValueType } from "./types.js";
4
+ describe("unwrapValueType", () => {
5
+ it("unwraps nested optional and list wrappers", () => {
6
+ const ir = {
7
+ types: [],
8
+ objectTypes: [],
9
+ linkTypes: [],
10
+ actionTypes: [],
11
+ };
12
+ const type = o.optional({
13
+ type: o.list({
14
+ elementType: o.optional({
15
+ type: o.string({}),
16
+ }),
17
+ }),
18
+ });
19
+ expect(unwrapValueType(ir, type)).toEqual(o.string({}));
20
+ });
21
+ it("unwraps refs through named types", () => {
22
+ const ir = {
23
+ types: [
24
+ {
25
+ name: "AttachmentList",
26
+ type: o.optional({
27
+ type: o.list({
28
+ elementType: o.optional({
29
+ type: o.attachment({}),
30
+ }),
31
+ }),
32
+ }),
33
+ },
34
+ ],
35
+ objectTypes: [],
36
+ linkTypes: [],
37
+ actionTypes: [],
38
+ };
39
+ expect(unwrapValueType(ir, o.ref({ name: "AttachmentList" }))).toEqual(o.attachment({}));
40
+ });
41
+ it("throws when a ref cannot be resolved", () => {
42
+ const ir = {
43
+ types: [],
44
+ objectTypes: [],
45
+ linkTypes: [],
46
+ actionTypes: [],
47
+ };
48
+ expect(() => unwrapValueType(ir, o.ref({ name: "MissingType" }))).toThrow('Unknown type reference "MissingType".');
49
+ });
50
+ });
51
+ describe("resolveType", () => {
52
+ it("resolves refs recursively", () => {
53
+ const ir = {
54
+ types: [
55
+ { name: "AttachmentAlias", type: o.ref({ name: "AttachmentType" }) },
56
+ { name: "AttachmentType", type: o.attachment({}) },
57
+ ],
58
+ objectTypes: [],
59
+ linkTypes: [],
60
+ actionTypes: [],
61
+ };
62
+ expect(resolveType(ir, o.ref({ name: "AttachmentAlias" }))).toEqual(o.attachment({}));
63
+ });
64
+ it("throws when a ref cannot be resolved", () => {
65
+ const ir = {
66
+ types: [],
67
+ objectTypes: [],
68
+ linkTypes: [],
69
+ actionTypes: [],
70
+ };
71
+ expect(() => resolveType(ir, o.ref({ name: "MissingType" }))).toThrow('Unknown type reference "MissingType".');
72
+ });
73
+ });
74
+ describe("getTargetValueType", () => {
75
+ it("returns the unwrapped type for a target property", () => {
76
+ const ir = {
77
+ types: [
78
+ {
79
+ name: "AttachmentList",
80
+ type: o.optional({
81
+ type: o.list({
82
+ elementType: o.optional({
83
+ type: o.attachment({}),
84
+ }),
85
+ }),
86
+ }),
87
+ },
88
+ ],
89
+ objectTypes: [
90
+ {
91
+ name: "Post",
92
+ displayName: "Post",
93
+ pluralDisplayName: "Posts",
94
+ primaryKey: "id",
95
+ properties: [
96
+ { name: "id", displayName: "ID", type: o.string({}) },
97
+ {
98
+ name: "attachments",
99
+ displayName: "Attachments",
100
+ type: o.ref({ name: "AttachmentList" }),
101
+ },
102
+ ],
103
+ },
104
+ ],
105
+ linkTypes: [],
106
+ actionTypes: [],
107
+ };
108
+ expect(getTargetValueType(ir, { objectType: "Post", property: "attachments" })).toEqual(o.attachment({}));
109
+ });
110
+ it("throws when the object type is missing", () => {
111
+ const ir = {
112
+ types: [],
113
+ objectTypes: [],
114
+ linkTypes: [],
115
+ actionTypes: [],
116
+ };
117
+ expect(() => getTargetValueType(ir, { objectType: "Post", property: "attachments" })).toThrow('Unknown object type "Post".');
118
+ });
119
+ it("throws when the property is missing", () => {
120
+ const ir = {
121
+ types: [],
122
+ objectTypes: [
123
+ {
124
+ name: "Post",
125
+ displayName: "Post",
126
+ pluralDisplayName: "Posts",
127
+ primaryKey: "id",
128
+ properties: [{ name: "id", displayName: "ID", type: o.string({}) }],
129
+ },
130
+ ],
131
+ linkTypes: [],
132
+ actionTypes: [],
133
+ };
134
+ expect(() => getTargetValueType(ir, { objectType: "Post", property: "attachments" })).toThrow('Unknown property "attachments" on "Post".');
135
+ });
136
+ });
137
+ //# sourceMappingURL=types.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.test.js","sourceRoot":"","sources":["../../src/utils/types.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export type * from "@party-stack/schema/values";
2
+ export type attachment = {
3
+ id: string;
4
+ size?: number;
5
+ type?: string;
6
+ name?: string;
7
+ };
8
+ //# sourceMappingURL=values.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"values.d.ts","sourceRoot":"","sources":["../../src/utils/values.ts"],"names":[],"mappings":"AAAA,mBAAmB,4BAA4B,CAAC;AAEhD,MAAM,MAAM,UAAU,GAAG;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=values.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"values.js","sourceRoot":"","sources":["../../src/utils/values.ts"],"names":[],"mappings":""}
package/package.json CHANGED
@@ -1,11 +1,18 @@
1
1
  {
2
2
  "name": "@party-stack/ontology",
3
- "version": "0.1.1",
3
+ "version": "0.3.0",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {
7
7
  "types": "./lib/index.d.ts",
8
8
  "default": "./lib/index.js"
9
+ },
10
+ "./utils": {
11
+ "types": "./lib/utils/index.d.ts",
12
+ "default": "./lib/utils/index.js"
13
+ },
14
+ "./values": {
15
+ "types": "./lib/utils/values.d.ts"
9
16
  }
10
17
  },
11
18
  "bin": {
@@ -17,26 +24,31 @@
17
24
  "dependencies": {
18
25
  "@bobbyfidz/panic": "^0.1.0",
19
26
  "@next/env": "^16.1.6",
27
+ "change-case": "^5.4.4",
20
28
  "commander": "^14.0.2",
21
29
  "jiti": "^2.6.1",
30
+ "lodash-es": "^4.17.23",
22
31
  "prettier": "^3.5.3",
32
+ "temporal-polyfill": "^0.3.0",
23
33
  "ts-morph": "^27.0.2",
24
34
  "zod": "^4.1.13",
25
- "@party-stack/schema": "0.1.1"
35
+ "@party-stack/blobs": "0.2.0",
36
+ "@party-stack/schema": "0.3.0"
26
37
  },
27
38
  "devDependencies": {
28
39
  "@bobbyfidz/universal-build-config": "^0.1.1",
29
- "@tanstack/db": "^0.5.32",
40
+ "@tanstack/db": "^0.6.5",
41
+ "@types/lodash-es": "^4.17.12",
30
42
  "eslint": "^9.25.0",
31
43
  "tsx": "^4.20.6",
32
44
  "typescript": "~5.8.3",
33
45
  "vitest": "^3.1.1"
34
46
  },
35
47
  "peerDependencies": {
36
- "@tanstack/db": "^0.5.32"
48
+ "@tanstack/db": "^0.6.5"
37
49
  },
38
50
  "scripts": {
39
- "bootstrap": "tsx ../schema/src/generate/generate.ts --schema ./src/ir/schema.ts --exportName o --promoted TypeDef --outDir ./src/ir/generated",
51
+ "bootstrap": "tsx ../schema/src/cli/generate.ts --schema ./src/ir/schema.ts --exportName o --promoted TypeDef --outDir ./src/ir/generated",
40
52
  "build": "tsc",
41
53
  "generate:examples": "tsx ./src/cli/generate.ts --ontology ./src/examples/blog.ts --outDir ./src/examples/generated --namespace Blog",
42
54
  "generate:meta": "tsx ./src/cli/generate.ts --ontology ./src/ontology/ontology.ts --outDir ./src/ontology/generated --namespace Meta",
@@ -1,22 +0,0 @@
1
- import { Collection } from "@tanstack/db";
2
- import type { OntologyIR } from "./ir/index.js";
3
- import type { OntologyAdapter } from "./OntologyAdapter.js";
4
- type OntologyObject = Record<string, unknown>;
5
- export interface OntologyDefinition {
6
- objectTypes: Record<string, OntologyObject>;
7
- }
8
- export type OntologyCollection<T extends OntologyObject> = Collection<T>;
9
- export type LiveOntologyObjects<ObjectTypes extends OntologyDefinition["objectTypes"]> = {
10
- [ObjectTypeName in keyof ObjectTypes]: OntologyCollection<ObjectTypes[ObjectTypeName]>;
11
- };
12
- export interface LiveOntology<Ontology extends OntologyDefinition = OntologyDefinition> {
13
- objects: LiveOntologyObjects<Ontology["objectTypes"]>;
14
- cleanup: () => Promise<void>;
15
- }
16
- export interface LiveOntologyOpts {
17
- ir: OntologyIR;
18
- adapter: OntologyAdapter;
19
- }
20
- export declare function createLiveOntology<Ontology extends OntologyDefinition = OntologyDefinition>(opts: LiveOntologyOpts): LiveOntology<Ontology>;
21
- export {};
22
- //# sourceMappingURL=LiveOntology.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"LiveOntology.d.ts","sourceRoot":"","sources":["../src/LiveOntology.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAoB,MAAM,cAAc,CAAC;AAC5D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAE5D,KAAK,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAC9C,MAAM,WAAW,kBAAkB;IAC/B,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;CAC/C;AAED,MAAM,MAAM,kBAAkB,CAAC,CAAC,SAAS,cAAc,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;AAEzE,MAAM,MAAM,mBAAmB,CAAC,WAAW,SAAS,kBAAkB,CAAC,aAAa,CAAC,IAAI;KACpF,cAAc,IAAI,MAAM,WAAW,GAAG,kBAAkB,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;CACzF,CAAC;AAEF,MAAM,WAAW,YAAY,CAAC,QAAQ,SAAS,kBAAkB,GAAG,kBAAkB;IAClF,OAAO,EAAE,mBAAmB,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC;IACtD,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,gBAAgB;IAC7B,EAAE,EAAE,UAAU,CAAC;IACf,OAAO,EAAE,eAAe,CAAC;CAC5B;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,SAAS,kBAAkB,GAAG,kBAAkB,EACvF,IAAI,EAAE,gBAAgB,GACvB,YAAY,CAAC,QAAQ,CAAC,CA8BxB"}
@@ -1,25 +0,0 @@
1
- import { createCollection } from "@tanstack/db";
2
- export function createLiveOntology(opts) {
3
- const objects = Object.fromEntries(opts.ir.objectTypes.map((objectType) => {
4
- const collectionOptions = opts.adapter.getCollectionOptions(objectType.name);
5
- const collection = createCollection({
6
- ...collectionOptions,
7
- getKey: (object) => {
8
- const key = object[objectType.primaryKey];
9
- if (key === undefined) {
10
- throw new Error(`Primary key "${objectType.primaryKey}" is missing on an object in "${objectType.name}".`);
11
- }
12
- return key;
13
- },
14
- });
15
- return [objectType.name, collection];
16
- }));
17
- return {
18
- objects: objects,
19
- cleanup: async () => {
20
- await Promise.all(Object.values(objects).map((collection) => collection.cleanup()));
21
- await opts.adapter.cleanup?.();
22
- },
23
- };
24
- }
25
- //# sourceMappingURL=LiveOntology.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"LiveOntology.js","sourceRoot":"","sources":["../src/LiveOntology.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAyB5D,MAAM,UAAU,kBAAkB,CAC9B,IAAsB;IAEtB,MAAM,OAAO,GAAG,MAAM,CAAC,WAAW,CAC9B,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE;QACnC,MAAM,iBAAiB,GAAG,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAC7E,MAAM,UAAU,GAAG,gBAAgB,CAAC;YAChC,GAAG,iBAAiB;YACpB,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE;gBACf,MAAM,GAAG,GAAI,MAAsD,CAC/D,UAAU,CAAC,UAAU,CACxB,CAAC;gBACF,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;oBACpB,MAAM,IAAI,KAAK,CACX,gBAAgB,UAAU,CAAC,UAAU,iCAAiC,UAAU,CAAC,IAAI,IAAI,CAC5F,CAAC;gBACN,CAAC;gBACD,OAAO,GAAG,CAAC;YACf,CAAC;SACJ,CAAuC,CAAC;QAEzC,OAAO,CAAC,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IACzC,CAAC,CAAC,CACL,CAAC;IAEF,OAAO;QACH,OAAO,EAAE,OAAkE;QAC3E,OAAO,EAAE,KAAK,IAAI,EAAE;YAChB,MAAM,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YACpF,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;QACnC,CAAC;KACJ,CAAC;AACN,CAAC"}
@@ -1,8 +0,0 @@
1
- import { CollectionConfig } from "@tanstack/db";
2
- export type OntologyCollectionOptions = Omit<CollectionConfig<Record<string, unknown>, string | number>, "getKey">;
3
- export interface OntologyAdapter {
4
- name: string;
5
- getCollectionOptions: (objectType: string) => OntologyCollectionOptions;
6
- cleanup?: () => void | Promise<void>;
7
- }
8
- //# sourceMappingURL=OntologyAdapter.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"OntologyAdapter.d.ts","sourceRoot":"","sources":["../src/OntologyAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEhD,MAAM,MAAM,yBAAyB,GAAG,IAAI,CACxC,gBAAgB,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,EAC1D,QAAQ,CACX,CAAC;AAEF,MAAM,WAAW,eAAe;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,oBAAoB,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,yBAAyB,CAAC;IAGxE,OAAO,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACxC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"OntologyAdapter.js","sourceRoot":"","sources":["../src/OntologyAdapter.ts"],"names":[],"mappings":""}