{"version":3,"file":"watch.d.ts","sourceRoot":"","sources":["../../src/watch.ts"],"names":[],"mappings":"AAIA,OAAO,EAAS,eAAe,EAAE,MAAM,UAAU,CAAA;AAmBjD,eAAO,MAAM,OAAO,EAAE,eAWrB,CAAA;AAED,eAAO,MAAM,KAAK,QAAgC,CAAA;AAClD,eAAO,MAAM,KAAK,QAAgC,CAAA;AAClD,eAAO,MAAM,GAAG,QAAmB,CAAA;AACnC,eAAO,MAAM,MAAM,QAA4B,CAAA;AAC/C,eAAO,MAAM,OAAO,UAAgB,CAAA;AACpC,eAAO,MAAM,GAAG,QAAwD,CAAA;;AAExE,wBA8CC","sourcesContent":["// any time the root package.json or any typescript files in src\n// are changed/added/removed, run the build\nimport chalk from 'chalk'\nimport { spawn } from 'child_process'\nimport { watch, ChokidarOptions } from 'chokidar'\nimport { readFileSync } from 'fs'\nimport { resolve, sep } from 'path'\nimport { fileURLToPath } from 'url'\nimport * as tshyConsole from './console.js'\n\nconst pjData = (): string => {\n  try {\n    return JSON.stringify(\n      JSON.parse(readFileSync('./package.json', 'utf8')),\n    )\n    /* c8 ignore start */\n  } catch {\n    return 'null'\n  }\n  /* c8 ignore stop */\n}\nlet lastPJData: string = 'null'\n\nexport const options: ChokidarOptions = {\n  persistent: true,\n  ignoreInitial: true,\n  ignorePermissionErrors: true,\n  ignored: path => {\n    const r = resolve(path)\n    if (r === srcPJ) return true\n    if (r === srcNM) return true\n    if (r.startsWith(srcNM + sep)) return true\n    return false\n  },\n}\n\nexport const srcPJ = resolve('./src/package.json')\nexport const srcNM = resolve('./src/node_modules')\nexport const src = resolve('./src')\nexport const rootPJ = resolve('./package.json')\nexport const targets = [src, rootPJ]\nexport const bin = fileURLToPath(new URL('./index.js', import.meta.url))\n\nexport default () => {\n  let building = false\n  let needRebuild = false\n  const watcher = watch(targets, options)\n  const build = () => {\n    building = true\n    needRebuild = false\n    const child = spawn(process.execPath, [bin], { stdio: 'inherit' })\n    child.on('close', (code, signal) => {\n      if (code || signal) {\n        tshyConsole.error(chalk.red('build failure'), {\n          code,\n          signal,\n        })\n        tshyConsole.print()\n      } else {\n        console.log(chalk.green('build success'), { code, signal })\n      }\n      if (needRebuild) build()\n      else building = false\n    })\n  }\n  watcher.on('all', (ev, path) => {\n    // prevent infinite looping on the src dir in liveDev mode\n    if (ev === 'addDir' && path === src) {\n      return\n    }\n\n    const r = resolve(path)\n    if (r === srcPJ) return\n    if (r === rootPJ) {\n      // check if the data actually changed\n      const newData = pjData()\n      /* c8 ignore next */\n      if (newData === lastPJData) return\n      lastPJData = newData\n    }\n    if (building) {\n      if (r !== rootPJ) needRebuild = true\n      return\n    }\n    tshyConsole.debug(chalk.cyan.dim(ev), path)\n    build()\n  })\n  lastPJData = pjData()\n  build()\n}\n"]}