@h-ai/cli 1.0.0-beta.18 → 1.0.0-beta.19

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 (194) hide show
  1. package/README.en.md +4 -0
  2. package/README.ja.md +4 -0
  3. package/README.md +4 -0
  4. package/dist/{chunk-6YZBC5MO.js → chunk-2ZL5ORQ2.js} +85 -25
  5. package/dist/chunk-2ZL5ORQ2.js.map +1 -0
  6. package/dist/{chunk-7NVRYYHN.js → chunk-L53P43B2.js} +129 -31
  7. package/dist/chunk-L53P43B2.js.map +1 -0
  8. package/dist/cli-config-templates-LWMD2I6V.js +5 -0
  9. package/dist/{cli-config-templates-QG5HOYR5.js.map → cli-config-templates-LWMD2I6V.js.map} +1 -1
  10. package/dist/{cli-skill-templates-W4I6ZKYW.js → cli-skill-templates-D6S2OQ6X.js} +3 -3
  11. package/dist/{cli-skill-templates-W4I6ZKYW.js.map → cli-skill-templates-D6S2OQ6X.js.map} +1 -1
  12. package/dist/index.d.ts +1 -1
  13. package/dist/index.js +2747 -671
  14. package/dist/index.js.map +1 -1
  15. package/dist/metafile-esm.json +1 -1
  16. package/package.json +22 -22
  17. package/templates/apps/admin/src/routes/+layout.svelte.hbs +16 -10
  18. package/templates/apps/admin/src/routes/+page.svelte.hbs +4 -4
  19. package/templates/apps/admin/src/routes/admin/+layout.svelte.hbs +17 -7
  20. package/templates/apps/admin/src/routes/admin/+page.svelte.hbs +26 -6
  21. package/templates/apps/admin/src/routes/admin/settings/+page.svelte.hbs +2 -2
  22. package/templates/apps/api/apps/{{projectName}}-contract/src/app-schemas.ts.hbs +6 -1
  23. package/templates/apps/api/apps/{{projectName}}-contract/src/{{projectName}}-contract.ts.hbs +13 -5
  24. package/templates/apps/api/apps/{{projectName}}-contract/tests/contract.test.ts.hbs +13 -5
  25. package/templates/apps/api/apps/{{projectName}}-contract/tsup.config.ts.hbs +3 -1
  26. package/templates/apps/api/apps/{{projectName}}-serv/src/app.ts.hbs +71 -32
  27. package/templates/apps/api/apps/{{projectName}}-serv/src/build-metadata.ts.hbs +0 -1
  28. package/templates/apps/api/apps/{{projectName}}-serv/src/lib/server/init.ts.hbs +131 -54
  29. package/templates/apps/api/apps/{{projectName}}-serv/src/server/procedures/index.ts.hbs +39 -13
  30. package/templates/apps/api/apps/{{projectName}}-serv/tests/service.test.ts.hbs +78 -31
  31. package/templates/apps/api/apps/{{projectName}}-serv/tsup.config.ts.hbs +3 -1
  32. package/templates/apps/api/apps/{{projectName}}-serv/vitest.config.ts.hbs +3 -1
  33. package/templates/apps/api/e2e/api-serv.spec.ts.hbs +20 -3
  34. package/templates/apps/api/e2e/capture-evidence.ts.hbs +4 -1
  35. package/templates/apps/api/eslint.config.js.hbs +3 -1
  36. package/templates/apps/api/images/serv.Dockerfile.hbs +3 -4
  37. package/templates/apps/api/playwright.config.ts.hbs +23 -19
  38. package/templates/apps/api/pnpm-workspace.yaml.hbs +27 -16
  39. package/templates/apps/fullstack/apps/{{projectName}}-app/capacitor.config.ts.hbs +1 -3
  40. package/templates/apps/fullstack/apps/{{projectName}}-app/eslint.config.js.hbs +10 -2
  41. package/templates/apps/fullstack/apps/{{projectName}}-app/src/App.svelte.hbs +10 -2
  42. package/templates/apps/fullstack/apps/{{projectName}}-app/src/build-metadata.ts.hbs +0 -1
  43. package/templates/apps/fullstack/apps/{{projectName}}-app/src/lib/capacitor.ts.hbs +0 -1
  44. package/templates/apps/fullstack/apps/{{projectName}}-app/svelte.config.js.hbs +4 -1
  45. package/templates/apps/fullstack/apps/{{projectName}}-app/vite.config.ts.hbs +16 -4
  46. package/templates/apps/fullstack/apps/{{projectName}}-desktop/src/App.svelte.hbs +8 -2
  47. package/templates/apps/fullstack/apps/{{projectName}}-desktop/src/build-metadata.ts.hbs +0 -1
  48. package/templates/apps/fullstack/apps/{{projectName}}-desktop/svelte.config.js.hbs +4 -1
  49. package/templates/apps/fullstack/apps/{{projectName}}-desktop/vite.config.ts.hbs +16 -4
  50. package/templates/apps/fullstack/apps/{{projectName}}-web/eslint.config.js.hbs +10 -2
  51. package/templates/apps/fullstack/apps/{{projectName}}-web/src/build-metadata.ts.hbs +0 -1
  52. package/templates/apps/fullstack/apps/{{projectName}}-web/src/main.ts.hbs +0 -2
  53. package/templates/apps/fullstack/apps/{{projectName}}-web/svelte.config.js.hbs +4 -1
  54. package/templates/apps/fullstack/apps/{{projectName}}-web/vite.config.ts.hbs +19 -5
  55. package/templates/apps/fullstack/e2e/fullstack.spec.ts.hbs +111 -26
  56. package/templates/apps/fullstack/e2e/session-close.spec.ts.hbs +19 -5
  57. package/templates/apps/fullstack/eslint.config.js.hbs +3 -1
  58. package/templates/apps/fullstack/images/serv.Dockerfile.hbs +3 -4
  59. package/templates/apps/fullstack/images/web.Dockerfile.hbs +0 -2
  60. package/templates/apps/fullstack/packages/{{projectName}}-contract/src/admin-contract.ts.hbs +114 -23
  61. package/templates/apps/fullstack/packages/{{projectName}}-contract/src/admin-schemas.ts.hbs +57 -11
  62. package/templates/apps/fullstack/packages/{{projectName}}-contract/tsup.config.ts.hbs +3 -1
  63. package/templates/apps/fullstack/packages/{{projectName}}-serv/src/app-server.ts.hbs +65 -30
  64. package/templates/apps/fullstack/packages/{{projectName}}-serv/src/build-metadata.ts.hbs +0 -1
  65. package/templates/apps/fullstack/packages/{{projectName}}-serv/src/server/admin-service.ts.hbs +69 -21
  66. package/templates/apps/fullstack/packages/{{projectName}}-serv/src/server/business-settings.ts.hbs +21 -5
  67. package/templates/apps/fullstack/packages/{{projectName}}-serv/src/server/procedures/admin-procedures.ts.hbs +63 -11
  68. package/templates/apps/fullstack/packages/{{projectName}}-serv/src/server/procedures/app-procedures.ts.hbs +6 -1
  69. package/templates/apps/fullstack/packages/{{projectName}}-serv/src/server/procedures/index.ts.hbs +3 -1
  70. package/templates/apps/fullstack/packages/{{projectName}}-serv/src/server/runtime.ts.hbs +139 -49
  71. package/templates/apps/fullstack/packages/{{projectName}}-serv/src/server/security-roles.ts.hbs +43 -12
  72. package/templates/apps/fullstack/packages/{{projectName}}-serv/tests/app-server.test.ts.hbs +139 -28
  73. package/templates/apps/fullstack/packages/{{projectName}}-serv/tests/runtime.test.ts.hbs +33 -10
  74. package/templates/apps/fullstack/packages/{{projectName}}-serv/tests/security.test.ts.hbs +141 -25
  75. package/templates/apps/fullstack/packages/{{projectName}}-serv/tsup.config.ts.hbs +6 -2
  76. package/templates/apps/fullstack/packages/{{projectName}}-serv/vitest.config.ts.hbs +3 -1
  77. package/templates/apps/fullstack/packages/{{projectName}}-shared/src/lib/api/api-client.ts.hbs +9 -2
  78. package/templates/apps/fullstack/packages/{{projectName}}-shared/src/lib/api/feedback-client.ts.hbs +0 -3
  79. package/templates/apps/fullstack/packages/{{projectName}}-shared/src/lib/api/sensitive-actions.svelte.ts.hbs +15 -3
  80. package/templates/apps/fullstack/packages/{{projectName}}-shared/src/lib/components/AppShell.svelte.hbs +33 -7
  81. package/templates/apps/fullstack/packages/{{projectName}}-shared/src/lib/components/FeedbackEntry.svelte.hbs +16 -2
  82. package/templates/apps/fullstack/packages/{{projectName}}-shared/src/lib/pages/audit.svelte.hbs +104 -13
  83. package/templates/apps/fullstack/packages/{{projectName}}-shared/src/lib/pages/feedback.svelte.hbs +37 -7
  84. package/templates/apps/fullstack/packages/{{projectName}}-shared/src/lib/pages/roles.svelte.hbs +9 -3
  85. package/templates/apps/fullstack/packages/{{projectName}}-shared/src/lib/pages/settings.svelte.hbs +25 -3
  86. package/templates/apps/fullstack/packages/{{projectName}}-shared/src/lib/pages/users.svelte.hbs +133 -19
  87. package/templates/apps/fullstack/packages/{{projectName}}-shared/src/lib/security/role-label.ts.hbs +14 -2
  88. package/templates/apps/fullstack/packages/{{projectName}}-shared/src/lib/stores/guide-store.ts.hbs +66 -34
  89. package/templates/apps/fullstack/packages/{{projectName}}-shared/src/lib/stores/management-store.svelte.ts.hbs +132 -30
  90. package/templates/apps/fullstack/packages/{{projectName}}-shared/src/lib/stores/theme-store.svelte.ts.hbs +8 -2
  91. package/templates/apps/fullstack/packages/{{projectName}}-shared/tests/api-client.test.ts.hbs +23 -5
  92. package/templates/apps/fullstack/packages/{{projectName}}-shared/tests/management-store.test.ts.hbs +143 -21
  93. package/templates/apps/fullstack/packages/{{projectName}}-shared/vitest.config.ts.hbs +7 -2
  94. package/templates/apps/fullstack/playwright.config.ts.hbs +9 -3
  95. package/templates/apps/fullstack/pnpm-workspace.yaml.hbs +30 -15
  96. package/templates/apps/h5/src/routes/+layout.svelte.hbs +57 -21
  97. package/templates/apps/h5/src/routes/+page.svelte.hbs +2 -2
  98. package/templates/apps/h5/src/routes/discover/+page.svelte.hbs +2 -2
  99. package/templates/apps/h5/src/routes/profile/+page.svelte.hbs +2 -2
  100. package/templates/apps/mobile-app/src/App.svelte.hbs +17 -5
  101. package/templates/apps/mobile-app/src/lib/api.ts.hbs +14 -3
  102. package/templates/apps/mobile-app/src/lib/app-config.ts.hbs +8 -1
  103. package/templates/apps/mobile-app/src/lib/pages/home.svelte.hbs +6 -2
  104. package/templates/apps/mobile-app/src/lib/pages/tasks.svelte.hbs +5 -1
  105. package/templates/apps/website/scripts/static-website.mjs.hbs +16 -3
  106. package/templates/apps/website/src/routes/+layout.svelte.hbs +44 -23
  107. package/templates/apps/website/src/routes/+page.svelte.hbs +4 -4
  108. package/templates/apps/website/src/routes/about/+page.svelte.hbs +2 -2
  109. package/templates/apps/website/src/routes/contact/+page.svelte.hbs +2 -2
  110. package/templates/apps/website/src/routes/services/+page.svelte.hbs +20 -5
  111. package/templates/base/e2e/app.spec.ts.hbs +49 -16
  112. package/templates/base/eslint-rules.js +44 -25
  113. package/templates/base/eslint.config.js.hbs +3 -1
  114. package/templates/base/images/web.Dockerfile.hbs +3 -4
  115. package/templates/base/package.json.hbs +5 -4
  116. package/templates/base/patches/daisyui-5.7.50.patch +8 -0
  117. package/templates/base/patches/deepmerge-4.3.1.patch +51 -0
  118. package/templates/base/playwright.config.ts +3 -1
  119. package/templates/base/pnpm-workspace.yaml.hbs +33 -16
  120. package/templates/base/src/app.d.ts.hbs +1 -1
  121. package/templates/base/src/hooks.server.ts.hbs +36 -27
  122. package/templates/base/src/lib/build-metadata.ts.hbs +0 -1
  123. package/templates/base/src/lib/server/init.ts.hbs +124 -51
  124. package/templates/base/src/lib/server/kit-config.ts.hbs +7 -4
  125. package/templates/base/src/routes/+layout.server.ts.hbs +2 -2
  126. package/templates/base/svelte.config.js.hbs +10 -100
  127. package/templates/base/tests/scaffold.test.ts.hbs +12 -3
  128. package/templates/base/tsconfig.json.hbs +7 -4
  129. package/templates/base/vite.config.ts.hbs +108 -14
  130. package/templates/base/vitest.config.ts.hbs +6 -2
  131. package/templates/features/ai/routes/api/chat/+server.ts +3 -1
  132. package/templates/features/iam/routes-admin/(auth)/auth/forgot-password/+page.svelte.hbs +3 -3
  133. package/templates/features/iam/routes-admin/(auth)/auth/login/+page.svelte.hbs +3 -3
  134. package/templates/features/iam/routes-admin/(auth)/auth/register/+page.svelte.hbs +3 -3
  135. package/templates/features/iam/routes-admin/(auth)/auth/reset-password/+page.svelte.hbs +3 -3
  136. package/templates/features/iam/routes-h5/auth/forgot-password/+page.svelte.hbs +3 -3
  137. package/templates/features/iam/routes-h5/auth/login/+page.svelte.hbs +3 -3
  138. package/templates/features/iam/routes-h5/auth/register/+page.svelte.hbs +3 -3
  139. package/templates/features/iam/routes-h5/auth/reset-password/+page.svelte.hbs +3 -3
  140. package/templates/features/iam/routes-website/auth/forgot-password/+page.svelte.hbs +3 -3
  141. package/templates/features/iam/routes-website/auth/login/+page.svelte.hbs +3 -3
  142. package/templates/features/iam/routes-website/auth/register/+page.svelte.hbs +3 -3
  143. package/templates/features/iam/routes-website/auth/reset-password/+page.svelte.hbs +3 -3
  144. package/templates/features/payment/routes/api/v1/payment/create/+server.ts +11 -2
  145. package/templates/shared/browser-check/startup.js +32 -6
  146. package/templates/shared/browser-startup.spec.ts +3 -1
  147. package/templates/shared/build-metadata.ts +18 -4
  148. package/templates/shared/e2e-env.ts +22 -6
  149. package/templates/shared/native-name.mjs +9 -2
  150. package/templates/shared/public-base-path.mjs +17 -4
  151. package/templates/shared/run-e2e.mjs +40 -9
  152. package/templates/shared/run-node.mjs +15 -4
  153. package/templates/shared/run-tauri.mjs +37 -8
  154. package/templates/shared/vite-runtime-config.ts +9 -3
  155. package/templates/skills/AGENTS.md +10 -73
  156. package/templates/skills/bridges/admin/AGENTS.md +9 -65
  157. package/templates/skills/bridges/api/AGENTS.md +8 -59
  158. package/templates/skills/bridges/fullstack/AGENTS.md.hbs +9 -54
  159. package/templates/skills/bridges/h5/AGENTS.md +8 -63
  160. package/templates/skills/bridges/mobile-app/AGENTS.md +8 -62
  161. package/templates/skills/bridges/website/AGENTS.md +8 -63
  162. package/templates/skills/hai-ai/acp.md +2 -0
  163. package/templates/skills/hai-ai/guide.md +17 -6
  164. package/templates/skills/hai-ai/reference.md +21 -12
  165. package/templates/skills/hai-api-client/reference.md +1 -1
  166. package/templates/skills/hai-app-create/development.md +3 -1
  167. package/templates/skills/hai-app-create/project.md +33 -0
  168. package/templates/skills/hai-app-create/reference.md +8 -8
  169. package/templates/skills/hai-app-tests/reference.md +1 -1
  170. package/templates/skills/hai-build/SKILL.md +2 -2
  171. package/templates/skills/hai-build/paths.md +1 -1
  172. package/templates/skills/hai-build/reference.md +11 -7
  173. package/templates/skills/hai-capacitor/reference.md +2 -0
  174. package/templates/skills/hai-ci/SKILL.md +1 -0
  175. package/templates/skills/hai-core/reference.md +3 -0
  176. package/templates/skills/hai-crypto/reference.md +2 -0
  177. package/templates/skills/hai-deploy/SKILL.md +7 -1
  178. package/templates/skills/hai-deploy/middleware.md +3 -1
  179. package/templates/skills/hai-framework-sync/sync.md +2 -0
  180. package/templates/skills/hai-kit/reference.md +16 -4
  181. package/templates/skills/hai-payment/reference.md +2 -0
  182. package/templates/skills/hai-reach/SKILL.md +2 -1
  183. package/templates/skills/hai-reach/reference.md +1 -1
  184. package/templates/skills/hai-reldb/SKILL.md +1 -1
  185. package/templates/skills/hai-reldb/reference.md +4 -0
  186. package/templates/skills/hai-serv/reference.md +12 -2
  187. package/templates/skills/hai-storage/reference.md +12 -3
  188. package/templates/skills/hai-ui/SKILL.md +3 -2
  189. package/templates/skills/hai-ui/guide.md +1 -1
  190. package/templates/skills/hai-ui/reference.md +23 -35
  191. package/templates/skills/hai-vecdb/reference.md +1 -1
  192. package/dist/chunk-6YZBC5MO.js.map +0 -1
  193. package/dist/chunk-7NVRYYHN.js.map +0 -1
  194. package/dist/cli-config-templates-QG5HOYR5.js +0 -5
