@dryvcode/author 0.0.1

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 (286) hide show
  1. package/README.md +341 -0
  2. package/dist/behavior/duration.d.ts +7 -0
  3. package/dist/behavior/duration.d.ts.map +1 -0
  4. package/dist/behavior/duration.js +20 -0
  5. package/dist/behavior/duration.js.map +1 -0
  6. package/dist/behavior/event.d.ts +23 -0
  7. package/dist/behavior/event.d.ts.map +1 -0
  8. package/dist/behavior/event.js +57 -0
  9. package/dist/behavior/event.js.map +1 -0
  10. package/dist/behavior/failure.d.ts +19 -0
  11. package/dist/behavior/failure.d.ts.map +1 -0
  12. package/dist/behavior/failure.js +48 -0
  13. package/dist/behavior/failure.js.map +1 -0
  14. package/dist/behavior/index.d.ts +6 -0
  15. package/dist/behavior/index.d.ts.map +1 -0
  16. package/dist/behavior/index.js +6 -0
  17. package/dist/behavior/index.js.map +1 -0
  18. package/dist/behavior/operation.d.ts +72 -0
  19. package/dist/behavior/operation.d.ts.map +1 -0
  20. package/dist/behavior/operation.js +193 -0
  21. package/dist/behavior/operation.js.map +1 -0
  22. package/dist/behavior/policy.d.ts +29 -0
  23. package/dist/behavior/policy.d.ts.map +1 -0
  24. package/dist/behavior/policy.js +80 -0
  25. package/dist/behavior/policy.js.map +1 -0
  26. package/dist/composition/application.d.ts +28 -0
  27. package/dist/composition/application.d.ts.map +1 -0
  28. package/dist/composition/application.js +64 -0
  29. package/dist/composition/application.js.map +1 -0
  30. package/dist/composition/feature.d.ts +37 -0
  31. package/dist/composition/feature.d.ts.map +1 -0
  32. package/dist/composition/feature.js +82 -0
  33. package/dist/composition/feature.js.map +1 -0
  34. package/dist/composition/index.d.ts +3 -0
  35. package/dist/composition/index.d.ts.map +1 -0
  36. package/dist/composition/index.js +3 -0
  37. package/dist/composition/index.js.map +1 -0
  38. package/dist/contracts/behavior.d.ts +106 -0
  39. package/dist/contracts/behavior.d.ts.map +1 -0
  40. package/dist/contracts/behavior.js +2 -0
  41. package/dist/contracts/behavior.js.map +1 -0
  42. package/dist/contracts/composition.d.ts +20 -0
  43. package/dist/contracts/composition.d.ts.map +1 -0
  44. package/dist/contracts/composition.js +2 -0
  45. package/dist/contracts/composition.js.map +1 -0
  46. package/dist/contracts/definitions.d.ts +286 -0
  47. package/dist/contracts/definitions.d.ts.map +1 -0
  48. package/dist/contracts/definitions.js +35 -0
  49. package/dist/contracts/definitions.js.map +1 -0
  50. package/dist/contracts/expressions.d.ts +44 -0
  51. package/dist/contracts/expressions.d.ts.map +1 -0
  52. package/dist/contracts/expressions.js +2 -0
  53. package/dist/contracts/expressions.js.map +1 -0
  54. package/dist/contracts/foundation.d.ts +141 -0
  55. package/dist/contracts/foundation.d.ts.map +1 -0
  56. package/dist/contracts/foundation.js +2 -0
  57. package/dist/contracts/foundation.js.map +1 -0
  58. package/dist/contracts/index.d.ts +10 -0
  59. package/dist/contracts/index.d.ts.map +1 -0
  60. package/dist/contracts/index.js +10 -0
  61. package/dist/contracts/index.js.map +1 -0
  62. package/dist/contracts/interaction.d.ts +52 -0
  63. package/dist/contracts/interaction.d.ts.map +1 -0
  64. package/dist/contracts/interaction.js +2 -0
  65. package/dist/contracts/interaction.js.map +1 -0
  66. package/dist/contracts/interfaces.d.ts +73 -0
  67. package/dist/contracts/interfaces.d.ts.map +1 -0
  68. package/dist/contracts/interfaces.js +2 -0
  69. package/dist/contracts/interfaces.js.map +1 -0
  70. package/dist/contracts/orchestration.d.ts +56 -0
  71. package/dist/contracts/orchestration.d.ts.map +1 -0
  72. package/dist/contracts/orchestration.js +2 -0
  73. package/dist/contracts/orchestration.js.map +1 -0
  74. package/dist/contracts/project.d.ts +70 -0
  75. package/dist/contracts/project.d.ts.map +1 -0
  76. package/dist/contracts/project.js +2 -0
  77. package/dist/contracts/project.js.map +1 -0
  78. package/dist/data/index.d.ts +2 -0
  79. package/dist/data/index.d.ts.map +1 -0
  80. package/dist/data/index.js +2 -0
  81. package/dist/data/index.js.map +1 -0
  82. package/dist/data/storage.d.ts +23 -0
  83. package/dist/data/storage.d.ts.map +1 -0
  84. package/dist/data/storage.js +93 -0
  85. package/dist/data/storage.js.map +1 -0
  86. package/dist/definitions/expressions/expression.d.ts +49 -0
  87. package/dist/definitions/expressions/expression.d.ts.map +1 -0
  88. package/dist/definitions/expressions/expression.js +181 -0
  89. package/dist/definitions/expressions/expression.js.map +1 -0
  90. package/dist/definitions/expressions/index.d.ts +2 -0
  91. package/dist/definitions/expressions/index.d.ts.map +1 -0
  92. package/dist/definitions/expressions/index.js +2 -0
  93. package/dist/definitions/expressions/index.js.map +1 -0
  94. package/dist/definitions/index.d.ts +7 -0
  95. package/dist/definitions/index.d.ts.map +1 -0
  96. package/dist/definitions/index.js +7 -0
  97. package/dist/definitions/index.js.map +1 -0
  98. package/dist/definitions/properties/advanced.d.ts +27 -0
  99. package/dist/definitions/properties/advanced.d.ts.map +1 -0
  100. package/dist/definitions/properties/advanced.js +95 -0
  101. package/dist/definitions/properties/advanced.js.map +1 -0
  102. package/dist/definitions/properties/base.d.ts +29 -0
  103. package/dist/definitions/properties/base.d.ts.map +1 -0
  104. package/dist/definitions/properties/base.js +60 -0
  105. package/dist/definitions/properties/base.js.map +1 -0
  106. package/dist/definitions/properties/composite.d.ts +14 -0
  107. package/dist/definitions/properties/composite.d.ts.map +1 -0
  108. package/dist/definitions/properties/composite.js +41 -0
  109. package/dist/definitions/properties/composite.js.map +1 -0
  110. package/dist/definitions/properties/enumeration.d.ts +17 -0
  111. package/dist/definitions/properties/enumeration.d.ts.map +1 -0
  112. package/dist/definitions/properties/enumeration.js +48 -0
  113. package/dist/definitions/properties/enumeration.js.map +1 -0
  114. package/dist/definitions/properties/generic.d.ts +22 -0
  115. package/dist/definitions/properties/generic.d.ts.map +1 -0
  116. package/dist/definitions/properties/generic.js +61 -0
  117. package/dist/definitions/properties/generic.js.map +1 -0
  118. package/dist/definitions/properties/index.d.ts +12 -0
  119. package/dist/definitions/properties/index.d.ts.map +1 -0
  120. package/dist/definitions/properties/index.js +3 -0
  121. package/dist/definitions/properties/index.js.map +1 -0
  122. package/dist/definitions/properties/metadata.d.ts +6 -0
  123. package/dist/definitions/properties/metadata.d.ts.map +1 -0
  124. package/dist/definitions/properties/metadata.js +4 -0
  125. package/dist/definitions/properties/metadata.js.map +1 -0
  126. package/dist/definitions/properties/primitive.d.ts +66 -0
  127. package/dist/definitions/properties/primitive.d.ts.map +1 -0
  128. package/dist/definitions/properties/primitive.js +266 -0
  129. package/dist/definitions/properties/primitive.js.map +1 -0
  130. package/dist/definitions/properties/property.d.ts +171 -0
  131. package/dist/definitions/properties/property.d.ts.map +1 -0
  132. package/dist/definitions/properties/property.js +211 -0
  133. package/dist/definitions/properties/property.js.map +1 -0
  134. package/dist/definitions/properties/temporal.d.ts +37 -0
  135. package/dist/definitions/properties/temporal.d.ts.map +1 -0
  136. package/dist/definitions/properties/temporal.js +115 -0
  137. package/dist/definitions/properties/temporal.js.map +1 -0
  138. package/dist/definitions/schemas/field.d.ts +123 -0
  139. package/dist/definitions/schemas/field.d.ts.map +1 -0
  140. package/dist/definitions/schemas/field.js +329 -0
  141. package/dist/definitions/schemas/field.js.map +1 -0
  142. package/dist/definitions/schemas/index.d.ts +6 -0
  143. package/dist/definitions/schemas/index.d.ts.map +1 -0
  144. package/dist/definitions/schemas/index.js +6 -0
  145. package/dist/definitions/schemas/index.js.map +1 -0
  146. package/dist/definitions/schemas/projection.d.ts +90 -0
  147. package/dist/definitions/schemas/projection.d.ts.map +1 -0
  148. package/dist/definitions/schemas/projection.js +146 -0
  149. package/dist/definitions/schemas/projection.js.map +1 -0
  150. package/dist/definitions/schemas/relation.d.ts +12 -0
  151. package/dist/definitions/schemas/relation.d.ts.map +1 -0
  152. package/dist/definitions/schemas/relation.js +27 -0
  153. package/dist/definitions/schemas/relation.js.map +1 -0
  154. package/dist/definitions/schemas/schema.d.ts +46 -0
  155. package/dist/definitions/schemas/schema.d.ts.map +1 -0
  156. package/dist/definitions/schemas/schema.js +134 -0
  157. package/dist/definitions/schemas/schema.js.map +1 -0
  158. package/dist/definitions/schemas/source.d.ts +30 -0
  159. package/dist/definitions/schemas/source.d.ts.map +1 -0
  160. package/dist/definitions/schemas/source.js +73 -0
  161. package/dist/definitions/schemas/source.js.map +1 -0
  162. package/dist/definitions/types/expressions.d.ts +28 -0
  163. package/dist/definitions/types/expressions.d.ts.map +1 -0
  164. package/dist/definitions/types/expressions.js +81 -0
  165. package/dist/definitions/types/expressions.js.map +1 -0
  166. package/dist/definitions/types/index.d.ts +4 -0
  167. package/dist/definitions/types/index.d.ts.map +1 -0
  168. package/dist/definitions/types/index.js +4 -0
  169. package/dist/definitions/types/index.js.map +1 -0
  170. package/dist/definitions/types/parameter.d.ts +9 -0
  171. package/dist/definitions/types/parameter.d.ts.map +1 -0
  172. package/dist/definitions/types/parameter.js +24 -0
  173. package/dist/definitions/types/parameter.js.map +1 -0
  174. package/dist/definitions/types/spec.d.ts +26 -0
  175. package/dist/definitions/types/spec.d.ts.map +1 -0
  176. package/dist/definitions/types/spec.js +74 -0
  177. package/dist/definitions/types/spec.js.map +1 -0
  178. package/dist/foundation/declaration.d.ts +24 -0
  179. package/dist/foundation/declaration.d.ts.map +1 -0
  180. package/dist/foundation/declaration.js +43 -0
  181. package/dist/foundation/declaration.js.map +1 -0
  182. package/dist/foundation/group.d.ts +55 -0
  183. package/dist/foundation/group.d.ts.map +1 -0
  184. package/dist/foundation/group.js +199 -0
  185. package/dist/foundation/group.js.map +1 -0
  186. package/dist/foundation/index.d.ts +7 -0
  187. package/dist/foundation/index.d.ts.map +1 -0
  188. package/dist/foundation/index.js +7 -0
  189. package/dist/foundation/index.js.map +1 -0
  190. package/dist/foundation/metadata.d.ts +22 -0
  191. package/dist/foundation/metadata.d.ts.map +1 -0
  192. package/dist/foundation/metadata.js +43 -0
  193. package/dist/foundation/metadata.js.map +1 -0
  194. package/dist/foundation/ref.d.ts +200 -0
  195. package/dist/foundation/ref.d.ts.map +1 -0
  196. package/dist/foundation/ref.js +230 -0
  197. package/dist/foundation/ref.js.map +1 -0
  198. package/dist/foundation/scope.d.ts +13 -0
  199. package/dist/foundation/scope.d.ts.map +1 -0
  200. package/dist/foundation/scope.js +63 -0
  201. package/dist/foundation/scope.js.map +1 -0
  202. package/dist/foundation/value-declaration.d.ts +9 -0
  203. package/dist/foundation/value-declaration.d.ts.map +1 -0
  204. package/dist/foundation/value-declaration.js +2 -0
  205. package/dist/foundation/value-declaration.js.map +1 -0
  206. package/dist/index.d.ts +16 -0
  207. package/dist/index.d.ts.map +1 -0
  208. package/dist/index.js +15 -0
  209. package/dist/index.js.map +1 -0
  210. package/dist/interaction/index.d.ts +3 -0
  211. package/dist/interaction/index.d.ts.map +1 -0
  212. package/dist/interaction/index.js +3 -0
  213. package/dist/interaction/index.js.map +1 -0
  214. package/dist/interaction/part.d.ts +58 -0
  215. package/dist/interaction/part.d.ts.map +1 -0
  216. package/dist/interaction/part.js +178 -0
  217. package/dist/interaction/part.js.map +1 -0
  218. package/dist/interaction/view.d.ts +34 -0
  219. package/dist/interaction/view.d.ts.map +1 -0
  220. package/dist/interaction/view.js +109 -0
  221. package/dist/interaction/view.js.map +1 -0
  222. package/dist/interfaces/facet.d.ts +6 -0
  223. package/dist/interfaces/facet.d.ts.map +1 -0
  224. package/dist/interfaces/facet.js +2 -0
  225. package/dist/interfaces/facet.js.map +1 -0
  226. package/dist/interfaces/http.d.ts +39 -0
  227. package/dist/interfaces/http.d.ts.map +1 -0
  228. package/dist/interfaces/http.js +109 -0
  229. package/dist/interfaces/http.js.map +1 -0
  230. package/dist/interfaces/index.d.ts +7 -0
  231. package/dist/interfaces/index.d.ts.map +1 -0
  232. package/dist/interfaces/index.js +7 -0
  233. package/dist/interfaces/index.js.map +1 -0
  234. package/dist/interfaces/representation.d.ts +14 -0
  235. package/dist/interfaces/representation.d.ts.map +1 -0
  236. package/dist/interfaces/representation.js +25 -0
  237. package/dist/interfaces/representation.js.map +1 -0
  238. package/dist/interfaces/schedule.d.ts +14 -0
  239. package/dist/interfaces/schedule.d.ts.map +1 -0
  240. package/dist/interfaces/schedule.js +46 -0
  241. package/dist/interfaces/schedule.js.map +1 -0
  242. package/dist/interfaces/surface.d.ts +22 -0
  243. package/dist/interfaces/surface.d.ts.map +1 -0
  244. package/dist/interfaces/surface.js +44 -0
  245. package/dist/interfaces/surface.js.map +1 -0
  246. package/dist/interfaces/websocket.d.ts +11 -0
  247. package/dist/interfaces/websocket.d.ts.map +1 -0
  248. package/dist/interfaces/websocket.js +25 -0
  249. package/dist/interfaces/websocket.js.map +1 -0
  250. package/dist/orchestration/index.d.ts +4 -0
  251. package/dist/orchestration/index.d.ts.map +1 -0
  252. package/dist/orchestration/index.js +4 -0
  253. package/dist/orchestration/index.js.map +1 -0
  254. package/dist/orchestration/steps.d.ts +41 -0
  255. package/dist/orchestration/steps.d.ts.map +1 -0
  256. package/dist/orchestration/steps.js +105 -0
  257. package/dist/orchestration/steps.js.map +1 -0
  258. package/dist/orchestration/value-source.d.ts +8 -0
  259. package/dist/orchestration/value-source.d.ts.map +1 -0
  260. package/dist/orchestration/value-source.js +10 -0
  261. package/dist/orchestration/value-source.js.map +1 -0
  262. package/dist/orchestration/workflow.d.ts +38 -0
  263. package/dist/orchestration/workflow.d.ts.map +1 -0
  264. package/dist/orchestration/workflow.js +116 -0
  265. package/dist/orchestration/workflow.js.map +1 -0
  266. package/dist/project/index.d.ts +2 -0
  267. package/dist/project/index.d.ts.map +1 -0
  268. package/dist/project/index.js +2 -0
  269. package/dist/project/index.js.map +1 -0
  270. package/dist/project/project.d.ts +27 -0
  271. package/dist/project/project.d.ts.map +1 -0
  272. package/dist/project/project.js +161 -0
  273. package/dist/project/project.js.map +1 -0
  274. package/dist/project/registry.d.ts +33 -0
  275. package/dist/project/registry.d.ts.map +1 -0
  276. package/dist/project/registry.js +58 -0
  277. package/dist/project/registry.js.map +1 -0
  278. package/dist/project/snapshot.d.ts +4 -0
  279. package/dist/project/snapshot.d.ts.map +1 -0
  280. package/dist/project/snapshot.js +15 -0
  281. package/dist/project/snapshot.js.map +1 -0
  282. package/dist/version.d.ts +3 -0
  283. package/dist/version.d.ts.map +1 -0
  284. package/dist/version.js +3 -0
  285. package/dist/version.js.map +1 -0
  286. package/package.json +49 -0
