@allgemein/moduls 1.8.1 → 1.9.1
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/Constants.js +2 -5
- package/Constants.js.map +1 -1
- package/README.md +88 -0
- package/browser.d.ts +19 -19
- package/browser.js +6 -15
- package/browser.js.map +1 -1
- package/index.d.ts +5 -5
- package/index.js +5 -18
- package/index.js.map +1 -1
- package/loader/AbstractModuleHandle.d.ts +1 -1
- package/loader/AbstractModuleHandle.js +1 -5
- package/loader/AbstractModuleHandle.js.map +1 -1
- package/loader/AbstractModuleLoader.d.ts +5 -5
- package/loader/AbstractModuleLoader.js +7 -13
- package/loader/AbstractModuleLoader.js.map +1 -1
- package/loader/IModuleLoader.d.ts +1 -1
- package/loader/IModuleLoader.js +1 -2
- package/loader/IModuleOptions.d.ts +1 -1
- package/loader/IModuleOptions.js +1 -2
- package/loader/classes/ClassesHandle.d.ts +1 -1
- package/loader/classes/ClassesHandle.js +2 -6
- package/loader/classes/ClassesHandle.js.map +1 -1
- package/loader/classes/ClassesLoader.d.ts +8 -8
- package/loader/classes/ClassesLoader.js +36 -40
- package/loader/classes/ClassesLoader.js.map +1 -1
- package/loader/classes/IClassesLoader.js +1 -2
- package/loader/classes/IClassesOptions.d.ts +1 -1
- package/loader/classes/IClassesOptions.js +1 -2
- package/loader/require/IRequireLoader.d.ts +1 -1
- package/loader/require/IRequireLoader.js +1 -2
- package/loader/require/IRequireOptions.d.ts +2 -3
- package/loader/require/IRequireOptions.js +1 -2
- package/loader/require/RequireHandle.d.ts +1 -1
- package/loader/require/RequireHandle.js +2 -6
- package/loader/require/RequireHandle.js.map +1 -1
- package/loader/require/RequireLoader.d.ts +5 -5
- package/loader/require/RequireLoader.js +17 -21
- package/loader/require/RequireLoader.js.map +1 -1
- package/loader/settings/ISettingsLoader.js +1 -2
- package/loader/settings/ISettingsOptions.d.ts +1 -1
- package/loader/settings/ISettingsOptions.js +1 -2
- package/loader/settings/SettingsHandle.d.ts +1 -1
- package/loader/settings/SettingsHandle.js +2 -6
- package/loader/settings/SettingsHandle.js.map +1 -1
- package/loader/settings/SettingsLoader.d.ts +5 -5
- package/loader/settings/SettingsLoader.js +14 -18
- package/loader/settings/SettingsLoader.js.map +1 -1
- package/package.json +3 -2
- package/registry/Constants.d.ts +1 -1
- package/registry/Constants.js +3 -5
- package/registry/Constants.js.map +1 -1
- package/registry/ICache.js +1 -2
- package/registry/IModuleRegistry.d.ts +8 -8
- package/registry/IModuleRegistry.js +1 -2
- package/registry/IModuleRegistryOptions.d.ts +1 -1
- package/registry/IModuleRegistryOptions.js +1 -2
- package/registry/ISubModule.js +1 -2
- package/registry/ModuleDescriptor.d.ts +1 -1
- package/registry/ModuleDescriptor.js +4 -8
- package/registry/ModuleDescriptor.js.map +1 -1
- package/registry/ModuleRegistry.d.ts +11 -11
- package/registry/ModuleRegistry.js +45 -55
- package/registry/ModuleRegistry.js.map +1 -1
- package/utils/Helper.d.ts +6 -1
- package/utils/Helper.js +67 -58
- package/utils/Helper.js.map +1 -1
- package/utils/INpmlsOptions.js +1 -2
package/Constants.js
CHANGED
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
exports.C_NODE_MODULES = exports.C_PACKAGE_JSON = void 0;
|
|
4
|
-
exports.C_PACKAGE_JSON = 'package.json';
|
|
5
|
-
exports.C_NODE_MODULES = 'node_modules';
|
|
1
|
+
export const C_PACKAGE_JSON = 'package.json';
|
|
2
|
+
export const C_NODE_MODULES = 'node_modules';
|
|
6
3
|
//# sourceMappingURL=Constants.js.map
|
package/Constants.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Constants.js","sourceRoot":"","sources":["../../src/Constants.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Constants.js","sourceRoot":"","sources":["../../src/Constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,cAAc,GAAG,cAAc,CAAC;AAC7C,MAAM,CAAC,MAAM,cAAc,GAAG,cAAc,CAAC"}
|
package/README.md
CHANGED
|
@@ -1,5 +1,93 @@
|
|
|
1
1
|
# @allgemein/moduls
|
|
2
2
|
|
|
3
|
+
`@allgemein/moduls` handles and manages contextual modules for complex and modular applications.
|
|
4
|
+
It scans `node_modules` (or any given set of paths) for packages that follow a simple module
|
|
5
|
+
convention and gives you a small plugin/module-registry infrastructure on top of them: modules
|
|
6
|
+
can be discovered, filtered, and their content (classes, settings, or arbitrary JS files) can be
|
|
7
|
+
loaded on demand through pluggable loaders.
|
|
3
8
|
|
|
9
|
+
This is useful whenever an application needs to be extended by independently installed/npm
|
|
10
|
+
packaged modules (plugins) that should be discovered dynamically instead of being wired together
|
|
11
|
+
by hand.
|
|
4
12
|
|
|
13
|
+
## Features
|
|
5
14
|
|
|
15
|
+
* Discover modules by scanning one or more paths (typically `node_modules`) for a configurable
|
|
16
|
+
depth and pattern
|
|
17
|
+
* Filter discovered modules with a custom `packageFilter` / loader-level `filter`
|
|
18
|
+
* Pluggable loaders:
|
|
19
|
+
* `RequireLoader` - require a file per module and invoke a lifecycle hook (e.g. `boot`) on it
|
|
20
|
+
* `ClassesLoader` - collect classes exported from files/directories/glob patterns per module
|
|
21
|
+
* `SettingsLoader` - collect settings declared inline in `package.json` or in dedicated files
|
|
22
|
+
* Cache support for scanned directories to speed up repeated lookups
|
|
23
|
+
* Write your own loader by implementing `IModuleLoader` / extending `AbstractModuleLoader`
|
|
24
|
+
|
|
25
|
+
## Install
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
npm i @allgemein/moduls
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## Usage
|
|
32
|
+
|
|
33
|
+
### Discover modules
|
|
34
|
+
|
|
35
|
+
```ts
|
|
36
|
+
import {ModuleRegistry} from '@allgemein/moduls';
|
|
37
|
+
|
|
38
|
+
const registry = new ModuleRegistry({
|
|
39
|
+
paths: ['./node_modules']
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
await registry.rebuild();
|
|
43
|
+
console.log(registry.modules());
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
### Loading classes exported by modules
|
|
47
|
+
|
|
48
|
+
```ts
|
|
49
|
+
import {ModuleRegistry, ClassesLoader, IClassesOptions} from '@allgemein/moduls';
|
|
50
|
+
|
|
51
|
+
const registry = new ModuleRegistry({paths: ['./node_modules']});
|
|
52
|
+
await registry.rebuild();
|
|
53
|
+
|
|
54
|
+
const loader = await registry.loader<ClassesLoader, IClassesOptions>(ClassesLoader, {
|
|
55
|
+
libs: [
|
|
56
|
+
{topic: 'generic', refs: ['lib']}
|
|
57
|
+
]
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
const classes = loader.getClasses('generic');
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
### Invoking a lifecycle hook via require
|
|
64
|
+
|
|
65
|
+
```ts
|
|
66
|
+
import {ModuleRegistry, RequireLoader, IRequireOptions, ModuleDescriptor} from '@allgemein/moduls';
|
|
67
|
+
|
|
68
|
+
const registry = new ModuleRegistry({paths: ['./node_modules']});
|
|
69
|
+
await registry.rebuild();
|
|
70
|
+
|
|
71
|
+
const loader = await registry.loader<RequireLoader, IRequireOptions>(RequireLoader, {
|
|
72
|
+
filter: (m: ModuleDescriptor) => m.name === 'module1'
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
const context = {};
|
|
76
|
+
const invoked = await loader.invokeHook('boot', context);
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
### Collecting settings declared in package.json or dedicated files
|
|
80
|
+
|
|
81
|
+
```ts
|
|
82
|
+
import {ModuleRegistry, SettingsLoader, ISettingsOptions} from '@allgemein/moduls';
|
|
83
|
+
|
|
84
|
+
const registry = new ModuleRegistry({paths: ['./node_modules']});
|
|
85
|
+
await registry.rebuild();
|
|
86
|
+
|
|
87
|
+
const loader = await registry.loader<SettingsLoader, ISettingsOptions>(SettingsLoader, {
|
|
88
|
+
ref: 'package.json',
|
|
89
|
+
path: 'settings'
|
|
90
|
+
});
|
|
91
|
+
|
|
92
|
+
const settings = loader.getSettings();
|
|
93
|
+
```
|
package/browser.d.ts
CHANGED
|
@@ -1,19 +1,19 @@
|
|
|
1
|
-
export { INpmlsOptions } from './utils/INpmlsOptions';
|
|
2
|
-
export { ICache } from './registry/ICache';
|
|
3
|
-
export { ISubModule } from './registry/ISubModule';
|
|
4
|
-
export { IModuleRegistryOptions } from './registry/IModuleRegistryOptions';
|
|
5
|
-
export { ModuleDescriptor } from './registry/ModuleDescriptor';
|
|
6
|
-
export { IModuleRegistry } from './registry/IModuleRegistry';
|
|
7
|
-
export { IModuleLoader } from './loader/IModuleLoader';
|
|
8
|
-
export { AbstractModuleHandle } from './loader/AbstractModuleHandle';
|
|
9
|
-
export { AbstractModuleLoader } from './loader/AbstractModuleLoader';
|
|
10
|
-
export { IModuleOptions } from './loader/IModuleOptions';
|
|
11
|
-
export { IRequireOptions } from './loader/require/IRequireOptions';
|
|
12
|
-
export { RequireHandle } from './loader/require/RequireHandle';
|
|
13
|
-
export { IRequireLoader } from './loader/require/IRequireLoader';
|
|
14
|
-
export { IClassesOptions } from './loader/classes/IClassesOptions';
|
|
15
|
-
export { ClassesHandle } from './loader/classes/ClassesHandle';
|
|
16
|
-
export { IClassesLoader } from './loader/classes/IClassesLoader';
|
|
17
|
-
export { ISettingsOptions } from './loader/settings/ISettingsOptions';
|
|
18
|
-
export { SettingsHandle } from './loader/settings/SettingsHandle';
|
|
19
|
-
export { ISettingsLoader } from './loader/settings/ISettingsLoader';
|
|
1
|
+
export { INpmlsOptions } from './utils/INpmlsOptions.js';
|
|
2
|
+
export { ICache } from './registry/ICache.js';
|
|
3
|
+
export { ISubModule } from './registry/ISubModule.js';
|
|
4
|
+
export { IModuleRegistryOptions } from './registry/IModuleRegistryOptions.js';
|
|
5
|
+
export { ModuleDescriptor } from './registry/ModuleDescriptor.js';
|
|
6
|
+
export { IModuleRegistry } from './registry/IModuleRegistry.js';
|
|
7
|
+
export { IModuleLoader } from './loader/IModuleLoader.js';
|
|
8
|
+
export { AbstractModuleHandle } from './loader/AbstractModuleHandle.js';
|
|
9
|
+
export { AbstractModuleLoader } from './loader/AbstractModuleLoader.js';
|
|
10
|
+
export { IModuleOptions } from './loader/IModuleOptions.js';
|
|
11
|
+
export { IRequireOptions } from './loader/require/IRequireOptions.js';
|
|
12
|
+
export { RequireHandle } from './loader/require/RequireHandle.js';
|
|
13
|
+
export { IRequireLoader } from './loader/require/IRequireLoader.js';
|
|
14
|
+
export { IClassesOptions } from './loader/classes/IClassesOptions.js';
|
|
15
|
+
export { ClassesHandle } from './loader/classes/ClassesHandle.js';
|
|
16
|
+
export { IClassesLoader } from './loader/classes/IClassesLoader.js';
|
|
17
|
+
export { ISettingsOptions } from './loader/settings/ISettingsOptions.js';
|
|
18
|
+
export { SettingsHandle } from './loader/settings/SettingsHandle.js';
|
|
19
|
+
export { ISettingsLoader } from './loader/settings/ISettingsLoader.js';
|
package/browser.js
CHANGED
|
@@ -1,16 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
Object.defineProperty(exports, "AbstractModuleHandle", { enumerable: true, get: function () { return AbstractModuleHandle_1.AbstractModuleHandle; } });
|
|
8
|
-
var AbstractModuleLoader_1 = require("./loader/AbstractModuleLoader");
|
|
9
|
-
Object.defineProperty(exports, "AbstractModuleLoader", { enumerable: true, get: function () { return AbstractModuleLoader_1.AbstractModuleLoader; } });
|
|
10
|
-
var RequireHandle_1 = require("./loader/require/RequireHandle");
|
|
11
|
-
Object.defineProperty(exports, "RequireHandle", { enumerable: true, get: function () { return RequireHandle_1.RequireHandle; } });
|
|
12
|
-
var ClassesHandle_1 = require("./loader/classes/ClassesHandle");
|
|
13
|
-
Object.defineProperty(exports, "ClassesHandle", { enumerable: true, get: function () { return ClassesHandle_1.ClassesHandle; } });
|
|
14
|
-
var SettingsHandle_1 = require("./loader/settings/SettingsHandle");
|
|
15
|
-
Object.defineProperty(exports, "SettingsHandle", { enumerable: true, get: function () { return SettingsHandle_1.SettingsHandle; } });
|
|
1
|
+
export { ModuleDescriptor } from './registry/ModuleDescriptor.js';
|
|
2
|
+
export { AbstractModuleHandle } from './loader/AbstractModuleHandle.js';
|
|
3
|
+
export { AbstractModuleLoader } from './loader/AbstractModuleLoader.js';
|
|
4
|
+
export { RequireHandle } from './loader/require/RequireHandle.js';
|
|
5
|
+
export { ClassesHandle } from './loader/classes/ClassesHandle.js';
|
|
6
|
+
export { SettingsHandle } from './loader/settings/SettingsHandle.js';
|
|
16
7
|
//# sourceMappingURL=browser.js.map
|
package/browser.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser.js","sourceRoot":"","sources":["../../src/browser.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"browser.js","sourceRoot":"","sources":["../../src/browser.ts"],"names":[],"mappings":"AAKA,OAAO,EAAC,gBAAgB,EAAC,MAAM,gCAAgC,CAAC;AAIhE,OAAO,EAAC,oBAAoB,EAAC,MAAM,kCAAkC,CAAC;AACtE,OAAO,EAAC,oBAAoB,EAAC,MAAM,kCAAkC,CAAC;AAItE,OAAO,EAAC,aAAa,EAAC,MAAM,mCAAmC,CAAC;AAIhE,OAAO,EAAC,aAAa,EAAC,MAAM,mCAAmC,CAAC;AAIhE,OAAO,EAAC,cAAc,EAAC,MAAM,qCAAqC,CAAC"}
|
package/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export { ISettingsLoader, SettingsHandle, ISettingsOptions, IClassesLoader, ClassesHandle, IClassesOptions, IRequireLoader, RequireHandle, IRequireOptions, IModuleOptions, AbstractModuleLoader, AbstractModuleHandle, IModuleLoader, IModuleRegistry, ModuleDescriptor, IModuleRegistryOptions, ISubModule, ICache, INpmlsOptions } from './browser';
|
|
2
|
-
export { ModuleRegistry } from './registry/ModuleRegistry';
|
|
3
|
-
export { RequireLoader } from './loader/require/RequireLoader';
|
|
4
|
-
export { SettingsLoader } from './loader/settings/SettingsLoader';
|
|
5
|
-
export { ClassesLoader } from './loader/classes/ClassesLoader';
|
|
1
|
+
export { ISettingsLoader, SettingsHandle, ISettingsOptions, IClassesLoader, ClassesHandle, IClassesOptions, IRequireLoader, RequireHandle, IRequireOptions, IModuleOptions, AbstractModuleLoader, AbstractModuleHandle, IModuleLoader, IModuleRegistry, ModuleDescriptor, IModuleRegistryOptions, ISubModule, ICache, INpmlsOptions } from './browser.js';
|
|
2
|
+
export { ModuleRegistry } from './registry/ModuleRegistry.js';
|
|
3
|
+
export { RequireLoader } from './loader/require/RequireLoader.js';
|
|
4
|
+
export { SettingsLoader } from './loader/settings/SettingsLoader.js';
|
|
5
|
+
export { ClassesLoader } from './loader/classes/ClassesLoader.js';
|
package/index.js
CHANGED
|
@@ -1,19 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
Object.defineProperty(exports, "ClassesHandle", { enumerable: true, get: function () { return browser_1.ClassesHandle; } });
|
|
7
|
-
Object.defineProperty(exports, "RequireHandle", { enumerable: true, get: function () { return browser_1.RequireHandle; } });
|
|
8
|
-
Object.defineProperty(exports, "AbstractModuleLoader", { enumerable: true, get: function () { return browser_1.AbstractModuleLoader; } });
|
|
9
|
-
Object.defineProperty(exports, "AbstractModuleHandle", { enumerable: true, get: function () { return browser_1.AbstractModuleHandle; } });
|
|
10
|
-
Object.defineProperty(exports, "ModuleDescriptor", { enumerable: true, get: function () { return browser_1.ModuleDescriptor; } });
|
|
11
|
-
var ModuleRegistry_1 = require("./registry/ModuleRegistry");
|
|
12
|
-
Object.defineProperty(exports, "ModuleRegistry", { enumerable: true, get: function () { return ModuleRegistry_1.ModuleRegistry; } });
|
|
13
|
-
var RequireLoader_1 = require("./loader/require/RequireLoader");
|
|
14
|
-
Object.defineProperty(exports, "RequireLoader", { enumerable: true, get: function () { return RequireLoader_1.RequireLoader; } });
|
|
15
|
-
var SettingsLoader_1 = require("./loader/settings/SettingsLoader");
|
|
16
|
-
Object.defineProperty(exports, "SettingsLoader", { enumerable: true, get: function () { return SettingsLoader_1.SettingsLoader; } });
|
|
17
|
-
var ClassesLoader_1 = require("./loader/classes/ClassesLoader");
|
|
18
|
-
Object.defineProperty(exports, "ClassesLoader", { enumerable: true, get: function () { return ClassesLoader_1.ClassesLoader; } });
|
|
1
|
+
export { SettingsHandle, ClassesHandle, RequireHandle, AbstractModuleLoader, AbstractModuleHandle, ModuleDescriptor } from './browser.js';
|
|
2
|
+
export { ModuleRegistry } from './registry/ModuleRegistry.js';
|
|
3
|
+
export { RequireLoader } from './loader/require/RequireLoader.js';
|
|
4
|
+
export { SettingsLoader } from './loader/settings/SettingsLoader.js';
|
|
5
|
+
export { ClassesLoader } from './loader/classes/ClassesLoader.js';
|
|
19
6
|
//# sourceMappingURL=index.js.map
|
package/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,cAAc,EAGd,aAAa,EAGb,aAAa,EAGb,oBAAoB,EACpB,oBAAoB,EAGpB,gBAAgB,EAKjB,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAC,cAAc,EAAC,MAAM,8BAA8B,CAAC;AAC5D,OAAO,EAAC,aAAa,EAAC,MAAM,mCAAmC,CAAC;AAChE,OAAO,EAAC,cAAc,EAAC,MAAM,qCAAqC,CAAC;AACnE,OAAO,EAAC,aAAa,EAAC,MAAM,mCAAmC,CAAC"}
|
|
@@ -1,10 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.AbstractModuleHandle = void 0;
|
|
4
|
-
class AbstractModuleHandle {
|
|
1
|
+
export class AbstractModuleHandle {
|
|
5
2
|
constructor(module) {
|
|
6
3
|
this.module = module;
|
|
7
4
|
}
|
|
8
5
|
}
|
|
9
|
-
exports.AbstractModuleHandle = AbstractModuleHandle;
|
|
10
6
|
//# sourceMappingURL=AbstractModuleHandle.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AbstractModuleHandle.js","sourceRoot":"","sources":["../../../src/loader/AbstractModuleHandle.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"AbstractModuleHandle.js","sourceRoot":"","sources":["../../../src/loader/AbstractModuleHandle.ts"],"names":[],"mappings":"AAGA,MAAM,OAAgB,oBAAoB;IAIxC,YAAY,MAAwB;QAClC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;CAEF"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { ModuleDescriptor } from '../registry/ModuleDescriptor';
|
|
2
|
-
import { AbstractModuleHandle } from './AbstractModuleHandle';
|
|
3
|
-
import { ModuleRegistry } from '../registry/ModuleRegistry';
|
|
4
|
-
import { IModuleOptions } from './IModuleOptions';
|
|
5
|
-
import { IModuleLoader } from './IModuleLoader';
|
|
1
|
+
import { ModuleDescriptor } from '../registry/ModuleDescriptor.js';
|
|
2
|
+
import { AbstractModuleHandle } from './AbstractModuleHandle.js';
|
|
3
|
+
import { ModuleRegistry } from '../registry/ModuleRegistry.js';
|
|
4
|
+
import { IModuleOptions } from './IModuleOptions.js';
|
|
5
|
+
import { IModuleLoader } from './IModuleLoader.js';
|
|
6
6
|
export declare abstract class AbstractModuleLoader<T extends AbstractModuleHandle, OPT extends IModuleOptions> implements IModuleLoader<T> {
|
|
7
7
|
_options: OPT;
|
|
8
8
|
protected readonly registry: ModuleRegistry;
|
|
@@ -1,8 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
exports.AbstractModuleLoader = void 0;
|
|
4
|
-
const lodash_1 = require("lodash");
|
|
5
|
-
class AbstractModuleLoader {
|
|
1
|
+
import { find, isArray, orderBy } from '@allgemein/base';
|
|
2
|
+
export class AbstractModuleLoader {
|
|
6
3
|
constructor(registry, options) {
|
|
7
4
|
this._handles = [];
|
|
8
5
|
this.registry = registry;
|
|
@@ -13,13 +10,11 @@ class AbstractModuleLoader {
|
|
|
13
10
|
}
|
|
14
11
|
add(handle) {
|
|
15
12
|
if (handle) {
|
|
16
|
-
|
|
17
|
-
return x.module.name === handle.module.name;
|
|
18
|
-
});
|
|
13
|
+
const exists = find(this._handles, (x) => x.module.name === handle.module.name);
|
|
19
14
|
if (!exists) {
|
|
20
15
|
this._handles.push(handle);
|
|
21
16
|
// correct order if necessary
|
|
22
|
-
this._handles =
|
|
17
|
+
this._handles = orderBy(this._handles, [
|
|
23
18
|
x => x.module.weight,
|
|
24
19
|
x => x.module.child_modules.length,
|
|
25
20
|
x => x.module.id
|
|
@@ -32,9 +27,9 @@ class AbstractModuleLoader {
|
|
|
32
27
|
return handle;
|
|
33
28
|
}
|
|
34
29
|
load(modules) {
|
|
35
|
-
if (
|
|
30
|
+
if (isArray(modules)) {
|
|
36
31
|
const promises = [];
|
|
37
|
-
for (
|
|
32
|
+
for (const x of modules) {
|
|
38
33
|
if (this._options.filter && !this._options.filter(x)) {
|
|
39
34
|
continue;
|
|
40
35
|
}
|
|
@@ -48,7 +43,7 @@ class AbstractModuleLoader {
|
|
|
48
43
|
}
|
|
49
44
|
async _loadOne(modules) {
|
|
50
45
|
let res = null;
|
|
51
|
-
|
|
46
|
+
const y = await this.loadOne(modules);
|
|
52
47
|
try {
|
|
53
48
|
res = this.add(y);
|
|
54
49
|
}
|
|
@@ -71,5 +66,4 @@ class AbstractModuleLoader {
|
|
|
71
66
|
return res;
|
|
72
67
|
}
|
|
73
68
|
}
|
|
74
|
-
exports.AbstractModuleLoader = AbstractModuleLoader;
|
|
75
69
|
//# sourceMappingURL=AbstractModuleLoader.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AbstractModuleLoader.js","sourceRoot":"","sources":["../../../src/loader/AbstractModuleLoader.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"AbstractModuleLoader.js","sourceRoot":"","sources":["../../../src/loader/AbstractModuleLoader.ts"],"names":[],"mappings":"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"}
|
package/loader/IModuleLoader.js
CHANGED
package/loader/IModuleOptions.js
CHANGED
|
@@ -1,8 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
exports.ClassesHandle = void 0;
|
|
4
|
-
const AbstractModuleHandle_1 = require("../AbstractModuleHandle");
|
|
5
|
-
class ClassesHandle extends AbstractModuleHandle_1.AbstractModuleHandle {
|
|
1
|
+
import { AbstractModuleHandle } from '../AbstractModuleHandle.js';
|
|
2
|
+
export class ClassesHandle extends AbstractModuleHandle {
|
|
6
3
|
constructor() {
|
|
7
4
|
super(...arguments);
|
|
8
5
|
this.size = 0;
|
|
@@ -21,5 +18,4 @@ class ClassesHandle extends AbstractModuleHandle_1.AbstractModuleHandle {
|
|
|
21
18
|
return this.size;
|
|
22
19
|
}
|
|
23
20
|
}
|
|
24
|
-
exports.ClassesHandle = ClassesHandle;
|
|
25
21
|
//# sourceMappingURL=ClassesHandle.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClassesHandle.js","sourceRoot":"","sources":["../../../../src/loader/classes/ClassesHandle.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ClassesHandle.js","sourceRoot":"","sources":["../../../../src/loader/classes/ClassesHandle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,oBAAoB,EAAC,MAAM,4BAA4B,CAAC;AAGhE,MAAM,OAAO,aAAc,SAAQ,oBAAoB;IAAvD;;QAEE,SAAI,GAAW,CAAC,CAAC;QAEjB,YAAO,GAAkC,EAAE,CAAC;QAE5C,SAAI,GAAgC,EAAE,CAAC;IAmBzC,CAAC;IAhBC,UAAU,CAAC,KAAa;QACtB,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC;IAGD,GAAG,CAAC,KAAa,EAAE,IAAc,EAAE,OAAmB;QACpD,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC;QAC9B,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;QACxB,IAAI,CAAC,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC;IAC9B,CAAC;IAED,aAAa;QACX,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;CAGF"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { AbstractModuleLoader } from '../AbstractModuleLoader';
|
|
2
|
-
import { ModuleDescriptor } from '../../registry/ModuleDescriptor';
|
|
3
|
-
import { ClassesHandle } from './ClassesHandle';
|
|
4
|
-
import { IClassesOptions } from './IClassesOptions';
|
|
5
|
-
import {
|
|
6
|
-
import { IClassesLoader } from './IClassesLoader';
|
|
1
|
+
import { AbstractModuleLoader } from '../AbstractModuleLoader.js';
|
|
2
|
+
import { ModuleDescriptor } from '../../registry/ModuleDescriptor.js';
|
|
3
|
+
import { ClassesHandle } from './ClassesHandle.js';
|
|
4
|
+
import { IClassesOptions } from './IClassesOptions.js';
|
|
5
|
+
import { FunctionWithProps } from '@allgemein/base';
|
|
6
|
+
import { IClassesLoader } from './IClassesLoader.js';
|
|
7
7
|
export declare class ClassesLoader extends AbstractModuleLoader<ClassesHandle, IClassesOptions> implements IClassesLoader {
|
|
8
8
|
getClasses(topic: string): Function[];
|
|
9
9
|
getClassesWithFilter(topic: string, excludeFilter?: (className: string, modulName: string) => boolean): Function[];
|
|
@@ -12,6 +12,6 @@ export declare class ClassesLoader extends AbstractModuleLoader<ClassesHandle, I
|
|
|
12
12
|
};
|
|
13
13
|
protected loadOne(modul: ModuleDescriptor): Promise<ClassesHandle>;
|
|
14
14
|
private loadClasses;
|
|
15
|
-
static getSource(cls:
|
|
16
|
-
static getModulName(cls:
|
|
15
|
+
static getSource(cls: FunctionWithProps): string;
|
|
16
|
+
static getModulName(cls: FunctionWithProps): any;
|
|
17
17
|
}
|
|
@@ -1,28 +1,25 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
const ClassesHandle_1 = require("./ClassesHandle");
|
|
7
|
-
const base_1 = require("@allgemein/base");
|
|
8
|
-
class ClassesLoader extends AbstractModuleLoader_1.AbstractModuleLoader {
|
|
1
|
+
import { isEmpty } from '@allgemein/base';
|
|
2
|
+
import { AbstractModuleLoader } from '../AbstractModuleLoader.js';
|
|
3
|
+
import { ClassesHandle } from './ClassesHandle.js';
|
|
4
|
+
import { ClassLoader, PlatformUtils, __MODULNAME__, Glob } from '@allgemein/base';
|
|
5
|
+
export class ClassesLoader extends AbstractModuleLoader {
|
|
9
6
|
getClasses(topic) {
|
|
10
7
|
let classes = [];
|
|
11
|
-
for (
|
|
12
|
-
|
|
13
|
-
if (!
|
|
8
|
+
for (const handle of this.handles()) {
|
|
9
|
+
const cls = handle.getClasses(topic);
|
|
10
|
+
if (!isEmpty(cls)) {
|
|
14
11
|
classes = classes.concat(cls);
|
|
15
12
|
}
|
|
16
13
|
}
|
|
17
14
|
return classes;
|
|
18
15
|
}
|
|
19
16
|
getClassesWithFilter(topic, excludeFilter) {
|
|
20
|
-
|
|
21
|
-
for (
|
|
22
|
-
|
|
23
|
-
if (!
|
|
17
|
+
const classes = [];
|
|
18
|
+
for (const handle of this.handles()) {
|
|
19
|
+
const cls = handle.getClasses(topic);
|
|
20
|
+
if (!isEmpty(cls)) {
|
|
24
21
|
cls.forEach(c => {
|
|
25
|
-
const className =
|
|
22
|
+
const className = ClassLoader.getClassName(c);
|
|
26
23
|
if (excludeFilter && excludeFilter(className, handle.module.name)) {
|
|
27
24
|
return;
|
|
28
25
|
}
|
|
@@ -33,17 +30,17 @@ class ClassesLoader extends AbstractModuleLoader_1.AbstractModuleLoader {
|
|
|
33
30
|
return classes;
|
|
34
31
|
}
|
|
35
32
|
getClassesByModule(topic) {
|
|
36
|
-
|
|
37
|
-
for (
|
|
38
|
-
|
|
39
|
-
if (!
|
|
33
|
+
const classes = {};
|
|
34
|
+
for (const handle of this.handles()) {
|
|
35
|
+
const modulClasses = handle.getClasses(topic);
|
|
36
|
+
if (!isEmpty(modulClasses)) {
|
|
40
37
|
classes[handle.module.name] = modulClasses;
|
|
41
38
|
}
|
|
42
39
|
}
|
|
43
40
|
return classes;
|
|
44
41
|
}
|
|
45
42
|
async loadOne(modul) {
|
|
46
|
-
|
|
43
|
+
const handle = new ClassesHandle(modul);
|
|
47
44
|
// for (let lib of this._options.libs) {
|
|
48
45
|
const libs = await Promise.all(this._options.libs.map(async (lib) => {
|
|
49
46
|
const _lib = {
|
|
@@ -53,28 +50,28 @@ class ClassesLoader extends AbstractModuleLoader_1.AbstractModuleLoader {
|
|
|
53
50
|
};
|
|
54
51
|
const topic = lib.topic;
|
|
55
52
|
// let refs = [];
|
|
56
|
-
for (
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
if (!
|
|
60
|
-
for (
|
|
61
|
-
if (
|
|
62
|
-
_lib.refs.push(
|
|
53
|
+
for (const _path of lib.refs) {
|
|
54
|
+
const lib_path = PlatformUtils.join(modul.path, _path);
|
|
55
|
+
const res = await Glob.async(lib_path);
|
|
56
|
+
if (!isEmpty(res)) {
|
|
57
|
+
for (const r of res) {
|
|
58
|
+
if (PlatformUtils.fileExist(r) && PlatformUtils.isDir(r)) {
|
|
59
|
+
_lib.refs.push(PlatformUtils.join(r, '*'));
|
|
63
60
|
}
|
|
64
|
-
else if (
|
|
61
|
+
else if (PlatformUtils.fileExist(r) && PlatformUtils.isFile(r)) {
|
|
65
62
|
_lib.refs.push(r);
|
|
66
63
|
}
|
|
67
64
|
}
|
|
68
65
|
}
|
|
69
|
-
else if (
|
|
66
|
+
else if (PlatformUtils.fileExist(lib_path + '.js') && PlatformUtils.isFile(lib_path + '.js')) {
|
|
70
67
|
_lib.refs.push(lib_path + '.js');
|
|
71
68
|
}
|
|
72
|
-
else if (
|
|
69
|
+
else if (PlatformUtils.fileExist(lib_path + '.ts') && PlatformUtils.isFile(lib_path + '.ts')) {
|
|
73
70
|
// if ts-node is used on start
|
|
74
71
|
_lib.refs.push(lib_path + '.ts');
|
|
75
72
|
}
|
|
76
73
|
}
|
|
77
|
-
if (!
|
|
74
|
+
if (!isEmpty(_lib.refs)) {
|
|
78
75
|
_lib.classes = await this.loadClasses(_lib.refs, modul.name, topic);
|
|
79
76
|
// handle: ClassesHandle,
|
|
80
77
|
}
|
|
@@ -91,18 +88,18 @@ class ClassesLoader extends AbstractModuleLoader_1.AbstractModuleLoader {
|
|
|
91
88
|
return handle.hasAnyClasses() ? handle : null;
|
|
92
89
|
}
|
|
93
90
|
async loadClasses(refs, modulName, topic) {
|
|
94
|
-
|
|
95
|
-
if (!
|
|
91
|
+
const classes = await ClassLoader.importClassesFromAnyAsync(refs);
|
|
92
|
+
if (!isEmpty(classes)) {
|
|
96
93
|
// @ts-ignore
|
|
97
94
|
if (Reflect && Reflect['getOwnMetadata']) {
|
|
98
95
|
classes.forEach(cls => {
|
|
99
96
|
// @ts-ignore
|
|
100
|
-
Reflect['defineMetadata'](
|
|
97
|
+
Reflect['defineMetadata'](__MODULNAME__, modulName, cls);
|
|
101
98
|
});
|
|
102
99
|
}
|
|
103
100
|
else {
|
|
104
101
|
classes.forEach(cls => {
|
|
105
|
-
cls[
|
|
102
|
+
cls[__MODULNAME__] = modulName;
|
|
106
103
|
});
|
|
107
104
|
}
|
|
108
105
|
return classes;
|
|
@@ -110,18 +107,17 @@ class ClassesLoader extends AbstractModuleLoader_1.AbstractModuleLoader {
|
|
|
110
107
|
return [];
|
|
111
108
|
}
|
|
112
109
|
static getSource(cls) {
|
|
113
|
-
return
|
|
110
|
+
return ClassLoader.getSource(cls);
|
|
114
111
|
}
|
|
115
112
|
static getModulName(cls) {
|
|
116
113
|
// @ts-ignore
|
|
117
114
|
if (Reflect && Reflect['getOwnMetadata']) {
|
|
118
115
|
// @ts-ignore
|
|
119
|
-
return Reflect['getOwnMetadata'](
|
|
116
|
+
return Reflect['getOwnMetadata'](__MODULNAME__, cls);
|
|
120
117
|
}
|
|
121
118
|
else {
|
|
122
|
-
return cls[
|
|
119
|
+
return cls[__MODULNAME__] ? cls[__MODULNAME__] : null;
|
|
123
120
|
}
|
|
124
121
|
}
|
|
125
122
|
}
|
|
126
|
-
exports.ClassesLoader = ClassesLoader;
|
|
127
123
|
//# sourceMappingURL=ClassesLoader.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClassesLoader.js","sourceRoot":"","sources":["../../../../src/loader/classes/ClassesLoader.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ClassesLoader.js","sourceRoot":"","sources":["../../../../src/loader/classes/ClassesLoader.ts"],"names":[],"mappings":"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"}
|