{"version":3,"sources":["../../../src/scripts/CreateHttpClient/index.ts","../../../src/config/index.ts","../../../src/scripts/CreateHttpClient/httpClientTemplate.ts","../../../src/func/Save/save.ts","../../../src/helper/index.ts"],"sourcesContent":["/* eslint-disable no-async-promise-executor */\nimport {Spec} from '../../types.ts';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport {httpClientTemplate} from './httpClientTemplate.ts';\nimport {save} from '../../func/Save/save.ts';\nimport {definitionFullName} from '../../helper/index.ts';\nimport {configStore} from '../../config/index.ts';\n\n/** */\nexport async function createHttpClient(definations: Spec[]) {\n  return new Promise<'done' | 'error'>(async resolve => {\n    let hasError: 'done' | 'error' = 'done';\n    const spinner = ora('Create definitions Client').info();\n    try {\n      const clients = definations.map(\n        defination =>\n          new Promise(async resolve => {\n            spinner.text = 'Create definitions Client:' + defination.info.title;\n            const data = httpClientTemplate();\n            await save({\n              data,\n              fileName: 'index',\n              location: definitionFullName(defination) + '/client',\n              extention: '.' + configStore?.fileTypes.client,\n            });\n            spinner.clear();\n            resolve(data);\n          })\n      );\n      await Promise.all(clients);\n    } catch (error) {\n      spinner.fail();\n      hasError = 'error';\n      console.error(chalk.redBright(' └ ' + error));\n    }\n    spinner.text = 'Create definitions Client';\n    hasError === 'done' && spinner.succeed();\n    resolve(hasError);\n  });\n}\n","import chalk from 'chalk';\nimport ora from 'ora';\nimport {cosmiconfig} from 'cosmiconfig';\nimport {IConfig} from '../types.ts';\nimport {ConfigStore} from './store/store.ts';\nconst spinner = ora('get hookgenrc config file');\nconst explorer = () => cosmiconfig('hookgenrc');\n// eslint-disable-next-line prefer-const\nexport let configStore: ConfigStore | undefined = undefined;\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n//@ts-ignore\nexport async function getConfig(): Promise<IConfig | undefined> {\n  spinner.start();\n  try {\n    const configFile = await explorer().load('./hookgenrc.json');\n    if (configFile?.isEmpty) {\n      spinner.warn();\n      console.warn(chalk.yellow(' └ codegen file is empty!'));\n      return Promise.resolve(undefined);\n    } else {\n      spinner.succeed();\n      configStore = new ConfigStore(configFile?.config as IConfig);\n      return configFile?.config as IConfig;\n    }\n  } catch (error) {\n    spinner.fail();\n    console.error(\n      chalk.bgRedBright(error ? error : ' └ Error get config file')\n    );\n    throw new Error(\n      chalk.bgRedBright(error ? error : ' └ Error get config file')\n    );\n  }\n}\n","import {configStore} from '../../config/index.ts';\n\nexport function httpClientTemplate() {\n  if (configStore?.hook === 'NG') {\n    return `\n    /* eslint-disable */\n    /* tslint:disable */\n    import {  HttpHeaders, HttpRequest, HttpClient as NgHttpClient } from \"@angular/common/http\";\n    import { Injectable,Inject } from \"@angular/core\";\n\n    type IMethod = 'DELETE' | 'GET' | 'HEAD' | 'JSONP' | 'OPTIONS'\n\n    @Injectable()\n    export class HttpClient {\n      constructor(\n        private http: NgHttpClient,\n        @Inject(String) public baseUrl: string,\n      ) {\n      }\n      public request = <R, Q>(\n        data: Omit<\n          HttpRequest<Q|undefined>,\n          | 'context'\n          | 'reportProgress'\n          | 'urlWithParams'\n          | 'serializeBody'\n          | 'detectContentTypeHeader'\n          | 'clone'\n          | 'withCredentials'\n        >,\n      ) => {\n\n        return this.http.request<R>(data.method.toUpperCase() as IMethod, this.baseUrl + data.url,{\n          body: data.body ? data.body:null,\n          params:data.params,\n          headers:data.headers\n        });\n      };\n    }\n`;\n  } else\n    return `/* eslint-disable */\n/* tslint:disable */\nimport type { AxiosInstance, AxiosRequestConfig, AxiosResponse, HeadersDefaults, ResponseType } from 'axios'\nimport axios from 'axios'\n\nexport type QueryParamsType = Record<string | number, any>\n\nexport interface FullRequestParams extends Omit<AxiosRequestConfig, 'data' | 'params' | 'url' | 'responseType'> {\n  /** set parameter to \\`true\\` for call \\`securityWorker\\` for this request */\n  secure?: boolean\n  /** request path */\n  path: string\n  /** content type of request body */\n  type?: ContentType\n  /** query params */\n  query?: QueryParamsType\n  /** format of response (i.e. response.json() -> format: \"json\") */\n  format?: ResponseType\n  /** request body */\n  body?: unknown\n}\n\nexport type RequestParams = Omit<FullRequestParams, 'body' | 'method' | 'query' | 'path'>\nexport const getData = (data: undefined | unknown) => {\n  if (data) {\n    return data;\n  } else {\n    return {};\n  }\n};\nexport interface ApiConfig<SecurityDataType = unknown> extends Omit<AxiosRequestConfig, 'data' | 'cancelToken'> {\n  securityWorker?: (\n    securityData: SecurityDataType | null,\n  ) => Promise<AxiosRequestConfig | void> | AxiosRequestConfig | void\n  secure?: boolean\n  format?: ResponseType\n  instance?: AxiosInstance\n}\n\nexport enum ContentType {\n  Json = 'application/json',\n  FormData = 'multipart/form-data',\n  UrlEncoded = 'application/x-www-form-urlencoded',\n  Text = 'text/plain',\n}\nexport type AxiosOpt = Omit<AxiosRequestConfig, \"data\" | \"params\" | \"url\" | \"responseType\">;\nexport class HttpClient<SecurityDataType = unknown> {\n  public instance: AxiosInstance\n  private securityData: SecurityDataType | null = null\n  private securityWorker?: ApiConfig<SecurityDataType>['securityWorker']\n  private secure?: boolean\n  private format?: ResponseType\n\n  constructor({ securityWorker, secure, format,instance, ...axiosConfig }: ApiConfig<SecurityDataType> = {}) {\n    this.instance = instance?instance:axios.create({ ...axiosConfig, baseURL: axiosConfig.baseURL || '' })\n    this.secure = secure\n    this.format = format\n    this.securityWorker = securityWorker\n  }\n\n  public setSecurityData = (data: SecurityDataType | null) => {\n    this.securityData = data\n  }\n\n  protected mergeRequestParams(params1: AxiosRequestConfig, params2?: AxiosRequestConfig): AxiosRequestConfig {\n    const method = params1.method || (params2 && params2.method)\n\n    return {\n      ...this.instance.defaults,\n      ...params1,\n      ...(params2 || {}),\n      headers: {\n        ...((method && this.instance.defaults.headers[method.toLowerCase() as keyof HeadersDefaults]) || {}),\n        ...(params1.headers || {}),\n        ...((params2 && params2.headers) || {}),\n      },\n    }\n  }\n\n  protected stringifyFormItem(formItem: unknown) {\n    if (typeof formItem === 'object' && formItem !== null) {\n      return JSON.stringify(formItem)\n    } else {\n        \n      return \\`\\${formItem}\\`\n    }\n  }\n\n  protected createFormData(input: Record<string, unknown>): FormData {\n    return Object.keys(input || {}).reduce((formData, key) => {\n      const property = input[key]\n      const propertyContent: any[] = property instanceof Array ? property : [property]\n\n      for (const formItem of propertyContent) {\n        const isFileType = formItem instanceof Blob || formItem instanceof File\n        formData.append(key, isFileType ? formItem : this.stringifyFormItem(formItem))\n      }\n\n      return formData\n    }, new FormData())\n  }\n\n  public request = async <T = any, _E = any>({\n    secure,\n    path,\n    type,\n    query,\n    format,\n    body,\n    ...params\n  }: FullRequestParams): Promise<AxiosResponse<T>> => {\n    const secureParams =\n      ((typeof secure === 'boolean' ? secure : this.secure) &&\n        this.securityWorker &&\n        (await this.securityWorker(this.securityData))) ||\n      {}\n    const requestParams = this.mergeRequestParams(params, secureParams)\n    const responseFormat = format || this.format || undefined\n\n    if (type === ContentType.FormData && body && body !== null && typeof body === 'object') {\n      body = this.createFormData(body as Record<string, unknown>)\n    }\n\n    if (type === ContentType.Text && body && body !== null && typeof body !== 'string') {\n      body = JSON.stringify(body)\n    }\n\n    return this.instance.request({\n      ...requestParams,\n      headers: {\n        ...(requestParams.headers || {}),\n        ...(type && type !== ContentType.FormData ? { 'Content-Type': type } : {}),\n      },\n      params: query,\n      responseType: responseFormat,\n      data: body,\n      url: path,\n    })\n  }\n}\n\n\n`;\n}\n","import {format} from 'prettier';\nimport fs from 'fs';\nimport {configStore} from '../../config/index.ts';\nimport {ISaveBatch, ISaveFile} from '../../types.ts';\nimport ora from 'ora';\nimport chalk from 'chalk';\nimport makeDir from 'make-dir';\n\nconst writeFs = async ({\n  data,\n  fileName,\n  location,\n}: ISaveFile): Promise<fs.WriteStream> => {\n  // eslint-disable-next-line no-async-promise-executor\n  return new Promise(async (resolve, reject) => {\n    const dir = await makeDir(location);\n    if (dir) {\n      const file = fs\n        .createWriteStream(location + '/' + fileName)\n        .once('open', () => {\n          file.write(data);\n          file.end();\n        })\n        .once('error', error => {\n          reject(error);\n        })\n        .once('finish', () => {\n          resolve(file);\n        });\n    }\n  });\n};\n\nconst getPrettierFileData = async (\n  data: unknown,\n  beautify = true\n): Promise<string> => {\n  if (beautify) {\n    const beauty = await format(`${data}`, configStore?.prettier);\n    return `${beauty}`;\n  }\n  return `${data}`;\n};\n\nexport async function save({\n  fileName,\n  data,\n  location,\n  beautify,\n  extention,\n  comment,\n}: ISaveFile) {\n  if (data) {\n    const spinner = ora(\n      chalk.gray(' ├ Saving :\"' + fileName + '\" in :\"' + location + '\"')\n    );\n    try {\n      const fileData = await getPrettierFileData(data, beautify);\n      const dataStr = comment ? `\\n /* ${comment} */\\n` + fileData : fileData;\n      await writeFs({\n        data: dataStr,\n        fileName: fileName + extention,\n        location: configStore?.outDir + '/' + location,\n      });\n      spinner.succeed();\n    } catch (error) {\n      spinner.fail();\n      console.error(chalk.redBright(' └ ' + error));\n    }\n  }\n}\n\nexport function saveBatch({files, location, beautify, extention}: ISaveBatch) {\n  const promisses = files.map(file => {\n    if (file.data.length) {\n      return save({\n        data: file.data,\n        fileName: file.name,\n        beautify,\n        location,\n        extention,\n        comment: file.comment,\n      });\n    } else {\n      return null;\n      // console.warn(\n      //   chalk.green(\n      //     ` └ ${file.name} in ${location} not saved duo to empty string! `\n      //   )\n      // );\n    }\n  });\n  return Promise.all(promisses);\n}\n","import {OpenAPIV3} from 'openapi-types';\nimport {typeNameMaker} from '../func/Typescript/TypeNameMaker/index.ts';\nimport {Spec, isReference} from '../types.ts';\nconst repoTypes: string[] = [''];\nexport function capitalize(string: string) {\n  return string.charAt(0).toUpperCase() + string.slice(1);\n}\n\nexport function camelize(str: string) {\n  return str\n    .replace(/(?:^\\w|[A-Z]|\\b\\w)/g, (word, index) => {\n      return index === 0 ? word.toLowerCase() : word.toUpperCase();\n    })\n    .replace(/\\s+/g, '');\n}\n\nexport const primitiveJs = (\n  key: 'string' | 'number' | 'boolean' | 'integer' | undefined\n) => {\n  switch (key) {\n    case 'integer':\n      return 'number';\n    case 'number':\n      return 'number';\n    case 'boolean':\n      return 'boolean';\n    case 'string':\n      return 'string';\n\n    default:\n      return 'unknown';\n  }\n};\n\nexport const definitionFullName = (defination: Spec) => {\n  return defination.info.title + '_' + defination.info.version;\n};\n\nexport const isDuplication = (name: string, data: string[]): boolean => {\n  const iName = typeNameMaker(name);\n  const include = repoTypes.some(item => item.includes(iName));\n  const dataInclude = data.some(item => item.includes(iName));\n  if (include && dataInclude) {\n    return true;\n  }\n  repoTypes.push(iName);\n  return false;\n};\n\nexport const isNullable = (\n  schema: OpenAPIV3.ReferenceObject | OpenAPIV3.SchemaObject\n): boolean | undefined => {\n  if (!isReference(schema)) {\n    return schema.nullable;\n  }\n  return undefined;\n};\n\nexport const definationComment = (defination: Spec, data: string[][]) => {\n  data.forEach(fileData => {\n    fileData.push(\n      `\\n/* ${defination.info.title} - ${defination.info.version} */\\n`\n    );\n  });\n};\nexport const getDefinationComment = (defination: Spec) => {\n  return ` ${defination.info.title} - ${defination.info.version}`;\n};\n\nexport function statusString(status: string) {\n  const okReg = /2\\d\\d/g;\n  const badReg = /400/g;\n  if (okReg.test(status)) {\n    return 'Ok';\n  }\n\n  if (badReg) {\n    return 'Bad';\n  }\n\n  return;\n}\n\nexport const pathSplit = (path: string) => {\n  const reg = /\\/{\\w*}/g;\n  const regBracketsParams = /{(.*?)}/g;\n  const refinePath = path.replace(reg, '');\n\n  const bracketsParams = path\n    .match(regBracketsParams)\n    ?.map(params => {\n      const name = params.replace(/{|}/g, '');\n      return 'By' + capitalize(name);\n    })\n    .join('');\n\n  const pathScope = refinePath.split('/') as string[];\n  const definationName = pathScope[1] as string;\n  const scopeName = pathScope[3] as string;\n  const itemName =\n    (((pathScope[pathScope.length - 1] as string) +\n      capitalize(pathScope[pathScope.length - 2])) as string) +\n    (bracketsParams || '');\n\n  return {pathScope, definationName, scopeName, itemName};\n};\n"],"mappings":"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","names":["import_chalk","import_ora","ora","import_ora","import_chalk","makeDir","fs","spinner","ora","chalk","spinner","ora","resolve","chalk"]}