@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.
- package/claude/references/sd-frontend-design.md +10 -9
- package/claude/references/sd-simplysm-v14/angular/README.md +497 -0
- package/claude/references/sd-simplysm-v14/angular/bootstrap/provide-sd-angular.md +37 -0
- package/claude/references/sd-simplysm-v14/angular/bootstrap/sd-angular-config-provider.md +16 -0
- package/claude/references/sd-simplysm-v14/angular/directives/sd-command-directive.md +27 -0
- package/claude/references/sd-simplysm-v14/angular/directives/sd-events.md +25 -0
- package/claude/references/sd-simplysm-v14/angular/directives/sd-intersection-directive.md +36 -0
- package/claude/references/sd-simplysm-v14/angular/directives/sd-invalid.md +24 -0
- package/claude/references/sd-simplysm-v14/angular/directives/sd-resize-directive.md +42 -0
- package/claude/references/sd-simplysm-v14/angular/directives/sd-ripple.md +23 -0
- package/claude/references/sd-simplysm-v14/angular/directives/sd-router-link.md +38 -0
- package/claude/references/sd-simplysm-v14/angular/directives/sd-show-effect.md +18 -0
- package/claude/references/sd-simplysm-v14/angular/directives/sd-typed-template.md +69 -0
- package/claude/references/sd-simplysm-v14/angular/features/sd-address-search-modal.md +50 -0
- package/claude/references/sd-simplysm-v14/angular/features/sd-permission-table.md +20 -0
- package/claude/references/sd-simplysm-v14/angular/features/sd-shared-data-components.md +158 -0
- package/claude/references/sd-simplysm-v14/angular/features/sd-tiptap-editor.md +26 -0
- package/claude/references/sd-simplysm-v14/angular/pipes/format-pipe.md +41 -0
- package/claude/references/sd-simplysm-v14/angular/plugins/sd-global-error-handler.md +23 -0
- package/claude/references/sd-simplysm-v14/angular/plugins/sd-option-event-plugin.md +34 -0
- package/claude/references/sd-simplysm-v14/angular/provider-types/sd-menu.md +65 -0
- package/claude/references/sd-simplysm-v14/angular/provider-types/sd-modal-content-def.md +148 -0
- package/claude/references/sd-simplysm-v14/angular/provider-types/sd-toast-content-def.md +73 -0
- package/claude/references/sd-simplysm-v14/angular/provider-types/shared-data-base.md +59 -0
- package/claude/references/sd-simplysm-v14/angular/providers/sd-activated-modal-provider.md +34 -0
- package/claude/references/sd-simplysm-v14/angular/providers/sd-app-structure-provider.md +81 -0
- package/claude/references/sd-simplysm-v14/angular/providers/sd-busy-provider.md +18 -0
- package/claude/references/sd-simplysm-v14/angular/providers/sd-file-dialog-provider.md +40 -0
- package/claude/references/sd-simplysm-v14/angular/providers/sd-local-storage-provider.md +20 -0
- package/claude/references/sd-simplysm-v14/angular/providers/sd-modal-provider.md +67 -0
- package/claude/references/sd-simplysm-v14/angular/providers/sd-navigate-window-provider.md +18 -0
- package/claude/references/sd-simplysm-v14/angular/providers/sd-print-provider.md +25 -0
- package/claude/references/sd-simplysm-v14/angular/providers/sd-service-client-factory-provider.md +43 -0
- package/claude/references/sd-simplysm-v14/angular/providers/sd-shared-data-provider.md +64 -0
- package/claude/references/sd-simplysm-v14/angular/providers/sd-system-config-provider.md +46 -0
- package/claude/references/sd-simplysm-v14/angular/providers/sd-system-log-provider.md +18 -0
- package/claude/references/sd-simplysm-v14/angular/providers/sd-theme-provider.md +38 -0
- package/claude/references/sd-simplysm-v14/angular/providers/sd-toast-provider.md +65 -0
- package/claude/references/sd-simplysm-v14/angular/recipes/_common-rules.md +336 -0
- package/claude/references/sd-simplysm-v14/angular/recipes/crud-detail/extension-a-edit-save.md +191 -0
- package/claude/references/sd-simplysm-v14/angular/recipes/crud-detail/extension-b-delete-restore.md +103 -0
- package/claude/references/sd-simplysm-v14/angular/recipes/crud-detail/extension-c-modal-view.md +198 -0
- package/claude/references/sd-simplysm-v14/angular/recipes/crud-detail/extension-d-control-view.md +109 -0
- package/claude/references/sd-simplysm-v14/angular/recipes/crud-detail/extension-e-auxiliary.md +87 -0
- package/claude/references/sd-simplysm-v14/angular/recipes/crud-detail/extension-f-complex-detail.md +202 -0
- package/claude/references/sd-simplysm-v14/angular/recipes/crud-detail.md +280 -0
- package/claude/references/sd-simplysm-v14/angular/recipes/crud-list/extension-a-inline-edit.md +386 -0
- package/claude/references/sd-simplysm-v14/angular/recipes/crud-list/extension-b-selection.md +215 -0
- package/claude/references/sd-simplysm-v14/angular/recipes/crud-list/extension-c-inline-delete.md +64 -0
- package/claude/references/sd-simplysm-v14/angular/recipes/crud-list/extension-d-select-modal.md +193 -0
- package/claude/references/sd-simplysm-v14/angular/recipes/crud-list/extension-e-readonly-modal.md +140 -0
- package/claude/references/sd-simplysm-v14/angular/recipes/crud-list/extension-f-modal-edit.md +123 -0
- package/claude/references/sd-simplysm-v14/angular/recipes/crud-list/extension-g-excel.md +145 -0
- package/claude/references/sd-simplysm-v14/angular/recipes/crud-list.md +377 -0
- package/claude/references/sd-simplysm-v14/angular/recipes/data-select-button.md +368 -0
- package/claude/references/sd-simplysm-v14/angular/recipes/page-modal-container.md +238 -0
- package/claude/references/sd-simplysm-v14/angular/styling/classes.md +149 -0
- package/claude/references/sd-simplysm-v14/angular/styling/mixins.md +100 -0
- package/claude/references/sd-simplysm-v14/angular/styling/themes.md +35 -0
- package/claude/references/sd-simplysm-v14/angular/styling/variables.md +147 -0
- package/claude/references/sd-simplysm-v14/angular/type-utilities/directive-input-signals.md +232 -0
- package/claude/references/sd-simplysm-v14/angular/ui-data/sd-list.md +37 -0
- package/claude/references/sd-simplysm-v14/angular/ui-data/sd-sheet.md +212 -0
- package/claude/references/sd-simplysm-v14/angular/ui-form/sd-additional-button.md +26 -0
- package/claude/references/sd-simplysm-v14/angular/ui-form/sd-anchor.md +31 -0
- package/claude/references/sd-simplysm-v14/angular/ui-form/sd-button.md +103 -0
- package/claude/references/sd-simplysm-v14/angular/ui-form/sd-checkbox-group.md +39 -0
- package/claude/references/sd-simplysm-v14/angular/ui-form/sd-checkbox.md +81 -0
- package/claude/references/sd-simplysm-v14/angular/ui-form/sd-date-range-picker.md +27 -0
- package/claude/references/sd-simplysm-v14/angular/ui-form/sd-form.md +89 -0
- package/claude/references/sd-simplysm-v14/angular/ui-form/sd-modal-select-button.md +54 -0
- package/claude/references/sd-simplysm-v14/angular/ui-form/sd-numpad.md +26 -0
- package/claude/references/sd-simplysm-v14/angular/ui-form/sd-range.md +26 -0
- package/claude/references/sd-simplysm-v14/angular/ui-form/sd-select.md +68 -0
- package/claude/references/sd-simplysm-v14/angular/ui-form/sd-shared-data-select.md +52 -0
- package/claude/references/sd-simplysm-v14/angular/ui-form/sd-state-preset.md +37 -0
- package/claude/references/sd-simplysm-v14/angular/ui-form/sd-switch.md +27 -0
- package/claude/references/sd-simplysm-v14/angular/ui-form/sd-textarea.md +33 -0
- package/claude/references/sd-simplysm-v14/angular/ui-form/sd-textfield.md +145 -0
- package/claude/references/sd-simplysm-v14/angular/ui-layout/sd-dock-container.md +64 -0
- package/claude/references/sd-simplysm-v14/angular/ui-layout/sd-dock.md +37 -0
- package/claude/references/sd-simplysm-v14/angular/ui-layout/sd-gap.md +26 -0
- package/claude/references/sd-simplysm-v14/angular/ui-layout/sd-kanban-board.md +96 -0
- package/claude/references/sd-simplysm-v14/angular/ui-layout/sd-kanban-lane.md +34 -0
- package/claude/references/sd-simplysm-v14/angular/ui-layout/sd-kanban.md +29 -0
- package/claude/references/sd-simplysm-v14/angular/ui-navigation/sd-collapse.md +35 -0
- package/claude/references/sd-simplysm-v14/angular/ui-navigation/sd-pagination.md +26 -0
- package/claude/references/sd-simplysm-v14/angular/ui-navigation/sd-sidebar-container.md +49 -0
- package/claude/references/sd-simplysm-v14/angular/ui-navigation/sd-sidebar-menu.md +22 -0
- package/claude/references/sd-simplysm-v14/angular/ui-navigation/sd-sidebar-user.md +43 -0
- package/claude/references/sd-simplysm-v14/angular/ui-navigation/sd-tab.md +51 -0
- package/claude/references/sd-simplysm-v14/angular/ui-navigation/sd-topbar-container.md +97 -0
- package/claude/references/sd-simplysm-v14/angular/ui-navigation/sd-topbar-menu.md +23 -0
- package/claude/references/sd-simplysm-v14/angular/ui-navigation/sd-topbar-user.md +38 -0
- package/claude/references/sd-simplysm-v14/angular/ui-navigation/sd-topbar.md +30 -0
- package/claude/references/sd-simplysm-v14/angular/ui-overlay/sd-busy-container.md +69 -0
- package/claude/references/sd-simplysm-v14/angular/ui-overlay/sd-confirm-modal.md +30 -0
- package/claude/references/sd-simplysm-v14/angular/ui-overlay/sd-dropdown.md +40 -0
- package/claude/references/sd-simplysm-v14/angular/ui-overlay/sd-modal.md +34 -0
- package/claude/references/sd-simplysm-v14/angular/ui-overlay/sd-prompt-modal.md +30 -0
- package/claude/references/sd-simplysm-v14/angular/ui-overlay/sd-toast.md +35 -0
- package/claude/references/sd-simplysm-v14/angular/ui-visual/sd-barcode.md +36 -0
- package/claude/references/sd-simplysm-v14/angular/ui-visual/sd-calendar.md +34 -0
- package/claude/references/sd-simplysm-v14/angular/ui-visual/sd-echarts.md +32 -0
- package/claude/references/sd-simplysm-v14/angular/ui-visual/sd-label.md +24 -0
- package/claude/references/sd-simplysm-v14/angular/ui-visual/sd-note.md +23 -0
- package/claude/references/sd-simplysm-v14/angular/ui-visual/sd-progress.md +23 -0
- package/claude/references/sd-simplysm-v14/angular/utils/inject-routing-signals.md +161 -0
- package/claude/references/sd-simplysm-v14/angular/utils/inject-sd-system-config-resource.md +35 -0
- package/claude/references/sd-simplysm-v14/angular/utils/mark.md +43 -0
- package/claude/references/sd-simplysm-v14/angular/utils/selection-managers.md +96 -0
- package/claude/references/sd-simplysm-v14/angular/utils/set-safe-style.md +19 -0
- package/claude/references/sd-simplysm-v14/angular/utils/setup-functions.md +93 -0
- package/claude/references/sd-simplysm-v14/capacitor-plugin-auto-update/README.md +38 -0
- package/claude/references/sd-simplysm-v14/capacitor-plugin-auto-update/apk-installer/apk-installer.md +115 -0
- package/claude/references/sd-simplysm-v14/capacitor-plugin-auto-update/auto-update/auto-update.md +113 -0
- package/claude/references/sd-simplysm-v14/capacitor-plugin-file-system/README.md +197 -0
- package/claude/references/sd-simplysm-v14/capacitor-plugin-intent/README.md +235 -0
- package/claude/references/sd-simplysm-v14/capacitor-plugin-usb-storage/README.md +251 -0
- package/claude/references/sd-simplysm-v14/core-browser/README.md +52 -0
- package/claude/references/sd-simplysm-v14/core-browser/extensions/copy-paste.md +59 -0
- package/claude/references/sd-simplysm-v14/core-browser/extensions/element-prototype-extensions.md +137 -0
- package/claude/references/sd-simplysm-v14/core-browser/extensions/get-bounds.md +84 -0
- package/claude/references/sd-simplysm-v14/core-browser/utils/download-blob.md +59 -0
- package/claude/references/sd-simplysm-v14/core-browser/utils/fetch-url-bytes.md +91 -0
- package/claude/references/sd-simplysm-v14/core-browser/utils/indexed-db-store.md +131 -0
- package/claude/references/sd-simplysm-v14/core-browser/utils/indexed-db-virtual-fs.md +121 -0
- package/claude/references/sd-simplysm-v14/core-browser/utils/open-file-dialog.md +60 -0
- package/claude/references/sd-simplysm-v14/core-common/README.md +179 -0
- package/claude/references/sd-simplysm-v14/core-common/errors/argument-error.md +26 -0
- package/claude/references/sd-simplysm-v14/core-common/errors/not-implemented-error.md +33 -0
- package/claude/references/sd-simplysm-v14/core-common/errors/sd-error.md +38 -0
- package/claude/references/sd-simplysm-v14/core-common/errors/timeout-error.md +36 -0
- package/claude/references/sd-simplysm-v14/core-common/extensions/array.md +125 -0
- package/claude/references/sd-simplysm-v14/core-common/extensions/map.md +43 -0
- package/claude/references/sd-simplysm-v14/core-common/extensions/set.md +35 -0
- package/claude/references/sd-simplysm-v14/core-common/features/debounce-queue.md +48 -0
- package/claude/references/sd-simplysm-v14/core-common/features/event-emitter.md +52 -0
- package/claude/references/sd-simplysm-v14/core-common/features/serial-queue.md +44 -0
- package/claude/references/sd-simplysm-v14/core-common/type-utils/common-types.md +100 -0
- package/claude/references/sd-simplysm-v14/core-common/type-utils/env.md +42 -0
- package/claude/references/sd-simplysm-v14/core-common/types/date-only.md +86 -0
- package/claude/references/sd-simplysm-v14/core-common/types/date-time.md +106 -0
- package/claude/references/sd-simplysm-v14/core-common/types/lazy-gc-map.md +59 -0
- package/claude/references/sd-simplysm-v14/core-common/types/time.md +62 -0
- package/claude/references/sd-simplysm-v14/core-common/types/uuid.md +41 -0
- package/claude/references/sd-simplysm-v14/core-common/utils/bytes.md +36 -0
- package/claude/references/sd-simplysm-v14/core-common/utils/dt.md +60 -0
- package/claude/references/sd-simplysm-v14/core-common/utils/err.md +26 -0
- package/claude/references/sd-simplysm-v14/core-common/utils/json.md +58 -0
- package/claude/references/sd-simplysm-v14/core-common/utils/num.md +56 -0
- package/claude/references/sd-simplysm-v14/core-common/utils/obj.md +107 -0
- package/claude/references/sd-simplysm-v14/core-common/utils/path.md +30 -0
- package/claude/references/sd-simplysm-v14/core-common/utils/primitive.md +28 -0
- package/claude/references/sd-simplysm-v14/core-common/utils/str.md +63 -0
- package/claude/references/sd-simplysm-v14/core-common/utils/template-strings.md +49 -0
- package/claude/references/sd-simplysm-v14/core-common/utils/transfer.md +35 -0
- package/claude/references/sd-simplysm-v14/core-common/utils/wait.md +35 -0
- package/claude/references/sd-simplysm-v14/core-common/utils/xml.md +49 -0
- package/claude/references/sd-simplysm-v14/core-common/utils/zip-archive.md +77 -0
- package/claude/references/sd-simplysm-v14/core-node/README.md +59 -0
- package/claude/references/sd-simplysm-v14/core-node/features/fs-watcher.md +110 -0
- package/claude/references/sd-simplysm-v14/core-node/logging/create-file-reporter.md +78 -0
- package/claude/references/sd-simplysm-v14/core-node/logging/pretty-reporter.md +38 -0
- package/claude/references/sd-simplysm-v14/core-node/logging/setup-consola.md +77 -0
- package/claude/references/sd-simplysm-v14/core-node/utils/cpx.md +128 -0
- package/claude/references/sd-simplysm-v14/core-node/utils/fsx.md +168 -0
- package/claude/references/sd-simplysm-v14/core-node/utils/pathx.md +73 -0
- package/claude/references/sd-simplysm-v14/core-node/worker/create-worker.md +85 -0
- package/claude/references/sd-simplysm-v14/core-node/worker/worker.md +160 -0
- package/claude/references/sd-simplysm-v14/excel/README.md +66 -0
- package/claude/references/sd-simplysm-v14/excel/core-classes/excel-cell.md +79 -0
- package/claude/references/sd-simplysm-v14/excel/core-classes/excel-col.md +36 -0
- package/claude/references/sd-simplysm-v14/excel/core-classes/excel-row.md +34 -0
- package/claude/references/sd-simplysm-v14/excel/core-classes/excel-workbook.md +93 -0
- package/claude/references/sd-simplysm-v14/excel/core-classes/excel-worksheet.md +147 -0
- package/claude/references/sd-simplysm-v14/excel/types/excel-address-point.md +33 -0
- package/claude/references/sd-simplysm-v14/excel/types/excel-style-options.md +57 -0
- package/claude/references/sd-simplysm-v14/excel/types/excel-value-type.md +28 -0
- package/claude/references/sd-simplysm-v14/excel/types/excel-xml-content-type-data.md +23 -0
- package/claude/references/sd-simplysm-v14/excel/types/excel-xml-drawing-data.md +29 -0
- package/claude/references/sd-simplysm-v14/excel/types/excel-xml-relationship-data.md +39 -0
- package/claude/references/sd-simplysm-v14/excel/types/excel-xml-shared-string-data.md +42 -0
- package/claude/references/sd-simplysm-v14/excel/types/excel-xml-style-data.md +97 -0
- package/claude/references/sd-simplysm-v14/excel/types/excel-xml-workbook-data.md +22 -0
- package/claude/references/sd-simplysm-v14/excel/types/excel-xml-worksheet-data.md +68 -0
- package/claude/references/sd-simplysm-v14/excel/types/excel-xml.md +15 -0
- package/claude/references/sd-simplysm-v14/excel/utilities/excel-utils.md +101 -0
- package/claude/references/sd-simplysm-v14/excel/wrapper/excel-wrapper.md +108 -0
- package/claude/references/sd-simplysm-v14/lint/README.md +183 -0
- package/claude/references/sd-simplysm-v14/orm-common/README.md +156 -0
- package/claude/references/sd-simplysm-v14/orm-common/core/db-context.md +208 -0
- package/claude/references/sd-simplysm-v14/orm-common/core/db-transaction-error.md +64 -0
- package/claude/references/sd-simplysm-v14/orm-common/expression/expr-unit.md +62 -0
- package/claude/references/sd-simplysm-v14/orm-common/expression/expr.md +198 -0
- package/claude/references/sd-simplysm-v14/orm-common/models/migration.md +37 -0
- package/claude/references/sd-simplysm-v14/orm-common/query-builder/create-query-builder.md +80 -0
- package/claude/references/sd-simplysm-v14/orm-common/queryable-executable/executable.md +54 -0
- package/claude/references/sd-simplysm-v14/orm-common/queryable-executable/parse-search-query.md +75 -0
- package/claude/references/sd-simplysm-v14/orm-common/queryable-executable/queryable.md +238 -0
- package/claude/references/sd-simplysm-v14/orm-common/schema-builders/column-builder.md +63 -0
- package/claude/references/sd-simplysm-v14/orm-common/schema-builders/foreign-key-builder.md +137 -0
- package/claude/references/sd-simplysm-v14/orm-common/schema-builders/index-builder.md +54 -0
- package/claude/references/sd-simplysm-v14/orm-common/schema-builders/procedure.md +67 -0
- package/claude/references/sd-simplysm-v14/orm-common/schema-builders/table.md +95 -0
- package/claude/references/sd-simplysm-v14/orm-common/schema-builders/view.md +71 -0
- package/claude/references/sd-simplysm-v14/orm-common/types/data-type.md +146 -0
- package/claude/references/sd-simplysm-v14/orm-common/types/dialect.md +151 -0
- package/claude/references/sd-simplysm-v14/orm-common/types/expr.md +175 -0
- package/claude/references/sd-simplysm-v14/orm-common/types/parse-query-result.md +58 -0
- package/claude/references/sd-simplysm-v14/orm-common/types/query-def.md +224 -0
- package/claude/references/sd-simplysm-v14/orm-node/README.md +65 -0
- package/claude/references/sd-simplysm-v14/orm-node/connections/mssql-db-conn.md +85 -0
- package/claude/references/sd-simplysm-v14/orm-node/connections/mysql-db-conn.md +83 -0
- package/claude/references/sd-simplysm-v14/orm-node/connections/postgresql-db-conn.md +86 -0
- package/claude/references/sd-simplysm-v14/orm-node/core/create-db-conn.md +62 -0
- package/claude/references/sd-simplysm-v14/orm-node/core/create-orm.md +107 -0
- package/claude/references/sd-simplysm-v14/orm-node/core/node-db-context-executor.md +50 -0
- package/claude/references/sd-simplysm-v14/orm-node/types/db-conn-config.md +91 -0
- package/claude/references/sd-simplysm-v14/orm-node/types/db-conn-constants.md +33 -0
- package/claude/references/sd-simplysm-v14/orm-node/types/db-conn.md +60 -0
- package/claude/references/sd-simplysm-v14/orm-node/types/get-dialect-from-config.md +17 -0
- package/{README.md → claude/references/sd-simplysm-v14/sd-claude/README.md} +85 -84
- package/{docs → claude/references/sd-simplysm-v14/sd-claude}/assets.md +2 -2
- package/{docs → claude/references/sd-simplysm-v14/sd-claude}/hooks.md +15 -1
- package/claude/references/sd-simplysm-v14/sd-cli/README.md +138 -0
- package/claude/references/sd-simplysm-v14/sd-cli/angular-vite-plugin/sd-angular-plugin.md +60 -0
- package/claude/references/sd-simplysm-v14/sd-cli/config/build-target.md +31 -0
- package/claude/references/sd-simplysm-v14/sd-cli/config/npm-config.md +27 -0
- package/claude/references/sd-simplysm-v14/sd-cli/config/sd-browser-support-config.md +19 -0
- package/claude/references/sd-simplysm-v14/sd-cli/config/sd-build-package-config.md +21 -0
- package/claude/references/sd-simplysm-v14/sd-cli/config/sd-capacitor-config.md +109 -0
- package/claude/references/sd-simplysm-v14/sd-cli/config/sd-client-package-config.md +33 -0
- package/claude/references/sd-simplysm-v14/sd-cli/config/sd-config.md +78 -0
- package/claude/references/sd-simplysm-v14/sd-cli/config/sd-electron-config.md +27 -0
- package/claude/references/sd-simplysm-v14/sd-cli/config/sd-package-config.md +18 -0
- package/claude/references/sd-simplysm-v14/sd-cli/config/sd-post-publish-script-config.md +19 -0
- package/claude/references/sd-simplysm-v14/sd-cli/config/sd-publish-config.md +72 -0
- package/claude/references/sd-simplysm-v14/sd-cli/config/sd-pwa-config.md +41 -0
- package/claude/references/sd-simplysm-v14/sd-cli/config/sd-scripts-package-config.md +19 -0
- package/claude/references/sd-simplysm-v14/sd-cli/config/sd-server-package-config.md +32 -0
- package/claude/references/sd-simplysm-v14/sd-cli/config/sd-watch-hook-config.md +19 -0
- package/claude/references/sd-simplysm-v14/sd-cli/ts-compiler/sd-ts-compiler.md +158 -0
- package/claude/references/sd-simplysm-v14/service-client/README.md +74 -0
- package/claude/references/sd-simplysm-v14/service-client/features/event-client.md +93 -0
- package/claude/references/sd-simplysm-v14/service-client/features/file-client.md +63 -0
- package/claude/references/sd-simplysm-v14/service-client/features/orm-client-connector.md +89 -0
- package/claude/references/sd-simplysm-v14/service-client/features/orm-client-db-context-executor.md +31 -0
- package/claude/references/sd-simplysm-v14/service-client/main/service-client.md +206 -0
- package/claude/references/sd-simplysm-v14/service-client/protocol/client-protocol-wrapper.md +64 -0
- package/claude/references/sd-simplysm-v14/service-client/transport/service-transport.md +68 -0
- package/claude/references/sd-simplysm-v14/service-client/transport/socket-provider.md +100 -0
- package/claude/references/sd-simplysm-v14/service-client/types/blob-input.md +7 -0
- package/claude/references/sd-simplysm-v14/service-client/types/browser-worker.md +47 -0
- package/claude/references/sd-simplysm-v14/service-client/types/file-collection.md +21 -0
- package/claude/references/sd-simplysm-v14/service-client/types/service-connection-options.md +22 -0
- package/claude/references/sd-simplysm-v14/service-client/types/service-progress.md +39 -0
- package/claude/references/sd-simplysm-v14/service-common/README.md +161 -0
- package/claude/references/sd-simplysm-v14/service-common/app-structure/app-structure-item.md +107 -0
- package/claude/references/sd-simplysm-v14/service-common/app-structure/get-flat-permissions.md +57 -0
- package/claude/references/sd-simplysm-v14/service-common/app-structure/is-usable-modules-chain.md +23 -0
- package/claude/references/sd-simplysm-v14/service-common/app-structure/is-usable-modules.md +42 -0
- package/claude/references/sd-simplysm-v14/service-common/events/define-event.md +68 -0
- package/claude/references/sd-simplysm-v14/service-common/protocol/create-service-protocol.md +93 -0
- package/claude/references/sd-simplysm-v14/service-common/protocol/protocol-config.md +21 -0
- package/claude/references/sd-simplysm-v14/service-common/protocol/service-add-event-listener-message.md +23 -0
- package/claude/references/sd-simplysm-v14/service-common/protocol/service-auth-message.md +17 -0
- package/claude/references/sd-simplysm-v14/service-common/protocol/service-emit-event-message.md +21 -0
- package/claude/references/sd-simplysm-v14/service-common/protocol/service-error-message.md +29 -0
- package/claude/references/sd-simplysm-v14/service-common/protocol/service-event-message.md +21 -0
- package/claude/references/sd-simplysm-v14/service-common/protocol/service-get-event-listener-infos-message.md +19 -0
- package/claude/references/sd-simplysm-v14/service-common/protocol/service-message.md +52 -0
- package/claude/references/sd-simplysm-v14/service-common/protocol/service-progress-message.md +21 -0
- package/claude/references/sd-simplysm-v14/service-common/protocol/service-remove-event-listener-message.md +19 -0
- package/claude/references/sd-simplysm-v14/service-common/protocol/service-request-message.md +17 -0
- package/claude/references/sd-simplysm-v14/service-common/protocol/service-response-message.md +17 -0
- package/claude/references/sd-simplysm-v14/service-common/service-types/app-structure-service.md +15 -0
- package/claude/references/sd-simplysm-v14/service-common/service-types/auto-update-service.md +20 -0
- package/claude/references/sd-simplysm-v14/service-common/service-types/orm-service.md +61 -0
- package/claude/references/sd-simplysm-v14/service-common/types/service-upload-result.md +19 -0
- package/claude/references/sd-simplysm-v14/service-server/README.md +162 -0
- package/claude/references/sd-simplysm-v14/service-server/auth/auth-token-payload.md +18 -0
- package/claude/references/sd-simplysm-v14/service-server/auth/sign-jwt.md +30 -0
- package/claude/references/sd-simplysm-v14/service-server/auth/verify-jwt.md +35 -0
- package/claude/references/sd-simplysm-v14/service-server/core/auth.md +64 -0
- package/claude/references/sd-simplysm-v14/service-server/core/define-service.md +81 -0
- package/claude/references/sd-simplysm-v14/service-server/core/execute-service-method.md +43 -0
- package/claude/references/sd-simplysm-v14/service-server/core/service-context.md +79 -0
- package/claude/references/sd-simplysm-v14/service-server/legacy/handle-v1-connection.md +25 -0
- package/claude/references/sd-simplysm-v14/service-server/main/create-service-server.md +32 -0
- package/claude/references/sd-simplysm-v14/service-server/main/service-server.md +113 -0
- package/claude/references/sd-simplysm-v14/service-server/protocol/server-protocol-wrapper.md +35 -0
- package/claude/references/sd-simplysm-v14/service-server/services/app-structure-service.md +59 -0
- package/claude/references/sd-simplysm-v14/service-server/services/auto-update-service.md +34 -0
- package/claude/references/sd-simplysm-v14/service-server/services/orm-service.md +43 -0
- package/claude/references/sd-simplysm-v14/service-server/transport-http/handle-http-request.md +33 -0
- package/claude/references/sd-simplysm-v14/service-server/transport-http/handle-static-file.md +29 -0
- package/claude/references/sd-simplysm-v14/service-server/transport-http/handle-upload.md +33 -0
- package/claude/references/sd-simplysm-v14/service-server/transport-socket/service-socket.md +64 -0
- package/claude/references/sd-simplysm-v14/service-server/transport-socket/websocket-handler.md +57 -0
- package/claude/references/sd-simplysm-v14/service-server/types/service-server-options.md +36 -0
- package/claude/references/sd-simplysm-v14/service-server/utils/get-config.md +29 -0
- package/claude/references/sd-simplysm-v14/storage/README.md +99 -0
- package/claude/references/sd-simplysm-v14/storage/clients/ftp-storage-client.md +99 -0
- package/claude/references/sd-simplysm-v14/storage/clients/sftp-storage-client.md +108 -0
- package/claude/references/sd-simplysm-v14/storage/factory/storage-factory.md +114 -0
- package/claude/references/sd-simplysm-v14/storage/types/file-info.md +32 -0
- package/claude/references/sd-simplysm-v14/storage/types/storage-client.md +55 -0
- package/claude/references/sd-simplysm-v14/storage/types/storage-conn-config.md +34 -0
- package/claude/rules/sd-claude-rules.md +8 -8
- package/claude/rules/sd-simplysm-v14.md +33 -0
- package/claude/skills/sd-claude-docs/SKILL.md +41 -24
- package/claude/skills/sd-claude-docs/references/package-docs.md +240 -116
- package/claude/skills/sd-inner-debug/SKILL.md +1 -1
- package/claude/skills/sd-inner-review/SKILL.md +4 -2
- package/package.json +2 -3
- /package/{docs → claude/references/sd-simplysm-v14/sd-claude}/cli.md +0 -0
- /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
|
+
```
|