{"version":3,"file":"ng2-rest-swagger-generator-browser.mjs","sources":["../../../tmp-libs-for-dist/ng2-rest-swagger-generator/projects/ng2-rest-swagger-generator/src/lib/helpers.ts","../../../tmp-libs-for-dist/ng2-rest-swagger-generator/projects/ng2-rest-swagger-generator/src/ng2-rest-swagger-generator-browser.ts"],"sourcesContent":["import { path, fse, _ } from 'tnp-core/browser';\nimport { Helpers } from 'tnp-core/browser';\nimport { HelpersTaon } from 'tnp-helpers/browser';\n\nimport { Models } from './models';\n\nexport class HelpersSwagger {\n  static SYMBOL = {\n    INDEX_SWG: Symbol(),\n    OUTPUT_FOLDER: Symbol(),\n  };\n\n  private static output: string;\n\n  private static apis: Models.Swagger.SwaggerModel[];\n\n  static preparePaths(apis: Models.Swagger.SwaggerModel[], outputBase: string) {\n    this.output = `${process.cwd()}/${outputBase}`;\n    this.apis = apis;\n  }\n\n  static prepareModel(\n    swg: Models.Swagger.SwaggerModel,\n    indexSwg: number,\n    isHttpsEnable: boolean,\n  ) {\n    swg[this.SYMBOL.INDEX_SWG] = indexSwg;\n\n    swg.host =\n      swg.host &&\n      (isHttpsEnable ? 'https' : 'http') +\n        `://${swg.host.replace(/:[0-9]*/g, '')}`;\n    if (!swg.basePath) {\n      swg.basePath = '';\n    }\n  }\n\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n  \n\n  static get serviceFromTag() {\n    const self = this;\n\n    return {\n      allClassNames() {\n        const names = [];\n        self.apis.map(swg => {\n          swg.tags.forEach(tag => {\n            // @ts-ignore\n            names.push(self.serviceFromTag.className(swg, tag));\n          });\n        });\n        return names;\n      },\n      className(\n        swg: Models.Swagger.SwaggerModel,\n        tag: Models.Swagger.SwaggerTag,\n      ) {\n        const groupFolderName = self.groupFromJSON.folderName(swg);\n        // console.log('groupFolderName', groupFolderName)\n        const className = _.upperFirst(_.camelCase(tag.name)) + 'Service';\n        return `${groupFolderName}${className.replace(/\\//g, '')}`;\n      },\n      absoluteFilePath(\n        swg: Models.Swagger.SwaggerModel,\n        tag: Models.Swagger.SwaggerTag,\n      ) {\n        return `${self.absolutePath.PathFolder_services_groupName(swg)}/${self.serviceFromTag.className(swg, tag)}.ts`;\n      },\n    };\n  }\n\n  static get endpoints() {\n    return this.apis.map(swg => {\n      return `${this.groupFromJSON.folderName(swg)}:'${swg.host}'`;\n    });\n  }\n\n  static get absolutePath() {\n    const self = this;\n\n    return {\n      get output() {\n        return self.output;\n      },\n\n      get PathFile_index_ts() {\n        const APIpath = self.output;\n        return `${APIpath}/index.ts`;\n      },\n      get PathFile_module_ts() {\n        const APIpath = self.output;\n        return `${APIpath}/module.ts`;\n      },\n\n      get PathFolder_services() {\n        const APIpath = self.output;\n        return `${APIpath}/services`;\n      },\n\n      get PathFile_services_index_ts() {\n        return `${self.absolutePath.PathFolder_services}/index.ts`;\n      },\n\n      PathFolder_services_groupName(swg: Models.Swagger.SwaggerModel) {\n        const groupFolderName = self.groupFromJSON.folderName(swg);\n        // console.log('groupFolderName', groupFolderName)\n        return `${self.absolutePath.PathFolder_services}/${groupFolderName}`;\n      },\n\n      PathFile_services_groupName_index_ts(swg: Models.Swagger.SwaggerModel) {\n        return `${self.absolutePath.PathFolder_services_groupName(swg)}/index.ts`;\n      },\n\n      PathFile_services_groupNAme_serviceName_ts(\n        swg: Models.Swagger.SwaggerModel,\n        tag: Models.Swagger.SwaggerTag,\n      ) {\n        const serviceFileName = self.serviceFromTag.className(swg, tag);\n        return `${self.absolutePath.PathFolder_services_groupName(swg)}/${serviceFileName}.ts`;\n      },\n    };\n  }\n\n  static get groupFromJSON() {\n    const self = this;\n    return {\n      get allGroupNames() {\n        const names = [];\n        self.apis.map(swg => {\n          // @ts-ignore\n          names.push(self.groupFromJSON.folderName(swg));\n        });\n        return names;\n      },\n      folderName(swg: Models.Swagger.SwaggerModel) {\n        const basePath: string = swg.basePath;\n        const index: number = swg[self.SYMBOL.INDEX_SWG];\n        return _.upperFirst(\n          _.camelCase(basePath.trim() === '' ? `json${index}` : basePath),\n        );\n      },\n    };\n  }\n\n  static findTags(swg: Models.Swagger.SwaggerModel) {\n    const tags = [];\n    Object.keys(swg.paths).forEach(p => {\n      Object.keys(swg.paths[p]).forEach(m => {\n        const a = swg.paths[p][m];\n        if (_.isArray(a.tags)) {\n          a.tags.forEach(tag => {\n            if (tags.filter(({ name }) => name === tag).length === 0) {\n              // @ts-ignore\n              tags.push({ name: tag });\n            }\n          });\n        }\n      });\n    });\n    return tags;\n  }\n\n  /**\n   * To generate get/books/{id} => get_books__id_\n   */\n  static cleanPath(path: string) {\n    return path\n      .replace(/{/g, '_')\n      .replace(/}/g, '_')\n      .replace(/\\//g, '_')\n      .replace(/-/g, '_');\n  }\n\n  static cleanPathModel(pathModel: string) {\n    return pathModel.replace(/\\/{/g, '/:').replace(/}/g, '');\n  }\n\n  static swaggerTypeToJS(\n    type: 'string' | 'number' | 'integer' | 'boolean' | 'array' | 'file',\n    itemsType: any = 'any',\n  ) {\n    return type === 'integer'\n      ? 'number'\n      : type === 'array'\n        ? !itemsType\n          ? 'any'\n          : `${this.swaggerTypeToJS(itemsType)}[]`\n        : type === 'file'\n          ? 'any'\n          : type;\n  }\n\n  static getObjectDefinition(\n    ref: string,\n    swg: Models.Swagger.SwaggerModel,\n    deep = 0,\n  ): string {\n    if (deep == 1) return '';\n    if (!ref) {\n      console.log('Bad json $ref inside swagger');\n      return '';\n    }\n    let res = '';\n    ref = ref.replace('#/', '').replace(/\\//g, '.');\n\n    let obj: Models.Swagger.SwaggerDef = <Models.Swagger.SwaggerDef>(\n      _.get(swg, ref)\n    );\n\n    // if (obj.properties.viaAgentViaGroupDTOs && !getObjectDefinition.prototype.once) {\n    //     console.log('============================================================')\n    //     console.log('obj', obj)\n    //     console.log('------------------------------------------------------------')\n    //     getObjectDefinition.prototype.once = true;\n\n    _.forOwn(obj.properties, (v, k) => {\n      // console.log(obj)\n      if (v.$ref && typeof v.$ref === 'string') {\n        res +=\n          k + ':{' + this.getObjectDefinition(v.$ref, swg, deep++) + '};\\n';\n      } else if (\n        v.schema &&\n        v.schema.$ref &&\n        typeof v.schema.$ref === 'string'\n      ) {\n        res +=\n          k +\n          ':{' +\n          this.getObjectDefinition(v.schema.$ref, swg, deep++) +\n          '};\\n';\n      } else if (\n        v.items &&\n        v.items.$ref &&\n        typeof v.items.$ref === 'string' &&\n        v.type &&\n        v.type === 'array'\n      ) {\n        res +=\n          k +\n          ':{' +\n          this.getObjectDefinition(v.items.$ref, swg, deep++) +\n          '}[];\\n';\n        // console.log('make love here')\n      } else if (v.items && v.items.$ref && typeof v.items.$ref === 'string') {\n        res +=\n          k +\n          ':{' +\n          this.getObjectDefinition(v.items.$ref, swg, deep++) +\n          '};\\n';\n      } else {\n        let isRequired =\n          obj.required &&\n          obj.required instanceof Array &&\n          obj.required.filter(o => o === k).length > 0;\n        let type =\n          v.enum && v.enum instanceof Array && v.enum.length > 0\n            ? v.enum.map(e => '\"' + e + '\"').join('|')\n            : this.swaggerTypeToJS(v.type, v.items ? v.items.type : 'any');\n\n        res += k + (!isRequired ? '?' : '') + ':' + type + ';\\n';\n      }\n    });\n    //     console.log('res', res)\n    // }\n\n    return res;\n  }\n\n  /**\n   * private pathes = {\n   *      get_all_companies: new SimpleResource<\n   *          string, A, TA, RP extends Object, QP extends Rest.UrlParams>(endpoint, model),\n   *      get_byid_companies: new SimpleResource<\n   *          string, A, TA, RP extends Object, QP extends Rest.UrlParams>(endpoint, model)\n   * }\n   */\n  static getAngularPrivatePathesByTag(\n    swg: Models.Swagger.SwaggerModel,\n    tag: Models.Swagger.SwaggerTag,\n  ): string {\n    let res: string[] = [];\n    let base = swg.basePath.replace('/', '');\n\n    let pathes: Object = {};\n    _.forOwn(swg.paths, (v, k) => {\n      _.forOwn(v, (v2, k2) => {\n        if (\n          _.isArray(v2.tags) &&\n          v2.tags.filter(f => f === tag.name).length > 0\n        ) {\n          let resp = v2.responses['200'] && v2.responses['200'].schema;\n\n          // if (resp) {\n          // TODO response handling\n          // console.log('resp',resp);\n          if (pathes[k] === void 0) pathes[k] = {}; // @ts-ignore\n          let type = this.getResponseType(resp, swg);\n\n          if (\n            type.length > 3 &&\n            type.charAt(type.length - 1) === ']' &&\n            type.charAt(type.length - 2) === '[' &&\n            !pathes[k]['array']\n          ) {\n            pathes[k]['array'] = type;\n          } else if (k2 !== 'delete' && !pathes[k]['single']) {\n            pathes[k]['single'] = type;\n          }\n          // }\n        }\n      });\n    });\n\n    let pathResources: Models.PathResource[] = [];\n\n    _.forOwn(pathes, (v, p) => {\n      // console.log(`${p} - ${JSON.stringify(v)}`);\n      pathResources.push({\n        clean_path: this.cleanPath(p),\n        model: this.cleanPathModel(p),\n        endpoint: swg.basePath,\n        singleModelType: !v['single'] ? 'any' : v['single'],\n        multipleModelType: !v['array'] ? 'any' : v['array'],\n        queryParamsType: 'any',\n        pathParamsType: 'any',\n      });\n    });\n\n    pathResources.forEach(p => {\n      res.push(\n        `${p.clean_path}: new SimpleResource<\\n${p.singleModelType},\\n${p.multipleModelType}\\n>( Ng2RestGenModule.enpointUrls.${this.groupFromJSON.folderName(swg)}, '${p.model}' )`,\n      );\n    });\n\n    return `private pathes = { \\n${res.join(',\\n')}\\n};`;\n  }\n\n  /*\n   schema\": {\n      \"type\": \"array\",\n      \"items\": {\n          \"$ref\": \"#/definitions/CompanyDTO\"\n      }\n  }\n\n  \"schema\": {\n      \"$ref\": \"#/definitions/CompanyDTO\"\n  }\n   */\n\n  static getResponseType(\n    o: Models.Swagger.ObjSchema,\n    swg: Models.Swagger.SwaggerModel,\n  ) {\n    let res = '{} | any';\n    if (o && o.$ref && typeof o.$ref === 'string' && o.$ref.trim() !== '') {\n      res = '{' + this.getObjectDefinition(o.$ref, swg) + '}';\n      // console.log('I am object', o.$ref)\n    } else if (\n      o &&\n      o.type === 'array' &&\n      o.items &&\n      o.items.$ref &&\n      typeof o.items.$ref === 'string' &&\n      o.items.$ref.trim() !== ''\n    ) {\n      res = '{' + this.getObjectDefinition(o.items.$ref, swg) + '}[]';\n      // console.log('I am array ', o.items.$ref)\n    }\n    // console.log('============================================================')\n    // console.log('type', res)\n    // console.log('------------------------------------------------------------')\n    return res;\n  }\n\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n  \n\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n  \n  private static count1 = 0;\n\n  static recreateSummary(summary: string) {\n    // if (!summary) {\n    //   return 'SummaryExample' + (count1++)\n    // }\n    return summary;\n  }\n\n  // type Params = { query: any[], path: any[], body: any[] };\n  // type ParamsType = { query: string, path: string, body: string };\n\n  // export function getSingleParamsTypeForPath(tag: string, swg: SwaggerModel): ParamsType {\n  //     let res: ParamsType = <ParamsType>{};\n\n  //     for (let urlpath in swg.paths) {\n\n  //         for (let methodhttp in swg.paths[urlpath]) {\n  //             let m = swg.paths[urlpath][methodhttp];\n  //             if (m.tags.filter(t => t === tag).length === 1) {\n\n  //                 let params: Params = <Params>{};\n  //                 params.query = [];\n  //                 params.path = [];\n  //                 params.body = [];\n\n  //                 if (m.parameters) m.parameters.forEach(param => {\n  //                     if (param.in === 'body') {\n  //                         params.body.push({\n  //                             name: param.name,\n  //                             type: \"{\" + SwaggerHelpers.getObjectDefinition(param.schema.$ref, swg) + \"}\",\n  //                             required: param.required\n  //                         })\n  //                     } else {\n  //                         params[param.in].push({\n  //                             name: param.name,\n  //                             type: SwaggerHelpers.swaggerTypeToJS(param.type),\n  //                             required: param.required\n  //                         })\n  //                     }\n\n  //                 })\n\n  //             }\n  //         }\n  //     }\n\n  //     return res;\n  // }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}