@simplysm/sd-claude 14.0.50 β†’ 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,21 @@
1
+ # ServiceEventMessage
2
+
3
+ μ„œλ²„κ°€ λ³΄λ‚΄λŠ” 이벀트 μ•Œλ¦Ό λ©”μ‹œμ§€.
4
+
5
+ ```typescript
6
+ export interface ServiceEventMessage {
7
+ name: "evt:on";
8
+ body: {
9
+ keys: string[];
10
+ data: unknown;
11
+ };
12
+ }
13
+ ```
14
+
15
+ ## Members
16
+
17
+ | Field | Type | Description |
18
+ |-------|------|-------------|
19
+ | `name` | `"evt:on"` | κ³ μ • λ¬Έμžμ—΄ discriminant |
20
+ | `body.keys` | `string[]` | λŒ€μƒ λ¦¬μŠ€λ„ˆ ν‚€ λͺ©λ‘ |
21
+ | `body.data` | `unknown` | 이벀트 데이터 |
@@ -0,0 +1,19 @@
1
+ # ServiceGetEventListenerInfosMessage
2
+
3
+ ν΄λΌμ΄μ–ΈνŠΈκ°€ λ³΄λ‚΄λŠ” 이벀트 λ¦¬μŠ€λ„ˆ 정보 λͺ©λ‘ μš”μ²­ λ©”μ‹œμ§€.
4
+
5
+ ```typescript
6
+ export interface ServiceGetEventListenerInfosMessage {
7
+ name: "evt:gets";
8
+ body: {
9
+ name: string;
10
+ };
11
+ }
12
+ ```
13
+
14
+ ## Members
15
+
16
+ | Field | Type | Description |
17
+ |-------|------|-------------|
18
+ | `name` | `"evt:gets"` | κ³ μ • λ¬Έμžμ—΄ discriminant |
19
+ | `body.name` | `string` | μ‘°νšŒν•  이벀트 이름 |
@@ -0,0 +1,52 @@
1
+ # ServiceMessage
2
+
3
+ λͺ¨λ“  μ„œλΉ„μŠ€ λ©”μ‹œμ§€μ˜ μœ λ‹ˆμ–Έ νƒ€μž…. ν΄λΌμ΄μ–ΈνŠΈΒ·μ„œλ²„ μ–‘λ°©ν–₯ λ©”μ‹œμ§€λ₯Ό λͺ¨λ‘ ν¬ν•¨ν•œλ‹€.
4
+
5
+ ```typescript
6
+ export type ServiceMessage =
7
+ | ServiceRequestMessage
8
+ | ServiceAuthMessage
9
+ | ServiceProgressMessage
10
+ | ServiceResponseMessage
11
+ | ServiceErrorMessage
12
+ | ServiceAddEventListenerMessage
13
+ | ServiceRemoveEventListenerMessage
14
+ | ServiceGetEventListenerInfosMessage
15
+ | ServiceEmitEventMessage
16
+ | ServiceEventMessage;
17
+ ```
18
+
19
+ ## Related Types
20
+
21
+ ### `ServiceClientMessage`
22
+
23
+ ν΄λΌμ΄μ–ΈνŠΈ β†’ μ„œλ²„ λ©”μ‹œμ§€ μœ λ‹ˆμ–Έ.
24
+
25
+ ```typescript
26
+ export type ServiceClientMessage =
27
+ | ServiceRequestMessage
28
+ | ServiceAuthMessage
29
+ | ServiceAddEventListenerMessage
30
+ | ServiceRemoveEventListenerMessage
31
+ | ServiceGetEventListenerInfosMessage
32
+ | ServiceEmitEventMessage;
33
+ ```
34
+
35
+ ### `ServiceServerMessage`
36
+
37
+ μ„œλ²„ β†’ ν΄λΌμ΄μ–ΈνŠΈ λ©”μ‹œμ§€ μœ λ‹ˆμ–Έ.
38
+
39
+ ```typescript
40
+ export type ServiceServerMessage =
41
+ | ServiceResponseMessage
42
+ | ServiceErrorMessage
43
+ | ServiceEventMessage;
44
+ ```
45
+
46
+ ### `ServiceServerRawMessage`
47
+
48
+ μ„œλ²„κ°€ λ³΄λ‚΄λŠ” λͺ¨λ“  λ©”μ‹œμ§€ (μ§„ν–‰ μƒνƒœ 포함).
49
+
50
+ ```typescript
51
+ export type ServiceServerRawMessage = ServiceProgressMessage | ServiceServerMessage;
52
+ ```
@@ -0,0 +1,21 @@
1
+ # ServiceProgressMessage
2
+
3
+ μ„œλ²„κ°€ λ³΄λ‚΄λŠ” 청크 μˆ˜μ‹  μ§„ν–‰ μƒνƒœ μ•Œλ¦Ό λ©”μ‹œμ§€.
4
+
5
+ ```typescript
6
+ export interface ServiceProgressMessage {
7
+ name: "progress";
8
+ body: {
9
+ totalSize: number;
10
+ completedSize: number;
11
+ };
12
+ }
13
+ ```
14
+
15
+ ## Members
16
+
17
+ | Field | Type | Description |
18
+ |-------|------|-------------|
19
+ | `name` | `"progress"` | κ³ μ • λ¬Έμžμ—΄ discriminant |
20
+ | `body.totalSize` | `number` | 전체 λ©”μ‹œμ§€ 크기 (λ°”μ΄νŠΈ) |
21
+ | `body.completedSize` | `number` | ν˜„μž¬κΉŒμ§€ μˆ˜μ‹  μ™„λ£Œλœ 크기 (λ°”μ΄νŠΈ) |
@@ -0,0 +1,19 @@
1
+ # ServiceRemoveEventListenerMessage
2
+
3
+ ν΄λΌμ΄μ–ΈνŠΈκ°€ λ³΄λ‚΄λŠ” 이벀트 λ¦¬μŠ€λ„ˆ 제거 λ©”μ‹œμ§€.
4
+
5
+ ```typescript
6
+ export interface ServiceRemoveEventListenerMessage {
7
+ name: "evt:remove";
8
+ body: {
9
+ key: string;
10
+ };
11
+ }
12
+ ```
13
+
14
+ ## Members
15
+
16
+ | Field | Type | Description |
17
+ |-------|------|-------------|
18
+ | `name` | `"evt:remove"` | κ³ μ • λ¬Έμžμ—΄ discriminant |
19
+ | `body.key` | `string` | μ œκ±°ν•  λ¦¬μŠ€λ„ˆ ν‚€ (UUID) |
@@ -0,0 +1,17 @@
1
+ # ServiceRequestMessage
2
+
3
+ ν΄λΌμ΄μ–ΈνŠΈκ°€ λ³΄λ‚΄λŠ” μ„œλΉ„μŠ€ λ©”μ„œλ“œ μš”μ²­ λ©”μ‹œμ§€.
4
+
5
+ ```typescript
6
+ export interface ServiceRequestMessage {
7
+ name: `${string}.${string}`;
8
+ body: unknown[];
9
+ }
10
+ ```
11
+
12
+ ## Members
13
+
14
+ | Field | Type | Description |
15
+ |-------|------|-------------|
16
+ | `name` | `` `${string}.${string}` `` | μ„œλΉ„μŠ€λͺ….λ©”μ„œλ“œλͺ… ν˜•μ‹ (예: `"OrmService.connect"`) |
17
+ | `body` | `unknown[]` | λ©”μ„œλ“œ λ§€κ°œλ³€μˆ˜ λ°°μ—΄ |
@@ -0,0 +1,17 @@
1
+ # ServiceResponseMessage
2
+
3
+ μ„œλ²„κ°€ λ³΄λ‚΄λŠ” μ„œλΉ„μŠ€ λ©”μ„œλ“œ 응닡 λ©”μ‹œμ§€.
4
+
5
+ ```typescript
6
+ export interface ServiceResponseMessage {
7
+ name: "response";
8
+ body?: unknown;
9
+ }
10
+ ```
11
+
12
+ ## Members
13
+
14
+ | Field | Type | Description |
15
+ |-------|------|-------------|
16
+ | `name` | `"response"` | κ³ μ • λ¬Έμžμ—΄ discriminant |
17
+ | `body` | `unknown?` | λ©”μ„œλ“œ μ‹€ν–‰ κ²°κ³Ό (μ—†μœΌλ©΄ void) |
@@ -0,0 +1,15 @@
1
+ # AppStructureService
2
+
3
+ μ„œλ²„μ— λ“±λ‘λœ μ•± ꡬ쑰 ν•­λͺ©μ„ ν΄λΌμ΄μ–ΈνŠΈλͺ… κΈ°μ€€ 맡으둜 μ‘°νšŒν•˜λŠ” μ„œλΉ„μŠ€ μΈν„°νŽ˜μ΄μŠ€.
4
+
5
+ ```typescript
6
+ export interface AppStructureService {
7
+ getItems(): Record<string, AppStructureItem[]>;
8
+ }
9
+ ```
10
+
11
+ ## Members
12
+
13
+ | Method | Parameters | Return | Description |
14
+ |--------|-----------|--------|-------------|
15
+ | `getItems` | μ—†μŒ | `Record<string, AppStructureItem[]>` | ν΄λΌμ΄μ–ΈνŠΈλͺ…을 ν‚€λ‘œ, ν•΄λ‹Ή ν΄λΌμ΄μ–ΈνŠΈμ˜ μ•± ꡬ쑰 ν•­λͺ© 배열을 κ°’μœΌλ‘œ ν•˜λŠ” λ§΅ λ°˜ν™˜ |
@@ -0,0 +1,20 @@
1
+ # AutoUpdateService
2
+
3
+ ν΄λΌμ΄μ–ΈνŠΈ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μ΅œμ‹  버전 정보λ₯Ό μ‘°νšŒν•˜λŠ” μ„œλΉ„μŠ€ μΈν„°νŽ˜μ΄μŠ€.
4
+
5
+ ```typescript
6
+ export interface AutoUpdateService {
7
+ getLastVersion(platform: string): Promise<
8
+ | { version: string; downloadPath: string }
9
+ | undefined
10
+ >;
11
+ }
12
+ ```
13
+
14
+ ## Members
15
+
16
+ | Method | Parameters | Return | Description |
17
+ |--------|-----------|--------|-------------|
18
+ | `getLastVersion` | `platform: string` | `Promise<{ version: string; downloadPath: string } \| undefined>` | μ§€μ •λœ ν”Œλž«νΌμ˜ μ΅œμ‹  버전 정보 쑰회. 버전이 μ—†μœΌλ©΄ `undefined` |
19
+
20
+ `platform` μ˜ˆμ‹œ: `"win32"`, `"darwin"`, `"linux"`
@@ -0,0 +1,61 @@
1
+ # OrmService
2
+
3
+ λ°μ΄ν„°λ² μ΄μŠ€ μ—°κ²°, νŠΈλžœμž­μ…˜ 관리, 쿼리 싀행을 μ œκ³΅ν•˜λŠ” μ„œλΉ„μŠ€ μΈν„°νŽ˜μ΄μŠ€. MySQL, MSSQL, PostgreSQL을 μ§€μ›ν•œλ‹€. 이 νŒ¨ν‚€μ§€μ—λŠ” κ΅¬ν˜„μ²΄κ°€ μ—†μœΌλ©°, μ„œλ²„(`service-server`)와 ν΄λΌμ΄μ–ΈνŠΈ(`service-client`)κ°€ κ³΅μœ ν•˜λŠ” νƒ€μž… 계약이닀.
4
+
5
+ ```typescript
6
+ export interface OrmService {
7
+ getInfo(opt: DbConnOptions & { configName: string }): Promise<{
8
+ dialect: Dialect;
9
+ database?: string;
10
+ schema?: string;
11
+ }>;
12
+ connect(opt: DbConnOptions & { configName: string }): Promise<number>;
13
+ close(connId: number): Promise<void>;
14
+ beginTransaction(connId: number, isolationLevel?: IsolationLevel): Promise<void>;
15
+ commitTransaction(connId: number): Promise<void>;
16
+ rollbackTransaction(connId: number): Promise<void>;
17
+ executeParametrized(connId: number, query: string, params?: unknown[]): Promise<unknown[][]>;
18
+ executeDefs(
19
+ connId: number,
20
+ defs: QueryDef[],
21
+ options?: (ResultMeta | undefined)[],
22
+ ): Promise<unknown[][]>;
23
+ bulkInsert(
24
+ connId: number,
25
+ tableName: string,
26
+ columnDefs: Record<string, ColumnMeta>,
27
+ records: Record<string, unknown>[],
28
+ ): Promise<void>;
29
+ }
30
+ ```
31
+
32
+ ## Members
33
+
34
+ | Method | Parameters | Return | Description |
35
+ |--------|-----------|--------|-------------|
36
+ | `getInfo` | `opt: DbConnOptions & { configName: string }` | `Promise<{ dialect: Dialect; database?: string; schema?: string }>` | DB μ—°κ²° 정보 쑰회 |
37
+ | `connect` | `opt: DbConnOptions & { configName: string }` | `Promise<number>` | DB 연결을 μƒμ„±ν•˜κ³  μ—°κ²° ID λ°˜ν™˜ |
38
+ | `close` | `connId: number` | `Promise<void>` | μ—°κ²° μ’…λ£Œ |
39
+ | `beginTransaction` | `connId: number, isolationLevel?: IsolationLevel` | `Promise<void>` | νŠΈλžœμž­μ…˜ μ‹œμž‘ |
40
+ | `commitTransaction` | `connId: number` | `Promise<void>` | νŠΈλžœμž­μ…˜ 컀밋 |
41
+ | `rollbackTransaction` | `connId: number` | `Promise<void>` | νŠΈλžœμž­μ…˜ λ‘€λ°± |
42
+ | `executeParametrized` | `connId: number, query: string, params?: unknown[]` | `Promise<unknown[][]>` | νŒŒλΌλ―Έν„° 바인딩 쿼리 μ‹€ν–‰ |
43
+ | `executeDefs` | `connId: number, defs: QueryDef[], options?: (ResultMeta \| undefined)[]` | `Promise<unknown[][]>` | QueryDef λ°°μ—΄λ‘œ 쿼리 μ‹€ν–‰ |
44
+ | `bulkInsert` | `connId: number, tableName: string, columnDefs: Record<string, ColumnMeta>, records: Record<string, unknown>[]` | `Promise<void>` | λŒ€λŸ‰ μ‚½μž… |
45
+
46
+ μ‚¬μš© μˆœμ„œ: `connect()` β†’ `beginTransaction()` β†’ `executeDefs()`/`executeParametrized()` β†’ `commitTransaction()`/`rollbackTransaction()` β†’ `close()`
47
+
48
+ ## Related Types
49
+
50
+ ### `DbConnOptions`
51
+
52
+ λ°μ΄ν„°λ² μ΄μŠ€ μ—°κ²° μ˜΅μ…˜.
53
+
54
+ ```typescript
55
+ export type DbConnOptions = { configName?: string; config?: Record<string, unknown> };
56
+ ```
57
+
58
+ | Field | Type | Description |
59
+ |-------|------|-------------|
60
+ | `configName` | `string?` | μ„œλ²„μ— λ“±λ‘λœ DB μ„€μ • 이름 |
61
+ | `config` | `Record<string, unknown>?` | 직접 μ§€μ •ν•˜λŠ” DB μ—°κ²° μ„€μ • |
@@ -0,0 +1,19 @@
1
+ # ServiceUploadResult
2
+
3
+ 파일 μ—…λ‘œλ“œ κ²°κ³Ό. μ„œλ²„μ— μ—…λ‘œλ“œλœ 파일의 정보λ₯Ό ν¬ν•¨ν•œλ‹€.
4
+
5
+ ```typescript
6
+ export interface ServiceUploadResult {
7
+ path: string;
8
+ filename: string;
9
+ size: number;
10
+ }
11
+ ```
12
+
13
+ ## Members
14
+
15
+ | Field | Type | Description |
16
+ |-------|------|-------------|
17
+ | `path` | `string` | μ„œλ²„ λ‚΄ μ €μž₯ 경둜 |
18
+ | `filename` | `string` | 원본 파일λͺ… |
19
+ | `size` | `number` | 파일 크기 (λ°”μ΄νŠΈ) |
@@ -0,0 +1,162 @@
1
+ # @simplysm/service-server
2
+
3
+ > Fastify 기반 μ„œλΉ„μŠ€ μ„œλ²„. WebSocket/HTTP 이쀑 전솑, JWT 인증, ORM λΈŒλ¦¬μ§€, μžλ™ μ—…λ°μ΄νŠΈλ₯Ό μ œκ³΅ν•œλ‹€.
4
+ > Node.js λŸ°νƒ€μž„ μ „μš©. `@simplysm/service-common`κ³Ό `@simplysm/core-common`에 μ˜μ‘΄ν•œλ‹€.
5
+
6
+ ## Installation
7
+
8
+ ```bash
9
+ npm install @simplysm/service-server
10
+ ```
11
+
12
+ ## ν•˜λ €λŠ” μž‘μ—… β†’ λ¨Όμ € 읽을 파일
13
+
14
+ | μž‘μ—… | λ¨Όμ € 읽을 파일 |
15
+ |------|----------------|
16
+ | μ„œλ²„ 생성 및 μ‹œμž‘ | [`ServiceServer`](./main/service-server.md) |
17
+ | μ„œλΉ„μŠ€ μ •μ˜ | [`defineService`](./core/define-service.md) |
18
+ | 인증 적용 | [`auth`](./core/auth.md) |
19
+ | JWT 토큰 λ°œκΈ‰/검증 | [`signJwt`](./auth/sign-jwt.md), [`verifyJwt`](./auth/verify-jwt.md) |
20
+ | 이벀트 λΈŒλ‘œλ“œμΊμŠ€νŠΈ | [`ServiceServer`](./main/service-server.md) (`getEvent` / `emitEvent`) |
21
+ | ORM μ„œλΉ„μŠ€ 등둝 | [`OrmService`](./services/orm-service.md) |
22
+ | μžλ™ μ—…λ°μ΄νŠΈ μ„œλΉ„μŠ€ 등둝 | [`AutoUpdateService`](./services/auto-update-service.md) |
23
+ | 파일 μ—…λ‘œλ“œ 처리 | [`handleUpload`](./transport-http/handle-upload.md) |
24
+ | μ„€μ • 파일 읽기 | [`getConfig`](./utils/get-config.md) |
25
+
26
+ ## API Overview
27
+
28
+ ### Main
29
+
30
+ | Entry | Kind | μ–Έμ œ μ“°λ‚˜ |
31
+ |-------|------|-----------|
32
+ | [`ServiceServer`](./main/service-server.md) | class | μ„œλ²„λ₯Ό μƒμ„±ν•˜κ³  μ‹œμž‘ν•  λ•Œ. WebSocket/HTTP λΌμš°νŒ…, JWT 인증, 이벀트 λΈŒλ‘œλ“œμΊμŠ€νŠΈ, graceful shutdown을 μ²˜λ¦¬ν•œλ‹€ |
33
+ | [`ServerEventProxy`](./main/service-server.md#servereventproxy) | interface | `getEvent()`의 λ°˜ν™˜ νƒ€μž…μ„ μ°Έμ‘°ν•  λ•Œ |
34
+ | [`createServiceServer`](./main/create-service-server.md) | function | `new ServiceServer()` λŒ€μ‹  νŒ©ν† λ¦¬ ν•¨μˆ˜λ‘œ μ„œλ²„λ₯Ό 생성할 λ•Œ |
35
+
36
+ ### Types
37
+
38
+ | Entry | Kind | μ–Έμ œ μ“°λ‚˜ |
39
+ |-------|------|-----------|
40
+ | [`ServiceServerOptions`](./types/service-server-options.md) | interface | μ„œλ²„ 생성 μ˜΅μ…˜μ„ ꡬ성할 λ•Œ (rootPath, port, ssl, auth, services) |
41
+
42
+ ### Auth
43
+
44
+ | Entry | Kind | μ–Έμ œ μ“°λ‚˜ |
45
+ |-------|------|-----------|
46
+ | [`AuthTokenPayload`](./auth/auth-token-payload.md) | interface | JWT νŽ˜μ΄λ‘œλ“œ νƒ€μž…μ„ μ°Έμ‘°ν•  λ•Œ |
47
+ | [`signJwt`](./auth/sign-jwt.md) | function | μ„œλ²„ μ™ΈλΆ€μ—μ„œ 직접 JWT 토큰을 μ„œλͺ…ν•  λ•Œ. μΌλ°˜μ μœΌλ‘œλŠ” `server.signAuthToken()` μ‚¬μš©μ„ ꢌμž₯ |
48
+ | [`verifyJwt`](./auth/verify-jwt.md) | function | μ„œλ²„ μ™ΈλΆ€μ—μ„œ 직접 JWT 토큰을 검증할 λ•Œ. μΌλ°˜μ μœΌλ‘œλŠ” `server.verifyAuthToken()` μ‚¬μš©μ„ ꢌμž₯ |
49
+ | [`decodeJwt`](./auth/verify-jwt.md#decodejwt) | function | 검증 없이 토큰 λ‚΄μš©μ„ 확인할 λ•Œ (디버깅 λ“±) |
50
+
51
+ ### Core
52
+
53
+ | Entry | Kind | μ–Έμ œ μ“°λ‚˜ |
54
+ |-------|------|-----------|
55
+ | [`defineService`](./core/define-service.md) | function | μ„œλΉ„μŠ€λ₯Ό μ •μ˜ν•  λ•Œ. 이름과 νŒ©ν† λ¦¬ ν•¨μˆ˜λ‘œ κ΅¬μ„±ν•œλ‹€ |
56
+ | [`ServiceDefinition`](./core/define-service.md#servicedefinition) | interface | μ„œλΉ„μŠ€ μ •μ˜ νƒ€μž…μ„ μ°Έμ‘°ν•  λ•Œ |
57
+ | [`ServiceMethods`](./core/define-service.md#servicemethods) | type | ν΄λΌμ΄μ–ΈνŠΈ μΈ‘ νƒ€μž… 곡유λ₯Ό μœ„ν•΄ μ„œλΉ„μŠ€ λ©”μ„œλ“œ μ‹œκ·Έλ‹ˆμ²˜λ₯Ό μΆ”μΆœν•  λ•Œ |
58
+ | [`auth`](./core/auth.md) | function | μ„œλΉ„μŠ€ λ˜λŠ” λ©”μ„œλ“œμ— 인증을 μš”κ΅¬ν•  λ•Œ |
59
+ | [`getServiceAuthPermissions`](./core/auth.md#getserviceauthpermissions) | function | `auth()`둜 λž˜ν•‘λœ ν•¨μˆ˜μ˜ κΆŒν•œ 배열을 ν”„λ‘œκ·Έλž˜λ°μ μœΌλ‘œ 읽을 λ•Œ |
60
+ | [`ServiceContext`](./core/service-context.md) | interface | μ„œλΉ„μŠ€ νŒ©ν† λ¦¬μ—μ„œ μ»¨ν…μŠ€νŠΈ νƒ€μž…μ„ μ°Έμ‘°ν•  λ•Œ |
61
+ | [`createServiceContext`](./core/service-context.md#createservicecontext) | function | ν…ŒμŠ€νŠΈ λ“±μ—μ„œ `ServiceContext`λ₯Ό 직접 생성할 λ•Œ |
62
+ | [`executeServiceMethod`](./core/execute-service-method.md) | function | μ»€μŠ€ν…€ 전솑 κ³„μΈ΅μ—μ„œ μ„œλΉ„μŠ€ μ‹€ν–‰ νŒŒμ΄ν”„λΌμΈμ„ 직접 ν˜ΈμΆœν•  λ•Œ |
63
+
64
+ ### Transport - Socket
65
+
66
+ | Entry | Kind | μ–Έμ œ μ“°λ‚˜ |
67
+ |-------|------|-----------|
68
+ | [`WebSocketHandler`](./transport-socket/websocket-handler.md) | interface | WebSocket λ©”μ‹œμ§€ λΌμš°νŒ… 및 이벀트 λΈŒλ‘œλ“œμΊμŠ€νŠΈ λ™μž‘μ„ 이해할 λ•Œ |
69
+ | [`createWebSocketHandler`](./transport-socket/websocket-handler.md#createwebsockethandler) | function | μ»€μŠ€ν…€ WebSocket ν•Έλ“€λŸ¬λ₯Ό 생성할 λ•Œ |
70
+ | [`ServiceSocket`](./transport-socket/service-socket.md) | interface | WebSocket μ—°κ²° 좔상화λ₯Ό μ°Έμ‘°ν•  λ•Œ. `ServiceContext.socket`의 νƒ€μž…μ΄λ‹€ |
71
+ | [`createServiceSocket`](./transport-socket/service-socket.md#createservicesocket) | function | ν…ŒμŠ€νŠΈ λ“±μ—μ„œ `ServiceSocket`을 직접 생성할 λ•Œ |
72
+
73
+ ### Transport - HTTP
74
+
75
+ | Entry | Kind | μ–Έμ œ μ“°λ‚˜ |
76
+ |-------|------|-----------|
77
+ | [`handleHttpRequest`](./transport-http/handle-http-request.md) | function | HTTP API μš”μ²­ 처리 λ™μž‘μ„ 이해할 λ•Œ. `ServiceServer`κ°€ λ‚΄λΆ€μ μœΌλ‘œ μ‚¬μš©ν•œλ‹€ |
78
+ | [`handleUpload`](./transport-http/handle-upload.md) | function | 파일 μ—…λ‘œλ“œ 처리 λ™μž‘μ„ 이해할 λ•Œ. `ServiceServer`κ°€ λ‚΄λΆ€μ μœΌλ‘œ μ‚¬μš©ν•œλ‹€ |
79
+ | [`handleStaticFile`](./transport-http/handle-static-file.md) | function | 정적 파일 μ„œλΉ™ λ™μž‘μ„ 이해할 λ•Œ. `ServiceServer`κ°€ λ‚΄λΆ€μ μœΌλ‘œ μ‚¬μš©ν•œλ‹€ |
80
+
81
+ ### Protocol
82
+
83
+ | Entry | Kind | μ–Έμ œ μ“°λ‚˜ |
84
+ |-------|------|-----------|
85
+ | [`ServerProtocolWrapper`](./protocol/server-protocol-wrapper.md) | interface | ν”„λ‘œν† μ½œ 인코딩/λ””μ½”λ”© 래퍼의 λ™μž‘μ„ 이해할 λ•Œ. worker μŠ€λ ˆλ“œ μžλ™ μœ„μž„ 기쀀을 확인할 λ•Œ |
86
+ | [`createServerProtocolWrapper`](./protocol/server-protocol-wrapper.md#createserverprotocolwrapper) | function | μ»€μŠ€ν…€ ν”„λ‘œν† μ½œ 래퍼λ₯Ό 생성할 λ•Œ |
87
+
88
+ ### Services
89
+
90
+ | Entry | Kind | μ–Έμ œ μ“°λ‚˜ |
91
+ |-------|------|-----------|
92
+ | [`OrmService`](./services/orm-service.md) | const | DB 연결을 μ„œλΉ„μŠ€ κ³„μΈ΅μ—μ„œ μ œκ³΅ν•  λ•Œ. WebSocket μ „μš©, 인증 ν•„μˆ˜ |
93
+ | [`OrmServiceType`](./services/orm-service.md#ormservicetype) | type | ν΄λΌμ΄μ–ΈνŠΈμ—μ„œ ORM μ„œλΉ„μŠ€ νƒ€μž…μ„ μ°Έμ‘°ν•  λ•Œ |
94
+ | [`AutoUpdateService`](./services/auto-update-service.md) | const | ν΄λΌμ΄μ–ΈνŠΈ μ•± μžλ™ μ—…λ°μ΄νŠΈλ₯Ό μ œκ³΅ν•  λ•Œ |
95
+ | [`AutoUpdateServiceType`](./services/auto-update-service.md#autoupdateservicetype) | type | ν΄λΌμ΄μ–ΈνŠΈμ—μ„œ μžλ™ μ—…λ°μ΄νŠΈ μ„œλΉ„μŠ€ νƒ€μž…μ„ μ°Έμ‘°ν•  λ•Œ |
96
+ | [`AppStructureService`](./services/app-structure-service.md) | function | μ•± ꡬ쑰 정보λ₯Ό ν΄λΌμ΄μ–ΈνŠΈμ— μ œκ³΅ν•  λ•Œ |
97
+ | [`AppStructureServiceType`](./services/app-structure-service.md#appstructureservicetype) | type | ν΄λΌμ΄μ–ΈνŠΈμ—μ„œ μ•± ꡬ쑰 μ„œλΉ„μŠ€ νƒ€μž…μ„ μ°Έμ‘°ν•  λ•Œ |
98
+
99
+ ### Utils
100
+
101
+ | Entry | Kind | μ–Έμ œ μ“°λ‚˜ |
102
+ |-------|------|-----------|
103
+ | [`getConfig`](./utils/get-config.md) | function | `.config.json` νŒŒμΌμ„ 캐싱 및 μžλ™ λ¦¬λ‘œλ“œλ‘œ 읽을 λ•Œ |
104
+
105
+ ### Legacy
106
+
107
+ | Entry | Kind | μ–Έμ œ μ“°λ‚˜ |
108
+ |-------|------|-----------|
109
+ | [`handleV1Connection`](./legacy/handle-v1-connection.md) | function | V1 WebSocket ν”„λ‘œν† μ½œ ν˜Έν™˜μ΄ ν•„μš”ν•  λ•Œ. μžλ™ μ—…λ°μ΄νŠΈλ§Œ μ§€μ›ν•œλ‹€ |
110
+
111
+ ## Usage Examples
112
+
113
+ ### μ„œλ²„ 생성 및 μ‹œμž‘
114
+
115
+ ```typescript
116
+ import { createServiceServer, defineService, auth } from "@simplysm/service-server";
117
+
118
+ const HealthService = defineService("Health", (ctx) => ({
119
+ check: () => ({ status: "ok" }),
120
+ }));
121
+
122
+ const UserService = defineService("User", auth((ctx) => ({
123
+ getProfile: () => ctx.authInfo,
124
+ })));
125
+
126
+ const server = createServiceServer<{ userId: string }>({
127
+ rootPath: "/app",
128
+ port: 3000,
129
+ auth: { jwtSecret: "my-secret" },
130
+ services: [HealthService, UserService],
131
+ });
132
+
133
+ await server.listen();
134
+ ```
135
+
136
+ ### JWT 토큰 λ°œκΈ‰ 및 검증
137
+
138
+ ```typescript
139
+ const token = await server.signAuthToken({
140
+ roles: ["admin"],
141
+ data: { userId: "123" },
142
+ });
143
+
144
+ const payload = await server.verifyAuthToken(token);
145
+ // payload.data.userId === "123"
146
+ ```
147
+
148
+ ### 이벀트 λΈŒλ‘œλ“œμΊμŠ€νŠΈ
149
+
150
+ ```typescript
151
+ import { defineEvent } from "@simplysm/service-common";
152
+
153
+ export const UserUpdatedEvent = defineEvent<{ userId: string }, { name: string }>("UserUpdated");
154
+
155
+ const userUpdatedEvt = server.getEvent<typeof UserUpdatedEvent>("UserUpdated");
156
+ await userUpdatedEvt.emit((info) => info.userId === "123", { name: "μƒˆ 이름" });
157
+ ```
158
+
159
+ ## 이 νŒ¨ν‚€μ§€λ₯Ό μ“°μ§€ 말아야 ν•  λ•Œ
160
+
161
+ - λΈŒλΌμš°μ € ν™˜κ²½μ—μ„œ μ„œλ²„μ— μ—°κ²° β†’ `@simplysm/service-client`
162
+ - μ„œλ²„-ν΄λΌμ΄μ–ΈνŠΈ 곡유 νƒ€μž…/ν”„λ‘œν† μ½œ μ •μ˜ β†’ `@simplysm/service-common`
@@ -0,0 +1,18 @@
1
+ # AuthTokenPayload
2
+
3
+ JWT νŽ˜μ΄λ‘œλ“œ μΈν„°νŽ˜μ΄μŠ€. `jose` 라이브러리의 `JWTPayload`λ₯Ό ν™•μž₯ν•œλ‹€.
4
+
5
+ ```typescript
6
+ interface AuthTokenPayload<TAuthInfo = unknown> extends JWTPayload {
7
+ roles: string[];
8
+ data: TAuthInfo;
9
+ }
10
+ ```
11
+
12
+ ## Fields
13
+
14
+ | Field | Type | Description |
15
+ |-------|------|-------------|
16
+ | `roles` | `string[]` | μ‚¬μš©μž μ—­ν•  λ°°μ—΄. `auth(["admin"], ...)` λ“±μ—μ„œ μ—­ν•  검사에 μ‚¬μš©λœλ‹€ |
17
+ | `data` | `TAuthInfo` | μ‚¬μš©μž μ •μ˜ 인증 데이터. `ServiceContext.authInfo`둜 μ ‘κ·Ό κ°€λŠ₯ν•˜λ‹€ |
18
+ | (JWTPayload 상속) | β€” | `iss`, `sub`, `aud`, `exp`, `nbf`, `iat`, `jti` λ“± ν‘œμ€€ JWT ν΄λ ˆμž„ |
@@ -0,0 +1,30 @@
1
+ # signJwt
2
+
3
+ HS256 μ•Œκ³ λ¦¬μ¦˜κ³Ό 12μ‹œκ°„ μœ νš¨κΈ°κ°„μœΌλ‘œ JWT 토큰을 μ„œλͺ…ν•œλ‹€.
4
+
5
+ ```typescript
6
+ async function signJwt<TAuthInfo = unknown>(
7
+ jwtSecret: string,
8
+ payload: AuthTokenPayload<TAuthInfo>,
9
+ ): Promise<string>;
10
+ ```
11
+
12
+ ## Parameters
13
+
14
+ | Param | Type | Description |
15
+ |-------|------|-------------|
16
+ | `jwtSecret` | `string` | HMAC μ„œλͺ… μ‹œν¬λ¦Ώ |
17
+ | `payload` | [`AuthTokenPayload<TAuthInfo>`](./auth-token-payload.md) | JWT νŽ˜μ΄λ‘œλ“œ |
18
+
19
+ ## Returns
20
+
21
+ `Promise<string>` β€” μ„œλͺ…λœ JWT 토큰 λ¬Έμžμ—΄.
22
+
23
+ ## Usage
24
+
25
+ ```typescript
26
+ const token = await signJwt("my-secret", {
27
+ roles: ["admin"],
28
+ data: { userId: "123" },
29
+ });
30
+ ```
@@ -0,0 +1,35 @@
1
+ # verifyJwt
2
+
3
+ JWT 토큰을 κ²€μ¦ν•˜κ³  νŽ˜μ΄λ‘œλ“œλ₯Ό λ°˜ν™˜ν•œλ‹€. 만료된 토큰은 "토큰이 λ§Œλ£Œλ˜μ—ˆμŠ΅λ‹ˆλ‹€." μ—λŸ¬λ₯Ό, κ·Έ μ™Έ μœ νš¨ν•˜μ§€ μ•Šμ€ 토큰은 "μœ νš¨ν•˜μ§€ μ•Šμ€ ν† ν°μž…λ‹ˆλ‹€." μ—λŸ¬λ₯Ό λ˜μ§„λ‹€.
4
+
5
+ ```typescript
6
+ async function verifyJwt<TAuthInfo = unknown>(
7
+ jwtSecret: string,
8
+ token: string,
9
+ ): Promise<AuthTokenPayload<TAuthInfo>>;
10
+ ```
11
+
12
+ ## Parameters
13
+
14
+ | Param | Type | Description |
15
+ |-------|------|-------------|
16
+ | `jwtSecret` | `string` | HMAC μ„œλͺ… μ‹œν¬λ¦Ώ |
17
+ | `token` | `string` | 검증할 JWT 토큰 λ¬Έμžμ—΄ |
18
+
19
+ ## Returns
20
+
21
+ `Promise<AuthTokenPayload<TAuthInfo>>` β€” κ²€μ¦λœ JWT νŽ˜μ΄λ‘œλ“œ.
22
+
23
+ ## Related Types
24
+
25
+ ### `decodeJwt`
26
+
27
+ JWT 토큰을 검증 없이 λ””μ½”λ”©ν•œλ‹€. μ„œλͺ… κ²€μ¦μ΄λ‚˜ 만료 확인을 μˆ˜ν–‰ν•˜μ§€ μ•ŠλŠ”λ‹€.
28
+
29
+ ```typescript
30
+ function decodeJwt<TAuthInfo = unknown>(token: string): AuthTokenPayload<TAuthInfo>;
31
+ ```
32
+
33
+ | Param | Type | Description |
34
+ |-------|------|-------------|
35
+ | `token` | `string` | λ””μ½”λ”©ν•  JWT 토큰 λ¬Έμžμ—΄ |
@@ -0,0 +1,64 @@
1
+ # auth
2
+
3
+ μ„œλΉ„μŠ€ νŒ©ν† λ¦¬ λ˜λŠ” λ©”μ„œλ“œμ— 인증을 μš”κ΅¬ν•˜λŠ” 래퍼 ν•¨μˆ˜. λž˜ν•‘λœ ν•¨μˆ˜μ— `AUTH_PERMISSIONS` μ‹¬λ³Όλ‘œ κΆŒν•œ 배열을 λΆ€μ°©ν•œλ‹€.
4
+
5
+ ## When to use
6
+
7
+ - βœ… μ„œλΉ„μŠ€ 전체 λ˜λŠ” νŠΉμ • λ©”μ„œλ“œμ— λ‘œκ·ΈμΈμ„ μš”κ΅¬ν•  λ•Œ
8
+ - βœ… νŠΉμ • μ—­ν• λ§Œ μ ‘κ·Ό κ°€λŠ₯ν•œ λ©”μ„œλ“œλ₯Ό λ§Œλ“€ λ•Œ
9
+ - ❌ 인증이 λΆˆν•„μš”ν•œ 곡개 λ©”μ„œλ“œμ—λŠ” μ‚¬μš©ν•˜μ§€ μ•ŠλŠ”λ‹€
10
+
11
+ ```typescript
12
+ function auth<TFunction extends (...args: any[]) => any>(fn: TFunction): TFunction;
13
+ function auth<TFunction extends (...args: any[]) => any>(
14
+ permissions: string[],
15
+ fn: TFunction,
16
+ ): TFunction;
17
+ ```
18
+
19
+ ## Overloads
20
+
21
+ | Overload | Description |
22
+ |----------|-------------|
23
+ | `auth(fn)` | 둜그인만 μš”κ΅¬ (μ—­ν•  검사 μ—†μŒ). κΆŒν•œ 배열은 `[]` |
24
+ | `auth(permissions, fn)` | μ§€μ •λœ μ—­ν•  쀑 ν•˜λ‚˜λ₯Ό κ°€μ§„ μ‚¬μš©μžλ§Œ ν—ˆμš© |
25
+
26
+ μ‚¬μš© μœ„μΉ˜:
27
+ - μ„œλΉ„μŠ€ μˆ˜μ€€: `defineService("Name", auth((ctx) => ({ ... })))` β€” λͺ¨λ“  λ©”μ„œλ“œμ— 인증 적용
28
+ - λ©”μ„œλ“œ μˆ˜μ€€: `{ methodName: auth(() => result) }` β€” ν•΄λ‹Ή λ©”μ„œλ“œλ§Œ 인증 적용
29
+ - λ©”μ„œλ“œ μˆ˜μ€€ κΆŒν•œμ΄ μ„œλΉ„μŠ€ μˆ˜μ€€ κΆŒν•œλ³΄λ‹€ μš°μ„ ν•œλ‹€
30
+
31
+ ## Related Types
32
+
33
+ ### `getServiceAuthPermissions`
34
+
35
+ `auth()`둜 λž˜ν•‘λœ ν•¨μˆ˜μ—μ„œ 인증 κΆŒν•œ 배열을 μ½λŠ”λ‹€. λž˜ν•‘λ˜μ§€ μ•Šμ€ ν•¨μˆ˜λŠ” `undefined`λ₯Ό λ°˜ν™˜ν•œλ‹€.
36
+
37
+ ```typescript
38
+ function getServiceAuthPermissions(fn: Function): string[] | undefined;
39
+ ```
40
+
41
+ | Param | Type | Description |
42
+ |-------|------|-------------|
43
+ | `fn` | `Function` | 검사할 ν•¨μˆ˜ |
44
+
45
+ ## Usage
46
+
47
+ ```typescript
48
+ // μ„œλΉ„μŠ€ μˆ˜μ€€: λͺ¨λ“  λ©”μ„œλ“œμ— 둜그인 ν•„μš”
49
+ const UserService = defineService("User", auth((ctx) => ({
50
+ getProfile: () => ctx.authInfo,
51
+ })));
52
+
53
+ // μ—­ν•  μ§€μ •
54
+ const AdminService = defineService("Admin", auth(["admin"], (ctx) => ({
55
+ deleteAll: () => { /* ... */ },
56
+ })));
57
+
58
+ // λ©”μ„œλ“œ μˆ˜μ€€
59
+ const MixedService = defineService("Mixed", (ctx) => ({
60
+ publicMethod: () => "ok",
61
+ privateMethod: auth(() => ctx.authInfo),
62
+ adminMethod: auth(["admin"], () => "admin only"),
63
+ }));
64
+ ```