@jskit-ai/agent-docs 0.1.242 → 0.1.244

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 (128) hide show
  1. package/guide/agent/app-extras/assistant-conversation.md +4 -2
  2. package/guide/agent/app-extras/assistant.md +3 -1
  3. package/guide/agent/app-extras/realtime.md +12 -3
  4. package/guide/agent/app-setup/database-layer.md +1 -1
  5. package/guide/agent/app-setup/existing-application-migration.md +0 -7
  6. package/guide/agent/framework/application-operations.md +1 -1
  7. package/guide/agent/framework/crud-operations.md +9 -9
  8. package/guide/agent/index.md +2 -0
  9. package/package.json +2 -3
  10. package/patterns/feature-package/example/booking-engine/package.json +1 -1
  11. package/patterns/feature-package/example/booking-engine/src/server/actions.js +0 -2
  12. package/patterns/feature-package/example/variations/AvailabilityEngineProvider.js +1 -1
  13. package/patterns/feature-package/example/variations/InvoiceRollupProvider.js +1 -1
  14. package/patterns/minimal-foundation/example/AGENTS.md +19 -0
  15. package/patterns/minimal-foundation/example/package.json +3 -3
  16. package/patterns/minimal-foundation/example/server/lib/runtimeEnv.js +3 -11
  17. package/patterns/minimal-foundation/example/src/main.js +0 -2
  18. package/patterns/shell-foundation/PATTERN.md +11 -20
  19. package/patterns/shell-foundation/example/AGENTS.md +19 -0
  20. package/patterns/shell-foundation/example/package.json +4 -4
  21. package/patterns/shell-foundation/example/packages/main/package.json +1 -1
  22. package/patterns/shell-foundation/example/server/lib/runtimeEnv.js +3 -11
  23. package/patterns/shell-foundation/example/src/components/ShellLayout.vue +1 -0
  24. package/patterns/shell-foundation/example/src/main.js +0 -2
  25. package/patterns/shell-foundation/example/src/pages/home/settings.vue +2 -2
  26. package/reference/autogen/KERNEL_MAP.md +16 -147
  27. package/reference/autogen/PATTERN_INDEX.md +37 -37
  28. package/reference/autogen/packages/agent-docs.md +1 -9
  29. package/reference/autogen/packages/assistant-core.md +102 -68
  30. package/reference/autogen/packages/assistant-runtime.md +29 -15
  31. package/reference/autogen/packages/assistant-voice-sherpa.md +2 -1
  32. package/reference/autogen/packages/assistant-voice.md +8 -11
  33. package/reference/autogen/packages/auth-core.md +1 -1
  34. package/reference/autogen/packages/auth-provider-local-core.md +1 -1
  35. package/reference/autogen/packages/auth-provider-local-db-core.md +1 -1
  36. package/reference/autogen/packages/auth-provider-oidc-core.md +1 -1
  37. package/reference/autogen/packages/auth-provider-supabase-core.md +1 -1
  38. package/reference/autogen/packages/auth-web.md +1 -2
  39. package/reference/autogen/packages/connector-google-calendar.md +6 -2
  40. package/reference/autogen/packages/connectors-catalog.md +26 -7
  41. package/reference/autogen/packages/connectors-core.md +14 -3
  42. package/reference/autogen/packages/connectors-web.md +6 -1
  43. package/reference/autogen/packages/console-core.md +1 -1
  44. package/reference/autogen/packages/console-web.md +1 -1
  45. package/reference/autogen/packages/crud-core.md +1 -1
  46. package/reference/autogen/packages/database-runtime-mysql.md +1 -1
  47. package/reference/autogen/packages/database-runtime-postgres.md +1 -1
  48. package/reference/autogen/packages/database-runtime.md +2 -86
  49. package/reference/autogen/packages/http-runtime.md +6 -92
  50. package/reference/autogen/packages/http-web.md +29 -49
  51. package/reference/autogen/packages/json-rest-api-core.md +1 -1
  52. package/reference/autogen/packages/kernel.md +108 -405
  53. package/reference/autogen/packages/mobile-capacitor.md +11 -1
  54. package/reference/autogen/packages/oidc-issuer-core.md +1 -1
  55. package/reference/autogen/packages/payments-core.md +12 -4
  56. package/reference/autogen/packages/payments-web.md +1 -1
  57. package/reference/autogen/packages/realtime.md +7 -5
  58. package/reference/autogen/packages/resource-core.md +1 -4
  59. package/reference/autogen/packages/resource-crud-core.md +4 -3
  60. package/reference/autogen/packages/rewarded-core.md +1 -1
  61. package/reference/autogen/packages/rewarded-web.md +1 -1
  62. package/reference/autogen/packages/shell-web.md +114 -49
  63. package/reference/autogen/packages/storage-runtime.md +1 -1
  64. package/reference/autogen/packages/uploads-image-web.md +1 -1
  65. package/reference/autogen/packages/uploads-runtime.md +1 -1
  66. package/reference/autogen/packages/users-core.md +1 -1
  67. package/reference/autogen/packages/users-web.md +1 -2
  68. package/reference/autogen/packages/workspaces-core.md +3 -1
  69. package/reference/autogen/packages/workspaces-web.md +1 -1
  70. package/reference/autogen/tooling/config-eslint.md +1 -1
  71. package/reference/autogen/tooling/jskit-catalog.md +8 -9
  72. package/reference/autogen/tooling/jskit-release.md +3 -4
  73. package/reference/autogen/tooling/testUtils.md +1 -28
  74. package/skills/jskit/SKILL.md +8 -6
  75. package/skills/jskit/references/app-operations.md +1 -1
  76. package/skills/jskit/references/crud-form-actions.md +62 -0
  77. package/skills/jskit/references/crud-operations.md +9 -9
  78. package/skills/jskit/references/existing-application-migration.md +0 -7
  79. package/{patterns → skills/jskit/references/heuristics}/INDEX.md +24 -38
  80. package/{patterns → skills/jskit/references/heuristics}/child-cruds.md +2 -0
  81. package/{patterns → skills/jskit/references/heuristics}/client-requests.md +2 -0
  82. package/{patterns → skills/jskit/references/heuristics}/crud-authoring.md +2 -0
  83. package/{patterns → skills/jskit/references/heuristics}/crud-links.md +2 -0
  84. package/{patterns → skills/jskit/references/heuristics}/crud-repository-mapping.md +3 -1
  85. package/{patterns → skills/jskit/references/heuristics}/filters.md +3 -1
  86. package/{patterns → skills/jskit/references/heuristics}/live-actions.md +2 -0
  87. package/{patterns → skills/jskit/references/heuristics}/page-redirects.md +2 -0
  88. package/{patterns → skills/jskit/references/heuristics}/page-scaffolding.md +5 -3
  89. package/{patterns → skills/jskit/references/heuristics}/placements.md +2 -0
  90. package/{patterns → skills/jskit/references/heuristics}/row-policies.md +2 -0
  91. package/{patterns → skills/jskit/references/heuristics}/server-search.md +2 -0
  92. package/{patterns → skills/jskit/references/heuristics}/surfaces.md +5 -3
  93. package/{patterns → skills/jskit/references/heuristics}/ui-contract.md +3 -1
  94. package/{patterns → skills/jskit/references/heuristics}/ui-testing.md +2 -0
  95. package/skills/jskit/references/pattern-index.md +37 -37
  96. package/skills/jskit/references/patterns/app/minimal-foundation/example/AGENTS.md +19 -0
  97. package/skills/jskit/references/patterns/app/minimal-foundation/example/package.json +3 -3
  98. package/skills/jskit/references/patterns/app/minimal-foundation/example/server/lib/runtimeEnv.js +3 -11
  99. package/skills/jskit/references/patterns/app/minimal-foundation/example/src/main.js +0 -2
  100. package/skills/jskit/references/patterns/app/shell-foundation/PATTERN.md +11 -20
  101. package/skills/jskit/references/patterns/app/shell-foundation/example/AGENTS.md +19 -0
  102. package/skills/jskit/references/patterns/app/shell-foundation/example/package.json +4 -4
  103. package/skills/jskit/references/patterns/app/shell-foundation/example/packages/main/package.json +1 -1
  104. package/skills/jskit/references/patterns/app/shell-foundation/example/server/lib/runtimeEnv.js +3 -11
  105. package/skills/jskit/references/patterns/app/shell-foundation/example/src/components/ShellLayout.vue +1 -0
  106. package/skills/jskit/references/patterns/app/shell-foundation/example/src/main.js +0 -2
  107. package/skills/jskit/references/patterns/app/shell-foundation/example/src/pages/home/settings.vue +2 -2
  108. package/skills/jskit/references/patterns/auth/accounts-hub/example/package.json +2 -2
  109. package/skills/jskit/references/patterns/auth/oidc-sign-in/example/package.json +2 -2
  110. package/skills/jskit/references/patterns/auth/supabase-auth/example/package.json +1 -1
  111. package/skills/jskit/references/patterns/connectors/calendar-cli/example/package.json +4 -4
  112. package/skills/jskit/references/patterns/connectors/oauth-connection/PATTERN.md +27 -610
  113. package/skills/jskit/references/patterns/connectors/paddle-catalogue/example/create-products.js +2 -1
  114. package/skills/jskit/references/patterns/connectors/redshift-queries/PATTERN.md +1 -1
  115. package/skills/jskit/references/patterns/crud/crud-screen-set/PATTERN.md +11 -1
  116. package/skills/jskit/references/patterns/crud/json-api-resource-package/example/packages/books/package.json +2 -2
  117. package/skills/jskit/references/patterns/database/mysql-application/example/package.json +1 -1
  118. package/skills/jskit/references/patterns/database/postgres-application/example/package.json +1 -1
  119. package/skills/jskit/references/patterns/realtime/realtime-application/example/package.json +2 -2
  120. package/skills/jskit/references/patterns/server/feature-package/example/booking-engine/package.json +1 -1
  121. package/skills/jskit/references/patterns/server/feature-package/example/booking-engine/src/server/actions.js +0 -2
  122. package/skills/jskit/references/patterns/server/feature-package/example/variations/AvailabilityEngineProvider.js +1 -1
  123. package/skills/jskit/references/patterns/server/feature-package/example/variations/InvoiceRollupProvider.js +1 -1
  124. package/skills/jskit/references/patterns/shell/application-shell/example/src/pages/home/index.vue +15 -5
  125. package/skills/jskit/references/patterns/shell/application-shell/example/tests/e2e/adaptive-shell.spec.ts +1 -1
  126. package/skills/jskit/references/patterns/users/user-administration-server/example/packages/users/package.json +2 -2
  127. package/skills/jskit/references/patterns/users/user-administration-server/example/packages/users-workspace/package.json +3 -3
  128. package/templates/app/AGENTS.md +0 -38
