torch-glare 1.2.8 → 1.3.0
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/apps/lib/components/TableDnDWrapper.ts +495 -0
- package/apps/lib/components/TextEditor.tsx +53 -1
- package/dist/bin/index.js +5 -0
- package/dist/bin/index.js.map +1 -1
- package/dist/src/commands/mcp.d.ts +2 -0
- package/dist/src/commands/mcp.d.ts.map +1 -0
- package/dist/src/commands/mcp.js +91 -0
- package/dist/src/commands/mcp.js.map +1 -0
- package/dist/src/shared/configureFonts.d.ts +6 -0
- package/dist/src/shared/configureFonts.d.ts.map +1 -0
- package/dist/src/shared/configureFonts.js +106 -0
- package/dist/src/shared/configureFonts.js.map +1 -0
- package/dist/src/shared/configureGlobalCss.d.ts +6 -0
- package/dist/src/shared/configureGlobalCss.d.ts.map +1 -0
- package/dist/src/shared/configureGlobalCss.js +154 -0
- package/dist/src/shared/configureGlobalCss.js.map +1 -0
- package/dist/src/shared/configureTailwind.d.ts +7 -0
- package/dist/src/shared/configureTailwind.d.ts.map +1 -0
- package/dist/src/shared/configureTailwind.js +163 -0
- package/dist/src/shared/configureTailwind.js.map +1 -0
- package/dist/src/shared/detectFramework.d.ts +23 -0
- package/dist/src/shared/detectFramework.d.ts.map +1 -0
- package/dist/src/shared/detectFramework.js +119 -0
- package/dist/src/shared/detectFramework.js.map +1 -0
- package/dist/src/shared/getDependenciesAndInstallNestedComponents.d.ts.map +1 -1
- package/dist/src/shared/getDependenciesAndInstallNestedComponents.js +18 -2
- package/dist/src/shared/getDependenciesAndInstallNestedComponents.js.map +1 -1
- package/dist/src/shared/installBaseUtils.d.ts +5 -0
- package/dist/src/shared/installBaseUtils.d.ts.map +1 -0
- package/dist/src/shared/installBaseUtils.js +79 -0
- package/dist/src/shared/installBaseUtils.js.map +1 -0
- package/dist/src/shared/resolveAliases.d.ts +24 -0
- package/dist/src/shared/resolveAliases.d.ts.map +1 -0
- package/dist/src/shared/resolveAliases.js +98 -0
- package/dist/src/shared/resolveAliases.js.map +1 -0
- package/docs/components/breadcrumb.md +955 -0
- package/docs/components/button-group.md +647 -0
- package/docs/components/text-editor.md +711 -0
- package/docs/components/toggle-button.md +640 -0
- package/docs/tutorials/getting-started.md +123 -431
- package/package.json +1 -1
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import fs from "fs";
|
|
2
|
+
import path from "path";
|
|
3
|
+
/**
|
|
4
|
+
* Detect the framework used in the project by checking package.json dependencies.
|
|
5
|
+
*/
|
|
6
|
+
export function detectFramework() {
|
|
7
|
+
const packageJsonPath = path.join(process.cwd(), "package.json");
|
|
8
|
+
if (!fs.existsSync(packageJsonPath)) {
|
|
9
|
+
return "unknown";
|
|
10
|
+
}
|
|
11
|
+
const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, "utf-8"));
|
|
12
|
+
const allDeps = {
|
|
13
|
+
...(packageJson.dependencies || {}),
|
|
14
|
+
...(packageJson.devDependencies || {}),
|
|
15
|
+
};
|
|
16
|
+
if (allDeps["next"])
|
|
17
|
+
return "next";
|
|
18
|
+
if (allDeps["vite"])
|
|
19
|
+
return "vite";
|
|
20
|
+
if (allDeps["react"])
|
|
21
|
+
return "react";
|
|
22
|
+
return "unknown";
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Detect if the project uses Tailwind CSS v3 (returns true) or v4+ (returns false).
|
|
26
|
+
* Returns null if Tailwind is not installed.
|
|
27
|
+
*/
|
|
28
|
+
export function detectTailwindVersion() {
|
|
29
|
+
const packageJsonPath = path.join(process.cwd(), "package.json");
|
|
30
|
+
if (!fs.existsSync(packageJsonPath)) {
|
|
31
|
+
return null;
|
|
32
|
+
}
|
|
33
|
+
const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, "utf-8"));
|
|
34
|
+
const allDeps = {
|
|
35
|
+
...(packageJson.dependencies || {}),
|
|
36
|
+
...(packageJson.devDependencies || {}),
|
|
37
|
+
};
|
|
38
|
+
const tailwindVersion = allDeps["tailwindcss"];
|
|
39
|
+
if (!tailwindVersion)
|
|
40
|
+
return null;
|
|
41
|
+
if (tailwindVersion.startsWith("^3") || tailwindVersion.startsWith("3") || tailwindVersion.startsWith("~3")) {
|
|
42
|
+
return 3;
|
|
43
|
+
}
|
|
44
|
+
return 4;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Find the global CSS file in the project.
|
|
48
|
+
*/
|
|
49
|
+
export function findGlobalCssPath(framework) {
|
|
50
|
+
const candidates = framework === "next"
|
|
51
|
+
? [
|
|
52
|
+
"app/globals.css",
|
|
53
|
+
"src/app/globals.css",
|
|
54
|
+
"styles/globals.css",
|
|
55
|
+
"src/styles/globals.css",
|
|
56
|
+
]
|
|
57
|
+
: [
|
|
58
|
+
"src/index.css",
|
|
59
|
+
"src/globals.css",
|
|
60
|
+
"src/App.css",
|
|
61
|
+
"index.css",
|
|
62
|
+
"styles/globals.css",
|
|
63
|
+
];
|
|
64
|
+
for (const candidate of candidates) {
|
|
65
|
+
if (fs.existsSync(path.join(process.cwd(), candidate))) {
|
|
66
|
+
return candidate;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
return null;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Find the Tailwind config file path.
|
|
73
|
+
*/
|
|
74
|
+
export function findTailwindConfigPath() {
|
|
75
|
+
const candidates = [
|
|
76
|
+
"tailwind.config.ts",
|
|
77
|
+
"tailwind.config.js",
|
|
78
|
+
"tailwind.config.mjs",
|
|
79
|
+
"tailwind.config.cjs",
|
|
80
|
+
];
|
|
81
|
+
for (const candidate of candidates) {
|
|
82
|
+
if (fs.existsSync(path.join(process.cwd(), candidate))) {
|
|
83
|
+
return candidate;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
return null;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Find the layout/HTML file where font links should be injected.
|
|
90
|
+
*/
|
|
91
|
+
export function findLayoutPath(framework) {
|
|
92
|
+
if (framework === "next") {
|
|
93
|
+
const candidates = [
|
|
94
|
+
"app/layout.tsx",
|
|
95
|
+
"app/layout.jsx",
|
|
96
|
+
"app/layout.js",
|
|
97
|
+
"src/app/layout.tsx",
|
|
98
|
+
"src/app/layout.jsx",
|
|
99
|
+
"src/app/layout.js",
|
|
100
|
+
];
|
|
101
|
+
for (const candidate of candidates) {
|
|
102
|
+
if (fs.existsSync(path.join(process.cwd(), candidate))) {
|
|
103
|
+
return candidate;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
// Vite / React / Other
|
|
108
|
+
const htmlCandidates = [
|
|
109
|
+
"index.html",
|
|
110
|
+
"public/index.html",
|
|
111
|
+
];
|
|
112
|
+
for (const candidate of htmlCandidates) {
|
|
113
|
+
if (fs.existsSync(path.join(process.cwd(), candidate))) {
|
|
114
|
+
return candidate;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
return null;
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=detectFramework.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detectFramework.js","sourceRoot":"","sources":["../../../cli/src/shared/detectFramework.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getDependenciesAndInstallNestedComponents.d.ts","sourceRoot":"","sources":["../../../cli/src/shared/getDependenciesAndInstallNestedComponents.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"getDependenciesAndInstallNestedComponents.d.ts","sourceRoot":"","sources":["../../../cli/src/shared/getDependenciesAndInstallNestedComponents.ts"],"names":[],"mappings":"AAMA;;;;;GAKG;AAEH,wBAAgB,yCAAyC,CACrD,aAAa,EAAE,MAAM,EACrB,qBAAqB,EAAE,GAAG,CAAC,MAAM,CAAC,GACnC,GAAG,CAAC,MAAM,CAAC,CAgEb"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import * as fs from "fs";
|
|
2
|
+
import * as path from "path";
|
|
2
3
|
import { addUtil } from "../commands/utils.js";
|
|
3
4
|
import { addHook } from "../commands/hook.js";
|
|
4
5
|
import { add } from "../commands/add.js";
|
|
@@ -36,13 +37,28 @@ export function getDependenciesAndInstallNestedComponents(componentPath, install
|
|
|
36
37
|
(moduleName.startsWith("./") ||
|
|
37
38
|
!moduleName.startsWith("../components")) &&
|
|
38
39
|
!installedDependencies.has(moduleName)) {
|
|
39
|
-
|
|
40
|
+
const baseName = moduleName.slice(2);
|
|
41
|
+
const dir = path.dirname(componentPath);
|
|
42
|
+
// Try .tsx first, fall back to .ts for non-JSX files
|
|
43
|
+
if (fs.existsSync(path.join(dir, baseName + ".tsx"))) {
|
|
44
|
+
add(baseName + ".tsx");
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
add(baseName + ".ts");
|
|
48
|
+
}
|
|
40
49
|
}
|
|
41
50
|
// install required for layouts components
|
|
42
51
|
else if (moduleName &&
|
|
43
52
|
moduleName.startsWith("../components") &&
|
|
44
53
|
!installedDependencies.has(moduleName)) {
|
|
45
|
-
|
|
54
|
+
const baseName = moduleName.slice(14);
|
|
55
|
+
const componentsDir = path.resolve(path.dirname(componentPath), "../components");
|
|
56
|
+
if (fs.existsSync(path.join(componentsDir, baseName + ".tsx"))) {
|
|
57
|
+
add(baseName + ".tsx");
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
add(baseName + ".ts");
|
|
61
|
+
}
|
|
46
62
|
}
|
|
47
63
|
}
|
|
48
64
|
return dependenciesToInstall;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getDependenciesAndInstallNestedComponents.js","sourceRoot":"","sources":["../../../cli/src/shared/getDependenciesAndInstallNestedComponents.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAEzC;;;;;GAKG;AAEH,MAAM,UAAU,yCAAyC,CACrD,aAAqB,EACrB,qBAAkC;IAElC,MAAM,gBAAgB,GAAG,EAAE,CAAC,YAAY,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;IACjE,MAAM,WAAW,GAAG,yCAAyC,CAAC;IAC9D,MAAM,qBAAqB,GAAG,IAAI,GAAG,EAAU,CAAC;IAEhD,IAAI,KAAK,CAAC;IACV,OAAO,CAAC,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QAC3D,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAE5B,sCAAsC;QACtC,IAAI,UAAU,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;YACtF,qBAAqB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC1C,CAAC;QAED,oCAAoC;aAC/B,IACD,UAAU;YACV,UAAU,CAAC,UAAU,CAAC,UAAU,CAAC;YACjC,CAAC,qBAAqB,CAAC,GAAG,CAAC,UAAU,CAAC,EACxC,CAAC;YACC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;QACzC,CAAC;QAED,oCAAoC;aAC/B,IACD,UAAU;YACV,UAAU,CAAC,UAAU,CAAC,UAAU,CAAC;YACjC,CAAC,qBAAqB,CAAC,GAAG,CAAC,UAAU,CAAC,EACxC,CAAC;YACC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;QACzC,CAAC;QACD,qCAAqC;aAChC,IACD,UAAU;YACV,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC;gBACxB,CAAC,UAAU,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;YAC5C,CAAC,qBAAqB,CAAC,GAAG,CAAC,UAAU,CAAC,EACxC,CAAC;YACC,GAAG,CAAC,UAAU,CAAC,
|
|
1
|
+
{"version":3,"file":"getDependenciesAndInstallNestedComponents.js","sourceRoot":"","sources":["../../../cli/src/shared/getDependenciesAndInstallNestedComponents.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"installBaseUtils.d.ts","sourceRoot":"","sources":["../../../cli/src/shared/installBaseUtils.ts"],"names":[],"mappings":"AAoBA;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CA8BvD"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import fs from "fs";
|
|
2
|
+
import path from "path";
|
|
3
|
+
import { execSync } from "child_process";
|
|
4
|
+
import { fileURLToPath } from "url";
|
|
5
|
+
import { detectPackageManager } from "./detectPackageManager.js";
|
|
6
|
+
import { getCurrentInstalledDependencies } from "./getCurrentInstalledDependencies.js";
|
|
7
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
8
|
+
const __dirname = path.dirname(__filename);
|
|
9
|
+
const UTILS_TEMPLATE_DIR = path.resolve(__dirname, "../../../apps/lib/utils");
|
|
10
|
+
const BASE_UTILS = ["cn.ts", "types.ts"];
|
|
11
|
+
const BASE_DEPENDENCIES = [
|
|
12
|
+
"clsx",
|
|
13
|
+
"tailwind-merge",
|
|
14
|
+
"class-variance-authority",
|
|
15
|
+
];
|
|
16
|
+
/**
|
|
17
|
+
* Install base utility files (cn.ts, types.ts) and their dependencies.
|
|
18
|
+
*/
|
|
19
|
+
export function installBaseUtils(basePath) {
|
|
20
|
+
const normalizedPath = basePath.replace("@/", "").replace(/^\.\//, "");
|
|
21
|
+
const utilsTargetDir = path.join(process.cwd(), normalizedPath, "utils");
|
|
22
|
+
// Ensure target directory exists
|
|
23
|
+
if (!fs.existsSync(utilsTargetDir)) {
|
|
24
|
+
fs.mkdirSync(utilsTargetDir, { recursive: true });
|
|
25
|
+
}
|
|
26
|
+
// Copy base utility files
|
|
27
|
+
for (const utilFile of BASE_UTILS) {
|
|
28
|
+
const source = path.join(UTILS_TEMPLATE_DIR, utilFile);
|
|
29
|
+
const target = path.join(utilsTargetDir, utilFile);
|
|
30
|
+
if (!fs.existsSync(source)) {
|
|
31
|
+
console.log(` ⚠️ Template not found: ${utilFile}`);
|
|
32
|
+
continue;
|
|
33
|
+
}
|
|
34
|
+
if (fs.existsSync(target)) {
|
|
35
|
+
console.log(` ⏭️ ${utilFile} already exists, skipping`);
|
|
36
|
+
continue;
|
|
37
|
+
}
|
|
38
|
+
fs.copyFileSync(source, target);
|
|
39
|
+
console.log(` ✅ Installed ${utilFile}`);
|
|
40
|
+
}
|
|
41
|
+
// Install npm dependencies
|
|
42
|
+
installMissingDependencies();
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Install base npm dependencies (clsx, tailwind-merge, cva) if missing.
|
|
46
|
+
*/
|
|
47
|
+
function installMissingDependencies() {
|
|
48
|
+
const { depsNames } = getCurrentInstalledDependencies();
|
|
49
|
+
const missing = BASE_DEPENDENCIES.filter(dep => !depsNames.has(dep));
|
|
50
|
+
if (missing.length === 0) {
|
|
51
|
+
console.log(" ✅ Base dependencies already installed");
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
const packageManager = detectPackageManager();
|
|
55
|
+
const depsStr = missing.map(dep => `${dep}@latest`).join(" ");
|
|
56
|
+
let installCommand;
|
|
57
|
+
switch (packageManager) {
|
|
58
|
+
case "pnpm":
|
|
59
|
+
installCommand = `pnpm add ${depsStr}`;
|
|
60
|
+
break;
|
|
61
|
+
case "yarn":
|
|
62
|
+
installCommand = `yarn add ${depsStr}`;
|
|
63
|
+
break;
|
|
64
|
+
case "bun":
|
|
65
|
+
installCommand = `bun add ${depsStr}`;
|
|
66
|
+
break;
|
|
67
|
+
default:
|
|
68
|
+
installCommand = `npm install ${depsStr}`;
|
|
69
|
+
}
|
|
70
|
+
try {
|
|
71
|
+
console.log(` 📦 Installing: ${missing.join(", ")}`);
|
|
72
|
+
execSync(installCommand, { stdio: "inherit" });
|
|
73
|
+
console.log(" ✅ Base dependencies installed");
|
|
74
|
+
}
|
|
75
|
+
catch (error) {
|
|
76
|
+
console.error(" ❌ Error installing base dependencies:", error.message);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=installBaseUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"installBaseUtils.js","sourceRoot":"","sources":["../../../cli/src/shared/installBaseUtils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { Framework } from "./detectFramework.js";
|
|
2
|
+
export interface Aliases {
|
|
3
|
+
components: string;
|
|
4
|
+
hooks: string;
|
|
5
|
+
utils: string;
|
|
6
|
+
providers: string;
|
|
7
|
+
layouts: string;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Resolve the base path and aliases for the project.
|
|
11
|
+
* Parses tsconfig.json/jsconfig.json to find path aliases,
|
|
12
|
+
* then builds the aliases map for each category.
|
|
13
|
+
*/
|
|
14
|
+
export declare function resolveAliases(framework: Framework): {
|
|
15
|
+
basePath: string;
|
|
16
|
+
aliases: Aliases;
|
|
17
|
+
aliasPrefix: string;
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* Resolve an alias path to a filesystem path.
|
|
21
|
+
* e.g. "@/components" with basePath "./lib/" → "./lib/components"
|
|
22
|
+
*/
|
|
23
|
+
export declare function resolveAliasToPath(aliasPath: string, basePath: string): string;
|
|
24
|
+
//# sourceMappingURL=resolveAliases.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolveAliases.d.ts","sourceRoot":"","sources":["../../../cli/src/shared/resolveAliases.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEjD,MAAM,WAAW,OAAO;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACnB;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,SAAS,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAchH;AAsED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAU9E"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import fs from "fs";
|
|
2
|
+
import path from "path";
|
|
3
|
+
/**
|
|
4
|
+
* Resolve the base path and aliases for the project.
|
|
5
|
+
* Parses tsconfig.json/jsconfig.json to find path aliases,
|
|
6
|
+
* then builds the aliases map for each category.
|
|
7
|
+
*/
|
|
8
|
+
export function resolveAliases(framework) {
|
|
9
|
+
const { basePath, aliasPrefix } = resolveBasePath(framework);
|
|
10
|
+
// Store actual filesystem paths (not alias paths) so getInstallPaths resolves correctly
|
|
11
|
+
const normalizedBase = basePath.replace(/\/$/, "");
|
|
12
|
+
const aliases = {
|
|
13
|
+
components: `${normalizedBase}/components`,
|
|
14
|
+
hooks: `${normalizedBase}/hooks`,
|
|
15
|
+
utils: `${normalizedBase}/utils`,
|
|
16
|
+
providers: `${normalizedBase}/providers`,
|
|
17
|
+
layouts: `${normalizedBase}/layouts`,
|
|
18
|
+
};
|
|
19
|
+
return { basePath, aliases, aliasPrefix };
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Resolve the base path from tsconfig paths or directory structure.
|
|
23
|
+
*/
|
|
24
|
+
function resolveBasePath(framework) {
|
|
25
|
+
// Try to parse tsconfig.json or jsconfig.json for path aliases
|
|
26
|
+
const tsconfigPath = findTsConfig();
|
|
27
|
+
if (tsconfigPath) {
|
|
28
|
+
const tsconfig = parseTsConfig(tsconfigPath);
|
|
29
|
+
const paths = tsconfig?.compilerOptions?.paths;
|
|
30
|
+
if (paths) {
|
|
31
|
+
// Look for @/* alias
|
|
32
|
+
const aliasKey = Object.keys(paths).find(key => key.endsWith("/*"));
|
|
33
|
+
if (aliasKey) {
|
|
34
|
+
const aliasTargets = paths[aliasKey];
|
|
35
|
+
if (aliasTargets && aliasTargets.length > 0) {
|
|
36
|
+
const target = aliasTargets[0].replace("/*", "/");
|
|
37
|
+
const prefix = aliasKey.replace("/*", "/");
|
|
38
|
+
return { basePath: target, aliasPrefix: prefix };
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
// Fallback: detect based on directory structure
|
|
44
|
+
if (fs.existsSync(path.join(process.cwd(), "src"))) {
|
|
45
|
+
return { basePath: "./src/", aliasPrefix: "./src/" };
|
|
46
|
+
}
|
|
47
|
+
// Next.js without src/ directory
|
|
48
|
+
if (framework === "next") {
|
|
49
|
+
return { basePath: "./", aliasPrefix: "./" };
|
|
50
|
+
}
|
|
51
|
+
return { basePath: "./src/", aliasPrefix: "./src/" };
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Find tsconfig.json or jsconfig.json in the project root.
|
|
55
|
+
*/
|
|
56
|
+
function findTsConfig() {
|
|
57
|
+
const candidates = ["tsconfig.json", "jsconfig.json"];
|
|
58
|
+
for (const candidate of candidates) {
|
|
59
|
+
const fullPath = path.join(process.cwd(), candidate);
|
|
60
|
+
if (fs.existsSync(fullPath)) {
|
|
61
|
+
return fullPath;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
return null;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Parse tsconfig.json, handling comments and trailing commas.
|
|
68
|
+
*/
|
|
69
|
+
function parseTsConfig(filePath) {
|
|
70
|
+
try {
|
|
71
|
+
const content = fs.readFileSync(filePath, "utf-8");
|
|
72
|
+
// Strip single-line comments and trailing commas for JSON.parse
|
|
73
|
+
const cleaned = content
|
|
74
|
+
.replace(/\/\/.*$/gm, "")
|
|
75
|
+
.replace(/\/\*[\s\S]*?\*\//g, "")
|
|
76
|
+
.replace(/,(\s*[}\]])/g, "$1");
|
|
77
|
+
return JSON.parse(cleaned);
|
|
78
|
+
}
|
|
79
|
+
catch {
|
|
80
|
+
return null;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Resolve an alias path to a filesystem path.
|
|
85
|
+
* e.g. "@/components" with basePath "./lib/" → "./lib/components"
|
|
86
|
+
*/
|
|
87
|
+
export function resolveAliasToPath(aliasPath, basePath) {
|
|
88
|
+
// Handle @/ prefix
|
|
89
|
+
if (aliasPath.startsWith("@/")) {
|
|
90
|
+
return path.join(basePath, aliasPath.slice(2));
|
|
91
|
+
}
|
|
92
|
+
// Handle ./ prefix
|
|
93
|
+
if (aliasPath.startsWith("./")) {
|
|
94
|
+
return aliasPath;
|
|
95
|
+
}
|
|
96
|
+
return path.join(basePath, aliasPath);
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=resolveAliases.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolveAliases.js","sourceRoot":"","sources":["../../../cli/src/shared/resolveAliases.ts"],"names":[],"mappings":"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"}
|