@cosmicdrift/kumiko-types 0.320.0 → 0.322.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/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cosmicdrift/kumiko-types",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.322.0",
|
|
4
4
|
"description": "Framework-Type-Definitions für Kumiko — FeatureDefinition, BootCheck-Types und die reinen Engine-Types. Erlaubt Downstream-Konsumenten, gegen die Type-Contracts zu bauen, ohne das ganze Framework-Package zu importieren. Enthaelt keine identitaets-sensitiven Runtime-Werte mehr (Error-Klassen leben seit #1629 in kumiko-framework, Brand-Symbole nutzen Symbol.for) und ist deshalb eine plain dependency, keine peerDependency.",
|
|
5
5
|
"license": "BUSL-1.1",
|
|
6
6
|
"author": "Marc Frost <marc@cosmicdriftgamestudio.com>",
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
// Type-level contract for PluralForms (#3344): `other` is the CLDR-mandated
|
|
2
|
+
// fallback and must stay required. The body below is never invoked — tsc
|
|
3
|
+
// checks it, bun:test does not run it. If `other` ever becomes optional the
|
|
4
|
+
// `@ts-expect-error` turns into an "unused directive" compile error.
|
|
5
|
+
|
|
6
|
+
import { expect, test } from "bun:test";
|
|
7
|
+
import type { PluralForms } from "../config";
|
|
8
|
+
|
|
9
|
+
function _pluralFormsRequireOther(): readonly PluralForms[] {
|
|
10
|
+
const withOther: PluralForms = { other: "items" };
|
|
11
|
+
// @ts-expect-error — `other` is required; a plural entry without it must not typecheck.
|
|
12
|
+
const missingOther: PluralForms = { one: "item" };
|
|
13
|
+
return [withOther, missingOther];
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
test("PluralForms: compile-time contract is wired", () => {
|
|
17
|
+
expect(_pluralFormsRequireOther).toBeDefined();
|
|
18
|
+
});
|
package/src/config.ts
CHANGED
|
@@ -453,7 +453,19 @@ export type NotificationDefinition = {
|
|
|
453
453
|
|
|
454
454
|
// --- Translations ---
|
|
455
455
|
|
|
456
|
-
|
|
456
|
+
// CLDR plural categories for one locale's variants of a translation string.
|
|
457
|
+
// `other` is the CLDR-mandated fallback and therefore required; the rest
|
|
458
|
+
// only exist in some locales (e.g. "few"/"many" for Slavic plurals).
|
|
459
|
+
export type PluralForms = {
|
|
460
|
+
readonly zero?: string;
|
|
461
|
+
readonly one?: string;
|
|
462
|
+
readonly two?: string;
|
|
463
|
+
readonly few?: string;
|
|
464
|
+
readonly many?: string;
|
|
465
|
+
readonly other: string;
|
|
466
|
+
};
|
|
467
|
+
export type TranslationValue = string | PluralForms;
|
|
468
|
+
export type TranslationEntry = Readonly<Record<string, TranslationValue>>;
|
|
457
469
|
export type TranslationKeys = Readonly<Record<string, TranslationEntry>>;
|
|
458
470
|
|
|
459
471
|
export type TranslationsDef = {
|
|
@@ -4,6 +4,7 @@ import type { KumikoEventTypeMap } from "./event-type-map";
|
|
|
4
4
|
import type { Registry } from "./feature";
|
|
5
5
|
import type { FileContext } from "./file-handle-types";
|
|
6
6
|
import type { AppendEventFn, UnsafeAppendEventFn } from "./handlers";
|
|
7
|
+
import type { SecretsContext } from "./secrets-types";
|
|
7
8
|
|
|
8
9
|
// Minimal, read+write surface handed to a MultiStreamProjection's apply()
|
|
9
10
|
// when it needs to produce follow-up events (saga / process-manager
|
|
@@ -44,4 +45,8 @@ export type MultiStreamApplyContext<TMap extends object = KumikoEventTypeMap> =
|
|
|
44
45
|
// Derive-on-first-use variants, mirrors AppContext.derivatives. Present
|
|
45
46
|
// exactly when `files` is — same file-foundation-provider precondition.
|
|
46
47
|
readonly derivatives?: DerivativesContext;
|
|
48
|
+
// Tenant-scoped secret reads for side-effect MSPs (e.g. step-dispatcher's
|
|
49
|
+
// webhook auth), audited via the read's own auditCtx. Present when the
|
|
50
|
+
// app booted with the secrets feature; undefined otherwise.
|
|
51
|
+
readonly secrets?: SecretsContext;
|
|
47
52
|
};
|
package/src/step.ts
CHANGED
|
@@ -342,9 +342,12 @@ export type StepNamespace = {
|
|
|
342
342
|
readonly method?: "POST" | "PUT" | "PATCH";
|
|
343
343
|
readonly headers?: StepResolver<Readonly<Record<string, string>>>;
|
|
344
344
|
readonly body?: StepResolver<unknown>;
|
|
345
|
+
// Name inside the tenant-owned secrets namespace
|
|
346
|
+
// `step-dispatcher:webhook-auth.<secret>` (secrets feature). Resolved
|
|
347
|
+
// per-tenant at dispatch time — never a global/env-scoped secret.
|
|
345
348
|
readonly auth?:
|
|
346
|
-
| { readonly kind: "bearer"; readonly
|
|
347
|
-
| { readonly kind: "header"; readonly name: string; readonly
|
|
349
|
+
| { readonly kind: "bearer"; readonly secret: string }
|
|
350
|
+
| { readonly kind: "header"; readonly name: string; readonly secret: string };
|
|
348
351
|
readonly mode: "deferred";
|
|
349
352
|
readonly retry?: { readonly times: number; readonly backoff: "exponential" | "linear" };
|
|
350
353
|
}) => StepInstance;
|