@jskit-ai/agent-docs 0.1.283 → 0.1.284

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 (151) hide show
  1. package/guide/agent/app-extras/assistant.md +14 -2
  2. package/guide/agent/app-extras/realtime.md +38 -1
  3. package/guide/agent/app-setup/authentication.md +64 -14
  4. package/guide/agent/app-setup/console.md +8 -0
  5. package/guide/agent/app-setup/database-layer.md +23 -103
  6. package/guide/agent/app-setup/existing-application-migration.md +105 -72
  7. package/guide/agent/app-setup/multi-homing.md +94 -32
  8. package/guide/agent/app-setup/quickstart.md +1 -1
  9. package/guide/agent/app-setup/run-an-accounts-hub.md +1 -1
  10. package/guide/agent/app-setup/upgrading-jskit.md +8 -3
  11. package/guide/agent/app-setup/users.md +8 -5
  12. package/guide/agent/framework/application-operations.md +1 -1
  13. package/guide/agent/framework/crud-operations.md +63 -45
  14. package/guide/agent/framework/data-access.md +1031 -0
  15. package/guide/agent/framework/sanity-checks.md +26 -27
  16. package/guide/agent/framework/typed-features.md +114 -247
  17. package/guide/agent/index.md +2 -0
  18. package/package.json +6 -3
  19. package/patterns/feature-package/PATTERN.md +25 -17
  20. package/patterns/feature-package/example/booking-engine/package.json +1 -1
  21. package/patterns/feature-package/example/variations/InvoiceRollupFeature.js +6 -7
  22. package/patterns/feature-package/example/variations/invoiceResource.js +15 -0
  23. package/patterns/feature-package/example/variations/invoiceRollupActions.js +4 -4
  24. package/patterns/feature-package/example/variations/ownedTableRepository.js +27 -0
  25. package/patterns/feature-package/example/variations/types.js +1 -1
  26. package/patterns/minimal-foundation/example/AGENTS.md +4 -0
  27. package/patterns/minimal-foundation/example/package.json +4 -4
  28. package/patterns/minimal-foundation/example/server.js +4 -1
  29. package/patterns/shell-foundation/example/AGENTS.md +4 -0
  30. package/patterns/shell-foundation/example/package.json +5 -5
  31. package/patterns/shell-foundation/example/packages/main/package.json +1 -1
  32. package/patterns/shell-foundation/example/server.js +4 -1
  33. package/reference/autogen/KERNEL_MAP.md +2 -1
  34. package/reference/autogen/PATTERN_INDEX.md +70 -59
  35. package/reference/autogen/README.md +1 -1
  36. package/reference/autogen/packages/agent-docs.md +7 -3
  37. package/reference/autogen/packages/agent-runtime.md +48 -11
  38. package/reference/autogen/packages/architecture-inspector.md +6 -2
  39. package/reference/autogen/packages/assistant-core.md +4 -4
  40. package/reference/autogen/packages/assistant-runtime.md +33 -13
  41. package/reference/autogen/packages/auth-provider-local-core.md +3 -1
  42. package/reference/autogen/packages/auth-provider-local-db-core.md +65 -14
  43. package/reference/autogen/packages/auth-provider-oidc-core.md +5 -1
  44. package/reference/autogen/packages/auth-provider-supabase-core.md +1 -1
  45. package/reference/autogen/packages/connectors-core.md +22 -2
  46. package/reference/autogen/packages/console-core.md +9 -5
  47. package/reference/autogen/packages/crud-core.md +38 -173
  48. package/reference/autogen/packages/database-runtime.md +8 -32
  49. package/reference/autogen/packages/http-runtime.md +3 -3
  50. package/reference/autogen/packages/http-web.md +12 -0
  51. package/reference/autogen/packages/kernel.md +25 -2
  52. package/reference/autogen/packages/oidc-issuer-core.md +4 -0
  53. package/reference/autogen/packages/payments-core.md +29 -6
  54. package/reference/autogen/packages/realtime.md +15 -6
  55. package/reference/autogen/packages/resource-core.md +30 -5
  56. package/reference/autogen/packages/resource-crud-core.md +30 -34
  57. package/reference/autogen/packages/resource-runtime.md +198 -0
  58. package/reference/autogen/packages/rewarded-core.md +16 -10
  59. package/reference/autogen/packages/shell-web.md +1 -0
  60. package/reference/autogen/packages/users-core.md +26 -14
  61. package/reference/autogen/packages/workspaces-core.md +17 -10
  62. package/reference/autogen/tooling/config-eslint.md +69 -0
  63. package/reference/autogen/tooling/jskit-catalog.md +36 -1
  64. package/reference/autogen/tooling/jskit-release.md +3 -0
  65. package/skills/jskit/SKILL.md +4 -1
  66. package/skills/jskit/references/app-operations.md +1 -1
  67. package/skills/jskit/references/crud-operations.md +62 -44
  68. package/skills/jskit/references/data-access.md +1026 -0
  69. package/skills/jskit/references/database-layer.md +411 -0
  70. package/skills/jskit/references/existing-application-migration.md +105 -72
  71. package/skills/jskit/references/heuristics/INDEX.md +6 -4
  72. package/skills/jskit/references/heuristics/crud-authoring.md +22 -14
  73. package/skills/jskit/references/heuristics/data-access.md +19 -0
  74. package/skills/jskit/references/heuristics/filters.md +6 -6
  75. package/skills/jskit/references/heuristics/row-policies.md +40 -16
  76. package/skills/jskit/references/heuristics/server-search.md +30 -42
  77. package/skills/jskit/references/heuristics/table-resource-fields.md +78 -0
  78. package/skills/jskit/references/heuristics/typed-features.md +3 -3
  79. package/skills/jskit/references/multi-homing.md +94 -32
  80. package/skills/jskit/references/pattern-index.md +70 -59
  81. package/skills/jskit/references/patterns/app/minimal-foundation/example/AGENTS.md +4 -0
  82. package/skills/jskit/references/patterns/app/minimal-foundation/example/package.json +4 -4
  83. package/skills/jskit/references/patterns/app/minimal-foundation/example/server.js +4 -1
  84. package/skills/jskit/references/patterns/app/shell-foundation/example/AGENTS.md +4 -0
  85. package/skills/jskit/references/patterns/app/shell-foundation/example/package.json +5 -5
  86. package/skills/jskit/references/patterns/app/shell-foundation/example/packages/main/package.json +1 -1
  87. package/skills/jskit/references/patterns/app/shell-foundation/example/server.js +4 -1
  88. package/skills/jskit/references/patterns/assistant/assistant-surface/PATTERN.md +5 -2
  89. package/skills/jskit/references/patterns/auth/accounts-hub/example/package.json +3 -2
  90. package/skills/jskit/references/patterns/auth/auth-surface/PATTERN.md +15 -0
  91. package/skills/jskit/references/patterns/auth/oidc-sign-in/example/package.json +2 -2
  92. package/skills/jskit/references/patterns/auth/supabase-auth/example/package.json +1 -1
  93. package/skills/jskit/references/patterns/connectors/calendar-cli/example/package.json +4 -4
  94. package/skills/jskit/references/patterns/crud/crud-contract/PATTERN.md +133 -0
  95. package/skills/jskit/references/patterns/crud/crud-contract/example/bookResource.js +74 -0
  96. package/skills/jskit/references/patterns/crud/{json-api-resource-package → crud-feature-package}/PATTERN.md +69 -37
  97. package/skills/jskit/references/patterns/crud/{json-api-resource-package → crud-feature-package}/example/packages/books/package.json +5 -4
  98. package/skills/jskit/references/patterns/crud/crud-feature-package/example/packages/books/src/server/BooksFeature.js +13 -0
  99. package/skills/jskit/references/patterns/crud/crud-feature-package/example/packages/books/src/shared/bookResource.js +74 -0
  100. package/skills/jskit/references/patterns/crud/crud-feature-package/example/packages/books/src/shared/index.js +1 -0
  101. package/skills/jskit/references/patterns/crud/crud-screen-set/PATTERN.md +26 -8
  102. package/skills/jskit/references/patterns/crud/crud-screen-set/example/books/BookEditPage.vue +2 -2
  103. package/skills/jskit/references/patterns/crud/crud-screen-set/example/books/BookListPage.vue +2 -2
  104. package/skills/jskit/references/patterns/crud/crud-screen-set/example/books/BookNewPage.vue +2 -2
  105. package/skills/jskit/references/patterns/crud/crud-screen-set/example/books/BookViewPage.vue +3 -3
  106. package/skills/jskit/references/patterns/database/mysql-application/PATTERN.md +9 -4
  107. package/skills/jskit/references/patterns/database/mysql-application/example/package.json +2 -1
  108. package/skills/jskit/references/patterns/database/mysql-application/example/scripts/prepare-database.js +8 -0
  109. package/skills/jskit/references/patterns/database/postgres-application/PATTERN.md +8 -4
  110. package/skills/jskit/references/patterns/database/postgres-application/example/package.json +2 -1
  111. package/skills/jskit/references/patterns/database/postgres-application/example/scripts/prepare-database.js +8 -0
  112. package/skills/jskit/references/patterns/database/table-resource/PATTERN.md +117 -0
  113. package/skills/jskit/references/patterns/database/table-resource/example/orderResource.js +25 -0
  114. package/skills/jskit/references/patterns/realtime/realtime-application/PATTERN.md +7 -0
  115. package/skills/jskit/references/patterns/realtime/realtime-application/example/package.json +2 -2
  116. package/skills/jskit/references/patterns/rewards/google-rewarded/PATTERN.md +1 -1
  117. package/skills/jskit/references/patterns/server/feature-package/PATTERN.md +25 -17
  118. package/skills/jskit/references/patterns/server/feature-package/example/booking-engine/package.json +1 -1
  119. package/skills/jskit/references/patterns/server/feature-package/example/variations/InvoiceRollupFeature.js +6 -7
  120. package/skills/jskit/references/patterns/server/feature-package/example/variations/invoiceResource.js +15 -0
  121. package/skills/jskit/references/patterns/server/feature-package/example/variations/invoiceRollupActions.js +4 -4
  122. package/skills/jskit/references/patterns/server/feature-package/example/variations/ownedTableRepository.js +27 -0
  123. package/skills/jskit/references/patterns/server/feature-package/example/variations/types.js +1 -1
  124. package/skills/jskit/references/patterns/users/user-administration-server/PATTERN.md +59 -10
  125. package/skills/jskit/references/patterns/users/user-administration-server/example/packages/users/package.json +5 -4
  126. package/skills/jskit/references/patterns/users/user-administration-server/example/packages/users/src/server/UsersFeature.js +7 -5
  127. package/skills/jskit/references/patterns/users/user-administration-server/example/packages/users/src/shared/index.js +1 -1
  128. package/skills/jskit/references/patterns/users/user-administration-server/example/packages/users/src/shared/userCrud.js +21 -0
  129. package/skills/jskit/references/patterns/users/user-administration-server/example/packages/users-workspace/package.json +11 -5
  130. package/skills/jskit/references/patterns/users/user-administration-server/example/packages/users-workspace/src/server/UsersWorkspaceFeature.js +14 -5
  131. package/skills/jskit/references/patterns/users/user-administration-server/example/packages/users-workspace/src/server/workspaceMembersOnly.js +52 -0
  132. package/skills/jskit/references/patterns/users/user-administration-server/example/packages/users-workspace/src/shared/index.js +1 -1
  133. package/skills/jskit/references/patterns/users/user-administration-server/example/packages/users-workspace/src/shared/userCrud.js +21 -0
  134. package/skills/jskit/references/patterns/workspaces/workspace-server/PATTERN.md +9 -9
  135. package/skills/jskit/references/patterns/workspaces/workspace-surfaces/PATTERN.md +16 -0
  136. package/skills/jskit/references/patterns/workspaces/workspace-surfaces/example/src/pages/home/workspaces/index.vue +2 -0
  137. package/skills/jskit/references/sanity-checks.md +27 -28
  138. package/skills/jskit/references/typed-features.md +114 -247
  139. package/patterns/feature-package/example/variations/customKnexRepository.js +0 -40
  140. package/reference/autogen/packages/json-rest-api-core.md +0 -66
  141. package/skills/jskit/references/heuristics/crud-repository-mapping.md +0 -140
  142. package/skills/jskit/references/patterns/crud/json-api-resource-package/example/packages/books/src/server/BooksFeature.js +0 -13
  143. package/skills/jskit/references/patterns/crud/json-api-resource-package/example/packages/books/src/shared/bookResource.js +0 -83
  144. package/skills/jskit/references/patterns/crud/json-api-resource-package/example/packages/books/src/shared/index.js +0 -1
  145. package/skills/jskit/references/patterns/crud/resource-contract/PATTERN.md +0 -155
  146. package/skills/jskit/references/patterns/crud/resource-contract/example/bookResource.js +0 -87
  147. package/skills/jskit/references/patterns/server/feature-package/example/variations/customKnexRepository.js +0 -40
  148. package/skills/jskit/references/patterns/users/user-administration-server/example/packages/users/src/shared/userResource.js +0 -69
  149. package/skills/jskit/references/patterns/users/user-administration-server/example/packages/users-workspace/src/shared/userResource.js +0 -56
  150. /package/skills/jskit/references/patterns/crud/{json-api-resource-package → crud-feature-package}/example/migrations/20260815000000_books.cjs +0 -0
  151. /package/skills/jskit/references/patterns/crud/{json-api-resource-package → crud-feature-package}/example/packages/books/src/server/types.js +0 -0
