sonamu 0.7.11 → 0.7.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (153) hide show
  1. package/dist/api/config.d.ts +10 -6
  2. package/dist/api/config.d.ts.map +1 -1
  3. package/dist/api/config.js +2 -1
  4. package/dist/api/sonamu.d.ts +4 -0
  5. package/dist/api/sonamu.d.ts.map +1 -1
  6. package/dist/api/sonamu.js +49 -5
  7. package/dist/bin/cli.js +118 -170
  8. package/dist/database/base-model.d.ts +10 -50
  9. package/dist/database/base-model.d.ts.map +1 -1
  10. package/dist/database/base-model.js +19 -84
  11. package/dist/database/base-model.types.d.ts +4 -4
  12. package/dist/database/base-model.types.d.ts.map +1 -1
  13. package/dist/database/base-model.types.js +1 -1
  14. package/dist/database/db.d.ts +1 -0
  15. package/dist/database/db.d.ts.map +1 -1
  16. package/dist/database/db.js +24 -13
  17. package/dist/database/puri-subset.test-d.js +1 -1
  18. package/dist/database/puri-subset.types.d.ts +1 -0
  19. package/dist/database/puri-subset.types.d.ts.map +1 -1
  20. package/dist/database/puri-subset.types.js +2 -2
  21. package/dist/database/puri.d.ts +82 -3
  22. package/dist/database/puri.d.ts.map +1 -1
  23. package/dist/database/puri.js +180 -14
  24. package/dist/database/puri.types.d.ts +33 -6
  25. package/dist/database/puri.types.d.ts.map +1 -1
  26. package/dist/database/puri.types.js +1 -1
  27. package/dist/database/puri.types.test-d.js +1 -1
  28. package/dist/entity/entity-manager.d.ts +5 -4
  29. package/dist/entity/entity-manager.d.ts.map +1 -1
  30. package/dist/entity/entity-manager.js +8 -1
  31. package/dist/index.d.ts +1 -1
  32. package/dist/index.d.ts.map +1 -1
  33. package/dist/index.js +3 -3
  34. package/dist/migration/code-generation.d.ts.map +1 -1
  35. package/dist/migration/code-generation.js +33 -2
  36. package/dist/migration/postgresql-schema-reader.d.ts.map +1 -1
  37. package/dist/migration/postgresql-schema-reader.js +53 -22
  38. package/dist/naite/messaging-types.d.ts.map +1 -1
  39. package/dist/naite/messaging-types.js +1 -1
  40. package/dist/naite/naite.js +2 -2
  41. package/dist/stream/sse.d.ts +2 -6
  42. package/dist/stream/sse.d.ts.map +1 -1
  43. package/dist/stream/sse.js +9 -3
  44. package/dist/syncer/api-parser.d.ts.map +1 -1
  45. package/dist/syncer/api-parser.js +7 -2
  46. package/dist/syncer/file-patterns.d.ts +1 -1
  47. package/dist/syncer/file-patterns.d.ts.map +1 -1
  48. package/dist/syncer/file-patterns.js +6 -5
  49. package/dist/syncer/module-loader.d.ts +5 -0
  50. package/dist/syncer/module-loader.d.ts.map +1 -1
  51. package/dist/syncer/module-loader.js +17 -1
  52. package/dist/syncer/syncer.d.ts +5 -1
  53. package/dist/syncer/syncer.d.ts.map +1 -1
  54. package/dist/syncer/syncer.js +28 -19
  55. package/dist/tasks/decorator.d.ts +26 -0
  56. package/dist/tasks/decorator.d.ts.map +1 -0
  57. package/dist/tasks/decorator.js +28 -0
  58. package/dist/tasks/step-wrapper.d.ts +18 -0
  59. package/dist/tasks/step-wrapper.d.ts.map +1 -0
  60. package/dist/tasks/step-wrapper.js +38 -0
  61. package/dist/tasks/workflow-manager.d.ts +40 -0
  62. package/dist/tasks/workflow-manager.d.ts.map +1 -0
  63. package/dist/tasks/workflow-manager.js +193 -0
  64. package/dist/template/implementations/generated.template.d.ts.map +1 -1
  65. package/dist/template/implementations/generated.template.js +7 -3
  66. package/dist/types/types.d.ts +26 -10
  67. package/dist/types/types.d.ts.map +1 -1
  68. package/dist/types/types.js +15 -2
  69. package/dist/ui/ai-api.d.ts +1 -0
  70. package/dist/ui/ai-api.d.ts.map +1 -0
  71. package/dist/ui/ai-api.js +50 -0
  72. package/dist/ui/ai-client.d.ts +1 -0
  73. package/dist/ui/ai-client.d.ts.map +1 -0
  74. package/dist/ui/ai-client.js +438 -0
  75. package/dist/ui/api.d.ts +3 -0
  76. package/dist/ui/api.d.ts.map +1 -0
  77. package/dist/ui/api.js +680 -0
  78. package/dist/ui-web/assets/brand-icons-Cu_C0hZ4.svg +1008 -0
  79. package/dist/ui-web/assets/brand-icons-F3SPCeH1.woff +0 -0
  80. package/dist/ui-web/assets/brand-icons-XL9sxUpA.woff2 +0 -0
  81. package/dist/ui-web/assets/brand-icons-sqJ2Pg7a.eot +0 -0
  82. package/dist/ui-web/assets/brand-icons-ubhWoxly.ttf +0 -0
  83. package/dist/ui-web/assets/flags-DOLqOU7Y.png +0 -0
  84. package/dist/ui-web/assets/icons-BOCtAERH.woff +0 -0
  85. package/dist/ui-web/assets/icons-CHzK1VD9.eot +0 -0
  86. package/dist/ui-web/assets/icons-D29ZQHHw.ttf +0 -0
  87. package/dist/ui-web/assets/icons-Du6TOHnR.woff2 +0 -0
  88. package/dist/ui-web/assets/icons-RwhydX30.svg +1518 -0
  89. package/dist/ui-web/assets/index-CpaB9P6g.css +1 -0
  90. package/dist/ui-web/assets/index-J9MCfjCd.js +95 -0
  91. package/dist/ui-web/assets/outline-icons-BfdLr8tr.svg +366 -0
  92. package/dist/ui-web/assets/outline-icons-DD8jm0uy.ttf +0 -0
  93. package/dist/ui-web/assets/outline-icons-DInHoiqI.woff2 +0 -0
  94. package/dist/ui-web/assets/outline-icons-LX8adJ4n.eot +0 -0
  95. package/dist/ui-web/assets/outline-icons-aQ88nltS.woff +0 -0
  96. package/dist/ui-web/assets/provider-utils_false-BKJD46kk.js +1 -0
  97. package/dist/ui-web/assets/provider-utils_false-Bu5lmX18.js +1 -0
  98. package/dist/ui-web/index.html +13 -0
  99. package/dist/ui-web/vite.svg +1 -0
  100. package/dist/utils/formatter.d.ts.map +1 -1
  101. package/dist/utils/formatter.js +10 -2
  102. package/dist/utils/model.d.ts +9 -2
  103. package/dist/utils/model.d.ts.map +1 -1
  104. package/dist/utils/model.js +16 -1
  105. package/dist/utils/type-utils.d.ts.map +1 -1
  106. package/dist/utils/type-utils.js +3 -1
  107. package/dist/vector/embedding.d.ts +2 -5
  108. package/dist/vector/embedding.d.ts.map +1 -1
  109. package/dist/vector/embedding.js +9 -13
  110. package/dist/vector/types.d.ts.map +1 -1
  111. package/dist/vector/types.js +1 -1
  112. package/package.json +9 -5
  113. package/src/api/config.ts +15 -11
  114. package/src/api/sonamu.ts +60 -6
  115. package/src/bin/cli.ts +57 -119
  116. package/src/database/base-model.ts +21 -128
  117. package/src/database/base-model.types.ts +3 -4
  118. package/src/database/db.ts +28 -18
  119. package/src/database/puri-subset.test-d.ts +1 -0
  120. package/src/database/puri-subset.types.ts +2 -0
  121. package/src/database/puri.ts +238 -27
  122. package/src/database/puri.types.test-d.ts +1 -1
  123. package/src/database/puri.types.ts +49 -6
  124. package/src/entity/entity-manager.ts +9 -0
  125. package/src/index.ts +1 -1
  126. package/src/migration/code-generation.ts +40 -1
  127. package/src/migration/postgresql-schema-reader.ts +53 -22
  128. package/src/naite/messaging-types.ts +43 -44
  129. package/src/naite/naite.ts +1 -1
  130. package/src/shared/app.shared.ts.txt +13 -0
  131. package/src/shared/web.shared.ts.txt +13 -0
  132. package/src/stream/sse.ts +15 -3
  133. package/src/syncer/api-parser.ts +6 -1
  134. package/src/syncer/file-patterns.ts +11 -9
  135. package/src/syncer/module-loader.ts +35 -0
  136. package/src/syncer/syncer.ts +34 -21
  137. package/src/tasks/decorator.ts +71 -0
  138. package/src/tasks/step-wrapper.ts +84 -0
  139. package/src/tasks/workflow-manager.ts +330 -0
  140. package/src/template/implementations/generated.template.ts +19 -6
  141. package/src/types/types.ts +20 -4
  142. package/src/ui/ai-api.ts +60 -0
  143. package/src/ui/ai-client.ts +499 -0
  144. package/src/ui/api.ts +786 -0
  145. package/src/utils/formatter.ts +8 -1
  146. package/src/utils/model.ts +26 -2
  147. package/src/utils/type-utils.ts +2 -0
  148. package/src/vector/embedding.ts +10 -14
  149. package/src/vector/types.ts +1 -2
  150. package/dist/vector/vector-search.d.ts +0 -47
  151. package/dist/vector/vector-search.d.ts.map +0 -1
  152. package/dist/vector/vector-search.js +0 -176
  153. package/src/vector/vector-search.ts +0 -261
@@ -104,7 +104,15 @@ export function formatCode(code, parser, filePath) {
104
104
  throw new Error("Biome lint error");
105
105
  }
106
106
  Naite.t("formatCode:linted", linted);
107
- return linted.content;
107
+ // 포맷팅 한 번 더 (import 구문에 type 키워드 추가되는 경우 maxWidth 초과로 인한 에러 발생)
108
+ const formattedAgain = biome.formatContent(projectKey, linted.content, {
109
+ filePath
110
+ });
111
+ if (formattedAgain.diagnostics.filter((d)=>d.severity === "error").length > 0) {
112
+ console.error(formattedAgain.diagnostics);
113
+ throw new Error("Biome format error");
114
+ }
115
+ return formattedAgain.content;
108
116
  }
109
117
 
