@decaf-ts/for-fabric 0.1.1 → 0.1.3
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/dist/for-fabric.cjs +1 -1
- package/dist/for-fabric.cjs.map +1 -1
- package/dist/for-fabric.js +1 -1
- package/dist/for-fabric.js.map +1 -1
- package/lib/client/FabricClientAdapter.cjs +94 -81
- package/lib/client/FabricClientAdapter.d.ts +24 -33
- package/lib/client/FabricClientAdapter.js.map +1 -1
- package/lib/client/FabricClientDispatch.cjs +14 -5
- package/lib/client/FabricClientDispatch.d.ts +7 -5
- package/lib/client/FabricClientDispatch.js.map +1 -1
- package/lib/client/FabricClientRepository.cjs +4 -137
- package/lib/client/FabricClientRepository.d.ts +6 -78
- package/lib/client/FabricClientRepository.js.map +1 -1
- package/lib/client/erc20/FabricERC20ClientRepository.cjs +17 -17
- package/lib/client/erc20/FabricERC20ClientRepository.d.ts +5 -5
- package/lib/client/erc20/FabricERC20ClientRepository.js.map +1 -1
- package/lib/client/logging.cjs +1 -1
- package/lib/client/logging.js.map +1 -1
- package/lib/client/services/FabricEnrollmentService.cjs +3 -3
- package/lib/client/services/FabricEnrollmentService.d.ts +2 -2
- package/lib/client/services/FabricEnrollmentService.js.map +1 -1
- package/lib/contract/Product.cjs +2 -2
- package/lib/contract/Product.d.ts +1 -1
- package/lib/contracts/ContractAdapter.cjs +204 -115
- package/lib/contracts/ContractAdapter.d.ts +26 -34
- package/lib/contracts/ContractAdapter.js.map +1 -1
- package/lib/contracts/ContractContext.cjs +1 -9
- package/lib/contracts/ContractContext.d.ts +0 -6
- package/lib/contracts/ContractContext.js.map +1 -1
- package/lib/contracts/ContractPrivateDataAdapter.cjs +429 -288
- package/lib/contracts/ContractPrivateDataAdapter.d.ts +0 -76
- package/lib/contracts/ContractPrivateDataAdapter.js.map +1 -1
- package/lib/contracts/FabricConstruction.cjs +3 -3
- package/lib/contracts/FabricConstruction.d.ts +9 -8
- package/lib/contracts/FabricConstruction.js.map +1 -1
- package/lib/contracts/FabricContractRepository.cjs +7 -202
- package/lib/contracts/FabricContractRepository.d.ts +5 -68
- package/lib/contracts/FabricContractRepository.js.map +1 -1
- package/lib/contracts/FabricContractRepositoryObservableHandler.cjs +4 -1
- package/lib/contracts/FabricContractRepositoryObservableHandler.d.ts +4 -4
- package/lib/contracts/FabricContractRepositoryObservableHandler.js.map +1 -1
- package/lib/contracts/FabricContractSequence.cjs +39 -60
- package/lib/contracts/FabricContractSequence.d.ts +29 -41
- package/lib/contracts/FabricContractSequence.js.map +1 -1
- package/lib/contracts/FabricContractStatement.cjs +6 -6
- package/lib/contracts/FabricContractStatement.d.ts +4 -6
- package/lib/contracts/FabricContractStatement.js.map +1 -1
- package/lib/contracts/crud/crud-contract.cjs +74 -44
- package/lib/contracts/crud/crud-contract.d.ts +7 -11
- package/lib/contracts/crud/crud-contract.js.map +1 -1
- package/lib/contracts/crud/serialized-crud-contract.cjs +12 -21
- package/lib/contracts/crud/serialized-crud-contract.d.ts +3 -11
- package/lib/contracts/crud/serialized-crud-contract.js.map +1 -1
- package/lib/contracts/erc20/erc20contract.cjs +73 -67
- package/lib/contracts/erc20/erc20contract.d.ts +13 -12
- package/lib/contracts/erc20/erc20contract.js.map +1 -1
- package/lib/contracts/logging.cjs +9 -13
- package/lib/contracts/logging.d.ts +1 -2
- package/lib/contracts/logging.js.map +1 -1
- package/lib/contracts/private-data.cjs +202 -118
- package/lib/contracts/private-data.d.ts +0 -16
- package/lib/contracts/private-data.js.map +1 -1
- package/lib/contracts/types.d.ts +1 -1
- package/lib/esm/client/FabricClientAdapter.d.ts +24 -33
- package/lib/esm/client/FabricClientAdapter.js +90 -78
- package/lib/esm/client/FabricClientAdapter.js.map +1 -1
- package/lib/esm/client/FabricClientDispatch.d.ts +7 -5
- package/lib/esm/client/FabricClientDispatch.js +17 -8
- package/lib/esm/client/FabricClientDispatch.js.map +1 -1
- package/lib/esm/client/FabricClientRepository.d.ts +6 -78
- package/lib/esm/client/FabricClientRepository.js +4 -137
- package/lib/esm/client/FabricClientRepository.js.map +1 -1
- package/lib/esm/client/erc20/FabricERC20ClientRepository.d.ts +5 -5
- package/lib/esm/client/erc20/FabricERC20ClientRepository.js +17 -17
- package/lib/esm/client/erc20/FabricERC20ClientRepository.js.map +1 -1
- package/lib/esm/client/logging.js +1 -1
- package/lib/esm/client/logging.js.map +1 -1
- package/lib/esm/client/services/FabricEnrollmentService.d.ts +2 -2
- package/lib/esm/client/services/FabricEnrollmentService.js +3 -3
- package/lib/esm/client/services/FabricEnrollmentService.js.map +1 -1
- package/lib/esm/contract/Product.d.ts +1 -1
- package/lib/esm/contract/Product.js +2 -2
- package/lib/esm/contracts/ContractAdapter.d.ts +26 -34
- package/lib/esm/contracts/ContractAdapter.js +205 -116
- package/lib/esm/contracts/ContractAdapter.js.map +1 -1
- package/lib/esm/contracts/ContractContext.d.ts +0 -6
- package/lib/esm/contracts/ContractContext.js +1 -9
- package/lib/esm/contracts/ContractContext.js.map +1 -1
- package/lib/esm/contracts/ContractPrivateDataAdapter.d.ts +0 -76
- package/lib/esm/contracts/ContractPrivateDataAdapter.js +430 -285
- package/lib/esm/contracts/ContractPrivateDataAdapter.js.map +1 -1
- package/lib/esm/contracts/FabricConstruction.d.ts +9 -8
- package/lib/esm/contracts/FabricConstruction.js +3 -3
- package/lib/esm/contracts/FabricConstruction.js.map +1 -1
- package/lib/esm/contracts/FabricContractRepository.d.ts +5 -68
- package/lib/esm/contracts/FabricContractRepository.js +7 -202
- package/lib/esm/contracts/FabricContractRepository.js.map +1 -1
- package/lib/esm/contracts/FabricContractRepositoryObservableHandler.d.ts +4 -4
- package/lib/esm/contracts/FabricContractRepositoryObservableHandler.js +5 -2
- package/lib/esm/contracts/FabricContractRepositoryObservableHandler.js.map +1 -1
- package/lib/esm/contracts/FabricContractSequence.d.ts +29 -41
- package/lib/esm/contracts/FabricContractSequence.js +40 -61
- package/lib/esm/contracts/FabricContractSequence.js.map +1 -1
- package/lib/esm/contracts/FabricContractStatement.d.ts +4 -6
- package/lib/esm/contracts/FabricContractStatement.js +7 -7
- package/lib/esm/contracts/FabricContractStatement.js.map +1 -1
- package/lib/esm/contracts/crud/crud-contract.d.ts +7 -11
- package/lib/esm/contracts/crud/crud-contract.js +75 -45
- package/lib/esm/contracts/crud/crud-contract.js.map +1 -1
- package/lib/esm/contracts/crud/serialized-crud-contract.d.ts +3 -11
- package/lib/esm/contracts/crud/serialized-crud-contract.js +12 -21
- package/lib/esm/contracts/crud/serialized-crud-contract.js.map +1 -1
- package/lib/esm/contracts/erc20/erc20contract.d.ts +13 -12
- package/lib/esm/contracts/erc20/erc20contract.js +73 -67
- package/lib/esm/contracts/erc20/erc20contract.js.map +1 -1
- package/lib/esm/contracts/logging.d.ts +1 -2
- package/lib/esm/contracts/logging.js +9 -13
- package/lib/esm/contracts/logging.js.map +1 -1
- package/lib/esm/contracts/private-data.d.ts +0 -16
- package/lib/esm/contracts/private-data.js +203 -111
- package/lib/esm/contracts/private-data.js.map +1 -1
- package/lib/esm/contracts/types.d.ts +1 -1
- package/lib/esm/shared/decorators.d.ts +14 -4
- package/lib/esm/shared/decorators.js +142 -42
- package/lib/esm/shared/decorators.js.map +1 -1
- package/lib/esm/shared/errors.js +2 -2
- package/lib/esm/shared/errors.js.map +1 -1
- package/lib/esm/shared/events.d.ts +1 -5
- package/lib/esm/shared/events.js.map +1 -1
- package/lib/esm/shared/model/Sequence.d.ts +14 -0
- package/lib/esm/shared/model/Sequence.js +33 -0
- package/lib/esm/shared/model/Sequence.js.map +1 -0
- package/lib/esm/shared/model/index.d.ts +2 -0
- package/lib/esm/shared/model/index.js +2 -0
- package/lib/esm/shared/model/index.js.map +1 -1
- package/lib/esm/version.d.ts +1 -1
- package/lib/esm/version.js +1 -1
- package/lib/shared/decorators.cjs +148 -41
- package/lib/shared/decorators.d.ts +14 -4
- package/lib/shared/decorators.js.map +1 -1
- package/lib/shared/errors.cjs +2 -2
- package/lib/shared/errors.js.map +1 -1
- package/lib/shared/events.d.ts +1 -5
- package/lib/shared/events.js.map +1 -1
- package/lib/shared/model/Sequence.cjs +36 -0
- package/lib/shared/model/Sequence.d.ts +14 -0
- package/lib/shared/model/Sequence.js.map +1 -0
- package/lib/shared/model/index.cjs +2 -0
- package/lib/shared/model/index.d.ts +2 -0
- package/lib/shared/model/index.js.map +1 -1
- package/lib/version.cjs +1 -1
- package/lib/version.d.ts +1 -1
- package/package.json +2 -3
- package/lib/client/services/LoggedService.cjs +0 -47
- package/lib/client/services/LoggedService.d.ts +0 -42
- package/lib/client/services/LoggedService.js.map +0 -1
- package/lib/esm/client/services/LoggedService.d.ts +0 -42
- package/lib/esm/client/services/LoggedService.js +0 -43
- package/lib/esm/client/services/LoggedService.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FabricContractRepository.js","sourceRoot":"","sources":["../../src/contracts/FabricContractRepository.ts"],"names":[],"mappings":";;;AAAA,yCAKwB;AAGxB
|
|
1
|
+
{"version":3,"file":"FabricContractRepository.js","sourceRoot":"","sources":["../../src/contracts/FabricContractRepository.ts"],"names":[],"mappings":";;;AAAA,yCAKwB;AAGxB,+GAAwG;AAIxG,+CAA4C;AAI5C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+DG;AACH,MAAa,wBAA0C,SAAQ,iBAG9D;IACC,YACE,OAA+B,EAC/B,KAAsB,EACZ,aAAkE;QAE5E,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAFZ,kBAAa,GAAb,aAAa,CAAqD;IAG9E,CAAC;IAED;;;;;OAKG;IACI,MAAM,CAAC,GAAoC;QAChD,IAAK,GAA6B,CAAC,MAAM;YACvC,OAAQ,GAA6B,CAAC,MAAwB,CAAC;QACjE,OAAO,iBAAO,CAAC,GAAG,CAChB,IAAW,EACX;YACE,aAAa,EAAE,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE;SAClC,EACD,GAAG,CACc,CAAC;IACtB,CAAC;IAED;;;;OAIG;IACM,eAAe;QACtB,OAAO,IAAI,qFAAyC,EAAE,CAAC;IACzD,CAAC;IAED;;;;;;;;;OASG;IACM,KAAK,CAAC,eAAe,CAC5B,KAA8B,EAC9B,KAAqD,EACrD,EAAY,EACZ,GAAG,IAA+C;QAElD,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACjE,OAAO,MAAM,KAAK,CAAC,eAAe,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC;IAClE,CAAC;CACF;AA1DD,4DA0DC"}
|
|
@@ -69,8 +69,11 @@ class FabricContractRepositoryObservableHandler extends core_1.ObserverHandler {
|
|
|
69
69
|
*
|
|
70
70
|
* @return {Promise<void>} Promise that resolves when the event is emitted
|
|
71
71
|
*/
|
|
72
|
-
async updateObservers(
|
|
72
|
+
async updateObservers(clazz, event, id, ...args) {
|
|
73
|
+
const { log, ctx } = core_1.Adapter.logCtx(args, this.updateObservers);
|
|
73
74
|
const { stub } = ctx;
|
|
75
|
+
const [owner, payload] = args;
|
|
76
|
+
const table = typeof clazz === "string" ? clazz : clazz.name;
|
|
74
77
|
if (this.supportedEvents.indexOf(event) !== -1) {
|
|
75
78
|
log.debug(`Emitting ${event} event`);
|
|
76
79
|
const eventName = (0, events_1.generateFabricEventName)(table, event, owner);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { BulkCrudOperationKeys, OperationKeys } from "@decaf-ts/db-decorators";
|
|
2
|
-
import { EventIds, ObserverHandler } from "@decaf-ts/core";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
2
|
+
import { ContextualArgs, EventIds, ObserverHandler } from "@decaf-ts/core";
|
|
3
|
+
import { FabricContractContext } from "./ContractContext";
|
|
4
|
+
import { Constructor } from "@decaf-ts/decoration";
|
|
5
5
|
/**
|
|
6
6
|
* @description Observer handler for Fabric chaincode events
|
|
7
7
|
* @summary Emits events on the Fabric ledger when repository operations occur
|
|
@@ -58,5 +58,5 @@ export declare class FabricContractRepositoryObservableHandler extends ObserverH
|
|
|
58
58
|
*
|
|
59
59
|
* @return {Promise<void>} Promise that resolves when the event is emitted
|
|
60
60
|
*/
|
|
61
|
-
updateObservers(
|
|
61
|
+
updateObservers(clazz: string | Constructor<any>, event: OperationKeys | BulkCrudOperationKeys | string, id: EventIds, ...args: ContextualArgs<FabricContractContext>): Promise<void>;
|
|
62
62
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FabricContractRepositoryObservableHandler.js","sourceRoot":"","sources":["../../src/contracts/FabricContractRepositoryObservableHandler.ts"],"names":[],"mappings":";;;AAAA,2DAA+E;AAC/E,
|
|
1
|
+
{"version":3,"file":"FabricContractRepositoryObservableHandler.js","sourceRoot":"","sources":["../../src/contracts/FabricContractRepositoryObservableHandler.ts"],"names":[],"mappings":";;;AAAA,2DAA+E;AAC/E,yCAKwB;AACxB,mDAA2D;AAI3D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,MAAa,yCAA0C,SAAQ,sBAAe;IAC5E;;;;OAIG;IACH,YACU,kBAIF;QACJ,6BAAa,CAAC,MAAM;QACpB,6BAAa,CAAC,MAAM;QACpB,6BAAa,CAAC,MAAM;QACpB,qCAAqB,CAAC,UAAU;QAChC,qCAAqB,CAAC,UAAU;QAChC,qCAAqB,CAAC,UAAU;KACjC;QAED,KAAK,EAAE,CAAC;QAbA,oBAAe,GAAf,eAAe,CAWtB;IAGH,CAAC;IAED;;;;;;;;;;;;OAYG;IACM,KAAK,CAAC,eAAe,CAC5B,KAAgC,EAChC,KAAqD,EACrD,EAAY,EACZ,GAAG,IAA2C;QAE9C,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,cAAO,CAAC,MAAM,CACjC,IAAI,EACJ,IAAI,CAAC,eAAe,CACrB,CAAC;QACF,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC;QACrB,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;QAC9B,MAAM,KAAK,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;QAC7D,IAAI,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;YAC/C,GAAG,CAAC,KAAK,CAAC,YAAY,KAAK,QAAQ,CAAC,CAAC;YACrC,MAAM,SAAS,GAAG,IAAA,gCAAuB,EAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;YAC/D,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;QACpE,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;CACF;AAzDD,8FAyDC"}
|
|
@@ -4,46 +4,28 @@ exports.FabricContractSequence = void 0;
|
|
|
4
4
|
const db_decorators_1 = require("@decaf-ts/db-decorators");
|
|
5
5
|
const core_1 = require("@decaf-ts/core");
|
|
6
6
|
const core_2 = require("@decaf-ts/core");
|
|
7
|
-
const
|
|
8
|
-
const PrivateSequence_1 = require("./PrivateSequence.cjs");
|
|
9
|
-
const decorators_1 = require("./../shared/decorators.cjs");
|
|
7
|
+
const Sequence_1 = require("./../shared/model/Sequence.cjs");
|
|
10
8
|
/**
|
|
11
|
-
* @
|
|
12
|
-
* @
|
|
13
|
-
*
|
|
14
|
-
* @
|
|
15
|
-
*
|
|
16
|
-
* @
|
|
17
|
-
*
|
|
18
|
-
* const next = await seq.next(ctx); // 1
|
|
19
|
-
* const [a,b,c] = await seq.range(3, ctx); // [2,3,4]
|
|
20
|
-
* @mermaid
|
|
21
|
-
* sequenceDiagram
|
|
22
|
-
* participant App
|
|
23
|
-
* participant Sequence
|
|
24
|
-
* participant Repo
|
|
25
|
-
* App->>Sequence: next(ctx)
|
|
26
|
-
* Sequence->>Repo: read(name, ctx)
|
|
27
|
-
* Repo-->>Sequence: current
|
|
28
|
-
* Sequence->>Repo: update(current+inc)
|
|
29
|
-
* Repo-->>Sequence: saved
|
|
30
|
-
* Sequence-->>App: next value
|
|
9
|
+
* @summary Abstract implementation of a Sequence
|
|
10
|
+
* @description provides the basic functionality for {@link Sequence}s
|
|
11
|
+
*
|
|
12
|
+
* @param {SequenceOptions} options
|
|
13
|
+
*
|
|
14
|
+
* @class CouchDBSequence
|
|
15
|
+
* @implements Sequence
|
|
31
16
|
*/
|
|
32
17
|
class FabricContractSequence extends core_2.Sequence {
|
|
33
|
-
constructor(options, adapter
|
|
34
|
-
super(options);
|
|
35
|
-
|
|
36
|
-
(0, decorators_1.privateData)(collection)(PrivateSequence_1.CustomizableSequence);
|
|
37
|
-
}
|
|
38
|
-
this.repo = core_1.Repository.forModel(PrivateSequence_1.CustomizableSequence, adapter.alias);
|
|
18
|
+
constructor(options, adapter) {
|
|
19
|
+
super(options, adapter);
|
|
20
|
+
this.repo = core_1.Repository.forModel(Sequence_1.SequenceModel, adapter.alias);
|
|
39
21
|
}
|
|
40
22
|
/**
|
|
41
23
|
* @summary Retrieves the current value for the sequence
|
|
42
24
|
* @protected
|
|
43
25
|
*/
|
|
44
|
-
async current(
|
|
45
|
-
|
|
46
|
-
|
|
26
|
+
async current(...args) {
|
|
27
|
+
const contextArgs = await db_decorators_1.Context.args(db_decorators_1.OperationKeys.READ, Sequence_1.SequenceModel, args, this.adapter);
|
|
28
|
+
const ctx = contextArgs.context;
|
|
47
29
|
const { name, startWith } = this.options;
|
|
48
30
|
try {
|
|
49
31
|
const sequence = await this.repo.read(name, ctx);
|
|
@@ -63,15 +45,6 @@ class FabricContractSequence extends core_2.Sequence {
|
|
|
63
45
|
throw new db_decorators_1.InternalError(`Failed to retrieve current value for sequence ${name}: ${e}`);
|
|
64
46
|
}
|
|
65
47
|
}
|
|
66
|
-
/**
|
|
67
|
-
* @summary Parses the {@link Sequence} value
|
|
68
|
-
*
|
|
69
|
-
* @protected
|
|
70
|
-
* @param value
|
|
71
|
-
*/
|
|
72
|
-
parse(value) {
|
|
73
|
-
return core_2.Sequence.parseValue(this.options.type, value);
|
|
74
|
-
}
|
|
75
48
|
/**
|
|
76
49
|
* @summary increments the sequence
|
|
77
50
|
* @description Sequence specific implementation
|
|
@@ -81,8 +54,6 @@ class FabricContractSequence extends core_2.Sequence {
|
|
|
81
54
|
* @protected
|
|
82
55
|
*/
|
|
83
56
|
async increment(current, count, ctx) {
|
|
84
|
-
if (!ctx)
|
|
85
|
-
throw new errors_1.MissingContextError("Context is required");
|
|
86
57
|
const { type, incrementBy, name } = this.options;
|
|
87
58
|
let next;
|
|
88
59
|
const toIncrementBy = count || incrementBy;
|
|
@@ -100,38 +71,46 @@ class FabricContractSequence extends core_2.Sequence {
|
|
|
100
71
|
}
|
|
101
72
|
let seq;
|
|
102
73
|
try {
|
|
103
|
-
seq = await this.repo.update(new
|
|
74
|
+
seq = await this.repo.update(new Sequence_1.SequenceModel({ id: name, current: next }), ctx);
|
|
104
75
|
}
|
|
105
76
|
catch (e) {
|
|
106
77
|
if (!(e instanceof db_decorators_1.NotFoundError))
|
|
107
78
|
throw e;
|
|
108
|
-
seq = await this.repo.create(new
|
|
79
|
+
seq = await this.repo.create(new Sequence_1.SequenceModel({ id: name, current: next }), ctx);
|
|
109
80
|
}
|
|
110
81
|
return seq.current;
|
|
111
82
|
}
|
|
112
83
|
/**
|
|
113
|
-
* @
|
|
114
|
-
* @
|
|
115
|
-
*
|
|
116
|
-
*
|
|
84
|
+
* @description Gets the next value in the sequence
|
|
85
|
+
* @summary Retrieves the current value of the sequence and increments it by the
|
|
86
|
+
* configured increment amount. This is the main method used to get a new sequential value.
|
|
87
|
+
* @return A promise that resolves to the next value in the sequence
|
|
117
88
|
*/
|
|
118
|
-
async next(
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
const current = await this.current(
|
|
122
|
-
return this.increment(current, undefined,
|
|
89
|
+
async next(...argz) {
|
|
90
|
+
const contextArgs = await db_decorators_1.Context.args(db_decorators_1.OperationKeys.UPDATE, Sequence_1.SequenceModel, argz, this.adapter);
|
|
91
|
+
const { context, args } = contextArgs;
|
|
92
|
+
const current = await this.current(...args);
|
|
93
|
+
return this.increment(current, undefined, context);
|
|
123
94
|
}
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
95
|
+
/**
|
|
96
|
+
* @description Generates a range of sequential values
|
|
97
|
+
* @summary Retrieves a specified number of sequential values from the sequence.
|
|
98
|
+
* This is useful when you need to allocate multiple IDs at once.
|
|
99
|
+
* The method increments the sequence by the total amount needed and returns all values in the range.
|
|
100
|
+
* @param {number} count - The number of sequential values to generate
|
|
101
|
+
* @return A promise that resolves to an array of sequential values
|
|
102
|
+
*/
|
|
103
|
+
async range(count, ...argz) {
|
|
104
|
+
const contextArgs = await db_decorators_1.Context.args(db_decorators_1.OperationKeys.UPDATE, Sequence_1.SequenceModel, argz, this.adapter);
|
|
105
|
+
const { context, args } = contextArgs;
|
|
106
|
+
const current = (await this.current(...args));
|
|
128
107
|
const incrementBy = this.parse(this.options.incrementBy);
|
|
129
|
-
const next = await this.increment(current, this.parse(count) * incrementBy,
|
|
108
|
+
const next = await this.increment(current, this.parse(count) * incrementBy, context);
|
|
130
109
|
const range = [];
|
|
131
110
|
for (let i = 1; i <= count; i++) {
|
|
132
111
|
range.push(current + incrementBy * this.parse(i));
|
|
133
112
|
}
|
|
134
|
-
if (range[range.length - 1] !== next)
|
|
113
|
+
if (range[range.length - 1] !== next && this.options.type !== "String")
|
|
135
114
|
throw new db_decorators_1.InternalError("Miscalculation of range");
|
|
136
115
|
return range;
|
|
137
116
|
}
|
|
@@ -1,47 +1,27 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { Adapter,
|
|
1
|
+
import { SequenceOptions } from "@decaf-ts/core";
|
|
2
|
+
import type { Adapter, MaybeContextualArg } from "@decaf-ts/core";
|
|
3
|
+
import type { MangoQuery } from "@decaf-ts/for-couchdb";
|
|
3
4
|
import { Sequence } from "@decaf-ts/core";
|
|
4
|
-
import {
|
|
5
|
-
import { FabricContractContext } from "./ContractContext";
|
|
5
|
+
import { SequenceModel } from "../shared/model/Sequence";
|
|
6
6
|
import { FabricContractRepository } from "./FabricContractRepository";
|
|
7
|
-
import {
|
|
7
|
+
import { FabricContractContext } from "./ContractContext";
|
|
8
8
|
/**
|
|
9
|
-
* @
|
|
10
|
-
* @
|
|
11
|
-
*
|
|
12
|
-
* @
|
|
13
|
-
*
|
|
14
|
-
* @
|
|
15
|
-
*
|
|
16
|
-
* const next = await seq.next(ctx); // 1
|
|
17
|
-
* const [a,b,c] = await seq.range(3, ctx); // [2,3,4]
|
|
18
|
-
* @mermaid
|
|
19
|
-
* sequenceDiagram
|
|
20
|
-
* participant App
|
|
21
|
-
* participant Sequence
|
|
22
|
-
* participant Repo
|
|
23
|
-
* App->>Sequence: next(ctx)
|
|
24
|
-
* Sequence->>Repo: read(name, ctx)
|
|
25
|
-
* Repo-->>Sequence: current
|
|
26
|
-
* Sequence->>Repo: update(current+inc)
|
|
27
|
-
* Repo-->>Sequence: saved
|
|
28
|
-
* Sequence-->>App: next value
|
|
9
|
+
* @summary Abstract implementation of a Sequence
|
|
10
|
+
* @description provides the basic functionality for {@link Sequence}s
|
|
11
|
+
*
|
|
12
|
+
* @param {SequenceOptions} options
|
|
13
|
+
*
|
|
14
|
+
* @class CouchDBSequence
|
|
15
|
+
* @implements Sequence
|
|
29
16
|
*/
|
|
30
17
|
export declare class FabricContractSequence extends Sequence {
|
|
31
|
-
protected repo: FabricContractRepository<
|
|
32
|
-
constructor(options: SequenceOptions, adapter: Adapter<any, any, MangoQuery,
|
|
18
|
+
protected repo: FabricContractRepository<SequenceModel>;
|
|
19
|
+
constructor(options: SequenceOptions, adapter: Adapter<any, any, MangoQuery, FabricContractContext>);
|
|
33
20
|
/**
|
|
34
21
|
* @summary Retrieves the current value for the sequence
|
|
35
22
|
* @protected
|
|
36
23
|
*/
|
|
37
|
-
current(
|
|
38
|
-
/**
|
|
39
|
-
* @summary Parses the {@link Sequence} value
|
|
40
|
-
*
|
|
41
|
-
* @protected
|
|
42
|
-
* @param value
|
|
43
|
-
*/
|
|
44
|
-
private parse;
|
|
24
|
+
current(...args: MaybeContextualArg<any>): Promise<string | number | bigint>;
|
|
45
25
|
/**
|
|
46
26
|
* @summary increments the sequence
|
|
47
27
|
* @description Sequence specific implementation
|
|
@@ -52,11 +32,19 @@ export declare class FabricContractSequence extends Sequence {
|
|
|
52
32
|
*/
|
|
53
33
|
private increment;
|
|
54
34
|
/**
|
|
55
|
-
* @
|
|
56
|
-
* @
|
|
57
|
-
*
|
|
58
|
-
*
|
|
35
|
+
* @description Gets the next value in the sequence
|
|
36
|
+
* @summary Retrieves the current value of the sequence and increments it by the
|
|
37
|
+
* configured increment amount. This is the main method used to get a new sequential value.
|
|
38
|
+
* @return A promise that resolves to the next value in the sequence
|
|
39
|
+
*/
|
|
40
|
+
next(...argz: MaybeContextualArg<any>): Promise<number | string | bigint>;
|
|
41
|
+
/**
|
|
42
|
+
* @description Generates a range of sequential values
|
|
43
|
+
* @summary Retrieves a specified number of sequential values from the sequence.
|
|
44
|
+
* This is useful when you need to allocate multiple IDs at once.
|
|
45
|
+
* The method increments the sequence by the total amount needed and returns all values in the range.
|
|
46
|
+
* @param {number} count - The number of sequential values to generate
|
|
47
|
+
* @return A promise that resolves to an array of sequential values
|
|
59
48
|
*/
|
|
60
|
-
|
|
61
|
-
range(count: number, ctx?: FabricContractContext): Promise<(number | string | bigint)[]>;
|
|
49
|
+
range(count: number, ...argz: MaybeContextualArg<any>): Promise<(number | string | bigint)[]>;
|
|
62
50
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FabricContractSequence.js","sourceRoot":"","sources":["../../src/contracts/FabricContractSequence.ts"],"names":[],"mappings":";;;AAAA,2DAKiC;AACjC,
|
|
1
|
+
{"version":3,"file":"FabricContractSequence.js","sourceRoot":"","sources":["../../src/contracts/FabricContractSequence.ts"],"names":[],"mappings":";;;AAAA,2DAKiC;AACjC,yCAA6D;AAG7D,yCAA0C;AAC1C,6DAAyD;AAGzD;;;;;;;;GAQG;AACH,MAAa,sBAAuB,SAAQ,eAAQ;IAGlD,YACE,OAAwB,EACxB,OAA6D;QAE7D,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACxB,IAAI,CAAC,IAAI,GAAG,iBAAU,CAAC,QAAQ,CAAC,wBAAa,EAAE,OAAO,CAAC,KAAK,CAAQ,CAAC;IACvE,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,OAAO,CACX,GAAG,IAA6B;QAEhC,MAAM,WAAW,GAAG,MAAM,uBAAO,CAAC,IAAI,CACpC,6BAAa,CAAC,IAAI,EAClB,wBAAa,EACb,IAAI,EACJ,IAAI,CAAC,OAAO,CACb,CAAC;QACF,MAAM,GAAG,GAAG,WAAW,CAAC,OAAO,CAAC;QAChC,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;QACzC,IAAI,CAAC;YACH,MAAM,QAAQ,GAAkB,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAc,EAAE,GAAG,CAAC,CAAC;YAC1E,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAA0B,CAAC,CAAC;QACzD,CAAC;QAAC,OAAO,CAAM,EAAE,CAAC;YAChB,IAAI,CAAC,YAAY,6BAAa,EAAE,CAAC;gBAC/B,IAAI,OAAO,SAAS,KAAK,WAAW;oBAClC,MAAM,IAAI,6BAAa,CACrB,2DAA2D,CAC5D,CAAC;gBACJ,IAAI,CAAC;oBACH,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;gBAC/B,CAAC;gBAAC,OAAO,CAAU,EAAE,CAAC;oBACpB,MAAM,IAAI,6BAAa,CACrB,8CAA8C,SAAS,KAAK,CAAC,EAAE,CAChE,CAAC;gBACJ,CAAC;YACH,CAAC;YACD,MAAM,IAAI,6BAAa,CACrB,iDAAiD,IAAI,KAAK,CAAC,EAAE,CAC9D,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;;;;;;OAOG;IACK,KAAK,CAAC,SAAS,CACrB,OAAiC,EACjC,KAAyB,EACzB,GAAiB;QAEjB,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;QACjD,IAAI,IAA8B,CAAC;QACnC,MAAM,aAAa,GAAG,KAAK,IAAI,WAAW,CAAC;QAC3C,IAAI,aAAa,GAAG,WAAW,KAAK,CAAC;YACnC,MAAM,IAAI,6BAAa,CACrB,iEAAiE,WAAW,EAAE,CAC/E,CAAC;QACJ,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,QAAQ;gBACX,IAAI,GAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAY,GAAG,aAAa,CAAC;gBACvD,MAAM;YACR,KAAK,QAAQ;gBACX,IAAI,GAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAY,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC;gBAC/D,MAAM;YACR;gBACE,MAAM,IAAI,6BAAa,CAAC,qBAAqB,CAAC,CAAC;QACnD,CAAC;QACD,IAAI,GAAkB,CAAC;QACvB,IAAI,CAAC;YACH,GAAG,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAC1B,IAAI,wBAAa,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,EAC9C,GAAG,CACJ,CAAC;QACJ,CAAC;QAAC,OAAO,CAAM,EAAE,CAAC;YAChB,IAAI,CAAC,CAAC,CAAC,YAAY,6BAAa,CAAC;gBAAE,MAAM,CAAC,CAAC;YAC3C,GAAG,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAC1B,IAAI,wBAAa,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,EAC9C,GAAG,CACJ,CAAC;QACJ,CAAC;QAED,OAAO,GAAG,CAAC,OAAmC,CAAC;IACjD,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,IAAI,CACR,GAAG,IAA6B;QAEhC,MAAM,WAAW,GAAG,MAAM,uBAAO,CAAC,IAAI,CACpC,6BAAa,CAAC,MAAM,EACpB,wBAAa,EACb,IAAI,EACJ,IAAI,CAAC,OAAO,CACb,CAAC;QACF,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,WAAW,CAAC;QACtC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;QAC5C,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IACrD,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,KAAK,CACT,KAAa,EACb,GAAG,IAA6B;QAEhC,MAAM,WAAW,GAAG,MAAM,uBAAO,CAAC,IAAI,CACpC,6BAAa,CAAC,MAAM,EACpB,wBAAa,EACb,IAAI,EACJ,IAAI,CAAC,OAAO,CACb,CAAC;QACF,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,WAAW,CAAC;QACtC,MAAM,OAAO,GAAG,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,CAAW,CAAC;QACxD,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAC5B,IAAI,CAAC,OAAO,CAAC,WAAqB,CACzB,CAAC;QACZ,MAAM,IAAI,GAA6B,MAAM,IAAI,CAAC,SAAS,CACzD,OAAO,EACN,IAAI,CAAC,KAAK,CAAC,KAAK,CAAY,GAAG,WAAW,EAC3C,OAAO,CACR,CAAC;QACF,MAAM,KAAK,GAAiC,EAAE,CAAC;QAC/C,KAAK,IAAI,CAAC,GAAW,CAAC,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;YACxC,KAAK,CAAC,IAAI,CAAC,OAAO,GAAG,WAAW,GAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAY,CAAC,CAAC;QAChE,CAAC;QACD,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,KAAK,QAAQ;YACpE,MAAM,IAAI,6BAAa,CAAC,yBAAyB,CAAC,CAAC;QACrD,OAAO,KAAK,CAAC;IACf,CAAC;CACF;AAxJD,wDAwJC"}
|
|
@@ -32,22 +32,22 @@ const db_decorators_1 = require("@decaf-ts/db-decorators");
|
|
|
32
32
|
* Statement-->>App: models
|
|
33
33
|
*/
|
|
34
34
|
class FabricStatement extends for_couchdb_2.CouchDBStatement {
|
|
35
|
-
constructor(adapter
|
|
35
|
+
constructor(adapter) {
|
|
36
36
|
super(adapter);
|
|
37
|
-
this.ctx = ctx;
|
|
38
37
|
}
|
|
39
|
-
async raw(rawInput) {
|
|
40
|
-
const
|
|
38
|
+
async raw(rawInput, ...args) {
|
|
39
|
+
const { ctx } = this.logCtx(args, this.raw);
|
|
40
|
+
const results = await this.adapter.raw(rawInput, true, ctx);
|
|
41
41
|
const pkAttr = decorator_validation_1.Model.pk(this.fromSelector);
|
|
42
42
|
const type = decoration_1.Metadata.get(this.fromSelector, decoration_1.Metadata.key(db_decorators_1.DBKeys.ID, pkAttr))?.type;
|
|
43
43
|
if (!this.selectSelector)
|
|
44
|
-
return results.map((r) => this.processRecord(r, pkAttr, type));
|
|
44
|
+
return results.map((r) => this.processRecord(r, pkAttr, type, ctx));
|
|
45
45
|
return results;
|
|
46
46
|
}
|
|
47
47
|
build() {
|
|
48
48
|
const selectors = {};
|
|
49
49
|
selectors[for_couchdb_1.CouchDBKeys.TABLE] = {};
|
|
50
|
-
selectors[for_couchdb_1.CouchDBKeys.TABLE] =
|
|
50
|
+
selectors[for_couchdb_1.CouchDBKeys.TABLE] = decorator_validation_1.Model.tableName(this.fromSelector);
|
|
51
51
|
const query = { selector: selectors };
|
|
52
52
|
if (this.selectSelector)
|
|
53
53
|
query.fields = this.selectSelector;
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { Model } from "@decaf-ts/decorator-validation";
|
|
2
|
-
import { MangoQuery } from "@decaf-ts/for-couchdb";
|
|
3
|
-
import { FabricContractAdapter } from "./ContractAdapter";
|
|
2
|
+
import { CouchDBAdapter, MangoQuery } from "@decaf-ts/for-couchdb";
|
|
4
3
|
import { FabricContractContext } from "./ContractContext";
|
|
5
4
|
import { CouchDBStatement } from "@decaf-ts/for-couchdb";
|
|
6
5
|
/**
|
|
@@ -27,9 +26,8 @@ import { CouchDBStatement } from "@decaf-ts/for-couchdb";
|
|
|
27
26
|
* Adapter-->>Statement: rows
|
|
28
27
|
* Statement-->>App: models
|
|
29
28
|
*/
|
|
30
|
-
export declare class FabricStatement<M extends Model, R> extends CouchDBStatement<M, R> {
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
raw<R>(rawInput: MangoQuery): Promise<R>;
|
|
29
|
+
export declare class FabricStatement<M extends Model, R> extends CouchDBStatement<M, CouchDBAdapter<any, void, FabricContractContext>, R> {
|
|
30
|
+
constructor(adapter: CouchDBAdapter<any, void, FabricContractContext>);
|
|
31
|
+
raw<R>(rawInput: MangoQuery, ...args: any[]): Promise<R>;
|
|
34
32
|
build(): MangoQuery;
|
|
35
33
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FabricContractStatement.js","sourceRoot":"","sources":["../../src/contracts/FabricContractStatement.ts"],"names":[],"mappings":";;;AAAA,yEAAuD;AACvD,uDAQ+B;
|
|
1
|
+
{"version":3,"file":"FabricContractStatement.js","sourceRoot":"","sources":["../../src/contracts/FabricContractStatement.ts"],"names":[],"mappings":"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"}
|