@@ -0,0 +1,198 @@
1
+ # packages/resource-runtime
2
+
3
+ Generated by `npm run agent-docs:build`.
4
+ Do not edit manually.
5
+
6
+ Generated inventory for `packages/resource-runtime`.
7
+ Use this on demand; do not load the full index at startup.
8
+
9
+ ## Scope
10
+ - Source: `packages/resource-runtime/**/*{.js,.mjs,.cjs,.vue}`
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
+
13
+ ## Sections
14
+
15
+ ### src
16
+
17
+ ### `src/server/contexts.js`
18
+ Exports
19
+ - `callerOf(context)`
20
+ - `createJsonRestContext(context = null)`
21
+ - `createSystemContext({ feature, systemScope, reason })`
22
+ - `isJobContext(context)`
23
+ - `isSystemContext`
24
+ Local functions
25
+ - `eventScopeOf({ workspaceId, userId })`
26
+ - `jobContext(reason, scopeValues, options, label)`
27
+ - `requireScopeId(value, label, subject)`
28
+
29
+ ### `src/server/errors.js`
30
+ Exports
31
+ - `DuplicateOwnerError`
32
+ - `MissingScopeError`
33
+ - `PageSizeError`
34
+ - `RowLimitError`
35
+ - `StaleRecordError`
36
+ - `UnpagedQueryError`
37
+
38
+ ### `src/server/handleGuards.js`
39
+ Exports
40
+ - `formatOf(name, options)`
41
+ - `matchesNoRow(filters, schemaInfo)`
42
+ - `missingOf(name, caller, missing = "throw")`
43
+ - `refuseConditions(name, method, options, keys, instead)`
44
+ - `requireConditionValues(name, method, options, keys)`
45
+ - `requireDefinedFilters(name, caller, filters, path = "filters")`
46
+ - `requireOwners(name, ownership, context)`
47
+ - `requirePatchConditions(name, lockVersionField, attributes, options)`
48
+ - `requireReadParams(name, params)`
49
+ - `requireUpsertRows(name, rows, onConflict, idProperty)`
50
+ - `passedOn`
51
+ - `whereSelection(name, operation, filters, options)`
52
+
53
+ ### `src/server/handleHidden.js`
54
+ Exports
55
+ - `createHiddenFieldReads({ resource, scopedQuery, column })`
56
+ - `markHandleFunctions({ scopedQuery, withTransaction, lockOrCreate })`
57
+ - `withoutHiddenFields(repository, resources)`
58
+ Local functions
59
+ - `namedHiddenFields(resource, fields)`
60
+ - `storedValue(value, { type, precision, scale })`
61
+ - `isKnexValue(value)`
62
+ - `isPlainRecord(value)`
63
+ - `withoutHiddenValues(value, hidden, seen = new WeakMap())`
64
+ - `guardedRepository(repository, resource, hidden, guarded)`
65
+ - `guardedFunction(repository, key, call, resource, hidden)`
66
+
67
+ ### `src/server/handleLocks.js`
68
+ Exports
69
+ - `createLockReads({ name, resource, jsonRest, readFields, contextOf, hiddenFields })`
70
+
71
+ ### `src/server/handleRecords.js`
72
+ Exports
73
+ - `aggregateMeasures(measures)`
74
+ - `MANY_RETURNING`
75
+ - `SINGLE_RETURNING`
76
+ - `handleRecords(resource, records, { include, fields } = {}, resourceNamed)`
77
+ - `handleResult(resource, result, format, { include, fields } = {}, resourceNamed)`
78
+ - `idOf(result, format)`
79
+ - `inputData(resource, attributes, stamp, context)`
80
+ - `manyResult(resource, result, returning)`
81
+ - `namedFields(resource, fields)`
82
+ - `noRowsAggregate(measures, groupBy)`
83
+ - `patchAnswer(id, record, returning)`
84
+ - `upsertConflict(resource, rows, onConflict, context, ownershipFields)`
85
+ - `pickReturning(modes, value, fallback, label)`
86
+ - `quietCollections(resource, flag)`
87
+ - `readQueryParams(resource, params, { page, caller })`
88
+ - `requestedFields(params, quiet, schemaInfo)`
89
+ - `sparseFieldset(resource, fields)`
90
+ - `textList(value)`
91
+ Local functions
92
+ - `setsOwnTimestamps(context)`
93
+ - `atPrecision(field, value)`
94
+ - `stampedAttributes(resource, attributes, stamp, context)`
95
+ - `includedRelationships(include)`
96
+ - `handleRecord(resource, record, included, named, resourceNamed)`
97
+
98
+ ### `src/server/index.js`
99
+ Exports
100
+ - `ResourceRuntimeProvider`
101
+ - `DEFAULT_REQUEST_ROW_LIMIT`
102
+ - `DEFAULT_SERVER_PAGE_SIZE`
103
+ - `buildJsonRestQueryParams`
104
+ - `resolveUserScopeValue`
105
+ - `resolveWorkspaceScopeValue`
106
+ - `createStandaloneResources`
107
+ - `isSystemContext`
108
+ - `withoutHiddenFields`
109
+ - `passedOn`
110
+ - `DuplicateOwnerError`
111
+ - `MissingScopeError`
112
+ - `PageSizeError`
113
+ - `RowLimitError`
114
+ - `StaleRecordError`
115
+ - `UnpagedQueryError`
116
+
117
+ ### `src/server/jsonRestValues.js`
118
+ Exports
119
+ - `isPlainJsonRestObject(value)`
120
+ - `resolveJsonRestCollectionRelationships(resource)`
121
+
122
+ ### `src/server/lockOrCreate.js`
123
+ Exports
124
+ - `findOrCreateRecord({ get, create }, attributes, options)`
125
+ - `lockOrCreate(handle, row, options, work)`
126
+
127
+ ### `src/server/rawExpression.js`
128
+ Exports
129
+ - `valueOnlyRaw(label, knex, args)`
130
+ Local functions
131
+ - `valueOnly(label, expression)`
132
+
133
+ ### `src/server/resourceHandle.js`
134
+ Exports
135
+ - `MANY_ROW_CHANNEL`
136
+ - `createResourceHandle({ api, resource, hooks, settings, resourceNamed })`
137
+ Local functions
138
+ - `reportManyRow(resource, operation, rows, chunkSize)`
139
+ - `requireHandleTransaction(name, options)`
140
+ - `openTransaction(api, options, work)`
141
+ - `formatSetting(options)`
142
+ - `inTransaction(options)`
143
+ - `write(options, run)`
144
+
145
+ ### `src/server/resourceHost.js`
146
+ Exports
147
+ - `JSON_REST_AUTOFILTER_PRESETS`
148
+ - `buildJsonRestQueryParams(resourceType = "", query = {}, { include = undefined } = {})`
149
+ - `createJsonRestContext`
150
+ - `createResourceHost({ knex, logger })`
151
+ - `resourceScopeOptions(resource, { writeSerializers = {}, normalizeId, rowPolicy, searchSchema, queryFields } = {})`
152
+ - `returnNullWhenJsonRestResourceMissing(run)`
153
+ - `returnBadRequestWhenJsonRestFieldsetInvalid(run)`
154
+ - `resolveWorkspaceScopeValue(context = null)`
155
+ - `resolveUserScopeValue(context = null)`
156
+ Local functions
157
+ - `cloneJsonRestResourceValue(value, { writeSerializers = {} } = {})`
158
+ - `normalizeScopeValue(value)`
159
+ - `normalizeJsonRestFilterValue(value)`
160
+ - `normalizeJsonRestList(value)`
161
+ - `normalizeJsonRestQueryField(fieldName = "", fieldDefinition = {}, projectionDefinition = null)`
162
+ - `queryFieldSelect(fieldName, select)`
163
+ - `isJsonRestVirtualField(fieldDefinition = null)`
164
+ - `applyJsonRestQueryFields(scopeOptions = {}, extraQueryFields = {})`
165
+ - `resolveJsonRestDefaultExcludedFields(resource)`
166
+ - `applyJsonRestDefaultExclusions(scopeOptions = {}, resource = {})`
167
+ - `primaryField(scopeOptions)`
168
+ - `workspaceScopeOwnerId(visibilityContext)`
169
+ - `isJsonRestResourceMissingError(error = null)`
170
+ - `isJsonRestSparseFieldError(error = null)`
171
+
172
+ ### `src/server/resourceRuntime.js`
173
+ Exports
174
+ - `DEFAULT_REQUEST_ROW_LIMIT`
175
+ - `DEFAULT_SERVER_PAGE_SIZE`
176
+ - `createResourceRuntime({ api, requestRowLimit = DEFAULT_REQUEST_ROW_LIMIT, serverPageSize = DEFAULT_SERVER_PAGE_SIZE })`
177
+ Local functions
178
+ - `ownedEntry(entry, featureId)`
179
+ - `crossTableFilters(scopeOptions)`
180
+ - `applyGrouped(policy, args)`
181
+
182
+ ### `src/server/ResourceRuntimeProvider.js`
183
+ Exports
184
+ - `ResourceRuntimeProvider`
185
+
186
+ ### `src/server/standaloneResources.js`
187
+ Exports
188
+ - `createStandaloneResources({ knex, feature, owns, systemScope, logger = silentLogger })`
189
+ - `registerServerRuntime(knex, runtime)`
190
+
191
+ ### `src/server/types.js`
192
+ Exports
193
+ - `type RuntimeJsonRestApi`
194
+ - `type JsonRestResource`
195
+ - `type ResourceRuntime`
196
+ - `type ResourceHandle`
197
+ - `type ResourceCallOptions`
198
+ - `type SystemContext`
@@ -60,8 +60,6 @@ Exports
60
60
  - `type CrudRepository`
