@decaf-ts/for-fabric 0.0.2
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.md +22 -0
- package/README.md +647 -0
- package/dist/for-fabric.cjs +6223 -0
- package/dist/for-fabric.esm.cjs +6180 -0
- package/lib/client/FabricClientAdapter.cjs +760 -0
- package/lib/client/FabricClientAdapter.d.ts +381 -0
- package/lib/client/FabricClientDispatch.cjs +186 -0
- package/lib/client/FabricClientDispatch.d.ts +125 -0
- package/lib/client/FabricClientRepository.cjs +131 -0
- package/lib/client/FabricClientRepository.d.ts +100 -0
- package/lib/client/erc20/erc20ClientRepository.cjs +343 -0
- package/lib/client/erc20/erc20ClientRepository.d.ts +254 -0
- package/lib/client/fabric-fs.cjs +234 -0
- package/lib/client/fabric-fs.d.ts +92 -0
- package/lib/client/index.cjs +30 -0
- package/lib/client/index.d.ts +13 -0
- package/lib/client/logging.cjs +102 -0
- package/lib/client/logging.d.ts +60 -0
- package/lib/client/services/LoggedService.cjs +47 -0
- package/lib/client/services/LoggedService.d.ts +42 -0
- package/lib/client/services/constants.cjs +3 -0
- package/lib/client/services/constants.d.ts +15 -0
- package/lib/client/services/enrollementService.cjs +344 -0
- package/lib/client/services/enrollementService.d.ts +176 -0
- package/lib/client/services/index.cjs +18 -0
- package/lib/client/services/index.d.ts +1 -0
- package/lib/contracts/ContractAdapter.cjs +730 -0
- package/lib/contracts/ContractAdapter.d.ts +296 -0
- package/lib/contracts/ContractContext.cjs +85 -0
- package/lib/contracts/ContractContext.d.ts +64 -0
- package/lib/contracts/ContractPrivateDataAdapter.cjs +281 -0
- package/lib/contracts/ContractPrivateDataAdapter.d.ts +74 -0
- package/lib/contracts/FabricConstruction.cjs +441 -0
- package/lib/contracts/FabricConstruction.d.ts +304 -0
- package/lib/contracts/FabricContractRepository.cjs +306 -0
- package/lib/contracts/FabricContractRepository.d.ts +162 -0
- package/lib/contracts/FabricContractRepositoryObservableHandler.cjs +85 -0
- package/lib/contracts/FabricContractRepositoryObservableHandler.d.ts +62 -0
- package/lib/contracts/FabricContractSequence.cjs +139 -0
- package/lib/contracts/FabricContractSequence.d.ts +61 -0
- package/lib/contracts/FabricContractStatement.cjs +119 -0
- package/lib/contracts/FabricContractStatement.d.ts +34 -0
- package/lib/contracts/PrivateSequence.cjs +36 -0
- package/lib/contracts/PrivateSequence.d.ts +15 -0
- package/lib/contracts/crud/crud-contract.cjs +257 -0
- package/lib/contracts/crud/crud-contract.d.ts +168 -0
- package/lib/contracts/crud/index.cjs +19 -0
- package/lib/contracts/crud/index.d.ts +2 -0
- package/lib/contracts/crud/serialized-crud-contract.cjs +172 -0
- package/lib/contracts/crud/serialized-crud-contract.d.ts +37 -0
- package/lib/contracts/erc20/erc20contract.cjs +569 -0
- package/lib/contracts/erc20/erc20contract.d.ts +151 -0
- package/lib/contracts/erc20/index.cjs +21 -0
- package/lib/contracts/erc20/index.d.ts +2 -0
- package/lib/contracts/erc20/models.cjs +209 -0
- package/lib/contracts/erc20/models.d.ts +114 -0
- package/lib/contracts/index.cjs +32 -0
- package/lib/contracts/index.d.ts +15 -0
- package/lib/contracts/logging.cjs +96 -0
- package/lib/contracts/logging.d.ts +49 -0
- package/lib/contracts/private-data.cjs +121 -0
- package/lib/contracts/private-data.d.ts +16 -0
- package/lib/contracts/types.cjs +3 -0
- package/lib/contracts/types.d.ts +26 -0
- package/lib/esm/client/FabricClientAdapter.d.ts +381 -0
- package/lib/esm/client/FabricClientAdapter.js +723 -0
- package/lib/esm/client/FabricClientDispatch.d.ts +125 -0
- package/lib/esm/client/FabricClientDispatch.js +182 -0
- package/lib/esm/client/FabricClientRepository.d.ts +100 -0
- package/lib/esm/client/FabricClientRepository.js +127 -0
- package/lib/esm/client/erc20/erc20ClientRepository.d.ts +254 -0
- package/lib/esm/client/erc20/erc20ClientRepository.js +339 -0
- package/lib/esm/client/fabric-fs.d.ts +92 -0
- package/lib/esm/client/fabric-fs.js +191 -0
- package/lib/esm/client/index.d.ts +13 -0
- package/lib/esm/client/index.js +14 -0
- package/lib/esm/client/logging.d.ts +60 -0
- package/lib/esm/client/logging.js +98 -0
- package/lib/esm/client/services/LoggedService.d.ts +42 -0
- package/lib/esm/client/services/LoggedService.js +43 -0
- package/lib/esm/client/services/constants.d.ts +15 -0
- package/lib/esm/client/services/constants.js +2 -0
- package/lib/esm/client/services/enrollementService.d.ts +176 -0
- package/lib/esm/client/services/enrollementService.js +337 -0
- package/lib/esm/client/services/index.d.ts +1 -0
- package/lib/esm/client/services/index.js +2 -0
- package/lib/esm/contracts/ContractAdapter.d.ts +296 -0
- package/lib/esm/contracts/ContractAdapter.js +724 -0
- package/lib/esm/contracts/ContractContext.d.ts +64 -0
- package/lib/esm/contracts/ContractContext.js +81 -0
- package/lib/esm/contracts/ContractPrivateDataAdapter.d.ts +74 -0
- package/lib/esm/contracts/ContractPrivateDataAdapter.js +277 -0
- package/lib/esm/contracts/FabricConstruction.d.ts +304 -0
- package/lib/esm/contracts/FabricConstruction.js +433 -0
- package/lib/esm/contracts/FabricContractRepository.d.ts +162 -0
- package/lib/esm/contracts/FabricContractRepository.js +302 -0
- package/lib/esm/contracts/FabricContractRepositoryObservableHandler.d.ts +62 -0
- package/lib/esm/contracts/FabricContractRepositoryObservableHandler.js +81 -0
- package/lib/esm/contracts/FabricContractSequence.d.ts +61 -0
- package/lib/esm/contracts/FabricContractSequence.js +135 -0
- package/lib/esm/contracts/FabricContractStatement.d.ts +34 -0
- package/lib/esm/contracts/FabricContractStatement.js +115 -0
- package/lib/esm/contracts/PrivateSequence.d.ts +15 -0
- package/lib/esm/contracts/PrivateSequence.js +33 -0
- package/lib/esm/contracts/crud/crud-contract.d.ts +168 -0
- package/lib/esm/contracts/crud/crud-contract.js +253 -0
- package/lib/esm/contracts/crud/index.d.ts +2 -0
- package/lib/esm/contracts/crud/index.js +3 -0
- package/lib/esm/contracts/crud/serialized-crud-contract.d.ts +37 -0
- package/lib/esm/contracts/crud/serialized-crud-contract.js +168 -0
- package/lib/esm/contracts/erc20/erc20contract.d.ts +151 -0
- package/lib/esm/contracts/erc20/erc20contract.js +565 -0
- package/lib/esm/contracts/erc20/index.d.ts +2 -0
- package/lib/esm/contracts/erc20/index.js +4 -0
- package/lib/esm/contracts/erc20/models.d.ts +114 -0
- package/lib/esm/contracts/erc20/models.js +206 -0
- package/lib/esm/contracts/index.d.ts +15 -0
- package/lib/esm/contracts/index.js +16 -0
- package/lib/esm/contracts/logging.d.ts +49 -0
- package/lib/esm/contracts/logging.js +92 -0
- package/lib/esm/contracts/private-data.d.ts +16 -0
- package/lib/esm/contracts/private-data.js +113 -0
- package/lib/esm/contracts/types.d.ts +26 -0
- package/lib/esm/contracts/types.js +2 -0
- package/lib/esm/index.d.ts +8 -0
- package/lib/esm/index.js +9 -0
- package/lib/esm/shared/ClientSerializer.d.ts +52 -0
- package/lib/esm/shared/ClientSerializer.js +80 -0
- package/lib/esm/shared/DeterministicSerializer.d.ts +40 -0
- package/lib/esm/shared/DeterministicSerializer.js +50 -0
- package/lib/esm/shared/SimpleDeterministicSerializer.d.ts +7 -0
- package/lib/esm/shared/SimpleDeterministicSerializer.js +42 -0
- package/lib/esm/shared/constants.d.ts +39 -0
- package/lib/esm/shared/constants.js +42 -0
- package/lib/esm/shared/crypto.d.ts +107 -0
- package/lib/esm/shared/crypto.js +331 -0
- package/lib/esm/shared/decorators.d.ts +24 -0
- package/lib/esm/shared/decorators.js +98 -0
- package/lib/esm/shared/erc20/erc20-constants.d.ts +25 -0
- package/lib/esm/shared/erc20/erc20-constants.js +27 -0
- package/lib/esm/shared/errors.d.ts +116 -0
- package/lib/esm/shared/errors.js +132 -0
- package/lib/esm/shared/events.d.ts +39 -0
- package/lib/esm/shared/events.js +47 -0
- package/lib/esm/shared/fabric-types.d.ts +33 -0
- package/lib/esm/shared/fabric-types.js +2 -0
- package/lib/esm/shared/index.d.ts +13 -0
- package/lib/esm/shared/index.js +14 -0
- package/lib/esm/shared/interfaces/Checkable.d.ts +21 -0
- package/lib/esm/shared/interfaces/Checkable.js +2 -0
- package/lib/esm/shared/math.d.ts +34 -0
- package/lib/esm/shared/math.js +61 -0
- package/lib/esm/shared/model/Identity.d.ts +42 -0
- package/lib/esm/shared/model/Identity.js +78 -0
- package/lib/esm/shared/model/IdentityCredentials.d.ts +41 -0
- package/lib/esm/shared/model/IdentityCredentials.js +74 -0
- package/lib/esm/shared/model/index.d.ts +1 -0
- package/lib/esm/shared/model/index.js +2 -0
- package/lib/esm/shared/model/utils.d.ts +60 -0
- package/lib/esm/shared/model/utils.js +108 -0
- package/lib/esm/shared/types.d.ts +79 -0
- package/lib/esm/shared/types.js +2 -0
- package/lib/esm/shared/utils.d.ts +55 -0
- package/lib/esm/shared/utils.js +148 -0
- package/lib/index.cjs +25 -0
- package/lib/index.d.ts +8 -0
- package/lib/shared/ClientSerializer.cjs +84 -0
- package/lib/shared/ClientSerializer.d.ts +52 -0
- package/lib/shared/DeterministicSerializer.cjs +54 -0
- package/lib/shared/DeterministicSerializer.d.ts +40 -0
- package/lib/shared/SimpleDeterministicSerializer.cjs +46 -0
- package/lib/shared/SimpleDeterministicSerializer.d.ts +7 -0
- package/lib/shared/constants.cjs +45 -0
- package/lib/shared/constants.d.ts +39 -0
- package/lib/shared/crypto.cjs +369 -0
- package/lib/shared/crypto.d.ts +107 -0
- package/lib/shared/decorators.cjs +105 -0
- package/lib/shared/decorators.d.ts +24 -0
- package/lib/shared/erc20/erc20-constants.cjs +30 -0
- package/lib/shared/erc20/erc20-constants.d.ts +25 -0
- package/lib/shared/errors.cjs +142 -0
- package/lib/shared/errors.d.ts +116 -0
- package/lib/shared/events.cjs +51 -0
- package/lib/shared/events.d.ts +39 -0
- package/lib/shared/fabric-types.cjs +4 -0
- package/lib/shared/fabric-types.d.ts +33 -0
- package/lib/shared/index.cjs +30 -0
- package/lib/shared/index.d.ts +13 -0
- package/lib/shared/interfaces/Checkable.cjs +3 -0
- package/lib/shared/interfaces/Checkable.d.ts +21 -0
- package/lib/shared/math.cjs +66 -0
- package/lib/shared/math.d.ts +34 -0
- package/lib/shared/model/Identity.cjs +81 -0
- package/lib/shared/model/Identity.d.ts +42 -0
- package/lib/shared/model/IdentityCredentials.cjs +77 -0
- package/lib/shared/model/IdentityCredentials.d.ts +41 -0
- package/lib/shared/model/index.cjs +18 -0
- package/lib/shared/model/index.d.ts +1 -0
- package/lib/shared/model/utils.cjs +114 -0
- package/lib/shared/model/utils.d.ts +60 -0
- package/lib/shared/types.cjs +3 -0
- package/lib/shared/types.d.ts +79 -0
- package/lib/shared/utils.cjs +185 -0
- package/lib/shared/utils.d.ts +55 -0
- package/package.json +166 -0
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { BulkCrudOperationKeys, OperationKeys } from "@decaf-ts/db-decorators";
|
|
2
|
+
import { EventIds, ObserverHandler } from "@decaf-ts/core";
|
|
3
|
+
import { Logger } from "@decaf-ts/logging";
|
|
4
|
+
import { Context } from "fabric-contract-api";
|
|
5
|
+
/**
|
|
6
|
+
* @description Observer handler for Fabric chaincode events
|
|
7
|
+
* @summary Emits events on the Fabric ledger when repository operations occur
|
|
8
|
+
* @class FabricContractRepositoryObservableHandler
|
|
9
|
+
* @extends {ObserverHandler}
|
|
10
|
+
* @example
|
|
11
|
+
* ```typescript
|
|
12
|
+
* // In a Fabric chaincode contract
|
|
13
|
+
* import { FabricContractRepositoryObservableHandler } from '@decaf-ts/for-fabric';
|
|
14
|
+
*
|
|
15
|
+
* // Create a handler with default supported events
|
|
16
|
+
* const handler = new FabricContractRepositoryObservableHandler();
|
|
17
|
+
*
|
|
18
|
+
* // Emit an event
|
|
19
|
+
* await handler.updateObservers(
|
|
20
|
+
* logger,
|
|
21
|
+
* 'assets',
|
|
22
|
+
* OperationKeys.CREATE,
|
|
23
|
+
* 'asset1',
|
|
24
|
+
* context
|
|
25
|
+
* );
|
|
26
|
+
* ```
|
|
27
|
+
* @mermaid
|
|
28
|
+
* sequenceDiagram
|
|
29
|
+
* participant Repository
|
|
30
|
+
* participant ObservableHandler
|
|
31
|
+
* participant Stub
|
|
32
|
+
* participant Ledger
|
|
33
|
+
*
|
|
34
|
+
* Repository->>ObservableHandler: updateObservers(log, table, event, id, ctx)
|
|
35
|
+
* ObservableHandler->>ObservableHandler: Check if event is supported
|
|
36
|
+
* ObservableHandler->>ObservableHandler: generateFabricEventName(table, event, owner)
|
|
37
|
+
* ObservableHandler->>Stub: setEvent(eventName, payload)
|
|
38
|
+
* Stub->>Ledger: Record event
|
|
39
|
+
*/
|
|
40
|
+
export declare class FabricContractRepositoryObservableHandler extends ObserverHandler {
|
|
41
|
+
private supportedEvents;
|
|
42
|
+
/**
|
|
43
|
+
* @description Creates a new FabricContractRepositoryObservableHandler instance
|
|
44
|
+
* @summary Initializes the handler with a list of supported events
|
|
45
|
+
* @param {Array<OperationKeys | BulkCrudOperationKeys | string>} [supportedEvents] - Events that will trigger Fabric events
|
|
46
|
+
*/
|
|
47
|
+
constructor(supportedEvents?: (OperationKeys | BulkCrudOperationKeys | string)[]);
|
|
48
|
+
/**
|
|
49
|
+
* @description Updates observers by emitting Fabric events
|
|
50
|
+
* @summary Emits events on the Fabric ledger for supported event types
|
|
51
|
+
* @param {Logger} log - Logger instance for debugging
|
|
52
|
+
* @param {string} table - The table/collection name
|
|
53
|
+
* @param {OperationKeys | BulkCrudOperationKeys | string} event - The event type
|
|
54
|
+
* @param {EventIds} id - The event identifier
|
|
55
|
+
* @param {FabricContractContext} ctx - The Fabric contract context
|
|
56
|
+
* @param {string} [owner] - Optional owner identifier for the event
|
|
57
|
+
* @param {object | string | undefined} [owner] - Optional payload for the event
|
|
58
|
+
*
|
|
59
|
+
* @return {Promise<void>} Promise that resolves when the event is emitted
|
|
60
|
+
*/
|
|
61
|
+
updateObservers(log: Logger, table: string, event: OperationKeys | BulkCrudOperationKeys | string, id: EventIds, ctx: Context, owner?: string, payload?: object | string | undefined): Promise<void>;
|
|
62
|
+
}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.FabricContractSequence = void 0;
|
|
4
|
+
const db_decorators_1 = require("@decaf-ts/db-decorators");
|
|
5
|
+
const core_1 = require("@decaf-ts/core");
|
|
6
|
+
const errors_1 = require("./../shared/errors.cjs");
|
|
7
|
+
const PrivateSequence_1 = require("./PrivateSequence.cjs");
|
|
8
|
+
const decorators_1 = require("./../shared/decorators.cjs");
|
|
9
|
+
/**
|
|
10
|
+
* @description Abstract implementation of a Sequence for Fabric contracts
|
|
11
|
+
* @summary Provides the basic functionality for sequences backed by the FabricContractRepository storing values in CouchDB-like state, including current, next and range operations.
|
|
12
|
+
* @param {SequenceOptions} options - Sequence configuration such as name, type, startWith and incrementBy
|
|
13
|
+
* @return {void}
|
|
14
|
+
* @class FabricContractSequence
|
|
15
|
+
* @example
|
|
16
|
+
* const seq = new FabricContractDBSequence({ name: 'orderSeq', type: 'Number', incrementBy: 1, startWith: 1 }, adapter);
|
|
17
|
+
* const next = await seq.next(ctx); // 1
|
|
18
|
+
* const [a,b,c] = await seq.range(3, ctx); // [2,3,4]
|
|
19
|
+
* @mermaid
|
|
20
|
+
* sequenceDiagram
|
|
21
|
+
* participant App
|
|
22
|
+
* participant Sequence
|
|
23
|
+
* participant Repo
|
|
24
|
+
* App->>Sequence: next(ctx)
|
|
25
|
+
* Sequence->>Repo: read(name, ctx)
|
|
26
|
+
* Repo-->>Sequence: current
|
|
27
|
+
* Sequence->>Repo: update(current+inc)
|
|
28
|
+
* Repo-->>Sequence: saved
|
|
29
|
+
* Sequence-->>App: next value
|
|
30
|
+
*/
|
|
31
|
+
class FabricContractSequence extends core_1.Sequence {
|
|
32
|
+
constructor(options, adapter, collections) {
|
|
33
|
+
super(options);
|
|
34
|
+
for (const collection of collections || []) {
|
|
35
|
+
(0, decorators_1.privateData)(collection)(PrivateSequence_1.CustomizableSequence);
|
|
36
|
+
}
|
|
37
|
+
this.repo = core_1.Repository.forModel(PrivateSequence_1.CustomizableSequence, adapter.alias);
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* @summary Retrieves the current value for the sequence
|
|
41
|
+
* @protected
|
|
42
|
+
*/
|
|
43
|
+
async current(ctx) {
|
|
44
|
+
if (!ctx)
|
|
45
|
+
throw new errors_1.MissingContextError("Context is required");
|
|
46
|
+
const { name, startWith } = this.options;
|
|
47
|
+
try {
|
|
48
|
+
const sequence = await this.repo.read(name, ctx);
|
|
49
|
+
return this.parse(sequence.current);
|
|
50
|
+
}
|
|
51
|
+
catch (e) {
|
|
52
|
+
if (e instanceof db_decorators_1.NotFoundError) {
|
|
53
|
+
if (typeof startWith === "undefined")
|
|
54
|
+
throw new db_decorators_1.InternalError("Starting value is not defined for a non existing sequence");
|
|
55
|
+
try {
|
|
56
|
+
return this.parse(startWith);
|
|
57
|
+
}
|
|
58
|
+
catch (e) {
|
|
59
|
+
throw new db_decorators_1.InternalError(`Failed to parse initial value for sequence ${startWith}: ${e}`);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
throw new db_decorators_1.InternalError(`Failed to retrieve current value for sequence ${name}: ${e}`);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* @summary Parses the {@link Sequence} value
|
|
67
|
+
*
|
|
68
|
+
* @protected
|
|
69
|
+
* @param value
|
|
70
|
+
*/
|
|
71
|
+
parse(value) {
|
|
72
|
+
return core_1.Sequence.parseValue(this.options.type, value);
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* @summary increments the sequence
|
|
76
|
+
* @description Sequence specific implementation
|
|
77
|
+
*
|
|
78
|
+
* @param {string | number | bigint} current
|
|
79
|
+
* @param count
|
|
80
|
+
* @protected
|
|
81
|
+
*/
|
|
82
|
+
async increment(current, count, ctx) {
|
|
83
|
+
if (!ctx)
|
|
84
|
+
throw new errors_1.MissingContextError("Context is required");
|
|
85
|
+
const { type, incrementBy, name } = this.options;
|
|
86
|
+
let next;
|
|
87
|
+
const toIncrementBy = count || incrementBy;
|
|
88
|
+
if (toIncrementBy % incrementBy !== 0)
|
|
89
|
+
throw new db_decorators_1.InternalError(`Value to increment does not consider the incrementBy setting: ${incrementBy}`);
|
|
90
|
+
switch (type) {
|
|
91
|
+
case "Number":
|
|
92
|
+
next = this.parse(current) + toIncrementBy;
|
|
93
|
+
break;
|
|
94
|
+
case "BigInt":
|
|
95
|
+
next = this.parse(current) + BigInt(toIncrementBy);
|
|
96
|
+
break;
|
|
97
|
+
default:
|
|
98
|
+
throw new db_decorators_1.InternalError("Should never happen");
|
|
99
|
+
}
|
|
100
|
+
let seq;
|
|
101
|
+
try {
|
|
102
|
+
seq = await this.repo.update(new PrivateSequence_1.CustomizableSequence({ id: name, current: next }), ctx);
|
|
103
|
+
}
|
|
104
|
+
catch (e) {
|
|
105
|
+
if (!(e instanceof db_decorators_1.NotFoundError))
|
|
106
|
+
throw e;
|
|
107
|
+
seq = await this.repo.create(new PrivateSequence_1.CustomizableSequence({ id: name, current: next }), ctx);
|
|
108
|
+
}
|
|
109
|
+
return seq.current;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* @summary Generates the next value in th sequence
|
|
113
|
+
* @description calls {@link Sequence#parse} on the current value
|
|
114
|
+
* followed by {@link Sequence#increment}
|
|
115
|
+
*
|
|
116
|
+
*/
|
|
117
|
+
async next(ctx) {
|
|
118
|
+
if (!ctx)
|
|
119
|
+
throw new errors_1.MissingContextError("Context is required");
|
|
120
|
+
const current = await this.current(ctx);
|
|
121
|
+
return this.increment(current, undefined, ctx);
|
|
122
|
+
}
|
|
123
|
+
async range(count, ctx) {
|
|
124
|
+
if (!ctx)
|
|
125
|
+
throw new errors_1.MissingContextError("Context is required");
|
|
126
|
+
const current = (await this.current(ctx));
|
|
127
|
+
const incrementBy = this.parse(this.options.incrementBy);
|
|
128
|
+
const next = await this.increment(current, this.parse(count) * incrementBy, ctx);
|
|
129
|
+
const range = [];
|
|
130
|
+
for (let i = 1; i <= count; i++) {
|
|
131
|
+
range.push(current + incrementBy * this.parse(i));
|
|
132
|
+
}
|
|
133
|
+
if (range[range.length - 1] !== next)
|
|
134
|
+
throw new db_decorators_1.InternalError("Miscalculation of range");
|
|
135
|
+
return range;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
exports.FabricContractSequence = FabricContractSequence;
|
|
139
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmFicmljQ29udHJhY3RTZXF1ZW5jZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250cmFjdHMvRmFicmljQ29udHJhY3RTZXF1ZW5jZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwyREFLaUM7QUFDakMseUNBQWdGO0FBSWhGLG1EQUF1RDtBQUN2RCwyREFBeUQ7QUFDekQsMkRBQW1EO0FBRW5EOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FxQkc7QUFDSCxNQUFhLHNCQUF1QixTQUFRLGVBQVE7SUFHbEQsWUFDRSxPQUF3QixFQUN4QixPQUFnRCxFQUNoRCxXQUFzQjtRQUV0QixLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFZixLQUFLLE1BQU0sVUFBVSxJQUFJLFdBQVcsSUFBSSxFQUFFLEVBQUUsQ0FBQztZQUMzQyxJQUFBLHdCQUFXLEVBQUMsVUFBVSxDQUFDLENBQUMsc0NBQW9CLENBQUMsQ0FBQztRQUNoRCxDQUFDO1FBRUQsSUFBSSxDQUFDLElBQUksR0FBRyxpQkFBVSxDQUFDLFFBQVEsQ0FBQyxzQ0FBb0IsRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdkUsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxPQUFPLENBQ1gsR0FBOEI7UUFFOUIsSUFBSSxDQUFDLEdBQUc7WUFBRSxNQUFNLElBQUksNEJBQW1CLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUMvRCxNQUFNLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7UUFDekMsSUFBSSxDQUFDO1lBQ0gsTUFBTSxRQUFRLEdBQXlCLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQ3pELElBQWMsRUFDZCxHQUFHLENBQ0osQ0FBQztZQUNGLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsT0FBMEIsQ0FBQyxDQUFDO1FBQ3pELENBQUM7UUFBQyxPQUFPLENBQU0sRUFBRSxDQUFDO1lBQ2hCLElBQUksQ0FBQyxZQUFZLDZCQUFhLEVBQUUsQ0FBQztnQkFDL0IsSUFBSSxPQUFPLFNBQVMsS0FBSyxXQUFXO29CQUNsQyxNQUFNLElBQUksNkJBQWEsQ0FDckIsMkRBQTJELENBQzVELENBQUM7Z0JBQ0osSUFBSSxDQUFDO29CQUNILE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDL0IsQ0FBQztnQkFBQyxPQUFPLENBQVUsRUFBRSxDQUFDO29CQUNwQixNQUFNLElBQUksNkJBQWEsQ0FDckIsOENBQThDLFNBQVMsS0FBSyxDQUFDLEVBQUUsQ0FDaEUsQ0FBQztnQkFDSixDQUFDO1lBQ0gsQ0FBQztZQUNELE1BQU0sSUFBSSw2QkFBYSxDQUNyQixpREFBaUQsSUFBSSxLQUFLLENBQUMsRUFBRSxDQUM5RCxDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7SUFFRDs7Ozs7T0FLRztJQUNLLEtBQUssQ0FBQyxLQUErQjtRQUMzQyxPQUFPLGVBQVEsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSyxLQUFLLENBQUMsU0FBUyxDQUNyQixPQUFpQyxFQUNqQyxLQUFjLEVBQ2QsR0FBMkI7UUFFM0IsSUFBSSxDQUFDLEdBQUc7WUFBRSxNQUFNLElBQUksNEJBQW1CLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUMvRCxNQUFNLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1FBQ2pELElBQUksSUFBOEIsQ0FBQztRQUNuQyxNQUFNLGFBQWEsR0FBRyxLQUFLLElBQUksV0FBVyxDQUFDO1FBQzNDLElBQUksYUFBYSxHQUFHLFdBQVcsS0FBSyxDQUFDO1lBQ25DLE1BQU0sSUFBSSw2QkFBYSxDQUNyQixpRUFBaUUsV0FBVyxFQUFFLENBQy9FLENBQUM7UUFDSixRQUFRLElBQUksRUFBRSxDQUFDO1lBQ2IsS0FBSyxRQUFRO2dCQUNYLElBQUksR0FBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBWSxHQUFHLGFBQWEsQ0FBQztnQkFDdkQsTUFBTTtZQUNSLEtBQUssUUFBUTtnQkFDWCxJQUFJLEdBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQVksR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBQy9ELE1BQU07WUFDUjtnQkFDRSxNQUFNLElBQUksNkJBQWEsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQ25ELENBQUM7UUFDRCxJQUFJLEdBQXlCLENBQUM7UUFDOUIsSUFBSSxDQUFDO1lBQ0gsR0FBRyxHQUFHLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQzFCLElBQUksc0NBQW9CLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUNyRCxHQUFHLENBQ0osQ0FBQztRQUNKLENBQUM7UUFBQyxPQUFPLENBQU0sRUFBRSxDQUFDO1lBQ2hCLElBQUksQ0FBQyxDQUFDLENBQUMsWUFBWSw2QkFBYSxDQUFDO2dCQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQzNDLEdBQUcsR0FBRyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUMxQixJQUFJLHNDQUFvQixDQUFDLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFDckQsR0FBRyxDQUNKLENBQUM7UUFDSixDQUFDO1FBRUQsT0FBTyxHQUFHLENBQUMsT0FBbUMsQ0FBQztJQUNqRCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQTJCO1FBQ3BDLElBQUksQ0FBQyxHQUFHO1lBQUUsTUFBTSxJQUFJLDRCQUFtQixDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFDL0QsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3hDLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFRCxLQUFLLENBQUMsS0FBSyxDQUNULEtBQWEsRUFDYixHQUEyQjtRQUUzQixJQUFJLENBQUMsR0FBRztZQUFFLE1BQU0sSUFBSSw0QkFBbUIsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQy9ELE1BQU0sT0FBTyxHQUFHLENBQUMsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFXLENBQUM7UUFDcEQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBVyxDQUFDO1FBQ25FLE1BQU0sSUFBSSxHQUE2QixNQUFNLElBQUksQ0FBQyxTQUFTLENBQ3pELE9BQU8sRUFDTixJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBWSxHQUFHLFdBQVcsRUFDM0MsR0FBRyxDQUNKLENBQUM7UUFDRixNQUFNLEtBQUssR0FBaUMsRUFBRSxDQUFDO1FBQy9DLEtBQUssSUFBSSxDQUFDLEdBQVcsQ0FBQyxFQUFFLENBQUMsSUFBSSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUN4QyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxXQUFXLEdBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQVksQ0FBQyxDQUFDO1FBQ2hFLENBQUM7UUFDRCxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUk7WUFDbEMsTUFBTSxJQUFJLDZCQUFhLENBQUMseUJBQXlCLENBQUMsQ0FBQztRQUNyRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7Q0FDRjtBQTlJRCx3REE4SUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb250ZXh0LFxuICBJbnRlcm5hbEVycm9yLFxuICBOb3RGb3VuZEVycm9yLFxuICBSZXBvc2l0b3J5RmxhZ3MsXG59IGZyb20gXCJAZGVjYWYtdHMvZGItZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHsgQWRhcHRlciwgUmVwb3NpdG9yeSwgU2VxdWVuY2UsIFNlcXVlbmNlT3B0aW9ucyB9IGZyb20gXCJAZGVjYWYtdHMvY29yZVwiO1xuaW1wb3J0IHsgTWFuZ29RdWVyeSB9IGZyb20gXCJAZGVjYWYtdHMvZm9yLWNvdWNoZGJcIjtcbmltcG9ydCB7IEZhYnJpY0NvbnRyYWN0Q29udGV4dCB9IGZyb20gXCIuL0NvbnRyYWN0Q29udGV4dFwiO1xuaW1wb3J0IHsgRmFicmljQ29udHJhY3RSZXBvc2l0b3J5IH0gZnJvbSBcIi4vRmFicmljQ29udHJhY3RSZXBvc2l0b3J5XCI7XG5pbXBvcnQgeyBNaXNzaW5nQ29udGV4dEVycm9yIH0gZnJvbSBcIi4uL3NoYXJlZC9lcnJvcnNcIjtcbmltcG9ydCB7IEN1c3RvbWl6YWJsZVNlcXVlbmNlIH0gZnJvbSBcIi4vUHJpdmF0ZVNlcXVlbmNlXCI7XG5pbXBvcnQgeyBwcml2YXRlRGF0YSB9IGZyb20gXCIuLi9zaGFyZWQvZGVjb3JhdG9yc1wiO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBBYnN0cmFjdCBpbXBsZW1lbnRhdGlvbiBvZiBhIFNlcXVlbmNlIGZvciBGYWJyaWMgY29udHJhY3RzXG4gKiBAc3VtbWFyeSBQcm92aWRlcyB0aGUgYmFzaWMgZnVuY3Rpb25hbGl0eSBmb3Igc2VxdWVuY2VzIGJhY2tlZCBieSB0aGUgRmFicmljQ29udHJhY3RSZXBvc2l0b3J5IHN0b3JpbmcgdmFsdWVzIGluIENvdWNoREItbGlrZSBzdGF0ZSwgaW5jbHVkaW5nIGN1cnJlbnQsIG5leHQgYW5kIHJhbmdlIG9wZXJhdGlvbnMuXG4gKiBAcGFyYW0ge1NlcXVlbmNlT3B0aW9uc30gb3B0aW9ucyAtIFNlcXVlbmNlIGNvbmZpZ3VyYXRpb24gc3VjaCBhcyBuYW1lLCB0eXBlLCBzdGFydFdpdGggYW5kIGluY3JlbWVudEJ5XG4gKiBAcmV0dXJuIHt2b2lkfVxuICogQGNsYXNzIEZhYnJpY0NvbnRyYWN0U2VxdWVuY2VcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBzZXEgPSBuZXcgRmFicmljQ29udHJhY3REQlNlcXVlbmNlKHsgbmFtZTogJ29yZGVyU2VxJywgdHlwZTogJ051bWJlcicsIGluY3JlbWVudEJ5OiAxLCBzdGFydFdpdGg6IDEgfSwgYWRhcHRlcik7XG4gKiBjb25zdCBuZXh0ID0gYXdhaXQgc2VxLm5leHQoY3R4KTsgLy8gMVxuICogY29uc3QgW2EsYixjXSA9IGF3YWl0IHNlcS5yYW5nZSgzLCBjdHgpOyAvLyBbMiwzLDRdXG4gKiBAbWVybWFpZFxuICogc2VxdWVuY2VEaWFncmFtXG4gKiAgIHBhcnRpY2lwYW50IEFwcFxuICogICBwYXJ0aWNpcGFudCBTZXF1ZW5jZVxuICogICBwYXJ0aWNpcGFudCBSZXBvXG4gKiAgIEFwcC0+PlNlcXVlbmNlOiBuZXh0KGN0eClcbiAqICAgU2VxdWVuY2UtPj5SZXBvOiByZWFkKG5hbWUsIGN0eClcbiAqICAgUmVwby0tPj5TZXF1ZW5jZTogY3VycmVudFxuICogICBTZXF1ZW5jZS0+PlJlcG86IHVwZGF0ZShjdXJyZW50K2luYylcbiAqICAgUmVwby0tPj5TZXF1ZW5jZTogc2F2ZWRcbiAqICAgU2VxdWVuY2UtLT4+QXBwOiBuZXh0IHZhbHVlXG4gKi9cbmV4cG9ydCBjbGFzcyBGYWJyaWNDb250cmFjdFNlcXVlbmNlIGV4dGVuZHMgU2VxdWVuY2Uge1xuICBwcm90ZWN0ZWQgcmVwbzogRmFicmljQ29udHJhY3RSZXBvc2l0b3J5PEN1c3RvbWl6YWJsZVNlcXVlbmNlPjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBvcHRpb25zOiBTZXF1ZW5jZU9wdGlvbnMsXG4gICAgYWRhcHRlcjogQWRhcHRlcjxhbnksIGFueSwgTWFuZ29RdWVyeSwgYW55LCBhbnk+LFxuICAgIGNvbGxlY3Rpb25zPzogc3RyaW5nW11cbiAgKSB7XG4gICAgc3VwZXIob3B0aW9ucyk7XG5cbiAgICBmb3IgKGNvbnN0IGNvbGxlY3Rpb24gb2YgY29sbGVjdGlvbnMgfHwgW10pIHtcbiAgICAgIHByaXZhdGVEYXRhKGNvbGxlY3Rpb24pKEN1c3RvbWl6YWJsZVNlcXVlbmNlKTtcbiAgICB9XG5cbiAgICB0aGlzLnJlcG8gPSBSZXBvc2l0b3J5LmZvck1vZGVsKEN1c3RvbWl6YWJsZVNlcXVlbmNlLCBhZGFwdGVyLmFsaWFzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAc3VtbWFyeSBSZXRyaWV2ZXMgdGhlIGN1cnJlbnQgdmFsdWUgZm9yIHRoZSBzZXF1ZW5jZVxuICAgKiBAcHJvdGVjdGVkXG4gICAqL1xuICBhc3luYyBjdXJyZW50KFxuICAgIGN0eD86IENvbnRleHQ8UmVwb3NpdG9yeUZsYWdzPlxuICApOiBQcm9taXNlPHN0cmluZyB8IG51bWJlciB8IGJpZ2ludD4ge1xuICAgIGlmICghY3R4KSB0aHJvdyBuZXcgTWlzc2luZ0NvbnRleHRFcnJvcihcIkNvbnRleHQgaXMgcmVxdWlyZWRcIik7XG4gICAgY29uc3QgeyBuYW1lLCBzdGFydFdpdGggfSA9IHRoaXMub3B0aW9ucztcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc2VxdWVuY2U6IEN1c3RvbWl6YWJsZVNlcXVlbmNlID0gYXdhaXQgdGhpcy5yZXBvLnJlYWQoXG4gICAgICAgIG5hbWUgYXMgc3RyaW5nLFxuICAgICAgICBjdHhcbiAgICAgICk7XG4gICAgICByZXR1cm4gdGhpcy5wYXJzZShzZXF1ZW5jZS5jdXJyZW50IGFzIHN0cmluZyB8IG51bWJlcik7XG4gICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICBpZiAoZSBpbnN0YW5jZW9mIE5vdEZvdW5kRXJyb3IpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBzdGFydFdpdGggPT09IFwidW5kZWZpbmVkXCIpXG4gICAgICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXG4gICAgICAgICAgICBcIlN0YXJ0aW5nIHZhbHVlIGlzIG5vdCBkZWZpbmVkIGZvciBhIG5vbiBleGlzdGluZyBzZXF1ZW5jZVwiXG4gICAgICAgICAgKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5wYXJzZShzdGFydFdpdGgpO1xuICAgICAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXG4gICAgICAgICAgICBgRmFpbGVkIHRvIHBhcnNlIGluaXRpYWwgdmFsdWUgZm9yIHNlcXVlbmNlICR7c3RhcnRXaXRofTogJHtlfWBcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihcbiAgICAgICAgYEZhaWxlZCB0byByZXRyaWV2ZSBjdXJyZW50IHZhbHVlIGZvciBzZXF1ZW5jZSAke25hbWV9OiAke2V9YFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHN1bW1hcnkgUGFyc2VzIHRoZSB7QGxpbmsgU2VxdWVuY2V9IHZhbHVlXG4gICAqXG4gICAqIEBwcm90ZWN0ZWRcbiAgICogQHBhcmFtIHZhbHVlXG4gICAqL1xuICBwcml2YXRlIHBhcnNlKHZhbHVlOiBzdHJpbmcgfCBudW1iZXIgfCBiaWdpbnQpOiBzdHJpbmcgfCBudW1iZXIgfCBiaWdpbnQge1xuICAgIHJldHVybiBTZXF1ZW5jZS5wYXJzZVZhbHVlKHRoaXMub3B0aW9ucy50eXBlLCB2YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogQHN1bW1hcnkgaW5jcmVtZW50cyB0aGUgc2VxdWVuY2VcbiAgICogQGRlc2NyaXB0aW9uIFNlcXVlbmNlIHNwZWNpZmljIGltcGxlbWVudGF0aW9uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgbnVtYmVyIHwgYmlnaW50fSBjdXJyZW50XG4gICAqIEBwYXJhbSBjb3VudFxuICAgKiBAcHJvdGVjdGVkXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGluY3JlbWVudChcbiAgICBjdXJyZW50OiBzdHJpbmcgfCBudW1iZXIgfCBiaWdpbnQsXG4gICAgY291bnQ/OiBudW1iZXIsXG4gICAgY3R4PzogRmFicmljQ29udHJhY3RDb250ZXh0XG4gICk6IFByb21pc2U8c3RyaW5nIHwgbnVtYmVyIHwgYmlnaW50PiB7XG4gICAgaWYgKCFjdHgpIHRocm93IG5ldyBNaXNzaW5nQ29udGV4dEVycm9yKFwiQ29udGV4dCBpcyByZXF1aXJlZFwiKTtcbiAgICBjb25zdCB7IHR5cGUsIGluY3JlbWVudEJ5LCBuYW1lIH0gPSB0aGlzLm9wdGlvbnM7XG4gICAgbGV0IG5leHQ6IHN0cmluZyB8IG51bWJlciB8IGJpZ2ludDtcbiAgICBjb25zdCB0b0luY3JlbWVudEJ5ID0gY291bnQgfHwgaW5jcmVtZW50Qnk7XG4gICAgaWYgKHRvSW5jcmVtZW50QnkgJSBpbmNyZW1lbnRCeSAhPT0gMClcbiAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKFxuICAgICAgICBgVmFsdWUgdG8gaW5jcmVtZW50IGRvZXMgbm90IGNvbnNpZGVyIHRoZSBpbmNyZW1lbnRCeSBzZXR0aW5nOiAke2luY3JlbWVudEJ5fWBcbiAgICAgICk7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlIFwiTnVtYmVyXCI6XG4gICAgICAgIG5leHQgPSAodGhpcy5wYXJzZShjdXJyZW50KSBhcyBudW1iZXIpICsgdG9JbmNyZW1lbnRCeTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiQmlnSW50XCI6XG4gICAgICAgIG5leHQgPSAodGhpcy5wYXJzZShjdXJyZW50KSBhcyBiaWdpbnQpICsgQmlnSW50KHRvSW5jcmVtZW50QnkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKFwiU2hvdWxkIG5ldmVyIGhhcHBlblwiKTtcbiAgICB9XG4gICAgbGV0IHNlcTogQ3VzdG9taXphYmxlU2VxdWVuY2U7XG4gICAgdHJ5IHtcbiAgICAgIHNlcSA9IGF3YWl0IHRoaXMucmVwby51cGRhdGUoXG4gICAgICAgIG5ldyBDdXN0b21pemFibGVTZXF1ZW5jZSh7IGlkOiBuYW1lLCBjdXJyZW50OiBuZXh0IH0pLFxuICAgICAgICBjdHhcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICBpZiAoIShlIGluc3RhbmNlb2YgTm90Rm91bmRFcnJvcikpIHRocm93IGU7XG4gICAgICBzZXEgPSBhd2FpdCB0aGlzLnJlcG8uY3JlYXRlKFxuICAgICAgICBuZXcgQ3VzdG9taXphYmxlU2VxdWVuY2UoeyBpZDogbmFtZSwgY3VycmVudDogbmV4dCB9KSxcbiAgICAgICAgY3R4XG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBzZXEuY3VycmVudCBhcyBzdHJpbmcgfCBudW1iZXIgfCBiaWdpbnQ7XG4gIH1cblxuICAvKipcbiAgICogQHN1bW1hcnkgR2VuZXJhdGVzIHRoZSBuZXh0IHZhbHVlIGluIHRoIHNlcXVlbmNlXG4gICAqIEBkZXNjcmlwdGlvbiBjYWxscyB7QGxpbmsgU2VxdWVuY2UjcGFyc2V9IG9uIHRoZSBjdXJyZW50IHZhbHVlXG4gICAqIGZvbGxvd2VkIGJ5IHtAbGluayBTZXF1ZW5jZSNpbmNyZW1lbnR9XG4gICAqXG4gICAqL1xuICBhc3luYyBuZXh0KGN0eD86IEZhYnJpY0NvbnRyYWN0Q29udGV4dCk6IFByb21pc2U8bnVtYmVyIHwgc3RyaW5nIHwgYmlnaW50PiB7XG4gICAgaWYgKCFjdHgpIHRocm93IG5ldyBNaXNzaW5nQ29udGV4dEVycm9yKFwiQ29udGV4dCBpcyByZXF1aXJlZFwiKTtcbiAgICBjb25zdCBjdXJyZW50ID0gYXdhaXQgdGhpcy5jdXJyZW50KGN0eCk7XG4gICAgcmV0dXJuIHRoaXMuaW5jcmVtZW50KGN1cnJlbnQsIHVuZGVmaW5lZCwgY3R4KTtcbiAgfVxuXG4gIGFzeW5jIHJhbmdlKFxuICAgIGNvdW50OiBudW1iZXIsXG4gICAgY3R4PzogRmFicmljQ29udHJhY3RDb250ZXh0XG4gICk6IFByb21pc2U8KG51bWJlciB8IHN0cmluZyB8IGJpZ2ludClbXT4ge1xuICAgIGlmICghY3R4KSB0aHJvdyBuZXcgTWlzc2luZ0NvbnRleHRFcnJvcihcIkNvbnRleHQgaXMgcmVxdWlyZWRcIik7XG4gICAgY29uc3QgY3VycmVudCA9IChhd2FpdCB0aGlzLmN1cnJlbnQoY3R4KSkgYXMgbnVtYmVyO1xuICAgIGNvbnN0IGluY3JlbWVudEJ5ID0gdGhpcy5wYXJzZSh0aGlzLm9wdGlvbnMuaW5jcmVtZW50QnkpIGFzIG51bWJlcjtcbiAgICBjb25zdCBuZXh0OiBzdHJpbmcgfCBudW1iZXIgfCBiaWdpbnQgPSBhd2FpdCB0aGlzLmluY3JlbWVudChcbiAgICAgIGN1cnJlbnQsXG4gICAgICAodGhpcy5wYXJzZShjb3VudCkgYXMgbnVtYmVyKSAqIGluY3JlbWVudEJ5LFxuICAgICAgY3R4XG4gICAgKTtcbiAgICBjb25zdCByYW5nZTogKG51bWJlciB8IHN0cmluZyB8IGJpZ2ludClbXSA9IFtdO1xuICAgIGZvciAobGV0IGk6IG51bWJlciA9IDE7IGkgPD0gY291bnQ7IGkrKykge1xuICAgICAgcmFuZ2UucHVzaChjdXJyZW50ICsgaW5jcmVtZW50QnkgKiAodGhpcy5wYXJzZShpKSBhcyBudW1iZXIpKTtcbiAgICB9XG4gICAgaWYgKHJhbmdlW3JhbmdlLmxlbmd0aCAtIDFdICE9PSBuZXh0KVxuICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXCJNaXNjYWxjdWxhdGlvbiBvZiByYW5nZVwiKTtcbiAgICByZXR1cm4gcmFuZ2U7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { Context, RepositoryFlags } from "@decaf-ts/db-decorators";
|
|
2
|
+
import { Adapter, Sequence, SequenceOptions } from "@decaf-ts/core";
|
|
3
|
+
import { MangoQuery } from "@decaf-ts/for-couchdb";
|
|
4
|
+
import { FabricContractContext } from "./ContractContext";
|
|
5
|
+
import { FabricContractRepository } from "./FabricContractRepository";
|
|
6
|
+
import { CustomizableSequence } from "./PrivateSequence";
|
|
7
|
+
/**
|
|
8
|
+
* @description Abstract implementation of a Sequence for Fabric contracts
|
|
9
|
+
* @summary Provides the basic functionality for sequences backed by the FabricContractRepository storing values in CouchDB-like state, including current, next and range operations.
|
|
10
|
+
* @param {SequenceOptions} options - Sequence configuration such as name, type, startWith and incrementBy
|
|
11
|
+
* @return {void}
|
|
12
|
+
* @class FabricContractSequence
|
|
13
|
+
* @example
|
|
14
|
+
* const seq = new FabricContractDBSequence({ name: 'orderSeq', type: 'Number', incrementBy: 1, startWith: 1 }, adapter);
|
|
15
|
+
* const next = await seq.next(ctx); // 1
|
|
16
|
+
* const [a,b,c] = await seq.range(3, ctx); // [2,3,4]
|
|
17
|
+
* @mermaid
|
|
18
|
+
* sequenceDiagram
|
|
19
|
+
* participant App
|
|
20
|
+
* participant Sequence
|
|
21
|
+
* participant Repo
|
|
22
|
+
* App->>Sequence: next(ctx)
|
|
23
|
+
* Sequence->>Repo: read(name, ctx)
|
|
24
|
+
* Repo-->>Sequence: current
|
|
25
|
+
* Sequence->>Repo: update(current+inc)
|
|
26
|
+
* Repo-->>Sequence: saved
|
|
27
|
+
* Sequence-->>App: next value
|
|
28
|
+
*/
|
|
29
|
+
export declare class FabricContractSequence extends Sequence {
|
|
30
|
+
protected repo: FabricContractRepository<CustomizableSequence>;
|
|
31
|
+
constructor(options: SequenceOptions, adapter: Adapter<any, any, MangoQuery, any, any>, collections?: string[]);
|
|
32
|
+
/**
|
|
33
|
+
* @summary Retrieves the current value for the sequence
|
|
34
|
+
* @protected
|
|
35
|
+
*/
|
|
36
|
+
current(ctx?: Context<RepositoryFlags>): Promise<string | number | bigint>;
|
|
37
|
+
/**
|
|
38
|
+
* @summary Parses the {@link Sequence} value
|
|
39
|
+
*
|
|
40
|
+
* @protected
|
|
41
|
+
* @param value
|
|
42
|
+
*/
|
|
43
|
+
private parse;
|
|
44
|
+
/**
|
|
45
|
+
* @summary increments the sequence
|
|
46
|
+
* @description Sequence specific implementation
|
|
47
|
+
*
|
|
48
|
+
* @param {string | number | bigint} current
|
|
49
|
+
* @param count
|
|
50
|
+
* @protected
|
|
51
|
+
*/
|
|
52
|
+
private increment;
|
|
53
|
+
/**
|
|
54
|
+
* @summary Generates the next value in th sequence
|
|
55
|
+
* @description calls {@link Sequence#parse} on the current value
|
|
56
|
+
* followed by {@link Sequence#increment}
|
|
57
|
+
*
|
|
58
|
+
*/
|
|
59
|
+
next(ctx?: FabricContractContext): Promise<number | string | bigint>;
|
|
60
|
+
range(count: number, ctx?: FabricContractContext): Promise<(number | string | bigint)[]>;
|
|
61
|
+
}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.FabricStatement = void 0;
|
|
4
|
+
const for_couchdb_1 = require("@decaf-ts/for-couchdb");
|
|
5
|
+
const db_decorators_1 = require("@decaf-ts/db-decorators");
|
|
6
|
+
const core_1 = require("@decaf-ts/core");
|
|
7
|
+
/**
|
|
8
|
+
* @description Statement wrapper for executing Mango queries within Fabric contracts
|
|
9
|
+
* @summary Bridges CouchDB-style queries to Fabric via the FabricContractAdapter, handling identity and primary key projection when needed.
|
|
10
|
+
* @template M - Model type this statement operates on
|
|
11
|
+
* @template R - Result type returned by the statement
|
|
12
|
+
* @param {FabricContractAdapter} adapter - The Fabric contract adapter used for raw execution
|
|
13
|
+
* @param {FabricContractContext} ctx - The Fabric contract context carrying stub and identity
|
|
14
|
+
* @return {void}
|
|
15
|
+
* @class FabricStatement
|
|
16
|
+
* @example
|
|
17
|
+
* const stmt = new FabricStatement<MyModel, MyModel[]>(adapter, ctx);
|
|
18
|
+
* const result = await stmt.raw<MyModel[]>({ selector: { type: 'MyModel' } });
|
|
19
|
+
* @mermaid
|
|
20
|
+
* sequenceDiagram
|
|
21
|
+
* participant App
|
|
22
|
+
* participant Statement
|
|
23
|
+
* participant Adapter
|
|
24
|
+
* participant Ledger
|
|
25
|
+
* App->>Statement: raw({ selector })
|
|
26
|
+
* Statement->>Adapter: adapter.raw(mango, true, ctx)
|
|
27
|
+
* Adapter->>Ledger: Evaluate query
|
|
28
|
+
* Adapter-->>Statement: rows
|
|
29
|
+
* Statement-->>App: models
|
|
30
|
+
*/
|
|
31
|
+
class FabricStatement extends for_couchdb_1.CouchDBStatement {
|
|
32
|
+
constructor(adapter, ctx) {
|
|
33
|
+
super(adapter);
|
|
34
|
+
this.ctx = ctx;
|
|
35
|
+
}
|
|
36
|
+
async raw(rawInput) {
|
|
37
|
+
const results = await this.adapter.raw(rawInput, true, this.ctx);
|
|
38
|
+
const pkDef = (0, db_decorators_1.findPrimaryKey)(new this.fromSelector());
|
|
39
|
+
const pkAttr = pkDef.id;
|
|
40
|
+
const type = pkDef.props.type;
|
|
41
|
+
if (!this.selectSelector)
|
|
42
|
+
return results.map((r) => this.processRecord(r, pkAttr, type));
|
|
43
|
+
return results;
|
|
44
|
+
}
|
|
45
|
+
build() {
|
|
46
|
+
const selectors = {};
|
|
47
|
+
selectors[for_couchdb_1.CouchDBKeys.TABLE] = {};
|
|
48
|
+
selectors[for_couchdb_1.CouchDBKeys.TABLE] = core_1.Repository.table(this.fromSelector);
|
|
49
|
+
const query = { selector: selectors };
|
|
50
|
+
if (this.selectSelector)
|
|
51
|
+
query.fields = this.selectSelector;
|
|
52
|
+
if (this.whereCondition) {
|
|
53
|
+
const condition = this.parseCondition(core_1.Condition.and(this.whereCondition, core_1.Condition.attribute(for_couchdb_1.CouchDBKeys.TABLE).eq(query.selector[for_couchdb_1.CouchDBKeys.TABLE]))).selector;
|
|
54
|
+
const selectorKeys = Object.keys(condition);
|
|
55
|
+
if (selectorKeys.length === 1 &&
|
|
56
|
+
Object.values(for_couchdb_1.CouchDBGroupOperator).indexOf(selectorKeys[0]) !== -1)
|
|
57
|
+
switch (selectorKeys[0]) {
|
|
58
|
+
case for_couchdb_1.CouchDBGroupOperator.AND:
|
|
59
|
+
condition[for_couchdb_1.CouchDBGroupOperator.AND] = [
|
|
60
|
+
...Object.values(condition[for_couchdb_1.CouchDBGroupOperator.AND]).reduce((accum, val) => {
|
|
61
|
+
const keys = Object.keys(val);
|
|
62
|
+
if (keys.length !== 1)
|
|
63
|
+
throw new Error("Too many keys in query selector. should be one");
|
|
64
|
+
const k = keys[0];
|
|
65
|
+
if (k === for_couchdb_1.CouchDBGroupOperator.AND)
|
|
66
|
+
accum.push(...val[k]);
|
|
67
|
+
else
|
|
68
|
+
accum.push(val);
|
|
69
|
+
return accum;
|
|
70
|
+
}, []),
|
|
71
|
+
];
|
|
72
|
+
query.selector = condition;
|
|
73
|
+
break;
|
|
74
|
+
case for_couchdb_1.CouchDBGroupOperator.OR: {
|
|
75
|
+
const s = {};
|
|
76
|
+
s[for_couchdb_1.CouchDBGroupOperator.AND] = [
|
|
77
|
+
condition,
|
|
78
|
+
...Object.entries(query.selector).map(([key, val]) => {
|
|
79
|
+
const result = {};
|
|
80
|
+
result[key] = val;
|
|
81
|
+
return result;
|
|
82
|
+
}),
|
|
83
|
+
];
|
|
84
|
+
query.selector = s;
|
|
85
|
+
break;
|
|
86
|
+
}
|
|
87
|
+
default:
|
|
88
|
+
throw new Error("This should be impossible");
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
Object.entries(condition).forEach(([key, val]) => {
|
|
92
|
+
if (query.selector[key])
|
|
93
|
+
console.warn(`A ${key} query param is about to be overridden: ${query.selector[key]} by ${val}`);
|
|
94
|
+
query.selector[key] = val;
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
if (this.orderBySelector) {
|
|
99
|
+
query.sort = query.sort || [];
|
|
100
|
+
query.selector = query.selector || {};
|
|
101
|
+
const [selector, value] = this.orderBySelector;
|
|
102
|
+
const rec = {};
|
|
103
|
+
rec[selector] = value;
|
|
104
|
+
query.sort.push(rec);
|
|
105
|
+
if (!query.selector[selector]) {
|
|
106
|
+
query.selector[selector] = {};
|
|
107
|
+
query.selector[selector][for_couchdb_1.CouchDBOperator.BIGGER] =
|
|
108
|
+
null;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
if (this.limitSelector)
|
|
112
|
+
query.limit = this.limitSelector;
|
|
113
|
+
if (this.offsetSelector)
|
|
114
|
+
query.skip = this.offsetSelector;
|
|
115
|
+
return query;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
exports.FabricStatement = FabricStatement;
|
|
119
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmFicmljQ29udHJhY3RTdGF0ZW1lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29udHJhY3RzL0ZhYnJpY0NvbnRyYWN0U3RhdGVtZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLHVEQVMrQjtBQUUvQiwyREFBeUQ7QUFFekQseUNBQXVFO0FBRXZFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXVCRztBQUNILE1BQWEsZUFBb0MsU0FBUSw4QkFHeEQ7SUFDQyxZQUNFLE9BQThCLEVBQ2IsR0FBMEI7UUFFM0MsS0FBSyxDQUFDLE9BQXdELENBQUMsQ0FBQztRQUYvQyxRQUFHLEdBQUgsR0FBRyxDQUF1QjtJQUc3QyxDQUFDO0lBRVEsS0FBSyxDQUFDLEdBQUcsQ0FBSSxRQUFvQjtRQUN4QyxNQUFNLE9BQU8sR0FBVSxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRXhFLE1BQU0sS0FBSyxHQUFHLElBQUEsOEJBQWMsRUFBQyxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDO1FBQ3RELE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDeEIsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7UUFFOUIsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjO1lBQ3RCLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFNLENBQUM7UUFDdEUsT0FBTyxPQUFZLENBQUM7SUFDdEIsQ0FBQztJQUVRLEtBQUs7UUFDWixNQUFNLFNBQVMsR0FBa0IsRUFBRSxDQUFDO1FBQ3BDLFNBQVMsQ0FBQyx5QkFBVyxDQUFDLEtBQUssQ0FB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LElBQUksSUFBSSxDQUFDLGFBQWE7WUFBRSxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7UUFFekQsSUFBSSxJQUFJLENBQUMsY0FBYztZQUFFLEtBQUssQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztRQUUxRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7Q0FDRjtBQWxIRCwwQ0FrSEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNb2RlbCB9IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdG9yLXZhbGlkYXRpb25cIjtcbmltcG9ydCB7XG4gIENvdWNoREJBZGFwdGVyLFxuICBDb3VjaERCR3JvdXBPcGVyYXRvcixcbiAgQ291Y2hEQktleXMsXG4gIENvdWNoREJPcGVyYXRvcixcbiAgQ291Y2hEQlN0YXRlbWVudCxcbiAgTWFuZ29PcGVyYXRvcixcbiAgTWFuZ29RdWVyeSxcbiAgTWFuZ29TZWxlY3Rvcixcbn0gZnJvbSBcIkBkZWNhZi10cy9mb3ItY291Y2hkYlwiO1xuaW1wb3J0IHsgRmFicmljQ29udHJhY3RBZGFwdGVyIH0gZnJvbSBcIi4vQ29udHJhY3RBZGFwdGVyXCI7XG5pbXBvcnQgeyBmaW5kUHJpbWFyeUtleSB9IGZyb20gXCJAZGVjYWYtdHMvZGItZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHsgRmFicmljQ29udHJhY3RDb250ZXh0IH0gZnJvbSBcIi4vQ29udHJhY3RDb250ZXh0XCI7XG5pbXBvcnQgeyBDb25kaXRpb24sIE9yZGVyRGlyZWN0aW9uLCBSZXBvc2l0b3J5IH0gZnJvbSBcIkBkZWNhZi10cy9jb3JlXCI7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFN0YXRlbWVudCB3cmFwcGVyIGZvciBleGVjdXRpbmcgTWFuZ28gcXVlcmllcyB3aXRoaW4gRmFicmljIGNvbnRyYWN0c1xuICogQHN1bW1hcnkgQnJpZGdlcyBDb3VjaERCLXN0eWxlIHF1ZXJpZXMgdG8gRmFicmljIHZpYSB0aGUgRmFicmljQ29udHJhY3RBZGFwdGVyLCBoYW5kbGluZyBpZGVudGl0eSBhbmQgcHJpbWFyeSBrZXkgcHJvamVjdGlvbiB3aGVuIG5lZWRlZC5cbiAqIEB0ZW1wbGF0ZSBNIC0gTW9kZWwgdHlwZSB0aGlzIHN0YXRlbWVudCBvcGVyYXRlcyBvblxuICogQHRlbXBsYXRlIFIgLSBSZXN1bHQgdHlwZSByZXR1cm5lZCBieSB0aGUgc3RhdGVtZW50XG4gKiBAcGFyYW0ge0ZhYnJpY0NvbnRyYWN0QWRhcHRlcn0gYWRhcHRlciAtIFRoZSBGYWJyaWMgY29udHJhY3QgYWRhcHRlciB1c2VkIGZvciByYXcgZXhlY3V0aW9uXG4gKiBAcGFyYW0ge0ZhYnJpY0NvbnRyYWN0Q29udGV4dH0gY3R4IC0gVGhlIEZhYnJpYyBjb250cmFjdCBjb250ZXh0IGNhcnJ5aW5nIHN0dWIgYW5kIGlkZW50aXR5XG4gKiBAcmV0dXJuIHt2b2lkfVxuICogQGNsYXNzIEZhYnJpY1N0YXRlbWVudFxuICogQGV4YW1wbGVcbiAqIGNvbnN0IHN0bXQgPSBuZXcgRmFicmljU3RhdGVtZW50PE15TW9kZWwsIE15TW9kZWxbXT4oYWRhcHRlciwgY3R4KTtcbiAqIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHN0bXQucmF3PE15TW9kZWxbXT4oeyBzZWxlY3RvcjogeyB0eXBlOiAnTXlNb2RlbCcgfSB9KTtcbiAqIEBtZXJtYWlkXG4gKiBzZXF1ZW5jZURpYWdyYW1cbiAqICAgcGFydGljaXBhbnQgQXBwXG4gKiAgIHBhcnRpY2lwYW50IFN0YXRlbWVudFxuICogICBwYXJ0aWNpcGFudCBBZGFwdGVyXG4gKiAgIHBhcnRpY2lwYW50IExlZGdlclxuICogICBBcHAtPj5TdGF0ZW1lbnQ6IHJhdyh7IHNlbGVjdG9yIH0pXG4gKiAgIFN0YXRlbWVudC0+PkFkYXB0ZXI6IGFkYXB0ZXIucmF3KG1hbmdvLCB0cnVlLCBjdHgpXG4gKiAgIEFkYXB0ZXItPj5MZWRnZXI6IEV2YWx1YXRlIHF1ZXJ5XG4gKiAgIEFkYXB0ZXItLT4+U3RhdGVtZW50OiByb3dzXG4gKiAgIFN0YXRlbWVudC0tPj5BcHA6IG1vZGVsc1xuICovXG5leHBvcnQgY2xhc3MgRmFicmljU3RhdGVtZW50PE0gZXh0ZW5kcyBNb2RlbCwgUj4gZXh0ZW5kcyBDb3VjaERCU3RhdGVtZW50PFxuICBNLFxuICBSXG4+IHtcbiAgY29uc3RydWN0b3IoXG4gICAgYWRhcHRlcjogRmFicmljQ29udHJhY3RBZGFwdGVyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY3R4OiBGYWJyaWNDb250cmFjdENvbnRleHRcbiAgKSB7XG4gICAgc3VwZXIoYWRhcHRlciBhcyB1bmtub3duIGFzIENvdWNoREJBZGFwdGVyPGFueSwgYW55LCBhbnksIGFueT4pO1xuICB9XG5cbiAgb3ZlcnJpZGUgYXN5bmMgcmF3PFI+KHJhd0lucHV0OiBNYW5nb1F1ZXJ5KTogUHJvbWlzZTxSPiB7XG4gICAgY29uc3QgcmVzdWx0czogYW55W10gPSBhd2FpdCB0aGlzLmFkYXB0ZXIucmF3KHJhd0lucHV0LCB0cnVlLCB0aGlzLmN0eCk7XG5cbiAgICBjb25zdCBwa0RlZiA9IGZpbmRQcmltYXJ5S2V5KG5ldyB0aGlzLmZyb21TZWxlY3RvcigpKTtcbiAgICBjb25zdCBwa0F0dHIgPSBwa0RlZi5pZDtcbiAgICBjb25zdCB0eXBlID0gcGtEZWYucHJvcHMudHlwZTtcblxuICAgIGlmICghdGhpcy5zZWxlY3RTZWxlY3RvcilcbiAgICAgIHJldHVybiByZXN1bHRzLm1hcCgocikgPT4gdGhpcy5wcm9jZXNzUmVjb3JkKHIsIHBrQXR0ciwgdHlwZSkpIGFzIFI7XG4gICAgcmV0dXJuIHJlc3VsdHMgYXMgUjtcbiAgfVxuXG4gIG92ZXJyaWRlIGJ1aWxkKCk6IE1hbmdvUXVlcnkge1xuICAgIGNvbnN0IHNlbGVjdG9yczogTWFuZ29TZWxlY3RvciA9IHt9O1xuICAgIHNlbGVjdG9yc1tDb3VjaERCS2V5cy5UQUJMRV0gPSB7fTtcbiAgICBzZWxlY3RvcnNbQ291Y2hEQktleXMuVEFCTEVdID0gUmVwb3NpdG9yeS50YWJsZSh0aGlzLmZyb21TZWxlY3Rvcik7XG4gICAgY29uc3QgcXVlcnk6IE1hbmdvUXVlcnkgPSB7IHNlbGVjdG9yOiBzZWxlY3RvcnMgfTtcbiAgICBpZiAodGhpcy5zZWxlY3RTZWxlY3RvcikgcXVlcnkuZmllbGRzID0gdGhpcy5zZWxlY3RTZWxlY3RvciBhcyBzdHJpbmdbXTtcblxuICAgIGlmICh0aGlzLndoZXJlQ29uZGl0aW9uKSB7XG4gICAgICBjb25zdCBjb25kaXRpb246IE1hbmdvU2VsZWN0b3IgPSB0aGlzLnBhcnNlQ29uZGl0aW9uKFxuICAgICAgICBDb25kaXRpb24uYW5kKFxuICAgICAgICAgIHRoaXMud2hlcmVDb25kaXRpb24sXG4gICAgICAgICAgQ29uZGl0aW9uLmF0dHJpYnV0ZTxNPihDb3VjaERCS2V5cy5UQUJMRSBhcyBrZXlvZiBNKS5lcShcbiAgICAgICAgICAgIHF1ZXJ5LnNlbGVjdG9yW0NvdWNoREJLZXlzLlRBQkxFXVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKS5zZWxlY3RvcjtcbiAgICAgIGNvbnN0IHNlbGVjdG9yS2V5cyA9IE9iamVjdC5rZXlzKGNvbmRpdGlvbikgYXMgTWFuZ29PcGVyYXRvcltdO1xuICAgICAgaWYgKFxuICAgICAgICBzZWxlY3RvcktleXMubGVuZ3RoID09PSAxICYmXG4gICAgICAgIE9iamVjdC52YWx1ZXMoQ291Y2hEQkdyb3VwT3BlcmF0b3IpLmluZGV4T2Yoc2VsZWN0b3JLZXlzWzBdKSAhPT0gLTFcbiAgICAgIClcbiAgICAgICAgc3dpdGNoIChzZWxlY3RvcktleXNbMF0pIHtcbiAgICAgICAgICBjYXNlIENvdWNoREJHcm91cE9wZXJhdG9yLkFORDpcbiAgICAgICAgICAgIGNvbmRpdGlvbltDb3VjaERCR3JvdXBPcGVyYXRvci5BTkRdID0gW1xuICAgICAgICAgICAgICAuLi5PYmplY3QudmFsdWVzKFxuICAgICAgICAgICAgICAgIGNvbmRpdGlvbltDb3VjaERCR3JvdXBPcGVyYXRvci5BTkRdIGFzIE1hbmdvU2VsZWN0b3JcbiAgICAgICAgICAgICAgKS5yZWR1Y2UoKGFjY3VtOiBNYW5nb1NlbGVjdG9yW10sIHZhbDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHZhbCk7XG4gICAgICAgICAgICAgICAgaWYgKGtleXMubGVuZ3RoICE9PSAxKVxuICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgICAgICBcIlRvbyBtYW55IGtleXMgaW4gcXVlcnkgc2VsZWN0b3IuIHNob3VsZCBiZSBvbmVcIlxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBjb25zdCBrID0ga2V5c1swXTtcbiAgICAgICAgICAgICAgICBpZiAoayA9PT0gQ291Y2hEQkdyb3VwT3BlcmF0b3IuQU5EKVxuICAgICAgICAgICAgICAgICAgYWNjdW0ucHVzaCguLi4odmFsW2tdIGFzIGFueVtdKSk7XG4gICAgICAgICAgICAgICAgZWxzZSBhY2N1bS5wdXNoKHZhbCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFjY3VtO1xuICAgICAgICAgICAgICB9LCBbXSksXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgcXVlcnkuc2VsZWN0b3IgPSBjb25kaXRpb247XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIENvdWNoREJHcm91cE9wZXJhdG9yLk9SOiB7XG4gICAgICAgICAgICBjb25zdCBzOiBSZWNvcmQ8YW55LCBhbnk+ID0ge307XG4gICAgICAgICAgICBzW0NvdWNoREJHcm91cE9wZXJhdG9yLkFORF0gPSBbXG4gICAgICAgICAgICAgIGNvbmRpdGlvbixcbiAgICAgICAgICAgICAgLi4uT2JqZWN0LmVudHJpZXMocXVlcnkuc2VsZWN0b3IpLm1hcCgoW2tleSwgdmFsXSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdDogUmVjb3JkPGFueSwgYW55PiA9IHt9O1xuICAgICAgICAgICAgICAgIHJlc3VsdFtrZXldID0gdmFsO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIHF1ZXJ5LnNlbGVjdG9yID0gcztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBzaG91bGQgYmUgaW1wb3NzaWJsZVwiKTtcbiAgICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIE9iamVjdC5lbnRyaWVzKGNvbmRpdGlvbikuZm9yRWFjaCgoW2tleSwgdmFsXSkgPT4ge1xuICAgICAgICAgIGlmIChxdWVyeS5zZWxlY3RvcltrZXldKVxuICAgICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgICBgQSAke2tleX0gcXVlcnkgcGFyYW0gaXMgYWJvdXQgdG8gYmUgb3ZlcnJpZGRlbjogJHtxdWVyeS5zZWxlY3RvcltrZXldfSBieSAke3ZhbH1gXG4gICAgICAgICAgICApO1xuICAgICAgICAgIHF1ZXJ5LnNlbGVjdG9yW2tleV0gPSB2YWw7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLm9yZGVyQnlTZWxlY3Rvcikge1xuICAgICAgcXVlcnkuc29ydCA9IHF1ZXJ5LnNvcnQgfHwgW107XG4gICAgICBxdWVyeS5zZWxlY3RvciA9IHF1ZXJ5LnNlbGVjdG9yIHx8ICh7fSBhcyBNYW5nb1NlbGVjdG9yKTtcbiAgICAgIGNvbnN0IFtzZWxlY3RvciwgdmFsdWVdID0gdGhpcy5vcmRlckJ5U2VsZWN0b3IgYXMgW1xuICAgICAgICBzdHJpbmcsXG4gICAgICAgIE9yZGVyRGlyZWN0aW9uLFxuICAgICAgXTtcbiAgICAgIGNvbnN0IHJlYzogYW55ID0ge307XG4gICAgICByZWNbc2VsZWN0b3JdID0gdmFsdWU7XG4gICAgICAocXVlcnkuc29ydCBhcyBhbnlbXSkucHVzaChyZWMgYXMgYW55KTtcbiAgICAgIGlmICghcXVlcnkuc2VsZWN0b3Jbc2VsZWN0b3JdKSB7XG4gICAgICAgIHF1ZXJ5LnNlbGVjdG9yW3NlbGVjdG9yXSA9IHt9IGFzIE1hbmdvU2VsZWN0b3I7XG4gICAgICAgIChxdWVyeS5zZWxlY3RvcltzZWxlY3Rvcl0gYXMgTWFuZ29TZWxlY3RvcilbQ291Y2hEQk9wZXJhdG9yLkJJR0dFUl0gPVxuICAgICAgICAgIG51bGw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubGltaXRTZWxlY3RvcikgcXVlcnkubGltaXQgPSB0aGlzLmxpbWl0U2VsZWN0b3I7XG5cbiAgICBpZiAodGhpcy5vZmZzZXRTZWxlY3RvcikgcXVlcnkuc2tpcCA9IHRoaXMub2Zmc2V0U2VsZWN0b3I7XG5cbiAgICByZXR1cm4gcXVlcnk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { Model } from "@decaf-ts/decorator-validation";
|
|
2
|
+
import { CouchDBStatement, MangoQuery } from "@decaf-ts/for-couchdb";
|
|
3
|
+
import { FabricContractAdapter } from "./ContractAdapter";
|
|
4
|
+
import { FabricContractContext } from "./ContractContext";
|
|
5
|
+
/**
|
|
6
|
+
* @description Statement wrapper for executing Mango queries within Fabric contracts
|
|
7
|
+
* @summary Bridges CouchDB-style queries to Fabric via the FabricContractAdapter, handling identity and primary key projection when needed.
|
|
8
|
+
* @template M - Model type this statement operates on
|
|
9
|
+
* @template R - Result type returned by the statement
|
|
10
|
+
* @param {FabricContractAdapter} adapter - The Fabric contract adapter used for raw execution
|
|
11
|
+
* @param {FabricContractContext} ctx - The Fabric contract context carrying stub and identity
|
|
12
|
+
* @return {void}
|
|
13
|
+
* @class FabricStatement
|
|
14
|
+
* @example
|
|
15
|
+
* const stmt = new FabricStatement<MyModel, MyModel[]>(adapter, ctx);
|
|
16
|
+
* const result = await stmt.raw<MyModel[]>({ selector: { type: 'MyModel' } });
|
|
17
|
+
* @mermaid
|
|
18
|
+
* sequenceDiagram
|
|
19
|
+
* participant App
|
|
20
|
+
* participant Statement
|
|
21
|
+
* participant Adapter
|
|
22
|
+
* participant Ledger
|
|
23
|
+
* App->>Statement: raw({ selector })
|
|
24
|
+
* Statement->>Adapter: adapter.raw(mango, true, ctx)
|
|
25
|
+
* Adapter->>Ledger: Evaluate query
|
|
26
|
+
* Adapter-->>Statement: rows
|
|
27
|
+
* Statement-->>App: models
|
|
28
|
+
*/
|
|
29
|
+
export declare class FabricStatement<M extends Model, R> extends CouchDBStatement<M, R> {
|
|
30
|
+
private readonly ctx;
|
|
31
|
+
constructor(adapter: FabricContractAdapter, ctx: FabricContractContext);
|
|
32
|
+
raw<R>(rawInput: MangoQuery): Promise<R>;
|
|
33
|
+
build(): MangoQuery;
|
|
34
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.CustomizableSequence = void 0;
|
|
13
|
+
const core_1 = require("@decaf-ts/core");
|
|
14
|
+
const decorator_validation_1 = require("@decaf-ts/decorator-validation");
|
|
15
|
+
const for_couchdb_1 = require("@decaf-ts/for-couchdb");
|
|
16
|
+
let CustomizableSequence = class CustomizableSequence extends core_1.BaseModel {
|
|
17
|
+
constructor(seq) {
|
|
18
|
+
super(seq);
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
exports.CustomizableSequence = CustomizableSequence;
|
|
22
|
+
__decorate([
|
|
23
|
+
(0, core_1.pk)(),
|
|
24
|
+
__metadata("design:type", String)
|
|
25
|
+
], CustomizableSequence.prototype, "id", void 0);
|
|
26
|
+
__decorate([
|
|
27
|
+
(0, decorator_validation_1.required)(),
|
|
28
|
+
(0, core_1.index)(),
|
|
29
|
+
__metadata("design:type", Object)
|
|
30
|
+
], CustomizableSequence.prototype, "current", void 0);
|
|
31
|
+
exports.CustomizableSequence = CustomizableSequence = __decorate([
|
|
32
|
+
(0, core_1.table)(for_couchdb_1.CouchDBKeys.SEQUENCE),
|
|
33
|
+
(0, decorator_validation_1.model)(),
|
|
34
|
+
__metadata("design:paramtypes", [Object])
|
|
35
|
+
], CustomizableSequence);
|
|
36
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUHJpdmF0ZVNlcXVlbmNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbnRyYWN0cy9Qcml2YXRlU2VxdWVuY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEseUNBQTZEO0FBQzdELHlFQUFnRjtBQUNoRix1REFBb0Q7QUFJN0MsSUFBTSxvQkFBb0IsR0FBMUIsTUFBTSxvQkFBcUIsU0FBUSxnQkFBUztJQWdCakQsWUFBWSxHQUFvQztRQUM5QyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDYixDQUFDO0NBQ0YsQ0FBQTtBQW5CWSxvREFBb0I7QUFNL0I7SUFEQyxJQUFBLFNBQUUsR0FBRTs7Z0RBQ087QUFRWjtJQUZDLElBQUEsK0JBQVEsR0FBRTtJQUNWLElBQUEsWUFBSyxHQUFFOztxREFDa0I7K0JBZGYsb0JBQW9CO0lBRmhDLElBQUEsWUFBSyxFQUFDLHlCQUFXLENBQUMsUUFBUSxDQUFDO0lBQzNCLElBQUEsNEJBQUssR0FBRTs7R0FDSyxvQkFBb0IsQ0FtQmhDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQmFzZU1vZGVsLCBpbmRleCwgcGssIHRhYmxlIH0gZnJvbSBcIkBkZWNhZi10cy9jb3JlXCI7XG5pbXBvcnQgeyBtb2RlbCwgdHlwZSBNb2RlbEFyZywgcmVxdWlyZWQgfSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uXCI7XG5pbXBvcnQgeyBDb3VjaERCS2V5cyB9IGZyb20gXCJAZGVjYWYtdHMvZm9yLWNvdWNoZGJcIjtcblxuQHRhYmxlKENvdWNoREJLZXlzLlNFUVVFTkNFKVxuQG1vZGVsKClcbmV4cG9ydCBjbGFzcyBDdXN0b21pemFibGVTZXF1ZW5jZSBleHRlbmRzIEJhc2VNb2RlbCB7XG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgc2VxdWVuY2VcbiAgICogQHN1bW1hcnkgUHJpbWFyeSBrZXkgZm9yIHRoZSBzZXF1ZW5jZSByZWNvcmRcbiAgICovXG4gIEBwaygpXG4gIGlkITogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIHNlcXVlbmNlXG4gICAqIEBzdW1tYXJ5IEN1cnJlbnQgc2VxdWVuY2UgdmFsdWUgdGhhdCBjYW4gYmUgaW5jcmVtZW50ZWRcbiAgICovXG4gIEByZXF1aXJlZCgpXG4gIEBpbmRleCgpXG4gIGN1cnJlbnQhOiBzdHJpbmcgfCBudW1iZXI7XG5cbiAgY29uc3RydWN0b3Ioc2VxPzogTW9kZWxBcmc8Q3VzdG9taXphYmxlU2VxdWVuY2U+KSB7XG4gICAgc3VwZXIoc2VxKTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { BaseModel } from "@decaf-ts/core";
|
|
2
|
+
import { type ModelArg } from "@decaf-ts/decorator-validation";
|
|
3
|
+
export declare class CustomizableSequence extends BaseModel {
|
|
4
|
+
/**
|
|
5
|
+
* @description The unique identifier for the sequence
|
|
6
|
+
* @summary Primary key for the sequence record
|
|
7
|
+
*/
|
|
8
|
+
id: string;
|
|
9
|
+
/**
|
|
10
|
+
* @description The current value of the sequence
|
|
11
|
+
* @summary Current sequence value that can be incremented
|
|
12
|
+
*/
|
|
13
|
+
current: string | number;
|
|
14
|
+
constructor(seq?: ModelArg<CustomizableSequence>);
|
|
15
|
+
}
|