@fougere/core 0.10.0-alpha.0 → 0.11.0-alpha.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 (105) hide show
  1. package/dist/CallIdentity.d.ts.map +1 -1
  2. package/dist/CallIdentity.js +2 -0
  3. package/dist/CallIdentity.js.map +1 -1
  4. package/dist/Constraint.d.ts +1 -1
  5. package/dist/Constraint.d.ts.map +1 -1
  6. package/dist/Source.d.ts.map +1 -1
  7. package/dist/Source.js +4 -3
  8. package/dist/Source.js.map +1 -1
  9. package/dist/boot/Hosting.d.ts +38 -0
  10. package/dist/boot/Hosting.d.ts.map +1 -0
  11. package/dist/boot/Hosting.js +2 -0
  12. package/dist/boot/Hosting.js.map +1 -0
  13. package/dist/boot/Peer.d.ts +16 -0
  14. package/dist/boot/Peer.d.ts.map +1 -0
  15. package/dist/boot/Peer.js +2 -0
  16. package/dist/boot/Peer.js.map +1 -0
  17. package/dist/boot/bootstrap.d.ts.map +1 -1
  18. package/dist/boot/bootstrap.js +122 -20
  19. package/dist/boot/bootstrap.js.map +1 -1
  20. package/dist/boot/declared.d.ts.map +1 -1
  21. package/dist/boot/declared.js +35 -3
  22. package/dist/boot/declared.js.map +1 -1
  23. package/dist/boot/install.d.ts +10 -0
  24. package/dist/boot/install.d.ts.map +1 -1
  25. package/dist/boot/install.js +11 -2
  26. package/dist/boot/install.js.map +1 -1
  27. package/dist/boot/peerOver.d.ts +4 -0
  28. package/dist/boot/peerOver.d.ts.map +1 -0
  29. package/dist/boot/peerOver.js +12 -0
  30. package/dist/boot/peerOver.js.map +1 -0
  31. package/dist/boot/relations.d.ts +54 -0
  32. package/dist/boot/relations.d.ts.map +1 -0
  33. package/dist/boot/relations.js +150 -0
  34. package/dist/boot/relations.js.map +1 -0
  35. package/dist/boot/together.d.ts +3 -0
  36. package/dist/boot/together.d.ts.map +1 -1
  37. package/dist/boot/together.js +2 -1
  38. package/dist/boot/together.js.map +1 -1
  39. package/dist/contract.d.ts +1 -0
  40. package/dist/contract.d.ts.map +1 -1
  41. package/dist/contract.js.map +1 -1
  42. package/dist/dispatch/Dependent.d.ts +19 -0
  43. package/dist/dispatch/Dependent.d.ts.map +1 -0
  44. package/dist/dispatch/Dependent.js +2 -0
  45. package/dist/dispatch/Dependent.js.map +1 -0
  46. package/dist/dispatch/Dispatcher.d.ts +14 -1
  47. package/dist/dispatch/Dispatcher.d.ts.map +1 -1
  48. package/dist/dispatch/Dispatcher.js +36 -8
  49. package/dist/dispatch/Dispatcher.js.map +1 -1
  50. package/dist/dispatch/Journal.d.ts +25 -0
  51. package/dist/dispatch/Journal.d.ts.map +1 -0
  52. package/dist/dispatch/Journal.js +3 -0
  53. package/dist/dispatch/Journal.js.map +1 -0
  54. package/dist/dispatch/RelationCheck.d.ts +22 -0
  55. package/dist/dispatch/RelationCheck.d.ts.map +1 -0
  56. package/dist/dispatch/RelationCheck.js +2 -0
  57. package/dist/dispatch/RelationCheck.js.map +1 -0
  58. package/dist/dispatch/Release.d.ts +36 -0
  59. package/dist/dispatch/Release.d.ts.map +1 -0
  60. package/dist/dispatch/Release.js +124 -0
  61. package/dist/dispatch/Release.js.map +1 -0
  62. package/dist/dispatch/StorageGuard.d.ts +18 -1
  63. package/dist/dispatch/StorageGuard.d.ts.map +1 -1
  64. package/dist/dispatch/StorageGuard.js +57 -1
  65. package/dist/dispatch/StorageGuard.js.map +1 -1
  66. package/dist/index.d.ts +5 -0
  67. package/dist/index.d.ts.map +1 -1
  68. package/dist/index.js +3 -0
  69. package/dist/index.js.map +1 -1
  70. package/dist/wire/Emit.d.ts +9 -0
  71. package/dist/wire/Emit.d.ts.map +1 -1
  72. package/dist/wire/Emit.js +16 -0
  73. package/dist/wire/Emit.js.map +1 -1
  74. package/dist/wire/Invocation.d.ts +2 -1
  75. package/dist/wire/Invocation.d.ts.map +1 -1
  76. package/dist/wire/Invocation.js +4 -1
  77. package/dist/wire/Invocation.js.map +1 -1
  78. package/dist/wire/InvocationContext.d.ts +2 -0
  79. package/dist/wire/InvocationContext.d.ts.map +1 -1
  80. package/dist/wire/SignedCall.d.ts +2 -0
  81. package/dist/wire/SignedCall.d.ts.map +1 -1
  82. package/package.json +4 -4
  83. package/src/CallIdentity.ts +2 -0
  84. package/src/Constraint.ts +1 -1
  85. package/src/Source.ts +3 -2
  86. package/src/boot/Hosting.ts +38 -0
  87. package/src/boot/Peer.ts +15 -0
  88. package/src/boot/bootstrap.ts +142 -20
  89. package/src/boot/declared.ts +35 -3
  90. package/src/boot/install.ts +23 -2
  91. package/src/boot/peerOver.ts +17 -0
  92. package/src/boot/relations.ts +172 -0
  93. package/src/boot/together.ts +5 -1
  94. package/src/contract.ts +1 -0
  95. package/src/dispatch/Dependent.ts +19 -0
  96. package/src/dispatch/Dispatcher.ts +43 -7
  97. package/src/dispatch/Journal.ts +26 -0
  98. package/src/dispatch/RelationCheck.ts +21 -0
  99. package/src/dispatch/Release.ts +156 -0
  100. package/src/dispatch/StorageGuard.ts +62 -0
  101. package/src/index.ts +5 -0
  102. package/src/wire/Emit.ts +23 -0
  103. package/src/wire/Invocation.ts +3 -1
  104. package/src/wire/InvocationContext.ts +2 -0
  105. package/src/wire/SignedCall.ts +2 -0
