@holoscript/core 7.0.0 → 8.0.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/README.md +4 -4
- package/bin/holoscript.cjs +3 -0
- package/dist/GLTFPipeline-N6B6PJ6G.cjs +38 -0
- package/dist/GLTFPipeline-P3WMNYCN.js +17 -0
- package/dist/HoloScriptPlusParser-7FBIFUFC.js +693 -0
- package/dist/HoloScriptPlusParser-A2W7OCN2.cjs +698 -0
- package/dist/HoloScriptPlusParser-F2Z56FJR.js +10 -0
- package/dist/HoloScriptPlusParser-WKHRIH6T.cjs +27 -0
- package/dist/HoloScriptRuntime-CBYJX3LZ.js +10 -0
- package/dist/HoloScriptRuntime-VJ374RER.cjs +19 -0
- package/dist/USDZExporter-3FWJ25JI.cjs +1037 -0
- package/dist/USDZExporter-D2HQLQYK.js +1035 -0
- package/dist/agents/index.cjs +19 -0
- package/dist/agents/index.d.ts +100 -0
- package/dist/agents/index.js +17 -0
- package/dist/chunk-2BSMSUCE.js +1941 -0
- package/dist/chunk-2IWC4FP7.cjs +1189 -0
- package/dist/chunk-2M2DPHKB.js +762 -0
- package/dist/chunk-2X7NGX3M.js +2426 -0
- package/dist/chunk-2YSNA2F2.cjs +1274 -0
- package/dist/chunk-3FOKASKO.cjs +348 -0
- package/dist/chunk-3WZEJHUQ.cjs +116 -0
- package/dist/chunk-4C57PR42.js +468 -0
- package/dist/chunk-4GU5GCIY.js +1384 -0
- package/dist/chunk-4N4SXXWF.js +769 -0
- package/dist/chunk-4PDEPEQW.cjs +41 -0
- package/dist/chunk-4R6SBXDB.js +45 -0
- package/dist/chunk-4SDKXQ4C.js +811 -0
- package/dist/chunk-4V2E7U7Q.cjs +2015 -0
- package/dist/chunk-5FSKKMR7.cjs +2092 -0
- package/dist/chunk-5GLCTO44.js +161 -0
- package/dist/chunk-5H2G27PK.cjs +627 -0
- package/dist/chunk-5JEU52DW.js +382 -0
- package/dist/chunk-5NWINHR5.cjs +689 -0
- package/dist/chunk-5S7RKFGR.cjs +446 -0
- package/dist/chunk-5WUNN6ZN.cjs +428 -0
- package/dist/chunk-6CTRH7HT.cjs +1985 -0
- package/dist/chunk-6EX3I5P4.cjs +130 -0
- package/dist/chunk-6Q7RC2MK.cjs +1418 -0
- package/dist/chunk-7H33U5SM.cjs +413 -0
- package/dist/chunk-7M3PNU2M.cjs +672 -0
- package/dist/chunk-7T25IEZ2.js +449 -0
- package/dist/chunk-7V4JI5TB.cjs +6947 -0
- package/dist/chunk-A6KINLZJ.js +236 -0
- package/dist/chunk-ADADVMXY.js +404 -0
- package/dist/chunk-AIA52I7T.cjs +543 -0
- package/dist/chunk-ALC6K7GL.cjs +4402 -0
- package/dist/chunk-ANXZFVY2.js +113 -0
- package/dist/chunk-AOVGZ25K.cjs +56583 -0
- package/dist/chunk-AVJHHUC5.cjs +718 -0
- package/dist/chunk-BGY3SDG3.js +4396 -0
- package/dist/chunk-BOVPWH4H.js +3857 -0
- package/dist/chunk-BRQJKJGT.cjs +20 -0
- package/dist/chunk-C37BHB7N.cjs +636 -0
- package/dist/chunk-CBJY23VL.js +126 -0
- package/dist/chunk-CCATWPXM.js +778 -0
- package/dist/chunk-CIWWXYHZ.cjs +50 -0
- package/dist/chunk-CMT5NMMS.js +669 -0
- package/dist/chunk-CR4FMIWL.cjs +1049 -0
- package/dist/chunk-CR7XRXRN.cjs +639 -0
- package/dist/chunk-CSD27UNQ.js +2176 -0
- package/dist/chunk-D3STJ56J.js +714 -0
- package/dist/chunk-DAJXW4KX.js +725 -0
- package/dist/chunk-DHO2YRIM.js +756 -0
- package/dist/chunk-DTGBOSEM.cjs +319 -0
- package/dist/chunk-E6XXE66V.js +2252 -0
- package/dist/chunk-E7JP3BS3.cjs +61 -0
- package/dist/chunk-EKBKLK7P.js +1169 -0
- package/dist/chunk-EKYL4PE3.cjs +404 -0
- package/dist/chunk-EXKSFGSX.cjs +274 -0
- package/dist/chunk-EXUP2BUM.cjs +1173 -0
- package/dist/chunk-FDSGHPAK.js +130 -0
- package/dist/chunk-FEWUHQNM.cjs +144 -0
- package/dist/chunk-FFAOS5HQ.js +70 -0
- package/dist/chunk-FGGJQRLZ.js +270 -0
- package/dist/chunk-FHP6LXJS.js +415 -0
- package/dist/chunk-FJPADH77.cjs +666 -0
- package/dist/chunk-FL33V6U7.js +421 -0
- package/dist/chunk-FYSPZT4V.cjs +169 -0
- package/dist/chunk-GIOYPNTH.js +5575 -0
- package/dist/chunk-GJNCFRJU.cjs +125 -0
- package/dist/chunk-GMP623FG.cjs +1508 -0
- package/dist/chunk-GQHQOPXZ.cjs +5580 -0
- package/dist/chunk-GTU2Z2WW.cjs +262 -0
- package/dist/chunk-GYZE55MO.js +2007 -0
- package/dist/chunk-GZG4KA4E.js +529 -0
- package/dist/chunk-H652NHX5.js +600 -0
- package/dist/chunk-HCCQLAA4.cjs +74 -0
- package/dist/chunk-HKEXJUWS.cjs +4007 -0
- package/dist/chunk-HNDK4IQU.cjs +5737 -0
- package/dist/chunk-HR2OSYVQ.js +56165 -0
- package/dist/chunk-HYNTS5CP.js +422 -0
- package/dist/chunk-I6XZ5DZF.cjs +488 -0
- package/dist/chunk-ILRBGFVD.cjs +72 -0
- package/dist/chunk-IUDGEUDO.cjs +1409 -0
- package/dist/chunk-IUTY5WQ2.cjs +424 -0
- package/dist/chunk-IVY74O6C.js +247 -0
- package/dist/chunk-IWC5DM2M.cjs +611 -0
- package/dist/chunk-J32ZJZJH.js +554 -0
- package/dist/chunk-J52VSAQ7.js +6884 -0
- package/dist/chunk-J6M4FPK5.js +421 -0
- package/dist/chunk-J7XZV333.js +844 -0
- package/dist/chunk-JBNDTXXV.cjs +2433 -0
- package/dist/chunk-JC5YBPSF.cjs +984 -0
- package/dist/chunk-JD7CIZ33.js +1949 -0
- package/dist/chunk-JIBL5LRK.js +4287 -0
- package/dist/chunk-JIYN45TV.cjs +2525 -0
- package/dist/chunk-K574J76X.cjs +457 -0
- package/dist/chunk-KHDZJE5D.cjs +2196 -0
- package/dist/chunk-KKFZ3B6J.cjs +557 -0
- package/dist/chunk-KKP7JKN4.cjs +6002 -0
- package/dist/chunk-KPJL34Y7.cjs +186 -0
- package/dist/chunk-KQCN6AKJ.cjs +3042 -0
- package/dist/chunk-L5LKKENW.cjs +424 -0
- package/dist/chunk-LHAXPADA.js +882 -0
- package/dist/chunk-LM2VU56C.cjs +37 -0
- package/dist/chunk-M56JSP4A.js +400 -0
- package/dist/chunk-MBOOR7X4.js +18 -0
- package/dist/chunk-MQWAT42R.cjs +4310 -0
- package/dist/chunk-MXFUTKCO.js +56 -0
- package/dist/chunk-MYY4PMWX.cjs +264 -0
- package/dist/chunk-N75IH2HY.js +258 -0
- package/dist/chunk-NCWCUZNS.cjs +72 -0
- package/dist/chunk-NG77ATEW.cjs +778 -0
- package/dist/chunk-NW5G5FBQ.js +215 -0
- package/dist/chunk-OBIYPYYS.cjs +1993 -0
- package/dist/chunk-OH2FAIVU.js +608 -0
- package/dist/chunk-OIQYIIO3.cjs +473 -0
- package/dist/chunk-OL46QLBJ.js +61 -0
- package/dist/chunk-OMXII44L.js +5386 -0
- package/dist/chunk-OSYNRVOV.cjs +243 -0
- package/dist/chunk-PGANYCAG.cjs +220 -0
- package/dist/chunk-PHENW4MQ.js +65 -0
- package/dist/chunk-PY37LNDP.js +686 -0
- package/dist/chunk-Q56TT7IL.js +483 -0
- package/dist/chunk-QD32ADK6.js +1046 -0
- package/dist/chunk-QPOQ7VPI.js +1491 -0
- package/dist/chunk-QPSKHBJP.js +5963 -0
- package/dist/chunk-QXH7QDSZ.js +1989 -0
- package/dist/chunk-R24NNAEG.js +1399 -0
- package/dist/chunk-R75BSDH7.cjs +50 -0
- package/dist/chunk-RARB3MBR.js +207 -0
- package/dist/chunk-ROHLEP2W.cjs +847 -0
- package/dist/chunk-S3MDHNKB.cjs +490 -0
- package/dist/chunk-S6YWHCKV.cjs +410 -0
- package/dist/chunk-SIEXCILW.js +229 -0
- package/dist/chunk-SLU6UPJI.cjs +410 -0
- package/dist/chunk-SMIWS6DE.cjs +212 -0
- package/dist/chunk-T5J7ZKP3.cjs +4885 -0
- package/dist/chunk-TDCNJHWO.js +341 -0
- package/dist/chunk-TG7O4WBC.js +406 -0
- package/dist/chunk-THCK6ECW.js +2085 -0
- package/dist/chunk-TJHVSBP2.js +439 -0
- package/dist/chunk-TVHSPJ4N.cjs +606 -0
- package/dist/chunk-TWUXUCEW.cjs +781 -0
- package/dist/chunk-U44IKGG7.cjs +5390 -0
- package/dist/chunk-UFZZ7TSN.cjs +886 -0
- package/dist/chunk-UJXISJBN.js +487 -0
- package/dist/chunk-UOIGFQXC.cjs +9750 -0
- package/dist/chunk-URG2SJLK.js +2521 -0
- package/dist/chunk-UWJHCOH2.js +623 -0
- package/dist/chunk-V6MKC2FZ.js +979 -0
- package/dist/chunk-VJ3L7CHT.cjs +169 -0
- package/dist/chunk-VMLKSV26.js +1216 -0
- package/dist/chunk-VVKVQZI6.js +55 -0
- package/dist/chunk-W6RW64BB.cjs +1219 -0
- package/dist/chunk-WKX5AMOY.js +309 -0
- package/dist/chunk-WNNE3PO3.js +34 -0
- package/dist/chunk-WRKUDAZJ.js +3038 -0
- package/dist/chunk-WRLUBRKS.cjs +1943 -0
- package/dist/chunk-WRNEH5MO.js +3169 -0
- package/dist/chunk-WRWEX5ZF.js +658 -0
- package/dist/chunk-X3GJPRVK.cjs +3246 -0
- package/dist/chunk-X3UVCWNL.cjs +2257 -0
- package/dist/chunk-XB274MW5.cjs +814 -0
- package/dist/chunk-XHIV6326.cjs +793 -0
- package/dist/chunk-XIVIE43A.cjs +729 -0
- package/dist/chunk-XJAN7CZG.cjs +432 -0
- package/dist/chunk-XKTPFXGA.js +164 -0
- package/dist/chunk-XL6INWKT.js +121 -0
- package/dist/chunk-XSFNHP2E.js +632 -0
- package/dist/chunk-XT6JY5W5.js +9684 -0
- package/dist/chunk-XUILI4KB.cjs +430 -0
- package/dist/chunk-YF2I3MV3.js +46 -0
- package/dist/chunk-YIMN575O.js +4847 -0
- package/dist/chunk-YIVFJNYV.js +176 -0
- package/dist/chunk-YKGPCZEE.cjs +237 -0
- package/dist/chunk-YN2YWTXW.js +5731 -0
- package/dist/chunk-YN6V7R3L.cjs +327 -0
- package/dist/chunk-YQELFNJV.js +39 -0
- package/dist/chunk-YVD3CSO3.js +1183 -0
- package/dist/chunk-YVOAF4ML.js +623 -0
- package/dist/chunk-YWOBW2PV.cjs +759 -0
- package/dist/chunk-YYXH45E2.js +426 -0
- package/dist/chunk-ZDSYWBIE.cjs +69 -0
- package/dist/chunk-ZU7NIRT6.js +325 -0
- package/dist/chunk-ZZ7RO2UQ.js +1243 -0
- package/dist/cli/holoscript-runner.cjs +2255 -0
- package/dist/cli/holoscript-runner.js +2230 -0
- package/dist/codebase/index.cjs +336 -0
- package/dist/codebase/index.js +331 -0
- package/dist/compiler/agent-inference.cjs +31 -0
- package/dist/compiler/agent-inference.js +8 -0
- package/dist/compiler/android-xr.cjs +24 -0
- package/dist/compiler/android-xr.js +14 -0
- package/dist/compiler/android.cjs +24 -0
- package/dist/compiler/android.js +14 -0
- package/dist/compiler/ar.cjs +23 -0
- package/dist/compiler/ar.js +11 -0
- package/dist/compiler/babylon.cjs +21 -0
- package/dist/compiler/babylon.js +15 -0
- package/dist/compiler/business-quest.cjs +43 -0
- package/dist/compiler/business-quest.js +4 -0
- package/dist/compiler/coco.cjs +27 -0
- package/dist/compiler/coco.js +4 -0
- package/dist/compiler/context.cjs +25 -0
- package/dist/compiler/context.d.ts +28 -0
- package/dist/compiler/context.js +8 -0
- package/dist/compiler/domain-block-utils.cjs +609 -0
- package/dist/compiler/domain-block-utils.js +11 -0
- package/dist/compiler/dtdl.cjs +27 -0
- package/dist/compiler/dtdl.js +11 -0
- package/dist/compiler/gltf-pipeline.cjs +39 -0
- package/dist/compiler/gltf-pipeline.js +4 -0
- package/dist/compiler/godot.cjs +18 -0
- package/dist/compiler/godot.js +12 -0
- package/dist/compiler/incremental.cjs +34 -0
- package/dist/compiler/incremental.js +9 -0
- package/dist/compiler/index.cjs +5408 -0
- package/dist/compiler/index.d.ts +334 -21
- package/dist/compiler/index.js +5069 -0
- package/dist/compiler/ios.cjs +23 -0
- package/dist/compiler/ios.js +13 -0
- package/dist/compiler/llm-provider-capabilities.cjs +25 -0
- package/dist/compiler/llm-provider-capabilities.d.ts +43 -0
- package/dist/compiler/llm-provider-capabilities.js +8 -0
- package/dist/compiler/multi-layer.cjs +24 -0
- package/dist/compiler/multi-layer.js +15 -0
- package/dist/compiler/nodetoy.cjs +23 -0
- package/dist/compiler/nodetoy.d.ts +69 -0
- package/dist/compiler/nodetoy.js +4 -0
- package/dist/compiler/openxr.cjs +19 -0
- package/dist/compiler/openxr.js +13 -0
- package/dist/compiler/playcanvas.cjs +19 -0
- package/dist/compiler/playcanvas.js +13 -0
- package/dist/compiler/r3f.cjs +39 -0
- package/dist/compiler/r3f.d.ts +22 -0
- package/dist/compiler/r3f.js +17 -0
- package/dist/compiler/remotion.cjs +23 -0
- package/dist/compiler/remotion.js +4 -0
- package/dist/compiler/reproducibility.cjs +39 -0
- package/dist/compiler/reproducibility.js +4 -0
- package/dist/compiler/sdf.cjs +24 -0
- package/dist/compiler/sdf.js +12 -0
- package/dist/compiler/semantic-scene.cjs +31 -0
- package/dist/compiler/semantic-scene.js +4 -0
- package/dist/compiler/state.cjs +21 -0
- package/dist/compiler/state.js +11 -0
- package/dist/compiler/trait-composition.cjs +30 -0
- package/dist/compiler/trait-composition.js +9 -0
- package/dist/compiler/unity.cjs +19 -0
- package/dist/compiler/unity.js +13 -0
- package/dist/compiler/unreal.cjs +23 -0
- package/dist/compiler/unreal.js +13 -0
- package/dist/compiler/urdf.cjs +52 -0
- package/dist/compiler/urdf.js +12 -0
- package/dist/compiler/usd-physics.cjs +26 -0
- package/dist/compiler/usd-physics.js +9 -0
- package/dist/compiler/visionos.cjs +19 -0
- package/dist/compiler/visionos.js +13 -0
- package/dist/compiler/vrchat.cjs +22 -0
- package/dist/compiler/vrchat.js +12 -0
- package/dist/compiler/vrr.cjs +24 -0
- package/dist/compiler/vrr.js +12 -0
- package/dist/compiler/wasm.cjs +36 -0
- package/dist/compiler/wasm.js +12 -0
- package/dist/compiler/webgpu.cjs +18 -0
- package/dist/compiler/webgpu.js +12 -0
- package/dist/coordinators/index.cjs +1266 -0
- package/dist/coordinators/index.d.ts +72 -1
- package/dist/coordinators/index.js +1259 -0
- package/dist/debugger.cjs +24 -0
- package/dist/debugger.js +11 -0
- package/dist/dist-ACXG6IH5.cjs +3113 -0
- package/dist/dist-VD4L6V7Q.js +3076 -0
- package/dist/entries/interop.cjs +64 -0
- package/dist/entries/interop.js +7 -0
- package/dist/entries/scripting.cjs +55 -0
- package/dist/entries/scripting.js +10 -0
- package/dist/hololand/index.cjs +146 -0
- package/dist/hololand/index.d.ts +70 -0
- package/dist/hololand/index.js +5 -0
- package/dist/index.cjs +44660 -0
- package/dist/index.d.ts +978 -21
- package/dist/index.js +41422 -0
- package/dist/math/tropical-spmv.cjs +45 -0
- package/dist/math/tropical-spmv.js +4 -0
- package/dist/math/vec3.cjs +57 -0
- package/dist/math/vec3.js +4 -0
- package/dist/ml-dsa-FSKBTE3W.cjs +1265 -0
- package/dist/ml-dsa-Z7JDKW4L.js +1265 -0
- package/dist/paper-0c-spike/index.cjs +150 -0
- package/dist/paper-0c-spike/index.js +141 -0
- package/dist/parser.cjs +61 -0
- package/dist/parser.d.ts +11 -0
- package/dist/parser.js +12 -0
- package/dist/playwright-3AT3AKTV.cjs +98673 -0
- package/dist/playwright-VZPDVUEQ.js +98660 -0
- package/dist/reconstruction/index.cjs +153 -0
- package/dist/reconstruction/index.d.ts +29 -2
- package/dist/reconstruction/index.js +8 -0
- package/dist/runtime.cjs +316 -0
- package/dist/runtime.d.ts +61 -0
- package/dist/runtime.js +31 -0
- package/dist/self-improvement/index.cjs +563 -0
- package/dist/self-improvement/index.js +545 -0
- package/dist/src-4ROC227P.cjs +2094 -0
- package/dist/src-HCCCSYP7.js +2073 -0
- package/dist/storage/index.cjs +38 -0
- package/dist/storage/index.js +5 -0
- package/dist/testing.cjs +25 -0
- package/dist/testing.d.ts +70 -0
- package/dist/testing.js +4 -0
- package/dist/traitDocs/traitDocs.cjs +33 -0
- package/dist/traitDocs/traitDocs.js +7 -0
- package/dist/traits/botanical-lotus.cjs +177 -0
- package/dist/traits/botanical-lotus.d.ts +502 -0
- package/dist/traits/botanical-lotus.js +7 -0
- package/dist/traits/engines/index.cjs +520 -0
- package/dist/traits/engines/index.js +380 -0
- package/dist/traits/index.cjs +24548 -0
- package/dist/traits/index.d.ts +171 -35
- package/dist/traits/index.js +21638 -0
- package/dist/traits/simulation-solver-factory.cjs +13 -0
- package/dist/traits/simulation-solver-factory.d.ts +23 -0
- package/dist/traits/simulation-solver-factory.js +4 -0
- package/dist/traits/webcam-gaze.cjs +35 -0
- package/dist/traits/webcam-gaze.d.ts +17 -0
- package/dist/traits/webcam-gaze.js +4 -0
- package/dist/type-checker.cjs +19 -0
- package/dist/type-checker.js +6 -0
- package/dist/world/index.cjs +947 -0
- package/dist/world/index.d.ts +147 -0
- package/dist/world/index.js +939 -0
- package/dist/world-model/index.cjs +1446 -0
- package/dist/world-model/index.d.ts +119 -0
- package/dist/world-model/index.js +1414 -0
- package/dist/wot/index.cjs +29 -0
- package/dist/wot/index.js +4 -0
- package/package.json +93 -49
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
// src/resilience/ResiliencePatterns.ts
|
|
4
|
+
var CircuitBreakerState = /* @__PURE__ */ ((CircuitBreakerState2) => {
|
|
5
|
+
CircuitBreakerState2["CLOSED"] = "CLOSED";
|
|
6
|
+
CircuitBreakerState2["OPEN"] = "OPEN";
|
|
7
|
+
CircuitBreakerState2["HALF_OPEN"] = "HALF_OPEN";
|
|
8
|
+
return CircuitBreakerState2;
|
|
9
|
+
})(CircuitBreakerState || {});
|
|
10
|
+
var CircuitBreaker = class {
|
|
11
|
+
constructor(config = {}) {
|
|
12
|
+
this.state = "CLOSED" /* CLOSED */;
|
|
13
|
+
this.failureCount = 0;
|
|
14
|
+
this.successCount = 0;
|
|
15
|
+
this.lastFailureTime = null;
|
|
16
|
+
this.failures = [];
|
|
17
|
+
this.config = {
|
|
18
|
+
failureThreshold: 5,
|
|
19
|
+
successThreshold: 2,
|
|
20
|
+
resetTimeoutMs: 6e4,
|
|
21
|
+
// 1 minute
|
|
22
|
+
windowMs: 3e4,
|
|
23
|
+
// 30 seconds
|
|
24
|
+
isRetryable: (err) => err instanceof Error,
|
|
25
|
+
...config
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Execute function with circuit breaker protection
|
|
30
|
+
*/
|
|
31
|
+
async execute(fn) {
|
|
32
|
+
if (this.state === "OPEN" /* OPEN */) {
|
|
33
|
+
if (Date.now() - (this.lastFailureTime || 0) > this.config.resetTimeoutMs) {
|
|
34
|
+
this.state = "HALF_OPEN" /* HALF_OPEN */;
|
|
35
|
+
this.successCount = 0;
|
|
36
|
+
} else {
|
|
37
|
+
throw new Error(`Circuit breaker is OPEN. Retry after ${this.config.resetTimeoutMs}ms`);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
try {
|
|
41
|
+
const result = await fn();
|
|
42
|
+
this.onSuccess();
|
|
43
|
+
return result;
|
|
44
|
+
} catch (error) {
|
|
45
|
+
this.onFailure(error);
|
|
46
|
+
throw error;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
onSuccess() {
|
|
50
|
+
this.failureCount = 0;
|
|
51
|
+
this.failures = this.failures.filter((f) => Date.now() - f.timestamp < this.config.windowMs);
|
|
52
|
+
if (this.state === "HALF_OPEN" /* HALF_OPEN */) {
|
|
53
|
+
this.successCount++;
|
|
54
|
+
if (this.successCount >= this.config.successThreshold) {
|
|
55
|
+
this.state = "CLOSED" /* CLOSED */;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
onFailure(error) {
|
|
60
|
+
this.lastFailureTime = Date.now();
|
|
61
|
+
this.failureCount++;
|
|
62
|
+
this.failures.push({ timestamp: Date.now(), error });
|
|
63
|
+
this.failures = this.failures.filter((f) => Date.now() - f.timestamp < this.config.windowMs);
|
|
64
|
+
if (this.state === "HALF_OPEN" /* HALF_OPEN */) {
|
|
65
|
+
this.state = "OPEN" /* OPEN */;
|
|
66
|
+
} else if (this.failureCount >= this.config.failureThreshold) {
|
|
67
|
+
this.state = "OPEN" /* OPEN */;
|
|
68
|
+
console.error(`Circuit breaker OPEN after ${this.failureCount} failures: ${error.message}`);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
get currentState() {
|
|
72
|
+
return this.state;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Get current circuit breaker state (accessor method)
|
|
76
|
+
*/
|
|
77
|
+
getState() {
|
|
78
|
+
if (this.state === "OPEN" /* OPEN */ && Date.now() - (this.lastFailureTime || 0) > this.config.resetTimeoutMs) {
|
|
79
|
+
return "HALF_OPEN" /* HALF_OPEN */;
|
|
80
|
+
}
|
|
81
|
+
return this.state;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Get circuit breaker metrics
|
|
85
|
+
*/
|
|
86
|
+
getMetrics() {
|
|
87
|
+
return {
|
|
88
|
+
state: this.state,
|
|
89
|
+
totalFailures: this.failureCount,
|
|
90
|
+
totalSuccesses: this.successCount,
|
|
91
|
+
lastFailureTime: this.lastFailureTime,
|
|
92
|
+
totalRequests: this.failureCount + this.successCount
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
};
|
|
96
|
+
async function retryWithBackoff(fn, config = {}) {
|
|
97
|
+
const cfg = {
|
|
98
|
+
maxAttempts: 3,
|
|
99
|
+
initialBackoffMs: 100,
|
|
100
|
+
maxBackoffMs: 1e4,
|
|
101
|
+
multiplier: 2,
|
|
102
|
+
jitter: true,
|
|
103
|
+
isRetryable: (err, attempt) => attempt < cfg.maxAttempts,
|
|
104
|
+
...config
|
|
105
|
+
};
|
|
106
|
+
let lastError = null;
|
|
107
|
+
for (let attempt = 1; attempt <= cfg.maxAttempts; attempt++) {
|
|
108
|
+
try {
|
|
109
|
+
return await fn();
|
|
110
|
+
} catch (error) {
|
|
111
|
+
lastError = error;
|
|
112
|
+
if (!cfg.isRetryable(lastError, attempt)) {
|
|
113
|
+
throw lastError;
|
|
114
|
+
}
|
|
115
|
+
if (attempt < cfg.maxAttempts) {
|
|
116
|
+
const backoff = Math.min(
|
|
117
|
+
cfg.initialBackoffMs * Math.pow(cfg.multiplier, attempt - 1),
|
|
118
|
+
cfg.maxBackoffMs
|
|
119
|
+
);
|
|
120
|
+
const jitteredBackoff = cfg.jitter ? backoff * (0.5 + Math.random() * 0.5) : backoff;
|
|
121
|
+
console.warn(
|
|
122
|
+
`Attempt ${attempt} failed: ${lastError.message}. Retrying in ${Math.round(jitteredBackoff)}ms`
|
|
123
|
+
);
|
|
124
|
+
await sleep(jitteredBackoff);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
throw lastError || new Error("Max retry attempts exceeded");
|
|
129
|
+
}
|
|
130
|
+
var Bulkhead = class {
|
|
131
|
+
constructor(config = {}) {
|
|
132
|
+
this.running = 0;
|
|
133
|
+
this.queue = [];
|
|
134
|
+
this.config = {
|
|
135
|
+
maxConcurrent: 10,
|
|
136
|
+
queueSize: 100,
|
|
137
|
+
timeoutMs: 3e4,
|
|
138
|
+
...config
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Execute function within bulkhead
|
|
143
|
+
*/
|
|
144
|
+
async execute(fn) {
|
|
145
|
+
if (this.queue.length >= this.config.queueSize) {
|
|
146
|
+
throw new Error("Bulkhead queue full - too many pending operations");
|
|
147
|
+
}
|
|
148
|
+
return new Promise((resolve, reject) => {
|
|
149
|
+
const timeoutId = setTimeout(() => {
|
|
150
|
+
const idx = this.queue.findIndex((item) => item.resolve === resolve);
|
|
151
|
+
if (idx !== -1) {
|
|
152
|
+
this.queue.splice(idx, 1);
|
|
153
|
+
}
|
|
154
|
+
reject(new Error("Bulkhead operation timeout"));
|
|
155
|
+
}, this.config.timeoutMs);
|
|
156
|
+
this.queue.push({
|
|
157
|
+
fn,
|
|
158
|
+
// @ts-expect-error
|
|
159
|
+
resolve,
|
|
160
|
+
reject,
|
|
161
|
+
timeoutId
|
|
162
|
+
});
|
|
163
|
+
this.processQueue();
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
processQueue() {
|
|
167
|
+
while (this.running < this.config.maxConcurrent && this.queue.length > 0) {
|
|
168
|
+
const item = this.queue.shift();
|
|
169
|
+
if (!item) break;
|
|
170
|
+
this.running++;
|
|
171
|
+
item.fn().then((result) => {
|
|
172
|
+
clearTimeout(item.timeoutId);
|
|
173
|
+
item.resolve(result);
|
|
174
|
+
}).catch((error) => {
|
|
175
|
+
clearTimeout(item.timeoutId);
|
|
176
|
+
item.reject(error);
|
|
177
|
+
}).finally(() => {
|
|
178
|
+
this.running--;
|
|
179
|
+
this.processQueue();
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
get stats() {
|
|
184
|
+
return {
|
|
185
|
+
running: this.running,
|
|
186
|
+
queued: this.queue.length
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Get bulkhead state (accessor method)
|
|
191
|
+
*/
|
|
192
|
+
getState() {
|
|
193
|
+
return {
|
|
194
|
+
running: this.running,
|
|
195
|
+
queued: this.queue.length,
|
|
196
|
+
maxConcurrent: this.config.maxConcurrent
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Get bulkhead metrics
|
|
201
|
+
*/
|
|
202
|
+
getMetrics() {
|
|
203
|
+
return {
|
|
204
|
+
running: this.running,
|
|
205
|
+
queued: this.queue.length,
|
|
206
|
+
utilizationPercent: this.running / this.config.maxConcurrent * 100,
|
|
207
|
+
queueUtilizationPercent: this.queue.length / this.config.queueSize * 100
|
|
208
|
+
};
|
|
209
|
+
}
|
|
210
|
+
};
|
|
211
|
+
async function fallbackChain(strategies) {
|
|
212
|
+
let lastError = null;
|
|
213
|
+
for (let i = 0; i < strategies.length; i++) {
|
|
214
|
+
try {
|
|
215
|
+
const result = await strategies[i]();
|
|
216
|
+
return result;
|
|
217
|
+
} catch (error) {
|
|
218
|
+
lastError = error;
|
|
219
|
+
console.warn(`Strategy ${i + 1} failed: ${lastError.message}`);
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
throw lastError || new Error("All fallback strategies failed");
|
|
223
|
+
}
|
|
224
|
+
function sleep(ms) {
|
|
225
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
226
|
+
}
|
|
227
|
+
async function withTimeout(promise, timeoutMs) {
|
|
228
|
+
return Promise.race([
|
|
229
|
+
promise,
|
|
230
|
+
new Promise(
|
|
231
|
+
(_, reject) => setTimeout(() => reject(new Error(`Operation timeout after ${timeoutMs}ms`)), timeoutMs)
|
|
232
|
+
)
|
|
233
|
+
]);
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
exports.Bulkhead = Bulkhead;
|
|
237
|
+
exports.CircuitBreaker = CircuitBreaker;
|
|
238
|
+
exports.CircuitBreakerState = CircuitBreakerState;
|
|
239
|
+
exports.fallbackChain = fallbackChain;
|
|
240
|
+
exports.retryWithBackoff = retryWithBackoff;
|
|
241
|
+
exports.withTimeout = withTimeout;
|
|
242
|
+
//# sourceMappingURL=chunk-OSYNRVOV.cjs.map
|
|
243
|
+
//# sourceMappingURL=chunk-OSYNRVOV.cjs.map
|
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
// src/testing/DeterminismHarness.ts
|
|
4
|
+
function getGlobal() {
|
|
5
|
+
return globalThis ?? {};
|
|
6
|
+
}
|
|
7
|
+
function detectRuntime() {
|
|
8
|
+
const g = getGlobal();
|
|
9
|
+
if (typeof g.window !== "undefined" && typeof g.document !== "undefined") {
|
|
10
|
+
return "browser";
|
|
11
|
+
}
|
|
12
|
+
if (typeof g.process !== "undefined" && g.process.versions?.node) {
|
|
13
|
+
return "node";
|
|
14
|
+
}
|
|
15
|
+
return "unknown";
|
|
16
|
+
}
|
|
17
|
+
function detectBrowserFromUserAgent(ua) {
|
|
18
|
+
if (!ua) return {};
|
|
19
|
+
let browser;
|
|
20
|
+
let os;
|
|
21
|
+
if (/Firefox\//.test(ua)) browser = "firefox";
|
|
22
|
+
else if (/Edg\//.test(ua)) browser = "edge";
|
|
23
|
+
else if (/Chrome\//.test(ua)) browser = "chromium";
|
|
24
|
+
else if (/Safari\//.test(ua)) browser = "safari";
|
|
25
|
+
if (/Windows NT/.test(ua)) os = "windows";
|
|
26
|
+
else if (/Mac OS X/.test(ua)) os = "macos";
|
|
27
|
+
else if (/Linux/.test(ua)) os = "linux";
|
|
28
|
+
else if (/Android/.test(ua)) os = "android";
|
|
29
|
+
else if (/iPhone|iPad/.test(ua)) os = "ios";
|
|
30
|
+
return { browser, os };
|
|
31
|
+
}
|
|
32
|
+
async function captureEnvironment(annotations = {}) {
|
|
33
|
+
const runtime = detectRuntime();
|
|
34
|
+
const g = getGlobal();
|
|
35
|
+
const info = { runtime };
|
|
36
|
+
if (Object.keys(annotations).length > 0) info.annotations = { ...annotations };
|
|
37
|
+
if (runtime === "browser") {
|
|
38
|
+
const nav = g.navigator;
|
|
39
|
+
const ua = nav?.userAgent;
|
|
40
|
+
info.browser = { userAgent: ua, ...detectBrowserFromUserAgent(ua) };
|
|
41
|
+
if (nav?.gpu?.requestAdapter) {
|
|
42
|
+
try {
|
|
43
|
+
const adapter = await nav.gpu.requestAdapter();
|
|
44
|
+
let gpuInfo = adapter?.info;
|
|
45
|
+
if (!gpuInfo && adapter?.requestAdapterInfo) {
|
|
46
|
+
gpuInfo = await adapter.requestAdapterInfo();
|
|
47
|
+
}
|
|
48
|
+
if (gpuInfo) {
|
|
49
|
+
info.gpu = {
|
|
50
|
+
vendor: gpuInfo.vendor,
|
|
51
|
+
architecture: gpuInfo.architecture,
|
|
52
|
+
device: gpuInfo.device,
|
|
53
|
+
description: gpuInfo.description,
|
|
54
|
+
backend: "webgpu"
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
} catch {
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
} else if (runtime === "node") {
|
|
61
|
+
const proc = g.process;
|
|
62
|
+
if (proc) {
|
|
63
|
+
info.node = {
|
|
64
|
+
version: proc.versions?.node ?? "unknown",
|
|
65
|
+
arch: proc.arch ?? "unknown",
|
|
66
|
+
platform: proc.platform ?? "unknown"
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
return info;
|
|
71
|
+
}
|
|
72
|
+
function toUint8Array(input) {
|
|
73
|
+
if (input instanceof Uint8Array) return input;
|
|
74
|
+
if (typeof TextEncoder !== "undefined") {
|
|
75
|
+
return new TextEncoder().encode(input);
|
|
76
|
+
}
|
|
77
|
+
const bytes = new Uint8Array(input.length);
|
|
78
|
+
for (let i = 0; i < input.length; i++) bytes[i] = input.charCodeAt(i) & 255;
|
|
79
|
+
return bytes;
|
|
80
|
+
}
|
|
81
|
+
function fnv1a64Hex(bytes) {
|
|
82
|
+
let hash = 0xcbf29ce484222325n;
|
|
83
|
+
const prime = 0x100000001b3n;
|
|
84
|
+
const mask = 0xffffffffffffffffn;
|
|
85
|
+
for (let i = 0; i < bytes.length; i++) {
|
|
86
|
+
hash = (hash ^ BigInt(bytes[i])) & mask;
|
|
87
|
+
hash = hash * prime & mask;
|
|
88
|
+
}
|
|
89
|
+
return hash.toString(16).padStart(16, "0");
|
|
90
|
+
}
|
|
91
|
+
async function hashBytes(input, algo = "sha256") {
|
|
92
|
+
const bytes = toUint8Array(input);
|
|
93
|
+
if (algo === "sha256") {
|
|
94
|
+
const g = getGlobal();
|
|
95
|
+
const subtle = g.crypto?.subtle;
|
|
96
|
+
if (subtle && typeof subtle.digest === "function") {
|
|
97
|
+
try {
|
|
98
|
+
const digest = await subtle.digest("SHA-256", bytes);
|
|
99
|
+
const view = new Uint8Array(digest);
|
|
100
|
+
let hex = "";
|
|
101
|
+
for (let i = 0; i < view.length; i++) hex += view[i].toString(16).padStart(2, "0");
|
|
102
|
+
return `sha256:${hex}`;
|
|
103
|
+
} catch {
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
return `fnv1a-64:${fnv1a64Hex(bytes)}`;
|
|
108
|
+
}
|
|
109
|
+
var DeterminismHarness = class {
|
|
110
|
+
constructor(options = {}) {
|
|
111
|
+
this.options = {
|
|
112
|
+
captureOutput: options.captureOutput ?? false,
|
|
113
|
+
hashAlgorithm: options.hashAlgorithm ?? "sha256",
|
|
114
|
+
annotations: options.annotations ?? {}
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Run a probe function, capture environment, hash the output,
|
|
119
|
+
* return a structured ProbeResult. Never throws — errors are
|
|
120
|
+
* caught and reported on the result's `error` field with a
|
|
121
|
+
* sentinel outputHash of `error:<message>`.
|
|
122
|
+
*/
|
|
123
|
+
async probe(name, fn, annotations = {}) {
|
|
124
|
+
const timestamp = Date.now();
|
|
125
|
+
const mergedAnnotations = { ...this.options.annotations, ...annotations };
|
|
126
|
+
const environment = await captureEnvironment(mergedAnnotations);
|
|
127
|
+
const started = typeof performance !== "undefined" ? performance.now() : timestamp;
|
|
128
|
+
let output;
|
|
129
|
+
let error;
|
|
130
|
+
try {
|
|
131
|
+
output = await fn();
|
|
132
|
+
} catch (err) {
|
|
133
|
+
error = err instanceof Error ? err.message : String(err);
|
|
134
|
+
}
|
|
135
|
+
const ended = typeof performance !== "undefined" ? performance.now() : Date.now();
|
|
136
|
+
const durationMs = Math.max(0, ended - started);
|
|
137
|
+
if (error !== void 0 || output === void 0) {
|
|
138
|
+
return {
|
|
139
|
+
name,
|
|
140
|
+
timestamp,
|
|
141
|
+
environment,
|
|
142
|
+
durationMs,
|
|
143
|
+
outputHash: `error:${error ?? "no-output"}`,
|
|
144
|
+
outputSize: 0,
|
|
145
|
+
error
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
const outputHash = await hashBytes(output, this.options.hashAlgorithm);
|
|
149
|
+
const outputSize = output instanceof Uint8Array ? output.byteLength : toUint8Array(output).byteLength;
|
|
150
|
+
const result = {
|
|
151
|
+
name,
|
|
152
|
+
timestamp,
|
|
153
|
+
environment,
|
|
154
|
+
durationMs,
|
|
155
|
+
outputHash,
|
|
156
|
+
outputSize
|
|
157
|
+
};
|
|
158
|
+
if (this.options.captureOutput) result.output = output;
|
|
159
|
+
return result;
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Compare a collection of probe results and report whether they
|
|
163
|
+
* agree. Groups results by hash so the caller can see which
|
|
164
|
+
* environments produced which outputs.
|
|
165
|
+
*/
|
|
166
|
+
static compareResults(results) {
|
|
167
|
+
if (results.length === 0) {
|
|
168
|
+
return {
|
|
169
|
+
probeName: "(empty)",
|
|
170
|
+
totalResults: 0,
|
|
171
|
+
uniqueHashes: 0,
|
|
172
|
+
divergent: false,
|
|
173
|
+
groups: [],
|
|
174
|
+
summary: "No results supplied to compare."
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
const probeName = results[0].name;
|
|
178
|
+
const byHash = /* @__PURE__ */ new Map();
|
|
179
|
+
for (const r of results) {
|
|
180
|
+
const existing = byHash.get(r.outputHash);
|
|
181
|
+
if (existing) existing.push(r);
|
|
182
|
+
else byHash.set(r.outputHash, [r]);
|
|
183
|
+
}
|
|
184
|
+
const groups = Array.from(byHash.entries()).map(([hash, rs]) => ({
|
|
185
|
+
hash,
|
|
186
|
+
results: rs,
|
|
187
|
+
environments: rs.map((r) => describeEnvironment(r.environment))
|
|
188
|
+
}));
|
|
189
|
+
const divergent = groups.length > 1;
|
|
190
|
+
const summary = divergent ? `DIVERGENT: ${groups.length} distinct hashes across ${results.length} runs of "${probeName}".` : `CONVERGENT: all ${results.length} runs of "${probeName}" produced hash ${groups[0].hash}.`;
|
|
191
|
+
return {
|
|
192
|
+
probeName,
|
|
193
|
+
totalResults: results.length,
|
|
194
|
+
uniqueHashes: groups.length,
|
|
195
|
+
divergent,
|
|
196
|
+
groups,
|
|
197
|
+
summary
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
};
|
|
201
|
+
function describeEnvironment(env) {
|
|
202
|
+
const parts = [env.runtime];
|
|
203
|
+
if (env.browser?.browser) parts.push(env.browser.browser);
|
|
204
|
+
if (env.browser?.os) parts.push(env.browser.os);
|
|
205
|
+
if (env.node) parts.push(`node ${env.node.version} ${env.node.platform}/${env.node.arch}`);
|
|
206
|
+
if (env.gpu?.vendor) parts.push(`gpu:${env.gpu.vendor}${env.gpu.architecture ? "/" + env.gpu.architecture : ""}`);
|
|
207
|
+
if (env.annotations) {
|
|
208
|
+
for (const [k, v] of Object.entries(env.annotations)) {
|
|
209
|
+
parts.push(`${k}=${v}`);
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
return parts.join(" | ");
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
exports.DeterminismHarness = DeterminismHarness;
|
|
216
|
+
exports.captureEnvironment = captureEnvironment;
|
|
217
|
+
exports.describeEnvironment = describeEnvironment;
|
|
218
|
+
exports.hashBytes = hashBytes;
|
|
219
|
+
//# sourceMappingURL=chunk-PGANYCAG.cjs.map
|
|
220
|
+
//# sourceMappingURL=chunk-PGANYCAG.cjs.map
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
// src/logger.ts
|
|
2
|
+
var NoOpLogger = class {
|
|
3
|
+
/**
|
|
4
|
+
* Debug-level logging (no-op implementation).
|
|
5
|
+
* @param message - Debug message to discard
|
|
6
|
+
* @param meta - Optional metadata to discard
|
|
7
|
+
*/
|
|
8
|
+
debug(message, meta) {
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Info-level logging (no-op implementation).
|
|
12
|
+
* @param message - Info message to discard
|
|
13
|
+
* @param meta - Optional metadata to discard
|
|
14
|
+
*/
|
|
15
|
+
info(message, meta) {
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Warning-level logging (no-op implementation).
|
|
19
|
+
* @param message - Warning message to discard
|
|
20
|
+
* @param meta - Optional metadata to discard
|
|
21
|
+
*/
|
|
22
|
+
warn(message, meta) {
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Error-level logging (no-op implementation).
|
|
26
|
+
* @param message - Error message to discard
|
|
27
|
+
* @param meta - Optional metadata to discard
|
|
28
|
+
*/
|
|
29
|
+
error(message, meta) {
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
var ConsoleLogger = class {
|
|
33
|
+
debug(message, meta) {
|
|
34
|
+
console.debug(`[HoloScript:DEBUG] ${message}`, meta ?? "");
|
|
35
|
+
}
|
|
36
|
+
info(message, meta) {
|
|
37
|
+
console.info(`[HoloScript:INFO] ${message}`, meta ?? "");
|
|
38
|
+
}
|
|
39
|
+
warn(message, meta) {
|
|
40
|
+
console.warn(`[HoloScript:WARN] ${message}`, meta ?? "");
|
|
41
|
+
}
|
|
42
|
+
error(message, meta) {
|
|
43
|
+
console.error(`[HoloScript:ERROR] ${message}`, meta ?? "");
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
var currentLogger = new NoOpLogger();
|
|
47
|
+
function setHoloScriptLogger(logger2) {
|
|
48
|
+
currentLogger = logger2;
|
|
49
|
+
}
|
|
50
|
+
function enableConsoleLogging() {
|
|
51
|
+
currentLogger = new ConsoleLogger();
|
|
52
|
+
}
|
|
53
|
+
function resetLogger() {
|
|
54
|
+
currentLogger = new NoOpLogger();
|
|
55
|
+
}
|
|
56
|
+
var logger = {
|
|
57
|
+
debug: (msg, meta) => currentLogger.debug(msg, meta),
|
|
58
|
+
info: (msg, meta) => currentLogger.info(msg, meta),
|
|
59
|
+
warn: (msg, meta) => currentLogger.warn(msg, meta),
|
|
60
|
+
error: (msg, meta) => currentLogger.error(msg, meta)
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
export { ConsoleLogger, NoOpLogger, enableConsoleLogging, logger, resetLogger, setHoloScriptLogger };
|
|
64
|
+
//# sourceMappingURL=chunk-PHENW4MQ.js.map
|
|
65
|
+
//# sourceMappingURL=chunk-PHENW4MQ.js.map
|