@codefast/cli 1.0.0-canary.6 → 1.0.0-canary.7
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 +106 -480
- package/dist/arrange/analyze.js +25 -0
- package/dist/arrange/analyze.js.map +1 -0
- package/dist/arrange/cli-schema.js +29 -0
- package/dist/arrange/cli-schema.js.map +1 -0
- package/dist/arrange/command.js +170 -0
- package/dist/arrange/command.js.map +1 -0
- package/dist/arrange/domain/analyze-service.js +122 -0
- package/dist/arrange/domain/analyze-service.js.map +1 -0
- package/dist/arrange/domain/ast/ast-node.js +240 -0
- package/dist/arrange/domain/ast/ast-node.js.map +1 -0
- package/dist/arrange/domain/ast/collectors-cn.js +81 -0
- package/dist/arrange/domain/ast/collectors-cn.js.map +1 -0
- package/dist/arrange/domain/ast/collectors-jsx.js +24 -0
- package/dist/arrange/domain/ast/collectors-jsx.js.map +1 -0
- package/dist/arrange/domain/ast/collectors-tv.js +319 -0
- package/dist/arrange/domain/ast/collectors-tv.js.map +1 -0
- package/dist/arrange/domain/ast/helpers.js +151 -0
- package/dist/arrange/domain/ast/helpers.js.map +1 -0
- package/dist/arrange/domain/ast/simplify-targets.js +161 -0
- package/dist/arrange/domain/ast/simplify-targets.js.map +1 -0
- package/dist/arrange/domain/ast/targets.js +182 -0
- package/dist/arrange/domain/ast/targets.js.map +1 -0
- package/dist/arrange/domain/constants.js +225 -0
- package/dist/arrange/domain/constants.js.map +1 -0
- package/dist/arrange/domain/grouping-service.js +128 -0
- package/dist/arrange/domain/grouping-service.js.map +1 -0
- package/dist/arrange/domain/grouping.js +435 -0
- package/dist/arrange/domain/grouping.js.map +1 -0
- package/dist/arrange/domain/imports.js +160 -0
- package/dist/arrange/domain/imports.js.map +1 -0
- package/dist/arrange/domain/source-text-formatters.js +100 -0
- package/dist/arrange/domain/source-text-formatters.js.map +1 -0
- package/dist/arrange/domain/tailwind-token.js +50 -0
- package/dist/arrange/domain/tailwind-token.js.map +1 -0
- package/dist/arrange/domain/token-classifier.js +448 -0
- package/dist/arrange/domain/token-classifier.js.map +1 -0
- package/dist/arrange/domain/types.js +11 -0
- package/dist/arrange/domain/types.js.map +1 -0
- package/dist/arrange/output.js +120 -0
- package/dist/arrange/output.js.map +1 -0
- package/dist/arrange/process-file.js +44 -0
- package/dist/arrange/process-file.js.map +1 -0
- package/dist/arrange/resolve-target.js +33 -0
- package/dist/arrange/resolve-target.js.map +1 -0
- package/dist/arrange/scan-target.js +30 -0
- package/dist/arrange/scan-target.js.map +1 -0
- package/dist/arrange/simplify-process-file.js +29 -0
- package/dist/arrange/simplify-process-file.js.map +1 -0
- package/dist/arrange/simplify-sync.js +29 -0
- package/dist/arrange/simplify-sync.js.map +1 -0
- package/dist/arrange/source-parse.js +17 -0
- package/dist/arrange/source-parse.js.map +1 -0
- package/dist/arrange/suggest.js +14 -0
- package/dist/arrange/suggest.js.map +1 -0
- package/dist/arrange/sync.js +48 -0
- package/dist/arrange/sync.js.map +1 -0
- package/dist/arrange/typescript-ast-translator.js +455 -0
- package/dist/arrange/typescript-ast-translator.js.map +1 -0
- package/dist/arrange/workspace.js +31 -0
- package/dist/arrange/workspace.js.map +1 -0
- package/dist/audit/cli-schema.js +22 -0
- package/dist/audit/cli-schema.js.map +1 -0
- package/dist/audit/command.js +60 -0
- package/dist/audit/command.js.map +1 -0
- package/dist/audit/domain/audit-file.js +101 -0
- package/dist/audit/domain/audit-file.js.map +1 -0
- package/dist/audit/domain/mappings.js +103 -0
- package/dist/audit/domain/mappings.js.map +1 -0
- package/dist/audit/domain/tokenize.js +83 -0
- package/dist/audit/domain/tokenize.js.map +1 -0
- package/dist/audit/domain/types.js +2 -0
- package/dist/audit/domain/types.js.map +1 -0
- package/dist/audit/output.js +44 -0
- package/dist/audit/output.js.map +1 -0
- package/dist/audit/prepare.js +42 -0
- package/dist/audit/prepare.js.map +1 -0
- package/dist/audit/run.js +57 -0
- package/dist/audit/run.js.map +1 -0
- package/dist/{bin.mjs → bin.js} +2 -4
- package/dist/bin.js.map +1 -0
- package/dist/cli.js +45 -0
- package/dist/cli.js.map +1 -0
- package/dist/core/cli/format-error.js +19 -0
- package/dist/core/cli/format-error.js.map +1 -0
- package/dist/core/cli/global-options.js +10 -0
- package/dist/core/cli/global-options.js.map +1 -0
- package/dist/core/cli/positional.js +9 -0
- package/dist/core/cli/positional.js.map +1 -0
- package/dist/core/cli/result-handle.js +69 -0
- package/dist/core/cli/result-handle.js.map +1 -0
- package/dist/core/config/loader.js +88 -0
- package/dist/core/config/loader.js.map +1 -0
- package/dist/core/config/schema.js +97 -0
- package/dist/core/config/schema.js.map +1 -0
- package/dist/core/config/warnings.js +12 -0
- package/dist/core/config/warnings.js.map +1 -0
- package/dist/core/config.js +18 -0
- package/dist/core/config.js.map +1 -0
- package/dist/core/errors.js +58 -0
- package/dist/core/errors.js.map +1 -0
- package/dist/core/exit-codes.js +15 -0
- package/dist/core/exit-codes.js.map +1 -0
- package/dist/core/filesystem/node.js +33 -0
- package/dist/core/filesystem/node.js.map +1 -0
- package/dist/core/filesystem/port.js +2 -0
- package/dist/core/filesystem/port.js.map +1 -0
- package/dist/core/glob.js +20 -0
- package/dist/core/glob.js.map +1 -0
- package/dist/core/logger.js +13 -0
- package/dist/core/logger.js.map +1 -0
- package/dist/core/result.js +16 -0
- package/dist/core/result.js.map +1 -0
- package/dist/core/schema-parse.js +21 -0
- package/dist/core/schema-parse.js.map +1 -0
- package/dist/core/source-text-edit.js +62 -0
- package/dist/core/source-text-edit.js.map +1 -0
- package/dist/core/verbose-diagnostics.js +9 -0
- package/dist/core/verbose-diagnostics.js.map +1 -0
- package/dist/core/workspace/resolver.js +208 -0
- package/dist/core/workspace/resolver.js.map +1 -0
- package/dist/core/workspace/typescript-walk.js +41 -0
- package/dist/core/workspace/typescript-walk.js.map +1 -0
- package/dist/mirror/cli-result.js +20 -0
- package/dist/mirror/cli-result.js.map +1 -0
- package/dist/mirror/cli-schema.js +11 -0
- package/dist/mirror/cli-schema.js.map +1 -0
- package/dist/mirror/command.js +73 -0
- package/dist/mirror/command.js.map +1 -0
- package/dist/mirror/dist-filesystem-impl.js +53 -0
- package/dist/mirror/dist-filesystem-impl.js.map +1 -0
- package/dist/mirror/domain/constants.js +21 -0
- package/dist/mirror/domain/constants.js.map +1 -0
- package/dist/mirror/domain/dirent-guard.js +16 -0
- package/dist/mirror/domain/dirent-guard.js.map +1 -0
- package/dist/mirror/domain/dist-filesystem.js +2 -0
- package/dist/mirror/domain/dist-filesystem.js.map +1 -0
- package/dist/mirror/domain/errors.js +19 -0
- package/dist/mirror/domain/errors.js.map +1 -0
- package/dist/mirror/domain/exports.js +284 -0
- package/dist/mirror/domain/exports.js.map +1 -0
- package/dist/mirror/domain/package-display-name.js +10 -0
- package/dist/mirror/domain/package-display-name.js.map +1 -0
- package/dist/mirror/domain/path-normalizer.js +8 -0
- package/dist/mirror/domain/path-normalizer.js.map +1 -0
- package/dist/mirror/domain/types.js +2 -0
- package/dist/mirror/domain/types.js.map +1 -0
- package/dist/mirror/output.js +47 -0
- package/dist/mirror/output.js.map +1 -0
- package/dist/mirror/package-path.js +40 -0
- package/dist/mirror/package-path.js.map +1 -0
- package/dist/mirror/prepare.js +37 -0
- package/dist/mirror/prepare.js.map +1 -0
- package/dist/mirror/supplement-exports.js +157 -0
- package/dist/mirror/supplement-exports.js.map +1 -0
- package/dist/mirror/sync-reporter.js +125 -0
- package/dist/mirror/sync-reporter.js.map +1 -0
- package/dist/mirror/sync-types.js +2 -0
- package/dist/mirror/sync-types.js.map +1 -0
- package/dist/mirror/sync-workspace-package.js +117 -0
- package/dist/mirror/sync-workspace-package.js.map +1 -0
- package/dist/mirror/sync.js +90 -0
- package/dist/mirror/sync.js.map +1 -0
- package/dist/mirror/write-exports.js +145 -0
- package/dist/mirror/write-exports.js.map +1 -0
- package/dist/tag/cli-result.js +12 -0
- package/dist/tag/cli-result.js.map +1 -0
- package/dist/tag/cli-schema.js +13 -0
- package/dist/tag/cli-schema.js.map +1 -0
- package/dist/tag/command.js +69 -0
- package/dist/tag/command.js.map +1 -0
- package/dist/tag/domain/types.js +2 -0
- package/dist/tag/domain/types.js.map +1 -0
- package/dist/tag/output.js +101 -0
- package/dist/tag/output.js.map +1 -0
- package/dist/tag/prepare.js +30 -0
- package/dist/tag/prepare.js.map +1 -0
- package/dist/tag/resolve-target-path.js +14 -0
- package/dist/tag/resolve-target-path.js.map +1 -0
- package/dist/tag/since-writer.js +231 -0
- package/dist/tag/since-writer.js.map +1 -0
- package/dist/tag/sync.js +166 -0
- package/dist/tag/sync.js.map +1 -0
- package/dist/tag/target-candidates.js +79 -0
- package/dist/tag/target-candidates.js.map +1 -0
- package/dist/tag/target-runner.js +25 -0
- package/dist/tag/target-runner.js.map +1 -0
- package/dist/tag/version-resolver.js +28 -0
- package/dist/tag/version-resolver.js.map +1 -0
- package/package.json +27 -21
- package/dist/arrange/analyze.mjs +0 -24
- package/dist/arrange/cli-schema.mjs +0 -27
- package/dist/arrange/command.mjs +0 -130
- package/dist/arrange/domain/analyze-service.mjs +0 -102
- package/dist/arrange/domain/ast/ast-node.mjs +0 -215
- package/dist/arrange/domain/ast/collectors-cn.mjs +0 -64
- package/dist/arrange/domain/ast/collectors-jsx.mjs +0 -23
- package/dist/arrange/domain/ast/collectors-tv.mjs +0 -189
- package/dist/arrange/domain/ast/helpers.mjs +0 -108
- package/dist/arrange/domain/ast/simplify-targets.mjs +0 -109
- package/dist/arrange/domain/ast/targets.mjs +0 -134
- package/dist/arrange/domain/constants.mjs +0 -213
- package/dist/arrange/domain/grouping-service.mjs +0 -121
- package/dist/arrange/domain/grouping.mjs +0 -338
- package/dist/arrange/domain/imports.mjs +0 -107
- package/dist/arrange/domain/source-text-formatters.mjs +0 -88
- package/dist/arrange/domain/tailwind-token.mjs +0 -40
- package/dist/arrange/domain/token-classifier.mjs +0 -218
- package/dist/arrange/domain/types.mjs +0 -1
- package/dist/arrange/output.mjs +0 -87
- package/dist/arrange/process-file.mjs +0 -42
- package/dist/arrange/resolve-target.mjs +0 -24
- package/dist/arrange/scan-target.mjs +0 -29
- package/dist/arrange/simplify-process-file.mjs +0 -35
- package/dist/arrange/simplify-sync.mjs +0 -32
- package/dist/arrange/source-parse.mjs +0 -18
- package/dist/arrange/suggest.mjs +0 -15
- package/dist/arrange/sync.mjs +0 -51
- package/dist/arrange/typescript-ast-translator.mjs +0 -354
- package/dist/arrange/workspace.mjs +0 -31
- package/dist/cli.mjs +0 -34
- package/dist/core/cli/format-error.mjs +0 -15
- package/dist/core/cli/global-options.mjs +0 -10
- package/dist/core/cli/positional.mjs +0 -11
- package/dist/core/cli/result-handle.mjs +0 -51
- package/dist/core/config/loader.mjs +0 -79
- package/dist/core/config/schema.mjs +0 -60
- package/dist/core/config/warnings.mjs +0 -12
- package/dist/core/config.mjs +0 -19
- package/dist/core/errors.mjs +0 -35
- package/dist/core/exit-codes.mjs +0 -17
- package/dist/core/filesystem/node.mjs +0 -32
- package/dist/core/filesystem/port.mjs +0 -1
- package/dist/core/glob.mjs +0 -20
- package/dist/core/logger.mjs +0 -15
- package/dist/core/result.mjs +0 -21
- package/dist/core/schema-parse.mjs +0 -18
- package/dist/core/source-text-edit.mjs +0 -56
- package/dist/core/verbose-diagnostics.mjs +0 -11
- package/dist/core/workspace/resolver.mjs +0 -177
- package/dist/core/workspace/typescript-walk.mjs +0 -36
- package/dist/mirror/cli-result.mjs +0 -22
- package/dist/mirror/cli-schema.mjs +0 -13
- package/dist/mirror/command.mjs +0 -58
- package/dist/mirror/dist-filesystem-impl.mjs +0 -42
- package/dist/mirror/domain/constants.mjs +0 -31
- package/dist/mirror/domain/dirent-guard.mjs +0 -16
- package/dist/mirror/domain/dist-filesystem.mjs +0 -1
- package/dist/mirror/domain/errors.mjs +0 -21
- package/dist/mirror/domain/exports.mjs +0 -226
- package/dist/mirror/domain/package-display-name.mjs +0 -12
- package/dist/mirror/domain/path-normalizer.mjs +0 -10
- package/dist/mirror/domain/types.mjs +0 -1
- package/dist/mirror/output.mjs +0 -48
- package/dist/mirror/package-path.mjs +0 -32
- package/dist/mirror/prepare.mjs +0 -33
- package/dist/mirror/supplement-exports.mjs +0 -114
- package/dist/mirror/sync-reporter.mjs +0 -107
- package/dist/mirror/sync-types.mjs +0 -1
- package/dist/mirror/sync-workspace-package.mjs +0 -109
- package/dist/mirror/sync.mjs +0 -88
- package/dist/mirror/write-exports.mjs +0 -94
- package/dist/tag/cli-result.mjs +0 -11
- package/dist/tag/cli-schema.mjs +0 -15
- package/dist/tag/command.mjs +0 -56
- package/dist/tag/domain/types.mjs +0 -1
- package/dist/tag/output.mjs +0 -87
- package/dist/tag/prepare.mjs +0 -29
- package/dist/tag/resolve-target-path.mjs +0 -12
- package/dist/tag/since-writer.mjs +0 -131
- package/dist/tag/sync.mjs +0 -149
- package/dist/tag/target-candidates.mjs +0 -68
- package/dist/tag/target-runner.mjs +0 -26
- package/dist/tag/version-resolver.mjs +0 -25
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { DIRECTION_RESOLVED_VARIANT, PHYSICAL_SIDE_VARIANT, RTL_MAPPINGS, RTL_REVERSE_MAPPINGS, RTL_SWAP_MAPPINGS, RTL_TRANSLATE_X_MAPPINGS, SLIDE_PREFIXES, } from "#/audit/domain/mappings";
|
|
2
|
+
import { collectTokens } from "#/audit/domain/tokenize";
|
|
3
|
+
/**
|
|
4
|
+
* A token satisfies an "rtl companion" requirement when the same file has a
|
|
5
|
+
* token whose variants include `rtl` and whose value matches. Variant order
|
|
6
|
+
* differs between authors, so this stays deliberately loose.
|
|
7
|
+
*
|
|
8
|
+
* @since 1.0.0-canary.7
|
|
9
|
+
*/
|
|
10
|
+
export function hasRtlCompanion(fileTokens, expectedValue) {
|
|
11
|
+
return fileTokens.some(({ variant, value }) => {
|
|
12
|
+
if (!variant) {
|
|
13
|
+
return false;
|
|
14
|
+
}
|
|
15
|
+
const variants = variant.split(":");
|
|
16
|
+
if (!variants.includes("rtl")) {
|
|
17
|
+
return false;
|
|
18
|
+
}
|
|
19
|
+
return value === expectedValue || value.startsWith(expectedValue);
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Detect physical-direction Tailwind classes that should be logical or rtl:-paired.
|
|
24
|
+
*
|
|
25
|
+
* @since 1.0.0-canary.7
|
|
26
|
+
*/
|
|
27
|
+
export function auditFileContent(content) {
|
|
28
|
+
const tokens = collectTokens(content);
|
|
29
|
+
const violations = [];
|
|
30
|
+
for (const { raw, token, variant, value, line } of tokens) {
|
|
31
|
+
if (token.startsWith("rtl:") || token.startsWith("ltr:")) {
|
|
32
|
+
continue;
|
|
33
|
+
}
|
|
34
|
+
const variants = variant ? variant.split(":") : [];
|
|
35
|
+
if (variants.includes("rtl") || variants.includes("ltr")) {
|
|
36
|
+
continue;
|
|
37
|
+
}
|
|
38
|
+
const isPhysicalSideVariant = variant !== null && PHYSICAL_SIDE_VARIANT.test(variant);
|
|
39
|
+
if (isPhysicalSideVariant) {
|
|
40
|
+
continue;
|
|
41
|
+
}
|
|
42
|
+
const translateMapping = RTL_TRANSLATE_X_MAPPINGS.find(([physical]) => value.startsWith(physical));
|
|
43
|
+
if (translateMapping) {
|
|
44
|
+
// ±0 is direction-neutral — negating it changes nothing.
|
|
45
|
+
if (/^-?translate-x-0$/.test(value)) {
|
|
46
|
+
continue;
|
|
47
|
+
}
|
|
48
|
+
const expected = value.replace(translateMapping[0], translateMapping[1]);
|
|
49
|
+
if (!hasRtlCompanion(tokens, expected)) {
|
|
50
|
+
violations.push({
|
|
51
|
+
line,
|
|
52
|
+
raw,
|
|
53
|
+
suggestion: `add rtl:${expected} (or rtl:…:${expected})`,
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
continue;
|
|
57
|
+
}
|
|
58
|
+
const reverseMapping = RTL_REVERSE_MAPPINGS.find(([prefix]) => value.startsWith(prefix) || value.startsWith(`-${prefix}`));
|
|
59
|
+
if (reverseMapping) {
|
|
60
|
+
if (value.includes("reverse")) {
|
|
61
|
+
continue;
|
|
62
|
+
}
|
|
63
|
+
if (!hasRtlCompanion(tokens, reverseMapping[1])) {
|
|
64
|
+
violations.push({ line, raw, suggestion: `add rtl:${reverseMapping[1]}` });
|
|
65
|
+
}
|
|
66
|
+
continue;
|
|
67
|
+
}
|
|
68
|
+
const swapMapping = RTL_SWAP_MAPPINGS.find(([physical]) => value === physical);
|
|
69
|
+
if (swapMapping) {
|
|
70
|
+
if (!hasRtlCompanion(tokens, swapMapping[1])) {
|
|
71
|
+
violations.push({ line, raw, suggestion: `add rtl:${swapMapping[1]}` });
|
|
72
|
+
}
|
|
73
|
+
continue;
|
|
74
|
+
}
|
|
75
|
+
if (SLIDE_PREFIXES.some((prefix) => value.startsWith(prefix))) {
|
|
76
|
+
if (variant && DIRECTION_RESOLVED_VARIANT.test(variant)) {
|
|
77
|
+
continue;
|
|
78
|
+
}
|
|
79
|
+
violations.push({
|
|
80
|
+
line,
|
|
81
|
+
raw,
|
|
82
|
+
suggestion: "check: physical slide outside a side/motion context",
|
|
83
|
+
});
|
|
84
|
+
continue;
|
|
85
|
+
}
|
|
86
|
+
for (const [physical, logical] of RTL_MAPPINGS) {
|
|
87
|
+
if (!value.startsWith(physical)) {
|
|
88
|
+
continue;
|
|
89
|
+
}
|
|
90
|
+
// Bare patterns (no trailing dash) must match exactly so border-ring
|
|
91
|
+
// doesn't match border-r.
|
|
92
|
+
if (!physical.endsWith("-") && value !== physical) {
|
|
93
|
+
continue;
|
|
94
|
+
}
|
|
95
|
+
violations.push({ line, raw, suggestion: value.replace(physical, logical) });
|
|
96
|
+
break;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
return violations;
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=audit-file.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit-file.js","sourceRoot":"","sources":["../../../src/audit/domain/audit-file.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Physical → logical replacements. Order matters: negative before positive,
|
|
3
|
+
* specific corners before general edges, with-value before bare.
|
|
4
|
+
*
|
|
5
|
+
* @since 1.0.0-canary.7
|
|
6
|
+
*/
|
|
7
|
+
export const RTL_MAPPINGS = [
|
|
8
|
+
["-ml-", "-ms-"],
|
|
9
|
+
["-mr-", "-me-"],
|
|
10
|
+
["ml-", "ms-"],
|
|
11
|
+
["mr-", "me-"],
|
|
12
|
+
["pl-", "ps-"],
|
|
13
|
+
["pr-", "pe-"],
|
|
14
|
+
["-left-", "-start-"],
|
|
15
|
+
["-right-", "-end-"],
|
|
16
|
+
["left-", "start-"],
|
|
17
|
+
["right-", "end-"],
|
|
18
|
+
["inset-l-", "inset-inline-start-"],
|
|
19
|
+
["inset-r-", "inset-inline-end-"],
|
|
20
|
+
["rounded-tl-", "rounded-ss-"],
|
|
21
|
+
["rounded-tr-", "rounded-se-"],
|
|
22
|
+
["rounded-bl-", "rounded-es-"],
|
|
23
|
+
["rounded-br-", "rounded-ee-"],
|
|
24
|
+
["rounded-l-", "rounded-s-"],
|
|
25
|
+
["rounded-r-", "rounded-e-"],
|
|
26
|
+
["rounded-tl", "rounded-ss"],
|
|
27
|
+
["rounded-tr", "rounded-se"],
|
|
28
|
+
["rounded-bl", "rounded-es"],
|
|
29
|
+
["rounded-br", "rounded-ee"],
|
|
30
|
+
["rounded-l", "rounded-s"],
|
|
31
|
+
["rounded-r", "rounded-e"],
|
|
32
|
+
["border-l-", "border-s-"],
|
|
33
|
+
["border-r-", "border-e-"],
|
|
34
|
+
["border-l", "border-s"],
|
|
35
|
+
["border-r", "border-e"],
|
|
36
|
+
["text-left", "text-start"],
|
|
37
|
+
["text-right", "text-end"],
|
|
38
|
+
["scroll-ml-", "scroll-ms-"],
|
|
39
|
+
["scroll-mr-", "scroll-me-"],
|
|
40
|
+
["scroll-pl-", "scroll-ps-"],
|
|
41
|
+
["scroll-pr-", "scroll-pe-"],
|
|
42
|
+
["float-left", "float-start"],
|
|
43
|
+
["float-right", "float-end"],
|
|
44
|
+
["clear-left", "clear-start"],
|
|
45
|
+
["clear-right", "clear-end"],
|
|
46
|
+
["origin-top-left", "origin-top-start"],
|
|
47
|
+
["origin-top-right", "origin-top-end"],
|
|
48
|
+
["origin-bottom-left", "origin-bottom-start"],
|
|
49
|
+
["origin-bottom-right", "origin-bottom-end"],
|
|
50
|
+
["origin-left", "origin-start"],
|
|
51
|
+
["origin-right", "origin-end"],
|
|
52
|
+
];
|
|
53
|
+
/**
|
|
54
|
+
* translate-x has no logical equivalent — it needs an rtl:-negated twin.
|
|
55
|
+
*
|
|
56
|
+
* @since 1.0.0-canary.7
|
|
57
|
+
*/
|
|
58
|
+
export const RTL_TRANSLATE_X_MAPPINGS = [
|
|
59
|
+
["-translate-x-", "translate-x-"],
|
|
60
|
+
["translate-x-", "-translate-x-"],
|
|
61
|
+
];
|
|
62
|
+
/**
|
|
63
|
+
* Classes that need an rtl:*-reverse companion.
|
|
64
|
+
*
|
|
65
|
+
* @since 1.0.0-canary.7
|
|
66
|
+
*/
|
|
67
|
+
export const RTL_REVERSE_MAPPINGS = [
|
|
68
|
+
["space-x-", "space-x-reverse"],
|
|
69
|
+
["divide-x-", "divide-x-reverse"],
|
|
70
|
+
];
|
|
71
|
+
/**
|
|
72
|
+
* Classes that need an rtl: companion with the swapped value.
|
|
73
|
+
*
|
|
74
|
+
* @since 1.0.0-canary.7
|
|
75
|
+
*/
|
|
76
|
+
export const RTL_SWAP_MAPPINGS = [
|
|
77
|
+
["cursor-w-resize", "cursor-e-resize"],
|
|
78
|
+
["cursor-e-resize", "cursor-w-resize"],
|
|
79
|
+
];
|
|
80
|
+
/**
|
|
81
|
+
* Anything anchored to a physical side variant stays physical: Radix resolves
|
|
82
|
+
* `side` per direction, and a border/position/slide tied to that side must follow it.
|
|
83
|
+
*
|
|
84
|
+
* @since 1.0.0-canary.7
|
|
85
|
+
*/
|
|
86
|
+
export const PHYSICAL_SIDE_VARIANT = /data-side-(?:left|right)|data-\[side=(?:left|right)\]|\[data-side=(?:left|right)\]/;
|
|
87
|
+
/**
|
|
88
|
+
* Slide animations under direction-resolved contexts are correct as-is:
|
|
89
|
+
* Radix flips `side`/`motion` values itself under DirectionProvider.
|
|
90
|
+
*
|
|
91
|
+
* @since 1.0.0-canary.7
|
|
92
|
+
*/
|
|
93
|
+
export const DIRECTION_RESOLVED_VARIANT = /data-\[motion[=^]/;
|
|
94
|
+
/**
|
|
95
|
+
* @since 1.0.0-canary.7
|
|
96
|
+
*/
|
|
97
|
+
export const SLIDE_PREFIXES = [
|
|
98
|
+
"slide-in-from-left",
|
|
99
|
+
"slide-in-from-right",
|
|
100
|
+
"slide-out-to-left",
|
|
101
|
+
"slide-out-to-right",
|
|
102
|
+
];
|
|
103
|
+
//# sourceMappingURL=mappings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mappings.js","sourceRoot":"","sources":["../../../src/audit/domain/mappings.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Split a class token into [variant, value, modifier], colon/slash-aware of
|
|
3
|
+
* brackets and parens (arbitrary values like data-[side=left] or calc(...)).
|
|
4
|
+
*
|
|
5
|
+
* @since 1.0.0-canary.7
|
|
6
|
+
*/
|
|
7
|
+
export function splitClassName(token) {
|
|
8
|
+
const segments = [];
|
|
9
|
+
let current = "";
|
|
10
|
+
let depth = 0;
|
|
11
|
+
for (const char of token) {
|
|
12
|
+
if (char === "[" || char === "(") {
|
|
13
|
+
depth++;
|
|
14
|
+
}
|
|
15
|
+
else if (char === "]" || char === ")") {
|
|
16
|
+
depth--;
|
|
17
|
+
}
|
|
18
|
+
if (char === ":" && depth === 0) {
|
|
19
|
+
segments.push(current);
|
|
20
|
+
current = "";
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
current += char;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
segments.push(current);
|
|
27
|
+
let value = segments.pop() ?? "";
|
|
28
|
+
const variant = segments.length > 0 ? segments.join(":") : null;
|
|
29
|
+
let modifier = null;
|
|
30
|
+
depth = 0;
|
|
31
|
+
let slashIndex = -1;
|
|
32
|
+
for (let index = 0; index < value.length; index++) {
|
|
33
|
+
const char = value[index];
|
|
34
|
+
if (char === "[" || char === "(") {
|
|
35
|
+
depth++;
|
|
36
|
+
}
|
|
37
|
+
else if (char === "]" || char === ")") {
|
|
38
|
+
depth--;
|
|
39
|
+
}
|
|
40
|
+
else if (char === "/" && depth === 0) {
|
|
41
|
+
slashIndex = index;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
if (slashIndex !== -1) {
|
|
45
|
+
modifier = value.slice(slashIndex + 1);
|
|
46
|
+
value = value.slice(0, slashIndex);
|
|
47
|
+
}
|
|
48
|
+
return [variant, value, modifier];
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Extract string/template literal contents with their line numbers.
|
|
52
|
+
*
|
|
53
|
+
* @since 1.0.0-canary.7
|
|
54
|
+
*/
|
|
55
|
+
export function* stringLiterals(content) {
|
|
56
|
+
const pattern = /"([^"\n]*)"|'([^'\n]*)'|`([^`]*)`/g;
|
|
57
|
+
for (const match of content.matchAll(pattern)) {
|
|
58
|
+
const text = match[1] ?? match[2] ?? match[3] ?? "";
|
|
59
|
+
const line = content.slice(0, match.index).split("\n").length;
|
|
60
|
+
yield { text, line };
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* @since 1.0.0-canary.7
|
|
65
|
+
*/
|
|
66
|
+
export function collectTokens(content) {
|
|
67
|
+
const tokens = [];
|
|
68
|
+
for (const { text, line } of stringLiterals(content)) {
|
|
69
|
+
for (const raw of text.split(/\s+/)) {
|
|
70
|
+
if (!raw || raw.includes("${")) {
|
|
71
|
+
continue;
|
|
72
|
+
}
|
|
73
|
+
const token = raw.endsWith("!") ? raw.slice(0, -1) : raw;
|
|
74
|
+
const [variant, value, modifier] = splitClassName(token);
|
|
75
|
+
if (!value) {
|
|
76
|
+
continue;
|
|
77
|
+
}
|
|
78
|
+
tokens.push({ raw, token, variant, value, modifier, line });
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return tokens;
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=tokenize.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokenize.js","sourceRoot":"","sources":["../../../src/audit/domain/tokenize.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/audit/domain/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { CLI_EXIT_GENERAL_ERROR, CLI_EXIT_SUCCESS } from "#/core/exit-codes";
|
|
2
|
+
import { logger } from "#/core/logger";
|
|
3
|
+
/**
|
|
4
|
+
* Exit `1` when any non-allowlisted violation remains.
|
|
5
|
+
*
|
|
6
|
+
* @since 1.0.0-canary.7
|
|
7
|
+
*/
|
|
8
|
+
export function exitCodeForRtlAuditResult(result) {
|
|
9
|
+
return result.violationCount > 0 ? CLI_EXIT_GENERAL_ERROR : CLI_EXIT_SUCCESS;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Human-readable RTL audit report (matches the former packages/ui script shape).
|
|
13
|
+
*
|
|
14
|
+
* @since 1.0.0-canary.7
|
|
15
|
+
*/
|
|
16
|
+
export function presentRtlAuditResult(result) {
|
|
17
|
+
for (const file of result.files) {
|
|
18
|
+
logger.out(`\n${file.relativePath}`);
|
|
19
|
+
for (const { line, raw, suggestion } of file.violations) {
|
|
20
|
+
logger.out(` ${line}: ${raw} → ${suggestion}`);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
const allowlistSuffix = result.allowlistedCount > 0 ? ` (${result.allowlistedCount} allowlisted)` : "";
|
|
24
|
+
if (result.violationCount > 0) {
|
|
25
|
+
logger.out(`\n✖ ${result.violationCount} RTL violation(s)${allowlistSuffix}`);
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
logger.out(`✓ No physical-direction classes outside the allowlist${allowlistSuffix}`);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Machine-readable RTL audit summary for `--json`.
|
|
33
|
+
*
|
|
34
|
+
* @since 1.0.0-canary.7
|
|
35
|
+
*/
|
|
36
|
+
export function formatRtlAuditJsonOutput(result, rootDir) {
|
|
37
|
+
return JSON.stringify({
|
|
38
|
+
schemaVersion: 1,
|
|
39
|
+
ok: result.violationCount === 0,
|
|
40
|
+
cwd: rootDir,
|
|
41
|
+
result,
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=output.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/audit/output.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC7E,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAEvC;;;;GAIG;AACH,MAAM,UAAU,yBAAyB,CAAC,MAAsB;IAC9D,OAAO,MAAM,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,gBAAgB,CAAC;AAC/E,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CAAC,MAAsB;IAC1D,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QAChC,MAAM,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;QACrC,KAAK,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,UAAU,EAAE,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACxD,MAAM,CAAC,GAAG,CAAC,KAAK,IAAI,KAAK,GAAG,MAAM,UAAU,EAAE,CAAC,CAAC;QAClD,CAAC;IACH,CAAC;IAED,MAAM,eAAe,GAAG,MAAM,CAAC,gBAAgB,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,gBAAgB,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC;IAEvG,IAAI,MAAM,CAAC,cAAc,GAAG,CAAC,EAAE,CAAC;QAC9B,MAAM,CAAC,GAAG,CAAC,OAAO,MAAM,CAAC,cAAc,oBAAoB,eAAe,EAAE,CAAC,CAAC;IAChF,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,GAAG,CAAC,wDAAwD,eAAe,EAAE,CAAC,CAAC;IACxF,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,wBAAwB,CAAC,MAAsB,EAAE,OAAe;IAC9E,OAAO,IAAI,CAAC,SAAS,CAAC;QACpB,aAAa,EAAE,CAAU;QACzB,EAAE,EAAE,MAAM,CAAC,cAAc,KAAK,CAAC;QAC/B,GAAG,EAAE,OAAO;QACZ,MAAM;KACP,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { resolveRepoRelativePath } from "#/audit/cli-schema";
|
|
2
|
+
import { loadCodefastConfig } from "#/core/config";
|
|
3
|
+
import { AppError, messageFrom } from "#/core/errors";
|
|
4
|
+
import { err, ok } from "#/core/result";
|
|
5
|
+
import { findRepoRoot } from "#/core/workspace/resolver";
|
|
6
|
+
/**
|
|
7
|
+
* Load config and resolve the scan target for `audit rtl`.
|
|
8
|
+
*
|
|
9
|
+
* @since 1.0.0-canary.7
|
|
10
|
+
*/
|
|
11
|
+
export async function prepareRtlAudit(fs, args) {
|
|
12
|
+
let rootDir;
|
|
13
|
+
try {
|
|
14
|
+
// Realpath so allowlist keys (`path.relative(rootDir, file)`) stay stable when cwd is a symlink.
|
|
15
|
+
rootDir = fs.canonicalPathSync(findRepoRoot(args.currentWorkingDirectory, fs));
|
|
16
|
+
}
|
|
17
|
+
catch (caughtError) {
|
|
18
|
+
return err(new AppError("INFRA_FAILURE", messageFrom(caughtError), caughtError));
|
|
19
|
+
}
|
|
20
|
+
const loadedOutcome = await loadCodefastConfig(rootDir, fs);
|
|
21
|
+
if (!loadedOutcome.ok) {
|
|
22
|
+
return loadedOutcome;
|
|
23
|
+
}
|
|
24
|
+
const { config } = loadedOutcome.value;
|
|
25
|
+
const rtlConfig = config.audit?.rtl ?? {};
|
|
26
|
+
const targetFromCli = args.rawTarget;
|
|
27
|
+
const targetFromConfig = rtlConfig.target;
|
|
28
|
+
const resolvedTargetInput = targetFromCli ?? targetFromConfig;
|
|
29
|
+
if (resolvedTargetInput === undefined) {
|
|
30
|
+
return err(new AppError("VALIDATION_ERROR", "Missing scan target: pass a path argument or set audit.rtl.target in codefast.config"));
|
|
31
|
+
}
|
|
32
|
+
const targetPath = resolveRepoRelativePath(targetFromCli !== undefined ? args.currentWorkingDirectory : rootDir, resolvedTargetInput);
|
|
33
|
+
if (!fs.existsSync(targetPath)) {
|
|
34
|
+
return err(new AppError("NOT_FOUND", `Not found: ${targetPath}`));
|
|
35
|
+
}
|
|
36
|
+
return ok({
|
|
37
|
+
rootDir,
|
|
38
|
+
targetPath: fs.canonicalPathSync(targetPath),
|
|
39
|
+
allowlist: rtlConfig.allowlist ?? [],
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=prepare.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prepare.js","sourceRoot":"","sources":["../../src/audit/prepare.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAGtD,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAazD;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,EAAkB,EAClB,IAGC;IAED,IAAI,OAAe,CAAC;IACpB,IAAI,CAAC;QACH,iGAAiG;QACjG,OAAO,GAAG,EAAE,CAAC,iBAAiB,CAAC,YAAY,CAAC,IAAI,CAAC,uBAAuB,EAAE,EAAE,CAAC,CAAC,CAAC;IACjF,CAAC;IAAC,OAAO,WAAoB,EAAE,CAAC;QAC9B,OAAO,GAAG,CAAC,IAAI,QAAQ,CAAC,eAAe,EAAE,WAAW,CAAC,WAAW,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC;IACnF,CAAC;IAED,MAAM,aAAa,GAAG,MAAM,kBAAkB,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAC5D,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,CAAC;QACtB,OAAO,aAAa,CAAC;IACvB,CAAC;IACD,MAAM,EAAE,MAAM,EAAE,GAAG,aAAa,CAAC,KAAK,CAAC;IACvC,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,EAAE,GAAG,IAAI,EAAE,CAAC;IAE1C,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC;IACrC,MAAM,gBAAgB,GAAG,SAAS,CAAC,MAAM,CAAC;IAC1C,MAAM,mBAAmB,GAAG,aAAa,IAAI,gBAAgB,CAAC;IAC9D,IAAI,mBAAmB,KAAK,SAAS,EAAE,CAAC;QACtC,OAAO,GAAG,CACR,IAAI,QAAQ,CACV,kBAAkB,EAClB,sFAAsF,CACvF,CACF,CAAC;IACJ,CAAC;IAED,MAAM,UAAU,GAAG,uBAAuB,CACxC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC,OAAO,EACpE,mBAAmB,CACpB,CAAC;IACF,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/B,OAAO,GAAG,CAAC,IAAI,QAAQ,CAAC,WAAW,EAAE,cAAc,UAAU,EAAE,CAAC,CAAC,CAAC;IACpE,CAAC;IAED,OAAO,EAAE,CAAC;QACR,OAAO;QACP,UAAU,EAAE,EAAE,CAAC,iBAAiB,CAAC,UAAU,CAAC;QAC5C,SAAS,EAAE,SAAS,CAAC,SAAS,IAAI,EAAE;KACrC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import { auditFileContent } from "#/audit/domain/audit-file";
|
|
3
|
+
import { AppError, messageFrom } from "#/core/errors";
|
|
4
|
+
import { err, ok } from "#/core/result";
|
|
5
|
+
import { walkTsxFiles } from "#/core/workspace/typescript-walk";
|
|
6
|
+
/**
|
|
7
|
+
* Scan a target path for physical-direction Tailwind class violations.
|
|
8
|
+
*
|
|
9
|
+
* @since 1.0.0-canary.7
|
|
10
|
+
*/
|
|
11
|
+
export function runRtlAudit(fs, args) {
|
|
12
|
+
try {
|
|
13
|
+
const allowlist = new Set(args.allowlist);
|
|
14
|
+
// Caller passes canonical roots (prepareRtlAudit realpaths them) so relative() keys stay stable.
|
|
15
|
+
const { rootDir, targetPath } = args;
|
|
16
|
+
const filesToScan = collectScanPaths(fs, targetPath);
|
|
17
|
+
const files = [];
|
|
18
|
+
let violationCount = 0;
|
|
19
|
+
let allowlistedCount = 0;
|
|
20
|
+
for (const absolutePath of filesToScan) {
|
|
21
|
+
const relativePath = toPosixPath(path.relative(rootDir, absolutePath));
|
|
22
|
+
const content = fs.readFileSync(absolutePath, "utf8");
|
|
23
|
+
const remaining = auditFileContent(content).filter(({ raw }) => {
|
|
24
|
+
const isAllowed = allowlist.has(raw) || allowlist.has(`${relativePath}:${raw}`);
|
|
25
|
+
if (isAllowed) {
|
|
26
|
+
allowlistedCount++;
|
|
27
|
+
}
|
|
28
|
+
return !isAllowed;
|
|
29
|
+
});
|
|
30
|
+
if (remaining.length === 0) {
|
|
31
|
+
continue;
|
|
32
|
+
}
|
|
33
|
+
violationCount += remaining.length;
|
|
34
|
+
files.push({ relativePath, violations: remaining });
|
|
35
|
+
}
|
|
36
|
+
return ok({
|
|
37
|
+
files,
|
|
38
|
+
violationCount,
|
|
39
|
+
allowlistedCount,
|
|
40
|
+
scannedFileCount: filesToScan.length,
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
catch (caughtError) {
|
|
44
|
+
return err(new AppError("INFRA_FAILURE", messageFrom(caughtError), caughtError));
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
function collectScanPaths(fs, targetPath) {
|
|
48
|
+
const stats = fs.statSync(targetPath);
|
|
49
|
+
if (stats.isFile()) {
|
|
50
|
+
return [targetPath];
|
|
51
|
+
}
|
|
52
|
+
return walkTsxFiles(targetPath, fs);
|
|
53
|
+
}
|
|
54
|
+
function toPosixPath(filePath) {
|
|
55
|
+
return filePath.split(path.sep).join("/");
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=run.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/audit/run.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAE7D,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAGtD,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAEhE;;;;GAIG;AACH,MAAM,UAAU,WAAW,CACzB,EAAkB,EAClB,IAIC;IAED,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC1C,iGAAiG;QACjG,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC;QACrC,MAAM,WAAW,GAAG,gBAAgB,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;QACrD,MAAM,KAAK,GAA6B,EAAE,CAAC;QAC3C,IAAI,cAAc,GAAG,CAAC,CAAC;QACvB,IAAI,gBAAgB,GAAG,CAAC,CAAC;QAEzB,KAAK,MAAM,YAAY,IAAI,WAAW,EAAE,CAAC;YACvC,MAAM,YAAY,GAAG,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC;YACvE,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;YACtD,MAAM,SAAS,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE;gBAC7D,MAAM,SAAS,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC,GAAG,CAAC,GAAG,YAAY,IAAI,GAAG,EAAE,CAAC,CAAC;gBAChF,IAAI,SAAS,EAAE,CAAC;oBACd,gBAAgB,EAAE,CAAC;gBACrB,CAAC;gBACD,OAAO,CAAC,SAAS,CAAC;YACpB,CAAC,CAAC,CAAC;YACH,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC3B,SAAS;YACX,CAAC;YACD,cAAc,IAAI,SAAS,CAAC,MAAM,CAAC;YACnC,KAAK,CAAC,IAAI,CAAC,EAAE,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC;QACtD,CAAC;QAED,OAAO,EAAE,CAAC;YACR,KAAK;YACL,cAAc;YACd,gBAAgB;YAChB,gBAAgB,EAAE,WAAW,CAAC,MAAM;SACrC,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,WAAoB,EAAE,CAAC;QAC9B,OAAO,GAAG,CAAC,IAAI,QAAQ,CAAC,eAAe,EAAE,WAAW,CAAC,WAAW,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC;IACnF,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,EAAkB,EAAE,UAAkB;IAC9D,MAAM,KAAK,GAAG,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IACtC,IAAI,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;QACnB,OAAO,CAAC,UAAU,CAAC,CAAC;IACtB,CAAC;IACD,OAAO,YAAY,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;AACtC,CAAC;AAED,SAAS,WAAW,CAAC,QAAgB;IACnC,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC5C,CAAC"}
|
package/dist/{bin.mjs → bin.js}
RENAMED
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { runCli } from "./cli.mjs";
|
|
3
2
|
import process from "node:process";
|
|
4
|
-
|
|
3
|
+
import { runCli } from "#/cli";
|
|
5
4
|
const code = await runCli(process.argv);
|
|
6
5
|
process.exit(code);
|
|
7
|
-
//#
|
|
8
|
-
export {};
|
|
6
|
+
//# sourceMappingURL=bin.js.map
|
package/dist/bin.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":";AACA,OAAO,OAAO,MAAM,cAAc,CAAC;AAEnC,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAE/B,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACxC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC"}
|
package/dist/cli.js
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { readFileSync } from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import process from "node:process";
|
|
4
|
+
import { fileURLToPath } from "node:url";
|
|
5
|
+
import { Command } from "commander";
|
|
6
|
+
import { createArrangeCommand } from "#/arrange/command";
|
|
7
|
+
import { createAuditCommand } from "#/audit/command";
|
|
8
|
+
import { createMirrorCommand } from "#/mirror/command";
|
|
9
|
+
import { createTagCommand } from "#/tag/command";
|
|
10
|
+
function readVersion() {
|
|
11
|
+
try {
|
|
12
|
+
const dir = path.dirname(fileURLToPath(import.meta.url));
|
|
13
|
+
const pkgPath = path.join(dir, "..", "package.json");
|
|
14
|
+
const raw = readFileSync(pkgPath, "utf-8");
|
|
15
|
+
const pkgVersion = JSON.parse(raw).version;
|
|
16
|
+
return typeof pkgVersion === "string" && pkgVersion.length > 0 ? pkgVersion : "unknown";
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
return "unknown";
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* @since 0.3.16-canary.0
|
|
24
|
+
*/
|
|
25
|
+
export async function runCli(argv) {
|
|
26
|
+
const program = new Command();
|
|
27
|
+
program
|
|
28
|
+
.name("codefast")
|
|
29
|
+
.description("Codefast monorepo developer CLI")
|
|
30
|
+
.version(readVersion())
|
|
31
|
+
.option("--no-color", "Disable ANSI color output")
|
|
32
|
+
// Required so options after a subcommand bind to that subcommand rather than
|
|
33
|
+
// the program — e.g. `arrange inspect <target> --json` (see arrange/command.ts).
|
|
34
|
+
.enablePositionalOptions()
|
|
35
|
+
.configureHelp({ sortSubcommands: true })
|
|
36
|
+
.showHelpAfterError("(use --help for usage)");
|
|
37
|
+
program.addCommand(createArrangeCommand());
|
|
38
|
+
program.addCommand(createAuditCommand());
|
|
39
|
+
program.addCommand(createMirrorCommand());
|
|
40
|
+
program.addCommand(createTagCommand());
|
|
41
|
+
await program.parseAsync(argv, { from: "node" });
|
|
42
|
+
const code = process.exitCode ?? 0;
|
|
43
|
+
return typeof code === "number" ? code : Number(code) || 0;
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,OAAO,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEjD,SAAS,WAAW;IAClB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QACzD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;QACrD,MAAM,GAAG,GAAG,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC3C,MAAM,UAAU,GAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAA2B,CAAC,OAAO,CAAC;QACtE,OAAO,OAAO,UAAU,KAAK,QAAQ,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;IAC1F,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,IAAmB;IAC9C,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAC9B,OAAO;SACJ,IAAI,CAAC,UAAU,CAAC;SAChB,WAAW,CAAC,iCAAiC,CAAC;SAC9C,OAAO,CAAC,WAAW,EAAE,CAAC;SACtB,MAAM,CAAC,YAAY,EAAE,2BAA2B,CAAC;QAClD,6EAA6E;QAC7E,iFAAiF;SAChF,uBAAuB,EAAE;SACzB,aAAa,CAAC,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC;SACxC,kBAAkB,CAAC,wBAAwB,CAAC,CAAC;IAEhD,OAAO,CAAC,UAAU,CAAC,oBAAoB,EAAE,CAAC,CAAC;IAC3C,OAAO,CAAC,UAAU,CAAC,kBAAkB,EAAE,CAAC,CAAC;IACzC,OAAO,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAC,CAAC;IAC1C,OAAO,CAAC,UAAU,CAAC,gBAAgB,EAAE,CAAC,CAAC;IAEvC,MAAM,OAAO,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IACjD,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,IAAI,CAAC,CAAC;IACnC,OAAO,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC7D,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @since 0.3.16-canary.0
|
|
3
|
+
*/
|
|
4
|
+
export function formatAppError(error) {
|
|
5
|
+
const { code, message } = error;
|
|
6
|
+
switch (code) {
|
|
7
|
+
case "NOT_FOUND":
|
|
8
|
+
return `[NOT_FOUND] ${message}`;
|
|
9
|
+
case "VALIDATION_ERROR":
|
|
10
|
+
return `[VALIDATION_ERROR] ${message}`;
|
|
11
|
+
case "INFRA_FAILURE":
|
|
12
|
+
return `[INFRA_FAILURE] ${message}`;
|
|
13
|
+
default: {
|
|
14
|
+
const exhaustive = code;
|
|
15
|
+
return `Unhandled error code: ${String(exhaustive)}`;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=format-error.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format-error.js","sourceRoot":"","sources":["../../../src/core/cli/format-error.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,KAAe;IAC5C,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC;IAChC,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,WAAW;YACd,OAAO,eAAe,OAAO,EAAE,CAAC;QAClC,KAAK,kBAAkB;YACrB,OAAO,sBAAsB,OAAO,EAAE,CAAC;QACzC,KAAK,eAAe;YAClB,OAAO,mBAAmB,OAAO,EAAE,CAAC;QACtC,SAAS,CAAC;YACR,MAAM,UAAU,GAAU,IAAI,CAAC;YAC/B,OAAO,yBAAyB,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;QACvD,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
/**
|
|
3
|
+
* Commander global opts shape validated before mirror prelude (`color` from `--no-color`).
|
|
4
|
+
*
|
|
5
|
+
* @since 0.3.16-canary.0
|
|
6
|
+
*/
|
|
7
|
+
export const globalCliCommanderOptionsSchema = z.object({
|
|
8
|
+
color: z.boolean().optional(),
|
|
9
|
+
});
|
|
10
|
+
//# sourceMappingURL=global-options.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"global-options.js","sourceRoot":"","sources":["../../../src/core/cli/global-options.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;;GAIG;AACH,MAAM,CAAC,MAAM,+BAA+B,GAAG,CAAC,CAAC,MAAM,CAAC;IACtD,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;CAC9B,CAAC,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Coerce a raw Commander positional argument to a string, or undefined when absent.
|
|
3
|
+
*
|
|
4
|
+
* @since 0.3.16-canary.0
|
|
5
|
+
*/
|
|
6
|
+
export function readOptionalPositionalArg(candidate) {
|
|
7
|
+
return typeof candidate === "string" ? candidate : undefined;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=positional.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"positional.js","sourceRoot":"","sources":["../../../src/core/cli/positional.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,UAAU,yBAAyB,CAAC,SAAkB;IAC1D,OAAO,OAAO,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;AAC/D,CAAC"}
|