@fougere/core 0.10.0-alpha.0 → 0.12.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 (215) 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/FougereConfig.d.ts +10 -6
  7. package/dist/FougereConfig.d.ts.map +1 -1
  8. package/dist/FougereConfig.js +19 -4
  9. package/dist/FougereConfig.js.map +1 -1
  10. package/dist/FrondConfig.d.ts +0 -6
  11. package/dist/FrondConfig.d.ts.map +1 -1
  12. package/dist/FrondConfig.js.map +1 -1
  13. package/dist/FrondDeclaration.d.ts +2 -9
  14. package/dist/FrondDeclaration.d.ts.map +1 -1
  15. package/dist/FrondDeclaration.js +0 -1
  16. package/dist/FrondDeclaration.js.map +1 -1
  17. package/dist/FrondsStated.d.ts +54 -0
  18. package/dist/FrondsStated.d.ts.map +1 -0
  19. package/dist/FrondsStated.js +26 -0
  20. package/dist/FrondsStated.js.map +1 -0
  21. package/dist/Source.d.ts.map +1 -1
  22. package/dist/Source.js +4 -3
  23. package/dist/Source.js.map +1 -1
  24. package/dist/StatedFrond.d.ts +21 -0
  25. package/dist/StatedFrond.d.ts.map +1 -0
  26. package/dist/StatedFrond.js +34 -0
  27. package/dist/StatedFrond.js.map +1 -0
  28. package/dist/StatedModules.d.ts +19 -0
  29. package/dist/StatedModules.d.ts.map +1 -0
  30. package/dist/StatedModules.js +37 -0
  31. package/dist/StatedModules.js.map +1 -0
  32. package/dist/boot/CreateAppOptions.d.ts +19 -2
  33. package/dist/boot/CreateAppOptions.d.ts.map +1 -1
  34. package/dist/boot/Emissions.d.ts +9 -0
  35. package/dist/boot/Emissions.d.ts.map +1 -1
  36. package/dist/boot/Emissions.js +11 -5
  37. package/dist/boot/Emissions.js.map +1 -1
  38. package/dist/boot/Hosting.d.ts +38 -0
  39. package/dist/boot/Hosting.d.ts.map +1 -0
  40. package/dist/boot/Hosting.js +2 -0
  41. package/dist/boot/Hosting.js.map +1 -0
  42. package/dist/boot/Peer.d.ts +16 -0
  43. package/dist/boot/Peer.d.ts.map +1 -0
  44. package/dist/boot/Peer.js +2 -0
  45. package/dist/boot/Peer.js.map +1 -0
  46. package/dist/boot/bootstrap.d.ts.map +1 -1
  47. package/dist/boot/bootstrap.js +372 -235
  48. package/dist/boot/bootstrap.js.map +1 -1
  49. package/dist/boot/declared.d.ts.map +1 -1
  50. package/dist/boot/declared.js +38 -3
  51. package/dist/boot/declared.js.map +1 -1
  52. package/dist/boot/frame.d.ts +0 -4
  53. package/dist/boot/frame.d.ts.map +1 -1
  54. package/dist/boot/frame.js +31 -14
  55. package/dist/boot/frame.js.map +1 -1
  56. package/dist/boot/hosted.d.ts.map +1 -1
  57. package/dist/boot/hosted.js +4 -3
  58. package/dist/boot/hosted.js.map +1 -1
  59. package/dist/boot/install.d.ts +19 -0
  60. package/dist/boot/install.d.ts.map +1 -1
  61. package/dist/boot/install.js +273 -178
  62. package/dist/boot/install.js.map +1 -1
  63. package/dist/boot/nesting.d.ts +33 -0
  64. package/dist/boot/nesting.d.ts.map +1 -0
  65. package/dist/boot/nesting.js +164 -0
  66. package/dist/boot/nesting.js.map +1 -0
  67. package/dist/boot/ownership.d.ts +0 -1
  68. package/dist/boot/ownership.d.ts.map +1 -1
  69. package/dist/boot/ownership.js +66 -51
  70. package/dist/boot/ownership.js.map +1 -1
  71. package/dist/boot/peerOver.d.ts +4 -0
  72. package/dist/boot/peerOver.d.ts.map +1 -0
  73. package/dist/boot/peerOver.js +12 -0
  74. package/dist/boot/peerOver.js.map +1 -0
  75. package/dist/boot/ports.js +30 -25
  76. package/dist/boot/ports.js.map +1 -1
  77. package/dist/boot/relations.d.ts +54 -0
  78. package/dist/boot/relations.d.ts.map +1 -0
  79. package/dist/boot/relations.js +150 -0
  80. package/dist/boot/relations.js.map +1 -0
  81. package/dist/boot/remote.d.ts.map +1 -1
  82. package/dist/boot/remote.js +31 -28
  83. package/dist/boot/remote.js.map +1 -1
  84. package/dist/boot/seed.d.ts.map +1 -1
  85. package/dist/boot/seed.js +27 -20
  86. package/dist/boot/seed.js.map +1 -1
  87. package/dist/boot/together.d.ts +3 -0
  88. package/dist/boot/together.d.ts.map +1 -1
  89. package/dist/boot/together.js +72 -56
  90. package/dist/boot/together.js.map +1 -1
  91. package/dist/contract.d.ts +1 -0
  92. package/dist/contract.d.ts.map +1 -1
  93. package/dist/contract.js.map +1 -1
  94. package/dist/descriptor/FrondDescriptor.d.ts +7 -0
  95. package/dist/descriptor/FrondDescriptor.d.ts.map +1 -1
  96. package/dist/descriptor/MiddlewareEntry.d.ts +6 -5
  97. package/dist/descriptor/MiddlewareEntry.d.ts.map +1 -1
  98. package/dist/descriptor/ProviderEntry.d.ts +7 -0
  99. package/dist/descriptor/ProviderEntry.d.ts.map +1 -1
  100. package/dist/dispatch/Dependent.d.ts +19 -0
  101. package/dist/dispatch/Dependent.d.ts.map +1 -0
  102. package/dist/dispatch/Dependent.js +2 -0
  103. package/dist/dispatch/Dependent.js.map +1 -0
  104. package/dist/dispatch/Dispatcher.d.ts +14 -1
  105. package/dist/dispatch/Dispatcher.d.ts.map +1 -1
  106. package/dist/dispatch/Dispatcher.js +36 -8
  107. package/dist/dispatch/Dispatcher.js.map +1 -1
  108. package/dist/dispatch/HandlerFacade.d.ts +6 -1
  109. package/dist/dispatch/HandlerFacade.d.ts.map +1 -1
  110. package/dist/dispatch/HandlerFacade.js +23 -20
  111. package/dist/dispatch/HandlerFacade.js.map +1 -1
  112. package/dist/dispatch/Journal.d.ts +25 -0
  113. package/dist/dispatch/Journal.d.ts.map +1 -0
  114. package/dist/dispatch/Journal.js +3 -0
  115. package/dist/dispatch/Journal.js.map +1 -0
  116. package/dist/dispatch/PresenterExecutor.d.ts +6 -0
  117. package/dist/dispatch/PresenterExecutor.d.ts.map +1 -1
  118. package/dist/dispatch/PresenterExecutor.js +30 -22
  119. package/dist/dispatch/PresenterExecutor.js.map +1 -1
  120. package/dist/dispatch/RelationCheck.d.ts +22 -0
  121. package/dist/dispatch/RelationCheck.d.ts.map +1 -0
  122. package/dist/dispatch/RelationCheck.js +2 -0
  123. package/dist/dispatch/RelationCheck.js.map +1 -0
  124. package/dist/dispatch/Release.d.ts +36 -0
  125. package/dist/dispatch/Release.d.ts.map +1 -0
  126. package/dist/dispatch/Release.js +130 -0
  127. package/dist/dispatch/Release.js.map +1 -0
  128. package/dist/dispatch/StorageGuard.d.ts +39 -1
  129. package/dist/dispatch/StorageGuard.d.ts.map +1 -1
  130. package/dist/dispatch/StorageGuard.js +128 -54
  131. package/dist/dispatch/StorageGuard.js.map +1 -1
  132. package/dist/index.d.ts +8 -0
  133. package/dist/index.d.ts.map +1 -1
  134. package/dist/index.js +6 -0
  135. package/dist/index.js.map +1 -1
  136. package/dist/node.d.ts +2 -1
  137. package/dist/node.d.ts.map +1 -1
  138. package/dist/node.js +2 -1
  139. package/dist/node.js.map +1 -1
  140. package/dist/storage/Storage.js +1 -1
  141. package/dist/storage/Storage.js.map +1 -1
  142. package/dist/storage/Store.d.ts.map +1 -1
  143. package/dist/storage/Store.js +29 -21
  144. package/dist/storage/Store.js.map +1 -1
  145. package/dist/verify.d.ts.map +1 -1
  146. package/dist/verify.js +14 -0
  147. package/dist/verify.js.map +1 -1
  148. package/dist/wire/Emit.d.ts +9 -0
  149. package/dist/wire/Emit.d.ts.map +1 -1
  150. package/dist/wire/Emit.js +16 -0
  151. package/dist/wire/Emit.js.map +1 -1
  152. package/dist/wire/Invocation.d.ts +3 -2
  153. package/dist/wire/Invocation.d.ts.map +1 -1
  154. package/dist/wire/Invocation.js +5 -2
  155. package/dist/wire/Invocation.js.map +1 -1
  156. package/dist/wire/InvocationContext.d.ts +2 -0
  157. package/dist/wire/InvocationContext.d.ts.map +1 -1
  158. package/dist/wire/SignedCall.d.ts +2 -0
  159. package/dist/wire/SignedCall.d.ts.map +1 -1
  160. package/dist/wire/binding.d.ts.map +1 -1
  161. package/dist/wire/binding.js +29 -57
  162. package/dist/wire/binding.js.map +1 -1
  163. package/dist/wire/drift.d.ts.map +1 -1
  164. package/dist/wire/drift.js +22 -19
  165. package/dist/wire/drift.js.map +1 -1
  166. package/package.json +4 -4
  167. package/src/CallIdentity.ts +2 -0
  168. package/src/Constraint.ts +1 -1
  169. package/src/FougereConfig.ts +24 -10
  170. package/src/FrondConfig.ts +0 -6
  171. package/src/FrondDeclaration.ts +2 -7
  172. package/src/FrondsStated.ts +72 -0
  173. package/src/Source.ts +3 -2
  174. package/src/StatedFrond.ts +51 -0
  175. package/src/StatedModules.ts +58 -0
  176. package/src/boot/CreateAppOptions.ts +19 -2
  177. package/src/boot/Emissions.ts +16 -5
  178. package/src/boot/Hosting.ts +38 -0
  179. package/src/boot/Peer.ts +15 -0
  180. package/src/boot/bootstrap.ts +512 -271
  181. package/src/boot/declared.ts +38 -3
  182. package/src/boot/frame.ts +42 -11
  183. package/src/boot/hosted.ts +4 -3
  184. package/src/boot/install.ts +400 -203
  185. package/src/boot/nesting.ts +196 -0
  186. package/src/boot/ownership.ts +79 -51
  187. package/src/boot/peerOver.ts +17 -0
  188. package/src/boot/ports.ts +45 -31
  189. package/src/boot/relations.ts +172 -0
  190. package/src/boot/remote.ts +47 -29
  191. package/src/boot/seed.ts +36 -27
  192. package/src/boot/together.ts +102 -63
  193. package/src/contract.ts +1 -0
  194. package/src/descriptor/FrondDescriptor.ts +7 -0
  195. package/src/descriptor/MiddlewareEntry.ts +6 -5
  196. package/src/descriptor/ProviderEntry.ts +7 -0
  197. package/src/dispatch/Dependent.ts +19 -0
  198. package/src/dispatch/Dispatcher.ts +43 -7
  199. package/src/dispatch/HandlerFacade.ts +27 -17
  200. package/src/dispatch/Journal.ts +26 -0
  201. package/src/dispatch/PresenterExecutor.ts +33 -22
  202. package/src/dispatch/RelationCheck.ts +21 -0
  203. package/src/dispatch/Release.ts +180 -0
  204. package/src/dispatch/StorageGuard.ts +138 -55
  205. package/src/index.ts +8 -0
  206. package/src/node.ts +2 -1
  207. package/src/storage/Storage.ts +2 -2
  208. package/src/storage/Store.ts +39 -18
  209. package/src/verify.ts +15 -0
  210. package/src/wire/Emit.ts +23 -0
  211. package/src/wire/Invocation.ts +5 -2
  212. package/src/wire/InvocationContext.ts +2 -0
  213. package/src/wire/SignedCall.ts +2 -0
  214. package/src/wire/binding.ts +26 -58
  215. package/src/wire/drift.ts +48 -21
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Who inherits code from whom, read off `FougereConfig.fronds` and judged before anything is
3
+ * built. It reads no disk and holds no container: the scopes it decides are built later, in
4
+ * `install.ts`, and everything here is a fact about names.
5
+ *
6
+ * Documented: [fronds](https://fougere.dev/docs/infra/fronds).
7
+ */
8
+ import type { Diagnostic } from '../diagnostic.js';
9
+ import { Fronds } from '../descriptor/Fronds.js';
10
+ import { type FrondsStated } from '../FrondsStated.js';
11
+ /** What the tree says, against what this process actually holds. */
12
+ export declare function nestingOf(stated: FrondsStated | undefined, fronds: Fronds, remotes: Record<string, string> | undefined,
13
+ /** This process carries a subset of the project — `only:`, so an absent name is expected. */
14
+ narrowed?: boolean): {
15
+ under: Map<string, string>;
16
+ refused: Diagnostic[];
17
+ };
18
+ /**
19
+ * The same fronds, each parent before the ones inheriting from it — the order the boot installs
20
+ * them in, since a scope hangs off the one above it.
21
+ *
22
+ * A partition and not a sort: inheriting goes one level, so a frond that inherits has nothing
23
+ * under it and two passes are enough. Stable, and the same array when nothing inherits — which
24
+ * is what `orderSeeds` reads.
25
+ */
26
+ export declare function parentsFirst(fronds: Fronds, under: Map<string, string>): Fronds;
27
+ /**
28
+ * The same `under` a boot stamps, for a reader that does not boot — `fougere check` and
29
+ * `fougere explain` resolve the model off a scan, and a scan knows nothing of the tree.
30
+ * Without it they report every inherited dependency as a crossing.
31
+ */
32
+ export declare function nested(fronds: Fronds, stated: FrondsStated | undefined): Fronds;
33
+ //# sourceMappingURL=nesting.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nesting.d.ts","sourceRoot":"","sources":["../../src/boot/nesting.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AACjD,OAAO,EAAgB,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAgDrE,oEAAoE;AACpE,wBAAgB,SAAS,CACvB,MAAM,EAAE,YAAY,GAAG,SAAS,EAChC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS;AAC3C,6FAA6F;AAC7F,QAAQ,UAAQ,GACf;IAAE,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,OAAO,EAAE,UAAU,EAAE,CAAA;CAAE,CAkGvD;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAO/E;AAED;;;;GAIG;AACH,wBAAgB,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,GAAG,SAAS,GAAG,MAAM,CAQ/E"}
@@ -0,0 +1,164 @@
1
+ import { Fronds } from '../descriptor/Fronds.js';
2
+ import { statesModule } from '../FrondsStated.js';
3
+ import { statedFronds } from '../StatedFrond.js';
4
+ /** A frond that holds what a family shares serves nothing — which is what keeps it here. */
5
+ function refuseServingParent(parent, children, refused) {
6
+ if (parent.handlers.length === 0)
7
+ return false;
8
+ const served = [...new Set(parent.handlers.map((handler) => handler.address))];
9
+ refused.push({
10
+ severity: 'blocking',
11
+ code: 'frond-parent-serves',
12
+ filePath: parent.handlers[0].filePath,
13
+ frond: parent.name,
14
+ subject: parent.name,
15
+ message: `'${parent.name}' has children (${children.join(', ')}) and answers at `
16
+ + `${served.join(', ')}. A frond its family inherits from holds the code they share and `
17
+ + 'nothing else — with no façade, nothing can call it and nothing can place it elsewhere. '
18
+ + 'Move its handlers into a child, or take the children out.',
19
+ });
20
+ return true;
21
+ }
22
+ /** Rows belong to a frond something can call — the family case is not traced, so it is refused. */
23
+ function refuseParentEntities(parent, children, refused) {
24
+ if (parent.entities.length === 0)
25
+ return;
26
+ refused.push({
27
+ severity: 'blocking',
28
+ code: 'frond-parent-entities',
29
+ filePath: parent.entities[0].filePath,
30
+ frond: parent.name,
31
+ subject: parent.name,
32
+ message: `'${parent.name}' has children (${children.join(', ')}) and declares `
33
+ + `${parent.entities.map((entity) => entity.name).join(', ')}. A frond they inherit from `
34
+ + 'holds code, not rows. Declare the entity in a child and import it from there — '
35
+ + `\`import X from '@fronds/<child>/entities/X.js'\` reaches it from anywhere.`,
36
+ });
37
+ }
38
+ /** What the tree says, against what this process actually holds. */
39
+ export function nestingOf(stated, fronds, remotes,
40
+ /** This process carries a subset of the project — `only:`, so an absent name is expected. */
41
+ narrowed = false) {
42
+ const refused = [];
43
+ const under = new Map();
44
+ if (stated === undefined)
45
+ return { under, refused };
46
+ const statements = statedFronds(stated);
47
+ const here = new Map(fronds.map((frond) => [frond.name, frond]));
48
+ const childrenOf = new Map();
49
+ const inherits = new Set();
50
+ for (const statement of statements) {
51
+ if (statement.extends === undefined)
52
+ continue;
53
+ inherits.add(statement.key);
54
+ childrenOf.set(statement.extends, [...(childrenOf.get(statement.extends) ?? []), statement.key]);
55
+ }
56
+ for (const statement of statements) {
57
+ if (statement.extends === undefined || !inherits.has(statement.extends))
58
+ continue;
59
+ refused.push({
60
+ severity: 'blocking',
61
+ code: 'frond-extends-chain',
62
+ filePath: 'fougere.config.ts',
63
+ subject: statement.path,
64
+ message: `'${statement.key}' inherits from '${statement.extends}', which inherits from `
65
+ + `'${statedFronds(stated).find((one) => one.key === statement.extends)?.extends}'. `
66
+ + 'Inheriting goes one level: a scope hangs off the one above it, and a chain would make '
67
+ + 'a frond depend on code its own family never named. Move what they share into one '
68
+ + 'frond they both inherit from.',
69
+ });
70
+ }
71
+ // A frond a family inherits from needs no entry of its own — `extends` is said by the
72
+ // inheritor — so what it may not be is asked of the NAMES, not of the entries.
73
+ for (const [parent, children] of childrenOf) {
74
+ const frond = here.get(parent);
75
+ if (frond === undefined)
76
+ continue;
77
+ const placed = stated[parent];
78
+ const address = typeof placed === 'string' ? placed : placed?.remote;
79
+ if (address !== undefined || (remotes && parent in remotes)) {
80
+ refused.push({
81
+ severity: 'blocking',
82
+ code: 'frond-parent-remote',
83
+ filePath: frond.source.path,
84
+ frond: frond.name,
85
+ subject: parent,
86
+ message: `'${parent}' is inherited from by ${children.join(', ')} and is placed at `
87
+ + `${address ?? remotes?.[parent]}. A frond they inherit from stands in every process `
88
+ + 'that holds one of them, so it has no address of its own. Give the address to one of '
89
+ + 'them, or have them inherit from somewhere else.',
90
+ });
91
+ }
92
+ if (!refuseServingParent(frond, children, refused))
93
+ refuseParentEntities(frond, children, refused);
94
+ }
95
+ for (const statement of statements) {
96
+ const frond = here.get(statement.key);
97
+ if (frond === undefined) {
98
+ // Three ways a stated name is absent from this process and says nothing wrong: a module
99
+ // key, which the host imports; an address, whose frond answers elsewhere by definition;
100
+ // and a frond `only:` left out, since the config describes the PROJECT and the flag one
101
+ // process. What is left is a name nothing carries — a typo, and the config is where it
102
+ // was made, so that is where the message points.
103
+ const elsewhere = statement.value !== undefined || (remotes && statement.key in remotes);
104
+ if (!statesModule(statement.key) && !elsewhere && here.size > 0 && !narrowed) {
105
+ refused.push({
106
+ severity: 'blocking',
107
+ code: 'frond-unknown',
108
+ filePath: 'fougere.config.ts',
109
+ subject: statement.path,
110
+ message: `'${statement.path}' names no frond this project holds. It has `
111
+ + `${[...here.keys()].join(', ') || 'none'}. Check the spelling, or drop the entry.`,
112
+ });
113
+ }
114
+ continue;
115
+ }
116
+ if (statement.extends !== undefined && !here.has(statement.extends)) {
117
+ refused.push({
118
+ severity: 'blocking',
119
+ code: 'frond-family-split',
120
+ filePath: frond.source.path,
121
+ frond: frond.name,
122
+ subject: statement.path,
123
+ message: `'${statement.key}' inherits from '${statement.extends}', which this process does `
124
+ + 'not carry. A frond cannot leave the code it resolves behind — carry the two '
125
+ + `together, or take '${statement.key}' out from under '${statement.extends}'.`,
126
+ });
127
+ continue;
128
+ }
129
+ if (statement.extends !== undefined)
130
+ under.set(statement.key, statement.extends);
131
+ }
132
+ return { under, refused };
133
+ }
134
+ /**
135
+ * The same fronds, each parent before the ones inheriting from it — the order the boot installs
136
+ * them in, since a scope hangs off the one above it.
137
+ *
138
+ * A partition and not a sort: inheriting goes one level, so a frond that inherits has nothing
139
+ * under it and two passes are enough. Stable, and the same array when nothing inherits — which
140
+ * is what `orderSeeds` reads.
141
+ */
142
+ export function parentsFirst(fronds, under) {
143
+ if (under.size === 0)
144
+ return fronds;
145
+ return Fronds.hosting([
146
+ ...fronds.filter((frond) => !under.has(frond.name)),
147
+ ...fronds.filter((frond) => under.has(frond.name)),
148
+ ]);
149
+ }
150
+ /**
151
+ * The same `under` a boot stamps, for a reader that does not boot — `fougere check` and
152
+ * `fougere explain` resolve the model off a scan, and a scan knows nothing of the tree.
153
+ * Without it they report every inherited dependency as a crossing.
154
+ */
155
+ export function nested(fronds, stated) {
156
+ const { under } = nestingOf(stated, fronds, undefined, true);
157
+ for (const frond of fronds) {
158
+ const parent = under.get(frond.name);
159
+ if (parent !== undefined)
160
+ frond.extends = parent;
161
+ }
162
+ return parentsFirst(fronds, under);
163
+ }
164
+ //# sourceMappingURL=nesting.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nesting.js","sourceRoot":"","sources":["../../src/boot/nesting.ts"],"names":[],"mappings":"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"}
@@ -5,7 +5,6 @@ import type { Diagnostic } from '../diagnostic.js';
5
5
  export declare function sharedNames(frond: FrondDescriptor, refused: Diagnostic[]): void;
6
6
  /** Who owns an entity's storage. */
7
7
  export declare function ownersOf(providers: readonly ProviderEntry[], frond: string, refused: Diagnostic[]): Map<string, string>;
8
- /** `Storage<E>` is not a word of the user's vocabulary — `<E>Repository` is the one way in. */
9
8
  export declare function storageInUserCode(frond: FrondDescriptor, owners: Map<string, string>, known: (entity: string) => boolean, refused: Diagnostic[]): void;
10
9
  /** An owned entity has no automatic CRUD — said at boot, not at the first request. */
11
10
  export declare function crudOnOwned(frond: FrondDescriptor, owners: Map<string, string>, refused: Diagnostic[]): void;
@@ -1 +1 @@
1
- {"version":3,"file":"ownership.d.ts","sourceRoot":"","sources":["../../src/boot/ownership.ts"],"names":[],"mappings":"AACA,OAAO,EAAU,KAAK,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAChF,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAKpE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD,kGAAkG;AAClG,wBAAgB,WAAW,CAAC,KAAK,EAAE,eAAe,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,IAAI,CAoB/E;AAED,oCAAoC;AACpC,wBAAgB,QAAQ,CACtB,SAAS,EAAE,SAAS,aAAa,EAAE,EACnC,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,UAAU,EAAE,GACpB,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAmCrB;AAaD,+FAA+F;AAC/F,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,eAAe,EACtB,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAC3B,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,EAClC,OAAO,EAAE,UAAU,EAAE,GACpB,IAAI,CA8DN;AAED,sFAAsF;AACtF,wBAAgB,WAAW,CACzB,KAAK,EAAE,eAAe,EACtB,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAC3B,OAAO,EAAE,UAAU,EAAE,GACpB,IAAI,CAiBN"}
1
+ {"version":3,"file":"ownership.d.ts","sourceRoot":"","sources":["../../src/boot/ownership.ts"],"names":[],"mappings":"AACA,OAAO,EAAU,KAAK,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAChF,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAKpE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD,kGAAkG;AAClG,wBAAgB,WAAW,CAAC,KAAK,EAAE,eAAe,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,IAAI,CAoB/E;AAED,oCAAoC;AACpC,wBAAgB,QAAQ,CACtB,SAAS,EAAE,SAAS,aAAa,EAAE,EACnC,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,UAAU,EAAE,GACpB,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAmCrB;AA2FD,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,eAAe,EACtB,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAC3B,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,EAClC,OAAO,EAAE,UAAU,EAAE,GACpB,IAAI,CAaN;AAED,sFAAsF;AACtF,wBAAgB,WAAW,CACzB,KAAK,EAAE,eAAe,EACtB,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAC3B,OAAO,EAAE,UAAU,EAAE,GACpB,IAAI,CAiBN"}
@@ -75,6 +75,69 @@ function builtOn(ctor) {
75
75
  return target?.name ? [lowerFirst(target.name)] : [];
76
76
  }
77
77
  /** `Storage<E>` is not a word of the user's vocabulary — `<E>Repository` is the one way in. */
78
+ /**
79
+ * A provider named `<Entity>Storage` takes the key of that entity's own storage — and the storage
80
+ * is registered second, so the provider is never resolved. The name is already wrong by two other
81
+ * rules, which is why nothing hits it; it is said rather than left silent.
82
+ */
83
+ function refuseStorageKeyAsProvider(provider, frond, known, refused) {
84
+ // The key the boot registers it under, which a bundler may have renamed — the same reading
85
+ // `ProviderEntry.name` exists for.
86
+ const registered = nameOf(provider);
87
+ const held = entityOfStorageKey(registered, known);
88
+ if (!held)
89
+ return;
90
+ refused.push({
91
+ severity: 'blocking',
92
+ code: 'storage-key-is-provider',
93
+ filePath: provider.filePath,
94
+ frond,
95
+ subject: registered,
96
+ message: `${registered} is a provider, and it is the container key of ${held}'s own storage `
97
+ + '— the storage is registered second, so the provider is never resolved. Name it for '
98
+ + 'what it holds; `<Entity>Storage` belongs to the entity.',
99
+ });
100
+ }
101
+ /**
102
+ * Storage is reached through a repository, and an OWNED entity's not even that way: an aggregate's
103
+ * members are reached through it and nowhere else. The ownership question is asked first, so a
104
+ * member says who owns it rather than being told to write a repository it may not have.
105
+ */
106
+ function refuseStorageReached(decl, frond, owners, known, refused) {
107
+ const allowed = decl.kind === 'provider' ? builtOn(decl.ctor) : [];
108
+ for (const dep of decl.deps) {
109
+ const entity = entityOfStorageKey(dep, known);
110
+ if (!entity)
111
+ continue;
112
+ const owner = owners.get(entity);
113
+ if (owner && owner !== decl.ctor.name) {
114
+ refused.push({
115
+ severity: 'blocking',
116
+ code: 'aggregate-storage-reached',
117
+ filePath: decl.filePath,
118
+ frond,
119
+ subject: `${decl.ctor.name}(${dep})`,
120
+ message: `${decl.ctor.name} asks for ${dep}, and ${owner} owns ${entity}. Nothing else `
121
+ + `reaches an owned entity's storage — name the operation on ${owner} and ask for it: `
122
+ + `constructor(private ${entity}: ${owner}) {}`,
123
+ });
124
+ continue;
125
+ }
126
+ if (allowed.includes(entity))
127
+ continue;
128
+ refused.push({
129
+ severity: 'blocking',
130
+ code: 'storage-outside-repository',
131
+ filePath: decl.filePath,
132
+ frond,
133
+ subject: `${decl.ctor.name}(${dep})`,
134
+ message: `${decl.ctor.name} asks for ${dep}. Storage is reached through a repository, never `
135
+ + `through the port: constructor(private ${entity}: ${repositoryKeyOf(entity)}) {}. It `
136
+ + `answers every gesture ${dep} does, whether or not anyone wrote the file — and the day `
137
+ + `${entity} belongs to an aggregate, this line does not move.`,
138
+ });
139
+ }
140
+ }
78
141
  export function storageInUserCode(frond, owners, known, refused) {
79
142
  const facades = [
80
143
  ...frond.handlers.map((h) => ({ ...h, kind: 'handler' })),
@@ -82,58 +145,10 @@ export function storageInUserCode(frond, owners, known, refused) {
82
145
  ...frond.collectors.map((c) => ({ ...c, kind: 'collector' })),
83
146
  ];
84
147
  const holders = frond.providers.map((p) => ({ ...p, kind: 'provider' }));
85
- for (const provider of holders) {
86
- // The key the boot registers it under, which a bundler may have renamed — the same
87
- // reading `ProviderEntry.name` exists for.
88
- const registered = nameOf(provider);
89
- const held = entityOfStorageKey(registered, known);
90
- if (!held)
91
- continue;
92
- refused.push({
93
- severity: 'blocking',
94
- code: 'storage-key-is-provider',
95
- filePath: provider.filePath,
96
- frond: frond.name,
97
- subject: registered,
98
- message: `${registered} is a provider, and it is the container key of ${held}'s own storage `
99
- + '— the storage is registered second, so the provider is never resolved. Name it for '
100
- + 'what it holds; `<Entity>Storage` belongs to the entity.',
101
- });
102
- }
148
+ for (const provider of holders)
149
+ refuseStorageKeyAsProvider(provider, frond.name, known, refused);
103
150
  for (const decl of [...facades, ...holders]) {
104
- const allowed = decl.kind === 'provider' ? builtOn(decl.ctor) : [];
105
- for (const dep of decl.deps) {
106
- const entity = entityOfStorageKey(dep, known);
107
- if (!entity)
108
- continue;
109
- const owner = owners.get(entity);
110
- if (owner && owner !== decl.ctor.name) {
111
- refused.push({
112
- severity: 'blocking',
113
- code: 'aggregate-storage-reached',
114
- filePath: decl.filePath,
115
- frond: frond.name,
116
- subject: `${decl.ctor.name}(${dep})`,
117
- message: `${decl.ctor.name} asks for ${dep}, and ${owner} owns ${entity}. Nothing else `
118
- + `reaches an owned entity's storage — name the operation on ${owner} and ask for it: `
119
- + `constructor(private ${entity}: ${owner}) {}`,
120
- });
121
- continue;
122
- }
123
- if (allowed.includes(entity))
124
- continue;
125
- refused.push({
126
- severity: 'blocking',
127
- code: 'storage-outside-repository',
128
- filePath: decl.filePath,
129
- frond: frond.name,
130
- subject: `${decl.ctor.name}(${dep})`,
131
- message: `${decl.ctor.name} asks for ${dep}. Storage is reached through a repository, never `
132
- + `through the port: constructor(private ${entity}: ${repositoryKeyOf(entity)}) {}. It `
133
- + `answers every gesture ${dep} does, whether or not anyone wrote the file — and the day `
134
- + `${entity} belongs to an aggregate, this line does not move.`,
135
- });
136
- }
151
+ refuseStorageReached(decl, frond.name, owners, known, refused);
137
152
  }
138
153
  }
139
154
  /** An owned entity has no automatic CRUD — said at boot, not at the first request. */
@@ -1 +1 @@
1
- {"version":3,"file":"ownership.js","sourceRoot":"","sources":["../../src/boot/ownership.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ownership.js","sourceRoot":"","sources":["../../src/boot/ownership.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { Transport } from '../wire/Transport.js';
2
+ import type { Peer } from './Peer.js';
3
+ export declare function peerOver(transport: Transport): Peer;
4
+ //# sourceMappingURL=peerOver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"peerOver.d.ts","sourceRoot":"","sources":["../../src/boot/peerOver.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEtC,wBAAgB,QAAQ,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI,CAUnD"}
@@ -0,0 +1,12 @@
1
+ /** The two readings core serves everywhere, asked of one process over one transport. */
2
+ import { Invocation } from '../wire/Invocation.js';
3
+ import { RPC_ENTITY } from '../wire/RpcAnswer.js';
4
+ export function peerOver(transport) {
5
+ const ask = (op, params) => transport({ entity: RPC_ENTITY, op }, { ...Invocation.empty, params: params });
6
+ return {
7
+ missing: async (entity, keys) => (await ask('holds', { entity, keys })).missing,
8
+ dependents: (entity) => ask('dependents', { entity }),
9
+ release: async (entity, key, visited) => { await ask('release', { entity, key, visited }); },
10
+ };
11
+ }
12
+ //# sourceMappingURL=peerOver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"peerOver.js","sourceRoot":"","sources":["../../src/boot/peerOver.ts"],"names":[],"mappings":"AAAA,wFAAwF;AACxF,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAIlD,MAAM,UAAU,QAAQ,CAAC,SAAoB;IAC3C,MAAM,GAAG,GAAG,CAAC,EAAU,EAAE,MAA+B,EAAE,EAAE,CAC1D,SAAS,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,MAAe,EAAE,CAAC,CAAC;IAE1F,OAAO;QACL,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,CAC7B,CAAC,MAAM,GAAG,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAqC,CAAC,OAAO;QACrF,UAAU,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,CAAC,YAAY,EAAE,EAAE,MAAM,EAAE,CAAC;QACrD,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,GAAG,MAAM,GAAG,CAAC,SAAS,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;KAC7F,CAAC;AACJ,CAAC"}
@@ -80,31 +80,39 @@ export function portBindings(providers, answers, chosen, refused) {
80
80
  return bound;
81
81
  }
82
82
  function chain(port, impls, wrappers, stated, refused) {
83
- // The whole chain, outside in — a string is a chain of one, and the last name is what
84
- // actually answers. What a deployment wraps its realization with is the same kind of
85
- // decision as which realization it uses, so it is the same key.
86
- if (stated !== undefined) {
87
- const order = typeof stated === 'string' ? [stated] : stated;
88
- const all = [...wrappers, ...impls];
89
- return order.flatMap((name) => {
90
- const pick = all.find((one) => nameOf(one) === name);
91
- if (!pick) {
92
- refused.push({
93
- severity: 'blocking',
94
- code: 'port-not-extended',
95
- filePath: all[0]?.filePath ?? 'fougere.config.ts',
96
- subject: `ports: { ${port}: '${name}' }`,
97
- message: `${port}: '${name}' does not extend it. What does: ${all.map(nameOf).join(', ')}.`,
98
- });
99
- return [];
100
- }
83
+ if (stated !== undefined)
84
+ return statedChain(port, [...wrappers, ...impls], stated, refused);
85
+ refuseUndecided(port, impls, wrappers, refused);
86
+ return [...wrappers, ...impls];
87
+ }
88
+ /**
89
+ * The whole chain, outside in — a string is a chain of one, and the last name is what actually
90
+ * answers. What a deployment wraps its realization with is the same kind of decision as which
91
+ * realization it uses, so it is the same key.
92
+ */
93
+ function statedChain(port, all, stated, refused) {
94
+ const order = typeof stated === 'string' ? [stated] : stated;
95
+ return order.flatMap((name) => {
96
+ const pick = all.find((one) => nameOf(one) === name);
97
+ if (pick)
101
98
  return [pick];
99
+ refused.push({
100
+ severity: 'blocking',
101
+ code: 'port-not-extended',
102
+ filePath: all[0]?.filePath ?? 'fougere.config.ts',
103
+ subject: `ports: { ${port}: '${name}' }`,
104
+ message: `${port}: '${name}' does not extend it. What does: ${all.map(nameOf).join(', ')}.`,
102
105
  });
103
- }
106
+ return [];
107
+ });
108
+ }
109
+ /**
110
+ * Two realizations, or two wrappers, and nothing saying which — refused rather than settled by
111
+ * scan order, the same reason `remotes` refuses two owners of one entity: whichever won would
112
+ * depend on the order files were read, and the handler would charge the wrong provider silently.
113
+ */
114
+ function refuseUndecided(port, impls, wrappers, refused) {
104
115
  if (impls.length > 1) {
105
- // Refusing rather than keeping one, for the reason `remotes` refuses two owners
106
- // of an entity: whichever won would depend on scan order, and the handler would
107
- // charge the wrong provider without a word.
108
116
  refused.push({
109
117
  severity: 'blocking',
110
118
  code: 'port-implemented-twice',
@@ -114,10 +122,8 @@ function chain(port, impls, wrappers, stated, refused) {
114
122
  + 'answers it. Which realization a deployment uses is not a fact about the code — state it: '
115
123
  + `ports: { ${port}: '${nameOf(impls[0])}' } in fougere.config.ts.`,
116
124
  });
117
- return [...wrappers, ...impls];
118
125
  }
119
126
  if (wrappers.length > 1) {
120
- // Same refusal one layer out: two wrappers are an ORDER, and scan order is not one.
121
127
  refused.push({
122
128
  severity: 'blocking',
123
129
  code: 'port-wrapped-twice',
@@ -129,6 +135,5 @@ function chain(port, impls, wrappers, stated, refused) {
129
135
  + 'in fougere.config.ts.',
130
136
  });
131
137
  }
132
- return [...wrappers, ...impls];
133
138
  }
134
139
  //# sourceMappingURL=ports.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ports.js","sourceRoot":"","sources":["../../src/boot/ports.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ports.js","sourceRoot":"","sources":["../../src/boot/ports.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,54 @@
1
+ /** Who holds a `ref()`: the source it lives in, this process, or nobody. */
2
+ import { type SchemaView } from '@fougere/schema';
3
+ import type { Dependent } from '../dispatch/Dependent.js';
4
+ import type { RelationCheck } from '../dispatch/RelationCheck.js';
5
+ import type { Hosting } from './Hosting.js';
6
+ import type { Diagnostic } from '../diagnostic.js';
7
+ import type { Releasing } from '../dispatch/Release.js';
8
+ /**
9
+ * The references a foreign key cannot hold, each as a read the guard makes before the write.
10
+ *
11
+ * Documented: [entities](https://fougere.dev/docs/schema/entities).
12
+ */
13
+ export declare function heldBy(entity: SchemaView, name: string, hosting: Hosting): RelationCheck[];
14
+ /**
15
+ * The rows that name this entity's, and what becomes of them — the dual of `heldBy`.
16
+ *
17
+ * Read over EVERY entity of the app, because a namer is declared wherever its own frond is,
18
+ * and the target learns of it from nowhere else. What a key already holds is left out: the
19
+ * engine answers it at the rows, inside the delete's own transaction.
20
+ *
21
+ * Documented: [entities](https://fougere.dev/docs/schema/entities).
22
+ */
23
+ export declare function dependentsOf(target: string, hosting: Hosting): Dependent[];
24
+ /**
25
+ * `set null` on a field that may not hold one — refused where the FIELD is, not in `ref()`.
26
+ *
27
+ * `optional()` wraps a `ref()` and is applied after it, so only the field the entity ended up
28
+ * declaring knows whether null is admitted. Asked here rather than at the target, because the
29
+ * declaration is the namer's and so is the fix.
30
+ */
31
+ export declare function refuseUnwritableNull(entity: SchemaView, name: string, filePath: string): Diagnostic[];
32
+ /** The checks nothing in this process can answer — asked once every frond has registered. */
33
+ export declare function unheldAmong(checks: readonly RelationCheck[], hosting: Hosting): string[];
34
+ /**
35
+ * What a release asks the boot, built once per app — the same `Hosting` the guard reads.
36
+ *
37
+ * `dependentsOf` is answered per call rather than cached: a frond installed after this one
38
+ * brings rows that name an entity already registered, and a table taken at boot would miss
39
+ * exactly the crossings this exists for.
40
+ */
41
+ export declare function releasing(hosting: Hosting): Releasing;
42
+ /**
43
+ * A release this process can START and cannot FINISH.
44
+ *
45
+ * Read from what is HERE and never asked of anyone: an entity states `cascade` or `set null`,
46
+ * and nothing registered a journal — both facts are local, so the line is too. The same shape
47
+ * as `unique declared, and the source does not enforce it`, one rung up: what is declared, and
48
+ * what this process cannot keep.
49
+ *
50
+ * Silent when a key holds every hop: the engine carries those out in one statement, and there
51
+ * is no half-done state for anybody to finish.
52
+ */
53
+ export declare function unfinishable(hosting: Hosting): string[];
54
+ //# sourceMappingURL=relations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relations.d.ts","sourceRoot":"","sources":["../../src/boot/relations.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,OAAO,EAA4B,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC5E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAE,SAAS,EAAQ,MAAM,wBAAwB,CAAC;AA4C9D;;;;GAIG;AACH,wBAAgB,MAAM,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,aAAa,EAAE,CA0B1F;AAED;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,SAAS,EAAE,CAI1E;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,UAAU,EAAE,CAiBrG;AAED,6FAA6F;AAC7F,wBAAgB,WAAW,CAAC,MAAM,EAAE,SAAS,aAAa,EAAE,EAAE,OAAO,EAAE,OAAO,GAAG,MAAM,EAAE,CAIxF;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,OAAO,GAAG,SAAS,CAQrD;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,EAAE,CAYvD"}