{"version":3,"sources":["jsdelivr-header.js","/npm/parameter-interface@0.0.1/index.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA,ACNA,aAOA,MAAM,qBAQJ,SAAA,CAAU,GACR,GAAqB,iBAAV,EACT,MAAM,IAAI,UAAU,yBAGtB,IAEI,EAAS,GAEb,IAAK,IAAI,KAAO,EAAO,CACrB,IAAI,EAAO,WAAW,EAAM,IAE5B,IAAI,EAAU,GAAG,KAAwB,IAAlB,EAAK,SAAqB,IAAM,OAEvD,IAAI,EAAiB,SAAS,EAAK,MACnC,IAAK,EACH,MAAM,IAAI,UAAU,4BAA8B,OAAO,KAAK,UAAU,KAAK,MAC3E,wCAA0C,EAAK,MAGnD,IAAI,EAAW,EAAe,KAfrB,KAegC,GACzC,EAAO,KAAK,EAAU,EACxB,CACA,MAAO,OAAS,EAAO,KAAK,MAArB,KACT,EAOF,OAAO,QAAU,qBAOjB,IAAI,SAAW,qBAAqB,SAAW,CAC7C,OAAQ,YACR,IAAK,SACL,QAAS,SACT,OAAQ,YACR,GAAI,QACJ,KAAM,UACN,SAAU,cACV,SAAU,cACV,QAAS,aACT,KAAM,aACN,MAAO,WACP,OAAQ,YACR,KAAM,UACN,MAAO,WACP,SAAU,cACV,IAAK,UAWP,SAAS,WAAW,GAClB,MAAoB,iBAAT,EACF,CAAE,KAAM,GAEb,MAAM,QAAQ,GACT,CAAE,KAAM,OAAQ,OAAQ,GAE7B,aAAgB,OACX,CAAE,KAAM,SAAU,OAAQ,GAE5B,GAAQ,CAAC,CAClB,CAeA,SAAS,SAAS,GAChB,MAAO,SACT,CAeA,SAAS,YAAY,GACnB,MAAO,SACT,CAiBA,SAAS,YAAY,GACnB,MAAO,SACT,CAYA,SAAS,QAAQ,GACf,MAAO,SACT,CAYA,SAAS,UAAU,GACjB,MAAO,QACT,CAYA,SAAS,cAAc,GACrB,MAAO,QACT,CAWA,SAAS,aAAa,GACrB,MAAO,SACR,CAcA,SAAS,UAAU,GACjB,IAAK,MAAM,QAAQ,EAAK,QACtB,MAAM,IAAI,UAAU,qCAEtB,OAAO,EAAK,OAAO,KAAI,GAAwB,iBAAT,EAAoB,IAAI,KAAU,IAAO,KAAK,OAAS,GAC/F,CAWA,SAAS,WAAW,GAClB,MAAO,QACT,CAYA,SAAS,cAAc,GACrB,MAAO,QACT,CAWA,SAAS,SAAS,GAChB,MAAO,QACT,CAcA,SAAS,YAAY,GACnB,GAAI,EAAK,KACP,OAAO,KAAK,UAAU,EAAK,KAE/B,CAwBA,SAAS,WAAW,GAClB,IAAK,EAAK,SACR,MAAO,QAKT,IADc,SAAS,EAAK,UAE1B,MAAM,IAAI,UAAU,4BAA8B,OAAO,KAAK,UAAU,KAAK,MACzE,wCAA0C,EAAK,UAGrD,IACI,EAAU,WAAW,KARd,KAQ2C,WAAlB,EAAK,SAAwB,EAAK,KAAO,EAAK,UAIlF,OAFiB,KAAK,UAAU,GAEZ,IACtB","file":"/npm/parameter-interface@0.0.1/index.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/parameter-interface@0.0.1/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","'use strict';\n\n\n/**\n * Parameter class\n * @class Parameter\n */\nclass ParameterToInterface {\n\n  /**\n   * transform\n   *\n   * @param {Object} rules\n   * @api public\n   */\n  transform(rules) {\n    if (typeof rules !== 'object') {\n      throw new TypeError('need object type rule');\n    }\n\n    var self = this;\n\n    var result = [];\n\n    for (var key in rules) {\n      var rule = formatRule(rules[key]);\n\n      let leftStr = `${key}${rule.required === false ? '?' : ''}: `;\n\n      var spec_transfrom = TYPE_MAP[rule.type];\n      if (!spec_transfrom) {\n        throw new TypeError('rule type must be one of ' + Object.keys(TYPE_MAP).join(', ') +\n          ', but the following type was passed: ' + rule.type);\n      }\n\n      var rightStr = spec_transfrom.call(self, rule);\n      result.push(leftStr + rightStr);\n    }\n    return '{\\n ' + result.join('\\n') + '\\n' + '}';\n  }\n};\n\n/**\n * Module exports\n * @type {Function}\n */\nmodule.exports = ParameterToInterface;\n\n\n/**\n * Simple type map\n * @type {Object}\n */\nvar TYPE_MAP = ParameterToInterface.TYPE_MAP = {\n  number: checkNumber,\n  int: checkInt,\n  integer: checkInt,\n  string: checkString,\n  id: checkId,\n  date: checkDate,\n  dateTime: checkDateTime,\n  datetime: checkDateTime,\n  boolean: checkBoolean,\n  bool: checkBoolean,\n  array: checkArray,\n  object: checkObject,\n  enum: checkEnum,\n  email: checkEmail,\n  password: checkPassword,\n  url: checkUrl,\n};\n\n/**\n * format a rule\n *\n * @param {Mixed} rule\n * @return {Object}\n * @api private\n */\n\nfunction formatRule(rule) {\n  if (typeof rule === 'string') {\n    return { type: rule };\n  }\n  if (Array.isArray(rule)) {\n    return { type: 'enum', values: rule };\n  }\n  if (rule instanceof RegExp) {\n    return { type: 'string', format: rule };\n  }\n  return rule || {};\n}\n\n/**\n * check interger\n * {\n *   max: 100,\n *   min: 0\n * }\n *\n * @param {Object} rule\n * @param {Mixed} value\n * @return {Boolean}\n * @api private\n */\n\nfunction checkInt(rule) {\n  return 'number;';\n}\n\n/**\n * check number\n * {\n *   max: 100,\n *   min: 0\n * }\n *\n * @param {Object} rule\n * @param {Mixed} value\n * @return {Boolean}\n * @api private\n */\n\nfunction checkNumber(rule) {\n  return 'number;';\n}\n\n/**\n * check string\n * {\n *   allowEmpty: true, // (default to false, alias to empty)\n *   format: /^\\d+$/,\n *   max: 100,\n *   min: 0\n * }\n *\n * @param {Object} rule\n * @param {Mixed} value\n * @return {Boolean}\n * @api private\n */\n\nfunction checkString(rule) {\n  return 'string;';\n}\n\n/**\n * check id format\n * format: /^\\d+/\n *\n * @param {Object} rule\n * @param {Mixed} value\n * @return {Boolean}\n * @api private\n */\n\nfunction checkId(rule) {\n  return 'string;'\n}\n\n/**\n * check date format\n * format: YYYY-MM-DD\n *\n * @param {Object} rule\n * @param {Mixed} value\n * @return {Boolean}\n * @api private\n */\n\nfunction checkDate(rule) {\n  return 'string';\n}\n\n/**\n * check date time format\n * format: YYYY-MM-DD HH:mm:ss\n *\n * @param {Object} rule\n * @param {Mixed} value\n * @return {Boolean}\n * @api private\n */\n\nfunction checkDateTime(rule) {\n  return 'string';\n}\n\n/**\n * check boolean\n *\n * @param {Object} rule\n * @param {Mixed} value\n * @return {Boolean}\n * @api private\n */\n\nfunction checkBoolean(rule) {\n return 'boolean';\n}\n\n/**\n * check enum\n * {\n *   values: [0, 1, 2]\n * }\n *\n * @param {Object} rule\n * @param {Mixed} value\n * @return {Boolean}\n * @api private\n */\n\nfunction checkEnum(rule) {\n  if (!Array.isArray(rule.values)) {\n    throw new TypeError('check enum need array type values');\n  }\n  return rule.values.map(item => typeof item === 'string' ? `'${item}'` : item ).join(' | ') + ';';\n}\n\n/**\n * check email\n *\n * @param {Object} rule\n * @param {Mixed} value\n * @return {Boolean}\n * @api private\n */\n\nfunction checkEmail(rule) {\n  return 'string';\n}\n\n/**\n * check password\n * @param {Object} rule\n * @param {Object} value\n * @param {Object} obj\n * @return {Boolean}\n *\n * @api private\n */\n\nfunction checkPassword(rule) {\n  return 'string';\n}\n\n/**\n * check url\n *\n * @param {Object} rule\n * @param {Object} value\n * @return {Boolean}\n * @api private\n */\n\nfunction checkUrl(rule) {\n  return 'string';\n}\n\n/**\n * check object\n * {\n *   rule: {}\n * }\n *\n * @param {Object} rule\n * @param {Mixed} value\n * @return {Boolean}\n * @api private\n */\n\nfunction checkObject(rule) {\n  if (rule.rule) {\n    return this.transform(rule.rule);\n  }\n}\n\n/**\n * check array\n * {\n *   type: 'array',\n *   itemType: 'string'\n *   rule: {type: 'string', allowEmpty: true}\n * }\n *\n * {\n *   type: 'array'.\n *   itemType: 'object',\n *   rule: {\n *     name: 'string'\n *   }\n * }\n *\n * @param {Object} rule\n * @param {Mixed} value\n * @return {Boolean}\n * @api private\n */\n\nfunction checkArray(rule) {\n  if (!rule.itemType) {\n    return 'any[]';\n  }\n\n  var self = this;\n  var checker = TYPE_MAP[rule.itemType];\n  if (!checker) {\n    throw new TypeError('rule type must be one of ' + Object.keys(TYPE_MAP).join(', ') +\n        ', but the following type was passed: ' + rule.itemType);\n  }\n\n  var errors = [];\n  var subRule = formatRule.call(self, rule.itemType === 'object' ? rule.rule : rule.itemType);\n\n  var itemResult = this.transform(subRule);\n\n  return itemResult + '[]';\n}\n"]}