@@ -7,25 +7,53 @@ export class Dispatcher {
7
7
  inFlight;
8
8
  lifecycle;
9
9
  policy;
10
- constructor(routes, inFlight, lifecycle = new DispatchLifecycle(), policy) {
10
+ journalOf;
11
+ constructor(routes, inFlight, lifecycle = new DispatchLifecycle(), policy, journalOf) {
11
12
  this.routes = routes;
12
13
  this.inFlight = inFlight;
13
14
  this.lifecycle = lifecycle;
14
15
  this.policy = policy;
16
+ this.journalOf = journalOf;
17
+ }
18
+ /** The route that answers this address, or the refusal naming what is served instead. */
19
+ async routeFor(call) {
20
+ const known = this.routes.find(call.address);
21
+ const resolved = known ?? await this.routes.resolve(call.address);
22
+ const route = resolved && (!this.policy || this.policy.accepts(resolved)) ? resolved : undefined;
23
+ if (!route) {
24
+ throw this.policy?.notFound?.(call, this.routes.routes())
25
+ ?? routeNotFound(call, servedOperations(call, this.routes.routes(), this.policy));
26
+ }
27
+ return route;
28
+ }
29
+ /**
30
+ * A kept call publishes no dispatch event and enters no flight: it has not been answered,
31
+ * and counting it here would report one call spanning the days until its hour.
32
+ *
33
+ * Its address is resolved all the same. What is kept is made hours later, by then against
34
+ * whatever the app still serves — so an address nothing answers is refused to the caller who
35
+ * can still fix it, rather than to a beat nobody is watching.
36
+ */
37
+ async keep(call, runAt) {
38
+ await this.routeFor(call);
39
+ const journal = this.journalOf?.();
40
+ if (!journal) {
41
+ throw new Error(`${call.address.toString()} asks to run at ${new Date(runAt).toISOString()}, and nothing keeps it.`
42
+ + ' Install a package answering Journal — @fougere/workflow.');
43
+ }
44
+ await journal.keep(call, runAt);
45
+ return undefined;
15
46
  }
16
47
  async dispatch(call) {
48
+ const { runAt } = call.invocation;
49
+ if (runAt !== undefined)
50
+ return this.keep(call, runAt);
17
51
  let route;
18
52
  let release;
19
53
  this.lifecycle.publish(DispatchEvent.received(call));
20
54
  try {
21
55
  release = this.inFlight.enter(call.address.entity, call.address.operation);
22
- const known = this.routes.find(call.address);
23
- const resolved = known ?? await this.routes.resolve(call.address);
24
- route = resolved && (!this.policy || this.policy.accepts(resolved)) ? resolved : undefined;
25
- if (!route) {
26
- throw this.policy?.notFound?.(call, this.routes.routes())
27
- ?? routeNotFound(call, servedOperations(call, this.routes.routes(), this.policy));
28
- }
56
+ route = await this.routeFor(call);
29
57
  this.lifecycle.publish(DispatchEvent.resolved(call, route.kind));
30
58
  const result = await route.execute(call);
31
59
  this.lifecycle.publish(DispatchEvent.completed(call, route.kind));
@@ -1 +1 @@
1
- {"version":3,"file":"Dispatcher.js","sourceRoot":"","sources":["../../src/dispatch/Dispatcher.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAK3D,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAGrE,8EAA8E;AAC9E,MAAM,OAAO,UAAU;IAEF;IACA;IACA;IACA;IAJnB,YACmB,MAAqB,EACrB,QAAkB,EAClB,YAAY,IAAI,iBAAiB,EAAE,EACnC,MAAoB;QAHpB,WAAM,GAAN,MAAM,CAAe;QACrB,aAAQ,GAAR,QAAQ,CAAU;QAClB,cAAS,GAAT,SAAS,CAA0B;QACnC,WAAM,GAAN,MAAM,CAAc;IACpC,CAAC;IAEJ,KAAK,CAAC,QAAQ,CAAC,IAAU;QACvB,IAAI,KAAwB,CAAC;QAC7B,IAAI,OAAiC,CAAC;QACtC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;QAErD,IAAI,CAAC;YACH,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YAC3E,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC7C,MAAM,QAAQ,GAAG,KAAK,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAClE,KAAK,GAAG,QAAQ,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;YAC3F,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,MAAM,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;uBACpD,aAAa,CAAC,IAAI,EAAE,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;YACtF,CAAC;YAED,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;YACjE,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACzC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;YAClE,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;YACvE,MAAM,KAAK,CAAC;QACd,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;YACjE,OAAO,EAAE,EAAE,CAAC;QACd,CAAC;IACH,CAAC;CAEF"}
1
+ {"version":3,"file":"Dispatcher.js","sourceRoot":"","sources":["../../src/dispatch/Dispatcher.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import type { Call } from '../wire/Call.js';
2
+ /**
3
+ * What writes a release down while it happens, when a package provides one.
4
+ *
5
+ * Core does the same hops in the same order either way — children before their parent, so an
6
+ * interruption leaves fewer children and never an orphan. What a journal adds is that somebody
7
+ * can finish what a stopped process started: the row says a release began, and a sweep redoes
8
+ * it. Redoing is safe because every hop already is — a row taken out twice is taken out once.
9
+ *
10
+ * What writes a release down writes none of its own: the boot leaves out the entities of the
11
+ * fronds an extension BROUGHT, so keeping the row that says a release began does not begin one.
12
+ * Read from what was brought rather than written down, the way `CARRIES_LINE` is.
13
+ *
14
+ * Documented: [entities](https://fougere.dev/docs/schema/entities).
15
+ */
16
+ export interface Journal {
17
+ /** Hold this call until `runAt`, so a sweep dispatches it then and nobody waits for it now. */
18
+ keep(call: Call, runAt: number): Promise<void>;
19
+ /** Take this release on, or say another process is already driving it. */
20
+ open(entity: string, key: string): Promise<'taken' | 'busy'>;
21
+ close(entity: string, key: string): Promise<void>;
22
+ }
23
+ /** The container key a package registers its journal under. */
24
+ export declare const JOURNAL = "Journal";
25
+ //# sourceMappingURL=Journal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Journal.d.ts","sourceRoot":"","sources":["../../src/dispatch/Journal.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAE5C;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,OAAO;IACtB,+FAA+F;IAC/F,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/C,0EAA0E;IAC1E,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,MAAM,CAAC,CAAC;IAC7D,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACnD;AAED,+DAA+D;AAC/D,eAAO,MAAM,OAAO,YAAY,CAAC"}
@@ -0,0 +1,3 @@
1
+ /** The container key a package registers its journal under. */
2
+ export const JOURNAL = 'Journal';
3
+ //# sourceMappingURL=Journal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Journal.js","sourceRoot":"","sources":["../../src/dispatch/Journal.ts"],"names":[],"mappings":"AAwBA,+DAA+D;AAC/D,MAAM,CAAC,MAAM,OAAO,GAAG,SAAS,CAAC"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * A `ref()` whose target the source does not hold, so the guard reads it before the write.
3
+ *
4
+ * The pair decides, never the engine: SQL keeps a foreign key over rows it can see, and a
5
+ * target in another source gets a column and nothing else. The boot builds one of these for
6
+ * each reference that falls outside its own source, and none for the rest — a co-located
7
+ * relation costs nothing here, because the key already refuses the same row.
8
+ *
9
+ * Documented: [entities](https://fougere.dev/docs/schema/entities).
10
+ */
11
+ export interface RelationCheck {
12
+ /** The field carrying the key — `authorId`. */
13
+ field: string;
14
+ /** What it points at, as the boot files it — `user`. */
15
+ target: string;
16
+ /**
17
+ * Which of these keys no row answers. Takes a set so a page costs one read, and so the
18
+ * single-row case is the same call with one member.
19
+ */
20
+ missing(keys: readonly unknown[]): Promise<readonly unknown[]>;
21
+ }
22
+ //# sourceMappingURL=RelationCheck.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RelationCheck.d.ts","sourceRoot":"","sources":["../../src/dispatch/RelationCheck.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,MAAM,WAAW,aAAa;IAC5B,+CAA+C;IAC/C,KAAK,EAAE,MAAM,CAAC;IACd,wDAAwD;IACxD,MAAM,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,OAAO,CAAC,IAAI,EAAE,SAAS,OAAO,EAAE,GAAG,OAAO,CAAC,SAAS,OAAO,EAAE,CAAC,CAAC;CAChE"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=RelationCheck.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RelationCheck.js","sourceRoot":"","sources":["../../src/dispatch/RelationCheck.ts"],"names":[],"mappings":""}
@@ -0,0 +1,36 @@
1
+ /** What a delete does to the rows that name it, when no foreign key does it instead. */
2
+ import { type SchemaView } from '@fougere/schema';
3
+ import type { Dependent } from './Dependent.js';
4
+ import type { Journal } from './Journal.js';
5
+ /** The gestures a release reaches a dependent's rows through. */
6
+ export interface Rows {
7
+ findAllByKeys(field: string, keys: readonly string[]): Promise<Map<string, Record<string, unknown>[]>>;
8
+ update(id: string, patch: Record<string, unknown>): Promise<unknown>;
9
+ delete(id: string): Promise<boolean>;
10
+ }
11
+ /** What the guard hands a release: who depends on an entity, and how to reach their rows. */
12
+ export interface Releasing {
13
+ dependentsOf(entity: string): readonly Dependent[];
14
+ rowsOf(entity: string): Rows | undefined;
15
+ schemaOf(entity: string): SchemaView | undefined;
16
+ /** Written down while it happens, when a package provides one — absent is the plain walk. */
17
+ journal(entity: string): Journal | undefined;
18
+ /** Every declared remote — each one walks its own tree, and is alone able to. */
19
+ peers(): readonly {
20
+ release(entity: string, key: unknown, visited: readonly string[]): Promise<void>;
21
+ }[];
22
+ }
23
+ /**
24
+ * The rows that name a key, taken out or emptied, deepest FIRST.
25
+ *
26
+ * Order is the whole guarantee: a child never outlives its parent, so an interruption leaves
27
+ * fewer children and never an orphan. That is what lets a release cross a process without a
28
+ * two-phase commit — and why nothing here needs to be undone, only finished.
29
+ *
30
+ * A row already visited is not visited again, which is what ends a cycle: `Category.parentId`
31
+ * pointing at its own entity walks down and stops when a key repeats.
32
+ *
33
+ * Documented: [entities](https://fougere.dev/docs/schema/entities).
34
+ */
35
+ export declare function release(entity: string, key: unknown, world: Releasing, visited?: readonly string[], row?: () => Promise<unknown>): Promise<void>;
36
+ //# sourceMappingURL=Release.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Release.d.ts","sourceRoot":"","sources":["../../src/dispatch/Release.ts"],"names":[],"mappings":"AAAA,wFAAwF;AACxF,OAAO,EAAY,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAI5C,iEAAiE;AACjE,MAAM,WAAW,IAAI;IACnB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;IACvG,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACrE,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACtC;AAED,6FAA6F;AAC7F,MAAM,WAAW,SAAS;IACxB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,SAAS,EAAE,CAAC;IACnD,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACzC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAAC;IACjD,6FAA6F;IAC7F,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;IAC7C,iFAAiF;IACjF,KAAK,IAAI,SAAS;QAAE,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;KAAE,EAAE,CAAC;CAC1G;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,OAAO,CAC3B,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,OAAO,EACZ,KAAK,EAAE,SAAS,EAChB,OAAO,GAAE,SAAS,MAAM,EAAO,EAC/B,GAAG,CAAC,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,GAC3B,OAAO,CAAC,IAAI,CAAC,CAmCf"}
@@ -0,0 +1,124 @@
1
+ /** What a delete does to the rows that name it, when no foreign key does it instead. */
2
+ import { FieldSet } from '@fougere/schema';
3
+ import { ErrorCode } from '../wire/ErrorCode.js';
4
+ import { FougereError } from '../wire/FougereError.js';
5
+ /**
6
+ * The rows that name a key, taken out or emptied, deepest FIRST.
7
+ *
8
+ * Order is the whole guarantee: a child never outlives its parent, so an interruption leaves
9
+ * fewer children and never an orphan. That is what lets a release cross a process without a
10
+ * two-phase commit — and why nothing here needs to be undone, only finished.
11
+ *
12
+ * A row already visited is not visited again, which is what ends a cycle: `Category.parentId`
13
+ * pointing at its own entity walks down and stops when a key repeats.
14
+ *
15
+ * Documented: [entities](https://fougere.dev/docs/schema/entities).
16
+ */
17
+ export async function release(entity, key, world, visited = [], row) {
18
+ const mark = `${entity}#${String(key)}`;
19
+ // Already on the trail means SOMEONE upstream is asking every process about this row, so
20
+ // asking again would be the bounce two processes declaring each other would never end. The
21
+ // local walk still runs: being asked is exactly the point, and only this process can do it.
22
+ const asked = visited.includes(mark);
23
+ const trail = asked ? visited : [...visited, mark];
24
+ // Written down before the first hop, so a process that stops mid-way leaves a row saying so.
25
+ // Absent, the hops are the same and nothing finishes them.
26
+ const journal = world.journal(entity);
27
+ if (journal && await journal.open(entity, String(key)) === 'busy')
28
+ return;
29
+ // Every declared remote, and every one of them: a frond behind `remotes:` may have no sources
30
+ // here, so this process cannot see that its rows name ours — only that process can.
31
+ if (!asked)
32
+ for (const peer of world.peers())
33
+ await peer.release(entity, key, trail);
34
+ try {
35
+ await walk(entity, [key], world, new Set([mark]), trail);
36
+ }
37
+ catch (refusal) {
38
+ // A refusal is an outcome, not an interruption: the framework decided, and redoing it
39
+ // would only decide again — a run kept open for one would be swept forever. Anything
40
+ // else stopped us mid-tree, and THAT is what a run is for.
41
+ if (refusal instanceof FougereError)
42
+ await journal?.close(entity, String(key));
43
+ throw refusal;
44
+ }
45
+ // The row itself, LAST — handed in by whoever owns the gesture, so a run covers the whole
46
+ // thing rather than stopping one statement short of it. Whatever the row answers, the
47
+ // release did its part: what depends on this one is dealt with, and nothing is left to redo.
48
+ try {
49
+ await row?.();
50
+ }
51
+ finally {
52
+ await journal?.close(entity, String(key));
53
+ }
54
+ }
55
+ async function walk(entity, keys, world, seen, trail) {
56
+ const dependents = world.dependentsOf(entity);
57
+ // Every refusal of this level BEFORE any of its rows move: two fields of one entity are two
58
+ // dependents, and declaration order would otherwise let a cascade beside a `restrict` win.
59
+ // Depth needs no such pass — a level acts only once the level below it came back.
60
+ for (const dependent of dependents.filter((one) => one.onDelete === 'restrict')) {
61
+ const rows = world.rowsOf(dependent.entity);
62
+ if (!rows)
63
+ continue;
64
+ const found = [...(await rows.findAllByKeys(dependent.field, keys.map(String))).values()].flat();
65
+ if (found.length === 0)
66
+ continue;
67
+ throw new FougereError({
68
+ code: ErrorCode.CONFLICT,
69
+ message: `${dependent.entity}.${dependent.field} holds ${found.length} row(s) naming this one, `
70
+ + `and states onDelete 'restrict' — take them out first, or declare what should happen.`,
71
+ entity,
72
+ operation: 'delete',
73
+ });
74
+ }
75
+ for (const dependent of dependents.filter((one) => one.onDelete !== 'restrict')) {
76
+ const rows = world.rowsOf(dependent.entity);
77
+ // Nothing here holds those rows. The process that does answers the same two readings core
78
+ // serves everywhere, so the ask crosses and the work happens on ITS side of the wire —
79
+ // which is what keeps the declaration identical whatever the topology.
80
+ // Nothing here holds those rows: every declared remote is asked about THIS level, and the
81
+ // one that holds them walks its own tree from there. The trail grows by one mark per level,
82
+ // so a deeper ask is never mistaken for the bounce of a shallower one.
83
+ if (!rows) {
84
+ for (const key of keys) {
85
+ // A level already on the trail is one somebody is asking every process about, so
86
+ // asking again is the bounce — the same reason `release` reads it before crossing.
87
+ if (trail.includes(`${entity}#${String(key)}`))
88
+ continue;
89
+ for (const peer of world.peers())
90
+ await peer.release(entity, key, trail);
91
+ }
92
+ continue;
93
+ }
94
+ const naming = await rows.findAllByKeys(dependent.field, keys.map(String));
95
+ const found = [...naming.values()].flat();
96
+ if (found.length === 0)
97
+ continue;
98
+ if (dependent.onDelete === 'set null') {
99
+ const primary = keyOf(world, dependent.entity);
100
+ for (const row of found)
101
+ await rows.update(String(row[primary]), { [dependent.field]: null });
102
+ continue;
103
+ }
104
+ const primary = keyOf(world, dependent.entity);
105
+ const below = found.map((row) => row[primary]).filter((id) => !taken(seen, dependent.entity, id));
106
+ // Deepest first: what names THESE rows goes before they do, all the way down.
107
+ await walk(dependent.entity, below, world, seen, trail);
108
+ for (const id of below)
109
+ await rows.delete(String(id));
110
+ }
111
+ }
112
+ /** True once, and remembers — a key already on the path is what ends a cycle. */
113
+ function taken(seen, entity, key) {
114
+ const mark = `${entity}#${String(key)}`;
115
+ if (seen.has(mark))
116
+ return true;
117
+ seen.add(mark);
118
+ return false;
119
+ }
120
+ function keyOf(world, entity) {
121
+ const schema = world.schemaOf(entity);
122
+ return (schema && FieldSet.of(schema.getFields()).primary) ?? 'id';
123
+ }
124
+ //# sourceMappingURL=Release.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Release.js","sourceRoot":"","sources":["../../src/dispatch/Release.ts"],"names":[],"mappings":"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"}
@@ -1,13 +1,17 @@
1
1
  import { type Fields } from '@fougere/schema';
2
2
  import type { GuardReport } from './GuardReport.js';
3
+ import type { RelationCheck } from './RelationCheck.js';
4
+ import { type Releasing } from './Release.js';
3
5
  /** Judges storage writes and list options without narrowing the storage interface. */
4
6
  export declare class StorageGuard {
5
7
  private readonly fields;
6
8
  private readonly entity;
7
9
  private readonly report;
10
+ private readonly relations;
11
+ private readonly releasing?;
8
12
  /** What has already been said, so a filter in a loop says it once. */
9
13
  private readonly said;
10
- constructor(fields: Fields, entity: string, report?: GuardReport);
14
+ constructor(fields: Fields, entity: string, report?: GuardReport, relations?: readonly RelationCheck[], releasing?: Releasing | undefined);
11
15
  guard<T extends object>(storage: T): T;
12
16
  /**
13
17
  * The values this write carries, validated and handed on PARSED — the rule the client facade
@@ -37,5 +41,18 @@ export declare class StorageGuard {
37
41
  /** One value against one field — validated, then decoded the way the wire hands it. */
38
42
  private value;
39
43
  private validated;
44
+ /**
45
+ * The rows a `ref()` points at, read before the write lands.
46
+ *
47
+ * Only the references the boot could not leave to a foreign key reach here — a target in
48
+ * the same source is already refused by the key, at the rows, which this cannot be: the
49
+ * target may be deleted between the read and the write. It catches what a key catches in
50
+ * practice, which is a key that was never right: a row copied from another environment,
51
+ * an author deleted months ago, an id from a test.
52
+ *
53
+ * A patch that does not carry the field says nothing about it, so it is skipped rather
54
+ * than read as `null`.
55
+ */
56
+ private targetsOf;
40
57
  }
41
58
  //# sourceMappingURL=StorageGuard.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"StorageGuard.d.ts","sourceRoot":"","sources":["../../src/dispatch/StorageGuard.ts"],"names":[],"mappings":"AAAA,OAAO,EAA+C,KAAK,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAK3F,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAWpD,sFAAsF;AACtF,qBAAa,YAAY;IAKrB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IANzB,sEAAsE;IACtE,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAqB;gBAGvB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,MAAM,GAAE,WAAgB;IAG3C,KAAK,CAAC,CAAC,SAAS,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,CAAC;IAiDtC;;;;OAIG;IACH,OAAO,CAAC,KAAK;IAMb;;;;;;;OAOG;IACH,OAAO,CAAC,QAAQ;IAgDhB;;;;;;;;OAQG;IACH,OAAO,CAAC,aAAa;IAUrB,uFAAuF;IACvF,OAAO,CAAC,KAAK;IAKb,OAAO,CAAC,SAAS;CAoClB"}
1
+ {"version":3,"file":"StorageGuard.d.ts","sourceRoot":"","sources":["../../src/dispatch/StorageGuard.ts"],"names":[],"mappings":"AAAA,OAAO,EAA+C,KAAK,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAK3F,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAW,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAYvD,sFAAsF;AACtF,qBAAa,YAAY;IAKrB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;IAR7B,sEAAsE;IACtE,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAqB;gBAGvB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,MAAM,GAAE,WAAgB,EACxB,SAAS,GAAE,SAAS,aAAa,EAAO,EACxC,SAAS,CAAC,EAAE,SAAS,YAAA;IAGxC,KAAK,CAAC,CAAC,SAAS,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,CAAC;IAqEtC;;;;OAIG;IACH,OAAO,CAAC,KAAK;IAMb;;;;;;;OAOG;IACH,OAAO,CAAC,QAAQ;IAgDhB;;;;;;;;OAQG;IACH,OAAO,CAAC,aAAa;IAUrB,uFAAuF;IACvF,OAAO,CAAC,KAAK;IAKb,OAAO,CAAC,SAAS;IAqCjB;;;;;;;;;;;OAWG;YACW,SAAS;CAwBxB"}
@@ -3,17 +3,22 @@ import { COMPARISONS, comparisonOf, unknownIn } from '../storage/Comparison.js';
3
3
  import { assertListOptions } from '../storage/Storage.js';
4
4
  import { ErrorCode } from '../wire/ErrorCode.js';
5
5
  import { FougereError } from '../wire/FougereError.js';
6
+ import { release } from './Release.js';
6
7
  /** Judges storage writes and list options without narrowing the storage interface. */
7
8
  export class StorageGuard {
8
9
  fields;
9
10
  entity;
10
11
  report;
12
+ relations;
13
+ releasing;
11
14
  /** What has already been said, so a filter in a loop says it once. */
12
15
  said = new Set();
13
- constructor(fields, entity, report = {}) {
16
+ constructor(fields, entity, report = {}, relations = [], releasing) {
14
17
  this.fields = fields;
15
18
  this.entity = entity;
16
19
  this.report = report;
20
+ this.relations = relations;
21
+ this.releasing = releasing;
17
22
  }
18
23
  guard(storage) {
19
24
  const writer = storage;
@@ -21,18 +26,33 @@ export class StorageGuard {
21
26
  return storage;
22
27
  const validation = this;
23
28
  const guarded = Object.create(storage);
29
+ const remove = writer.delete;
30
+ if (typeof remove === 'function' && validation.releasing) {
31
+ // What names this row goes first, and this row last: an interruption then leaves fewer
32
+ // children rather than an orphan. A key holds the rest, at the rows, in one statement.
33
+ guarded.delete = async function (id) {
34
+ let gone = false;
35
+ await release(validation.entity, id, validation.releasing, [], async () => {
36
+ gone = await remove.call(this, id);
37
+ });
38
+ return gone;
39
+ };
40
+ }
24
41
  guarded.create = async function (...args) {
25
42
  args[0] = validation.validated(args[0], 'create');
43
+ await validation.targetsOf([args[0]], 'create');
26
44
  return writer.create.apply(this, args);
27
45
  };
28
46
  guarded.update = async function (...args) {
29
47
  args[1] = validation.validated(args[1], 'update');
48
+ await validation.targetsOf([args[1]], 'update');
30
49
  return writer.update.apply(this, args);
31
50
  };
32
51
  const upsert = writer.upsert;
33
52
  if (typeof upsert === 'function') {
34
53
  guarded.upsert = async function (...args) {
35
54
  args[0] = validation.validated(args[0], 'upsert');
55
+ await validation.targetsOf([args[0]], 'upsert');
36
56
  return upsert.apply(this, args);
37
57
  };
38
58
  }
@@ -42,6 +62,9 @@ export class StorageGuard {
42
62
  // the caller asked for as one, and the refusal is readable from the input alone.
43
63
  guarded.upsertAll = async function (...args) {
44
64
  args[0] = args[0].map((row, index) => validation.validated(row, 'upsertAll', index));
65
+ // The keys of the whole page in one read per relation, for the reason above: a page
66
+ // refused on its fourth row has already written three.
67
+ await validation.targetsOf(args[0], 'upsertAll');
45
68
  return upsertAll.apply(this, args);
46
69
  };
47
70
  }
@@ -176,6 +199,39 @@ export class StorageGuard {
176
199
  }
177
200
  return parsed;
178
201
  }
202
+ /**
203
+ * The rows a `ref()` points at, read before the write lands.
204
+ *
205
+ * Only the references the boot could not leave to a foreign key reach here — a target in
206
+ * the same source is already refused by the key, at the rows, which this cannot be: the
207
+ * target may be deleted between the read and the write. It catches what a key catches in
208
+ * practice, which is a key that was never right: a row copied from another environment,
209
+ * an author deleted months ago, an id from a test.
210
+ *
211
+ * A patch that does not carry the field says nothing about it, so it is skipped rather
212
+ * than read as `null`.
213
+ */
214
+ async targetsOf(rows, operation) {
215
+ if (this.relations.length === 0)
216
+ return;
217
+ const refused = await Promise.all(this.relations.map(async (relation) => {
218
+ const keys = [...new Set(rows.map((row) => row[relation.field]).filter((key) => key !== undefined && key !== null))];
219
+ if (keys.length === 0)
220
+ return [];
221
+ const missing = await relation.missing(keys);
222
+ return missing.map((key) => `${relation.field} ${JSON.stringify(key)} — no ${relation.target} holds it`);
223
+ }));
224
+ const errors = refused.flat();
225
+ if (errors.length === 0)
226
+ return;
227
+ throw new FougereError({
228
+ code: ErrorCode.VALIDATION_FAILED,
229
+ message: `Refused on the way out — ${errors.join(', ')}`,
230
+ entity: this.entity,
231
+ operation,
232
+ details: errors,
233
+ });
234
+ }
179
235
  }
180
236
  const unwrap = (one) => 'value' in one ? one.value : undefined;
181
237
  //# sourceMappingURL=StorageGuard.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"StorageGuard.js","sourceRoot":"","sources":["../../src/dispatch/StorageGuard.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"StorageGuard.js","sourceRoot":"","sources":["../../src/dispatch/StorageGuard.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -33,10 +33,15 @@ export { Repository, type RepositoryConstructor } from './prefab/RepositoryConst
33
33
  export { type RepositoryOf } from './prefab/RepositoryOf.js';
34
34
  export { Invocation } from './contract.js';
35
35
  export type { InvocationContext } from './contract.js';
36
+ export type { PartialInvocation } from './contract.js';
36
37
  export { Call } from './contract.js';
37
38
  export { RouteAddress } from './contract.js';
38
39
  export { DispatchLifecycle } from './dispatch/DispatchLifecycle.js';
39
40
  export { Dispatcher } from './dispatch/Dispatcher.js';
41
+ export { release, type Releasing } from './dispatch/Release.js';
42
+ export { releasing } from './boot/relations.js';
43
+ export { type Dependent } from './dispatch/Dependent.js';
44
+ export { JOURNAL, type Journal } from './dispatch/Journal.js';
40
45
  export { DispatchEvent } from './dispatch/DispatchEvent.js';
41
46
  export type { CallPage, CallRecord } from './contract.js';
42
47
  export { driftOf, agrees, explain, type CardDrift } from './contract.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -14,6 +14,9 @@ export { Call } from './contract.js';
14
14
  export { RouteAddress } from './contract.js';
15
15
  export { DispatchLifecycle } from './dispatch/DispatchLifecycle.js';
16
16
  export { Dispatcher } from './dispatch/Dispatcher.js';
17
+ export { release } from './dispatch/Release.js';
18
+ export { releasing } from './boot/relations.js';
19
+ export { JOURNAL } from './dispatch/Journal.js';
17
20
  // The class and not only its type: an observer RECEIVES these, so a package that folds
18
21
  // them — or a test of one — has to be able to make one through the facade.
19
22
  export { DispatchEvent } from './dispatch/DispatchEvent.js';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import type { OperationsMap } from './OperationsMap.js';
1
2
  /**
2
3
  * What an emitter injects. PARTIAL, because announcing is what REALIZES the fact's
3
4
  * `lifecycle.create` — an `at: created()` is stamped by `Emissions`, so requiring it from
@@ -25,4 +26,12 @@ export declare function factsAnnouncedBy(handlers: readonly {
25
26
  export declare function factsAwaitedBy(handlers: readonly {
26
27
  deps: readonly string[];
27
28
  }[]): string[];
29
+ /**
30
+ * What a set of handlers LISTENS to — the dual of what it announces, and the half no
31
+ * dependency spells: accepting a `Fact<T>` IS the subscription, so it is read from the
32
+ * binding plan, where `Emissions` reads it too.
33
+ */
34
+ export declare function factsListenedTo(handlers: readonly {
35
+ operations: OperationsMap;
36
+ }[]): string[];
28
37
  //# sourceMappingURL=Emit.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Emit.d.ts","sourceRoot":"","sources":["../../src/wire/Emit.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,MAAM,MAAM,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;AAEpE,+EAA+E;AAC/E,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE9C;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE/C;AAMD,+EAA+E;AAC/E,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAE7D;AAED,+EAA+E;AAC/E,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAE9D;AAQD,wFAAwF;AACxF,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,SAAS;IAAE,IAAI,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,EAAE,GAAG,MAAM,EAAE,CAE3F;AAED,2FAA2F;AAC3F,wBAAgB,cAAc,CAAC,QAAQ,EAAE,SAAS;IAAE,IAAI,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,EAAE,GAAG,MAAM,EAAE,CAEzF"}
1
+ {"version":3,"file":"Emit.d.ts","sourceRoot":"","sources":["../../src/wire/Emit.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD;;;;;GAKG;AACH,MAAM,MAAM,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;AAEpE,+EAA+E;AAC/E,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE9C;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE/C;AAMD,+EAA+E;AAC/E,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAE7D;AAED,+EAA+E;AAC/E,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAE9D;AAQD,wFAAwF;AACxF,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,SAAS;IAAE,IAAI,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,EAAE,GAAG,MAAM,EAAE,CAE3F;AAED,2FAA2F;AAC3F,wBAAgB,cAAc,CAAC,QAAQ,EAAE,SAAS;IAAE,IAAI,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,EAAE,GAAG,MAAM,EAAE,CAEzF;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,SAAS;IAAE,UAAU,EAAE,aAAa,CAAA;CAAE,EAAE,GAAG,MAAM,EAAE,CAU5F"}