@satorio/machinery 0.2.1
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/LICENSE +21 -0
- package/README.md +71 -0
- package/dictionary/all.json +4656 -0
- package/dictionary/all.toon +639 -0
- package/dictionary/core.json +221 -0
- package/dictionary/core.toon +33 -0
- package/dictionary/graphql.json +212 -0
- package/dictionary/graphql.toon +32 -0
- package/dictionary/http.json +113 -0
- package/dictionary/http.toon +21 -0
- package/dictionary/identifiers.json +266 -0
- package/dictionary/identifiers.toon +38 -0
- package/dictionary/index.json +96 -0
- package/dictionary/index.toon +18 -0
- package/dictionary/integration.json +131 -0
- package/dictionary/integration.toon +23 -0
- package/dictionary/money.json +383 -0
- package/dictionary/money.toon +51 -0
- package/dictionary/ports.json +392 -0
- package/dictionary/ports.toon +52 -0
- package/dictionary/postgres.json +473 -0
- package/dictionary/postgres.toon +61 -0
- package/dictionary/publishing.json +131 -0
- package/dictionary/publishing.toon +23 -0
- package/dictionary/queue.json +365 -0
- package/dictionary/queue.toon +49 -0
- package/dictionary/reference/api.mdx +843 -0
- package/dictionary/reference/uk/api.mdx +844 -0
- package/dictionary/storage.json +194 -0
- package/dictionary/storage.toon +30 -0
- package/dictionary/testing.json +707 -0
- package/dictionary/testing.toon +87 -0
- package/dictionary/time.json +311 -0
- package/dictionary/time.toon +43 -0
- package/dictionary/vitest.json +356 -0
- package/dictionary/vitest.toon +48 -0
- package/dictionary/workflow.json +185 -0
- package/dictionary/workflow.toon +29 -0
- package/dist/bin/command.d.ts +45 -0
- package/dist/bin/command.js +113 -0
- package/dist/bin.d.ts +2 -0
- package/dist/bin.js +11 -0
- package/dist/core/bigint-json.d.ts +6 -0
- package/dist/core/bigint-json.js +6 -0
- package/dist/core/closed-set.d.ts +14 -0
- package/dist/core/closed-set.js +8 -0
- package/dist/core/domain-error.d.ts +8 -0
- package/dist/core/domain-error.js +11 -0
- package/dist/core/environment.d.ts +124 -0
- package/dist/core/environment.js +115 -0
- package/dist/core/index.d.ts +13 -0
- package/dist/core/index.js +13 -0
- package/dist/core/ulid.d.ts +27 -0
- package/dist/core/ulid.js +27 -0
- package/dist/graphql/builder.d.ts +36 -0
- package/dist/graphql/builder.js +35 -0
- package/dist/graphql/context.d.ts +36 -0
- package/dist/graphql/context.js +69 -0
- package/dist/graphql/failure-classification.d.ts +11 -0
- package/dist/graphql/failure-classification.js +1 -0
- package/dist/graphql/failures.d.ts +62 -0
- package/dist/graphql/failures.js +30 -0
- package/dist/graphql/graphiql.d.ts +45 -0
- package/dist/graphql/graphiql.js +56 -0
- package/dist/graphql/index.d.ts +15 -0
- package/dist/graphql/index.js +14 -0
- package/dist/graphql/layer.d.ts +15 -0
- package/dist/graphql/layer.js +23 -0
- package/dist/graphql/request-handler.d.ts +26 -0
- package/dist/graphql/request-handler.js +33 -0
- package/dist/graphql/server.d.ts +19 -0
- package/dist/graphql/server.js +16 -0
- package/dist/graphql/settings.d.ts +55 -0
- package/dist/graphql/settings.js +82 -0
- package/dist/http/health.d.ts +70 -0
- package/dist/http/health.js +60 -0
- package/dist/http/index.d.ts +5 -0
- package/dist/http/index.js +5 -0
- package/dist/identifiers/client-code.d.ts +37 -0
- package/dist/identifiers/client-code.js +41 -0
- package/dist/identifiers/creditor-reference.d.ts +38 -0
- package/dist/identifiers/creditor-reference.js +32 -0
- package/dist/identifiers/damm.d.ts +22 -0
- package/dist/identifiers/damm.js +50 -0
- package/dist/identifiers/document-number.d.ts +68 -0
- package/dist/identifiers/document-number.js +73 -0
- package/dist/identifiers/document-numbers.d.ts +27 -0
- package/dist/identifiers/document-numbers.js +16 -0
- package/dist/identifiers/failures.d.ts +46 -0
- package/dist/identifiers/failures.js +48 -0
- package/dist/identifiers/index.d.ts +14 -0
- package/dist/identifiers/index.js +13 -0
- package/dist/identifiers/next-document-number.d.ts +26 -0
- package/dist/identifiers/next-document-number.js +31 -0
- package/dist/identifiers/ulid.d.ts +28 -0
- package/dist/identifiers/ulid.js +71 -0
- package/dist/integration/external-http-client.d.ts +22 -0
- package/dist/integration/external-http-client.js +74 -0
- package/dist/integration/index.d.ts +12 -0
- package/dist/integration/index.js +12 -0
- package/dist/integration/layer.d.ts +19 -0
- package/dist/integration/layer.js +30 -0
- package/dist/integration/retry.d.ts +65 -0
- package/dist/integration/retry.js +54 -0
- package/dist/integration/settings.d.ts +73 -0
- package/dist/integration/settings.js +92 -0
- package/dist/money/amount.d.ts +60 -0
- package/dist/money/amount.js +67 -0
- package/dist/money/arithmetic.d.ts +60 -0
- package/dist/money/arithmetic.js +73 -0
- package/dist/money/currency.d.ts +25 -0
- package/dist/money/currency.js +24 -0
- package/dist/money/decimal.d.ts +29 -0
- package/dist/money/decimal.js +39 -0
- package/dist/money/exchange-rate.d.ts +32 -0
- package/dist/money/exchange-rate.js +28 -0
- package/dist/money/failures.d.ts +86 -0
- package/dist/money/failures.js +97 -0
- package/dist/money/index.d.ts +15 -0
- package/dist/money/index.js +15 -0
- package/dist/money/percent.d.ts +35 -0
- package/dist/money/percent.js +50 -0
- package/dist/money/schema.d.ts +25 -0
- package/dist/money/schema.js +41 -0
- package/dist/ports/blob-store.d.ts +42 -0
- package/dist/ports/blob-store.js +13 -0
- package/dist/ports/document-number-counter.d.ts +36 -0
- package/dist/ports/document-number-counter.js +12 -0
- package/dist/ports/event-publisher.d.ts +29 -0
- package/dist/ports/event-publisher.js +13 -0
- package/dist/ports/external-http-client.d.ts +60 -0
- package/dist/ports/external-http-client.js +25 -0
- package/dist/ports/index.d.ts +17 -0
- package/dist/ports/index.js +17 -0
- package/dist/ports/integration-event-outbox.d.ts +44 -0
- package/dist/ports/integration-event-outbox.js +13 -0
- package/dist/ports/port-unavailable.d.ts +21 -0
- package/dist/ports/port-unavailable.js +30 -0
- package/dist/ports/processed-event-registry.d.ts +57 -0
- package/dist/ports/processed-event-registry.js +24 -0
- package/dist/ports/queue-message-producer.d.ts +26 -0
- package/dist/ports/queue-message-producer.js +12 -0
- package/dist/ports/queue-message-source.d.ts +39 -0
- package/dist/ports/queue-message-source.js +13 -0
- package/dist/ports/readiness-probe.d.ts +27 -0
- package/dist/ports/readiness-probe.js +13 -0
- package/dist/ports/transaction-boundary.d.ts +28 -0
- package/dist/ports/transaction-boundary.js +13 -0
- package/dist/postgres/client.d.ts +51 -0
- package/dist/postgres/client.js +81 -0
- package/dist/postgres/document-number-counter.d.ts +14 -0
- package/dist/postgres/document-number-counter.js +27 -0
- package/dist/postgres/failures.d.ts +28 -0
- package/dist/postgres/failures.js +18 -0
- package/dist/postgres/index.d.ts +18 -0
- package/dist/postgres/index.js +18 -0
- package/dist/postgres/integration-event-outbox.d.ts +15 -0
- package/dist/postgres/integration-event-outbox.js +60 -0
- package/dist/postgres/jsonb-value.d.ts +10 -0
- package/dist/postgres/jsonb-value.js +9 -0
- package/dist/postgres/layer.d.ts +57 -0
- package/dist/postgres/layer.js +72 -0
- package/dist/postgres/migrations/advisory-lock.d.ts +47 -0
- package/dist/postgres/migrations/advisory-lock.js +59 -0
- package/dist/postgres/migrations/runner.d.ts +56 -0
- package/dist/postgres/migrations/runner.js +69 -0
- package/dist/postgres/migrations/sql-file-loader.d.ts +59 -0
- package/dist/postgres/migrations/sql-file-loader.js +99 -0
- package/dist/postgres/processed-event-registry.d.ts +13 -0
- package/dist/postgres/processed-event-registry.js +44 -0
- package/dist/postgres/readiness-probe.d.ts +27 -0
- package/dist/postgres/readiness-probe.js +33 -0
- package/dist/postgres/settings.d.ts +134 -0
- package/dist/postgres/settings.js +210 -0
- package/dist/postgres/sql/0001_processed_event.sql +4 -0
- package/dist/postgres/sql/0002_integration_event_outbox.sql +13 -0
- package/dist/postgres/sql/0003_document_number_counter.sql +6 -0
- package/dist/postgres/sql-failure.d.ts +19 -0
- package/dist/postgres/sql-failure.js +22 -0
- package/dist/postgres/store-failure.d.ts +17 -0
- package/dist/postgres/store-failure.js +16 -0
- package/dist/postgres/transaction-boundary.d.ts +13 -0
- package/dist/postgres/transaction-boundary.js +21 -0
- package/dist/publishing/event-publisher.sns.d.ts +66 -0
- package/dist/publishing/event-publisher.sns.js +75 -0
- package/dist/publishing/event-publisher.stdout.d.ts +15 -0
- package/dist/publishing/event-publisher.stdout.js +24 -0
- package/dist/publishing/index.d.ts +10 -0
- package/dist/publishing/index.js +10 -0
- package/dist/publishing/layer.d.ts +25 -0
- package/dist/publishing/layer.js +39 -0
- package/dist/publishing/settings.d.ts +60 -0
- package/dist/publishing/settings.js +85 -0
- package/dist/queue/consumer.d.ts +91 -0
- package/dist/queue/consumer.js +92 -0
- package/dist/queue/envelope.d.ts +39 -0
- package/dist/queue/envelope.js +39 -0
- package/dist/queue/failures.d.ts +33 -0
- package/dist/queue/failures.js +15 -0
- package/dist/queue/index.d.ts +14 -0
- package/dist/queue/index.js +14 -0
- package/dist/queue/layer.d.ts +33 -0
- package/dist/queue/layer.js +58 -0
- package/dist/queue/message-codec.d.ts +43 -0
- package/dist/queue/message-codec.js +33 -0
- package/dist/queue/queue-message-producer.d.ts +61 -0
- package/dist/queue/queue-message-producer.js +52 -0
- package/dist/queue/queue-message-source.d.ts +93 -0
- package/dist/queue/queue-message-source.js +86 -0
- package/dist/queue/readiness.d.ts +78 -0
- package/dist/queue/readiness.js +86 -0
- package/dist/queue/settings.d.ts +106 -0
- package/dist/queue/settings.js +160 -0
- package/dist/storage/blob-store.d.ts +84 -0
- package/dist/storage/blob-store.js +109 -0
- package/dist/storage/index.d.ts +9 -0
- package/dist/storage/index.js +9 -0
- package/dist/storage/layer.d.ts +17 -0
- package/dist/storage/layer.js +30 -0
- package/dist/storage/settings.d.ts +48 -0
- package/dist/storage/settings.js +65 -0
- package/dist/testing/blob-store.d.ts +27 -0
- package/dist/testing/blob-store.js +45 -0
- package/dist/testing/clock.d.ts +29 -0
- package/dist/testing/clock.js +41 -0
- package/dist/testing/dna-perturbator/attention.d.ts +55 -0
- package/dist/testing/dna-perturbator/attention.js +49 -0
- package/dist/testing/dna-perturbator/chains.d.ts +31 -0
- package/dist/testing/dna-perturbator/chains.js +53 -0
- package/dist/testing/dna-perturbator/report.d.ts +12 -0
- package/dist/testing/dna-perturbator/report.js +22 -0
- package/dist/testing/dna-perturbator/verdict.d.ts +26 -0
- package/dist/testing/dna-perturbator/verdict.js +28 -0
- package/dist/testing/dna-perturbator.d.ts +48 -0
- package/dist/testing/dna-perturbator.js +145 -0
- package/dist/testing/document-number-counter.d.ts +29 -0
- package/dist/testing/document-number-counter.js +39 -0
- package/dist/testing/event-publisher.d.ts +28 -0
- package/dist/testing/event-publisher.js +33 -0
- package/dist/testing/external-http-client.d.ts +29 -0
- package/dist/testing/external-http-client.js +49 -0
- package/dist/testing/index.d.ts +24 -0
- package/dist/testing/index.js +24 -0
- package/dist/testing/integration-event-outbox.d.ts +37 -0
- package/dist/testing/integration-event-outbox.js +67 -0
- package/dist/testing/mutation-settings.d.ts +71 -0
- package/dist/testing/mutation-settings.js +57 -0
- package/dist/testing/postgres-rows.d.ts +12 -0
- package/dist/testing/postgres-rows.js +19 -0
- package/dist/testing/processed-event-registry.d.ts +25 -0
- package/dist/testing/processed-event-registry.js +39 -0
- package/dist/testing/queue-message-producer.d.ts +27 -0
- package/dist/testing/queue-message-producer.js +41 -0
- package/dist/testing/queue-message-source.d.ts +54 -0
- package/dist/testing/queue-message-source.js +71 -0
- package/dist/testing/quiet-reporter.d.ts +86 -0
- package/dist/testing/quiet-reporter.js +81 -0
- package/dist/testing/readiness-probe.d.ts +27 -0
- package/dist/testing/readiness-probe.js +33 -0
- package/dist/testing/scenario.d.ts +94 -0
- package/dist/testing/scenario.js +81 -0
- package/dist/testing/transaction-boundary.d.ts +30 -0
- package/dist/testing/transaction-boundary.js +36 -0
- package/dist/testing/typed-failure.d.ts +8 -0
- package/dist/testing/typed-failure.js +15 -0
- package/dist/time/calendar-day.d.ts +83 -0
- package/dist/time/calendar-day.js +112 -0
- package/dist/time/failures.d.ts +51 -0
- package/dist/time/failures.js +56 -0
- package/dist/time/index.d.ts +11 -0
- package/dist/time/index.js +11 -0
- package/dist/time/instant.d.ts +64 -0
- package/dist/time/instant.js +67 -0
- package/dist/time/period.d.ts +45 -0
- package/dist/time/period.js +55 -0
- package/dist/vitest/container-reuse.d.ts +14 -0
- package/dist/vitest/container-reuse.js +15 -0
- package/dist/vitest/dotenv.d.ts +16 -0
- package/dist/vitest/dotenv.js +48 -0
- package/dist/vitest/effect-single-instance.d.ts +36 -0
- package/dist/vitest/effect-single-instance.js +125 -0
- package/dist/vitest/fast-check-single-instance.d.ts +11 -0
- package/dist/vitest/fast-check-single-instance.js +26 -0
- package/dist/vitest/index.d.ts +31 -0
- package/dist/vitest/index.js +30 -0
- package/dist/vitest/localstack-container.d.ts +32 -0
- package/dist/vitest/localstack-container.js +55 -0
- package/dist/vitest/port-contract-tester.d.ts +8 -0
- package/dist/vitest/port-contract-tester.js +1 -0
- package/dist/vitest/port-contracts/blob-store.contract.d.ts +22 -0
- package/dist/vitest/port-contracts/blob-store.contract.js +108 -0
- package/dist/vitest/port-contracts/document-number-counter.contract.d.ts +18 -0
- package/dist/vitest/port-contracts/document-number-counter.contract.js +90 -0
- package/dist/vitest/port-contracts/event-publisher.contract.d.ts +35 -0
- package/dist/vitest/port-contracts/event-publisher.contract.js +67 -0
- package/dist/vitest/port-contracts/external-http-client.contract.d.ts +35 -0
- package/dist/vitest/port-contracts/external-http-client.contract.js +52 -0
- package/dist/vitest/port-contracts/integration-event-outbox.contract.d.ts +23 -0
- package/dist/vitest/port-contracts/integration-event-outbox.contract.js +75 -0
- package/dist/vitest/port-contracts/processed-event-registry.contract.d.ts +18 -0
- package/dist/vitest/port-contracts/processed-event-registry.contract.js +84 -0
- package/dist/vitest/port-contracts/queue-message-producer.contract.d.ts +26 -0
- package/dist/vitest/port-contracts/queue-message-producer.contract.js +48 -0
- package/dist/vitest/port-contracts/queue-message-source.contract.d.ts +29 -0
- package/dist/vitest/port-contracts/queue-message-source.contract.js +71 -0
- package/dist/vitest/port-contracts/readiness-probe.contract.d.ts +18 -0
- package/dist/vitest/port-contracts/readiness-probe.contract.js +41 -0
- package/dist/vitest/port-contracts/transaction-boundary.contract.d.ts +21 -0
- package/dist/vitest/port-contracts/transaction-boundary.contract.js +64 -0
- package/dist/vitest/postgres-container.d.ts +57 -0
- package/dist/vitest/postgres-container.js +118 -0
- package/dist/vitest/reader-port-contract.d.ts +41 -0
- package/dist/vitest/reader-port-contract.js +43 -0
- package/dist/vitest/repo-source-files.d.ts +37 -0
- package/dist/vitest/repo-source-files.js +61 -0
- package/dist/vitest/reset-tables.d.ts +18 -0
- package/dist/vitest/reset-tables.js +30 -0
- package/dist/vitest/settings-contract.d.ts +38 -0
- package/dist/vitest/settings-contract.js +77 -0
- package/dist/vitest/stub-server.d.ts +43 -0
- package/dist/vitest/stub-server.js +60 -0
- package/dist/vitest/term-registry.json +730 -0
- package/dist/vitest/testclock-fork-isolated-files.d.ts +13 -0
- package/dist/vitest/testclock-fork-isolated-files.js +18 -0
- package/dist/vitest/testclock-fork-isolation.d.ts +77 -0
- package/dist/vitest/testclock-fork-isolation.js +188 -0
- package/dist/workflow/claim-once.d.ts +16 -0
- package/dist/workflow/claim-once.js +9 -0
- package/dist/workflow/failures.d.ts +47 -0
- package/dist/workflow/failures.js +22 -0
- package/dist/workflow/index.d.ts +12 -0
- package/dist/workflow/index.js +12 -0
- package/dist/workflow/on-claim.d.ts +17 -0
- package/dist/workflow/on-claim.js +8 -0
- package/dist/workflow/publish-pending-events.d.ts +31 -0
- package/dist/workflow/publish-pending-events.js +31 -0
- package/dist/workflow/transactionally.d.ts +8 -0
- package/dist/workflow/transactionally.js +8 -0
- package/dist/workflow/versioned-payload.d.ts +35 -0
- package/dist/workflow/versioned-payload.js +43 -0
- package/package.json +309 -0
|
@@ -0,0 +1,844 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Кожна назва, яку дає цей пакет
|
|
3
|
+
description: >-
|
|
4
|
+
Кожна назва кожного механізму з її формою і одним реченням про те, що це і навіщо, складена з самого коду.
|
|
5
|
+
sidebar:
|
|
6
|
+
order: 0
|
|
7
|
+
tableOfContents:
|
|
8
|
+
minHeadingLevel: 2
|
|
9
|
+
maxHeadingLevel: 2
|
|
10
|
+
mirrorOf: b4ed867b074ed0fe
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
Ви приблизно знаєте, що вам потрібно, і не знаєте, як воно зветься. Десь у цьому пакеті така назва є, а полювання на неї по вихідних файлах коштує більше, ніж зміна, заради якої ви прийшли. Ця сторінка — увесь список: кожна назва, яку дає кожний механізм, зібрана щоразу однаково, з одним реченням поруч про те, що це і навіщо. Назви і форми приходять із самого коду і лишаються англійською, бо код цього пакета англійський. Речення поруч ідуть українською. Шукайте за назвою, і ви зможете знайти потрібне за хвилину, а поруч побачите її форму та значення за замовчуванням.
|
|
14
|
+
|
|
15
|
+
## Механізми
|
|
16
|
+
|
|
17
|
+
| Механізм (mechanism) | Для чого він | Імпорт |
|
|
18
|
+
| --- | --- | --- |
|
|
19
|
+
| [core](#core) | Публічний вхід до механізму core: кілька частин, на які спирається кожен інший механізм і які самі не спираються ні на що. | `@satorio/machinery/core` |
|
|
20
|
+
| [http](#http) | Публічний вхід до механізму http: проби готовності (ReadinessProbe), змонтовані на тому самому порту (port), що й GraphQL. | `@satorio/machinery/http` |
|
|
21
|
+
| [money](#money) | Публічний вхід до механізму money, над dinero.js, спільною залежністю, яку ставить ваш сервіс: точні суми однієї валюти, частки, курси й округлення. | `@satorio/machinery/money` |
|
|
22
|
+
| [ports](#ports) | Публічний вхід до механізму ports: кожна межа, яку може попросити процедура (use case), і відмова (refusal), яку піднімає кожна з них. | `@satorio/machinery/ports` |
|
|
23
|
+
| [time](#time) | Публічний вхід до механізму time: день, який людина читає і пише, період (period) днів і мить на годиннику. | `@satorio/machinery/time` |
|
|
24
|
+
| [identifiers](#identifiers) | Публічний вхід до механізму identifiers: ідентифікатор, який карбує машина, і номери, які людина читає з документа. | `@satorio/machinery/identifiers` |
|
|
25
|
+
| [workflow](#workflow) | Публічний вхід до механізму workflow: комбінатори, з яких процедура складає власний такт. | `@satorio/machinery/workflow` |
|
|
26
|
+
| [graphql](#graphql) | Публічний вхід до механізму graphql: один сервер, який відповідає на ваші операції і на проби готовності поруч із ними. | `@satorio/machinery/graphql` |
|
|
27
|
+
| [integration](#integration) | Публічний вхід до механізму integration: один HTTP-клієнт до довідкових даних поза цим сервісом. | `@satorio/machinery/integration` |
|
|
28
|
+
| [postgres](#postgres) | Публічний вхід до механізму postgres: кожен порт, який визначає ця машинерія (machinery), прив'язаний до справжньої бази. | `@satorio/machinery/postgres` |
|
|
29
|
+
| [publishing](#publishing) | Публічний вхід до механізму publishing: публікатор (publisher) подій, прив'язаний до топіка або до одного рядка на stdout. | `@satorio/machinery/publishing` |
|
|
30
|
+
| [queue](#queue) | Публічний вхід до механізму queue: конверт, у якому мандрує повідомлення, і робітник (consumer), який вирішує його долю. | `@satorio/machinery/queue` |
|
|
31
|
+
| [storage](#storage) | Публічний вхід до механізму storage: цілі об'єкти, збережені під ключем і прочитані назад. | `@satorio/machinery/storage` |
|
|
32
|
+
| [testing](#testing) | Публічний вхід до механізму testing: замінник кожного порту, годинник, яким керує тест (test), і програвач сценаріїв (playScenario). | `@satorio/machinery/testing` |
|
|
33
|
+
| [vitest](#vitest) | Публічний вхід до механізму vitest: живі стенди, контракти портів і три перевірки збірки (guard), які тримають рантайм цих тестів. | `@satorio/machinery/vitest` |
|
|
34
|
+
|
|
35
|
+
Механізми вище стоять у порядку залежностей: core відкриває, кожен нижче може сягати по ті, що вище, а тестові набори закривають. Кожен розділ нижче несе ті самі групи в тому самому порядку, а кожна група — ті самі чотири стовпці. Для назви, яку віддає код, другий стовпець — це форма, під яку ви пишете. Для змінної, яку вирішує оточення, той стовпець називає один із трьох станів. Вона має безпечне значення, вона відмовляє без нього, або вона передає рішення далі.
|
|
36
|
+
|
|
37
|
+
## core
|
|
38
|
+
|
|
39
|
+
Імпорт із `@satorio/machinery/core` — [ціла сторінка](../mechanisms/core.mdx).
|
|
40
|
+
|
|
41
|
+
### Значення
|
|
42
|
+
|
|
43
|
+
| Назва | Сигнатура або тип | За замовчуванням | Що це |
|
|
44
|
+
| --- | --- | --- | --- |
|
|
45
|
+
| <span id="core-ClosedSet-value">`ClosedSet`</span> | `interface` | — | Чітко визначений перелік (closed set) із одного джерела: значення, тип-об'єднання його членів і перевірка `is`. |
|
|
46
|
+
| <span id="core-EnvironmentEntry-value">`EnvironmentEntry`</span> | `interface` | — | Одна змінна, яку читає механізм, і один стан, у якому вона стоїть. |
|
|
47
|
+
| <span id="core-EnvironmentState-value">`EnvironmentState`</span> | `type` | — | Котрий із трьох станів має змінна. |
|
|
48
|
+
| <span id="core-Refusal-value">`Refusal`</span> | `interface` | — | Відмова у трьох частинах, яких потребує читач: що сталось, чому механізм без цього не піде далі і що робити. |
|
|
49
|
+
| <span id="core-Ulid-value">`Ulid`</span> | `string & { readonly [ulidBrand]: 'Ulid' }` | — | ULID: ідентифікатор, який машина карбує для запису, сортовний за миттю карбування і звичайний рядок усюди, куди мандрує. |
|
|
50
|
+
|
|
51
|
+
### Процедури
|
|
52
|
+
|
|
53
|
+
| Назва | Сигнатура або тип | За замовчуванням | Що це |
|
|
54
|
+
| --- | --- | --- | --- |
|
|
55
|
+
| <span id="core-bigIntsAsDecimalStrings-procedure">`bigIntsAsDecimalStrings`</span> | `(_key: string, value: unknown) => unknown` | — | Подавайте це аргументом-заміною до `JSON.stringify`. |
|
|
56
|
+
| <span id="core-closedSet-procedure">`closedSet`</span> | `<const T extends readonly string[]>(values: T) => ClosedSet<T>` | — | Будує чітко визначений перелік зі списку рядкових літералів, тож перевірка і список, який вона стереже, приходять з одного джерела. |
|
|
57
|
+
| <span id="core-fallsBackTo-procedure">`fallsBackTo`</span> | `(value: string) => EnvironmentState` | — | Змінну безпечно не ставити, і ось що стається натомість. |
|
|
58
|
+
| <span id="core-handedOn-procedure">`handedOn`</span> | `(consequence: string) => EnvironmentState` | — | Змінна законно необов'язкова і не має значення за замовчуванням, бо її вирішує хтось інший; ось що випливає, якщо її не поставити. |
|
|
59
|
+
| <span id="core-isUlid-procedure">`isUlid`</span> | `(value: string) => value is Ulid` | — | Чи є рядок ULID, як перевірка типу, тож викликач звужує тип і нічого не піднімає. |
|
|
60
|
+
| <span id="core-optionalSecret-procedure">`optionalSecret`</span> | `(name: string) => Config.Config<Option.Option<Redacted.Redacted>>` | — | Читає секрет, який законно необов'язковий, і подає `Option.none`, коли той не поставлений або порожній. |
|
|
61
|
+
| <span id="core-optionalText-procedure">`optionalText`</span> | `(name: string) => Config.Config<Option.Option<string>>` | — | Читає змінну, яка законно необов'язкова і не має значення за замовчуванням, бо її вирішує хтось поза цим процесом. |
|
|
62
|
+
| <span id="core-refusalFor-procedure">`refusalFor`</span> | `(name: string, refusal: Refusal) => ConfigError.ConfigError` | — | Одна відмова, яку піднімає змінна, що відмовляє, з трьома її частинами, зшитими в один рядок. |
|
|
63
|
+
| <span id="core-refusalText-procedure">`refusalText`</span> | `(refusal: Refusal) => string` | — | Зшиває відмову в один рядок, який оператор читає в лозі або у відмові на старті. |
|
|
64
|
+
| <span id="core-refuses-procedure">`refuses`</span> | `(refusal: Refusal) => EnvironmentState` | — | Механізм без цієї змінної не працює, і ось той текст із трьох частин, який читач зустріне, коли її немає. |
|
|
65
|
+
| <span id="core-requiredSecret-procedure">`requiredSecret`</span> | `(name: string, refusal: Refusal) => Config.Config<Redacted.Redacted>` | — | Читає секрет, без якого механізм не працює, і відмовляє тими самими трьома частинами, коли той відсутній або порожній. |
|
|
66
|
+
| <span id="core-requiredText-procedure">`requiredText`</span> | `(name: string, refusal: Refusal) => Config.Config<string>` | — | Читає змінну, без якої механізм не працює, і відмовляє трьома частинами, коли та відсутня або порожня. |
|
|
67
|
+
| <span id="core-ulid-procedure">`ulid`</span> | `(raw: string) => Ulid` | — | Читає рядок як ULID і кидає `NotAUlidError`, коли це не ULID, тож сирий рядок заходить одними дверима. |
|
|
68
|
+
| <span id="core-variableNameOf-procedure">`variableNameOf`</span> | `(entry: EnvironmentEntry) => string` | — | Назва, яку ставить оператор, де `<PREFIX>` стоїть перед суфіксом, що його застосунок обирає під час монтування. |
|
|
69
|
+
| <span id="core-wholeNumberFallingBackTo-procedure">`wholeNumberFallingBackTo`</span> | `(name: string, lowest: number, highest: number, fallback: number, refusal: Refusal) => Config.Config<number>` | — | Читає ціле число, без якого механізм радо обійдеться, і падає на назване значення, коли змінну ніхто не поставив. |
|
|
70
|
+
| <span id="core-wholeNumberWithin-procedure">`wholeNumberWithin`</span> | `(name: string, lowest: number, highest: number, refusal: Refusal) => Config.Config<number>` | — | Читає ціле число всередині діапазону і відмовляє трьома частинами, коли це не воно. |
|
|
71
|
+
|
|
72
|
+
### Відмови
|
|
73
|
+
|
|
74
|
+
| Назва | Сигнатура або тип | За замовчуванням | Що це |
|
|
75
|
+
| --- | --- | --- | --- |
|
|
76
|
+
| <span id="core-DomainError-failure">`DomainError`</span> | `Error` | — | Базовий клас доменних помилок. |
|
|
77
|
+
| <span id="core-NotAUlidError-failure">`NotAUlidError`</span> | `DomainError` | — | Що зустрічає викликач, коли до `ulid` дійшов рядок, який не є ULID; повідомлення цитує точне отримане значення. |
|
|
78
|
+
|
|
79
|
+
## http
|
|
80
|
+
|
|
81
|
+
Імпорт із `@satorio/machinery/http` — [ціла сторінка](../mechanisms/http.mdx).
|
|
82
|
+
|
|
83
|
+
### Значення
|
|
84
|
+
|
|
85
|
+
| Назва | Сигнатура або тип | За замовчуванням | Що це |
|
|
86
|
+
| --- | --- | --- | --- |
|
|
87
|
+
| <span id="http-DEFAULT-HEALTH-CHECK-DEADLINE-MILLIS-value">`DEFAULT_HEALTH_CHECK_DEADLINE_MILLIS`</span> | `const` | — | Скільки часу дістає одна перевірка, перш ніж рахуватись як недоступна. |
|
|
88
|
+
| <span id="http-HealthCheckStatus-value">`HealthCheckStatus`</span> | `'ok' \| 'down'` | — | Як відповіла одна залежність: вона відповіла, або вона лежить. |
|
|
89
|
+
| <span id="http-HealthRoutesOptions-value">`HealthRoutesOptions`</span> | `interface` | — | Що потрібно маршрутам готовності: рантайм, який виконує перевірку, самі перевірки і строк, який дістає одна з них. |
|
|
90
|
+
| <span id="http-HEALTHZ-PATH-value">`HEALTHZ_PATH`</span> | `const` | — | Та сама перевірка, що й `READYZ_PATH`, під другою назвою. |
|
|
91
|
+
| <span id="http-LIVEZ-PATH-value">`LIVEZ_PATH`</span> | `const` | — | Шлях, який відповідає, чи цей процес узагалі живий, не питаючи жодної залежності. |
|
|
92
|
+
| <span id="http-NamedHealthCheck-value">`NamedHealthCheck`</span> | `interface` | — | Одна залежність до перевірки, під назвою, якою відповідь про неї звітує. |
|
|
93
|
+
| <span id="http-ReadinessOutcome-value">`ReadinessOutcome`</span> | `interface` | — | Що відповідає точка готовності: чи сервіс готовий і як відповіла кожна залежність. |
|
|
94
|
+
| <span id="http-READYZ-PATH-value">`READYZ_PATH`</span> | `const` | — | Шлях, який відповідає, чи цей сервіс може брати трафік, після того як опитано кожну змонтовану залежність. |
|
|
95
|
+
| <span id="http-RunHealthCheck-value">`RunHealthCheck`</span> | `type` | — | Виконує перевірку готовності і повертає її `Exit`. |
|
|
96
|
+
|
|
97
|
+
### Процедури
|
|
98
|
+
|
|
99
|
+
| Назва | Сигнатура або тип | За замовчуванням | Що це |
|
|
100
|
+
| --- | --- | --- | --- |
|
|
101
|
+
| <span id="http-checkReadiness-procedure">`checkReadiness`</span> | `<R>(options: HealthRoutesOptions<R>) => Effect.Effect<ReadinessOutcome>` | — | Виконує кожну перевірку незалежно, паралельно, під її власним строком. |
|
|
102
|
+
| <span id="http-healthRoutesFetch-procedure">`healthRoutesFetch`</span> | `<R>(options: HealthRoutesOptions<R>) => ((request: Request) => Promise<Response \| null>)` | — | Обробляє три точки готовності. |
|
|
103
|
+
|
|
104
|
+
## money
|
|
105
|
+
|
|
106
|
+
Імпорт із `@satorio/machinery/money` — [ціла сторінка](../mechanisms/money.mdx).
|
|
107
|
+
|
|
108
|
+
### Значення
|
|
109
|
+
|
|
110
|
+
| Назва | Сигнатура або тип | За замовчуванням | Що це |
|
|
111
|
+
| --- | --- | --- | --- |
|
|
112
|
+
| <span id="money-Currency-value">`Currency`</span> | `DineroCurrency<bigint>` | — | Одна валюта з таблиці ISO 4217: її код, основа, якою вона рахує, і скільки десяткових знаків тримає одна одиниця. |
|
|
113
|
+
| <span id="money-ExchangeRate-value">`ExchangeRate`</span> | `interface` | — | Скільки одиниць валюти, у яку ви йдете, купує одна одиниця валюти, з якої ви йдете. |
|
|
114
|
+
| <span id="money-Money-value">`Money`</span> | `Dinero<bigint>` | — | Точна сума однієї валюти. |
|
|
115
|
+
| <span id="money-Percent-value">`Percent`</span> | `interface` | — | Частка суми (share), яку тримають точно. |
|
|
116
|
+
| <span id="money-PercentFromPercentageString-value">`PercentFromPercentageString`</span> | `Schema.Schema<Percent, string>` | — | Читає частку з дроту у формі, якою пише прайс-лист: `30` означає тридцять відсотків. |
|
|
117
|
+
| <span id="money-PercentFromRatioString-value">`PercentFromRatioString`</span> | `Schema.Schema<Percent, string>` | — | Читає частку з дроту у формі, якою пише таблиця ставок: `0.3` означає тридцять відсотків. |
|
|
118
|
+
|
|
119
|
+
### Процедури
|
|
120
|
+
|
|
121
|
+
| Назва | Сигнатура або тип | За замовчуванням | Що це |
|
|
122
|
+
| --- | --- | --- | --- |
|
|
123
|
+
| <span id="money-addMoney-procedure">`addMoney`</span> | `(left: Money, right: Money) => Either.Either<Money, CurrenciesDoNotMeetError>` | — | Додає дві суми однієї валюти. |
|
|
124
|
+
| <span id="money-atRate-procedure">`atRate`</span> | `(amount: Money, target: Currency, rate: ExchangeRate) => Money` | — | Переводить суму в іншу валюту за названим вами курсом, зберігаючи кожну цифру добутку. |
|
|
125
|
+
| <span id="money-compareMoney-procedure">`compareMoney`</span> | `(left: Money, right: Money) => Either.Either<number, CurrenciesDoNotMeetError>` | — | Ставить дві суми однієї валюти по порядку. |
|
|
126
|
+
| <span id="money-currencyCodeOf-procedure">`currencyCodeOf`</span> | `(currency: Currency) => string` | — | Пише валюту назад трьома літерами, які дає їй ISO 4217. |
|
|
127
|
+
| <span id="money-currencyOf-procedure">`currencyOf`</span> | `(code: string) => Either.Either<Currency, NotACurrencyCodeError>` | — | Читає код валюти, який хтось написав: `USD`, `EUR`, `UAH`. |
|
|
128
|
+
| <span id="money-currencyOfMoney-procedure">`currencyOfMoney`</span> | `(amount: Money) => Currency` | — | Валюта, у якій порахована сума. |
|
|
129
|
+
| <span id="money-decimalsOf-procedure">`decimalsOf`</span> | `(currency: Currency) => number` | — | Скільки десяткових знаків тримає одна одиниця цієї валюти: два для валюти, що рахує центами, нуль для тієї, що рахує цілими. |
|
|
130
|
+
| <span id="money-exchangeRateFromDecimalForm-procedure">`exchangeRateFromDecimalForm`</span> | `(text: string) => Either.Either<ExchangeRate, NotAnExchangeRateError>` | — | Читає курс, який хтось написав: `0.89`, `41.57306`. |
|
|
131
|
+
| <span id="money-exchangeRateInDecimalForm-procedure">`exchangeRateInDecimalForm`</span> | `(rate: ExchangeRate) => string` | — | Пише курс назад, обрізаним, так, як його написало джерело, що його опублікувало: `0.89`. |
|
|
132
|
+
| <span id="money-minorUnitsOf-procedure">`minorUnitsOf`</span> | `(amount: Money) => bigint` | — | Сума, порахована у власній найдрібнішій одиниці (minor unit) валюти, округлена до неї єдиним правилом, яке тримає цей механізм. |
|
|
133
|
+
| <span id="money-money-procedure">`money`</span> | `(currency: Currency, minorUnits: bigint) => Money` | — | Сума, порахована у власній найдрібнішій одиниці валюти: 4055 таких одиниць валюти, що рахує центами, — це 40.55. |
|
|
134
|
+
| <span id="money-moneyAtScale-procedure">`moneyAtScale`</span> | `(currency: Currency, units: bigint, scale: bigint) => Money` | — | Сума, яку тримають у масштабі тоншому за власний масштаб валюти, тож розрахунок не губить жодної цифри. |
|
|
135
|
+
| <span id="money-moneyFromDecimalForm-procedure">`moneyFromDecimalForm`</span> | `(currency: Currency, text: string) => Either.Either<Money, NotAnAmountError>` | — | Читає суму, яку хтось написав: `40.0455`, `-25`, `0.10`. |
|
|
136
|
+
| <span id="money-MoneyFromDecimalString-procedure">`MoneyFromDecimalString`</span> | `(currency: Currency) => Schema.Schema<Money, string>` | — | Читає і пише суму на дроті десятковим текстом, у названій вами валюті. |
|
|
137
|
+
| <span id="money-moneyInDecimalForm-procedure">`moneyInDecimalForm`</span> | `(amount: Money) => string` | — | Пише суму для дроту і для людини: `40.0455`, `-25.00`. |
|
|
138
|
+
| <span id="money-negatedMoney-procedure">`negatedMoney`</span> | `(amount: Money) => Money` | — | Обертає суму: те, що були винні, стає тим, що винні назад. |
|
|
139
|
+
| <span id="money-percentFromPercentageForm-procedure">`percentFromPercentageForm`</span> | `(text: string) => Either.Either<Percent, NotAPercentError>` | — | Читає форму, якою пише прайс-лист: `30` означає тридцять відсотків. |
|
|
140
|
+
| <span id="money-percentFromRatioForm-procedure">`percentFromRatioForm`</span> | `(text: string) => Either.Either<Percent, NotAPercentError>` | — | Читає форму, якою пише таблиця ставок: `0.3` означає тридцять відсотків. |
|
|
141
|
+
| <span id="money-percentInPercentageForm-procedure">`percentInPercentageForm`</span> | `(percent: Percent) => string` | — | Пише відсоткову форму назад, обрізаною: тридцять відсотків читаються як `30`. |
|
|
142
|
+
| <span id="money-percentInRatioForm-procedure">`percentInRatioForm`</span> | `(percent: Percent) => string` | — | Пише форму відношення назад, обрізаною: тридцять відсотків читаються як `0.3`. |
|
|
143
|
+
| <span id="money-percentOf-procedure">`percentOf`</span> | `(amount: Money, percent: Percent) => Money` | — | Бере частку від суми і зберігає кожну цифру добутку. |
|
|
144
|
+
| <span id="money-roundedToTheCent-procedure">`roundedToTheCent`</span> | `(amount: Money) => Money` | — | Округлює суму до власної найдрібнішої одиниці валюти, половину — геть від нуля. |
|
|
145
|
+
| <span id="money-sameMoney-procedure">`sameMoney`</span> | `(left: Money, right: Money) => boolean` | — | Чи дві суми є однією сумою. |
|
|
146
|
+
| <span id="money-samePercent-procedure">`samePercent`</span> | `(left: Percent, right: Percent) => boolean` | — | Чи дві частки є однією часткою, з якої б форми кожну не прочитали. |
|
|
147
|
+
| <span id="money-scaleOfMoney-procedure">`scaleOfMoney`</span> | `(amount: Money) => bigint` | — | Масштаб, у якому суму тримають зараз: скількома десятковими знаками рахують її власні одиниці, і він росте, поки розрахунок береже точність. |
|
|
148
|
+
| <span id="money-sharesOf-procedure">`sharesOf`</span> | `(amount: Money, proportions: readonly bigint[]) => Either.Either<readonly Money[], ProportionsDoNotSplitError>` | — | Ділить суму на частки, які складаються назад рівно в те, що зайшло. |
|
|
149
|
+
| <span id="money-sumOfMoney-procedure">`sumOfMoney`</span> | `(currency: Currency, amounts: readonly Money[]) => Either.Either<Money, CurrenciesDoNotMeetError>` | — | Додає будь-яку кількість сум, починаючи від нуля в названій вами валюті. |
|
|
150
|
+
| <span id="money-zeroMoney-procedure">`zeroMoney`</span> | `(currency: Currency) => Money` | — | Нічого взагалі, в одній валюті. |
|
|
151
|
+
|
|
152
|
+
### Відмови
|
|
153
|
+
|
|
154
|
+
| Назва | Сигнатура або тип | За замовчуванням | Що це |
|
|
155
|
+
| --- | --- | --- | --- |
|
|
156
|
+
| <span id="money-CurrenciesDoNotMeetError-failure">`CurrenciesDoNotMeetError`</span> | `Data.TaggedError<{ readonly left: string; readonly right: string }>` | — | Дві суми у двох валютах попросили зустрітись. |
|
|
157
|
+
| <span id="money-MoneyFailure-failure">`MoneyFailure`</span> | `type` | — | Кожен спосіб, яким цей механізм відмовляє значенню. |
|
|
158
|
+
| <span id="money-NotACurrencyCodeError-failure">`NotACurrencyCodeError`</span> | `Data.TaggedError<{ readonly text: string }>` | — | Поданий текст не називає валюти, яку знає цей механізм. |
|
|
159
|
+
| <span id="money-NotAnAmountError-failure">`NotAnAmountError`</span> | `Data.TaggedError<{ readonly text: string }>` | — | Поданий текст не пише суми. |
|
|
160
|
+
| <span id="money-NotAnExchangeRateError-failure">`NotAnExchangeRateError`</span> | `Data.TaggedError<{ readonly text: string }>` | — | Поданий текст не пише курсу обміну. |
|
|
161
|
+
| <span id="money-NotAPercentError-failure">`NotAPercentError`</span> | `Data.TaggedError<{ readonly text: string; readonly form: 'percentage' \| 'ratio' }>` | — | Поданий текст не пише відсотка. |
|
|
162
|
+
| <span id="money-ProportionsDoNotSplitError-failure">`ProportionsDoNotSplitError`</span> | `Data.TaggedError<{ readonly proportions: readonly bigint[] }>` | — | Подані пропорції не ділять суми. |
|
|
163
|
+
|
|
164
|
+
## ports
|
|
165
|
+
|
|
166
|
+
Імпорт із `@satorio/machinery/ports` — [ціла сторінка](../mechanisms/ports.mdx).
|
|
167
|
+
|
|
168
|
+
### Значення
|
|
169
|
+
|
|
170
|
+
| Назва | Сигнатура або тип | За замовчуванням | Що це |
|
|
171
|
+
| --- | --- | --- | --- |
|
|
172
|
+
| <span id="ports-BlobStoreShape-value">`BlobStoreShape`</span> | `interface` | — | Операції сховища об'єктів (blob store). |
|
|
173
|
+
| <span id="ports-claimAccepted-value">`claimAccepted`</span> | `ProcessedEventClaim` | — | Резервація (claim-once), якої ще ніхто не взяв, тож саме цей прогін робить роботу. |
|
|
174
|
+
| <span id="ports-ClaimProcessedEventInput-value">`ClaimProcessedEventInput`</span> | `interface` | — | Що потрібно резервації: яку подію резервують і в яку мить це роблять. |
|
|
175
|
+
| <span id="ports-DocumentNumberCounterShape-value">`DocumentNumberCounterShape`</span> | `interface` | — | Що пропонує лічильник: один виклик, який рухає місяць клієнта далі й подає лічбу, яку візьме наступний документ. |
|
|
176
|
+
| <span id="ports-DocumentNumberCountInput-value">`DocumentNumberCountInput`</span> | `interface` | — | Який лічильник рухати далі: один клієнт, один звітний місяць (reporting month). |
|
|
177
|
+
| <span id="ports-EventPublisherShape-value">`EventPublisherShape`</span> | `interface` | — | Що пропонує публікатор: один виклик, який надсилає пачку повідомлень із буфера трансмітера (outbox) геть із цього сервісу. |
|
|
178
|
+
| <span id="ports-ExternalHttpClientShape-value">`ExternalHttpClientShape`</span> | `interface` | — | Один зовнішній HTTP-сервіс, прочитаний однією операцією. |
|
|
179
|
+
| <span id="ports-IntegrationEventOutboxShape-value">`IntegrationEventOutboxShape`</span> | `interface` | — | Буфер трансмітера тримає повідомлення, які процедура ставить у чергу тією самою транзакцією, що й свою зміну стану. |
|
|
180
|
+
| <span id="ports-OutboxMessage-value">`OutboxMessage`</span> | `interface` | — | Одне повідомлення, що чекає в буфері трансмітера: власний ідентифікатор, що воно таке, яка схема надала йому форми, коли воно сталось і що воно несе. |
|
|
181
|
+
| <span id="ports-PORT-FAILURES-IN-THE-EVENTS-LANGUAGE-value">`PORT_FAILURES_IN_THE_EVENTS_LANGUAGE`</span> | `Readonly<Record<string, string>>` | — | Відмова порту, названа мовою події, а не як `<Port>UnavailableError`, разом із реченням, яке заслуговує на цей виняток. |
|
|
182
|
+
| <span id="ports-ProcessedEventClaim-value">`ProcessedEventClaim`</span> | `type` | — | Два стани замка резервації: цей прогін узяв подію, або хтось уже взяв її раніше. |
|
|
183
|
+
| <span id="ports-ProcessedEventRegistryShape-value">`ProcessedEventRegistryShape`</span> | `interface` | — | Що пропонує замок резервації: один виклик, який або бере подію вперше, або каже, коли її взяли раніше. |
|
|
184
|
+
| <span id="ports-QueueMessageProducerShape-value">`QueueMessageProducerShape`</span> | `interface` | — | Що пропонує відправник: один виклик, який кладе тіло повідомлення в чергу. |
|
|
185
|
+
| <span id="ports-QueueMessageSourceShape-value">`QueueMessageSourceShape`</span> | `interface` | — | Джерело повідомлень черги: воно отримує пачку і підтверджує взяте. |
|
|
186
|
+
| <span id="ports-RawQueueMessage-value">`RawQueueMessage`</span> | `interface` | — | Одне повідомлення таким, яким його віддає черга: власний ідентифікатор, квитанція, яку цитує підтвердження, і тіло, ще текстом. |
|
|
187
|
+
| <span id="ports-ReadinessProbeShape-value">`ReadinessProbeShape`</span> | `interface` | — | Що пропонує проба готовності: одна перевірка того, що база відповідає, тож точка звітує про залежність, а не про здогад. |
|
|
188
|
+
| <span id="ports-StoredBlob-value">`StoredBlob`</span> | `interface` | — | Байти збереженого об'єкта, його тип вмісту і довільні текстові метадані. |
|
|
189
|
+
| <span id="ports-TransactionBoundaryShape-value">`TransactionBoundaryShape`</span> | `interface` | — | Що пропонує межа транзакції: один виклик, який виконує роботу всередині транзакції і відкочує її цілком, коли робота падає. |
|
|
190
|
+
|
|
191
|
+
### Процедури
|
|
192
|
+
|
|
193
|
+
| Назва | Сигнатура або тип | За замовчуванням | Що це |
|
|
194
|
+
| --- | --- | --- | --- |
|
|
195
|
+
| <span id="ports-alreadyProcessed-procedure">`alreadyProcessed`</span> | `(processedAt: DateTime.Utc) => ProcessedEventClaim` | — | Резервація, яку хтось уже взяв, разом із миттю, коли він її взяв. |
|
|
196
|
+
| <span id="ports-portUnavailable-procedure">`portUnavailable`</span> | `<E>(Unavailable: new (fields: { readonly operation: string; readonly cause: unknown }) => E)` | — | Будує фабрику відмов «не відповів» навколо власного конструктора `<Port>UnavailableError` одного порту. |
|
|
197
|
+
|
|
198
|
+
### Порти
|
|
199
|
+
|
|
200
|
+
| Назва | Сигнатура або тип | За замовчуванням | Що це |
|
|
201
|
+
| --- | --- | --- | --- |
|
|
202
|
+
| <span id="ports-BlobStore-port">`BlobStore`</span> | `Context.Tag('BlobStore')` | — | Порт, який просить процедура, коли зберігає цілі об'єкти під ключем і читає їх назад. |
|
|
203
|
+
| <span id="ports-DocumentNumberCounter-port">`DocumentNumberCounter`</span> | `Context.Tag('DocumentNumberCounter')` | — | Порт, який просить процедура, коли нумерує документ, що його читатиме людина. |
|
|
204
|
+
| <span id="ports-EventPublisher-port">`EventPublisher`</span> | `Context.Tag('EventPublisher')` | — | Порт, який просить трансмітер вихідних подій (outbox relay), коли оголошує те, що вже сталось. |
|
|
205
|
+
| <span id="ports-ExternalHttpClient-port">`ExternalHttpClient`</span> | `Context.Tag('ExternalHttpClient')` | — | Порт, який просить процедура, коли читає довідкові дані із сервісу поза цим. |
|
|
206
|
+
| <span id="ports-IntegrationEventOutbox-port">`IntegrationEventOutbox`</span> | `Context.Tag( 'IntegrationEventOutbox', )` | — | Порт, який просить процедура, коли ставить подію в чергу тією самою транзакцією, що й зміну стану, яка її спричинила. |
|
|
207
|
+
| <span id="ports-ProcessedEventRegistry-port">`ProcessedEventRegistry`</span> | `Context.Tag( 'ProcessedEventRegistry', )` | — | Порт, який просить процедура, коли подію треба відпрацювати рівно раз, хоч би скільки разів вона прийшла. |
|
|
208
|
+
| <span id="ports-QueueMessageProducer-port">`QueueMessageProducer`</span> | `Context.Tag('QueueMessageProducer')` | — | Порт, який просить процедура, коли надсилає повідомлення в чергу. |
|
|
209
|
+
| <span id="ports-QueueMessageSource-port">`QueueMessageSource`</span> | `Context.Tag('QueueMessageSource')` | — | Порт, який просить робітник, коли отримує повідомлення з черги і підтверджує взяте. |
|
|
210
|
+
| <span id="ports-ReadinessProbe-port">`ReadinessProbe`</span> | `Context.Tag('ReadinessProbe')` | — | Порт, який просить точка готовності, коли має сказати, чи цей сервіс може брати трафік. |
|
|
211
|
+
| <span id="ports-TransactionBoundary-port">`TransactionBoundary`</span> | `Context.Tag('TransactionBoundary')` | — | Порт, який просить процедура, коли її записи мають лягти разом або не лягти зовсім. |
|
|
212
|
+
|
|
213
|
+
### Відмови
|
|
214
|
+
|
|
215
|
+
| Назва | Сигнатура або тип | За замовчуванням | Що це |
|
|
216
|
+
| --- | --- | --- | --- |
|
|
217
|
+
| <span id="ports-BlobStoreUnavailableError-failure">`BlobStoreUnavailableError`</span> | `Data.TaggedError<{ readonly operation: string; readonly cause: unknown }>` | — | Сховище об'єктів не відповіло; ключ, якого там просто немає, ніколи не є цією відмовою. |
|
|
218
|
+
| <span id="ports-DatabaseDidNotAnswerError-failure">`DatabaseDidNotAnswerError`</span> | `Data.TaggedError<{ readonly reason: string }>` | — | Перевірка готовності проти бази не повернулась; `reason` каже, що її спинило. |
|
|
219
|
+
| <span id="ports-DocumentNumberCounterUnavailableError-failure">`DocumentNumberCounterUnavailableError`</span> | `Data.TaggedError<{ readonly operation: string; readonly cause: unknown }>` | — | Лічильник за номером документа не відповів; `operation` називає виклик, а `cause` несе власну помилку драйвера. |
|
|
220
|
+
| <span id="ports-EventPublisherUnavailableError-failure">`EventPublisherUnavailableError`</span> | `Data.TaggedError<{ readonly operation: string; readonly cause: unknown }>` | — | Публікатор не відповів, або топік не налаштований; `cause` каже, що з двох сталось. |
|
|
221
|
+
| <span id="ports-ExternalServiceRefusedError-failure">`ExternalServiceRefusedError`</span> | `Data.TaggedError<{ readonly service: string; readonly operation: string; readonly status: number }>` | — | Зовнішній сервіс відповів власною відмовою, тож той самий запит падатиме знову, доки запит не зміниться. |
|
|
222
|
+
| <span id="ports-ExternalServiceResponseMalformedError-failure">`ExternalServiceResponseMalformedError`</span> | `Data.TaggedError<{ readonly service: string; readonly operation: string; readonly cause: unknown }>` | — | Зовнішній сервіс відповів, але тіло не лягло в схему, яку подав викликач. |
|
|
223
|
+
| <span id="ports-ExternalServiceUnavailableError-failure">`ExternalServiceUnavailableError`</span> | `Data.TaggedError<{ readonly service: string; readonly operation: string; readonly cause: unknown }>` | — | Мережева невдача, вичерпаний строк або помилка сервера після того, як скінчились спроби; той самий запит цілком може вдатись пізніше. |
|
|
224
|
+
| <span id="ports-IntegrationEventOutboxUnavailableError-failure">`IntegrationEventOutboxUnavailableError`</span> | `Data.TaggedError<{ readonly operation: string; readonly cause: unknown }>` | — | Драйвер буфера трансмітера не відповів; `operation` називає виклик, а `cause` несе власну помилку драйвера. |
|
|
225
|
+
| <span id="ports-ProcessedEventRegistryUnavailableError-failure">`ProcessedEventRegistryUnavailableError`</span> | `Data.TaggedError<{ readonly operation: string; readonly cause: unknown }>` | — | Драйвер резервації не відповів; `operation` називає виклик, а `cause` несе власну помилку драйвера. |
|
|
226
|
+
| <span id="ports-QueueMessageProducerUnavailableError-failure">`QueueMessageProducerUnavailableError`</span> | `Data.TaggedError<{ readonly operation: string; readonly cause: unknown }>` | — | Відправник черги не відповів; `operation` називає виклик, а `cause` несе власну помилку драйвера. |
|
|
227
|
+
| <span id="ports-QueueMessageSourceUnavailableError-failure">`QueueMessageSourceUnavailableError`</span> | `Data.TaggedError<{ readonly operation: string; readonly cause: unknown }>` | — | Джерело черги не відповіло; `operation` називає виклик, а `cause` несе власну помилку драйвера. |
|
|
228
|
+
| <span id="ports-TransactionBoundaryUnavailableError-failure">`TransactionBoundaryUnavailableError`</span> | `Data.TaggedError<{ readonly operation: string; readonly cause: unknown }>` | — | Драйвер транзакції не відповів; `operation` називає виклик, а `cause` несе власну помилку драйвера. |
|
|
229
|
+
|
|
230
|
+
## time
|
|
231
|
+
|
|
232
|
+
Імпорт із `@satorio/machinery/time` — [ціла сторінка](../mechanisms/time.mdx).
|
|
233
|
+
|
|
234
|
+
### Значення
|
|
235
|
+
|
|
236
|
+
| Назва | Сигнатура або тип | За замовчуванням | Що це |
|
|
237
|
+
| --- | --- | --- | --- |
|
|
238
|
+
| <span id="time-CalendarDay-value">`CalendarDay`</span> | `type` | — | Один день календаря, без часу і без зони всередині. |
|
|
239
|
+
| <span id="time-CalendarDayFromHumanString-value">`CalendarDayFromHumanString`</span> | `Schema.Schema<CalendarDay, string>` | — | Читає день із дроту у формі, якою пише людина, і пише його назад тією самою формою. |
|
|
240
|
+
| <span id="time-CalendarDayOrder-value">`CalendarDayOrder`</span> | `Order.Order<CalendarDay>` | — | Ставить два дні в календарному порядку, раніший першим. |
|
|
241
|
+
| <span id="time-CalendarDayRefusalReason-value">`CalendarDayRefusalReason`</span> | `type` | — | Чому написаний день не є календарним днем (calendar day). |
|
|
242
|
+
| <span id="time-Instant-value">`Instant`</span> | `interface` | — | Одна мить на світовому годиннику, яку тримають цілими мілісекундами від початку 1970 року. |
|
|
243
|
+
| <span id="time-Period-value">`Period`</span> | `interface` | — | Пробіг календарних днів. |
|
|
244
|
+
| <span id="time-TimeZone-value">`TimeZone`</span> | `type` | — | Одна названа часова зона (time zone), така, якою її знає власна таблиця зон рантайму. |
|
|
245
|
+
|
|
246
|
+
### Процедури
|
|
247
|
+
|
|
248
|
+
| Назва | Сигнатура або тип | За замовчуванням | Що це |
|
|
249
|
+
| --- | --- | --- | --- |
|
|
250
|
+
| <span id="time-addDays-procedure">`addDays`</span> | `(day: CalendarDay, days: number) => CalendarDay` | — | Рухає день на цілі дні. |
|
|
251
|
+
| <span id="time-addMonths-procedure">`addMonths`</span> | `(day: CalendarDay, months: number) => CalendarDay` | — | Рухає день на цілі місяці і сідає на останній день місяця, надто короткого, щоб його вмістити. |
|
|
252
|
+
| <span id="time-calendarDayFromHumanForm-procedure">`calendarDayFromHumanForm`</span> | `(text: string) => Either.Either<CalendarDay, NotACalendarDayError>` | — | Читає форму, якою день пише людина: `19.03.2026`. |
|
|
253
|
+
| <span id="time-calendarDayFromIsoForm-procedure">`calendarDayFromIsoForm`</span> | `(text: string) => Either.Either<CalendarDay, NotACalendarDayError>` | — | Читає форму, якою день пише машина: `2026-03-19`. |
|
|
254
|
+
| <span id="time-dateTimeOfInstant-procedure">`dateTimeOfInstant`</span> | `(instant: Instant) => DateTime.Utc` | — | Подає мить назад власним значенням UTC від Effect — для рядка бази, конверта чи будь-якого коду, який уже говорить тим типом. |
|
|
255
|
+
| <span id="time-dayInHumanForm-procedure">`dayInHumanForm`</span> | `(day: CalendarDay) => string` | — | Пише день так, як його читає людина: `19.03.2026`. |
|
|
256
|
+
| <span id="time-dayInIsoForm-procedure">`dayInIsoForm`</span> | `(day: CalendarDay) => string` | — | Пише день так, як його читає машина: `2026-03-19`. |
|
|
257
|
+
| <span id="time-dayOfInstant-procedure">`dayOfInstant`</span> | `(instant: Instant, zone: TimeZone) => CalendarDay` | — | Календарний день, на який припадає мить для людини, що стоїть у тій зоні. |
|
|
258
|
+
| <span id="time-daysBetween-procedure">`daysBetween`</span> | `(earlier: CalendarDay, later: CalendarDay) => number` | — | Рахує цілі дні від першого дня до другого. |
|
|
259
|
+
| <span id="time-instantInHumanForm-procedure">`instantInHumanForm`</span> | `(instant: Instant, zone: TimeZone) => string` | — | Пише мить так, як її читає людина в тій зоні: `19.03.2026 14:05 +02:00`. |
|
|
260
|
+
| <span id="time-instantOfDateTime-procedure">`instantOfDateTime`</span> | `(moment: DateTime.Utc) => Instant` | — | Бере мить, яку машинерія вже тримає власним значенням UTC від Effect. |
|
|
261
|
+
| <span id="time-lastDayOfTheMonthOf-procedure">`lastDayOfTheMonthOf`</span> | `(day: CalendarDay) => CalendarDay` | — | Останній день місяця, на який припадає поданий день. |
|
|
262
|
+
| <span id="time-lengthInDays-procedure">`lengthInDays`</span> | `(period: Period) => number` | — | Рахує дні, які тримає період, разом з обома краями. |
|
|
263
|
+
| <span id="time-monthOf-procedure">`monthOf`</span> | `(day: CalendarDay) => Period` | — | Цілий календарний місяць, на який припадає поданий день, як період. |
|
|
264
|
+
| <span id="time-monthsOf-procedure">`monthsOf`</span> | `(period: Period) => readonly Period[]` | — | Ріже період на одну частину для кожного календарного місяця, через який він біжить, по порядку. |
|
|
265
|
+
| <span id="time-periodContains-procedure">`periodContains`</span> | `(period: Period, day: CalendarDay) => boolean` | — | Відповідає, чи день належить періоду. |
|
|
266
|
+
| <span id="time-periodOf-procedure">`periodOf`</span> | `(from: CalendarDay, to: CalendarDay) => Either.Either<Period, PeriodEndsBeforeItStartsError>` | — | Бере два дні як період, раніший першим. |
|
|
267
|
+
| <span id="time-periodsOverlap-procedure">`periodsOverlap`</span> | `(left: Period, right: Period) => boolean` | — | Відповідає, чи два періоди ділять хоч один день. |
|
|
268
|
+
| <span id="time-startOfDay-procedure">`startOfDay`</span> | `(day: CalendarDay, zone: TimeZone) => Instant` | — | Мить, якою календарний день починається в тій зоні. |
|
|
269
|
+
| <span id="time-todayIn-procedure">`todayIn`</span> | `(zone: TimeZone) => Effect.Effect<CalendarDay>` | — | Сьогодні, як його рахує календар тієї зони, прочитане з годинника, який сервіс уже поділяє. |
|
|
270
|
+
| <span id="time-zoneIdOf-procedure">`zoneIdOf`</span> | `(zone: TimeZone) => string` | — | Читає назву IANA назад із зони — для рядка лога чи для рядка бази. |
|
|
271
|
+
| <span id="time-zoneNamed-procedure">`zoneNamed`</span> | `(zoneId: string) => Either.Either<TimeZone, UnknownTimeZoneError>` | — | Бере назву зони IANA і відмовляє назві, якої рантайм не знає. |
|
|
272
|
+
|
|
273
|
+
### Відмови
|
|
274
|
+
|
|
275
|
+
| Назва | Сигнатура або тип | За замовчуванням | Що це |
|
|
276
|
+
| --- | --- | --- | --- |
|
|
277
|
+
| <span id="time-NotACalendarDayError-failure">`NotACalendarDayError`</span> | `Data.TaggedError<{ readonly text: string; readonly reason: CalendarDayRefusalReason }>` | — | Текст, поданий читачеві, не називає дня, який тримає бодай один календар. |
|
|
278
|
+
| <span id="time-PeriodEndsBeforeItStartsError-failure">`PeriodEndsBeforeItStartsError`</span> | `Data.TaggedError<{ readonly from: string; readonly to: string }>` | — | Два подані дні біжать назад. |
|
|
279
|
+
| <span id="time-TimeFailure-failure">`TimeFailure`</span> | `type` | — | Кожен спосіб, яким цей механізм відмовляє значенню. |
|
|
280
|
+
| <span id="time-UnknownTimeZoneError-failure">`UnknownTimeZoneError`</span> | `Data.TaggedError<{ readonly zoneId: string }>` | — | Рантайм не має зони під такою назвою. |
|
|
281
|
+
|
|
282
|
+
## identifiers
|
|
283
|
+
|
|
284
|
+
Імпорт із `@satorio/machinery/identifiers` — [ціла сторінка](../mechanisms/identifiers.mdx).
|
|
285
|
+
|
|
286
|
+
### Значення
|
|
287
|
+
|
|
288
|
+
| Назва | Сигнатура або тип | За замовчуванням | Що це |
|
|
289
|
+
| --- | --- | --- | --- |
|
|
290
|
+
| <span id="identifiers-ClientCode-value">`ClientCode`</span> | `string & { readonly [clientCodeBrand]: 'ClientCode' }` | — | Номер, який клієнт диктує вам назад: вісім цифр, остання з яких перевіряє сім інших. |
|
|
291
|
+
| <span id="identifiers-CreditorReference-value">`CreditorReference`</span> | `type` | — | Референс, який платник копіює в банківський переказ, із власними контрольними цифрами (check digit). |
|
|
292
|
+
| <span id="identifiers-DocumentNumber-value">`DocumentNumber`</span> | `type` | — | Номер, надрукований на документі, у формі, якою його читає людина. |
|
|
293
|
+
| <span id="identifiers-DocumentNumberParts-value">`DocumentNumberParts`</span> | `interface` | — | З чого складається номер документа. |
|
|
294
|
+
| <span id="identifiers-DocumentNumbers-value">`DocumentNumbers`</span> | `interface` | — | Номери документів одного переліку серій (series): карбування, прив'язане до того переліку, читання, яке відмовляє будь-якій серії поза ним, і сам перелік. |
|
|
295
|
+
| <span id="identifiers-newClientCode-value">`newClientCode`</span> | `Effect.Effect<ClientCode>` | — | Свіжий код клієнта, взятий із випадковості, яку сервіс уже поділяє. |
|
|
296
|
+
| <span id="identifiers-newUlid-value">`newUlid`</span> | `Effect.Effect<Ulid>` | — | Свіжий ідентифікатор, викарбуваний із годинника й випадковості, які сервіс уже поділяє. |
|
|
297
|
+
| <span id="identifiers-NextDocumentNumberInput-value">`NextDocumentNumberInput`</span> | `interface` | — | Який документ нумерувати: його серія, кому він іде і за який місяць звітує. |
|
|
298
|
+
| <span id="identifiers-ulidsInOrder-value">`ulidsInOrder`</span> | `Effect.Effect<Effect.Effect<Ulid>>` | — | Породжувач ідентифікаторів, які тримають свій порядок навіть тоді, коли два з них падають в одну мілісекунду. |
|
|
299
|
+
|
|
300
|
+
### Процедури
|
|
301
|
+
|
|
302
|
+
| Назва | Сигнатура або тип | За замовчуванням | Що це |
|
|
303
|
+
| --- | --- | --- | --- |
|
|
304
|
+
| <span id="identifiers-clientCodeFrom-procedure">`clientCodeFrom`</span> | `(text: string) => Either.Either<ClientCode, NotAClientCodeError>` | — | Читає код клієнта, який хтось набрав, прощаючи пробіли й дефіси, що їх людина ставить між групами. |
|
|
305
|
+
| <span id="identifiers-clientCodeInGroupedForm-procedure">`clientCodeInGroupedForm`</span> | `(code: ClientCode) => string` | — | Форма, якою людина читає код із документа: дві групи по чотири. |
|
|
306
|
+
| <span id="identifiers-clientCodeOfDocumentNumber-procedure">`clientCodeOfDocumentNumber`</span> | `(number: DocumentNumber) => ClientCode` | — | Код клієнта, надрукований усередині номера документа. |
|
|
307
|
+
| <span id="identifiers-creditorReferenceFrom-procedure">`creditorReferenceFrom`</span> | `(text: string) => Either.Either<CreditorReference, NotACreditorReferenceError>` | — | Читає референс, який хтось набрав, прощаючи регістр, пробіли й дефіси, що їх людина копіює разом із ним. |
|
|
308
|
+
| <span id="identifiers-creditorReferenceInGroupedForm-procedure">`creditorReferenceInGroupedForm`</span> | `(reference: CreditorReference) => string` | — | Форма, якою людина читає референс із документа і набирає його в банку: групи по чотири, як їх друкує ISO 11649. |
|
|
309
|
+
| <span id="identifiers-creditorReferenceOf-procedure">`creditorReferenceOf`</span> | `(number: DocumentNumber) => CreditorReference` | — | Платіжний референс (creditor reference) для документа, який комусь треба сплатити. |
|
|
310
|
+
| <span id="identifiers-dammCheckDigit-procedure">`dammCheckDigit`</span> | `(digits: string) => string \| null` | — | Контрольна цифра, яка робить пробіг цифр самоперевірним, за алгоритмом Дамма. |
|
|
311
|
+
| <span id="identifiers-dammHolds-procedure">`dammHolds`</span> | `(digits: string) => boolean` | — | Чи пробіг цифр уже несе контрольну цифру, яка тримає. |
|
|
312
|
+
| <span id="identifiers-digitsOfClientCode-procedure">`digitsOfClientCode`</span> | `(code: ClientCode) => string` | — | Вісім цифр без нічого між ними — та форма, з якої будують номер документа і платіжний референс. |
|
|
313
|
+
| <span id="identifiers-digitsOfCreditorReference-procedure">`digitsOfCreditorReference`</span> | `(reference: CreditorReference) => string` | — | Цифри номера документа, на який показує цей референс. |
|
|
314
|
+
| <span id="identifiers-digitsOfDocumentNumber-procedure">`digitsOfDocumentNumber`</span> | `(number: DocumentNumber) => string` | — | Цифри номера документа зі знятою серією і дефісами — те, над чим будують платіжний референс. |
|
|
315
|
+
| <span id="identifiers-makeDocumentNumbers-procedure">`makeDocumentNumbers`</span> | `<const Series extends readonly string[]>(series: ClosedSet<Series>) => DocumentNumbers<Series>` | — | Прив'язує номери документів до серій, які видає один сервіс: які види документів існують — це канон того сервісу, а не цього пакета. |
|
|
316
|
+
| <span id="identifiers-reportingMonthOf-procedure">`reportingMonthOf`</span> | `(day: CalendarDay) => string` | — | Дві цифри року і дві місяця, якими пишуть звітний період: березень 2026 читається як `2603`. |
|
|
317
|
+
| <span id="identifiers-ulidOfSeed-procedure">`ulidOfSeed`</span> | `(moment: DateTime.Utc, seed: string) => Ulid` | — | Ідентифікатор, який мить і зерно завжди карбують однаково. |
|
|
318
|
+
| <span id="identifiers-withDammCheckDigit-procedure">`withDammCheckDigit`</span> | `(digits: string) => string \| null` | — | Ті самі цифри з контрольною цифрою, дописаною в кінці. |
|
|
319
|
+
|
|
320
|
+
### Відмови
|
|
321
|
+
|
|
322
|
+
| Назва | Сигнатура або тип | За замовчуванням | Що це |
|
|
323
|
+
| --- | --- | --- | --- |
|
|
324
|
+
| <span id="identifiers-IdentifierFailure-failure">`IdentifierFailure`</span> | `type` | — | Кожен спосіб, яким цей механізм відмовляє значенню. |
|
|
325
|
+
| <span id="identifiers-NotAClientCodeError-failure">`NotAClientCodeError`</span> | `Data.TaggedError<{ readonly text: string }>` | — | Поданий текст не є кодом клієнта. |
|
|
326
|
+
| <span id="identifiers-NotACreditorReferenceError-failure">`NotACreditorReferenceError`</span> | `Data.TaggedError<{ readonly text: string }>` | — | Поданий текст не є платіжним референсом, який видав цей механізм. |
|
|
327
|
+
| <span id="identifiers-NotADocumentNumberError-failure">`NotADocumentNumberError`</span> | `Data.TaggedError<{ readonly text: string }>` | — | Подані частини не складають номера документа, або поданий текст не читається як номер. |
|
|
328
|
+
|
|
329
|
+
## workflow
|
|
330
|
+
|
|
331
|
+
Імпорт із `@satorio/machinery/workflow` — [ціла сторінка](../mechanisms/workflow.mdx).
|
|
332
|
+
|
|
333
|
+
### Значення
|
|
334
|
+
|
|
335
|
+
| Назва | Сигнатура або тип | За замовчуванням | Що це |
|
|
336
|
+
| --- | --- | --- | --- |
|
|
337
|
+
| <span id="workflow-ClaimOnce-value">`ClaimOnce`</span> | `type` | — | Резервація рівно один раз: спільний ґрунт для кожної процедури, яка бере подію або команду один раз. |
|
|
338
|
+
| <span id="workflow-DEFAULT-PUBLISH-PENDING-EVENTS-SETTINGS-value">`DEFAULT_PUBLISH_PENDING_EVENTS_SETTINGS`</span> | `PublishPendingEventsSettings` | — | Темп, який тримає трансмітер вихідних подій, коли сервіс не називає власного. |
|
|
339
|
+
| <span id="workflow-OnClaimMatchers-value">`OnClaimMatchers`</span> | `interface` | — | Дві гілки, які бере `onClaim`: що робити, коли подію вже зарезервовано, і що робити, коли її резервує цей прогін. |
|
|
340
|
+
| <span id="workflow-PublishPendingEventsSettings-value">`PublishPendingEventsSettings`</span> | `interface` | — | Як трансмітер вихідних подій задає собі темп: скільки повідомлень бере один такт і скільки він чекає між тактами. |
|
|
341
|
+
| <span id="workflow-UpcastStep-value">`UpcastStep`</span> | `interface` | — | Один підйом, від названої версії до наступної вгору. |
|
|
342
|
+
| <span id="workflow-VersionedEventDefinition-value">`VersionedEventDefinition`</span> | `interface` | — | Подію, збережену вчора, читає сьогоднішній код. |
|
|
343
|
+
|
|
344
|
+
### Процедури
|
|
345
|
+
|
|
346
|
+
| Назва | Сигнатура або тип | За замовчуванням | Що це |
|
|
347
|
+
| --- | --- | --- | --- |
|
|
348
|
+
| <span id="workflow-claimAsProcessedAt-procedure">`claimAsProcessedAt`</span> | `(idempotencyKey: string, processedAt: DateTime.Utc) => ClaimOnce` | — | Резервує з `processedAt`, поданим викликачем, — для обробника, який уже прочитав годинник і мусить зберегти саме ту мить. |
|
|
349
|
+
| <span id="workflow-claimAsProcessedNow-procedure">`claimAsProcessedNow`</span> | `(idempotencyKey: string) => ClaimOnce` | — | Резервує з поточним часом — для викликача, якому потрібна лише резервація. |
|
|
350
|
+
| <span id="workflow-decodeStoredPayload-procedure">`decodeStoredPayload`</span> | `<S extends Schema.Schema.AnyNoContext>(definition: VersionedEventDefinition<S>, storedVersion: number, payload: unknown) => Effect.Effect<Schema.Schema.Type<S>, VersionedPayloadFailure \| ParseResult.ParseError>` | — | Підіймає збережений payload до поточної версії і декодує його поточною схемою. |
|
|
351
|
+
| <span id="workflow-keepPublishingPendingEvents-procedure">`keepPublishingPendingEvents`</span> | `(settings: PublishPendingEventsSettings = DEFAULT_PUBLISH_PENDING_EVENTS_SETTINGS) => Effect.Effect<never, never, IntegrationEventOutbox \| EventPublisher>` | — | Крутить трансмітер вихідних подій стільки, скільки живе сервіс. |
|
|
352
|
+
| <span id="workflow-onClaim-procedure">`onClaim`</span> | `<A1, E1, R1, A2, E2, R2, EClaim, RClaim>(claim: Effect.Effect<ProcessedEventClaim, EClaim, RClaim>, matchers: OnClaimMatchers<A1, E1, R1, A2, E2, R2>) => Effect.Effect<A1 \| A2, EClaim \| E1 \| E2, RClaim \| R1 \| R2>` | — | Розгалужується на стані резервації: `AlreadyProcessed` іде одним шляхом, `ClaimAccepted` — іншим. |
|
|
353
|
+
| <span id="workflow-publishOneBatch-procedure">`publishOneBatch`</span> | `(batchLimit: number) => Effect.Effect<number, PublishPendingEventsFailure, IntegrationEventOutbox \| EventPublisher>` | — | Один такт трансмітера вихідних подій: узяти пачку недоставлених повідомлень, віддати її публікаторові, тоді позначити її відправленою. |
|
|
354
|
+
| <span id="workflow-transactionally-procedure">`transactionally`</span> | `<A, E, R>(work: Effect.Effect<A, E, R>)` | — | Загортає роботу в межу транзакції: дістає `TransactionBoundary` з контексту і проганяє роботу крізь неї. |
|
|
355
|
+
| <span id="workflow-upcastToCurrentVersion-procedure">`upcastToCurrentVersion`</span> | `<S extends Schema.Schema.AnyNoContext>(definition: VersionedEventDefinition<S>, storedVersion: number, payload: unknown) => Effect.Effect<unknown, VersionedPayloadFailure>` | — | Підіймає збережений payload від версії, якою його записали, до версії, яку читає цей код, по одному кроку на версію, по порядку. |
|
|
356
|
+
|
|
357
|
+
### Відмови
|
|
358
|
+
|
|
359
|
+
| Назва | Сигнатура або тип | За замовчуванням | Що це |
|
|
360
|
+
| --- | --- | --- | --- |
|
|
361
|
+
| <span id="workflow-MissingUpcastStepError-failure">`MissingUpcastStepError`</span> | `Data.TaggedError<{ readonly eventType: string; readonly fromVersion: number; readonly currentVersion: number }>` | — | Одна версія між збереженим payload і поточною не має кроку підйому, тож підйом не доходить до кінця. |
|
|
362
|
+
| <span id="workflow-PublishPendingEventsFailure-failure">`PublishPendingEventsFailure`</span> | `type` | — | Що може зустріти один такт трансмітера: буфер трансмітера не відповів або публікатор не відповів. |
|
|
363
|
+
| <span id="workflow-SchemaVersionFromTheFutureError-failure">`SchemaVersionFromTheFutureError`</span> | `Data.TaggedError<{ readonly eventType: string; readonly storedVersion: number; readonly currentVersion: number }>` | — | Збережений payload каже, що його записала новіша версія цього коду, ніж та, що його читає. |
|
|
364
|
+
| <span id="workflow-UpcastStepFailedError-failure">`UpcastStepFailedError`</span> | `Data.TaggedError<{ readonly eventType: string; readonly fromVersion: number; readonly cause: unknown }>` | — | Крок підйому кинув помилку, поки підіймав payload на версію вгору. |
|
|
365
|
+
| <span id="workflow-VersionedPayloadFailure-failure">`VersionedPayloadFailure`</span> | `type` | — | Кожен спосіб, яким читання збереженого payload може відмовити. |
|
|
366
|
+
|
|
367
|
+
## graphql
|
|
368
|
+
|
|
369
|
+
Імпорт із `@satorio/machinery/graphql` — [ціла сторінка](../mechanisms/graphql.mdx).
|
|
370
|
+
|
|
371
|
+
### Значення
|
|
372
|
+
|
|
373
|
+
| Назва | Сигнатура або тип | За замовчуванням | Що це |
|
|
374
|
+
| --- | --- | --- | --- |
|
|
375
|
+
| <span id="graphql-ENVIRONMENT-value">`ENVIRONMENT`</span> | `readonly EnvironmentEntry[]` | — | Кожна змінна, яку читає цей адаптер (adapter), і один стан, у якому стоїть кожна з них. |
|
|
376
|
+
| <span id="graphql-EveryFailureIsClassified-value">`EveryFailureIsClassified`</span> | `type` | — | Доказ того, що кожну відмову, яку може підняти сервіс, замаплено на цій межі. |
|
|
377
|
+
| <span id="graphql-graphiqlEnabledFromEnvironment-value">`graphiqlEnabledFromEnvironment`</span> | `Config.Config<boolean>` | — | Чи віддавати сторінку редактора. |
|
|
378
|
+
| <span id="graphql-GraphiqlPage-value">`GraphiqlPage`</span> | `interface` | — | Сторінка GraphiQL: заголовок і наперед заповнений документ. |
|
|
379
|
+
| <span id="graphql-GRAPHQL-ENDPOINT-value">`GRAPHQL_ENDPOINT`</span> | `const` | — | Єдиний шлях, на якому відповідає точка GraphQL. |
|
|
380
|
+
| <span id="graphql-GraphQLContext-value">`GraphQLContext`</span> | `interface` | — | Що резолвер читає зі свого контексту: один виклик, який виконує програму процедури і відповідає її значенням або `GraphQLError`. |
|
|
381
|
+
| <span id="graphql-graphqlPortFromEnvironment-value">`graphqlPortFromEnvironment`</span> | `Config.Config<number>` | — | Порт, на якому слухати. |
|
|
382
|
+
| <span id="graphql-RunOperationsExit-value">`RunOperationsExit`</span> | `type` | — | Найменша спроможність, яку резолвер позичає в рантайму: виконати програму, що потребує `R`, і повернути її `Exit`. |
|
|
383
|
+
|
|
384
|
+
### Процедури
|
|
385
|
+
|
|
386
|
+
| Назва | Сигнатура або тип | За замовчуванням | Що це |
|
|
387
|
+
| --- | --- | --- | --- |
|
|
388
|
+
| <span id="graphql-asGraphQLError-procedure">`asGraphQLError`</span> | `(failure: OperationFailure \| ParseResult.ParseError) => GraphQLError` | — | Мапить відмову GraphQL на `GraphQLError`: той самий канал відмов операції з трьох класів плюс відмови декодера входу — жодного другого каталогу. |
|
|
389
|
+
| <span id="graphql-graphiqlExampleProblems-procedure">`graphiqlExampleProblems`</span> | `(schema: GraphQLSchema, page: GraphiqlPage) => readonly GraphiqlExampleProblem[]` | — | Звіряє типовий запит сторінки GraphiQL зі схемою. |
|
|
390
|
+
| <span id="graphql-graphqlContextFrom-procedure">`graphqlContextFrom`</span> | `<R>(runExit: RunOperationsExit<R>) => GraphQLContext<R>` | — | Будує той контекст навколо власного `runPromiseExit` рантайму, тож резолвер ніколи не торкається рантайму напряму. |
|
|
391
|
+
| <span id="graphql-makeSubGraphSchemaBuilder-procedure">`makeSubGraphSchemaBuilder`</span> | `<Context extends object>()` | — | Повертає фабрику будівників, яка несе тип контексту резолвера. |
|
|
392
|
+
| <span id="graphql-makeYogaServer-procedure">`makeYogaServer`</span> | `<R>(options: GraphQLServerOptions<R>) => YogaServerInstance<Record<string, never>, GraphQLContext<R>>` | — | Будує GraphQL-сервер Yoga для Bun. |
|
|
393
|
+
| <span id="graphql-serverCannotListen-procedure">`serverCannotListen`</span> | `(port: number, cause: unknown) => ServerCannotListenError` | — | Перетворює те, що кинув рантайм, відкриваючи сокет, на названу відмову, яку читає викликач. |
|
|
394
|
+
|
|
395
|
+
### Адаптери
|
|
396
|
+
|
|
397
|
+
| Назва | Сигнатура або тип | За замовчуванням | Що це |
|
|
398
|
+
| --- | --- | --- | --- |
|
|
399
|
+
| <span id="graphql-graphqlServerLive-adapter">`graphqlServerLive`</span> | `<R>(options: GraphQLRequestHandlerOptions<R>) => Layer.Layer<never, ConfigError.ConfigError \| ServerCannotListenError, R>` | — | Єдиний шар, який монтує цей механізм: сервер, що відповідає на ваші операції. |
|
|
400
|
+
|
|
401
|
+
### Відмови
|
|
402
|
+
|
|
403
|
+
| Назва | Сигнатура або тип | За замовчуванням | Що це |
|
|
404
|
+
| --- | --- | --- | --- |
|
|
405
|
+
| <span id="graphql-OperationFailure-failure">`OperationFailure`</span> | `type` | — | Усе, чим резолвер може відмовити, як один чітко визначений перелік: не знайдено, відхилено або недоступно. |
|
|
406
|
+
| <span id="graphql-OperationRejectedError-failure">`OperationRejectedError`</span> | `Data.TaggedError<{ readonly rule: string; readonly reason: string; readonly detail: string }>` | — | Правило резолвера відхилило операцію, і `reason` називає причину, яку воно розпізнало. |
|
|
407
|
+
| <span id="graphql-OperationsUnavailableError-failure">`OperationsUnavailableError`</span> | `Data.TaggedError<{ readonly operation: string; readonly cause: unknown }>` | — | Власна залежність резолвера не відповіла; `cause` несе відмову самого порту. |
|
|
408
|
+
| <span id="graphql-ServerCannotListenError-failure">`ServerCannotListenError`</span> | `Data.TaggedError<{ readonly port: number; readonly refusal: Refusal; readonly cause: unknown }>` | — | Сокет так і не відкрився. |
|
|
409
|
+
| <span id="graphql-SubjectNotFoundError-failure">`SubjectNotFoundError`</span> | `Data.TaggedError<{ readonly subject: string; readonly id: string }>` | — | Один із рівно трьох класів відмови операції нижче — чітко визначений перелік, на який мапить резолвер. |
|
|
410
|
+
|
|
411
|
+
### Змінні оточення
|
|
412
|
+
|
|
413
|
+
| Назва | Сигнатура або тип | За замовчуванням | Що це |
|
|
414
|
+
| --- | --- | --- | --- |
|
|
415
|
+
| <span id="graphql-GRAPHQL-PORT-environment-variable">`GRAPHQL_PORT`</span> | `falls back` | `4000` | Порт, на якому слухають точка GraphQL і проби готовності. |
|
|
416
|
+
| <span id="graphql-GRAPHIQL-ENABLED-environment-variable">`GRAPHIQL_ENABLED`</span> | `falls back` | `true` | Чи віддається сторінка редактора GraphiQL на тій самій точці. |
|
|
417
|
+
|
|
418
|
+
## integration
|
|
419
|
+
|
|
420
|
+
Імпорт із `@satorio/machinery/integration` — [ціла сторінка](../mechanisms/integration.mdx).
|
|
421
|
+
|
|
422
|
+
### Значення
|
|
423
|
+
|
|
424
|
+
| Назва | Сигнатура або тип | За замовчуванням | Що це |
|
|
425
|
+
| --- | --- | --- | --- |
|
|
426
|
+
| <span id="integration-DEFAULT-TIMEOUT-MILLIS-value">`DEFAULT_TIMEOUT_MILLIS`</span> | `const` | — | Скільки може тривати один виклик, коли ніхто не назвав числа. |
|
|
427
|
+
| <span id="integration-defaultExternalRetrySchedule-value">`defaultExternalRetrySchedule`</span> | `Schedule.Schedule<unknown, unknown>` | — | Як виклик чекає і пробує знову: зростальні паузи, з джитером, на короткому бюджеті. |
|
|
428
|
+
| <span id="integration-ENVIRONMENT-value">`ENVIRONMENT`</span> | `readonly EnvironmentEntry[]` | — | Кожна змінна, яку читає цей адаптер, і один стан, у якому стоїть кожна з них. |
|
|
429
|
+
| <span id="integration-ExternalServiceSettings-value">`ExternalServiceSettings`</span> | `interface` | — | Що потрібно клієнтові, перш ніж він подзвонить: адреса, під яку йде кожен запит, і скільки може тривати один виклик. |
|
|
430
|
+
|
|
431
|
+
### Процедури
|
|
432
|
+
|
|
433
|
+
| Назва | Сигнатура або тип | За замовчуванням | Що це |
|
|
434
|
+
| --- | --- | --- | --- |
|
|
435
|
+
| <span id="integration-baseUrlVariable-procedure">`baseUrlVariable`</span> | `(variablePrefix: string) => string` | — | Будує назву змінної оточення з префікса, який застосунок дає під час монтування. |
|
|
436
|
+
| <span id="integration-externalHttpClientUnavailableWithoutConfiguration-procedure">`externalHttpClientUnavailableWithoutConfiguration`</span> | `(service: string, refusal: Refusal) => ExternalHttpClientShape` | — | Клієнт, який стоїть замість справжнього, коли адресу ніхто не поставив, і гучно валить кожен виклик. |
|
|
437
|
+
| <span id="integration-externalServiceSettings-procedure">`externalServiceSettings`</span> | `(variablePrefix: string) => Config.Config<ExternalServiceSettings>` | — | Читає кожну змінну з `ENVIRONMENT` під одним префіксом. |
|
|
438
|
+
| <span id="integration-makeExternalHttpClient-procedure">`makeExternalHttpClient`</span> | `(service: string, settings: ExternalServiceSettings) => Effect.Effect<ExternalHttpClientShape, never, HttpClient.HttpClient>` | — | Готовий до вжитку клієнт із уже захопленим транспортом. |
|
|
439
|
+
| <span id="integration-timeoutVariable-procedure">`timeoutVariable`</span> | `(variablePrefix: string) => string` | — | Будує назву змінної строку з того самого префікса, тож кожен зовнішній сервіс в одному процесі тримає власне терпіння. |
|
|
440
|
+
|
|
441
|
+
### Адаптери
|
|
442
|
+
|
|
443
|
+
| Назва | Сигнатура або тип | За замовчуванням | Що це |
|
|
444
|
+
| --- | --- | --- | --- |
|
|
445
|
+
| <span id="integration-externalHttpClientFromEnvironmentLive-adapter">`externalHttpClientFromEnvironmentLive`</span> | `(service: string, variablePrefix: string, transport: Layer.Layer<HttpClient.HttpClient> = FetchHttpClient.layer) => Layer.Layer<ExternalHttpClient, ConfigError.ConfigError>` | — | Клієнт, зібраний зі змінних оточення під одним префіксом. |
|
|
446
|
+
| <span id="integration-externalHttpClientLive-adapter">`externalHttpClientLive`</span> | `(service: string, variablePrefix: string) => Layer.Layer<ExternalHttpClient, ConfigError.ConfigError>` | — | Один зовнішній сервіс на справжньому транспорті `fetch`, який читає змінні, названі його префіксом. |
|
|
447
|
+
|
|
448
|
+
### Змінні оточення
|
|
449
|
+
|
|
450
|
+
| Назва | Сигнатура або тип | За замовчуванням | Що це |
|
|
451
|
+
| --- | --- | --- | --- |
|
|
452
|
+
| <span id="integration-PREFIX-BASE-URL-environment-variable">`<PREFIX>_BASE_URL`</span> | `refuses` | — | Адреса, під яку йде кожен виклик до цього зовнішнього сервісу. |
|
|
453
|
+
| <span id="integration-PREFIX-TIMEOUT-MILLIS-environment-variable">`<PREFIX>_TIMEOUT_MILLIS`</span> | `falls back` | `3000` | Скільки мілісекунд може тривати один виклик, перш ніж рахуватись мережевою невдачею. |
|
|
454
|
+
|
|
455
|
+
## postgres
|
|
456
|
+
|
|
457
|
+
Імпорт із `@satorio/machinery/postgres` — [ціла сторінка](../mechanisms/postgres.mdx).
|
|
458
|
+
|
|
459
|
+
### Значення
|
|
460
|
+
|
|
461
|
+
| Назва | Сигнатура або тип | За замовчуванням | Що це |
|
|
462
|
+
| --- | --- | --- | --- |
|
|
463
|
+
| <span id="postgres-AdvisoryLock-value">`AdvisoryLock`</span> | `interface` | — | Замок, який хтось інший може вже тримати: його назва, спроба взяти його і звільнення, що йде слідом. |
|
|
464
|
+
| <span id="postgres-DEFAULT-APPLICATION-NAME-value">`DEFAULT_APPLICATION_NAME`</span> | `const` | — | Назва, під якою цей сервіс видно у власному списку з'єднань бази, коли її ніхто не називає. |
|
|
465
|
+
| <span id="postgres-DEFAULT-AUTH-MODE-value">`DEFAULT_AUTH_MODE`</span> | `'iam' \| 'password'` | — | Як сервіс доводить, хто він, коли ніщо не каже інакше. |
|
|
466
|
+
| <span id="postgres-DEFAULT-POSTGRES-PORT-value">`DEFAULT_POSTGRES_PORT`</span> | `const` | — | Порт, на якому слухає сервер Postgres, коли ніхто не каже інакше. |
|
|
467
|
+
| <span id="postgres-DEFAULT-POSTGRES-SCHEMA-value">`DEFAULT_POSTGRES_SCHEMA`</span> | `const` | — | Схема, проти якої біжить кожен запит, коли ніхто її не називає. |
|
|
468
|
+
| <span id="postgres-DEFAULT-POSTGRES-SSL-MODE-value">`DEFAULT_POSTGRES_SSL_MODE`</span> | `PostgresSslMode` | — | Як шифрується з'єднання, коли ніхто не каже інакше: ланцюг перевіряють, тож безпечний вибір — той, який ви дістаєте, не сказавши нічого. |
|
|
469
|
+
| <span id="postgres-ENVIRONMENT-value">`ENVIRONMENT`</span> | `readonly EnvironmentEntry[]` | — | Кожна змінна, яку читає цей адаптер, і один стан, у якому стоїть кожна з них. |
|
|
470
|
+
| <span id="postgres-MACHINERY-MIGRATIONS-DIRECTORY-value">`MACHINERY_MIGRATIONS_DIRECTORY`</span> | `const` | — | Директорія зі спільними міграціями (migration) машинерії: реєстр відпрацьованих подій і буфер трансмітера. |
|
|
471
|
+
| <span id="postgres-MIGRATION-LOCK-NAME-value">`MIGRATION_LOCK_NAME`</span> | `const` | — | Назва, з якої будують кожен замок міграцій, тож один читач знаходить їх усі. |
|
|
472
|
+
| <span id="postgres-POSTGRES-SSL-MODES-value">`POSTGRES_SSL_MODES`</span> | `const` | — | Кожен спосіб зашифрувати й перевірити з'єднання — від жодного шифрування до цілком перевіреного ланцюга. |
|
|
473
|
+
| <span id="postgres-PostgresAuthentication-value">`PostgresAuthentication`</span> | `type` | — | Два способи довести базі, хто ви: короткоживучий токен IAM або пароль. |
|
|
474
|
+
| <span id="postgres-PostgresConnectionSettings-value">`PostgresConnectionSettings`</span> | `interface` | — | Усе, що потрібно одному з'єднанню, прочитане за раз: де сервер, хто під'єднується і як з'єднання доводять та шифрують. |
|
|
475
|
+
| <span id="postgres-postgresConnectionSettings-value">`postgresConnectionSettings`</span> | `Config.Config<PostgresConnectionSettings>` | — | Кожна змінна з `ENVIRONMENT`, прочитана за раз. |
|
|
476
|
+
| <span id="postgres-PostgresPorts-value">`PostgresPorts`</span> | `type` | — | Порти, які реалізує цей механізм, названі разом одним типом. |
|
|
477
|
+
| <span id="postgres-PostgresSslMode-value">`PostgresSslMode`</span> | `(typeof POSTGRES_SSL_MODES)[number]` | — | Один зі способів зашифрувати й перевірити з'єднання. |
|
|
478
|
+
| <span id="postgres-READINESS-QUERY-DEADLINE-MILLIS-value">`READINESS_QUERY_DEADLINE_MILLIS`</span> | `const` | — | Скільки проба чекає на свій запит, перш ніж звітувати «лежить». |
|
|
479
|
+
| <span id="postgres-READINESS-REASON-WHEN-THE-DATABASE-STAYS-SILENT-value">`READINESS_REASON_WHEN_THE_DATABASE_STAYS_SILENT`</span> | `const` | — | Причина, про яку звітують, коли запит готовності відповідає відмовою. |
|
|
480
|
+
| <span id="postgres-READINESS-REASON-WHEN-THE-QUERY-TIMES-OUT-value">`READINESS_REASON_WHEN_THE_QUERY_TIMES_OUT`</span> | `const` | — | Причина, про яку звітують, коли запитові готовності виходить строк. |
|
|
481
|
+
|
|
482
|
+
### Процедури
|
|
483
|
+
|
|
484
|
+
| Назва | Сигнатура або тип | За замовчуванням | Що це |
|
|
485
|
+
| --- | --- | --- | --- |
|
|
486
|
+
| <span id="postgres-applyMigrations-procedure">`applyMigrations`</span> | `(directories: readonly string[] = [MACHINERY_MIGRATIONS_DIRECTORY])` | — | Застосовує міграції, що чекають, із поданих директорій: спершу власна директорія машинерії, тоді директорія викликача. |
|
|
487
|
+
| <span id="postgres-configProviderPreferring-procedure">`configProviderPreferring`</span> | `(primary: ConfigProvider.ConfigProvider, fallbackKey: string, fallbackValue: string) => ConfigProvider.ConfigProvider` | — | Будує постачальника конфігурації, який читає з `primary` і падає на одне фіксоване значення, коли в `primary` такого ключа немає. |
|
|
488
|
+
| <span id="postgres-firstRow-procedure">`firstRow`</span> | `<A>(rows: readonly A[]) => Option.Option<A>` | — | Повертає перший рядок або `Option.none()` для порожнього результату. |
|
|
489
|
+
| <span id="postgres-holdingAdvisoryLock-procedure">`holdingAdvisoryLock`</span> | `<ELock, RLock, ScheduleOut, RSchedule>(lock: AdvisoryLock<ELock, RLock>, retryWhileBusy: Schedule.Schedule<ScheduleOut, unknown, RSchedule>)` | — | Виконує ефект, тримаючи замок, чекає за поданим розкладом, поки замок тримає хтось інший, і відпускає його, хай як ефект скінчиться. |
|
|
490
|
+
| <span id="postgres-isUniqueViolation-procedure">`isUniqueViolation`</span> | `(error: SqlError) => boolean` | — | Чи ця відмова драйвера є дублем ключа, а не чимось іншим, чому база могла б відмовити. |
|
|
491
|
+
| <span id="postgres-jsonbValue-procedure">`jsonbValue`</span> | `(sql: SqlClient.SqlClient, value: unknown) => Fragment` | — | Подає значення в колонку `jsonb` як JSON, хай яка в нього форма. |
|
|
492
|
+
| <span id="postgres-migrationLockNameFor-procedure">`migrationLockNameFor`</span> | `(schema: string) => string` | — | Замок, який беруть міграції однієї схеми, тож два сервіси, що мігрують дві схеми, ніколи не чекають один одного. |
|
|
493
|
+
| <span id="postgres-onUniqueViolation-procedure">`onUniqueViolation`</span> | `<Conflict, Unavailable>(operation: string, branches: { readonly unique: () => Conflict; readonly unavailable: ( operation: string, ) => (cause: unknown) => Unavailable })` | — | Ділить шлях запису на межі бази: порушення унікальності стає доменним конфліктом, будь-який інший `SqlError` стає «сховище недоступне». |
|
|
494
|
+
| <span id="postgres-postgresAdvisoryLock-procedure">`postgresAdvisoryLock`</span> | `(name: string) => AdvisoryLock<SqlError.SqlError, SqlClient.SqlClient>` | — | Названий консультативний замок на власній базі цього з'єднання. |
|
|
495
|
+
| <span id="postgres-readinessProbeAsking-procedure">`readinessProbeAsking`</span> | `(aQueryTheDatabaseMustAnswer: Effect.Effect<unknown, SqlError>)` | — | Будує пробу навколо одного запиту, на який має відповісти база, зі строком над ним, тож недосяжна база звітує «лежить», а не зависає. |
|
|
496
|
+
| <span id="postgres-reportApplied-procedure">`reportApplied`</span> | `(applied: ReadonlyArray<readonly [number, string]>) => Effect.Effect<void>` | — | Каже одним рядком, що прогін застосував, або що база вже поточна. |
|
|
497
|
+
| <span id="postgres-schemaDefaultingTo-procedure">`schemaDefaultingTo`</span> | `(schema: string) => ConfigProvider.ConfigProvider` | — | Схема за замовчуванням для одного сервісу, коли `PGSCHEMA` не поставлено. |
|
|
498
|
+
|
|
499
|
+
### Адаптери
|
|
500
|
+
|
|
501
|
+
| Назва | Сигнатура або тип | За замовчуванням | Що це |
|
|
502
|
+
| --- | --- | --- | --- |
|
|
503
|
+
| <span id="postgres-MigrationPgClientLive-adapter">`MigrationPgClientLive`</span> | `Layer.Layer<PgClient.PgClient \| SqlClient.SqlClient, ConfigError \| PlatformError \| SqlError, FileSystem.FileSystem>` | — | Клієнт, яким користується виконавець міграцій: одне з'єднання під власною назвою. |
|
|
504
|
+
| <span id="postgres-PgDocumentNumberCounterLive-adapter">`PgDocumentNumberCounterLive`</span> | `Layer.Layer<DocumentNumberCounter, never, PgClient.PgClient>` | — | Лічильник номерів документів на справжній таблиці `document_number_counter`. |
|
|
505
|
+
| <span id="postgres-PgIntegrationEventOutboxLive-adapter">`PgIntegrationEventOutboxLive`</span> | `Layer.Layer<IntegrationEventOutbox, never, PgClient.PgClient>` | — | Буфер трансмітера на справжній таблиці `integration_event_outbox`. |
|
|
506
|
+
| <span id="postgres-PgProcessedEventRegistryLive-adapter">`PgProcessedEventRegistryLive`</span> | `Layer.Layer<ProcessedEventRegistry, never, PgClient.PgClient>` | — | Резервація рівно один раз на справжній таблиці `processed_event`. |
|
|
507
|
+
| <span id="postgres-PgReadinessProbeLive-adapter">`PgReadinessProbeLive`</span> | `Layer.Layer<ReadinessProbe, never, SqlClient.SqlClient>` | — | Проба готовності на одному `SELECT 1` проти власного пулу сервісу. |
|
|
508
|
+
| <span id="postgres-PgTransactionBoundaryLive-adapter">`PgTransactionBoundaryLive`</span> | `Layer.Layer<TransactionBoundary, never, SqlClient.SqlClient>` | — | Межа транзакції на справжній транзакції Postgres. |
|
|
509
|
+
| <span id="postgres-PostgresClientLive-adapter">`PostgresClientLive`</span> | `Layer.Layer<PgClient.PgClient \| SqlClient.SqlClient, ConfigError \| PlatformError \| SqlError, FileSystem.FileSystem>` | — | Клієнт `@effect/sql-pg`, на якому стоїть кожен інший шар тут, відкритий з оточення, яке називає `settings.ts`. |
|
|
510
|
+
| <span id="postgres-PostgresPortsLive-adapter">`PostgresPortsLive`</span> | `Layer.Layer<PostgresPorts \| PgClient.PgClient \| SqlClient.SqlClient, ConfigError \| PlatformError \| SqlError, FileSystem.FileSystem>` | — | Кожен порт, який реалізує цей механізм, на одному клієнті, для сервісу, що подає власну `FileSystem`. |
|
|
511
|
+
| <span id="postgres-PostgresPortsOnBunLive-adapter">`PostgresPortsOnBunLive`</span> | `Layer.Layer<PostgresPorts \| PgClient.PgClient \| SqlClient.SqlClient, ConfigError \| PlatformError \| SqlError>` | — | Той самий набір на власній файловій системі Bun, і це вся частина машинерії з боку Postgres в одному шарі. |
|
|
512
|
+
|
|
513
|
+
### Відмови
|
|
514
|
+
|
|
515
|
+
| Назва | Сигнатура або тип | За замовчуванням | Що це |
|
|
516
|
+
| --- | --- | --- | --- |
|
|
517
|
+
| <span id="postgres-MigrationLockBusyError-failure">`MigrationLockBusyError`</span> | `Data.TaggedError<{ readonly lockName: string }>` | — | Другий процес уже тримає замок міграцій і не відпустив його у вікні спроб. |
|
|
518
|
+
|
|
519
|
+
### Змінні оточення
|
|
520
|
+
|
|
521
|
+
| Назва | Сигнатура або тип | За замовчуванням | Що це |
|
|
522
|
+
| --- | --- | --- | --- |
|
|
523
|
+
| <span id="postgres-PGHOST-environment-variable">`PGHOST`</span> | `refuses` | — | Хост, проти якого цей сервіс відкриває свій пул з'єднань. |
|
|
524
|
+
| <span id="postgres-PGPORT-environment-variable">`PGPORT`</span> | `falls back` | `5432` | Порт TCP, на якому слухає база. |
|
|
525
|
+
| <span id="postgres-PGUSER-environment-variable">`PGUSER`</span> | `refuses` | — | Роль Postgres, під якою під'єднується цей сервіс. |
|
|
526
|
+
| <span id="postgres-PGDATABASE-environment-variable">`PGDATABASE`</span> | `refuses` | — | База, яку цей сервіс читає і пише. |
|
|
527
|
+
| <span id="postgres-PGSCHEMA-environment-variable">`PGSCHEMA`</span> | `falls back` | `app` | Схема, проти якої біжить кожен запит, поставлена як `search_path` з'єднання. |
|
|
528
|
+
| <span id="postgres-PGAPPNAME-environment-variable">`PGAPPNAME`</span> | `falls back` | `machinery` | Назва, під якою цей сервіс видно в `pg_stat_activity`. |
|
|
529
|
+
| <span id="postgres-PGSSLMODE-environment-variable">`PGSSLMODE`</span> | `falls back` | `verify-full` | Як з'єднання шифрують і перевіряють; один із `disable`, `allow`, `prefer`, `require`, `verify-ca`, `verify-full`. |
|
|
530
|
+
| <span id="postgres-PGSSLROOTCERT-environment-variable">`PGSSLROOTCERT`</span> | `handed on` | — | Шлях до файлу центру сертифікації, проти якого перевіряють ланцюг бази. |
|
|
531
|
+
| <span id="postgres-AUTH-MODE-environment-variable">`AUTH_MODE`</span> | `falls back` | `password` | Котрим із двох способів цей сервіс доводить, хто він: `iam` чи `password`. |
|
|
532
|
+
| <span id="postgres-PGPASSWORD-environment-variable">`PGPASSWORD`</span> | `refuses` | — | Пароль бази, який читають у режимі `password` за замовчуванням. |
|
|
533
|
+
| <span id="postgres-AWS-REGION-environment-variable">`AWS_REGION`</span> | `handed on` | — | Регіон, проти якого підписує підписувач токенів IAM; його читають при `AUTH_MODE=iam`. |
|
|
534
|
+
|
|
535
|
+
## publishing
|
|
536
|
+
|
|
537
|
+
Імпорт із `@satorio/machinery/publishing` — [ціла сторінка](../mechanisms/publishing.mdx).
|
|
538
|
+
|
|
539
|
+
### Значення
|
|
540
|
+
|
|
541
|
+
| Назва | Сигнатура або тип | За замовчуванням | Що це |
|
|
542
|
+
| --- | --- | --- | --- |
|
|
543
|
+
| <span id="publishing-DEFAULT-EVENT-CHANNEL-value">`DEFAULT_EVENT_CHANNEL`</span> | `const` | — | Канал лога, під яким публікатор на stdout пише свої події, коли ніхто не назвав іншого. |
|
|
544
|
+
| <span id="publishing-ENVIRONMENT-value">`ENVIRONMENT`</span> | `readonly EnvironmentEntry[]` | — | Кожна змінна, яку читає цей адаптер, і один стан, у якому стоїть кожна з них. |
|
|
545
|
+
| <span id="publishing-SnsPublisherSettings-value">`SnsPublisherSettings`</span> | `interface` | — | Що потрібно публікаторові SNS, перш ніж він надішле: один топік і дві змінні, які AWS SDK читає сам, коли їх ніхто не називає. |
|
|
546
|
+
|
|
547
|
+
### Процедури
|
|
548
|
+
|
|
549
|
+
| Назва | Сигнатура або тип | За замовчуванням | Що це |
|
|
550
|
+
| --- | --- | --- | --- |
|
|
551
|
+
| <span id="publishing-snsMessageBodyOf-procedure">`snsMessageBodyOf`</span> | `(message: OutboxMessage) => string` | — | Тіло повідомлення, яке читає підписник: той самий конверт, що й рядок на stdout, без каналу — тут цю роль грає сам топік. |
|
|
552
|
+
| <span id="publishing-snsPublisherSettings-procedure">`snsPublisherSettings`</span> | `(variablePrefix: string) => Config.Config<SnsPublisherSettings>` | — | Читає кожну змінну, потрібну публікаторові SNS, під одним префіксом. |
|
|
553
|
+
| <span id="publishing-stdoutLineOf-procedure">`stdoutLineOf`</span> | `(channel: string, message: OutboxMessage) => string` | — | Найпростіший публікатор: подія мандрує одним рядком JSON на stdout, звідки її забирає збирач логів. |
|
|
554
|
+
| <span id="publishing-topicArnVariable-procedure">`topicArnVariable`</span> | `(variablePrefix: string) => string` | — | Будує назву змінної оточення з префікса, який застосунок дає під час монтування. |
|
|
555
|
+
|
|
556
|
+
### Адаптери
|
|
557
|
+
|
|
558
|
+
| Назва | Сигнатура або тип | За замовчуванням | Що це |
|
|
559
|
+
| --- | --- | --- | --- |
|
|
560
|
+
| <span id="publishing-snsEventPublisherLive-adapter">`snsEventPublisherLive`</span> | `(variablePrefix: string) => Layer.Layer<EventPublisher, ConfigError.ConfigError>` | — | Публікатор SNS на справжньому транспорті AWS SDK, який читає змінні, названі цим префіксом. |
|
|
561
|
+
| <span id="publishing-StdoutEventPublisherLive-adapter">`StdoutEventPublisherLive`</span> | `Layer.Layer<EventPublisher>` | — | Змонтований публікатор на stdout: один рядок JSON на подію під каналом, який називає `EVENT_CHANNEL`. |
|
|
562
|
+
|
|
563
|
+
### Змінні оточення
|
|
564
|
+
|
|
565
|
+
| Назва | Сигнатура або тип | За замовчуванням | Що це |
|
|
566
|
+
| --- | --- | --- | --- |
|
|
567
|
+
| <span id="publishing-PREFIX-TOPIC-ARN-environment-variable">`<PREFIX>_TOPIC_ARN`</span> | `refuses` | — | Топік SNS, до якого цей публікатор надсилає події. |
|
|
568
|
+
| <span id="publishing-EVENT-CHANNEL-environment-variable">`EVENT_CHANNEL`</span> | `falls back` | `machinery-integration-events` | Слово, за яким збирач логів фільтрує рядки публікатора на stdout. |
|
|
569
|
+
| <span id="publishing-AWS-REGION-environment-variable">`AWS_REGION`</span> | `handed on` | — | Регіон, з яким говорить клієнт SNS. |
|
|
570
|
+
| <span id="publishing-AWS-ENDPOINT-URL-environment-variable">`AWS_ENDPOINT_URL`</span> | `handed on` | — | Локальний стенд, з яким говорити замість справжнього SNS, наприклад localstack. |
|
|
571
|
+
|
|
572
|
+
## queue
|
|
573
|
+
|
|
574
|
+
Імпорт із `@satorio/machinery/queue` — [ціла сторінка](../mechanisms/queue.mdx).
|
|
575
|
+
|
|
576
|
+
### Значення
|
|
577
|
+
|
|
578
|
+
| Назва | Сигнатура або тип | За замовчуванням | Що це |
|
|
579
|
+
| --- | --- | --- | --- |
|
|
580
|
+
| <span id="queue-defaultQueueRetrySchedule-value">`defaultQueueRetrySchedule`</span> | `QueueRetrySchedule` | — | Очікування, якого тримається робітник, коли сервіс не називає власного розкладу: зростальні паузи, з джитером, і межа на кількість спроб. |
|
|
581
|
+
| <span id="queue-ENVIRONMENT-value">`ENVIRONMENT`</span> | `readonly EnvironmentEntry[]` | — | Кожна змінна, яку читає цей адаптер, і один стан, у якому стоїть кожна з них. |
|
|
582
|
+
| <span id="queue-EventDefinitionRegistry-value">`EventDefinitionRegistry`</span> | `interface` | — | Що пропонує власний список визначень подій сервісу: чи тип події відомий і яке визначення за ним стоїть. |
|
|
583
|
+
| <span id="queue-IncomingQueueMessage-value">`IncomingQueueMessage`</span> | `interface` | — | Одне повідомлення таким, яким його зустрічає обробник: власні поля конверта і сама декодована подія. |
|
|
584
|
+
| <span id="queue-PayloadDecoder-value">`PayloadDecoder`</span> | `type` | — | Те, що перетворює збережений payload якоїсь версії на подію, з якою працює обробник. |
|
|
585
|
+
| <span id="queue-QueueConsumerSettings-value">`QueueConsumerSettings`</span> | `interface` | — | Що потрібно робітникові, перш ніж він отримає бодай одне повідомлення. |
|
|
586
|
+
| <span id="queue-QueueMessageBody-value">`QueueMessageBody`</span> | `const` | — | Конверт таким, яким він мандрує: текст JSON на дроті, прочитаний і записаний однією схемою. |
|
|
587
|
+
| <span id="queue-QueueMessageConsumerOptions-value">`QueueMessageConsumerOptions`</span> | `interface` | — | Що потрібно робітникові, щоб перетворити повідомлення черги на роботу. |
|
|
588
|
+
| <span id="queue-QueueMessageOutcome-value">`QueueMessageOutcome`</span> | `type` | — | Доля одного повідомлення має рівно три кінці: підтверджено, лишено на перевідправку або відмовлено назавжди. |
|
|
589
|
+
| <span id="queue-QueueProducerSettings-value">`QueueProducerSettings`</span> | `interface` | — | Що потрібно відправникові, перш ніж він надішле: черга і ті самі дві змінні, які SDK вирішує сам. |
|
|
590
|
+
| <span id="queue-QueueRetrySchedule-value">`QueueRetrySchedule`</span> | `type` | — | Як робітник чекає і пробує знову, поки сама черга не відповідає. |
|
|
591
|
+
| <span id="queue-RedeliveryReason-value">`RedeliveryReason`</span> | `type` | — | Чому повідомлення повертається в чергу: воно так і не декодувалось, або обробник його відхилив. |
|
|
592
|
+
| <span id="queue-SchemaVersion-value">`SchemaVersion`</span> | `const` | — | Версія, якою надано форми збереженому payload: ціле число понад нуль і ніколи нічого іншого. |
|
|
593
|
+
| <span id="queue-SQS-DEFAULT-VISIBILITY-TIMEOUT-SECONDS-value">`SQS_DEFAULT_VISIBILITY_TIMEOUT_SECONDS`</span> | `const` | — | Скільки отримане повідомлення лишається схованим, поки над ним працює обробник, коли ніхто не назвав числа. |
|
|
594
|
+
| <span id="queue-StoredEventEnvelope-value">`StoredEventEnvelope`</span> | `const` | — | Спільний контракт черги, у якому мандрує кожне повідомлення. |
|
|
595
|
+
|
|
596
|
+
### Процедури
|
|
597
|
+
|
|
598
|
+
| Назва | Сигнатура або тип | За замовчуванням | Що це |
|
|
599
|
+
| --- | --- | --- | --- |
|
|
600
|
+
| <span id="queue-consumeQueueMessages-procedure">`consumeQueueMessages`</span> | `<A, E, R>(options: QueueMessageConsumerOptions<A, E, R>) => Stream.Stream<QueueMessageOutcome, QueueMessageSourceUnavailableError, R \| QueueMessageSource>` | — | Читає повідомлення з черги і віддає кожне обробникові, відповідаючи долею кожного взятого повідомлення. |
|
|
601
|
+
| <span id="queue-decodeQueueMessageBody-procedure">`decodeQueueMessageBody`</span> | `(body: string) => Effect.Effect<StoredEventEnvelope, QueueMessageNotDecodableError>` | — | Читає тіло повідомлення в конверт або відмовляє вже на конверті й каже, чого не змогло прочитати. |
|
|
602
|
+
| <span id="queue-eventDefinitionRegistry-procedure">`eventDefinitionRegistry`</span> | `<S extends Schema.Schema.AnyNoContext>(definitions: readonly VersionedEventDefinition<S>[]) => EventDefinitionRegistry<S>` | — | Будує реєстр відомих визначень подій. |
|
|
603
|
+
| <span id="queue-handlerRejectedMessage-procedure">`handlerRejectedMessage`</span> | `(error: unknown) => RedeliveryReason` | — | Причина для повідомлення, яке відхилив сам обробник. |
|
|
604
|
+
| <span id="queue-messageAcknowledged-procedure">`messageAcknowledged`</span> | `(messageId: string) => QueueMessageOutcome` | — | Доля повідомлення, яке обробник узяв, тож черга може його викинути. |
|
|
605
|
+
| <span id="queue-messageLeftForRedelivery-procedure">`messageLeftForRedelivery`</span> | `(messageId: string, reason: RedeliveryReason) => QueueMessageOutcome` | — | Доля повідомлення, яке повертається в чергу, разом із причиною, чому воно повернулось. |
|
|
606
|
+
| <span id="queue-messageNotDecodable-procedure">`messageNotDecodable`</span> | `(error: QueueMessageNotDecodableError) => RedeliveryReason` | — | Причина для повідомлення, яке так і не декодувалось. |
|
|
607
|
+
| <span id="queue-messageRefusedPermanently-procedure">`messageRefusedPermanently`</span> | `(messageId: string, eventId: string, refusal: unknown) => QueueMessageOutcome` | — | Доля повідомлення, якому не поможе жодна спроба, тож далі його бере власний redrive платформи. |
|
|
608
|
+
| <span id="queue-payloadDecoderFor-procedure">`payloadDecoderFor`</span> | `<S extends Schema.Schema.AnyNoContext>(definition: VersionedEventDefinition<S>) => PayloadDecoder<Schema.Schema.Type<S>>` | — | Будує декодер payload для одного визначення події, підіймаючи збережений payload до версії, яку знає цей код. |
|
|
609
|
+
| <span id="queue-queueConsumerSettings-procedure">`queueConsumerSettings`</span> | `(variablePrefix: string) => Config.Config<QueueConsumerSettings>` | — | Читає кожну змінну, потрібну робітникові, під одним префіксом. |
|
|
610
|
+
| <span id="queue-queueMessageBodyOf-procedure">`queueMessageBodyOf`</span> | `(envelope: { readonly eventId: string; readonly eventType: string; readonly schemaVersion: number; readonly occurredAtIso: string; readonly payload: { readonly [key: string]: unknown } }) => string` | — | Будує той самий контракт конверта, але для надсилання: відправник ставить рівно ті поля, які очікує прочитати робітник. |
|
|
611
|
+
| <span id="queue-queueProducerSettings-procedure">`queueProducerSettings`</span> | `(variablePrefix: string) => Config.Config<QueueProducerSettings>` | — | Читає кожну змінну, потрібну відправникові, під одним префіксом. |
|
|
612
|
+
| <span id="queue-queueReadinessCheck-procedure">`queueReadinessCheck`</span> | `(variablePrefix: string) => Effect.Effect<Option.Option<Effect.Effect<void, QueueMessageSourceUnavailableError>>, ConfigError.ConfigError>` | — | Перевірка готовності для черги, відсутня тоді, коли жодної черги не змонтовано. |
|
|
613
|
+
| <span id="queue-queueUrlVariable-procedure">`queueUrlVariable`</span> | `(variablePrefix: string) => string` | — | Будує назву змінної оточення з префікса, який застосунок дає під час монтування. |
|
|
614
|
+
|
|
615
|
+
### Адаптери
|
|
616
|
+
|
|
617
|
+
| Назва | Сигнатура або тип | За замовчуванням | Що це |
|
|
618
|
+
| --- | --- | --- | --- |
|
|
619
|
+
| <span id="queue-sqsQueueMessageProducerLive-adapter">`sqsQueueMessageProducerLive`</span> | `(variablePrefix: string) => Layer.Layer<QueueMessageProducer, ConfigError.ConfigError>` | — | Відправник повідомлень на справжньому транспорті AWS SDK, який читає змінні, названі цим префіксом. |
|
|
620
|
+
| <span id="queue-sqsQueueMessageSourceLive-adapter">`sqsQueueMessageSourceLive`</span> | `(variablePrefix: string) => Layer.Layer<QueueMessageSource, ConfigError.ConfigError>` | — | Джерело повідомлень на справжньому транспорті AWS SDK, яке читає змінні, названі цим префіксом. |
|
|
621
|
+
|
|
622
|
+
### Відмови
|
|
623
|
+
|
|
624
|
+
| Назва | Сигнатура або тип | За замовчуванням | Що це |
|
|
625
|
+
| --- | --- | --- | --- |
|
|
626
|
+
| <span id="queue-QueueMessageNotDecodableError-failure">`QueueMessageNotDecodableError`</span> | `Data.TaggedError<{ readonly stage: QueueMessageDecodingStage; readonly cause: unknown }>` | — | Повідомлення, текст якого цей сервіс не може перетворити на подію. |
|
|
627
|
+
| <span id="queue-UnknownEventTypeError-failure">`UnknownEventTypeError`</span> | `Data.TaggedError<{ readonly eventType: string }>` | — | Повідомлення, яке називає тип події, що його цей сервіс ніколи не реєстрував. |
|
|
628
|
+
|
|
629
|
+
### Змінні оточення
|
|
630
|
+
|
|
631
|
+
| Назва | Сигнатура або тип | За замовчуванням | Що це |
|
|
632
|
+
| --- | --- | --- | --- |
|
|
633
|
+
| <span id="queue-PREFIX-QUEUE-URL-environment-variable">`<PREFIX>_QUEUE_URL`</span> | `refuses` | — | Черга, з якої отримує робітник і в яку надсилає відправник. |
|
|
634
|
+
| <span id="queue-PREFIX-MAX-MESSAGES-PER-RECEIVE-environment-variable">`<PREFIX>_MAX_MESSAGES_PER_RECEIVE`</span> | `falls back` | `10` | Скільки повідомлень просить один виклик отримання. |
|
|
635
|
+
| <span id="queue-PREFIX-WAIT-TIME-SECONDS-environment-variable">`<PREFIX>_WAIT_TIME_SECONDS`</span> | `falls back` | `20` | Скільки секунд виклик отримання чекає на повідомлення, перш ніж повернутись порожнім. |
|
|
636
|
+
| <span id="queue-PREFIX-VISIBILITY-TIMEOUT-SECONDS-environment-variable">`<PREFIX>_VISIBILITY_TIMEOUT_SECONDS`</span> | `falls back` | `60` | Скільки секунд отримане повідомлення лишається схованим від інших робітників. |
|
|
637
|
+
| <span id="queue-AWS-REGION-environment-variable">`AWS_REGION`</span> | `handed on` | — | Регіон, з яким говорить клієнт SQS. |
|
|
638
|
+
| <span id="queue-AWS-ENDPOINT-URL-environment-variable">`AWS_ENDPOINT_URL`</span> | `handed on` | — | Локальний стенд, з яким говорити замість справжнього SQS, наприклад localstack. |
|
|
639
|
+
|
|
640
|
+
## storage
|
|
641
|
+
|
|
642
|
+
Імпорт із `@satorio/machinery/storage` — [ціла сторінка](../mechanisms/storage.mdx).
|
|
643
|
+
|
|
644
|
+
### Значення
|
|
645
|
+
|
|
646
|
+
| Назва | Сигнатура або тип | За замовчуванням | Що це |
|
|
647
|
+
| --- | --- | --- | --- |
|
|
648
|
+
| <span id="storage-BlobStoreSettings-value">`BlobStoreSettings`</span> | `interface` | — | Що потрібно сховищу, перш ніж воно заговорить зі сховищем об'єктів. |
|
|
649
|
+
| <span id="storage-ClosableS3Transport-value">`ClosableS3Transport`</span> | `interface` | — | Транспорт, який ще й закривається, тож клієнта за ним відпускають, коли скоуп навколо нього кінчається. |
|
|
650
|
+
| <span id="storage-DEFAULT-CONTENT-TYPE-value">`DEFAULT_CONTENT_TYPE`</span> | `const` | — | Чим читається об'єкт, коли сховище не подає власного типу вмісту: просто байтами. |
|
|
651
|
+
| <span id="storage-ENVIRONMENT-value">`ENVIRONMENT`</span> | `readonly EnvironmentEntry[]` | — | Кожна змінна, яку читає цей адаптер, і один стан, у якому стоїть кожна з них. |
|
|
652
|
+
| <span id="storage-S3FetchedObject-value">`S3FetchedObject`</span> | `interface` | — | Один об'єкт таким, яким його віддає сховище: його байти, а також тип вмісту й метадані, коли він їх несе. |
|
|
653
|
+
| <span id="storage-S3KeyRequest-value">`S3KeyRequest`</span> | `interface` | — | Один названий об'єкт: бакет, у якому він сидить, і ключ, під яким він сидить. |
|
|
654
|
+
| <span id="storage-S3ObjectTransport-value">`S3ObjectTransport`</span> | `interface` | — | Вузький зріз сховища об'єктів, який кличе сховище об'єктів: покласти, взяти, перевірити, видалити — і більш нічого. |
|
|
655
|
+
| <span id="storage-S3PutRequest-value">`S3PutRequest`</span> | `interface` | — | Найвужчий зріз SDK, яким користується сховище: покласти, взяти, перевірити наявність, видалити. |
|
|
656
|
+
|
|
657
|
+
### Процедури
|
|
658
|
+
|
|
659
|
+
| Назва | Сигнатура або тип | За замовчуванням | Що це |
|
|
660
|
+
| --- | --- | --- | --- |
|
|
661
|
+
| <span id="storage-blobStoreSettings-procedure">`blobStoreSettings`</span> | `(variablePrefix: string) => Config.Config<BlobStoreSettings>` | — | Читає кожну змінну з `ENVIRONMENT` під одним префіксом. |
|
|
662
|
+
| <span id="storage-blobStoreUnavailableWithoutConfiguration-procedure">`blobStoreUnavailableWithoutConfiguration`</span> | `(refusal: Refusal) => BlobStoreShape` | — | Без поставленого бакета сховище не валить старт сервісу: воно монтує заглушку, яка гучно валить кожну операцію. |
|
|
663
|
+
| <span id="storage-bucketVariable-procedure">`bucketVariable`</span> | `(variablePrefix: string) => string` | — | Будує назву змінної оточення з префікса, який застосунок дає під час монтування. |
|
|
664
|
+
| <span id="storage-makeS3BlobStore-procedure">`makeS3BlobStore`</span> | `(transport: S3ObjectTransport, settings: BlobStoreSettings) => BlobStoreShape` | — | Будує сховище об'єктів над одним транспортом і одним бакетом, обертаючи власний спосіб сховища сигналити про відсутній ключ на відсутнє значення. |
|
|
665
|
+
| <span id="storage-openS3Transport-procedure">`openS3Transport`</span> | `(settings: BlobStoreSettings) => ClosableS3Transport` | — | Відкриває справжнього клієнта сховища об'єктів під подані налаштування і є єдиним місцем, де того клієнта створюють. |
|
|
666
|
+
| <span id="storage-scopedS3Transport-procedure">`scopedS3Transport`</span> | `(openTransport: () => ClosableS3Transport) => Effect.Effect<S3ObjectTransport, never, Scope.Scope>` | — | Відкриває транспорт, який закривається разом зі скоупом навколо нього, тож жоден клієнт не переживає роботи, яка його відкрила. |
|
|
667
|
+
| <span id="storage-signalsAbsentKey-procedure">`signalsAbsentKey`</span> | `(error: unknown) => boolean` | — | S3 сигналить «немає такого ключа» помилкою, а не порожньою відповіддю: `GetObject` кидає `NoSuchKey`, `HeadObject` кидає `NotFound`. |
|
|
668
|
+
|
|
669
|
+
### Адаптери
|
|
670
|
+
|
|
671
|
+
| Назва | Сигнатура або тип | За замовчуванням | Що це |
|
|
672
|
+
| --- | --- | --- | --- |
|
|
673
|
+
| <span id="storage-blobStoreFromEnvironmentLive-adapter">`blobStoreFromEnvironmentLive`</span> | `(variablePrefix: string, openTransport: (settings: BlobStoreSettings) => ClosableS3Transport) => Layer.Layer<BlobStore, ConfigError.ConfigError>` | — | Сховище об'єктів, зібране зі змінних оточення з поданим префіксом. |
|
|
674
|
+
| <span id="storage-s3BlobStoreLive-adapter">`s3BlobStoreLive`</span> | `(variablePrefix: string) => Layer.Layer<BlobStore, ConfigError.ConfigError>` | — | Сховище об'єктів на справжньому транспорті AWS SDK, яке читає змінні, названі цим префіксом. |
|
|
675
|
+
|
|
676
|
+
### Змінні оточення
|
|
677
|
+
|
|
678
|
+
| Назва | Сигнатура або тип | За замовчуванням | Що це |
|
|
679
|
+
| --- | --- | --- | --- |
|
|
680
|
+
| <span id="storage-PREFIX-BUCKET-environment-variable">`<PREFIX>_BUCKET`</span> | `refuses` | — | Бакет, у який це сховище кладе об'єкти і з якого читає їх назад. |
|
|
681
|
+
| <span id="storage-AWS-REGION-environment-variable">`AWS_REGION`</span> | `handed on` | — | Регіон, з яким говорить клієнт S3. |
|
|
682
|
+
| <span id="storage-AWS-ENDPOINT-URL-environment-variable">`AWS_ENDPOINT_URL`</span> | `handed on` | — | Локальний стенд, з яким говорити замість справжнього S3, наприклад localstack. |
|
|
683
|
+
|
|
684
|
+
## testing
|
|
685
|
+
|
|
686
|
+
Імпорт із `@satorio/machinery/testing` — [ціла сторінка](../mechanisms/testing.mdx).
|
|
687
|
+
|
|
688
|
+
### Значення
|
|
689
|
+
|
|
690
|
+
| Назва | Сигнатура або тип | За замовчуванням | Що це |
|
|
691
|
+
| --- | --- | --- | --- |
|
|
692
|
+
| <span id="testing-AnswersByPath-value">`AnswersByPath`</span> | `Readonly<Record<string, unknown>>` | — | Чим відповідає клієнт у пам'яті: одне вже декодоване тіло на кожен шлях. |
|
|
693
|
+
| <span id="testing-BlobsByKey-value">`BlobsByKey`</span> | `ReadonlyMap<string, StoredBlob>` | — | Що тримає сховище об'єктів у пам'яті: кожен об'єкт, який йому дали, за ключем. |
|
|
694
|
+
| <span id="testing-DispatchedMessageIds-value">`DispatchedMessageIds`</span> | `ReadonlySet<string>` | — | Що тримає буфер трансмітера в пам'яті з боку читання: ідентифікатори, які трансмітер уже позначив надісланими. |
|
|
695
|
+
| <span id="testing-DocumentCountsByClientAndMonth-value">`DocumentCountsByClientAndMonth`</span> | `ReadonlyMap<string, number>` | — | Що тримає лічильник у пам'яті: скільки документів дістав кожен клієнт у кожен звітний місяць, за ключем із них двох. |
|
|
696
|
+
| <span id="testing-InMemoryBlobStoreLive-value">`InMemoryBlobStoreLive`</span> | `const` | — | Змонтоване сховище об'єктів у пам'яті. |
|
|
697
|
+
| <span id="testing-InMemoryDocumentNumberCounterLive-value">`InMemoryDocumentNumberCounterLive`</span> | `const` | — | Змонтований лічильник у пам'яті. |
|
|
698
|
+
| <span id="testing-InMemoryEventPublisherLive-value">`InMemoryEventPublisherLive`</span> | `const` | — | Змонтований публікатор у пам'яті. |
|
|
699
|
+
| <span id="testing-InMemoryIntegrationEventOutboxLive-value">`InMemoryIntegrationEventOutboxLive`</span> | `const` | — | Змонтований буфер трансмітера в пам'яті. |
|
|
700
|
+
| <span id="testing-InMemoryProcessedEventRegistryLive-value">`InMemoryProcessedEventRegistryLive`</span> | `const` | — | Змонтований реєстр у пам'яті. |
|
|
701
|
+
| <span id="testing-InMemoryQueueMessageProducerLive-value">`InMemoryQueueMessageProducerLive`</span> | `const` | — | Змонтований відправник у пам'яті. |
|
|
702
|
+
| <span id="testing-InMemoryQueueMessageSourceLive-value">`InMemoryQueueMessageSourceLive`</span> | `const` | — | Змонтоване джерело повідомлень у пам'яті. |
|
|
703
|
+
| <span id="testing-makeInMemoryBlobStore-value">`makeInMemoryBlobStore`</span> | `const` | — | Сховище об'єктів у пам'яті над власним `Ref`, порожнє на початку. |
|
|
704
|
+
| <span id="testing-makeInMemoryDocumentNumberCounter-value">`makeInMemoryDocumentNumberCounter`</span> | `const` | — | Лічильник у пам'яті над власним `Ref`, де кожен місяць стоїть на нулі. |
|
|
705
|
+
| <span id="testing-makeInMemoryEventPublisher-value">`makeInMemoryEventPublisher`</span> | `const` | — | Публікатор у пам'яті над власним `Ref`, порожній на початку. |
|
|
706
|
+
| <span id="testing-makeInMemoryIntegrationEventOutbox-value">`makeInMemoryIntegrationEventOutbox`</span> | `const` | — | Буфер трансмітера в пам'яті над власними `Ref`, порожній на початку. |
|
|
707
|
+
| <span id="testing-makeInMemoryProcessedEventRegistry-value">`makeInMemoryProcessedEventRegistry`</span> | `const` | — | Реєстр у пам'яті над власним `Ref`, порожній на початку. |
|
|
708
|
+
| <span id="testing-makeInMemoryQueueMessageProducer-value">`makeInMemoryQueueMessageProducer`</span> | `const` | — | Відправник у пам'яті над власним `Ref`, чиїх повідомлень ніхто не отримує. |
|
|
709
|
+
| <span id="testing-makeInMemoryQueueMessageSource-value">`makeInMemoryQueueMessageSource`</span> | `const` | — | Джерело повідомлень у пам'яті над власним `Ref`, порожнє на початку. |
|
|
710
|
+
| <span id="testing-nowAsDateTime-value">`nowAsDateTime`</span> | `Effect.Effect<DateTime.Utc>` | — | Мить, яку годинник читає зараз, як мить на світовому годиннику. |
|
|
711
|
+
| <span id="testing-nowAsIsoString-value">`nowAsIsoString`</span> | `Effect.Effect<string>` | — | Мить, яку годинник читає зараз, написана так, як вона мандрує дротом. |
|
|
712
|
+
| <span id="testing-PendingQueueMessages-value">`PendingQueueMessages`</span> | `readonly RawQueueMessage[]` | — | Що тримає черга в пам'яті: повідомлення, які чекають на отримання, у тому порядку, в якому їх туди поклали. |
|
|
713
|
+
| <span id="testing-ProcessedEventsById-value">`ProcessedEventsById`</span> | `ReadonlyMap<string, DateTime.Utc>` | — | Що тримає реєстр у пам'яті: мить, коли кожен ідентифікатор події зарезервували вперше. |
|
|
714
|
+
| <span id="testing-PublishedMessages-value">`PublishedMessages`</span> | `readonly OutboxMessage[]` | — | Що тримає публікатор у пам'яті: кожне повідомлення, яке йому подали, у порядку, в якому приходили пачки. |
|
|
715
|
+
| <span id="testing-QueuedOutboxMessages-value">`QueuedOutboxMessages`</span> | `readonly OutboxMessage[]` | — | Що тримає буфер трансмітера в пам'яті з боку запису: кожне поставлене в чергу повідомлення, у порядку, в якому воно прийшло. |
|
|
716
|
+
| <span id="testing-QuietReporter-value">`QuietReporter`</span> | `class` | — | Репортер виконавця тестів (test runner), який друкує один підсумковий рядок на цілий прогін: скільки файлів, скільки тестів, скільки це тривало. |
|
|
717
|
+
| <span id="testing-Scenario-value">`Scenario`</span> | `interface` | — | Історія, розказана даними: кроки, якими проходить світ, і числа, на яких той світ спиняється. |
|
|
718
|
+
| <span id="testing-ScenarioPlayback-value">`ScenarioPlayback`</span> | `interface` | — | Що лишає по собі один прогін сценарію (scenario): мітка кожного кроку і знімок, на якому прогін скінчився. |
|
|
719
|
+
| <span id="testing-ScenarioService-value">`ScenarioService`</span> | `interface` | — | Що сервіс дає програвачеві сценаріїв: як виконати крок і як зняти знімок того, що з нього вийшло. |
|
|
720
|
+
| <span id="testing-ScenarioStep-value">`ScenarioStep`</span> | `interface` | — | Один крок у сценарії. |
|
|
721
|
+
| <span id="testing-SUITES-THAT-START-A-STAND-value">`SUITES_THAT_START_A_STAND`</span> | `readonly string[]` | — | Сьюти, які піднімають живий стенд (live stand), за іменем файлу, яке дає їм `A11`. |
|
|
722
|
+
| <span id="testing-TransactionalState-value">`TransactionalState`</span> | `interface` | — | Один учасник транзакції в пам'яті: він уміє захопити власний стан зараз і подати назад ефект, який його повертає. |
|
|
723
|
+
|
|
724
|
+
### Процедури
|
|
725
|
+
|
|
726
|
+
| Назва | Сигнатура або тип | За замовчуванням | Що це |
|
|
727
|
+
| --- | --- | --- | --- |
|
|
728
|
+
| <span id="testing-advanceBy-procedure">`advanceBy`</span> | `(duration: Duration.DurationInput) => Effect.Effect<void>` | — | Рухає керований тестовий годинник на подану тривалість, тож тест доходить до пізнішої миті, не чекаючи на неї. |
|
|
729
|
+
| <span id="testing-atTheMoment-procedure">`atTheMoment`</span> | `(isoTimestamp: string)` | — | Виконує подану роботу «в» подану мить: кожне читання годинника всередині бачить `isoTimestamp`. |
|
|
730
|
+
| <span id="testing-clockPinnedAt-procedure">`clockPinnedAt`</span> | `(at: DateTime.Utc) => Clock.Clock` | — | Будує `Clock`, пришпилений до однієї миті: кожне читання часу всередині повертає ту мить, а `sleep` і далі чекає за справжнім годинником. |
|
|
731
|
+
| <span id="testing-contextOf-procedure">`contextOf`</span> | `<Command, Snapshot, Context>(scenario: Scenario<Command, Snapshot, Context>) => Context` | — | Читає наскрізні дані сценарію, який їх оголошує. |
|
|
732
|
+
| <span id="testing-distinctMomentsIn-procedure">`distinctMomentsIn`</span> | `(table: string, column: string) => Effect.Effect<readonly string[], never, SqlClient.SqlClient>` | — | Читає різні миті з однієї колонки часових позначок як відсортовані рядки ISO в тому самому вигляді, який `momentsOfSteps` повертає для сценарію. |
|
|
733
|
+
| <span id="testing-emptiedTables-procedure">`emptiedTables`</span> | `(tables: readonly string[]) => Effect.Effect<void, never, SqlClient.SqlClient>` | — | Спорожнює подані таблиці на живому стенді, щоб сценарій починався з нуля так само, як щойно скинута база починається для сіяча (seeder). |
|
|
734
|
+
| <span id="testing-ensureStepsAreInOrder-procedure">`ensureStepsAreInOrder`</span> | `<C, S, X>(scenario: Scenario<C, S, X>) => Effect.Effect<void>` | — | Гучно валить, коли кроки сценарію стоять не в строго зростальному порядку часу: це зламаний сценарій, а не результат прогону. |
|
|
735
|
+
| <span id="testing-firstPassLabelsOf-procedure">`firstPassLabelsOf`</span> | `<C, S, X>(scenario: Scenario<C, S, X>) => readonly string[]` | — | Мітки, яких сценарій чекає першого разу, по порядку. |
|
|
736
|
+
| <span id="testing-labelOf-procedure">`labelOf`</span> | `<R>(program: Effect.Effect<string, unknown, R>) => Effect.Effect<string, never, R>` | — | Виконує один крок і ставить йому мітку: що він повернув або як зветься відмова, яку він зустрів. |
|
|
737
|
+
| <span id="testing-labelOfFailure-procedure">`labelOfFailure`</span> | `(cause: Cause.Cause<unknown>) => string` | — | Ставить мітку відмові, тож сценарій читається однаково на кожному прогоні. |
|
|
738
|
+
| <span id="testing-makeInMemoryBlobStoreWith-procedure">`makeInMemoryBlobStoreWith`</span> | `(blobs: Ref.Ref<BlobsByKey>) => BlobStoreShape` | — | Сховище об'єктів у пам'яті над `Ref`, який ви тримаєте, тож тест засіває його перед прогоном і читає після. |
|
|
739
|
+
| <span id="testing-makeInMemoryDocumentNumberCounterWith-procedure">`makeInMemoryDocumentNumberCounterWith`</span> | `(counts: Ref.Ref<DocumentCountsByClientAndMonth>) => DocumentNumberCounterShape` | — | Лічильник у пам'яті над посиланням, яке ви тримаєте, тож тест засіває його і читає назад. |
|
|
740
|
+
| <span id="testing-makeInMemoryEventPublisherWith-procedure">`makeInMemoryEventPublisherWith`</span> | `(published: Ref.Ref<PublishedMessages>) => EventPublisherShape` | — | Публікатор у пам'яті над `Ref`, який ви тримаєте, тож тест читає опубліковане після прогону. |
|
|
741
|
+
| <span id="testing-makeInMemoryExternalHttpClient-procedure">`makeInMemoryExternalHttpClient`</span> | `(answers: AnswersByPath) => Effect.Effect<ExternalHttpClientShape>` | — | Клієнт у пам'яті над власним `Ref`, засіяний відповідями, які ви йому подали. |
|
|
742
|
+
| <span id="testing-makeInMemoryExternalHttpClientWith-procedure">`makeInMemoryExternalHttpClientWith`</span> | `(answers: Ref.Ref<AnswersByPath>) => ExternalHttpClientShape` | — | Клієнт у пам'яті над `Ref`, який ви тримаєте, тож тест переписує відповідь сервісу між двома викликами одного сценарію. |
|
|
743
|
+
| <span id="testing-makeInMemoryIntegrationEventOutboxWith-procedure">`makeInMemoryIntegrationEventOutboxWith`</span> | `(queued: Ref.Ref<QueuedOutboxMessages>, dispatched: Ref.Ref<DispatchedMessageIds>) => IntegrationEventOutboxShape` | — | Буфер трансмітера в пам'яті над двома `Ref`, які ви тримаєте, тож тест засіває те, що чекає, і читає назад те, що трансмітер відправив. |
|
|
744
|
+
| <span id="testing-makeInMemoryProcessedEventRegistryWith-procedure">`makeInMemoryProcessedEventRegistryWith`</span> | `(processed: Ref.Ref<ProcessedEventsById>) => ProcessedEventRegistryShape` | — | Реєстр у пам'яті над `Ref`, який ви тримаєте, тож тест засіває вже зарезервоване і читає назад додане прогоном. |
|
|
745
|
+
| <span id="testing-makeInMemoryQueueMessageProducerWith-procedure">`makeInMemoryQueueMessageProducerWith`</span> | `(pending: Ref.Ref<PendingQueueMessages>) => QueueMessageProducerShape` | — | Відправник у пам'яті над тим самим посиланням, яке читає джерело в пам'яті. |
|
|
746
|
+
| <span id="testing-makeInMemoryQueueMessageSourceWith-procedure">`makeInMemoryQueueMessageSourceWith`</span> | `(pending: Ref.Ref<PendingQueueMessages>) => QueueMessageSourceShape` | — | Джерело повідомлень у пам'яті над `Ref`, який ви тримаєте, тож тест засіває чергу перед прогоном і читає, що лишилось після. |
|
|
747
|
+
| <span id="testing-makeInMemoryTransactionBoundary-procedure">`makeInMemoryTransactionBoundary`</span> | `(participants: readonly TransactionalState[]) => TransactionBoundaryShape` | — | Будує межу транзакції в пам'яті: вона захоплює стан кожного учасника на вході і повертає його, коли робота падає. |
|
|
748
|
+
| <span id="testing-makeScriptedMessageSource-procedure">`makeScriptedMessageSource`</span> | `(script: readonly (readonly RawQueueMessage[])[]) => Effect.Effect<ScriptedQueue>` | — | Будує джерело за сценарієм і читача того, що воно підтвердило. |
|
|
749
|
+
| <span id="testing-messageOf-procedure">`messageOf`</span> | `(messageId: string, body: string) => RawQueueMessage` | — | Одне сире повідомлення, збудоване так, як його віддає черга: ідентифікатор, квитанція, яку цитує підтвердження, і тіло. |
|
|
750
|
+
| <span id="testing-momentsOfSteps-procedure">`momentsOfSteps`</span> | `<C, S, X>(scenario: Scenario<C, S, X>, chosen: (step: ScenarioStep<C>) => boolean) => readonly string[]` | — | Повертає миті обраних кроків рядками ISO, у тому вигляді, в якому їх повертає похід у базу і назад. |
|
|
751
|
+
| <span id="testing-mutationSettings-procedure">`mutationSettings`</span> | `(options: MutationSettingsOptions) => MutationSettings` | — | Усе, що потрібно мутаційному прогону, з обмеженим очікуванням і без живих стендів. |
|
|
752
|
+
| <span id="testing-playScenario-procedure">`playScenario`</span> | `<C, S, R, X>(scenario: Scenario<C, S, X>, service: ScenarioService<C, S, R, X>) => Effect.Effect<ScenarioPlayback<S>, never, R>` | — | Програє сценарій: кожен крок біжить у власну мить, а знімок беруть у мить останнього кроку. |
|
|
753
|
+
| <span id="testing-quietReporters-procedure">`quietReporters`</span> | `(options: QuietReporterOptions & { readonly verbose?: boolean } = {}) => ('default' \| QuietReporter)[]` | — | Значення `reporters`, яке бере конфігурація виконавця тестів. |
|
|
754
|
+
| <span id="testing-replayLabelsOf-procedure">`replayLabelsOf`</span> | `<C, S, X>(scenario: Scenario<C, S, X>) => readonly string[]` | — | Мітки, яких сценарій чекає, коли ті самі кроки біжать удруге, по порядку. |
|
|
755
|
+
| <span id="testing-setNowTo-procedure">`setNowTo`</span> | `(isoTimestamp: string) => Effect.Effect<void>` | — | Ставить керований тестовий годинник на подану мить ISO. |
|
|
756
|
+
| <span id="testing-stateOfRef-procedure">`stateOfRef`</span> | `<A>(ref: Ref.Ref<A>) => TransactionalState` | — | Робить `Ref` учасником, тож межа в пам'яті вміє повернути його туди, де він був, коли робота падає. |
|
|
757
|
+
| <span id="testing-typedFailureOf-procedure">`typedFailureOf`</span> | `<A, E>(effect: Effect.Effect<A, E>) => Effect.Effect<E>` | — | Дістає типізовану відмову (Data.TaggedError) процедури через `Effect.exit` і `Cause`, а не звіркою тексту повідомлення про помилку. |
|
|
758
|
+
| <span id="testing-verboseOutputWanted-procedure">`verboseOutputWanted`</span> | `(environment: Readonly<Record<string, string \| undefined>> = process.env) => boolean` | — | Чи має виконавець друкувати все. |
|
|
759
|
+
|
|
760
|
+
### Адаптери
|
|
761
|
+
|
|
762
|
+
| Назва | Сигнатура або тип | За замовчуванням | Що це |
|
|
763
|
+
| --- | --- | --- | --- |
|
|
764
|
+
| <span id="testing-BlobStoreUnavailableLive-adapter">`BlobStoreUnavailableLive`</span> | `Layer.Layer<BlobStore>` | — | Сховище об'єктів, яке ні на що не відповідає: кожна операція падає з `BlobStoreUnavailableError`. |
|
|
765
|
+
| <span id="testing-DocumentNumberCounterUnavailableLive-adapter">`DocumentNumberCounterUnavailableLive`</span> | `Layer.Layer<DocumentNumberCounter>` | — | Лічильник, який нічого не рахує: кожен запит повертається відмовою. |
|
|
766
|
+
| <span id="testing-EventPublisherUnavailableLive-adapter">`EventPublisherUnavailableLive`</span> | `Layer.Layer<EventPublisher>` | — | Публікатор, який нічого не бере: кожна публікація падає з `EventPublisherUnavailableError`. |
|
|
767
|
+
| <span id="testing-ExternalHttpClientUnavailableLive-adapter">`ExternalHttpClientUnavailableLive`</span> | `Layer.Layer<ExternalHttpClient>` | — | Клієнт, який нікуди не дістає: кожен виклик падає з `ExternalServiceUnavailableError`. |
|
|
768
|
+
| <span id="testing-inMemoryExternalHttpClientLive-adapter">`inMemoryExternalHttpClientLive`</span> | `(answers: AnswersByPath) => Layer.Layer<ExternalHttpClient>` | — | Змонтований клієнт у пам'яті, який відповідає на шляхи, якими ви його засіяли. |
|
|
769
|
+
| <span id="testing-InMemoryReadinessProbeLive-adapter">`InMemoryReadinessProbeLive`</span> | `Layer.Layer<ReadinessProbe>` | — | Змонтована проба готовності в пам'яті. |
|
|
770
|
+
| <span id="testing-inMemoryTransactionBoundaryLive-adapter">`inMemoryTransactionBoundaryLive`</span> | `(participants: readonly TransactionalState[]) => Layer.Layer<TransactionBoundary>` | — | Змонтована межа транзакції в пам'яті, над названими вами учасниками. |
|
|
771
|
+
| <span id="testing-IntegrationEventOutboxUnavailableLive-adapter">`IntegrationEventOutboxUnavailableLive`</span> | `Layer.Layer<IntegrationEventOutbox>` | — | Буфер трансмітера, який нічого не приймає: `enqueue` відмовляє, тож запис процедури і її повідомлення падають разом. |
|
|
772
|
+
| <span id="testing-IntegrationEventOutboxUnreadableLive-adapter">`IntegrationEventOutboxUnreadableLive`</span> | `Layer.Layer<IntegrationEventOutbox>` | — | Буфер трансмітера, який бере повідомлення і потім відмовляється їх віддати: `pending` падає, а `enqueue` вдається. |
|
|
773
|
+
| <span id="testing-ProcessedEventRegistryUnavailableLive-adapter">`ProcessedEventRegistryUnavailableLive`</span> | `Layer.Layer<ProcessedEventRegistry>` | — | Реєстр, який нічого не резервує: кожна резервація повертається відмовою. |
|
|
774
|
+
| <span id="testing-QueueMessageProducerUnavailableLive-adapter">`QueueMessageProducerUnavailableLive`</span> | `Layer.Layer<QueueMessageProducer>` | — | Відправник, який ні на що не відповідає: кожне надсилання падає з `QueueMessageProducerUnavailableError`. |
|
|
775
|
+
| <span id="testing-QueueMessageSourceUnavailableLive-adapter">`QueueMessageSourceUnavailableLive`</span> | `Layer.Layer<QueueMessageSource>` | — | Джерело повідомлень, яке ні на що не відповідає: кожна операція падає з `QueueMessageSourceUnavailableError`. |
|
|
776
|
+
| <span id="testing-ReadinessProbeUnavailableLive-adapter">`ReadinessProbeUnavailableLive`</span> | `Layer.Layer<ReadinessProbe>` | — | Проба, чия база ніколи не відповідає. |
|
|
777
|
+
| <span id="testing-scriptedQueueMessageSourceLive-adapter">`scriptedQueueMessageSourceLive`</span> | `(script: readonly (readonly RawQueueMessage[])[]) => Layer.Layer<QueueMessageSource>` | — | Змонтоване джерело за сценарієм: кожен `receive` відповідає наступною пачкою сценарію. |
|
|
778
|
+
| <span id="testing-TransactionBoundaryUnavailableLive-adapter">`TransactionBoundaryUnavailableLive`</span> | `Layer.Layer<TransactionBoundary>` | — | Межа транзакції, яка нічого не відкриває: робота ніколи не біжить, і викликач читає відмову. |
|
|
779
|
+
|
|
780
|
+
## vitest
|
|
781
|
+
|
|
782
|
+
Імпорт із `@satorio/machinery/vitest` — [ціла сторінка](../mechanisms/vitest.mdx).
|
|
783
|
+
|
|
784
|
+
### Значення
|
|
785
|
+
|
|
786
|
+
| Назва | Сигнатура або тип | За замовчуванням | Що це |
|
|
787
|
+
| --- | --- | --- | --- |
|
|
788
|
+
| <span id="vitest-AwsStand-value">`AwsStand`</span> | `interface` | — | Адреса і регіон живого стенда AWS, з яким говорить сьют. |
|
|
789
|
+
| <span id="vitest-FILES-THAT-FORK-A-FIBER-AND-ADJUST-TEST-CLOCK-value">`FILES_THAT_FORK_A_FIBER_AND_ADJUST_TEST_CLOCK`</span> | `readonly string[]` | — | Тестові файли, яким потрібен власний свіжий стан модулів, бо вони форкають файбер і рухають годинник. |
|
|
790
|
+
| <span id="vitest-LOCALSTACK-REGION-value">`LOCALSTACK_REGION`</span> | `const` | — | Єдиний регіон, про який домовляються кожен клієнт і кожен ресурс у сьюті. |
|
|
791
|
+
| <span id="vitest-PortContractTester-value">`PortContractTester`</span> | `type` | — | Той підмножинний набір тестових методів vitest, якого контракт порту потребує від свого тестувальника. |
|
|
792
|
+
| <span id="vitest-POSTGRES-IMAGE-value">`POSTGRES_IMAGE`</span> | `const` | — | Образ Postgres, який кожен тест на живому стенді піднімає через testcontainers. |
|
|
793
|
+
| <span id="vitest-ReaderPortUnderTest-value">`ReaderPortUnderTest`</span> | `interface` | — | Що власний тест порту-читача подає контрактові. |
|
|
794
|
+
| <span id="vitest-RecordedStubRequest-value">`RecordedStubRequest`</span> | `interface` | — | Один запит, який отримав стаб-сервер (stub server), у тому вигляді, в якому тест читає його назад: метод і шлях. |
|
|
795
|
+
| <span id="vitest-StubResponse-value">`StubResponse`</span> | `interface` | — | Одна відповідь стаб-сервера: статус, тіло і тип вмісту, коли вони є, і затримка перед відповіддю. |
|
|
796
|
+
| <span id="vitest-StubRoute-value">`StubRoute`</span> | `interface` | — | Один маршрут, який обслуговує стаб-сервер: метод, шлях і відповіді, які він дає по черзі. |
|
|
797
|
+
|
|
798
|
+
### Процедури
|
|
799
|
+
|
|
800
|
+
| Назва | Сигнатура або тип | За замовчуванням | Що це |
|
|
801
|
+
| --- | --- | --- | --- |
|
|
802
|
+
| <span id="vitest-blobStoreContract-procedure">`blobStoreContract`</span> | `(it: PortContractTester, implementationName: string, layer: Layer.Layer<BlobStore>, unavailable?: Layer.Layer<BlobStore>) => void` | — | Один контракт, кожне сховище об'єктів. |
|
|
803
|
+
| <span id="vitest-documentNumberCounterContract-procedure">`documentNumberCounterContract`</span> | `(it: PortContractTester, implementationName: string, layer: Layer.Layer<DocumentNumberCounter>, unavailable?: Layer.Layer<DocumentNumberCounter>) => void` | — | Один контракт, кожна реалізація лічильника. |
|
|
804
|
+
| <span id="vitest-eventPublisherContract-procedure">`eventPublisherContract`</span> | `(it: PortContractTester, implementationName: string, publisher: PublisherUnderTest, unavailable?: Layer.Layer<EventPublisher>) => void` | — | Один контракт, кожен публікатор подій. |
|
|
805
|
+
| <span id="vitest-externalHttpClientContract-procedure">`externalHttpClientContract`</span> | `(it: PortContractTester, implementationName: string, service: ExternalServiceUnderTest, unavailable?: Layer.Layer<ExternalHttpClient>) => void` | — | Один контракт, кожен зовнішній HTTP-клієнт. |
|
|
806
|
+
| <span id="vitest-integrationEventOutboxContract-procedure">`integrationEventOutboxContract`</span> | `(it: PortContractTester, implementationName: string, layer: Layer.Layer<IntegrationEventOutbox>, unavailable?: Layer.Layer<IntegrationEventOutbox>) => void` | — | Один контракт, кожен буфер трансмітера. |
|
|
807
|
+
| <span id="vitest-onLocalstack-procedure">`onLocalstack`</span> | `(options: LocalstackSuiteOptions, subject: string, checks: SuiteChecks) => void` | — | Крутить сьют проти справжнього стенда AWS (localstack) для `subject`. |
|
|
808
|
+
| <span id="vitest-onPostgres-procedure">`onPostgres`</span> | `(options: PostgresSuiteOptions, subject: string, checks: SuiteChecks) => void` | — | Крутить сьют проти справжнього Postgres — контейнера або зовні налаштованої бази, коли поставлено `PGHOST`. |
|
|
809
|
+
| <span id="vitest-onPostgresContainer-procedure">`onPostgresContainer`</span> | `(options: PostgresSuiteOptions, subject: string, checks: SuiteChecks) => void` | — | Крутить сьют проти Postgres лише в контейнері, ігноруючи будь-які змінні оточення `PG*`. |
|
|
810
|
+
| <span id="vitest-outboxEvent-procedure">`outboxEvent`</span> | `(messageId: string, payload: { readonly [key: string]: unknown }) => OutboxMessage` | — | Одне повідомлення, збудоване так, як його віддає буфер трансмітера. |
|
|
811
|
+
| <span id="vitest-outboxMessage-procedure">`outboxMessage`</span> | `(messageId: string) => OutboxMessage` | — | Одне повідомлення буфера, яке контракт ставить у чергу і читає назад, тож кожній реалізації ставлять те саме питання. |
|
|
812
|
+
| <span id="vitest-processedEventRegistryContract-procedure">`processedEventRegistryContract`</span> | `(it: PortContractTester, implementationName: string, layer: Layer.Layer<ProcessedEventRegistry>, unavailable?: Layer.Layer<ProcessedEventRegistry>) => void` | — | Один контракт, кожен реєстр відпрацьованих подій. |
|
|
813
|
+
| <span id="vitest-queueMessageProducerContract-procedure">`queueMessageProducerContract`</span> | `(it: PortContractTester, implementationName: string, producer: ProducerUnderTest, unavailable?: Layer.Layer<QueueMessageProducer>) => void` | — | Один контракт, кожен відправник повідомлень. |
|
|
814
|
+
| <span id="vitest-queueMessageSourceContract-procedure">`queueMessageSourceContract`</span> | `(it: PortContractTester, implementationName: string, queue: QueueUnderTest, unavailable?: Layer.Layer<QueueMessageSource>) => void` | — | Один контракт, кожне джерело повідомлень. |
|
|
815
|
+
| <span id="vitest-readerPortContract-procedure">`readerPortContract`</span> | `<Subject, Value>(it: PortContractTester, port: ReaderPortUnderTest<Subject, Value>) => void` | — | Один контракт для порту, який лише читає. |
|
|
816
|
+
| <span id="vitest-readinessProbeContract-procedure">`readinessProbeContract`</span> | `(it: PortContractTester, implementationName: string, layer: Layer.Layer<ReadinessProbe>, unavailable?: Layer.Layer<ReadinessProbe>) => void` | — | Один контракт, кожна проба готовності. |
|
|
817
|
+
| <span id="vitest-repoCommittableFiles-procedure">`repoCommittableFiles`</span> | `(root: string = repoRoot()) => readonly string[]` | — | Кожен файл, який git закомітив би таким, яким той стоїть під `root`. |
|
|
818
|
+
| <span id="vitest-repoFilesUnder-procedure">`repoFilesUnder`</span> | `(root: string, directories: readonly string[], extension: string) => readonly string[]` | — | Перелічує файли з розширенням `extension` рекурсивно під `directories`, відносно `root`. |
|
|
819
|
+
| <span id="vitest-repoRoot-procedure">`repoRoot`</span> | `(cwd: string = process.cwd()) => string` | — | Корінь git-репозиторію, який містить `cwd` (за замовчуванням `process.cwd()`). |
|
|
820
|
+
| <span id="vitest-scopedStubServer-procedure">`scopedStubServer`</span> | `(routes: readonly StubRoute[]) => Effect.Effect<StubServerShape, never, Scope.Scope>` | — | Крутить стаб-сервер стільки, скільки живе скоуп. |
|
|
821
|
+
| <span id="vitest-settingsContract-procedure">`settingsContract`</span> | `<A>(mechanism: string, environment: readonly EnvironmentEntry[], settings: Config.Config<A>, variablePrefix = '') => void` | — | Один контракт, кожен адаптер, який називає змінні. |
|
|
822
|
+
| <span id="vitest-storedBlob-procedure">`storedBlob`</span> | `(text: string) => StoredBlob` | — | Один об'єкт, який контракт зберігає і читає назад, тож кожній реалізації ставлять те саме питання. |
|
|
823
|
+
| <span id="vitest-transactionBoundaryContract-procedure">`transactionBoundaryContract`</span> | `(it: PortContractTester, implementationName: string, layer: Layer.Layer<TransactionBoundary>, unavailable?: Layer.Layer<TransactionBoundary>) => void` | — | Один контракт, кожна межа транзакції. |
|
|
824
|
+
| <span id="vitest-truncateTables-procedure">`truncateTables`</span> | `(tableNames: readonly string[]) => Effect.Effect<void, SqlError, SqlClient.SqlClient>` | — | Спорожнює названі таблиці одним запитом — для тесту, якому потрібен знайомий початковий стан. |
|
|
825
|
+
|
|
826
|
+
### Адаптери
|
|
827
|
+
|
|
828
|
+
| Назва | Сигнатура або тип | За замовчуванням | Що це |
|
|
829
|
+
| --- | --- | --- | --- |
|
|
830
|
+
| <span id="vitest-postgresInContainerLive-adapter">`postgresInContainerLive`</span> | `(options: PostgresSuiteOptions) => Layer.Layer<never>` | — | Будує шар Postgres для сьюта лише зі свіжого контейнера, ігноруючи будь-які змінні оточення `PG*`. |
|
|
831
|
+
| <span id="vitest-PostgresPortsUnderTestLive-adapter">`PostgresPortsUnderTestLive`</span> | `Layer.Layer<PostgresPorts \| PgClient.PgClient \| SqlClient.SqlClient>` | — | Власні порти механізму postgres на базі цього сьюта. |
|
|
832
|
+
| <span id="vitest-postgresUnderTestLive-adapter">`postgresUnderTestLive`</span> | `(options: PostgresSuiteOptions) => Layer.Layer<never>` | — | Шар Postgres, на якому біжить сьют: налаштована база, коли оточення її називає, свіжий контейнер, коли ні, і мігровані обидва. |
|
|
833
|
+
|
|
834
|
+
### Перевірки збірки
|
|
835
|
+
|
|
836
|
+
| Назва | Сигнатура або тип | За замовчуванням | Що це |
|
|
837
|
+
| --- | --- | --- | --- |
|
|
838
|
+
| <span id="vitest-oneEffectInstanceGuard-guard">`oneEffectInstanceGuard`</span> | `(options: SingleEffectInstanceOptions = {}) => void` | — | Реєструє сьют vitest, який валить прогін, коли дерево тримає більш ніж одну копію Effect. |
|
|
839
|
+
| <span id="vitest-oneFastCheckInstanceGuard-guard">`oneFastCheckInstanceGuard`</span> | `() => void` | — | Реєструє сьют vitest, який валить прогін, коли бібліотека властивостей резолвиться у два примірники модуля. |
|
|
840
|
+
| <span id="vitest-testclockForkIsolationGuard-guard">`testclockForkIsolationGuard`</span> | `(knownIsolatedFiles: readonly string[], options: TestclockForkIsolationOptions) => void` | — | Реєструє сьют vitest, який валить прогін, коли тест рухає годинник у форкнутому файбері поза власним списком. |
|
|
841
|
+
|
|
842
|
+
## Підсумок
|
|
843
|
+
|
|
844
|
+
Тепер у вас одне місце, де названо все, що дає цей пакет, і одне речення поруч із кожною назвою. Сторінку складено з самого коду, тому коли рухається код, разом із ним рухається й вона. Повертайтесь сюди щоразу, коли знаєте, чого хочете, і не знаєте, як воно зветься.
|