@shivaedev/work-fleet 0.1.1 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +16 -0
- package/README.md +2 -2
- package/dist/admit.d.ts +54 -0
- package/dist/admit.d.ts.map +1 -1
- package/dist/engine/abandonStalled.d.ts +9807 -0
- package/dist/engine/abandonStalled.d.ts.map +1 -0
- package/dist/engine/abandonStalled.js +55 -0
- package/dist/engine/abandonStalled.js.map +1 -0
- package/dist/engine/applyResolution.d.ts +108 -0
- package/dist/engine/applyResolution.d.ts.map +1 -1
- package/dist/engine/applyResolution.js +3 -0
- package/dist/engine/applyResolution.js.map +1 -1
- package/dist/engine/approveBrief.d.ts +164 -2
- package/dist/engine/approveBrief.d.ts.map +1 -1
- package/dist/engine/approveBrief.js +7 -5
- package/dist/engine/approveBrief.js.map +1 -1
- package/dist/engine/authorizeResolution.d.ts +942 -24
- package/dist/engine/authorizeResolution.d.ts.map +1 -1
- package/dist/engine/boardBrief.d.ts +162 -0
- package/dist/engine/boardBrief.d.ts.map +1 -1
- package/dist/engine/capacityRetry.d.ts +2883 -75
- package/dist/engine/capacityRetry.d.ts.map +1 -1
- package/dist/engine/closeDecisions.d.ts +108 -0
- package/dist/engine/closeDecisions.d.ts.map +1 -1
- package/dist/engine/completeBoardWork.d.ts +108 -0
- package/dist/engine/completeBoardWork.d.ts.map +1 -1
- package/dist/engine/completeReport.d.ts +108 -0
- package/dist/engine/completeReport.d.ts.map +1 -1
- package/dist/engine/continueCommand.d.ts +54 -0
- package/dist/engine/continueCommand.d.ts.map +1 -1
- package/dist/engine/continueWorker.d.ts +108 -0
- package/dist/engine/continueWorker.d.ts.map +1 -1
- package/dist/engine/deliverPendingAnswers.d.ts +1104 -24
- package/dist/engine/deliverPendingAnswers.d.ts.map +1 -1
- package/dist/engine/dispatchCommand.d.ts +54 -0
- package/dist/engine/dispatchCommand.d.ts.map +1 -1
- package/dist/engine/ensureDecisionOwner.d.ts +108 -0
- package/dist/engine/ensureDecisionOwner.d.ts.map +1 -1
- package/dist/engine/ensurePublication.d.ts +108 -0
- package/dist/engine/ensurePublication.d.ts.map +1 -1
- package/dist/engine/inspectRenewal.d.ts +108 -0
- package/dist/engine/inspectRenewal.d.ts.map +1 -1
- package/dist/engine/launchInput.d.ts +54 -0
- package/dist/engine/launchInput.d.ts.map +1 -1
- package/dist/engine/launchReceipt.d.ts +54 -0
- package/dist/engine/launchReceipt.d.ts.map +1 -1
- package/dist/engine/makeAdopt.d.ts +108 -0
- package/dist/engine/makeAdopt.d.ts.map +1 -1
- package/dist/engine/makeAdvance.d.ts +54 -0
- package/dist/engine/makeAdvance.d.ts.map +1 -1
- package/dist/engine/makeDeliver.d.ts +108 -0
- package/dist/engine/makeDeliver.d.ts.map +1 -1
- package/dist/engine/makeHuman.d.ts +108 -0
- package/dist/engine/makeHuman.d.ts.map +1 -1
- package/dist/engine/makeLaunch.d.ts +108 -0
- package/dist/engine/makeLaunch.d.ts.map +1 -1
- package/dist/engine/makeObserve.d.ts +108 -0
- package/dist/engine/makeObserve.d.ts.map +1 -1
- package/dist/engine/makeReview.d.ts +108 -0
- package/dist/engine/makeReview.d.ts.map +1 -1
- package/dist/engine/makeState.d.ts +888 -24
- package/dist/engine/makeState.d.ts.map +1 -1
- package/dist/engine/makeValidate.d.ts +108 -0
- package/dist/engine/makeValidate.d.ts.map +1 -1
- package/dist/engine/mergeReadiness.d.ts +1212 -24
- package/dist/engine/mergeReadiness.d.ts.map +1 -1
- package/dist/engine/observeDeliveryFailure.d.ts +996 -24
- package/dist/engine/observeDeliveryFailure.d.ts.map +1 -1
- package/dist/engine/observeRenewal.d.ts +189 -0
- package/dist/engine/observeRenewal.d.ts.map +1 -1
- package/dist/engine/observedAttempt.d.ts.map +1 -1
- package/dist/engine/observedAttempt.js +3 -0
- package/dist/engine/observedAttempt.js.map +1 -1
- package/dist/engine/obtainReview.d.ts +54 -0
- package/dist/engine/obtainReview.d.ts.map +1 -1
- package/dist/engine/operationRecord.d.ts +726 -24
- package/dist/engine/operationRecord.d.ts.map +1 -1
- package/dist/engine/persistTerminalReceipts.d.ts +108 -0
- package/dist/engine/persistTerminalReceipts.d.ts.map +1 -1
- package/dist/engine/prepareCommand.d.ts +54 -0
- package/dist/engine/prepareCommand.d.ts.map +1 -1
- package/dist/engine/prepareCommand.js +19 -0
- package/dist/engine/prepareCommand.js.map +1 -1
- package/dist/engine/queueAnswerCommand.d.ts +54 -0
- package/dist/engine/queueAnswerCommand.d.ts.map +1 -1
- package/dist/engine/readOrContinueReview.d.ts +54 -0
- package/dist/engine/readOrContinueReview.d.ts.map +1 -1
- package/dist/engine/readRetry.d.ts +1995 -51
- package/dist/engine/readRetry.d.ts.map +1 -1
- package/dist/engine/reassignCommand.d.ts +54 -0
- package/dist/engine/reassignCommand.d.ts.map +1 -1
- package/dist/engine/reconcileAttempt.d.ts +81 -0
- package/dist/engine/reconcileAttempt.d.ts.map +1 -1
- package/dist/engine/reconcileCommand.d.ts +54 -0
- package/dist/engine/reconcileCommand.d.ts.map +1 -1
- package/dist/engine/recoverStall.d.ts +1023 -24
- package/dist/engine/recoverStall.d.ts.map +1 -1
- package/dist/engine/recoverStall.js +5 -1
- package/dist/engine/recoverStall.js.map +1 -1
- package/dist/engine/recoverUnobservable.d.ts +1023 -24
- package/dist/engine/recoverUnobservable.d.ts.map +1 -1
- package/dist/engine/refreshBrief.d.ts +1997 -53
- package/dist/engine/refreshBrief.d.ts.map +1 -1
- package/dist/engine/refreshReviewResult.d.ts +108 -0
- package/dist/engine/refreshReviewResult.d.ts.map +1 -1
- package/dist/engine/releaseClosedPreparation.d.ts +996 -24
- package/dist/engine/releaseClosedPreparation.d.ts.map +1 -1
- package/dist/engine/releaseExecution.d.ts +996 -24
- package/dist/engine/releaseExecution.d.ts.map +1 -1
- package/dist/engine/releaseFinishedWork.d.ts +54 -0
- package/dist/engine/releaseFinishedWork.d.ts.map +1 -1
- package/dist/engine/repository.d.ts +672 -24
- package/dist/engine/repository.d.ts.map +1 -1
- package/dist/engine/repository.js +1 -0
- package/dist/engine/repository.js.map +1 -1
- package/dist/engine/requestConflictRepair.d.ts +996 -24
- package/dist/engine/requestConflictRepair.d.ts.map +1 -1
- package/dist/engine/requestRework.d.ts +108 -0
- package/dist/engine/requestRework.d.ts.map +1 -1
- package/dist/engine/resolveCommand.d.ts +54 -0
- package/dist/engine/resolveCommand.d.ts.map +1 -1
- package/dist/engine/resolveExecution.d.ts +996 -24
- package/dist/engine/resolveExecution.d.ts.map +1 -1
- package/dist/engine/resolveExecution.js +3 -1
- package/dist/engine/resolveExecution.js.map +1 -1
- package/dist/engine/resumeAttempt.d.ts +1023 -24
- package/dist/engine/resumeAttempt.d.ts.map +1 -1
- package/dist/engine/retireUnacknowledged.d.ts +108 -0
- package/dist/engine/retireUnacknowledged.d.ts.map +1 -1
- package/dist/engine/retryTerminal.d.ts +942 -24
- package/dist/engine/retryTerminal.d.ts.map +1 -1
- package/dist/engine/scheduler.d.ts +108 -0
- package/dist/engine/scheduler.d.ts.map +1 -1
- package/dist/engine/sessionCleanup.d.ts +108 -0
- package/dist/engine/sessionCleanup.d.ts.map +1 -1
- package/dist/engine/sessionCleanup.js +3 -1
- package/dist/engine/sessionCleanup.js.map +1 -1
- package/dist/engine/sessionStatus.d.ts.map +1 -1
- package/dist/engine/sessionStatus.js +3 -0
- package/dist/engine/sessionStatus.js.map +1 -1
- package/dist/engine/settleMergedDelivery.d.ts +996 -24
- package/dist/engine/settleMergedDelivery.d.ts.map +1 -1
- package/dist/engine/steerBrief.d.ts +10340 -0
- package/dist/engine/steerBrief.d.ts.map +1 -0
- package/dist/engine/steerBrief.js +42 -0
- package/dist/engine/steerBrief.js.map +1 -0
- package/dist/engine/submissionFailure.d.ts +888 -24
- package/dist/engine/submissionFailure.d.ts.map +1 -1
- package/dist/engine/submitLaunch.d.ts +942 -24
- package/dist/engine/submitLaunch.d.ts.map +1 -1
- package/dist/engine/views.js +1 -0
- package/dist/engine/views.js.map +1 -1
- package/dist/engine/workerReport.d.ts +162 -0
- package/dist/engine/workerReport.d.ts.map +1 -1
- package/dist/fleet.d.ts +540 -0
- package/dist/fleet.d.ts.map +1 -1
- package/dist/host/admission.d.ts +108 -0
- package/dist/host/admission.d.ts.map +1 -1
- package/dist/host/admission.js +2 -1
- package/dist/host/admission.js.map +1 -1
- package/dist/host/answerWork.d.ts +54 -0
- package/dist/host/answerWork.d.ts.map +1 -1
- package/dist/host/commands.d.ts +108 -0
- package/dist/host/commands.d.ts.map +1 -1
- package/dist/host/daemon.d.ts +1465 -865
- package/dist/host/daemon.d.ts.map +1 -1
- package/dist/host/daemonClient.d.ts +691 -91
- package/dist/host/daemonClient.d.ts.map +1 -1
- package/dist/host/daemonContract.d.ts +984 -0
- package/dist/host/daemonContract.d.ts.map +1 -1
- package/dist/host/readWaitStates.d.ts.map +1 -1
- package/dist/host/readWaitStates.js +13 -4
- package/dist/host/readWaitStates.js.map +1 -1
- package/dist/host/reassignWork.d.ts +54 -0
- package/dist/host/reassignWork.d.ts.map +1 -1
- package/dist/host/recordPayloads.d.ts.map +1 -1
- package/dist/host/recordPayloads.js +8 -3
- package/dist/host/recordPayloads.js.map +1 -1
- package/dist/host/releaseWork.d.ts +108 -0
- package/dist/host/releaseWork.d.ts.map +1 -1
- package/dist/host/status.d.ts +30 -0
- package/dist/host/status.d.ts.map +1 -1
- package/dist/model.d.ts +144 -0
- package/dist/model.d.ts.map +1 -1
- package/dist/model.js +14 -1
- package/dist/model.js.map +1 -1
- package/dist/operations.d.ts +1224 -0
- package/dist/operations.d.ts.map +1 -1
- package/dist/packageInfo.d.ts +1 -1
- package/dist/packageInfo.js +1 -1
- package/dist/prompt/briefEdit.d.ts +2 -0
- package/dist/prompt/briefEdit.d.ts.map +1 -0
- package/dist/prompt/briefEdit.js +41 -0
- package/dist/prompt/briefEdit.js.map +1 -0
- package/dist/prompt/worker.d.ts.map +1 -1
- package/dist/prompt/worker.js +11 -2
- package/dist/prompt/worker.js.map +1 -1
- package/dist/qualifyDependencies.d.ts +54 -0
- package/dist/qualifyDependencies.d.ts.map +1 -1
- package/dist/scheduling/areas.d.ts +162 -0
- package/dist/scheduling/areas.d.ts.map +1 -1
- package/dist/storage/attemptV12.d.ts +108 -0
- package/dist/storage/attemptV12.d.ts.map +1 -0
- package/dist/storage/attemptV12.js +94 -0
- package/dist/storage/attemptV12.js.map +1 -0
- package/dist/storage/createCollections.d.ts +5 -0
- package/dist/storage/createCollections.d.ts.map +1 -0
- package/dist/storage/createCollections.js +21 -0
- package/dist/storage/createCollections.js.map +1 -0
- package/dist/storage/cycleV12.d.ts +287 -0
- package/dist/storage/cycleV12.d.ts.map +1 -0
- package/dist/storage/cycleV12.js +124 -0
- package/dist/storage/cycleV12.js.map +1 -0
- package/dist/storage/fleetMigrations.d.ts +0 -39
- package/dist/storage/fleetMigrations.d.ts.map +1 -1
- package/dist/storage/fleetMigrations.js +3 -9
- package/dist/storage/fleetMigrations.js.map +1 -1
- package/dist/storage/legacyColumns.d.ts +40 -0
- package/dist/storage/legacyColumns.d.ts.map +1 -0
- package/dist/storage/legacyColumns.js +12 -0
- package/dist/storage/legacyColumns.js.map +1 -0
- package/dist/storage/makeForeignReservations.d.ts +15 -0
- package/dist/storage/makeForeignReservations.d.ts.map +1 -0
- package/dist/storage/makeForeignReservations.js +34 -0
- package/dist/storage/makeForeignReservations.js.map +1 -0
- package/dist/storage/makePostgresFleetStore.d.ts +36 -16
- package/dist/storage/makePostgresFleetStore.d.ts.map +1 -1
- package/dist/storage/makePostgresFleetStore.js +24 -32
- package/dist/storage/makePostgresFleetStore.js.map +1 -1
- package/dist/storage/model.d.ts +53 -59
- package/dist/storage/model.d.ts.map +1 -1
- package/dist/storage/model.js +18 -60
- package/dist/storage/model.js.map +1 -1
- package/dist/storage/operationEntries.d.ts +6 -5
- package/dist/storage/operationEntries.d.ts.map +1 -1
- package/dist/storage/operationEntries.js +12 -15
- package/dist/storage/operationEntries.js.map +1 -1
- package/dist/storage/preparationV12.d.ts +44 -0
- package/dist/storage/preparationV12.d.ts.map +1 -0
- package/dist/storage/preparationV12.js +30 -0
- package/dist/storage/preparationV12.js.map +1 -0
- package/dist/storage/readRecords.d.ts +4 -0
- package/dist/storage/readRecords.d.ts.map +1 -0
- package/dist/storage/readRecords.js +10 -0
- package/dist/storage/readRecords.js.map +1 -0
- package/dist/storage/recordChildren.d.ts +11 -0
- package/dist/storage/recordChildren.d.ts.map +1 -0
- package/dist/storage/recordChildren.js +105 -0
- package/dist/storage/recordChildren.js.map +1 -0
- package/dist/storage/recordShape.d.ts +23 -0
- package/dist/storage/recordShape.d.ts.map +1 -0
- package/dist/storage/recordShape.js +112 -0
- package/dist/storage/recordShape.js.map +1 -0
- package/dist/storage/recordValue.d.ts +9 -6
- package/dist/storage/recordValue.d.ts.map +1 -1
- package/dist/storage/recordValue.js +42 -32
- package/dist/storage/recordValue.js.map +1 -1
- package/dist/storage/shapeV12.d.ts +794 -0
- package/dist/storage/shapeV12.d.ts.map +1 -0
- package/dist/storage/shapeV12.js +10 -0
- package/dist/storage/shapeV12.js.map +1 -0
- package/dist/storage/textRecordValue.d.ts +3 -0
- package/dist/storage/textRecordValue.d.ts.map +1 -0
- package/dist/storage/textRecordValue.js +13 -0
- package/dist/storage/textRecordValue.js.map +1 -0
- package/dist/storage/typedDecisionsV12.d.ts +103 -0
- package/dist/storage/typedDecisionsV12.d.ts.map +1 -0
- package/dist/storage/typedDecisionsV12.js +97 -0
- package/dist/storage/typedDecisionsV12.js.map +1 -0
- package/dist/storage/typedTables.d.ts +4 -0
- package/dist/storage/typedTables.d.ts.map +1 -0
- package/dist/storage/typedTables.js +39 -0
- package/dist/storage/typedTables.js.map +1 -0
- package/package.json +8 -8
- package/src/engine/abandonStalled.ts +63 -0
- package/src/engine/applyResolution.ts +3 -0
- package/src/engine/approveBrief.ts +34 -32
- package/src/engine/observedAttempt.ts +3 -0
- package/src/engine/prepareCommand.ts +21 -0
- package/src/engine/recoverStall.ts +6 -2
- package/src/engine/repository.ts +1 -0
- package/src/engine/resolveExecution.ts +3 -1
- package/src/engine/sessionCleanup.ts +3 -1
- package/src/engine/sessionStatus.ts +5 -0
- package/src/engine/steerBrief.ts +54 -0
- package/src/engine/views.ts +1 -0
- package/src/host/admission.ts +2 -1
- package/src/host/readWaitStates.ts +12 -11
- package/src/host/recordPayloads.ts +11 -3
- package/src/model.ts +20 -1
- package/src/packageInfo.ts +1 -1
- package/src/prompt/briefEdit.ts +44 -0
- package/src/prompt/worker.ts +11 -2
- package/src/storage/attemptV12.ts +95 -0
- package/src/storage/createCollections.ts +21 -0
- package/src/storage/cycleV12.ts +125 -0
- package/src/storage/fleetMigrations.ts +3 -10
- package/src/storage/legacyColumns.ts +12 -0
- package/src/storage/makeForeignReservations.ts +41 -0
- package/src/storage/makePostgresFleetStore.ts +30 -43
- package/src/storage/model.ts +19 -69
- package/src/storage/operationEntries.ts +12 -22
- package/src/storage/preparationV12.ts +31 -0
- package/src/storage/readRecords.ts +12 -0
- package/src/storage/recordChildren.ts +131 -0
- package/src/storage/recordShape.ts +137 -0
- package/src/storage/recordValue.ts +47 -34
- package/src/storage/shapeV12.ts +11 -0
- package/src/storage/textRecordValue.ts +16 -0
- package/src/storage/typedDecisionsV12.ts +100 -0
- package/src/storage/typedTables.ts +39 -0
package/dist/storage/model.js
CHANGED
|
@@ -1,61 +1,22 @@
|
|
|
1
|
-
import { Effect, Schema
|
|
1
|
+
import { Effect, Schema } from "effect";
|
|
2
2
|
import { Model } from "effect/schema";
|
|
3
3
|
import { FleetRecord } from "#model.ts";
|
|
4
|
+
import { inputColumns } from "#storage/recordChildren.ts";
|
|
5
|
+
import { columnSchema, recordShape, shapeColumns } from "#storage/recordShape.ts";
|
|
4
6
|
import { recordValue } from "#storage/recordValue.ts";
|
|
5
|
-
function scalarKind(ast) {
|
|
6
|
-
if (SchemaAST.isString(ast)) {
|
|
7
|
-
return "string";
|
|
8
|
-
}
|
|
9
|
-
if (SchemaAST.isNumber(ast)) {
|
|
10
|
-
return "number";
|
|
11
|
-
}
|
|
12
|
-
if (SchemaAST.isBoolean(ast)) {
|
|
13
|
-
return "boolean";
|
|
14
|
-
}
|
|
15
|
-
if (SchemaAST.isLiteral(ast)) {
|
|
16
|
-
if (typeof ast.literal === "string") {
|
|
17
|
-
return "string";
|
|
18
|
-
}
|
|
19
|
-
if (typeof ast.literal === "number") {
|
|
20
|
-
return "number";
|
|
21
|
-
}
|
|
22
|
-
if (typeof ast.literal === "boolean") {
|
|
23
|
-
return "boolean";
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
if (SchemaAST.isUnion(ast)) {
|
|
27
|
-
const kinds = new Set(ast.types.filter((type) => !SchemaAST.isUndefined(type)).map(scalarKind));
|
|
28
|
-
if (kinds.size === 1) {
|
|
29
|
-
return [...kinds][0] ?? "json";
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
return "json";
|
|
33
|
-
}
|
|
34
7
|
export function recordColumns(schema = FleetRecord) {
|
|
35
|
-
|
|
36
|
-
const base = SchemaAST.toEncoded(FleetRecord.ast);
|
|
37
|
-
const properties = [...(SchemaAST.isObjects(base) ? base.propertySignatures : []), ...(SchemaAST.isObjects(ast) ? ast.propertySignatures : [])];
|
|
38
|
-
return Object.fromEntries(properties.filter((field) => field.name !== "workId").map((field) => [String(field.name), scalarKind(field.type)]));
|
|
39
|
-
}
|
|
40
|
-
function columnSchema(kind) {
|
|
41
|
-
if (kind === "number") {
|
|
42
|
-
return Schema.Number;
|
|
43
|
-
}
|
|
44
|
-
if (kind === "boolean") {
|
|
45
|
-
return Schema.Boolean;
|
|
46
|
-
}
|
|
47
|
-
return Schema.String;
|
|
8
|
+
return shapeColumns(recordShape(schema));
|
|
48
9
|
}
|
|
49
10
|
const rowFields = {
|
|
50
11
|
"admission_order": Model.Field({ select: Schema.BigInt, update: Schema.BigInt }),
|
|
51
|
-
attempts: Schema.NullOr(Schema.
|
|
12
|
+
attempts: Schema.NullOr(Schema.Boolean),
|
|
52
13
|
attentionOwner: Schema.NullOr(Schema.String),
|
|
53
14
|
blocker: Schema.NullOr(Schema.String),
|
|
54
|
-
checks: Schema.NullOr(Schema.
|
|
55
|
-
decision: Schema.NullOr(Schema.
|
|
56
|
-
history: Schema.NullOr(Schema.
|
|
57
|
-
launchRetry: Schema.NullOr(Schema.
|
|
58
|
-
outcome: Schema.NullOr(Schema.
|
|
15
|
+
checks: Schema.NullOr(Schema.Boolean),
|
|
16
|
+
decision: Schema.NullOr(Schema.Boolean),
|
|
17
|
+
history: Schema.NullOr(Schema.Boolean),
|
|
18
|
+
launchRetry: Schema.NullOr(Schema.Boolean),
|
|
19
|
+
outcome: Schema.NullOr(Schema.Boolean),
|
|
59
20
|
stage: Schema.NullOr(Schema.String),
|
|
60
21
|
version: Model.Field({ select: Schema.Number, update: Schema.Number }),
|
|
61
22
|
"work_id": Schema.String,
|
|
@@ -63,7 +24,10 @@ const rowFields = {
|
|
|
63
24
|
class FleetRow extends Model.Class("FleetRow")(rowFields) {
|
|
64
25
|
}
|
|
65
26
|
export function recordModel(schema = FleetRecord) {
|
|
66
|
-
|
|
27
|
+
return modelFromColumns(recordColumns(schema));
|
|
28
|
+
}
|
|
29
|
+
export function modelFromColumns(columns) {
|
|
30
|
+
const fields = Object.fromEntries(Object.entries(columns).map(([name, kind]) => [name, columnSchema(kind)]));
|
|
67
31
|
// Explicit summary fields retain typed projections while the remaining fields come from the record schema.
|
|
68
32
|
class RecordRow extends Model.Class("FleetRow")({ ...rowFields, ...fields }) {
|
|
69
33
|
}
|
|
@@ -76,16 +40,10 @@ export const ForeignReservation = Schema.Struct({
|
|
|
76
40
|
});
|
|
77
41
|
export class ForeignReservationRow extends Model.Class("ForeignReservationRow")(ForeignReservation.fields) {
|
|
78
42
|
}
|
|
79
|
-
export function recordInput(value,
|
|
80
|
-
|
|
81
|
-
return Object.fromEntries(Object.entries(columns).map(([name, kind]) => {
|
|
82
|
-
if (encoded[name] === undefined) {
|
|
83
|
-
return [name, null];
|
|
84
|
-
}
|
|
85
|
-
return [name, kind === "json" ? JSON.stringify(encoded[name]) : encoded[name]];
|
|
86
|
-
}));
|
|
43
|
+
export function recordInput(value, schema = FleetRecord) {
|
|
44
|
+
return inputColumns(value, recordShape(schema));
|
|
87
45
|
}
|
|
88
|
-
export function recordJson(row,
|
|
89
|
-
return recordValue(row,
|
|
46
|
+
export function recordJson(row, namespace) {
|
|
47
|
+
return recordValue(row, recordShape(), namespace).pipe(Effect.map(JSON.stringify));
|
|
90
48
|
}
|
|
91
49
|
//# sourceMappingURL=model.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model.js","sourceRoot":"","sources":["../../src/storage/model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"model.js","sourceRoot":"","sources":["../../src/storage/model.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { Effect
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
workId: string;
|
|
5
|
-
|
|
1
|
+
import { Effect } from "effect";
|
|
2
|
+
import { SqlClient } from "effect/sql";
|
|
3
|
+
export declare const operationEntries: (namespace: string, operationId: string) => Effect.Effect<readonly {
|
|
4
|
+
readonly workId: string;
|
|
5
|
+
readonly version: number;
|
|
6
|
+
}[], import("effect/sql/SqlError").SqlError, SqlClient.SqlClient>;
|
|
6
7
|
//# sourceMappingURL=operationEntries.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"operationEntries.d.ts","sourceRoot":"","sources":["../../src/storage/operationEntries.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"operationEntries.d.ts","sourceRoot":"","sources":["../../src/storage/operationEntries.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAGvC,eAAO,MAAM,gBAAgB;qBAES,MAAM;sBAAoB,MAAM;iEAOpE,CAAC"}
|
|
@@ -1,17 +1,14 @@
|
|
|
1
|
-
import { Effect
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
const
|
|
5
|
-
const
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
return records.flatMap((record) => [...(record.history ?? []).flatMap((cycle) => cycle.attempts), ...record.attempts]
|
|
14
|
-
.filter((attempt) => attempt.operationId === operationId)
|
|
15
|
-
.map(() => ({ version: record.version + 1, workId: record.workId })));
|
|
1
|
+
import { Effect } from "effect";
|
|
2
|
+
import { SqlClient } from "effect/sql";
|
|
3
|
+
import { childTable } from "#storage/recordChildren.ts";
|
|
4
|
+
export const operationEntries = Effect.fn("FleetRow.operationEntries")(function* (namespace, operationId) {
|
|
5
|
+
const sql = yield* SqlClient.SqlClient;
|
|
6
|
+
return yield* sql `
|
|
7
|
+
select records.work_id as "workId", records.version + 1 as version
|
|
8
|
+
from ${sql(`${namespace}_records`)} records join (
|
|
9
|
+
select work_id from ${sql(childTable(namespace, ["attempts"]))} where ${sql("operationId")} = ${operationId}
|
|
10
|
+
union all
|
|
11
|
+
select work_id from ${sql(childTable(namespace, ["history", "attempts"]))} where ${sql("operationId")} = ${operationId}
|
|
12
|
+
) attempts on attempts.work_id = records.work_id`;
|
|
16
13
|
});
|
|
17
14
|
//# sourceMappingURL=operationEntries.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"operationEntries.js","sourceRoot":"","sources":["../../src/storage/operationEntries.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"operationEntries.js","sourceRoot":"","sources":["../../src/storage/operationEntries.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAExD,MAAM,CAAC,MAAM,gBAAgB,GAAG,MAAM,CAAC,EAAE,CAAC,2BAA2B,CAAC,CAAC,QAAQ,CAAC,EAAE,SAAiB,EAAE,WAAmB;IACvH,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC;IACvC,OAAO,KAAK,CAAC,CAAC,GAAG,CAAuD;;SAEhE,GAAG,CAAC,GAAG,SAAS,UAAU,CAAC;yBACX,GAAG,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,aAAa,CAAC,MAAM,WAAW;;yBAErF,GAAG,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,aAAa,CAAC,MAAM,WAAW;mDACtE,CAAC;AACpD,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
export declare const preparationV12: {
|
|
2
|
+
readonly fields: {
|
|
3
|
+
readonly baselinePaths: {
|
|
4
|
+
readonly array: "string";
|
|
5
|
+
};
|
|
6
|
+
readonly baseRevision: "string";
|
|
7
|
+
readonly configuration: {
|
|
8
|
+
readonly array: {
|
|
9
|
+
readonly fields: {
|
|
10
|
+
readonly path: "string";
|
|
11
|
+
readonly relevantKeys: {
|
|
12
|
+
readonly array: "string";
|
|
13
|
+
};
|
|
14
|
+
};
|
|
15
|
+
};
|
|
16
|
+
};
|
|
17
|
+
readonly contextComplete: "boolean";
|
|
18
|
+
readonly dependencyPaths: {
|
|
19
|
+
readonly array: "string";
|
|
20
|
+
};
|
|
21
|
+
readonly observedAt: "number";
|
|
22
|
+
readonly ownedPaths: {
|
|
23
|
+
readonly array: "string";
|
|
24
|
+
};
|
|
25
|
+
readonly qualityPaths: {
|
|
26
|
+
readonly array: "string";
|
|
27
|
+
};
|
|
28
|
+
readonly setupPaths: {
|
|
29
|
+
readonly array: "string";
|
|
30
|
+
};
|
|
31
|
+
readonly sourcePaths: {
|
|
32
|
+
readonly array: "string";
|
|
33
|
+
};
|
|
34
|
+
readonly validation: {
|
|
35
|
+
readonly array: {
|
|
36
|
+
readonly fields: {
|
|
37
|
+
readonly command: "string";
|
|
38
|
+
readonly revision: "string";
|
|
39
|
+
};
|
|
40
|
+
};
|
|
41
|
+
};
|
|
42
|
+
};
|
|
43
|
+
};
|
|
44
|
+
//# sourceMappingURL=preparationV12.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preparationV12.d.ts","sourceRoot":"","sources":["../../src/storage/preparationV12.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,cAAc;;iBAEzB,aAAa;qBAAI,KAAK,EAAE,QAAQ;;iBAChC,YAAY,EAAE,QAAQ;iBACtB,aAAa;qBACZ,KAAK;yBACJ,MAAM;6BACL,IAAI,EAAE,QAAQ;6BACd,YAAY;iCAAI,KAAK,EAAE,QAAQ;;;;;iBAIlC,eAAe,EAAE,SAAS;iBAC1B,eAAe;qBAAI,KAAK,EAAE,QAAQ;;iBAClC,UAAU,EAAE,QAAQ;iBACpB,UAAU;qBAAI,KAAK,EAAE,QAAQ;;iBAC7B,YAAY;qBAAI,KAAK,EAAE,QAAQ;;iBAC/B,UAAU;qBAAI,KAAK,EAAE,QAAQ;;iBAC7B,WAAW;qBAAI,KAAK,EAAE,QAAQ;;iBAC9B,UAAU;qBACT,KAAK;yBACJ,MAAM;6BACL,OAAO,EAAE,QAAQ;6BACjB,QAAQ,EAAE,QAAQ;;;;;CAKG,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export const preparationV12 = {
|
|
2
|
+
fields: {
|
|
3
|
+
baselinePaths: { array: "string" },
|
|
4
|
+
baseRevision: "string",
|
|
5
|
+
configuration: {
|
|
6
|
+
array: {
|
|
7
|
+
fields: {
|
|
8
|
+
path: "string",
|
|
9
|
+
relevantKeys: { array: "string" },
|
|
10
|
+
},
|
|
11
|
+
},
|
|
12
|
+
},
|
|
13
|
+
contextComplete: "boolean",
|
|
14
|
+
dependencyPaths: { array: "string" },
|
|
15
|
+
observedAt: "number",
|
|
16
|
+
ownedPaths: { array: "string" },
|
|
17
|
+
qualityPaths: { array: "string" },
|
|
18
|
+
setupPaths: { array: "string" },
|
|
19
|
+
sourcePaths: { array: "string" },
|
|
20
|
+
validation: {
|
|
21
|
+
array: {
|
|
22
|
+
fields: {
|
|
23
|
+
command: "string",
|
|
24
|
+
revision: "string",
|
|
25
|
+
},
|
|
26
|
+
},
|
|
27
|
+
},
|
|
28
|
+
},
|
|
29
|
+
};
|
|
30
|
+
//# sourceMappingURL=preparationV12.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preparationV12.js","sourceRoot":"","sources":["../../src/storage/preparationV12.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,cAAc,GAAG;IAC7B,MAAM,EAAE;QACP,aAAa,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE;QAClC,YAAY,EAAE,QAAQ;QACtB,aAAa,EAAE;YACd,KAAK,EAAE;gBACN,MAAM,EAAE;oBACP,IAAI,EAAE,QAAQ;oBACd,YAAY,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE;iBACjC;aACD;SACD;QACD,eAAe,EAAE,SAAS;QAC1B,eAAe,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE;QACpC,UAAU,EAAE,QAAQ;QACpB,UAAU,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE;QAC/B,YAAY,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE;QACjC,UAAU,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE;QAC/B,WAAW,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE;QAChC,UAAU,EAAE;YACX,KAAK,EAAE;gBACN,MAAM,EAAE;oBACP,OAAO,EAAE,QAAQ;oBACjB,QAAQ,EAAE,QAAQ;iBAClB;aACD;SACD;KACD;CACwB,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { Effect } from "effect";
|
|
2
|
+
import { SqlClient } from "effect/sql";
|
|
3
|
+
export declare const readRecords: <A, E, R>(namespace: string, body: Effect.Effect<A, E, R>) => Effect.Effect<A, E | import("effect/sql/SqlError").SqlError, R | SqlClient.SqlClient>;
|
|
4
|
+
//# sourceMappingURL=readRecords.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"readRecords.d.ts","sourceRoot":"","sources":["../../src/storage/readRecords.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC,eAAO,MAAM,WAAW,GAAgD,CAAC,EAAE,CAAC,EAAE,CAAC,2IAQ7E,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Effect } from "effect";
|
|
2
|
+
import { SqlClient } from "effect/sql";
|
|
3
|
+
export const readRecords = Effect.fn("FleetRow.readRecords")(function* (namespace, body) {
|
|
4
|
+
const sql = yield* SqlClient.SqlClient;
|
|
5
|
+
return yield* sql.withTransaction(Effect.gen(function* () {
|
|
6
|
+
yield* sql `select pg_advisory_xact_lock_shared(hashtextextended(${`work_fleet_admission:${namespace}`}, 0))`;
|
|
7
|
+
return yield* body;
|
|
8
|
+
}));
|
|
9
|
+
});
|
|
10
|
+
//# sourceMappingURL=readRecords.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"readRecords.js","sourceRoot":"","sources":["../../src/storage/readRecords.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC,MAAM,CAAC,MAAM,WAAW,GAAG,MAAM,CAAC,EAAE,CAAC,sBAAsB,CAAC,CAAC,QAAQ,CAAC,EAAW,SAAiB,EAAE,IAA4B;IAC/H,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC;IACvC,OAAO,KAAK,CAAC,CAAC,GAAG,CAAC,eAAe,CAChC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QACnB,KAAK,CAAC,CAAC,GAAG,CAAA,wDAAwD,wBAAwB,SAAS,EAAE,OAAO,CAAC;QAC7G,OAAO,KAAK,CAAC,CAAC,IAAI,CAAC;IACpB,CAAC,CAAC,CACF,CAAC;AACH,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Effect, Schema } from "effect";
|
|
2
|
+
import { SqlClient } from "effect/sql";
|
|
3
|
+
import type { SqlError } from "effect/sql/SqlError";
|
|
4
|
+
import { type Collection, type Shape } from "#storage/recordShape.ts";
|
|
5
|
+
export declare function childTable(namespace: string, path: readonly string[]): string;
|
|
6
|
+
export declare function positions(collection: Collection): string[];
|
|
7
|
+
export declare function objectValue(value: unknown): Record<string, unknown>;
|
|
8
|
+
export declare function inputColumns(value: unknown, shape: Shape, path?: readonly string[]): Record<string, unknown>;
|
|
9
|
+
export declare const makeRecordChildren: (namespace: string, shape: Shape) => Effect.Effect<(workId: string, value: unknown, replace?: any) => Effect.Effect<void, Schema.SchemaError | SqlError, never>, never, SqlClient.SqlClient>;
|
|
10
|
+
export declare const writeChildren: (namespace: string, workId: string, value: unknown, shape: Shape) => Effect.Effect<void, Schema.SchemaError | SqlError, SqlClient.SqlClient>;
|
|
11
|
+
//# sourceMappingURL=recordChildren.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recordChildren.d.ts","sourceRoot":"","sources":["../../src/storage/recordChildren.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAExC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAEpD,OAAO,EAAE,KAAK,UAAU,EAA6B,KAAK,KAAK,EAAgB,MAAM,yBAAyB,CAAC;AAE/G,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,UAEpE;AAED,wBAAgB,SAAS,CAAC,UAAU,EAAE,UAAU,YAE/C;AAaD,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEnE;AAMD,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,GAAE,SAAS,MAAM,EAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAchH;AAED,eAAO,MAAM,kBAAkB,8LA0E7B,CAAC;AAEH,eAAO,MAAM,aAAa,8IAGxB,CAAC"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { Effect, Schema } from "effect";
|
|
3
|
+
import { Model } from "effect/schema";
|
|
4
|
+
import { SqlClient } from "effect/sql";
|
|
5
|
+
import { makeRepository } from "@shivaedev/effect-sql/repository.ts";
|
|
6
|
+
import { collections, columnSchema, shapeColumns } from "#storage/recordShape.ts";
|
|
7
|
+
export function childTable(namespace, path) {
|
|
8
|
+
return `${namespace}_c_${createHash("sha256").update(path.join(".")).digest("hex").slice(0, 12)}`;
|
|
9
|
+
}
|
|
10
|
+
export function positions(collection) {
|
|
11
|
+
return Array.from({ length: collection.parents.length + 1 }, (_unused, index) => `position${index}`);
|
|
12
|
+
}
|
|
13
|
+
function childModel(collection) {
|
|
14
|
+
class Child extends Model.Class("FleetChild")({
|
|
15
|
+
...Object.fromEntries(Object.entries(shapeColumns(collection.shape)).map(([name, kind]) => [name, columnSchema(kind)])),
|
|
16
|
+
...Object.fromEntries(positions(collection).map((name) => [name, Schema.Number])),
|
|
17
|
+
"work_id": Schema.String,
|
|
18
|
+
}) {
|
|
19
|
+
}
|
|
20
|
+
return Child;
|
|
21
|
+
}
|
|
22
|
+
const decodeObject = Schema.decodeUnknownSync(Schema.Record(Schema.String, Schema.Unknown));
|
|
23
|
+
export function objectValue(value) {
|
|
24
|
+
return decodeObject(value);
|
|
25
|
+
}
|
|
26
|
+
function presence(value) {
|
|
27
|
+
return value === undefined ? null : true;
|
|
28
|
+
}
|
|
29
|
+
export function inputColumns(value, shape, path = []) {
|
|
30
|
+
const name = path.join("__");
|
|
31
|
+
if (typeof shape === "string") {
|
|
32
|
+
return { [name]: value ?? null };
|
|
33
|
+
}
|
|
34
|
+
if ("array" in shape) {
|
|
35
|
+
const stored = typeof shape.array === "string" ? (value ?? null) : presence(value);
|
|
36
|
+
return { [name]: stored };
|
|
37
|
+
}
|
|
38
|
+
const fields = value === undefined ? {} : objectValue(value);
|
|
39
|
+
return Object.assign(path.length === 0 ? {} : { [name]: presence(value) }, ...Object.entries(shape.fields).map(([key, field]) => inputColumns(fields[key], field, [...path, key])));
|
|
40
|
+
}
|
|
41
|
+
export const makeRecordChildren = Effect.fn("FleetRow.makeRecordChildren")(function* (namespace, shape) {
|
|
42
|
+
const sql = yield* SqlClient.SqlClient;
|
|
43
|
+
const tables = collections(shape);
|
|
44
|
+
const repositories = new Map(yield* Effect.forEach(tables, (collection) => Effect.gen(function* () {
|
|
45
|
+
const model = childModel(collection);
|
|
46
|
+
const repository = yield* makeRepository(model, {
|
|
47
|
+
idColumn: "work_id",
|
|
48
|
+
spanPrefix: "FleetChild",
|
|
49
|
+
tableName: childTable(namespace, collection.path),
|
|
50
|
+
});
|
|
51
|
+
return [collection.path.join("."), { model, repository }];
|
|
52
|
+
})));
|
|
53
|
+
const save = Effect.fn("FleetRow.save")(function* (workId, value, replace = true) {
|
|
54
|
+
if (replace) {
|
|
55
|
+
for (const collection of [...tables].reverse()) {
|
|
56
|
+
yield* sql `delete from ${sql(childTable(namespace, collection.path))} where work_id = ${workId}`;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
function write(current, node, path, indices) {
|
|
60
|
+
return Effect.gen(function* () {
|
|
61
|
+
if (current === undefined || typeof node === "string") {
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
if ("fields" in node) {
|
|
65
|
+
const fields = objectValue(current);
|
|
66
|
+
yield* Effect.forEach(Object.entries(node.fields), ([name, field]) => write(fields[name], field, [...path, name], indices), {
|
|
67
|
+
discard: true,
|
|
68
|
+
});
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
if (typeof node.array === "string") {
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
yield* writeArray(current, node.array, path, indices);
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
function writeArray(current, item, path, indices) {
|
|
78
|
+
return Effect.gen(function* () {
|
|
79
|
+
const child = repositories.get(path.join("."));
|
|
80
|
+
if (child === undefined) {
|
|
81
|
+
return yield* Effect.die("Missing Fleet collection");
|
|
82
|
+
}
|
|
83
|
+
const { model, repository } = child;
|
|
84
|
+
const entries = yield* Schema.decodeUnknownEffect(Schema.Array(Schema.Unknown))(current);
|
|
85
|
+
for (const [index, entry] of entries.entries()) {
|
|
86
|
+
const keys = [...indices, index];
|
|
87
|
+
const input = yield* Schema.decodeUnknownEffect(model.insert)({
|
|
88
|
+
...inputColumns(entry, item),
|
|
89
|
+
...Object.fromEntries(keys.map((position, depth) => [`position${depth}`, position])),
|
|
90
|
+
"work_id": workId,
|
|
91
|
+
});
|
|
92
|
+
yield* repository.insertVoid(input);
|
|
93
|
+
yield* write(entry, item, path, keys);
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
yield* write(value, shape, [], []);
|
|
98
|
+
});
|
|
99
|
+
return save;
|
|
100
|
+
});
|
|
101
|
+
export const writeChildren = Effect.fn("FleetRow.writeChildren")(function* (namespace, workId, value, shape) {
|
|
102
|
+
const save = yield* makeRecordChildren(namespace, shape);
|
|
103
|
+
yield* save(workId, value);
|
|
104
|
+
});
|
|
105
|
+
//# sourceMappingURL=recordChildren.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recordChildren.js","sourceRoot":"","sources":["../../src/storage/recordChildren.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { Schema } from "effect";
|
|
2
|
+
export type ScalarKind = "string" | "number" | "boolean";
|
|
3
|
+
export type Shape = ScalarKind | {
|
|
4
|
+
readonly array: Shape;
|
|
5
|
+
} | {
|
|
6
|
+
readonly fields: Readonly<Record<string, Shape>>;
|
|
7
|
+
};
|
|
8
|
+
export type ColumnKind = ScalarKind | "string[]" | "number[]" | "boolean[]";
|
|
9
|
+
export declare function schemaShape(schema: Schema.Top): Shape;
|
|
10
|
+
export declare function recordShape(schema?: Schema.Top): Shape;
|
|
11
|
+
export declare function shapeColumns(shape: Shape, prefix?: readonly string[]): Record<string, ColumnKind>;
|
|
12
|
+
export interface Collection {
|
|
13
|
+
readonly parents: readonly string[];
|
|
14
|
+
readonly path: readonly string[];
|
|
15
|
+
readonly shape: Shape;
|
|
16
|
+
}
|
|
17
|
+
export declare function collections(shape: Shape, path?: readonly string[], parents?: readonly string[]): Collection[];
|
|
18
|
+
export declare const sqlTypes: Readonly<Record<ColumnKind, string>>;
|
|
19
|
+
export declare function columnSchema(kind: ColumnKind): Schema.Top & {
|
|
20
|
+
readonly DecodingServices: never;
|
|
21
|
+
readonly EncodingServices: never;
|
|
22
|
+
};
|
|
23
|
+
//# sourceMappingURL=recordShape.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recordShape.d.ts","sourceRoot":"","sources":["../../src/storage/recordShape.ts"],"names":[],"mappings":"AACA,OAAO,EAAkB,MAAM,EAA2B,MAAM,QAAQ,CAAC;AAGzE,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;AACzD,MAAM,MAAM,KAAK,GAAG,UAAU,GAAG;IAAE,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAA;CAAE,GAAG;IAAE,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAA;CAAE,CAAC;AAClH,MAAM,MAAM,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,WAAW,CAAC;AA4C5E,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,GAAG,KAAK,CAOrD;AAED,wBAAgB,WAAW,CAAC,MAAM,GAAE,MAAM,CAAC,GAAiB,GAAG,KAAK,CAOnE;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,GAAE,SAAS,MAAM,EAAO,GAAG,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAgBrG;AAED,MAAM,WAAW,UAAU;IAC1B,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;CACtB;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,GAAE,SAAS,MAAM,EAAO,EAAE,OAAO,GAAE,SAAS,MAAM,EAAO,GAAG,UAAU,EAAE,CAWrH;AAED,eAAO,MAAM,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAOzD,CAAC;AAYF,wBAAgB,YAAY,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAAC,GAAG,GAAG;IAAE,QAAQ,CAAC,gBAAgB,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,gBAAgB,EAAE,KAAK,CAAA;CAAE,CAYlI"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import * as PgTypes from "@effect/sql-pg/PgTypes";
|
|
2
|
+
import { Effect, Result, Schema, SchemaAST, SchemaGetter } from "effect";
|
|
3
|
+
import { FleetRecord } from "#model.ts";
|
|
4
|
+
function flatten(ast) {
|
|
5
|
+
return SchemaAST.isUnion(ast) ? ast.types.flatMap(flatten) : [ast];
|
|
6
|
+
}
|
|
7
|
+
function fromAsts(asts) {
|
|
8
|
+
const types = asts.flatMap(flatten).filter((ast) => !SchemaAST.isUndefined(ast));
|
|
9
|
+
if (types.every(SchemaAST.isObjects)) {
|
|
10
|
+
const names = [...new Set(types.flatMap((ast) => ast.propertySignatures.map((field) => String(field.name))))];
|
|
11
|
+
return {
|
|
12
|
+
fields: Object.fromEntries(names.map((name) => [
|
|
13
|
+
name,
|
|
14
|
+
fromAsts(types.flatMap((ast) => ast.propertySignatures.filter((field) => field.name === name).map((field) => field.type))),
|
|
15
|
+
])),
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
if (types.every(SchemaAST.isArrays)) {
|
|
19
|
+
return { array: fromAsts(types.flatMap((ast) => ast.rest)) };
|
|
20
|
+
}
|
|
21
|
+
const kinds = types.map((ast) => {
|
|
22
|
+
if (SchemaAST.isString(ast)) {
|
|
23
|
+
return "string";
|
|
24
|
+
}
|
|
25
|
+
if (SchemaAST.isNumber(ast)) {
|
|
26
|
+
return "number";
|
|
27
|
+
}
|
|
28
|
+
if (SchemaAST.isBoolean(ast)) {
|
|
29
|
+
return "boolean";
|
|
30
|
+
}
|
|
31
|
+
if (SchemaAST.isLiteral(ast)) {
|
|
32
|
+
return typeof ast.literal;
|
|
33
|
+
}
|
|
34
|
+
throw new Error(`Unsupported Fleet storage schema: ${ast._tag}`);
|
|
35
|
+
});
|
|
36
|
+
const kind = kinds[0];
|
|
37
|
+
if ((kind === "string" || kind === "number" || kind === "boolean") && kinds.every((value) => value === kind)) {
|
|
38
|
+
return kind;
|
|
39
|
+
}
|
|
40
|
+
throw new Error("Fleet storage requires a single typed column kind");
|
|
41
|
+
}
|
|
42
|
+
export function schemaShape(schema) {
|
|
43
|
+
const shape = fromAsts([SchemaAST.toEncoded(schema.ast)]);
|
|
44
|
+
if (typeof shape === "object" && "fields" in shape) {
|
|
45
|
+
const { workId: _workId, ...fields } = shape.fields;
|
|
46
|
+
return { fields };
|
|
47
|
+
}
|
|
48
|
+
throw new Error("Fleet records must be objects");
|
|
49
|
+
}
|
|
50
|
+
export function recordShape(schema = FleetRecord) {
|
|
51
|
+
const base = schemaShape(FleetRecord);
|
|
52
|
+
const extra = schemaShape(schema);
|
|
53
|
+
if (typeof base === "object" && "fields" in base && typeof extra === "object" && "fields" in extra) {
|
|
54
|
+
return { fields: { ...base.fields, ...extra.fields } };
|
|
55
|
+
}
|
|
56
|
+
throw new Error("Fleet records must be objects");
|
|
57
|
+
}
|
|
58
|
+
export function shapeColumns(shape, prefix = []) {
|
|
59
|
+
const name = prefix.join("__");
|
|
60
|
+
if (typeof shape === "string") {
|
|
61
|
+
return { [name]: shape };
|
|
62
|
+
}
|
|
63
|
+
if ("array" in shape) {
|
|
64
|
+
if (typeof shape.array !== "string") {
|
|
65
|
+
return { [name]: "boolean" };
|
|
66
|
+
}
|
|
67
|
+
const kinds = { boolean: "boolean[]", number: "number[]", string: "string[]" };
|
|
68
|
+
return { [name]: kinds[shape.array] };
|
|
69
|
+
}
|
|
70
|
+
return Object.assign(prefix.length === 0 ? {} : { [name]: "boolean" }, ...Object.entries(shape.fields).map(([key, field]) => shapeColumns(field, [...prefix, key])));
|
|
71
|
+
}
|
|
72
|
+
export function collections(shape, path = [], parents = []) {
|
|
73
|
+
if (typeof shape === "string") {
|
|
74
|
+
return [];
|
|
75
|
+
}
|
|
76
|
+
if ("array" in shape) {
|
|
77
|
+
if (typeof shape.array === "string") {
|
|
78
|
+
return [];
|
|
79
|
+
}
|
|
80
|
+
return [{ parents, path, shape: shape.array }, ...collections(shape.array, path, [...parents, path.join(".")])];
|
|
81
|
+
}
|
|
82
|
+
return Object.entries(shape.fields).flatMap(([key, field]) => collections(field, [...path, key], parents));
|
|
83
|
+
}
|
|
84
|
+
export const sqlTypes = {
|
|
85
|
+
boolean: "boolean",
|
|
86
|
+
"boolean[]": "boolean[]",
|
|
87
|
+
number: "double precision",
|
|
88
|
+
"number[]": "double precision[]",
|
|
89
|
+
string: "text",
|
|
90
|
+
"string[]": "text[]",
|
|
91
|
+
};
|
|
92
|
+
function scalarCodec(kind) {
|
|
93
|
+
if (kind.startsWith("number")) {
|
|
94
|
+
return { oid: PgTypes.OID.float8, schema: Schema.Number };
|
|
95
|
+
}
|
|
96
|
+
if (kind.startsWith("boolean")) {
|
|
97
|
+
return { oid: PgTypes.OID.bool, schema: Schema.Boolean };
|
|
98
|
+
}
|
|
99
|
+
return { oid: PgTypes.OID.text, schema: Schema.String };
|
|
100
|
+
}
|
|
101
|
+
export function columnSchema(kind) {
|
|
102
|
+
const { schema: Scalar, oid } = scalarCodec(kind);
|
|
103
|
+
if (!kind.endsWith("[]")) {
|
|
104
|
+
return Schema.NullOr(Scalar);
|
|
105
|
+
}
|
|
106
|
+
const ArrayValue = Schema.NullOr(Schema.Array(Scalar));
|
|
107
|
+
return Schema.Unknown.pipe(Schema.decodeTo(ArrayValue, {
|
|
108
|
+
decode: SchemaGetter.transformEffect((value) => Schema.decodeUnknownEffect(ArrayValue)(value).pipe(Effect.mapError((error) => error.issue))),
|
|
109
|
+
encode: SchemaGetter.transform((values) => (values === null ? null : Result.getOrThrow(PgTypes.array(values, oid)))),
|
|
110
|
+
}));
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=recordShape.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recordShape.js","sourceRoot":"","sources":["../../src/storage/recordShape.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACzE,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAMxC,SAAS,OAAO,CAAC,GAAkB;IAClC,OAAO,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AACpE,CAAC;AAED,SAAS,QAAQ,CAAC,IAA8B;IAC/C,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;IACjF,IAAI,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC;QACtC,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9G,OAAO;YACN,MAAM,EAAE,MAAM,CAAC,WAAW,CACzB,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;gBACnB,IAAI;gBACJ,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;aAC1H,CAAC,CACF;SACD,CAAC;IACH,CAAC;IACD,IAAI,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC;QACrC,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;IAC9D,CAAC;IACD,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;QAC/B,IAAI,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAC7B,OAAO,QAAQ,CAAC;QACjB,CAAC;QACD,IAAI,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAC7B,OAAO,QAAQ,CAAC;QACjB,CAAC;QACD,IAAI,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;YAC9B,OAAO,SAAS,CAAC;QAClB,CAAC;QACD,IAAI,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;YAC9B,OAAO,OAAO,GAAG,CAAC,OAAO,CAAC;QAC3B,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,qCAAqC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;IACH,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACtB,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,SAAS,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,EAAE,CAAC;QAC9G,OAAO,IAAI,CAAC;IACb,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;AACtE,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,MAAkB;IAC7C,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC1D,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,QAAQ,IAAI,KAAK,EAAE,CAAC;QACpD,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC;QACpD,OAAO,EAAE,MAAM,EAAE,CAAC;IACnB,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,MAAM,GAAe,WAAW;IAC3D,MAAM,IAAI,GAAG,WAAW,CAAC,WAAW,CAAC,CAAC;IACtC,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;IAClC,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,QAAQ,IAAI,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,QAAQ,IAAI,KAAK,EAAE,CAAC;QACpG,OAAO,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;IACxD,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,KAAY,EAAE,MAAM,GAAsB,EAAE;IACxE,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC/B,OAAO,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC;IAC1B,CAAC;IACD,IAAI,OAAO,IAAI,KAAK,EAAE,CAAC;QACtB,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YACrC,OAAO,EAAE,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,CAAC;QAC9B,CAAC;QACD,MAAM,KAAK,GAAG,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAW,CAAC;QACxF,OAAO,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;IACvC,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CACnB,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,EAChD,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC,GAAG,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAC5F,CAAC;AACH,CAAC;AAQD,MAAM,UAAU,WAAW,CAAC,KAAY,EAAE,IAAI,GAAsB,EAAE,EAAE,OAAO,GAAsB,EAAE;IACtG,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC/B,OAAO,EAAE,CAAC;IACX,CAAC;IACD,IAAI,OAAO,IAAI,KAAK,EAAE,CAAC;QACtB,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YACrC,OAAO,EAAE,CAAC;QACX,CAAC;QACD,OAAO,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,EAAE,GAAG,WAAW,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,GAAG,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACjH,CAAC;IACD,OAAO,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;AAC5G,CAAC;AAED,MAAM,CAAC,MAAM,QAAQ,GAAyC;IAC7D,OAAO,EAAE,SAAS;IAClB,WAAW,EAAE,WAAW;IACxB,MAAM,EAAE,kBAAkB;IAC1B,UAAU,EAAE,oBAAoB;IAChC,MAAM,EAAE,MAAM;IACd,UAAU,EAAE,QAAQ;CACpB,CAAC;AAEF,SAAS,WAAW,CAAC,IAAgB;IACpC,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC/B,OAAO,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;IAC3D,CAAC;IACD,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAChC,OAAO,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;IAC1D,CAAC;IACD,OAAO,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;AACzD,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAgB;IAC5C,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IAClD,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1B,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC9B,CAAC;IACD,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IACvD,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,CACzB,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE;QAC3B,MAAM,EAAE,YAAY,CAAC,eAAe,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;QAC5I,MAAM,EAAE,YAAY,CAAC,SAAS,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;KACpH,CAAC,CACF,CAAC;AACH,CAAC"}
|
|
@@ -1,7 +1,10 @@
|
|
|
1
|
-
import { Effect
|
|
2
|
-
import
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
1
|
+
import { Effect } from "effect";
|
|
2
|
+
import { SqlClient } from "effect/sql";
|
|
3
|
+
import { type Shape } from "#storage/recordShape.ts";
|
|
4
|
+
export declare const recordValues: (rows: readonly object[], shape: Shape, namespace: string) => Effect.Effect<{
|
|
5
|
+
workId: unknown;
|
|
6
|
+
}[], import("effect/sql/SqlError").SqlError, SqlClient.SqlClient>;
|
|
7
|
+
export declare function recordValue(row: object, shape: Shape, namespace: string): Effect.Effect<{
|
|
8
|
+
workId: unknown;
|
|
9
|
+
} | undefined, import("effect/sql/SqlError").SqlError, SqlClient.SqlClient>;
|
|
7
10
|
//# sourceMappingURL=recordValue.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recordValue.d.ts","sourceRoot":"","sources":["../../src/storage/recordValue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"recordValue.d.ts","sourceRoot":"","sources":["../../src/storage/recordValue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC,OAAO,EAAe,KAAK,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAIlE,eAAO,MAAM,YAAY;;iEA2CvB,CAAC;AAEH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM;;4EAEvE"}
|