@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.
Files changed (163) hide show
  1. package/bin/lingxia.js +91 -0
  2. package/dist/builder/commands/build.d.ts +3 -0
  3. package/dist/builder/commands/build.d.ts.map +1 -0
  4. package/dist/builder/commands/build.js +317 -0
  5. package/dist/builder/commands/build.js.map +1 -0
  6. package/dist/builder/core/builders/logic.d.ts +48 -0
  7. package/dist/builder/core/builders/logic.d.ts.map +1 -0
  8. package/dist/builder/core/builders/logic.js +212 -0
  9. package/dist/builder/core/builders/logic.js.map +1 -0
  10. package/dist/builder/core/builders/page-functions.d.ts +2 -0
  11. package/dist/builder/core/builders/page-functions.d.ts.map +1 -0
  12. package/dist/builder/core/builders/page-functions.js +119 -0
  13. package/dist/builder/core/builders/page-functions.js.map +1 -0
  14. package/dist/builder/core/builders/page-path-injector.d.ts +5 -0
  15. package/dist/builder/core/builders/page-path-injector.d.ts.map +1 -0
  16. package/dist/builder/core/builders/page-path-injector.js +94 -0
  17. package/dist/builder/core/builders/page-path-injector.js.map +1 -0
  18. package/dist/builder/core/builders/page.d.ts +37 -0
  19. package/dist/builder/core/builders/page.d.ts.map +1 -0
  20. package/dist/builder/core/builders/page.js +246 -0
  21. package/dist/builder/core/builders/page.js.map +1 -0
  22. package/dist/builder/core/builders/view.d.ts +23 -0
  23. package/dist/builder/core/builders/view.d.ts.map +1 -0
  24. package/dist/builder/core/builders/view.js +194 -0
  25. package/dist/builder/core/builders/view.js.map +1 -0
  26. package/dist/builder/core/config/alias-config.d.ts +4 -0
  27. package/dist/builder/core/config/alias-config.d.ts.map +1 -0
  28. package/dist/builder/core/config/alias-config.js +29 -0
  29. package/dist/builder/core/config/alias-config.js.map +1 -0
  30. package/dist/builder/core/config/build-config.d.ts +8 -0
  31. package/dist/builder/core/config/build-config.d.ts.map +1 -0
  32. package/dist/builder/core/config/build-config.js +33 -0
  33. package/dist/builder/core/config/build-config.js.map +1 -0
  34. package/dist/builder/core/config/framework.d.ts +3 -0
  35. package/dist/builder/core/config/framework.d.ts.map +1 -0
  36. package/dist/builder/core/config/framework.js +51 -0
  37. package/dist/builder/core/config/framework.js.map +1 -0
  38. package/dist/builder/core/config/lingxia-config.d.ts +55 -0
  39. package/dist/builder/core/config/lingxia-config.d.ts.map +1 -0
  40. package/dist/builder/core/config/lingxia-config.js +174 -0
  41. package/dist/builder/core/config/lingxia-config.js.map +1 -0
  42. package/dist/builder/core/config/view-build-schema.d.ts +17 -0
  43. package/dist/builder/core/config/view-build-schema.d.ts.map +1 -0
  44. package/dist/builder/core/config/view-build-schema.js +2 -0
  45. package/dist/builder/core/config/view-build-schema.js.map +1 -0
  46. package/dist/builder/core/config/view-config.d.ts +11 -0
  47. package/dist/builder/core/config/view-config.d.ts.map +1 -0
  48. package/dist/builder/core/config/view-config.js +79 -0
  49. package/dist/builder/core/config/view-config.js.map +1 -0
  50. package/dist/builder/core/config.d.ts +34 -0
  51. package/dist/builder/core/config.d.ts.map +1 -0
  52. package/dist/builder/core/config.js +73 -0
  53. package/dist/builder/core/config.js.map +1 -0
  54. package/dist/builder/core/constants/source-dirs.d.ts +4 -0
  55. package/dist/builder/core/constants/source-dirs.d.ts.map +1 -0
  56. package/dist/builder/core/constants/source-dirs.js +24 -0
  57. package/dist/builder/core/constants/source-dirs.js.map +1 -0
  58. package/dist/builder/core/constants/static-dirs.d.ts +4 -0
  59. package/dist/builder/core/constants/static-dirs.d.ts.map +1 -0
  60. package/dist/builder/core/constants/static-dirs.js +51 -0
  61. package/dist/builder/core/constants/static-dirs.js.map +1 -0
  62. package/dist/builder/core/frameworks/base.d.ts +49 -0
  63. package/dist/builder/core/frameworks/base.d.ts.map +1 -0
  64. package/dist/builder/core/frameworks/base.js +61 -0
  65. package/dist/builder/core/frameworks/base.js.map +1 -0
  66. package/dist/builder/core/frameworks/factory.d.ts +29 -0
  67. package/dist/builder/core/frameworks/factory.d.ts.map +1 -0
  68. package/dist/builder/core/frameworks/factory.js +59 -0
  69. package/dist/builder/core/frameworks/factory.js.map +1 -0
  70. package/dist/builder/core/frameworks/html.d.ts +30 -0
  71. package/dist/builder/core/frameworks/html.d.ts.map +1 -0
  72. package/dist/builder/core/frameworks/html.js +92 -0
  73. package/dist/builder/core/frameworks/html.js.map +1 -0
  74. package/dist/builder/core/frameworks/react.d.ts +33 -0
  75. package/dist/builder/core/frameworks/react.d.ts.map +1 -0
  76. package/dist/builder/core/frameworks/react.js +161 -0
  77. package/dist/builder/core/frameworks/react.js.map +1 -0
  78. package/dist/builder/core/frameworks/templates.d.ts +2 -0
  79. package/dist/builder/core/frameworks/templates.d.ts.map +1 -0
  80. package/dist/builder/core/frameworks/templates.js +3 -0
  81. package/dist/builder/core/frameworks/templates.js.map +1 -0
  82. package/dist/builder/core/frameworks/vue.d.ts +33 -0
  83. package/dist/builder/core/frameworks/vue.d.ts.map +1 -0
  84. package/dist/builder/core/frameworks/vue.js +161 -0
  85. package/dist/builder/core/frameworks/vue.js.map +1 -0
  86. package/dist/builder/core/registry.d.ts +43 -0
  87. package/dist/builder/core/registry.d.ts.map +1 -0
  88. package/dist/builder/core/registry.js +79 -0
  89. package/dist/builder/core/registry.js.map +1 -0
  90. package/dist/builder/core/template.d.ts +7 -0
  91. package/dist/builder/core/template.d.ts.map +1 -0
  92. package/dist/builder/core/template.js +57 -0
  93. package/dist/builder/core/template.js.map +1 -0
  94. package/dist/builder/core/templates/embedded.d.ts +17 -0
  95. package/dist/builder/core/templates/embedded.d.ts.map +1 -0
  96. package/dist/builder/core/templates/embedded.js +121 -0
  97. package/dist/builder/core/templates/embedded.js.map +1 -0
  98. package/dist/builder/core/utils/file.d.ts +35 -0
  99. package/dist/builder/core/utils/file.d.ts.map +1 -0
  100. package/dist/builder/core/utils/file.js +99 -0
  101. package/dist/builder/core/utils/file.js.map +1 -0
  102. package/dist/builder/core/utils/page.d.ts +14 -0
  103. package/dist/builder/core/utils/page.d.ts.map +1 -0
  104. package/dist/builder/core/utils/page.js +46 -0
  105. package/dist/builder/core/utils/page.js.map +1 -0
  106. package/dist/builder/index.d.ts +2 -0
  107. package/dist/builder/index.d.ts.map +1 -0
  108. package/dist/builder/index.js +2 -0
  109. package/dist/builder/index.js.map +1 -0
  110. package/dist/builder/types/index.d.ts +67 -0
  111. package/dist/builder/types/index.d.ts.map +1 -0
  112. package/dist/builder/types/index.js +2 -0
  113. package/dist/builder/types/index.js.map +1 -0
  114. package/dist/commands/create.d.ts +7 -0
  115. package/dist/commands/create.d.ts.map +1 -0
  116. package/dist/commands/create.js +151 -0
  117. package/dist/commands/create.js.map +1 -0
  118. package/dist/index.d.ts +2 -0
  119. package/dist/index.d.ts.map +1 -0
  120. package/dist/index.js +45 -0
  121. package/dist/index.js.map +1 -0
  122. package/package.json +49 -0
  123. package/scripts/ensure-deps.cjs +54 -0
  124. package/scripts/install.cjs +62 -0
  125. package/scripts/set-version.cjs +34 -0
  126. package/scripts/sync-templates.cjs +36 -0
  127. package/templates/android-native/app/build.gradle.kts +48 -0
  128. package/templates/android-native/app/proguard-rules.pro +21 -0
  129. package/templates/android-native/app/src/main/AndroidManifest.xml +21 -0
  130. package/templates/android-native/app/src/main/java/MainActivity.kt +27 -0
  131. package/templates/android-native/app/src/main/res/values/strings.xml +3 -0
  132. package/templates/android-native/build.gradle.kts +5 -0
  133. package/templates/android-native/gradle/libs.versions.toml +16 -0
  134. package/templates/android-native/gradle/wrapper/gradle-wrapper.jar +0 -0
  135. package/templates/android-native/gradle/wrapper/gradle-wrapper.properties +6 -0
  136. package/templates/android-native/gradle.properties +4 -0
  137. package/templates/android-native/gradlew +185 -0
  138. package/templates/android-native/gradlew.bat +89 -0
  139. package/templates/android-native/settings.gradle.kts +25 -0
  140. package/templates/lxapp-create/react/lxapp.config.json +8 -0
  141. package/templates/lxapp-create/react/lxapp.json +8 -0
  142. package/templates/lxapp-create/react/lxapp.ts +8 -0
  143. package/templates/lxapp-create/react/package.json +26 -0
  144. package/templates/lxapp-create/react/pages/home/index.json +3 -0
  145. package/templates/lxapp-create/react/pages/home/index.ts +14 -0
  146. package/templates/lxapp-create/react/pages/home/index.tsx +60 -0
  147. package/templates/lxapp-create/react/public/.gitkeep +0 -0
  148. package/templates/lxapp-create/react/shared/.gitkeep +0 -0
  149. package/templates/lxapp-create/react/tsconfig.json +20 -0
  150. package/templates/lxapp-create/vue/lxapp.config.json +8 -0
  151. package/templates/lxapp-create/vue/lxapp.json +8 -0
  152. package/templates/lxapp-create/vue/lxapp.ts +8 -0
  153. package/templates/lxapp-create/vue/package.json +24 -0
  154. package/templates/lxapp-create/vue/pages/home/index.json +3 -0
  155. package/templates/lxapp-create/vue/pages/home/index.ts +14 -0
  156. package/templates/lxapp-create/vue/pages/home/index.vue +48 -0
  157. package/templates/lxapp-create/vue/public/.gitkeep +0 -0
  158. package/templates/lxapp-create/vue/shared/.gitkeep +0 -0
  159. package/templates/lxapp-create/vue/tsconfig.json +20 -0
  160. package/templates/rust-lib/Cargo.toml +13 -0
  161. package/templates/rust-lib/README.md +14 -0
  162. package/templates/rust-lib/src/lib.rs +13 -0
  163. 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":"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"}
@@ -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"}