@codefast/cli 0.3.13-canary.3 → 0.3.13
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 +29 -3
- package/dist/{bin.js → bin.mjs} +4 -1
- package/dist/commands/arrange.mjs +325 -0
- package/dist/commands/mirror.mjs +267 -0
- package/dist/commands/tag.mjs +283 -0
- package/dist/lib/arrange/application/arrange-analyze-json.format.mjs +10 -0
- package/dist/lib/arrange/application/arrange-group-json.format.mjs +11 -0
- package/dist/lib/arrange/application/arrange-sync-cli-result.mjs +7 -0
- package/dist/lib/arrange/application/arrange-sync-json.format.mjs +12 -0
- package/dist/lib/arrange/application/services/arrange-file-processor.service.mjs +242 -0
- package/dist/lib/arrange/application/services/arrange-target-scanner.service.mjs +237 -0
- package/dist/lib/arrange/application/use-cases/analyze-directory.use-case.mjs +258 -0
- package/dist/lib/arrange/application/use-cases/group-file.use-case.mjs +35 -0
- package/dist/lib/arrange/application/use-cases/run-arrange-sync.use-case.mjs +283 -0
- package/dist/lib/arrange/application/use-cases/suggest-cn-groups.use-case.mjs +233 -0
- package/dist/lib/arrange/arrange.feature.module.mjs +19 -0
- package/dist/lib/arrange/arrange.module.mjs +27 -0
- package/dist/lib/arrange/arrange.presentation.module.mjs +13 -0
- package/dist/lib/arrange/contracts/tokens.mjs +14 -0
- package/dist/lib/arrange/domain/arrange-analyze.service.mjs +95 -0
- package/dist/lib/arrange/domain/arrange-grouping.service.mjs +100 -0
- package/dist/lib/arrange/domain/ast/ast-helpers.helper.mjs +89 -0
- package/dist/lib/arrange/domain/ast/ast-node.model.mjs +181 -0
- package/dist/lib/arrange/domain/ast/collectors-cn.collector.mjs +52 -0
- package/dist/lib/arrange/domain/ast/collectors-jsx.collector.mjs +20 -0
- package/dist/lib/arrange/domain/ast/collectors-tv.collector.mjs +174 -0
- package/dist/lib/arrange/domain/ast/targets.model.mjs +110 -0
- package/dist/lib/arrange/domain/constants.domain.mjs +154 -0
- package/dist/lib/arrange/domain/errors.domain.mjs +18 -0
- package/dist/lib/arrange/domain/grouping.domain.mjs +306 -0
- package/dist/lib/arrange/domain/imports.domain.mjs +55 -0
- package/dist/lib/arrange/domain/source-text-formatters.formatter.mjs +54 -0
- package/dist/lib/arrange/domain/tokenizer.util.mjs +209 -0
- package/dist/lib/arrange/infra/domain-source-parser.adapter.mjs +240 -0
- package/dist/lib/arrange/infra/ensure-cn-import.adapter.mjs +8 -0
- package/dist/lib/arrange/infra/file-walker.adapter.mjs +239 -0
- package/dist/lib/arrange/infra/merge-cn-literal-pool-for-test.test-helper.mjs +18 -0
- package/dist/lib/arrange/infra/ts-ast-translator.adapter.mjs +355 -0
- package/dist/lib/arrange/presentation/arrange-cli-schema.presenter.mjs +29 -0
- package/dist/lib/arrange/presentation/arrange-sync.presenter.mjs +12 -0
- package/dist/lib/arrange/presentation/formatters.presenter.mjs +2 -0
- package/dist/lib/arrange/presentation/group-file-preview.presenter.mjs +275 -0
- package/dist/lib/arrange/presentation/prepare-arrange.orchestrator.mjs +258 -0
- package/dist/lib/arrange/presentation/present-analyze-cli.presenter.mjs +7 -0
- package/dist/lib/arrange/presentation/present-analyze-report.presenter.mjs +233 -0
- package/dist/lib/arrange/presentation/report.presenter.mjs +24 -0
- package/dist/lib/arrange/presentation/resolve-arrange-cli-target.presenter.mjs +21 -0
- package/dist/lib/config/application/use-cases/load-config.use-case.mjs +17 -0
- package/dist/lib/config/contracts/tokens.mjs +5 -0
- package/dist/lib/config/infra/config-schema.adapter.mjs +25 -0
- package/dist/lib/config/infra/loader.adapter.mjs +84 -0
- package/dist/lib/core/application/architecture-boundaries.policy.mjs +311 -0
- package/dist/lib/core/application/ports/path.port.mjs +1 -0
- package/dist/lib/core/application/schema-parse.util.mjs +17 -0
- package/dist/lib/core/application/utils/caught-unknown-message.util.mjs +19 -0
- package/dist/lib/core/application/utils/verbose-diagnostics.util.mjs +9 -0
- package/dist/lib/core/contracts/presentation.contract.mjs +1 -0
- package/dist/lib/core/contracts/tokens.mjs +5 -0
- package/dist/lib/core/core.module.mjs +9 -0
- package/dist/lib/core/domain/cli-exit-codes.domain.mjs +11 -0
- package/dist/lib/core/domain/errors.domain.mjs +16 -0
- package/dist/lib/core/domain/result.model.mjs +23 -0
- package/dist/lib/core/infra/composition-root.mjs +21 -0
- package/dist/lib/core/infra/infra.module.mjs +23 -0
- package/dist/lib/core/infra/logging-decorator.adapter.mjs +62 -0
- package/dist/lib/core/infra/path.adapter.mjs +13 -0
- package/dist/lib/core/operational/contracts/tokens.mjs +7 -0
- package/dist/lib/core/presentation/cli-executor.presenter.mjs +57 -0
- package/dist/lib/core/presentation/command.interface.mjs +1 -0
- package/dist/lib/core/presentation/format-app-error.presenter.mjs +17 -0
- package/dist/lib/core/presentation/global-cli-options.presenter.mjs +9 -0
- package/dist/lib/core/presentation/load-codefast-config.presenter.mjs +18 -0
- package/dist/lib/core/presentation/parse-cli-schema.presenter.mjs +7 -0
- package/dist/lib/core/presentation/presentation.module.mjs +11 -0
- package/dist/lib/core/presentation/try-load-codefast-config.presenter.mjs +245 -0
- package/dist/lib/infra/config-reporter.adapter.mjs +9 -0
- package/dist/lib/infra/fs-contract.port.mjs +1 -0
- package/dist/lib/infra/node-io.adapter.mjs +266 -0
- package/dist/lib/infra/workspace/repo-root.adapter.mjs +21 -0
- package/dist/lib/kernel/di/command.token.mjs +5 -0
- package/dist/lib/mirror/application/mirror-sync-json.format.mjs +12 -0
- package/dist/lib/mirror/application/ports/file-system-service.port.mjs +1 -0
- package/dist/lib/mirror/application/ports/mirror-sync-reporter.port.mjs +1 -0
- package/dist/lib/mirror/application/ports/package-repository.port.mjs +1 -0
- package/dist/lib/mirror/application/ports/sync-workspace-package.port.mjs +1 -0
- package/dist/lib/mirror/application/ports/workspace-service.port.mjs +1 -0
- package/dist/lib/mirror/application/requests/mirror-sync.request.mjs +1 -0
- package/dist/lib/mirror/application/services/sync-workspace-package.service.mjs +351 -0
- package/dist/lib/mirror/application/use-cases/generate-mirror-exports.use-case.mjs +219 -0
- package/dist/lib/mirror/application/use-cases/run-mirror-sync.use-case.mjs +302 -0
- package/dist/lib/mirror/contracts/models.mjs +1 -0
- package/dist/lib/mirror/contracts/presentation.contract.mjs +1 -0
- package/dist/lib/mirror/contracts/tokens.mjs +11 -0
- package/dist/lib/mirror/contracts/use-cases.contract.mjs +1 -0
- package/dist/lib/mirror/domain/constants.domain.mjs +16 -0
- package/dist/lib/mirror/domain/errors.domain.mjs +15 -0
- package/dist/lib/mirror/domain/types.domain.mjs +1 -0
- package/dist/lib/mirror/infra/dirent-list.adapter.mjs +13 -0
- package/dist/lib/mirror/infra/file-system-service.adapter.mjs +256 -0
- package/dist/lib/mirror/infra/mirror-sync-cli-options.adapter.mjs +1 -0
- package/dist/lib/mirror/infra/mirror-sync-reporter.adapter.mjs +236 -0
- package/dist/lib/mirror/infra/package-filter.adapter.mjs +25 -0
- package/dist/lib/mirror/infra/package-repository.adapter.mjs +235 -0
- package/dist/lib/mirror/infra/path-normalizer.adapter.mjs +7 -0
- package/dist/lib/mirror/infra/update-pkg.adapter.mjs +102 -0
- package/dist/lib/mirror/infra/workspace-packages.adapter.mjs +154 -0
- package/dist/lib/mirror/infra/workspace-service.adapter.mjs +232 -0
- package/dist/lib/mirror/mirror.feature.module.mjs +19 -0
- package/dist/lib/mirror/mirror.module.mjs +23 -0
- package/dist/lib/mirror/mirror.presentation.module.mjs +11 -0
- package/dist/lib/mirror/presentation/mirror-cli-schema.presenter.mjs +12 -0
- package/dist/lib/mirror/presentation/prepare-mirror.orchestrator.mjs +263 -0
- package/dist/lib/mirror/presentation/reporter.presenter.mjs +111 -0
- package/dist/lib/mirror/presentation/resolve-mirror-package-arg.presenter.mjs +20 -0
- package/dist/lib/shared/source-code/domain/text-edit.model.mjs +28 -0
- package/dist/lib/shared/source-code/infra/tsx-file-walk.adapter.mjs +33 -0
- package/dist/lib/tag/application/ports/tag-since-writer.port.mjs +1 -0
- package/dist/lib/tag/application/ports/tag-version-resolver.port.mjs +1 -0
- package/dist/lib/tag/application/ports/target-resolver.port.mjs +1 -0
- package/dist/lib/tag/application/ports/typescript-tree-walk.port.mjs +1 -0
- package/dist/lib/tag/application/requests/tag-sync.request.mjs +1 -0
- package/dist/lib/tag/application/tag-sync-cli-result.mjs +11 -0
- package/dist/lib/tag/application/tag-sync-json.format.mjs +14 -0
- package/dist/lib/tag/application/use-cases/run-tag-sync.use-case.mjs +398 -0
- package/dist/lib/tag/contracts/models.mjs +1 -0
- package/dist/lib/tag/contracts/presentation.contract.mjs +1 -0
- package/dist/lib/tag/contracts/tokens.mjs +12 -0
- package/dist/lib/tag/contracts/use-cases.contract.mjs +1 -0
- package/dist/lib/tag/domain/types.domain.mjs +1 -0
- package/dist/lib/tag/infra/tag-since-writer.adapter.mjs +343 -0
- package/dist/lib/tag/infra/tag-sync-cli-options.adapter.mjs +1 -0
- package/dist/lib/tag/infra/tag-target-candidates.adapter.mjs +170 -0
- package/dist/lib/tag/infra/tag-target-resolver.adapter.mjs +226 -0
- package/dist/lib/tag/infra/tag-version-resolver.adapter.mjs +247 -0
- package/dist/lib/tag/infra/typescript-tree-walk.adapter.mjs +226 -0
- package/dist/lib/tag/presentation/colors.presenter.mjs +12 -0
- package/dist/lib/tag/presentation/create-tag-progress-listener.presenter.mjs +228 -0
- package/dist/lib/tag/presentation/prepare-tag.orchestrator.mjs +264 -0
- package/dist/lib/tag/presentation/present-tag-sync-result.presenter.mjs +233 -0
- package/dist/lib/tag/presentation/resolve-tag-cli-target.presenter.mjs +9 -0
- package/dist/lib/tag/presentation/resolve-tag-workspace-root.presenter.mjs +12 -0
- package/dist/lib/tag/presentation/tag-cli-schema.presenter.mjs +12 -0
- package/dist/lib/tag/presentation/tag-sync.presenter.mjs +78 -0
- package/dist/lib/tag/tag.feature.module.mjs +19 -0
- package/dist/lib/tag/tag.module.mjs +21 -0
- package/dist/lib/tag/tag.presentation.module.mjs +15 -0
- package/dist/program.mjs +39 -0
- package/package.json +16 -19
- package/dist/bin.d.ts +0 -3
- package/dist/bin.d.ts.map +0 -1
- package/dist/commands/arrange.d.ts +0 -3
- package/dist/commands/arrange.d.ts.map +0 -1
- package/dist/commands/arrange.js +0 -108
- package/dist/commands/mirror.d.ts +0 -3
- package/dist/commands/mirror.d.ts.map +0 -1
- package/dist/commands/mirror.js +0 -36
- package/dist/commands/tag.d.ts +0 -3
- package/dist/commands/tag.d.ts.map +0 -1
- package/dist/commands/tag.js +0 -44
- package/dist/lib/arrange/application/ports/domain-source-parser.port.d.ts +0 -5
- package/dist/lib/arrange/application/ports/domain-source-parser.port.d.ts.map +0 -1
- package/dist/lib/arrange/application/ports/file-walker.port.d.ts +0 -5
- package/dist/lib/arrange/application/ports/file-walker.port.d.ts.map +0 -1
- package/dist/lib/arrange/application/requests/analyze-directory.request.d.ts +0 -6
- package/dist/lib/arrange/application/requests/analyze-directory.request.d.ts.map +0 -1
- package/dist/lib/arrange/application/requests/analyze-directory.request.js +0 -4
- package/dist/lib/arrange/application/requests/arrange-sync.request.d.ts +0 -18
- package/dist/lib/arrange/application/requests/arrange-sync.request.d.ts.map +0 -1
- package/dist/lib/arrange/application/requests/arrange-sync.request.js +0 -15
- package/dist/lib/arrange/application/requests/suggest-groups.request.d.ts +0 -8
- package/dist/lib/arrange/application/requests/suggest-groups.request.d.ts.map +0 -1
- package/dist/lib/arrange/application/requests/suggest-groups.request.js +0 -8
- package/dist/lib/arrange/application/use-cases/analyze-directory.use-case.d.ts +0 -17
- package/dist/lib/arrange/application/use-cases/analyze-directory.use-case.d.ts.map +0 -1
- package/dist/lib/arrange/application/use-cases/analyze-directory.use-case.js +0 -24
- package/dist/lib/arrange/application/use-cases/group-file-preview.use-case.d.ts +0 -17
- package/dist/lib/arrange/application/use-cases/group-file-preview.use-case.d.ts.map +0 -1
- package/dist/lib/arrange/application/use-cases/group-file-preview.use-case.js +0 -46
- package/dist/lib/arrange/application/use-cases/group-file.use-case.d.ts +0 -5
- package/dist/lib/arrange/application/use-cases/group-file.use-case.d.ts.map +0 -1
- package/dist/lib/arrange/application/use-cases/group-file.use-case.js +0 -40
- package/dist/lib/arrange/application/use-cases/run-arrange-sync.use-case.d.ts +0 -19
- package/dist/lib/arrange/application/use-cases/run-arrange-sync.use-case.d.ts.map +0 -1
- package/dist/lib/arrange/application/use-cases/run-arrange-sync.use-case.js +0 -85
- package/dist/lib/arrange/application/use-cases/suggest-cn-groups.use-case.d.ts +0 -7
- package/dist/lib/arrange/application/use-cases/suggest-cn-groups.use-case.d.ts.map +0 -1
- package/dist/lib/arrange/application/use-cases/suggest-cn-groups.use-case.js +0 -10
- package/dist/lib/arrange/domain/arrange-analyze.service.d.ts +0 -12
- package/dist/lib/arrange/domain/arrange-analyze.service.d.ts.map +0 -1
- package/dist/lib/arrange/domain/arrange-analyze.service.js +0 -116
- package/dist/lib/arrange/domain/arrange-grouping.service.d.ts +0 -53
- package/dist/lib/arrange/domain/arrange-grouping.service.d.ts.map +0 -1
- package/dist/lib/arrange/domain/arrange-grouping.service.js +0 -106
- package/dist/lib/arrange/domain/ast/ast-helpers.helper.d.ts +0 -28
- package/dist/lib/arrange/domain/ast/ast-helpers.helper.d.ts.map +0 -1
- package/dist/lib/arrange/domain/ast/ast-helpers.helper.js +0 -130
- package/dist/lib/arrange/domain/ast/ast-node.model.d.ts +0 -179
- package/dist/lib/arrange/domain/ast/ast-node.model.d.ts.map +0 -1
- package/dist/lib/arrange/domain/ast/ast-node.model.js +0 -210
- package/dist/lib/arrange/domain/ast/collectors-cn.collector.d.ts +0 -7
- package/dist/lib/arrange/domain/ast/collectors-cn.collector.d.ts.map +0 -1
- package/dist/lib/arrange/domain/ast/collectors-cn.collector.js +0 -70
- package/dist/lib/arrange/domain/ast/collectors-jsx.collector.d.ts +0 -4
- package/dist/lib/arrange/domain/ast/collectors-jsx.collector.d.ts.map +0 -1
- package/dist/lib/arrange/domain/ast/collectors-jsx.collector.js +0 -21
- package/dist/lib/arrange/domain/ast/collectors-tv.collector.d.ts +0 -13
- package/dist/lib/arrange/domain/ast/collectors-tv.collector.d.ts.map +0 -1
- package/dist/lib/arrange/domain/ast/collectors-tv.collector.js +0 -302
- package/dist/lib/arrange/domain/ast/targets.model.d.ts +0 -8
- package/dist/lib/arrange/domain/ast/targets.model.d.ts.map +0 -1
- package/dist/lib/arrange/domain/ast/targets.model.js +0 -147
- package/dist/lib/arrange/domain/constants.domain.d.ts +0 -70
- package/dist/lib/arrange/domain/constants.domain.d.ts.map +0 -1
- package/dist/lib/arrange/domain/constants.domain.js +0 -182
- package/dist/lib/arrange/domain/errors.domain.d.ts +0 -14
- package/dist/lib/arrange/domain/errors.domain.d.ts.map +0 -1
- package/dist/lib/arrange/domain/errors.domain.js +0 -16
- package/dist/lib/arrange/domain/grouping.domain.d.ts +0 -41
- package/dist/lib/arrange/domain/grouping.domain.d.ts.map +0 -1
- package/dist/lib/arrange/domain/grouping.domain.js +0 -371
- package/dist/lib/arrange/domain/imports.domain.d.ts +0 -7
- package/dist/lib/arrange/domain/imports.domain.d.ts.map +0 -1
- package/dist/lib/arrange/domain/imports.domain.js +0 -80
- package/dist/lib/arrange/domain/source-text-formatters.formatter.d.ts +0 -16
- package/dist/lib/arrange/domain/source-text-formatters.formatter.d.ts.map +0 -1
- package/dist/lib/arrange/domain/source-text-formatters.formatter.js +0 -55
- package/dist/lib/arrange/domain/tokenizer.util.d.ts +0 -45
- package/dist/lib/arrange/domain/tokenizer.util.d.ts.map +0 -1
- package/dist/lib/arrange/domain/tokenizer.util.js +0 -469
- package/dist/lib/arrange/domain/types.domain.d.ts +0 -115
- package/dist/lib/arrange/domain/types.domain.d.ts.map +0 -1
- package/dist/lib/arrange/domain/types.domain.js +0 -10
- package/dist/lib/arrange/index.d.ts +0 -45
- package/dist/lib/arrange/index.d.ts.map +0 -1
- package/dist/lib/arrange/index.js +0 -41
- package/dist/lib/arrange/infra/arrange-sync-cli-options.adapter.d.ts +0 -14
- package/dist/lib/arrange/infra/arrange-sync-cli-options.adapter.d.ts.map +0 -1
- package/dist/lib/arrange/infra/domain-source-parser.adapter.d.ts +0 -11
- package/dist/lib/arrange/infra/domain-source-parser.adapter.d.ts.map +0 -1
- package/dist/lib/arrange/infra/domain-source-parser.adapter.js +0 -19
- package/dist/lib/arrange/infra/ensure-cn-import.adapter.d.ts +0 -3
- package/dist/lib/arrange/infra/ensure-cn-import.adapter.d.ts.map +0 -1
- package/dist/lib/arrange/infra/ensure-cn-import.adapter.js +0 -6
- package/dist/lib/arrange/infra/file-walker.adapter.d.ts +0 -8
- package/dist/lib/arrange/infra/file-walker.adapter.d.ts.map +0 -1
- package/dist/lib/arrange/infra/file-walker.adapter.js +0 -17
- package/dist/lib/arrange/infra/merge-cn-literal-pool-for-test.test-helper.d.ts +0 -8
- package/dist/lib/arrange/infra/merge-cn-literal-pool-for-test.test-helper.d.ts.map +0 -1
- package/dist/lib/arrange/infra/merge-cn-literal-pool-for-test.test-helper.js +0 -25
- package/dist/lib/arrange/infra/ts-ast-translator.adapter.d.ts +0 -10
- package/dist/lib/arrange/infra/ts-ast-translator.adapter.d.ts.map +0 -1
- package/dist/lib/arrange/infra/ts-ast-translator.adapter.js +0 -363
- package/dist/lib/arrange/presentation/arrange-prelude.presenter.d.ts +0 -14
- package/dist/lib/arrange/presentation/arrange-prelude.presenter.d.ts.map +0 -1
- package/dist/lib/arrange/presentation/arrange-prelude.presenter.js +0 -24
- package/dist/lib/arrange/presentation/formatters.presenter.d.ts +0 -3
- package/dist/lib/arrange/presentation/formatters.presenter.d.ts.map +0 -1
- package/dist/lib/arrange/presentation/formatters.presenter.js +0 -2
- package/dist/lib/arrange/presentation/present-analyze-cli.presenter.d.ts +0 -4
- package/dist/lib/arrange/presentation/present-analyze-cli.presenter.d.ts.map +0 -1
- package/dist/lib/arrange/presentation/present-analyze-cli.presenter.js +0 -4
- package/dist/lib/arrange/presentation/report.presenter.d.ts +0 -4
- package/dist/lib/arrange/presentation/report.presenter.d.ts.map +0 -1
- package/dist/lib/arrange/presentation/report.presenter.js +0 -37
- package/dist/lib/arrange/presentation/resolve-arrange-cli-target.presenter.d.ts +0 -2
- package/dist/lib/arrange/presentation/resolve-arrange-cli-target.presenter.d.ts.map +0 -1
- package/dist/lib/arrange/presentation/resolve-arrange-cli-target.presenter.js +0 -7
- package/dist/lib/config/domain/schema.domain.d.ts +0 -50
- package/dist/lib/config/domain/schema.domain.d.ts.map +0 -1
- package/dist/lib/config/domain/schema.domain.js +0 -43
- package/dist/lib/config/index.d.ts +0 -4
- package/dist/lib/config/index.d.ts.map +0 -1
- package/dist/lib/config/index.js +0 -2
- package/dist/lib/config/infra/loader.adapter.d.ts +0 -11
- package/dist/lib/config/infra/loader.adapter.d.ts.map +0 -1
- package/dist/lib/config/infra/loader.adapter.js +0 -90
- package/dist/lib/core/application/architecture-boundaries.policy.d.ts +0 -19
- package/dist/lib/core/application/architecture-boundaries.policy.d.ts.map +0 -1
- package/dist/lib/core/application/architecture-boundaries.policy.js +0 -370
- package/dist/lib/core/application/ports/cli-io.port.d.ts +0 -31
- package/dist/lib/core/application/ports/cli-io.port.d.ts.map +0 -1
- package/dist/lib/core/application/schema-parse.util.d.ts +0 -8
- package/dist/lib/core/application/schema-parse.util.d.ts.map +0 -1
- package/dist/lib/core/application/schema-parse.util.js +0 -20
- package/dist/lib/core/application/utils/caught-unknown-message.util.d.ts +0 -6
- package/dist/lib/core/application/utils/caught-unknown-message.util.d.ts.map +0 -1
- package/dist/lib/core/application/utils/caught-unknown-message.util.js +0 -34
- package/dist/lib/core/application/utils/verbose-diagnostics.util.d.ts +0 -5
- package/dist/lib/core/application/utils/verbose-diagnostics.util.d.ts.map +0 -1
- package/dist/lib/core/application/utils/verbose-diagnostics.util.js +0 -7
- package/dist/lib/core/domain/errors.domain.d.ts +0 -11
- package/dist/lib/core/domain/errors.domain.d.ts.map +0 -1
- package/dist/lib/core/domain/errors.domain.js +0 -9
- package/dist/lib/core/domain/result.model.d.ts +0 -17
- package/dist/lib/core/domain/result.model.d.ts.map +0 -1
- package/dist/lib/core/domain/result.model.js +0 -15
- package/dist/lib/core/infra/container.adapter.d.ts +0 -58
- package/dist/lib/core/infra/container.adapter.d.ts.map +0 -1
- package/dist/lib/core/infra/container.adapter.js +0 -80
- package/dist/lib/core/infra/logging-decorator.adapter.d.ts +0 -12
- package/dist/lib/core/infra/logging-decorator.adapter.d.ts.map +0 -1
- package/dist/lib/core/infra/logging-decorator.adapter.js +0 -75
- package/dist/lib/core/presentation/cli-executor.presenter.d.ts +0 -33
- package/dist/lib/core/presentation/cli-executor.presenter.d.ts.map +0 -1
- package/dist/lib/core/presentation/cli-executor.presenter.js +0 -73
- package/dist/lib/core/presentation/format-app-error.presenter.d.ts +0 -6
- package/dist/lib/core/presentation/format-app-error.presenter.d.ts.map +0 -1
- package/dist/lib/core/presentation/format-app-error.presenter.js +0 -19
- package/dist/lib/core/presentation/global-cli-options.presenter.d.ts +0 -9
- package/dist/lib/core/presentation/global-cli-options.presenter.d.ts.map +0 -1
- package/dist/lib/core/presentation/global-cli-options.presenter.js +0 -8
- package/dist/lib/core/presentation/load-codefast-config.presenter.d.ts +0 -8
- package/dist/lib/core/presentation/load-codefast-config.presenter.d.ts.map +0 -1
- package/dist/lib/core/presentation/load-codefast-config.presenter.js +0 -15
- package/dist/lib/core/presentation/parse-cli-schema.presenter.d.ts +0 -5
- package/dist/lib/core/presentation/parse-cli-schema.presenter.d.ts.map +0 -1
- package/dist/lib/core/presentation/parse-cli-schema.presenter.js +0 -4
- package/dist/lib/core/presentation/run-cli-use-case-after-parse.presenter.d.ts +0 -6
- package/dist/lib/core/presentation/run-cli-use-case-after-parse.presenter.d.ts.map +0 -1
- package/dist/lib/core/presentation/run-cli-use-case-after-parse.presenter.js +0 -17
- package/dist/lib/core/presentation/workspace-root-strict.presenter.d.ts +0 -5
- package/dist/lib/core/presentation/workspace-root-strict.presenter.d.ts.map +0 -1
- package/dist/lib/core/presentation/workspace-root-strict.presenter.js +0 -12
- package/dist/lib/infra/config-reporter.adapter.d.ts +0 -4
- package/dist/lib/infra/config-reporter.adapter.d.ts.map +0 -1
- package/dist/lib/infra/config-reporter.adapter.js +0 -9
- package/dist/lib/infra/fs-contract.port.d.ts +0 -2
- package/dist/lib/infra/fs-contract.port.d.ts.map +0 -1
- package/dist/lib/infra/node-io.adapter.d.ts +0 -4
- package/dist/lib/infra/node-io.adapter.d.ts.map +0 -1
- package/dist/lib/infra/node-io.adapter.js +0 -37
- package/dist/lib/infra/workspace/repo-root.adapter.d.ts +0 -7
- package/dist/lib/infra/workspace/repo-root.adapter.d.ts.map +0 -1
- package/dist/lib/infra/workspace/repo-root.adapter.js +0 -23
- package/dist/lib/mirror/application/ports/file-system-service.port.d.ts +0 -6
- package/dist/lib/mirror/application/ports/file-system-service.port.d.ts.map +0 -1
- package/dist/lib/mirror/application/ports/mirror-sync-reporter.port.d.ts +0 -27
- package/dist/lib/mirror/application/ports/mirror-sync-reporter.port.d.ts.map +0 -1
- package/dist/lib/mirror/application/ports/package-repository.port.d.ts +0 -16
- package/dist/lib/mirror/application/ports/package-repository.port.d.ts.map +0 -1
- package/dist/lib/mirror/application/ports/workspace-service.port.d.ts +0 -7
- package/dist/lib/mirror/application/ports/workspace-service.port.d.ts.map +0 -1
- package/dist/lib/mirror/application/requests/mirror-sync.request.d.ts +0 -10
- package/dist/lib/mirror/application/requests/mirror-sync.request.d.ts.map +0 -1
- package/dist/lib/mirror/application/requests/mirror-sync.request.js +0 -8
- package/dist/lib/mirror/application/use-cases/generate-mirror-exports.use-case.d.ts +0 -10
- package/dist/lib/mirror/application/use-cases/generate-mirror-exports.use-case.d.ts.map +0 -1
- package/dist/lib/mirror/application/use-cases/generate-mirror-exports.use-case.js +0 -271
- package/dist/lib/mirror/application/use-cases/run-mirror-sync.use-case.d.ts +0 -19
- package/dist/lib/mirror/application/use-cases/run-mirror-sync.use-case.d.ts.map +0 -1
- package/dist/lib/mirror/application/use-cases/run-mirror-sync.use-case.js +0 -168
- package/dist/lib/mirror/domain/constants.domain.d.ts +0 -6
- package/dist/lib/mirror/domain/constants.domain.d.ts.map +0 -1
- package/dist/lib/mirror/domain/constants.domain.js +0 -5
- package/dist/lib/mirror/domain/errors.domain.d.ts +0 -10
- package/dist/lib/mirror/domain/errors.domain.d.ts.map +0 -1
- package/dist/lib/mirror/domain/errors.domain.js +0 -12
- package/dist/lib/mirror/domain/types.domain.d.ts +0 -65
- package/dist/lib/mirror/domain/types.domain.d.ts.map +0 -1
- package/dist/lib/mirror/index.d.ts +0 -6
- package/dist/lib/mirror/index.d.ts.map +0 -1
- package/dist/lib/mirror/index.js +0 -1
- package/dist/lib/mirror/infra/dirent-list.adapter.d.ts +0 -9
- package/dist/lib/mirror/infra/dirent-list.adapter.d.ts.map +0 -1
- package/dist/lib/mirror/infra/dirent-list.adapter.js +0 -13
- package/dist/lib/mirror/infra/file-system-service.adapter.d.ts +0 -7
- package/dist/lib/mirror/infra/file-system-service.adapter.d.ts.map +0 -1
- package/dist/lib/mirror/infra/file-system-service.adapter.js +0 -47
- package/dist/lib/mirror/infra/mirror-sync-cli-options.adapter.d.ts +0 -14
- package/dist/lib/mirror/infra/mirror-sync-cli-options.adapter.d.ts.map +0 -1
- package/dist/lib/mirror/infra/mirror-sync-reporter.adapter.d.ts +0 -3
- package/dist/lib/mirror/infra/mirror-sync-reporter.adapter.d.ts.map +0 -1
- package/dist/lib/mirror/infra/mirror-sync-reporter.adapter.js +0 -13
- package/dist/lib/mirror/infra/package-filter.adapter.d.ts +0 -8
- package/dist/lib/mirror/infra/package-filter.adapter.d.ts.map +0 -1
- package/dist/lib/mirror/infra/package-filter.adapter.js +0 -33
- package/dist/lib/mirror/infra/package-repository.adapter.d.ts +0 -17
- package/dist/lib/mirror/infra/package-repository.adapter.d.ts.map +0 -1
- package/dist/lib/mirror/infra/package-repository.adapter.js +0 -17
- package/dist/lib/mirror/infra/path-normalizer.adapter.d.ts +0 -2
- package/dist/lib/mirror/infra/path-normalizer.adapter.d.ts.map +0 -1
- package/dist/lib/mirror/infra/path-normalizer.adapter.js +0 -4
- package/dist/lib/mirror/infra/update-pkg.adapter.d.ts +0 -19
- package/dist/lib/mirror/infra/update-pkg.adapter.d.ts.map +0 -1
- package/dist/lib/mirror/infra/update-pkg.adapter.js +0 -156
- package/dist/lib/mirror/infra/workspace-packages.adapter.d.ts +0 -26
- package/dist/lib/mirror/infra/workspace-packages.adapter.d.ts.map +0 -1
- package/dist/lib/mirror/infra/workspace-packages.adapter.js +0 -170
- package/dist/lib/mirror/infra/workspace-service.adapter.d.ts +0 -8
- package/dist/lib/mirror/infra/workspace-service.adapter.d.ts.map +0 -1
- package/dist/lib/mirror/infra/workspace-service.adapter.js +0 -10
- package/dist/lib/mirror/presentation/mirror-prelude.presenter.d.ts +0 -17
- package/dist/lib/mirror/presentation/mirror-prelude.presenter.d.ts.map +0 -1
- package/dist/lib/mirror/presentation/mirror-prelude.presenter.js +0 -35
- package/dist/lib/mirror/presentation/reporter.presenter.d.ts +0 -25
- package/dist/lib/mirror/presentation/reporter.presenter.d.ts.map +0 -1
- package/dist/lib/mirror/presentation/reporter.presenter.js +0 -140
- package/dist/lib/mirror/presentation/resolve-mirror-package-arg.presenter.d.ts +0 -11
- package/dist/lib/mirror/presentation/resolve-mirror-package-arg.presenter.d.ts.map +0 -1
- package/dist/lib/mirror/presentation/resolve-mirror-package-arg.presenter.js +0 -27
- package/dist/lib/shared/source-code/domain/text-edit.model.d.ts +0 -14
- package/dist/lib/shared/source-code/domain/text-edit.model.d.ts.map +0 -1
- package/dist/lib/shared/source-code/domain/text-edit.model.js +0 -30
- package/dist/lib/shared/source-code/infra/tsx-file-walk.adapter.d.ts +0 -4
- package/dist/lib/shared/source-code/infra/tsx-file-walk.adapter.d.ts.map +0 -1
- package/dist/lib/shared/source-code/infra/tsx-file-walk.adapter.js +0 -37
- package/dist/lib/tag/application/ports/target-resolver.port.d.ts +0 -6
- package/dist/lib/tag/application/ports/target-resolver.port.d.ts.map +0 -1
- package/dist/lib/tag/application/ports/typescript-tree-walk.port.d.ts +0 -6
- package/dist/lib/tag/application/ports/typescript-tree-walk.port.d.ts.map +0 -1
- package/dist/lib/tag/application/requests/tag-sync.request.d.ts +0 -10
- package/dist/lib/tag/application/requests/tag-sync.request.d.ts.map +0 -1
- package/dist/lib/tag/application/requests/tag-sync.request.js +0 -8
- package/dist/lib/tag/application/use-cases/run-tag-sync.use-case.d.ts +0 -23
- package/dist/lib/tag/application/use-cases/run-tag-sync.use-case.d.ts.map +0 -1
- package/dist/lib/tag/application/use-cases/run-tag-sync.use-case.js +0 -357
- package/dist/lib/tag/domain/types.domain.d.ts +0 -56
- package/dist/lib/tag/domain/types.domain.d.ts.map +0 -1
- package/dist/lib/tag/index.d.ts +0 -14
- package/dist/lib/tag/index.d.ts.map +0 -1
- package/dist/lib/tag/index.js +0 -10
- package/dist/lib/tag/infra/tag-sync-cli-options.adapter.d.ts +0 -14
- package/dist/lib/tag/infra/tag-sync-cli-options.adapter.d.ts.map +0 -1
- package/dist/lib/tag/infra/tag-target-candidates.adapter.d.ts +0 -4
- package/dist/lib/tag/infra/tag-target-candidates.adapter.d.ts.map +0 -1
- package/dist/lib/tag/infra/tag-target-candidates.adapter.js +0 -200
- package/dist/lib/tag/infra/tag-target-resolver.adapter.d.ts +0 -3
- package/dist/lib/tag/infra/tag-target-resolver.adapter.d.ts.map +0 -1
- package/dist/lib/tag/infra/tag-target-resolver.adapter.js +0 -4
- package/dist/lib/tag/infra/typescript-tree-walk.adapter.d.ts +0 -3
- package/dist/lib/tag/infra/typescript-tree-walk.adapter.d.ts.map +0 -1
- package/dist/lib/tag/infra/typescript-tree-walk.adapter.js +0 -4
- package/dist/lib/tag/presentation/colors.presenter.d.ts +0 -8
- package/dist/lib/tag/presentation/colors.presenter.d.ts.map +0 -1
- package/dist/lib/tag/presentation/colors.presenter.js +0 -9
- package/dist/lib/tag/presentation/resolve-tag-cli-target.presenter.d.ts +0 -8
- package/dist/lib/tag/presentation/resolve-tag-cli-target.presenter.d.ts.map +0 -1
- package/dist/lib/tag/presentation/resolve-tag-cli-target.presenter.js +0 -10
- package/dist/lib/tag/presentation/resolve-tag-workspace-root.presenter.d.ts +0 -8
- package/dist/lib/tag/presentation/resolve-tag-workspace-root.presenter.d.ts.map +0 -1
- package/dist/lib/tag/presentation/resolve-tag-workspace-root.presenter.js +0 -10
- package/dist/lib/tag/presentation/tag-prelude.presenter.d.ts +0 -15
- package/dist/lib/tag/presentation/tag-prelude.presenter.d.ts.map +0 -1
- package/dist/lib/tag/presentation/tag-prelude.presenter.js +0 -31
- package/dist/lib/tag/presentation/tag-sync.presenter.d.ts +0 -20
- package/dist/lib/tag/presentation/tag-sync.presenter.d.ts.map +0 -1
- package/dist/lib/tag/presentation/tag-sync.presenter.js +0 -92
- package/dist/program.d.ts +0 -4
- package/dist/program.d.ts.map +0 -1
- package/dist/program.js +0 -40
- /package/dist/lib/arrange/application/ports/{domain-source-parser.port.js → domain-source-parser.port.mjs} +0 -0
- /package/dist/lib/arrange/application/ports/{file-walker.port.js → file-walker.port.mjs} +0 -0
- /package/dist/lib/arrange/{infra/arrange-sync-cli-options.adapter.js → application/ports/group-file-preview.port.mjs} +0 -0
- /package/dist/lib/{core/application/ports/cli-io.port.js → arrange/application/requests/analyze-directory.request.mjs} +0 -0
- /package/dist/lib/{infra/fs-contract.port.js → arrange/application/requests/arrange-sync.request.mjs} +0 -0
- /package/dist/lib/{mirror/application/ports/file-system-service.port.js → arrange/application/requests/suggest-groups.request.mjs} +0 -0
- /package/dist/lib/{mirror/application/ports/mirror-sync-reporter.port.js → arrange/contracts/models.mjs} +0 -0
- /package/dist/lib/{mirror/application/ports/package-repository.port.js → arrange/contracts/presentation.contract.mjs} +0 -0
- /package/dist/lib/{mirror/application/ports/workspace-service.port.js → arrange/contracts/services.contract.mjs} +0 -0
- /package/dist/lib/{mirror/domain/types.domain.js → arrange/contracts/use-cases.contract.mjs} +0 -0
- /package/dist/lib/{mirror/infra/mirror-sync-cli-options.adapter.js → arrange/domain/types.domain.mjs} +0 -0
- /package/dist/lib/{tag/application/ports/target-resolver.port.js → arrange/infra/arrange-sync-cli-options.adapter.mjs} +0 -0
- /package/dist/lib/{tag/application/ports/typescript-tree-walk.port.js → config/application/ports/config-loader.port.mjs} +0 -0
- /package/dist/lib/{tag/domain/types.domain.js → config/domain/schema.domain.mjs} +0 -0
- /package/dist/lib/{tag/infra/tag-sync-cli-options.adapter.js → core/application/ports/cli-io.port.mjs} +0 -0
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import path from "node:path";
|
|
2
|
-
import { LONG_STRING_TOKEN_THRESHOLD, MAX_REPORT_LINES, } from "#lib/arrange/domain/constants.domain";
|
|
3
|
-
export function printAnalyzeReport(analyzeRootDirectoryPath, analyzeReport, logger) {
|
|
4
|
-
const { out } = logger;
|
|
5
|
-
out(`Path: ${path.resolve(analyzeRootDirectoryPath)}`);
|
|
6
|
-
out(`.ts/.tsx files: ${analyzeReport.files}`);
|
|
7
|
-
out(`cn(...) call sites: ${analyzeReport.cnCallExpressions}`);
|
|
8
|
-
out(`tv(...) call sites: ${analyzeReport.tvCallExpressions}`);
|
|
9
|
-
out(`\nLong cn(...) string literals (≥${LONG_STRING_TOKEN_THRESHOLD} tokens — consider splitting arguments): ${analyzeReport.longCnStringLiterals.length}`);
|
|
10
|
-
for (const findingEntry of analyzeReport.longCnStringLiterals.slice(0, MAX_REPORT_LINES)) {
|
|
11
|
-
out(` ${findingEntry.file}:${findingEntry.line} (${findingEntry.tokenCount} tokens) ${findingEntry.preview}`);
|
|
12
|
-
}
|
|
13
|
-
if (analyzeReport.longCnStringLiterals.length > MAX_REPORT_LINES) {
|
|
14
|
-
out(` … and ${analyzeReport.longCnStringLiterals.length - MAX_REPORT_LINES} more`);
|
|
15
|
-
}
|
|
16
|
-
out(`\nLong tv({...}) string literals in base/variants/… (≥${LONG_STRING_TOKEN_THRESHOLD} tokens): ${analyzeReport.longTvStringLiterals.length}`);
|
|
17
|
-
for (const findingEntry of analyzeReport.longTvStringLiterals.slice(0, MAX_REPORT_LINES)) {
|
|
18
|
-
out(` ${findingEntry.file}:${findingEntry.line} (${findingEntry.tokenCount} tokens) ${findingEntry.preview}`);
|
|
19
|
-
}
|
|
20
|
-
if (analyzeReport.longTvStringLiterals.length > MAX_REPORT_LINES) {
|
|
21
|
-
out(` … and ${analyzeReport.longTvStringLiterals.length - MAX_REPORT_LINES} more`);
|
|
22
|
-
}
|
|
23
|
-
out(`\nJSX className="..." or className={'...'} (static strings, ≥${LONG_STRING_TOKEN_THRESHOLD} tokens): ${analyzeReport.longJsxClassNameLiterals.length}`);
|
|
24
|
-
for (const findingEntry of analyzeReport.longJsxClassNameLiterals.slice(0, MAX_REPORT_LINES)) {
|
|
25
|
-
out(` ${findingEntry.file}:${findingEntry.line} (${findingEntry.tokenCount} tokens) ${findingEntry.preview}`);
|
|
26
|
-
}
|
|
27
|
-
if (analyzeReport.longJsxClassNameLiterals.length > MAX_REPORT_LINES) {
|
|
28
|
-
out(` … and ${analyzeReport.longJsxClassNameLiterals.length - MAX_REPORT_LINES} more`);
|
|
29
|
-
}
|
|
30
|
-
out(`\ncn(...) nested inside tv({...}) (prefer a string or array — preview/apply can rewrite): ${analyzeReport.cnInsideTvCalls.length}`);
|
|
31
|
-
for (const findingEntry of analyzeReport.cnInsideTvCalls.slice(0, MAX_REPORT_LINES)) {
|
|
32
|
-
out(` ${findingEntry.file}:${findingEntry.line} (${findingEntry.argCount} args) ${findingEntry.preview}`);
|
|
33
|
-
}
|
|
34
|
-
if (analyzeReport.cnInsideTvCalls.length > MAX_REPORT_LINES) {
|
|
35
|
-
out(` … and ${analyzeReport.cnInsideTvCalls.length - MAX_REPORT_LINES} more`);
|
|
36
|
-
}
|
|
37
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"resolve-arrange-cli-target.presenter.d.ts","sourceRoot":"","sources":["../../../../src/lib/arrange/presentation/resolve-arrange-cli-target.presenter.ts"],"names":[],"mappings":"AAGA,wBAAgB,2BAA2B,CACzC,uBAAuB,EAAE,MAAM,EAC/B,MAAM,EAAE,MAAM,GAAG,SAAS,GACzB,MAAM,CAIR"}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import path from "node:path";
|
|
2
|
-
import { DEFAULT_ARRANGE_TARGET } from "#lib/arrange/domain/constants.domain";
|
|
3
|
-
export function resolveArrangeCliTargetPath(currentWorkingDirectory, target) {
|
|
4
|
-
return target
|
|
5
|
-
? path.resolve(target)
|
|
6
|
-
: path.resolve(currentWorkingDirectory, DEFAULT_ARRANGE_TARGET);
|
|
7
|
-
}
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
import { z } from "zod";
|
|
2
|
-
export type CodefastAfterWriteHook = (ctx: {
|
|
3
|
-
files: string[];
|
|
4
|
-
}) => void | Promise<void>;
|
|
5
|
-
export declare const hookSchema: z.ZodCustom<CodefastAfterWriteHook, CodefastAfterWriteHook>;
|
|
6
|
-
export declare const mirrorConfigSchema: z.ZodObject<{
|
|
7
|
-
skipPackages: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
8
|
-
pathTransformations: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
9
|
-
removePrefix: z.ZodOptional<z.ZodString>;
|
|
10
|
-
}, z.core.$strict>>>;
|
|
11
|
-
customExports: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodRecord<z.ZodString, z.ZodString>>>;
|
|
12
|
-
cssExports: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodBoolean, z.ZodObject<{
|
|
13
|
-
enabled: z.ZodOptional<z.ZodBoolean>;
|
|
14
|
-
customExports: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
15
|
-
forceExportFiles: z.ZodOptional<z.ZodBoolean>;
|
|
16
|
-
}, z.core.$strict>]>>>;
|
|
17
|
-
}, z.core.$strict>;
|
|
18
|
-
export declare const codefastTagConfigSchema: z.ZodObject<{
|
|
19
|
-
skipPackages: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
20
|
-
onAfterWrite: z.ZodOptional<z.ZodCustom<CodefastAfterWriteHook, CodefastAfterWriteHook>>;
|
|
21
|
-
}, z.core.$strict>;
|
|
22
|
-
export declare const codefastArrangeConfigSchema: z.ZodObject<{
|
|
23
|
-
onAfterWrite: z.ZodOptional<z.ZodCustom<CodefastAfterWriteHook, CodefastAfterWriteHook>>;
|
|
24
|
-
}, z.core.$strict>;
|
|
25
|
-
export declare const codefastConfigSchema: z.ZodObject<{
|
|
26
|
-
mirror: z.ZodOptional<z.ZodObject<{
|
|
27
|
-
skipPackages: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
28
|
-
pathTransformations: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
29
|
-
removePrefix: z.ZodOptional<z.ZodString>;
|
|
30
|
-
}, z.core.$strict>>>;
|
|
31
|
-
customExports: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodRecord<z.ZodString, z.ZodString>>>;
|
|
32
|
-
cssExports: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodBoolean, z.ZodObject<{
|
|
33
|
-
enabled: z.ZodOptional<z.ZodBoolean>;
|
|
34
|
-
customExports: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
35
|
-
forceExportFiles: z.ZodOptional<z.ZodBoolean>;
|
|
36
|
-
}, z.core.$strict>]>>>;
|
|
37
|
-
}, z.core.$strict>>;
|
|
38
|
-
tag: z.ZodOptional<z.ZodObject<{
|
|
39
|
-
skipPackages: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
40
|
-
onAfterWrite: z.ZodOptional<z.ZodCustom<CodefastAfterWriteHook, CodefastAfterWriteHook>>;
|
|
41
|
-
}, z.core.$strict>>;
|
|
42
|
-
arrange: z.ZodOptional<z.ZodObject<{
|
|
43
|
-
onAfterWrite: z.ZodOptional<z.ZodCustom<CodefastAfterWriteHook, CodefastAfterWriteHook>>;
|
|
44
|
-
}, z.core.$strict>>;
|
|
45
|
-
}, z.core.$strict>;
|
|
46
|
-
export type MirrorConfig = z.infer<typeof mirrorConfigSchema>;
|
|
47
|
-
export type CodefastTagConfig = z.infer<typeof codefastTagConfigSchema>;
|
|
48
|
-
export type CodefastArrangeConfig = z.infer<typeof codefastArrangeConfigSchema>;
|
|
49
|
-
export type CodefastConfig = z.infer<typeof codefastConfigSchema>;
|
|
50
|
-
//# sourceMappingURL=schema.domain.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"schema.domain.d.ts","sourceRoot":"","sources":["../../../../src/lib/config/domain/schema.domain.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,MAAM,sBAAsB,GAAG,CAAC,GAAG,EAAE;IAAE,KAAK,EAAE,MAAM,EAAE,CAAA;CAAE,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAExF,eAAO,MAAM,UAAU,6DAErB,CAAC;AAEH,eAAO,MAAM,kBAAkB;;;;;;;;;;;kBAuBpB,CAAC;AAEZ,eAAO,MAAM,uBAAuB;;;kBAKzB,CAAC;AAEZ,eAAO,MAAM,2BAA2B;;kBAI7B,CAAC;AAEZ,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;kBAMtB,CAAC;AAEZ,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAC9D,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AACxE,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAChF,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC"}
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
import { z } from "zod";
|
|
2
|
-
export const hookSchema = z.custom((value) => typeof value === "function", {
|
|
3
|
-
message: "Expected a function",
|
|
4
|
-
});
|
|
5
|
-
export const mirrorConfigSchema = z
|
|
6
|
-
.object({
|
|
7
|
-
skipPackages: z.array(z.string()).optional(),
|
|
8
|
-
pathTransformations: z
|
|
9
|
-
.record(z.string(), z.object({ removePrefix: z.string().optional() }).strict())
|
|
10
|
-
.optional(),
|
|
11
|
-
customExports: z.record(z.string(), z.record(z.string(), z.string())).optional(),
|
|
12
|
-
cssExports: z
|
|
13
|
-
.record(z.string(), z.union([
|
|
14
|
-
z.boolean(),
|
|
15
|
-
z
|
|
16
|
-
.object({
|
|
17
|
-
enabled: z.boolean().optional(),
|
|
18
|
-
customExports: z.record(z.string(), z.string()).optional(),
|
|
19
|
-
forceExportFiles: z.boolean().optional(),
|
|
20
|
-
})
|
|
21
|
-
.strict(),
|
|
22
|
-
]))
|
|
23
|
-
.optional(),
|
|
24
|
-
})
|
|
25
|
-
.strict();
|
|
26
|
-
export const codefastTagConfigSchema = z
|
|
27
|
-
.object({
|
|
28
|
-
skipPackages: z.array(z.string()).optional(),
|
|
29
|
-
onAfterWrite: hookSchema.optional(),
|
|
30
|
-
})
|
|
31
|
-
.strict();
|
|
32
|
-
export const codefastArrangeConfigSchema = z
|
|
33
|
-
.object({
|
|
34
|
-
onAfterWrite: hookSchema.optional(),
|
|
35
|
-
})
|
|
36
|
-
.strict();
|
|
37
|
-
export const codefastConfigSchema = z
|
|
38
|
-
.object({
|
|
39
|
-
mirror: mirrorConfigSchema.optional(),
|
|
40
|
-
tag: codefastTagConfigSchema.optional(),
|
|
41
|
-
arrange: codefastArrangeConfigSchema.optional(),
|
|
42
|
-
})
|
|
43
|
-
.strict();
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
export { loadConfig, resetConfigLoaderCacheForTests } from "#lib/config/infra/loader.adapter";
|
|
2
|
-
export { codefastArrangeConfigSchema, codefastConfigSchema, codefastTagConfigSchema, hookSchema, mirrorConfigSchema, } from "#lib/config/domain/schema.domain";
|
|
3
|
-
export type { CodefastAfterWriteHook, CodefastArrangeConfig, CodefastConfig, CodefastTagConfig, MirrorConfig, } from "#lib/config/domain/schema.domain";
|
|
4
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/config/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,8BAA8B,EAAE,MAAM,kCAAkC,CAAC;AAC9F,OAAO,EACL,2BAA2B,EAC3B,oBAAoB,EACpB,uBAAuB,EACvB,UAAU,EACV,kBAAkB,GACnB,MAAM,kCAAkC,CAAC;AAC1C,YAAY,EACV,sBAAsB,EACtB,qBAAqB,EACrB,cAAc,EACd,iBAAiB,EACjB,YAAY,GACb,MAAM,kCAAkC,CAAC"}
|
package/dist/lib/config/index.js
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import type { CliFs } from "#lib/infra/fs-contract.port";
|
|
2
|
-
import type { CodefastConfig } from "#lib/config/domain/schema.domain";
|
|
3
|
-
type LoadConfigResult = {
|
|
4
|
-
config: CodefastConfig;
|
|
5
|
-
warnings: string[];
|
|
6
|
-
configPath?: string;
|
|
7
|
-
};
|
|
8
|
-
export declare function loadConfig(fs: CliFs, startDir?: string): Promise<LoadConfigResult>;
|
|
9
|
-
export declare function resetConfigLoaderCacheForTests(): void;
|
|
10
|
-
export {};
|
|
11
|
-
//# sourceMappingURL=loader.adapter.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"loader.adapter.d.ts","sourceRoot":"","sources":["../../../../src/lib/config/infra/loader.adapter.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAC;AAEzD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AASvE,KAAK,gBAAgB,GAAG;IACtB,MAAM,EAAE,cAAc,CAAC;IACvB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAkFF,wBAAsB,UAAU,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,SAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAM/F;AAED,wBAAgB,8BAA8B,IAAI,IAAI,CAErD"}
|
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
import path from "node:path";
|
|
2
|
-
import process from "node:process";
|
|
3
|
-
import jiti from "jiti";
|
|
4
|
-
import { ZodError } from "zod";
|
|
5
|
-
import { codefastConfigSchema } from "#lib/config/domain/schema.domain";
|
|
6
|
-
const CONFIG_JS_PRIORITY = [
|
|
7
|
-
"codefast.config.mjs",
|
|
8
|
-
"codefast.config.js",
|
|
9
|
-
"codefast.config.cjs",
|
|
10
|
-
];
|
|
11
|
-
const CONFIG_JSON = "codefast.config.json";
|
|
12
|
-
const cachedLoads = new Map();
|
|
13
|
-
function formatZodError(error, filePath) {
|
|
14
|
-
const formatted = error.issues
|
|
15
|
-
.map((issue) => {
|
|
16
|
-
const pathLabel = issue.path.length > 0 ? issue.path.join(".") : "<root>";
|
|
17
|
-
return ` - ${pathLabel}: ${issue.message}`;
|
|
18
|
-
})
|
|
19
|
-
.join("\n");
|
|
20
|
-
return `Invalid config schema in ${path.basename(filePath)}:\n${formatted}`;
|
|
21
|
-
}
|
|
22
|
-
function parseLoadedConfig(raw, filePath) {
|
|
23
|
-
try {
|
|
24
|
-
return codefastConfigSchema.parse(raw);
|
|
25
|
-
}
|
|
26
|
-
catch (caughtError) {
|
|
27
|
-
if (caughtError instanceof ZodError) {
|
|
28
|
-
throw new Error(formatZodError(caughtError, filePath));
|
|
29
|
-
}
|
|
30
|
-
throw caughtError;
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
function listConfigCandidates(startDir, fs) {
|
|
34
|
-
const candidates = [];
|
|
35
|
-
let current = path.resolve(startDir);
|
|
36
|
-
while (true) {
|
|
37
|
-
for (const name of CONFIG_JS_PRIORITY) {
|
|
38
|
-
const candidate = path.join(current, name);
|
|
39
|
-
if (fs.existsSync(candidate)) {
|
|
40
|
-
candidates.push(candidate);
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
const jsonCandidate = path.join(current, CONFIG_JSON);
|
|
44
|
-
if (fs.existsSync(jsonCandidate)) {
|
|
45
|
-
candidates.push(jsonCandidate);
|
|
46
|
-
}
|
|
47
|
-
const parent = path.dirname(current);
|
|
48
|
-
if (parent === current) {
|
|
49
|
-
break;
|
|
50
|
-
}
|
|
51
|
-
current = parent;
|
|
52
|
-
}
|
|
53
|
-
return candidates;
|
|
54
|
-
}
|
|
55
|
-
async function readConfigFromPath(filePath, fs) {
|
|
56
|
-
const ext = path.extname(filePath);
|
|
57
|
-
if (ext === ".json") {
|
|
58
|
-
const content = await fs.readFile(filePath, "utf8");
|
|
59
|
-
return parseLoadedConfig(JSON.parse(content), filePath);
|
|
60
|
-
}
|
|
61
|
-
const loadWithJiti = jiti(process.cwd(), {
|
|
62
|
-
interopDefault: true,
|
|
63
|
-
moduleCache: false,
|
|
64
|
-
});
|
|
65
|
-
const moduleConfig = loadWithJiti(filePath);
|
|
66
|
-
const unwrappedConfig = typeof moduleConfig === "object" && moduleConfig !== null && "default" in moduleConfig
|
|
67
|
-
? moduleConfig.default
|
|
68
|
-
: moduleConfig;
|
|
69
|
-
return parseLoadedConfig(unwrappedConfig, filePath);
|
|
70
|
-
}
|
|
71
|
-
async function loadOnce(fs, startDir) {
|
|
72
|
-
const warnings = [];
|
|
73
|
-
const configPaths = listConfigCandidates(startDir, fs);
|
|
74
|
-
if (configPaths.length === 0) {
|
|
75
|
-
return { config: {}, warnings };
|
|
76
|
-
}
|
|
77
|
-
const configPath = configPaths[0];
|
|
78
|
-
const config = await readConfigFromPath(configPath, fs);
|
|
79
|
-
return { config, warnings, configPath };
|
|
80
|
-
}
|
|
81
|
-
export async function loadConfig(fs, startDir = process.cwd()) {
|
|
82
|
-
const cacheKey = path.resolve(startDir);
|
|
83
|
-
if (!cachedLoads.has(cacheKey)) {
|
|
84
|
-
cachedLoads.set(cacheKey, loadOnce(fs, cacheKey));
|
|
85
|
-
}
|
|
86
|
-
return cachedLoads.get(cacheKey);
|
|
87
|
-
}
|
|
88
|
-
export function resetConfigLoaderCacheForTests() {
|
|
89
|
-
cachedLoads.clear();
|
|
90
|
-
}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
export type LibSourceLocation = {
|
|
2
|
-
readonly context: string;
|
|
3
|
-
readonly layer: string;
|
|
4
|
-
};
|
|
5
|
-
/**
|
|
6
|
-
* Extract `#lib/...` and relative import specifiers from TypeScript source (static `from` / `import("...")` only).
|
|
7
|
-
*/
|
|
8
|
-
export declare function extractImportSpecifiers(sourceText: string): string[];
|
|
9
|
-
export declare function parseLibSourceLocation(absoluteFilePath: string): LibSourceLocation | null;
|
|
10
|
-
export declare function isArchitectureExcludedSourceFile(absoluteFilePath: string): boolean;
|
|
11
|
-
/**
|
|
12
|
-
* Returns human-readable violations for a single file's imports (for unit tests and tooling).
|
|
13
|
-
*/
|
|
14
|
-
export declare function violationsForFileContent(absoluteFilePath: string, loc: LibSourceLocation, sourceText: string): string[];
|
|
15
|
-
/**
|
|
16
|
-
* Scans `packages/cli/src/lib` for explicit-architecture boundary violations (non-test sources only).
|
|
17
|
-
*/
|
|
18
|
-
export declare function scanCliPackageArchitectureViolations(cliPackageRoot: string): string[];
|
|
19
|
-
//# sourceMappingURL=architecture-boundaries.policy.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"architecture-boundaries.policy.d.ts","sourceRoot":"","sources":["../../../../src/lib/core/application/architecture-boundaries.policy.ts"],"names":[],"mappings":"AAoBA,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,CAkBpE;AAYD,wBAAgB,sBAAsB,CAAC,gBAAgB,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI,CA8BzF;AAED,wBAAgB,gCAAgC,CAAC,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAMlF;AA2QD;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,gBAAgB,EAAE,MAAM,EACxB,GAAG,EAAE,iBAAiB,EACtB,UAAU,EAAE,MAAM,GACjB,MAAM,EAAE,CA6BV;AAuBD;;GAEG;AACH,wBAAgB,oCAAoC,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM,EAAE,CAYrF"}
|
|
@@ -1,370 +0,0 @@
|
|
|
1
|
-
import fs from "node:fs";
|
|
2
|
-
import path from "node:path";
|
|
3
|
-
/** Product bounded contexts: no direct cross-imports between these (domain + application rules). */
|
|
4
|
-
const PRODUCT_BOUNDED_CONTEXTS = new Set(["arrange", "mirror", "tag"]);
|
|
5
|
-
const SHARED_SOURCE_CODE_CONTEXT = "shared-source-code";
|
|
6
|
-
const LAYERS = new Set(["domain", "application", "infra", "presentation"]);
|
|
7
|
-
/** Import roots that any product slice may depend on without going "through" another slice. */
|
|
8
|
-
const NEUTRAL_LIB_IMPORT_ROOTS = new Set(["core", "config", "infra", "shared"]);
|
|
9
|
-
function sharedSourceCodeLayerFromSpecifier(segments) {
|
|
10
|
-
if (segments.length < 3 || segments[0] !== "shared" || segments[1] !== "source-code") {
|
|
11
|
-
return null;
|
|
12
|
-
}
|
|
13
|
-
return segments[2];
|
|
14
|
-
}
|
|
15
|
-
/**
|
|
16
|
-
* Extract `#lib/...` and relative import specifiers from TypeScript source (static `from` / `import("...")` only).
|
|
17
|
-
*/
|
|
18
|
-
export function extractImportSpecifiers(sourceText) {
|
|
19
|
-
const specifiers = [];
|
|
20
|
-
const fromPattern = /\bfrom\s+["']([^"']+)["']/g;
|
|
21
|
-
let fromMatch;
|
|
22
|
-
while ((fromMatch = fromPattern.exec(sourceText)) !== null) {
|
|
23
|
-
specifiers.push(fromMatch[1]);
|
|
24
|
-
}
|
|
25
|
-
const importOnlyPattern = /^\s*import\s+["']([^"']+)["']\s*;/gm;
|
|
26
|
-
let importOnlyMatch;
|
|
27
|
-
while ((importOnlyMatch = importOnlyPattern.exec(sourceText)) !== null) {
|
|
28
|
-
specifiers.push(importOnlyMatch[1]);
|
|
29
|
-
}
|
|
30
|
-
const importCallPattern = /\bimport\s*\(\s*["']([^"']+)["']\s*\)/g;
|
|
31
|
-
let importCallMatch;
|
|
32
|
-
while ((importCallMatch = importCallPattern.exec(sourceText)) !== null) {
|
|
33
|
-
specifiers.push(importCallMatch[1]);
|
|
34
|
-
}
|
|
35
|
-
return specifiers;
|
|
36
|
-
}
|
|
37
|
-
function pathUnderCliSrcLib(absolutePath) {
|
|
38
|
-
const normalized = path.normalize(absolutePath);
|
|
39
|
-
const marker = `${path.sep}src${path.sep}lib${path.sep}`;
|
|
40
|
-
const index = normalized.lastIndexOf(marker);
|
|
41
|
-
if (index === -1) {
|
|
42
|
-
return null;
|
|
43
|
-
}
|
|
44
|
-
return normalized.slice(index + marker.length);
|
|
45
|
-
}
|
|
46
|
-
export function parseLibSourceLocation(absoluteFilePath) {
|
|
47
|
-
const tail = pathUnderCliSrcLib(absoluteFilePath);
|
|
48
|
-
if (tail === null) {
|
|
49
|
-
return null;
|
|
50
|
-
}
|
|
51
|
-
const parts = tail.split(path.sep).filter(Boolean);
|
|
52
|
-
if (parts.length < 2) {
|
|
53
|
-
return null;
|
|
54
|
-
}
|
|
55
|
-
if (parts[0] === "shared" && parts[1] === "source-code" && parts.length >= 3) {
|
|
56
|
-
const layer = parts[2];
|
|
57
|
-
if (!LAYERS.has(layer)) {
|
|
58
|
-
return null;
|
|
59
|
-
}
|
|
60
|
-
const rest = parts.slice(3);
|
|
61
|
-
if (layer === "domain" && rest[0] === "__tests__") {
|
|
62
|
-
return { context: SHARED_SOURCE_CODE_CONTEXT, layer: "domain" };
|
|
63
|
-
}
|
|
64
|
-
return { context: SHARED_SOURCE_CODE_CONTEXT, layer };
|
|
65
|
-
}
|
|
66
|
-
const [context, layer, ...rest] = parts;
|
|
67
|
-
if (!LAYERS.has(layer)) {
|
|
68
|
-
return null;
|
|
69
|
-
}
|
|
70
|
-
if (layer === "domain" && rest[0] === "__tests__") {
|
|
71
|
-
return { context, layer };
|
|
72
|
-
}
|
|
73
|
-
return { context, layer };
|
|
74
|
-
}
|
|
75
|
-
export function isArchitectureExcludedSourceFile(absoluteFilePath) {
|
|
76
|
-
const base = path.basename(absoluteFilePath);
|
|
77
|
-
if (base.endsWith(".test.ts") || base.endsWith(".integration.test.ts")) {
|
|
78
|
-
return true;
|
|
79
|
-
}
|
|
80
|
-
return absoluteFilePath.split(path.sep).includes("__tests__");
|
|
81
|
-
}
|
|
82
|
-
function resolveRelativeSpecifier(fromAbsoluteFile, specifier) {
|
|
83
|
-
if (!specifier.startsWith(".")) {
|
|
84
|
-
return null;
|
|
85
|
-
}
|
|
86
|
-
const dir = path.dirname(fromAbsoluteFile);
|
|
87
|
-
const resolved = path.normalize(path.join(dir, specifier));
|
|
88
|
-
return resolved;
|
|
89
|
-
}
|
|
90
|
-
function libTailAfterResolution(absoluteResolved) {
|
|
91
|
-
const tail = pathUnderCliSrcLib(absoluteResolved);
|
|
92
|
-
if (tail === null) {
|
|
93
|
-
return null;
|
|
94
|
-
}
|
|
95
|
-
return tail.split(path.sep).filter(Boolean);
|
|
96
|
-
}
|
|
97
|
-
function lastSegmentOfLibSpecifier(specifier) {
|
|
98
|
-
if (!specifier.startsWith("#lib/")) {
|
|
99
|
-
return null;
|
|
100
|
-
}
|
|
101
|
-
const segments = specifier.slice("#lib/".length).split("/").filter(Boolean);
|
|
102
|
-
return segments.length > 0 ? segments[segments.length - 1] : null;
|
|
103
|
-
}
|
|
104
|
-
function importedModuleStem(specifier, fromAbsoluteFile) {
|
|
105
|
-
if (specifier.startsWith("#lib/")) {
|
|
106
|
-
return lastSegmentOfLibSpecifier(specifier);
|
|
107
|
-
}
|
|
108
|
-
const resolved = resolveRelativeSpecifier(fromAbsoluteFile, specifier);
|
|
109
|
-
if (resolved === null) {
|
|
110
|
-
return null;
|
|
111
|
-
}
|
|
112
|
-
const withTsExtension = resolved.endsWith(".ts") ? resolved : `${resolved}.ts`;
|
|
113
|
-
const baseName = path.basename(withTsExtension);
|
|
114
|
-
return baseName.endsWith(".ts") ? baseName.slice(0, -".ts".length) : baseName;
|
|
115
|
-
}
|
|
116
|
-
function isPureDomainOrModelFileName(fileBaseName) {
|
|
117
|
-
return /\.(domain|model)\.ts$/.test(fileBaseName);
|
|
118
|
-
}
|
|
119
|
-
function isRuleAForbiddenImportedStem(moduleStem) {
|
|
120
|
-
return (moduleStem.includes(".use-case") ||
|
|
121
|
-
moduleStem.includes(".adapter") ||
|
|
122
|
-
moduleStem.includes(".presenter"));
|
|
123
|
-
}
|
|
124
|
-
function isRuleBForbiddenImportedStem(moduleStem) {
|
|
125
|
-
return moduleStem.includes(".adapter") || moduleStem.includes(".presenter");
|
|
126
|
-
}
|
|
127
|
-
function violationRuleAPureDomainModel(absoluteFilePath, fileBaseName, specifier) {
|
|
128
|
-
if (!isPureDomainOrModelFileName(fileBaseName)) {
|
|
129
|
-
return null;
|
|
130
|
-
}
|
|
131
|
-
const stem = importedModuleStem(specifier, absoluteFilePath);
|
|
132
|
-
if (stem === null || !isRuleAForbiddenImportedStem(stem)) {
|
|
133
|
-
return null;
|
|
134
|
-
}
|
|
135
|
-
return `${absoluteFilePath}: Rule A (pure domain/model) must not import orchestration or IO modules — blocked ${specifier} (stem "${stem}")`;
|
|
136
|
-
}
|
|
137
|
-
function violationRuleBApplicationIsolation(loc, absoluteFilePath, specifier) {
|
|
138
|
-
if (loc.layer !== "application") {
|
|
139
|
-
return null;
|
|
140
|
-
}
|
|
141
|
-
const stem = importedModuleStem(specifier, absoluteFilePath);
|
|
142
|
-
if (stem === null || !isRuleBForbiddenImportedStem(stem)) {
|
|
143
|
-
return null;
|
|
144
|
-
}
|
|
145
|
-
return `${absoluteFilePath}: Rule B (application isolation) must not import adapters or presenters — blocked ${specifier} (stem "${stem}")`;
|
|
146
|
-
}
|
|
147
|
-
function violationRuleCAntiCrossSlice(loc, specifier, fromAbsoluteFile) {
|
|
148
|
-
if (!PRODUCT_BOUNDED_CONTEXTS.has(loc.context)) {
|
|
149
|
-
return null;
|
|
150
|
-
}
|
|
151
|
-
if (specifier.startsWith("#lib/")) {
|
|
152
|
-
const segments = specifier.slice("#lib/".length).split("/").filter(Boolean);
|
|
153
|
-
if (segments.length === 0) {
|
|
154
|
-
return null;
|
|
155
|
-
}
|
|
156
|
-
const importedRoot = segments[0];
|
|
157
|
-
if (NEUTRAL_LIB_IMPORT_ROOTS.has(importedRoot)) {
|
|
158
|
-
return null;
|
|
159
|
-
}
|
|
160
|
-
if (importedRoot === loc.context) {
|
|
161
|
-
return null;
|
|
162
|
-
}
|
|
163
|
-
if (PRODUCT_BOUNDED_CONTEXTS.has(importedRoot)) {
|
|
164
|
-
return `${fromAbsoluteFile}: Rule C (slice isolation) context "${loc.context}" must not import "${specifier}" — use #lib/shared/... or neutral roots (core, config, infra) instead`;
|
|
165
|
-
}
|
|
166
|
-
return null;
|
|
167
|
-
}
|
|
168
|
-
const resolved = resolveRelativeSpecifier(fromAbsoluteFile, specifier);
|
|
169
|
-
if (resolved === null) {
|
|
170
|
-
return null;
|
|
171
|
-
}
|
|
172
|
-
const resolvedPath = resolved.endsWith(".ts") ? resolved : `${resolved}.ts`;
|
|
173
|
-
const parts = libTailAfterResolution(resolvedPath);
|
|
174
|
-
if (parts === null || parts.length === 0) {
|
|
175
|
-
return null;
|
|
176
|
-
}
|
|
177
|
-
const importedContext = parts[0];
|
|
178
|
-
if (NEUTRAL_LIB_IMPORT_ROOTS.has(importedContext)) {
|
|
179
|
-
return null;
|
|
180
|
-
}
|
|
181
|
-
if (importedContext === loc.context) {
|
|
182
|
-
return null;
|
|
183
|
-
}
|
|
184
|
-
if (PRODUCT_BOUNDED_CONTEXTS.has(importedContext)) {
|
|
185
|
-
return `${fromAbsoluteFile}: Rule C (slice isolation) context "${loc.context}" must not resolve into sibling slice via ${specifier}`;
|
|
186
|
-
}
|
|
187
|
-
return null;
|
|
188
|
-
}
|
|
189
|
-
function violationDomainLayer(loc, specifier, fromAbsoluteFile) {
|
|
190
|
-
if (specifier.startsWith("#lib/")) {
|
|
191
|
-
const segments = specifier.slice("#lib/".length).split("/").filter(Boolean);
|
|
192
|
-
if (segments.length === 0) {
|
|
193
|
-
return null;
|
|
194
|
-
}
|
|
195
|
-
if (segments[0] === "infra") {
|
|
196
|
-
return `${fromAbsoluteFile}: domain must not import ${specifier}`;
|
|
197
|
-
}
|
|
198
|
-
const sharedLayerImported = sharedSourceCodeLayerFromSpecifier(segments);
|
|
199
|
-
if (sharedLayerImported !== null && sharedLayerImported !== "domain") {
|
|
200
|
-
return `${fromAbsoluteFile}: domain must not import ${specifier}`;
|
|
201
|
-
}
|
|
202
|
-
if (segments[0] === loc.context && segments.length >= 2) {
|
|
203
|
-
const importLayer = segments[1];
|
|
204
|
-
if (importLayer === "application" ||
|
|
205
|
-
importLayer === "infra" ||
|
|
206
|
-
importLayer === "presentation") {
|
|
207
|
-
return `${fromAbsoluteFile}: domain must not import ${specifier}`;
|
|
208
|
-
}
|
|
209
|
-
}
|
|
210
|
-
if (segments.length >= 2 &&
|
|
211
|
-
segments[1] === "domain" &&
|
|
212
|
-
PRODUCT_BOUNDED_CONTEXTS.has(segments[0]) &&
|
|
213
|
-
segments[0] !== loc.context) {
|
|
214
|
-
return `${fromAbsoluteFile}: domain (${loc.context}) must not import other bounded context domain ${specifier}`;
|
|
215
|
-
}
|
|
216
|
-
if (loc.context === "core" &&
|
|
217
|
-
segments.length >= 2 &&
|
|
218
|
-
segments[1] === "domain" &&
|
|
219
|
-
PRODUCT_BOUNDED_CONTEXTS.has(segments[0])) {
|
|
220
|
-
return `${fromAbsoluteFile}: core/domain must not import bounded context domain ${specifier}`;
|
|
221
|
-
}
|
|
222
|
-
if (loc.context === "config" &&
|
|
223
|
-
segments.length >= 2 &&
|
|
224
|
-
segments[1] === "domain" &&
|
|
225
|
-
PRODUCT_BOUNDED_CONTEXTS.has(segments[0])) {
|
|
226
|
-
return `${fromAbsoluteFile}: config/domain must not import bounded context domain ${specifier}`;
|
|
227
|
-
}
|
|
228
|
-
if (loc.context === SHARED_SOURCE_CODE_CONTEXT && PRODUCT_BOUNDED_CONTEXTS.has(segments[0])) {
|
|
229
|
-
return `${fromAbsoluteFile}: shared source-code domain must not import product context ${specifier}`;
|
|
230
|
-
}
|
|
231
|
-
return null;
|
|
232
|
-
}
|
|
233
|
-
const resolved = resolveRelativeSpecifier(fromAbsoluteFile, specifier);
|
|
234
|
-
if (resolved === null) {
|
|
235
|
-
return null;
|
|
236
|
-
}
|
|
237
|
-
const parts = libTailAfterResolution(resolved);
|
|
238
|
-
if (parts === null || parts.length < 2) {
|
|
239
|
-
return null;
|
|
240
|
-
}
|
|
241
|
-
const [relCtx, relLayer] = parts;
|
|
242
|
-
if (relCtx === "infra") {
|
|
243
|
-
return `${fromAbsoluteFile}: domain must not resolve into infra via ${specifier}`;
|
|
244
|
-
}
|
|
245
|
-
if (relCtx === loc.context) {
|
|
246
|
-
if (relLayer === "application" || relLayer === "infra" || relLayer === "presentation") {
|
|
247
|
-
return `${fromAbsoluteFile}: domain must not resolve into ${relLayer} via ${specifier}`;
|
|
248
|
-
}
|
|
249
|
-
}
|
|
250
|
-
if (relLayer === "domain" && PRODUCT_BOUNDED_CONTEXTS.has(relCtx) && relCtx !== loc.context) {
|
|
251
|
-
return `${fromAbsoluteFile}: domain must not resolve into other bounded context domain via ${specifier}`;
|
|
252
|
-
}
|
|
253
|
-
if (loc.context === "core" && relLayer === "domain" && PRODUCT_BOUNDED_CONTEXTS.has(relCtx)) {
|
|
254
|
-
return `${fromAbsoluteFile}: core/domain must not resolve into bounded context domain via ${specifier}`;
|
|
255
|
-
}
|
|
256
|
-
return null;
|
|
257
|
-
}
|
|
258
|
-
function violationApplicationLayer(loc, specifier, fromAbsoluteFile) {
|
|
259
|
-
if (specifier.startsWith("#lib/")) {
|
|
260
|
-
const segments = specifier.slice("#lib/".length).split("/").filter(Boolean);
|
|
261
|
-
if (segments.length === 0) {
|
|
262
|
-
return null;
|
|
263
|
-
}
|
|
264
|
-
if (segments[0] === "infra") {
|
|
265
|
-
return `${fromAbsoluteFile}: application must not import ${specifier}`;
|
|
266
|
-
}
|
|
267
|
-
const sharedLayerImported = sharedSourceCodeLayerFromSpecifier(segments);
|
|
268
|
-
if (sharedLayerImported === "infra" ||
|
|
269
|
-
sharedLayerImported === "presentation" ||
|
|
270
|
-
sharedLayerImported === "application") {
|
|
271
|
-
return `${fromAbsoluteFile}: application must not import ${specifier}`;
|
|
272
|
-
}
|
|
273
|
-
if (segments.length >= 2 && (segments[1] === "infra" || segments[1] === "presentation")) {
|
|
274
|
-
return `${fromAbsoluteFile}: application must not import ${specifier}`;
|
|
275
|
-
}
|
|
276
|
-
if (PRODUCT_BOUNDED_CONTEXTS.has(loc.context) &&
|
|
277
|
-
PRODUCT_BOUNDED_CONTEXTS.has(segments[0]) &&
|
|
278
|
-
segments[0] !== loc.context) {
|
|
279
|
-
return `${fromAbsoluteFile}: application (${loc.context}) must not import ${specifier}`;
|
|
280
|
-
}
|
|
281
|
-
return null;
|
|
282
|
-
}
|
|
283
|
-
const resolved = resolveRelativeSpecifier(fromAbsoluteFile, specifier);
|
|
284
|
-
if (resolved === null) {
|
|
285
|
-
return null;
|
|
286
|
-
}
|
|
287
|
-
const parts = libTailAfterResolution(resolved);
|
|
288
|
-
if (parts === null || parts.length < 2) {
|
|
289
|
-
return null;
|
|
290
|
-
}
|
|
291
|
-
const [relCtx, relLayer] = parts;
|
|
292
|
-
if (relCtx === "infra") {
|
|
293
|
-
return `${fromAbsoluteFile}: application must not resolve into infra via ${specifier}`;
|
|
294
|
-
}
|
|
295
|
-
if (relLayer === "infra" || relLayer === "presentation") {
|
|
296
|
-
return `${fromAbsoluteFile}: application must not resolve into ${relLayer} via ${specifier}`;
|
|
297
|
-
}
|
|
298
|
-
return null;
|
|
299
|
-
}
|
|
300
|
-
/**
|
|
301
|
-
* Returns human-readable violations for a single file's imports (for unit tests and tooling).
|
|
302
|
-
*/
|
|
303
|
-
export function violationsForFileContent(absoluteFilePath, loc, sourceText) {
|
|
304
|
-
const violations = [];
|
|
305
|
-
const fileBaseName = path.basename(absoluteFilePath);
|
|
306
|
-
for (const specifier of extractImportSpecifiers(sourceText)) {
|
|
307
|
-
const ruleA = violationRuleAPureDomainModel(absoluteFilePath, fileBaseName, specifier);
|
|
308
|
-
if (ruleA !== null) {
|
|
309
|
-
violations.push(ruleA);
|
|
310
|
-
}
|
|
311
|
-
const ruleB = violationRuleBApplicationIsolation(loc, absoluteFilePath, specifier);
|
|
312
|
-
if (ruleB !== null) {
|
|
313
|
-
violations.push(ruleB);
|
|
314
|
-
}
|
|
315
|
-
const ruleC = violationRuleCAntiCrossSlice(loc, specifier, absoluteFilePath);
|
|
316
|
-
if (ruleC !== null) {
|
|
317
|
-
violations.push(ruleC);
|
|
318
|
-
}
|
|
319
|
-
if (loc.layer === "domain") {
|
|
320
|
-
const domainViolation = violationDomainLayer(loc, specifier, absoluteFilePath);
|
|
321
|
-
if (domainViolation !== null) {
|
|
322
|
-
violations.push(domainViolation);
|
|
323
|
-
}
|
|
324
|
-
}
|
|
325
|
-
else if (loc.layer === "application") {
|
|
326
|
-
const appViolation = violationApplicationLayer(loc, specifier, absoluteFilePath);
|
|
327
|
-
if (appViolation !== null) {
|
|
328
|
-
violations.push(appViolation);
|
|
329
|
-
}
|
|
330
|
-
}
|
|
331
|
-
}
|
|
332
|
-
return [...new Set(violations)];
|
|
333
|
-
}
|
|
334
|
-
function walkNonTestTsFiles(rootDir) {
|
|
335
|
-
const results = [];
|
|
336
|
-
const scan = (dir) => {
|
|
337
|
-
for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
|
|
338
|
-
const full = path.join(dir, entry.name);
|
|
339
|
-
if (entry.isDirectory()) {
|
|
340
|
-
if (entry.name === "node_modules" || entry.name === "dist") {
|
|
341
|
-
continue;
|
|
342
|
-
}
|
|
343
|
-
scan(full);
|
|
344
|
-
}
|
|
345
|
-
else if (entry.isFile() && entry.name.endsWith(".ts")) {
|
|
346
|
-
if (!isArchitectureExcludedSourceFile(full)) {
|
|
347
|
-
results.push(full);
|
|
348
|
-
}
|
|
349
|
-
}
|
|
350
|
-
}
|
|
351
|
-
};
|
|
352
|
-
scan(rootDir);
|
|
353
|
-
return results;
|
|
354
|
-
}
|
|
355
|
-
/**
|
|
356
|
-
* Scans `packages/cli/src/lib` for explicit-architecture boundary violations (non-test sources only).
|
|
357
|
-
*/
|
|
358
|
-
export function scanCliPackageArchitectureViolations(cliPackageRoot) {
|
|
359
|
-
const libRoot = path.join(cliPackageRoot, "src", "lib");
|
|
360
|
-
const violations = [];
|
|
361
|
-
for (const absoluteFilePath of walkNonTestTsFiles(libRoot)) {
|
|
362
|
-
const loc = parseLibSourceLocation(absoluteFilePath);
|
|
363
|
-
if (loc === null) {
|
|
364
|
-
continue;
|
|
365
|
-
}
|
|
366
|
-
const sourceText = fs.readFileSync(absoluteFilePath, "utf8");
|
|
367
|
-
violations.push(...violationsForFileContent(absoluteFilePath, loc, sourceText));
|
|
368
|
-
}
|
|
369
|
-
return violations;
|
|
370
|
-
}
|