@geosdi/ngx-model 1.2.3 → 1.2.4

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 CHANGED
@@ -1,24 +1,81 @@
1
- # NgxModel
1
+ # @geosdi/ngx-model
2
2
 
3
- This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 15.2.0.
3
+ The building blocks of two design patterns, plus a base model: a **chain of responsibility**
4
+ (`NgxChainHandler`) and a **mediator** with its colleagues (`NgxMediator`, `NgxColleague`). Plain
5
+ TypeScript: no Angular, no dependencies.
4
6
 
5
- ## Code scaffolding
7
+ ## Installation
6
8
 
7
- Run `ng generate component component-name --project ngx-model` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project ngx-model`.
8
- > Note: Don't forget to add `--project ngx-model` or else it will be added to the default project in your `angular.json` file.
9
+ `npm i @geosdi/ngx-model --save`
9
10
 
10
- ## Build
11
+ It has no dependencies.
11
12
 
12
- Run `ng build ngx-model` to build the project. The build artifacts will be stored in the `dist/` directory.
13
+ ## Chain of responsibility
13
14
 
14
- ## Publishing
15
+ `NgxChainHandler<B>` holds the next handler of the chain. Each handler decides whether it handles the
16
+ input or passes it on to `_successor`; the library gives the link, the method is yours.
15
17
 
16
- After building your library with `ng build ngx-model`, go to the dist folder `cd dist/ngx-model` and run `npm publish`.
18
+ ```typescript
19
+ import { NgxChainHandler } from "@geosdi/ngx-model";
17
20
 
