@entifix/workflow 0.0.0-stage → 0.12.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 +24 -2
- package/dist/engine/make-flow-engine.d.ts +23 -0
- package/dist/engine/make-flow-engine.d.ts.map +1 -0
- package/dist/engine/make-flow-engine.js +97 -0
- package/dist/engine/make-flow-engine.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -0
- package/dist/interpreter/slip-workflow.d.ts +114 -0
- package/dist/interpreter/slip-workflow.d.ts.map +1 -0
- package/dist/interpreter/slip-workflow.js +316 -0
- package/dist/interpreter/slip-workflow.js.map +1 -0
- package/dist/postgres/index.d.ts +9 -0
- package/dist/postgres/index.d.ts.map +1 -0
- package/dist/postgres/index.js +9 -0
- package/dist/postgres/index.js.map +1 -0
- package/dist/postgres/single-runner.d.ts +9 -0
- package/dist/postgres/single-runner.d.ts.map +1 -0
- package/dist/postgres/single-runner.js +13 -0
- package/dist/postgres/single-runner.js.map +1 -0
- package/dist/postgres/sql-flow-status-store.d.ts +14 -0
- package/dist/postgres/sql-flow-status-store.d.ts.map +1 -0
- package/dist/postgres/sql-flow-status-store.js +68 -0
- package/dist/postgres/sql-flow-status-store.js.map +1 -0
- package/dist/socket-runner/index.d.ts +2 -0
- package/dist/socket-runner/index.d.ts.map +1 -0
- package/dist/socket-runner/index.js +3 -0
- package/dist/socket-runner/index.js.map +1 -0
- package/dist/socket-runner/socket-runner.d.ts +24 -0
- package/dist/socket-runner/socket-runner.d.ts.map +1 -0
- package/dist/socket-runner/socket-runner.js +20 -0
- package/dist/socket-runner/socket-runner.js.map +1 -0
- package/dist/status/flow-status-store.d.ts +59 -0
- package/dist/status/flow-status-store.d.ts.map +1 -0
- package/dist/status/flow-status-store.js +50 -0
- package/dist/status/flow-status-store.js.map +1 -0
- package/package.json +109 -3
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import type { StoreFailure } from '@entifix/core';
|
|
2
|
+
import type { FlowState } from '@entifix/transactions';
|
|
3
|
+
import { Context, Effect, Metric, Option } from 'effect';
|
|
4
|
+
/**
|
|
5
|
+
* What the engine knows about one flow beyond its journal: the state a reader
|
|
6
|
+
* is answered with, the step it is at, and the wait it is parked on.
|
|
7
|
+
*
|
|
8
|
+
* Kept beside the journal because the journal answers "did it finish" and
|
|
9
|
+
* nothing finer — a flow parked on a signal and one mid-call look the same to
|
|
10
|
+
* it, and a signal must be refused unless the flow is waiting for exactly it.
|
|
11
|
+
*/
|
|
12
|
+
export interface FlowRecord {
|
|
13
|
+
readonly flowId: string;
|
|
14
|
+
/** The workflow execution the flow runs as. */
|
|
15
|
+
readonly executionId: string;
|
|
16
|
+
readonly state: FlowState;
|
|
17
|
+
readonly step?: string;
|
|
18
|
+
/** The step whose signal the flow waits for, while `state` is `waiting`. */
|
|
19
|
+
readonly waitingFor?: string;
|
|
20
|
+
/** What that wait is correlated with — the order a delivery flow follows. */
|
|
21
|
+
readonly correlation?: string;
|
|
22
|
+
}
|
|
23
|
+
/** A change to a flow's record: its new state, and where it now stands. */
|
|
24
|
+
export interface FlowRecordPatch {
|
|
25
|
+
readonly state: FlowState;
|
|
26
|
+
readonly step?: string;
|
|
27
|
+
readonly waitingFor?: string;
|
|
28
|
+
readonly correlation?: string;
|
|
29
|
+
}
|
|
30
|
+
export interface FlowStatusStore {
|
|
31
|
+
/**
|
|
32
|
+
* Records a flow under its idempotency key, unless the key already names
|
|
33
|
+
* one — then that flow is answered and nothing is written, so a repeated
|
|
34
|
+
* start finds the flow the first one started.
|
|
35
|
+
*/
|
|
36
|
+
readonly register: (key: string, record: FlowRecord) => Effect.Effect<FlowRecord, StoreFailure>;
|
|
37
|
+
readonly find: (flowId: string) => Effect.Effect<Option.Option<FlowRecord>, StoreFailure>;
|
|
38
|
+
/** The flow parked on a wait correlated with `correlation`, if one is. */
|
|
39
|
+
readonly findByCorrelation: (correlation: string) => Effect.Effect<Option.Option<FlowRecord>, StoreFailure>;
|
|
40
|
+
readonly update: (flowId: string, patch: FlowRecordPatch) => Effect.Effect<void, StoreFailure>;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Every state the interpreter journals a flow into, by state and the slice it
|
|
44
|
+
* runs for. Counted inside the Activity that records it, so a replay — which
|
|
45
|
+
* reads the journal rather than executing again — never counts a state twice.
|
|
46
|
+
* `suspended` is the series to alert on: a flow past its commit point that
|
|
47
|
+
* cannot go on, which a person has to look at.
|
|
48
|
+
*/
|
|
49
|
+
export declare const flowStates: Metric.Counter<number>;
|
|
50
|
+
declare const FlowStatusStoreTag_base: Context.ServiceClass<FlowStatusStoreTag, "@entifix/workflow/FlowStatusStore", FlowStatusStore>;
|
|
51
|
+
export declare class FlowStatusStoreTag extends FlowStatusStoreTag_base {
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* A status store in memory, for a single process that keeps no flow past its
|
|
55
|
+
* life — specs, and the in-memory workflow engine.
|
|
56
|
+
*/
|
|
57
|
+
export declare const makeInMemoryFlowStatusStore: () => FlowStatusStore;
|
|
58
|
+
export {};
|
|
59
|
+
//# sourceMappingURL=flow-status-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flow-status-store.d.ts","sourceRoot":"","sources":["../../src/status/flow-status-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEzD;;;;;;;GAOG;AACH,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,+CAA+C;IAC/C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;IAC1B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,4EAA4E;IAC5E,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,6EAA6E;IAC7E,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,2EAA2E;AAC3E,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;IAC1B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,eAAe;IAC9B;;;;OAIG;IACH,QAAQ,CAAC,QAAQ,EAAE,CACjB,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,UAAU,KACf,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;IAC7C,QAAQ,CAAC,IAAI,EAAE,CACb,MAAM,EAAE,MAAM,KACX,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,YAAY,CAAC,CAAC;IAC5D,0EAA0E;IAC1E,QAAQ,CAAC,iBAAiB,EAAE,CAC1B,WAAW,EAAE,MAAM,KAChB,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,YAAY,CAAC,CAAC;IAC5D,QAAQ,CAAC,MAAM,EAAE,CACf,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,eAAe,KACnB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;CACxC;AAED;;;;;;GAMG;AACH,eAAO,MAAM,UAAU,wBAErB,CAAC;;AAEH,qBAAa,kBAAmB,SAAQ,uBAGA;CAAG;AAE3C;;;GAGG;AACH,eAAO,MAAM,2BAA2B,QAAO,eAwC9C,CAAC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { _ as _extends } from "@swc/helpers/_/_extends";
|
|
2
|
+
import { Context, Effect, Metric, Option } from 'effect';
|
|
3
|
+
/**
|
|
4
|
+
* Every state the interpreter journals a flow into, by state and the slice it
|
|
5
|
+
* runs for. Counted inside the Activity that records it, so a replay — which
|
|
6
|
+
* reads the journal rather than executing again — never counts a state twice.
|
|
7
|
+
* `suspended` is the series to alert on: a flow past its commit point that
|
|
8
|
+
* cannot go on, which a person has to look at.
|
|
9
|
+
*/ export const flowStates = Metric.counter('entifix_flow_states_total', {
|
|
10
|
+
description: 'Flow states the interpreter journaled, by state and source.'
|
|
11
|
+
});
|
|
12
|
+
export class FlowStatusStoreTag extends Context.Service()('@entifix/workflow/FlowStatusStore') {
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* A status store in memory, for a single process that keeps no flow past its
|
|
16
|
+
* life — specs, and the in-memory workflow engine.
|
|
17
|
+
*/ export const makeInMemoryFlowStatusStore = ()=>{
|
|
18
|
+
const byKey = new Map();
|
|
19
|
+
const records = new Map();
|
|
20
|
+
return {
|
|
21
|
+
register: (key, record)=>Effect.sync(()=>{
|
|
22
|
+
const known = byKey.get(key);
|
|
23
|
+
if (known !== undefined) return records.get(known);
|
|
24
|
+
byKey.set(key, record.flowId);
|
|
25
|
+
records.set(record.flowId, record);
|
|
26
|
+
return record;
|
|
27
|
+
}),
|
|
28
|
+
find: (flowId)=>Effect.sync(()=>Option.fromNullishOr(records.get(flowId))),
|
|
29
|
+
findByCorrelation: (correlation)=>Effect.sync(()=>Option.fromNullishOr([
|
|
30
|
+
...records.values()
|
|
31
|
+
].find((record)=>record.correlation === correlation))),
|
|
32
|
+
update: (flowId, patch)=>Effect.sync(()=>{
|
|
33
|
+
const current = records.get(flowId);
|
|
34
|
+
if (current === undefined) return;
|
|
35
|
+
records.set(flowId, _extends({
|
|
36
|
+
flowId: current.flowId,
|
|
37
|
+
executionId: current.executionId,
|
|
38
|
+
state: patch.state
|
|
39
|
+
}, patch.step === undefined ? {} : {
|
|
40
|
+
step: patch.step
|
|
41
|
+
}, patch.waitingFor === undefined ? {} : {
|
|
42
|
+
waitingFor: patch.waitingFor
|
|
43
|
+
}, patch.correlation === undefined ? {} : {
|
|
44
|
+
correlation: patch.correlation
|
|
45
|
+
}));
|
|
46
|
+
})
|
|
47
|
+
};
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
//# sourceMappingURL=flow-status-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/status/flow-status-store.ts"],"sourcesContent":["import type { StoreFailure } from '@entifix/core';\nimport type { FlowState } from '@entifix/transactions';\nimport { Context, Effect, Metric, Option } from 'effect';\n\n/**\n * What the engine knows about one flow beyond its journal: the state a reader\n * is answered with, the step it is at, and the wait it is parked on.\n *\n * Kept beside the journal because the journal answers \"did it finish\" and\n * nothing finer — a flow parked on a signal and one mid-call look the same to\n * it, and a signal must be refused unless the flow is waiting for exactly it.\n */\nexport interface FlowRecord {\n readonly flowId: string;\n /** The workflow execution the flow runs as. */\n readonly executionId: string;\n readonly state: FlowState;\n readonly step?: string;\n /** The step whose signal the flow waits for, while `state` is `waiting`. */\n readonly waitingFor?: string;\n /** What that wait is correlated with — the order a delivery flow follows. */\n readonly correlation?: string;\n}\n\n/** A change to a flow's record: its new state, and where it now stands. */\nexport interface FlowRecordPatch {\n readonly state: FlowState;\n readonly step?: string;\n readonly waitingFor?: string;\n readonly correlation?: string;\n}\n\nexport interface FlowStatusStore {\n /**\n * Records a flow under its idempotency key, unless the key already names\n * one — then that flow is answered and nothing is written, so a repeated\n * start finds the flow the first one started.\n */\n readonly register: (\n key: string,\n record: FlowRecord,\n ) => Effect.Effect<FlowRecord, StoreFailure>;\n readonly find: (\n flowId: string,\n ) => Effect.Effect<Option.Option<FlowRecord>, StoreFailure>;\n /** The flow parked on a wait correlated with `correlation`, if one is. */\n readonly findByCorrelation: (\n correlation: string,\n ) => Effect.Effect<Option.Option<FlowRecord>, StoreFailure>;\n readonly update: (\n flowId: string,\n patch: FlowRecordPatch,\n ) => Effect.Effect<void, StoreFailure>;\n}\n\n/**\n * Every state the interpreter journals a flow into, by state and the slice it\n * runs for. Counted inside the Activity that records it, so a replay — which\n * reads the journal rather than executing again — never counts a state twice.\n * `suspended` is the series to alert on: a flow past its commit point that\n * cannot go on, which a person has to look at.\n */\nexport const flowStates = Metric.counter('entifix_flow_states_total', {\n description: 'Flow states the interpreter journaled, by state and source.',\n});\n\nexport class FlowStatusStoreTag extends Context.Service<\n FlowStatusStoreTag,\n FlowStatusStore\n>()('@entifix/workflow/FlowStatusStore') {}\n\n/**\n * A status store in memory, for a single process that keeps no flow past its\n * life — specs, and the in-memory workflow engine.\n */\nexport const makeInMemoryFlowStatusStore = (): FlowStatusStore => {\n const byKey = new Map<string, string>();\n const records = new Map<string, FlowRecord>();\n return {\n register: (key, record) =>\n Effect.sync(() => {\n const known = byKey.get(key);\n if (known !== undefined) return records.get(known) as FlowRecord;\n byKey.set(key, record.flowId);\n records.set(record.flowId, record);\n return record;\n }),\n find: flowId =>\n Effect.sync(() => Option.fromNullishOr(records.get(flowId))),\n findByCorrelation: correlation =>\n Effect.sync(() =>\n Option.fromNullishOr(\n [...records.values()].find(\n record => record.correlation === correlation,\n ),\n ),\n ),\n update: (flowId, patch) =>\n Effect.sync(() => {\n const current = records.get(flowId);\n if (current === undefined) return;\n records.set(flowId, {\n flowId: current.flowId,\n executionId: current.executionId,\n state: patch.state,\n ...(patch.step === undefined ? {} : { step: patch.step }),\n ...(patch.waitingFor === undefined\n ? {}\n : { waitingFor: patch.waitingFor }),\n ...(patch.correlation === undefined\n ? {}\n : { correlation: patch.correlation }),\n });\n }),\n };\n};\n"],"names":["Context","Effect","Metric","Option","flowStates","counter","description","FlowStatusStoreTag","Service","makeInMemoryFlowStatusStore","byKey","Map","records","register","key","record","sync","known","get","undefined","set","flowId","find","fromNullishOr","findByCorrelation","correlation","values","update","patch","current","executionId","state","step","waitingFor"],"mappings":";AAEA,SAASA,OAAO,EAAEC,MAAM,EAAEC,MAAM,EAAEC,MAAM,QAAQ,SAAS;AAqDzD;;;;;;CAMC,GACD,OAAO,MAAMC,aAAaF,OAAOG,OAAO,CAAC,6BAA6B;IACpEC,aAAa;AACf,GAAG;AAEH,OAAO,MAAMC,2BAA2BP,QAAQQ,OAAO,GAGnD;AAAsC;AAE1C;;;CAGC,GACD,OAAO,MAAMC,8BAA8B;IACzC,MAAMC,QAAQ,IAAIC;IAClB,MAAMC,UAAU,IAAID;IACpB,OAAO;QACLE,UAAU,CAACC,KAAKC,SACdd,OAAOe,IAAI,CAAC;gBACV,MAAMC,QAAQP,MAAMQ,GAAG,CAACJ;gBACxB,IAAIG,UAAUE,WAAW,OAAOP,QAAQM,GAAG,CAACD;gBAC5CP,MAAMU,GAAG,CAACN,KAAKC,OAAOM,MAAM;gBAC5BT,QAAQQ,GAAG,CAACL,OAAOM,MAAM,EAAEN;gBAC3B,OAAOA;YACT;QACFO,MAAMD,CAAAA,SACJpB,OAAOe,IAAI,CAAC,IAAMb,OAAOoB,aAAa,CAACX,QAAQM,GAAG,CAACG;QACrDG,mBAAmBC,CAAAA,cACjBxB,OAAOe,IAAI,CAAC,IACVb,OAAOoB,aAAa,CAClB;uBAAIX,QAAQc,MAAM;iBAAG,CAACJ,IAAI,CACxBP,CAAAA,SAAUA,OAAOU,WAAW,KAAKA;QAIzCE,QAAQ,CAACN,QAAQO,QACf3B,OAAOe,IAAI,CAAC;gBACV,MAAMa,UAAUjB,QAAQM,GAAG,CAACG;gBAC5B,IAAIQ,YAAYV,WAAW;gBAC3BP,QAAQQ,GAAG,CAACC,QAAQ;oBAClBA,QAAQQ,QAAQR,MAAM;oBACtBS,aAAaD,QAAQC,WAAW;oBAChCC,OAAOH,MAAMG,KAAK;mBACdH,MAAMI,IAAI,KAAKb,YAAY,CAAC,IAAI;oBAAEa,MAAMJ,MAAMI,IAAI;gBAAC,GACnDJ,MAAMK,UAAU,KAAKd,YACrB,CAAC,IACD;oBAAEc,YAAYL,MAAMK,UAAU;gBAAC,GAC/BL,MAAMH,WAAW,KAAKN,YACtB,CAAC,IACD;oBAAEM,aAAaG,MAAMH,WAAW;gBAAC;YAEzC;IACJ;AACF,EAAE"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,112 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@entifix/workflow",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"
|
|
5
|
-
"
|
|
3
|
+
"version": "0.12.1",
|
|
4
|
+
"description": "Durable flows: the slip interpreter on Effect Workflow, behind the flow engine port, with Postgres storage and socket runners.",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"repository": {
|
|
7
|
+
"type": "git",
|
|
8
|
+
"url": "git+https://github.com/r10c-technologies/entifix.git",
|
|
9
|
+
"directory": "packages/ts/workflow"
|
|
10
|
+
},
|
|
11
|
+
"publishConfig": {
|
|
12
|
+
"access": "public"
|
|
13
|
+
},
|
|
14
|
+
"type": "module",
|
|
15
|
+
"main": "./dist/index.js",
|
|
16
|
+
"module": "./dist/index.js",
|
|
17
|
+
"types": "./dist/index.d.ts",
|
|
18
|
+
"exports": {
|
|
19
|
+
"./package.json": "./package.json",
|
|
20
|
+
".": {
|
|
21
|
+
"types": "./dist/index.d.ts",
|
|
22
|
+
"import": "./dist/index.js",
|
|
23
|
+
"default": "./dist/index.js"
|
|
24
|
+
},
|
|
25
|
+
"./postgres": {
|
|
26
|
+
"types": "./dist/postgres/index.d.ts",
|
|
27
|
+
"import": "./dist/postgres/index.js",
|
|
28
|
+
"default": "./dist/postgres/index.js"
|
|
29
|
+
},
|
|
30
|
+
"./socket-runner": {
|
|
31
|
+
"types": "./dist/socket-runner/index.d.ts",
|
|
32
|
+
"import": "./dist/socket-runner/index.js",
|
|
33
|
+
"default": "./dist/socket-runner/index.js"
|
|
34
|
+
}
|
|
35
|
+
},
|
|
36
|
+
"files": [
|
|
37
|
+
"dist",
|
|
38
|
+
"!**/*.tsbuildinfo",
|
|
39
|
+
"LICENSE"
|
|
40
|
+
],
|
|
41
|
+
"nx": {
|
|
42
|
+
"tags": [
|
|
43
|
+
"tier:2"
|
|
44
|
+
],
|
|
45
|
+
"sourceRoot": "packages/ts/workflow/src",
|
|
46
|
+
"targets": {
|
|
47
|
+
"build": {
|
|
48
|
+
"executor": "@nx/js:swc",
|
|
49
|
+
"outputs": [
|
|
50
|
+
"{options.outputPath}"
|
|
51
|
+
],
|
|
52
|
+
"options": {
|
|
53
|
+
"outputPath": "packages/ts/workflow/dist",
|
|
54
|
+
"main": "packages/ts/workflow/src/index.ts",
|
|
55
|
+
"tsConfig": "packages/ts/workflow/tsconfig.lib.json",
|
|
56
|
+
"skipTypeCheck": true,
|
|
57
|
+
"stripLeadingPaths": true
|
|
58
|
+
}
|
|
59
|
+
},
|
|
60
|
+
"test-integration": {
|
|
61
|
+
"executor": "nx:run-commands",
|
|
62
|
+
"options": {
|
|
63
|
+
"command": "vitest run --config vitest.integration.mts",
|
|
64
|
+
"cwd": "packages/ts/workflow"
|
|
65
|
+
}
|
|
66
|
+
},
|
|
67
|
+
"test-engine": {
|
|
68
|
+
"executor": "nx:run-commands",
|
|
69
|
+
"dependsOn": [
|
|
70
|
+
"build",
|
|
71
|
+
"^build"
|
|
72
|
+
],
|
|
73
|
+
"options": {
|
|
74
|
+
"command": "vitest run --config vitest.engine.mts",
|
|
75
|
+
"cwd": "packages/ts/workflow"
|
|
76
|
+
}
|
|
77
|
+
},
|
|
78
|
+
"record-journals": {
|
|
79
|
+
"executor": "nx:run-commands",
|
|
80
|
+
"options": {
|
|
81
|
+
"command": "vitest run src/interpreter/journal.spec.ts",
|
|
82
|
+
"cwd": "packages/ts/workflow",
|
|
83
|
+
"env": {
|
|
84
|
+
"ENTIFIX_RECORD_JOURNALS": "1"
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
},
|
|
90
|
+
"dependencies": {
|
|
91
|
+
"@swc/helpers": "0.5.23",
|
|
92
|
+
"@entifix/business": "0.12.1",
|
|
93
|
+
"@entifix/core": "0.12.1",
|
|
94
|
+
"@entifix/sql": "0.12.1",
|
|
95
|
+
"@entifix/transactions": "0.12.1"
|
|
96
|
+
},
|
|
97
|
+
"devDependencies": {
|
|
98
|
+
"@effect/platform-node": "4.0.6",
|
|
99
|
+
"@effect/sql-pg": "4.0.6",
|
|
100
|
+
"effect": "4.0.6",
|
|
101
|
+
"@entifix/testing-unit": "0.12.1"
|
|
102
|
+
},
|
|
103
|
+
"peerDependencies": {
|
|
104
|
+
"@effect/platform-node": "^4.0.6",
|
|
105
|
+
"effect": "^4.0.6"
|
|
106
|
+
},
|
|
107
|
+
"peerDependenciesMeta": {
|
|
108
|
+
"@effect/platform-node": {
|
|
109
|
+
"optional": true
|
|
110
|
+
}
|
|
111
|
+
}
|
|
6
112
|
}
|