61
61
  - `type RewardedRepositoryOptions`
62
62
  Local functions
63
- - `normalizeRecordList(document)`
64
- - `normalizeRecord(document)`
65
63
  - `normalizeKeyword(value, fallback)`
66
64
  - `toIsoOrNull(value)`
67
65
  - `parseDate(value)`
@@ -98,26 +96,34 @@ Exports
98
96
 
99
97
  ### `src/shared/index.js`
100
98
  Exports
101
- - `rewardedRuleResource`
102
- - `rewardedProviderConfigResource`
103
- - `rewardedWatchSessionResource`
104
- - `rewardedUnlockReceiptResource`
99
+ - `rewardedRuleCrud`
100
+ - `rewardedRuleTableResource`
101
+ - `rewardedProviderConfigCrud`
102
+ - `rewardedProviderConfigTableResource`
103
+ - `rewardedWatchSessionCrud`
104
+ - `rewardedWatchSessionTableResource`
105
+ - `rewardedUnlockReceiptCrud`
106
+ - `rewardedUnlockReceiptTableResource`
105
107
 
106
108
  ### `src/shared/rewardedProviderConfigResource.js`
107
109
  Exports
108
- - `resource`
110
+ - `rewardedProviderConfigCrud`
111
+ - `rewardedProviderConfigTableResource`
109
112
 
