@cosmicdrift/kumiko-framework 0.2.3 → 0.4.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 (166) hide show
  1. package/CHANGELOG.md +93 -0
  2. package/package.json +124 -39
  3. package/src/__tests__/full-stack.integration.ts +2 -2
  4. package/src/api/auth-routes.ts +5 -5
  5. package/src/api/jwt.ts +2 -2
  6. package/src/api/route-registrars.ts +1 -1
  7. package/src/api/routes.ts +3 -3
  8. package/src/api/server.ts +6 -7
  9. package/src/compliance/profiles.ts +8 -8
  10. package/src/db/assert-exists-in.ts +2 -2
  11. package/src/db/cursor.ts +3 -3
  12. package/src/db/event-store-executor.ts +19 -13
  13. package/src/db/located-timestamp.ts +1 -1
  14. package/src/db/money.ts +12 -2
  15. package/src/db/pg-error.ts +1 -1
  16. package/src/db/row-helpers.ts +1 -1
  17. package/src/db/table-builder.ts +3 -5
  18. package/src/db/tenant-db.ts +9 -9
  19. package/src/engine/__tests__/_pipeline-test-utils.ts +23 -0
  20. package/src/engine/__tests__/build-target.test.ts +135 -0
  21. package/src/engine/__tests__/codemod-pipeline.test.ts +551 -0
  22. package/src/engine/__tests__/entity-handlers.test.ts +3 -3
  23. package/src/engine/__tests__/event-helpers.test.ts +4 -4
  24. package/src/engine/__tests__/pipeline-engine.test.ts +215 -0
  25. package/src/engine/__tests__/pipeline-handler.integration.ts +894 -0
  26. package/src/engine/__tests__/pipeline-observability.integration.ts +142 -0
  27. package/src/engine/__tests__/pipeline-performance.integration.ts +152 -0
  28. package/src/engine/__tests__/pipeline-sub-pipelines.test.ts +288 -0
  29. package/src/engine/__tests__/raw-table.test.ts +2 -2
  30. package/src/engine/__tests__/steps-aggregate-append-event.test.ts +115 -0
  31. package/src/engine/__tests__/steps-aggregate-create.test.ts +92 -0
  32. package/src/engine/__tests__/steps-aggregate-update.test.ts +127 -0
  33. package/src/engine/__tests__/steps-call-feature.test.ts +123 -0
  34. package/src/engine/__tests__/steps-mail-send.test.ts +136 -0
  35. package/src/engine/__tests__/steps-read.test.ts +142 -0
  36. package/src/engine/__tests__/steps-resolver-utils.test.ts +50 -0
  37. package/src/engine/__tests__/steps-unsafe-projection-delete.test.ts +69 -0
  38. package/src/engine/__tests__/steps-unsafe-projection-upsert.test.ts +117 -0
  39. package/src/engine/__tests__/steps-webhook-send.test.ts +135 -0
  40. package/src/engine/__tests__/steps-workflow.test.ts +198 -0
  41. package/src/engine/__tests__/validate-projection-allowlist.test.ts +491 -0
  42. package/src/engine/__tests__/visual-tree-patterns.test.ts +251 -0
  43. package/src/engine/boot-validator/api-ext.ts +77 -0
  44. package/src/engine/boot-validator/config-deps.ts +163 -0
  45. package/src/engine/boot-validator/entity-handler.ts +466 -0
  46. package/src/engine/boot-validator/index.ts +159 -0
  47. package/src/engine/boot-validator/ownership.ts +198 -0
  48. package/src/engine/boot-validator/pii-retention.ts +155 -0
  49. package/src/engine/boot-validator/screens-nav.ts +624 -0
  50. package/src/engine/boot-validator.ts +1 -1804
  51. package/src/engine/build-app-schema.ts +1 -1
  52. package/src/engine/build-target.ts +99 -0
  53. package/src/engine/codemod/index.ts +15 -0
  54. package/src/engine/codemod/pipeline-codemod.ts +641 -0
  55. package/src/engine/config-helpers.ts +9 -19
  56. package/src/engine/constants.ts +1 -1
  57. package/src/engine/define-feature.ts +88 -9
  58. package/src/engine/define-handler.ts +89 -3
  59. package/src/engine/define-roles.ts +2 -2
  60. package/src/engine/define-step.ts +28 -0
  61. package/src/engine/define-workflow.ts +110 -0
  62. package/src/engine/entity-handlers.ts +10 -9
  63. package/src/engine/event-helpers.ts +4 -4
  64. package/src/engine/factories.ts +12 -12
  65. package/src/engine/feature-ast/__tests__/visual-tree-parse.test.ts +184 -0
  66. package/src/engine/feature-ast/extractors/index.ts +74 -0
  67. package/src/engine/feature-ast/extractors/round1.ts +110 -0
  68. package/src/engine/feature-ast/extractors/round2.ts +253 -0
  69. package/src/engine/feature-ast/extractors/round3.ts +471 -0
  70. package/src/engine/feature-ast/extractors/round4.ts +1365 -0
  71. package/src/engine/feature-ast/extractors/round5.ts +72 -0
  72. package/src/engine/feature-ast/extractors/round6.ts +66 -0
  73. package/src/engine/feature-ast/extractors/shared.ts +177 -0
  74. package/src/engine/feature-ast/parse.ts +7 -0
  75. package/src/engine/feature-ast/patch.ts +9 -1
  76. package/src/engine/feature-ast/patcher.ts +10 -3
  77. package/src/engine/feature-ast/patterns.ts +49 -1
  78. package/src/engine/feature-ast/render.ts +17 -1
  79. package/src/engine/index.ts +44 -2
  80. package/src/engine/pattern-library/__tests__/library.test.ts +6 -0
  81. package/src/engine/pattern-library/library.ts +42 -2
  82. package/src/engine/pipeline.ts +88 -0
  83. package/src/engine/projection-helpers.ts +1 -1
  84. package/src/engine/read-claim.ts +1 -1
  85. package/src/engine/registry.ts +30 -2
  86. package/src/engine/resolve-config-or-param.ts +4 -0
  87. package/src/engine/run-pipeline.ts +162 -0
  88. package/src/engine/schema-builder.ts +2 -4
  89. package/src/engine/state-machine.ts +1 -1
  90. package/src/engine/steps/_drizzle-boundary.ts +19 -0
  91. package/src/engine/steps/_duration-utils.ts +33 -0
  92. package/src/engine/steps/_no-return-guard.ts +21 -0
  93. package/src/engine/steps/_resolver-utils.ts +42 -0
  94. package/src/engine/steps/_step-dispatch-constants.ts +38 -0
  95. package/src/engine/steps/aggregate-append-event.ts +56 -0
  96. package/src/engine/steps/aggregate-create.ts +56 -0
  97. package/src/engine/steps/aggregate-update.ts +68 -0
  98. package/src/engine/steps/branch.ts +84 -0
  99. package/src/engine/steps/call-feature.ts +49 -0
  100. package/src/engine/steps/compute.ts +41 -0
  101. package/src/engine/steps/for-each.ts +111 -0
  102. package/src/engine/steps/mail-send.ts +44 -0
  103. package/src/engine/steps/read-find-many.ts +51 -0
  104. package/src/engine/steps/read-find-one.ts +58 -0
  105. package/src/engine/steps/retry.ts +87 -0
  106. package/src/engine/steps/return.ts +34 -0
  107. package/src/engine/steps/unsafe-projection-delete.ts +46 -0
  108. package/src/engine/steps/unsafe-projection-upsert.ts +69 -0
  109. package/src/engine/steps/wait-for-event.ts +71 -0
  110. package/src/engine/steps/wait.ts +69 -0
  111. package/src/engine/steps/webhook-send.ts +71 -0
  112. package/src/engine/system-user.ts +1 -1
  113. package/src/engine/types/feature.ts +93 -1
  114. package/src/engine/types/handlers.ts +18 -10
  115. package/src/engine/types/index.ts +11 -1
  116. package/src/engine/types/step.ts +334 -0
  117. package/src/engine/types/target-ref.ts +21 -0
  118. package/src/engine/types/tree-node.ts +132 -0
  119. package/src/engine/types/workspace.ts +7 -0
  120. package/src/engine/validate-projection-allowlist.ts +161 -0
  121. package/src/event-store/snapshot.ts +1 -1
  122. package/src/event-store/upcaster-dead-letter.ts +1 -1
  123. package/src/event-store/upcaster.ts +1 -1
  124. package/src/files/file-routes.ts +1 -1
  125. package/src/files/types.ts +2 -2
  126. package/src/jobs/job-runner.ts +10 -10
  127. package/src/lifecycle/lifecycle.ts +0 -3
  128. package/src/logging/index.ts +1 -0
  129. package/src/logging/pino-logger.ts +11 -7
  130. package/src/logging/utils.ts +24 -0
  131. package/src/observability/prometheus-meter.ts +7 -5
  132. package/src/pipeline/__tests__/archive-stream.integration.ts +1 -1
  133. package/src/pipeline/__tests__/causation-chain.integration.ts +1 -1
  134. package/src/pipeline/__tests__/domain-events-projections.integration.ts +3 -3
  135. package/src/pipeline/__tests__/event-define-event-strict.integration.ts +4 -4
  136. package/src/pipeline/__tests__/load-aggregate-query.integration.ts +1 -1
  137. package/src/pipeline/__tests__/msp-multi-hop.integration.ts +3 -3
  138. package/src/pipeline/__tests__/msp-rebuild.integration.ts +3 -3
  139. package/src/pipeline/__tests__/multi-stream-projection.integration.ts +2 -2
  140. package/src/pipeline/__tests__/query-projection.integration.ts +5 -5
  141. package/src/pipeline/append-event-core.ts +22 -6
  142. package/src/pipeline/dispatcher-utils.ts +188 -0
  143. package/src/pipeline/dispatcher.ts +63 -283
  144. package/src/pipeline/distributed-lock.ts +1 -1
  145. package/src/pipeline/entity-cache.ts +2 -2
  146. package/src/pipeline/event-consumer-state.ts +0 -13
  147. package/src/pipeline/event-dispatcher.ts +4 -4
  148. package/src/pipeline/index.ts +0 -2
  149. package/src/pipeline/lifecycle-pipeline.ts +6 -12
  150. package/src/pipeline/msp-rebuild.ts +5 -5
  151. package/src/pipeline/multi-stream-apply-context.ts +6 -7
  152. package/src/pipeline/projection-rebuild.ts +2 -2
  153. package/src/pipeline/projection-state.ts +0 -12
  154. package/src/rate-limit/__tests__/resolver.integration.ts +8 -4
  155. package/src/rate-limit/resolver.ts +1 -1
  156. package/src/search/in-memory-adapter.ts +1 -1
  157. package/src/search/meilisearch-adapter.ts +3 -3
  158. package/src/search/types.ts +1 -1
  159. package/src/secrets/leak-guard.ts +2 -2
  160. package/src/stack/request-helper.ts +9 -5
  161. package/src/stack/test-stack.ts +1 -1
  162. package/src/testing/handler-context.ts +4 -4
  163. package/src/testing/http-cookies.ts +1 -1
  164. package/src/time/tz-context.ts +1 -2
  165. package/src/ui-types/index.ts +4 -0
  166. package/src/engine/feature-ast/extractors.ts +0 -2602
