@codefast/cli 0.3.13-canary.1 → 0.3.13-canary.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bin.d.ts +3 -0
- package/dist/bin.d.ts.map +1 -0
- package/dist/{bin.mjs → bin.js} +1 -4
- package/dist/commands/arrange.d.ts +3 -0
- package/dist/commands/arrange.d.ts.map +1 -0
- package/dist/commands/arrange.js +129 -0
- package/dist/commands/mirror.d.ts +4 -0
- package/dist/commands/mirror.d.ts.map +1 -0
- package/dist/commands/mirror.js +75 -0
- package/dist/commands/tag.d.ts +3 -0
- package/dist/commands/tag.d.ts.map +1 -0
- package/dist/commands/tag.js +41 -0
- package/dist/lib/arrange/application/analyze.d.ts +17 -0
- package/dist/lib/arrange/application/analyze.d.ts.map +1 -0
- package/dist/lib/arrange/application/analyze.js +24 -0
- package/dist/lib/arrange/application/group-file-preview.d.ts +17 -0
- package/dist/lib/arrange/application/group-file-preview.d.ts.map +1 -0
- package/dist/lib/arrange/application/group-file-preview.js +46 -0
- package/dist/lib/arrange/application/group-file.d.ts +5 -0
- package/dist/lib/arrange/application/group-file.d.ts.map +1 -0
- package/dist/lib/arrange/application/group-file.js +40 -0
- package/dist/lib/arrange/application/ports/domain-source-parser.port.d.ts +5 -0
- package/dist/lib/arrange/application/ports/domain-source-parser.port.d.ts.map +1 -0
- package/dist/lib/arrange/application/ports/file-walker.port.d.ts +5 -0
- package/dist/lib/arrange/application/ports/file-walker.port.d.ts.map +1 -0
- package/dist/lib/arrange/application/requests/analyze-directory.request.d.ts +6 -0
- package/dist/lib/arrange/application/requests/analyze-directory.request.d.ts.map +1 -0
- package/dist/lib/arrange/application/requests/analyze-directory.request.js +4 -0
- package/dist/lib/arrange/application/requests/arrange-sync.request.d.ts +18 -0
- package/dist/lib/arrange/application/requests/arrange-sync.request.d.ts.map +1 -0
- package/dist/lib/arrange/application/requests/arrange-sync.request.js +15 -0
- package/dist/lib/arrange/application/run-target.d.ts +19 -0
- package/dist/lib/arrange/application/run-target.d.ts.map +1 -0
- package/dist/lib/arrange/application/run-target.js +85 -0
- package/dist/lib/arrange/domain/arrange-analyze.service.d.ts +12 -0
- package/dist/lib/arrange/domain/arrange-analyze.service.d.ts.map +1 -0
- package/dist/lib/arrange/domain/arrange-analyze.service.js +116 -0
- package/dist/lib/arrange/domain/arrange-grouping.service.d.ts +53 -0
- package/dist/lib/arrange/domain/arrange-grouping.service.d.ts.map +1 -0
- package/dist/lib/arrange/domain/arrange-grouping.service.js +106 -0
- package/dist/lib/arrange/domain/ast/ast-helpers.d.ts +28 -0
- package/dist/lib/arrange/domain/ast/ast-helpers.d.ts.map +1 -0
- package/dist/lib/arrange/domain/ast/ast-helpers.js +130 -0
- package/dist/lib/arrange/domain/ast/ast-node.model.d.ts +179 -0
- package/dist/lib/arrange/domain/ast/ast-node.model.d.ts.map +1 -0
- package/dist/lib/arrange/domain/ast/ast-node.model.js +210 -0
- package/dist/lib/arrange/domain/ast/collectors-cn.d.ts +7 -0
- package/dist/lib/arrange/domain/ast/collectors-cn.d.ts.map +1 -0
- package/dist/lib/arrange/domain/ast/collectors-cn.js +70 -0
- package/dist/lib/arrange/domain/ast/collectors-jsx.d.ts +4 -0
- package/dist/lib/arrange/domain/ast/collectors-jsx.d.ts.map +1 -0
- package/dist/lib/arrange/domain/ast/collectors-jsx.js +21 -0
- package/dist/lib/arrange/domain/ast/collectors-tv.d.ts +13 -0
- package/dist/lib/arrange/domain/ast/collectors-tv.d.ts.map +1 -0
- package/dist/lib/arrange/domain/ast/collectors-tv.js +302 -0
- package/dist/lib/arrange/domain/ast/targets.d.ts +8 -0
- package/dist/lib/arrange/domain/ast/targets.d.ts.map +1 -0
- package/dist/lib/arrange/domain/ast/targets.js +147 -0
- package/dist/lib/arrange/domain/constants.d.ts +68 -0
- package/dist/lib/arrange/domain/constants.d.ts.map +1 -0
- package/dist/lib/arrange/domain/constants.js +180 -0
- package/dist/lib/arrange/domain/errors.d.ts +14 -0
- package/dist/lib/arrange/domain/errors.d.ts.map +1 -0
- package/dist/lib/arrange/domain/errors.js +16 -0
- package/dist/lib/arrange/domain/grouping.d.ts +41 -0
- package/dist/lib/arrange/domain/grouping.d.ts.map +1 -0
- package/dist/lib/arrange/domain/grouping.js +307 -0
- package/dist/lib/arrange/domain/imports.d.ts +7 -0
- package/dist/lib/arrange/domain/imports.d.ts.map +1 -0
- package/dist/lib/arrange/domain/imports.js +80 -0
- package/dist/lib/arrange/domain/source-text-formatters.d.ts +16 -0
- package/dist/lib/arrange/domain/source-text-formatters.d.ts.map +1 -0
- package/dist/lib/arrange/domain/source-text-formatters.js +55 -0
- package/dist/lib/arrange/domain/tokenizer.d.ts +45 -0
- package/dist/lib/arrange/domain/tokenizer.d.ts.map +1 -0
- package/dist/lib/arrange/domain/tokenizer.js +466 -0
- package/dist/lib/arrange/domain/types.d.ts +112 -0
- package/dist/lib/arrange/domain/types.d.ts.map +1 -0
- package/dist/lib/arrange/domain/types.js +7 -0
- package/dist/lib/arrange/index.d.ts +45 -0
- package/dist/lib/arrange/index.d.ts.map +1 -0
- package/dist/lib/arrange/index.js +41 -0
- package/dist/lib/arrange/infra/arrange-sync-cli-options.d.ts +14 -0
- package/dist/lib/arrange/infra/arrange-sync-cli-options.d.ts.map +1 -0
- package/dist/lib/arrange/infra/domain-source-parser.adapter.d.ts +11 -0
- package/dist/lib/arrange/infra/domain-source-parser.adapter.d.ts.map +1 -0
- package/dist/lib/arrange/infra/domain-source-parser.adapter.js +19 -0
- package/dist/lib/arrange/infra/ensure-cn-import.d.ts +3 -0
- package/dist/lib/arrange/infra/ensure-cn-import.d.ts.map +1 -0
- package/dist/lib/arrange/infra/ensure-cn-import.js +6 -0
- package/dist/lib/arrange/infra/file-walker.adapter.d.ts +8 -0
- package/dist/lib/arrange/infra/file-walker.adapter.d.ts.map +1 -0
- package/dist/lib/arrange/infra/file-walker.adapter.js +17 -0
- package/dist/lib/arrange/infra/merge-cn-literal-pool-for-test.d.ts +8 -0
- package/dist/lib/arrange/infra/merge-cn-literal-pool-for-test.d.ts.map +1 -0
- package/dist/lib/arrange/infra/merge-cn-literal-pool-for-test.js +25 -0
- package/dist/lib/arrange/infra/ts-ast-translator.d.ts +10 -0
- package/dist/lib/arrange/infra/ts-ast-translator.d.ts.map +1 -0
- package/dist/lib/arrange/infra/ts-ast-translator.js +363 -0
- package/dist/lib/arrange/presentation/formatters.d.ts +3 -0
- package/dist/lib/arrange/presentation/formatters.d.ts.map +1 -0
- package/dist/lib/arrange/presentation/formatters.js +2 -0
- package/dist/lib/arrange/presentation/report.d.ts +4 -0
- package/dist/lib/arrange/presentation/report.d.ts.map +1 -0
- package/dist/lib/arrange/presentation/report.js +37 -0
- package/dist/lib/config/domain/schema.d.ts +50 -0
- package/dist/lib/config/domain/schema.d.ts.map +1 -0
- package/dist/lib/config/domain/schema.js +43 -0
- package/dist/lib/config/index.d.ts +4 -0
- package/dist/lib/config/index.d.ts.map +1 -0
- package/dist/lib/config/index.js +2 -0
- package/dist/lib/config/infra/loader.d.ts +11 -0
- package/dist/lib/config/infra/loader.d.ts.map +1 -0
- package/dist/lib/config/infra/loader.js +90 -0
- package/dist/lib/core/application/architecture-boundaries.d.ts +19 -0
- package/dist/lib/core/application/architecture-boundaries.d.ts.map +1 -0
- package/dist/lib/core/application/architecture-boundaries.js +263 -0
- package/dist/lib/core/application/ports/cli-io.port.d.ts +27 -0
- package/dist/lib/core/application/ports/cli-io.port.d.ts.map +1 -0
- package/dist/lib/core/application/schema-parse.d.ts +8 -0
- package/dist/lib/core/application/schema-parse.d.ts.map +1 -0
- package/dist/lib/core/application/schema-parse.js +20 -0
- package/dist/lib/core/application/utils/caught-unknown-message.d.ts +6 -0
- package/dist/lib/core/application/utils/caught-unknown-message.d.ts.map +1 -0
- package/dist/lib/core/application/utils/caught-unknown-message.js +34 -0
- package/dist/lib/core/application/utils/verbose-diagnostics.d.ts +5 -0
- package/dist/lib/core/application/utils/verbose-diagnostics.d.ts.map +1 -0
- package/dist/lib/core/application/utils/verbose-diagnostics.js +7 -0
- package/dist/lib/core/domain/errors.d.ts +11 -0
- package/dist/lib/core/domain/errors.d.ts.map +1 -0
- package/dist/lib/core/domain/errors.js +9 -0
- package/dist/lib/core/domain/result.d.ts +15 -0
- package/dist/lib/core/domain/result.d.ts.map +1 -0
- package/dist/lib/core/domain/result.js +9 -0
- package/dist/lib/core/infra/container.d.ts +34 -0
- package/dist/lib/core/infra/container.d.ts.map +1 -0
- package/dist/lib/core/infra/container.js +65 -0
- package/dist/lib/core/infra/logging-decorator.d.ts +12 -0
- package/dist/lib/core/infra/logging-decorator.d.ts.map +1 -0
- package/dist/lib/core/infra/logging-decorator.js +75 -0
- package/dist/lib/core/presentation/cli-executor.d.ts +33 -0
- package/dist/lib/core/presentation/cli-executor.d.ts.map +1 -0
- package/dist/lib/core/presentation/cli-executor.js +73 -0
- package/dist/lib/core/presentation/create-command-handler.d.ts +20 -0
- package/dist/lib/core/presentation/create-command-handler.d.ts.map +1 -0
- package/dist/lib/core/presentation/create-command-handler.js +70 -0
- package/dist/lib/core/presentation/format-app-error.d.ts +6 -0
- package/dist/lib/core/presentation/format-app-error.d.ts.map +1 -0
- package/dist/lib/core/presentation/format-app-error.js +19 -0
- package/dist/lib/infra/caught-unknown-message.d.ts +2 -0
- package/dist/lib/infra/caught-unknown-message.d.ts.map +1 -0
- package/dist/lib/infra/caught-unknown-message.js +1 -0
- package/dist/lib/infra/config-reporter.d.ts +4 -0
- package/dist/lib/infra/config-reporter.d.ts.map +1 -0
- package/dist/lib/infra/config-reporter.js +9 -0
- package/dist/lib/infra/fs-contract.d.ts +2 -0
- package/dist/lib/infra/fs-contract.d.ts.map +1 -0
- package/dist/lib/infra/fs-contract.js +1 -0
- package/dist/lib/infra/node-io.d.ts +4 -0
- package/dist/lib/infra/node-io.d.ts.map +1 -0
- package/dist/lib/infra/node-io.js +27 -0
- package/dist/lib/infra/workspace/repo-root.d.ts +7 -0
- package/dist/lib/infra/workspace/repo-root.d.ts.map +1 -0
- package/dist/lib/infra/workspace/repo-root.js +23 -0
- package/dist/lib/mirror/application/engine.d.ts +10 -0
- package/dist/lib/mirror/application/engine.d.ts.map +1 -0
- package/dist/lib/mirror/application/engine.js +271 -0
- package/dist/lib/mirror/application/ports/file-system-service.port.d.ts +6 -0
- package/dist/lib/mirror/application/ports/file-system-service.port.d.ts.map +1 -0
- package/dist/lib/mirror/application/ports/file-system-service.port.js +1 -0
- package/dist/lib/mirror/application/ports/mirror-sync-reporter.port.d.ts +27 -0
- package/dist/lib/mirror/application/ports/mirror-sync-reporter.port.d.ts.map +1 -0
- package/dist/lib/mirror/application/ports/mirror-sync-reporter.port.js +1 -0
- package/dist/lib/mirror/application/ports/package-repository.port.d.ts +16 -0
- package/dist/lib/mirror/application/ports/package-repository.port.d.ts.map +1 -0
- package/dist/lib/mirror/application/ports/package-repository.port.js +1 -0
- package/dist/lib/mirror/application/ports/workspace-service.port.d.ts +7 -0
- package/dist/lib/mirror/application/ports/workspace-service.port.d.ts.map +1 -0
- package/dist/lib/mirror/application/ports/workspace-service.port.js +1 -0
- package/dist/lib/mirror/application/requests/mirror-sync.request.d.ts +10 -0
- package/dist/lib/mirror/application/requests/mirror-sync.request.d.ts.map +1 -0
- package/dist/lib/mirror/application/requests/mirror-sync.request.js +8 -0
- package/dist/lib/mirror/application/sync.d.ts +19 -0
- package/dist/lib/mirror/application/sync.d.ts.map +1 -0
- package/dist/lib/mirror/application/sync.js +168 -0
- package/dist/lib/mirror/domain/constants.d.ts +6 -0
- package/dist/lib/mirror/domain/constants.d.ts.map +1 -0
- package/dist/lib/mirror/domain/constants.js +5 -0
- package/dist/lib/mirror/domain/errors.d.ts +10 -0
- package/dist/lib/mirror/domain/errors.d.ts.map +1 -0
- package/dist/lib/mirror/domain/errors.js +12 -0
- package/dist/lib/mirror/domain/types.d.ts +65 -0
- package/dist/lib/mirror/domain/types.d.ts.map +1 -0
- package/dist/lib/mirror/domain/types.js +1 -0
- package/dist/lib/mirror/index.d.ts +6 -0
- package/dist/lib/mirror/index.d.ts.map +1 -0
- package/dist/lib/mirror/index.js +1 -0
- package/dist/lib/mirror/infra/dirent-list.d.ts +9 -0
- package/dist/lib/mirror/infra/dirent-list.d.ts.map +1 -0
- package/dist/lib/mirror/infra/dirent-list.js +13 -0
- package/dist/lib/mirror/infra/file-system-service.adapter.d.ts +7 -0
- package/dist/lib/mirror/infra/file-system-service.adapter.d.ts.map +1 -0
- package/dist/lib/mirror/infra/file-system-service.adapter.js +47 -0
- package/dist/lib/mirror/infra/mirror-sync-cli-options.d.ts +14 -0
- package/dist/lib/mirror/infra/mirror-sync-cli-options.d.ts.map +1 -0
- package/dist/lib/mirror/infra/mirror-sync-cli-options.js +1 -0
- package/dist/lib/mirror/infra/mirror-sync-reporter.adapter.d.ts +3 -0
- package/dist/lib/mirror/infra/mirror-sync-reporter.adapter.d.ts.map +1 -0
- package/dist/lib/mirror/infra/mirror-sync-reporter.adapter.js +13 -0
- package/dist/lib/mirror/infra/package-filter.d.ts +8 -0
- package/dist/lib/mirror/infra/package-filter.d.ts.map +1 -0
- package/dist/lib/mirror/infra/package-filter.js +33 -0
- package/dist/lib/mirror/infra/package-repository.adapter.d.ts +17 -0
- package/dist/lib/mirror/infra/package-repository.adapter.d.ts.map +1 -0
- package/dist/lib/mirror/infra/package-repository.adapter.js +17 -0
- package/dist/lib/mirror/infra/path-normalizer.d.ts +2 -0
- package/dist/lib/mirror/infra/path-normalizer.d.ts.map +1 -0
- package/dist/lib/mirror/infra/path-normalizer.js +4 -0
- package/dist/lib/mirror/infra/update-pkg.d.ts +19 -0
- package/dist/lib/mirror/infra/update-pkg.d.ts.map +1 -0
- package/dist/lib/mirror/infra/update-pkg.js +156 -0
- package/dist/lib/mirror/infra/workspace-packages.d.ts +26 -0
- package/dist/lib/mirror/infra/workspace-packages.d.ts.map +1 -0
- package/dist/lib/mirror/infra/workspace-packages.js +170 -0
- package/dist/lib/mirror/infra/workspace-service.adapter.d.ts +8 -0
- package/dist/lib/mirror/infra/workspace-service.adapter.d.ts.map +1 -0
- package/dist/lib/mirror/infra/workspace-service.adapter.js +10 -0
- package/dist/lib/mirror/presentation/reporter.d.ts +25 -0
- package/dist/lib/mirror/presentation/reporter.d.ts.map +1 -0
- package/dist/lib/mirror/presentation/reporter.js +140 -0
- package/dist/lib/shared/source-code/domain/text-edit.d.ts +14 -0
- package/dist/lib/shared/source-code/domain/text-edit.d.ts.map +1 -0
- package/dist/lib/shared/source-code/domain/text-edit.js +30 -0
- package/dist/lib/shared/source-code/infra/tsx-file-walk.d.ts +4 -0
- package/dist/lib/shared/source-code/infra/tsx-file-walk.d.ts.map +1 -0
- package/dist/lib/shared/source-code/infra/tsx-file-walk.js +37 -0
- package/dist/lib/tag/application/engine.d.ts +23 -0
- package/dist/lib/tag/application/engine.d.ts.map +1 -0
- package/dist/lib/tag/application/engine.js +357 -0
- package/dist/lib/tag/application/ports/target-resolver.port.d.ts +6 -0
- package/dist/lib/tag/application/ports/target-resolver.port.d.ts.map +1 -0
- package/dist/lib/tag/application/ports/target-resolver.port.js +1 -0
- package/dist/lib/tag/application/ports/typescript-tree-walk.port.d.ts +6 -0
- package/dist/lib/tag/application/ports/typescript-tree-walk.port.d.ts.map +1 -0
- package/dist/lib/tag/application/ports/typescript-tree-walk.port.js +1 -0
- package/dist/lib/tag/application/requests/tag-sync.request.d.ts +10 -0
- package/dist/lib/tag/application/requests/tag-sync.request.d.ts.map +1 -0
- package/dist/lib/tag/application/requests/tag-sync.request.js +8 -0
- package/dist/lib/tag/domain/types.d.ts +56 -0
- package/dist/lib/tag/domain/types.d.ts.map +1 -0
- package/dist/lib/tag/domain/types.js +1 -0
- package/dist/lib/tag/index.d.ts +14 -0
- package/dist/lib/tag/index.d.ts.map +1 -0
- package/dist/lib/tag/index.js +10 -0
- package/dist/lib/tag/infra/tag-sync-cli-options.d.ts +14 -0
- package/dist/lib/tag/infra/tag-sync-cli-options.d.ts.map +1 -0
- package/dist/lib/tag/infra/tag-sync-cli-options.js +1 -0
- package/dist/lib/tag/infra/tag-target-resolver.adapter.d.ts +3 -0
- package/dist/lib/tag/infra/tag-target-resolver.adapter.d.ts.map +1 -0
- package/dist/lib/tag/infra/tag-target-resolver.adapter.js +4 -0
- package/dist/lib/tag/infra/target-resolver.d.ts +4 -0
- package/dist/lib/tag/infra/target-resolver.d.ts.map +1 -0
- package/dist/lib/tag/infra/target-resolver.js +200 -0
- package/dist/lib/tag/infra/typescript-tree-walk.adapter.d.ts +3 -0
- package/dist/lib/tag/infra/typescript-tree-walk.adapter.d.ts.map +1 -0
- package/dist/lib/tag/infra/typescript-tree-walk.adapter.js +4 -0
- package/dist/lib/tag/presentation/colors.d.ts +8 -0
- package/dist/lib/tag/presentation/colors.d.ts.map +1 -0
- package/dist/lib/tag/presentation/colors.js +9 -0
- package/dist/lib/tag/presentation/tag-presenter.d.ts +20 -0
- package/dist/lib/tag/presentation/tag-presenter.d.ts.map +1 -0
- package/dist/lib/tag/presentation/tag-presenter.js +92 -0
- package/dist/program.d.ts +4 -0
- package/dist/program.d.ts.map +1 -0
- package/dist/program.js +40 -0
- package/package.json +8 -5
- package/dist/commands/arrange.mjs +0 -107
- package/dist/commands/mirror.mjs +0 -66
- package/dist/commands/tag.mjs +0 -58
- package/dist/lib/arrange/application/analyze.mjs +0 -92
- package/dist/lib/arrange/application/group-file.mjs +0 -113
- package/dist/lib/arrange/application/run-target.mjs +0 -65
- package/dist/lib/arrange/domain/ast/ast-helpers.mjs +0 -115
- package/dist/lib/arrange/domain/ast/collectors-cn.mjs +0 -61
- package/dist/lib/arrange/domain/ast/collectors-jsx.mjs +0 -20
- package/dist/lib/arrange/domain/ast/collectors-tv.mjs +0 -170
- package/dist/lib/arrange/domain/ast/targets.mjs +0 -106
- package/dist/lib/arrange/domain/constants.mjs +0 -169
- package/dist/lib/arrange/domain/errors.mjs +0 -19
- package/dist/lib/arrange/domain/grouping.mjs +0 -235
- package/dist/lib/arrange/domain/imports.mjs +0 -54
- package/dist/lib/arrange/domain/tokenizer.mjs +0 -216
- package/dist/lib/arrange/index.mjs +0 -15
- package/dist/lib/arrange/infra/walk.mjs +0 -33
- package/dist/lib/arrange/presentation/formatters.mjs +0 -52
- package/dist/lib/arrange/presentation/report.mjs +0 -24
- package/dist/lib/config/domain/schema.mjs +0 -25
- package/dist/lib/config/index.mjs +0 -3
- package/dist/lib/config/infra/loader.mjs +0 -78
- package/dist/lib/infra/caught-unknown-message.mjs +0 -20
- package/dist/lib/infra/config-reporter.mjs +0 -10
- package/dist/lib/infra/node-io.mjs +0 -30
- package/dist/lib/infra/workspace/repo-root.mjs +0 -22
- package/dist/lib/mirror/application/engine.mjs +0 -248
- package/dist/lib/mirror/application/sync.mjs +0 -162
- package/dist/lib/mirror/domain/constants.mjs +0 -12
- package/dist/lib/mirror/domain/errors.mjs +0 -15
- package/dist/lib/mirror/index.mjs +0 -2
- package/dist/lib/mirror/infra/dirent-list.mjs +0 -14
- package/dist/lib/mirror/infra/package-filter.mjs +0 -26
- package/dist/lib/mirror/infra/path-normalizer.mjs +0 -7
- package/dist/lib/mirror/infra/update-pkg.mjs +0 -105
- package/dist/lib/mirror/infra/workspace-packages.mjs +0 -159
- package/dist/lib/mirror/presentation/reporter.mjs +0 -111
- package/dist/lib/tag/application/engine.mjs +0 -287
- package/dist/lib/tag/index.mjs +0 -4
- package/dist/lib/tag/infra/target-resolver.mjs +0 -170
- package/dist/lib/tag/presentation/colors.mjs +0 -12
- package/dist/lib/tag/presentation/tag-presenter.mjs +0 -63
- package/dist/program.mjs +0 -34
- /package/dist/lib/arrange/{domain/types.mjs → application/ports/domain-source-parser.port.js} +0 -0
- /package/dist/lib/{infra/fs-contract.mjs → arrange/application/ports/file-walker.port.js} +0 -0
- /package/dist/lib/{mirror/domain/types.mjs → arrange/infra/arrange-sync-cli-options.js} +0 -0
- /package/dist/lib/{tag/domain/types.mjs → core/application/ports/cli-io.port.js} +0 -0
|
@@ -0,0 +1,302 @@
|
|
|
1
|
+
import { APPLY_MIN_TOKENS, MAX_OBJECT_DEPTH } from "#lib/arrange/domain/constants";
|
|
2
|
+
import { isDomainArrayLiteralExpression, isDomainCallExpression, isDomainObjectLiteralExpression, isDomainPropertyAssignment, isDomainSpreadElement, isDomainTailwindClassLiteral, forEachDomainChild, } from "#lib/arrange/domain/ast/ast-node.model";
|
|
3
|
+
import { CN_APPLY_LITERAL_WALK_OPTS, collectUnconditionalTailwindLiteralsFromCnArguments, forEachStringLiteralInClassExpression, isUnsafeLiteralForCnStyleApplySplit, } from "#lib/arrange/domain/ast/collectors-cn";
|
|
4
|
+
import { tokenizeClassString } from "#lib/arrange/domain/tokenizer";
|
|
5
|
+
import { buildKnownCnTvBindings, isCnOrTvIdentifier, propertyAssignmentNameText, } from "#lib/arrange/domain/ast/ast-helpers";
|
|
6
|
+
export function traverseTvObject(sourceFile, obj, visitor, depth = 0, knownBindings) {
|
|
7
|
+
if (depth > MAX_OBJECT_DEPTH) {
|
|
8
|
+
return;
|
|
9
|
+
}
|
|
10
|
+
for (const prop of obj.properties) {
|
|
11
|
+
if (!isDomainPropertyAssignment(prop)) {
|
|
12
|
+
continue;
|
|
13
|
+
}
|
|
14
|
+
const init = prop.initializer;
|
|
15
|
+
if (isDomainTailwindClassLiteral(init)) {
|
|
16
|
+
visitor(init, sourceFile, undefined);
|
|
17
|
+
}
|
|
18
|
+
else if (isDomainArrayLiteralExpression(init)) {
|
|
19
|
+
for (const arrayElement of init.elements) {
|
|
20
|
+
if (isDomainSpreadElement(arrayElement)) {
|
|
21
|
+
continue;
|
|
22
|
+
}
|
|
23
|
+
if (isDomainTailwindClassLiteral(arrayElement)) {
|
|
24
|
+
visitor(arrayElement, sourceFile, undefined);
|
|
25
|
+
}
|
|
26
|
+
else if (isDomainCallExpression(arrayElement) &&
|
|
27
|
+
isCnOrTvIdentifier(arrayElement.expression, "cn", knownBindings)) {
|
|
28
|
+
for (const arg of arrayElement.arguments) {
|
|
29
|
+
forEachStringLiteralInClassExpression(arg, (lit) => {
|
|
30
|
+
visitor(lit, sourceFile, arrayElement);
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
else if (isDomainObjectLiteralExpression(arrayElement)) {
|
|
35
|
+
for (const objectProperty of arrayElement.properties) {
|
|
36
|
+
if (!isDomainPropertyAssignment(objectProperty)) {
|
|
37
|
+
continue;
|
|
38
|
+
}
|
|
39
|
+
const propName = propertyAssignmentNameText(objectProperty);
|
|
40
|
+
if (propName !== "className" && propName !== "class") {
|
|
41
|
+
continue;
|
|
42
|
+
}
|
|
43
|
+
const innerInit = objectProperty.initializer;
|
|
44
|
+
if (isDomainTailwindClassLiteral(innerInit)) {
|
|
45
|
+
visitor(innerInit, sourceFile, undefined);
|
|
46
|
+
}
|
|
47
|
+
else if (isDomainArrayLiteralExpression(innerInit)) {
|
|
48
|
+
for (const nestedArrayElement of innerInit.elements) {
|
|
49
|
+
if (isDomainSpreadElement(nestedArrayElement)) {
|
|
50
|
+
continue;
|
|
51
|
+
}
|
|
52
|
+
if (isDomainTailwindClassLiteral(nestedArrayElement)) {
|
|
53
|
+
visitor(nestedArrayElement, sourceFile, undefined);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
else if (isDomainCallExpression(innerInit) &&
|
|
58
|
+
isCnOrTvIdentifier(innerInit.expression, "cn", knownBindings)) {
|
|
59
|
+
for (const arg of innerInit.arguments) {
|
|
60
|
+
forEachStringLiteralInClassExpression(arg, (lit) => {
|
|
61
|
+
visitor(lit, sourceFile, innerInit);
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
else if (isDomainObjectLiteralExpression(init)) {
|
|
70
|
+
traverseTvObject(sourceFile, init, visitor, depth + 1, knownBindings);
|
|
71
|
+
}
|
|
72
|
+
else if (isDomainCallExpression(init) &&
|
|
73
|
+
isCnOrTvIdentifier(init.expression, "cn", knownBindings)) {
|
|
74
|
+
for (const arg of init.arguments) {
|
|
75
|
+
forEachStringLiteralInClassExpression(arg, (lit) => {
|
|
76
|
+
visitor(lit, sourceFile, init);
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
export function collectCnCallsInsideTv(sourceFile, obj, knownBindings, depth = 0) {
|
|
83
|
+
if (depth > MAX_OBJECT_DEPTH) {
|
|
84
|
+
return [];
|
|
85
|
+
}
|
|
86
|
+
const calls = [];
|
|
87
|
+
for (const prop of obj.properties) {
|
|
88
|
+
if (!isDomainPropertyAssignment(prop)) {
|
|
89
|
+
continue;
|
|
90
|
+
}
|
|
91
|
+
const init = prop.initializer;
|
|
92
|
+
if (isDomainArrayLiteralExpression(init)) {
|
|
93
|
+
for (const arrayElement of init.elements) {
|
|
94
|
+
if (isDomainSpreadElement(arrayElement)) {
|
|
95
|
+
continue;
|
|
96
|
+
}
|
|
97
|
+
if (isDomainCallExpression(arrayElement) &&
|
|
98
|
+
isCnOrTvIdentifier(arrayElement.expression, "cn", knownBindings)) {
|
|
99
|
+
calls.push(arrayElement);
|
|
100
|
+
}
|
|
101
|
+
else if (isDomainObjectLiteralExpression(arrayElement)) {
|
|
102
|
+
for (const objectProperty of arrayElement.properties) {
|
|
103
|
+
if (!isDomainPropertyAssignment(objectProperty)) {
|
|
104
|
+
continue;
|
|
105
|
+
}
|
|
106
|
+
const propName = propertyAssignmentNameText(objectProperty);
|
|
107
|
+
if (propName !== "className" && propName !== "class") {
|
|
108
|
+
continue;
|
|
109
|
+
}
|
|
110
|
+
const innerInit = objectProperty.initializer;
|
|
111
|
+
if (isDomainCallExpression(innerInit) &&
|
|
112
|
+
isCnOrTvIdentifier(innerInit.expression, "cn", knownBindings)) {
|
|
113
|
+
calls.push(innerInit);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
else if (isDomainObjectLiteralExpression(init)) {
|
|
120
|
+
calls.push(...collectCnCallsInsideTv(sourceFile, init, knownBindings, depth + 1));
|
|
121
|
+
}
|
|
122
|
+
else if (isDomainCallExpression(init) &&
|
|
123
|
+
isCnOrTvIdentifier(init.expression, "cn", knownBindings)) {
|
|
124
|
+
calls.push(init);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
return calls;
|
|
128
|
+
}
|
|
129
|
+
export function listAllCnCallsInsideTvInSourceFile(sourceFile, knownBindings) {
|
|
130
|
+
const calls = [];
|
|
131
|
+
const visitSubtree = (tsNode) => {
|
|
132
|
+
if (isDomainCallExpression(tsNode) &&
|
|
133
|
+
isCnOrTvIdentifier(tsNode.expression, "tv", knownBindings)) {
|
|
134
|
+
const arg0 = tsNode.arguments[0];
|
|
135
|
+
if (arg0 && isDomainObjectLiteralExpression(arg0)) {
|
|
136
|
+
calls.push(...collectCnCallsInsideTv(sourceFile, arg0, knownBindings, 0));
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
forEachDomainChild(tsNode, visitSubtree);
|
|
140
|
+
};
|
|
141
|
+
for (const stmt of sourceFile.statements) {
|
|
142
|
+
visitSubtree(stmt);
|
|
143
|
+
}
|
|
144
|
+
return calls;
|
|
145
|
+
}
|
|
146
|
+
export function makeStringNode(nodes, sourceFile, isTvContext, cnCall) {
|
|
147
|
+
return {
|
|
148
|
+
nodes,
|
|
149
|
+
sf: sourceFile,
|
|
150
|
+
isTvContext,
|
|
151
|
+
cnCall,
|
|
152
|
+
get primaryClassLiteral() {
|
|
153
|
+
return this.nodes[0];
|
|
154
|
+
},
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
export function slotClassString(stringNode) {
|
|
158
|
+
return stringNode.nodes.map((literal) => literal.text).join(" ");
|
|
159
|
+
}
|
|
160
|
+
export function emitTvSlot(lits, sourceFile, cnCall, results, seenNodePos) {
|
|
161
|
+
if (lits.length === 0) {
|
|
162
|
+
return;
|
|
163
|
+
}
|
|
164
|
+
const firstPos = lits[0].pos;
|
|
165
|
+
if (seenNodePos.has(firstPos)) {
|
|
166
|
+
return;
|
|
167
|
+
}
|
|
168
|
+
seenNodePos.add(firstPos);
|
|
169
|
+
const totalTokens = lits.reduce((accumulatedTokenCount, literal) => accumulatedTokenCount + tokenizeClassString(literal.text).length, 0);
|
|
170
|
+
if (totalTokens < APPLY_MIN_TOKENS) {
|
|
171
|
+
return;
|
|
172
|
+
}
|
|
173
|
+
results.push(makeStringNode(lits, sourceFile, true, cnCall));
|
|
174
|
+
}
|
|
175
|
+
export function collectTvSlots(sourceFile, obj, knownBindings, results, seenNodePos, depth = 0) {
|
|
176
|
+
if (depth > MAX_OBJECT_DEPTH) {
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
179
|
+
for (const prop of obj.properties) {
|
|
180
|
+
if (!isDomainPropertyAssignment(prop)) {
|
|
181
|
+
continue;
|
|
182
|
+
}
|
|
183
|
+
const init = prop.initializer;
|
|
184
|
+
if (isDomainTailwindClassLiteral(init)) {
|
|
185
|
+
emitTvSlot([init], sourceFile, undefined, results, seenNodePos);
|
|
186
|
+
}
|
|
187
|
+
else if (isDomainArrayLiteralExpression(init)) {
|
|
188
|
+
const arrayPos = init.pos;
|
|
189
|
+
if (seenNodePos.has(arrayPos)) {
|
|
190
|
+
continue;
|
|
191
|
+
}
|
|
192
|
+
seenNodePos.add(arrayPos);
|
|
193
|
+
const staticLits = [];
|
|
194
|
+
for (const arrayElement of init.elements) {
|
|
195
|
+
if (isDomainSpreadElement(arrayElement)) {
|
|
196
|
+
continue;
|
|
197
|
+
}
|
|
198
|
+
if (isDomainTailwindClassLiteral(arrayElement)) {
|
|
199
|
+
staticLits.push(arrayElement);
|
|
200
|
+
}
|
|
201
|
+
else if (isDomainCallExpression(arrayElement) &&
|
|
202
|
+
isCnOrTvIdentifier(arrayElement.expression, "cn", knownBindings)) {
|
|
203
|
+
for (const arg of arrayElement.arguments) {
|
|
204
|
+
forEachStringLiteralInClassExpression(arg, (lit) => {
|
|
205
|
+
if (!isUnsafeLiteralForCnStyleApplySplit(lit)) {
|
|
206
|
+
staticLits.push(lit);
|
|
207
|
+
}
|
|
208
|
+
}, 0, CN_APPLY_LITERAL_WALK_OPTS);
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
else if (isDomainObjectLiteralExpression(arrayElement)) {
|
|
212
|
+
for (const objectProperty of arrayElement.properties) {
|
|
213
|
+
if (!isDomainPropertyAssignment(objectProperty)) {
|
|
214
|
+
continue;
|
|
215
|
+
}
|
|
216
|
+
const propName = propertyAssignmentNameText(objectProperty);
|
|
217
|
+
if (propName !== "className" && propName !== "class") {
|
|
218
|
+
continue;
|
|
219
|
+
}
|
|
220
|
+
const innerInit = objectProperty.initializer;
|
|
221
|
+
if (isDomainTailwindClassLiteral(innerInit)) {
|
|
222
|
+
emitTvSlot([innerInit], sourceFile, undefined, results, seenNodePos);
|
|
223
|
+
}
|
|
224
|
+
else if (isDomainArrayLiteralExpression(innerInit)) {
|
|
225
|
+
const innerLits = [];
|
|
226
|
+
for (const nestedArrayElement of innerInit.elements) {
|
|
227
|
+
if (!isDomainSpreadElement(nestedArrayElement) &&
|
|
228
|
+
isDomainTailwindClassLiteral(nestedArrayElement)) {
|
|
229
|
+
innerLits.push(nestedArrayElement);
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
emitTvSlot(innerLits, sourceFile, undefined, results, seenNodePos);
|
|
233
|
+
}
|
|
234
|
+
else if (isDomainCallExpression(innerInit) &&
|
|
235
|
+
isCnOrTvIdentifier(innerInit.expression, "cn", knownBindings)) {
|
|
236
|
+
const cnLits = [];
|
|
237
|
+
for (const arg of innerInit.arguments) {
|
|
238
|
+
forEachStringLiteralInClassExpression(arg, (lit) => {
|
|
239
|
+
if (!isUnsafeLiteralForCnStyleApplySplit(lit)) {
|
|
240
|
+
cnLits.push(lit);
|
|
241
|
+
}
|
|
242
|
+
}, 0, CN_APPLY_LITERAL_WALK_OPTS);
|
|
243
|
+
}
|
|
244
|
+
emitTvSlot(cnLits, sourceFile, innerInit, results, seenNodePos);
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
if (staticLits.length > 0) {
|
|
250
|
+
emitTvSlot(staticLits, sourceFile, undefined, results, seenNodePos);
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
else if (isDomainObjectLiteralExpression(init)) {
|
|
254
|
+
collectTvSlots(sourceFile, init, knownBindings, results, seenNodePos, depth + 1);
|
|
255
|
+
}
|
|
256
|
+
else if (isDomainCallExpression(init) &&
|
|
257
|
+
isCnOrTvIdentifier(init.expression, "cn", knownBindings)) {
|
|
258
|
+
const cnLits = [];
|
|
259
|
+
for (const arg of init.arguments) {
|
|
260
|
+
forEachStringLiteralInClassExpression(arg, (lit) => {
|
|
261
|
+
if (!isUnsafeLiteralForCnStyleApplySplit(lit)) {
|
|
262
|
+
cnLits.push(lit);
|
|
263
|
+
}
|
|
264
|
+
}, 0, CN_APPLY_LITERAL_WALK_OPTS);
|
|
265
|
+
}
|
|
266
|
+
emitTvSlot(cnLits, sourceFile, init, results, seenNodePos);
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
export function collectGroupableStringNodes(sourceFile) {
|
|
271
|
+
const results = [];
|
|
272
|
+
const seenNodePos = new Set();
|
|
273
|
+
const knownBindings = buildKnownCnTvBindings(sourceFile);
|
|
274
|
+
const visitTypeScriptSubtree = (tsNode) => {
|
|
275
|
+
if (isDomainCallExpression(tsNode)) {
|
|
276
|
+
if (isCnOrTvIdentifier(tsNode.expression, "cn", knownBindings)) {
|
|
277
|
+
const callPos = tsNode.pos;
|
|
278
|
+
if (seenNodePos.has(callPos)) {
|
|
279
|
+
forEachDomainChild(tsNode, visitTypeScriptSubtree);
|
|
280
|
+
return;
|
|
281
|
+
}
|
|
282
|
+
seenNodePos.add(callPos);
|
|
283
|
+
const staticLits = collectUnconditionalTailwindLiteralsFromCnArguments(tsNode.arguments);
|
|
284
|
+
const totalTokens = staticLits.reduce((accumulatedTokenCount, literal) => accumulatedTokenCount + tokenizeClassString(literal.text).length, 0);
|
|
285
|
+
if (staticLits.length > 0 && totalTokens >= APPLY_MIN_TOKENS) {
|
|
286
|
+
results.push(makeStringNode(staticLits, sourceFile, false, tsNode));
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
else if (isCnOrTvIdentifier(tsNode.expression, "tv", knownBindings)) {
|
|
290
|
+
const arg0 = tsNode.arguments[0];
|
|
291
|
+
if (arg0 && isDomainObjectLiteralExpression(arg0)) {
|
|
292
|
+
collectTvSlots(sourceFile, arg0, knownBindings, results, seenNodePos);
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
forEachDomainChild(tsNode, visitTypeScriptSubtree);
|
|
297
|
+
};
|
|
298
|
+
for (const stmt of sourceFile.statements) {
|
|
299
|
+
visitTypeScriptSubtree(stmt);
|
|
300
|
+
}
|
|
301
|
+
return results;
|
|
302
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { GroupTarget, PlannedGroupEdit, StringNode } from "#lib/arrange/domain/types";
|
|
2
|
+
import { type DomainSourceFile } from "#lib/arrange/domain/ast/ast-node.model";
|
|
3
|
+
export declare function targetReplaceStart(target: GroupTarget): number;
|
|
4
|
+
export declare function collectLongJsxClassNameTargets(sourceFile: DomainSourceFile): GroupTarget[];
|
|
5
|
+
export declare function collectGroupTargets(sourceFile: DomainSourceFile, filePath: string): GroupTarget[];
|
|
6
|
+
export declare function formatCnCallReplacement(stringNode: StringNode, sourceText: string, withClassName: boolean): string;
|
|
7
|
+
export declare function planGroupEditForTarget(target: GroupTarget, textAfterUnwrap: string, withClassName: boolean): PlannedGroupEdit | undefined;
|
|
8
|
+
//# sourceMappingURL=targets.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"targets.d.ts","sourceRoot":"","sources":["../../../../../src/lib/arrange/domain/ast/targets.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAS3F,OAAO,EAEL,KAAK,gBAAgB,EAKtB,MAAM,wCAAwC,CAAC;AAEhD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAK9D;AAED,wBAAgB,8BAA8B,CAAC,UAAU,EAAE,gBAAgB,GAAG,WAAW,EAAE,CAoB1F;AAED,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,GAAG,WAAW,EAAE,CASjG;AAED,wBAAgB,uBAAuB,CACrC,UAAU,EAAE,UAAU,EACtB,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,OAAO,GACrB,MAAM,CAyCR;AAED,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,WAAW,EACnB,eAAe,EAAE,MAAM,EACvB,aAAa,EAAE,OAAO,GACrB,gBAAgB,GAAG,SAAS,CA6E9B"}
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
import { APPLY_MIN_TOKENS } from "#lib/arrange/domain/constants";
|
|
2
|
+
import { areCnTailwindPartitionsEquivalent, suggestCnGroups, summarizeGroupBucketLabels, } from "#lib/arrange/domain/grouping";
|
|
3
|
+
import { escapeTsStringLiteralContent, formatArray, formatJsxCnAttributeValue, } from "#lib/arrange/domain/source-text-formatters";
|
|
4
|
+
import { tokenizeClassString } from "#lib/arrange/domain/tokenizer";
|
|
5
|
+
import { isUnsafeLiteralForCnStyleApplySplit } from "#lib/arrange/domain/ast/collectors-cn";
|
|
6
|
+
import { jsxClassNameStaticLiteral } from "#lib/arrange/domain/ast/collectors-jsx";
|
|
7
|
+
import { collectGroupableStringNodes, slotClassString, } from "#lib/arrange/domain/ast/collectors-tv";
|
|
8
|
+
import { indentOfLineContaining } from "#lib/shared/source-code/domain/text-edit";
|
|
9
|
+
import { isDomainArrayLiteralExpression, isDomainJsxAttribute, isDomainTailwindClassLiteral, forEachDomainChild, } from "#lib/arrange/domain/ast/ast-node.model";
|
|
10
|
+
export function targetReplaceStart(target) {
|
|
11
|
+
if (target.kind === "cnArg") {
|
|
12
|
+
return target.item.cnCall ? target.item.cnCall.pos : target.item.primaryClassLiteral.pos;
|
|
13
|
+
}
|
|
14
|
+
return target.valueNode.pos;
|
|
15
|
+
}
|
|
16
|
+
export function collectLongJsxClassNameTargets(sourceFile) {
|
|
17
|
+
const results = [];
|
|
18
|
+
const visitTypeScriptSubtree = (tsNode) => {
|
|
19
|
+
if (isDomainJsxAttribute(tsNode)) {
|
|
20
|
+
const parsed = jsxClassNameStaticLiteral(tsNode);
|
|
21
|
+
if (parsed && tokenizeClassString(parsed.lit.text).length >= APPLY_MIN_TOKENS) {
|
|
22
|
+
results.push({
|
|
23
|
+
kind: "jsxClassName",
|
|
24
|
+
sf: sourceFile,
|
|
25
|
+
lit: parsed.lit,
|
|
26
|
+
valueNode: parsed.valueNode,
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
forEachDomainChild(tsNode, visitTypeScriptSubtree);
|
|
31
|
+
};
|
|
32
|
+
for (const stmt of sourceFile.statements) {
|
|
33
|
+
visitTypeScriptSubtree(stmt);
|
|
34
|
+
}
|
|
35
|
+
return results;
|
|
36
|
+
}
|
|
37
|
+
export function collectGroupTargets(sourceFile, filePath) {
|
|
38
|
+
const cnPart = collectGroupableStringNodes(sourceFile).map((stringNode) => ({
|
|
39
|
+
kind: "cnArg",
|
|
40
|
+
item: stringNode,
|
|
41
|
+
}));
|
|
42
|
+
if (!filePath.endsWith(".tsx")) {
|
|
43
|
+
return cnPart;
|
|
44
|
+
}
|
|
45
|
+
return [...cnPart, ...collectLongJsxClassNameTargets(sourceFile)];
|
|
46
|
+
}
|
|
47
|
+
export function formatCnCallReplacement(stringNode, sourceText, withClassName) {
|
|
48
|
+
const call = stringNode.cnCall;
|
|
49
|
+
const baseIndent = indentOfLineContaining(sourceText, call.pos);
|
|
50
|
+
const argIndent = `${baseIndent} `;
|
|
51
|
+
const dynamicArgTexts = [];
|
|
52
|
+
for (const arg of call.arguments) {
|
|
53
|
+
const isSimpleStatic = isDomainTailwindClassLiteral(arg) && !isUnsafeLiteralForCnStyleApplySplit(arg);
|
|
54
|
+
if (!isSimpleStatic) {
|
|
55
|
+
dynamicArgTexts.push(sourceText.slice(arg.pos, arg.end));
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
const pool = slotClassString(stringNode);
|
|
59
|
+
const groups = pool.trim() ? suggestCnGroups(pool) : [];
|
|
60
|
+
const allArgs = [];
|
|
61
|
+
if (groups.length > 1) {
|
|
62
|
+
for (const group of groups) {
|
|
63
|
+
allArgs.push(`${argIndent}"${escapeTsStringLiteralContent(group)}"`);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
else if (groups.length === 1) {
|
|
67
|
+
allArgs.push(`${argIndent}"${escapeTsStringLiteralContent(groups[0])}"`);
|
|
68
|
+
}
|
|
69
|
+
for (const dynamicArgumentSource of dynamicArgTexts) {
|
|
70
|
+
allArgs.push(`${argIndent}${dynamicArgumentSource}`);
|
|
71
|
+
}
|
|
72
|
+
if (withClassName) {
|
|
73
|
+
allArgs.push(`${argIndent}className`);
|
|
74
|
+
}
|
|
75
|
+
// Keep formatter behavior explicit: multiline cn() calls with multiple args use trailing comma.
|
|
76
|
+
const commaAfterLastArg = allArgs.length > 1;
|
|
77
|
+
const argLines = allArgs.map((argLine, lineIndex) => lineIndex < allArgs.length - 1 || commaAfterLastArg ? `${argLine},` : `${argLine}`);
|
|
78
|
+
return `cn(\n${argLines.join("\n")}\n${baseIndent})`;
|
|
79
|
+
}
|
|
80
|
+
export function planGroupEditForTarget(target, textAfterUnwrap, withClassName) {
|
|
81
|
+
if (target.kind === "jsxClassName") {
|
|
82
|
+
const groups = suggestCnGroups(target.lit.text);
|
|
83
|
+
if (groups.length <= 1) {
|
|
84
|
+
return undefined;
|
|
85
|
+
}
|
|
86
|
+
const start = target.valueNode.pos;
|
|
87
|
+
const end = target.valueNode.end;
|
|
88
|
+
const replacement = formatJsxCnAttributeValue(groups, textAfterUnwrap, start);
|
|
89
|
+
return {
|
|
90
|
+
start,
|
|
91
|
+
end,
|
|
92
|
+
replacement,
|
|
93
|
+
bucketSummary: summarizeGroupBucketLabels(groups),
|
|
94
|
+
jsxCn: true,
|
|
95
|
+
lineSf: target.sf,
|
|
96
|
+
reportNode: target.lit,
|
|
97
|
+
label: "JSX className",
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
const pool = slotClassString(target.item);
|
|
101
|
+
const groups = suggestCnGroups(pool);
|
|
102
|
+
if (groups.length <= 1) {
|
|
103
|
+
return undefined;
|
|
104
|
+
}
|
|
105
|
+
if (areCnTailwindPartitionsEquivalent(target.item.nodes.map((classLiteral) => classLiteral.text), groups)) {
|
|
106
|
+
return undefined;
|
|
107
|
+
}
|
|
108
|
+
if (!target.item.cnCall) {
|
|
109
|
+
const anchorClassLiteral = target.item.primaryClassLiteral;
|
|
110
|
+
const parentArray = target.item.nodes.length > 1 &&
|
|
111
|
+
anchorClassLiteral.parent !== null &&
|
|
112
|
+
isDomainArrayLiteralExpression(anchorClassLiteral.parent)
|
|
113
|
+
? anchorClassLiteral.parent
|
|
114
|
+
: null;
|
|
115
|
+
const start = parentArray ? parentArray.pos : anchorClassLiteral.pos;
|
|
116
|
+
const end = parentArray ? parentArray.end : anchorClassLiteral.end;
|
|
117
|
+
const baseIndent = indentOfLineContaining(textAfterUnwrap, start);
|
|
118
|
+
const replacement = formatArray(groups)
|
|
119
|
+
.split("\n")
|
|
120
|
+
.map((line, lineIndex) => (lineIndex === 0 ? line : `${baseIndent}${line}`))
|
|
121
|
+
.join("\n");
|
|
122
|
+
return {
|
|
123
|
+
start,
|
|
124
|
+
end,
|
|
125
|
+
replacement,
|
|
126
|
+
bucketSummary: summarizeGroupBucketLabels(groups),
|
|
127
|
+
jsxCn: false,
|
|
128
|
+
lineSf: target.item.sf,
|
|
129
|
+
reportNode: anchorClassLiteral,
|
|
130
|
+
label: target.item.isTvContext ? "tv" : "cn",
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
const call = target.item.cnCall;
|
|
134
|
+
const start = call.pos;
|
|
135
|
+
const end = call.end;
|
|
136
|
+
const replacement = formatCnCallReplacement(target.item, textAfterUnwrap, withClassName);
|
|
137
|
+
return {
|
|
138
|
+
start,
|
|
139
|
+
end,
|
|
140
|
+
replacement,
|
|
141
|
+
bucketSummary: summarizeGroupBucketLabels(groups),
|
|
142
|
+
jsxCn: false,
|
|
143
|
+
lineSf: target.item.sf,
|
|
144
|
+
reportNode: target.item.primaryClassLiteral,
|
|
145
|
+
label: target.item.isTvContext ? "tv" : "cn",
|
|
146
|
+
};
|
|
147
|
+
}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import type { Bucket } from "#lib/arrange/domain/types";
|
|
2
|
+
/** Analyze report: long literal threshold (token count). */
|
|
3
|
+
export declare const LONG_STRING_TOKEN_THRESHOLD = 18;
|
|
4
|
+
/**
|
|
5
|
+
* Minimum token count for a string to be considered a candidate for grouping
|
|
6
|
+
* in the apply/preview pipeline. Intentionally much lower than
|
|
7
|
+
* {@link LONG_STRING_TOKEN_THRESHOLD} (analyze only).
|
|
8
|
+
*/
|
|
9
|
+
export declare const APPLY_MIN_TOKENS = 2;
|
|
10
|
+
/**
|
|
11
|
+
* Minimum tokens a group must have to stand alone before singleton-merging.
|
|
12
|
+
* Set to 2 so single-token groups are not collapsed into unrelated buckets by the merger.
|
|
13
|
+
*/
|
|
14
|
+
export declare const MIN_GROUP_TOKENS = 2;
|
|
15
|
+
/** Dynamic max groups clamp: base bound. */
|
|
16
|
+
export declare const MAX_GROUPS_BASE = 4;
|
|
17
|
+
/** Dynamic max groups clamp: upper cap. */
|
|
18
|
+
export declare const MAX_GROUPS_CAP = 24;
|
|
19
|
+
/**
|
|
20
|
+
* Extra slots so a few state / aria groups do not force `capGroups` to merge
|
|
21
|
+
* unrelated buckets (e.g. `bg-border` + `outline-hidden`).
|
|
22
|
+
*/
|
|
23
|
+
export declare const MAX_GROUPS_HEADROOM = 2;
|
|
24
|
+
/** Maximum findings printed per category in the analyze report. */
|
|
25
|
+
export declare const MAX_REPORT_LINES = 40;
|
|
26
|
+
/** Maximum recursion depth when traversing `tv()` object literals. */
|
|
27
|
+
export declare const MAX_OBJECT_DEPTH = 12;
|
|
28
|
+
/** Maximum depth when peeling conditional / parens / arrays inside `cn(...)` args. */
|
|
29
|
+
export declare const MAX_CLASS_EXPR_DEPTH = 12;
|
|
30
|
+
/**
|
|
31
|
+
* Maximum variant-stripping passes in {@link stripVariants}.
|
|
32
|
+
* Real-world Tailwind stacks rarely exceed 4–5 segments (e.g. `@md/sidebar:group-hover:dark:focus-visible:`);
|
|
33
|
+
* 12 is a conservative safety cap that prevents runaway loops on malformed input.
|
|
34
|
+
*/
|
|
35
|
+
export declare const MAX_STRIP_VARIANT_PASSES = 12;
|
|
36
|
+
/**
|
|
37
|
+
* Passed when optional `knownBindings` is missing — size 0 disables matching
|
|
38
|
+
* for `cn` / `tv` identifier resolution.
|
|
39
|
+
*/
|
|
40
|
+
export declare const EMPTY_CN_TV_BINDINGS: Set<string>;
|
|
41
|
+
/**
|
|
42
|
+
* Bucket sort order — **render pipeline** (lower → earlier in output).
|
|
43
|
+
* Existence → Position → Layout → Sizing → Spacing → Shape → Background → Shadow
|
|
44
|
+
* → Typography → Composite → Motion → Starting → Behavior → State (variants) → Selector variants.
|
|
45
|
+
*/
|
|
46
|
+
export declare const BUCKET_ORDER: Record<Bucket, number>;
|
|
47
|
+
/**
|
|
48
|
+
* Compatible bucket **pairs** — two adjacent tokens whose buckets appear in the same
|
|
49
|
+
* `Set` may stay in one `cn()` string chunk. Compatibility is **not transitive**: there is
|
|
50
|
+
* no `{position, sizing}` pair, so `fixed inset-0` and `overflow-auto` become **separate**
|
|
51
|
+
* literals unless **layout** tokens sit between them in sorted order; then
|
|
52
|
+
* `position↔layout` and `layout↔sizing` each justify one hop and the whole “box in flow”
|
|
53
|
+
* (place + tracks + scrollport) stays in one chunk — co-located because they jointly define
|
|
54
|
+
* stacking and scroll behavior for the same surface.
|
|
55
|
+
*/
|
|
56
|
+
export declare const COMPATIBLE_BUCKET_SETS: ReadonlyArray<ReadonlySet<Bucket>>;
|
|
57
|
+
/**
|
|
58
|
+
* Responsive / variant prefix — Tailwind v4 aware.
|
|
59
|
+
*
|
|
60
|
+
* v3: sm: md: … — v4: @sm:, @min-[600px]:, @[480px]:, named @md/sidebar:,
|
|
61
|
+
* viewport md/sidebar:, min-[100px]: / max-[100px]:, …
|
|
62
|
+
*/
|
|
63
|
+
export declare const RESPONSIVE_PREFIX: RegExp;
|
|
64
|
+
/** State variant stems — hoisted to module scope (not recreated per call). */
|
|
65
|
+
export declare const STATE_PREFIXES: Set<string>;
|
|
66
|
+
/** Default directory for arrange analyze/preview/apply when no target is passed. */
|
|
67
|
+
export declare const DEFAULT_ARRANGE_TARGET = "packages/ui/src/components";
|
|
68
|
+
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../../src/lib/arrange/domain/constants.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AAExD,4DAA4D;AAC5D,eAAO,MAAM,2BAA2B,KAAK,CAAC;AAE9C;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,IAAI,CAAC;AAElC;;;GAGG;AACH,eAAO,MAAM,gBAAgB,IAAI,CAAC;AAElC,4CAA4C;AAC5C,eAAO,MAAM,eAAe,IAAI,CAAC;AAEjC,2CAA2C;AAC3C,eAAO,MAAM,cAAc,KAAK,CAAC;AAEjC;;;GAGG;AACH,eAAO,MAAM,mBAAmB,IAAI,CAAC;AAErC,mEAAmE;AACnE,eAAO,MAAM,gBAAgB,KAAK,CAAC;AAEnC,sEAAsE;AACtE,eAAO,MAAM,gBAAgB,KAAK,CAAC;AAEnC,sFAAsF;AACtF,eAAO,MAAM,oBAAoB,KAAK,CAAC;AAEvC;;;;GAIG;AACH,eAAO,MAAM,wBAAwB,KAAK,CAAC;AAE3C;;;GAGG;AACH,eAAO,MAAM,oBAAoB,aAAoB,CAAC;AAEtD;;;;GAIG;AACH,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAkB/C,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,sBAAsB,EAAE,aAAa,CAAC,WAAW,CAAC,MAAM,CAAC,CA6BrE,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,QAC2J,CAAC;AAE1L,8EAA8E;AAC9E,eAAO,MAAM,cAAc,aAmEzB,CAAC;AAEH,oFAAoF;AACpF,eAAO,MAAM,sBAAsB,+BAA+B,CAAC"}
|