@sk8metal/michi-cli 0.14.1 → 0.19.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/CHANGELOG.md +268 -2
- package/README.md +27 -2
- package/dist/scripts/config/config-schema.d.ts +5 -333
- package/dist/scripts/config/config-schema.d.ts.map +1 -1
- package/dist/scripts/config/config-schema.js +6 -233
- package/dist/scripts/config/config-schema.js.map +1 -1
- package/dist/scripts/config-global.d.ts.map +1 -1
- package/dist/scripts/config-global.js +3 -2
- package/dist/scripts/config-global.js.map +1 -1
- package/dist/scripts/confluence-sync.d.ts +5 -73
- package/dist/scripts/confluence-sync.d.ts.map +1 -1
- package/dist/scripts/confluence-sync.js +14 -392
- package/dist/scripts/confluence-sync.js.map +1 -1
- package/dist/scripts/constants/environments.d.ts +3 -30
- package/dist/scripts/constants/environments.d.ts.map +1 -1
- package/dist/scripts/constants/environments.js +3 -41
- package/dist/scripts/constants/environments.js.map +1 -1
- package/dist/scripts/constants/languages.d.ts +3 -20
- package/dist/scripts/constants/languages.d.ts.map +1 -1
- package/dist/scripts/constants/languages.js +3 -50
- package/dist/scripts/constants/languages.js.map +1 -1
- package/dist/scripts/constants/test-commands.d.ts +3 -33
- package/dist/scripts/constants/test-commands.d.ts.map +1 -1
- package/dist/scripts/constants/test-commands.js +3 -67
- package/dist/scripts/constants/test-commands.js.map +1 -1
- package/dist/scripts/dev-tools/mermaid-converter.d.ts.map +1 -0
- package/dist/scripts/dev-tools/mermaid-converter.js.map +1 -0
- package/dist/scripts/dev-tools/test-interactive.d.ts.map +1 -0
- package/dist/scripts/{test-interactive.js → dev-tools/test-interactive.js} +4 -3
- package/dist/scripts/dev-tools/test-interactive.js.map +1 -0
- package/dist/scripts/github-actions-client.d.ts +5 -75
- package/dist/scripts/github-actions-client.d.ts.map +1 -1
- package/dist/scripts/github-actions-client.js +4 -178
- package/dist/scripts/github-actions-client.js.map +1 -1
- package/dist/scripts/jira-sync.d.ts +3 -121
- package/dist/scripts/jira-sync.d.ts.map +1 -1
- package/dist/scripts/jira-sync.js +5 -879
- package/dist/scripts/jira-sync.js.map +1 -1
- package/dist/scripts/markdown-to-confluence.d.ts.map +1 -1
- package/dist/scripts/markdown-to-confluence.js +2 -2
- package/dist/scripts/markdown-to-confluence.js.map +1 -1
- package/dist/scripts/multi-project-estimate.d.ts.map +1 -1
- package/dist/scripts/multi-project-estimate.js +3 -2
- package/dist/scripts/multi-project-estimate.js.map +1 -1
- package/dist/scripts/phase-runner.d.ts.map +1 -1
- package/dist/scripts/phase-runner.js +34 -18
- package/dist/scripts/phase-runner.js.map +1 -1
- package/dist/scripts/pre-flight-check.d.ts.map +1 -1
- package/dist/scripts/pre-flight-check.js +27 -11
- package/dist/scripts/pre-flight-check.js.map +1 -1
- package/dist/scripts/template/multi-repo-renderer.js +2 -2
- package/dist/scripts/template/multi-repo-renderer.js.map +1 -1
- package/dist/scripts/test-execution-generator.d.ts.map +1 -1
- package/dist/scripts/test-execution-generator.js +5 -4
- package/dist/scripts/test-execution-generator.js.map +1 -1
- package/dist/scripts/utils/aidlc-parser.d.ts +5 -82
- package/dist/scripts/utils/aidlc-parser.d.ts.map +1 -1
- package/dist/scripts/utils/aidlc-parser.js +4 -204
- package/dist/scripts/utils/aidlc-parser.js.map +1 -1
- package/dist/scripts/utils/ci-generator.d.ts.map +1 -1
- package/dist/scripts/utils/ci-generator.js +4 -3
- package/dist/scripts/utils/ci-generator.js.map +1 -1
- package/dist/scripts/utils/config-loader.d.ts.map +1 -1
- package/dist/scripts/utils/config-loader.js +46 -49
- package/dist/scripts/utils/config-loader.js.map +1 -1
- package/dist/scripts/utils/config-validator.d.ts +9 -10
- package/dist/scripts/utils/config-validator.d.ts.map +1 -1
- package/dist/scripts/utils/config-validator.js +68 -70
- package/dist/scripts/utils/config-validator.js.map +1 -1
- package/dist/scripts/utils/docker-requirement-detector.d.ts.map +1 -1
- package/dist/scripts/utils/docker-requirement-detector.js +5 -4
- package/dist/scripts/utils/docker-requirement-detector.js.map +1 -1
- package/dist/scripts/utils/env-config.d.ts.map +1 -1
- package/dist/scripts/utils/env-config.js +55 -38
- package/dist/scripts/utils/env-config.js.map +1 -1
- package/dist/scripts/utils/feature-name-validator.d.ts +4 -9
- package/dist/scripts/utils/feature-name-validator.d.ts.map +1 -1
- package/dist/scripts/utils/feature-name-validator.js +12 -21
- package/dist/scripts/utils/feature-name-validator.js.map +1 -1
- package/dist/scripts/utils/interactive-helpers.d.ts +5 -29
- package/dist/scripts/utils/interactive-helpers.d.ts.map +1 -1
- package/dist/scripts/utils/interactive-helpers.js +5 -89
- package/dist/scripts/utils/interactive-helpers.js.map +1 -1
- package/dist/scripts/utils/language-detector.d.ts.map +1 -1
- package/dist/scripts/utils/language-detector.js +4 -3
- package/dist/scripts/utils/language-detector.js.map +1 -1
- package/dist/scripts/utils/markdown-parser.d.ts +6 -52
- package/dist/scripts/utils/markdown-parser.d.ts.map +1 -1
- package/dist/scripts/utils/markdown-parser.js +5 -286
- package/dist/scripts/utils/markdown-parser.js.map +1 -1
- package/dist/scripts/utils/multi-repo-validator.d.ts +9 -10
- package/dist/scripts/utils/multi-repo-validator.d.ts.map +1 -1
- package/dist/scripts/utils/multi-repo-validator.js +15 -17
- package/dist/scripts/utils/multi-repo-validator.js.map +1 -1
- package/dist/scripts/utils/project-analyzer.d.ts +120 -0
- package/dist/scripts/utils/project-analyzer.d.ts.map +1 -0
- package/dist/scripts/utils/project-analyzer.js +358 -0
- package/dist/scripts/utils/project-analyzer.js.map +1 -0
- package/dist/scripts/utils/project-detector.d.ts.map +1 -1
- package/dist/scripts/utils/project-detector.js +6 -5
- package/dist/scripts/utils/project-detector.js.map +1 -1
- package/dist/scripts/utils/project-finder.d.ts +1 -21
- package/dist/scripts/utils/project-finder.d.ts.map +1 -1
- package/dist/scripts/utils/project-finder.js +2 -121
- package/dist/scripts/utils/project-finder.js.map +1 -1
- package/dist/scripts/utils/project-meta.d.ts +4 -27
- package/dist/scripts/utils/project-meta.d.ts.map +1 -1
- package/dist/scripts/utils/project-meta.js +3 -67
- package/dist/scripts/utils/project-meta.js.map +1 -1
- package/dist/scripts/utils/safe-file-reader.d.ts +84 -0
- package/dist/scripts/utils/safe-file-reader.d.ts.map +1 -0
- package/dist/scripts/utils/safe-file-reader.js +122 -0
- package/dist/scripts/utils/safe-file-reader.js.map +1 -0
- package/dist/scripts/utils/security-validator.d.ts +8 -19
- package/dist/scripts/utils/security-validator.d.ts.map +1 -1
- package/dist/scripts/utils/security-validator.js +28 -58
- package/dist/scripts/utils/security-validator.js.map +1 -1
- package/dist/scripts/utils/spec-archiver.d.ts.map +1 -1
- package/dist/scripts/utils/spec-archiver.js +7 -6
- package/dist/scripts/utils/spec-archiver.js.map +1 -1
- package/dist/scripts/utils/spec-updater.d.ts.map +1 -1
- package/dist/scripts/utils/spec-updater.js +10 -7
- package/dist/scripts/utils/spec-updater.js.map +1 -1
- package/dist/scripts/utils/tasks-converter.js +2 -2
- package/dist/scripts/utils/tasks-converter.js.map +1 -1
- package/dist/scripts/utils/tasks-format-validator.js +4 -4
- package/dist/scripts/utils/tasks-format-validator.js.map +1 -1
- package/dist/scripts/utils/template-applier.d.ts.map +1 -1
- package/dist/scripts/utils/template-applier.js +4 -3
- package/dist/scripts/utils/template-applier.js.map +1 -1
- package/dist/scripts/utils/types/validation.d.ts +57 -0
- package/dist/scripts/utils/types/validation.d.ts.map +1 -0
- package/dist/scripts/utils/types/validation.js +50 -0
- package/dist/scripts/utils/types/validation.js.map +1 -0
- package/dist/scripts/validate-phase.d.ts +6 -1
- package/dist/scripts/validate-phase.d.ts.map +1 -1
- package/dist/scripts/validate-phase.js +42 -20
- package/dist/scripts/validate-phase.js.map +1 -1
- package/dist/scripts/workflow-orchestrator.d.ts +4 -40
- package/dist/scripts/workflow-orchestrator.d.ts.map +1 -1
- package/dist/scripts/workflow-orchestrator.js +7 -194
- package/dist/scripts/workflow-orchestrator.js.map +1 -1
- package/dist/src/application/interfaces/config-provider.d.ts +89 -0
- package/dist/src/application/interfaces/config-provider.d.ts.map +1 -0
- package/dist/src/application/interfaces/config-provider.js +8 -0
- package/dist/src/application/interfaces/config-provider.js.map +1 -0
- package/dist/src/application/interfaces/external-api.d.ts +80 -0
- package/dist/src/application/interfaces/external-api.d.ts.map +1 -0
- package/dist/src/application/interfaces/external-api.js +8 -0
- package/dist/src/application/interfaces/external-api.js.map +1 -0
- package/dist/src/application/interfaces/spec-repository.d.ts +52 -0
- package/dist/src/application/interfaces/spec-repository.d.ts.map +1 -0
- package/dist/src/application/interfaces/spec-repository.js +8 -0
- package/dist/src/application/interfaces/spec-repository.js.map +1 -0
- package/dist/src/application/services/spec-service.d.ts +49 -0
- package/dist/src/application/services/spec-service.d.ts.map +1 -0
- package/dist/src/application/services/spec-service.js +94 -0
- package/dist/src/application/services/spec-service.js.map +1 -0
- package/dist/src/application/services/workflow-service.d.ts +58 -0
- package/dist/src/application/services/workflow-service.d.ts.map +1 -0
- package/dist/src/application/services/workflow-service.js +125 -0
- package/dist/src/application/services/workflow-service.js.map +1 -0
- package/dist/src/application/templates/processor.d.ts +31 -0
- package/dist/src/application/templates/processor.d.ts.map +1 -0
- package/dist/src/application/templates/processor.js +58 -0
- package/dist/src/application/templates/processor.js.map +1 -0
- package/dist/src/application/use-cases/spec/archive-spec.d.ts +34 -0
- package/dist/src/application/use-cases/spec/archive-spec.d.ts.map +1 -0
- package/dist/src/application/use-cases/spec/archive-spec.js +56 -0
- package/dist/src/application/use-cases/spec/archive-spec.js.map +1 -0
- package/dist/src/application/use-cases/spec/generate-design.d.ts +34 -0
- package/dist/src/application/use-cases/spec/generate-design.d.ts.map +1 -0
- package/dist/src/application/use-cases/spec/generate-design.js +58 -0
- package/dist/src/application/use-cases/spec/generate-design.js.map +1 -0
- package/dist/src/application/use-cases/spec/generate-requirements.d.ts +34 -0
- package/dist/src/application/use-cases/spec/generate-requirements.d.ts.map +1 -0
- package/dist/src/application/use-cases/spec/generate-requirements.js +58 -0
- package/dist/src/application/use-cases/spec/generate-requirements.js.map +1 -0
- package/dist/src/application/use-cases/spec/generate-tasks.d.ts +34 -0
- package/dist/src/application/use-cases/spec/generate-tasks.d.ts.map +1 -0
- package/dist/src/application/use-cases/spec/generate-tasks.js +58 -0
- package/dist/src/application/use-cases/spec/generate-tasks.js.map +1 -0
- package/dist/src/application/use-cases/spec/init-spec.d.ts +48 -0
- package/dist/src/application/use-cases/spec/init-spec.d.ts.map +1 -0
- package/dist/src/application/use-cases/spec/init-spec.js +121 -0
- package/dist/src/application/use-cases/spec/init-spec.js.map +1 -0
- package/dist/src/cli.d.ts +6 -7
- package/dist/src/cli.d.ts.map +1 -1
- package/dist/src/cli.js +6 -745
- package/dist/src/cli.js.map +1 -1
- package/dist/src/commands/config-validate.js +2 -2
- package/dist/src/commands/init.d.ts +6 -21
- package/dist/src/commands/init.d.ts.map +1 -1
- package/dist/src/commands/init.js +5 -508
- package/dist/src/commands/init.js.map +1 -1
- package/dist/src/commands/migrate.js +4 -3
- package/dist/src/commands/migrate.js.map +1 -1
- package/dist/src/commands/spec-archive.d.ts +6 -13
- package/dist/src/commands/spec-archive.d.ts.map +1 -1
- package/dist/src/commands/spec-archive.js +5 -36
- package/dist/src/commands/spec-archive.js.map +1 -1
- package/dist/src/commands/spec-list.d.ts +6 -11
- package/dist/src/commands/spec-list.d.ts.map +1 -1
- package/dist/src/commands/spec-list.js +5 -51
- package/dist/src/commands/spec-list.js.map +1 -1
- package/dist/src/domain/constants/approval.d.ts +18 -0
- package/dist/src/domain/constants/approval.d.ts.map +1 -0
- package/dist/src/domain/constants/approval.js +23 -0
- package/dist/src/domain/constants/approval.js.map +1 -0
- package/dist/src/domain/constants/environments.d.ts +33 -0
- package/dist/src/domain/constants/environments.d.ts.map +1 -0
- package/dist/src/domain/constants/environments.js +44 -0
- package/dist/src/domain/constants/environments.js.map +1 -0
- package/dist/src/domain/constants/index.d.ts +12 -0
- package/dist/src/domain/constants/index.d.ts.map +1 -0
- package/dist/src/domain/constants/index.js +18 -0
- package/dist/src/domain/constants/index.js.map +1 -0
- package/dist/src/domain/constants/languages.d.ts +23 -0
- package/dist/src/domain/constants/languages.d.ts.map +1 -0
- package/dist/src/domain/constants/languages.js +53 -0
- package/dist/src/domain/constants/languages.js.map +1 -0
- package/dist/src/domain/constants/phases.d.ts +32 -0
- package/dist/src/domain/constants/phases.d.ts.map +1 -0
- package/dist/src/domain/constants/phases.js +52 -0
- package/dist/src/domain/constants/phases.js.map +1 -0
- package/dist/src/domain/constants/test-commands.d.ts +36 -0
- package/dist/src/domain/constants/test-commands.d.ts.map +1 -0
- package/dist/src/domain/constants/test-commands.js +70 -0
- package/dist/src/domain/constants/test-commands.js.map +1 -0
- package/dist/src/domain/constants/validation-rules.d.ts +32 -0
- package/dist/src/domain/constants/validation-rules.d.ts.map +1 -0
- package/dist/src/domain/constants/validation-rules.js +51 -0
- package/dist/src/domain/constants/validation-rules.js.map +1 -0
- package/dist/src/domain/entities/spec.d.ts +66 -0
- package/dist/src/domain/entities/spec.d.ts.map +1 -0
- package/dist/src/domain/entities/spec.js +112 -0
- package/dist/src/domain/entities/spec.js.map +1 -0
- package/dist/src/domain/entities/task.d.ts +43 -0
- package/dist/src/domain/entities/task.d.ts.map +1 -0
- package/dist/src/domain/entities/task.js +65 -0
- package/dist/src/domain/entities/task.js.map +1 -0
- package/dist/src/domain/services/spec-validator.d.ts +46 -0
- package/dist/src/domain/services/spec-validator.d.ts.map +1 -0
- package/dist/src/domain/services/spec-validator.js +99 -0
- package/dist/src/domain/services/spec-validator.js.map +1 -0
- package/dist/src/domain/value-objects/feature-name.d.ts +24 -0
- package/dist/src/domain/value-objects/feature-name.d.ts.map +1 -0
- package/dist/src/domain/value-objects/feature-name.js +36 -0
- package/dist/src/domain/value-objects/feature-name.js.map +1 -0
- package/dist/src/domain/value-objects/index.d.ts +7 -0
- package/dist/src/domain/value-objects/index.d.ts.map +1 -0
- package/dist/src/domain/value-objects/index.js +7 -0
- package/dist/src/domain/value-objects/index.js.map +1 -0
- package/dist/src/infrastructure/config/index.d.ts +5 -0
- package/dist/src/infrastructure/config/index.d.ts.map +1 -0
- package/dist/src/infrastructure/config/index.js +6 -0
- package/dist/src/infrastructure/config/index.js.map +1 -0
- package/dist/src/infrastructure/config/schema.d.ts +337 -0
- package/dist/src/infrastructure/config/schema.d.ts.map +1 -0
- package/dist/src/infrastructure/config/schema.js +237 -0
- package/dist/src/infrastructure/config/schema.js.map +1 -0
- package/dist/src/infrastructure/external-apis/atlassian/confluence/approval.d.ts +14 -0
- package/dist/src/infrastructure/external-apis/atlassian/confluence/approval.d.ts.map +1 -0
- package/dist/src/infrastructure/external-apis/atlassian/confluence/approval.js +102 -0
- package/dist/src/infrastructure/external-apis/atlassian/confluence/approval.js.map +1 -0
- package/dist/src/infrastructure/external-apis/atlassian/confluence/client.d.ts +23 -0
- package/dist/src/infrastructure/external-apis/atlassian/confluence/client.d.ts.map +1 -0
- package/dist/src/infrastructure/external-apis/atlassian/confluence/client.js +192 -0
- package/dist/src/infrastructure/external-apis/atlassian/confluence/client.js.map +1 -0
- package/dist/src/infrastructure/external-apis/atlassian/confluence/hierarchy.d.ts +48 -0
- package/dist/src/infrastructure/external-apis/atlassian/confluence/hierarchy.d.ts.map +1 -0
- package/dist/src/infrastructure/external-apis/atlassian/confluence/hierarchy.js +531 -0
- package/dist/src/infrastructure/external-apis/atlassian/confluence/hierarchy.js.map +1 -0
- package/dist/src/infrastructure/external-apis/atlassian/confluence/index.d.ts +10 -0
- package/dist/src/infrastructure/external-apis/atlassian/confluence/index.d.ts.map +1 -0
- package/dist/src/infrastructure/external-apis/atlassian/confluence/index.js +12 -0
- package/dist/src/infrastructure/external-apis/atlassian/confluence/index.js.map +1 -0
- package/dist/src/infrastructure/external-apis/atlassian/confluence/sync-service.d.ts +13 -0
- package/dist/src/infrastructure/external-apis/atlassian/confluence/sync-service.d.ts.map +1 -0
- package/dist/src/infrastructure/external-apis/atlassian/confluence/sync-service.js +129 -0
- package/dist/src/infrastructure/external-apis/atlassian/confluence/sync-service.js.map +1 -0
- package/dist/src/infrastructure/external-apis/atlassian/confluence/types.d.ts +113 -0
- package/dist/src/infrastructure/external-apis/atlassian/confluence/types.d.ts.map +1 -0
- package/dist/src/infrastructure/external-apis/atlassian/confluence/types.js +5 -0
- package/dist/src/infrastructure/external-apis/atlassian/confluence/types.js.map +1 -0
- package/dist/src/infrastructure/external-apis/atlassian/jira/adf-converter.d.ts +15 -0
- package/dist/src/infrastructure/external-apis/atlassian/jira/adf-converter.d.ts.map +1 -0
- package/dist/src/infrastructure/external-apis/atlassian/jira/adf-converter.js +141 -0
- package/dist/src/infrastructure/external-apis/atlassian/jira/adf-converter.js.map +1 -0
- package/dist/src/infrastructure/external-apis/atlassian/jira/client.d.ts +50 -0
- package/dist/src/infrastructure/external-apis/atlassian/jira/client.d.ts.map +1 -0
- package/dist/src/infrastructure/external-apis/atlassian/jira/client.js +226 -0
- package/dist/src/infrastructure/external-apis/atlassian/jira/client.js.map +1 -0
- package/dist/src/infrastructure/external-apis/atlassian/jira/index.d.ts +12 -0
- package/dist/src/infrastructure/external-apis/atlassian/jira/index.d.ts.map +1 -0
- package/dist/src/infrastructure/external-apis/atlassian/jira/index.js +16 -0
- package/dist/src/infrastructure/external-apis/atlassian/jira/index.js.map +1 -0
- package/dist/src/infrastructure/external-apis/atlassian/jira/issue-builder.d.ts +49 -0
- package/dist/src/infrastructure/external-apis/atlassian/jira/issue-builder.d.ts.map +1 -0
- package/dist/src/infrastructure/external-apis/atlassian/jira/issue-builder.js +165 -0
- package/dist/src/infrastructure/external-apis/atlassian/jira/issue-builder.js.map +1 -0
- package/dist/src/infrastructure/external-apis/atlassian/jira/status-mapper.d.ts +14 -0
- package/dist/src/infrastructure/external-apis/atlassian/jira/status-mapper.d.ts.map +1 -0
- package/dist/src/infrastructure/external-apis/atlassian/jira/status-mapper.js +110 -0
- package/dist/src/infrastructure/external-apis/atlassian/jira/status-mapper.js.map +1 -0
- package/dist/src/infrastructure/external-apis/atlassian/jira/sync-service.d.ts +32 -0
- package/dist/src/infrastructure/external-apis/atlassian/jira/sync-service.d.ts.map +1 -0
- package/dist/src/infrastructure/external-apis/atlassian/jira/sync-service.js +284 -0
- package/dist/src/infrastructure/external-apis/atlassian/jira/sync-service.js.map +1 -0
- package/dist/src/infrastructure/external-apis/atlassian/jira/types.d.ts +114 -0
- package/dist/src/infrastructure/external-apis/atlassian/jira/types.d.ts.map +1 -0
- package/dist/src/infrastructure/external-apis/atlassian/jira/types.js +7 -0
- package/dist/src/infrastructure/external-apis/atlassian/jira/types.js.map +1 -0
- package/dist/src/infrastructure/external-apis/github/client.d.ts +25 -0
- package/dist/src/infrastructure/external-apis/github/client.d.ts.map +1 -0
- package/dist/src/infrastructure/external-apis/github/client.js +109 -0
- package/dist/src/infrastructure/external-apis/github/client.js.map +1 -0
- package/dist/src/infrastructure/external-apis/github/index.d.ts +7 -0
- package/dist/src/infrastructure/external-apis/github/index.d.ts.map +1 -0
- package/dist/src/infrastructure/external-apis/github/index.js +8 -0
- package/dist/src/infrastructure/external-apis/github/index.js.map +1 -0
- package/dist/src/infrastructure/external-apis/github/types.d.ts +69 -0
- package/dist/src/infrastructure/external-apis/github/types.d.ts.map +1 -0
- package/dist/src/infrastructure/external-apis/github/types.js +5 -0
- package/dist/src/infrastructure/external-apis/github/types.js.map +1 -0
- package/dist/src/infrastructure/external-apis/github/utils.d.ts +18 -0
- package/dist/src/infrastructure/external-apis/github/utils.d.ts.map +1 -0
- package/dist/src/infrastructure/external-apis/github/utils.js +84 -0
- package/dist/src/infrastructure/external-apis/github/utils.js.map +1 -0
- package/dist/src/infrastructure/filesystem/index.d.ts +6 -0
- package/dist/src/infrastructure/filesystem/index.d.ts.map +1 -0
- package/dist/src/infrastructure/filesystem/index.js +5 -0
- package/dist/src/infrastructure/filesystem/index.js.map +1 -0
- package/dist/src/infrastructure/filesystem/project-meta.d.ts +32 -0
- package/dist/src/infrastructure/filesystem/project-meta.d.ts.map +1 -0
- package/dist/src/infrastructure/filesystem/project-meta.js +75 -0
- package/dist/src/infrastructure/filesystem/project-meta.js.map +1 -0
- package/dist/src/infrastructure/parsers/aidlc-parser.d.ts +86 -0
- package/dist/src/infrastructure/parsers/aidlc-parser.d.ts.map +1 -0
- package/dist/src/infrastructure/parsers/aidlc-parser.js +208 -0
- package/dist/src/infrastructure/parsers/aidlc-parser.js.map +1 -0
- package/dist/src/infrastructure/parsers/index.d.ts +8 -0
- package/dist/src/infrastructure/parsers/index.d.ts.map +1 -0
- package/dist/src/infrastructure/parsers/index.js +6 -0
- package/dist/src/infrastructure/parsers/index.js.map +1 -0
- package/dist/src/infrastructure/parsers/markdown-parser.d.ts +51 -0
- package/dist/src/infrastructure/parsers/markdown-parser.d.ts.map +1 -0
- package/dist/src/infrastructure/parsers/markdown-parser.js +253 -0
- package/dist/src/infrastructure/parsers/markdown-parser.js.map +1 -0
- package/dist/src/presentation/cli/config.d.ts +12 -0
- package/dist/src/presentation/cli/config.d.ts.map +1 -0
- package/dist/src/presentation/cli/config.js +22 -0
- package/dist/src/presentation/cli/config.js.map +1 -0
- package/dist/src/presentation/cli/version.d.ts +10 -0
- package/dist/src/presentation/cli/version.d.ts.map +1 -0
- package/dist/src/presentation/cli/version.js +41 -0
- package/dist/src/presentation/cli/version.js.map +1 -0
- package/dist/src/presentation/cli.d.ts +22 -0
- package/dist/src/presentation/cli.d.ts.map +1 -0
- package/dist/src/presentation/cli.js +85 -0
- package/dist/src/presentation/cli.js.map +1 -0
- package/dist/src/presentation/commands/config/register.d.ts +11 -0
- package/dist/src/presentation/commands/config/register.d.ts.map +1 -0
- package/dist/src/presentation/commands/config/register.js +44 -0
- package/dist/src/presentation/commands/config/register.js.map +1 -0
- package/dist/src/presentation/commands/confluence/register.d.ts +11 -0
- package/dist/src/presentation/commands/confluence/register.d.ts.map +1 -0
- package/dist/src/presentation/commands/confluence/register.js +32 -0
- package/dist/src/presentation/commands/confluence/register.js.map +1 -0
- package/dist/src/presentation/commands/confluence/sync.d.ts +17 -0
- package/dist/src/presentation/commands/confluence/sync.d.ts.map +1 -0
- package/dist/src/presentation/commands/confluence/sync.js +25 -0
- package/dist/src/presentation/commands/confluence/sync.js.map +1 -0
- package/dist/src/presentation/commands/init/handler.d.ts +10 -0
- package/dist/src/presentation/commands/init/handler.d.ts.map +1 -0
- package/dist/src/presentation/commands/init/handler.js +64 -0
- package/dist/src/presentation/commands/init/handler.js.map +1 -0
- package/dist/src/presentation/commands/init/prompts.d.ts +41 -0
- package/dist/src/presentation/commands/init/prompts.d.ts.map +1 -0
- package/dist/src/presentation/commands/init/prompts.js +119 -0
- package/dist/src/presentation/commands/init/prompts.js.map +1 -0
- package/dist/src/presentation/commands/init/register.d.ts +11 -0
- package/dist/src/presentation/commands/init/register.d.ts.map +1 -0
- package/dist/src/presentation/commands/init/register.js +141 -0
- package/dist/src/presentation/commands/init/register.js.map +1 -0
- package/dist/src/presentation/commands/init/setup.d.ts +26 -0
- package/dist/src/presentation/commands/init/setup.d.ts.map +1 -0
- package/dist/src/presentation/commands/init/setup.js +196 -0
- package/dist/src/presentation/commands/init/setup.js.map +1 -0
- package/dist/src/presentation/commands/init/templates.d.ts +19 -0
- package/dist/src/presentation/commands/init/templates.d.ts.map +1 -0
- package/dist/src/presentation/commands/init/templates.js +140 -0
- package/dist/src/presentation/commands/init/templates.js.map +1 -0
- package/dist/src/presentation/commands/init/validation.d.ts +21 -0
- package/dist/src/presentation/commands/init/validation.d.ts.map +1 -0
- package/dist/src/presentation/commands/init/validation.js +65 -0
- package/dist/src/presentation/commands/init/validation.js.map +1 -0
- package/dist/src/presentation/commands/jira/register.d.ts +11 -0
- package/dist/src/presentation/commands/jira/register.d.ts.map +1 -0
- package/dist/src/presentation/commands/jira/register.js +75 -0
- package/dist/src/presentation/commands/jira/register.js.map +1 -0
- package/dist/src/presentation/commands/jira/sync.d.ts +29 -0
- package/dist/src/presentation/commands/jira/sync.d.ts.map +1 -0
- package/dist/src/presentation/commands/jira/sync.js +37 -0
- package/dist/src/presentation/commands/jira/sync.js.map +1 -0
- package/dist/src/{commands/multi-repo-add-repo.d.ts → presentation/commands/multi-repo/add-repo.d.ts} +1 -1
- package/dist/src/presentation/commands/multi-repo/add-repo.d.ts.map +1 -0
- package/dist/src/{commands/multi-repo-add-repo.js → presentation/commands/multi-repo/add-repo.js} +4 -4
- package/dist/src/presentation/commands/multi-repo/add-repo.js.map +1 -0
- package/dist/src/{commands/multi-repo-ci-status.d.ts → presentation/commands/multi-repo/ci-status.d.ts} +2 -2
- package/dist/src/presentation/commands/multi-repo/ci-status.d.ts.map +1 -0
- package/dist/src/{commands/multi-repo-ci-status.js → presentation/commands/multi-repo/ci-status.js} +95 -81
- package/dist/src/presentation/commands/multi-repo/ci-status.js.map +1 -0
- package/dist/src/{commands/multi-repo-confluence-sync.d.ts → presentation/commands/multi-repo/confluence-sync.d.ts} +1 -1
- package/dist/src/presentation/commands/multi-repo/confluence-sync.d.ts.map +1 -0
- package/dist/src/{commands/multi-repo-confluence-sync.js → presentation/commands/multi-repo/confluence-sync.js} +7 -6
- package/dist/src/presentation/commands/multi-repo/confluence-sync.js.map +1 -0
- package/dist/src/{commands/multi-repo-init.d.ts → presentation/commands/multi-repo/init.d.ts} +1 -1
- package/dist/src/presentation/commands/multi-repo/init.d.ts.map +1 -0
- package/dist/src/{commands/multi-repo-init.js → presentation/commands/multi-repo/init.js} +6 -6
- package/dist/src/presentation/commands/multi-repo/init.js.map +1 -0
- package/dist/src/{commands/multi-repo-list.d.ts → presentation/commands/multi-repo/list.d.ts} +1 -1
- package/dist/src/presentation/commands/multi-repo/list.d.ts.map +1 -0
- package/dist/src/{commands/multi-repo-list.js → presentation/commands/multi-repo/list.js} +2 -2
- package/dist/src/presentation/commands/multi-repo/list.js.map +1 -0
- package/dist/src/presentation/commands/multi-repo/register.d.ts +12 -0
- package/dist/src/presentation/commands/multi-repo/register.d.ts.map +1 -0
- package/dist/src/presentation/commands/multi-repo/register.js +249 -0
- package/dist/src/presentation/commands/multi-repo/register.js.map +1 -0
- package/dist/src/{commands/multi-repo-test.d.ts → presentation/commands/multi-repo/test.d.ts} +1 -1
- package/dist/src/presentation/commands/multi-repo/test.d.ts.map +1 -0
- package/dist/src/{commands/multi-repo-test.js → presentation/commands/multi-repo/test.js} +4 -4
- package/dist/src/presentation/commands/multi-repo/test.js.map +1 -0
- package/dist/src/presentation/commands/phase/register.d.ts +11 -0
- package/dist/src/presentation/commands/phase/register.d.ts.map +1 -0
- package/dist/src/presentation/commands/phase/register.js +97 -0
- package/dist/src/presentation/commands/phase/register.js.map +1 -0
- package/dist/src/presentation/commands/spec/archive.d.ts +17 -0
- package/dist/src/presentation/commands/spec/archive.d.ts.map +1 -0
- package/dist/src/presentation/commands/spec/archive.js +40 -0
- package/dist/src/presentation/commands/spec/archive.js.map +1 -0
- package/dist/src/presentation/commands/spec/list.d.ts +15 -0
- package/dist/src/presentation/commands/spec/list.d.ts.map +1 -0
- package/dist/src/presentation/commands/spec/list.js +55 -0
- package/dist/src/presentation/commands/spec/list.js.map +1 -0
- package/dist/src/presentation/commands/spec/register.d.ts +11 -0
- package/dist/src/presentation/commands/spec/register.d.ts.map +1 -0
- package/dist/src/presentation/commands/spec/register.js +45 -0
- package/dist/src/presentation/commands/spec/register.js.map +1 -0
- package/dist/src/presentation/commands/workflow/orchestrator.d.ts +50 -0
- package/dist/src/presentation/commands/workflow/orchestrator.d.ts.map +1 -0
- package/dist/src/presentation/commands/workflow/orchestrator.js +174 -0
- package/dist/src/presentation/commands/workflow/orchestrator.js.map +1 -0
- package/dist/src/presentation/commands/workflow/register.d.ts +11 -0
- package/dist/src/presentation/commands/workflow/register.d.ts.map +1 -0
- package/dist/src/presentation/commands/workflow/register.js +58 -0
- package/dist/src/presentation/commands/workflow/register.js.map +1 -0
- package/dist/src/presentation/formatters/error-formatter.d.ts +79 -0
- package/dist/src/presentation/formatters/error-formatter.d.ts.map +1 -0
- package/dist/src/presentation/formatters/error-formatter.js +150 -0
- package/dist/src/presentation/formatters/error-formatter.js.map +1 -0
- package/dist/src/presentation/formatters/index.d.ts +8 -0
- package/dist/src/presentation/formatters/index.d.ts.map +1 -0
- package/dist/src/presentation/formatters/index.js +11 -0
- package/dist/src/presentation/formatters/index.js.map +1 -0
- package/dist/src/presentation/formatters/output-formatter.d.ts +98 -0
- package/dist/src/presentation/formatters/output-formatter.d.ts.map +1 -0
- package/dist/src/presentation/formatters/output-formatter.js +165 -0
- package/dist/src/presentation/formatters/output-formatter.js.map +1 -0
- package/dist/src/presentation/formatters/progress-formatter.d.ts +121 -0
- package/dist/src/presentation/formatters/progress-formatter.d.ts.map +1 -0
- package/dist/src/presentation/formatters/progress-formatter.js +235 -0
- package/dist/src/presentation/formatters/progress-formatter.js.map +1 -0
- package/dist/src/presentation/interactive/confirmation.d.ts +24 -0
- package/dist/src/presentation/interactive/confirmation.d.ts.map +1 -0
- package/dist/src/presentation/interactive/confirmation.js +54 -0
- package/dist/src/presentation/interactive/confirmation.js.map +1 -0
- package/dist/src/presentation/interactive/index.d.ts +8 -0
- package/dist/src/presentation/interactive/index.d.ts.map +1 -0
- package/dist/src/presentation/interactive/index.js +11 -0
- package/dist/src/presentation/interactive/index.js.map +1 -0
- package/dist/src/presentation/interactive/prompts.d.ts +31 -0
- package/dist/src/presentation/interactive/prompts.d.ts.map +1 -0
- package/dist/src/presentation/interactive/prompts.js +71 -0
- package/dist/src/presentation/interactive/prompts.js.map +1 -0
- package/dist/src/presentation/interactive/selection.d.ts +31 -0
- package/dist/src/presentation/interactive/selection.d.ts.map +1 -0
- package/dist/src/presentation/interactive/selection.js +138 -0
- package/dist/src/presentation/interactive/selection.js.map +1 -0
- package/dist/src/shared/types/errors.d.ts +132 -0
- package/dist/src/shared/types/errors.d.ts.map +1 -0
- package/dist/src/shared/types/errors.js +61 -0
- package/dist/src/shared/types/errors.js.map +1 -0
- package/dist/src/shared/types/result.d.ts +53 -0
- package/dist/src/shared/types/result.d.ts.map +1 -0
- package/dist/src/shared/types/result.js +42 -0
- package/dist/src/shared/types/result.js.map +1 -0
- package/dist/test-confluence-auth.d.ts +6 -0
- package/dist/test-confluence-auth.d.ts.map +1 -0
- package/dist/test-confluence-auth.js +128 -0
- package/dist/test-confluence-auth.js.map +1 -0
- package/docs/MIGRATION.md +513 -0
- package/docs/architecture.md +774 -0
- package/docs/guides/comprehensive-verification-guide.md +1926 -0
- package/docs/onion-architecture-phase0-complete.md +91 -0
- package/package.json +6 -6
- package/scripts/README.md +148 -0
- package/scripts/__tests__/jira-transitions.test.ts +44 -30
- package/scripts/__tests__/mermaid-converter.test.ts +2 -2
- package/scripts/__tests__/multi-repo-validator.test.ts +62 -62
- package/scripts/__tests__/spec-archiver.test.ts +12 -0
- package/scripts/__tests__/validate-phase.test.ts +6 -6
- package/scripts/build/README.md +24 -0
- package/scripts/{copy-static-assets.js → build/copy-static-assets.js} +1 -1
- package/scripts/{set-permissions.js → build/set-permissions.js} +1 -1
- package/scripts/config/config-schema.ts +43 -302
- package/scripts/config-global.ts +3 -2
- package/scripts/confluence-sync.ts +17 -538
- package/scripts/constants/environments.ts +3 -53
- package/scripts/constants/languages.ts +3 -68
- package/scripts/constants/test-commands.ts +3 -94
- package/scripts/dev-tools/README.md +22 -0
- package/scripts/{test-interactive.ts → dev-tools/test-interactive.ts} +4 -3
- package/scripts/github-actions-client.ts +18 -256
- package/scripts/jira-sync.ts +5 -1270
- package/scripts/markdown-to-confluence.ts +5 -5
- package/scripts/multi-project-estimate.ts +3 -2
- package/scripts/phase-runner.ts +41 -19
- package/scripts/pre-flight-check.ts +27 -11
- package/scripts/template/__tests__/multi-repo-renderer.test.ts +12 -0
- package/scripts/template/multi-repo-renderer.ts +2 -2
- package/scripts/test-execution-generator.ts +5 -4
- package/scripts/utils/__tests__/config-validator.test.ts +19 -19
- package/scripts/utils/__tests__/feature-name-validator.test.ts +13 -13
- package/scripts/utils/__tests__/multi-repo-validator.test.ts +34 -34
- package/scripts/utils/__tests__/project-analyzer.test.ts +542 -0
- package/scripts/utils/__tests__/safe-file-reader.test.ts +208 -0
- package/scripts/utils/__tests__/security-validator.test.ts +33 -33
- package/scripts/utils/__tests__/validation-result.test.ts +112 -0
- package/scripts/utils/aidlc-parser.ts +18 -287
- package/scripts/utils/ci-generator.ts +4 -3
- package/scripts/utils/config-loader.ts +54 -50
- package/scripts/utils/config-validator.ts +89 -80
- package/scripts/utils/docker-requirement-detector.ts +5 -4
- package/scripts/utils/env-config.ts +59 -40
- package/scripts/utils/feature-name-validator.ts +25 -40
- package/scripts/utils/interactive-helpers.ts +24 -132
- package/scripts/utils/language-detector.ts +4 -3
- package/scripts/utils/markdown-parser.ts +18 -373
- package/scripts/utils/multi-repo-validator.ts +27 -28
- package/scripts/utils/project-analyzer.ts +429 -0
- package/scripts/utils/project-detector.ts +6 -5
- package/scripts/utils/project-finder.ts +2 -154
- package/scripts/utils/project-meta.ts +8 -91
- package/scripts/utils/safe-file-reader.ts +158 -0
- package/scripts/utils/security-validator.ts +42 -78
- package/scripts/utils/spec-archiver.ts +7 -6
- package/scripts/utils/spec-updater.ts +12 -6
- package/scripts/utils/tasks-converter.ts +2 -2
- package/scripts/utils/tasks-format-validator.ts +4 -4
- package/scripts/utils/template-applier.ts +4 -3
- package/scripts/utils/types/validation.ts +92 -0
- package/scripts/validate-phase.ts +51 -23
- package/scripts/workflow-orchestrator.ts +16 -251
- package/dist/scripts/mermaid-converter.d.ts.map +0 -1
- package/dist/scripts/mermaid-converter.js.map +0 -1
- package/dist/scripts/resource-dashboard.d.ts +0 -7
- package/dist/scripts/resource-dashboard.d.ts.map +0 -1
- package/dist/scripts/resource-dashboard.js +0 -157
- package/dist/scripts/resource-dashboard.js.map +0 -1
- package/dist/scripts/test-interactive.d.ts.map +0 -1
- package/dist/scripts/test-interactive.js.map +0 -1
- package/dist/scripts/test-new-features.d.ts +0 -5
- package/dist/scripts/test-new-features.d.ts.map +0 -1
- package/dist/scripts/test-new-features.js +0 -148
- package/dist/scripts/test-new-features.js.map +0 -1
- package/dist/scripts/test-spec-generator.d.ts +0 -29
- package/dist/scripts/test-spec-generator.d.ts.map +0 -1
- package/dist/scripts/test-spec-generator.js +0 -493
- package/dist/scripts/test-spec-generator.js.map +0 -1
- package/dist/scripts/utils/confluence-approval.d.ts +0 -46
- package/dist/scripts/utils/confluence-approval.d.ts.map +0 -1
- package/dist/scripts/utils/confluence-approval.js +0 -120
- package/dist/scripts/utils/confluence-approval.js.map +0 -1
- package/dist/scripts/utils/template-finder.d.ts +0 -37
- package/dist/scripts/utils/template-finder.d.ts.map +0 -1
- package/dist/scripts/utils/template-finder.js +0 -58
- package/dist/scripts/utils/template-finder.js.map +0 -1
- package/dist/src/commands/multi-repo-add-repo.d.ts.map +0 -1
- package/dist/src/commands/multi-repo-add-repo.js.map +0 -1
- package/dist/src/commands/multi-repo-ci-status.d.ts.map +0 -1
- package/dist/src/commands/multi-repo-ci-status.js.map +0 -1
- package/dist/src/commands/multi-repo-confluence-sync.d.ts.map +0 -1
- package/dist/src/commands/multi-repo-confluence-sync.js.map +0 -1
- package/dist/src/commands/multi-repo-init.d.ts.map +0 -1
- package/dist/src/commands/multi-repo-init.js.map +0 -1
- package/dist/src/commands/multi-repo-list.d.ts.map +0 -1
- package/dist/src/commands/multi-repo-list.js.map +0 -1
- package/dist/src/commands/multi-repo-test.d.ts.map +0 -1
- package/dist/src/commands/multi-repo-test.js.map +0 -1
- package/dist/src/commands/setup-existing.d.ts +0 -22
- package/dist/src/commands/setup-existing.d.ts.map +0 -1
- package/dist/src/commands/setup-existing.js +0 -606
- package/dist/src/commands/setup-existing.js.map +0 -1
- package/scripts/__tests__/setup-existing-project.test.ts +0 -244
- package/scripts/resource-dashboard.ts +0 -189
- package/scripts/test-new-features.ts +0 -171
- package/scripts/test-spec-generator.ts +0 -570
- package/scripts/utils/confluence-approval.ts +0 -169
- package/scripts/utils/template-finder.ts +0 -69
- /package/dist/scripts/{mermaid-converter.d.ts → dev-tools/mermaid-converter.d.ts} +0 -0
- /package/dist/scripts/{mermaid-converter.js → dev-tools/mermaid-converter.js} +0 -0
- /package/dist/scripts/{test-interactive.d.ts → dev-tools/test-interactive.d.ts} +0 -0
- /package/scripts/{mermaid-converter.ts → dev-tools/mermaid-converter.ts} +0 -0
|
@@ -19,38 +19,38 @@ describe('validateProjectName', () => {
|
|
|
19
19
|
describe('正常ケース', () => {
|
|
20
20
|
it('有効な英字プロジェクト名を受け入れる', () => {
|
|
21
21
|
const result = validateProjectName('my-project');
|
|
22
|
-
expect(result.
|
|
22
|
+
expect(result.success).toBe(true);
|
|
23
23
|
expect(result.errors).toHaveLength(0);
|
|
24
24
|
});
|
|
25
25
|
|
|
26
26
|
it('有効な日本語プロジェクト名を受け入れる', () => {
|
|
27
27
|
const result = validateProjectName('マルチリポジトリ');
|
|
28
|
-
expect(result.
|
|
28
|
+
expect(result.success).toBe(true);
|
|
29
29
|
expect(result.errors).toHaveLength(0);
|
|
30
30
|
});
|
|
31
31
|
|
|
32
32
|
it('英字、数字、ハイフンを含むプロジェクト名を受け入れる', () => {
|
|
33
33
|
const result = validateProjectName('project-123-test');
|
|
34
|
-
expect(result.
|
|
34
|
+
expect(result.success).toBe(true);
|
|
35
35
|
expect(result.errors).toHaveLength(0);
|
|
36
36
|
});
|
|
37
37
|
|
|
38
38
|
it('アンダースコアを含むプロジェクト名を受け入れる', () => {
|
|
39
39
|
const result = validateProjectName('my_project_name');
|
|
40
|
-
expect(result.
|
|
40
|
+
expect(result.success).toBe(true);
|
|
41
41
|
expect(result.errors).toHaveLength(0);
|
|
42
42
|
});
|
|
43
43
|
|
|
44
44
|
it('100文字のプロジェクト名を受け入れる', () => {
|
|
45
45
|
const name = 'a'.repeat(100);
|
|
46
46
|
const result = validateProjectName(name);
|
|
47
|
-
expect(result.
|
|
47
|
+
expect(result.success).toBe(true);
|
|
48
48
|
expect(result.errors).toHaveLength(0);
|
|
49
49
|
});
|
|
50
50
|
|
|
51
51
|
it('1文字のプロジェクト名を受け入れる', () => {
|
|
52
52
|
const result = validateProjectName('a');
|
|
53
|
-
expect(result.
|
|
53
|
+
expect(result.success).toBe(true);
|
|
54
54
|
expect(result.errors).toHaveLength(0);
|
|
55
55
|
});
|
|
56
56
|
});
|
|
@@ -58,7 +58,7 @@ describe('validateProjectName', () => {
|
|
|
58
58
|
describe('パストラバーサル攻撃対策', () => {
|
|
59
59
|
it('../を含むプロジェクト名を拒否する', () => {
|
|
60
60
|
const result = validateProjectName('../malicious');
|
|
61
|
-
expect(result.
|
|
61
|
+
expect(result.success).toBe(false);
|
|
62
62
|
expect(result.errors).toContain(
|
|
63
63
|
'Project name must not contain path traversal characters (/, \\)',
|
|
64
64
|
);
|
|
@@ -66,7 +66,7 @@ describe('validateProjectName', () => {
|
|
|
66
66
|
|
|
67
67
|
it('./を含むプロジェクト名を拒否する', () => {
|
|
68
68
|
const result = validateProjectName('./current');
|
|
69
|
-
expect(result.
|
|
69
|
+
expect(result.success).toBe(false);
|
|
70
70
|
expect(result.errors).toContain(
|
|
71
71
|
'Project name must not contain path traversal characters (/, \\)',
|
|
72
72
|
);
|
|
@@ -74,7 +74,7 @@ describe('validateProjectName', () => {
|
|
|
74
74
|
|
|
75
75
|
it('/を含むプロジェクト名を拒否する', () => {
|
|
76
76
|
const result = validateProjectName('project/name');
|
|
77
|
-
expect(result.
|
|
77
|
+
expect(result.success).toBe(false);
|
|
78
78
|
expect(result.errors).toContain(
|
|
79
79
|
'Project name must not contain path traversal characters (/, \\)',
|
|
80
80
|
);
|
|
@@ -82,7 +82,7 @@ describe('validateProjectName', () => {
|
|
|
82
82
|
|
|
83
83
|
it('\\を含むプロジェクト名を拒否する', () => {
|
|
84
84
|
const result = validateProjectName('project\\name');
|
|
85
|
-
expect(result.
|
|
85
|
+
expect(result.success).toBe(false);
|
|
86
86
|
expect(result.errors).toContain(
|
|
87
87
|
'Project name must not contain path traversal characters (/, \\)',
|
|
88
88
|
);
|
|
@@ -90,7 +90,7 @@ describe('validateProjectName', () => {
|
|
|
90
90
|
|
|
91
91
|
it('複数のパストラバーサル文字を含むプロジェクト名を拒否する', () => {
|
|
92
92
|
const result = validateProjectName('../../etc/passwd');
|
|
93
|
-
expect(result.
|
|
93
|
+
expect(result.success).toBe(false);
|
|
94
94
|
expect(result.errors).toContain(
|
|
95
95
|
'Project name must not contain path traversal characters (/, \\)',
|
|
96
96
|
);
|
|
@@ -100,7 +100,7 @@ describe('validateProjectName', () => {
|
|
|
100
100
|
describe('相対パス攻撃対策', () => {
|
|
101
101
|
it('.(カレントディレクトリ)を拒否する', () => {
|
|
102
102
|
const result = validateProjectName('.');
|
|
103
|
-
expect(result.
|
|
103
|
+
expect(result.success).toBe(false);
|
|
104
104
|
expect(result.errors).toContain(
|
|
105
105
|
'Project name must not be relative path components (., ..)',
|
|
106
106
|
);
|
|
@@ -108,7 +108,7 @@ describe('validateProjectName', () => {
|
|
|
108
108
|
|
|
109
109
|
it('..(親ディレクトリ)を拒否する', () => {
|
|
110
110
|
const result = validateProjectName('..');
|
|
111
|
-
expect(result.
|
|
111
|
+
expect(result.success).toBe(false);
|
|
112
112
|
expect(result.errors).toContain(
|
|
113
113
|
'Project name must not be relative path components (., ..)',
|
|
114
114
|
);
|
|
@@ -118,7 +118,7 @@ describe('validateProjectName', () => {
|
|
|
118
118
|
describe('制御文字対策', () => {
|
|
119
119
|
it('ヌル文字(\\x00)を含むプロジェクト名を拒否する', () => {
|
|
120
120
|
const result = validateProjectName('project\x00name');
|
|
121
|
-
expect(result.
|
|
121
|
+
expect(result.success).toBe(false);
|
|
122
122
|
expect(result.errors).toContain(
|
|
123
123
|
'Project name must not contain control characters',
|
|
124
124
|
);
|
|
@@ -126,7 +126,7 @@ describe('validateProjectName', () => {
|
|
|
126
126
|
|
|
127
127
|
it('改行文字(\\n)を含むプロジェクト名を拒否する', () => {
|
|
128
128
|
const result = validateProjectName('project\nname');
|
|
129
|
-
expect(result.
|
|
129
|
+
expect(result.success).toBe(false);
|
|
130
130
|
expect(result.errors).toContain(
|
|
131
131
|
'Project name must not contain control characters',
|
|
132
132
|
);
|
|
@@ -134,7 +134,7 @@ describe('validateProjectName', () => {
|
|
|
134
134
|
|
|
135
135
|
it('キャリッジリターン(\\r)を含むプロジェクト名を拒否する', () => {
|
|
136
136
|
const result = validateProjectName('project\rname');
|
|
137
|
-
expect(result.
|
|
137
|
+
expect(result.success).toBe(false);
|
|
138
138
|
expect(result.errors).toContain(
|
|
139
139
|
'Project name must not contain control characters',
|
|
140
140
|
);
|
|
@@ -142,7 +142,7 @@ describe('validateProjectName', () => {
|
|
|
142
142
|
|
|
143
143
|
it('タブ文字(\\t)を含むプロジェクト名を拒否する', () => {
|
|
144
144
|
const result = validateProjectName('project\tname');
|
|
145
|
-
expect(result.
|
|
145
|
+
expect(result.success).toBe(false);
|
|
146
146
|
expect(result.errors).toContain(
|
|
147
147
|
'Project name must not contain control characters',
|
|
148
148
|
);
|
|
@@ -150,7 +150,7 @@ describe('validateProjectName', () => {
|
|
|
150
150
|
|
|
151
151
|
it('ターミナルエスケープシーケンス(\\x1B[)を含むプロジェクト名を拒否する', () => {
|
|
152
152
|
const result = validateProjectName('project\x1B[31mname');
|
|
153
|
-
expect(result.
|
|
153
|
+
expect(result.success).toBe(false);
|
|
154
154
|
expect(result.errors).toContain(
|
|
155
155
|
'Project name must not contain control characters',
|
|
156
156
|
);
|
|
@@ -158,7 +158,7 @@ describe('validateProjectName', () => {
|
|
|
158
158
|
|
|
159
159
|
it('DEL文字(\\x7F)を含むプロジェクト名を拒否する', () => {
|
|
160
160
|
const result = validateProjectName('project\x7Fname');
|
|
161
|
-
expect(result.
|
|
161
|
+
expect(result.success).toBe(false);
|
|
162
162
|
expect(result.errors).toContain(
|
|
163
163
|
'Project name must not contain control characters',
|
|
164
164
|
);
|
|
@@ -166,7 +166,7 @@ describe('validateProjectName', () => {
|
|
|
166
166
|
|
|
167
167
|
it('複数の制御文字を含むプロジェクト名を拒否する', () => {
|
|
168
168
|
const result = validateProjectName('project\x00\n\r\tname');
|
|
169
|
-
expect(result.
|
|
169
|
+
expect(result.success).toBe(false);
|
|
170
170
|
expect(result.errors).toContain(
|
|
171
171
|
'Project name must not contain control characters',
|
|
172
172
|
);
|
|
@@ -177,7 +177,7 @@ describe('validateProjectName', () => {
|
|
|
177
177
|
it('101文字のプロジェクト名を拒否する', () => {
|
|
178
178
|
const name = 'a'.repeat(101);
|
|
179
179
|
const result = validateProjectName(name);
|
|
180
|
-
expect(result.
|
|
180
|
+
expect(result.success).toBe(false);
|
|
181
181
|
expect(result.errors).toContain(
|
|
182
182
|
'Project name must be between 1 and 100 characters',
|
|
183
183
|
);
|
|
@@ -185,7 +185,7 @@ describe('validateProjectName', () => {
|
|
|
185
185
|
|
|
186
186
|
it('空文字列のプロジェクト名を拒否する', () => {
|
|
187
187
|
const result = validateProjectName('');
|
|
188
|
-
expect(result.
|
|
188
|
+
expect(result.success).toBe(false);
|
|
189
189
|
expect(result.errors).toContain(
|
|
190
190
|
'Project name must be between 1 and 100 characters',
|
|
191
191
|
);
|
|
@@ -194,7 +194,7 @@ describe('validateProjectName', () => {
|
|
|
194
194
|
it('200文字のプロジェクト名を拒否する', () => {
|
|
195
195
|
const name = 'a'.repeat(200);
|
|
196
196
|
const result = validateProjectName(name);
|
|
197
|
-
expect(result.
|
|
197
|
+
expect(result.success).toBe(false);
|
|
198
198
|
expect(result.errors).toContain(
|
|
199
199
|
'Project name must be between 1 and 100 characters',
|
|
200
200
|
);
|
|
@@ -204,7 +204,7 @@ describe('validateProjectName', () => {
|
|
|
204
204
|
describe('複合エラーケース', () => {
|
|
205
205
|
it('複数のバリデーションエラーを同時に検出する', () => {
|
|
206
206
|
const result = validateProjectName('../project\x00/name');
|
|
207
|
-
expect(result.
|
|
207
|
+
expect(result.success).toBe(false);
|
|
208
208
|
expect(result.errors.length).toBeGreaterThan(1);
|
|
209
209
|
expect(result.errors).toContain(
|
|
210
210
|
'Project name must not contain path traversal characters (/, \\)',
|
|
@@ -217,7 +217,7 @@ describe('validateProjectName', () => {
|
|
|
217
217
|
it('長すぎるプロジェクト名とパストラバーサル文字を同時に検出する', () => {
|
|
218
218
|
const name = 'a'.repeat(101) + '/';
|
|
219
219
|
const result = validateProjectName(name);
|
|
220
|
-
expect(result.
|
|
220
|
+
expect(result.success).toBe(false);
|
|
221
221
|
expect(result.errors).toContain(
|
|
222
222
|
'Project name must be between 1 and 100 characters',
|
|
223
223
|
);
|
|
@@ -232,31 +232,31 @@ describe('validateJiraKey', () => {
|
|
|
232
232
|
describe('正常ケース', () => {
|
|
233
233
|
it('2文字の大文字英字を受け入れる', () => {
|
|
234
234
|
const result = validateJiraKey('AB');
|
|
235
|
-
expect(result.
|
|
235
|
+
expect(result.success).toBe(true);
|
|
236
236
|
expect(result.errors).toHaveLength(0);
|
|
237
237
|
});
|
|
238
238
|
|
|
239
239
|
it('10文字の大文字英字を受け入れる', () => {
|
|
240
240
|
const result = validateJiraKey('ABCDEFGHIJ');
|
|
241
|
-
expect(result.
|
|
241
|
+
expect(result.success).toBe(true);
|
|
242
242
|
expect(result.errors).toHaveLength(0);
|
|
243
243
|
});
|
|
244
244
|
|
|
245
245
|
it('一般的なJIRAキー形式を受け入れる (PROJ)', () => {
|
|
246
246
|
const result = validateJiraKey('PROJ');
|
|
247
|
-
expect(result.
|
|
247
|
+
expect(result.success).toBe(true);
|
|
248
248
|
expect(result.errors).toHaveLength(0);
|
|
249
249
|
});
|
|
250
250
|
|
|
251
251
|
it('一般的なJIRAキー形式を受け入れる (TICKET)', () => {
|
|
252
252
|
const result = validateJiraKey('TICKET');
|
|
253
|
-
expect(result.
|
|
253
|
+
expect(result.success).toBe(true);
|
|
254
254
|
expect(result.errors).toHaveLength(0);
|
|
255
255
|
});
|
|
256
256
|
|
|
257
257
|
it('一般的なJIRAキー形式を受け入れる (MYPROJECT)', () => {
|
|
258
258
|
const result = validateJiraKey('MYPROJECT');
|
|
259
|
-
expect(result.
|
|
259
|
+
expect(result.success).toBe(true);
|
|
260
260
|
expect(result.errors).toHaveLength(0);
|
|
261
261
|
});
|
|
262
262
|
});
|
|
@@ -264,19 +264,19 @@ describe('validateJiraKey', () => {
|
|
|
264
264
|
describe('小文字エラー', () => {
|
|
265
265
|
it('小文字のみのJIRAキーを拒否する', () => {
|
|
266
266
|
const result = validateJiraKey('abc');
|
|
267
|
-
expect(result.
|
|
267
|
+
expect(result.success).toBe(false);
|
|
268
268
|
expect(result.errors).toContain('JIRA key must be 2-10 uppercase letters');
|
|
269
269
|
});
|
|
270
270
|
|
|
271
271
|
it('大文字と小文字が混在するJIRAキーを拒否する', () => {
|
|
272
272
|
const result = validateJiraKey('Proj');
|
|
273
|
-
expect(result.
|
|
273
|
+
expect(result.success).toBe(false);
|
|
274
274
|
expect(result.errors).toContain('JIRA key must be 2-10 uppercase letters');
|
|
275
275
|
});
|
|
276
276
|
|
|
277
277
|
it('小文字を含むJIRAキーを拒否する', () => {
|
|
278
278
|
const result = validateJiraKey('PROJect');
|
|
279
|
-
expect(result.
|
|
279
|
+
expect(result.success).toBe(false);
|
|
280
280
|
expect(result.errors).toContain('JIRA key must be 2-10 uppercase letters');
|
|
281
281
|
});
|
|
282
282
|
});
|
|
@@ -284,25 +284,25 @@ describe('validateJiraKey', () => {
|
|
|
284
284
|
describe('長さエラー', () => {
|
|
285
285
|
it('1文字のJIRAキーを拒否する(短すぎる)', () => {
|
|
286
286
|
const result = validateJiraKey('A');
|
|
287
|
-
expect(result.
|
|
287
|
+
expect(result.success).toBe(false);
|
|
288
288
|
expect(result.errors).toContain('JIRA key must be 2-10 uppercase letters');
|
|
289
289
|
});
|
|
290
290
|
|
|
291
291
|
it('11文字のJIRAキーを拒否する(長すぎる)', () => {
|
|
292
292
|
const result = validateJiraKey('ABCDEFGHIJK');
|
|
293
|
-
expect(result.
|
|
293
|
+
expect(result.success).toBe(false);
|
|
294
294
|
expect(result.errors).toContain('JIRA key must be 2-10 uppercase letters');
|
|
295
295
|
});
|
|
296
296
|
|
|
297
297
|
it('15文字のJIRAキーを拒否する(長すぎる)', () => {
|
|
298
298
|
const result = validateJiraKey('ABCDEFGHIJKLMNO');
|
|
299
|
-
expect(result.
|
|
299
|
+
expect(result.success).toBe(false);
|
|
300
300
|
expect(result.errors).toContain('JIRA key must be 2-10 uppercase letters');
|
|
301
301
|
});
|
|
302
302
|
|
|
303
303
|
it('空文字列のJIRAキーを拒否する', () => {
|
|
304
304
|
const result = validateJiraKey('');
|
|
305
|
-
expect(result.
|
|
305
|
+
expect(result.success).toBe(false);
|
|
306
306
|
expect(result.errors).toContain('JIRA key must be 2-10 uppercase letters');
|
|
307
307
|
});
|
|
308
308
|
});
|
|
@@ -310,25 +310,25 @@ describe('validateJiraKey', () => {
|
|
|
310
310
|
describe('数字を含むエラー', () => {
|
|
311
311
|
it('数字のみのJIRAキーを拒否する', () => {
|
|
312
312
|
const result = validateJiraKey('123');
|
|
313
|
-
expect(result.
|
|
313
|
+
expect(result.success).toBe(false);
|
|
314
314
|
expect(result.errors).toContain('JIRA key must be 2-10 uppercase letters');
|
|
315
315
|
});
|
|
316
316
|
|
|
317
317
|
it('数字を含むJIRAキーを拒否する (ABC123)', () => {
|
|
318
318
|
const result = validateJiraKey('ABC123');
|
|
319
|
-
expect(result.
|
|
319
|
+
expect(result.success).toBe(false);
|
|
320
320
|
expect(result.errors).toContain('JIRA key must be 2-10 uppercase letters');
|
|
321
321
|
});
|
|
322
322
|
|
|
323
323
|
it('数字で始まるJIRAキーを拒否する', () => {
|
|
324
324
|
const result = validateJiraKey('123ABC');
|
|
325
|
-
expect(result.
|
|
325
|
+
expect(result.success).toBe(false);
|
|
326
326
|
expect(result.errors).toContain('JIRA key must be 2-10 uppercase letters');
|
|
327
327
|
});
|
|
328
328
|
|
|
329
329
|
it('数字が混在するJIRAキーを拒否する', () => {
|
|
330
330
|
const result = validateJiraKey('AB1CD2');
|
|
331
|
-
expect(result.
|
|
331
|
+
expect(result.success).toBe(false);
|
|
332
332
|
expect(result.errors).toContain('JIRA key must be 2-10 uppercase letters');
|
|
333
333
|
});
|
|
334
334
|
});
|
|
@@ -336,25 +336,25 @@ describe('validateJiraKey', () => {
|
|
|
336
336
|
describe('特殊文字エラー', () => {
|
|
337
337
|
it('ハイフンを含むJIRAキーを拒否する', () => {
|
|
338
338
|
const result = validateJiraKey('PROJ-123');
|
|
339
|
-
expect(result.
|
|
339
|
+
expect(result.success).toBe(false);
|
|
340
340
|
expect(result.errors).toContain('JIRA key must be 2-10 uppercase letters');
|
|
341
341
|
});
|
|
342
342
|
|
|
343
343
|
it('アンダースコアを含むJIRAキーを拒否する', () => {
|
|
344
344
|
const result = validateJiraKey('PROJ_NAME');
|
|
345
|
-
expect(result.
|
|
345
|
+
expect(result.success).toBe(false);
|
|
346
346
|
expect(result.errors).toContain('JIRA key must be 2-10 uppercase letters');
|
|
347
347
|
});
|
|
348
348
|
|
|
349
349
|
it('スペースを含むJIRAキーを拒否する', () => {
|
|
350
350
|
const result = validateJiraKey('PROJ NAME');
|
|
351
|
-
expect(result.
|
|
351
|
+
expect(result.success).toBe(false);
|
|
352
352
|
expect(result.errors).toContain('JIRA key must be 2-10 uppercase letters');
|
|
353
353
|
});
|
|
354
354
|
|
|
355
355
|
it('記号を含むJIRAキーを拒否する', () => {
|
|
356
356
|
const result = validateJiraKey('PROJ@NAME');
|
|
357
|
-
expect(result.
|
|
357
|
+
expect(result.success).toBe(false);
|
|
358
358
|
expect(result.errors).toContain('JIRA key must be 2-10 uppercase letters');
|
|
359
359
|
});
|
|
360
360
|
});
|
|
@@ -366,7 +366,7 @@ describe('validateRepositoryUrl', () => {
|
|
|
366
366
|
const result = validateRepositoryUrl(
|
|
367
367
|
'https://github.com/owner/repository',
|
|
368
368
|
);
|
|
369
|
-
expect(result.
|
|
369
|
+
expect(result.success).toBe(true);
|
|
370
370
|
expect(result.errors).toHaveLength(0);
|
|
371
371
|
});
|
|
372
372
|
|
|
@@ -374,7 +374,7 @@ describe('validateRepositoryUrl', () => {
|
|
|
374
374
|
const result = validateRepositoryUrl(
|
|
375
375
|
'https://github.com/my-org/my-repo',
|
|
376
376
|
);
|
|
377
|
-
expect(result.
|
|
377
|
+
expect(result.success).toBe(true);
|
|
378
378
|
expect(result.errors).toHaveLength(0);
|
|
379
379
|
});
|
|
380
380
|
|
|
@@ -382,7 +382,7 @@ describe('validateRepositoryUrl', () => {
|
|
|
382
382
|
const result = validateRepositoryUrl(
|
|
383
383
|
'https://github.com/org123/repo456',
|
|
384
384
|
);
|
|
385
|
-
expect(result.
|
|
385
|
+
expect(result.success).toBe(true);
|
|
386
386
|
expect(result.errors).toHaveLength(0);
|
|
387
387
|
});
|
|
388
388
|
|
|
@@ -390,7 +390,7 @@ describe('validateRepositoryUrl', () => {
|
|
|
390
390
|
const result = validateRepositoryUrl(
|
|
391
391
|
'https://github.com/my-org/my-project-test',
|
|
392
392
|
);
|
|
393
|
-
expect(result.
|
|
393
|
+
expect(result.success).toBe(true);
|
|
394
394
|
expect(result.errors).toHaveLength(0);
|
|
395
395
|
});
|
|
396
396
|
});
|
|
@@ -398,13 +398,13 @@ describe('validateRepositoryUrl', () => {
|
|
|
398
398
|
describe('空文字列エラー', () => {
|
|
399
399
|
it('空文字列を拒否する', () => {
|
|
400
400
|
const result = validateRepositoryUrl('');
|
|
401
|
-
expect(result.
|
|
401
|
+
expect(result.success).toBe(false);
|
|
402
402
|
expect(result.errors).toContain('Repository URL is empty');
|
|
403
403
|
});
|
|
404
404
|
|
|
405
405
|
it('スペースのみの文字列を拒否する', () => {
|
|
406
406
|
const result = validateRepositoryUrl(' ');
|
|
407
|
-
expect(result.
|
|
407
|
+
expect(result.success).toBe(false);
|
|
408
408
|
expect(result.errors).toContain('Repository URL is empty');
|
|
409
409
|
});
|
|
410
410
|
});
|
|
@@ -414,7 +414,7 @@ describe('validateRepositoryUrl', () => {
|
|
|
414
414
|
const result = validateRepositoryUrl(
|
|
415
415
|
'git@github.com:owner/repository.git',
|
|
416
416
|
);
|
|
417
|
-
expect(result.
|
|
417
|
+
expect(result.success).toBe(false);
|
|
418
418
|
expect(result.errors).toContain(
|
|
419
419
|
'Repository URL must be in GitHub format: https://github.com/{owner}/{repo}',
|
|
420
420
|
);
|
|
@@ -426,7 +426,7 @@ describe('validateRepositoryUrl', () => {
|
|
|
426
426
|
const result = validateRepositoryUrl(
|
|
427
427
|
'http://github.com/owner/repository',
|
|
428
428
|
);
|
|
429
|
-
expect(result.
|
|
429
|
+
expect(result.success).toBe(false);
|
|
430
430
|
expect(result.errors).toContain('Repository URL must use HTTPS protocol');
|
|
431
431
|
});
|
|
432
432
|
});
|
|
@@ -436,7 +436,7 @@ describe('validateRepositoryUrl', () => {
|
|
|
436
436
|
const result = validateRepositoryUrl(
|
|
437
437
|
'https://gitlab.com/owner/repository',
|
|
438
438
|
);
|
|
439
|
-
expect(result.
|
|
439
|
+
expect(result.success).toBe(false);
|
|
440
440
|
expect(result.errors).toContain(
|
|
441
441
|
'Repository URL must be in GitHub format: https://github.com/{owner}/{repo}',
|
|
442
442
|
);
|
|
@@ -446,7 +446,7 @@ describe('validateRepositoryUrl', () => {
|
|
|
446
446
|
const result = validateRepositoryUrl(
|
|
447
447
|
'https://github.com/owner/repository/issues',
|
|
448
448
|
);
|
|
449
|
-
expect(result.
|
|
449
|
+
expect(result.success).toBe(false);
|
|
450
450
|
expect(result.errors).toContain(
|
|
451
451
|
'Repository URL must be in GitHub format: https://github.com/{owner}/{repo}',
|
|
452
452
|
);
|
|
@@ -454,7 +454,7 @@ describe('validateRepositoryUrl', () => {
|
|
|
454
454
|
|
|
455
455
|
it('ownerのみのURLを拒否する', () => {
|
|
456
456
|
const result = validateRepositoryUrl('https://github.com/owner');
|
|
457
|
-
expect(result.
|
|
457
|
+
expect(result.success).toBe(false);
|
|
458
458
|
expect(result.errors).toContain(
|
|
459
459
|
'Repository URL must be in GitHub format: https://github.com/{owner}/{repo}',
|
|
460
460
|
);
|
|
@@ -466,7 +466,7 @@ describe('validateRepositoryUrl', () => {
|
|
|
466
466
|
const result = validateRepositoryUrl(
|
|
467
467
|
'https://github.com/owner/repository.git',
|
|
468
468
|
);
|
|
469
|
-
expect(result.
|
|
469
|
+
expect(result.success).toBe(false);
|
|
470
470
|
expect(result.errors).toContain(
|
|
471
471
|
'Repository URL must not include .git extension',
|
|
472
472
|
);
|
|
@@ -478,7 +478,7 @@ describe('validateRepositoryUrl', () => {
|
|
|
478
478
|
const result = validateRepositoryUrl(
|
|
479
479
|
'https://github.com/your-org/repository',
|
|
480
480
|
);
|
|
481
|
-
expect(result.
|
|
481
|
+
expect(result.success).toBe(false);
|
|
482
482
|
expect(result.errors).toContain(
|
|
483
483
|
'Repository URL contains placeholder values',
|
|
484
484
|
);
|
|
@@ -488,7 +488,7 @@ describe('validateRepositoryUrl', () => {
|
|
|
488
488
|
const result = validateRepositoryUrl(
|
|
489
489
|
'https://github.com/owner/your-repo',
|
|
490
490
|
);
|
|
491
|
-
expect(result.
|
|
491
|
+
expect(result.success).toBe(false);
|
|
492
492
|
expect(result.errors).toContain(
|
|
493
493
|
'Repository URL contains placeholder values',
|
|
494
494
|
);
|
|
@@ -498,7 +498,7 @@ describe('validateRepositoryUrl', () => {
|
|
|
498
498
|
const result = validateRepositoryUrl(
|
|
499
499
|
'https://github.com/owner/repo-name',
|
|
500
500
|
);
|
|
501
|
-
expect(result.
|
|
501
|
+
expect(result.success).toBe(false);
|
|
502
502
|
expect(result.errors).toContain(
|
|
503
503
|
'Repository URL contains placeholder values',
|
|
504
504
|
);
|
|
@@ -508,7 +508,7 @@ describe('validateRepositoryUrl', () => {
|
|
|
508
508
|
describe('無効なURL形式', () => {
|
|
509
509
|
it('無効なURL形式を拒否する', () => {
|
|
510
510
|
const result = validateRepositoryUrl('not-a-url');
|
|
511
|
-
expect(result.
|
|
511
|
+
expect(result.success).toBe(false);
|
|
512
512
|
expect(result.errors).toContain('Repository URL format is invalid');
|
|
513
513
|
});
|
|
514
514
|
|
|
@@ -522,7 +522,7 @@ describe('validateRepositoryUrl', () => {
|
|
|
522
522
|
// URLコンストラクタはスペースを自動エンコードするため、
|
|
523
523
|
// GitHub形式チェックでは通過する可能性があります
|
|
524
524
|
// このテストは実装の動作を反映して調整します
|
|
525
|
-
expect(result.
|
|
525
|
+
expect(result.success).toBe(true); // URLエンコードされるため有効
|
|
526
526
|
expect(result.errors).toHaveLength(0);
|
|
527
527
|
});
|
|
528
528
|
});
|
|
@@ -15,6 +15,18 @@ vi.mock('fs', () => ({
|
|
|
15
15
|
writeFileSync: vi.fn(),
|
|
16
16
|
}));
|
|
17
17
|
|
|
18
|
+
// safe-file-reader のモック(実際のreadFileSyncモックを使用するため)
|
|
19
|
+
vi.mock('../utils/safe-file-reader.js', async (importOriginal) => {
|
|
20
|
+
const mockFs = await import('fs');
|
|
21
|
+
return {
|
|
22
|
+
safeReadFileOrThrow: vi.fn((filePath: string, encoding: BufferEncoding = 'utf-8') => {
|
|
23
|
+
return (mockFs.readFileSync as ReturnType<typeof vi.fn>)(filePath, encoding);
|
|
24
|
+
}),
|
|
25
|
+
safeReadFile: vi.fn(),
|
|
26
|
+
safeReadJsonFile: vi.fn(),
|
|
27
|
+
};
|
|
28
|
+
});
|
|
29
|
+
|
|
18
30
|
import {
|
|
19
31
|
canArchiveSpec,
|
|
20
32
|
archiveSpec,
|
|
@@ -61,7 +61,7 @@ describe('validatePhase', () => {
|
|
|
61
61
|
const result = validatePhase('test-feature', 'requirements');
|
|
62
62
|
|
|
63
63
|
// Assert
|
|
64
|
-
expect(result.
|
|
64
|
+
expect(result.success).toBe(true);
|
|
65
65
|
expect(result.errors).toHaveLength(0);
|
|
66
66
|
expect(result.phase).toBe('requirements');
|
|
67
67
|
});
|
|
@@ -82,7 +82,7 @@ describe('validatePhase', () => {
|
|
|
82
82
|
const result = validatePhase('test-feature', 'requirements');
|
|
83
83
|
|
|
84
84
|
// Assert
|
|
85
|
-
expect(result.
|
|
85
|
+
expect(result.success).toBe(false);
|
|
86
86
|
expect(result.errors).toContain(
|
|
87
87
|
'❌ Confluenceページ(要件定義)が作成されていません',
|
|
88
88
|
);
|
|
@@ -110,7 +110,7 @@ describe('validatePhase', () => {
|
|
|
110
110
|
const result = validatePhase('test-feature', 'design');
|
|
111
111
|
|
|
112
112
|
// Assert
|
|
113
|
-
expect(result.
|
|
113
|
+
expect(result.success).toBe(false);
|
|
114
114
|
expect(result.errors).toContain(
|
|
115
115
|
'❌ 要件定義が完了していません(前提条件)',
|
|
116
116
|
);
|
|
@@ -139,7 +139,7 @@ describe('validatePhase', () => {
|
|
|
139
139
|
const result = validatePhase('test-feature', 'tasks');
|
|
140
140
|
|
|
141
141
|
// Assert
|
|
142
|
-
expect(result.
|
|
142
|
+
expect(result.success).toBe(false);
|
|
143
143
|
expect(result.errors).toContain('❌ JIRA Epicが作成されていません');
|
|
144
144
|
});
|
|
145
145
|
|
|
@@ -170,7 +170,7 @@ describe('validatePhase', () => {
|
|
|
170
170
|
const result = validatePhase('test-feature', 'tasks');
|
|
171
171
|
|
|
172
172
|
// Assert
|
|
173
|
-
expect(result.
|
|
173
|
+
expect(result.success).toBe(true); // 警告だけなのでvalid
|
|
174
174
|
expect(result.warnings).toContain(
|
|
175
175
|
'⚠️ tasks.mdに曜日表記(月、火、水...)が含まれていません',
|
|
176
176
|
);
|
|
@@ -290,7 +290,7 @@ describe('validatePhase', () => {
|
|
|
290
290
|
const result = validatePhase('test-feature', 'requirements');
|
|
291
291
|
|
|
292
292
|
// Assert: エラーをスローせず、errors配列にエラーを含めて返す
|
|
293
|
-
expect(result.
|
|
293
|
+
expect(result.success).toBe(false);
|
|
294
294
|
expect(result.errors).toContainEqual(
|
|
295
295
|
expect.stringContaining('spec.json読み込みエラー'),
|
|
296
296
|
);
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# Build Scripts (ビルドスクリプト)
|
|
2
|
+
|
|
3
|
+
## 目的
|
|
4
|
+
|
|
5
|
+
プロダクションビルドに必要なスクリプトを配置。
|
|
6
|
+
|
|
7
|
+
## 配置するもの
|
|
8
|
+
|
|
9
|
+
- **copy-static-assets.js**: 静的ファイルのコピー
|
|
10
|
+
- `.kiro/settings/` 配下のテンプレートファイル
|
|
11
|
+
- その他のビルド時に必要な静的アセット
|
|
12
|
+
- **set-permissions.js**: 実行権限の設定
|
|
13
|
+
- ビルド成果物の権限設定
|
|
14
|
+
|
|
15
|
+
## 実行タイミング
|
|
16
|
+
|
|
17
|
+
- `npm run build` 実行時
|
|
18
|
+
- `npm run postbuild` 実行時
|
|
19
|
+
|
|
20
|
+
## 注意事項
|
|
21
|
+
|
|
22
|
+
- このディレクトリにはビルドに関連するスクリプトのみを配置
|
|
23
|
+
- プロダクションコードは `src/` 配下に配置
|
|
24
|
+
- 開発ツールは `scripts/dev-tools/` に配置
|
|
@@ -8,7 +8,7 @@ import { dirname, resolve, join } from 'path';
|
|
|
8
8
|
import { fileURLToPath } from 'url';
|
|
9
9
|
|
|
10
10
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
11
|
-
const projectRoot = resolve(__dirname, '..');
|
|
11
|
+
const projectRoot = resolve(__dirname, '..', '..');
|
|
12
12
|
|
|
13
13
|
/**
|
|
14
14
|
* ファイルをコピーし、ディレクトリが存在しない場合は作成
|
|
@@ -11,7 +11,7 @@ import { fileURLToPath } from 'url';
|
|
|
11
11
|
const __filename = fileURLToPath(import.meta.url);
|
|
12
12
|
const __dirname = dirname(__filename);
|
|
13
13
|
|
|
14
|
-
const cliPath = join(__dirname, '..', 'dist', 'src', 'cli.js');
|
|
14
|
+
const cliPath = join(__dirname, '..', '..', 'dist', 'src', 'cli.js');
|
|
15
15
|
|
|
16
16
|
// Skip on Windows where chmod is not needed
|
|
17
17
|
if (process.platform === 'win32') {
|