@design.estate/dees-domtools 2.3.3 → 2.3.4

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.
@@ -42860,40 +42860,59 @@ var DomTools2 = class _DomTools {
42860
42860
  this.deesComms = new dist_ts_exports16.DeesComms();
42861
42861
  this.scroller = new Scroller(this);
42862
42862
  this.themeManager = new ThemeManager(this);
42863
- this.keyboard = new Keyboard(document.body);
42863
+ this.keyboard = null;
42864
+ // Initialized after DOM ready to avoid accessing document.body before it exists
42864
42865
  this.domToolsReady = dist_ts_exports.defer();
42865
42866
  this.domReady = dist_ts_exports.defer();
42866
42867
  this.globalStylesReady = dist_ts_exports.defer();
42867
42868
  this.runOnceTrackerStringMap = new lik.Stringmap();
42868
42869
  this.runOnceResultMap = new lik.FastMap();
42870
+ this.runOnceErrorMap = new lik.FastMap();
42871
+ }
42872
+ static {
42873
+ // ======
42874
+ // STATIC
42875
+ // ======
42876
+ this.initializationPromise = null;
42869
42877
  }
42870
- // ======
42871
- // STATIC
42872
- // ======
42873
42878
  /**
42874
42879
  * setups domtools
42875
42880
  */
42876
42881
  static async setupDomTools(optionsArg = {}) {
42877
- let domToolsInstance;
42878
- if (!globalThis.deesDomTools && !optionsArg.ignoreGlobal) {
42879
- globalThis.deesDomTools = new _DomTools(optionsArg);
42880
- domToolsInstance = globalThis.deesDomTools;
42881
- const readyStateChangedFunc = () => {
42882
- if (document.readyState === "interactive" || document.readyState === "complete") {
42883
- domToolsInstance.elements.headElement = document.querySelector("head");
42884
- domToolsInstance.elements.bodyElement = document.querySelector("body");
42885
- domToolsInstance.domReady.resolve();
42882
+ if (!optionsArg.ignoreGlobal && _DomTools.initializationPromise) {
42883
+ return await _DomTools.initializationPromise;
42884
+ }
42885
+ if (!optionsArg.ignoreGlobal) {
42886
+ _DomTools.initializationPromise = (async () => {
42887
+ let domToolsInstance;
42888
+ if (!globalThis.deesDomTools) {
42889
+ globalThis.deesDomTools = new _DomTools(optionsArg);
42890
+ domToolsInstance = globalThis.deesDomTools;
42891
+ const readyStateChangedFunc = () => {
42892
+ if (document.readyState === "interactive" || document.readyState === "complete") {
42893
+ domToolsInstance.elements.headElement = document.querySelector("head");
42894
+ domToolsInstance.elements.bodyElement = document.querySelector("body");
42895
+ domToolsInstance.keyboard = new Keyboard(document.body);
42896
+ domToolsInstance.domReady.resolve();
42897
+ }
42898
+ };
42899
+ if (document.readyState === "interactive" || document.readyState === "complete") {
42900
+ readyStateChangedFunc();
42901
+ } else {
42902
+ document.addEventListener("readystatechange", readyStateChangedFunc);
42903
+ }
42904
+ domToolsInstance.domToolsReady.resolve();
42905
+ } else {
42906
+ domToolsInstance = globalThis.deesDomTools;
42886
42907
  }
42887
- };
42888
- document.addEventListener("readystatechange", readyStateChangedFunc);
42889
- domToolsInstance.domToolsReady.resolve();
42890
- } else if (optionsArg.ignoreGlobal) {
42891
- domToolsInstance = new _DomTools(optionsArg);
42908
+ await domToolsInstance.domToolsReady.promise;
42909
+ return domToolsInstance;
42910
+ })();
42911
+ return await _DomTools.initializationPromise;
42892
42912
  } else {
42893
- domToolsInstance = globalThis.deesDomTools;
42913
+ const domToolsInstance = new _DomTools(optionsArg);
42914
+ return domToolsInstance;
42894
42915
  }
42895
- await domToolsInstance.domToolsReady.promise;
42896
- return domToolsInstance;
42897
42916
  }
42898
42917
  /**
42899
42918
  * if you can, use the static asysnc .setupDomTools() function instead since it is safer to use.
@@ -42915,15 +42934,24 @@ var DomTools2 = class _DomTools {
42915
42934
  if (!this.runOnceTrackerStringMap.checkString(identifierArg)) {
42916
42935
  this.runOnceTrackerStringMap.addString(identifierArg);
42917
42936
  this.runOnceTrackerStringMap.addString(runningId);
42918
- const result = await funcArg();
42919
- this.runOnceResultMap.addToMap(identifierArg, result);
42920
- this.runOnceTrackerStringMap.removeString(runningId);
42937
+ try {
42938
+ const result = await funcArg();
42939
+ this.runOnceResultMap.addToMap(identifierArg, result);
42940
+ } catch (error) {
42941
+ this.runOnceErrorMap.addToMap(identifierArg, error);
42942
+ } finally {
42943
+ this.runOnceTrackerStringMap.removeString(runningId);
42944
+ }
42921
42945
  }
42922
42946
  return await this.runOnceTrackerStringMap.registerUntilTrue(
42923
42947
  (stringMap) => {
42924
42948
  return !stringMap.includes(runningId);
42925
42949
  },
42926
42950
  () => {
42951
+ const error = this.runOnceErrorMap.getByKey(identifierArg);
42952
+ if (error) {
42953
+ throw error;
42954
+ }
42927
42955
  return this.runOnceResultMap.getByKey(identifierArg);
42928
42956
  }
42929
42957
  );