@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,100 @@
1
+ # Common Types
2
+
3
+ 공유 타입 정의. `Buffer` 대신 사용하는 바이너리 타입, ORM과 공유하는 원시 타입, 범용 유틸리티 타입을 제공한다.
4
+
5
+ ```typescript
6
+ import { Bytes, PrimitiveTypeMap, PrimitiveTypeStr, PrimitiveType, DeepPartial, Type } from "@simplysm/core-common";
7
+ ```
8
+
9
+ ## Types
10
+
11
+ ### `Bytes`
12
+
13
+ ```typescript
14
+ export type Bytes = Uint8Array;
15
+ ```
16
+
17
+ `Buffer` 대신 사용하는 바이너리 타입 별칭.
18
+
19
+ ### `PrimitiveTypeMap`
20
+
21
+ ```typescript
22
+ export type PrimitiveTypeMap = {
23
+ string: string;
24
+ number: number;
25
+ boolean: boolean;
26
+ DateTime: DateTime;
27
+ DateOnly: DateOnly;
28
+ Time: Time;
29
+ Uuid: Uuid;
30
+ Bytes: Bytes;
31
+ };
32
+ ```
33
+
34
+ 원시 타입 문자열 key → 실제 타입 매핑. `@simplysm/orm-common`과 공유한다.
35
+
36
+ ### `PrimitiveTypeStr`
37
+
38
+ ```typescript
39
+ export type PrimitiveTypeStr = keyof PrimitiveTypeMap;
40
+ // "string" | "number" | "boolean" | "DateTime" | "DateOnly" | "Time" | "Uuid" | "Bytes"
41
+ ```
42
+
43
+ 원시 타입 문자열 key union.
44
+
45
+ ### `PrimitiveType`
46
+
47
+ ```typescript
48
+ export type PrimitiveType = PrimitiveTypeMap[PrimitiveTypeStr] | undefined;
49
+ // string | number | boolean | DateTime | DateOnly | Time | Uuid | Bytes | undefined
50
+ ```
51
+
52
+ 원시 타입 union.
53
+
54
+ ### `DeepPartial<TObject>`
55
+
56
+ ```typescript
57
+ export type DeepPartial<TObject> = Partial<{
58
+ [K in keyof TObject]: TObject[K] extends PrimitiveType ? TObject[K] : DeepPartial<TObject[K]>;
59
+ }>;
60
+ ```
61
+
62
+ 객체의 모든 속성을 재귀적으로 optional로 변환한다. 원시 타입(`PrimitiveType`)은 그대로 유지하고, object/array 타입에만 재귀적으로 `Partial`을 적용한다.
63
+
64
+ ### `Type<TInstance>`
65
+
66
+ ```typescript
67
+ export interface Type<TInstance> extends Function {
68
+ new (...args: unknown[]): TInstance;
69
+ }
70
+ ```
71
+
72
+ 생성자 타입. 의존성 주입, 팩토리 패턴, instanceof 체크 등에 활용한다.
73
+
74
+ ## Usage
75
+
76
+ ```typescript
77
+ import { Bytes, PrimitiveTypeStr, DeepPartial, Type } from "@simplysm/core-common";
78
+
79
+ // Bytes
80
+ const data: Bytes = new Uint8Array([1, 2, 3]);
81
+
82
+ // PrimitiveTypeStr
83
+ const typeStr: PrimitiveTypeStr = "DateTime";
84
+
85
+ // DeepPartial
86
+ interface Config {
87
+ server: { host: string; port: number };
88
+ db: { name: string; user: string };
89
+ }
90
+ const partial: DeepPartial<Config> = {
91
+ server: { host: "localhost" }, // port 생략 가능
92
+ };
93
+
94
+ // Type<T>
95
+ function create<T>(ctor: Type<T>): T {
96
+ return new ctor();
97
+ }
98
+ class MyService {}
99
+ const svc = create(MyService);
100
+ ```
@@ -0,0 +1,42 @@
1
+ # env / parseBoolEnv
2
+
3
+ 환경변수 접근 유틸리티 함수. `process.env`/`import.meta.env` 직접 접근 대신 이 함수를 사용해야 한다.
4
+
5
+ ```typescript
6
+ export function env(key: string): string | undefined;
7
+ export function env(key: string, value: string): void;
8
+
9
+ export function parseBoolEnv(value: unknown): boolean;
10
+ ```
11
+
12
+ 직접 named import로 사용한다:
13
+
14
+ ```typescript
15
+ import { env, parseBoolEnv } from "@simplysm/core-common";
16
+ ```
17
+
18
+ ## Functions
19
+
20
+ | Function | Signature | Description |
21
+ |----------|-----------|-------------|
22
+ | `env` | `(key: string) => string \| undefined` | 환경변수 값 읽기. `process.env` 우선, fallback `import.meta.env` |
23
+ | `env` | `(key: string, value: string) => void` | 환경변수 값 쓰기 (`process.env`에 저장) |
24
+ | `parseBoolEnv` | `(value: unknown) => boolean` | 환경변수 값을 boolean으로 파싱. `"true"`, `"1"`, `"yes"`, `"on"` (대소문자 무시) → `true`, 그 외 → `false` |
25
+
26
+ ## Usage
27
+
28
+ ```typescript
29
+ import { env, parseBoolEnv } from "@simplysm/core-common";
30
+
31
+ // 읽기
32
+ const apiUrl = env("API_URL"); // string | undefined
33
+
34
+ // 쓰기
35
+ env("DEBUG", "true");
36
+
37
+ // boolean 파싱
38
+ parseBoolEnv(env("DEBUG")); // true
39
+ parseBoolEnv("yes"); // true
40
+ parseBoolEnv("false"); // false
41
+ parseBoolEnv("0"); // false
42
+ ```
@@ -0,0 +1,86 @@
1
+ # DateOnly
2
+
3
+ 불변 날짜 클래스 (시간 제외: `yyyy-MM-dd`). 시간 정보 없이 날짜만 저장하며 로컬 타임존 기준으로 동작한다. 주차 계산을 지원한다. 수정 메서드는 모두 새 인스턴스를 반환한다.
4
+
5
+ ```typescript
6
+ export class DateOnly {
7
+ readonly date: Date;
8
+
9
+ constructor();
10
+ constructor(year: number, month: number, day: number);
11
+ constructor(tick: number);
12
+ constructor(date: Date);
13
+
14
+ static parse(str: string): DateOnly;
15
+ static getDateByYearWeekSeq(
16
+ arg: { year: number; month?: number; weekSeq: number },
17
+ weekStartDay?: number,
18
+ minDaysInFirstWeek?: number,
19
+ ): DateOnly;
20
+ }
21
+ ```
22
+
23
+ ## Members
24
+
25
+ | Member | Kind | Type | Description |
26
+ |--------|------|------|-------------|
27
+ | `date` | property | `Date` | 내부 Date 객체 (시간 부분은 항상 00:00:00) |
28
+ | `year` | getter | `number` | 연도 |
29
+ | `month` | getter | `number` | 월 (1-12) |
30
+ | `day` | getter | `number` | 일 (1-31) |
31
+ | `tick` | getter | `number` | Unix 타임스탬프 (밀리초) |
32
+ | `dayOfWeek` | getter | `number` | 요일 (일요일=0 ~ 토요일=6) |
33
+ | `isValid` | getter | `boolean` | 날짜가 올바르게 설정되었는지 여부 |
34
+ | `parse` | static | `(str: string) => DateOnly` | 문자열을 파싱하여 DateOnly 생성 |
35
+ | `getDateByYearWeekSeq` | static | `(arg, weekStartDay?, minDaysInFirstWeek?) => DateOnly` | 연도·(월)·주차로 해당 주의 시작 날짜 반환 |
36
+ | `setYear` | method | `(year: number) => DateOnly` | 지정된 연도로 새 인스턴스 반환 |
37
+ | `setMonth` | method | `(month: number) => DateOnly` | 지정된 월로 새 인스턴스 반환. 현재 일이 대상 월의 일수보다 크면 마지막 일로 조정됨 |
38
+ | `setDay` | method | `(day: number) => DateOnly` | 지정된 일로 새 인스턴스 반환 |
39
+ | `addYears` | method | `(years: number) => DateOnly` | 지정된 연수를 더한 새 인스턴스 반환 |
40
+ | `addMonths` | method | `(months: number) => DateOnly` | 지정된 월수를 더한 새 인스턴스 반환 |
41
+ | `addDays` | method | `(days: number) => DateOnly` | 지정된 일수를 더한 새 인스턴스 반환 |
42
+ | `getBaseYearMonthSeqForWeekSeq` | method | `(weekStartDay?, minDaysInFirstWeek?) => { year: number; monthSeq: number }` | 이 날짜가 포함된 주의 기준 연도와 월 반환 |
43
+ | `getWeekSeqStartDate` | method | `(weekStartDay?, minDaysInFirstWeek?) => DateOnly` | 이 날짜가 포함된 주의 시작 날짜 반환 |
44
+ | `getWeekSeqOfYear` | method | `(weekStartDay?, minDaysInFirstWeek?) => { year: number; weekSeq: number }` | 연도와 주차 번호 반환 |
45
+ | `getWeekSeqOfMonth` | method | `(weekStartDay?, minDaysInFirstWeek?) => { year: number; monthSeq: number; weekSeq: number }` | 연도, 월, 해당 월 내의 주차 번호 반환 |
46
+ | `toFormatString` | method | `(formatStr: string) => string` | 지정된 형식 문자열로 변환 (형식 토큰은 [`DateTime`](./date-time.md) 참조) |
47
+ | `toString` | method | `() => string` | `"yyyy-MM-dd"` 형식 문자열 반환 |
48
+
49
+ ## `parse` — 지원 형식
50
+
51
+ | 형식 | 예시 | 타임존 |
52
+ |------|------|--------|
53
+ | `yyyy-MM-dd` | `"2025-01-15"` | 타임존 무관 (직접 추출) |
54
+ | `yyyyMMdd` | `"20250115"` | 타임존 무관 (직접 추출) |
55
+ | ISO 8601 | `"2025-01-15T00:00:00Z"` | UTC로 해석 후 로컬 타임존 변환 |
56
+
57
+ 서버/클라이언트 타임존이 다른 경우 `yyyy-MM-dd` 형식 권장.
58
+
59
+ ## 주차 계산 파라미터
60
+
61
+ | 파라미터 | 기본값 | 설명 |
62
+ |----------|--------|------|
63
+ | `weekStartDay` | `1` (월요일) | 주 시작 요일 (0=일요일, 1=월요일, ..., 6=토요일) |
64
+ | `minDaysInFirstWeek` | `4` | 첫 번째 주로 간주되기 위한 최소 일수 (ISO 8601 표준) |
65
+
66
+ ## Usage
67
+
68
+ ```typescript
69
+ import { DateOnly } from "@simplysm/core-common";
70
+
71
+ const today = new DateOnly();
72
+ const specific = new DateOnly(2025, 1, 15);
73
+ const parsed = DateOnly.parse("2025-01-15");
74
+
75
+ // 불변 수정
76
+ const nextWeek = today.addDays(7);
77
+ const firstDayOfMonth = today.setDay(1);
78
+
79
+ // 주차 계산 (ISO 8601 기본값: 월요일 시작, 첫 주 최소 4일)
80
+ const { year, weekSeq } = new DateOnly(2025, 1, 6).getWeekSeqOfYear();
81
+ // { year: 2025, weekSeq: 2 }
82
+
83
+ // 주차로 날짜 계산
84
+ const weekStart = DateOnly.getDateByYearWeekSeq({ year: 2025, weekSeq: 2 });
85
+ // 2025-01-06 (월요일)
86
+ ```
@@ -0,0 +1,106 @@
1
+ # DateTime
2
+
3
+ 불변 날짜시간 클래스 (밀리초 정밀도, 로컬 타임존). JavaScript `Date` 객체를 래핑하여 불변성과 편리한 API를 제공한다. 수정 메서드는 모두 새 인스턴스를 반환한다.
4
+
5
+ ```typescript
6
+ export class DateTime {
7
+ readonly date: Date;
8
+
9
+ constructor();
10
+ constructor(year: number, month: number, day: number, hour?: number, minute?: number, second?: number, millisecond?: number);
11
+ constructor(tick: number);
12
+ constructor(date: Date);
13
+
14
+ static parse(str: string): DateTime;
15
+ }
16
+ ```
17
+
18
+ ## Members
19
+
20
+ | Member | Kind | Type | Description |
21
+ |--------|------|------|-------------|
22
+ | `date` | property | `Date` | 내부 Date 객체 |
23
+ | `year` | getter | `number` | 연도 |
24
+ | `month` | getter | `number` | 월 (1-12) |
25
+ | `day` | getter | `number` | 일 (1-31) |
26
+ | `hour` | getter | `number` | 시 (0-23) |
27
+ | `minute` | getter | `number` | 분 (0-59) |
28
+ | `second` | getter | `number` | 초 (0-59) |
29
+ | `millisecond` | getter | `number` | 밀리초 (0-999) |
30
+ | `tick` | getter | `number` | Unix 타임스탬프 (밀리초) |
31
+ | `dayOfWeek` | getter | `number` | 요일 (일요일=0 ~ 토요일=6) |
32
+ | `timezoneOffsetMinutes` | getter | `number` | 타임존 오프셋 (분) |
33
+ | `isValid` | getter | `boolean` | 날짜시간이 올바르게 설정되었는지 여부 |
34
+ | `parse` | static | `(str: string) => DateTime` | 문자열을 파싱하여 DateTime 생성 |
35
+ | `setYear` | method | `(year: number) => DateTime` | 지정된 연도로 새 인스턴스 반환 |
36
+ | `setMonth` | method | `(month: number) => DateTime` | 지정된 월로 새 인스턴스 반환. 현재 일이 대상 월의 일수보다 크면 마지막 일로 조정됨 |
37
+ | `setDay` | method | `(day: number) => DateTime` | 지정된 일로 새 인스턴스 반환 |
38
+ | `setHour` | method | `(hour: number) => DateTime` | 지정된 시로 새 인스턴스 반환 |
39
+ | `setMinute` | method | `(minute: number) => DateTime` | 지정된 분으로 새 인스턴스 반환 |
40
+ | `setSecond` | method | `(second: number) => DateTime` | 지정된 초로 새 인스턴스 반환 |
41
+ | `setMillisecond` | method | `(millisecond: number) => DateTime` | 지정된 밀리초로 새 인스턴스 반환 |
42
+ | `addYears` | method | `(years: number) => DateTime` | 지정된 연수를 더한 새 인스턴스 반환 |
43
+ | `addMonths` | method | `(months: number) => DateTime` | 지정된 월수를 더한 새 인스턴스 반환 |
44
+ | `addDays` | method | `(days: number) => DateTime` | 지정된 일수를 더한 새 인스턴스 반환 |
45
+ | `addHours` | method | `(hours: number) => DateTime` | 지정된 시간을 더한 새 인스턴스 반환 |
46
+ | `addMinutes` | method | `(minutes: number) => DateTime` | 지정된 분을 더한 새 인스턴스 반환 |
47
+ | `addSeconds` | method | `(seconds: number) => DateTime` | 지정된 초를 더한 새 인스턴스 반환 |
48
+ | `addMilliseconds` | method | `(milliseconds: number) => DateTime` | 지정된 밀리초를 더한 새 인스턴스 반환 |
49
+ | `toFormatString` | method | `(formatStr: string) => string` | 지정된 형식 문자열로 변환 |
50
+ | `toString` | method | `() => string` | ISO 형식 문자열 반환 (`yyyy-MM-ddTHH:mm:ss.fffzzz`) |
51
+
52
+ ## `parse` — 지원 형식
53
+
54
+ | 형식 | 예시 |
55
+ |------|------|
56
+ | `yyyy-MM-dd HH:mm:ss` | `"2025-01-15 10:30:00"` |
57
+ | `yyyy-MM-dd HH:mm:ss.fff` | `"2025-01-15 10:30:00.123"` |
58
+ | `yyyyMMddHHmmss` | `"20250115103000"` |
59
+ | `yyyy-MM-dd AM/PM HH:mm:ss` | `"2025-01-15 AM 10:30:00"` |
60
+ | `yyyy-MM-dd 오전/오후 HH:mm:ss` | `"2025-01-15 오전 10:30:00"` |
61
+ | ISO 8601 | `"2025-01-15T10:30:00Z"` |
62
+
63
+ ## `toFormatString` — 형식 문자열 토큰
64
+
65
+ | 토큰 | 설명 | 예시 |
66
+ |------|------|------|
67
+ | `yyyy` | 4자리 연도 | `2025` |
68
+ | `yy` | 2자리 연도 | `25` |
69
+ | `MM` | 0 채움 월 | `01`~`12` |
70
+ | `M` | 월 | `1`~`12` |
71
+ | `ddd` | 요일 | `일`, `월`, `화`, `수`, `목`, `금`, `토` |
72
+ | `dd` | 0 채움 일 | `01`~`31` |
73
+ | `d` | 일 | `1`~`31` |
74
+ | `tt` | 오전/오후 | `AM`, `PM` |
75
+ | `HH` | 0 채움 24시간 | `00`~`23` |
76
+ | `H` | 24시간 | `0`~`23` |
77
+ | `hh` | 0 채움 12시간 | `01`~`12` |
78
+ | `h` | 12시간 | `1`~`12` |
79
+ | `mm` | 0 채움 분 | `00`~`59` |
80
+ | `m` | 분 | `0`~`59` |
81
+ | `ss` | 0 채움 초 | `00`~`59` |
82
+ | `s` | 초 | `0`~`59` |
83
+ | `fff` | 밀리초 (3자리) | `000`~`999` |
84
+ | `ff` | 밀리초 (2자리) | `00`~`99` |
85
+ | `f` | 밀리초 (1자리) | `0`~`9` |
86
+ | `zzz` | 타임존 오프셋 (`±HH:mm`) | `+09:00` |
87
+ | `zz` | 타임존 오프셋 (`±HH`) | `+09` |
88
+ | `z` | 타임존 오프셋 (`±H`) | `+9` |
89
+
90
+ ## Usage
91
+
92
+ ```typescript
93
+ import { DateTime } from "@simplysm/core-common";
94
+
95
+ const now = new DateTime();
96
+ const specific = new DateTime(2025, 1, 15, 10, 30, 0);
97
+ const fromTick = new DateTime(Date.now());
98
+ const parsed = DateTime.parse("2025-01-15 10:30:00");
99
+
100
+ const formatted = now.toFormatString("yyyy-MM-dd HH:mm:ss");
101
+ const iso = now.toString(); // "2025-01-15T10:30:00.000+09:00"
102
+
103
+ // 불변 수정
104
+ const nextMonth = now.addMonths(1);
105
+ const endOfYear = now.setMonth(12).setDay(31);
106
+ ```
@@ -0,0 +1,59 @@
1
+ # LazyGcMap
2
+
3
+ 자동 만료 기능이 있는 Map. LRU 방식으로 접근 시간을 갱신하고, 지정된 시간 동안 접근하지 않으면 자동 삭제한다. 사용 후 반드시 `dispose()`를 호출해야 GC 타이머가 정리된다.
4
+
5
+ ```typescript
6
+ export class LazyGcMap<TKey, TValue> {
7
+ constructor(options: {
8
+ gcInterval?: number;
9
+ expireTime: number;
10
+ onExpire?: (key: TKey, value: TValue) => void | Promise<void>;
11
+ });
12
+ }
13
+ ```
14
+
15
+ ## Constructor Options
16
+
17
+ | Field | Type | Required | Description |
18
+ |-------|------|----------|-------------|
19
+ | `expireTime` | `number` | 필수 | 만료 시간 (밀리초). 마지막 접근 이후 이 시간이 지나면 삭제됨 |
20
+ | `gcInterval` | `number` | 선택 | GC 간격 (밀리초). 생략 시 `expireTime / 10` (최소 1000ms) |
21
+ | `onExpire` | `(key: TKey, value: TValue) => void \| Promise<void>` | 선택 | 만료 시 호출되는 콜백. 에러 발생 시 로그 출력 후 계속 실행 |
22
+
23
+ ## Members
24
+
25
+ | Member | Kind | Type | Description |
26
+ |--------|------|------|-------------|
27
+ | `size` | getter | `number` | 저장된 항목 수 |
28
+ | `has` | method | `(key: TKey) => boolean` | key 존재 여부 확인 (접근 시간 갱신하지 않음) |
29
+ | `get` | method | `(key: TKey) => TValue \| undefined` | 값 조회 (접근 시간 갱신) |
30
+ | `set` | method | `(key: TKey, value: TValue) => void` | 값 저장 (접근 시간 설정 및 GC 타이머 시작) |
31
+ | `delete` | method | `(key: TKey) => boolean` | 항목 삭제 |
32
+ | `getOrCreate` | method | `(key: TKey, factory: () => TValue) => TValue` | key가 없으면 팩토리로 생성하여 저장 후 반환 |
33
+ | `clear` | method | `() => void` | 모든 항목 삭제 (인스턴스는 계속 사용 가능) |
34
+ | `dispose` | method | `() => void` | 인스턴스 정리 (GC 타이머 중지 및 데이터 삭제). 이후 모든 작업 무시됨 |
35
+ | `values` | method | `() => IterableIterator<TValue>` | 값 순회 |
36
+ | `keys` | method | `() => IterableIterator<TKey>` | key 순회 |
37
+ | `entries` | method | `() => IterableIterator<[TKey, TValue]>` | 엔트리 순회 |
38
+
39
+ ## Usage
40
+
41
+ ```typescript
42
+ import { LazyGcMap } from "@simplysm/core-common";
43
+
44
+ const cache = new LazyGcMap<string, Data>({
45
+ expireTime: 60_000, // 60초 미접근 시 삭제
46
+ gcInterval: 10_000, // 10초마다 GC 실행 (생략 시 6000ms)
47
+ onExpire: async (key, value) => {
48
+ await value.cleanup(); // 정리 작업
49
+ },
50
+ });
51
+
52
+ try {
53
+ cache.set("key", data);
54
+ const val = cache.get("key"); // 접근 시간 갱신
55
+ const created = cache.getOrCreate("other", () => createData());
56
+ } finally {
57
+ cache.dispose(); // 반드시 호출
58
+ }
59
+ ```
@@ -0,0 +1,62 @@
1
+ # Time
2
+
3
+ 불변 시간 클래스 (날짜 제외: `HH:mm:ss.fff`). 날짜 정보 없이 시간만 저장하며 24시간을 초과하거나 음수인 값은 자동으로 정규화된다. 수정 및 산술 메서드는 새 인스턴스를 반환하며 모두 24시간 순환한다.
4
+
5
+ ```typescript
6
+ export class Time {
7
+ constructor();
8
+ constructor(hour: number, minute: number, second?: number, millisecond?: number);
9
+ constructor(tick: number);
10
+ constructor(date: Date);
11
+
12
+ static parse(str: string): Time;
13
+ }
14
+ ```
15
+
16
+ ## Members
17
+
18
+ | Member | Kind | Type | Description |
19
+ |--------|------|------|-------------|
20
+ | `hour` | getter | `number` | 시 (0-23) |
21
+ | `minute` | getter | `number` | 분 (0-59) |
22
+ | `second` | getter | `number` | 초 (0-59) |
23
+ | `millisecond` | getter | `number` | 밀리초 (0-999) |
24
+ | `tick` | getter | `number` | 자정(00:00:00.000) 기준 밀리초 |
25
+ | `isValid` | getter | `boolean` | 시간이 올바르게 설정되었는지 여부 |
26
+ | `parse` | static | `(str: string) => Time` | 문자열을 파싱하여 Time 생성 |
27
+ | `setHour` | method | `(hour: number) => Time` | 지정된 시로 새 인스턴스 반환 |
28
+ | `setMinute` | method | `(minute: number) => Time` | 지정된 분으로 새 인스턴스 반환 |
29
+ | `setSecond` | method | `(second: number) => Time` | 지정된 초로 새 인스턴스 반환 |
30
+ | `setMillisecond` | method | `(millisecond: number) => Time` | 지정된 밀리초로 새 인스턴스 반환 |
31
+ | `addHours` | method | `(hours: number) => Time` | 지정된 시간을 더한 새 인스턴스 반환 (24시간 순환) |
32
+ | `addMinutes` | method | `(minutes: number) => Time` | 지정된 분을 더한 새 인스턴스 반환 (24시간 순환) |
33
+ | `addSeconds` | method | `(seconds: number) => Time` | 지정된 초를 더한 새 인스턴스 반환 (24시간 순환) |
34
+ | `addMilliseconds` | method | `(milliseconds: number) => Time` | 지정된 밀리초를 더한 새 인스턴스 반환 (24시간 순환) |
35
+ | `toFormatString` | method | `(formatStr: string) => string` | 지정된 형식 문자열로 변환 (형식 토큰은 [`DateTime`](./date-time.md) 참조, 날짜 관련 토큰 제외) |
36
+ | `toString` | method | `() => string` | `"HH:mm:ss.fff"` 형식 문자열 반환 |
37
+
38
+ ## `parse` — 지원 형식
39
+
40
+ | 형식 | 예시 |
41
+ |------|------|
42
+ | `HH:mm:ss` | `"10:30:00"` |
43
+ | `HH:mm:ss.fff` | `"10:30:00.123"` |
44
+ | `AM/PM HH:mm:ss` | `"AM 10:30:00"`, `"PM 02:15:00"` |
45
+ | ISO 8601 | `"2025-01-15T10:30:00Z"` (시간 부분만 추출, 타임존 변환 적용) |
46
+
47
+ ## Usage
48
+
49
+ ```typescript
50
+ import { Time } from "@simplysm/core-common";
51
+
52
+ const now = new Time();
53
+ const specific = new Time(10, 30, 0);
54
+ const parsed = Time.parse("10:30:00");
55
+
56
+ // 불변 수정
57
+ const later = specific.addHours(2).addMinutes(30);
58
+ // 24시간 순환
59
+ const midnight = new Time(23, 0, 0).addHours(2); // 01:00:00
60
+
61
+ const formatted = specific.toFormatString("HH:mm:ss");
62
+ ```
@@ -0,0 +1,41 @@
1
+ # Uuid
2
+
3
+ UUID v4 클래스. `crypto.getRandomValues` 기반으로 암호학적으로 안전한 UUID를 생성한다 (Chrome 37+, Node.js 호환).
4
+
5
+ ```typescript
6
+ export class Uuid {
7
+ constructor(uuid: string);
8
+
9
+ static generate(): Uuid;
10
+ static fromBytes(bytes: Bytes): Uuid;
11
+ }
12
+ ```
13
+
14
+ ## Members
15
+
16
+ | Member | Kind | Type | Description |
17
+ |--------|------|------|-------------|
18
+ | `generate` | static | `() => Uuid` | 새 UUID v4 인스턴스 생성 |
19
+ | `fromBytes` | static | `(bytes: Bytes) => Uuid` | 16바이트 `Uint8Array`로 UUID 생성. 바이트 크기가 16이 아니면 `ArgumentError` 발생 |
20
+ | `toString` | method | `() => string` | UUID 문자열 반환 (`xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx`) |
21
+ | `toBytes` | method | `() => Bytes` | UUID를 16바이트 `Uint8Array`로 변환 |
22
+
23
+ ## Related Types
24
+
25
+ ### `Bytes`
26
+
27
+ `Uint8Array` 별칭. [`Bytes`](../type-utils/common-types.md) 참조.
28
+
29
+ ## Usage
30
+
31
+ ```typescript
32
+ import { Uuid } from "@simplysm/core-common";
33
+
34
+ const id = Uuid.generate();
35
+ const fromStr = new Uuid("550e8400-e29b-41d4-a716-446655440000");
36
+
37
+ console.log(id.toString()); // "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
38
+
39
+ const bytes = id.toBytes(); // Uint8Array(16)
40
+ const restored = Uuid.fromBytes(bytes);
41
+ ```
@@ -0,0 +1,36 @@
1
+ # bytes
2
+
3
+ `Uint8Array` 유틸리티 네임스페이스. 복잡한 변환 연산을 제공한다.
4
+
5
+ ```typescript
6
+ import { bytes } from "@simplysm/core-common";
7
+ ```
8
+
9
+ ## Functions
10
+
11
+ | Function | Signature | Description |
12
+ |----------|-----------|-------------|
13
+ | `concat` | `(arrays: Bytes[]) => Bytes` | 여러 `Uint8Array` 결합 |
14
+ | `toHex` | `(bytes: Bytes) => string` | `Uint8Array`를 소문자 hex 문자열로 변환 |
15
+ | `fromHex` | `(hex: string) => Bytes` | hex 문자열을 `Uint8Array`로 변환. 홀수 길이이거나 유효하지 않은 문자가 있으면 `ArgumentError` |
16
+ | `toBase64` | `(bytes: Bytes) => string` | `Uint8Array`를 Base64 문자열로 변환 |
17
+ | `fromBase64` | `(base64: string) => Bytes` | Base64 문자열을 `Uint8Array`로 변환. 유효하지 않은 문자/길이이면 `ArgumentError` |
18
+
19
+ ## Usage
20
+
21
+ ```typescript
22
+ import { bytes } from "@simplysm/core-common";
23
+
24
+ // concat
25
+ const a = new Uint8Array([1, 2]);
26
+ const b = new Uint8Array([3, 4]);
27
+ bytes.concat([a, b]); // Uint8Array([1, 2, 3, 4])
28
+
29
+ // hex 변환
30
+ bytes.toHex(new Uint8Array([255, 0, 127])); // "ff007f"
31
+ bytes.fromHex("ff007f"); // Uint8Array([255, 0, 127])
32
+
33
+ // base64 변환
34
+ bytes.toBase64(new Uint8Array([72, 101, 108, 108, 111])); // "SGVsbG8="
35
+ bytes.fromBase64("SGVsbG8="); // Uint8Array([72, 101, 108, 108, 111])
36
+ ```
@@ -0,0 +1,60 @@
1
+ # dt
2
+
3
+ 날짜 포맷 유틸리티 네임스페이스. `DateTime`, `DateOnly`, `Time` 클래스 내부에서 사용되는 저수준 포맷/변환 함수를 제공한다.
4
+
5
+ ```typescript
6
+ import { dt } from "@simplysm/core-common";
7
+ ```
8
+
9
+ ## Functions
10
+
11
+ | Function | Signature | Description |
12
+ |----------|-----------|-------------|
13
+ | `format` | `(formatString, args) => string` | 형식 문자열에 따라 날짜/시간을 문자열로 변환 |
14
+ | `normalizeMonth` | `(year, month, day) => DtNormalizedMonth` | 월 설정 시 연/월/일 정규화 (범위 벗어난 월 처리, 마지막 일 초과 처리) |
15
+ | `convert12To24` | `(rawHour, isPM) => number` | 12시간 형식을 24시간 형식으로 변환 |
16
+
17
+ ## `format` — args
18
+
19
+ | Field | Type | Description |
20
+ |-------|------|-------------|
21
+ | `year` | `number` | 연도 |
22
+ | `month` | `number` | 월 |
23
+ | `day` | `number` | 일 |
24
+ | `hour` | `number` | 시 |
25
+ | `minute` | `number` | 분 |
26
+ | `second` | `number` | 초 |
27
+ | `millisecond` | `number` | 밀리초 |
28
+ | `timezoneOffsetMinutes` | `number` | 타임존 오프셋 (분) |
29
+
30
+ 형식 문자열 토큰은 [`DateTime.toFormatString`](../types/date-time.md)과 동일하다.
31
+
32
+ ## Related Types
33
+
34
+ ### `DtNormalizedMonth`
35
+
36
+ `normalizeMonth()` 결과 타입:
37
+
38
+ | Field | Type | Description |
39
+ |-------|------|-------------|
40
+ | `year` | `number` | 정규화된 연도 |
41
+ | `month` | `number` | 정규화된 월 (1-12) |
42
+ | `day` | `number` | 정규화된 일 |
43
+
44
+ ## Usage
45
+
46
+ ```typescript
47
+ import { dt } from "@simplysm/core-common";
48
+
49
+ // 포맷
50
+ dt.format("yyyy-MM-dd", { year: 2025, month: 1, day: 15 }); // "2025-01-15"
51
+
52
+ // 월 정규화
53
+ dt.normalizeMonth(2025, 13, 15); // { year: 2026, month: 1, day: 15 }
54
+ dt.normalizeMonth(2025, 2, 31); // { year: 2025, month: 2, day: 28 }
55
+
56
+ // 12시간 → 24시간
57
+ dt.convert12To24(12, false); // 0 (12:00 AM = 0:00)
58
+ dt.convert12To24(12, true); // 12 (12:00 PM = 12:00)
59
+ dt.convert12To24(3, true); // 15 (3:00 PM = 15:00)
60
+ ```
@@ -0,0 +1,26 @@
1
+ # err
2
+
3
+ 에러 메시지 추출 유틸리티 네임스페이스.
4
+
5
+ ```typescript
6
+ import { err } from "@simplysm/core-common";
7
+ ```
8
+
9
+ ## Functions
10
+
11
+ | Function | Signature | Description |
12
+ |----------|-----------|-------------|
13
+ | `message` | `(err: unknown) => string` | `catch` 블록의 `unknown` 에러에서 메시지 추출. `Error` 인스턴스이면 `message` 속성 반환, 그렇지 않으면 `String()` 변환 결과 반환 |
14
+
15
+ ## Usage
16
+
17
+ ```typescript
18
+ import { err } from "@simplysm/core-common";
19
+
20
+ try {
21
+ await doSomething();
22
+ } catch (e) {
23
+ const msg = err.message(e); // string
24
+ console.log(msg);
25
+ }
26
+ ```
@@ -0,0 +1,58 @@
1
+ # json
2
+
3
+ JSON 변환 유틸리티 네임스페이스. `DateTime`, `DateOnly`, `Time`, `Uuid`, `Set`, `Map`, `Error`, `Uint8Array` 등 커스텀 타입을 지원하는 직렬화/역직렬화를 제공한다.
4
+
5
+ ```typescript
6
+ import { json } from "@simplysm/core-common";
7
+ ```
8
+
9
+ ## Functions
10
+
11
+ | Function | Signature | Description |
12
+ |----------|-----------|-------------|
13
+ | `stringify` | `(obj, options?) => string` | 객체를 JSON 문자열로 직렬화 |
14
+ | `parse` | `<TResult = unknown>(json: string) => TResult` | JSON 문자열을 객체로 역직렬화. null 값은 undefined로 변환 |
15
+
16
+ ## `stringify` — options
17
+
18
+ | Field | Type | Description |
19
+ |-------|------|-------------|
20
+ | `space` | `string \| number` | JSON 들여쓰기 |
21
+ | `replacer` | `(key, value) => unknown` | 커스텀 replacer. 기본 타입 변환 전에 호출됨 |
22
+ | `redactBytes` | `boolean` | `true`이면 `Uint8Array` 내용을 `"__hidden__"`으로 대체 (로깅용). 이 옵션으로 직렬화된 결과는 `parse()`로 복원 불가 |
23
+
24
+ ## 지원 타입
25
+
26
+ | 타입 | 직렬화 형식 |
27
+ |------|-------------|
28
+ | `DateTime` | `{ __type__: "DateTime", data: "yyyy-MM-ddTHH:mm:ss.fffzzz" }` |
29
+ | `DateOnly` | `{ __type__: "DateOnly", data: "yyyy-MM-dd" }` |
30
+ | `Time` | `{ __type__: "Time", data: "HH:mm:ss.fff" }` |
31
+ | `Uuid` | `{ __type__: "Uuid", data: "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" }` |
32
+ | `Date` | `{ __type__: "Date", data: ISO8601 }` |
33
+ | `Set` | `{ __type__: "Set", data: [...] }` |
34
+ | `Map` | `{ __type__: "Map", data: [[k, v], ...] }` |
35
+ | `Error` | `{ __type__: "Error", data: { name, message, stack, ... } }` |
36
+ | `Uint8Array` | `{ __type__: "Uint8Array", data: "hex문자열" }` |
37
+
38
+ `parse()`는 JSON null 값을 undefined로 변환한다. 이는 simplysm 프레임워크의 null-free 규칙을 위한 의도적인 동작이다.
39
+
40
+ ## Usage
41
+
42
+ ```typescript
43
+ import { json, DateTime, Uuid } from "@simplysm/core-common";
44
+
45
+ // 커스텀 타입 지원 직렬화
46
+ const serialized = json.stringify({
47
+ date: new DateTime(),
48
+ id: Uuid.generate(),
49
+ data: new Uint8Array([1, 2, 3]),
50
+ });
51
+
52
+ // 커스텀 타입 복원
53
+ const restored = json.parse<{ date: DateTime; id: Uuid }>(serialized);
54
+ // restored.date는 DateTime 인스턴스
55
+
56
+ // 로깅용 (바이너리 숨김)
57
+ const logStr = json.stringify({ data: sensitiveBytes }, { redactBytes: true });
58
+ ```