@codefast/cli 0.3.14 → 0.3.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -3
- package/dist/bootstrap/cli-application.module.mjs +18 -0
- package/dist/bootstrap/composition-root.mjs +14 -0
- package/dist/bootstrap/register-cli-command-trees.mjs +7 -0
- package/dist/{lib → domains}/arrange/application/use-cases/analyze-directory.use-case.mjs +12 -12
- package/dist/{lib → domains}/arrange/application/use-cases/prepare-arrange-workspace.use-case.mjs +19 -18
- package/dist/{lib → domains}/arrange/application/use-cases/run-arrange-sync.use-case.mjs +18 -18
- package/dist/{lib → domains}/arrange/application/use-cases/suggest-cn-groups.use-case.mjs +5 -5
- package/dist/domains/arrange/arrange.module.mjs +38 -0
- package/dist/domains/arrange/composition/tokens.mjs +17 -0
- package/dist/{lib/arrange/domain/arrange-analyze.service.mjs → domains/arrange/domain/arrange-analyze.domain-service.mjs} +1 -1
- package/dist/{lib/arrange/domain/arrange-grouping.service.mjs → domains/arrange/domain/arrange-grouping.domain-service.mjs} +2 -2
- package/dist/{lib → domains}/arrange/domain/ast/ast-helpers.helper.mjs +2 -2
- package/dist/{lib → domains}/arrange/domain/ast/ast-node.model.mjs +1 -1
- package/dist/{lib → domains}/arrange/domain/ast/collectors-cn.collector.mjs +1 -1
- package/dist/{lib → domains}/arrange/domain/ast/collectors-jsx.collector.mjs +1 -1
- package/dist/{lib → domains}/arrange/domain/ast/collectors-tv.collector.mjs +1 -1
- package/dist/{lib → domains}/arrange/domain/ast/targets.model.mjs +2 -2
- package/dist/{lib → domains}/arrange/domain/constants.domain.mjs +1 -1
- package/dist/{lib → domains}/arrange/domain/grouping.domain.mjs +1 -1
- package/dist/{lib → domains}/arrange/domain/imports.domain.mjs +1 -1
- package/dist/{lib → domains}/arrange/domain/source-text-formatters.formatter.mjs +2 -2
- package/dist/{lib/arrange/domain/tailwind-grouping.service.mjs → domains/arrange/domain/tailwind-grouping.domain-service.mjs} +5 -5
- package/dist/{lib → domains}/arrange/domain/tailwind-token-classifier.domain-service.mjs +1 -1
- package/dist/{lib → domains}/arrange/domain/tailwind-token.value-object.mjs +1 -1
- package/dist/{lib/arrange/application/services/arrange-file-processor.service.mjs → domains/arrange/infrastructure/adapters/arrange-file-processor.adapter.mjs} +8 -8
- package/dist/domains/arrange/infrastructure/adapters/arrange-target-path-resolver.adapter.mjs +247 -0
- package/dist/{lib/arrange/application/services/arrange-target-scanner.service.mjs → domains/arrange/infrastructure/adapters/arrange-target-scanner.adapter.mjs} +8 -8
- package/dist/{lib/arrange/adapters/secondary → domains/arrange/infrastructure/adapters}/domain-source-parser.adapter.mjs +10 -8
- package/dist/{lib/arrange/adapters/secondary → domains/arrange/infrastructure/adapters}/file-walker.adapter.mjs +8 -9
- package/dist/domains/arrange/infrastructure/typescript-ast-translator.mjs +580 -0
- package/dist/{lib/arrange/adapters/primary → domains/arrange/presentation}/cli/arrange.command.mjs +195 -54
- package/dist/{lib/arrange/presentation → domains/arrange/presentation/presenters}/arrange-analyze.presenter.mjs +26 -33
- package/dist/{lib/arrange/presentation → domains/arrange/presentation/presenters}/arrange-cli.schema.mjs +1 -1
- package/dist/{lib/tag/presentation/present-tag-sync-result.presenter.mjs → domains/arrange/presentation/presenters/arrange-sync.presenter.mjs} +12 -9
- package/dist/{lib/arrange/presentation → domains/arrange/presentation/presenters}/group-file-preview.presenter.mjs +46 -46
- package/dist/domains/config/composition/tokens.mjs +7 -0
- package/dist/{lib/config/infrastructure/config-schema.adapter.mjs → domains/config/domain/codefast-config.schema.mjs} +6 -6
- package/dist/{lib/config/infrastructure → domains/config/infrastructure/adapters}/config-loader.adapter.mjs +76 -77
- package/dist/{lib/config/infrastructure → domains/config/infrastructure/adapters}/config-warning-reporter.adapter.mjs +6 -6
- package/dist/domains/config/infrastructure/adapters/zod-codefast-config-schema.adapter.mjs +236 -0
- package/dist/domains/mirror/application/mirror-sync-cli-result.mjs +15 -0
- package/dist/{lib → domains}/mirror/application/use-cases/prepare-mirror-sync.use-case.mjs +14 -15
- package/dist/{lib → domains}/mirror/application/use-cases/run-mirror-sync.use-case.mjs +69 -54
- package/dist/{lib/mirror/contracts → domains/mirror/composition}/tokens.mjs +4 -3
- package/dist/{lib → domains}/mirror/domain/constants.domain.mjs +1 -1
- package/dist/{lib → domains}/mirror/domain/errors.domain.mjs +1 -1
- package/dist/{lib/mirror/application/services/generate-mirror-exports.service.mjs → domains/mirror/domain/generate-mirror-exports.domain-service.mjs} +2 -2
- package/dist/{lib → domains}/mirror/domain/package-display-name.policy.mjs +1 -1
- package/dist/{lib → domains}/mirror/domain/path-normalizer.value-object.mjs +1 -1
- package/dist/{lib/mirror/adapters/secondary → domains/mirror/infrastructure/adapters}/file-system-service.adapter.mjs +8 -8
- package/dist/domains/mirror/infrastructure/adapters/mirror-package-path-resolver.adapter.mjs +252 -0
- package/dist/{lib/mirror/adapters/secondary → domains/mirror/infrastructure/adapters}/mirror-sync-reporter.adapter.mjs +94 -15
- package/dist/{lib/mirror/adapters/secondary → domains/mirror/infrastructure/adapters}/package-repository.adapter.mjs +4 -4
- package/dist/{lib/mirror/adapters/secondary → domains/mirror/infrastructure/adapters}/sync-workspace-package.adapter.mjs +23 -46
- package/dist/{lib/mirror/infrastructure → domains/mirror/infrastructure/guards}/dirent-list.guard.mjs +1 -1
- package/dist/{lib → domains}/mirror/infrastructure/package-json-exports.repository.mjs +27 -27
- package/dist/domains/mirror/mirror.module.mjs +26 -0
- package/dist/{lib/mirror/adapters/primary → domains/mirror/presentation}/cli/mirror.command.mjs +83 -27
- package/dist/{lib/mirror/presentation → domains/mirror/presentation/presenters}/mirror-cli.schema.mjs +1 -4
- package/dist/domains/mirror/presentation/presenters/present-mirror-sync-progress.presenter.mjs +265 -0
- package/dist/domains/tag/application/ports/outbound/tag-eligible-workspace-paths.port.mjs +1 -0
- package/dist/domains/tag/application/ports/outbound/tag-since-writer.port.mjs +1 -0
- package/dist/domains/tag/application/ports/outbound/tag-target-path-resolver.port.mjs +1 -0
- package/dist/domains/tag/application/ports/outbound/tag-target-runner.port.mjs +1 -0
- package/dist/domains/tag/application/ports/outbound/tag-version-resolver.port.mjs +1 -0
- package/dist/domains/tag/application/ports/presenting/present-tag-sync-progress.presenter.mjs +1 -0
- package/dist/domains/tag/application/ports/presenting/present-tag-sync-result.presenter.mjs +1 -0
- package/dist/domains/tag/application/requests/tag-sync-execution-input.mjs +1 -0
- package/dist/domains/tag/application/requests/tag-sync.request.mjs +1 -0
- package/dist/{lib → domains}/tag/application/tag-sync-cli-result.mjs +3 -3
- package/dist/{lib → domains}/tag/application/use-cases/prepare-tag-sync.use-case.mjs +20 -24
- package/dist/{lib → domains}/tag/application/use-cases/run-tag-sync.use-case.mjs +123 -129
- package/dist/domains/tag/composition/tokens.mjs +13 -0
- package/dist/domains/tag/contracts/models.mjs +1 -0
- package/dist/domains/tag/domain/types.domain.mjs +1 -0
- package/dist/{lib/tag/adapters/secondary → domains/tag/infrastructure/adapters}/tag-since-writer.adapter.mjs +105 -105
- package/dist/{lib/tag/adapters/secondary/typescript-tree-walk.adapter.mjs → domains/tag/infrastructure/adapters/tag-target-path-resolver.adapter.mjs} +11 -9
- package/dist/domains/tag/infrastructure/adapters/tag-target-resolver.adapter.mjs +302 -0
- package/dist/domains/tag/infrastructure/adapters/tag-target-runner.adapter.mjs +259 -0
- package/dist/{lib/tag/adapters/secondary → domains/tag/infrastructure/adapters}/tag-version-resolver.adapter.mjs +6 -6
- package/dist/{lib/tag/adapters/primary → domains/tag/presentation}/cli/tag.command.mjs +67 -27
- package/dist/{lib/tag/presentation/tag-sync-progress-listener.presenter.mjs → domains/tag/presentation/presenters/present-tag-sync-progress.presenter.mjs} +14 -9
- package/dist/domains/tag/presentation/presenters/present-tag-sync-result.presenter.mjs +290 -0
- package/dist/{lib/tag/presentation → domains/tag/presentation/presenters}/tag-cli.schema.mjs +1 -1
- package/dist/domains/tag/tag.module.mjs +28 -0
- package/dist/program.mjs +3 -2
- package/dist/shell/application/cli-runtime.tokens.mjs +18 -0
- package/dist/shell/application/coordination/cli-executor.coordination.mjs +1 -0
- package/dist/shell/application/coordination/cli-schema-parsing.coordination.mjs +1 -0
- package/dist/shell/application/global-cli-options.model.mjs +5 -0
- package/dist/shell/application/ports/inbound/load-codefast-config.port.mjs +1 -0
- package/dist/shell/application/ports/outbound/cli-fs.port.mjs +1 -0
- package/dist/shell/application/ports/outbound/cli-logger.port.mjs +1 -0
- package/dist/shell/application/ports/outbound/cli-path.port.mjs +1 -0
- package/dist/shell/application/ports/outbound/cli-runtime.port.mjs +1 -0
- package/dist/shell/application/ports/outbound/cli-telemetry.port.mjs +1 -0
- package/dist/shell/application/ports/outbound/cli-verbose-diagnostics.port.mjs +1 -0
- package/dist/shell/application/ports/outbound/format-app-error.port.mjs +1 -0
- package/dist/shell/application/ports/outbound/global-cli-options-parse.port.mjs +1 -0
- package/dist/shell/application/ports/outbound/repo-root-resolver.port.mjs +1 -0
- package/dist/shell/application/ports/outbound/typescript-source-file-walker.port.mjs +1 -0
- package/dist/shell/application/ports/outbound/workspace-package-layout.port.mjs +1 -0
- package/dist/shell/application/ports/primary/command.port.mjs +1 -0
- package/dist/shell/application/services/cli-executor.service.mjs +267 -0
- package/dist/shell/application/services/schema-validator.service.mjs +236 -0
- package/dist/{lib/core/application → shell/application/use-cases}/load-codefast-config.use-case.mjs +11 -13
- package/dist/shell/composition/tokens.mjs +5 -0
- package/dist/shell/contracts/cli-command-slots.mjs +11 -0
- package/dist/{lib/core → shell}/domain/caught-unknown-message.value-object.mjs +1 -1
- package/dist/{lib/core → shell}/domain/cli-exit-codes.domain.mjs +1 -1
- package/dist/shell/domain/cli-positional-arg.value-object.mjs +6 -0
- package/dist/{lib/core → shell}/domain/errors.domain.mjs +1 -1
- package/dist/{lib/core → shell}/domain/result.model.mjs +1 -1
- package/dist/{lib/shared/source-code/domain/text-edit.model.mjs → shell/domain/source-text-edit.support.mjs} +2 -2
- package/dist/shell/infrastructure/adapters/cli-verbose-diagnostics.adapter.mjs +228 -0
- package/dist/{lib/tag/adapters/secondary/tag-target-resolver.adapter.mjs → shell/infrastructure/adapters/format-app-error.adapter.mjs} +16 -13
- package/dist/shell/infrastructure/adapters/global-cli-options-parser.adapter.mjs +233 -0
- package/dist/{lib/mirror/adapters/secondary/workspace-service.adapter.mjs → shell/infrastructure/adapters/repo-root-resolver.adapter.mjs} +20 -13
- package/dist/shell/infrastructure/adapters/typescript-source-file-walker.adapter.mjs +259 -0
- package/dist/shell/infrastructure/commander/commander-cli-host.adapter.mjs +69 -0
- package/dist/{lib/infrastructure/node-io.adapter.mjs → shell/infrastructure/node/node-cli-fs.adapter.mjs} +11 -47
- package/dist/{lib/arrange/adapters/secondary/workspace-resolver.adapter.mjs → shell/infrastructure/node/node-cli-logger.adapter.mjs} +11 -13
- package/dist/{lib/core/infrastructure/path.adapter.mjs → shell/infrastructure/node/node-cli-path.adapter.mjs} +1 -1
- package/dist/{lib/core/infrastructure/repo-root-resolver.adapter.mjs → shell/infrastructure/node/node-cli-runtime.adapter.mjs} +14 -13
- package/dist/shell/infrastructure/telemetry/cli-telemetry.adapter.mjs +280 -0
- package/dist/shell/infrastructure/workspace/node-pnpm-workspace-package-layout.adapter.mjs +385 -0
- package/dist/shell/shell.module.mjs +43 -0
- package/dist/shell/wiring/optional-cli-port-telemetry-activation.mjs +13 -0
- package/package.json +9 -7
- package/dist/lib/arrange/adapters/primary/cli/arrange.presentation.module.mjs +0 -14
- package/dist/lib/arrange/adapters/primary/cli/presentation.tokens.mjs +0 -5
- package/dist/lib/arrange/application/services/arrange-target-path-resolver.service.mjs +0 -21
- package/dist/lib/arrange/arrange.module.mjs +0 -31
- package/dist/lib/arrange/contracts/tokens.mjs +0 -15
- package/dist/lib/arrange/infrastructure/typescript-ast-translator.adapter.mjs +0 -355
- package/dist/lib/arrange/presentation/arrange-sync.presenter.mjs +0 -33
- package/dist/lib/bootstrap/composition-root.mjs +0 -33
- package/dist/lib/config/application/services/load-config.service.mjs +0 -17
- package/dist/lib/config/contracts/tokens.mjs +0 -6
- package/dist/lib/core/application/services/global-cli-options-parser.service.mjs +0 -9
- package/dist/lib/core/application/services/schema-validator.service.mjs +0 -17
- package/dist/lib/core/contracts/tokens.mjs +0 -10
- package/dist/lib/core/core.module.mjs +0 -9
- package/dist/lib/core/infrastructure/infrastructure.module.mjs +0 -30
- package/dist/lib/core/infrastructure/port-telemetry.decorator.mjs +0 -62
- package/dist/lib/core/infrastructure/verbose-diagnostics.policy.mjs +0 -9
- package/dist/lib/core/presentation/cli-executor.presenter.mjs +0 -42
- package/dist/lib/core/presentation/cli-schema.parser.mjs +0 -7
- package/dist/lib/core/presentation/format-app-error.presenter.mjs +0 -17
- package/dist/lib/core/presentation/presentation.module.mjs +0 -5
- package/dist/lib/infrastructure/workspace/repo-root-resolver.service.mjs +0 -21
- package/dist/lib/kernel/contracts/tokens.mjs +0 -5
- package/dist/lib/mirror/application/mirror-sync-json.format.mjs +0 -12
- package/dist/lib/mirror/application/services/mirror-package-arg-resolver.service.mjs +0 -20
- package/dist/lib/mirror/infrastructure/mirror-console-reporter.presenter.mjs +0 -99
- package/dist/lib/mirror/infrastructure/package-filter-resolver.service.mjs +0 -25
- package/dist/lib/mirror/infrastructure/workspace-packages.service.mjs +0 -158
- package/dist/lib/mirror/mirror.module.mjs +0 -25
- package/dist/lib/shared/source-code/infrastructure/typescript-source-file-walker.service.mjs +0 -33
- package/dist/lib/tag/adapters/primary/cli/presentation.tokens.mjs +0 -6
- package/dist/lib/tag/adapters/primary/cli/tag.presentation.module.mjs +0 -13
- package/dist/lib/tag/application/services/tag-cli-target-path-resolver.service.mjs +0 -9
- package/dist/lib/tag/application/services/tag-target-runner.service.mjs +0 -21
- package/dist/lib/tag/application/tag-sync-json.format.mjs +0 -14
- package/dist/lib/tag/contracts/tokens.mjs +0 -10
- package/dist/lib/tag/infrastructure/tag-target-candidates.adapter.mjs +0 -170
- package/dist/lib/tag/presentation/colors.presenter.mjs +0 -12
- package/dist/lib/tag/presentation/tag-sync.presenter.mjs +0 -61
- package/dist/lib/tag/tag.module.mjs +0 -23
- /package/dist/{lib/arrange/application/ports/domain-source-parser.port.mjs → domains/arrange/application/ports/inbound/analyze-directory.port.mjs} +0 -0
- /package/dist/{lib/arrange/application/ports/file-walker.port.mjs → domains/arrange/application/ports/inbound/prepare-arrange-workspace.port.mjs} +0 -0
- /package/dist/{lib/arrange/application/ports/group-file-preview.port.mjs → domains/arrange/application/ports/inbound/run-arrange-sync.port.mjs} +0 -0
- /package/dist/{lib/arrange/application/ports/workspace-resolver.port.mjs → domains/arrange/application/ports/inbound/suggest-cn-groups.port.mjs} +0 -0
- /package/dist/{lib/arrange/application/requests/analyze-directory.request.mjs → domains/arrange/application/ports/outbound/arrange-file-processor.port.mjs} +0 -0
- /package/dist/{lib/arrange/application/requests/arrange-sync.request.mjs → domains/arrange/application/ports/outbound/arrange-target-path-resolver.port.mjs} +0 -0
- /package/dist/{lib/arrange/application/requests/suggest-groups.request.mjs → domains/arrange/application/ports/outbound/arrange-target-scanner.port.mjs} +0 -0
- /package/dist/{lib/arrange/contracts/analyze-report-presenter.contract.mjs → domains/arrange/application/ports/outbound/domain-source-parser.port.mjs} +0 -0
- /package/dist/{lib/arrange/contracts/models.mjs → domains/arrange/application/ports/outbound/file-walker.port.mjs} +0 -0
- /package/dist/{lib/arrange/contracts/services.contract.mjs → domains/arrange/application/ports/presenting/present-analyze-report.presenter.mjs} +0 -0
- /package/dist/{lib/arrange/domain/types.domain.mjs → domains/arrange/application/ports/presenting/present-arrange-sync-result.presenter.mjs} +0 -0
- /package/dist/{lib/config/application/ports/config-loader.port.mjs → domains/arrange/application/ports/presenting/present-group-file-preview.presenter.mjs} +0 -0
- /package/dist/{lib/config/application/ports/config-warning-reporter.port.mjs → domains/arrange/application/requests/analyze-directory.request.mjs} +0 -0
- /package/dist/{lib/config/domain/schema.domain.mjs → domains/arrange/application/requests/arrange-sync.request.mjs} +0 -0
- /package/dist/{lib/core/application/ports/cli-io.port.mjs → domains/arrange/application/requests/suggest-groups.request.mjs} +0 -0
- /package/dist/{lib/mirror → domains/arrange}/contracts/models.mjs +0 -0
- /package/dist/{lib/mirror → domains/arrange}/domain/types.domain.mjs +0 -0
- /package/dist/{lib/core/application/ports/path.port.mjs → domains/config/application/ports/outbound/codefast-config-schema.port.mjs} +0 -0
- /package/dist/{lib/core/application/ports/repo-root-resolver.port.mjs → domains/config/application/ports/outbound/config-loader.port.mjs} +0 -0
- /package/dist/{lib/core/application/ports/runtime.port.mjs → domains/config/application/ports/outbound/config-warning-reporter.port.mjs} +0 -0
- /package/dist/{lib/kernel/contracts/cli-command.contract.mjs → domains/config/domain/schema.domain.mjs} +0 -0
- /package/dist/{lib/mirror/application/ports/file-system-service.port.mjs → domains/mirror/application/ports/inbound/prepare-mirror-sync.port.mjs} +0 -0
- /package/dist/{lib/mirror/application/ports/mirror-sync-reporter.port.mjs → domains/mirror/application/ports/inbound/run-mirror-sync.port.mjs} +0 -0
- /package/dist/{lib/mirror/application/ports/package-repository.port.mjs → domains/mirror/application/ports/outbound/file-system-service.port.mjs} +0 -0
- /package/dist/{lib/mirror/application/ports/sync-workspace-package.port.mjs → domains/mirror/application/ports/outbound/mirror-package-path.port.mjs} +0 -0
- /package/dist/{lib/mirror/application/ports/workspace-service.port.mjs → domains/mirror/application/ports/outbound/mirror-sync-reporter.port.mjs} +0 -0
- /package/dist/{lib/mirror/application/requests/mirror-sync.request.mjs → domains/mirror/application/ports/outbound/package-repository.port.mjs} +0 -0
- /package/dist/{lib/tag/application/ports/tag-since-writer.port.mjs → domains/mirror/application/ports/outbound/sync-workspace-package.port.mjs} +0 -0
- /package/dist/{lib/tag/application/ports/tag-version-resolver.port.mjs → domains/mirror/application/ports/presenting/present-mirror-sync-progress.presenter.mjs} +0 -0
- /package/dist/{lib/tag/application/ports/target-resolver.port.mjs → domains/mirror/application/requests/mirror-sync-execution-input.mjs} +0 -0
- /package/dist/{lib/tag/application/ports/typescript-tree-walk.port.mjs → domains/mirror/application/requests/mirror-sync.request.mjs} +0 -0
- /package/dist/{lib/tag → domains/mirror}/contracts/models.mjs +0 -0
- /package/dist/{lib/tag → domains/mirror}/domain/types.domain.mjs +0 -0
- /package/dist/{lib/tag/application/requests/tag-sync.request.mjs → domains/tag/application/ports/inbound/prepare-tag-sync.port.mjs} +0 -0
- /package/dist/{lib/tag/contracts/tag-sync-result-presenter.contract.mjs → domains/tag/application/ports/inbound/run-tag-sync.port.mjs} +0 -0
|
@@ -1,11 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { AppError } from "
|
|
3
|
-
import { err, ok } from "
|
|
4
|
-
import { messageFromCaughtUnknown } from "
|
|
5
|
-
import {
|
|
6
|
-
import { runTagOnTarget } from "../services/tag-target-runner.service.mjs";
|
|
1
|
+
import { CliFilesystemPortToken, CliPathPortToken } from "../../../../shell/application/cli-runtime.tokens.mjs";
|
|
2
|
+
import { AppError } from "../../../../shell/domain/errors.domain.mjs";
|
|
3
|
+
import { err, ok } from "../../../../shell/domain/result.model.mjs";
|
|
4
|
+
import { messageFromCaughtUnknown } from "../../../../shell/domain/caught-unknown-message.value-object.mjs";
|
|
5
|
+
import { TagEligibleWorkspacePathsPortToken, TagTargetRunnerPortToken } from "../../composition/tokens.mjs";
|
|
7
6
|
import { inject, injectable } from "@codefast/di";
|
|
8
|
-
//#region src/
|
|
7
|
+
//#region src/domains/tag/application/use-cases/run-tag-sync.use-case.ts
|
|
9
8
|
function toPrimitive(input, hint) {
|
|
10
9
|
if (typeof input !== "object" || input === null) return input;
|
|
11
10
|
var prim = input[Symbol.toPrimitive];
|
|
@@ -216,155 +215,51 @@ function _apply_decs_2311(targetClass, classDecs, memberDecs, classDecsHaveThis,
|
|
|
216
215
|
};
|
|
217
216
|
}
|
|
218
217
|
let _dec, _initClass;
|
|
219
|
-
async function runTagOnAfterWriteHook(hook, modifiedFiles) {
|
|
220
|
-
if (!hook || modifiedFiles.length === 0) return null;
|
|
221
|
-
try {
|
|
222
|
-
await hook({ files: modifiedFiles });
|
|
223
|
-
return null;
|
|
224
|
-
} catch (caughtHookError) {
|
|
225
|
-
return `[tag] onAfterWrite hook failed: ${messageFromCaughtUnknown(caughtHookError)}`;
|
|
226
|
-
}
|
|
227
|
-
}
|
|
228
|
-
function summarizeVersions(targetResults) {
|
|
229
|
-
const distinctVersions = extractDistinctVersions(targetResults);
|
|
230
|
-
if (distinctVersions.size === 0) return "none";
|
|
231
|
-
if (distinctVersions.size > 1) return "mixed";
|
|
232
|
-
for (const version of distinctVersions) return version;
|
|
233
|
-
return "none";
|
|
234
|
-
}
|
|
235
|
-
function extractDistinctVersions(targetResults) {
|
|
236
|
-
return new Set(targetResults.map((targetResult) => targetResult.result?.version).filter((version) => typeof version === "string" && version.length > 0));
|
|
237
|
-
}
|
|
238
|
-
function chooseWorkspacePackageTargetPath(candidate, pathService, fs) {
|
|
239
|
-
if (candidate.source !== "workspace-package") return {
|
|
240
|
-
targetPath: candidate.candidatePath,
|
|
241
|
-
source: candidate.source
|
|
242
|
-
};
|
|
243
|
-
const preferredSourceDir = pathService.join(candidate.candidatePath, "src");
|
|
244
|
-
if (fs.existsSync(preferredSourceDir) && fs.statSync(preferredSourceDir).isDirectory()) return {
|
|
245
|
-
targetPath: preferredSourceDir,
|
|
246
|
-
source: "workspace-package-selected-src"
|
|
247
|
-
};
|
|
248
|
-
return {
|
|
249
|
-
targetPath: candidate.candidatePath,
|
|
250
|
-
source: "workspace-package-selected-root"
|
|
251
|
-
};
|
|
252
|
-
}
|
|
253
|
-
function resolveTargetSelection(candidate, rootDir, pathService, fs) {
|
|
254
|
-
const selectedTarget = chooseWorkspacePackageTargetPath(candidate, pathService, fs);
|
|
255
|
-
const rootRelativeTargetPath = pathService.relative(rootDir, selectedTarget.targetPath).split(pathService.separator).join("/");
|
|
256
|
-
return {
|
|
257
|
-
targetPath: selectedTarget.targetPath,
|
|
258
|
-
rootRelativeTargetPath: rootRelativeTargetPath || ".",
|
|
259
|
-
source: selectedTarget.source,
|
|
260
|
-
packageDir: candidate.packageDir,
|
|
261
|
-
packageName: candidate.packageName
|
|
262
|
-
};
|
|
263
|
-
}
|
|
264
|
-
function filterSkippedCandidates(targetCandidates, skipPackages) {
|
|
265
|
-
if (!skipPackages || skipPackages.length === 0) return {
|
|
266
|
-
includedCandidates: targetCandidates,
|
|
267
|
-
skippedPackages: []
|
|
268
|
-
};
|
|
269
|
-
const skipPackageSet = new Set(skipPackages);
|
|
270
|
-
const includedCandidates = [];
|
|
271
|
-
const skippedPackages = [];
|
|
272
|
-
for (const candidate of targetCandidates) {
|
|
273
|
-
const packageName = candidate.packageName;
|
|
274
|
-
if (packageName && skipPackageSet.has(packageName)) {
|
|
275
|
-
skippedPackages.push(packageName);
|
|
276
|
-
continue;
|
|
277
|
-
}
|
|
278
|
-
includedCandidates.push(candidate);
|
|
279
|
-
}
|
|
280
|
-
return {
|
|
281
|
-
includedCandidates,
|
|
282
|
-
skippedPackages
|
|
283
|
-
};
|
|
284
|
-
}
|
|
285
|
-
async function runOnResolvedTarget(resolvedTarget, write, fs, pathService, versionResolver, sinceWriter, typeScriptTreeWalk, listener) {
|
|
286
|
-
listener?.onTargetStarted(resolvedTarget);
|
|
287
|
-
const absoluteTargetPath = pathService.resolve(resolvedTarget.targetPath);
|
|
288
|
-
if (!fs.existsSync(absoluteTargetPath)) {
|
|
289
|
-
const missingTargetResult = {
|
|
290
|
-
target: resolvedTarget,
|
|
291
|
-
targetExists: false,
|
|
292
|
-
runError: `Not found: ${absoluteTargetPath}`,
|
|
293
|
-
result: null
|
|
294
|
-
};
|
|
295
|
-
listener?.onTargetCompleted(resolvedTarget, missingTargetResult);
|
|
296
|
-
return missingTargetResult;
|
|
297
|
-
}
|
|
298
|
-
try {
|
|
299
|
-
const targetRunResult = {
|
|
300
|
-
target: resolvedTarget,
|
|
301
|
-
targetExists: true,
|
|
302
|
-
runError: null,
|
|
303
|
-
result: runTagOnTarget(absoluteTargetPath, { write }, fs, pathService, versionResolver, sinceWriter, typeScriptTreeWalk)
|
|
304
|
-
};
|
|
305
|
-
listener?.onTargetCompleted(resolvedTarget, targetRunResult);
|
|
306
|
-
return targetRunResult;
|
|
307
|
-
} catch (caughtRunError) {
|
|
308
|
-
const failedTargetRunResult = {
|
|
309
|
-
target: resolvedTarget,
|
|
310
|
-
targetExists: true,
|
|
311
|
-
runError: messageFromCaughtUnknown(caughtRunError),
|
|
312
|
-
result: null
|
|
313
|
-
};
|
|
314
|
-
listener?.onTargetCompleted(resolvedTarget, failedTargetRunResult);
|
|
315
|
-
return failedTargetRunResult;
|
|
316
|
-
}
|
|
317
|
-
}
|
|
318
218
|
_dec = injectable([
|
|
319
|
-
inject(
|
|
320
|
-
inject(
|
|
321
|
-
inject(
|
|
322
|
-
inject(
|
|
323
|
-
inject(TagVersionResolverPortToken),
|
|
324
|
-
inject(TagSinceWriterPortToken)
|
|
219
|
+
inject(CliFilesystemPortToken),
|
|
220
|
+
inject(CliPathPortToken),
|
|
221
|
+
inject(TagEligibleWorkspacePathsPortToken),
|
|
222
|
+
inject(TagTargetRunnerPortToken)
|
|
325
223
|
]);
|
|
326
|
-
let
|
|
224
|
+
let _RunTagSyncUseCase;
|
|
327
225
|
(class {
|
|
328
226
|
fs;
|
|
329
227
|
path;
|
|
330
228
|
targetResolver;
|
|
331
|
-
|
|
332
|
-
versionResolver;
|
|
333
|
-
sinceWriter;
|
|
229
|
+
tagTargetRunner;
|
|
334
230
|
static {
|
|
335
|
-
({c: [
|
|
231
|
+
({c: [_RunTagSyncUseCase, _initClass]} = _apply_decs_2311(this, [_dec], []));
|
|
336
232
|
}
|
|
337
|
-
constructor(fs, path, targetResolver,
|
|
233
|
+
constructor(fs, path, targetResolver, tagTargetRunner) {
|
|
338
234
|
this.fs = fs;
|
|
339
235
|
this.path = path;
|
|
340
236
|
this.targetResolver = targetResolver;
|
|
341
|
-
this.
|
|
342
|
-
this.versionResolver = versionResolver;
|
|
343
|
-
this.sinceWriter = sinceWriter;
|
|
237
|
+
this.tagTargetRunner = tagTargetRunner;
|
|
344
238
|
}
|
|
345
239
|
async execute(input) {
|
|
346
240
|
try {
|
|
347
241
|
const tagConfig = input.config;
|
|
348
|
-
const
|
|
349
|
-
const
|
|
350
|
-
const
|
|
242
|
+
const targetCandidates = await this.targetResolver.resolveTagTargetCandidates(input.rootDir, input.targetPath);
|
|
243
|
+
const { includedCandidates, skippedPackages } = this.filterSkippedCandidates(targetCandidates, input.skipPackages);
|
|
244
|
+
const selectedTargets = includedCandidates.map((candidate) => this.resolveTargetSelection(candidate, input.rootDir));
|
|
245
|
+
const targetExecutionResults = await Promise.all(selectedTargets.map((resolvedTarget) => this.runOnResolvedTarget(resolvedTarget, input.write, input.listener)));
|
|
351
246
|
const allFileResults = targetExecutionResults.flatMap((targetResult) => targetResult.result?.fileResults ?? []);
|
|
352
247
|
const filesScanned = targetExecutionResults.reduce((sum, targetResult) => sum + (targetResult.result?.filesScanned ?? 0), 0);
|
|
353
248
|
const filesChanged = targetExecutionResults.reduce((sum, targetResult) => sum + (targetResult.result?.filesChanged ?? 0), 0);
|
|
354
249
|
const taggedDeclarations = targetExecutionResults.reduce((sum, targetResult) => sum + (targetResult.result?.taggedDeclarations ?? 0), 0);
|
|
355
250
|
const modifiedFiles = allFileResults.filter((entry) => entry.changed).map((entry) => entry.filePath);
|
|
356
|
-
const hookError = input.write && modifiedFiles.length > 0 ? await runTagOnAfterWriteHook(tagConfig?.onAfterWrite, modifiedFiles) : null;
|
|
357
|
-
const
|
|
251
|
+
const hookError = input.write && modifiedFiles.length > 0 ? await this.runTagOnAfterWriteHook(tagConfig?.onAfterWrite, modifiedFiles) : null;
|
|
252
|
+
const versionsSet = this.extractDistinctVersions(targetExecutionResults);
|
|
253
|
+
const distinctVersions = [...versionsSet].sort((left, right) => left.localeCompare(right));
|
|
358
254
|
return ok({
|
|
359
255
|
mode: input.write ? "applied" : "dry-run",
|
|
360
256
|
selectedTargets,
|
|
361
|
-
resolvedTargets: selectedTargets,
|
|
362
257
|
skippedPackages,
|
|
363
258
|
targetResults: targetExecutionResults,
|
|
364
259
|
filesScanned,
|
|
365
260
|
filesChanged,
|
|
366
261
|
taggedDeclarations,
|
|
367
|
-
versionSummary: summarizeVersions(
|
|
262
|
+
versionSummary: this.summarizeVersions(versionsSet),
|
|
368
263
|
distinctVersions,
|
|
369
264
|
modifiedFiles,
|
|
370
265
|
hookError
|
|
@@ -373,9 +268,108 @@ let _RunTagSyncUseCaseImpl;
|
|
|
373
268
|
return err(new AppError("INFRA_FAILURE", messageFromCaughtUnknown(caughtError), caughtError));
|
|
374
269
|
}
|
|
375
270
|
}
|
|
271
|
+
async runTagOnAfterWriteHook(hook, modifiedFiles) {
|
|
272
|
+
if (!hook || modifiedFiles.length === 0) return null;
|
|
273
|
+
try {
|
|
274
|
+
await hook({ files: modifiedFiles });
|
|
275
|
+
return null;
|
|
276
|
+
} catch (caughtHookError) {
|
|
277
|
+
return `[tag] onAfterWrite hook failed: ${messageFromCaughtUnknown(caughtHookError)}`;
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
summarizeVersions(distinctVersions) {
|
|
281
|
+
if (distinctVersions.size === 0) return "none";
|
|
282
|
+
if (distinctVersions.size > 1) return "mixed";
|
|
283
|
+
return distinctVersions.values().next().value ?? "none";
|
|
284
|
+
}
|
|
285
|
+
extractDistinctVersions(targetResults) {
|
|
286
|
+
return new Set(targetResults.map((targetResult) => targetResult.result?.version).filter((version) => typeof version === "string" && version.length > 0));
|
|
287
|
+
}
|
|
288
|
+
chooseWorkspacePackageTargetPath(candidate) {
|
|
289
|
+
if (candidate.source !== "workspace-package") return {
|
|
290
|
+
targetPath: candidate.candidatePath,
|
|
291
|
+
source: candidate.source
|
|
292
|
+
};
|
|
293
|
+
const preferredSourceDir = this.path.join(candidate.candidatePath, "src");
|
|
294
|
+
try {
|
|
295
|
+
if (this.fs.statSync(preferredSourceDir).isDirectory()) return {
|
|
296
|
+
targetPath: preferredSourceDir,
|
|
297
|
+
source: "workspace-package-selected-src"
|
|
298
|
+
};
|
|
299
|
+
} catch {}
|
|
300
|
+
return {
|
|
301
|
+
targetPath: candidate.candidatePath,
|
|
302
|
+
source: "workspace-package-selected-root"
|
|
303
|
+
};
|
|
304
|
+
}
|
|
305
|
+
resolveTargetSelection(candidate, rootDir) {
|
|
306
|
+
const selectedTarget = this.chooseWorkspacePackageTargetPath(candidate);
|
|
307
|
+
const rootRelativeTargetPath = this.path.relative(rootDir, selectedTarget.targetPath).split(this.path.separator).join("/");
|
|
308
|
+
return {
|
|
309
|
+
targetPath: selectedTarget.targetPath,
|
|
310
|
+
rootRelativeTargetPath: rootRelativeTargetPath || ".",
|
|
311
|
+
source: selectedTarget.source,
|
|
312
|
+
packageDir: candidate.packageDir,
|
|
313
|
+
packageName: candidate.packageName
|
|
314
|
+
};
|
|
315
|
+
}
|
|
316
|
+
filterSkippedCandidates(targetCandidates, skipPackages) {
|
|
317
|
+
if (!skipPackages || skipPackages.length === 0) return {
|
|
318
|
+
includedCandidates: targetCandidates,
|
|
319
|
+
skippedPackages: []
|
|
320
|
+
};
|
|
321
|
+
const skipPackageSet = new Set(skipPackages);
|
|
322
|
+
const includedCandidates = [];
|
|
323
|
+
const skippedPackages = [];
|
|
324
|
+
for (const candidate of targetCandidates) {
|
|
325
|
+
const packageName = candidate.packageName;
|
|
326
|
+
if (packageName && skipPackageSet.has(packageName)) {
|
|
327
|
+
skippedPackages.push(packageName);
|
|
328
|
+
continue;
|
|
329
|
+
}
|
|
330
|
+
includedCandidates.push(candidate);
|
|
331
|
+
}
|
|
332
|
+
return {
|
|
333
|
+
includedCandidates,
|
|
334
|
+
skippedPackages
|
|
335
|
+
};
|
|
336
|
+
}
|
|
337
|
+
async runOnResolvedTarget(resolvedTarget, write, listener) {
|
|
338
|
+
listener?.onTargetStarted(resolvedTarget);
|
|
339
|
+
const absoluteTargetPath = this.path.resolve(resolvedTarget.targetPath);
|
|
340
|
+
if (!this.fs.existsSync(absoluteTargetPath)) {
|
|
341
|
+
const missingTargetResult = {
|
|
342
|
+
target: resolvedTarget,
|
|
343
|
+
targetExists: false,
|
|
344
|
+
runError: `Not found: ${absoluteTargetPath}`,
|
|
345
|
+
result: null
|
|
346
|
+
};
|
|
347
|
+
listener?.onTargetCompleted(resolvedTarget, missingTargetResult);
|
|
348
|
+
return missingTargetResult;
|
|
349
|
+
}
|
|
350
|
+
try {
|
|
351
|
+
const targetRunResult = {
|
|
352
|
+
target: resolvedTarget,
|
|
353
|
+
targetExists: true,
|
|
354
|
+
runError: null,
|
|
355
|
+
result: this.tagTargetRunner.runOnTarget(absoluteTargetPath, { write })
|
|
356
|
+
};
|
|
357
|
+
listener?.onTargetCompleted(resolvedTarget, targetRunResult);
|
|
358
|
+
return targetRunResult;
|
|
359
|
+
} catch (caughtRunError) {
|
|
360
|
+
const failedTargetRunResult = {
|
|
361
|
+
target: resolvedTarget,
|
|
362
|
+
targetExists: true,
|
|
363
|
+
runError: messageFromCaughtUnknown(caughtRunError),
|
|
364
|
+
result: null
|
|
365
|
+
};
|
|
366
|
+
listener?.onTargetCompleted(resolvedTarget, failedTargetRunResult);
|
|
367
|
+
return failedTargetRunResult;
|
|
368
|
+
}
|
|
369
|
+
}
|
|
376
370
|
static {
|
|
377
371
|
_initClass();
|
|
378
372
|
}
|
|
379
373
|
});
|
|
380
374
|
//#endregion
|
|
381
|
-
export {
|
|
375
|
+
export { _RunTagSyncUseCase as RunTagSyncUseCase };
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { token } from "@codefast/di";
|
|
2
|
+
//#region src/domains/tag/composition/tokens.ts
|
|
3
|
+
const TagEligibleWorkspacePathsPortToken = token("TagEligibleWorkspacePathsPort");
|
|
4
|
+
const TagSinceWriterPortToken = token("TagSinceWriterPort");
|
|
5
|
+
const TagVersionResolverPortToken = token("TagVersionResolverPort");
|
|
6
|
+
const RunTagSyncUseCaseToken = token("RunTagSyncUseCase");
|
|
7
|
+
const PrepareTagSyncUseCaseToken = token("PrepareTagSyncUseCase");
|
|
8
|
+
const TagTargetRunnerPortToken = token("TagTargetRunnerPort");
|
|
9
|
+
const TagTargetPathResolverPortToken = token("TagTargetPathResolverPort");
|
|
10
|
+
const PresentTagSyncResultPresenterToken = token("PresentTagSyncResultPresenter");
|
|
11
|
+
const PresentTagSyncProgressPresenterToken = token("PresentTagSyncProgressPresenter");
|
|
12
|
+
//#endregion
|
|
13
|
+
export { PrepareTagSyncUseCaseToken, PresentTagSyncProgressPresenterToken, PresentTagSyncResultPresenterToken, RunTagSyncUseCaseToken, TagEligibleWorkspacePathsPortToken, TagSinceWriterPortToken, TagTargetPathResolverPortToken, TagTargetRunnerPortToken, TagVersionResolverPortToken };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { applyEditsDescending, indentOfLineContaining } from "
|
|
1
|
+
import { CliFilesystemPortToken } from "../../../../shell/application/cli-runtime.tokens.mjs";
|
|
2
|
+
import { applyEditsDescending, indentOfLineContaining } from "../../../../shell/domain/source-text-edit.support.mjs";
|
|
3
3
|
import { inject, injectable } from "@codefast/di";
|
|
4
4
|
import ts from "typescript";
|
|
5
|
-
//#region src/
|
|
5
|
+
//#region src/domains/tag/infrastructure/adapters/tag-since-writer.adapter.ts
|
|
6
6
|
function toPrimitive(input, hint) {
|
|
7
7
|
if (typeof input !== "object" || input === null) return input;
|
|
8
8
|
var prim = input[Symbol.toPrimitive];
|
|
@@ -213,106 +213,7 @@ function _apply_decs_2311(targetClass, classDecs, memberDecs, classDecsHaveThis,
|
|
|
213
213
|
};
|
|
214
214
|
}
|
|
215
215
|
let _dec, _initClass;
|
|
216
|
-
|
|
217
|
-
function hasExportModifier(node) {
|
|
218
|
-
return (ts.canHaveModifiers(node) ? ts.getModifiers(node) : void 0)?.some((modifier) => modifier.kind === ts.SyntaxKind.ExportKeyword) ?? false;
|
|
219
|
-
}
|
|
220
|
-
function isTaggableDeclaration(node) {
|
|
221
|
-
return ts.isFunctionDeclaration(node) || ts.isClassDeclaration(node) || ts.isInterfaceDeclaration(node) || ts.isTypeAliasDeclaration(node) || ts.isEnumDeclaration(node) || ts.isVariableStatement(node);
|
|
222
|
-
}
|
|
223
|
-
function addDeclarationName(registry, name, declaration) {
|
|
224
|
-
if (!registry.has(name)) {
|
|
225
|
-
registry.set(name, new Set([declaration]));
|
|
226
|
-
return;
|
|
227
|
-
}
|
|
228
|
-
const bucket = registry.get(name);
|
|
229
|
-
if (bucket === void 0) throw new Error(`declaration registry missing set for ${name}`);
|
|
230
|
-
bucket.add(declaration);
|
|
231
|
-
}
|
|
232
|
-
function collectLocalNamedDeclarations(sf) {
|
|
233
|
-
const declarations = /* @__PURE__ */ new Map();
|
|
234
|
-
for (const statement of sf.statements) {
|
|
235
|
-
if (ts.isFunctionDeclaration(statement) && statement.name) {
|
|
236
|
-
addDeclarationName(declarations, statement.name.text, statement);
|
|
237
|
-
continue;
|
|
238
|
-
}
|
|
239
|
-
if (ts.isClassDeclaration(statement) && statement.name) {
|
|
240
|
-
addDeclarationName(declarations, statement.name.text, statement);
|
|
241
|
-
continue;
|
|
242
|
-
}
|
|
243
|
-
if (ts.isInterfaceDeclaration(statement)) {
|
|
244
|
-
addDeclarationName(declarations, statement.name.text, statement);
|
|
245
|
-
continue;
|
|
246
|
-
}
|
|
247
|
-
if (ts.isTypeAliasDeclaration(statement)) {
|
|
248
|
-
addDeclarationName(declarations, statement.name.text, statement);
|
|
249
|
-
continue;
|
|
250
|
-
}
|
|
251
|
-
if (ts.isEnumDeclaration(statement)) {
|
|
252
|
-
addDeclarationName(declarations, statement.name.text, statement);
|
|
253
|
-
continue;
|
|
254
|
-
}
|
|
255
|
-
if (!ts.isVariableStatement(statement)) continue;
|
|
256
|
-
for (const declaration of statement.declarationList.declarations) if (ts.isIdentifier(declaration.name)) addDeclarationName(declarations, declaration.name.text, statement);
|
|
257
|
-
}
|
|
258
|
-
return declarations;
|
|
259
|
-
}
|
|
260
|
-
function collectExportedDeclarations(sf) {
|
|
261
|
-
const exported = /* @__PURE__ */ new Set();
|
|
262
|
-
const localNamed = collectLocalNamedDeclarations(sf);
|
|
263
|
-
for (const statement of sf.statements) {
|
|
264
|
-
if (isTaggableDeclaration(statement) && hasExportModifier(statement)) {
|
|
265
|
-
exported.add(statement);
|
|
266
|
-
continue;
|
|
267
|
-
}
|
|
268
|
-
if (ts.isExportDeclaration(statement) && !statement.moduleSpecifier && statement.exportClause && ts.isNamedExports(statement.exportClause)) {
|
|
269
|
-
for (const element of statement.exportClause.elements) {
|
|
270
|
-
const localName = element.propertyName?.text ?? element.name.text;
|
|
271
|
-
const declarations = localNamed.get(localName);
|
|
272
|
-
if (!declarations) continue;
|
|
273
|
-
for (const declaration of declarations) exported.add(declaration);
|
|
274
|
-
}
|
|
275
|
-
continue;
|
|
276
|
-
}
|
|
277
|
-
if (!ts.isExportAssignment(statement) || !ts.isIdentifier(statement.expression)) continue;
|
|
278
|
-
const declarations = localNamed.get(statement.expression.text);
|
|
279
|
-
if (!declarations) continue;
|
|
280
|
-
for (const declaration of declarations) exported.add(declaration);
|
|
281
|
-
}
|
|
282
|
-
return exported;
|
|
283
|
-
}
|
|
284
|
-
function makeJSDocSinceLine(existingComment, sourceText, version) {
|
|
285
|
-
const commentText = sourceText.slice(existingComment.pos, existingComment.end);
|
|
286
|
-
const baseIndent = indentOfLineContaining(sourceText, existingComment.pos);
|
|
287
|
-
const normalizedBodyLines = commentText.replace(/^\/\*\*\s?/, "").replace(/\s*\*\/$/, "").split("\n").map((line) => line.replace(/^\s*\*\s?/, "").replace(/\s+$/, "")).filter((line, lineIndex, lines) => {
|
|
288
|
-
if (line.length > 0) return true;
|
|
289
|
-
const hasNonEmptyBefore = lines.slice(0, lineIndex).some((value) => value.length > 0);
|
|
290
|
-
const hasNonEmptyAfter = lines.slice(lineIndex + 1).some((value) => value.length > 0);
|
|
291
|
-
return hasNonEmptyBefore && hasNonEmptyAfter;
|
|
292
|
-
});
|
|
293
|
-
const replacement = `/**\n${normalizedBodyLines.length > 0 ? `${normalizedBodyLines.map((line) => `${baseIndent} * ${line}`).join("\n")}\n${baseIndent} *\n` : ""}${baseIndent} * ${VERSION_TAG} ${version}\n${baseIndent} */`;
|
|
294
|
-
return {
|
|
295
|
-
start: existingComment.pos,
|
|
296
|
-
end: existingComment.end,
|
|
297
|
-
replacement
|
|
298
|
-
};
|
|
299
|
-
}
|
|
300
|
-
function makeSinceOnlyJSDocBlock(declarationIndent, version) {
|
|
301
|
-
return `/**\n${declarationIndent} * ${VERSION_TAG} ${version}\n${declarationIndent} */`;
|
|
302
|
-
}
|
|
303
|
-
function makeDeclarationSinceLine(declaration, sf, sourceText, version) {
|
|
304
|
-
if (ts.getJSDocTags(declaration).some((tag) => tag.tagName.text === "since")) return;
|
|
305
|
-
const lastJsDoc = ts.getJSDocCommentsAndTags(declaration).filter(ts.isJSDoc).at(-1);
|
|
306
|
-
if (lastJsDoc) return makeJSDocSinceLine(lastJsDoc, sourceText, version);
|
|
307
|
-
const start = declaration.getStart(sf);
|
|
308
|
-
const indent = indentOfLineContaining(sourceText, start);
|
|
309
|
-
return {
|
|
310
|
-
start,
|
|
311
|
-
end: start,
|
|
312
|
-
replacement: `${indent}${makeSinceOnlyJSDocBlock(indent, version)}\n${indent}`
|
|
313
|
-
};
|
|
314
|
-
}
|
|
315
|
-
_dec = injectable([inject(CliFsToken)]);
|
|
216
|
+
_dec = injectable([inject(CliFilesystemPortToken)]);
|
|
316
217
|
let _TagSinceWriterAdapter;
|
|
317
218
|
(class {
|
|
318
219
|
fs;
|
|
@@ -322,12 +223,13 @@ let _TagSinceWriterAdapter;
|
|
|
322
223
|
constructor(fs) {
|
|
323
224
|
this.fs = fs;
|
|
324
225
|
}
|
|
226
|
+
sinceDocumentationTag = "@since";
|
|
325
227
|
applySinceTagsToFile(filePath, version, write) {
|
|
326
228
|
const sourceText = this.fs.readFileSync(filePath, "utf8");
|
|
327
229
|
const sf = ts.createSourceFile(filePath, sourceText, ts.ScriptTarget.Latest, true, filePath.endsWith(".tsx") ? ts.ScriptKind.TSX : ts.ScriptKind.TS);
|
|
328
230
|
const edits = [];
|
|
329
|
-
for (const declaration of collectExportedDeclarations(sf)) {
|
|
330
|
-
const edit = makeDeclarationSinceLine(declaration, sf, sourceText, version);
|
|
231
|
+
for (const declaration of this.collectExportedDeclarations(sf)) {
|
|
232
|
+
const edit = this.makeDeclarationSinceLine(declaration, sf, sourceText, version);
|
|
331
233
|
if (edit) edits.push(edit);
|
|
332
234
|
}
|
|
333
235
|
if (edits.length > 0 && write) {
|
|
@@ -340,6 +242,104 @@ let _TagSinceWriterAdapter;
|
|
|
340
242
|
changed: edits.length > 0
|
|
341
243
|
};
|
|
342
244
|
}
|
|
245
|
+
hasExportModifier(node) {
|
|
246
|
+
return (ts.canHaveModifiers(node) ? ts.getModifiers(node) : void 0)?.some((modifier) => modifier.kind === ts.SyntaxKind.ExportKeyword) ?? false;
|
|
247
|
+
}
|
|
248
|
+
isTaggableDeclaration(node) {
|
|
249
|
+
return ts.isFunctionDeclaration(node) || ts.isClassDeclaration(node) || ts.isInterfaceDeclaration(node) || ts.isTypeAliasDeclaration(node) || ts.isEnumDeclaration(node) || ts.isVariableStatement(node);
|
|
250
|
+
}
|
|
251
|
+
addDeclarationName(registry, name, declaration) {
|
|
252
|
+
if (!registry.has(name)) {
|
|
253
|
+
registry.set(name, new Set([declaration]));
|
|
254
|
+
return;
|
|
255
|
+
}
|
|
256
|
+
const bucket = registry.get(name);
|
|
257
|
+
if (bucket === void 0) throw new Error(`declaration registry missing set for ${name}`);
|
|
258
|
+
bucket.add(declaration);
|
|
259
|
+
}
|
|
260
|
+
collectLocalNamedDeclarations(sf) {
|
|
261
|
+
const declarations = /* @__PURE__ */ new Map();
|
|
262
|
+
for (const statement of sf.statements) {
|
|
263
|
+
if (ts.isFunctionDeclaration(statement) && statement.name) {
|
|
264
|
+
this.addDeclarationName(declarations, statement.name.text, statement);
|
|
265
|
+
continue;
|
|
266
|
+
}
|
|
267
|
+
if (ts.isClassDeclaration(statement) && statement.name) {
|
|
268
|
+
this.addDeclarationName(declarations, statement.name.text, statement);
|
|
269
|
+
continue;
|
|
270
|
+
}
|
|
271
|
+
if (ts.isInterfaceDeclaration(statement)) {
|
|
272
|
+
this.addDeclarationName(declarations, statement.name.text, statement);
|
|
273
|
+
continue;
|
|
274
|
+
}
|
|
275
|
+
if (ts.isTypeAliasDeclaration(statement)) {
|
|
276
|
+
this.addDeclarationName(declarations, statement.name.text, statement);
|
|
277
|
+
continue;
|
|
278
|
+
}
|
|
279
|
+
if (ts.isEnumDeclaration(statement)) {
|
|
280
|
+
this.addDeclarationName(declarations, statement.name.text, statement);
|
|
281
|
+
continue;
|
|
282
|
+
}
|
|
283
|
+
if (!ts.isVariableStatement(statement)) continue;
|
|
284
|
+
for (const declaration of statement.declarationList.declarations) if (ts.isIdentifier(declaration.name)) this.addDeclarationName(declarations, declaration.name.text, statement);
|
|
285
|
+
}
|
|
286
|
+
return declarations;
|
|
287
|
+
}
|
|
288
|
+
collectExportedDeclarations(sf) {
|
|
289
|
+
const exported = /* @__PURE__ */ new Set();
|
|
290
|
+
const localNamed = this.collectLocalNamedDeclarations(sf);
|
|
291
|
+
for (const statement of sf.statements) {
|
|
292
|
+
if (this.isTaggableDeclaration(statement) && this.hasExportModifier(statement)) {
|
|
293
|
+
exported.add(statement);
|
|
294
|
+
continue;
|
|
295
|
+
}
|
|
296
|
+
if (ts.isExportDeclaration(statement) && !statement.moduleSpecifier && statement.exportClause && ts.isNamedExports(statement.exportClause)) {
|
|
297
|
+
for (const element of statement.exportClause.elements) {
|
|
298
|
+
const localName = element.propertyName?.text ?? element.name.text;
|
|
299
|
+
const declarations = localNamed.get(localName);
|
|
300
|
+
if (!declarations) continue;
|
|
301
|
+
for (const declaration of declarations) exported.add(declaration);
|
|
302
|
+
}
|
|
303
|
+
continue;
|
|
304
|
+
}
|
|
305
|
+
if (!ts.isExportAssignment(statement) || !ts.isIdentifier(statement.expression)) continue;
|
|
306
|
+
const declarations = localNamed.get(statement.expression.text);
|
|
307
|
+
if (!declarations) continue;
|
|
308
|
+
for (const declaration of declarations) exported.add(declaration);
|
|
309
|
+
}
|
|
310
|
+
return exported;
|
|
311
|
+
}
|
|
312
|
+
makeJSDocSinceLine(existingComment, sourceText, version) {
|
|
313
|
+
const commentText = sourceText.slice(existingComment.pos, existingComment.end);
|
|
314
|
+
const baseIndent = indentOfLineContaining(sourceText, existingComment.pos);
|
|
315
|
+
const normalizedBodyLines = commentText.replace(/^\/\*\*\s?/, "").replace(/\s*\*\/$/, "").split("\n").map((line) => line.replace(/^\s*\*\s?/, "").replace(/\s+$/, "")).filter((line, lineIndex, lines) => {
|
|
316
|
+
if (line.length > 0) return true;
|
|
317
|
+
const hasNonEmptyBefore = lines.slice(0, lineIndex).some((value) => value.length > 0);
|
|
318
|
+
const hasNonEmptyAfter = lines.slice(lineIndex + 1).some((value) => value.length > 0);
|
|
319
|
+
return hasNonEmptyBefore && hasNonEmptyAfter;
|
|
320
|
+
});
|
|
321
|
+
const replacement = `/**\n${normalizedBodyLines.length > 0 ? `${normalizedBodyLines.map((line) => `${baseIndent} * ${line}`).join("\n")}\n${baseIndent} *\n` : ""}${baseIndent} * ${this.sinceDocumentationTag} ${version}\n${baseIndent} */`;
|
|
322
|
+
return {
|
|
323
|
+
start: existingComment.pos,
|
|
324
|
+
end: existingComment.end,
|
|
325
|
+
replacement
|
|
326
|
+
};
|
|
327
|
+
}
|
|
328
|
+
makeSinceOnlyJSDocBlock(declarationIndent, version) {
|
|
329
|
+
return `/**\n${declarationIndent} * ${this.sinceDocumentationTag} ${version}\n${declarationIndent} */`;
|
|
330
|
+
}
|
|
331
|
+
makeDeclarationSinceLine(declaration, sf, sourceText, version) {
|
|
332
|
+
if (ts.getJSDocTags(declaration).some((tag) => tag.tagName.text === "since")) return;
|
|
333
|
+
const lastJsDoc = ts.getJSDocCommentsAndTags(declaration).filter(ts.isJSDoc).at(-1);
|
|
334
|
+
if (lastJsDoc) return this.makeJSDocSinceLine(lastJsDoc, sourceText, version);
|
|
335
|
+
const start = declaration.getStart(sf);
|
|
336
|
+
const indent = indentOfLineContaining(sourceText, start);
|
|
337
|
+
return {
|
|
338
|
+
start,
|
|
339
|
+
end: start,
|
|
340
|
+
replacement: `${indent}${this.makeSinceOnlyJSDocBlock(indent, version)}\n${indent}`
|
|
341
|
+
};
|
|
342
|
+
}
|
|
343
343
|
static {
|
|
344
344
|
_initClass();
|
|
345
345
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import
|
|
1
|
+
import { CliFilesystemPortToken } from "../../../../shell/application/cli-runtime.tokens.mjs";
|
|
2
|
+
import path from "node:path";
|
|
3
3
|
import { inject, injectable } from "@codefast/di";
|
|
4
|
-
//#region src/
|
|
4
|
+
//#region src/domains/tag/infrastructure/adapters/tag-target-path-resolver.adapter.ts
|
|
5
5
|
function toPrimitive(input, hint) {
|
|
6
6
|
if (typeof input !== "object" || input === null) return input;
|
|
7
7
|
var prim = input[Symbol.toPrimitive];
|
|
@@ -212,22 +212,24 @@ function _apply_decs_2311(targetClass, classDecs, memberDecs, classDecsHaveThis,
|
|
|
212
212
|
};
|
|
213
213
|
}
|
|
214
214
|
let _dec, _initClass;
|
|
215
|
-
_dec = injectable([inject(
|
|
216
|
-
let
|
|
215
|
+
_dec = injectable([inject(CliFilesystemPortToken)]);
|
|
216
|
+
let _TagTargetPathResolverAdapter;
|
|
217
217
|
(class {
|
|
218
218
|
fs;
|
|
219
219
|
static {
|
|
220
|
-
({c: [
|
|
220
|
+
({c: [_TagTargetPathResolverAdapter, _initClass]} = _apply_decs_2311(this, [_dec], []));
|
|
221
221
|
}
|
|
222
222
|
constructor(fs) {
|
|
223
223
|
this.fs = fs;
|
|
224
224
|
}
|
|
225
|
-
|
|
226
|
-
|
|
225
|
+
resolveProvidedTargetPath(args) {
|
|
226
|
+
if (args.rawTarget === void 0) return;
|
|
227
|
+
const candidate = path.isAbsolute(args.rawTarget) ? path.resolve(args.rawTarget) : path.resolve(args.currentWorkingDirectory, args.rawTarget);
|
|
228
|
+
return this.fs.canonicalPathSync(candidate);
|
|
227
229
|
}
|
|
228
230
|
static {
|
|
229
231
|
_initClass();
|
|
230
232
|
}
|
|
231
233
|
});
|
|
232
234
|
//#endregion
|
|
233
|
-
export {
|
|
235
|
+
export { _TagTargetPathResolverAdapter as TagTargetPathResolverAdapter };
|