sonamu 0.9.19 → 0.10.0

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 (282) hide show
  1. package/dist/_virtual/_rolldown/runtime.js +36 -0
  2. package/dist/ai/agents/agent.js +5 -7
  3. package/dist/ai/agents/index.js +1 -2
  4. package/dist/ai/agents/types.js +1 -1
  5. package/dist/ai/index.js +1 -2
  6. package/dist/ai/providers/rtzr/api.js +2 -3
  7. package/dist/ai/providers/rtzr/error.js +14 -29
  8. package/dist/ai/providers/rtzr/index.js +1 -2
  9. package/dist/ai/providers/rtzr/model.js +13 -20
  10. package/dist/ai/providers/rtzr/options.js +2 -3
  11. package/dist/ai/providers/rtzr/provider.js +2 -3
  12. package/dist/ai/providers/rtzr/utils.js +12 -21
  13. package/dist/api/base-frame.js +4 -4
  14. package/dist/api/caster.js +21 -38
  15. package/dist/api/code-converters.js +41 -98
  16. package/dist/api/config.d.ts +1 -10
  17. package/dist/api/config.d.ts.map +1 -1
  18. package/dist/api/config.js +9 -8
  19. package/dist/api/context.js +2 -3
  20. package/dist/api/decorators.js +80 -116
  21. package/dist/api/index.js +2 -3
  22. package/dist/api/secret.js +6 -10
  23. package/dist/api/sonamu.d.ts.map +1 -1
  24. package/dist/api/sonamu.js +200 -387
  25. package/dist/api/validator.js +5 -8
  26. package/dist/api/websocket-helpers.js +21 -32
  27. package/dist/auth/audit-log/builders.js +2 -3
  28. package/dist/auth/audit-log/events.js +2 -2
  29. package/dist/auth/audit-log/plugin.js +30 -61
  30. package/dist/auth/audit-log-ingestor.js +19 -41
  31. package/dist/auth/auth-generator.js +16 -41
  32. package/dist/auth/better-auth-entities.js +3 -4
  33. package/dist/auth/index.js +2 -3
  34. package/dist/auth/knex-adapter.js +18 -45
  35. package/dist/auth/plugins/entity-definitions/admin.js +2 -2
  36. package/dist/auth/plugins/entity-definitions/anonymous.js +2 -2
  37. package/dist/auth/plugins/entity-definitions/api-key.js +2 -2
  38. package/dist/auth/plugins/entity-definitions/audit-log.js +2 -2
  39. package/dist/auth/plugins/entity-definitions/index.js +2 -3
  40. package/dist/auth/plugins/entity-definitions/jwt.js +2 -2
  41. package/dist/auth/plugins/entity-definitions/organization.js +2 -2
  42. package/dist/auth/plugins/entity-definitions/passkey.js +2 -2
  43. package/dist/auth/plugins/entity-definitions/phone-number.js +2 -2
  44. package/dist/auth/plugins/entity-definitions/sso.js +2 -2
  45. package/dist/auth/plugins/entity-definitions/two-factor.js +2 -2
  46. package/dist/auth/plugins/entity-definitions/types.js +1 -1
  47. package/dist/auth/plugins/entity-definitions/username.js +2 -2
  48. package/dist/auth/plugins/index.js +1 -2
  49. package/dist/auth/plugins/wrappers/admin.js +2 -3
  50. package/dist/auth/plugins/wrappers/anonymous.js +2 -3
  51. package/dist/auth/plugins/wrappers/api-key.js +2 -3
  52. package/dist/auth/plugins/wrappers/index.js +1 -2
  53. package/dist/auth/plugins/wrappers/jwt.js +2 -3
  54. package/dist/auth/plugins/wrappers/organization.js +2 -3
  55. package/dist/auth/plugins/wrappers/passkey.js +2 -3
  56. package/dist/auth/plugins/wrappers/phone-number.js +2 -3
  57. package/dist/auth/plugins/wrappers/sso.js +2 -3
  58. package/dist/auth/plugins/wrappers/two-factor.js +2 -3
  59. package/dist/auth/plugins/wrappers/username.js +2 -3
  60. package/dist/bin/build-config.js +2 -2
  61. package/dist/bin/cli.js +151 -258
  62. package/dist/bin/fixture.d.ts.map +1 -1
  63. package/dist/bin/fixture.js +55 -97
  64. package/dist/bin/hmr-hook-register.js +3 -3
  65. package/dist/bin/migrate-targets.d.ts +3 -0
  66. package/dist/bin/migrate-targets.d.ts.map +1 -0
  67. package/dist/bin/migrate-targets.js +11 -0
  68. package/dist/bin/test-command.js +25 -55
  69. package/dist/bin/ts-loader-register.js +5 -6
  70. package/dist/bin/ts-loader-registration.js +6 -13
  71. package/dist/cache/cache-manager.js +3 -4
  72. package/dist/cache/decorator.js +11 -21
  73. package/dist/cache/drivers.js +2 -3
  74. package/dist/cache/index.js +2 -3
  75. package/dist/cache/types.js +1 -1
  76. package/dist/cache-control/cache-control.js +21 -34
  77. package/dist/cache-control/types.js +1 -1
  78. package/dist/compress/compress.js +10 -10
  79. package/dist/compress/index.js +1 -2
  80. package/dist/compress/types.js +1 -1
  81. package/dist/cone/cone-generator.js +25 -63
  82. package/dist/database/_batch_update.js +26 -46
  83. package/dist/database/base-model.js +44 -97
  84. package/dist/database/base-model.types.js +1 -1
  85. package/dist/database/db.d.ts +8 -14
  86. package/dist/database/db.d.ts.map +1 -1
  87. package/dist/database/db.js +127 -72
  88. package/dist/database/knex.js +5 -8
  89. package/dist/database/puri-subset.types.js +1 -1
  90. package/dist/database/puri-wrapper.js +11 -15
  91. package/dist/database/puri.js +117 -234
  92. package/dist/database/puri.types.js +3 -4
  93. package/dist/database/transaction-context.js +4 -5
  94. package/dist/database/upsert-builder.js +109 -176
  95. package/dist/dict/en.d.ts +1 -0
  96. package/dist/dict/en.d.ts.map +1 -1
  97. package/dist/dict/en.js +4 -4
  98. package/dist/dict/index.js +2 -3
  99. package/dist/dict/ko.d.ts +1 -0
  100. package/dist/dict/ko.d.ts.map +1 -1
  101. package/dist/dict/ko.js +4 -4
  102. package/dist/dict/rc-keys.js +3 -4
  103. package/dist/dict/sd.js +8 -19
  104. package/dist/dict/sonamu-dictionary.js +141 -284
  105. package/dist/dict/types.js +1 -1
  106. package/dist/dict/utils.js +4 -5
  107. package/dist/entity/entity-manager.d.ts +2 -2
  108. package/dist/entity/entity-manager.js +34 -82
  109. package/dist/entity/entity-template-cone.js +33 -66
  110. package/dist/entity/entity.js +156 -310
  111. package/dist/env.d.ts +14 -0
  112. package/dist/env.d.ts.map +1 -0
  113. package/dist/env.js +75 -0
  114. package/dist/exceptions/error-handler.js +2 -3
  115. package/dist/exceptions/so-exceptions.js +7 -5
  116. package/dist/filter/index.js +1 -2
  117. package/dist/filter/types.js +3 -4
  118. package/dist/filter/utils.js +21 -54
  119. package/dist/index.js +8 -7
  120. package/dist/logger/category.js +6 -12
  121. package/dist/logger/configure.js +23 -34
  122. package/dist/migration/code-generation.js +146 -314
  123. package/dist/migration/index-where-predicate.js +52 -144
  124. package/dist/migration/migration-set.js +19 -33
  125. package/dist/migration/migrator.d.ts +2 -0
  126. package/dist/migration/migrator.d.ts.map +1 -1
  127. package/dist/migration/migrator.js +69 -53
  128. package/dist/migration/postgresql-schema-reader.js +126 -225
  129. package/dist/migration/slack-confirm.d.ts +1 -0
  130. package/dist/migration/slack-confirm.d.ts.map +1 -1
  131. package/dist/migration/slack-confirm.js +28 -38
  132. package/dist/migration/types.js +1 -1
  133. package/dist/naite/messaging-types.js +1 -1
  134. package/dist/naite/naite-reporter.js +15 -32
  135. package/dist/naite/naite.js +43 -76
  136. package/dist/ssr/index.js +6 -9
  137. package/dist/ssr/registry.js +10 -18
  138. package/dist/ssr/renderer.js +10 -21
  139. package/dist/ssr/types.js +1 -1
  140. package/dist/storage/base-file.js +5 -10
  141. package/dist/storage/buffered-file.js +3 -4
  142. package/dist/storage/drivers.js +2 -3
  143. package/dist/storage/index.js +2 -3
  144. package/dist/storage/s3-driver.js +5 -9
  145. package/dist/storage/storage-manager.js +5 -5
  146. package/dist/storage/types.js +1 -1
  147. package/dist/storage/uploaded-file.js +4 -6
  148. package/dist/stream/index.js +1 -2
  149. package/dist/stream/sse.js +8 -13
  150. package/dist/stream/ws-audience-resolver.js +5 -5
  151. package/dist/stream/ws-audience.js +3 -4
  152. package/dist/stream/ws-cluster-bus.js +3 -4
  153. package/dist/stream/ws-core.js +1 -1
  154. package/dist/stream/ws-delivery.js +11 -25
  155. package/dist/stream/ws-local-connection-store.js +9 -18
  156. package/dist/stream/ws-presence-store.js +43 -97
  157. package/dist/stream/ws-registry.js +17 -22
  158. package/dist/stream/ws-telemetry-memory.js +38 -45
  159. package/dist/stream/ws-telemetry-trace.js +4 -6
  160. package/dist/stream/ws-telemetry.js +82 -135
  161. package/dist/stream/ws.js +47 -91
  162. package/dist/syncer/api-parser.js +81 -147
  163. package/dist/syncer/checksum.js +9 -20
  164. package/dist/syncer/code-generator.js +29 -47
  165. package/dist/syncer/entity-operations.js +17 -27
  166. package/dist/syncer/event-batcher.js +8 -15
  167. package/dist/syncer/file-patterns.js +3 -4
  168. package/dist/syncer/file-tracking.js +6 -10
  169. package/dist/syncer/index.js +1 -2
  170. package/dist/syncer/module-loader.js +10 -26
  171. package/dist/syncer/syncer-actions.js +19 -37
  172. package/dist/syncer/syncer.js +46 -98
  173. package/dist/syncer/watcher.js +12 -26
  174. package/dist/tasks/decorator.js +7 -11
  175. package/dist/tasks/step-wrapper.js +7 -8
  176. package/dist/tasks/workflow-manager.js +18 -25
  177. package/dist/template/entity-converter.js +40 -64
  178. package/dist/template/helpers.js +32 -63
  179. package/dist/template/implementations/entity.template.js +7 -11
  180. package/dist/template/implementations/entry-server.template.js +2 -3
  181. package/dist/template/implementations/generated.template.js +25 -51
  182. package/dist/template/implementations/generated_http.template.js +31 -58
  183. package/dist/template/implementations/generated_sso.template.js +45 -85
  184. package/dist/template/implementations/init_types.template.js +4 -7
  185. package/dist/template/implementations/model.template.js +5 -10
  186. package/dist/template/implementations/model_test.template.js +2 -3
  187. package/dist/template/implementations/queries.template.js +4 -7
  188. package/dist/template/implementations/sd.template.js +17 -35
  189. package/dist/template/implementations/services.template.js +18 -30
  190. package/dist/template/implementations/view_form.template.js +72 -125
  191. package/dist/template/implementations/view_id_all_select.template.js +2 -3
  192. package/dist/template/implementations/view_list.template.js +86 -143
  193. package/dist/template/implementations/view_search_input.template.js +2 -3
  194. package/dist/template/index.js +5 -8
  195. package/dist/template/template-manager.js +13 -26
  196. package/dist/template/template-types.js +2 -3
  197. package/dist/template/template.js +7 -11
  198. package/dist/template/zod-converter.js +173 -348
  199. package/dist/testing/_relation-graph.js +18 -37
  200. package/dist/testing/bootstrap.js +5 -8
  201. package/dist/testing/data-explorer.js +34 -78
  202. package/dist/testing/dev-test-routes.js +54 -60
  203. package/dist/testing/dev-vitest-manager.js +33 -84
  204. package/dist/testing/faker-mappings.js +3 -4
  205. package/dist/testing/fixture-generator.d.ts +2 -1
  206. package/dist/testing/fixture-generator.d.ts.map +1 -1
  207. package/dist/testing/fixture-generator.js +159 -321
  208. package/dist/testing/fixture-loader.js +2 -2
  209. package/dist/testing/fixture-manager.d.ts.map +1 -1
  210. package/dist/testing/fixture-manager.js +124 -227
  211. package/dist/testing/global-setup.d.ts.map +1 -1
  212. package/dist/testing/global-setup.js +29 -17
  213. package/dist/testing/index.js +1 -2
  214. package/dist/testing/naite-vitest-reporter.js +2 -3
  215. package/dist/testing/parallel-db-manager.js +5 -3
  216. package/dist/testing/vitest-helpers.d.ts.map +1 -1
  217. package/dist/testing/vitest-helpers.js +15 -12
  218. package/dist/types/types.d.ts +14 -14
  219. package/dist/types/types.js +27 -50
  220. package/dist/ui/ai-api.js +6 -11
  221. package/dist/ui/ai-client.js +86 -134
  222. package/dist/ui/api.js +99 -195
  223. package/dist/ui/cdd-service.js +78 -130
  224. package/dist/ui/cdd-types.js +1 -1
  225. package/dist/ui-web/assets/{index-Df8q-fhb.js → index-DFStGyd0.js} +49 -49
  226. package/dist/ui-web/assets/index-Dx4ap5i4.css +1 -0
  227. package/dist/ui-web/index.html +2 -2
  228. package/dist/utils/async-utils.js +13 -25
  229. package/dist/utils/class-name.js +3 -4
  230. package/dist/utils/console-util.js +11 -26
  231. package/dist/utils/controller.d.ts.map +1 -1
  232. package/dist/utils/controller.js +14 -12
  233. package/dist/utils/esm-utils.js +5 -8
  234. package/dist/utils/formatter.js +10 -22
  235. package/dist/utils/fs-utils.js +14 -25
  236. package/dist/utils/lodash-able.js +3 -4
  237. package/dist/utils/model.js +7 -14
  238. package/dist/utils/object-utils.js +41 -73
  239. package/dist/utils/path-utils.js +5 -9
  240. package/dist/utils/process-utils.js +4 -7
  241. package/dist/utils/sql-parser.js +6 -13
  242. package/dist/utils/type-utils.js +16 -26
  243. package/dist/utils/utils.js +18 -40
  244. package/dist/utils/zod-error.js +9 -16
  245. package/dist/vector/chunking.js +24 -37
  246. package/dist/vector/config.js +2 -2
  247. package/dist/vector/embedding.js +8 -19
  248. package/dist/vector/index.js +1 -2
  249. package/dist/vector/types.js +1 -1
  250. package/package.json +7 -7
  251. package/src/__tests__/env.test.ts +127 -0
  252. package/src/api/__tests__/config.test.ts +10 -1
  253. package/src/api/config.ts +4 -12
  254. package/src/api/sonamu.ts +14 -4
  255. package/src/bin/__tests__/migrate-targets.test.ts +28 -0
  256. package/src/bin/__tests__/test-command.test.ts +82 -1
  257. package/src/bin/cli.ts +9 -18
  258. package/src/bin/fixture.ts +5 -4
  259. package/src/bin/migrate-targets.ts +7 -0
  260. package/src/bin/test-command.ts +2 -2
  261. package/src/database/__tests__/db.test.ts +175 -0
  262. package/src/database/db.ts +193 -71
  263. package/src/dict/en.ts +2 -0
  264. package/src/dict/ko.ts +2 -0
  265. package/src/env.ts +123 -0
  266. package/src/migration/__tests__/migrator.test.ts +149 -0
  267. package/src/migration/migrator.ts +74 -17
  268. package/src/migration/slack-confirm.ts +21 -0
  269. package/src/skills/sonamu/database.md +1 -1
  270. package/src/skills/sonamu/entity-basic.md +31 -0
  271. package/src/skills/sonamu/puri.md +22 -0
  272. package/src/skills/sonamu/testing-devrunner.md +1 -1
  273. package/src/skills/sonamu/upsert.md +53 -6
  274. package/src/stream/ws-telemetry-memory.ts +2 -2
  275. package/src/testing/fixture-generator.ts +2 -1
  276. package/src/testing/fixture-manager.ts +3 -4
  277. package/src/testing/global-setup.ts +42 -18
  278. package/src/testing/vitest-helpers.ts +14 -0
  279. package/src/utils/controller.ts +14 -7
  280. package/tsdown.api.config.ts +6 -0
  281. package/dist/_virtual/rolldown_runtime.js +0 -39
  282. package/dist/ui-web/assets/index-D4rYm-Xz.css +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"global-setup.d.ts","sourceRoot":"","sources":["../../src/testing/global-setup.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,iBAAiB,uCA6BhC;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,KAAK,oCAAsB,CAAC"}