110
113
  ### `src/shared/rewardedRuleResource.js`
111
114
  Exports
112
- - `resource`
115
+ - `rewardedRuleCrud`
116
+ - `rewardedRuleTableResource`
113
117
 
114
118
  ### `src/shared/rewardedUnlockReceiptResource.js`
115
119
  Exports
116
- - `resource`
120
+ - `rewardedUnlockReceiptCrud`
121
+ - `rewardedUnlockReceiptTableResource`
117
122
 
118
123
  ### `src/shared/rewardedWatchSessionResource.js`
119
124
  Exports
120
- - `resource`
125
+ - `rewardedWatchSessionCrud`
126
+ - `rewardedWatchSessionTableResource`
121
127
 
122
128
  ### migrations
123
129
 
@@ -591,6 +591,7 @@ Exports
591
591
  Local functions
592
592
  - `clampNumber(value, minimum, maximum)`
593
593
  - `measureRenderedText(element)`
594
+ - `measureDrawerIdentity(identityElement, drawerRect, rightToLeft, endBorderWidth)`
594
595
 
595
596
  ### `src/client/support/gestureTargets.js`
596
597
  Exports
@@ -96,7 +96,7 @@ Local functions
96
96
 
97
97
  ### `src/server/common/repositories/userProfilesRepository.js`
