@lingxia/cli 0.0.8 → 0.1.1

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 (178) hide show
  1. package/bin/lingxia.js +207 -32
  2. package/dist/builder/commands/build.d.ts +1 -1
  3. package/dist/builder/commands/build.d.ts.map +1 -1
  4. package/dist/builder/commands/build.js +138 -103
  5. package/dist/builder/commands/build.js.map +1 -1
  6. package/dist/builder/core/builders/logic.d.ts +3 -3
  7. package/dist/builder/core/builders/logic.d.ts.map +1 -1
  8. package/dist/builder/core/builders/logic.js +55 -46
  9. package/dist/builder/core/builders/logic.js.map +1 -1
  10. package/dist/builder/core/builders/page-functions.d.ts.map +1 -1
  11. package/dist/builder/core/builders/page-functions.js +43 -35
  12. package/dist/builder/core/builders/page-functions.js.map +1 -1
  13. package/dist/builder/core/builders/page-path-injector.js +27 -27
  14. package/dist/builder/core/builders/page-path-injector.js.map +1 -1
  15. package/dist/builder/core/builders/page-types.d.ts +22 -0
  16. package/dist/builder/core/builders/page-types.d.ts.map +1 -0
  17. package/dist/builder/core/builders/page-types.js +374 -0
  18. package/dist/builder/core/builders/page-types.js.map +1 -0
  19. package/dist/builder/core/builders/page.d.ts +5 -4
  20. package/dist/builder/core/builders/page.d.ts.map +1 -1
  21. package/dist/builder/core/builders/page.js +54 -52
  22. package/dist/builder/core/builders/page.js.map +1 -1
  23. package/dist/builder/core/builders/view-validator.d.ts +9 -0
  24. package/dist/builder/core/builders/view-validator.d.ts.map +1 -0
  25. package/dist/builder/core/builders/view-validator.js +58 -0
  26. package/dist/builder/core/builders/view-validator.js.map +1 -0
  27. package/dist/builder/core/builders/view.d.ts +40 -3
  28. package/dist/builder/core/builders/view.d.ts.map +1 -1
  29. package/dist/builder/core/builders/view.js +406 -55
  30. package/dist/builder/core/builders/view.js.map +1 -1
  31. package/dist/builder/core/config/alias-config.d.ts +1 -1
  32. package/dist/builder/core/config/alias-config.d.ts.map +1 -1
  33. package/dist/builder/core/config/alias-config.js +8 -8
  34. package/dist/builder/core/config/alias-config.js.map +1 -1
  35. package/dist/builder/core/config/framework.d.ts +1 -1
  36. package/dist/builder/core/config/framework.d.ts.map +1 -1
  37. package/dist/builder/core/config/framework.js +14 -11
  38. package/dist/builder/core/config/framework.js.map +1 -1
  39. package/dist/builder/core/config/lxapp-config.d.ts +74 -0
  40. package/dist/builder/core/config/lxapp-config.d.ts.map +1 -0
  41. package/dist/builder/core/config/lxapp-config.js +195 -0
  42. package/dist/builder/core/config/lxapp-config.js.map +1 -0
  43. package/dist/builder/core/config/view-build-schema.d.ts +2 -2
  44. package/dist/builder/core/config/view-config.d.ts +3 -3
  45. package/dist/builder/core/config/view-config.d.ts.map +1 -1
  46. package/dist/builder/core/config/view-config.js +16 -16
  47. package/dist/builder/core/config/view-config.js.map +1 -1
  48. package/dist/builder/core/config.d.ts +1 -1
  49. package/dist/builder/core/config.js +11 -11
  50. package/dist/builder/core/constants/source-dirs.d.ts +1 -1
  51. package/dist/builder/core/constants/source-dirs.js +9 -9
  52. package/dist/builder/core/constants/source-dirs.js.map +1 -1
  53. package/dist/builder/core/constants/static-dirs.d.ts +1 -1
  54. package/dist/builder/core/constants/static-dirs.d.ts.map +1 -1
  55. package/dist/builder/core/constants/static-dirs.js +11 -11
  56. package/dist/builder/core/constants/static-dirs.js.map +1 -1
  57. package/dist/builder/core/frameworks/base.d.ts +1 -1
  58. package/dist/builder/core/frameworks/base.d.ts.map +1 -1
  59. package/dist/builder/core/frameworks/base.js +13 -11
  60. package/dist/builder/core/frameworks/base.js.map +1 -1
  61. package/dist/builder/core/frameworks/factory.d.ts +1 -1
  62. package/dist/builder/core/frameworks/factory.d.ts.map +1 -1
  63. package/dist/builder/core/frameworks/factory.js +9 -9
  64. package/dist/builder/core/frameworks/factory.js.map +1 -1
  65. package/dist/builder/core/frameworks/html.d.ts +2 -2
  66. package/dist/builder/core/frameworks/html.d.ts.map +1 -1
  67. package/dist/builder/core/frameworks/html.js +10 -10
  68. package/dist/builder/core/frameworks/html.js.map +1 -1
  69. package/dist/builder/core/frameworks/react.d.ts +3 -3
  70. package/dist/builder/core/frameworks/react.d.ts.map +1 -1
  71. package/dist/builder/core/frameworks/react.js +45 -43
  72. package/dist/builder/core/frameworks/react.js.map +1 -1
  73. package/dist/builder/core/frameworks/templates.d.ts +1 -1
  74. package/dist/builder/core/frameworks/templates.d.ts.map +1 -1
  75. package/dist/builder/core/frameworks/templates.js +1 -1
  76. package/dist/builder/core/frameworks/templates.js.map +1 -1
  77. package/dist/builder/core/frameworks/vue.d.ts +3 -3
  78. package/dist/builder/core/frameworks/vue.d.ts.map +1 -1
  79. package/dist/builder/core/frameworks/vue.js +48 -43
  80. package/dist/builder/core/frameworks/vue.js.map +1 -1
  81. package/dist/builder/core/registry.d.ts.map +1 -1
  82. package/dist/builder/core/registry.js +34 -25
  83. package/dist/builder/core/registry.js.map +1 -1
  84. package/dist/builder/core/template.d.ts +1 -1
  85. package/dist/builder/core/template.d.ts.map +1 -1
  86. package/dist/builder/core/template.js +19 -14
  87. package/dist/builder/core/template.js.map +1 -1
  88. package/dist/builder/core/templates/embedded.d.ts +3 -3
  89. package/dist/builder/core/templates/embedded.d.ts.map +1 -1
  90. package/dist/builder/core/templates/embedded.js +62 -31
  91. package/dist/builder/core/templates/embedded.js.map +1 -1
  92. package/dist/builder/core/type-generator.d.ts +17 -0
  93. package/dist/builder/core/type-generator.d.ts.map +1 -0
  94. package/dist/builder/core/type-generator.js +172 -0
  95. package/dist/builder/core/type-generator.js.map +1 -0
  96. package/dist/builder/core/utils/file.js +4 -4
  97. package/dist/builder/core/utils/incremental.d.ts +59 -0
  98. package/dist/builder/core/utils/incremental.d.ts.map +1 -0
  99. package/dist/builder/core/utils/incremental.js +177 -0
  100. package/dist/builder/core/utils/incremental.js.map +1 -0
  101. package/dist/builder/core/utils/page.d.ts +12 -2
  102. package/dist/builder/core/utils/page.d.ts.map +1 -1
  103. package/dist/builder/core/utils/page.js +63 -8
  104. package/dist/builder/core/utils/page.js.map +1 -1
  105. package/dist/builder/index.d.ts +1 -1
  106. package/dist/builder/index.js +1 -1
  107. package/dist/builder/types/index.d.ts +7 -6
  108. package/dist/builder/types/index.d.ts.map +1 -1
  109. package/dist/index.d.ts.map +1 -1
  110. package/dist/index.js +15 -25
  111. package/dist/index.js.map +1 -1
  112. package/package.json +8 -6
  113. package/templates/AppIcon.png +0 -0
  114. package/templates/android-native/app/build.gradle.kts +1 -1
  115. package/templates/android-native/app/src/main/java/MainActivity.kt +2 -2
  116. package/templates/android-native/app/src/main/res/values/strings.xml +1 -1
  117. package/templates/android-native/settings.gradle.kts +4 -2
  118. package/templates/harmony-native/AppScope/app.json5 +10 -0
  119. package/templates/harmony-native/AppScope/resources/base/element/string.json +8 -0
  120. package/templates/harmony-native/build-profile.json5 +41 -0
  121. package/templates/harmony-native/entry/build-profile.json5 +8 -0
  122. package/templates/harmony-native/entry/hvigorfile.ts +6 -0
  123. package/templates/harmony-native/entry/oh-package.json5 +11 -0
  124. package/templates/harmony-native/entry/src/main/ets/entryability/EntryAbility.ets +38 -0
  125. package/templates/harmony-native/entry/src/main/ets/pages/Index.ets +15 -0
  126. package/templates/harmony-native/entry/src/main/module.json5 +38 -0
  127. package/templates/harmony-native/entry/src/main/resources/base/element/color.json +8 -0
  128. package/templates/harmony-native/entry/src/main/resources/base/element/string.json +16 -0
  129. package/templates/harmony-native/entry/src/main/resources/base/profile/main_pages.json +5 -0
  130. package/templates/harmony-native/entry/src/main/resources/dark/element/color.json +8 -0
  131. package/templates/harmony-native/hvigor/hvigor-config.json5 +13 -0
  132. package/templates/harmony-native/hvigorfile.ts +6 -0
  133. package/templates/harmony-native/oh-package.json5 +10 -0
  134. package/templates/ios-native/App.entitlements +10 -0
  135. package/templates/ios-native/Info.plist +8 -0
  136. package/templates/ios-native/Package.swift +31 -0
  137. package/templates/ios-native/Sources/App.swift +44 -0
  138. package/templates/lxapp-create/html/global.d.ts +1 -0
  139. package/templates/lxapp-create/html/lxapp.config.ts +5 -0
  140. package/templates/lxapp-create/html/lxapp.json +8 -0
  141. package/templates/lxapp-create/html/lxapp.ts +8 -0
  142. package/templates/lxapp-create/html/package.json +20 -0
  143. package/templates/lxapp-create/html/pages/home/index.html +32 -0
  144. package/templates/lxapp-create/html/pages/home/index.json +3 -0
  145. package/templates/lxapp-create/html/pages/home/index.ts +14 -0
  146. package/templates/lxapp-create/html/tsconfig.json +13 -0
  147. package/templates/lxapp-create/html/view/home.ts +19 -0
  148. package/templates/lxapp-create/react/app.css +20 -0
  149. package/templates/lxapp-create/react/lxapp.config.ts +8 -0
  150. package/templates/lxapp-create/react/lxapp.json +1 -1
  151. package/templates/lxapp-create/react/package.json +6 -4
  152. package/templates/lxapp-create/react/pages/home/index.json +1 -1
  153. package/templates/lxapp-create/react/pages/home/index.ts +8 -3
  154. package/templates/lxapp-create/react/pages/home/index.tsx +113 -42
  155. package/templates/lxapp-create/react/tsconfig.json +5 -2
  156. package/templates/lxapp-create/vue/app.css +20 -0
  157. package/templates/lxapp-create/vue/lxapp.config.ts +8 -0
  158. package/templates/lxapp-create/vue/lxapp.json +1 -1
  159. package/templates/lxapp-create/vue/package.json +5 -3
  160. package/templates/lxapp-create/vue/pages/home/index.json +1 -1
  161. package/templates/lxapp-create/vue/pages/home/index.ts +8 -3
  162. package/templates/lxapp-create/vue/pages/home/index.vue +124 -37
  163. package/templates/lxapp-create/vue/tsconfig.json +5 -2
  164. package/templates/macos-native/Info.plist +40 -0
  165. package/templates/macos-native/Package.swift +30 -0
  166. package/templates/macos-native/Sources/main.swift +23 -0
  167. package/templates/rust-lib/Cargo.toml +17 -2
  168. package/templates/rust-lib/README.md +1 -1
  169. package/templates/rust-lib/src/lib.rs +39 -1
  170. package/vendor/lingxia +0 -0
  171. package/dist/commands/create.d.ts +0 -7
  172. package/dist/commands/create.d.ts.map +0 -1
  173. package/dist/commands/create.js +0 -151
  174. package/dist/commands/create.js.map +0 -1
  175. package/templates/lxapp-create/react/lxapp.config.json +0 -8
  176. package/templates/lxapp-create/react/public/.gitkeep +0 -0
  177. package/templates/lxapp-create/vue/lxapp.config.json +0 -8
  178. package/templates/lxapp-create/vue/public/.gitkeep +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../../../src/builder/core/frameworks/templates.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC"}
