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.
Files changed (72) hide show
  1. package/README.md +39 -36
  2. package/dist/lib/event-emitter.cjs +195 -9
  3. package/dist/lib/event-emitter.cjs.map +1 -1
  4. package/dist/lib/event-emitter.js +195 -9
  5. package/dist/lib/event-emitter.js.map +1 -1
  6. package/dist/lib/global-event-target.cjs +217 -0
  7. package/dist/lib/global-event-target.cjs.map +1 -0
  8. package/dist/lib/global-event-target.d.cts +70 -0
  9. package/dist/lib/global-event-target.d.ts +70 -0
  10. package/dist/lib/global-event-target.js +189 -0
  11. package/dist/lib/global-event-target.js.map +1 -0
  12. package/dist/lib/http-client/index.cjs +554 -193
  13. package/dist/lib/http-client/index.cjs.map +1 -1
  14. package/dist/lib/http-client/index.d.cts +9 -3
  15. package/dist/lib/http-client/index.d.ts +9 -3
  16. package/dist/lib/http-client/index.js +554 -193
  17. package/dist/lib/http-client/index.js.map +1 -1
  18. package/dist/lib/http-client-mock/index.cjs +71 -10
  19. package/dist/lib/http-client-mock/index.cjs.map +1 -1
  20. package/dist/lib/http-client-mock/index.d.cts +50 -3
  21. package/dist/lib/http-client-mock/index.d.ts +50 -3
  22. package/dist/lib/http-client-mock/index.js +71 -10
  23. package/dist/lib/http-client-mock/index.js.map +1 -1
  24. package/dist/lib/http-client-node/index.cjs +98 -19
  25. package/dist/lib/http-client-node/index.cjs.map +1 -1
  26. package/dist/lib/http-client-node/index.d.cts +2 -2
  27. package/dist/lib/http-client-node/index.d.ts +2 -2
  28. package/dist/lib/http-client-node/index.js +98 -19
  29. package/dist/lib/http-client-node/index.js.map +1 -1
  30. package/dist/lib/http-client-xhr/index.cjs.map +1 -1
  31. package/dist/lib/http-client-xhr/index.d.cts +2 -2
  32. package/dist/lib/http-client-xhr/index.d.ts +2 -2
  33. package/dist/lib/http-client-xhr/index.js.map +1 -1
  34. package/dist/lib/lifecycle-manager/index.cjs +199 -13
  35. package/dist/lib/lifecycle-manager/index.cjs.map +1 -1
  36. package/dist/lib/lifecycle-manager/index.js +199 -13
  37. package/dist/lib/lifecycle-manager/index.js.map +1 -1
  38. package/dist/lib/logger/index.cjs +203 -21
  39. package/dist/lib/logger/index.cjs.map +1 -1
  40. package/dist/lib/logger/index.d.cts +5 -1
  41. package/dist/lib/logger/index.d.ts +5 -1
  42. package/dist/lib/logger/index.js +203 -21
  43. package/dist/lib/logger/index.js.map +1 -1
  44. package/dist/lib/lru-cache/index.cjs +195 -9
  45. package/dist/lib/lru-cache/index.cjs.map +1 -1
  46. package/dist/lib/lru-cache/index.js +195 -9
  47. package/dist/lib/lru-cache/index.js.map +1 -1
  48. package/dist/lib/process-signal-manager.cjs +199 -13
  49. package/dist/lib/process-signal-manager.cjs.map +1 -1
  50. package/dist/lib/process-signal-manager.js +199 -13
  51. package/dist/lib/process-signal-manager.js.map +1 -1
  52. package/dist/lib/promise-protected-resolver.cjs +195 -9
  53. package/dist/lib/promise-protected-resolver.cjs.map +1 -1
  54. package/dist/lib/promise-protected-resolver.js +195 -9
  55. package/dist/lib/promise-protected-resolver.js.map +1 -1
  56. package/dist/lib/retry-utils/index.cjs +195 -9
  57. package/dist/lib/retry-utils/index.cjs.map +1 -1
  58. package/dist/lib/retry-utils/index.js +195 -9
  59. package/dist/lib/retry-utils/index.js.map +1 -1
  60. package/dist/lib/safe-handle-callback.cjs +196 -18
  61. package/dist/lib/safe-handle-callback.cjs.map +1 -1
  62. package/dist/lib/safe-handle-callback.d.cts +14 -4
  63. package/dist/lib/safe-handle-callback.d.ts +14 -4
  64. package/dist/lib/safe-handle-callback.js +196 -18
  65. package/dist/lib/safe-handle-callback.js.map +1 -1
  66. package/dist/lib/single-event-observer.cjs +195 -9
  67. package/dist/lib/single-event-observer.cjs.map +1 -1
  68. package/dist/lib/single-event-observer.js +195 -9
  69. package/dist/lib/single-event-observer.js.map +1 -1
  70. package/dist/{types-6G59m8U9.d.cts → types-BFvpJPMt.d.cts} +71 -10
  71. package/dist/{types-CG10j6Lc.d.ts → types-BONtIhQ5.d.ts} +71 -10
  72. package/package.json +12 -2
