@party-stack/ontology 0.14.0 → 0.15.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 (68) hide show
  1. package/lib/examples/blog.d.ts +29 -24
  2. package/lib/examples/blog.d.ts.map +1 -1
  3. package/lib/examples/blog.js +16 -9
  4. package/lib/examples/blog.js.map +1 -1
  5. package/lib/generate/ontology.test.js +9 -3
  6. package/lib/generate/ontology.test.js.map +1 -1
  7. package/lib/generate/types.test.js +3 -3
  8. package/lib/generate/types.test.js.map +1 -1
  9. package/lib/infer.test.js +1 -1
  10. package/lib/infer.test.js.map +1 -1
  11. package/lib/ir/generated/builders.d.ts +92 -36
  12. package/lib/ir/generated/builders.d.ts.map +1 -1
  13. package/lib/ir/generated/builders.js +25 -8
  14. package/lib/ir/generated/builders.js.map +1 -1
  15. package/lib/ir/generated/types.d.ts +50 -15
  16. package/lib/ir/generated/types.d.ts.map +1 -1
  17. package/lib/ir/schema.d.ts +196 -32
  18. package/lib/ir/schema.d.ts.map +1 -1
  19. package/lib/ir/schema.js +162 -24
  20. package/lib/ir/schema.js.map +1 -1
  21. package/lib/ir/validate.d.ts.map +1 -1
  22. package/lib/ir/validate.js +236 -84
  23. package/lib/ir/validate.js.map +1 -1
  24. package/lib/ir/validate.test.js +218 -19
  25. package/lib/ir/validate.test.js.map +1 -1
  26. package/lib/lenses.d.ts.map +1 -1
  27. package/lib/lenses.js +6 -7
  28. package/lib/lenses.js.map +1 -1
  29. package/lib/live/expression.d.ts +6 -4
  30. package/lib/live/expression.d.ts.map +1 -1
  31. package/lib/live/expression.js +183 -42
  32. package/lib/live/expression.js.map +1 -1
  33. package/lib/live/expression.test.js +194 -7
  34. package/lib/live/expression.test.js.map +1 -1
  35. package/lib/live/mutators/OntologyEdits.d.ts.map +1 -1
  36. package/lib/live/mutators/OntologyEdits.js +5 -5
  37. package/lib/live/mutators/OntologyEdits.js.map +1 -1
  38. package/lib/live/mutators/createMutatorTx.d.ts.map +1 -1
  39. package/lib/live/mutators/createMutatorTx.js +13 -3
  40. package/lib/live/mutators/createMutatorTx.js.map +1 -1
  41. package/lib/live/mutators/createMutatorTx.test.js +95 -2
  42. package/lib/live/mutators/createMutatorTx.test.js.map +1 -1
  43. package/lib/meta/generated/live.d.ts +1 -2
  44. package/lib/meta/generated/live.d.ts.map +1 -1
  45. package/lib/meta/generated/live.js.map +1 -1
  46. package/lib/meta/generated/types.d.ts +50 -15
  47. package/lib/meta/generated/types.d.ts.map +1 -1
  48. package/lib/utils/index.d.ts +2 -0
  49. package/lib/utils/index.d.ts.map +1 -1
  50. package/lib/utils/index.js +2 -0
  51. package/lib/utils/index.js.map +1 -1
  52. package/lib/utils/links.d.ts +47 -0
  53. package/lib/utils/links.d.ts.map +1 -0
  54. package/lib/utils/links.js +20 -0
  55. package/lib/utils/links.js.map +1 -0
  56. package/lib/utils/links.test.d.ts +2 -0
  57. package/lib/utils/links.test.d.ts.map +1 -0
  58. package/lib/utils/links.test.js +109 -0
  59. package/lib/utils/links.test.js.map +1 -0
  60. package/lib/utils/paths.d.ts +4 -0
  61. package/lib/utils/paths.d.ts.map +1 -0
  62. package/lib/utils/paths.js +54 -0
  63. package/lib/utils/paths.js.map +1 -0
  64. package/lib/utils/paths.test.d.ts +2 -0
  65. package/lib/utils/paths.test.d.ts.map +1 -0
  66. package/lib/utils/paths.test.js +33 -0
  67. package/lib/utils/paths.test.js.map +1 -0
  68. package/package.json +1 -3