110
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9mb3JtYXR0ZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQmlvbWUgfSBmcm9tIFwiQGJpb21lanMvanMtYXBpL25vZGVqc1wiO1xuaW1wb3J0IHsgTmFpdGUgfSBmcm9tIFwiLi4vbmFpdGUvbmFpdGVcIjtcbmltcG9ydCB7IGlzVGVzdCB9IGZyb20gXCIuL2NvbnRyb2xsZXJcIjtcblxuY29uc3QgYmlvbWUgPSBuZXcgQmlvbWUoKTtcbmxldCBwcm9qZWN0S2V5OiBudW1iZXIgPSAtMTtcblxuZXhwb3J0IGZ1bmN0aW9uIHNldHVwQmlvbWUocGF0aDogc3RyaW5nKSB7XG4gIGlmIChwcm9qZWN0S2V5ICE9PSAtMSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHByb2plY3RLZXkgPSBiaW9tZS5vcGVuUHJvamVjdChwYXRoKS5wcm9qZWN0S2V5O1xuICBiaW9tZS5hcHBseUNvbmZpZ3VyYXRpb24ocHJvamVjdEtleSwge1xuICAgIGZvcm1hdHRlcjoge1xuICAgICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAgIGZvcm1hdFdpdGhFcnJvcnM6IGZhbHNlLFxuICAgICAgaW5kZW50U3R5bGU6IFwic3BhY2VcIixcbiAgICAgIGluZGVudFdpZHRoOiAyLFxuICAgICAgbGluZUVuZGluZzogXCJsZlwiLFxuICAgICAgbGluZVdpZHRoOiAxMDAsXG4gICAgICBhdHRyaWJ1dGVQb3NpdGlvbjogXCJhdXRvXCIsXG4gICAgfSxcbiAgICBsaW50ZXI6IHtcbiAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICBydWxlczoge1xuICAgICAgICByZWNvbW1lbmRlZDogdHJ1ZSxcbiAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICB1c2VOb2RlanNJbXBvcnRQcm90b2NvbDogXCJvZmZcIixcbiAgICAgICAgfSxcbiAgICAgICAgY29ycmVjdG5lc3M6IHtcbiAgICAgICAgICB1c2VQYXJzZUludFJhZGl4OiBcIm9mZlwiLFxuICAgICAgICAgIG5vRW1wdHlQYXR0ZXJuOiBcIm9mZlwiLFxuICAgICAgICAgIG5vVW51c2VkSW1wb3J0czoge1xuICAgICAgICAgICAgbGV2ZWw6IFwid2FyblwiLFxuICAgICAgICAgICAgZml4OiBcInNhZmVcIixcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBhMTF5OiB7XG4gICAgICAgICAgbm9MYWJlbFdpdGhvdXRDb250cm9sOiBcIm9mZlwiLFxuICAgICAgICB9LFxuICAgICAgICBjb21wbGV4aXR5OiB7XG4gICAgICAgICAgbm9CYW5uZWRUeXBlczogXCJvZmZcIixcbiAgICAgICAgfSxcbiAgICAgICAgc3VzcGljaW91czoge1xuICAgICAgICAgIG5vQXJyYXlJbmRleEtleTogXCJvZmZcIixcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBqYXZhc2NyaXB0OiB7XG4gICAgICBmb3JtYXR0ZXI6IHtcbiAgICAgICAganN4UXVvdGVTdHlsZTogXCJkb3VibGVcIixcbiAgICAgICAgcXVvdGVQcm9wZXJ0aWVzOiBcImFzTmVlZGVkXCIsXG4gICAgICAgIHRyYWlsaW5nQ29tbWFzOiBcImFsbFwiLFxuICAgICAgICBzZW1pY29sb25zOiBcImFsd2F5c1wiLFxuICAgICAgICBhcnJvd1BhcmVudGhlc2VzOiBcImFsd2F5c1wiLFxuICAgICAgICBicmFja2V0U3BhY2luZzogdHJ1ZSxcbiAgICAgICAgYnJhY2tldFNhbWVMaW5lOiBmYWxzZSxcbiAgICAgICAgcXVvdGVTdHlsZTogXCJkb3VibGVcIixcbiAgICAgICAgYXR0cmlidXRlUG9zaXRpb246IFwiYXV0b1wiLFxuICAgICAgfSxcbiAgICB9LFxuICAgIGpzb246IHtcbiAgICAgIGZvcm1hdHRlcjoge1xuICAgICAgICBpbmRlbnRXaWR0aDogMixcbiAgICAgIH0sXG4gICAgfSxcbiAgICBhc3Npc3Q6IHtcbiAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICBhY3Rpb25zOiB7XG4gICAgICAgIHNvdXJjZToge1xuICAgICAgICAgIG9yZ2FuaXplSW1wb3J0czogXCJvblwiLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9LFxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdENvZGUoY29kZTogc3RyaW5nLCBwYXJzZXI6IFwidHlwZXNjcmlwdFwiIHwgXCJqc29uXCIsIGZpbGVQYXRoOiBzdHJpbmcpIHtcbiAgTmFpdGUudChcImZvcm1hdENvZGVcIiwgeyBjb2RlLCBwYXJzZXIgfSk7XG5cbiAgaWYgKHByb2plY3RLZXkgPT09IC0xKSB7XG4gICAgY29uc29sZS53YXJuKFwiQmlvbWUgaXMgbm90IHNldHVwLiBQbGVhc2UgY2FsbCBzZXR1cEJpb21lIGZpcnN0LlwiKTtcbiAgICByZXR1cm4gY29kZTtcbiAgfVxuXG4gIC8vIO2PrOunt+2MheydhCDrqLzsoIAg7ZW07JW87ZWoXG4gIGNvbnN0IGZvcm1hdHRlZCA9IGJpb21lLmZvcm1hdENvbnRlbnQocHJvamVjdEtleSwgY29kZSwgeyBmaWxlUGF0aCB9KTtcbiAgTmFpdGUudChcImZvcm1hdENvZGU6Zm9ybWF0dGVkXCIsIGZvcm1hdHRlZCk7XG4gIGlmIChmb3JtYXR0ZWQuZGlhZ25vc3RpY3MuZmlsdGVyKChkKSA9PiBkLnNldmVyaXR5ID09PSBcImVycm9yXCIpLmxlbmd0aCA+IDApIHtcbiAgICBjb25zb2xlLmVycm9yKGZvcm1hdHRlZC5kaWFnbm9zdGljcyk7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQmlvbWUgZm9ybWF0IGVycm9yXCIpO1xuICB9XG5cbiAgLy8g66aw7YyF7J2EIOq3uCDri6TsnYzsl5BcbiAgY29uc3QgbGludGVkID0gYmlvbWUubGludENvbnRlbnQocHJvamVjdEtleSwgZm9ybWF0dGVkLmNvbnRlbnQsIHtcbiAgICBmaWxlUGF0aCxcbiAgICBmaXhGaWxlTW9kZTogXCJzYWZlQW5kVW5zYWZlRml4ZXNcIixcbiAgfSk7XG4gIGlmIChsaW50ZWQuZGlhZ25vc3RpY3MuZmlsdGVyKChkKSA9PiBkLnNldmVyaXR5ID09PSBcImVycm9yXCIpLmxlbmd0aCA+IDApIHtcbiAgICBOYWl0ZS50KFwiZm9ybWF0Q29kZTpsaW50ZWQ6Y29udGVudFwiLCBsaW50ZWQuY29udGVudCk7XG4gICAgTmFpdGUudChcImZvcm1hdENvZGU6bGludGVkOmRpYWdub3N0aWNzXCIsIGxpbnRlZC5kaWFnbm9zdGljcyk7XG4gICAgIWlzVGVzdCgpICYmIGNvbnNvbGUuZGlyKGxpbnRlZC5kaWFnbm9zdGljcywgeyBkZXB0aDogbnVsbCB9KTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJCaW9tZSBsaW50IGVycm9yXCIpO1xuICB9XG4gIE5haXRlLnQoXCJmb3JtYXRDb2RlOmxpbnRlZFwiLCBsaW50ZWQpO1xuXG4gIHJldHVybiBsaW50ZWQuY29udGVudDtcbn1cbiJdLCJuYW1lcyI6WyJCaW9tZSIsIk5haXRlIiwiaXNUZXN0IiwiYmlvbWUiLCJwcm9qZWN0S2V5Iiwic2V0dXBCaW9tZSIsInBhdGgiLCJvcGVuUHJvamVjdCIsImFwcGx5Q29uZmlndXJhdGlvbiIsImZvcm1hdHRlciIsImVuYWJsZWQiLCJmb3JtYXRXaXRoRXJyb3JzIiwiaW5kZW50U3R5bGUiLCJpbmRlbnRXaWR0aCIsImxpbmVFbmRpbmciLCJsaW5lV2lkdGgiLCJhdHRyaWJ1dGVQb3NpdGlvbiIsImxpbnRlciIsInJ1bGVzIiwicmVjb21tZW5kZWQiLCJzdHlsZSIsInVzZU5vZGVqc0ltcG9ydFByb3RvY29sIiwiY29ycmVjdG5lc3MiLCJ1c2VQYXJzZUludFJhZGl4Iiwibm9FbXB0eVBhdHRlcm4iLCJub1VudXNlZEltcG9ydHMiLCJsZXZlbCIsImZpeCIsImExMXkiLCJub0xhYmVsV2l0aG91dENvbnRyb2wiLCJjb21wbGV4aXR5Iiwibm9CYW5uZWRUeXBlcyIsInN1c3BpY2lvdXMiLCJub0FycmF5SW5kZXhLZXkiLCJqYXZhc2NyaXB0IiwianN4UXVvdGVTdHlsZSIsInF1b3RlUHJvcGVydGllcyIsInRyYWlsaW5nQ29tbWFzIiwic2VtaWNvbG9ucyIsImFycm93UGFyZW50aGVzZXMiLCJicmFja2V0U3BhY2luZyIsImJyYWNrZXRTYW1lTGluZSIsInF1b3RlU3R5bGUiLCJqc29uIiwiYXNzaXN0IiwiYWN0aW9ucyIsInNvdXJjZSIsIm9yZ2FuaXplSW1wb3J0cyIsImZvcm1hdENvZGUiLCJjb2RlIiwicGFyc2VyIiwiZmlsZVBhdGgiLCJ0IiwiY29uc29sZSIsIndhcm4iLCJmb3JtYXR0ZWQiLCJmb3JtYXRDb250ZW50IiwiZGlhZ25vc3RpY3MiLCJmaWx0ZXIiLCJkIiwic2V2ZXJpdHkiLCJsZW5ndGgiLCJlcnJvciIsIkVycm9yIiwibGludGVkIiwibGludENvbnRlbnQiLCJjb250ZW50IiwiZml4RmlsZU1vZGUiLCJkaXIiLCJkZXB0aCJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsS0FBSyxRQUFRLHlCQUF5QjtBQUMvQyxTQUFTQyxLQUFLLFFBQVEsb0JBQWlCO0FBQ3ZDLFNBQVNDLE1BQU0sUUFBUSxrQkFBZTtBQUV0QyxNQUFNQyxRQUFRLElBQUlIO0FBQ2xCLElBQUlJLGFBQXFCLENBQUM7QUFFMUIsT0FBTyxTQUFTQyxXQUFXQyxJQUFZO0lBQ3JDLElBQUlGLGVBQWUsQ0FBQyxHQUFHO1FBQ3JCO0lBQ0Y7SUFFQUEsYUFBYUQsTUFBTUksV0FBVyxDQUFDRCxNQUFNRixVQUFVO0lBQy9DRCxNQUFNSyxrQkFBa0IsQ0FBQ0osWUFBWTtRQUNuQ0ssV0FBVztZQUNUQyxTQUFTO1lBQ1RDLGtCQUFrQjtZQUNsQkMsYUFBYTtZQUNiQyxhQUFhO1lBQ2JDLFlBQVk7WUFDWkMsV0FBVztZQUNYQyxtQkFBbUI7UUFDckI7UUFDQUMsUUFBUTtZQUNOUCxTQUFTO1lBQ1RRLE9BQU87Z0JBQ0xDLGFBQWE7Z0JBQ2JDLE9BQU87b0JBQ0xDLHlCQUF5QjtnQkFDM0I7Z0JBQ0FDLGFBQWE7b0JBQ1hDLGtCQUFrQjtvQkFDbEJDLGdCQUFnQjtvQkFDaEJDLGlCQUFpQjt3QkFDZkMsT0FBTzt3QkFDUEMsS0FBSztvQkFDUDtnQkFDRjtnQkFDQUMsTUFBTTtvQkFDSkMsdUJBQXVCO2dCQUN6QjtnQkFDQUMsWUFBWTtvQkFDVkMsZUFBZTtnQkFDakI7Z0JBQ0FDLFlBQVk7b0JBQ1ZDLGlCQUFpQjtnQkFDbkI7WUFDRjtRQUNGO1FBQ0FDLFlBQVk7WUFDVnpCLFdBQVc7Z0JBQ1QwQixlQUFlO2dCQUNmQyxpQkFBaUI7Z0JBQ2pCQyxnQkFBZ0I7Z0JBQ2hCQyxZQUFZO2dCQUNaQyxrQkFBa0I7Z0JBQ2xCQyxnQkFBZ0I7Z0JBQ2hCQyxpQkFBaUI7Z0JBQ2pCQyxZQUFZO2dCQUNaMUIsbUJBQW1CO1lBQ3JCO1FBQ0Y7UUFDQTJCLE1BQU07WUFDSmxDLFdBQVc7Z0JBQ1RJLGFBQWE7WUFDZjtRQUNGO1FBQ0ErQixRQUFRO1lBQ05sQyxTQUFTO1lBQ1RtQyxTQUFTO2dCQUNQQyxRQUFRO29CQUNOQyxpQkFBaUI7Z0JBQ25CO1lBQ0Y7UUFDRjtJQUNGO0FBQ0Y7QUFFQSxPQUFPLFNBQVNDLFdBQVdDLElBQVksRUFBRUMsTUFBNkIsRUFBRUMsUUFBZ0I7SUFDdEZsRCxNQUFNbUQsQ0FBQyxDQUFDLGNBQWM7UUFBRUg7UUFBTUM7SUFBTztJQUVyQyxJQUFJOUMsZUFBZSxDQUFDLEdBQUc7UUFDckJpRCxRQUFRQyxJQUFJLENBQUM7UUFDYixPQUFPTDtJQUNUO0lBRUEsY0FBYztJQUNkLE1BQU1NLFlBQVlwRCxNQUFNcUQsYUFBYSxDQUFDcEQsWUFBWTZDLE1BQU07UUFBRUU7SUFBUztJQUNuRWxELE1BQU1tRCxDQUFDLENBQUMsd0JBQXdCRztJQUNoQyxJQUFJQSxVQUFVRSxXQUFXLENBQUNDLE1BQU0sQ0FBQyxDQUFDQyxJQUFNQSxFQUFFQyxRQUFRLEtBQUssU0FBU0MsTUFBTSxHQUFHLEdBQUc7UUFDMUVSLFFBQVFTLEtBQUssQ0FBQ1AsVUFBVUUsV0FBVztRQUNuQyxNQUFNLElBQUlNLE1BQU07SUFDbEI7SUFFQSxZQUFZO0lBQ1osTUFBTUMsU0FBUzdELE1BQU04RCxXQUFXLENBQUM3RCxZQUFZbUQsVUFBVVcsT0FBTyxFQUFFO1FBQzlEZjtRQUNBZ0IsYUFBYTtJQUNmO0lBQ0EsSUFBSUgsT0FBT1AsV0FBVyxDQUFDQyxNQUFNLENBQUMsQ0FBQ0MsSUFBTUEsRUFBRUMsUUFBUSxLQUFLLFNBQVNDLE1BQU0sR0FBRyxHQUFHO1FBQ3ZFNUQsTUFBTW1ELENBQUMsQ0FBQyw2QkFBNkJZLE9BQU9FLE9BQU87UUFDbkRqRSxNQUFNbUQsQ0FBQyxDQUFDLGlDQUFpQ1ksT0FBT1AsV0FBVztRQUMzRCxDQUFDdkQsWUFBWW1ELFFBQVFlLEdBQUcsQ0FBQ0osT0FBT1AsV0FBVyxFQUFFO1lBQUVZLE9BQU87UUFBSztRQUMzRCxNQUFNLElBQUlOLE1BQU07SUFDbEI7SUFDQTlELE1BQU1tRCxDQUFDLENBQUMscUJBQXFCWTtJQUU3QixPQUFPQSxPQUFPRSxPQUFPO0FBQ3ZCIn0=
118
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9mb3JtYXR0ZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQmlvbWUgfSBmcm9tIFwiQGJpb21lanMvanMtYXBpL25vZGVqc1wiO1xuaW1wb3J0IHsgTmFpdGUgfSBmcm9tIFwiLi4vbmFpdGUvbmFpdGVcIjtcbmltcG9ydCB7IGlzVGVzdCB9IGZyb20gXCIuL2NvbnRyb2xsZXJcIjtcblxuY29uc3QgYmlvbWUgPSBuZXcgQmlvbWUoKTtcbmxldCBwcm9qZWN0S2V5OiBudW1iZXIgPSAtMTtcblxuZXhwb3J0IGZ1bmN0aW9uIHNldHVwQmlvbWUocGF0aDogc3RyaW5nKSB7XG4gIGlmIChwcm9qZWN0S2V5ICE9PSAtMSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHByb2plY3RLZXkgPSBiaW9tZS5vcGVuUHJvamVjdChwYXRoKS5wcm9qZWN0S2V5O1xuICBiaW9tZS5hcHBseUNvbmZpZ3VyYXRpb24ocHJvamVjdEtleSwge1xuICAgIGZvcm1hdHRlcjoge1xuICAgICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAgIGZvcm1hdFdpdGhFcnJvcnM6IGZhbHNlLFxuICAgICAgaW5kZW50U3R5bGU6IFwic3BhY2VcIixcbiAgICAgIGluZGVudFdpZHRoOiAyLFxuICAgICAgbGluZUVuZGluZzogXCJsZlwiLFxuICAgICAgbGluZVdpZHRoOiAxMDAsXG4gICAgICBhdHRyaWJ1dGVQb3NpdGlvbjogXCJhdXRvXCIsXG4gICAgfSxcbiAgICBsaW50ZXI6IHtcbiAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICBydWxlczoge1xuICAgICAgICByZWNvbW1lbmRlZDogdHJ1ZSxcbiAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICB1c2VOb2RlanNJbXBvcnRQcm90b2NvbDogXCJvZmZcIixcbiAgICAgICAgfSxcbiAgICAgICAgY29ycmVjdG5lc3M6IHtcbiAgICAgICAgICB1c2VQYXJzZUludFJhZGl4OiBcIm9mZlwiLFxuICAgICAgICAgIG5vRW1wdHlQYXR0ZXJuOiBcIm9mZlwiLFxuICAgICAgICAgIG5vVW51c2VkSW1wb3J0czoge1xuICAgICAgICAgICAgbGV2ZWw6IFwid2FyblwiLFxuICAgICAgICAgICAgZml4OiBcInNhZmVcIixcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBhMTF5OiB7XG4gICAgICAgICAgbm9MYWJlbFdpdGhvdXRDb250cm9sOiBcIm9mZlwiLFxuICAgICAgICB9LFxuICAgICAgICBjb21wbGV4aXR5OiB7XG4gICAgICAgICAgbm9CYW5uZWRUeXBlczogXCJvZmZcIixcbiAgICAgICAgfSxcbiAgICAgICAgc3VzcGljaW91czoge1xuICAgICAgICAgIG5vQXJyYXlJbmRleEtleTogXCJvZmZcIixcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBqYXZhc2NyaXB0OiB7XG4gICAgICBmb3JtYXR0ZXI6IHtcbiAgICAgICAganN4UXVvdGVTdHlsZTogXCJkb3VibGVcIixcbiAgICAgICAgcXVvdGVQcm9wZXJ0aWVzOiBcImFzTmVlZGVkXCIsXG4gICAgICAgIHRyYWlsaW5nQ29tbWFzOiBcImFsbFwiLFxuICAgICAgICBzZW1pY29sb25zOiBcImFsd2F5c1wiLFxuICAgICAgICBhcnJvd1BhcmVudGhlc2VzOiBcImFsd2F5c1wiLFxuICAgICAgICBicmFja2V0U3BhY2luZzogdHJ1ZSxcbiAgICAgICAgYnJhY2tldFNhbWVMaW5lOiBmYWxzZSxcbiAgICAgICAgcXVvdGVTdHlsZTogXCJkb3VibGVcIixcbiAgICAgICAgYXR0cmlidXRlUG9zaXRpb246IFwiYXV0b1wiLFxuICAgICAgfSxcbiAgICB9LFxuICAgIGpzb246IHtcbiAgICAgIGZvcm1hdHRlcjoge1xuICAgICAgICBpbmRlbnRXaWR0aDogMixcbiAgICAgIH0sXG4gICAgfSxcbiAgICBhc3Npc3Q6IHtcbiAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICBhY3Rpb25zOiB7XG4gICAgICAgIHNvdXJjZToge1xuICAgICAgICAgIG9yZ2FuaXplSW1wb3J0czogXCJvblwiLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9LFxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdENvZGUoY29kZTogc3RyaW5nLCBwYXJzZXI6IFwidHlwZXNjcmlwdFwiIHwgXCJqc29uXCIsIGZpbGVQYXRoOiBzdHJpbmcpIHtcbiAgTmFpdGUudChcImZvcm1hdENvZGVcIiwgeyBjb2RlLCBwYXJzZXIgfSk7XG5cbiAgaWYgKHByb2plY3RLZXkgPT09IC0xKSB7XG4gICAgY29uc29sZS53YXJuKFwiQmlvbWUgaXMgbm90IHNldHVwLiBQbGVhc2UgY2FsbCBzZXR1cEJpb21lIGZpcnN0LlwiKTtcbiAgICByZXR1cm4gY29kZTtcbiAgfVxuXG4gIC8vIO2PrOunt+2MheydhCDrqLzsoIAg7ZW07JW87ZWoXG4gIGNvbnN0IGZvcm1hdHRlZCA9IGJpb21lLmZvcm1hdENvbnRlbnQocHJvamVjdEtleSwgY29kZSwgeyBmaWxlUGF0aCB9KTtcbiAgTmFpdGUudChcImZvcm1hdENvZGU6Zm9ybWF0dGVkXCIsIGZvcm1hdHRlZCk7XG4gIGlmIChmb3JtYXR0ZWQuZGlhZ25vc3RpY3MuZmlsdGVyKChkKSA9PiBkLnNldmVyaXR5ID09PSBcImVycm9yXCIpLmxlbmd0aCA+IDApIHtcbiAgICBjb25zb2xlLmVycm9yKGZvcm1hdHRlZC5kaWFnbm9zdGljcyk7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQmlvbWUgZm9ybWF0IGVycm9yXCIpO1xuICB9XG5cbiAgLy8g66aw7YyF7J2EIOq3uCDri6TsnYzsl5BcbiAgY29uc3QgbGludGVkID0gYmlvbWUubGludENvbnRlbnQocHJvamVjdEtleSwgZm9ybWF0dGVkLmNvbnRlbnQsIHtcbiAgICBmaWxlUGF0aCxcbiAgICBmaXhGaWxlTW9kZTogXCJzYWZlQW5kVW5zYWZlRml4ZXNcIixcbiAgfSk7XG4gIGlmIChsaW50ZWQuZGlhZ25vc3RpY3MuZmlsdGVyKChkKSA9PiBkLnNldmVyaXR5ID09PSBcImVycm9yXCIpLmxlbmd0aCA+IDApIHtcbiAgICBOYWl0ZS50KFwiZm9ybWF0Q29kZTpsaW50ZWQ6Y29udGVudFwiLCBsaW50ZWQuY29udGVudCk7XG4gICAgTmFpdGUudChcImZvcm1hdENvZGU6bGludGVkOmRpYWdub3N0aWNzXCIsIGxpbnRlZC5kaWFnbm9zdGljcyk7XG4gICAgIWlzVGVzdCgpICYmIGNvbnNvbGUuZGlyKGxpbnRlZC5kaWFnbm9zdGljcywgeyBkZXB0aDogbnVsbCB9KTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJCaW9tZSBsaW50IGVycm9yXCIpO1xuICB9XG4gIE5haXRlLnQoXCJmb3JtYXRDb2RlOmxpbnRlZFwiLCBsaW50ZWQpO1xuXG4gIC8vIO2PrOunt+2MhSDtlZwg67KIIOuNlCAoaW1wb3J0IOq1rOusuOyXkCB0eXBlIO2CpOybjOuTnCDstpTqsIDrkJjripQg6rK97JqwIG1heFdpZHRoIOy0iOqzvOuhnCDsnbjtlZwg7JeQ65+sIOuwnOyDnSlcbiAgY29uc3QgZm9ybWF0dGVkQWdhaW4gPSBiaW9tZS5mb3JtYXRDb250ZW50KHByb2plY3RLZXksIGxpbnRlZC5jb250ZW50LCB7IGZpbGVQYXRoIH0pO1xuICBpZiAoZm9ybWF0dGVkQWdhaW4uZGlhZ25vc3RpY3MuZmlsdGVyKChkKSA9PiBkLnNldmVyaXR5ID09PSBcImVycm9yXCIpLmxlbmd0aCA+IDApIHtcbiAgICBjb25zb2xlLmVycm9yKGZvcm1hdHRlZEFnYWluLmRpYWdub3N0aWNzKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJCaW9tZSBmb3JtYXQgZXJyb3JcIik7XG4gIH1cblxuICByZXR1cm4gZm9ybWF0dGVkQWdhaW4uY29udGVudDtcbn1cbiJdLCJuYW1lcyI6WyJCaW9tZSIsIk5haXRlIiwiaXNUZXN0IiwiYmlvbWUiLCJwcm9qZWN0S2V5Iiwic2V0dXBCaW9tZSIsInBhdGgiLCJvcGVuUHJvamVjdCIsImFwcGx5Q29uZmlndXJhdGlvbiIsImZvcm1hdHRlciIsImVuYWJsZWQiLCJmb3JtYXRXaXRoRXJyb3JzIiwiaW5kZW50U3R5bGUiLCJpbmRlbnRXaWR0aCIsImxpbmVFbmRpbmciLCJsaW5lV2lkdGgiLCJhdHRyaWJ1dGVQb3NpdGlvbiIsImxpbnRlciIsInJ1bGVzIiwicmVjb21tZW5kZWQiLCJzdHlsZSIsInVzZU5vZGVqc0ltcG9ydFByb3RvY29sIiwiY29ycmVjdG5lc3MiLCJ1c2VQYXJzZUludFJhZGl4Iiwibm9FbXB0eVBhdHRlcm4iLCJub1VudXNlZEltcG9ydHMiLCJsZXZlbCIsImZpeCIsImExMXkiLCJub0xhYmVsV2l0aG91dENvbnRyb2wiLCJjb21wbGV4aXR5Iiwibm9CYW5uZWRUeXBlcyIsInN1c3BpY2lvdXMiLCJub0FycmF5SW5kZXhLZXkiLCJqYXZhc2NyaXB0IiwianN4UXVvdGVTdHlsZSIsInF1b3RlUHJvcGVydGllcyIsInRyYWlsaW5nQ29tbWFzIiwic2VtaWNvbG9ucyIsImFycm93UGFyZW50aGVzZXMiLCJicmFja2V0U3BhY2luZyIsImJyYWNrZXRTYW1lTGluZSIsInF1b3RlU3R5bGUiLCJqc29uIiwiYXNzaXN0IiwiYWN0aW9ucyIsInNvdXJjZSIsIm9yZ2FuaXplSW1wb3J0cyIsImZvcm1hdENvZGUiLCJjb2RlIiwicGFyc2VyIiwiZmlsZVBhdGgiLCJ0IiwiY29uc29sZSIsIndhcm4iLCJmb3JtYXR0ZWQiLCJmb3JtYXRDb250ZW50IiwiZGlhZ25vc3RpY3MiLCJmaWx0ZXIiLCJkIiwic2V2ZXJpdHkiLCJsZW5ndGgiLCJlcnJvciIsIkVycm9yIiwibGludGVkIiwibGludENvbnRlbnQiLCJjb250ZW50IiwiZml4RmlsZU1vZGUiLCJkaXIiLCJkZXB0aCIsImZvcm1hdHRlZEFnYWluIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUFTQSxLQUFLLFFBQVEseUJBQXlCO0FBQy9DLFNBQVNDLEtBQUssUUFBUSxvQkFBaUI7QUFDdkMsU0FBU0MsTUFBTSxRQUFRLGtCQUFlO0FBRXRDLE1BQU1DLFFBQVEsSUFBSUg7QUFDbEIsSUFBSUksYUFBcUIsQ0FBQztB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
@@ -1,12 +1,17 @@
1
1
  import type { SonamuQueryMode } from "..";
2
+ type WithSimilarity<LP, T> = LP extends {
3
+ semanticQuery: Record<string, unknown>;
4
+ } ? T & {
5
+ similarity: number;
6
+ } : T;
2
7
  export type ListResult<LP extends {
3
8
  queryMode?: SonamuQueryMode;
4
9
  }, T> = LP["queryMode"] extends "list" ? {
5
- rows: T[];
10
+ rows: WithSimilarity<LP, T>[];
6
11
  } : LP["queryMode"] extends "count" ? {
7
12
  total: number;
8
13
  } : {
9
- rows: T[];
14
+ rows: WithSimilarity<LP, T>[];
10
15
  total: number;
11
16
  };
12
17
  export type ArrayOr<T> = T | T[];
@@ -20,5 +25,7 @@ export interface BaseListParams {
20
25
  page?: number;
21
26
  keyword?: string;
22
27
  queryMode?: "list" | "count" | "both";
28
+ semanticQuery?: Record<string, unknown>;
23
29
  }
30
+ export {};
24
31
  //# sourceMappingURL=model.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../src/utils/model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,IAAI,CAAC;AAE1C,MAAM,MAAM,UAAU,CACpB,EAAE,SAAS;IAAE,SAAS,CAAC,EAAE,eAAe,CAAA;CAAE,EAC1C,CAAC,IACC,EAAE,CAAC,WAAW,CAAC,SAAS,MAAM,GAC9B;IAAE,IAAI,EAAE,CAAC,EAAE,CAAA;CAAE,GACb,EAAE,CAAC,WAAW,CAAC,SAAS,OAAO,GAC7B;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,GACjB;IAAE,IAAI,EAAE,CAAC,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEnC,MAAM,MAAM,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;AAEjC,wBAAgB,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,CAM9C;AAED,wBAAgB,QAAQ,CAAC,CAAC,EAAE,GAAG,EAAE;IAAE,CAAC,CAAC,EAAE,MAAM,GAAG,CAAC,CAAA;CAAE,mCAOlD;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACvB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;CACvC"}
1
+ {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../src/utils/model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,IAAI,CAAC;AAG1C,KAAK,cAAc,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,SAAS;IAAE,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,GAC9E,CAAC,GAAG;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,GAC1B,CAAC,CAAC;AAEN,MAAM,MAAM,UAAU,CACpB,EAAE,SAAS;IAAE,SAAS,CAAC,EAAE,eAAe,CAAA;CAAE,EAC1C,CAAC,IACC,EAAE,CAAC,WAAW,CAAC,SAAS,MAAM,GAC9B;IAAE,IAAI,EAAE,cAAc,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAA;CAAE,GACjC,EAAE,CAAC,WAAW,CAAC,SAAS,OAAO,GAC7B;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,GACjB;IAAE,IAAI,EAAE,cAAc,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEvD,MAAM,MAAM,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;AAEjC,wBAAgB,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,CAM9C;AAED,wBAAgB,QAAQ,CAAC,CAAC,EAAE,GAAG,EAAE;IAAE,CAAC,CAAC,EAAE,MAAM,GAAG,CAAC,CAAA;CAAE,mCAOlD;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACvB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;IACtC,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACzC"}
@@ -18,5 +18,20 @@ export function objToMap(obj) {
18
18
  return new Map(Object.entries(obj));
19
19
  }
20
20
  }
