@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,179 @@
|
|
|
1
|
+
# @simplysm/core-common
|
|
2
|
+
|
|
3
|
+
브라우저와 Node.js 모두에서 사용 가능한 순수 공통 유틸리티 패키지. 다른 `@simplysm/*` 패키지에 대한 내부 의존성이 없는 리프 패키지다.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install @simplysm/core-common
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## 하려는 작업 → 먼저 읽을 파일
|
|
12
|
+
|
|
13
|
+
| 작업 | 먼저 읽을 파일 |
|
|
14
|
+
|------|----------------|
|
|
15
|
+
| 날짜/시간 연산 | [DateTime](./types/date-time.md), [DateOnly](./types/date-only.md), [Time](./types/time.md) |
|
|
16
|
+
| 배열 필터/정렬/그룹화/비교 | [Array Extensions](./extensions/array.md) |
|
|
17
|
+
| 객체 복사/비교/병합 | [obj](./utils/obj.md) |
|
|
18
|
+
| JSON 직렬화 (커스텀 타입 포함) | [json](./utils/json.md) |
|
|
19
|
+
| 에러 체인 구성 | [SdError](./errors/sd-error.md) |
|
|
20
|
+
| 이벤트 기반 통신 | [EventEmitter](./features/event-emitter.md) |
|
|
21
|
+
| 비동기 제어 (디바운스/직렬) | [DebounceQueue](./features/debounce-queue.md), [SerialQueue](./features/serial-queue.md) |
|
|
22
|
+
| UUID 생성 | [Uuid](./types/uuid.md) |
|
|
23
|
+
| 환경변수 접근 | [env](./type-utils/env.md) |
|
|
24
|
+
| Worker 간 데이터 전송 | [transfer](./utils/transfer.md) |
|
|
25
|
+
| ZIP 파일 처리 | [ZipArchive](./utils/zip-archive.md) |
|
|
26
|
+
| 바이너리 변환 (hex/base64) | [bytes](./utils/bytes.md) |
|
|
27
|
+
| 문자열 케이스 변환/한국어 조사 | [str](./utils/str.md) |
|
|
28
|
+
| 자동 만료 캐시 | [LazyGcMap](./types/lazy-gc-map.md) |
|
|
29
|
+
|
|
30
|
+
## API Overview
|
|
31
|
+
|
|
32
|
+
### Errors
|
|
33
|
+
|
|
34
|
+
| Entry | Kind | 언제 쓰나 |
|
|
35
|
+
|-------|------|-----------|
|
|
36
|
+
| [`SdError`](./errors/sd-error.md) | class | 원인 에러를 감싸 트리 구조 에러 체인을 구성할 때 |
|
|
37
|
+
| [`ArgumentError`](./errors/argument-error.md) | class | 인자 유효성 오류를 YAML 형식 메시지로 표시할 때 |
|
|
38
|
+
| [`NotImplementedError`](./errors/not-implemented-error.md) | class | 미구현 기능이 호출되었음을 표시할 때 |
|
|
39
|
+
| [`TimeoutError`](./errors/timeout-error.md) | class | 대기 시간 초과를 시도 횟수와 함께 표시할 때 |
|
|
40
|
+
|
|
41
|
+
### Types (Value Objects)
|
|
42
|
+
|
|
43
|
+
| Entry | Kind | 언제 쓰나 |
|
|
44
|
+
|-------|------|-----------|
|
|
45
|
+
| [`DateTime`](./types/date-time.md) | class | 날짜+시간을 불변 객체로 다룰 때 (밀리초 정밀도, 로컬 타임존) |
|
|
46
|
+
| [`DateOnly`](./types/date-only.md) | class | 시간 없이 날짜만 다룰 때 (주차 계산 지원) |
|
|
47
|
+
| [`Time`](./types/time.md) | class | 날짜 없이 시간만 다룰 때 (24시간 순환) |
|
|
48
|
+
| [`Uuid`](./types/uuid.md) | class | UUID v4를 생성하거나 검증할 때 |
|
|
49
|
+
| [`LazyGcMap`](./types/lazy-gc-map.md) | class | 일정 시간 미접근 항목을 자동 삭제하는 캐시가 필요할 때 |
|
|
50
|
+
|
|
51
|
+
### Features
|
|
52
|
+
|
|
53
|
+
| Entry | Kind | 언제 쓰나 |
|
|
54
|
+
|-------|------|-----------|
|
|
55
|
+
| [`EventEmitter`](./features/event-emitter.md) | class | 타입 안전한 이벤트 기반 통신이 필요할 때 (`events`/`eventemitter3` 대체) |
|
|
56
|
+
| [`DebounceQueue`](./features/debounce-queue.md) | class | 짧은 시간 내 다수 호출을 마지막 하나로 축약할 때 |
|
|
57
|
+
| [`SerialQueue`](./features/serial-queue.md) | class | 비동기 작업의 순차 실행을 보장할 때 |
|
|
58
|
+
|
|
59
|
+
### Extensions (Prototype)
|
|
60
|
+
|
|
61
|
+
`@simplysm/core-common`을 import하면 `Array`, `Map`, `Set` 프로토타입 확장이 자동 등록된다.
|
|
62
|
+
|
|
63
|
+
| Entry | 언제 쓰나 |
|
|
64
|
+
|-------|-----------|
|
|
65
|
+
| [`Array Extensions`](./extensions/array.md) | 배열 필터/정렬/그룹화/비교/변환이 필요할 때 |
|
|
66
|
+
| [`Map Extensions`](./extensions/map.md) | Map에서 기본값 생성(`getOrCreate`) 또는 값 업데이트(`update`)가 필요할 때 |
|
|
67
|
+
| [`Set Extensions`](./extensions/set.md) | Set에 여러 값 일괄 추가(`adds`) 또는 토글(`toggle`)이 필요할 때 |
|
|
68
|
+
|
|
69
|
+
### Utils (Namespace Imports)
|
|
70
|
+
|
|
71
|
+
```typescript
|
|
72
|
+
import { obj, str, num, bytes, path, json, xml, wait, transfer, err, dt, primitive } from "@simplysm/core-common";
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
| Entry | Kind | 언제 쓰나 |
|
|
76
|
+
|-------|------|-----------|
|
|
77
|
+
| [`obj`](./utils/obj.md) | namespace | 객체 깊은 복사/비교/병합, key 조작, 체인 경로 접근이 필요할 때 |
|
|
78
|
+
| [`str`](./utils/str.md) | namespace | 한국어 조사 처리, 케이스 변환, 전각→반각 변환이 필요할 때 |
|
|
79
|
+
| [`num`](./utils/num.md) | namespace | 문자열→숫자 파싱, 숫자 포맷이 필요할 때 |
|
|
80
|
+
| [`bytes`](./utils/bytes.md) | namespace | Uint8Array ↔ hex/base64 변환, 결합이 필요할 때 |
|
|
81
|
+
| [`path`](./utils/path.md) | namespace | POSIX 경로 결합/파일명 추출이 필요할 때 (브라우저 환경용) |
|
|
82
|
+
| [`json`](./utils/json.md) | namespace | DateTime/Uuid 등 커스텀 타입을 포함한 JSON 직렬화/역직렬화가 필요할 때 |
|
|
83
|
+
| [`xml`](./utils/xml.md) | namespace | XML 파싱/직렬화가 필요할 때 |
|
|
84
|
+
| [`wait`](./utils/wait.md) | namespace | 조건 대기(`until`) 또는 시간 대기(`time`)가 필요할 때 |
|
|
85
|
+
| [`transfer`](./utils/transfer.md) | namespace | Worker 간 커스텀 타입 데이터 전송이 필요할 때 |
|
|
86
|
+
| [`err`](./utils/err.md) | namespace | catch 블록의 unknown 에러에서 메시지를 추출할 때 |
|
|
87
|
+
| [`dt`](./utils/dt.md) | namespace | 날짜/시간 포맷 문자열 변환, 월 정규화가 필요할 때 |
|
|
88
|
+
| [`primitive`](./utils/primitive.md) | namespace | 런타임에 값의 PrimitiveTypeStr을 추론할 때 |
|
|
89
|
+
|
|
90
|
+
### Utils (Direct Exports)
|
|
91
|
+
|
|
92
|
+
| Entry | Kind | 언제 쓰나 |
|
|
93
|
+
|-------|------|-----------|
|
|
94
|
+
| [`js`, `ts`, `html`, `tsql`, `mysql`, `pgsql`](./utils/template-strings.md) | function | IDE 코드 하이라이팅이 필요한 태그드 템플릿 리터럴을 작성할 때 |
|
|
95
|
+
| [`ZipArchive`](./utils/zip-archive.md) | class | ZIP 파일 읽기/쓰기/압축/해제가 필요할 때 |
|
|
96
|
+
|
|
97
|
+
### Type Utilities
|
|
98
|
+
|
|
99
|
+
| Entry | Kind | 언제 쓰나 |
|
|
100
|
+
|-------|------|-----------|
|
|
101
|
+
| [`env`, `parseBoolEnv`](./type-utils/env.md) | function | 환경변수를 읽거나 쓸 때 (`process.env`/`import.meta.env` 직접 접근 대신) |
|
|
102
|
+
| [`Bytes`, `PrimitiveTypeMap`, `PrimitiveTypeStr`, `PrimitiveType`, `DeepPartial`, `Type`](./type-utils/common-types.md) | type/interface | 공용 타입 정의가 필요할 때 |
|
|
103
|
+
|
|
104
|
+
## Usage Examples
|
|
105
|
+
|
|
106
|
+
### 프로토타입 확장 사용
|
|
107
|
+
|
|
108
|
+
```typescript
|
|
109
|
+
import "@simplysm/core-common";
|
|
110
|
+
|
|
111
|
+
const users = [{ id: 1, name: "Alice" }, { id: 2, name: "Bob" }];
|
|
112
|
+
const user = users.single((u) => u.id === 1);
|
|
113
|
+
const grouped = users.groupBy((u) => u.name[0]);
|
|
114
|
+
const sorted = users.orderBy((u) => u.name);
|
|
115
|
+
const diffs = newUsers.diffs(oldUsers, { keys: ["id"] });
|
|
116
|
+
|
|
117
|
+
const cache = new Map<string, number[]>();
|
|
118
|
+
const arr = cache.getOrCreate("key", []);
|
|
119
|
+
|
|
120
|
+
const set = new Set<string>();
|
|
121
|
+
set.adds("a", "b", "c");
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
### 에러 체인 처리
|
|
125
|
+
|
|
126
|
+
```typescript
|
|
127
|
+
import { SdError } from "@simplysm/core-common";
|
|
128
|
+
|
|
129
|
+
try {
|
|
130
|
+
await fetch(url);
|
|
131
|
+
} catch (err) {
|
|
132
|
+
throw new SdError(err, "API 호출 실패", "사용자 로드 실패");
|
|
133
|
+
// message: "사용자 로드 실패 => API 호출 실패 => 원본 에러 메시지"
|
|
134
|
+
}
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
### 네임스페이스 유틸리티 사용
|
|
138
|
+
|
|
139
|
+
```typescript
|
|
140
|
+
import { obj, str, json, DateTime, Uuid } from "@simplysm/core-common";
|
|
141
|
+
|
|
142
|
+
const copied = obj.clone({ nested: { data: [1, 2, 3] } });
|
|
143
|
+
const isEqual = obj.equal(a, b, { topLevelExcludes: ["updatedAt"] });
|
|
144
|
+
const noId = obj.omit(user, ["id"]);
|
|
145
|
+
|
|
146
|
+
const suffix = str.getKoreanSuffix("파일", "을"); // "을"
|
|
147
|
+
const camel = str.toCamelCase("HelloWorld"); // "helloWorld"
|
|
148
|
+
|
|
149
|
+
const serialized = json.stringify({ date: new DateTime(), id: Uuid.generate() });
|
|
150
|
+
const restored = json.parse(serialized); // DateTime, Uuid 타입 복원됨
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
### 비동기 큐 사용
|
|
154
|
+
|
|
155
|
+
```typescript
|
|
156
|
+
import { DebounceQueue, SerialQueue } from "@simplysm/core-common";
|
|
157
|
+
|
|
158
|
+
const dq = new DebounceQueue(300);
|
|
159
|
+
dq.on("error", (err) => console.error(err));
|
|
160
|
+
dq.run(() => saveData());
|
|
161
|
+
|
|
162
|
+
const sq = new SerialQueue();
|
|
163
|
+
sq.run(async () => await step1());
|
|
164
|
+
sq.run(async () => await step2()); // step1 완료 후 실행
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
### DateTime 사용
|
|
168
|
+
|
|
169
|
+
```typescript
|
|
170
|
+
import { DateTime, DateOnly, Time, Uuid } from "@simplysm/core-common";
|
|
171
|
+
|
|
172
|
+
const now = new DateTime();
|
|
173
|
+
const parsed = DateTime.parse("2025-01-15 10:30:00");
|
|
174
|
+
const formatted = now.toFormatString("yyyy-MM-dd HH:mm:ss");
|
|
175
|
+
const nextMonth = now.addMonths(1);
|
|
176
|
+
|
|
177
|
+
const today = new DateOnly();
|
|
178
|
+
const id = Uuid.generate();
|
|
179
|
+
```
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# ArgumentError
|
|
2
|
+
|
|
3
|
+
인자 유효성 오류. 유효하지 않은 인자를 전달받았을 때 발생하는 에러. 디버깅을 용이하게 하기 위해 인자 객체를 YAML 형식으로 메시지에 포함한다. [`SdError`](./sd-error.md)를 상속한다.
|
|
4
|
+
|
|
5
|
+
```typescript
|
|
6
|
+
export class ArgumentError extends SdError {
|
|
7
|
+
/** 기본 메시지("잘못된 인자입니다.")와 함께 인자 객체를 YAML 형식으로 출력 */
|
|
8
|
+
constructor(argObj: Record<string, unknown>);
|
|
9
|
+
/** 커스텀 메시지와 함께 인자 객체를 YAML 형식으로 출력 */
|
|
10
|
+
constructor(message: string, argObj: Record<string, unknown>);
|
|
11
|
+
}
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
## Usage
|
|
15
|
+
|
|
16
|
+
```typescript
|
|
17
|
+
import { ArgumentError } from "@simplysm/core-common";
|
|
18
|
+
|
|
19
|
+
// 인자 객체만 전달
|
|
20
|
+
throw new ArgumentError({ userId: 123, name: null });
|
|
21
|
+
// message: "잘못된 인자입니다.\n\nuserId: 123\nname: null"
|
|
22
|
+
|
|
23
|
+
// 커스텀 메시지와 인자 객체를 전달
|
|
24
|
+
throw new ArgumentError("잘못된 사용자", { userId: 123 });
|
|
25
|
+
// message: "잘못된 사용자\n\nuserId: 123"
|
|
26
|
+
```
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# NotImplementedError
|
|
2
|
+
|
|
3
|
+
미구현 오류. 아직 구현되지 않은 기능이 호출되었을 때 발생하는 에러. 추상 메서드 스텁, 향후 구현 예정인 분기 등에 사용된다. [`SdError`](./sd-error.md)를 상속한다.
|
|
4
|
+
|
|
5
|
+
```typescript
|
|
6
|
+
export class NotImplementedError extends SdError {
|
|
7
|
+
/**
|
|
8
|
+
* @param message 추가 설명 메시지
|
|
9
|
+
*/
|
|
10
|
+
constructor(message?: string);
|
|
11
|
+
}
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
메시지 형식: `"미구현"` 또는 `"미구현: {message}"`
|
|
15
|
+
|
|
16
|
+
## Usage
|
|
17
|
+
|
|
18
|
+
```typescript
|
|
19
|
+
import { NotImplementedError } from "@simplysm/core-common";
|
|
20
|
+
|
|
21
|
+
// 추상 메서드 구현 전
|
|
22
|
+
class BaseService {
|
|
23
|
+
process(): void {
|
|
24
|
+
throw new NotImplementedError("서브클래스에서 구현 필요");
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
// 향후 구현 예정인 분기
|
|
29
|
+
switch (type) {
|
|
30
|
+
case "A": return handleA();
|
|
31
|
+
case "B": throw new NotImplementedError(`타입 ${type} 처리`);
|
|
32
|
+
}
|
|
33
|
+
```
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# SdError
|
|
2
|
+
|
|
3
|
+
트리 구조 조합을 지원하는 에러 클래스. 원인 에러를 감싸서 계층적 메시지를 구성한다. ES2024 `cause` 속성을 활용하며 V8 엔진(Node.js, Chrome)에서는 `captureStackTrace`를 통해 스택 추적을 최적화한다.
|
|
4
|
+
|
|
5
|
+
```typescript
|
|
6
|
+
export class SdError extends Error {
|
|
7
|
+
override cause?: Error;
|
|
8
|
+
|
|
9
|
+
/** 원인 에러를 감싸서 생성. 메시지는 역순으로 결합됨 (상위 메시지 => 하위 메시지 => 원인 메시지) */
|
|
10
|
+
constructor(cause: Error, ...messages: string[]);
|
|
11
|
+
/** 메시지만으로 생성. 메시지는 역순으로 결합됨 (상위 메시지 => 하위 메시지) */
|
|
12
|
+
constructor(...messages: string[]);
|
|
13
|
+
}
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
## Members
|
|
17
|
+
|
|
18
|
+
| Member | Kind | Type | Description |
|
|
19
|
+
|--------|------|------|-------------|
|
|
20
|
+
| `cause` | property | `Error \| undefined` | 원인 에러 (override) |
|
|
21
|
+
|
|
22
|
+
## Usage
|
|
23
|
+
|
|
24
|
+
```typescript
|
|
25
|
+
import { SdError } from "@simplysm/core-common";
|
|
26
|
+
|
|
27
|
+
// 원인 에러를 감싸기
|
|
28
|
+
try {
|
|
29
|
+
await fetch(url);
|
|
30
|
+
} catch (err) {
|
|
31
|
+
throw new SdError(err, "API 호출 실패", "사용자 로드 실패");
|
|
32
|
+
// message: "사용자 로드 실패 => API 호출 실패 => 원본 에러 메시지"
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
// 메시지만으로 생성
|
|
36
|
+
throw new SdError("잘못된 상태", "처리 불가");
|
|
37
|
+
// message: "처리 불가 => 잘못된 상태"
|
|
38
|
+
```
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# TimeoutError
|
|
2
|
+
|
|
3
|
+
타임아웃 오류. 대기 시간이 초과되었을 때 발생하는 에러. [`wait.until()`](../utils/wait.md) 같은 비동기 대기 함수에서 최대 시도 횟수를 초과하면 자동으로 발생한다. [`SdError`](./sd-error.md)를 상속한다.
|
|
4
|
+
|
|
5
|
+
```typescript
|
|
6
|
+
export class TimeoutError extends SdError {
|
|
7
|
+
/**
|
|
8
|
+
* @param count 시도 횟수
|
|
9
|
+
* @param message 추가 메시지
|
|
10
|
+
*/
|
|
11
|
+
constructor(count?: number, message?: string);
|
|
12
|
+
}
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
메시지 형식: `"대기 시간 초과"`, `"대기 시간 초과(N회 시도)"`, `"대기 시간 초과: {message}"`, `"대기 시간 초과(N회 시도): {message}"`
|
|
16
|
+
|
|
17
|
+
## Usage
|
|
18
|
+
|
|
19
|
+
```typescript
|
|
20
|
+
import { TimeoutError } from "@simplysm/core-common";
|
|
21
|
+
import { wait } from "@simplysm/core-common";
|
|
22
|
+
|
|
23
|
+
// wait.until에서 자동 발생
|
|
24
|
+
try {
|
|
25
|
+
await wait.until(() => isReady, 100, 50); // 100ms 간격, 최대 50회 시도
|
|
26
|
+
} catch (err) {
|
|
27
|
+
if (err instanceof TimeoutError) {
|
|
28
|
+
console.log("타임아웃 초과");
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
// 직접 발생
|
|
33
|
+
if (elapsed > maxTime) {
|
|
34
|
+
throw new TimeoutError(undefined, "API 응답 대기 초과");
|
|
35
|
+
}
|
|
36
|
+
```
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
# Array Extensions
|
|
2
|
+
|
|
3
|
+
`@simplysm/core-common`을 import하면 `Array.prototype`에 확장 메서드가 자동 등록된다. `ReadonlyArray<T>`와 `Array<T>` 모두에 적용된다.
|
|
4
|
+
|
|
5
|
+
side-effect import로 활성화:
|
|
6
|
+
|
|
7
|
+
```typescript
|
|
8
|
+
import "@simplysm/core-common";
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## 불변(Immutable) 메서드
|
|
12
|
+
|
|
13
|
+
원본 배열을 변경하지 않고 새 배열 또는 값을 반환한다.
|
|
14
|
+
|
|
15
|
+
| Method | Signature | Description |
|
|
16
|
+
|--------|-----------|-------------|
|
|
17
|
+
| `single` | `(predicate?) => T \| undefined` | 조건에 맞는 단일 요소 반환. 2개 이상이면 `ArgumentError` 발생 |
|
|
18
|
+
| `first` | `(predicate?) => T \| undefined` | 첫 번째 요소 반환 |
|
|
19
|
+
| `last` | `(predicate?) => T \| undefined` | 마지막 요소 반환 |
|
|
20
|
+
| `filterExists` | `() => NonNullable<T>[]` | null/undefined 제거 |
|
|
21
|
+
| `ofType` | `(type: PrimitiveTypeStr \| Type<N>) => N[]` | 특정 타입의 요소만 필터 |
|
|
22
|
+
| `filterAsync` | `(predicate) => Promise<T[]>` | 비동기 필터 (순차 실행) |
|
|
23
|
+
| `mapAsync` | `(selector) => Promise<R[]>` | 비동기 매핑 (순차 실행) |
|
|
24
|
+
| `mapMany` | `(selector?) => R[]` | 매핑 후 평탄화 (또는 중첩 배열 평탄화) |
|
|
25
|
+
| `mapManyAsync` | `(selector?) => Promise<R[]>` | 비동기 매핑 후 평탄화 (순차 실행) |
|
|
26
|
+
| `parallelAsync` | `(fn) => Promise<R[]>` | 비동기 병렬 처리 (`Promise.all` 사용). 하나라도 reject되면 전체 reject |
|
|
27
|
+
| `groupBy` | `(keySelector, valueSelector?) => { key, values }[]` | key 기준 그룹화. 객체 key 지원을 위해 O(n²) 복잡도. 원시 key는 O(n) |
|
|
28
|
+
| `toMap` | `(keySelector, valueSelector?) => Map<K, V>` | Map으로 변환. 중복 key이면 `ArgumentError` 발생 |
|
|
29
|
+
| `toMapAsync` | `(keySelector, valueSelector?) => Promise<Map<K, V>>` | 비동기 Map 변환 |
|
|
30
|
+
| `toArrayMap` | `(keySelector, valueSelector?) => Map<K, V[]>` | 배열 값 Map으로 변환 (O(n)) |
|
|
31
|
+
| `toSetMap` | `(keySelector, valueSelector?) => Map<K, Set<V>>` | Set 값 Map으로 변환 |
|
|
32
|
+
| `toMapValues` | `(keySelector, valueSelector) => Map<K, V>` | 그룹별 집계 Map으로 변환 |
|
|
33
|
+
| `toObject` | `(keySelector, valueSelector?) => Record<string, V>` | 객체로 변환. 중복 key이면 `ArgumentError` 발생 |
|
|
34
|
+
| `toTree` | `(keyProp, parentKey) => TreeArray<T>[]` | 평면 배열을 트리 구조로 변환 (O(n)). `parentKey`가 null/undefined인 항목이 루트 |
|
|
35
|
+
| `distinct` | `(options?) => T[]` | 중복 제거. 객체 배열에서 keyFn 없이 사용하면 O(n²) |
|
|
36
|
+
| `orderBy` | `(selector?) => T[]` | 오름차순 정렬 (새 배열 반환) |
|
|
37
|
+
| `orderByDesc` | `(selector?) => T[]` | 내림차순 정렬 (새 배열 반환) |
|
|
38
|
+
| `diffs` | `(target, options?) => ArrayDiffsResult<T, P>[]` | 두 배열 비교 (INSERT/DELETE/UPDATE) |
|
|
39
|
+
| `oneWayDiffs` | `(orgItems, keyPropNameOrGetValFn, options?) => ArrayOneWayDiffResult<T>[]` | 단방향 비교 (create/update/same) |
|
|
40
|
+
| `merge` | `(target, options?) => (T \| P \| T & P)[]` | 두 배열 병합 (`diffs` 기반) |
|
|
41
|
+
| `sum` | `(selector?) => number` | 합계. 빈 배열이면 0 반환 |
|
|
42
|
+
| `min` | `(selector?) => T \| undefined` | 최솟값 |
|
|
43
|
+
| `max` | `(selector?) => T \| undefined` | 최댓값 |
|
|
44
|
+
| `shuffle` | `() => T[]` | 무작위 순서로 섞은 새 배열 반환 |
|
|
45
|
+
|
|
46
|
+
## 가변(Mutable) 메서드
|
|
47
|
+
|
|
48
|
+
원본 배열을 직접 수정하고 `this`를 반환한다.
|
|
49
|
+
|
|
50
|
+
| Method | Signature | Description |
|
|
51
|
+
|--------|-----------|-------------|
|
|
52
|
+
| `remove` | `(item: T) => this` | 항목 제거 |
|
|
53
|
+
| `remove` | `(selector: (item, index) => boolean) => this` | 조건에 맞는 항목 제거 |
|
|
54
|
+
| `insert` | `(index: number, ...items: T[]) => this` | 특정 위치에 항목 삽입 |
|
|
55
|
+
| `toggle` | `(item: T) => this` | 항목 토글 (있으면 제거, 없으면 추가) |
|
|
56
|
+
| `clear` | `() => this` | 배열 비우기 |
|
|
57
|
+
| `distinctThis` | `(options?) => T[]` | 원본 배열에서 중복 제거 |
|
|
58
|
+
| `orderByThis` | `(selector?) => T[]` | 원본 배열 오름차순 정렬 |
|
|
59
|
+
| `orderByDescThis` | `(selector?) => T[]` | 원본 배열 내림차순 정렬 |
|
|
60
|
+
|
|
61
|
+
## Related Types
|
|
62
|
+
|
|
63
|
+
### `ArrayDiffsResult<TOriginal, TOther>`
|
|
64
|
+
|
|
65
|
+
`diffs()` 결과 타입. Discriminated union:
|
|
66
|
+
|
|
67
|
+
```typescript
|
|
68
|
+
export type ArrayDiffsResult<TOriginal, TOther> =
|
|
69
|
+
| { source: undefined; target: TOther } // INSERT (target에만 있음)
|
|
70
|
+
| { source: TOriginal; target: undefined } // DELETE (source에만 있음)
|
|
71
|
+
| { source: TOriginal; target: TOther }; // UPDATE (양쪽에 있고 다름)
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
### `ArrayOneWayDiffResult<TItem>`
|
|
75
|
+
|
|
76
|
+
`oneWayDiffs()` 결과 타입. Discriminated union (`type` 필드로 분기):
|
|
77
|
+
|
|
78
|
+
```typescript
|
|
79
|
+
export type ArrayOneWayDiffResult<TItem> =
|
|
80
|
+
| { type: "create"; item: TItem; orgItem: undefined }
|
|
81
|
+
| { type: "update"; item: TItem; orgItem: TItem }
|
|
82
|
+
| { type: "same"; item: TItem; orgItem: TItem };
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
### `TreeArray<TNode>`
|
|
86
|
+
|
|
87
|
+
`toTree()` 결과 타입. 원본 타입에 `children` 속성이 추가된다:
|
|
88
|
+
|
|
89
|
+
```typescript
|
|
90
|
+
export type TreeArray<TNode> = TNode & { children: TreeArray<TNode>[] };
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
### `ComparableType`
|
|
94
|
+
|
|
95
|
+
`orderBy`/`orderByDesc` selector의 반환 타입:
|
|
96
|
+
|
|
97
|
+
```typescript
|
|
98
|
+
export type ComparableType = string | number | boolean | DateTime | DateOnly | Time | undefined;
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
## Usage
|
|
102
|
+
|
|
103
|
+
```typescript
|
|
104
|
+
import "@simplysm/core-common";
|
|
105
|
+
|
|
106
|
+
const users = [{ id: 1, name: "Alice" }, { id: 2, name: "Bob" }];
|
|
107
|
+
|
|
108
|
+
// 불변 메서드
|
|
109
|
+
const alice = users.single((u) => u.id === 1);
|
|
110
|
+
const sorted = users.orderBy((u) => u.name);
|
|
111
|
+
const grouped = users.groupBy((u) => u.name[0]);
|
|
112
|
+
const diffs = newUsers.diffs(oldUsers, { keys: ["id"] });
|
|
113
|
+
|
|
114
|
+
// toTree
|
|
115
|
+
const items = [
|
|
116
|
+
{ id: 1, parentId: undefined, name: "root" },
|
|
117
|
+
{ id: 2, parentId: 1, name: "child" },
|
|
118
|
+
];
|
|
119
|
+
const tree = items.toTree("id", "parentId");
|
|
120
|
+
|
|
121
|
+
// 가변 메서드
|
|
122
|
+
const list = [1, 2, 3, 4, 5];
|
|
123
|
+
list.remove((x) => x % 2 === 0); // [1, 3, 5]
|
|
124
|
+
list.insert(1, 10); // [1, 10, 3, 5]
|
|
125
|
+
```
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# Map Extensions
|
|
2
|
+
|
|
3
|
+
`@simplysm/core-common`을 import하면 `Map.prototype`에 확장 메서드가 자동 등록된다.
|
|
4
|
+
|
|
5
|
+
side-effect import로 활성화:
|
|
6
|
+
|
|
7
|
+
```typescript
|
|
8
|
+
import "@simplysm/core-common";
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Methods
|
|
12
|
+
|
|
13
|
+
| Method | Signature | Description |
|
|
14
|
+
|--------|-----------|-------------|
|
|
15
|
+
| `getOrCreate` | `(key: K, newValue: V) => V` | key가 없으면 값을 설정하고 반환 |
|
|
16
|
+
| `getOrCreate` | `(key: K, newValueFn: () => V) => V` | key가 없으면 팩토리 함수를 호출하여 값을 설정하고 반환 |
|
|
17
|
+
| `update` | `(key: K, updateFn: (v: V \| undefined) => V) => void` | 현재 값을 받아 새 값으로 업데이트. key가 없으면 `undefined`가 전달됨 |
|
|
18
|
+
|
|
19
|
+
## Usage
|
|
20
|
+
|
|
21
|
+
```typescript
|
|
22
|
+
import "@simplysm/core-common";
|
|
23
|
+
|
|
24
|
+
// getOrCreate — 값으로
|
|
25
|
+
const map = new Map<string, number[]>();
|
|
26
|
+
const arr = map.getOrCreate("key", []); // 없으면 [] 설정 후 반환
|
|
27
|
+
|
|
28
|
+
// getOrCreate — 팩토리로 (비용이 큰 연산에 사용)
|
|
29
|
+
const val = map.getOrCreate("key", () => expensiveComputation());
|
|
30
|
+
|
|
31
|
+
// 함수를 값으로 저장 시 팩토리로 감싸야 함
|
|
32
|
+
const fnMap = new Map<string, () => void>();
|
|
33
|
+
const myFn = () => console.log("hello");
|
|
34
|
+
fnMap.getOrCreate("key", () => myFn); // 팩토리로 감싸기
|
|
35
|
+
|
|
36
|
+
// update — 카운터
|
|
37
|
+
const countMap = new Map<string, number>();
|
|
38
|
+
countMap.update("key", (v) => (v ?? 0) + 1);
|
|
39
|
+
|
|
40
|
+
// update — 배열에 추가
|
|
41
|
+
const arrayMap = new Map<string, string[]>();
|
|
42
|
+
arrayMap.update("key", (v) => [...(v ?? []), "item"]);
|
|
43
|
+
```
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# Set Extensions
|
|
2
|
+
|
|
3
|
+
`@simplysm/core-common`을 import하면 `Set.prototype`에 확장 메서드가 자동 등록된다.
|
|
4
|
+
|
|
5
|
+
side-effect import로 활성화:
|
|
6
|
+
|
|
7
|
+
```typescript
|
|
8
|
+
import "@simplysm/core-common";
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Methods
|
|
12
|
+
|
|
13
|
+
| Method | Signature | Description |
|
|
14
|
+
|--------|-----------|-------------|
|
|
15
|
+
| `adds` | `(...values: T[]) => this` | 여러 값을 한 번에 추가 |
|
|
16
|
+
| `toggle` | `(value: T, addOrDel?: "add" \| "del") => this` | 값 토글 (있으면 제거, 없으면 추가). `addOrDel`로 강제 추가/제거 가능 |
|
|
17
|
+
|
|
18
|
+
## Usage
|
|
19
|
+
|
|
20
|
+
```typescript
|
|
21
|
+
import "@simplysm/core-common";
|
|
22
|
+
|
|
23
|
+
const set = new Set<number>([1, 2, 3]);
|
|
24
|
+
|
|
25
|
+
// adds — 여러 항목 추가
|
|
26
|
+
set.adds(4, 5, 6); // {1, 2, 3, 4, 5, 6}
|
|
27
|
+
|
|
28
|
+
// toggle — 자동
|
|
29
|
+
set.toggle(2); // 2가 있으므로 제거 → {1, 3, 4, 5, 6}
|
|
30
|
+
set.toggle(10); // 10이 없으므로 추가 → {1, 3, 4, 5, 6, 10}
|
|
31
|
+
|
|
32
|
+
// toggle — 강제
|
|
33
|
+
const isAdmin = true;
|
|
34
|
+
set.toggle(5, isAdmin ? "add" : "del"); // 강제 추가
|
|
35
|
+
```
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# DebounceQueue
|
|
2
|
+
|
|
3
|
+
비동기 디바운스 큐. 짧은 시간 내에 여러 번 호출되면 마지막 요청만 실행하고 이전 요청은 무시한다. 입력 필드 자동완성, 연속적인 상태 변경 일괄 처리 등에 유용하다. [`EventEmitter`](./event-emitter.md)를 상속한다.
|
|
4
|
+
|
|
5
|
+
```typescript
|
|
6
|
+
export class DebounceQueue extends EventEmitter<{ error: SdError }> {
|
|
7
|
+
/**
|
|
8
|
+
* @param _delay 디바운스 지연 시간 (밀리초). 생략 시 즉시 실행 (다음 이벤트 루프)
|
|
9
|
+
*/
|
|
10
|
+
constructor(_delay?: number);
|
|
11
|
+
|
|
12
|
+
run(fn: () => void | Promise<void>): void;
|
|
13
|
+
override dispose(): void;
|
|
14
|
+
}
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
에러 발생 시 `"error"` 이벤트로 전파되며, 리스너가 없으면 `consola`로 로그 출력된다.
|
|
18
|
+
|
|
19
|
+
실행 중에 추가된 요청은 디바운스 지연 없이 현재 실행이 완료된 직후 즉시 처리된다. 이는 실행 완료 전에 도착한 요청을 놓치지 않기 위한 의도적인 설계다.
|
|
20
|
+
|
|
21
|
+
## Members
|
|
22
|
+
|
|
23
|
+
| Member | Kind | Type | Description |
|
|
24
|
+
|--------|------|------|-------------|
|
|
25
|
+
| `run` | method | `(fn: () => void \| Promise<void>) => void` | 큐에 함수 추가. 이전에 추가된 함수가 있으면 교체됨 |
|
|
26
|
+
| `dispose` | method | `() => void` | 대기 중인 작업과 타이머 정리 후 부모 `dispose()` 호출 |
|
|
27
|
+
|
|
28
|
+
## Usage
|
|
29
|
+
|
|
30
|
+
```typescript
|
|
31
|
+
import { DebounceQueue } from "@simplysm/core-common";
|
|
32
|
+
|
|
33
|
+
const queue = new DebounceQueue(300); // 300ms 지연
|
|
34
|
+
|
|
35
|
+
// 에러 처리
|
|
36
|
+
queue.on("error", (err) => console.error(err));
|
|
37
|
+
|
|
38
|
+
queue.run(() => console.log("1")); // 무시됨
|
|
39
|
+
queue.run(() => console.log("2")); // 무시됨
|
|
40
|
+
queue.run(() => console.log("3")); // 300ms 후 실행
|
|
41
|
+
|
|
42
|
+
// 자원 정리
|
|
43
|
+
try {
|
|
44
|
+
queue.run(() => saveData());
|
|
45
|
+
} finally {
|
|
46
|
+
queue.dispose();
|
|
47
|
+
}
|
|
48
|
+
```
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# EventEmitter
|
|
2
|
+
|
|
3
|
+
타입 안전 EventEmitter. 내부적으로 `EventTarget`을 사용하며 브라우저와 Node.js 모두에서 사용 가능하다. `events`/`eventemitter3` 대신 이 클래스를 사용한다.
|
|
4
|
+
|
|
5
|
+
```typescript
|
|
6
|
+
export class EventEmitter<
|
|
7
|
+
TEvents extends { [K in keyof TEvents]: unknown } = Record<string, unknown>,
|
|
8
|
+
> {
|
|
9
|
+
on<TEventName extends keyof TEvents & string>(type: TEventName, listener: (data: TEvents[TEventName]) => void): void;
|
|
10
|
+
off<TEventName extends keyof TEvents & string>(type: TEventName, listener: (data: TEvents[TEventName]) => void): void;
|
|
11
|
+
emit<TEventName extends keyof TEvents & string>(type: TEventName, ...args: TEvents[TEventName] extends void ? [] : [data: TEvents[TEventName]]): void;
|
|
12
|
+
listenerCount<TEventName extends keyof TEvents & string>(type: TEventName): number;
|
|
13
|
+
dispose(): void;
|
|
14
|
+
}
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## Members
|
|
18
|
+
|
|
19
|
+
| Member | Kind | Type | Description |
|
|
20
|
+
|--------|------|------|-------------|
|
|
21
|
+
| `on` | method | `(type, listener) => void` | 이벤트 리스너 등록. 같은 리스너를 같은 이벤트에 중복 등록하면 무시됨 |
|
|
22
|
+
| `off` | method | `(type, listener) => void` | 이벤트 리스너 제거 |
|
|
23
|
+
| `emit` | method | `(type, ...args) => void` | 이벤트 발행. `void` 타입 이벤트는 인자 없이 호출 |
|
|
24
|
+
| `listenerCount` | method | `(type) => number` | 특정 이벤트의 등록된 리스너 수 반환 |
|
|
25
|
+
| `dispose` | method | `() => void` | 모든 이벤트 리스너 제거 |
|
|
26
|
+
|
|
27
|
+
## Usage
|
|
28
|
+
|
|
29
|
+
```typescript
|
|
30
|
+
import { EventEmitter } from "@simplysm/core-common";
|
|
31
|
+
|
|
32
|
+
// 이벤트 타입 정의
|
|
33
|
+
interface MyEvents {
|
|
34
|
+
data: string;
|
|
35
|
+
error: Error;
|
|
36
|
+
done: void;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// EventEmitter를 상속하여 사용
|
|
40
|
+
class MyService extends EventEmitter<MyEvents> {
|
|
41
|
+
async load() {
|
|
42
|
+
this.emit("data", "Loading...");
|
|
43
|
+
this.emit("done"); // void 타입은 인자 없이 호출
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
const svc = new MyService();
|
|
48
|
+
svc.on("data", (data) => { /* data: string */ });
|
|
49
|
+
svc.on("done", () => { /* ... */ });
|
|
50
|
+
await svc.load();
|
|
51
|
+
svc.dispose(); // 모든 리스너 정리
|
|
52
|
+
```
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# SerialQueue
|
|
2
|
+
|
|
3
|
+
비동기 직렬 큐. 큐에 추가된 함수들은 순차적으로 실행된다. 하나의 작업이 완료된 후에야 다음 작업이 시작된다. 에러가 발생해도 후속 작업은 계속 실행된다. [`EventEmitter`](./event-emitter.md)를 상속한다.
|
|
4
|
+
|
|
5
|
+
```typescript
|
|
6
|
+
export class SerialQueue extends EventEmitter<{ error: SdError }> {
|
|
7
|
+
/**
|
|
8
|
+
* @param _gap 각 작업 사이의 간격 (ms). 기본값: 0
|
|
9
|
+
*/
|
|
10
|
+
constructor(_gap?: number);
|
|
11
|
+
|
|
12
|
+
run(fn: () => void | Promise<void>): void;
|
|
13
|
+
override dispose(): void;
|
|
14
|
+
}
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
에러 발생 시 `"error"` 이벤트로 전파되며, 리스너가 없으면 `consola`로 로그 출력된다.
|
|
18
|
+
|
|
19
|
+
## Members
|
|
20
|
+
|
|
21
|
+
| Member | Kind | Type | Description |
|
|
22
|
+
|--------|------|------|-------------|
|
|
23
|
+
| `run` | method | `(fn: () => void \| Promise<void>) => void` | 큐에 함수 추가하고 실행 예약 |
|
|
24
|
+
| `dispose` | method | `() => void` | 대기 중인 큐 비우기 (현재 실행 중인 작업은 완료됨) |
|
|
25
|
+
|
|
26
|
+
## Usage
|
|
27
|
+
|
|
28
|
+
```typescript
|
|
29
|
+
import { SerialQueue } from "@simplysm/core-common";
|
|
30
|
+
|
|
31
|
+
const queue = new SerialQueue();
|
|
32
|
+
|
|
33
|
+
// 에러 처리
|
|
34
|
+
queue.on("error", (err) => console.error(err));
|
|
35
|
+
|
|
36
|
+
queue.run(async () => { await fetch("/api/1"); });
|
|
37
|
+
queue.run(async () => { await fetch("/api/2"); }); // 1 완료 후 실행
|
|
38
|
+
queue.run(async () => { await fetch("/api/3"); }); // 2 완료 후 실행
|
|
39
|
+
|
|
40
|
+
// 간격 있는 큐
|
|
41
|
+
const gapQueue = new SerialQueue(100); // 각 작업 사이 100ms 간격
|
|
42
|
+
gapQueue.run(() => step1());
|
|
43
|
+
gapQueue.run(() => step2()); // step1 완료 후 100ms 뒤에 실행
|
|
44
|
+
```
|