@gitgov/core 1.0.1 → 1.0.2
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/README.md +31 -31
- package/dist/src/index.d.ts +5475 -21
- package/dist/src/index.js +7873 -22
- package/dist/src/index.js.map +1 -1
- package/package.json +17 -5
- package/dist/scripts/compile-json-to-types.d.ts +0 -11
- package/dist/scripts/compile-json-to-types.d.ts.map +0 -1
- package/dist/scripts/compile-json-to-types.js +0 -129
- package/dist/scripts/compile-json-to-types.js.map +0 -1
- package/dist/scripts/diagnose-duplicates.d.ts +0 -7
- package/dist/scripts/diagnose-duplicates.d.ts.map +0 -1
- package/dist/scripts/diagnose-duplicates.js +0 -72
- package/dist/scripts/diagnose-duplicates.js.map +0 -1
- package/dist/scripts/generate-indexes.d.ts +0 -22
- package/dist/scripts/generate-indexes.d.ts.map +0 -1
- package/dist/scripts/generate-indexes.js +0 -168
- package/dist/scripts/generate-indexes.js.map +0 -1
- package/dist/scripts/sync-schemas.d.ts +0 -10
- package/dist/scripts/sync-schemas.d.ts.map +0 -1
- package/dist/scripts/sync-schemas.js +0 -84
- package/dist/scripts/sync-schemas.js.map +0 -1
- package/dist/scripts/sync-workflow-configs.d.ts +0 -11
- package/dist/scripts/sync-workflow-configs.d.ts.map +0 -1
- package/dist/scripts/sync-workflow-configs.js +0 -61
- package/dist/scripts/sync-workflow-configs.js.map +0 -1
- package/dist/scripts/update-diagram.d.ts +0 -7
- package/dist/scripts/update-diagram.d.ts.map +0 -1
- package/dist/scripts/update-diagram.js +0 -47
- package/dist/scripts/update-diagram.js.map +0 -1
- package/dist/scripts/validate-schemas.d.ts +0 -18
- package/dist/scripts/validate-schemas.d.ts.map +0 -1
- package/dist/scripts/validate-schemas.js +0 -313
- package/dist/scripts/validate-schemas.js.map +0 -1
- package/dist/src/adapters/backlog_adapter/backlog_adapter.integration.test.d.ts +0 -2
- package/dist/src/adapters/backlog_adapter/backlog_adapter.integration.test.d.ts.map +0 -1
- package/dist/src/adapters/backlog_adapter/backlog_adapter.integration.test.js +0 -507
- package/dist/src/adapters/backlog_adapter/backlog_adapter.integration.test.js.map +0 -1
- package/dist/src/adapters/backlog_adapter/backlog_adapter.test.d.ts +0 -2
- package/dist/src/adapters/backlog_adapter/backlog_adapter.test.d.ts.map +0 -1
- package/dist/src/adapters/backlog_adapter/backlog_adapter.test.js +0 -1282
- package/dist/src/adapters/backlog_adapter/backlog_adapter.test.js.map +0 -1
- package/dist/src/adapters/backlog_adapter/backlog_adapter_e2e.test.d.ts +0 -10
- package/dist/src/adapters/backlog_adapter/backlog_adapter_e2e.test.d.ts.map +0 -1
- package/dist/src/adapters/backlog_adapter/backlog_adapter_e2e.test.js +0 -144
- package/dist/src/adapters/backlog_adapter/backlog_adapter_e2e.test.js.map +0 -1
- package/dist/src/adapters/backlog_adapter/index.d.ts +0 -213
- package/dist/src/adapters/backlog_adapter/index.d.ts.map +0 -1
- package/dist/src/adapters/backlog_adapter/index.js +0 -924
- package/dist/src/adapters/backlog_adapter/index.js.map +0 -1
- package/dist/src/adapters/changelog_adapter/changelog_adapter.test.d.ts +0 -2
- package/dist/src/adapters/changelog_adapter/changelog_adapter.test.d.ts.map +0 -1
- package/dist/src/adapters/changelog_adapter/changelog_adapter.test.js +0 -505
- package/dist/src/adapters/changelog_adapter/changelog_adapter.test.js.map +0 -1
- package/dist/src/adapters/changelog_adapter/index.d.ts +0 -101
- package/dist/src/adapters/changelog_adapter/index.d.ts.map +0 -1
- package/dist/src/adapters/changelog_adapter/index.js +0 -197
- package/dist/src/adapters/changelog_adapter/index.js.map +0 -1
- package/dist/src/adapters/execution_adapter/execution_adapter.test.d.ts +0 -2
- package/dist/src/adapters/execution_adapter/execution_adapter.test.d.ts.map +0 -1
- package/dist/src/adapters/execution_adapter/execution_adapter.test.js +0 -266
- package/dist/src/adapters/execution_adapter/execution_adapter.test.js.map +0 -1
- package/dist/src/adapters/execution_adapter/index.d.ts +0 -90
- package/dist/src/adapters/execution_adapter/index.d.ts.map +0 -1
- package/dist/src/adapters/execution_adapter/index.js +0 -150
- package/dist/src/adapters/execution_adapter/index.js.map +0 -1
- package/dist/src/adapters/feedback_adapter/feedback_adapter.test.d.ts +0 -2
- package/dist/src/adapters/feedback_adapter/feedback_adapter.test.d.ts.map +0 -1
- package/dist/src/adapters/feedback_adapter/feedback_adapter.test.js +0 -256
- package/dist/src/adapters/feedback_adapter/feedback_adapter.test.js.map +0 -1
- package/dist/src/adapters/feedback_adapter/index.d.ts +0 -95
- package/dist/src/adapters/feedback_adapter/index.d.ts.map +0 -1
- package/dist/src/adapters/feedback_adapter/index.js +0 -192
- package/dist/src/adapters/feedback_adapter/index.js.map +0 -1
- package/dist/src/adapters/identity_adapter/identity_adapter.test.d.ts +0 -2
- package/dist/src/adapters/identity_adapter/identity_adapter.test.d.ts.map +0 -1
- package/dist/src/adapters/identity_adapter/identity_adapter.test.js +0 -624
- package/dist/src/adapters/identity_adapter/identity_adapter.test.js.map +0 -1
- package/dist/src/adapters/identity_adapter/index.d.ts +0 -82
- package/dist/src/adapters/identity_adapter/index.d.ts.map +0 -1
- package/dist/src/adapters/identity_adapter/index.js +0 -336
- package/dist/src/adapters/identity_adapter/index.js.map +0 -1
- package/dist/src/adapters/index.d.ts +0 -10
- package/dist/src/adapters/index.d.ts.map +0 -1
- package/dist/src/adapters/index.js +0 -10
- package/dist/src/adapters/index.js.map +0 -1
- package/dist/src/adapters/indexer_adapter/index.d.ts +0 -214
- package/dist/src/adapters/indexer_adapter/index.d.ts.map +0 -1
- package/dist/src/adapters/indexer_adapter/index.js +0 -643
- package/dist/src/adapters/indexer_adapter/index.js.map +0 -1
- package/dist/src/adapters/indexer_adapter/indexer_adapter.test.d.ts +0 -2
- package/dist/src/adapters/indexer_adapter/indexer_adapter.test.d.ts.map +0 -1
- package/dist/src/adapters/indexer_adapter/indexer_adapter.test.js +0 -409
- package/dist/src/adapters/indexer_adapter/indexer_adapter.test.js.map +0 -1
- package/dist/src/adapters/metrics_adapter/index.d.ts +0 -189
- package/dist/src/adapters/metrics_adapter/index.d.ts.map +0 -1
- package/dist/src/adapters/metrics_adapter/index.js +0 -592
- package/dist/src/adapters/metrics_adapter/index.js.map +0 -1
- package/dist/src/adapters/metrics_adapter/metrics_adapter.test.d.ts +0 -2
- package/dist/src/adapters/metrics_adapter/metrics_adapter.test.d.ts.map +0 -1
- package/dist/src/adapters/metrics_adapter/metrics_adapter.test.js +0 -558
- package/dist/src/adapters/metrics_adapter/metrics_adapter.test.js.map +0 -1
- package/dist/src/adapters/project_adapter/index.d.ts +0 -164
- package/dist/src/adapters/project_adapter/index.d.ts.map +0 -1
- package/dist/src/adapters/project_adapter/index.js +0 -445
- package/dist/src/adapters/project_adapter/index.js.map +0 -1
- package/dist/src/adapters/project_adapter/project_adapter.test.d.ts +0 -2
- package/dist/src/adapters/project_adapter/project_adapter.test.d.ts.map +0 -1
- package/dist/src/adapters/project_adapter/project_adapter.test.js +0 -627
- package/dist/src/adapters/project_adapter/project_adapter.test.js.map +0 -1
- package/dist/src/adapters/workflow_methodology_adapter/index.d.ts +0 -75
- package/dist/src/adapters/workflow_methodology_adapter/index.d.ts.map +0 -1
- package/dist/src/adapters/workflow_methodology_adapter/index.js +0 -205
- package/dist/src/adapters/workflow_methodology_adapter/index.js.map +0 -1
- package/dist/src/adapters/workflow_methodology_adapter/workflow_methodology_adapter.test.d.ts +0 -2
- package/dist/src/adapters/workflow_methodology_adapter/workflow_methodology_adapter.test.d.ts.map +0 -1
- package/dist/src/adapters/workflow_methodology_adapter/workflow_methodology_adapter.test.js +0 -463
- package/dist/src/adapters/workflow_methodology_adapter/workflow_methodology_adapter.test.js.map +0 -1
- package/dist/src/adapters/workflow_methodology_adapter/workflow_methodology_adapter_integration.test.d.ts +0 -2
- package/dist/src/adapters/workflow_methodology_adapter/workflow_methodology_adapter_integration.test.d.ts.map +0 -1
- package/dist/src/adapters/workflow_methodology_adapter/workflow_methodology_adapter_integration.test.js +0 -287
- package/dist/src/adapters/workflow_methodology_adapter/workflow_methodology_adapter_integration.test.js.map +0 -1
- package/dist/src/adapters/workflow_methodology_adapter/workflow_methodology_adapter_scrum_integration.test.d.ts +0 -2
- package/dist/src/adapters/workflow_methodology_adapter/workflow_methodology_adapter_scrum_integration.test.d.ts.map +0 -1
- package/dist/src/adapters/workflow_methodology_adapter/workflow_methodology_adapter_scrum_integration.test.js +0 -278
- package/dist/src/adapters/workflow_methodology_adapter/workflow_methodology_adapter_scrum_integration.test.js.map +0 -1
- package/dist/src/adapters/workflow_methodology_adapter/workflow_methodology_default.json +0 -188
- package/dist/src/adapters/workflow_methodology_adapter/workflow_methodology_scrum.json +0 -284
- package/dist/src/config_manager/config_manager.test.d.ts +0 -2
- package/dist/src/config_manager/config_manager.test.d.ts.map +0 -1
- package/dist/src/config_manager/config_manager.test.js +0 -321
- package/dist/src/config_manager/config_manager.test.js.map +0 -1
- package/dist/src/config_manager/index.d.ts +0 -107
- package/dist/src/config_manager/index.d.ts.map +0 -1
- package/dist/src/config_manager/index.js +0 -192
- package/dist/src/config_manager/index.js.map +0 -1
- package/dist/src/crypto/checksum.d.ts +0 -6
- package/dist/src/crypto/checksum.d.ts.map +0 -1
- package/dist/src/crypto/checksum.js +0 -38
- package/dist/src/crypto/checksum.js.map +0 -1
- package/dist/src/crypto/checksum.test.d.ts +0 -2
- package/dist/src/crypto/checksum.test.d.ts.map +0 -1
- package/dist/src/crypto/checksum.test.js +0 -167
- package/dist/src/crypto/checksum.test.js.map +0 -1
- package/dist/src/crypto/index.d.ts +0 -3
- package/dist/src/crypto/index.d.ts.map +0 -1
- package/dist/src/crypto/index.js +0 -3
- package/dist/src/crypto/index.js.map +0 -1
- package/dist/src/crypto/signatures.d.ts +0 -24
- package/dist/src/crypto/signatures.d.ts.map +0 -1
- package/dist/src/crypto/signatures.js +0 -67
- package/dist/src/crypto/signatures.js.map +0 -1
- package/dist/src/crypto/signatures.test.d.ts +0 -2
- package/dist/src/crypto/signatures.test.d.ts.map +0 -1
- package/dist/src/crypto/signatures.test.js +0 -378
- package/dist/src/crypto/signatures.test.js.map +0 -1
- package/dist/src/diagram_generator/diagram_generator.d.ts +0 -76
- package/dist/src/diagram_generator/diagram_generator.d.ts.map +0 -1
- package/dist/src/diagram_generator/diagram_generator.js +0 -233
- package/dist/src/diagram_generator/diagram_generator.js.map +0 -1
- package/dist/src/diagram_generator/graph_validator.d.ts +0 -19
- package/dist/src/diagram_generator/graph_validator.d.ts.map +0 -1
- package/dist/src/diagram_generator/graph_validator.js +0 -98
- package/dist/src/diagram_generator/graph_validator.js.map +0 -1
- package/dist/src/diagram_generator/index.d.ts +0 -4
- package/dist/src/diagram_generator/index.d.ts.map +0 -1
- package/dist/src/diagram_generator/index.js +0 -4
- package/dist/src/diagram_generator/index.js.map +0 -1
- package/dist/src/diagram_generator/mermaid_renderer.d.ts +0 -82
- package/dist/src/diagram_generator/mermaid_renderer.d.ts.map +0 -1
- package/dist/src/diagram_generator/mermaid_renderer.js +0 -306
- package/dist/src/diagram_generator/mermaid_renderer.js.map +0 -1
- package/dist/src/diagram_generator/relationship_analyzer.d.ts +0 -116
- package/dist/src/diagram_generator/relationship_analyzer.d.ts.map +0 -1
- package/dist/src/diagram_generator/relationship_analyzer.js +0 -381
- package/dist/src/diagram_generator/relationship_analyzer.js.map +0 -1
- package/dist/src/event_bus/event_bus.d.ts +0 -110
- package/dist/src/event_bus/event_bus.d.ts.map +0 -1
- package/dist/src/event_bus/event_bus.js +0 -161
- package/dist/src/event_bus/event_bus.js.map +0 -1
- package/dist/src/event_bus/event_bus.test.d.ts +0 -2
- package/dist/src/event_bus/event_bus.test.d.ts.map +0 -1
- package/dist/src/event_bus/event_bus.test.js +0 -332
- package/dist/src/event_bus/event_bus.test.js.map +0 -1
- package/dist/src/event_bus/event_bus_integration.test.d.ts +0 -2
- package/dist/src/event_bus/event_bus_integration.test.d.ts.map +0 -1
- package/dist/src/event_bus/event_bus_integration.test.js +0 -474
- package/dist/src/event_bus/event_bus_integration.test.js.map +0 -1
- package/dist/src/event_bus/index.d.ts +0 -3
- package/dist/src/event_bus/index.d.ts.map +0 -1
- package/dist/src/event_bus/index.js +0 -3
- package/dist/src/event_bus/index.js.map +0 -1
- package/dist/src/event_bus/types.d.ts +0 -203
- package/dist/src/event_bus/types.d.ts.map +0 -1
- package/dist/src/event_bus/types.js +0 -5
- package/dist/src/event_bus/types.js.map +0 -1
- package/dist/src/factories/actor_factory.d.ts +0 -6
- package/dist/src/factories/actor_factory.d.ts.map +0 -1
- package/dist/src/factories/actor_factory.js +0 -25
- package/dist/src/factories/actor_factory.js.map +0 -1
- package/dist/src/factories/actor_factory.test.d.ts +0 -2
- package/dist/src/factories/actor_factory.test.d.ts.map +0 -1
- package/dist/src/factories/actor_factory.test.js +0 -169
- package/dist/src/factories/actor_factory.test.js.map +0 -1
- package/dist/src/factories/agent_factory.d.ts +0 -6
- package/dist/src/factories/agent_factory.d.ts.map +0 -1
- package/dist/src/factories/agent_factory.js +0 -25
- package/dist/src/factories/agent_factory.js.map +0 -1
- package/dist/src/factories/agent_factory.test.d.ts +0 -2
- package/dist/src/factories/agent_factory.test.d.ts.map +0 -1
- package/dist/src/factories/agent_factory.test.js +0 -199
- package/dist/src/factories/agent_factory.test.js.map +0 -1
- package/dist/src/factories/changelog_factory.d.ts +0 -9
- package/dist/src/factories/changelog_factory.d.ts.map +0 -1
- package/dist/src/factories/changelog_factory.js +0 -46
- package/dist/src/factories/changelog_factory.js.map +0 -1
- package/dist/src/factories/changelog_factory.test.d.ts +0 -2
- package/dist/src/factories/changelog_factory.test.d.ts.map +0 -1
- package/dist/src/factories/changelog_factory.test.js +0 -368
- package/dist/src/factories/changelog_factory.test.js.map +0 -1
- package/dist/src/factories/cycle_factory.d.ts +0 -6
- package/dist/src/factories/cycle_factory.d.ts.map +0 -1
- package/dist/src/factories/cycle_factory.js +0 -28
- package/dist/src/factories/cycle_factory.js.map +0 -1
- package/dist/src/factories/cycle_factory.test.d.ts +0 -2
- package/dist/src/factories/cycle_factory.test.d.ts.map +0 -1
- package/dist/src/factories/cycle_factory.test.js +0 -175
- package/dist/src/factories/cycle_factory.test.js.map +0 -1
- package/dist/src/factories/execution_factory.d.ts +0 -9
- package/dist/src/factories/execution_factory.d.ts.map +0 -1
- package/dist/src/factories/execution_factory.js +0 -29
- package/dist/src/factories/execution_factory.js.map +0 -1
- package/dist/src/factories/execution_factory.test.d.ts +0 -2
- package/dist/src/factories/execution_factory.test.d.ts.map +0 -1
- package/dist/src/factories/execution_factory.test.js +0 -207
- package/dist/src/factories/execution_factory.test.js.map +0 -1
- package/dist/src/factories/feedback_factory.d.ts +0 -9
- package/dist/src/factories/feedback_factory.d.ts.map +0 -1
- package/dist/src/factories/feedback_factory.js +0 -30
- package/dist/src/factories/feedback_factory.js.map +0 -1
- package/dist/src/factories/feedback_factory.test.d.ts +0 -2
- package/dist/src/factories/feedback_factory.test.d.ts.map +0 -1
- package/dist/src/factories/feedback_factory.test.js +0 -256
- package/dist/src/factories/feedback_factory.test.js.map +0 -1
- package/dist/src/factories/index.d.ts +0 -9
- package/dist/src/factories/index.d.ts.map +0 -1
- package/dist/src/factories/index.js +0 -9
- package/dist/src/factories/index.js.map +0 -1
- package/dist/src/factories/task_factory.d.ts +0 -6
- package/dist/src/factories/task_factory.d.ts.map +0 -1
- package/dist/src/factories/task_factory.js +0 -30
- package/dist/src/factories/task_factory.js.map +0 -1
- package/dist/src/factories/task_factory.test.d.ts +0 -2
- package/dist/src/factories/task_factory.test.d.ts.map +0 -1
- package/dist/src/factories/task_factory.test.js +0 -197
- package/dist/src/factories/task_factory.test.js.map +0 -1
- package/dist/src/factories/workflow_methodology_factory.d.ts +0 -11
- package/dist/src/factories/workflow_methodology_factory.d.ts.map +0 -1
- package/dist/src/factories/workflow_methodology_factory.js +0 -173
- package/dist/src/factories/workflow_methodology_factory.js.map +0 -1
- package/dist/src/factories/workflow_methodology_factory.test.d.ts +0 -2
- package/dist/src/factories/workflow_methodology_factory.test.d.ts.map +0 -1
- package/dist/src/factories/workflow_methodology_factory.test.js +0 -244
- package/dist/src/factories/workflow_methodology_factory.test.js.map +0 -1
- package/dist/src/index.d.ts.map +0 -1
- package/dist/src/integration/cycles_tasks_integration.test.d.ts +0 -2
- package/dist/src/integration/cycles_tasks_integration.test.d.ts.map +0 -1
- package/dist/src/integration/cycles_tasks_integration.test.js +0 -258
- package/dist/src/integration/cycles_tasks_integration.test.js.map +0 -1
- package/dist/src/integration/schema_integration.test.d.ts +0 -8
- package/dist/src/integration/schema_integration.test.d.ts.map +0 -1
- package/dist/src/integration/schema_integration.test.js +0 -279
- package/dist/src/integration/schema_integration.test.js.map +0 -1
- package/dist/src/logger/index.d.ts +0 -2
- package/dist/src/logger/index.d.ts.map +0 -1
- package/dist/src/logger/index.js +0 -2
- package/dist/src/logger/index.js.map +0 -1
- package/dist/src/logger/logger.d.ts +0 -10
- package/dist/src/logger/logger.d.ts.map +0 -1
- package/dist/src/logger/logger.js +0 -48
- package/dist/src/logger/logger.js.map +0 -1
- package/dist/src/schemas/errors.d.ts +0 -28
- package/dist/src/schemas/errors.d.ts.map +0 -1
- package/dist/src/schemas/errors.js +0 -31
- package/dist/src/schemas/errors.js.map +0 -1
- package/dist/src/schemas/generated/actor_record_schema.json +0 -91
- package/dist/src/schemas/generated/agent_record_schema.json +0 -142
- package/dist/src/schemas/generated/changelog_record_schema.json +0 -227
- package/dist/src/schemas/generated/cycle_record_schema.json +0 -80
- package/dist/src/schemas/generated/embedded_metadata_schema.json +0 -318
- package/dist/src/schemas/generated/execution_record_schema.json +0 -89
- package/dist/src/schemas/generated/feedback_record_schema.json +0 -83
- package/dist/src/schemas/generated/index.d.ts +0 -2221
- package/dist/src/schemas/generated/index.d.ts.map +0 -1
- package/dist/src/schemas/generated/index.js +0 -48
- package/dist/src/schemas/generated/index.js.map +0 -1
- package/dist/src/schemas/generated/task_record_schema.json +0 -103
- package/dist/src/schemas/generated/workflow_methodology_record_schema.json +0 -393
- package/dist/src/schemas/index.d.ts +0 -4
- package/dist/src/schemas/index.d.ts.map +0 -1
- package/dist/src/schemas/index.js +0 -4
- package/dist/src/schemas/index.js.map +0 -1
- package/dist/src/schemas/schema_cache.d.ts +0 -39
- package/dist/src/schemas/schema_cache.d.ts.map +0 -1
- package/dist/src/schemas/schema_cache.js +0 -109
- package/dist/src/schemas/schema_cache.js.map +0 -1
- package/dist/src/schemas/schema_cache.test.d.ts +0 -2
- package/dist/src/schemas/schema_cache.test.d.ts.map +0 -1
- package/dist/src/schemas/schema_cache.test.js +0 -163
- package/dist/src/schemas/schema_cache.test.js.map +0 -1
- package/dist/src/store/index.d.ts +0 -2
- package/dist/src/store/index.d.ts.map +0 -1
- package/dist/src/store/index.js +0 -2
- package/dist/src/store/index.js.map +0 -1
- package/dist/src/store/record_store.d.ts +0 -30
- package/dist/src/store/record_store.d.ts.map +0 -1
- package/dist/src/store/record_store.js +0 -83
- package/dist/src/store/record_store.js.map +0 -1
- package/dist/src/store/record_store.test.d.ts +0 -2
- package/dist/src/store/record_store.test.d.ts.map +0 -1
- package/dist/src/store/record_store.test.js +0 -646
- package/dist/src/store/record_store.test.js.map +0 -1
- package/dist/src/types/common.types.d.ts +0 -43
- package/dist/src/types/common.types.d.ts.map +0 -1
- package/dist/src/types/common.types.js +0 -13
- package/dist/src/types/common.types.js.map +0 -1
- package/dist/src/types/embedded.types.d.ts +0 -17
- package/dist/src/types/embedded.types.d.ts.map +0 -1
- package/dist/src/types/embedded.types.js +0 -2
- package/dist/src/types/embedded.types.js.map +0 -1
- package/dist/src/types/generated/actor_record.d.ts +0 -45
- package/dist/src/types/generated/actor_record.d.ts.map +0 -1
- package/dist/src/types/generated/actor_record.js +0 -7
- package/dist/src/types/generated/actor_record.js.map +0 -1
- package/dist/src/types/generated/agent_record.d.ts +0 -40
- package/dist/src/types/generated/agent_record.d.ts.map +0 -1
- package/dist/src/types/generated/agent_record.js +0 -7
- package/dist/src/types/generated/agent_record.js.map +0 -1
- package/dist/src/types/generated/changelog_record.d.ts +0 -100
- package/dist/src/types/generated/changelog_record.d.ts.map +0 -1
- package/dist/src/types/generated/changelog_record.js +0 -7
- package/dist/src/types/generated/changelog_record.js.map +0 -1
- package/dist/src/types/generated/cycle_record.d.ts +0 -36
- package/dist/src/types/generated/cycle_record.d.ts.map +0 -1
- package/dist/src/types/generated/cycle_record.js +0 -7
- package/dist/src/types/generated/cycle_record.js.map +0 -1
- package/dist/src/types/generated/embedded_metadata.d.ts +0 -94
- package/dist/src/types/generated/embedded_metadata.d.ts.map +0 -1
- package/dist/src/types/generated/embedded_metadata.js +0 -7
- package/dist/src/types/generated/embedded_metadata.js.map +0 -1
- package/dist/src/types/generated/execution_record.d.ts +0 -39
- package/dist/src/types/generated/execution_record.d.ts.map +0 -1
- package/dist/src/types/generated/execution_record.js +0 -7
- package/dist/src/types/generated/execution_record.js.map +0 -1
- package/dist/src/types/generated/feedback_record.d.ts +0 -43
- package/dist/src/types/generated/feedback_record.d.ts.map +0 -1
- package/dist/src/types/generated/feedback_record.js +0 -7
- package/dist/src/types/generated/feedback_record.js.map +0 -1
- package/dist/src/types/generated/index.d.ts +0 -15
- package/dist/src/types/generated/index.d.ts.map +0 -1
- package/dist/src/types/generated/index.js +0 -15
- package/dist/src/types/generated/index.js.map +0 -1
- package/dist/src/types/generated/task_record.d.ts +0 -47
- package/dist/src/types/generated/task_record.d.ts.map +0 -1
- package/dist/src/types/generated/task_record.js +0 -7
- package/dist/src/types/generated/task_record.js.map +0 -1
- package/dist/src/types/generated/workflow_methodology_record.d.ts +0 -211
- package/dist/src/types/generated/workflow_methodology_record.d.ts.map +0 -1
- package/dist/src/types/generated/workflow_methodology_record.js +0 -7
- package/dist/src/types/generated/workflow_methodology_record.js.map +0 -1
- package/dist/src/types/index.d.ts +0 -4
- package/dist/src/types/index.d.ts.map +0 -1
- package/dist/src/types/index.js +0 -4
- package/dist/src/types/index.js.map +0 -1
- package/dist/src/utils/id_generator.d.ts +0 -44
- package/dist/src/utils/id_generator.d.ts.map +0 -1
- package/dist/src/utils/id_generator.js +0 -107
- package/dist/src/utils/id_generator.js.map +0 -1
- package/dist/src/utils/id_generator.test.d.ts +0 -2
- package/dist/src/utils/id_generator.test.d.ts.map +0 -1
- package/dist/src/utils/id_generator.test.js +0 -100
- package/dist/src/utils/id_generator.test.js.map +0 -1
- package/dist/src/utils/index.d.ts +0 -2
- package/dist/src/utils/index.d.ts.map +0 -1
- package/dist/src/utils/index.js +0 -3
- package/dist/src/utils/index.js.map +0 -1
- package/dist/src/validation/actor_validator.d.ts +0 -21
- package/dist/src/validation/actor_validator.d.ts.map +0 -1
- package/dist/src/validation/actor_validator.js +0 -48
- package/dist/src/validation/actor_validator.js.map +0 -1
- package/dist/src/validation/actor_validator.test.d.ts +0 -2
- package/dist/src/validation/actor_validator.test.d.ts.map +0 -1
- package/dist/src/validation/actor_validator.test.js +0 -83
- package/dist/src/validation/actor_validator.test.js.map +0 -1
- package/dist/src/validation/agent_validator.d.ts +0 -30
- package/dist/src/validation/agent_validator.d.ts.map +0 -1
- package/dist/src/validation/agent_validator.js +0 -66
- package/dist/src/validation/agent_validator.js.map +0 -1
- package/dist/src/validation/agent_validator.test.d.ts +0 -2
- package/dist/src/validation/agent_validator.test.d.ts.map +0 -1
- package/dist/src/validation/agent_validator.test.js +0 -73
- package/dist/src/validation/agent_validator.test.js.map +0 -1
- package/dist/src/validation/changelog_validator.d.ts +0 -23
- package/dist/src/validation/changelog_validator.d.ts.map +0 -1
- package/dist/src/validation/changelog_validator.js +0 -58
- package/dist/src/validation/changelog_validator.js.map +0 -1
- package/dist/src/validation/changelog_validator.test.d.ts +0 -2
- package/dist/src/validation/changelog_validator.test.d.ts.map +0 -1
- package/dist/src/validation/changelog_validator.test.js +0 -401
- package/dist/src/validation/changelog_validator.test.js.map +0 -1
- package/dist/src/validation/common.d.ts +0 -10
- package/dist/src/validation/common.d.ts.map +0 -1
- package/dist/src/validation/common.js +0 -12
- package/dist/src/validation/common.js.map +0 -1
- package/dist/src/validation/cycle_validator.d.ts +0 -24
- package/dist/src/validation/cycle_validator.d.ts.map +0 -1
- package/dist/src/validation/cycle_validator.js +0 -51
- package/dist/src/validation/cycle_validator.js.map +0 -1
- package/dist/src/validation/cycle_validator.test.d.ts +0 -2
- package/dist/src/validation/cycle_validator.test.d.ts.map +0 -1
- package/dist/src/validation/cycle_validator.test.js +0 -182
- package/dist/src/validation/cycle_validator.test.js.map +0 -1
- package/dist/src/validation/embedded_metadata_validator.d.ts +0 -26
- package/dist/src/validation/embedded_metadata_validator.d.ts.map +0 -1
- package/dist/src/validation/embedded_metadata_validator.js +0 -122
- package/dist/src/validation/embedded_metadata_validator.js.map +0 -1
- package/dist/src/validation/embedded_metadata_validator.test.d.ts +0 -2
- package/dist/src/validation/embedded_metadata_validator.test.d.ts.map +0 -1
- package/dist/src/validation/embedded_metadata_validator.test.js +0 -316
- package/dist/src/validation/embedded_metadata_validator.test.js.map +0 -1
- package/dist/src/validation/errors.d.ts +0 -67
- package/dist/src/validation/errors.d.ts.map +0 -1
- package/dist/src/validation/errors.js +0 -83
- package/dist/src/validation/errors.js.map +0 -1
- package/dist/src/validation/execution_validator.d.ts +0 -23
- package/dist/src/validation/execution_validator.d.ts.map +0 -1
- package/dist/src/validation/execution_validator.js +0 -58
- package/dist/src/validation/execution_validator.js.map +0 -1
- package/dist/src/validation/execution_validator.test.d.ts +0 -2
- package/dist/src/validation/execution_validator.test.d.ts.map +0 -1
- package/dist/src/validation/execution_validator.test.js +0 -167
- package/dist/src/validation/execution_validator.test.js.map +0 -1
- package/dist/src/validation/feedback_validator.d.ts +0 -23
- package/dist/src/validation/feedback_validator.d.ts.map +0 -1
- package/dist/src/validation/feedback_validator.js +0 -58
- package/dist/src/validation/feedback_validator.js.map +0 -1
- package/dist/src/validation/feedback_validator.test.d.ts +0 -2
- package/dist/src/validation/feedback_validator.test.d.ts.map +0 -1
- package/dist/src/validation/feedback_validator.test.js +0 -131
- package/dist/src/validation/feedback_validator.test.js.map +0 -1
- package/dist/src/validation/index.d.ts +0 -11
- package/dist/src/validation/index.d.ts.map +0 -1
- package/dist/src/validation/index.js +0 -10
- package/dist/src/validation/index.js.map +0 -1
- package/dist/src/validation/task_validator.d.ts +0 -24
- package/dist/src/validation/task_validator.d.ts.map +0 -1
- package/dist/src/validation/task_validator.js +0 -50
- package/dist/src/validation/task_validator.js.map +0 -1
- package/dist/src/validation/task_validator.test.d.ts +0 -2
- package/dist/src/validation/task_validator.test.d.ts.map +0 -1
- package/dist/src/validation/task_validator.test.js +0 -185
- package/dist/src/validation/task_validator.test.js.map +0 -1
- package/dist/src/validation/workflow_methodology_validator.d.ts +0 -32
- package/dist/src/validation/workflow_methodology_validator.d.ts.map +0 -1
- package/dist/src/validation/workflow_methodology_validator.js +0 -91
- package/dist/src/validation/workflow_methodology_validator.js.map +0 -1
- package/dist/src/validation/workflow_methodology_validator.test.d.ts +0 -2
- package/dist/src/validation/workflow_methodology_validator.test.d.ts.map +0 -1
- package/dist/src/validation/workflow_methodology_validator.test.js +0 -229
- package/dist/src/validation/workflow_methodology_validator.test.js.map +0 -1
|
@@ -1,381 +0,0 @@
|
|
|
1
|
-
import { GraphValidator } from './graph_validator';
|
|
2
|
-
export class CircularDependencyError extends Error {
|
|
3
|
-
constructor(message) {
|
|
4
|
-
super(message);
|
|
5
|
-
this.name = 'CircularDependencyError';
|
|
6
|
-
}
|
|
7
|
-
}
|
|
8
|
-
export class RelationshipAnalyzer {
|
|
9
|
-
/**
|
|
10
|
-
* Analyzes relationships between cycles and tasks to build a complete graph
|
|
11
|
-
*/
|
|
12
|
-
analyzeRelationships(cycles, tasks) {
|
|
13
|
-
// Validate record integrity using specialized validator
|
|
14
|
-
GraphValidator.validateRecordIntegrity(cycles, tasks);
|
|
15
|
-
const rawGraph = this.buildRawGraph(cycles, tasks);
|
|
16
|
-
const cleanGraph = this.processAndValidateGraph(rawGraph);
|
|
17
|
-
return this.createRelationshipGraph(rawGraph, cleanGraph);
|
|
18
|
-
}
|
|
19
|
-
/**
|
|
20
|
-
* Builds the initial graph with potential duplicates
|
|
21
|
-
*/
|
|
22
|
-
buildRawGraph(cycles, tasks) {
|
|
23
|
-
const rawNodes = this.buildNodes(cycles, tasks);
|
|
24
|
-
const rawEdges = this.buildEdges(cycles, tasks, rawNodes);
|
|
25
|
-
return { nodes: rawNodes, edges: rawEdges };
|
|
26
|
-
}
|
|
27
|
-
/**
|
|
28
|
-
* Processes raw graph to remove duplicates and validate structure
|
|
29
|
-
*/
|
|
30
|
-
processAndValidateGraph(rawGraph) {
|
|
31
|
-
// Detect and report duplicates as warnings
|
|
32
|
-
this.reportDuplicateWarnings(rawGraph.nodes, rawGraph.edges);
|
|
33
|
-
// Deduplicate nodes and edges
|
|
34
|
-
const nodes = this.deduplicateNodes(rawGraph.nodes);
|
|
35
|
-
const edges = this.deduplicateEdges(rawGraph.edges);
|
|
36
|
-
// Detect circular dependencies
|
|
37
|
-
this.detectCircularDependencies(edges);
|
|
38
|
-
return { nodes, edges };
|
|
39
|
-
}
|
|
40
|
-
/**
|
|
41
|
-
* Creates the final RelationshipGraph with metadata
|
|
42
|
-
*/
|
|
43
|
-
createRelationshipGraph(rawGraph, cleanGraph) {
|
|
44
|
-
return {
|
|
45
|
-
nodes: cleanGraph.nodes,
|
|
46
|
-
edges: cleanGraph.edges,
|
|
47
|
-
metadata: {
|
|
48
|
-
nodeCount: cleanGraph.nodes.length,
|
|
49
|
-
edgeCount: cleanGraph.edges.length,
|
|
50
|
-
generatedAt: new Date().toISOString(),
|
|
51
|
-
duplicatesRemoved: {
|
|
52
|
-
nodes: rawGraph.nodes.length - cleanGraph.nodes.length,
|
|
53
|
-
edges: rawGraph.edges.length - cleanGraph.edges.length,
|
|
54
|
-
},
|
|
55
|
-
},
|
|
56
|
-
};
|
|
57
|
-
}
|
|
58
|
-
/**
|
|
59
|
-
* Generates clean node ID for Mermaid syntax (removes timestamp, converts hyphens)
|
|
60
|
-
*/
|
|
61
|
-
generateNodeId(record) {
|
|
62
|
-
return record.id
|
|
63
|
-
.replace(/^\d+-/, '') // Remove timestamp prefix
|
|
64
|
-
.replace(/-/g, '_'); // Convert hyphens to underscores
|
|
65
|
-
}
|
|
66
|
-
/**
|
|
67
|
-
* Builds all nodes from cycles and tasks
|
|
68
|
-
*/
|
|
69
|
-
buildNodes(cycles, tasks) {
|
|
70
|
-
const nodes = [];
|
|
71
|
-
// Add cycle nodes
|
|
72
|
-
for (const cycle of cycles) {
|
|
73
|
-
nodes.push({
|
|
74
|
-
id: this.generateNodeId(cycle),
|
|
75
|
-
type: 'cycle',
|
|
76
|
-
title: cycle.title,
|
|
77
|
-
status: cycle.status,
|
|
78
|
-
tags: cycle.tags || [],
|
|
79
|
-
originalId: cycle.id,
|
|
80
|
-
});
|
|
81
|
-
}
|
|
82
|
-
// Add task nodes (both epic and regular)
|
|
83
|
-
for (const task of tasks) {
|
|
84
|
-
const isEpic = this.isEpicTask(task);
|
|
85
|
-
// Use title field for task display
|
|
86
|
-
const title = task.title || 'Untitled Task';
|
|
87
|
-
nodes.push({
|
|
88
|
-
id: this.generateNodeId(task),
|
|
89
|
-
type: isEpic ? 'epic-task' : 'task',
|
|
90
|
-
title,
|
|
91
|
-
status: task.status,
|
|
92
|
-
tags: task.tags,
|
|
93
|
-
originalId: task.id,
|
|
94
|
-
});
|
|
95
|
-
}
|
|
96
|
-
return nodes;
|
|
97
|
-
}
|
|
98
|
-
/**
|
|
99
|
-
* Builds all hierarchical edges from protocol relationships
|
|
100
|
-
*/
|
|
101
|
-
buildEdges(cycles, _tasks, nodes) {
|
|
102
|
-
const edges = [];
|
|
103
|
-
const nodeMap = new Map(nodes.map(n => [n.originalId, n.id]));
|
|
104
|
-
// Build cycle -> child cycle relationships
|
|
105
|
-
for (const cycle of cycles) {
|
|
106
|
-
if (cycle.childCycleIds) {
|
|
107
|
-
for (const childId of cycle.childCycleIds) {
|
|
108
|
-
const fromId = nodeMap.get(cycle.id);
|
|
109
|
-
const toId = nodeMap.get(childId);
|
|
110
|
-
if (fromId && toId) {
|
|
111
|
-
edges.push({
|
|
112
|
-
from: fromId,
|
|
113
|
-
to: toId,
|
|
114
|
-
type: 'hierarchy',
|
|
115
|
-
});
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
// Build cycle -> task relationships
|
|
120
|
-
if (cycle.taskIds) {
|
|
121
|
-
for (const taskId of cycle.taskIds) {
|
|
122
|
-
const fromId = nodeMap.get(cycle.id);
|
|
123
|
-
const toId = nodeMap.get(taskId);
|
|
124
|
-
if (fromId && toId) {
|
|
125
|
-
edges.push({
|
|
126
|
-
from: fromId,
|
|
127
|
-
to: toId,
|
|
128
|
-
type: 'hierarchy',
|
|
129
|
-
});
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
return edges;
|
|
135
|
-
}
|
|
136
|
-
/**
|
|
137
|
-
* Checks if a task is an epic based on tags
|
|
138
|
-
*/
|
|
139
|
-
isEpicTask(task) {
|
|
140
|
-
return task.tags?.some(tag => tag.startsWith('epic:')) ?? false;
|
|
141
|
-
}
|
|
142
|
-
/**
|
|
143
|
-
* Detects circular dependencies in the graph
|
|
144
|
-
*/
|
|
145
|
-
detectCircularDependencies(edges) {
|
|
146
|
-
const graph = new Map();
|
|
147
|
-
// Build adjacency list
|
|
148
|
-
for (const edge of edges) {
|
|
149
|
-
if (!graph.has(edge.from)) {
|
|
150
|
-
graph.set(edge.from, []);
|
|
151
|
-
}
|
|
152
|
-
graph.get(edge.from).push(edge.to);
|
|
153
|
-
}
|
|
154
|
-
// DFS to detect cycles with path tracking
|
|
155
|
-
const visited = new Set();
|
|
156
|
-
const recursionStack = new Set();
|
|
157
|
-
const path = [];
|
|
158
|
-
for (const node of graph.keys()) {
|
|
159
|
-
if (!visited.has(node)) {
|
|
160
|
-
const cyclePath = this.findCycleDFS(node, graph, visited, recursionStack, path);
|
|
161
|
-
if (cyclePath.length > 0) {
|
|
162
|
-
const cycleDescription = this.formatCycleError(cyclePath);
|
|
163
|
-
throw new CircularDependencyError(cycleDescription);
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
/**
|
|
169
|
-
* DFS helper for circular dependency detection with path tracking
|
|
170
|
-
*/
|
|
171
|
-
findCycleDFS(node, graph, visited, recursionStack, path) {
|
|
172
|
-
visited.add(node);
|
|
173
|
-
recursionStack.add(node);
|
|
174
|
-
path.push(node);
|
|
175
|
-
const neighbors = graph.get(node) || [];
|
|
176
|
-
for (const neighbor of neighbors) {
|
|
177
|
-
if (!visited.has(neighbor)) {
|
|
178
|
-
const cyclePath = this.findCycleDFS(neighbor, graph, visited, recursionStack, path);
|
|
179
|
-
if (cyclePath.length > 0) {
|
|
180
|
-
return cyclePath;
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
else if (recursionStack.has(neighbor)) {
|
|
184
|
-
// Found a cycle - extract the cycle path
|
|
185
|
-
const cycleStartIndex = path.indexOf(neighbor);
|
|
186
|
-
return path.slice(cycleStartIndex).concat([neighbor]);
|
|
187
|
-
}
|
|
188
|
-
}
|
|
189
|
-
recursionStack.delete(node);
|
|
190
|
-
path.pop();
|
|
191
|
-
return [];
|
|
192
|
-
}
|
|
193
|
-
/**
|
|
194
|
-
* Formats a circular dependency error with helpful context
|
|
195
|
-
*/
|
|
196
|
-
formatCycleError(cyclePath) {
|
|
197
|
-
const cycleNodes = cyclePath.slice(0, -1); // Remove duplicate at end
|
|
198
|
-
const nodeNames = cycleNodes.map(nodeId => {
|
|
199
|
-
// Try to extract readable name from node ID
|
|
200
|
-
const cleanId = nodeId.replace(/^(cycle_|task_)/, '').replace(/_/g, '-');
|
|
201
|
-
return cleanId;
|
|
202
|
-
});
|
|
203
|
-
let message = `Circular dependency detected in GitGovernance entities:\n\n`;
|
|
204
|
-
message += `🔄 Dependency Cycle:\n`;
|
|
205
|
-
for (let i = 0; i < cycleNodes.length; i++) {
|
|
206
|
-
const current = nodeNames[i];
|
|
207
|
-
const next = nodeNames[(i + 1) % nodeNames.length];
|
|
208
|
-
message += ` ${current} → ${next}\n`;
|
|
209
|
-
}
|
|
210
|
-
message += `\n💡 To fix this issue:\n`;
|
|
211
|
-
message += ` 1. Review the childCycleIds in these cycle files:\n`;
|
|
212
|
-
cycleNodes.forEach(nodeId => {
|
|
213
|
-
const cleanId = nodeId.replace(/^cycle_/, '').replace(/_/g, '-');
|
|
214
|
-
message += ` - .gitgov/cycles/${cleanId}.json\n`;
|
|
215
|
-
});
|
|
216
|
-
message += ` 2. Remove one of the circular references to break the cycle\n`;
|
|
217
|
-
message += ` 3. Consider if the dependency relationship is actually needed\n`;
|
|
218
|
-
return message;
|
|
219
|
-
}
|
|
220
|
-
/**
|
|
221
|
-
* Reports duplicate nodes and edges as console warnings
|
|
222
|
-
*/
|
|
223
|
-
reportDuplicateWarnings(nodes, edges) {
|
|
224
|
-
// Analyze node duplicates
|
|
225
|
-
const nodeCount = new Map();
|
|
226
|
-
for (const node of nodes) {
|
|
227
|
-
const current = nodeCount.get(node.id) || { count: 0, sources: [] };
|
|
228
|
-
current.count++;
|
|
229
|
-
current.sources.push(node.originalId);
|
|
230
|
-
nodeCount.set(node.id, current);
|
|
231
|
-
}
|
|
232
|
-
const duplicateNodes = Array.from(nodeCount.entries())
|
|
233
|
-
.filter(([_, data]) => data.count > 1);
|
|
234
|
-
// Analyze edge duplicates
|
|
235
|
-
const edgeCount = new Map();
|
|
236
|
-
for (const edge of edges) {
|
|
237
|
-
const edgeKey = `${edge.from}->${edge.to}`;
|
|
238
|
-
edgeCount.set(edgeKey, (edgeCount.get(edgeKey) || 0) + 1);
|
|
239
|
-
}
|
|
240
|
-
const duplicateEdges = Array.from(edgeCount.entries())
|
|
241
|
-
.filter(([_, count]) => count > 1);
|
|
242
|
-
// Report warnings if duplicates found
|
|
243
|
-
if (duplicateNodes.length > 0 || duplicateEdges.length > 0) {
|
|
244
|
-
console.warn('\n⚠️ GitGovernance Data Quality Warnings:');
|
|
245
|
-
if (duplicateNodes.length > 0) {
|
|
246
|
-
console.warn('\n📦 Duplicate Nodes Detected:');
|
|
247
|
-
duplicateNodes.forEach(([id, data]) => {
|
|
248
|
-
const cleanSources = [...new Set(data.sources)]; // Remove duplicate sources
|
|
249
|
-
console.warn(` • ${id} (appears ${data.count} times)`);
|
|
250
|
-
if (cleanSources.length > 1) {
|
|
251
|
-
console.warn(` Sources: ${cleanSources.join(', ')}`);
|
|
252
|
-
console.warn(` 💡 Fix: Check for duplicate cycle/task IDs in .gitgov/ files`);
|
|
253
|
-
}
|
|
254
|
-
else {
|
|
255
|
-
console.warn(` Source: ${cleanSources[0]} (same ID referenced multiple times)`);
|
|
256
|
-
console.warn(` 💡 Fix: Check for duplicate childCycleIds/taskIds references`);
|
|
257
|
-
}
|
|
258
|
-
});
|
|
259
|
-
}
|
|
260
|
-
if (duplicateEdges.length > 0) {
|
|
261
|
-
console.warn('\n🔗 Duplicate Edges Detected:');
|
|
262
|
-
duplicateEdges.forEach(([edge, count]) => {
|
|
263
|
-
console.warn(` • ${edge} (appears ${count} times)`);
|
|
264
|
-
});
|
|
265
|
-
console.warn(' 💡 Fix: Check for duplicate references in childCycleIds/taskIds arrays');
|
|
266
|
-
}
|
|
267
|
-
console.warn('\n✂️ Auto-deduplication: Duplicates will be removed from the generated diagram');
|
|
268
|
-
console.warn('📋 Recommendation: Run `gitgov lint` to identify and fix data quality issues\n');
|
|
269
|
-
}
|
|
270
|
-
}
|
|
271
|
-
/**
|
|
272
|
-
* Removes duplicate nodes based on their ID (O(n) performance)
|
|
273
|
-
*/
|
|
274
|
-
deduplicateNodes(nodes) {
|
|
275
|
-
const nodeMap = new Map();
|
|
276
|
-
// Use Map to automatically handle deduplication while preserving first occurrence
|
|
277
|
-
for (const node of nodes) {
|
|
278
|
-
if (!nodeMap.has(node.id)) {
|
|
279
|
-
nodeMap.set(node.id, node);
|
|
280
|
-
}
|
|
281
|
-
}
|
|
282
|
-
return Array.from(nodeMap.values());
|
|
283
|
-
}
|
|
284
|
-
/**
|
|
285
|
-
* Removes duplicate edges based on from-to combination (O(n) performance)
|
|
286
|
-
*/
|
|
287
|
-
deduplicateEdges(edges) {
|
|
288
|
-
const edgeMap = new Map();
|
|
289
|
-
for (const edge of edges) {
|
|
290
|
-
const edgeKey = `${edge.from}->${edge.to}`;
|
|
291
|
-
if (!edgeMap.has(edgeKey)) {
|
|
292
|
-
edgeMap.set(edgeKey, edge);
|
|
293
|
-
}
|
|
294
|
-
}
|
|
295
|
-
return Array.from(edgeMap.values());
|
|
296
|
-
}
|
|
297
|
-
/**
|
|
298
|
-
* Detects and reports duplicate nodes/edges for diagnostic purposes
|
|
299
|
-
* Useful for testing and debugging data quality issues
|
|
300
|
-
*/
|
|
301
|
-
detectDuplicates(cycles, tasks) {
|
|
302
|
-
const rawNodes = this.buildNodes(cycles, tasks);
|
|
303
|
-
const rawEdges = this.buildEdges(cycles, tasks, rawNodes);
|
|
304
|
-
// Analyze node duplicates
|
|
305
|
-
const nodeCount = new Map();
|
|
306
|
-
for (const node of rawNodes) {
|
|
307
|
-
const current = nodeCount.get(node.id) || { count: 0, sources: [] };
|
|
308
|
-
current.count++;
|
|
309
|
-
current.sources.push(node.originalId);
|
|
310
|
-
nodeCount.set(node.id, current);
|
|
311
|
-
}
|
|
312
|
-
const duplicateNodes = Array.from(nodeCount.entries())
|
|
313
|
-
.filter(([_, data]) => data.count > 1)
|
|
314
|
-
.map(([id, data]) => ({ id, count: data.count, sources: data.sources }));
|
|
315
|
-
// Analyze edge duplicates
|
|
316
|
-
const edgeCount = new Map();
|
|
317
|
-
for (const edge of rawEdges) {
|
|
318
|
-
const edgeKey = `${edge.from}->${edge.to}`;
|
|
319
|
-
edgeCount.set(edgeKey, (edgeCount.get(edgeKey) || 0) + 1);
|
|
320
|
-
}
|
|
321
|
-
const duplicateEdges = Array.from(edgeCount.entries())
|
|
322
|
-
.filter(([_, count]) => count > 1)
|
|
323
|
-
.map(([edge, count]) => ({ edge, count }));
|
|
324
|
-
return { duplicateNodes, duplicateEdges };
|
|
325
|
-
}
|
|
326
|
-
/**
|
|
327
|
-
* Filters cycles and tasks based on specified criteria
|
|
328
|
-
*/
|
|
329
|
-
filterEntities(cycles, tasks, filters) {
|
|
330
|
-
let filteredCycles = [...cycles];
|
|
331
|
-
let filteredTasks = [...tasks];
|
|
332
|
-
// Filter by specific cycle ID
|
|
333
|
-
if (filters.cycleId) {
|
|
334
|
-
const targetCycle = cycles.find(c => c.id === filters.cycleId);
|
|
335
|
-
if (targetCycle) {
|
|
336
|
-
// Include the target cycle and its related entities
|
|
337
|
-
const relatedCycleIds = new Set([filters.cycleId]);
|
|
338
|
-
const relatedTaskIds = new Set();
|
|
339
|
-
// Recursively add all descendant cycles
|
|
340
|
-
const addDescendantCycles = (cycleId) => {
|
|
341
|
-
const cycle = cycles.find(c => c.id === cycleId);
|
|
342
|
-
if (cycle?.childCycleIds) {
|
|
343
|
-
cycle.childCycleIds.forEach(childId => {
|
|
344
|
-
if (!relatedCycleIds.has(childId)) {
|
|
345
|
-
relatedCycleIds.add(childId);
|
|
346
|
-
addDescendantCycles(childId); // Recursive call
|
|
347
|
-
}
|
|
348
|
-
});
|
|
349
|
-
}
|
|
350
|
-
};
|
|
351
|
-
// Start recursive traversal from target cycle
|
|
352
|
-
addDescendantCycles(filters.cycleId);
|
|
353
|
-
// Add tasks from all related cycles
|
|
354
|
-
cycles.forEach(cycle => {
|
|
355
|
-
if (relatedCycleIds.has(cycle.id) && cycle.taskIds) {
|
|
356
|
-
cycle.taskIds.forEach(taskId => relatedTaskIds.add(taskId));
|
|
357
|
-
}
|
|
358
|
-
});
|
|
359
|
-
filteredCycles = cycles.filter(c => relatedCycleIds.has(c.id));
|
|
360
|
-
filteredTasks = tasks.filter(t => relatedTaskIds.has(t.id));
|
|
361
|
-
}
|
|
362
|
-
}
|
|
363
|
-
// Filter by specific task ID
|
|
364
|
-
if (filters.taskId) {
|
|
365
|
-
const targetTask = tasks.find(t => t.id === filters.taskId);
|
|
366
|
-
if (targetTask) {
|
|
367
|
-
filteredTasks = [targetTask];
|
|
368
|
-
// Find cycles that contain this task
|
|
369
|
-
filteredCycles = cycles.filter(c => c.taskIds && c.taskIds.includes(filters.taskId));
|
|
370
|
-
}
|
|
371
|
-
}
|
|
372
|
-
// Filter by package name (using tags)
|
|
373
|
-
if (filters.packageName) {
|
|
374
|
-
const packageTag = `package:${filters.packageName}`;
|
|
375
|
-
filteredCycles = filteredCycles.filter(c => c.tags && c.tags.includes(packageTag));
|
|
376
|
-
filteredTasks = filteredTasks.filter(t => t.tags && t.tags.includes(packageTag));
|
|
377
|
-
}
|
|
378
|
-
return { filteredCycles, filteredTasks };
|
|
379
|
-
}
|
|
380
|
-
}
|
|
381
|
-
//# sourceMappingURL=relationship_analyzer.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"relationship_analyzer.js","sourceRoot":"","sources":["../../../src/diagram_generator/relationship_analyzer.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,110 +0,0 @@
|
|
|
1
|
-
import type { BaseEvent, GitGovEvent, EventHandler, EventSubscription } from './types';
|
|
2
|
-
/**
|
|
3
|
-
* Event Stream interface - Contract for both Local and Global bus implementations
|
|
4
|
-
*/
|
|
5
|
-
export interface IEventStream {
|
|
6
|
-
/**
|
|
7
|
-
* Publish an event to the bus
|
|
8
|
-
*/
|
|
9
|
-
publish(event: BaseEvent): void;
|
|
10
|
-
/**
|
|
11
|
-
* Subscribe to events of a specific type
|
|
12
|
-
*/
|
|
13
|
-
subscribe<T extends BaseEvent = BaseEvent>(eventType: string, handler: EventHandler<T>): EventSubscription;
|
|
14
|
-
/**
|
|
15
|
-
* Unsubscribe from events
|
|
16
|
-
*/
|
|
17
|
-
unsubscribe(subscriptionId: string): boolean;
|
|
18
|
-
/**
|
|
19
|
-
* Get all active subscriptions
|
|
20
|
-
*/
|
|
21
|
-
getSubscriptions(): EventSubscription[];
|
|
22
|
-
/**
|
|
23
|
-
* Clear all subscriptions (for testing/cleanup)
|
|
24
|
-
*/
|
|
25
|
-
clearSubscriptions(): void;
|
|
26
|
-
}
|
|
27
|
-
/**
|
|
28
|
-
* Local EventBus implementation using Node.js EventEmitter
|
|
29
|
-
*
|
|
30
|
-
* This is the "Free Tier" implementation that operates in-memory
|
|
31
|
-
* and provides synchronous event delivery for local-first usage.
|
|
32
|
-
*
|
|
33
|
-
* Design Principles:
|
|
34
|
-
* - Decoupled Producers: Adapters emit events without knowing consumers
|
|
35
|
-
* - Pluggable Consumers: Event handlers can be added/removed dynamically
|
|
36
|
-
* - Type Safety: Full TypeScript support for all event types
|
|
37
|
-
* - Performance: In-memory delivery with minimal overhead
|
|
38
|
-
*/
|
|
39
|
-
export declare class EventBus implements IEventStream {
|
|
40
|
-
private emitter;
|
|
41
|
-
private subscriptions;
|
|
42
|
-
constructor();
|
|
43
|
-
/**
|
|
44
|
-
* Publish an event to all subscribers
|
|
45
|
-
*
|
|
46
|
-
* @param event - The event to publish
|
|
47
|
-
*/
|
|
48
|
-
publish(event: BaseEvent): void;
|
|
49
|
-
/**
|
|
50
|
-
* Subscribe to events of a specific type
|
|
51
|
-
*
|
|
52
|
-
* @param eventType - The event type to subscribe to
|
|
53
|
-
* @param handler - The handler function to call when event is received
|
|
54
|
-
* @returns EventSubscription object with subscription details
|
|
55
|
-
*/
|
|
56
|
-
subscribe<T extends BaseEvent = BaseEvent>(eventType: string, handler: EventHandler<T>): EventSubscription;
|
|
57
|
-
/**
|
|
58
|
-
* Unsubscribe from events
|
|
59
|
-
*
|
|
60
|
-
* @param subscriptionId - The subscription ID to remove
|
|
61
|
-
* @returns true if subscription was found and removed, false otherwise
|
|
62
|
-
*/
|
|
63
|
-
unsubscribe(subscriptionId: string): boolean;
|
|
64
|
-
/**
|
|
65
|
-
* Get all active subscriptions
|
|
66
|
-
*
|
|
67
|
-
* @returns Array of all active subscriptions
|
|
68
|
-
*/
|
|
69
|
-
getSubscriptions(): EventSubscription[];
|
|
70
|
-
/**
|
|
71
|
-
* Clear all subscriptions (for testing/cleanup)
|
|
72
|
-
*/
|
|
73
|
-
clearSubscriptions(): void;
|
|
74
|
-
/**
|
|
75
|
-
* Get subscription count for a specific event type
|
|
76
|
-
*
|
|
77
|
-
* @param eventType - The event type to count subscribers for
|
|
78
|
-
* @returns Number of active subscriptions for the event type
|
|
79
|
-
*/
|
|
80
|
-
getSubscriptionCount(eventType: string): number;
|
|
81
|
-
/**
|
|
82
|
-
* Get all event types that have active subscriptions
|
|
83
|
-
*
|
|
84
|
-
* @returns Array of event types with active subscriptions
|
|
85
|
-
*/
|
|
86
|
-
getActiveEventTypes(): string[];
|
|
87
|
-
/**
|
|
88
|
-
* Subscribe to all events (wildcard subscription)
|
|
89
|
-
* Useful for debugging, monitoring, or logging
|
|
90
|
-
*
|
|
91
|
-
* @param handler - Handler that will receive all events
|
|
92
|
-
* @returns EventSubscription object
|
|
93
|
-
*/
|
|
94
|
-
subscribeToAll(handler: EventHandler<BaseEvent>): EventSubscription;
|
|
95
|
-
}
|
|
96
|
-
/**
|
|
97
|
-
* Singleton instance for application-wide event bus usage
|
|
98
|
-
*/
|
|
99
|
-
export declare const eventBus: EventBus;
|
|
100
|
-
/**
|
|
101
|
-
* Type-safe event publisher helper
|
|
102
|
-
* Ensures events conform to GitGovEvent union type
|
|
103
|
-
*/
|
|
104
|
-
export declare function publishEvent(event: GitGovEvent): void;
|
|
105
|
-
/**
|
|
106
|
-
* Type-safe event subscriber helper
|
|
107
|
-
* Provides better TypeScript inference for specific event types
|
|
108
|
-
*/
|
|
109
|
-
export declare function subscribeToEvent<T extends GitGovEvent>(eventType: T['type'], handler: EventHandler<T>): EventSubscription;
|
|
110
|
-
//# sourceMappingURL=event_bus.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"event_bus.d.ts","sourceRoot":"","sources":["../../../src/event_bus/event_bus.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,SAAS,EACT,WAAW,EACX,YAAY,EACZ,iBAAiB,EAClB,MAAM,SAAS,CAAC;AAOjB;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B;;OAEG;IACH,OAAO,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,CAAC;IAEhC;;OAEG;IACH,SAAS,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,EACvC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,GACvB,iBAAiB,CAAC;IAErB;;OAEG;IACH,WAAW,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC;IAE7C;;OAEG;IACH,gBAAgB,IAAI,iBAAiB,EAAE,CAAC;IAExC;;OAEG;IACH,kBAAkB,IAAI,IAAI,CAAC;CAC5B;AAED;;;;;;;;;;;GAWG;AACH,qBAAa,QAAS,YAAW,YAAY;IAC3C,OAAO,CAAC,OAAO,CAAe;IAC9B,OAAO,CAAC,aAAa,CAAiC;;IAUtD;;;;OAIG;IACH,OAAO,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI;IAqB/B;;;;;;OAMG;IACH,SAAS,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,EACvC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,GACvB,iBAAiB;IAiCpB;;;;;OAKG;IACH,WAAW,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO;IAe5C;;;;OAIG;IACH,gBAAgB,IAAI,iBAAiB,EAAE;IAIvC;;OAEG;IACH,kBAAkB,IAAI,IAAI;IAK1B;;;;;OAKG;IACH,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IAI/C;;;;OAIG;IACH,mBAAmB,IAAI,MAAM,EAAE;IAI/B;;;;;;OAMG;IACH,cAAc,CAAC,OAAO,EAAE,YAAY,CAAC,SAAS,CAAC,GAAG,iBAAiB;CAGpE;AAED;;GAEG;AACH,eAAO,MAAM,QAAQ,UAAiB,CAAC;AAEvC;;;GAGG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI,CAErD;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,WAAW,EACpD,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,EACpB,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,GACvB,iBAAiB,CAEnB"}
|
|
@@ -1,161 +0,0 @@
|
|
|
1
|
-
import { EventEmitter } from 'events';
|
|
2
|
-
// Generate unique subscription IDs
|
|
3
|
-
function generateSubscriptionId() {
|
|
4
|
-
return `subscription:${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;
|
|
5
|
-
}
|
|
6
|
-
/**
|
|
7
|
-
* Local EventBus implementation using Node.js EventEmitter
|
|
8
|
-
*
|
|
9
|
-
* This is the "Free Tier" implementation that operates in-memory
|
|
10
|
-
* and provides synchronous event delivery for local-first usage.
|
|
11
|
-
*
|
|
12
|
-
* Design Principles:
|
|
13
|
-
* - Decoupled Producers: Adapters emit events without knowing consumers
|
|
14
|
-
* - Pluggable Consumers: Event handlers can be added/removed dynamically
|
|
15
|
-
* - Type Safety: Full TypeScript support for all event types
|
|
16
|
-
* - Performance: In-memory delivery with minimal overhead
|
|
17
|
-
*/
|
|
18
|
-
export class EventBus {
|
|
19
|
-
emitter;
|
|
20
|
-
subscriptions;
|
|
21
|
-
constructor() {
|
|
22
|
-
this.emitter = new EventEmitter();
|
|
23
|
-
this.subscriptions = new Map();
|
|
24
|
-
// Increase max listeners for high-throughput scenarios
|
|
25
|
-
this.emitter.setMaxListeners(100);
|
|
26
|
-
}
|
|
27
|
-
/**
|
|
28
|
-
* Publish an event to all subscribers
|
|
29
|
-
*
|
|
30
|
-
* @param event - The event to publish
|
|
31
|
-
*/
|
|
32
|
-
publish(event) {
|
|
33
|
-
// Validate event structure
|
|
34
|
-
if (!event.type || typeof event.type !== 'string') {
|
|
35
|
-
throw new Error('Event must have a valid type string');
|
|
36
|
-
}
|
|
37
|
-
if (!event.timestamp || typeof event.timestamp !== 'number') {
|
|
38
|
-
throw new Error('Event must have a valid timestamp number');
|
|
39
|
-
}
|
|
40
|
-
if (!event.source || typeof event.source !== 'string') {
|
|
41
|
-
throw new Error('Event must have a valid source string');
|
|
42
|
-
}
|
|
43
|
-
// Emit the event
|
|
44
|
-
this.emitter.emit(event.type, event);
|
|
45
|
-
// Also emit on wildcard for debugging/monitoring
|
|
46
|
-
this.emitter.emit('*', event);
|
|
47
|
-
}
|
|
48
|
-
/**
|
|
49
|
-
* Subscribe to events of a specific type
|
|
50
|
-
*
|
|
51
|
-
* @param eventType - The event type to subscribe to
|
|
52
|
-
* @param handler - The handler function to call when event is received
|
|
53
|
-
* @returns EventSubscription object with subscription details
|
|
54
|
-
*/
|
|
55
|
-
subscribe(eventType, handler) {
|
|
56
|
-
// Generate unique subscription ID
|
|
57
|
-
const subscriptionId = generateSubscriptionId();
|
|
58
|
-
// Wrap handler to catch errors and provide context
|
|
59
|
-
const wrappedHandler = async (event) => {
|
|
60
|
-
try {
|
|
61
|
-
await handler(event);
|
|
62
|
-
}
|
|
63
|
-
catch (error) {
|
|
64
|
-
console.error(`Error in event handler for ${eventType}:`, error);
|
|
65
|
-
// In production, this could emit an error event or log to monitoring
|
|
66
|
-
}
|
|
67
|
-
};
|
|
68
|
-
// Create subscription object (store wrapped handler for unsubscribing)
|
|
69
|
-
const subscription = {
|
|
70
|
-
id: subscriptionId,
|
|
71
|
-
eventType,
|
|
72
|
-
handler: wrappedHandler, // Store wrapped handler
|
|
73
|
-
metadata: {
|
|
74
|
-
createdAt: Date.now()
|
|
75
|
-
}
|
|
76
|
-
};
|
|
77
|
-
// Register with EventEmitter
|
|
78
|
-
this.emitter.on(eventType, wrappedHandler);
|
|
79
|
-
// Store subscription for management
|
|
80
|
-
this.subscriptions.set(subscriptionId, subscription);
|
|
81
|
-
return subscription;
|
|
82
|
-
}
|
|
83
|
-
/**
|
|
84
|
-
* Unsubscribe from events
|
|
85
|
-
*
|
|
86
|
-
* @param subscriptionId - The subscription ID to remove
|
|
87
|
-
* @returns true if subscription was found and removed, false otherwise
|
|
88
|
-
*/
|
|
89
|
-
unsubscribe(subscriptionId) {
|
|
90
|
-
const subscription = this.subscriptions.get(subscriptionId);
|
|
91
|
-
if (!subscription) {
|
|
92
|
-
return false;
|
|
93
|
-
}
|
|
94
|
-
// Remove from EventEmitter
|
|
95
|
-
this.emitter.removeListener(subscription.eventType, subscription.handler);
|
|
96
|
-
// Remove from our tracking
|
|
97
|
-
this.subscriptions.delete(subscriptionId);
|
|
98
|
-
return true;
|
|
99
|
-
}
|
|
100
|
-
/**
|
|
101
|
-
* Get all active subscriptions
|
|
102
|
-
*
|
|
103
|
-
* @returns Array of all active subscriptions
|
|
104
|
-
*/
|
|
105
|
-
getSubscriptions() {
|
|
106
|
-
return Array.from(this.subscriptions.values());
|
|
107
|
-
}
|
|
108
|
-
/**
|
|
109
|
-
* Clear all subscriptions (for testing/cleanup)
|
|
110
|
-
*/
|
|
111
|
-
clearSubscriptions() {
|
|
112
|
-
this.emitter.removeAllListeners();
|
|
113
|
-
this.subscriptions.clear();
|
|
114
|
-
}
|
|
115
|
-
/**
|
|
116
|
-
* Get subscription count for a specific event type
|
|
117
|
-
*
|
|
118
|
-
* @param eventType - The event type to count subscribers for
|
|
119
|
-
* @returns Number of active subscriptions for the event type
|
|
120
|
-
*/
|
|
121
|
-
getSubscriptionCount(eventType) {
|
|
122
|
-
return this.emitter.listenerCount(eventType);
|
|
123
|
-
}
|
|
124
|
-
/**
|
|
125
|
-
* Get all event types that have active subscriptions
|
|
126
|
-
*
|
|
127
|
-
* @returns Array of event types with active subscriptions
|
|
128
|
-
*/
|
|
129
|
-
getActiveEventTypes() {
|
|
130
|
-
return this.emitter.eventNames();
|
|
131
|
-
}
|
|
132
|
-
/**
|
|
133
|
-
* Subscribe to all events (wildcard subscription)
|
|
134
|
-
* Useful for debugging, monitoring, or logging
|
|
135
|
-
*
|
|
136
|
-
* @param handler - Handler that will receive all events
|
|
137
|
-
* @returns EventSubscription object
|
|
138
|
-
*/
|
|
139
|
-
subscribeToAll(handler) {
|
|
140
|
-
return this.subscribe('*', handler);
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
/**
|
|
144
|
-
* Singleton instance for application-wide event bus usage
|
|
145
|
-
*/
|
|
146
|
-
export const eventBus = new EventBus();
|
|
147
|
-
/**
|
|
148
|
-
* Type-safe event publisher helper
|
|
149
|
-
* Ensures events conform to GitGovEvent union type
|
|
150
|
-
*/
|
|
151
|
-
export function publishEvent(event) {
|
|
152
|
-
eventBus.publish(event);
|
|
153
|
-
}
|
|
154
|
-
/**
|
|
155
|
-
* Type-safe event subscriber helper
|
|
156
|
-
* Provides better TypeScript inference for specific event types
|
|
157
|
-
*/
|
|
158
|
-
export function subscribeToEvent(eventType, handler) {
|
|
159
|
-
return eventBus.subscribe(eventType, handler);
|
|
160
|
-
}
|
|
161
|
-
//# sourceMappingURL=event_bus.js.map
|