18
- ## Running unit tests
21
+ abstract class StyleHandler extends NgxChainHandler<StyleHandler> {
22
+ abstract style(feature: Feature): PathOptions;
19
23
 
20
- Run `ng test ngx-model` to execute the unit tests via [Karma](https://karma-runner.github.io).
24
+ protected forward(feature: Feature): PathOptions {
25
+ return this._successor ? this._successor.style(feature) : {};
26
+ }
27
+ }
21
28
 
22
- ## Further help
29
+ class BuildingHandler extends StyleHandler {
30
+ style(feature: Feature): PathOptions {
31
+ return feature.properties.type === "building"
32
+ ? { color: "blue" }
33
+ : this.forward(feature);
34
+ }
35
+ }
23
36
 
24
- To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page.
37
+ const first = new BuildingHandler();
38
+ first.successor = new AggregateHandler();
39
+ first.style(feature);
40
+ ```
41
+
42
+ - the type parameter is the handler's own base type, so `_successor` has the same methods as the
43
+ handler that calls it;
44
+ - `successor` has only a setter: subclasses read `_successor`, which is `protected`;
45
+ - the last handler of the chain has no successor, so decide what it returns when nothing matched.
46
+
47
+ ## Mediator
48
+
49
+ `NgxMediator<C>` receives the colleagues and finds them by key. A colleague is anything that
50
+ implements `INgxColleague` — a `getKey()` — or extends `NgxColleague`.
51
+
52
+ ```typescript
53
+ import { NgxColleague, NgxMediator } from "@geosdi/ngx-model";
54
+
55
+ class DeleteAction extends NgxColleague {
56
+ getKey(): string {
57
+ return "delete";
58
+ }
59
+ }
60
+
61
+ const mediator = new NgxMediator<NgxColleague>([
62
+ new DeleteAction(),
63
+ new SplitAction(),
64
+ ]);
65
+ mediator.getColleague("delete"); // the DeleteAction
66
+ mediator.getColleague("missing"); // null
67
+ ```
68
+
69
+ - the colleagues are indexed once, in the constructor: to change them, build a new mediator;
70
+ - **two colleagues with the same key**: the last one wins, with no warning;
71
+ - `getColleague` returns `null` for an unknown key;
72
+ - `NgxMediator` is a plain class, not an Angular service: to inject it, provide it yourself (for
73
+ instance with a `useFactory` that receives the colleagues).
74
+
75
+ ## Model
76
+
77
+ `Model` is the base interface of an entity: an optional `id`, a string or a number.
78
+
79
+ ## Changes in 1.2.4
80
+
81
+ - This README, which replaces the one generated by Angular CLI. The code is unchanged.
@@ -1 +1 @@
1
- {"version":3,"file":"geosdi-ngx-model.mjs","sources":["../tmp-esm2022/lib/ngx-chain-handler.js","../tmp-esm2022/lib/ngx-colleague.js","../tmp-esm2022/lib/ngx-mediator.service.js","../tmp-esm2022/index.js","../tmp-esm2022/geosdi-ngx-model.js"],"sourcesContent":["/**\n * @author Vito Salvia - CNR IMAA geoSDI Group\n * @email vito.salvia@gmail.com\n */\nexport class NgxChainHandler {\n /**\n *\n */\n set successor(_successor) {\n this._successor = _successor;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWNoYWluLWhhbmRsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9nZW9zZGkvc3VwcG9ydC9uZ3gtbW9kZWwvc3JjL2xpYi9uZ3gtY2hhaW4taGFuZGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFDSCxNQUFNLE9BQWdCLGVBQWU7SUFHakM7O09BRUc7SUFDSCxJQUFXLFNBQVMsQ0FBQyxVQUFhO1FBQzlCLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO0lBQ2pDLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGF1dGhvciBWaXRvIFNhbHZpYSAtIENOUiBJTUFBIGdlb1NESSBHcm91cFxuICogQGVtYWlsIHZpdG8uc2FsdmlhQGdtYWlsLmNvbVxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgTmd4Q2hhaW5IYW5kbGVyPEIgZXh0ZW5kcyBOZ3hDaGFpbkhhbmRsZXI8Qj4+IHtcbiAgICBwcm90ZWN0ZWQgX3N1Y2Nlc3NvcjogQjtcblxuICAgIC8qKlxuICAgICAqXG4gICAgICovXG4gICAgcHVibGljIHNldCBzdWNjZXNzb3IoX3N1Y2Nlc3NvcjogQikge1xuICAgICAgICB0aGlzLl9zdWNjZXNzb3IgPSBfc3VjY2Vzc29yO1xuICAgIH1cbn1cbiJdfQ==","export class NgxColleague {\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWNvbGxlYWd1ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dlb3NkaS9zdXBwb3J0L25neC1tb2RlbC9zcmMvbGliL25neC1jb2xsZWFndWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBV0EsTUFBTSxPQUFnQixZQUFZO0NBS2pDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAYXV0aG9yIFZpdG8gU2FsdmlhIC0gQ05SIElNQUEgZ2VvU0RJIEdyb3VwXG4gKiBAZW1haWwgdml0by5zYWx2aWFAZ21haWwuY29tXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSU5neENvbGxlYWd1ZSB7XG4gICAgLyoqXG4gICAgICpcbiAgICAgKi9cbiAgICBnZXRLZXkoKTogYW55O1xufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgTmd4Q29sbGVhZ3VlIGltcGxlbWVudHMgSU5neENvbGxlYWd1ZSB7XG4gICAgLyoqXG4gICAgICpcbiAgICAgKi9cbiAgICBhYnN0cmFjdCBnZXRLZXkoKTogYW55O1xufVxuIl19","/**\n * @author Vito Salvia - CNR IMAA geoSDI Group\n * @email vito.salvia@gmail.com\n */\nexport class NgxMediator {\n constructor(colleagues) {\n this.colleagues = colleagues;\n this.colleaguesMap = new Map();\n this.initColleagues();\n }\n /**\n *\n */\n initColleagues() {\n this.colleagues.forEach((c) => {\n this.colleaguesMap.set(c.getKey(), c);\n });\n }\n /**\n *\n * @param key\n */\n getColleague(key) {\n return this.colleaguesMap.has(key) ? this.colleaguesMap.get(key) : null;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LW1lZGlhdG9yLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9nZW9zZGkvc3VwcG9ydC9uZ3gtbW9kZWwvc3JjL2xpYi9uZ3gtbWVkaWF0b3Iuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQTs7O0dBR0c7QUFDSCxNQUFNLE9BQU8sV0FBVztJQUdwQixZQUFvQixVQUE0QjtRQUE1QixlQUFVLEdBQVYsVUFBVSxDQUFrQjtRQUZ0QyxrQkFBYSxHQUFtQixJQUFJLEdBQUcsRUFBRSxDQUFDO1FBR2hELElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQ7O09BRUc7SUFDSCxjQUFjO1FBQ1YsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUMxQixJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDMUMsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsWUFBWSxDQUFDLEdBQVc7UUFDcEIsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUM1RSxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJTmd4Q29sbGVhZ3VlIH0gZnJvbSBcIi4vbmd4LWNvbGxlYWd1ZVwiO1xuXG4vKipcbiAqIEBhdXRob3IgVml0byBTYWx2aWEgLSBDTlIgSU1BQSBnZW9TREkgR3JvdXBcbiAqIEBlbWFpbCB2aXRvLnNhbHZpYUBnbWFpbC5jb21cbiAqL1xuZXhwb3J0IGNsYXNzIE5neE1lZGlhdG9yPEMgZXh0ZW5kcyBJTmd4Q29sbGVhZ3VlPiB7XG4gICAgcHJvdGVjdGVkIGNvbGxlYWd1ZXNNYXA6IE1hcDxzdHJpbmcsIEM+ID0gbmV3IE1hcCgpO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBjb2xsZWFndWVzOiBSZWFkb25seUFycmF5PEM+KSB7XG4gICAgICAgIHRoaXMuaW5pdENvbGxlYWd1ZXMoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKlxuICAgICAqL1xuICAgIGluaXRDb2xsZWFndWVzKCkge1xuICAgICAgICB0aGlzLmNvbGxlYWd1ZXMuZm9yRWFjaCgoYykgPT4ge1xuICAgICAgICAgICAgdGhpcy5jb2xsZWFndWVzTWFwLnNldChjLmdldEtleSgpLCBjKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBAcGFyYW0ga2V5XG4gICAgICovXG4gICAgZ2V0Q29sbGVhZ3VlKGtleTogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbGxlYWd1ZXNNYXAuaGFzKGtleSkgPyB0aGlzLmNvbGxlYWd1ZXNNYXAuZ2V0KGtleSkgOiBudWxsO1xuICAgIH1cbn1cbiJdfQ==","/*\n * Public API Surface of ngx-model\n */\nexport * from \"./lib/ngx-model\";\nexport * from \"./lib/ngx-chain-handler\";\nexport * from \"./lib/ngx-colleague\";\nexport * from \"./lib/ngx-mediator.service\";\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9nZW9zZGkvc3VwcG9ydC9uZ3gtbW9kZWwvc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyw0QkFBNEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBQdWJsaWMgQVBJIFN1cmZhY2Ugb2Ygbmd4LW1vZGVsXG4gKi9cblxuZXhwb3J0ICogZnJvbSBcIi4vbGliL25neC1tb2RlbFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vbGliL25neC1jaGFpbi1oYW5kbGVyXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9saWIvbmd4LWNvbGxlYWd1ZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vbGliL25neC1tZWRpYXRvci5zZXJ2aWNlXCI7XG4iXX0=","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2Vvc2RpLW5neC1tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2dlb3NkaS9zdXBwb3J0L25neC1tb2RlbC9zcmMvZ2Vvc2RpLW5neC1tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ=="],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACO,MAAM,eAAe,CAAC;AAC7B;AACA;AACA;AACA,IAAI,IAAI,SAAS,CAAC,UAAU,EAAE;AAC9B,QAAQ,IAAI,CAAC,UAAU,GAAG,UAAU;AACpC,IAAI;AACJ;;ACXO,MAAM,YAAY,CAAC;AAC1B;;ACDA;AACA;AACA;AACA;AACO,MAAM,WAAW,CAAC;AACzB,IAAI,WAAW,CAAC,UAAU,EAAE;AAC5B,QAAQ,IAAI,CAAC,UAAU,GAAG,UAAU;AACpC,QAAQ,IAAI,CAAC,aAAa,GAAG,IAAI,GAAG,EAAE;AACtC,QAAQ,IAAI,CAAC,cAAc,EAAE;AAC7B,IAAI;AACJ;AACA;AACA;AACA,IAAI,cAAc,GAAG;AACrB,QAAQ,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK;AACvC,YAAY,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AACjD,QAAQ,CAAC,CAAC;AACV,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,YAAY,CAAC,GAAG,EAAE;AACtB,QAAQ,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI;AAC/E,IAAI;AACJ;;ACzBA;AACA;AACA;;ACFA;AACA;AACA;;;;"}
1
+ {"version":3,"file":"geosdi-ngx-model.mjs","sources":["../../../../projects/geosdi/support/ngx-model/src/lib/ngx-chain-handler.ts","../../../../projects/geosdi/support/ngx-model/src/lib/ngx-colleague.ts","../../../../projects/geosdi/support/ngx-model/src/lib/ngx-mediator.service.ts","../../../../projects/geosdi/support/ngx-model/src/index.ts","../../../../projects/geosdi/support/ngx-model/src/geosdi-ngx-model.ts"],"sourcesContent":["/**\n * @author Vito Salvia - CNR IMAA geoSDI Group\n * @email vito.salvia@gmail.com\n */\nexport abstract class NgxChainHandler<B extends NgxChainHandler<B>> {\n protected _successor: B;\n\n /**\n *\n */\n public set successor(_successor: B) {\n this._successor = _successor;\n }\n}\n","/**\n * @author Vito Salvia - CNR IMAA geoSDI Group\n * @email vito.salvia@gmail.com\n */\nexport interface INgxColleague {\n /**\n *\n */\n getKey(): any;\n}\n\nexport abstract class NgxColleague implements INgxColleague {\n /**\n *\n */\n abstract getKey(): any;\n}\n","import { INgxColleague } from \"./ngx-colleague\";\n\n/**\n * @author Vito Salvia - CNR IMAA geoSDI Group\n * @email vito.salvia@gmail.com\n */\nexport class NgxMediator<C extends INgxColleague> {\n protected colleaguesMap: Map<string, C> = new Map();\n\n constructor(private colleagues: ReadonlyArray<C>) {\n this.initColleagues();\n }\n\n /**\n *\n */\n initColleagues() {\n this.colleagues.forEach((c) => {\n this.colleaguesMap.set(c.getKey(), c);\n });\n }\n\n /**\n *\n * @param key\n */\n getColleague(key: string) {\n return this.colleaguesMap.has(key) ? this.colleaguesMap.get(key) : null;\n }\n}\n","/*\n * Public API Surface of ngx-model\n */\n\nexport * from \"./lib/ngx-model\";\nexport * from \"./lib/ngx-chain-handler\";\nexport * from \"./lib/ngx-colleague\";\nexport * from \"./lib/ngx-mediator.service\";\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"AAAA;;;AAGG;MACmB,eAAe,CAAA;AAGjC;;AAEG;IACH,IAAW,SAAS,CAAC,UAAa,EAAA;AAC9B,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU;IAChC;AACH;;MCFqB,YAAY,CAAA;AAKjC;;ACdD;;;AAGG;MACU,WAAW,CAAA;AAGpB,IAAA,WAAA,CAAoB,UAA4B,EAAA;QAA5B,IAAA,CAAA,UAAU,GAAV,UAAU;AAFpB,QAAA,IAAA,CAAA,aAAa,GAAmB,IAAI,GAAG,EAAE;QAG/C,IAAI,CAAC,cAAc,EAAE;IACzB;AAEA;;AAEG;IACH,cAAc,GAAA;QACV,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,KAAI;AAC1B,YAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AACzC,QAAA,CAAC,CAAC;IACN;AAEA;;;AAGG;AACH,IAAA,YAAY,CAAC,GAAW,EAAA;QACpB,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI;IAC3E;AACH;;AC7BD;;AAEG;;ACFH;;AAEG;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@geosdi/ngx-model",
3
- "version": "1.2.3",
3
+ "version": "1.2.4",
4
4
  "description": "Model class",
5
5
  "author": "Salvia Vito (vito.salvia@gmail.com)",
6
6
  "keywords": [
@@ -8,16 +8,17 @@
8
8
  ],
9
9
  "sideEffects": false,
10
10
  "module": "fesm2022/geosdi-ngx-model.mjs",
11
- "typings": "index.d.ts",
11
+ "typings": "types/geosdi-ngx-model.d.ts",
12
12
  "exports": {
13
13
  "./package.json": {
14
14
  "default": "./package.json"
15
15
  },
16
16
  ".": {
17
- "types": "./index.d.ts",
17
+ "types": "./types/geosdi-ngx-model.d.ts",
18
18
  "default": "./fesm2022/geosdi-ngx-model.mjs"
19
19
  }
20
20
  },
21
+ "type": "module",
21
22
  "dependencies": {
22
23
  "tslib": "^2.3.0"
23
24
  }
File without changes