@simplysm/sd-claude 14.0.51 → 14.0.52

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 (318) hide show
  1. package/claude/references/sd-frontend-design.md +10 -9
  2. package/claude/references/sd-simplysm-v14/angular/README.md +497 -0
  3. package/claude/references/sd-simplysm-v14/angular/bootstrap/provide-sd-angular.md +37 -0
  4. package/claude/references/sd-simplysm-v14/angular/bootstrap/sd-angular-config-provider.md +16 -0
  5. package/claude/references/sd-simplysm-v14/angular/directives/sd-command-directive.md +27 -0
  6. package/claude/references/sd-simplysm-v14/angular/directives/sd-events.md +25 -0
  7. package/claude/references/sd-simplysm-v14/angular/directives/sd-intersection-directive.md +36 -0
  8. package/claude/references/sd-simplysm-v14/angular/directives/sd-invalid.md +24 -0
  9. package/claude/references/sd-simplysm-v14/angular/directives/sd-resize-directive.md +42 -0
  10. package/claude/references/sd-simplysm-v14/angular/directives/sd-ripple.md +23 -0
  11. package/claude/references/sd-simplysm-v14/angular/directives/sd-router-link.md +38 -0
  12. package/claude/references/sd-simplysm-v14/angular/directives/sd-show-effect.md +18 -0
  13. package/claude/references/sd-simplysm-v14/angular/directives/sd-typed-template.md +69 -0
  14. package/claude/references/sd-simplysm-v14/angular/features/sd-address-search-modal.md +50 -0
  15. package/claude/references/sd-simplysm-v14/angular/features/sd-permission-table.md +20 -0
  16. package/claude/references/sd-simplysm-v14/angular/features/sd-shared-data-components.md +158 -0
  17. package/claude/references/sd-simplysm-v14/angular/features/sd-tiptap-editor.md +26 -0
  18. package/claude/references/sd-simplysm-v14/angular/pipes/format-pipe.md +41 -0
  19. package/claude/references/sd-simplysm-v14/angular/plugins/sd-global-error-handler.md +23 -0
  20. package/claude/references/sd-simplysm-v14/angular/plugins/sd-option-event-plugin.md +34 -0
  21. package/claude/references/sd-simplysm-v14/angular/provider-types/sd-menu.md +65 -0
  22. package/claude/references/sd-simplysm-v14/angular/provider-types/sd-modal-content-def.md +148 -0
  23. package/claude/references/sd-simplysm-v14/angular/provider-types/sd-toast-content-def.md +73 -0
  24. package/claude/references/sd-simplysm-v14/angular/provider-types/shared-data-base.md +59 -0
  25. package/claude/references/sd-simplysm-v14/angular/providers/sd-activated-modal-provider.md +34 -0
  26. package/claude/references/sd-simplysm-v14/angular/providers/sd-app-structure-provider.md +81 -0
  27. package/claude/references/sd-simplysm-v14/angular/providers/sd-busy-provider.md +18 -0
  28. package/claude/references/sd-simplysm-v14/angular/providers/sd-file-dialog-provider.md +40 -0
  29. package/claude/references/sd-simplysm-v14/angular/providers/sd-local-storage-provider.md +20 -0
  30. package/claude/references/sd-simplysm-v14/angular/providers/sd-modal-provider.md +67 -0
  31. package/claude/references/sd-simplysm-v14/angular/providers/sd-navigate-window-provider.md +18 -0
  32. package/claude/references/sd-simplysm-v14/angular/providers/sd-print-provider.md +25 -0
  33. package/claude/references/sd-simplysm-v14/angular/providers/sd-service-client-factory-provider.md +43 -0
  34. package/claude/references/sd-simplysm-v14/angular/providers/sd-shared-data-provider.md +64 -0
  35. package/claude/references/sd-simplysm-v14/angular/providers/sd-system-config-provider.md +46 -0
  36. package/claude/references/sd-simplysm-v14/angular/providers/sd-system-log-provider.md +18 -0
  37. package/claude/references/sd-simplysm-v14/angular/providers/sd-theme-provider.md +38 -0
  38. package/claude/references/sd-simplysm-v14/angular/providers/sd-toast-provider.md +65 -0
  39. package/claude/references/sd-simplysm-v14/angular/recipes/_common-rules.md +336 -0
  40. package/claude/references/sd-simplysm-v14/angular/recipes/crud-detail/extension-a-edit-save.md +191 -0
  41. package/claude/references/sd-simplysm-v14/angular/recipes/crud-detail/extension-b-delete-restore.md +103 -0
  42. package/claude/references/sd-simplysm-v14/angular/recipes/crud-detail/extension-c-modal-view.md +198 -0
  43. package/claude/references/sd-simplysm-v14/angular/recipes/crud-detail/extension-d-control-view.md +109 -0
  44. package/claude/references/sd-simplysm-v14/angular/recipes/crud-detail/extension-e-auxiliary.md +87 -0
  45. package/claude/references/sd-simplysm-v14/angular/recipes/crud-detail/extension-f-complex-detail.md +202 -0
  46. package/claude/references/sd-simplysm-v14/angular/recipes/crud-detail.md +280 -0
  47. package/claude/references/sd-simplysm-v14/angular/recipes/crud-list/extension-a-inline-edit.md +386 -0
  48. package/claude/references/sd-simplysm-v14/angular/recipes/crud-list/extension-b-selection.md +215 -0
  49. package/claude/references/sd-simplysm-v14/angular/recipes/crud-list/extension-c-inline-delete.md +64 -0
  50. package/claude/references/sd-simplysm-v14/angular/recipes/crud-list/extension-d-select-modal.md +193 -0
  51. package/claude/references/sd-simplysm-v14/angular/recipes/crud-list/extension-e-readonly-modal.md +140 -0
  52. package/claude/references/sd-simplysm-v14/angular/recipes/crud-list/extension-f-modal-edit.md +123 -0
  53. package/claude/references/sd-simplysm-v14/angular/recipes/crud-list/extension-g-excel.md +145 -0
  54. package/claude/references/sd-simplysm-v14/angular/recipes/crud-list.md +377 -0
  55. package/claude/references/sd-simplysm-v14/angular/recipes/data-select-button.md +368 -0
  56. package/claude/references/sd-simplysm-v14/angular/recipes/page-modal-container.md +238 -0
  57. package/claude/references/sd-simplysm-v14/angular/styling/classes.md +149 -0
  58. package/claude/references/sd-simplysm-v14/angular/styling/mixins.md +100 -0
  59. package/claude/references/sd-simplysm-v14/angular/styling/themes.md +35 -0
  60. package/claude/references/sd-simplysm-v14/angular/styling/variables.md +147 -0
  61. package/claude/references/sd-simplysm-v14/angular/type-utilities/directive-input-signals.md +232 -0
  62. package/claude/references/sd-simplysm-v14/angular/ui-data/sd-list.md +37 -0
  63. package/claude/references/sd-simplysm-v14/angular/ui-data/sd-sheet.md +212 -0
  64. package/claude/references/sd-simplysm-v14/angular/ui-form/sd-additional-button.md +26 -0
  65. package/claude/references/sd-simplysm-v14/angular/ui-form/sd-anchor.md +31 -0
  66. package/claude/references/sd-simplysm-v14/angular/ui-form/sd-button.md +103 -0
  67. package/claude/references/sd-simplysm-v14/angular/ui-form/sd-checkbox-group.md +39 -0
  68. package/claude/references/sd-simplysm-v14/angular/ui-form/sd-checkbox.md +81 -0
  69. package/claude/references/sd-simplysm-v14/angular/ui-form/sd-date-range-picker.md +27 -0
  70. package/claude/references/sd-simplysm-v14/angular/ui-form/sd-form.md +89 -0
  71. package/claude/references/sd-simplysm-v14/angular/ui-form/sd-modal-select-button.md +54 -0
  72. package/claude/references/sd-simplysm-v14/angular/ui-form/sd-numpad.md +26 -0
  73. package/claude/references/sd-simplysm-v14/angular/ui-form/sd-range.md +26 -0
  74. package/claude/references/sd-simplysm-v14/angular/ui-form/sd-select.md +68 -0
  75. package/claude/references/sd-simplysm-v14/angular/ui-form/sd-shared-data-select.md +52 -0
  76. package/claude/references/sd-simplysm-v14/angular/ui-form/sd-state-preset.md +37 -0
  77. package/claude/references/sd-simplysm-v14/angular/ui-form/sd-switch.md +27 -0
  78. package/claude/references/sd-simplysm-v14/angular/ui-form/sd-textarea.md +33 -0
  79. package/claude/references/sd-simplysm-v14/angular/ui-form/sd-textfield.md +145 -0
  80. package/claude/references/sd-simplysm-v14/angular/ui-layout/sd-dock-container.md +64 -0
  81. package/claude/references/sd-simplysm-v14/angular/ui-layout/sd-dock.md +37 -0
  82. package/claude/references/sd-simplysm-v14/angular/ui-layout/sd-gap.md +26 -0
  83. package/claude/references/sd-simplysm-v14/angular/ui-layout/sd-kanban-board.md +96 -0
  84. package/claude/references/sd-simplysm-v14/angular/ui-layout/sd-kanban-lane.md +34 -0
  85. package/claude/references/sd-simplysm-v14/angular/ui-layout/sd-kanban.md +29 -0
  86. package/claude/references/sd-simplysm-v14/angular/ui-navigation/sd-collapse.md +35 -0
  87. package/claude/references/sd-simplysm-v14/angular/ui-navigation/sd-pagination.md +26 -0
  88. package/claude/references/sd-simplysm-v14/angular/ui-navigation/sd-sidebar-container.md +49 -0
  89. package/claude/references/sd-simplysm-v14/angular/ui-navigation/sd-sidebar-menu.md +22 -0
  90. package/claude/references/sd-simplysm-v14/angular/ui-navigation/sd-sidebar-user.md +43 -0
  91. package/claude/references/sd-simplysm-v14/angular/ui-navigation/sd-tab.md +51 -0
  92. package/claude/references/sd-simplysm-v14/angular/ui-navigation/sd-topbar-container.md +97 -0
  93. package/claude/references/sd-simplysm-v14/angular/ui-navigation/sd-topbar-menu.md +23 -0
  94. package/claude/references/sd-simplysm-v14/angular/ui-navigation/sd-topbar-user.md +38 -0
  95. package/claude/references/sd-simplysm-v14/angular/ui-navigation/sd-topbar.md +30 -0
  96. package/claude/references/sd-simplysm-v14/angular/ui-overlay/sd-busy-container.md +69 -0
  97. package/claude/references/sd-simplysm-v14/angular/ui-overlay/sd-confirm-modal.md +30 -0
  98. package/claude/references/sd-simplysm-v14/angular/ui-overlay/sd-dropdown.md +40 -0
  99. package/claude/references/sd-simplysm-v14/angular/ui-overlay/sd-modal.md +34 -0
  100. package/claude/references/sd-simplysm-v14/angular/ui-overlay/sd-prompt-modal.md +30 -0
  101. package/claude/references/sd-simplysm-v14/angular/ui-overlay/sd-toast.md +35 -0
  102. package/claude/references/sd-simplysm-v14/angular/ui-visual/sd-barcode.md +36 -0
  103. package/claude/references/sd-simplysm-v14/angular/ui-visual/sd-calendar.md +34 -0
  104. package/claude/references/sd-simplysm-v14/angular/ui-visual/sd-echarts.md +32 -0
  105. package/claude/references/sd-simplysm-v14/angular/ui-visual/sd-label.md +24 -0
  106. package/claude/references/sd-simplysm-v14/angular/ui-visual/sd-note.md +23 -0
  107. package/claude/references/sd-simplysm-v14/angular/ui-visual/sd-progress.md +23 -0
  108. package/claude/references/sd-simplysm-v14/angular/utils/inject-routing-signals.md +161 -0
  109. package/claude/references/sd-simplysm-v14/angular/utils/inject-sd-system-config-resource.md +35 -0
  110. package/claude/references/sd-simplysm-v14/angular/utils/mark.md +43 -0
  111. package/claude/references/sd-simplysm-v14/angular/utils/selection-managers.md +96 -0
  112. package/claude/references/sd-simplysm-v14/angular/utils/set-safe-style.md +19 -0
  113. package/claude/references/sd-simplysm-v14/angular/utils/setup-functions.md +93 -0
  114. package/claude/references/sd-simplysm-v14/capacitor-plugin-auto-update/README.md +38 -0
  115. package/claude/references/sd-simplysm-v14/capacitor-plugin-auto-update/apk-installer/apk-installer.md +115 -0
  116. package/claude/references/sd-simplysm-v14/capacitor-plugin-auto-update/auto-update/auto-update.md +113 -0
  117. package/claude/references/sd-simplysm-v14/capacitor-plugin-file-system/README.md +197 -0
  118. package/claude/references/sd-simplysm-v14/capacitor-plugin-intent/README.md +235 -0
  119. package/claude/references/sd-simplysm-v14/capacitor-plugin-usb-storage/README.md +251 -0
  120. package/claude/references/sd-simplysm-v14/core-browser/README.md +52 -0
  121. package/claude/references/sd-simplysm-v14/core-browser/extensions/copy-paste.md +59 -0
  122. package/claude/references/sd-simplysm-v14/core-browser/extensions/element-prototype-extensions.md +137 -0
  123. package/claude/references/sd-simplysm-v14/core-browser/extensions/get-bounds.md +84 -0
  124. package/claude/references/sd-simplysm-v14/core-browser/utils/download-blob.md +59 -0
  125. package/claude/references/sd-simplysm-v14/core-browser/utils/fetch-url-bytes.md +91 -0
  126. package/claude/references/sd-simplysm-v14/core-browser/utils/indexed-db-store.md +131 -0
  127. package/claude/references/sd-simplysm-v14/core-browser/utils/indexed-db-virtual-fs.md +121 -0
  128. package/claude/references/sd-simplysm-v14/core-browser/utils/open-file-dialog.md +60 -0
  129. package/claude/references/sd-simplysm-v14/core-common/README.md +179 -0
  130. package/claude/references/sd-simplysm-v14/core-common/errors/argument-error.md +26 -0
  131. package/claude/references/sd-simplysm-v14/core-common/errors/not-implemented-error.md +33 -0
  132. package/claude/references/sd-simplysm-v14/core-common/errors/sd-error.md +38 -0
  133. package/claude/references/sd-simplysm-v14/core-common/errors/timeout-error.md +36 -0
  134. package/claude/references/sd-simplysm-v14/core-common/extensions/array.md +125 -0
  135. package/claude/references/sd-simplysm-v14/core-common/extensions/map.md +43 -0
  136. package/claude/references/sd-simplysm-v14/core-common/extensions/set.md +35 -0
  137. package/claude/references/sd-simplysm-v14/core-common/features/debounce-queue.md +48 -0
  138. package/claude/references/sd-simplysm-v14/core-common/features/event-emitter.md +52 -0
  139. package/claude/references/sd-simplysm-v14/core-common/features/serial-queue.md +44 -0
  140. package/claude/references/sd-simplysm-v14/core-common/type-utils/common-types.md +100 -0
  141. package/claude/references/sd-simplysm-v14/core-common/type-utils/env.md +42 -0
  142. package/claude/references/sd-simplysm-v14/core-common/types/date-only.md +86 -0
  143. package/claude/references/sd-simplysm-v14/core-common/types/date-time.md +106 -0
  144. package/claude/references/sd-simplysm-v14/core-common/types/lazy-gc-map.md +59 -0
  145. package/claude/references/sd-simplysm-v14/core-common/types/time.md +62 -0
  146. package/claude/references/sd-simplysm-v14/core-common/types/uuid.md +41 -0
  147. package/claude/references/sd-simplysm-v14/core-common/utils/bytes.md +36 -0
  148. package/claude/references/sd-simplysm-v14/core-common/utils/dt.md +60 -0
  149. package/claude/references/sd-simplysm-v14/core-common/utils/err.md +26 -0
  150. package/claude/references/sd-simplysm-v14/core-common/utils/json.md +58 -0
  151. package/claude/references/sd-simplysm-v14/core-common/utils/num.md +56 -0
  152. package/claude/references/sd-simplysm-v14/core-common/utils/obj.md +107 -0
  153. package/claude/references/sd-simplysm-v14/core-common/utils/path.md +30 -0
  154. package/claude/references/sd-simplysm-v14/core-common/utils/primitive.md +28 -0
  155. package/claude/references/sd-simplysm-v14/core-common/utils/str.md +63 -0
  156. package/claude/references/sd-simplysm-v14/core-common/utils/template-strings.md +49 -0
  157. package/claude/references/sd-simplysm-v14/core-common/utils/transfer.md +35 -0
  158. package/claude/references/sd-simplysm-v14/core-common/utils/wait.md +35 -0
  159. package/claude/references/sd-simplysm-v14/core-common/utils/xml.md +49 -0
  160. package/claude/references/sd-simplysm-v14/core-common/utils/zip-archive.md +77 -0
  161. package/claude/references/sd-simplysm-v14/core-node/README.md +59 -0
  162. package/claude/references/sd-simplysm-v14/core-node/features/fs-watcher.md +110 -0
  163. package/claude/references/sd-simplysm-v14/core-node/logging/create-file-reporter.md +78 -0
  164. package/claude/references/sd-simplysm-v14/core-node/logging/pretty-reporter.md +38 -0
  165. package/claude/references/sd-simplysm-v14/core-node/logging/setup-consola.md +77 -0
  166. package/claude/references/sd-simplysm-v14/core-node/utils/cpx.md +128 -0
  167. package/claude/references/sd-simplysm-v14/core-node/utils/fsx.md +168 -0
  168. package/claude/references/sd-simplysm-v14/core-node/utils/pathx.md +73 -0
  169. package/claude/references/sd-simplysm-v14/core-node/worker/create-worker.md +85 -0
  170. package/claude/references/sd-simplysm-v14/core-node/worker/worker.md +160 -0
  171. package/claude/references/sd-simplysm-v14/excel/README.md +66 -0
  172. package/claude/references/sd-simplysm-v14/excel/core-classes/excel-cell.md +79 -0
  173. package/claude/references/sd-simplysm-v14/excel/core-classes/excel-col.md +36 -0
  174. package/claude/references/sd-simplysm-v14/excel/core-classes/excel-row.md +34 -0
  175. package/claude/references/sd-simplysm-v14/excel/core-classes/excel-workbook.md +93 -0
  176. package/claude/references/sd-simplysm-v14/excel/core-classes/excel-worksheet.md +147 -0
  177. package/claude/references/sd-simplysm-v14/excel/types/excel-address-point.md +33 -0
  178. package/claude/references/sd-simplysm-v14/excel/types/excel-style-options.md +57 -0
  179. package/claude/references/sd-simplysm-v14/excel/types/excel-value-type.md +28 -0
  180. package/claude/references/sd-simplysm-v14/excel/types/excel-xml-content-type-data.md +23 -0
  181. package/claude/references/sd-simplysm-v14/excel/types/excel-xml-drawing-data.md +29 -0
  182. package/claude/references/sd-simplysm-v14/excel/types/excel-xml-relationship-data.md +39 -0
  183. package/claude/references/sd-simplysm-v14/excel/types/excel-xml-shared-string-data.md +42 -0
  184. package/claude/references/sd-simplysm-v14/excel/types/excel-xml-style-data.md +97 -0
  185. package/claude/references/sd-simplysm-v14/excel/types/excel-xml-workbook-data.md +22 -0
  186. package/claude/references/sd-simplysm-v14/excel/types/excel-xml-worksheet-data.md +68 -0
  187. package/claude/references/sd-simplysm-v14/excel/types/excel-xml.md +15 -0
  188. package/claude/references/sd-simplysm-v14/excel/utilities/excel-utils.md +101 -0
  189. package/claude/references/sd-simplysm-v14/excel/wrapper/excel-wrapper.md +108 -0
  190. package/claude/references/sd-simplysm-v14/lint/README.md +183 -0
  191. package/claude/references/sd-simplysm-v14/orm-common/README.md +156 -0
  192. package/claude/references/sd-simplysm-v14/orm-common/core/db-context.md +208 -0
  193. package/claude/references/sd-simplysm-v14/orm-common/core/db-transaction-error.md +64 -0
  194. package/claude/references/sd-simplysm-v14/orm-common/expression/expr-unit.md +62 -0
  195. package/claude/references/sd-simplysm-v14/orm-common/expression/expr.md +198 -0
  196. package/claude/references/sd-simplysm-v14/orm-common/models/migration.md +37 -0
  197. package/claude/references/sd-simplysm-v14/orm-common/query-builder/create-query-builder.md +80 -0
  198. package/claude/references/sd-simplysm-v14/orm-common/queryable-executable/executable.md +54 -0
  199. package/claude/references/sd-simplysm-v14/orm-common/queryable-executable/parse-search-query.md +75 -0
  200. package/claude/references/sd-simplysm-v14/orm-common/queryable-executable/queryable.md +238 -0
  201. package/claude/references/sd-simplysm-v14/orm-common/schema-builders/column-builder.md +63 -0
  202. package/claude/references/sd-simplysm-v14/orm-common/schema-builders/foreign-key-builder.md +137 -0
  203. package/claude/references/sd-simplysm-v14/orm-common/schema-builders/index-builder.md +54 -0
  204. package/claude/references/sd-simplysm-v14/orm-common/schema-builders/procedure.md +67 -0
  205. package/claude/references/sd-simplysm-v14/orm-common/schema-builders/table.md +95 -0
  206. package/claude/references/sd-simplysm-v14/orm-common/schema-builders/view.md +71 -0
  207. package/claude/references/sd-simplysm-v14/orm-common/types/data-type.md +146 -0
  208. package/claude/references/sd-simplysm-v14/orm-common/types/dialect.md +151 -0
  209. package/claude/references/sd-simplysm-v14/orm-common/types/expr.md +175 -0
  210. package/claude/references/sd-simplysm-v14/orm-common/types/parse-query-result.md +58 -0
  211. package/claude/references/sd-simplysm-v14/orm-common/types/query-def.md +224 -0
  212. package/claude/references/sd-simplysm-v14/orm-node/README.md +65 -0
  213. package/claude/references/sd-simplysm-v14/orm-node/connections/mssql-db-conn.md +85 -0
  214. package/claude/references/sd-simplysm-v14/orm-node/connections/mysql-db-conn.md +83 -0
  215. package/claude/references/sd-simplysm-v14/orm-node/connections/postgresql-db-conn.md +86 -0
  216. package/claude/references/sd-simplysm-v14/orm-node/core/create-db-conn.md +62 -0
  217. package/claude/references/sd-simplysm-v14/orm-node/core/create-orm.md +107 -0
  218. package/claude/references/sd-simplysm-v14/orm-node/core/node-db-context-executor.md +50 -0
  219. package/claude/references/sd-simplysm-v14/orm-node/types/db-conn-config.md +91 -0
  220. package/claude/references/sd-simplysm-v14/orm-node/types/db-conn-constants.md +33 -0
  221. package/claude/references/sd-simplysm-v14/orm-node/types/db-conn.md +60 -0
  222. package/claude/references/sd-simplysm-v14/orm-node/types/get-dialect-from-config.md +17 -0
  223. package/{README.md → claude/references/sd-simplysm-v14/sd-claude/README.md} +85 -84
  224. package/{docs → claude/references/sd-simplysm-v14/sd-claude}/assets.md +2 -2
  225. package/{docs → claude/references/sd-simplysm-v14/sd-claude}/hooks.md +15 -1
  226. package/claude/references/sd-simplysm-v14/sd-cli/README.md +138 -0
  227. package/claude/references/sd-simplysm-v14/sd-cli/angular-vite-plugin/sd-angular-plugin.md +60 -0
  228. package/claude/references/sd-simplysm-v14/sd-cli/config/build-target.md +31 -0
  229. package/claude/references/sd-simplysm-v14/sd-cli/config/npm-config.md +27 -0
  230. package/claude/references/sd-simplysm-v14/sd-cli/config/sd-browser-support-config.md +19 -0
  231. package/claude/references/sd-simplysm-v14/sd-cli/config/sd-build-package-config.md +21 -0
  232. package/claude/references/sd-simplysm-v14/sd-cli/config/sd-capacitor-config.md +109 -0
  233. package/claude/references/sd-simplysm-v14/sd-cli/config/sd-client-package-config.md +33 -0
  234. package/claude/references/sd-simplysm-v14/sd-cli/config/sd-config.md +78 -0
  235. package/claude/references/sd-simplysm-v14/sd-cli/config/sd-electron-config.md +27 -0
  236. package/claude/references/sd-simplysm-v14/sd-cli/config/sd-package-config.md +18 -0
  237. package/claude/references/sd-simplysm-v14/sd-cli/config/sd-post-publish-script-config.md +19 -0
  238. package/claude/references/sd-simplysm-v14/sd-cli/config/sd-publish-config.md +72 -0
  239. package/claude/references/sd-simplysm-v14/sd-cli/config/sd-pwa-config.md +41 -0
  240. package/claude/references/sd-simplysm-v14/sd-cli/config/sd-scripts-package-config.md +19 -0
  241. package/claude/references/sd-simplysm-v14/sd-cli/config/sd-server-package-config.md +32 -0
  242. package/claude/references/sd-simplysm-v14/sd-cli/config/sd-watch-hook-config.md +19 -0
  243. package/claude/references/sd-simplysm-v14/sd-cli/ts-compiler/sd-ts-compiler.md +158 -0
  244. package/claude/references/sd-simplysm-v14/service-client/README.md +74 -0
  245. package/claude/references/sd-simplysm-v14/service-client/features/event-client.md +93 -0
  246. package/claude/references/sd-simplysm-v14/service-client/features/file-client.md +63 -0
  247. package/claude/references/sd-simplysm-v14/service-client/features/orm-client-connector.md +89 -0
  248. package/claude/references/sd-simplysm-v14/service-client/features/orm-client-db-context-executor.md +31 -0
  249. package/claude/references/sd-simplysm-v14/service-client/main/service-client.md +206 -0
  250. package/claude/references/sd-simplysm-v14/service-client/protocol/client-protocol-wrapper.md +64 -0
  251. package/claude/references/sd-simplysm-v14/service-client/transport/service-transport.md +68 -0
  252. package/claude/references/sd-simplysm-v14/service-client/transport/socket-provider.md +100 -0
  253. package/claude/references/sd-simplysm-v14/service-client/types/blob-input.md +7 -0
  254. package/claude/references/sd-simplysm-v14/service-client/types/browser-worker.md +47 -0
  255. package/claude/references/sd-simplysm-v14/service-client/types/file-collection.md +21 -0
  256. package/claude/references/sd-simplysm-v14/service-client/types/service-connection-options.md +22 -0
  257. package/claude/references/sd-simplysm-v14/service-client/types/service-progress.md +39 -0
  258. package/claude/references/sd-simplysm-v14/service-common/README.md +161 -0
  259. package/claude/references/sd-simplysm-v14/service-common/app-structure/app-structure-item.md +107 -0
  260. package/claude/references/sd-simplysm-v14/service-common/app-structure/get-flat-permissions.md +57 -0
  261. package/claude/references/sd-simplysm-v14/service-common/app-structure/is-usable-modules-chain.md +23 -0
  262. package/claude/references/sd-simplysm-v14/service-common/app-structure/is-usable-modules.md +42 -0
  263. package/claude/references/sd-simplysm-v14/service-common/events/define-event.md +68 -0
  264. package/claude/references/sd-simplysm-v14/service-common/protocol/create-service-protocol.md +93 -0
  265. package/claude/references/sd-simplysm-v14/service-common/protocol/protocol-config.md +21 -0
  266. package/claude/references/sd-simplysm-v14/service-common/protocol/service-add-event-listener-message.md +23 -0
  267. package/claude/references/sd-simplysm-v14/service-common/protocol/service-auth-message.md +17 -0
  268. package/claude/references/sd-simplysm-v14/service-common/protocol/service-emit-event-message.md +21 -0
  269. package/claude/references/sd-simplysm-v14/service-common/protocol/service-error-message.md +29 -0
  270. package/claude/references/sd-simplysm-v14/service-common/protocol/service-event-message.md +21 -0
  271. package/claude/references/sd-simplysm-v14/service-common/protocol/service-get-event-listener-infos-message.md +19 -0
  272. package/claude/references/sd-simplysm-v14/service-common/protocol/service-message.md +52 -0
  273. package/claude/references/sd-simplysm-v14/service-common/protocol/service-progress-message.md +21 -0
  274. package/claude/references/sd-simplysm-v14/service-common/protocol/service-remove-event-listener-message.md +19 -0
  275. package/claude/references/sd-simplysm-v14/service-common/protocol/service-request-message.md +17 -0
  276. package/claude/references/sd-simplysm-v14/service-common/protocol/service-response-message.md +17 -0
  277. package/claude/references/sd-simplysm-v14/service-common/service-types/app-structure-service.md +15 -0
  278. package/claude/references/sd-simplysm-v14/service-common/service-types/auto-update-service.md +20 -0
  279. package/claude/references/sd-simplysm-v14/service-common/service-types/orm-service.md +61 -0
  280. package/claude/references/sd-simplysm-v14/service-common/types/service-upload-result.md +19 -0
  281. package/claude/references/sd-simplysm-v14/service-server/README.md +162 -0
  282. package/claude/references/sd-simplysm-v14/service-server/auth/auth-token-payload.md +18 -0
  283. package/claude/references/sd-simplysm-v14/service-server/auth/sign-jwt.md +30 -0
  284. package/claude/references/sd-simplysm-v14/service-server/auth/verify-jwt.md +35 -0
  285. package/claude/references/sd-simplysm-v14/service-server/core/auth.md +64 -0
  286. package/claude/references/sd-simplysm-v14/service-server/core/define-service.md +81 -0
  287. package/claude/references/sd-simplysm-v14/service-server/core/execute-service-method.md +43 -0
  288. package/claude/references/sd-simplysm-v14/service-server/core/service-context.md +79 -0
  289. package/claude/references/sd-simplysm-v14/service-server/legacy/handle-v1-connection.md +25 -0
  290. package/claude/references/sd-simplysm-v14/service-server/main/create-service-server.md +32 -0
  291. package/claude/references/sd-simplysm-v14/service-server/main/service-server.md +113 -0
  292. package/claude/references/sd-simplysm-v14/service-server/protocol/server-protocol-wrapper.md +35 -0
  293. package/claude/references/sd-simplysm-v14/service-server/services/app-structure-service.md +59 -0
  294. package/claude/references/sd-simplysm-v14/service-server/services/auto-update-service.md +34 -0
  295. package/claude/references/sd-simplysm-v14/service-server/services/orm-service.md +43 -0
  296. package/claude/references/sd-simplysm-v14/service-server/transport-http/handle-http-request.md +33 -0
  297. package/claude/references/sd-simplysm-v14/service-server/transport-http/handle-static-file.md +29 -0
  298. package/claude/references/sd-simplysm-v14/service-server/transport-http/handle-upload.md +33 -0
  299. package/claude/references/sd-simplysm-v14/service-server/transport-socket/service-socket.md +64 -0
  300. package/claude/references/sd-simplysm-v14/service-server/transport-socket/websocket-handler.md +57 -0
  301. package/claude/references/sd-simplysm-v14/service-server/types/service-server-options.md +36 -0
  302. package/claude/references/sd-simplysm-v14/service-server/utils/get-config.md +29 -0
  303. package/claude/references/sd-simplysm-v14/storage/README.md +99 -0
  304. package/claude/references/sd-simplysm-v14/storage/clients/ftp-storage-client.md +99 -0
  305. package/claude/references/sd-simplysm-v14/storage/clients/sftp-storage-client.md +108 -0
  306. package/claude/references/sd-simplysm-v14/storage/factory/storage-factory.md +114 -0
  307. package/claude/references/sd-simplysm-v14/storage/types/file-info.md +32 -0
  308. package/claude/references/sd-simplysm-v14/storage/types/storage-client.md +55 -0
  309. package/claude/references/sd-simplysm-v14/storage/types/storage-conn-config.md +34 -0
  310. package/claude/rules/sd-claude-rules.md +8 -8
  311. package/claude/rules/sd-simplysm-v14.md +33 -0
  312. package/claude/skills/sd-claude-docs/SKILL.md +41 -24
  313. package/claude/skills/sd-claude-docs/references/package-docs.md +240 -116
  314. package/claude/skills/sd-inner-debug/SKILL.md +1 -1
  315. package/claude/skills/sd-inner-review/SKILL.md +4 -2
  316. package/package.json +2 -3
  317. /package/{docs → claude/references/sd-simplysm-v14/sd-claude}/cli.md +0 -0
  318. /package/{docs → claude/references/sd-simplysm-v14/sd-claude}/scripts.md +0 -0