21
+ // const a: ListResult<{ queryMode: "list"; semanticQuery: {} }, { id: number; name: string }> = {
22
+ // rows: [{ id: 1, name: "test", similarity: 0.5 }],
23
+ // };
24
+ // a.rows[0].similarity;
25
+ // // const b: ListResult<{ queryMode: "count" }, { id: number; name: string }> = {
26
+ // // total: 1,
27
+ // // };
28
+ // const c: ListResult<
29
+ // { queryMode: "both"; semanticQuery: { embedding: number[] } },
30
+ // { id: number; name: string }
31
+ // > = {
32
+ // rows: [{ id: 1, name: "test", similarity: 0.5 }],
33
+ // total: 1,
34
+ // };
35
+ // c.rows[0].similarity;
21
36
 
22
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9tb2RlbC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFNvbmFtdVF1ZXJ5TW9kZSB9IGZyb20gXCIuLlwiO1xuXG5leHBvcnQgdHlwZSBMaXN0UmVzdWx0PFxuICBMUCBleHRlbmRzIHsgcXVlcnlNb2RlPzogU29uYW11UXVlcnlNb2RlIH0sXG4gIFQsXG4+ID0gTFBbXCJxdWVyeU1vZGVcIl0gZXh0ZW5kcyBcImxpc3RcIlxuICA/IHsgcm93czogVFtdIH1cbiAgOiBMUFtcInF1ZXJ5TW9kZVwiXSBleHRlbmRzIFwiY291bnRcIlxuICAgID8geyB0b3RhbDogbnVtYmVyIH1cbiAgICA6IHsgcm93czogVFtdOyB0b3RhbDogbnVtYmVyIH07XG5cbmV4cG9ydCB0eXBlIEFycmF5T3I8VD4gPSBUIHwgVFtdO1xuXG5leHBvcnQgZnVuY3Rpb24gYXNBcnJheTxUPihwYXJhbTogVCB8IFRbXSk6IFRbXSB7XG4gIGlmIChBcnJheS5pc0FycmF5KHBhcmFtKSkge1xuICAgIHJldHVybiBwYXJhbTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gW3BhcmFtIGFzIFRdIGFzIFRbXTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gb2JqVG9NYXA8VD4ob2JqOiB7IFtrOiBzdHJpbmddOiBUIH0pIHtcbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG9iaik7XG4gIGlmIChrZXlzLmV2ZXJ5KChrZXkpID0+IHBhcnNlSW50KGtleSkudG9TdHJpbmcoKSA9PT0ga2V5KSkge1xuICAgIHJldHVybiBuZXcgTWFwPG51bWJlciwgVD4oa2V5cy5tYXAoKGtleSkgPT4gW3BhcnNlSW50KGtleSksIG9ialtrZXldXSkpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBuZXcgTWFwPHN0cmluZywgVD4oT2JqZWN0LmVudHJpZXMob2JqKSk7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBCYXNlTGlzdFBhcmFtcyB7XG4gIGlkPzogbnVtYmVyIHwgbnVtYmVyW107XG4gIG51bT86IG51bWJlcjtcbiAgcGFnZT86IG51bWJlcjtcbiAga2V5d29yZD86IHN0cmluZztcbiAgcXVlcnlNb2RlPzogXCJsaXN0XCIgfCBcImNvdW50XCIgfCBcImJvdGhcIjtcbn1cbiJdLCJuYW1lcyI6WyJhc0FycmF5IiwicGFyYW0iLCJBcnJheSIsImlzQXJyYXkiLCJvYmpUb01hcCIsIm9iaiIsImtleXMiLCJPYmplY3QiLCJldmVyeSIsImtleSIsInBhcnNlSW50IiwidG9TdHJpbmciLCJNYXAiLCJtYXAiLCJlbnRyaWVzIl0sIm1hcHBpbmdzIjoiQUFhQSxPQUFPLFNBQVNBLFFBQVdDLEtBQWM7SUFDdkMsSUFBSUMsTUFBTUMsT0FBTyxDQUFDRixRQUFRO1FBQ3hCLE9BQU9BO0lBQ1QsT0FBTztRQUNMLE9BQU87WUFBQ0E7U0FBVztJQUNyQjtBQUNGO0FBRUEsT0FBTyxTQUFTRyxTQUFZQyxHQUF1QjtJQUNqRCxNQUFNQyxPQUFPQyxPQUFPRCxJQUFJLENBQUNEO0lBQ3pCLElBQUlDLEtBQUtFLEtBQUssQ0FBQyxDQUFDQyxNQUFRQyxTQUFTRCxLQUFLRSxRQUFRLE9BQU9GLE1BQU07UUFDekQsT0FBTyxJQUFJRyxJQUFlTixLQUFLTyxHQUFHLENBQUMsQ0FBQ0osTUFBUTtnQkFBQ0MsU0FBU0Q7Z0JBQU1KLEdBQUcsQ0FBQ0ksSUFBSTthQUFDO0lBQ3ZFLE9BQU87UUFDTCxPQUFPLElBQUlHLElBQWVMLE9BQU9PLE9BQU8sQ0FBQ1Q7SUFDM0M7QUFDRiJ9
37
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9tb2RlbC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFNvbmFtdVF1ZXJ5TW9kZSB9IGZyb20gXCIuLlwiO1xuXG4vLyBzZW1hbnRpY1F1ZXJ56rCAIOyeiOycvOuptCBzaW1pbGFyaXR566W8IOy2lOqwgO2VmOuKlCDsobDqsbTrtoAg7YOA7J6FXG50eXBlIFdpdGhTaW1pbGFyaXR5PExQLCBUPiA9IExQIGV4dGVuZHMgeyBzZW1hbnRpY1F1ZXJ5OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB9XG4gID8gVCAmIHsgc2ltaWxhcml0eTogbnVtYmVyIH1cbiAgOiBUO1xuXG5leHBvcnQgdHlwZSBMaXN0UmVzdWx0PFxuICBMUCBleHRlbmRzIHsgcXVlcnlNb2RlPzogU29uYW11UXVlcnlNb2RlIH0sXG4gIFQsXG4+ID0gTFBbXCJxdWVyeU1vZGVcIl0gZXh0ZW5kcyBcImxpc3RcIlxuICA/IHsgcm93czogV2l0aFNpbWlsYXJpdHk8TFAsIFQ+W10gfVxuICA6IExQW1wicXVlcnlNb2RlXCJdIGV4dGVuZHMgXCJjb3VudFwiXG4gICAgPyB7IHRvdGFsOiBudW1iZXIgfVxuICAgIDogeyByb3dzOiBXaXRoU2ltaWxhcml0eTxMUCwgVD5bXTsgdG90YWw6IG51bWJlciB9O1xuXG5leHBvcnQgdHlwZSBBcnJheU9yPFQ+ID0gVCB8IFRbXTtcblxuZXhwb3J0IGZ1bmN0aW9uIGFzQXJyYXk8VD4ocGFyYW06IFQgfCBUW10pOiBUW10ge1xuICBpZiAoQXJyYXkuaXNBcnJheShwYXJhbSkpIHtcbiAgICByZXR1cm4gcGFyYW07XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIFtwYXJhbSBhcyBUXSBhcyBUW107XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG9ialRvTWFwPFQ+KG9iajogeyBbazogc3RyaW5nXTogVCB9KSB7XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhvYmopO1xuICBpZiAoa2V5cy5ldmVyeSgoa2V5KSA9PiBwYXJzZUludChrZXkpLnRvU3RyaW5nKCkgPT09IGtleSkpIHtcbiAgICByZXR1cm4gbmV3IE1hcDxudW1iZXIsIFQ+KGtleXMubWFwKChrZXkpID0+IFtwYXJzZUludChrZXkpLCBvYmpba2V5XV0pKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbmV3IE1hcDxzdHJpbmcsIFQ+KE9iamVjdC5lbnRyaWVzKG9iaikpO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQmFzZUxpc3RQYXJhbXMge1xuICBpZD86IG51bWJlciB8IG51bWJlcltdO1xuICBudW0/OiBudW1iZXI7XG4gIHBhZ2U/OiBudW1iZXI7XG4gIGtleXdvcmQ/OiBzdHJpbmc7XG4gIHF1ZXJ5TW9kZT86IFwibGlzdFwiIHwgXCJjb3VudFwiIHwgXCJib3RoXCI7XG4gIHNlbWFudGljUXVlcnk/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn1cblxuLy8gY29uc3QgYTogTGlzdFJlc3VsdDx7IHF1ZXJ5TW9kZTogXCJsaXN0XCI7IHNlbWFudGljUXVlcnk6IHt9IH0sIHsgaWQ6IG51bWJlcjsgbmFtZTogc3RyaW5nIH0+ID0ge1xuLy8gICByb3dzOiBbeyBpZDogMSwgbmFtZTogXCJ0ZXN0XCIsIHNpbWlsYXJpdHk6IDAuNSB9XSxcbi8vIH07XG4vLyBhLnJvd3NbMF0uc2ltaWxhcml0eTtcblxuLy8gLy8gY29uc3QgYjogTGlzdFJlc3VsdDx7IHF1ZXJ5TW9kZTogXCJjb3VudFwiIH0sIHsgaWQ6IG51bWJlcjsgbmFtZTogc3RyaW5nIH0+ID0ge1xuLy8gLy8gICB0b3RhbDogMSxcbi8vIC8vIH07XG5cbi8vIGNvbnN0IGM6IExpc3RSZXN1bHQ8XG4vLyAgIHsgcXVlcnlNb2RlOiBcImJvdGhcIjsgc2VtYW50aWNRdWVyeTogeyBlbWJlZGRpbmc6IG51bWJlcltdIH0gfSxcbi8vICAgeyBpZDogbnVtYmVyOyBuYW1lOiBzdHJpbmcgfVxuLy8gPiA9IHtcbi8vICAgcm93czogW3sgaWQ6IDEsIG5hbWU6IFwidGVzdFwiLCBzaW1pbGFyaXR5OiAwLjUgfV0sXG4vLyAgIHRvdGFsOiAxLFxuLy8gfTtcbi8vIGMucm93c1swXS5zaW1pbGFyaXR5O1xuIl0sIm5hbWVzIjpbImFzQXJyYXkiLCJwYXJhbSIsIkFycmF5IiwiaXNBcnJheSIsIm9ialRvTWFwIiwib2JqIiwia2V5cyIsIk9iamVjdCIsImV2ZXJ5Iiwia2V5IiwicGFyc2VJbnQiLCJ0b1N0cmluZyIsIk1hcCIsIm1hcCIsImVudHJpZXMiXSwibWFwcGluZ3MiOiJBQWtCQSxPQUFPLFNBQVNBLFFBQVdDLEtBQWM7SUFDdkMsSUFBSUMsTUFBTUMsT0FBTyxDQUFDRixRQUFRO1FBQ3hCLE9BQU9BO0lBQ1QsT0FBTztRQUNMLE9BQU87WUFBQ0E7U0FBVztJQUNyQjtBQUNGO0FBRUEsT0FBTyxTQUFTRyxTQUFZQyxHQUF1QjtJQUNqRCxNQUFNQyxPQUFPQyxPQUFPRCxJQUFJLENBQUNEO0lBQ3pCLElBQUlDLEtBQUtFLEtBQUssQ0FBQyxDQUFDQyxNQUFRQyxTQUFTRCxLQUFLRSxRQUFRLE9BQU9GLE1BQU07UUFDekQsT0FBTyxJQUFJRyxJQUFlTixLQUFLTyxHQUFHLENBQUMsQ0FBQ0osTUFBUTtnQkFBQ0MsU0FBU0Q7Z0JBQU1KLEdBQUcsQ0FBQ0ksSUFBSTthQUFDO0lBQ3ZFLE9BQU87UUFDTCxPQUFPLElBQUlHLElBQWVMLE9BQU9PLE9BQU8sQ0FBQ1Q7SUFDM0M7QUFDRjtDQVdBLGtHQUFrRztDQUNsRyxzREFBc0Q7Q0FDdEQsS0FBSztDQUNMLHdCQUF3QjtDQUV4QixtRkFBbUY7Q0FDbkYsaUJBQWlCO0NBQ2pCLFFBQVE7Q0FFUix1QkFBdUI7Q0FDdkIsbUVBQW1FO0NBQ25FLGlDQUFpQztDQUNqQyxRQUFRO0NBQ1Isc0RBQXNEO0NBQ3RELGNBQWM7Q0FDZCxLQUFLO0NBQ0wsd0JBQXdCIn0=
@@ -1 +1 @@
1
- {"version":3,"file":"type-utils.d.ts","sourceRoot":"","sources":["../../src/utils/type-utils.ts"],"names":[],"mappings":"AACA,KAAK,MAAM,CAAC,CAAC,IAAI,CAAC,SAAS,MAAM,CAAC,GAAG;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAE,GAAG,KAAK,CAAC;AAGtE,KAAK,OAAO,CAAC,CAAC,EAAE,CAAC,SAAS,MAAM,EAAE,CAAC,IAAI,CAAC,SAAS,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,GACjE,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,GAElB,CAAC,SAAS,GAAG,MAAM,CAAC,IAAI,MAAM,IAAI,EAAE,GAClC,CAAC,SAAS,MAAM,CAAC,GAEf,MAAM,CAAC;KACJ,GAAG,IAAI,MAAM,CAAC,GAAG,GAAG,SAAS,CAAC,GAC3B,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,GACtB,CAAC,CAAC,GAAG,CAAC;CACX,CAAC,GAEF,MAAM,CAAC,CAAC,GAAG;KAAG,GAAG,IAAI,CAAC,GAAG,OAAO,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;CAAE,CAAC,GAElD,CAAC,SAAS,MAAM,CAAC,GAEf,MAAM,CAAC;KAAG,GAAG,IAAI,MAAM,CAAC,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC;CAAE,CAAC,GAExD,MAAM,CAAC,CAAC,GAAG;KAAG,GAAG,IAAI,CAAC,GAAG,CAAC;CAAE,CAAC,CAAC;AAEtC,wBAAgB,QAAQ,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,MAAM,EAAE,CAAC,EAC5D,GAAG,EAAE,CAAC,EACN,IAAI,EAAE,CAAC,EACP,KAAK,EAAE,CAAC,GACP,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAiClB;AAED,UAAU,YAAY,CAAC,CAAC;IAEtB,GAAG,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAG5E,KAAK,IAAI,CAAC,CAAC;CACZ;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,CAAC,SAAS,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAQnE"}
1
+ {"version":3,"file":"type-utils.d.ts","sourceRoot":"","sources":["../../src/utils/type-utils.ts"],"names":[],"mappings":"AACA,KAAK,MAAM,CAAC,CAAC,IAAI,CAAC,SAAS,MAAM,CAAC,GAAG;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAE,GAAG,KAAK,CAAC;AAGtE,KAAK,OAAO,CAAC,CAAC,EAAE,CAAC,SAAS,MAAM,EAAE,CAAC,IAAI,CAAC,SAAS,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,GACjE,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,GAElB,CAAC,SAAS,GAAG,MAAM,CAAC,IAAI,MAAM,IAAI,EAAE,GAClC,CAAC,SAAS,MAAM,CAAC,GAEf,MAAM,CAAC;KACJ,GAAG,IAAI,MAAM,CAAC,GAAG,GAAG,SAAS,CAAC,GAC3B,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,GACtB,CAAC,CAAC,GAAG,CAAC;CACX,CAAC,GAEF,MAAM,CAAC,CAAC,GAAG;KAAG,GAAG,IAAI,CAAC,GAAG,OAAO,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;CAAE,CAAC,GAElD,CAAC,SAAS,MAAM,CAAC,GAEf,MAAM,CAAC;KAAG,GAAG,IAAI,MAAM,CAAC,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC;CAAE,CAAC,GAExD,MAAM,CAAC,CAAC,GAAG;KAAG,GAAG,IAAI,CAAC,GAAG,CAAC;CAAE,CAAC,CAAC;AAEtC,wBAAgB,QAAQ,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,MAAM,EAAE,CAAC,EAC5D,GAAG,EAAE,CAAC,EACN,IAAI,EAAE,CAAC,EACP,KAAK,EAAE,CAAC,GACP,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAmClB;AAED,UAAU,YAAY,CAAC,CAAC;IAEtB,GAAG,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAG5E,KAAK,IAAI,CAAC,CAAC;CACZ;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,CAAC,SAAS,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAQnE"}
@@ -3,6 +3,7 @@ export function withProp(obj, path, value) {
3
3
  const keys = path.split(".");
4
4
  if (keys.length === 0) throw new Error("Path cannot be empty");
5
5
  const result = structuredClone(obj);
6
+ // biome-ignore lint/suspicious/noExplicitAny: 범용 배열 요소 타입
6
7
  const setDeep = (current, keys, value)=>{
7
8
  if (keys.length === 0) return;
8
9
  const [key, ...rest] = keys;
@@ -19,6 +20,7 @@ export function withProp(obj, path, value) {
19
20
  current[key] = {};
20
21
  }
21
22
  if (Array.isArray(current[key])) {
23
+ // biome-ignore lint/suspicious/noExplicitAny: 범용 배열 요소 타입
22
24
  current[key].forEach((item)=>{
23
25
  setDeep(item, rest, value);
24
26
  });
@@ -42,4 +44,4 @@ export function withProp(obj, path, value) {
42
44
  };
43
45
  }
44
46
 
45
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy90eXBlLXV0aWxzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIO2DgOyeheydhCDtjrzss5DshJwg67O07Jes7KO864qUIOycoO2LuOumrO2LsCAo6rCd7LK07JeQ66eMIOyCrOyaqe2VtOyVvCDtlagpXG50eXBlIEV4cGFuZDxUPiA9IFQgZXh0ZW5kcyBpbmZlciBPID8geyBbSyBpbiBrZXlvZiBPXTogT1tLXSB9IDogbmV2ZXI7XG5cbi8vIO2VteyLrCDroZzsp4FcbnR5cGUgU2V0UGF0aDxULCBQIGV4dGVuZHMgc3RyaW5nLCBWPiA9IFQgZXh0ZW5kcyByZWFkb25seSAoaW5mZXIgVSlbXSAvLyBbU3RlcCAxXSDtmITsnqwg7YOA7J6F7J20IOuwsOyXtOyduOqwgD8gLT4g7JqU7IaMKFUp7JeQIOuMgO2VtCDsnqzqt4Ag7Zi47LacIO2bhCDrsLDsl7TroZwg6rCQ7IyIXG4gID8gU2V0UGF0aDxVLCBQLCBWPltdXG4gIDogLy8gW1N0ZXAgMl0g6rK966Gc6rCAIOygkCguKeycvOuhnCDrgpjriZjripTqsIA/XG4gICAgUCBleHRlbmRzIGAke2luZmVyIEt9LiR7aW5mZXIgUmVzdH1gXG4gICAgPyBLIGV4dGVuZHMga2V5b2YgVFxuICAgICAgPyAvLyBbU3RlcCAyLTFdIO2CpOqwgCDsobTsnqztlahcbiAgICAgICAgRXhwYW5kPHtcbiAgICAgICAgICBbS2V5IGluIGtleW9mIFRdOiBLZXkgZXh0ZW5kcyBLXG4gICAgICAgICAgICA/IFNldFBhdGg8VFtLXSwgUmVzdCwgVj4gLy8g7J6s6reAIO2YuOy2nFxuICAgICAgICAgICAgOiBUW0tleV07XG4gICAgICAgIH0+XG4gICAgICA6IC8vIFtTdGVwIDItMl0g7YKk6rCAIOyXhuydjCAo7IOI66Gc7Jq0IOqwneyytCDqsr3roZwg7IOd7ISxKVxuICAgICAgICBFeHBhbmQ8VCAmIHsgW0tleSBpbiBLXTogU2V0UGF0aDx7fSwgUmVzdCwgVj4gfT5cbiAgICA6IC8vIFtTdGVwIDNdIOqyveuhnOydmCDrp4jsp4Drp4kgKEJhc2UgQ2FzZSlcbiAgICAgIFAgZXh0ZW5kcyBrZXlvZiBUXG4gICAgICA/IC8vIFtTdGVwIDMtMV0g6riw7KG0IO2CpCDrja7slrTsk7DquLAgKOq1kOywqCDtg4DsnoUgJiDrjIDsi6Ag7KGw6rG067aAIO2DgOyeheycvOuhnCDsmYTsoIQg6rWQ7LK0KVxuICAgICAgICBFeHBhbmQ8eyBbS2V5IGluIGtleW9mIFRdOiBLZXkgZXh0ZW5kcyBQID8gViA6IFRbS2V5XSB9PlxuICAgICAgOiAvLyBbU3RlcCAzLTJdIOyDiCDtgqQg7LaU6rCAXG4gICAgICAgIEV4cGFuZDxUICYgeyBbS2V5IGluIFBdOiBWIH0+O1xuXG5leHBvcnQgZnVuY3Rpb24gd2l0aFByb3A8VCBleHRlbmRzIG9iamVjdCwgUCBleHRlbmRzIHN0cmluZywgVj4oXG4gIG9iajogVCxcbiAgcGF0aDogUCxcbiAgdmFsdWU6IFYsXG4pOiBTZXRQYXRoPFQsIFAsIFY+IHtcbiAgY29uc3Qga2V5cyA9IHBhdGguc3BsaXQoXCIuXCIpO1xuICBpZiAoa2V5cy5sZW5ndGggPT09IDApIHRocm93IG5ldyBFcnJvcihcIlBhdGggY2Fubm90IGJlIGVtcHR5XCIpO1xuICBjb25zdCByZXN1bHQgPSBzdHJ1Y3R1cmVkQ2xvbmUob2JqKTtcblxuICBjb25zdCBzZXREZWVwID0gKGN1cnJlbnQ6IGFueSwga2V5czogc3RyaW5nW10sIHZhbHVlOiBWKTogdm9pZCA9PiB7XG4gICAgaWYgKGtleXMubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgY29uc3QgW2tleSwgLi4ucmVzdF0gPSBrZXlzO1xuXG4gICAgaWYgKHJlc3QubGVuZ3RoID09PSAwKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShjdXJyZW50KSkge1xuICAgICAgICBjdXJyZW50LmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICBpdGVtW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjdXJyZW50W2tleV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCEoa2V5IGluIGN1cnJlbnQpIHx8IHR5cGVvZiBjdXJyZW50W2tleV0gIT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgY3VycmVudFtrZXldID0ge307XG4gICAgICB9XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShjdXJyZW50W2tleV0pKSB7XG4gICAgICAgIGN1cnJlbnRba2V5XS5mb3JFYWNoKChpdGVtOiBhbnkpID0+IHtcbiAgICAgICAgICBzZXREZWVwKGl0ZW0sIHJlc3QsIHZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXREZWVwKGN1cnJlbnRba2V5XSwgcmVzdCwgdmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBzZXREZWVwKHJlc3VsdCwga2V5cywgdmFsdWUpO1xuICByZXR1cm4gcmVzdWx0IGFzIFNldFBhdGg8VCwgUCwgVj47XG59XG5cbmludGVyZmFjZSBDaGFpbldyYXBwZXI8VD4ge1xuICAvLyDqsr3roZzsl5Ag6rCS7J2EIOyEpOygle2VmOqzoCDrs4Dqsr3rkJwg7YOA7J6F7J2YIOyDiOuhnOyatCDssrTsnbgg656Y7Y2866W8IOuwmO2ZmO2VqeuLiOuLpC5cbiAgc2V0PFAgZXh0ZW5kcyBzdHJpbmcsIFY+KHBhdGg6IFAsIHZhbHVlOiBWKTogQ2hhaW5XcmFwcGVyPFNldFBhdGg8VCwgUCwgVj4+O1xuXG4gIC8vIOy1nOyihSDqsrDqs7wg6rCd7LK066W8IOuwmO2ZmO2VqeuLiOuLpC5cbiAgdmFsdWUoKTogVDtcbn1cblxuLyoqXG4gKiDqsJ3ssrTrpbwg6rCQ7Iu47IScIOyytOydtOuLneydhCDsi5zsnpHtlanri4jri6QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3aXRoUHJvcHM8VCBleHRlbmRzIG9iamVjdD4ob2JqOiBUKTogQ2hhaW5XcmFwcGVyPFQ+IHtcbiAgcmV0dXJuIHtcbiAgICBzZXQ6IDxQIGV4dGVuZHMgc3RyaW5nLCBWPihwYXRoOiBQLCB2YWx1ZTogVikgPT4ge1xuICAgICAgY29uc3QgbmV4dE9iaiA9IHdpdGhQcm9wKG9iaiwgcGF0aCwgdmFsdWUpO1xuICAgICAgcmV0dXJuIHdpdGhQcm9wcyhuZXh0T2JqKSBhcyBDaGFpbldyYXBwZXI8U2V0UGF0aDxULCBQLCBWPj47XG4gICAgfSxcbiAgICB2YWx1ZTogKCkgPT4gb2JqLFxuICB9O1xufVxuIl0sIm5hbWVzIjpbIndpdGhQcm9wIiwib2JqIiwicGF0aCIsInZhbHVlIiwia2V5cyIsInNwbGl0IiwibGVuZ3RoIiwiRXJyb3IiLCJyZXN1bHQiLCJzdHJ1Y3R1cmVkQ2xvbmUiLCJzZXREZWVwIiwiY3VycmVudCIsImtleSIsInJlc3QiLCJBcnJheSIsImlzQXJyYXkiLCJmb3JFYWNoIiwiaXRlbSIsIndpdGhQcm9wcyIsInNldCIsIm5leHRPYmoiXSwibWFwcGluZ3MiOiJBQUFBLGtDQUFrQztBQXdCbEMsT0FBTyxTQUFTQSxTQUNkQyxHQUFNLEVBQ05DLElBQU8sRUFDUEMsS0FBUTtJQUVSLE1BQU1DLE9BQU9GLEtBQUtHLEtBQUssQ0FBQztJQUN4QixJQUFJRCxLQUFLRSxNQUFNLEtBQUssR0FBRyxNQUFNLElBQUlDLE1BQU07SUFDdkMsTUFBTUMsU0FBU0MsZ0JBQWdCUjtJQUUvQixNQUFNUyxVQUFVLENBQUNDLFNBQWNQLE1BQWdCRDtRQUM3QyxJQUFJQyxLQUFLRSxNQUFNLEtBQUssR0FBRztRQUN2QixNQUFNLENBQUNNLEtBQUssR0FBR0MsS0FBSyxHQUFHVDtRQUV2QixJQUFJUyxLQUFLUCxNQUFNLEtBQUssR0FBRztZQUNyQixJQUFJUSxNQUFNQyxPQUFPLENBQUNKLFVBQVU7Z0JBQzFCQSxRQUFRSyxPQUFPLENBQUMsQ0FBQ0M7b0JBQ2ZBLElBQUksQ0FBQ0wsSUFBSSxHQUFHVDtnQkFDZDtZQUNGLE9BQU87Z0JBQ0xRLE9BQU8sQ0FBQ0MsSUFBSSxHQUFHVDtZQUNqQjtRQUNGLE9BQU87WUFDTCxJQUFJLENBQUVTLENBQUFBLE9BQU9ELE9BQU0sS0FBTSxPQUFPQSxPQUFPLENBQUNDLElBQUksS0FBSyxVQUFVO2dCQUN6REQsT0FBTyxDQUFDQyxJQUFJLEdBQUcsQ0FBQztZQUNsQjtZQUNBLElBQUlFLE1BQU1DLE9BQU8sQ0FBQ0osT0FBTyxDQUFDQyxJQUFJLEdBQUc7Z0JBQy9CRCxPQUFPLENBQUNDLElBQUksQ0FBQ0ksT0FBTyxDQUFDLENBQUNDO29CQUNwQlAsUUFBUU8sTUFBTUosTUFBTVY7Z0JBQ3RCO1lBQ0YsT0FBTztnQkFDTE8sUUFBUUMsT0FBTyxDQUFDQyxJQUFJLEVBQUVDLE1BQU1WO1lBQzlCO1FBQ0Y7SUFDRjtJQUVBTyxRQUFRRixRQUFRSixNQUFNRDtJQUN0QixPQUFPSztBQUNUO0FBVUE7O0NBRUMsR0FDRCxPQUFPLFNBQVNVLFVBQTRCakIsR0FBTTtJQUNoRCxPQUFPO1FBQ0xrQixLQUFLLENBQXNCakIsTUFBU0M7WUFDbEMsTUFBTWlCLFVBQVVwQixTQUFTQyxLQUFLQyxNQUFNQztZQUNwQyxPQUFPZSxVQUFVRTtRQUNuQjtRQUNBakIsT0FBTyxJQUFNRjtJQUNmO0FBQ0YifQ==
47
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy90eXBlLXV0aWxzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIO2DgOyeheydhCDtjrzss5DshJwg67O07Jes7KO864qUIOycoO2LuOumrO2LsCAo6rCd7LK07JeQ66eMIOyCrOyaqe2VtOyVvCDtlagpXG50eXBlIEV4cGFuZDxUPiA9IFQgZXh0ZW5kcyBpbmZlciBPID8geyBbSyBpbiBrZXlvZiBPXTogT1tLXSB9IDogbmV2ZXI7XG5cbi8vIO2VteyLrCDroZzsp4FcbnR5cGUgU2V0UGF0aDxULCBQIGV4dGVuZHMgc3RyaW5nLCBWPiA9IFQgZXh0ZW5kcyByZWFkb25seSAoaW5mZXIgVSlbXSAvLyBbU3RlcCAxXSDtmITsnqwg7YOA7J6F7J20IOuwsOyXtOyduOqwgD8gLT4g7JqU7IaMKFUp7JeQIOuMgO2VtCDsnqzqt4Ag7Zi47LacIO2bhCDrsLDsl7TroZwg6rCQ7IyIXG4gID8gU2V0UGF0aDxVLCBQLCBWPltdXG4gIDogLy8gW1N0ZXAgMl0g6rK966Gc6rCAIOygkCguKeycvOuhnCDrgpjriZjripTqsIA/XG4gICAgUCBleHRlbmRzIGAke2luZmVyIEt9LiR7aW5mZXIgUmVzdH1gXG4gICAgPyBLIGV4dGVuZHMga2V5b2YgVFxuICAgICAgPyAvLyBbU3RlcCAyLTFdIO2CpOqwgCDsobTsnqztlahcbiAgICAgICAgRXhwYW5kPHtcbiAgICAgICAgICBbS2V5IGluIGtleW9mIFRdOiBLZXkgZXh0ZW5kcyBLXG4gICAgICAgICAgICA/IFNldFBhdGg8VFtLXSwgUmVzdCwgVj4gLy8g7J6s6reAIO2YuOy2nFxuICAgICAgICAgICAgOiBUW0tleV07XG4gICAgICAgIH0+XG4gICAgICA6IC8vIFtTdGVwIDItMl0g7YKk6rCAIOyXhuydjCAo7IOI66Gc7Jq0IOqwneyytCDqsr3roZwg7IOd7ISxKVxuICAgICAgICBFeHBhbmQ8VCAmIHsgW0tleSBpbiBLXTogU2V0UGF0aDx7fSwgUmVzdCwgVj4gfT5cbiAgICA6IC8vIFtTdGVwIDNdIOqyveuhnOydmCDrp4jsp4Drp4kgKEJhc2UgQ2FzZSlcbiAgICAgIFAgZXh0ZW5kcyBrZXlvZiBUXG4gICAgICA/IC8vIFtTdGVwIDMtMV0g6riw7KG0IO2CpCDrja7slrTsk7DquLAgKOq1kOywqCDtg4DsnoUgJiDrjIDsi6Ag7KGw6rG067aAIO2DgOyeheycvOuhnCDsmYTsoIQg6rWQ7LK0KVxuICAgICAgICBFeHBhbmQ8eyBbS2V5IGluIGtleW9mIFRdOiBLZXkgZXh0ZW5kcyBQID8gViA6IFRbS2V5XSB9PlxuICAgICAgOiAvLyBbU3RlcCAzLTJdIOyDiCDtgqQg7LaU6rCAXG4gICAgICAgIEV4cGFuZDxUICYgeyBbS2V5IGluIFBdOiBWIH0+O1xuXG5leHBvcnQgZnVuY3Rpb24gd2l0aFByb3A8VCBleHRlbmRzIG9iamVjdCwgUCBleHRlbmRzIHN0cmluZywgVj4oXG4gIG9iajogVCxcbiAgcGF0aDogUCxcbiAgdmFsdWU6IFYsXG4pOiBTZXRQYXRoPFQsIFAsIFY+IHtcbiAgY29uc3Qga2V5cyA9IHBhdGguc3BsaXQoXCIuXCIpO1xuICBpZiAoa2V5cy5sZW5ndGggPT09IDApIHRocm93IG5ldyBFcnJvcihcIlBhdGggY2Fubm90IGJlIGVtcHR5XCIpO1xuICBjb25zdCByZXN1bHQgPSBzdHJ1Y3R1cmVkQ2xvbmUob2JqKTtcblxuICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vRXhwbGljaXRBbnk6IOuylOyaqSDrsLDsl7Qg7JqU7IaMIO2DgOyehVxuICBjb25zdCBzZXREZWVwID0gKGN1cnJlbnQ6IGFueSwga2V5czogc3RyaW5nW10sIHZhbHVlOiBWKTogdm9pZCA9PiB7XG4gICAgaWYgKGtleXMubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgY29uc3QgW2tleSwgLi4ucmVzdF0gPSBrZXlzO1xuXG4gICAgaWYgKHJlc3QubGVuZ3RoID09PSAwKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShjdXJyZW50KSkge1xuICAgICAgICBjdXJyZW50LmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICBpdGVtW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjdXJyZW50W2tleV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCEoa2V5IGluIGN1cnJlbnQpIHx8IHR5cGVvZiBjdXJyZW50W2tleV0gIT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgY3VycmVudFtrZXldID0ge307XG4gICAgICB9XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShjdXJyZW50W2tleV0pKSB7XG4gICAgICAgIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9FeHBsaWNpdEFueTog67KU7JqpIOuwsOyXtCDsmpTshowg7YOA7J6FXG4gICAgICAgIGN1cnJlbnRba2V5XS5mb3JFYWNoKChpdGVtOiBhbnkpID0+IHtcbiAgICAgICAgICBzZXREZWVwKGl0ZW0sIHJlc3QsIHZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXREZWVwKGN1cnJlbnRba2V5XSwgcmVzdCwgdmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBzZXREZWVwKHJlc3VsdCwga2V5cywgdmFsdWUpO1xuICByZXR1cm4gcmVzdWx0IGFzIFNldFBhdGg8VCwgUCwgVj47XG59XG5cbmludGVyZmFjZSBDaGFpbldyYXBwZXI8VD4ge1xuICAvLyDqsr3roZzsl5Ag6rCS7J2EIOyEpOygle2VmOqzoCDrs4Dqsr3rkJwg7YOA7J6F7J2YIOyDiOuhnOyatCDssrTsnbgg656Y7Y2866W8IOuwmO2ZmO2VqeuLiOuLpC5cbiAgc2V0PFAgZXh0ZW5kcyBzdHJpbmcsIFY+KHBhdGg6IFAsIHZhbHVlOiBWKTogQ2hhaW5XcmFwcGVyPFNldFBhdGg8VCwgUCwgVj4+O1xuXG4gIC8vIOy1nOyihSDqsrDqs7wg6rCd7LK066W8IOuwmO2ZmO2VqeuLiOuLpC5cbiAgdmFsdWUoKTogVDtcbn1cblxuLyoqXG4gKiDqsJ3ssrTrpbwg6rCQ7Iu47IScIOyytOydtOuLneydhCDsi5zsnpHtlanri4jri6QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3aXRoUHJvcHM8VCBleHRlbmRzIG9iamVjdD4ob2JqOiBUKTogQ2hhaW5XcmFwcGVyPFQ+IHtcbiAgcmV0dXJuIHtcbiAgICBzZXQ6IDxQIGV4dGVuZHMgc3RyaW5nLCBWPihwYXRoOiBQLCB2YWx1ZTogVikgPT4ge1xuICAgICAgY29uc3QgbmV4dE9iaiA9IHdpdGhQcm9wKG9iaiwgcGF0aCwgdmFsdWUpO1xuICAgICAgcmV0dXJuIHdpdGhQcm9wcyhuZXh0T2JqKSBhcyBDaGFpbldyYXBwZXI8U2V0UGF0aDxULCBQLCBWPj47XG4gICAgfSxcbiAgICB2YWx1ZTogKCkgPT4gb2JqLFxuICB9O1xufVxuIl0sIm5hbWVzIjpbIndpdGhQcm9wIiwib2JqIiwicGF0aCIsInZhbHVlIiwia2V5cyIsInNwbGl0IiwibGVuZ3RoIiwiRXJyb3IiLCJyZXN1bHQiLCJzdHJ1Y3R1cmVkQ2xvbmUiLCJzZXREZWVwIiwiY3VycmVudCIsImtleSIsInJlc3QiLCJBcnJheSIsImlzQXJyYXkiLCJmb3JFYWNoIiwiaXRlbSIsIndpdGhQcm9wcyIsInNldCIsIm5leHRPYmoiXSwibWFwcGluZ3MiOiJBQUFBLGtDQUFrQztBQXdCbEMsT0FBTyxTQUFTQSxTQUNkQyxHQUFNLEVBQ05DLElBQU8sRUFDUEMsS0FBUTtJQUVSLE1BQU1DLE9BQU9GLEtBQUtHLEtBQUssQ0FBQztJQUN4QixJQUFJRCxLQUFLRSxNQUFNLEtBQUssR0FBRyxNQUFNLElBQUlDLE1BQU07SUFDdkMsTUFBTUMsU0FBU0MsZ0JBQWdCUjtJQUUvQiwwREFBMEQ7SUFDMUQsTUFBTVMsVUFBVSxDQUFDQyxTQUFjUCxNQUFnQkQ7UUFDN0MsSUFBSUMsS0FBS0UsTUFBTSxLQUFLLEdBQUc7UUFDdkIsTUFBTSxDQUFDTSxLQUFLLEdBQUdDLEtBQUssR0FBR1Q7UUFFdkIsSUFBSVMsS0FBS1AsTUFBTSxLQUFLLEdBQUc7WUFDckIsSUFBSVEsTUFBTUMsT0FBTyxDQUFDSixVQUFVO2dCQUMxQkEsUUFBUUssT0FBTyxDQUFDLENBQUNDO29CQUNmQSxJQUFJLENBQUNMLElBQUksR0FBR1Q7Z0JBQ2Q7WUFDRixPQUFPO2dCQUNMUSxPQUFPLENBQUNDLElBQUksR0FBR1Q7WUFDakI7UUFDRixPQUFPO1lBQ0wsSUFBSSxDQUFFUyxDQUFBQSxPQUFPRCxPQUFNLEtBQU0sT0FBT0EsT0FBTyxDQUFDQyxJQUFJLEtBQUssVUFBVTtnQkFDekRELE9BQU8sQ0FBQ0MsSUFBSSxHQUFHLENBQUM7WUFDbEI7WUFDQSxJQUFJRSxNQUFNQyxPQUFPLENBQUNKLE9BQU8sQ0FBQ0MsSUFBSSxHQUFHO2dCQUMvQiwwREFBMEQ7Z0JBQzFERCxPQUFPLENBQUNDLElBQUksQ0FBQ0ksT0FBTyxDQUFDLENBQUNDO29CQUNwQlAsUUFBUU8sTUFBTUosTUFBTVY7Z0JBQ3RCO1lBQ0YsT0FBTztnQkFDTE8sUUFBUUMsT0FBTyxDQUFDQyxJQUFJLEVBQUVDLE1BQU1WO1lBQzlCO1FBQ0Y7SUFDRjtJQUVBTyxRQUFRRixRQUFRSixNQUFNRDtJQUN0QixPQUFPSztBQUNUO0FBVUE7O0NBRUMsR0FDRCxPQUFPLFNBQVNVLFVBQTRCakIsR0FBTTtJQUNoRCxPQUFPO1FBQ0xrQixLQUFLLENBQXNCakIsTUFBU0M7WUFDbEMsTUFBTWlCLFVBQVVwQixTQUFTQyxLQUFLQyxNQUFNQztZQUNwQyxPQUFPZSxVQUFVRTtRQUNuQjtRQUNBakIsT0FBTyxJQUFNRjtJQUNmO0FBQ0YifQ==
@@ -3,7 +3,7 @@ import type { EmbeddingProvider, EmbeddingResult, ProgressCallback, VectorConfig
3
3
  * 임베딩 클라이언트
4
4
  * Voyage AI와 OpenAI 임베딩을 SDK 방식으로 통합 지원
5
5
  */
6
- export declare class Embedding {
6
+ export declare class EmbeddingClass {
7
7
  private config;
8
8
  constructor(config?: Partial<VectorConfig>);
9
9
  /**
@@ -34,13 +34,10 @@ export declare class Embedding {
34
34
  * OpenAI 임베딩
35
35
  */
36
36
  private embedOpenAI;
37
- /**
38
- * 벡터를 PostgreSQL vector 타입 문자열로 변환
39
- */
40
- static toVectorString(embedding: number[]): string;
41
37
  /**
42
38
  * 임베딩 provider의 차원 수 반환
43
39
  */
44
40
  getDimensions(provider: EmbeddingProvider): number;
45
41
  }
42
+ export declare const Embedding: EmbeddingClass;
46
43
  //# sourceMappingURL=embedding.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"embedding.d.ts","sourceRoot":"","sources":["../../src/vector/embedding.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,iBAAiB,EACjB,eAAe,EACf,gBAAgB,EAChB,YAAY,EACZ,eAAe,EAChB,MAAM,SAAS,CAAC;AAEjB;;;GAGG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAAe;gBAEjB,MAAM,GAAE,OAAO,CAAC,YAAY,CAAM;IAU9C;;OAEG;IACH,OAAO,CAAC,eAAe;IAQvB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAQzB;;;;;;OAMG;IACG,KAAK,CACT,KAAK,EAAE,MAAM,EAAE,EACf,QAAQ,EAAE,iBAAiB,EAC3B,SAAS,GAAE,eAA4B,EACvC,UAAU,CAAC,EAAE,gBAAgB,GAC5B,OAAO,CAAC,eAAe,EAAE,CAAC;IA0B7B;;OAEG;IACG,QAAQ,CACZ,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,iBAAiB,EAC3B,SAAS,GAAE,eAA4B,GACtC,OAAO,CAAC,eAAe,CAAC;IAK3B;;OAEG;YACW,WAAW;IAuBzB;;OAEG;YACW,WAAW;IAiBzB;;OAEG;IACH,MAAM,CAAC,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,MAAM;IAIlD;;OAEG;IACH,aAAa,CAAC,QAAQ,EAAE,iBAAiB,GAAG,MAAM;CAGnD"}
1
+ {"version":3,"file":"embedding.d.ts","sourceRoot":"","sources":["../../src/vector/embedding.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,iBAAiB,EACjB,eAAe,EACf,gBAAgB,EAChB,YAAY,EACZ,eAAe,EAChB,MAAM,SAAS,CAAC;AAEjB;;;GAGG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAe;gBAEjB,MAAM,GAAE,OAAO,CAAC,YAAY,CAAM;IAU9C;;OAEG;YACW,eAAe;IAS7B;;OAEG;YACW,iBAAiB;IAS/B;;;;;;OAMG;IACG,KAAK,CACT,KAAK,EAAE,MAAM,EAAE,EACf,QAAQ,EAAE,iBAAiB,EAC3B,SAAS,GAAE,eAA4B,EACvC,UAAU,CAAC,EAAE,gBAAgB,GAC5B,OAAO,CAAC,eAAe,EAAE,CAAC;IA0B7B;;OAEG;IACG,QAAQ,CACZ,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,iBAAiB,EAC3B,SAAS,GAAE,eAA4B,GACtC,OAAO,CAAC,eAAe,CAAC;IAK3B;;OAEG;YACW,WAAW;IAuBzB;;OAEG;YACW,WAAW;IAiBzB;;OAEG;IACH,aAAa,CAAC,QAAQ,EAAE,iBAAiB,GAAG,MAAM;CAGnD;AACD,eAAO,MAAM,SAAS,gBAAuB,CAAC"}
@@ -1,12 +1,10 @@
1
- import { createOpenAI } from "@ai-sdk/openai";
2
1
  import { embedMany } from "ai";
3
- import { VoyageAIClient } from "voyageai";
4
2
  import { Sonamu } from "../api/sonamu.js";
5
3
  import { DEFAULT_VECTOR_CONFIG } from "./config.js";
6
4
  /**
7
5
  * 임베딩 클라이언트
8
6
  * Voyage AI와 OpenAI 임베딩을 SDK 방식으로 통합 지원
9
- */ export class Embedding {
7
+ */ export class EmbeddingClass {
10
8
  config;
11
9
  constructor(config = {}){
12
10
  this.config = {
@@ -34,7 +32,8 @@ import { DEFAULT_VECTOR_CONFIG } from "./config.js";
34
32
  }
35
33
  /**
36
34
  * Voyage AI 클라이언트 초기화
37
- */ getVoyageClient() {
35
+ */ async getVoyageClient() {
36
+ const { VoyageAIClient } = await import("voyageai");
38
37
  const apiKey = Sonamu.secrets?.voyage_api_key ?? process.env.VOYAGE_API_KEY;
39
38
  if (!apiKey) {
40
39
  throw new Error("VOYAGE_API_KEY가 설정되지 않았습니다. 환경변수를 확인하세요.");
@@ -45,7 +44,8 @@ import { DEFAULT_VECTOR_CONFIG } from "./config.js";
45
44
  }
46
45
  /**
47
46
  * OpenAI provider 생성
48
- */ getOpenAIProvider() {
47
+ */ async getOpenAIProvider() {
48
+ const { createOpenAI } = await import("@ai-sdk/openai");
49
49
  const apiKey = Sonamu.secrets?.openai_api_key ?? process.env.OPENAI_API_KEY;
50
50
  if (!apiKey) {
51
51
  throw new Error("OPENAI_API_KEY가 설정되지 않았습니다. 환경변수를 확인하세요.");
@@ -85,7 +85,7 @@ import { DEFAULT_VECTOR_CONFIG } from "./config.js";
85
85
  /**
86
86
  * Voyage AI 임베딩
87
87
  */ async embedVoyage(texts, inputType) {
88
- const client = this.getVoyageClient();
88
+ const client = await this.getVoyageClient();
89
89
  const voyageConfig = this.config.voyage;
90
90
  const response = await client.embed({
91
91
  input: texts,
@@ -104,7 +104,7 @@ import { DEFAULT_VECTOR_CONFIG } from "./config.js";
104
104
  /**
105
105
  * OpenAI 임베딩
106
106
  */ async embedOpenAI(texts) {
107
- const openai = this.getOpenAIProvider();
107
+ const openai = await this.getOpenAIProvider();
108
108
  const openaiConfig = this.config.openai;
109
109
  const model = openai.embeddingModel(openaiConfig.model);
110
110
  const { embeddings, usage } = await embedMany({
@@ -118,15 +118,11 @@ import { DEFAULT_VECTOR_CONFIG } from "./config.js";
118
118
  }));
119
119
  }
120
120
  /**
121
- * 벡터를 PostgreSQL vector 타입 문자열로 변환
122
- */ static toVectorString(embedding) {
123
- return `[${embedding.join(",")}]`;
124
- }
125
- /**
126
121
  * 임베딩 provider의 차원 수 반환
127
122
  */ getDimensions(provider) {
128
123
  return provider === "voyage" ? this.config.voyage.dimensions : this.config.openai.dimensions;
129
124
  }
130
125
  }
126
+ export const Embedding = new EmbeddingClass();
131
127
 
132
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy92ZWN0b3IvZW1iZWRkaW5nLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNyZWF0ZU9wZW5BSSwgdHlwZSBPcGVuQUlQcm92aWRlciB9IGZyb20gXCJAYWktc2RrL29wZW5haVwiO1xuaW1wb3J0IHsgdHlwZSBFbWJlZGRpbmdNb2RlbCwgZW1iZWRNYW55IH0gZnJvbSBcImFpXCI7XG5pbXBvcnQgeyBWb3lhZ2VBSUNsaWVudCB9IGZyb20gXCJ2b3lhZ2VhaVwiO1xuaW1wb3J0IHsgU29uYW11IH0gZnJvbSBcIi4uL2FwaS9zb25hbXVcIjtcbmltcG9ydCB7IERFRkFVTFRfVkVDVE9SX0NPTkZJRyB9IGZyb20gXCIuL2NvbmZpZ1wiO1xuaW1wb3J0IHR5cGUge1xuICBFbWJlZGRpbmdQcm92aWRlcixcbiAgRW1iZWRkaW5nUmVzdWx0LFxuICBQcm9ncmVzc0NhbGxiYWNrLFxuICBWZWN0b3JDb25maWcsXG4gIFZlY3RvcklucHV0VHlwZSxcbn0gZnJvbSBcIi4vdHlwZXNcIjtcblxuLyoqXG4gKiDsnoTrsqDrlKkg7YG065287J207Ja47Yq4XG4gKiBWb3lhZ2UgQUnsmYAgT3BlbkFJIOyehOuyoOuUqeydhCBTREsg67Cp7Iud7Jy866GcIO2Gte2VqSDsp4Dsm5BcbiAqL1xuZXhwb3J0IGNsYXNzIEVtYmVkZGluZyB7XG4gIHByaXZhdGUgY29uZmlnOiBWZWN0b3JDb25maWc7XG5cbiAgY29uc3RydWN0b3IoY29uZmlnOiBQYXJ0aWFsPFZlY3RvckNvbmZpZz4gPSB7fSkge1xuICAgIHRoaXMuY29uZmlnID0ge1xuICAgICAgdm95YWdlOiB7IC4uLkRFRkFVTFRfVkVDVE9SX0NPTkZJRy52b3lhZ2UsIC4uLmNvbmZpZy52b3lhZ2UgfSxcbiAgICAgIG9wZW5haTogeyAuLi5ERUZBVUxUX1ZFQ1RPUl9DT05GSUcub3BlbmFpLCAuLi5jb25maWcub3BlbmFpIH0sXG4gICAgICBjaHVua2luZzogeyAuLi5ERUZBVUxUX1ZFQ1RPUl9DT05GSUcuY2h1bmtpbmcsIC4uLmNvbmZpZy5jaHVua2luZyB9LFxuICAgICAgc2VhcmNoOiB7IC4uLkRFRkFVTFRfVkVDVE9SX0NPTkZJRy5zZWFyY2gsIC4uLmNvbmZpZy5zZWFyY2ggfSxcbiAgICAgIHBndmVjdG9yOiB7IC4uLkRFRkFVTFRfVkVDVE9SX0NPTkZJRy5wZ3ZlY3RvciwgLi4uY29uZmlnLnBndmVjdG9yIH0sXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWb3lhZ2UgQUkg7YG065287J207Ja47Yq4IOy0iOq4sO2ZlFxuICAgKi9cbiAgcHJpdmF0ZSBnZXRWb3lhZ2VDbGllbnQoKTogVm95YWdlQUlDbGllbnQge1xuICAgIGNvbnN0IGFwaUtleSA9IFNvbmFtdS5zZWNyZXRzPy52b3lhZ2VfYXBpX2tleSA/PyBwcm9jZXNzLmVudi5WT1lBR0VfQVBJX0tFWTtcbiAgICBpZiAoIWFwaUtleSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVk9ZQUdFX0FQSV9LRVnqsIAg7ISk7KCV65CY7KeAIOyViuyVmOyKteuLiOuLpC4g7ZmY6rK967OA7IiY66W8IO2ZleyduO2VmOyEuOyalC5cIik7XG4gICAgfVxuICAgIHJldHVybiBuZXcgVm95YWdlQUlDbGllbnQoeyBhcGlLZXkgfSk7XG4gIH1cblxuICAvKipcbiAgICogT3BlbkFJIHByb3ZpZGVyIOyDneyEsVxuICAgKi9cbiAgcHJpdmF0ZSBnZXRPcGVuQUlQcm92aWRlcigpOiBPcGVuQUlQcm92aWRlciB7XG4gICAgY29uc3QgYXBpS2V5ID0gU29uYW11LnNlY3JldHM/Lm9wZW5haV9hcGlfa2V5ID8/IHByb2Nlc3MuZW52Lk9QRU5BSV9BUElfS0VZO1xuICAgIGlmICghYXBpS2V5KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJPUEVOQUlfQVBJX0tFWeqwgCDshKTsoJXrkJjsp4Ag7JWK7JWY7Iq164uI64ukLiDtmZjqsr3rs4DsiJjrpbwg7ZmV7J247ZWY7IS47JqULlwiKTtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZU9wZW5BSSh7IGFwaUtleSB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiDthY3siqTtirgg7J6E67Kg65SpIOyDneyEsVxuICAgKiBAcGFyYW0gdGV4dHMgLSDsnoTrsqDrlKntlaAg7YWN7Iqk7Yq4IOuwsOyXtCAoYmF0Y2hTaXpl7J207IOBIOyLnCDsnpDrj5kg67aE7ZWgKVxuICAgKiBAcGFyYW0gcHJvdmlkZXIgLSAndm95YWdlJyB8ICdvcGVuYWknXG4gICAqIEBwYXJhbSBpbnB1dFR5cGUgLSAnZG9jdW1lbnQnIHwgJ3F1ZXJ5JyAoVm95YWdlIEFJ66eMIO2VtOuLuSlcbiAgICogQHBhcmFtIG9uUHJvZ3Jlc3MgLSDsp4TtlonrpaAg7L2c67CxXG4gICAqL1xuICBhc3luYyBlbWJlZChcbiAgICB0ZXh0czogc3RyaW5nW10sXG4gICAgcHJvdmlkZXI6IEVtYmVkZGluZ1Byb3ZpZGVyLFxuICAgIGlucHV0VHlwZTogVmVjdG9ySW5wdXRUeXBlID0gXCJkb2N1bWVudFwiLFxuICAgIG9uUHJvZ3Jlc3M/OiBQcm9ncmVzc0NhbGxiYWNrLFxuICApOiBQcm9taXNlPEVtYmVkZGluZ1Jlc3VsdFtdPiB7XG4gICAgY29uc3QgbWF4QmF0Y2hTaXplID1cbiAgICAgIHByb3ZpZGVyID09PSBcInZveWFnZVwiID8gdGhpcy5jb25maWcudm95YWdlLmJhdGNoU2l6ZSA6IHRoaXMuY29uZmlnLm9wZW5haS5iYXRjaFNpemU7XG5cbiAgICAvLyBiYXRjaFNpemXsnbTtlZjrqbQg67CU66GcIO2YuOy2nFxuICAgIGlmICh0ZXh0cy5sZW5ndGggPD0gbWF4QmF0Y2hTaXplKSB7XG4gICAgICByZXR1cm4gcHJvdmlkZXIgPT09IFwidm95YWdlXCJcbiAgICAgICAgPyBhd2FpdCB0aGlzLmVtYmVkVm95YWdlKHRleHRzLCBpbnB1dFR5cGUpXG4gICAgICAgIDogYXdhaXQgdGhpcy5lbWJlZE9wZW5BSSh0ZXh0cyk7XG4gICAgfVxuXG4gICAgLy8gYmF0Y2hTaXpl7J207IOB7J2066m0IOyekOuPmeycvOuhnCDrgpjriKDshJwg7LKY66asXG4gICAgY29uc3QgYmF0Y2hlcyA9IEFycmF5LmZyb20oeyBsZW5ndGg6IE1hdGguY2VpbCh0ZXh0cy5sZW5ndGggLyBtYXhCYXRjaFNpemUpIH0sIChfLCBpKSA9PlxuICAgICAgdGV4dHMuc2xpY2UoaSAqIG1heEJhdGNoU2l6ZSwgKGkgKyAxKSAqIG1heEJhdGNoU2l6ZSksXG4gICAgKTtcblxuICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIGJhdGNoZXMubWFwKChiYXRjaCkgPT5cbiAgICAgICAgcHJvdmlkZXIgPT09IFwidm95YWdlXCIgPyB0aGlzLmVtYmVkVm95YWdlKGJhdGNoLCBpbnB1dFR5cGUpIDogdGhpcy5lbWJlZE9wZW5BSShiYXRjaCksXG4gICAgICApLFxuICAgICk7XG5cbiAgICBvblByb2dyZXNzPy4odGV4dHMubGVuZ3RoLCB0ZXh0cy5sZW5ndGgpO1xuICAgIHJldHVybiByZXN1bHRzLmZsYXQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDri6jsnbwg7YWN7Iqk7Yq4IOyehOuyoOuUqSAo7Y647J2YIOuplOyEnOuTnClcbiAgICovXG4gIGFzeW5jIGVtYmVkT25lKFxuICAgIHRleHQ6IHN0cmluZyxcbiAgICBwcm92aWRlcjogRW1iZWRkaW5nUHJvdmlkZXIsXG4gICAgaW5wdXRUeXBlOiBWZWN0b3JJbnB1dFR5cGUgPSBcImRvY3VtZW50XCIsXG4gICk6IFByb21pc2U8RW1iZWRkaW5nUmVzdWx0PiB7XG4gICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IHRoaXMuZW1iZWQoW3RleHRdLCBwcm92aWRlciwgaW5wdXRUeXBlKTtcbiAgICByZXR1cm4gcmVzdWx0c1swXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWb3lhZ2UgQUkg7J6E67Kg65SpXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGVtYmVkVm95YWdlKFxuICAgIHRleHRzOiBzdHJpbmdbXSxcbiAgICBpbnB1dFR5cGU6IFZlY3RvcklucHV0VHlwZSxcbiAgKTogUHJvbWlzZTxFbWJlZGRpbmdSZXN1bHRbXT4ge1xuICAgIGNvbnN0IGNsaWVudCA9IHRoaXMuZ2V0Vm95YWdlQ2xpZW50KCk7XG4gICAgY29uc3Qgdm95YWdlQ29uZmlnID0gdGhpcy5jb25maWcudm95YWdlO1xuXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuZW1iZWQoe1xuICAgICAgaW5wdXQ6IHRleHRzLFxuICAgICAgbW9kZWw6IHZveWFnZUNvbmZpZy5tb2RlbCxcbiAgICAgIGlucHV0VHlwZTogaW5wdXRUeXBlLFxuICAgIH0pO1xuICAgIGlmICghcmVzcG9uc2UuZGF0YSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVm95YWdlIEFQSTog7J2R64u1IOuNsOydtO2EsOqwgCDsl4bsirXri4jri6QuXCIpO1xuICAgIH1cblxuICAgIHJldHVybiByZXNwb25zZS5kYXRhLm1hcCgoaXRlbSkgPT4gKHtcbiAgICAgIGVtYmVkZGluZzogaXRlbS5lbWJlZGRpbmcgPz8gW10sXG4gICAgICBtb2RlbDogdm95YWdlQ29uZmlnLm1vZGVsLFxuICAgICAgdG9rZW5Db3VudDogcmVzcG9uc2UudXNhZ2U/LnRvdGFsVG9rZW5zID8/IDAsXG4gICAgfSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIE9wZW5BSSDsnoTrsqDrlKlcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZW1iZWRPcGVuQUkodGV4dHM6IHN0cmluZ1tdKTogUHJvbWlzZTxFbWJlZGRpbmdSZXN1bHRbXT4ge1xuICAgIGNvbnN0IG9wZW5haSA9IHRoaXMuZ2V0T3BlbkFJUHJvdmlkZXIoKTtcbiAgICBjb25zdCBvcGVuYWlDb25maWcgPSB0aGlzLmNvbmZpZy5vcGVuYWk7XG4gICAgY29uc3QgbW9kZWwgPSBvcGVuYWkuZW1iZWRkaW5nTW9kZWwob3BlbmFpQ29uZmlnLm1vZGVsKTtcblxuICAgIGNvbnN0IHsgZW1iZWRkaW5ncywgdXNhZ2UgfSA9IGF3YWl0IGVtYmVkTWFueSh7XG4gICAgICBtb2RlbDogbW9kZWwgYXMgRW1iZWRkaW5nTW9kZWwsXG4gICAgICB2YWx1ZXM6IHRleHRzLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGVtYmVkZGluZ3MubWFwKChlbWJlZGRpbmcpID0+ICh7XG4gICAgICBlbWJlZGRpbmcsXG4gICAgICBtb2RlbDogb3BlbmFpQ29uZmlnLm1vZGVsLFxuICAgICAgdG9rZW5Db3VudDogdXNhZ2U/LnRva2VucyA/PyAwLFxuICAgIH0pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDrsqHthLDrpbwgUG9zdGdyZVNRTCB2ZWN0b3Ig7YOA7J6FIOusuOyekOyXtOuhnCDrs4DtmZhcbiAgICovXG4gIHN0YXRpYyB0b1ZlY3RvclN0cmluZyhlbWJlZGRpbmc6IG51bWJlcltdKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYFske2VtYmVkZGluZy5qb2luKFwiLFwiKX1dYDtcbiAgfVxuXG4gIC8qKlxuICAgKiDsnoTrsqDrlKkgcHJvdmlkZXLsnZgg7LCo7JuQIOyImCDrsJjtmZhcbiAgICovXG4gIGdldERpbWVuc2lvbnMocHJvdmlkZXI6IEVtYmVkZGluZ1Byb3ZpZGVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gcHJvdmlkZXIgPT09IFwidm95YWdlXCIgPyB0aGlzLmNvbmZpZy52b3lhZ2UuZGltZW5zaW9ucyA6IHRoaXMuY29uZmlnLm9wZW5haS5kaW1lbnNpb25zO1xuICB9XG59XG4iXSwibmFtZXMiOlsiY3JlYXRlT3BlbkFJIiwiZW1iZWRNYW55IiwiVm95YWdlQUlDbGllbnQiLCJTb25hbXUiLCJERUZBVUxUX1ZFQ1RPUl9DT05GSUciLCJFbWJlZGRpbmciLCJjb25maWciLCJ2b3lhZ2UiLCJvcGVuYWkiLCJjaHVua2luZyIsInNlYXJjaCIsInBndmVjdG9yIiwiZ2V0Vm95YWdlQ2xpZW50IiwiYXBpS2V5Iiwic2VjcmV0cyIsInZveWFnZV9hcGlfa2V5IiwicHJvY2VzcyIsImVudiIsIlZPWUFHRV9BUElfS0VZIiwiRXJyb3IiLCJnZXRPcGVuQUlQcm92aWRlciIsIm9wZW5haV9hcGlfa2V5IiwiT1BFTkFJX0FQSV9LRVkiLCJlbWJlZCIsInRleHRzIiwicHJvdmlkZXIiLCJpbnB1dFR5cGUiLCJvblByb2dyZXNzIiwibWF4QmF0Y2hTaXplIiwiYmF0Y2hTaXplIiwibGVuZ3RoIiwiZW1iZWRWb3lhZ2UiLCJlbWJlZE9wZW5BSSIsImJhdGNoZXMiLCJBcnJheSIsImZyb20iLCJNYXRoIiwiY2VpbCIsIl8iLCJpIiwic2xpY2UiLCJyZXN1bHRzIiwiUHJvbWlzZSIsImFsbCIsIm1hcCIsImJhdGNoIiwiZmxhdCIsImVtYmVkT25lIiwidGV4dCIsImNsaWVudCIsInZveWFnZUNvbmZpZyIsInJlc3BvbnNlIiwiaW5wdXQiLCJtb2RlbCIsImRhdGEiLCJpdGVtIiwiZW1iZWRkaW5nIiwidG9rZW5Db3VudCIsInVzYWdlIiwidG90YWxUb2tlbnMiLCJvcGVuYWlDb25maWciLCJlbWJlZGRpbmdNb2RlbCIsImVtYmVkZGluZ3MiLCJ2YWx1ZXMiLCJ0b2tlbnMiLCJ0b1ZlY3RvclN0cmluZyIsImpvaW4iLCJnZXREaW1lbnNpb25zIiwiZGltZW5zaW9ucyJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsWUFBWSxRQUE2QixpQkFBaUI7QUFDbkUsU0FBOEJDLFNBQVMsUUFBUSxLQUFLO0FBQ3BELFNBQVNDLGNBQWMsUUFBUSxXQUFXO0FBQzFDLFNBQVNDLE1BQU0sUUFBUSxtQkFBZ0I7QUFDdkMsU0FBU0MscUJBQXFCLFFBQVEsY0FBVztBQVNqRDs7O0NBR0MsR0FDRCxPQUFPLE1BQU1DO0lBQ0hDLE9BQXFCO0lBRTdCLFlBQVlBLFNBQWdDLENBQUMsQ0FBQyxDQUFFO1FBQzlDLElBQUksQ0FBQ0EsTUFBTSxHQUFHO1lBQ1pDLFFBQVE7Z0JBQUUsR0FBR0gsc0JBQXNCRyxNQUFNO2dCQUFFLEdBQUdELE9BQU9DLE1BQU07WUFBQztZQUM1REMsUUFBUTtnQkFBRSxHQUFHSixzQkFBc0JJLE1BQU07Z0JBQUUsR0FBR0YsT0FBT0UsTUFBTTtZQUFDO1lBQzVEQyxVQUFVO2dCQUFFLEdBQUdMLHNCQUFzQkssUUFBUTtnQkFBRSxHQUFHSCxPQUFPRyxRQUFRO1lBQUM7WUFDbEVDLFFBQVE7Z0JBQUUsR0FBR04sc0JBQXNCTSxNQUFNO2dCQUFFLEdBQUdKLE9BQU9JLE1BQU07WUFBQztZQUM1REMsVUFBVTtnQkFBRSxHQUFHUCxzQkFBc0JPLFFBQVE7Z0JBQUUsR0FBR0wsT0FBT0ssUUFBUTtZQUFDO1FBQ3BFO0lBQ0Y7SUFFQTs7R0FFQyxHQUNELEFBQVFDLGtCQUFrQztRQUN4QyxNQUFNQyxTQUFTVixPQUFPVyxPQUFPLEVBQUVDLGtCQUFrQkMsUUFBUUMsR0FBRyxDQUFDQyxjQUFjO1FBQzNFLElBQUksQ0FBQ0wsUUFBUTtZQUNYLE1BQU0sSUFBSU0sTUFBTTtRQUNsQjtRQUNBLE9BQU8sSUFBSWpCLGVBQWU7WUFBRVc7UUFBTztJQUNyQztJQUVBOztHQUVDLEdBQ0QsQUFBUU8sb0JBQW9DO1FBQzFDLE1BQU1QLFNBQVNWLE9BQU9XLE9BQU8sRUFBRU8sa0JBQWtCTCxRQUFRQyxHQUFHLENBQUNLLGNBQWM7UUFDM0UsSUFBSSxDQUFDVCxRQUFRO1lBQ1gsTUFBTSxJQUFJTSxNQUFNO1FBQ2xCO1FBQ0EsT0FBT25CLGFBQWE7WUFBRWE7UUFBTztJQUMvQjtJQUVBOzs7Ozs7R0FNQyxHQUNELE1BQU1VLE1BQ0pDLEtBQWUsRUFDZkMsUUFBMkIsRUFDM0JDLFlBQTZCLFVBQVUsRUFDdkNDLFVBQTZCLEVBQ0Q7UUFDNUIsTUFBTUMsZUFDSkgsYUFBYSxXQUFXLElBQUksQ0FBQ25CLE1BQU0sQ0FBQ0MsTUFBTSxDQUFDc0IsU0FBUyxHQUFHLElBQUksQ0FBQ3ZCLE1BQU0sQ0FBQ0UsTUFBTSxDQUFDcUIsU0FBUztRQUVyRixxQkFBcUI7UUFDckIsSUFBSUwsTUFBTU0sTUFBTSxJQUFJRixjQUFjO1lBQ2hDLE9BQU9ILGFBQWEsV0FDaEIsTUFBTSxJQUFJLENBQUNNLFdBQVcsQ0FBQ1AsT0FBT0UsYUFDOUIsTUFBTSxJQUFJLENBQUNNLFdBQVcsQ0FBQ1I7UUFDN0I7UUFFQSw0QkFBNEI7UUFDNUIsTUFBTVMsVUFBVUMsTUFBTUMsSUFBSSxDQUFDO1lBQUVMLFFBQVFNLEtBQUtDLElBQUksQ0FBQ2IsTUFBTU0sTUFBTSxHQUFHRjtRQUFjLEdBQUcsQ0FBQ1UsR0FBR0MsSUFDakZmLE1BQU1nQixLQUFLLENBQUNELElBQUlYLGNBQWMsQUFBQ1csQ0FBQUEsSUFBSSxDQUFBLElBQUtYO1FBRzFDLE1BQU1hLFVBQVUsTUFBTUMsUUFBUUMsR0FBRyxDQUMvQlYsUUFBUVcsR0FBRyxDQUFDLENBQUNDLFFBQ1hwQixhQUFhLFdBQVcsSUFBSSxDQUFDTSxXQUFXLENBQUNjLE9BQU9uQixhQUFhLElBQUksQ0FBQ00sV0FBVyxDQUFDYTtRQUlsRmxCLGFBQWFILE1BQU1NLE1BQU0sRUFBRU4sTUFBTU0sTUFBTTtRQUN2QyxPQUFPVyxRQUFRSyxJQUFJO0lBQ3JCO0lBRUE7O0dBRUMsR0FDRCxNQUFNQyxTQUNKQyxJQUFZLEVBQ1p2QixRQUEyQixFQUMzQkMsWUFBNkIsVUFBVSxFQUNiO1FBQzFCLE1BQU1lLFVBQVUsTUFBTSxJQUFJLENBQUNsQixLQUFLLENBQUM7WUFBQ3lCO1NBQUssRUFBRXZCLFVBQVVDO1FBQ25ELE9BQU9lLE9BQU8sQ0FBQyxFQUFFO0lBQ25CO0lBRUE7O0dBRUMsR0FDRCxNQUFjVixZQUNaUCxLQUFlLEVBQ2ZFLFNBQTBCLEVBQ0U7UUFDNUIsTUFBTXVCLFNBQVMsSUFBSSxDQUFDckMsZUFBZTtRQUNuQyxNQUFNc0MsZUFBZSxJQUFJLENBQUM1QyxNQUFNLENBQUNDLE1BQU07UUFFdkMsTUFBTTRDLFdBQVcsTUFBTUYsT0FBTzFCLEtBQUssQ0FBQztZQUNsQzZCLE9BQU81QjtZQUNQNkIsT0FBT0gsYUFBYUcsS0FBSztZQUN6QjNCLFdBQVdBO1FBQ2I7UUFDQSxJQUFJLENBQUN5QixTQUFTRyxJQUFJLEVBQUU7WUFDbEIsTUFBTSxJQUFJbkMsTUFBTTtRQUNsQjtRQUVBLE9BQU9nQyxTQUFTRyxJQUFJLENBQUNWLEdBQUcsQ0FBQyxDQUFDVyxPQUFVLENBQUE7Z0JBQ2xDQyxXQUFXRCxLQUFLQyxTQUFTLElBQUksRUFBRTtnQkFDL0JILE9BQU9ILGFBQWFHLEtBQUs7Z0JBQ3pCSSxZQUFZTixTQUFTTyxLQUFLLEVBQUVDLGVBQWU7WUFDN0MsQ0FBQTtJQUNGO0lBRUE7O0dBRUMsR0FDRCxNQUFjM0IsWUFBWVIsS0FBZSxFQUE4QjtRQUNyRSxNQUFNaEIsU0FBUyxJQUFJLENBQUNZLGlCQUFpQjtRQUNyQyxNQUFNd0MsZUFBZSxJQUFJLENBQUN0RCxNQUFNLENBQUNFLE1BQU07UUFDdkMsTUFBTTZDLFFBQVE3QyxPQUFPcUQsY0FBYyxDQUFDRCxhQUFhUCxLQUFLO1FBRXRELE1BQU0sRUFBRVMsVUFBVSxFQUFFSixLQUFLLEVBQUUsR0FBRyxNQUFNekQsVUFBVTtZQUM1Q29ELE9BQU9BO1lBQ1BVLFFBQVF2QztRQUNWO1FBRUEsT0FBT3NDLFdBQVdsQixHQUFHLENBQUMsQ0FBQ1ksWUFBZSxDQUFBO2dCQUNwQ0E7Z0JBQ0FILE9BQU9PLGFBQWFQLEtBQUs7Z0JBQ3pCSSxZQUFZQyxPQUFPTSxVQUFVO1lBQy9CLENBQUE7SUFDRjtJQUVBOztHQUVDLEdBQ0QsT0FBT0MsZUFBZVQsU0FBbUIsRUFBVTtRQUNqRCxPQUFPLENBQUMsQ0FBQyxFQUFFQSxVQUFVVSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbkM7SUFFQTs7R0FFQyxHQUNEQyxjQUFjMUMsUUFBMkIsRUFBVTtRQUNqRCxPQUFPQSxhQUFhLFdBQVcsSUFBSSxDQUFDbkIsTUFBTSxDQUFDQyxNQUFNLENBQUM2RCxVQUFVLEdBQUcsSUFBSSxDQUFDOUQsTUFBTSxDQUFDRSxNQUFNLENBQUM0RCxVQUFVO0lBQzlGO0FBQ0YifQ==
128
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy92ZWN0b3IvZW1iZWRkaW5nLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgT3BlbkFJUHJvdmlkZXIgfSBmcm9tIFwiQGFpLXNkay9vcGVuYWlcIjtcbmltcG9ydCB7IHR5cGUgRW1iZWRkaW5nTW9kZWwsIGVtYmVkTWFueSB9IGZyb20gXCJhaVwiO1xuaW1wb3J0IHR5cGUgeyBWb3lhZ2VBSUNsaWVudCB9IGZyb20gXCJ2b3lhZ2VhaVwiO1xuaW1wb3J0IHsgU29uYW11IH0gZnJvbSBcIi4uL2FwaS9zb25hbXVcIjtcbmltcG9ydCB7IERFRkFVTFRfVkVDVE9SX0NPTkZJRyB9IGZyb20gXCIuL2NvbmZpZ1wiO1xuaW1wb3J0IHR5cGUge1xuICBFbWJlZGRpbmdQcm92aWRlcixcbiAgRW1iZWRkaW5nUmVzdWx0LFxuICBQcm9ncmVzc0NhbGxiYWNrLFxuICBWZWN0b3JDb25maWcsXG4gIFZlY3RvcklucHV0VHlwZSxcbn0gZnJvbSBcIi4vdHlwZXNcIjtcblxuLyoqXG4gKiDsnoTrsqDrlKkg7YG065287J207Ja47Yq4XG4gKiBWb3lhZ2UgQUnsmYAgT3BlbkFJIOyehOuyoOuUqeydhCBTREsg67Cp7Iud7Jy866GcIO2Gte2VqSDsp4Dsm5BcbiAqL1xuZXhwb3J0IGNsYXNzIEVtYmVkZGluZ0NsYXNzIHtcbiAgcHJpdmF0ZSBjb25maWc6IFZlY3RvckNvbmZpZztcblxuICBjb25zdHJ1Y3Rvcihjb25maWc6IFBhcnRpYWw8VmVjdG9yQ29uZmlnPiA9IHt9KSB7XG4gICAgdGhpcy5jb25maWcgPSB7XG4gICAgICB2b3lhZ2U6IHsgLi4uREVGQVVMVF9WRUNUT1JfQ09ORklHLnZveWFnZSwgLi4uY29uZmlnLnZveWFnZSB9LFxuICAgICAgb3BlbmFpOiB7IC4uLkRFRkFVTFRfVkVDVE9SX0NPTkZJRy5vcGVuYWksIC4uLmNvbmZpZy5vcGVuYWkgfSxcbiAgICAgIGNodW5raW5nOiB7IC4uLkRFRkFVTFRfVkVDVE9SX0NPTkZJRy5jaHVua2luZywgLi4uY29uZmlnLmNodW5raW5nIH0sXG4gICAgICBzZWFyY2g6IHsgLi4uREVGQVVMVF9WRUNUT1JfQ09ORklHLnNlYXJjaCwgLi4uY29uZmlnLnNlYXJjaCB9LFxuICAgICAgcGd2ZWN0b3I6IHsgLi4uREVGQVVMVF9WRUNUT1JfQ09ORklHLnBndmVjdG9yLCAuLi5jb25maWcucGd2ZWN0b3IgfSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFZveWFnZSBBSSDtgbTrnbzsnbTslrjtirgg7LSI6riw7ZmUXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGdldFZveWFnZUNsaWVudCgpOiBQcm9taXNlPFZveWFnZUFJQ2xpZW50PiB7XG4gICAgY29uc3QgeyBWb3lhZ2VBSUNsaWVudCB9ID0gYXdhaXQgaW1wb3J0KFwidm95YWdlYWlcIik7XG4gICAgY29uc3QgYXBpS2V5ID0gU29uYW11LnNlY3JldHM/LnZveWFnZV9hcGlfa2V5ID8/IHByb2Nlc3MuZW52LlZPWUFHRV9BUElfS0VZO1xuICAgIGlmICghYXBpS2V5KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJWT1lBR0VfQVBJX0tFWeqwgCDshKTsoJXrkJjsp4Ag7JWK7JWY7Iq164uI64ukLiDtmZjqsr3rs4DsiJjrpbwg7ZmV7J247ZWY7IS47JqULlwiKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBWb3lhZ2VBSUNsaWVudCh7IGFwaUtleSB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPcGVuQUkgcHJvdmlkZXIg7IOd7ISxXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGdldE9wZW5BSVByb3ZpZGVyKCk6IFByb21pc2U8T3BlbkFJUHJvdmlkZXI+IHtcbiAgICBjb25zdCB7IGNyZWF0ZU9wZW5BSSB9ID0gYXdhaXQgaW1wb3J0KFwiQGFpLXNkay9vcGVuYWlcIik7XG4gICAgY29uc3QgYXBpS2V5ID0gU29uYW11LnNlY3JldHM/Lm9wZW5haV9hcGlfa2V5ID8/IHByb2Nlc3MuZW52Lk9QRU5BSV9BUElfS0VZO1xuICAgIGlmICghYXBpS2V5KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJPUEVOQUlfQVBJX0tFWeqwgCDshKTsoJXrkJjsp4Ag7JWK7JWY7Iq164uI64ukLiDtmZjqsr3rs4DsiJjrpbwg7ZmV7J247ZWY7IS47JqULlwiKTtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZU9wZW5BSSh7IGFwaUtleSB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiDthY3siqTtirgg7J6E67Kg65SpIOyDneyEsVxuICAgKiBAcGFyYW0gdGV4dHMgLSDsnoTrsqDrlKntlaAg7YWN7Iqk7Yq4IOuwsOyXtCAoYmF0Y2hTaXpl7J207IOBIOyLnCDsnpDrj5kg67aE7ZWgKVxuICAgKiBAcGFyYW0gcHJvdmlkZXIgLSAndm95YWdlJyB8ICdvcGVuYWknXG4gICAqIEBwYXJhbSBpbnB1dFR5cGUgLSAnZG9jdW1lbnQnIHwgJ3F1ZXJ5JyAoVm95YWdlIEFJ66eMIO2VtOuLuSlcbiAgICogQHBhcmFtIG9uUHJvZ3Jlc3MgLSDsp4TtlonrpaAg7L2c67CxXG4gICAqL1xuICBhc3luYyBlbWJlZChcbiAgICB0ZXh0czogc3RyaW5nW10sXG4gICAgcHJvdmlkZXI6IEVtYmVkZGluZ1Byb3ZpZGVyLFxuICAgIGlucHV0VHlwZTogVmVjdG9ySW5wdXRUeXBlID0gXCJkb2N1bWVudFwiLFxuICAgIG9uUHJvZ3Jlc3M/OiBQcm9ncmVzc0NhbGxiYWNrLFxuICApOiBQcm9taXNlPEVtYmVkZGluZ1Jlc3VsdFtdPiB7XG4gICAgY29uc3QgbWF4QmF0Y2hTaXplID1cbiAgICAgIHByb3ZpZGVyID09PSBcInZveWFnZVwiID8gdGhpcy5jb25maWcudm95YWdlLmJhdGNoU2l6ZSA6IHRoaXMuY29uZmlnLm9wZW5haS5iYXRjaFNpemU7XG5cbiAgICAvLyBiYXRjaFNpemXsnbTtlZjrqbQg67CU66GcIO2YuOy2nFxuICAgIGlmICh0ZXh0cy5sZW5ndGggPD0gbWF4QmF0Y2hTaXplKSB7XG4gICAgICByZXR1cm4gcHJvdmlkZXIgPT09IFwidm95YWdlXCJcbiAgICAgICAgPyBhd2FpdCB0aGlzLmVtYmVkVm95YWdlKHRleHRzLCBpbnB1dFR5cGUpXG4gICAgICAgIDogYXdhaXQgdGhpcy5lbWJlZE9wZW5BSSh0ZXh0cyk7XG4gICAgfVxuXG4gICAgLy8gYmF0Y2hTaXpl7J207IOB7J2066m0IOyekOuPmeycvOuhnCDrgpjriKDshJwg7LKY66asXG4gICAgY29uc3QgYmF0Y2hlcyA9IEFycmF5LmZyb20oeyBsZW5ndGg6IE1hdGguY2VpbCh0ZXh0cy5sZW5ndGggLyBtYXhCYXRjaFNpemUpIH0sIChfLCBpKSA9PlxuICAgICAgdGV4dHMuc2xpY2UoaSAqIG1heEJhdGNoU2l6ZSwgKGkgKyAxKSAqIG1heEJhdGNoU2l6ZSksXG4gICAgKTtcblxuICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIGJhdGNoZXMubWFwKChiYXRjaCkgPT5cbiAgICAgICAgcHJvdmlkZXIgPT09IFwidm95YWdlXCIgPyB0aGlzLmVtYmVkVm95YWdlKGJhdGNoLCBpbnB1dFR5cGUpIDogdGhpcy5lbWJlZE9wZW5BSShiYXRjaCksXG4gICAgICApLFxuICAgICk7XG5cbiAgICBvblByb2dyZXNzPy4odGV4dHMubGVuZ3RoLCB0ZXh0cy5sZW5ndGgpO1xuICAgIHJldHVybiByZXN1bHRzLmZsYXQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDri6jsnbwg7YWN7Iqk7Yq4IOyehOuyoOuUqSAo7Y647J2YIOuplOyEnOuTnClcbiAgICovXG4gIGFzeW5jIGVtYmVkT25lKFxuICAgIHRleHQ6IHN0cmluZyxcbiAgICBwcm92aWRlcjogRW1iZWRkaW5nUHJvdmlkZXIsXG4gICAgaW5wdXRUeXBlOiBWZWN0b3JJbnB1dFR5cGUgPSBcImRvY3VtZW50XCIsXG4gICk6IFByb21pc2U8RW1iZWRkaW5nUmVzdWx0PiB7XG4gICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IHRoaXMuZW1iZWQoW3RleHRdLCBwcm92aWRlciwgaW5wdXRUeXBlKTtcbiAgICByZXR1cm4gcmVzdWx0c1swXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWb3lhZ2UgQUkg7J6E67Kg65SpXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGVtYmVkVm95YWdlKFxuICAgIHRleHRzOiBzdHJpbmdbXSxcbiAgICBpbnB1dFR5cGU6IFZlY3RvcklucHV0VHlwZSxcbiAgKTogUHJvbWlzZTxFbWJlZGRpbmdSZXN1bHRbXT4ge1xuICAgIGNvbnN0IGNsaWVudCA9IGF3YWl0IHRoaXMuZ2V0Vm95YWdlQ2xpZW50KCk7XG4gICAgY29uc3Qgdm95YWdlQ29uZmlnID0gdGhpcy5jb25maWcudm95YWdlO1xuXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuZW1iZWQoe1xuICAgICAgaW5wdXQ6IHRleHRzLFxuICAgICAgbW9kZWw6IHZveWFnZUNvbmZpZy5tb2RlbCxcbiAgICAgIGlucHV0VHlwZTogaW5wdXRUeXBlLFxuICAgIH0pO1xuICAgIGlmICghcmVzcG9uc2UuZGF0YSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVm95YWdlIEFQSTog7J2R64u1IOuNsOydtO2EsOqwgCDsl4bsirXri4jri6QuXCIpO1xuICAgIH1cblxuICAgIHJldHVybiByZXNwb25zZS5kYXRhLm1hcCgoaXRlbSkgPT4gKHtcbiAgICAgIGVtYmVkZGluZzogaXRlbS5lbWJlZGRpbmcgPz8gW10sXG4gICAgICBtb2RlbDogdm95YWdlQ29uZmlnLm1vZGVsLFxuICAgICAgdG9rZW5Db3VudDogcmVzcG9uc2UudXNhZ2U/LnRvdGFsVG9rZW5zID8/IDAsXG4gICAgfSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIE9wZW5BSSDsnoTrsqDrlKlcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZW1iZWRPcGVuQUkodGV4dHM6IHN0cmluZ1tdKTogUHJvbWlzZTxFbWJlZGRpbmdSZXN1bHRbXT4ge1xuICAgIGNvbnN0IG9wZW5haSA9IGF3YWl0IHRoaXMuZ2V0T3BlbkFJUHJvdmlkZXIoKTtcbiAgICBjb25zdCBvcGVuYWlDb25maWcgPSB0aGlzLmNvbmZpZy5vcGVuYWk7XG4gICAgY29uc3QgbW9kZWwgPSBvcGVuYWkuZW1iZWRkaW5nTW9kZWwob3BlbmFpQ29uZmlnLm1vZGVsKTtcblxuICAgIGNvbnN0IHsgZW1iZWRkaW5ncywgdXNhZ2UgfSA9IGF3YWl0IGVtYmVkTWFueSh7XG4gICAgICBtb2RlbDogbW9kZWwgYXMgRW1iZWRkaW5nTW9kZWwsXG4gICAgICB2YWx1ZXM6IHRleHRzLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGVtYmVkZGluZ3MubWFwKChlbWJlZGRpbmcpID0+ICh7XG4gICAgICBlbWJlZGRpbmcsXG4gICAgICBtb2RlbDogb3BlbmFpQ29uZmlnLm1vZGVsLFxuICAgICAgdG9rZW5Db3VudDogdXNhZ2U/LnRva2VucyA/PyAwLFxuICAgIH0pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDsnoTrsqDrlKkgcHJvdmlkZXLsnZgg7LCo7JuQIOyImCDrsJjtmZhcbiAgICovXG4gIGdldERpbWVuc2lvbnMocHJvdmlkZXI6IEVtYmVkZGluZ1Byb3ZpZGVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gcHJvdmlkZXIgPT09IFwidm95YWdlXCIgPyB0aGlzLmNvbmZpZy52b3lhZ2UuZGltZW5zaW9ucyA6IHRoaXMuY29uZmlnLm9wZW5haS5kaW1lbnNpb25zO1xuICB9XG59XG5leHBvcnQgY29uc3QgRW1iZWRkaW5nID0gbmV3IEVtYmVkZGluZ0NsYXNzKCk7XG4iXSwibmFtZXMiOlsiZW1iZWRNYW55IiwiU29uYW11IiwiREVGQVVMVF9WRUNUT1JfQ09ORklHIiwiRW1iZWRkaW5nQ2xhc3MiLCJjb25maWciLCJ2b3lhZ2UiLCJvcGVuYWkiLCJjaHVua2luZyIsInNlYXJjaCIsInBndmVjdG9yIiwiZ2V0Vm95YWdlQ2xpZW50IiwiVm95YWdlQUlDbGllbnQiLCJhcGlLZXkiLCJzZWNyZXRzIiwidm95YWdlX2FwaV9rZXkiLCJwcm9jZXNzIiwiZW52IiwiVk9ZQUdFX0FQSV9LRVkiLCJFcnJvciIsImdldE9wZW5BSVByb3ZpZGVyIiwiY3JlYXRlT3BlbkFJIiwib3BlbmFpX2FwaV9rZXkiLCJPUEVOQUlfQVBJX0tFWSIsImVtYmVkIiwidGV4dHMiLCJwcm92aWRlciIsImlucHV0VHlwZSIsIm9uUHJvZ3Jlc3MiLCJtYXhCYXRjaFNpemUiLCJiYXRjaFNpemUiLCJsZW5ndGgiLCJlbWJlZFZveWFnZSIsImVtYmVkT3BlbkFJIiwiYmF0Y2hlcyIsIkFycmF5IiwiZnJvbSIsIk1hdGgiLCJjZWlsIiwiXyIsImkiLCJzbGljZSIsInJlc3VsdHMiLCJQcm9taXNlIiwiYWxsIiwibWFwIiwiYmF0Y2giLCJmbGF0IiwiZW1iZWRPbmUiLCJ0ZXh0IiwiY2xpZW50Iiwidm95YWdlQ29uZmlnIiwicmVzcG9uc2UiLCJpbnB1dCIsIm1vZGVsIiwiZGF0YSIsIml0ZW0iLCJlbWJlZGRpbmciLCJ0b2tlbkNvdW50IiwidXNhZ2UiLCJ0b3RhbFRva2VucyIsIm9wZW5haUNvbmZpZyIsImVtYmVkZGluZ01vZGVsIiwiZW1iZWRkaW5ncyIsInZhbHVlcyIsInRva2VucyIsImdldERpbWVuc2lvbnMiLCJkaW1lbnNpb25zIiwiRW1iZWRkaW5nIl0sIm1hcHBpbmdzIjoiQUFDQSxTQUE4QkEsU0FBUyxRQUFRLEtBQUs7QUFFcEQsU0FBU0MsTUFBTSxRQUFRLG1CQUFnQjtBQUN2QyxTQUFTQyxxQkFBcUIsUUFBUSxjQUFXO0FBU2pEOzs7Q0FHQyxHQUNELE9BQU8sTUFBTUM7SUFDSEMsT0FBcUI7SUFFN0IsWUFBWUEsU0FBZ0MsQ0FBQyxDQUFDLENBQUU7UUFDOUMsSUFBSSxDQUFDQSxNQUFNLEdBQUc7WUFDWkMsUUFBUTtnQkFBRSxHQUFHSCxzQkFBc0JHLE1BQU07Z0JBQUUsR0FBR0QsT0FBT0MsTUFBTTtZQUFDO1lBQzVEQyxRQUFRO2dCQUFFLEdBQUdKLHNCQUFzQkksTUFBTTtnQkFBRSxHQUFHRixPQUFPRSxNQUFNO1lBQUM7WUFDNURDLFVBQVU7Z0JBQUUsR0FBR0wsc0JBQXNCSyxRQUFRO2dCQUFFLEdBQUdILE9BQU9HLFFBQVE7WUFBQztZQUNsRUMsUUFBUTtnQkFBRSxHQUFHTixzQkFBc0JNLE1BQU07Z0JBQUUsR0FBR0osT0FBT0ksTUFBTTtZQUFDO1lBQzVEQyxVQUFVO2dCQUFFLEdBQUdQLHNCQUFzQk8sUUFBUTtnQkFBRSxHQUFHTCxPQUFPSyxRQUFRO1lBQUM7UUFDcEU7SUFDRjtJQUVBOztHQUVDLEdBQ0QsTUFBY0Msa0JBQTJDO1FBQ3ZELE1BQU0sRUFBRUMsY0FBYyxFQUFFLEdBQUcsTUFBTSxNQUFNLENBQUM7UUFDeEMsTUFBTUMsU0FBU1gsT0FBT1ksT0FBTyxFQUFFQyxrQkFBa0JDLFFBQVFDLEdBQUcsQ0FBQ0MsY0FBYztRQUMzRSxJQUFJLENBQUNMLFFBQVE7WUFDWCxNQUFNLElBQUlNLE1BQU07UUFDbEI7UUFDQSxPQUFPLElBQUlQLGVBQWU7WUFBRUM7UUFBTztJQUNyQztJQUVBOztHQUVDLEdBQ0QsTUFBY08sb0JBQTZDO1FBQ3pELE1BQU0sRUFBRUMsWUFBWSxFQUFFLEdBQUcsTUFBTSxNQUFNLENBQUM7UUFDdEMsTUFBTVIsU0FBU1gsT0FBT1ksT0FBTyxFQUFFUSxrQkFBa0JOLFFBQVFDLEdBQUcsQ0FBQ00sY0FBYztRQUMzRSxJQUFJLENBQUNWLFFBQVE7WUFDWCxNQUFNLElBQUlNLE1BQU07UUFDbEI7UUFDQSxPQUFPRSxhQUFhO1lBQUVSO1FBQU87SUFDL0I7SUFFQTs7Ozs7O0dBTUMsR0FDRCxNQUFNVyxNQUNKQyxLQUFlLEVBQ2ZDLFFBQTJCLEVBQzNCQyxZQUE2QixVQUFVLEVBQ3ZDQyxVQUE2QixFQUNEO1FBQzVCLE1BQU1DLGVBQ0pILGFBQWEsV0FBVyxJQUFJLENBQUNyQixNQUFNLENBQUNDLE1BQU0sQ0FBQ3dCLFNBQVMsR0FBRyxJQUFJLENBQUN6QixNQUFNLENBQUNFLE1BQU0sQ0FBQ3VCLFNBQVM7UUFFckYscUJBQXFCO1FBQ3JCLElBQUlMLE1BQU1NLE1BQU0sSUFBSUYsY0FBYztZQUNoQyxPQUFPSCxhQUFhLFdBQ2hCLE1BQU0sSUFBSSxDQUFDTSxXQUFXLENBQUNQLE9BQU9FLGFBQzlCLE1BQU0sSUFBSSxDQUFDTSxXQUFXLENBQUNSO1FBQzdCO1FBRUEsNEJBQTRCO1FBQzVCLE1BQU1TLFVBQVVDLE1BQU1DLElBQUksQ0FBQztZQUFFTCxRQUFRTSxLQUFLQyxJQUFJLENBQUNiLE1BQU1NLE1BQU0sR0FBR0Y7UUFBYyxHQUFHLENBQUNVLEdBQUdDLElBQ2pGZixNQUFNZ0IsS0FBSyxDQUFDRCxJQUFJWCxjQUFjLEFBQUNXLENBQUFBLElBQUksQ0FBQSxJQUFLWDtRQUcxQyxNQUFNYSxVQUFVLE1BQU1DLFFBQVFDLEdBQUcsQ0FDL0JWLFFBQVFXLEdBQUcsQ0FBQyxDQUFDQyxRQUNYcEIsYUFBYSxXQUFXLElBQUksQ0FBQ00sV0FBVyxDQUFDYyxPQUFPbkIsYUFBYSxJQUFJLENBQUNNLFdBQVcsQ0FBQ2E7UUFJbEZsQixhQUFhSCxNQUFNTSxNQUFNLEVBQUVOLE1BQU1NLE1BQU07UUFDdkMsT0FBT1csUUFBUUssSUFBSTtJQUNyQjtJQUVBOztHQUVDLEdBQ0QsTUFBTUMsU0FDSkMsSUFBWSxFQUNadkIsUUFBMkIsRUFDM0JDLFlBQTZCLFVBQVUsRUFDYjtRQUMxQixNQUFNZSxVQUFVLE1BQU0sSUFBSSxDQUFDbEIsS0FBSyxDQUFDO1lBQUN5QjtTQUFLLEVBQUV2QixVQUFVQztRQUNuRCxPQUFPZSxPQUFPLENBQUMsRUFBRTtJQUNuQjtJQUVBOztHQUVDLEdBQ0QsTUFBY1YsWUFDWlAsS0FBZSxFQUNmRSxTQUEwQixFQUNFO1FBQzVCLE1BQU11QixTQUFTLE1BQU0sSUFBSSxDQUFDdkMsZUFBZTtRQUN6QyxNQUFNd0MsZUFBZSxJQUFJLENBQUM5QyxNQUFNLENBQUNDLE1BQU07UUFFdkMsTUFBTThDLFdBQVcsTUFBTUYsT0FBTzFCLEtBQUssQ0FBQztZQUNsQzZCLE9BQU81QjtZQUNQNkIsT0FBT0gsYUFBYUcsS0FBSztZQUN6QjNCLFdBQVdBO1FBQ2I7UUFDQSxJQUFJLENBQUN5QixTQUFTRyxJQUFJLEVBQUU7WUFDbEIsTUFBTSxJQUFJcEMsTUFBTTtRQUNsQjtRQUVBLE9BQU9pQyxTQUFTRyxJQUFJLENBQUNWLEdBQUcsQ0FBQyxDQUFDVyxPQUFVLENBQUE7Z0JBQ2xDQyxXQUFXRCxLQUFLQyxTQUFTLElBQUksRUFBRTtnQkFDL0JILE9BQU9ILGFBQWFHLEtBQUs7Z0JBQ3pCSSxZQUFZTixTQUFTTyxLQUFLLEVBQUVDLGVBQWU7WUFDN0MsQ0FBQTtJQUNGO0lBRUE7O0dBRUMsR0FDRCxNQUFjM0IsWUFBWVIsS0FBZSxFQUE4QjtRQUNyRSxNQUFNbEIsU0FBUyxNQUFNLElBQUksQ0FBQ2EsaUJBQWlCO1FBQzNDLE1BQU15QyxlQUFlLElBQUksQ0FBQ3hELE1BQU0sQ0FBQ0UsTUFBTTtRQUN2QyxNQUFNK0MsUUFBUS9DLE9BQU91RCxjQUFjLENBQUNELGFBQWFQLEtBQUs7UUFFdEQsTUFBTSxFQUFFUyxVQUFVLEVBQUVKLEtBQUssRUFBRSxHQUFHLE1BQU0xRCxVQUFVO1lBQzVDcUQsT0FBT0E7WUFDUFUsUUFBUXZDO1FBQ1Y7UUFFQSxPQUFPc0MsV0FBV2xCLEdBQUcsQ0FBQyxDQUFDWSxZQUFlLENBQUE7Z0JBQ3BDQTtnQkFDQUgsT0FBT08sYUFBYVAsS0FBSztnQkFDekJJLFlBQVlDLE9BQU9NLFVBQVU7WUFDL0IsQ0FBQTtJQUNGO0lBRUE7O0dBRUMsR0FDREMsY0FBY3hDLFFBQTJCLEVBQVU7UUFDakQsT0FBT0EsYUFBYSxXQUFXLElBQUksQ0FBQ3JCLE1BQU0sQ0FBQ0MsTUFBTSxDQUFDNkQsVUFBVSxHQUFHLElBQUksQ0FBQzlELE1BQU0sQ0FBQ0UsTUFBTSxDQUFDNEQsVUFBVTtJQUM5RjtBQUNGO0FBQ0EsT0FBTyxNQUFNQyxZQUFZLElBQUloRSxpQkFBaUIifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/vector/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/vector/types.ts"],"names":[],"mappings":"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"}
@@ -2,4 +2,4 @@
2
2
  * pgvector 통합을 위한 타입 정의
3
3
  */ /** 임베딩 제공자 */ /** 진행률 콜백 */ export { };
4
4
 
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy92ZWN0b3IvdHlwZXMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBwZ3ZlY3RvciDthrXtlansnYQg7JyE7ZWcIO2DgOyehSDsoJXsnZhcbiAqL1xuXG4vKiog7J6E67Kg65SpIOygnOqzteyekCAqL1xuZXhwb3J0IHR5cGUgRW1iZWRkaW5nUHJvdmlkZXIgPSBcInZveWFnZVwiIHwgXCJvcGVuYWlcIjtcblxuLyoqIOyeheugpSDtg4DsnoUgKFZveWFnZSBBSSDsoITsmqkgLSDruYTrjIDsua0g7J6E67Kg65SpKSAqL1xuZXhwb3J0IHR5cGUgVmVjdG9ySW5wdXRUeXBlID0gXCJkb2N1bWVudFwiIHwgXCJxdWVyeVwiO1xuXG4vKiog7J6E67Kg65SpIOqysOqzvCAqL1xuZXhwb3J0IGludGVyZmFjZSBFbWJlZGRpbmdSZXN1bHQge1xuICBlbWJlZGRpbmc6IG51bWJlcltdO1xuICBtb2RlbDogc3RyaW5nO1xuICB0b2tlbkNvdW50OiBudW1iZXI7XG59XG5cbi8qKiDssq3tgawg7KCV67O0ICovXG5leHBvcnQgaW50ZXJmYWNlIENodW5rIHtcbiAgaW5kZXg6IG51bWJlcjtcbiAgdGV4dDogc3RyaW5nO1xuICBzdGFydE9mZnNldDogbnVtYmVyO1xuICBlbmRPZmZzZXQ6IG51bWJlcjtcbn1cblxuLyoqIOuyoe2EsCDqsoDsg4kg6rKw6rO8ICovXG5leHBvcnQgaW50ZXJmYWNlIFZlY3RvclNlYXJjaFJlc3VsdDxUID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj4+IHtcbiAgaWQ6IG51bWJlciB8IHN0cmluZztcbiAgc2ltaWxhcml0eTogbnVtYmVyO1xuICBkYXRhOiBUO1xufVxuXG4vKiog7ZWY7J2067iM66as65OcIOqygOyDiSDqsrDqs7wgKFZlY3RvciArIEZUUykgKi9cbmV4cG9ydCBpbnRlcmZhY2UgSHlicmlkU2VhcmNoUmVzdWx0PFQgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj5cbiAgZXh0ZW5kcyBWZWN0b3JTZWFyY2hSZXN1bHQ8VD4ge1xuICB2ZWN0b3JTY29yZT86IG51bWJlcjtcbiAgZnRzU2NvcmU/OiBudW1iZXI7XG59XG5cbi8qKiDrsqTsuZjrp4jtgawg6rKw6rO8ICovXG5leHBvcnQgaW50ZXJmYWNlIEJlbmNobWFya1Jlc3VsdCB7XG4gIHByb3ZpZGVyOiBFbWJlZGRpbmdQcm92aWRlcjtcbiAgZW1iZWRUaW1lOiBudW1iZXI7XG4gIHNlYXJjaFRpbWU6IG51bWJlcjtcbiAgcmVzdWx0czogVmVjdG9yU2VhcmNoUmVzdWx0W107XG59XG5cbi8qKiBWb3lhZ2UgQUkg7ISk7KCVICovXG5leHBvcnQgaW50ZXJmYWNlIFZveWFnZUNvbmZpZyB7XG4gIGFwaUtleTogc3RyaW5nO1xuICBiYXNlVXJsOiBzdHJpbmc7XG4gIG1vZGVsOiBzdHJpbmc7XG4gIGRpbWVuc2lvbnM6IG51bWJlcjtcbiAgbWF4VG9rZW5zOiBudW1iZXI7XG4gIGJhdGNoU2l6ZTogbnVtYmVyO1xufVxuXG4vKiogT3BlbkFJIOyEpOyglSAqL1xuZXhwb3J0IGludGVyZmFjZSBPcGVuQUlDb25maWcge1xuICBhcGlLZXk6IHN0cmluZztcbiAgYmFzZVVybDogc3RyaW5nO1xuICBtb2RlbDogc3RyaW5nO1xuICBkaW1lbnNpb25zOiBudW1iZXI7XG4gIG1heFRva2VuczogbnVtYmVyO1xuICBiYXRjaFNpemU6IG51bWJlcjtcbn1cblxuLyoqIOyyre2CuSDshKTsoJUgKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2h1bmtpbmdDb25maWcge1xuICBjaHVua1NpemU6IG51bWJlcjtcbiAgY2h1bmtPdmVybGFwOiBudW1iZXI7XG4gIG1pbkNodW5rU2l6ZTogbnVtYmVyO1xuICBza2lwVGhyZXNob2xkOiBudW1iZXI7XG4gIHNlcGFyYXRvcnM6IHN0cmluZ1tdO1xufVxuXG4vKiog6rKA7IOJIOyEpOyglSAqL1xuZXhwb3J0IGludGVyZmFjZSBTZWFyY2hDb25maWcge1xuICBkZWZhdWx0TGltaXQ6IG51bWJlcjtcbiAgc2ltaWxhcml0eVRocmVzaG9sZDogbnVtYmVyO1xuICB2ZWN0b3JXZWlnaHQ6IG51bWJlcjtcbiAgZnRzV2VpZ2h0OiBudW1iZXI7XG59XG5cbi8qKiBwZ3ZlY3RvciDshKTsoJUgKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGd2ZWN0b3JDb25maWcge1xuICBpdGVyYXRpdmVTY2FuOiBib29sZWFuO1xuICBlZlNlYXJjaDogbnVtYmVyO1xufVxuXG4vKiog7KCE7LK0IOuyoe2EsCDshKTsoJUgKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmVjdG9yQ29uZmlnIHtcbiAgdm95YWdlOiBWb3lhZ2VDb25maWc7XG4gIG9wZW5haTogT3BlbkFJQ29uZmlnO1xuICBjaHVua2luZzogQ2h1bmtpbmdDb25maWc7XG4gIHNlYXJjaDogU2VhcmNoQ29uZmlnO1xuICBwZ3ZlY3RvcjogUGd2ZWN0b3JDb25maWc7XG59XG5cbi8qKiDrsqHthLAg6rKA7IOJIOyYteyFmCAqL1xuZXhwb3J0IGludGVyZmFjZSBWZWN0b3JTZWFyY2hPcHRpb25zIHtcbiAgZW1iZWRkaW5nQ29sdW1uPzogc3RyaW5nO1xuICBsaW1pdD86IG51bWJlcjtcbiAgdGhyZXNob2xkPzogbnVtYmVyO1xuICB3aGVyZT86IHN0cmluZztcbn1cblxuLyoqIO2VmOydtOu4jOumrOuTnCDqsoDsg4kg7Ji17IWYICovXG5leHBvcnQgaW50ZXJmYWNlIEh5YnJpZFNlYXJjaE9wdGlvbnMgZXh0ZW5kcyBWZWN0b3JTZWFyY2hPcHRpb25zIHtcbiAgdmVjdG9yV2VpZ2h0PzogbnVtYmVyO1xuICBmdHNXZWlnaHQ/OiBudW1iZXI7XG4gIGZ0c0NvbHVtbj86IHN0cmluZztcbn1cblxuLyoqIOyehOuyoOuUqSDsoIDsnqUg7ZWt66qpICovXG5leHBvcnQgaW50ZXJmYWNlIEVtYmVkZGluZ0l0ZW0ge1xuICBpZDogbnVtYmVyO1xuICB0ZXh0OiBzdHJpbmc7XG59XG5cbi8qKiDsp4TtlonrpaAg7L2c67CxICovXG5leHBvcnQgdHlwZSBQcm9ncmVzc0NhbGxiYWNrID0gKHByb2Nlc3NlZDogbnVtYmVyLCB0b3RhbDogbnVtYmVyKSA9PiB2b2lkO1xuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztDQUVDLEdBRUQsWUFBWSxHQW9IWixXQUFXLEdBQ1gsV0FBMEUifQ==
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy92ZWN0b3IvdHlwZXMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBwZ3ZlY3RvciDthrXtlansnYQg7JyE7ZWcIO2DgOyehSDsoJXsnZhcbiAqL1xuXG4vKiog7J6E67Kg65SpIOygnOqzteyekCAqL1xuZXhwb3J0IHR5cGUgRW1iZWRkaW5nUHJvdmlkZXIgPSBcInZveWFnZVwiIHwgXCJvcGVuYWlcIjtcblxuLyoqIOyeheugpSDtg4DsnoUgKFZveWFnZSBBSSDsoITsmqkgLSDruYTrjIDsua0g7J6E67Kg65SpKSAqL1xuZXhwb3J0IHR5cGUgVmVjdG9ySW5wdXRUeXBlID0gXCJkb2N1bWVudFwiIHwgXCJxdWVyeVwiO1xuXG4vKiog7J6E67Kg65SpIOqysOqzvCAqL1xuZXhwb3J0IGludGVyZmFjZSBFbWJlZGRpbmdSZXN1bHQge1xuICBlbWJlZGRpbmc6IG51bWJlcltdO1xuICBtb2RlbDogc3RyaW5nO1xuICB0b2tlbkNvdW50OiBudW1iZXI7XG59XG5cbi8qKiDssq3tgawg7KCV67O0ICovXG5leHBvcnQgaW50ZXJmYWNlIENodW5rIHtcbiAgaW5kZXg6IG51bWJlcjtcbiAgdGV4dDogc3RyaW5nO1xuICBzdGFydE9mZnNldDogbnVtYmVyO1xuICBlbmRPZmZzZXQ6IG51bWJlcjtcbn1cblxuLyoqIOuyoe2EsCDqsoDsg4kg6rKw6rO8ICovXG5leHBvcnQgaW50ZXJmYWNlIFZlY3RvclNlYXJjaFJlc3VsdDxUID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj4+IHtcbiAgaWQ6IG51bWJlciB8IHN0cmluZztcbiAgc2ltaWxhcml0eTogbnVtYmVyO1xuICBkYXRhOiBUO1xufVxuXG4vKiog7ZWY7J2067iM66as65OcIOqygOyDiSDqsrDqs7wgKFZlY3RvciArIEZUUykgKi9cbmV4cG9ydCBpbnRlcmZhY2UgSHlicmlkU2VhcmNoUmVzdWx0PFQgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4gZXh0ZW5kcyBWZWN0b3JTZWFyY2hSZXN1bHQ8VD4ge1xuICB2ZWN0b3JTY29yZT86IG51bWJlcjtcbiAgZnRzU2NvcmU/OiBudW1iZXI7XG59XG5cbi8qKiDrsqTsuZjrp4jtgawg6rKw6rO8ICovXG5leHBvcnQgaW50ZXJmYWNlIEJlbmNobWFya1Jlc3VsdCB7XG4gIHByb3ZpZGVyOiBFbWJlZGRpbmdQcm92aWRlcjtcbiAgZW1iZWRUaW1lOiBudW1iZXI7XG4gIHNlYXJjaFRpbWU6IG51bWJlcjtcbiAgcmVzdWx0czogVmVjdG9yU2VhcmNoUmVzdWx0W107XG59XG5cbi8qKiBWb3lhZ2UgQUkg7ISk7KCVICovXG5leHBvcnQgaW50ZXJmYWNlIFZveWFnZUNvbmZpZyB7XG4gIGFwaUtleTogc3RyaW5nO1xuICBiYXNlVXJsOiBzdHJpbmc7XG4gIG1vZGVsOiBzdHJpbmc7XG4gIGRpbWVuc2lvbnM6IG51bWJlcjtcbiAgbWF4VG9rZW5zOiBudW1iZXI7XG4gIGJhdGNoU2l6ZTogbnVtYmVyO1xufVxuXG4vKiogT3BlbkFJIOyEpOyglSAqL1xuZXhwb3J0IGludGVyZmFjZSBPcGVuQUlDb25maWcge1xuICBhcGlLZXk6IHN0cmluZztcbiAgYmFzZVVybDogc3RyaW5nO1xuICBtb2RlbDogc3RyaW5nO1xuICBkaW1lbnNpb25zOiBudW1iZXI7XG4gIG1heFRva2VuczogbnVtYmVyO1xuICBiYXRjaFNpemU6IG51bWJlcjtcbn1cblxuLyoqIOyyre2CuSDshKTsoJUgKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2h1bmtpbmdDb25maWcge1xuICBjaHVua1NpemU6IG51bWJlcjtcbiAgY2h1bmtPdmVybGFwOiBudW1iZXI7XG4gIG1pbkNodW5rU2l6ZTogbnVtYmVyO1xuICBza2lwVGhyZXNob2xkOiBudW1iZXI7XG4gIHNlcGFyYXRvcnM6IHN0cmluZ1tdO1xufVxuXG4vKiog6rKA7IOJIOyEpOyglSAqL1xuZXhwb3J0IGludGVyZmFjZSBTZWFyY2hDb25maWcge1xuICBkZWZhdWx0TGltaXQ6IG51bWJlcjtcbiAgc2ltaWxhcml0eVRocmVzaG9sZDogbnVtYmVyO1xuICB2ZWN0b3JXZWlnaHQ6IG51bWJlcjtcbiAgZnRzV2VpZ2h0OiBudW1iZXI7XG59XG5cbi8qKiBwZ3ZlY3RvciDshKTsoJUgKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGd2ZWN0b3JDb25maWcge1xuICBpdGVyYXRpdmVTY2FuOiBib29sZWFuO1xuICBlZlNlYXJjaDogbnVtYmVyO1xufVxuXG4vKiog7KCE7LK0IOuyoe2EsCDshKTsoJUgKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmVjdG9yQ29uZmlnIHtcbiAgdm95YWdlOiBWb3lhZ2VDb25maWc7XG4gIG9wZW5haTogT3BlbkFJQ29uZmlnO1xuICBjaHVua2luZzogQ2h1bmtpbmdDb25maWc7XG4gIHNlYXJjaDogU2VhcmNoQ29uZmlnO1xuICBwZ3ZlY3RvcjogUGd2ZWN0b3JDb25maWc7XG59XG5cbi8qKiDrsqHthLAg6rKA7IOJIOyYteyFmCAqL1xuZXhwb3J0IGludGVyZmFjZSBWZWN0b3JTZWFyY2hPcHRpb25zIHtcbiAgZW1iZWRkaW5nQ29sdW1uPzogc3RyaW5nO1xuICBsaW1pdD86IG51bWJlcjtcbiAgdGhyZXNob2xkPzogbnVtYmVyO1xuICB3aGVyZT86IHN0cmluZztcbn1cblxuLyoqIO2VmOydtOu4jOumrOuTnCDqsoDsg4kg7Ji17IWYICovXG5leHBvcnQgaW50ZXJmYWNlIEh5YnJpZFNlYXJjaE9wdGlvbnMgZXh0ZW5kcyBWZWN0b3JTZWFyY2hPcHRpb25zIHtcbiAgdmVjdG9yV2VpZ2h0PzogbnVtYmVyO1xuICBmdHNXZWlnaHQ/OiBudW1iZXI7XG4gIGZ0c0NvbHVtbj86IHN0cmluZztcbn1cblxuLyoqIOyehOuyoOuUqSDsoIDsnqUg7ZWt66qpICovXG5leHBvcnQgaW50ZXJmYWNlIEVtYmVkZGluZ0l0ZW0ge1xuICBpZDogbnVtYmVyO1xuICB0ZXh0OiBzdHJpbmc7XG59XG5cbi8qKiDsp4TtlonrpaAg7L2c67CxICovXG5leHBvcnQgdHlwZSBQcm9ncmVzc0NhbGxiYWNrID0gKHByb2Nlc3NlZDogbnVtYmVyLCB0b3RhbDogbnVtYmVyKSA9PiB2b2lkO1xuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztDQUVDLEdBRUQsWUFBWSxHQW1IWixXQUFXLEdBQ1gsV0FBMEUifQ==
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sonamu",
3
- "version": "0.7.11",
3
+ "version": "0.7.13",
4
4
  "description": "Sonamu — TypeScript Fullstack API Framework",
5
5
  "keywords": [
6
6
  "typescript",
@@ -68,6 +68,7 @@
68
68
  "knex": "^3.1.0",
69
69
  "mime-types": "^3.0.1",
70
70
  "minimatch": "^10.0.3",
71
+ "node-cron": "^4.2.1",
71
72
  "node-sql-parser": "^5.2.0",
72
73
  "pg": "^8.16.3",
73
74
  "prompts": "^2.4.2",
@@ -76,9 +77,10 @@
76
77
  "tsicli": "^1.0.5",
77
78
  "vitest": "^4.0.10",
78
79
  "zod": "^4.1.12",
79
- "@sonamu-kit/hmr-runner": "^0.1.1",
80
80
  "@sonamu-kit/hmr-hook": "^0.4.1",
81
- "@sonamu-kit/ts-loader": "^2.1.3"
81
+ "@sonamu-kit/tasks": "^0.0.1",
82
+ "@sonamu-kit/ts-loader": "^2.1.3",
83
+ "@sonamu-kit/hmr-runner": "^0.1.1"
82
84
  },
83
85
  "devDependencies": {
84
86
  "@biomejs/biome": "^2.3.7",
@@ -102,8 +104,8 @@
102
104
  "ai": "6.0.0-beta.138",
103
105
  "fastify": "^4.23.2",
104
106
  "knex": "^3.1.0",
105
- "typescript": "^5.9.3",
106
107
  "pgvector": "^0.2.1",
108
+ "typescript": "^5.9.3",
107
109
  "voyageai": "^0.0.8"
108
110
  },
109
111
  "peerDependenciesMeta": {
@@ -128,7 +130,9 @@
128
130
  },
129
131
  "scripts": {
130
132
  "dev": "nodemon exec",
131
- "build": "rm -rf dist && swc src -d dist --strip-leading-paths && tsc --emitDeclarationOnly",
133
+ "build": "run-s 'build:sonamu' 'build:ui-web'",
134
+ "build:sonamu": "rm -rf dist && swc src -d dist --strip-leading-paths && tsc --emitDeclarationOnly",
135
+ "build:ui-web": "cd ui-web && pnpm install && pnpm build",
132
136
  "test:type": "vitest --typecheck test-d.ts"
133
137
  }
134
138
  }
package/src/api/config.ts CHANGED
@@ -9,7 +9,9 @@ import type { QsPluginOptions } from "fastify-qs";
9
9
  import type { SsePluginOptions } from "fastify-sse-v2/lib/types";
10
10
  import type { Knex } from "knex";
11
11
  import type { Driver } from "../file-storage/driver";
12
- import type { SonamuFastifyConfig } from "../types/types";
12
+ import type { WorkflowOptions } from "../tasks/workflow-manager";
13
+ import type { Executable, SonamuFastifyConfig } from "../types/types";
14
+ import type { AuthContext, Context } from "./context";
13
15
 
14
16
  export type DatabaseConfig = Omit<Knex.Config, "connection"> & {
15
17
  connection?: Knex.PgConnectionConfig;
@@ -28,9 +30,6 @@ export type SonamuConfig = {
28
30
  sync: {
29
31
  targets: string[]; // "web", "app" 등
30
32
  };
31
- ui?: {
32
- port: number;
33
- };
34
33
 
35
34
  database: {
36
35
  // 데이터베이스
@@ -50,6 +49,7 @@ export type SonamuConfig = {
50
49
  };
51
50
 
52
51
  server: SonamuServerOptions;
52
+ tasks?: SonamuTaskOptions;
53
53
  };
54
54
 
55
55
  export type SonamuServerOptions = {
@@ -90,14 +90,18 @@ export type SonamuServerOptions = {
90
90
  };
91
91
  };
92
92
 
93
- // NOTE(Haze, 251209): config에는 T, Promise<T>, () => T, () => Promise<T>가 모두 올 수 있어야 함.
94
- export type SonamuConfigExport =
95
- | SonamuConfig
96
- | Promise<SonamuConfig>
97
- | (() => SonamuConfig)
98
- | (() => Promise<SonamuConfig>);
93
+ export type SonamuTaskOptions = {
94
+ // worker를 사용할지 여부, 기본적으로 daemon 모드에서만 사용됨.
95
+ enableWorker?: boolean;
96
+ workerOptions?: WorkflowOptions;
97
+ contextProvider: (
98
+ defaultContext: Pick<Context, "reply" | "request" | "headers" | "createSSE" | "naiteStore"> &
99
+ AuthContext,
100
+ ) => Context | Promise<Context>;
101
+ };
99
102
 
100
- export function defineConfig(config: SonamuConfigExport): Promise<SonamuConfig> {
103
+ // NOTE(Haze, 251209): config에는 T, Promise<T>, () => T, () => Promise<T>가 모두 올 수 있어야 함.
104
+ export function defineConfig(config: Executable<SonamuConfig>): Promise<SonamuConfig> {
101
105
  if (typeof config === "function") {
102
106
  return Promise.resolve(config());
103
107
  }
package/src/api/sonamu.ts CHANGED
@@ -3,15 +3,18 @@ import { AsyncLocalStorage } from "async_hooks";
3
3
  import type { FSWatcher } from "chokidar";
4
4
  import type { FastifyInstance, FastifyReply, FastifyRequest } from "fastify";
5
5
  import type { IncomingMessage, Server, ServerResponse } from "http";
6
+ import os from "os";
6
7
  import path from "path";
7
8
  import type { ZodObject } from "zod";
9
+ import { createMockSSEFactory, DB, isDaemonServer } from "..";
8
10
  import type { SonamuDBConfig } from "../database/db";
9
11
  import type { Driver } from "../file-storage/driver";
10
12
  import { Naite } from "../naite/naite";
11
13
  import type { Syncer } from "../syncer/syncer";
14
+ import type { WorkflowManager } from "../tasks/workflow-manager";
12
15
  import type { SonamuFastifyConfig } from "../types/types";
13
16
  import type { AbsolutePath } from "../utils/path-utils";
14
- import type { SonamuConfig, SonamuServerOptions } from "./config";
17
+ import type { SonamuConfig, SonamuServerOptions, SonamuTaskOptions } from "./config";
15
18
  import type { AuthContext, Context, UploadContext } from "./context";
16
19
  import type { ExtendedApi } from "./decorators";
17
20
 
@@ -42,7 +45,7 @@ class SonamuClass {
42
45
  request: null,
43
46
  reply: null,
44
47
  headers: {},
45
- createSSE: () => {},
48
+ createSSE: (schema: ZodObject) => createMockSSEFactory(schema),
46
49
  // biome-ignore lint/suspicious/noExplicitAny: 테스팅 환경에서 컨텍스트가 주입되지 않은 경우 빈 컨텍스트 리턴
47
50
  naiteStore: new Map<string, any>(),
48
51
  } as unknown as Context;
@@ -122,6 +125,15 @@ class SonamuClass {
122
125
  return this._storage;
123
126
  }
124
127
 
128
+ private _workflows: WorkflowManager | null = null;
129
+ get workflows(): WorkflowManager {
130
+ if (this._workflows === null) {
131
+ throw new Error("Sonamu has not been initialized");
132
+ }
133
+
134
+ return this._workflows;
135
+ }
136
+
125
137
  // HMR 처리
126
138
  public watcher: FSWatcher | null = null;
127
139
  private pendingFiles: string[] = [];
@@ -192,6 +204,9 @@ class SonamuClass {
192
204
  return;
193
205
  }
194
206
 
207
+ // Task 등록
208
+ await this.initializeWorkflows(this.config.tasks);
209
+
195
210
  // Syncer
196
211
  const { Syncer } = await import("../syncer/syncer");
197
212
  this.syncer = new Syncer();
@@ -200,6 +215,7 @@ class SonamuClass {
200
215
  await this.syncer.autoloadTypes();
201
216
  await this.syncer.autoloadModels();
202
217
  await this.syncer.autoloadApis();
218
+ await this.syncer.autoloadWorkflows();
203
219
 
204
220
  const { TemplateManager } = await import("../template");
205
221
  await TemplateManager.autoload();
@@ -215,8 +231,6 @@ class SonamuClass {
215
231
  await this.syncer.sync();
216
232
 
217
233
  await this.startWatcher();
218
-
219
- this.syncer.syncUI();
220
234
  }
221
235
 
222
236
  this.isInitialized = true;
@@ -330,10 +344,19 @@ class SonamuClass {
330
344
  },
331
345
  );
332
346
 
347
+ // Sonamu UI API
348
+ const { sonamuUIApiPlugin } = await import("../ui/api");
349
+ server.register(sonamuUIApiPlugin);
350
+
333
351
  // API 라우팅 (로컬HMR 상태와 구분)
334
352
  const { isLocal } = await import("../utils/controller");
335
353
  if (isLocal()) {
336
354
  server.all("*", async (request, reply) => {
355
+ // Sonamu UI
356
+ if (request.url.startsWith("/sonamu-ui")) {
357
+ return;
358
+ }
359
+
337
360
  const found = this.syncer.apis.find(
338
361
  (api) =>
339
362
  this.config.api.route.prefix + api.path === request.url.split("?")[0] &&
@@ -342,8 +365,14 @@ class SonamuClass {
342
365
  if (found) {
343
366
  return this.getApiHandler(found, config)(request, reply);
344
367
  }
345
- const { NotFoundException } = await import("../exceptions/so-exceptions");
346
- throw new NotFoundException("존재하지 않는 API 접근입니다.");
368
+
369
+ if (request.url.startsWith("/api/")) {
370
+ const { NotFoundException } = await import("../exceptions/so-exceptions");
371
+ throw new NotFoundException(`존재하지 않는 API 접근입니다. ${request.url}`);
372
+ }
373
+
374
+ // 일반 파일 접근시 별도의 에러 출력하지 않음
375
+ return;
347
376
  });
348
377
  } else {
349
378
  for (const api of this.syncer.apis) {
@@ -563,12 +592,36 @@ class SonamuClass {
563
592
  }
564
593
  }
565
594
 
595
+ private async initializeWorkflows(options: SonamuTaskOptions | undefined) {
596
+ const { WorkflowManager } = await import("../tasks/workflow-manager");
597
+ // NOTE: @sonamu-kit/tasks 안에선 knex config를 수정하기 때문에 connection이 아닌 config 째로 보냅니다.
598
+ this._workflows = await WorkflowManager.create(DB.getDBConfig("w"), true);
599
+ if (!options) {
600
+ return;
601
+ }
602
+
603
+ const enableWorker = options.enableWorker ?? isDaemonServer();
604
+ const defaultWorkerOptions = {
605
+ concurrency: os.cpus().length - 1,
606
+ usePubSub: true,
607
+ listenDelay: 500,
608
+ };
609
+
610
+ if (enableWorker) {
611
+ await this.workflows.setupWorker({
612
+ ...defaultWorkerOptions,
613
+ ...options.workerOptions,
614
+ });
615
+ }
616
+ }
617
+
566
618
  private async boot(server: FastifyInstance, options: SonamuServerOptions) {
567
619
  const port = options.listen?.port ?? 3000;
568
620
  const host = options.listen?.host ?? "localhost";
569
621
 
570
622
  server.addHook("onClose", async () => {
571
623
  await options.lifecycle?.onShutdown?.(server);
624
+ await this.workflows.destroy();
572
625
  await this.destroy();
573
626
  });
574
627
 
@@ -640,6 +693,7 @@ class SonamuClass {
640
693
  async destroy(): Promise<void> {
641
694
  const { BaseModel } = await import("../database/base-model");
642
695
  await BaseModel.destroy();
696
+ await this._workflows?.destroy();
643
697
  await this.watcher?.close();
644
698
  this.storage?.destroy();
645
699
  }