@cosmicdrift/kumiko-framework 0.332.0 → 0.334.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/dist/db/eagerload.js +2 -1
- package/dist/engine/boot-validator/config-deps.js +13 -0
- package/dist/engine/boot-validator/pii-retention.js +39 -2
- package/dist/engine/boot-validator/screens.js +38 -6
- package/dist/engine/build-app-schema.js +3 -0
- package/dist/engine/build-config-feature-schema.js +98 -21
- package/dist/engine/config-helpers.d.ts +2 -2
- package/dist/engine/entity-handlers.js +7 -2
- package/dist/engine/extension-names.d.ts +12 -1
- package/dist/engine/extension-names.js +7 -0
- package/dist/engine/feature-ast/extractors/index.d.ts +1 -1
- package/dist/engine/feature-ast/extractors/index.js +1 -1
- package/dist/engine/feature-ast/extractors/round5.d.ts +1 -0
- package/dist/engine/feature-ast/extractors/round5.js +5 -0
- package/dist/engine/feature-ast/parse.js +3 -1
- package/dist/engine/feature-entity-handlers.js +22 -0
- package/dist/engine/field-access.d.ts +2 -0
- package/dist/engine/field-access.js +40 -0
- package/dist/engine/index.d.ts +4 -3
- package/dist/engine/index.js +3 -3
- package/dist/engine/role-assignment.d.ts +11 -1
- package/dist/engine/role-assignment.js +64 -3
- package/dist/engine/schema-builder.d.ts +1 -0
- package/dist/engine/schema-builder.js +11 -1
- package/dist/engine/types/index.d.ts +1 -1
- package/dist/files/file-ref-entity.d.ts +6 -0
- package/dist/files/file-ref-table.d.ts +6 -0
- package/dist/i18n/required-surface-keys.js +24 -3
- package/dist/i18n/settings-hub-keys.js +18 -4
- package/dist/pipeline/dispatch-batch.js +8 -3
- package/dist/pipeline/dispatch-write.js +5 -2
- package/dist/pipeline/dispatcher-utils.js +4 -1
- package/dist/pipeline/write-result-masking.d.ts +6 -0
- package/dist/pipeline/write-result-masking.js +36 -0
- package/dist/testing/shared-entities.d.ts +10 -0
- package/dist/ui-types/index.d.ts +2 -2
- package/package.json +4 -4
- package/src/changes.json +12 -0
|
@@ -9,6 +9,7 @@ export declare const sharedWidgetEntity: import("@cosmicdrift/kumiko-types/field
|
|
|
9
9
|
readonly filterable?: boolean;
|
|
10
10
|
readonly encrypted?: boolean;
|
|
11
11
|
readonly sensitive?: boolean;
|
|
12
|
+
readonly writeOnly?: boolean;
|
|
12
13
|
readonly readAsInstruction?: boolean;
|
|
13
14
|
readonly format?: "email" | "url" | "phone" | "password";
|
|
14
15
|
readonly default?: string;
|
|
@@ -31,6 +32,7 @@ export declare const sharedWidgetTable: import("../db/table-builder.js").EntityT
|
|
|
31
32
|
readonly filterable?: boolean;
|
|
32
33
|
readonly encrypted?: boolean;
|
|
33
34
|
readonly sensitive?: boolean;
|
|
35
|
+
readonly writeOnly?: boolean;
|
|
34
36
|
readonly readAsInstruction?: boolean;
|
|
35
37
|
readonly format?: "email" | "url" | "phone" | "password";
|
|
36
38
|
readonly default?: string;
|
|
@@ -53,6 +55,7 @@ export declare const sharedUserEntity: import("@cosmicdrift/kumiko-types/fields"
|
|
|
53
55
|
readonly filterable?: boolean;
|
|
54
56
|
readonly encrypted?: boolean;
|
|
55
57
|
readonly sensitive?: boolean;
|
|
58
|
+
readonly writeOnly?: boolean;
|
|
56
59
|
readonly readAsInstruction?: boolean;
|
|
57
60
|
readonly format?: "email" | "url" | "phone" | "password";
|
|
58
61
|
readonly default?: string;
|
|
@@ -73,6 +76,7 @@ export declare const sharedUserEntity: import("@cosmicdrift/kumiko-types/fields"
|
|
|
73
76
|
readonly filterable?: boolean;
|
|
74
77
|
readonly encrypted?: boolean;
|
|
75
78
|
readonly sensitive?: boolean;
|
|
79
|
+
readonly writeOnly?: boolean;
|
|
76
80
|
readonly readAsInstruction?: boolean;
|
|
77
81
|
readonly format?: "email" | "url" | "phone" | "password";
|
|
78
82
|
readonly default?: string;
|
|
@@ -93,6 +97,7 @@ export declare const sharedUserEntity: import("@cosmicdrift/kumiko-types/fields"
|
|
|
93
97
|
readonly filterable?: boolean;
|
|
94
98
|
readonly encrypted?: boolean;
|
|
95
99
|
readonly sensitive?: boolean;
|
|
100
|
+
readonly writeOnly?: boolean;
|
|
96
101
|
readonly readAsInstruction?: boolean;
|
|
97
102
|
readonly format?: "email" | "url" | "phone" | "password";
|
|
98
103
|
readonly default?: string;
|
|
@@ -118,6 +123,7 @@ export declare const sharedUserTable: import("../db/table-builder.js").EntityTab
|
|
|
118
123
|
readonly filterable?: boolean;
|
|
119
124
|
readonly encrypted?: boolean;
|
|
120
125
|
readonly sensitive?: boolean;
|
|
126
|
+
readonly writeOnly?: boolean;
|
|
121
127
|
readonly readAsInstruction?: boolean;
|
|
122
128
|
readonly format?: "email" | "url" | "phone" | "password";
|
|
123
129
|
readonly default?: string;
|
|
@@ -138,6 +144,7 @@ export declare const sharedUserTable: import("../db/table-builder.js").EntityTab
|
|
|
138
144
|
readonly filterable?: boolean;
|
|
139
145
|
readonly encrypted?: boolean;
|
|
140
146
|
readonly sensitive?: boolean;
|
|
147
|
+
readonly writeOnly?: boolean;
|
|
141
148
|
readonly readAsInstruction?: boolean;
|
|
142
149
|
readonly format?: "email" | "url" | "phone" | "password";
|
|
143
150
|
readonly default?: string;
|
|
@@ -158,6 +165,7 @@ export declare const sharedUserTable: import("../db/table-builder.js").EntityTab
|
|
|
158
165
|
readonly filterable?: boolean;
|
|
159
166
|
readonly encrypted?: boolean;
|
|
160
167
|
readonly sensitive?: boolean;
|
|
168
|
+
readonly writeOnly?: boolean;
|
|
161
169
|
readonly readAsInstruction?: boolean;
|
|
162
170
|
readonly format?: "email" | "url" | "phone" | "password";
|
|
163
171
|
readonly default?: string;
|
|
@@ -183,6 +191,7 @@ export declare const sharedItemEntity: import("@cosmicdrift/kumiko-types/fields"
|
|
|
183
191
|
readonly filterable?: boolean;
|
|
184
192
|
readonly encrypted?: boolean;
|
|
185
193
|
readonly sensitive?: boolean;
|
|
194
|
+
readonly writeOnly?: boolean;
|
|
186
195
|
readonly readAsInstruction?: boolean;
|
|
187
196
|
readonly format?: "email" | "url" | "phone" | "password";
|
|
188
197
|
readonly default?: string;
|
|
@@ -224,6 +233,7 @@ export declare const sharedItemTable: import("../db/table-builder.js").EntityTab
|
|
|
224
233
|
readonly filterable?: boolean;
|
|
225
234
|
readonly encrypted?: boolean;
|
|
226
235
|
readonly sensitive?: boolean;
|
|
236
|
+
readonly writeOnly?: boolean;
|
|
227
237
|
readonly readAsInstruction?: boolean;
|
|
228
238
|
readonly format?: "email" | "url" | "phone" | "password";
|
|
229
239
|
readonly default?: string;
|
package/dist/ui-types/index.d.ts
CHANGED
|
@@ -5,11 +5,11 @@ export type { ParsedRefTarget } from "../engine/parse-ref-target.js";
|
|
|
5
5
|
export { parseRefTarget } from "../engine/parse-ref-target.js";
|
|
6
6
|
export type { FieldsOrGroupsSection } from "../engine/screen-helpers.js";
|
|
7
7
|
export { evalFieldCondition, explicitListScreenId, isExtensionEditSection, isFieldsEditSection, isFormatSpec, isWriteFormEditSection, normalizeEditField, normalizeListColumn, resolveNavParentScreen, sectionFieldSpecs, } from "../engine/screen-helpers.js";
|
|
8
|
-
export type { BooleanFieldDef, DateFieldDef, EmbeddedDerivedCellDef, EntityDefinition, FieldDefinition, FileFieldDef, FilesFieldDef, ImageFieldDef, ImagesFieldDef, NumberFieldDef, SelectFieldDef, SelectOptionTone, TextFieldDef, } from "../engine/types/fields.js";
|
|
8
|
+
export type { BooleanFieldDef, DateFieldDef, EmbeddedDerivedCellDef, EntityDefinition, FieldDefinition, FileFieldDef, FilesFieldDef, ImageFieldDef, ImagesFieldDef, NumberFieldDef, OptionsQueryPayload, OptionsQueryPayloadValue, SelectFieldDef, SelectOptionTone, TextFieldDef, } from "../engine/types/fields.js";
|
|
9
9
|
export type { AccessRule, OpenToAllAccessRule, OpenToAllDeclaration, OpenToAllPersonalData, RoleAccessPersonalData, RoleAccessRule, } from "../engine/types/handlers.js";
|
|
10
10
|
export { isOpenToAllGranted, isUiAccessGranted } from "../engine/types/handlers.js";
|
|
11
11
|
export type { IconKey, NavDefinition, NavIconKey } from "../engine/types/nav.js";
|
|
12
|
-
export type { ActionFormRedirect, ActionFormScreenDefinition, ConfigEditScreenDefinition, CustomScreenDefinition, CustomScreenRoute, DashboardChartKind, DashboardChartPanel, DashboardChartTone, DashboardCustomPanel, DashboardFeedPanel, DashboardFilterDefinition, DashboardListPanel, DashboardPanelDefinition, DashboardPanelEmptyState, DashboardPanelQueryOptions, DashboardPanelSpan, DashboardPanelVisibility, DashboardProgressListPanel, DashboardScopeDefinition, DashboardScreenDefinition, DashboardScreenPanel, DashboardStatGroupPanel, DashboardStatPanel, DashboardTimeRangeDefinition, EditExtensionSection, EditFieldSpec, EditFieldsSection, EditLayout, EditRelatedListSection, EditSectionSpec, EditWriteFormSection, EntityEditScreenDefinition, EntityListExpandableRow, EntityListScreenDefinition, FieldCondition, FieldIconKey, FieldRenderer, FormWidth, ListBadgeTone, ListColumnDisplay, ListColumnSpec, ListFacetSpec, ListSortSpec, MetricNavigate, MetricSpec, PlatformComponent, ProjectionDetailScreenDefinition, ProjectionListScreenDefinition, RecordHeaderSubtitlePart, RelatedListToolbarAction, RowAction, RowActionDrawer, RowActionNavigate, RowActionWriteHandler, RowFieldExtractor, ScreenDefinition, ScreenFilter, ScreenFilterOp, ScreenSlots, SecretMintConfirmStep, SecretMintScreenDefinition, SecretReveal, SecretRevealField, SecretsEditScreenDefinition, SecretsEditSection, ToolbarAction, } from "../engine/types/screen.js";
|
|
12
|
+
export type { ActionFormFooterAction, ActionFormRedirect, ActionFormScreenDefinition, ConfigEditScreenDefinition, CustomScreenDefinition, CustomScreenRoute, DashboardChartKind, DashboardChartPanel, DashboardChartTone, DashboardCustomPanel, DashboardFeedPanel, DashboardFilterDefinition, DashboardListPanel, DashboardPanelDefinition, DashboardPanelEmptyState, DashboardPanelQueryOptions, DashboardPanelSpan, DashboardPanelVisibility, DashboardProgressListPanel, DashboardScopeDefinition, DashboardScreenDefinition, DashboardScreenPanel, DashboardStatGroupPanel, DashboardStatPanel, DashboardTimeRangeDefinition, EditExtensionSection, EditFieldSpec, EditFieldsSection, EditLayout, EditRelatedListSection, EditSectionSpec, EditWriteFormSection, EntityEditScreenDefinition, EntityListExpandableRow, EntityListFacetConfig, EntityListFacetExtraOption, EntityListScreenDefinition, FieldCondition, FieldIconKey, FieldRenderer, FormWidth, ListBadgeTone, ListColumnDisplay, ListColumnSpec, ListFacetSpec, ListSortSpec, MetricNavigate, MetricSpec, PlatformComponent, ProjectionDetailScreenDefinition, ProjectionListScreenDefinition, RecordHeaderSubtitlePart, RelatedListGroupBy, RelatedListRowTone, RelatedListToolbarAction, RowAction, RowActionDisplay, RowActionDrawer, RowActionMode, RowActionNavigate, RowActionWriteHandler, RowFieldExtractor, ScreenDefinition, ScreenFilter, ScreenFilterOp, ScreenSlots, SecretMintConfirmStep, SecretMintScreenDefinition, SecretReveal, SecretRevealField, SecretsEditScreenDefinition, SecretsEditSection, ToolbarAction, } from "../engine/types/screen.js";
|
|
13
13
|
export { metricField } from "../engine/types/screen.js";
|
|
14
14
|
export type { TargetRef } from "../engine/types/target-ref.js";
|
|
15
15
|
export type { TreeAction, TreeNode, TreeNodeState } from "../engine/types/tree-node.js";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cosmicdrift/kumiko-framework",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.334.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>",
|
|
@@ -206,8 +206,8 @@
|
|
|
206
206
|
"./package.json": "./package.json"
|
|
207
207
|
},
|
|
208
208
|
"dependencies": {
|
|
209
|
-
"@cosmicdrift/kumiko-http": "0.
|
|
210
|
-
"@cosmicdrift/kumiko-types": "0.
|
|
209
|
+
"@cosmicdrift/kumiko-http": "0.334.0",
|
|
210
|
+
"@cosmicdrift/kumiko-types": "0.334.0",
|
|
211
211
|
"bullmq": "^5.76.7",
|
|
212
212
|
"bun-types": "^1.3.13",
|
|
213
213
|
"hono": "^4.13.1",
|
|
@@ -223,7 +223,7 @@
|
|
|
223
223
|
"zod": "^4.4.3"
|
|
224
224
|
},
|
|
225
225
|
"devDependencies": {
|
|
226
|
-
"@cosmicdrift/kumiko-dispatcher-live": "0.
|
|
226
|
+
"@cosmicdrift/kumiko-dispatcher-live": "0.334.0",
|
|
227
227
|
"bun-types": "^1.3.13",
|
|
228
228
|
"pino-pretty": "^13.1.3"
|
|
229
229
|
},
|
package/src/changes.json
CHANGED
|
@@ -1,4 +1,16 @@
|
|
|
1
1
|
[
|
|
2
|
+
{
|
|
3
|
+
"version": "0.334.0",
|
|
4
|
+
"type": "improvement",
|
|
5
|
+
"title": "Settings form gaps: writeForm footer submit, option description/group, dependent optionsQueryPayload, config badge label, writeOnly secret fields",
|
|
6
|
+
"detail": "- A `writeForm` section that fills a whole tab puts its submit button into the pinned form footer.\n- `optionsQuery` rows may carry `description` (muted second line) and `group` (heading). The combobox and the radio list show both. Options with either one never render as segments.\n- `optionsQueryPayload` values may be `{ field: \"<sibling>\" }`. The select reloads when that field changes and clears a value the new rows no longer contain. A cleared config select resets the key, so the inherited value applies again. On config keys, `field` names another key of the same feature on the same settings mask. The boot validator checks the names, and `writeForm` fieldDefs now go through the select checks too.\n- The origin line and cascade level rows on `configEdit` fields show the option label instead of the raw value or id.\n- New `writeOnly: true` on entity text fields with `find: \"secret\"`. Reads return `true` (set) or `null` and never the value. On write, `\"\"` keeps the stored value and `null` clears it. The edit form shows a masked input with a \"set\" placeholder and a remove action. `maskWriteOnlyFields(entity, row)` is exported from `@cosmicdrift/kumiko-framework/engine` for custom query handlers that return executor rows."
|
|
7
|
+
},
|
|
8
|
+
{
|
|
9
|
+
"version": "0.334.0",
|
|
10
|
+
"type": "breaking",
|
|
11
|
+
"title": "Duplicate write/query handler names in one feature fail at definition time",
|
|
12
|
+
"migration": "Rename a custom handler that shares its name with another handler of the same feature, including names r.crud registers (<entity>:list, <entity>:detail, <entity>:create, <entity>:update, <entity>:delete, <entity>:restore). Before, the later registration replaced the earlier one silently."
|
|
13
|
+
},
|
|
2
14
|
{
|
|
3
15
|
"version": "0.332.0",
|
|
4
16
|
"type": "fix",
|