@@ -8,16 +8,12 @@ Use this on demand; do not load the full index at startup.
8
8
 
9
9
  ## Scope
10
10
  - Source: `packages/database-runtime/**/*{.js,.mjs,.cjs,.vue}`
11
- - Excludes: `test/`, `tests/`, `__tests__/`, `*.test.*`, `*.spec.*`, `*.vitest.*`, `node_modules/`, `dist/`, `coverage/`, `docs/`, `.vitepress/cache/`, `.vitepress/dist/`
11
+ - Excludes: `.build/`, `.git/`, `.jscpd/`, `.jskit/`, `coverage/`, `dist/`, `docs/`, `node_modules/`, `test/`, `tests/`, `__tests__/`, `.vitepress/cache/`, `.vitepress/dist/`, `skills/jskit/references/patterns/`, `*.test.*`, `*.spec.*`, `*.vitest.*`
12
12
 
13
13
  ## Sections
14
14
 
15
15
  ### src
16
16
 
17
- ### `src/client/index.js`
18
- Exports
19
- - None
20
-
21
17
  ### `src/server/databaseSetup.js`
22
18
  Exports
23
19
  - `prepareDatabaseFromApp({ client, appRoot = process.cwd(), environment = process.env, migrationsDirectory = "migrations", seed } = {})`
@@ -46,7 +42,6 @@ Local functions
46
42
 
47
43
  ### `src/shared/databaseClient.js`
48
44
  Exports
49
- - `normalizeText`
50
45
  - `normalizeDatabaseClient(value, { allowEmpty = false } = {})`
51
46
  - `toKnexClientId(databaseClient)`
52
47
 
@@ -61,15 +56,14 @@ Local functions
61
56
 
62
57
  ### `src/shared/dateUtils.js`
63
58
  Exports
64
- - `normalizeDateInput(value)`
65
59
  - `toIsoString(value)`
66
60
  - `toInsertDateTime(dateLike, fallback = new Date())`
67
- - `toNullableDateTime(value)`
68
61
  - `toDatabaseDateTimeUtc(value)`
69
62
  - `toJsonDate(value)`
70
63
  - `toJsonTime(value, { temporalPrecision } = {})`
71
64
  - `toJsonDateTime(value, { temporalPrecision } = {})`
72
65
  Local functions
66
+ - `normalizeDateInput(value)`
73
67
  - `toDateOrThrow(value)`
74
68
  - `pad(value, size = 2)`
75
69
  - `requireValidDateParts(year, month, day)`
@@ -94,130 +88,52 @@ Local functions
94
88
 
95
89
  ### `src/shared/index.js`
96
90
  Exports
97
- - `DatabaseRuntimeError`
98
- - `TransactionManagerError`
99
- - `RepositoryError`
100
- - `TransactionManager`
101
- - `createTransactionManager`
102
- - `BaseRepository`
103
- - `buildPaginationMeta`
104
- - `normalizeDateInput`
105
91
  - `toIsoString`
106
92
  - `toInsertDateTime`
107
- - `toNullableDateTime`
108
93
  - `toDatabaseDateTimeUtc`
109
94
  - `toJsonDate`
110
95
  - `toJsonTime`
111
96
  - `toJsonDateTime`