@@ -720,18 +720,204 @@ function isFunction(value) {
720
720
  return typeof value === "function" || value instanceof Function;
721
721
  }
722
722
 
723
+ // src/lib/global-event-target.ts
724
+ var GLOBAL_KEY = "__lifecycleion_global_event_target__";
725
+ var METHOD_NAMES = [
726
+ "addEventListener",
727
+ "removeEventListener",
728
+ "dispatchEvent"
729
+ ];
730
+ var g = globalThis;
731
+ function getState() {
732
+ const value = readGlobal(GLOBAL_KEY);
733
+ return value === UNREADABLE ? void 0 : asUsableState(value);
734
+ }
735
+ function asUsableState(value) {
736
+ if (typeof value !== "object" || value === null) {
737
+ return void 0;
738
+ }
739
+ return asUsableTarget(readMember(value, "target")) === null ? void 0 : value;
740
+ }
741
+ function asUsableTarget(value) {
742
+ if (typeof value !== "object" || value === null) {
743
+ return null;
744
+ }
745
+ for (const name of METHOD_NAMES) {
746
+ if (typeof readMember(value, name) !== "function") {
747
+ return null;
748
+ }
749
+ }
750
+ return value;
751
+ }
752
+ function bindTargetMethods(target) {
753
+ const bound = {};
754
+ for (const name of METHOD_NAMES) {
755
+ const method = readMember(target, name);
756
+ if (typeof method !== "function") {
757
+ return null;
758
+ }
759
+ let boundMethod;
760
+ try {
761
+ boundMethod = method.bind(target);
762
+ } catch {
763
+ return null;
764
+ }
765
+ if (typeof boundMethod !== "function") {
766
+ return null;
767
+ }
768
+ bound[name] = boundMethod;
769
+ }
770
+ return bound;
771
+ }
772
+ function isStateInstalled(state) {
773
+ return state !== void 0 && readMember(state, "isInstalled") === true;
774
+ }
775
+ function readStateTarget(state) {
776
+ if (state === void 0) {
777
+ return null;
778
+ }
779
+ return asUsableTarget(readMember(state, "target"));
780
+ }
781
+ var UNREADABLE = /* @__PURE__ */ Symbol("lifecycleion.unreadable");
782
+ function readGlobal(name) {
783
+ try {
784
+ return g[name];
785
+ } catch {
786
+ return UNREADABLE;
787
+ }
788
+ }
789
+ function readMember(source, key) {
790
+ try {
791
+ return source[key];
792
+ } catch {
793
+ return UNREADABLE;
794
+ }
795
+ }
796
+ function probeMember(name) {
797
+ const value = readGlobal(name);
798
+ if (value === UNREADABLE) {
799
+ return "hostile";
800
+ }
801
+ if (typeof value === "function") {
802
+ return "usable";
803
+ }
804
+ return value === void 0 ? "absent" : "occupied";
805
+ }
806
+ function canDefineProperty(key) {
807
+ const descriptor = Object.getOwnPropertyDescriptor(g, key);
808
+ if (descriptor === void 0) {
809
+ return Object.isExtensible(g);
810
+ }
811
+ return descriptor.configurable === true;
812
+ }
813
+ function installGlobalEventTarget() {
814
+ const members = METHOD_NAMES.map((name) => probeMember(name));
815
+ if (members.every((member) => member === "usable")) {
816
+ return isStateInstalled(getState()) ? "already-installed" : "native";
817
+ }
818
+ if (members.some((member) => member !== "absent")) {
819
+ return "partial";
820
+ }
821
+ const eventTargetConstructor = readGlobal("EventTarget");
822
+ if (typeof eventTargetConstructor !== "function") {
823
+ return "unsupported";
824
+ }
825
+ const isDefinable = [...METHOD_NAMES, GLOBAL_KEY].every(
826
+ (key) => canDefineProperty(key)
827
+ );
828
+ if (!isDefinable) {
829
+ return "blocked";
830
+ }
831
+ const existingState = getState();
832
+ const defined = [];
833
+ const priorStateDescriptor = Object.getOwnPropertyDescriptor(g, GLOBAL_KEY);
834
+ const rollback = () => {
835
+ for (const key of defined) {
836
+ if (key === GLOBAL_KEY && priorStateDescriptor !== void 0) {
837
+ try {
838
+ Object.defineProperty(g, GLOBAL_KEY, priorStateDescriptor);
839
+ } catch {
840
+ }
841
+ continue;
842
+ }
843
+ try {
844
+ Reflect.deleteProperty(g, key);
845
+ } catch {
846
+ }
847
+ }
848
+ };
849
+ const reusableTarget = readStateTarget(existingState);
850
+ const reusableMethods = reusableTarget === null ? null : bindTargetMethods(reusableTarget);
851
+ let state;
852
+ let methods;
853
+ try {
854
+ if (existingState === void 0 || reusableMethods === null) {
855
+ let target;
856
+ try {
857
+ target = new eventTargetConstructor();
858
+ } catch {
859
+ return "unsupported";
860
+ }
861
+ const freshMethods = bindTargetMethods(target);
862
+ if (freshMethods === null) {
863
+ return "unsupported";
864
+ }
865
+ state = { target, isInstalled: false };
866
+ methods = freshMethods;
867
+ Object.defineProperty(g, GLOBAL_KEY, {
868
+ value: state,
869
+ enumerable: false,
870
+ writable: false,
871
+ configurable: true
872
+ });
873
+ defined.push(GLOBAL_KEY);
874
+ } else {
875
+ state = existingState;
876
+ methods = reusableMethods;
877
+ }
878
+ for (const name of METHOD_NAMES) {
879
+ Object.defineProperty(g, name, {
880
+ value: methods[name],
881
+ enumerable: false,
882
+ writable: true,
883
+ configurable: true
884
+ });
885
+ defined.push(name);
886
+ }
887
+ if (readMember(state, "isInstalled") !== true) {
888
+ state.isInstalled = true;
889
+ }
890
+ } catch {
891
+ rollback();
892
+ return "blocked";
893
+ }
894
+ return "installed";
895
+ }
896
+ function isGlobalEventTargetAvailable() {
897
+ return METHOD_NAMES.every((name) => probeMember(name) === "usable") && probeMember("ErrorEvent") === "usable";
898
+ }
899
+
723
900
  // src/lib/safe-handle-callback.ts