@@ -0,0 +1,161 @@
1
+ # @simplysm/service-common
2
+
3
+ > 서비스 클라이언트(`@simplysm/service-client`)와 서버(`@simplysm/service-server`)가 공유하는 바이너리 프로토콜, 메시지 타입, 서비스 인터페이스, 앱 구조 정의 패키지.
4
+ > 의존성: `@simplysm/core-common`, `@simplysm/orm-common`. Node.js 및 브라우저 양쪽에서 사용 가능.
5
+
6
+ ## 소비앱 설치 안내 (v14)
7
+
8
+ v14에서는 `import type`으로 타입을 직접 가져올 수 있으므로, 이전 버전에서 클라이언트-서버 간 타입 공유를 위해 필요하던 중간 패키지(`@simplysm/service-common`, `@simplysm/orm-common`)는 **소비앱의 의존성으로 불필요**하다. 서버 패키지(`@simplysm/service-server`, `@simplysm/orm-node`)의 타입을 직접 import하여 사용한다.
9
+
10
+ ```typescript
11
+ // v14: 서버 패키지에서 타입을 직접 import — common 패키지 의존성 불필요
12
+ import type { ServiceMethods } from "@simplysm/service-server";
13
+ ```
14
+
15
+ ## Installation
16
+
17
+ ```bash
18
+ npm install @simplysm/service-common
19
+ ```
20
+
21
+ ## 하려는 작업 → 먼저 읽을 파일
22
+
23
+ | 작업 | 먼저 읽을 파일 |
24
+ |------|----------------|
25
+ | WebSocket 메시지 인코딩/디코딩 | [create-service-protocol.md](./protocol/create-service-protocol.md) |
26
+ | 프로토콜 상수 확인 (크기 제한, 청킹 등) | [protocol-config.md](./protocol/protocol-config.md) |
27
+ | 타입 안전 이벤트 정의 | [define-event.md](./events/define-event.md) |
28
+ | 메뉴 트리·권한 구조 정의 | [app-structure-item.md](./app-structure/app-structure-item.md) |
29
+ | 모듈 기반 권한 필터링 | [get-flat-permissions.md](./app-structure/get-flat-permissions.md) |
30
+ | ORM 서비스 타입 계약 확인 | [orm-service.md](./service-types/orm-service.md) |
31
+ | 메시지 타입 구조 파악 | [service-message.md](./protocol/service-message.md) |
32
+
33
+ ## API Overview
34
+
35
+ ### Protocol
36
+
37
+ | Entry | Kind | 언제 쓰나 |
38
+ |-------|------|-----------|
39
+ | [`PROTOCOL_CONFIG`](./protocol/protocol-config.md) | const | 프로토콜 크기 제한·청킹 임계값 등 설정 상수를 참조할 때 |
40
+ | [`ServiceMessage`](./protocol/service-message.md) | type | 양방향 메시지의 전체 유니언과 방향별 하위 유니언을 참조할 때 |
41
+ | [`ServiceProgressMessage`](./protocol/service-progress-message.md) | interface | 청크 수신 진행 상태를 처리할 때 |
42
+ | [`ServiceErrorMessage`](./protocol/service-error-message.md) | interface | 서버 에러 응답을 처리할 때 |
43
+ | [`ServiceAuthMessage`](./protocol/service-auth-message.md) | interface | 클라이언트 인증 토큰을 전송할 때 |
44
+ | [`ServiceRequestMessage`](./protocol/service-request-message.md) | interface | 서비스 메서드를 호출할 때 |
45
+ | [`ServiceResponseMessage`](./protocol/service-response-message.md) | interface | 서비스 메서드 응답을 처리할 때 |
46
+ | [`ServiceAddEventListenerMessage`](./protocol/service-add-event-listener-message.md) | interface | 이벤트 리스너를 등록할 때 |
47
+ | [`ServiceRemoveEventListenerMessage`](./protocol/service-remove-event-listener-message.md) | interface | 이벤트 리스너를 제거할 때 |
48
+ | [`ServiceGetEventListenerInfosMessage`](./protocol/service-get-event-listener-infos-message.md) | interface | 등록된 이벤트 리스너 정보를 조회할 때 |
49
+ | [`ServiceEmitEventMessage`](./protocol/service-emit-event-message.md) | interface | 클라이언트에서 이벤트를 발생시킬 때 |
50
+ | [`ServiceEventMessage`](./protocol/service-event-message.md) | interface | 서버에서 수신된 이벤트 알림을 처리할 때 |
51
+ | [`createServiceProtocol`](./protocol/create-service-protocol.md) | function | WebSocket 메시지를 인코딩/디코딩할 때 (자동 청킹·재조립 포함) |
52
+
53
+ ### Service Types
54
+
55
+ | Entry | Kind | 언제 쓰나 |
56
+ |-------|------|-----------|
57
+ | [`OrmService`](./service-types/orm-service.md) | interface | DB 연결·트랜잭션·쿼리 실행의 서버-클라이언트 타입 계약을 정의할 때 |
58
+ | [`AutoUpdateService`](./service-types/auto-update-service.md) | interface | 클라이언트 자동 업데이트 버전 조회 타입 계약을 정의할 때 |
59
+ | [`AppStructureService`](./service-types/app-structure-service.md) | interface | 앱 구조 항목을 서버에서 조회하는 타입 계약을 정의할 때 |
60
+
61
+ ### Types
62
+
63
+ | Entry | Kind | 언제 쓰나 |
64
+ |-------|------|-----------|
65
+ | [`ServiceUploadResult`](./types/service-upload-result.md) | interface | 파일 업로드 결과를 타입으로 사용할 때 |
66
+
67
+ ### App Structure
68
+
69
+ | Entry | Kind | 언제 쓰나 |
70
+ |-------|------|-----------|
71
+ | [`AppStructureItem`](./app-structure/app-structure-item.md) | type | 앱 메뉴 트리·권한 구조를 정의할 때 |
72
+ | [`isUsableModules`](./app-structure/is-usable-modules.md) | function | 단일 항목의 모듈 접근 가능 여부를 판단할 때 |
73
+ | [`isUsableModulesChain`](./app-structure/is-usable-modules-chain.md) | function | 트리 경로 전체의 모듈 접근 가능 여부를 판단할 때 |
74
+ | [`getFlatPermissions`](./app-structure/get-flat-permissions.md) | function | 앱 구조 트리를 플래트닝하여 권한 목록을 얻을 때 |
75
+
76
+ ### Events
77
+
78
+ | Entry | Kind | 언제 쓰나 |
79
+ |-------|------|-----------|
80
+ | [`defineEvent`](./events/define-event.md) | function | 서버-클라이언트 간 타입 안전 이벤트를 정의할 때 |
81
+
82
+ ## Usage Examples
83
+
84
+ ### 프로토콜 인코딩/디코딩
85
+
86
+ ```typescript
87
+ import { createServiceProtocol } from "@simplysm/service-common";
88
+
89
+ const protocol = createServiceProtocol();
90
+
91
+ // 메시지 인코딩 (3MB 초과 시 자동 청킹)
92
+ const { chunks, totalSize } = protocol.encode(uuid, {
93
+ name: "OrmService.connect",
94
+ body: [{ configName: "default" }],
95
+ });
96
+
97
+ // 메시지 디코딩 (청크 자동 재조립)
98
+ for (const chunk of chunks) {
99
+ const result = protocol.decode(chunk);
100
+ if (result.type === "complete") {
101
+ // result.message: 재조립된 메시지
102
+ }
103
+ }
104
+
105
+ // 사용 후 반드시 해제
106
+ protocol.dispose();
107
+ ```
108
+
109
+ ### 타입 안전 이벤트 정의
110
+
111
+ ```typescript
112
+ import { defineEvent } from "@simplysm/service-common";
113
+
114
+ // 서버에서 이벤트 정의 + 타입 export
115
+ export const OrderUpdated = defineEvent<{ orderId: number }, { status: string }>("OrderUpdated");
116
+
117
+ // 서버에서 이벤트 발생 (제네릭 타입 파라미터 + 문자열 이름 패턴)
118
+ await server.emitEvent<typeof OrderUpdated>("OrderUpdated", (info) => info.orderId === 123, { status: "shipped" });
119
+
120
+ // 클라이언트에서 구독 (import type으로 타입만 가져옴)
121
+ import type { OrderUpdated } from "@server-package";
122
+ await client.addListener<typeof OrderUpdated>("OrderUpdated", { orderId: 123 }, async (data) => {
123
+ // data.status는 string으로 타입 추론됨
124
+ });
125
+ ```
126
+
127
+ ### 앱 구조 권한 플래트닝
128
+
129
+ ```typescript
130
+ import { getFlatPermissions, isUsableModules } from "@simplysm/service-common";
131
+ import type { AppStructureItem } from "@simplysm/service-common";
132
+
133
+ const items: AppStructureItem<string>[] = [
134
+ {
135
+ code: "admin",
136
+ title: "관리",
137
+ children: [
138
+ { code: "user", title: "사용자", perms: ["use", "edit"] },
139
+ ],
140
+ },
141
+ {
142
+ code: "report",
143
+ title: "리포트",
144
+ modules: ["moduleA"],
145
+ perms: ["use"],
146
+ },
147
+ ];
148
+
149
+ // 활성 모듈 기준으로 권한 플래트닝
150
+ const perms = getFlatPermissions(items, ["moduleA"]);
151
+ // [{ codeChain: ["admin", "user", "use"], ... }, { codeChain: ["admin", "user", "edit"], ... }, ...]
152
+
153
+ // 개별 모듈 접근 가능 여부 확인
154
+ const canAccess = isUsableModules(["moduleA", "moduleB"], undefined, ["moduleA"]); // true (OR 조건)
155
+ ```
156
+
157
+ ## 이 패키지를 쓰지 말아야 할 때
158
+
159
+ - 서버 로직 구현 (서비스 메서드 등록, WebSocket 핸들링) → `@simplysm/service-server`
160
+ - 클라이언트에서 서버 호출 (RPC, 이벤트 구독) → `@simplysm/service-client`
161
+ - v14 소비앱에서 타입만 필요할 때 → 서버 패키지에서 직접 `import type`
@@ -0,0 +1,107 @@
1
+ # AppStructureItem
2
+
3
+ 앱 구조 항목 유니언 타입. `children` 필드 유무로 그룹(`AppStructureGroupItem`)과 리프(`AppStructureLeafItem`)를 구분한다.
4
+
5
+ ```typescript
6
+ export type AppStructureItem<TModule = unknown> =
7
+ | AppStructureGroupItem<TModule>
8
+ | AppStructureLeafItem<TModule>;
9
+ ```
10
+
11
+ `TModule` 제네릭은 모듈 식별자 타입이다 (일반적으로 `string`).
12
+
13
+ ## Related Types
14
+
15
+ ### `AppStructureGroupItem`
16
+
17
+ 자식을 가진 그룹 메뉴 항목. `children` 필드로 하위 항목을 재귀적으로 포함한다.
18
+
19
+ ```typescript
20
+ export interface AppStructureGroupItem<TModule> {
21
+ code: string;
22
+ title: string;
23
+ modules?: TModule[];
24
+ requiredModules?: TModule[];
25
+ icon?: string;
26
+ children: AppStructureItem<TModule>[];
27
+ }
28
+ ```
29
+
30
+ | Field | Type | Description |
31
+ |-------|------|-------------|
32
+ | `code` | `string` | 항목 코드 (권한 코드 체인에 사용) |
33
+ | `title` | `string` | 표시 이름 |
34
+ | `modules` | `TModule[]?` | 접근에 필요한 모듈 목록 (OR 조건: 하나라도 있으면 접근 가능) |
35
+ | `requiredModules` | `TModule[]?` | 접근에 필수인 모듈 목록 (AND 조건: 모두 있어야 접근 가능) |
36
+ | `icon` | `string?` | 아이콘 식별자 |
37
+ | `children` | `AppStructureItem<TModule>[]` | 하위 메뉴 항목 배열 |
38
+
39
+ ### `AppStructureLeafItem`
40
+
41
+ 말단 메뉴 항목. 실제 페이지 URL과 권한(`perms`)을 가진다.
42
+
43
+ ```typescript
44
+ export interface AppStructureLeafItem<TModule> {
45
+ code: string;
46
+ title: string;
47
+ modules?: TModule[];
48
+ requiredModules?: TModule[];
49
+ perms?: ("use" | "edit")[];
50
+ subPerms?: AppStructureSubPermission<TModule>[];
51
+ icon?: string;
52
+ url?: string;
53
+ isNotMenu?: boolean;
54
+ }
55
+ ```
56
+
57
+ | Field | Type | Description |
58
+ |-------|------|-------------|
59
+ | `code` | `string` | 항목 코드 |
60
+ | `title` | `string` | 표시 이름 |
61
+ | `modules` | `TModule[]?` | 접근에 필요한 모듈 목록 (OR 조건) |
62
+ | `requiredModules` | `TModule[]?` | 접근에 필수인 모듈 목록 (AND 조건) |
63
+ | `perms` | `("use" \| "edit")[]?` | 이 항목에 부여 가능한 권한 종류 |
64
+ | `subPerms` | `AppStructureSubPermission<TModule>[]?` | 하위 권한 정의 배열 |
65
+ | `icon` | `string?` | 아이콘 식별자 |
66
+ | `url` | `string?` | 페이지 URL |
67
+ | `isNotMenu` | `boolean?` | `true`이면 메뉴에 표시하지 않음 |
68
+
69
+ ### `AppStructureSubPermission`
70
+
71
+ 리프 항목의 하위 권한 정의. 각 하위 권한도 모듈 접근 제어를 가진다.
72
+
73
+ ```typescript
74
+ export interface AppStructureSubPermission<TModule> {
75
+ code: string;
76
+ title: string;
77
+ modules?: TModule[];
78
+ requiredModules?: TModule[];
79
+ perms: ("use" | "edit")[];
80
+ }
81
+ ```
82
+
83
+ | Field | Type | Description |
84
+ |-------|------|-------------|
85
+ | `code` | `string` | 하위 권한 코드 |
86
+ | `title` | `string` | 하위 권한 표시 이름 |
87
+ | `modules` | `TModule[]?` | 접근에 필요한 모듈 목록 (OR 조건) |
88
+ | `requiredModules` | `TModule[]?` | 접근에 필수인 모듈 목록 (AND 조건) |
89
+ | `perms` | `("use" \| "edit")[]` | 부여 가능한 권한 종류 |
90
+
91
+ ### `FlatPermission`
92
+
93
+ 트리를 플래트닝한 권한 결과. [`getFlatPermissions`](./get-flat-permissions.md)의 반환 타입이다.
94
+
95
+ ```typescript
96
+ export interface FlatPermission<TModule = unknown> {
97
+ titleChain: string[];
98
+ codeChain: string[];
99
+ modulesChain: TModule[][];
100
+ }
101
+ ```
102
+
103
+ | Field | Type | Description |
104
+ |-------|------|-------------|
105
+ | `titleChain` | `string[]` | 루트부터 현재 권한까지의 표시 이름 체인 (예: `["관리", "사용자"]`) |
106
+ | `codeChain` | `string[]` | 루트부터 현재 권한까지의 코드 체인 (예: `["admin", "user", "use"]`) |
107
+ | `modulesChain` | `TModule[][]` | 각 레벨에서 필요한 모듈 목록의 체인 |
@@ -0,0 +1,57 @@
1
+ # getFlatPermissions
2
+
3
+ 앱 구조 트리를 BFS로 순회하며 모듈 조건을 필터링하여 [`FlatPermission`](./app-structure-item.md)`[]`으로 플래트닝한다.
4
+
5
+ ```typescript
6
+ export function getFlatPermissions<TModule>(
7
+ items: AppStructureItem<TModule>[],
8
+ usableModules: TModule[] | undefined,
9
+ ): FlatPermission<TModule>[];
10
+ ```
11
+
12
+ ## Parameters
13
+
14
+ | Param | Type | Description |
15
+ |-------|------|-------------|
16
+ | `items` | `AppStructureItem<TModule>[]` | 앱 구조 트리의 최상위 항목 배열 |
17
+ | `usableModules` | `TModule[] \| undefined` | 사용자가 보유한 활성 모듈 목록. `undefined`이면 모듈 조건이 없는 항목만 포함 |
18
+
19
+ ## Returns
20
+
21
+ `FlatPermission<TModule>[]` — 모듈 조건을 만족하는 모든 권한의 플랫 목록.
22
+
23
+ 처리 로직:
24
+ 1. BFS로 트리를 순회하며 각 레벨의 `modules`(OR)와 `requiredModules`(AND) 조건을 체크
25
+ 2. 조건 미충족 항목은 하위 트리 전체를 건너뜀
26
+ 3. `AppStructureLeafItem`의 `perms`를 `codeChain`에 추가하여 `FlatPermission` 생성
27
+ 4. `subPerms`도 개별 모듈 조건을 체크하여 `FlatPermission`으로 변환
28
+
29
+ ## Usage
30
+
31
+ ```typescript
32
+ import { getFlatPermissions } from "@simplysm/service-common";
33
+ import type { AppStructureItem } from "@simplysm/service-common";
34
+
35
+ const items: AppStructureItem<string>[] = [
36
+ {
37
+ code: "admin",
38
+ title: "관리",
39
+ children: [
40
+ { code: "user", title: "사용자", perms: ["use", "edit"] },
41
+ ],
42
+ },
43
+ {
44
+ code: "report",
45
+ title: "리포트",
46
+ modules: ["moduleA"],
47
+ perms: ["use"],
48
+ },
49
+ ];
50
+
51
+ const perms = getFlatPermissions(items, ["moduleA"]);
52
+ // [
53
+ // { titleChain: ["관리", "사용자"], codeChain: ["admin", "user", "use"], modulesChain: [] },
54
+ // { titleChain: ["관리", "사용자"], codeChain: ["admin", "user", "edit"], modulesChain: [] },
55
+ // { titleChain: ["리포트"], codeChain: ["report", "use"], modulesChain: [["moduleA"]] },
56
+ // ]
57
+ ```
@@ -0,0 +1,23 @@
1
+ # isUsableModulesChain
2
+
3
+ 모듈 체인 전체의 접근 가능 여부를 판단한다. 트리의 각 레벨에서 모듈 조건을 모두 만족해야 한다.
4
+
5
+ ```typescript
6
+ export function isUsableModulesChain<TModule>(
7
+ modulesChain: TModule[][],
8
+ requiredModulesChain: TModule[][],
9
+ usableModules: TModule[] | undefined,
10
+ ): boolean;
11
+ ```
12
+
13
+ ## Parameters
14
+
15
+ | Param | Type | Description |
16
+ |-------|------|-------------|
17
+ | `modulesChain` | `TModule[][]` | 각 레벨의 OR 조건 모듈 배열 |
18
+ | `requiredModulesChain` | `TModule[][]` | 각 레벨의 AND 조건 모듈 배열 |
19
+ | `usableModules` | `TModule[] \| undefined` | 사용자가 보유한 활성 모듈 목록 |
20
+
21
+ ## Returns
22
+
23
+ `boolean` — 모든 레벨의 조건을 만족하면 `true`. 하나라도 실패하면 `false`.
@@ -0,0 +1,42 @@
1
+ # isUsableModules
2
+
3
+ 단일 항목의 모듈 접근 가능 여부를 판단한다.
4
+
5
+ ```typescript
6
+ export function isUsableModules<TModule>(
7
+ modules: TModule[] | undefined,
8
+ requiredModules: TModule[] | undefined,
9
+ usableModules: TModule[] | undefined,
10
+ ): boolean;
11
+ ```
12
+
13
+ ## Parameters
14
+
15
+ | Param | Type | Description |
16
+ |-------|------|-------------|
17
+ | `modules` | `TModule[] \| undefined` | OR 조건 모듈 목록. 하나라도 `usableModules`에 포함되면 통과 |
18
+ | `requiredModules` | `TModule[] \| undefined` | AND 조건 모듈 목록. 모두 `usableModules`에 포함되어야 통과 |
19
+ | `usableModules` | `TModule[] \| undefined` | 사용자가 보유한 활성 모듈 목록 |
20
+
21
+ ## Returns
22
+
23
+ `boolean` — `modules`와 `requiredModules` 조건을 모두 만족하면 `true`.
24
+
25
+ - `modules`가 `undefined`이거나 빈 배열이면 OR 조건은 자동 통과
26
+ - `requiredModules`가 `undefined`이거나 빈 배열이면 AND 조건은 자동 통과
27
+ - `usableModules`가 `undefined`이면 `modules`가 있을 때 `false`
28
+
29
+ ## Usage
30
+
31
+ ```typescript
32
+ import { isUsableModules } from "@simplysm/service-common";
33
+
34
+ // OR 조건: moduleA 또는 moduleB 중 하나라도 있으면 true
35
+ isUsableModules(["moduleA", "moduleB"], undefined, ["moduleA"]); // true
36
+
37
+ // AND 조건: 모두 있어야 true
38
+ isUsableModules(undefined, ["moduleA", "moduleB"], ["moduleA"]); // false
39
+
40
+ // 모듈 없음: 자동 통과
41
+ isUsableModules(undefined, undefined, undefined); // true
42
+ ```
@@ -0,0 +1,68 @@
1
+ # defineEvent
2
+
3
+ 타입 안전한 서비스 이벤트를 정의하는 팩토리 함수.
4
+
5
+ ```typescript
6
+ export function defineEvent<TInfo = unknown, TData = unknown>(
7
+ eventName: string,
8
+ ): ServiceEventDef<TInfo, TData>;
9
+ ```
10
+
11
+ ## Parameters
12
+
13
+ | Param | Type | Description |
14
+ |-------|------|-------------|
15
+ | `eventName` | `string` | 이벤트 이름 (고유해야 함) |
16
+
17
+ | Type Parameter | Default | Description |
18
+ |---------------|---------|-------------|
19
+ | `TInfo` | `unknown` | 이벤트 필터링 조건의 타입. 구독 시 필터로 사용 |
20
+ | `TData` | `unknown` | 이벤트 페이로드의 타입. 이벤트 발생/수신 시 데이터 타입 |
21
+
22
+ ## Returns
23
+
24
+ `ServiceEventDef<TInfo, TData>` — 이벤트 정의 인스턴스.
25
+
26
+ ## Related Types
27
+
28
+ ### `ServiceEventDef`
29
+
30
+ `defineEvent()`로 생성된 이벤트 정의. `$info`와 `$data`는 런타임에서 사용되지 않는 타입 전용 마커다.
31
+
32
+ ```typescript
33
+ export interface ServiceEventDef<TInfo = unknown, TData = unknown> {
34
+ eventName: string;
35
+ readonly $info: TInfo;
36
+ readonly $data: TData;
37
+ }
38
+ ```
39
+
40
+ | Field | Type | Description |
41
+ |-------|------|-------------|
42
+ | `eventName` | `string` | 이벤트 이름 |
43
+ | `$info` | `TInfo` | 타입 추출 전용 마커 (런타임에서 사용하지 않음). 이벤트 필터링 조건 타입 |
44
+ | `$data` | `TData` | 타입 추출 전용 마커 (런타임에서 사용하지 않음). 이벤트 페이로드 타입 |
45
+
46
+ ## Usage
47
+
48
+ ```typescript
49
+ import { defineEvent } from "@simplysm/service-common";
50
+
51
+ // 서버에서 이벤트 정의 + 타입 export
52
+ export const OrderUpdated = defineEvent<{ orderId: number }, { status: string }>("OrderUpdated");
53
+
54
+ // 서버에서 이벤트 발생 — getEvent() 프록시 방식 (권장)
55
+ const orderEvt = server.getEvent<typeof OrderUpdated>("OrderUpdated");
56
+ await orderEvt.emit((info) => info.orderId === 123, { status: "shipped" });
57
+
58
+ // 클라이언트에서 구독 (import type으로 타입만 가져옴)
59
+ import type { OrderUpdated } from "@server-package";
60
+ const orderEvt = client.getEvent<typeof OrderUpdated>("OrderUpdated");
61
+ const key = await orderEvt.addListener({ orderId: 123 }, async (data) => {
62
+ // data.status는 string으로 타입 추론됨
63
+ });
64
+
65
+ // 직접 호출 방식 (하위 호환)
66
+ await server.emitEvent<typeof OrderUpdated>("OrderUpdated", (info) => info.orderId === 123, { status: "shipped" });
67
+ await client.addListener<typeof OrderUpdated>("OrderUpdated", { orderId: 123 }, async (data) => { /* ... */ });
68
+ ```
@@ -0,0 +1,93 @@
1
+ # createServiceProtocol
2
+
3
+ ServiceProtocol 인스턴스를 생성하는 팩토리 함수.
4
+
5
+ ```typescript
6
+ export function createServiceProtocol(): ServiceProtocol;
7
+ ```
8
+
9
+ 내부에 `LazyGcMap` 기반 청크 누적기를 캡슐화한다. 미완성 메시지는 60초 후 GC로 자동 정리된다. 사용 후 반드시 `dispose()`를 호출하여 GC 타이머를 해제해야 한다.
10
+
11
+ ## Returns
12
+
13
+ `ServiceProtocol` — 인코딩/디코딩/해제 메서드를 포함한 프로토콜 인스턴스.
14
+
15
+ ## Related Types
16
+
17
+ ### `ServiceProtocol`
18
+
19
+ 바이너리 프로토콜 V2 인코더/디코더 인터페이스.
20
+
21
+ ```typescript
22
+ export interface ServiceProtocol {
23
+ encode(uuid: string, message: ServiceMessage): { chunks: Bytes[]; totalSize: number };
24
+ decode<T extends ServiceMessage>(bytes: Bytes): ServiceMessageDecodeResult<T>;
25
+ dispose(): void;
26
+ }
27
+ ```
28
+
29
+ | Method | Parameters | Return | Description |
30
+ |--------|-----------|--------|-------------|
31
+ | `encode` | `uuid: string, message: ServiceMessage` | `{ chunks: Bytes[]; totalSize: number }` | 메시지를 인코딩한다. 3MB 초과 시 300KB 청크로 자동 분할. `totalSize` > 100MB이면 `ArgumentError` 발생 |
32
+ | `decode` | `bytes: Bytes` | `ServiceMessageDecodeResult<T>` | 청크를 디코딩한다. 청크가 모두 도착하면 `complete`, 아니면 `progress` 반환 |
33
+ | `dispose` | 없음 | `void` | 내부 GC 타이머와 청크 누적기를 해제한다. 사용 후 반드시 호출 |
34
+
35
+ 헤더 구조 (28바이트, Big Endian):
36
+
37
+ | Offset | Size | Field |
38
+ |--------|------|-------|
39
+ | 0 | 16 | UUID (바이너리) |
40
+ | 16 | 8 | TotalSize (uint64, 상위 4바이트 = 0) |
41
+ | 24 | 4 | Index (uint32) |
42
+
43
+ ### `ServiceMessageDecodeResult`
44
+
45
+ 메시지 디코딩 결과 유니언 타입. `type` 필드로 분기한다.
46
+
47
+ ```typescript
48
+ export type ServiceMessageDecodeResult<TMessage extends ServiceMessage> =
49
+ | { type: "complete"; uuid: string; message: TMessage }
50
+ | { type: "progress"; uuid: string; totalSize: number; completedSize: number };
51
+ ```
52
+
53
+ **Variant: `complete`** — 모든 청크가 도착하여 메시지 재조립이 완료된 상태.
54
+
55
+ | Field | Type | Description |
56
+ |-------|------|-------------|
57
+ | `type` | `"complete"` | discriminant |
58
+ | `uuid` | `string` | 메시지 UUID |
59
+ | `message` | `TMessage` | 재조립된 메시지 |
60
+
61
+ **Variant: `progress`** — 청크 메시지 수신 진행 중.
62
+
63
+ | Field | Type | Description |
64
+ |-------|------|-------------|
65
+ | `type` | `"progress"` | discriminant |
66
+ | `uuid` | `string` | 메시지 UUID |
67
+ | `totalSize` | `number` | 전체 크기 (바이트) |
68
+ | `completedSize` | `number` | 수신 완료된 크기 (바이트) |
69
+
70
+ ## Usage
71
+
72
+ ```typescript
73
+ import { createServiceProtocol } from "@simplysm/service-common";
74
+
75
+ const protocol = createServiceProtocol();
76
+
77
+ // 메시지 인코딩 (3MB 초과 시 자동 청킹)
78
+ const { chunks, totalSize } = protocol.encode(uuid, {
79
+ name: "OrmService.connect",
80
+ body: [{ configName: "default" }],
81
+ });
82
+
83
+ // 메시지 디코딩 (청크 자동 재조립)
84
+ for (const chunk of chunks) {
85
+ const result = protocol.decode(chunk);
86
+ if (result.type === "complete") {
87
+ // result.message: 재조립된 메시지
88
+ }
89
+ }
90
+
91
+ // 사용 후 반드시 해제
92
+ protocol.dispose();
93
+ ```
@@ -0,0 +1,21 @@
1
+ # PROTOCOL_CONFIG
2
+
3
+ 서비스 프로토콜 설정 상수.
4
+
5
+ ```typescript
6
+ export const PROTOCOL_CONFIG = {
7
+ MAX_TOTAL_SIZE: 100 * 1024 * 1024,
8
+ SPLIT_MESSAGE_SIZE: 3 * 1024 * 1024,
9
+ CHUNK_SIZE: 300 * 1024,
10
+ GC_INTERVAL: 10 * 1000,
11
+ EXPIRE_TIME: 60 * 1000,
12
+ } as const;
13
+ ```
14
+
15
+ | Field | Type | Description |
16
+ |-------|------|-------------|
17
+ | `MAX_TOTAL_SIZE` | `number` | 단일 메시지의 최대 허용 크기 (100MB). 초과 시 `ArgumentError` 발생 |
18
+ | `SPLIT_MESSAGE_SIZE` | `number` | 이 크기를 초과하면 자동으로 청크 분할 (3MB) |
19
+ | `CHUNK_SIZE` | `number` | 분할된 각 청크의 크기 (300KB) |
20
+ | `GC_INTERVAL` | `number` | 내부 청크 누적기의 가비지 컬렉션 주기 (10초, 밀리초 단위) |
21
+ | `EXPIRE_TIME` | `number` | 미완성 청크 메시지의 만료 시간 (60초). 이 시간 내에 모든 청크가 도착하지 않으면 제거 |
@@ -0,0 +1,23 @@
1
+ # ServiceAddEventListenerMessage
2
+
3
+ 클라이언트가 보내는 이벤트 리스너 추가 메시지.
4
+
5
+ ```typescript
6
+ export interface ServiceAddEventListenerMessage {
7
+ name: "evt:add";
8
+ body: {
9
+ key: string;
10
+ name: string;
11
+ info: unknown;
12
+ };
13
+ }
14
+ ```
15
+
16
+ ## Members
17
+
18
+ | Field | Type | Description |
19
+ |-------|------|-------------|
20
+ | `name` | `"evt:add"` | 고정 문자열 discriminant |
21
+ | `body.key` | `string` | 리스너 키 (UUID). `ServiceRemoveEventListenerMessage`에서 사용 |
22
+ | `body.name` | `string` | 이벤트 이름 (`ServiceEventDef.eventName`) |
23
+ | `body.info` | `unknown` | 이벤트 발생 시 필터링을 위한 추가 리스너 정보 |
@@ -0,0 +1,17 @@
1
+ # ServiceAuthMessage
2
+
3
+ 클라이언트가 보내는 인증 메시지.
4
+
5
+ ```typescript
6
+ export interface ServiceAuthMessage {
7
+ name: "auth";
8
+ body: string;
9
+ }
10
+ ```
11
+
12
+ ## Members
13
+
14
+ | Field | Type | Description |
15
+ |-------|------|-------------|
16
+ | `name` | `"auth"` | 고정 문자열 discriminant |
17
+ | `body` | `string` | 인증 토큰 |
@@ -0,0 +1,21 @@
1
+ # ServiceEmitEventMessage
2
+
3
+ 클라이언트가 보내는 이벤트 발생 메시지.
4
+
5
+ ```typescript
6
+ export interface ServiceEmitEventMessage {
7
+ name: "evt:emit";
8
+ body: {
9
+ keys: string[];
10
+ data: unknown;
11
+ };
12
+ }
13
+ ```
14
+
15
+ ## Members
16
+
17
+ | Field | Type | Description |
18
+ |-------|------|-------------|
19
+ | `name` | `"evt:emit"` | 고정 문자열 discriminant |
20
+ | `body.keys` | `string[]` | 대상 리스너 키 목록 |
21
+ | `body.data` | `unknown` | 이벤트 데이터 |
@@ -0,0 +1,29 @@
1
+ # ServiceErrorMessage
2
+
3
+ 서버가 보내는 에러 알림 메시지.
4
+
5
+ ```typescript
6
+ export interface ServiceErrorMessage {
7
+ name: "error";
8
+ body: {
9
+ name: string;
10
+ message: string;
11
+ code: string;
12
+ stack?: string;
13
+ detail?: unknown;
14
+ cause?: unknown;
15
+ };
16
+ }
17
+ ```
18
+
19
+ ## Members
20
+
21
+ | Field | Type | Description |
22
+ |-------|------|-------------|
23
+ | `name` | `"error"` | 고정 문자열 discriminant |
24
+ | `body.name` | `string` | 에러 이름 (클래스명) |
25
+ | `body.message` | `string` | 에러 메시지 |
26
+ | `body.code` | `string` | 에러 코드 |
27
+ | `body.stack` | `string?` | 스택 트레이스 (선택) |
28
+ | `body.detail` | `unknown?` | 추가 상세 정보 (선택) |
29
+ | `body.cause` | `unknown?` | 원인 에러 (선택) |