package/README.md ADDED
@@ -0,0 +1,341 @@
1
+ # @dryvcode/author
2
+
3
+ Strongly typed TypeScript authoring for Dryv. This package defines software meaning. It does not serialize Runtime IR, select template packs, generate application source code, or write project files.
4
+
5
+ Every Dryv Author implementation must compile into the same canonical `dryv.ir/v1alpha1` Runtime IR.
6
+
7
+ ## Model
8
+
9
+ ```text
10
+ full definitions -> Group registration -> lightweight typed refs
11
+ \
12
+ -> App composition
13
+ ```
14
+
15
+ Groups own full declarations. Registration names supply local identity and return lightweight typed refs. Relationships use those refs rather than raw builders.
16
+
17
+ ```ts
18
+ import { dryv, field, property, schema } from "@dryvcode/author";
19
+
20
+ const shared = dryv.group({ name: "shared" });
21
+ const values = shared.properties({
22
+ UserId: property.string.uuid(),
23
+ Email: property.string.email(),
24
+ CreatedAt: property.temporal.instant().precision("millisecond"),
25
+ });
26
+
27
+ const users = dryv.group({ name: "users" });
28
+ const schemas = users.schemas({
29
+ User: schema({
30
+ id: field(values.UserId).system(),
31
+ email: field(values.Email),
32
+ createdAt: field(values.CreatedAt).system(),
33
+ }),
34
+ });
35
+
36
+ schemas.User.field("email");
37
+
38
+ export default dryv.app({ name: "example" }).groups(shared, users);
39
+ ```
40
+
41
+ The compiler qualifies local identities at the Author/Runtime boundary:
42
+
43
+ ```text
44
+ users + User -> users.User -> #/schemas/users.User
45
+ ```
46
+
47
+ Runtime registries remain flat by semantic kind. Group ancestry affects semantic scope, never canonical declaration identity. `.` is reserved for compiler qualification and cannot appear in authored Group names, App names, or registration keys.
48
+
49
+ ## Registered refs
50
+
51
+ Reusable declarations must be registered before another declaration can reference them.
52
+
53
+ ```ts
54
+ const Id = property.string.uuid();
55
+
56
+ // invalid: raw definition
57
+ // field(Id)
58
+
59
+ const shared = dryv.group({ name: "shared" });
60
+ const values = shared.properties({ Id });
61
+
62
+ field(values.Id); // valid
63
+ ```
64
+
65
+ This rule applies across Schemas, Properties, Policies, Operations, Events, Failures, Workflows, Views, Presentations, Features, and Applications. `unknown()` and `dynamic()` are intrinsic targets and remain inline.
66
+
67
+ ## Properties
68
+
69
+ `group.properties({...})` classifies reusable value meaning into the canonical registries:
70
+
71
+ ```text
72
+ primitives
73
+ enums
74
+ composites
75
+ literals
76
+ unions
77
+ records
78
+ tuples
79
+ generics
80
+ temporal
81
+ ```
82
+
83
+ There are no reusable `unknown` or `dynamic` registries.
84
+
85
+ Examples:
86
+
87
+ ```ts
88
+ const base = shared.properties({
89
+ Id: property.string.uuid(),
90
+ Name: property.string(),
91
+ Count: property.number.nonNegativeInteger(),
92
+ Active: property.literal("active"),
93
+ CreatedAt: property.temporal.instant().precision("millisecond"),
94
+ });
95
+
96
+ const advanced = shared.properties({
97
+ Coordinates: property.composite({
98
+ x: field(base.Count),
99
+ y: field(base.Count),
100
+ }),
101
+ Identifier: property.union({
102
+ discriminant: "kind",
103
+ members: { id: base.Id, active: base.Active },
104
+ }),
105
+ Pair: property.tuple(base.Id, base.Active),
106
+ Labels: property.record(base.Id, base.Name),
107
+ Box: property.generic.define((T) =>
108
+ property.composite({ value: field(T) }),
109
+ ),
110
+ });
111
+ ```
112
+
113
+ Generic applications consume a registered generic definition and registered arguments:
114
+
115
+ ```ts
116
+ shared.properties({
117
+ UserBox: property.generic.apply(advanced.Box, [schemas.User]),
118
+ });
119
+ ```
120
+
121
+ Properties may carry their property-specific description/examples/lifecycle semantics. Universal `tags` and structured `explanations` are only exposed where the Runtime contract supports them; they are not silently accepted on Properties or Expressions.
122
+
123
+ ## Expressions
124
+
125
+ Expressions are named reusable declarations with a closed Dryv vocabulary.
126
+
127
+ ```ts
128
+ import { context, expression, value } from "@dryvcode/author";
129
+
130
+ const expressions = users.expressions({
131
+ IsOwner: expression.equal(
132
+ context("actor", "id"),
133
+ context("resource", "ownerId"),
134
+ ),
135
+ CurrentDate: expression.date(
136
+ expression.inTimeZone(expression.now(), "Africa/Nairobi"),
137
+ ),
138
+ DefaultName: value("unknown"),
139
+ });
140
+ ```
141
+
142
+ Registered Expression refs are consumed by Policy rules, temporal dynamic bounds, Schema defaults, and composite invariants. There is no arbitrary custom-AST escape hatch.
143
+
144
+ ## Policies
145
+
146
+ Policies are reusable semantic requirements, not framework guards or middleware definitions.
147
+
148
+ ```ts
149
+ const policies = users.policies({
150
+ CanRead: policy()
151
+ .requires({ actor: schemas.User, resource: schemas.User })
152
+ .provides({ id: values.UserId })
153
+ .rule(expressions.IsOwner),
154
+ });
155
+ ```
156
+
157
+ A Policy may intentionally have no rule. Context values are registered Property/Schema refs and rules are registered boolean Expression refs.
158
+
159
+ Groups and Applications may also declare scope policies:
160
+
161
+ ```ts
162
+ users.policies(policies.CanRead);
163
+
164
+ dryv.app({ name: "example" }).groups(users).policies(policies.CanRead);
165
+ ```
166
+
167
+ Effective inherited scope is Runtime/inspection responsibility; Authoring records only the declared scope.
168
+
169
+ ## Schemas
170
+
171
+ Schema field meaning is flat in Author state and canonical Runtime IR. There is no field `usage` wrapper.
172
+
173
+ ```ts
174
+ const users = dryv.group({ name: "users" });
175
+ const schemas = users.schemas({
176
+ User: schema({
177
+ id: field(values.UserId).system(),
178
+ email: field(values.Email)
179
+ .optional()
180
+ .nullable()
181
+ .query({ filter: ["equal", "contains"], sort: true, search: true }),
182
+ names: field(values.Name).array({ min: 1 }),
183
+ }),
184
+ });
185
+ ```
186
+
187
+ Field helpers include:
188
+
189
+ - `.required()` / `.optional()`;
190
+ - `.nullable()`;
191
+ - `.array(...)`;
192
+ - `.default(...)`;
193
+ - `.system()` / `.createOnly()`;
194
+ - `.query(...)`;
195
+ - `.sensitive()`;
196
+ - `.policy(...)`;
197
+ - `.relation(...)` / `.related(...)`;
198
+ - `.sources(...)`;
199
+ - `.tags(...)` / `.explain(...)` where Runtime field metadata is supported.
200
+
201
+ The retired `.mutation(...)` shortcut is intentionally not supported.
202
+
203
+ ### Effective field references and relations
204
+
205
+ `SchemaRef.field(...)` represents semantic effective-field identity. The compiler emits `{ $ref: <schema>, field: <name> }`, not a physical `/fields/...` pointer.
206
+
207
+ ```ts
208
+ const entities = users.schemas({
209
+ Entity: schema({ id: field(values.UserId) }).abstract(),
210
+ });
211
+
212
+ users.schemas({
213
+ Membership: schema({
214
+ ownerId: field(values.UserId).relation({
215
+ target: () => entities.Entity.field("id"),
216
+ cardinality: relation.manyToOne(),
217
+ onDelete: relation.restrict(),
218
+ }),
219
+ }),
220
+ });
221
+ ```
222
+
223
+ ### Field-local sources
224
+
225
+ There is no root Source declaration or `group.sources(...)` registry. Source meaning belongs to the Schema field that consumes it.
226
+
227
+ ```ts
228
+ const operations = users.operations({
229
+ ListStatuses: operation().outputs({
230
+ statuses: list(ref(values.Name)),
231
+ }),
232
+ });
233
+
234
+ users.schemas({
235
+ Filter: schema({
236
+ status: field(values.Name).sources({
237
+ choices: source.options(operations.ListStatuses).output("statuses"),
238
+ }),
239
+ }),
240
+ });
241
+ ```
242
+
243
+ Input bindings use `source.value()` for the consuming field value or `source.field(() => schemaRef.field(...))` for another effective Schema field. If a source operation has exactly one output, the compiler may infer it; otherwise `.output(...)` is required.
244
+
245
+ ### Storage facets
246
+
247
+ There is no root Storage declaration or storage registry. Portable storage semantics belong to `schema.facets.storage`.
248
+
249
+ ```ts
250
+ const stored = users.schemas({
251
+ User: schema({
252
+ id: field(values.UserId),
253
+ email: field(values.Email),
254
+ }).facets({
255
+ storage: storage("users")
256
+ .primaryKey("id")
257
+ .indexes({ fields: ["email"], unique: true }),
258
+ }),
259
+ });
260
+ ```
261
+
262
+ Concrete stored Schemas require a storage name. Abstract Schemas may contribute inherited storage rules without a concrete name.
263
+
264
+ ### Projection selectors
265
+
266
+ Projection selection is Author-only convenience. The compiler resolves selectors against effective source fields and emits explicit canonical `projection.fields`.
267
+
268
+ ```ts
269
+ users.schemas({
270
+ UserRead: schema({}).projection(
271
+ projection(stored.User)
272
+ .purpose("read")
273
+ .pick("id", "email")
274
+ .rename({ email: "contactEmail" })
275
+ .usage({ email: { optional: true } }),
276
+ ),
277
+ });
278
+ ```
279
+
280
+ Supported helpers are `.pick(...)`, `.omit(...)`, `.rename(...)`, `.usage(...)`, `.purpose(...)`, and `.policies(...)`. Projection-from-projection, projection inheritance, abstract projections, projection storage facets, unknown selections, and output collisions are rejected.
281
+
282
+ ## Universal semantic metadata
283
+
284
+ The hardened Runtime contracts currently expose universal metadata on:
285
+
286
+ - Application;
287
+ - Group;
288
+ - Policy;
289
+ - Schema;
290
+ - Schema/composite fields.
291
+
292
+ Authoring uses:
293
+
294
+ ```ts
295
+ const users = dryv
296
+ .group({ name: "users" })
297
+ .tags("domain")
298
+ .explain("info", "User capabilities");
299
+ ```
300
+
301
+ Tags are normalized deterministically. Explanations compile as `{ kind, text }`. Empty/default metadata is omitted.
302
+
303
+ ## App composition
304
+
305
+ The root App is the canonical root Application composition.
306
+
307
+ ```ts
308
+ export default dryv
309
+ .app({ name: "example", description: "Example" })
310
+ .groups(shared, users)
311
+ .policies(policies.CanRead)
312
+ .facets({ http: { root: "/api" } });
313
+ ```
314
+
315
+ The App may compose Groups, policies, HTTP scope, features, surfaces, and presentations. It is not a separate semantic model.
316
+
317
+ ## Compiler boundary
318
+
319
+ Author state remains implementation-specific. The TypeScript compiler owns qualification, reference resolution, authoring-convenience expansion, canonical spelling, and rejection of ambiguous/unrepresentable constructs.
320
+
321
+ Important boundary rules:
322
+
323
+ ```text
324
+ Group scope + local name -> <group>.<item>
325
+ projection selectors -> explicit projection.fields
326
+ field source helpers -> field-local canonical sources
327
+ storage helper -> schema.facets.storage
328
+ TypeScript camelCase -> canonical Dryv spelling where required
329
+ ```
330
+
331
+ The Author package itself never serializes Runtime IR.
332
+
333
+ ## Development
334
+
335
+ ```bash
336
+ bun install
337
+ bun run format
338
+ bun run check
339
+ ```
340
+
341
+ `bun run check` verifies formatting, strict TypeScript types, tests, build output, and the public-package smoke import.
@@ -0,0 +1,7 @@
1
+ import type { DurationState } from "../contracts/index.js";
2
+ export type DurationInput = DurationState | number;
3
+ export declare function seconds(value: number): DurationState;
4
+ export declare function minutes(value: number): DurationState;
5
+ export declare function hours(value: number): DurationState;
6
+ export declare function resolveDuration(value: DurationInput, field: string): DurationState;
7
+ //# sourceMappingURL=duration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"duration.d.ts","sourceRoot":"","sources":["../../src/behavior/duration.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEvD,MAAM,MAAM,aAAa,GAAG,aAAa,GAAG,MAAM,CAAC;AAYnD,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,CAEpD;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,CAEpD;AAED,wBAAgB,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,CAElD;AAED,wBAAgB,eAAe,CAC7B,KAAK,EAAE,aAAa,EACpB,KAAK,EAAE,MAAM,GACZ,aAAa,CAEf"}
@@ -0,0 +1,20 @@
1
+ function duration(value, field) {
2
+ const secondsValue = typeof value === "number" ? value : value.seconds;
3
+ if (!Number.isInteger(secondsValue) || secondsValue <= 0) {
4
+ throw new TypeError(`${field} must be a positive integer number of seconds`);
5
+ }
6
+ return { seconds: secondsValue };
7
+ }
8
+ export function seconds(value) {
9
+ return duration(value, "seconds");
10
+ }
11
+ export function minutes(value) {
12
+ return duration(value * 60, "minutes");
13
+ }
14
+ export function hours(value) {
15
+ return duration(value * 3600, "hours");
16
+ }
17
+ export function resolveDuration(value, field) {
18
+ return duration(value, field);
19
+ }
20
+ //# sourceMappingURL=duration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"duration.js","sourceRoot":"","sources":["../../src/behavior/duration.ts"],"names":[],"mappings":"AAIA,SAAS,QAAQ,CAAC,KAAoB,EAAE,KAAa;IACnD,MAAM,YAAY,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC;IACvE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,YAAY,IAAI,CAAC,EAAE,CAAC;QACzD,MAAM,IAAI,SAAS,CACjB,GAAG,KAAK,+CAA+C,CACxD,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,KAAa;IACnC,OAAO,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,KAAa;IACnC,OAAO,QAAQ,CAAC,KAAK,GAAG,EAAE,EAAE,SAAS,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,KAAK,CAAC,KAAa;IACjC,OAAO,QAAQ,CAAC,KAAK,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,KAAoB,EACpB,KAAa;IAEb,OAAO,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AAChC,CAAC"}
@@ -0,0 +1,23 @@
1
+ import type { ExplanationKindState, EventRoleState } from "../contracts/index.js";
2
+ import type { EventState } from "../contracts/index.js";
3
+ import { Declaration } from "../foundation/declaration.js";
4
+ import type { InferValueRef, OperationRef, ValueRef, WorkflowRef } from "../foundation/ref.js";
5
+ export declare class EventDeclaration<TPayload = never> extends Declaration<"event"> {
6
+ readonly __payload?: TPayload;
7
+ private _description?;
8
+ private _tags;
9
+ private _explanations;
10
+ private _role?;
11
+ private _payload?;
12
+ private _listeners;
13
+ constructor();
14
+ description(value: string): this;
15
+ tags(...values: readonly string[]): this;
16
+ explain(kind: ExplanationKindState, text: string): this;
17
+ role(value: EventRoleState): this;
18
+ payload<V extends ValueRef>(value: V): EventDeclaration<InferValueRef<V>>;
19
+ listeners(...values: readonly (OperationRef | WorkflowRef)[]): this;
20
+ toState(): EventState;
21
+ }
22
+ export declare function event(): EventDeclaration;
23
+ //# sourceMappingURL=event.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event.d.ts","sourceRoot":"","sources":["../../src/behavior/event.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,oBAAoB,EAEpB,cAAc,EACf,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,KAAK,EACV,aAAa,EACb,YAAY,EACZ,QAAQ,EACR,WAAW,EACZ,MAAM,kBAAkB,CAAC;AAQ1B,qBAAa,gBAAgB,CAAC,QAAQ,GAAG,KAAK,CAAE,SAAQ,WAAW,CAAC,OAAO,CAAC;IAC1E,SAAiB,SAAS,CAAC,EAAE,QAAQ,CAAC;IACtC,OAAO,CAAC,YAAY,CAAC,CAAS;IAC9B,OAAO,CAAC,KAAK,CAAgB;IAC7B,OAAO,CAAC,aAAa,CAA0B;IAC/C,OAAO,CAAC,KAAK,CAAC,CAAiB;IAC/B,OAAO,CAAC,QAAQ,CAAC,CAAW;IAC5B,OAAO,CAAC,UAAU,CAAsC;IAExD,cAEC;IAED,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAG/B;IAED,IAAI,CAAC,GAAG,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAGvC;IAED,OAAO,CAAC,IAAI,EAAE,oBAAoB,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAGtD;IAED,IAAI,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI,CAGhC;IAED,OAAO,CAAC,CAAC,SAAS,QAAQ,EAAE,KAAK,EAAE,CAAC,GAAG,gBAAgB,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAGxE;IAED,SAAS,CAAC,GAAG,MAAM,EAAE,SAAS,CAAC,YAAY,GAAG,WAAW,CAAC,EAAE,GAAG,IAAI,CAGlE;IAEQ,OAAO,IAAI,UAAU,CAgB7B;CACF;AAED,wBAAgB,KAAK,IAAI,gBAAgB,CAExC"}
@@ -0,0 +1,57 @@
1
+ import { explanation, normalizeTags, optionalSemanticMetadata, } from "../foundation/metadata.js";
2
+ import { Declaration } from "../foundation/declaration.js";
3
+ import { optionalDescription, optionalOwner, optionalOrigin, requireText, } from "../foundation/metadata.js";
4
+ export class EventDeclaration extends Declaration {
5
+ _description;
6
+ _tags = [];
7
+ _explanations = [];
8
+ _role;
9
+ _payload;
10
+ _listeners = [];
11
+ constructor() {
12
+ super("event");
13
+ }
14
+ description(value) {
15
+ this._description = requireText(value, "event description");
16
+ return this;
17
+ }
18
+ tags(...values) {
19
+ this._tags = [...normalizeTags(values, "tags")];
20
+ return this;
21
+ }
22
+ explain(kind, text) {
23
+ this._explanations.push(explanation(kind, text, "explanation"));
24
+ return this;
25
+ }
26
+ role(value) {
27
+ this._role = value;
28
+ return this;
29
+ }
30
+ payload(value) {
31
+ this._payload = value;
32
+ return this;
33
+ }
34
+ listeners(...values) {
35
+ this._listeners = [...values];
36
+ return this;
37
+ }
38
+ toState() {
39
+ return {
40
+ identity: this.identity,
41
+ kind: "event",
42
+ ...optionalSemanticMetadata(this._tags, this._explanations),
43
+ ...(this._role === undefined ? {} : { role: this._role }),
44
+ ...(this._payload === undefined ? {} : { payload: this._payload.ref() }),
45
+ listeners: this._listeners.map((value) => value.kind === "operation"
46
+ ? { kind: "operation", operation: value.ref() }
47
+ : { kind: "workflow", workflow: value.ref() }),
48
+ ...optionalDescription(this._description),
49
+ ...optionalOwner(this._group, this._feature),
50
+ ...optionalOrigin(this._origin),
51
+ };
52
+ }
53
+ }
54
+ export function event() {
55
+ return new EventDeclaration();
56
+ }
57
+ //# sourceMappingURL=event.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event.js","sourceRoot":"","sources":["../../src/behavior/event.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,aAAa,EACb,wBAAwB,GACzB,MAAM,uBAAuB,CAAC;AAO/B,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAOvD,OAAO,EACL,mBAAmB,EACnB,aAAa,EACb,cAAc,EACd,WAAW,GACZ,MAAM,uBAAuB,CAAC;AAE/B,MAAM,OAAO,gBAAmC,SAAQ,WAAoB;IAElE,YAAY,CAAU;IACtB,KAAK,GAAa,EAAE,CAAC;IACrB,aAAa,GAAuB,EAAE,CAAC;IACvC,KAAK,CAAkB;IACvB,QAAQ,CAAY;IACpB,UAAU,GAAmC,EAAE,CAAC;IAExD;QACE,KAAK,CAAC,OAAO,CAAC,CAAC;IACjB,CAAC;IAED,WAAW,CAAC,KAAa;QACvB,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC,KAAK,EAAE,mBAAmB,CAAC,CAAC;QAC5D,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC,GAAG,MAAyB;QAC/B,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;QAChD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,CAAC,IAA0B,EAAE,IAAY;QAC9C,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC;QAChE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC,KAAqB;QACxB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,CAAqB,KAAQ;QAClC,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QACtB,OAAO,IAAqD,CAAC;IAC/D,CAAC;IAED,SAAS,CAAC,GAAG,MAA+C;QAC1D,IAAI,CAAC,UAAU,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;QAC9B,OAAO,IAAI,CAAC;IACd,CAAC;IAEQ,OAAO;QACd,OAAO;YACL,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,IAAI,EAAE,OAAO;YACb,GAAG,wBAAwB,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC;YAC3D,GAAG,CAAC,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;YACzD,GAAG,CAAC,IAAI,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC;YACxE,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CACvC,KAAK,CAAC,IAAI,KAAK,WAAW;gBACxB,CAAC,CAAC,EAAE,IAAI,EAAE,WAAoB,EAAE,SAAS,EAAE,KAAK,CAAC,GAAG,EAAE,EAAE;gBACxD,CAAC,CAAC,EAAE,IAAI,EAAE,UAAmB,EAAE,QAAQ,EAAE,KAAK,CAAC,GAAG,EAAE,EAAE,CACzD;YACD,GAAG,mBAAmB,CAAC,IAAI,CAAC,YAAY,CAAC;YACzC,GAAG,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC;YAC5C,GAAG,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC;SAChC,CAAC;IACJ,CAAC;CACF;AAED,MAAM,UAAU,KAAK;IACnB,OAAO,IAAI,gBAAgB,EAAE,CAAC;AAChC,CAAC"}
@@ -0,0 +1,19 @@
1
+ import type { ExplanationKindState } from "../contracts/index.js";
2
+ import type { FailureState } from "../contracts/index.js";
3
+ import type { TypeSpec } from "../definitions/types/spec.js";
4
+ import { Declaration } from "../foundation/declaration.js";
5
+ export declare class FailureDeclaration extends Declaration<"failure"> {
6
+ #private;
7
+ private _description?;
8
+ private _tags;
9
+ private _explanations;
10
+ private _payload?;
11
+ constructor(code: string);
12
+ description(value: string): this;
13
+ tags(...values: readonly string[]): this;
14
+ explain(kind: ExplanationKindState, text: string): this;
15
+ payload<T>(value: TypeSpec<T>): this;
16
+ toState(): FailureState;
17
+ }
18
+ export declare function failure(code: string): FailureDeclaration;
19
+ //# sourceMappingURL=failure.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"failure.d.ts","sourceRoot":"","sources":["../../src/behavior/failure.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,oBAAoB,EAAoB,MAAM,mBAAmB,CAAC;AAChF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAQvD,qBAAa,kBAAmB,SAAQ,WAAW,CAAC,SAAS,CAAC;;IAE5D,OAAO,CAAC,YAAY,CAAC,CAAS;IAC9B,OAAO,CAAC,KAAK,CAAgB;IAC7B,OAAO,CAAC,aAAa,CAA0B;IAC/C,OAAO,CAAC,QAAQ,CAAC,CAAoB;IAErC,YAAY,IAAI,EAAE,MAAM,EAGvB;IAED,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAG/B;IAED,IAAI,CAAC,GAAG,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAGvC;IAED,OAAO,CAAC,IAAI,EAAE,oBAAoB,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAGtD;IAED,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,CAGnC;IAEQ,OAAO,IAAI,YAAY,CAa/B;CACF;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,kBAAkB,CAExD"}
@@ -0,0 +1,48 @@
1
+ import { explanation, normalizeTags, optionalSemanticMetadata, } from "../foundation/metadata.js";
2
+ import { Declaration } from "../foundation/declaration.js";
3
+ import { optionalDescription, optionalOwner, optionalOrigin, requireText, } from "../foundation/metadata.js";
4
+ export class FailureDeclaration extends Declaration {
5
+ #code;
6
+ _description;
7
+ _tags = [];
8
+ _explanations = [];
9
+ _payload;
10
+ constructor(code) {
11
+ super("failure");
12
+ this.#code = requireText(code, "failure code");
13
+ }
14
+ description(value) {
15
+ this._description = requireText(value, "failure description");
16
+ return this;
17
+ }
18
+ tags(...values) {
19
+ this._tags = [...normalizeTags(values, "tags")];
20
+ return this;
21
+ }
22
+ explain(kind, text) {
23
+ this._explanations.push(explanation(kind, text, "explanation"));
24
+ return this;
25
+ }
26
+ payload(value) {
27
+ this._payload = value;
28
+ return this;
29
+ }
30
+ toState() {
31
+ return {
32
+ identity: this.identity,
33
+ kind: "failure",
34
+ ...optionalSemanticMetadata(this._tags, this._explanations),
35
+ code: this.#code,
36
+ ...(this._payload === undefined
37
+ ? {}
38
+ : { payload: this._payload.toTypeState() }),
39
+ ...optionalDescription(this._description),
40
+ ...optionalOwner(this._group, this._feature),
41
+ ...optionalOrigin(this._origin),
42
+ };
43
+ }
44
+ }
45
+ export function failure(code) {
46
+ return new FailureDeclaration(code);
47
+ }
48
+ //# sourceMappingURL=failure.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"failure.js","sourceRoot":"","sources":["../../src/behavior/failure.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,aAAa,EACb,wBAAwB,GACzB,MAAM,uBAAuB,CAAC;AAI/B,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EACL,mBAAmB,EACnB,aAAa,EACb,cAAc,EACd,WAAW,GACZ,MAAM,uBAAuB,CAAC;AAE/B,MAAM,OAAO,kBAAmB,SAAQ,WAAsB;IACnD,KAAK,CAAS;IACf,YAAY,CAAU;IACtB,KAAK,GAAa,EAAE,CAAC;IACrB,aAAa,GAAuB,EAAE,CAAC;IACvC,QAAQ,CAAqB;IAErC,YAAY,IAAY;QACtB,KAAK,CAAC,SAAS,CAAC,CAAC;QACjB,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;IACjD,CAAC;IAED,WAAW,CAAC,KAAa;QACvB,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC,KAAK,EAAE,qBAAqB,CAAC,CAAC;QAC9D,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC,GAAG,MAAyB;QAC/B,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;QAChD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,CAAC,IAA0B,EAAE,IAAY;QAC9C,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC;QAChE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,CAAI,KAAkB;QAC3B,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QACtB,OAAO,IAAI,CAAC;IACd,CAAC;IAEQ,OAAO;QACd,OAAO;YACL,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,IAAI,EAAE,SAAS;YACf,GAAG,wBAAwB,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC;YAC3D,IAAI,EAAE,IAAI,CAAC,KAAK;YAChB,GAAG,CAAC,IAAI,CAAC,QAAQ,KAAK,SAAS;gBAC7B,CAAC,CAAC,EAAE;gBACJ,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,EAAE,CAAC;YAC7C,GAAG,mBAAmB,CAAC,IAAI,CAAC,YAAY,CAAC;YACzC,GAAG,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC;YAC5C,GAAG,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC;SAChC,CAAC;IACJ,CAAC;CACF;AAED,MAAM,UAAU,OAAO,CAAC,IAAY;IAClC,OAAO,IAAI,kBAAkB,CAAC,IAAI,CAAC,CAAC;AACtC,CAAC"}
@@ -0,0 +1,6 @@
1
+ export * from "./duration.js";
2
+ export * from "./policy.js";
3
+ export * from "./failure.js";
4
+ export * from "./event.js";
5
+ export * from "./operation.js";
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/behavior/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC"}
@@ -0,0 +1,6 @@
1
+ export * from "./duration.js";
2
+ export * from "./policy.js";
3
+ export * from "./failure.js";
4
+ export * from "./event.js";
5
+ export * from "./operation.js";
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/behavior/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC"}
@@ -0,0 +1,72 @@
1
+ import type { ExecutionMode, ExplanationKindState, OperationRoleState, OperationState } from "../contracts/index.js";
2
+ import { Declaration } from "../foundation/declaration.js";
3
+ import type { EventRef, FailureRef, OperationPortRef, OperationRef, PolicyRef, TupleIndex, ValueRefTuple } from "../foundation/ref.js";
4
+ import { type DurationInput } from "./duration.js";
5
+ import type { FacetDeclaration } from "../interfaces/facet.js";
6
+ export interface OperationFacetsInput {
7
+ readonly http?: FacetDeclaration;
8
+ readonly websocket?: FacetDeclaration;
9
+ readonly schedule?: FacetDeclaration;
10
+ }
11
+ export declare class OperationDeclaration<TInputs extends ValueRefTuple = readonly [], TOutputs extends ValueRefTuple = readonly []> extends Declaration<"operation"> {
12
+ readonly __inputs?: TInputs;
13
+ readonly __outputs?: TOutputs;
14
+ private _description?;
15
+ private _role?;
16
+ private _tags;
17
+ private _explanations;
18
+ private _inputs;
19
+ private _outputs;
20
+ private _failures;
21
+ private _emits;
22
+ private _authenticated;
23
+ private _policies;
24
+ private _mode;
25
+ private _timeout?;
26
+ private _rateLimit?;
27
+ private _cache?;
28
+ private _transaction?;
29
+ private _retry?;
30
+ private _idempotency?;
31
+ private _audit?;
32
+ private _invalidates;
33
+ private _facets;
34
+ constructor();
35
+ description(value: string): this;
36
+ role(value: OperationRoleState): this;
37
+ tags(...values: readonly string[]): this;
38
+ explain(kind: ExplanationKindState, text: string): this;
39
+ inputs<const T extends ValueRefTuple>(...values: T): OperationDeclaration<T, TOutputs>;
40
+ outputs<const T extends ValueRefTuple>(...values: T): OperationDeclaration<TInputs, T>;
41
+ input<I extends TupleIndex<TInputs>>(index: I): OperationPortRef<import("../foundation/ref.js").InferValueRef<TInputs[I]>, "input">;
42
+ output<I extends TupleIndex<TOutputs>>(index: I): OperationPortRef<import("../foundation/ref.js").InferValueRef<TOutputs[I]>, "output">;
43
+ failures(...values: readonly FailureRef[]): this;
44
+ emits(...values: readonly EventRef[]): this;
45
+ authenticated(value?: boolean): this;
46
+ requires(...values: readonly PolicyRef[]): this;
47
+ mode(value: ExecutionMode): this;
48
+ async(value?: boolean): this;
49
+ timeout(value: DurationInput): this;
50
+ rateLimit(options: {
51
+ readonly limit: number;
52
+ readonly window: DurationInput;
53
+ }): this;
54
+ cache(options: {
55
+ readonly ttl: DurationInput;
56
+ }): this;
57
+ transactional(required?: boolean): this;
58
+ retry(options: {
59
+ readonly maxAttempts: number;
60
+ readonly backoff?: DurationInput;
61
+ }): this;
62
+ idempotentBy<I extends TupleIndex<TInputs>>(input: I): this;
63
+ audit(required?: boolean): this;
64
+ invalidates(...values: readonly OperationRef[]): this;
65
+ /** Operation reachability, at most one facet per kind (decision 0012). */
66
+ facets(values: OperationFacetsInput): this;
67
+ toState(): OperationState;
68
+ }
69
+ export declare function operation(): OperationDeclaration;
70
+ export type OperationInputs<T> = T extends OperationDeclaration<infer I, infer _O> ? I : T extends OperationRef<infer I, infer _O> ? I : never;
71
+ export type OperationOutputs<T> = T extends OperationDeclaration<infer _I, infer O> ? O : T extends OperationRef<infer _I, infer O> ? O : never;
72
+ //# sourceMappingURL=operation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"operation.d.ts","sourceRoot":"","sources":["../../src/behavior/operation.ts"],"names":[],"mappings":"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"}