33 lines
		
	
	
		
			660 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			33 lines
		
	
	
		
			660 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
// @ts-check
 | 
						|
 | 
						|
/**
 | 
						|
 * @param {(() => void) | (() => Promise<void>)} callback
 | 
						|
 * @returns {Promise<void>}
 | 
						|
 */
 | 
						|
export default function ready(callback) {
 | 
						|
  return new Promise((resolve, reject) => {
 | 
						|
    function loaded() {
 | 
						|
      let result;
 | 
						|
      try {
 | 
						|
        result = callback();
 | 
						|
      } catch (err) {
 | 
						|
        reject(err);
 | 
						|
 | 
						|
        return;
 | 
						|
      }
 | 
						|
 | 
						|
      if (typeof result?.then === 'function') {
 | 
						|
        result.then(resolve).catch(reject);
 | 
						|
      } else {
 | 
						|
        resolve();
 | 
						|
      }
 | 
						|
    }
 | 
						|
 | 
						|
    if (['interactive', 'complete'].includes(document.readyState)) {
 | 
						|
      loaded();
 | 
						|
    } else {
 | 
						|
      document.addEventListener('DOMContentLoaded', loaded);
 | 
						|
    }
 | 
						|
  });
 | 
						|
}
 |