{"version":3,"sources":["jsdelivr-header.js","/npm/z-http-router@3.0.2/index.ts"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA,+WCLA,MAAA,KAAA,QAAA,MACA,OAAA,QAAA,QACA,KAAA,QAAA,cAUA,MAAA,OAIE,WAAA,GAYA,KAAA,QAAY,GACH,IAAI,SAAS,CAAE,EAAS,KAC7B,IAAI,OAAE,GAAW,EAOjB,SAN2C,IAAtC,KAAK,OAAO,EAAO,qBAGkC,IAAhD,KAAK,OAAO,EAAO,eAAe,EAAI,SAF9C,EAAS,YAK0C,IAAhD,KAAK,OAAO,EAAO,eAAe,EAAI,MAAsB,CAC/D,IAAI,GAAW,EAkBf,OAjBA,OAAO,KAAM,KAAK,cACf,SAAS,IACR,GAA+B,IAA1B,EAAI,KAAK,QAAS,GAAY,CACjC,GAAW,EACX,MAAM,EAAI,EAAI,KAAK,QAAS,EAAG,IACzB,EAAK,KAAK,aAAa,GAC7B,KAAA,SAAU,OAAA,KAAM,EAAI,GAAK,SAAS,CAAE,EAAK,KAClC,EAAQ,EAAQ,IACrB,EAAI,IAAI,UAAW,IAAK,CAAE,eAAgB,KAAK,YAAa,OAAA,QAAS,OAAA,KAAM,EAAI,MAAW,6BAC1F,EAAI,IAAI,IAAK,GACb,EAAS,GAAK,GAElB,UAEE,GACJ,EAAQ,IAAI,MAAO,QAGvB,CACA,KAAK,OAAO,EAAO,eAAe,EAAI,MAAO,GAC1C,KAAM,GACN,MAAO,EAAQ,IAGtB,KAAA,aAAe,CAAQ,EAAY,IAA+B,UAAA,UAAA,sBAChE,EAAI,OAAQ,SAAU,EAAI,UACrB,KAAK,OAAO,eAAgB,EAAI,SAAc,EAAI,KAAM,KAAK,OAAO,EAAI,UACtE,EAAI,KAAM,wBACnB,IAlDE,KAAK,OAAS,CACZ,IAAK,GACL,KAAM,GACN,IAAK,IAEP,KAAK,aAAe,GACpB,KAAK,OAAS,CACZ,IAAO,iBACP,IAAO,wBAEX,CAyCA,GAAA,CAAK,EAAc,GAEjB,OADA,KAAK,OAAO,IAAI,GAAQ,EACjB,IACT,CACA,IAAA,CAAM,EAAc,GAElB,OADA,KAAK,OAAO,KAAK,GAAQ,EAClB,IACT,CACA,GAAA,CAAK,EAAc,GAEjB,OADA,KAAK,OAAO,IAAI,GAAQ,EACjB,IACT,CACA,GAAA,CAAK,EAAgB,EAAc,GAEjC,OADA,KAAK,OAAO,EAAO,eAAe,GAAQ,EACnC,IACT,CACA,MAAA,CAAQ,EAAoB,GAE1B,OADA,KAAK,aAAa,GAAW,OAAA,QAAS,GAC/B,IACT,EA3EF,QAAA","file":"/npm/z-http-router@3.0.2/index.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/z-http-router@3.0.2/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","﻿import * as zServer from 'z-http-server'\r\nimport { readFile } from 'fs'\r\nimport { join, resolve, extname } from 'path'\r\nimport * as mime from 'mime-types'\r\n\r\nexport interface Routes {\r\n  get: Object\r\n  post: Object\r\n  all: Object\r\n}\r\n\r\nexport type Method = 'get' | 'GET' | 'post' | 'POST' | 'all' | 'ALL'\r\n\r\nexport class Router {\r\n  public routes: Routes\r\n  public staticRoutes: Object\r\n  public errors: Object\r\n  constructor() {\r\n    this.routes = {\r\n      get: {},\r\n      post: {},\r\n      all: {}\r\n    }\r\n    this.staticRoutes = {}\r\n    this.errors = {\r\n      '404': 'Page not found',\r\n      '500': 'An error has occurred'\r\n    }\r\n  }\r\n  handler = ( ctx: zServer.ServerContext ): Promise<zServer.ServerContext> => {\r\n    return new Promise( ( resolve, reject ) => {\r\n      let { method } = ctx\r\n      if ( this.routes[method.toLowerCase()] === undefined ) {\r\n        method = 'all'\r\n      }\r\n      else if ( this.routes[method.toLowerCase()][ctx.path] === undefined ) {\r\n        method = 'all'\r\n      }\r\n      if ( this.routes[method.toLowerCase()][ctx.path] === undefined ) {\r\n        let isStatic = false\r\n        Object.keys( this.staticRoutes )\r\n          .forEach( r => {\r\n            if ( ctx.path.indexOf( r ) === 0 ) {\r\n              isStatic = true\r\n              const p = ctx.path.replace( r, '' )\r\n              const fp = this.staticRoutes[r]\r\n              readFile( join( fp, p ), 'utf-8', ( err, content ) => {\r\n                if ( err ) { reject( err ); return }\r\n                ctx.res.writeHead( 200, { 'Content-Type': mime.contentType( extname( join( fp, p ) ) ) || 'application/octet-stream' } )\r\n                ctx.res.end( content )\r\n                resolve( ctx )\r\n              } )\r\n            }\r\n          } )\r\n        if ( !isStatic ) {\r\n          reject( new Error( '404' ) )\r\n        }\r\n        return\r\n      }\r\n      this.routes[method.toLowerCase()][ctx.path]( ctx )\r\n        .then( resolve )\r\n        .catch( reject )\r\n    } )\r\n  }\r\n  errorHandler = async ( err: Error, ctx: zServer.ServerContext ) => {\r\n    ctx.status( parseInt( err.message ) )\r\n    if ( this.errors.hasOwnProperty( err.message ) ) { ctx.send( this.errors[err.message] ) }\r\n    else { ctx.send( 'An error has occurred' ) }\r\n  }\r\n  get( path: string, handler: zServer.ServerMiddleware ) {\r\n    this.routes.get[path] = handler\r\n    return this\r\n  }\r\n  post( path: string, handler: zServer.ServerMiddleware) {\r\n    this.routes.post[path] = handler\r\n    return this\r\n  }\r\n  all( path: string, handler: zServer.ServerMiddleware ) {\r\n    this.routes.all[path] = handler\r\n    return this\r\n  }\r\n  use( method: Method, path: string, handler: zServer.ServerMiddleware ) {\r\n    this.routes[method.toLowerCase()][path] = handler\r\n    return this\r\n  }\r\n  static( folderRoot: string, urlPath: string ) {\r\n    this.staticRoutes[urlPath] = resolve( folderRoot )\r\n    return this\r\n  }\r\n}\r\n"]}