1
+ {"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../../../src/builder/core/frameworks/templates.ts"],"names":[],"mappings":"AACA,OAAO,EACL,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,0BAA0B,CAAC"}
@@ -1,3 +1,3 @@
1
1
  // Re-export embedded templates for framework processors
2
- export { getFrameworkTemplates, hasFrameworkTemplates } from '../templates/embedded.js';
2
+ export { getFrameworkTemplates, hasFrameworkTemplates, } from "../templates/embedded.js";
3
3
  //# sourceMappingURL=templates.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"templates.js","sourceRoot":"","sources":["../../../../src/builder/core/frameworks/templates.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC"}
1
+ {"version":3,"file":"templates.js","sourceRoot":"","sources":["../../../../src/builder/core/frameworks/templates.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,OAAO,EACL,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,0BAA0B,CAAC"}
@@ -1,5 +1,5 @@
1
- import { FrameworkProcessor } from './base.js';
2
- import type { Page, PageFiles } from '../../types/index.js';
1
+ import { FrameworkProcessor } from "./base.js";
2
+ import type { Page, PageFiles } from "../../types/index.js";
3
3
  /**
4
4
  * Vue framework processor
5
5
  * Uses templates and framework-specific logic
@@ -23,7 +23,7 @@ export declare class VueProcessor extends FrameworkProcessor {
23
23
  }, bridgeScript: string): Promise<void>;
24
24
  private processTemplates;
25
25
  /**
26
- * Fix HTML paths to use relative paths for Vue
26
+ * Fix HTML paths to use absolute paths for Vue
27
27
  */
28
28
  private fixHtmlPaths;
29
29
  private rewriteLinkHrefs;
@@ -1 +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"}
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;QACX,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,EACD,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,IAAI,CAAC;YAyDF,gBAAgB;IAkC9B;;OAEG;IACH,OAAO,CAAC,YAAY;IAiDpB,OAAO,CAAC,gBAAgB;IAqBxB,OAAO,CAAC,UAAU;IASlB,OAAO,CAAC,uBAAuB;CAUhC"}
@@ -1,10 +1,10 @@
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';
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
8
  /**
9
9
  * Vue framework processor
10
10
  * Uses templates and framework-specific logic
@@ -18,10 +18,10 @@ export class VueProcessor extends FrameworkProcessor {
18
18
  this.templateManager = new TemplateManager();
19
19
  }
20
20
  getFrameworkName() {
21
- return 'Vue';
21
+ return "Vue";
22
22
  }
23
23
  getExtensions() {
24
- return ['.vue'];
24
+ return [".vue"];
25
25
  }
26
26
  getDependencies() {
27
27
  return { dependencies: {}, devDependencies: {} };
@@ -39,16 +39,16 @@ export class VueProcessor extends FrameworkProcessor {
39
39
  // Copy built assets
40
40
  const builtIndexHtml = buildResult.entryHtml
41
41
  ? path.join(buildResult.distDir, buildResult.entryHtml)
42
- : path.join(buildResult.distDir, 'index.html');
42
+ : path.join(buildResult.distDir, "index.html");
43
43
  const builtMainJs = buildResult.entryJs
44
44
  ? path.join(buildResult.distDir, buildResult.entryJs)
45
- : path.join(buildResult.distDir, 'main.js');
46
- let htmlContent = fs.readFileSync(builtIndexHtml, 'utf-8');
45
+ : path.join(buildResult.distDir, "main.js");
46
+ let htmlContent = fs.readFileSync(builtIndexHtml, "utf-8");
47
47
  // Ensure output directory exists
48
48
  this.fileUtils.ensureDirectory(pageOutputDir);
49
49
  // Process JS
50
50
  if (fs.existsSync(builtMainJs)) {
51
- fs.copyFileSync(builtMainJs, path.join(pageOutputDir, 'view.js'));
51
+ fs.copyFileSync(builtMainJs, path.join(pageOutputDir, "view.js"));
52
52
  }
53
53
  // Copy page config
54
54
  if (pageFiles.config.exists) {
@@ -59,10 +59,13 @@ export class VueProcessor extends FrameworkProcessor {
59
59
  const assetRelativePath = path
60
60
  .relative(pageOutputDir, path.join(this.outputDir, assetDir))
61
61
  .split(path.sep)
62
- .join('/');
62
+ .join("/");
63
63
  htmlContent = this.fixHtmlPaths(htmlContent, baseName, assetDir, assetRelativePath);
64
64
  htmlContent = this.injectRuntimeScript(htmlContent);
65
- htmlContent = htmlContent.replace('</body>', `<script>\n${bridgeScript}\n</script>\n</body>`);
65
+ // Inject bridge script BEFORE the module script, not after
66
+ // This ensures window.__PAGE_FUNCTIONS and window[funcName] are defined
67
+ // when Vue component setup() calls useLingXia()
68
+ htmlContent = htmlContent.replace('<script type="module"', `<script>\n${bridgeScript}\n</script>\n<script type="module"`);
66
69
  // Write final component file
67
70
  const componentOutputPath = path.join(pageOutputDir, `${baseName}.vue`);
68
71
  fs.writeFileSync(componentOutputPath, htmlContent);
@@ -70,78 +73,77 @@ export class VueProcessor extends FrameworkProcessor {
70
73
  async processTemplates(buildDir, page, pageFiles, pageFunctions) {
71
74
  const pageTitle = getPageTitle(page, pageFiles);
72
75
  // Process index.html
73
- const indexHtmlPath = path.join(buildDir, 'index.html');
76
+ const indexHtmlPath = path.join(buildDir, "index.html");
74
77
  if (fs.existsSync(indexHtmlPath)) {
75
- let indexHtml = fs.readFileSync(indexHtmlPath, 'utf-8');
78
+ let indexHtml = fs.readFileSync(indexHtmlPath, "utf-8");
76
79
  indexHtml = this.processPageTitle(indexHtml, pageTitle);
77
80
  fs.writeFileSync(indexHtmlPath, indexHtml);
78
81
  }
79
82
  // Process main.js
80
- const mainJsPath = path.join(buildDir, 'main.js');
83
+ const mainJsPath = path.join(buildDir, "main.js");
81
84
  if (fs.existsSync(mainJsPath)) {
82
- let mainJs = fs.readFileSync(mainJsPath, 'utf-8');
85
+ let mainJs = fs.readFileSync(mainJsPath, "utf-8");
83
86
  // Inject page functions
84
87
  const bridgeScript = this.templateManager.generateFunctionBridge(pageFunctions);
85
- mainJs = mainJs.replace('/* {{PAGE_FUNCTIONS}} */', bridgeScript);
88
+ mainJs = mainJs.replace("/* {{PAGE_FUNCTIONS}} */", bridgeScript);
86
89
  const appImport = `import App from '${this.resolveSourceImportPath(buildDir, pageFiles.view.path)}';`;
87
- if (mainJs.includes('/* {{APP_IMPORT}} */')) {
88
- mainJs = mainJs.replace('/* {{APP_IMPORT}} */', appImport);
90
+ if (mainJs.includes("/* {{APP_IMPORT}} */")) {
91
+ mainJs = mainJs.replace("/* {{APP_IMPORT}} */", appImport);
89
92
  }
90
93
  fs.writeFileSync(mainJsPath, mainJs);
91
94
  }
92
95
  }
