@configura/web-core 2.0.0-alpha.0 → 2.0.0-alpha.11
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/LICENSE +201 -201
- package/README.md +1 -1
- package/dist/cm/basic/Color.d.ts +16 -16
- package/dist/cm/basic/Color.js +18 -18
- package/dist/cm/basic/ColorF.d.ts +9 -9
- package/dist/cm/basic/ColorF.js +10 -10
- package/dist/cm/basic/boolean.d.ts +2 -2
- package/dist/cm/basic/boolean.js +11 -11
- package/dist/cm/basic/number.d.ts +3 -3
- package/dist/cm/basic/number.js +18 -18
- package/dist/cm/basic/string.d.ts +2 -2
- package/dist/cm/basic/string.js +11 -11
- package/dist/cm/core3D/ATriMeshF.d.ts +96 -96
- package/dist/cm/core3D/ATriMeshF.js +197 -197
- package/dist/cm/core3D/GMaterial3D.d.ts +62 -62
- package/dist/cm/core3D/GMaterial3D.js +112 -112
- package/dist/cm/core3D/GMaterialClassic.d.ts +55 -55
- package/dist/cm/core3D/GMaterialClassic.js +171 -171
- package/dist/cm/core3D/GMaterialPBR.d.ts +73 -73
- package/dist/cm/core3D/GMaterialPBR.js +314 -314
- package/dist/cm/core3D/MultiGMaterial3D.d.ts +8 -8
- package/dist/cm/core3D/MultiGMaterial3D.js +17 -17
- package/dist/cm/core3D/uvmapper/UVMapEnv.d.ts +19 -19
- package/dist/cm/core3D/uvmapper/UVMapEnv.js +47 -47
- package/dist/cm/core3D/uvmapper/UVMapper.d.ts +41 -41
- package/dist/cm/core3D/uvmapper/UVMapper.js +94 -94
- package/dist/cm/core3D/uvmapper/UVMapperBox.d.ts +4 -4
- package/dist/cm/core3D/uvmapper/UVMapperBox.js +181 -181
- package/dist/cm/core3D/uvmapper/UVMapperCylinder.d.ts +9 -9
- package/dist/cm/core3D/uvmapper/UVMapperCylinder.js +96 -96
- package/dist/cm/core3D/uvmapper/UVMapperPlane.d.ts +3 -3
- package/dist/cm/core3D/uvmapper/UVMapperPlane.js +84 -84
- package/dist/cm/core3D/uvmapper/UVTransformer.d.ts +5 -5
- package/dist/cm/core3D/uvmapper/UVTransformer.js +5 -5
- package/dist/cm/core3D/uvmapper/instantiateUVMapper.d.ts +3 -3
- package/dist/cm/core3D/uvmapper/instantiateUVMapper.js +4 -4
- package/dist/cm/format/cmsym/InvalidationEnv.d.ts +9 -9
- package/dist/cm/format/cmsym/InvalidationEnv.js +13 -13
- package/dist/cm/format/cmsym/SymImportEnv.d.ts +9 -9
- package/dist/cm/format/cmsym/SymImportEnv.js +9 -9
- package/dist/cm/format/cmsym/SymInv.d.ts +8 -8
- package/dist/cm/format/cmsym/SymInv.js +15 -15
- package/dist/cm/format/cmsym/SymNode.d.ts +93 -93
- package/dist/cm/format/cmsym/SymNode.js +652 -652
- package/dist/cm/format/cmsym/components/SymBox.d.ts +15 -15
- package/dist/cm/format/cmsym/components/SymBox.js +39 -39
- package/dist/cm/format/cmsym/components/SymComponent.d.ts +29 -29
- package/dist/cm/format/cmsym/components/SymComponent.js +54 -54
- package/dist/cm/format/cmsym/components/SymConnector.d.ts +5 -5
- package/dist/cm/format/cmsym/components/SymConnector.js +10 -10
- package/dist/cm/format/cmsym/components/SymDexObj.d.ts +11 -11
- package/dist/cm/format/cmsym/components/SymDexObj.js +10 -10
- package/dist/cm/format/cmsym/components/SymGFX.d.ts +11 -11
- package/dist/cm/format/cmsym/components/SymGFX.js +20 -20
- package/dist/cm/format/cmsym/components/SymGMaterial.d.ts +19 -19
- package/dist/cm/format/cmsym/components/SymGMaterial.js +88 -88
- package/dist/cm/format/cmsym/components/SymGMaterialSelector.d.ts +17 -17
- package/dist/cm/format/cmsym/components/SymGMaterialSelector.js +22 -22
- package/dist/cm/format/cmsym/components/SymGetMeshEnv.d.ts +9 -9
- package/dist/cm/format/cmsym/components/SymGetMeshEnv.js +9 -9
- package/dist/cm/format/cmsym/components/SymLODGroup.d.ts +9 -9
- package/dist/cm/format/cmsym/components/SymLODGroup.js +11 -11
- package/dist/cm/format/cmsym/components/SymLight.d.ts +8 -8
- package/dist/cm/format/cmsym/components/SymLight.js +10 -10
- package/dist/cm/format/cmsym/components/SymLines2D.d.ts +5 -5
- package/dist/cm/format/cmsym/components/SymLines2D.js +7 -7
- package/dist/cm/format/cmsym/components/SymMeasure.d.ts +33 -33
- package/dist/cm/format/cmsym/components/SymMeasure.js +149 -149
- package/dist/cm/format/cmsym/components/SymMesh.d.ts +29 -29
- package/dist/cm/format/cmsym/components/SymMesh.js +130 -130
- package/dist/cm/format/cmsym/components/SymMeshLight.d.ts +8 -8
- package/dist/cm/format/cmsym/components/SymMeshLight.js +10 -10
- package/dist/cm/format/cmsym/components/SymMultiSelector.d.ts +13 -13
- package/dist/cm/format/cmsym/components/SymMultiSelector.js +48 -48
- package/dist/cm/format/cmsym/components/SymParams.d.ts +16 -16
- package/dist/cm/format/cmsym/components/SymParams.js +58 -58
- package/dist/cm/format/cmsym/components/SymPlane.d.ts +14 -14
- package/dist/cm/format/cmsym/components/SymPlane.js +30 -30
- package/dist/cm/format/cmsym/components/SymPlaneDivider.d.ts +4 -4
- package/dist/cm/format/cmsym/components/SymPlaneDivider.js +7 -7
- package/dist/cm/format/cmsym/components/SymPrimitive2D.d.ts +3 -3
- package/dist/cm/format/cmsym/components/SymPrimitive2D.js +3 -3
- package/dist/cm/format/cmsym/components/SymProgs.d.ts +32 -32
- package/dist/cm/format/cmsym/components/SymProgs.js +120 -120
- package/dist/cm/format/cmsym/components/SymProps.d.ts +54 -54
- package/dist/cm/format/cmsym/components/SymProps.js +170 -170
- package/dist/cm/format/cmsym/components/SymRep.d.ts +13 -13
- package/dist/cm/format/cmsym/components/SymRep.js +28 -28
- package/dist/cm/format/cmsym/components/SymReps.d.ts +36 -36
- package/dist/cm/format/cmsym/components/SymReps.js +229 -229
- package/dist/cm/format/cmsym/components/SymShape.d.ts +10 -10
- package/dist/cm/format/cmsym/components/SymShape.js +17 -17
- package/dist/cm/format/cmsym/components/SymSphere.d.ts +18 -18
- package/dist/cm/format/cmsym/components/SymSphere.js +33 -33
- package/dist/cm/format/cmsym/components/SymSpotlight.d.ts +8 -8
- package/dist/cm/format/cmsym/components/SymSpotlight.js +10 -10
- package/dist/cm/format/cmsym/components/SymTags.d.ts +11 -11
- package/dist/cm/format/cmsym/components/SymTags.js +20 -20
- package/dist/cm/format/cmsym/components/SymText2D.d.ts +5 -5
- package/dist/cm/format/cmsym/components/SymText2D.js +8 -8
- package/dist/cm/format/cmsym/components/SymText3D.d.ts +5 -5
- package/dist/cm/format/cmsym/components/SymText3D.js +8 -8
- package/dist/cm/format/cmsym/components/SymTransform.d.ts +23 -23
- package/dist/cm/format/cmsym/components/SymTransform.js +101 -101
- package/dist/cm/format/cmsym/components/SymUVMapper.d.ts +13 -13
- package/dist/cm/format/cmsym/components/SymUVMapper.js +50 -50
- package/dist/cm/format/cmsym/components/instantiate.d.ts +2 -2
- package/dist/cm/format/cmsym/components/instantiate.js +121 -121
- package/dist/cm/format/cmsym/components/legacy.d.ts +7 -7
- package/dist/cm/format/cmsym/components/legacy.js +27 -27
- package/dist/cm/format/cmsym/components/mesh.d.ts +8 -8
- package/dist/cm/format/cmsym/components/mesh.js +28 -28
- package/dist/cm/format/cmsym/invalidation.d.ts +4 -4
- package/dist/cm/format/cmsym/invalidation.js +72 -72
- package/dist/cm/format/dex/DexIRef.d.ts +9 -9
- package/dist/cm/format/dex/DexIRef.js +18 -18
- package/dist/cm/format/dex/DexInt.d.ts +11 -11
- package/dist/cm/format/dex/DexInt.js +18 -18
- package/dist/cm/format/dex/DexInternalizedXRef.d.ts +19 -19
- package/dist/cm/format/dex/DexInternalizedXRef.js +64 -64
- package/dist/cm/format/dex/DexLoader.d.ts +8 -8
- package/dist/cm/format/dex/DexLoader.js +12 -12
- package/dist/cm/format/dex/DexManager.d.ts +20 -20
- package/dist/cm/format/dex/DexManager.js +78 -78
- package/dist/cm/format/dex/DexObj.d.ts +15 -15
- package/dist/cm/format/dex/DexObj.js +86 -86
- package/dist/cm/format/dex/DexReader.d.ts +90 -90
- package/dist/cm/format/dex/DexReader.js +532 -532
- package/dist/cm/format/dex/DexRef.d.ts +6 -6
- package/dist/cm/format/dex/DexRef.js +8 -8
- package/dist/cm/format/dex/DexReplacedXRefs.d.ts +8 -8
- package/dist/cm/format/dex/DexReplacedXRefs.js +22 -22
- package/dist/cm/format/dex/DexURL.d.ts +4 -4
- package/dist/cm/format/dex/DexURL.js +5 -5
- package/dist/cm/format/dex/DexVersion.d.ts +15 -15
- package/dist/cm/format/dex/DexVersion.js +53 -53
- package/dist/cm/format/dex/DexXRef.d.ts +18 -18
- package/dist/cm/format/dex/DexXRef.js +51 -51
- package/dist/cm/format/dex/DexXRefTargetFilter.d.ts +4 -4
- package/dist/cm/format/dex/DexXRefTargetFilter.js +5 -5
- package/dist/cm/geometry/Angle.d.ts +9 -9
- package/dist/cm/geometry/Angle.js +18 -18
- package/dist/cm/geometry/AngleF.d.ts +5 -5
- package/dist/cm/geometry/AngleF.js +8 -8
- package/dist/cm/geometry/Box.d.ts +7 -7
- package/dist/cm/geometry/Box.js +9 -9
- package/dist/cm/geometry/DetailMask.d.ts +37 -37
- package/dist/cm/geometry/DetailMask.js +114 -114
- package/dist/cm/geometry/LayerExpr.d.ts +2 -2
- package/dist/cm/geometry/LayerExpr.js +2 -2
- package/dist/cm/geometry/Matrix22.d.ts +7 -7
- package/dist/cm/geometry/Matrix22.js +9 -9
- package/dist/cm/geometry/Matrix33.d.ts +42 -42
- package/dist/cm/geometry/Matrix33.js +124 -124
- package/dist/cm/geometry/Orientation.d.ts +7 -7
- package/dist/cm/geometry/Orientation.js +7 -7
- package/dist/cm/geometry/Plane.d.ts +8 -8
- package/dist/cm/geometry/Plane.js +14 -14
- package/dist/cm/geometry/Point.d.ts +21 -21
- package/dist/cm/geometry/Point.js +65 -65
- package/dist/cm/geometry/Point2D.d.ts +9 -9
- package/dist/cm/geometry/Point2D.js +23 -23
- package/dist/cm/geometry/PointF.d.ts +11 -11
- package/dist/cm/geometry/PointF.js +27 -27
- package/dist/cm/geometry/Transform.d.ts +11 -11
- package/dist/cm/geometry/Transform.js +61 -61
- package/dist/cm/geometry/Transform2D.d.ts +7 -7
- package/dist/cm/geometry/Transform2D.js +6 -6
- package/dist/cm/io/Semver.d.ts +18 -18
- package/dist/cm/io/Semver.js +61 -61
- package/dist/index.js +1 -1
- package/package.json +4 -4
|
@@ -1,30 +1,30 @@
|
|
|
1
|
-
import { Logger } from "@configura/web-utilities";
|
|
2
|
-
import { ATriMeshF } from "../../../core3D/ATriMeshF.js";
|
|
3
|
-
import { DexObj } from "../../dex/DexObj.js";
|
|
4
|
-
import { SymImportEnv } from "../SymImportEnv.js";
|
|
5
|
-
import { SymInv } from "../SymInv.js";
|
|
6
|
-
import { SymComponent, SymComponentKey } from "./SymComponent.js";
|
|
7
|
-
import { SymGetMeshEnv } from "./SymGetMeshEnv.js";
|
|
8
|
-
/**
|
|
9
|
-
* Represents a SymMesh node in the CmSym format.
|
|
10
|
-
*
|
|
11
|
-
* @remarks
|
|
12
|
-
* Specification: {@link https://www.configura.com/cmsym/#SymMesh CmSym - SymMesh}
|
|
13
|
-
*/
|
|
14
|
-
export declare class SymMesh extends SymComponent {
|
|
15
|
-
private _mesh?;
|
|
16
|
-
cachedKey?: string | undefined;
|
|
17
|
-
shared: boolean;
|
|
18
|
-
id: SymComponentKey;
|
|
19
|
-
constructor(_mesh?: ATriMeshF | undefined, cachedKey?: string | undefined, shared?: boolean, src?: string);
|
|
20
|
-
load(logger: Logger, dexObj: DexObj, _env: SymImportEnv, force?: boolean): void;
|
|
21
|
-
loadLazy(logger: Logger, dexObj?: DexObj): void;
|
|
22
|
-
loadMesh(logger: Logger, dexObj?: DexObj): Error | undefined;
|
|
23
|
-
mesh(logger: Logger, env: SymGetMeshEnv): ATriMeshF | undefined;
|
|
24
|
-
createUVCoordinates(logger: Logger): void;
|
|
25
|
-
unshare(): void;
|
|
26
|
-
dexObj(): DexObj | undefined;
|
|
27
|
-
features(): Set<string>;
|
|
28
|
-
invalidation(removed: boolean): SymInv[];
|
|
29
|
-
}
|
|
1
|
+
import { Logger } from "@configura/web-utilities";
|
|
2
|
+
import { ATriMeshF } from "../../../core3D/ATriMeshF.js";
|
|
3
|
+
import { DexObj } from "../../dex/DexObj.js";
|
|
4
|
+
import { SymImportEnv } from "../SymImportEnv.js";
|
|
5
|
+
import { SymInv } from "../SymInv.js";
|
|
6
|
+
import { SymComponent, SymComponentKey } from "./SymComponent.js";
|
|
7
|
+
import { SymGetMeshEnv } from "./SymGetMeshEnv.js";
|
|
8
|
+
/**
|
|
9
|
+
* Represents a SymMesh node in the CmSym format.
|
|
10
|
+
*
|
|
11
|
+
* @remarks
|
|
12
|
+
* Specification: {@link https://www.configura.com/cmsym/#SymMesh CmSym - SymMesh}
|
|
13
|
+
*/
|
|
14
|
+
export declare class SymMesh extends SymComponent {
|
|
15
|
+
private _mesh?;
|
|
16
|
+
cachedKey?: string | undefined;
|
|
17
|
+
shared: boolean;
|
|
18
|
+
id: SymComponentKey;
|
|
19
|
+
constructor(_mesh?: ATriMeshF | undefined, cachedKey?: string | undefined, shared?: boolean, src?: string);
|
|
20
|
+
load(logger: Logger, dexObj: DexObj, _env: SymImportEnv, force?: boolean): void;
|
|
21
|
+
loadLazy(logger: Logger, dexObj?: DexObj): void;
|
|
22
|
+
loadMesh(logger: Logger, dexObj?: DexObj): Error | undefined;
|
|
23
|
+
mesh(logger: Logger, env: SymGetMeshEnv): ATriMeshF | undefined;
|
|
24
|
+
createUVCoordinates(logger: Logger): void;
|
|
25
|
+
unshare(): void;
|
|
26
|
+
dexObj(): DexObj | undefined;
|
|
27
|
+
features(): Set<string>;
|
|
28
|
+
invalidation(removed: boolean): SymInv[];
|
|
29
|
+
}
|
|
30
30
|
//# sourceMappingURL=SymMesh.d.ts.map
|
|
@@ -1,130 +1,130 @@
|
|
|
1
|
-
import { ATriMeshF } from "../../../core3D/ATriMeshF.js";
|
|
2
|
-
import { DexObj } from "../../dex/DexObj.js";
|
|
3
|
-
import { SymComponent } from "./SymComponent.js";
|
|
4
|
-
import { SymPropsInv, SYM_GEOMETRY_KEY, SYM_LOCAL_BOUND_KEY } from "./SymProps.js";
|
|
5
|
-
/**
|
|
6
|
-
* Represents a SymMesh node in the CmSym format.
|
|
7
|
-
*
|
|
8
|
-
* @remarks
|
|
9
|
-
* Specification: {@link https://www.configura.com/cmsym/#SymMesh CmSym - SymMesh}
|
|
10
|
-
*/
|
|
11
|
-
export class SymMesh extends SymComponent {
|
|
12
|
-
constructor(_mesh, cachedKey, shared = false, src) {
|
|
13
|
-
super(src);
|
|
14
|
-
this._mesh = _mesh;
|
|
15
|
-
this.cachedKey = cachedKey;
|
|
16
|
-
this.shared = shared;
|
|
17
|
-
this.id = "symMesh";
|
|
18
|
-
}
|
|
19
|
-
load(logger, dexObj, _env, force = false) {
|
|
20
|
-
if (force) {
|
|
21
|
-
this.loadLazy(logger, dexObj);
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
loadLazy(logger, dexObj) {
|
|
25
|
-
if (this._mesh === undefined) {
|
|
26
|
-
this.loadMesh(logger, dexObj);
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
loadMesh(logger, dexObj) {
|
|
30
|
-
if (dexObj === undefined) {
|
|
31
|
-
dexObj = this.dexObj();
|
|
32
|
-
}
|
|
33
|
-
if (dexObj !== undefined) {
|
|
34
|
-
const meshProperty = dexObj.get("mesh");
|
|
35
|
-
if (meshProperty instanceof DexObj) {
|
|
36
|
-
const mesh = toATriMesh(logger, meshProperty);
|
|
37
|
-
if (mesh instanceof Error) {
|
|
38
|
-
return mesh;
|
|
39
|
-
}
|
|
40
|
-
this._mesh = mesh;
|
|
41
|
-
}
|
|
42
|
-
else {
|
|
43
|
-
return logger.errorAsObject("[SymMesh.loadMesh] unexpected type:", meshProperty);
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
else {
|
|
47
|
-
return logger.errorAsObject("[SymMesh.loadMesh] no dexObj!");
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
mesh(logger, env) {
|
|
51
|
-
if (this._mesh === undefined && env.load) {
|
|
52
|
-
this.loadMesh(logger);
|
|
53
|
-
}
|
|
54
|
-
const mesh = this._mesh;
|
|
55
|
-
if (mesh === undefined) {
|
|
56
|
-
return;
|
|
57
|
-
}
|
|
58
|
-
if (env.doubleSided !== !mesh.doubleSided) {
|
|
59
|
-
this.unshare();
|
|
60
|
-
mesh.doubleSided = env.doubleSided;
|
|
61
|
-
}
|
|
62
|
-
// Inside-out doesn't make any sense on double sided meshes
|
|
63
|
-
if (env.insideOut && !mesh.doubleSided) {
|
|
64
|
-
this.unshare();
|
|
65
|
-
mesh.reverse();
|
|
66
|
-
}
|
|
67
|
-
if (!mesh.hasNormals()) {
|
|
68
|
-
mesh.autoNormals();
|
|
69
|
-
}
|
|
70
|
-
if (env.requiresUVs && !mesh.hasUVCoordinates()) {
|
|
71
|
-
this.createUVCoordinates(logger);
|
|
72
|
-
}
|
|
73
|
-
return this._mesh;
|
|
74
|
-
}
|
|
75
|
-
createUVCoordinates(logger) {
|
|
76
|
-
throw logger.errorAsObject("[SymMesh.createUVCoordinates] not yet implemented");
|
|
77
|
-
}
|
|
78
|
-
unshare() {
|
|
79
|
-
if (this.shared) {
|
|
80
|
-
this._mesh = this._mesh && this._mesh.copy();
|
|
81
|
-
this.cachedKey = undefined;
|
|
82
|
-
this.shared = false;
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
dexObj() {
|
|
86
|
-
const dex = this.node && this.node.dexObj();
|
|
87
|
-
if (dex && dex instanceof DexObj) {
|
|
88
|
-
const dexMesh = dex.get("symMesh");
|
|
89
|
-
if (dexMesh instanceof DexObj) {
|
|
90
|
-
return dexMesh;
|
|
91
|
-
}
|
|
92
|
-
return;
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
features() {
|
|
96
|
-
return new Set(["mesh", "solid"]);
|
|
97
|
-
}
|
|
98
|
-
invalidation(removed) {
|
|
99
|
-
return [new SymPropsInv(SYM_LOCAL_BOUND_KEY), new SymPropsInv(SYM_GEOMETRY_KEY)];
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
function toATriMesh(logger, obj) {
|
|
103
|
-
if (obj.type !== "ctmMesh") {
|
|
104
|
-
return logger.errorAsObject("bad obj.type: !== ctmMesh", obj.type);
|
|
105
|
-
}
|
|
106
|
-
// Undefined will result in false, checked with CM code to be correct.
|
|
107
|
-
const llto = obj.get("lowerLeftTextureOrigin");
|
|
108
|
-
if (llto instanceof Error) {
|
|
109
|
-
return llto;
|
|
110
|
-
}
|
|
111
|
-
else if (llto !== undefined && typeof llto !== "boolean") {
|
|
112
|
-
throw logger.errorAsObject(`bad obj.lowerLeftTextureOrigin:`, llto);
|
|
113
|
-
}
|
|
114
|
-
// Undefined will result in false, checked with CM code to be correct.
|
|
115
|
-
const doubleSided = obj.get("doubleSided");
|
|
116
|
-
if (doubleSided instanceof Error) {
|
|
117
|
-
return doubleSided;
|
|
118
|
-
}
|
|
119
|
-
else if (doubleSided !== undefined && typeof doubleSided !== "boolean") {
|
|
120
|
-
throw logger.errorAsObject("bad obj.doubleSided:", doubleSided);
|
|
121
|
-
}
|
|
122
|
-
const data = obj.get("data");
|
|
123
|
-
if (data instanceof Error) {
|
|
124
|
-
return data;
|
|
125
|
-
}
|
|
126
|
-
else if (data instanceof Uint8Array) {
|
|
127
|
-
return new ATriMeshF(data, llto ? true : false, doubleSided ? true : false);
|
|
128
|
-
}
|
|
129
|
-
return logger.errorAsObject("bad data", data);
|
|
130
|
-
}
|
|
1
|
+
import { ATriMeshF } from "../../../core3D/ATriMeshF.js";
|
|
2
|
+
import { DexObj } from "../../dex/DexObj.js";
|
|
3
|
+
import { SymComponent } from "./SymComponent.js";
|
|
4
|
+
import { SymPropsInv, SYM_GEOMETRY_KEY, SYM_LOCAL_BOUND_KEY } from "./SymProps.js";
|
|
5
|
+
/**
|
|
6
|
+
* Represents a SymMesh node in the CmSym format.
|
|
7
|
+
*
|
|
8
|
+
* @remarks
|
|
9
|
+
* Specification: {@link https://www.configura.com/cmsym/#SymMesh CmSym - SymMesh}
|
|
10
|
+
*/
|
|
11
|
+
export class SymMesh extends SymComponent {
|
|
12
|
+
constructor(_mesh, cachedKey, shared = false, src) {
|
|
13
|
+
super(src);
|
|
14
|
+
this._mesh = _mesh;
|
|
15
|
+
this.cachedKey = cachedKey;
|
|
16
|
+
this.shared = shared;
|
|
17
|
+
this.id = "symMesh";
|
|
18
|
+
}
|
|
19
|
+
load(logger, dexObj, _env, force = false) {
|
|
20
|
+
if (force) {
|
|
21
|
+
this.loadLazy(logger, dexObj);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
loadLazy(logger, dexObj) {
|
|
25
|
+
if (this._mesh === undefined) {
|
|
26
|
+
this.loadMesh(logger, dexObj);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
loadMesh(logger, dexObj) {
|
|
30
|
+
if (dexObj === undefined) {
|
|
31
|
+
dexObj = this.dexObj();
|
|
32
|
+
}
|
|
33
|
+
if (dexObj !== undefined) {
|
|
34
|
+
const meshProperty = dexObj.get("mesh");
|
|
35
|
+
if (meshProperty instanceof DexObj) {
|
|
36
|
+
const mesh = toATriMesh(logger, meshProperty);
|
|
37
|
+
if (mesh instanceof Error) {
|
|
38
|
+
return mesh;
|
|
39
|
+
}
|
|
40
|
+
this._mesh = mesh;
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
return logger.errorAsObject("[SymMesh.loadMesh] unexpected type:", meshProperty);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
return logger.errorAsObject("[SymMesh.loadMesh] no dexObj!");
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
mesh(logger, env) {
|
|
51
|
+
if (this._mesh === undefined && env.load) {
|
|
52
|
+
this.loadMesh(logger);
|
|
53
|
+
}
|
|
54
|
+
const mesh = this._mesh;
|
|
55
|
+
if (mesh === undefined) {
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
if (env.doubleSided !== !mesh.doubleSided) {
|
|
59
|
+
this.unshare();
|
|
60
|
+
mesh.doubleSided = env.doubleSided;
|
|
61
|
+
}
|
|
62
|
+
// Inside-out doesn't make any sense on double sided meshes
|
|
63
|
+
if (env.insideOut && !mesh.doubleSided) {
|
|
64
|
+
this.unshare();
|
|
65
|
+
mesh.reverse();
|
|
66
|
+
}
|
|
67
|
+
if (!mesh.hasNormals()) {
|
|
68
|
+
mesh.autoNormals();
|
|
69
|
+
}
|
|
70
|
+
if (env.requiresUVs && !mesh.hasUVCoordinates()) {
|
|
71
|
+
this.createUVCoordinates(logger);
|
|
72
|
+
}
|
|
73
|
+
return this._mesh;
|
|
74
|
+
}
|
|
75
|
+
createUVCoordinates(logger) {
|
|
76
|
+
throw logger.errorAsObject("[SymMesh.createUVCoordinates] not yet implemented");
|
|
77
|
+
}
|
|
78
|
+
unshare() {
|
|
79
|
+
if (this.shared) {
|
|
80
|
+
this._mesh = this._mesh && this._mesh.copy();
|
|
81
|
+
this.cachedKey = undefined;
|
|
82
|
+
this.shared = false;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
dexObj() {
|
|
86
|
+
const dex = this.node && this.node.dexObj();
|
|
87
|
+
if (dex && dex instanceof DexObj) {
|
|
88
|
+
const dexMesh = dex.get("symMesh");
|
|
89
|
+
if (dexMesh instanceof DexObj) {
|
|
90
|
+
return dexMesh;
|
|
91
|
+
}
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
features() {
|
|
96
|
+
return new Set(["mesh", "solid"]);
|
|
97
|
+
}
|
|
98
|
+
invalidation(removed) {
|
|
99
|
+
return [new SymPropsInv(SYM_LOCAL_BOUND_KEY), new SymPropsInv(SYM_GEOMETRY_KEY)];
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
function toATriMesh(logger, obj) {
|
|
103
|
+
if (obj.type !== "ctmMesh") {
|
|
104
|
+
return logger.errorAsObject("bad obj.type: !== ctmMesh", obj.type);
|
|
105
|
+
}
|
|
106
|
+
// Undefined will result in false, checked with CM code to be correct.
|
|
107
|
+
const llto = obj.get("lowerLeftTextureOrigin");
|
|
108
|
+
if (llto instanceof Error) {
|
|
109
|
+
return llto;
|
|
110
|
+
}
|
|
111
|
+
else if (llto !== undefined && typeof llto !== "boolean") {
|
|
112
|
+
throw logger.errorAsObject(`bad obj.lowerLeftTextureOrigin:`, llto);
|
|
113
|
+
}
|
|
114
|
+
// Undefined will result in false, checked with CM code to be correct.
|
|
115
|
+
const doubleSided = obj.get("doubleSided");
|
|
116
|
+
if (doubleSided instanceof Error) {
|
|
117
|
+
return doubleSided;
|
|
118
|
+
}
|
|
119
|
+
else if (doubleSided !== undefined && typeof doubleSided !== "boolean") {
|
|
120
|
+
throw logger.errorAsObject("bad obj.doubleSided:", doubleSided);
|
|
121
|
+
}
|
|
122
|
+
const data = obj.get("data");
|
|
123
|
+
if (data instanceof Error) {
|
|
124
|
+
return data;
|
|
125
|
+
}
|
|
126
|
+
else if (data instanceof Uint8Array) {
|
|
127
|
+
return new ATriMeshF(data, llto ? true : false, doubleSided ? true : false);
|
|
128
|
+
}
|
|
129
|
+
return logger.errorAsObject("bad data", data);
|
|
130
|
+
}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { Logger } from "@configura/web-utilities";
|
|
2
|
-
import { DexObj } from "../../dex/DexObj.js";
|
|
3
|
-
import { SymImportEnv } from "../SymImportEnv.js";
|
|
4
|
-
import { SymComponent, SymComponentKey } from "./SymComponent.js";
|
|
5
|
-
export declare class SymMeshLight extends SymComponent {
|
|
6
|
-
id: SymComponentKey;
|
|
7
|
-
load(logger: Logger, _obj: DexObj, _env: SymImportEnv, _force?: boolean): void;
|
|
8
|
-
}
|
|
1
|
+
import { Logger } from "@configura/web-utilities";
|
|
2
|
+
import { DexObj } from "../../dex/DexObj.js";
|
|
3
|
+
import { SymImportEnv } from "../SymImportEnv.js";
|
|
4
|
+
import { SymComponent, SymComponentKey } from "./SymComponent.js";
|
|
5
|
+
export declare class SymMeshLight extends SymComponent {
|
|
6
|
+
id: SymComponentKey;
|
|
7
|
+
load(logger: Logger, _obj: DexObj, _env: SymImportEnv, _force?: boolean): void;
|
|
8
|
+
}
|
|
9
9
|
//# sourceMappingURL=SymMeshLight.d.ts.map
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { SymComponent } from "./SymComponent.js";
|
|
2
|
-
export class SymMeshLight extends SymComponent {
|
|
3
|
-
constructor() {
|
|
4
|
-
super(...arguments);
|
|
5
|
-
this.id = "symMeshLight";
|
|
6
|
-
}
|
|
7
|
-
load(logger, _obj, _env, _force = false) {
|
|
8
|
-
logger.warn("Mesh light source not supported.", "SymMeshLight is not yet implemented and will be ignored.");
|
|
9
|
-
}
|
|
10
|
-
}
|
|
1
|
+
import { SymComponent } from "./SymComponent.js";
|
|
2
|
+
export class SymMeshLight extends SymComponent {
|
|
3
|
+
constructor() {
|
|
4
|
+
super(...arguments);
|
|
5
|
+
this.id = "symMeshLight";
|
|
6
|
+
}
|
|
7
|
+
load(logger, _obj, _env, _force = false) {
|
|
8
|
+
logger.warn("Mesh light source not supported.", "SymMeshLight is not yet implemented and will be ignored.");
|
|
9
|
+
}
|
|
10
|
+
}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import { Logger } from "@configura/web-utilities";
|
|
2
|
-
import { DexObj } from "../../dex/DexObj.js";
|
|
3
|
-
export declare class SymMultiSelector {
|
|
4
|
-
readonly selectors: SymDividerSelector[];
|
|
5
|
-
constructor(obj: DexObj, logger: Logger);
|
|
6
|
-
}
|
|
7
|
-
export declare class SymDividerSelector {
|
|
8
|
-
readonly dividerId: string;
|
|
9
|
-
readonly ownerId: string;
|
|
10
|
-
readonly outside: boolean;
|
|
11
|
-
readonly includes: boolean;
|
|
12
|
-
constructor(obj: DexObj, logger: Logger);
|
|
13
|
-
}
|
|
1
|
+
import { Logger } from "@configura/web-utilities";
|
|
2
|
+
import { DexObj } from "../../dex/DexObj.js";
|
|
3
|
+
export declare class SymMultiSelector {
|
|
4
|
+
readonly selectors: SymDividerSelector[];
|
|
5
|
+
constructor(obj: DexObj, logger: Logger);
|
|
6
|
+
}
|
|
7
|
+
export declare class SymDividerSelector {
|
|
8
|
+
readonly dividerId: string;
|
|
9
|
+
readonly ownerId: string;
|
|
10
|
+
readonly outside: boolean;
|
|
11
|
+
readonly includes: boolean;
|
|
12
|
+
constructor(obj: DexObj, logger: Logger);
|
|
13
|
+
}
|
|
14
14
|
//# sourceMappingURL=SymMultiSelector.d.ts.map
|
|
@@ -1,48 +1,48 @@
|
|
|
1
|
-
import { DexObj } from "../../dex/DexObj.js";
|
|
2
|
-
import { VERBOSE_SYM_LOGGING } from "../SymNode.js";
|
|
3
|
-
export class SymMultiSelector {
|
|
4
|
-
constructor(obj, logger) {
|
|
5
|
-
this.selectors = [];
|
|
6
|
-
const selectors = obj.get("selectors");
|
|
7
|
-
if (!(selectors instanceof Array)) {
|
|
8
|
-
logger.warn("SymMultiSelector loading error", "selectors not of type Array");
|
|
9
|
-
return;
|
|
10
|
-
}
|
|
11
|
-
for (let selector of selectors) {
|
|
12
|
-
if (!(selector instanceof DexObj)) {
|
|
13
|
-
logger.warn("SymMultiSelector loading error", "selector not of type DexObj");
|
|
14
|
-
continue;
|
|
15
|
-
}
|
|
16
|
-
this.selectors.push(new SymDividerSelector(selector, logger));
|
|
17
|
-
}
|
|
18
|
-
if (VERBOSE_SYM_LOGGING) {
|
|
19
|
-
logger.info(`SymMultiSelector`, "selectors:", this.selectors);
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
export class SymDividerSelector {
|
|
24
|
-
constructor(obj, logger) {
|
|
25
|
-
this.dividerId = "";
|
|
26
|
-
this.ownerId = "";
|
|
27
|
-
this.outside = false;
|
|
28
|
-
this.includes = false;
|
|
29
|
-
const dividerId = obj.get("dividerId");
|
|
30
|
-
const ownerId = obj.get("ownerId");
|
|
31
|
-
const outside = obj.get("outside");
|
|
32
|
-
const includes = obj.get("include");
|
|
33
|
-
if (!(typeof dividerId === "string" &&
|
|
34
|
-
typeof ownerId === "string" &&
|
|
35
|
-
typeof outside === "boolean" &&
|
|
36
|
-
typeof includes === "boolean")) {
|
|
37
|
-
logger.warn("SymDividerSelector loading error", "default values assigned");
|
|
38
|
-
return;
|
|
39
|
-
}
|
|
40
|
-
this.dividerId = dividerId;
|
|
41
|
-
this.ownerId = ownerId;
|
|
42
|
-
this.outside = outside;
|
|
43
|
-
this.includes = includes;
|
|
44
|
-
if (VERBOSE_SYM_LOGGING) {
|
|
45
|
-
logger.info(`SymDividerSelector`, `dividerId ${this.dividerId}`, `ownerId ${this.ownerId}`, `outside ${this.outside}`, `includes ${this.includes}`);
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
}
|
|
1
|
+
import { DexObj } from "../../dex/DexObj.js";
|
|
2
|
+
import { VERBOSE_SYM_LOGGING } from "../SymNode.js";
|
|
3
|
+
export class SymMultiSelector {
|
|
4
|
+
constructor(obj, logger) {
|
|
5
|
+
this.selectors = [];
|
|
6
|
+
const selectors = obj.get("selectors");
|
|
7
|
+
if (!(selectors instanceof Array)) {
|
|
8
|
+
logger.warn("SymMultiSelector loading error", "selectors not of type Array");
|
|
9
|
+
return;
|
|
10
|
+
}
|
|
11
|
+
for (let selector of selectors) {
|
|
12
|
+
if (!(selector instanceof DexObj)) {
|
|
13
|
+
logger.warn("SymMultiSelector loading error", "selector not of type DexObj");
|
|
14
|
+
continue;
|
|
15
|
+
}
|
|
16
|
+
this.selectors.push(new SymDividerSelector(selector, logger));
|
|
17
|
+
}
|
|
18
|
+
if (VERBOSE_SYM_LOGGING) {
|
|
19
|
+
logger.info(`SymMultiSelector`, "selectors:", this.selectors);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
export class SymDividerSelector {
|
|
24
|
+
constructor(obj, logger) {
|
|
25
|
+
this.dividerId = "";
|
|
26
|
+
this.ownerId = "";
|
|
27
|
+
this.outside = false;
|
|
28
|
+
this.includes = false;
|
|
29
|
+
const dividerId = obj.get("dividerId");
|
|
30
|
+
const ownerId = obj.get("ownerId");
|
|
31
|
+
const outside = obj.get("outside");
|
|
32
|
+
const includes = obj.get("include");
|
|
33
|
+
if (!(typeof dividerId === "string" &&
|
|
34
|
+
typeof ownerId === "string" &&
|
|
35
|
+
typeof outside === "boolean" &&
|
|
36
|
+
typeof includes === "boolean")) {
|
|
37
|
+
logger.warn("SymDividerSelector loading error", "default values assigned");
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
this.dividerId = dividerId;
|
|
41
|
+
this.ownerId = ownerId;
|
|
42
|
+
this.outside = outside;
|
|
43
|
+
this.includes = includes;
|
|
44
|
+
if (VERBOSE_SYM_LOGGING) {
|
|
45
|
+
logger.info(`SymDividerSelector`, `dividerId ${this.dividerId}`, `ownerId ${this.ownerId}`, `outside ${this.outside}`, `includes ${this.includes}`);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
import { Logger } from "@configura/web-utilities";
|
|
2
|
-
import { DexObj } from "../../dex/DexObj.js";
|
|
3
|
-
import { SymImportEnv } from "../SymImportEnv.js";
|
|
4
|
-
import { SymComponent, SymComponentKey } from "./SymComponent.js";
|
|
5
|
-
export declare class SymParams extends SymComponent {
|
|
6
|
-
id: SymComponentKey;
|
|
7
|
-
private _params;
|
|
8
|
-
load(logger: Logger, obj: DexObj, _env: SymImportEnv, force?: boolean): undefined;
|
|
9
|
-
get params(): Map<string, ParamValue>;
|
|
10
|
-
}
|
|
11
|
-
export declare class ParamValue {
|
|
12
|
-
readonly progDependencies: Set<string>;
|
|
13
|
-
readonly value: number;
|
|
14
|
-
constructor(progDependencies: Set<string>, value: number);
|
|
15
|
-
static load(obj: DexObj, logger: Logger): ParamValue | undefined;
|
|
16
|
-
}
|
|
1
|
+
import { Logger } from "@configura/web-utilities";
|
|
2
|
+
import { DexObj } from "../../dex/DexObj.js";
|
|
3
|
+
import { SymImportEnv } from "../SymImportEnv.js";
|
|
4
|
+
import { SymComponent, SymComponentKey } from "./SymComponent.js";
|
|
5
|
+
export declare class SymParams extends SymComponent {
|
|
6
|
+
id: SymComponentKey;
|
|
7
|
+
private _params;
|
|
8
|
+
load(logger: Logger, obj: DexObj, _env: SymImportEnv, force?: boolean): undefined;
|
|
9
|
+
get params(): Map<string, ParamValue>;
|
|
10
|
+
}
|
|
11
|
+
export declare class ParamValue {
|
|
12
|
+
readonly progDependencies: Set<string>;
|
|
13
|
+
readonly value: number;
|
|
14
|
+
constructor(progDependencies: Set<string>, value: number);
|
|
15
|
+
static load(obj: DexObj, logger: Logger): ParamValue | undefined;
|
|
16
|
+
}
|
|
17
17
|
//# sourceMappingURL=SymParams.d.ts.map
|
|
@@ -1,58 +1,58 @@
|
|
|
1
|
-
import { DexObj } from "../../dex/DexObj.js";
|
|
2
|
-
import { VERBOSE_SYM_LOGGING } from "../SymNode.js";
|
|
3
|
-
import { SymComponent } from "./SymComponent.js";
|
|
4
|
-
export class SymParams extends SymComponent {
|
|
5
|
-
constructor() {
|
|
6
|
-
super(...arguments);
|
|
7
|
-
this.id = "symParams";
|
|
8
|
-
this._params = new Map();
|
|
9
|
-
}
|
|
10
|
-
load(logger, obj, _env, force = false) {
|
|
11
|
-
if (obj.get("paramsTrie") !== undefined) {
|
|
12
|
-
// After some digging it appears that "paramsTrie" was dropped in CmSym 4.0.0 but there
|
|
13
|
-
// might still be CmSym files out there using it.
|
|
14
|
-
//
|
|
15
|
-
// It is however very unlikely that such files would be used in conjunction with
|
|
16
|
-
// Catalogue Stretch which is when we need the params, so it is only an "info".
|
|
17
|
-
logger.info("CmSym file contains an outdated and unsupported version of SymParams. It is advised to re-save the CmSym using a modern version of CET.", "CmSym version used: " + _env.fileVersion.toDisplayString());
|
|
18
|
-
return undefined;
|
|
19
|
-
}
|
|
20
|
-
const params = obj.get("params");
|
|
21
|
-
if (!(params instanceof DexObj)) {
|
|
22
|
-
logger.warn("SymParams loading error", "invalid properties");
|
|
23
|
-
return undefined;
|
|
24
|
-
}
|
|
25
|
-
for (const key of params.props.keys()) {
|
|
26
|
-
const dexParamValue = params.get(key);
|
|
27
|
-
if (!(dexParamValue instanceof DexObj)) {
|
|
28
|
-
continue;
|
|
29
|
-
}
|
|
30
|
-
const paramValue = ParamValue.load(dexParamValue, logger);
|
|
31
|
-
if (paramValue !== undefined) {
|
|
32
|
-
this._params.set(key, paramValue);
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
if (VERBOSE_SYM_LOGGING) {
|
|
36
|
-
logger.info(`SymParams`, "params", this.params);
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
get params() {
|
|
40
|
-
return this._params;
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
export class ParamValue {
|
|
44
|
-
constructor(progDependencies, value) {
|
|
45
|
-
this.progDependencies = new Set();
|
|
46
|
-
this.progDependencies = progDependencies;
|
|
47
|
-
this.value = value;
|
|
48
|
-
}
|
|
49
|
-
static load(obj, logger) {
|
|
50
|
-
const progDependencies = obj.get("progDependencies");
|
|
51
|
-
const value = obj.get("v");
|
|
52
|
-
if (!(progDependencies instanceof Set && typeof value === "number")) {
|
|
53
|
-
logger.warn("ParamValue loading error", "invalid properties");
|
|
54
|
-
return undefined;
|
|
55
|
-
}
|
|
56
|
-
return new this(progDependencies, value);
|
|
57
|
-
}
|
|
58
|
-
}
|
|
1
|
+
import { DexObj } from "../../dex/DexObj.js";
|
|
2
|
+
import { VERBOSE_SYM_LOGGING } from "../SymNode.js";
|
|
3
|
+
import { SymComponent } from "./SymComponent.js";
|
|
4
|
+
export class SymParams extends SymComponent {
|
|
5
|
+
constructor() {
|
|
6
|
+
super(...arguments);
|
|
7
|
+
this.id = "symParams";
|
|
8
|
+
this._params = new Map();
|
|
9
|
+
}
|
|
10
|
+
load(logger, obj, _env, force = false) {
|
|
11
|
+
if (obj.get("paramsTrie") !== undefined) {
|
|
12
|
+
// After some digging it appears that "paramsTrie" was dropped in CmSym 4.0.0 but there
|
|
13
|
+
// might still be CmSym files out there using it.
|
|
14
|
+
//
|
|
15
|
+
// It is however very unlikely that such files would be used in conjunction with
|
|
16
|
+
// Catalogue Stretch which is when we need the params, so it is only an "info".
|
|
17
|
+
logger.info("CmSym file contains an outdated and unsupported version of SymParams. It is advised to re-save the CmSym using a modern version of CET.", "CmSym version used: " + _env.fileVersion.toDisplayString());
|
|
18
|
+
return undefined;
|
|
19
|
+
}
|
|
20
|
+
const params = obj.get("params");
|
|
21
|
+
if (!(params instanceof DexObj)) {
|
|
22
|
+
logger.warn("SymParams loading error", "invalid properties");
|
|
23
|
+
return undefined;
|
|
24
|
+
}
|
|
25
|
+
for (const key of params.props.keys()) {
|
|
26
|
+
const dexParamValue = params.get(key);
|
|
27
|
+
if (!(dexParamValue instanceof DexObj)) {
|
|
28
|
+
continue;
|
|
29
|
+
}
|
|
30
|
+
const paramValue = ParamValue.load(dexParamValue, logger);
|
|
31
|
+
if (paramValue !== undefined) {
|
|
32
|
+
this._params.set(key, paramValue);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
if (VERBOSE_SYM_LOGGING) {
|
|
36
|
+
logger.info(`SymParams`, "params", this.params);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
get params() {
|
|
40
|
+
return this._params;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
export class ParamValue {
|
|
44
|
+
constructor(progDependencies, value) {
|
|
45
|
+
this.progDependencies = new Set();
|
|
46
|
+
this.progDependencies = progDependencies;
|
|
47
|
+
this.value = value;
|
|
48
|
+
}
|
|
49
|
+
static load(obj, logger) {
|
|
50
|
+
const progDependencies = obj.get("progDependencies");
|
|
51
|
+
const value = obj.get("v");
|
|
52
|
+
if (!(progDependencies instanceof Set && typeof value === "number")) {
|
|
53
|
+
logger.warn("ParamValue loading error", "invalid properties");
|
|
54
|
+
return undefined;
|
|
55
|
+
}
|
|
56
|
+
return new this(progDependencies, value);
|
|
57
|
+
}
|
|
58
|
+
}
|