98
98
  Exports
99
- - `createRepository({ api })`
99
+ - `createRepository({ userProfiles, userSettings })`
100
100
  Local functions
101
101
  - `normalizeProfileRecord(payload = null)`
102
102
  - `normalizeCreatePayload(payload = {})`
@@ -104,12 +104,14 @@ Local functions
104
104
  - `buildUsernameCandidate(baseUsername, suffix)`
105
105
  - `duplicateTargetsEmail(error)`
106
106
  - `duplicateTargetsUsername(error)`
107
+ - `buildDuplicateUsernameConflictError(cause = undefined)`
108
+ - `requireNewProfile(profileLike, context)`
107
109
  - `buildDuplicateEmailConflictError(cause)`
108
- - `resolveUniqueUsername(api, baseUsername, { excludeUserId = null, transaction = null } = {})`
110
+ - `resolveUniqueUsername(userProfiles, baseUsername, excludeUserId, options)`
109
111
 
110
112
  ### `src/server/common/repositories/userSettingsRepository.js`
111
113
  Exports
112
- - `createRepository({ api })`
114
+ - `createRepository({ userSettings })`
113
115
  Local functions
114
116
  - `pickPatchFields(source = {})`
115
117
  - `buildDefaultUserSettingsCreatePayload(userId)`
@@ -150,7 +152,9 @@ Exports
150
152
  Exports
151
153
  - `type UsersCore`
152
154
  - `type UsersExtensions`
153
- - `type UsersIdentity`
155
+ - `type UsersResources`
156
+ - `type UsersProfiles`
157
+ - `type UsersSettings`
154
158
  - `type UserProfilesRepository`
155
159
  - `type UserSettingsRepository`
156
160
  - `type ResolveProfileSyncLifecycleContributors`
@@ -184,7 +188,7 @@ Exports
184
188
 
185
189
  ### `src/server/usersIdentity.js`
186
190
  Exports
187
- - `createUsersIdentity({ jsonRestApi, extensions })`
191
+ - `createUsersIdentity({ resources, extensions })`
188
192
 
189
193
  ### `src/server/UsersIdentityProvider.js`
190
194
  Exports
@@ -192,7 +196,7 @@ Exports
192
196
 
193
197
  ### `src/server/usersRuntime.js`
194
198
  Exports
195
- - `createUsersRuntime({ authService, identity, storage })`
199
+ - `createUsersRuntime({ authService, profileProjector, profiles: userProfilesRepository, settings: userSettingsRepository, storage })`
196
200
 
197
201
  ### `src/shared/index.js`
198
202
  Exports
@@ -211,7 +215,9 @@ Exports
211
215
 
212
216
  ### `src/shared/resources/userProfileResource.js`
213
217
  Exports
214
- - `userProfileResource`
218
+ - `userProfileContract`
219
+ - `userProfileCrud`
220
+ - `userProfileTableResource`
215
221
 
216
222
  ### `src/shared/resources/userProfileValues.js`
217
223
  Exports
@@ -227,8 +233,10 @@ Exports
227
233
  - `USER_SETTINGS_NOTIFICATION_KEYS`
228
234
  - `USER_SETTINGS_PREFERENCE_KEYS`
229
235
  - `userSettingsOutputSchema`
236
+ - `userSettingsContract`
237
+ - `userSettingsCrud`
230
238
  - `userSettingsOutputValidator`
231
- - `userSettingsResource`
239
+ - `userSettingsTableResource`
232
240
  Local functions
233
241
  - `normalizePositiveInteger(value)`
234
242
 
@@ -266,13 +274,17 @@ Exports
266
274
  Exports
267
275
  - `UsersWorkspaceFeature`
268
276
 
277
+ ### `patterns/user-administration-server/example/packages/users-workspace/src/server/workspaceMembersOnly.js`
278
+ Exports
279
+ - `workspaceMembersOnly(repository, memberships)`
280
+
269
281
  ### `patterns/user-administration-server/example/packages/users-workspace/src/shared/index.js`