112
97
  - `normalizeDialect`
113
98
  - `detectDialectFromClient`
114
- - `normalizeText`
115
99
  - `normalizeDatabaseClient`
116
100
  - `toKnexClientId`
117
- - `parseDatabaseUrl`
118
- - `resolveDatabaseClientFromEnvironment`
119
- - `resolveDatabaseConnectionFromEnvironment`
120
- - `resolveKnexConnectionFromEnvironment`
121
101
  - `findDuplicateEntryError`
122
102
  - `isDuplicateEntryError`
123
- - `normalizePath`
124
- - `jsonTextExpression`
125
- - `whereJsonTextEquals`
126
103
  - `DEFAULT_VISIBILITY_COLUMNS`
127
104
  - `applyVisibility`
128
105
  - `applyVisibilityOwners`
129
- - `createRepositoryScope`
130
106
  - `resolveQueryOptions`
131
107
  - `resolveRepoClient`
132
108
  - `applyForUpdate`
133
- - `mapRowNullable`
134
109
  - `parseJsonObject`
135
110
  - `stringifyJsonObject`
136
- - `parseMetadataJson`
137
- - `stringifyMetadataJson`
138
- - `normalizeMetadataJsonInput`
139
111
  - `normalizeNullableString`
140
112
  - `normalizeDbRecordId`
141
113
  - `resolveInsertedRecordId`
142
- - `normalizeIdList`
143
- - `normalizeCountRow`
144
- - `parseJsonValue`
145
114
  - `toDbJson`
146
115
  - `runInTransaction`
147
116
  - `createWithTransaction`
148
- - `lockScopedRecordId`
149
- - `normalizeBatchSize`
150
- - `normalizeCutoffDateOrThrow`
151
- - `normalizeDeletedRowCount`
152
- - `deleteRowsOlderThan`
153
- - `retentionTestables`
154
- - `createRepoTransaction`
155
-
156
- ### `src/shared/json.js`
157
- Exports
158
- - `normalizePath(path)`
159
- - `jsonTextExpression({ client, column, path })`
160
- - `whereJsonTextEquals(query, { column, path, value })`
161
-
162
- ### `src/shared/repository.js`
163
- Exports
164
- - `BaseRepository`
165
- - `buildPaginationMeta({ total, page, pageSize } = {})`
166
117
 
167
118
  ### `src/shared/repositoryOptions.js`
168
119
  Exports
169
120
  - `resolveQueryOptions(options = {})`
170
121
  - `resolveRepoClient(dbClient, options = {})`
171
122
  - `applyForUpdate(query, options = {})`
172
- - `mapRowNullable(mapper)`
173
123
  - `parseJsonObject(value, fallback = {})`
174
124
  - `stringifyJsonObject(value, fallback = "{}")`
175
- - `parseMetadataJson(value, fallback = {})`
176
- - `stringifyMetadataJson(metadata, fallback = "{}")`
177
- - `normalizeMetadataJsonInput(value, fallback = null)`
178
125
  - `normalizeNullableString(value, { trim = true } = {})`
179
126
  - `normalizeDbRecordId(value, { fallback = null } = {})`
180
127
  - `resolveInsertedRecordId(insertResult, { fallback = null } = {})`
181
- - `normalizeIdList(values, { parseValue } = {})`
182
- - `normalizeCountRow(row)`
183
- - `parseJsonValue(value, fallback = null, options = {})`
184
128
  - `toDbJson(value)`
185
129
  - `runInTransaction(knex, callback)`
186
130
  - `createWithTransaction(knex)`
187
- - `lockScopedRecordId({ trx, tableName, recordId, scopeId, idColumn = "id", scopeColumn = "workspace_id" } = {})`
188
- Local functions
189
- - `requireSqlIdentifier(value, label)`
190
-
191
- ### `src/shared/repositoryScope.js`
192
- Exports
193
- - `createRepositoryScope(knex, tableName, options = {})`
194
- Local functions
195
- - `normalizeTableName(value)`
196
- - `normalizeIdColumn(value)`
197
-
198
- ### `src/shared/retention.js`
199
- Exports
200
- - `normalizeBatchSize(value, { fallback = 1000, max = 10_000 } = {})`
201
- - `normalizeCutoffDateOrThrow(value)`
202
- - `normalizeDeletedRowCount(value)`
203
- - `deleteRowsOlderThan({ client, tableName, dateColumn, cutoffDate, batchSize, applyFilters })`
204
- - `__testables`
205
-
206
- ### `src/shared/runtimeErrors.js`
207
- Exports
208
- - `DatabaseRuntimeError`
209
- - `TransactionManagerError`
210
- - `RepositoryError`
211
131
 
212
132
  ### `src/shared/transactionManager.js`
213
133
  Exports
214
134
  - `TransactionManager`
215
135
  - `createTransactionManager(options = {})`
216
136
 
217
- ### `src/shared/transactions.js`
218
- Exports
219
- - `createRepoTransaction(dbClient)`
220
-
221
137
  ### `src/shared/visibility.js`
222
138
  Exports
223
139
  - `DEFAULT_VISIBILITY_COLUMNS`
@@ -8,7 +8,7 @@ Use this on demand; do not load the full index at startup.
8
8
 
9
9
  ## Scope
10
10
  - Source: `packages/http-runtime/**/*{.js,.mjs,.cjs,.vue}`
11
- - Excludes: `test/`, `tests/`, `__tests__/`, `*.test.*`, `*.spec.*`, `*.vitest.*`, `node_modules/`, `dist/`, `coverage/`, `docs/`, `.vitepress/cache/`, `.vitepress/dist/`
11
+ - Excludes: `.build/`, `.git/`, `.jscpd/`, `.jskit/`, `coverage/`, `dist/`, `docs/`, `node_modules/`, `test/`, `tests/`, `__tests__/`, `.vitepress/cache/`, `.vitepress/dist/`, `skills/jskit/references/patterns/`, `*.test.*`, `*.spec.*`, `*.vitest.*`
12
12
 
13
13
  ## Sections
14
14
 
@@ -23,21 +23,12 @@ Exports
23
23
  - `createValidationFailure`
24
24
  - `createHttpError`
25
25
  - `createNetworkError`
26
+ - `isGenericHttpErrorMessage`
26
27
  - `DEFAULT_RETRYABLE_CSRF_ERROR_CODES`
27
28
  - `shouldRetryForCsrfFailure`
28
29
  - `normalizeHeaderName`
29
30
  - `hasHeader`
30
31
  - `setHeaderIfMissing`
31
- - `HttpValidatorsClientProvider`
32
- - `HttpClientRuntimeClientProvider`
33
-
34
- ### `src/client/providers/HttpClientRuntimeClientProvider.js`
35
- Exports
36
- - `HttpClientRuntimeClientProvider`
37
-
38
- ### `src/client/providers/HttpValidatorsClientProvider.js`
39
- Exports
40
- - `HttpValidatorsClientProvider`
41
32
 
42
33
  ### `src/client/transientRetryHttpClient.js`
43
34
  Exports
