@lingxia/cli 0.0.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/bin/lingxia.js +91 -0
- package/dist/builder/commands/build.d.ts +3 -0
- package/dist/builder/commands/build.d.ts.map +1 -0
- package/dist/builder/commands/build.js +317 -0
- package/dist/builder/commands/build.js.map +1 -0
- package/dist/builder/core/builders/logic.d.ts +48 -0
- package/dist/builder/core/builders/logic.d.ts.map +1 -0
- package/dist/builder/core/builders/logic.js +212 -0
- package/dist/builder/core/builders/logic.js.map +1 -0
- package/dist/builder/core/builders/page-functions.d.ts +2 -0
- package/dist/builder/core/builders/page-functions.d.ts.map +1 -0
- package/dist/builder/core/builders/page-functions.js +119 -0
- package/dist/builder/core/builders/page-functions.js.map +1 -0
- package/dist/builder/core/builders/page-path-injector.d.ts +5 -0
- package/dist/builder/core/builders/page-path-injector.d.ts.map +1 -0
- package/dist/builder/core/builders/page-path-injector.js +94 -0
- package/dist/builder/core/builders/page-path-injector.js.map +1 -0
- package/dist/builder/core/builders/page.d.ts +37 -0
- package/dist/builder/core/builders/page.d.ts.map +1 -0
- package/dist/builder/core/builders/page.js +246 -0
- package/dist/builder/core/builders/page.js.map +1 -0
- package/dist/builder/core/builders/view.d.ts +23 -0
- package/dist/builder/core/builders/view.d.ts.map +1 -0
- package/dist/builder/core/builders/view.js +194 -0
- package/dist/builder/core/builders/view.js.map +1 -0
- package/dist/builder/core/config/alias-config.d.ts +4 -0
- package/dist/builder/core/config/alias-config.d.ts.map +1 -0
- package/dist/builder/core/config/alias-config.js +29 -0
- package/dist/builder/core/config/alias-config.js.map +1 -0
- package/dist/builder/core/config/build-config.d.ts +8 -0
- package/dist/builder/core/config/build-config.d.ts.map +1 -0
- package/dist/builder/core/config/build-config.js +33 -0
- package/dist/builder/core/config/build-config.js.map +1 -0
- package/dist/builder/core/config/framework.d.ts +3 -0
- package/dist/builder/core/config/framework.d.ts.map +1 -0
- package/dist/builder/core/config/framework.js +51 -0
- package/dist/builder/core/config/framework.js.map +1 -0
- package/dist/builder/core/config/lingxia-config.d.ts +55 -0
- package/dist/builder/core/config/lingxia-config.d.ts.map +1 -0
- package/dist/builder/core/config/lingxia-config.js +174 -0
- package/dist/builder/core/config/lingxia-config.js.map +1 -0
- package/dist/builder/core/config/view-build-schema.d.ts +17 -0
- package/dist/builder/core/config/view-build-schema.d.ts.map +1 -0
- package/dist/builder/core/config/view-build-schema.js +2 -0
- package/dist/builder/core/config/view-build-schema.js.map +1 -0
- package/dist/builder/core/config/view-config.d.ts +11 -0
- package/dist/builder/core/config/view-config.d.ts.map +1 -0
- package/dist/builder/core/config/view-config.js +79 -0
- package/dist/builder/core/config/view-config.js.map +1 -0
- package/dist/builder/core/config.d.ts +34 -0
- package/dist/builder/core/config.d.ts.map +1 -0
- package/dist/builder/core/config.js +73 -0
- package/dist/builder/core/config.js.map +1 -0
- package/dist/builder/core/constants/source-dirs.d.ts +4 -0
- package/dist/builder/core/constants/source-dirs.d.ts.map +1 -0
- package/dist/builder/core/constants/source-dirs.js +24 -0
- package/dist/builder/core/constants/source-dirs.js.map +1 -0
- package/dist/builder/core/constants/static-dirs.d.ts +4 -0
- package/dist/builder/core/constants/static-dirs.d.ts.map +1 -0
- package/dist/builder/core/constants/static-dirs.js +51 -0
- package/dist/builder/core/constants/static-dirs.js.map +1 -0
- package/dist/builder/core/frameworks/base.d.ts +49 -0
- package/dist/builder/core/frameworks/base.d.ts.map +1 -0
- package/dist/builder/core/frameworks/base.js +61 -0
- package/dist/builder/core/frameworks/base.js.map +1 -0
- package/dist/builder/core/frameworks/factory.d.ts +29 -0
- package/dist/builder/core/frameworks/factory.d.ts.map +1 -0
- package/dist/builder/core/frameworks/factory.js +59 -0
- package/dist/builder/core/frameworks/factory.js.map +1 -0
- package/dist/builder/core/frameworks/html.d.ts +30 -0
- package/dist/builder/core/frameworks/html.d.ts.map +1 -0
- package/dist/builder/core/frameworks/html.js +92 -0
- package/dist/builder/core/frameworks/html.js.map +1 -0
- package/dist/builder/core/frameworks/react.d.ts +33 -0
- package/dist/builder/core/frameworks/react.d.ts.map +1 -0
- package/dist/builder/core/frameworks/react.js +161 -0
- package/dist/builder/core/frameworks/react.js.map +1 -0
- package/dist/builder/core/frameworks/templates.d.ts +2 -0
- package/dist/builder/core/frameworks/templates.d.ts.map +1 -0
- package/dist/builder/core/frameworks/templates.js +3 -0
- package/dist/builder/core/frameworks/templates.js.map +1 -0
- package/dist/builder/core/frameworks/vue.d.ts +33 -0
- package/dist/builder/core/frameworks/vue.d.ts.map +1 -0
- package/dist/builder/core/frameworks/vue.js +161 -0
- package/dist/builder/core/frameworks/vue.js.map +1 -0
- package/dist/builder/core/registry.d.ts +43 -0
- package/dist/builder/core/registry.d.ts.map +1 -0
- package/dist/builder/core/registry.js +79 -0
- package/dist/builder/core/registry.js.map +1 -0
- package/dist/builder/core/template.d.ts +7 -0
- package/dist/builder/core/template.d.ts.map +1 -0
- package/dist/builder/core/template.js +57 -0
- package/dist/builder/core/template.js.map +1 -0
- package/dist/builder/core/templates/embedded.d.ts +17 -0
- package/dist/builder/core/templates/embedded.d.ts.map +1 -0
- package/dist/builder/core/templates/embedded.js +121 -0
- package/dist/builder/core/templates/embedded.js.map +1 -0
- package/dist/builder/core/utils/file.d.ts +35 -0
- package/dist/builder/core/utils/file.d.ts.map +1 -0
- package/dist/builder/core/utils/file.js +99 -0
- package/dist/builder/core/utils/file.js.map +1 -0
- package/dist/builder/core/utils/page.d.ts +14 -0
- package/dist/builder/core/utils/page.d.ts.map +1 -0
- package/dist/builder/core/utils/page.js +46 -0
- package/dist/builder/core/utils/page.js.map +1 -0
- package/dist/builder/index.d.ts +2 -0
- package/dist/builder/index.d.ts.map +1 -0
- package/dist/builder/index.js +2 -0
- package/dist/builder/index.js.map +1 -0
- package/dist/builder/types/index.d.ts +67 -0
- package/dist/builder/types/index.d.ts.map +1 -0
- package/dist/builder/types/index.js +2 -0
- package/dist/builder/types/index.js.map +1 -0
- package/dist/commands/create.d.ts +7 -0
- package/dist/commands/create.d.ts.map +1 -0
- package/dist/commands/create.js +151 -0
- package/dist/commands/create.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +45 -0
- package/dist/index.js.map +1 -0
- package/package.json +49 -0
- package/scripts/ensure-deps.cjs +54 -0
- package/scripts/install.cjs +62 -0
- package/scripts/set-version.cjs +34 -0
- package/scripts/sync-templates.cjs +36 -0
- package/templates/android-native/app/build.gradle.kts +48 -0
- package/templates/android-native/app/proguard-rules.pro +21 -0
- package/templates/android-native/app/src/main/AndroidManifest.xml +21 -0
- package/templates/android-native/app/src/main/java/MainActivity.kt +27 -0
- package/templates/android-native/app/src/main/res/values/strings.xml +3 -0
- package/templates/android-native/build.gradle.kts +5 -0
- package/templates/android-native/gradle/libs.versions.toml +16 -0
- package/templates/android-native/gradle/wrapper/gradle-wrapper.jar +0 -0
- package/templates/android-native/gradle/wrapper/gradle-wrapper.properties +6 -0
- package/templates/android-native/gradle.properties +4 -0
- package/templates/android-native/gradlew +185 -0
- package/templates/android-native/gradlew.bat +89 -0
- package/templates/android-native/settings.gradle.kts +25 -0
- package/templates/lxapp-create/react/lxapp.config.json +8 -0
- package/templates/lxapp-create/react/lxapp.json +8 -0
- package/templates/lxapp-create/react/lxapp.ts +8 -0
- package/templates/lxapp-create/react/package.json +26 -0
- package/templates/lxapp-create/react/pages/home/index.json +3 -0
- package/templates/lxapp-create/react/pages/home/index.ts +14 -0
- package/templates/lxapp-create/react/pages/home/index.tsx +60 -0
- package/templates/lxapp-create/react/public/.gitkeep +0 -0
- package/templates/lxapp-create/react/shared/.gitkeep +0 -0
- package/templates/lxapp-create/react/tsconfig.json +20 -0
- package/templates/lxapp-create/vue/lxapp.config.json +8 -0
- package/templates/lxapp-create/vue/lxapp.json +8 -0
- package/templates/lxapp-create/vue/lxapp.ts +8 -0
- package/templates/lxapp-create/vue/package.json +24 -0
- package/templates/lxapp-create/vue/pages/home/index.json +3 -0
- package/templates/lxapp-create/vue/pages/home/index.ts +14 -0
- package/templates/lxapp-create/vue/pages/home/index.vue +48 -0
- package/templates/lxapp-create/vue/public/.gitkeep +0 -0
- package/templates/lxapp-create/vue/shared/.gitkeep +0 -0
- package/templates/lxapp-create/vue/tsconfig.json +20 -0
- package/templates/rust-lib/Cargo.toml +13 -0
- package/templates/rust-lib/README.md +14 -0
- package/templates/rust-lib/src/lib.rs +13 -0
- package/vendor/.gitkeep +1 -0
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { FrameworkProcessor } from './base.js';
|
|
2
|
+
import type { Page, PageFiles } from '../../types/index.js';
|
|
3
|
+
/**
|
|
4
|
+
* Vue framework processor
|
|
5
|
+
* Uses templates and framework-specific logic
|
|
6
|
+
*/
|
|
7
|
+
export declare class VueProcessor extends FrameworkProcessor {
|
|
8
|
+
private fileUtils;
|
|
9
|
+
private templateManager;
|
|
10
|
+
constructor(projectPath: string, outputDir: string);
|
|
11
|
+
getFrameworkName(): string;
|
|
12
|
+
getExtensions(): string[];
|
|
13
|
+
getDependencies(): {
|
|
14
|
+
dependencies: any;
|
|
15
|
+
devDependencies: any;
|
|
16
|
+
};
|
|
17
|
+
setupBuild(buildDir: string, page: Page, pageFiles: PageFiles, pageFunctions: string[]): Promise<void>;
|
|
18
|
+
generateOutput(page: Page, pageFiles: PageFiles, buildResult: {
|
|
19
|
+
distDir: string;
|
|
20
|
+
assetDir?: string;
|
|
21
|
+
entryHtml?: string;
|
|
22
|
+
entryJs?: string;
|
|
23
|
+
}, bridgeScript: string): Promise<void>;
|
|
24
|
+
private processTemplates;
|
|
25
|
+
/**
|
|
26
|
+
* Fix HTML paths to use relative paths for Vue
|
|
27
|
+
*/
|
|
28
|
+
private fixHtmlPaths;
|
|
29
|
+
private rewriteLinkHrefs;
|
|
30
|
+
private linkHasRel;
|
|
31
|
+
private resolveSourceImportPath;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=vue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vue.d.ts","sourceRoot":"","sources":["../../../../src/builder/core/frameworks/vue.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAK5D;;;GAGG;AACH,qBAAa,YAAa,SAAQ,kBAAkB;IAClD,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,eAAe,CAAkB;gBAE7B,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;IAMlD,gBAAgB,IAAI,MAAM;IAI1B,aAAa,IAAI,MAAM,EAAE;IAIzB,eAAe,IAAI;QAAE,YAAY,EAAE,GAAG,CAAC;QAAC,eAAe,EAAE,GAAG,CAAA;KAAE;IAIxD,UAAU,CACd,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,IAAI,EACV,SAAS,EAAE,SAAS,EACpB,aAAa,EAAE,MAAM,EAAE,GACtB,OAAO,CAAC,IAAI,CAAC;IAQV,cAAc,CAClB,IAAI,EAAE,IAAI,EACV,SAAS,EAAE,SAAS,EACpB,WAAW,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,EACzF,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,IAAI,CAAC;YAkDF,gBAAgB;IAiC9B;;OAEG;IACH,OAAO,CAAC,YAAY;IAiDpB,OAAO,CAAC,gBAAgB;IAqBxB,OAAO,CAAC,UAAU;IASlB,OAAO,CAAC,uBAAuB;CAIhC"}
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
import * as fs from 'fs';
|
|
2
|
+
import * as path from 'path';
|
|
3
|
+
import { load } from 'cheerio';
|
|
4
|
+
import { FrameworkProcessor } from './base.js';
|
|
5
|
+
import { getPageTitle } from '../utils/page.js';
|
|
6
|
+
import { FileUtils } from '../utils/file.js';
|
|
7
|
+
import { TemplateManager } from '../template.js';
|
|
8
|
+
/**
|
|
9
|
+
* Vue framework processor
|
|
10
|
+
* Uses templates and framework-specific logic
|
|
11
|
+
*/
|
|
12
|
+
export class VueProcessor extends FrameworkProcessor {
|
|
13
|
+
fileUtils;
|
|
14
|
+
templateManager;
|
|
15
|
+
constructor(projectPath, outputDir) {
|
|
16
|
+
super(projectPath, outputDir);
|
|
17
|
+
this.fileUtils = new FileUtils();
|
|
18
|
+
this.templateManager = new TemplateManager();
|
|
19
|
+
}
|
|
20
|
+
getFrameworkName() {
|
|
21
|
+
return 'Vue';
|
|
22
|
+
}
|
|
23
|
+
getExtensions() {
|
|
24
|
+
return ['.vue'];
|
|
25
|
+
}
|
|
26
|
+
getDependencies() {
|
|
27
|
+
return { dependencies: {}, devDependencies: {} };
|
|
28
|
+
}
|
|
29
|
+
async setupBuild(buildDir, page, pageFiles, pageFunctions) {
|
|
30
|
+
// Copy framework templates
|
|
31
|
+
this.copyTemplates(buildDir);
|
|
32
|
+
// Process templates with page-specific data
|
|
33
|
+
await this.processTemplates(buildDir, page, pageFiles, pageFunctions);
|
|
34
|
+
}
|
|
35
|
+
async generateOutput(page, pageFiles, buildResult, bridgeScript) {
|
|
36
|
+
const pageOutputDir = path.join(this.outputDir, path.dirname(page.path));
|
|
37
|
+
const baseName = path.basename(page.path, path.extname(page.path));
|
|
38
|
+
const assetDir = this.normalizeAssetDir(buildResult.assetDir);
|
|
39
|
+
// Copy built assets
|
|
40
|
+
const builtIndexHtml = buildResult.entryHtml
|
|
41
|
+
? path.join(buildResult.distDir, buildResult.entryHtml)
|
|
42
|
+
: path.join(buildResult.distDir, 'index.html');
|
|
43
|
+
const builtMainJs = buildResult.entryJs
|
|
44
|
+
? path.join(buildResult.distDir, buildResult.entryJs)
|
|
45
|
+
: path.join(buildResult.distDir, 'main.js');
|
|
46
|
+
let htmlContent = fs.readFileSync(builtIndexHtml, 'utf-8');
|
|
47
|
+
// Ensure output directory exists
|
|
48
|
+
this.fileUtils.ensureDirectory(pageOutputDir);
|
|
49
|
+
// Process JS
|
|
50
|
+
if (fs.existsSync(builtMainJs)) {
|
|
51
|
+
fs.copyFileSync(builtMainJs, path.join(pageOutputDir, 'view.js'));
|
|
52
|
+
}
|
|
53
|
+
// Copy page config
|
|
54
|
+
if (pageFiles.config.exists) {
|
|
55
|
+
const configOutputPath = path.join(pageOutputDir, `${baseName}.json`);
|
|
56
|
+
fs.copyFileSync(pageFiles.config.path, configOutputPath);
|
|
57
|
+
}
|
|
58
|
+
// Fix HTML paths and inject bridge script
|
|
59
|
+
const assetRelativePath = path
|
|
60
|
+
.relative(pageOutputDir, path.join(this.outputDir, assetDir))
|
|
61
|
+
.split(path.sep)
|
|
62
|
+
.join('/');
|
|
63
|
+
htmlContent = this.fixHtmlPaths(htmlContent, baseName, assetDir, assetRelativePath);
|
|
64
|
+
htmlContent = this.injectRuntimeScript(htmlContent);
|
|
65
|
+
htmlContent = htmlContent.replace('</body>', `<script>\n${bridgeScript}\n</script>\n</body>`);
|
|
66
|
+
// Write final component file
|
|
67
|
+
const componentOutputPath = path.join(pageOutputDir, `${baseName}.vue`);
|
|
68
|
+
fs.writeFileSync(componentOutputPath, htmlContent);
|
|
69
|
+
}
|
|
70
|
+
async processTemplates(buildDir, page, pageFiles, pageFunctions) {
|
|
71
|
+
const pageTitle = getPageTitle(page, pageFiles);
|
|
72
|
+
// Process index.html
|
|
73
|
+
const indexHtmlPath = path.join(buildDir, 'index.html');
|
|
74
|
+
if (fs.existsSync(indexHtmlPath)) {
|
|
75
|
+
let indexHtml = fs.readFileSync(indexHtmlPath, 'utf-8');
|
|
76
|
+
indexHtml = this.processPageTitle(indexHtml, pageTitle);
|
|
77
|
+
fs.writeFileSync(indexHtmlPath, indexHtml);
|
|
78
|
+
}
|
|
79
|
+
// Process main.js
|
|
80
|
+
const mainJsPath = path.join(buildDir, 'main.js');
|
|
81
|
+
if (fs.existsSync(mainJsPath)) {
|
|
82
|
+
let mainJs = fs.readFileSync(mainJsPath, 'utf-8');
|
|
83
|
+
// Inject page functions
|
|
84
|
+
const bridgeScript = this.templateManager.generateFunctionBridge(pageFunctions);
|
|
85
|
+
mainJs = mainJs.replace('/* {{PAGE_FUNCTIONS}} */', bridgeScript);
|
|
86
|
+
const appImport = `import App from '${this.resolveSourceImportPath(buildDir, pageFiles.view.path)}';`;
|
|
87
|
+
if (mainJs.includes('/* {{APP_IMPORT}} */')) {
|
|
88
|
+
mainJs = mainJs.replace('/* {{APP_IMPORT}} */', appImport);
|
|
89
|
+
}
|
|
90
|
+
fs.writeFileSync(mainJsPath, mainJs);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Fix HTML paths to use relative paths for Vue
|
|
95
|
+
*/
|
|
96
|
+
fixHtmlPaths(htmlContent, baseName, assetDir, assetRelativePath) {
|
|
97
|
+
const normalizedAssetRelativePath = assetRelativePath.length === 0 ? '.' : assetRelativePath.replace(/\/+$/, '');
|
|
98
|
+
const escapedDir = assetDir.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
99
|
+
const $ = load(htmlContent);
|
|
100
|
+
$('script[src]').each((_, element) => {
|
|
101
|
+
const $element = $(element);
|
|
102
|
+
const src = $element.attr('src');
|
|
103
|
+
if (!src)
|
|
104
|
+
return;
|
|
105
|
+
if (/^\/(main|pages\/[^/]+\/[^/]+)\.js(?:[?#].*)?$/i.test(src)) {
|
|
106
|
+
$element.attr('src', './view.js');
|
|
107
|
+
}
|
|
108
|
+
});
|
|
109
|
+
const buildAssetHref = (file, suffix) => {
|
|
110
|
+
const basePath = normalizedAssetRelativePath === '.' ? `./${file}` : `${normalizedAssetRelativePath}/${file}`;
|
|
111
|
+
return `${basePath}${suffix}`;
|
|
112
|
+
};
|
|
113
|
+
const rewriteAssetHref = (href) => {
|
|
114
|
+
if (!href)
|
|
115
|
+
return null;
|
|
116
|
+
let normalized = href.trim();
|
|
117
|
+
if (normalized.startsWith('./')) {
|
|
118
|
+
normalized = normalized.slice(2);
|
|
119
|
+
}
|
|
120
|
+
const assetPattern = new RegExp(`^/?${escapedDir}/([^?#]+)([?#].*)?$`, 'i');
|
|
121
|
+
const match = normalized.match(assetPattern);
|
|
122
|
+
if (!match) {
|
|
123
|
+
return null;
|
|
124
|
+
}
|
|
125
|
+
const file = match[1];
|
|
126
|
+
const suffix = match[2] ?? '';
|
|
127
|
+
return buildAssetHref(file, suffix);
|
|
128
|
+
};
|
|
129
|
+
this.rewriteLinkHrefs($, 'stylesheet', rewriteAssetHref);
|
|
130
|
+
this.rewriteLinkHrefs($, 'modulepreload', rewriteAssetHref);
|
|
131
|
+
return $.html();
|
|
132
|
+
}
|
|
133
|
+
rewriteLinkHrefs($, rel, transform) {
|
|
134
|
+
$('link[rel][href]').each((_, element) => {
|
|
135
|
+
const $element = $(element);
|
|
136
|
+
if (!this.linkHasRel($element.attr('rel'), rel)) {
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
139
|
+
const currentHref = $element.attr('href');
|
|
140
|
+
const nextHref = transform(currentHref ?? '');
|
|
141
|
+
if (!nextHref || nextHref === currentHref) {
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
144
|
+
$element.attr('href', nextHref);
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
linkHasRel(relAttr, target) {
|
|
148
|
+
if (!relAttr)
|
|
149
|
+
return false;
|
|
150
|
+
const relValue = relAttr
|
|
151
|
+
.split(/\s+/)
|
|
152
|
+
.map(value => value.toLowerCase())
|
|
153
|
+
.filter(Boolean);
|
|
154
|
+
return relValue.includes(target.toLowerCase());
|
|
155
|
+
}
|
|
156
|
+
resolveSourceImportPath(buildDir, sourcePath) {
|
|
157
|
+
const relativePath = path.relative(buildDir, sourcePath).split(path.sep).join('/');
|
|
158
|
+
return relativePath.startsWith('.') ? relativePath : `./${relativePath}`;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
//# sourceMappingURL=vue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vue.js","sourceRoot":"","sources":["../../../../src/builder/core/frameworks/vue.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAC/B,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAE/C,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEjD;;;GAGG;AACH,MAAM,OAAO,YAAa,SAAQ,kBAAkB;IAC1C,SAAS,CAAY;IACrB,eAAe,CAAkB;IAEzC,YAAY,WAAmB,EAAE,SAAiB;QAChD,KAAK,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;QAC9B,IAAI,CAAC,SAAS,GAAG,IAAI,SAAS,EAAE,CAAC;QACjC,IAAI,CAAC,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;IAC/C,CAAC;IAED,gBAAgB;QACd,OAAO,KAAK,CAAC;IACf,CAAC;IAED,aAAa;QACX,OAAO,CAAC,MAAM,CAAC,CAAC;IAClB,CAAC;IAED,eAAe;QACb,OAAO,EAAE,YAAY,EAAE,EAAE,EAAE,eAAe,EAAE,EAAE,EAAE,CAAC;IACnD,CAAC;IAED,KAAK,CAAC,UAAU,CACd,QAAgB,EAChB,IAAU,EACV,SAAoB,EACpB,aAAuB;QAEvB,2BAA2B;QAC3B,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QAE7B,4CAA4C;QAC5C,MAAM,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC;IACxE,CAAC;IAED,KAAK,CAAC,cAAc,CAClB,IAAU,EACV,SAAoB,EACpB,WAAyF,EACzF,YAAoB;QAEpB,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACzE,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAEnE,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAE9D,oBAAoB;QACpB,MAAM,cAAc,GAAG,WAAW,CAAC,SAAS;YAC1C,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,WAAW,CAAC,SAAS,CAAC;YACvD,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;QAEjD,MAAM,WAAW,GAAG,WAAW,CAAC,OAAO;YACrC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,WAAW,CAAC,OAAO,CAAC;YACrD,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QAE9C,IAAI,WAAW,GAAG,EAAE,CAAC,YAAY,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;QAE3D,iCAAiC;QACjC,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;QAE9C,aAAa;QACb,IAAI,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAC/B,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC,CAAC;QACpE,CAAC;QAED,mBAAmB;QACnB,IAAI,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YAC5B,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,GAAG,QAAQ,OAAO,CAAC,CAAC;YACtE,EAAE,CAAC,YAAY,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC;QAC3D,CAAC;QAED,0CAA0C;QAC1C,MAAM,iBAAiB,GAAG,IAAI;aAC3B,QAAQ,CAAC,aAAa,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;aAC5D,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;aACf,IAAI,CAAC,GAAG,CAAC,CAAC;QACb,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,iBAAiB,CAAC,CAAC;QACpF,WAAW,GAAG,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC;QACpD,WAAW,GAAG,WAAW,CAAC,OAAO,CAC/B,SAAS,EACT,aAAa,YAAY,sBAAsB,CAChD,CAAC;QAEF,6BAA6B;QAC7B,MAAM,mBAAmB,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,GAAG,QAAQ,MAAM,CAAC,CAAC;QACxE,EAAE,CAAC,aAAa,CAAC,mBAAmB,EAAE,WAAW,CAAC,CAAC;IACrD,CAAC;IAIO,KAAK,CAAC,gBAAgB,CAC5B,QAAgB,EAChB,IAAU,EACV,SAAoB,EACpB,aAAuB;QAEvB,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QAEhD,qBAAqB;QACrB,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;QACxD,IAAI,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;YACjC,IAAI,SAAS,GAAG,EAAE,CAAC,YAAY,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;YACxD,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;YACxD,EAAE,CAAC,aAAa,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;QAC7C,CAAC;QAED,kBAAkB;QAClB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAClD,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC9B,IAAI,MAAM,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YAElD,wBAAwB;YACxB,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,sBAAsB,CAAC,aAAa,CAAC,CAAC;YAChF,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,0BAA0B,EAAE,YAAY,CAAC,CAAC;YAElE,MAAM,SAAS,GAAG,oBAAoB,IAAI,CAAC,uBAAuB,CAAC,QAAQ,EAAE,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;YACtG,IAAI,MAAM,CAAC,QAAQ,CAAC,sBAAsB,CAAC,EAAE,CAAC;gBAC5C,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,sBAAsB,EAAE,SAAS,CAAC,CAAC;YAC7D,CAAC;YACD,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;IAED;;OAEG;IACK,YAAY,CAClB,WAAmB,EACnB,QAAgB,EAChB,QAAgB,EAChB,iBAAyB;QAEzB,MAAM,2BAA2B,GAC/B,iBAAiB,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,iBAAiB,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAC/E,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;QAEnE,MAAM,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC;QAE5B,CAAC,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE;YACnC,MAAM,QAAQ,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC;YAC5B,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACjC,IAAI,CAAC,GAAG;gBAAE,OAAO;YACjB,IAAI,gDAAgD,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC/D,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;YACpC,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,MAAM,cAAc,GAAG,CAAC,IAAY,EAAE,MAAc,EAAE,EAAE;YACtD,MAAM,QAAQ,GACZ,2BAA2B,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,2BAA2B,IAAI,IAAI,EAAE,CAAC;YAC/F,OAAO,GAAG,QAAQ,GAAG,MAAM,EAAE,CAAC;QAChC,CAAC,CAAC;QAEF,MAAM,gBAAgB,GAAG,CAAC,IAAY,EAAiB,EAAE;YACvD,IAAI,CAAC,IAAI;gBAAE,OAAO,IAAI,CAAC;YACvB,IAAI,UAAU,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YAC7B,IAAI,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBAChC,UAAU,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACnC,CAAC;YACD,MAAM,YAAY,GAAG,IAAI,MAAM,CAAC,MAAM,UAAU,qBAAqB,EAAE,GAAG,CAAC,CAAC;YAC5E,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;YAC7C,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,OAAO,IAAI,CAAC;YACd,CAAC;YACD,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACtB,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAC9B,OAAO,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACtC,CAAC,CAAC;QAEF,IAAI,CAAC,gBAAgB,CAAC,CAAC,EAAE,YAAY,EAAE,gBAAgB,CAAC,CAAC;QACzD,IAAI,CAAC,gBAAgB,CAAC,CAAC,EAAE,eAAe,EAAE,gBAAgB,CAAC,CAAC;QAE5D,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;IAClB,CAAC;IAEO,gBAAgB,CACtB,CAA0B,EAC1B,GAAmC,EACnC,SAA0C;QAE1C,CAAC,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE;YACvC,MAAM,QAAQ,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC;YAC5B,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;gBAChD,OAAO;YACT,CAAC;YAED,MAAM,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC1C,MAAM,QAAQ,GAAG,SAAS,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC;YAC9C,IAAI,CAAC,QAAQ,IAAI,QAAQ,KAAK,WAAW,EAAE,CAAC;gBAC1C,OAAO;YACT,CAAC;YAED,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,UAAU,CAAC,OAA2B,EAAE,MAAc;QAC5D,IAAI,CAAC,OAAO;YAAE,OAAO,KAAK,CAAC;QAC3B,MAAM,QAAQ,GAAG,OAAO;aACrB,KAAK,CAAC,KAAK,CAAC;aACZ,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;aACjC,MAAM,CAAC,OAAO,CAAC,CAAC;QACnB,OAAO,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;IACjD,CAAC;IAEO,uBAAuB,CAAC,QAAgB,EAAE,UAAkB;QAClE,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACnF,OAAO,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,YAAY,EAAE,CAAC;IAC3E,CAAC;CACF"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Framework Registry - Centralized framework configuration
|
|
3
|
+
* Makes it easy to add new frameworks without modifying multiple files
|
|
4
|
+
*/
|
|
5
|
+
export interface FrameworkConfig {
|
|
6
|
+
name: string;
|
|
7
|
+
extensions: string[];
|
|
8
|
+
mainTemplate: string;
|
|
9
|
+
indexTemplate: string;
|
|
10
|
+
vitePlugin?: string;
|
|
11
|
+
hasComponents: boolean;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Centralized registry of all supported frameworks
|
|
15
|
+
*/
|
|
16
|
+
export declare class FrameworkRegistry {
|
|
17
|
+
private static frameworks;
|
|
18
|
+
/**
|
|
19
|
+
* Get all supported frameworks
|
|
20
|
+
*/
|
|
21
|
+
static getAllFrameworks(): string[];
|
|
22
|
+
/**
|
|
23
|
+
* Get framework configuration
|
|
24
|
+
*/
|
|
25
|
+
static getFramework(name: string): FrameworkConfig | undefined;
|
|
26
|
+
/**
|
|
27
|
+
* Detect framework from file extension
|
|
28
|
+
*/
|
|
29
|
+
static detectFramework(filePath: string): string;
|
|
30
|
+
/**
|
|
31
|
+
* Check if framework is supported
|
|
32
|
+
*/
|
|
33
|
+
static isSupported(framework: string): boolean;
|
|
34
|
+
/**
|
|
35
|
+
* Register a new framework (for future extensibility)
|
|
36
|
+
*/
|
|
37
|
+
static register(name: string, config: FrameworkConfig): void;
|
|
38
|
+
/**
|
|
39
|
+
* Get frameworks that need Vite building
|
|
40
|
+
*/
|
|
41
|
+
static getBuildableFrameworks(): string[];
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/builder/core/registry.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,OAAO,CAAC;CACxB;AAED;;GAEG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,MAAM,CAAC,UAAU,CAwBtB;IAEH;;OAEG;IACH,MAAM,CAAC,gBAAgB,IAAI,MAAM,EAAE;IAInC;;OAEG;IACH,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS;IAI9D;;OAEG;IACH,MAAM,CAAC,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAYhD;;OAEG;IACH,MAAM,CAAC,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAI9C;;OAEG;IACH,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,GAAG,IAAI;IAI5D;;OAEG;IACH,MAAM,CAAC,sBAAsB,IAAI,MAAM,EAAE;CAK1C"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Framework Registry - Centralized framework configuration
|
|
3
|
+
* Makes it easy to add new frameworks without modifying multiple files
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Centralized registry of all supported frameworks
|
|
7
|
+
*/
|
|
8
|
+
export class FrameworkRegistry {
|
|
9
|
+
static frameworks = new Map([
|
|
10
|
+
['react', {
|
|
11
|
+
name: 'React',
|
|
12
|
+
extensions: ['.tsx', '.jsx'],
|
|
13
|
+
mainTemplate: 'main.jsx',
|
|
14
|
+
indexTemplate: 'index.html',
|
|
15
|
+
vitePlugin: '@vitejs/plugin-react',
|
|
16
|
+
hasComponents: true
|
|
17
|
+
}],
|
|
18
|
+
['vue', {
|
|
19
|
+
name: 'Vue',
|
|
20
|
+
extensions: ['.vue'],
|
|
21
|
+
mainTemplate: 'main.js',
|
|
22
|
+
indexTemplate: 'index.html',
|
|
23
|
+
vitePlugin: '@vitejs/plugin-vue',
|
|
24
|
+
hasComponents: true
|
|
25
|
+
}],
|
|
26
|
+
['html', {
|
|
27
|
+
name: 'HTML',
|
|
28
|
+
extensions: ['.html'],
|
|
29
|
+
mainTemplate: '',
|
|
30
|
+
indexTemplate: '',
|
|
31
|
+
hasComponents: false
|
|
32
|
+
}]
|
|
33
|
+
]);
|
|
34
|
+
/**
|
|
35
|
+
* Get all supported frameworks
|
|
36
|
+
*/
|
|
37
|
+
static getAllFrameworks() {
|
|
38
|
+
return Array.from(this.frameworks.keys());
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Get framework configuration
|
|
42
|
+
*/
|
|
43
|
+
static getFramework(name) {
|
|
44
|
+
return this.frameworks.get(name);
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Detect framework from file extension
|
|
48
|
+
*/
|
|
49
|
+
static detectFramework(filePath) {
|
|
50
|
+
const ext = filePath.substring(filePath.lastIndexOf('.'));
|
|
51
|
+
for (const [frameworkName, config] of this.frameworks) {
|
|
52
|
+
if (config.extensions.includes(ext)) {
|
|
53
|
+
return frameworkName;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return 'html'; // Default fallback
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Check if framework is supported
|
|
60
|
+
*/
|
|
61
|
+
static isSupported(framework) {
|
|
62
|
+
return this.frameworks.has(framework);
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Register a new framework (for future extensibility)
|
|
66
|
+
*/
|
|
67
|
+
static register(name, config) {
|
|
68
|
+
this.frameworks.set(name, config);
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Get frameworks that need Vite building
|
|
72
|
+
*/
|
|
73
|
+
static getBuildableFrameworks() {
|
|
74
|
+
return Array.from(this.frameworks.entries())
|
|
75
|
+
.filter(([_, config]) => config.hasComponents)
|
|
76
|
+
.map(([name, _]) => name);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/builder/core/registry.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAWH;;GAEG;AACH,MAAM,OAAO,iBAAiB;IACpB,MAAM,CAAC,UAAU,GAAiC,IAAI,GAAG,CAAC;QAChE,CAAC,OAAO,EAAE;gBACR,IAAI,EAAE,OAAO;gBACb,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC;gBAC5B,YAAY,EAAE,UAAU;gBACxB,aAAa,EAAE,YAAY;gBAC3B,UAAU,EAAE,sBAAsB;gBAClC,aAAa,EAAE,IAAI;aACpB,CAAC;QACF,CAAC,KAAK,EAAE;gBACN,IAAI,EAAE,KAAK;gBACX,UAAU,EAAE,CAAC,MAAM,CAAC;gBACpB,YAAY,EAAE,SAAS;gBACvB,aAAa,EAAE,YAAY;gBAC3B,UAAU,EAAE,oBAAoB;gBAChC,aAAa,EAAE,IAAI;aACpB,CAAC;QACF,CAAC,MAAM,EAAE;gBACP,IAAI,EAAE,MAAM;gBACZ,UAAU,EAAE,CAAC,OAAO,CAAC;gBACrB,YAAY,EAAE,EAAE;gBAChB,aAAa,EAAE,EAAE;gBACjB,aAAa,EAAE,KAAK;aACrB,CAAC;KACH,CAAC,CAAC;IAEH;;OAEG;IACH,MAAM,CAAC,gBAAgB;QACrB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,YAAY,CAAC,IAAY;QAC9B,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,eAAe,CAAC,QAAgB;QACrC,MAAM,GAAG,GAAG,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;QAE1D,KAAK,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACtD,IAAI,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBACpC,OAAO,aAAa,CAAC;YACvB,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC,CAAC,mBAAmB;IACpC,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,WAAW,CAAC,SAAiB;QAClC,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACxC,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,QAAQ,CAAC,IAAY,EAAE,MAAuB;QACnD,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACpC,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,sBAAsB;QAC3B,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;aACzC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC;aAC7C,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export declare class TemplateManager {
|
|
2
|
+
copyFrameworkTemplates(framework: string, buildDir: string): void;
|
|
3
|
+
generatePageTemplate(framework: 'react' | 'vue', pageFunctions: string[]): string;
|
|
4
|
+
generateFunctionBridge(functions: string[]): string;
|
|
5
|
+
hasFrameworkTemplate(framework: string): boolean;
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=template.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"template.d.ts","sourceRoot":"","sources":["../../../src/builder/core/template.ts"],"names":[],"mappings":"AAKA,qBAAa,eAAe;IAC1B,sBAAsB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAcjE,oBAAoB,CAAC,SAAS,EAAE,OAAO,GAAG,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,GAAG,MAAM;IAUjF,sBAAsB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,MAAM;IAgCnD,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;CAGjD"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import * as fs from 'fs';
|
|
2
|
+
import * as path from 'path';
|
|
3
|
+
import { FrameworkRegistry } from './registry.js';
|
|
4
|
+
import { hasFrameworkTemplates, getFrameworkTemplates } from './templates/embedded.js';
|
|
5
|
+
export class TemplateManager {
|
|
6
|
+
copyFrameworkTemplates(framework, buildDir) {
|
|
7
|
+
if (!FrameworkRegistry.isSupported(framework)) {
|
|
8
|
+
throw new Error(`Unsupported framework: ${framework}`);
|
|
9
|
+
}
|
|
10
|
+
const templates = getFrameworkTemplates(framework);
|
|
11
|
+
if (!templates) {
|
|
12
|
+
throw new Error(`Framework templates not found: ${framework}`);
|
|
13
|
+
}
|
|
14
|
+
fs.writeFileSync(path.join(buildDir, 'index.html'), templates.indexHtml);
|
|
15
|
+
fs.writeFileSync(path.join(buildDir, templates.mainEntryFilename), templates.mainEntry);
|
|
16
|
+
}
|
|
17
|
+
generatePageTemplate(framework, pageFunctions) {
|
|
18
|
+
const templates = getFrameworkTemplates(framework);
|
|
19
|
+
if (!templates) {
|
|
20
|
+
throw new Error(`Framework templates not found: ${framework}`);
|
|
21
|
+
}
|
|
22
|
+
const functionBridge = this.generateFunctionBridge(pageFunctions);
|
|
23
|
+
return templates.mainEntry.replace('/* {{PAGE_FUNCTIONS}} */', functionBridge);
|
|
24
|
+
}
|
|
25
|
+
generateFunctionBridge(functions) {
|
|
26
|
+
if (functions.length === 0) {
|
|
27
|
+
return 'window.__PAGE_FUNCTIONS = [];';
|
|
28
|
+
}
|
|
29
|
+
const functionList = JSON.stringify(functions);
|
|
30
|
+
// Generate explicit function wrappers for better debugging and runtime safety
|
|
31
|
+
const wrappers = functions.map(funcName => `
|
|
32
|
+
window['${funcName}'] = function(...args) {
|
|
33
|
+
// Filter out React/DOM event objects to prevent circular reference errors
|
|
34
|
+
const cleanArgs = args.filter(arg => {
|
|
35
|
+
if (arg && typeof arg === 'object') {
|
|
36
|
+
return !(arg.nativeEvent || arg.target || arg.currentTarget ||
|
|
37
|
+
arg instanceof Event || arg.constructor.name.includes('Event'));
|
|
38
|
+
}
|
|
39
|
+
return true;
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
return window.LingXiaBridge.call('${funcName}', cleanArgs.length === 1 ? cleanArgs[0] : cleanArgs)
|
|
43
|
+
.catch(function(e) {
|
|
44
|
+
console.warn('[PageFunc] ${funcName} failed:', e.message || e);
|
|
45
|
+
throw e;
|
|
46
|
+
});
|
|
47
|
+
};`).join('\n');
|
|
48
|
+
return `window.__PAGE_FUNCTIONS = ${functionList};
|
|
49
|
+
|
|
50
|
+
// Generate bridge functions
|
|
51
|
+
${wrappers}`;
|
|
52
|
+
}
|
|
53
|
+
hasFrameworkTemplate(framework) {
|
|
54
|
+
return hasFrameworkTemplates(framework);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=template.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"template.js","sourceRoot":"","sources":["../../../src/builder/core/template.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAEvF,MAAM,OAAO,eAAe;IAC1B,sBAAsB,CAAC,SAAiB,EAAE,QAAgB;QACxD,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE,CAAC;YAC9C,MAAM,IAAI,KAAK,CAAC,0BAA0B,SAAS,EAAE,CAAC,CAAC;QACzD,CAAC;QAED,MAAM,SAAS,GAAG,qBAAqB,CAAC,SAAS,CAAC,CAAC;QACnD,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,kCAAkC,SAAS,EAAE,CAAC,CAAC;QACjE,CAAC;QAED,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;QACzE,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,iBAAiB,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC1F,CAAC;IAED,oBAAoB,CAAC,SAA0B,EAAE,aAAuB;QACtE,MAAM,SAAS,GAAG,qBAAqB,CAAC,SAAS,CAAC,CAAC;QACnD,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,kCAAkC,SAAS,EAAE,CAAC,CAAC;QACjE,CAAC;QAED,MAAM,cAAc,GAAG,IAAI,CAAC,sBAAsB,CAAC,aAAa,CAAC,CAAC;QAClE,OAAO,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,0BAA0B,EAAE,cAAc,CAAC,CAAC;IACjF,CAAC;IAED,sBAAsB,CAAC,SAAmB;QACxC,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,OAAO,+BAA+B,CAAC;QACzC,CAAC;QAED,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAE/C,8EAA8E;QAC9E,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;UACrC,QAAQ;;;;;;;;;;sCAUoB,QAAQ;;iCAEb,QAAQ;;;GAGtC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEZ,OAAO,6BAA6B,YAAY;;;EAGlD,QAAQ,EAAE,CAAC;IACX,CAAC;IAED,oBAAoB,CAAC,SAAiB;QACpC,OAAO,qBAAqB,CAAC,SAAS,CAAC,CAAC;IAC1C,CAAC;CACF"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Embedded builder templates for React and Vue frameworks.
|
|
3
|
+
* These are internal templates used during the build process, not user-facing.
|
|
4
|
+
*/
|
|
5
|
+
export declare const REACT_INDEX_HTML = "<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no\" />\n <title>LingXia React Page</title>\n </head>\n <body>\n <div id=\"root\"></div>\n <script type=\"module\" src=\"./main.jsx\"></script>\n </body>\n</html>";
|
|
6
|
+
export declare const REACT_MAIN_JSX = "import React from 'react'\nimport ReactDOM from 'react-dom/client'\n/* {{APP_IMPORT}} */\n\nwindow.useLingXia = function () {\n const [data, setData] = React.useState({});\n\n React.useEffect(() => {\n if (window.LingXiaBridge && window.LingXiaBridge.subscribe) {\n window.LingXiaBridge.subscribe((newData) => {\n if (newData) {\n setData(prevData => ({ ...prevData, ...newData }));\n }\n });\n }\n }, []);\n\n // Create functions object from page functions\n const functions = React.useMemo(() => {\n if (!window.__PAGE_FUNCTIONS) return {};\n\n return window.__PAGE_FUNCTIONS.reduce((acc, funcName) => {\n acc[funcName] = window[funcName];\n return acc;\n }, {});\n }, []);\n\n // Return both data and functions\n return {\n data,\n ...functions\n };\n};\n\n// Page functions injection\n/* {{PAGE_FUNCTIONS}} */\n\nReactDOM.createRoot(document.getElementById('root')).render(\n <React.StrictMode>\n <App />\n </React.StrictMode>,\n)";
|
|
7
|
+
export declare const VUE_INDEX_HTML = "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"UTF-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no\">\n <title>LingXia Vue Page</title>\n</head>\n<body>\n <div id=\"app\"></div>\n <script type=\"module\" src=\"./main.js\"></script>\n</body>\n</html>";
|
|
8
|
+
export declare const VUE_MAIN_JS = "import { createApp, ref } from \"vue\";\n/* {{APP_IMPORT}} */\n\nwindow.useLingXia = function () {\n const dataInstance = ref({});\n\n if (window.LingXiaBridge && window.LingXiaBridge.subscribe) {\n window.LingXiaBridge.subscribe((newData) => {\n if (newData && dataInstance.value) {\n Object.assign(dataInstance.value, newData);\n }\n });\n }\n\n return dataInstance;\n};\n\n// Page functions injection\n/* {{PAGE_FUNCTIONS}} */\n\n// Create and configure Vue app\nconst app = createApp(App);\n\n// Register page functions to Vue global properties (before mount)\nif (window.__PAGE_FUNCTIONS) {\n window.__PAGE_FUNCTIONS.forEach((funcName) => {\n app.config.globalProperties[funcName] = window[funcName];\n });\n}\n\napp.mount(\"#app\");\n";
|
|
9
|
+
export interface FrameworkTemplates {
|
|
10
|
+
indexHtml: string;
|
|
11
|
+
mainEntry: string;
|
|
12
|
+
mainEntryFilename: string;
|
|
13
|
+
}
|
|
14
|
+
export declare const FRAMEWORK_TEMPLATES: Record<string, FrameworkTemplates>;
|
|
15
|
+
export declare function getFrameworkTemplates(framework: string): FrameworkTemplates | undefined;
|
|
16
|
+
export declare function hasFrameworkTemplates(framework: string): boolean;
|
|
17
|
+
//# sourceMappingURL=embedded.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"embedded.d.ts","sourceRoot":"","sources":["../../../../src/builder/core/templates/embedded.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,eAAO,MAAM,gBAAgB,4WAWrB,CAAC;AAET,eAAO,MAAM,cAAc,y/BAyCzB,CAAC;AAEH,eAAO,MAAM,cAAc,kVAWnB,CAAC;AAET,eAAO,MAAM,WAAW,ywBA+BvB,CAAC;AAEF,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAWlE,CAAC;AAEF,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,kBAAkB,GAAG,SAAS,CAEvF;AAED,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAEhE"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Embedded builder templates for React and Vue frameworks.
|
|
3
|
+
* These are internal templates used during the build process, not user-facing.
|
|
4
|
+
*/
|
|
5
|
+
export const REACT_INDEX_HTML = `<!DOCTYPE html>
|
|
6
|
+
<html lang="en">
|
|
7
|
+
<head>
|
|
8
|
+
<meta charset="UTF-8" />
|
|
9
|
+
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" />
|
|
10
|
+
<title>LingXia React Page</title>
|
|
11
|
+
</head>
|
|
12
|
+
<body>
|
|
13
|
+
<div id="root"></div>
|
|
14
|
+
<script type="module" src="./main.jsx"></script>
|
|
15
|
+
</body>
|
|
16
|
+
</html>`;
|
|
17
|
+
export const REACT_MAIN_JSX = `import React from 'react'
|
|
18
|
+
import ReactDOM from 'react-dom/client'
|
|
19
|
+
/* {{APP_IMPORT}} */
|
|
20
|
+
|
|
21
|
+
window.useLingXia = function () {
|
|
22
|
+
const [data, setData] = React.useState({});
|
|
23
|
+
|
|
24
|
+
React.useEffect(() => {
|
|
25
|
+
if (window.LingXiaBridge && window.LingXiaBridge.subscribe) {
|
|
26
|
+
window.LingXiaBridge.subscribe((newData) => {
|
|
27
|
+
if (newData) {
|
|
28
|
+
setData(prevData => ({ ...prevData, ...newData }));
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
}, []);
|
|
33
|
+
|
|
34
|
+
// Create functions object from page functions
|
|
35
|
+
const functions = React.useMemo(() => {
|
|
36
|
+
if (!window.__PAGE_FUNCTIONS) return {};
|
|
37
|
+
|
|
38
|
+
return window.__PAGE_FUNCTIONS.reduce((acc, funcName) => {
|
|
39
|
+
acc[funcName] = window[funcName];
|
|
40
|
+
return acc;
|
|
41
|
+
}, {});
|
|
42
|
+
}, []);
|
|
43
|
+
|
|
44
|
+
// Return both data and functions
|
|
45
|
+
return {
|
|
46
|
+
data,
|
|
47
|
+
...functions
|
|
48
|
+
};
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
// Page functions injection
|
|
52
|
+
/* {{PAGE_FUNCTIONS}} */
|
|
53
|
+
|
|
54
|
+
ReactDOM.createRoot(document.getElementById('root')).render(
|
|
55
|
+
<React.StrictMode>
|
|
56
|
+
<App />
|
|
57
|
+
</React.StrictMode>,
|
|
58
|
+
)`;
|
|
59
|
+
export const VUE_INDEX_HTML = `<!DOCTYPE html>
|
|
60
|
+
<html lang="en">
|
|
61
|
+
<head>
|
|
62
|
+
<meta charset="UTF-8">
|
|
63
|
+
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
|
|
64
|
+
<title>LingXia Vue Page</title>
|
|
65
|
+
</head>
|
|
66
|
+
<body>
|
|
67
|
+
<div id="app"></div>
|
|
68
|
+
<script type="module" src="./main.js"></script>
|
|
69
|
+
</body>
|
|
70
|
+
</html>`;
|
|
71
|
+
export const VUE_MAIN_JS = `import { createApp, ref } from "vue";
|
|
72
|
+
/* {{APP_IMPORT}} */
|
|
73
|
+
|
|
74
|
+
window.useLingXia = function () {
|
|
75
|
+
const dataInstance = ref({});
|
|
76
|
+
|
|
77
|
+
if (window.LingXiaBridge && window.LingXiaBridge.subscribe) {
|
|
78
|
+
window.LingXiaBridge.subscribe((newData) => {
|
|
79
|
+
if (newData && dataInstance.value) {
|
|
80
|
+
Object.assign(dataInstance.value, newData);
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
return dataInstance;
|
|
86
|
+
};
|
|
87
|
+
|
|
88
|
+
// Page functions injection
|
|
89
|
+
/* {{PAGE_FUNCTIONS}} */
|
|
90
|
+
|
|
91
|
+
// Create and configure Vue app
|
|
92
|
+
const app = createApp(App);
|
|
93
|
+
|
|
94
|
+
// Register page functions to Vue global properties (before mount)
|
|
95
|
+
if (window.__PAGE_FUNCTIONS) {
|
|
96
|
+
window.__PAGE_FUNCTIONS.forEach((funcName) => {
|
|
97
|
+
app.config.globalProperties[funcName] = window[funcName];
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
app.mount("#app");
|
|
102
|
+
`;
|
|
103
|
+
export const FRAMEWORK_TEMPLATES = {
|
|
104
|
+
react: {
|
|
105
|
+
indexHtml: REACT_INDEX_HTML,
|
|
106
|
+
mainEntry: REACT_MAIN_JSX,
|
|
107
|
+
mainEntryFilename: 'main.jsx',
|
|
108
|
+
},
|
|
109
|
+
vue: {
|
|
110
|
+
indexHtml: VUE_INDEX_HTML,
|
|
111
|
+
mainEntry: VUE_MAIN_JS,
|
|
112
|
+
mainEntryFilename: 'main.js',
|
|
113
|
+
},
|
|
114
|
+
};
|
|
115
|
+
export function getFrameworkTemplates(framework) {
|
|
116
|
+
return FRAMEWORK_TEMPLATES[framework];
|
|
117
|
+
}
|
|
118
|
+
export function hasFrameworkTemplates(framework) {
|
|
119
|
+
return framework in FRAMEWORK_TEMPLATES;
|
|
120
|
+
}
|
|
121
|
+
//# sourceMappingURL=embedded.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"embedded.js","sourceRoot":"","sources":["../../../../src/builder/core/templates/embedded.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,CAAC,MAAM,gBAAgB,GAAG;;;;;;;;;;;QAWxB,CAAC;AAET,MAAM,CAAC,MAAM,cAAc,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAyC5B,CAAC;AAEH,MAAM,CAAC,MAAM,cAAc,GAAG;;;;;;;;;;;QAWtB,CAAC;AAET,MAAM,CAAC,MAAM,WAAW,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+B1B,CAAC;AAQF,MAAM,CAAC,MAAM,mBAAmB,GAAuC;IACrE,KAAK,EAAE;QACL,SAAS,EAAE,gBAAgB;QAC3B,SAAS,EAAE,cAAc;QACzB,iBAAiB,EAAE,UAAU;KAC9B;IACD,GAAG,EAAE;QACH,SAAS,EAAE,cAAc;QACzB,SAAS,EAAE,WAAW;QACtB,iBAAiB,EAAE,SAAS;KAC7B;CACF,CAAC;AAEF,MAAM,UAAU,qBAAqB,CAAC,SAAiB;IACrD,OAAO,mBAAmB,CAAC,SAAS,CAAC,CAAC;AACxC,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,SAAiB;IACrD,OAAO,SAAS,IAAI,mBAAmB,CAAC;AAC1C,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
export declare class FileUtils {
|
|
2
|
+
/**
|
|
3
|
+
* Copy directory recursively
|
|
4
|
+
*/
|
|
5
|
+
copyDirectory(sourceDir: string, destDir: string): Promise<void>;
|
|
6
|
+
/**
|
|
7
|
+
* Ensure directory exists
|
|
8
|
+
*/
|
|
9
|
+
ensureDirectory(dirPath: string): void;
|
|
10
|
+
/**
|
|
11
|
+
* Clean directory (remove all contents)
|
|
12
|
+
*/
|
|
13
|
+
cleanDirectory(dirPath: string, excludeDirs?: string[]): void;
|
|
14
|
+
/**
|
|
15
|
+
* Get file extension without dot
|
|
16
|
+
*/
|
|
17
|
+
getExtension(filePath: string): string;
|
|
18
|
+
/**
|
|
19
|
+
* Get base name without extension
|
|
20
|
+
*/
|
|
21
|
+
getBaseName(filePath: string): string;
|
|
22
|
+
/**
|
|
23
|
+
* Check if file exists and is readable
|
|
24
|
+
*/
|
|
25
|
+
isReadableFile(filePath: string): boolean;
|
|
26
|
+
/**
|
|
27
|
+
* Read JSON file safely
|
|
28
|
+
*/
|
|
29
|
+
readJsonFile<T = any>(filePath: string): T | null;
|
|
30
|
+
/**
|
|
31
|
+
* Write JSON file with formatting
|
|
32
|
+
*/
|
|
33
|
+
writeJsonFile(filePath: string, data: any): void;
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=file.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file.d.ts","sourceRoot":"","sources":["../../../../src/builder/core/utils/file.ts"],"names":[],"mappings":"AAGA,qBAAa,SAAS;IACpB;;OAEG;IACG,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAmBtE;;OAEG;IACH,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAMtC;;OAEG;IACH,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,GAAE,MAAM,EAAO,GAAG,IAAI;IAsBjE;;OAEG;IACH,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAItC;;OAEG;IACH,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAIrC;;OAEG;IACH,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IASzC;;OAEG;IACH,YAAY,CAAC,CAAC,GAAG,GAAG,EAAE,QAAQ,EAAE,MAAM,GAAG,CAAC,GAAG,IAAI;IASjD;;OAEG;IACH,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,IAAI;CAIjD"}
|