@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,51 @@
1
+ import fs from 'fs';
2
+ import path from 'path';
3
+ export function readProjectFramework(projectPath) {
4
+ const pkgPath = path.join(projectPath, 'package.json');
5
+ if (fs.existsSync(pkgPath)) {
6
+ try {
7
+ const packageJson = JSON.parse(fs.readFileSync(pkgPath, 'utf-8'));
8
+ const framework = packageJson?.lingxia?.framework;
9
+ if (framework === 'react' || framework === 'vue') {
10
+ return framework;
11
+ }
12
+ }
13
+ catch {
14
+ // ignore
15
+ }
16
+ }
17
+ const detected = detectFrameworkFromPages(projectPath);
18
+ if (detected)
19
+ return detected;
20
+ throw new Error(`Cannot determine Lingxia project framework. Please rerun ` +
21
+ `'lingxia create' or add {"lingxia":{"framework":"react|vue"}} to package.json.`);
22
+ }
23
+ function detectFrameworkFromPages(projectPath) {
24
+ const pagesDir = path.join(projectPath, 'pages');
25
+ if (!fs.existsSync(pagesDir)) {
26
+ return undefined;
27
+ }
28
+ const entries = fs.readdirSync(pagesDir, { withFileTypes: true });
29
+ for (const entry of entries) {
30
+ if (!entry.isDirectory())
31
+ continue;
32
+ const dir = path.join(pagesDir, entry.name);
33
+ const reactEntry = findFirstFileWithExt(dir, ['.tsx', '.jsx']);
34
+ if (reactEntry)
35
+ return 'react';
36
+ const vueEntry = findFirstFileWithExt(dir, ['.vue']);
37
+ if (vueEntry)
38
+ return 'vue';
39
+ }
40
+ return undefined;
41
+ }
42
+ function findFirstFileWithExt(dir, extensions) {
43
+ for (const ext of extensions) {
44
+ const candidate = path.join(dir, `index${ext}`);
45
+ if (fs.existsSync(candidate)) {
46
+ return candidate;
47
+ }
48
+ }
49
+ return undefined;
50
+ }
51
+ //# sourceMappingURL=framework.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"framework.js","sourceRoot":"","sources":["../../../../src/builder/core/config/framework.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AAIxB,MAAM,UAAU,oBAAoB,CAAC,WAAmB;IACtD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;IACvD,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3B,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;YAClE,MAAM,SAAS,GAAG,WAAW,EAAE,OAAO,EAAE,SAAS,CAAC;YAClD,IAAI,SAAS,KAAK,OAAO,IAAI,SAAS,KAAK,KAAK,EAAE,CAAC;gBACjD,OAAO,SAAS,CAAC;YACnB,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;IACH,CAAC;IAED,MAAM,QAAQ,GAAG,wBAAwB,CAAC,WAAW,CAAC,CAAC;IACvD,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAE9B,MAAM,IAAI,KAAK,CACb,2DAA2D;QACzD,gFAAgF,CACnF,CAAC;AACJ,CAAC;AAED,SAAS,wBAAwB,CAAC,WAAmB;IACnD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IACjD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,QAAQ,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IAClE,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;YAAE,SAAS;QACnC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAC5C,MAAM,UAAU,GAAG,oBAAoB,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;QAC/D,IAAI,UAAU;YAAE,OAAO,OAAO,CAAC;QAC/B,MAAM,QAAQ,GAAG,oBAAoB,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;QACrD,IAAI,QAAQ;YAAE,OAAO,KAAK,CAAC;IAC7B,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,oBAAoB,CAAC,GAAW,EAAE,UAAoB;IAC7D,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAC7B,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,GAAG,EAAE,CAAC,CAAC;QAChD,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC7B,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC"}
@@ -0,0 +1,55 @@
1
+ import type { ViewBuildConfig } from './view-build-schema.js';
2
+ export type FrameworkName = 'react' | 'vue';
3
+ export type PluginDescriptor = string | {
4
+ module: string;
5
+ namedExport?: string;
6
+ options?: any;
7
+ };
8
+ export type PluginEntry = PluginDescriptor | any;
9
+ export interface NormalizedPluginDescriptor {
10
+ module: string;
11
+ namedExport?: string;
12
+ options?: any;
13
+ }
14
+ export type NormalizedPluginSpec = (NormalizedPluginDescriptor & {
15
+ type?: 'descriptor';
16
+ }) | {
17
+ plugin: any;
18
+ module?: undefined;
19
+ };
20
+ export type PluginConfig = PluginEntry[] | Partial<Record<FrameworkName, PluginEntry[]>>;
21
+ export interface LingxiaConfig {
22
+ /**
23
+ * Static asset directories copied during build.
24
+ */
25
+ staticDirs?: string[];
26
+ /**
27
+ * Module path aliases shared across logic/view builds.
28
+ */
29
+ alias?: Record<string, string>;
30
+ /**
31
+ * Additional source directories copied into the view build workspace.
32
+ */
33
+ sourceDirs?: string[];
34
+ /**
35
+ * Framework-specific view build overrides.
36
+ */
37
+ view?: LingxiaViewConfigOverrides;
38
+ /**
39
+ * Additional Vite plugins per framework.
40
+ */
41
+ plugins?: PluginConfig;
42
+ /**
43
+ * Placeholder for future config surface so we don't need breaking changes.
44
+ */
45
+ [key: string]: unknown;
46
+ }
47
+ export type LingxiaViewConfigOverrides = Partial<Record<FrameworkName, Partial<ViewBuildConfig>>>;
48
+ export interface LingxiaConfigLoaderOptions {
49
+ filename?: string;
50
+ }
51
+ export declare function defineLingxiaConfig(config: LingxiaConfig): LingxiaConfig;
52
+ export declare function loadLingxiaConfig(projectPath: string, options?: LingxiaConfigLoaderOptions): LingxiaConfig | undefined;
53
+ export declare function extractViewOverrides(config: LingxiaConfig | undefined, framework?: FrameworkName): Partial<ViewBuildConfig> | undefined;
54
+ export declare function extractPluginSpecs(config?: LingxiaConfig): Partial<Record<FrameworkName, NormalizedPluginSpec[]>> | undefined;
55
+ //# sourceMappingURL=lingxia-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lingxia-config.d.ts","sourceRoot":"","sources":["../../../../src/builder/core/config/lingxia-config.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAE9D,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,KAAK,CAAC;AAE5C,MAAM,MAAM,gBAAgB,GACxB,MAAM,GACN;IACE,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,GAAG,CAAC;CACf,CAAC;AAEN,MAAM,MAAM,WAAW,GAAG,gBAAgB,GAAG,GAAG,CAAC;AAEjD,MAAM,WAAW,0BAA0B;IACzC,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,GAAG,CAAC;CACf;AAED,MAAM,MAAM,oBAAoB,GAC5B,CAAC,0BAA0B,GAAG;IAAE,IAAI,CAAC,EAAE,YAAY,CAAA;CAAE,CAAC,GACtD;IAAE,MAAM,EAAE,GAAG,CAAC;IAAC,MAAM,CAAC,EAAE,SAAS,CAAA;CAAE,CAAC;AAExC,MAAM,MAAM,YAAY,GACpB,WAAW,EAAE,GACb,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC;AAElD,MAAM,WAAW,aAAa;IAC5B;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB;;OAEG;IACH,IAAI,CAAC,EAAE,0BAA0B,CAAC;IAClC;;OAEG;IACH,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB;;OAEG;IACH,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,MAAM,0BAA0B,GAAG,OAAO,CAC9C,MAAM,CAAC,aAAa,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC,CAChD,CAAC;AAEF,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAKD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,aAAa,GAAG,aAAa,CAExE;AAED,wBAAgB,iBAAiB,CAC/B,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,0BAA0B,GACnC,aAAa,GAAG,SAAS,CAW3B;AAgFD,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,aAAa,GAAG,SAAS,EACjC,SAAS,CAAC,EAAE,aAAa,GACxB,OAAO,CAAC,eAAe,CAAC,GAAG,SAAS,CAqCtC;AAED,wBAAgB,kBAAkB,CAChC,MAAM,CAAC,EAAE,aAAa,GACrB,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,oBAAoB,EAAE,CAAC,CAAC,GAAG,SAAS,CAoEpE"}
@@ -0,0 +1,174 @@
1
+ import fs from 'fs';
2
+ import path from 'path';
3
+ import vm from 'vm';
4
+ import { createRequire } from 'module';
5
+ const DEFAULT_CONFIG_FILENAME = 'lingxia.config.ts';
6
+ const cliRequire = createRequire(import.meta.url);
7
+ export function defineLingxiaConfig(config) {
8
+ return config;
9
+ }
10
+ export function loadLingxiaConfig(projectPath, options) {
11
+ const configPath = path.join(projectPath, options?.filename ?? DEFAULT_CONFIG_FILENAME);
12
+ if (!fs.existsSync(configPath)) {
13
+ return undefined;
14
+ }
15
+ return readLingxiaTsConfig(configPath);
16
+ }
17
+ function readLingxiaTsConfig(filePath) {
18
+ try {
19
+ const source = fs.readFileSync(filePath, 'utf-8');
20
+ const ts = loadTypescriptCompiler();
21
+ const result = ts.transpileModule(source, {
22
+ compilerOptions: {
23
+ module: ts.ModuleKind.CommonJS,
24
+ target: ts.ScriptTarget.ES2019,
25
+ esModuleInterop: true
26
+ },
27
+ fileName: filePath,
28
+ reportDiagnostics: true
29
+ });
30
+ if (result.diagnostics?.length) {
31
+ const message = ts.formatDiagnosticsWithColorAndContext(result.diagnostics, {
32
+ getCanonicalFileName: f => f,
33
+ getCurrentDirectory: () => path.dirname(filePath),
34
+ getNewLine: () => '\n'
35
+ });
36
+ console.warn(`⚠️ Diagnostics while parsing ${filePath}:\n${message}`);
37
+ }
38
+ const exports = executeCommonJsModule(result.outputText, filePath);
39
+ const config = exports?.default ?? exports;
40
+ if (config && typeof config === 'object') {
41
+ return config;
42
+ }
43
+ return undefined;
44
+ }
45
+ catch (error) {
46
+ console.warn(`⚠️ Failed to read Lingxia config from ${filePath}:`, error instanceof Error ? error.message : String(error));
47
+ return undefined;
48
+ }
49
+ }
50
+ function executeCommonJsModule(code, filename) {
51
+ const module = { exports: {} };
52
+ const localRequire = createRequire(filename);
53
+ const context = {
54
+ module,
55
+ exports: module.exports,
56
+ require: localRequire,
57
+ __dirname: path.dirname(filename),
58
+ __filename: filename,
59
+ process,
60
+ console,
61
+ Buffer,
62
+ setTimeout,
63
+ clearTimeout,
64
+ setInterval,
65
+ clearInterval,
66
+ setImmediate,
67
+ clearImmediate
68
+ };
69
+ context.global = context;
70
+ context.globalThis = context;
71
+ vm.runInNewContext(code, context, { filename });
72
+ return module.exports;
73
+ }
74
+ function loadTypescriptCompiler() {
75
+ try {
76
+ return cliRequire('typescript');
77
+ }
78
+ catch {
79
+ throw new Error("Cannot load 'typescript'. Please add it as a dependency to use lingxia.config.ts files.");
80
+ }
81
+ }
82
+ export function extractViewOverrides(config, framework) {
83
+ const overrides = config?.view;
84
+ if (!overrides || typeof overrides !== 'object') {
85
+ return undefined;
86
+ }
87
+ const frameworks = ['react', 'vue'];
88
+ // Check if it has framework-specific keys (react, vue)
89
+ const hasFrameworkKeys = frameworks.some(fw => Object.prototype.hasOwnProperty.call(overrides, fw));
90
+ // If it has framework-specific keys and a framework is requested, return that framework's config
91
+ if (hasFrameworkKeys && framework) {
92
+ const targeted = overrides[framework];
93
+ if (targeted && typeof targeted === 'object') {
94
+ return targeted;
95
+ }
96
+ }
97
+ // If it doesn't have framework keys, treat it as a shared config for all frameworks
98
+ if (!hasFrameworkKeys) {
99
+ return overrides;
100
+ }
101
+ // Fallback: if framework is requested but not found, try to return the first available framework config
102
+ if (framework) {
103
+ for (const fw of frameworks) {
104
+ const block = overrides[fw];
105
+ if (block && typeof block === 'object') {
106
+ return block;
107
+ }
108
+ }
109
+ }
110
+ return undefined;
111
+ }
112
+ export function extractPluginSpecs(config) {
113
+ const pluginsConfig = config?.plugins;
114
+ if (!pluginsConfig) {
115
+ return undefined;
116
+ }
117
+ const frameworks = ['react', 'vue'];
118
+ const normalized = {};
119
+ let hasPlugins = false;
120
+ const collectEntries = (entries) => {
121
+ if (!entries || entries.length === 0)
122
+ return [];
123
+ const normalizedEntries = [];
124
+ for (const entry of entries) {
125
+ if (typeof entry === 'string') {
126
+ const trimmed = entry.trim();
127
+ if (trimmed.length > 0) {
128
+ normalizedEntries.push({ module: trimmed });
129
+ }
130
+ continue;
131
+ }
132
+ if (entry &&
133
+ typeof entry === 'object' &&
134
+ typeof entry.module === 'string') {
135
+ const moduleName = entry.module;
136
+ // Skip empty module names
137
+ if (moduleName.trim().length > 0) {
138
+ normalizedEntries.push({
139
+ module: moduleName,
140
+ namedExport: typeof entry.namedExport === 'string'
141
+ ? entry.namedExport
142
+ : undefined,
143
+ options: entry.options
144
+ });
145
+ }
146
+ continue;
147
+ }
148
+ if (entry !== undefined && entry !== null) {
149
+ normalizedEntries.push({ plugin: entry });
150
+ }
151
+ }
152
+ return normalizedEntries;
153
+ };
154
+ if (Array.isArray(pluginsConfig)) {
155
+ const sharedEntries = collectEntries(pluginsConfig);
156
+ if (sharedEntries.length > 0) {
157
+ for (const framework of frameworks) {
158
+ normalized[framework] = [...(normalized[framework] ?? []), ...sharedEntries];
159
+ }
160
+ hasPlugins = true;
161
+ }
162
+ }
163
+ else if (typeof pluginsConfig === 'object') {
164
+ for (const framework of frameworks) {
165
+ const entries = collectEntries(Array.isArray(pluginsConfig[framework]) ? pluginsConfig[framework] : undefined);
166
+ if (entries.length > 0) {
167
+ normalized[framework] = [...(normalized[framework] ?? []), ...entries];
168
+ hasPlugins = true;
169
+ }
170
+ }
171
+ }
172
+ return hasPlugins ? normalized : undefined;
173
+ }
174
+ //# sourceMappingURL=lingxia-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lingxia-config.js","sourceRoot":"","sources":["../../../../src/builder/core/config/lingxia-config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ export interface ViewBuildConfig {
2
+ output: {
3
+ multi: Record<string, unknown>;
4
+ };
5
+ assetDir: string;
6
+ cssCodeSplitMulti: boolean;
7
+ target?: string;
8
+ esbuild?: Record<string, unknown>;
9
+ minifyStrategy?: 'esbuild' | 'terser' | boolean;
10
+ resolvePlugins?: (framework: 'react' | 'vue') => Promise<any[]>;
11
+ cssConfig?: false | ((buildDir: string) => Promise<{
12
+ postcss?: {
13
+ plugins?: any[];
14
+ };
15
+ } | undefined | null>);
16
+ }
17
+ //# sourceMappingURL=view-build-schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"view-build-schema.d.ts","sourceRoot":"","sources":["../../../../src/builder/core/config/view-build-schema.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE;QACN,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KAChC,CAAC;IACF,QAAQ,EAAE,MAAM,CAAC;IACjB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,cAAc,CAAC,EAAE,SAAS,GAAG,QAAQ,GAAG,OAAO,CAAC;IAChD,cAAc,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,GAAG,KAAK,KAAK,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAChE,SAAS,CAAC,EACN,KAAK,GACL,CAAC,CACC,QAAQ,EAAE,MAAM,KACb,OAAO,CAAC;QAAE,OAAO,CAAC,EAAE;YAAE,OAAO,CAAC,EAAE,GAAG,EAAE,CAAA;SAAE,CAAA;KAAE,GAAG,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC;CACzE"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=view-build-schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"view-build-schema.js","sourceRoot":"","sources":["../../../../src/builder/core/config/view-build-schema.ts"],"names":[],"mappings":""}
@@ -0,0 +1,11 @@
1
+ import type { ViewBuildConfig } from './view-build-schema.js';
2
+ export declare const DEFAULT_ASSET_DIR = "assets";
3
+ import { type FrameworkName } from './lingxia-config.js';
4
+ export declare class ViewConfigManager {
5
+ private projectPath;
6
+ private overrides?;
7
+ constructor(projectPath: string, overrides?: Partial<ViewBuildConfig>);
8
+ getFrameworkConfig(framework: 'react' | 'vue'): ViewBuildConfig;
9
+ }
10
+ export declare function resolveUserViewConfig(projectPath: string, framework: FrameworkName): Partial<ViewBuildConfig> | undefined;
11
+ //# sourceMappingURL=view-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"view-config.d.ts","sourceRoot":"","sources":["../../../../src/builder/core/config/view-config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAE9D,eAAO,MAAM,iBAAiB,WAAW,CAAC;AAoC1C,OAAO,EAGL,KAAK,aAAa,EACnB,MAAM,qBAAqB,CAAC;AAE7B,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,SAAS,CAAC,CAA2B;gBAEjC,WAAW,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC;IAKrE,kBAAkB,CAAC,SAAS,EAAE,OAAO,GAAG,KAAK,GAAG,eAAe;CAMhE;AAED,wBAAgB,qBAAqB,CACnC,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,aAAa,GACvB,OAAO,CAAC,eAAe,CAAC,GAAG,SAAS,CAGtC"}
@@ -0,0 +1,79 @@
1
+ export const DEFAULT_ASSET_DIR = 'assets';
2
+ function createDefaultConfig() {
3
+ const baseMultiOutput = (assetDir) => ({
4
+ entryFileNames: 'pages/[name]/[name].js',
5
+ chunkFileNames: `${assetDir}/vendor-[hash].js`,
6
+ assetFileNames: `${assetDir}/[name].[ext]`,
7
+ manualChunks: null
8
+ });
9
+ return {
10
+ react: {
11
+ output: {
12
+ multi: baseMultiOutput(DEFAULT_ASSET_DIR)
13
+ },
14
+ assetDir: DEFAULT_ASSET_DIR,
15
+ cssCodeSplitMulti: true,
16
+ target: 'es2020',
17
+ esbuild: { jsx: 'automatic' },
18
+ minifyStrategy: 'esbuild'
19
+ },
20
+ vue: {
21
+ output: {
22
+ multi: baseMultiOutput(DEFAULT_ASSET_DIR)
23
+ },
24
+ assetDir: DEFAULT_ASSET_DIR,
25
+ cssCodeSplitMulti: true,
26
+ target: 'es2020',
27
+ minifyStrategy: 'esbuild'
28
+ }
29
+ };
30
+ }
31
+ const defaultConfig = createDefaultConfig();
32
+ import { extractViewOverrides, loadLingxiaConfig } from './lingxia-config.js';
33
+ export class ViewConfigManager {
34
+ projectPath;
35
+ overrides;
36
+ constructor(projectPath, overrides) {
37
+ this.projectPath = projectPath;
38
+ this.overrides = overrides;
39
+ }
40
+ getFrameworkConfig(framework) {
41
+ const base = defaultConfig[framework];
42
+ const extra = this.overrides;
43
+ if (!extra)
44
+ return base;
45
+ return mergeViewConfig(base, extra);
46
+ }
47
+ }
48
+ export function resolveUserViewConfig(projectPath, framework) {
49
+ const config = loadLingxiaConfig(projectPath);
50
+ return extractViewOverrides(config, framework);
51
+ }
52
+ function mergeViewConfig(base, extra) {
53
+ const assetDir = extra.assetDir ?? base.assetDir ?? DEFAULT_ASSET_DIR;
54
+ const multiOutput = {
55
+ ...base.output.multi,
56
+ ...(extra.output?.multi ?? {})
57
+ };
58
+ if (!extra.output?.multi?.assetFileNames) {
59
+ multiOutput.assetFileNames = `${assetDir}/[name].[ext]`;
60
+ }
61
+ if (!extra.output?.multi?.chunkFileNames) {
62
+ multiOutput.chunkFileNames = `${assetDir}/[name]-[hash].js`;
63
+ }
64
+ return {
65
+ ...base,
66
+ ...extra,
67
+ output: {
68
+ multi: multiOutput
69
+ },
70
+ assetDir,
71
+ cssCodeSplitMulti: extra.cssCodeSplitMulti ?? base.cssCodeSplitMulti,
72
+ target: extra.target ?? base.target,
73
+ esbuild: { ...base.esbuild, ...(extra.esbuild ?? {}) },
74
+ minifyStrategy: extra.minifyStrategy ?? base.minifyStrategy,
75
+ resolvePlugins: extra.resolvePlugins ?? base.resolvePlugins,
76
+ cssConfig: extra.cssConfig ?? base.cssConfig
77
+ };
78
+ }
79
+ //# sourceMappingURL=view-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"view-config.js","sourceRoot":"","sources":["../../../../src/builder/core/config/view-config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ import type { LxPluginConfig } from '../types/index.js';
2
+ /**
3
+ * Centralized configuration manager for LingXia projects
4
+ * Handles lxapp.json, lxplugin.json, and other configuration files
5
+ */
6
+ export declare class ConfigManager {
7
+ private projectPath;
8
+ private lxappConfig;
9
+ private lxpluginConfig;
10
+ constructor(projectPath: string);
11
+ /**
12
+ * Read and cache lxapp.json configuration
13
+ */
14
+ getLxappConfig(): any;
15
+ /**
16
+ * Read and cache lxplugin.json configuration
17
+ */
18
+ getLxpluginConfig(): LxPluginConfig | null;
19
+ /**
20
+ * Get pages configuration from lxapp.json (default) or lxplugin.json (plugin mode)
21
+ */
22
+ getPages(options?: {
23
+ plugin?: boolean;
24
+ }): string[];
25
+ /**
26
+ * Check if project has package.json
27
+ */
28
+ hasPackageJson(): boolean;
29
+ /**
30
+ * Read package.json if exists
31
+ */
32
+ getPackageJson(): any | null;
33
+ }
34
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/builder/core/config.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAExD;;;GAGG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,WAAW,CAAoB;IACvC,OAAO,CAAC,cAAc,CAAgD;gBAE1D,WAAW,EAAE,MAAM;IAI/B;;OAEG;IACH,cAAc,IAAI,GAAG;IAWrB;;OAEG;IACH,iBAAiB,IAAI,cAAc,GAAG,IAAI;IAc1C;;OAEG;IACH,QAAQ,CAAC,OAAO,GAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAA;KAAO,GAAG,MAAM,EAAE;IAatD;;OAEG;IACH,cAAc,IAAI,OAAO;IAIzB;;OAEG;IACH,cAAc,IAAI,GAAG,GAAG,IAAI;CAO7B"}
@@ -0,0 +1,73 @@
1
+ import * as fs from 'fs';
2
+ import * as path from 'path';
3
+ /**
4
+ * Centralized configuration manager for LingXia projects
5
+ * Handles lxapp.json, lxplugin.json, and other configuration files
6
+ */
7
+ export class ConfigManager {
8
+ projectPath;
9
+ lxappConfig = null;
10
+ lxpluginConfig = undefined;
11
+ constructor(projectPath) {
12
+ this.projectPath = projectPath;
13
+ }
14
+ /**
15
+ * Read and cache lxapp.json configuration
16
+ */
17
+ getLxappConfig() {
18
+ if (this.lxappConfig === null) {
19
+ const lxappPath = path.join(this.projectPath, 'lxapp.json');
20
+ if (!fs.existsSync(lxappPath)) {
21
+ throw new Error('lxapp.json not found in project root');
22
+ }
23
+ this.lxappConfig = JSON.parse(fs.readFileSync(lxappPath, 'utf-8'));
24
+ }
25
+ return this.lxappConfig;
26
+ }
27
+ /**
28
+ * Read and cache lxplugin.json configuration
29
+ */
30
+ getLxpluginConfig() {
31
+ if (this.lxpluginConfig === undefined) {
32
+ const lxpluginPath = path.join(this.projectPath, 'lxplugin.json');
33
+ if (!fs.existsSync(lxpluginPath)) {
34
+ this.lxpluginConfig = null;
35
+ }
36
+ else {
37
+ this.lxpluginConfig = JSON.parse(fs.readFileSync(lxpluginPath, 'utf-8'));
38
+ }
39
+ }
40
+ return this.lxpluginConfig;
41
+ }
42
+ /**
43
+ * Get pages configuration from lxapp.json (default) or lxplugin.json (plugin mode)
44
+ */
45
+ getPages(options = {}) {
46
+ if (options.plugin) {
47
+ const pluginConfig = this.getLxpluginConfig();
48
+ if (!pluginConfig) {
49
+ throw new Error('lxplugin.json not found in project root');
50
+ }
51
+ return Object.values(pluginConfig.pages);
52
+ }
53
+ const config = this.getLxappConfig();
54
+ return Array.isArray(config.pages) ? config.pages : [];
55
+ }
56
+ /**
57
+ * Check if project has package.json
58
+ */
59
+ hasPackageJson() {
60
+ return fs.existsSync(path.join(this.projectPath, 'package.json'));
61
+ }
62
+ /**
63
+ * Read package.json if exists
64
+ */
65
+ getPackageJson() {
66
+ const packagePath = path.join(this.projectPath, 'package.json');
67
+ if (fs.existsSync(packagePath)) {
68
+ return JSON.parse(fs.readFileSync(packagePath, 'utf-8'));
69
+ }
70
+ return null;
71
+ }
72
+ }
73
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/builder/core/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAG7B;;;GAGG;AACH,MAAM,OAAO,aAAa;IAChB,WAAW,CAAS;IACpB,WAAW,GAAe,IAAI,CAAC;IAC/B,cAAc,GAAsC,SAAS,CAAC;IAEtE,YAAY,WAAmB;QAC7B,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,cAAc;QACZ,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI,EAAE,CAAC;YAC9B,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;YAC5D,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC9B,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;YAC1D,CAAC;YACD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;QACrE,CAAC;QACD,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAED;;OAEG;IACH,iBAAiB;QACf,IAAI,IAAI,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;YACtC,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;YAClE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;gBACjC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;YAC7B,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,KAAK,CAC9B,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CACrB,CAAC;YACtB,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,QAAQ,CAAC,UAAgC,EAAE;QACzC,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,MAAM,YAAY,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC9C,IAAI,CAAC,YAAY,EAAE,CAAC;gBAClB,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;YAC7D,CAAC;YACD,OAAO,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QAC3C,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QACrC,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;IACzD,CAAC;IAED;;OAEG;IACH,cAAc;QACZ,OAAO,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC,CAAC;IACpE,CAAC;IAED;;OAEG;IACH,cAAc;QACZ,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;QAChE,IAAI,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAC/B,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC;QAC3D,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
@@ -0,0 +1,4 @@
1
+ import type { BuildConfig } from '../config/build-config.js';
2
+ export declare const DEFAULT_SOURCE_DIRS: "shared"[];
3
+ export declare function resolveSourceDirs(projectPath: string, config?: BuildConfig): string[];
4
+ //# sourceMappingURL=source-dirs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"source-dirs.d.ts","sourceRoot":"","sources":["../../../../src/builder/core/constants/source-dirs.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAK7D,eAAO,MAAM,mBAAmB,YAA4B,CAAC;AAE7D,wBAAgB,iBAAiB,CAC/B,WAAW,EAAE,MAAM,EACnB,MAAM,CAAC,EAAE,WAAW,GACnB,MAAM,EAAE,CAsBV"}
@@ -0,0 +1,24 @@
1
+ import path from 'path';
2
+ import { loadLingxiaConfig } from '../config/lingxia-config.js';
3
+ const FALLBACK_SOURCE_DIRS = ['shared'];
4
+ export const DEFAULT_SOURCE_DIRS = [...FALLBACK_SOURCE_DIRS];
5
+ export function resolveSourceDirs(projectPath, config) {
6
+ const resolvedConfig = config ?? loadLingxiaConfig(projectPath);
7
+ const dirs = Array.isArray(resolvedConfig?.sourceDirs)
8
+ ? resolvedConfig.sourceDirs
9
+ : null;
10
+ if (!dirs) {
11
+ return DEFAULT_SOURCE_DIRS;
12
+ }
13
+ const normalized = dirs
14
+ .filter(dir => typeof dir === 'string')
15
+ .map(dir => dir.trim())
16
+ .filter(dir => dir.length > 0)
17
+ .map(dir => dir.replace(/^[./\\]+/, '')) // normalize leading separators
18
+ .map(dir => dir.split(path.sep).join('/'));
19
+ if (normalized.length === 0) {
20
+ return DEFAULT_SOURCE_DIRS;
21
+ }
22
+ return Array.from(new Set(normalized));
23
+ }
24
+ //# sourceMappingURL=source-dirs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"source-dirs.js","sourceRoot":"","sources":["../../../../src/builder/core/constants/source-dirs.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAEhE,MAAM,oBAAoB,GAAG,CAAC,QAAQ,CAAU,CAAC;AAEjD,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,GAAG,oBAAoB,CAAC,CAAC;AAE7D,MAAM,UAAU,iBAAiB,CAC/B,WAAmB,EACnB,MAAoB;IAEpB,MAAM,cAAc,GAAG,MAAM,IAAI,iBAAiB,CAAC,WAAW,CAAC,CAAC;IAChE,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,cAAc,EAAE,UAAU,CAAC;QACpD,CAAC,CAAC,cAAc,CAAC,UAAU;QAC3B,CAAC,CAAC,IAAI,CAAC;IAET,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,mBAAmB,CAAC;IAC7B,CAAC;IAED,MAAM,UAAU,GAAG,IAAI;SACpB,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,GAAG,KAAK,QAAQ,CAAC;SACtC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;SACtB,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;SAC7B,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC,+BAA+B;SACvE,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAE7C,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO,mBAAmB,CAAC;IAC7B,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC;AACzC,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { BuildConfig } from '../config/build-config.js';
2
+ export declare const DEFAULT_STATIC_DIRS: "public"[];
3
+ export declare function resolveStaticDirs(projectPath: string, config?: BuildConfig): string[];
4
+ //# sourceMappingURL=static-dirs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"static-dirs.d.ts","sourceRoot":"","sources":["../../../../src/builder/core/constants/static-dirs.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAK7D,eAAO,MAAM,mBAAmB,YAA4B,CAAC;AAE7D,wBAAgB,iBAAiB,CAC/B,WAAW,EAAE,MAAM,EACnB,MAAM,CAAC,EAAE,WAAW,GACnB,MAAM,EAAE,CAsBV"}