{"version":3,"sources":["jsdelivr-header.js","/npm/create-mockjs-server@1.0.0/index.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA,ACNA,MAAM,KAAO,QAAQ,QACf,KAAO,QAAQ,QACf,GAAK,QAAQ,MAEnB,SAAS,cACP,IAAI,EAAa,QAAQ,MAAM,oBAC/B,IAAK,IAAI,KAAW,EAElB,IADA,IAAI,EAAQ,EAAW,GACd,EAAI,EAAG,EAAI,EAAM,OAAQ,IAAK,CACrC,IAAI,EAAQ,EAAM,GAClB,GAAqB,SAAjB,EAAM,QAAuC,cAAlB,EAAM,UAA4B,EAAM,SACrE,OAAO,EAAM,OAEjB,CAGF,MAAO,EACT,CAEA,OAAO,QAAU,SAA0B,EAAK,EAAM,GAOpD,SAAS,EAAe,GACtB,MAAM,EAAM,KAAK,QAAQ,GAKzB,MAJc,CACZ,KAAM,EAAS,QAAQ,EAAK,IAC5B,SAAU,KAAK,KAAK,QAAQ,MAAO,EAAK,GAG5C,CAbI,IACF,QAAQ,MAAQ,GAGlB,EAAO,GAAQ,IAWf,MAAM,EAAO,CAAC,EACd,IAAI,EAAc,KAsBlB,MAAM,EAAa,KAAK,cAAa,CAAC,EAAK,KACzC,IACE,MAAM,IACJ,GACE,EAEE,EADM,QAAQ,OAAO,MAAM,GACZ,SAGrB,GAAI,EAAS,WAAW,SAAU,CAChC,MAAM,EAAQ,EAAS,QAAQ,QAAS,IAClC,EAAW,EAAM,QAAQ,mBAAoB,MAC7C,EAAO,EAAK,EAAS,QAAQ,KAAM,EAAS,OAAO,GAAG,gBAAgB,GACxE,EAAI,QAAQ,QACd,EAAI,UAAU,8BAA+B,EAAI,QAAQ,QAE3D,EAAI,UAAU,oCAAoC,GAClD,EAAI,UAAU,+BAAgC,sBAE9C,EAAI,UAAU,eAAgB,kCAC9B,EAAI,IAAI,KAAK,UAAU,GACzB,CAEF,CAAE,MAAO,GACP,QAAQ,MAAM,EAChB,KAGF,EAAW,GAAG,SAAS,IACrB,QAAQ,MAAM,GAGG,eAAb,EAAI,OACN,QAAQ,IAAI,mBACZ,YAAW,KACT,EAAW,QACX,IACA,EAAW,OAAO,EAAM,UAAU,GACjC,KACL,IA4CF,OAjBA,EAAW,OAAO,EAAM,WAxBC,KACvB,MAAM,EAAU,EAAW,UAC3B,QAAQ,IAAI,iCAAiC,EAAQ,WAAW,EAAQ,QACxE,QAAQ,IAAI,mCAAmC,iBAAiB,EAAQ,QACxE,MAAM,EAAW,KAAK,KAAK,QAAQ,MAAO,GAlE5C,IAAmB,EAoEjB,GAAG,QAAQ,GAAU,CAAC,EAAK,KACrB,EACF,QAAQ,MAAM,IAIhB,QAAQ,IAAI,QAAS,GAErB,EAAM,SAAQ,IACZ,MAAM,EAAQ,EAAe,GACvB,EAAW,KAAK,KAAK,QAAQ,MAAO,EAAK,GAC/C,EAAK,EAAM,MAAQ,QAAQ,EAAQ,IACpC,IAhFc,EAmFO,EAAxB,EAlFO,GAAG,MAAM,GAAM,CAAC,EAAW,KAKhC,GAJA,QAAQ,IAAI,8BAA+B,EAAW,GAIlD,EAAU,CACZ,MAAM,EAAQ,EAAe,UACtB,QAAQ,MAAM,EAAM,UAEvB,GAAG,WAAW,EAAM,UACtB,EAAK,EAAM,MAAQ,QAAQ,EAAM,iBAE1B,EAAK,EAAM,KAEtB,IAoE8B,IAMlC,QAAQ,GAAG,QAAS,IAClB,QAAQ,IAAI,QAAQ,KAChB,GACF,EAAY,OACd,IAGF,QAAQ,GAAG,cAAe,IACxB,QAAQ,IAAI,mBAAmB,KAC3B,GACF,EAAY,OACd,IAGK,CACT","file":"/npm/create-mockjs-server@1.0.0/index.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/create-mockjs-server@1.0.0/index.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","const http = require('http')\nconst path = require('path')\nconst fs = require('fs')\n\nfunction getIPAdress() {\n  var interfaces = require('os').networkInterfaces();\n  for (var devName in interfaces) {\n    var iface = interfaces[devName];\n    for (var i = 0; i < iface.length; i++) {\n      var alias = iface[i];\n      if (alias.family === 'IPv4' && alias.address !== '127.0.0.1' && !alias.internal) {\n        return alias.address;\n      }\n    }\n  }\n\n  return ''\n}\n\nmodule.exports = function createMockServer(dir, PORT, title) {\n  if (title) {\n    process.title = title\n  }\n\n  PORT = PORT || 3000\n\n  function parseFileModel(filename) {\n    const ext = path.extname(filename)\n    const model = {\n      name: filename.replace(ext, ''),\n      filename: path.join(process.cwd(), dir, filename)\n    }\n    return model\n  }\n\n  const apis = {}\n  let fileWatcher = null\n\n  function watchFile(file) {\n    return fs.watch(file, (eventType, filename) => {\n      console.log('eventType: %s, filename: %s', eventType, filename)\n      // 新建文件test.js eventType: rename, filename: test.js\n      // 重命名文件 test.js为 docs.js eventType: rename, filename: docs.js\n      // 修改文件test.js eventType: change, filename: test.js\n      if (filename) {\n        const model = parseFileModel(filename)\n        delete require.cache[model.filename]\n        // fix 190401 文件重命名要检查文件是否存在\n        if (fs.existsSync(model.filename)) {\n          apis[model.name] = require(model.filename)\n        } else {\n          delete apis[model.name]\n        }\n      }\n      // console.log('apis: %j', apis)\n    })\n  }\n\n  const mockServer = http.createServer((req, res) => {\n    try {\n      const {\n        url\n      } = req\n      const Url = require('url').parse(url)\n      const pathname = Url.pathname\n\n      // mock\n      if (pathname.startsWith('/mock')) {\n        const _path = pathname.replace('/mock', '')\n        const segment0 = _path.replace(/\\/(\\w+)([\\/\\w]*)/, \"$1\")\n        const json = apis[segment0.replace(/\\w/, segment0.charAt(0).toLowerCase())][_path]\n        if (req.headers.origin) {\n          res.setHeader('Access-Control-Allow-Origin', req.headers.origin)\n        }\n        res.setHeader('Access-Control-Allow-Credentials', true)\n        res.setHeader('Access-Control-Allow-Headers', 'token,content-type')\n        // 默认json utf-8\n        res.setHeader('content-type', 'application/json;charset=UTF-8')\n        res.end(JSON.stringify(json))\n      }\n      \n    } catch (error) {\n      console.error(error)\n    }\n  })\n\n  mockServer.on('error', err => {\n    console.error(err)\n\n    // 端口被占用\n    if (err.code === 'EADDRINUSE') {\n      console.log('端口被占用, 自动重试中...');\n      setTimeout(() => {\n        mockServer.close();\n        PORT++\n        mockServer.listen(PORT, '0.0.0.0');\n      }, 1000);\n    }\n  })\n\n  const listenerCallback = () => {\n    const address = mockServer.address()\n    console.log(`local server listening http://${address.address}:${address.port}`)\n    console.log(`network server listening http://${getIPAdress()}:${address.port}`)\n    const mockPath = path.join(process.cwd(), dir)\n\n    fs.readdir(mockPath, (err, files) => {\n      if (err) {\n        console.error(err)\n        return\n      }\n\n      console.log('files', files)\n\n      files.forEach(file => {\n        const model = parseFileModel(file)\n        const filePath = path.join(process.cwd(), dir, file)\n        apis[model.name] = require(filePath)\n      })\n    })\n\n    fileWatcher = watchFile(mockPath)\n  }\n\n  mockServer.listen(PORT, '0.0.0.0', listenerCallback)\n\n  // 进程退出前关闭文件watch\n  process.on('exit', (code) => {\n    console.log(`退出码: ${code}`);\n    if (fileWatcher) {\n      fileWatcher.close()\n    }\n  });\n\n  process.on('beforeExit', (code) => {\n    console.log(`beforeExit 退出码: ${code}`);\n    if (fileWatcher) {\n      fileWatcher.close()\n    }\n  });\n\n  return mockServer\n}"]}