@@ -0,0 +1,54 @@
1
+ function isStruct(value) {
2
+ return value !== null && typeof value === "object" && !Array.isArray(value);
3
+ }
4
+ export function getAtPath(value, path) {
5
+ let current = value;
6
+ for (const segment of path) {
7
+ if (!isStruct(current))
8
+ return undefined;
9
+ current = current[segment];
10
+ }
11
+ return current;
12
+ }
13
+ export function setAtPath(value, path, replacement) {
14
+ if (path.length === 0) {
15
+ throw new Error("Property paths must not be empty.");
16
+ }
17
+ return setAtPathInternal(value, path, replacement, path, []);
18
+ }
19
+ function setAtPathInternal(value, path, replacement, fullPath, traversedPath) {
20
+ if (path.length === 0)
21
+ return replacement;
22
+ if (value !== undefined && !isStruct(value)) {
23
+ throw new Error(`Cannot assign property path "${fullPath.join(".")}": "${traversedPath.join(".")}" is not a struct object.`);
24
+ }
25
+ const [segment, ...rest] = path;
26
+ const struct = value ?? {};
27
+ return {
28
+ ...struct,
29
+ [segment]: setAtPathInternal(struct[segment], rest, replacement, fullPath, [
30
+ ...traversedPath,
31
+ segment,
32
+ ]),
33
+ };
34
+ }
35
+ export function unsetAtPath(value, path) {
36
+ if (path.length === 0) {
37
+ throw new Error("Property paths must not be empty.");
38
+ }
39
+ return unsetAtPathInternal(value, path);
40
+ }
41
+ function unsetAtPathInternal(value, path) {
42
+ if (!isStruct(value))
43
+ return value;
44
+ const [segment, ...rest] = path;
45
+ const result = { ...value };
46
+ if (rest.length === 0) {
47
+ delete result[segment];
48
+ }
49
+ else if (segment in result) {
50
+ result[segment] = unsetAtPathInternal(result[segment], rest);
51
+ }
52
+ return result;
53
+ }
54
+ //# sourceMappingURL=paths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/utils/paths.ts"],"names":[],"mappings":"AAAA,SAAS,QAAQ,CAAC,KAAc;IAC5B,OAAO,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAChF,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,KAAc,EAAE,IAAuB;IAC7D,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,KAAK,MAAM,OAAO,IAAI,IAAI,EAAE,CAAC;QACzB,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;YAAE,OAAO,SAAS,CAAC;QACzC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC;IACD,OAAO,OAAO,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,SAAS,CAAI,KAAQ,EAAE,IAAuB,EAAE,WAAoB;IAChF,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;IACzD,CAAC;IACD,OAAO,iBAAiB,CAAC,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,CAAM,CAAC;AACtE,CAAC;AAED,SAAS,iBAAiB,CACtB,KAAc,EACd,IAAuB,EACvB,WAAoB,EACpB,QAA2B,EAC3B,aAAgC;IAEhC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,WAAW,CAAC;IAC1C,IAAI,KAAK,KAAK,SAAS,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1C,MAAM,IAAI,KAAK,CACX,gCAAgC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,2BAA2B,CAC9G,CAAC;IACN,CAAC;IAED,MAAM,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;IAChC,MAAM,MAAM,GAAG,KAAK,IAAI,EAAE,CAAC;IAC3B,OAAO;QACH,GAAG,MAAM;QACT,CAAC,OAAQ,CAAC,EAAE,iBAAiB,CAAC,MAAM,CAAC,OAAQ,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE;YACzE,GAAG,aAAa;YAChB,OAAQ;SACX,CAAC;KACL,CAAC;AACN,CAAC;AAED,MAAM,UAAU,WAAW,CAAI,KAAQ,EAAE,IAAuB;IAC5D,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;IACzD,CAAC;IACD,OAAO,mBAAmB,CAAC,KAAK,EAAE,IAAI,CAAM,CAAC;AACjD,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAc,EAAE,IAAuB;IAChE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAEnC,MAAM,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;IAChC,MAAM,MAAM,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC;IAC5B,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACpB,OAAO,MAAM,CAAC,OAAQ,CAAC,CAAC;IAC5B,CAAC;SAAM,IAAI,OAAQ,IAAI,MAAM,EAAE,CAAC;QAC5B,MAAM,CAAC,OAAQ,CAAC,GAAG,mBAAmB,CAAC,MAAM,CAAC,OAAQ,CAAC,EAAE,IAAI,CAAC,CAAC;IACnE,CAAC;IACD,OAAO,MAAM,CAAC;AAClB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=paths.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.test.d.ts","sourceRoot":"","sources":["../../src/utils/paths.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,33 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { getAtPath, setAtPath, unsetAtPath } from "./paths.js";
3
+ describe("property paths", () => {
4
+ it("gets nested values and returns undefined for missing paths", () => {
5
+ const value = { profile: { name: "Ada" } };
6
+ expect(getAtPath(value, ["profile", "name"])).toBe("Ada");
7
+ expect(getAtPath(value, ["profile", "missing"])).toBe(undefined);
8
+ });
9
+ it("sets paths without mutating the source", () => {
10
+ const value = { profile: { name: "Ada" } };
11
+ const updated = setAtPath(value, ["profile", "name"], "Grace");
12
+ expect(updated).toEqual({
13
+ profile: { name: "Grace" },
14
+ });
15
+ expect(value).toEqual({ profile: { name: "Ada" } });
16
+ expect(updated.profile).not.toBe(value.profile);
17
+ });
18
+ it("creates missing structs but does not infer lists", () => {
19
+ expect(setAtPath({}, ["profile", "name"], "Ada")).toEqual({
20
+ profile: { name: "Ada" },
21
+ });
22
+ expect(() => setAtPath({ profiles: [] }, ["profiles", "0"], "Ada")).toThrow('Cannot assign property path "profiles.0": "profiles" is not a struct object.');
23
+ });
24
+ it("unsets paths without mutating the source", () => {
25
+ const value = {
26
+ profile: { name: "Ada", role: "admin" },
27
+ };
28
+ const updated = unsetAtPath(value, ["profile", "role"]);
29
+ expect(updated).toEqual({ profile: { name: "Ada" } });
30
+ expect(value.profile.role).toBe("admin");
31
+ });
32
+ });
33
+ //# sourceMappingURL=paths.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.test.js","sourceRoot":"","sources":["../../src/utils/paths.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE/D,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC5B,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;QAClE,MAAM,KAAK,GAAG,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QAE3C,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1D,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACrE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAC9C,MAAM,KAAK,GAAG,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QAC3C,MAAM,OAAO,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC,SAAS,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC;QAE/D,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC;YACpB,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;SAC7B,CAAC,CAAC;QACH,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;QACpD,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;QACxD,MAAM,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,SAAS,EAAE,MAAM,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC;YACtD,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE;SAC3B,CAAC,CAAC;QACH,MAAM,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,CAAC,UAAU,EAAE,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,OAAO,CACvE,8EAA8E,CACjF,CAAC;IACN,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAChD,MAAM,KAAK,GAAG;YACV,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE;SAC1C,CAAC;QACF,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,EAAE,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;QAExD,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;QACtD,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@party-stack/ontology",
3
- "version": "0.14.0",
3
+ "version": "0.15.0",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {
@@ -33,7 +33,6 @@
33
33
  "commander": "^14.0.2",
34
34
  "effection": "^4.0.2",
35
35
  "jiti": "^2.6.1",
36
- "lodash-es": "^4.17.23",
37
36
  "prettier": "^3.5.3",
38
37
  "temporal-polyfill": "^0.3.0",
39
38
  "ts-morph": "^27.0.2",
@@ -47,7 +46,6 @@
47
46
  "devDependencies": {
48
47
  "@bobbyfidz/universal-build-config": "^0.1.1",
49
48
  "@tanstack/db": "^0.8.6",
50
- "@types/lodash-es": "^4.17.12",
51
49
  "eslint": "^9.25.0",
52
50
  "tsx": "^4.20.6",
53
51
  "typescript": "~5.8.3",