270
282
  Exports
271
- - `resource`
283
+ - `userCrud`
272
284
 
273
- ### `patterns/user-administration-server/example/packages/users-workspace/src/shared/userResource.js`
285
+ ### `patterns/user-administration-server/example/packages/users-workspace/src/shared/userCrud.js`
274
286
  Exports
275
- - `resource`
287
+ - `userCrud`
276
288
 
277
289
  ### `patterns/user-administration-server/example/packages/users/src/server/types.js`
278
290
  Exports
@@ -284,8 +296,8 @@ Exports
284
296
 
285
297
  ### `patterns/user-administration-server/example/packages/users/src/shared/index.js`
286
298
  Exports
287
- - `resource`
299
+ - `userCrud`
288
300
 
289
- ### `patterns/user-administration-server/example/packages/users/src/shared/userResource.js`
301
+ ### `patterns/user-administration-server/example/packages/users/src/shared/userCrud.js`
290
302
  Exports
291
- - `resource`
303
+ - `userCrud`
@@ -36,7 +36,7 @@ Exports
36
36
 
37
37
  ### `src/server/common/repositories/workspaceInvitesRepository.js`
38
38
  Exports
39
- - `createRepository({ api })`
39
+ - `createRepository({ workspaceInvites, workspaces })`
40
40
  - `normalizeInviteRecord(payload)`
41
41
  - `normalizeInviteWithWorkspace(payload = {})`
42
42
  Local functions
@@ -44,7 +44,7 @@ Local functions
44
44
 
45
45
  ### `src/server/common/repositories/workspaceMembershipsRepository.js`
46
46
  Exports
47
- - `createRepository({ api })`
47
+ - `createRepository({ workspaceMemberships })`
48
48
  - `normalizeMembershipRecord(payload)`
49
49
  - `normalizeMemberSummaryRow(row)`
50
50
  Local functions
@@ -52,9 +52,10 @@ Local functions
52
52
 
53
53
  ### `src/server/common/repositories/workspacesRepository.js`
54
54
  Exports
55
- - `createRepository({ api })`
55
+ - `createRepository({ workspaces, workspaceMemberships })`
56
56
  Local functions
57
57
  - `normalizeWorkspaceRecord(payload = null)`
58
+ - `byId(left, right)`
58
59
 
59
60
  ### `src/server/common/services/workspaceDirectoryService.js`
60
61
  Exports
@@ -66,7 +67,7 @@ Local functions
66
67
 
67
68
  ### `src/server/common/support/realtimeServiceEvents.js`
68
69
  Exports
69
- - `INVITE_RECIPIENT_BOOTSTRAP_AUDIENCE`
70
+ - `createInviteRecipientBootstrapAudience({ inviteRecipientUserIds })`
70
71
  - `createInviteDecisionEvents()`
71
72
  - `createWorkspaceEntityAndBootstrapEvents({ workspaceEntity, workspaceOperation, workspaceRealtimeEvent, bootstrapEntityId = workspaceId, bootstrapAudience = "event_scope" })`
72
73
  Local functions
@@ -129,10 +130,13 @@ Exports
129
130
  ### `src/server/types.js`
130
131
  Exports
131
132
  - `type WorkspacesCore`
133
+ - `type Workspaces`
134
+ - `type WorkspacesMemberships`
132
135
  - `type WorkspaceDirectoryService`
133
136
  - `type WorkspaceMembersService`
134
137
  - `type WorkspacePendingInvitationsService`
135
138
  - `type WorkspaceSettingsService`
139
+ - `type WorkspacesResources`
136
140
  - `type WorkspacesRepository`
137
141
  - `type WorkspaceMembershipsRepository`
138
142
  - `type WorkspaceInvitesRepository`
@@ -226,7 +230,7 @@ Exports
226
230
 
227
231
  ### `src/server/workspaceSettings/workspaceSettingsRepository.js`
228
232
  Exports
229
- - `createRepository({ api, defaultInvitesEnabled, defaultColorSettings })`
233
+ - `createRepository({ workspaceSettings, defaultInvitesEnabled, defaultColorSettings })`
230
234
  Local functions
231
235
  - `buildDefaultWorkspaceSettingsCreatePayload(workspaceId, defaultInvitesEnabled, defaultColorSettings)`
232
236
 
@@ -242,8 +246,8 @@ Exports
242
246
  Exports
243
247
  - `WorkspacesFeature`
244
248
  - `buildWorkspaceName`
249
+ - `createWorkspaceRecords`
245
250
  - `createWorkspacesRuntime`
246
- - `installWorkspaceResources`
247
251
  - `noInviteAcceptanceParticipant`
248
252
  - `renderDefaultWorkspaceInviteEmail`
249
253
  - `unconfiguredWorkspaceInviteMailer`
@@ -256,8 +260,9 @@ Local functions
256
260
 
257
261
  ### `src/server/workspacesRuntime.js`
258
262
  Exports
259
- - `createWorkspacesRuntime({ appRoot, config, env, inviteMailer, inviteEmailTemplate, inviteAcceptanceParticipant, personalWorkspaceName, jsonRestApi, users })`
260
- - `installWorkspaceResources(jsonRestApi)`
263
+ - `WORKSPACES_TABLES`
264
+ - `createWorkspaceRecords(resources)`
265
+ - `createWorkspacesRuntime({ appRoot, config, env, inviteMailer, inviteEmailTemplate, inviteAcceptanceParticipant, personalWorkspaceName, resources, userProfiles, userSettings, workspaces: workspacesRepository, workspaceMemberships: workspaceMembershipsRepository })`
261
266
  Local functions
262
267
  - `requirePositiveInteger(value, label)`
263
268
  - `requireBoolean(value, label)`
@@ -296,14 +301,15 @@ Exports
296
301
 
297
302
  ### `src/shared/resources/workspaceMembersResource.js`
298
303
  Exports
