@cosmicdrift/kumiko-framework 0.2.2 → 0.3.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.
- package/CHANGELOG.md +54 -0
- package/package.json +124 -38
- package/src/__tests__/full-stack.integration.ts +2 -2
- package/src/api/auth-routes.ts +5 -5
- package/src/api/jwt.ts +2 -2
- package/src/api/route-registrars.ts +1 -1
- package/src/api/routes.ts +3 -3
- package/src/api/server.ts +6 -7
- package/src/auth/__tests__/roles.test.ts +24 -0
- package/src/auth/index.ts +7 -0
- package/src/auth/roles.ts +42 -0
- package/src/compliance/__tests__/duration-spec.test.ts +72 -0
- package/src/compliance/__tests__/profiles.test.ts +308 -0
- package/src/compliance/__tests__/sub-processors.test.ts +139 -0
- package/src/compliance/duration-spec.ts +44 -0
- package/src/compliance/index.ts +31 -0
- package/src/compliance/override-schema.ts +136 -0
- package/src/compliance/profiles.ts +427 -0
- package/src/compliance/sub-processors.ts +152 -0
- package/src/db/__tests__/big-int-field.test.ts +131 -0
- package/src/db/assert-exists-in.ts +2 -2
- package/src/db/cursor.ts +3 -3
- package/src/db/event-store-executor.ts +19 -13
- package/src/db/located-timestamp.ts +1 -1
- package/src/db/money.ts +12 -2
- package/src/db/pg-error.ts +1 -1
- package/src/db/row-helpers.ts +1 -1
- package/src/db/table-builder.ts +20 -5
- package/src/db/tenant-db.ts +9 -9
- package/src/engine/__tests__/_pipeline-test-utils.ts +23 -0
- package/src/engine/__tests__/boot-validator-api-exposure.test.ts +142 -0
- package/src/engine/__tests__/boot-validator-pii-retention.test.ts +570 -0
- package/src/engine/__tests__/boot-validator-s0-integration.test.ts +160 -0
- package/src/engine/__tests__/build-target.test.ts +135 -0
- package/src/engine/__tests__/codemod-pipeline.test.ts +551 -0
- package/src/engine/__tests__/entity-handlers.test.ts +3 -3
- package/src/engine/__tests__/event-helpers.test.ts +4 -4
- package/src/engine/__tests__/pipeline-engine.test.ts +215 -0
- package/src/engine/__tests__/pipeline-handler.integration.ts +894 -0
- package/src/engine/__tests__/pipeline-observability.integration.ts +142 -0
- package/src/engine/__tests__/pipeline-performance.integration.ts +152 -0
- package/src/engine/__tests__/pipeline-sub-pipelines.test.ts +288 -0
- package/src/engine/__tests__/raw-table.test.ts +2 -2
- package/src/engine/__tests__/steps-aggregate-append-event.test.ts +115 -0
- package/src/engine/__tests__/steps-aggregate-create.test.ts +92 -0
- package/src/engine/__tests__/steps-aggregate-update.test.ts +127 -0
- package/src/engine/__tests__/steps-call-feature.test.ts +123 -0
- package/src/engine/__tests__/steps-mail-send.test.ts +136 -0
- package/src/engine/__tests__/steps-read.test.ts +142 -0
- package/src/engine/__tests__/steps-resolver-utils.test.ts +50 -0
- package/src/engine/__tests__/steps-unsafe-projection-delete.test.ts +69 -0
- package/src/engine/__tests__/steps-unsafe-projection-upsert.test.ts +117 -0
- package/src/engine/__tests__/steps-webhook-send.test.ts +135 -0
- package/src/engine/__tests__/steps-workflow.test.ts +198 -0
- package/src/engine/__tests__/validate-projection-allowlist.test.ts +491 -0
- package/src/engine/__tests__/visual-tree-patterns.test.ts +251 -0
- package/src/engine/boot-validator/api-ext.ts +77 -0
- package/src/engine/boot-validator/config-deps.ts +163 -0
- package/src/engine/boot-validator/entity-handler.ts +466 -0
- package/src/engine/boot-validator/index.ts +159 -0
- package/src/engine/boot-validator/ownership.ts +198 -0
- package/src/engine/boot-validator/pii-retention.ts +155 -0
- package/src/engine/boot-validator/screens-nav.ts +624 -0
- package/src/engine/boot-validator.ts +1 -1528
- package/src/engine/build-app-schema.ts +1 -1
- package/src/engine/build-target.ts +99 -0
- package/src/engine/codemod/index.ts +15 -0
- package/src/engine/codemod/pipeline-codemod.ts +641 -0
- package/src/engine/config-helpers.ts +9 -19
- package/src/engine/constants.ts +1 -1
- package/src/engine/define-feature.ts +127 -9
- package/src/engine/define-handler.ts +89 -3
- package/src/engine/define-roles.ts +2 -2
- package/src/engine/define-step.ts +28 -0
- package/src/engine/define-workflow.ts +110 -0
- package/src/engine/entity-handlers.ts +10 -9
- package/src/engine/event-helpers.ts +4 -4
- package/src/engine/extension-names.ts +105 -0
- package/src/engine/extensions/user-data.ts +106 -0
- package/src/engine/factories.ts +26 -16
- package/src/engine/feature-ast/__tests__/visual-tree-parse.test.ts +184 -0
- package/src/engine/feature-ast/extractors/index.ts +74 -0
- package/src/engine/feature-ast/extractors/round1.ts +110 -0
- package/src/engine/feature-ast/extractors/round2.ts +253 -0
- package/src/engine/feature-ast/extractors/round3.ts +471 -0
- package/src/engine/feature-ast/extractors/round4.ts +1365 -0
- package/src/engine/feature-ast/extractors/round5.ts +72 -0
- package/src/engine/feature-ast/extractors/round6.ts +66 -0
- package/src/engine/feature-ast/extractors/shared.ts +177 -0
- package/src/engine/feature-ast/parse.ts +13 -0
- package/src/engine/feature-ast/patch.ts +9 -1
- package/src/engine/feature-ast/patcher.ts +10 -3
- package/src/engine/feature-ast/patterns.ts +71 -1
- package/src/engine/feature-ast/render.ts +31 -1
- package/src/engine/index.ts +66 -2
- package/src/engine/pattern-library/__tests__/library.test.ts +11 -0
- package/src/engine/pattern-library/library.ts +78 -2
- package/src/engine/pipeline.ts +88 -0
- package/src/engine/projection-helpers.ts +1 -1
- package/src/engine/read-claim.ts +1 -1
- package/src/engine/registry.ts +30 -2
- package/src/engine/resolve-config-or-param.ts +4 -0
- package/src/engine/run-pipeline.ts +162 -0
- package/src/engine/schema-builder.ts +10 -4
- package/src/engine/state-machine.ts +1 -1
- package/src/engine/steps/_drizzle-boundary.ts +19 -0
- package/src/engine/steps/_duration-utils.ts +33 -0
- package/src/engine/steps/_no-return-guard.ts +21 -0
- package/src/engine/steps/_resolver-utils.ts +42 -0
- package/src/engine/steps/_step-dispatch-constants.ts +38 -0
- package/src/engine/steps/aggregate-append-event.ts +56 -0
- package/src/engine/steps/aggregate-create.ts +56 -0
- package/src/engine/steps/aggregate-update.ts +68 -0
- package/src/engine/steps/branch.ts +84 -0
- package/src/engine/steps/call-feature.ts +49 -0
- package/src/engine/steps/compute.ts +41 -0
- package/src/engine/steps/for-each.ts +111 -0
- package/src/engine/steps/mail-send.ts +44 -0
- package/src/engine/steps/read-find-many.ts +51 -0
- package/src/engine/steps/read-find-one.ts +58 -0
- package/src/engine/steps/retry.ts +87 -0
- package/src/engine/steps/return.ts +34 -0
- package/src/engine/steps/unsafe-projection-delete.ts +46 -0
- package/src/engine/steps/unsafe-projection-upsert.ts +69 -0
- package/src/engine/steps/wait-for-event.ts +71 -0
- package/src/engine/steps/wait.ts +69 -0
- package/src/engine/steps/webhook-send.ts +71 -0
- package/src/engine/system-user.ts +1 -1
- package/src/engine/types/feature.ts +143 -1
- package/src/engine/types/fields.ts +134 -10
- package/src/engine/types/handlers.ts +18 -10
- package/src/engine/types/identifiers.ts +1 -0
- package/src/engine/types/index.ts +15 -1
- package/src/engine/types/step.ts +334 -0
- package/src/engine/types/target-ref.ts +21 -0
- package/src/engine/types/tree-node.ts +130 -0
- package/src/engine/types/workspace.ts +7 -0
- package/src/engine/validate-projection-allowlist.ts +161 -0
- package/src/event-store/snapshot.ts +1 -1
- package/src/event-store/upcaster-dead-letter.ts +1 -1
- package/src/event-store/upcaster.ts +1 -1
- package/src/files/__tests__/read-stream.test.ts +105 -0
- package/src/files/__tests__/write-stream.test.ts +233 -0
- package/src/files/__tests__/zip-stream.test.ts +357 -0
- package/src/files/file-routes.ts +1 -1
- package/src/files/in-memory-provider.ts +38 -0
- package/src/files/index.ts +3 -0
- package/src/files/local-provider.ts +58 -1
- package/src/files/types.ts +36 -8
- package/src/files/zip-stream.ts +251 -0
- package/src/jobs/job-runner.ts +10 -10
- package/src/lifecycle/lifecycle.ts +0 -3
- package/src/logging/index.ts +1 -0
- package/src/logging/pino-logger.ts +11 -7
- package/src/logging/utils.ts +24 -0
- package/src/observability/prometheus-meter.ts +7 -5
- package/src/pipeline/__tests__/archive-stream.integration.ts +1 -1
- package/src/pipeline/__tests__/causation-chain.integration.ts +1 -1
- package/src/pipeline/__tests__/domain-events-projections.integration.ts +3 -3
- package/src/pipeline/__tests__/event-define-event-strict.integration.ts +4 -4
- package/src/pipeline/__tests__/load-aggregate-query.integration.ts +1 -1
- package/src/pipeline/__tests__/msp-multi-hop.integration.ts +3 -3
- package/src/pipeline/__tests__/msp-rebuild.integration.ts +3 -3
- package/src/pipeline/__tests__/multi-stream-projection.integration.ts +2 -2
- package/src/pipeline/__tests__/query-projection.integration.ts +5 -5
- package/src/pipeline/append-event-core.ts +22 -6
- package/src/pipeline/dispatcher-utils.ts +188 -0
- package/src/pipeline/dispatcher.ts +63 -283
- package/src/pipeline/distributed-lock.ts +1 -1
- package/src/pipeline/entity-cache.ts +2 -2
- package/src/pipeline/event-consumer-state.ts +0 -13
- package/src/pipeline/event-dispatcher.ts +4 -4
- package/src/pipeline/index.ts +0 -2
- package/src/pipeline/lifecycle-pipeline.ts +6 -12
- package/src/pipeline/msp-rebuild.ts +5 -5
- package/src/pipeline/multi-stream-apply-context.ts +6 -7
- package/src/pipeline/projection-rebuild.ts +2 -2
- package/src/pipeline/projection-state.ts +0 -12
- package/src/rate-limit/__tests__/resolver.integration.ts +8 -4
- package/src/rate-limit/resolver.ts +1 -1
- package/src/search/in-memory-adapter.ts +1 -1
- package/src/search/meilisearch-adapter.ts +3 -3
- package/src/search/types.ts +1 -1
- package/src/secrets/leak-guard.ts +2 -2
- package/src/stack/request-helper.ts +9 -5
- package/src/stack/test-stack.ts +1 -1
- package/src/testing/handler-context.ts +4 -4
- package/src/testing/http-cookies.ts +1 -1
- package/src/time/tz-context.ts +1 -2
- package/src/ui-types/index.ts +4 -0
- package/src/engine/feature-ast/extractors.ts +0 -2562
|
@@ -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";
|