# @ts-check

###* @type Record<number, [boolean, unknown]> ###
once_cacheOnce = {}
once_indexOnce = 0

###* @type import('./once').Once ###
export default (callback) ->

  once_i = once_indexOnce
  once_indexOnce++

  once_cacheOnce[once_i] = [false, '']

  return (args...) ->

    if once_cacheOnce[once_i][0] then return once_cacheOnce[once_i][1]

    once_result = callback args...

    once_cacheOnce[once_i] = [true, once_result]
    return once_result