299
- - `workspaceMembersResource`
304
+ - `workspaceMembersContract`
300
305
 
301
306
  ### `src/shared/resources/workspacePendingInvitationsResource.js`
302
307
  Exports
303
- - `workspacePendingInvitationsResource`
308
+ - `workspacePendingInvitationsContract`
304
309
 
305
310
  ### `src/shared/resources/workspaceResource.js`
306
311
  Exports
312
+ - `workspaceCrud`
307
313
  - `workspaceResource`
308
314
  - `WORKSPACE_PATCH_FIELD_KEYS`
309
315
  - `workspaceListItemOutputValidator`
@@ -318,6 +324,7 @@ Exports
318
324
  ### `src/shared/resources/workspaceSettingsResource.js`
319
325
  Exports
320
326
  - `WORKSPACE_SETTINGS_FIELD_KEYS`
327
+ - `workspaceSettingsCrud`
321
328
  - `workspaceSettingsOutputSchema`
322
329
  - `workspaceSettingsResource`
323
330
  Local functions
@@ -39,6 +39,11 @@ Local functions
39
39
  - `clientFeaturesRules(severity)`
40
40
  - `componentRules(severity)`
41
41
 
42
+ ### `dataAccess.js`
43
+ Exports
44
+ - `dataAccessConfig(files, severity = "error")`
45
+ - `dataAccessRules(severity = "error")`
46
+
42
47
  ### `formatter.js`
43
48
  Exports
44
49
  - `formatterConfig(files, { ignores = [] } = {})`
@@ -52,6 +57,8 @@ Exports
52
57
  - `sizeLimitsConfig`
53
58
  - `typedFeaturesConfig`
54
59
  - `clientFeaturesConfig`
60
+ - `dataAccessConfig`
61
+ - `dataAccessRules`
55
62
  - `formatterConfig`
56
63
  - `jskitPlugin`
57
64
 
@@ -78,6 +85,17 @@ Exports
78
85
 
79
86
  ### plugin
80
87
 
88
+ ### `plugin/dataAccess.js`
89
+ Exports
90
+ - `INFRASTRUCTURE_HINT`
91
+ - `KNEX_NAMES`
92
+ - `calledMethod(node)`
93
+ - `isAssignmentTarget(node)`
94
+ - `isInfrastructureFile(context, ruleName)`
95
+ - `isText(node)`
96
+ - `lastName(node)`
97
+ - `literalText(node)`
98
+
81
99
  ### `plugin/factoryResults.js`
82
100
  Exports
83
101
  - `CREATE_NAME`
@@ -129,10 +147,15 @@ Local functions
129
147
  ### `plugin/rules/allowCommentForm.js`
130
148
  Exports
131
149
  - `allowCommentForm`
150
+ - `isInfrastructureExcuse(line, ruleName)`
151
+ - `reasonProblem(reason)`
132
152
  Local functions
153
+ - `disabledDataAccessRules(text)`
154
+ - `readAllow(text)`
133
155
  - `holdsFunction(node)`
134
156
  - `excusedNode(sourceCode, comment)`
135
157
  - `allowLines(comment, opening = 2)`
158
+ - `dataAccessProblem(rule, reason, inHeader)`
136
159
 
137
160
  ### `plugin/rules/appErrorCode.js`
138
161
  Exports
@@ -176,6 +199,15 @@ Exports
176
199
  Local functions
177
200
  - `startsItsLine(lines, comment)`
178
201
 
202
+ ### `plugin/rules/knexReason.js`
203
+ Exports
204
+ - `knexReason`
205
+ Local functions
206
+ - `exported(node)`
207
+ - `namedFunction(node)`
208
+ - `knexLines(sourceCode, site)`
209
+ - `reasonProblem(lines)`
210
+
179
211
  ### `plugin/rules/namedRepeatedType.js`
180
212
  Exports
181
213
  - `namedRepeatedType`
@@ -187,6 +219,18 @@ Local functions
187
219
  - `typeKey(text, file, imports)`
188
220
  - `commentTypes(text)`
189
221
 
222
+ ### `plugin/rules/noDirectKnex.js`
223
+ Exports
224
+ - `noDirectKnex`
225
+ Local functions
226
+ - `namesKnex(node)`
227
+ - `namesBuilder(node)`
228
+ - `isReference(node)`
229
+ - `isTableText(node)`
230
+ - `namesTable(callee, first)`
231
+ - `isOtherLibrary(method, object, args)`
232
+ - `joinsNamedTable(method, first)`
233
+
190
234
  ### `plugin/rules/noDualShape.js`
191
235
  Exports
192
236
  - `noDualShape`
@@ -224,6 +268,16 @@ Exports
224
268
  Local functions
225
269
  - `holdsVueState(sourceCode, value)`
226
270
 
271
+ ### `plugin/rules/noHandContext.js`
272
+ Exports
273
+ - `noHandContext`
274
+
275
+ ### `plugin/rules/noHandScope.js`
276
+ Exports
277
+ - `noHandScope`
278
+ Local functions
279
+ - `isWorkspaceColumn(node)`
280
+
227
281
  ### `plugin/rules/noIdempotency.js`
228
282
  Exports
229
283
  - `noIdempotency`
@@ -264,6 +318,13 @@ Exports
264
318
  Local functions
265
319
  - `exportedNames(node)`
266
320
 
321
+ ### `plugin/rules/noTransactionReader.js`
322
+ Exports
323
+ - `noTransactionReader`
324
+ Local functions
325
+ - `isKnexValue(node)`
326
+ - `isOptionsObject(node)`
327
+
267
328
  ### `plugin/rules/oneLineAction.js`
268
329
  Exports
269
330
  - `oneLineAction`
@@ -304,6 +365,13 @@ Exports
304
365
  Local functions
305
366
  - `positionalCollaboratorDefaults(fn, visitorKeys)`
306
367
 
