@cosmicdrift/kumiko-framework 0.372.0 → 0.374.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 (38) hide show
  1. package/agents/examples/rate-limiting.md +65 -1
  2. package/agents/widgets.md +1 -0
  3. package/dist/engine/boot-validator/entity-handler.d.ts +1 -0
  4. package/dist/engine/boot-validator/entity-handler.js +47 -16
  5. package/dist/engine/boot-validator/projection-list-screens.js +28 -37
  6. package/dist/engine/boot-validator/query-refs.js +26 -8
  7. package/dist/engine/boot-validator/screens.d.ts +1 -1
  8. package/dist/engine/boot-validator/screens.js +327 -41
  9. package/dist/engine/boot-validator/url-prefill-fields.js +3 -0
  10. package/dist/engine/build-app-schema.js +7 -3
  11. package/dist/engine/entity-list-searchability.d.ts +5 -0
  12. package/dist/engine/entity-list-searchability.js +35 -0
  13. package/dist/engine/feature-ast/extractors/handlers.js +1 -1
  14. package/dist/engine/feature-ast/extractors/hooks.js +8 -8
  15. package/dist/engine/feature-ast/pattern-change-schema.d.ts +150 -6
  16. package/dist/engine/feature-ast/pattern-change-schema.js +4 -3
  17. package/dist/engine/feature-ui-extensions.js +5 -2
  18. package/dist/engine/index.d.ts +2 -1
  19. package/dist/engine/index.js +1 -0
  20. package/dist/engine/paged-list.d.ts +29 -0
  21. package/dist/engine/paged-list.js +56 -0
  22. package/dist/engine/project-app-schema-for-roles.js +37 -6
  23. package/dist/engine/types/index.d.ts +3 -3
  24. package/dist/engine/types/index.js +1 -1
  25. package/dist/files/bind-pending-file-refs.d.ts +31 -1
  26. package/dist/files/bind-pending-file-refs.js +80 -6
  27. package/dist/files/index.d.ts +2 -0
  28. package/dist/files/index.js +1 -0
  29. package/dist/files/load-save-file-refs.js +3 -1
  30. package/dist/i18n/required-surface-keys.js +50 -2
  31. package/dist/pipeline/dispatch-shared.js +55 -35
  32. package/dist/rate-limit/index.d.ts +1 -1
  33. package/dist/rate-limit/resolver.d.ts +1 -1
  34. package/dist/rate-limit/resolver.js +104 -2
  35. package/dist/rate-limit/unlimited-resolver.js +1 -0
  36. package/dist/ui-types/index.d.ts +1 -1
  37. package/package.json +5 -5
  38. package/src/changes.json +74 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cosmicdrift/kumiko-framework",
3
- "version": "0.372.0",
3
+ "version": "0.374.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>",
@@ -199,8 +199,8 @@
199
199
  "./package.json": "./package.json"
200
200
  },
201
201
  "dependencies": {
202
- "@cosmicdrift/kumiko-http": "0.372.0",
203
- "@cosmicdrift/kumiko-types": "0.372.0",
202
+ "@cosmicdrift/kumiko-http": "0.374.0",
203
+ "@cosmicdrift/kumiko-types": "0.374.0",
204
204
  "bullmq": "^5.76.7",
205
205
  "bun-types": "^1.3.13",
206
206
  "hono": "^4.13.1",
@@ -216,8 +216,8 @@
216
216
  "zod": "^4.4.3"
217
217
  },
218
218
  "devDependencies": {
219
- "@cosmicdrift/kumiko-dispatcher-live": "0.372.0",
220
- "@cosmicdrift/kumiko-testing": "0.372.0",
219
+ "@cosmicdrift/kumiko-dispatcher-live": "0.374.0",
220
+ "@cosmicdrift/kumiko-testing": "0.374.0",
221
221
  "bun-types": "^1.3.13",
222
222
  "pino-pretty": "^13.1.3"
223
223
  },
