@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,101 @@
1
+ # ExcelUtils
2
+
3
+ Excel 유틸리티 함수 모음. 셀 주소 변환, 날짜/숫자 변환, 숫자 형식 처리 정적 메서드를 제공한다.
4
+
5
+ ## When to use
6
+
7
+ - ✅ "A1" 형식 문자열과 0 기반 좌표 간 변환이 필요할 때
8
+ - ✅ JavaScript 타임스탬프와 Excel 날짜 숫자 간 변환이 필요할 때
9
+ - ❌ 셀 값 읽기/쓰기 시 날짜 변환은 `ExcelCell.setValue()`/`getValue()`가 자동 처리하므로 직접 호출할 필요 없음
10
+
11
+ ## Signature
12
+
13
+ ```typescript
14
+ export class ExcelUtils {
15
+ // 주소 변환
16
+ static stringifyAddr(point: ExcelAddressPoint): string;
17
+ static stringifyRowAddr(r: number): string;
18
+ static stringifyColAddr(c: number): string;
19
+ static parseRowAddr(addr: string): number;
20
+ static parseColAddr(addr: string): number;
21
+ static parseCellAddr(addr: string): ExcelAddressPoint;
22
+ static parseRangeAddr(rangeAddr: string): ExcelAddressRangePoint;
23
+ static stringifyRangeAddr(point: ExcelAddressRangePoint): string;
24
+
25
+ // 날짜/숫자 변환
26
+ static convertTimeTickToNumber(tick: number): number;
27
+ static convertNumberToTimeTick(value: number): number;
28
+
29
+ // 숫자 형식 처리
30
+ static convertNumFmtCodeToName(numFmtCode: string): ExcelNumberFormat;
31
+ static convertNumFmtIdToName(numFmtId: number): ExcelNumberFormat;
32
+ static convertNumFmtNameToId(numFmtName: ExcelNumberFormat): number;
33
+ }
34
+ ```
35
+
36
+ ## Members
37
+
38
+ | Member | Kind | Type | Description |
39
+ |--------|------|------|-------------|
40
+ | `stringifyAddr` | static | `(point: ExcelAddressPoint) => string` | 셀 좌표를 "A1" 형식 문자열로 변환 |
41
+ | `stringifyRowAddr` | static | `(r: number) => string` | 행 인덱스(0 기반)를 행 주소 문자열로 변환 |
42
+ | `stringifyColAddr` | static | `(c: number) => string` | 열 인덱스(0 기반)를 열 주소 문자열로 변환. 범위: 0~16383 |
43
+ | `parseRowAddr` | static | `(addr: string) => number` | 셀 주소에서 0 기반 행 인덱스 추출 |
44
+ | `parseColAddr` | static | `(addr: string) => number` | 셀 주소에서 0 기반 열 인덱스 추출 |
45
+ | `parseCellAddr` | static | `(addr: string) => ExcelAddressPoint` | 셀 주소를 좌표로 변환 |
46
+ | `parseRangeAddr` | static | `(rangeAddr: string) => ExcelAddressRangePoint` | 범위 주소를 좌표로 변환 |
47
+ | `stringifyRangeAddr` | static | `(point: ExcelAddressRangePoint) => string` | 범위 좌표를 주소 문자열로 변환. 시작=끝이면 단일 셀 주소 반환 |
48
+ | `convertTimeTickToNumber` | static | `(tick: number) => number` | JavaScript 타임스탬프(ms)를 Excel 날짜 숫자로 변환 |
49
+ | `convertNumberToTimeTick` | static | `(value: number) => number` | Excel 날짜 숫자를 JavaScript 타임스탬프(ms)로 변환 |
50
+ | `convertNumFmtCodeToName` | static | `(numFmtCode: string) => ExcelNumberFormat` | 숫자 형식 코드를 형식 이름으로 변환 |
51
+ | `convertNumFmtIdToName` | static | `(numFmtId: number) => ExcelNumberFormat` | Excel 내장 숫자 형식 ID를 형식 이름으로 변환 |
52
+ | `convertNumFmtNameToId` | static | `(numFmtName: ExcelNumberFormat) => number` | 숫자 형식 이름을 형식 ID로 변환 |
53
+
54
+ ## Usage
55
+
56
+ ```typescript
57
+ import { ExcelUtils } from "@simplysm/excel";
58
+
59
+ // 주소 변환
60
+ ExcelUtils.stringifyAddr({ r: 0, c: 0 }); // "A1"
61
+ ExcelUtils.stringifyAddr({ r: 2, c: 3 }); // "D3"
62
+ ExcelUtils.parseCellAddr("B3"); // { r: 2, c: 1 }
63
+ ExcelUtils.parseRangeAddr("A1:C3"); // { s: { r: 0, c: 0 }, e: { r: 2, c: 2 } }
64
+ ExcelUtils.stringifyRangeAddr({ s: { r: 0, c: 0 }, e: { r: 2, c: 2 } }); // "A1:C3"
65
+
66
+ ExcelUtils.stringifyRowAddr(0); // "1"
67
+ ExcelUtils.stringifyColAddr(0); // "A"
68
+ ExcelUtils.stringifyColAddr(26); // "AA"
69
+ ExcelUtils.parseRowAddr("A3"); // 2
70
+ ExcelUtils.parseColAddr("B3"); // 1
71
+ ```
72
+
73
+ ## `convertNumFmtCodeToName` 변환 규칙
74
+
75
+ | 형식 코드 패턴 | 반환값 |
76
+ |----------------|--------|
77
+ | `"General"` | `"number"` |
78
+ | `yy`, `dd`, `mm`(날짜 문맥) 포함 + 시간(`h`, `ss`) 포함 | `"DateTime"` |
79
+ | `yy`, `dd`, `mm`(날짜 문맥) 포함 | `"DateOnly"` |
80
+ | `h`, `ss` 포함 | `"Time"` |
81
+ | 숫자 패턴 (`0`, `#`, `.` 등) | `"number"` |
82
+
83
+ ## `convertNumFmtIdToName` 내장 형식 ID 범위
84
+
85
+ | ID 범위 | 형식 |
86
+ |---------|------|
87
+ | 0~13, 37~40, 48 | `"number"` (숫자/일반/통화/퍼센트) |
88
+ | 14~17, 27~31, 34~36, 50~58 | `"DateOnly"` (날짜, 로컬라이즈 포함) |
89
+ | 22 | `"DateTime"` (날짜+시간) |
90
+ | 18~21, 32~33, 45~47 | `"Time"` (시간) |
91
+ | 49 | `"string"` (텍스트) |
92
+
93
+ ## `convertNumFmtNameToId` 매핑
94
+
95
+ | 형식 이름 | ID |
96
+ |-----------|-----|
97
+ | `"number"` | 0 |
98
+ | `"DateOnly"` | 14 |
99
+ | `"DateTime"` | 22 |
100
+ | `"Time"` | 18 |
101
+ | `"string"` | 49 |
@@ -0,0 +1,108 @@
1
+ # ExcelWrapper
2
+
3
+ Zod 스키마 기반 타입 안전한 Excel 읽기/쓰기 래퍼. 스키마에서 타입 정보를 추론하여 타입 안전한 읽기/쓰기를 제공한다.
4
+
5
+ ## When to use
6
+
7
+ - ✅ 정형화된 레코드 구조의 Excel 파일을 읽기/쓰기할 때 (업로드/다운로드 시나리오)
8
+ - ✅ Zod 스키마로 유효성 검사를 자동 수행하고 싶을 때
9
+ - ❌ 셀 단위 세밀한 조작(병합, 이미지 삽입, 수식 등)이 필요하면 [`ExcelWorkbook`](../core-classes/excel-workbook.md) + [`ExcelWorksheet`](../core-classes/excel-worksheet.md)를 직접 사용
10
+
11
+ ## Signature
12
+
13
+ ```typescript
14
+ export class ExcelWrapper<TSchema extends z.ZodObject<z.ZodRawShape>> {
15
+ constructor(schema: TSchema);
16
+
17
+ async read(
18
+ file: Bytes | Blob,
19
+ wsNameOrIndex?: string | number,
20
+ options?: { excludes?: (keyof z.infer<TSchema>)[] },
21
+ ): Promise<z.infer<TSchema>[]>;
22
+
23
+ async write(
24
+ wsName: string,
25
+ records: Partial<z.infer<TSchema>>[],
26
+ options?: { excludes?: (keyof z.infer<TSchema>)[] },
27
+ ): Promise<ExcelWorkbook>;
28
+ }
29
+ ```
30
+
31
+ ## Members
32
+
33
+ | Member | Kind | Type | Description |
34
+ |--------|------|------|-------------|
35
+ | `constructor` | method | `(schema: TSchema) => ExcelWrapper<TSchema>` | Zod 스키마를 받아 인스턴스 생성. `.describe()`로 Excel 헤더 이름을 지정한다 |
36
+ | `read` | method | `(file, wsNameOrIndex?, options?) => Promise<z.infer<TSchema>[]>` | Excel 파일을 레코드 배열로 읽기. 스키마 유효성 검사 수행 |
37
+ | `write` | method | `(wsName, records, options?) => Promise<ExcelWorkbook>` | 레코드 배열을 Excel 워크북으로 변환. 반환된 워크북의 `close()`는 호출자 책임 |
38
+
39
+ ## Parameters
40
+
41
+ ### `read(file, wsNameOrIndex?, options?)`
42
+
43
+ | Parameter | Type | Description |
44
+ |-----------|------|-------------|
45
+ | `file` | `Bytes \| Blob` | Excel 파일 데이터 |
46
+ | `wsNameOrIndex` | `string \| number` | 워크시트 이름 또는 0 기반 인덱스 (기본값: `0`) |
47
+ | `options.excludes` | `(keyof z.infer<TSchema>)[] \| undefined` | 읽기에서 제외할 필드 키 배열 |
48
+
49
+ **타입 변환 규칙:**
50
+
51
+ | 스키마 타입 | 변환 동작 |
52
+ |------------|-----------|
53
+ | `z.string()` | 문자열로 변환 (`String(rawValue)`) |
54
+ | `z.number()` | 숫자로 파싱 (`num.parseFloat`) |
55
+ | `z.boolean()` | `"1"`, `"true"` → `true`, `"0"`, `"false"` → `false` |
56
+ | `z.optional()` / `z.nullable()` | 빈 셀을 `undefined`로 반환 |
57
+ | `z.default(value)` | 빈 셀에 기본값 적용 |
58
+ | `DateOnly` / `DateTime` / `Time` | `instanceof`로 직접 전달 |
59
+
60
+ ### `write(wsName, records, options?)`
61
+
62
+ | Parameter | Type | Description |
63
+ |-----------|------|-------------|
64
+ | `wsName` | `string` | 워크시트 이름 |
65
+ | `records` | `Partial<z.infer<TSchema>>[]` | 레코드 배열 |
66
+ | `options.excludes` | `(keyof z.infer<TSchema>)[] \| undefined` | 쓰기에서 제외할 필드 키 배열 |
67
+
68
+ **쓰기 동작:**
69
+
70
+ - 첫 번째 행에 헤더 자동 생성 (스키마의 `.describe()` 값 사용)
71
+ - 모든 셀에 테두리 스타일 자동 적용
72
+ - 필수 비boolean 필드의 헤더에 노란색 배경(`00FFFF00`) 강조
73
+ - 확대/축소 85%, 첫 번째 행 틀 고정 자동 설정
74
+ - 내부에서 에러 발생 시 워크북이 자동으로 `close()`됨
75
+
76
+ ## Usage
77
+
78
+ ```typescript
79
+ import { ExcelWrapper } from "@simplysm/excel";
80
+ import { z } from "zod";
81
+
82
+ const schema = z.object({
83
+ name: z.string().describe("이름"),
84
+ age: z.number().describe("나이"),
85
+ email: z.string().optional().describe("이메일"),
86
+ active: z.boolean().default(false).describe("활성"),
87
+ });
88
+
89
+ const wrapper = new ExcelWrapper(schema);
90
+
91
+ // 쓰기 (시트명, 레코드 배열)
92
+ const wb = await wrapper.write("사람", [
93
+ { name: "김철수", age: 30, email: "kim@example.com" },
94
+ { name: "이영희", age: 28 },
95
+ ]);
96
+ try {
97
+ const bytes = await wb.toBytes();
98
+ } finally {
99
+ await wb.close();
100
+ }
101
+
102
+ // 읽기 (시트명 또는 인덱스, 기본값: 0)
103
+ const records = await wrapper.read(bytes, "사람");
104
+ // z.infer<typeof schema>[] 타입으로 반환
105
+
106
+ // excludes 옵션으로 특정 필드 제외
107
+ const filtered = await wrapper.read(bytes, 0, { excludes: ["email"] });
108
+ ```
@@ -0,0 +1,183 @@
1
+ # @simplysm/lint
2
+
3
+ > Simplysm 모노레포 전용 ESLint 플러그인 및 공유 Flat Config 설정.
4
+ > 커스텀 규칙 9개(`@simplysm/*`)와 TypeScript/Angular/HTML 파일별 권장 설정을 제공한다.
5
+ > ESLint Flat Config(`eslint.config.js`) 환경에서 동작한다.
6
+
7
+ ## Installation
8
+
9
+ ```bash
10
+ npm install @simplysm/lint
11
+ ```
12
+
13
+ ## 하려는 작업 → 먼저 읽을 파일
14
+
15
+ | 작업 | 먼저 읽을 파일 |
16
+ |------|----------------|
17
+ | 프로젝트에 ESLint 설정 적용 | 이 문서의 [Usage Examples](#usage-examples) |
18
+ | 개별 규칙만 활성화 | 이 문서의 [Plugin](#plugin-simplysmlinteslint-plugin) |
19
+ | 파일 패턴별 적용 규칙 확인 | 이 문서의 [Config 블록 구성](#config-블록-구성) |
20
+
21
+ ## API Overview
22
+
23
+ ### Plugin (`@simplysm/lint/eslint-plugin`)
24
+
25
+ `{ rules: {...} }` 형태의 ESLint 플러그인 객체. 9개의 커스텀 규칙을 포함한다.
26
+
27
+ #### Rules
28
+
29
+ | Rule | Type | Fixable | 언제 쓰나 |
30
+ |------|------|---------|-----------|
31
+ | `no-hard-private` | problem | autofix | ECMAScript `#private` 필드를 금지하고 TypeScript `private _` 스타일을 강제할 때. 선언(`#field`, `#method()`, `accessor #field`)과 사용(`this.#field`) 모두 감지. 이름 충돌 시 `nameConflict` 메시지 보고 |
32
+ | `no-subpath-imports-from-simplysm` | problem | autofix | `@simplysm/*` 패키지에서 `src` 하위 경로 import를 금지할 때. 정적 import, 동적 import, re-export 모두 감지. `@simplysm/pkg/src/...` -> `@simplysm/pkg`로 자동 수정 |
33
+ | `ts-no-throw-not-implemented-error` | suggestion | - | `@simplysm/core-common`의 `NotImplementedError`가 프로덕션에 남아있는지 경고할 때. named/aliased/namespace import 감지. 동적 import는 미감지 |
34
+ | `ts-no-unused-injects` | problem | autofix | 미사용 Angular `inject()` 필드를 자동 제거할 때. 클래스 내 `inject()` 호출로 초기화된 프로퍼티 중 참조되지 않는 필드를 보고 |
35
+ | `ts-no-unused-protected-readonly` | problem | autofix | Angular `@Component` 클래스의 미사용 `protected readonly` 필드를 자동 제거할 때. 인라인 템플릿(`template` 프로퍼티)과 클래스 본문 모두에서 참조 여부를 확인. `@angular/compiler`의 `parseTemplate`으로 템플릿 AST 기반 정확 추출 |
36
+ | `ng-no-async-effect` | problem | - | `@angular/core`의 `effect()`에 async 함수 직접 전달을 금지할 때. `await` 이후의 signal read가 의존성으로 추적되지 않는 함정을 방지. named/aliased/namespace import 모두 감지 |
37
+ | `ng-template-no-strict-null-check` | problem | - | Angular 템플릿에서 `=== null`/`!== null`/`=== undefined`/`!== undefined` 사용을 금지하고 `== null`/`!= null`로 통일할 때. autofix 미제공(인라인 템플릿 offset 매핑 문제) |
38
+ | `ng-template-no-todo-comments` | problem | - | HTML 템플릿 내 `<!-- TODO: ... -->` 주석을 경고할 때. raw text regex 방식으로 동작 |
39
+ | `ng-template-sd-require-binding-attrs` | problem | autofix | `sd-*` 컴포넌트에서 허용 목록 외 plain attribute 사용을 금지하고 Angular property binding(`[attr]="..."`)을 강제할 때 |
40
+
41
+ #### `ng-template-sd-require-binding-attrs` Options
42
+
43
+ 유일하게 사용자 옵션을 받는 규칙이다.
44
+
45
+ | Field | Type | Default | Description |
46
+ |-------|------|---------|-------------|
47
+ | `selectorPrefixes` | `string[]` | `["sd-"]` | 검사 대상 엘리먼트의 태그명 접두사 목록 |
48
+ | `allowAttributes` | `string[]` | `["id", "class", "style", "title", "tabindex", "role"]` | plain attribute로 허용할 속성명 목록 |
49
+ | `allowAttributePrefixes` | `string[]` | `["aria-", "data-", "sd-"]` | plain attribute로 허용할 속성명 접두사 목록 |
50
+
51
+ ### Recommended Config (`@simplysm/lint/eslint-recommended`)
52
+
53
+ `tseslint.config()`으로 생성된 `FlatConfig.Config[]` 배열. 커스텀 플러그인과 외부 플러그인(`typescript-eslint`, `angular-eslint`, `eslint-plugin-import`, `eslint-plugin-unused-imports`)을 조합한 권장 설정이다.
54
+
55
+ #### Config 블록 구성
56
+
57
+ | 파일 패턴 | 적용 플러그인 | 주요 규칙 |
58
+ |-----------|-------------|-----------|
59
+ | `**/*.js`, `**/*.mjs`, `**/*.cjs` | `@simplysm`, `import`, `unused-imports` | `no-hard-private`, `no-subpath-imports-from-simplysm`, `require-await`, `no-shadow` |
60
+ | `**/*.ts` | `@typescript-eslint`, `@simplysm`, `import`, `unused-imports`, `angular-eslint` | 전체 커스텀 규칙 + `require-await`, `strict-boolean-expressions`, `prefer-readonly`, `only-throw-error`, `no-array-delete` 등 |
61
+ | `**/*.html` | `@simplysm`, `@angular-eslint/template` (recommended + accessibility) | `ng-template-no-strict-null-check`, `ng-template-no-todo-comments`, `ng-template-sd-require-binding-attrs` |
62
+ | `**/tests/**/*.ts` | - | `no-console`, `import/no-extraneous-dependencies`, `ts-no-throw-not-implemented-error` 비활성화 |
63
+ | `**/vitest.config.ts` | - | `no-restricted-properties` 비활성화 (`process.env` 접근 허용) |
64
+
65
+ #### 공유 규칙 변수
66
+
67
+ | Variable | Description |
68
+ |----------|-------------|
69
+ | `commonRules` | `eqeqeq` (`null` 비교만 `==` 허용), `no-warning-comments`, `no-self-compare`, `array-callback-return` |
70
+ | `noNodeBuiltinsRules` | `Buffer` 전역 사용 금지, `buffer`/`events`/`eventemitter3` import 금지 |
71
+ | `noDirectEnvAccessRules` | `process.env` 및 `import.meta.env` 직접 접근 금지 (`env("...")` 사용 강제), `NODE_ENV` 환경변수 사용 금지, `=== undefined` / `!== undefined` 비교 금지 (`== null` / `!= null` 사용 강제) |
72
+ | `unusedImportsRules` | 미사용 import 자동 제거 (`_` 접두사 변수 무시) |
73
+
74
+ #### Ignores
75
+
76
+ `**/node_modules/**`, `**/dist/**`, `**/.*/**` (dotfiles 디렉토리)를 무시한다.
77
+
78
+ ## Usage Examples
79
+
80
+ ### 최소 예제: Flat Config에서 권장 설정 사용
81
+
82
+ ```typescript
83
+ // eslint.config.js
84
+ import recommended from "@simplysm/lint/eslint-recommended";
85
+
86
+ export default [
87
+ ...recommended,
88
+ ];
89
+ ```
90
+
91
+ 대부분의 경우 이것만으로 충분하다. 권장 설정에 TS/JS/HTML 파일별 규칙이 모두 포함되어 있다.
92
+
93
+ ### 전형 예제: 플러그인만 사용하여 개별 규칙 활성화
94
+
95
+ ```typescript
96
+ // eslint.config.js
97
+ import plugin from "@simplysm/lint/eslint-plugin";
98
+
99
+ export default [
100
+ {
101
+ plugins: {
102
+ "@simplysm": plugin,
103
+ },
104
+ rules: {
105
+ // 규칙명 앞에 반드시 "@simplysm/" 네임스페이스를 붙인다
106
+ "@simplysm/no-hard-private": "error",
107
+ "@simplysm/no-subpath-imports-from-simplysm": "error",
108
+ },
109
+ },
110
+ ];
111
+ ```
112
+
113
+ ### 전형 예제: `ng-template-sd-require-binding-attrs` 옵션 커스터마이징
114
+
115
+ ```typescript
116
+ // eslint.config.js
117
+ import recommended from "@simplysm/lint/eslint-recommended";
118
+
119
+ export default [
120
+ ...recommended,
121
+ {
122
+ files: ["**/*.html"],
123
+ rules: {
124
+ "@simplysm/ng-template-sd-require-binding-attrs": [
125
+ "error",
126
+ {
127
+ selectorPrefixes: ["sd-", "app-"], // "app-" 접두사 컴포넌트도 검사 대상에 추가
128
+ allowAttributes: ["id", "class", "style", "title", "tabindex", "role", "name"],
129
+ allowAttributePrefixes: ["aria-", "data-", "sd-", "app-"],
130
+ },
131
+ ],
132
+ },
133
+ },
134
+ ];
135
+ ```
136
+
137
+ ## 🚫 Anti-patterns
138
+
139
+ ### effect()에서 async 콜백 사용
140
+
141
+ ```typescript
142
+ // ❌ await 이후 signal read가 의존성으로 추적되지 않는다
143
+ effect(async () => {
144
+ const val = this.someSignal();
145
+ await this.doAsync();
146
+ });
147
+
148
+ // ✅ 동기 콜백에서 signal을 읽고, 비동기 작업은 untracked 내부에서 수행
149
+ effect(() => {
150
+ this.someSignal();
151
+ void untracked(async () => {
152
+ await this.doAsync();
153
+ });
154
+ });
155
+ ```
156
+
157
+ **근거**: `effect()` 콜백이 async면 `await` 이후의 signal read는 reactive context를 벗어나 추적되지 않으며, 반환값이 `Promise<void>`가 되어 `EffectCleanupFn` 등록도 불가능하다.
158
+
159
+ ### recommended 설정과 중복 규칙 선언
160
+
161
+ ```typescript
162
+ // ❌ recommended에 이미 포함된 규칙을 다시 선언
163
+ export default [
164
+ ...recommended,
165
+ {
166
+ rules: {
167
+ "@simplysm/no-hard-private": "error", // 이미 recommended에 포함
168
+ },
169
+ },
170
+ ];
171
+
172
+ // ✅ recommended만 spread하면 충분. 오버라이드가 필요한 경우에만 재선언
173
+ export default [
174
+ ...recommended,
175
+ ];
176
+ ```
177
+
178
+ **근거**: `eslint-recommended`에 모든 커스텀 규칙이 파일 패턴별로 이미 설정되어 있다. 중복 선언은 유지보수 부담만 증가시킨다.
179
+
180
+ ## 이 패키지를 쓰지 말아야 할 때
181
+
182
+ - Simplysm 모노레포 코딩 규칙(`#private` 금지, `Buffer` 금지, `process.env` 직접 접근 금지 등)을 따르지 않는 프로젝트 -- 범용 ESLint 설정이 아니므로 해당 규칙이 불필요한 프로젝트에는 적합하지 않다.
183
+ - Angular를 사용하지 않는 프로젝트에서 `eslint-recommended`를 그대로 사용하는 경우 -- Angular 관련 플러그인/규칙이 포함되어 있으므로 불필요한 의존성이 추가된다. 플러그인만 import하여 필요한 규칙만 개별 활성화한다.
@@ -0,0 +1,156 @@
1
+ # @simplysm/orm-common
2
+
3
+ DBMS 독립적인 ORM 코어 라이브러리. TypeScript Fluent API로 스키마를 정의하고, SQL AST(QueryDef)를 경유하여 MySQL/MSSQL/PostgreSQL 세 방언(dialect)의 SQL을 생성한다.
4
+
5
+ ## 스키마 정의 지침
6
+
7
+ **CRITICAL: 컬럼은 `NOT NULL` 기본. `.nullable()`/`.default(...)` 모두 "쓰지 않는 것이 기본"이며, 도메인상 정당한 근거가 있을 때만 붙인다.**
8
+
9
+ ### `.nullable()` 사용 기준
10
+
11
+ - 값이 없을 수 있는 근거가 **도메인 모델 자체**에 있을 때만 허용한다.
12
+ - 허용 예: 선택 입력 필드(회원가입 시 선택적으로 받는 전화번호), 아직 발생하지 않은 이벤트 시각(`deletedAt`, `completedAt`), 선택적 외래키(소속이 없을 수 있는 사용자의 `companyId`).
13
+ - 아래 이유로는 절대(NEVER) nullable로 만들지 않는다:
14
+ - "초기값을 정하기 애매해서" → nullable도 default도 답이 아니다. 도메인상 값이 반드시 있어야 하면 INSERT 시점에 호출자가 넣도록 강제한다.
15
+ - "마이그레이션 중간 단계에서 값이 없을 수 있어서" → 마이그레이션 스크립트에서 backfill 후 `NOT NULL`로 전환한다.
16
+ - "어떤 값을 넣어야 할지 몰라서" → 사용자에게 질문한다. 추측으로 nullable 처리 금지.
17
+
18
+ ### `.default(...)` 사용 기준
19
+
20
+ - 기본값은 **DB가 값을 결정해야 하는 경우**에만 지정한다. 애플리케이션 코드로 결정 가능한 값은 default로 넣지 않는다.
21
+ - 허용 예: `CURRENT_TIMESTAMP` 같이 DB 시각을 기준으로 해야 하는 경우, DB 차원에서 불변 상수로 고정되어야 하는 경우.
22
+ - 금지 예: "보통 0이니까 `.default(0)`", "대부분 false니까 `.default(false)`", "빈 문자열로 초기화" 등 **의미 없는 기본값으로 NOT NULL 제약을 우회하는 행위**.
23
+ - default가 있으면 호출자가 값을 빼먹어도 insert가 성공해버려, 정작 필수값이 누락된 채 DB에 들어간다. 정합성은 호출자의 명시적 전달로 지킨다.
24
+
25
+ 판단이 애매하면 반드시 **사용자에게 질문**한다. nullable/default 여부는 데이터 정합성의 핵심이므로 임의 결정 금지.
26
+
27
+ ## 삭제 전략 지침
28
+
29
+ 데이터 성격에 따라 soft delete와 물리 delete를 구분하여 적용한다.
30
+
31
+ ### Soft Delete 권장 — 기초정보(마스터 데이터)
32
+
33
+ 품목, 거래처, 사용자, 부서, 창고 등 **다른 테이블에서 FK로 참조되는 기초정보**는 soft delete를 사용한다.
34
+ - 이미 발행된 문서가 참조하고 있으므로, 물리 삭제 시 FK 무결성이 깨진다.
35
+ - `isDisabled` 등의 컬럼으로 비활성 처리하고, 조회 시 필터링한다.
36
+
37
+ ### 물리 Delete 권장 — 프로세스 문서(트랜잭션 데이터)
38
+
39
+ 입고지시, 입고, 출고지시, 출고, 주문, 검수 등 **업무 프로세스상 생성·처리·완료되는 문서**는 물리 delete를 사용한다.
40
+ - 문서는 생성-진행-완료의 생명주기를 가지며, 취소/삭제 시 관련 데이터(상세 행 포함)를 함께 물리 삭제한다.
41
+ - soft delete로 남기면 삭제된 문서가 집계·조회에 혼입되는 버그 원인이 된다.
42
+ - **FK 참조 차단**: 물리 삭제 전에 해당 레코드를 FK로 참조하는 다른 테이블의 데이터가 존재하는지 확인하고, 존재하면 삭제를 차단하며 사용자에게 안내 메시지를 출력한다 (예: "해당 입고지시를 참조하는 입고 데이터가 존재하여 삭제할 수 없습니다").
43
+
44
+ ## Installation
45
+
46
+ ```bash
47
+ npm install @simplysm/orm-common
48
+ ```
49
+
50
+ ## 하려는 작업 → 먼저 읽을 파일
51
+
52
+ | 작업 | 먼저 읽을 파일 |
53
+ |------|----------------|
54
+ | 테이블/뷰 스키마 정의 | [Table](./schema-builders/table.md), [View](./schema-builders/view.md) |
55
+ | DbContext 정의 및 연결/트랜잭션 관리 | [DbContext](./core/db-context.md) |
56
+ | SELECT/INSERT/UPDATE/DELETE 쿼리 구성 | [Queryable](./queryable-executable/queryable.md) |
57
+ | WHERE 조건, 집계, 문자열/날짜 표현식 작성 | [expr](./expression/expr.md) |
58
+ | FK/관계 정의 (N:1, 1:N, 1:1) | [ForeignKeyBuilder](./schema-builders/foreign-key-builder.md) |
59
+ | Stored Procedure 정의 및 실행 | [Procedure](./schema-builders/procedure.md), [Executable](./queryable-executable/executable.md) |
60
+ | 사용자 검색어를 SQL LIKE 패턴으로 변환 | [parseSearchQuery](./queryable-executable/parse-search-query.md) |
61
+ | QueryDef AST를 SQL 문자열로 변환 (테스트용) | [createQueryBuilder](./query-builder/create-query-builder.md) |
62
+ | DB 원시 결과를 중첩 객체로 파싱 (커스텀 executor용) | [parseQueryResult](./types/parse-query-result.md) |
63
+
64
+ ## API Overview
65
+
66
+ ### Core
67
+
68
+ | Entry | Kind | 언제 쓰나 |
69
+ |-------|------|-------------|
70
+ | [`DbContext`](./core/db-context.md) | class | DB 연결/트랜잭션/DDL/초기화를 관리할 때 |
71
+ | [`DbTransactionError`](./core/db-transaction-error.md) | class | 트랜잭션 에러를 DBMS 독립적으로 처리할 때 |
72
+
73
+ ### Queryable / Executable
74
+
75
+ | Entry | Kind | 언제 쓰나 |
76
+ |-------|------|-------------|
77
+ | [`Queryable`](./queryable-executable/queryable.md) | class | SELECT/INSERT/UPDATE/DELETE/UPSERT 쿼리를 체이닝으로 구성할 때 |
78
+ | [`Executable`](./queryable-executable/executable.md) | class | Stored Procedure를 실행할 때 |
79
+ | [`parseSearchQuery`](./queryable-executable/parse-search-query.md) | function | 사용자 검색 텍스트를 SQL LIKE 패턴으로 변환할 때 |
80
+
81
+ ### Expression
82
+
83
+ | Entry | Kind | 언제 쓰나 |
84
+ |-------|------|-------------|
85
+ | [`expr`](./expression/expr.md) | const | WHERE 조건, SELECT 표현식, 집계/윈도우 함수를 작성할 때 |
86
+ | [`ExprUnit`](./expression/expr-unit.md) | class | 표현식의 타입 정보를 래핑하여 타입 안전 체인을 구성할 때 |
87
+
88
+ ### Schema Builders
89
+
90
+ | Entry | Kind | 언제 쓰나 |
91
+ |-------|------|-------------|
92
+ | [`Table`](./schema-builders/table.md) | function | 테이블 스키마를 정의할 때 |
93
+ | [`View`](./schema-builders/view.md) | function | 뷰 스키마를 정의할 때 |
94
+ | [`Procedure`](./schema-builders/procedure.md) | function | Stored Procedure 스키마를 정의할 때 |
95
+ | [`ColumnBuilder`](./schema-builders/column-builder.md) | class | 컬럼의 타입/nullable/autoIncrement/default를 설정할 때 |
96
+ | [`IndexBuilder`](./schema-builders/index-builder.md) | class | 인덱스를 정의할 때 |
97
+ | [`ForeignKeyBuilder`](./schema-builders/foreign-key-builder.md) | class | FK/역참조/논리적 관계를 정의할 때 |
98
+
99
+ ### Models
100
+
101
+ | Entry | Kind | 언제 쓰나 |
102
+ |-------|------|-------------|
103
+ | [`_Migration`](./models/migration.md) | const | 마이그레이션 이력을 관리하는 시스템 테이블 |
104
+
105
+ ### Query Builder
106
+
107
+ | Entry | Kind | 언제 쓰나 |
108
+ |-------|------|-------------|
109
+ | [`createQueryBuilder`](./query-builder/create-query-builder.md) | function | QueryDef AST를 dialect별 SQL 문자열로 변환할 때 (테스트용) |
110
+
111
+ ### Types
112
+
113
+ | Entry | Kind | 언제 쓰나 |
114
+ |-------|------|-------------|
115
+ | [`Dialect`](./types/dialect.md) | type | DB 방언 및 런타임 타입을 참조할 때 |
116
+ | [`DataType`](./types/data-type.md) | type | SQL 데이터 타입 매핑을 참조할 때 |
117
+ | [`QueryDef`](./types/query-def.md) | type | SQL AST 구조를 이해할 때 |
118
+ | [`Expr`](./types/expr.md) | type | 표현식 AST 구조를 이해할 때 |
119
+ | [`parseQueryResult`](./types/parse-query-result.md) | function | DB 원시 결과를 중첩 TypeScript 객체로 변환할 때 (커스텀 executor용) |
120
+
121
+ ## Usage Examples
122
+
123
+ ```typescript
124
+ import { DbContext, Table, expr } from "@simplysm/orm-common";
125
+
126
+ // 스키마 정의
127
+ const User = Table("User")
128
+ .columns((c) => ({
129
+ id: c.bigint().autoIncrement(),
130
+ name: c.varchar(100),
131
+ email: c.varchar(200).nullable(),
132
+ }))
133
+ .primaryKey("id");
134
+
135
+ // DbContext 정의
136
+ class MainDb extends DbContext {
137
+ user = this.queryable(User);
138
+ migrations = [
139
+ { name: "001_init", up: async (db) => { await db.createTable(User); } },
140
+ ];
141
+ }
142
+
143
+ // 쿼리 실행
144
+ const db = new MainDb(executor, { database: "mydb" });
145
+ await db.connect(async () => {
146
+ const users = await db.user()
147
+ .where((u) => [expr.eq(u.name, "Alice")])
148
+ .orderBy((u) => u.name)
149
+ .execute();
150
+ });
151
+ ```
152
+
153
+ ## 이 패키지를 쓰지 말아야 할 때
154
+
155
+ - 실제 DB 연결이 필요하면 `@simplysm/orm-node` (`NodeDbContextExecutor`)를 함께 사용한다. 이 패키지는 SQL AST 생성까지만 담당하고, DB 드라이버 연결은 제공하지 않는다.
156
+ - 서비스 클라이언트에서 서버를 경유하여 DB에 접근하려면 `@simplysm/service-client`의 `SdServiceDbContextExecutor`를 사용한다.