368
+ ### `plugin/rules/sqlLiteral.js`
369
+ Exports
370
+ - `sqlLiteral`
371
+ Local functions
372
+ - `sqlMethod(node)`
373
+ - `shortText(sourceCode, node)`
374
+
307
375
  ### `plugin/rules/typedDependencies.js`
308
376
  Exports
309
377
  - `typedDependencies`
@@ -321,6 +389,7 @@ Local functions
321
389
  Exports
322
390
  - `ABSENT_DEFAULT`
323
391
  - `CLIENT_GUIDE_URL`
392
+ - `DATA_ACCESS_GUIDE_URL`
324
393
  - `GUIDE_URL`
325
394
  - `compactText(sourceCode, node)`
326
395
  - `createReporter(context, ruleName)`
@@ -49,7 +49,7 @@ Exports
49
49
  ### `scripts/browser-tests.mjs`
50
50
  Exports
51
51
  - `SETTINGS_VARIABLE`
52
- - `browserTestConfig({ testDir = "./tests/e2e", port = DEFAULT_PORT, server = "node ./bin/server.js", build = "npm run build", prepare = "", signIn = "", env = {}, health = "/api/health", globalTimeout = GLOBAL_TIMEOUT_MS, environment = process.env, cwd = process.cwd() } = {})`
52
+ - `browserTestConfig({ testDir = "./tests/e2e", port = DEFAULT_PORT, server = "node ./bin/server.js", build = "npm run build", prepare = "", signIn = "", env = {}, health = "/api/health", globalTimeout = GLOBAL_TIMEOUT_MS, actionTimeout = ACTION_TIMEOUT_MS, navigationTimeout = NAVIGATION_TIMEOUT_MS, environment = process.env, cwd = process.cwd() } = {})`
53
53
  - `browserTestWorkers({ env = process.env, argv = process.argv } = {})`
54
54
  Local functions
55
55
  - `positiveInteger(value)`
@@ -66,6 +66,39 @@ Local functions
66
66
  - `buildCatalog({ repoRoot, packagesRoot, outputPath })`
67
67
  - `main()`
68
68
 
69
+ ### `scripts/data-access.mjs`
70
+ Exports
71
+ - `checkDataAccess({ projectRoot = process.cwd() } = {})`
72
+ - `formatDataAccessReport(result)`
73
+ Local functions
74
+ - `blank(text)`
75
+ - `maskStrings(code)`
76
+ - `closingOffset(masked, start)`
77
+ - `nextCodeOffset(text, offset)`
78
+ - `constantValue(code, name)`
79
+ - `readValue(code, masked, offset)`
80
+ - `topLevelKeys(masked, start, end, names)`
81
+ - `objectArgument(masked, callOffset, matchLength)`
82
+ - `keyValue(code, masked, keys, key)`
83
+ - `readSourceFile(source)`
84
+ - `objectKeys(masked, start, end)`
85
+ - `objectAt(masked, offset)`
86
+ - `readSchemaFields(code, masked, keys, ownership)`
87
+ - `readTableResources(file, { code, masked, position })`
88
+ - `readCrudContracts({ code, masked })`
89
+ - `unnamedFields(resources, contracts)`
90
+ - `ownsSystemContextName(source, masked)`
91
+ - `readSystemScopes(file, { source, code, masked, position })`
92
+ - `readInfrastructureExcuses(file, source)`
93
+ - `readLintDisables(file, source, position)`
94
+ - `readRuntimeCapabilities(file, { code, masked, position })`
95
+ - `readBaseline(root, report)`
96
+ - `checkBaseline(baseline, excuses, scopes, report)`
97
+ - `walk(root, directory, files)`
98
+ - `frameworkPackages(root)`
99
+ - `checkTables(resources, report)`
100
+ - `checkSystemScopes(scopes, report)`
101
+
69
102
  ### `scripts/files.mjs`
70
103
  Exports
71
104
  - `fileExists(absolutePath)`
@@ -278,6 +311,7 @@ Local functions
278
311
  - `removeJskitDependencyRecords(dependencies = {}, localPackageNames = new Set())`
279
312
  - `alignLockManifestRecord(lockRecord, manifest, localPackageNames)`
280
313
  - `preparePackageLockForInstall(projectRoot, manifests, packageLockPath)`
314
+ - `findImports(root, packageIds)`
281
315
 
282
316
  ### `scripts/test-budget.mjs`
283
317
  Exports
@@ -341,6 +375,7 @@ Local functions
341
375
  ### `scripts/verify-packages.mjs`
342
376
  Exports
343
377
  - `main()`
378
+ - `validateApiSummarySurfaces(packageJson)`
344
379
  - `validateCapabilityClosure(packages, { builtinCapabilities = BUILTIN_CAPABILITIES } = {})`
345
380
  - `validateMigrations(packageRecord, migrationOwners)`
346
381
  - `validateProviderExport(value, label)`
@@ -17,6 +17,7 @@ Use this on demand; do not load the full index at startup.
17
17
  ### `src/manifests.mjs`
18
18
  Exports
19
19
  - `DEPENDENCY_FIELDS`
20
+ - `assertNoOutsidePathDependencies(records, repoRoot)`
20
21
  - `bumpPatch(version)`
21
22
  - `collectPatternPackageJsonPaths(packageRoot, nestedManifests = ["patterns", "examples"])`
22
23
  - `collectPublishDependencies(packageJson, localNames)`
@@ -37,6 +38,7 @@ Exports
37
38
  Local functions
38
39
  - `followVersion(declared, version)`
39
40
  - `expandWorkspacePattern(repoRoot, pattern)`
41
+ - `localDependencyPath(spec)`
40
42
  - `versionFilePaths(record)`
41
43
 
42
44
  ### `src/npm-publication.mjs`
@@ -54,6 +56,7 @@ Local functions
54
56
 
55
57
  ### `src/release.mjs`
56
58
  Exports
59
+ - `assertNoOutsidePathDependencies`
57
60
  - `assertReleaseCheckout(repoRoot, { allowAhead = false, branch = "main" } = {})`
58
61
  - `bumpPatch`
59
62
  - `collectPublishDependencies`