Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 | 25x 25x 25x 25x 25x 25x 25x 25x 25x 25x 25x 25x 25x 25x 25x 25x 25x 165x 25x 164x 165x 165x 165x 165x 165x 165x 165x 165x 165x 165x 165x 165x 165x 165x 165x 165x | import { CONTRACT as AUTO_CLOSE_FACTORY } from "@jonloucks/contracts-ts/api/AutoCloseFactory";
import { Contracts, Config as ContractsConfig } from "@jonloucks/contracts-ts/api/Contracts";
import { ContractsFactory } from "@jonloucks/contracts-ts/api/ContractsFactory";
import { CONTRACT as PROMISOR_FACTORY } from "@jonloucks/contracts-ts/api/PromisorFactory";
import { Repository } from "@jonloucks/contracts-ts/api/Repository";
import { CONTRACT as REPOSITORY_FACTORY, RepositoryFactory } from "@jonloucks/contracts-ts/api/RepositoryFactory";
import { RequiredType } from "@jonloucks/contracts-ts/api/Types";
import { CONTRACT as ATOMIC_BOOLEAN_FACTORY } from "@jonloucks/contracts-ts/auxiliary/AtomicBooleanFactory";
import { CONTRACT as ATOMIC_INTEGER_FACTORY } from "@jonloucks/contracts-ts/auxiliary/AtomicIntegerFactory";
import { CONTRACT as ATOMIC_REFERENCE_FACTORY } from "@jonloucks/contracts-ts/auxiliary/AtomicReferenceFactory";
import { CONTRACT as IDEMPOTENT_FACTORY } from "@jonloucks/contracts-ts/auxiliary/IdempotentFactory";
import { create as createAtomicBooleanFactoryImpl } from "./AtomicBooleanFactory.impl";
import { create as createAtomicIntegerFactoryImpl } from "./AtomicIntegerFactory.impl";
import { create as createAtomicReferenceFactoryImpl } from "./AtomicReferenceFactory.impl";
import { create as createAutoCloseFactoryImpl } from "./AutoCloseFactory.impl";
import { create as createContractsImpl } from "./Contracts.impl";
import { wrap as wrapContracts } from "./ContractsWrapper.impl";
import { create as createPromisorFactoryImpl } from "./PromisorFactory.impl";
import { create as createRepositoryFactoryImpl } from "./RepositoryFactory.impl";
import { create as createIdempotentFactoryImpl } from "./IdempotentFactory.impl";
/**
* Factory method to create a ContractsFactory
*
* @returns the ContractsFactory implementation
*/
export function create(): RequiredType<ContractsFactory> {
return ContractsFactoryImpl.internalCreate();
}
/**
* Factory method to create Contracts instance.
*
* @param config the configuration for the Contracts instance
* @returns the Contracts implementation
*/
export function createContracts(config?: ContractsConfig): RequiredType<Contracts> {
return create().createContracts(config);
}
// ---- Implementation details below ----
/**
* Implementation for ContractsFactory
*/
class ContractsFactoryImpl implements ContractsFactory {
/**
* ContractsFactory.createContracts override
*/
createContracts(config?: ContractsConfig): RequiredType<Contracts> {
const actualConfig: RequiredType<ContractsConfig> = config ?? this.#defaultConfig;
const contracts: RequiredType<Contracts> = createContractsImpl(actualConfig);
const repository: RequiredType<Repository> = this.createKernelRepository(contracts);
return wrapContracts(contracts, repository);
}
static internalCreate(): RequiredType<ContractsFactory> {
return new ContractsFactoryImpl();
}
private createKernelRepository(contracts: Contracts): RequiredType<Repository> {
const repositoryFactory: RequiredType<RepositoryFactory> = createRepositoryFactoryImpl(contracts);
const repository: RequiredType<Repository> = repositoryFactory.createRepository();
repository.keep(IDEMPOTENT_FACTORY, createIdempotentFactoryImpl);
repository.keep(PROMISOR_FACTORY, createPromisorFactoryImpl);
repository.keep(REPOSITORY_FACTORY, () => repositoryFactory);
repository.keep(ATOMIC_BOOLEAN_FACTORY, createAtomicBooleanFactoryImpl);
repository.keep(ATOMIC_INTEGER_FACTORY, createAtomicIntegerFactoryImpl);
repository.keep(ATOMIC_REFERENCE_FACTORY, createAtomicReferenceFactoryImpl);
repository.keep(AUTO_CLOSE_FACTORY, createAutoCloseFactoryImpl);
return repository;
}
private constructor() {
// empty
}
#defaultConfig: RequiredType<ContractsConfig> = {};
}
|