@@ -53,14 +44,6 @@ Exports
53
44
  - `resolveFieldErrors`
54
45
  - `createValidationFailure({ error = "Validation failed.", code = "validation_failed", fieldErrors = {} } = {})`
55
46
 
56
- ### `src/server/providers/HttpClientProvider.js`
57
- Exports
58
- - `HttpClientProvider`
59
-
60
- ### `src/server/providers/HttpValidatorsProvider.js`
61
- Exports
62
- - `HttpValidatorsProvider`
63
-
64
47
  ### `src/shared/clientRuntime/client.js`
65
48
  Exports
66
49
  - `createHttpClient(options = {})`
@@ -81,8 +64,11 @@ Local functions
81
64
  Exports
82
65
  - `createHttpError(response, data = {})`
83
66
  - `createNetworkError(cause)`
67
+ - `isGenericHttpErrorMessage(error)`
84
68
  Local functions
85
69
  - `standardErrorMessage(payload = {})`
70
+ - `genericHttpErrorMessage(status)`
71
+ - `resolveErrorStatus(error)`
86
72
 
87
73
  ### `src/shared/clientRuntime/headers.js`
88
74
  Exports
@@ -90,17 +76,6 @@ Exports
90
76
  - `hasHeader(headers, name)`
91
77
  - `setHeaderIfMissing(headers, name, value)`
92
78
 
93
- ### `src/shared/clientRuntime/index.js`
94
- Exports
95
- - `createHttpClient`
96
- - `createHttpError`
97
- - `createNetworkError`
98
- - `DEFAULT_RETRYABLE_CSRF_ERROR_CODES`
99
- - `shouldRetryForCsrfFailure`
100
- - `normalizeHeaderName`
101
- - `hasHeader`
102
- - `setHeaderIfMissing`
103
-
104
79
  ### `src/shared/clientRuntime/jsonApiResourceTransport.js`
105
80
  Exports
106
81
  - `JSON_API_CONTENT_TYPE`
@@ -112,7 +87,6 @@ Exports
112
87
  - `decodeJsonApiErrorFieldErrors(payload = {})`
113
88
  - `createJsonApiClientErrorPayload(payload = {})`
114
89
  Local functions
115
- - `isRecord(value)`
116
90
  - `normalizeTransportKind(transport = null)`
117
91
  - `defaultEncodeAttributes(body = {})`
118
92
  - `createIncludedResourceIndex(document = {})`
@@ -130,7 +104,6 @@ Local functions
130
104
 
131
105
  ### `src/shared/index.js`
132
106
  Exports
133
- - `createPaginationQuerySchema`
134
107
  - `fieldErrorsFieldDefinition`
135
108
  - `apiErrorDetailsSchema`
136
109
  - `apiValidationErrorDetailsSchema`
@@ -141,20 +114,8 @@ Exports
141
114
  - `fastifyDefaultErrorTransportSchema`
142
115
  - `STANDARD_ERROR_STATUS_CODES`
143
116
  - `createTransportResponseSchema`
144
- - `passthroughErrorResponses`
145
117
  - `withStandardErrorResponses`
146
- - `enumSchema`
147
- - `createCursorPagedListResponseSchema`
148
- - `createResource`
149
- - `createCommand`
150
- - `resolveSchemaMessages`
151
- - `resolveFieldSchema`
152
- - `resolveIssueField`
153
- - `resolveMissingRequiredFields`
154
- - `resolveIssueMessageFromSchema`
155
- - `mapOperationIssues`
156
118
  - `validateOperationSection`
157
- - `validateOperationInput`
158
119
  - `JSON_API_CONTENT_TYPE`
159
120
  - `createJsonApiDocument`
160
121
  - `createJsonApiErrorDocumentFromFailure`
@@ -206,10 +167,6 @@ Exports
206
167
  - `resolveRelationshipFieldKey(relationshipName = "", lookupFieldMap = null)`
207
168
  - `simplifyJsonApiResourceWithRelationshipIds(resource = {}, { lookupFieldMap = null } = {})`
208
169
 
209
- ### `src/shared/validators/command.js`
210
- Exports
211
- - `createCommand({ input, output, idempotent = null, invalidates = [] } = {})`
212
-
213
170
  ### `src/shared/validators/errorResponses.js`
214
171
  Exports
215
172
  - `fieldErrorsFieldDefinition`
@@ -222,13 +179,7 @@ Exports
222
179
  - `fastifyDefaultErrorTransportSchema`
223
180
  - `STANDARD_ERROR_STATUS_CODES`
224
181
  - `createTransportResponseSchema(schema = {})`
225
- - `passthroughErrorResponses(successResponses)`
226
182
  - `withStandardErrorResponses(successResponses, { includeValidation400 = false } = {})`
227
- - `enumSchema(values)`
228
-
229
- ### `src/shared/validators/httpValidatorsApi.js`
230
- Exports
231
- - `HTTP_VALIDATORS_API`
232
183
 
233
184
  ### `src/shared/validators/jsonApiQueryTransport.js`
234
185
  Exports
@@ -242,7 +193,6 @@ Exports
242
193
  - `decodeJsonApiResourceQueryObject(query = {}, { responseType = "" } = {})`
243
194
  - `createJsonApiResourceQueryTransportSchema({ query, responseType = "" } = {})`
244
195
  Local functions
245
- - `isRecord(value)`
246
196
  - `normalizeQueryKey(key = "")`
247
197
  - `buildFieldsTransportKey(responseType = "")`
248
198
  - `parseFieldsTransportType(key = "")`
@@ -250,10 +200,6 @@ Local functions
250
200
  - `createJsonApiFieldsTransportValueSchema()`
251
201
  - `normalizeTransportQueryScalar(value)`
252
202
 
253
- ### `src/shared/validators/jsonApiResponses.js`
254
- Exports
255
- - `simplifyJsonApiDocument`
256
-
257
203
  ### `src/shared/validators/jsonApiResult.js`
258
204
  Exports
259
205
  - `JSON_API_RESULT_MARKER`
@@ -280,7 +226,6 @@ Exports
280
226
  - `createJsonApiResourceRouteTransport({ type = "", requestType = "", responseType = "", query = null, allowBodyId = false, successKind = "record", pointerPrefix = "/data/attributes", mapRequestRelationships = null, getRecordType = null, getRecordId = null, getRecordAttributes = null, getRecordRelationships = null, getRecordLinks = null, getRecordMeta = null, getIncluded = null, getDocumentLinks = null, getDocumentMeta = null, getCollectionItems = null } = {})`
281
227
  - `createJsonApiResourceRouteContract({ type = "", requestType = "", responseType = "", body = null, query = null, output = null, outputKind = "record", successStatus = 200, includeValidation400 = false, allowSparseFields = false, allowBodyId = false, pointerPrefix = "/data/attributes", bodyAttributeExcludeKeys = [], outputAttributeExcludeKeys = [], bodyRelationshipEntries = [], outputRelationshipEntries = [], getRecordType = null, getRecordId = null, getRecordAttributes = null, getRecordRelationships = null, getRecordLinks = null, getRecordMeta = null, getIncluded = null, getDocumentLinks = null, getDocumentMeta = null, getCollectionItems = null, mapRequestRelationships = null } = {})`
