{"version":3,"sources":["jsdelivr-header.js","/npm/zorax-plug/plug.js","/npm/zorax@0.0.14/lib/alias.js","/npm/zorax@0.0.14/lib/auto.js","/npm/zorax@0.0.14/lib/catch.js","/npm/zorax@0.0.14/lib/_util.js","/npm/zorax@0.0.14/lib/names.js","/npm/zorax@0.0.14/lib/defer.js","/npm/zorax@0.0.14/lib/filter.js","/npm/zorax@0.0.14/lib/defer.only.const.js","/npm/zorax@0.0.14/lib/defer.group.js","/npm/zorax@0.0.14/lib/macro.js","/npm/zorax@0.0.14/lib/defer.only.js","/npm/zorax@0.0.14/lib/defer.print.js","/npm/zorax@0.0.14/lib/pass.js","/npm/zorax@0.0.14/lib/reporter.js","/npm/zorax@0.0.14/lib/spy.js","/npm/zorax@0.0.14/lib/todo.js","/npm/zorax@0.0.14/lib/zorax.defaults.js","/npm/zorax@0.0.14/lib/zorax.js"],"names":[],"mappings":"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","file":"/npm/zorax@0.0.14/dist/zorax.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/zorax@0.0.14/dist/zorax.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","import { createHarness as createZoraHarness } from 'zora'\n\nconst REPORT_HOOKS = Symbol('@zorax/plug:REPORT_HOOKS')\n\nconst noop = () => {}\n\nconst getHarnessMutators = pg => [pg.test, pg.harness, pg.init]\n\nconst getHarnessDecorators = pg => [\n  pg.decorate,\n  pg.decorateHarness,\n  pg.decorateInit,\n]\n\nconst getProxyMutators = pg => [pg.test, pg.harness]\n\nconst getProxyDecorators = pg => [pg.decorate, pg.decorateHarness]\n\nconst getTestMutators = pg => pg.test\n\nconst getTestDecorators = pg => pg.decorate\n\nconst getHarnessHooks = plugins =>\n  [\n    ...plugins.flatMap(getHarnessMutators),\n    ...plugins.flatMap(getHarnessDecorators),\n  ].filter(Boolean)\n\nconst getTestHooks = plugins =>\n  [...plugins.map(getTestMutators), ...plugins.map(getTestDecorators)].filter(\n    Boolean\n  )\n\nconst getProxyHooks = plugins =>\n  [\n    ...plugins.flatMap(getProxyMutators),\n    ...plugins.flatMap(getProxyDecorators),\n  ].filter(Boolean)\n\nconst wrapTestMethod = (harness, proxy, withHooks, target) => {\n  const { test } = target\n\n  target.test = (desc, run, ...rest) => {\n    // just a friendly sanity check: end of pipeline respects expected signature\n    if (\n      // undefined title is actually more or less allowed\n      (typeof desc !== 'undefined' && typeof desc !== 'string') ||\n      typeof run !== 'function'\n    ) {\n      throw new Error('plugins pipeline in disarray')\n    }\n\n    const zora_spec_fn = (t, ...rest) => run(withHooks(t), ...rest)\n\n    return test(desc, zora_spec_fn, ...rest)\n  }\n}\n\n// NOTE prop: {} makes it undefined\nconst proxySpecifiers = {\n  report: {},\n  pass: { writable: true }, // zora.pass wants to rewrite this\n  error: {},\n  length: {},\n  count: {},\n  successCount: {},\n  skipCount: {},\n  failureCount: {},\n}\n\nconst augmentProxy = (harness, target, plugins, getHooks) => {\n  target.plugins = plugins\n\n  target.plug = (...newPlugins) => plug(harness, plugins, target, newPlugins)\n\n  target.run = fn => {\n    fn(target)\n    return target\n  }\n\n  const testHooks = getTestHooks(plugins)\n\n  const withTestHooks = t => {\n    wrapTestMethod(harness, target, withTestHooks, t)\n    testHooks.forEach(hook => hook(t, target, harness))\n    return t\n  }\n\n  wrapTestMethod(harness, target, withTestHooks, target)\n\n  // NOTE apply hooks _after_ replacing test!\n  const hooks = getHooks(plugins)\n  hooks.forEach(hook => hook(target, harness))\n}\n\nconst createProxy = t => Object.create(t, proxySpecifiers)\n\nconst plug = (harness, parentPlugins, target, newPluginsInput) => {\n  const newPlugins = newPluginsInput.flat().filter(Boolean)\n\n  newPlugins.forEach(pg => {\n    if (pg.init || pg.decorateInit) {\n      throw new Error(\n        'Init plugin can only be added at harness creation (not plugged): ' +\n          pg.name\n      )\n    }\n\n    if (pg.report) {\n      harness[REPORT_HOOKS].push(pg.report)\n    }\n  })\n\n  const proxy = createProxy(target)\n\n  const plugins = [...parentPlugins, ...newPlugins]\n\n  augmentProxy(harness, proxy, plugins, getProxyHooks)\n\n  return proxy\n}\n\nconst parseCreateHarnessFactoryArgs = args => {\n  if (args.length === 0) {\n    return args\n  }\n\n  let createHarness\n  let options\n  let plugins\n\n  const [a, b, c] = args\n\n  if (typeof a === 'function') {\n    createHarness = a\n    if (Array.isArray(b)) {\n      plugins = b\n    } else {\n      options = b\n      plugins = c\n    }\n  } else {\n    if (Array.isArray(a)) {\n      plugins = a\n    } else {\n      options = a\n      plugins = b\n    }\n  }\n\n  return [createHarness, options, plugins]\n}\n\n// createHarnessFactory(options)\n// createHarnessFactory(plugins)\n// createHarnessFactory(options, plugins)\n// createHarnessFactory(createHarness, options)\n// createHarnessFactory(createHarness, plugins)\n// createHarnessFactory(createHarness, options, plugins)\nexport const createHarnessFactory = (...args) => {\n  const [\n    createHarness = createZoraHarness,\n    factoryOptions = {},\n    factoryPlugins = [],\n  ] = parseCreateHarnessFactoryArgs(args)\n\n  const createZoraxHarness = (\n    harnessOptions = {},\n    harnessPlugins = [],\n    ...args\n  ) => {\n    if (Array.isArray(harnessOptions)) {\n      harnessPlugins = harnessOptions\n      harnessOptions = {}\n    }\n\n    const options = { ...factoryOptions, ...harnessOptions }\n\n    const harness = createHarness(options, ...args)\n\n    harness.options = options\n\n    const plugins = [...factoryPlugins, ...harnessPlugins].filter(Boolean)\n\n    harness[REPORT_HOOKS] = plugins.filter(pg => pg.report).map(pg => pg.report)\n\n    const { report } = harness\n    harness.report = async (...args) => {\n      const after = []\n      for (const reportHook of harness[REPORT_HOOKS]) {\n        const afterHook = await reportHook(harness, args)\n        if (afterHook) after.push(afterHook)\n      }\n\n      await report.apply(harness, args)\n\n      for (const afterHook of after) {\n        await afterHook()\n      }\n    }\n\n    augmentProxy(harness, harness, plugins, getHarnessHooks)\n\n    return harness\n  }\n\n  return createZoraxHarness\n}\n\nexport const createHarness = createHarnessFactory(createZoraHarness)\n\ncreateHarness.plug = noop\n","/**\n * Zorax alias\n */\n\nconst applyAlias = (from, t) => to => {\n  const path = to.split('.')\n  const key = path.pop()\n  const target = path.reduce((cursor, step) => cursor[step], t)\n  target[key] = t[from]\n}\n\nconst forEach = (run, source) => {\n  Array.isArray(source) ? source.forEach(run) : run(source)\n}\n\nconst applyAliases = (aliases, t) => {\n  Object.entries(aliases).forEach(([from, to]) => {\n    forEach(applyAlias(from, t), to)\n  })\n}\n\nconst aliaser = aliases => aliases && (t => applyAliases(aliases, t))\n\nexport default (test, harness) => ({\n  name: 'zorax.alias',\n  decorate: aliaser(test),\n  decorateHarness: aliaser(harness),\n})\n","const logError = err => {\n  // eslint-disable-next-line no-console\n  console.error((err && err.stack) || err)\n}\n\nexport default ({\n  auto: defaultAuto = true,\n  onReportError = logError,\n} = {}) => ({\n  name: 'zorax.auto',\n\n  init: (t, { options: { auto = defaultAuto } }) => {\n    const report = t.report\n\n    let autoStart = auto\n\n    t.auto = (enable = autoStart) => {\n      autoStart = enable\n      return autoStart\n    }\n\n    t.report = (...args) => {\n      autoStart = false\n      return report.apply(t, args)\n    }\n\n    const maybeStart = () => {\n      if (autoStart) {\n        t.report().catch(onReportError)\n      }\n    }\n\n    setTimeout(maybeStart)\n  },\n})\n","const specFnRegexp = /zora_spec_fn/\n\nconst zoraInternal = /zora\\/dist\\/bundle/\n\nconst filterStackLine = l =>\n  (l && !zoraInternal.test(l) && !l.startsWith('Error')) || specFnRegexp.test(l)\n\nconst getAssertionLocation = err => {\n  const stack = (err.stack || '')\n    .split('\\n')\n    .map(l => l.trim())\n    .filter(filterStackLine)\n  const userLandIndex = stack.findIndex(l => specFnRegexp.test(l))\n  const stackline =\n    userLandIndex >= 1 ? stack[userLandIndex - 1] : stack[0] || 'N/A'\n  return stackline.replace(/^at|^@/, '')\n}\n\nconst wrapSpec = spec =>\n  async function zora_spec_fn(t, ...specRest) {\n    try {\n      return await spec(t, ...specRest)\n    } catch (error) {\n      if (error.fatal) {\n        throw error\n      }\n      const at = getAssertionLocation(error)\n      t.collect({\n        pass: false,\n        actual: error,\n        expected: 'no thrown error',\n        description: 'test should not throw',\n        operator: 'doesNotThrow',\n        get at() {\n          return at\n        },\n        set at(value) {},\n      })\n    }\n  }\n\nexport default () => ({\n  name: 'zorax.catch',\n  test: t => {\n    const { test } = t\n    t.test = async (title, spec, ..._) => test(title, wrapSpec(spec), ..._)\n  },\n})\n","export const isFunction = x => typeof x === 'function'\n\nexport const hasName = name => ({ name: x }) => x === name\n\nexport const noop = () => {}\n\nexport { inspect } from 'util'\n\nexport const Deferred = () => {\n  let resolve, reject\n  const promise = new Promise((_resolve, _reject) => {\n    resolve = _resolve\n    reject = _reject\n  })\n  return { promise, resolve, reject }\n}\n\n// fatal errors cause a bailout instead of reporting failure with zorax.catch\nexport class FatalError extends Error {\n  constructor(...args) {\n    super(...args)\n    this.fatal = true\n  }\n}\n","export const ZORAX_DEFER = 'zorax.defer'\nexport const ZORAX_DEFER_PRINT = 'zorax.defer.print'\nexport const ZORAX_GROUP = 'zorax.defer.group'\nexport const ZORAX_ONLY = 'zorax.defer.only'\nexport const ZORAX_MACRO = 'zorax.macro'\n","import { Deferred } from './_util'\n\nimport { ZORAX_DEFER as name } from './names.js'\n\n/**\n * zorax/defer\n */\n\nexport default () => ({\n  name,\n\n  init: (h, { plugins }) => {\n    const mainTest = h.test\n    const mainSkip = h.skip\n\n    let tests = []\n\n    let running = false\n    let reporting = false\n\n    const pushTest = spec => {\n      tests.push(spec)\n    }\n\n    const runTestInCtx = ({ test, skip }) => spec => {\n      const { args, resolve, reject, skip: skipped } = spec\n      const run = skipped ? skip : test\n      run(...args)\n        .then(resolve)\n        .catch(err => {\n          reject(err)\n          throw err\n        })\n    }\n\n    const deferPlugins = plugins.map(pg => pg.defer).filter(Boolean)\n\n    const addHooks = deferPlugins.map(defer => defer.add).filter(Boolean)\n\n    const runHooks = deferPlugins.map(defer => defer.run).filter(Boolean)\n\n    const _addTest = addHooks.reduce((push, hook) => hook(push, h), pushTest)\n\n    const runTestIn = runHooks.reduce((run, hook) => hook(run, h), runTestInCtx)\n\n    const addTest = (args, extra) => {\n      const deferred = Deferred()\n      deferred.args = args\n      _addTest(deferred)\n      Object.assign(deferred, extra)\n      return deferred.promise\n    }\n\n    // h.defer.runner(t)\n    //   => (spec => { /* run */ })\n    //\n    // Allows a plugin to run specs through the entire run pipeline, not just\n    // what's before them.\n    //\n    // This is necessary for a plugin that \"unfolds\" new test items (previous\n    // plugins won't have seen them, since they enter \"from the middle\").\n    //\n    // defer         A             B\n    //              if (...) <--- filter <----------------\n    //                |                                   |\n    //                |                  defer.runner(t)( o )\n    //                |                                   |\n    //               then --[o,o,o]-- unfold -- o,o, ----\n    //                |\n    //  run(o) <--- else    h.defer.runner(t)\n    //\n    h.defer = {\n      runner: runTestIn,\n    }\n\n    const flush = () => {\n      running = true\n      const runSpec = runTestIn({ test: mainTest, skip: mainSkip })\n      const currentTests = tests\n      tests = []\n      for (const spec of currentTests) {\n        runSpec(spec)\n      }\n      running = false\n    }\n\n    const deferTest = (args, tester = mainTest, extra) => {\n      // guard: is passthrough during reporting\n      if (running) {\n        return tester(...args)\n      }\n      // guard: can't add top level test during reporting\n      if (reporting) {\n        throw new Error('Cannot add test after reporting has started')\n      }\n      addTest(args, extra)\n    }\n\n    h.test = (...args) => deferTest(args)\n\n    h.skip = (...args) => deferTest(args, mainSkip, { skip: true })\n\n    const _report = h.report\n    h.report = async (...args) => {\n      reporting = true\n      flush()\n      const result = await _report.apply(h, args)\n      reporting = false\n      return result\n    }\n  },\n})\n","const pass = value => fn => fn(value)\n\nconst matcher = pattern => {\n  const patternLc = pattern.toLowerCase()\n  return x => x && x.toLowerCase().includes(patternLc)\n}\n\nconst notMatcher = pattern => {\n  const patternLc = pattern.toLowerCase()\n  return x => !(x && x.includes(patternLc))\n}\n\nconst createFilter = filter => {\n  if (filter == null) return null\n  if (Array.isArray(filter)) {\n    const include = []\n    const adds = []\n    const subs = []\n    filter.flat().forEach(pattern => {\n      const mod = pattern.slice(0, 1)\n      if (mod === '+') {\n        adds.push(matcher(pattern.slice(1)))\n      } else if (mod === '-') {\n        subs.push(matcher(pattern.slice(1)))\n      } else {\n        include.push(matcher(pattern))\n      }\n    })\n    return x => {\n      const passes = pass(x)\n      if (subs.length && subs.some(passes)) {\n        return false\n      }\n      if (adds.length && !adds.every(passes)) {\n        return false\n      }\n      if (include.length && !include.some(passes)) {\n        return false\n      }\n      return true\n    }\n  }\n  if (filter.slice(0, 1) === '!') {\n    const pattern = filter.slice(1)\n    return notMatcher(pattern)\n  }\n  const isMatch = matcher(filter)\n  // for debug\n  isMatch.input = filter\n  return isMatch\n}\n\nexport default () => {\n  let isMatch = null\n\n  return {\n    name: 'zorax.filter',\n\n    description: 'filter test by title',\n\n    harness(h, { options: { skip: useSkip = false } }) {\n      h.filter = filter => {\n        isMatch = createFilter(filter)\n      }\n\n      const { test, skip } = h\n      h.test = async (desc, ...args) => {\n        if (isMatch != null && !isMatch(desc)) {\n          if (useSkip) {\n            return skip(desc, ...args)\n          }\n          return\n        }\n        return test(desc, ...args)\n      }\n    },\n  }\n}\n","export const TITLE_ONLY = Symbol('TITLE_ONLY')\n","import { isFunction, hasName, FatalError } from './_util'\nimport { ZORAX_DEFER, ZORAX_GROUP as name } from './names'\nimport { TITLE_ONLY } from './defer.only.const'\n\n// reentry means passing tests that are unfolded \"from the middle\" of the run\n// pipeline through the entire pipeline; no reentry just pass to downstream\n// plugins\n//\n// reentry is the theoretically correct behaviour, I think... but no reentry is\n// more efficient for defer.only; hard choice!\n//\nconst REENTRY = false\n\nconst enforceNoAsync = result => {\n  if (result && isFunction(result.then) && isFunction(result.catch)) {\n    throw new Error('group / describe / it handlers cannot be async')\n  }\n}\n\nconst isEmpty = tests =>\n  tests.every(item => {\n    if (Array.isArray(item)) {\n      return isEmpty(item[1])\n    } else {\n      return false\n    }\n  })\n\nconst validateDependencies = ({ plugins }) => {\n  // require defer\n  const deferIndex = plugins.findIndex(hasName(ZORAX_DEFER))\n  if (deferIndex === -1) {\n    throw new Error(`${name} requires ${ZORAX_DEFER}`)\n  }\n  // must be after defer\n  const index = plugins.findIndex(hasName(name))\n  if (index < deferIndex) {\n    throw new Error(`${name} must be after ${ZORAX_DEFER}`)\n  }\n}\n\nexport default () => ({\n  name,\n\n  harness: validateDependencies,\n\n  defer: {\n    add: (_add, harness) => {\n      const stack = []\n      let cursor = null\n      let skipping = 0\n\n      const add = spec => {\n        spec.skip = skipping > 0\n        if (cursor) {\n          cursor.push(spec)\n        } else {\n          _add(spec)\n        }\n      }\n\n      const updateCursor = () => {\n        cursor = stack[stack.length - 1]\n      }\n\n      const push = (title, resolve) => {\n        const tests = []\n        tests.resolve = resolve\n        add([title, tests])\n        tests.title = title\n        stack.push(tests)\n        updateCursor()\n      }\n\n      const pop = () => {\n        const item = stack.pop()\n        if (item && item.resolve) {\n          item.resolve()\n        }\n        updateCursor()\n      }\n\n      const reset = () => {\n        while (stack.length > 0) {\n          pop()\n        }\n      }\n\n      let deep = 0\n\n      // NOTE callback is used internally for skipping\n      const group = (callback, title, handler) => {\n        // enable: group(() => { ... })\n        if (typeof title === 'function') {\n          enforceNoAsync(title())\n          if (callback) callback()\n          return\n        }\n        // enable: group.only() -- top level\n        if (title === TITLE_ONLY) {\n          title = cursor.title + ' <<< ONLY'\n        }\n        if (handler) {\n          deep++\n          push(title, callback)\n          enforceNoAsync(handler())\n          pop()\n          deep--\n        } else {\n          if (deep > 0) {\n            throw new FatalError(\n              \"group('...') with no handler is only allowed at top level\"\n            )\n          }\n          reset()\n          push(title, callback)\n        }\n      }\n\n      const skip = (callback, ...args) => {\n        // enable: group.skip(() => { ... })\n        if (typeof args[0] !== 'string') {\n          return\n        }\n        skipping++\n        return group(() => {\n          if (callback) callback()\n          skipping--\n        }, ...args)\n      }\n\n      harness.group = (title, handler) => group(null, title, handler)\n\n      harness.group.skip = (title, handler) => skip(null, title, handler)\n\n      // used by defer.only\n      harness.group.callback = group\n      harness.group.skip.callback = skip\n\n      return add\n    },\n\n    run: (prev, h) => {\n      const makeRunWithGroup = t => {\n        const runSpec = prev(t)\n\n        return spec => {\n          if (!Array.isArray(spec)) {\n            return runSpec(spec)\n          }\n\n          const [title, subTests] = spec\n\n          // guard: no sub tests -> do not create an empty t.test\n          if (isEmpty(subTests)) return false\n\n          const handler = tt => {\n            const runner = REENTRY ? h.defer.runner : makeRunWithGroup\n            tt.offset = (t.offset || 0) + 1\n            subTests.forEach(runner(tt))\n          }\n\n          return runSpec({\n            args: [title, handler],\n            skip: spec.skip,\n            group: true,\n          })\n        }\n      }\n      return makeRunWithGroup\n    },\n  },\n})\n","/**\n * zorax/macro\n */\nimport { ZORAX_MACRO as name } from './names.js'\n\nconst wrap = tester => {\n  return (...args) => {\n    const providedTitle =\n      typeof args[0] === 'string' || !args[0] ? args.shift() : undefined\n\n    const [run, ...data] = args\n\n    // case: t.skip('no spec function!')\n    if (args.length < 1) {\n      return tester(providedTitle)\n    }\n\n    const title = run.title\n      ? typeof run.title === 'string'\n        ? run.title\n        : run.title(providedTitle, ...data)\n      : providedTitle\n\n    const zora_spec_fn = t => run(t, ...data)\n\n    return tester(title, zora_spec_fn)\n  }\n}\n\nexport default () => ({\n  name,\n\n  test: t => {\n    const { test, skip, only } = t\n\n    t.test = wrap(test)\n\n    t.skip = wrap(skip)\n\n    t.only = wrap(only)\n  },\n})\n","import { hasName, FatalError } from './_util'\nimport { ZORAX_DEFER, ZORAX_GROUP, ZORAX_ONLY as name } from './names'\nimport { TITLE_ONLY } from './defer.only.const'\n\nconst removeNonOnlySubs = (() => {\n  const hasOnly = sub => sub.only\n\n  const removeNonOnlySubsFilter = sub =>\n    Array.isArray(sub) ? removeNonOnlySubs(sub) : hasOnly(sub)\n\n  const ONLY_SUBS_FILTERED = Symbol('ONLY_SUBS_FILTERED')\n\n  const removeNonOnlySubs = spec => {\n    if (spec[ONLY_SUBS_FILTERED]) {\n      return spec[1].length > 0\n    }\n\n    const filteredSubs = spec[1].filter(removeNonOnlySubsFilter)\n\n    spec[ONLY_SUBS_FILTERED] = true\n    Object.freeze(filteredSubs)\n\n    spec[1] = filteredSubs\n\n    return filteredSubs.length > 0\n  }\n\n  return removeNonOnlySubs\n})()\n\nconst wrapRun = (run, args, callback) => {\n  if (run.callback) {\n    return run.callback(callback, ...args)\n  } else {\n    const result = run(...args)\n    callback()\n    return result\n  }\n}\n\nconst validateDeps = ({ plugins }) => {\n  // require zorax.defer\n  const deferIndex = plugins.findIndex(hasName(ZORAX_DEFER))\n  if (deferIndex === -1) {\n    throw new Error(`${name} requires ${ZORAX_DEFER}`)\n  }\n  // must be after zorax.defer\n  const index = plugins.findIndex(hasName(name))\n  if (index < deferIndex) {\n    throw new Error(`${name} must be after ${ZORAX_DEFER}`)\n  }\n  // must be after zorax.group, if zorax.group is present\n  const groupIndex = plugins.findIndex(hasName(ZORAX_GROUP))\n  if (index < groupIndex) {\n    throw new Error(`${name} must be after ${ZORAX_GROUP}`)\n  }\n}\n\nexport default () => {\n  let hasOnly = false\n  let running = false\n\n  let only = 0\n\n  const makeOnly = (run, h) => (title, ...args) => {\n    if (running) {\n      throw new FatalError('defer.only: only can only be called synchronously')\n    }\n    // NOTE late resolution of options.only to enable on the fly change\n    if (!h.options.only) {\n      throw new FatalError(\n        'defer.only: only is only authorized when passing the only flag'\n      )\n    }\n    only++\n    return wrapRun(run, [title || TITLE_ONLY, ...args], () => {\n      only--\n    })\n  }\n\n  return {\n    name,\n\n    defer: {\n      add: _add => spec => {\n        _add(spec)\n\n        spec.only = !spec.skip && only > 0\n\n        if (spec.only) hasOnly = true\n      },\n\n      run: prev => t => {\n        const runTest = prev(t)\n\n        if (!hasOnly) {\n          return runTest\n        }\n\n        return spec => {\n          if (spec.only === false) {\n            spec.skip = true\n            return false\n          }\n\n          // prevent groups that are emptied by only to appear non empty\n          if (Array.isArray(spec)) {\n            // NOTE mutating spec because not sure what prop (e.g. .skip,\n            // .resolve) it might have\n            const empty = !removeNonOnlySubs(spec)\n            if (empty) {\n              return false\n            }\n          }\n\n          return runTest(spec)\n        }\n      },\n    },\n\n    test(t) {\n      t.only = () => {\n        throw new FatalError(\n          'defer.only: only is only available for root tests'\n        )\n      }\n    },\n\n    harness(t, h) {\n      validateDeps(t)\n      const { test } = t\n      t.only = makeOnly(test, h)\n    },\n\n    decorateHarness(t, h) {\n      const { group } = t\n      if (group) {\n        t.group.only = makeOnly(group, h)\n      }\n    },\n\n    init(h) {\n      const { report } = h\n      h.report = async (...args) => {\n        running = true\n        const result = await report.call(h, ...args)\n        running = false\n        return result\n      }\n    },\n  }\n}\n","import { hasName, FatalError } from './_util'\nimport { ZORAX_DEFER, ZORAX_DEFER_PRINT as name } from './names'\n\n// https://stackoverflow.com/a/41407246/1387519\nconst bold = '\\x1b[1m'\nconst reset = '\\x1b[0m'\nconst cyan = '\\x1b[36m'\nconst magenta = '\\x1b[35m'\n// const blue = '\\x1b[34m'\n\nconst write = console.log.bind(console)\n\nconst printer = handler => ({\n  compact: initialCompact = false,\n  indent: customIndent,\n} = {}) => {\n  let maxEmpties\n  let indentString = customIndent\n  let compact\n\n  const setCompact = _compact => {\n    compact = _compact\n    maxEmpties = compact ? 0 : 1\n    if (!customIndent) {\n      indentString = compact ? '  ' : '    '\n    }\n  }\n\n  setCompact(initialCompact)\n\n  let lastEmpties = 0\n\n  const _log = (_indent, color, prefix, ...args) => {\n    const value = args.join(' ')\n\n    const empty = value === ''\n    if (empty) {\n      if (lastEmpties < maxEmpties) {\n        lastEmpties++\n        return write()\n      }\n      return\n    }\n    lastEmpties = 0\n\n    const indent = indentString.repeat(_indent)\n    const formatted = indent + value\n    return color\n      ? write(`%s${color}%s\\x1b[0m`, indent + prefix + ' ', value)\n      : write(formatted)\n  }\n\n  let testCount = 0\n  let groupCount = 0\n\n  const logTest = (offset, title, isGroup) => {\n    if (isGroup) {\n      groupCount++\n      _log()\n    } else {\n      testCount++\n    }\n    _log(offset, isGroup ? bold + magenta : cyan, isGroup ? '▹' : '•', title)\n    if (isGroup) {\n      _log()\n    }\n  }\n\n  let enabled = false\n\n  const isEnabled = () => enabled\n\n  const { init, ...props } = handler({ isEnabled, logTest })\n\n  return {\n    init(h) {\n      const {\n        report,\n        options: { printCompact = compact },\n      } = h\n\n      setCompact(printCompact)\n\n      h.print = arg => {\n        if (arg) {\n          enabled = true\n          if (arg.hasOwnProperty('compact')) {\n            setCompact(arg.compact)\n          }\n        } else {\n          enabled = false\n        }\n      }\n\n      const plural = x => (x === 1 ? '' : 's')\n\n      h.report = async (...args) => {\n        if (enabled) {\n          const space = compact ? '' : '\\n'\n          write(\n            space +\n              `${bold + cyan + testCount} test${plural(testCount)} ${reset}` +\n              `${magenta}(${groupCount} group${plural(groupCount)})${reset}` +\n              space\n          )\n          testCount = groupCount = 0\n          return { skip: true }\n        }\n        return report(...args)\n      }\n\n      if (init) {\n        init(h)\n      }\n    },\n\n    ...props,\n  }\n}\n\nconst validateDeps = ({ plugins }) => {\n  // require zorax.defer\n  const deferIndex = plugins.findIndex(hasName(ZORAX_DEFER))\n  if (deferIndex === -1) {\n    throw new FatalError(`${name} requires ${ZORAX_DEFER}`)\n  }\n  // must be before zorax.defer\n  const index = plugins.findIndex(hasName(name))\n  if (index > deferIndex) {\n    throw new FatalError(`${name} must be before ${ZORAX_DEFER}`)\n  }\n}\n\nexport default printer(({ isEnabled, logTest }) => ({\n  name: 'zorax.defer.print',\n\n  description: \"print tests' title instead of running them\",\n\n  init: validateDeps,\n\n  defer: {\n    run: prev => t => {\n      const runSpec = prev(t)\n      if (!isEnabled()) {\n        return runSpec\n      }\n      return spec => {\n        const offset = t.offset\n        const title = spec.args && spec.args[0]\n        const isGroup = spec.group === true\n\n        logTest(offset, title, isGroup)\n\n        return isGroup ? runSpec(spec) : runSpec({ ...spec, skip: true })\n      }\n    },\n  },\n}))\n","/**\n * zorax/pass\n */\n\nexport default () => ({\n  name: 'zorax.pass',\n  test: t => {\n    t.pass = (msg = 'pass called') => t.ok(true, msg)\n  },\n})\n","import { mochaTapLike, tapeTapLike } from 'zora'\n\nexport default (\n  defaultNoIndentReporter,\n  defaultIndentReporter = defaultNoIndentReporter\n) => ({\n  name: 'zorax.reporter',\n\n  init: (t, { options: { reporter: optionsReporter, indent = false } }) => {\n    const report = t.report\n\n    const defaultReporter = optionsReporter\n      ? optionsReporter\n      : indent\n      ? defaultIndentReporter || mochaTapLike\n      : defaultNoIndentReporter || tapeTapLike\n\n    t.report = (reporter = defaultReporter, ...args) =>\n      report.call(t, reporter, ...args)\n  },\n})\n","import { noop, inspect } from './_util.js'\n\nconst times = n => `${n} ${n === 1 ? 'time' : 'times'}`\n\nconst passed = { pass: true }\n\nconst failed = {\n  pass: false,\n  with: () => failed,\n  returned: () => failed,\n}\n\nconst fastFormat = value =>\n  inspect(value, {\n    depth: 1,\n    maxArrayLength: 3,\n    breakLength: Infinity,\n  })\n\nconst formatArgs = value => `(${value.map(fastFormat).join(', ')})`\n\nconst spacedIf = name => name && `${name.trim()} `\n\nexport const ordinal = i => {\n  const x = String(i + 1)\n  switch (x) {\n    case '1':\n      return '1st'\n    case '2':\n      return '2nd'\n    case '3':\n      return '3rd'\n    default:\n      return `${x}th`\n  }\n}\n\nconst createSpyFactory = t => (spyName, fn = noop) => {\n  if (typeof spyName !== 'string') {\n    fn = spyName || noop\n    spyName = fn.name || ''\n  }\n  const calls = []\n  const _args = []\n  const returns = []\n  const nextCallListeners = []\n\n  const spacedSpyName = spacedIf(spyName)\n\n  const spied = function zora_spec_fn(...args) {\n    const result = fn.apply(this, args)\n    const call = [args, result]\n    spied[calls.length] = call\n    calls.push(call)\n    _args.push(args)\n    returns.push(result)\n    flushNextCall()\n    return result\n  }\n\n  // useful for debug\n  spied.fn = fn\n\n  Object.assign(spied, { calls, args: _args, returns })\n\n  const beenCalledWith = (args, api = passed) => {\n    const { pass } = t.eq(\n      _args,\n      args,\n      `${spacedSpyName}should have been called with ${args\n        .map(formatArgs)\n        .join(' then ')}`\n    )\n    return pass ? api : failed\n  }\n\n  const hasReturned = (results, api = passed) => {\n    const { pass } = t.eq(\n      returns,\n      results,\n      `${spacedSpyName}should have returned ${results\n        .map(fastFormat)\n        .join(' then ')}`\n    )\n    return pass ? api : failed\n  }\n\n  spied.hasBeenCalled = (...args) => {\n    if (Array.isArray(args[0])) {\n      t.eq(\n        calls,\n        args,\n        `${spacedSpyName}should have been called with ${formatArgs(args)}`\n      )\n    } else {\n      const [\n        n,\n        msg = `${spacedSpyName}should have been called ${times(n)}`,\n      ] = args\n      t.eq(calls.length, n, msg)\n    }\n    const api = {\n      with: (...args) => beenCalledWith(args, api),\n      returned: (...results) => hasReturned(results, api),\n    }\n    return api\n  }\n\n  const calledWith = (i, args, api = passed, name = spyName) => {\n    const { pass } = t.eq(\n      _args[i],\n      args,\n      `${spacedIf(name)}should be called ${ordinal(i)} with ${formatArgs(args)}`\n    )\n    return pass ? api : failed\n  }\n\n  const returned = (i, result, api = passed, name = spyName) => {\n    const { pass } = t.eq(\n      returns[i],\n      result,\n      `${spacedIf(name)}${ordinal(i)} call should return ${fastFormat(result)}`\n    )\n    return pass ? api : failed\n  }\n\n  let cur = 0\n\n  spied.wasCalled = (...params) => {\n    const [index, args, result] = params\n    const hasResult = params.length > 2\n    const n = calls.length\n    let i = index\n    const hasName = typeof i === 'string'\n    const name = hasName ? i + ' ' : spyName\n    let r = { pass: true }\n    if (i == null || hasName) {\n      i = cur++\n      const msg =\n        n > i\n          ? `${spacedIf(name)}was called ${times(cur)} before expected`\n          : `${spacedIf(name)}should have been called ${times(i + 1)}`\n      r = t.eq(n, i + 1, msg)\n    } else {\n      r = t.ok(n > i, `should be called at least ${times(i + 1)}`)\n    }\n    if (r.pass && args) {\n      r = calledWith(i, args)\n    }\n    if (r.pass && hasResult) {\n      r = returned(i, result)\n    }\n    if (!r.pass) {\n      return failed\n    }\n    const api = {\n      with: (...args) => calledWith(i, args, api, name),\n      returned: result => returned(i, result, api, name),\n    }\n    return api\n  }\n\n  spied.wasNotCalled = msg => {\n    t.ok(\n      calls.length === cur,\n      msg || `${spacedSpyName}should not have been called`\n    )\n  }\n\n  spied.wasCalledWith = (...args) => spied.wasCalled().with(...args)\n\n  spied.returned = result => spied.wasCalled().returned(result)\n\n  // === modifiers ===\n\n  // --- .just. ---\n\n  spied.just = {\n    wasCalled: (...args) => {\n      if (args.length > 0) {\n        throw new Error('just.wasCalled is only allowed with zero arguments')\n      }\n      cur = calls.length - 1\n      return spied.wasCalled()\n    },\n    wasCalledWith: (...args) => spied.just.wasCalled().with(...args),\n    returned: (...args) => spied.just.wasCalled().returned(...args),\n  }\n\n  // --- quantifier: spy.o.o.x ---\n\n  const X = i => ({\n    wasCalledWith: (...args) => spied.wasCalled(i).with(...args),\n    returned: result => spied.wasCalled(i).returned(result),\n  })\n\n  spied.x = X(0)\n\n  Object.defineProperty(spied, 'o', {\n    get() {\n      let i = 1\n      const o = {\n        get o() {\n          i++\n          return o\n        },\n        get x() {\n          return X(i)\n        },\n      }\n      return o\n    },\n  })\n\n  // --- .first ---\n\n  spied.first = X(0)\n\n  // --- .last ---\n\n  spied.last = {\n    wasCalledWith: (...args) => spied.wasCalled(calls.length - 1).with(...args),\n    returned: (...args) => spied.wasCalled(calls.length - 1).returned(...args),\n  }\n\n  // --- .nextCall() ---\n\n  spied.nextCall = () =>\n    new Promise(resolve => {\n      nextCallListeners.push(resolve)\n    })\n\n  spied.nextCallAfter = async op => {\n    const called = spied.nextCall()\n    await op()\n    await called\n  }\n\n  const flushNextCall = () => {\n    const flushed = nextCallListeners.splice(0)\n    setTimeout(() => {\n      for (const fn of flushed) {\n        fn()\n      }\n    })\n  }\n\n  return spied\n}\n\nconst spiesTrap = (t, o) => prop => {\n  o[prop] = (...args) => (o[prop] = t.spy(...args))\n}\n\nconst createSpiesFactory = t => (...names) => {\n  const spies = {}\n  const trap = spiesTrap(t, spies)\n  if (names.length > 0) {\n    names.forEach(trap)\n    return spies\n  }\n  return new Proxy(spies, {\n    get(target, prop) {\n      if (!target.hasOwnProperty(prop)) {\n        trap(prop)\n      }\n      return target[prop]\n    },\n  })\n}\n\nexport default () => ({\n  name: 'zorax.spy',\n  test(t) {\n    t.spy = createSpyFactory(t)\n    t.spies = createSpiesFactory(t)\n  },\n})\n","/**\n * zorax.todo\n *\n * TODO\n */\n\nexport default () => ({\n  name: 'zorax.todo',\n  decorate: t => {\n    t.test.todo = title => t.skip(title)\n  },\n})\n","import { createHarnessFactory } from '@zorax/plug'\n\nimport withAliases from './alias'\nimport withAuto from './auto'\nimport withCatch from './catch'\nimport withDefer from './defer'\nimport withFilter from './filter'\nimport withGroup from './defer.group'\nimport withMacro from './macro'\nimport withOnly from './defer.only'\nimport withPrint from './defer.print'\nimport withPass from './pass'\nimport withReporter from './reporter'\nimport withSpy from './spy'\nimport withTodo from './todo'\n\nexport default createHarnessFactory([\n  withReporter(),\n\n  withAuto({ auto: true }),\n\n  withCatch(),\n\n  withPrint(),\n\n  withDefer(),\n  withGroup(),\n  withOnly(),\n\n  withPass(),\n  withTodo(),\n  withSpy(),\n\n  withFilter(),\n\n  withMacro(),\n\n  withAliases({\n    group: 'describe',\n    only: 'test.only',\n    skip: 'test.skip',\n  }),\n])\n","import createDefaultHarness from './zorax.defaults'\n\nexport const harness = createDefaultHarness()\n\n// export const createHarness = (...args) => {\n//   harness.auto(false)\n//   return createDefaultHarness(...args)\n// }\n//\n\nexport const { test, group, describe, plug } = harness\n"]}