@cosmicdrift/kumiko-framework 0.195.0 → 0.196.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-framework",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.196.0",
|
|
4
4
|
"description": "Framework core — engine, pipeline, API, DB, and every other bit that makes Kumiko go.",
|
|
5
5
|
"license": "BUSL-1.1",
|
|
6
6
|
"author": "Marc Frost <marc@cosmicdriftgamestudio.com>",
|
|
@@ -186,7 +186,7 @@
|
|
|
186
186
|
"./package.json": "./package.json"
|
|
187
187
|
},
|
|
188
188
|
"dependencies": {
|
|
189
|
-
"@cosmicdrift/kumiko-types": "0.
|
|
189
|
+
"@cosmicdrift/kumiko-types": "0.196.0",
|
|
190
190
|
"bullmq": "^5.76.7",
|
|
191
191
|
"bun-types": "^1.3.13",
|
|
192
192
|
"hono": "^4.13.1",
|
|
@@ -202,7 +202,7 @@
|
|
|
202
202
|
"zod": "^4.4.3"
|
|
203
203
|
},
|
|
204
204
|
"devDependencies": {
|
|
205
|
-
"@cosmicdrift/kumiko-dispatcher-live": "0.
|
|
205
|
+
"@cosmicdrift/kumiko-dispatcher-live": "0.196.0",
|
|
206
206
|
"bun-types": "^1.3.13",
|
|
207
207
|
"pino-pretty": "^13.1.3"
|
|
208
208
|
},
|
|
@@ -4,11 +4,12 @@
|
|
|
4
4
|
// into validateColumnRendererForm, splitting them would create a
|
|
5
5
|
// same-folder require cycle.
|
|
6
6
|
|
|
7
|
+
import { NO_WIDGET_FIELD_TYPES } from "@cosmicdrift/kumiko-types/fields";
|
|
7
8
|
import { rowMetaFieldNames } from "../../db/table-builder";
|
|
8
9
|
import { isValidQn, qualifyEntityName } from "../qualified-name";
|
|
9
10
|
import { getAllowedFilterOps, isFieldFilterable } from "../screen-filter-ops";
|
|
10
11
|
import { isExtensionEditSection, normalizeEditField, normalizeListColumn } from "../screen-helpers";
|
|
11
|
-
import type { EntityDefinition, FeatureDefinition
|
|
12
|
+
import type { EntityDefinition, FeatureDefinition } from "../types";
|
|
12
13
|
import type {
|
|
13
14
|
DashboardCustomPanel,
|
|
14
15
|
DashboardFilterDefinition,
|
|
@@ -24,16 +25,6 @@ import type {
|
|
|
24
25
|
ToolbarAction,
|
|
25
26
|
} from "../types/screen";
|
|
26
27
|
|
|
27
|
-
// Mirrors FIELD_TYPES_WITHOUT_WIDGET in packages/renderer/src/app/form-schema.ts.
|
|
28
|
-
// Can't import it directly — renderer depends on framework, not the reverse.
|
|
29
|
-
// Keep both lists in sync when a field type gains or loses an auto-wired widget.
|
|
30
|
-
const NO_WIDGET_FIELD_TYPES: ReadonlySet<FieldDefinition["type"]> = new Set([
|
|
31
|
-
"jsonb",
|
|
32
|
-
"embedded",
|
|
33
|
-
"files",
|
|
34
|
-
"images",
|
|
35
|
-
]);
|
|
36
|
-
|
|
37
28
|
// A field type in NO_WIDGET_FIELD_TYPES renders read-only on the auto-wired
|
|
38
29
|
// entityEdit path (#1925) — a required field the user can never fill would
|
|
39
30
|
// block every save. Only the statically-resolvable case is caught here: a
|
|
@@ -48,7 +39,7 @@ function validateNoWidgetRequiredField(
|
|
|
48
39
|
): void {
|
|
49
40
|
const fieldDef = entityDef.fields[fieldSpec.field];
|
|
50
41
|
// skip: field doesn't exist or its type already has a widget — nothing to validate.
|
|
51
|
-
if (fieldDef === undefined || !NO_WIDGET_FIELD_TYPES.
|
|
42
|
+
if (fieldDef === undefined || !NO_WIDGET_FIELD_TYPES.includes(fieldDef.type)) return;
|
|
52
43
|
// Embedded LIST fields (`multiple: true`) get their own EmbeddedListField
|
|
53
44
|
// grid widget (#1838) — only plain (non-list) embedded has no widget.
|
|
54
45
|
const isEmbeddedList = fieldDef.type === "embedded" && fieldDef.multiple === true;
|
|
@@ -124,7 +115,7 @@ function validateRowActionNavigateParams(
|
|
|
124
115
|
function validateWizardLayout(
|
|
125
116
|
featureName: string,
|
|
126
117
|
screenId: string,
|
|
127
|
-
screenType: "entityEdit" | "actionForm",
|
|
118
|
+
screenType: "entityEdit" | "actionForm" | "configEdit",
|
|
128
119
|
layout: EditLayout,
|
|
129
120
|
featureMap: ReadonlyMap<string, FeatureDefinition>,
|
|
130
121
|
): void {
|
|
@@ -458,6 +449,7 @@ export function validateScreens(
|
|
|
458
449
|
}
|
|
459
450
|
}
|
|
460
451
|
}
|
|
452
|
+
validateWizardLayout(feature.name, screenId, "configEdit", screen.layout, featureMap);
|
|
461
453
|
// configKeys: jeder fieldName muss einen Mapping-Eintrag haben,
|
|
462
454
|
// jeder qualifizierte Key muss in der Registry existieren.
|
|
463
455
|
for (const fname of fieldNames) {
|
package/src/ui-types/index.ts
CHANGED
|
@@ -20,6 +20,7 @@
|
|
|
20
20
|
// When adding a symbol here, verify it's either a type or a pure
|
|
21
21
|
// helper with no cross-module side-effects.
|
|
22
22
|
|
|
23
|
+
export { NO_WIDGET_FIELD_TYPES } from "@cosmicdrift/kumiko-types/fields";
|
|
23
24
|
export type { DerivedCellRoundingTarget } from "../engine/embedded-derived";
|
|
24
25
|
export { computeDerivedCellValue, roundDerivedCellValue } from "../engine/embedded-derived";
|
|
25
26
|
export type { ParsedRefTarget } from "../engine/parse-ref-target";
|