282
228
  Local functions
283
- - `isRecord(value)`
284
229
  - `createJsonApiTransportError(statusCode, message, code)`
285
230
  - `resolveRouteType(type = "")`
286
231
  - `resolveRouteTypes(value = {})`
@@ -313,7 +258,6 @@ Exports
313
258
  - `normalizeJsonApiResourceObject(resource = {})`
314
259
  - `simplifyJsonApiDocument(payload = {})`
315
260
  Local functions
316
- - `isRecord(value)`
317
261
  - `normalizeMediaType(contentType = "")`
318
262
  - `normalizeJsonApiResourceArray(value)`
319
263
  - `normalizeJsonApiLinks(value)`
@@ -324,42 +268,12 @@ Local functions
324
268
  - `resolveJsonApiValidationSource(issue = {}, validationContext = "")`
325
269
  - `simplifyJsonApiResourceObject(resource = {})`
326
270
 
327
- ### `src/shared/validators/operationMessages.js`
328
- Exports
329
- - `resolveSchemaMessages(schema = {})`
330
- - `resolveFieldSchema(schema = {}, field = "")`
331
- - `resolveIssueField(issue = {})`
332
- - `resolveMissingRequiredFields(issue = {})`
333
- - `resolveIssueMessageFromSchema(field, issue, schema = {})`
334
- - `mapOperationIssues(issues = [], schema = {})`
335
- Local functions
336
- - `decodePointerSegment(value = "")`
337
- - `resolveSchemaPathSegments(schemaPath = "")`
338
- - `resolveFieldFromSchemaPath(schemaPath = "")`
339
- - `resolveSchemaNode(schema = {}, schemaPath = "")`
340
- - `collectSchemaFieldCandidates(schema = {})`
341
- - `resolveConditionalIssueField(issue = {}, schema = {})`
342
- - `resolveFallbackIssueField(issue = {}, schema = {})`
343
- - `shouldSuppressRootUnionGlobalIssue(issue = {}, fieldErrors = {})`
344
-
345
271
  ### `src/shared/validators/operationValidation.js`
346
272
  Exports
347
- - `validateOperationSection({ operation = {}, section = "body", value, context = {} } = {})`
348
- - `validateOperationInput({ operation = {}, input = {}, context = {} } = {})`
273
+ - `validateOperationSection({ operation = {}, section = "body", value } = {})`
349
274
  Local functions
350
275
  - `resolveOperationSection(operation = {}, section = "body")`
351
- - `buildValidationSuccessResult(value)`
352
276
  - `isFieldValidationError(error)`
353
- - `buildValidationFailureResult(error, normalized)`
354
-
355
- ### `src/shared/validators/paginationQuery.js`
356
- Exports
357
- - `createPaginationQuerySchema({ defaultPage = 1, defaultPageSize = 10, minPage = 1, minPageSize = 1, maxPageSize = 100 } = {})`
358
-
359
- ### `src/shared/validators/resource.js`
360
- Exports
361
- - `createCursorPagedListResponseSchema(itemSchema)`
362
- - `createResource({ record, create, replace, patch, list = null, listItem = null } = {})`
363
277
 
364
278
  ### `src/shared/validators/schemaUtils.js`
365
279
  Exports
@@ -8,7 +8,7 @@ Use this on demand; do not load the full index at startup.
8
8
 
9
9
  ## Scope
10
10
  - Source: `packages/http-web/**/*{.js,.mjs,.cjs,.vue}`
11
- - Excludes: `test/`, `tests/`, `__tests__/`, `*.test.*`, `*.spec.*`, `*.vitest.*`, `node_modules/`, `dist/`, `coverage/`, `docs/`, `.vitepress/cache/`, `.vitepress/dist/`
11
+ - Excludes: `.build/`, `.git/`, `.jscpd/`, `.jskit/`, `coverage/`, `dist/`, `docs/`, `node_modules/`, `test/`, `tests/`, `__tests__/`, `.vitepress/cache/`, `.vitepress/dist/`, `skills/jskit/references/patterns/`, `*.test.*`, `*.spec.*`, `*.vitest.*`
12
12
 
13
13
  ## Sections
14
14
 
@@ -17,8 +17,6 @@ Use this on demand; do not load the full index at startup.
17
17
  ### `src/client/bulkActions.js`
18
18
  Exports
19
19
  - `defineCrudListBulkActions(actions = [])`
20
- Local functions
21
- - `normalizeCrudListBulkAction(rawAction = {}, index = 0)`
22
20
 
23
21
  ### `src/client/components/CrudAddEditScreen.vue`
24
22
  Exports
@@ -54,12 +52,17 @@ Local functions
54
52
  - `selectDate(value)`
55
53
  - `handleActivatorKeydown(event)`
56
54
 
57
- ### `src/client/components/CrudListFilterSurface.vue`
55
+ ### `src/client/components/CrudListFilterControls.vue`
58
56
  Exports
59
57
  - None
60
58
  Local functions
61
59
  - `optionItems(filter = {})`
62
60
  - `placeholder(filter = {}, fallback = "")`
61
+
62
+ ### `src/client/components/CrudListFilterSurface.vue`
63
+ Exports
64
+ - None
65
+ Local functions
63
66
  - `clearChip(chip = {})`
64
67
  - `clearFilters()`
65
68
 
@@ -115,7 +118,6 @@ Exports
115
118
  - `resolveCrudJsonApiTransport(transport = null, resource = null, options = {})`
116
119
  - `resolveLookupFieldMap(resource = null)`
117
120
  Local functions
118
- - `isRecord(value)`
119
121
  - `resolveSchemaFieldDefinitions(definition = null)`
120
122
  - `isJsonApiResourceTransport(transport = null)`
121
123
  - `resolveCrudJsonApiResourceType(resource = null)`
@@ -126,17 +128,15 @@ Exports
126
128
  - `resolveLookupFieldDisplayValue(record = {}, field = {}, relationKind = "", valueKey = "", labelKey = "")`
127
129
  - `resolveRecordTitle(record = {}, { fallbackKey = "", defaultValue = DEFAULT_RECORD_TITLE } = {})`
128
130
  Local functions
129
- - `hasDisplayValue(value)`
130
131
  - `resolveComposedLabel(source = {}, candidates = LOOKUP_LABEL_COMPOSITION_CANDIDATES)`
131
132
  - `resolveLookupFieldDescriptor(field = {}, relationKind = "", valueKey = "", labelKey = "")`
132
133
  - `resolveFallbackLookupKey(key = "")`
133
134
 
134
135
  ### `src/client/composables/crud/crudLookupFieldRuntime.js`
135
136
  Exports
136
- - `createCrudLookupFieldRuntime({ formFields = [], adapter = null, recordIdParam = "recordId", queryKeyPrefix = [], placementSourcePrefix = "", lookupContainerKey = "lookups" } = {})`
137
+ - `createCrudLookupFieldRuntime({ formFields = [], recordIdParam = "recordId", queryKeyPrefix = [], placementSourcePrefix = "", lookupContainerKey = "lookups" } = {})`
137
138
  Local functions
