@codefast/cli 0.3.13-canary.1 → 0.3.13-canary.3
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 +1 -1
- 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 +108 -0
- package/dist/commands/mirror.d.ts +3 -0
- package/dist/commands/mirror.d.ts.map +1 -0
- package/dist/commands/mirror.js +36 -0
- package/dist/commands/tag.d.ts +3 -0
- package/dist/commands/tag.d.ts.map +1 -0
- package/dist/commands/tag.js +44 -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/requests/suggest-groups.request.d.ts +8 -0
- package/dist/lib/arrange/application/requests/suggest-groups.request.d.ts.map +1 -0
- package/dist/lib/arrange/application/requests/suggest-groups.request.js +8 -0
- package/dist/lib/arrange/application/use-cases/analyze-directory.use-case.d.ts +17 -0
- package/dist/lib/arrange/application/use-cases/analyze-directory.use-case.d.ts.map +1 -0
- package/dist/lib/arrange/application/use-cases/analyze-directory.use-case.js +24 -0
- package/dist/lib/arrange/application/use-cases/group-file-preview.use-case.d.ts +17 -0
- package/dist/lib/arrange/application/use-cases/group-file-preview.use-case.d.ts.map +1 -0
- package/dist/lib/arrange/application/use-cases/group-file-preview.use-case.js +46 -0
- package/dist/lib/arrange/application/use-cases/group-file.use-case.d.ts +5 -0
- package/dist/lib/arrange/application/use-cases/group-file.use-case.d.ts.map +1 -0
- package/dist/lib/arrange/application/use-cases/group-file.use-case.js +40 -0
- package/dist/lib/arrange/application/use-cases/run-arrange-sync.use-case.d.ts +19 -0
- package/dist/lib/arrange/application/use-cases/run-arrange-sync.use-case.d.ts.map +1 -0
- package/dist/lib/arrange/application/use-cases/run-arrange-sync.use-case.js +85 -0
- package/dist/lib/arrange/application/use-cases/suggest-cn-groups.use-case.d.ts +7 -0
- package/dist/lib/arrange/application/use-cases/suggest-cn-groups.use-case.d.ts.map +1 -0
- package/dist/lib/arrange/application/use-cases/suggest-cn-groups.use-case.js +10 -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.helper.d.ts +28 -0
- package/dist/lib/arrange/domain/ast/ast-helpers.helper.d.ts.map +1 -0
- package/dist/lib/arrange/domain/ast/ast-helpers.helper.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.collector.d.ts +7 -0
- package/dist/lib/arrange/domain/ast/collectors-cn.collector.d.ts.map +1 -0
- package/dist/lib/arrange/domain/ast/collectors-cn.collector.js +70 -0
- package/dist/lib/arrange/domain/ast/collectors-jsx.collector.d.ts +4 -0
- package/dist/lib/arrange/domain/ast/collectors-jsx.collector.d.ts.map +1 -0
- package/dist/lib/arrange/domain/ast/collectors-jsx.collector.js +21 -0
- package/dist/lib/arrange/domain/ast/collectors-tv.collector.d.ts +13 -0
- package/dist/lib/arrange/domain/ast/collectors-tv.collector.d.ts.map +1 -0
- package/dist/lib/arrange/domain/ast/collectors-tv.collector.js +302 -0
- package/dist/lib/arrange/domain/ast/targets.model.d.ts +8 -0
- package/dist/lib/arrange/domain/ast/targets.model.d.ts.map +1 -0
- package/dist/lib/arrange/domain/ast/targets.model.js +147 -0
- package/dist/lib/arrange/domain/constants.domain.d.ts +70 -0
- package/dist/lib/arrange/domain/constants.domain.d.ts.map +1 -0
- package/dist/lib/arrange/domain/constants.domain.js +182 -0
- package/dist/lib/arrange/domain/errors.domain.d.ts +14 -0
- package/dist/lib/arrange/domain/errors.domain.d.ts.map +1 -0
- package/dist/lib/arrange/domain/errors.domain.js +16 -0
- package/dist/lib/arrange/domain/grouping.domain.d.ts +41 -0
- package/dist/lib/arrange/domain/grouping.domain.d.ts.map +1 -0
- package/dist/lib/arrange/domain/grouping.domain.js +371 -0
- package/dist/lib/arrange/domain/imports.domain.d.ts +7 -0
- package/dist/lib/arrange/domain/imports.domain.d.ts.map +1 -0
- package/dist/lib/arrange/domain/imports.domain.js +80 -0
- package/dist/lib/arrange/domain/source-text-formatters.formatter.d.ts +16 -0
- package/dist/lib/arrange/domain/source-text-formatters.formatter.d.ts.map +1 -0
- package/dist/lib/arrange/domain/source-text-formatters.formatter.js +55 -0
- package/dist/lib/arrange/domain/tokenizer.util.d.ts +45 -0
- package/dist/lib/arrange/domain/tokenizer.util.d.ts.map +1 -0
- package/dist/lib/arrange/domain/tokenizer.util.js +469 -0
- package/dist/lib/arrange/domain/types.domain.d.ts +115 -0
- package/dist/lib/arrange/domain/types.domain.d.ts.map +1 -0
- package/dist/lib/arrange/domain/types.domain.js +10 -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.adapter.d.ts +14 -0
- package/dist/lib/arrange/infra/arrange-sync-cli-options.adapter.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.adapter.d.ts +3 -0
- package/dist/lib/arrange/infra/ensure-cn-import.adapter.d.ts.map +1 -0
- package/dist/lib/arrange/infra/ensure-cn-import.adapter.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.test-helper.d.ts +8 -0
- package/dist/lib/arrange/infra/merge-cn-literal-pool-for-test.test-helper.d.ts.map +1 -0
- package/dist/lib/arrange/infra/merge-cn-literal-pool-for-test.test-helper.js +25 -0
- package/dist/lib/arrange/infra/ts-ast-translator.adapter.d.ts +10 -0
- package/dist/lib/arrange/infra/ts-ast-translator.adapter.d.ts.map +1 -0
- package/dist/lib/arrange/infra/ts-ast-translator.adapter.js +363 -0
- package/dist/lib/arrange/presentation/arrange-prelude.presenter.d.ts +14 -0
- package/dist/lib/arrange/presentation/arrange-prelude.presenter.d.ts.map +1 -0
- package/dist/lib/arrange/presentation/arrange-prelude.presenter.js +24 -0
- package/dist/lib/arrange/presentation/formatters.presenter.d.ts +3 -0
- package/dist/lib/arrange/presentation/formatters.presenter.d.ts.map +1 -0
- package/dist/lib/arrange/presentation/formatters.presenter.js +2 -0
- package/dist/lib/arrange/presentation/present-analyze-cli.presenter.d.ts +4 -0
- package/dist/lib/arrange/presentation/present-analyze-cli.presenter.d.ts.map +1 -0
- package/dist/lib/arrange/presentation/present-analyze-cli.presenter.js +4 -0
- package/dist/lib/arrange/presentation/report.presenter.d.ts +4 -0
- package/dist/lib/arrange/presentation/report.presenter.d.ts.map +1 -0
- package/dist/lib/arrange/presentation/report.presenter.js +37 -0
- package/dist/lib/arrange/presentation/resolve-arrange-cli-target.presenter.d.ts +2 -0
- package/dist/lib/arrange/presentation/resolve-arrange-cli-target.presenter.d.ts.map +1 -0
- package/dist/lib/arrange/presentation/resolve-arrange-cli-target.presenter.js +7 -0
- package/dist/lib/config/domain/schema.domain.d.ts +50 -0
- package/dist/lib/config/domain/schema.domain.d.ts.map +1 -0
- package/dist/lib/config/domain/schema.domain.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.adapter.d.ts +11 -0
- package/dist/lib/config/infra/loader.adapter.d.ts.map +1 -0
- package/dist/lib/config/infra/loader.adapter.js +90 -0
- package/dist/lib/core/application/architecture-boundaries.policy.d.ts +19 -0
- package/dist/lib/core/application/architecture-boundaries.policy.d.ts.map +1 -0
- package/dist/lib/core/application/architecture-boundaries.policy.js +370 -0
- package/dist/lib/core/application/ports/cli-io.port.d.ts +31 -0
- package/dist/lib/core/application/ports/cli-io.port.d.ts.map +1 -0
- package/dist/lib/core/application/schema-parse.util.d.ts +8 -0
- package/dist/lib/core/application/schema-parse.util.d.ts.map +1 -0
- package/dist/lib/core/application/schema-parse.util.js +20 -0
- package/dist/lib/core/application/utils/caught-unknown-message.util.d.ts +6 -0
- package/dist/lib/core/application/utils/caught-unknown-message.util.d.ts.map +1 -0
- package/dist/lib/core/application/utils/caught-unknown-message.util.js +34 -0
- package/dist/lib/core/application/utils/verbose-diagnostics.util.d.ts +5 -0
- package/dist/lib/core/application/utils/verbose-diagnostics.util.d.ts.map +1 -0
- package/dist/lib/core/application/utils/verbose-diagnostics.util.js +7 -0
- package/dist/lib/core/domain/errors.domain.d.ts +11 -0
- package/dist/lib/core/domain/errors.domain.d.ts.map +1 -0
- package/dist/lib/core/domain/errors.domain.js +9 -0
- package/dist/lib/core/domain/result.model.d.ts +17 -0
- package/dist/lib/core/domain/result.model.d.ts.map +1 -0
- package/dist/lib/core/domain/result.model.js +15 -0
- package/dist/lib/core/infra/container.adapter.d.ts +58 -0
- package/dist/lib/core/infra/container.adapter.d.ts.map +1 -0
- package/dist/lib/core/infra/container.adapter.js +80 -0
- package/dist/lib/core/infra/logging-decorator.adapter.d.ts +12 -0
- package/dist/lib/core/infra/logging-decorator.adapter.d.ts.map +1 -0
- package/dist/lib/core/infra/logging-decorator.adapter.js +75 -0
- package/dist/lib/core/presentation/cli-executor.presenter.d.ts +33 -0
- package/dist/lib/core/presentation/cli-executor.presenter.d.ts.map +1 -0
- package/dist/lib/core/presentation/cli-executor.presenter.js +73 -0
- package/dist/lib/core/presentation/format-app-error.presenter.d.ts +6 -0
- package/dist/lib/core/presentation/format-app-error.presenter.d.ts.map +1 -0
- package/dist/lib/core/presentation/format-app-error.presenter.js +19 -0
- package/dist/lib/core/presentation/global-cli-options.presenter.d.ts +9 -0
- package/dist/lib/core/presentation/global-cli-options.presenter.d.ts.map +1 -0
- package/dist/lib/core/presentation/global-cli-options.presenter.js +8 -0
- package/dist/lib/core/presentation/load-codefast-config.presenter.d.ts +8 -0
- package/dist/lib/core/presentation/load-codefast-config.presenter.d.ts.map +1 -0
- package/dist/lib/core/presentation/load-codefast-config.presenter.js +15 -0
- package/dist/lib/core/presentation/parse-cli-schema.presenter.d.ts +5 -0
- package/dist/lib/core/presentation/parse-cli-schema.presenter.d.ts.map +1 -0
- package/dist/lib/core/presentation/parse-cli-schema.presenter.js +4 -0
- package/dist/lib/core/presentation/run-cli-use-case-after-parse.presenter.d.ts +6 -0
- package/dist/lib/core/presentation/run-cli-use-case-after-parse.presenter.d.ts.map +1 -0
- package/dist/lib/core/presentation/run-cli-use-case-after-parse.presenter.js +17 -0
- package/dist/lib/core/presentation/workspace-root-strict.presenter.d.ts +5 -0
- package/dist/lib/core/presentation/workspace-root-strict.presenter.d.ts.map +1 -0
- package/dist/lib/core/presentation/workspace-root-strict.presenter.js +12 -0
- package/dist/lib/infra/config-reporter.adapter.d.ts +4 -0
- package/dist/lib/infra/config-reporter.adapter.d.ts.map +1 -0
- package/dist/lib/infra/config-reporter.adapter.js +9 -0
- package/dist/lib/infra/fs-contract.port.d.ts +2 -0
- package/dist/lib/infra/fs-contract.port.d.ts.map +1 -0
- package/dist/lib/infra/fs-contract.port.js +1 -0
- package/dist/lib/infra/node-io.adapter.d.ts +4 -0
- package/dist/lib/infra/node-io.adapter.d.ts.map +1 -0
- package/dist/lib/infra/node-io.adapter.js +37 -0
- package/dist/lib/infra/workspace/repo-root.adapter.d.ts +7 -0
- package/dist/lib/infra/workspace/repo-root.adapter.d.ts.map +1 -0
- package/dist/lib/infra/workspace/repo-root.adapter.js +23 -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/use-cases/generate-mirror-exports.use-case.d.ts +10 -0
- package/dist/lib/mirror/application/use-cases/generate-mirror-exports.use-case.d.ts.map +1 -0
- package/dist/lib/mirror/application/use-cases/generate-mirror-exports.use-case.js +271 -0
- package/dist/lib/mirror/application/use-cases/run-mirror-sync.use-case.d.ts +19 -0
- package/dist/lib/mirror/application/use-cases/run-mirror-sync.use-case.d.ts.map +1 -0
- package/dist/lib/mirror/application/use-cases/run-mirror-sync.use-case.js +168 -0
- package/dist/lib/mirror/domain/constants.domain.d.ts +6 -0
- package/dist/lib/mirror/domain/constants.domain.d.ts.map +1 -0
- package/dist/lib/mirror/domain/constants.domain.js +5 -0
- package/dist/lib/mirror/domain/errors.domain.d.ts +10 -0
- package/dist/lib/mirror/domain/errors.domain.d.ts.map +1 -0
- package/dist/lib/mirror/domain/errors.domain.js +12 -0
- package/dist/lib/mirror/domain/types.domain.d.ts +65 -0
- package/dist/lib/mirror/domain/types.domain.d.ts.map +1 -0
- package/dist/lib/mirror/domain/types.domain.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.adapter.d.ts +9 -0
- package/dist/lib/mirror/infra/dirent-list.adapter.d.ts.map +1 -0
- package/dist/lib/mirror/infra/dirent-list.adapter.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.adapter.d.ts +14 -0
- package/dist/lib/mirror/infra/mirror-sync-cli-options.adapter.d.ts.map +1 -0
- package/dist/lib/mirror/infra/mirror-sync-cli-options.adapter.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.adapter.d.ts +8 -0
- package/dist/lib/mirror/infra/package-filter.adapter.d.ts.map +1 -0
- package/dist/lib/mirror/infra/package-filter.adapter.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.adapter.d.ts +2 -0
- package/dist/lib/mirror/infra/path-normalizer.adapter.d.ts.map +1 -0
- package/dist/lib/mirror/infra/path-normalizer.adapter.js +4 -0
- package/dist/lib/mirror/infra/update-pkg.adapter.d.ts +19 -0
- package/dist/lib/mirror/infra/update-pkg.adapter.d.ts.map +1 -0
- package/dist/lib/mirror/infra/update-pkg.adapter.js +156 -0
- package/dist/lib/mirror/infra/workspace-packages.adapter.d.ts +26 -0
- package/dist/lib/mirror/infra/workspace-packages.adapter.d.ts.map +1 -0
- package/dist/lib/mirror/infra/workspace-packages.adapter.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/mirror-prelude.presenter.d.ts +17 -0
- package/dist/lib/mirror/presentation/mirror-prelude.presenter.d.ts.map +1 -0
- package/dist/lib/mirror/presentation/mirror-prelude.presenter.js +35 -0
- package/dist/lib/mirror/presentation/reporter.presenter.d.ts +25 -0
- package/dist/lib/mirror/presentation/reporter.presenter.d.ts.map +1 -0
- package/dist/lib/mirror/presentation/reporter.presenter.js +140 -0
- package/dist/lib/mirror/presentation/resolve-mirror-package-arg.presenter.d.ts +11 -0
- package/dist/lib/mirror/presentation/resolve-mirror-package-arg.presenter.d.ts.map +1 -0
- package/dist/lib/mirror/presentation/resolve-mirror-package-arg.presenter.js +27 -0
- package/dist/lib/shared/source-code/domain/text-edit.model.d.ts +14 -0
- package/dist/lib/shared/source-code/domain/text-edit.model.d.ts.map +1 -0
- package/dist/lib/shared/source-code/domain/text-edit.model.js +30 -0
- package/dist/lib/shared/source-code/infra/tsx-file-walk.adapter.d.ts +4 -0
- package/dist/lib/shared/source-code/infra/tsx-file-walk.adapter.d.ts.map +1 -0
- package/dist/lib/shared/source-code/infra/tsx-file-walk.adapter.js +37 -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/application/use-cases/run-tag-sync.use-case.d.ts +23 -0
- package/dist/lib/tag/application/use-cases/run-tag-sync.use-case.d.ts.map +1 -0
- package/dist/lib/tag/application/use-cases/run-tag-sync.use-case.js +357 -0
- package/dist/lib/tag/domain/types.domain.d.ts +56 -0
- package/dist/lib/tag/domain/types.domain.d.ts.map +1 -0
- package/dist/lib/tag/domain/types.domain.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.adapter.d.ts +14 -0
- package/dist/lib/tag/infra/tag-sync-cli-options.adapter.d.ts.map +1 -0
- package/dist/lib/tag/infra/tag-sync-cli-options.adapter.js +1 -0
- package/dist/lib/tag/infra/tag-target-candidates.adapter.d.ts +4 -0
- package/dist/lib/tag/infra/tag-target-candidates.adapter.d.ts.map +1 -0
- package/dist/lib/tag/infra/tag-target-candidates.adapter.js +200 -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/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.presenter.d.ts +8 -0
- package/dist/lib/tag/presentation/colors.presenter.d.ts.map +1 -0
- package/dist/lib/tag/presentation/colors.presenter.js +9 -0
- package/dist/lib/tag/presentation/resolve-tag-cli-target.presenter.d.ts +8 -0
- package/dist/lib/tag/presentation/resolve-tag-cli-target.presenter.d.ts.map +1 -0
- package/dist/lib/tag/presentation/resolve-tag-cli-target.presenter.js +10 -0
- package/dist/lib/tag/presentation/resolve-tag-workspace-root.presenter.d.ts +8 -0
- package/dist/lib/tag/presentation/resolve-tag-workspace-root.presenter.d.ts.map +1 -0
- package/dist/lib/tag/presentation/resolve-tag-workspace-root.presenter.js +10 -0
- package/dist/lib/tag/presentation/tag-prelude.presenter.d.ts +15 -0
- package/dist/lib/tag/presentation/tag-prelude.presenter.d.ts.map +1 -0
- package/dist/lib/tag/presentation/tag-prelude.presenter.js +31 -0
- package/dist/lib/tag/presentation/tag-sync.presenter.d.ts +20 -0
- package/dist/lib/tag/presentation/tag-sync.presenter.d.ts.map +1 -0
- package/dist/lib/tag/presentation/tag-sync.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.adapter.js} +0 -0
- /package/dist/lib/{tag/domain/types.mjs → core/application/ports/cli-io.port.js} +0 -0
|
@@ -1,107 +0,0 @@
|
|
|
1
|
-
import { messageFromCaughtUnknown } from "../lib/infra/caught-unknown-message.mjs";
|
|
2
|
-
import { loadConfig } from "../lib/config/infra/loader.mjs";
|
|
3
|
-
import "../lib/config/index.mjs";
|
|
4
|
-
import { printConfigSchemaWarnings } from "../lib/infra/config-reporter.mjs";
|
|
5
|
-
import { DEFAULT_ARRANGE_TARGET } from "../lib/arrange/domain/constants.mjs";
|
|
6
|
-
import { analyzeDirectory } from "../lib/arrange/application/analyze.mjs";
|
|
7
|
-
import { printAnalyzeReport } from "../lib/arrange/presentation/report.mjs";
|
|
8
|
-
import { suggestCnGroups, summarizeGroupBucketLabels } from "../lib/arrange/domain/grouping.mjs";
|
|
9
|
-
import { formatArray, formatCnCall } from "../lib/arrange/presentation/formatters.mjs";
|
|
10
|
-
import { runArrangeSync } from "../lib/arrange/application/run-target.mjs";
|
|
11
|
-
import { createNodeCliFs, createNodeCliLogger } from "../lib/infra/node-io.mjs";
|
|
12
|
-
import "../lib/arrange/index.mjs";
|
|
13
|
-
import { findRepoRoot } from "../lib/infra/workspace/repo-root.mjs";
|
|
14
|
-
import process from "node:process";
|
|
15
|
-
import path from "node:path";
|
|
16
|
-
import { Option } from "commander";
|
|
17
|
-
//#region src/commands/arrange.ts
|
|
18
|
-
/** Commander attribute `withClassName` (second long flag `--with-class-name`). */
|
|
19
|
-
function createWithClassNameOption() {
|
|
20
|
-
return new Option("--with-classname, --with-class-name", "Append className as final cn() argument").default(false);
|
|
21
|
-
}
|
|
22
|
-
function defaultTargetPath() {
|
|
23
|
-
return path.resolve(process.cwd(), DEFAULT_ARRANGE_TARGET);
|
|
24
|
-
}
|
|
25
|
-
function checkTargetExists(resolved, fs, logger) {
|
|
26
|
-
if (!fs.existsSync(resolved)) {
|
|
27
|
-
logger.err(`Not found: ${resolved}`);
|
|
28
|
-
process.exitCode = 1;
|
|
29
|
-
return false;
|
|
30
|
-
}
|
|
31
|
-
return true;
|
|
32
|
-
}
|
|
33
|
-
async function loadArrangeCommandConfig(fs, logger, rootDir) {
|
|
34
|
-
try {
|
|
35
|
-
const { config, warnings } = await loadConfig(fs, rootDir);
|
|
36
|
-
printConfigSchemaWarnings(logger, warnings);
|
|
37
|
-
return { arrangeConfig: config.arrange ?? {} };
|
|
38
|
-
} catch (caughtConfigError) {
|
|
39
|
-
logger.err(messageFromCaughtUnknown(caughtConfigError));
|
|
40
|
-
process.exitCode = 1;
|
|
41
|
-
return;
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
function registerArrangeCommand(program) {
|
|
45
|
-
const arrange = program.command("arrange").description("Analyze and regroup Tailwind classes in cn() / tv() calls (Tailwind v4)");
|
|
46
|
-
arrange.command("analyze").description("Report long strings, nested cn in tv(), and related findings").argument("[target]", "Directory or file (default: packages/ui/src/components)").action(async (target) => {
|
|
47
|
-
const fs = createNodeCliFs();
|
|
48
|
-
const logger = createNodeCliLogger();
|
|
49
|
-
const resolved = target ? path.resolve(target) : defaultTargetPath();
|
|
50
|
-
if (!checkTargetExists(resolved, fs, logger)) return;
|
|
51
|
-
if (!await loadArrangeCommandConfig(fs, logger, findRepoRoot(fs))) return;
|
|
52
|
-
printAnalyzeReport(resolved, analyzeDirectory(resolved, fs), logger);
|
|
53
|
-
});
|
|
54
|
-
arrange.command("preview").description("Dry-run: print suggested replacements without writing files").argument("[target]", "Directory or file (default: packages/ui/src/components)").addOption(createWithClassNameOption()).option("--cn-import <spec>", "Override module specifier when adding cn import").action(async (target, opts) => {
|
|
55
|
-
const fs = createNodeCliFs();
|
|
56
|
-
const logger = createNodeCliLogger();
|
|
57
|
-
const resolved = target ? path.resolve(target) : defaultTargetPath();
|
|
58
|
-
if (!checkTargetExists(resolved, fs, logger)) return;
|
|
59
|
-
const rootDir = findRepoRoot(fs);
|
|
60
|
-
const loaded = await loadArrangeCommandConfig(fs, logger, rootDir);
|
|
61
|
-
if (!loaded) return;
|
|
62
|
-
process.exitCode = await runArrangeSync({
|
|
63
|
-
rootDir,
|
|
64
|
-
config: loaded.arrangeConfig,
|
|
65
|
-
targetPath: resolved,
|
|
66
|
-
write: false,
|
|
67
|
-
withClassName: opts.withClassName,
|
|
68
|
-
cnImport: opts.cnImport,
|
|
69
|
-
fs,
|
|
70
|
-
logger
|
|
71
|
-
});
|
|
72
|
-
});
|
|
73
|
-
arrange.command("apply").description("Apply grouping and cn-in-tv unwrap edits to files").argument("[target]", "Directory or file (default: packages/ui/src/components)").addOption(createWithClassNameOption()).option("--cn-import <spec>", "Override module specifier when adding cn import").action(async (target, opts) => {
|
|
74
|
-
const fs = createNodeCliFs();
|
|
75
|
-
const logger = createNodeCliLogger();
|
|
76
|
-
const resolved = target ? path.resolve(target) : defaultTargetPath();
|
|
77
|
-
if (!checkTargetExists(resolved, fs, logger)) return;
|
|
78
|
-
const rootDir = findRepoRoot(fs);
|
|
79
|
-
const loaded = await loadArrangeCommandConfig(fs, logger, rootDir);
|
|
80
|
-
if (!loaded) return;
|
|
81
|
-
process.exitCode = await runArrangeSync({
|
|
82
|
-
rootDir,
|
|
83
|
-
config: loaded.arrangeConfig,
|
|
84
|
-
targetPath: resolved,
|
|
85
|
-
write: true,
|
|
86
|
-
withClassName: opts.withClassName,
|
|
87
|
-
cnImport: opts.cnImport,
|
|
88
|
-
fs,
|
|
89
|
-
logger
|
|
90
|
-
});
|
|
91
|
-
});
|
|
92
|
-
arrange.command("group").description("Try grouping on a pasted class string (stdout: cn(...) or tv array with --tv)").argument("[tokens...]", "Class tokens (quote a single string if it contains spaces)").option("--tv", "Emit tv()-style array instead of cn() call", false).addOption(createWithClassNameOption()).action((tokens, opts) => {
|
|
93
|
-
const inlineClasses = tokens.join(" ").trim();
|
|
94
|
-
if (!inlineClasses) {
|
|
95
|
-
process.stderr.write("Pass a class string. Example: codefast arrange group \"flex gap-2 text-sm rounded-md\"\n");
|
|
96
|
-
process.exitCode = 1;
|
|
97
|
-
return;
|
|
98
|
-
}
|
|
99
|
-
const groups = suggestCnGroups(inlineClasses);
|
|
100
|
-
const result = opts.tv ? formatArray(groups) : formatCnCall(groups, { trailingClassName: !!opts.withClassName });
|
|
101
|
-
process.stdout.write(`${result}\n`);
|
|
102
|
-
const bucketSummary = summarizeGroupBucketLabels(groups);
|
|
103
|
-
process.stdout.write(`\n// Buckets: ${JSON.stringify(bucketSummary)}\n`);
|
|
104
|
-
});
|
|
105
|
-
}
|
|
106
|
-
//#endregion
|
|
107
|
-
export { registerArrangeCommand };
|
package/dist/commands/mirror.mjs
DELETED
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
import { messageFromCaughtUnknown } from "../lib/infra/caught-unknown-message.mjs";
|
|
2
|
-
import { loadConfig } from "../lib/config/infra/loader.mjs";
|
|
3
|
-
import "../lib/config/index.mjs";
|
|
4
|
-
import { printConfigSchemaWarnings } from "../lib/infra/config-reporter.mjs";
|
|
5
|
-
import { createNodeCliFs, createNodeCliLogger } from "../lib/infra/node-io.mjs";
|
|
6
|
-
import { findRepoRoot } from "../lib/infra/workspace/repo-root.mjs";
|
|
7
|
-
import { runMirrorSync } from "../lib/mirror/application/sync.mjs";
|
|
8
|
-
import "../lib/mirror/index.mjs";
|
|
9
|
-
import process from "node:process";
|
|
10
|
-
import { realpathSync } from "node:fs";
|
|
11
|
-
import path from "node:path";
|
|
12
|
-
//#region src/commands/mirror.ts
|
|
13
|
-
function tryRealpath(entryPath) {
|
|
14
|
-
try {
|
|
15
|
-
return realpathSync.native(entryPath);
|
|
16
|
-
} catch {
|
|
17
|
-
return path.resolve(entryPath);
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
function normalizePath(relPath) {
|
|
21
|
-
return relPath.split(path.sep).join("/").replace(/\\/g, "/");
|
|
22
|
-
}
|
|
23
|
-
function packageArgToRelative(rootDir, arg) {
|
|
24
|
-
if (!arg) return;
|
|
25
|
-
const rootReal = tryRealpath(path.resolve(rootDir));
|
|
26
|
-
const cwdReal = tryRealpath(process.cwd());
|
|
27
|
-
const targetReal = tryRealpath(path.isAbsolute(arg) ? path.resolve(arg) : path.resolve(cwdReal, arg));
|
|
28
|
-
const normalized = normalizePath(path.relative(rootReal, targetReal));
|
|
29
|
-
if (normalized.startsWith("..") || path.isAbsolute(normalized) || normalized === "" || normalized === ".") throw new Error(`Package path must be a subdirectory under monorepo root: ${rootDir}`);
|
|
30
|
-
return normalized;
|
|
31
|
-
}
|
|
32
|
-
function registerMirrorCommand(program) {
|
|
33
|
-
program.command("mirror").description("Keep package manifests aligned with what you ship").command("sync").description("Write package.json exports from dist/ for workspace packages").argument("[package]", "Optional package path relative to repo root (e.g. packages/ui)").option("-v, --verbose", "Print extra diagnostics", false).action(async function(pkg, options) {
|
|
34
|
-
const globals = this.optsWithGlobals();
|
|
35
|
-
const fs = createNodeCliFs();
|
|
36
|
-
const logger = createNodeCliLogger();
|
|
37
|
-
const rootDir = findRepoRoot(fs);
|
|
38
|
-
let packageFilter;
|
|
39
|
-
try {
|
|
40
|
-
packageFilter = packageArgToRelative(rootDir, pkg);
|
|
41
|
-
} catch (caughtPathError) {
|
|
42
|
-
this.error(messageFromCaughtUnknown(caughtPathError));
|
|
43
|
-
return;
|
|
44
|
-
}
|
|
45
|
-
let mirrorConfig = {};
|
|
46
|
-
try {
|
|
47
|
-
const { config, warnings } = await loadConfig(fs, rootDir);
|
|
48
|
-
printConfigSchemaWarnings(logger, warnings);
|
|
49
|
-
mirrorConfig = config.mirror ?? {};
|
|
50
|
-
} catch (caughtConfigError) {
|
|
51
|
-
this.error(messageFromCaughtUnknown(caughtConfigError));
|
|
52
|
-
return;
|
|
53
|
-
}
|
|
54
|
-
process.exitCode = await runMirrorSync({
|
|
55
|
-
rootDir,
|
|
56
|
-
config: mirrorConfig,
|
|
57
|
-
verbose: options.verbose,
|
|
58
|
-
noColor: globals.color === false,
|
|
59
|
-
packageFilter,
|
|
60
|
-
fs,
|
|
61
|
-
logger
|
|
62
|
-
});
|
|
63
|
-
});
|
|
64
|
-
}
|
|
65
|
-
//#endregion
|
|
66
|
-
export { packageArgToRelative, registerMirrorCommand };
|
package/dist/commands/tag.mjs
DELETED
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
import { messageFromCaughtUnknown } from "../lib/infra/caught-unknown-message.mjs";
|
|
2
|
-
import { loadConfig } from "../lib/config/infra/loader.mjs";
|
|
3
|
-
import "../lib/config/index.mjs";
|
|
4
|
-
import { printConfigSchemaWarnings } from "../lib/infra/config-reporter.mjs";
|
|
5
|
-
import { createNodeCliFs, createNodeCliLogger } from "../lib/infra/node-io.mjs";
|
|
6
|
-
import { findRepoRoot } from "../lib/infra/workspace/repo-root.mjs";
|
|
7
|
-
import { runTagSync } from "../lib/tag/application/engine.mjs";
|
|
8
|
-
import { createTagProgressListener, formatSummary, formatTargetTable, formatWarningsAndErrors } from "../lib/tag/presentation/tag-presenter.mjs";
|
|
9
|
-
import "../lib/tag/index.mjs";
|
|
10
|
-
import process from "node:process";
|
|
11
|
-
import path from "node:path";
|
|
12
|
-
//#region src/commands/tag.ts
|
|
13
|
-
function resolveTagRootDir(fs, logger) {
|
|
14
|
-
try {
|
|
15
|
-
return findRepoRoot(fs);
|
|
16
|
-
} catch (caughtRepoRootError) {
|
|
17
|
-
logger.out(`[tag] workspace root auto-detection failed (${messageFromCaughtUnknown(caughtRepoRootError)}), using cwd=${process.cwd()}`);
|
|
18
|
-
return process.cwd();
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
function registerTagCommand(program) {
|
|
22
|
-
program.command("tag").alias("annotate").description("Add @since <version> JSDoc tags to exported declarations").argument("[target]", "Directory or file to annotate (default: auto-discover workspace packages)").option("--dry-run", "Show summary without writing files", false).action(async (target, options) => {
|
|
23
|
-
const fs = createNodeCliFs();
|
|
24
|
-
const logger = createNodeCliLogger();
|
|
25
|
-
const rootDir = resolveTagRootDir(fs, logger);
|
|
26
|
-
let tagConfig = {};
|
|
27
|
-
try {
|
|
28
|
-
const { config, warnings } = await loadConfig(fs, rootDir);
|
|
29
|
-
printConfigSchemaWarnings(logger, warnings);
|
|
30
|
-
tagConfig = config.tag ?? {};
|
|
31
|
-
} catch (caughtConfigError) {
|
|
32
|
-
logger.err(messageFromCaughtUnknown(caughtConfigError));
|
|
33
|
-
process.exitCode = 1;
|
|
34
|
-
return;
|
|
35
|
-
}
|
|
36
|
-
const tagResult = await runTagSync({
|
|
37
|
-
rootDir,
|
|
38
|
-
config: tagConfig,
|
|
39
|
-
skipPackages: tagConfig.skipPackages,
|
|
40
|
-
targetPath: target ? path.resolve(target) : void 0,
|
|
41
|
-
write: !options.dryRun,
|
|
42
|
-
fs,
|
|
43
|
-
listener: createTagProgressListener((line) => logger.out(line))
|
|
44
|
-
});
|
|
45
|
-
logger.out(formatTargetTable(tagResult.selectedTargets, rootDir));
|
|
46
|
-
if (tagResult.selectedTargets.length === 0) {
|
|
47
|
-
logger.err("No packages found in workspace. Check your pnpm-workspace.yaml or provide an explicit target path.");
|
|
48
|
-
process.exitCode = 1;
|
|
49
|
-
return;
|
|
50
|
-
}
|
|
51
|
-
const warningsAndErrorsSection = formatWarningsAndErrors(tagResult);
|
|
52
|
-
if (warningsAndErrorsSection) logger.err(warningsAndErrorsSection);
|
|
53
|
-
logger.out(formatSummary(tagResult));
|
|
54
|
-
process.exitCode = tagResult.targetResults.some((targetResult) => targetResult.runError !== null) || tagResult.hookError ? 1 : 0;
|
|
55
|
-
});
|
|
56
|
-
}
|
|
57
|
-
//#endregion
|
|
58
|
-
export { registerTagCommand };
|
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
import "../domain/constants.mjs";
|
|
2
|
-
import { tokenizeClassString } from "../domain/tokenizer.mjs";
|
|
3
|
-
import { forEachStringLiteralInClassExpression } from "../domain/ast/collectors-cn.mjs";
|
|
4
|
-
import { jsxClassNameStaticLiteral } from "../domain/ast/collectors-jsx.mjs";
|
|
5
|
-
import { buildKnownCnTvBindings, isCnOrTvIdentifier, lineOf } from "../domain/ast/ast-helpers.mjs";
|
|
6
|
-
import { collectCnCallsInsideTv, traverseTvObject } from "../domain/ast/collectors-tv.mjs";
|
|
7
|
-
import { walkTsxFiles } from "../infra/walk.mjs";
|
|
8
|
-
import ts from "typescript";
|
|
9
|
-
//#region src/lib/arrange/application/analyze.ts
|
|
10
|
-
function analyzeCnCall(sf, call, report) {
|
|
11
|
-
for (const arg of call.arguments) forEachStringLiteralInClassExpression(arg, (lit) => {
|
|
12
|
-
const text = lit.text;
|
|
13
|
-
const tokenCount = tokenizeClassString(text).length;
|
|
14
|
-
if (tokenCount >= 18) report.longCnStringLiterals.push({
|
|
15
|
-
file: sf.fileName,
|
|
16
|
-
line: lineOf(sf, lit),
|
|
17
|
-
tokenCount,
|
|
18
|
-
preview: text.length > 72 ? `${text.slice(0, 72)}…` : text
|
|
19
|
-
});
|
|
20
|
-
});
|
|
21
|
-
}
|
|
22
|
-
function visitCallExpressionForArrangeAnalyze(callExpression, sf, sourceText, knownBindings, report) {
|
|
23
|
-
if (isCnOrTvIdentifier(callExpression.expression, "cn", knownBindings)) {
|
|
24
|
-
report.cnCallExpressions++;
|
|
25
|
-
analyzeCnCall(sf, callExpression, report);
|
|
26
|
-
return;
|
|
27
|
-
}
|
|
28
|
-
if (!isCnOrTvIdentifier(callExpression.expression, "tv", knownBindings)) return;
|
|
29
|
-
report.tvCallExpressions++;
|
|
30
|
-
const arg0 = callExpression.arguments[0];
|
|
31
|
-
if (!arg0 || !ts.isObjectLiteralExpression(arg0)) return;
|
|
32
|
-
for (const nestedCn of collectCnCallsInsideTv(sf, arg0, knownBindings, 0)) {
|
|
33
|
-
const src = sourceText.slice(nestedCn.getStart(sf), nestedCn.getEnd());
|
|
34
|
-
const preview = src.length > 72 ? `${src.slice(0, 72)}…` : src;
|
|
35
|
-
report.cnInsideTvCalls.push({
|
|
36
|
-
file: sf.fileName,
|
|
37
|
-
line: lineOf(sf, nestedCn),
|
|
38
|
-
argCount: nestedCn.arguments.length,
|
|
39
|
-
preview
|
|
40
|
-
});
|
|
41
|
-
}
|
|
42
|
-
traverseTvObject(sf, arg0, (classLiteral) => {
|
|
43
|
-
const text = classLiteral.text;
|
|
44
|
-
const tokenCount = tokenizeClassString(text).length;
|
|
45
|
-
if (tokenCount >= 18) report.longTvStringLiterals.push({
|
|
46
|
-
file: sf.fileName,
|
|
47
|
-
line: lineOf(sf, classLiteral),
|
|
48
|
-
tokenCount,
|
|
49
|
-
preview: text.length > 72 ? `${text.slice(0, 72)}…` : text
|
|
50
|
-
});
|
|
51
|
-
}, 0, knownBindings);
|
|
52
|
-
}
|
|
53
|
-
function visitJsxAttributeForArrangeAnalyze(jsxClassAttribute, sf, filePath, report) {
|
|
54
|
-
if (!filePath.endsWith(".tsx")) return;
|
|
55
|
-
const parsed = jsxClassNameStaticLiteral(jsxClassAttribute);
|
|
56
|
-
if (!parsed) return;
|
|
57
|
-
const text = parsed.lit.text;
|
|
58
|
-
const tokenCount = tokenizeClassString(text).length;
|
|
59
|
-
if (tokenCount >= 18) report.longJsxClassNameLiterals.push({
|
|
60
|
-
file: sf.fileName,
|
|
61
|
-
line: lineOf(sf, parsed.lit),
|
|
62
|
-
tokenCount,
|
|
63
|
-
preview: text.length > 72 ? `${text.slice(0, 72)}…` : text
|
|
64
|
-
});
|
|
65
|
-
}
|
|
66
|
-
function analyzeDirectory(analyzeRootPath, fs) {
|
|
67
|
-
const report = {
|
|
68
|
-
files: 0,
|
|
69
|
-
cnCallExpressions: 0,
|
|
70
|
-
tvCallExpressions: 0,
|
|
71
|
-
cnInsideTvCalls: [],
|
|
72
|
-
longCnStringLiterals: [],
|
|
73
|
-
longTvStringLiterals: [],
|
|
74
|
-
longJsxClassNameLiterals: []
|
|
75
|
-
};
|
|
76
|
-
const files = fs.statSync(analyzeRootPath).isDirectory() ? walkTsxFiles(analyzeRootPath, fs) : [analyzeRootPath];
|
|
77
|
-
for (const filePath of files) {
|
|
78
|
-
const sourceText = fs.readFileSync(filePath, "utf8");
|
|
79
|
-
const sf = ts.createSourceFile(filePath, sourceText, ts.ScriptTarget.Latest, true, filePath.endsWith(".tsx") ? ts.ScriptKind.TSX : ts.ScriptKind.TS);
|
|
80
|
-
report.files++;
|
|
81
|
-
const knownBindings = buildKnownCnTvBindings(sf);
|
|
82
|
-
const visitTypeScriptSubtree = (tsNode) => {
|
|
83
|
-
if (ts.isCallExpression(tsNode)) visitCallExpressionForArrangeAnalyze(tsNode, sf, sourceText, knownBindings, report);
|
|
84
|
-
if (ts.isJsxAttribute(tsNode)) visitJsxAttributeForArrangeAnalyze(tsNode, sf, filePath, report);
|
|
85
|
-
ts.forEachChild(tsNode, visitTypeScriptSubtree);
|
|
86
|
-
};
|
|
87
|
-
visitTypeScriptSubtree(sf);
|
|
88
|
-
}
|
|
89
|
-
return report;
|
|
90
|
-
}
|
|
91
|
-
//#endregion
|
|
92
|
-
export { analyzeDirectory };
|
|
@@ -1,113 +0,0 @@
|
|
|
1
|
-
import { applyEditsDescending, buildKnownCnTvBindings, lineOf, unwrapCnInsideTvCallReplacement } from "../domain/ast/ast-helpers.mjs";
|
|
2
|
-
import { listAllCnCallsInsideTvInSourceFile } from "../domain/ast/collectors-tv.mjs";
|
|
3
|
-
import { collectGroupTargets, planGroupEditForTarget, targetReplaceStart } from "../domain/ast/targets.mjs";
|
|
4
|
-
import { ensureCnImport } from "../domain/imports.mjs";
|
|
5
|
-
import ts from "typescript";
|
|
6
|
-
//#region src/lib/arrange/application/group-file.ts
|
|
7
|
-
function printGroupFilePreview(logger, args) {
|
|
8
|
-
const { out } = logger;
|
|
9
|
-
const { filePath, reportTotal, cnInTvNoReplacement, cnInTvCalls, unwrapReplacementByCall, sourceText, sf, unwrapEdits, plannedGroupEdits } = args;
|
|
10
|
-
let header = `\n── ${filePath} (${reportTotal} site(s)`;
|
|
11
|
-
if (cnInTvNoReplacement > 0) header += `; plus ${cnInTvNoReplacement} cn() inside tv left unchanged (0 args)`;
|
|
12
|
-
header += `) ──`;
|
|
13
|
-
out(header);
|
|
14
|
-
for (const call of cnInTvCalls) {
|
|
15
|
-
const replacement = unwrapReplacementByCall.get(call);
|
|
16
|
-
if (replacement === void 0) {
|
|
17
|
-
out(` Line ${lineOf(sf, call)} [tv ⊃ cn]: cn(...) has no arguments — skipped`);
|
|
18
|
-
continue;
|
|
19
|
-
}
|
|
20
|
-
const start = call.getStart(sf);
|
|
21
|
-
const end = call.getEnd();
|
|
22
|
-
if (sourceText.slice(start, end) === replacement) continue;
|
|
23
|
-
out(` Line ${lineOf(sf, call)} [tv ⊃ cn → string/array]:`);
|
|
24
|
-
out(` ${replacement.split("\n").join("\n ")}`);
|
|
25
|
-
}
|
|
26
|
-
if (unwrapEdits.length > 0 && plannedGroupEdits.length > 0) out(" ([cn] / [tv] / [JSX className] lines below reflect content after unwrap of cn inside tv.)");
|
|
27
|
-
for (const plan of plannedGroupEdits) {
|
|
28
|
-
out(` Line ${lineOf(plan.lineSf, plan.reportNode)} [${plan.label}]:`);
|
|
29
|
-
out(` ${plan.replacement.split("\n").join("\n ")}`);
|
|
30
|
-
out(` // Buckets: ${JSON.stringify(plan.bucketSummary)}`);
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
function applyGroupFileWrites(filePath, options, fs, logger, unwrapEdits, textAfterUnwrap, plannedGroupEdits, cnInTvNoReplacement) {
|
|
34
|
-
const groupEdits = plannedGroupEdits.map((plannedEdit) => ({
|
|
35
|
-
start: plannedEdit.start,
|
|
36
|
-
end: plannedEdit.end,
|
|
37
|
-
replacement: plannedEdit.replacement,
|
|
38
|
-
jsxCn: plannedEdit.jsxCn
|
|
39
|
-
}));
|
|
40
|
-
const touchedJsxCn = groupEdits.some((groupEdit) => groupEdit.jsxCn);
|
|
41
|
-
let newText = groupEdits.length > 0 ? applyEditsDescending(textAfterUnwrap, groupEdits) : textAfterUnwrap;
|
|
42
|
-
const changed = unwrapEdits.length + groupEdits.length;
|
|
43
|
-
if (changed > 0) {
|
|
44
|
-
if (touchedJsxCn) newText = ensureCnImport(newText, filePath, options.cnImport);
|
|
45
|
-
fs.writeFileSync(filePath, newText, "utf8");
|
|
46
|
-
}
|
|
47
|
-
return {
|
|
48
|
-
filePath,
|
|
49
|
-
totalFound: changed + cnInTvNoReplacement,
|
|
50
|
-
changed
|
|
51
|
-
};
|
|
52
|
-
}
|
|
53
|
-
function groupFile(filePath, options, fs, logger) {
|
|
54
|
-
const sourceText = fs.readFileSync(filePath, "utf8");
|
|
55
|
-
const sf = ts.createSourceFile(filePath, sourceText, ts.ScriptTarget.Latest, true, filePath.endsWith(".tsx") ? ts.ScriptKind.TSX : ts.ScriptKind.TS);
|
|
56
|
-
const cnInTvCalls = listAllCnCallsInsideTvInSourceFile(sf, buildKnownCnTvBindings(sf));
|
|
57
|
-
const unwrapPlans = cnInTvCalls.map((call) => {
|
|
58
|
-
const replacement = unwrapCnInsideTvCallReplacement(call, sourceText, sf);
|
|
59
|
-
if (replacement === void 0) return;
|
|
60
|
-
return {
|
|
61
|
-
start: call.getStart(sf),
|
|
62
|
-
end: call.getEnd(),
|
|
63
|
-
replacement,
|
|
64
|
-
call
|
|
65
|
-
};
|
|
66
|
-
}).filter((planOrUndefined) => planOrUndefined !== void 0);
|
|
67
|
-
const unwrapReplacementByCall = new Map(unwrapPlans.map((unwrapPlan) => [unwrapPlan.call, unwrapPlan.replacement]));
|
|
68
|
-
const unwrapEdits = unwrapPlans.filter((unwrapPlan) => sourceText.slice(unwrapPlan.start, unwrapPlan.end) !== unwrapPlan.replacement);
|
|
69
|
-
const textAfterUnwrap = unwrapEdits.length > 0 ? applyEditsDescending(sourceText, unwrapEdits) : sourceText;
|
|
70
|
-
const groupTargets = collectGroupTargets(ts.createSourceFile(filePath, textAfterUnwrap, ts.ScriptTarget.Latest, true, filePath.endsWith(".tsx") ? ts.ScriptKind.TSX : ts.ScriptKind.TS), filePath);
|
|
71
|
-
const cnInTvNoReplacement = cnInTvCalls.length - unwrapPlans.length;
|
|
72
|
-
const sortedTargets = [...groupTargets].sort((leftTarget, rightTarget) => targetReplaceStart(rightTarget) - targetReplaceStart(leftTarget));
|
|
73
|
-
const plannedGroupEdits = [];
|
|
74
|
-
for (const groupTarget of sortedTargets) {
|
|
75
|
-
const plan = planGroupEditForTarget(groupTarget, textAfterUnwrap, options.withClassName);
|
|
76
|
-
if (plan === void 0) continue;
|
|
77
|
-
if (textAfterUnwrap.slice(plan.start, plan.end) === plan.replacement) continue;
|
|
78
|
-
plannedGroupEdits.push(plan);
|
|
79
|
-
}
|
|
80
|
-
const editSitesCount = unwrapEdits.length + plannedGroupEdits.length;
|
|
81
|
-
const reportTotal = editSitesCount + cnInTvNoReplacement;
|
|
82
|
-
if (cnInTvCalls.length === 0 && groupTargets.length === 0) return {
|
|
83
|
-
filePath,
|
|
84
|
-
totalFound: 0,
|
|
85
|
-
changed: 0
|
|
86
|
-
};
|
|
87
|
-
if (!options.write) {
|
|
88
|
-
if (editSitesCount === 0 && cnInTvNoReplacement === 0) return {
|
|
89
|
-
filePath,
|
|
90
|
-
totalFound: 0,
|
|
91
|
-
changed: 0
|
|
92
|
-
};
|
|
93
|
-
printGroupFilePreview(logger, {
|
|
94
|
-
filePath,
|
|
95
|
-
reportTotal,
|
|
96
|
-
cnInTvNoReplacement,
|
|
97
|
-
cnInTvCalls,
|
|
98
|
-
unwrapReplacementByCall,
|
|
99
|
-
sourceText,
|
|
100
|
-
sf,
|
|
101
|
-
unwrapEdits,
|
|
102
|
-
plannedGroupEdits
|
|
103
|
-
});
|
|
104
|
-
return {
|
|
105
|
-
filePath,
|
|
106
|
-
totalFound: reportTotal,
|
|
107
|
-
changed: 0
|
|
108
|
-
};
|
|
109
|
-
}
|
|
110
|
-
return applyGroupFileWrites(filePath, options, fs, logger, unwrapEdits, textAfterUnwrap, plannedGroupEdits, cnInTvNoReplacement);
|
|
111
|
-
}
|
|
112
|
-
//#endregion
|
|
113
|
-
export { groupFile };
|
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
import { messageFromCaughtUnknown } from "../../infra/caught-unknown-message.mjs";
|
|
2
|
-
import { walkTsxFiles } from "../infra/walk.mjs";
|
|
3
|
-
import { groupFile } from "./group-file.mjs";
|
|
4
|
-
import { ArrangeError, ArrangeErrorCode } from "../domain/errors.mjs";
|
|
5
|
-
import path from "node:path";
|
|
6
|
-
//#region src/lib/arrange/application/run-target.ts
|
|
7
|
-
function runOnTarget(target, options, fs, logger) {
|
|
8
|
-
const { out } = logger;
|
|
9
|
-
if (!fs.existsSync(target)) throw new ArrangeError(ArrangeErrorCode.TARGET_NOT_FOUND, `Not found: ${target}`);
|
|
10
|
-
const filePaths = fs.statSync(target).isDirectory() ? walkTsxFiles(target, fs) : [target];
|
|
11
|
-
const modifiedFiles = [];
|
|
12
|
-
let totalFound = 0;
|
|
13
|
-
let totalChanged = 0;
|
|
14
|
-
for (const filePath of filePaths) {
|
|
15
|
-
const result = groupFile(filePath, options, fs, logger);
|
|
16
|
-
totalFound += result.totalFound;
|
|
17
|
-
totalChanged += result.changed;
|
|
18
|
-
if (result.changed > 0) modifiedFiles.push(result.filePath);
|
|
19
|
-
}
|
|
20
|
-
out(`\nTotal: ${filePaths.length} file(s), ${totalFound} site(s) (cn/tv/JSX className) to review.`);
|
|
21
|
-
if (options.write) out(`Applied: ${totalChanged} site(s) updated.`);
|
|
22
|
-
else out(`(Run "apply" to write changes, or "pnpm cli:arrange-apply" / "pnpm exec codefast arrange apply")`);
|
|
23
|
-
if (options.write ? totalChanged > 0 : totalFound > 0) out("Note: class order may change across concern groups — smoke-test the UI if you rely on cascade order.");
|
|
24
|
-
return {
|
|
25
|
-
filePaths,
|
|
26
|
-
modifiedFiles,
|
|
27
|
-
totalFound,
|
|
28
|
-
totalChanged
|
|
29
|
-
};
|
|
30
|
-
}
|
|
31
|
-
async function runArrangeOnAfterWriteHook(logger, hook, modifiedFiles) {
|
|
32
|
-
if (!hook || modifiedFiles.length === 0) return;
|
|
33
|
-
try {
|
|
34
|
-
await hook({ files: modifiedFiles });
|
|
35
|
-
} catch (caughtHookError) {
|
|
36
|
-
logger.err(`[arrange] onAfterWrite hook failed: ${messageFromCaughtUnknown(caughtHookError)}`);
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
/**
|
|
40
|
-
* CLI entry: run arrange preview/apply using config injected by the command layer.
|
|
41
|
-
* @returns Process exit code (`0`, or `1` when the target path is missing).
|
|
42
|
-
*/
|
|
43
|
-
async function runArrangeSync(opts) {
|
|
44
|
-
opts.rootDir;
|
|
45
|
-
const { fs, logger } = opts;
|
|
46
|
-
const resolvedTarget = path.resolve(opts.targetPath);
|
|
47
|
-
let result;
|
|
48
|
-
try {
|
|
49
|
-
result = runOnTarget(resolvedTarget, {
|
|
50
|
-
write: opts.write,
|
|
51
|
-
withClassName: !!opts.withClassName,
|
|
52
|
-
cnImport: opts.cnImport
|
|
53
|
-
}, fs, logger);
|
|
54
|
-
} catch (caughtError) {
|
|
55
|
-
if (caughtError instanceof ArrangeError && caughtError.code === ArrangeErrorCode.TARGET_NOT_FOUND) {
|
|
56
|
-
logger.err(caughtError.message);
|
|
57
|
-
return 1;
|
|
58
|
-
}
|
|
59
|
-
throw caughtError;
|
|
60
|
-
}
|
|
61
|
-
if (opts.write && result.modifiedFiles.length > 0) await runArrangeOnAfterWriteHook(logger, opts.config?.onAfterWrite, result.modifiedFiles);
|
|
62
|
-
return 0;
|
|
63
|
-
}
|
|
64
|
-
//#endregion
|
|
65
|
-
export { runArrangeSync, runOnTarget };
|
|
@@ -1,115 +0,0 @@
|
|
|
1
|
-
import { EMPTY_CN_TV_BINDINGS } from "../constants.mjs";
|
|
2
|
-
import ts from "typescript";
|
|
3
|
-
//#region src/lib/arrange/domain/ast/ast-helpers.ts
|
|
4
|
-
/** Known module specifiers that export `cn` / `tv`. */
|
|
5
|
-
const KNOWN_CN_TV_MODULES = new Set([
|
|
6
|
-
"@codefast/tailwind-variants",
|
|
7
|
-
"clsx",
|
|
8
|
-
"class-variance-authority",
|
|
9
|
-
"tailwind-variants",
|
|
10
|
-
"#lib/utils",
|
|
11
|
-
"~/lib/utils",
|
|
12
|
-
"@/lib/utils"
|
|
13
|
-
]);
|
|
14
|
-
/**
|
|
15
|
-
* True for typical shadcn-style re-exports: `./utils`, `@/lib/utils`, `…/utils/…`,
|
|
16
|
-
* or a dedicated `cn.ts` / `cn.tsx` module.
|
|
17
|
-
*/
|
|
18
|
-
function moduleLooksLikeCnTvReexport(moduleSpecifier) {
|
|
19
|
-
const norm = moduleSpecifier.replace(/\\/g, "/");
|
|
20
|
-
if (/(?:^|[./])utils(?:\/|$)/.test(norm)) return true;
|
|
21
|
-
if (/\/utils\//.test(norm) || /\/utils$/.test(norm)) return true;
|
|
22
|
-
if (/(?:^|\/)cn\.tsx?$/.test(norm)) return true;
|
|
23
|
-
return false;
|
|
24
|
-
}
|
|
25
|
-
/**
|
|
26
|
-
* Build a set of local binding names that are imported from a known cn/tv
|
|
27
|
-
* module in `sf`.
|
|
28
|
-
*/
|
|
29
|
-
function buildKnownCnTvBindings(sf) {
|
|
30
|
-
const bindings = /* @__PURE__ */ new Set();
|
|
31
|
-
for (const stmt of sf.statements) {
|
|
32
|
-
if (!ts.isImportDeclaration(stmt) || !stmt.importClause) continue;
|
|
33
|
-
if (stmt.importClause.isTypeOnly) continue;
|
|
34
|
-
const spec = stmt.moduleSpecifier;
|
|
35
|
-
if (!ts.isStringLiteral(spec)) continue;
|
|
36
|
-
const moduleSpecifier = spec.text;
|
|
37
|
-
if (!KNOWN_CN_TV_MODULES.has(moduleSpecifier) && !moduleLooksLikeCnTvReexport(moduleSpecifier)) continue;
|
|
38
|
-
const clause = stmt.importClause;
|
|
39
|
-
if (clause.name) bindings.add(clause.name.text);
|
|
40
|
-
if (!clause.namedBindings) continue;
|
|
41
|
-
if (ts.isNamedImports(clause.namedBindings)) {
|
|
42
|
-
for (const namedImport of clause.namedBindings.elements) bindings.add(namedImport.name.text);
|
|
43
|
-
continue;
|
|
44
|
-
}
|
|
45
|
-
bindings.add(clause.namedBindings.name.text);
|
|
46
|
-
}
|
|
47
|
-
return bindings;
|
|
48
|
-
}
|
|
49
|
-
/**
|
|
50
|
-
* Returns true when `expr` is an identifier whose name matches `name` AND
|
|
51
|
-
* that name is listed in `knownBindings` from a recognized import.
|
|
52
|
-
*/
|
|
53
|
-
function isCnOrTvIdentifier(expr, name, knownBindings = EMPTY_CN_TV_BINDINGS) {
|
|
54
|
-
if (knownBindings.size === 0) return false;
|
|
55
|
-
if (ts.isIdentifier(expr) && expr.text === name) return knownBindings.has(expr.text);
|
|
56
|
-
if (ts.isPropertyAccessExpression(expr) && expr.name.text === name) return ts.isIdentifier(expr.expression) && knownBindings.has(expr.expression.text);
|
|
57
|
-
return false;
|
|
58
|
-
}
|
|
59
|
-
function propertyAssignmentNameText(prop) {
|
|
60
|
-
if (ts.isIdentifier(prop.name)) return prop.name.text;
|
|
61
|
-
if (ts.isStringLiteral(prop.name)) return prop.name.text;
|
|
62
|
-
}
|
|
63
|
-
function lineOf(sf, tsNode) {
|
|
64
|
-
return sf.getLineAndCharacterOfPosition(tsNode.getStart(sf)).line + 1;
|
|
65
|
-
}
|
|
66
|
-
/**
|
|
67
|
-
* Returns only the leading whitespace (tabs / spaces) of the line containing
|
|
68
|
-
* `pos`.
|
|
69
|
-
*/
|
|
70
|
-
function indentOfLineContaining(source, pos) {
|
|
71
|
-
const searchPos = Math.max(0, Math.min(pos, source.length));
|
|
72
|
-
const prevLineBreak = Math.max(source.lastIndexOf("\n", searchPos - 1), source.lastIndexOf("\r", searchPos - 1));
|
|
73
|
-
const lineStart = prevLineBreak === -1 ? 0 : prevLineBreak + 1;
|
|
74
|
-
let lineEnd = source.length;
|
|
75
|
-
for (let i = lineStart; i < source.length; i++) {
|
|
76
|
-
const ch = source[i];
|
|
77
|
-
if (ch === "\n" || ch === "\r") {
|
|
78
|
-
lineEnd = i;
|
|
79
|
-
break;
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
const line = source.slice(lineStart, lineEnd);
|
|
83
|
-
return /^[\t ]*/.exec(line)?.[0] ?? "";
|
|
84
|
-
}
|
|
85
|
-
function applyEditsDescending(sourceText, edits) {
|
|
86
|
-
const sorted = [...edits].sort((editA, editB) => editB.start - editA.start);
|
|
87
|
-
let out = sourceText;
|
|
88
|
-
for (const edit of sorted) out = out.slice(0, edit.start) + edit.replacement + out.slice(edit.end);
|
|
89
|
-
return out;
|
|
90
|
-
}
|
|
91
|
-
/**
|
|
92
|
-
* Replace `cn(...)` nested in `tv({...})` with a plain string (one arg) or a string
|
|
93
|
-
* array (multiple args). Returns undefined when there are zero arguments.
|
|
94
|
-
*/
|
|
95
|
-
function unwrapCnInsideTvCallReplacement(call, sourceText, sf) {
|
|
96
|
-
const args = call.arguments;
|
|
97
|
-
if (args.length === 0) return;
|
|
98
|
-
const baseIndent = indentOfLineContaining(sourceText, call.getStart(sf));
|
|
99
|
-
const innerIndent = `${baseIndent} `;
|
|
100
|
-
if (args.length === 1) {
|
|
101
|
-
const firstArg = args[0];
|
|
102
|
-
return sourceText.slice(firstArg.getStart(sf), firstArg.getEnd());
|
|
103
|
-
}
|
|
104
|
-
const lines = ["["];
|
|
105
|
-
for (let i = 0; i < args.length; i++) {
|
|
106
|
-
const arg = args[i];
|
|
107
|
-
const piece = sourceText.slice(arg.getStart(sf), arg.getEnd());
|
|
108
|
-
const comma = i < args.length - 1 || args.length > 1 ? "," : "";
|
|
109
|
-
lines.push(`${innerIndent}${piece}${comma}`);
|
|
110
|
-
}
|
|
111
|
-
lines.push(`${baseIndent}]`);
|
|
112
|
-
return lines.join("\n");
|
|
113
|
-
}
|
|
114
|
-
//#endregion
|
|
115
|
-
export { KNOWN_CN_TV_MODULES, applyEditsDescending, buildKnownCnTvBindings, indentOfLineContaining, isCnOrTvIdentifier, lineOf, moduleLooksLikeCnTvReexport, propertyAssignmentNameText, unwrapCnInsideTvCallReplacement };
|