sonamu 0.9.4 → 0.9.6

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 (171) hide show
  1. package/dist/ai/providers/rtzr/utils.js +2 -2
  2. package/dist/api/config.d.ts +13 -2
  3. package/dist/api/config.d.ts.map +1 -1
  4. package/dist/api/config.js +1 -1
  5. package/dist/api/context.d.ts +17 -7
  6. package/dist/api/context.d.ts.map +1 -1
  7. package/dist/api/context.js +1 -1
  8. package/dist/api/decorators.d.ts +18 -0
  9. package/dist/api/decorators.d.ts.map +1 -1
  10. package/dist/api/decorators.js +54 -3
  11. package/dist/api/index.js +8 -3
  12. package/dist/api/sonamu.d.ts +24 -9
  13. package/dist/api/sonamu.d.ts.map +1 -1
  14. package/dist/api/sonamu.js +365 -79
  15. package/dist/api/websocket-helpers.d.ts +24 -0
  16. package/dist/api/websocket-helpers.d.ts.map +1 -0
  17. package/dist/api/websocket-helpers.js +77 -0
  18. package/dist/bin/cli.js +12 -4
  19. package/dist/database/upsert-builder.js +4 -4
  20. package/dist/dict/sonamu-dictionary.js +6 -6
  21. package/dist/entity/entity-manager.js +1 -1
  22. package/dist/entity/entity.js +3 -3
  23. package/dist/index.d.ts +6 -0
  24. package/dist/index.d.ts.map +1 -1
  25. package/dist/index.js +16 -4
  26. package/dist/migration/code-generation.d.ts.map +1 -1
  27. package/dist/migration/code-generation.js +8 -9
  28. package/dist/stream/index.d.ts +6 -0
  29. package/dist/stream/index.d.ts.map +1 -1
  30. package/dist/stream/index.js +13 -2
  31. package/dist/stream/ws-audience-resolver.d.ts +15 -0
  32. package/dist/stream/ws-audience-resolver.d.ts.map +1 -0
  33. package/dist/stream/ws-audience-resolver.js +31 -0
  34. package/dist/stream/ws-audience.d.ts +28 -0
  35. package/dist/stream/ws-audience.d.ts.map +1 -0
  36. package/dist/stream/ws-audience.js +46 -0
  37. package/dist/stream/ws-cluster-bus.d.ts +23 -0
  38. package/dist/stream/ws-cluster-bus.d.ts.map +1 -0
  39. package/dist/stream/ws-cluster-bus.js +18 -0
  40. package/dist/stream/ws-core.d.ts +15 -0
  41. package/dist/stream/ws-core.d.ts.map +1 -0
  42. package/dist/stream/ws-core.js +1 -0
  43. package/dist/stream/ws-delivery.d.ts +24 -0
  44. package/dist/stream/ws-delivery.d.ts.map +1 -0
  45. package/dist/stream/ws-delivery.js +103 -0
  46. package/dist/stream/ws-local-connection-store.d.ts +10 -0
  47. package/dist/stream/ws-local-connection-store.d.ts.map +1 -0
  48. package/dist/stream/ws-local-connection-store.js +44 -0
  49. package/dist/stream/ws-presence-store.d.ts +61 -0
  50. package/dist/stream/ws-presence-store.d.ts.map +1 -0
  51. package/dist/stream/ws-presence-store.js +236 -0
  52. package/dist/stream/ws-registry.d.ts +42 -0
  53. package/dist/stream/ws-registry.d.ts.map +1 -0
  54. package/dist/stream/ws-registry.js +108 -0
  55. package/dist/stream/ws.d.ts +52 -0
  56. package/dist/stream/ws.d.ts.map +1 -0
  57. package/dist/stream/ws.js +397 -0
  58. package/dist/syncer/api-parser.d.ts.map +1 -1
  59. package/dist/syncer/api-parser.js +72 -2
  60. package/dist/syncer/checksum.d.ts.map +1 -1
  61. package/dist/syncer/checksum.js +13 -12
  62. package/dist/syncer/code-generator.d.ts.map +1 -1
  63. package/dist/syncer/code-generator.js +7 -4
  64. package/dist/syncer/event-batcher.d.ts +27 -0
  65. package/dist/syncer/event-batcher.d.ts.map +1 -0
  66. package/dist/syncer/event-batcher.js +69 -0
  67. package/dist/syncer/file-patterns.d.ts +48 -26
  68. package/dist/syncer/file-patterns.d.ts.map +1 -1
  69. package/dist/syncer/file-patterns.js +71 -23
  70. package/dist/syncer/file-tracking.d.ts +13 -0
  71. package/dist/syncer/file-tracking.d.ts.map +1 -0
  72. package/dist/syncer/file-tracking.js +33 -0
  73. package/dist/syncer/index.js +2 -2
  74. package/dist/syncer/module-loader.d.ts +2 -11
  75. package/dist/syncer/module-loader.d.ts.map +1 -1
  76. package/dist/syncer/module-loader.js +3 -3
  77. package/dist/syncer/syncer-actions.d.ts +39 -6
  78. package/dist/syncer/syncer-actions.d.ts.map +1 -1
  79. package/dist/syncer/syncer-actions.js +125 -10
  80. package/dist/syncer/syncer.d.ts +33 -19
  81. package/dist/syncer/syncer.d.ts.map +1 -1
  82. package/dist/syncer/syncer.js +168 -168
  83. package/dist/syncer/watcher.d.ts +8 -0
  84. package/dist/syncer/watcher.d.ts.map +1 -0
  85. package/dist/syncer/watcher.js +105 -0
  86. package/dist/tasks/workflow-manager.d.ts.map +1 -1
  87. package/dist/tasks/workflow-manager.js +2 -1
  88. package/dist/template/implementations/services.template.d.ts.map +1 -1
  89. package/dist/template/implementations/services.template.js +36 -1
  90. package/dist/testing/bootstrap.d.ts.map +1 -1
  91. package/dist/testing/bootstrap.js +8 -1
  92. package/dist/testing/data-explorer.d.ts.map +1 -1
  93. package/dist/testing/data-explorer.js +5 -3
  94. package/dist/testing/fixture-manager.js +1 -1
  95. package/dist/types/types.d.ts +2 -1
  96. package/dist/types/types.d.ts.map +1 -1
  97. package/dist/types/types.js +2 -2
  98. package/dist/ui/api.d.ts.map +1 -1
  99. package/dist/ui/api.js +4 -3
  100. package/dist/ui/cdd-service.js +1 -1
  101. package/dist/ui-web/assets/{index-C5KUjXm0.js → index-BmThfg-s.js} +39 -39
  102. package/dist/ui-web/assets/index-D4rYm-Xz.css +1 -0
  103. package/dist/ui-web/index.html +2 -2
  104. package/dist/utils/async-utils.d.ts +27 -3
  105. package/dist/utils/async-utils.d.ts.map +1 -1
  106. package/dist/utils/async-utils.js +56 -6
  107. package/dist/utils/formatter.d.ts +7 -1
  108. package/dist/utils/formatter.d.ts.map +1 -1
  109. package/dist/utils/formatter.js +95 -60
  110. package/dist/utils/fs-utils.d.ts +2 -0
  111. package/dist/utils/fs-utils.d.ts.map +1 -1
  112. package/dist/utils/fs-utils.js +10 -2
  113. package/dist/utils/process-utils.d.ts +6 -0
  114. package/dist/utils/process-utils.d.ts.map +1 -1
  115. package/dist/utils/process-utils.js +16 -3
  116. package/dist/utils/utils.d.ts +1 -0
  117. package/dist/utils/utils.d.ts.map +1 -1
  118. package/dist/utils/utils.js +2 -2
  119. package/package.json +7 -5
  120. package/src/ai/providers/rtzr/utils.ts +1 -1
  121. package/src/api/__tests__/sonamu.websocket.test.ts +64 -0
  122. package/src/api/__tests__/websocket-context.types.test.ts +58 -0
  123. package/src/api/config.ts +28 -2
  124. package/src/api/context.ts +21 -7
  125. package/src/api/decorators.ts +101 -1
  126. package/src/api/sonamu.ts +529 -127
  127. package/src/api/websocket-helpers.ts +122 -0
  128. package/src/bin/cli.ts +10 -2
  129. package/src/database/upsert-builder.ts +3 -3
  130. package/src/dict/sonamu-dictionary.ts +3 -3
  131. package/src/entity/entity.ts +1 -1
  132. package/src/index.ts +6 -0
  133. package/src/migration/code-generation.ts +6 -11
  134. package/src/shared/app.shared.ts.txt +312 -4
  135. package/src/shared/web.shared.ts.txt +340 -4
  136. package/src/stream/__tests__/ws-contracts.test.ts +381 -0
  137. package/src/stream/__tests__/ws.test.ts +449 -0
  138. package/src/stream/index.ts +6 -0
  139. package/src/stream/ws-audience-resolver.ts +35 -0
  140. package/src/stream/ws-audience.ts +62 -0
  141. package/src/stream/ws-cluster-bus.ts +32 -0
  142. package/src/stream/ws-core.ts +16 -0
  143. package/src/stream/ws-delivery.ts +138 -0
  144. package/src/stream/ws-local-connection-store.ts +44 -0
  145. package/src/stream/ws-presence-store.ts +326 -0
  146. package/src/stream/ws-registry.ts +138 -0
  147. package/src/stream/ws.ts +591 -0
  148. package/src/syncer/__tests__/api-parser.websocket-type-ref.test.ts +78 -0
  149. package/src/syncer/api-parser.ts +112 -1
  150. package/src/syncer/checksum.ts +23 -29
  151. package/src/syncer/code-generator.ts +4 -1
  152. package/src/syncer/event-batcher.ts +72 -0
  153. package/src/syncer/file-patterns.ts +98 -30
  154. package/src/syncer/file-tracking.ts +27 -0
  155. package/src/syncer/module-loader.ts +5 -12
  156. package/src/syncer/syncer-actions.ts +179 -17
  157. package/src/syncer/syncer.ts +250 -287
  158. package/src/syncer/watcher.ts +128 -0
  159. package/src/tasks/workflow-manager.ts +1 -0
  160. package/src/template/__tests__/services.template.websocket.test.ts +79 -0
  161. package/src/template/implementations/services.template.ts +69 -0
  162. package/src/testing/bootstrap.ts +8 -1
  163. package/src/testing/data-explorer.ts +3 -2
  164. package/src/types/types.ts +20 -2
  165. package/src/ui/api.ts +10 -1
  166. package/src/utils/async-utils.ts +71 -4
  167. package/src/utils/formatter.ts +114 -75
  168. package/src/utils/fs-utils.ts +9 -0
  169. package/src/utils/process-utils.ts +17 -0
  170. package/src/utils/utils.ts +1 -1
  171. package/dist/ui-web/assets/index-Dr8pRJC_.css +0 -1
@@ -1,39 +1,61 @@
1
- import { type AbsolutePath, type ApiRelativePath } from "../utils/path-utils";
1
+ import { type AbsolutePath, type AppRelativePath } from "../utils/path-utils";
2
2
  /**
3
3
  * Syncer가 관심 가지고 지켜보는 파일들입니다.
4
4
  * 이 파일들에 변경이 생기면 추가적인 작업(이하 "싱크" 또는 "싱크 액션")을 수행합니다.
5
5
  * 이 작업이라 함은 파일 복사 또는 템플릿 렌더링을 통한 code generation을 의미합니다.
6
6
  *
7
- * **경로 형식**: API 상대 경로 (src/로 시작)
8
- * **사용**: getChecksumPatternGroupInAbsolutePath()로 절대 경로 변환 후 glob 사용
7
+ * 경로 형식: appRoot 기준 상대 경로 (target 디렉토리로 시작, 예: "api/src/...", "web/src/...")
8
+ * 사용: getChecksumPatternGroupInAbsolutePath()로 절대 경로 변환 후 glob 사용
9
+ *
10
+ * 두 가지 의미적 영역:
11
+ * - 입력 (사용자 작성): api 디렉토리에만 위치. 사용자가 직접 편집.
12
+ * - 출력 (sonamu 생성/복사): api 또는 target 디렉토리에 sonamu가 만들어내는 파일.
13
+ *
14
+ * 추적 밖 자산 (부트스트랩 phase에서 매번 보장):
15
+ * - sonamu.shared.ts: 사용자가 커스터마이즈하는 자산. IfNotExists로 1회 생성 후 손대지 않음.
16
+ * - entry-server.generated.tsx: 입력 의존 없는 정적 코드. 매번 overwrite generate.
17
+ *
18
+ * 위 둘은 sync()의 부트스트랩 phase에서 변경 검출 사이클과 무관하게 보장됩니다.
19
+ * 추적 사이클 안에서 할 액션이 없는 자산이라 패턴 그룹에 포함되지 않습니다.
20
+ *
21
+ * 위치 카테고리는 api/targets/anywhere 헬퍼로 명시적으로 표현합니다.
22
+ *
23
+ * FileType은 이 함수의 반환 타입에서 자동 추론됩니다. 키 추가 시 별도 enum/배열을
24
+ * 동기화할 필요 없이 여기 한 군데만 수정하면 됩니다.
9
25
  */
