@jskit-ai/agent-docs 0.1.257 → 0.1.259
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/guide/agent/app-extras/assistant-conversation.md +88 -35
- package/guide/agent/app-extras/assistant.md +28 -28
- package/guide/agent/app-setup/authentication.md +36 -17
- package/guide/agent/app-setup/database-layer.md +116 -17
- package/guide/agent/app-setup/existing-application-migration.md +29 -25
- package/guide/agent/app-setup/multi-homing.md +94 -48
- package/guide/agent/app-setup/run-an-accounts-hub.md +6 -4
- package/guide/agent/framework/client-features.md +496 -0
- package/guide/agent/framework/crud-operations.md +5 -5
- package/guide/agent/framework/translation.md +4 -3
- package/guide/agent/framework/typed-features.md +1104 -0
- package/guide/agent/framework/ui-operations.md +2 -2
- package/guide/agent/index.md +6 -1
- package/package.json +1 -1
- package/patterns/feature-package/PATTERN.md +104 -10
- package/patterns/feature-package/example/booking-engine/package.json +9 -4
- package/patterns/feature-package/example/booking-engine/src/server/BookingEngineFeature.js +24 -0
- package/patterns/feature-package/example/booking-engine/src/server/bookingAvailability.js +10 -0
- package/patterns/feature-package/example/booking-engine/src/server/bookingEngine.js +29 -0
- package/patterns/feature-package/example/booking-engine/src/server/bookingEngineActions.js +26 -0
- package/patterns/feature-package/example/booking-engine/src/server/inputSchemas.js +1 -2
- package/patterns/feature-package/example/booking-engine/src/server/types.js +12 -0
- package/patterns/feature-package/example/variations/AvailabilityEngineFeature.js +19 -0
- package/patterns/feature-package/example/variations/InvoiceRollupFeature.js +23 -0
- package/patterns/feature-package/example/variations/availabilityEngineActions.js +26 -0
- package/patterns/feature-package/example/variations/customKnexRepository.js +32 -26
- package/patterns/feature-package/example/variations/invoiceRollupActions.js +26 -0
- package/patterns/feature-package/example/variations/orchestratorService.js +24 -19
- package/patterns/feature-package/example/variations/types.js +7 -0
- package/patterns/minimal-foundation/PATTERN.md +30 -1
- package/patterns/minimal-foundation/example/AGENTS.md +14 -0
- package/patterns/minimal-foundation/example/bin/develop.js +10 -5
- package/patterns/minimal-foundation/example/eslint.config.mjs +21 -2
- package/patterns/minimal-foundation/example/package.json +5 -4
- package/patterns/minimal-foundation/example/playwright.config.mjs +1 -1
- package/patterns/minimal-foundation/example/server/lib/envFile.js +19 -0
- package/patterns/minimal-foundation/example/server/lib/loggerOptions.js +15 -0
- package/patterns/minimal-foundation/example/server/lib/runtimeEnv.js +17 -17
- package/patterns/minimal-foundation/example/server.js +32 -29
- package/patterns/minimal-foundation/example/tests/server/smoke.test.js +2 -1
- package/patterns/shell-foundation/PATTERN.md +29 -0
- package/patterns/shell-foundation/example/AGENTS.md +14 -0
- package/patterns/shell-foundation/example/bin/develop.js +10 -5
- package/patterns/shell-foundation/example/eslint.config.mjs +21 -2
- package/patterns/shell-foundation/example/package.json +6 -5
- package/patterns/shell-foundation/example/packages/main/package.json +1 -1
- package/patterns/shell-foundation/example/packages/main/src/client/providers/MainClientProvider.js +1 -0
- package/patterns/shell-foundation/example/playwright.config.mjs +1 -1
- package/patterns/shell-foundation/example/server/lib/envFile.js +19 -0
- package/patterns/shell-foundation/example/server/lib/loggerOptions.js +15 -0
- package/patterns/shell-foundation/example/server/lib/runtimeEnv.js +17 -17
- package/patterns/shell-foundation/example/server.js +32 -29
- package/patterns/shell-foundation/example/tests/server/smoke.test.js +2 -1
- package/reference/autogen/KERNEL_MAP.md +14 -8
- package/reference/autogen/PATTERN_INDEX.md +37 -37
- package/reference/autogen/README.md +2 -0
- package/reference/autogen/packages/agent-docs.md +70 -26
- package/reference/autogen/packages/agent-runtime.md +129 -0
- package/reference/autogen/packages/agent.md +149 -0
- package/reference/autogen/packages/architecture-inspector.md +97 -44
- package/reference/autogen/packages/assistant-core.md +786 -292
- package/reference/autogen/packages/assistant-runtime.md +182 -57
- package/reference/autogen/packages/assistant-voice-sherpa.md +4 -0
- package/reference/autogen/packages/assistant-voice.md +54 -8
- package/reference/autogen/packages/auth-core.md +44 -13
- package/reference/autogen/packages/auth-provider-local-core.md +86 -34
- package/reference/autogen/packages/auth-provider-local-db-core.md +1 -2
- package/reference/autogen/packages/auth-provider-oidc-core.md +10 -4
- package/reference/autogen/packages/auth-provider-supabase-core.md +52 -66
- package/reference/autogen/packages/auth-web.md +19 -11
- package/reference/autogen/packages/connectors-catalog.md +71 -43
- package/reference/autogen/packages/connectors-core.md +42 -4
- package/reference/autogen/packages/console-core.md +27 -14
- package/reference/autogen/packages/crud-core.md +178 -170
- package/reference/autogen/packages/database-runtime-mysql.md +0 -2
- package/reference/autogen/packages/database-runtime-postgres.md +0 -2
- package/reference/autogen/packages/database-runtime.md +39 -10
- package/reference/autogen/packages/http-runtime.md +79 -57
- package/reference/autogen/packages/json-rest-api-core.md +11 -8
- package/reference/autogen/packages/kernel.md +144 -83
- package/reference/autogen/packages/oidc-issuer-core.md +49 -20
- package/reference/autogen/packages/payments-core.md +20 -3
- package/reference/autogen/packages/realtime.md +47 -22
- package/reference/autogen/packages/resource-core.md +1 -1
- package/reference/autogen/packages/resource-crud-core.md +64 -26
- package/reference/autogen/packages/rewarded-core.md +47 -36
- package/reference/autogen/packages/shell-web.md +7 -10
- package/reference/autogen/packages/storage-runtime.md +6 -2
- package/reference/autogen/packages/uploads-runtime.md +10 -2
- package/reference/autogen/packages/users-core.md +73 -71
- package/reference/autogen/packages/workspaces-core.md +121 -106
- package/reference/autogen/packages/workspaces-web.md +1 -2
- package/reference/autogen/tooling/config-eslint.md +302 -0
- package/reference/autogen/tooling/jskit-catalog.md +28 -18
- package/reference/autogen/tooling/jskit-release.md +35 -20
- package/reference/autogen/tooling/testUtils.md +3 -1
- package/skills/jskit/SKILL.md +9 -8
- package/skills/jskit/references/app-operations.md +1 -1
- package/skills/jskit/references/client-features.md +491 -0
- package/skills/jskit/references/crud-form-actions.md +1 -1
- package/skills/jskit/references/crud-operations.md +7 -7
- package/skills/jskit/references/existing-application-migration.md +31 -27
- package/skills/jskit/references/heuristics/INDEX.md +5 -1
- package/skills/jskit/references/heuristics/child-cruds.md +1 -1
- package/skills/jskit/references/heuristics/client-features.md +66 -0
- package/skills/jskit/references/heuristics/client-requests.md +1 -1
- package/skills/jskit/references/heuristics/crud-authoring.md +12 -2
- package/skills/jskit/references/heuristics/crud-links.md +1 -1
- package/skills/jskit/references/heuristics/crud-repository-mapping.md +3 -3
- package/skills/jskit/references/heuristics/filters.md +1 -1
- package/skills/jskit/references/heuristics/live-actions.md +1 -1
- package/skills/jskit/references/heuristics/page-redirects.md +1 -1
- package/skills/jskit/references/heuristics/page-scaffolding.md +1 -1
- package/skills/jskit/references/heuristics/placements.md +1 -1
- package/skills/jskit/references/heuristics/row-policies.md +1 -1
- package/skills/jskit/references/heuristics/server-search.md +1 -1
- package/skills/jskit/references/heuristics/surfaces.md +1 -1
- package/skills/jskit/references/heuristics/typed-features.md +100 -0
- package/skills/jskit/references/heuristics/ui-contract.md +1 -1
- package/skills/jskit/references/heuristics/ui-testing.md +4 -4
- package/skills/jskit/references/material-3.md +2 -2
- package/skills/jskit/references/multi-homing.md +96 -50
- package/skills/jskit/references/pattern-index.md +37 -37
- package/skills/jskit/references/patterns/app/minimal-foundation/PATTERN.md +30 -1
- package/skills/jskit/references/patterns/app/minimal-foundation/example/AGENTS.md +14 -0
- package/skills/jskit/references/patterns/app/minimal-foundation/example/bin/develop.js +10 -5
- package/skills/jskit/references/patterns/app/minimal-foundation/example/eslint.config.mjs +21 -2
- package/skills/jskit/references/patterns/app/minimal-foundation/example/package.json +5 -4
- package/skills/jskit/references/patterns/app/minimal-foundation/example/playwright.config.mjs +1 -1
- package/skills/jskit/references/patterns/app/minimal-foundation/example/server/lib/envFile.js +19 -0
- package/skills/jskit/references/patterns/app/minimal-foundation/example/server/lib/loggerOptions.js +15 -0
- package/skills/jskit/references/patterns/app/minimal-foundation/example/server/lib/runtimeEnv.js +17 -17
- package/skills/jskit/references/patterns/app/minimal-foundation/example/server.js +32 -29
- package/skills/jskit/references/patterns/app/minimal-foundation/example/tests/server/smoke.test.js +2 -1
- package/skills/jskit/references/patterns/app/shell-foundation/PATTERN.md +29 -0
- package/skills/jskit/references/patterns/app/shell-foundation/example/AGENTS.md +14 -0
- package/skills/jskit/references/patterns/app/shell-foundation/example/bin/develop.js +10 -5
- package/skills/jskit/references/patterns/app/shell-foundation/example/eslint.config.mjs +21 -2
- package/skills/jskit/references/patterns/app/shell-foundation/example/package.json +6 -5
- package/skills/jskit/references/patterns/app/shell-foundation/example/packages/main/package.json +1 -1
- package/skills/jskit/references/patterns/app/shell-foundation/example/packages/main/src/client/providers/MainClientProvider.js +1 -0
- package/skills/jskit/references/patterns/app/shell-foundation/example/playwright.config.mjs +1 -1
- package/skills/jskit/references/patterns/app/shell-foundation/example/server/lib/envFile.js +19 -0
- package/skills/jskit/references/patterns/app/shell-foundation/example/server/lib/loggerOptions.js +15 -0
- package/skills/jskit/references/patterns/app/shell-foundation/example/server/lib/runtimeEnv.js +17 -17
- package/skills/jskit/references/patterns/app/shell-foundation/example/server.js +32 -29
- package/skills/jskit/references/patterns/app/shell-foundation/example/tests/server/smoke.test.js +2 -1
- package/skills/jskit/references/patterns/assistant/assistant-surface/example/src/ApplicationAiFeature.js +4 -2
- package/skills/jskit/references/patterns/auth/accounts-hub/PATTERN.md +2 -1
- package/skills/jskit/references/patterns/auth/accounts-hub/example/package.json +2 -2
- package/skills/jskit/references/patterns/auth/accounts-hub/example/server/hubPaths.js +9 -3
- package/skills/jskit/references/patterns/auth/auth-surface/PATTERN.md +25 -12
- package/skills/jskit/references/patterns/auth/auth-surface/example/tools/preview-identity +7 -1
- package/skills/jskit/references/patterns/auth/oidc-sign-in/example/package.json +2 -2
- package/skills/jskit/references/patterns/auth/supabase-auth/example/package.json +1 -1
- package/skills/jskit/references/patterns/connectors/ai-connections/PATTERN.md +16 -1
- package/skills/jskit/references/patterns/connectors/ai-connections/example/ai-model.js +12 -3
- package/skills/jskit/references/patterns/connectors/ai-connections/example/perplexity-answer.js +15 -4
- package/skills/jskit/references/patterns/connectors/api-key-connection/PATTERN.md +9 -1
- package/skills/jskit/references/patterns/connectors/api-key-connection/example/connections.js +5 -2
- package/skills/jskit/references/patterns/connectors/aws-storage-queries/PATTERN.md +13 -3
- package/skills/jskit/references/patterns/connectors/aws-storage-queries/example/s3-transfer.js +14 -3
- package/skills/jskit/references/patterns/connectors/calendar-cli/PATTERN.md +8 -0
- package/skills/jskit/references/patterns/connectors/calendar-cli/example/knexfile.js +1 -1
- package/skills/jskit/references/patterns/connectors/calendar-cli/example/package.json +4 -4
- package/skills/jskit/references/patterns/connectors/calendar-cli/example/scripts/calendar.js +8 -4
- package/skills/jskit/references/patterns/connectors/event-delivery/PATTERN.md +1 -1
- package/skills/jskit/references/patterns/connectors/firebase-messaging/PATTERN.md +10 -0
- package/skills/jskit/references/patterns/connectors/firebase-messaging/example/server/notifications.js +8 -0
- package/skills/jskit/references/patterns/connectors/google-ads-search/PATTERN.md +18 -7
- package/skills/jskit/references/patterns/connectors/google-ads-search/example/ads-setup.js +13 -5
- package/skills/jskit/references/patterns/connectors/oauth-connection/PATTERN.md +1 -1
- package/skills/jskit/references/patterns/connectors/paddle-catalogue/PATTERN.md +11 -2
- package/skills/jskit/references/patterns/connectors/paddle-catalogue/example/create-products.js +5 -2
- package/skills/jskit/references/patterns/connectors/public-image/PATTERN.md +10 -1
- package/skills/jskit/references/patterns/connectors/public-image/example/logo-url.js +4 -1
- package/skills/jskit/references/patterns/connectors/redshift-queries/PATTERN.md +1 -1
- package/skills/jskit/references/patterns/connectors/source-scanning/PATTERN.md +13 -2
- package/skills/jskit/references/patterns/connectors/source-scanning/example/source-scanner.js +9 -0
- package/skills/jskit/references/patterns/crud/json-api-resource-package/PATTERN.md +102 -23
- package/skills/jskit/references/patterns/crud/json-api-resource-package/example/packages/books/package.json +3 -2
- package/skills/jskit/references/patterns/crud/json-api-resource-package/example/packages/books/src/server/types.js +5 -0
- package/skills/jskit/references/patterns/crud/resource-contract/PATTERN.md +54 -1
- package/skills/jskit/references/patterns/database/mysql-application/PATTERN.md +16 -5
- package/skills/jskit/references/patterns/database/mysql-application/example/knexfile.js +2 -2
- package/skills/jskit/references/patterns/database/mysql-application/example/package.json +1 -1
- package/skills/jskit/references/patterns/database/mysql-application/example/scripts/prepare-database.js +1 -1
- package/skills/jskit/references/patterns/database/postgres-application/PATTERN.md +16 -5
- package/skills/jskit/references/patterns/database/postgres-application/example/knexfile.js +2 -2
- package/skills/jskit/references/patterns/database/postgres-application/example/package.json +1 -1
- package/skills/jskit/references/patterns/database/postgres-application/example/scripts/prepare-database.js +1 -1
- package/skills/jskit/references/patterns/realtime/realtime-application/example/package.json +2 -2
- package/skills/jskit/references/patterns/rewards/google-rewarded/example/GoogleRewardedDeliveryProvider.js +1 -1
- package/skills/jskit/references/patterns/rewards/google-rewarded/example/googlePublisherTag.js +5 -11
- package/skills/jskit/references/patterns/server/feature-package/PATTERN.md +104 -10
- package/skills/jskit/references/patterns/server/feature-package/example/booking-engine/package.json +9 -4
- package/skills/jskit/references/patterns/server/feature-package/example/booking-engine/src/server/BookingEngineFeature.js +24 -0
- package/skills/jskit/references/patterns/server/feature-package/example/booking-engine/src/server/bookingAvailability.js +10 -0
- package/skills/jskit/references/patterns/server/feature-package/example/booking-engine/src/server/bookingEngine.js +29 -0
- package/skills/jskit/references/patterns/server/feature-package/example/booking-engine/src/server/bookingEngineActions.js +26 -0
- package/skills/jskit/references/patterns/server/feature-package/example/booking-engine/src/server/inputSchemas.js +1 -2
- package/skills/jskit/references/patterns/server/feature-package/example/booking-engine/src/server/types.js +12 -0
- package/skills/jskit/references/patterns/server/feature-package/example/variations/AvailabilityEngineFeature.js +19 -0
- package/skills/jskit/references/patterns/server/feature-package/example/variations/InvoiceRollupFeature.js +23 -0
- package/skills/jskit/references/patterns/server/feature-package/example/variations/availabilityEngineActions.js +26 -0
- package/skills/jskit/references/patterns/server/feature-package/example/variations/customKnexRepository.js +32 -26
- package/skills/jskit/references/patterns/server/feature-package/example/variations/invoiceRollupActions.js +26 -0
- package/skills/jskit/references/patterns/server/feature-package/example/variations/orchestratorService.js +24 -19
- package/skills/jskit/references/patterns/server/feature-package/example/variations/types.js +7 -0
- package/skills/jskit/references/patterns/users/user-administration-server/PATTERN.md +16 -1
- package/skills/jskit/references/patterns/users/user-administration-server/example/packages/users/package.json +3 -2
- package/skills/jskit/references/patterns/users/user-administration-server/example/packages/users/src/server/types.js +5 -0
- package/skills/jskit/references/patterns/users/user-administration-server/example/packages/users-workspace/package.json +4 -3
- package/skills/jskit/references/patterns/users/user-administration-server/example/packages/users-workspace/src/server/UsersWorkspaceFeature.js +2 -9
- package/skills/jskit/references/patterns/users/user-administration-server/example/packages/users-workspace/src/server/types.js +5 -0
- package/skills/jskit/references/patterns/workspaces/workspace-server/PATTERN.md +42 -17
- package/skills/jskit/references/patterns/workspaces/workspace-server/example/packages/main/src/server/WorkspaceInvitationsFeature.js +27 -0
- package/skills/jskit/references/patterns/workspaces/workspace-server/example/packages/main/src/server/email/workspaceInviteEmail.js +11 -10
- package/skills/jskit/references/patterns/workspaces/workspace-server/example/packages/main/src/server/email/workspaceInviteMailer.js +27 -0
- package/skills/jskit/references/translation.md +5 -4
- package/skills/jskit/references/typed-features.md +1099 -0
- package/skills/jskit/references/ui-operations.md +3 -3
- package/patterns/feature-package/example/booking-engine/src/server/BookingEngineProvider.js +0 -33
- package/patterns/feature-package/example/booking-engine/src/server/actions.js +0 -24
- package/patterns/feature-package/example/variations/AvailabilityEngineProvider.js +0 -31
- package/patterns/feature-package/example/variations/InvoiceRollupProvider.js +0 -36
- package/skills/jskit/references/patterns/server/feature-package/example/booking-engine/src/server/BookingEngineProvider.js +0 -33
- package/skills/jskit/references/patterns/server/feature-package/example/booking-engine/src/server/actions.js +0 -24
- package/skills/jskit/references/patterns/server/feature-package/example/variations/AvailabilityEngineProvider.js +0 -31
- package/skills/jskit/references/patterns/server/feature-package/example/variations/InvoiceRollupProvider.js +0 -36
|
@@ -16,36 +16,22 @@ Use this on demand; do not load the full index at startup.
|
|
|
16
16
|
|
|
17
17
|
### `src/server/createCrudServiceFromResource.js`
|
|
18
18
|
Exports
|
|
19
|
-
- `createCrudServiceFromResource(resource
|
|
19
|
+
- `createCrudServiceFromResource(resource, { context = "crudService" } = {})`
|
|
20
20
|
|
|
21
21
|
### `src/server/createHooksToCollectChildren.js`
|
|
22
22
|
Exports
|
|
23
23
|
- `createHooksToCollectChildren(options = {})`
|
|
24
24
|
Local functions
|
|
25
25
|
- `normalizeOwnerKey(value)`
|
|
26
|
-
- `
|
|
26
|
+
- `readParentId(record)`
|
|
27
|
+
- `toDefaultChildCallOptions({ callOptions = {} } = {})`
|
|
27
28
|
- `resolveListChildrenHandler(options = {}, { context = "createHooksToCollectChildren" } = {})`
|
|
28
29
|
- `resolveGetChildOwnerId(options = {}, { context = "createHooksToCollectChildren" } = {})`
|
|
29
|
-
- `
|
|
30
|
-
|
|
31
|
-
### `src/server/crudModuleConfig.js`
|
|
32
|
-
Exports
|
|
33
|
-
- `CRUD_REQUESTED_OWNERSHIP_FILTER_AUTO`
|
|
34
|
-
- `normalizeCrudRequestedOwnershipFilter(value, { fallback = CRUD_REQUESTED_OWNERSHIP_FILTER_AUTO } = {})`
|
|
35
|
-
- `isWorkspaceRouteVisibility`
|
|
36
|
-
- `requireCrudNamespace`
|
|
37
|
-
- `resolveCrudRelativePath(namespace = "")`
|
|
38
|
-
- `normalizeCrudRelativePath(relativePath = "", { context = "resolveCrudSurfacePolicy" } = {})`
|
|
39
|
-
- `resolveCrudSurfacePolicy(sourceConfig = {}, { surfaceDefinitions = {}, defaultSurfaceId = "", context = "resolveCrudSurfacePolicy" } = {})`
|
|
40
|
-
- `resolveCrudSurfacePolicyFromAppConfig(sourceConfig = {}, appConfig = {}, options = {})`
|
|
41
|
-
Local functions
|
|
42
|
-
- `asRecord(value)`
|
|
43
|
-
- `normalizeSurfaceDefinitions(sourceDefinitions = {})`
|
|
44
|
-
- `resolveOwnershipFilterFromSurfaceDefinition(definition = {})`
|
|
30
|
+
- `resolveChildrenContainerKey(hookContext = {}, options = {})`
|
|
45
31
|
|
|
46
32
|
### `src/server/defineCrudJsonApiFeature.js`
|
|
47
33
|
Exports
|
|
48
|
-
- `defineCrudJsonApiFeature({ resource, id = "", capability = "", surface, ownershipFilter = "", relativePath = "", internal = false, routes = true, listFilterQueryValidator = null, searchSchema = null, permissions = null, scope = {}, requires = {}, decorateRepository = null, decorateService = null, operationLifecycle = {}, operationInputs = {}, actions = {}, operations = undefined, realtimeAudience = "event_scope" }
|
|
34
|
+
- `defineCrudJsonApiFeature({ resource, id = "", capability = "", surface, ownershipFilter = "", relativePath = "", internal = false, routes = true, listFilterQueryValidator = null, searchSchema = null, permissions = null, scope = {}, requires = {}, decorateRepository = null, decorateService = null, operationLifecycle = {}, operationInputs = {}, actions = {}, operations = undefined, realtimeAudience = "event_scope" })`
|
|
49
35
|
Local functions
|
|
50
36
|
- `normalizeAccess(resource = {})`
|
|
51
37
|
- `normalizeScope(scope = {})`
|
|
@@ -53,7 +39,7 @@ Local functions
|
|
|
53
39
|
- `normalizeFeatureRequirements(requires = {})`
|
|
54
40
|
- `operationsFromResource(resource)`
|
|
55
41
|
- `normalizeOperations(operations, resource)`
|
|
56
|
-
- `resolveActionPermission(actionName, { access, workspaceScoped, permissions }
|
|
42
|
+
- `resolveActionPermission(actionName, { access, workspaceScoped, permissions })`
|
|
57
43
|
- `projectEnabledServiceOperations(service, operations)`
|
|
58
44
|
|
|
59
45
|
### `src/server/fieldAccess.js`
|
|
@@ -64,96 +50,117 @@ Local functions
|
|
|
64
50
|
- `normalizeFieldSet(value, { context = "crudFieldAccess", label = "field list" } = {})`
|
|
65
51
|
- `resolveFieldSet(resolver, input = {}, { context = "crudFieldAccess", label = "field list" } = {})`
|
|
66
52
|
- `resolveWriteMode(fieldAccess = {}, { context = "crudFieldAccess" } = {})`
|
|
67
|
-
- `buildOutputFieldRules(resource
|
|
68
|
-
- `resolveRoleFromFieldAccessInput(input
|
|
69
|
-
- `resolveActionFromFieldAccessInput(input
|
|
53
|
+
- `buildOutputFieldRules(resource)`
|
|
54
|
+
- `resolveRoleFromFieldAccessInput(input)`
|
|
55
|
+
- `resolveActionFromFieldAccessInput(input)`
|
|
70
56
|
- `resolveOperationPolicyValue(operationPolicy, input = {}, action = "*")`
|
|
71
57
|
- `resolveRoleMatrixPolicy(matrix = {}, operation = "readable", input = {})`
|
|
72
|
-
- `applyReadableFieldPolicyToRecord(record, allowedFields, outputRules
|
|
58
|
+
- `applyReadableFieldPolicyToRecord(record, allowedFields, outputRules, { context = "crudFieldAccess" } = {})`
|
|
73
59
|
|
|
74
60
|
### `src/server/jsonApiModule/actions.js`
|
|
75
61
|
Exports
|
|
76
62
|
- `assertCrudOperationName(operation = "")`
|
|
77
|
-
- `createCrudJsonApiActions({ namespace, resource, repository
|
|
78
|
-
- `normalizeCrudOperationLifecycle(value
|
|
63
|
+
- `createCrudJsonApiActions({ namespace, resource, repository, service, surface, permissionForOperation, operations, scopeInputValidator, scopeInputKeys, listFilterQueryValidator, operationLifecycle, operationInputs, actions, dependencies, realtimeAudience })`
|
|
64
|
+
- `normalizeCrudOperationLifecycle(value)`
|
|
65
|
+
Local functions
|
|
66
|
+
- `buildActionInput(resource, operation, scopeInputValidator, listFilterQueryValidator, operationInputs)`
|
|
67
|
+
- `omitInputKeys(input, keys)`
|
|
68
|
+
- `buildLifecycleContext(value)`
|
|
69
|
+
- `normalizeAdditionalActions(definitions, { namespace, surface, permissionForAction, scopeInputValidator })`
|
|
70
|
+
|
|
71
|
+
### `src/server/jsonApiModule/assistantExtension.js`
|
|
72
|
+
Exports
|
|
73
|
+
- `createCrudAssistantExtension(resource, namespace, operation)`
|
|
79
74
|
Local functions
|
|
80
|
-
- `isRecord(value)`
|
|
81
|
-
- `normalizeOptionalCursor(value)`
|
|
82
75
|
- `resolveAssistantResultValue(result)`
|
|
83
|
-
- `
|
|
84
|
-
- `
|
|
85
|
-
- `
|
|
76
|
+
- `buildProjectionRecordSchema(recordSchema, { lookupContainerKey = "", relationshipEntries = [] } = {})`
|
|
77
|
+
- `buildProjectionOutputDefinition(output, operation, relationshipEntries, lookupContainerKey)`
|
|
78
|
+
- `buildCrudAssistantTransport(resource, operation, relationshipEntries, lookupContainerKey)`
|
|
86
79
|
- `projectCrudAssistantRecordFields(record, selectedFields = null, { preserveKeys = [] } = {})`
|
|
87
80
|
- `projectCrudAssistantLookupValue(value, selectedFields = null)`
|
|
88
81
|
- `projectCrudAssistantReadRecord(record, { lookupContainerKey = "", primaryFields = null, relatedFieldsByLookupKey = new Map() } = {})`
|
|
89
|
-
- `
|
|
82
|
+
- `buildCrudAssistantResultProjection(input, resource, relationshipEntries = [])`
|
|
90
83
|
- `projectCrudAssistantReadResult(result, projection = null, { lookupContainerKey = "" } = {})`
|
|
91
84
|
- `transformCrudAssistantResult(operation, result, { input = {}, resource, relationshipEntries = [], lookupContainerKey = "" } = {})`
|
|
92
|
-
- `
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
- `
|
|
97
|
-
- `normalizeAdditionalActions(value = {}, { namespace, surface, permissionForAction, scopeInputValidator = null } = {})`
|
|
85
|
+
- `buildCrudAssistantReadDescription({ fieldsetContract, lookupContainerKey = "", namespace = "", operation = "list" } = {})`
|
|
86
|
+
|
|
87
|
+
### `src/server/jsonApiModule/customActionId.js`
|
|
88
|
+
Exports
|
|
89
|
+
- `buildCrudCustomActionId(namespace, name, definition)`
|
|
98
90
|
|
|
99
91
|
### `src/server/jsonApiModule/repository.js`
|
|
100
92
|
Exports
|
|
101
|
-
- `createCrudJsonApiRepository({ api, resource, resourceScopeName }
|
|
93
|
+
- `createCrudJsonApiRepository({ api, resource, resourceScopeName })`
|
|
102
94
|
|
|
103
95
|
### `src/server/jsonApiModule/routes.js`
|
|
104
96
|
Exports
|
|
105
|
-
- `
|
|
106
|
-
- `registerCrudJsonApiRoutes(router, { namespace, resource, routeBase = "/", relativePath, surface, ownershipFilter, access, internal = false, operations = ["list", "view", "create", "update", "delete"], actions = {}, operationInputs = {}, listFilterQueryValidator = null, routeParamsValidator = null, scopeInput = null } = {})`
|
|
97
|
+
- `registerCrudJsonApiRoutes(router, { namespace, resource, routeBase, relativePath, surface, ownershipFilter, access, internal, operations, actions, operationInputs, listFilterQueryValidator, routeParamsValidator, scopeInput })`
|
|
107
98
|
Local functions
|
|
108
|
-
- `
|
|
109
|
-
- `
|
|
99
|
+
- `buildScopeInput(scopeInput, request)`
|
|
100
|
+
- `buildCustomActionInput(scopeInput, route, request)`
|
|
101
|
+
- `normalizeCustomActionRoutes(actions, namespace)`
|
|
110
102
|
|
|
111
103
|
### `src/server/jsonApiModule/service.js`
|
|
112
104
|
Exports
|
|
113
|
-
- `createCrudJsonApiService({ repository }
|
|
105
|
+
- `createCrudJsonApiService({ repository })`
|
|
106
|
+
- `repositoryCallOptions(options = {})`
|
|
114
107
|
Local functions
|
|
115
|
-
- `requireDocument(document
|
|
108
|
+
- `requireDocument(document)`
|
|
116
109
|
|
|
117
110
|
### `src/server/jsonApiResourceContract.js`
|
|
118
111
|
Exports
|
|
119
|
-
- `
|
|
112
|
+
- `resolveDeclaredLookupContainerKey(resource)`
|
|
113
|
+
- `resolveJsonApiFieldsetContract(resource)`
|
|
120
114
|
- `resolveJsonApiRelationshipEntries(definition = null)`
|
|
121
115
|
- `resolveSchemaFieldDefinitions(definition = null)`
|
|
122
|
-
Local functions
|
|
123
|
-
- `isRecord(value)`
|
|
124
116
|
|
|
125
|
-
### `src/server/
|
|
117
|
+
### `src/server/listFilterJsonRest.js`
|
|
126
118
|
Exports
|
|
127
|
-
- `
|
|
128
|
-
- `CRUD_LIST_FILTER_INVALID_VALUES_DISCARD`
|
|
129
|
-
- `createCrudListFilterQueryField(filterDefinition = {}, { invalidValues = CRUD_LIST_FILTER_INVALID_VALUES_REJECT } = {})`
|
|
130
|
-
- `createCrudListFilterQuerySchema(structure = {})`
|
|
119
|
+
- `normalizeColumnsMap(columns = {})`
|
|
131
120
|
- `createCrudListFilterJsonRestSearchSchema(runtime = {}, { columns = {}, apply = {} } = {})`
|
|
132
|
-
- `
|
|
133
|
-
- `createCrudListFilterContract(definitions = {}, { columns = {}, apply = {}, invalidValues = CRUD_LIST_FILTER_INVALID_VALUES_REJECT } = {})`
|
|
121
|
+
- `normalizeCrudListFilterJsonRestQuery(runtime = {}, query = {})`
|
|
134
122
|
Local functions
|
|
135
|
-
- `cloneTransportSchema(value)`
|
|
136
|
-
- `buildSingleOrMultiTransportSchema(itemSchema)`
|
|
137
|
-
- `addDaysToDateFilterValue(value = "", days = 0)`
|
|
138
|
-
- `normalizeCrudListFilterQueryFieldInput(filterDefinition = null)`
|
|
139
|
-
- `buildFilterQueryFieldDefinition(filterDefinition = {}, { invalidValues = CRUD_LIST_FILTER_INVALID_VALUES_REJECT } = {})`
|
|
140
|
-
- `buildFilterQueryTransportSchema(filter = {}, { invalidValues = CRUD_LIST_FILTER_INVALID_VALUES_REJECT } = {})`
|
|
141
|
-
- `buildFilterQuerySchemaDefinition(filterEntries = [], { invalidValues = CRUD_LIST_FILTER_INVALID_VALUES_REJECT } = {})`
|
|
142
|
-
- `projectNormalizedFilterValues(filterEntries = [], source = {}, errors = {})`
|
|
143
|
-
- `normalizeColumnsMap(columns = {})`
|
|
144
123
|
- `resolveJsonRestFilterActualField(filter = {}, columns = {})`
|
|
145
124
|
- `renderInternalJsonRestFilterKey(filter = {}, suffix = "")`
|
|
146
|
-
- `
|
|
125
|
+
- `buildJsonRestSearchSchemaEntry({ type = "string", actualField = "", filterOperator = "=", extra = {} } = {})`
|
|
147
126
|
- `buildJsonRestFilterItemSchema(filter = {})`
|
|
148
127
|
- `buildJsonRestSimpleFilterSearchSchemaEntry(filter = {}, { actualField = "" } = {})`
|
|
149
128
|
- `buildJsonRestRangeFilterSearchSchemaEntries(filter = {}, { actualField = "" } = {})`
|
|
150
129
|
- `buildJsonRestPresenceFilterSearchSchemaEntry(filter = {}, { actualField = "" } = {})`
|
|
151
|
-
- `buildJsonRestCustomFilterSearchSchemaEntry(filter
|
|
130
|
+
- `buildJsonRestCustomFilterSearchSchemaEntry(filter, customApply)`
|
|
152
131
|
- `resolveCrudListFilterEntries(value = {})`
|
|
153
132
|
- `addJsonRestDateFilterValues(target = {}, filter = {}, value = "")`
|
|
154
133
|
- `addJsonRestFilterValue(target = {}, filter = {}, value)`
|
|
155
|
-
|
|
134
|
+
|
|
135
|
+
### `src/server/listFilters.js`
|
|
136
|
+
Exports
|
|
137
|
+
- `CRUD_LIST_FILTER_INVALID_VALUES_REJECT`
|
|
138
|
+
- `CRUD_LIST_FILTER_INVALID_VALUES_DISCARD`
|
|
139
|
+
- `buildCrudListFilterQueryField`
|
|
140
|
+
- `createCrudListFilterQuerySchema`
|
|
141
|
+
- `createCrudListFilterJsonRestSearchSchema`
|
|
142
|
+
- `createCrudListFilters(definitions = {}, { columns = {}, apply = {} } = {})`
|
|
143
|
+
- `createCrudListFilterContract(definitions = {}, { columns = {}, apply = {}, invalidValues = CRUD_LIST_FILTER_INVALID_VALUES_REJECT } = {})`
|
|
144
|
+
Local functions
|
|
145
|
+
- `projectNormalizedFilterValues(filterEntries = [], source = {}, errors = {})`
|
|
146
|
+
|
|
147
|
+
### `src/server/listFilterTypes.js`
|
|
148
|
+
Exports
|
|
149
|
+
- `recordIdTransportSchema`
|
|
150
|
+
- `cloneTransportSchema(value)`
|
|
151
|
+
- `addDaysToDateFilterValue(value = "", days = 0)`
|
|
152
|
+
- `buildCrudListFilterQueryField(filterDefinition, { invalidValues = CRUD_LIST_FILTER_INVALID_VALUES_REJECT } = {})`
|
|
153
|
+
- `createCrudListFilterQuerySchema(structure = {})`
|
|
154
|
+
- `buildFilterQuerySchemaDefinition(filterEntries = [], { invalidValues = CRUD_LIST_FILTER_INVALID_VALUES_REJECT } = {})`
|
|
156
155
|
- `applyDefaultFilterQuery(queryBuilder, filter = {}, value, column = "")`
|
|
156
|
+
Local functions
|
|
157
|
+
- `buildSingleOrMultiTransportSchema(itemSchema)`
|
|
158
|
+
- `buildAllowedValuesTransportSchema({ discardInvalidValues, allowedValues })`
|
|
159
|
+
- `applyEqualsFilterQuery(queryBuilder, value, column = "")`
|
|
160
|
+
- `applyInFilterQuery(queryBuilder, value, column = "")`
|
|
161
|
+
- `normalizeCrudListFilterQueryFieldInput(filterDefinition)`
|
|
162
|
+
- `buildFilterQueryFieldDefinition(filterDefinition, { invalidValues })`
|
|
163
|
+
- `buildFilterQueryTransportSchema(filter, { invalidValues })`
|
|
157
164
|
|
|
158
165
|
### `src/server/listQueryValidators.js`
|
|
159
166
|
Exports
|
|
@@ -162,53 +169,27 @@ Exports
|
|
|
162
169
|
- `listSearchQueryValidator`
|
|
163
170
|
- `lookupIncludeQueryValidator`
|
|
164
171
|
- `jsonApiFieldsetsQueryValidator`
|
|
165
|
-
- `resolveCrudParentFilterKeys(resource = {})`
|
|
166
172
|
- `createCrudParentFilterQueryValidator(resource = {})`
|
|
167
|
-
- `createStandardCrudListQueryValidators({ resource = {}, listFilterQueryValidator = null, searchQueryValidator = listSearchQueryValidator, includeQueryValidator = lookupIncludeQueryValidator, fieldsetsQueryValidator = jsonApiFieldsetsQueryValidator } = {})`
|
|
173
|
+
- `createStandardCrudListQueryValidators({ // readable-check: allow dependency-default - data: a resource definition resource = {}, listFilterQueryValidator = null, searchQueryValidator = listSearchQueryValidator, includeQueryValidator = lookupIncludeQueryValidator, fieldsetsQueryValidator = jsonApiFieldsetsQueryValidator } = {})`
|
|
168
174
|
- `createStandardCrudViewQueryValidators({ includeQueryValidator = lookupIncludeQueryValidator, fieldsetsQueryValidator = jsonApiFieldsetsQueryValidator } = {})`
|
|
169
175
|
Local functions
|
|
170
|
-
- `
|
|
176
|
+
- `buildJsonApiFieldsetValueDefinition({ allowedFields = [] } = {})`
|
|
171
177
|
- `resolveCrudListUsesOrderedCursor(list = {})`
|
|
172
178
|
|
|
173
|
-
### `src/server/lookupHydration.js`
|
|
174
|
-
Exports
|
|
175
|
-
- `createCrudLookupRuntime(resource = {}, { outputKeys = [] } = {})`
|
|
176
|
-
- `hydrateCrudLookupRecords(records = [], runtime = {}, { include, mode = "list", repositoryOptions = {}, callOptions = {} } = {})`
|
|
177
|
-
Local functions
|
|
178
|
-
- `normalizeLookupRelationEntry(entry = {}, outputKeys = new Set())`
|
|
179
|
-
- `normalizeLookupDefaultInclude(value)`
|
|
180
|
-
- `normalizeLookupMaxDepth(value)`
|
|
181
|
-
- `resolveLookupRuntimeDefaults(resource = {})`
|
|
182
|
-
- `normalizeLookupIdentifier(value)`
|
|
183
|
-
- `normalizeIncludePaths(include, { defaultInclude = DEFAULT_LOOKUP_INCLUDE } = {})`
|
|
184
|
-
- `resolveChildIncludeFromPaths(paths = [])`
|
|
185
|
-
- `buildLookupHydrationPlan(runtime = {}, include, { mode = "list", context = "crudRepository", includeWasExplicit = false, skippedNamespaces = new Set() } = {})`
|
|
186
|
-
- `resolveLookupResolver(repositoryOptions = {}, callOptions = {}, { context = "crudRepository" } = {})`
|
|
187
|
-
- `resolveLookupDepthRuntime(runtime = {}, repositoryOptions = {}, callOptions = {})`
|
|
188
|
-
- `buildLookupGroupKey(relation = {})`
|
|
189
|
-
- `normalizeLookupRelationValues(records = [], entries = [], childIncludeByKey = {})`
|
|
190
|
-
- `resolveGroupChildInclude(group = {})`
|
|
191
|
-
- `normalizeLookup(provider, relation = {}, { context = "crudRepository" } = {})`
|
|
192
|
-
- `resolveLookupOwnershipFilter(provider = {}, { context = "crudRepository" } = {})`
|
|
193
|
-
- `resolveLookupVisibilityContext(provider = {}, relation = {}, callOptions = {}, { context = "crudRepository" } = {})`
|
|
194
|
-
- `buildLookupRecordMap(records = [], valueKey = "")`
|
|
195
|
-
- `buildLookupCollectionMap(records = [], foreignKey = "")`
|
|
196
|
-
- `resolveLookupVisitedNamespaces(runtime = {}, callOptions = {})`
|
|
197
|
-
|
|
198
179
|
### `src/server/lookupPathSupport.js`
|
|
199
180
|
Exports
|
|
200
|
-
- `
|
|
201
|
-
- `normalizeCrudLookupNamespace`
|
|
181
|
+
- `normalizeLookupOwnershipFilter(value, { context })`
|
|
202
182
|
- `requireCrudLookupNamespace(value = "", { context = "crudLookup" } = {})`
|
|
203
|
-
- `resolveCrudLookupNamespaceFromRelation(relation = {}, { context = "crudLookup" } = {})`
|
|
204
183
|
- `resolveCrudLookupToken(namespace = "", { context = "crudLookup" } = {})`
|
|
205
184
|
|
|
206
185
|
### `src/server/lookups.js`
|
|
207
186
|
Exports
|
|
208
187
|
- `resolveCrudLookupToken`
|
|
209
188
|
- `createCrudLookup(repository, { context = "crudLookup", ownershipFilter = "" } = {})`
|
|
210
|
-
|
|
211
|
-
|
|
189
|
+
|
|
190
|
+
### `src/server/normalizeOptionalText.js`
|
|
191
|
+
Exports
|
|
192
|
+
- `normalizeOptionalText(value)`
|
|
212
193
|
|
|
213
194
|
### `src/server/repositorySupport.js`
|
|
214
195
|
Exports
|
|
@@ -227,115 +208,121 @@ Exports
|
|
|
227
208
|
Local functions
|
|
228
209
|
- `resolveOptionalFieldDefinitions(definition, options = {})`
|
|
229
210
|
- `requireFieldDefinitions(definition, { context = "crudRepository", schemaLabel = "schema definition", defaultMode = "patch" } = {})`
|
|
230
|
-
- `resolveFieldDefinitionType(definition
|
|
211
|
+
- `resolveFieldDefinitionType(definition)`
|
|
231
212
|
- `definitionIncludesStringType(definition = {})`
|
|
232
213
|
- `definitionIncludesDateTimeType(definition = {})`
|
|
233
214
|
- `definitionIncludesRecordIdType(definition = {})`
|
|
234
215
|
|
|
216
|
+
### `src/server/resourceRuntime/compiledRuntime.js`
|
|
217
|
+
Exports
|
|
218
|
+
- `buildCompiledCrudRepositoryRuntime(resource, repositoryOptions)`
|
|
219
|
+
Local functions
|
|
220
|
+
- `requireCrudRepositoryOptions(value)`
|
|
221
|
+
- `resolveRepositoryDefaults(resource, repositoryMapping, { context })`
|
|
222
|
+
- `normalizeCrudVirtualFieldHandlers(virtualFields = {}, repositoryMapping, { context })`
|
|
223
|
+
- `resolveRecordOutputValidator(resource, { context })`
|
|
224
|
+
- `resolveOperationBodyValidator(resource, operationKey, { context })`
|
|
225
|
+
- `normalizeCrudRepositoryOperationStage(stage, stageLabel, { context })`
|
|
226
|
+
- `normalizeCrudRepositoryOperationConfig(config, operationKey, { context })`
|
|
227
|
+
- `normalizeCrudRepositoryOperations(sourceOperations, { context })`
|
|
228
|
+
|
|
235
229
|
### `src/server/resourceRuntime/index.js`
|
|
236
230
|
Exports
|
|
237
|
-
- `createCrudResourceRuntime(resource
|
|
231
|
+
- `createCrudResourceRuntime(resource, knex, repositoryOptions = {})`
|
|
232
|
+
- `type RuntimeKnex`
|
|
233
|
+
Local functions
|
|
234
|
+
- `requireCrudRecordId(value, { context })`
|
|
235
|
+
- `resolveCrudRepositoryCall(runtime, knex, callOptions)`
|
|
236
|
+
- `applyCrudRepositoryReadLock(dbQuery, callOptions)`
|
|
237
|
+
- `listRecords(runtime, knex, query, callOptions)`
|
|
238
|
+
- `findRecordById(runtime, knex, recordId, callOptions)`
|
|
239
|
+
- `listRecordsByIds(runtime, knex, ids, callOptions)`
|
|
240
|
+
- `createRecord(runtime, knex, payload, callOptions)`
|
|
241
|
+
- `updateRecordById(runtime, knex, recordId, patch, callOptions)`
|
|
242
|
+
- `deleteRecordById(runtime, knex, recordId, callOptions)`
|
|
243
|
+
|
|
244
|
+
### `src/server/resourceRuntime/listControls.js`
|
|
245
|
+
Exports
|
|
246
|
+
- `resolveListRuntimeConfig(list = {}, fallbackSearchColumns, { idColumn })`
|
|
247
|
+
- `encodeOrderedListCursor(row, orderBy)`
|
|
248
|
+
- `applyOrderedListCursorFilter(query, { orderBy, cursor })`
|
|
249
|
+
- `enforceCrudRepositoryListControls(dbQuery, { idColumn, limit, orderBy })`
|
|
238
250
|
Local functions
|
|
239
|
-
- `
|
|
240
|
-
- `requireCrudRepositoryOptions(value = {}, { context = "crudRepository" } = {})`
|
|
241
|
-
- `resolveRepositoryDefaults(resource = {}, repositoryMapping = {}, { context = "crudRepository" } = {})`
|
|
242
|
-
- `normalizeCrudVirtualFieldHandlers(virtualFields = {}, repositoryMapping = {}, { context = "crudRepository" } = {})`
|
|
243
|
-
- `applyCrudRepositoryVirtualProjections(dbQuery, runtime = {}, { knex, tableName } = {})`
|
|
244
|
-
- `normalizeSearchColumns(searchColumns = [], fallbackColumns = [])`
|
|
251
|
+
- `normalizeSearchColumns(searchColumns, fallbackColumns)`
|
|
245
252
|
- `normalizeListOrderDirection(value = LIST_ORDER_DIRECTION_ASC)`
|
|
246
253
|
- `normalizeListOrderNulls(value = LIST_ORDER_NULLS_LAST)`
|
|
247
|
-
- `normalizeListOrderBy(orderBy
|
|
248
|
-
- `resolveListRuntimeConfig(list = {}, fallbackSearchColumns = [], { idColumn = "id" } = {})`
|
|
249
|
-
- `resolveRecordOutputValidator(resource = {}, { context = "crudRepository" } = {})`
|
|
250
|
-
- `resolveOperationBodyValidator(resource = {}, operationKey = "", { context = "crudRepository" } = {})`
|
|
251
|
-
- `extractExplicitFieldErrors(error)`
|
|
252
|
-
- `normalizeRepositoryInputPayload(runtime = {}, payload = {}, { operationKey = "create", phase = "crudCreate", action = "create", recordId = null, existingRecord = null, actionContextBase = {} } = {})`
|
|
253
|
-
- `normalizeRepositoryOutputRecord(runtime = {}, record = {}, { operation = "list" } = {})`
|
|
254
|
+
- `normalizeListOrderBy(orderBy, { idColumn })`
|
|
254
255
|
- `encodeOrderedListCursorValue(value = null)`
|
|
255
256
|
- `decodeOrderedListCursorValue(value = null)`
|
|
256
|
-
- `
|
|
257
|
-
- `decodeOrderedListCursor(cursor = "", orderBy = [])`
|
|
257
|
+
- `decodeOrderedListCursor(cursor, orderBy)`
|
|
258
258
|
- `applyOrderedListCursorEquality(query, descriptor = {}, value = null)`
|
|
259
259
|
- `applyOrderedListCursorAfterBranch(query, descriptor = {}, value = null)`
|
|
260
260
|
- `canApplyOrderedListCursorAfterBranch(descriptor = {}, value = null)`
|
|
261
261
|
- `appendOrderedListCursorBranches(query, orderBy = [], cursorValues = [], index = 0, { useOr = false } = {})`
|
|
262
|
-
- `
|
|
263
|
-
- `normalizeCrudRepositoryOperationStage(stage = null, stageLabel = "", { context = "crudRepository" } = {})`
|
|
264
|
-
- `normalizeCrudRepositoryOperationConfig(config = {}, operationKey = "", { context = "crudRepository" } = {})`
|
|
265
|
-
- `normalizeCrudRepositoryOperations(sourceOperations = {}, { context = "crudRepository" } = {})`
|
|
266
|
-
- `applyConfiguredQueryStage(dbQuery, stage = null, stageContext = {}, { context = "crudRepository", stageKey = "applyQuery" } = {})`
|
|
267
|
-
- `isCrudRepositoryQueryBuilder(value)`
|
|
268
|
-
- `normalizeCrudRepositoryObjectInput(value = {})`
|
|
269
|
-
- `applyConfiguredObjectStage(payload = {}, stage = null, stageContext = {}, { context = "crudRepository", stageKey = "preparePayload" } = {})`
|
|
270
|
-
- `applyOrderedListControls(dbQuery, orderBy = [])`
|
|
271
|
-
- `enforceCrudRepositoryListControls(dbQuery, { idColumn = "id", limit = DEFAULT_LIST_LIMIT + 1, orderBy = [] } = {})`
|
|
272
|
-
- `createCrudRepositoryActionContextBase(runtime, callOptions = {})`
|
|
273
|
-
- `createCompiledCrudRepositoryRuntime(resource = {}, repositoryOptions = {})`
|
|
274
|
-
- `resolveCrudRepositoryCall(runtime, knex, callOptions = {})`
|
|
275
|
-
- `applyCrudRepositoryReadLock(dbQuery, callOptions = {})`
|
|
276
|
-
- `listRecords(runtime, knex, query = {}, callOptions = {})`
|
|
277
|
-
- `findRecordById(runtime, knex, recordId, callOptions = {})`
|
|
278
|
-
- `listRecordsByIds(runtime, knex, ids = [], callOptions = {})`
|
|
279
|
-
- `createRecord(runtime, knex, payload = {}, callOptions = {})`
|
|
280
|
-
- `updateRecordById(runtime, knex, recordId, patch = {}, callOptions = {})`
|
|
281
|
-
- `deleteRecordById(runtime, knex, recordId, callOptions = {})`
|
|
262
|
+
- `applyOrderedListControls(dbQuery, orderBy)`
|
|
282
263
|
|
|
283
264
|
### `src/server/resourceRuntime/lookupHydration.js`
|
|
284
265
|
Exports
|
|
285
|
-
- `
|
|
286
|
-
- `hydrateCrudLookupRecords(records
|
|
266
|
+
- `buildCrudLookupRuntime(resource, { outputKeys, context })`
|
|
267
|
+
- `hydrateCrudLookupRecords(records, runtime, { include, mode, repositoryOptions, callOptions })`
|
|
268
|
+
- `type LookupRuntime`
|
|
287
269
|
Local functions
|
|
288
|
-
- `normalizeLookupRelationEntry(entry
|
|
270
|
+
- `normalizeLookupRelationEntry(entry, outputKeys)`
|
|
289
271
|
- `normalizeLookupDefaultInclude(value)`
|
|
290
272
|
- `normalizeLookupMaxDepth(value)`
|
|
291
|
-
- `resolveLookupRuntimeDefaults(resource
|
|
273
|
+
- `resolveLookupRuntimeDefaults(resource)`
|
|
292
274
|
- `normalizeLookupIdentifier(value)`
|
|
293
|
-
- `normalizeIncludePaths(include,
|
|
294
|
-
- `resolveChildIncludeFromPaths(paths
|
|
295
|
-
- `shouldHydrateByMode(entry
|
|
296
|
-
- `buildLookupHydrationPlan(runtime
|
|
297
|
-
- `resolveLookupResolver(repositoryOptions
|
|
298
|
-
- `resolveLookupDepthRuntime(runtime
|
|
299
|
-
- `buildLookupGroupKey(relation
|
|
300
|
-
- `normalizeLookupRelationValues(records
|
|
301
|
-
- `resolveGroupChildInclude(group
|
|
302
|
-
- `normalizeLookup(provider, relation
|
|
303
|
-
- `
|
|
304
|
-
- `
|
|
305
|
-
- `
|
|
306
|
-
- `
|
|
307
|
-
|
|
275
|
+
- `normalizeIncludePaths(include, defaultInclude)`
|
|
276
|
+
- `resolveChildIncludeFromPaths(paths)`
|
|
277
|
+
- `shouldHydrateByMode(entry, mode)`
|
|
278
|
+
- `buildLookupHydrationPlan(runtime, include, { mode, includeWasExplicit, skippedNamespaces })`
|
|
279
|
+
- `resolveLookupResolver(repositoryOptions, callOptions, { context })`
|
|
280
|
+
- `resolveLookupDepthRuntime(runtime, repositoryOptions, callOptions)`
|
|
281
|
+
- `buildLookupGroupKey(relation)`
|
|
282
|
+
- `normalizeLookupRelationValues(records, entries, childIncludeByKey)`
|
|
283
|
+
- `resolveGroupChildInclude(group)`
|
|
284
|
+
- `normalizeLookup(provider, relation, { context })`
|
|
285
|
+
- `resolveLookupVisibilityContext(provider, relation, callOptions, { context })`
|
|
286
|
+
- `buildLookupRecordMap(records, valueKey)`
|
|
287
|
+
- `buildLookupCollectionMap(records, foreignKey)`
|
|
288
|
+
- `resolveLookupVisitedNamespaces(runtime, callOptions)`
|
|
289
|
+
|
|
290
|
+
### `src/server/resourceRuntime/operationStages.js`
|
|
291
|
+
Exports
|
|
292
|
+
- `applyCrudRepositoryVirtualProjections(dbQuery, runtime, { knex, tableName })`
|
|
293
|
+
- `applyConfiguredQueryStage(dbQuery, stage, stageContext, { context, stageKey })`
|
|
294
|
+
- `applyConfiguredObjectStage(payload, stage, stageContext, { context, stageKey })`
|
|
295
|
+
- `buildCrudRepositoryActionContextBase(runtime, callOptions)`
|
|
296
|
+
Local functions
|
|
297
|
+
- `isCrudRepositoryQueryBuilder(value)`
|
|
298
|
+
|
|
299
|
+
### `src/server/resourceRuntime/recordValidation.js`
|
|
300
|
+
Exports
|
|
301
|
+
- `normalizeRepositoryInputPayload(runtime, payload, operationKey)`
|
|
302
|
+
- `normalizeRepositoryOutputRecord(runtime, record, { operation })`
|
|
308
303
|
|
|
309
304
|
### `src/server/routeContracts.js`
|
|
310
305
|
Exports
|
|
311
|
-
- `createCrudJsonApiRouteContracts({ resource = {}, routeParamsValidator = null, operations = ["list", "view", "create", "update", "delete"], operationInputs = {}, listSearchQueryValidator = defaultListSearchQueryValidator, lookupIncludeQueryValidator = defaultLookupIncludeQueryValidator, listFilterQueryValidator = null } = {})`
|
|
306
|
+
- `createCrudJsonApiRouteContracts({ // readable-check: allow dependency-default - data: a resource definition resource = {}, routeParamsValidator = null, operations = ["list", "view", "create", "update", "delete"], operationInputs = {}, listSearchQueryValidator = defaultListSearchQueryValidator, lookupIncludeQueryValidator = defaultLookupIncludeQueryValidator, // readable-check: allow dependency-default - data: an optional input schema listFilterQueryValidator = null } = {})`
|
|
312
307
|
- `resolveJsonApiRelationshipEntries`
|
|
313
308
|
Local functions
|
|
314
|
-
- `isRecord(value)`
|
|
315
309
|
- `readOwnValue(source = {}, key = "")`
|
|
316
|
-
- `resolveLookupContainer(record
|
|
310
|
+
- `resolveLookupContainer(record, lookupContainerKey = "")`
|
|
317
311
|
- `resolveRelationshipValueSource(record = {}, entry = {}, { lookupContainerKey = "", preferLookup = false } = {})`
|
|
318
|
-
- `normalizeLookupId(value)`
|
|
319
312
|
- `normalizeRelationshipIdentifierId(value = null)`
|
|
320
|
-
- `
|
|
313
|
+
- `buildRelationshipIdentifier(entry = {}, value = null)`
|
|
321
314
|
- `createRecordAttributesResolver(definition = null, { excludeKeys = [] } = {})`
|
|
322
315
|
- `createRecordRelationshipsResolver(definition = null, { lookupContainerKey = "" } = {})`
|
|
323
316
|
- `createRequestRelationshipMapper(definition = null)`
|
|
324
|
-
- `resolveOutputAttributeExcludeKeys(resource
|
|
325
|
-
- `resolveLookupContainerKey(resource = {})`
|
|
317
|
+
- `resolveOutputAttributeExcludeKeys(resource)`
|
|
326
318
|
- `normalizeIncludedLookupRecord(source = null, fallbackId = null)`
|
|
327
319
|
- `appendIncludedRelationshipResource({ included = [], seen = new Set(), entry = {}, lookupRecord = null, fallbackId = null } = {})`
|
|
328
320
|
- `createLookupIncludedResolver(definition = null, { lookupContainerKey = "" } = {})`
|
|
329
321
|
|
|
330
322
|
### `src/server/serviceEvents.js`
|
|
331
323
|
Exports
|
|
332
|
-
- `
|
|
333
|
-
- `createCrudJsonApiServiceEvents(namespace = "", { context = "createCrudJsonApiServiceEvents" } = {})`
|
|
334
|
-
- `resolveCrudEntityIdFromArgs({ args = [] } = {})`
|
|
335
|
-
- `resolveCrudEntityIdFromResult({ result } = {})`
|
|
324
|
+
- `buildCrudRecordChangedEvent({ namespace, operation, entityId, audience })`
|
|
336
325
|
- `resolveCrudJsonApiEntityIdFromResult({ result } = {})`
|
|
337
|
-
Local functions
|
|
338
|
-
- `normalizeCrudEventEntityId(value = null)`
|
|
339
326
|
|
|
340
327
|
### `src/server/serviceMethods.js`
|
|
341
328
|
Exports
|
|
@@ -346,9 +333,26 @@ Exports
|
|
|
346
333
|
- `crudServiceUpdateRecord(runtime, repository, fieldAccess = {}, recordId, payload = {}, options = {})`
|
|
347
334
|
- `crudServiceDeleteRecord(runtime, repository, fieldAccess = {}, recordId, options = {})`
|
|
348
335
|
Local functions
|
|
349
|
-
- `requireCrudServiceRepository(runtime = {}, repository = null)`
|
|
350
336
|
- `splitCrudListRepositoryCall(query = {}, options = {})`
|
|
351
337
|
|
|
338
|
+
### `src/server/types.js`
|
|
339
|
+
Exports
|
|
340
|
+
- `type CrudResourceDefinition`
|
|
341
|
+
- `type CrudRepository`
|
|
342
|
+
- `type CrudService`
|
|
343
|
+
- `type CrudJsonApiResult`
|
|
344
|
+
- `type CrudScope`
|
|
345
|
+
- `type CrudResourceApi`
|
|
346
|
+
- `type CrudCustomActionInvocation`
|
|
347
|
+
- `type CrudLifecycleContext`
|
|
348
|
+
- `type CrudLifecycleHooks`
|
|
349
|
+
- `type CrudOperationLifecycle`
|
|
350
|
+
- `type CrudRecordRepository`
|
|
351
|
+
- `type CompiledCrudRepositoryRuntime`
|
|
352
|
+
- `type CrudLookupRepository`
|
|
353
|
+
- `type CrudFieldAccess`
|
|
354
|
+
- `type CrudServiceRuntime`
|
|
355
|
+
|
|
352
356
|
### patterns
|
|
353
357
|
|
|
354
358
|
### `patterns/json-api-resource-package/example/migrations/20260815000000_books.cjs`
|
|
@@ -359,6 +363,10 @@ Exports
|
|
|
359
363
|
Exports
|
|
360
364
|
- `BooksFeature`
|
|
361
365
|
|
|
366
|
+
### `patterns/json-api-resource-package/example/packages/books/src/server/types.js`
|
|
367
|
+
Exports
|
|
368
|
+
- `type AppBooks`
|
|
369
|
+
|
|
362
370
|
### `patterns/json-api-resource-package/example/packages/books/src/shared/bookResource.js`
|
|
363
371
|
Exports
|
|
364
372
|
- `bookResource`
|
|
@@ -25,12 +25,10 @@ Exports
|
|
|
25
25
|
### `src/shared/dialect.js`
|
|
26
26
|
Exports
|
|
27
27
|
- `DIALECT_ID`
|
|
28
|
-
- `getDialectId()`
|
|
29
28
|
|
|
30
29
|
### `src/shared/index.js`
|
|
31
30
|
Exports
|
|
32
31
|
- `DIALECT_ID`
|
|
33
|
-
- `getDialectId`
|
|
34
32
|
- `introspectCrudTableSnapshot`
|
|
35
33
|
|
|
36
34
|
### `src/shared/introspectCrudTable.js`
|
|
@@ -14,31 +14,55 @@ Use this on demand; do not load the full index at startup.
|
|
|
14
14
|
|
|
15
15
|
### src
|
|
16
16
|
|
|
17
|
+
### `src/server/database.js`
|
|
18
|
+
Exports
|
|
19
|
+
- `createDatabase({ driver, env })`
|
|
20
|
+
Local functions
|
|
21
|
+
- `resolveDriverDialectId(driver)`
|
|
22
|
+
|
|
17
23
|
### `src/server/databaseSetup.js`
|
|
18
24
|
Exports
|
|
19
|
-
- `prepareDatabaseFromApp({ client, appRoot = process.cwd(), environment
|
|
20
|
-
- `runDatabaseSetup({ knex, seed, appRoot = process.cwd(), environment
|
|
25
|
+
- `prepareDatabaseFromApp({ client, appRoot = process.cwd(), environment, migrationsDirectory = "migrations", seed })`
|
|
26
|
+
- `runDatabaseSetup({ knex, seed, appRoot = process.cwd(), environment })`
|
|
21
27
|
Local functions
|
|
22
28
|
- `normalizeMigrationResult(result)`
|
|
23
29
|
|
|
30
|
+
### `src/server/foreignKeyMigrations.js`
|
|
31
|
+
Exports
|
|
32
|
+
- `addMissingForeignKey(knex, key)`
|
|
33
|
+
- `dropForeignKeyIfPresent(knex, key)`
|
|
34
|
+
- `hasForeignKey(knex, key)`
|
|
35
|
+
- `type ForeignKey`
|
|
36
|
+
Local functions
|
|
37
|
+
- `findForeignKeyName(knex, { tableName, columnName, parentTable, parentColumn = "id" })`
|
|
38
|
+
|
|
24
39
|
### `src/server/knexFactory.js`
|
|
25
40
|
Exports
|
|
26
41
|
- `loadKnexFactory()`
|
|
27
42
|
|
|
28
43
|
### `src/server/knexMigrationConfig.js`
|
|
29
44
|
Exports
|
|
30
|
-
- `createKnexMigrationConfig({ client, environment
|
|
31
|
-
- `createKnexMigrationConfigFromApp(options
|
|
45
|
+
- `createKnexMigrationConfig({ client, environment, appRoot = process.cwd(), migrationsDirectory = "migrations", // readable-check: allow dependency-default - data: a list of directory paths, not a collaborator packageMigrationDirectories = [], // readable-check: allow dependency-default - data: a list of directory paths, not a collaborator packageConstraintDirectories = [] })`
|
|
46
|
+
- `createKnexMigrationConfigFromApp(options)`
|
|
32
47
|
- `discoverPackageMigrationDirectories({ appRoot = process.cwd() } = {})`
|
|
33
48
|
Local functions
|
|
34
49
|
- `directoryExists(directory)`
|
|
50
|
+
- `migrationsAfterOf({ packageId, packageMetadata }, installedPackageIds)`
|
|
51
|
+
- `orderPackageMigrationDirectories(directories, packageIdOf, afterOf)`
|
|
52
|
+
- `packageConstraintDirectoriesOf(packageMigrationDirectories)`
|
|
35
53
|
|
|
36
54
|
### `src/server/providers/DatabaseProvider.js`
|
|
37
55
|
Exports
|
|
38
56
|
- `DatabaseProvider`
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
57
|
+
|
|
58
|
+
### `src/server/types.js`
|
|
59
|
+
Exports
|
|
60
|
+
- `type RuntimeDatabase`
|
|
61
|
+
- `type RuntimeKnex`
|
|
62
|
+
- `type RuntimeTransactionManager`
|
|
63
|
+
- `type RuntimeKnexTransaction`
|
|
64
|
+
- `type RuntimeKnexQueryBuilder`
|
|
65
|
+
- `type RuntimeDatabaseDriver`
|
|
42
66
|
|
|
43
67
|
### `src/shared/databaseClient.js`
|
|
44
68
|
Exports
|
|
@@ -82,6 +106,7 @@ Exports
|
|
|
82
106
|
Exports
|
|
83
107
|
- `findDuplicateEntryError(error, { dialect = "", client = null } = {})`
|
|
84
108
|
- `isDuplicateEntryError(error, options)`
|
|
109
|
+
- `isLostDuplicateInsertRace(error, options)`
|
|
85
110
|
Local functions
|
|
86
111
|
- `isMysqlDuplicateEntryError(error)`
|
|
87
112
|
- `isPostgresDuplicateEntryError(error)`
|
|
@@ -101,9 +126,11 @@ Exports
|
|
|
101
126
|
- `toKnexClientId`
|
|
102
127
|
- `findDuplicateEntryError`
|
|
103
128
|
- `isDuplicateEntryError`
|
|
129
|
+
- `isLostDuplicateInsertRace`
|
|
104
130
|
- `DEFAULT_VISIBILITY_COLUMNS`
|
|
105
131
|
- `applyVisibility`
|
|
106
132
|
- `applyVisibilityOwners`
|
|
133
|
+
- `resolveTransaction`
|
|
107
134
|
- `resolveQueryOptions`
|
|
108
135
|
- `resolveRepoClient`
|
|
109
136
|
- `applyForUpdate`
|
|
@@ -118,11 +145,13 @@ Exports
|
|
|
118
145
|
- `retryDeadlocks`
|
|
119
146
|
- `runInTransaction`
|
|
120
147
|
- `createWithTransaction`
|
|
148
|
+
- `joinOrOpenTransaction`
|
|
121
149
|
- `lockScopedRecordId`
|
|
122
150
|
|
|
123
151
|
### `src/shared/repositoryOptions.js`
|
|
124
152
|
Exports
|
|
125
|
-
- `
|
|
153
|
+
- `resolveTransaction(options)`
|
|
154
|
+
- `resolveQueryOptions(options)`
|
|
126
155
|
- `resolveRepoClient(dbClient, options = {})`
|
|
127
156
|
- `applyForUpdate(query, options = {})`
|
|
128
157
|
- `parseJsonObject(value, fallback = {})`
|
|
@@ -136,14 +165,14 @@ Exports
|
|
|
136
165
|
- `retryDeadlocks(run, { retries = 3 } = {})`
|
|
137
166
|
- `runInTransaction(knex, callback, options = {})`
|
|
138
167
|
- `createWithTransaction(knex)`
|
|
168
|
+
- `joinOrOpenTransaction(options, withTransaction, work)`
|
|
139
169
|
- `lockScopedRecordId({ trx, tableName, recordId, scopeId, idColumn = "id", scopeColumn = "workspace_id" } = {})`
|
|
140
170
|
Local functions
|
|
141
171
|
- `requireSqlIdentifier(value, label)`
|
|
142
172
|
|
|
143
173
|
### `src/shared/transactionManager.js`
|
|
144
174
|
Exports
|
|
145
|
-
- `
|
|
146
|
-
- `createTransactionManager(options = {})`
|
|
175
|
+
- `createTransactionManager({ knex })`
|
|
147
176
|
|
|
148
177
|
### `src/shared/visibility.js`
|
|
149
178
|
Exports
|