wraplet 0.48.0 → 1.0.0-beta.10
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/README.md +5 -0
- package/dist/DependencyManager/Core.d.ts +80 -0
- package/dist/DependencyManager/types/CoreOptions.d.ts +10 -0
- package/dist/DependencyManager/types/DependencyLifecycleAsyncListener.d.ts +3 -0
- package/dist/{Core/types/DestroyDependencyListener.d.ts → DependencyManager/types/DependencyLifecycleListener.d.ts} +1 -1
- package/dist/DependencyManager/types/DependencyManager.d.ts +59 -0
- package/dist/DependencyManager/types/DestroyListener.d.ts +2 -0
- package/dist/DependencyManager/types/WrapletCreator.d.ts +5 -0
- package/dist/Injector/types/Injector.d.ts +6 -0
- package/dist/Logger/ConsoleLogger.d.ts +7 -0
- package/dist/Logger/types/Logger.d.ts +3 -0
- package/dist/Map/MapTreeBuilder.d.ts +15 -0
- package/dist/Map/utils.d.ts +1 -1
- package/dist/NodeTreeManager/DefaultNodeTreeManager.d.ts +5 -9
- package/dist/NodeTreeManager/types/InitializeListener.d.ts +2 -0
- package/dist/NodeTreeManager/types/NodeTreeManager.d.ts +4 -6
- package/dist/NodeTreeManager/utils.d.ts +2 -2
- package/dist/Set/DefaultWrapletSet.d.ts +2 -2
- package/dist/Set/types/WrapletSet.d.ts +3 -3
- package/dist/Wraplet/AbstractDependentWraplet.d.ts +53 -0
- package/dist/Wraplet/AbstractWraplet.d.ts +42 -0
- package/dist/Wraplet/NodeManager.d.ts +7 -0
- package/dist/Wraplet/createDependencyApi.d.ts +3 -0
- package/dist/Wraplet/createOuterDestroyCallback.d.ts +10 -0
- package/dist/Wraplet/createOuterInitializeCallback.d.ts +9 -0
- package/dist/Wraplet/createWrapletApi.d.ts +1 -2
- package/dist/Wraplet/statusActions.d.ts +5 -7
- package/dist/Wraplet/types/DependencyApi.d.ts +16 -0
- package/dist/Wraplet/types/DependencyApiFactoryArgs.d.ts +7 -0
- package/dist/Wraplet/types/DependencyInstance.d.ts +2 -1
- package/dist/Wraplet/types/Wraplet.d.ts +9 -2
- package/dist/Wraplet/types/WrapletApi.d.ts +8 -8
- package/dist/Wraplet/types/WrapletApiFactoryArgs.d.ts +4 -10
- package/dist/Wraplet/types/WrapletDependencyDefinition.d.ts +7 -11
- package/dist/Wraplet/types/WrapletDependencyMap.d.ts +7 -1
- package/dist/Wraplet/utils.d.ts +1 -0
- package/dist/ambient.d.ts +529 -0
- package/dist/errors.d.ts +5 -2
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +17 -18
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/storage.cjs.map +1 -1
- package/dist/storage.js.map +1 -1
- package/dist/types/global.d.ts +2 -1
- package/dist/utils/createLifecycleAsyncError.d.ts +2 -0
- package/dist/utils/types/Utils.d.ts +2 -2
- package/package.json +2 -2
- package/dist/AbstractWraplet.d.ts +0 -54
- package/dist/Core/DefaultArgCreator.d.ts +0 -10
- package/dist/Core/DefaultCore.d.ts +0 -64
- package/dist/Core/defaultWrapletCreator.d.ts +0 -6
- package/dist/Core/types/ArgCreator.d.ts +0 -9
- package/dist/Core/types/Core.d.ts +0 -66
- package/dist/Core/types/CoreInitOptions.d.ts +0 -7
- package/dist/Core/types/DependencyInstantiatedListener.d.ts +0 -3
- package/dist/Core/types/DestroyListener.d.ts +0 -2
- package/dist/Core/types/WrapletCreator.d.ts +0 -15
- package/dist/Map/MapRepeat.d.ts +0 -10
- package/dist/Map/MapWrapper.d.ts +0 -33
- package/dist/Map/types/DynamicMap.d.ts +0 -9
- package/dist/NodeTreeManager/types/NodeTreeParent.d.ts +0 -10
- package/dist/Wraplet/createDefaultDestroyCallback.d.ts +0 -13
- package/dist/Wraplet/createDefaultInitializeCallback.d.ts +0 -15
- package/dist/Wraplet/createRichWrapletApi.d.ts +0 -5
- package/dist/Wraplet/customizeDefaultWrapletApi.d.ts +0 -2
- package/dist/Wraplet/types/RichWrapletApi.d.ts +0 -4
- package/dist/Wraplet/types/RichWrapletApiFactoryArgs.d.ts +0 -6
- package/dist/types/Groupable.d.ts +0 -13
- /package/dist/Wraplet/types/{WrapletApiFactoryBasicCallback.d.ts → WrapletApiFactoryCallbacks.d.ts} +0 -0
package/README.md
ADDED
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { WrapletDependencies } from "../Wraplet/types/WrapletDependencies";
|
|
2
|
+
import { MultipleDependencyKeys, SingleDependencyKeys, WrapletDependencyMap, WrapletDependencyMapWithDefaults } from "../Wraplet/types/WrapletDependencyMap";
|
|
3
|
+
import { DependencyInstance } from "../Wraplet/types/DependencyInstance";
|
|
4
|
+
import { CoreOptions } from "./types/CoreOptions";
|
|
5
|
+
import { DependencyManager, DependencyManagerSymbol } from "./types/DependencyManager";
|
|
6
|
+
import { Status } from "../Wraplet/types/Status";
|
|
7
|
+
import { DependencyLifecycleAsyncListener } from "./types/DependencyLifecycleAsyncListener";
|
|
8
|
+
import { DependencyLifecycleListener } from "./types/DependencyLifecycleListener";
|
|
9
|
+
import { MapTreeBuilder } from "../Map/MapTreeBuilder";
|
|
10
|
+
import { Injector } from "../Injector/types/Injector";
|
|
11
|
+
export declare class Core<N extends Node = Node, M extends WrapletDependencyMap = {}> implements DependencyManager<N, M> {
|
|
12
|
+
node: N;
|
|
13
|
+
[DependencyManagerSymbol]: true;
|
|
14
|
+
private logger;
|
|
15
|
+
private dependenciesAreInstantiated;
|
|
16
|
+
private statusWritable;
|
|
17
|
+
get status(): Status;
|
|
18
|
+
private readonly mapTree;
|
|
19
|
+
private directDependencies;
|
|
20
|
+
private wrappedDependencies;
|
|
21
|
+
private destroyedDependencyListeners;
|
|
22
|
+
private instantiatedDependencyListeners;
|
|
23
|
+
private initializedDependencyListeners;
|
|
24
|
+
constructor(node: N, map: M | MapTreeBuilder<M>, options?: Partial<CoreOptions<M>>);
|
|
25
|
+
/**
|
|
26
|
+
* Initialize core.
|
|
27
|
+
*
|
|
28
|
+
* We couldn't put this step in the constructor, because during initialization some wraplet
|
|
29
|
+
* processing occurs (instantiate dependency listeners) that needs access to the Core,
|
|
30
|
+
* so the Core has to exist already.
|
|
31
|
+
*/
|
|
32
|
+
initializeDependencies(): Promise<void>;
|
|
33
|
+
get map(): WrapletDependencyMapWithDefaults<M>;
|
|
34
|
+
instantiateDependencies(): void;
|
|
35
|
+
private findExistingWraplet;
|
|
36
|
+
private instantiateSingleWrapletDependency;
|
|
37
|
+
private instantiateWrapletItem;
|
|
38
|
+
private instantiateMultipleDependencies;
|
|
39
|
+
addDependencyDestroyedListener(callback: DependencyLifecycleAsyncListener<M, keyof M>): void;
|
|
40
|
+
addDependencyInstantiatedListener(callback: DependencyLifecycleListener<M, keyof M>): void;
|
|
41
|
+
addDependencyInitializedListener(callback: DependencyLifecycleAsyncListener<M, keyof M>): void;
|
|
42
|
+
setExistingInstance<K extends SingleDependencyKeys<M> & Extract<keyof M, string>>(id: K, wraplet: DependencyInstance<M, K>): void;
|
|
43
|
+
addExistingInstance<K extends MultipleDependencyKeys<M> & Extract<keyof M, string>>(id: K, wraplet: DependencyInstance<M, K>): void;
|
|
44
|
+
private prepareIndividualWraplet;
|
|
45
|
+
private createDependencyDestroyListener;
|
|
46
|
+
/**
|
|
47
|
+
* Checks whether a required dependency has been removed while the core
|
|
48
|
+
* is NOT being destroyed itself. Returns the error instance instead of
|
|
49
|
+
* throwing, so the caller can route it through the lifecycle error pipeline.
|
|
50
|
+
*/
|
|
51
|
+
private validateRequiredDependencyAfterRemoval;
|
|
52
|
+
/**
|
|
53
|
+
* This method removes from nodes references to this wraplet and its dependencies recursively.
|
|
54
|
+
*/
|
|
55
|
+
destroy(): Promise<void>;
|
|
56
|
+
private findChildrenElements;
|
|
57
|
+
get dependencies(): WrapletDependencies<M>;
|
|
58
|
+
private removeDependency;
|
|
59
|
+
private validateMapItem;
|
|
60
|
+
private validateMapItemForNonParent;
|
|
61
|
+
private validateElements;
|
|
62
|
+
/**
|
|
63
|
+
* Set up a proxy to check if dependencies have not been destroyed before fetching them.
|
|
64
|
+
*/
|
|
65
|
+
private wrapDependencies;
|
|
66
|
+
private defaultOptions;
|
|
67
|
+
private destroyDependencies;
|
|
68
|
+
/**
|
|
69
|
+
* Creates a definition for creating a node wrapper.
|
|
70
|
+
*
|
|
71
|
+
* @param map_or_position
|
|
72
|
+
* You can provide a map or a number representing the
|
|
73
|
+
* relative position of the ancestor map that should be
|
|
74
|
+
* reused.
|
|
75
|
+
*
|
|
76
|
+
* This is useful for recursive maps.
|
|
77
|
+
* @param options
|
|
78
|
+
*/
|
|
79
|
+
static createInjector<N extends Node, M extends WrapletDependencyMap>(map_or_position: WrapletDependencyMap | number, options?: CoreOptions): Injector<N, M, CoreOptions>;
|
|
80
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { WrapletDependencyMap } from "../../Wraplet/types/WrapletDependencyMap";
|
|
2
|
+
import { DependencyLifecycleAsyncListener } from "./DependencyLifecycleAsyncListener";
|
|
3
|
+
import { DependencyLifecycleListener } from "./DependencyLifecycleListener";
|
|
4
|
+
import { Logger } from "../../Logger/types/Logger";
|
|
5
|
+
export type CoreOptions<M extends WrapletDependencyMap = WrapletDependencyMap> = {
|
|
6
|
+
dependencyInstantiatedListeners?: DependencyLifecycleListener<M, keyof M>[];
|
|
7
|
+
dependencyInitializedListeners?: DependencyLifecycleAsyncListener<M, keyof M>[];
|
|
8
|
+
dependencyDestroyedListeners?: DependencyLifecycleAsyncListener<M, keyof M>[];
|
|
9
|
+
logger?: Logger;
|
|
10
|
+
};
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { WrapletDependencyMap } from "../../Wraplet/types/WrapletDependencyMap";
|
|
2
|
+
import { DependencyInstance } from "../../Wraplet/types/DependencyInstance";
|
|
3
|
+
export type DependencyLifecycleAsyncListener<M extends WrapletDependencyMap, K extends keyof M> = (wraplet: DependencyInstance<M, K>, id: K) => Promise<void>;
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { WrapletDependencyMap } from "../../Wraplet/types/WrapletDependencyMap";
|
|
2
2
|
import { DependencyInstance } from "../../Wraplet/types/DependencyInstance";
|
|
3
|
-
export type
|
|
3
|
+
export type DependencyLifecycleListener<M extends WrapletDependencyMap, K extends keyof M> = (wraplet: DependencyInstance<M, K>, id: K) => void;
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { WrapletDependencies } from "../../Wraplet/types/WrapletDependencies";
|
|
2
|
+
import { MultipleDependencyKeys, SingleDependencyKeys, WrapletDependencyMap, WrapletDependencyMapWithDefaults } from "../../Wraplet/types/WrapletDependencyMap";
|
|
3
|
+
import { DependencyLifecycleAsyncListener } from "./DependencyLifecycleAsyncListener";
|
|
4
|
+
import { DependencyLifecycleListener } from "./DependencyLifecycleListener";
|
|
5
|
+
import { DependencyInstance } from "../../Wraplet/types/DependencyInstance";
|
|
6
|
+
export declare const DependencyManagerSymbol: unique symbol;
|
|
7
|
+
/**
|
|
8
|
+
* Dependency manager interface that defines the public API for managing wraplet relationships
|
|
9
|
+
* and lifecycles.
|
|
10
|
+
*/
|
|
11
|
+
export interface DependencyManager<N extends Node = Node, M extends WrapletDependencyMap = {}> {
|
|
12
|
+
[DependencyManagerSymbol]: true;
|
|
13
|
+
/**
|
|
14
|
+
* The node that the manager is managing.
|
|
15
|
+
*/
|
|
16
|
+
node: N;
|
|
17
|
+
/**
|
|
18
|
+
* The children map that defines the relationships between nodes.
|
|
19
|
+
*/
|
|
20
|
+
map: WrapletDependencyMapWithDefaults<M>;
|
|
21
|
+
/**
|
|
22
|
+
* Instantiate dependencies based on the map and the current node.
|
|
23
|
+
*/
|
|
24
|
+
instantiateDependencies(): void;
|
|
25
|
+
/**
|
|
26
|
+
* Initialize dependencies.
|
|
27
|
+
*/
|
|
28
|
+
initializeDependencies(): Promise<void>;
|
|
29
|
+
/**
|
|
30
|
+
* Add a listener that will be called when a dependency is initialized.
|
|
31
|
+
*/
|
|
32
|
+
addDependencyInitializedListener(callback: DependencyLifecycleAsyncListener<M, keyof M>): void;
|
|
33
|
+
/**
|
|
34
|
+
* Add a listener that will be called when a dependency is destroyed.
|
|
35
|
+
*/
|
|
36
|
+
addDependencyDestroyedListener(callback: DependencyLifecycleAsyncListener<M, keyof M>): void;
|
|
37
|
+
/**
|
|
38
|
+
* Add a listener that will be called when a dependency is instantiated.
|
|
39
|
+
*/
|
|
40
|
+
addDependencyInstantiatedListener(callback: DependencyLifecycleListener<M, keyof M>): void;
|
|
41
|
+
/**
|
|
42
|
+
* This method allows you to set an existing dependency instance.
|
|
43
|
+
*/
|
|
44
|
+
setExistingInstance<K extends SingleDependencyKeys<M> & Extract<keyof M, string>>(id: K, wraplet: DependencyInstance<M, K>): void;
|
|
45
|
+
/**
|
|
46
|
+
* This method allows you to add an existing dependency instance
|
|
47
|
+
* to a wraplet set.
|
|
48
|
+
*/
|
|
49
|
+
addExistingInstance<K extends MultipleDependencyKeys<M> & Extract<keyof M, string>>(id: K, wraplet: DependencyInstance<M, K>): void;
|
|
50
|
+
/**
|
|
51
|
+
* Get the available dependencies.
|
|
52
|
+
*/
|
|
53
|
+
readonly dependencies: WrapletDependencies<M>;
|
|
54
|
+
/**
|
|
55
|
+
* Destroy all dependencies.
|
|
56
|
+
*/
|
|
57
|
+
destroy(): Promise<void>;
|
|
58
|
+
}
|
|
59
|
+
export declare function isDependencyManager<N extends Node, M extends WrapletDependencyMap>(object: unknown): object is DependencyManager<N, M>;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { Wraplet } from "../../Wraplet/types/Wraplet";
|
|
2
|
+
import { WrapletDependencyMap } from "../../Wraplet/types/WrapletDependencyMap";
|
|
3
|
+
import { WrapletDependencyDefinitionWithDefaults } from "../../Wraplet/types/WrapletDependencyDefinition";
|
|
4
|
+
import { MapTreeBuilder } from "../../Map/MapTreeBuilder";
|
|
5
|
+
export type WrapletCreator<N extends Node, M extends WrapletDependencyMap> = (node: N, definition: WrapletDependencyDefinitionWithDefaults, map: MapTreeBuilder<M>) => Wraplet<N>;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { MapTreeBuilder } from "../../Map/MapTreeBuilder";
|
|
2
|
+
import { WrapletDependencyMap } from "../../Wraplet/types/WrapletDependencyMap";
|
|
3
|
+
export type Injector<N extends Node = Node, M extends WrapletDependencyMap = WrapletDependencyMap, D = any> = {
|
|
4
|
+
data?: D;
|
|
5
|
+
callback: (node: N, map: MapTreeBuilder<M>, data?: D) => unknown;
|
|
6
|
+
};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { WrapletDependencyMap, WrapletDependencyMapWithDefaults } from "../Wraplet/types/WrapletDependencyMap";
|
|
2
|
+
declare const MapTreeBuilderSymbol: unique symbol;
|
|
3
|
+
export declare class MapTreeBuilder<M extends WrapletDependencyMap = WrapletDependencyMap> {
|
|
4
|
+
private parent?;
|
|
5
|
+
[MapTreeBuilderSymbol]: true;
|
|
6
|
+
private map?;
|
|
7
|
+
private children;
|
|
8
|
+
constructor(parent?: MapTreeBuilder | undefined);
|
|
9
|
+
getParent(): MapTreeBuilder;
|
|
10
|
+
createChild<CM extends WrapletDependencyMap>(name: keyof M): MapTreeBuilder<CM>;
|
|
11
|
+
setMap(map: M): void;
|
|
12
|
+
getMap(): WrapletDependencyMapWithDefaults<M>;
|
|
13
|
+
}
|
|
14
|
+
export declare function isMapTreeBuilder(object: unknown): object is MapTreeBuilder;
|
|
15
|
+
export {};
|
package/dist/Map/utils.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { WrapletDependencyDefinition, WrapletDependencyDefinitionWithDefaults } from "../Wraplet/types/WrapletDependencyDefinition";
|
|
2
2
|
import { WrapletDependencyMap, WrapletDependencyMapWithDefaults } from "../Wraplet/types/WrapletDependencyMap";
|
|
3
|
-
export declare function addDefaultsToDependencyDefinition<
|
|
3
|
+
export declare function addDefaultsToDependencyDefinition<T extends WrapletDependencyDefinition>(definition: T): WrapletDependencyDefinitionWithDefaults<T>;
|
|
4
4
|
export declare function fillMapWithDefaults<M extends WrapletDependencyMap>(map: M): WrapletDependencyMapWithDefaults<M>;
|
|
@@ -1,12 +1,8 @@
|
|
|
1
1
|
import { NodeTreeManager } from "./types/NodeTreeManager";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
export type Initializer = (node: Node) => Promise<Wraplet[]>;
|
|
5
|
-
export default class DefaultNodeTreeManager implements NodeTreeManager {
|
|
2
|
+
export type Initializer<CONTEXT> = (node: Node, context?: CONTEXT) => Promise<void>;
|
|
3
|
+
export declare class DefaultNodeTreeManager<CONTEXT = unknown> implements NodeTreeManager<CONTEXT> {
|
|
6
4
|
private initializers;
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
destroyNodeTree(node: Node): Promise<void>;
|
|
11
|
-
getSet(): WrapletSetReadonly;
|
|
5
|
+
addNodeInitializer(callback: Initializer<CONTEXT>): void;
|
|
6
|
+
initializeNode(node: Node, context?: CONTEXT): Promise<void>;
|
|
7
|
+
destroyNode(node: Node): Promise<void>;
|
|
12
8
|
}
|
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
import { Initializer } from "../DefaultNodeTreeManager";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
destroyNodeTree(node: Node): Promise<void>;
|
|
7
|
-
getSet(): WrapletSetReadonly;
|
|
2
|
+
export interface NodeTreeManager<CONTEXT = unknown> {
|
|
3
|
+
addNodeInitializer(callback: Initializer<CONTEXT>): void;
|
|
4
|
+
initializeNode(node: Node, context?: CONTEXT): Promise<void>;
|
|
5
|
+
destroyNode(node: Node): Promise<void>;
|
|
8
6
|
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { Wraplet } from "../Wraplet/types/Wraplet";
|
|
2
2
|
import { WrapletSet } from "../Set/types/WrapletSet";
|
|
3
3
|
export declare function isParentNode(node: Node): node is ParentNode;
|
|
4
|
-
export declare function getWrapletsFromNode<N extends Node = Node, W extends Wraplet<N> = Wraplet<N>>(node: N): WrapletSet<W
|
|
4
|
+
export declare function getWrapletsFromNode<N extends Node = Node, W extends Wraplet<N> = Wraplet<N>>(node: N): WrapletSet<W> | null;
|
|
5
5
|
export declare function removeWrapletFromNode<N extends Node>(wraplet: Wraplet<N>, node: N): boolean;
|
|
6
6
|
export declare function addWrapletToNode<N extends Node>(wraplet: Wraplet<N>, node: N): void;
|
|
7
|
-
export declare function actOnNodesRecursively(node: Node, callback: (node: Node) =>
|
|
7
|
+
export declare function actOnNodesRecursively(node: Node, callback: (node: Node) => void): Promise<void>;
|
|
8
8
|
export declare function destroyWrapletsRecursively(node: Node): Promise<void>;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { WrapletSet, WrapletSetSymbol } from "./types/WrapletSet";
|
|
2
2
|
import { Wraplet } from "../Wraplet/types/Wraplet";
|
|
3
3
|
import { DefaultSearchableSet } from "./DefaultSearchableSet";
|
|
4
|
-
import { WrapletSetReadonlySymbol } from "./types/WrapletSetReadonly";
|
|
5
|
-
export declare class DefaultWrapletSet<T extends Wraplet> extends DefaultSearchableSet<T> implements WrapletSet {
|
|
4
|
+
import { WrapletSetReadonly, WrapletSetReadonlySymbol } from "./types/WrapletSetReadonly";
|
|
5
|
+
export declare class DefaultWrapletSet<T extends Wraplet> extends DefaultSearchableSet<T> implements WrapletSet<T>, WrapletSetReadonly<T> {
|
|
6
6
|
[WrapletSetReadonlySymbol]: true;
|
|
7
7
|
[WrapletSetSymbol]: true;
|
|
8
8
|
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Dependencies } from "../../Wraplet/types/Wraplet";
|
|
2
2
|
import { BaseSet } from "./BaseSet";
|
|
3
3
|
declare const WrapletSetSymbol: unique symbol;
|
|
4
4
|
export { WrapletSetSymbol };
|
|
5
|
-
export interface WrapletSet<W extends
|
|
5
|
+
export interface WrapletSet<W extends Dependencies = Dependencies> extends BaseSet<W>, Set<W> {
|
|
6
6
|
[WrapletSetSymbol]: true;
|
|
7
7
|
}
|
|
8
|
-
export declare function isWrapletSet<W extends
|
|
8
|
+
export declare function isWrapletSet<W extends Dependencies>(object: unknown): object is WrapletSet<W>;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { WrapletDependencyMap } from "./types/WrapletDependencyMap";
|
|
2
|
+
import { WrapletDependencies } from "./types/WrapletDependencies";
|
|
3
|
+
import { Wraplet } from "./types/Wraplet";
|
|
4
|
+
import { DependencyInstance } from "./types/DependencyInstance";
|
|
5
|
+
import { DependencyManager } from "../DependencyManager/types/DependencyManager";
|
|
6
|
+
import { Constructable } from "../utils/types/Utils";
|
|
7
|
+
import { AbstractWraplet } from "./AbstractWraplet";
|
|
8
|
+
import { WrapletApi } from "./types/WrapletApi";
|
|
9
|
+
export declare abstract class AbstractDependentWraplet<N extends Node = Node, M extends WrapletDependencyMap = {}> extends AbstractWraplet<N> implements Wraplet<N> {
|
|
10
|
+
protected dm: DependencyManager<N, M>;
|
|
11
|
+
constructor(dm: DependencyManager<N, M>);
|
|
12
|
+
/**
|
|
13
|
+
* Override createWrapletApi to provide Core-aware lifecycle callbacks
|
|
14
|
+
* instead of the base class's version — this avoids creating two WrapletApi
|
|
15
|
+
* instances.
|
|
16
|
+
*/
|
|
17
|
+
protected createWrapletApi(): WrapletApi<N>;
|
|
18
|
+
protected onDestroy(): Promise<void>;
|
|
19
|
+
protected onInitialize(): Promise<void>;
|
|
20
|
+
/**
|
|
21
|
+
* Dependencies.
|
|
22
|
+
*/
|
|
23
|
+
protected get d(): WrapletDependencies<M>;
|
|
24
|
+
/**
|
|
25
|
+
* his method will be invoked if one of the wraplet's dependencies has been instantiated.
|
|
26
|
+
*/
|
|
27
|
+
protected onDependencyInstantiated(dependency: DependencyInstance<M, keyof M>, id: keyof M): void;
|
|
28
|
+
/**
|
|
29
|
+
* his method will be invoked if one of the wraplet's dependencies has been initialized.
|
|
30
|
+
*/
|
|
31
|
+
protected onDependencyInitialized(dependency: DependencyInstance<M, keyof M>, id: keyof M): Promise<void>;
|
|
32
|
+
/**
|
|
33
|
+
* This method will be ivoked if one of the wraplet's dependencies has been destroyed.
|
|
34
|
+
*/
|
|
35
|
+
protected onDependencyDestroyed(dependency: DependencyInstance<M, keyof M>, id: keyof M): Promise<void>;
|
|
36
|
+
/**
|
|
37
|
+
* Subclasses must return an array of constructors covering all types in union N.
|
|
38
|
+
* Wrap the result in the `supportedTypeCheck` helper to make sure that the array contains all
|
|
39
|
+
* and only classes that extend the given type.
|
|
40
|
+
*/
|
|
41
|
+
protected supportedNodeTypes(): readonly Constructable<N>[] | null;
|
|
42
|
+
protected static createCore<N extends Node, M extends WrapletDependencyMap>(node: N, map: M): DependencyManager<N, M>;
|
|
43
|
+
/**
|
|
44
|
+
* Instantiates wraplets on a given ParentNode.
|
|
45
|
+
*/
|
|
46
|
+
protected static createWraplets<T extends abstract new (core: any, ...args: any[]) => AbstractDependentWraplet<any, any>>(this: T, node: ParentNode, map: WrapletDependencyMap, attribute: string, additional_args?: unknown[]): InstanceType<T>[];
|
|
47
|
+
/**
|
|
48
|
+
* Instantiates and initializes wraplets on a given ParentNode.
|
|
49
|
+
*/
|
|
50
|
+
protected static createAndInitializeWraplets<T extends {
|
|
51
|
+
new (core: any, ...args: any[]): AbstractDependentWraplet<any, any>;
|
|
52
|
+
}>(this: T, node: ParentNode, map: WrapletDependencyMap, attribute: string, additional_args?: unknown[]): Promise<InstanceType<T>[]>;
|
|
53
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { Wraplet, WrapletSymbol } from "./types/Wraplet";
|
|
2
|
+
import { Constructable } from "../utils/types/Utils";
|
|
3
|
+
import { NodeManager } from "./NodeManager";
|
|
4
|
+
import { WrapletApi } from "./types/WrapletApi";
|
|
5
|
+
import { WrapletApiFactoryBasicCallback } from "./types/WrapletApiFactoryCallbacks";
|
|
6
|
+
export declare abstract class AbstractWraplet<N extends Node = Node> implements Wraplet<N> {
|
|
7
|
+
protected node: N;
|
|
8
|
+
[WrapletSymbol]: true;
|
|
9
|
+
wraplet: WrapletApi<N>;
|
|
10
|
+
private _nodeManager;
|
|
11
|
+
constructor(node: N);
|
|
12
|
+
/**
|
|
13
|
+
* Creates the WrapletApi for this wraplet. Subclasses (e.g. AbstractDependentWraplet)
|
|
14
|
+
* can override this to supply their own lifecycle callbacks without causing a
|
|
15
|
+
* double-creation of WrapletApi.
|
|
16
|
+
*/
|
|
17
|
+
protected createWrapletApi(): WrapletApi<N>;
|
|
18
|
+
/**
|
|
19
|
+
* Builds a WrapletApi with the given callbacks and ensures NodeManager cleanup
|
|
20
|
+
* is always wired into the destroy path.
|
|
21
|
+
*/
|
|
22
|
+
protected buildWrapletApi(initializeCallback?: WrapletApiFactoryBasicCallback, destroyCallback?: WrapletApiFactoryBasicCallback): WrapletApi<N>;
|
|
23
|
+
protected get nodeManager(): NodeManager<N>;
|
|
24
|
+
/**
|
|
25
|
+
* Subclasses must return an array of constructors covering all types in union N.
|
|
26
|
+
* Wrap the result in the `supportedTypeCheck` helper to make sure that the array contains all
|
|
27
|
+
* and only classes that extend the given type.
|
|
28
|
+
*/
|
|
29
|
+
protected supportedNodeTypes(): readonly Constructable<N>[] | null;
|
|
30
|
+
/**
|
|
31
|
+
* Helper for subclasses to easily satisfy the exhaustive check.
|
|
32
|
+
*/
|
|
33
|
+
protected supportedNodeTypesGuard<T extends readonly Constructable<N>[]>(types: T & (Exclude<N, InstanceType<T[number]>> extends never ? T : never)): T;
|
|
34
|
+
/**
|
|
35
|
+
* This method gets invoked when the wraplet is initialized.
|
|
36
|
+
*/
|
|
37
|
+
protected onInitialize(): Promise<void>;
|
|
38
|
+
/**
|
|
39
|
+
* This method gets invoked when the wraplet is destroyed.
|
|
40
|
+
*/
|
|
41
|
+
protected onDestroy(): Promise<void>;
|
|
42
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Status } from "./types/Status";
|
|
2
|
+
import { Dependencies } from "./types/Wraplet";
|
|
3
|
+
import { DestroyListener } from "../DependencyManager/types/DestroyListener";
|
|
4
|
+
import { WrapletApiFactoryBasicCallback } from "./types/WrapletApiFactoryCallbacks";
|
|
5
|
+
export type OuterDestroyCallbackArgs = {
|
|
6
|
+
wraplet: Dependencies;
|
|
7
|
+
destroyListeners: DestroyListener[];
|
|
8
|
+
status: Status;
|
|
9
|
+
};
|
|
10
|
+
export declare function createOuterDestroyCallback(args: OuterDestroyCallbackArgs, destroyLogic?: WrapletApiFactoryBasicCallback): () => Promise<void>;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { Status } from "./types/Status";
|
|
2
|
+
import { Dependencies } from "./types/Wraplet";
|
|
3
|
+
import { WrapletApiFactoryBasicCallback } from "./types/WrapletApiFactoryCallbacks";
|
|
4
|
+
export type OuterInitializeCallbackArgs = {
|
|
5
|
+
wraplet: Dependencies;
|
|
6
|
+
destroyCallback: () => Promise<void>;
|
|
7
|
+
status: Status;
|
|
8
|
+
};
|
|
9
|
+
export declare function createOuterInitializeCallback(args: OuterInitializeCallbackArgs, initializeLogic?: WrapletApiFactoryBasicCallback): () => Promise<void>;
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { WrapletDependencyMap } from "./types/WrapletDependencyMap";
|
|
2
1
|
import { WrapletApiFactoryArgs } from "./types/WrapletApiFactoryArgs";
|
|
3
2
|
import { WrapletApi, WrapletApiDebug } from "./types/WrapletApi";
|
|
4
|
-
export declare const createWrapletApi: <N extends Node
|
|
3
|
+
export declare const createWrapletApi: <N extends Node>(args: WrapletApiFactoryArgs<N>) => WrapletApi<N> & WrapletApiDebug<N>;
|
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
import { StatusWritable } from "../Wraplet/types/Status";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
import { WrapletDependencyMap } from "./types/WrapletDependencyMap";
|
|
6
|
-
export declare function initializationStarted<N extends Node, M extends WrapletDependencyMap>(status: StatusWritable, core: Core<N, M>, wraplet: Wraplet<N>): Promise<boolean>;
|
|
2
|
+
import { DestroyListener } from "../DependencyManager/types/DestroyListener";
|
|
3
|
+
import { Dependencies } from "../Wraplet/types/Wraplet";
|
|
4
|
+
export declare function initializationStarted(status: StatusWritable): boolean;
|
|
7
5
|
export declare function initializationCompleted(status: StatusWritable, destroyMethod: () => Promise<void>): Promise<void>;
|
|
8
|
-
export declare function destructionStarted
|
|
9
|
-
export declare function destructionCompleted
|
|
6
|
+
export declare function destructionStarted(status: StatusWritable): boolean;
|
|
7
|
+
export declare function destructionCompleted(status: StatusWritable, wraplet: Dependencies, destroyListeners: DestroyListener[]): Promise<void>;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { DestroyListener } from "../../DependencyManager/types/DestroyListener";
|
|
2
|
+
import { Status } from "./Status";
|
|
3
|
+
export declare const DependencyApiSymbol: unique symbol;
|
|
4
|
+
export interface BaseWrapletApi {
|
|
5
|
+
status: Status;
|
|
6
|
+
destroy(): Promise<void>;
|
|
7
|
+
initialize(): Promise<void>;
|
|
8
|
+
addDestroyListener(callback: DestroyListener): void;
|
|
9
|
+
}
|
|
10
|
+
export interface DependencyApi extends BaseWrapletApi {
|
|
11
|
+
[DependencyApiSymbol]: true;
|
|
12
|
+
}
|
|
13
|
+
export declare function isDependencyApi(object: unknown): object is DependencyApi;
|
|
14
|
+
export interface DependencyApiDebug {
|
|
15
|
+
__destroyListeners: DestroyListener[];
|
|
16
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { WrapletApiFactoryBasicCallback } from "./WrapletApiFactoryCallbacks";
|
|
2
|
+
import { Dependencies } from "./Wraplet";
|
|
3
|
+
export type DependencyApiFactoryArgs = {
|
|
4
|
+
wraplet: Dependencies;
|
|
5
|
+
destroyCallback?: WrapletApiFactoryBasicCallback;
|
|
6
|
+
initializeCallback?: WrapletApiFactoryBasicCallback;
|
|
7
|
+
};
|
|
@@ -1,2 +1,3 @@
|
|
|
1
1
|
import { WrapletDependencyMap } from "./WrapletDependencyMap";
|
|
2
|
-
|
|
2
|
+
import { InstantiableReturnType } from "../../utils/types/Utils";
|
|
3
|
+
export type DependencyInstance<M extends WrapletDependencyMap, K extends keyof M = keyof M> = InstantiableReturnType<M[K]["Class"]>;
|
|
@@ -1,8 +1,15 @@
|
|
|
1
|
+
import { DependencyApi } from "./DependencyApi";
|
|
1
2
|
import { WrapletApi } from "./WrapletApi";
|
|
2
|
-
declare const
|
|
3
|
-
export
|
|
3
|
+
export declare const DependencySymbol: unique symbol;
|
|
4
|
+
export interface Dependency {
|
|
5
|
+
[DependencySymbol]: true;
|
|
6
|
+
wraplet: DependencyApi;
|
|
7
|
+
}
|
|
8
|
+
export declare function isDependency(object: unknown): object is Dependency;
|
|
9
|
+
export declare const WrapletSymbol: unique symbol;
|
|
4
10
|
export interface Wraplet<N extends Node = Node> {
|
|
5
11
|
[WrapletSymbol]: true;
|
|
6
12
|
wraplet: WrapletApi<N>;
|
|
7
13
|
}
|
|
8
14
|
export declare function isWraplet<N extends Node>(object: unknown): object is Wraplet<N>;
|
|
15
|
+
export type Dependencies = Wraplet | Dependency;
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { Wraplet } from "
|
|
4
|
-
export
|
|
5
|
-
|
|
1
|
+
import { BaseWrapletApi, DependencyApiDebug } from "./DependencyApi";
|
|
2
|
+
import { DestroyListener } from "../../DependencyManager/types/DestroyListener";
|
|
3
|
+
import { Wraplet } from "./Wraplet";
|
|
4
|
+
export declare const WrapletApiSymbol: unique symbol;
|
|
5
|
+
export interface WrapletApi<N extends Node = Node> extends BaseWrapletApi {
|
|
6
|
+
[WrapletApiSymbol]: true;
|
|
6
7
|
accessNode(callback: (node: N) => void): void;
|
|
7
|
-
destroy(): Promise<void>;
|
|
8
|
-
initialize(): Promise<void>;
|
|
9
8
|
addDestroyListener(callback: DestroyListener<Wraplet<N>>): void;
|
|
10
9
|
}
|
|
11
|
-
export
|
|
10
|
+
export declare function isWrapletApi<N extends Node>(object: unknown): object is WrapletApi<N>;
|
|
11
|
+
export interface WrapletApiDebug<N extends Node> extends DependencyApiDebug {
|
|
12
12
|
__nodeAccessors: ((node: N) => void)[];
|
|
13
13
|
}
|
|
@@ -1,12 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { Core } from "../../Core/types/Core";
|
|
3
|
-
import { DestroyListener } from "../../Core/types/DestroyListener";
|
|
4
|
-
import { WrapletApiFactoryBasicCallback } from "./WrapletApiFactoryBasicCallback";
|
|
1
|
+
import { DependencyApiFactoryArgs } from "./DependencyApiFactoryArgs";
|
|
5
2
|
import { Wraplet } from "./Wraplet";
|
|
6
|
-
export type WrapletApiFactoryArgs<N extends Node = Node
|
|
7
|
-
|
|
3
|
+
export type WrapletApiFactoryArgs<N extends Node = Node> = {
|
|
4
|
+
node: N;
|
|
8
5
|
wraplet: Wraplet<N>;
|
|
9
|
-
|
|
10
|
-
initializeCallback?: WrapletApiFactoryBasicCallback;
|
|
11
|
-
destroyCallback?: WrapletApiFactoryBasicCallback;
|
|
12
|
-
};
|
|
6
|
+
} & Omit<DependencyApiFactoryArgs, "wraplet">;
|
|
@@ -1,22 +1,18 @@
|
|
|
1
|
-
import { Wraplet } from "./Wraplet";
|
|
2
|
-
import { WrapletDependencyMap } from "./WrapletDependencyMap";
|
|
3
|
-
import { CoreInitOptions } from "../../Core/types/CoreInitOptions";
|
|
4
|
-
import { DynamicMap } from "../../Map/types/DynamicMap";
|
|
1
|
+
import { Dependency, Wraplet } from "./Wraplet";
|
|
5
2
|
import { Constructable } from "../../utils/types/Utils";
|
|
3
|
+
import { Injector } from "../../Injector/types/Injector";
|
|
6
4
|
export type SelectorCallback<N extends ParentNode = ParentNode> = (node: N) => Node[];
|
|
7
|
-
export type WrapletDependencyDefinition
|
|
5
|
+
export type WrapletDependencyDefinition = {
|
|
8
6
|
selector?: string | SelectorCallback;
|
|
9
|
-
Class: Constructable<Wraplet<any
|
|
10
|
-
|
|
11
|
-
coreOptions?: CoreInitOptions<M>;
|
|
7
|
+
Class: Constructable<Wraplet<any> | Dependency>;
|
|
8
|
+
injector?: Injector;
|
|
12
9
|
required: boolean;
|
|
13
10
|
multiple: boolean;
|
|
14
11
|
args?: unknown[];
|
|
15
12
|
destructible?: boolean;
|
|
16
13
|
};
|
|
17
|
-
export type WrapletDependencyDefinitionWithDefaults<T extends WrapletDependencyDefinition = WrapletDependencyDefinition
|
|
14
|
+
export type WrapletDependencyDefinitionWithDefaults<T extends WrapletDependencyDefinition = WrapletDependencyDefinition> = T & {
|
|
18
15
|
args: unknown[];
|
|
19
16
|
destructible: boolean;
|
|
20
|
-
|
|
21
|
-
coreOptions: CoreInitOptions<M>;
|
|
17
|
+
injector: Injector;
|
|
22
18
|
};
|
|
@@ -3,6 +3,12 @@ export type WrapletDependencyMap = {
|
|
|
3
3
|
[id: string]: WrapletDependencyDefinition;
|
|
4
4
|
};
|
|
5
5
|
export type WrapletDependencyMapWithDefaults<M extends WrapletDependencyMap = WrapletDependencyMap> = {
|
|
6
|
-
[key in keyof M]: WrapletDependencyDefinitionWithDefaults<M[key]
|
|
6
|
+
[key in keyof M]: WrapletDependencyDefinitionWithDefaults<M[key]>;
|
|
7
7
|
};
|
|
8
|
+
export type SingleDependencyKeys<M extends WrapletDependencyMap> = Extract<keyof {
|
|
9
|
+
[K in keyof M as M[K]["multiple"] extends false ? K : never]: true;
|
|
10
|
+
}, string>;
|
|
11
|
+
export type MultipleDependencyKeys<M extends WrapletDependencyMap> = Extract<keyof {
|
|
12
|
+
[K in keyof M as M[K]["multiple"] extends true ? K : never]: true;
|
|
13
|
+
}, string>;
|
|
8
14
|
export declare function isWrapletDependencyMap(object: unknown): object is WrapletDependencyMapWithDefaults;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const isOverridden: (instance: object, methodName: string, stopAt?: Function) => boolean;
|