138
139
  - `normalizeQueryKeyPrefix(value)`
139
- - `isSameLookupValue(left, right)`
140
140
  - `normalizeLookupValue(value)`
141
141
  - `createSelectedLookupItem(selectedValue, selectedRecord = {}, entry = {})`
142
142
 
@@ -190,20 +190,20 @@ Local functions
190
190
 
191
191
  ### `src/client/composables/internal/useOperationScope.js`
192
192
  Exports
193
- - `useOperationScope({ ownershipFilter = ROUTE_VISIBILITY_WORKSPACE, surfaceId = "", access = "auto", placementSource = "http-web.operation", apiSuffix = "", model, readEnabled = true, queryKeyFactory = null, permissionSets = {}, realtime = null } = {})`
193
+ - `useOperationScope({ ownershipFilter = ROUTE_VISIBILITY_WORKSPACE, surfaceId = "", access = "auto", apiSuffix = "", model, readEnabled = true, queryKeyFactory = null, permissionSets = {}, realtime = null } = {})`
194
194
  Local functions
195
195
  - `normalizePermissionSets(permissionSets = {})`
196
196
  - `hasAnyPermissions(permissionSets = {})`
197
197
 
198
198
  ### `src/client/composables/records/useAddEdit.js`
199
199
  Exports
200
- - `useAddEdit({ ownershipFilter = ROUTE_VISIBILITY_WORKSPACE, surfaceId = "", access = "auto", resource = null, apiSuffix = "", queryKeyFactory = null, viewPermissions = [], savePermissions = [], readMethod = "GET", readEnabled = true, writeMethod = "PATCH", client = null, transport = null, requestRecovery = null, requestRecoveryLabel = "Resource", placementSource = "http-web.add-edit", fallbackLoadError = "Unable to load resource.", fallbackSaveError = "Unable to save resource.", fieldErrorKeys = [], clearOnRouteChange = true, model, input, mapLoadedToModel, buildRawPayload, buildSavePayload, onSaveSuccess, validationFeedback = true, requestQueryParams = null, recordIdParam = "recordId", routeParams = null, routeRecordId = null, apiUrlTemplate = "", viewUrlTemplate = "", listUrlTemplate = "", saveRecordIdSelector = null, messages = {}, realtime = null, adapter = null } = {})`
200
+ - `useAddEdit({ ownershipFilter = ROUTE_VISIBILITY_WORKSPACE, surfaceId = "", access = "auto", resource = null, apiSuffix = "", queryKeyFactory = null, viewPermissions = [], savePermissions = [], readMethod = "GET", readEnabled = true, writeMethod = "PATCH", client = null, transport = null, requestRecovery = null, requestRecoveryLabel = "Resource", placementSource = "http-web.add-edit", fallbackLoadError = "Unable to load resource.", fallbackSaveError = "", fieldErrorKeys = [], clearOnRouteChange = true, model, input, mapLoadedToModel, buildRawPayload, buildSavePayload, onSaveSuccess, validationFeedback = true, requestQueryParams = null, recordIdParam = "recordId", routeParams = null, routeRecordId = null, apiUrlTemplate = "", viewUrlTemplate = "", listUrlTemplate = "", saveRecordIdSelector = null, messages = {}, realtime = null } = {})`
201
201
 
202
202
  ### `src/client/composables/records/useCrudAddEdit.js`
203
203
  Exports
204
204
  - `useCrudAddEdit({ resource = null, operationName = "", formFields = [], addEditOptions = {}, saveSuccess = {}, fieldBinding = null, createModel = null, buildPayload = null, mapPayloadToModel = null, input = null } = {})`
205
205
  Local functions
206
- - `normalizeFieldErrorKeys(keys = [])`
206
+ - `resolvePassedAddEditOptions(addEditOptions = {})`
207
207
  - `normalizeSaveSuccessOptions(options = {})`
208
208
 
209
209
  ### `src/client/composables/records/useCrudList.js`
@@ -219,17 +219,16 @@ Exports
219
219
 
220
220
  ### `src/client/composables/records/useList.js`
221
221
  Exports
222
- - `useList({ ownershipFilter = ROUTE_VISIBILITY_WORKSPACE, surfaceId = "", access = "auto", apiSuffix = "", queryKeyFactory = null, viewPermissions = [], readEnabled = true, placementSource = "http-web.list", fallbackLoadError = "Unable to load list.", initialPageParam = null, getNextPageParam, selectItems, client = null, transport = null, requestOptions, queryOptions, requestRecovery, requestRecoveryLabel = "List", realtime = null, adapter = null, recordIdParam = "recordId", recordIdSelector = null, viewUrlTemplate = "", editUrlTemplate = "", search = null, queryParams = null, routeQueryValueResolvers = null, requestQueryParams = null, requestFieldsets = null, syncToRoute = false } = {})`
222
+ - `useList({ ownershipFilter = ROUTE_VISIBILITY_WORKSPACE, surfaceId = "", access = "auto", apiSuffix = "", queryKeyFactory = null, viewPermissions = [], readEnabled = true, placementSource = "http-web.list", fallbackLoadError = "Unable to load list.", initialPageParam = null, getNextPageParam, selectItems, client = null, transport = null, requestOptions, queryOptions, requestRecovery, requestRecoveryLabel = "List", realtime = null, recordIdParam = "recordId", recordIdSelector = null, viewUrlTemplate = "", editUrlTemplate = "", search = null, queryParams = null, routeQueryValueResolvers = null, requestQueryParams = null, requestFieldsets = null, syncToRoute = false } = {})`
223
223
 
224
224
  ### `src/client/composables/records/useView.js`
225
225
  Exports
226
- - `useView({ resource = null, ownershipFilter = ROUTE_VISIBILITY_WORKSPACE, surfaceId = "", access = "auto", apiSuffix = "", queryKeyFactory = null, viewPermissions = [], readMethod = "GET", readEnabled = true, client = null, transport = null, requestRecovery = null, requestRecoveryLabel = "Resource", placementSource = "http-web.view", fallbackLoadError = "Unable to load resource.", notFoundStatuses = [404], notFoundMessage = "Record not found.", model, mapLoadedToModel, requestQueryParams = null, requestFieldsets = null, recordIdParam = "recordId", routeParams = null, routeRecordId = null, apiUrlTemplate = "", listUrlTemplate = "", editUrlTemplate = "", includeRecordIdInQueryKey = false, realtime = undefined, adapter = null } = {})`
226
+ - `useView({ resource = null, ownershipFilter = ROUTE_VISIBILITY_WORKSPACE, surfaceId = "", access = "auto", apiSuffix = "", queryKeyFactory = null, viewPermissions = [], readMethod = "GET", readEnabled = true, client = null, transport = null, requestRecovery = null, requestRecoveryLabel = "Resource", placementSource = "http-web.view", fallbackLoadError = "Unable to load resource.", notFoundStatuses = [404], notFoundMessage = "Record not found.", model, mapLoadedToModel, requestQueryParams = null, requestFieldsets = null, recordIdParam = "recordId", routeParams = null, routeRecordId = null, apiUrlTemplate = "", listUrlTemplate = "", editUrlTemplate = "", includeRecordIdInQueryKey = false, realtime = undefined } = {})`
227
227
 
