@lingxia/cli 0.0.9 → 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.
- package/bin/lingxia.js +207 -32
- package/dist/builder/commands/build.d.ts +1 -1
- package/dist/builder/commands/build.d.ts.map +1 -1
- package/dist/builder/commands/build.js +138 -103
- package/dist/builder/commands/build.js.map +1 -1
- package/dist/builder/core/builders/logic.d.ts +3 -3
- package/dist/builder/core/builders/logic.d.ts.map +1 -1
- package/dist/builder/core/builders/logic.js +55 -46
- package/dist/builder/core/builders/logic.js.map +1 -1
- package/dist/builder/core/builders/page-functions.d.ts.map +1 -1
- package/dist/builder/core/builders/page-functions.js +43 -35
- package/dist/builder/core/builders/page-functions.js.map +1 -1
- package/dist/builder/core/builders/page-path-injector.js +27 -27
- package/dist/builder/core/builders/page-path-injector.js.map +1 -1
- package/dist/builder/core/builders/page-types.d.ts +22 -0
- package/dist/builder/core/builders/page-types.d.ts.map +1 -0
- package/dist/builder/core/builders/page-types.js +374 -0
- package/dist/builder/core/builders/page-types.js.map +1 -0
- package/dist/builder/core/builders/page.d.ts +5 -4
- package/dist/builder/core/builders/page.d.ts.map +1 -1
- package/dist/builder/core/builders/page.js +54 -52
- package/dist/builder/core/builders/page.js.map +1 -1
- package/dist/builder/core/builders/view-validator.d.ts +9 -0
- package/dist/builder/core/builders/view-validator.d.ts.map +1 -0
- package/dist/builder/core/builders/view-validator.js +58 -0
- package/dist/builder/core/builders/view-validator.js.map +1 -0
- package/dist/builder/core/builders/view.d.ts +40 -3
- package/dist/builder/core/builders/view.d.ts.map +1 -1
- package/dist/builder/core/builders/view.js +406 -55
- package/dist/builder/core/builders/view.js.map +1 -1
- package/dist/builder/core/config/alias-config.d.ts +1 -1
- package/dist/builder/core/config/alias-config.d.ts.map +1 -1
- package/dist/builder/core/config/alias-config.js +8 -8
- package/dist/builder/core/config/alias-config.js.map +1 -1
- package/dist/builder/core/config/framework.d.ts +1 -1
- package/dist/builder/core/config/framework.d.ts.map +1 -1
- package/dist/builder/core/config/framework.js +14 -11
- package/dist/builder/core/config/framework.js.map +1 -1
- package/dist/builder/core/config/lxapp-config.d.ts +74 -0
- package/dist/builder/core/config/lxapp-config.d.ts.map +1 -0
- package/dist/builder/core/config/lxapp-config.js +195 -0
- package/dist/builder/core/config/lxapp-config.js.map +1 -0
- package/dist/builder/core/config/view-build-schema.d.ts +2 -2
- package/dist/builder/core/config/view-config.d.ts +3 -3
- package/dist/builder/core/config/view-config.d.ts.map +1 -1
- package/dist/builder/core/config/view-config.js +16 -16
- package/dist/builder/core/config/view-config.js.map +1 -1
- package/dist/builder/core/config.d.ts +1 -1
- package/dist/builder/core/config.js +11 -11
- package/dist/builder/core/constants/source-dirs.d.ts +1 -1
- package/dist/builder/core/constants/source-dirs.js +9 -9
- package/dist/builder/core/constants/source-dirs.js.map +1 -1
- package/dist/builder/core/constants/static-dirs.d.ts +1 -1
- package/dist/builder/core/constants/static-dirs.d.ts.map +1 -1
- package/dist/builder/core/constants/static-dirs.js +11 -11
- package/dist/builder/core/constants/static-dirs.js.map +1 -1
- package/dist/builder/core/frameworks/base.d.ts +1 -1
- package/dist/builder/core/frameworks/base.d.ts.map +1 -1
- package/dist/builder/core/frameworks/base.js +13 -11
- package/dist/builder/core/frameworks/base.js.map +1 -1
- package/dist/builder/core/frameworks/factory.d.ts +1 -1
- package/dist/builder/core/frameworks/factory.d.ts.map +1 -1
- package/dist/builder/core/frameworks/factory.js +9 -9
- package/dist/builder/core/frameworks/factory.js.map +1 -1
- package/dist/builder/core/frameworks/html.d.ts +2 -2
- package/dist/builder/core/frameworks/html.d.ts.map +1 -1
- package/dist/builder/core/frameworks/html.js +10 -10
- package/dist/builder/core/frameworks/html.js.map +1 -1
- package/dist/builder/core/frameworks/react.d.ts +3 -3
- package/dist/builder/core/frameworks/react.d.ts.map +1 -1
- package/dist/builder/core/frameworks/react.js +45 -43
- package/dist/builder/core/frameworks/react.js.map +1 -1
- package/dist/builder/core/frameworks/templates.d.ts +1 -1
- package/dist/builder/core/frameworks/templates.d.ts.map +1 -1
- package/dist/builder/core/frameworks/templates.js +1 -1
- package/dist/builder/core/frameworks/templates.js.map +1 -1
- package/dist/builder/core/frameworks/vue.d.ts +3 -3
- package/dist/builder/core/frameworks/vue.d.ts.map +1 -1
- package/dist/builder/core/frameworks/vue.js +48 -43
- package/dist/builder/core/frameworks/vue.js.map +1 -1
- package/dist/builder/core/registry.d.ts.map +1 -1
- package/dist/builder/core/registry.js +34 -25
- package/dist/builder/core/registry.js.map +1 -1
- package/dist/builder/core/template.d.ts +1 -1
- package/dist/builder/core/template.d.ts.map +1 -1
- package/dist/builder/core/template.js +19 -14
- package/dist/builder/core/template.js.map +1 -1
- package/dist/builder/core/templates/embedded.d.ts +3 -3
- package/dist/builder/core/templates/embedded.d.ts.map +1 -1
- package/dist/builder/core/templates/embedded.js +62 -31
- package/dist/builder/core/templates/embedded.js.map +1 -1
- package/dist/builder/core/type-generator.d.ts +17 -0
- package/dist/builder/core/type-generator.d.ts.map +1 -0
- package/dist/builder/core/type-generator.js +172 -0
- package/dist/builder/core/type-generator.js.map +1 -0
- package/dist/builder/core/utils/file.js +4 -4
- package/dist/builder/core/utils/incremental.d.ts +59 -0
- package/dist/builder/core/utils/incremental.d.ts.map +1 -0
- package/dist/builder/core/utils/incremental.js +177 -0
- package/dist/builder/core/utils/incremental.js.map +1 -0
- package/dist/builder/core/utils/page.d.ts +12 -2
- package/dist/builder/core/utils/page.d.ts.map +1 -1
- package/dist/builder/core/utils/page.js +63 -8
- package/dist/builder/core/utils/page.js.map +1 -1
- package/dist/builder/index.d.ts +1 -1
- package/dist/builder/index.js +1 -1
- package/dist/builder/types/index.d.ts +7 -6
- package/dist/builder/types/index.d.ts.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +15 -16
- package/dist/index.js.map +1 -1
- package/package.json +8 -6
- package/templates/AppIcon.png +0 -0
- package/templates/android-native/app/src/main/java/MainActivity.kt +2 -2
- package/templates/android-native/app/src/main/res/values/strings.xml +1 -1
- package/templates/android-native/settings.gradle.kts +4 -0
- package/templates/harmony-native/AppScope/app.json5 +10 -0
- package/templates/harmony-native/AppScope/resources/base/element/string.json +8 -0
- package/templates/harmony-native/build-profile.json5 +41 -0
- package/templates/harmony-native/entry/build-profile.json5 +8 -0
- package/templates/harmony-native/entry/hvigorfile.ts +6 -0
- package/templates/harmony-native/entry/oh-package.json5 +11 -0
- package/templates/harmony-native/entry/src/main/ets/entryability/EntryAbility.ets +38 -0
- package/templates/harmony-native/entry/src/main/ets/pages/Index.ets +15 -0
- package/templates/harmony-native/entry/src/main/module.json5 +38 -0
- package/templates/harmony-native/entry/src/main/resources/base/element/color.json +8 -0
- package/templates/harmony-native/entry/src/main/resources/base/element/string.json +16 -0
- package/templates/harmony-native/entry/src/main/resources/base/profile/main_pages.json +5 -0
- package/templates/harmony-native/entry/src/main/resources/dark/element/color.json +8 -0
- package/templates/harmony-native/hvigor/hvigor-config.json5 +13 -0
- package/templates/harmony-native/hvigorfile.ts +6 -0
- package/templates/harmony-native/oh-package.json5 +10 -0
- package/templates/ios-native/App.entitlements +10 -0
- package/templates/ios-native/Info.plist +8 -0
- package/templates/ios-native/Package.swift +31 -0
- package/templates/ios-native/Sources/App.swift +44 -0
- package/templates/lxapp-create/html/global.d.ts +1 -0
- package/templates/lxapp-create/html/lxapp.config.ts +5 -0
- package/templates/lxapp-create/html/lxapp.json +8 -0
- package/templates/lxapp-create/html/lxapp.ts +8 -0
- package/templates/lxapp-create/html/package.json +20 -0
- package/templates/lxapp-create/html/pages/home/index.html +32 -0
- package/templates/lxapp-create/html/pages/home/index.json +3 -0
- package/templates/lxapp-create/html/pages/home/index.ts +14 -0
- package/templates/lxapp-create/html/tsconfig.json +13 -0
- package/templates/lxapp-create/html/view/home.ts +19 -0
- package/templates/lxapp-create/react/app.css +20 -0
- package/templates/lxapp-create/react/lxapp.config.ts +8 -0
- package/templates/lxapp-create/react/lxapp.json +1 -1
- package/templates/lxapp-create/react/package.json +2 -0
- package/templates/lxapp-create/react/pages/home/index.json +1 -1
- package/templates/lxapp-create/react/pages/home/index.ts +8 -3
- package/templates/lxapp-create/react/pages/home/index.tsx +113 -42
- package/templates/lxapp-create/react/tsconfig.json +5 -2
- package/templates/lxapp-create/vue/app.css +20 -0
- package/templates/lxapp-create/vue/lxapp.config.ts +8 -0
- package/templates/lxapp-create/vue/lxapp.json +1 -1
- package/templates/lxapp-create/vue/package.json +2 -0
- package/templates/lxapp-create/vue/pages/home/index.json +1 -1
- package/templates/lxapp-create/vue/pages/home/index.ts +8 -3
- package/templates/lxapp-create/vue/pages/home/index.vue +124 -37
- package/templates/lxapp-create/vue/tsconfig.json +5 -2
- package/templates/macos-native/Info.plist +40 -0
- package/templates/macos-native/Package.swift +30 -0
- package/templates/macos-native/Sources/main.swift +23 -0
- package/templates/rust-lib/Cargo.toml +16 -1
- package/templates/rust-lib/README.md +1 -1
- package/templates/rust-lib/src/lib.rs +39 -1
- package/vendor/lingxia +0 -0
- package/templates/lxapp-create/react/lxapp.config.json +0 -8
- package/templates/lxapp-create/react/public/.gitkeep +0 -0
- package/templates/lxapp-create/vue/lxapp.config.json +0 -8
- 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,
|
|
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
|
|
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,
|
|
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
|
|
2
|
-
import type { Page, PageFiles } from
|
|
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
|
|
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;
|
|
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
|
|
2
|
-
import * as path from
|
|
3
|
-
import { load } from
|
|
4
|
-
import { FrameworkProcessor } from
|
|
5
|
-
import { getPageTitle } from
|
|
6
|
-
import { FileUtils } from
|
|
7
|
-
import { TemplateManager } from
|
|
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
|
|
21
|
+
return "Vue";
|
|
22
22
|
}
|
|
23
23
|
getExtensions() {
|
|
24
|
-
return [
|
|
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,
|
|
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,
|
|
46
|
-
let htmlContent = fs.readFileSync(builtIndexHtml,
|
|
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,
|
|
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
|
-
|
|
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,
|
|
76
|
+
const indexHtmlPath = path.join(buildDir, "index.html");
|
|
74
77
|
if (fs.existsSync(indexHtmlPath)) {
|
|
75
|
-
let indexHtml = fs.readFileSync(indexHtmlPath,
|
|
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,
|
|
83
|
+
const mainJsPath = path.join(buildDir, "main.js");
|
|
81
84
|
if (fs.existsSync(mainJsPath)) {
|
|
82
|
-
let mainJs = fs.readFileSync(mainJsPath,
|
|
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(
|
|
88
|
+
mainJs = mainJs.replace("/* {{PAGE_FUNCTIONS}} */", bridgeScript);
|
|
86
89
|
const appImport = `import App from '${this.resolveSourceImportPath(buildDir, pageFiles.view.path)}';`;
|
|
87
|
-
if (mainJs.includes(
|
|
88
|
-
mainJs = mainJs.replace(
|
|
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
|
|
97
|
+
* Fix HTML paths to use absolute paths for Vue
|
|
95
98
|
*/
|
|
96
99
|
fixHtmlPaths(htmlContent, baseName, assetDir, assetRelativePath) {
|
|
97
|
-
const
|
|
98
|
-
const escapedDir = assetDir.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
100
|
+
const escapedDir = assetDir.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
99
101
|
const $ = load(htmlContent);
|
|
100
|
-
$(
|
|
102
|
+
$("script[src]").each((_, element) => {
|
|
101
103
|
const $element = $(element);
|
|
102
|
-
const src = $element.attr(
|
|
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(
|
|
108
|
+
$element.attr("src", "./view.js");
|
|
107
109
|
}
|
|
108
110
|
});
|
|
111
|
+
// Use absolute paths: /assets/xxx
|
|
109
112
|
const buildAssetHref = (file, suffix) => {
|
|
110
|
-
|
|
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}/([^?#]+)([?#].*)?$`,
|
|
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($,
|
|
130
|
-
this.rewriteLinkHrefs($,
|
|
131
|
+
this.rewriteLinkHrefs($, "stylesheet", rewriteAssetHref);
|
|
132
|
+
this.rewriteLinkHrefs($, "modulepreload", rewriteAssetHref);
|
|
131
133
|
return $.html();
|
|
132
134
|
}
|
|
133
135
|
rewriteLinkHrefs($, rel, transform) {
|
|
134
|
-
$(
|
|
136
|
+
$("link[rel][href]").each((_, element) => {
|
|
135
137
|
const $element = $(element);
|
|
136
|
-
if (!this.linkHasRel($element.attr(
|
|
138
|
+
if (!this.linkHasRel($element.attr("rel"), rel)) {
|
|
137
139
|
return;
|
|
138
140
|
}
|
|
139
|
-
const currentHref = $element.attr(
|
|
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(
|
|
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
|
|
158
|
-
|
|
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":"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,
|
|
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,
|
|
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
|
-
[
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
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
|
|
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,
|
|
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:
|
|
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":"
|
|
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
|
|
2
|
-
import * as path from
|
|
3
|
-
import { FrameworkRegistry } from
|
|
4
|
-
import { hasFrameworkTemplates, getFrameworkTemplates } from
|
|
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,
|
|
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(
|
|
23
|
+
return templates.mainEntry.replace("/* {{PAGE_FUNCTIONS}} */", functionBridge);
|
|
24
24
|
}
|
|
25
25
|
generateFunctionBridge(functions) {
|
|
26
26
|
if (functions.length === 0) {
|
|
27
|
-
return
|
|
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
|
|
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
|
-
|
|
43
|
-
.
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
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,
|
|
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\
|
|
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,
|
|
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,
|
|
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
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
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
|
-
|
|
35
|
-
|
|
36
|
-
|
|
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
|
-
|
|
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,
|
|
89
|
+
export const VUE_MAIN_JS = `import { createApp, reactive } from "vue";
|
|
72
90
|
/* {{APP_IMPORT}} */
|
|
73
91
|
|
|
74
|
-
|
|
75
|
-
|
|
92
|
+
// Vue reactive data store
|
|
93
|
+
const __lxReactiveData = reactive(window.__lxData || {});
|
|
94
|
+
window.__lxData = __lxReactiveData;
|
|
76
95
|
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
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
|
-
|
|
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
|
|
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"}
|