{"version":3,"file":"HttpMigrateRouteAccessor.mjs","sources":["../../../src/composers/migrate/HttpMigrateRouteAccessor.ts"],"sourcesContent":["import { IHttpMigrateRoute } from \"../../structures/IHttpMigrateRoute\";\nimport { EndpointUtil } from \"../../utils/EndpointUtil\";\nimport { Escaper } from \"../../utils/Escaper\";\nimport { MapUtil } from \"../../utils/MapUtil\";\n\nexport namespace HttpMigrateRouteAccessor {\n  export const overwrite = (routes: IHttpMigrateRoute[]): void => {\n    const predefined: Map<string, number> = getPredefinedAccessors(routes);\n    const dict: Map<string, IElement> = collect((op) =>\n      op.emendedPath\n        .split(\"/\")\n        .filter((str) => !!str.length && str[0] !== \":\")\n        .map(EndpointUtil.normalize)\n        .map((str) => (Escaper.variable(str) ? str : `_${str}`)),\n    )(routes) as Map<string, IElement>;\n\n    for (const props of dict.values())\n      props.entries.forEach((entry, i) => {\n        entry.alias = EndpointUtil.escapeDuplicate(\n          [\n            ...props.children,\n            ...props.entries.filter((_, j) => i !== j).map((e) => e.alias),\n          ].map(EndpointUtil.normalize),\n        )(EndpointUtil.normalize(entry.alias));\n\n        const parameters: { name: string; key: string }[] = [\n          ...entry.route.parameters,\n          ...(entry.route.body ? [entry.route.body] : []),\n          ...(entry.route.headers ? [entry.route.headers] : []),\n          ...(entry.route.query ? [entry.route.query] : []),\n        ];\n        parameters.forEach(\n          (p, i) =>\n            (p.key = EndpointUtil.escapeDuplicate([\n              \"connection\",\n              entry.alias,\n              ...parameters.filter((_, j) => i !== j).map((y) => y.key),\n            ])(p.key)),\n        );\n\n        const accessor: string[] | undefined =\n          entry.route.operation()[\"x-samchon-accessor\"];\n        if (accessor !== undefined && predefined.get(accessor.join(\".\")) === 1)\n          entry.route.accessor = accessor;\n        else entry.route.accessor = [...props.namespace, entry.alias];\n      });\n  };\n\n  const collect =\n    (getter: (r: IHttpMigrateRoute) => string[]) =>\n    (routes: IHttpMigrateRoute[]): Map<string, IElement> => {\n      const dict: Map<string, IElement> = new Map();\n      for (const r of routes) {\n        const namespace: string[] = getter(r);\n        let last: IElement = MapUtil.take(dict)(namespace.join(\".\"))(() => ({\n          namespace,\n          children: new Set(),\n          entries: [],\n        }));\n        last.entries.push({\n          route: r,\n          alias: getName(r),\n        });\n        namespace.slice(0, -1).forEach((_i, i, array) => {\n          const partial: string[] = namespace.slice(0, array.length - i);\n          const element: IElement = MapUtil.take(dict)(partial.join(\".\"))(\n            () => ({\n              namespace: partial,\n              children: new Set(),\n              entries: [],\n            }),\n          );\n          element.children.add(last.namespace.at(-1)!);\n        });\n        const top = MapUtil.take(dict)(\"\")(() => ({\n          namespace: [],\n          children: new Set(),\n          entries: [],\n        }));\n        if (namespace.length) top.children.add(namespace[0]);\n      }\n      return dict;\n    };\n\n  const getName = (op: IHttpMigrateRoute): string => {\n    const method = op.method === \"delete\" ? \"erase\" : op.method;\n    if (op.parameters.length === 0) return method;\n    return (\n      method +\n      \"By\" +\n      op.parameters.map((p) => EndpointUtil.capitalize(p.key)).join(\"And\")\n    );\n  };\n\n  const getPredefinedAccessors = (\n    routes: IHttpMigrateRoute[],\n  ): Map<string, number> => {\n    const dict: Map<string, number> = new Map();\n    for (const r of routes) {\n      const accessor = r.operation()[\"x-samchon-accessor\"]?.join(\".\");\n      if (accessor === undefined) continue;\n      else if (dict.has(accessor)) dict.set(accessor, dict.get(accessor)! + 1);\n      else dict.set(accessor, 1);\n    }\n    return dict;\n  };\n\n  interface IElement {\n    namespace: string[];\n    entries: IEntry[];\n    children: Set<string>;\n  }\n  interface IEntry {\n    route: IHttpMigrateRoute;\n    alias: string;\n  }\n}\n"],"names":["HttpMigrateRouteAccessor","overwrite","routes","predefined","getPredefinedAccessors","dict","collect","op","emendedPath","split","filter","str","length","map","EndpointUtil","normalize","Escaper","variable","props","values","entries","forEach","entry","i","alias","escapeDuplicate","children","_","j","e","parameters","route","body","headers","query","p","key","y","accessor","operation","undefined","get","join","namespace","getter","Map","r","last","MapUtil","take","Set","push","getName","slice","_i","array","partial","element","add","at","top","method","capitalize","has","set"],"mappings":"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"}