@@ -115,7 +115,7 @@ function projectField(fieldDef: FieldDefinition): FieldDefinition {
115
115
  if (isLiteral(def["default"])) out["default"] = def["default"];
116
116
  // Select: options-Liste ist plain JSON, durchschicken.
117
117
  if (Array.isArray(def["options"])) out["options"] = def["options"];
118
- return out as FieldDefinition;
118
+ return out as FieldDefinition; // @cast-boundary schema-walk
119
119
  }
120
120
 
121
121
  function isLiteral(value: unknown): boolean {
@@ -0,0 +1,99 @@
1
+ // buildTarget — typed Builder für TargetRef.
2
+ //
3
+ // **Was er macht.** Erzeugt einen TargetRef, dessen action + args
4
+ // compile-time gegen die treeActions-Map des Ziel-Features validiert
5
+ // sind. Magic-String-URIs werden nirgends hand-getippt; das ist die
6
+ // Single-Source-of-Truth für Cross-Feature-Linking im Visual-Tree.
7
+ //
8
+ // **Wie er typed.** Function-Overloads splitten Actions ohne args
9
+ // (NoArgsAction) und Actions mit args (WithArgsAction). TS validiert:
10
+ // - action ist string-literal aus den Keys von treeActions
11
+ // - bei WithArgsAction sind args required und matchen
12
+ // treeActions[action]["args"]
13
+ // - bei NoArgsAction ist args nicht erlaubt
14
+ //
15
+ // **Phase 0.** Das Feature-Handle ist hier eine generische Constraint
16
+ // (FeatureWithTreeActions). In Schicht 2 wird treeActions ein
17
+ // Pattern-Type im Feature-AST und defineFeature exposed eine
18
+ // treeActions-Slot mit gleichem Shape — dann passen real Features
19
+ // drauf, ohne Builder-Änderung.
20
+ //
21
+ // Siehe docs/plans/architecture/visual-tree.md A5.
22
+
23
+ import type { TargetRef } from "./types/target-ref";
24
+ import type { TreeActionDef } from "./types/tree-node";
25
+
26
+ // FeatureWithTreeActions — internal Generic-Constraint für den Builder.
27
+ // **Bewusst nicht exportiert** — Phase-0-Stub, wird in V.1.1 durch echte
28
+ // FeatureDefinition mit treeActions-Slot ersetzt. Caller brauchen den Type
29
+ // nicht direkt; TS leitet ihn aus dem `target`-Argument von buildTarget ab.
30
+ type FeatureWithTreeActions<TActions extends Record<string, TreeActionDef>> = {
31
+ readonly id: string;
32
+ readonly treeActions: TActions;
33
+ };
34
+
35
+ // NoArgsAction<T> — Union der Action-Namen die KEINE args-Definition
36
+ // haben. Mapped-Type emittiert pro Key entweder K (kein args) oder never
37
+ // (args vorhanden); Index-Lookup `[keyof T]` reduziert auf die K-Keys.
38
+ // `& string` schneidet number/symbol-keys raus die TS via keyof
39
+ // theoretisch zulassen würde — Action-Namen sind ausschließlich Strings.
40
+ type NoArgsAction<T extends Record<string, TreeActionDef>> = {
41
+ [K in keyof T]: T[K] extends { args: unknown } ? never : K;
42
+ }[keyof T] &
43
+ string;
44
+
45
+ // WithArgsAction<T> — Komplement zu NoArgsAction: Union der Action-
46
+ // Namen die `args` deklariert haben. Selbe Mechanik mit invertiertem
47
+ // conditional. Trennung in zwei Unions ist nötig damit die Function-
48
+ // Overloads (NoArgs vs. WithArgs) sauber typed werden können.
49
+ type WithArgsAction<T extends Record<string, TreeActionDef>> = {
50
+ [K in keyof T]: T[K] extends { args: unknown } ? K : never;
51
+ }[keyof T] &
52
+ string;
53
+
54
+ // TypeGuard für args: Overloads garantieren ein Plain-Object, aber die
55
+ // Implementation-Signature sieht args als unknown (TArgs ist erased zur
56
+ // Laufzeit). Der Guard validiert die Plain-Object-Convention runtime
57
+ // statt einen `as`-Cast zu setzen — siehe coding-standards.md.
58
+ function isArgsObject(v: unknown): v is Readonly<Record<string, unknown>> {
59
+ return typeof v === "object" && v !== null && !Array.isArray(v);
60
+ }
61
+
62
+ // Overload 1: action ohne args
63
+ export function buildTarget<
64
+ TActions extends Record<string, TreeActionDef>,
65
+ TActionName extends NoArgsAction<TActions>,
66
+ >(spec: {
67
+ readonly target: FeatureWithTreeActions<TActions>;
68
+ readonly action: TActionName;
69
+ }): TargetRef;
70
+
71
+ // Overload 2: action mit args (required + typed)
72
+ export function buildTarget<
73
+ TActions extends Record<string, TreeActionDef>,
74
+ TActionName extends WithArgsAction<TActions>,
75
+ >(spec: {
76
+ readonly target: FeatureWithTreeActions<TActions>;
77
+ readonly action: TActionName;
78
+ readonly args: TActions[TActionName] extends { args: infer TArgs } ? TArgs : never;
79
+ }): TargetRef;
80
+
81
+ // Implementation — args ist `unknown` weil die Overloads-Generic-TArgs
82
+ // zur Laufzeit erased ist. Plain-Object-Convention via TypeGuard.
83
+ export function buildTarget(spec: {
84
+ readonly target: { readonly id: string };
85
+ readonly action: string;
86
+ readonly args?: unknown;
87
+ }): TargetRef {
88
+ if (!isArgsObject(spec.args)) {
89
+ return Object.freeze({
90
+ featureId: spec.target.id,
91
+ action: spec.action,
92
+ });
93
+ }
94
+ return Object.freeze({
95
+ featureId: spec.target.id,
96
+ action: spec.action,
97
+ args: Object.freeze({ ...spec.args }),
98
+ });
99
+ }
@@ -0,0 +1,15 @@
1
+ export type {
2
+ CodemodOptions,
3
+ CodemodReport,
4
+ CodemodResult,
5
+ FileAnalysis,
6
+ ParsedHandlerInfo,
7
+ } from "./pipeline-codemod";
8
+ export {
9
+ analyzeFile,
10
+ analyzeHandlerArrow,
11
+ convertFile,
12
+ generatePerformBlock,
13
+ runCodemod,
14
+ scanForCandidates,
15
+ } from "./pipeline-codemod";