@matter/general 0.16.0-alpha.0-20250912-0d12bf718 → 0.16.0-alpha.0-20250916-d577beb1d
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/dist/cjs/environment/Environmental.d.ts +9 -4
- package/dist/cjs/environment/Environmental.d.ts.map +1 -1
- package/dist/cjs/environment/ServiceBundle.d.ts +37 -0
- package/dist/cjs/environment/ServiceBundle.d.ts.map +1 -0
- package/dist/cjs/environment/ServiceBundle.js +89 -0
- package/dist/cjs/environment/ServiceBundle.js.map +6 -0
- package/dist/cjs/environment/index.d.ts +1 -0
- package/dist/cjs/environment/index.d.ts.map +1 -1
- package/dist/cjs/environment/index.js +1 -0
- package/dist/cjs/environment/index.js.map +1 -1
- package/dist/esm/environment/Environmental.d.ts +9 -4
- package/dist/esm/environment/Environmental.d.ts.map +1 -1
- package/dist/esm/environment/ServiceBundle.d.ts +37 -0
- package/dist/esm/environment/ServiceBundle.d.ts.map +1 -0
- package/dist/esm/environment/ServiceBundle.js +69 -0
- package/dist/esm/environment/ServiceBundle.js.map +6 -0
- package/dist/esm/environment/index.d.ts +1 -0
- package/dist/esm/environment/index.d.ts.map +1 -1
- package/dist/esm/environment/index.js +1 -0
- package/dist/esm/environment/index.js.map +1 -1
- package/package.json +2 -2
- package/src/environment/Environmental.ts +9 -4
- package/src/environment/ServiceBundle.ts +94 -0
- package/src/environment/index.ts +1 -0
|
@@ -28,14 +28,19 @@ export declare namespace Environmental {
|
|
|
28
28
|
[Diagnostic.value]?: unknown;
|
|
29
29
|
}
|
|
30
30
|
/**
|
|
31
|
-
* A factory for a {@link Service}.
|
|
31
|
+
* A factory for a {@link Service}.
|
|
32
|
+
*
|
|
33
|
+
* A "factory" is just a class with a static {@link create} method that performs instantiation.
|
|
32
34
|
*/
|
|
33
|
-
interface Factory<T extends Service> {
|
|
35
|
+
interface Factory<T extends Service = Service> {
|
|
34
36
|
new (...args: any[]): T;
|
|
35
37
|
/**
|
|
36
|
-
*
|
|
38
|
+
* Method the environment uses to instantiate the service.
|
|
39
|
+
*
|
|
40
|
+
* We use this rather than invoking the constructor directly so the service can perform configuration via
|
|
41
|
+
* {@link Environment} regardless of the arguments its constructor takes.
|
|
37
42
|
*/
|
|
38
|
-
[create]
|
|
43
|
+
[create]: (environment: Environment) => T;
|
|
39
44
|
}
|
|
40
45
|
/**
|
|
41
46
|
* Events related to service lifecycle.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Environmental.d.ts","sourceRoot":"","sources":["../../../src/environment/Environmental.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD,yBAAiB,aAAa,CAAC;IACpB,MAAM,MAAM,eAAmB,CAAC;IAEvC;;;;OAIG;IACH,UAAiB,OAAO;QACpB;;WAEG;QACH,YAAY,CAAC,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;QAE5B;;WAEG;QACH,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,EAAE,UAAU,CAAC,YAAY,CAAC;QAEpD;;WAEG;QACH,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC;KAChC;IAED
|
|
1
|
+
{"version":3,"file":"Environmental.d.ts","sourceRoot":"","sources":["../../../src/environment/Environmental.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD,yBAAiB,aAAa,CAAC;IACpB,MAAM,MAAM,eAAmB,CAAC;IAEvC;;;;OAIG;IACH,UAAiB,OAAO;QACpB;;WAEG;QACH,YAAY,CAAC,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;QAE5B;;WAEG;QACH,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,EAAE,UAAU,CAAC,YAAY,CAAC;QAEpD;;WAEG;QACH,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC;KAChC;IAED;;;;OAIG;IACH,UAAiB,OAAO,CAAC,CAAC,SAAS,OAAO,GAAG,OAAO;QAChD,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QAExB;;;;;WAKG;QACH,CAAC,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,WAAW,KAAK,CAAC,CAAC;KAC7C;IAED;;OAEG;IACH,UAAiB,aAAa,CAAC,CAAC,SAAS,QAAQ,MAAM,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC;QACvE,KAAK,EAAE,UAAU,CAAC,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/C,OAAO,EAAE,UAAU,CAAC,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KACpD;CACJ"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022-2025 Matter.js Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { BasicSet } from "#util/Set.js";
|
|
7
|
+
import { Environment } from "./Environment.js";
|
|
8
|
+
/**
|
|
9
|
+
* A bundle of services that may be added to an {@link Environment} as a unit.
|
|
10
|
+
*
|
|
11
|
+
* This serves as an extension mechanism for matter.js. Plugins may register for deployment into environments by adding
|
|
12
|
+
* a factory to {@link default}.
|
|
13
|
+
*/
|
|
14
|
+
export declare class ServiceBundle extends BasicSet<ServiceBundle.Factory> {
|
|
15
|
+
#private;
|
|
16
|
+
constructor();
|
|
17
|
+
/**
|
|
18
|
+
* A default bundle for services that should generally deploy in all environments.
|
|
19
|
+
*/
|
|
20
|
+
static get default(): ServiceBundle;
|
|
21
|
+
/**
|
|
22
|
+
* Install the bundle into an {@link Environment}.
|
|
23
|
+
*
|
|
24
|
+
* This installs any services that currently comprise the bundle and will install any services added in the future
|
|
25
|
+
* as well.
|
|
26
|
+
*/
|
|
27
|
+
deploy(env: Environment): void;
|
|
28
|
+
}
|
|
29
|
+
export declare namespace ServiceBundle {
|
|
30
|
+
/**
|
|
31
|
+
* A factory function invoked when a bundle is deployed.
|
|
32
|
+
*/
|
|
33
|
+
interface Factory {
|
|
34
|
+
(env: Environment): void;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=ServiceBundle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ServiceBundle.d.ts","sourceRoot":"","sources":["../../../src/environment/ServiceBundle.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAI/C;;;;;GAKG;AACH,qBAAa,aAAc,SAAQ,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC;;;IAmC9D;;OAEG;IACH,MAAM,KAAK,OAAO,kBAEjB;IAED;;;;;OAKG;IACH,MAAM,CAAC,GAAG,EAAE,WAAW;CAkB1B;AAED,yBAAiB,aAAa,CAAC;IAC3B;;OAEG;IACH,UAAiB,OAAO;QACpB,CAAC,GAAG,EAAE,WAAW,GAAG,IAAI,CAAC;KAC5B;CACJ"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var ServiceBundle_exports = {};
|
|
20
|
+
__export(ServiceBundle_exports, {
|
|
21
|
+
ServiceBundle: () => ServiceBundle
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(ServiceBundle_exports);
|
|
24
|
+
var import_Logger = require("#log/Logger.js");
|
|
25
|
+
var import_Set = require("#util/Set.js");
|
|
26
|
+
/**
|
|
27
|
+
* @license
|
|
28
|
+
* Copyright 2022-2025 Matter.js Authors
|
|
29
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
30
|
+
*/
|
|
31
|
+
const logger = new import_Logger.Logger("ServiceBundle");
|
|
32
|
+
class ServiceBundle extends import_Set.BasicSet {
|
|
33
|
+
static #default = new ServiceBundle();
|
|
34
|
+
#factories = /* @__PURE__ */ new Set();
|
|
35
|
+
#environments = /* @__PURE__ */ new Set();
|
|
36
|
+
constructor() {
|
|
37
|
+
super();
|
|
38
|
+
this.added.on((factory) => {
|
|
39
|
+
let toRemove;
|
|
40
|
+
for (const ref of this.#environments) {
|
|
41
|
+
const env = ref.deref();
|
|
42
|
+
if (env) {
|
|
43
|
+
this.#deployFactory(factory, env);
|
|
44
|
+
}
|
|
45
|
+
if (env === void 0) {
|
|
46
|
+
if (toRemove === void 0) {
|
|
47
|
+
toRemove = /* @__PURE__ */ new Set();
|
|
48
|
+
}
|
|
49
|
+
toRemove.add(ref);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
if (toRemove) {
|
|
53
|
+
for (const expiredRef of toRemove) {
|
|
54
|
+
this.#environments.delete(expiredRef);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* A default bundle for services that should generally deploy in all environments.
|
|
61
|
+
*/
|
|
62
|
+
static get default() {
|
|
63
|
+
return this.#default;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Install the bundle into an {@link Environment}.
|
|
67
|
+
*
|
|
68
|
+
* This installs any services that currently comprise the bundle and will install any services added in the future
|
|
69
|
+
* as well.
|
|
70
|
+
*/
|
|
71
|
+
deploy(env) {
|
|
72
|
+
for (const factory of this.#factories) {
|
|
73
|
+
this.#deployFactory(factory, env);
|
|
74
|
+
}
|
|
75
|
+
this.#environments.add(new WeakRef(env));
|
|
76
|
+
}
|
|
77
|
+
#deployFactory(factory, env) {
|
|
78
|
+
try {
|
|
79
|
+
factory(env);
|
|
80
|
+
} catch (e) {
|
|
81
|
+
let name = "factory";
|
|
82
|
+
if (factory.name) {
|
|
83
|
+
name = `${name} ${factory.name}`;
|
|
84
|
+
}
|
|
85
|
+
logger.error(`Error deploying services for ${name}:`, e);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=ServiceBundle.js.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/environment/ServiceBundle.ts"],
|
|
4
|
+
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,oBAAuB;AACvB,iBAAyB;AAPzB;AAAA;AAAA;AAAA;AAAA;AAUA,MAAM,SAAS,IAAI,qBAAO,eAAe;AAQlC,MAAM,sBAAsB,oBAAgC;AAAA,EAC/D,OAAO,WAAW,IAAI,cAAc;AAAA,EACpC,aAAa,oBAAI,IAAgC;AAAA,EACjD,gBAAgB,oBAAI,IAA0B;AAAA,EAE9C,cAAc;AACV,UAAM;AAEN,SAAK,MAAM,GAAG,aAAW;AACrB,UAAI;AAEJ,iBAAW,OAAO,KAAK,eAAe;AAClC,cAAM,MAAM,IAAI,MAAM;AAEtB,YAAI,KAAK;AACL,eAAK,eAAe,SAAS,GAAG;AAAA,QACpC;AAGA,YAAI,QAAQ,QAAW;AACnB,cAAI,aAAa,QAAW;AACxB,uBAAW,oBAAI,IAAI;AAAA,UACvB;AACA,mBAAS,IAAI,GAAG;AAAA,QACpB;AAAA,MACJ;AAEA,UAAI,UAAU;AACV,mBAAW,cAAc,UAAU;AAC/B,eAAK,cAAc,OAAO,UAAU;AAAA,QACxC;AAAA,MACJ;AAAA,IACJ,CAAC;AAAA,EACL;AAAA;AAAA;AAAA;AAAA,EAKA,WAAW,UAAU;AACjB,WAAO,KAAK;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,KAAkB;AACrB,eAAW,WAAW,KAAK,YAAY;AACnC,WAAK,eAAe,SAAS,GAAG;AAAA,IACpC;AACA,SAAK,cAAc,IAAI,IAAI,QAAQ,GAAG,CAAC;AAAA,EAC3C;AAAA,EAEA,eAAe,SAAgC,KAAkB;AAC7D,QAAI;AACA,cAAQ,GAAG;AAAA,IACf,SAAS,GAAG;AACR,UAAI,OAAO;AACX,UAAI,QAAQ,MAAM;AACd,eAAO,GAAG,IAAI,IAAI,QAAQ,IAAI;AAAA,MAClC;AACA,aAAO,MAAM,gCAAgC,IAAI,KAAK,CAAC;AAAA,IAC3D;AAAA,EACJ;AACJ;",
|
|
5
|
+
"names": []
|
|
6
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/environment/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/environment/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC"}
|
|
@@ -18,6 +18,7 @@ module.exports = __toCommonJS(environment_exports);
|
|
|
18
18
|
__reExport(environment_exports, require("./Environment.js"), module.exports);
|
|
19
19
|
__reExport(environment_exports, require("./Environmental.js"), module.exports);
|
|
20
20
|
__reExport(environment_exports, require("./RuntimeService.js"), module.exports);
|
|
21
|
+
__reExport(environment_exports, require("./ServiceBundle.js"), module.exports);
|
|
21
22
|
__reExport(environment_exports, require("./VariableService.js"), module.exports);
|
|
22
23
|
/**
|
|
23
24
|
* @license
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/environment/index.ts"],
|
|
4
|
-
"mappings": ";;;;;;;;;;;;;;;AAAA;AAAA;AAMA,gCAAc,6BANd;AAOA,gCAAc,+BAPd;AAQA,gCAAc,gCARd;AASA,gCAAc,
|
|
4
|
+
"mappings": ";;;;;;;;;;;;;;;AAAA;AAAA;AAMA,gCAAc,6BANd;AAOA,gCAAc,+BAPd;AAQA,gCAAc,gCARd;AASA,gCAAc,+BATd;AAUA,gCAAc,iCAVd;AAAA;AAAA;AAAA;AAAA;AAAA;",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
|
@@ -28,14 +28,19 @@ export declare namespace Environmental {
|
|
|
28
28
|
[Diagnostic.value]?: unknown;
|
|
29
29
|
}
|
|
30
30
|
/**
|
|
31
|
-
* A factory for a {@link Service}.
|
|
31
|
+
* A factory for a {@link Service}.
|
|
32
|
+
*
|
|
33
|
+
* A "factory" is just a class with a static {@link create} method that performs instantiation.
|
|
32
34
|
*/
|
|
33
|
-
interface Factory<T extends Service> {
|
|
35
|
+
interface Factory<T extends Service = Service> {
|
|
34
36
|
new (...args: any[]): T;
|
|
35
37
|
/**
|
|
36
|
-
*
|
|
38
|
+
* Method the environment uses to instantiate the service.
|
|
39
|
+
*
|
|
40
|
+
* We use this rather than invoking the constructor directly so the service can perform configuration via
|
|
41
|
+
* {@link Environment} regardless of the arguments its constructor takes.
|
|
37
42
|
*/
|
|
38
|
-
[create]
|
|
43
|
+
[create]: (environment: Environment) => T;
|
|
39
44
|
}
|
|
40
45
|
/**
|
|
41
46
|
* Events related to service lifecycle.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Environmental.d.ts","sourceRoot":"","sources":["../../../src/environment/Environmental.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD,yBAAiB,aAAa,CAAC;IACpB,MAAM,MAAM,eAAmB,CAAC;IAEvC;;;;OAIG;IACH,UAAiB,OAAO;QACpB;;WAEG;QACH,YAAY,CAAC,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;QAE5B;;WAEG;QACH,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,EAAE,UAAU,CAAC,YAAY,CAAC;QAEpD;;WAEG;QACH,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC;KAChC;IAED
|
|
1
|
+
{"version":3,"file":"Environmental.d.ts","sourceRoot":"","sources":["../../../src/environment/Environmental.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD,yBAAiB,aAAa,CAAC;IACpB,MAAM,MAAM,eAAmB,CAAC;IAEvC;;;;OAIG;IACH,UAAiB,OAAO;QACpB;;WAEG;QACH,YAAY,CAAC,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;QAE5B;;WAEG;QACH,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,EAAE,UAAU,CAAC,YAAY,CAAC;QAEpD;;WAEG;QACH,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC;KAChC;IAED;;;;OAIG;IACH,UAAiB,OAAO,CAAC,CAAC,SAAS,OAAO,GAAG,OAAO;QAChD,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QAExB;;;;;WAKG;QACH,CAAC,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,WAAW,KAAK,CAAC,CAAC;KAC7C;IAED;;OAEG;IACH,UAAiB,aAAa,CAAC,CAAC,SAAS,QAAQ,MAAM,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC;QACvE,KAAK,EAAE,UAAU,CAAC,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/C,OAAO,EAAE,UAAU,CAAC,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KACpD;CACJ"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022-2025 Matter.js Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { BasicSet } from "#util/Set.js";
|
|
7
|
+
import { Environment } from "./Environment.js";
|
|
8
|
+
/**
|
|
9
|
+
* A bundle of services that may be added to an {@link Environment} as a unit.
|
|
10
|
+
*
|
|
11
|
+
* This serves as an extension mechanism for matter.js. Plugins may register for deployment into environments by adding
|
|
12
|
+
* a factory to {@link default}.
|
|
13
|
+
*/
|
|
14
|
+
export declare class ServiceBundle extends BasicSet<ServiceBundle.Factory> {
|
|
15
|
+
#private;
|
|
16
|
+
constructor();
|
|
17
|
+
/**
|
|
18
|
+
* A default bundle for services that should generally deploy in all environments.
|
|
19
|
+
*/
|
|
20
|
+
static get default(): ServiceBundle;
|
|
21
|
+
/**
|
|
22
|
+
* Install the bundle into an {@link Environment}.
|
|
23
|
+
*
|
|
24
|
+
* This installs any services that currently comprise the bundle and will install any services added in the future
|
|
25
|
+
* as well.
|
|
26
|
+
*/
|
|
27
|
+
deploy(env: Environment): void;
|
|
28
|
+
}
|
|
29
|
+
export declare namespace ServiceBundle {
|
|
30
|
+
/**
|
|
31
|
+
* A factory function invoked when a bundle is deployed.
|
|
32
|
+
*/
|
|
33
|
+
interface Factory {
|
|
34
|
+
(env: Environment): void;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=ServiceBundle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ServiceBundle.d.ts","sourceRoot":"","sources":["../../../src/environment/ServiceBundle.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAI/C;;;;;GAKG;AACH,qBAAa,aAAc,SAAQ,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC;;;IAmC9D;;OAEG;IACH,MAAM,KAAK,OAAO,kBAEjB;IAED;;;;;OAKG;IACH,MAAM,CAAC,GAAG,EAAE,WAAW;CAkB1B;AAED,yBAAiB,aAAa,CAAC;IAC3B;;OAEG;IACH,UAAiB,OAAO;QACpB,CAAC,GAAG,EAAE,WAAW,GAAG,IAAI,CAAC;KAC5B;CACJ"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022-2025 Matter.js Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { Logger } from "#log/Logger.js";
|
|
7
|
+
import { BasicSet } from "#util/Set.js";
|
|
8
|
+
const logger = new Logger("ServiceBundle");
|
|
9
|
+
class ServiceBundle extends BasicSet {
|
|
10
|
+
static #default = new ServiceBundle();
|
|
11
|
+
#factories = /* @__PURE__ */ new Set();
|
|
12
|
+
#environments = /* @__PURE__ */ new Set();
|
|
13
|
+
constructor() {
|
|
14
|
+
super();
|
|
15
|
+
this.added.on((factory) => {
|
|
16
|
+
let toRemove;
|
|
17
|
+
for (const ref of this.#environments) {
|
|
18
|
+
const env = ref.deref();
|
|
19
|
+
if (env) {
|
|
20
|
+
this.#deployFactory(factory, env);
|
|
21
|
+
}
|
|
22
|
+
if (env === void 0) {
|
|
23
|
+
if (toRemove === void 0) {
|
|
24
|
+
toRemove = /* @__PURE__ */ new Set();
|
|
25
|
+
}
|
|
26
|
+
toRemove.add(ref);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
if (toRemove) {
|
|
30
|
+
for (const expiredRef of toRemove) {
|
|
31
|
+
this.#environments.delete(expiredRef);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* A default bundle for services that should generally deploy in all environments.
|
|
38
|
+
*/
|
|
39
|
+
static get default() {
|
|
40
|
+
return this.#default;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Install the bundle into an {@link Environment}.
|
|
44
|
+
*
|
|
45
|
+
* This installs any services that currently comprise the bundle and will install any services added in the future
|
|
46
|
+
* as well.
|
|
47
|
+
*/
|
|
48
|
+
deploy(env) {
|
|
49
|
+
for (const factory of this.#factories) {
|
|
50
|
+
this.#deployFactory(factory, env);
|
|
51
|
+
}
|
|
52
|
+
this.#environments.add(new WeakRef(env));
|
|
53
|
+
}
|
|
54
|
+
#deployFactory(factory, env) {
|
|
55
|
+
try {
|
|
56
|
+
factory(env);
|
|
57
|
+
} catch (e) {
|
|
58
|
+
let name = "factory";
|
|
59
|
+
if (factory.name) {
|
|
60
|
+
name = `${name} ${factory.name}`;
|
|
61
|
+
}
|
|
62
|
+
logger.error(`Error deploying services for ${name}:`, e);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
export {
|
|
67
|
+
ServiceBundle
|
|
68
|
+
};
|
|
69
|
+
//# sourceMappingURL=ServiceBundle.js.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/environment/ServiceBundle.ts"],
|
|
4
|
+
"mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,SAAS,cAAc;AACvB,SAAS,gBAAgB;AAGzB,MAAM,SAAS,IAAI,OAAO,eAAe;AAQlC,MAAM,sBAAsB,SAAgC;AAAA,EAC/D,OAAO,WAAW,IAAI,cAAc;AAAA,EACpC,aAAa,oBAAI,IAAgC;AAAA,EACjD,gBAAgB,oBAAI,IAA0B;AAAA,EAE9C,cAAc;AACV,UAAM;AAEN,SAAK,MAAM,GAAG,aAAW;AACrB,UAAI;AAEJ,iBAAW,OAAO,KAAK,eAAe;AAClC,cAAM,MAAM,IAAI,MAAM;AAEtB,YAAI,KAAK;AACL,eAAK,eAAe,SAAS,GAAG;AAAA,QACpC;AAGA,YAAI,QAAQ,QAAW;AACnB,cAAI,aAAa,QAAW;AACxB,uBAAW,oBAAI,IAAI;AAAA,UACvB;AACA,mBAAS,IAAI,GAAG;AAAA,QACpB;AAAA,MACJ;AAEA,UAAI,UAAU;AACV,mBAAW,cAAc,UAAU;AAC/B,eAAK,cAAc,OAAO,UAAU;AAAA,QACxC;AAAA,MACJ;AAAA,IACJ,CAAC;AAAA,EACL;AAAA;AAAA;AAAA;AAAA,EAKA,WAAW,UAAU;AACjB,WAAO,KAAK;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,KAAkB;AACrB,eAAW,WAAW,KAAK,YAAY;AACnC,WAAK,eAAe,SAAS,GAAG;AAAA,IACpC;AACA,SAAK,cAAc,IAAI,IAAI,QAAQ,GAAG,CAAC;AAAA,EAC3C;AAAA,EAEA,eAAe,SAAgC,KAAkB;AAC7D,QAAI;AACA,cAAQ,GAAG;AAAA,IACf,SAAS,GAAG;AACR,UAAI,OAAO;AACX,UAAI,QAAQ,MAAM;AACd,eAAO,GAAG,IAAI,IAAI,QAAQ,IAAI;AAAA,MAClC;AACA,aAAO,MAAM,gCAAgC,IAAI,KAAK,CAAC;AAAA,IAC3D;AAAA,EACJ;AACJ;",
|
|
5
|
+
"names": []
|
|
6
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/environment/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/environment/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@matter/general",
|
|
3
|
-
"version": "0.16.0-alpha.0-
|
|
3
|
+
"version": "0.16.0-alpha.0-20250916-d577beb1d",
|
|
4
4
|
"description": "Non-Matter support for Matter.js",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"iot",
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
"@noble/curves": "^2.0.0"
|
|
37
37
|
},
|
|
38
38
|
"devDependencies": {
|
|
39
|
-
"@matter/testing": "0.16.0-alpha.0-
|
|
39
|
+
"@matter/testing": "0.16.0-alpha.0-20250916-d577beb1d"
|
|
40
40
|
},
|
|
41
41
|
"files": [
|
|
42
42
|
"dist/**/*",
|
|
@@ -34,15 +34,20 @@ export namespace Environmental {
|
|
|
34
34
|
}
|
|
35
35
|
|
|
36
36
|
/**
|
|
37
|
-
* A factory for a {@link Service}.
|
|
37
|
+
* A factory for a {@link Service}.
|
|
38
|
+
*
|
|
39
|
+
* A "factory" is just a class with a static {@link create} method that performs instantiation.
|
|
38
40
|
*/
|
|
39
|
-
export interface Factory<T extends Service> {
|
|
41
|
+
export interface Factory<T extends Service = Service> {
|
|
40
42
|
new (...args: any[]): T;
|
|
41
43
|
|
|
42
44
|
/**
|
|
43
|
-
*
|
|
45
|
+
* Method the environment uses to instantiate the service.
|
|
46
|
+
*
|
|
47
|
+
* We use this rather than invoking the constructor directly so the service can perform configuration via
|
|
48
|
+
* {@link Environment} regardless of the arguments its constructor takes.
|
|
44
49
|
*/
|
|
45
|
-
[create]
|
|
50
|
+
[create]: (environment: Environment) => T;
|
|
46
51
|
}
|
|
47
52
|
|
|
48
53
|
/**
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022-2025 Matter.js Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { Logger } from "#log/Logger.js";
|
|
8
|
+
import { BasicSet } from "#util/Set.js";
|
|
9
|
+
import { Environment } from "./Environment.js";
|
|
10
|
+
|
|
11
|
+
const logger = new Logger("ServiceBundle");
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* A bundle of services that may be added to an {@link Environment} as a unit.
|
|
15
|
+
*
|
|
16
|
+
* This serves as an extension mechanism for matter.js. Plugins may register for deployment into environments by adding
|
|
17
|
+
* a factory to {@link default}.
|
|
18
|
+
*/
|
|
19
|
+
export class ServiceBundle extends BasicSet<ServiceBundle.Factory> {
|
|
20
|
+
static #default = new ServiceBundle();
|
|
21
|
+
#factories = new Set<(env: Environment) => void>();
|
|
22
|
+
#environments = new Set<WeakRef<Environment>>();
|
|
23
|
+
|
|
24
|
+
constructor() {
|
|
25
|
+
super();
|
|
26
|
+
|
|
27
|
+
this.added.on(factory => {
|
|
28
|
+
let toRemove: undefined | Set<WeakRef<Environment>>;
|
|
29
|
+
|
|
30
|
+
for (const ref of this.#environments) {
|
|
31
|
+
const env = ref.deref();
|
|
32
|
+
|
|
33
|
+
if (env) {
|
|
34
|
+
this.#deployFactory(factory, env);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
// Clean up expired ref
|
|
38
|
+
if (env === undefined) {
|
|
39
|
+
if (toRemove === undefined) {
|
|
40
|
+
toRemove = new Set();
|
|
41
|
+
}
|
|
42
|
+
toRemove.add(ref);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
if (toRemove) {
|
|
47
|
+
for (const expiredRef of toRemove) {
|
|
48
|
+
this.#environments.delete(expiredRef);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* A default bundle for services that should generally deploy in all environments.
|
|
56
|
+
*/
|
|
57
|
+
static get default() {
|
|
58
|
+
return this.#default;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Install the bundle into an {@link Environment}.
|
|
63
|
+
*
|
|
64
|
+
* This installs any services that currently comprise the bundle and will install any services added in the future
|
|
65
|
+
* as well.
|
|
66
|
+
*/
|
|
67
|
+
deploy(env: Environment) {
|
|
68
|
+
for (const factory of this.#factories) {
|
|
69
|
+
this.#deployFactory(factory, env);
|
|
70
|
+
}
|
|
71
|
+
this.#environments.add(new WeakRef(env));
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
#deployFactory(factory: ServiceBundle.Factory, env: Environment) {
|
|
75
|
+
try {
|
|
76
|
+
factory(env);
|
|
77
|
+
} catch (e) {
|
|
78
|
+
let name = "factory";
|
|
79
|
+
if (factory.name) {
|
|
80
|
+
name = `${name} ${factory.name}`;
|
|
81
|
+
}
|
|
82
|
+
logger.error(`Error deploying services for ${name}:`, e);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
export namespace ServiceBundle {
|
|
88
|
+
/**
|
|
89
|
+
* A factory function invoked when a bundle is deployed.
|
|
90
|
+
*/
|
|
91
|
+
export interface Factory {
|
|
92
|
+
(env: Environment): void;
|
|
93
|
+
}
|
|
94
|
+
}
|