228
228
  ### `src/client/composables/runtime/addEditUiRuntime.js`
229
229
  Exports
230
230
  - `createAddEditUiRuntime({ recordIdParam = "recordId", routeParams = null, routeParamNames = null, routePath = "", routeRecordId = null, apiUrlTemplate = "", viewUrlTemplate = "", listUrlTemplate = "", saveRecordIdSelector = null } = {})`
231
231
  Local functions
232
- - `toResolvedRecordId({ routeParams, recordIdParam, routeRecordId })`
233
232
  - `resolveSavedRecordId(payload, saveRecordIdSelector)`
234
233
 
235
234
  ### `src/client/composables/runtime/listUiRuntime.js`
@@ -247,11 +246,6 @@ Local functions
247
246
  - `isObjectLike(value)`
248
247
  - `deepClone(value)`
249
248
 
250
- ### `src/client/composables/runtime/operationAdapters.js`
251
- Exports
252
- - `createWebOperationAdapter()`
253
- - `resolveOperationAdapter(adapter, { context = "http-web operation adapter" } = {})`
254
-
255
249
  ### `src/client/composables/runtime/operationUiHelpers.js`
256
250
  Exports
257
251
  - `setupRouteChangeCleanup({ enabled = true, route = null, feedback = null, fieldBag = null, onClear = null } = {})`
@@ -281,9 +275,8 @@ Local functions
281
275
 
282
276
  ### `src/client/composables/runtime/useFieldErrorBag.js`
283
277
  Exports
278
+ - `normalizeFieldErrorKeys(keys)`
284
279
  - `useFieldErrorBag(keys = [])`
285
- Local functions
286
- - `normalizeKeys(keys)`
287
280
 
288
281
  ### `src/client/composables/runtime/useListCore.js`
289
282
  Exports
@@ -306,16 +299,11 @@ Local functions
306
299
  ### `src/client/composables/runtime/viewUiRuntime.js`
307
300
  Exports
308
301
  - `createViewUiRuntime({ recordIdParam = "recordId", routeParams = null, routeParamNames = null, routePath = "", routeRecordId = null, apiUrlTemplate = "", listUrlTemplate = "", editUrlTemplate = "" } = {})`
309
- Local functions
310
- - `resolveRecordId({ routeParams, recordIdParam, routeRecordId })`
311
302
 
312
303
  ### `src/client/composables/support/errorMessageHelpers.js`
313
304
  Exports
314
305
  - `toQueryErrorMessage(error, fallbackMessage = "", defaultMessage = "Request failed.")`
315
306
  - `toUiErrorMessage(error, fallbackMessage = "", defaultMessage = "Request failed.")`
316
- Local functions
317
- - `normalizeErrorStatus(error)`
318
- - `isGenericTransportMessage(error)`
319
307
 
320
308
  ### `src/client/composables/support/listQueryParamSupport.js`
321
309
  Exports
@@ -373,15 +361,8 @@ Exports
373
361
  - `mergeQueryMeta(queryOptions = null, meta = {})`
374
362
  - `mergeRequestRecoveryQueryMeta(queryOptions = null, requestRecovery = null, defaults = {})`
375
363
  Local functions
376
- - `normalizeText(value = "")`
377
- - `firstNormalizedText(...values)`
378
- - `firstNonNegativeFiniteNumber(...values)`
379
- - `normalizePlainObject(value = null)`
380
364
  - `normalizeRequestRecoveryInput(requestRecovery = null)`
381
- - `normalizeRequestRecoveryMethod(value = "")`
382
- - `isRequestRecoveryMetaDisabled(sourceJskitMeta = {})`
383
- - `hasUsableMetaValue(source = {}, key = "")`
384
- - `resolveRequestRecoveryDefaults(queryOptions = null, defaults = {})`
365
+ - `normalizeRequestRecoveryValue(name, value)`
385
366
 
386
367
  ### `src/client/composables/support/routeTemplateHelpers.js`
387
368
  Exports
@@ -393,6 +374,7 @@ Exports
393
374
  - `resolveScopedRoutePathname({ currentPathname = "/", params = {}, orderedParamNames = [], anchorParamName = "", anchorParamValue = "", anchorMode = "at" } = {})`
394
375
  - `resolveRouteTemplatePath(routeTemplate = "", params = {})`
395
376
  - `resolveRouteTemplateLocation(routeTemplate = "", { params = {}, currentPathname = "/" } = {})`
377
+ - `createRouteTemplateResolver({ recordIdParam, routeParams = null, routeParamNames = null, routePath = "", routeRecordId = null, anchorMode = "at", anchorOnTargetRecord = false, fillRecordId = true } = {})`
396
378
  - `extractRouteParamNames(pathTemplate = "")`
397
379
  - `resolveRouteParamNamesInOrder(route = null)`
398
380
  Local functions
@@ -421,7 +403,7 @@ Exports
421
403
 
422
404
  ### `src/client/composables/useAccess.js`
423
405
  Exports
424
- - `useAccess({ scopeParamValue = "", enabled = true, access = "always", hasPermissionRequirements = false } = {})`
406
+ - `useAccess({ enabled = true, access = "always", hasPermissionRequirements = false } = {})`
425
407
  Local functions
426
408
  - `asPermissionList(value)`
427
409
 
@@ -447,13 +429,10 @@ Local functions
447
429
  ### `src/client/composables/useCrudListBulkActions.js`
448
430
  Exports
449
431
  - `useCrudListBulkActions(actions = [], { resolveRecordId = null, resolveContext = null } = {})`
450
- Local functions
451
- - `normalizeSelectedId(value = "")`
452
- - `resolveActionKey(actionOrKey = "")`
453
432
 
454
433
  ### `src/client/composables/useCrudListFilterLookups.js`
455
434
  Exports
456
- - `useCrudListFilterLookups(definitions = {}, { values = {}, adapter = null, recordIdParam = "recordId", queryKeyPrefix = [], placementSourcePrefix = "", requestQueryParams = {}, labelResolvers = {} } = {})`
435
+ - `useCrudListFilterLookups(definitions = {}, { values = {}, recordIdParam = "recordId", queryKeyPrefix = [], placementSourcePrefix = "", requestQueryParams = {}, labelResolvers = {} } = {})`
457
436
 
458
437
  ### `src/client/composables/useCrudListFilters.js`
459
438
  Exports
@@ -474,7 +453,7 @@ Local functions
474
453
 
475
454
  ### `src/client/composables/useCrudListParentTitle.js`
476
455
  Exports
