function defineDOM(...params) {
  /**
   * @type {(dependencies: string[]) void}
   */
  let factory
  /**
   * @type string[]
   */
  let dependencies
  // Adjust various AMD callding patterhns
  if (params.length < 2) {
    factory = params[0]
    dependencies = []
  } else {
    if (params.length >= 3) {
      params = params.slice(1)
    }
    dependencies = params[0]
    factory = params[1]
  }
  // Instance dependencies
  const exports = {}
  const module = { exports }
  const rutimeDepenciesPromises = dependencies.map((dep) =>
    dep === 'exports'
      ? Promise.resolve(exports)
      : dep === 'module'
      ? Promise.resolve(module)
      : requireDependency(dep)
  )
  queue.push(
    Promise.all(rutimeDepenciesPromises).then((rutimeDepencies) => {
      // Run factory ... This will (maybe) write into exports
      const outFactory = factory(...rutimeDepencies)
      if (
        !dependencies.includes('exports') &&
        !dependencies.includes('module') &&
        outFactory
      ) {
        // NOTE: In this case the factory return module
        return outFactory
      }
      // Push filled exports
      return exports
    })
  )
}
AMD Define for the DOM Context