@codefast/cli 0.5.0-canary.5 → 0.5.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 +25 -20
- 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,25 @@
|
|
|
1
|
+
import { accumulateAnalyzeReportForSourceFile, createEmptyAnalyzeReport } from "#/arrange/domain/analyze-service";
|
|
2
|
+
import { scanArrangeTargets } from "#/arrange/scan-target";
|
|
3
|
+
import { parseDomainSourceFile } from "#/arrange/source-parse";
|
|
4
|
+
import { AppError } from "#/core/errors";
|
|
5
|
+
import { messageFrom } from "#/core/errors";
|
|
6
|
+
import { err, ok } from "#/core/result";
|
|
7
|
+
/**
|
|
8
|
+
* @since 0.3.16-canary.0
|
|
9
|
+
*/
|
|
10
|
+
export function analyzeDirectory(fs, analyzeRootPath) {
|
|
11
|
+
const report = createEmptyAnalyzeReport();
|
|
12
|
+
try {
|
|
13
|
+
const files = scanArrangeTargets(fs, analyzeRootPath);
|
|
14
|
+
for (const filePath of files) {
|
|
15
|
+
const sourceText = fs.readFileSync(filePath, "utf8");
|
|
16
|
+
const domainSf = parseDomainSourceFile(filePath, sourceText);
|
|
17
|
+
accumulateAnalyzeReportForSourceFile(report, domainSf, sourceText, filePath);
|
|
18
|
+
}
|
|
19
|
+
return ok(report);
|
|
20
|
+
}
|
|
21
|
+
catch (caughtError) {
|
|
22
|
+
return err(new AppError("INFRA_FAILURE", messageFrom(caughtError), caughtError));
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=analyze.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analyze.js","sourceRoot":"","sources":["../../src/arrange/analyze.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oCAAoC,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAElH,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAG5C,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,eAAe,CAAC;AAExC;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,EAAkB,EAAE,eAAuB;IAC1E,MAAM,MAAM,GAAG,wBAAwB,EAAE,CAAC;IAC1C,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,kBAAkB,CAAC,EAAE,EAAE,eAAe,CAAC,CAAC;QACtD,KAAK,MAAM,QAAQ,IAAI,KAAK,EAAE,CAAC;YAC7B,MAAM,UAAU,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YACrD,MAAM,QAAQ,GAAG,qBAAqB,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;YAC7D,oCAAoC,CAAC,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;QAC/E,CAAC;QACD,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC;IACpB,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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
/**
|
|
3
|
+
* @since 0.3.16-canary.0
|
|
4
|
+
*/
|
|
5
|
+
export const arrangeAnalyzeDirectoryRequestSchema = z.object({
|
|
6
|
+
analyzeRootPath: z.string().min(1, "analyzeRootPath is required"),
|
|
7
|
+
});
|
|
8
|
+
/**
|
|
9
|
+
* @since 0.3.16-canary.0
|
|
10
|
+
*/
|
|
11
|
+
export const arrangeSyncRunRequestSchema = z.object({
|
|
12
|
+
rootDir: z.string().min(1),
|
|
13
|
+
targetPath: z.string().min(1),
|
|
14
|
+
write: z.boolean(),
|
|
15
|
+
withClassName: z.boolean().optional(),
|
|
16
|
+
cnImport: z.string().optional(),
|
|
17
|
+
config: z.unknown().optional(),
|
|
18
|
+
});
|
|
19
|
+
/**
|
|
20
|
+
* @since 0.3.16-canary.0
|
|
21
|
+
*/
|
|
22
|
+
export const arrangeSuggestGroupsRequestSchema = z.object({
|
|
23
|
+
inlineClasses: z
|
|
24
|
+
.string()
|
|
25
|
+
.min(1, 'Pass a class string. Example: codefast arrange group "flex gap-2 text-sm rounded-md"'),
|
|
26
|
+
emitTvStyleArray: z.boolean(),
|
|
27
|
+
trailingClassName: z.boolean(),
|
|
28
|
+
});
|
|
29
|
+
//# sourceMappingURL=cli-schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-schema.js","sourceRoot":"","sources":["../../src/arrange/cli-schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AA8BxB;;GAEG;AACH,MAAM,CAAC,MAAM,oCAAoC,GAA8C,CAAC,CAAC,MAAM,CAAC;IACtG,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,6BAA6B,CAAC;CAClE,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAqC,CAAC,CAAC,MAAM,CAAC;IACpF,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1B,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7B,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE;IAClB,aAAa,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IACrC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC/B,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;CAC/B,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,iCAAiC,GAA2C,CAAC,CAAC,MAAM,CAAC;IAChG,aAAa,EAAE,CAAC;SACb,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,EAAE,sFAAsF,CAAC;IACjG,gBAAgB,EAAE,CAAC,CAAC,OAAO,EAAE;IAC7B,iBAAiB,EAAE,CAAC,CAAC,OAAO,EAAE;CAC/B,CAAC,CAAC"}
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
import process from "node:process";
|
|
2
|
+
import { Command } from "commander";
|
|
3
|
+
import { analyzeDirectory } from "#/arrange/analyze";
|
|
4
|
+
import { arrangeAnalyzeDirectoryRequestSchema, arrangeSuggestGroupsRequestSchema, arrangeSyncRunRequestSchema, } from "#/arrange/cli-schema";
|
|
5
|
+
import { printAnalyzeReport, printGroupFilePreviewFromWork, printSimplifyResult, printSyncResult, } from "#/arrange/output";
|
|
6
|
+
import { runArrangeSimplify } from "#/arrange/simplify-sync";
|
|
7
|
+
import { suggestCnGroupsFromCli } from "#/arrange/suggest";
|
|
8
|
+
import { runArrangeSync } from "#/arrange/sync";
|
|
9
|
+
import { prepareArrangeWorkspace } from "#/arrange/workspace";
|
|
10
|
+
import { readOptionalPositionalArg } from "#/core/cli/positional";
|
|
11
|
+
import { consumeCliAppError, runCliResultAsync } from "#/core/cli/result-handle";
|
|
12
|
+
import { CLI_EXIT_GENERAL_ERROR, CLI_EXIT_SUCCESS } from "#/core/exit-codes";
|
|
13
|
+
import { nodeFilesystem } from "#/core/filesystem/node";
|
|
14
|
+
import { logger } from "#/core/logger";
|
|
15
|
+
import { parseWithSchema } from "#/core/schema-parse";
|
|
16
|
+
/**
|
|
17
|
+
* @since 0.3.16-canary.0
|
|
18
|
+
*/
|
|
19
|
+
export function createArrangeCommand() {
|
|
20
|
+
const cmd = new Command("arrange")
|
|
21
|
+
.description("Regroup Tailwind classes in cn() / tv() calls in render-pipeline order")
|
|
22
|
+
// The parent action shares option names (--json) with subcommands; positional
|
|
23
|
+
// options ensure tokens after a subcommand bind to that subcommand, not the parent.
|
|
24
|
+
.enablePositionalOptions()
|
|
25
|
+
.argument("[target]", "Directory or file (default: nearest package directory from cwd)")
|
|
26
|
+
.option("--dry-run", "Preview suggested replacements without writing files", false)
|
|
27
|
+
.option("--with-classname, --with-class-name", "Append className as final cn() argument", false)
|
|
28
|
+
.option("--cn-import <spec>", "Override module specifier when adding cn import")
|
|
29
|
+
.option("--json", "Print one JSON object on stdout (suppresses human progress)", false)
|
|
30
|
+
.action(async (target, opts) => {
|
|
31
|
+
const write = !opts.dryRun;
|
|
32
|
+
const prelude = await prepareArrangeWorkspace(nodeFilesystem, {
|
|
33
|
+
currentWorkingDirectory: process.cwd(),
|
|
34
|
+
rawTarget: readOptionalPositionalArg(target),
|
|
35
|
+
});
|
|
36
|
+
if (!consumeCliAppError(prelude)) {
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
const { resolvedTarget, rootDir, config } = prelude.value;
|
|
40
|
+
const parsed = parseWithSchema(arrangeSyncRunRequestSchema, {
|
|
41
|
+
rootDir,
|
|
42
|
+
targetPath: resolvedTarget,
|
|
43
|
+
write,
|
|
44
|
+
withClassName: opts.withClassName,
|
|
45
|
+
cnImport: opts.cnImport,
|
|
46
|
+
config: config.arrange ?? {},
|
|
47
|
+
});
|
|
48
|
+
if (!consumeCliAppError(parsed)) {
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
await runCliResultAsync(runArrangeSync(nodeFilesystem, parsed.value), (value) => {
|
|
52
|
+
if (!write) {
|
|
53
|
+
for (const plan of value.previewPlans) {
|
|
54
|
+
printGroupFilePreviewFromWork(plan);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
if (opts.json) {
|
|
58
|
+
logger.out(formatArrangeSyncJsonOutput(value, write));
|
|
59
|
+
return exitCodeForArrangeSyncResult(value);
|
|
60
|
+
}
|
|
61
|
+
printSyncResult(value, write);
|
|
62
|
+
return exitCodeForArrangeSyncResult(value);
|
|
63
|
+
});
|
|
64
|
+
});
|
|
65
|
+
cmd
|
|
66
|
+
.command("inspect")
|
|
67
|
+
.description("Report long strings, nested cn in tv(), and related findings (read-only)")
|
|
68
|
+
.argument("[target]", "Directory or file (default: nearest package directory from cwd)")
|
|
69
|
+
.option("--json", "Print one JSON object on stdout instead of a human report", false)
|
|
70
|
+
.action(async (target, opts) => {
|
|
71
|
+
const prelude = await prepareArrangeWorkspace(nodeFilesystem, {
|
|
72
|
+
currentWorkingDirectory: process.cwd(),
|
|
73
|
+
rawTarget: readOptionalPositionalArg(target),
|
|
74
|
+
});
|
|
75
|
+
if (!consumeCliAppError(prelude)) {
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
const { resolvedTarget } = prelude.value;
|
|
79
|
+
const parsed = parseWithSchema(arrangeAnalyzeDirectoryRequestSchema, {
|
|
80
|
+
analyzeRootPath: resolvedTarget,
|
|
81
|
+
});
|
|
82
|
+
if (!consumeCliAppError(parsed)) {
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
const outcome = analyzeDirectory(nodeFilesystem, parsed.value.analyzeRootPath);
|
|
86
|
+
if (!consumeCliAppError(outcome)) {
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
if (opts.json) {
|
|
90
|
+
logger.out(formatArrangeAnalyzeJsonOutput(resolvedTarget, outcome.value));
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
printAnalyzeReport(resolvedTarget, outcome.value);
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
cmd
|
|
97
|
+
.command("simplify")
|
|
98
|
+
.description("Flatten grouped arrays and static-only cn() calls back to plain strings in tv() slots")
|
|
99
|
+
.argument("[target]", "Directory or file (default: nearest package directory from cwd)")
|
|
100
|
+
.option("--dry-run", "Show what simplify would change without writing files", false)
|
|
101
|
+
.option("--json", "Print one JSON object on stdout (suppresses human progress)", false)
|
|
102
|
+
.action(async (target, opts) => {
|
|
103
|
+
const write = !opts.dryRun;
|
|
104
|
+
const prelude = await prepareArrangeWorkspace(nodeFilesystem, {
|
|
105
|
+
currentWorkingDirectory: process.cwd(),
|
|
106
|
+
rawTarget: readOptionalPositionalArg(target),
|
|
107
|
+
});
|
|
108
|
+
if (!consumeCliAppError(prelude)) {
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
const { resolvedTarget } = prelude.value;
|
|
112
|
+
await runCliResultAsync(runArrangeSimplify(nodeFilesystem, { targetPath: resolvedTarget, write }), (value) => {
|
|
113
|
+
if (opts.json) {
|
|
114
|
+
logger.out(JSON.stringify({ schemaVersion: 1, ok: true, write, result: value }));
|
|
115
|
+
return CLI_EXIT_SUCCESS;
|
|
116
|
+
}
|
|
117
|
+
printSimplifyResult(value, write);
|
|
118
|
+
return CLI_EXIT_SUCCESS;
|
|
119
|
+
});
|
|
120
|
+
});
|
|
121
|
+
cmd
|
|
122
|
+
.command("group")
|
|
123
|
+
.description("Try grouping on a pasted class string (stdout: cn(...) or tv array with --tv)")
|
|
124
|
+
.argument("<tokens...>", "Class tokens (quote a single string if it contains spaces)")
|
|
125
|
+
.option("--tv", "Emit tv()-style array instead of cn() call", false)
|
|
126
|
+
.option("--with-classname, --with-class-name", "Append className as final cn() argument", false)
|
|
127
|
+
.option("--json", "Print one JSON object on stdout instead of plain lines", false)
|
|
128
|
+
.action(async (classTokenSeries, opts) => {
|
|
129
|
+
const parsed = parseWithSchema(arrangeSuggestGroupsRequestSchema, {
|
|
130
|
+
inlineClasses: classTokenSeries.join(" ").trim(),
|
|
131
|
+
emitTvStyleArray: !!opts.tv,
|
|
132
|
+
trailingClassName: !!opts.withClassName,
|
|
133
|
+
});
|
|
134
|
+
if (!consumeCliAppError(parsed)) {
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
const output = suggestCnGroupsFromCli(parsed.value);
|
|
138
|
+
if (opts.json) {
|
|
139
|
+
logger.out(formatArrangeGroupJsonOutput(output));
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
142
|
+
logger.out(output.primaryLine);
|
|
143
|
+
logger.out(output.bucketsCommentLine);
|
|
144
|
+
}
|
|
145
|
+
});
|
|
146
|
+
return cmd;
|
|
147
|
+
}
|
|
148
|
+
function formatArrangeAnalyzeJsonOutput(analyzeRootPath, report) {
|
|
149
|
+
return JSON.stringify({ schemaVersion: 1, analyzeRootPath, report });
|
|
150
|
+
}
|
|
151
|
+
function formatArrangeSyncJsonOutput(result, write) {
|
|
152
|
+
const { previewPlans: _plans, ...serializableResult } = result;
|
|
153
|
+
return JSON.stringify({
|
|
154
|
+
schemaVersion: 1,
|
|
155
|
+
ok: result.hookError === null,
|
|
156
|
+
write,
|
|
157
|
+
result: serializableResult,
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
function formatArrangeGroupJsonOutput(output) {
|
|
161
|
+
return JSON.stringify({
|
|
162
|
+
schemaVersion: 1,
|
|
163
|
+
primaryLine: output.primaryLine,
|
|
164
|
+
bucketsCommentLine: output.bucketsCommentLine,
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
function exitCodeForArrangeSyncResult(result) {
|
|
168
|
+
return result.hookError !== null ? CLI_EXIT_GENERAL_ERROR : CLI_EXIT_SUCCESS;
|
|
169
|
+
}
|
|
170
|
+
//# sourceMappingURL=command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command.js","sourceRoot":"","sources":["../../src/arrange/command.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Rich domain: Tailwind/cn/tv analysis rules (counts, long literals, nested cn in tv).
|
|
3
|
+
* Pure orchestration of domain collectors and invariants — no I/O.
|
|
4
|
+
*/
|
|
5
|
+
import { isDomainCallExpression, isDomainJsxAttribute, isDomainObjectLiteralExpression, forEachDomainChild, } from "#/arrange/domain/ast/ast-node";
|
|
6
|
+
import { forEachStringLiteralInClassExpression } from "#/arrange/domain/ast/collectors-cn";
|
|
7
|
+
import { jsxClassNameStaticLiteral } from "#/arrange/domain/ast/collectors-jsx";
|
|
8
|
+
import { collectCnCallsInsideTv, traverseTvObject } from "#/arrange/domain/ast/collectors-tv";
|
|
9
|
+
import { buildKnownCnTvBindings, isCnOrTvIdentifier, lineOf } from "#/arrange/domain/ast/helpers";
|
|
10
|
+
import { LONG_STRING_TOKEN_THRESHOLD } from "#/arrange/domain/constants";
|
|
11
|
+
import { tokenizeClassString } from "#/arrange/domain/tailwind-token";
|
|
12
|
+
const PREVIEW_MAX_LENGTH = 72;
|
|
13
|
+
function previewText(text) {
|
|
14
|
+
return text.length > PREVIEW_MAX_LENGTH ? `${text.slice(0, PREVIEW_MAX_LENGTH)}…` : text;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* @since 0.3.16-canary.0
|
|
18
|
+
*/
|
|
19
|
+
export function createEmptyAnalyzeReport() {
|
|
20
|
+
return {
|
|
21
|
+
files: 0,
|
|
22
|
+
cnCallExpressions: 0,
|
|
23
|
+
tvCallExpressions: 0,
|
|
24
|
+
cnInsideTvCalls: [],
|
|
25
|
+
longCnStringLiterals: [],
|
|
26
|
+
longTvStringLiterals: [],
|
|
27
|
+
longJsxClassNameLiterals: [],
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
function analyzeCnCall(domainSf, call, report) {
|
|
31
|
+
for (const arg of call.arguments) {
|
|
32
|
+
forEachStringLiteralInClassExpression(arg, (lit) => {
|
|
33
|
+
const text = lit.text;
|
|
34
|
+
const tokenCount = tokenizeClassString(text).length;
|
|
35
|
+
if (tokenCount >= LONG_STRING_TOKEN_THRESHOLD) {
|
|
36
|
+
report.longCnStringLiterals.push({
|
|
37
|
+
file: domainSf.fileName,
|
|
38
|
+
line: lineOf(domainSf, lit),
|
|
39
|
+
tokenCount,
|
|
40
|
+
preview: previewText(text),
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
function visitCallExpressionForArrangeAnalyze(callExpression, domainSf, sourceText, knownBindings, report) {
|
|
47
|
+
if (isCnOrTvIdentifier(callExpression.expression, "cn", knownBindings)) {
|
|
48
|
+
report.cnCallExpressions++;
|
|
49
|
+
analyzeCnCall(domainSf, callExpression, report);
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
if (!isCnOrTvIdentifier(callExpression.expression, "tv", knownBindings)) {
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
report.tvCallExpressions++;
|
|
56
|
+
const arg0 = callExpression.arguments[0];
|
|
57
|
+
if (!arg0 || !isDomainObjectLiteralExpression(arg0)) {
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
for (const nestedCn of collectCnCallsInsideTv(domainSf, arg0, knownBindings, 0)) {
|
|
61
|
+
const src = sourceText.slice(nestedCn.pos, nestedCn.end);
|
|
62
|
+
report.cnInsideTvCalls.push({
|
|
63
|
+
file: domainSf.fileName,
|
|
64
|
+
line: lineOf(domainSf, nestedCn),
|
|
65
|
+
argCount: nestedCn.arguments.length,
|
|
66
|
+
preview: previewText(src),
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
traverseTvObject(domainSf, arg0, (classLiteral) => {
|
|
70
|
+
const text = classLiteral.text;
|
|
71
|
+
const tokenCount = tokenizeClassString(text).length;
|
|
72
|
+
if (tokenCount >= LONG_STRING_TOKEN_THRESHOLD) {
|
|
73
|
+
report.longTvStringLiterals.push({
|
|
74
|
+
file: domainSf.fileName,
|
|
75
|
+
line: lineOf(domainSf, classLiteral),
|
|
76
|
+
tokenCount,
|
|
77
|
+
preview: previewText(text),
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
}, 0, knownBindings);
|
|
81
|
+
}
|
|
82
|
+
function visitJsxAttributeForArrangeAnalyze(jsxClassAttribute, domainSf, filePath, report) {
|
|
83
|
+
if (!filePath.endsWith(".tsx")) {
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
const parsed = jsxClassNameStaticLiteral(jsxClassAttribute);
|
|
87
|
+
if (!parsed) {
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
const text = parsed.lit.text;
|
|
91
|
+
const tokenCount = tokenizeClassString(text).length;
|
|
92
|
+
if (tokenCount >= LONG_STRING_TOKEN_THRESHOLD) {
|
|
93
|
+
report.longJsxClassNameLiterals.push({
|
|
94
|
+
file: domainSf.fileName,
|
|
95
|
+
line: lineOf(domainSf, parsed.lit),
|
|
96
|
+
tokenCount,
|
|
97
|
+
preview: previewText(text),
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Accumulates findings for one parsed source file into `report` (mutates report).
|
|
103
|
+
*
|
|
104
|
+
* @since 0.3.16-canary.0
|
|
105
|
+
*/
|
|
106
|
+
export function accumulateAnalyzeReportForSourceFile(report, domainSf, sourceText, filePath) {
|
|
107
|
+
report.files++;
|
|
108
|
+
const knownBindings = buildKnownCnTvBindings(domainSf);
|
|
109
|
+
const visitTypeScriptSubtree = (tsNode) => {
|
|
110
|
+
if (isDomainCallExpression(tsNode)) {
|
|
111
|
+
visitCallExpressionForArrangeAnalyze(tsNode, domainSf, sourceText, knownBindings, report);
|
|
112
|
+
}
|
|
113
|
+
if (isDomainJsxAttribute(tsNode)) {
|
|
114
|
+
visitJsxAttributeForArrangeAnalyze(tsNode, domainSf, filePath, report);
|
|
115
|
+
}
|
|
116
|
+
forEachDomainChild(tsNode, visitTypeScriptSubtree);
|
|
117
|
+
};
|
|
118
|
+
for (const stmt of domainSf.statements) {
|
|
119
|
+
visitTypeScriptSubtree(stmt);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=analyze-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analyze-service.js","sourceRoot":"","sources":["../../../src/arrange/domain/analyze-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure-domain AST shapes for arrange analysis. No TypeScript compiler types.
|
|
3
|
+
* Positions mirror `getStart(sourceFile)` / `getEnd()` semantics from translation.
|
|
4
|
+
*
|
|
5
|
+
* @since 0.3.16-canary.0
|
|
6
|
+
*/
|
|
7
|
+
export var DomainSyntaxKind;
|
|
8
|
+
(function (DomainSyntaxKind) {
|
|
9
|
+
DomainSyntaxKind[DomainSyntaxKind["Unknown"] = 1] = "Unknown";
|
|
10
|
+
DomainSyntaxKind[DomainSyntaxKind["Identifier"] = 2] = "Identifier";
|
|
11
|
+
DomainSyntaxKind[DomainSyntaxKind["StringLiteral"] = 3] = "StringLiteral";
|
|
12
|
+
DomainSyntaxKind[DomainSyntaxKind["NoSubstitutionTemplateLiteral"] = 4] = "NoSubstitutionTemplateLiteral";
|
|
13
|
+
DomainSyntaxKind[DomainSyntaxKind["ImportDeclaration"] = 5] = "ImportDeclaration";
|
|
14
|
+
DomainSyntaxKind[DomainSyntaxKind["ImportClause"] = 6] = "ImportClause";
|
|
15
|
+
DomainSyntaxKind[DomainSyntaxKind["NamedImports"] = 7] = "NamedImports";
|
|
16
|
+
DomainSyntaxKind[DomainSyntaxKind["NamespaceImport"] = 8] = "NamespaceImport";
|
|
17
|
+
DomainSyntaxKind[DomainSyntaxKind["ImportSpecifier"] = 9] = "ImportSpecifier";
|
|
18
|
+
DomainSyntaxKind[DomainSyntaxKind["CallExpression"] = 10] = "CallExpression";
|
|
19
|
+
DomainSyntaxKind[DomainSyntaxKind["PropertyAccessExpression"] = 11] = "PropertyAccessExpression";
|
|
20
|
+
DomainSyntaxKind[DomainSyntaxKind["ObjectLiteralExpression"] = 12] = "ObjectLiteralExpression";
|
|
21
|
+
DomainSyntaxKind[DomainSyntaxKind["PropertyAssignment"] = 13] = "PropertyAssignment";
|
|
22
|
+
DomainSyntaxKind[DomainSyntaxKind["ArrayLiteralExpression"] = 14] = "ArrayLiteralExpression";
|
|
23
|
+
DomainSyntaxKind[DomainSyntaxKind["SpreadElement"] = 15] = "SpreadElement";
|
|
24
|
+
DomainSyntaxKind[DomainSyntaxKind["ParenthesizedExpression"] = 16] = "ParenthesizedExpression";
|
|
25
|
+
DomainSyntaxKind[DomainSyntaxKind["AsExpression"] = 17] = "AsExpression";
|
|
26
|
+
DomainSyntaxKind[DomainSyntaxKind["SatisfiesExpression"] = 18] = "SatisfiesExpression";
|
|
27
|
+
DomainSyntaxKind[DomainSyntaxKind["NonNullExpression"] = 19] = "NonNullExpression";
|
|
28
|
+
DomainSyntaxKind[DomainSyntaxKind["ConditionalExpression"] = 20] = "ConditionalExpression";
|
|
29
|
+
DomainSyntaxKind[DomainSyntaxKind["BinaryExpression"] = 21] = "BinaryExpression";
|
|
30
|
+
DomainSyntaxKind[DomainSyntaxKind["ExpressionStatement"] = 22] = "ExpressionStatement";
|
|
31
|
+
DomainSyntaxKind[DomainSyntaxKind["JsxAttribute"] = 23] = "JsxAttribute";
|
|
32
|
+
DomainSyntaxKind[DomainSyntaxKind["JsxExpression"] = 24] = "JsxExpression";
|
|
33
|
+
})(DomainSyntaxKind || (DomainSyntaxKind = {}));
|
|
34
|
+
/**
|
|
35
|
+
* @since 0.3.16-canary.0
|
|
36
|
+
*/
|
|
37
|
+
export var DomainBinaryOperator;
|
|
38
|
+
(function (DomainBinaryOperator) {
|
|
39
|
+
DomainBinaryOperator[DomainBinaryOperator["Plus"] = 0] = "Plus";
|
|
40
|
+
DomainBinaryOperator[DomainBinaryOperator["Other"] = 1] = "Other";
|
|
41
|
+
})(DomainBinaryOperator || (DomainBinaryOperator = {}));
|
|
42
|
+
/**
|
|
43
|
+
* @since 0.3.16-canary.0
|
|
44
|
+
*/
|
|
45
|
+
export function isDomainIdentifier(node) {
|
|
46
|
+
return node.kind === DomainSyntaxKind.Identifier;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* @since 0.3.16-canary.0
|
|
50
|
+
*/
|
|
51
|
+
export function isDomainStringLiteral(node) {
|
|
52
|
+
return node.kind === DomainSyntaxKind.StringLiteral;
|
|
53
|
+
}
|
|
54
|
+
function isDomainNoSubstitutionTemplateLiteral(node) {
|
|
55
|
+
return node.kind === DomainSyntaxKind.NoSubstitutionTemplateLiteral;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* @since 0.3.16-canary.0
|
|
59
|
+
*/
|
|
60
|
+
export function isDomainTailwindClassLiteral(node) {
|
|
61
|
+
return isDomainStringLiteral(node) || isDomainNoSubstitutionTemplateLiteral(node);
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* @since 0.3.16-canary.0
|
|
65
|
+
*/
|
|
66
|
+
export function isDomainImportDeclaration(node) {
|
|
67
|
+
return node.kind === DomainSyntaxKind.ImportDeclaration;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* @since 0.3.16-canary.0
|
|
71
|
+
*/
|
|
72
|
+
export function isDomainNamedImports(node) {
|
|
73
|
+
return node.kind === DomainSyntaxKind.NamedImports;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* @since 0.3.16-canary.0
|
|
77
|
+
*/
|
|
78
|
+
export function isDomainNamespaceImport(node) {
|
|
79
|
+
return node.kind === DomainSyntaxKind.NamespaceImport;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* @since 0.3.16-canary.0
|
|
83
|
+
*/
|
|
84
|
+
export function isDomainCallExpression(node) {
|
|
85
|
+
return node.kind === DomainSyntaxKind.CallExpression;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* @since 0.3.16-canary.0
|
|
89
|
+
*/
|
|
90
|
+
export function isDomainObjectLiteralExpression(node) {
|
|
91
|
+
return node.kind === DomainSyntaxKind.ObjectLiteralExpression;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* @since 0.3.16-canary.0
|
|
95
|
+
*/
|
|
96
|
+
export function isDomainPropertyAssignment(node) {
|
|
97
|
+
return node.kind === DomainSyntaxKind.PropertyAssignment;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* @since 0.3.16-canary.0
|
|
101
|
+
*/
|
|
102
|
+
export function isDomainArrayLiteralExpression(node) {
|
|
103
|
+
return node.kind === DomainSyntaxKind.ArrayLiteralExpression;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* @since 0.3.16-canary.0
|
|
107
|
+
*/
|
|
108
|
+
export function isDomainSpreadElement(node) {
|
|
109
|
+
return node.kind === DomainSyntaxKind.SpreadElement;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* @since 0.3.16-canary.0
|
|
113
|
+
*/
|
|
114
|
+
export function isDomainPropertyAccessExpression(node) {
|
|
115
|
+
return node.kind === DomainSyntaxKind.PropertyAccessExpression;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* @since 0.3.16-canary.0
|
|
119
|
+
*/
|
|
120
|
+
export function isDomainJsxAttribute(node) {
|
|
121
|
+
return node.kind === DomainSyntaxKind.JsxAttribute;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* @since 0.3.16-canary.0
|
|
125
|
+
*/
|
|
126
|
+
export function isDomainJsxExpression(node) {
|
|
127
|
+
return node.kind === DomainSyntaxKind.JsxExpression;
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* @since 0.3.16-canary.0
|
|
131
|
+
*/
|
|
132
|
+
export function forEachDomainChild(node, visit) {
|
|
133
|
+
switch (node.kind) {
|
|
134
|
+
case DomainSyntaxKind.Unknown:
|
|
135
|
+
for (const child of node.children) {
|
|
136
|
+
visit(child);
|
|
137
|
+
}
|
|
138
|
+
return;
|
|
139
|
+
case DomainSyntaxKind.ImportDeclaration:
|
|
140
|
+
if (node.importClause) {
|
|
141
|
+
visit(node.importClause);
|
|
142
|
+
}
|
|
143
|
+
visit(node.moduleSpecifier);
|
|
144
|
+
return;
|
|
145
|
+
case DomainSyntaxKind.ImportClause:
|
|
146
|
+
if (node.name) {
|
|
147
|
+
visit(node.name);
|
|
148
|
+
}
|
|
149
|
+
if (node.namedBindings) {
|
|
150
|
+
visit(node.namedBindings);
|
|
151
|
+
}
|
|
152
|
+
return;
|
|
153
|
+
case DomainSyntaxKind.NamedImports:
|
|
154
|
+
for (const element of node.elements) {
|
|
155
|
+
visit(element);
|
|
156
|
+
}
|
|
157
|
+
return;
|
|
158
|
+
case DomainSyntaxKind.NamespaceImport:
|
|
159
|
+
visit(node.name);
|
|
160
|
+
return;
|
|
161
|
+
case DomainSyntaxKind.ImportSpecifier:
|
|
162
|
+
if (node.propertyName) {
|
|
163
|
+
visit(node.propertyName);
|
|
164
|
+
}
|
|
165
|
+
visit(node.name);
|
|
166
|
+
return;
|
|
167
|
+
case DomainSyntaxKind.CallExpression:
|
|
168
|
+
visit(node.expression);
|
|
169
|
+
for (const arg of node.arguments) {
|
|
170
|
+
visit(arg);
|
|
171
|
+
}
|
|
172
|
+
return;
|
|
173
|
+
case DomainSyntaxKind.PropertyAccessExpression:
|
|
174
|
+
visit(node.expression);
|
|
175
|
+
visit(node.name);
|
|
176
|
+
return;
|
|
177
|
+
case DomainSyntaxKind.ObjectLiteralExpression:
|
|
178
|
+
for (const prop of node.properties) {
|
|
179
|
+
visit(prop);
|
|
180
|
+
}
|
|
181
|
+
return;
|
|
182
|
+
case DomainSyntaxKind.PropertyAssignment:
|
|
183
|
+
visit(node.name);
|
|
184
|
+
visit(node.initializer);
|
|
185
|
+
return;
|
|
186
|
+
case DomainSyntaxKind.ArrayLiteralExpression:
|
|
187
|
+
for (const element of node.elements) {
|
|
188
|
+
visit(element);
|
|
189
|
+
}
|
|
190
|
+
return;
|
|
191
|
+
case DomainSyntaxKind.SpreadElement:
|
|
192
|
+
visit(node.expression);
|
|
193
|
+
return;
|
|
194
|
+
case DomainSyntaxKind.ParenthesizedExpression:
|
|
195
|
+
case DomainSyntaxKind.AsExpression:
|
|
196
|
+
case DomainSyntaxKind.SatisfiesExpression:
|
|
197
|
+
case DomainSyntaxKind.NonNullExpression:
|
|
198
|
+
visit(node.expression);
|
|
199
|
+
return;
|
|
200
|
+
case DomainSyntaxKind.ConditionalExpression:
|
|
201
|
+
visit(node.condition);
|
|
202
|
+
visit(node.whenTrue);
|
|
203
|
+
visit(node.whenFalse);
|
|
204
|
+
return;
|
|
205
|
+
case DomainSyntaxKind.BinaryExpression:
|
|
206
|
+
visit(node.left);
|
|
207
|
+
visit(node.right);
|
|
208
|
+
return;
|
|
209
|
+
case DomainSyntaxKind.ExpressionStatement:
|
|
210
|
+
visit(node.expression);
|
|
211
|
+
return;
|
|
212
|
+
case DomainSyntaxKind.JsxAttribute:
|
|
213
|
+
visit(node.name);
|
|
214
|
+
if (node.initializer) {
|
|
215
|
+
visit(node.initializer);
|
|
216
|
+
}
|
|
217
|
+
return;
|
|
218
|
+
case DomainSyntaxKind.JsxExpression:
|
|
219
|
+
if (node.expression) {
|
|
220
|
+
visit(node.expression);
|
|
221
|
+
}
|
|
222
|
+
return;
|
|
223
|
+
default:
|
|
224
|
+
return;
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* @since 0.3.16-canary.0
|
|
229
|
+
*/
|
|
230
|
+
export function lineOfSourcePosition(sourceText, pos) {
|
|
231
|
+
const boundedPos = Math.max(0, Math.min(pos, sourceText.length));
|
|
232
|
+
let line = 1;
|
|
233
|
+
for (let i = 0; i < boundedPos; i++) {
|
|
234
|
+
if (sourceText.charCodeAt(i) === 10) {
|
|
235
|
+
line++;
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
return line;
|
|
239
|
+
}
|
|
240
|
+
//# sourceMappingURL=ast-node.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ast-node.js","sourceRoot":"","sources":["../../../../src/arrange/domain/ast/ast-node.ts"],"names":[],"mappings":"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"}
|