@dssp/supervision 1.0.0-alpha.97 → 1.0.0
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/package.json +13 -12
- package/dist-client/bootstrap.d.ts +0 -1
- package/dist-client/bootstrap.js +0 -2
- package/dist-client/bootstrap.js.map +0 -1
- package/dist-client/graphql/building-inspection.d.ts +0 -1
- package/dist-client/graphql/building-inspection.js +0 -102
- package/dist-client/graphql/building-inspection.js.map +0 -1
- package/dist-client/index.d.ts +0 -0
- package/dist-client/index.js +0 -2
- package/dist-client/index.js.map +0 -1
- package/dist-client/pages/action-plan/action-plan-importer.d.ts +0 -10
- package/dist-client/pages/action-plan/action-plan-importer.js +0 -101
- package/dist-client/pages/action-plan/action-plan-importer.js.map +0 -1
- package/dist-client/pages/action-plan/action-plan-list-page.d.ts +0 -62
- package/dist-client/pages/action-plan/action-plan-list-page.js +0 -322
- package/dist-client/pages/action-plan/action-plan-list-page.js.map +0 -1
- package/dist-client/pages/building-inspection/building-inspection-detail-ai-defect.d.ts +0 -22
- package/dist-client/pages/building-inspection/building-inspection-detail-ai-defect.js +0 -171
- package/dist-client/pages/building-inspection/building-inspection-detail-ai-defect.js.map +0 -1
- package/dist-client/pages/building-inspection/building-inspection-detail-ai-measurement.d.ts +0 -59
- package/dist-client/pages/building-inspection/building-inspection-detail-ai-measurement.js +0 -868
- package/dist-client/pages/building-inspection/building-inspection-detail-ai-measurement.js.map +0 -1
- package/dist-client/pages/building-inspection/building-inspection-detail-camera.d.ts +0 -27
- package/dist-client/pages/building-inspection/building-inspection-detail-camera.js +0 -342
- package/dist-client/pages/building-inspection/building-inspection-detail-camera.js.map +0 -1
- package/dist-client/pages/building-inspection/building-inspection-detail-checklist.d.ts +0 -31
- package/dist-client/pages/building-inspection/building-inspection-detail-checklist.js +0 -332
- package/dist-client/pages/building-inspection/building-inspection-detail-checklist.js.map +0 -1
- package/dist-client/pages/building-inspection/building-inspection-detail-drawing.d.ts +0 -36
- package/dist-client/pages/building-inspection/building-inspection-detail-drawing.js +0 -369
- package/dist-client/pages/building-inspection/building-inspection-detail-drawing.js.map +0 -1
- package/dist-client/pages/building-inspection/building-inspection-list.d.ts +0 -98
- package/dist-client/pages/building-inspection/building-inspection-list.js +0 -914
- package/dist-client/pages/building-inspection/building-inspection-list.js.map +0 -1
- package/dist-client/pages/building-inspection/building-inspection-management.d.ts +0 -82
- package/dist-client/pages/building-inspection/building-inspection-management.js +0 -1527
- package/dist-client/pages/building-inspection/building-inspection-management.js.map +0 -1
- package/dist-client/pages/building-inspection/component/building-inspection-detail-header.d.ts +0 -4
- package/dist-client/pages/building-inspection/component/building-inspection-detail-header.js +0 -238
- package/dist-client/pages/building-inspection/component/building-inspection-detail-header.js.map +0 -1
- package/dist-client/pages/building-inspection/component/daily-worklog-popup.d.ts +0 -27
- package/dist-client/pages/building-inspection/component/daily-worklog-popup.js +0 -542
- package/dist-client/pages/building-inspection/component/daily-worklog-popup.js.map +0 -1
- package/dist-client/pages/building-inspection/component/field-document/field-document-constants.d.ts +0 -18
- package/dist-client/pages/building-inspection/component/field-document/field-document-constants.js +0 -630
- package/dist-client/pages/building-inspection/component/field-document/field-document-constants.js.map +0 -1
- package/dist-client/pages/building-inspection/component/field-document/field-document-detail-popup.d.ts +0 -10
- package/dist-client/pages/building-inspection/component/field-document/field-document-detail-popup.js +0 -219
- package/dist-client/pages/building-inspection/component/field-document/field-document-detail-popup.js.map +0 -1
- package/dist-client/pages/building-inspection/component/field-document/field-document-list-panel.d.ts +0 -25
- package/dist-client/pages/building-inspection/component/field-document/field-document-list-panel.js +0 -546
- package/dist-client/pages/building-inspection/component/field-document/field-document-list-panel.js.map +0 -1
- package/dist-client/pages/building-inspection/component/field-document/field-document-popup.d.ts +0 -42
- package/dist-client/pages/building-inspection/component/field-document/field-document-popup.js +0 -738
- package/dist-client/pages/building-inspection/component/field-document/field-document-popup.js.map +0 -1
- package/dist-client/pages/building-inspection/component/image-preview-popup.d.ts +0 -15
- package/dist-client/pages/building-inspection/component/image-preview-popup.js +0 -348
- package/dist-client/pages/building-inspection/component/image-preview-popup.js.map +0 -1
- package/dist-client/pages/building-inspection/component/inspection-document/inspection-request-document.d.ts +0 -25
- package/dist-client/pages/building-inspection/component/inspection-document/inspection-request-document.js +0 -491
- package/dist-client/pages/building-inspection/component/inspection-document/inspection-request-document.js.map +0 -1
- package/dist-client/pages/building-inspection/component/inspection-document/inspection-result-notification.d.ts +0 -31
- package/dist-client/pages/building-inspection/component/inspection-document/inspection-result-notification.js +0 -485
- package/dist-client/pages/building-inspection/component/inspection-document/inspection-result-notification.js.map +0 -1
- package/dist-client/pages/building-inspection/component/inspection-document/photo-album-popup.d.ts +0 -27
- package/dist-client/pages/building-inspection/component/inspection-document/photo-album-popup.js +0 -416
- package/dist-client/pages/building-inspection/component/inspection-document/photo-album-popup.js.map +0 -1
- package/dist-client/pages/building-inspection/component/inspection-event-provider.d.ts +0 -9
- package/dist-client/pages/building-inspection/component/inspection-event-provider.js +0 -190
- package/dist-client/pages/building-inspection/component/inspection-event-provider.js.map +0 -1
- package/dist-client/pages/building-inspection/inspection-create-popup.d.ts +0 -3
- package/dist-client/pages/building-inspection/inspection-create-popup.js +0 -841
- package/dist-client/pages/building-inspection/inspection-create-popup.js.map +0 -1
- package/dist-client/pages/building-inspection/inspection-with-checklist-create-popup.d.ts +0 -3
- package/dist-client/pages/building-inspection/inspection-with-checklist-create-popup.js +0 -817
- package/dist-client/pages/building-inspection/inspection-with-checklist-create-popup.js.map +0 -1
- package/dist-client/pages/building-inspection-grid/building-inspection-grid-detail.d.ts +0 -60
- package/dist-client/pages/building-inspection-grid/building-inspection-grid-detail.js +0 -1135
- package/dist-client/pages/building-inspection-grid/building-inspection-grid-detail.js.map +0 -1
- package/dist-client/pages/building-inspection-grid/component/grid-inspection-create-popup.d.ts +0 -2
- package/dist-client/pages/building-inspection-grid/component/grid-inspection-create-popup.js +0 -740
- package/dist-client/pages/building-inspection-grid/component/grid-inspection-create-popup.js.map +0 -1
- package/dist-client/pages/building-inspection-grid/component/grid-inspection-list-layer.d.ts +0 -19
- package/dist-client/pages/building-inspection-grid/component/grid-inspection-list-layer.js +0 -205
- package/dist-client/pages/building-inspection-grid/component/grid-inspection-list-layer.js.map +0 -1
- package/dist-client/pages/building-inspection-grid/component/notice-comment-popup.d.ts +0 -1
- package/dist-client/pages/building-inspection-grid/component/notice-comment-popup.js +0 -304
- package/dist-client/pages/building-inspection-grid/component/notice-comment-popup.js.map +0 -1
- package/dist-client/pages/building-inspection-grid/component/plan-preview-popup.d.ts +0 -15
- package/dist-client/pages/building-inspection-grid/component/plan-preview-popup.js +0 -430
- package/dist-client/pages/building-inspection-grid/component/plan-preview-popup.js.map +0 -1
- package/dist-client/pages/checklist/attachment-list-popup.d.ts +0 -3
- package/dist-client/pages/checklist/attachment-list-popup.js +0 -492
- package/dist-client/pages/checklist/attachment-list-popup.js.map +0 -1
- package/dist-client/pages/checklist/checklist-view.d.ts +0 -16
- package/dist-client/pages/checklist/checklist-view.js +0 -926
- package/dist-client/pages/checklist/checklist-view.js.map +0 -1
- package/dist-client/pages/checklist/comment-list-popup.d.ts +0 -1
- package/dist-client/pages/checklist/comment-list-popup.js +0 -367
- package/dist-client/pages/checklist/comment-list-popup.js.map +0 -1
- package/dist-client/pages/checklist/file-preview-popup.d.ts +0 -1
- package/dist-client/pages/checklist/file-preview-popup.js +0 -77
- package/dist-client/pages/checklist/file-preview-popup.js.map +0 -1
- package/dist-client/pages/checklist/inspection-info-popup.d.ts +0 -49
- package/dist-client/pages/checklist/inspection-info-popup.js +0 -683
- package/dist-client/pages/checklist/inspection-info-popup.js.map +0 -1
- package/dist-client/pages/checklist/inspection-tab-popup.d.ts +0 -18
- package/dist-client/pages/checklist/inspection-tab-popup.js +0 -196
- package/dist-client/pages/checklist/inspection-tab-popup.js.map +0 -1
- package/dist-client/pages/checklist/kcs-criteria-popup.d.ts +0 -16
- package/dist-client/pages/checklist/kcs-criteria-popup.js +0 -179
- package/dist-client/pages/checklist/kcs-criteria-popup.js.map +0 -1
- package/dist-client/pages/checklist-database/checklist-database.d.ts +0 -35
- package/dist-client/pages/checklist-database/checklist-database.js +0 -540
- package/dist-client/pages/checklist-database/checklist-database.js.map +0 -1
- package/dist-client/pages/checklist-template/checklist-template-item.d.ts +0 -2
- package/dist-client/pages/checklist-template/checklist-template-item.js +0 -278
- package/dist-client/pages/checklist-template/checklist-template-item.js.map +0 -1
- package/dist-client/pages/checklist-template/checklist-template-list.d.ts +0 -53
- package/dist-client/pages/checklist-template/checklist-template-list.js +0 -350
- package/dist-client/pages/checklist-template/checklist-template-list.js.map +0 -1
- package/dist-client/pages/checklist-template/checklist-type-management.d.ts +0 -55
- package/dist-client/pages/checklist-template/checklist-type-management.js +0 -250
- package/dist-client/pages/checklist-template/checklist-type-management.js.map +0 -1
- package/dist-client/pages/checklist-template/construction-checklist-template-item-popup.d.ts +0 -2
- package/dist-client/pages/checklist-template/construction-checklist-template-item-popup.js +0 -223
- package/dist-client/pages/checklist-template/construction-checklist-template-item-popup.js.map +0 -1
- package/dist-client/pages/checklist-template/construction-checklist-template-list.d.ts +0 -55
- package/dist-client/pages/checklist-template/construction-checklist-template-list.js +0 -404
- package/dist-client/pages/checklist-template/construction-checklist-template-list.js.map +0 -1
- package/dist-client/pages/issue/issue-importer.d.ts +0 -10
- package/dist-client/pages/issue/issue-importer.js +0 -101
- package/dist-client/pages/issue/issue-importer.js.map +0 -1
- package/dist-client/pages/issue/issue-list-page.d.ts +0 -62
- package/dist-client/pages/issue/issue-list-page.js +0 -322
- package/dist-client/pages/issue/issue-list-page.js.map +0 -1
- package/dist-client/pages/project-checklist/project-checklist-management.d.ts +0 -62
- package/dist-client/pages/project-checklist/project-checklist-management.js +0 -1145
- package/dist-client/pages/project-checklist/project-checklist-management.js.map +0 -1
- package/dist-client/pages/project-report/project-report-importer.d.ts +0 -10
- package/dist-client/pages/project-report/project-report-importer.js +0 -101
- package/dist-client/pages/project-report/project-report-importer.js.map +0 -1
- package/dist-client/pages/project-report/project-report-list-page.d.ts +0 -62
- package/dist-client/pages/project-report/project-report-list-page.js +0 -322
- package/dist-client/pages/project-report/project-report-list-page.js.map +0 -1
- package/dist-client/pages/supervisor/supervisor-importer.d.ts +0 -10
- package/dist-client/pages/supervisor/supervisor-importer.js +0 -101
- package/dist-client/pages/supervisor/supervisor-importer.js.map +0 -1
- package/dist-client/pages/supervisor/supervisor-list-page.d.ts +0 -62
- package/dist-client/pages/supervisor/supervisor-list-page.js +0 -322
- package/dist-client/pages/supervisor/supervisor-list-page.js.map +0 -1
- package/dist-client/route.d.ts +0 -1
- package/dist-client/route.js +0 -44
- package/dist-client/route.js.map +0 -1
- package/dist-client/stt/speech-to-text.d.ts +0 -41
- package/dist-client/stt/speech-to-text.js +0 -331
- package/dist-client/stt/speech-to-text.js.map +0 -1
- package/dist-client/stt/stt-utils.d.ts +0 -28
- package/dist-client/stt/stt-utils.js +0 -146
- package/dist-client/stt/stt-utils.js.map +0 -1
- package/dist-client/tsconfig.tsbuildinfo +0 -1
- package/dist-server/controllers/index.d.ts +0 -0
- package/dist-server/controllers/index.js +0 -1
- package/dist-server/controllers/index.js.map +0 -1
- package/dist-server/index.d.ts +0 -3
- package/dist-server/index.js +0 -7
- package/dist-server/index.js.map +0 -1
- package/dist-server/middlewares/index.d.ts +0 -1
- package/dist-server/middlewares/index.js +0 -7
- package/dist-server/middlewares/index.js.map +0 -1
- package/dist-server/migrations/index.d.ts +0 -1
- package/dist-server/migrations/index.js +0 -12
- package/dist-server/migrations/index.js.map +0 -1
- package/dist-server/routes.d.ts +0 -0
- package/dist-server/routes.js +0 -25
- package/dist-server/routes.js.map +0 -1
- package/dist-server/service/action-plan/action-plan-mutation.d.ts +0 -10
- package/dist-server/service/action-plan/action-plan-mutation.js +0 -167
- package/dist-server/service/action-plan/action-plan-mutation.js.map +0 -1
- package/dist-server/service/action-plan/action-plan-query.d.ts +0 -12
- package/dist-server/service/action-plan/action-plan-query.js +0 -91
- package/dist-server/service/action-plan/action-plan-query.js.map +0 -1
- package/dist-server/service/action-plan/action-plan-type.d.ts +0 -23
- package/dist-server/service/action-plan/action-plan-type.js +0 -86
- package/dist-server/service/action-plan/action-plan-type.js.map +0 -1
- package/dist-server/service/action-plan/action-plan.d.ts +0 -27
- package/dist-server/service/action-plan/action-plan.js +0 -116
- package/dist-server/service/action-plan/action-plan.js.map +0 -1
- package/dist-server/service/action-plan/index.d.ts +0 -5
- package/dist-server/service/action-plan/index.js +0 -9
- package/dist-server/service/action-plan/index.js.map +0 -1
- package/dist-server/service/building-inspection/building-inspection-mutation.d.ts +0 -9
- package/dist-server/service/building-inspection/building-inspection-mutation.js +0 -404
- package/dist-server/service/building-inspection/building-inspection-mutation.js.map +0 -1
- package/dist-server/service/building-inspection/building-inspection-query.d.ts +0 -24
- package/dist-server/service/building-inspection/building-inspection-query.js +0 -406
- package/dist-server/service/building-inspection/building-inspection-query.js.map +0 -1
- package/dist-server/service/building-inspection/building-inspection-type.d.ts +0 -89
- package/dist-server/service/building-inspection/building-inspection-type.js +0 -330
- package/dist-server/service/building-inspection/building-inspection-type.js.map +0 -1
- package/dist-server/service/building-inspection/building-inspection.d.ts +0 -42
- package/dist-server/service/building-inspection/building-inspection.js +0 -186
- package/dist-server/service/building-inspection/building-inspection.js.map +0 -1
- package/dist-server/service/building-inspection/index.d.ts +0 -7
- package/dist-server/service/building-inspection/index.js +0 -19
- package/dist-server/service/building-inspection/index.js.map +0 -1
- package/dist-server/service/building-inspection-daily-worklog/building-inspection-daily-worklog-mutation.d.ts +0 -6
- package/dist-server/service/building-inspection-daily-worklog/building-inspection-daily-worklog-mutation.js +0 -66
- package/dist-server/service/building-inspection-daily-worklog/building-inspection-daily-worklog-mutation.js.map +0 -1
- package/dist-server/service/building-inspection-daily-worklog/building-inspection-daily-worklog-query.d.ts +0 -16
- package/dist-server/service/building-inspection-daily-worklog/building-inspection-daily-worklog-query.js +0 -171
- package/dist-server/service/building-inspection-daily-worklog/building-inspection-daily-worklog-query.js.map +0 -1
- package/dist-server/service/building-inspection-daily-worklog/building-inspection-daily-worklog-type.d.ts +0 -23
- package/dist-server/service/building-inspection-daily-worklog/building-inspection-daily-worklog-type.js +0 -90
- package/dist-server/service/building-inspection-daily-worklog/building-inspection-daily-worklog-type.js.map +0 -1
- package/dist-server/service/building-inspection-daily-worklog/building-inspection-daily-worklog.d.ts +0 -33
- package/dist-server/service/building-inspection-daily-worklog/building-inspection-daily-worklog.js +0 -132
- package/dist-server/service/building-inspection-daily-worklog/building-inspection-daily-worklog.js.map +0 -1
- package/dist-server/service/building-inspection-daily-worklog/index.d.ts +0 -5
- package/dist-server/service/building-inspection-daily-worklog/index.js +0 -9
- package/dist-server/service/building-inspection-daily-worklog/index.js.map +0 -1
- package/dist-server/service/building-inspection-history/building-inspection-history-query.d.ts +0 -16
- package/dist-server/service/building-inspection-history/building-inspection-history-query.js +0 -120
- package/dist-server/service/building-inspection-history/building-inspection-history-query.js.map +0 -1
- package/dist-server/service/building-inspection-history/building-inspection-history-type.d.ts +0 -5
- package/dist-server/service/building-inspection-history/building-inspection-history-type.js +0 -21
- package/dist-server/service/building-inspection-history/building-inspection-history-type.js.map +0 -1
- package/dist-server/service/building-inspection-history/building-inspection-history.d.ts +0 -35
- package/dist-server/service/building-inspection-history/building-inspection-history.js +0 -162
- package/dist-server/service/building-inspection-history/building-inspection-history.js.map +0 -1
- package/dist-server/service/building-inspection-history/event-subscriber.d.ts +0 -7
- package/dist-server/service/building-inspection-history/event-subscriber.js +0 -21
- package/dist-server/service/building-inspection-history/event-subscriber.js.map +0 -1
- package/dist-server/service/building-inspection-history/index.d.ts +0 -6
- package/dist-server/service/building-inspection-history/index.js +0 -10
- package/dist-server/service/building-inspection-history/index.js.map +0 -1
- package/dist-server/service/checklist/checklist-mutation.d.ts +0 -3
- package/dist-server/service/checklist/checklist-mutation.js +0 -30
- package/dist-server/service/checklist/checklist-mutation.js.map +0 -1
- package/dist-server/service/checklist/checklist-query.d.ts +0 -21
- package/dist-server/service/checklist/checklist-query.js +0 -177
- package/dist-server/service/checklist/checklist-query.js.map +0 -1
- package/dist-server/service/checklist/checklist-type.d.ts +0 -5
- package/dist-server/service/checklist/checklist-type.js +0 -21
- package/dist-server/service/checklist/checklist-type.js.map +0 -1
- package/dist-server/service/checklist/checklist.d.ts +0 -66
- package/dist-server/service/checklist/checklist.js +0 -259
- package/dist-server/service/checklist/checklist.js.map +0 -1
- package/dist-server/service/checklist/event-subscriber.d.ts +0 -7
- package/dist-server/service/checklist/event-subscriber.js +0 -21
- package/dist-server/service/checklist/event-subscriber.js.map +0 -1
- package/dist-server/service/checklist/index.d.ts +0 -5
- package/dist-server/service/checklist/index.js +0 -9
- package/dist-server/service/checklist/index.js.map +0 -1
- package/dist-server/service/checklist-history/checklist-history-query.d.ts +0 -11
- package/dist-server/service/checklist-history/checklist-history-query.js +0 -77
- package/dist-server/service/checklist-history/checklist-history-query.js.map +0 -1
- package/dist-server/service/checklist-history/checklist-history-type.d.ts +0 -5
- package/dist-server/service/checklist-history/checklist-history-type.js +0 -21
- package/dist-server/service/checklist-history/checklist-history-type.js.map +0 -1
- package/dist-server/service/checklist-history/checklist-history.d.ts +0 -50
- package/dist-server/service/checklist-history/checklist-history.js +0 -239
- package/dist-server/service/checklist-history/checklist-history.js.map +0 -1
- package/dist-server/service/checklist-history/event-subscriber.d.ts +0 -7
- package/dist-server/service/checklist-history/event-subscriber.js +0 -21
- package/dist-server/service/checklist-history/event-subscriber.js.map +0 -1
- package/dist-server/service/checklist-history/index.d.ts +0 -6
- package/dist-server/service/checklist-history/index.js +0 -10
- package/dist-server/service/checklist-history/index.js.map +0 -1
- package/dist-server/service/checklist-item/checklist-item-mutation.d.ts +0 -2
- package/dist-server/service/checklist-item/checklist-item-mutation.js +0 -13
- package/dist-server/service/checklist-item/checklist-item-mutation.js.map +0 -1
- package/dist-server/service/checklist-item/checklist-item-query.d.ts +0 -18
- package/dist-server/service/checklist-item/checklist-item-query.js +0 -138
- package/dist-server/service/checklist-item/checklist-item-query.js.map +0 -1
- package/dist-server/service/checklist-item/checklist-item-type.d.ts +0 -5
- package/dist-server/service/checklist-item/checklist-item-type.js +0 -21
- package/dist-server/service/checklist-item/checklist-item-type.js.map +0 -1
- package/dist-server/service/checklist-item/checklist-item.d.ts +0 -29
- package/dist-server/service/checklist-item/checklist-item.js +0 -124
- package/dist-server/service/checklist-item/checklist-item.js.map +0 -1
- package/dist-server/service/checklist-item/index.d.ts +0 -4
- package/dist-server/service/checklist-item/index.js +0 -9
- package/dist-server/service/checklist-item/index.js.map +0 -1
- package/dist-server/service/checklist-item-comment/checklist-item-comment-history.d.ts +0 -16
- package/dist-server/service/checklist-item-comment/checklist-item-comment-history.js +0 -83
- package/dist-server/service/checklist-item-comment/checklist-item-comment-history.js.map +0 -1
- package/dist-server/service/checklist-item-comment/checklist-item-comment-mutation.d.ts +0 -8
- package/dist-server/service/checklist-item-comment/checklist-item-comment-mutation.js +0 -114
- package/dist-server/service/checklist-item-comment/checklist-item-comment-mutation.js.map +0 -1
- package/dist-server/service/checklist-item-comment/checklist-item-comment-query.d.ts +0 -7
- package/dist-server/service/checklist-item-comment/checklist-item-comment-query.js +0 -49
- package/dist-server/service/checklist-item-comment/checklist-item-comment-query.js.map +0 -1
- package/dist-server/service/checklist-item-comment/checklist-item-comment-type.d.ts +0 -14
- package/dist-server/service/checklist-item-comment/checklist-item-comment-type.js +0 -53
- package/dist-server/service/checklist-item-comment/checklist-item-comment-type.js.map +0 -1
- package/dist-server/service/checklist-item-comment/checklist-item-comment.d.ts +0 -12
- package/dist-server/service/checklist-item-comment/checklist-item-comment.js +0 -57
- package/dist-server/service/checklist-item-comment/checklist-item-comment.js.map +0 -1
- package/dist-server/service/checklist-item-comment/index.d.ts +0 -5
- package/dist-server/service/checklist-item-comment/index.js +0 -10
- package/dist-server/service/checklist-item-comment/index.js.map +0 -1
- package/dist-server/service/checklist-item-history/checklist-item-history-query.d.ts +0 -16
- package/dist-server/service/checklist-item-history/checklist-item-history-query.js +0 -123
- package/dist-server/service/checklist-item-history/checklist-item-history-query.js.map +0 -1
- package/dist-server/service/checklist-item-history/checklist-item-history-type.d.ts +0 -5
- package/dist-server/service/checklist-item-history/checklist-item-history-type.js +0 -21
- package/dist-server/service/checklist-item-history/checklist-item-history-type.js.map +0 -1
- package/dist-server/service/checklist-item-history/checklist-item-history.d.ts +0 -27
- package/dist-server/service/checklist-item-history/checklist-item-history.js +0 -133
- package/dist-server/service/checklist-item-history/checklist-item-history.js.map +0 -1
- package/dist-server/service/checklist-item-history/event-subscriber.d.ts +0 -7
- package/dist-server/service/checklist-item-history/event-subscriber.js +0 -21
- package/dist-server/service/checklist-item-history/event-subscriber.js.map +0 -1
- package/dist-server/service/checklist-item-history/index.d.ts +0 -6
- package/dist-server/service/checklist-item-history/index.js +0 -10
- package/dist-server/service/checklist-item-history/index.js.map +0 -1
- package/dist-server/service/checklist-template/checklist-template-mutation.d.ts +0 -6
- package/dist-server/service/checklist-template/checklist-template-mutation.js +0 -64
- package/dist-server/service/checklist-template/checklist-template-mutation.js.map +0 -1
- package/dist-server/service/checklist-template/checklist-template-query.d.ts +0 -10
- package/dist-server/service/checklist-template/checklist-template-query.js +0 -62
- package/dist-server/service/checklist-template/checklist-template-query.js.map +0 -1
- package/dist-server/service/checklist-template/checklist-template-type.d.ts +0 -10
- package/dist-server/service/checklist-template/checklist-template-type.js +0 -39
- package/dist-server/service/checklist-template/checklist-template-type.js.map +0 -1
- package/dist-server/service/checklist-template/checklist-template.d.ts +0 -17
- package/dist-server/service/checklist-template/checklist-template.js +0 -78
- package/dist-server/service/checklist-template/checklist-template.js.map +0 -1
- package/dist-server/service/checklist-template/index.d.ts +0 -5
- package/dist-server/service/checklist-template/index.js +0 -9
- package/dist-server/service/checklist-template/index.js.map +0 -1
- package/dist-server/service/checklist-template-item/checklist-template-item-mutation.d.ts +0 -7
- package/dist-server/service/checklist-template-item/checklist-template-item-mutation.js +0 -80
- package/dist-server/service/checklist-template-item/checklist-template-item-mutation.js.map +0 -1
- package/dist-server/service/checklist-template-item/checklist-template-item-query.d.ts +0 -11
- package/dist-server/service/checklist-template-item/checklist-template-item-query.js +0 -78
- package/dist-server/service/checklist-template-item/checklist-template-item-query.js.map +0 -1
- package/dist-server/service/checklist-template-item/checklist-template-item-type.d.ts +0 -19
- package/dist-server/service/checklist-template-item/checklist-template-item-type.js +0 -69
- package/dist-server/service/checklist-template-item/checklist-template-item-type.js.map +0 -1
- package/dist-server/service/checklist-template-item/checklist-template-item.d.ts +0 -26
- package/dist-server/service/checklist-template-item/checklist-template-item.js +0 -106
- package/dist-server/service/checklist-template-item/checklist-template-item.js.map +0 -1
- package/dist-server/service/checklist-template-item/index.d.ts +0 -5
- package/dist-server/service/checklist-template-item/index.js +0 -9
- package/dist-server/service/checklist-template-item/index.js.map +0 -1
- package/dist-server/service/checklist-template-item/spec-matching-service.d.ts +0 -2
- package/dist-server/service/checklist-template-item/spec-matching-service.js +0 -51
- package/dist-server/service/checklist-template-item/spec-matching-service.js.map +0 -1
- package/dist-server/service/checklist-type/checklist-type-mutation.d.ts +0 -6
- package/dist-server/service/checklist-type/checklist-type-mutation.js +0 -64
- package/dist-server/service/checklist-type/checklist-type-mutation.js.map +0 -1
- package/dist-server/service/checklist-type/checklist-type-query.d.ts +0 -10
- package/dist-server/service/checklist-type/checklist-type-query.js +0 -62
- package/dist-server/service/checklist-type/checklist-type-query.js.map +0 -1
- package/dist-server/service/checklist-type/checklist-type-type.d.ts +0 -11
- package/dist-server/service/checklist-type/checklist-type-type.js +0 -43
- package/dist-server/service/checklist-type/checklist-type-type.js.map +0 -1
- package/dist-server/service/checklist-type/checklist-type.d.ts +0 -19
- package/dist-server/service/checklist-type/checklist-type.js +0 -78
- package/dist-server/service/checklist-type/checklist-type.js.map +0 -1
- package/dist-server/service/checklist-type/index.d.ts +0 -5
- package/dist-server/service/checklist-type/index.js +0 -9
- package/dist-server/service/checklist-type/index.js.map +0 -1
- package/dist-server/service/construction-checklist-template/construction-checklist-template-mutation.d.ts +0 -7
- package/dist-server/service/construction-checklist-template/construction-checklist-template-mutation.js +0 -107
- package/dist-server/service/construction-checklist-template/construction-checklist-template-mutation.js.map +0 -1
- package/dist-server/service/construction-checklist-template/construction-checklist-template-query.d.ts +0 -10
- package/dist-server/service/construction-checklist-template/construction-checklist-template-query.js +0 -62
- package/dist-server/service/construction-checklist-template/construction-checklist-template-query.js.map +0 -1
- package/dist-server/service/construction-checklist-template/construction-checklist-template-type.d.ts +0 -11
- package/dist-server/service/construction-checklist-template/construction-checklist-template-type.js +0 -43
- package/dist-server/service/construction-checklist-template/construction-checklist-template-type.js.map +0 -1
- package/dist-server/service/construction-checklist-template/construction-checklist-template.d.ts +0 -18
- package/dist-server/service/construction-checklist-template/construction-checklist-template.js +0 -80
- package/dist-server/service/construction-checklist-template/construction-checklist-template.js.map +0 -1
- package/dist-server/service/construction-checklist-template/index.d.ts +0 -5
- package/dist-server/service/construction-checklist-template/index.js +0 -9
- package/dist-server/service/construction-checklist-template/index.js.map +0 -1
- package/dist-server/service/construction-checklist-template-item/construction-checklist-template-item-mutation.d.ts +0 -6
- package/dist-server/service/construction-checklist-template-item/construction-checklist-template-item-mutation.js +0 -56
- package/dist-server/service/construction-checklist-template-item/construction-checklist-template-item-mutation.js.map +0 -1
- package/dist-server/service/construction-checklist-template-item/construction-checklist-template-item-query.d.ts +0 -9
- package/dist-server/service/construction-checklist-template-item/construction-checklist-template-item-query.js +0 -53
- package/dist-server/service/construction-checklist-template-item/construction-checklist-template-item-query.js.map +0 -1
- package/dist-server/service/construction-checklist-template-item/construction-checklist-template-item-type.d.ts +0 -17
- package/dist-server/service/construction-checklist-template-item/construction-checklist-template-item-type.js +0 -67
- package/dist-server/service/construction-checklist-template-item/construction-checklist-template-item-type.js.map +0 -1
- package/dist-server/service/construction-checklist-template-item/construction-checklist-template-item.d.ts +0 -24
- package/dist-server/service/construction-checklist-template-item/construction-checklist-template-item.js +0 -113
- package/dist-server/service/construction-checklist-template-item/construction-checklist-template-item.js.map +0 -1
- package/dist-server/service/construction-checklist-template-item/index.d.ts +0 -5
- package/dist-server/service/construction-checklist-template-item/index.js +0 -9
- package/dist-server/service/construction-checklist-template-item/index.js.map +0 -1
- package/dist-server/service/field-document/field-document-auto-file.d.ts +0 -21
- package/dist-server/service/field-document/field-document-auto-file.js +0 -47
- package/dist-server/service/field-document/field-document-auto-file.js.map +0 -1
- package/dist-server/service/field-document/field-document-mutation.d.ts +0 -9
- package/dist-server/service/field-document/field-document-mutation.js +0 -139
- package/dist-server/service/field-document/field-document-mutation.js.map +0 -1
- package/dist-server/service/field-document/field-document-query.d.ts +0 -14
- package/dist-server/service/field-document/field-document-query.js +0 -120
- package/dist-server/service/field-document/field-document-query.js.map +0 -1
- package/dist-server/service/field-document/field-document-summary-service.d.ts +0 -10
- package/dist-server/service/field-document/field-document-summary-service.js +0 -79
- package/dist-server/service/field-document/field-document-summary-service.js.map +0 -1
- package/dist-server/service/field-document/field-document-type.d.ts +0 -24
- package/dist-server/service/field-document/field-document-type.js +0 -88
- package/dist-server/service/field-document/field-document-type.js.map +0 -1
- package/dist-server/service/field-document/field-document.d.ts +0 -29
- package/dist-server/service/field-document/field-document.js +0 -127
- package/dist-server/service/field-document/field-document.js.map +0 -1
- package/dist-server/service/field-document/index.d.ts +0 -5
- package/dist-server/service/field-document/index.js +0 -9
- package/dist-server/service/field-document/index.js.map +0 -1
- package/dist-server/service/index.d.ts +0 -23
- package/dist-server/service/index.js +0 -98
- package/dist-server/service/index.js.map +0 -1
- package/dist-server/service/issue/index.d.ts +0 -5
- package/dist-server/service/issue/index.js +0 -9
- package/dist-server/service/issue/index.js.map +0 -1
- package/dist-server/service/issue/issue-mutation.d.ts +0 -10
- package/dist-server/service/issue/issue-mutation.js +0 -167
- package/dist-server/service/issue/issue-mutation.js.map +0 -1
- package/dist-server/service/issue/issue-query.d.ts +0 -12
- package/dist-server/service/issue/issue-query.js +0 -91
- package/dist-server/service/issue/issue-query.js.map +0 -1
- package/dist-server/service/issue/issue-type.d.ts +0 -23
- package/dist-server/service/issue/issue-type.js +0 -86
- package/dist-server/service/issue/issue-type.js.map +0 -1
- package/dist-server/service/issue/issue.d.ts +0 -26
- package/dist-server/service/issue/issue.js +0 -111
- package/dist-server/service/issue/issue.js.map +0 -1
- package/dist-server/service/project-checklist/index.d.ts +0 -5
- package/dist-server/service/project-checklist/index.js +0 -9
- package/dist-server/service/project-checklist/index.js.map +0 -1
- package/dist-server/service/project-checklist/project-checklist-mutation.d.ts +0 -7
- package/dist-server/service/project-checklist/project-checklist-mutation.js +0 -118
- package/dist-server/service/project-checklist/project-checklist-mutation.js.map +0 -1
- package/dist-server/service/project-checklist/project-checklist-query.d.ts +0 -12
- package/dist-server/service/project-checklist/project-checklist-query.js +0 -76
- package/dist-server/service/project-checklist/project-checklist-query.js.map +0 -1
- package/dist-server/service/project-checklist/project-checklist-type.d.ts +0 -18
- package/dist-server/service/project-checklist/project-checklist-type.js +0 -69
- package/dist-server/service/project-checklist/project-checklist-type.js.map +0 -1
- package/dist-server/service/project-checklist/project-checklist.d.ts +0 -20
- package/dist-server/service/project-checklist/project-checklist.js +0 -90
- package/dist-server/service/project-checklist/project-checklist.js.map +0 -1
- package/dist-server/service/project-checklist/spec-matching-service.d.ts +0 -17
- package/dist-server/service/project-checklist/spec-matching-service.js +0 -140
- package/dist-server/service/project-checklist/spec-matching-service.js.map +0 -1
- package/dist-server/service/project-checklist-item/index.d.ts +0 -4
- package/dist-server/service/project-checklist-item/index.js +0 -9
- package/dist-server/service/project-checklist-item/index.js.map +0 -1
- package/dist-server/service/project-checklist-item/project-checklist-item-mutation.d.ts +0 -2
- package/dist-server/service/project-checklist-item/project-checklist-item-mutation.js +0 -13
- package/dist-server/service/project-checklist-item/project-checklist-item-mutation.js.map +0 -1
- package/dist-server/service/project-checklist-item/project-checklist-item-query.d.ts +0 -5
- package/dist-server/service/project-checklist-item/project-checklist-item-query.js +0 -34
- package/dist-server/service/project-checklist-item/project-checklist-item-query.js.map +0 -1
- package/dist-server/service/project-checklist-item/project-checklist-item-type.d.ts +0 -5
- package/dist-server/service/project-checklist-item/project-checklist-item-type.js +0 -21
- package/dist-server/service/project-checklist-item/project-checklist-item-type.js.map +0 -1
- package/dist-server/service/project-checklist-item/project-checklist-item.d.ts +0 -19
- package/dist-server/service/project-checklist-item/project-checklist-item.js +0 -92
- package/dist-server/service/project-checklist-item/project-checklist-item.js.map +0 -1
- package/dist-server/service/project-report/index.d.ts +0 -5
- package/dist-server/service/project-report/index.js +0 -9
- package/dist-server/service/project-report/index.js.map +0 -1
- package/dist-server/service/project-report/project-report-mutation.d.ts +0 -10
- package/dist-server/service/project-report/project-report-mutation.js +0 -167
- package/dist-server/service/project-report/project-report-mutation.js.map +0 -1
- package/dist-server/service/project-report/project-report-query.d.ts +0 -12
- package/dist-server/service/project-report/project-report-query.js +0 -91
- package/dist-server/service/project-report/project-report-query.js.map +0 -1
- package/dist-server/service/project-report/project-report-type.d.ts +0 -23
- package/dist-server/service/project-report/project-report-type.js +0 -86
- package/dist-server/service/project-report/project-report-type.js.map +0 -1
- package/dist-server/service/project-report/project-report.d.ts +0 -28
- package/dist-server/service/project-report/project-report.js +0 -121
- package/dist-server/service/project-report/project-report.js.map +0 -1
- package/dist-server/service/supervisor/index.d.ts +0 -5
- package/dist-server/service/supervisor/index.js +0 -9
- package/dist-server/service/supervisor/index.js.map +0 -1
- package/dist-server/service/supervisor/supervisor-mutation.d.ts +0 -10
- package/dist-server/service/supervisor/supervisor-mutation.js +0 -167
- package/dist-server/service/supervisor/supervisor-mutation.js.map +0 -1
- package/dist-server/service/supervisor/supervisor-query.d.ts +0 -12
- package/dist-server/service/supervisor/supervisor-query.js +0 -91
- package/dist-server/service/supervisor/supervisor-query.js.map +0 -1
- package/dist-server/service/supervisor/supervisor-type.d.ts +0 -23
- package/dist-server/service/supervisor/supervisor-type.js +0 -86
- package/dist-server/service/supervisor/supervisor-type.js.map +0 -1
- package/dist-server/service/supervisor/supervisor.d.ts +0 -28
- package/dist-server/service/supervisor/supervisor.js +0 -121
- package/dist-server/service/supervisor/supervisor.js.map +0 -1
- package/dist-server/tsconfig.tsbuildinfo +0 -1
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
import { LitElement } from 'lit';
|
|
2
|
-
/**
|
|
3
|
-
* SpeechToText (음성 인식) 웹 컴포넌트
|
|
4
|
-
*
|
|
5
|
-
* - 음성 인식 시작/중지 메서드 제공
|
|
6
|
-
* - 인식 결과/에러/상태를 커스텀 이벤트(stt-result, stt-error, stt-status)로 외부에 전달
|
|
7
|
-
* - 버튼 등 UI는 포함하지 않음 (컨트롤은 외부에서)
|
|
8
|
-
* - Google Cloud Speech API 사용
|
|
9
|
-
*
|
|
10
|
-
* 사용 예시:
|
|
11
|
-
* <speech-to-text id="stt" api-key="YOUR_API_KEY"></speech-to-text>
|
|
12
|
-
*
|
|
13
|
-
* // JS에서
|
|
14
|
-
* const stt = document.getElementById('stt') as SpeechToText;
|
|
15
|
-
* stt.startListening();
|
|
16
|
-
* stt.stopListening();
|
|
17
|
-
* stt.addEventListener('stt-result', e => { ... });
|
|
18
|
-
* stt.addEventListener('stt-error', e => { ... });
|
|
19
|
-
* stt.addEventListener('stt-status', e => { ... });
|
|
20
|
-
*/
|
|
21
|
-
export declare class SpeechToText extends LitElement {
|
|
22
|
-
apiKey: string;
|
|
23
|
-
private mediaRecorder;
|
|
24
|
-
private audioChunks;
|
|
25
|
-
private isRecording;
|
|
26
|
-
private stream;
|
|
27
|
-
private isProcessing;
|
|
28
|
-
/**
|
|
29
|
-
* 음성 인식 시작
|
|
30
|
-
*/
|
|
31
|
-
startListening(): Promise<void>;
|
|
32
|
-
/**
|
|
33
|
-
* 음성 인식 중지
|
|
34
|
-
*/
|
|
35
|
-
stopListening(): void;
|
|
36
|
-
private processAudio;
|
|
37
|
-
private sendToGoogleSpeech;
|
|
38
|
-
private finishRecording;
|
|
39
|
-
private cleanup;
|
|
40
|
-
protected render(): null;
|
|
41
|
-
}
|
|
@@ -1,331 +0,0 @@
|
|
|
1
|
-
import { __decorate, __metadata } from "tslib";
|
|
2
|
-
import { LitElement } from 'lit';
|
|
3
|
-
import { customElement, property } from 'lit/decorators.js';
|
|
4
|
-
/**
|
|
5
|
-
* SpeechToText (음성 인식) 웹 컴포넌트
|
|
6
|
-
*
|
|
7
|
-
* - 음성 인식 시작/중지 메서드 제공
|
|
8
|
-
* - 인식 결과/에러/상태를 커스텀 이벤트(stt-result, stt-error, stt-status)로 외부에 전달
|
|
9
|
-
* - 버튼 등 UI는 포함하지 않음 (컨트롤은 외부에서)
|
|
10
|
-
* - Google Cloud Speech API 사용
|
|
11
|
-
*
|
|
12
|
-
* 사용 예시:
|
|
13
|
-
* <speech-to-text id="stt" api-key="YOUR_API_KEY"></speech-to-text>
|
|
14
|
-
*
|
|
15
|
-
* // JS에서
|
|
16
|
-
* const stt = document.getElementById('stt') as SpeechToText;
|
|
17
|
-
* stt.startListening();
|
|
18
|
-
* stt.stopListening();
|
|
19
|
-
* stt.addEventListener('stt-result', e => { ... });
|
|
20
|
-
* stt.addEventListener('stt-error', e => { ... });
|
|
21
|
-
* stt.addEventListener('stt-status', e => { ... });
|
|
22
|
-
*/
|
|
23
|
-
let SpeechToText = class SpeechToText extends LitElement {
|
|
24
|
-
constructor() {
|
|
25
|
-
super(...arguments);
|
|
26
|
-
this.apiKey = 'AIzaSyCH3FPpY5ZCpcfUMjePH2Nhtueu6chgBDk';
|
|
27
|
-
this.mediaRecorder = null;
|
|
28
|
-
this.audioChunks = [];
|
|
29
|
-
this.isRecording = false;
|
|
30
|
-
this.stream = null;
|
|
31
|
-
this.isProcessing = false;
|
|
32
|
-
}
|
|
33
|
-
/**
|
|
34
|
-
* 음성 인식 시작
|
|
35
|
-
*/
|
|
36
|
-
async startListening() {
|
|
37
|
-
if (!this.apiKey) {
|
|
38
|
-
this.dispatchEvent(new CustomEvent('stt-error', {
|
|
39
|
-
detail: { error: 'Google Cloud API key가 설정되지 않았습니다.' }
|
|
40
|
-
}));
|
|
41
|
-
return;
|
|
42
|
-
}
|
|
43
|
-
if (!navigator.mediaDevices || !navigator.mediaDevices.getUserMedia) {
|
|
44
|
-
this.dispatchEvent(new CustomEvent('stt-error', {
|
|
45
|
-
detail: { error: '지원되지 않는 브라우저입니다.' }
|
|
46
|
-
}));
|
|
47
|
-
return;
|
|
48
|
-
}
|
|
49
|
-
if (this.isRecording || this.isProcessing) {
|
|
50
|
-
return;
|
|
51
|
-
}
|
|
52
|
-
// 이전 상태 완전 정리
|
|
53
|
-
this.cleanup();
|
|
54
|
-
try {
|
|
55
|
-
this.stream = await navigator.mediaDevices.getUserMedia({
|
|
56
|
-
audio: {
|
|
57
|
-
echoCancellation: true,
|
|
58
|
-
noiseSuppression: true,
|
|
59
|
-
autoGainControl: true,
|
|
60
|
-
sampleRate: 48000
|
|
61
|
-
}
|
|
62
|
-
});
|
|
63
|
-
let mimeType = 'audio/webm;codecs=opus';
|
|
64
|
-
if (!MediaRecorder.isTypeSupported(mimeType)) {
|
|
65
|
-
mimeType = 'audio/webm';
|
|
66
|
-
if (!MediaRecorder.isTypeSupported(mimeType)) {
|
|
67
|
-
if (MediaRecorder.isTypeSupported('audio/mp4')) {
|
|
68
|
-
mimeType = 'audio/mp4';
|
|
69
|
-
}
|
|
70
|
-
else if (MediaRecorder.isTypeSupported('audio/wav')) {
|
|
71
|
-
mimeType = 'audio/wav';
|
|
72
|
-
}
|
|
73
|
-
else {
|
|
74
|
-
mimeType = '';
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
const recorderOptions = mimeType ? { mimeType } : {};
|
|
79
|
-
this.mediaRecorder = new MediaRecorder(this.stream, recorderOptions);
|
|
80
|
-
this.audioChunks = [];
|
|
81
|
-
this.isRecording = true;
|
|
82
|
-
this.mediaRecorder.ondataavailable = event => {
|
|
83
|
-
if (event.data.size > 0) {
|
|
84
|
-
this.audioChunks.push(event.data);
|
|
85
|
-
}
|
|
86
|
-
};
|
|
87
|
-
this.mediaRecorder.onstop = async () => {
|
|
88
|
-
const audioBlob = new Blob(this.audioChunks, { type: mimeType || 'audio/webm' });
|
|
89
|
-
if (audioBlob.size > 5000) {
|
|
90
|
-
await this.processAudio(audioBlob);
|
|
91
|
-
}
|
|
92
|
-
else {
|
|
93
|
-
this.dispatchEvent(new CustomEvent('stt-error', {
|
|
94
|
-
detail: { error: '녹음이 너무 짧습니다.' }
|
|
95
|
-
}));
|
|
96
|
-
// 녹음이 짧을 때도 완료 처리
|
|
97
|
-
this.finishRecording();
|
|
98
|
-
}
|
|
99
|
-
this.cleanup();
|
|
100
|
-
};
|
|
101
|
-
this.mediaRecorder.onerror = () => {
|
|
102
|
-
this.dispatchEvent(new CustomEvent('stt-error', {
|
|
103
|
-
detail: { error: '녹음 오류 발생' }
|
|
104
|
-
}));
|
|
105
|
-
this.isRecording = false;
|
|
106
|
-
};
|
|
107
|
-
this.mediaRecorder.start();
|
|
108
|
-
this.dispatchEvent(new CustomEvent('stt-status', {
|
|
109
|
-
detail: { status: '🎙️ Listening...' }
|
|
110
|
-
}));
|
|
111
|
-
}
|
|
112
|
-
catch (error) {
|
|
113
|
-
this.dispatchEvent(new CustomEvent('stt-error', {
|
|
114
|
-
detail: { error: `마이크 접근 실패: ${error instanceof Error ? error.message : '알 수 없는 오류'}` }
|
|
115
|
-
}));
|
|
116
|
-
this.isRecording = false;
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
/**
|
|
120
|
-
* 음성 인식 중지
|
|
121
|
-
*/
|
|
122
|
-
stopListening() {
|
|
123
|
-
if (this.mediaRecorder && this.mediaRecorder.state !== 'inactive') {
|
|
124
|
-
this.mediaRecorder.stop();
|
|
125
|
-
}
|
|
126
|
-
else {
|
|
127
|
-
// MediaRecorder가 없거나 이미 중지된 경우 즉시 정리
|
|
128
|
-
this.cleanup();
|
|
129
|
-
this.dispatchEvent(new CustomEvent('stt-status', {
|
|
130
|
-
detail: { status: '음성 인식 종료' }
|
|
131
|
-
}));
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
async processAudio(audioBlob) {
|
|
135
|
-
this.isProcessing = true;
|
|
136
|
-
this.dispatchEvent(new CustomEvent('stt-status', {
|
|
137
|
-
detail: { status: '🔄 음성을 텍스트로 변환 중...' }
|
|
138
|
-
}));
|
|
139
|
-
try {
|
|
140
|
-
const reader = new FileReader();
|
|
141
|
-
reader.readAsDataURL(audioBlob);
|
|
142
|
-
reader.onloadend = async () => {
|
|
143
|
-
const base64Audio = reader.result.split(',')[1];
|
|
144
|
-
await this.sendToGoogleSpeech(base64Audio);
|
|
145
|
-
};
|
|
146
|
-
reader.onerror = () => {
|
|
147
|
-
this.dispatchEvent(new CustomEvent('stt-error', {
|
|
148
|
-
detail: { error: '오디오 처리 실패' }
|
|
149
|
-
}));
|
|
150
|
-
this.finishRecording();
|
|
151
|
-
};
|
|
152
|
-
}
|
|
153
|
-
catch (error) {
|
|
154
|
-
this.dispatchEvent(new CustomEvent('stt-error', {
|
|
155
|
-
detail: { error: '처리 중 오류 발생' }
|
|
156
|
-
}));
|
|
157
|
-
this.finishRecording();
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
async sendToGoogleSpeech(base64Audio) {
|
|
161
|
-
let encoding = 'WEBM_OPUS';
|
|
162
|
-
let sampleRate = 48000;
|
|
163
|
-
if (this.mediaRecorder && this.mediaRecorder.mimeType) {
|
|
164
|
-
const mimeType = this.mediaRecorder.mimeType.toLowerCase();
|
|
165
|
-
if (mimeType.includes('opus')) {
|
|
166
|
-
encoding = 'WEBM_OPUS';
|
|
167
|
-
}
|
|
168
|
-
else if (mimeType.includes('webm')) {
|
|
169
|
-
encoding = 'WEBM_OPUS';
|
|
170
|
-
}
|
|
171
|
-
else if (mimeType.includes('mp4')) {
|
|
172
|
-
encoding = 'MP3';
|
|
173
|
-
}
|
|
174
|
-
else if (mimeType.includes('wav')) {
|
|
175
|
-
encoding = 'LINEAR16';
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
const requestBody = {
|
|
179
|
-
config: {
|
|
180
|
-
encoding: encoding,
|
|
181
|
-
sampleRateHertz: sampleRate,
|
|
182
|
-
languageCode: 'ko-KR',
|
|
183
|
-
enableAutomaticPunctuation: true,
|
|
184
|
-
model: 'latest_long',
|
|
185
|
-
useEnhanced: true,
|
|
186
|
-
enableWordTimeOffsets: false,
|
|
187
|
-
enableWordConfidence: false,
|
|
188
|
-
maxAlternatives: 1,
|
|
189
|
-
speechContexts: [
|
|
190
|
-
{
|
|
191
|
-
phrases: [
|
|
192
|
-
'1번',
|
|
193
|
-
'2번',
|
|
194
|
-
'3번',
|
|
195
|
-
'4번',
|
|
196
|
-
'5번',
|
|
197
|
-
'6번',
|
|
198
|
-
'7번',
|
|
199
|
-
'합격',
|
|
200
|
-
'불합격',
|
|
201
|
-
'적합',
|
|
202
|
-
'부적합',
|
|
203
|
-
'기본업무',
|
|
204
|
-
'시공',
|
|
205
|
-
'자재',
|
|
206
|
-
'도서',
|
|
207
|
-
'모두',
|
|
208
|
-
'전체',
|
|
209
|
-
'초기화',
|
|
210
|
-
'조치사항',
|
|
211
|
-
'확인 필요',
|
|
212
|
-
'기본 외 업무',
|
|
213
|
-
'부터',
|
|
214
|
-
'까지'
|
|
215
|
-
],
|
|
216
|
-
boost: 20
|
|
217
|
-
}
|
|
218
|
-
]
|
|
219
|
-
},
|
|
220
|
-
audio: {
|
|
221
|
-
content: base64Audio
|
|
222
|
-
}
|
|
223
|
-
};
|
|
224
|
-
try {
|
|
225
|
-
const response = await fetch(`https://speech.googleapis.com/v1/speech:recognize?key=${this.apiKey}`, {
|
|
226
|
-
method: 'POST',
|
|
227
|
-
headers: {
|
|
228
|
-
'Content-Type': 'application/json'
|
|
229
|
-
},
|
|
230
|
-
body: JSON.stringify(requestBody)
|
|
231
|
-
});
|
|
232
|
-
if (response.ok) {
|
|
233
|
-
const data = await response.json();
|
|
234
|
-
if (data.results && data.results.length > 0) {
|
|
235
|
-
const finalTranscript = data.results.map((result) => result.alternatives[0].transcript).join(' ');
|
|
236
|
-
this.dispatchEvent(new CustomEvent('stt-result', {
|
|
237
|
-
detail: {
|
|
238
|
-
finalTranscript: finalTranscript.trim(),
|
|
239
|
-
interimTranscript: ''
|
|
240
|
-
}
|
|
241
|
-
}));
|
|
242
|
-
this.dispatchEvent(new CustomEvent('stt-status', {
|
|
243
|
-
detail: { status: `📝 Recognized: ${finalTranscript}` }
|
|
244
|
-
}));
|
|
245
|
-
// 음성 인식 완료 후 즉시 완료 처리
|
|
246
|
-
this.finishRecording();
|
|
247
|
-
}
|
|
248
|
-
else {
|
|
249
|
-
this.dispatchEvent(new CustomEvent('stt-result', {
|
|
250
|
-
detail: {
|
|
251
|
-
finalTranscript: '',
|
|
252
|
-
interimTranscript: ''
|
|
253
|
-
}
|
|
254
|
-
}));
|
|
255
|
-
this.dispatchEvent(new CustomEvent('stt-status', {
|
|
256
|
-
detail: { status: '음성을 인식하지 못했습니다.' }
|
|
257
|
-
}));
|
|
258
|
-
// 인식 실패 시에도 즉시 완료 처리
|
|
259
|
-
this.finishRecording();
|
|
260
|
-
}
|
|
261
|
-
}
|
|
262
|
-
else {
|
|
263
|
-
const error = await response.text();
|
|
264
|
-
let errorMessage = 'API 오류 발생';
|
|
265
|
-
try {
|
|
266
|
-
const errorObj = JSON.parse(error);
|
|
267
|
-
if (errorObj.error && errorObj.error.message) {
|
|
268
|
-
errorMessage = errorObj.error.message;
|
|
269
|
-
}
|
|
270
|
-
}
|
|
271
|
-
catch (e) {
|
|
272
|
-
errorMessage = `HTTP ${response.status}`;
|
|
273
|
-
}
|
|
274
|
-
this.dispatchEvent(new CustomEvent('stt-error', {
|
|
275
|
-
detail: { error: errorMessage }
|
|
276
|
-
}));
|
|
277
|
-
// API 오류 시에도 즉시 완료 처리
|
|
278
|
-
this.finishRecording();
|
|
279
|
-
}
|
|
280
|
-
}
|
|
281
|
-
catch (error) {
|
|
282
|
-
this.dispatchEvent(new CustomEvent('stt-error', {
|
|
283
|
-
detail: { error: `네트워크 오류: ${error instanceof Error ? error.message : '알 수 없는 오류'}` }
|
|
284
|
-
}));
|
|
285
|
-
// 네트워크 오류 시에도 즉시 완료 처리
|
|
286
|
-
this.finishRecording();
|
|
287
|
-
}
|
|
288
|
-
}
|
|
289
|
-
finishRecording() {
|
|
290
|
-
this.cleanup();
|
|
291
|
-
this.dispatchEvent(new CustomEvent('stt-status', {
|
|
292
|
-
detail: { status: '음성 인식 종료' }
|
|
293
|
-
}));
|
|
294
|
-
}
|
|
295
|
-
cleanup() {
|
|
296
|
-
// 모든 상태 완전 초기화
|
|
297
|
-
if (this.stream) {
|
|
298
|
-
this.stream.getTracks().forEach(track => {
|
|
299
|
-
track.stop();
|
|
300
|
-
track.enabled = false;
|
|
301
|
-
});
|
|
302
|
-
this.stream = null;
|
|
303
|
-
}
|
|
304
|
-
if (this.mediaRecorder) {
|
|
305
|
-
try {
|
|
306
|
-
if (this.mediaRecorder.state !== 'inactive') {
|
|
307
|
-
this.mediaRecorder.stop();
|
|
308
|
-
}
|
|
309
|
-
}
|
|
310
|
-
catch (e) {
|
|
311
|
-
// MediaRecorder stop 에러 무시
|
|
312
|
-
}
|
|
313
|
-
this.mediaRecorder = null;
|
|
314
|
-
}
|
|
315
|
-
this.audioChunks = [];
|
|
316
|
-
this.isRecording = false;
|
|
317
|
-
this.isProcessing = false;
|
|
318
|
-
}
|
|
319
|
-
render() {
|
|
320
|
-
return null;
|
|
321
|
-
}
|
|
322
|
-
};
|
|
323
|
-
__decorate([
|
|
324
|
-
property({ type: String, attribute: 'api-key' }),
|
|
325
|
-
__metadata("design:type", String)
|
|
326
|
-
], SpeechToText.prototype, "apiKey", void 0);
|
|
327
|
-
SpeechToText = __decorate([
|
|
328
|
-
customElement('speech-to-text')
|
|
329
|
-
], SpeechToText);
|
|
330
|
-
export { SpeechToText };
|
|
331
|
-
//# sourceMappingURL=speech-to-text.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"speech-to-text.js","sourceRoot":"","sources":["../../client/stt/speech-to-text.ts"],"names":[],"mappings":"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","sourcesContent":["import { LitElement } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\n\n/**\n * SpeechToText (음성 인식) 웹 컴포넌트\n *\n * - 음성 인식 시작/중지 메서드 제공\n * - 인식 결과/에러/상태를 커스텀 이벤트(stt-result, stt-error, stt-status)로 외부에 전달\n * - 버튼 등 UI는 포함하지 않음 (컨트롤은 외부에서)\n * - Google Cloud Speech API 사용\n *\n * 사용 예시:\n * <speech-to-text id=\"stt\" api-key=\"YOUR_API_KEY\"></speech-to-text>\n *\n * // JS에서\n * const stt = document.getElementById('stt') as SpeechToText;\n * stt.startListening();\n * stt.stopListening();\n * stt.addEventListener('stt-result', e => { ... });\n * stt.addEventListener('stt-error', e => { ... });\n * stt.addEventListener('stt-status', e => { ... });\n */\n@customElement('speech-to-text')\nexport class SpeechToText extends LitElement {\n @property({ type: String, attribute: 'api-key' })\n apiKey: string = 'AIzaSyCH3FPpY5ZCpcfUMjePH2Nhtueu6chgBDk'\n\n private mediaRecorder: MediaRecorder | null = null\n private audioChunks: Blob[] = []\n private isRecording: boolean = false\n private stream: MediaStream | null = null\n private isProcessing: boolean = false\n\n /**\n * 음성 인식 시작\n */\n public async startListening() {\n if (!this.apiKey) {\n this.dispatchEvent(\n new CustomEvent('stt-error', {\n detail: { error: 'Google Cloud API key가 설정되지 않았습니다.' }\n })\n )\n return\n }\n\n if (!navigator.mediaDevices || !navigator.mediaDevices.getUserMedia) {\n this.dispatchEvent(\n new CustomEvent('stt-error', {\n detail: { error: '지원되지 않는 브라우저입니다.' }\n })\n )\n return\n }\n\n if (this.isRecording || this.isProcessing) {\n return\n }\n\n // 이전 상태 완전 정리\n this.cleanup()\n\n try {\n this.stream = await navigator.mediaDevices.getUserMedia({\n audio: {\n echoCancellation: true,\n noiseSuppression: true,\n autoGainControl: true,\n sampleRate: 48000\n }\n })\n\n let mimeType = 'audio/webm;codecs=opus'\n if (!MediaRecorder.isTypeSupported(mimeType)) {\n mimeType = 'audio/webm'\n if (!MediaRecorder.isTypeSupported(mimeType)) {\n if (MediaRecorder.isTypeSupported('audio/mp4')) {\n mimeType = 'audio/mp4'\n } else if (MediaRecorder.isTypeSupported('audio/wav')) {\n mimeType = 'audio/wav'\n } else {\n mimeType = ''\n }\n }\n }\n\n const recorderOptions = mimeType ? { mimeType } : {}\n this.mediaRecorder = new MediaRecorder(this.stream, recorderOptions)\n\n this.audioChunks = []\n this.isRecording = true\n\n this.mediaRecorder.ondataavailable = event => {\n if (event.data.size > 0) {\n this.audioChunks.push(event.data)\n }\n }\n\n this.mediaRecorder.onstop = async () => {\n const audioBlob = new Blob(this.audioChunks, { type: mimeType || 'audio/webm' })\n\n if (audioBlob.size > 5000) {\n await this.processAudio(audioBlob)\n } else {\n this.dispatchEvent(\n new CustomEvent('stt-error', {\n detail: { error: '녹음이 너무 짧습니다.' }\n })\n )\n // 녹음이 짧을 때도 완료 처리\n this.finishRecording()\n }\n\n this.cleanup()\n }\n\n this.mediaRecorder.onerror = () => {\n this.dispatchEvent(\n new CustomEvent('stt-error', {\n detail: { error: '녹음 오류 발생' }\n })\n )\n this.isRecording = false\n }\n\n this.mediaRecorder.start()\n this.dispatchEvent(\n new CustomEvent('stt-status', {\n detail: { status: '🎙️ Listening...' }\n })\n )\n } catch (error) {\n this.dispatchEvent(\n new CustomEvent('stt-error', {\n detail: { error: `마이크 접근 실패: ${error instanceof Error ? error.message : '알 수 없는 오류'}` }\n })\n )\n this.isRecording = false\n }\n }\n\n /**\n * 음성 인식 중지\n */\n public stopListening() {\n if (this.mediaRecorder && this.mediaRecorder.state !== 'inactive') {\n this.mediaRecorder.stop()\n } else {\n // MediaRecorder가 없거나 이미 중지된 경우 즉시 정리\n this.cleanup()\n this.dispatchEvent(\n new CustomEvent('stt-status', {\n detail: { status: '음성 인식 종료' }\n })\n )\n }\n }\n\n private async processAudio(audioBlob: Blob): Promise<void> {\n this.isProcessing = true\n\n this.dispatchEvent(\n new CustomEvent('stt-status', {\n detail: { status: '🔄 음성을 텍스트로 변환 중...' }\n })\n )\n\n try {\n const reader = new FileReader()\n reader.readAsDataURL(audioBlob)\n\n reader.onloadend = async () => {\n const base64Audio = (reader.result as string).split(',')[1]\n await this.sendToGoogleSpeech(base64Audio)\n }\n\n reader.onerror = () => {\n this.dispatchEvent(\n new CustomEvent('stt-error', {\n detail: { error: '오디오 처리 실패' }\n })\n )\n this.finishRecording()\n }\n } catch (error) {\n this.dispatchEvent(\n new CustomEvent('stt-error', {\n detail: { error: '처리 중 오류 발생' }\n })\n )\n this.finishRecording()\n }\n }\n\n private async sendToGoogleSpeech(base64Audio: string): Promise<void> {\n let encoding = 'WEBM_OPUS'\n let sampleRate = 48000\n\n if (this.mediaRecorder && this.mediaRecorder.mimeType) {\n const mimeType = this.mediaRecorder.mimeType.toLowerCase()\n\n if (mimeType.includes('opus')) {\n encoding = 'WEBM_OPUS'\n } else if (mimeType.includes('webm')) {\n encoding = 'WEBM_OPUS'\n } else if (mimeType.includes('mp4')) {\n encoding = 'MP3'\n } else if (mimeType.includes('wav')) {\n encoding = 'LINEAR16'\n }\n }\n\n const requestBody = {\n config: {\n encoding: encoding,\n sampleRateHertz: sampleRate,\n languageCode: 'ko-KR',\n enableAutomaticPunctuation: true,\n model: 'latest_long',\n useEnhanced: true,\n enableWordTimeOffsets: false,\n enableWordConfidence: false,\n maxAlternatives: 1,\n speechContexts: [\n {\n phrases: [\n '1번',\n '2번',\n '3번',\n '4번',\n '5번',\n '6번',\n '7번',\n '합격',\n '불합격',\n '적합',\n '부적합',\n '기본업무',\n '시공',\n '자재',\n '도서',\n '모두',\n '전체',\n '초기화',\n '조치사항',\n '확인 필요',\n '기본 외 업무',\n '부터',\n '까지'\n ],\n boost: 20\n }\n ]\n },\n audio: {\n content: base64Audio\n }\n }\n\n try {\n const response = await fetch(`https://speech.googleapis.com/v1/speech:recognize?key=${this.apiKey}`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(requestBody)\n })\n\n if (response.ok) {\n const data = await response.json()\n\n if (data.results && data.results.length > 0) {\n const finalTranscript = data.results.map((result: any) => result.alternatives[0].transcript).join(' ')\n\n this.dispatchEvent(\n new CustomEvent('stt-result', {\n detail: {\n finalTranscript: finalTranscript.trim(),\n interimTranscript: ''\n }\n })\n )\n\n this.dispatchEvent(\n new CustomEvent('stt-status', {\n detail: { status: `📝 Recognized: ${finalTranscript}` }\n })\n )\n\n // 음성 인식 완료 후 즉시 완료 처리\n this.finishRecording()\n } else {\n this.dispatchEvent(\n new CustomEvent('stt-result', {\n detail: {\n finalTranscript: '',\n interimTranscript: ''\n }\n })\n )\n\n this.dispatchEvent(\n new CustomEvent('stt-status', {\n detail: { status: '음성을 인식하지 못했습니다.' }\n })\n )\n\n // 인식 실패 시에도 즉시 완료 처리\n this.finishRecording()\n }\n } else {\n const error = await response.text()\n let errorMessage = 'API 오류 발생'\n\n try {\n const errorObj = JSON.parse(error)\n if (errorObj.error && errorObj.error.message) {\n errorMessage = errorObj.error.message\n }\n } catch (e) {\n errorMessage = `HTTP ${response.status}`\n }\n\n this.dispatchEvent(\n new CustomEvent('stt-error', {\n detail: { error: errorMessage }\n })\n )\n\n // API 오류 시에도 즉시 완료 처리\n this.finishRecording()\n }\n } catch (error) {\n this.dispatchEvent(\n new CustomEvent('stt-error', {\n detail: { error: `네트워크 오류: ${error instanceof Error ? error.message : '알 수 없는 오류'}` }\n })\n )\n\n // 네트워크 오류 시에도 즉시 완료 처리\n this.finishRecording()\n }\n }\n\n private finishRecording() {\n this.cleanup()\n\n this.dispatchEvent(\n new CustomEvent('stt-status', {\n detail: { status: '음성 인식 종료' }\n })\n )\n }\n\n private cleanup() {\n // 모든 상태 완전 초기화\n if (this.stream) {\n this.stream.getTracks().forEach(track => {\n track.stop()\n track.enabled = false\n })\n this.stream = null\n }\n\n if (this.mediaRecorder) {\n try {\n if (this.mediaRecorder.state !== 'inactive') {\n this.mediaRecorder.stop()\n }\n } catch (e) {\n // MediaRecorder stop 에러 무시\n }\n this.mediaRecorder = null\n }\n\n this.audioChunks = []\n this.isRecording = false\n this.isProcessing = false\n }\n\n protected render() {\n return null\n }\n}\n"]}
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 한글 숫자 → 아라비아 숫자 변환 맵
|
|
3
|
-
*/
|
|
4
|
-
export declare const hangulDigits: Record<string, string>;
|
|
5
|
-
/**
|
|
6
|
-
* 음성 인식 오인식 보정 맵
|
|
7
|
-
*/
|
|
8
|
-
export declare const misheardMap: Record<string, string>;
|
|
9
|
-
/**
|
|
10
|
-
* 합격/불합격 동의어
|
|
11
|
-
*/
|
|
12
|
-
export declare const passSynonyms: string[];
|
|
13
|
-
export declare const failSynonyms: string[];
|
|
14
|
-
/**
|
|
15
|
-
* 체크리스트 명령 해석 결과 타입
|
|
16
|
-
*/
|
|
17
|
-
export interface ParsedSpeechCommand {
|
|
18
|
-
rowIds: number[];
|
|
19
|
-
isPass: boolean | null;
|
|
20
|
-
actionText?: string;
|
|
21
|
-
raw: string;
|
|
22
|
-
}
|
|
23
|
-
/**
|
|
24
|
-
* 음성 인식 텍스트를 체크리스트 명령으로 해석
|
|
25
|
-
* @param command 음성 인식 결과 텍스트
|
|
26
|
-
* @param checklistLength 체크리스트 항목 개수(번호 범위 제한용)
|
|
27
|
-
*/
|
|
28
|
-
export declare function parseSpeechCommand(command: string, checklistLength?: number): ParsedSpeechCommand;
|
|
@@ -1,146 +0,0 @@
|
|
|
1
|
-
// stt-utils.ts
|
|
2
|
-
// 음성 인식 텍스트를 체크리스트 명령으로 해석하는 유틸리티
|
|
3
|
-
/**
|
|
4
|
-
* 한글 숫자 → 아라비아 숫자 변환 맵
|
|
5
|
-
*/
|
|
6
|
-
export const hangulDigits = {
|
|
7
|
-
일: '1',
|
|
8
|
-
이: '2',
|
|
9
|
-
삼: '3',
|
|
10
|
-
사: '4',
|
|
11
|
-
오: '5',
|
|
12
|
-
육: '6',
|
|
13
|
-
륙: '6',
|
|
14
|
-
칠: '7',
|
|
15
|
-
팔: '8',
|
|
16
|
-
구: '9',
|
|
17
|
-
십: '10',
|
|
18
|
-
십일: '11',
|
|
19
|
-
열하나: '11',
|
|
20
|
-
십이: '12',
|
|
21
|
-
열둘: '12',
|
|
22
|
-
십삼: '13',
|
|
23
|
-
열셋: '13',
|
|
24
|
-
십사: '14',
|
|
25
|
-
열넷: '14',
|
|
26
|
-
십오: '15',
|
|
27
|
-
열다섯: '15',
|
|
28
|
-
십육: '16',
|
|
29
|
-
열여섯: '16',
|
|
30
|
-
십칠: '17',
|
|
31
|
-
열일곱: '17',
|
|
32
|
-
십팔: '18',
|
|
33
|
-
열여덟: '18',
|
|
34
|
-
십구: '19',
|
|
35
|
-
열아홉: '19',
|
|
36
|
-
이십: '20',
|
|
37
|
-
스물: '20'
|
|
38
|
-
};
|
|
39
|
-
/**
|
|
40
|
-
* 음성 인식 오인식 보정 맵
|
|
41
|
-
*/
|
|
42
|
-
export const misheardMap = {
|
|
43
|
-
일번: '1번',
|
|
44
|
-
일본: '1번',
|
|
45
|
-
이번: '2번',
|
|
46
|
-
삼번: '3번',
|
|
47
|
-
사번: '4번',
|
|
48
|
-
오번: '5번',
|
|
49
|
-
육번: '6번',
|
|
50
|
-
륙번: '6번',
|
|
51
|
-
칠번: '7번',
|
|
52
|
-
팔번: '8번',
|
|
53
|
-
구번: '9번',
|
|
54
|
-
십번: '10번',
|
|
55
|
-
십일번: '11번',
|
|
56
|
-
열하나번: '11번',
|
|
57
|
-
십이번: '12번',
|
|
58
|
-
열둘번: '12번',
|
|
59
|
-
십삼번: '13번',
|
|
60
|
-
열셋번: '13번',
|
|
61
|
-
십사번: '14번',
|
|
62
|
-
열넷번: '14번',
|
|
63
|
-
십오번: '15번',
|
|
64
|
-
열다섯번: '15번',
|
|
65
|
-
십육번: '16번',
|
|
66
|
-
열여섯번: '16번',
|
|
67
|
-
십칠번: '17번',
|
|
68
|
-
열일곱번: '17번',
|
|
69
|
-
십팔번: '18번',
|
|
70
|
-
열여덟번: '18번',
|
|
71
|
-
십구번: '19번',
|
|
72
|
-
열아홉번: '19번',
|
|
73
|
-
이십번: '20번',
|
|
74
|
-
스물번: '20번',
|
|
75
|
-
// 추가 보정
|
|
76
|
-
'조치 사항': '조치사항',
|
|
77
|
-
조치상: '조치사항',
|
|
78
|
-
조치: '조치사항',
|
|
79
|
-
자제: '자재'
|
|
80
|
-
};
|
|
81
|
-
/**
|
|
82
|
-
* 합격/불합격 동의어
|
|
83
|
-
*/
|
|
84
|
-
export const passSynonyms = ['합격', 'pass', 'approved', 'okay'];
|
|
85
|
-
export const failSynonyms = ['불합격', 'fail', 'failed'];
|
|
86
|
-
/**
|
|
87
|
-
* 음성 인식 텍스트를 체크리스트 명령으로 해석
|
|
88
|
-
* @param command 음성 인식 결과 텍스트
|
|
89
|
-
* @param checklistLength 체크리스트 항목 개수(번호 범위 제한용)
|
|
90
|
-
*/
|
|
91
|
-
export function parseSpeechCommand(command, checklistLength = 20) {
|
|
92
|
-
let original = command;
|
|
93
|
-
// (A) 하이픈 제거, 오인식 보정
|
|
94
|
-
command = command.replace(/-/g, '');
|
|
95
|
-
for (const [wrong, correct] of Object.entries(misheardMap)) {
|
|
96
|
-
command = command.replace(new RegExp(wrong, 'g'), correct);
|
|
97
|
-
}
|
|
98
|
-
// (B) 한글 숫자 변환
|
|
99
|
-
let tokens = command.split(/\s+/).map(token => {
|
|
100
|
-
if (hangulDigits[token])
|
|
101
|
-
return hangulDigits[token] + '번';
|
|
102
|
-
const m = token.match(/^([일이삼사오육륙칠팔구십])번$/);
|
|
103
|
-
if (m)
|
|
104
|
-
return hangulDigits[m[1]] + '번';
|
|
105
|
-
return token;
|
|
106
|
-
});
|
|
107
|
-
command = tokens.join(' ');
|
|
108
|
-
// (C) 번호 추출
|
|
109
|
-
const rowRegexGlobal = /(\d+)번/g;
|
|
110
|
-
let rowMatches = [...command.matchAll(rowRegexGlobal)];
|
|
111
|
-
let rowIds = [];
|
|
112
|
-
rowMatches.forEach(match => {
|
|
113
|
-
let numStr = match[1];
|
|
114
|
-
let numeric = parseInt(numStr, 10);
|
|
115
|
-
if (numeric >= 1 && numeric <= checklistLength) {
|
|
116
|
-
rowIds.push(numeric);
|
|
117
|
-
}
|
|
118
|
-
});
|
|
119
|
-
// (D) 합격/불합격 여부
|
|
120
|
-
let isPass = null;
|
|
121
|
-
for (let word of passSynonyms) {
|
|
122
|
-
if (command.includes(word)) {
|
|
123
|
-
isPass = true;
|
|
124
|
-
break;
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
for (let word of failSynonyms) {
|
|
128
|
-
if (command.includes(word)) {
|
|
129
|
-
isPass = false;
|
|
130
|
-
break;
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
// (E) 조치사항 텍스트 추출
|
|
134
|
-
let actionText;
|
|
135
|
-
let actionMatch = command.match(/조치사항\s*(.*)/);
|
|
136
|
-
if (actionMatch && actionMatch[1]) {
|
|
137
|
-
actionText = actionMatch[1].trim();
|
|
138
|
-
}
|
|
139
|
-
return {
|
|
140
|
-
rowIds,
|
|
141
|
-
isPass,
|
|
142
|
-
actionText,
|
|
143
|
-
raw: original
|
|
144
|
-
};
|
|
145
|
-
}
|
|
146
|
-
//# sourceMappingURL=stt-utils.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"stt-utils.js","sourceRoot":"","sources":["../../client/stt/stt-utils.ts"],"names":[],"mappings":"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","sourcesContent":["// stt-utils.ts\n// 음성 인식 텍스트를 체크리스트 명령으로 해석하는 유틸리티\n\n/**\n * 한글 숫자 → 아라비아 숫자 변환 맵\n */\nexport const hangulDigits: Record<string, string> = {\n 일: '1',\n 이: '2',\n 삼: '3',\n 사: '4',\n 오: '5',\n 육: '6',\n 륙: '6',\n 칠: '7',\n 팔: '8',\n 구: '9',\n 십: '10',\n 십일: '11',\n 열하나: '11',\n 십이: '12',\n 열둘: '12',\n 십삼: '13',\n 열셋: '13',\n 십사: '14',\n 열넷: '14',\n 십오: '15',\n 열다섯: '15',\n 십육: '16',\n 열여섯: '16',\n 십칠: '17',\n 열일곱: '17',\n 십팔: '18',\n 열여덟: '18',\n 십구: '19',\n 열아홉: '19',\n 이십: '20',\n 스물: '20'\n}\n\n/**\n * 음성 인식 오인식 보정 맵\n */\nexport const misheardMap: Record<string, string> = {\n 일번: '1번',\n 일본: '1번',\n 이번: '2번',\n 삼번: '3번',\n 사번: '4번',\n 오번: '5번',\n 육번: '6번',\n 륙번: '6번',\n 칠번: '7번',\n 팔번: '8번',\n 구번: '9번',\n 십번: '10번',\n 십일번: '11번',\n 열하나번: '11번',\n 십이번: '12번',\n 열둘번: '12번',\n 십삼번: '13번',\n 열셋번: '13번',\n 십사번: '14번',\n 열넷번: '14번',\n 십오번: '15번',\n 열다섯번: '15번',\n 십육번: '16번',\n 열여섯번: '16번',\n 십칠번: '17번',\n 열일곱번: '17번',\n 십팔번: '18번',\n 열여덟번: '18번',\n 십구번: '19번',\n 열아홉번: '19번',\n 이십번: '20번',\n 스물번: '20번',\n // 추가 보정\n '조치 사항': '조치사항',\n 조치상: '조치사항',\n 조치: '조치사항',\n 자제: '자재'\n}\n\n/**\n * 합격/불합격 동의어\n */\nexport const passSynonyms = ['합격', 'pass', 'approved', 'okay']\nexport const failSynonyms = ['불합격', 'fail', 'failed']\n\n/**\n * 체크리스트 명령 해석 결과 타입\n */\nexport interface ParsedSpeechCommand {\n rowIds: number[] // 체크리스트 항목 번호(1,2,3 등)\n isPass: boolean | null // 합격/불합격 여부 (없으면 null)\n actionText?: string // 조치사항 텍스트 (있을 때만)\n raw: string // 원본 텍스트\n}\n\n/**\n * 음성 인식 텍스트를 체크리스트 명령으로 해석\n * @param command 음성 인식 결과 텍스트\n * @param checklistLength 체크리스트 항목 개수(번호 범위 제한용)\n */\nexport function parseSpeechCommand(command: string, checklistLength = 20): ParsedSpeechCommand {\n let original = command\n\n // (A) 하이픈 제거, 오인식 보정\n command = command.replace(/-/g, '')\n for (const [wrong, correct] of Object.entries(misheardMap)) {\n command = command.replace(new RegExp(wrong, 'g'), correct)\n }\n\n // (B) 한글 숫자 변환\n let tokens = command.split(/\\s+/).map(token => {\n if (hangulDigits[token]) return hangulDigits[token] + '번'\n const m = token.match(/^([일이삼사오육륙칠팔구십])번$/)\n if (m) return hangulDigits[m[1]] + '번'\n return token\n })\n command = tokens.join(' ')\n\n // (C) 번호 추출\n const rowRegexGlobal = /(\\d+)번/g\n let rowMatches = [...command.matchAll(rowRegexGlobal)]\n let rowIds: number[] = []\n rowMatches.forEach(match => {\n let numStr = match[1]\n let numeric = parseInt(numStr, 10)\n if (numeric >= 1 && numeric <= checklistLength) {\n rowIds.push(numeric)\n }\n })\n\n // (D) 합격/불합격 여부\n let isPass: boolean | null = null\n for (let word of passSynonyms) {\n if (command.includes(word)) {\n isPass = true\n break\n }\n }\n for (let word of failSynonyms) {\n if (command.includes(word)) {\n isPass = false\n break\n }\n }\n\n // (E) 조치사항 텍스트 추출\n let actionText: string | undefined\n let actionMatch = command.match(/조치사항\\s*(.*)/)\n if (actionMatch && actionMatch[1]) {\n actionText = actionMatch[1].trim()\n }\n\n return {\n rowIds,\n isPass,\n actionText,\n raw: original\n }\n}\n"]}
|