@lingxia/cli 0.0.9 → 0.1.3

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 (174) 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 -16
  111. package/dist/index.js.map +1 -1
  112. package/package.json +7 -6
  113. package/scripts/install.cjs +35 -15
  114. package/templates/AppIcon.png +0 -0
  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 -0
  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 +2 -0
  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 +2 -0
  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 +16 -1
  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/templates/lxapp-create/react/lxapp.config.json +0 -8
  172. package/templates/lxapp-create/react/public/.gitkeep +0 -0
  173. package/templates/lxapp-create/vue/lxapp.config.json +0 -8
  174. package/templates/lxapp-create/vue/public/.gitkeep +0 -0
@@ -0,0 +1,17 @@
1
+ import type { PageTypeInfo } from "./builders/page-types.js";
2
+ export declare class TypeGenerator {
3
+ private projectPath;
4
+ constructor(projectPath: string);
5
+ generatePageTypes(pagePath: string, typeInfo: PageTypeInfo): string;
6
+ private renderDataInterface;
7
+ private renderActionsInterface;
8
+ private renderMethodParams;
9
+ private typeInfoToString;
10
+ private escapePropertyName;
11
+ writeTypesForPage(pagePath: string, content: string): void;
12
+ writeTypesConfig(): void;
13
+ generateIndexFile(pageTypePaths: string[]): void;
14
+ addToGitignore(): void;
15
+ }
16
+ export declare function createTypeGenerator(projectPath: string): TypeGenerator;
17
+ //# sourceMappingURL=type-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"type-generator.d.ts","sourceRoot":"","sources":["../../../src/builder/core/type-generator.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAwB,MAAM,0BAA0B,CAAC;AAEnF,qBAAa,aAAa;IACxB,OAAO,CAAC,WAAW,CAAS;gBAEhB,WAAW,EAAE,MAAM;IAI/B,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,GAAG,MAAM;IAuBnE,OAAO,CAAC,mBAAmB;IAa3B,OAAO,CAAC,sBAAsB;IAa9B,OAAO,CAAC,kBAAkB;IAW1B,OAAO,CAAC,gBAAgB;IAqCxB,OAAO,CAAC,kBAAkB;IAQ1B,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAe1D,gBAAgB,IAAI,IAAI;IA2BxB,iBAAiB,CAAC,aAAa,EAAE,MAAM,EAAE,GAAG,IAAI;IAwBhD,cAAc,IAAI,IAAI;CAWvB;AAED,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,aAAa,CAEtE"}
@@ -0,0 +1,172 @@
1
+ import * as fs from "fs";
2
+ import * as path from "path";
3
+ export class TypeGenerator {
4
+ projectPath;
5
+ constructor(projectPath) {
6
+ this.projectPath = projectPath;
7
+ }
8
+ generatePageTypes(pagePath, typeInfo) {
9
+ const dataFields = this.renderDataInterface(typeInfo.data);
10
+ const actionMethods = this.renderActionsInterface(typeInfo.methods);
11
+ return `// Auto-generated by lingxia-cli. DO NOT EDIT.
12
+ // Source: ${pagePath}
13
+
14
+ export interface PageData {
15
+ ${dataFields}
16
+ }
17
+
18
+ export interface PageActions {
19
+ ${actionMethods}
20
+ }
21
+
22
+ declare global {
23
+ function useLingXia(): { data: PageData } & PageActions;
24
+ }
25
+
26
+ export {};
27
+ `;
28
+ }
29
+ renderDataInterface(data, indent = " ") {
30
+ const entries = Object.entries(data);
31
+ if (entries.length === 0)
32
+ return `${indent}[key: string]: unknown;`;
33
+ return entries
34
+ .map(([key, info]) => {
35
+ const optional = info.optional ? "?" : "";
36
+ const typeStr = this.typeInfoToString(info);
37
+ return `${indent}${this.escapePropertyName(key)}${optional}: ${typeStr};`;
38
+ })
39
+ .join("\n");
40
+ }
41
+ renderActionsInterface(methods, indent = " ") {
42
+ const entries = Object.entries(methods);
43
+ if (entries.length === 0)
44
+ return `${indent}[key: string]: (...args: unknown[]) => void;`;
45
+ return entries
46
+ .map(([name, info]) => {
47
+ const params = this.renderMethodParams(info.params);
48
+ const returnType = info.returnType || "void";
49
+ return `${indent}${this.escapePropertyName(name)}(${params}): ${returnType};`;
50
+ })
51
+ .join("\n");
52
+ }
53
+ renderMethodParams(params) {
54
+ if (params.length === 0)
55
+ return "";
56
+ return params
57
+ .map((p) => {
58
+ const optional = p.optional ? "?" : "";
59
+ return `${p.name}${optional}: ${p.type}`;
60
+ })
61
+ .join(", ");
62
+ }
63
+ typeInfoToString(info) {
64
+ switch (info.type) {
65
+ case "string":
66
+ case "number":
67
+ case "boolean":
68
+ case "null":
69
+ case "unknown":
70
+ return info.type;
71
+ case "array":
72
+ if (info.elementType) {
73
+ const elementType = this.typeInfoToString(info.elementType);
74
+ // Wrap complex types in parentheses for array notation
75
+ if (elementType.includes("|") || elementType.includes("&")) {
76
+ return `(${elementType})[]`;
77
+ }
78
+ return `${elementType}[]`;
79
+ }
80
+ return "unknown[]";
81
+ case "object":
82
+ if (info.properties && Object.keys(info.properties).length > 0) {
83
+ const props = Object.entries(info.properties)
84
+ .map(([key, propInfo]) => {
85
+ const optional = propInfo.optional ? "?" : "";
86
+ return `${this.escapePropertyName(key)}${optional}: ${this.typeInfoToString(propInfo)}`;
87
+ })
88
+ .join("; ");
89
+ return `{ ${props} }`;
90
+ }
91
+ return "Record<string, unknown>";
92
+ default:
93
+ return "unknown";
94
+ }
95
+ }
96
+ escapePropertyName(name) {
97
+ // If name contains special characters or starts with a number, quote it
98
+ if (/^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(name)) {
99
+ return name;
100
+ }
101
+ return `"${name.replace(/"/g, '\\"')}"`;
102
+ }
103
+ writeTypesForPage(pagePath, content) {
104
+ // Convert page path to types path
105
+ // e.g., "pages/home/index.tsx" -> ".lingxia/types/pages/home/index.d.ts"
106
+ const relativePath = pagePath.replace(/\.(tsx?|vue)$/, ".d.ts");
107
+ const typesDir = path.join(this.projectPath, ".lingxia", "types");
108
+ const outputPath = path.join(typesDir, relativePath);
109
+ // Ensure directory exists
110
+ const outputDir = path.dirname(outputPath);
111
+ fs.mkdirSync(outputDir, { recursive: true });
112
+ // Write the types file
113
+ fs.writeFileSync(outputPath, content, "utf-8");
114
+ }
115
+ writeTypesConfig() {
116
+ const typesDir = path.join(this.projectPath, ".lingxia", "types");
117
+ fs.mkdirSync(typesDir, { recursive: true });
118
+ // Write a tsconfig.json for the types directory
119
+ const tsconfigPath = path.join(typesDir, "tsconfig.json");
120
+ const tsconfig = {
121
+ compilerOptions: {
122
+ target: "ESNext",
123
+ module: "ESNext",
124
+ moduleResolution: "bundler",
125
+ strict: true,
126
+ skipLibCheck: true,
127
+ declaration: true,
128
+ declarationMap: false,
129
+ emitDeclarationOnly: true,
130
+ noEmit: false,
131
+ },
132
+ include: ["**/*.d.ts"],
133
+ };
134
+ fs.writeFileSync(tsconfigPath, JSON.stringify(tsconfig, null, 2), "utf-8");
135
+ // Write an index.d.ts that re-exports all page types
136
+ // This will be updated as pages are built
137
+ }
138
+ generateIndexFile(pageTypePaths) {
139
+ const typesDir = path.join(this.projectPath, ".lingxia", "types");
140
+ const indexPath = path.join(typesDir, "index.d.ts");
141
+ const exports = pageTypePaths
142
+ .map((p) => {
143
+ // Convert "pages/home/index.d.ts" to "./pages/home/index"
144
+ const importPath = "./" + p.replace(/\.d\.ts$/, "");
145
+ // Create a namespace-friendly export name
146
+ const exportName = p
147
+ .replace(/\.d\.ts$/, "")
148
+ .replace(/\//g, "_")
149
+ .replace(/[^a-zA-Z0-9_]/g, "_");
150
+ return `export * as ${exportName} from "${importPath}";`;
151
+ })
152
+ .join("\n");
153
+ const content = `// Auto-generated by lingxia-cli. DO NOT EDIT.
154
+ ${exports}
155
+ `;
156
+ fs.writeFileSync(indexPath, content, "utf-8");
157
+ }
158
+ addToGitignore() {
159
+ const gitignorePath = path.join(this.projectPath, ".gitignore");
160
+ const entry = "\n# LingXia generated types\n.lingxia/\n";
161
+ if (fs.existsSync(gitignorePath)) {
162
+ const content = fs.readFileSync(gitignorePath, "utf-8");
163
+ if (!content.includes(".lingxia/")) {
164
+ fs.appendFileSync(gitignorePath, entry);
165
+ }
166
+ }
167
+ }
168
+ }
169
+ export function createTypeGenerator(projectPath) {
170
+ return new TypeGenerator(projectPath);
171
+ }
172
+ //# sourceMappingURL=type-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"type-generator.js","sourceRoot":"","sources":["../../../src/builder/core/type-generator.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
- import fs from 'fs';
2
- import path from 'path';
1
+ import fs from "fs";
2
+ import path from "path";
3
3
  export class FileUtils {
4
4
  /**
5
5
  * Copy directory recursively
@@ -81,7 +81,7 @@ export class FileUtils {
81
81
  */
82
82
  readJsonFile(filePath) {
83
83
  try {
84
- const content = fs.readFileSync(filePath, 'utf-8');
84
+ const content = fs.readFileSync(filePath, "utf-8");
85
85
  return JSON.parse(content);
86
86
  }
87
87
  catch {
@@ -93,7 +93,7 @@ export class FileUtils {
93
93
  */
94
94
  writeJsonFile(filePath, data) {
95
95
  const content = JSON.stringify(data, null, 2);
96
- fs.writeFileSync(filePath, content, 'utf-8');
96
+ fs.writeFileSync(filePath, content, "utf-8");
97
97
  }
98
98
  }
99
99
  //# sourceMappingURL=file.js.map
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Build target configuration for incremental build checks
3
+ */
4
+ export interface BuildTarget {
5
+ name: string;
6
+ srcDirs: string[];
7
+ srcFiles?: string[];
8
+ outputDir: string;
9
+ outputMarker?: string;
10
+ }
11
+ /**
12
+ * Build metadata stored in output directory
13
+ */
14
+ export interface BuildMeta {
15
+ builtAt: number;
16
+ version: string;
17
+ mode: "development" | "production";
18
+ sourceDirs: string[];
19
+ configHash?: string;
20
+ }
21
+ /**
22
+ * Get the newest modification time from a directory recursively
23
+ * Skips common non-source directories for performance
24
+ */
25
+ export declare function getNewestMtime(dir: string): number;
26
+ /**
27
+ * Get modification time of a file
28
+ */
29
+ export declare function getMtime(targetPath: string): number;
30
+ /**
31
+ * Check if a build target needs to be rebuilt based on mtime comparison
32
+ *
33
+ * Returns true if:
34
+ * - Output doesn't exist
35
+ * - Any source directory is newer than output
36
+ * - Any source file is newer than output
37
+ */
38
+ export declare function shouldRebuild(target: BuildTarget, projectPath: string): boolean;
39
+ /**
40
+ * Default build metadata filename
41
+ */
42
+ export declare const BUILD_META_FILENAME = ".build-meta.json";
43
+ /**
44
+ * Write build metadata to output directory
45
+ */
46
+ export declare function writeBuildMeta(outputDir: string, meta: BuildMeta): void;
47
+ /**
48
+ * Read build metadata from output directory
49
+ */
50
+ export declare function readBuildMeta(outputDir: string): BuildMeta | null;
51
+ /**
52
+ * Create a build target configuration for LxApp (view + logic)
53
+ */
54
+ export declare function createLxAppBuildTarget(projectPath: string, outputDir: string, sourceDirs: string[]): BuildTarget;
55
+ /**
56
+ * Format elapsed time for display
57
+ */
58
+ export declare function formatSkipMessage(targetName: string, elapsed: number): string;
59
+ //# sourceMappingURL=incremental.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"incremental.d.ts","sourceRoot":"","sources":["../../../../src/builder/core/utils/incremental.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,aAAa,GAAG,YAAY,CAAC;IACnC,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAcD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAuDlD;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAMnD;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,WAAW,EACnB,WAAW,EAAE,MAAM,GAClB,OAAO,CAkCT;AAED;;GAEG;AACH,eAAO,MAAM,mBAAmB,qBAAqB,CAAC;AAEtD;;GAEG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,IAAI,CAWvE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAWjE;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAAE,GACnB,WAAW,CAmBb;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAE7E"}
@@ -0,0 +1,177 @@
1
+ import fs from "fs";
2
+ import path from "path";
3
+ const SKIP_DIRS = new Set([
4
+ "node_modules",
5
+ ".git",
6
+ ".lingxia-build",
7
+ "dist",
8
+ "dist-plugin",
9
+ ".vite",
10
+ ".cache",
11
+ ]);
12
+ const SKIP_EXTENSIONS = new Set([".log", ".map"]);
13
+ /**
14
+ * Get the newest modification time from a directory recursively
15
+ * Skips common non-source directories for performance
16
+ */
17
+ export function getNewestMtime(dir) {
18
+ if (!fs.existsSync(dir)) {
19
+ return 0;
20
+ }
21
+ let newest = 0;
22
+ try {
23
+ const stat = fs.statSync(dir);
24
+ if (!stat.isDirectory()) {
25
+ return stat.mtimeMs || 0;
26
+ }
27
+ const entries = fs.readdirSync(dir, { withFileTypes: true });
28
+ for (const entry of entries) {
29
+ // Skip hidden files and directories
30
+ if (entry.name.startsWith(".")) {
31
+ continue;
32
+ }
33
+ // Skip common non-source directories
34
+ if (entry.isDirectory() && SKIP_DIRS.has(entry.name)) {
35
+ continue;
36
+ }
37
+ const fullPath = path.join(dir, entry.name);
38
+ if (entry.isDirectory()) {
39
+ const dirMtime = getNewestMtime(fullPath);
40
+ if (dirMtime > newest) {
41
+ newest = dirMtime;
42
+ }
43
+ }
44
+ else {
45
+ // Skip non-source files
46
+ const ext = path.extname(entry.name).toLowerCase();
47
+ if (SKIP_EXTENSIONS.has(ext)) {
48
+ continue;
49
+ }
50
+ try {
51
+ const fileStat = fs.statSync(fullPath);
52
+ if (fileStat.mtimeMs > newest) {
53
+ newest = fileStat.mtimeMs;
54
+ }
55
+ }
56
+ catch {
57
+ // Ignore stat errors for individual files
58
+ }
59
+ }
60
+ }
61
+ }
62
+ catch {
63
+ return 0;
64
+ }
65
+ return newest;
66
+ }
67
+ /**
68
+ * Get modification time of a file
69
+ */
70
+ export function getMtime(targetPath) {
71
+ try {
72
+ return fs.statSync(targetPath).mtimeMs || 0;
73
+ }
74
+ catch {
75
+ return 0;
76
+ }
77
+ }
78
+ /**
79
+ * Check if a build target needs to be rebuilt based on mtime comparison
80
+ *
81
+ * Returns true if:
82
+ * - Output doesn't exist
83
+ * - Any source directory is newer than output
84
+ * - Any source file is newer than output
85
+ */
86
+ export function shouldRebuild(target, projectPath) {
87
+ // Get output reference mtime
88
+ const outputMtime = target.outputMarker
89
+ ? getMtime(target.outputMarker)
90
+ : getNewestMtime(target.outputDir);
91
+ // If output doesn't exist, need to build
92
+ if (outputMtime === 0) {
93
+ return true;
94
+ }
95
+ // Check each source directory
96
+ for (const srcDir of target.srcDirs) {
97
+ const absoluteSrcDir = path.isAbsolute(srcDir)
98
+ ? srcDir
99
+ : path.join(projectPath, srcDir);
100
+ const srcMtime = getNewestMtime(absoluteSrcDir);
101
+ if (srcMtime > outputMtime) {
102
+ return true;
103
+ }
104
+ }
105
+ // Check additional source files
106
+ if (target.srcFiles) {
107
+ for (const srcFile of target.srcFiles) {
108
+ const srcMtime = getMtime(srcFile);
109
+ if (srcMtime > outputMtime) {
110
+ return true;
111
+ }
112
+ }
113
+ }
114
+ return false;
115
+ }
116
+ /**
117
+ * Default build metadata filename
118
+ */
119
+ export const BUILD_META_FILENAME = ".build-meta.json";
120
+ /**
121
+ * Write build metadata to output directory
122
+ */
123
+ export function writeBuildMeta(outputDir, meta) {
124
+ const metaPath = path.join(outputDir, BUILD_META_FILENAME);
125
+ try {
126
+ fs.writeFileSync(metaPath, JSON.stringify(meta, null, 2), "utf-8");
127
+ }
128
+ catch (error) {
129
+ // Non-critical, just log warning
130
+ console.warn("⚠️ Failed to write build metadata:", error instanceof Error ? error.message : String(error));
131
+ }
132
+ }
133
+ /**
134
+ * Read build metadata from output directory
135
+ */
136
+ export function readBuildMeta(outputDir) {
137
+ const metaPath = path.join(outputDir, BUILD_META_FILENAME);
138
+ try {
139
+ if (!fs.existsSync(metaPath)) {
140
+ return null;
141
+ }
142
+ const content = fs.readFileSync(metaPath, "utf-8");
143
+ return JSON.parse(content);
144
+ }
145
+ catch {
146
+ return null;
147
+ }
148
+ }
149
+ /**
150
+ * Create a build target configuration for LxApp (view + logic)
151
+ */
152
+ export function createLxAppBuildTarget(projectPath, outputDir, sourceDirs) {
153
+ // Core config files that should trigger rebuild
154
+ const configFiles = [
155
+ path.join(projectPath, "lxapp.json"),
156
+ path.join(projectPath, "lxapp.config.ts"),
157
+ path.join(projectPath, "lxplugin.json"),
158
+ path.join(projectPath, "package.json"),
159
+ path.join(projectPath, "tsconfig.json"),
160
+ path.join(projectPath, "vite.config.ts"),
161
+ path.join(projectPath, "vite.config.js"),
162
+ ].filter((f) => fs.existsSync(f));
163
+ return {
164
+ name: "lxapp",
165
+ srcDirs: ["pages", ...sourceDirs],
166
+ srcFiles: configFiles,
167
+ outputDir,
168
+ outputMarker: path.join(outputDir, BUILD_META_FILENAME),
169
+ };
170
+ }
171
+ /**
172
+ * Format elapsed time for display
173
+ */
174
+ export function formatSkipMessage(targetName, elapsed) {
175
+ return ` ✔ ${targetName} up to date (checked in ${elapsed}ms), skipping build`;
176
+ }
177
+ //# sourceMappingURL=incremental.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"incremental.js","sourceRoot":"","sources":["../../../../src/builder/core/utils/incremental.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type { Page, PageFiles } from '../../types/index.js';
1
+ import type { FrameworkType, Page, PageFiles } from "../../types/index.js";
2
2
  /**
3
3
  * Get page title from configuration or default
4
4
  */
@@ -6,7 +6,17 @@ export declare function getPageTitle(page: Page, pageFiles: PageFiles): string;
6
6
  /**
7
7
  * Detect page type from file extension
8
8
  */
9
- export declare function detectPageType(filePath: string): 'html' | 'react' | 'vue';
9
+ export declare function detectPageType(filePath: string): "html" | "react" | "vue";
10
+ /**
11
+ * Resolve page path to actual file path with extension.
12
+ * If pagePath has no extension, auto-detect or use specified framework.
13
+ *
14
+ * @param projectPath - Project root directory
15
+ * @param pagePath - Page path from lxapp.json (may or may not have extension)
16
+ * @param framework - Optional framework to prefer when auto-detecting
17
+ * @returns Resolved file path with extension, or null if not found
18
+ */
19
+ export declare function resolvePagePath(projectPath: string, pagePath: string, framework?: FrameworkType): string | null;
10
20
  /**
11
21
  * Validate page structure
12
22
  */
@@ -1 +1 @@
1
- {"version":3,"file":"page.d.ts","sourceRoot":"","sources":["../../../../src/builder/core/utils/page.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAK5D;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,GAAG,MAAM,CAWrE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,CAazE;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,GAAG,MAAM,EAAE,CAYhF"}
1
+ {"version":3,"file":"page.d.ts","sourceRoot":"","sources":["../../../../src/builder/core/utils/page.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAO3E;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,GAAG,MAAM,CAWrE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,CAazE;AAgBD;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAC7B,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,SAAS,CAAC,EAAE,aAAa,GACxB,MAAM,GAAG,IAAI,CAqCf;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,IAAI,EACV,SAAS,EAAE,SAAS,GACnB,MAAM,EAAE,CAYV"}
@@ -1,4 +1,6 @@
1
- import { FileUtils } from './file.js';
1
+ import { FileUtils } from "./file.js";
2
+ import fs from "fs";
3
+ import path from "path";
2
4
  const fileUtils = new FileUtils();
3
5
  /**
4
6
  * Get page title from configuration or default
@@ -20,16 +22,69 @@ export function getPageTitle(page, pageFiles) {
20
22
  export function detectPageType(filePath) {
21
23
  const ext = fileUtils.getExtension(filePath);
22
24
  switch (ext) {
23
- case 'tsx':
24
- case 'jsx':
25
- return 'react';
26
- case 'vue':
27
- return 'vue';
28
- case 'html':
25
+ case "tsx":
26
+ case "jsx":
27
+ return "react";
28
+ case "vue":
29
+ return "vue";
30
+ case "html":
29
31
  default:
30
- return 'html';
32
+ return "html";
31
33
  }
32
34
  }
35
+ /**
36
+ * View file extensions in priority order for each framework
37
+ */
38
+ const VIEW_EXTENSIONS = {
39
+ react: ["tsx", "jsx"],
40
+ vue: ["vue"],
41
+ html: ["html"],
42
+ };
43
+ /**
44
+ * All supported view extensions for auto-detection
45
+ */
46
+ const ALL_VIEW_EXTENSIONS = ["tsx", "jsx", "vue", "html"];
47
+ /**
48
+ * Resolve page path to actual file path with extension.
49
+ * If pagePath has no extension, auto-detect or use specified framework.
50
+ *
51
+ * @param projectPath - Project root directory
52
+ * @param pagePath - Page path from lxapp.json (may or may not have extension)
53
+ * @param framework - Optional framework to prefer when auto-detecting
54
+ * @returns Resolved file path with extension, or null if not found
55
+ */
56
+ export function resolvePagePath(projectPath, pagePath, framework) {
57
+ const ext = path.extname(pagePath);
58
+ // If path already has an extension, check if it exists
59
+ if (ext) {
60
+ const fullPath = path.join(projectPath, pagePath);
61
+ return fs.existsSync(fullPath) ? pagePath : null;
62
+ }
63
+ // No extension - need to detect
64
+ const pageDir = path.dirname(pagePath);
65
+ const baseName = path.basename(pagePath);
66
+ // Determine extension search order
67
+ let extensions;
68
+ if (framework) {
69
+ // Prefer specified framework's extensions, then fallback to others
70
+ const preferredExts = VIEW_EXTENSIONS[framework];
71
+ const otherExts = ALL_VIEW_EXTENSIONS.filter((e) => !preferredExts.includes(e));
72
+ extensions = [...preferredExts, ...otherExts];
73
+ }
74
+ else {
75
+ // No framework specified - use default order (react first)
76
+ extensions = ALL_VIEW_EXTENSIONS;
77
+ }
78
+ // Try each extension
79
+ for (const extCandidate of extensions) {
80
+ const candidatePath = path.join(pageDir, `${baseName}.${extCandidate}`);
81
+ const fullPath = path.join(projectPath, candidatePath);
82
+ if (fs.existsSync(fullPath)) {
83
+ return candidatePath;
84
+ }
85
+ }
86
+ return null;
87
+ }
33
88
  /**
34
89
  * Validate page structure
35
90
  */
@@ -1 +1 @@
1
- {"version":3,"file":"page.js","sourceRoot":"","sources":["../../../../src/builder/core/utils/page.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,MAAM,SAAS,GAAG,IAAI,SAAS,EAAE,CAAC;AAElC;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,IAAU,EAAE,SAAoB;IAC3D,IAAI,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,SAAS,CAAC,YAAY,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC7D,IAAI,MAAM,EAAE,sBAAsB,EAAE,CAAC;YACnC,OAAO,MAAM,CAAC,sBAAsB,CAAC;QACvC,CAAC;IACH,CAAC;IAED,wBAAwB;IACxB,MAAM,QAAQ,GAAG,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClD,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC9D,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,QAAgB;IAC7C,MAAM,GAAG,GAAG,SAAS,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;IAE7C,QAAQ,GAAG,EAAE,CAAC;QACZ,KAAK,KAAK,CAAC;QACX,KAAK,KAAK;YACR,OAAO,OAAO,CAAC;QACjB,KAAK,KAAK;YACR,OAAO,KAAK,CAAC;QACf,KAAK,MAAM,CAAC;QACZ;YACE,OAAO,MAAM,CAAC;IAClB,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAAU,EAAE,SAAoB;IACpE,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QAC3B,MAAM,CAAC,IAAI,CAAC,wBAAwB,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IACnD,CAAC;IAED,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QAC7B,MAAM,CAAC,IAAI,CAAC,0CAA0C,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IACrE,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"page.js","sourceRoot":"","sources":["../../../../src/builder/core/utils/page.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- export { buildCommand } from './commands/build.js';
1
+ export { buildCommand } from "./commands/build.js";
2
2
  //# sourceMappingURL=index.d.ts.map
@@ -1,2 +1,2 @@
1
- export { buildCommand } from './commands/build.js';
1
+ export { buildCommand } from "./commands/build.js";
2
2
  //# sourceMappingURL=index.js.map
@@ -1,7 +1,7 @@
1
1
  export interface PageConfig {
2
2
  navigationBarTitleText?: string;
3
3
  navigationBarBackgroundColor?: string;
4
- navigationBarTextStyle?: 'black' | 'white';
4
+ navigationBarTextStyle?: "black" | "white";
5
5
  backgroundColor?: string;
6
6
  enablePullDownRefresh?: boolean;
7
7
  onReachBottomDistance?: number;
@@ -10,7 +10,7 @@ export interface PageFiles {
10
10
  view: {
11
11
  path: string;
12
12
  exists: boolean;
13
- type: 'html' | 'react' | 'vue';
13
+ type: "html" | "react" | "vue";
14
14
  };
15
15
  logic: {
16
16
  path: string;
@@ -29,13 +29,14 @@ export interface PageFiles {
29
29
  export interface Page {
30
30
  path: string;
31
31
  name: string;
32
- type: 'html' | 'react' | 'vue';
32
+ type: "html" | "react" | "vue";
33
33
  }
34
+ export type FrameworkType = "react" | "vue" | "html";
34
35
  export interface BuildOptions {
35
- dev?: boolean;
36
- prod?: boolean;
37
- plugin?: boolean;
36
+ release?: boolean;
38
37
  target?: string;
38
+ framework?: FrameworkType;
39
+ minify?: boolean;
39
40
  }
40
41
  export interface LxPluginConfig {
41
42
  lxPluginId: string;