1
+ {"version":3,"file":"global-setup.d.ts","sourceRoot":"","sources":["../../src/testing/global-setup.ts"],"names":[],"mappings":"AAgBA;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,iBAAiB,uCAwChC;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,KAAK,oCAAsB,CAAC"}
@@ -1,8 +1,13 @@
1
+ import { DB, init_db } from "../database/db.js";
1
2
  import { init_config, loadConfig } from "../api/config.js";
2
3
  import { ParallelDBManager } from "./parallel-db-manager.js";
3
-
4
4
  //#region src/testing/global-setup.ts
5
5
  init_config();
6
+ init_db();
7
+ function restoreProcessEnv(snapshot) {
8
+ for (const key of Object.keys(process.env)) if (!(key in snapshot)) delete process.env[key];
9
+ for (const [key, value] of Object.entries(snapshot)) process.env[key] = value;
10
+ }
6
11
  /**
7
12
  * vitest globalSetup 함수를 생성합니다.
8
13
  * sonamu.config.ts의 test 설정을 읽어서 병렬 테스트 환경을 구성합니다.
@@ -21,24 +26,31 @@ init_config();
21
26
  * ```
22
27
  */
23
28
  function createGlobalSetup() {
24
- return async function setup$1() {
29
+ return async function setup() {
25
30
  const { findApiRootPath } = await import("../utils/utils.js");
26
31
  const rootPath = findApiRootPath();
32
+ const envBeforeConfigLoad = { ...process.env };
27
33
  const config = await loadConfig(rootPath);
28
- if (!config.test?.parallel) {
29
- return async function teardown() {};
34
+ try {
35
+ if (!config.test?.parallel) return async function teardown() {};
36
+ const maxWorkers = config.test.maxWorkers ?? 4;
37
+ const testConnection = DB.generateDBConfig(config.database, config.projectName).test.connection;
38
+ const templateDb = testConnection.database;
39
+ const adminConnection = {
40
+ ...testConnection,
41
+ database: "postgres"
42
+ };
43
+ const manager = new ParallelDBManager(maxWorkers, {
44
+ client: config.database.database ?? "pg",
45
+ connection: adminConnection
46
+ }, templateDb);
47
+ await manager.createWorkerDatabases();
48
+ return async function teardown() {
49
+ await manager.dropWorkerDatabases();
50
+ };
51
+ } finally {
52
+ restoreProcessEnv(envBeforeConfigLoad);
30
53
  }
31
- const maxWorkers = config.test.maxWorkers ?? 4;
32
- const templateDb = `${config.database.name}_test`;
33
- const connectionConfig = {
34
- client: config.database.database ?? "pg",
35
- connection: config.database.environments?.test?.connection ?? config.database.defaultOptions.connection
36
- };
37
- const manager = new ParallelDBManager(maxWorkers, connectionConfig, templateDb);
38
- await manager.createWorkerDatabases();
39
- return async function teardown() {
40
- await manager.dropWorkerDatabases();
41
- };
42
54
  };
43
55
  }
44
56
  /**
@@ -52,7 +64,7 @@ function createGlobalSetup() {
52
64
  * ```
53
65
  */
54
66
  const setup = createGlobalSetup();
55
-
56
67
  //#endregion
57
68
  export { createGlobalSetup, setup };
58
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2xvYmFsLXNldHVwLmpzIiwibmFtZXMiOlsic2V0dXAiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVzdGluZy9nbG9iYWwtc2V0dXAudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbG9hZENvbmZpZyB9IGZyb20gXCIuLi9hcGkvY29uZmlnXCI7XG5pbXBvcnQgeyBQYXJhbGxlbERCTWFuYWdlciB9IGZyb20gXCIuL3BhcmFsbGVsLWRiLW1hbmFnZXJcIjtcblxuLyoqXG4gKiB2aXRlc3QgZ2xvYmFsU2V0dXAg7ZWo7IiY66W8IOyDneyEse2VqeuLiOuLpC5cbiAqIHNvbmFtdS5jb25maWcudHPsnZggdGVzdCDshKTsoJXsnYQg7J297Ja07IScIOuzkeugrCDthYzsiqTtirgg7ZmY6rK97J2EIOq1rOyEse2VqeuLiOuLpC5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogLy8gc3JjL3Rlc3RpbmcvZ2xvYmFsLnRzXG4gKiBleHBvcnQgeyBzZXR1cCB9IGZyb20gXCJzb25hbXUvdGVzdFwiO1xuICogYGBgXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC8vIHNyYy90ZXN0aW5nL2dsb2JhbC50c1xuICogaW1wb3J0IHsgY3JlYXRlR2xvYmFsU2V0dXAgfSBmcm9tIFwic29uYW11L3Rlc3RcIjtcbiAqIGV4cG9ydCBjb25zdCBzZXR1cCA9IGNyZWF0ZUdsb2JhbFNldHVwKHsgcm9vdFBhdGg6IHByb2Nlc3MuY3dkKCkgfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUdsb2JhbFNldHVwKCkge1xuICByZXR1cm4gYXN5bmMgZnVuY3Rpb24gc2V0dXAoKSB7XG4gICAgY29uc3QgeyBmaW5kQXBpUm9vdFBhdGggfSA9IGF3YWl0IGltcG9ydChcIi4uL3V0aWxzL3V0aWxzXCIpO1xuICAgIGNvbnN0IHJvb3RQYXRoID0gZmluZEFwaVJvb3RQYXRoKCk7XG4gICAgY29uc3QgY29uZmlnID0gYXdhaXQgbG9hZENvbmZpZyhyb290UGF0aCk7XG5cbiAgICAvLyDrs5HroKwg7YWM7Iqk7Yq46rCAIOu5hO2ZnOyEse2ZlOuQnCDqsr3smrAg7JWE66y06rKD64+EIO2VmOyngCDslYrsnYxcbiAgICBpZiAoIWNvbmZpZy50ZXN0Py5wYXJhbGxlbCkge1xuICAgICAgcmV0dXJuIGFzeW5jIGZ1bmN0aW9uIHRlYXJkb3duKCkge1xuICAgICAgICAvLyBuby1vcFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBtYXhXb3JrZXJzID0gY29uZmlnLnRlc3QubWF4V29ya2VycyA/PyA0O1xuICAgIGNvbnN0IHRlbXBsYXRlRGIgPSBgJHtjb25maWcuZGF0YWJhc2UubmFtZX1fdGVzdGA7XG5cbiAgICBjb25zdCBjb25uZWN0aW9uQ29uZmlnID0ge1xuICAgICAgY2xpZW50OiBjb25maWcuZGF0YWJhc2UuZGF0YWJhc2UgPz8gKFwicGdcIiBhcyBjb25zdCksXG4gICAgICBjb25uZWN0aW9uOlxuICAgICAgICBjb25maWcuZGF0YWJhc2UuZW52aXJvbm1lbnRzPy50ZXN0Py5jb25uZWN0aW9uID8/IGNvbmZpZy5kYXRhYmFzZS5kZWZhdWx0T3B0aW9ucy5jb25uZWN0aW9uLFxuICAgIH07XG5cbiAgICBjb25zdCBtYW5hZ2VyID0gbmV3IFBhcmFsbGVsREJNYW5hZ2VyKG1heFdvcmtlcnMsIGNvbm5lY3Rpb25Db25maWcsIHRlbXBsYXRlRGIpO1xuICAgIGF3YWl0IG1hbmFnZXIuY3JlYXRlV29ya2VyRGF0YWJhc2VzKCk7XG5cbiAgICByZXR1cm4gYXN5bmMgZnVuY3Rpb24gdGVhcmRvd24oKSB7XG4gICAgICBhd2FpdCBtYW5hZ2VyLmRyb3BXb3JrZXJEYXRhYmFzZXMoKTtcbiAgICB9O1xuICB9O1xufVxuXG4vKipcbiAqIOq4sOuzuCBnbG9iYWxTZXR1cCDtlajsiJjsnoXri4jri6QuXG4gKiBzb25hbXUuY29uZmlnLnRz7J2YIHRlc3Qg7ISk7KCV7J2EIOydveyWtOyEnCDrs5HroKwg7YWM7Iqk7Yq4IO2ZmOqyveydhCDqtazshLHtlanri4jri6QuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC8vIHNyYy90ZXN0aW5nL2dsb2JhbC50c1xuICogZXhwb3J0IHsgc2V0dXAgfSBmcm9tIFwic29uYW11L3Rlc3RcIjtcbiAqIGBgYFxuICovXG5leHBvcnQgY29uc3Qgc2V0dXAgPSBjcmVhdGVHbG9iYWxTZXR1cCgpO1xuIl0sIm1hcHBpbmdzIjoiOzs7O2FBQTJDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFvQjNDLFNBQWdCLG9CQUFvQjtBQUNsQyxRQUFPLGVBQWVBLFVBQVE7RUFDNUIsTUFBTSxFQUFFLG9CQUFvQixNQUFNLE9BQU87RUFDekMsTUFBTSxXQUFXLGlCQUFpQjtFQUNsQyxNQUFNLFNBQVMsTUFBTSxXQUFXLFNBQVM7QUFHekMsTUFBSSxDQUFDLE9BQU8sTUFBTSxVQUFVO0FBQzFCLFVBQU8sZUFBZSxXQUFXOztFQUtuQyxNQUFNLGFBQWEsT0FBTyxLQUFLLGNBQWM7RUFDN0MsTUFBTSxhQUFhLEdBQUcsT0FBTyxTQUFTLEtBQUs7RUFFM0MsTUFBTSxtQkFBbUI7R0FDdkIsUUFBUSxPQUFPLFNBQVMsWUFBYTtHQUNyQyxZQUNFLE9BQU8sU0FBUyxjQUFjLE1BQU0sY0FBYyxPQUFPLFNBQVMsZUFBZTtHQUNwRjtFQUVELE1BQU0sVUFBVSxJQUFJLGtCQUFrQixZQUFZLGtCQUFrQixXQUFXO0FBQy9FLFFBQU0sUUFBUSx1QkFBdUI7QUFFckMsU0FBTyxlQUFlLFdBQVc7QUFDL0IsU0FBTSxRQUFRLHFCQUFxQjs7Ozs7Ozs7Ozs7Ozs7QUFlekMsTUFBYSxRQUFRLG1CQUFtQiJ9
69
+
70
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2xvYmFsLXNldHVwLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZXN0aW5nL2dsb2JhbC1zZXR1cC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBsb2FkQ29uZmlnIH0gZnJvbSBcIi4uL2FwaS9jb25maWdcIjtcbmltcG9ydCB7IERCIH0gZnJvbSBcIi4uL2RhdGFiYXNlL2RiXCI7XG5pbXBvcnQgeyBQYXJhbGxlbERCTWFuYWdlciB9IGZyb20gXCIuL3BhcmFsbGVsLWRiLW1hbmFnZXJcIjtcblxuZnVuY3Rpb24gcmVzdG9yZVByb2Nlc3NFbnYoc25hcHNob3Q6IE5vZGVKUy5Qcm9jZXNzRW52KTogdm9pZCB7XG4gIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHByb2Nlc3MuZW52KSkge1xuICAgIGlmICghKGtleSBpbiBzbmFwc2hvdCkpIHtcbiAgICAgIGRlbGV0ZSBwcm9jZXNzLmVudltrZXldO1xuICAgIH1cbiAgfVxuXG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHNuYXBzaG90KSkge1xuICAgIHByb2Nlc3MuZW52W2tleV0gPSB2YWx1ZTtcbiAgfVxufVxuXG4vKipcbiAqIHZpdGVzdCBnbG9iYWxTZXR1cCDtlajsiJjrpbwg7IOd7ISx7ZWp64uI64ukLlxuICogc29uYW11LmNvbmZpZy50c+ydmCB0ZXN0IOyEpOygleydhCDsnb3slrTshJwg67OR66CsIO2FjOyKpO2KuCDtmZjqsr3snYQg6rWs7ISx7ZWp64uI64ukLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAvLyBzcmMvdGVzdGluZy9nbG9iYWwudHNcbiAqIGV4cG9ydCB7IHNldHVwIH0gZnJvbSBcInNvbmFtdS90ZXN0XCI7XG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogLy8gc3JjL3Rlc3RpbmcvZ2xvYmFsLnRzXG4gKiBpbXBvcnQgeyBjcmVhdGVHbG9iYWxTZXR1cCB9IGZyb20gXCJzb25hbXUvdGVzdFwiO1xuICogZXhwb3J0IGNvbnN0IHNldHVwID0gY3JlYXRlR2xvYmFsU2V0dXAoeyByb290UGF0aDogcHJvY2Vzcy5jd2QoKSB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlR2xvYmFsU2V0dXAoKSB7XG4gIHJldHVybiBhc3luYyBmdW5jdGlvbiBzZXR1cCgpIHtcbiAgICBjb25zdCB7IGZpbmRBcGlSb290UGF0aCB9ID0gYXdhaXQgaW1wb3J0KFwiLi4vdXRpbHMvdXRpbHNcIik7XG4gICAgY29uc3Qgcm9vdFBhdGggPSBmaW5kQXBpUm9vdFBhdGgoKTtcbiAgICBjb25zdCBlbnZCZWZvcmVDb25maWdMb2FkID0geyAuLi5wcm9jZXNzLmVudiB9O1xuICAgIGNvbnN0IGNvbmZpZyA9IGF3YWl0IGxvYWRDb25maWcocm9vdFBhdGgpO1xuXG4gICAgdHJ5IHtcbiAgICAgIC8vIOuzkeugrCDthYzsiqTtirjqsIAg67mE7Zmc7ISx7ZmU65CcIOqyveyasCDslYTrrLTqsoPrj4Qg7ZWY7KeAIOyViuydjFxuICAgICAgaWYgKCFjb25maWcudGVzdD8ucGFyYWxsZWwpIHtcbiAgICAgICAgcmV0dXJuIGFzeW5jIGZ1bmN0aW9uIHRlYXJkb3duKCkge1xuICAgICAgICAgIC8vIG5vLW9wXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1heFdvcmtlcnMgPSBjb25maWcudGVzdC5tYXhXb3JrZXJzID8/IDQ7XG4gICAgICBjb25zdCBkYkNvbmZpZyA9IERCLmdlbmVyYXRlREJDb25maWcoY29uZmlnLmRhdGFiYXNlLCBjb25maWcucHJvamVjdE5hbWUpO1xuICAgICAgY29uc3QgdGVzdENvbm5lY3Rpb24gPSBkYkNvbmZpZy50ZXN0LmNvbm5lY3Rpb247XG4gICAgICBjb25zdCB0ZW1wbGF0ZURiID0gKHRlc3RDb25uZWN0aW9uIGFzIHsgZGF0YWJhc2U6IHN0cmluZyB9KS5kYXRhYmFzZTtcblxuICAgICAgY29uc3QgYWRtaW5Db25uZWN0aW9uID0ge1xuICAgICAgICAuLi4odGVzdENvbm5lY3Rpb24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pLFxuICAgICAgICBkYXRhYmFzZTogXCJwb3N0Z3Jlc1wiLFxuICAgICAgfTtcblxuICAgICAgY29uc3QgY29ubmVjdGlvbkNvbmZpZyA9IHtcbiAgICAgICAgY2xpZW50OiBjb25maWcuZGF0YWJhc2UuZGF0YWJhc2UgPz8gKFwicGdcIiBhcyBjb25zdCksXG4gICAgICAgIGNvbm5lY3Rpb246IGFkbWluQ29ubmVjdGlvbixcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IG1hbmFnZXIgPSBuZXcgUGFyYWxsZWxEQk1hbmFnZXIobWF4V29ya2VycywgY29ubmVjdGlvbkNvbmZpZywgdGVtcGxhdGVEYik7XG4gICAgICBhd2FpdCBtYW5hZ2VyLmNyZWF0ZVdvcmtlckRhdGFiYXNlcygpO1xuXG4gICAgICByZXR1cm4gYXN5bmMgZnVuY3Rpb24gdGVhcmRvd24oKSB7XG4gICAgICAgIGF3YWl0IG1hbmFnZXIuZHJvcFdvcmtlckRhdGFiYXNlcygpO1xuICAgICAgfTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgcmVzdG9yZVByb2Nlc3NFbnYoZW52QmVmb3JlQ29uZmlnTG9hZCk7XG4gICAgfVxuICB9O1xufVxuXG4vKipcbiAqIOq4sOuzuCBnbG9iYWxTZXR1cCDtlajsiJjsnoXri4jri6QuXG4gKiBzb25hbXUuY29uZmlnLnRz7J2YIHRlc3Qg7ISk7KCV7J2EIOydveyWtOyEnCDrs5HroKwg7YWM7Iqk7Yq4IO2ZmOqyveydhCDqtazshLHtlanri4jri6QuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC8vIHNyYy90ZXN0aW5nL2dsb2JhbC50c1xuICogZXhwb3J0IHsgc2V0dXAgfSBmcm9tIFwic29uYW11L3Rlc3RcIjtcbiAqIGBgYFxuICovXG5leHBvcnQgY29uc3Qgc2V0dXAgPSBjcmVhdGVHbG9iYWxTZXR1cCgpO1xuIl0sIm1hcHBpbmdzIjoiOzs7O1lBQTBDO1FBQ1A7QUFHbkMsU0FBUyxrQkFBa0IsVUFBbUM7Q0FDNUQsS0FBSyxNQUFNLE9BQU8sT0FBTyxLQUFLLFFBQVEsR0FBRyxHQUN2QyxJQUFJLEVBQUUsT0FBTyxXQUNYLE9BQU8sUUFBUSxJQUFJO0NBSXZCLEtBQUssTUFBTSxDQUFDLEtBQUssVUFBVSxPQUFPLFFBQVEsUUFBUSxHQUNoRCxRQUFRLElBQUksT0FBTztBQUV2Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBbUJBLFNBQWdCLG9CQUFvQjtDQUNsQyxPQUFPLGVBQWUsUUFBUTtFQUM1QixNQUFNLEVBQUUsb0JBQW9CLE1BQU0sT0FBTztFQUN6QyxNQUFNLFdBQVcsZ0JBQWdCO0VBQ2pDLE1BQU0sc0JBQXNCLEVBQUUsR0FBRyxRQUFRLElBQUk7RUFDN0MsTUFBTSxTQUFTLE1BQU0sV0FBVyxRQUFRO0VBRXhDLElBQUk7R0FFRixJQUFJLENBQUMsT0FBTyxNQUFNLFVBQ2hCLE9BQU8sZUFBZSxXQUFXLENBRWpDO0dBR0YsTUFBTSxhQUFhLE9BQU8sS0FBSyxjQUFjO0dBRTdDLE1BQU0saUJBRFcsR0FBRyxpQkFBaUIsT0FBTyxVQUFVLE9BQU8sV0FDdEMsQ0FBQSxDQUFTLEtBQUs7R0FDckMsTUFBTSxhQUFjLGVBQXdDO0dBRTVELE1BQU0sa0JBQWtCO0lBQ3RCLEdBQUk7SUFDSixVQUFVO0dBQ1o7R0FPQSxNQUFNLFVBQVUsSUFBSSxrQkFBa0IsWUFBWTtJQUpoRCxRQUFRLE9BQU8sU0FBUyxZQUFhO0lBQ3JDLFlBQVk7R0FHb0MsR0FBa0IsVUFBVTtHQUM5RSxNQUFNLFFBQVEsc0JBQXNCO0dBRXBDLE9BQU8sZUFBZSxXQUFXO0lBQy9CLE1BQU0sUUFBUSxvQkFBb0I7R0FDcEM7RUFDRixVQUFVO0dBQ1Isa0JBQWtCLG1CQUFtQjtFQUN2QztDQUNGO0FBQ0Y7Ozs7Ozs7Ozs7O0FBWUEsTUFBYSxRQUFRLGtCQUFrQiJ9
@@ -8,13 +8,12 @@ import { ParallelDBManager } from "./parallel-db-manager.js";
8
8
  import { createGlobalSetup, setup } from "./global-setup.js";
9
9
  import { NaiteVitestReporter } from "./naite-vitest-reporter.js";
10
10
  import { getSonamuTestConfig } from "./vitest-helpers.js";
11
-
12
11
  //#region src/testing/index.ts
13
12
  init_data_explorer();
14
13
  init_dev_vitest_manager();
15
14
  init_fixture_generator();
16
15
  init_fixture_manager();
17
-
18
16
  //#endregion
19
17
  export { DataExplorer, DevVitestManager, FixtureGenerator, FixtureManager, FixtureManagerClass, NaiteVitestReporter, ParallelDBManager, bootstrap, createFixtureLoader, createGlobalSetup, getSonamuTestConfig, runWithContext, runWithMockContext, setup, test, testAs };
18
+
20
19
  //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Rlc3RpbmcvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSBcIi4vYm9vdHN0cmFwXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9kYXRhLWV4cGxvcmVyXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9kZXYtdml0ZXN0LW1hbmFnZXJcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2ZpeHR1cmUtZ2VuZXJhdG9yXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9maXh0dXJlLWxvYWRlclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vZml4dHVyZS1tYW5hZ2VyXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9nbG9iYWwtc2V0dXBcIjtcbmV4cG9ydCAqIGZyb20gXCIuL25haXRlLXZpdGVzdC1yZXBvcnRlclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vcGFyYWxsZWwtZGItbWFuYWdlclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vdml0ZXN0LWhlbHBlcnNcIjtcbiJdLCJtYXBwaW5ncyI6IiJ9
@@ -1,5 +1,4 @@
1
1
  import { NaiteReporter } from "../naite/naite-reporter.js";
2
-
3
2
  //#region src/testing/naite-vitest-reporter.ts
4
3
  /**
5
4
  * Naite Vitest Reporter
@@ -16,7 +15,7 @@ const NaiteVitestReporter = {
16
15
  await NaiteReporter.endTestRun();
17
16
  }
18
17
  };
19
-
20
18
  //#endregion
21
19
  export { NaiteVitestReporter };
22
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmFpdGUtdml0ZXN0LXJlcG9ydGVyLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZXN0aW5nL25haXRlLXZpdGVzdC1yZXBvcnRlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOYWl0ZVJlcG9ydGVyIH0gZnJvbSBcIi4uL25haXRlL25haXRlLXJlcG9ydGVyXCI7XG5cbi8qKlxuICogTmFpdGUgVml0ZXN0IFJlcG9ydGVyXG4gKlxuICog7YWM7Iqk7Yq4IOufsCDsi5zsnpEv7KKF66OM66W8IOygle2Zle2eiCDqsJDsp4DtlZjsl6wgTmFpdGVSZXBvcnRlcuyXkCDslYzrpr3ri4jri6QuXG4gKiAtIG9uVGVzdFJ1blN0YXJ0OiDthYzsiqTtirgg65+wIOyLnOyekSDsi5wgKOyyqyDsi6Ttlokg67CPIHdhdGNoIOyerOyLpO2WiSDtj6ztlagpXG4gKiAtIG9uVGVzdFJ1bkVuZDog6rCBIOufsCDsooXro4wg7IucXG4gKi9cbmV4cG9ydCBjb25zdCBOYWl0ZVZpdGVzdFJlcG9ydGVyID0ge1xuICBhc3luYyBvblRlc3RSdW5TdGFydCgpIHtcbiAgICBhd2FpdCBOYWl0ZVJlcG9ydGVyLnN0YXJ0VGVzdFJ1bigpO1xuICB9LFxuXG4gIGFzeW5jIG9uVGVzdFJ1bkVuZCgpIHtcbiAgICBhd2FpdCBOYWl0ZVJlcG9ydGVyLmVuZFRlc3RSdW4oKTtcbiAgfSxcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFTQSxNQUFhLHNCQUFzQjtDQUNqQyxNQUFNLGlCQUFpQjtBQUNyQixRQUFNLGNBQWMsY0FBYzs7Q0FHcEMsTUFBTSxlQUFlO0FBQ25CLFFBQU0sY0FBYyxZQUFZOztDQUVuQyJ9
20
+
21
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmFpdGUtdml0ZXN0LXJlcG9ydGVyLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZXN0aW5nL25haXRlLXZpdGVzdC1yZXBvcnRlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOYWl0ZVJlcG9ydGVyIH0gZnJvbSBcIi4uL25haXRlL25haXRlLXJlcG9ydGVyXCI7XG5cbi8qKlxuICogTmFpdGUgVml0ZXN0IFJlcG9ydGVyXG4gKlxuICog7YWM7Iqk7Yq4IOufsCDsi5zsnpEv7KKF66OM66W8IOygle2Zle2eiCDqsJDsp4DtlZjsl6wgTmFpdGVSZXBvcnRlcuyXkCDslYzrpr3ri4jri6QuXG4gKiAtIG9uVGVzdFJ1blN0YXJ0OiDthYzsiqTtirgg65+wIOyLnOyekSDsi5wgKOyyqyDsi6Ttlokg67CPIHdhdGNoIOyerOyLpO2WiSDtj6ztlagpXG4gKiAtIG9uVGVzdFJ1bkVuZDog6rCBIOufsCDsooXro4wg7IucXG4gKi9cbmV4cG9ydCBjb25zdCBOYWl0ZVZpdGVzdFJlcG9ydGVyID0ge1xuICBhc3luYyBvblRlc3RSdW5TdGFydCgpIHtcbiAgICBhd2FpdCBOYWl0ZVJlcG9ydGVyLnN0YXJ0VGVzdFJ1bigpO1xuICB9LFxuXG4gIGFzeW5jIG9uVGVzdFJ1bkVuZCgpIHtcbiAgICBhd2FpdCBOYWl0ZVJlcG9ydGVyLmVuZFRlc3RSdW4oKTtcbiAgfSxcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQVNBLE1BQWEsc0JBQXNCO0NBQ2pDLE1BQU0saUJBQWlCO0VBQ3JCLE1BQU0sY0FBYyxhQUFhO0NBQ25DO0NBRUEsTUFBTSxlQUFlO0VBQ25CLE1BQU0sY0FBYyxXQUFXO0NBQ2pDO0FBQ0YifQ==
@@ -1,5 +1,4 @@
1
1
  import { createKnexInstance, init_knex } from "../database/knex.js";
2
-
3
2
  //#region src/testing/parallel-db-manager.ts
4
3
  init_knex();
5
4
  /**
@@ -9,6 +8,9 @@ init_knex();
9
8
  * 템플릿 DB에서 worker 수만큼 테스트 DB를 복제/삭제합니다.
10
9
  */
11
10
  var ParallelDBManager = class {
11
+ maxWorkers;
12
+ dbConfig;
13
+ templateDb;
12
14
  constructor(maxWorkers, dbConfig, templateDb) {
13
15
  this.maxWorkers = maxWorkers;
14
16
  this.dbConfig = dbConfig;
@@ -67,7 +69,7 @@ var ParallelDBManager = class {
67
69
  return process.env.SONAMU_WORKER_DB === "true";
68
70
  }
69
71
  };
70
-
71
72
  //#endregion
72
73
  export { ParallelDBManager };
73
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyYWxsZWwtZGItbWFuYWdlci5qcyIsIm5hbWVzIjpbIm1heFdvcmtlcnM6IG51bWJlciIsImRiQ29uZmlnOiBLbmV4LkNvbmZpZyIsInRlbXBsYXRlRGI6IHN0cmluZyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZXN0aW5nL3BhcmFsbGVsLWRiLW1hbmFnZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdHlwZSBLbmV4IH0gZnJvbSBcImtuZXhcIjtcblxuaW1wb3J0IHsgY3JlYXRlS25leEluc3RhbmNlIH0gZnJvbSBcIi4uL2RhdGFiYXNlL2tuZXhcIjtcblxuLyoqXG4gKiDrs5HroKwg7YWM7Iqk7Yq466W8IOychO2VnCBXb3JrZXLrs4QgREIg6rSA66asIO2BtOuemOyKpOyeheuLiOuLpC5cbiAqXG4gKiBWaXRlc3TsnZggZ2xvYmFsU2V0dXAvZ2xvYmFsVGVhcmRvd27sl5DshJwg7IKs7Jqp7ZWY7JesXG4gKiDthZztlIzrpr8gRELsl5DshJwgd29ya2VyIOyImOunjO2BvCDthYzsiqTtirggRELrpbwg67O17KCcL+yCreygnO2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGNsYXNzIFBhcmFsbGVsREJNYW5hZ2VyIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBtYXhXb3JrZXJzOiBudW1iZXIsXG4gICAgcHJpdmF0ZSByZWFkb25seSBkYkNvbmZpZzogS25leC5Db25maWcsXG4gICAgcHJpdmF0ZSByZWFkb25seSB0ZW1wbGF0ZURiOiBzdHJpbmcsXG4gICkge31cbiAgLyoqXG4gICAqIFdvcmtlcuuzhCDthYzsiqTtirggRELrpbwg7YWc7ZSM66a/7JeQ7IScIOuzteygnO2VmOyXrCDsg53shLHtlanri4jri6QuXG4gICAqIGdsb2JhbFNldHVw7JeQ7IScIO2YuOy2nOuQqeuLiOuLpC5cbiAgICovXG4gIGFzeW5jIGNyZWF0ZVdvcmtlckRhdGFiYXNlcygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBwb3N0Z3JlcyBEQuyXkCDsl7DqsrDtlZjsl6wgQ1JFQVRFIERBVEFCQVNFIOyLpO2WiVxuICAgIGNvbnN0IGFkbWluRGIgPSBjcmVhdGVLbmV4SW5zdGFuY2Uoe1xuICAgICAgLi4udGhpcy5kYkNvbmZpZyxcbiAgICB9KTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCB3b3JrZXJEYk5hbWVzID0gQXJyYXkuZnJvbShcbiAgICAgICAgeyBsZW5ndGg6IHRoaXMubWF4V29ya2VycyB9LFxuICAgICAgICAoXywgaSkgPT4gYCR7dGhpcy50ZW1wbGF0ZURifV8ke2kgKyAxfWAsXG4gICAgICApO1xuXG4gICAgICAvLyAxLiDquLDsobQg7Jew6rKwIOyiheujjCAo67OR66CsKSB3b3JrZXIgREIgKyB0ZW1wbGF0ZSBEQiAoUEcgMTjsl5DshJwgRklMRV9DT1BZIOyLnCB0ZW1wbGF0ZeyXkCBleGNsdXNpdmUgYWNjZXNzIO2VhOyalClcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICBbLi4ud29ya2VyRGJOYW1lcywgdGhpcy50ZW1wbGF0ZURiXS5tYXAoKGRiTmFtZSkgPT5cbiAgICAgICAgICBhZG1pbkRiLnJhdyhcbiAgICAgICAgICAgIGBcbiAgICAgICAgICAgIFNFTEVDVCBwZ190ZXJtaW5hdGVfYmFja2VuZChwZ19zdGF0X2FjdGl2aXR5LnBpZClcbiAgICAgICAgICAgIEZST00gcGdfc3RhdF9hY3Rpdml0eVxuICAgICAgICAgICAgV0hFUkUgcGdfc3RhdF9hY3Rpdml0eS5kYXRuYW1lID0gP1xuICAgICAgICAgICAgQU5EIHBpZCA8PiBwZ19iYWNrZW5kX3BpZCgpXG4gICAgICAgICAgYCxcbiAgICAgICAgICAgIFtkYk5hbWVdLFxuICAgICAgICAgICksXG4gICAgICAgICksXG4gICAgICApO1xuXG4gICAgICAvLyAyLiDquLDsobQgREIg7IKt7KCcICjrs5HroKwpXG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgd29ya2VyRGJOYW1lcy5tYXAoKGRiTmFtZSkgPT4gYWRtaW5EYi5yYXcoYERST1AgREFUQUJBU0UgSUYgRVhJU1RTIFwiJHtkYk5hbWV9XCJgKSksXG4gICAgICApO1xuXG4gICAgICAvLyAzLiDthZztlIzrpr/sl5DshJwg67O17KCcICjrs5HroKwpXG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgd29ya2VyRGJOYW1lcy5tYXAoKGRiTmFtZSkgPT5cbiAgICAgICAgICBhZG1pbkRiLnJhdyhcbiAgICAgICAgICAgIGBDUkVBVEUgREFUQUJBU0UgXCIke2RiTmFtZX1cIiBURU1QTEFURSBcIiR7dGhpcy50ZW1wbGF0ZURifVwiIFNUUkFURUdZIEZJTEVfQ09QWWAsXG4gICAgICAgICAgKSxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGF3YWl0IGFkbWluRGIuZGVzdHJveSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiDsg53shLHtlZwgV29ya2VyIERC65Ok7J2EIOyCreygnO2VqeuLiOuLpC5cbiAgICogZ2xvYmFsVGVhcmRvd27sl5DshJwg7Zi47Lac65Cp64uI64ukLlxuICAgKi9cbiAgYXN5bmMgZHJvcFdvcmtlckRhdGFiYXNlcygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBhZG1pbkRiID0gY3JlYXRlS25leEluc3RhbmNlKHtcbiAgICAgIC4uLnRoaXMuZGJDb25maWcsXG4gICAgfSk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3Qgd29ya2VyRGJOYW1lcyA9IEFycmF5LmZyb20oXG4gICAgICAgIHsgbGVuZ3RoOiB0aGlzLm1heFdvcmtlcnMgfSxcbiAgICAgICAgKF8sIGkpID0+IGAke3RoaXMudGVtcGxhdGVEYn1fJHtpICsgMX1gLFxuICAgICAgKTtcblxuICAgICAgLy8g7Jew6rKwIOyiheujjCAo67OR66CsKVxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgIHdvcmtlckRiTmFtZXMubWFwKChkYk5hbWUpID0+XG4gICAgICAgICAgYWRtaW5EYi5yYXcoXG4gICAgICAgICAgICBgXG4gICAgICAgICAgICBTRUxFQ1QgcGdfdGVybWluYXRlX2JhY2tlbmQocGdfc3RhdF9hY3Rpdml0eS5waWQpXG4gICAgICAgICAgICBGUk9NIHBnX3N0YXRfYWN0aXZpdHlcbiAgICAgICAgICAgIFdIRVJFIHBnX3N0YXRfYWN0aXZpdHkuZGF0bmFtZSA9ID9cbiAgICAgICAgICAgIEFORCBwaWQgPD4gcGdfYmFja2VuZF9waWQoKVxuICAgICAgICAgIGAsXG4gICAgICAgICAgICBbZGJOYW1lXSxcbiAgICAgICAgICApLFxuICAgICAgICApLFxuICAgICAgKTtcblxuICAgICAgLy8gREIg7IKt7KCcICjrs5HroKwpXG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgd29ya2VyRGJOYW1lcy5tYXAoKGRiTmFtZSkgPT4gYWRtaW5EYi5yYXcoYERST1AgREFUQUJBU0UgSUYgRVhJU1RTIFwiJHtkYk5hbWV9XCJgKSksXG4gICAgICApO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBhd2FpdCBhZG1pbkRiLmRlc3Ryb3koKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICog7ZiE7J6sIFdvcmtlcuydmCBJROulvCDrsJjtmZjtlanri4jri6QuXG4gICAqIFZpdGVzdOuKlCBWSVRFU1RfUE9PTF9JRCDtmZjqsr3rs4DsiJjroZwgd29ya2Vy66W8IOyLneuzhO2VqeuLiOuLpC5cbiAgICovXG4gIGdldFdvcmtlcklkKCk6IG51bWJlciB7XG4gICAgLy8gVklURVNUX1BPT0xfSUTripQgMeu2gO2EsCDsi5zsnpFcbiAgICByZXR1cm4gcGFyc2VJbnQocHJvY2Vzcy5lbnYuVklURVNUX1BPT0xfSUQgPz8gXCIxXCIsIDEwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDrs5HroKwg7YWM7Iqk7Yq4IOuqqOuTnOyduOyngCDtmZXsnbjtlanri4jri6QuXG4gICAqL1xuICBpc1BhcmFsbGVsTW9kZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gcHJvY2Vzcy5lbnYuU09OQU1VX1dPUktFUl9EQiA9PT0gXCJ0cnVlXCI7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7O1dBRXNEOzs7Ozs7O0FBUXRELElBQWEsb0JBQWIsTUFBK0I7Q0FDN0IsWUFDRSxBQUFpQkEsWUFDakIsQUFBaUJDLFVBQ2pCLEFBQWlCQyxZQUNqQjtFQUhpQjtFQUNBO0VBQ0E7Ozs7OztDQU1uQixNQUFNLHdCQUF1QztFQUUzQyxNQUFNLFVBQVUsbUJBQW1CLEVBQ2pDLEdBQUcsS0FBSyxVQUNULENBQUM7QUFFRixNQUFJO0dBQ0YsTUFBTSxnQkFBZ0IsTUFBTSxLQUMxQixFQUFFLFFBQVEsS0FBSyxZQUFZLEdBQzFCLEdBQUcsTUFBTSxHQUFHLEtBQUssV0FBVyxHQUFHLElBQUksSUFDckM7QUFHRCxTQUFNLFFBQVEsSUFDWixDQUFDLEdBQUcsZUFBZSxLQUFLLFdBQVcsQ0FBQyxLQUFLLFdBQ3ZDLFFBQVEsSUFDTjs7Ozs7YUFNQSxDQUFDLE9BQU8sQ0FDVCxDQUNGLENBQ0Y7QUFHRCxTQUFNLFFBQVEsSUFDWixjQUFjLEtBQUssV0FBVyxRQUFRLElBQUksNEJBQTRCLE9BQU8sR0FBRyxDQUFDLENBQ2xGO0FBR0QsU0FBTSxRQUFRLElBQ1osY0FBYyxLQUFLLFdBQ2pCLFFBQVEsSUFDTixvQkFBb0IsT0FBTyxjQUFjLEtBQUssV0FBVyxzQkFDMUQsQ0FDRixDQUNGO1lBQ087QUFDUixTQUFNLFFBQVEsU0FBUzs7Ozs7OztDQVEzQixNQUFNLHNCQUFxQztFQUN6QyxNQUFNLFVBQVUsbUJBQW1CLEVBQ2pDLEdBQUcsS0FBSyxVQUNULENBQUM7QUFFRixNQUFJO0dBQ0YsTUFBTSxnQkFBZ0IsTUFBTSxLQUMxQixFQUFFLFFBQVEsS0FBSyxZQUFZLEdBQzFCLEdBQUcsTUFBTSxHQUFHLEtBQUssV0FBVyxHQUFHLElBQUksSUFDckM7QUFHRCxTQUFNLFFBQVEsSUFDWixjQUFjLEtBQUssV0FDakIsUUFBUSxJQUNOOzs7OzthQU1BLENBQUMsT0FBTyxDQUNULENBQ0YsQ0FDRjtBQUdELFNBQU0sUUFBUSxJQUNaLGNBQWMsS0FBSyxXQUFXLFFBQVEsSUFBSSw0QkFBNEIsT0FBTyxHQUFHLENBQUMsQ0FDbEY7WUFDTztBQUNSLFNBQU0sUUFBUSxTQUFTOzs7Ozs7O0NBUTNCLGNBQXNCO0FBRXBCLFNBQU8sU0FBUyxRQUFRLElBQUksa0JBQWtCLEtBQUssR0FBRzs7Ozs7Q0FNeEQsaUJBQTBCO0FBQ3hCLFNBQU8sUUFBUSxJQUFJLHFCQUFxQiJ9
74
+
75
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyYWxsZWwtZGItbWFuYWdlci5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVzdGluZy9wYXJhbGxlbC1kYi1tYW5hZ2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHR5cGUgS25leCB9IGZyb20gXCJrbmV4XCI7XG5cbmltcG9ydCB7IGNyZWF0ZUtuZXhJbnN0YW5jZSB9IGZyb20gXCIuLi9kYXRhYmFzZS9rbmV4XCI7XG5cbi8qKlxuICog67OR66CsIO2FjOyKpO2KuOulvCDsnITtlZwgV29ya2Vy67OEIERCIOq0gOumrCDtgbTrnpjsiqTsnoXri4jri6QuXG4gKlxuICogVml0ZXN07J2YIGdsb2JhbFNldHVwL2dsb2JhbFRlYXJkb3du7JeQ7IScIOyCrOyaqe2VmOyXrFxuICog7YWc7ZSM66a/IERC7JeQ7IScIHdvcmtlciDsiJjrp4ztgbwg7YWM7Iqk7Yq4IERC66W8IOuzteygnC/sgq3soJztlanri4jri6QuXG4gKi9cbmV4cG9ydCBjbGFzcyBQYXJhbGxlbERCTWFuYWdlciB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgbWF4V29ya2VyczogbnVtYmVyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZGJDb25maWc6IEtuZXguQ29uZmlnLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdGVtcGxhdGVEYjogc3RyaW5nLFxuICApIHt9XG4gIC8qKlxuICAgKiBXb3JrZXLrs4Qg7YWM7Iqk7Yq4IERC66W8IO2FnO2UjOumv+yXkOyEnCDrs7XsoJztlZjsl6wg7IOd7ISx7ZWp64uI64ukLlxuICAgKiBnbG9iYWxTZXR1cOyXkOyEnCDtmLjstpzrkKnri4jri6QuXG4gICAqL1xuICBhc3luYyBjcmVhdGVXb3JrZXJEYXRhYmFzZXMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gcG9zdGdyZXMgRELsl5Ag7Jew6rKw7ZWY7JesIENSRUFURSBEQVRBQkFTRSDsi6TtlolcbiAgICBjb25zdCBhZG1pbkRiID0gY3JlYXRlS25leEluc3RhbmNlKHtcbiAgICAgIC4uLnRoaXMuZGJDb25maWcsXG4gICAgfSk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3Qgd29ya2VyRGJOYW1lcyA9IEFycmF5LmZyb20oXG4gICAgICAgIHsgbGVuZ3RoOiB0aGlzLm1heFdvcmtlcnMgfSxcbiAgICAgICAgKF8sIGkpID0+IGAke3RoaXMudGVtcGxhdGVEYn1fJHtpICsgMX1gLFxuICAgICAgKTtcblxuICAgICAgLy8gMS4g6riw7KG0IOyXsOqysCDsooXro4wgKOuzkeugrCkgd29ya2VyIERCICsgdGVtcGxhdGUgREIgKFBHIDE47JeQ7IScIEZJTEVfQ09QWSDsi5wgdGVtcGxhdGXsl5AgZXhjbHVzaXZlIGFjY2VzcyDtlYTsmpQpXG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgWy4uLndvcmtlckRiTmFtZXMsIHRoaXMudGVtcGxhdGVEYl0ubWFwKChkYk5hbWUpID0+XG4gICAgICAgICAgYWRtaW5EYi5yYXcoXG4gICAgICAgICAgICBgXG4gICAgICAgICAgICBTRUxFQ1QgcGdfdGVybWluYXRlX2JhY2tlbmQocGdfc3RhdF9hY3Rpdml0eS5waWQpXG4gICAgICAgICAgICBGUk9NIHBnX3N0YXRfYWN0aXZpdHlcbiAgICAgICAgICAgIFdIRVJFIHBnX3N0YXRfYWN0aXZpdHkuZGF0bmFtZSA9ID9cbiAgICAgICAgICAgIEFORCBwaWQgPD4gcGdfYmFja2VuZF9waWQoKVxuICAgICAgICAgIGAsXG4gICAgICAgICAgICBbZGJOYW1lXSxcbiAgICAgICAgICApLFxuICAgICAgICApLFxuICAgICAgKTtcblxuICAgICAgLy8gMi4g6riw7KG0IERCIOyCreygnCAo67OR66CsKVxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgIHdvcmtlckRiTmFtZXMubWFwKChkYk5hbWUpID0+IGFkbWluRGIucmF3KGBEUk9QIERBVEFCQVNFIElGIEVYSVNUUyBcIiR7ZGJOYW1lfVwiYCkpLFxuICAgICAgKTtcblxuICAgICAgLy8gMy4g7YWc7ZSM66a/7JeQ7IScIOuzteygnCAo67OR66CsKVxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgIHdvcmtlckRiTmFtZXMubWFwKChkYk5hbWUpID0+XG4gICAgICAgICAgYWRtaW5EYi5yYXcoXG4gICAgICAgICAgICBgQ1JFQVRFIERBVEFCQVNFIFwiJHtkYk5hbWV9XCIgVEVNUExBVEUgXCIke3RoaXMudGVtcGxhdGVEYn1cIiBTVFJBVEVHWSBGSUxFX0NPUFlgLFxuICAgICAgICAgICksXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBhd2FpdCBhZG1pbkRiLmRlc3Ryb3koKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICog7IOd7ISx7ZWcIFdvcmtlciBEQuuTpOydhCDsgq3soJztlanri4jri6QuXG4gICAqIGdsb2JhbFRlYXJkb3du7JeQ7IScIO2YuOy2nOuQqeuLiOuLpC5cbiAgICovXG4gIGFzeW5jIGRyb3BXb3JrZXJEYXRhYmFzZXMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgYWRtaW5EYiA9IGNyZWF0ZUtuZXhJbnN0YW5jZSh7XG4gICAgICAuLi50aGlzLmRiQ29uZmlnLFxuICAgIH0pO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHdvcmtlckRiTmFtZXMgPSBBcnJheS5mcm9tKFxuICAgICAgICB7IGxlbmd0aDogdGhpcy5tYXhXb3JrZXJzIH0sXG4gICAgICAgIChfLCBpKSA9PiBgJHt0aGlzLnRlbXBsYXRlRGJ9XyR7aSArIDF9YCxcbiAgICAgICk7XG5cbiAgICAgIC8vIOyXsOqysCDsooXro4wgKOuzkeugrClcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICB3b3JrZXJEYk5hbWVzLm1hcCgoZGJOYW1lKSA9PlxuICAgICAgICAgIGFkbWluRGIucmF3KFxuICAgICAgICAgICAgYFxuICAgICAgICAgICAgU0VMRUNUIHBnX3Rlcm1pbmF0ZV9iYWNrZW5kKHBnX3N0YXRfYWN0aXZpdHkucGlkKVxuICAgICAgICAgICAgRlJPTSBwZ19zdGF0X2FjdGl2aXR5XG4gICAgICAgICAgICBXSEVSRSBwZ19zdGF0X2FjdGl2aXR5LmRhdG5hbWUgPSA/XG4gICAgICAgICAgICBBTkQgcGlkIDw+IHBnX2JhY2tlbmRfcGlkKClcbiAgICAgICAgICBgLFxuICAgICAgICAgICAgW2RiTmFtZV0sXG4gICAgICAgICAgKSxcbiAgICAgICAgKSxcbiAgICAgICk7XG5cbiAgICAgIC8vIERCIOyCreygnCAo67OR66CsKVxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgIHdvcmtlckRiTmFtZXMubWFwKChkYk5hbWUpID0+IGFkbWluRGIucmF3KGBEUk9QIERBVEFCQVNFIElGIEVYSVNUUyBcIiR7ZGJOYW1lfVwiYCkpLFxuICAgICAgKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgYXdhaXQgYWRtaW5EYi5kZXN0cm95KCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIO2YhOyerCBXb3JrZXLsnZggSUTrpbwg67CY7ZmY7ZWp64uI64ukLlxuICAgKiBWaXRlc3TripQgVklURVNUX1BPT0xfSUQg7ZmY6rK967OA7IiY66GcIHdvcmtlcuulvCDsi53rs4Ttlanri4jri6QuXG4gICAqL1xuICBnZXRXb3JrZXJJZCgpOiBudW1iZXIge1xuICAgIC8vIFZJVEVTVF9QT09MX0lE64qUIDHrtoDthLAg7Iuc7J6RXG4gICAgcmV0dXJuIHBhcnNlSW50KHByb2Nlc3MuZW52LlZJVEVTVF9QT09MX0lEID8/IFwiMVwiLCAxMCk7XG4gIH1cblxuICAvKipcbiAgICog67OR66CsIO2FjOyKpO2KuCDrqqjrk5zsnbjsp4Ag7ZmV7J247ZWp64uI64ukLlxuICAgKi9cbiAgaXNQYXJhbGxlbE1vZGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHByb2Nlc3MuZW52LlNPTkFNVV9XT1JLRVJfREIgPT09IFwidHJ1ZVwiO1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7O1VBRXFEOzs7Ozs7O0FBUXJELElBQWEsb0JBQWIsTUFBK0I7Q0FFVjtDQUNBO0NBQ0E7Q0FIbkIsWUFDRSxZQUNBLFVBQ0EsWUFDQTtFQUhpQixLQUFBLGFBQUE7RUFDQSxLQUFBLFdBQUE7RUFDQSxLQUFBLGFBQUE7Q0FDaEI7Ozs7O0NBS0gsTUFBTSx3QkFBdUM7RUFFM0MsTUFBTSxVQUFVLG1CQUFtQixFQUNqQyxHQUFHLEtBQUssU0FDVixDQUFDO0VBRUQsSUFBSTtHQUNGLE1BQU0sZ0JBQWdCLE1BQU0sS0FDMUIsRUFBRSxRQUFRLEtBQUssV0FBVyxJQUN6QixHQUFHLE1BQU0sR0FBRyxLQUFLLFdBQVcsR0FBRyxJQUFJLEdBQ3RDO0dBR0EsTUFBTSxRQUFRLElBQ1osQ0FBQyxHQUFHLGVBQWUsS0FBSyxVQUFVLENBQUMsQ0FBQyxLQUFLLFdBQ3ZDLFFBQVEsSUFDTjs7Ozs7YUFNQSxDQUFDLE1BQU0sQ0FDVCxDQUNGLENBQ0Y7R0FHQSxNQUFNLFFBQVEsSUFDWixjQUFjLEtBQUssV0FBVyxRQUFRLElBQUksNEJBQTRCLE9BQU8sRUFBRSxDQUFDLENBQ2xGO0dBR0EsTUFBTSxRQUFRLElBQ1osY0FBYyxLQUFLLFdBQ2pCLFFBQVEsSUFDTixvQkFBb0IsT0FBTyxjQUFjLEtBQUssV0FBVyxxQkFDM0QsQ0FDRixDQUNGO0VBQ0YsVUFBVTtHQUNSLE1BQU0sUUFBUSxRQUFRO0VBQ3hCO0NBQ0Y7Ozs7O0NBTUEsTUFBTSxzQkFBcUM7RUFDekMsTUFBTSxVQUFVLG1CQUFtQixFQUNqQyxHQUFHLEtBQUssU0FDVixDQUFDO0VBRUQsSUFBSTtHQUNGLE1BQU0sZ0JBQWdCLE1BQU0sS0FDMUIsRUFBRSxRQUFRLEtBQUssV0FBVyxJQUN6QixHQUFHLE1BQU0sR0FBRyxLQUFLLFdBQVcsR0FBRyxJQUFJLEdBQ3RDO0dBR0EsTUFBTSxRQUFRLElBQ1osY0FBYyxLQUFLLFdBQ2pCLFFBQVEsSUFDTjs7Ozs7YUFNQSxDQUFDLE1BQU0sQ0FDVCxDQUNGLENBQ0Y7R0FHQSxNQUFNLFFBQVEsSUFDWixjQUFjLEtBQUssV0FBVyxRQUFRLElBQUksNEJBQTRCLE9BQU8sRUFBRSxDQUFDLENBQ2xGO0VBQ0YsVUFBVTtHQUNSLE1BQU0sUUFBUSxRQUFRO0VBQ3hCO0NBQ0Y7Ozs7O0NBTUEsY0FBc0I7RUFFcEIsT0FBTyxTQUFTLFFBQVEsSUFBSSxrQkFBa0IsS0FBSyxFQUFFO0NBQ3ZEOzs7O0NBS0EsaUJBQTBCO0VBQ3hCLE9BQU8sUUFBUSxJQUFJLHFCQUFxQjtDQUMxQztBQUNGIn0=
@@ -1 +1 @@
1
- {"version":3,"file":"vitest-helpers.d.ts","sourceRoot":"","sources":["../../src/testing/vitest-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,eAAe,CAAC;AAIpD,KAAK,YAAY,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;AAE3C;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,mBAAmB,CAAC,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,CAoBvF"}
1
+ {"version":3,"file":"vitest-helpers.d.ts","sourceRoot":"","sources":["../../src/testing/vitest-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,eAAe,CAAC;AAIpD,KAAK,YAAY,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;AAc3C;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,mBAAmB,CAAC,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,CAsBvF"}
@@ -1,7 +1,10 @@
1
1
  import { init_config, loadConfig } from "../api/config.js";
2
-
3
2
  //#region src/testing/vitest-helpers.ts
4
3
  init_config();
4
+ function restoreProcessEnv(snapshot) {
5
+ for (const key of Object.keys(process.env)) if (!(key in snapshot)) delete process.env[key];
6
+ for (const [key, value] of Object.entries(snapshot)) process.env[key] = value;
7
+ }
5
8
  /**
6
9
  * sonamu.config.ts의 test 설정을 기반으로 vitest 테스트 설정을 반환합니다.
7
10
  *
@@ -20,21 +23,21 @@ init_config();
20
23
  */
21
24
  async function getSonamuTestConfig(options) {
22
25
  const { findApiRootPath } = await import("../utils/utils.js");
26
+ const envBeforeConfigLoad = { ...process.env };
23
27
  const config = await loadConfig(findApiRootPath());
28
+ restoreProcessEnv(envBeforeConfigLoad);
24
29
  const isParallel = config.test?.parallel ?? false;
25
30
  const maxWorkers = config.test?.maxWorkers ?? 4;
26
- if (isParallel) {
27
- return {
28
- pool: "forks",
29
- maxWorkers,
30
- isolate: false,
31
- env: { SONAMU_WORKER_DB: "true" },
32
- ...options
33
- };
34
- }
31
+ if (isParallel) return {
32
+ pool: "forks",
33
+ maxWorkers,
34
+ isolate: false,
35
+ env: { SONAMU_WORKER_DB: "true" },
36
+ ...options
37
+ };
35
38
  return options;
36
39
  }
37
-
38
40
  //#endregion
39
41
  export { getSonamuTestConfig };
40
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidml0ZXN0LWhlbHBlcnMuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Rlc3Rpbmcvdml0ZXN0LWhlbHBlcnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdHlwZSBWaXRlVXNlckNvbmZpZyB9IGZyb20gXCJ2aXRlc3QvY29uZmlnXCI7XG5cbmltcG9ydCB7IGxvYWRDb25maWcgfSBmcm9tIFwiLi4vYXBpL2NvbmZpZ1wiO1xuXG50eXBlIFZpdGVzdENvbmZpZyA9IFZpdGVVc2VyQ29uZmlnW1widGVzdFwiXTtcblxuLyoqXG4gKiBzb25hbXUuY29uZmlnLnRz7J2YIHRlc3Qg7ISk7KCV7J2EIOq4sOuwmOycvOuhnCB2aXRlc3Qg7YWM7Iqk7Yq4IOyEpOygleydhCDrsJjtmZjtlanri4jri6QuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC8vIHZpdGVzdC5jb25maWcudHNcbiAqIGltcG9ydCB7IGdldFNvbmFtdVRlc3RDb25maWcgfSBmcm9tIFwic29uYW11L3Rlc3RcIjtcbiAqIGltcG9ydCB7IGRlZmluZUNvbmZpZyB9IGZyb20gXCJ2aXRlc3QvY29uZmlnXCI7XG4gKlxuICogZXhwb3J0IGRlZmF1bHQgZGVmaW5lQ29uZmlnKGFzeW5jICgpID0+ICh7XG4gKiAgIHRlc3Q6IGF3YWl0IGdldFNvbmFtdVRlc3RDb25maWcoe1xuICogICAgIHNldHVwRmlsZXM6IFtcIi4vc3JjL3Rlc3Rpbmcvc2V0dXAtbW9ja3MudHNcIl0sXG4gKiAgIH0pLFxuICogfSkpO1xuICogYGBgXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRTb25hbXVUZXN0Q29uZmlnKG9wdGlvbnM/OiBWaXRlc3RDb25maWcpOiBQcm9taXNlPFZpdGVzdENvbmZpZz4ge1xuICBjb25zdCB7IGZpbmRBcGlSb290UGF0aCB9ID0gYXdhaXQgaW1wb3J0KFwiLi4vdXRpbHMvdXRpbHNcIik7XG4gIGNvbnN0IGNvbmZpZyA9IGF3YWl0IGxvYWRDb25maWcoZmluZEFwaVJvb3RQYXRoKCkpO1xuXG4gIGNvbnN0IGlzUGFyYWxsZWwgPSBjb25maWcudGVzdD8ucGFyYWxsZWwgPz8gZmFsc2U7XG4gIGNvbnN0IG1heFdvcmtlcnMgPSBjb25maWcudGVzdD8ubWF4V29ya2VycyA/PyA0O1xuXG4gIGlmIChpc1BhcmFsbGVsKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBvb2w6IFwiZm9ya3NcIixcbiAgICAgIG1heFdvcmtlcnMsXG4gICAgICBpc29sYXRlOiBmYWxzZSxcbiAgICAgIGVudjoge1xuICAgICAgICBTT05BTVVfV09SS0VSX0RCOiBcInRydWVcIixcbiAgICAgIH0sXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH07XG4gIH1cblxuICByZXR1cm4gb3B0aW9ucztcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7O2FBRTJDOzs7Ozs7Ozs7Ozs7Ozs7OztBQW9CM0MsZUFBc0Isb0JBQW9CLFNBQStDO0NBQ3ZGLE1BQU0sRUFBRSxvQkFBb0IsTUFBTSxPQUFPO0NBQ3pDLE1BQU0sU0FBUyxNQUFNLFdBQVcsaUJBQWlCLENBQUM7Q0FFbEQsTUFBTSxhQUFhLE9BQU8sTUFBTSxZQUFZO0NBQzVDLE1BQU0sYUFBYSxPQUFPLE1BQU0sY0FBYztBQUU5QyxLQUFJLFlBQVk7QUFDZCxTQUFPO0dBQ0wsTUFBTTtHQUNOO0dBQ0EsU0FBUztHQUNULEtBQUssRUFDSCxrQkFBa0IsUUFDbkI7R0FDRCxHQUFHO0dBQ0o7O0FBR0gsUUFBTyJ9
42
+
43
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidml0ZXN0LWhlbHBlcnMuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Rlc3Rpbmcvdml0ZXN0LWhlbHBlcnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdHlwZSBWaXRlVXNlckNvbmZpZyB9IGZyb20gXCJ2aXRlc3QvY29uZmlnXCI7XG5cbmltcG9ydCB7IGxvYWRDb25maWcgfSBmcm9tIFwiLi4vYXBpL2NvbmZpZ1wiO1xuXG50eXBlIFZpdGVzdENvbmZpZyA9IFZpdGVVc2VyQ29uZmlnW1widGVzdFwiXTtcblxuZnVuY3Rpb24gcmVzdG9yZVByb2Nlc3NFbnYoc25hcHNob3Q6IE5vZGVKUy5Qcm9jZXNzRW52KTogdm9pZCB7XG4gIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHByb2Nlc3MuZW52KSkge1xuICAgIGlmICghKGtleSBpbiBzbmFwc2hvdCkpIHtcbiAgICAgIGRlbGV0ZSBwcm9jZXNzLmVudltrZXldO1xuICAgIH1cbiAgfVxuXG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHNuYXBzaG90KSkge1xuICAgIHByb2Nlc3MuZW52W2tleV0gPSB2YWx1ZTtcbiAgfVxufVxuXG4vKipcbiAqIHNvbmFtdS5jb25maWcudHPsnZggdGVzdCDshKTsoJXsnYQg6riw67CY7Jy866GcIHZpdGVzdCDthYzsiqTtirgg7ISk7KCV7J2EIOuwmO2ZmO2VqeuLiOuLpC5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogLy8gdml0ZXN0LmNvbmZpZy50c1xuICogaW1wb3J0IHsgZ2V0U29uYW11VGVzdENvbmZpZyB9IGZyb20gXCJzb25hbXUvdGVzdFwiO1xuICogaW1wb3J0IHsgZGVmaW5lQ29uZmlnIH0gZnJvbSBcInZpdGVzdC9jb25maWdcIjtcbiAqXG4gKiBleHBvcnQgZGVmYXVsdCBkZWZpbmVDb25maWcoYXN5bmMgKCkgPT4gKHtcbiAqICAgdGVzdDogYXdhaXQgZ2V0U29uYW11VGVzdENvbmZpZyh7XG4gKiAgICAgc2V0dXBGaWxlczogW1wiLi9zcmMvdGVzdGluZy9zZXR1cC1tb2Nrcy50c1wiXSxcbiAqICAgfSksXG4gKiB9KSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFNvbmFtdVRlc3RDb25maWcob3B0aW9ucz86IFZpdGVzdENvbmZpZyk6IFByb21pc2U8Vml0ZXN0Q29uZmlnPiB7XG4gIGNvbnN0IHsgZmluZEFwaVJvb3RQYXRoIH0gPSBhd2FpdCBpbXBvcnQoXCIuLi91dGlscy91dGlsc1wiKTtcbiAgY29uc3QgZW52QmVmb3JlQ29uZmlnTG9hZCA9IHsgLi4ucHJvY2Vzcy5lbnYgfTtcbiAgY29uc3QgY29uZmlnID0gYXdhaXQgbG9hZENvbmZpZyhmaW5kQXBpUm9vdFBhdGgoKSk7XG4gIHJlc3RvcmVQcm9jZXNzRW52KGVudkJlZm9yZUNvbmZpZ0xvYWQpO1xuXG4gIGNvbnN0IGlzUGFyYWxsZWwgPSBjb25maWcudGVzdD8ucGFyYWxsZWwgPz8gZmFsc2U7XG4gIGNvbnN0IG1heFdvcmtlcnMgPSBjb25maWcudGVzdD8ubWF4V29ya2VycyA/PyA0O1xuXG4gIGlmIChpc1BhcmFsbGVsKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBvb2w6IFwiZm9ya3NcIixcbiAgICAgIG1heFdvcmtlcnMsXG4gICAgICBpc29sYXRlOiBmYWxzZSxcbiAgICAgIGVudjoge1xuICAgICAgICBTT05BTVVfV09SS0VSX0RCOiBcInRydWVcIixcbiAgICAgIH0sXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH07XG4gIH1cblxuICByZXR1cm4gb3B0aW9ucztcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7WUFFMEM7QUFJMUMsU0FBUyxrQkFBa0IsVUFBbUM7Q0FDNUQsS0FBSyxNQUFNLE9BQU8sT0FBTyxLQUFLLFFBQVEsR0FBRyxHQUN2QyxJQUFJLEVBQUUsT0FBTyxXQUNYLE9BQU8sUUFBUSxJQUFJO0NBSXZCLEtBQUssTUFBTSxDQUFDLEtBQUssVUFBVSxPQUFPLFFBQVEsUUFBUSxHQUNoRCxRQUFRLElBQUksT0FBTztBQUV2Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFrQkEsZUFBc0Isb0JBQW9CLFNBQStDO0NBQ3ZGLE1BQU0sRUFBRSxvQkFBb0IsTUFBTSxPQUFPO0NBQ3pDLE1BQU0sc0JBQXNCLEVBQUUsR0FBRyxRQUFRLElBQUk7Q0FDN0MsTUFBTSxTQUFTLE1BQU0sV0FBVyxnQkFBZ0IsQ0FBQztDQUNqRCxrQkFBa0IsbUJBQW1CO0NBRXJDLE1BQU0sYUFBYSxPQUFPLE1BQU0sWUFBWTtDQUM1QyxNQUFNLGFBQWEsT0FBTyxNQUFNLGNBQWM7Q0FFOUMsSUFBSSxZQUNGLE9BQU87RUFDTCxNQUFNO0VBQ047RUFDQSxTQUFTO0VBQ1QsS0FBSyxFQUNILGtCQUFrQixPQUNwQjtFQUNBLEdBQUc7Q0FDTDtDQUdGLE9BQU87QUFDVCJ9
@@ -86,11 +86,11 @@ export type BigIntegerArrayProp = CommonProp & {
86
86
  * BaseSchema 생성 시 Zod의 string format validation을 적용합니다.
87
87
  */
88
88
  export declare const ZodStringFormat: z.ZodEnum<{
89
- uuid: "uuid";
90
- email: "email";
91
89
  base64: "base64";
92
90
  base64url: "base64url";
93
91
  hex: "hex";
92
+ uuid: "uuid";
93
+ email: "email";
94
94
  url: "url";
95
95
  httpUrl: "httpUrl";
96
96
  hostname: "hostname";
@@ -1004,11 +1004,11 @@ export declare const NormalPropSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
1004
1004
  type: z.ZodLiteral<"string">;
1005
1005
  length: z.ZodOptional<z.ZodNumber>;
1006
1006
  zodFormat: z.ZodOptional<z.ZodEnum<{
1007
- uuid: "uuid";
1008
- email: "email";
1009
1007
  base64: "base64";
1010
1008
  base64url: "base64url";
1011
1009
  hex: "hex";
1010
+ uuid: "uuid";
1011
+ email: "email";
1012
1012
  url: "url";
1013
1013
  httpUrl: "httpUrl";
1014
1014
  hostname: "hostname";
@@ -1073,11 +1073,11 @@ export declare const NormalPropSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
1073
1073
  type: z.ZodLiteral<"string[]">;
1074
1074
  length: z.ZodOptional<z.ZodNumber>;
1075
1075
  zodFormat: z.ZodOptional<z.ZodEnum<{
1076
- uuid: "uuid";
1077
- email: "email";
1078
1076
  base64: "base64";
1079
1077
  base64url: "base64url";
1080
1078
  hex: "hex";
1079
+ uuid: "uuid";
1080
+ email: "email";
1081
1081
  url: "url";
1082
1082
  httpUrl: "httpUrl";
1083
1083
  hostname: "hostname";
@@ -1740,11 +1740,11 @@ export declare const EntityJsonSchema: z.ZodObject<{
1740
1740
  type: z.ZodLiteral<"string">;
1741
1741
  length: z.ZodOptional<z.ZodNumber>;
1742
1742
  zodFormat: z.ZodOptional<z.ZodEnum<{
1743
- uuid: "uuid";
1744
- email: "email";
1745
1743
  base64: "base64";
1746
1744
  base64url: "base64url";
1747
1745
  hex: "hex";
1746
+ uuid: "uuid";
1747
+ email: "email";
1748
1748
  url: "url";
1749
1749
  httpUrl: "httpUrl";
1750
1750
  hostname: "hostname";
@@ -1809,11 +1809,11 @@ export declare const EntityJsonSchema: z.ZodObject<{
1809
1809
  type: z.ZodLiteral<"string[]">;
1810
1810
  length: z.ZodOptional<z.ZodNumber>;
1811
1811
  zodFormat: z.ZodOptional<z.ZodEnum<{
1812
- uuid: "uuid";
1813
- email: "email";
1814
1812
  base64: "base64";
1815
1813
  base64url: "base64url";
1816
1814
  hex: "hex";
1815
+ uuid: "uuid";
1816
+ email: "email";
1817
1817
  url: "url";
1818
1818
  httpUrl: "httpUrl";
1819
1819
  hostname: "hostname";
@@ -2790,11 +2790,11 @@ export declare const TemplateOptions: z.ZodObject<{
2790
2790
  type: z.ZodLiteral<"string">;
2791
2791
  length: z.ZodOptional<z.ZodNumber>;
2792
2792
  zodFormat: z.ZodOptional<z.ZodEnum<{
2793
- uuid: "uuid";
2794
- email: "email";
2795
2793
  base64: "base64";
2796
2794
  base64url: "base64url";
2797
2795
  hex: "hex";
2796
+ uuid: "uuid";
2797
+ email: "email";
2798
2798
  url: "url";
2799
2799
  httpUrl: "httpUrl";
2800
2800
  hostname: "hostname";
@@ -2859,11 +2859,11 @@ export declare const TemplateOptions: z.ZodObject<{
2859
2859
  type: z.ZodLiteral<"string[]">;
2860
2860
  length: z.ZodOptional<z.ZodNumber>;
2861
2861
  zodFormat: z.ZodOptional<z.ZodEnum<{
2862
- uuid: "uuid";
2863
- email: "email";
2864
2862
  base64: "base64";
2865
2863
  base64url: "base64url";
2866
2864
  hex: "hex";
2865
+ uuid: "uuid";
2866
+ email: "email";
2867
2867
  url: "url";
2868
2868
  httpUrl: "httpUrl";
2869
2869
  hostname: "hostname";