10
- declare const checksumPatternGroup: {
11
- readonly config: "src/sonamu.config.ts";
12
- readonly entity: "src/application/**/*.entity.json";
13
- readonly frame: "src/application/**/*.frame.ts";
14
- readonly functions: "src/application/**/*.functions.ts";
15
- readonly generated: "src/application/sonamu.generated.ts";
16
- readonly model: "src/application/**/*.model.ts";
17
- readonly types: "src/application/**/*.types.ts";
18
- readonly workflow: "src/application/**/*.workflow.ts";
19
- readonly i18n: "src/i18n/**/!(sd.generated).ts";
20
- readonly i18nGenerated: "src/i18n/**/sd.generated.ts";
26
+ export declare function getChecksumPatternGroup(): {
27
+ config: `${string}/src/${string}` | `${string}/dist/${string}`;
28
+ entity: `${string}/src/${string}` | `${string}/dist/${string}`;
29
+ frame: `${string}/src/${string}` | `${string}/dist/${string}`;
30
+ functions: `${string}/src/${string}` | `${string}/dist/${string}`;
31
+ model: `${string}/src/${string}` | `${string}/dist/${string}`;
32
+ types: `${string}/src/${string}` | `${string}/dist/${string}`;
33
+ workflow: `${string}/src/${string}` | `${string}/dist/${string}`;
34
+ i18n: `${string}/src/${string}` | `${string}/dist/${string}`;
35
+ generated: `${string}/src/${string}` | `${string}/dist/${string}`;
36
+ generatedCopied: `${string}/src/${string}` | `${string}/dist/${string}`;
37
+ httpGenerated: `${string}/src/${string}` | `${string}/dist/${string}`;
38
+ servicesGenerated: `${string}/src/${string}` | `${string}/dist/${string}`;
39
+ sdGenerated: `${string}/src/${string}` | `${string}/dist/${string}`;
40
+ typesCopied: `${string}/src/${string}` | `${string}/dist/${string}`;
41
+ functionsCopied: `${string}/src/${string}` | `${string}/dist/${string}`;
42
+ i18nCopied: `${string}/src/${string}` | `${string}/dist/${string}`;
21
43
  };
22
- export { checksumPatternGroup };
23
- export type FileType = keyof typeof checksumPatternGroup;
24
- export type GlobPattern<T extends ApiRelativePath | AbsolutePath> = Record<FileType, T>;
25
44
  /**
26
- * API 상대 경로 패턴을 절대 경로 패턴으로 변환합니다.
27
- *
28
- * **목적**: Glob 패턴을 파일시스템에서 사용할 수 있는 절대 경로로 변환
29
- *
30
- * **사용처**: checksum.ts에서 실제 파일을 찾을
45
+ * FileType은 getChecksumPatternGroup의 반환 객체 키에서 자동 추론됩니다.
46
+ * 별도 배열/enum 동기화 불필요 — 패턴 그룹 함수가 진실의 단일 원천.
47
+ */
48
+ export type FileType = keyof ReturnType<typeof getChecksumPatternGroup>;
49
+ export type GlobPattern<T extends AppRelativePath | AbsolutePath> = Record<FileType, T>;
50
+ /**
51
+ * 빌드 산출물 디렉토리는 alternation 글롭이 의도치 않게 휘말릴 수 있으므로 안전망으로 제외.
52
+ * Node 내장 fs.glob의 exclude 옵션과 함께 사용합니다.
53
+ */
54
+ export declare const GLOB_EXCLUDE: string[];
55
+ /**
56
+ * appRoot 기준 상대 경로 패턴을 절대 경로 패턴으로 변환합니다.
31
57
  *
32
58
  * @returns 절대 경로 기반 Glob 패턴 맵
33
- *
34
- * @example
35
- * // 입력: { entity: "src/application/**\/*.entity.json" }
36
- * // 출력: { entity: "/Users/.../api/src/application/**\/*.entity.json" }
37
59
  */
38
60
  export declare function getChecksumPatternGroupInAbsolutePath(): GlobPattern<AbsolutePath>;
39
61
  //# sourceMappingURL=file-patterns.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"file-patterns.d.ts","sourceRoot":"","sources":["../../src/syncer/file-patterns.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAE9E;;;;;;;GAOG;AACH,QAAA,MAAM,oBAAoB;;;;;;;;;;;CAW0B,CAAC;AAErD,OAAO,EAAE,oBAAoB,EAAE,CAAC;AAChC,MAAM,MAAM,QAAQ,GAAG,MAAM,OAAO,oBAAoB,CAAC;AACzD,MAAM,MAAM,WAAW,CAAC,CAAC,SAAS,eAAe,GAAG,YAAY,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;AAExF;;;;;;;;;;;;GAYG;AACH,wBAAgB,qCAAqC,IAAI,WAAW,CAAC,YAAY,CAAC,CAOjF"}
1
+ {"version":3,"file":"file-patterns.d.ts","sourceRoot":"","sources":["../../src/syncer/file-patterns.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAE9E;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,uBAAuB;;;;;;;;;;;;;;;;;EAsCtC;AAyBD;;;GAGG;AACH,MAAM,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,OAAO,uBAAuB,CAAC,CAAC;AACxE,MAAM,MAAM,WAAW,CAAC,CAAC,SAAS,eAAe,GAAG,YAAY,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;AAExF;;;GAGG;AACH,eAAO,MAAM,YAAY,UAAsE,CAAC;AAEhG;;;;GAIG;AACH,wBAAgB,qCAAqC,IAAI,WAAW,CAAC,YAAY,CAAC,CAQjF"}
@@ -4,39 +4,87 @@ import path from "path";
4
4
 
5
5
  //#region src/syncer/file-patterns.ts
6
6
  /**
7
- * API 상대 경로 패턴을 절대 경로 패턴으로 변환합니다.
7
+ * Syncer가 관심 가지고 지켜보는 파일들입니다.
8
+ * 이 파일들에 변경이 생기면 추가적인 작업(이하 "싱크" 또는 "싱크 액션")을 수행합니다.
9
+ * 이 작업이라 함은 파일 복사 또는 템플릿 렌더링을 통한 code generation을 의미합니다.
8
10
  *
9
- * **목적**: Glob 패턴을 파일시스템에서 사용할 있는 절대 경로로 변환
11
+ * 경로 형식: appRoot 기준 상대 경로 (target 디렉토리로 시작, 예: "api/src/...", "web/src/...")
12
+ * 사용: getChecksumPatternGroupInAbsolutePath()로 절대 경로 변환 후 glob 사용
10
13
  *
11
- * **사용처**: checksum.ts에서 실제 파일을 찾을 때
14
+ * 가지 의미적 영역:
15
+ * - 입력 (사용자 작성): api 디렉토리에만 위치. 사용자가 직접 편집.
16
+ * - 출력 (sonamu 생성/복사): api 또는 target 디렉토리에 sonamu가 만들어내는 파일.
12
17
  *
13
- * @returns 절대 경로 기반 Glob 패턴
18
+ * 추적 자산 (부트스트랩 phase에서 매번 보장):
19
+ * - sonamu.shared.ts: 사용자가 커스터마이즈하는 자산. IfNotExists로 1회 생성 후 손대지 않음.
20
+ * - entry-server.generated.tsx: 입력 의존 없는 정적 코드. 매번 overwrite generate.
21
+ *
22
+ * 위 둘은 sync()의 부트스트랩 phase에서 변경 검출 사이클과 무관하게 보장됩니다.
23
+ * 추적 사이클 안에서 할 액션이 없는 자산이라 패턴 그룹에 포함되지 않습니다.
24
+ *
25
+ * 위치 카테고리는 api/targets/anywhere 헬퍼로 명시적으로 표현합니다.
26
+ *
27
+ * FileType은 이 함수의 반환 타입에서 자동 추론됩니다. 키 추가 시 별도 enum/배열을
28
+ * 동기화할 필요 없이 여기 한 군데만 수정하면 됩니다.
29
+ */
30
+ function getChecksumPatternGroup() {
31
+ const { api, targets, anywhere } = globBuilders();
32
+ return {
33
+ config: api("src/sonamu.config.ts"),
34
+ entity: api("src/application/**/*.entity.json"),
35
+ frame: api("src/application/**/*.frame.ts"),
36
+ functions: api("src/application/**/*.functions.ts"),
37
+ model: api("src/application/**/*.model.ts"),
38
+ types: api("src/application/**/*.types.ts"),
39
+ workflow: api("src/application/**/*.workflow.ts"),
40
+ i18n: api("src/i18n/**/!(sd.generated).ts"),
41
+ generated: api("src/application/**/*.generated.{ts,tsx,sso.ts}"),
42
+ generatedCopied: targets("src/services/**/{sonamu,queries}.generated.{ts,tsx,sso.ts}"),
43
+ httpGenerated: api("src/application/**/*.generated.http"),
44
+ servicesGenerated: targets("src/services/services.generated.ts"),
45
+ sdGenerated: anywhere("src/i18n/**/sd.generated.ts"),
46
+ typesCopied: targets("src/services/**/*.types.ts"),
47
+ functionsCopied: targets("src/services/**/*.functions.ts"),
48
+ i18nCopied: targets("src/i18n/**/!(sd.generated).ts")
49
+ };
50
+ }
51
+ /**
52
+ * 위치 카테고리별 글롭 빌더를 만들어 반환합니다.
53
+ * - api(rest): api 디렉토리에 한정
54
+ * - targets(rest): target 디렉토리들에 한정 (web, app 등)
55
+ * - anywhere(rest): api와 target 모두
56
+ */
57
+ function globBuilders() {
58
+ const apiDir = Sonamu.config.api.dir;
59
+ const targetDirs = Sonamu.config.sync.targets;
60
+ const braceJoin = (dirs) => dirs.length === 1 ? dirs[0] : `{${dirs.join(",")}}`;
61
+ return {
62
+ api: (pathFromApi) => `${apiDir}/${pathFromApi}`,
63
+ targets: (pathFromTarget) => `${braceJoin(targetDirs)}/${pathFromTarget}`,
64
+ anywhere: (pathFromAnywhere) => `${braceJoin([apiDir, ...targetDirs])}/${pathFromAnywhere}`
65
+ };
66
+ }
67
+ /**
68
+ * appRoot 기준 상대 경로 패턴을 절대 경로 패턴으로 변환합니다.
14
69
  *
15
- * @example
16
- * // 입력: { entity: "src/application/**\/*.entity.json" }
17
- * // 출력: { entity: "/Users/.../api/src/application/**\/*.entity.json" }
70
+ * @returns 절대 경로 기반 Glob 패턴 맵
18
71
  */
19
72
  function getChecksumPatternGroupInAbsolutePath() {
20
- return Object.fromEntries(Object.entries(checksumPatternGroup).map(([key, value]) => [key, path.join(Sonamu.apiRootPath, value)]));
73
+ const group = getChecksumPatternGroup();
74
+ return Object.fromEntries(Object.entries(group).map(([key, value]) => [key, path.join(Sonamu.appRootPath, value)]));
21
75
  }
22
- var checksumPatternGroup;
76
+ var GLOB_EXCLUDE;
23
77
  var init_file_patterns = __esmMin((() => {
24
78
  init_sonamu();
25
- checksumPatternGroup = {
26
- config: "src/sonamu.config.ts",
27
- entity: "src/application/**/*.entity.json",
28
- frame: "src/application/**/*.frame.ts",
29
- functions: "src/application/**/*.functions.ts",
30
- generated: "src/application/sonamu.generated.ts",
31
- model: "src/application/**/*.model.ts",
32
- types: "src/application/**/*.types.ts",
33
- workflow: "src/application/**/*.workflow.ts",
34
- i18n: "src/i18n/**/!(sd.generated).ts",
35
- i18nGenerated: "src/i18n/**/sd.generated.ts"
36
- };
79
+ GLOB_EXCLUDE = [
80
+ "**/node_modules/**",
81
+ "**/dist/**",
82
+ "**/build/**",
83
+ "**/.turbo/**"
84
+ ];
37
85
  }));
38
86
 
39
87
  //#endregion
40
88
  init_file_patterns();
41
- export { checksumPatternGroup, getChecksumPatternGroupInAbsolutePath, init_file_patterns };
42
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1wYXR0ZXJucy5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi9zcmMvc3luY2VyL2ZpbGUtcGF0dGVybnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcblxuaW1wb3J0IHsgU29uYW11IH0gZnJvbSBcIi4uL2FwaS9zb25hbXVcIjtcbmltcG9ydCB7IHR5cGUgQWJzb2x1dGVQYXRoLCB0eXBlIEFwaVJlbGF0aXZlUGF0aCB9IGZyb20gXCIuLi91dGlscy9wYXRoLXV0aWxzXCI7XG5cbi8qKlxuICogU3luY2Vy6rCAIOq0gOyLrCDqsIDsp4Dqs6Ag7KeA7Lyc67O064qUIO2MjOydvOuTpOyeheuLiOuLpC5cbiAqIOydtCDtjIzsnbzrk6Tsl5Ag67OA6rK97J20IOyDneq4sOuptCDstpTqsIDsoIHsnbgg7J6R7JeFKOydtO2VmCBcIuyLse2BrFwiIOuYkOuKlCBcIuyLse2BrCDslaHshZhcIinsnYQg7IiY7ZaJ7ZWp64uI64ukLlxuICog7J20IOyekeyXheydtOudvCDtlajsnYAg7YyM7J28IOuzteyCrCDrmJDripQg7YWc7ZSM66a/IOugjOuNlOungeydhCDthrXtlZwgY29kZSBnZW5lcmF0aW9u7J2EIOydmOuvuO2VqeuLiOuLpC5cbiAqXG4gKiAqKuqyveuhnCDtmJXsi50qKjogQVBJIOyDgeuMgCDqsr3roZwgKHNyYy/roZwg7Iuc7J6RKVxuICogKirsgqzsmqkqKjogZ2V0Q2hlY2tzdW1QYXR0ZXJuR3JvdXBJbkFic29sdXRlUGF0aCgp66GcIOygiOuMgCDqsr3roZwg67OA7ZmYIO2bhCBnbG9iIOyCrOyaqVxuICovXG5jb25zdCBjaGVja3N1bVBhdHRlcm5Hcm91cCA9IHtcbiAgY29uZmlnOiBcInNyYy9zb25hbXUuY29uZmlnLnRzXCIsXG4gIGVudGl0eTogXCJzcmMvYXBwbGljYXRpb24vKiovKi5lbnRpdHkuanNvblwiLFxuICBmcmFtZTogXCJzcmMvYXBwbGljYXRpb24vKiovKi5mcmFtZS50c1wiLFxuICBmdW5jdGlvbnM6IFwic3JjL2FwcGxpY2F0aW9uLyoqLyouZnVuY3Rpb25zLnRzXCIsXG4gIGdlbmVyYXRlZDogXCJzcmMvYXBwbGljYXRpb24vc29uYW11LmdlbmVyYXRlZC50c1wiLFxuICBtb2RlbDogXCJzcmMvYXBwbGljYXRpb24vKiovKi5tb2RlbC50c1wiLFxuICB0eXBlczogXCJzcmMvYXBwbGljYXRpb24vKiovKi50eXBlcy50c1wiLFxuICB3b3JrZmxvdzogXCJzcmMvYXBwbGljYXRpb24vKiovKi53b3JrZmxvdy50c1wiLFxuICBpMThuOiBcInNyYy9pMThuLyoqLyEoc2QuZ2VuZXJhdGVkKS50c1wiLFxuICBpMThuR2VuZXJhdGVkOiBcInNyYy9pMThuLyoqL3NkLmdlbmVyYXRlZC50c1wiLFxufSBhcyBjb25zdCBzYXRpc2ZpZXMgUmVjb3JkPHN0cmluZywgQXBpUmVsYXRpdmVQYXRoPjtcblxuZXhwb3J0IHsgY2hlY2tzdW1QYXR0ZXJuR3JvdXAgfTtcbmV4cG9ydCB0eXBlIEZpbGVUeXBlID0ga2V5b2YgdHlwZW9mIGNoZWNrc3VtUGF0dGVybkdyb3VwO1xuZXhwb3J0IHR5cGUgR2xvYlBhdHRlcm48VCBleHRlbmRzIEFwaVJlbGF0aXZlUGF0aCB8IEFic29sdXRlUGF0aD4gPSBSZWNvcmQ8RmlsZVR5cGUsIFQ+O1xuXG4vKipcbiAqIEFQSSDsg4HrjIAg6rK966GcIO2MqO2EtOydhCDsoIjrjIAg6rK966GcIO2MqO2EtOycvOuhnCDrs4DtmZjtlanri4jri6QuXG4gKlxuICogKirrqqnsoIEqKjogR2xvYiDtjKjthLTsnYQg7YyM7J287Iuc7Iqk7YWc7JeQ7IScIOyCrOyaqe2VoCDsiJgg7J6I64qUIOygiOuMgCDqsr3roZzroZwg67OA7ZmYXG4gKlxuICogKirsgqzsmqnsspgqKjogY2hlY2tzdW0udHPsl5DshJwg7Iuk7KCcIO2MjOydvOydhCDssL7snYQg65WMXG4gKlxuICogQHJldHVybnMg7KCI64yAIOqyveuhnCDquLDrsJggR2xvYiDtjKjthLQg66e1XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIOyeheugpTogeyBlbnRpdHk6IFwic3JjL2FwcGxpY2F0aW9uLyoqXFwvKi5lbnRpdHkuanNvblwiIH1cbiAqIC8vIOy2nOugpTogeyBlbnRpdHk6IFwiL1VzZXJzLy4uLi9hcGkvc3JjL2FwcGxpY2F0aW9uLyoqXFwvKi5lbnRpdHkuanNvblwiIH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENoZWNrc3VtUGF0dGVybkdyb3VwSW5BYnNvbHV0ZVBhdGgoKTogR2xvYlBhdHRlcm48QWJzb2x1dGVQYXRoPiB7XG4gIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgT2JqZWN0LmVudHJpZXMoY2hlY2tzdW1QYXR0ZXJuR3JvdXApLm1hcCgoW2tleSwgdmFsdWVdKSA9PiBbXG4gICAgICBrZXksXG4gICAgICBwYXRoLmpvaW4oU29uYW11LmFwaVJvb3RQYXRoLCB2YWx1ZSksIC8vIEFQSSDsg4HrjIAg6rK966GcIOKGkiDsoIjrjIAg6rK966GcXG4gICAgXSksXG4gICkgYXMgR2xvYlBhdHRlcm48QWJzb2x1dGVQYXRoPjtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBMkNBLFNBQWdCLHdDQUFtRTtBQUNqRixRQUFPLE9BQU8sWUFDWixPQUFPLFFBQVEscUJBQXFCLENBQUMsS0FBSyxDQUFDLEtBQUssV0FBVyxDQUN6RCxLQUNBLEtBQUssS0FBSyxPQUFPLGFBQWEsTUFBTSxDQUNyQyxDQUFDLENBQ0g7Ozs7Y0EvQ29DO0NBV2pDLHVCQUF1QjtFQUMzQixRQUFRO0VBQ1IsUUFBUTtFQUNSLE9BQU87RUFDUCxXQUFXO0VBQ1gsV0FBVztFQUNYLE9BQU87RUFDUCxPQUFPO0VBQ1AsVUFBVTtFQUNWLE1BQU07RUFDTixlQUFlO0VBQ2hCIn0=
89
+ export { GLOB_EXCLUDE, getChecksumPatternGroup, getChecksumPatternGroupInAbsolutePath, init_file_patterns };
90
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1wYXR0ZXJucy5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi9zcmMvc3luY2VyL2ZpbGUtcGF0dGVybnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcblxuaW1wb3J0IHsgU29uYW11IH0gZnJvbSBcIi4uL2FwaS9zb25hbXVcIjtcbmltcG9ydCB7IHR5cGUgQWJzb2x1dGVQYXRoLCB0eXBlIEFwcFJlbGF0aXZlUGF0aCB9IGZyb20gXCIuLi91dGlscy9wYXRoLXV0aWxzXCI7XG5cbi8qKlxuICogU3luY2Vy6rCAIOq0gOyLrCDqsIDsp4Dqs6Ag7KeA7Lyc67O064qUIO2MjOydvOuTpOyeheuLiOuLpC5cbiAqIOydtCDtjIzsnbzrk6Tsl5Ag67OA6rK97J20IOyDneq4sOuptCDstpTqsIDsoIHsnbgg7J6R7JeFKOydtO2VmCBcIuyLse2BrFwiIOuYkOuKlCBcIuyLse2BrCDslaHshZhcIinsnYQg7IiY7ZaJ7ZWp64uI64ukLlxuICog7J20IOyekeyXheydtOudvCDtlajsnYAg7YyM7J28IOuzteyCrCDrmJDripQg7YWc7ZSM66a/IOugjOuNlOungeydhCDthrXtlZwgY29kZSBnZW5lcmF0aW9u7J2EIOydmOuvuO2VqeuLiOuLpC5cbiAqXG4gKiDqsr3roZwg7ZiV7IudOiBhcHBSb290IOq4sOykgCDsg4HrjIAg6rK966GcICh0YXJnZXQg65SU66CJ7Yag66as66GcIOyLnOyekSwg7JiIOiBcImFwaS9zcmMvLi4uXCIsIFwid2ViL3NyYy8uLi5cIilcbiAqIOyCrOyaqTogZ2V0Q2hlY2tzdW1QYXR0ZXJuR3JvdXBJbkFic29sdXRlUGF0aCgp66GcIOygiOuMgCDqsr3roZwg67OA7ZmYIO2bhCBnbG9iIOyCrOyaqVxuICpcbiAqIOuRkCDqsIDsp4Ag7J2Y66+47KCBIOyYgeyXrTpcbiAqIC0g7J6F66ClICjsgqzsmqnsnpAg7J6R7ISxKTogYXBpIOuUlOugie2GoOumrOyXkOunjCDsnITsuZguIOyCrOyaqeyekOqwgCDsp4HsoJEg7Y647KeRLlxuICogLSDstpzroKUgKHNvbmFtdSDsg53shLEv67O17IKsKTogYXBpIOuYkOuKlCB0YXJnZXQg65SU66CJ7Yag66as7JeQIHNvbmFtdeqwgCDrp4zrk6TslrTrgrTripQg7YyM7J28LlxuICpcbiAqIOy2lOyggSDrsJYg7J6Q7IKwICjrtoDtirjsiqTtirjrnqkgcGhhc2Xsl5DshJwg66ek67KIIOuztOyepSk6XG4gKiAtIHNvbmFtdS5zaGFyZWQudHM6IOyCrOyaqeyekOqwgCDsu6TsiqTthLDrp4jsnbTspojtlZjripQg7J6Q7IKwLiBJZk5vdEV4aXN0c+uhnCAx7ZqMIOyDneyEsSDtm4Qg7IaQ64yA7KeAIOyViuydjC5cbiAqIC0gZW50cnktc2VydmVyLmdlbmVyYXRlZC50c3g6IOyeheugpSDsnZjsobQg7JeG64qUIOygleyggSDsvZTrk5wuIOunpOuyiCBvdmVyd3JpdGUgZ2VuZXJhdGUuXG4gKlxuICog7JyEIOuRmOydgCBzeW5jKCnsnZgg67aA7Yq47Iqk7Yq4656pIHBoYXNl7JeQ7IScIOuzgOqyvSDqsoDstpwg7IKs7J207YG06rO8IOustOq0gO2VmOqyjCDrs7TsnqXrkKnri4jri6QuXG4gKiDstpTsoIEg7IKs7J207YG0IOyViOyXkOyEnCDtlaAg7JWh7IWY7J20IOyXhuuKlCDsnpDsgrDsnbTrnbwg7Yyo7YS0IOq3uOujueyXkCDtj6ztlajrkJjsp4Ag7JWK7Iq164uI64ukLlxuICpcbiAqIOychOy5mCDsubTthYzqs6DrpqzripQgYXBpL3RhcmdldHMvYW55d2hlcmUg7Zes7Y2866GcIOuqheyLnOyggeycvOuhnCDtkZztmITtlanri4jri6QuXG4gKlxuICogRmlsZVR5cGXsnYAg7J20IO2VqOyImOydmCDrsJjtmZgg7YOA7J6F7JeQ7IScIOyekOuPmSDstpTroaDrkKnri4jri6QuIO2CpCDstpTqsIAg7IucIOuzhOuPhCBlbnVtL+uwsOyXtOydhFxuICog64+Z6riw7ZmU7ZWgIO2VhOyalCDsl4bsnbQg7Jes6riwIO2VnCDqtbDrjbDrp4wg7IiY7KCV7ZWY66m0IOuQqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENoZWNrc3VtUGF0dGVybkdyb3VwKCkge1xuICAvLyDtl6ztjbwg7ZWo7IiY65OkIOunjOuTpOyWtOyEnCDqsIDsoLjsmLXri4jri6QuXG4gIGNvbnN0IHsgYXBpLCB0YXJnZXRzLCBhbnl3aGVyZSB9ID0gZ2xvYkJ1aWxkZXJzKCk7XG5cbiAgcmV0dXJuIHtcbiAgICAvLyBTb25hbXUg7J6F7J6l7JeQ7IScIHNvcnVjZeqwgCDrkJjripQg7YyM7J2865Ok7J6F64uI64ukLlxuICAgIC8vIOydtCDsuZzqtazrk6TsnbQg67OA6rK965CY66m0IOydtOuTpOuhnOu2gO2EsCDslaHshZjsnYQg7IiY7ZaJ7ZWY6rOgIO2MjOydvOydhCDsg53shLHtlanri4jri6QuXG4gICAgLy8g66qo64W466as7Y+s7JeQ7IScIOydtCBzb3VyY2Xrk6TsnYAgYXBpIO2UhOuhnOygne2KuOyXkCDtlZzsoJXrkJjrr4DroZwsIGFwaeyXkCDsnojripQg7Lmc6rWs65Ok66eMIOumrOyKpO2Mhe2VqeuLiOuLpC5cbiAgICBjb25maWc6IGFwaShcInNyYy9zb25hbXUuY29uZmlnLnRzXCIpLFxuICAgIGVudGl0eTogYXBpKFwic3JjL2FwcGxpY2F0aW9uLyoqLyouZW50aXR5Lmpzb25cIiksXG4gICAgZnJhbWU6IGFwaShcInNyYy9hcHBsaWNhdGlvbi8qKi8qLmZyYW1lLnRzXCIpLFxuICAgIGZ1bmN0aW9uczogYXBpKFwic3JjL2FwcGxpY2F0aW9uLyoqLyouZnVuY3Rpb25zLnRzXCIpLFxuICAgIG1vZGVsOiBhcGkoXCJzcmMvYXBwbGljYXRpb24vKiovKi5tb2RlbC50c1wiKSxcbiAgICB0eXBlczogYXBpKFwic3JjL2FwcGxpY2F0aW9uLyoqLyoudHlwZXMudHNcIiksXG4gICAgd29ya2Zsb3c6IGFwaShcInNyYy9hcHBsaWNhdGlvbi8qKi8qLndvcmtmbG93LnRzXCIpLFxuICAgIGkxOG46IGFwaShcInNyYy9pMThuLyoqLyEoc2QuZ2VuZXJhdGVkKS50c1wiKSxcblxuICAgIC8vIFNvbmFtdeqwgCDstpzroKXtlZjripQg7IOd7ISxIO2MjOydvOuTpOyeheuLiOuLpC5cbiAgICAvLyDsnbQg7Lmc6rWs65Ok64+EIOygle2VqeyEsSDqsoDspp0g7LCo7JuQ7JeQ7IScIHNvbmFtdS5sb2Nr7JeQIOq4sOuhne2VtOyVvCDtlZjqs6AsXG4gICAgLy8g65iQ7ZWcIOuzgOqyveyLnCDqt7gg7IKs7Iuk7J2EIHN5bmNlcuqwgCDslYzquLDripQg7ZW07JW8IO2VqeuLiOuLpCjruYTroZ0g67OE64uk66W4IOyymOumrOqwgCDsl4bripQg6rK97Jqw64+EIOyeiOyngOunjCkuXG4gICAgLy9cbiAgICAvLyDsnpDsgrAg67O47ISx7JeQIOuUsOudvCDsnITsuZgg7Lm07YWM6rOg66as6rCAIOuLpOultOq4sCDrlYzrrLjsl5AsIOuzuOyEseuzhOuhnCDrtoTrpqztlbTshJwg7ZGc6riw7ZWp64uI64ukLlxuICAgIC8vIC0g7JaR7Kq9Le2VhOyalCDsnpDsgrA6IGFwaeyXkCDsoJXrs7jsnbQg66eM65Ok7Ja07KeEIOuSpCB0YXJnZXTsl5Ag67O17IKs65CoIChzb25hbXUuZ2VuZXJhdGVkLiosIHF1ZXJpZXMuZ2VuZXJhdGVkLnRzKS5cbiAgICAvLyAtIGFwaSDsoITsmqkg7J6Q7IKwOiBhcGnsl5Drp4wg66eM65Ok7Ja07KeQIChzb25hbXUuZ2VuZXJhdGVkLmh0dHApLlxuICAgIC8vIC0gdGFyZ2V0IOyghOyaqSDsnpDsgrA6IHRhcmdldOyXkOunjCDrp4zrk6TslrTsp5AgKHNlcnZpY2VzLmdlbmVyYXRlZC50c+uKlCBzZXJ2aWNlcy50ZW1wbGF0ZeydmCA6dGFyZ2V0IOu2hOuwsCkuXG4gICAgLy9cbiAgICAvLyDsl6zquLDsl5DripQgU29uYW117J2YIOuqqOuToCBzeW5jIOyCsOy2nOusvOydtCDsnojripQg6rKD7J2AIOyVhOuLmeuLiOuLpC5cbiAgICAvLyBzb25hbXUuc2hhcmVkLnRz7JmAIGVudHJ5LXNlcnZlci5nZW5lcmF0ZWQudHN47JmAIOqwmeydgFxuICAgIC8vIHN5bmMg7LSI67CYIDHtmozshLEg67aA7Yq47Iqk7Yq4656pIO2MjOydvOuTpOydgCDqtIDrpqwg7JWIIO2VmOq4sCDrlYzrrLjsl5Ag7Jes6riw7JeQIOumrOyKpO2MheuPhCDslYgg7ZWp64uI64ukLlxuICAgIGdlbmVyYXRlZDogYXBpKFwic3JjL2FwcGxpY2F0aW9uLyoqLyouZ2VuZXJhdGVkLnt0cyx0c3gsc3NvLnRzfVwiKSxcbiAgICBnZW5lcmF0ZWRDb3BpZWQ6IHRhcmdldHMoXCJzcmMvc2VydmljZXMvKiove3NvbmFtdSxxdWVyaWVzfS5nZW5lcmF0ZWQue3RzLHRzeCxzc28udHN9XCIpLFxuICAgIGh0dHBHZW5lcmF0ZWQ6IGFwaShcInNyYy9hcHBsaWNhdGlvbi8qKi8qLmdlbmVyYXRlZC5odHRwXCIpLFxuICAgIHNlcnZpY2VzR2VuZXJhdGVkOiB0YXJnZXRzKFwic3JjL3NlcnZpY2VzL3NlcnZpY2VzLmdlbmVyYXRlZC50c1wiKSxcbiAgICBzZEdlbmVyYXRlZDogYW55d2hlcmUoXCJzcmMvaTE4bi8qKi9zZC5nZW5lcmF0ZWQudHNcIiksXG4gICAgdHlwZXNDb3BpZWQ6IHRhcmdldHMoXCJzcmMvc2VydmljZXMvKiovKi50eXBlcy50c1wiKSxcbiAgICBmdW5jdGlvbnNDb3BpZWQ6IHRhcmdldHMoXCJzcmMvc2VydmljZXMvKiovKi5mdW5jdGlvbnMudHNcIiksXG4gICAgaTE4bkNvcGllZDogdGFyZ2V0cyhcInNyYy9pMThuLyoqLyEoc2QuZ2VuZXJhdGVkKS50c1wiKSxcbiAgfSBzYXRpc2ZpZXMgUmVjb3JkPHN0cmluZywgQXBwUmVsYXRpdmVQYXRoPjtcbn1cblxuLyoqXG4gKiDsnITsuZgg7Lm07YWM6rOg66as67OEIOq4gOuhrSDruYzrjZTrpbwg66eM65Ok7Ja0IOuwmO2ZmO2VqeuLiOuLpC5cbiAqIC0gYXBpKHJlc3QpOiBhcGkg65SU66CJ7Yag66as7JeQIO2VnOyglVxuICogLSB0YXJnZXRzKHJlc3QpOiB0YXJnZXQg65SU66CJ7Yag66as65Ok7JeQIO2VnOyglSAod2ViLCBhcHAg65OxKVxuICogLSBhbnl3aGVyZShyZXN0KTogYXBp7JmAIHRhcmdldCDrqqjrkZBcbiAqL1xuZnVuY3Rpb24gZ2xvYkJ1aWxkZXJzKCkge1xuICBjb25zdCBhcGlEaXIgPSBTb25hbXUuY29uZmlnLmFwaS5kaXI7XG4gIGNvbnN0IHRhcmdldERpcnMgPSBTb25hbXUuY29uZmlnLnN5bmMudGFyZ2V0cztcblxuICAvLyBOb2RlIOuCtOyepSBmcy5nbG9i7J2YIGJyYWNlIGV4cGFuc2lvbuydgCDri6jsnbwg66mk67KEIHt4feulvCDtkoDsp4Ag7JWK7Jy866+A66GcLCDrqaTrsoTqsIAgMeqwnOydvCDrlYzripQgYWx0ZXJuYXRpb24g7JeG7J20IOyngeygkSDqsrDtlantlanri4jri6QuXG4gIGNvbnN0IGJyYWNlSm9pbiA9IChkaXJzOiByZWFkb25seSBzdHJpbmdbXSkgPT5cbiAgICBkaXJzLmxlbmd0aCA9PT0gMSA/IGRpcnNbMF0gOiBgeyR7ZGlycy5qb2luKFwiLFwiKX19YDtcblxuICByZXR1cm4ge1xuICAgIGFwaTogKHBhdGhGcm9tQXBpOiBzdHJpbmcpID0+IGAke2FwaURpcn0vJHtwYXRoRnJvbUFwaX1gIGFzIEFwcFJlbGF0aXZlUGF0aCxcbiAgICB0YXJnZXRzOiAocGF0aEZyb21UYXJnZXQ6IHN0cmluZykgPT5cbiAgICAgIGAke2JyYWNlSm9pbih0YXJnZXREaXJzKX0vJHtwYXRoRnJvbVRhcmdldH1gIGFzIEFwcFJlbGF0aXZlUGF0aCxcbiAgICBhbnl3aGVyZTogKHBhdGhGcm9tQW55d2hlcmU6IHN0cmluZykgPT5cbiAgICAgIGAke2JyYWNlSm9pbihbYXBpRGlyLCAuLi50YXJnZXREaXJzXSl9LyR7cGF0aEZyb21Bbnl3aGVyZX1gIGFzIEFwcFJlbGF0aXZlUGF0aCxcbiAgfTtcbn1cblxuLyoqXG4gKiBGaWxlVHlwZeydgCBnZXRDaGVja3N1bVBhdHRlcm5Hcm91cOydmCDrsJjtmZgg6rCd7LK0IO2CpOyXkOyEnCDsnpDrj5kg7LaU66Gg65Cp64uI64ukLlxuICog67OE64+EIOuwsOyXtC9lbnVtIOuPmeq4sO2ZlCDrtojtlYTsmpQg4oCUIO2MqO2EtCDqt7jro7kg7ZWo7IiY6rCAIOynhOyLpOydmCDri6jsnbwg7JuQ7LKcLlxuICovXG5leHBvcnQgdHlwZSBGaWxlVHlwZSA9IGtleW9mIFJldHVyblR5cGU8dHlwZW9mIGdldENoZWNrc3VtUGF0dGVybkdyb3VwPjtcbmV4cG9ydCB0eXBlIEdsb2JQYXR0ZXJuPFQgZXh0ZW5kcyBBcHBSZWxhdGl2ZVBhdGggfCBBYnNvbHV0ZVBhdGg+ID0gUmVjb3JkPEZpbGVUeXBlLCBUPjtcblxuLyoqXG4gKiDruYzrk5wg7IKw7Lac66y8IOuUlOugie2GoOumrOuKlCBhbHRlcm5hdGlvbiDquIDroa3snbQg7J2Y64+E7LmYIOyViuqyjCDtnJjrp5DrprQg7IiYIOyeiOycvOuvgOuhnCDslYjsoITrp53snLzroZwg7KCc7Jm4LlxuICogTm9kZSDrgrTsnqUgZnMuZ2xvYuydmCBleGNsdWRlIOyYteyFmOqzvCDtlajqu5gg7IKs7Jqp7ZWp64uI64ukLlxuICovXG5leHBvcnQgY29uc3QgR0xPQl9FWENMVURFID0gW1wiKiovbm9kZV9tb2R1bGVzLyoqXCIsIFwiKiovZGlzdC8qKlwiLCBcIioqL2J1aWxkLyoqXCIsIFwiKiovLnR1cmJvLyoqXCJdO1xuXG4vKipcbiAqIGFwcFJvb3Qg6riw7KSAIOyDgeuMgCDqsr3roZwg7Yyo7YS07J2EIOygiOuMgCDqsr3roZwg7Yyo7YS07Jy866GcIOuzgO2ZmO2VqeuLiOuLpC5cbiAqXG4gKiBAcmV0dXJucyDsoIjrjIAg6rK966GcIOq4sOuwmCBHbG9iIO2MqO2EtCDrp7VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENoZWNrc3VtUGF0dGVybkdyb3VwSW5BYnNvbHV0ZVBhdGgoKTogR2xvYlBhdHRlcm48QWJzb2x1dGVQYXRoPiB7XG4gIGNvbnN0IGdyb3VwID0gZ2V0Q2hlY2tzdW1QYXR0ZXJuR3JvdXAoKTtcbiAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhcbiAgICBPYmplY3QuZW50cmllcyhncm91cCkubWFwKChba2V5LCB2YWx1ZV0pID0+IFtcbiAgICAgIGtleSxcbiAgICAgIHBhdGguam9pbihTb25hbXUuYXBwUm9vdFBhdGgsIHZhbHVlKSwgLy8gYXBwUm9vdCDsg4HrjIAg6rK966GcIOKGkiDsoIjrjIAg6rK966GcXG4gICAgXSksXG4gICkgYXMgR2xvYlBhdHRlcm48QWJzb2x1dGVQYXRoPjtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUE2QkEsU0FBZ0IsMEJBQTBCO0NBRXhDLE1BQU0sRUFBRSxLQUFLLFNBQVMsYUFBYSxjQUFjO0FBRWpELFFBQU87RUFJTCxRQUFRLElBQUksdUJBQXVCO0VBQ25DLFFBQVEsSUFBSSxtQ0FBbUM7RUFDL0MsT0FBTyxJQUFJLGdDQUFnQztFQUMzQyxXQUFXLElBQUksb0NBQW9DO0VBQ25ELE9BQU8sSUFBSSxnQ0FBZ0M7RUFDM0MsT0FBTyxJQUFJLGdDQUFnQztFQUMzQyxVQUFVLElBQUksbUNBQW1DO0VBQ2pELE1BQU0sSUFBSSxpQ0FBaUM7RUFjM0MsV0FBVyxJQUFJLGlEQUFpRDtFQUNoRSxpQkFBaUIsUUFBUSw2REFBNkQ7RUFDdEYsZUFBZSxJQUFJLHNDQUFzQztFQUN6RCxtQkFBbUIsUUFBUSxxQ0FBcUM7RUFDaEUsYUFBYSxTQUFTLDhCQUE4QjtFQUNwRCxhQUFhLFFBQVEsNkJBQTZCO0VBQ2xELGlCQUFpQixRQUFRLGlDQUFpQztFQUMxRCxZQUFZLFFBQVEsaUNBQWlDO0VBQ3REOzs7Ozs7OztBQVNILFNBQVMsZUFBZTtDQUN0QixNQUFNLFNBQVMsT0FBTyxPQUFPLElBQUk7Q0FDakMsTUFBTSxhQUFhLE9BQU8sT0FBTyxLQUFLO0NBR3RDLE1BQU0sYUFBYSxTQUNqQixLQUFLLFdBQVcsSUFBSSxLQUFLLEtBQUssSUFBSSxLQUFLLEtBQUssSUFBSSxDQUFDO0FBRW5ELFFBQU87RUFDTCxNQUFNLGdCQUF3QixHQUFHLE9BQU8sR0FBRztFQUMzQyxVQUFVLG1CQUNSLEdBQUcsVUFBVSxXQUFXLENBQUMsR0FBRztFQUM5QixXQUFXLHFCQUNULEdBQUcsVUFBVSxDQUFDLFFBQVEsR0FBRyxXQUFXLENBQUMsQ0FBQyxHQUFHO0VBQzVDOzs7Ozs7O0FBcUJILFNBQWdCLHdDQUFtRTtDQUNqRixNQUFNLFFBQVEseUJBQXlCO0FBQ3ZDLFFBQU8sT0FBTyxZQUNaLE9BQU8sUUFBUSxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssV0FBVyxDQUMxQyxLQUNBLEtBQUssS0FBSyxPQUFPLGFBQWEsTUFBTSxDQUNyQyxDQUFDLENBQ0g7Ozs7Y0FuSG9DO0NBcUcxQixlQUFlO0VBQUM7RUFBc0I7RUFBYztFQUFlO0VBQWUifQ==
@@ -0,0 +1,13 @@
1
+ import { type AbsolutePath } from "../utils/path-utils";
2
+ export declare const fileWrittenAt: Map<`/${string}`, number>;
3
+ /**
4
+ * 우리가 디스크에 write한 path를 등록합니다. write 직후 호출하세요.
5
+ * 디스크에서 mtime을 직접 읽어 정확한 값으로 등록합니다.
6
+ */
7
+ export declare function trackWritten(filePath: AbsolutePath): Promise<void>;
8
+ /**
9
+ * 주어진 path가 가장 최근 우리 write 이후로 외부에서 수정된 적 없는지 확인합니다.
10
+ * true면 "내가 쓴 그대로 남아있음", false면 "외부에서 수정됐거나 우리가 쓴 적 없음".
11
+ */
12
+ export declare function isLastChangedByMe(filePath: AbsolutePath): Promise<boolean>;
13
+ //# sourceMappingURL=file-tracking.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-tracking.d.ts","sourceRoot":"","sources":["../../src/syncer/file-tracking.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAExD,eAAO,MAAM,aAAa,2BAAkC,CAAC;AAE7D;;;GAGG;AACH,wBAAsB,YAAY,CAAC,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAGxE;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CAAC,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,CAOhF"}
@@ -0,0 +1,33 @@
1
+ import { __esmMin } from "../_virtual/rolldown_runtime.js";
2
+ import { stat } from "fs/promises";
3
+
4
+ //#region src/syncer/file-tracking.ts
5
+ /**
6
+ * 우리가 디스크에 write한 path를 등록합니다. write 직후 호출하세요.
7
+ * 디스크에서 mtime을 직접 읽어 정확한 값으로 등록합니다.
8
+ */
9
+ async function trackWritten(filePath) {
10
+ const fileStat = await stat(filePath);
11
+ fileWrittenAt.set(filePath, fileStat.mtimeMs);
12
+ }
13
+ /**
14
+ * 주어진 path가 가장 최근 우리 write 이후로 외부에서 수정된 적 없는지 확인합니다.
15
+ * true면 "내가 쓴 그대로 남아있음", false면 "외부에서 수정됐거나 우리가 쓴 적 없음".
16
+ */
17
+ async function isLastChangedByMe(filePath) {
18
+ const registered = fileWrittenAt.get(filePath);
19
+ if (registered === undefined) {
20
+ return false;
21
+ }
22
+ const fileStat = await stat(filePath);
23
+ return fileStat.mtimeMs <= registered;
24
+ }
25
+ var fileWrittenAt;
26
+ var init_file_tracking = __esmMin((() => {
27
+ fileWrittenAt = new Map();
28
+ }));
29
+
30
+ //#endregion
31
+ init_file_tracking();
32
+ export { fileWrittenAt, init_file_tracking, isLastChangedByMe, trackWritten };
33
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS10cmFja2luZy5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi9zcmMvc3luY2VyL2ZpbGUtdHJhY2tpbmcudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgc3RhdCB9IGZyb20gXCJmcy9wcm9taXNlc1wiO1xuXG5pbXBvcnQgeyB0eXBlIEFic29sdXRlUGF0aCB9IGZyb20gXCIuLi91dGlscy9wYXRoLXV0aWxzXCI7XG5cbmV4cG9ydCBjb25zdCBmaWxlV3JpdHRlbkF0ID0gbmV3IE1hcDxBYnNvbHV0ZVBhdGgsIG51bWJlcj4oKTtcblxuLyoqXG4gKiDsmrDrpqzqsIAg65SU7Iqk7YGs7JeQIHdyaXRl7ZWcIHBhdGjrpbwg65Ox66Gd7ZWp64uI64ukLiB3cml0ZSDsp4Htm4Qg7Zi47Lac7ZWY7IS47JqULlxuICog65SU7Iqk7YGs7JeQ7IScIG10aW1l7J2EIOyngeygkSDsnb3slrQg7KCV7ZmV7ZWcIOqwkuycvOuhnCDrk7HroZ3tlanri4jri6QuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0cmFja1dyaXR0ZW4oZmlsZVBhdGg6IEFic29sdXRlUGF0aCk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBmaWxlU3RhdCA9IGF3YWl0IHN0YXQoZmlsZVBhdGgpO1xuICBmaWxlV3JpdHRlbkF0LnNldChmaWxlUGF0aCwgZmlsZVN0YXQubXRpbWVNcyk7XG59XG5cbi8qKlxuICog7KO87Ja07KeEIHBhdGjqsIAg6rCA7J6lIOy1nOq3vCDsmrDrpqwgd3JpdGUg7J207ZuE66GcIOyZuOu2gOyXkOyEnCDsiJjsoJXrkJwg7KCBIOyXhuuKlOyngCDtmZXsnbjtlanri4jri6QuXG4gKiB0cnVl66m0IFwi64K06rCAIOyTtCDqt7jrjIDroZwg64Ko7JWE7J6I7J2MXCIsIGZhbHNl66m0IFwi7Jm467aA7JeQ7IScIOyImOygleuQkOqxsOuCmCDsmrDrpqzqsIAg7JO0IOyggSDsl4bsnYxcIi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGlzTGFzdENoYW5nZWRCeU1lKGZpbGVQYXRoOiBBYnNvbHV0ZVBhdGgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgY29uc3QgcmVnaXN0ZXJlZCA9IGZpbGVXcml0dGVuQXQuZ2V0KGZpbGVQYXRoKTtcbiAgaWYgKHJlZ2lzdGVyZWQgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBjb25zdCBmaWxlU3RhdCA9IGF3YWl0IHN0YXQoZmlsZVBhdGgpO1xuICByZXR1cm4gZmlsZVN0YXQubXRpbWVNcyA8PSByZWdpc3RlcmVkO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQVVBLGVBQXNCLGFBQWEsVUFBdUM7Q0FDeEUsTUFBTSxXQUFXLE1BQU0sS0FBSyxTQUFTO0FBQ3JDLGVBQWMsSUFBSSxVQUFVLFNBQVMsUUFBUTs7Ozs7O0FBTy9DLGVBQXNCLGtCQUFrQixVQUEwQztDQUNoRixNQUFNLGFBQWEsY0FBYyxJQUFJLFNBQVM7QUFDOUMsS0FBSSxlQUFlLFdBQVc7QUFDNUIsU0FBTzs7Q0FFVCxNQUFNLFdBQVcsTUFBTSxLQUFLLFNBQVM7QUFDckMsUUFBTyxTQUFTLFdBQVc7Ozs7Q0FyQmhCLGdCQUFnQixJQUFJLEtBQTJCIn0=
@@ -1,5 +1,5 @@
1
1
  import { init_api_parser, readApisFromFile } from "./api-parser.js";
2
- import { checksumPatternGroup, getChecksumPatternGroupInAbsolutePath, init_file_patterns } from "./file-patterns.js";
2
+ import { GLOB_EXCLUDE, getChecksumPatternGroup, getChecksumPatternGroupInAbsolutePath, init_file_patterns } from "./file-patterns.js";
3
3
  import { findChangedFilesUsingChecksums, init_checksum, renewChecksums } from "./checksum.js";
4
4
  import { generateTemplate, init_code_generator, renderTemplate } from "./code-generator.js";
5
5
  import { createEntity, delEntity, init_entity_operations } from "./entity-operations.js";
@@ -16,5 +16,5 @@ init_module_loader();
16
16
  init_syncer();
17
17
 
18
18
  //#endregion
19
- export { Syncer, checksumPatternGroup, createEntity, delEntity, findChangedFilesUsingChecksums, generateTemplate, getChecksumPatternGroupInAbsolutePath, loadApis, loadModels, loadTypes, loadWorkflows, readApisFromFile, renderTemplate, renewChecksums };
19
+ export { GLOB_EXCLUDE, Syncer, createEntity, delEntity, findChangedFilesUsingChecksums, generateTemplate, getChecksumPatternGroup, getChecksumPatternGroupInAbsolutePath, loadApis, loadModels, loadTypes, loadWorkflows, readApisFromFile, renderTemplate, renewChecksums };
20
20
  //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N5bmNlci9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwiLi9hcGktcGFyc2VyXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jaGVja3N1bVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29kZS1nZW5lcmF0b3JcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2VudGl0eS1vcGVyYXRpb25zXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9maWxlLXBhdHRlcm5zXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9tb2R1bGUtbG9hZGVyXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9zeW5jZXJcIjtcbiJdLCJtYXBwaW5ncyI6IiJ9
@@ -1,18 +1,9 @@
1
1
  import { z } from "zod";
2
2
  import { type BaseFrameClass } from "../api/base-frame";
3
- import { type ApiDecoratorOptions } from "../api/decorators";
3
+ import { type ExtendedApi } from "../api/decorators";
4
4
  import { type BaseModelClass } from "../database/base-model";
5
5
  import { type WorkflowMetadata } from "../tasks/decorator";
6
- import { type ApiParam, type ApiParamType } from "../types/types";
7
- export type LoadedApis = {
8
- typeParameters: ApiParamType.TypeParam[];
9
- parameters: ApiParam[];
10
- returnType: ApiParamType;
11
- modelName: string;
12
- methodName: string;
13
- path: string;
14
- options: ApiDecoratorOptions;
15
- }[];
6
+ export type LoadedApis = ExtendedApi[];
16
7
  export type LoadedTypes = {
17
8
  [typeName: string]: z.ZodType;
18
9
  };
@@ -1 +1 @@
1
- {"version":3,"file":"module-loader.d.ts","sourceRoot":"","sources":["../../src/syncer/module-loader.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAE7D,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAOlE,MAAM,MAAM,UAAU,GAAG;IACvB,cAAc,EAAE,YAAY,CAAC,SAAS,EAAE,CAAC;IACzC,UAAU,EAAE,QAAQ,EAAE,CAAC;IACvB,UAAU,EAAE,YAAY,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,mBAAmB,CAAC;CAC9B,EAAE,CAAC;AAEJ,MAAM,MAAM,WAAW,GAAG;IAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,CAAC,CAAC,OAAO,CAAA;CAAE,CAAC;AAE5D,MAAM,MAAM,YAAY,GAAG;IACzB,CAAC,SAAS,EAAE,MAAM,GAAG,cAAc,GAAG,cAAc,CAAC;CACtD,CAAC;AAEF;;;;GAIG;AACH,wBAAsB,QAAQ,IAAI,OAAO,CAAC,UAAU,CAAC,CA+BpD;AAED;;GAEG;AACH,wBAAsB,UAAU,IAAI,OAAO,CAAC,YAAY,CAAC,CAmBxD;AAED;;GAEG;AACH,wBAAsB,SAAS,IAAI,OAAO,CAAC,WAAW,CAAC,CAkBtD;AAED;;GAEG;AACH,wBAAsB,aAAa,6CA6BlC"}
1
+ {"version":3,"file":"module-loader.d.ts","sourceRoot":"","sources":["../../src/syncer/module-loader.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAO3D,MAAM,MAAM,UAAU,GAAG,WAAW,EAAE,CAAC;AAEvC,MAAM,MAAM,WAAW,GAAG;IAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,CAAC,CAAC,OAAO,CAAA;CAAE,CAAC;AAE5D,MAAM,MAAM,YAAY,GAAG;IACzB,CAAC,SAAS,EAAE,MAAM,GAAG,cAAc,GAAG,cAAc,CAAC;CACtD,CAAC;AAEF;;;;GAIG;AACH,wBAAsB,QAAQ,IAAI,OAAO,CAAC,UAAU,CAAC,CA+BpD;AAED;;GAEG;AACH,wBAAsB,UAAU,IAAI,OAAO,CAAC,YAAY,CAAC,CAmBxD;AAED;;GAEG;AACH,wBAAsB,SAAS,IAAI,OAAO,CAAC,WAAW,CAAC,CAoBtD;AAED;;GAEG;AACH,wBAAsB,aAAa,6CA6BlC"}
@@ -1,6 +1,6 @@
1
1
  import { __esmMin } from "../_virtual/rolldown_runtime.js";
2
- import { Sonamu, init_sonamu } from "../api/sonamu.js";
3
2
  import { globAsync, init_async_utils } from "../utils/async-utils.js";
3
+ import { Sonamu, init_sonamu } from "../api/sonamu.js";
4
4
  import { importMembers, init_esm_utils } from "../utils/esm-utils.js";
5
5
  import { init_path_utils, runtimePath } from "../utils/path-utils.js";
6
6
  import { init_api_parser, readApisFromFile } from "./api-parser.js";
@@ -50,7 +50,7 @@ async function loadModels() {
50
50
  */
51
51
  async function loadTypes() {
52
52
  const typePathsPatterns = [path.join(Sonamu.apiRootPath, runtimePath("src/application/**/*.types.ts")), path.join(Sonamu.apiRootPath, runtimePath("src/application/**/*.generated.ts"))];
53
- const typePaths = (await Promise.all(typePathsPatterns.map(globAsync))).flat();
53
+ const typePaths = (await Promise.all(typePathsPatterns.map((pattern) => globAsync(pattern)))).flat();
54
54
  const types = {};
55
55
  for (const filePath of typePaths) {
56
56
  const importedMembers = await importMembers(filePath);
@@ -90,4 +90,4 @@ var init_module_loader = __esmMin((() => {
90
90
  //#endregion
91
91
  init_module_loader();
92
92
  export { init_module_loader, loadApis, loadModels, loadTypes, loadWorkflows };
93
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kdWxlLWxvYWRlci5qcyIsIm5hbWVzIjpbImFwaXM6IExvYWRlZEFwaXMiLCJtb2RlbHM6IExvYWRlZE1vZGVscyIsInR5cGVzOiBMb2FkZWRUeXBlcyIsInoiLCJ3b3JrZmxvd3M6IE1hcDxzdHJpbmcsIFdvcmtmbG93TWV0YWRhdGFbXT4iXSwic291cmNlcyI6WyIuLi8uLi9zcmMvc3luY2VyL21vZHVsZS1sb2FkZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcblxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcblxuaW1wb3J0IHsgdHlwZSBCYXNlRnJhbWVDbGFzcyB9IGZyb20gXCIuLi9hcGkvYmFzZS1mcmFtZVwiO1xuaW1wb3J0IHsgdHlwZSBBcGlEZWNvcmF0b3JPcHRpb25zIH0gZnJvbSBcIi4uL2FwaS9kZWNvcmF0b3JzXCI7XG5pbXBvcnQgeyBTb25hbXUgfSBmcm9tIFwiLi4vYXBpL3NvbmFtdVwiO1xuaW1wb3J0IHsgdHlwZSBCYXNlTW9kZWxDbGFzcyB9IGZyb20gXCIuLi9kYXRhYmFzZS9iYXNlLW1vZGVsXCI7XG5pbXBvcnQgeyB0eXBlIFdvcmtmbG93TWV0YWRhdGEgfSBmcm9tIFwiLi4vdGFza3MvZGVjb3JhdG9yXCI7XG5pbXBvcnQgeyB0eXBlIEFwaVBhcmFtLCB0eXBlIEFwaVBhcmFtVHlwZSB9IGZyb20gXCIuLi90eXBlcy90eXBlc1wiO1xuaW1wb3J0IHsgZ2xvYkFzeW5jIH0gZnJvbSBcIi4uL3V0aWxzL2FzeW5jLXV0aWxzXCI7XG5pbXBvcnQgeyBpbXBvcnRNZW1iZXJzIH0gZnJvbSBcIi4uL3V0aWxzL2VzbS11dGlsc1wiO1xuaW1wb3J0IHsgcnVudGltZVBhdGggfSBmcm9tIFwiLi4vdXRpbHMvcGF0aC11dGlsc1wiO1xuaW1wb3J0IHsgdHlwZSBBYnNvbHV0ZVBhdGggfSBmcm9tIFwiLi4vdXRpbHMvcGF0aC11dGlsc1wiO1xuaW1wb3J0IHsgcmVhZEFwaXNGcm9tRmlsZSB9IGZyb20gXCIuL2FwaS1wYXJzZXJcIjtcblxuZXhwb3J0IHR5cGUgTG9hZGVkQXBpcyA9IHtcbiAgdHlwZVBhcmFtZXRlcnM6IEFwaVBhcmFtVHlwZS5UeXBlUGFyYW1bXTtcbiAgcGFyYW1ldGVyczogQXBpUGFyYW1bXTtcbiAgcmV0dXJuVHlwZTogQXBpUGFyYW1UeXBlO1xuICBtb2RlbE5hbWU6IHN0cmluZztcbiAgbWV0aG9kTmFtZTogc3RyaW5nO1xuICBwYXRoOiBzdHJpbmc7XG4gIG9wdGlvbnM6IEFwaURlY29yYXRvck9wdGlvbnM7XG59W107XG5cbmV4cG9ydCB0eXBlIExvYWRlZFR5cGVzID0geyBbdHlwZU5hbWU6IHN0cmluZ106IHouWm9kVHlwZSB9O1xuXG5leHBvcnQgdHlwZSBMb2FkZWRNb2RlbHMgPSB7XG4gIFttb2RlbE5hbWU6IHN0cmluZ106IEJhc2VNb2RlbENsYXNzIHwgQmFzZUZyYW1lQ2xhc3M7XG59O1xuXG4vKipcbiAqICoubW9kZWwudHPsmYAgKi5mcmFtZS50cyDtjIzsnbzrk6Tsl5DshJwgQVBJIOuplOyGjOuTnOulvCDtjIzsi7HtlZjsl6wg66Gc65Oc7ZWp64uI64ukLlxuICogcmVnaXN0ZXJlZEFwaXPsl5AgQVBJ6rCAIOuTseuhneuQmOyWtCDsnojslrTslbwg7ZWY6riwIOuVjOusuOyXkCwgKi5tb2RlbC50cyDtjIzsnbzrk6TsnYQg66i87KCAIGltcG9ydO2VtOyVvCDtlanri4jri6QuXG4gKiDrlLDrnbzshJwgbG9hZE1vZGVscygp66W8IOuovOyggCDtmLjstpztlbTslbwg7ZWp64uI64ukLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9hZEFwaXMoKTogUHJvbWlzZTxMb2FkZWRBcGlzPiB7XG4gIC8vIOyWmOuKlCDtirnsnbTtlZjqsozrj4Qg7ZmY6rK97JeQIOuUsOudvCAudHPrgpggLmpz66W8IGltcG9ydO2VmOuKlCDqsr3smrDqsIAg7JWE64uI6rOgLFxuICAvLyDtg4DsnoXsnbQg7IK07JWE7J6I64qUIC50cyDshozsiqQg7L2U65Oc66eM7J2EIOydveyWtOyVvCDtlanri4jri6QuXG4gIC8vIOydtOqyg+ydgCBkZXbshJzrsoQoaG90IHJlbG9hZCnqsIAg7JWE64uMIHByb2R1Y3Rpb24g7ZmY6rK97JeQ7ISc64+EIOuPmeydvO2VqeuLiOuLpC5cbiAgLy8g66qo642465Ok7J2YIC50cyDtjIzsnbzsnbQg7J6I7Ja07JW8IOydtOulvCDsnb3slrTshJwg65287Jqw7Yq466W8IOuTseuhne2VoCDsiJgg7J6I7Ja07JqUIVxuICBjb25zdCBtb2RlbFBhdGhzUGF0dGVybiA9IHBhdGguam9pbihcbiAgICBTb25hbXUuYXBpUm9vdFBhdGgsXG4gICAgXCJzcmMvYXBwbGljYXRpb24vKiovKi57bW9kZWwsZnJhbWV9LnRzXCIsIC8vICEhIHJ1bnRpbWVQYXRoIOyViCDslIAg7KO87J2YICEhXG4gICk7XG4gIGNvbnN0IG1vZGVsUGF0aHMgPSAoYXdhaXQgZ2xvYkFzeW5jKG1vZGVsUGF0aHNQYXR0ZXJuKSkgYXMgQWJzb2x1dGVQYXRoW107XG5cbiAgY29uc3QgYXBpczogTG9hZGVkQXBpcyA9IFtdO1xuICBmb3IgKGNvbnN0IGZpbGVQYXRoIG9mIG1vZGVsUGF0aHMpIHtcbiAgICBjb25zdCBwYXJzZWRBcGlzID0gYXdhaXQgcmVhZEFwaXNGcm9tRmlsZShmaWxlUGF0aCk7XG4gICAgYXBpcy5wdXNoKC4uLnBhcnNlZEFwaXMpO1xuICB9XG4gIC8vIGNvbnNvbGUubG9nKFxuICAvLyAgIGNoYWxrLmdyYXkoYFtMb2FkaW5nXSBMb2FkZWQgQVBJcyBmcm9tIFwiKi5tb2RlbC50c1wiIGZpbGVzOiAke2NvdW50fSBmaWxlcy5gKVxuICAvLyApO1xuXG4gIGZvciAoY29uc3QgYXBpIG9mIGFwaXMpIHtcbiAgICBpZiAoYXBpLnBhdGggPT09IFwiXCIpIHtcbiAgICAgIC8vIGFwaeydmCDqsr3roZwocGF0aCnqsIAgXCLthYUg67mE7Ja07J6I7J2MXCLsnbgg7IOB7YOc7J6F64uI64ukLlxuICAgICAgLy8g7J2064qUIEBhcGnsmYAg7ZWo6ruYIOyCrOyaqe2VtOyVvCDtlZjripQg642w7L2U66CI7J207YSw6rCAIEBhcGkg7JeG7J20IOu2meydgCDsg4HtmansnoXri4jri6QuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBBUEkgJHthcGkubW9kZWxOYW1lfS4ke2FwaS5tZXRob2ROYW1lfSBoYXMgbm8gcGF0aC4gUGxlYXNlIGF0dGFjaCBAYXBpIGRlY29yYXRvciB0byB0aGUgbWV0aG9kLmAsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBhcGlzO1xufVxuXG4vKipcbiAqICoubW9kZWwudHPsmYAgKi5mcmFtZS50cyDtjIzsnbzrk6Tsl5DshJwgTW9kZWwvRnJhbWUg7YG0656Y7IqkIOyduOyKpO2EtOyKpOulvCDroZzrk5ztlanri4jri6QuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsb2FkTW9kZWxzKCk6IFByb21pc2U8TG9hZGVkTW9kZWxzPiB7XG4gIGNvbnN0IG1vZGVsUGF0aHNQYXR0ZXJuID0gcGF0aC5qb2luKFxuICAgIFNvbmFtdS5hcGlSb290UGF0aCxcbiAgICBydW50aW1lUGF0aChcInNyYy9hcHBsaWNhdGlvbi8qKi8qLnttb2RlbCxmcmFtZX0udHNcIiksXG4gICk7XG4gIGNvbnN0IG1vZGVsUGF0aHMgPSBhd2FpdCBnbG9iQXN5bmMobW9kZWxQYXRoc1BhdHRlcm4pO1xuXG4gIGNvbnN0IG1vZGVsczogTG9hZGVkTW9kZWxzID0ge307XG4gIGZvciAoY29uc3QgZmlsZVBhdGggb2YgbW9kZWxQYXRocykge1xuICAgIGNvbnN0IGltcG9ydGVkTWVtYmVycyA9IGF3YWl0IGltcG9ydE1lbWJlcnM8QmFzZU1vZGVsQ2xhc3MgfCBCYXNlRnJhbWVDbGFzcz4oZmlsZVBhdGgpO1xuXG4gICAgZm9yIChjb25zdCB7IG5hbWUsIHZhbHVlIH0gb2YgaW1wb3J0ZWRNZW1iZXJzKSB7XG4gICAgICBpZiAobmFtZS5lbmRzV2l0aChcIk1vZGVsXCIpIHx8IG5hbWUuZW5kc1dpdGgoXCJGcmFtZVwiKSkge1xuICAgICAgICBtb2RlbHNbbmFtZV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbW9kZWxzO1xufVxuXG4vKipcbiAqICoudHlwZXMudHPsmYAgKi5nZW5lcmF0ZWQudHMg7YyM7J2865Ok7JeQ7IScIFpvZCDsiqTtgqTrp4jrpbwg66Gc65Oc7ZWp64uI64ukLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9hZFR5cGVzKCk6IFByb21pc2U8TG9hZGVkVHlwZXM+IHtcbiAgY29uc3QgdHlwZVBhdGhzUGF0dGVybnMgPSBbXG4gICAgcGF0aC5qb2luKFNvbmFtdS5hcGlSb290UGF0aCwgcnVudGltZVBhdGgoXCJzcmMvYXBwbGljYXRpb24vKiovKi50eXBlcy50c1wiKSksXG4gICAgcGF0aC5qb2luKFNvbmFtdS5hcGlSb290UGF0aCwgcnVudGltZVBhdGgoXCJzcmMvYXBwbGljYXRpb24vKiovKi5nZW5lcmF0ZWQudHNcIikpLFxuICBdO1xuICBjb25zdCB0eXBlUGF0aHMgPSAoYXdhaXQgUHJvbWlzZS5hbGwodHlwZVBhdGhzUGF0dGVybnMubWFwKGdsb2JBc3luYykpKS5mbGF0KCk7XG5cbiAgY29uc3QgdHlwZXM6IExvYWRlZFR5cGVzID0ge307XG4gIGZvciAoY29uc3QgZmlsZVBhdGggb2YgdHlwZVBhdGhzKSB7XG4gICAgY29uc3QgaW1wb3J0ZWRNZW1iZXJzID0gYXdhaXQgaW1wb3J0TWVtYmVyczx6LlpvZFR5cGU+KGZpbGVQYXRoKTtcbiAgICBmb3IgKGNvbnN0IHsgbmFtZSwgdmFsdWUgfSBvZiBpbXBvcnRlZE1lbWJlcnMpIHtcbiAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIHouWm9kVHlwZSkge1xuICAgICAgICB0eXBlc1tuYW1lXSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0eXBlcztcbn1cblxuLyoqXG4gKiAqLndvcmtmbG93LnRzIO2MjOydvOuTpOyXkOyEnCBXb3JrZmxvdyDrqZTtg4DrjbDsnbTthLDrpbwg66Gc65Oc7ZWp64uI64ukLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9hZFdvcmtmbG93cygpIHtcbiAgY29uc3Qgd29ya2Zsb3dQYXRoc1BhdHRlcm4gPSBwYXRoLmpvaW4oXG4gICAgU29uYW11LmFwaVJvb3RQYXRoLFxuICAgIHJ1bnRpbWVQYXRoKFwic3JjL2FwcGxpY2F0aW9uLyoqLyoud29ya2Zsb3cudHNcIiksXG4gICk7XG4gIGNvbnN0IHdvcmtmbG93UGF0aHMgPSBhd2FpdCBnbG9iQXN5bmMod29ya2Zsb3dQYXRoc1BhdHRlcm4pO1xuICBjb25zdCB3b3JrZmxvd3M6IE1hcDxzdHJpbmcsIFdvcmtmbG93TWV0YWRhdGFbXT4gPSBuZXcgTWFwKCk7XG4gIGZvciAoY29uc3QgZmlsZVBhdGggb2Ygd29ya2Zsb3dQYXRocykge1xuICAgIGNvbnN0IGltcG9ydGVkTWVtYmVycyA9IGF3YWl0IGltcG9ydE1lbWJlcnMoZmlsZVBhdGgpO1xuICAgIHdvcmtmbG93cy5zZXQoXG4gICAgICBmaWxlUGF0aCxcbiAgICAgIGltcG9ydGVkTWVtYmVyc1xuICAgICAgICAuZmlsdGVyKCh7IHZhbHVlIH0pID0+IHtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgICAgICB2YWx1ZSAhPT0gbnVsbCAmJlxuICAgICAgICAgICAgXCJ0eXBlXCIgaW4gdmFsdWUgJiZcbiAgICAgICAgICAgIHZhbHVlLnR5cGUgPT09IFwid29ya2Zsb3dcIiAmJlxuICAgICAgICAgICAgXCJmblwiIGluIHZhbHVlICYmXG4gICAgICAgICAgICB0eXBlb2YgdmFsdWUuZm4gPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICAgICk7XG4gICAgICAgIH0pXG4gICAgICAgIC5tYXAoKHsgdmFsdWUgfSkgPT4ge1xuICAgICAgICAgIHJldHVybiB2YWx1ZSBhcyBXb3JrZmxvd01ldGFkYXRhO1xuICAgICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIHdvcmtmbG93cztcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBcUNBLGVBQXNCLFdBQWdDO0NBS3BELE1BQU0sb0JBQW9CLEtBQUssS0FDN0IsT0FBTyxhQUNQLHdDQUNEO0NBQ0QsTUFBTSxhQUFjLE1BQU0sVUFBVSxrQkFBa0I7Q0FFdEQsTUFBTUEsT0FBbUIsRUFBRTtBQUMzQixNQUFLLE1BQU0sWUFBWSxZQUFZO0VBQ2pDLE1BQU0sYUFBYSxNQUFNLGlCQUFpQixTQUFTO0FBQ25ELE9BQUssS0FBSyxHQUFHLFdBQVc7O0FBTTFCLE1BQUssTUFBTSxPQUFPLE1BQU07QUFDdEIsTUFBSSxJQUFJLFNBQVMsSUFBSTtBQUduQixTQUFNLElBQUksTUFDUixPQUFPLElBQUksVUFBVSxHQUFHLElBQUksV0FBVywyREFDeEM7OztBQUlMLFFBQU87Ozs7O0FBTVQsZUFBc0IsYUFBb0M7Q0FDeEQsTUFBTSxvQkFBb0IsS0FBSyxLQUM3QixPQUFPLGFBQ1AsWUFBWSx3Q0FBd0MsQ0FDckQ7Q0FDRCxNQUFNLGFBQWEsTUFBTSxVQUFVLGtCQUFrQjtDQUVyRCxNQUFNQyxTQUF1QixFQUFFO0FBQy9CLE1BQUssTUFBTSxZQUFZLFlBQVk7RUFDakMsTUFBTSxrQkFBa0IsTUFBTSxjQUErQyxTQUFTO0FBRXRGLE9BQUssTUFBTSxFQUFFLE1BQU0sV0FBVyxpQkFBaUI7QUFDN0MsT0FBSSxLQUFLLFNBQVMsUUFBUSxJQUFJLEtBQUssU0FBUyxRQUFRLEVBQUU7QUFDcEQsV0FBTyxRQUFROzs7O0FBS3JCLFFBQU87Ozs7O0FBTVQsZUFBc0IsWUFBa0M7Q0FDdEQsTUFBTSxvQkFBb0IsQ0FDeEIsS0FBSyxLQUFLLE9BQU8sYUFBYSxZQUFZLGdDQUFnQyxDQUFDLEVBQzNFLEtBQUssS0FBSyxPQUFPLGFBQWEsWUFBWSxvQ0FBb0MsQ0FBQyxDQUNoRjtDQUNELE1BQU0sYUFBYSxNQUFNLFFBQVEsSUFBSSxrQkFBa0IsSUFBSSxVQUFVLENBQUMsRUFBRSxNQUFNO0NBRTlFLE1BQU1DLFFBQXFCLEVBQUU7QUFDN0IsTUFBSyxNQUFNLFlBQVksV0FBVztFQUNoQyxNQUFNLGtCQUFrQixNQUFNLGNBQXlCLFNBQVM7QUFDaEUsT0FBSyxNQUFNLEVBQUUsTUFBTSxXQUFXLGlCQUFpQjtBQUM3QyxPQUFJLGlCQUFpQkMsSUFBRSxTQUFTO0FBQzlCLFVBQU0sUUFBUTs7OztBQUtwQixRQUFPOzs7OztBQU1ULGVBQXNCLGdCQUFnQjtDQUNwQyxNQUFNLHVCQUF1QixLQUFLLEtBQ2hDLE9BQU8sYUFDUCxZQUFZLG1DQUFtQyxDQUNoRDtDQUNELE1BQU0sZ0JBQWdCLE1BQU0sVUFBVSxxQkFBcUI7Q0FDM0QsTUFBTUMsWUFBNkMsSUFBSSxLQUFLO0FBQzVELE1BQUssTUFBTSxZQUFZLGVBQWU7RUFDcEMsTUFBTSxrQkFBa0IsTUFBTSxjQUFjLFNBQVM7QUFDckQsWUFBVSxJQUNSLFVBQ0EsZ0JBQ0csUUFBUSxFQUFFLFlBQVk7QUFDckIsVUFDRSxPQUFPLFVBQVUsWUFDakIsVUFBVSxRQUNWLFVBQVUsU0FDVixNQUFNLFNBQVMsY0FDZixRQUFRLFNBQ1IsT0FBTyxNQUFNLE9BQU87SUFFdEIsQ0FDRCxLQUFLLEVBQUUsWUFBWTtBQUNsQixVQUFPO0lBQ1AsQ0FDTDs7QUFHSCxRQUFPOzs7Y0E5SThCO21CQUlVO2lCQUNFO2tCQUNEO2tCQUVGIn0=
93
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kdWxlLWxvYWRlci5qcyIsIm5hbWVzIjpbImFwaXM6IExvYWRlZEFwaXMiLCJtb2RlbHM6IExvYWRlZE1vZGVscyIsInR5cGVzOiBMb2FkZWRUeXBlcyIsInoiLCJ3b3JrZmxvd3M6IE1hcDxzdHJpbmcsIFdvcmtmbG93TWV0YWRhdGFbXT4iXSwic291cmNlcyI6WyIuLi8uLi9zcmMvc3luY2VyL21vZHVsZS1sb2FkZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcblxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcblxuaW1wb3J0IHsgdHlwZSBCYXNlRnJhbWVDbGFzcyB9IGZyb20gXCIuLi9hcGkvYmFzZS1mcmFtZVwiO1xuaW1wb3J0IHsgdHlwZSBFeHRlbmRlZEFwaSB9IGZyb20gXCIuLi9hcGkvZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHsgU29uYW11IH0gZnJvbSBcIi4uL2FwaS9zb25hbXVcIjtcbmltcG9ydCB7IHR5cGUgQmFzZU1vZGVsQ2xhc3MgfSBmcm9tIFwiLi4vZGF0YWJhc2UvYmFzZS1tb2RlbFwiO1xuaW1wb3J0IHsgdHlwZSBXb3JrZmxvd01ldGFkYXRhIH0gZnJvbSBcIi4uL3Rhc2tzL2RlY29yYXRvclwiO1xuaW1wb3J0IHsgZ2xvYkFzeW5jIH0gZnJvbSBcIi4uL3V0aWxzL2FzeW5jLXV0aWxzXCI7XG5pbXBvcnQgeyBpbXBvcnRNZW1iZXJzIH0gZnJvbSBcIi4uL3V0aWxzL2VzbS11dGlsc1wiO1xuaW1wb3J0IHsgcnVudGltZVBhdGggfSBmcm9tIFwiLi4vdXRpbHMvcGF0aC11dGlsc1wiO1xuaW1wb3J0IHsgdHlwZSBBYnNvbHV0ZVBhdGggfSBmcm9tIFwiLi4vdXRpbHMvcGF0aC11dGlsc1wiO1xuaW1wb3J0IHsgcmVhZEFwaXNGcm9tRmlsZSB9IGZyb20gXCIuL2FwaS1wYXJzZXJcIjtcblxuZXhwb3J0IHR5cGUgTG9hZGVkQXBpcyA9IEV4dGVuZGVkQXBpW107XG5cbmV4cG9ydCB0eXBlIExvYWRlZFR5cGVzID0geyBbdHlwZU5hbWU6IHN0cmluZ106IHouWm9kVHlwZSB9O1xuXG5leHBvcnQgdHlwZSBMb2FkZWRNb2RlbHMgPSB7XG4gIFttb2RlbE5hbWU6IHN0cmluZ106IEJhc2VNb2RlbENsYXNzIHwgQmFzZUZyYW1lQ2xhc3M7XG59O1xuXG4vKipcbiAqICoubW9kZWwudHPsmYAgKi5mcmFtZS50cyDtjIzsnbzrk6Tsl5DshJwgQVBJIOuplOyGjOuTnOulvCDtjIzsi7HtlZjsl6wg66Gc65Oc7ZWp64uI64ukLlxuICogcmVnaXN0ZXJlZEFwaXPsl5AgQVBJ6rCAIOuTseuhneuQmOyWtCDsnojslrTslbwg7ZWY6riwIOuVjOusuOyXkCwgKi5tb2RlbC50cyDtjIzsnbzrk6TsnYQg66i87KCAIGltcG9ydO2VtOyVvCDtlanri4jri6QuXG4gKiDrlLDrnbzshJwgbG9hZE1vZGVscygp66W8IOuovOyggCDtmLjstpztlbTslbwg7ZWp64uI64ukLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9hZEFwaXMoKTogUHJvbWlzZTxMb2FkZWRBcGlzPiB7XG4gIC8vIOyWmOuKlCDtirnsnbTtlZjqsozrj4Qg7ZmY6rK97JeQIOuUsOudvCAudHPrgpggLmpz66W8IGltcG9ydO2VmOuKlCDqsr3smrDqsIAg7JWE64uI6rOgLFxuICAvLyDtg4DsnoXsnbQg7IK07JWE7J6I64qUIC50cyDshozsiqQg7L2U65Oc66eM7J2EIOydveyWtOyVvCDtlanri4jri6QuXG4gIC8vIOydtOqyg+ydgCBkZXbshJzrsoQoaG90IHJlbG9hZCnqsIAg7JWE64uMIHByb2R1Y3Rpb24g7ZmY6rK97JeQ7ISc64+EIOuPmeydvO2VqeuLiOuLpC5cbiAgLy8g66qo642465Ok7J2YIC50cyDtjIzsnbzsnbQg7J6I7Ja07JW8IOydtOulvCDsnb3slrTshJwg65287Jqw7Yq466W8IOuTseuhne2VoCDsiJgg7J6I7Ja07JqUIVxuICBjb25zdCBtb2RlbFBhdGhzUGF0dGVybiA9IHBhdGguam9pbihcbiAgICBTb25hbXUuYXBpUm9vdFBhdGgsXG4gICAgXCJzcmMvYXBwbGljYXRpb24vKiovKi57bW9kZWwsZnJhbWV9LnRzXCIsIC8vICEhIHJ1bnRpbWVQYXRoIOyViCDslIAg7KO87J2YICEhXG4gICk7XG4gIGNvbnN0IG1vZGVsUGF0aHMgPSAoYXdhaXQgZ2xvYkFzeW5jKG1vZGVsUGF0aHNQYXR0ZXJuKSkgYXMgQWJzb2x1dGVQYXRoW107XG5cbiAgY29uc3QgYXBpczogTG9hZGVkQXBpcyA9IFtdO1xuICBmb3IgKGNvbnN0IGZpbGVQYXRoIG9mIG1vZGVsUGF0aHMpIHtcbiAgICBjb25zdCBwYXJzZWRBcGlzID0gYXdhaXQgcmVhZEFwaXNGcm9tRmlsZShmaWxlUGF0aCk7XG4gICAgYXBpcy5wdXNoKC4uLnBhcnNlZEFwaXMpO1xuICB9XG4gIC8vIGNvbnNvbGUubG9nKFxuICAvLyAgIGNoYWxrLmdyYXkoYFtMb2FkaW5nXSBMb2FkZWQgQVBJcyBmcm9tIFwiKi5tb2RlbC50c1wiIGZpbGVzOiAke2NvdW50fSBmaWxlcy5gKVxuICAvLyApO1xuXG4gIGZvciAoY29uc3QgYXBpIG9mIGFwaXMpIHtcbiAgICBpZiAoYXBpLnBhdGggPT09IFwiXCIpIHtcbiAgICAgIC8vIGFwaeydmCDqsr3roZwocGF0aCnqsIAgXCLthYUg67mE7Ja07J6I7J2MXCLsnbgg7IOB7YOc7J6F64uI64ukLlxuICAgICAgLy8g7J2064qUIEBhcGnsmYAg7ZWo6ruYIOyCrOyaqe2VtOyVvCDtlZjripQg642w7L2U66CI7J207YSw6rCAIEBhcGkg7JeG7J20IOu2meydgCDsg4HtmansnoXri4jri6QuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBBUEkgJHthcGkubW9kZWxOYW1lfS4ke2FwaS5tZXRob2ROYW1lfSBoYXMgbm8gcGF0aC4gUGxlYXNlIGF0dGFjaCBAYXBpIGRlY29yYXRvciB0byB0aGUgbWV0aG9kLmAsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBhcGlzO1xufVxuXG4vKipcbiAqICoubW9kZWwudHPsmYAgKi5mcmFtZS50cyDtjIzsnbzrk6Tsl5DshJwgTW9kZWwvRnJhbWUg7YG0656Y7IqkIOyduOyKpO2EtOyKpOulvCDroZzrk5ztlanri4jri6QuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsb2FkTW9kZWxzKCk6IFByb21pc2U8TG9hZGVkTW9kZWxzPiB7XG4gIGNvbnN0IG1vZGVsUGF0aHNQYXR0ZXJuID0gcGF0aC5qb2luKFxuICAgIFNvbmFtdS5hcGlSb290UGF0aCxcbiAgICBydW50aW1lUGF0aChcInNyYy9hcHBsaWNhdGlvbi8qKi8qLnttb2RlbCxmcmFtZX0udHNcIiksXG4gICk7XG4gIGNvbnN0IG1vZGVsUGF0aHMgPSBhd2FpdCBnbG9iQXN5bmMobW9kZWxQYXRoc1BhdHRlcm4pO1xuXG4gIGNvbnN0IG1vZGVsczogTG9hZGVkTW9kZWxzID0ge307XG4gIGZvciAoY29uc3QgZmlsZVBhdGggb2YgbW9kZWxQYXRocykge1xuICAgIGNvbnN0IGltcG9ydGVkTWVtYmVycyA9IGF3YWl0IGltcG9ydE1lbWJlcnM8QmFzZU1vZGVsQ2xhc3MgfCBCYXNlRnJhbWVDbGFzcz4oZmlsZVBhdGgpO1xuXG4gICAgZm9yIChjb25zdCB7IG5hbWUsIHZhbHVlIH0gb2YgaW1wb3J0ZWRNZW1iZXJzKSB7XG4gICAgICBpZiAobmFtZS5lbmRzV2l0aChcIk1vZGVsXCIpIHx8IG5hbWUuZW5kc1dpdGgoXCJGcmFtZVwiKSkge1xuICAgICAgICBtb2RlbHNbbmFtZV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbW9kZWxzO1xufVxuXG4vKipcbiAqICoudHlwZXMudHPsmYAgKi5nZW5lcmF0ZWQudHMg7YyM7J2865Ok7JeQ7IScIFpvZCDsiqTtgqTrp4jrpbwg66Gc65Oc7ZWp64uI64ukLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9hZFR5cGVzKCk6IFByb21pc2U8TG9hZGVkVHlwZXM+IHtcbiAgY29uc3QgdHlwZVBhdGhzUGF0dGVybnMgPSBbXG4gICAgcGF0aC5qb2luKFNvbmFtdS5hcGlSb290UGF0aCwgcnVudGltZVBhdGgoXCJzcmMvYXBwbGljYXRpb24vKiovKi50eXBlcy50c1wiKSksXG4gICAgcGF0aC5qb2luKFNvbmFtdS5hcGlSb290UGF0aCwgcnVudGltZVBhdGgoXCJzcmMvYXBwbGljYXRpb24vKiovKi5nZW5lcmF0ZWQudHNcIikpLFxuICBdO1xuICBjb25zdCB0eXBlUGF0aHMgPSAoXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwodHlwZVBhdGhzUGF0dGVybnMubWFwKChwYXR0ZXJuKSA9PiBnbG9iQXN5bmMocGF0dGVybikpKVxuICApLmZsYXQoKTtcblxuICBjb25zdCB0eXBlczogTG9hZGVkVHlwZXMgPSB7fTtcbiAgZm9yIChjb25zdCBmaWxlUGF0aCBvZiB0eXBlUGF0aHMpIHtcbiAgICBjb25zdCBpbXBvcnRlZE1lbWJlcnMgPSBhd2FpdCBpbXBvcnRNZW1iZXJzPHouWm9kVHlwZT4oZmlsZVBhdGgpO1xuICAgIGZvciAoY29uc3QgeyBuYW1lLCB2YWx1ZSB9IG9mIGltcG9ydGVkTWVtYmVycykge1xuICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2Ygei5ab2RUeXBlKSB7XG4gICAgICAgIHR5cGVzW25hbWVdID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHR5cGVzO1xufVxuXG4vKipcbiAqICoud29ya2Zsb3cudHMg7YyM7J2865Ok7JeQ7IScIFdvcmtmbG93IOuplO2DgOuNsOydtO2EsOulvCDroZzrk5ztlanri4jri6QuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsb2FkV29ya2Zsb3dzKCkge1xuICBjb25zdCB3b3JrZmxvd1BhdGhzUGF0dGVybiA9IHBhdGguam9pbihcbiAgICBTb25hbXUuYXBpUm9vdFBhdGgsXG4gICAgcnVudGltZVBhdGgoXCJzcmMvYXBwbGljYXRpb24vKiovKi53b3JrZmxvdy50c1wiKSxcbiAgKTtcbiAgY29uc3Qgd29ya2Zsb3dQYXRocyA9IGF3YWl0IGdsb2JBc3luYyh3b3JrZmxvd1BhdGhzUGF0dGVybik7XG4gIGNvbnN0IHdvcmtmbG93czogTWFwPHN0cmluZywgV29ya2Zsb3dNZXRhZGF0YVtdPiA9IG5ldyBNYXAoKTtcbiAgZm9yIChjb25zdCBmaWxlUGF0aCBvZiB3b3JrZmxvd1BhdGhzKSB7XG4gICAgY29uc3QgaW1wb3J0ZWRNZW1iZXJzID0gYXdhaXQgaW1wb3J0TWVtYmVycyhmaWxlUGF0aCk7XG4gICAgd29ya2Zsb3dzLnNldChcbiAgICAgIGZpbGVQYXRoLFxuICAgICAgaW1wb3J0ZWRNZW1iZXJzXG4gICAgICAgIC5maWx0ZXIoKHsgdmFsdWUgfSkgPT4ge1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgICAgIHZhbHVlICE9PSBudWxsICYmXG4gICAgICAgICAgICBcInR5cGVcIiBpbiB2YWx1ZSAmJlxuICAgICAgICAgICAgdmFsdWUudHlwZSA9PT0gXCJ3b3JrZmxvd1wiICYmXG4gICAgICAgICAgICBcImZuXCIgaW4gdmFsdWUgJiZcbiAgICAgICAgICAgIHR5cGVvZiB2YWx1ZS5mbiA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICAgKTtcbiAgICAgICAgfSlcbiAgICAgICAgLm1hcCgoeyB2YWx1ZSB9KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlIGFzIFdvcmtmbG93TWV0YWRhdGE7XG4gICAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICByZXR1cm4gd29ya2Zsb3dzO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUE0QkEsZUFBc0IsV0FBZ0M7Q0FLcEQsTUFBTSxvQkFBb0IsS0FBSyxLQUM3QixPQUFPLGFBQ1Asd0NBQ0Q7Q0FDRCxNQUFNLGFBQWMsTUFBTSxVQUFVLGtCQUFrQjtDQUV0RCxNQUFNQSxPQUFtQixFQUFFO0FBQzNCLE1BQUssTUFBTSxZQUFZLFlBQVk7RUFDakMsTUFBTSxhQUFhLE1BQU0saUJBQWlCLFNBQVM7QUFDbkQsT0FBSyxLQUFLLEdBQUcsV0FBVzs7QUFNMUIsTUFBSyxNQUFNLE9BQU8sTUFBTTtBQUN0QixNQUFJLElBQUksU0FBUyxJQUFJO0FBR25CLFNBQU0sSUFBSSxNQUNSLE9BQU8sSUFBSSxVQUFVLEdBQUcsSUFBSSxXQUFXLDJEQUN4Qzs7O0FBSUwsUUFBTzs7Ozs7QUFNVCxlQUFzQixhQUFvQztDQUN4RCxNQUFNLG9CQUFvQixLQUFLLEtBQzdCLE9BQU8sYUFDUCxZQUFZLHdDQUF3QyxDQUNyRDtDQUNELE1BQU0sYUFBYSxNQUFNLFVBQVUsa0JBQWtCO0NBRXJELE1BQU1DLFNBQXVCLEVBQUU7QUFDL0IsTUFBSyxNQUFNLFlBQVksWUFBWTtFQUNqQyxNQUFNLGtCQUFrQixNQUFNLGNBQStDLFNBQVM7QUFFdEYsT0FBSyxNQUFNLEVBQUUsTUFBTSxXQUFXLGlCQUFpQjtBQUM3QyxPQUFJLEtBQUssU0FBUyxRQUFRLElBQUksS0FBSyxTQUFTLFFBQVEsRUFBRTtBQUNwRCxXQUFPLFFBQVE7Ozs7QUFLckIsUUFBTzs7Ozs7QUFNVCxlQUFzQixZQUFrQztDQUN0RCxNQUFNLG9CQUFvQixDQUN4QixLQUFLLEtBQUssT0FBTyxhQUFhLFlBQVksZ0NBQWdDLENBQUMsRUFDM0UsS0FBSyxLQUFLLE9BQU8sYUFBYSxZQUFZLG9DQUFvQyxDQUFDLENBQ2hGO0NBQ0QsTUFBTSxhQUNKLE1BQU0sUUFBUSxJQUFJLGtCQUFrQixLQUFLLFlBQVksVUFBVSxRQUFRLENBQUMsQ0FBQyxFQUN6RSxNQUFNO0NBRVIsTUFBTUMsUUFBcUIsRUFBRTtBQUM3QixNQUFLLE1BQU0sWUFBWSxXQUFXO0VBQ2hDLE1BQU0sa0JBQWtCLE1BQU0sY0FBeUIsU0FBUztBQUNoRSxPQUFLLE1BQU0sRUFBRSxNQUFNLFdBQVcsaUJBQWlCO0FBQzdDLE9BQUksaUJBQWlCQyxJQUFFLFNBQVM7QUFDOUIsVUFBTSxRQUFROzs7O0FBS3BCLFFBQU87Ozs7O0FBTVQsZUFBc0IsZ0JBQWdCO0NBQ3BDLE1BQU0sdUJBQXVCLEtBQUssS0FDaEMsT0FBTyxhQUNQLFlBQVksbUNBQW1DLENBQ2hEO0NBQ0QsTUFBTSxnQkFBZ0IsTUFBTSxVQUFVLHFCQUFxQjtDQUMzRCxNQUFNQyxZQUE2QyxJQUFJLEtBQUs7QUFDNUQsTUFBSyxNQUFNLFlBQVksZUFBZTtFQUNwQyxNQUFNLGtCQUFrQixNQUFNLGNBQWMsU0FBUztBQUNyRCxZQUFVLElBQ1IsVUFDQSxnQkFDRyxRQUFRLEVBQUUsWUFBWTtBQUNyQixVQUNFLE9BQU8sVUFBVSxZQUNqQixVQUFVLFFBQ1YsVUFBVSxTQUNWLE1BQU0sU0FBUyxjQUNmLFFBQVEsU0FDUixPQUFPLE1BQU0sT0FBTztJQUV0QixDQUNELEtBQUssRUFBRSxZQUFZO0FBQ2xCLFVBQU87SUFDUCxDQUNMOztBQUdILFFBQU87OztjQXZJOEI7bUJBR1U7aUJBQ0U7a0JBQ0Q7a0JBRUYifQ==
@@ -8,7 +8,12 @@ export declare function actionSyncConfig(): Promise<void>;
8
8
  */
9
9
  export declare function actionGenerateServices(paramsArray: {
10
10
  namesRecord: EntityNamesRecord;
11
- }[]): Promise<string[]>;
11
+ }[]): Promise<AbsolutePath[]>;
12
+ /**
13
+ * Entity에 딸린 초기 types.ts를 만들어줍니다.
14
+ * @param entityId
15
+ */
16
+ export declare function actionGenerateInitialTypes(entityId: string): Promise<AbsolutePath[]>;
12
17
  /**
13
18
  * sonamu.generated.ts와 sonamu.generated.sso.ts를 생성합니다.
14
19
  * @returns 생성된 파일 경로 배열.
@@ -20,14 +25,42 @@ export declare function actionGenerateSchemas(): Promise<AbsolutePath[]>;
20
25
  */
21
26
  export declare function actionGenerateHttps(): Promise<AbsolutePath>;
22
27
  /**
23
- * queries.generated.ts 및 entry-server.generated.tsx 재생성합니다.
28
+ * queries.generated.ts 재생성합니다.
24
29
  * @returns 생성된 파일 경로 배열.
25
30
  */
26
- export declare function actionGenerateSsr(): Promise<AbsolutePath[]>;
31
+ export declare function actionGenerateSsrQueries(): Promise<AbsolutePath[]>;
32
+ /**
33
+ * entry-server.generated.tsx를 생성합니다.
34
+ * 다른 액션들과 달리, 이미 파일이 있으면 그냥 놔둡니다. 그래서 함수 이름 끝에 써놨어요 ㅎ
35
+ * 입력 의존 없는 정적 코드라 매번 overwrite는 mtime만 갱신하는 의미 없는 동작.
36
+ * 템플릿 자체가 변경된 경우(Sonamu 업그레이드)에는 사용자가 파일을 삭제한 뒤 sync로 재생성.
37
+ * @returns 생성된 파일 경로 배열 (이미 있으면 빈 배열).
38
+ */
39
+ export declare function actionGenerateSsrEntryServerIfNotExists(): Promise<AbsolutePath[]>;
27
40
  /**
28
- * *.types.ts, *.functions.ts, *.generated.ts를 타겟 디렉토리에 복사합니다.
29
- * @param tsPaths
30
- * @returns 복사된 파일 경로 배열.
41
+ * 주어진 .ts 파일들(api에 있다고 가정)을 모든 타겟 디렉토리의 services에 갖다 둡니다.
42
+ * 이때 내부의 sonamu import는 sonamu.shared.ts import로 치환되고,
43
+ * 경로의 /application/은 /services/로 치환됩니다.
44
+ *
45
+ * @param tsPaths 복사할 파일들의 절대 경로
46
+ * @returns 각 타겟에 복사된 파일들의 절대 경로 배열 (flat).
31
47
  */
32
48
  export declare function actionSyncFilesToTargets(tsPaths: AbsolutePath[]): Promise<string[]>;
49
+ /**
50
+ * shared 템플릿으로부터 sonamu.shared.ts 파일을 만들어서 모든 타겟 디렉토리에 갖다 둡니다.
51
+ * 파일을 만드는 과정에서 여러 치환 가공이 일어납니다.
52
+ *
53
+ * 다른 액션들과 달리, 이미 파일이 있으면 그냥 놔둡니다. 그래서 함수 이름 끝에 써놨어요 ㅎ
54
+ */
55
+ export declare function actionCopySharedToTargetsIfNotExists(): Promise<void>;
56
+ /**
57
+ * Sonamu Dictionary(SD)를 모든 타겟(api + web/app 등)에 동기화합니다.
58
+ *
59
+ * 각 타겟에 대해:
60
+ * - target이 api가 아니면 사용자 작성 locale 파일(ko.ts/en.ts/...)을 api → target으로 복사
61
+ * - sd 템플릿을 렌더링해서 sd.generated.ts 생성 (overwrite)
62
+ *
63
+ * 한 타겟에서 실패해도 다른 타겟은 계속 진행합니다.
64
+ */
65
+ export declare function actionSyncSonamuDictionary(): Promise<void>;
33
66
  //# sourceMappingURL=syncer-actions.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"syncer-actions.d.ts","sourceRoot":"","sources":["../../src/syncer/syncer-actions.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAIlE,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAIxD,wBAAsB,gBAAgB,kBAWrC;AAED;;;;GAIG;AACH,wBAAsB,sBAAsB,CAC1C,WAAW,EAAE;IACX,WAAW,EAAE,iBAAiB,CAAC;CAChC,EAAE,GACF,OAAO,CAAC,MAAM,EAAE,CAAC,CAanB;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC,CAOrE;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,YAAY,CAAC,CAQjE;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC,CAOjE;AAED;;;;GAIG;AACH,wBAAsB,wBAAwB,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAiCzF"}
1
+ {"version":3,"file":"syncer-actions.d.ts","sourceRoot":"","sources":["../../src/syncer/syncer-actions.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAMlE,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAKxD,wBAAsB,gBAAgB,kBAWrC;AAED;;;;GAIG;AACH,wBAAsB,sBAAsB,CAC1C,WAAW,EAAE;IACX,WAAW,EAAE,iBAAiB,CAAC;CAChC,EAAE,GACF,OAAO,CAAC,YAAY,EAAE,CAAC,CAazB;AAED;;;GAGG;AACH,wBAAsB,0BAA0B,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAE1F;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC,CAOrE;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,YAAY,CAAC,CAQjE;AAED;;;GAGG;AACH,wBAAsB,wBAAwB,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC,CAExE;AAED;;;;;;GAMG;AACH,wBAAsB,uCAAuC,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC,CAWvF;AAED;;;;;;;GAOG;AACH,wBAAsB,wBAAwB,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAkCzF;AAED;;;;;GAKG;AACH,wBAAsB,oCAAoC,IAAI,OAAO,CAAC,IAAI,CAAC,CA+D1E;AAED;;;;;;;;GAQG;AACH,wBAAsB,0BAA0B,IAAI,OAAO,CAAC,IAAI,CAAC,CAoBhE"}