@codefast/cli 0.3.14-canary.2 → 0.3.15
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 +8 -3
- package/dist/bootstrap/cli-application.module.mjs +18 -0
- package/dist/bootstrap/composition-root.mjs +14 -0
- package/dist/bootstrap/register-cli-command-trees.mjs +7 -0
- package/dist/{lib → domains}/arrange/application/use-cases/analyze-directory.use-case.mjs +12 -12
- package/dist/{lib → domains}/arrange/application/use-cases/prepare-arrange-workspace.use-case.mjs +19 -18
- package/dist/{lib → domains}/arrange/application/use-cases/run-arrange-sync.use-case.mjs +18 -18
- package/dist/{lib → domains}/arrange/application/use-cases/suggest-cn-groups.use-case.mjs +5 -5
- package/dist/domains/arrange/arrange.module.mjs +38 -0
- package/dist/domains/arrange/composition/tokens.mjs +17 -0
- package/dist/{lib/arrange/domain/arrange-analyze.service.mjs → domains/arrange/domain/arrange-analyze.domain-service.mjs} +1 -1
- package/dist/{lib/arrange/domain/arrange-grouping.service.mjs → domains/arrange/domain/arrange-grouping.domain-service.mjs} +2 -2
- package/dist/{lib → domains}/arrange/domain/ast/ast-helpers.helper.mjs +2 -2
- package/dist/{lib → domains}/arrange/domain/ast/ast-node.model.mjs +1 -1
- package/dist/{lib → domains}/arrange/domain/ast/collectors-cn.collector.mjs +1 -1
- package/dist/{lib → domains}/arrange/domain/ast/collectors-jsx.collector.mjs +1 -1
- package/dist/{lib → domains}/arrange/domain/ast/collectors-tv.collector.mjs +1 -1
- package/dist/{lib → domains}/arrange/domain/ast/targets.model.mjs +2 -2
- package/dist/{lib → domains}/arrange/domain/constants.domain.mjs +1 -1
- package/dist/{lib → domains}/arrange/domain/grouping.domain.mjs +1 -1
- package/dist/{lib → domains}/arrange/domain/imports.domain.mjs +1 -1
- package/dist/{lib → domains}/arrange/domain/source-text-formatters.formatter.mjs +2 -2
- package/dist/{lib/arrange/domain/tailwind-grouping.service.mjs → domains/arrange/domain/tailwind-grouping.domain-service.mjs} +5 -5
- package/dist/{lib → domains}/arrange/domain/tailwind-token-classifier.domain-service.mjs +1 -1
- package/dist/{lib → domains}/arrange/domain/tailwind-token.value-object.mjs +1 -1
- package/dist/{lib/arrange/application/services/arrange-file-processor.service.mjs → domains/arrange/infrastructure/adapters/arrange-file-processor.adapter.mjs} +8 -8
- package/dist/domains/arrange/infrastructure/adapters/arrange-target-path-resolver.adapter.mjs +247 -0
- package/dist/{lib/arrange/application/services/arrange-target-scanner.service.mjs → domains/arrange/infrastructure/adapters/arrange-target-scanner.adapter.mjs} +8 -8
- package/dist/{lib/arrange/adapters/secondary → domains/arrange/infrastructure/adapters}/domain-source-parser.adapter.mjs +10 -8
- package/dist/{lib/arrange/adapters/secondary → domains/arrange/infrastructure/adapters}/file-walker.adapter.mjs +8 -9
- package/dist/domains/arrange/infrastructure/typescript-ast-translator.mjs +580 -0
- package/dist/{lib/arrange/adapters/primary → domains/arrange/presentation}/cli/arrange.command.mjs +195 -54
- package/dist/{lib/arrange/presentation → domains/arrange/presentation/presenters}/arrange-analyze.presenter.mjs +26 -33
- package/dist/{lib/arrange/presentation → domains/arrange/presentation/presenters}/arrange-cli.schema.mjs +1 -1
- package/dist/{lib/tag/presentation/present-tag-sync-result.presenter.mjs → domains/arrange/presentation/presenters/arrange-sync.presenter.mjs} +12 -9
- package/dist/{lib/arrange/presentation → domains/arrange/presentation/presenters}/group-file-preview.presenter.mjs +46 -46
- package/dist/domains/config/composition/tokens.mjs +7 -0
- package/dist/{lib/config/infrastructure/config-schema.adapter.mjs → domains/config/domain/codefast-config.schema.mjs} +6 -6
- package/dist/{lib/config/infrastructure → domains/config/infrastructure/adapters}/config-loader.adapter.mjs +76 -77
- package/dist/{lib/config/infrastructure → domains/config/infrastructure/adapters}/config-warning-reporter.adapter.mjs +6 -6
- package/dist/domains/config/infrastructure/adapters/zod-codefast-config-schema.adapter.mjs +236 -0
- package/dist/domains/mirror/application/mirror-sync-cli-result.mjs +15 -0
- package/dist/{lib → domains}/mirror/application/use-cases/prepare-mirror-sync.use-case.mjs +14 -15
- package/dist/{lib → domains}/mirror/application/use-cases/run-mirror-sync.use-case.mjs +69 -54
- package/dist/{lib/mirror/contracts → domains/mirror/composition}/tokens.mjs +4 -3
- package/dist/{lib → domains}/mirror/domain/constants.domain.mjs +1 -1
- package/dist/{lib → domains}/mirror/domain/errors.domain.mjs +1 -1
- package/dist/{lib/mirror/application/services/generate-mirror-exports.service.mjs → domains/mirror/domain/generate-mirror-exports.domain-service.mjs} +2 -2
- package/dist/{lib → domains}/mirror/domain/package-display-name.policy.mjs +1 -1
- package/dist/{lib → domains}/mirror/domain/path-normalizer.value-object.mjs +1 -1
- package/dist/{lib/mirror/adapters/secondary → domains/mirror/infrastructure/adapters}/file-system-service.adapter.mjs +8 -8
- package/dist/domains/mirror/infrastructure/adapters/mirror-package-path-resolver.adapter.mjs +252 -0
- package/dist/{lib/mirror/adapters/secondary → domains/mirror/infrastructure/adapters}/mirror-sync-reporter.adapter.mjs +94 -15
- package/dist/{lib/mirror/adapters/secondary → domains/mirror/infrastructure/adapters}/package-repository.adapter.mjs +4 -4
- package/dist/{lib/mirror/adapters/secondary → domains/mirror/infrastructure/adapters}/sync-workspace-package.adapter.mjs +23 -46
- package/dist/{lib/mirror/infrastructure → domains/mirror/infrastructure/guards}/dirent-list.guard.mjs +1 -1
- package/dist/{lib → domains}/mirror/infrastructure/package-json-exports.repository.mjs +27 -27
- package/dist/domains/mirror/mirror.module.mjs +26 -0
- package/dist/{lib/mirror/adapters/primary → domains/mirror/presentation}/cli/mirror.command.mjs +83 -27
- package/dist/{lib/mirror/presentation → domains/mirror/presentation/presenters}/mirror-cli.schema.mjs +1 -4
- package/dist/domains/mirror/presentation/presenters/present-mirror-sync-progress.presenter.mjs +265 -0
- package/dist/domains/tag/application/ports/outbound/tag-eligible-workspace-paths.port.mjs +1 -0
- package/dist/domains/tag/application/ports/outbound/tag-since-writer.port.mjs +1 -0
- package/dist/domains/tag/application/ports/outbound/tag-target-path-resolver.port.mjs +1 -0
- package/dist/domains/tag/application/ports/outbound/tag-target-runner.port.mjs +1 -0
- package/dist/domains/tag/application/ports/outbound/tag-version-resolver.port.mjs +1 -0
- package/dist/domains/tag/application/ports/presenting/present-tag-sync-progress.presenter.mjs +1 -0
- package/dist/domains/tag/application/ports/presenting/present-tag-sync-result.presenter.mjs +1 -0
- package/dist/domains/tag/application/requests/tag-sync-execution-input.mjs +1 -0
- package/dist/domains/tag/application/requests/tag-sync.request.mjs +1 -0
- package/dist/{lib → domains}/tag/application/tag-sync-cli-result.mjs +3 -3
- package/dist/{lib → domains}/tag/application/use-cases/prepare-tag-sync.use-case.mjs +20 -24
- package/dist/{lib → domains}/tag/application/use-cases/run-tag-sync.use-case.mjs +123 -129
- package/dist/domains/tag/composition/tokens.mjs +13 -0
- package/dist/domains/tag/contracts/models.mjs +1 -0
- package/dist/domains/tag/domain/types.domain.mjs +1 -0
- package/dist/{lib/tag/adapters/secondary → domains/tag/infrastructure/adapters}/tag-since-writer.adapter.mjs +105 -105
- package/dist/{lib/tag/adapters/secondary/typescript-tree-walk.adapter.mjs → domains/tag/infrastructure/adapters/tag-target-path-resolver.adapter.mjs} +11 -9
- package/dist/domains/tag/infrastructure/adapters/tag-target-resolver.adapter.mjs +302 -0
- package/dist/domains/tag/infrastructure/adapters/tag-target-runner.adapter.mjs +259 -0
- package/dist/{lib/tag/adapters/secondary → domains/tag/infrastructure/adapters}/tag-version-resolver.adapter.mjs +6 -6
- package/dist/{lib/tag/adapters/primary → domains/tag/presentation}/cli/tag.command.mjs +67 -27
- package/dist/{lib/tag/presentation/tag-sync-progress-listener.presenter.mjs → domains/tag/presentation/presenters/present-tag-sync-progress.presenter.mjs} +14 -9
- package/dist/domains/tag/presentation/presenters/present-tag-sync-result.presenter.mjs +290 -0
- package/dist/{lib/tag/presentation → domains/tag/presentation/presenters}/tag-cli.schema.mjs +1 -1
- package/dist/domains/tag/tag.module.mjs +28 -0
- package/dist/program.mjs +3 -2
- package/dist/shell/application/cli-runtime.tokens.mjs +18 -0
- package/dist/shell/application/coordination/cli-executor.coordination.mjs +1 -0
- package/dist/shell/application/coordination/cli-schema-parsing.coordination.mjs +1 -0
- package/dist/shell/application/global-cli-options.model.mjs +5 -0
- package/dist/shell/application/ports/inbound/load-codefast-config.port.mjs +1 -0
- package/dist/shell/application/ports/outbound/cli-fs.port.mjs +1 -0
- package/dist/shell/application/ports/outbound/cli-logger.port.mjs +1 -0
- package/dist/shell/application/ports/outbound/cli-path.port.mjs +1 -0
- package/dist/shell/application/ports/outbound/cli-runtime.port.mjs +1 -0
- package/dist/shell/application/ports/outbound/cli-telemetry.port.mjs +1 -0
- package/dist/shell/application/ports/outbound/cli-verbose-diagnostics.port.mjs +1 -0
- package/dist/shell/application/ports/outbound/format-app-error.port.mjs +1 -0
- package/dist/shell/application/ports/outbound/global-cli-options-parse.port.mjs +1 -0
- package/dist/shell/application/ports/outbound/repo-root-resolver.port.mjs +1 -0
- package/dist/shell/application/ports/outbound/typescript-source-file-walker.port.mjs +1 -0
- package/dist/shell/application/ports/outbound/workspace-package-layout.port.mjs +1 -0
- package/dist/shell/application/ports/primary/command.port.mjs +1 -0
- package/dist/shell/application/services/cli-executor.service.mjs +267 -0
- package/dist/shell/application/services/schema-validator.service.mjs +236 -0
- package/dist/{lib/core/application → shell/application/use-cases}/load-codefast-config.use-case.mjs +11 -13
- package/dist/shell/composition/tokens.mjs +5 -0
- package/dist/shell/contracts/cli-command-slots.mjs +11 -0
- package/dist/{lib/core → shell}/domain/caught-unknown-message.value-object.mjs +1 -1
- package/dist/{lib/core → shell}/domain/cli-exit-codes.domain.mjs +1 -1
- package/dist/shell/domain/cli-positional-arg.value-object.mjs +6 -0
- package/dist/{lib/core → shell}/domain/errors.domain.mjs +1 -1
- package/dist/{lib/core → shell}/domain/result.model.mjs +1 -1
- package/dist/{lib/shared/source-code/domain/text-edit.model.mjs → shell/domain/source-text-edit.support.mjs} +2 -2
- package/dist/shell/infrastructure/adapters/cli-verbose-diagnostics.adapter.mjs +228 -0
- package/dist/{lib/tag/adapters/secondary/tag-target-resolver.adapter.mjs → shell/infrastructure/adapters/format-app-error.adapter.mjs} +16 -13
- package/dist/shell/infrastructure/adapters/global-cli-options-parser.adapter.mjs +233 -0
- package/dist/{lib/mirror/adapters/secondary/workspace-service.adapter.mjs → shell/infrastructure/adapters/repo-root-resolver.adapter.mjs} +20 -13
- package/dist/shell/infrastructure/adapters/typescript-source-file-walker.adapter.mjs +259 -0
- package/dist/shell/infrastructure/commander/commander-cli-host.adapter.mjs +69 -0
- package/dist/{lib/infrastructure/node-io.adapter.mjs → shell/infrastructure/node/node-cli-fs.adapter.mjs} +11 -47
- package/dist/{lib/arrange/adapters/secondary/workspace-resolver.adapter.mjs → shell/infrastructure/node/node-cli-logger.adapter.mjs} +11 -13
- package/dist/{lib/core/infrastructure/path.adapter.mjs → shell/infrastructure/node/node-cli-path.adapter.mjs} +1 -1
- package/dist/{lib/core/infrastructure/repo-root-resolver.adapter.mjs → shell/infrastructure/node/node-cli-runtime.adapter.mjs} +14 -13
- package/dist/shell/infrastructure/telemetry/cli-telemetry.adapter.mjs +280 -0
- package/dist/shell/infrastructure/workspace/node-pnpm-workspace-package-layout.adapter.mjs +385 -0
- package/dist/shell/shell.module.mjs +43 -0
- package/dist/shell/wiring/optional-cli-port-telemetry-activation.mjs +13 -0
- package/package.json +9 -7
- package/dist/lib/arrange/adapters/primary/cli/arrange.presentation.module.mjs +0 -14
- package/dist/lib/arrange/adapters/primary/cli/presentation.tokens.mjs +0 -5
- package/dist/lib/arrange/application/services/arrange-target-path-resolver.service.mjs +0 -21
- package/dist/lib/arrange/arrange.module.mjs +0 -31
- package/dist/lib/arrange/contracts/tokens.mjs +0 -15
- package/dist/lib/arrange/infrastructure/typescript-ast-translator.adapter.mjs +0 -355
- package/dist/lib/arrange/presentation/arrange-sync.presenter.mjs +0 -33
- package/dist/lib/bootstrap/composition-root.mjs +0 -33
- package/dist/lib/config/application/services/load-config.service.mjs +0 -17
- package/dist/lib/config/contracts/tokens.mjs +0 -6
- package/dist/lib/core/application/services/global-cli-options-parser.service.mjs +0 -9
- package/dist/lib/core/application/services/schema-validator.service.mjs +0 -17
- package/dist/lib/core/contracts/tokens.mjs +0 -10
- package/dist/lib/core/core.module.mjs +0 -9
- package/dist/lib/core/infrastructure/infrastructure.module.mjs +0 -30
- package/dist/lib/core/infrastructure/port-telemetry.decorator.mjs +0 -62
- package/dist/lib/core/infrastructure/verbose-diagnostics.policy.mjs +0 -9
- package/dist/lib/core/presentation/cli-executor.presenter.mjs +0 -42
- package/dist/lib/core/presentation/cli-schema.parser.mjs +0 -7
- package/dist/lib/core/presentation/format-app-error.presenter.mjs +0 -17
- package/dist/lib/core/presentation/presentation.module.mjs +0 -5
- package/dist/lib/infrastructure/workspace/repo-root-resolver.service.mjs +0 -21
- package/dist/lib/kernel/contracts/tokens.mjs +0 -5
- package/dist/lib/mirror/application/mirror-sync-json.format.mjs +0 -12
- package/dist/lib/mirror/application/services/mirror-package-arg-resolver.service.mjs +0 -20
- package/dist/lib/mirror/infrastructure/mirror-console-reporter.presenter.mjs +0 -99
- package/dist/lib/mirror/infrastructure/package-filter-resolver.service.mjs +0 -25
- package/dist/lib/mirror/infrastructure/workspace-packages.service.mjs +0 -158
- package/dist/lib/mirror/mirror.module.mjs +0 -25
- package/dist/lib/shared/source-code/infrastructure/typescript-source-file-walker.service.mjs +0 -33
- package/dist/lib/tag/adapters/primary/cli/presentation.tokens.mjs +0 -6
- package/dist/lib/tag/adapters/primary/cli/tag.presentation.module.mjs +0 -13
- package/dist/lib/tag/application/services/tag-cli-target-path-resolver.service.mjs +0 -9
- package/dist/lib/tag/application/services/tag-target-runner.service.mjs +0 -21
- package/dist/lib/tag/application/tag-sync-json.format.mjs +0 -14
- package/dist/lib/tag/contracts/tokens.mjs +0 -10
- package/dist/lib/tag/infrastructure/tag-target-candidates.adapter.mjs +0 -170
- package/dist/lib/tag/presentation/colors.presenter.mjs +0 -12
- package/dist/lib/tag/presentation/tag-sync.presenter.mjs +0 -61
- package/dist/lib/tag/tag.module.mjs +0 -23
- /package/dist/{lib/arrange/application/ports/domain-source-parser.port.mjs → domains/arrange/application/ports/inbound/analyze-directory.port.mjs} +0 -0
- /package/dist/{lib/arrange/application/ports/file-walker.port.mjs → domains/arrange/application/ports/inbound/prepare-arrange-workspace.port.mjs} +0 -0
- /package/dist/{lib/arrange/application/ports/group-file-preview.port.mjs → domains/arrange/application/ports/inbound/run-arrange-sync.port.mjs} +0 -0
- /package/dist/{lib/arrange/application/ports/workspace-resolver.port.mjs → domains/arrange/application/ports/inbound/suggest-cn-groups.port.mjs} +0 -0
- /package/dist/{lib/arrange/application/requests/analyze-directory.request.mjs → domains/arrange/application/ports/outbound/arrange-file-processor.port.mjs} +0 -0
- /package/dist/{lib/arrange/application/requests/arrange-sync.request.mjs → domains/arrange/application/ports/outbound/arrange-target-path-resolver.port.mjs} +0 -0
- /package/dist/{lib/arrange/application/requests/suggest-groups.request.mjs → domains/arrange/application/ports/outbound/arrange-target-scanner.port.mjs} +0 -0
- /package/dist/{lib/arrange/contracts/analyze-report-presenter.contract.mjs → domains/arrange/application/ports/outbound/domain-source-parser.port.mjs} +0 -0
- /package/dist/{lib/arrange/contracts/models.mjs → domains/arrange/application/ports/outbound/file-walker.port.mjs} +0 -0
- /package/dist/{lib/arrange/contracts/services.contract.mjs → domains/arrange/application/ports/presenting/present-analyze-report.presenter.mjs} +0 -0
- /package/dist/{lib/arrange/domain/types.domain.mjs → domains/arrange/application/ports/presenting/present-arrange-sync-result.presenter.mjs} +0 -0
- /package/dist/{lib/config/application/ports/config-loader.port.mjs → domains/arrange/application/ports/presenting/present-group-file-preview.presenter.mjs} +0 -0
- /package/dist/{lib/config/application/ports/config-warning-reporter.port.mjs → domains/arrange/application/requests/analyze-directory.request.mjs} +0 -0
- /package/dist/{lib/config/domain/schema.domain.mjs → domains/arrange/application/requests/arrange-sync.request.mjs} +0 -0
- /package/dist/{lib/core/application/ports/cli-io.port.mjs → domains/arrange/application/requests/suggest-groups.request.mjs} +0 -0
- /package/dist/{lib/mirror → domains/arrange}/contracts/models.mjs +0 -0
- /package/dist/{lib/mirror → domains/arrange}/domain/types.domain.mjs +0 -0
- /package/dist/{lib/core/application/ports/path.port.mjs → domains/config/application/ports/outbound/codefast-config-schema.port.mjs} +0 -0
- /package/dist/{lib/core/application/ports/repo-root-resolver.port.mjs → domains/config/application/ports/outbound/config-loader.port.mjs} +0 -0
- /package/dist/{lib/core/application/ports/runtime.port.mjs → domains/config/application/ports/outbound/config-warning-reporter.port.mjs} +0 -0
- /package/dist/{lib/kernel/contracts/cli-command.contract.mjs → domains/config/domain/schema.domain.mjs} +0 -0
- /package/dist/{lib/mirror/application/ports/file-system-service.port.mjs → domains/mirror/application/ports/inbound/prepare-mirror-sync.port.mjs} +0 -0
- /package/dist/{lib/mirror/application/ports/mirror-sync-reporter.port.mjs → domains/mirror/application/ports/inbound/run-mirror-sync.port.mjs} +0 -0
- /package/dist/{lib/mirror/application/ports/package-repository.port.mjs → domains/mirror/application/ports/outbound/file-system-service.port.mjs} +0 -0
- /package/dist/{lib/mirror/application/ports/sync-workspace-package.port.mjs → domains/mirror/application/ports/outbound/mirror-package-path.port.mjs} +0 -0
- /package/dist/{lib/mirror/application/ports/workspace-service.port.mjs → domains/mirror/application/ports/outbound/mirror-sync-reporter.port.mjs} +0 -0
- /package/dist/{lib/mirror/application/requests/mirror-sync.request.mjs → domains/mirror/application/ports/outbound/package-repository.port.mjs} +0 -0
- /package/dist/{lib/tag/application/ports/tag-since-writer.port.mjs → domains/mirror/application/ports/outbound/sync-workspace-package.port.mjs} +0 -0
- /package/dist/{lib/tag/application/ports/tag-version-resolver.port.mjs → domains/mirror/application/ports/presenting/present-mirror-sync-progress.presenter.mjs} +0 -0
- /package/dist/{lib/tag/application/ports/target-resolver.port.mjs → domains/mirror/application/requests/mirror-sync-execution-input.mjs} +0 -0
- /package/dist/{lib/tag/application/ports/typescript-tree-walk.port.mjs → domains/mirror/application/requests/mirror-sync.request.mjs} +0 -0
- /package/dist/{lib/tag → domains/mirror}/contracts/models.mjs +0 -0
- /package/dist/{lib/tag → domains/mirror}/domain/types.domain.mjs +0 -0
- /package/dist/{lib/tag/application/requests/tag-sync.request.mjs → domains/tag/application/ports/inbound/prepare-tag-sync.port.mjs} +0 -0
- /package/dist/{lib/tag/contracts/tag-sync-result-presenter.contract.mjs → domains/tag/application/ports/inbound/run-tag-sync.port.mjs} +0 -0
package/dist/{lib/arrange/adapters/primary → domains/arrange/presentation}/cli/arrange.command.mjs
RENAMED
|
@@ -1,14 +1,11 @@
|
|
|
1
|
-
import { AnalyzeDirectoryUseCaseToken,
|
|
2
|
-
import {
|
|
3
|
-
import
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import { parseWithCliSchema } from "../../../../core/presentation/cli-schema.parser.mjs";
|
|
8
|
-
import { consumeCliAppError } from "../../../../core/presentation/cli-executor.presenter.mjs";
|
|
9
|
-
import { Option } from "commander";
|
|
1
|
+
import { AnalyzeDirectoryUseCaseToken, PrepareArrangeWorkspaceUseCaseToken, PresentAnalyzeReportPresenterToken, PresentArrangeSyncResultPresenterToken, PresentGroupFilePreviewPresenterToken, RunArrangeSyncUseCaseToken, SuggestCnGroupsUseCaseToken } from "../../composition/tokens.mjs";
|
|
2
|
+
import { CliExecutorToken, CliLoggerPortToken, CliRuntimeToken, CliSchemaParsingToken } from "../../../../shell/application/cli-runtime.tokens.mjs";
|
|
3
|
+
import "../../../../shell/domain/cli-exit-codes.domain.mjs";
|
|
4
|
+
import { arrangeAnalyzeDirectoryRequestSchema, arrangeSuggestGroupsRequestSchema, arrangeSyncRunRequestSchema } from "../presenters/arrange-cli.schema.mjs";
|
|
5
|
+
import { CLI_COMMAND_SLOT_NAME } from "../../../../shell/contracts/cli-command-slots.mjs";
|
|
6
|
+
import { readOptionalPositionalArg } from "../../../../shell/domain/cli-positional-arg.value-object.mjs";
|
|
10
7
|
import { inject, injectable } from "@codefast/di";
|
|
11
|
-
//#region src/
|
|
8
|
+
//#region src/domains/arrange/presentation/cli/arrange.command.ts
|
|
12
9
|
function toPrimitive(input, hint) {
|
|
13
10
|
if (typeof input !== "object" || input === null) return input;
|
|
14
11
|
var prim = input[Symbol.toPrimitive];
|
|
@@ -219,18 +216,18 @@ function _apply_decs_2311(targetClass, classDecs, memberDecs, classDecsHaveThis,
|
|
|
219
216
|
};
|
|
220
217
|
}
|
|
221
218
|
let _dec, _initClass;
|
|
222
|
-
function withClassNameOption() {
|
|
223
|
-
return new Option("--with-classname, --with-class-name", "Append className as final cn() argument").default(false);
|
|
224
|
-
}
|
|
225
219
|
_dec = injectable([
|
|
226
|
-
inject(
|
|
220
|
+
inject(CliLoggerPortToken),
|
|
227
221
|
inject(CliRuntimeToken),
|
|
228
222
|
inject(PrepareArrangeWorkspaceUseCaseToken),
|
|
229
223
|
inject(AnalyzeDirectoryUseCaseToken),
|
|
230
224
|
inject(RunArrangeSyncUseCaseToken),
|
|
231
225
|
inject(SuggestCnGroupsUseCaseToken),
|
|
232
226
|
inject(PresentAnalyzeReportPresenterToken),
|
|
233
|
-
inject(
|
|
227
|
+
inject(PresentGroupFilePreviewPresenterToken),
|
|
228
|
+
inject(PresentArrangeSyncResultPresenterToken),
|
|
229
|
+
inject(CliSchemaParsingToken),
|
|
230
|
+
inject(CliExecutorToken)
|
|
234
231
|
]);
|
|
235
232
|
let _ArrangeCommand;
|
|
236
233
|
(class {
|
|
@@ -241,11 +238,14 @@ let _ArrangeCommand;
|
|
|
241
238
|
runArrangeSync;
|
|
242
239
|
suggestCnGroups;
|
|
243
240
|
presentAnalyzeReport;
|
|
244
|
-
|
|
241
|
+
presentGroupFilePreview;
|
|
242
|
+
presentArrangeSyncResult;
|
|
243
|
+
schemaValidation;
|
|
244
|
+
cliExecutor;
|
|
245
245
|
static {
|
|
246
246
|
({c: [_ArrangeCommand, _initClass]} = _apply_decs_2311(this, [_dec], []));
|
|
247
247
|
}
|
|
248
|
-
constructor(logger, runtime, prepareWorkspace, analyzeDirectory, runArrangeSync, suggestCnGroups, presentAnalyzeReport,
|
|
248
|
+
constructor(logger, runtime, prepareWorkspace, analyzeDirectory, runArrangeSync, suggestCnGroups, presentAnalyzeReport, presentGroupFilePreview, presentArrangeSyncResult, schemaValidation, cliExecutor) {
|
|
249
249
|
this.logger = logger;
|
|
250
250
|
this.runtime = runtime;
|
|
251
251
|
this.prepareWorkspace = prepareWorkspace;
|
|
@@ -253,69 +253,210 @@ let _ArrangeCommand;
|
|
|
253
253
|
this.runArrangeSync = runArrangeSync;
|
|
254
254
|
this.suggestCnGroups = suggestCnGroups;
|
|
255
255
|
this.presentAnalyzeReport = presentAnalyzeReport;
|
|
256
|
-
this.
|
|
256
|
+
this.presentGroupFilePreview = presentGroupFilePreview;
|
|
257
|
+
this.presentArrangeSyncResult = presentArrangeSyncResult;
|
|
258
|
+
this.schemaValidation = schemaValidation;
|
|
259
|
+
this.cliExecutor = cliExecutor;
|
|
257
260
|
}
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
261
|
+
get definition() {
|
|
262
|
+
return {
|
|
263
|
+
name: CLI_COMMAND_SLOT_NAME.arrange,
|
|
264
|
+
description: "Analyze and regroup Tailwind classes in cn() / tv() calls (Tailwind v4)",
|
|
265
|
+
children: [
|
|
266
|
+
{
|
|
267
|
+
name: "analyze",
|
|
268
|
+
description: "Report long strings, nested cn in tv(), and related findings",
|
|
269
|
+
route: [{
|
|
270
|
+
kind: "optionalPositional",
|
|
271
|
+
argumentTemplate: "[target]",
|
|
272
|
+
helpBlurb: "Directory or file (default: nearest package directory from cwd)"
|
|
273
|
+
}, {
|
|
274
|
+
kind: "booleanFlag",
|
|
275
|
+
flagPhrase: "--json",
|
|
276
|
+
helpBlurb: "Print one JSON object on stdout instead of a human report",
|
|
277
|
+
whenUnsetUses: false
|
|
278
|
+
}],
|
|
279
|
+
action: async (positionalPieces, typedLocalCarrier) => {
|
|
280
|
+
await this.performAnalyzeSubtree(readOptionalPositionalArg(positionalPieces[0]), { jsonCandidate: typedLocalCarrier.json });
|
|
281
|
+
}
|
|
282
|
+
},
|
|
283
|
+
{
|
|
284
|
+
name: "preview",
|
|
285
|
+
description: "Dry-run: print suggested replacements without writing files",
|
|
286
|
+
route: [
|
|
287
|
+
{
|
|
288
|
+
kind: "optionalPositional",
|
|
289
|
+
argumentTemplate: "[target]",
|
|
290
|
+
helpBlurb: "Directory or file (default: nearest package directory from cwd)"
|
|
291
|
+
},
|
|
292
|
+
{
|
|
293
|
+
kind: "synonymousBooleanAliases",
|
|
294
|
+
commaJoinedFlags: "--with-classname, --with-class-name",
|
|
295
|
+
helpBlurb: "Append className as final cn() argument"
|
|
296
|
+
},
|
|
297
|
+
{
|
|
298
|
+
kind: "stringPlaceholderFlag",
|
|
299
|
+
flagPhraseWithPlaceholder: "--cn-import <spec>",
|
|
300
|
+
helpBlurb: "Override module specifier when adding cn import"
|
|
301
|
+
},
|
|
302
|
+
{
|
|
303
|
+
kind: "booleanFlag",
|
|
304
|
+
flagPhrase: "--json",
|
|
305
|
+
helpBlurb: "Print one JSON object on stdout (suppresses human progress)",
|
|
306
|
+
whenUnsetUses: false
|
|
307
|
+
}
|
|
308
|
+
],
|
|
309
|
+
action: async (positionalPieces, typedLocalCarrier) => {
|
|
310
|
+
await this.performApplyOrPreviewSubtree(false, readOptionalPositionalArg(positionalPieces[0]), typedLocalCarrier);
|
|
311
|
+
}
|
|
312
|
+
},
|
|
313
|
+
{
|
|
314
|
+
name: "apply",
|
|
315
|
+
description: "Apply grouping and cn-in-tv unwrap edits to files",
|
|
316
|
+
route: [
|
|
317
|
+
{
|
|
318
|
+
kind: "optionalPositional",
|
|
319
|
+
argumentTemplate: "[target]",
|
|
320
|
+
helpBlurb: "Directory or file (default: nearest package directory from cwd)"
|
|
321
|
+
},
|
|
322
|
+
{
|
|
323
|
+
kind: "synonymousBooleanAliases",
|
|
324
|
+
commaJoinedFlags: "--with-classname, --with-class-name",
|
|
325
|
+
helpBlurb: "Append className as final cn() argument"
|
|
326
|
+
},
|
|
327
|
+
{
|
|
328
|
+
kind: "stringPlaceholderFlag",
|
|
329
|
+
flagPhraseWithPlaceholder: "--cn-import <spec>",
|
|
330
|
+
helpBlurb: "Override module specifier when adding cn import"
|
|
331
|
+
},
|
|
332
|
+
{
|
|
333
|
+
kind: "booleanFlag",
|
|
334
|
+
flagPhrase: "--json",
|
|
335
|
+
helpBlurb: "Print one JSON object on stdout (suppresses human progress)",
|
|
336
|
+
whenUnsetUses: false
|
|
337
|
+
}
|
|
338
|
+
],
|
|
339
|
+
action: async (positionalPieces, typedLocalCarrier) => {
|
|
340
|
+
await this.performApplyOrPreviewSubtree(true, readOptionalPositionalArg(positionalPieces[0]), typedLocalCarrier);
|
|
341
|
+
}
|
|
342
|
+
},
|
|
343
|
+
{
|
|
344
|
+
name: "group",
|
|
345
|
+
description: "Try grouping on a pasted class string (stdout: cn(...) or tv array with --tv)",
|
|
346
|
+
route: [
|
|
347
|
+
{
|
|
348
|
+
kind: "greedyPositional",
|
|
349
|
+
argumentTemplate: "[tokens...]",
|
|
350
|
+
helpBlurb: "Class tokens (quote a single string if it contains spaces)"
|
|
351
|
+
},
|
|
352
|
+
{
|
|
353
|
+
kind: "booleanFlag",
|
|
354
|
+
flagPhrase: "--tv",
|
|
355
|
+
helpBlurb: "Emit tv()-style array instead of cn() call",
|
|
356
|
+
whenUnsetUses: false
|
|
357
|
+
},
|
|
358
|
+
{
|
|
359
|
+
kind: "synonymousBooleanAliases",
|
|
360
|
+
commaJoinedFlags: "--with-classname, --with-class-name",
|
|
361
|
+
helpBlurb: "Append className as final cn() argument"
|
|
362
|
+
},
|
|
363
|
+
{
|
|
364
|
+
kind: "booleanFlag",
|
|
365
|
+
flagPhrase: "--json",
|
|
366
|
+
helpBlurb: "Print one JSON object on stdout instead of plain lines",
|
|
367
|
+
whenUnsetUses: false
|
|
368
|
+
}
|
|
369
|
+
],
|
|
370
|
+
action: async (positionalPieces, typedLocalCarrier) => {
|
|
371
|
+
const rawTokenSeries = positionalPieces[0];
|
|
372
|
+
const classTokenSeries = Array.isArray(rawTokenSeries) ? rawTokenSeries.filter((segment) => typeof segment === "string") : [];
|
|
373
|
+
await this.performGroupSubtree(classTokenSeries, typedLocalCarrier);
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
]
|
|
377
|
+
};
|
|
266
378
|
}
|
|
267
|
-
async
|
|
379
|
+
async performAnalyzeSubtree(targetSlice, optionCarrier) {
|
|
268
380
|
const prelude = await this.prepareWorkspace.execute({
|
|
269
381
|
currentWorkingDirectory: this.runtime.cwd(),
|
|
270
|
-
rawTarget:
|
|
382
|
+
rawTarget: targetSlice
|
|
271
383
|
});
|
|
272
|
-
if (!consumeCliAppError(
|
|
384
|
+
if (!this.cliExecutor.consumeCliAppError(prelude)) return;
|
|
273
385
|
const { resolvedTarget } = prelude.value;
|
|
274
|
-
const parsed =
|
|
275
|
-
if (!consumeCliAppError(
|
|
386
|
+
const parsed = this.schemaValidation.parseWithSchema(arrangeAnalyzeDirectoryRequestSchema, { analyzeRootPath: resolvedTarget });
|
|
387
|
+
if (!this.cliExecutor.consumeCliAppError(parsed)) return;
|
|
276
388
|
const outcome = this.analyzeDirectory.execute(parsed.value);
|
|
277
|
-
if (!consumeCliAppError(
|
|
278
|
-
if (
|
|
389
|
+
if (!this.cliExecutor.consumeCliAppError(outcome)) return;
|
|
390
|
+
if (optionCarrier.jsonCandidate) this.logger.out(this.formatArrangeAnalyzeJsonOutput(resolvedTarget, outcome.value));
|
|
279
391
|
else this.presentAnalyzeReport.present(resolvedTarget, outcome.value);
|
|
280
392
|
}
|
|
281
|
-
async
|
|
393
|
+
async performApplyOrPreviewSubtree(writeCandidate, targetSlice, typedLocalCarrier) {
|
|
282
394
|
const prelude = await this.prepareWorkspace.execute({
|
|
283
395
|
currentWorkingDirectory: this.runtime.cwd(),
|
|
284
|
-
rawTarget:
|
|
396
|
+
rawTarget: targetSlice
|
|
285
397
|
});
|
|
286
|
-
if (!consumeCliAppError(
|
|
398
|
+
if (!this.cliExecutor.consumeCliAppError(prelude)) return;
|
|
287
399
|
const { resolvedTarget, rootDir, config } = prelude.value;
|
|
288
|
-
const parsed =
|
|
400
|
+
const parsed = this.schemaValidation.parseWithSchema(arrangeSyncRunRequestSchema, {
|
|
289
401
|
rootDir,
|
|
290
402
|
targetPath: resolvedTarget,
|
|
291
|
-
write,
|
|
292
|
-
withClassName:
|
|
293
|
-
cnImport:
|
|
403
|
+
write: writeCandidate,
|
|
404
|
+
withClassName: typedLocalCarrier.withClassName,
|
|
405
|
+
cnImport: typedLocalCarrier.cnImport,
|
|
294
406
|
config: config.arrange ?? {}
|
|
295
407
|
});
|
|
296
|
-
if (!consumeCliAppError(
|
|
408
|
+
if (!this.cliExecutor.consumeCliAppError(parsed)) return;
|
|
297
409
|
const outcome = await this.runArrangeSync.execute(parsed.value);
|
|
298
|
-
if (!consumeCliAppError(
|
|
299
|
-
if (!
|
|
300
|
-
if (
|
|
301
|
-
this.logger.out(formatArrangeSyncJsonOutput(outcome.value,
|
|
302
|
-
this.runtime.setExitCode(exitCodeForArrangeSyncResult(outcome.value));
|
|
303
|
-
} else
|
|
410
|
+
if (!this.cliExecutor.consumeCliAppError(outcome)) return;
|
|
411
|
+
if (!writeCandidate) for (const plan of outcome.value.previewPlans) this.presentGroupFilePreview.printGroupFilePreviewFromWork(plan);
|
|
412
|
+
if (typedLocalCarrier.json) {
|
|
413
|
+
this.logger.out(this.formatArrangeSyncJsonOutput(outcome.value, writeCandidate));
|
|
414
|
+
this.runtime.setExitCode(this.exitCodeForArrangeSyncResult(outcome.value));
|
|
415
|
+
} else {
|
|
416
|
+
this.presentArrangeSyncResult.present(outcome.value, writeCandidate);
|
|
417
|
+
this.runtime.setExitCode(this.exitCodeForArrangeSyncResult(outcome.value));
|
|
418
|
+
}
|
|
304
419
|
}
|
|
305
|
-
async
|
|
306
|
-
const parsed =
|
|
307
|
-
inlineClasses:
|
|
308
|
-
emitTvStyleArray: !!
|
|
309
|
-
trailingClassName: !!
|
|
420
|
+
async performGroupSubtree(classTokenSeries, typedLocalCarrier) {
|
|
421
|
+
const parsed = this.schemaValidation.parseWithSchema(arrangeSuggestGroupsRequestSchema, {
|
|
422
|
+
inlineClasses: classTokenSeries.join(" ").trim(),
|
|
423
|
+
emitTvStyleArray: !!typedLocalCarrier.tv,
|
|
424
|
+
trailingClassName: !!typedLocalCarrier.withClassName
|
|
310
425
|
});
|
|
311
|
-
if (!consumeCliAppError(
|
|
426
|
+
if (!this.cliExecutor.consumeCliAppError(parsed)) return;
|
|
312
427
|
const output = this.suggestCnGroups.execute(parsed.value);
|
|
313
|
-
if (
|
|
428
|
+
if (typedLocalCarrier.json) this.logger.out(this.formatArrangeGroupJsonOutput(output));
|
|
314
429
|
else {
|
|
315
430
|
this.logger.out(output.primaryLine);
|
|
316
431
|
this.logger.out(output.bucketsCommentLine);
|
|
317
432
|
}
|
|
318
433
|
}
|
|
434
|
+
formatArrangeAnalyzeJsonOutput(analyzeRootPath, report) {
|
|
435
|
+
return JSON.stringify({
|
|
436
|
+
schemaVersion: 1,
|
|
437
|
+
analyzeRootPath,
|
|
438
|
+
report
|
|
439
|
+
});
|
|
440
|
+
}
|
|
441
|
+
formatArrangeSyncJsonOutput(result, write) {
|
|
442
|
+
const { previewPlans: _plans, ...serializableResult } = result;
|
|
443
|
+
return JSON.stringify({
|
|
444
|
+
schemaVersion: 1,
|
|
445
|
+
ok: result.hookError === null,
|
|
446
|
+
write,
|
|
447
|
+
result: serializableResult
|
|
448
|
+
});
|
|
449
|
+
}
|
|
450
|
+
formatArrangeGroupJsonOutput(output) {
|
|
451
|
+
return JSON.stringify({
|
|
452
|
+
schemaVersion: 1,
|
|
453
|
+
primaryLine: output.primaryLine,
|
|
454
|
+
bucketsCommentLine: output.bucketsCommentLine
|
|
455
|
+
});
|
|
456
|
+
}
|
|
457
|
+
exitCodeForArrangeSyncResult(result) {
|
|
458
|
+
return result.hookError !== null ? 1 : 0;
|
|
459
|
+
}
|
|
319
460
|
static {
|
|
320
461
|
_initClass();
|
|
321
462
|
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import "
|
|
2
|
-
import
|
|
1
|
+
import { CliLoggerPortToken } from "../../../../shell/application/cli-runtime.tokens.mjs";
|
|
2
|
+
import "../../domain/constants.domain.mjs";
|
|
3
3
|
import path from "node:path";
|
|
4
4
|
import { inject, injectable } from "@codefast/di";
|
|
5
|
-
//#region src/
|
|
5
|
+
//#region src/domains/arrange/presentation/presenters/arrange-analyze.presenter.ts
|
|
6
6
|
function toPrimitive(input, hint) {
|
|
7
7
|
if (typeof input !== "object" || input === null) return input;
|
|
8
8
|
var prim = input[Symbol.toPrimitive];
|
|
@@ -213,47 +213,40 @@ function _apply_decs_2311(targetClass, classDecs, memberDecs, classDecsHaveThis,
|
|
|
213
213
|
};
|
|
214
214
|
}
|
|
215
215
|
let _dec, _initClass;
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
logger.out(`.ts/.tsx files: ${analyzeReport.files}`);
|
|
219
|
-
logger.out(`cn(...) call sites: ${analyzeReport.cnCallExpressions}`);
|
|
220
|
-
logger.out(`tv(...) call sites: ${analyzeReport.tvCallExpressions}`);
|
|
221
|
-
logger.out(`\nLong cn(...) string literals (≥18 tokens — consider splitting arguments): ${analyzeReport.longCnStringLiterals.length}`);
|
|
222
|
-
for (const findingEntry of analyzeReport.longCnStringLiterals.slice(0, 40)) logger.out(` ${findingEntry.file}:${findingEntry.line} (${findingEntry.tokenCount} tokens) ${findingEntry.preview}`);
|
|
223
|
-
if (analyzeReport.longCnStringLiterals.length > 40) logger.out(` … and ${analyzeReport.longCnStringLiterals.length - 40} more`);
|
|
224
|
-
logger.out(`\nLong tv({...}) string literals in base/variants/… (≥18 tokens): ${analyzeReport.longTvStringLiterals.length}`);
|
|
225
|
-
for (const findingEntry of analyzeReport.longTvStringLiterals.slice(0, 40)) logger.out(` ${findingEntry.file}:${findingEntry.line} (${findingEntry.tokenCount} tokens) ${findingEntry.preview}`);
|
|
226
|
-
if (analyzeReport.longTvStringLiterals.length > 40) logger.out(` … and ${analyzeReport.longTvStringLiterals.length - 40} more`);
|
|
227
|
-
logger.out(`\nJSX className="..." or className={'...'} (static strings, ≥18 tokens): ${analyzeReport.longJsxClassNameLiterals.length}`);
|
|
228
|
-
for (const findingEntry of analyzeReport.longJsxClassNameLiterals.slice(0, 40)) logger.out(` ${findingEntry.file}:${findingEntry.line} (${findingEntry.tokenCount} tokens) ${findingEntry.preview}`);
|
|
229
|
-
if (analyzeReport.longJsxClassNameLiterals.length > 40) logger.out(` … and ${analyzeReport.longJsxClassNameLiterals.length - 40} more`);
|
|
230
|
-
logger.out(`\ncn(...) nested inside tv({...}) (prefer a string or array — preview/apply can rewrite): ${analyzeReport.cnInsideTvCalls.length}`);
|
|
231
|
-
for (const findingEntry of analyzeReport.cnInsideTvCalls.slice(0, 40)) logger.out(` ${findingEntry.file}:${findingEntry.line} (${findingEntry.argCount} args) ${findingEntry.preview}`);
|
|
232
|
-
if (analyzeReport.cnInsideTvCalls.length > 40) logger.out(` … and ${analyzeReport.cnInsideTvCalls.length - 40} more`);
|
|
233
|
-
}
|
|
234
|
-
_dec = injectable([inject(CliLoggerToken)]);
|
|
235
|
-
let _PresentAnalyzeReportPresenterImpl;
|
|
216
|
+
_dec = injectable([inject(CliLoggerPortToken)]);
|
|
217
|
+
let _PresentAnalyzeReportPresenter;
|
|
236
218
|
(class {
|
|
237
219
|
logger;
|
|
238
220
|
static {
|
|
239
|
-
({c: [
|
|
221
|
+
({c: [_PresentAnalyzeReportPresenter, _initClass]} = _apply_decs_2311(this, [_dec], []));
|
|
240
222
|
}
|
|
241
223
|
constructor(logger) {
|
|
242
224
|
this.logger = logger;
|
|
243
225
|
}
|
|
244
226
|
present(resolvedTargetPath, report) {
|
|
245
|
-
printAnalyzeReport(resolvedTargetPath, report
|
|
227
|
+
this.printAnalyzeReport(resolvedTargetPath, report);
|
|
228
|
+
}
|
|
229
|
+
printAnalyzeReport(analyzeRootDirectoryPath, analyzeReport) {
|
|
230
|
+
this.logger.out(`Path: ${path.resolve(analyzeRootDirectoryPath)}`);
|
|
231
|
+
this.logger.out(`.ts/.tsx files: ${analyzeReport.files}`);
|
|
232
|
+
this.logger.out(`cn(...) call sites: ${analyzeReport.cnCallExpressions}`);
|
|
233
|
+
this.logger.out(`tv(...) call sites: ${analyzeReport.tvCallExpressions}`);
|
|
234
|
+
this.logger.out(`\nLong cn(...) string literals (≥18 tokens — consider splitting arguments): ${analyzeReport.longCnStringLiterals.length}`);
|
|
235
|
+
for (const findingEntry of analyzeReport.longCnStringLiterals.slice(0, 40)) this.logger.out(` ${findingEntry.file}:${findingEntry.line} (${findingEntry.tokenCount} tokens) ${findingEntry.preview}`);
|
|
236
|
+
if (analyzeReport.longCnStringLiterals.length > 40) this.logger.out(` … and ${analyzeReport.longCnStringLiterals.length - 40} more`);
|
|
237
|
+
this.logger.out(`\nLong tv({...}) string literals in base/variants/… (≥18 tokens): ${analyzeReport.longTvStringLiterals.length}`);
|
|
238
|
+
for (const findingEntry of analyzeReport.longTvStringLiterals.slice(0, 40)) this.logger.out(` ${findingEntry.file}:${findingEntry.line} (${findingEntry.tokenCount} tokens) ${findingEntry.preview}`);
|
|
239
|
+
if (analyzeReport.longTvStringLiterals.length > 40) this.logger.out(` … and ${analyzeReport.longTvStringLiterals.length - 40} more`);
|
|
240
|
+
this.logger.out(`\nJSX className="..." or className={'...'} (static strings, ≥18 tokens): ${analyzeReport.longJsxClassNameLiterals.length}`);
|
|
241
|
+
for (const findingEntry of analyzeReport.longJsxClassNameLiterals.slice(0, 40)) this.logger.out(` ${findingEntry.file}:${findingEntry.line} (${findingEntry.tokenCount} tokens) ${findingEntry.preview}`);
|
|
242
|
+
if (analyzeReport.longJsxClassNameLiterals.length > 40) this.logger.out(` … and ${analyzeReport.longJsxClassNameLiterals.length - 40} more`);
|
|
243
|
+
this.logger.out(`\ncn(...) nested inside tv({...}) (prefer a string or array — preview/apply can rewrite): ${analyzeReport.cnInsideTvCalls.length}`);
|
|
244
|
+
for (const findingEntry of analyzeReport.cnInsideTvCalls.slice(0, 40)) this.logger.out(` ${findingEntry.file}:${findingEntry.line} (${findingEntry.argCount} args) ${findingEntry.preview}`);
|
|
245
|
+
if (analyzeReport.cnInsideTvCalls.length > 40) this.logger.out(` … and ${analyzeReport.cnInsideTvCalls.length - 40} more`);
|
|
246
246
|
}
|
|
247
247
|
static {
|
|
248
248
|
_initClass();
|
|
249
249
|
}
|
|
250
250
|
});
|
|
251
|
-
function formatArrangeAnalyzeJsonOutput(analyzeRootPath, report) {
|
|
252
|
-
return JSON.stringify({
|
|
253
|
-
schemaVersion: 1,
|
|
254
|
-
analyzeRootPath,
|
|
255
|
-
report
|
|
256
|
-
});
|
|
257
|
-
}
|
|
258
251
|
//#endregion
|
|
259
|
-
export {
|
|
252
|
+
export { _PresentAnalyzeReportPresenter as PresentAnalyzeReportPresenter };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
-
//#region src/
|
|
2
|
+
//#region src/domains/arrange/presentation/presenters/arrange-cli.schema.ts
|
|
3
3
|
const arrangeAnalyzeDirectoryRequestSchema = z.object({ analyzeRootPath: z.string().min(1, "analyzeRootPath is required") });
|
|
4
4
|
const arrangeSyncRunRequestSchema = z.object({
|
|
5
5
|
rootDir: z.string().min(1),
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { presentTagSyncCliResult } from "./tag-sync.presenter.mjs";
|
|
1
|
+
import { CliLoggerPortToken } from "../../../../shell/application/cli-runtime.tokens.mjs";
|
|
3
2
|
import { inject, injectable } from "@codefast/di";
|
|
4
|
-
//#region src/
|
|
3
|
+
//#region src/domains/arrange/presentation/presenters/arrange-sync.presenter.ts
|
|
5
4
|
function toPrimitive(input, hint) {
|
|
6
5
|
if (typeof input !== "object" || input === null) return input;
|
|
7
6
|
var prim = input[Symbol.toPrimitive];
|
|
@@ -212,22 +211,26 @@ function _apply_decs_2311(targetClass, classDecs, memberDecs, classDecsHaveThis,
|
|
|
212
211
|
};
|
|
213
212
|
}
|
|
214
213
|
let _dec, _initClass;
|
|
215
|
-
_dec = injectable([inject(
|
|
216
|
-
let
|
|
214
|
+
_dec = injectable([inject(CliLoggerPortToken)]);
|
|
215
|
+
let _PresentArrangeSyncResultPresenter;
|
|
217
216
|
(class {
|
|
218
217
|
logger;
|
|
219
218
|
static {
|
|
220
|
-
({c: [
|
|
219
|
+
({c: [_PresentArrangeSyncResultPresenter, _initClass]} = _apply_decs_2311(this, [_dec], []));
|
|
221
220
|
}
|
|
222
221
|
constructor(logger) {
|
|
223
222
|
this.logger = logger;
|
|
224
223
|
}
|
|
225
|
-
present(result,
|
|
226
|
-
|
|
224
|
+
present(result, write) {
|
|
225
|
+
this.logger.out(`\nTotal: ${result.filePaths.length} file(s), ${result.totalFound} site(s) (cn/tv/JSX className) to review.`);
|
|
226
|
+
if (write) this.logger.out(`Applied: ${result.totalChanged} site(s) updated.`);
|
|
227
|
+
else this.logger.out(`(Run "apply" to write changes, or "pnpm cli:arrange-apply" / "pnpm exec codefast arrange apply")`);
|
|
228
|
+
if (write ? result.totalChanged > 0 : result.totalFound > 0) this.logger.out("Note: class order may change across concern groups — smoke-test the UI if you rely on cascade order.");
|
|
229
|
+
if (result.hookError !== null) this.logger.err(result.hookError);
|
|
227
230
|
}
|
|
228
231
|
static {
|
|
229
232
|
_initClass();
|
|
230
233
|
}
|
|
231
234
|
});
|
|
232
235
|
//#endregion
|
|
233
|
-
export {
|
|
236
|
+
export { _PresentArrangeSyncResultPresenter as PresentArrangeSyncResultPresenter };
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { lineOf } from "
|
|
1
|
+
import { CliLoggerPortToken } from "../../../../shell/application/cli-runtime.tokens.mjs";
|
|
2
|
+
import { lineOf } from "../../domain/ast/ast-helpers.helper.mjs";
|
|
3
3
|
import { inject, injectable } from "@codefast/di";
|
|
4
|
-
//#region src/
|
|
4
|
+
//#region src/domains/arrange/presentation/presenters/group-file-preview.presenter.ts
|
|
5
5
|
function toPrimitive(input, hint) {
|
|
6
6
|
if (typeof input !== "object" || input === null) return input;
|
|
7
7
|
var prim = input[Symbol.toPrimitive];
|
|
@@ -212,60 +212,60 @@ function _apply_decs_2311(targetClass, classDecs, memberDecs, classDecsHaveThis,
|
|
|
212
212
|
};
|
|
213
213
|
}
|
|
214
214
|
let _dec, _initClass;
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
let header = `\n── ${filePath} (${reportTotal} site(s)`;
|
|
218
|
-
if (cnInTvNoReplacement > 0) header += `; plus ${cnInTvNoReplacement} cn() inside tv left unchanged (0 args)`;
|
|
219
|
-
header += `) ──`;
|
|
220
|
-
logger.out(header);
|
|
221
|
-
for (const call of cnInTvCalls) {
|
|
222
|
-
const replacement = unwrapReplacementByCall.get(call);
|
|
223
|
-
if (replacement === void 0) {
|
|
224
|
-
logger.out(` Line ${lineOf(domainSf, call)} [tv ⊃ cn]: cn(...) has no arguments — skipped`);
|
|
225
|
-
continue;
|
|
226
|
-
}
|
|
227
|
-
const start = call.pos;
|
|
228
|
-
const end = call.end;
|
|
229
|
-
if (sourceText.slice(start, end) === replacement) continue;
|
|
230
|
-
logger.out(` Line ${lineOf(domainSf, call)} [tv ⊃ cn → string/array]:`);
|
|
231
|
-
logger.out(` ${replacement.split("\n").join("\n ")}`);
|
|
232
|
-
}
|
|
233
|
-
if (unwrapEdits.length > 0 && plannedGroupEdits.length > 0) logger.out(" ([cn] / [tv] / [JSX className] lines below reflect content after unwrap of cn inside tv.)");
|
|
234
|
-
for (const plan of plannedGroupEdits) {
|
|
235
|
-
logger.out(` Line ${lineOf(plan.lineSf, plan.reportNode)} [${plan.label}]:`);
|
|
236
|
-
logger.out(` ${plan.replacement.split("\n").join("\n ")}`);
|
|
237
|
-
logger.out(` // Buckets: ${JSON.stringify(plan.bucketSummary)}`);
|
|
238
|
-
}
|
|
239
|
-
}
|
|
240
|
-
function printGroupFilePreviewFromWork(logger, work) {
|
|
241
|
-
printGroupFilePreview(logger, {
|
|
242
|
-
filePath: work.filePath,
|
|
243
|
-
reportTotal: work.reportTotal,
|
|
244
|
-
cnInTvNoReplacement: work.cnInTvNoReplacement,
|
|
245
|
-
cnInTvCalls: work.cnInTvCalls,
|
|
246
|
-
unwrapReplacementByCall: work.unwrapReplacementByCall,
|
|
247
|
-
sourceText: work.sourceText,
|
|
248
|
-
domainSf: work.domainSfForLineNumbers,
|
|
249
|
-
unwrapEdits: work.unwrapEdits,
|
|
250
|
-
plannedGroupEdits: work.plannedGroupEdits
|
|
251
|
-
});
|
|
252
|
-
}
|
|
253
|
-
_dec = injectable([inject(CliLoggerToken)]);
|
|
254
|
-
let _GroupFilePreviewPresenterAdapter;
|
|
215
|
+
_dec = injectable([inject(CliLoggerPortToken)]);
|
|
216
|
+
let _PresentGroupFilePreviewPresenter;
|
|
255
217
|
(class {
|
|
256
218
|
logger;
|
|
257
219
|
static {
|
|
258
|
-
({c: [
|
|
220
|
+
({c: [_PresentGroupFilePreviewPresenter, _initClass]} = _apply_decs_2311(this, [_dec], []));
|
|
259
221
|
}
|
|
260
222
|
constructor(logger) {
|
|
261
223
|
this.logger = logger;
|
|
262
224
|
}
|
|
263
225
|
printGroupFilePreviewFromWork(work) {
|
|
264
|
-
|
|
226
|
+
this.printGroupFilePreviewFromPlan(work);
|
|
227
|
+
}
|
|
228
|
+
printGroupFilePreviewFromPlan(work) {
|
|
229
|
+
this.printGroupFilePreviewBody({
|
|
230
|
+
filePath: work.filePath,
|
|
231
|
+
reportTotal: work.reportTotal,
|
|
232
|
+
cnInTvNoReplacement: work.cnInTvNoReplacement,
|
|
233
|
+
cnInTvCalls: work.cnInTvCalls,
|
|
234
|
+
unwrapReplacementByCall: work.unwrapReplacementByCall,
|
|
235
|
+
sourceText: work.sourceText,
|
|
236
|
+
domainSf: work.domainSfForLineNumbers,
|
|
237
|
+
unwrapEdits: work.unwrapEdits,
|
|
238
|
+
plannedGroupEdits: work.plannedGroupEdits
|
|
239
|
+
});
|
|
240
|
+
}
|
|
241
|
+
printGroupFilePreviewBody(args) {
|
|
242
|
+
const { filePath, reportTotal, cnInTvNoReplacement, cnInTvCalls, unwrapReplacementByCall, sourceText, domainSf, unwrapEdits, plannedGroupEdits } = args;
|
|
243
|
+
let header = `\n── ${filePath} (${reportTotal} site(s)`;
|
|
244
|
+
if (cnInTvNoReplacement > 0) header += `; plus ${cnInTvNoReplacement} cn() inside tv left unchanged (0 args)`;
|
|
245
|
+
header += `) ──`;
|
|
246
|
+
this.logger.out(header);
|
|
247
|
+
for (const call of cnInTvCalls) {
|
|
248
|
+
const replacement = unwrapReplacementByCall.get(call);
|
|
249
|
+
if (replacement === void 0) {
|
|
250
|
+
this.logger.out(` Line ${lineOf(domainSf, call)} [tv ⊃ cn]: cn(...) has no arguments — skipped`);
|
|
251
|
+
continue;
|
|
252
|
+
}
|
|
253
|
+
const start = call.pos;
|
|
254
|
+
const end = call.end;
|
|
255
|
+
if (sourceText.slice(start, end) === replacement) continue;
|
|
256
|
+
this.logger.out(` Line ${lineOf(domainSf, call)} [tv ⊃ cn → string/array]:`);
|
|
257
|
+
this.logger.out(` ${replacement.split("\n").join("\n ")}`);
|
|
258
|
+
}
|
|
259
|
+
if (unwrapEdits.length > 0 && plannedGroupEdits.length > 0) this.logger.out(" ([cn] / [tv] / [JSX className] lines below reflect content after unwrap of cn inside tv.)");
|
|
260
|
+
for (const plan of plannedGroupEdits) {
|
|
261
|
+
this.logger.out(` Line ${lineOf(plan.lineSf, plan.reportNode)} [${plan.label}]:`);
|
|
262
|
+
this.logger.out(` ${plan.replacement.split("\n").join("\n ")}`);
|
|
263
|
+
this.logger.out(` // Buckets: ${JSON.stringify(plan.bucketSummary)}`);
|
|
264
|
+
}
|
|
265
265
|
}
|
|
266
266
|
static {
|
|
267
267
|
_initClass();
|
|
268
268
|
}
|
|
269
269
|
});
|
|
270
270
|
//#endregion
|
|
271
|
-
export {
|
|
271
|
+
export { _PresentGroupFilePreviewPresenter as PresentGroupFilePreviewPresenter };
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { token } from "@codefast/di";
|
|
2
|
+
//#region src/domains/config/composition/tokens.ts
|
|
3
|
+
const CodefastConfigSchemaPortToken = token("CodefastConfigSchemaPort");
|
|
4
|
+
const ConfigLoaderPortToken = token("ConfigLoaderPort");
|
|
5
|
+
const ConfigWarningReporterPortToken = token("ConfigWarningReporterPort");
|
|
6
|
+
//#endregion
|
|
7
|
+
export { CodefastConfigSchemaPortToken, ConfigLoaderPortToken, ConfigWarningReporterPortToken };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
-
//#region src/
|
|
3
|
-
const
|
|
2
|
+
//#region src/domains/config/domain/codefast-config.schema.ts
|
|
3
|
+
const afterWriteHookSchema = z.custom((value) => typeof value === "function", { message: "Expected a function" });
|
|
4
4
|
const mirrorConfigSchema = z.object({
|
|
5
5
|
skipPackages: z.array(z.string()).optional(),
|
|
6
6
|
pathTransformations: z.record(z.string(), z.object({ removePrefix: z.string().optional() }).strict()).optional(),
|
|
@@ -13,13 +13,13 @@ const mirrorConfigSchema = z.object({
|
|
|
13
13
|
}).strict();
|
|
14
14
|
const codefastTagConfigSchema = z.object({
|
|
15
15
|
skipPackages: z.array(z.string()).optional(),
|
|
16
|
-
onAfterWrite:
|
|
16
|
+
onAfterWrite: afterWriteHookSchema.optional()
|
|
17
17
|
}).strict();
|
|
18
|
-
const codefastArrangeConfigSchema = z.object({ onAfterWrite:
|
|
19
|
-
const
|
|
18
|
+
const codefastArrangeConfigSchema = z.object({ onAfterWrite: afterWriteHookSchema.optional() }).strict();
|
|
19
|
+
/** Root `codefast.config` Zod schema — single source of truth for both validation and TS types. */ const codefastConfigRootSchema = z.object({
|
|
20
20
|
mirror: mirrorConfigSchema.optional(),
|
|
21
21
|
tag: codefastTagConfigSchema.optional(),
|
|
22
22
|
arrange: codefastArrangeConfigSchema.optional()
|
|
23
23
|
}).strict();
|
|
24
24
|
//#endregion
|
|
25
|
-
export {
|
|
25
|
+
export { codefastArrangeConfigSchema, codefastConfigRootSchema, codefastTagConfigSchema, mirrorConfigSchema };
|