@lingxia/cli 0.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (163) hide show
  1. package/bin/lingxia.js +91 -0
  2. package/dist/builder/commands/build.d.ts +3 -0
  3. package/dist/builder/commands/build.d.ts.map +1 -0
  4. package/dist/builder/commands/build.js +317 -0
  5. package/dist/builder/commands/build.js.map +1 -0
  6. package/dist/builder/core/builders/logic.d.ts +48 -0
  7. package/dist/builder/core/builders/logic.d.ts.map +1 -0
  8. package/dist/builder/core/builders/logic.js +212 -0
  9. package/dist/builder/core/builders/logic.js.map +1 -0
  10. package/dist/builder/core/builders/page-functions.d.ts +2 -0
  11. package/dist/builder/core/builders/page-functions.d.ts.map +1 -0
  12. package/dist/builder/core/builders/page-functions.js +119 -0
  13. package/dist/builder/core/builders/page-functions.js.map +1 -0
  14. package/dist/builder/core/builders/page-path-injector.d.ts +5 -0
  15. package/dist/builder/core/builders/page-path-injector.d.ts.map +1 -0
  16. package/dist/builder/core/builders/page-path-injector.js +94 -0
  17. package/dist/builder/core/builders/page-path-injector.js.map +1 -0
  18. package/dist/builder/core/builders/page.d.ts +37 -0
  19. package/dist/builder/core/builders/page.d.ts.map +1 -0
  20. package/dist/builder/core/builders/page.js +246 -0
  21. package/dist/builder/core/builders/page.js.map +1 -0
  22. package/dist/builder/core/builders/view.d.ts +23 -0
  23. package/dist/builder/core/builders/view.d.ts.map +1 -0
  24. package/dist/builder/core/builders/view.js +194 -0
  25. package/dist/builder/core/builders/view.js.map +1 -0
  26. package/dist/builder/core/config/alias-config.d.ts +4 -0
  27. package/dist/builder/core/config/alias-config.d.ts.map +1 -0
  28. package/dist/builder/core/config/alias-config.js +29 -0
  29. package/dist/builder/core/config/alias-config.js.map +1 -0
  30. package/dist/builder/core/config/build-config.d.ts +8 -0
  31. package/dist/builder/core/config/build-config.d.ts.map +1 -0
  32. package/dist/builder/core/config/build-config.js +33 -0
  33. package/dist/builder/core/config/build-config.js.map +1 -0
  34. package/dist/builder/core/config/framework.d.ts +3 -0
  35. package/dist/builder/core/config/framework.d.ts.map +1 -0
  36. package/dist/builder/core/config/framework.js +51 -0
  37. package/dist/builder/core/config/framework.js.map +1 -0
  38. package/dist/builder/core/config/lingxia-config.d.ts +55 -0
  39. package/dist/builder/core/config/lingxia-config.d.ts.map +1 -0
  40. package/dist/builder/core/config/lingxia-config.js +174 -0
  41. package/dist/builder/core/config/lingxia-config.js.map +1 -0
  42. package/dist/builder/core/config/view-build-schema.d.ts +17 -0
  43. package/dist/builder/core/config/view-build-schema.d.ts.map +1 -0
  44. package/dist/builder/core/config/view-build-schema.js +2 -0
  45. package/dist/builder/core/config/view-build-schema.js.map +1 -0
  46. package/dist/builder/core/config/view-config.d.ts +11 -0
  47. package/dist/builder/core/config/view-config.d.ts.map +1 -0
  48. package/dist/builder/core/config/view-config.js +79 -0
  49. package/dist/builder/core/config/view-config.js.map +1 -0
  50. package/dist/builder/core/config.d.ts +34 -0
  51. package/dist/builder/core/config.d.ts.map +1 -0
  52. package/dist/builder/core/config.js +73 -0
  53. package/dist/builder/core/config.js.map +1 -0
  54. package/dist/builder/core/constants/source-dirs.d.ts +4 -0
  55. package/dist/builder/core/constants/source-dirs.d.ts.map +1 -0
  56. package/dist/builder/core/constants/source-dirs.js +24 -0
  57. package/dist/builder/core/constants/source-dirs.js.map +1 -0
  58. package/dist/builder/core/constants/static-dirs.d.ts +4 -0
  59. package/dist/builder/core/constants/static-dirs.d.ts.map +1 -0
  60. package/dist/builder/core/constants/static-dirs.js +51 -0
  61. package/dist/builder/core/constants/static-dirs.js.map +1 -0
  62. package/dist/builder/core/frameworks/base.d.ts +49 -0
  63. package/dist/builder/core/frameworks/base.d.ts.map +1 -0
  64. package/dist/builder/core/frameworks/base.js +61 -0
  65. package/dist/builder/core/frameworks/base.js.map +1 -0
  66. package/dist/builder/core/frameworks/factory.d.ts +29 -0
  67. package/dist/builder/core/frameworks/factory.d.ts.map +1 -0
  68. package/dist/builder/core/frameworks/factory.js +59 -0
  69. package/dist/builder/core/frameworks/factory.js.map +1 -0
  70. package/dist/builder/core/frameworks/html.d.ts +30 -0
  71. package/dist/builder/core/frameworks/html.d.ts.map +1 -0
  72. package/dist/builder/core/frameworks/html.js +92 -0
  73. package/dist/builder/core/frameworks/html.js.map +1 -0
  74. package/dist/builder/core/frameworks/react.d.ts +33 -0
  75. package/dist/builder/core/frameworks/react.d.ts.map +1 -0
  76. package/dist/builder/core/frameworks/react.js +161 -0
  77. package/dist/builder/core/frameworks/react.js.map +1 -0
  78. package/dist/builder/core/frameworks/templates.d.ts +2 -0
  79. package/dist/builder/core/frameworks/templates.d.ts.map +1 -0
  80. package/dist/builder/core/frameworks/templates.js +3 -0
  81. package/dist/builder/core/frameworks/templates.js.map +1 -0
  82. package/dist/builder/core/frameworks/vue.d.ts +33 -0
  83. package/dist/builder/core/frameworks/vue.d.ts.map +1 -0
  84. package/dist/builder/core/frameworks/vue.js +161 -0
  85. package/dist/builder/core/frameworks/vue.js.map +1 -0
  86. package/dist/builder/core/registry.d.ts +43 -0
  87. package/dist/builder/core/registry.d.ts.map +1 -0
  88. package/dist/builder/core/registry.js +79 -0
  89. package/dist/builder/core/registry.js.map +1 -0
  90. package/dist/builder/core/template.d.ts +7 -0
  91. package/dist/builder/core/template.d.ts.map +1 -0
  92. package/dist/builder/core/template.js +57 -0
  93. package/dist/builder/core/template.js.map +1 -0
  94. package/dist/builder/core/templates/embedded.d.ts +17 -0
  95. package/dist/builder/core/templates/embedded.d.ts.map +1 -0
  96. package/dist/builder/core/templates/embedded.js +121 -0
  97. package/dist/builder/core/templates/embedded.js.map +1 -0
  98. package/dist/builder/core/utils/file.d.ts +35 -0
  99. package/dist/builder/core/utils/file.d.ts.map +1 -0
  100. package/dist/builder/core/utils/file.js +99 -0
  101. package/dist/builder/core/utils/file.js.map +1 -0
  102. package/dist/builder/core/utils/page.d.ts +14 -0
  103. package/dist/builder/core/utils/page.d.ts.map +1 -0
  104. package/dist/builder/core/utils/page.js +46 -0
  105. package/dist/builder/core/utils/page.js.map +1 -0
  106. package/dist/builder/index.d.ts +2 -0
  107. package/dist/builder/index.d.ts.map +1 -0
  108. package/dist/builder/index.js +2 -0
  109. package/dist/builder/index.js.map +1 -0
  110. package/dist/builder/types/index.d.ts +67 -0
  111. package/dist/builder/types/index.d.ts.map +1 -0
  112. package/dist/builder/types/index.js +2 -0
  113. package/dist/builder/types/index.js.map +1 -0
  114. package/dist/commands/create.d.ts +7 -0
  115. package/dist/commands/create.d.ts.map +1 -0
  116. package/dist/commands/create.js +151 -0
  117. package/dist/commands/create.js.map +1 -0
  118. package/dist/index.d.ts +2 -0
  119. package/dist/index.d.ts.map +1 -0
  120. package/dist/index.js +45 -0
  121. package/dist/index.js.map +1 -0
  122. package/package.json +49 -0
  123. package/scripts/ensure-deps.cjs +54 -0
  124. package/scripts/install.cjs +62 -0
  125. package/scripts/set-version.cjs +34 -0
  126. package/scripts/sync-templates.cjs +36 -0
  127. package/templates/android-native/app/build.gradle.kts +48 -0
  128. package/templates/android-native/app/proguard-rules.pro +21 -0
  129. package/templates/android-native/app/src/main/AndroidManifest.xml +21 -0
  130. package/templates/android-native/app/src/main/java/MainActivity.kt +27 -0
  131. package/templates/android-native/app/src/main/res/values/strings.xml +3 -0
  132. package/templates/android-native/build.gradle.kts +5 -0
  133. package/templates/android-native/gradle/libs.versions.toml +16 -0
  134. package/templates/android-native/gradle/wrapper/gradle-wrapper.jar +0 -0
  135. package/templates/android-native/gradle/wrapper/gradle-wrapper.properties +6 -0
  136. package/templates/android-native/gradle.properties +4 -0
  137. package/templates/android-native/gradlew +185 -0
  138. package/templates/android-native/gradlew.bat +89 -0
  139. package/templates/android-native/settings.gradle.kts +25 -0
  140. package/templates/lxapp-create/react/lxapp.config.json +8 -0
  141. package/templates/lxapp-create/react/lxapp.json +8 -0
  142. package/templates/lxapp-create/react/lxapp.ts +8 -0
  143. package/templates/lxapp-create/react/package.json +26 -0
  144. package/templates/lxapp-create/react/pages/home/index.json +3 -0
  145. package/templates/lxapp-create/react/pages/home/index.ts +14 -0
  146. package/templates/lxapp-create/react/pages/home/index.tsx +60 -0
  147. package/templates/lxapp-create/react/public/.gitkeep +0 -0
  148. package/templates/lxapp-create/react/shared/.gitkeep +0 -0
  149. package/templates/lxapp-create/react/tsconfig.json +20 -0
  150. package/templates/lxapp-create/vue/lxapp.config.json +8 -0
  151. package/templates/lxapp-create/vue/lxapp.json +8 -0
  152. package/templates/lxapp-create/vue/lxapp.ts +8 -0
  153. package/templates/lxapp-create/vue/package.json +24 -0
  154. package/templates/lxapp-create/vue/pages/home/index.json +3 -0
  155. package/templates/lxapp-create/vue/pages/home/index.ts +14 -0
  156. package/templates/lxapp-create/vue/pages/home/index.vue +48 -0
  157. package/templates/lxapp-create/vue/public/.gitkeep +0 -0
  158. package/templates/lxapp-create/vue/shared/.gitkeep +0 -0
  159. package/templates/lxapp-create/vue/tsconfig.json +20 -0
  160. package/templates/rust-lib/Cargo.toml +13 -0
  161. package/templates/rust-lib/README.md +14 -0
  162. package/templates/rust-lib/src/lib.rs +13 -0
  163. package/vendor/.gitkeep +1 -0