@@ -24,7 +24,9 @@ function resolvePortFromBaseUrl(urlString: string, fallbackPort: string): string
24
24
  return url.port
25
25
  }
26
26
 
27
- return url.protocol === 'https:' ? '443' : '80'
27
+ return url.protocol === 'https:'
28
+ ? '443'
29
+ : '80'
28
30
  }
29
31
  catch {
30
32
  return fallbackPort
@@ -46,22 +48,24 @@ export default defineConfig({
46
48
  trace: 'retain-on-failure',
47
49
  screenshot: 'only-on-failure',
48
50
  },
49
- webServer: [{
50
- name: '{{api.servPackageName}}',
51
- command: 'pnpm --filter {{api.servPackageName}} exec node dist/index.js',
52
- env: createE2eServerEnv({
53
- ...createE2eNotificationEnv(),
54
- HAI_CORE_ENV: 'test',
55
- HAI_DB: JSON.stringify({ type: 'sqlite', database: `${process.env.HAI_E2E_DATA_ROOT}/api.db` }),
56
- HAI_CACHE: JSON.stringify({ type: 'memory' }),
57
- HAI_STORAGE: JSON.stringify({ type: 'local', root: `${process.env.HAI_E2E_DATA_ROOT}/uploads` }),
58
- HAI_VECDB: JSON.stringify({ type: 'lancedb', path: `${process.env.HAI_E2E_DATA_ROOT}/vecdb` }),
59
- HAI_CRYPTO_TRANSPORT_SERVERKEYRING: createE2eTransportRing(),
60
- HOST: serviceHost,
61
- PORT: servicePort,
62
- }),
63
- url: `${baseURL}/health`,
64
- reuseExistingServer: false,
65
- timeout: 120_000,
66
- }],
51
+ webServer: [
52
+ {
53
+ name: '{{api.servPackageName}}',
54
+ command: 'pnpm --filter {{api.servPackageName}} exec node dist/index.js',
55
+ env: createE2eServerEnv({
56
+ ...createE2eNotificationEnv(),
57
+ HAI_CORE_ENV: 'test',
58
+ HAI_DB: JSON.stringify({ type: 'sqlite', database: `${process.env.HAI_E2E_DATA_ROOT}/api.db` }),
59
+ HAI_CACHE: JSON.stringify({ type: 'memory' }),
60
+ HAI_STORAGE: JSON.stringify({ type: 'local', root: `${process.env.HAI_E2E_DATA_ROOT}/uploads` }),
61
+ HAI_VECDB: JSON.stringify({ type: 'lancedb', path: `${process.env.HAI_E2E_DATA_ROOT}/vecdb` }),
62
+ HAI_CRYPTO_TRANSPORT_SERVERKEYRING: createE2eTransportRing(),
63
+ HOST: serviceHost,
64
+ PORT: servicePort,
65
+ }),
66
+ url: `${baseURL}/health`,
67
+ reuseExistingServer: false,
68
+ timeout: 120_000,
69
+ },
70
+ ],
67
71
  })
