lifecycleion 0.0.20 → 0.0.21
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 +39 -36
- package/dist/lib/event-emitter.cjs +195 -9
- package/dist/lib/event-emitter.cjs.map +1 -1
- package/dist/lib/event-emitter.js +195 -9
- package/dist/lib/event-emitter.js.map +1 -1
- package/dist/lib/global-event-target.cjs +217 -0
- package/dist/lib/global-event-target.cjs.map +1 -0
- package/dist/lib/global-event-target.d.cts +70 -0
- package/dist/lib/global-event-target.d.ts +70 -0
- package/dist/lib/global-event-target.js +189 -0
- package/dist/lib/global-event-target.js.map +1 -0
- package/dist/lib/http-client/index.cjs +554 -193
- package/dist/lib/http-client/index.cjs.map +1 -1
- package/dist/lib/http-client/index.d.cts +9 -3
- package/dist/lib/http-client/index.d.ts +9 -3
- package/dist/lib/http-client/index.js +554 -193
- package/dist/lib/http-client/index.js.map +1 -1
- package/dist/lib/http-client-mock/index.cjs +71 -10
- package/dist/lib/http-client-mock/index.cjs.map +1 -1
- package/dist/lib/http-client-mock/index.d.cts +50 -3
- package/dist/lib/http-client-mock/index.d.ts +50 -3
- package/dist/lib/http-client-mock/index.js +71 -10
- package/dist/lib/http-client-mock/index.js.map +1 -1
- package/dist/lib/http-client-node/index.cjs +98 -19
- package/dist/lib/http-client-node/index.cjs.map +1 -1
- package/dist/lib/http-client-node/index.d.cts +2 -2
- package/dist/lib/http-client-node/index.d.ts +2 -2
- package/dist/lib/http-client-node/index.js +98 -19
- package/dist/lib/http-client-node/index.js.map +1 -1
- package/dist/lib/http-client-xhr/index.cjs.map +1 -1
- package/dist/lib/http-client-xhr/index.d.cts +2 -2
- package/dist/lib/http-client-xhr/index.d.ts +2 -2
- package/dist/lib/http-client-xhr/index.js.map +1 -1
- package/dist/lib/lifecycle-manager/index.cjs +199 -13
- package/dist/lib/lifecycle-manager/index.cjs.map +1 -1
- package/dist/lib/lifecycle-manager/index.js +199 -13
- package/dist/lib/lifecycle-manager/index.js.map +1 -1
- package/dist/lib/logger/index.cjs +203 -21
- package/dist/lib/logger/index.cjs.map +1 -1
- package/dist/lib/logger/index.d.cts +5 -1
- package/dist/lib/logger/index.d.ts +5 -1
- package/dist/lib/logger/index.js +203 -21
- package/dist/lib/logger/index.js.map +1 -1
- package/dist/lib/lru-cache/index.cjs +195 -9
- package/dist/lib/lru-cache/index.cjs.map +1 -1
- package/dist/lib/lru-cache/index.js +195 -9
- package/dist/lib/lru-cache/index.js.map +1 -1
- package/dist/lib/process-signal-manager.cjs +199 -13
- package/dist/lib/process-signal-manager.cjs.map +1 -1
- package/dist/lib/process-signal-manager.js +199 -13
- package/dist/lib/process-signal-manager.js.map +1 -1
- package/dist/lib/promise-protected-resolver.cjs +195 -9
- package/dist/lib/promise-protected-resolver.cjs.map +1 -1
- package/dist/lib/promise-protected-resolver.js +195 -9
- package/dist/lib/promise-protected-resolver.js.map +1 -1
- package/dist/lib/retry-utils/index.cjs +195 -9
- package/dist/lib/retry-utils/index.cjs.map +1 -1
- package/dist/lib/retry-utils/index.js +195 -9
- package/dist/lib/retry-utils/index.js.map +1 -1
- package/dist/lib/safe-handle-callback.cjs +196 -18
- package/dist/lib/safe-handle-callback.cjs.map +1 -1
- package/dist/lib/safe-handle-callback.d.cts +14 -4
- package/dist/lib/safe-handle-callback.d.ts +14 -4
- package/dist/lib/safe-handle-callback.js +196 -18
- package/dist/lib/safe-handle-callback.js.map +1 -1
- package/dist/lib/single-event-observer.cjs +195 -9
- package/dist/lib/single-event-observer.cjs.map +1 -1
- package/dist/lib/single-event-observer.js +195 -9
- package/dist/lib/single-event-observer.js.map +1 -1
- package/dist/{types-6G59m8U9.d.cts → types-BFvpJPMt.d.cts} +71 -10
- package/dist/{types-CG10j6Lc.d.ts → types-BONtIhQ5.d.ts} +71 -10
- package/package.json +12 -2
|
@@ -770,18 +770,204 @@ function isFunction(value) {
|
|
|
770
770
|
return typeof value === "function" || value instanceof Function;
|
|
771
771
|
}
|
|
772
772
|
|
|
773
|
+
// src/lib/global-event-target.ts
|
|
774
|
+
var GLOBAL_KEY = "__lifecycleion_global_event_target__";
|
|
775
|
+
var METHOD_NAMES = [
|
|
776
|
+
"addEventListener",
|
|
777
|
+
"removeEventListener",
|
|
778
|
+
"dispatchEvent"
|
|
779
|
+
];
|
|
780
|
+
var g = globalThis;
|
|
781
|
+
function getState() {
|
|
782
|
+
const value = readGlobal(GLOBAL_KEY);
|
|
783
|
+
return value === UNREADABLE ? void 0 : asUsableState(value);
|
|
784
|
+
}
|
|
785
|
+
function asUsableState(value) {
|
|
786
|
+
if (typeof value !== "object" || value === null) {
|
|
787
|
+
return void 0;
|
|
788
|
+
}
|
|
789
|
+
return asUsableTarget(readMember(value, "target")) === null ? void 0 : value;
|
|
790
|
+
}
|
|
791
|
+
function asUsableTarget(value) {
|
|
792
|
+
if (typeof value !== "object" || value === null) {
|
|
793
|
+
return null;
|
|
794
|
+
}
|
|
795
|
+
for (const name of METHOD_NAMES) {
|
|
796
|
+
if (typeof readMember(value, name) !== "function") {
|
|
797
|
+
return null;
|
|
798
|
+
}
|
|
799
|
+
}
|
|
800
|
+
return value;
|
|
801
|
+
}
|
|
802
|
+
function bindTargetMethods(target) {
|
|
803
|
+
const bound = {};
|
|
804
|
+
for (const name of METHOD_NAMES) {
|
|
805
|
+
const method = readMember(target, name);
|
|
806
|
+
if (typeof method !== "function") {
|
|
807
|
+
return null;
|
|
808
|
+
}
|
|
809
|
+
let boundMethod;
|
|
810
|
+
try {
|
|
811
|
+
boundMethod = method.bind(target);
|
|
812
|
+
} catch {
|
|
813
|
+
return null;
|
|
814
|
+
}
|
|
815
|
+
if (typeof boundMethod !== "function") {
|
|
816
|
+
return null;
|
|
817
|
+
}
|
|
818
|
+
bound[name] = boundMethod;
|
|
819
|
+
}
|
|
820
|
+
return bound;
|
|
821
|
+
}
|
|
822
|
+
function isStateInstalled(state) {
|
|
823
|
+
return state !== void 0 && readMember(state, "isInstalled") === true;
|
|
824
|
+
}
|
|
825
|
+
function readStateTarget(state) {
|
|
826
|
+
if (state === void 0) {
|
|
827
|
+
return null;
|
|
828
|
+
}
|
|
829
|
+
return asUsableTarget(readMember(state, "target"));
|
|
830
|
+
}
|
|
831
|
+
var UNREADABLE = /* @__PURE__ */ Symbol("lifecycleion.unreadable");
|
|
832
|
+
function readGlobal(name) {
|
|
833
|
+
try {
|
|
834
|
+
return g[name];
|
|
835
|
+
} catch {
|
|
836
|
+
return UNREADABLE;
|
|
837
|
+
}
|
|
838
|
+
}
|
|
839
|
+
function readMember(source, key) {
|
|
840
|
+
try {
|
|
841
|
+
return source[key];
|
|
842
|
+
} catch {
|
|
843
|
+
return UNREADABLE;
|
|
844
|
+
}
|
|
845
|
+
}
|
|
846
|
+
function probeMember(name) {
|
|
847
|
+
const value = readGlobal(name);
|
|
848
|
+
if (value === UNREADABLE) {
|
|
849
|
+
return "hostile";
|
|
850
|
+
}
|
|
851
|
+
if (typeof value === "function") {
|
|
852
|
+
return "usable";
|
|
853
|
+
}
|
|
854
|
+
return value === void 0 ? "absent" : "occupied";
|
|
855
|
+
}
|
|
856
|
+
function canDefineProperty(key) {
|
|
857
|
+
const descriptor = Object.getOwnPropertyDescriptor(g, key);
|
|
858
|
+
if (descriptor === void 0) {
|
|
859
|
+
return Object.isExtensible(g);
|
|
860
|
+
}
|
|
861
|
+
return descriptor.configurable === true;
|
|
862
|
+
}
|
|
863
|
+
function installGlobalEventTarget() {
|
|
864
|
+
const members = METHOD_NAMES.map((name) => probeMember(name));
|
|
865
|
+
if (members.every((member) => member === "usable")) {
|
|
866
|
+
return isStateInstalled(getState()) ? "already-installed" : "native";
|
|
867
|
+
}
|
|
868
|
+
if (members.some((member) => member !== "absent")) {
|
|
869
|
+
return "partial";
|
|
870
|
+
}
|
|
871
|
+
const eventTargetConstructor = readGlobal("EventTarget");
|
|
872
|
+
if (typeof eventTargetConstructor !== "function") {
|
|
873
|
+
return "unsupported";
|
|
874
|
+
}
|
|
875
|
+
const isDefinable = [...METHOD_NAMES, GLOBAL_KEY].every(
|
|
876
|
+
(key) => canDefineProperty(key)
|
|
877
|
+
);
|
|
878
|
+
if (!isDefinable) {
|
|
879
|
+
return "blocked";
|
|
880
|
+
}
|
|
881
|
+
const existingState = getState();
|
|
882
|
+
const defined = [];
|
|
883
|
+
const priorStateDescriptor = Object.getOwnPropertyDescriptor(g, GLOBAL_KEY);
|
|
884
|
+
const rollback = () => {
|
|
885
|
+
for (const key of defined) {
|
|
886
|
+
if (key === GLOBAL_KEY && priorStateDescriptor !== void 0) {
|
|
887
|
+
try {
|
|
888
|
+
Object.defineProperty(g, GLOBAL_KEY, priorStateDescriptor);
|
|
889
|
+
} catch {
|
|
890
|
+
}
|
|
891
|
+
continue;
|
|
892
|
+
}
|
|
893
|
+
try {
|
|
894
|
+
Reflect.deleteProperty(g, key);
|
|
895
|
+
} catch {
|
|
896
|
+
}
|
|
897
|
+
}
|
|
898
|
+
};
|
|
899
|
+
const reusableTarget = readStateTarget(existingState);
|
|
900
|
+
const reusableMethods = reusableTarget === null ? null : bindTargetMethods(reusableTarget);
|
|
901
|
+
let state;
|
|
902
|
+
let methods;
|
|
903
|
+
try {
|
|
904
|
+
if (existingState === void 0 || reusableMethods === null) {
|
|
905
|
+
let target;
|
|
906
|
+
try {
|
|
907
|
+
target = new eventTargetConstructor();
|
|
908
|
+
} catch {
|
|
909
|
+
return "unsupported";
|
|
910
|
+
}
|
|
911
|
+
const freshMethods = bindTargetMethods(target);
|
|
912
|
+
if (freshMethods === null) {
|
|
913
|
+
return "unsupported";
|
|
914
|
+
}
|
|
915
|
+
state = { target, isInstalled: false };
|
|
916
|
+
methods = freshMethods;
|
|
917
|
+
Object.defineProperty(g, GLOBAL_KEY, {
|
|
918
|
+
value: state,
|
|
919
|
+
enumerable: false,
|
|
920
|
+
writable: false,
|
|
921
|
+
configurable: true
|
|
922
|
+
});
|
|
923
|
+
defined.push(GLOBAL_KEY);
|
|
924
|
+
} else {
|
|
925
|
+
state = existingState;
|
|
926
|
+
methods = reusableMethods;
|
|
927
|
+
}
|
|
928
|
+
for (const name of METHOD_NAMES) {
|
|
929
|
+
Object.defineProperty(g, name, {
|
|
930
|
+
value: methods[name],
|
|
931
|
+
enumerable: false,
|
|
932
|
+
writable: true,
|
|
933
|
+
configurable: true
|
|
934
|
+
});
|
|
935
|
+
defined.push(name);
|
|
936
|
+
}
|
|
937
|
+
if (readMember(state, "isInstalled") !== true) {
|
|
938
|
+
state.isInstalled = true;
|
|
939
|
+
}
|
|
940
|
+
} catch {
|
|
941
|
+
rollback();
|
|
942
|
+
return "blocked";
|
|
943
|
+
}
|
|
944
|
+
return "installed";
|
|
945
|
+
}
|
|
946
|
+
function isGlobalEventTargetAvailable() {
|
|
947
|
+
return METHOD_NAMES.every((name) => probeMember(name) === "usable") && probeMember("ErrorEvent") === "usable";
|
|
948
|
+
}
|
|
949
|
+
|
|
773
950
|
// src/lib/safe-handle-callback.ts
|
|
951
|
+
installGlobalEventTarget();
|
|
952
|
+
function reportCallbackError(callbackName, error) {
|
|
953
|
+
installGlobalEventTarget();
|
|
954
|
+
if (!isGlobalEventTargetAvailable()) {
|
|
955
|
+
return;
|
|
956
|
+
}
|
|
957
|
+
try {
|
|
958
|
+
globalThis.dispatchEvent(
|
|
959
|
+
new ErrorEvent("reportError", {
|
|
960
|
+
error: new Error(
|
|
961
|
+
`Error in a callback ${callbackName}: ${DOUBLE_EOL}${errorToString(error)}`
|
|
962
|
+
)
|
|
963
|
+
})
|
|
964
|
+
);
|
|
965
|
+
} catch {
|
|
966
|
+
}
|
|
967
|
+
}
|
|
774
968
|
function safeHandleCallback(callbackName, callback, ...args) {
|
|
775
969
|
const handleError = (error) => {
|
|
776
|
-
|
|
777
|
-
globalThis.dispatchEvent(
|
|
778
|
-
new ErrorEvent("reportError", {
|
|
779
|
-
error: new Error(
|
|
780
|
-
`Error in a callback ${callbackName}: ${DOUBLE_EOL}${errorToString(error)}`
|
|
781
|
-
)
|
|
782
|
-
})
|
|
783
|
-
);
|
|
784
|
-
}
|
|
970
|
+
reportCallbackError(callbackName, error);
|
|
785
971
|
};
|
|
786
972
|
if (isFunction(callback)) {
|
|
787
973
|
try {
|
|
@@ -1487,16 +1673,16 @@ var import_ulid = require("ulid");
|
|
|
1487
1673
|
var import_readline = __toESM(require("readline"), 1);
|
|
1488
1674
|
var SHARED_STATE_KEY = /* @__PURE__ */ Symbol.for("lifecycleion.ProcessSignalManager.v1");
|
|
1489
1675
|
function getSharedState() {
|
|
1490
|
-
const
|
|
1491
|
-
if (!
|
|
1492
|
-
|
|
1676
|
+
const g2 = globalThis;
|
|
1677
|
+
if (!g2[SHARED_STATE_KEY]) {
|
|
1678
|
+
g2[SHARED_STATE_KEY] = {
|
|
1493
1679
|
keypressEventsEmittedOnStdin: false,
|
|
1494
1680
|
attachedInstances: /* @__PURE__ */ new Set(),
|
|
1495
1681
|
rawModeOwner: null,
|
|
1496
1682
|
rawModeEnabledByManager: false
|
|
1497
1683
|
};
|
|
1498
1684
|
}
|
|
1499
|
-
return
|
|
1685
|
+
return g2[SHARED_STATE_KEY];
|
|
1500
1686
|
}
|
|
1501
1687
|
function transferRawModeOwnership(shared, currentOwner) {
|
|
1502
1688
|
if (shared.rawModeOwner !== currentOwner) {
|