@@ -0,0 +1,212 @@
1
+ import fs from 'fs';
2
+ import path from 'path';
3
+ import { FileUtils } from '../utils/file.js';
4
+ import { ConfigManager } from '../config.js';
5
+ import { injectPagePath } from './page-path-injector.js';
6
+ import { DEFAULT_SOURCE_DIRS, resolveSourceDirs } from '../constants/source-dirs.js';
7
+ import { resolveAliasMap } from '../config/alias-config.js';
8
+ /**
9
+ * Modern LogicBuilder that leverages Vite for dependency resolution and bundling
10
+ */
11
+ export class LogicBuilder {
12
+ projectPath;
13
+ outputDir;
14
+ fileUtils;
15
+ configManager;
16
+ alias;
17
+ sourceDirs;
18
+ isPlugin;
19
+ pluginId;
20
+ constructor(projectPath, outputDir, pluginId, buildConfig) {
21
+ this.projectPath = projectPath;
22
+ this.outputDir = outputDir;
23
+ this.fileUtils = new FileUtils();
24
+ this.configManager = new ConfigManager(projectPath);
25
+ this.alias = resolveAliasMap(projectPath, buildConfig);
26
+ this.sourceDirs =
27
+ resolveSourceDirs(projectPath, buildConfig) ?? DEFAULT_SOURCE_DIRS;
28
+ this.isPlugin = pluginId !== undefined;
29
+ this.pluginId = pluginId;
30
+ }
31
+ async buildLogic(options = {}) {
32
+ // Get page configurations from ConfigManager
33
+ const pages = this.configManager.getPages({ plugin: this.isPlugin });
34
+ const logicFiles = this.discoverLogicFiles(pages);
35
+ if (logicFiles.length === 0) {
36
+ return;
37
+ }
38
+ // Use Vite to build logic layer with proper dependency resolution
39
+ await this.buildLogicWithVite(logicFiles, pages, options);
40
+ }
41
+ /**
42
+ * Discover logic files based on pages configuration
43
+ */
44
+ discoverLogicFiles(pages) {
45
+ const logicFiles = [];
46
+ // Add lxapp.js or lxapp.ts if it exists
47
+ const lxappJsPath = path.join(this.projectPath, 'lxapp.js');
48
+ const lxappTsPath = path.join(this.projectPath, 'lxapp.ts');
49
+ if (fs.existsSync(lxappTsPath)) {
50
+ logicFiles.push(lxappTsPath);
51
+ }
52
+ else if (fs.existsSync(lxappJsPath)) {
53
+ logicFiles.push(lxappJsPath);
54
+ }
55
+ // Process each page path
56
+ for (const pagePath of pages) {
57
+ // Remove extension and try .js and .ts
58
+ const basePath = path.join(this.projectPath, pagePath.replace(/\.[^.]+$/, ''));
59
+ // Check which logic file exists
60
+ const jsPath = `${basePath}.js`;
61
+ const tsPath = `${basePath}.ts`;
62
+ if (fs.existsSync(jsPath)) {
63
+ logicFiles.push(jsPath);
64
+ }
65
+ else if (fs.existsSync(tsPath)) {
66
+ logicFiles.push(tsPath);
67
+ }
68
+ }
69
+ return logicFiles;
70
+ }
71
+ /**
72
+ * Build logic layer using Vite for proper dependency resolution
73
+ */
74
+ async buildLogicWithVite(logicFiles, pages, options = {}) {
75
+ const buildDir = path.join(this.projectPath, '.lingxia-build', 'logic');
76
+ // Always clean build directory
77
+ this.fileUtils.cleanDirectory(buildDir);
78
+ await this.copySourceDirectories(buildDir);
79
+ // Create entry file that imports all logic files
80
+ const entryContent = this.createLogicEntry(logicFiles, pages);
81
+ fs.writeFileSync(path.join(buildDir, 'main.js'), entryContent);
82
+ // Copy lxapp file so entry import resolves correctly
83
+ this.copyLxappFile(logicFiles, buildDir);
84
+ // Build with bundled Vite
85
+ await this.runViteLogicBuild(buildDir, options);
86
+ // Copy built logic.js to output
87
+ const builtLogicPath = path.join(buildDir, 'dist', 'main.iife.js');
88
+ const outputPath = path.join(this.outputDir, 'logic.js');
89
+ fs.copyFileSync(builtLogicPath, outputPath);
90
+ }
91
+ /**
92
+ * Create entry file that imports all logic files
93
+ */
94
+ createLogicEntry(logicFiles, pages) {
95
+ const imports = [];
96
+ for (let i = 0; i < logicFiles.length; i++) {
97
+ const logicFile = logicFiles[i];
98
+ const fileName = path.basename(logicFile);
99
+ // Process the logic file to add path parameter to Page calls
100
+ if (fileName !== 'lxapp.js' && fileName !== 'lxapp.ts') {
101
+ const pagePath = this.getPagePathFromConfig(logicFile, pages);
102
+ const importPath = this.processLogicFileForPath(logicFile, pagePath);
103
+ imports.push(`import './${importPath}';`);
104
+ }
105
+ else {
106
+ // For lxapp files, import as-is
107
+ const relativePath = `./${fileName}`;
108
+ imports.push(`import '${relativePath}';`);
109
+ }
110
+ }
111
+ return imports.join('\n');
112
+ }
113
+ /**
114
+ * Process logic file to add path parameter to Page calls
115
+ */
116
+ processLogicFileForPath(sourceFile, pagePath) {
117
+ const buildDir = path.join(this.projectPath, '.lingxia-build', 'logic');
118
+ const relativeDir = path.dirname(path.relative(this.projectPath, sourceFile));
119
+ const destDir = relativeDir && relativeDir !== '.'
120
+ ? path.join(buildDir, relativeDir)
121
+ : buildDir;
122
+ this.fileUtils.ensureDirectory(destDir);
123
+ const ext = path.extname(sourceFile);
124
+ const targetBase = `${path.basename(sourceFile, ext)}_processed${ext}`;
125
+ const targetPath = path.join(destDir, targetBase);
126
+ const content = fs.readFileSync(sourceFile, 'utf-8');
127
+ const transformedContent = injectPagePath(content, pagePath, {
128
+ pluginId: this.pluginId
129
+ });
130
+ fs.writeFileSync(targetPath, transformedContent);
131
+ const posixDir = relativeDir && relativeDir !== '.'
132
+ ? relativeDir.split(path.sep).join('/')
133
+ : '';
134
+ return posixDir ? `${posixDir}/${targetBase}` : targetBase;
135
+ }
136
+ /**
137
+ * Get page path from pages configuration
138
+ */
139
+ getPagePathFromConfig(logicFilePath, pages) {
140
+ // Extract the directory and filename from the logic file path
141
+ const relativePath = path.relative(this.projectPath, logicFilePath);
142
+ const logicDir = path.dirname(relativePath);
143
+ const logicBaseName = path.basename(logicFilePath, path.extname(logicFilePath));
144
+ // Find the page path that corresponds to this logic file
145
+ for (const pagePath of pages) {
146
+ const pageDir = path.dirname(pagePath);
147
+ const pageBaseName = path.basename(pagePath, path.extname(pagePath));
148
+ // Check if this logic file corresponds to this page
149
+ // Both directory and base name should match
150
+ if (pageDir === logicDir && pageBaseName === logicBaseName) {
151
+ return pagePath;
152
+ }
153
+ }
154
+ // Fallback - this shouldn't happen if lxapp.json is correct
155
+ return `${logicBaseName}.html`;
156
+ }
157
+ /**
158
+ * Create Vite config for logic build using TemplateManager
159
+ */
160
+ /**
161
+ * Copy lxapp.js/ts to build directory so entry import works.
162
+ * Other page files are referenced through their processed copies.
163
+ */
164
+ copyLxappFile(logicFiles, buildDir) {
165
+ const lxappFile = logicFiles.find(file => {
166
+ const base = path.basename(file).toLowerCase();
167
+ return base === 'lxapp.js' || base === 'lxapp.ts';
168
+ });
169
+ if (!lxappFile) {
170
+ return;
171
+ }
172
+ const fileName = path.basename(lxappFile);
173
+ const destPath = path.join(buildDir, fileName);
174
+ fs.copyFileSync(lxappFile, destPath);
175
+ }
176
+ async copySourceDirectories(buildDir) {
177
+ for (const dir of this.sourceDirs) {
178
+ const srcDir = path.join(this.projectPath, dir);
179
+ if (fs.existsSync(srcDir)) {
180
+ const destDir = path.join(buildDir, dir);
181
+ await this.fileUtils.copyDirectory(srcDir, destDir);
182
+ }
183
+ }
184
+ }
185
+ async runViteLogicBuild(buildDir, options = {}) {
186
+ const { build } = await import('vite');
187
+ const isDev = Boolean(options.dev);
188
+ const isProd = Boolean(options.prod);
189
+ await build({
190
+ configFile: false,
191
+ root: buildDir,
192
+ logLevel: 'warn',
193
+ mode: isDev ? 'development' : isProd ? 'production' : undefined,
194
+ resolve: {
195
+ alias: this.alias
196
+ },
197
+ build: {
198
+ lib: {
199
+ entry: path.join(buildDir, 'main.js'),
200
+ name: 'LingXiaLogic',
201
+ fileName: 'main',
202
+ formats: ['iife']
203
+ },
204
+ outDir: path.join(buildDir, 'dist'),
205
+ emptyOutDir: true,
206
+ minify: isProd ? 'esbuild' : false,
207
+ sourcemap: isDev
208
+ }
209
+ });
210
+ }
211
+ }
212
+ //# sourceMappingURL=logic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logic.js","sourceRoot":"","sources":["../../../../src/builder/core/builders/logic.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare const extractPageFunctionsFromSource: (logicContent: string) => string[];
2
+ //# sourceMappingURL=page-functions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page-functions.d.ts","sourceRoot":"","sources":["../../../../src/builder/core/builders/page-functions.ts"],"names":[],"mappings":"AAmBA,eAAO,MAAM,8BAA8B,GAAI,cAAc,MAAM,KAAG,MAAM,EAgB3E,CAAC"}
@@ -0,0 +1,119 @@
1
+ import { parse } from '@babel/parser';
2
+ const LIFECYCLE_FUNCTIONS = new Set(['onLoad', 'onShow', 'onHide', 'onUnload', 'onReady']);
3
+ const AST_PARSE_OPTIONS = {
4
+ sourceType: 'module',
5
+ plugins: [
6
+ 'typescript',
7
+ 'jsx',
8
+ 'classProperties',
9
+ 'decorators-legacy',
10
+ 'dynamicImport',
11
+ 'objectRestSpread',
12
+ 'optionalChaining',
13
+ 'nullishCoalescingOperator',
14
+ 'topLevelAwait'
15
+ ]
16
+ };
17
+ export const extractPageFunctionsFromSource = (logicContent) => {
18
+ const ast = parse(logicContent, AST_PARSE_OPTIONS);
19
+ const functions = new Set();
20
+ traverseAst(ast.program, node => {
21
+ if (!isPageCall(node)) {
22
+ return;
23
+ }
24
+ const firstArg = unwrapExpression(node.arguments?.[0]);
25
+ if (firstArg?.type === 'ObjectExpression') {
26
+ collectFunctionsFromObject(firstArg, functions);
27
+ }
28
+ });
29
+ return Array.from(functions).filter(func => !LIFECYCLE_FUNCTIONS.has(func));
30
+ };
31
+ const traverseAst = (node, visitor) => {
32
+ if (!node || typeof node.type !== 'string') {
33
+ return;
34
+ }
35
+ visitor(node);
36
+ for (const value of Object.values(node)) {
37
+ if (!value)
38
+ continue;
39
+ if (Array.isArray(value)) {
40
+ for (const child of value) {
41
+ if (child && typeof child.type === 'string') {
42
+ traverseAst(child, visitor);
43
+ }
44
+ }
45
+ continue;
46
+ }
47
+ if (value && typeof value.type === 'string') {
48
+ traverseAst(value, visitor);
49
+ }
50
+ }
51
+ };
52
+ const isPageCall = (node) => {
53
+ if (node.type !== 'CallExpression') {
54
+ return false;
55
+ }
56
+ const callee = node.callee;
57
+ return Boolean(callee && callee.type === 'Identifier' && callee.name === 'Page');
58
+ };
59
+ const unwrapExpression = (node) => {
60
+ let current = node ?? null;
61
+ while (current) {
62
+ if (current.type === 'SpreadElement') {
63
+ return null;
64
+ }
65
+ if (current.type === 'TSAsExpression' ||
66
+ current.type === 'TSTypeAssertion' ||
67
+ current.type === 'TSNonNullExpression' ||
68
+ current.type === 'TypeCastExpression') {
69
+ current = current.expression;
70
+ continue;
71
+ }
72
+ if (current.type === 'ParenthesizedExpression') {
73
+ current = current.expression;
74
+ continue;
75
+ }
76
+ break;
77
+ }
78
+ return current;
79
+ };
80
+ const collectFunctionsFromObject = (node, functions) => {
81
+ for (const prop of node.properties ?? []) {
82
+ if (!prop) {
83
+ continue;
84
+ }
85
+ if (prop.type === 'SpreadElement') {
86
+ continue;
87
+ }
88
+ const name = getPropertyName(prop.key);
89
+ if (!name || name.startsWith('_')) {
90
+ continue;
91
+ }
92
+ if (prop.type === 'ObjectMethod') {
93
+ functions.add(name);
94
+ continue;
95
+ }
96
+ if (prop.type === 'ObjectProperty') {
97
+ const valueNode = unwrapExpression(prop.value);
98
+ if (valueNode && (valueNode.type === 'FunctionExpression' || valueNode.type === 'ArrowFunctionExpression')) {
99
+ functions.add(name);
100
+ }
101
+ }
102
+ }
103
+ };
104
+ const getPropertyName = (key) => {
105
+ if (!key) {
106
+ return null;
107
+ }
108
+ if (key.type === 'Identifier') {
109
+ return key.name;
110
+ }
111
+ if (key.type === 'StringLiteral') {
112
+ return key.value;
113
+ }
114
+ if (key.type === 'NumericLiteral') {
115
+ return String(key.value);
116
+ }
117
+ return null;
118
+ };
119
+ //# sourceMappingURL=page-functions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page-functions.js","sourceRoot":"","sources":["../../../../src/builder/core/builders/page-functions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export interface InjectPagePathOptions {
2
+ pluginId?: string;
3
+ }
4
+ export declare const injectPagePath: (logicContent: string, pagePath: string, options?: InjectPagePathOptions) => string;
5
+ //# sourceMappingURL=page-path-injector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page-path-injector.d.ts","sourceRoot":"","sources":["../../../../src/builder/core/builders/page-path-injector.ts"],"names":[],"mappings":"AAkBA,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,eAAO,MAAM,cAAc,GACzB,cAAc,MAAM,EACpB,UAAU,MAAM,EAChB,UAAU,qBAAqB,KAC9B,MAgCF,CAAC"}
@@ -0,0 +1,94 @@
1
+ import { parse } from '@babel/parser';
2
+ import { generate } from '@babel/generator';
3
+ const AST_PARSE_OPTIONS = {
4
+ sourceType: 'module',
5
+ plugins: [
6
+ 'typescript',
7
+ 'jsx',
8
+ 'classProperties',
9
+ 'decorators-legacy',
10
+ 'dynamicImport',
11
+ 'objectRestSpread',
12
+ 'optionalChaining',
13
+ 'nullishCoalescingOperator',
14
+ 'topLevelAwait'
15
+ ]
16
+ };
17
+ export const injectPagePath = (logicContent, pagePath, options) => {
18
+ // Add plugin/<pluginId>/ prefix for plugin mode
19
+ const finalPath = options?.pluginId
20
+ ? `plugin/${options.pluginId}/${pagePath}`
21
+ : pagePath;
22
+ const ast = parse(logicContent, AST_PARSE_OPTIONS);
23
+ let modified = false;
24
+ traverseAst(ast.program, node => {
25
+ if (!isPageCall(node)) {
26
+ return;
27
+ }
28
+ const args = node.arguments ?? [];
29
+ if (args.length >= 2) {
30
+ return;
31
+ }
32
+ const firstArg = unwrapExpression(args[0]);
33
+ if (!firstArg || firstArg.type !== 'ObjectExpression') {
34
+ return;
35
+ }
36
+ node.arguments = [...args, stringLiteral(finalPath)];
37
+ modified = true;
38
+ });
39
+ if (!modified) {
40
+ return logicContent;
41
+ }
42
+ return generate(ast, { retainLines: true }).code;
43
+ };
44
+ const traverseAst = (node, visitor) => {
45
+ if (!node || typeof node.type !== 'string') {
46
+ return;
47
+ }
48
+ visitor(node);
49
+ for (const value of Object.values(node)) {
50
+ if (!value)
51
+ continue;
52
+ if (Array.isArray(value)) {
53
+ for (const child of value) {
54
+ if (child && typeof child.type === 'string') {
55
+ traverseAst(child, visitor);
56
+ }
57
+ }
58
+ continue;
59
+ }
60
+ if (value && typeof value.type === 'string') {
61
+ traverseAst(value, visitor);
62
+ }
63
+ }
64
+ };
65
+ const isPageCall = (node) => {
66
+ if (node.type !== 'CallExpression') {
67
+ return false;
68
+ }
69
+ const callee = node.callee;
70
+ return Boolean(callee && callee.type === 'Identifier' && callee.name === 'Page');
71
+ };
72
+ const unwrapExpression = (node) => {
73
+ let current = node ?? null;
74
+ while (current) {
75
+ if (current.type === 'TSAsExpression' ||
76
+ current.type === 'TSTypeAssertion' ||
77
+ current.type === 'TSNonNullExpression' ||
78
+ current.type === 'TypeCastExpression') {
79
+ current = current.expression;
80
+ continue;
81
+ }
82
+ if (current.type === 'ParenthesizedExpression') {
83
+ current = current.expression;
84
+ continue;
85
+ }
86
+ break;
87
+ }
88
+ return current;
89
+ };
90
+ const stringLiteral = (value) => ({
91
+ type: 'StringLiteral',
92
+ value
93
+ });
94
+ //# sourceMappingURL=page-path-injector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page-path-injector.js","sourceRoot":"","sources":["../../../../src/builder/core/builders/page-path-injector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ import type { BuildOptions, Page, PageFiles } from '../../types/index.js';
2
+ import type { BuildConfig } from '../config/build-config.js';
3
+ export declare class PageProcessor {
4
+ private projectPath;
5
+ private outputDir;
6
+ private fileUtils;
7
+ private templateManager;
8
+ private viewConfigManager;
9
+ private staticDirs;
10
+ private alias;
11
+ private sourceDirs;
12
+ private pluginSpecs?;
13
+ private projectRequire;
14
+ private framework;
15
+ constructor(projectPath: string, outputDir: string, staticDirs?: string[], buildConfig?: BuildConfig);
16
+ /**
17
+ * Batch build multiple pages for a single framework using Vite multi-entry.
18
+ * Writes a dedicated multi-entry vite.config.js (no framework API changes),
19
+ * installs once, builds once, then normalizes per-entry to existing processor
20
+ * expectations by temporarily mapping <entry>.html/js to index.html/main.js.
21
+ */
22
+ buildPagesBatch(framework: 'react' | 'vue', items: {
23
+ page: Page;
24
+ pageFiles: PageFiles;
25
+ pageFunctions: string[];
26
+ }[], options?: BuildOptions): Promise<void>;
27
+ private runViteBuild;
28
+ private resolveFrameworkPlugins;
29
+ private createCssConfig;
30
+ private copySourceDirectories;
31
+ private copyStaticDirectories;
32
+ private loadUserPlugins;
33
+ private instantiatePlugin;
34
+ private resolveModulePath;
35
+ private createProjectRequire;
36
+ }
37
+ //# sourceMappingURL=page.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page.d.ts","sourceRoot":"","sources":["../../../../src/builder/core/builders/page.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAwB1E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAE7D,qBAAa,aAAa;IACxB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,iBAAiB,CAAoB;IAC7C,OAAO,CAAC,UAAU,CAAW;IAC7B,OAAO,CAAC,KAAK,CAAyB;IACtC,OAAO,CAAC,UAAU,CAAW;IAC7B,OAAO,CAAC,WAAW,CAAC,CAA2D;IAC/E,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,SAAS,CAAmB;gBAGlC,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,UAAU,GAAE,MAAM,EAAwB,EAC1C,WAAW,CAAC,EAAE,WAAW;IA4B3B;;;;;OAKG;IACG,eAAe,CACnB,SAAS,EAAE,OAAO,GAAG,KAAK,EAC1B,KAAK,EAAE;QAAE,IAAI,EAAE,IAAI,CAAC;QAAC,SAAS,EAAE,SAAS,CAAC;QAAC,aAAa,EAAE,MAAM,EAAE,CAAA;KAAE,EAAE,EACtE,OAAO,GAAE,YAAiB,GACzB,OAAO,CAAC,IAAI,CAAC;YA0FF,YAAY;YA8CZ,uBAAuB;YAsBvB,eAAe;YAUf,qBAAqB;YAUrB,qBAAqB;YAUrB,eAAe;YAiBf,iBAAiB;IAe/B,OAAO,CAAC,iBAAiB;IAUzB,OAAO,CAAC,oBAAoB;CAe7B"}