@@ -1,5 +1,5 @@
1
1
  {{! @skipIfEmpty }}
2
- shellEmulator: true
2
+ minimumReleaseAgeExcludePrune: true
3
3
 
4
4
  trustPolicy: no-downgrade
5
5
  # 上游构建工具仍要求 4.x;4.0.3 tarball 已核对原 lockfile 的 SHA-512。
@@ -8,33 +8,44 @@ trustPolicyExclude:
8
8
 
9
9
  # pnpm 12 配置;原生依赖仅运行明确列出的安装脚本。
10
10
  nodeLinker: hoisted
11
- allowBuilds:
12
- cpu-features: true
13
- onnxruntime-node: true
14
- protobufjs: true
15
- ssh2: true
16
- vue-demi: true
17
- better-sqlite3: true
18
- esbuild: true
19
- core-js: false
11
+ shellEmulator: true
20
12
 
13
+ packages:
14
+ - apps/*
15
+
16
+ # 构建与浏览器依赖的安全修复;版本与框架工作区同步维护。
21
17
  overrides:
22
- "@ai-sdk/provider-utils@>=4.0.0 <4.0.33": 4.0.57
18
+ '@ai-sdk/provider-utils@>=4.0.0 <4.0.33': 4.0.57
19
+ '@types/node': {{versions.nodeTypes}}
20
+ body-parser@>=2 <2.4.0: 2.4.0
23
21
  cookie@<0.7.0: 0.7.2
22
+ dompurify@>=3 <3.4.17: 3.4.17
24
23
  esbuild@<0.28.1: 0.28.2
24
+ fast-uri@>=3 <3.1.9: 3.1.9
25
+ follow-redirects@>=1.16.0 <1.16.2: 1.16.2
26
+ glob@>=9 <=14.0.1: 14.0.4
27
+ ip-address@<=10.7.3: 10.7.6
25
28
  katex@<0.18.2: 0.18.10
29
+ minimatch@>=7 <11.0.1: 11.0.5
30
+ parse5@>=8 <8.1.0: 8.1.0
31
+ qs@>=6.7 <6.16.1: 6.17.1
32
+ runed@<0.38.0: 0.38.0
26
33
  sharp@<0.35.5: 0.35.5
27
34
  tinypool@<2.1.2: 2.2.0
28
- '@qdrant/js-client-rest>undici': 7.30.0
29
35
  xcode>uuid: 11.1.1
30
- "@types/node": "{{versions.nodeTypes}}"
31
36
 
32
- packages:
33
- - apps/*
37
+ allowBuilds:
38
+ core-js: false
39
+ cpu-features: true
40
+ esbuild: true
41
+ onnxruntime-node: true
42
+ protobufjs: true
43
+ ssh2: true
44
+ vue-demi: true
34
45
 
35
46
  {{#if useCatalogProtocol}}
36
47
  catalog:
37
48
  {{#each haiCatalogPackages}}
38
- '{{@key}}': {{this}}
49
+ {{{yaml @key this}}}
39
50
  {{/each}}
40
51
  {{/if}}
@@ -6,7 +6,6 @@ import process from 'node:process'
6
6
  import { resolveNativeName } from '../../scripts/native-name.mjs'
7
7
 
8
8
  const envDir = resolve(process.cwd(), '../..')
9
-
10
9
  const config: CapacitorConfig = {
11
10
  appId: 'com.hai.{{fullstack.nativeAppIdSegment}}.app',
12
11
  appName: resolveNativeName(envDir, resolve(envDir, 'packages/{{fullstack.servPackageName}}/config/_core.yml')),
@@ -14,11 +13,10 @@ const config: CapacitorConfig = {
14
13
  server: process.env.NODE_ENV === 'production'
15
14
  ? undefined
16
15
  : {
17
- // 仅用于 Capacitor live reload 前端页面;API 地址由前端配置或 shared client 参数控制。
16
+ // 仅用于 Capacitor live reload 前端页面;API 地址由前端配置或 shared client 参数控制。
18
17
  url: process.env.CAPACITOR_SERVER_URL,
19
18
  cleartext: process.env.CAPACITOR_SERVER_URL?.startsWith('http://') ?? false,
20
19
  },
21
20
  }
22
-
23
21
  export default config
24
22
  {{/if}}
@@ -5,9 +5,17 @@ import { haiQualityConfig } from '../../eslint-rules.js'
5
5
 
6
6
  export default antfu({
7
7
  // unused-imports 使用 TS 规则,JS 同样使用 TS parser 以保持 scope 契约一致。
8
- typescript: { files: [GLOB_SRC] },
8
+ typescript: {
9
+ files: [GLOB_SRC],
10
+ },
9
11
  formatters: true,
10
- ignores: ['**/build/**', '**/dist/**', '**/*.d.ts', '**/project.inlang/**', '**/src/lib/paraglide/**'],
12
+ ignores: [
13
+ '**/build/**',
14
+ '**/dist/**',
15
+ '**/*.d.ts',
16
+ '**/project.inlang/**',
17
+ '**/src/lib/paraglide/**',
18
+ ],
11
19
  svelte: true,