901
+ installGlobalEventTarget();
902
+ function reportCallbackError(callbackName, error) {
903
+ installGlobalEventTarget();
904
+ if (!isGlobalEventTargetAvailable()) {
905
+ return;
906
+ }
907
+ try {
908
+ globalThis.dispatchEvent(
909
+ new ErrorEvent("reportError", {
910
+ error: new Error(
911
+ `Error in a callback ${callbackName}: ${DOUBLE_EOL}${errorToString(error)}`
912
+ )
913
+ })
914
+ );
915
+ } catch {
916
+ }
917
+ }
724
918
  function safeHandleCallback(callbackName, callback, ...args) {
725
919
  const handleError = (error) => {
726
- if (typeof globalThis.dispatchEvent === "function") {
727
- globalThis.dispatchEvent(
728
- new ErrorEvent("reportError", {
729
- error: new Error(
730
- `Error in a callback ${callbackName}: ${DOUBLE_EOL}${errorToString(error)}`
731
- )
732
- })
733
- );
734
- }
920
+ reportCallbackError(callbackName, error);
735
921
  };
736
922
  if (isFunction(callback)) {
737
923
  try {
@@ -1437,16 +1623,16 @@ import { ulid } from "ulid";
1437
1623
  import readline from "readline";
1438
1624
  var SHARED_STATE_KEY = /* @__PURE__ */ Symbol.for("lifecycleion.ProcessSignalManager.v1");
1439
1625
  function getSharedState() {
1440
- const g = globalThis;
1441
- if (!g[SHARED_STATE_KEY]) {
1442
- g[SHARED_STATE_KEY] = {
1626
+ const g2 = globalThis;
1627
+ if (!g2[SHARED_STATE_KEY]) {
1628
+ g2[SHARED_STATE_KEY] = {
1443
1629
  keypressEventsEmittedOnStdin: false,
1444
1630
  attachedInstances: /* @__PURE__ */ new Set(),
1445
1631
  rawModeOwner: null,
1446
1632
  rawModeEnabledByManager: false
1447
1633
  };
1448
1634
  }
1449
- return g[SHARED_STATE_KEY];
1635
+ return g2[SHARED_STATE_KEY];
1450
1636
  }
1451
1637
  function transferRawModeOwnership(shared, currentOwner) {
1452
1638
  if (shared.rawModeOwner !== currentOwner) {