package/src/changes.json CHANGED
@@ -1,4 +1,78 @@
1
1
  [
2
+ {
3
+ "version": "0.374.0",
4
+ "type": "improvement",
5
+ "title": "actionForm successLinks and resetOnSuccess",
6
+ "detail": "successLinks keeps the actionForm open after a successful submit and lists links resolved like redirect; boot rejects it together with redirect, with an unknown target or with a record target without idFrom. resetOnSuccess clears typed values after success. Role projection drops links to screens the role cannot reach."
7
+ },
8
+ {
9
+ "version": "0.374.0",
10
+ "type": "improvement",
11
+ "title": "clientAction row actions",
12
+ "detail": "RowAction gains kind \"clientAction\" with a client-registered handler name; boot rejects a name that is not <feature>:<kebab>, and the surface keys include its confirm, confirmLabel and successMessage."
13
+ },
14
+ {
15
+ "version": "0.374.0",
16
+ "type": "improvement",
17
+ "title": "Boot validation for screen-panel fallback and text panels",
18
+ "detail": "DashboardScreenPanel.fallback needs visibleWhen and a registered, embeddable target without its own visibleWhen. DashboardTextPanel (kind \"text\", exported with DashboardTextBlock) rejects empty blocks and empty lists; its text keys are required translation keys. Extension-selector panels qualify a short fallback ref, and role projection drops a fallback the role cannot reach."
19
+ },
20
+ {
21
+ "version": "0.374.0",
22
+ "type": "improvement",
23
+ "title": "Dashboard record binding, header actions, refresh and relative time",
24
+ "detail": "Dashboards take record, actions and refresh; stat panels and text params gain a relativeTime format; the surface keys include kumiko.dashboard.record.missing."
25
+ },
26
+ {
27
+ "version": "0.374.0",
28
+ "type": "breaking",
29
+ "title": "DashboardChartPanel.valueFormat only takes the currency format",
30
+ "detail": "DashboardValueFormat is now a union of DashboardCurrencyFormat and DashboardRelativeTimeFormat. Stat panels take both, chart panels only the currency one, and boot rejects relativeTime on a chart.",
31
+ "migration": "A chart panel that declares valueFormat keeps working with { kind: \"currency\", currency }. Code that types a chart's valueFormat as DashboardValueFormat should use DashboardCurrencyFormat instead; relativeTime on a chart was never meaningful and now fails boot."
32
+ },
33
+ {
34
+ "version": "0.374.0",
35
+ "type": "improvement",
36
+ "title": "Derived list searchability, actionForm load and drawer rowClick",
37
+ "detail": "projectionList searchable is derived false for entity-convention lists without searchable fields (searchable true is rejected at boot), actionForm.load registers a query checked at boot, and a drawer row action may set rowClick, counted with navigate rowClick and rejected on projectionDetail header actions."
38
+ },
39
+ {
40
+ "version": "0.374.0",
41
+ "type": "improvement",
42
+ "title": "Boot checks for field affixes and fillAction",
43
+ "detail": "Boot fails when a fillAction query is not a registered query handler, or when a { field } affix or a fillAction params source is not a field of the same form."
44
+ },
45
+ {
46
+ "version": "0.374.0",
47
+ "type": "improvement",
48
+ "title": "pagedListSchema and pageRows for in-memory list queries",
49
+ "detail": "pagedListSchema(sortableFields) and pageRows(rows, request, { searchFields, defaultSort }) cover search, sort (missing values last, ties by id), offset paging and an optional total for projectionList queries over merged rows. PagedListRequest and PagedListRowValue are exported; nextCursor is always null."
50
+ },
51
+ {
52
+ "version": "0.374.0",
53
+ "type": "improvement",
54
+ "title": "DashboardProgressTone type and unlimited label key",
55
+ "detail": "New exported type DashboardProgressTone for progress-list row tones. The default translations gain kumiko.dashboard.progress.unlimited."
56
+ },
57
+ {
58
+ "version": "0.374.0",
59
+ "type": "improvement",
60
+ "title": "Dashboard chart panels take a y-axis unit",
61
+ "detail": "DashboardChartPanel.unit (i18n key) is shown once on the y axis of a timeseries chart, with or without valueFormat. The boot validator rejects unit on other chart kinds; an untranslated unit key fails the required-surface key check."
62
+ },
63
+ {
64
+ "version": "0.373.0",
65
+ "type": "improvement",
66
+ "title": "loadPendingFileRef and bindPendingFileRef bind a caller's own pending upload from a custom handler",
67
+ "detail": "Additive. fileName is not part of PendingFileRef because it is personal data; read it via the fileRef executor's detail. Unexpected update errors throw; version_conflict and unique_violation map to \"version-conflict\"."
68
+ },
69
+ {
70
+ "version": "0.373.0",
71
+ "type": "breaking",
72
+ "title": "rateLimit accepts a list of buckets that are enforced all-or-nothing",
73
+ "detail": "RateLimitDeclaration is now a single option, a non-empty list of options or the disabled form. RateLimitResolver gains the required method enforceAll(requests: readonly RateLimitBucketRequest[]); createRateLimitResolver and createUnlimitedRateLimitResolver implement it. Payload buckets in additionalRateLimits are charged through the same call.",
74
+ "migration": "Custom RateLimitResolver implementations and test fakes need an enforceAll method (check every bucket, then deduct from all or none, and throw RateLimitError for the rejected bucket with the largest retryAfter). Existing rateLimit declarations stay valid. A duplicate payloadField in additionalRateLimits is now a boot error; merge the entries into one."
75
+ },
2
76
  {
3
77
  "version": "0.372.0",
4
78
  "type": "improvement",