477
- - `useCrudListParentTitle({ listRuntime = null, resource = {}, adapter = null, recordIdParam = "recordId", queryKeyPrefix = ["http-web", "crud-list-parent-title"], placementSource = "http-web.crud-list-parent-title", fallbackLoadError = "Unable to load parent record.", notFoundMessage = "Parent record not found.", route = null, viewRuntimeFactory = useView } = {})`
456
+ - `useCrudListParentTitle({ listRuntime = null, resource = {}, recordIdParam = "recordId", queryKeyPrefix = ["http-web", "crud-list-parent-title"], placementSource = "http-web.crud-list-parent-title", fallbackLoadError = "Unable to load parent record.", notFoundMessage = "Parent record not found.", route = null, viewRuntimeFactory = useView } = {})`
478
457
  Local functions
479
458
  - `normalizeQueryKeyPrefix(value = [])`
480
459
 
@@ -482,15 +461,12 @@ Local functions
482
461
  Exports
483
462
  - `useCrudListRowActions(actions = [], { resolveRecordId = null, resolveContext = null } = {})`
484
463
  Local functions
485
- - `normalizeRowActionKey(actionOrKey = "")`
486
- - `normalizeRowId(value = "")`
487
464
  - `createExecutionKey(actionKey = "", recordId = "", index = 0)`
488
- - `asContextObject(value = null)`
489
465
 
490
466
  ### `src/client/composables/useCrudListScreen.js`
491
467
  Exports
492
468
  - `__testables`
493
- - `useCrudListScreen({ adapter = null, client = null, resource = null, resourceNamespace = "resource", apiSuffix = "", recordIdParam = "recordId", recordIdSelector = null, titleFallbackFieldKey = "", viewUrlTemplate = "", editUrlTemplate = "", newUrlTemplate = "", recordChangedEvents = [], listFilters = {}, listBulkActions = [], listRowActions = [], syntheticRows = null, routeQueryBlacklist = Object.freeze(["include", "cursor", "limit"]), requestQueryParams = null, requestFieldsets = null, readEnabled = true, requestRecoveryLabel = "Records", fallbackLoadError = "Unable to load records." } = {})`
469
+ - `useCrudListScreen({ client = null, resource = null, resourceNamespace = "resource", apiSuffix = "", recordIdParam = "recordId", recordIdSelector = null, titleFallbackFieldKey = "", viewUrlTemplate = "", editUrlTemplate = "", newUrlTemplate = "", recordChangedEvents = [], listFilters = {}, listBulkActions = [], listRowActions = [], syntheticRows = null, routeQueryBlacklist = Object.freeze(["include", "cursor", "limit"]), requestQueryParams = null, requestFieldsets = null, readEnabled = true, requestRecoveryLabel = "Records", fallbackLoadError = "Unable to load records." } = {})`
494
470
  Local functions
495
471
  - `buildCrudListActionContext(records, client)`
496
472
  - `formatCrudListCardValue(value)`
@@ -503,7 +479,7 @@ Local functions
503
479
 
504
480
  ### `src/client/composables/useCrudViewScreen.js`
505
481
  Exports
506
- - `useCrudViewScreen({ adapter = null, resource = null, resourceNamespace = "resource", apiUrlTemplate = "", recordIdParam = "recordId", titleFallbackFieldKey = "", listUrlTemplate = "", editUrlTemplate = "", recordChangedEvent = "", requestQueryParams = null, requestFieldsets = null, readEnabled = true, queryKeyFactory = null, requestRecoveryLabel = "Record", fallbackLoadError = "Unable to load record.", notFoundMessage = "Record not found." } = {})`
482
+ - `useCrudViewScreen({ resource = null, resourceNamespace = "resource", apiUrlTemplate = "", recordIdParam = "recordId", titleFallbackFieldKey = "", listUrlTemplate = "", editUrlTemplate = "", recordChangedEvent = "", requestQueryParams = null, requestFieldsets = null, readEnabled = true, queryKeyFactory = null, requestRecoveryLabel = "Record", fallbackLoadError = "Unable to load record.", notFoundMessage = "Record not found." } = {})`
507
483
 
508
484
  ### `src/client/composables/usePagedCollection.js`
509
485
  Exports
@@ -522,12 +498,11 @@ Exports
522
498
  Local functions
523
499
  - `normalizeRealtimeOptions(value = {})`
524
500
  - `hasRealtimeEventConfig(value = {})`
525
- - `resolveEnabled(value)`
526
501
  - `toQueryKeyList(value)`
527
502
 
528
503
  ### `src/client/composables/useScopeRuntime.js`
529
504
  Exports
530
- - `useScopeRuntime({ ownershipFilter = ROUTE_VISIBILITY_WORKSPACE, surfaceId = "", accessMode = "auto", hasPermissionRequirements = false, placementSource = "http-web.scope-runtime" } = {})`
505
+ - `useScopeRuntime({ ownershipFilter = ROUTE_VISIBILITY_WORKSPACE, surfaceId = "", accessMode = "auto", hasPermissionRequirements = false } = {})`
531
506
  Local functions
532
507
  - `resolveScopedRouteParamNames(placementContext = null, surfaceId = "")`
533
508
 
@@ -593,8 +568,6 @@ Local functions
593
568
  ### `src/client/rowActions.js`
594
569
  Exports
595
570
  - `defineCrudListRowActions(actions = [])`
596
- Local functions
597
- - `normalizeCrudListRowAction(rawAction = {}, index = 0)`
598
571
 
599
572
  ### `src/client/support/contractGuards.js`
600
573
  Exports
@@ -602,6 +575,13 @@ Exports
602
575
  - `requireBoolean(value, label = "value", owner = "Contract")`
603
576
  - `requireFunction(value, label = "value", owner = "Contract")`
604
577
 
578
+ ### `src/client/support/crudListActionSupport.js`
579
+ Exports
580
+ - `defineCrudListActions(actions, { name, createAction })`
581
+ - `normalizeListActionKey(actionOrKey = "")`
582
+ - `resolveListRecordId(record = {}, index = 0, resolveRecordId = null)`
583
+ - `resolveListActionBaseContext(resolveContext = null)`
584
+
605
585
  ### `src/client/support/crudListDateFilterSupport.js`
606
586
  Exports
607
587
  - `parseDateOnlyValue(value = "")`
@@ -8,7 +8,7 @@ Use this on demand; do not load the full index at startup.
8
8
 
9
9
  ## Scope
10
10
  - Source: `packages/json-rest-api-core/**/*{.js,.mjs,.cjs,.vue}`
11
- - Excludes: `test/`, `tests/`, `__tests__/`, `*.test.*`, `*.spec.*`, `*.vitest.*`, `node_modules/`, `dist/`, `coverage/`, `docs/`, `.vitepress/cache/`, `.vitepress/dist/`
11
+ - Excludes: `.build/`, `.git/`, `.jscpd/`, `.jskit/`, `coverage/`, `dist/`, `docs/`, `node_modules/`, `test/`, `tests/`, `__tests__/`, `.vitepress/cache/`, `.vitepress/dist/`, `skills/jskit/references/patterns/`, `*.test.*`, `*.spec.*`, `*.vitest.*`
12
12
 
13
13
  ## Sections
14
14