@lingxia/cli 0.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/lingxia.js +91 -0
- package/dist/builder/commands/build.d.ts +3 -0
- package/dist/builder/commands/build.d.ts.map +1 -0
- package/dist/builder/commands/build.js +317 -0
- package/dist/builder/commands/build.js.map +1 -0
- package/dist/builder/core/builders/logic.d.ts +48 -0
- package/dist/builder/core/builders/logic.d.ts.map +1 -0
- package/dist/builder/core/builders/logic.js +212 -0
- package/dist/builder/core/builders/logic.js.map +1 -0
- package/dist/builder/core/builders/page-functions.d.ts +2 -0
- package/dist/builder/core/builders/page-functions.d.ts.map +1 -0
- package/dist/builder/core/builders/page-functions.js +119 -0
- package/dist/builder/core/builders/page-functions.js.map +1 -0
- package/dist/builder/core/builders/page-path-injector.d.ts +5 -0
- package/dist/builder/core/builders/page-path-injector.d.ts.map +1 -0
- package/dist/builder/core/builders/page-path-injector.js +94 -0
- package/dist/builder/core/builders/page-path-injector.js.map +1 -0
- package/dist/builder/core/builders/page.d.ts +37 -0
- package/dist/builder/core/builders/page.d.ts.map +1 -0
- package/dist/builder/core/builders/page.js +246 -0
- package/dist/builder/core/builders/page.js.map +1 -0
- package/dist/builder/core/builders/view.d.ts +23 -0
- package/dist/builder/core/builders/view.d.ts.map +1 -0
- package/dist/builder/core/builders/view.js +194 -0
- package/dist/builder/core/builders/view.js.map +1 -0
- package/dist/builder/core/config/alias-config.d.ts +4 -0
- package/dist/builder/core/config/alias-config.d.ts.map +1 -0
- package/dist/builder/core/config/alias-config.js +29 -0
- package/dist/builder/core/config/alias-config.js.map +1 -0
- package/dist/builder/core/config/build-config.d.ts +8 -0
- package/dist/builder/core/config/build-config.d.ts.map +1 -0
- package/dist/builder/core/config/build-config.js +33 -0
- package/dist/builder/core/config/build-config.js.map +1 -0
- package/dist/builder/core/config/framework.d.ts +3 -0
- package/dist/builder/core/config/framework.d.ts.map +1 -0
- package/dist/builder/core/config/framework.js +51 -0
- package/dist/builder/core/config/framework.js.map +1 -0
- package/dist/builder/core/config/lingxia-config.d.ts +55 -0
- package/dist/builder/core/config/lingxia-config.d.ts.map +1 -0
- package/dist/builder/core/config/lingxia-config.js +174 -0
- package/dist/builder/core/config/lingxia-config.js.map +1 -0
- package/dist/builder/core/config/view-build-schema.d.ts +17 -0
- package/dist/builder/core/config/view-build-schema.d.ts.map +1 -0
- package/dist/builder/core/config/view-build-schema.js +2 -0
- package/dist/builder/core/config/view-build-schema.js.map +1 -0
- package/dist/builder/core/config/view-config.d.ts +11 -0
- package/dist/builder/core/config/view-config.d.ts.map +1 -0
- package/dist/builder/core/config/view-config.js +79 -0
- package/dist/builder/core/config/view-config.js.map +1 -0
- package/dist/builder/core/config.d.ts +34 -0
- package/dist/builder/core/config.d.ts.map +1 -0
- package/dist/builder/core/config.js +73 -0
- package/dist/builder/core/config.js.map +1 -0
- package/dist/builder/core/constants/source-dirs.d.ts +4 -0
- package/dist/builder/core/constants/source-dirs.d.ts.map +1 -0
- package/dist/builder/core/constants/source-dirs.js +24 -0
- package/dist/builder/core/constants/source-dirs.js.map +1 -0
- package/dist/builder/core/constants/static-dirs.d.ts +4 -0
- package/dist/builder/core/constants/static-dirs.d.ts.map +1 -0
- package/dist/builder/core/constants/static-dirs.js +51 -0
- package/dist/builder/core/constants/static-dirs.js.map +1 -0
- package/dist/builder/core/frameworks/base.d.ts +49 -0
- package/dist/builder/core/frameworks/base.d.ts.map +1 -0
- package/dist/builder/core/frameworks/base.js +61 -0
- package/dist/builder/core/frameworks/base.js.map +1 -0
- package/dist/builder/core/frameworks/factory.d.ts +29 -0
- package/dist/builder/core/frameworks/factory.d.ts.map +1 -0
- package/dist/builder/core/frameworks/factory.js +59 -0
- package/dist/builder/core/frameworks/factory.js.map +1 -0
- package/dist/builder/core/frameworks/html.d.ts +30 -0
- package/dist/builder/core/frameworks/html.d.ts.map +1 -0
- package/dist/builder/core/frameworks/html.js +92 -0
- package/dist/builder/core/frameworks/html.js.map +1 -0
- package/dist/builder/core/frameworks/react.d.ts +33 -0
- package/dist/builder/core/frameworks/react.d.ts.map +1 -0
- package/dist/builder/core/frameworks/react.js +161 -0
- package/dist/builder/core/frameworks/react.js.map +1 -0
- package/dist/builder/core/frameworks/templates.d.ts +2 -0
- package/dist/builder/core/frameworks/templates.d.ts.map +1 -0
- package/dist/builder/core/frameworks/templates.js +3 -0
- package/dist/builder/core/frameworks/templates.js.map +1 -0
- package/dist/builder/core/frameworks/vue.d.ts +33 -0
- package/dist/builder/core/frameworks/vue.d.ts.map +1 -0
- package/dist/builder/core/frameworks/vue.js +161 -0
- package/dist/builder/core/frameworks/vue.js.map +1 -0
- package/dist/builder/core/registry.d.ts +43 -0
- package/dist/builder/core/registry.d.ts.map +1 -0
- package/dist/builder/core/registry.js +79 -0
- package/dist/builder/core/registry.js.map +1 -0
- package/dist/builder/core/template.d.ts +7 -0
- package/dist/builder/core/template.d.ts.map +1 -0
- package/dist/builder/core/template.js +57 -0
- package/dist/builder/core/template.js.map +1 -0
- package/dist/builder/core/templates/embedded.d.ts +17 -0
- package/dist/builder/core/templates/embedded.d.ts.map +1 -0
- package/dist/builder/core/templates/embedded.js +121 -0
- package/dist/builder/core/templates/embedded.js.map +1 -0
- package/dist/builder/core/utils/file.d.ts +35 -0
- package/dist/builder/core/utils/file.d.ts.map +1 -0
- package/dist/builder/core/utils/file.js +99 -0
- package/dist/builder/core/utils/file.js.map +1 -0
- package/dist/builder/core/utils/page.d.ts +14 -0
- package/dist/builder/core/utils/page.d.ts.map +1 -0
- package/dist/builder/core/utils/page.js +46 -0
- package/dist/builder/core/utils/page.js.map +1 -0
- package/dist/builder/index.d.ts +2 -0
- package/dist/builder/index.d.ts.map +1 -0
- package/dist/builder/index.js +2 -0
- package/dist/builder/index.js.map +1 -0
- package/dist/builder/types/index.d.ts +67 -0
- package/dist/builder/types/index.d.ts.map +1 -0
- package/dist/builder/types/index.js +2 -0
- package/dist/builder/types/index.js.map +1 -0
- package/dist/commands/create.d.ts +7 -0
- package/dist/commands/create.d.ts.map +1 -0
- package/dist/commands/create.js +151 -0
- package/dist/commands/create.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +45 -0
- package/dist/index.js.map +1 -0
- package/package.json +49 -0
- package/scripts/ensure-deps.cjs +54 -0
- package/scripts/install.cjs +62 -0
- package/scripts/set-version.cjs +34 -0
- package/scripts/sync-templates.cjs +36 -0
- package/templates/android-native/app/build.gradle.kts +48 -0
- package/templates/android-native/app/proguard-rules.pro +21 -0
- package/templates/android-native/app/src/main/AndroidManifest.xml +21 -0
- package/templates/android-native/app/src/main/java/MainActivity.kt +27 -0
- package/templates/android-native/app/src/main/res/values/strings.xml +3 -0
- package/templates/android-native/build.gradle.kts +5 -0
- package/templates/android-native/gradle/libs.versions.toml +16 -0
- package/templates/android-native/gradle/wrapper/gradle-wrapper.jar +0 -0
- package/templates/android-native/gradle/wrapper/gradle-wrapper.properties +6 -0
- package/templates/android-native/gradle.properties +4 -0
- package/templates/android-native/gradlew +185 -0
- package/templates/android-native/gradlew.bat +89 -0
- package/templates/android-native/settings.gradle.kts +25 -0
- package/templates/lxapp-create/react/lxapp.config.json +8 -0
- package/templates/lxapp-create/react/lxapp.json +8 -0
- package/templates/lxapp-create/react/lxapp.ts +8 -0
- package/templates/lxapp-create/react/package.json +26 -0
- package/templates/lxapp-create/react/pages/home/index.json +3 -0
- package/templates/lxapp-create/react/pages/home/index.ts +14 -0
- package/templates/lxapp-create/react/pages/home/index.tsx +60 -0
- package/templates/lxapp-create/react/public/.gitkeep +0 -0
- package/templates/lxapp-create/react/shared/.gitkeep +0 -0
- package/templates/lxapp-create/react/tsconfig.json +20 -0
- package/templates/lxapp-create/vue/lxapp.config.json +8 -0
- package/templates/lxapp-create/vue/lxapp.json +8 -0
- package/templates/lxapp-create/vue/lxapp.ts +8 -0
- package/templates/lxapp-create/vue/package.json +24 -0
- package/templates/lxapp-create/vue/pages/home/index.json +3 -0
- package/templates/lxapp-create/vue/pages/home/index.ts +14 -0
- package/templates/lxapp-create/vue/pages/home/index.vue +48 -0
- package/templates/lxapp-create/vue/public/.gitkeep +0 -0
- package/templates/lxapp-create/vue/shared/.gitkeep +0 -0
- package/templates/lxapp-create/vue/tsconfig.json +20 -0
- package/templates/rust-lib/Cargo.toml +13 -0
- package/templates/rust-lib/README.md +14 -0
- package/templates/rust-lib/src/lib.rs +13 -0
- package/vendor/.gitkeep +1 -0
package/bin/lingxia.js
ADDED
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
import { spawnSync } from "child_process";
|
|
4
|
+
import { existsSync } from "fs";
|
|
5
|
+
import { createRequire } from "module";
|
|
6
|
+
import { dirname, resolve } from "path";
|
|
7
|
+
import { fileURLToPath, pathToFileURL } from "url";
|
|
8
|
+
|
|
9
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
10
|
+
const __dirname = dirname(__filename);
|
|
11
|
+
const binName = process.platform === "win32" ? "lingxia.exe" : "lingxia";
|
|
12
|
+
const require = createRequire(import.meta.url);
|
|
13
|
+
const pkg = require("../package.json");
|
|
14
|
+
const jsCli = resolve(__dirname, "../dist/index.js");
|
|
15
|
+
|
|
16
|
+
function findSubcommand(argv) {
|
|
17
|
+
for (const arg of argv) {
|
|
18
|
+
if (!arg.startsWith("-")) return arg;
|
|
19
|
+
}
|
|
20
|
+
return undefined;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
function isLxappProject(cwd) {
|
|
24
|
+
const hasLxapp = existsSync(resolve(cwd, "lxapp.json"));
|
|
25
|
+
const hasLxappConfig = existsSync(resolve(cwd, "lxapp.config.json"));
|
|
26
|
+
const hasHost = existsSync(resolve(cwd, "lingxia.config.json"));
|
|
27
|
+
return hasLxapp && hasLxappConfig && !hasHost;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
async function runJsCli(argv) {
|
|
31
|
+
const jsCliPath = process.env.LINGXIA_JS_CLI || jsCli;
|
|
32
|
+
if (!existsSync(jsCliPath)) {
|
|
33
|
+
console.error(
|
|
34
|
+
"@lingxia/cli: LxApp JS CLI not found. Run npm install in @lingxia/cli.",
|
|
35
|
+
);
|
|
36
|
+
process.exit(1);
|
|
37
|
+
}
|
|
38
|
+
const { runCLI } = await import(pathToFileURL(jsCliPath).href);
|
|
39
|
+
await runCLI(argv);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
function runRust(argv) {
|
|
43
|
+
const rustBin =
|
|
44
|
+
(process.env.LINGXIA_RUST_CLI && resolve(process.env.LINGXIA_RUST_CLI)) ||
|
|
45
|
+
resolve(__dirname, "../vendor", binName);
|
|
46
|
+
|
|
47
|
+
const resolvedRustBin = existsSync(rustBin) ? rustBin : null;
|
|
48
|
+
|
|
49
|
+
if (!resolvedRustBin) {
|
|
50
|
+
console.error(
|
|
51
|
+
`@lingxia/cli@${pkg.version}: Rust binary not found. Please reinstall the package.`,
|
|
52
|
+
);
|
|
53
|
+
process.exit(1);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
if (!process.env.LINGXIA_JS_CLI && existsSync(jsCli)) {
|
|
57
|
+
process.env.LINGXIA_JS_CLI = jsCli;
|
|
58
|
+
}
|
|
59
|
+
if (!process.env.LINGXIA_TEMPLATES_DIR) {
|
|
60
|
+
const candidates = [
|
|
61
|
+
resolve(__dirname, "../templates"),
|
|
62
|
+
resolve(__dirname, "../../templates"),
|
|
63
|
+
];
|
|
64
|
+
for (const dir of candidates) {
|
|
65
|
+
if (existsSync(dir)) {
|
|
66
|
+
process.env.LINGXIA_TEMPLATES_DIR = dir;
|
|
67
|
+
break;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
const result = spawnSync(resolvedRustBin, argv, {
|
|
73
|
+
stdio: "inherit",
|
|
74
|
+
});
|
|
75
|
+
process.exit(result.status ?? 1);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
const argv = process.argv.slice(2);
|
|
79
|
+
const subcommand = findSubcommand(argv);
|
|
80
|
+
const lxappProject = isLxappProject(process.cwd());
|
|
81
|
+
|
|
82
|
+
const useJs = subcommand === "build" && lxappProject;
|
|
83
|
+
|
|
84
|
+
if (useJs) {
|
|
85
|
+
runJsCli(process.argv).catch((err) => {
|
|
86
|
+
console.error(err instanceof Error ? err.message : String(err));
|
|
87
|
+
process.exit(1);
|
|
88
|
+
});
|
|
89
|
+
} else {
|
|
90
|
+
runRust(argv);
|
|
91
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../../src/builder/commands/build.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAQ,MAAM,mBAAmB,CAAC;AAU5D,wBAAsB,YAAY,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CA6IvE"}
|
|
@@ -0,0 +1,317 @@
|
|
|
1
|
+
import fs from 'fs';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import { spawn } from 'child_process';
|
|
4
|
+
import { ViewBuilder } from '../core/builders/view.js';
|
|
5
|
+
import { LogicBuilder } from '../core/builders/logic.js';
|
|
6
|
+
import { FileUtils } from '../core/utils/file.js';
|
|
7
|
+
import { detectPageType } from '../core/utils/page.js';
|
|
8
|
+
import { ConfigManager } from '../core/config.js';
|
|
9
|
+
import { loadLxappBuildConfig } from '../core/config/build-config.js';
|
|
10
|
+
const fileUtils = new FileUtils();
|
|
11
|
+
export async function buildCommand(options) {
|
|
12
|
+
const projectPath = process.cwd();
|
|
13
|
+
const configManager = new ConfigManager(projectPath);
|
|
14
|
+
const isPluginMode = Boolean(options.plugin);
|
|
15
|
+
const outputDir = path.join(projectPath, isPluginMode ? 'dist-plugin' : 'dist');
|
|
16
|
+
const buildOptions = { ...options, plugin: isPluginMode };
|
|
17
|
+
console.log(`🚀 Starting LingXia ${isPluginMode ? 'plugin' : 'project'} build...`);
|
|
18
|
+
console.log(` Project: ${projectPath}`);
|
|
19
|
+
console.log(` Output: ${outputDir}`);
|
|
20
|
+
console.log(` View bundler: Vite`);
|
|
21
|
+
try {
|
|
22
|
+
const pluginConfig = isPluginMode ? configManager.getLxpluginConfig() : null;
|
|
23
|
+
if (isPluginMode && !pluginConfig) {
|
|
24
|
+
throw new Error('lxplugin.json not found (required for plugin build). Create a lxplugin.json file in the project root.');
|
|
25
|
+
}
|
|
26
|
+
if (isPluginMode && !pluginConfig?.lxPluginId?.trim()) {
|
|
27
|
+
throw new Error('lxplugin.json is missing a valid "lxPluginId".');
|
|
28
|
+
}
|
|
29
|
+
const pluginId = pluginConfig?.lxPluginId?.trim();
|
|
30
|
+
// Validate JSON configuration files
|
|
31
|
+
const jsonFiles = [
|
|
32
|
+
path.join(projectPath, isPluginMode ? 'lxplugin.json' : 'lxapp.json'),
|
|
33
|
+
...configManager.getPages({ plugin: isPluginMode }).map(p => path.join(projectPath, path.dirname(p), `${path.basename(p, path.extname(p))}.json`))
|
|
34
|
+
].filter(f => fs.existsSync(f));
|
|
35
|
+
if (!isPluginMode) {
|
|
36
|
+
const lxappConfigPath = path.join(projectPath, 'lxapp.config.json');
|
|
37
|
+
if (!fs.existsSync(lxappConfigPath)) {
|
|
38
|
+
throw new Error('lxapp.config.json not found in project root');
|
|
39
|
+
}
|
|
40
|
+
jsonFiles.push(lxappConfigPath);
|
|
41
|
+
}
|
|
42
|
+
for (const file of jsonFiles) {
|
|
43
|
+
try {
|
|
44
|
+
JSON.parse(fs.readFileSync(file, 'utf-8'));
|
|
45
|
+
}
|
|
46
|
+
catch (e) {
|
|
47
|
+
throw new Error(`Invalid JSON: ${path.relative(projectPath, file)}\n${e instanceof Error ? e.message : e}`);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
await ensureDependencies(projectPath);
|
|
51
|
+
const buildConfig = !isPluginMode
|
|
52
|
+
? loadLxappBuildConfig(projectPath)
|
|
53
|
+
: undefined;
|
|
54
|
+
// Clean and prepare output directory
|
|
55
|
+
fileUtils.cleanDirectory(outputDir);
|
|
56
|
+
// Discover pages
|
|
57
|
+
const pages = discoverPages(projectPath, configManager, isPluginMode);
|
|
58
|
+
const pageNames = pages.map(p => p.name).join(', ');
|
|
59
|
+
console.log(` Found ${pages.length} pages: ${pageNames}`);
|
|
60
|
+
if (pages.length === 0) {
|
|
61
|
+
console.warn('⚠️ No pages found in the project');
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
const startTime = Date.now();
|
|
65
|
+
const only = process.env.LINGXIA_ONLY?.toLowerCase();
|
|
66
|
+
if (only === 'logic') {
|
|
67
|
+
console.log('▶ Building logic layer only...');
|
|
68
|
+
const logicBuilder = new LogicBuilder(projectPath, outputDir, pluginId, buildConfig);
|
|
69
|
+
await logicBuilder.buildLogic(buildOptions);
|
|
70
|
+
}
|
|
71
|
+
else if (only === 'view') {
|
|
72
|
+
console.log('▶ Building view layer only...');
|
|
73
|
+
const viewBuilder = new ViewBuilder(projectPath, outputDir, buildConfig);
|
|
74
|
+
await viewBuilder.buildPages(pages, buildOptions);
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
console.log('▶ Building logic and view layers in parallel...');
|
|
78
|
+
const logicBuilder = new LogicBuilder(projectPath, outputDir, pluginId, buildConfig);
|
|
79
|
+
const viewBuilder = new ViewBuilder(projectPath, outputDir, buildConfig);
|
|
80
|
+
await Promise.all([
|
|
81
|
+
logicBuilder
|
|
82
|
+
.buildLogic(buildOptions)
|
|
83
|
+
.then(() => console.log(' ✔ Logic layer built')),
|
|
84
|
+
viewBuilder
|
|
85
|
+
.buildPages(pages, buildOptions)
|
|
86
|
+
.then(() => console.log(' ✔ View layer built')),
|
|
87
|
+
]);
|
|
88
|
+
}
|
|
89
|
+
const endTime = Date.now();
|
|
90
|
+
const buildTime = ((endTime - startTime) / 1000).toFixed(2);
|
|
91
|
+
cleanupLingxiaBuild(projectPath);
|
|
92
|
+
// Copy configuration file to output
|
|
93
|
+
if (pluginConfig) {
|
|
94
|
+
const pluginConfigSrc = path.join(projectPath, 'lxplugin.json');
|
|
95
|
+
const pluginConfigDest = path.join(outputDir, 'lxplugin.json');
|
|
96
|
+
fs.copyFileSync(pluginConfigSrc, pluginConfigDest);
|
|
97
|
+
console.log(' ✔ Copied lxplugin.json to output');
|
|
98
|
+
}
|
|
99
|
+
const packageInfo = readPackageInfo(projectPath);
|
|
100
|
+
const packagePath = await packageDist(outputDir, projectPath, packageInfo, isPluginMode);
|
|
101
|
+
const relativePackagePath = path.relative(projectPath, packagePath) || packagePath;
|
|
102
|
+
console.log('✅ Build completed successfully!');
|
|
103
|
+
console.log(` ⏱ Completed in ${buildTime}s`);
|
|
104
|
+
console.log(` 📁 Output directory: ${outputDir}`);
|
|
105
|
+
console.log(` 📦 Package: ${relativePackagePath}`);
|
|
106
|
+
}
|
|
107
|
+
catch (error) {
|
|
108
|
+
console.error('❌ Build failed:', error instanceof Error ? error.message : String(error));
|
|
109
|
+
process.exit(1);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
function discoverPages(projectPath, configManager, isPluginMode) {
|
|
113
|
+
const pagesPaths = configManager.getPages({ plugin: isPluginMode });
|
|
114
|
+
const pages = [];
|
|
115
|
+
for (const pagePath of pagesPaths) {
|
|
116
|
+
// Check if page file exists
|
|
117
|
+
const fullPath = path.join(projectPath, pagePath);
|
|
118
|
+
if (!fs.existsSync(fullPath)) {
|
|
119
|
+
console.warn(`⚠️ Page file not found: ${pagePath}`);
|
|
120
|
+
continue;
|
|
121
|
+
}
|
|
122
|
+
// Extract page info
|
|
123
|
+
const pageType = detectPageType(pagePath);
|
|
124
|
+
const pageDir = path.dirname(pagePath);
|
|
125
|
+
const baseName = path.basename(pagePath, path.extname(pagePath));
|
|
126
|
+
// Create page name from directory structure
|
|
127
|
+
let pageName = pageDir;
|
|
128
|
+
if (pageDir.startsWith('pages/')) {
|
|
129
|
+
pageName = pageDir.substring(6); // Remove 'pages/' prefix
|
|
130
|
+
}
|
|
131
|
+
if (!pageName) {
|
|
132
|
+
pageName = baseName;
|
|
133
|
+
}
|
|
134
|
+
pages.push({
|
|
135
|
+
path: pagePath, // Full path from lxapp.json
|
|
136
|
+
name: pageName,
|
|
137
|
+
type: pageType
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
return pages;
|
|
141
|
+
}
|
|
142
|
+
function cleanupLingxiaBuild(projectPath) {
|
|
143
|
+
const tempDir = path.join(projectPath, '.lingxia-build');
|
|
144
|
+
if (fs.existsSync(tempDir)) {
|
|
145
|
+
fs.rmSync(tempDir, { recursive: true, force: true });
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
function readPackageInfo(projectPath) {
|
|
149
|
+
const pkgPath = path.join(projectPath, 'package.json');
|
|
150
|
+
if (!fs.existsSync(pkgPath)) {
|
|
151
|
+
return {};
|
|
152
|
+
}
|
|
153
|
+
try {
|
|
154
|
+
const raw = fs.readFileSync(pkgPath, 'utf-8');
|
|
155
|
+
return JSON.parse(raw);
|
|
156
|
+
}
|
|
157
|
+
catch (error) {
|
|
158
|
+
console.warn('⚠️ Failed to read package.json:', error instanceof Error ? error.message : String(error));
|
|
159
|
+
return {};
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
async function ensureDependencies(projectPath) {
|
|
163
|
+
if (isSkipInstall())
|
|
164
|
+
return;
|
|
165
|
+
const packageJson = path.join(projectPath, 'package.json');
|
|
166
|
+
if (!fs.existsSync(packageJson))
|
|
167
|
+
return;
|
|
168
|
+
const nodeModules = path.join(projectPath, 'node_modules');
|
|
169
|
+
const nodeModulesMtime = getMtime(nodeModules);
|
|
170
|
+
const packageMtime = getMtime(packageJson);
|
|
171
|
+
const pnpmLock = path.join(projectPath, 'pnpm-lock.yaml');
|
|
172
|
+
const yarnLock = path.join(projectPath, 'yarn.lock');
|
|
173
|
+
const npmLock = path.join(projectPath, 'package-lock.json');
|
|
174
|
+
const hasPnpmLock = fs.existsSync(pnpmLock);
|
|
175
|
+
const hasYarnLock = fs.existsSync(yarnLock);
|
|
176
|
+
const hasNpmLock = fs.existsSync(npmLock);
|
|
177
|
+
const newestLockMtime = Math.max(getMtime(pnpmLock), getMtime(yarnLock), getMtime(npmLock));
|
|
178
|
+
const shouldInstall = !fs.existsSync(nodeModules) ||
|
|
179
|
+
newestLockMtime > nodeModulesMtime ||
|
|
180
|
+
packageMtime > nodeModulesMtime;
|
|
181
|
+
if (!shouldInstall)
|
|
182
|
+
return;
|
|
183
|
+
const packageManager = detectPackageManager(hasPnpmLock, hasYarnLock);
|
|
184
|
+
const args = resolveInstallArgs(packageManager, hasLockfileFor(packageManager, hasPnpmLock, hasYarnLock, hasNpmLock));
|
|
185
|
+
console.log(` ⏳ Installing LxApp dependencies (${packageManager})...`);
|
|
186
|
+
try {
|
|
187
|
+
await runCommand(packageManager, args, projectPath);
|
|
188
|
+
}
|
|
189
|
+
catch (error) {
|
|
190
|
+
if (error?.code === 'ENOENT' && packageManager !== 'npm') {
|
|
191
|
+
console.warn(`⚠️ ${packageManager} not found, falling back to npm install.`);
|
|
192
|
+
await runCommand('npm', resolveInstallArgs('npm', hasNpmLock), projectPath);
|
|
193
|
+
return;
|
|
194
|
+
}
|
|
195
|
+
throw error;
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
function isSkipInstall() {
|
|
199
|
+
const value = process.env.LINGXIA_SKIP_NPM_INSTALL;
|
|
200
|
+
if (!value)
|
|
201
|
+
return false;
|
|
202
|
+
return value === '1' || value.toLowerCase() === 'true';
|
|
203
|
+
}
|
|
204
|
+
function getMtime(targetPath) {
|
|
205
|
+
try {
|
|
206
|
+
return fs.statSync(targetPath).mtimeMs || 0;
|
|
207
|
+
}
|
|
208
|
+
catch {
|
|
209
|
+
return 0;
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
function detectPackageManager(hasPnpmLock, hasYarnLock) {
|
|
213
|
+
if (hasPnpmLock)
|
|
214
|
+
return 'pnpm';
|
|
215
|
+
if (hasYarnLock)
|
|
216
|
+
return 'yarn';
|
|
217
|
+
return 'npm';
|
|
218
|
+
}
|
|
219
|
+
function hasLockfileFor(manager, hasPnpmLock, hasYarnLock, hasNpmLock) {
|
|
220
|
+
if (manager === 'pnpm')
|
|
221
|
+
return hasPnpmLock;
|
|
222
|
+
if (manager === 'yarn')
|
|
223
|
+
return hasYarnLock;
|
|
224
|
+
return hasNpmLock;
|
|
225
|
+
}
|
|
226
|
+
function resolveInstallArgs(manager, hasLock) {
|
|
227
|
+
const isCi = Boolean(process.env.CI);
|
|
228
|
+
if (manager === 'npm') {
|
|
229
|
+
return isCi && hasLock ? ['ci'] : ['install'];
|
|
230
|
+
}
|
|
231
|
+
if (manager === 'pnpm') {
|
|
232
|
+
return isCi && hasLock ? ['install', '--frozen-lockfile'] : ['install'];
|
|
233
|
+
}
|
|
234
|
+
return isCi && hasLock ? ['install', '--frozen-lockfile'] : ['install'];
|
|
235
|
+
}
|
|
236
|
+
function runCommand(command, args, cwd) {
|
|
237
|
+
return new Promise((resolve, reject) => {
|
|
238
|
+
const child = spawn(command, args, { cwd, stdio: 'inherit' });
|
|
239
|
+
child.on('error', err => reject(err));
|
|
240
|
+
child.on('exit', code => {
|
|
241
|
+
if (code === 0) {
|
|
242
|
+
resolve();
|
|
243
|
+
}
|
|
244
|
+
else {
|
|
245
|
+
const error = new Error(`${command} exited with code ${code ?? 'unknown'}`);
|
|
246
|
+
error.code = code;
|
|
247
|
+
reject(error);
|
|
248
|
+
}
|
|
249
|
+
});
|
|
250
|
+
});
|
|
251
|
+
}
|
|
252
|
+
async function packageDist(distDir, projectPath, pkgInfo, isPluginMode = false) {
|
|
253
|
+
if (!fs.existsSync(distDir)) {
|
|
254
|
+
throw new Error('Dist directory not found, cannot package build output.');
|
|
255
|
+
}
|
|
256
|
+
const defaultName = isPluginMode ? 'lingxia-plugin' : 'lingxia-app';
|
|
257
|
+
const baseName = sanitizeName(pkgInfo.name, defaultName);
|
|
258
|
+
const version = sanitizeVersion(pkgInfo.version);
|
|
259
|
+
const archiveName = `${baseName}-${version}.tar.zstd`;
|
|
260
|
+
const archivePath = path.join(projectPath, archiveName);
|
|
261
|
+
if (fs.existsSync(archivePath)) {
|
|
262
|
+
fs.rmSync(archivePath, { force: true });
|
|
263
|
+
}
|
|
264
|
+
// Package from inside the dist directory so extracted files don't have dist/ prefix
|
|
265
|
+
// Exclude macOS metadata files (._* and .DS_Store) and other hidden files
|
|
266
|
+
// Note: --exclude must come before -cf for proper filtering
|
|
267
|
+
await runTar([
|
|
268
|
+
'--exclude=._*',
|
|
269
|
+
'--exclude=.DS_Store',
|
|
270
|
+
'--use-compress-program',
|
|
271
|
+
'zstd -T1',
|
|
272
|
+
'-cf',
|
|
273
|
+
archivePath,
|
|
274
|
+
'.'
|
|
275
|
+
], distDir);
|
|
276
|
+
return archivePath;
|
|
277
|
+
}
|
|
278
|
+
function sanitizeName(name, fallback) {
|
|
279
|
+
if (!name || typeof name !== 'string') {
|
|
280
|
+
return fallback;
|
|
281
|
+
}
|
|
282
|
+
const cleaned = name.trim().replace(/[^a-zA-Z0-9._-]/g, '_');
|
|
283
|
+
return cleaned.length > 0 ? cleaned : fallback;
|
|
284
|
+
}
|
|
285
|
+
function sanitizeVersion(version) {
|
|
286
|
+
const fallback = '0.0.0';
|
|
287
|
+
if (!version || typeof version !== 'string') {
|
|
288
|
+
return fallback;
|
|
289
|
+
}
|
|
290
|
+
const cleaned = version.trim().replace(/[^0-9a-zA-Z._-]/g, '_');
|
|
291
|
+
return cleaned.length > 0 ? cleaned : fallback;
|
|
292
|
+
}
|
|
293
|
+
function runTar(args, cwd) {
|
|
294
|
+
return new Promise((resolve, reject) => {
|
|
295
|
+
// COPYFILE_DISABLE=1 prevents macOS tar from adding ._* metadata files
|
|
296
|
+
const child = spawn('tar', args, {
|
|
297
|
+
cwd,
|
|
298
|
+
stdio: 'inherit',
|
|
299
|
+
env: {
|
|
300
|
+
...process.env,
|
|
301
|
+
COPYFILE_DISABLE: '1',
|
|
302
|
+
ZSTD_NBTHREADS: '1',
|
|
303
|
+
ZSTD_DEFAULT_NBTHREADS: '1'
|
|
304
|
+
}
|
|
305
|
+
});
|
|
306
|
+
child.on('error', err => reject(err));
|
|
307
|
+
child.on('exit', code => {
|
|
308
|
+
if (code === 0) {
|
|
309
|
+
resolve();
|
|
310
|
+
}
|
|
311
|
+
else {
|
|
312
|
+
reject(new Error(`tar exited with code ${code ?? 'unknown'}`));
|
|
313
|
+
}
|
|
314
|
+
});
|
|
315
|
+
});
|
|
316
|
+
}
|
|
317
|
+
//# sourceMappingURL=build.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build.js","sourceRoot":"","sources":["../../../src/builder/commands/build.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { BuildOptions } from '../../types/index.js';
|
|
2
|
+
import type { BuildConfig } from '../config/build-config.js';
|
|
3
|
+
/**
|
|
4
|
+
* Modern LogicBuilder that leverages Vite for dependency resolution and bundling
|
|
5
|
+
*/
|
|
6
|
+
export declare class LogicBuilder {
|
|
7
|
+
private projectPath;
|
|
8
|
+
private outputDir;
|
|
9
|
+
private fileUtils;
|
|
10
|
+
private configManager;
|
|
11
|
+
private alias;
|
|
12
|
+
private sourceDirs;
|
|
13
|
+
private isPlugin;
|
|
14
|
+
private pluginId?;
|
|
15
|
+
constructor(projectPath: string, outputDir: string, pluginId?: string, buildConfig?: BuildConfig);
|
|
16
|
+
buildLogic(options?: BuildOptions): Promise<void>;
|
|
17
|
+
/**
|
|
18
|
+
* Discover logic files based on pages configuration
|
|
19
|
+
*/
|
|
20
|
+
private discoverLogicFiles;
|
|
21
|
+
/**
|
|
22
|
+
* Build logic layer using Vite for proper dependency resolution
|
|
23
|
+
*/
|
|
24
|
+
private buildLogicWithVite;
|
|
25
|
+
/**
|
|
26
|
+
* Create entry file that imports all logic files
|
|
27
|
+
*/
|
|
28
|
+
private createLogicEntry;
|
|
29
|
+
/**
|
|
30
|
+
* Process logic file to add path parameter to Page calls
|
|
31
|
+
*/
|
|
32
|
+
private processLogicFileForPath;
|
|
33
|
+
/**
|
|
34
|
+
* Get page path from pages configuration
|
|
35
|
+
*/
|
|
36
|
+
private getPagePathFromConfig;
|
|
37
|
+
/**
|
|
38
|
+
* Create Vite config for logic build using TemplateManager
|
|
39
|
+
*/
|
|
40
|
+
/**
|
|
41
|
+
* Copy lxapp.js/ts to build directory so entry import works.
|
|
42
|
+
* Other page files are referenced through their processed copies.
|
|
43
|
+
*/
|
|
44
|
+
private copyLxappFile;
|
|
45
|
+
private copySourceDirectories;
|
|
46
|
+
private runViteLogicBuild;
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=logic.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logic.d.ts","sourceRoot":"","sources":["../../../../src/builder/core/builders/logic.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAOzD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAE7D;;GAEG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,KAAK,CAAyB;IACtC,OAAO,CAAC,UAAU,CAAW;IAC7B,OAAO,CAAC,QAAQ,CAAU;IAC1B,OAAO,CAAC,QAAQ,CAAC,CAAS;gBAGxB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,QAAQ,CAAC,EAAE,MAAM,EACjB,WAAW,CAAC,EAAE,WAAW;IAarB,UAAU,CAAC,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAa3D;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAgC1B;;OAEG;YACW,kBAAkB;IAuBhC;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAsBxB;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAyB/B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAwB7B;;OAEG;IACH;;;OAGG;IACH,OAAO,CAAC,aAAa;YAeP,qBAAqB;YAUrB,iBAAiB;CA4BhC"}
|