12
20
  }, haiQualityConfig, {
13
21
  files: ['**/*.svelte'],
@@ -30,7 +30,13 @@
30
30
  apiOptions = {
31
31
  clientName: '{{projectName}}-app',
32
32
  terminalType: 'app',
33
- ...(capacitor.isNative() ? { requireApiBase: true, tokenStorage: createCapacitorTokenStorage(), headers: { 'X-HAI-Token-Transport': 'body' } } : {}),
33
+ ...(capacitor.isNative()
34
+ ? {
35
+ requireApiBase: true,
36
+ tokenStorage: createCapacitorTokenStorage(),
37
+ headers: { 'X-HAI-Token-Transport': 'body' },
38
+ }
39
+ : {}),
34
40
  }
35
41
  }
36
42
  onMount(() => {
@@ -42,7 +48,9 @@
42
48
  })
43
49
  }
44
50
  })
45
- useToastFeedback(() => startupFailed ? messages.operation_failed() : '')
51
+ useToastFeedback(() => startupFailed
52
+ ? messages.operation_failed()
53
+ : '')
46
54
  </script>
47
55
 
48
56
  {#if startupFailed}
@@ -3,7 +3,6 @@
3
3
  {{#if features.feedback}}
4
4
  /** 当前应用编译时烘焙的产物身份;运行时配置不能覆盖。 */
5
5
  declare const __HAI_BUILD_METADATA__: { appVersion: string, buildId: string, commit: string }
6
-
7
6
  export const buildMetadata = __HAI_BUILD_METADATA__
8
7
  {{/if}}
9
8
  {{/if}}
@@ -7,7 +7,6 @@ export async function initCapacitor(): Promise<HaiResult<void>> {
7
7
  const result = await capacitor.init()
8
8
  if (!result.success)
9
9
  return result
10
-
11
10
  if (capacitor.isNative()) {
12
11
  return capacitor.statusBar.configure({
13
12
  style: 'dark',
@@ -5,7 +5,10 @@ import { vitePreprocess } from '@sveltejs/vite-plugin-svelte'
5
5
 
6
6
  /** @type {import('@sveltejs/vite-plugin-svelte').SvelteConfig} */
7
7
  const config = {
8
- preprocess: [autoImportHaiUi(), vitePreprocess()],
8
+ preprocess: [
9
+ vitePreprocess(),
10
+ autoImportHaiUi(),
11
+ ],
9
12
  compilerOptions: {
10
13
  // 使用 Svelte 5 Runes,和 @h-ai/ui 组件库保持一致。
11
14
  runes: true,
@@ -14,7 +14,9 @@ import { resolveBuildMetadata } from '../../scripts/build-metadata.js'
14
14
  const envDir = fileURLToPath(new URL('../../', import.meta.url))
15
15
 
16
16
  export default defineConfig(({ mode, command }) => {
17
- const envResult = command === 'build' || process.env.HAI_E2E === '1' ? { success: true as const, data: {} as Record<string, string> } : core.config.loadEnvFiles({ mode, envDir })
17
+ const envResult = command === 'build' || process.env.HAI_E2E === '1'
18
+ ? { success: true as const, data: {} as Record<string, string> }
19
+ : core.config.loadEnvFiles({ mode, envDir })
18
20
  if (!envResult.success)
19
21
  throw new Error(envResult.error.message)
20
22
  const env = envResult.data
@@ -23,15 +25,23 @@ export default defineConfig(({ mode, command }) => {
23
25
  const metadataAsset: Plugin = {
24
26
  name: 'hai-build-metadata',
25
27
  generateBundle() {
26
- this.emitFile({ type: 'asset', fileName: 'build-metadata.json', source: JSON.stringify(buildMetadata) })
28
+ this.emitFile({
29
+ type: 'asset',
30
+ fileName: 'build-metadata.json',
31
+ source: JSON.stringify(buildMetadata),
32
+ })
27
33
  },
28
34
  }
29
35
  const target = (env.PUBLIC_API_BASE || process.env.SERVICE_BASE_URL || 'http://127.0.0.1:3000').replace(/\/api\/v1\/?$/, '')
30
- const proxy = { '/api': { target, changeOrigin: true } }
36
+ const proxy = {
37
+ '/api': { target, changeOrigin: true },
38
+ }
31
39
  return {
32
40
  base: './',
33
41
  envDir: false,
34
- define: { __HAI_BUILD_METADATA__: JSON.stringify(buildMetadata) },
42
+ define: {
43
+ __HAI_BUILD_METADATA__: JSON.stringify(buildMetadata),
44
+ },
35
45
  server: { proxy },
36
46
  preview: { proxy },
37
47
  build: {
@@ -51,6 +61,8 @@ export default defineConfig(({ mode, command }) => {
51
61
  metadataAsset,
52
62
  svelte(),
53
63
  paraglideVitePlugin({
64
+ // 共享物理消息产物供独立 Vitest/Node 工具读取。
65
+ outputStructure: 'message-modules',
54
66
  project: './project.inlang',
55
67
  outdir: './src/lib/paraglide',
56
68
  strategy: ['cookie', 'baseLocale'],
@@ -12,8 +12,14 @@
12
12
  const native = '__TAURI_INTERNALS__' in globalThis
13
13
  const apiOptions: ManagementApiOptions = {
14
14
  clientName: '{{projectName}}-desktop',
15
- terminalType: 'desktop',
16
- ...(native ? { requireApiBase: true, tokenStorage: apiClient.tokenStorage.memory(), headers: { 'X-HAI-Token-Transport': 'body' } } : {}),
15
+ terminalType: 'desktop',
16
+ ...(native
17
+ ? {
18
+ requireApiBase: true,
19
+ tokenStorage: apiClient.tokenStorage.memory(),
20
+ headers: { 'X-HAI-Token-Transport': 'body' },
21
+ }
22
+ : {}),
17
23
  }
18
24
 
19
25
  function syncLocale(locale: string) {
@@ -3,7 +3,6 @@
3
3
  {{#if features.feedback}}
4
4
  /** 当前应用编译时烘焙的产物身份;运行时配置不能覆盖。 */
5
5
  declare const __HAI_BUILD_METADATA__: { appVersion: string, buildId: string, commit: string }
6
-
7
6
  export const buildMetadata = __HAI_BUILD_METADATA__
8
7
  {{/if}}
9
8
  {{/if}}
@@ -5,7 +5,10 @@ import { vitePreprocess } from '@sveltejs/vite-plugin-svelte'
5
5
 
6
6
  /** @type {import('@sveltejs/vite-plugin-svelte').SvelteConfig} */
7
7
  export default {
8
- preprocess: [autoImportHaiUi(), vitePreprocess()],
8
+ preprocess: [
9
+ vitePreprocess(),
10
+ autoImportHaiUi(),
11
+ ],
9
12
  compilerOptions: {
10
13
  // 使用 Svelte 5 Runes,和 @h-ai/ui 组件库保持一致。
11
14
  runes: true,
@@ -15,7 +15,9 @@ const host = process.env.TAURI_DEV_HOST
15
15
  const envDir = fileURLToPath(new URL('../../', import.meta.url))
16
16
 
17
17
  export default defineConfig(({ mode, command }) => {
18
- const envResult = command === 'build' || process.env.HAI_E2E === '1' ? { success: true as const, data: {} as Record<string, string> } : core.config.loadEnvFiles({ mode, envDir })
18
+ const envResult = command === 'build' || process.env.HAI_E2E === '1'
19
+ ? { success: true as const, data: {} as Record<string, string> }
20
+ : core.config.loadEnvFiles({ mode, envDir })
19
21
  if (!envResult.success)
20
22
  throw new Error(envResult.error.message)
21
23
  const env = envResult.data
@@ -24,16 +26,24 @@ export default defineConfig(({ mode, command }) => {
24
26
  const metadataAsset: Plugin = {
25
27
  name: 'hai-build-metadata',
26
28
  generateBundle() {
27
- this.emitFile({ type: 'asset', fileName: 'build-metadata.json', source: JSON.stringify(buildMetadata) })
29
+ this.emitFile({
30
+ type: 'asset',
31
+ fileName: 'build-metadata.json',
32
+ source: JSON.stringify(buildMetadata),
33
+ })
28
34
  },
29
35
  }
30
36
  const target = (env.PUBLIC_API_BASE || process.env.SERVICE_BASE_URL || 'http://127.0.0.1:3000').replace(/\/api\/v1\/?$/, '')
31
- const proxy = { '/api': { target, changeOrigin: true } }
37
+ const proxy = {
38
+ '/api': { target, changeOrigin: true },
39
+ }
32
40
 
33
41
  return {
34
42
  base: './',
35
43
  envDir: false,
36
- define: { __HAI_BUILD_METADATA__: JSON.stringify(buildMetadata) },
44
+ define: {
45
+ __HAI_BUILD_METADATA__: JSON.stringify(buildMetadata),
46
+ },
37
47
  preview: { proxy },
38
48
  build: {
39
49
  rolldownOptions: {
@@ -53,6 +63,8 @@ export default defineConfig(({ mode, command }) => {
53
63
  svelte(),
54
64
  tailwindcss(),
55
65
  paraglideVitePlugin({
66
+ // 共享物理消息产物供独立 Vitest/Node 工具读取。
67
+ outputStructure: 'message-modules',
56
68
  project: './project.inlang',
57
69
  outdir: './src/lib/paraglide',
58
70
  strategy: ['cookie', 'baseLocale'],
@@ -5,9 +5,17 @@ import { haiQualityConfig } from '../../eslint-rules.js'
5
5
 
6
6
  export default antfu({
7
7
  // unused-imports 使用 TS 规则,JS 同样使用 TS parser 以保持 scope 契约一致。
8
- typescript: { files: [GLOB_SRC] },
8
+ typescript: {
9
+ files: [GLOB_SRC],
10
+ },
9
11
  formatters: true,
10
- ignores: ['**/build/**', '**/dist/**', '**/*.d.ts', '**/project.inlang/**', '**/src/lib/paraglide/**'],
12
+ ignores: [
13
+ '**/build/**',
14
+ '**/dist/**',
15
+ '**/*.d.ts',
16
+ '**/project.inlang/**',
17
+ '**/src/lib/paraglide/**',
18
+ ],
11
19
  svelte: true,
12
20
  }, haiQualityConfig, {
13
21
  files: ['**/*.svelte'],
@@ -3,7 +3,6 @@
3
3
  {{#if features.feedback}}
4
4
  /** 当前应用编译时烘焙的产物身份;运行时配置不能覆盖。 */
5
5
  declare const __HAI_BUILD_METADATA__: { appVersion: string, buildId: string, commit: string }
6
-
7
6
  export const buildMetadata = __HAI_BUILD_METADATA__
8
7
  {{/if}}
9
8
  {{/if}}
@@ -7,8 +7,6 @@ import './app.css'
7
7
  const target = document.getElementById('app')
8
8
  if (!target)
9
9
  throw new Error('Root element #app not found')
10
-
11
10
  const app = mount(App, { target })
12
-
13
11
  export default app
14
12
  {{/if}}
@@ -5,7 +5,10 @@ import { vitePreprocess } from '@sveltejs/vite-plugin-svelte'
5
5
 
6
6
  /** @type {import('@sveltejs/vite-plugin-svelte').SvelteConfig} */
7
7
  const config = {
8
- preprocess: [autoImportHaiUi(), vitePreprocess()],
8
+ preprocess: [
9
+ vitePreprocess(),
10
+ autoImportHaiUi(),
11
+ ],
9
12
  compilerOptions: {
10
13
  // 使用 Svelte 5 Runes,和 @h-ai/ui 组件库保持一致。
11
14
  runes: true,
@@ -15,7 +15,9 @@ import { resolvePublicBasePath } from '../../scripts/public-base-path.mjs'
15
15
  const envDir = fileURLToPath(new URL('../../', import.meta.url))
16
16
 
17
17
  export default defineConfig(({ mode, command }) => {
18
- const envResult = command === 'build' || process.env.HAI_E2E === '1' ? { success: true as const, data: {} as Record<string, string> } : core.config.loadEnvFiles({ mode, envDir })
18
+ const envResult = command === 'build' || process.env.HAI_E2E === '1'
19
+ ? { success: true as const, data: {} as Record<string, string> }
20
+ : core.config.loadEnvFiles({ mode, envDir })
19
21
  if (!envResult.success)
20
22
  throw new Error(envResult.error.message)
21
23
  const env = envResult.data
@@ -24,16 +26,26 @@ export default defineConfig(({ mode, command }) => {
24
26
  const metadataAsset: Plugin = {
25
27
  name: 'hai-build-metadata',
26
28
  generateBundle() {
27
- this.emitFile({ type: 'asset', fileName: 'build-metadata.json', source: JSON.stringify(buildMetadata) })
29
+ this.emitFile({
30
+ type: 'asset',
31
+ fileName: 'build-metadata.json',
32
+ source: JSON.stringify(buildMetadata),
33
+ })
28
34
  },
29
35
  }
30
36
  const target = (env.PUBLIC_API_BASE || process.env.SERVICE_BASE_URL || 'http://127.0.0.1:3000').replace(/\/api\/v1\/?$/, '')
31
- const proxy = { '/api': { target, changeOrigin: true } }
37
+ const proxy = {
38
+ '/api': { target, changeOrigin: true },
39
+ }
32
40
  const publicBase = resolvePublicBasePath()
33
41
  return {
34
- base: publicBase ? `${publicBase}/` : './',
42
+ base: publicBase
43
+ ? `${publicBase}/`
44
+ : './',
35
45
  envDir: false,
36
- define: { __HAI_BUILD_METADATA__: JSON.stringify(buildMetadata) },
46
+ define: {
47
+ __HAI_BUILD_METADATA__: JSON.stringify(buildMetadata),
48
+ },
37
49
  server: { proxy },
38
50
  preview: { proxy },
39
51
  build: {
@@ -53,6 +65,8 @@ export default defineConfig(({ mode, command }) => {
53
65
  metadataAsset,
54
66
  svelte(),
55
67
  paraglideVitePlugin({
68
+ // 共享物理消息产物供独立 Vitest/Node 工具读取。
69
+ outputStructure: 'message-modules',
56
70
  project: './project.inlang',
57
71
  outdir: './src/lib/paraglide',
58
72
  strategy: ['cookie', 'baseLocale'],