93
96
  /**
94
- * Fix HTML paths to use relative paths for Vue
97
+ * Fix HTML paths to use absolute paths for Vue
95
98
  */
96
99
  fixHtmlPaths(htmlContent, baseName, assetDir, assetRelativePath) {
97
- const normalizedAssetRelativePath = assetRelativePath.length === 0 ? '.' : assetRelativePath.replace(/\/+$/, '');
98
- const escapedDir = assetDir.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
100
+ const escapedDir = assetDir.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
99
101
  const $ = load(htmlContent);
100
- $('script[src]').each((_, element) => {
102
+ $("script[src]").each((_, element) => {
101
103
  const $element = $(element);
102
- const src = $element.attr('src');
104
+ const src = $element.attr("src");
103
105
  if (!src)
104
106
  return;
105
107
  if (/^\/(main|pages\/[^/]+\/[^/]+)\.js(?:[?#].*)?$/i.test(src)) {
106
- $element.attr('src', './view.js');
108
+ $element.attr("src", "./view.js");
107
109
  }
108
110
  });
111
+ // Use absolute paths: /assets/xxx
109
112
  const buildAssetHref = (file, suffix) => {
110
- const basePath = normalizedAssetRelativePath === '.' ? `./${file}` : `${normalizedAssetRelativePath}/${file}`;
111
- return `${basePath}${suffix}`;
113
+ return `/${assetDir}/${file}${suffix}`;
112
114
  };
113
115
  const rewriteAssetHref = (href) => {
114
116
  if (!href)
115
117
  return null;
116
118
  let normalized = href.trim();
117
- if (normalized.startsWith('./')) {
119
+ if (normalized.startsWith("./")) {
118
120
  normalized = normalized.slice(2);
119
121
  }
120
- const assetPattern = new RegExp(`^/?${escapedDir}/([^?#]+)([?#].*)?$`, 'i');
122
+ const assetPattern = new RegExp(`^/?${escapedDir}/([^?#]+)([?#].*)?$`, "i");
121
123
  const match = normalized.match(assetPattern);
122
124
  if (!match) {
123
125
  return null;
124
126
  }
125
127
  const file = match[1];
126
- const suffix = match[2] ?? '';
128
+ const suffix = match[2] ?? "";
127
129
  return buildAssetHref(file, suffix);
128
130
  };
129
- this.rewriteLinkHrefs($, 'stylesheet', rewriteAssetHref);
130
- this.rewriteLinkHrefs($, 'modulepreload', rewriteAssetHref);
131
+ this.rewriteLinkHrefs($, "stylesheet", rewriteAssetHref);
132
+ this.rewriteLinkHrefs($, "modulepreload", rewriteAssetHref);
131
133
  return $.html();
132
134
  }
133
135
  rewriteLinkHrefs($, rel, transform) {
134
- $('link[rel][href]').each((_, element) => {
136
+ $("link[rel][href]").each((_, element) => {
135
137
  const $element = $(element);
136
- if (!this.linkHasRel($element.attr('rel'), rel)) {
138
+ if (!this.linkHasRel($element.attr("rel"), rel)) {
137
139
  return;
138
140
  }
139
- const currentHref = $element.attr('href');
140
- const nextHref = transform(currentHref ?? '');
141
+ const currentHref = $element.attr("href");
142
+ const nextHref = transform(currentHref ?? "");
141
143
  if (!nextHref || nextHref === currentHref) {
142
144
  return;
143
145
  }
144
- $element.attr('href', nextHref);
146
+ $element.attr("href", nextHref);
145
147
  });
146
148
  }
147
149
  linkHasRel(relAttr, target) {
@@ -149,13 +151,16 @@ export class VueProcessor extends FrameworkProcessor {
149
151
  return false;
150
152
  const relValue = relAttr
151
153
  .split(/\s+/)
152
- .map(value => value.toLowerCase())
154
+ .map((value) => value.toLowerCase())
153
155
  .filter(Boolean);
154
156
  return relValue.includes(target.toLowerCase());
155
157
  }
156
158
  resolveSourceImportPath(buildDir, sourcePath) {
157
- const relativePath = path.relative(buildDir, sourcePath).split(path.sep).join('/');
158
- return relativePath.startsWith('.') ? relativePath : `./${relativePath}`;
159
+ const relativePath = path
160
+ .relative(buildDir, sourcePath)
161
+ .split(path.sep)
162
+ .join("/");
163
+ return relativePath.startsWith(".") ? relativePath : `./${relativePath}`;
159
164
  }
160
165
  }
161
166
  //# sourceMappingURL=vue.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"vue.js","sourceRoot":"","sources":["../../../../src/builder/core/frameworks/vue.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"vue.js","sourceRoot":"","sources":["../../../../src/builder/core/frameworks/vue.ts"],"names":[],"mappings":"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"}
@@ -1 +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"}
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,CAiCtB;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"}
@@ -7,29 +7,38 @@
7
7
  */
8
8
  export class FrameworkRegistry {
9
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
- }]
10
+ [
11
+ "react",
12
+ {
13
+ name: "React",
14
+ extensions: [".tsx", ".jsx"],
15
+ mainTemplate: "main.jsx",
16
+ indexTemplate: "index.html",
17
+ vitePlugin: "@vitejs/plugin-react",
18
+ hasComponents: true,
19
+ },
20
+ ],
21
+ [
22
+ "vue",
23
+ {
24
+ name: "Vue",
25
+ extensions: [".vue"],
26
+ mainTemplate: "main.js",
27
+ indexTemplate: "index.html",
28
+ vitePlugin: "@vitejs/plugin-vue",
29
+ hasComponents: true,
30
+ },
31
+ ],
32
+ [
33
+ "html",
34
+ {
35
+ name: "HTML",
36
+ extensions: [".html"],
37
+ mainTemplate: "",
38
+ indexTemplate: "",
39
+ hasComponents: false,
40
+ },
41
+ ],
33
42
  ]);
34
43
  /**
35
44
  * Get all supported frameworks
@@ -47,13 +56,13 @@ export class FrameworkRegistry {
47
56
  * Detect framework from file extension
48
57
  */
49
58
  static detectFramework(filePath) {
50
- const ext = filePath.substring(filePath.lastIndexOf('.'));
59
+ const ext = filePath.substring(filePath.lastIndexOf("."));
51
60
  for (const [frameworkName, config] of this.frameworks) {
52
61
  if (config.extensions.includes(ext)) {
53
62
  return frameworkName;
54
63
  }
55
64
  }
56
- return 'html'; // Default fallback
65
+ return "html"; // Default fallback
57
66
  }
58
67
  /**
59
68
  * Check if framework is supported
@@ -1 +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"}
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;YACE,OAAO;YACP;gBACE,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;SACF;QACD;YACE,KAAK;YACL;gBACE,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;SACF;QACD;YACE,MAAM;YACN;gBACE,IAAI,EAAE,MAAM;gBACZ,UAAU,EAAE,CAAC,OAAO,CAAC;gBACrB,YAAY,EAAE,EAAE;gBAChB,aAAa,EAAE,EAAE;gBACjB,aAAa,EAAE,KAAK;aACrB;SACF;KACF,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"}
@@ -1,6 +1,6 @@
1
1
  export declare class TemplateManager {
2
2
  copyFrameworkTemplates(framework: string, buildDir: string): void;
3
- generatePageTemplate(framework: 'react' | 'vue', pageFunctions: string[]): string;
3
+ generatePageTemplate(framework: "react" | "vue", pageFunctions: string[]): string;
4
4
  generateFunctionBridge(functions: string[]): string;
5
5
  hasFrameworkTemplate(framework: string): boolean;
6
6
  }
@@ -1 +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"}
1
+ {"version":3,"file":"template.d.ts","sourceRoot":"","sources":["../../../src/builder/core/template.ts"],"names":[],"mappings":"AAQA,qBAAa,eAAe;IAC1B,sBAAsB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAiBjE,oBAAoB,CAClB,SAAS,EAAE,OAAO,GAAG,KAAK,EAC1B,aAAa,EAAE,MAAM,EAAE,GACtB,MAAM;IAaT,sBAAsB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,MAAM;IAuCnD,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;CAGjD"}
@@ -1,7 +1,7 @@
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';
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
5
  export class TemplateManager {
6
6
  copyFrameworkTemplates(framework, buildDir) {
7
7
  if (!FrameworkRegistry.isSupported(framework)) {
@@ -11,7 +11,7 @@ export class TemplateManager {
11
11
  if (!templates) {
12
12
  throw new Error(`Framework templates not found: ${framework}`);
13
13
  }
14
- fs.writeFileSync(path.join(buildDir, 'index.html'), templates.indexHtml);
14
+ fs.writeFileSync(path.join(buildDir, "index.html"), templates.indexHtml);
15
15
  fs.writeFileSync(path.join(buildDir, templates.mainEntryFilename), templates.mainEntry);
16
16
  }
17
17
  generatePageTemplate(framework, pageFunctions) {
@@ -20,15 +20,16 @@ export class TemplateManager {
20
20
  throw new Error(`Framework templates not found: ${framework}`);
21
21
  }
22
22
  const functionBridge = this.generateFunctionBridge(pageFunctions);
23
- return templates.mainEntry.replace('/* {{PAGE_FUNCTIONS}} */', functionBridge);
23
+ return templates.mainEntry.replace("/* {{PAGE_FUNCTIONS}} */", functionBridge);
24
24
  }
25
25
  generateFunctionBridge(functions) {
26
26
  if (functions.length === 0) {
27
- return 'window.__PAGE_FUNCTIONS = [];';
27
+ return "window.__PAGE_FUNCTIONS = [];";
28
28
  }
29
29
  const functionList = JSON.stringify(functions);
30
30
  // Generate explicit function wrappers for better debugging and runtime safety
31
- const wrappers = functions.map(funcName => `
31
+ const wrappers = functions
32
+ .map((funcName) => `
32
33
  window['${funcName}'] = function(...args) {
33
34
  // Filter out React/DOM event objects to prevent circular reference errors
34
35
  const cleanArgs = args.filter(arg => {
@@ -39,12 +40,16 @@ window['${funcName}'] = function(...args) {
39
40
  return true;
40
41
  });
41
42
 
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');
43
+ try {
44
+ // Page functions are fire-and-forget. Business results should be expressed via state updates
45
+ // (LXS / setData), not via req/res return values.
46
+ window.LingXiaBridge.notify('${funcName}', cleanArgs.length === 1 ? cleanArgs[0] : cleanArgs);
47
+ } catch (e) {
48
+ console.warn('[PageFunc] ${funcName} failed:', e && e.message ? e.message : e);
49
+ throw e;
50
+ }
51
+ };`)
52
+ .join("\n");
48
53
  return `window.__PAGE_FUNCTIONS = ${functionList};
49
54
 
50
55
  // Generate bridge functions
@@ -1 +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"}
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,EACL,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,yBAAyB,CAAC;AAEjC,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,CACd,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,iBAAiB,CAAC,EAChD,SAAS,CAAC,SAAS,CACpB,CAAC;IACJ,CAAC;IAED,oBAAoB,CAClB,SAA0B,EAC1B,aAAuB;QAEvB,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,CAChC,0BAA0B,EAC1B,cAAc,CACf,CAAC;IACJ,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;aACvB,GAAG,CACF,CAAC,QAAQ,EAAE,EAAE,CAAC;UACZ,QAAQ;;;;;;;;;;;;;mCAaiB,QAAQ;;+BAEZ,QAAQ;;;GAGpC,CACI;aACA,IAAI,CAAC,IAAI,CAAC,CAAC;QAEd,OAAO,6BAA6B,YAAY;;;EAGlD,QAAQ,EAAE,CAAC;IACX,CAAC;IAED,oBAAoB,CAAC,SAAiB;QACpC,OAAO,qBAAqB,CAAC,SAAS,CAAC,CAAC;IAC1C,CAAC;CACF"}
@@ -3,9 +3,9 @@
3
3
  * These are internal templates used during the build process, not user-facing.
4
4
  */
5
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";
6
+ export declare const REACT_MAIN_JSX = "import React from 'react'\nimport ReactDOM from 'react-dom/client'\n/* {{APP_IMPORT}} */\n\n// Singleton data store + listeners\nlet __lxData = {};\nlet __lxSubscribed = false;\nconst __lxListeners = new Set();\n\n// Register bridge subscription with retry\n(function registerBridge() {\n if (__lxSubscribed) return;\n if (!window.LingXiaBridge?.subscribe) {\n setTimeout(registerBridge, 10);\n return;\n }\n __lxSubscribed = true;\n window.LingXiaBridge.subscribe((d) => {\n if (d) {\n // V2 subscriber receives a full state snapshot each time (after patch apply).\n // Replace instead of merge so deletions are reflected correctly.\n __lxData = d;\n __lxListeners.forEach(fn => fn(__lxData));\n }\n });\n})();\n\nwindow.useLingXia = function () {\n const [data, setData] = React.useState(__lxData);\n\n React.useEffect(() => {\n const listener = (newData) => setData(newData);\n __lxListeners.add(listener);\n setData(__lxData); // Sync initial data\n return () => __lxListeners.delete(listener); // Cleanup\n }, []);\n\n const fns = React.useMemo(() => {\n const obj = {};\n window.__PAGE_FUNCTIONS?.forEach(n => { obj[n] = window[n]; });\n return obj;\n }, []);\n\n return { data, ...fns };\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>\n // Initialize globals before module loads\n window.__lxData = {};\n window.__lxSubscribed = false;\n window.__PAGE_FUNCTIONS = [];\n </script>\n <script type=\"module\" src=\"./main.js\"></script>\n</body>\n</html>";
8
+ export declare const VUE_MAIN_JS = "import { createApp, reactive } from \"vue\";\n/* {{APP_IMPORT}} */\n\n// Vue reactive data store\nconst __lxReactiveData = reactive(window.__lxData || {});\nwindow.__lxData = __lxReactiveData;\n\n// Register bridge subscription with retry\n(function registerBridge() {\n if (window.__lxSubscribed) return;\n if (!window.LingXiaBridge?.subscribe) {\n setTimeout(registerBridge, 10);\n return;\n }\n window.__lxSubscribed = true;\n window.LingXiaBridge.subscribe((d) => {\n if (!d) return;\n // Replace snapshot (including deletions) while keeping the same reactive root reference.\n Object.keys(__lxReactiveData).forEach((k) => { if (!Object.hasOwn(d, k)) delete __lxReactiveData[k]; });\n Object.assign(__lxReactiveData, d);\n });\n})();\n\n// useLingXia hook\nwindow.useLingXia = function () {\n const fns = {};\n window.__PAGE_FUNCTIONS?.forEach((n) => { fns[n] = window[n]; });\n return { data: __lxReactiveData, ...fns };\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
9
  export interface FrameworkTemplates {
10
10
  indexHtml: string;
11
11
  mainEntry: string;
@@ -1 +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"}
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,26CAqDzB,CAAC;AAEH,eAAO,MAAM,cAAc,4fAiBnB,CAAC;AAET,eAAO,MAAM,WAAW,szCA4CvB,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"}
@@ -18,34 +18,46 @@ export const REACT_MAIN_JSX = `import React from 'react'
18
18
  import ReactDOM from 'react-dom/client'
19
19
  /* {{APP_IMPORT}} */
20
20
 
21
+ // Singleton data store + listeners
22
+ let __lxData = {};
23
+ let __lxSubscribed = false;
24
+ const __lxListeners = new Set();
25
+
26
+ // Register bridge subscription with retry
27
+ (function registerBridge() {
28
+ if (__lxSubscribed) return;
29
+ if (!window.LingXiaBridge?.subscribe) {
30
+ setTimeout(registerBridge, 10);
31
+ return;
32
+ }
33
+ __lxSubscribed = true;
34
+ window.LingXiaBridge.subscribe((d) => {
35
+ if (d) {
36
+ // V2 subscriber receives a full state snapshot each time (after patch apply).
37
+ // Replace instead of merge so deletions are reflected correctly.
38
+ __lxData = d;
39
+ __lxListeners.forEach(fn => fn(__lxData));
40
+ }
41
+ });
42
+ })();
43
+
21
44
  window.useLingXia = function () {
22
- const [data, setData] = React.useState({});
45
+ const [data, setData] = React.useState(__lxData);
23
46
 
24
47
  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
- }
48
+ const listener = (newData) => setData(newData);
49
+ __lxListeners.add(listener);
50
+ setData(__lxData); // Sync initial data
51
+ return () => __lxListeners.delete(listener); // Cleanup
32
52
  }, []);
33
53
 
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
- }, {});
54
+ const fns = React.useMemo(() => {
55
+ const obj = {};
56
+ window.__PAGE_FUNCTIONS?.forEach(n => { obj[n] = window[n]; });
57
+ return obj;
42
58
  }, []);
43
59
 
44
- // Return both data and functions
45
- return {
46
- data,
47
- ...functions
48
- };
60
+ return { data, ...fns };
49
61
  };
50
62
 
51
63
  // Page functions injection
@@ -65,24 +77,43 @@ export const VUE_INDEX_HTML = `<!DOCTYPE html>
65
77
  </head>
66
78
  <body>
67
79
  <div id="app"></div>
80
+ <script>
81
+ // Initialize globals before module loads
82
+ window.__lxData = {};
83
+ window.__lxSubscribed = false;
84
+ window.__PAGE_FUNCTIONS = [];
85
+ </script>
68
86
  <script type="module" src="./main.js"></script>
69
87
  </body>
70
88
  </html>`;
71
- export const VUE_MAIN_JS = `import { createApp, ref } from "vue";
89
+ export const VUE_MAIN_JS = `import { createApp, reactive } from "vue";
72
90
  /* {{APP_IMPORT}} */
73
91
 
74
- window.useLingXia = function () {
75
- const dataInstance = ref({});
92
+ // Vue reactive data store
93
+ const __lxReactiveData = reactive(window.__lxData || {});
94
+ window.__lxData = __lxReactiveData;
76
95
 
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
- });
96
+ // Register bridge subscription with retry
97
+ (function registerBridge() {
98
+ if (window.__lxSubscribed) return;
99
+ if (!window.LingXiaBridge?.subscribe) {
100
+ setTimeout(registerBridge, 10);
101
+ return;
83
102
  }
103
+ window.__lxSubscribed = true;
104
+ window.LingXiaBridge.subscribe((d) => {
105
+ if (!d) return;
106
+ // Replace snapshot (including deletions) while keeping the same reactive root reference.
107
+ Object.keys(__lxReactiveData).forEach((k) => { if (!Object.hasOwn(d, k)) delete __lxReactiveData[k]; });
108
+ Object.assign(__lxReactiveData, d);
109
+ });
110
+ })();
84
111
 
85
- return dataInstance;
112
+ // useLingXia hook
113
+ window.useLingXia = function () {
114
+ const fns = {};
115
+ window.__PAGE_FUNCTIONS?.forEach((n) => { fns[n] = window[n]; });
116
+ return { data: __lxReactiveData, ...fns };
86
117
  };
87
118
 
88
119
  // Page functions injection
@@ -1 +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"}
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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAqD5B,CAAC;AAEH,MAAM,CAAC,MAAM,cAAc,GAAG;;;;;;;;;;;;;;;;;QAiBtB,CAAC;AAET,MAAM,CAAC,MAAM,WAAW,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4C1B,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"}