@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,125 @@
|
|
|
1
|
+
import { Dispatch } from "@decaf-ts/core";
|
|
2
|
+
import { Client } from "@grpc/grpc-js";
|
|
3
|
+
import { FabricClientAdapter } from "./FabricClientAdapter";
|
|
4
|
+
/**
|
|
5
|
+
* @description Event dispatcher for Hyperledger Fabric chaincode events
|
|
6
|
+
* @summary Listens for and processes events emitted by Fabric chaincode, dispatching them to registered observers
|
|
7
|
+
* @template PeerConfig - Configuration type for connecting to a Fabric peer
|
|
8
|
+
* @param client - gRPC client for connecting to the Fabric network
|
|
9
|
+
* @class FabricClientDispatch
|
|
10
|
+
* @example
|
|
11
|
+
* ```typescript
|
|
12
|
+
* // Create a new FabricDispatch instance
|
|
13
|
+
* const client = await FabricAdapter.getClient(peerConfig);
|
|
14
|
+
* const dispatch = new FabricDispatch(client);
|
|
15
|
+
*
|
|
16
|
+
* // Configure the dispatch with peer configuration
|
|
17
|
+
* dispatch.configure(peerConfig);
|
|
18
|
+
*
|
|
19
|
+
* // Register an observer for a specific table and event
|
|
20
|
+
* dispatch.observe('users', 'create', (id) => {
|
|
21
|
+
* console.log(`User created: ${id}`);
|
|
22
|
+
* });
|
|
23
|
+
*
|
|
24
|
+
* // Start listening for events
|
|
25
|
+
* await dispatch.start();
|
|
26
|
+
* ```
|
|
27
|
+
* @mermaid
|
|
28
|
+
* sequenceDiagram
|
|
29
|
+
* participant Client
|
|
30
|
+
* participant FabricDispatch
|
|
31
|
+
* participant Gateway
|
|
32
|
+
* participant Network
|
|
33
|
+
* participant Chaincode
|
|
34
|
+
*
|
|
35
|
+
* Client->>FabricDispatch: new FabricDispatch(client)
|
|
36
|
+
* Client->>FabricDispatch: configure(peerConfig)
|
|
37
|
+
* Client->>FabricDispatch: observe(table, event, callback)
|
|
38
|
+
* Client->>FabricDispatch: start()
|
|
39
|
+
* FabricDispatch->>FabricDispatch: initialize()
|
|
40
|
+
* FabricDispatch->>Gateway: getGateway(config, client)
|
|
41
|
+
* Gateway->>Network: getNetwork(channel)
|
|
42
|
+
* Network->>Network: getChaincodeEvents(chaincodeName)
|
|
43
|
+
* FabricDispatch->>FabricDispatch: handleEvents()
|
|
44
|
+
* loop For each event
|
|
45
|
+
* Chaincode-->>FabricDispatch: ChaincodeEvent
|
|
46
|
+
* FabricDispatch->>FabricDispatch: parseEventName(eventName)
|
|
47
|
+
* FabricDispatch->>FabricDispatch: parsePayload(payload)
|
|
48
|
+
* FabricDispatch->>FabricDispatch: updateObservers(table, event, id)
|
|
49
|
+
* FabricDispatch-->>Client: callback(id)
|
|
50
|
+
* end
|
|
51
|
+
*/
|
|
52
|
+
export declare class FabricClientDispatch extends Dispatch {
|
|
53
|
+
protected client: Client;
|
|
54
|
+
/**
|
|
55
|
+
* @description Event listening stack for chaincode events
|
|
56
|
+
*/
|
|
57
|
+
private listeningStack?;
|
|
58
|
+
/**
|
|
59
|
+
* @description Text decoder for converting event payloads from bytes to strings
|
|
60
|
+
*/
|
|
61
|
+
private decoder;
|
|
62
|
+
/**
|
|
63
|
+
* @description Creates a new FabricDispatch instance
|
|
64
|
+
* @summary Initializes a dispatcher for Fabric chaincode events
|
|
65
|
+
* @param {Client} client - gRPC client for connecting to the Fabric network
|
|
66
|
+
*/
|
|
67
|
+
constructor(client: Client);
|
|
68
|
+
/**
|
|
69
|
+
* @description Closes the event listening connection
|
|
70
|
+
* @summary Stops listening for chaincode events and releases resources
|
|
71
|
+
* @return {Promise<void>} Promise that resolves when the connection is closed
|
|
72
|
+
*/
|
|
73
|
+
close(): Promise<void>;
|
|
74
|
+
/**
|
|
75
|
+
* @description Parses event payload from binary format
|
|
76
|
+
* @summary Converts a Uint8Array containing JSON to an object with an id property
|
|
77
|
+
* @param {Uint8Array} jsonBytes - The binary payload from the chaincode event
|
|
78
|
+
* @return {{ id: string }} The parsed payload containing the record ID
|
|
79
|
+
*/
|
|
80
|
+
private parsePayload;
|
|
81
|
+
/**
|
|
82
|
+
* @description Starts observing an adapter
|
|
83
|
+
* @summary Connects this dispatch to an adapter to monitor its operations
|
|
84
|
+
* @param {Adapter<any, any, any, any>} observer - The adapter to observe
|
|
85
|
+
* @return {void}
|
|
86
|
+
*/
|
|
87
|
+
observe(observer: FabricClientAdapter): void;
|
|
88
|
+
/**
|
|
89
|
+
* @description Updates observers about a database event
|
|
90
|
+
* @summary Notifies observers about a change in the database
|
|
91
|
+
* @param {string} table - The name of the table where the change occurred
|
|
92
|
+
* @param {OperationKeys|BulkCrudOperationKeys|string} event - The type of operation that occurred
|
|
93
|
+
* @param {any} payload - The event payload
|
|
94
|
+
* @return {Promise<void>} A promise that resolves when all observers have been notified
|
|
95
|
+
*/
|
|
96
|
+
updateObservers(table: string, event: string, payload: any): Promise<void>;
|
|
97
|
+
/**
|
|
98
|
+
* @description Processes incoming chaincode events
|
|
99
|
+
* @summary Listens for events from the chaincode and dispatches them to registered observers
|
|
100
|
+
* @return {Promise<void>} Promise that resolves when event handling stops
|
|
101
|
+
* @mermaid
|
|
102
|
+
* sequenceDiagram
|
|
103
|
+
* participant FabricDispatch
|
|
104
|
+
* participant EventStack
|
|
105
|
+
* participant EventParser
|
|
106
|
+
* participant Observers
|
|
107
|
+
*
|
|
108
|
+
* FabricDispatch->>FabricDispatch: handleEvents()
|
|
109
|
+
* FabricDispatch->>EventStack: for await (const evt of listeningStack)
|
|
110
|
+
* EventStack-->>FabricDispatch: ChaincodeEvent
|
|
111
|
+
* FabricDispatch->>EventParser: parseEventName(evt.eventName)
|
|
112
|
+
* EventParser-->>FabricDispatch: { table, event, owner }
|
|
113
|
+
* FabricDispatch->>FabricDispatch: Check if event is for this MSP
|
|
114
|
+
* FabricDispatch->>FabricDispatch: parsePayload(evt.payload)
|
|
115
|
+
* FabricDispatch->>Observers: updateObservers(table, event, payload.id)
|
|
116
|
+
* Observers-->>FabricDispatch: Callbacks executed
|
|
117
|
+
*/
|
|
118
|
+
protected handleEvents(): Promise<void>;
|
|
119
|
+
/**
|
|
120
|
+
* @description Initializes the event listener
|
|
121
|
+
* @summary Sets up the connection to the Fabric network and starts listening for chaincode events
|
|
122
|
+
* @return {Promise<void>} Promise that resolves when initialization is complete
|
|
123
|
+
*/
|
|
124
|
+
protected initialize(): Promise<void>;
|
|
125
|
+
}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.FabricClientRepository = void 0;
|
|
4
|
+
const core_1 = require("@decaf-ts/core");
|
|
5
|
+
const db_decorators_1 = require("@decaf-ts/db-decorators");
|
|
6
|
+
/**
|
|
7
|
+
* @description Repository implementation for Fabric client operations
|
|
8
|
+
* @summary Extends the generic Repository to prepare context and arguments for CRUD operations executed via a Fabric client Adapter, wiring RepositoryFlags and Fabric-specific overrides.
|
|
9
|
+
* @template M extends Model - The model type handled by this repository
|
|
10
|
+
* @param {Adapter<any, MangoQuery, FabricFlags, Context<FabricFlags>>} [adapter] - Optional adapter instance used to execute operations
|
|
11
|
+
* @param {Constructor<M>} [clazz] - Optional model constructor used by the repository
|
|
12
|
+
* @return {void}
|
|
13
|
+
* @class FabricClientRepository
|
|
14
|
+
* @example
|
|
15
|
+
* import { Repository } from "@decaf-ts/core";
|
|
16
|
+
* import { FabricClientRepository } from "@decaf-ts/for-fabric";
|
|
17
|
+
*
|
|
18
|
+
* class User extends Model { id!: string; name!: string; }
|
|
19
|
+
* const repo = new FabricClientRepository<User>();
|
|
20
|
+
* const created = await repo.create(new User({ id: "1", name: "Alice" }));
|
|
21
|
+
* const loaded = await repo.read("1");
|
|
22
|
+
*
|
|
23
|
+
* @mermaid
|
|
24
|
+
* sequenceDiagram
|
|
25
|
+
* participant App
|
|
26
|
+
* participant Repo as FabricClientRepository
|
|
27
|
+
* participant Adapter
|
|
28
|
+
* App->>Repo: create(model)
|
|
29
|
+
* Repo->>Repo: createPrefix(model, ...args)
|
|
30
|
+
* Repo->>Adapter: create(table, id, model, flags)
|
|
31
|
+
* Adapter-->>Repo: result
|
|
32
|
+
* Repo-->>App: model
|
|
33
|
+
*/
|
|
34
|
+
class FabricClientRepository extends core_1.Repository {
|
|
35
|
+
constructor(adapter, clazz) {
|
|
36
|
+
super(adapter, clazz);
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* @description Prepare arguments and context for create
|
|
40
|
+
* @summary Builds repository context and ensures the model is instantiated with the repository's class before delegating to the adapter
|
|
41
|
+
* @param {M} model - The model instance to create
|
|
42
|
+
* @param {...any[]} args - Additional operation arguments and flags
|
|
43
|
+
* @return {...any[]} Tuple containing the prepared model and the processed arguments
|
|
44
|
+
*/
|
|
45
|
+
async createPrefix(model, ...args) {
|
|
46
|
+
const contextArgs = await db_decorators_1.Context.args(db_decorators_1.OperationKeys.CREATE, this.class, args, this.adapter, this._overrides || {});
|
|
47
|
+
model = new this.class(model);
|
|
48
|
+
return [model, ...contextArgs.args];
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* @description Prepare arguments and context for bulk create
|
|
52
|
+
* @summary Resolves repository context for a createAll operation passing through models and processed arguments
|
|
53
|
+
* @param {M[]} models - Array of model instances to create
|
|
54
|
+
* @param {...any} args - Additional operation arguments and flags
|
|
55
|
+
* @return {...any[]} Tuple containing the models array and processed arguments
|
|
56
|
+
*/
|
|
57
|
+
async createAllPrefix(models, ...args) {
|
|
58
|
+
const contextArgs = await db_decorators_1.Context.args(db_decorators_1.OperationKeys.CREATE, this.class, args, this.adapter, this._overrides || {});
|
|
59
|
+
return [models, ...contextArgs.args];
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* @description Prepare arguments and context for read
|
|
63
|
+
* @summary Resolves repository context for a read operation and forwards the key and processed arguments
|
|
64
|
+
* @param {string} key - The model primary key to read
|
|
65
|
+
* @param {...any} args - Additional operation arguments and flags
|
|
66
|
+
* @return {...any[]} Tuple containing the key and processed arguments
|
|
67
|
+
*/
|
|
68
|
+
async readPrefix(key, ...args) {
|
|
69
|
+
const contextArgs = await db_decorators_1.Context.args(db_decorators_1.OperationKeys.READ, this.class, args, this.adapter, this._overrides || {});
|
|
70
|
+
return [key, ...contextArgs.args];
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* @description Prepare arguments and context for bulk read
|
|
74
|
+
* @summary Resolves repository context for a readAll operation and forwards the keys and processed arguments
|
|
75
|
+
* @param {(string[]|number[])} keys - Array of model primary keys to read
|
|
76
|
+
* @param {...any} args - Additional operation arguments and flags
|
|
77
|
+
* @return {...any[]} Tuple containing the keys and processed arguments
|
|
78
|
+
*/
|
|
79
|
+
async readAllPrefix(keys, ...args) {
|
|
80
|
+
const contextArgs = await db_decorators_1.Context.args(db_decorators_1.OperationKeys.READ, this.class, args, this.adapter, this._overrides || {});
|
|
81
|
+
return [keys, ...contextArgs.args];
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* @description Prepare arguments and context for update
|
|
85
|
+
* @summary Resolves repository context for an update operation and forwards the model and processed arguments
|
|
86
|
+
* @param {M} model - The model instance to update
|
|
87
|
+
* @param {...any[]} args - Additional operation arguments and flags
|
|
88
|
+
* @return {...any[]} Tuple containing the model and processed arguments
|
|
89
|
+
*/
|
|
90
|
+
async updatePrefix(model, ...args) {
|
|
91
|
+
const contextArgs = await db_decorators_1.Context.args(db_decorators_1.OperationKeys.UPDATE, this.class, args, this.adapter, this._overrides || {});
|
|
92
|
+
return [model, ...contextArgs.args];
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* @description Prepare arguments and context for bulk update
|
|
96
|
+
* @summary Resolves repository context for an updateAll operation and forwards the models and processed arguments
|
|
97
|
+
* @param {M[]} models - The model instances to update
|
|
98
|
+
* @param {...any} args - Additional operation arguments and flags
|
|
99
|
+
* @return {...any[]} Tuple containing the models and processed arguments
|
|
100
|
+
*/
|
|
101
|
+
async updateAllPrefix(models, ...args) {
|
|
102
|
+
const contextArgs = await db_decorators_1.Context.args(db_decorators_1.OperationKeys.UPDATE, this.class, args, this.adapter, this._overrides || {});
|
|
103
|
+
return [models, ...contextArgs.args];
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* @description Prepare arguments and context for delete
|
|
107
|
+
* @summary Resolves repository context for a delete operation, ensures the target exists via read, then forwards key and processed arguments
|
|
108
|
+
* @param {string|number} key - The model primary key to delete
|
|
109
|
+
* @param {...any} args - Additional operation arguments and flags
|
|
110
|
+
* @return {...any[]} Tuple containing the key and processed arguments
|
|
111
|
+
*/
|
|
112
|
+
async deletePrefix(key, ...args) {
|
|
113
|
+
const contextArgs = await db_decorators_1.Context.args(db_decorators_1.OperationKeys.DELETE, this.class, args, this.adapter, this._overrides || {});
|
|
114
|
+
await this.read(key, ...contextArgs.args);
|
|
115
|
+
return [key, ...contextArgs.args];
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* @description Prepare arguments and context for bulk delete
|
|
119
|
+
* @summary Resolves repository context for a deleteAll operation, validates existence via readAll, then forwards keys and processed arguments
|
|
120
|
+
* @param {(string[]|number[])} keys - The model primary keys to delete
|
|
121
|
+
* @param {...any} args - Additional operation arguments and flags
|
|
122
|
+
* @return {...any[]} Tuple containing the keys and processed arguments
|
|
123
|
+
*/
|
|
124
|
+
async deleteAllPrefix(keys, ...args) {
|
|
125
|
+
const contextArgs = await db_decorators_1.Context.args(db_decorators_1.OperationKeys.DELETE, this.class, args, this.adapter, this._overrides || {});
|
|
126
|
+
await this.readAll(keys, ...contextArgs.args);
|
|
127
|
+
return [keys, ...contextArgs.args];
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
exports.FabricClientRepository = FabricClientRepository;
|
|
131
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmFicmljQ2xpZW50UmVwb3NpdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jbGllbnQvRmFicmljQ2xpZW50UmVwb3NpdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx5Q0FBcUQ7QUFHckQsMkRBSWlDO0FBR2pDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EyQkc7QUFDSCxNQUFhLHNCQUF3QyxTQUFRLGlCQUk1RDtJQUNDLFlBQ0UsT0FBMEUsRUFDMUUsS0FBc0I7UUFFdEIsS0FBSyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN4QixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ2dCLEtBQUssQ0FBQyxZQUFZLENBQ25DLEtBQVEsRUFDUixHQUFHLElBQVc7UUFFZCxNQUFNLFdBQVcsR0FBRyxNQUFNLHVCQUFPLENBQUMsSUFBSSxDQUtwQyw2QkFBYSxDQUFDLE1BQU0sRUFDcEIsSUFBSSxDQUFDLEtBQUssRUFDVixJQUFJLEVBQ0osSUFBSSxDQUFDLE9BQU8sRUFDWixJQUFJLENBQUMsVUFBVSxJQUFJLEVBQUUsQ0FDdEIsQ0FBQztRQUNGLEtBQUssR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDOUIsT0FBTyxDQUFDLEtBQUssRUFBRSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ2dCLEtBQUssQ0FBQyxlQUFlLENBQUMsTUFBVyxFQUFFLEdBQUcsSUFBVztRQUNsRSxNQUFNLFdBQVcsR0FBRyxNQUFNLHVCQUFPLENBQUMsSUFBSSxDQUNwQyw2QkFBYSxDQUFDLE1BQU0sRUFDcEIsSUFBSSxDQUFDLEtBQUssRUFDVixJQUFJLEVBQ0osSUFBSSxDQUFDLE9BQU8sRUFDWixJQUFJLENBQUMsVUFBVSxJQUFJLEVBQUUsQ0FDdEIsQ0FBQztRQUNGLE9BQU8sQ0FBQyxNQUFNLEVBQUUs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QUMsSUFBSSxDQUFDLENBQUM7UUFDOUMsT0FBTyxDQUFDLElBQUksRUFBRSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNyQyxDQUFDO0NBQ0Y7QUFqTEQsd0RBaUxDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWRhcHRlciwgUmVwb3NpdG9yeSB9IGZyb20gXCJAZGVjYWYtdHMvY29yZVwiO1xuaW1wb3J0IHsgQ29uc3RydWN0b3IsIE1vZGVsIH0gZnJvbSBcIkBkZWNhZi10cy9kZWNvcmF0b3ItdmFsaWRhdGlvblwiO1xuaW1wb3J0IHsgTWFuZ29RdWVyeSB9IGZyb20gXCJAZGVjYWYtdHMvZm9yLWNvdWNoZGJcIjtcbmltcG9ydCB7XG4gIENvbnRleHQsXG4gIE9wZXJhdGlvbktleXMsXG4gIFJlcG9zaXRvcnlGbGFncyxcbn0gZnJvbSBcIkBkZWNhZi10cy9kYi1kZWNvcmF0b3JzXCI7XG5pbXBvcnQgeyBGYWJyaWNGbGFncyB9IGZyb20gXCIuLi9zaGFyZWRcIjtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gUmVwb3NpdG9yeSBpbXBsZW1lbnRhdGlvbiBmb3IgRmFicmljIGNsaWVudCBvcGVyYXRpb25zXG4gKiBAc3VtbWFyeSBFeHRlbmRzIHRoZSBnZW5lcmljIFJlcG9zaXRvcnkgdG8gcHJlcGFyZSBjb250ZXh0IGFuZCBhcmd1bWVudHMgZm9yIENSVUQgb3BlcmF0aW9ucyBleGVjdXRlZCB2aWEgYSBGYWJyaWMgY2xpZW50IEFkYXB0ZXIsIHdpcmluZyBSZXBvc2l0b3J5RmxhZ3MgYW5kIEZhYnJpYy1zcGVjaWZpYyBvdmVycmlkZXMuXG4gKiBAdGVtcGxhdGUgTSBleHRlbmRzIE1vZGVsIC0gVGhlIG1vZGVsIHR5cGUgaGFuZGxlZCBieSB0aGlzIHJlcG9zaXRvcnlcbiAqIEBwYXJhbSB7QWRhcHRlcjxhbnksIE1hbmdvUXVlcnksIEZhYnJpY0ZsYWdzLCBDb250ZXh0PEZhYnJpY0ZsYWdzPj59IFthZGFwdGVyXSAtIE9wdGlvbmFsIGFkYXB0ZXIgaW5zdGFuY2UgdXNlZCB0byBleGVjdXRlIG9wZXJhdGlvbnNcbiAqIEBwYXJhbSB7Q29uc3RydWN0b3I8TT59IFtjbGF6el0gLSBPcHRpb25hbCBtb2RlbCBjb25zdHJ1Y3RvciB1c2VkIGJ5IHRoZSByZXBvc2l0b3J5XG4gKiBAcmV0dXJuIHt2b2lkfVxuICogQGNsYXNzIEZhYnJpY0NsaWVudFJlcG9zaXRvcnlcbiAqIEBleGFtcGxlXG4gKiBpbXBvcnQgeyBSZXBvc2l0b3J5IH0gZnJvbSBcIkBkZWNhZi10cy9jb3JlXCI7XG4gKiBpbXBvcnQgeyBGYWJyaWNDbGllbnRSZXBvc2l0b3J5IH0gZnJvbSBcIkBkZWNhZi10cy9mb3ItZmFicmljXCI7XG4gKlxuICogY2xhc3MgVXNlciBleHRlbmRzIE1vZGVsIHsgaWQhOiBzdHJpbmc7IG5hbWUhOiBzdHJpbmc7IH1cbiAqIGNvbnN0IHJlcG8gPSBuZXcgRmFicmljQ2xpZW50UmVwb3NpdG9yeTxVc2VyPigpO1xuICogY29uc3QgY3JlYXRlZCA9IGF3YWl0IHJlcG8uY3JlYXRlKG5ldyBVc2VyKHsgaWQ6IFwiMVwiLCBuYW1lOiBcIkFsaWNlXCIgfSkpO1xuICogY29uc3QgbG9hZGVkID0gYXdhaXQgcmVwby5yZWFkKFwiMVwiKTtcbiAqXG4gKiBAbWVybWFpZFxuICogc2VxdWVuY2VEaWFncmFtXG4gKiAgIHBhcnRpY2lwYW50IEFwcFxuICogICBwYXJ0aWNpcGFudCBSZXBvIGFzIEZhYnJpY0NsaWVudFJlcG9zaXRvcnlcbiAqICAgcGFydGljaXBhbnQgQWRhcHRlclxuICogICBBcHAtPj5SZXBvOiBjcmVhdGUobW9kZWwpXG4gKiAgIFJlcG8tPj5SZXBvOiBjcmVhdGVQcmVmaXgobW9kZWwsIC4uLmFyZ3MpXG4gKiAgIFJlcG8tPj5BZGFwdGVyOiBjcmVhdGUodGFibGUsIGlkLCBtb2RlbCwgZmxhZ3MpXG4gKiAgIEFkYXB0ZXItLT4+UmVwbzogcmVzdWx0XG4gKiAgIFJlcG8tLT4+QXBwOiBtb2RlbFxuICovXG5leHBvcnQgY2xhc3MgRmFicmljQ2xpZW50UmVwb3NpdG9yeTxNIGV4dGVuZHMgTW9kZWw+IGV4dGVuZHMgUmVwb3NpdG9yeTxcbiAgTSxcbiAgTWFuZ29RdWVyeSxcbiAgQWRhcHRlcjxhbnksIGFueSwgTWFuZ29RdWVyeSwgRmFicmljRmxhZ3MsIENvbnRleHQ8RmFicmljRmxhZ3M+PlxuPiB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIGFkYXB0ZXI/OiBBZGFwdGVyPGFueSwgYW55LCBNYW5nb1F1ZXJ5LCBGYWJyaWNGbGFncywgQ29udGV4dDxGYWJyaWNGbGFncz4+LFxuICAgIGNsYXp6PzogQ29uc3RydWN0b3I8TT5cbiAgKSB7XG4gICAgc3VwZXIoYWRhcHRlciwgY2xhenopO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBQcmVwYXJlIGFyZ3VtZW50cyBhbmQgY29udGV4dCBmb3IgY3JlYXRlXG4gICAqIEBzdW1tYXJ5IEJ1aWxkcyByZXBvc2l0b3J5IGNvbnRleHQgYW5kIGVuc3VyZXMgdGhlIG1vZGVsIGlzIGluc3RhbnRpYXRlZCB3aXRoIHRoZSByZXBvc2l0b3J5J3MgY2xhc3MgYmVmb3JlIGRlbGVnYXRpbmcgdG8gdGhlIGFkYXB0ZXJcbiAgICogQHBhcmFtIHtNfSBtb2RlbCAtIFRoZSBtb2RlbCBpbnN0YW5jZSB0byBjcmVhdGVcbiAgICogQHBhcmFtIHsuLi5hbnlbXX0gYXJncyAtIEFkZGl0aW9uYWwgb3BlcmF0aW9uIGFyZ3VtZW50cyBhbmQgZmxhZ3NcbiAgICogQHJldHVybiB7Li4uYW55W119IFR1cGxlIGNvbnRhaW5pbmcgdGhlIHByZXBhcmVkIG1vZGVsIGFuZCB0aGUgcHJvY2Vzc2VkIGFyZ3VtZW50c1xuICAgKi9cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGFzeW5jIGNyZWF0ZVByZWZpeChcbiAgICBtb2RlbDogTSxcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiBQcm9taXNlPFtNLCAuLi5hbnlbXV0+IHtcbiAgICBjb25zdCBjb250ZXh0QXJncyA9IGF3YWl0IENvbnRleHQuYXJnczxcbiAgICAgIE0sXG4gICAgICBDb250ZXh0PFJlcG9zaXRvcnlGbGFncz4sXG4gICAgICBSZXBvc2l0b3J5RmxhZ3NcbiAgICA+KFxuICAgICAgT3BlcmF0aW9uS2V5cy5DUkVBVEUsXG4gICAgICB0aGlzLmNsYXNzLFxuICAgICAgYXJncyxcbiAgICAgIHRoaXMuYWRhcHRlcixcbiAgICAgIHRoaXMuX292ZXJyaWRlcyB8fCB7fVxuICAgICk7XG4gICAgbW9kZWwgPSBuZXcgdGhpcy5jbGFzcyhtb2RlbCk7XG4gICAgcmV0dXJuIFttb2RlbCwgLi4uY29udGV4dEFyZ3MuYXJnc107XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFByZXBhcmUgYXJndW1lbnRzIGFuZCBjb250ZXh0IGZvciBidWxrIGNyZWF0ZVxuICAgKiBAc3VtbWFyeSBSZXNvbHZlcyByZXBvc2l0b3J5IGNvbnRleHQgZm9yIGEgY3JlYXRlQWxsIG9wZXJhdGlvbiBwYXNzaW5nIHRocm91Z2ggbW9kZWxzIGFuZCBwcm9jZXNzZWQgYXJndW1lbnRzXG4gICAqIEBwYXJhbSB7TVtdfSBtb2RlbHMgLSBBcnJheSBvZiBtb2RlbCBpbnN0YW5jZXMgdG8gY3JlYXRlXG4gICAqIEBwYXJhbSB7Li4uYW55fSBhcmdzIC0gQWRkaXRpb25hbCBvcGVyYXRpb24gYXJndW1lbnRzIGFuZCBmbGFnc1xuICAgKiBAcmV0dXJuIHsuLi5hbnlbXX0gVHVwbGUgY29udGFpbmluZyB0aGUgbW9kZWxzIGFycmF5IGFuZCBwcm9jZXNzZWQgYXJndW1lbnRzXG4gICAqL1xuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgY3JlYXRlQWxsUHJlZml4KG1vZGVsczogTVtdLCAuLi5hcmdzOiBhbnlbXSkge1xuICAgIGNvbnN0IGNvbnRleHRBcmdzID0gYXdhaXQgQ29udGV4dC5hcmdzKFxuICAgICAgT3BlcmF0aW9uS2V5cy5DUkVBVEUsXG4gICAgICB0aGlzLmNsYXNzLFxuICAgICAgYXJncyxcbiAgICAgIHRoaXMuYWRhcHRlcixcbiAgICAgIHRoaXMuX292ZXJyaWRlcyB8fCB7fVxuICAgICk7XG4gICAgcmV0dXJuIFttb2RlbHMsIC4uLmNvbnRleHRBcmdzLmFyZ3NdO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBQcmVwYXJlIGFyZ3VtZW50cyBhbmQgY29udGV4dCBmb3IgcmVhZFxuICAgKiBAc3VtbWFyeSBSZXNvbHZlcyByZXBvc2l0b3J5IGNvbnRleHQgZm9yIGEgcmVhZCBvcGVyYXRpb24gYW5kIGZvcndhcmRzIHRoZSBrZXkgYW5kIHByb2Nlc3NlZCBhcmd1bWVudHNcbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBtb2RlbCBwcmltYXJ5IGtleSB0byByZWFkXG4gICAqIEBwYXJhbSB7Li4uYW55fSBhcmdzIC0gQWRkaXRpb25hbCBvcGVyYXRpb24gYXJndW1lbnRzIGFuZCBmbGFnc1xuICAgKiBAcmV0dXJuIHsuLi5hbnlbXX0gVHVwbGUgY29udGFpbmluZyB0aGUga2V5IGFuZCBwcm9jZXNzZWQgYXJndW1lbnRzXG4gICAqL1xuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgcmVhZFByZWZpeChrZXk6IHN0cmluZywgLi4uYXJnczogYW55W10pIHtcbiAgICBjb25zdCBjb250ZXh0QXJncyA9IGF3YWl0IENvbnRleHQuYXJncyhcbiAgICAgIE9wZXJhdGlvbktleXMuUkVBRCxcbiAgICAgIHRoaXMuY2xhc3MsXG4gICAgICBhcmdzLFxuICAgICAgdGhpcy5hZGFwdGVyLFxuICAgICAgdGhpcy5fb3ZlcnJpZGVzIHx8IHt9XG4gICAgKTtcbiAgICByZXR1cm4gW2tleSwgLi4uY29udGV4dEFyZ3MuYXJnc107XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFByZXBhcmUgYXJndW1lbnRzIGFuZCBjb250ZXh0IGZvciBidWxrIHJlYWRcbiAgICogQHN1bW1hcnkgUmVzb2x2ZXMgcmVwb3NpdG9yeSBjb250ZXh0IGZvciBhIHJlYWRBbGwgb3BlcmF0aW9uIGFuZCBmb3J3YXJkcyB0aGUga2V5cyBhbmQgcHJvY2Vzc2VkIGFyZ3VtZW50c1xuICAgKiBAcGFyYW0geyhzdHJpbmdbXXxudW1iZXJbXSl9IGtleXMgLSBBcnJheSBvZiBtb2RlbCBwcmltYXJ5IGtleXMgdG8gcmVhZFxuICAgKiBAcGFyYW0gey4uLmFueX0gYXJncyAtIEFkZGl0aW9uYWwgb3BlcmF0aW9uIGFyZ3VtZW50cyBhbmQgZmxhZ3NcbiAgICogQHJldHVybiB7Li4uYW55W119IFR1cGxlIGNvbnRhaW5pbmcgdGhlIGtleXMgYW5kIHByb2Nlc3NlZCBhcmd1bWVudHNcbiAgICovXG4gIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyByZWFkQWxsUHJlZml4KFxuICAgIGtleXM6IHN0cmluZ1tdIHwgbnVtYmVyW10sXG4gICAgLi4uYXJnczogYW55W11cbiAgKSB7XG4gICAgY29uc3QgY29udGV4dEFyZ3MgPSBhd2FpdCBDb250ZXh0LmFyZ3MoXG4gICAgICBPcGVyYXRpb25LZXlzLlJFQUQsXG4gICAgICB0aGlzLmNsYXNzLFxuICAgICAgYXJncyxcbiAgICAgIHRoaXMuYWRhcHRlcixcbiAgICAgIHRoaXMuX292ZXJyaWRlcyB8fCB7fVxuICAgICk7XG4gICAgcmV0dXJuIFtrZXlzLCAuLi5jb250ZXh0QXJncy5hcmdzXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUHJlcGFyZSBhcmd1bWVudHMgYW5kIGNvbnRleHQgZm9yIHVwZGF0ZVxuICAgKiBAc3VtbWFyeSBSZXNvbHZlcyByZXBvc2l0b3J5IGNvbnRleHQgZm9yIGFuIHVwZGF0ZSBvcGVyYXRpb24gYW5kIGZvcndhcmRzIHRoZSBtb2RlbCBhbmQgcHJvY2Vzc2VkIGFyZ3VtZW50c1xuICAgKiBAcGFyYW0ge019IG1vZGVsIC0gVGhlIG1vZGVsIGluc3RhbmNlIHRvIHVwZGF0ZVxuICAgKiBAcGFyYW0gey4uLmFueVtdfSBhcmdzIC0gQWRkaXRpb25hbCBvcGVyYXRpb24gYXJndW1lbnRzIGFuZCBmbGFnc1xuICAgKiBAcmV0dXJuIHsuLi5hbnlbXX0gVHVwbGUgY29udGFpbmluZyB0aGUgbW9kZWwgYW5kIHByb2Nlc3NlZCBhcmd1bWVudHNcbiAgICovXG4gIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyB1cGRhdGVQcmVmaXgoXG4gICAgbW9kZWw6IE0sXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTxbTSwgLi4uYXJnczogYW55W11dPiB7XG4gICAgY29uc3QgY29udGV4dEFyZ3MgPSBhd2FpdCBDb250ZXh0LmFyZ3MoXG4gICAgICBPcGVyYXRpb25LZXlzLlVQREFURSxcbiAgICAgIHRoaXMuY2xhc3MsXG4gICAgICBhcmdzLFxuICAgICAgdGhpcy5hZGFwdGVyLFxuICAgICAgdGhpcy5fb3ZlcnJpZGVzIHx8IHt9XG4gICAgKTtcbiAgICByZXR1cm4gW21vZGVsLCAuLi5jb250ZXh0QXJncy5hcmdzXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUHJlcGFyZSBhcmd1bWVudHMgYW5kIGNvbnRleHQgZm9yIGJ1bGsgdXBkYXRlXG4gICAqIEBzdW1tYXJ5IFJlc29sdmVzIHJlcG9zaXRvcnkgY29udGV4dCBmb3IgYW4gdXBkYXRlQWxsIG9wZXJhdGlvbiBhbmQgZm9yd2FyZHMgdGhlIG1vZGVscyBhbmQgcHJvY2Vzc2VkIGFyZ3VtZW50c1xuICAgKiBAcGFyYW0ge01bXX0gbW9kZWxzIC0gVGhlIG1vZGVsIGluc3RhbmNlcyB0byB1cGRhdGVcbiAgICogQHBhcmFtIHsuLi5hbnl9IGFyZ3MgLSBBZGRpdGlvbmFsIG9wZXJhdGlvbiBhcmd1bWVudHMgYW5kIGZsYWdzXG4gICAqIEByZXR1cm4gey4uLmFueVtdfSBUdXBsZSBjb250YWluaW5nIHRoZSBtb2RlbHMgYW5kIHByb2Nlc3NlZCBhcmd1bWVudHNcbiAgICovXG4gIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyB1cGRhdGVBbGxQcmVmaXgoXG4gICAgbW9kZWxzOiBNW10sXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTxhbnlbXT4ge1xuICAgIGNvbnN0IGNvbnRleHRBcmdzID0gYXdhaXQgQ29udGV4dC5hcmdzKFxuICAgICAgT3BlcmF0aW9uS2V5cy5VUERBVEUsXG4gICAgICB0aGlzLmNsYXNzLFxuICAgICAgYXJncyxcbiAgICAgIHRoaXMuYWRhcHRlcixcbiAgICAgIHRoaXMuX292ZXJyaWRlcyB8fCB7fVxuICAgICk7XG4gICAgcmV0dXJuIFttb2RlbHMsIC4uLmNvbnRleHRBcmdzLmFyZ3NdO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBQcmVwYXJlIGFyZ3VtZW50cyBhbmQgY29udGV4dCBmb3IgZGVsZXRlXG4gICAqIEBzdW1tYXJ5IFJlc29sdmVzIHJlcG9zaXRvcnkgY29udGV4dCBmb3IgYSBkZWxldGUgb3BlcmF0aW9uLCBlbnN1cmVzIHRoZSB0YXJnZXQgZXhpc3RzIHZpYSByZWFkLCB0aGVuIGZvcndhcmRzIGtleSBhbmQgcHJvY2Vzc2VkIGFyZ3VtZW50c1xuICAgKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IGtleSAtIFRoZSBtb2RlbCBwcmltYXJ5IGtleSB0byBkZWxldGVcbiAgICogQHBhcmFtIHsuLi5hbnl9IGFyZ3MgLSBBZGRpdGlvbmFsIG9wZXJhdGlvbiBhcmd1bWVudHMgYW5kIGZsYWdzXG4gICAqIEByZXR1cm4gey4uLmFueVtdfSBUdXBsZSBjb250YWluaW5nIHRoZSBrZXkgYW5kIHByb2Nlc3NlZCBhcmd1bWVudHNcbiAgICovXG4gIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyBkZWxldGVQcmVmaXgoa2V5OiBhbnksIC4uLmFyZ3M6IGFueVtdKSB7XG4gICAgY29uc3QgY29udGV4dEFyZ3MgPSBhd2FpdCBDb250ZXh0LmFyZ3MoXG4gICAgICBPcGVyYXRpb25LZXlzLkRFTEVURSxcbiAgICAgIHRoaXMuY2xhc3MsXG4gICAgICBhcmdzLFxuICAgICAgdGhpcy5hZGFwdGVyLFxuICAgICAgdGhpcy5fb3ZlcnJpZGVzIHx8IHt9XG4gICAgKTtcbiAgICBhd2FpdCB0aGlzLnJlYWQoa2V5LCAuLi5jb250ZXh0QXJncy5hcmdzKTtcbiAgICByZXR1cm4gW2tleSwgLi4uY29udGV4dEFyZ3MuYXJnc107XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFByZXBhcmUgYXJndW1lbnRzIGFuZCBjb250ZXh0IGZvciBidWxrIGRlbGV0ZVxuICAgKiBAc3VtbWFyeSBSZXNvbHZlcyByZXBvc2l0b3J5IGNvbnRleHQgZm9yIGEgZGVsZXRlQWxsIG9wZXJhdGlvbiwgdmFsaWRhdGVzIGV4aXN0ZW5jZSB2aWEgcmVhZEFsbCwgdGhlbiBmb3J3YXJkcyBrZXlzIGFuZCBwcm9jZXNzZWQgYXJndW1lbnRzXG4gICAqIEBwYXJhbSB7KHN0cmluZ1tdfG51bWJlcltdKX0ga2V5cyAtIFRoZSBtb2RlbCBwcmltYXJ5IGtleXMgdG8gZGVsZXRlXG4gICAqIEBwYXJhbSB7Li4uYW55fSBhcmdzIC0gQWRkaXRpb25hbCBvcGVyYXRpb24gYXJndW1lbnRzIGFuZCBmbGFnc1xuICAgKiBAcmV0dXJuIHsuLi5hbnlbXX0gVHVwbGUgY29udGFpbmluZyB0aGUga2V5cyBhbmQgcHJvY2Vzc2VkIGFyZ3VtZW50c1xuICAgKi9cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGFzeW5jIGRlbGV0ZUFsbFByZWZpeChcbiAgICBrZXlzOiBzdHJpbmdbXSB8IG51bWJlcltdLFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICkge1xuICAgIGNvbnN0IGNvbnRleHRBcmdzID0gYXdhaXQgQ29udGV4dC5hcmdzKFxuICAgICAgT3BlcmF0aW9uS2V5cy5ERUxFVEUsXG4gICAgICB0aGlzLmNsYXNzLFxuICAgICAgYXJncyxcbiAgICAgIHRoaXMuYWRhcHRlcixcbiAgICAgIHRoaXMuX292ZXJyaWRlcyB8fCB7fVxuICAgICk7XG4gICAgYXdhaXQgdGhpcy5yZWFkQWxsKGtleXMsIC4uLmNvbnRleHRBcmdzLmFyZ3MpO1xuICAgIHJldHVybiBba2V5cywgLi4uY29udGV4dEFyZ3MuYXJnc107XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { Adapter, Repository } from "@decaf-ts/core";
|
|
2
|
+
import { Constructor, Model } from "@decaf-ts/decorator-validation";
|
|
3
|
+
import { MangoQuery } from "@decaf-ts/for-couchdb";
|
|
4
|
+
import { Context } from "@decaf-ts/db-decorators";
|
|
5
|
+
import { FabricFlags } from "../shared";
|
|
6
|
+
/**
|
|
7
|
+
* @description Repository implementation for Fabric client operations
|
|
8
|
+
* @summary Extends the generic Repository to prepare context and arguments for CRUD operations executed via a Fabric client Adapter, wiring RepositoryFlags and Fabric-specific overrides.
|
|
9
|
+
* @template M extends Model - The model type handled by this repository
|
|
10
|
+
* @param {Adapter<any, MangoQuery, FabricFlags, Context<FabricFlags>>} [adapter] - Optional adapter instance used to execute operations
|
|
11
|
+
* @param {Constructor<M>} [clazz] - Optional model constructor used by the repository
|
|
12
|
+
* @return {void}
|
|
13
|
+
* @class FabricClientRepository
|
|
14
|
+
* @example
|
|
15
|
+
* import { Repository } from "@decaf-ts/core";
|
|
16
|
+
* import { FabricClientRepository } from "@decaf-ts/for-fabric";
|
|
17
|
+
*
|
|
18
|
+
* class User extends Model { id!: string; name!: string; }
|
|
19
|
+
* const repo = new FabricClientRepository<User>();
|
|
20
|
+
* const created = await repo.create(new User({ id: "1", name: "Alice" }));
|
|
21
|
+
* const loaded = await repo.read("1");
|
|
22
|
+
*
|
|
23
|
+
* @mermaid
|
|
24
|
+
* sequenceDiagram
|
|
25
|
+
* participant App
|
|
26
|
+
* participant Repo as FabricClientRepository
|
|
27
|
+
* participant Adapter
|
|
28
|
+
* App->>Repo: create(model)
|
|
29
|
+
* Repo->>Repo: createPrefix(model, ...args)
|
|
30
|
+
* Repo->>Adapter: create(table, id, model, flags)
|
|
31
|
+
* Adapter-->>Repo: result
|
|
32
|
+
* Repo-->>App: model
|
|
33
|
+
*/
|
|
34
|
+
export declare class FabricClientRepository<M extends Model> extends Repository<M, MangoQuery, Adapter<any, any, MangoQuery, FabricFlags, Context<FabricFlags>>> {
|
|
35
|
+
constructor(adapter?: Adapter<any, any, MangoQuery, FabricFlags, Context<FabricFlags>>, clazz?: Constructor<M>);
|
|
36
|
+
/**
|
|
37
|
+
* @description Prepare arguments and context for create
|
|
38
|
+
* @summary Builds repository context and ensures the model is instantiated with the repository's class before delegating to the adapter
|
|
39
|
+
* @param {M} model - The model instance to create
|
|
40
|
+
* @param {...any[]} args - Additional operation arguments and flags
|
|
41
|
+
* @return {...any[]} Tuple containing the prepared model and the processed arguments
|
|
42
|
+
*/
|
|
43
|
+
protected createPrefix(model: M, ...args: any[]): Promise<[M, ...any[]]>;
|
|
44
|
+
/**
|
|
45
|
+
* @description Prepare arguments and context for bulk create
|
|
46
|
+
* @summary Resolves repository context for a createAll operation passing through models and processed arguments
|
|
47
|
+
* @param {M[]} models - Array of model instances to create
|
|
48
|
+
* @param {...any} args - Additional operation arguments and flags
|
|
49
|
+
* @return {...any[]} Tuple containing the models array and processed arguments
|
|
50
|
+
*/
|
|
51
|
+
protected createAllPrefix(models: M[], ...args: any[]): Promise<any[]>;
|
|
52
|
+
/**
|
|
53
|
+
* @description Prepare arguments and context for read
|
|
54
|
+
* @summary Resolves repository context for a read operation and forwards the key and processed arguments
|
|
55
|
+
* @param {string} key - The model primary key to read
|
|
56
|
+
* @param {...any} args - Additional operation arguments and flags
|
|
57
|
+
* @return {...any[]} Tuple containing the key and processed arguments
|
|
58
|
+
*/
|
|
59
|
+
protected readPrefix(key: string, ...args: any[]): Promise<any[]>;
|
|
60
|
+
/**
|
|
61
|
+
* @description Prepare arguments and context for bulk read
|
|
62
|
+
* @summary Resolves repository context for a readAll operation and forwards the keys and processed arguments
|
|
63
|
+
* @param {(string[]|number[])} keys - Array of model primary keys to read
|
|
64
|
+
* @param {...any} args - Additional operation arguments and flags
|
|
65
|
+
* @return {...any[]} Tuple containing the keys and processed arguments
|
|
66
|
+
*/
|
|
67
|
+
protected readAllPrefix(keys: string[] | number[], ...args: any[]): Promise<any[]>;
|
|
68
|
+
/**
|
|
69
|
+
* @description Prepare arguments and context for update
|
|
70
|
+
* @summary Resolves repository context for an update operation and forwards the model and processed arguments
|
|
71
|
+
* @param {M} model - The model instance to update
|
|
72
|
+
* @param {...any[]} args - Additional operation arguments and flags
|
|
73
|
+
* @return {...any[]} Tuple containing the model and processed arguments
|
|
74
|
+
*/
|
|
75
|
+
protected updatePrefix(model: M, ...args: any[]): Promise<[M, ...args: any[]]>;
|
|
76
|
+
/**
|
|
77
|
+
* @description Prepare arguments and context for bulk update
|
|
78
|
+
* @summary Resolves repository context for an updateAll operation and forwards the models and processed arguments
|
|
79
|
+
* @param {M[]} models - The model instances to update
|
|
80
|
+
* @param {...any} args - Additional operation arguments and flags
|
|
81
|
+
* @return {...any[]} Tuple containing the models and processed arguments
|
|
82
|
+
*/
|
|
83
|
+
protected updateAllPrefix(models: M[], ...args: any[]): Promise<any[]>;
|
|
84
|
+
/**
|
|
85
|
+
* @description Prepare arguments and context for delete
|
|
86
|
+
* @summary Resolves repository context for a delete operation, ensures the target exists via read, then forwards key and processed arguments
|
|
87
|
+
* @param {string|number} key - The model primary key to delete
|
|
88
|
+
* @param {...any} args - Additional operation arguments and flags
|
|
89
|
+
* @return {...any[]} Tuple containing the key and processed arguments
|
|
90
|
+
*/
|
|
91
|
+
protected deletePrefix(key: any, ...args: any[]): Promise<any[]>;
|
|
92
|
+
/**
|
|
93
|
+
* @description Prepare arguments and context for bulk delete
|
|
94
|
+
* @summary Resolves repository context for a deleteAll operation, validates existence via readAll, then forwards keys and processed arguments
|
|
95
|
+
* @param {(string[]|number[])} keys - The model primary keys to delete
|
|
96
|
+
* @param {...any} args - Additional operation arguments and flags
|
|
97
|
+
* @return {...any[]} Tuple containing the keys and processed arguments
|
|
98
|
+
*/
|
|
99
|
+
protected deleteAllPrefix(keys: string[] | number[], ...args: any[]): Promise<any[]>;
|
|
100
|
+
}
|