@nextclaw/app-runtime 0.9.13 → 0.9.15

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 (307) hide show
  1. package/README.md +2 -2
  2. package/dist/{main.js → app/main.js} +2 -2
  3. package/dist/app/main.js.map +1 -0
  4. package/dist/{commands → controllers}/create.controller.d.ts +2 -2
  5. package/dist/controllers/create.controller.d.ts.map +1 -0
  6. package/dist/{commands → controllers}/create.controller.js +2 -2
  7. package/dist/controllers/create.controller.js.map +1 -0
  8. package/dist/{commands → controllers}/dev.controller.js +1 -1
  9. package/dist/controllers/dev.controller.js.map +1 -0
  10. package/dist/{commands → controllers}/grant.controller.d.ts +3 -3
  11. package/dist/controllers/grant.controller.d.ts.map +1 -0
  12. package/dist/{commands → controllers}/grant.controller.js +2 -2
  13. package/dist/controllers/grant.controller.js.map +1 -0
  14. package/dist/{commands → controllers}/info.controller.d.ts +2 -2
  15. package/dist/controllers/info.controller.d.ts.map +1 -0
  16. package/dist/{commands → controllers}/info.controller.js +2 -2
  17. package/dist/controllers/info.controller.js.map +1 -0
  18. package/dist/{commands → controllers}/inspect.controller.js +8 -2
  19. package/dist/controllers/inspect.controller.js.map +1 -0
  20. package/dist/{commands → controllers}/install.controller.d.ts +2 -2
  21. package/dist/controllers/install.controller.d.ts.map +1 -0
  22. package/dist/{commands → controllers}/install.controller.js +2 -2
  23. package/dist/controllers/install.controller.js.map +1 -0
  24. package/dist/{commands → controllers}/list.controller.d.ts +2 -2
  25. package/dist/controllers/list.controller.d.ts.map +1 -0
  26. package/dist/{commands → controllers}/list.controller.js +2 -2
  27. package/dist/controllers/list.controller.js.map +1 -0
  28. package/dist/controllers/pack.controller.d.ts +19 -0
  29. package/dist/controllers/pack.controller.d.ts.map +1 -0
  30. package/dist/{commands → controllers}/pack.controller.js +8 -4
  31. package/dist/controllers/pack.controller.js.map +1 -0
  32. package/dist/{commands → controllers}/permissions.controller.d.ts +2 -2
  33. package/dist/controllers/permissions.controller.d.ts.map +1 -0
  34. package/dist/{commands → controllers}/permissions.controller.js +2 -2
  35. package/dist/controllers/permissions.controller.js.map +1 -0
  36. package/dist/{commands → controllers}/publish.controller.d.ts +3 -3
  37. package/dist/controllers/publish.controller.d.ts.map +1 -0
  38. package/dist/{commands → controllers}/publish.controller.js +2 -2
  39. package/dist/controllers/publish.controller.js.map +1 -0
  40. package/dist/{commands → controllers}/registry.controller.d.ts +2 -2
  41. package/dist/controllers/registry.controller.d.ts.map +1 -0
  42. package/dist/{commands → controllers}/registry.controller.js +2 -2
  43. package/dist/controllers/registry.controller.js.map +1 -0
  44. package/dist/{commands → controllers}/revoke.controller.d.ts +2 -2
  45. package/dist/controllers/revoke.controller.d.ts.map +1 -0
  46. package/dist/{commands → controllers}/revoke.controller.js +2 -2
  47. package/dist/controllers/revoke.controller.js.map +1 -0
  48. package/dist/{commands → controllers}/run.controller.js +8 -6
  49. package/dist/controllers/run.controller.js.map +1 -0
  50. package/dist/{commands → controllers}/uninstall.controller.d.ts +2 -2
  51. package/dist/controllers/uninstall.controller.d.ts.map +1 -0
  52. package/dist/{commands → controllers}/uninstall.controller.js +2 -2
  53. package/dist/controllers/uninstall.controller.js.map +1 -0
  54. package/dist/{commands → controllers}/update.controller.d.ts +2 -2
  55. package/dist/controllers/update.controller.d.ts.map +1 -0
  56. package/dist/{commands → controllers}/update.controller.js +2 -2
  57. package/dist/controllers/update.controller.js.map +1 -0
  58. package/dist/{commands → controllers}/validate-publish.controller.d.ts +3 -3
  59. package/dist/controllers/validate-publish.controller.d.ts.map +1 -0
  60. package/dist/{commands → controllers}/validate-publish.controller.js +9 -5
  61. package/dist/controllers/validate-publish.controller.js.map +1 -0
  62. package/dist/index.d.ts +51 -51
  63. package/dist/index.js +46 -45
  64. package/dist/package.js +1 -1
  65. package/dist/{runtime → services}/app-build.service.d.ts +2 -2
  66. package/dist/services/app-build.service.d.ts.map +1 -0
  67. package/dist/{runtime → services}/app-build.service.js +4 -2
  68. package/dist/services/app-build.service.js.map +1 -0
  69. package/dist/{bundle → services}/app-bundle.service.d.ts +18 -6
  70. package/dist/services/app-bundle.service.d.ts.map +1 -0
  71. package/dist/services/app-bundle.service.js +305 -0
  72. package/dist/services/app-bundle.service.js.map +1 -0
  73. package/dist/{permissions → services}/app-grant.service.d.ts +4 -4
  74. package/dist/services/app-grant.service.d.ts.map +1 -0
  75. package/dist/{permissions → services}/app-grant.service.js +7 -4
  76. package/dist/services/app-grant.service.js.map +1 -0
  77. package/dist/{paths → services}/app-home.service.d.ts +2 -1
  78. package/dist/services/app-home.service.d.ts.map +1 -0
  79. package/dist/{paths → services}/app-home.service.js +4 -1
  80. package/dist/services/app-home.service.js.map +1 -0
  81. package/dist/{host → services}/app-host.service.d.ts +2 -2
  82. package/dist/services/app-host.service.d.ts.map +1 -0
  83. package/dist/{host → services}/app-host.service.js +3 -3
  84. package/dist/services/app-host.service.js.map +1 -0
  85. package/dist/services/app-install-source.service.js +72 -0
  86. package/dist/services/app-install-source.service.js.map +1 -0
  87. package/dist/services/app-installation.service.d.ts +48 -0
  88. package/dist/services/app-installation.service.d.ts.map +1 -0
  89. package/dist/services/app-installation.service.js +411 -0
  90. package/dist/services/app-installation.service.js.map +1 -0
  91. package/dist/services/app-instance.service.d.ts +34 -0
  92. package/dist/services/app-instance.service.d.ts.map +1 -0
  93. package/dist/{host → services}/app-instance.service.js +4 -4
  94. package/dist/services/app-instance.service.js.map +1 -0
  95. package/dist/{manifest → services}/app-manifest.service.d.ts +12 -2
  96. package/dist/services/app-manifest.service.d.ts.map +1 -0
  97. package/dist/services/app-manifest.service.js +271 -0
  98. package/dist/services/app-manifest.service.js.map +1 -0
  99. package/dist/{publish → services}/app-marketplace-client.service.d.ts +2 -2
  100. package/dist/services/app-marketplace-client.service.d.ts.map +1 -0
  101. package/dist/{publish → services}/app-marketplace-client.service.js +2 -2
  102. package/dist/services/app-marketplace-client.service.js.map +1 -0
  103. package/dist/{publish → services}/app-marketplace-metadata.service.d.ts +7 -3
  104. package/dist/services/app-marketplace-metadata.service.d.ts.map +1 -0
  105. package/dist/{publish → services}/app-marketplace-metadata.service.js +45 -3
  106. package/dist/services/app-marketplace-metadata.service.js.map +1 -0
  107. package/dist/{permissions → services}/app-permissions.service.d.ts +3 -3
  108. package/dist/services/app-permissions.service.d.ts.map +1 -0
  109. package/dist/{permissions → services}/app-permissions.service.js +4 -1
  110. package/dist/services/app-permissions.service.js.map +1 -0
  111. package/dist/{publish → services}/app-publish-validation.service.d.ts +9 -7
  112. package/dist/services/app-publish-validation.service.d.ts.map +1 -0
  113. package/dist/{publish → services}/app-publish-validation.service.js +14 -10
  114. package/dist/services/app-publish-validation.service.js.map +1 -0
  115. package/dist/{publish → services}/app-publish.service.d.ts +5 -5
  116. package/dist/services/app-publish.service.d.ts.map +1 -0
  117. package/dist/{publish → services}/app-publish.service.js +10 -7
  118. package/dist/services/app-publish.service.js.map +1 -0
  119. package/dist/{registry → services}/app-registry-config.service.d.ts +3 -3
  120. package/dist/{registry → services}/app-registry-config.service.d.ts.map +1 -1
  121. package/dist/{registry → services}/app-registry-config.service.js +3 -3
  122. package/dist/services/app-registry-config.service.js.map +1 -0
  123. package/dist/{registry → services}/app-registry.service.d.ts +20 -5
  124. package/dist/services/app-registry.service.d.ts.map +1 -0
  125. package/dist/services/app-registry.service.js +228 -0
  126. package/dist/services/app-registry.service.js.map +1 -0
  127. package/dist/{registry → services}/app-remote-registry-client.service.d.ts +6 -2
  128. package/dist/services/app-remote-registry-client.service.d.ts.map +1 -0
  129. package/dist/{registry → services}/app-remote-registry-client.service.js +54 -8
  130. package/dist/services/app-remote-registry-client.service.js.map +1 -0
  131. package/dist/{cli → services}/app-runtime-cli.service.d.ts +1 -1
  132. package/dist/services/app-runtime-cli.service.d.ts.map +1 -0
  133. package/dist/{cli → services}/app-runtime-cli.service.js +19 -19
  134. package/dist/services/app-runtime-cli.service.js.map +1 -0
  135. package/dist/{cli → services}/app-runtime-options.service.d.ts +6 -6
  136. package/dist/services/app-runtime-options.service.d.ts.map +1 -0
  137. package/dist/{cli → services}/app-runtime-options.service.js +3 -9
  138. package/dist/services/app-runtime-options.service.js.map +1 -0
  139. package/dist/{runtime → services}/app-runtime-toolchain.service.d.ts +1 -1
  140. package/dist/services/app-runtime-toolchain.service.d.ts.map +1 -0
  141. package/dist/{runtime → services}/app-runtime-toolchain.service.js +1 -1
  142. package/dist/services/app-runtime-toolchain.service.js.map +1 -0
  143. package/dist/{scaffold → services}/app-scaffold.service.d.ts +1 -1
  144. package/dist/{scaffold → services}/app-scaffold.service.d.ts.map +1 -1
  145. package/dist/{scaffold → services}/app-scaffold.service.js +1 -1
  146. package/dist/{scaffold → services}/app-scaffold.service.js.map +1 -1
  147. package/dist/{scaffold → services}/app-ts-http-lite-scaffold-template.service.d.ts +1 -1
  148. package/dist/{scaffold → services}/app-ts-http-lite-scaffold-template.service.d.ts.map +1 -1
  149. package/dist/{scaffold → services}/app-ts-http-lite-scaffold-template.service.js +1 -1
  150. package/dist/{scaffold → services}/app-ts-http-lite-scaffold-template.service.js.map +1 -1
  151. package/dist/{scaffold → services}/app-ts-http-scaffold-template.service.d.ts +1 -1
  152. package/dist/{scaffold → services}/app-ts-http-scaffold-template.service.d.ts.map +1 -1
  153. package/dist/{scaffold → services}/app-ts-http-scaffold-template.service.js +1 -1
  154. package/dist/{scaffold → services}/app-ts-http-scaffold-template.service.js.map +1 -1
  155. package/dist/{bridge → services}/host-bridge.service.d.ts +2 -2
  156. package/dist/services/host-bridge.service.d.ts.map +1 -0
  157. package/dist/{bridge → services}/host-bridge.service.js +1 -1
  158. package/dist/services/host-bridge.service.js.map +1 -0
  159. package/dist/services/main-runner.service.d.ts +9 -0
  160. package/dist/services/main-runner.service.d.ts.map +1 -0
  161. package/dist/services/main-runner.service.js +6 -0
  162. package/dist/services/main-runner.service.js.map +1 -0
  163. package/dist/{publish → services}/platform-auth-state.service.d.ts +1 -1
  164. package/dist/services/platform-auth-state.service.d.ts.map +1 -0
  165. package/dist/{publish → services}/platform-auth-state.service.js +1 -1
  166. package/dist/services/platform-auth-state.service.js.map +1 -0
  167. package/dist/{ui → services}/ui-server.service.d.ts +3 -3
  168. package/dist/services/ui-server.service.d.ts.map +1 -0
  169. package/dist/{ui → services}/ui-server.service.js +1 -1
  170. package/dist/services/ui-server.service.js.map +1 -0
  171. package/dist/{runtime → services}/wasm-main-runner.service.d.ts +3 -3
  172. package/dist/services/wasm-main-runner.service.d.ts.map +1 -0
  173. package/dist/{runtime → services}/wasm-main-runner.service.js +2 -2
  174. package/dist/services/wasm-main-runner.service.js.map +1 -0
  175. package/dist/{sidecar → services}/wasm-sidecar-client.service.d.ts +1 -1
  176. package/dist/services/wasm-sidecar-client.service.d.ts.map +1 -0
  177. package/dist/{sidecar → services}/wasm-sidecar-client.service.js +1 -1
  178. package/dist/services/wasm-sidecar-client.service.js.map +1 -0
  179. package/dist/{runtime → services}/wasmtime-wasi-http-component.service.d.ts +1 -1
  180. package/dist/services/wasmtime-wasi-http-component.service.d.ts.map +1 -0
  181. package/dist/{runtime → services}/wasmtime-wasi-http-component.service.js +1 -1
  182. package/dist/services/wasmtime-wasi-http-component.service.js.map +1 -0
  183. package/dist/{bundle → types}/app-bundle.types.d.ts +1 -1
  184. package/dist/types/app-bundle.types.d.ts.map +1 -0
  185. package/dist/{install → types}/app-installation.types.d.ts +29 -7
  186. package/dist/types/app-installation.types.d.ts.map +1 -0
  187. package/dist/types/app-manifest.types.d.ts +119 -0
  188. package/dist/types/app-manifest.types.d.ts.map +1 -0
  189. package/dist/types/app-manifest.types.js +11 -0
  190. package/dist/types/app-manifest.types.js.map +1 -0
  191. package/dist/{permissions → types}/app-permissions.types.d.ts +2 -2
  192. package/dist/types/app-permissions.types.d.ts.map +1 -0
  193. package/dist/{publish → types}/app-publish.types.d.ts +11 -5
  194. package/dist/types/app-publish.types.d.ts.map +1 -0
  195. package/dist/{publish → types}/app-publish.types.js +1 -1
  196. package/dist/types/app-publish.types.js.map +1 -0
  197. package/dist/{registry → types}/app-registry.types.d.ts +11 -4
  198. package/dist/types/app-registry.types.d.ts.map +1 -0
  199. package/dist/{registry → types}/app-remote-registry.types.d.ts +3 -3
  200. package/dist/types/app-remote-registry.types.d.ts.map +1 -0
  201. package/dist/{registry → types}/app-remote-registry.types.js +1 -1
  202. package/dist/types/app-remote-registry.types.js.map +1 -0
  203. package/dist/{runtime → types}/main-runner.types.d.ts +3 -3
  204. package/dist/types/main-runner.types.d.ts.map +1 -0
  205. package/package.json +10 -3
  206. package/dist/bridge/host-bridge.service.d.ts.map +0 -1
  207. package/dist/bridge/host-bridge.service.js.map +0 -1
  208. package/dist/bundle/app-bundle.service.d.ts.map +0 -1
  209. package/dist/bundle/app-bundle.service.js +0 -196
  210. package/dist/bundle/app-bundle.service.js.map +0 -1
  211. package/dist/bundle/app-bundle.types.d.ts.map +0 -1
  212. package/dist/cli/app-runtime-cli.service.d.ts.map +0 -1
  213. package/dist/cli/app-runtime-cli.service.js.map +0 -1
  214. package/dist/cli/app-runtime-options.service.d.ts.map +0 -1
  215. package/dist/cli/app-runtime-options.service.js.map +0 -1
  216. package/dist/commands/create.controller.d.ts.map +0 -1
  217. package/dist/commands/create.controller.js.map +0 -1
  218. package/dist/commands/dev.controller.js.map +0 -1
  219. package/dist/commands/grant.controller.d.ts.map +0 -1
  220. package/dist/commands/grant.controller.js.map +0 -1
  221. package/dist/commands/info.controller.d.ts.map +0 -1
  222. package/dist/commands/info.controller.js.map +0 -1
  223. package/dist/commands/inspect.controller.js.map +0 -1
  224. package/dist/commands/install.controller.d.ts.map +0 -1
  225. package/dist/commands/install.controller.js.map +0 -1
  226. package/dist/commands/list.controller.d.ts.map +0 -1
  227. package/dist/commands/list.controller.js.map +0 -1
  228. package/dist/commands/pack.controller.d.ts +0 -17
  229. package/dist/commands/pack.controller.d.ts.map +0 -1
  230. package/dist/commands/pack.controller.js.map +0 -1
  231. package/dist/commands/permissions.controller.d.ts.map +0 -1
  232. package/dist/commands/permissions.controller.js.map +0 -1
  233. package/dist/commands/publish.controller.d.ts.map +0 -1
  234. package/dist/commands/publish.controller.js.map +0 -1
  235. package/dist/commands/registry.controller.d.ts.map +0 -1
  236. package/dist/commands/registry.controller.js.map +0 -1
  237. package/dist/commands/revoke.controller.d.ts.map +0 -1
  238. package/dist/commands/revoke.controller.js.map +0 -1
  239. package/dist/commands/run.controller.js.map +0 -1
  240. package/dist/commands/uninstall.controller.d.ts.map +0 -1
  241. package/dist/commands/uninstall.controller.js.map +0 -1
  242. package/dist/commands/update.controller.d.ts.map +0 -1
  243. package/dist/commands/update.controller.js.map +0 -1
  244. package/dist/commands/validate-publish.controller.d.ts.map +0 -1
  245. package/dist/commands/validate-publish.controller.js.map +0 -1
  246. package/dist/host/app-host.service.d.ts.map +0 -1
  247. package/dist/host/app-host.service.js.map +0 -1
  248. package/dist/host/app-instance.service.d.ts +0 -34
  249. package/dist/host/app-instance.service.d.ts.map +0 -1
  250. package/dist/host/app-instance.service.js.map +0 -1
  251. package/dist/install/app-installation.service.d.ts +0 -41
  252. package/dist/install/app-installation.service.d.ts.map +0 -1
  253. package/dist/install/app-installation.service.js +0 -276
  254. package/dist/install/app-installation.service.js.map +0 -1
  255. package/dist/install/app-installation.types.d.ts.map +0 -1
  256. package/dist/main.js.map +0 -1
  257. package/dist/manifest/app-manifest.service.d.ts.map +0 -1
  258. package/dist/manifest/app-manifest.service.js +0 -147
  259. package/dist/manifest/app-manifest.service.js.map +0 -1
  260. package/dist/manifest/app-manifest.types.d.ts +0 -68
  261. package/dist/manifest/app-manifest.types.d.ts.map +0 -1
  262. package/dist/paths/app-home.service.d.ts.map +0 -1
  263. package/dist/paths/app-home.service.js.map +0 -1
  264. package/dist/permissions/app-grant.service.d.ts.map +0 -1
  265. package/dist/permissions/app-grant.service.js.map +0 -1
  266. package/dist/permissions/app-permissions.service.d.ts.map +0 -1
  267. package/dist/permissions/app-permissions.service.js.map +0 -1
  268. package/dist/permissions/app-permissions.types.d.ts.map +0 -1
  269. package/dist/publish/app-marketplace-client.service.d.ts.map +0 -1
  270. package/dist/publish/app-marketplace-client.service.js.map +0 -1
  271. package/dist/publish/app-marketplace-metadata.service.d.ts.map +0 -1
  272. package/dist/publish/app-marketplace-metadata.service.js.map +0 -1
  273. package/dist/publish/app-publish-validation.service.d.ts.map +0 -1
  274. package/dist/publish/app-publish-validation.service.js.map +0 -1
  275. package/dist/publish/app-publish.service.d.ts.map +0 -1
  276. package/dist/publish/app-publish.service.js.map +0 -1
  277. package/dist/publish/app-publish.types.d.ts.map +0 -1
  278. package/dist/publish/app-publish.types.js.map +0 -1
  279. package/dist/publish/platform-auth-state.service.d.ts.map +0 -1
  280. package/dist/publish/platform-auth-state.service.js.map +0 -1
  281. package/dist/registry/app-registry-config.service.js.map +0 -1
  282. package/dist/registry/app-registry.service.d.ts.map +0 -1
  283. package/dist/registry/app-registry.service.js +0 -118
  284. package/dist/registry/app-registry.service.js.map +0 -1
  285. package/dist/registry/app-registry.types.d.ts.map +0 -1
  286. package/dist/registry/app-remote-registry-client.service.d.ts.map +0 -1
  287. package/dist/registry/app-remote-registry-client.service.js.map +0 -1
  288. package/dist/registry/app-remote-registry.types.d.ts.map +0 -1
  289. package/dist/registry/app-remote-registry.types.js.map +0 -1
  290. package/dist/runtime/app-build.service.d.ts.map +0 -1
  291. package/dist/runtime/app-build.service.js.map +0 -1
  292. package/dist/runtime/app-runtime-toolchain.service.d.ts.map +0 -1
  293. package/dist/runtime/app-runtime-toolchain.service.js.map +0 -1
  294. package/dist/runtime/main-runner.service.d.ts +0 -9
  295. package/dist/runtime/main-runner.service.d.ts.map +0 -1
  296. package/dist/runtime/main-runner.service.js +0 -6
  297. package/dist/runtime/main-runner.service.js.map +0 -1
  298. package/dist/runtime/main-runner.types.d.ts.map +0 -1
  299. package/dist/runtime/wasm-main-runner.service.d.ts.map +0 -1
  300. package/dist/runtime/wasm-main-runner.service.js.map +0 -1
  301. package/dist/runtime/wasmtime-wasi-http-component.service.d.ts.map +0 -1
  302. package/dist/runtime/wasmtime-wasi-http-component.service.js.map +0 -1
  303. package/dist/sidecar/wasm-sidecar-client.service.d.ts.map +0 -1
  304. package/dist/sidecar/wasm-sidecar-client.service.js.map +0 -1
  305. package/dist/ui/ui-server.service.d.ts.map +0 -1
  306. package/dist/ui/ui-server.service.js.map +0 -1
  307. /package/dist/{main.d.ts → app/main.d.ts} +0 -0
@@ -1,9 +1,13 @@
1
- import { AppManifest, AppPermissions } from "../manifest/app-manifest.types.js";
2
- import { AppDistributionMode } from "../bundle/app-bundle.types.js";
3
- import { AppPublisher } from "../registry/app-remote-registry.types.js";
1
+ import { AppManifest, AppPermissions } from "./app-manifest.types.js";
2
+ import { AppDistributionMode } from "./app-bundle.types.js";
3
+ import { AppPublisher } from "./app-remote-registry.types.js";
4
4
 
5
- //#region src/publish/app-publish.types.d.ts
5
+ //#region src/types/app-publish.types.d.ts
6
6
  declare const DEFAULT_APP_MARKETPLACE_API_BASE = "https://apps-registry.nextclaw.io";
7
+ type AppMarketplaceVisuals = {
8
+ cover: string;
9
+ accentColor: string;
10
+ };
7
11
  type AppMarketplaceMetadata = {
8
12
  slug: string;
9
13
  summary: string;
@@ -16,6 +20,7 @@ type AppMarketplaceMetadata = {
16
20
  homepage?: string;
17
21
  featured?: boolean;
18
22
  publisher?: AppPublisher;
23
+ visuals?: AppMarketplaceVisuals;
19
24
  };
20
25
  type AppPublishFile = {
21
26
  path: string;
@@ -36,6 +41,7 @@ type AppPublishPayload = {
36
41
  homepage?: string;
37
42
  featured: boolean;
38
43
  publisher: AppPublisher;
44
+ visuals?: AppMarketplaceVisuals;
39
45
  distributionMode: AppDistributionMode;
40
46
  manifest: AppManifest;
41
47
  permissions: AppPermissions;
@@ -66,5 +72,5 @@ type AppPublishResult = {
66
72
  fileCount: number;
67
73
  };
68
74
  //#endregion
69
- export { AppMarketplaceMetadata, AppPublishFile, AppPublishPayload, AppPublishResult, DEFAULT_APP_MARKETPLACE_API_BASE };
75
+ export { AppMarketplaceMetadata, AppMarketplaceVisuals, AppPublishFile, AppPublishPayload, AppPublishResult, DEFAULT_APP_MARKETPLACE_API_BASE };
70
76
  //# sourceMappingURL=app-publish.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-publish.types.d.ts","names":[],"sources":["../../src/types/app-publish.types.ts"],"mappings":";;;;;cAIa,gCAAA;AAAA,KAED,qBAAA;EACV,KAAA;EACA,WAAA;AAAA;AAAA,KAGU,sBAAA;EACV,IAAA;EACA,OAAA;EACA,WAAA,EAAa,MAAA;EACb,WAAA;EACA,eAAA,GAAkB,MAAA;EAClB,MAAA;EACA,IAAA;EACA,UAAA;EACA,QAAA;EACA,QAAA;EACA,SAAA,GAAY,YAAA;EACZ,OAAA,GAAU,qBAAA;AAAA;AAAA,KAGA,cAAA;EACV,IAAA;EACA,aAAA;AAAA;AAAA,KAGU,iBAAA;EACV,IAAA;EACA,KAAA;EACA,IAAA;EACA,OAAA;EACA,OAAA;EACA,WAAA,EAAa,MAAA;EACb,WAAA;EACA,eAAA,GAAkB,MAAA;EAClB,MAAA;EACA,IAAA;EACA,UAAA;EACA,QAAA;EACA,QAAA;EACA,SAAA,EAAW,YAAA;EACX,OAAA,GAAU,qBAAA;EACV,gBAAA,EAAkB,mBAAA;EAClB,QAAA,EAAU,WAAA;EACV,WAAA,EAAa,cAAA;EACb,YAAA;EACA,YAAA;EACA,KAAA,EAAO,cAAA;AAAA;AAAA,KAGG,gBAAA;EACV,OAAA;EACA,IAAA;IACE,IAAA;IACA,KAAA;IACA,IAAA;IACA,aAAA;IACA,MAAA;IACA,OAAA;MACE,IAAA;MACA,IAAA;MACA,OAAA;MACA,QAAA;IAAA;EAAA;EAGJ,YAAA;IACE,IAAA;IACA,MAAA;IACA,IAAA,EAAM,mBAAA;EAAA;EAER,SAAA;AAAA"}
@@ -1,4 +1,4 @@
1
- //#region src/publish/app-publish.types.ts
1
+ //#region src/types/app-publish.types.ts
2
2
  const DEFAULT_APP_MARKETPLACE_API_BASE = "https://apps-registry.nextclaw.io";
3
3
  //#endregion
4
4
  export { DEFAULT_APP_MARKETPLACE_API_BASE };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-publish.types.js","names":[],"sources":["../../src/types/app-publish.types.ts"],"sourcesContent":["import type { AppDistributionMode } from \"#app-runtime/types/app-bundle.types.js\";\nimport type { AppManifest, AppPermissions } from \"#app-runtime/types/app-manifest.types.js\";\nimport type { AppPublisher } from \"#app-runtime/types/app-remote-registry.types.js\";\n\nexport const DEFAULT_APP_MARKETPLACE_API_BASE = \"https://apps-registry.nextclaw.io\";\n\nexport type AppMarketplaceVisuals = {\n cover: string;\n accentColor: string;\n};\n\nexport type AppMarketplaceMetadata = {\n slug: string;\n summary: string;\n summaryI18n: Record<string, string>;\n description?: string;\n descriptionI18n?: Record<string, string>;\n author: string;\n tags: string[];\n sourceRepo?: string;\n homepage?: string;\n featured?: boolean;\n publisher?: AppPublisher;\n visuals?: AppMarketplaceVisuals;\n};\n\nexport type AppPublishFile = {\n path: string;\n contentBase64: string;\n};\n\nexport type AppPublishPayload = {\n slug: string;\n appId: string;\n name: string;\n version: string;\n summary: string;\n summaryI18n: Record<string, string>;\n description?: string;\n descriptionI18n?: Record<string, string>;\n author: string;\n tags: string[];\n sourceRepo?: string;\n homepage?: string;\n featured: boolean;\n publisher: AppPublisher;\n visuals?: AppMarketplaceVisuals;\n distributionMode: AppDistributionMode;\n manifest: AppManifest;\n permissions: AppPermissions;\n bundleBase64: string;\n bundleSha256: string;\n files: AppPublishFile[];\n};\n\nexport type AppPublishResult = {\n created: boolean;\n item: {\n slug: string;\n appId: string;\n name: string;\n latestVersion: string;\n webUrl?: string;\n install: {\n kind: \"registry\";\n spec: string;\n command: string;\n registry: string;\n };\n };\n distribution: {\n path: string;\n sha256: string;\n mode: AppDistributionMode;\n };\n fileCount: number;\n};\n"],"mappings":";AAIA,MAAa,mCAAmC"}
@@ -1,9 +1,9 @@
1
- import { AppPermissions } from "../manifest/app-manifest.types.js";
2
- import { AppDistributionMode } from "../bundle/app-bundle.types.js";
3
- import { AppDocumentGrantMap } from "../permissions/app-permissions.types.js";
1
+ import { AppPermissions, AppResolvedComponent } from "./app-manifest.types.js";
2
+ import { AppDistributionMode } from "./app-bundle.types.js";
3
+ import { AppDocumentGrantMap } from "./app-permissions.types.js";
4
4
  import { AppPublisher } from "./app-remote-registry.types.js";
5
5
 
6
- //#region src/registry/app-registry.types.d.ts
6
+ //#region src/types/app-registry.types.d.ts
7
7
  type AppInstallSourceKind = "bundle" | "directory" | "registry";
8
8
  type AppRegistryInstalledVersion = {
9
9
  version: string;
@@ -17,12 +17,16 @@ type AppRegistryInstalledVersion = {
17
17
  bundleUrl?: string;
18
18
  sha256?: string;
19
19
  publisher?: AppPublisher;
20
+ manifestSchemaVersion: 1 | 2;
21
+ components?: AppResolvedComponent[];
22
+ primaryPanelId?: string;
20
23
  };
21
24
  type AppRegistryAppRecord = {
22
25
  appId: string;
23
26
  name: string;
24
27
  description?: string;
25
28
  activeVersion: string;
29
+ enabled: boolean;
26
30
  dataDirectory: string;
27
31
  installedVersions: Record<string, AppRegistryInstalledVersion>;
28
32
  grants: AppDocumentGrantMap;
@@ -30,6 +34,9 @@ type AppRegistryAppRecord = {
30
34
  type AppRegistry = {
31
35
  schemaVersion: 1;
32
36
  apps: Record<string, AppRegistryAppRecord>;
37
+ suppressedBuiltIns: Record<string, {
38
+ suppressedAt: string;
39
+ }>;
33
40
  };
34
41
  //#endregion
35
42
  export { AppInstallSourceKind, AppRegistry, AppRegistryAppRecord, AppRegistryInstalledVersion };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-registry.types.d.ts","names":[],"sources":["../../src/types/app-registry.types.ts"],"mappings":";;;;;;KAKY,oBAAA;AAAA,KAEA,2BAAA;EACV,OAAA;EACA,gBAAA;EACA,UAAA,EAAY,oBAAA;EACZ,SAAA;EACA,WAAA;EACA,gBAAA,GAAmB,mBAAA;EACnB,WAAA,EAAa,cAAA;EACb,WAAA;EACA,SAAA;EACA,MAAA;EACA,SAAA,GAAY,YAAA;EACZ,qBAAA;EACA,UAAA,GAAa,oBAAA;EACb,cAAA;AAAA;AAAA,KAGU,oBAAA;EACV,KAAA;EACA,IAAA;EACA,WAAA;EACA,aAAA;EACA,OAAA;EACA,aAAA;EACA,iBAAA,EAAmB,MAAA,SAAe,2BAAA;EAClC,MAAA,EAAQ,mBAAA;AAAA;AAAA,KAGE,WAAA;EACV,aAAA;EACA,IAAA,EAAM,MAAA,SAAe,oBAAA;EACrB,kBAAA,EAAoB,MAAA;IAClB,YAAA;EAAA;AAAA"}
@@ -1,7 +1,7 @@
1
- import { AppPermissions } from "../manifest/app-manifest.types.js";
2
- import { AppDistributionMode } from "../bundle/app-bundle.types.js";
1
+ import { AppPermissions } from "./app-manifest.types.js";
2
+ import { AppDistributionMode } from "./app-bundle.types.js";
3
3
 
4
- //#region src/registry/app-remote-registry.types.d.ts
4
+ //#region src/types/app-remote-registry.types.d.ts
5
5
  declare const DEFAULT_APP_REGISTRY_URL = "https://apps-registry.nextclaw.io/api/v1/apps/registry/";
6
6
  type AppPublisher = {
7
7
  id: string;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-remote-registry.types.d.ts","names":[],"sources":["../../src/types/app-remote-registry.types.ts"],"mappings":";;;;cAGa,wBAAA;AAAA,KAGD,YAAA;EACV,EAAA;EACA,IAAA;EACA,GAAA;AAAA;AAAA,KAGU,iBAAA;EACV,aAAA;EACA,QAAA;IACE,GAAA;EAAA;AAAA;AAAA,KAIQ,yBAAA;EACV,UAAA;EACA,UAAA;EACA,MAAA;AAAA;AAAA,KAGU,wBAAA;EACV,IAAA;EACA,OAAA;EACA,WAAA;EACA,SAAA,GAAY,YAAA;EACZ,WAAA,GAAc,cAAA;EACd,IAAA;IACE,IAAA,GAAO,mBAAA;IACP,QAAA;IACA,MAAA;IACA,MAAA;IACA,MAAA;EAAA;AAAA;AAAA,KAIQ,yBAAA;EACV,IAAA;EACA,WAAA;EACA,WAAA;IACE,MAAA;EAAA;EAEF,QAAA,EAAU,MAAA,SAAe,wBAAA;AAAA;AAAA,KAGf,2BAAA;EACV,WAAA;EACA,WAAA;EACA,KAAA;EACA,OAAA;EACA,WAAA;EACA,SAAA,GAAY,YAAA;EACZ,WAAA,GAAc,cAAA;EACd,gBAAA,EAAkB,mBAAA;EAClB,SAAA;EACA,MAAA;AAAA"}
@@ -1,4 +1,4 @@
1
- //#region src/registry/app-remote-registry.types.ts
1
+ //#region src/types/app-remote-registry.types.ts
2
2
  const DEFAULT_APP_REGISTRY_URL = "https://apps-registry.nextclaw.io/api/v1/apps/registry/";
3
3
  //#endregion
4
4
  export { DEFAULT_APP_REGISTRY_URL };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-remote-registry.types.js","names":[],"sources":["../../src/types/app-remote-registry.types.ts"],"sourcesContent":["import type { AppPermissions } from \"#app-runtime/types/app-manifest.types.js\";\nimport type { AppDistributionMode } from \"#app-runtime/types/app-bundle.types.js\";\n\nexport const DEFAULT_APP_REGISTRY_URL =\n \"https://apps-registry.nextclaw.io/api/v1/apps/registry/\";\n\nexport type AppPublisher = {\n id: string;\n name: string;\n url?: string;\n};\n\nexport type AppRegistryConfig = {\n schemaVersion: 1;\n registry: {\n url: string;\n };\n};\n\nexport type AppRegistryConfigSnapshot = {\n defaultUrl: string;\n currentUrl: string;\n source: \"default\" | \"config\" | \"env\";\n};\n\nexport type AppRemoteRegistryVersion = {\n name: string;\n version: string;\n description?: string;\n publisher?: AppPublisher;\n permissions?: AppPermissions;\n dist: {\n kind?: AppDistributionMode;\n artifact?: string;\n bundle: string;\n source?: string;\n sha256: string;\n };\n};\n\nexport type AppRemoteRegistryDocument = {\n name: string;\n description?: string;\n \"dist-tags\": {\n latest: string;\n };\n versions: Record<string, AppRemoteRegistryVersion>;\n};\n\nexport type AppRemoteRegistryResolution = {\n registryUrl: string;\n metadataUrl: string;\n appId: string;\n version: string;\n description?: string;\n publisher?: AppPublisher;\n permissions?: AppPermissions;\n distributionMode: AppDistributionMode;\n bundleUrl: string;\n sha256: string;\n};\n"],"mappings":";AAGA,MAAa,2BACX"}
@@ -1,12 +1,12 @@
1
- import { AppManifestBundle } from "../manifest/app-manifest.types.js";
1
+ import { AppStandaloneManifestBundle } from "./app-manifest.types.js";
2
2
 
3
- //#region src/runtime/main-runner.types.d.ts
3
+ //#region src/types/main-runner.types.d.ts
4
4
  type WasmDocumentSummaryInput = {
5
5
  documentCount: number;
6
6
  textBytes: number;
7
7
  };
8
8
  type MainRunRequest = {
9
- bundle: AppManifestBundle;
9
+ bundle: AppStandaloneManifestBundle;
10
10
  input: WasmDocumentSummaryInput;
11
11
  };
12
12
  type MainRunResult = {
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main-runner.types.d.ts","names":[],"sources":["../../src/types/main-runner.types.ts"],"mappings":";;;KAEY,wBAAA;EACV,aAAA;EACA,SAAA;AAAA;AAAA,KAGU,cAAA;EACV,MAAA,EAAQ,2BAAA;EACR,KAAA,EAAO,wBAAA;AAAA;AAAA,KAGG,aAAA;EACV,UAAA;EACA,MAAA;AAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nextclaw/app-runtime",
3
- "version": "0.9.13",
3
+ "version": "0.9.15",
4
4
  "private": false,
5
5
  "description": "Standalone micro app runtime and CLI for NextClaw apps.",
6
6
  "type": "module",
@@ -22,7 +22,7 @@
22
22
  "cli"
23
23
  ],
24
24
  "bin": {
25
- "napp": "dist/main.js"
25
+ "napp": "dist/app/main.js"
26
26
  },
27
27
  "publishConfig": {
28
28
  "access": "public"
@@ -34,6 +34,13 @@
34
34
  "default": "./dist/index.js"
35
35
  }
36
36
  },
37
+ "imports": {
38
+ "#app-runtime/*.js": {
39
+ "types": "./src/*.ts",
40
+ "development": "./src/*.ts",
41
+ "default": "./dist/*.js"
42
+ }
43
+ },
37
44
  "files": [
38
45
  "dist",
39
46
  "README.md"
@@ -48,7 +55,7 @@
48
55
  "vitest": "^4.1.2"
49
56
  },
50
57
  "scripts": {
51
- "build": "tsdown src/index.ts src/main.ts --dts.sourcemap --clean --target es2022 --no-fixedExtension --unbundle",
58
+ "build": "tsdown src/index.ts src/app/main.ts --dts.sourcemap --clean --target es2022 --no-fixedExtension --unbundle",
52
59
  "lint": "eslint .",
53
60
  "tsc": "tsc -p tsconfig.json",
54
61
  "test": "vitest run",
@@ -1 +0,0 @@
1
- {"version":3,"file":"host-bridge.service.d.ts","names":[],"sources":["../../src/bridge/host-bridge.service.ts"],"mappings":";;;;cAGa,gBAAA;EAAA,iBACkB,WAAA;cAAA,WAAA,EAAa,kBAAA;EAE1C,MAAA,GACE,OAAA,EAAS,eAAA,EACT,QAAA,EAAU,cAAA,KACT,OAAA;EAAA,QA4CK,YAAA;EAAA,QAYA,SAAA;AAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"host-bridge.service.js","names":[],"sources":["../../src/bridge/host-bridge.service.ts"],"sourcesContent":["import type { IncomingMessage, ServerResponse } from \"node:http\";\nimport type { AppInstanceService } from \"../host/app-instance.service.js\";\n\nexport class HostBridgeServer {\n constructor(private readonly appInstance: AppInstanceService) {}\n\n handle = async (\n request: IncomingMessage,\n response: ServerResponse,\n ): Promise<boolean> => {\n const requestUrl = new URL(request.url ?? \"/\", \"http://127.0.0.1\");\n if (!requestUrl.pathname.startsWith(\"/__napp\")) {\n return false;\n }\n\n if (request.method === \"GET\" && requestUrl.pathname === \"/__napp/health\") {\n this.writeJson(response, 200, { ok: true });\n return true;\n }\n\n if (request.method === \"GET\" && requestUrl.pathname === \"/__napp/manifest\") {\n this.writeJson(response, 200, {\n ok: true,\n manifest: this.appInstance.summarizeManifest(),\n });\n return true;\n }\n\n if (request.method === \"GET\" && requestUrl.pathname === \"/__napp/permissions\") {\n this.writeJson(response, 200, {\n ok: true,\n permissions: this.appInstance.summarizePermissions(),\n });\n return true;\n }\n\n if (request.method === \"POST\" && requestUrl.pathname === \"/__napp/run\") {\n const body = await this.readJsonBody<{ action?: string }>(request);\n const result = await this.appInstance.runAction(body.action);\n this.writeJson(response, 200, { ok: true, result });\n return true;\n }\n\n this.writeJson(response, 404, {\n ok: false,\n error: {\n code: \"NOT_FOUND\",\n message: `Unknown bridge path: ${requestUrl.pathname}`,\n },\n });\n return true;\n };\n\n private readJsonBody = async <T>(request: IncomingMessage): Promise<T> => {\n const chunks: Buffer[] = [];\n for await (const chunk of request) {\n chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));\n }\n const rawBody = Buffer.concat(chunks).toString(\"utf-8\").trim();\n if (!rawBody) {\n return {} as T;\n }\n return JSON.parse(rawBody) as T;\n };\n\n private writeJson = (\n response: ServerResponse,\n statusCode: number,\n payload: unknown,\n ): void => {\n response.writeHead(statusCode, {\n \"content-type\": \"application/json; charset=utf-8\",\n \"cache-control\": \"no-store\",\n });\n response.end(JSON.stringify(payload, null, 2));\n };\n}\n"],"mappings":";AAGA,IAAa,mBAAb,MAA8B;CAC5B,YAAY,aAAkD;AAAjC,OAAA,cAAA;;CAE7B,SAAS,OACP,SACA,aACqB;EACrB,MAAM,aAAa,IAAI,IAAI,QAAQ,OAAO,KAAK,mBAAmB;AAClE,MAAI,CAAC,WAAW,SAAS,WAAW,UAAU,CAC5C,QAAO;AAGT,MAAI,QAAQ,WAAW,SAAS,WAAW,aAAa,kBAAkB;AACxE,QAAK,UAAU,UAAU,KAAK,EAAE,IAAI,MAAM,CAAC;AAC3C,UAAO;;AAGT,MAAI,QAAQ,WAAW,SAAS,WAAW,aAAa,oBAAoB;AAC1E,QAAK,UAAU,UAAU,KAAK;IAC5B,IAAI;IACJ,UAAU,KAAK,YAAY,mBAAmB;IAC/C,CAAC;AACF,UAAO;;AAGT,MAAI,QAAQ,WAAW,SAAS,WAAW,aAAa,uBAAuB;AAC7E,QAAK,UAAU,UAAU,KAAK;IAC5B,IAAI;IACJ,aAAa,KAAK,YAAY,sBAAsB;IACrD,CAAC;AACF,UAAO;;AAGT,MAAI,QAAQ,WAAW,UAAU,WAAW,aAAa,eAAe;GACtE,MAAM,OAAO,MAAM,KAAK,aAAkC,QAAQ;GAClE,MAAM,SAAS,MAAM,KAAK,YAAY,UAAU,KAAK,OAAO;AAC5D,QAAK,UAAU,UAAU,KAAK;IAAE,IAAI;IAAM;IAAQ,CAAC;AACnD,UAAO;;AAGT,OAAK,UAAU,UAAU,KAAK;GAC5B,IAAI;GACJ,OAAO;IACL,MAAM;IACN,SAAS,wBAAwB,WAAW;IAC7C;GACF,CAAC;AACF,SAAO;;CAGT,eAAuB,OAAU,YAAyC;EACxE,MAAM,SAAmB,EAAE;AAC3B,aAAW,MAAM,SAAS,QACxB,QAAO,KAAK,OAAO,SAAS,MAAM,GAAG,QAAQ,OAAO,KAAK,MAAM,CAAC;EAElE,MAAM,UAAU,OAAO,OAAO,OAAO,CAAC,SAAS,QAAQ,CAAC,MAAM;AAC9D,MAAI,CAAC,QACH,QAAO,EAAE;AAEX,SAAO,KAAK,MAAM,QAAQ;;CAG5B,aACE,UACA,YACA,YACS;AACT,WAAS,UAAU,YAAY;GAC7B,gBAAgB;GAChB,iBAAiB;GAClB,CAAC;AACF,WAAS,IAAI,KAAK,UAAU,SAAS,MAAM,EAAE,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"app-bundle.service.d.ts","names":[],"sources":["../../src/bundle/app-bundle.service.ts"],"mappings":";;;;cAaa,gBAAA;EAAA,iBAEQ,eAAA;cAAA,eAAA,GAAiB,kBAAA;EAGpC,gBAAA,GAA0B,MAAA;IACxB,YAAA;IACA,UAAA;IACA,IAAA,GAAO,mBAAA;EAAA,MACL,OAAA,CAAQ,mBAAA;EAgDZ,aAAA,GAAuB,MAAA;IACrB,UAAA;IACA,eAAA;EAAA,MACE,OAAA,CAAQ,sBAAA;EAAA,QA+BJ,mBAAA;EAAA,QA2BA,kBAAA;EAAA,QA0BA,qBAAA;EAAA,QAuBA,2BAAA;EAAA,QA8BA,uBAAA;EAAA,QAaA,aAAA;EAAA,QAiBA,iBAAA;EAAA,QAYA,cAAA;EAAA,QAYA,aAAA;EAAA,QAIA,uBAAA;EAAA,QAIA,qBAAA;EAAA,QAQA,YAAA;EAAA,QAUA,eAAA;AAAA"}
@@ -1,196 +0,0 @@
1
- import { AppManifestService } from "../manifest/app-manifest.service.js";
2
- import { mkdir, readFile, readdir, rm, writeFile } from "node:fs/promises";
3
- import { createHash } from "node:crypto";
4
- import path from "node:path";
5
- import { strToU8, unzipSync, zipSync } from "fflate";
6
- //#region src/bundle/app-bundle.service.ts
7
- var AppBundleService = class {
8
- constructor(manifestService = new AppManifestService()) {
9
- this.manifestService = manifestService;
10
- }
11
- packAppDirectory = async (params) => {
12
- const { appDirectory, outputPath, mode: requestedMode } = params;
13
- const bundle = await this.manifestService.load(appDirectory);
14
- const mode = requestedMode ?? "bundle";
15
- const { appFiles, filePaths } = mode === "source" ? await this.collectSourceFiles(bundle) : await this.collectRuntimeFiles(bundle);
16
- const metadata = this.buildMetadata(bundle.manifest.id, bundle.manifest.name, bundle.manifest.version, mode);
17
- const bundleJsonPath = ".napp/bundle.json";
18
- const checksumsJsonPath = ".napp/checksums.json";
19
- const bundleJsonBytes = strToU8(`${JSON.stringify(metadata, null, 2)}\n`);
20
- const checksums = this.buildChecksums({
21
- ...appFiles,
22
- [bundleJsonPath]: bundleJsonBytes
23
- });
24
- const checksumsJsonBytes = strToU8(`${JSON.stringify(checksums, null, 2)}\n`);
25
- const archiveBytes = zipSync({
26
- ...appFiles,
27
- [bundleJsonPath]: bundleJsonBytes,
28
- [checksumsJsonPath]: checksumsJsonBytes
29
- }, { level: 9 });
30
- const resolvedOutputPath = outputPath ? path.resolve(outputPath) : path.join(path.dirname(bundle.appDirectory), `${this.normalizeBundleFileName(bundle.manifest.id)}-${bundle.manifest.version}.napp`);
31
- await mkdir(path.dirname(resolvedOutputPath), { recursive: true });
32
- await writeFile(resolvedOutputPath, Buffer.from(archiveBytes));
33
- return {
34
- bundlePath: resolvedOutputPath,
35
- metadata,
36
- sizeBytes: archiveBytes.byteLength,
37
- filePaths
38
- };
39
- };
40
- extractBundle = async (params) => {
41
- const bundlePath = path.resolve(params.bundlePath);
42
- const targetDirectory = path.resolve(params.targetDirectory);
43
- await rm(targetDirectory, {
44
- recursive: true,
45
- force: true
46
- });
47
- await mkdir(targetDirectory, { recursive: true });
48
- const archive = unzipSync(new Uint8Array(await readFile(bundlePath)));
49
- const entryNames = Object.keys(archive).sort((left, right) => left.localeCompare(right));
50
- for (const entryName of entryNames) {
51
- const normalizedEntry = this.normalizeArchiveEntry(entryName);
52
- const targetPath = path.join(targetDirectory, normalizedEntry);
53
- await mkdir(path.dirname(targetPath), { recursive: true });
54
- await writeFile(targetPath, Buffer.from(archive[entryName]));
55
- }
56
- const rawMetadata = await this.readJsonFile(path.join(targetDirectory, ".napp", "bundle.json"), "bundle metadata");
57
- const metadata = this.normalizeMetadata(rawMetadata);
58
- const checksums = await this.readJsonFile(path.join(targetDirectory, ".napp", "checksums.json"), "bundle checksums");
59
- await this.verifyChecksums(targetDirectory, checksums);
60
- await this.manifestService.load(targetDirectory);
61
- return {
62
- appDirectory: targetDirectory,
63
- metadata,
64
- checksums
65
- };
66
- };
67
- collectRuntimeFiles = async (bundle) => {
68
- const appDirectory = bundle.appDirectory;
69
- const filePaths = new Set([path.relative(appDirectory, bundle.manifestPath), path.relative(appDirectory, bundle.mainEntryPath)]);
70
- await this.collectDirectoryPaths(bundle.uiDirectoryPath, appDirectory, filePaths);
71
- await this.collectDirectoryPaths(bundle.assetsDirectoryPath, appDirectory, filePaths);
72
- if (bundle.iconPath) filePaths.add(path.relative(appDirectory, bundle.iconPath));
73
- const sortedPaths = Array.from(filePaths).sort((left, right) => left.localeCompare(right));
74
- const appFiles = {};
75
- for (const relativePath of sortedPaths) appFiles[relativePath] = new Uint8Array(await readFile(path.join(appDirectory, relativePath)));
76
- return {
77
- appFiles,
78
- filePaths: sortedPaths
79
- };
80
- };
81
- collectSourceFiles = async (bundle) => {
82
- const filePaths = /* @__PURE__ */ new Set();
83
- await this.collectSourceDirectoryPaths(bundle.appDirectory, bundle.appDirectory, filePaths);
84
- const sortedPaths = Array.from(filePaths).sort((left, right) => left.localeCompare(right));
85
- const appFiles = {};
86
- for (const relativePath of sortedPaths) {
87
- if (bundle.manifest.main.kind === "wasi-http-component" && relativePath === bundle.manifest.main.entry) {
88
- appFiles[relativePath] = SOURCE_WASM_PLACEHOLDER_BYTES;
89
- continue;
90
- }
91
- appFiles[relativePath] = new Uint8Array(await readFile(path.join(bundle.appDirectory, relativePath)));
92
- }
93
- return {
94
- appFiles,
95
- filePaths: sortedPaths
96
- };
97
- };
98
- collectDirectoryPaths = async (directoryPath, appDirectory, filePaths) => {
99
- try {
100
- const entries = await readdir(directoryPath, { withFileTypes: true });
101
- for (const entry of entries) {
102
- const entryPath = path.join(directoryPath, entry.name);
103
- if (entry.isDirectory()) {
104
- await this.collectDirectoryPaths(entryPath, appDirectory, filePaths);
105
- continue;
106
- }
107
- if (!entry.isFile()) continue;
108
- filePaths.add(path.relative(appDirectory, entryPath));
109
- }
110
- } catch {
111
- return;
112
- }
113
- };
114
- collectSourceDirectoryPaths = async (directoryPath, appDirectory, filePaths) => {
115
- try {
116
- const entries = await readdir(directoryPath, { withFileTypes: true });
117
- for (const entry of entries) {
118
- const entryPath = path.join(directoryPath, entry.name);
119
- const relativePath = path.relative(appDirectory, entryPath).replace(/\\/g, "/");
120
- if (entry.isDirectory()) {
121
- if (this.shouldExcludeSourcePath(relativePath)) continue;
122
- await this.collectSourceDirectoryPaths(entryPath, appDirectory, filePaths);
123
- continue;
124
- }
125
- if (!entry.isFile()) continue;
126
- if (this.shouldExcludeSourcePath(relativePath)) continue;
127
- filePaths.add(relativePath);
128
- }
129
- } catch {
130
- return;
131
- }
132
- };
133
- shouldExcludeSourcePath = (relativePath) => {
134
- return relativePath === ".napp" || relativePath.startsWith(".napp/") || relativePath === "main/node_modules" || relativePath.startsWith("main/node_modules/") || relativePath === "main/dist" || relativePath.startsWith("main/dist/") || relativePath === "main/generated" || relativePath.startsWith("main/generated/");
135
- };
136
- buildMetadata = (appId, name, version, distributionMode) => {
137
- return {
138
- bundleFormatVersion: 1,
139
- distributionMode,
140
- appId,
141
- name,
142
- version,
143
- entryManifest: "manifest.json",
144
- checksumsFile: ".napp/checksums.json"
145
- };
146
- };
147
- normalizeMetadata = (rawMetadata) => {
148
- return {
149
- bundleFormatVersion: 1,
150
- distributionMode: rawMetadata.distributionMode === "source" ? "source" : "bundle",
151
- appId: String(rawMetadata.appId ?? ""),
152
- name: String(rawMetadata.name ?? ""),
153
- version: String(rawMetadata.version ?? ""),
154
- entryManifest: "manifest.json",
155
- checksumsFile: ".napp/checksums.json"
156
- };
157
- };
158
- buildChecksums = (files) => {
159
- const entries = Object.entries(files).sort(([left], [right]) => left.localeCompare(right));
160
- return {
161
- algorithm: "sha256",
162
- files: Object.fromEntries(entries.map(([relativePath, fileBytes]) => [relativePath, this.computeSha256(fileBytes)]))
163
- };
164
- };
165
- computeSha256 = (fileBytes) => {
166
- return createHash("sha256").update(Buffer.from(fileBytes)).digest("hex");
167
- };
168
- normalizeBundleFileName = (appId) => {
169
- return appId.replace(/[^a-zA-Z0-9._-]+/g, "-");
170
- };
171
- normalizeArchiveEntry = (entryName) => {
172
- const normalized = entryName.replace(/\\/g, "/");
173
- if (!normalized || normalized.startsWith("/") || normalized.includes("../")) throw new Error(`bundle 内包含非法路径:${entryName}`);
174
- return normalized;
175
- };
176
- readJsonFile = async (filePath, label) => {
177
- try {
178
- return JSON.parse(await readFile(filePath, "utf-8"));
179
- } catch (error) {
180
- throw new Error(`无法读取 ${label}:${error instanceof Error ? error.message : String(error)}`);
181
- }
182
- };
183
- verifyChecksums = async (appDirectory, checksums) => {
184
- if (checksums.algorithm !== "sha256") throw new Error("当前只支持 sha256 checksums。");
185
- const entries = Object.entries(checksums.files).sort(([left], [right]) => left.localeCompare(right));
186
- for (const [relativePath, expectedHash] of entries) {
187
- const fileBytes = new Uint8Array(await readFile(path.join(appDirectory, relativePath)));
188
- if (this.computeSha256(fileBytes) !== expectedHash) throw new Error(`bundle checksum 校验失败:${relativePath}`);
189
- }
190
- };
191
- };
192
- const SOURCE_WASM_PLACEHOLDER_BYTES = Uint8Array.from(Buffer.from("AGFzbQEAAAABBwFgAn9/AX8DAgEABxMBD3N1bW1hcml6ZV9ub3RlcwAACg0BCwAgACABakHIAWoL", "base64"));
193
- //#endregion
194
- export { AppBundleService };
195
-
196
- //# sourceMappingURL=app-bundle.service.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"app-bundle.service.js","names":[],"sources":["../../src/bundle/app-bundle.service.ts"],"sourcesContent":["import { mkdir, readFile, readdir, rm, writeFile } from \"node:fs/promises\";\nimport { createHash } from \"node:crypto\";\nimport path from \"node:path\";\nimport { unzipSync, zipSync, strToU8 } from \"fflate\";\nimport { AppManifestService } from \"../manifest/app-manifest.service.js\";\nimport type {\n AppBundleChecksums,\n AppBundleExtractResult,\n AppBundleMetadata,\n AppBundlePackResult,\n AppDistributionMode,\n} from \"./app-bundle.types.js\";\n\nexport class AppBundleService {\n constructor(\n private readonly manifestService: AppManifestService = new AppManifestService(),\n ) {}\n\n packAppDirectory = async (params: {\n appDirectory: string;\n outputPath?: string;\n mode?: AppDistributionMode;\n }): Promise<AppBundlePackResult> => {\n const { appDirectory, outputPath, mode: requestedMode } = params;\n const bundle = await this.manifestService.load(appDirectory);\n const mode = requestedMode ?? \"bundle\";\n const { appFiles, filePaths } =\n mode === \"source\"\n ? await this.collectSourceFiles(bundle)\n : await this.collectRuntimeFiles(bundle);\n const metadata = this.buildMetadata(\n bundle.manifest.id,\n bundle.manifest.name,\n bundle.manifest.version,\n mode,\n );\n const bundleJsonPath = \".napp/bundle.json\";\n const checksumsJsonPath = \".napp/checksums.json\";\n const bundleJsonBytes = strToU8(`${JSON.stringify(metadata, null, 2)}\\n`);\n const checksums = this.buildChecksums({\n ...appFiles,\n [bundleJsonPath]: bundleJsonBytes,\n });\n const checksumsJsonBytes = strToU8(`${JSON.stringify(checksums, null, 2)}\\n`);\n const archiveBytes = zipSync(\n {\n ...appFiles,\n [bundleJsonPath]: bundleJsonBytes,\n [checksumsJsonPath]: checksumsJsonBytes,\n },\n {\n level: 9,\n },\n );\n const resolvedOutputPath = outputPath\n ? path.resolve(outputPath)\n : path.join(\n path.dirname(bundle.appDirectory),\n `${this.normalizeBundleFileName(bundle.manifest.id)}-${bundle.manifest.version}.napp`,\n );\n await mkdir(path.dirname(resolvedOutputPath), { recursive: true });\n await writeFile(resolvedOutputPath, Buffer.from(archiveBytes));\n return {\n bundlePath: resolvedOutputPath,\n metadata,\n sizeBytes: archiveBytes.byteLength,\n filePaths,\n };\n };\n\n extractBundle = async (params: {\n bundlePath: string;\n targetDirectory: string;\n }): Promise<AppBundleExtractResult> => {\n const bundlePath = path.resolve(params.bundlePath);\n const targetDirectory = path.resolve(params.targetDirectory);\n await rm(targetDirectory, { recursive: true, force: true });\n await mkdir(targetDirectory, { recursive: true });\n const archive = unzipSync(new Uint8Array(await readFile(bundlePath)));\n const entryNames = Object.keys(archive).sort((left, right) => left.localeCompare(right));\n for (const entryName of entryNames) {\n const normalizedEntry = this.normalizeArchiveEntry(entryName);\n const targetPath = path.join(targetDirectory, normalizedEntry);\n await mkdir(path.dirname(targetPath), { recursive: true });\n await writeFile(targetPath, Buffer.from(archive[entryName]));\n }\n const rawMetadata = await this.readJsonFile<Partial<AppBundleMetadata>>(\n path.join(targetDirectory, \".napp\", \"bundle.json\"),\n \"bundle metadata\",\n );\n const metadata = this.normalizeMetadata(rawMetadata);\n const checksums = await this.readJsonFile<AppBundleChecksums>(\n path.join(targetDirectory, \".napp\", \"checksums.json\"),\n \"bundle checksums\",\n );\n await this.verifyChecksums(targetDirectory, checksums);\n await this.manifestService.load(targetDirectory);\n return {\n appDirectory: targetDirectory,\n metadata,\n checksums,\n };\n };\n\n private collectRuntimeFiles = async (\n bundle: AppBundleMetadataBundleSource,\n ): Promise<{\n appFiles: Record<string, Uint8Array>;\n filePaths: string[];\n }> => {\n const appDirectory = bundle.appDirectory;\n const filePaths = new Set<string>([\n path.relative(appDirectory, bundle.manifestPath),\n path.relative(appDirectory, bundle.mainEntryPath),\n ]);\n await this.collectDirectoryPaths(bundle.uiDirectoryPath, appDirectory, filePaths);\n await this.collectDirectoryPaths(bundle.assetsDirectoryPath, appDirectory, filePaths);\n if (bundle.iconPath) {\n filePaths.add(path.relative(appDirectory, bundle.iconPath));\n }\n const sortedPaths = Array.from(filePaths).sort((left, right) => left.localeCompare(right));\n const appFiles: Record<string, Uint8Array> = {};\n for (const relativePath of sortedPaths) {\n appFiles[relativePath] = new Uint8Array(await readFile(path.join(appDirectory, relativePath)));\n }\n return {\n appFiles,\n filePaths: sortedPaths,\n };\n };\n\n private collectSourceFiles = async (\n bundle: AppBundleMetadataBundleSource,\n ): Promise<{\n appFiles: Record<string, Uint8Array>;\n filePaths: string[];\n }> => {\n const filePaths = new Set<string>();\n await this.collectSourceDirectoryPaths(bundle.appDirectory, bundle.appDirectory, filePaths);\n const sortedPaths = Array.from(filePaths).sort((left, right) => left.localeCompare(right));\n const appFiles: Record<string, Uint8Array> = {};\n for (const relativePath of sortedPaths) {\n if (\n bundle.manifest.main.kind === \"wasi-http-component\" &&\n relativePath === bundle.manifest.main.entry\n ) {\n appFiles[relativePath] = SOURCE_WASM_PLACEHOLDER_BYTES;\n continue;\n }\n appFiles[relativePath] = new Uint8Array(await readFile(path.join(bundle.appDirectory, relativePath)));\n }\n return {\n appFiles,\n filePaths: sortedPaths,\n };\n };\n\n private collectDirectoryPaths = async (\n directoryPath: string,\n appDirectory: string,\n filePaths: Set<string>,\n ): Promise<void> => {\n try {\n const entries = await readdir(directoryPath, { withFileTypes: true });\n for (const entry of entries) {\n const entryPath = path.join(directoryPath, entry.name);\n if (entry.isDirectory()) {\n await this.collectDirectoryPaths(entryPath, appDirectory, filePaths);\n continue;\n }\n if (!entry.isFile()) {\n continue;\n }\n filePaths.add(path.relative(appDirectory, entryPath));\n }\n } catch {\n return;\n }\n };\n\n private collectSourceDirectoryPaths = async (\n directoryPath: string,\n appDirectory: string,\n filePaths: Set<string>,\n ): Promise<void> => {\n try {\n const entries = await readdir(directoryPath, { withFileTypes: true });\n for (const entry of entries) {\n const entryPath = path.join(directoryPath, entry.name);\n const relativePath = path.relative(appDirectory, entryPath).replace(/\\\\/g, \"/\");\n if (entry.isDirectory()) {\n if (this.shouldExcludeSourcePath(relativePath)) {\n continue;\n }\n await this.collectSourceDirectoryPaths(entryPath, appDirectory, filePaths);\n continue;\n }\n if (!entry.isFile()) {\n continue;\n }\n if (this.shouldExcludeSourcePath(relativePath)) {\n continue;\n }\n filePaths.add(relativePath);\n }\n } catch {\n return;\n }\n };\n\n private shouldExcludeSourcePath = (relativePath: string): boolean => {\n return (\n relativePath === \".napp\" ||\n relativePath.startsWith(\".napp/\") ||\n relativePath === \"main/node_modules\" ||\n relativePath.startsWith(\"main/node_modules/\") ||\n relativePath === \"main/dist\" ||\n relativePath.startsWith(\"main/dist/\") ||\n relativePath === \"main/generated\" ||\n relativePath.startsWith(\"main/generated/\")\n );\n };\n\n private buildMetadata = (\n appId: string,\n name: string,\n version: string,\n distributionMode: AppDistributionMode,\n ): AppBundleMetadata => {\n return {\n bundleFormatVersion: 1,\n distributionMode,\n appId,\n name,\n version,\n entryManifest: \"manifest.json\",\n checksumsFile: \".napp/checksums.json\",\n };\n };\n\n private normalizeMetadata = (rawMetadata: Partial<AppBundleMetadata>): AppBundleMetadata => {\n return {\n bundleFormatVersion: 1,\n distributionMode: rawMetadata.distributionMode === \"source\" ? \"source\" : \"bundle\",\n appId: String(rawMetadata.appId ?? \"\"),\n name: String(rawMetadata.name ?? \"\"),\n version: String(rawMetadata.version ?? \"\"),\n entryManifest: \"manifest.json\",\n checksumsFile: \".napp/checksums.json\",\n };\n };\n\n private buildChecksums = (\n files: Record<string, Uint8Array>,\n ): AppBundleChecksums => {\n const entries = Object.entries(files).sort(([left], [right]) => left.localeCompare(right));\n return {\n algorithm: \"sha256\",\n files: Object.fromEntries(\n entries.map(([relativePath, fileBytes]) => [relativePath, this.computeSha256(fileBytes)]),\n ),\n };\n };\n\n private computeSha256 = (fileBytes: Uint8Array): string => {\n return createHash(\"sha256\").update(Buffer.from(fileBytes)).digest(\"hex\");\n };\n\n private normalizeBundleFileName = (appId: string): string => {\n return appId.replace(/[^a-zA-Z0-9._-]+/g, \"-\");\n };\n\n private normalizeArchiveEntry = (entryName: string): string => {\n const normalized = entryName.replace(/\\\\/g, \"/\");\n if (!normalized || normalized.startsWith(\"/\") || normalized.includes(\"../\")) {\n throw new Error(`bundle 内包含非法路径:${entryName}`);\n }\n return normalized;\n };\n\n private readJsonFile = async <T>(filePath: string, label: string): Promise<T> => {\n try {\n return JSON.parse(await readFile(filePath, \"utf-8\")) as T;\n } catch (error) {\n throw new Error(\n `无法读取 ${label}:${error instanceof Error ? error.message : String(error)}`,\n );\n }\n };\n\n private verifyChecksums = async (\n appDirectory: string,\n checksums: AppBundleChecksums,\n ): Promise<void> => {\n if (checksums.algorithm !== \"sha256\") {\n throw new Error(\"当前只支持 sha256 checksums。\");\n }\n const entries = Object.entries(checksums.files).sort(([left], [right]) => left.localeCompare(right));\n for (const [relativePath, expectedHash] of entries) {\n const fileBytes = new Uint8Array(await readFile(path.join(appDirectory, relativePath)));\n const actualHash = this.computeSha256(fileBytes);\n if (actualHash !== expectedHash) {\n throw new Error(`bundle checksum 校验失败:${relativePath}`);\n }\n }\n };\n}\n\ntype AppBundleMetadataBundleSource = Awaited<ReturnType<AppManifestService[\"load\"]>>;\n\nconst SOURCE_WASM_PLACEHOLDER_BYTES = Uint8Array.from(\n Buffer.from(\n \"AGFzbQEAAAABBwFgAn9/AX8DAgEABxMBD3N1bW1hcml6ZV9ub3RlcwAACg0BCwAgACABakHIAWoL\",\n \"base64\",\n ),\n);\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"app-bundle.types.d.ts","names":[],"sources":["../../src/bundle/app-bundle.types.ts"],"mappings":";KAAY,mBAAA;AAAA,KAEA,iBAAA;EACV,mBAAA;EACA,gBAAA,EAAkB,mBAAA;EAClB,KAAA;EACA,IAAA;EACA,OAAA;EACA,aAAA;EACA,aAAA;AAAA;AAAA,KAGU,kBAAA;EACV,SAAA;EACA,KAAA,EAAO,MAAA;AAAA;AAAA,KAGG,mBAAA;EACV,UAAA;EACA,QAAA,EAAU,iBAAA;EACV,SAAA;EACA,SAAA;AAAA;AAAA,KAGU,sBAAA;EACV,YAAA;EACA,QAAA,EAAU,iBAAA;EACV,SAAA,EAAW,kBAAA;AAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"app-runtime-cli.service.d.ts","names":[],"sources":["../../src/cli/app-runtime-cli.service.ts"],"mappings":";;;cAqBa,oBAAA;EAAA,iBAEQ,cAAA;cAAA,cAAA,GAAgB,wBAAA;EAGnC,GAAA,QAAgB,OAAA;EAAA,QAkBR,QAAA;EAAA,QA8DA,YAAA;EAAA,QAWA,aAAA;EAAA,QAUA,WAAA;EAAA,QAsBA,YAAA;EAAA,QAwBA,SAAA;EAAA,QAcA,SAAA;EAAA,QAcA,UAAA;EAAA,QAYA,aAAA;EAAA,QAcA,qBAAA;EAAA,QAYA,aAAA;EAAA,QAWA,YAAA;EAAA,QAYA,eAAA;EAAA,QAWA,UAAA;EAAA,QAQA,UAAA;EAAA,QAUA,cAAA;EAAA,QA8CA,iBAAA;EAAA,QAUA,WAAA;EAAA,QAWA,YAAA;EAAA,QAWA,UAAA;EAAA,QAwBA,KAAA;AAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"app-runtime-cli.service.js","names":["packageJson.version"],"sources":["../../src/cli/app-runtime-cli.service.ts"],"sourcesContent":["import packageJson from \"../../package.json\" with { type: \"json\" };\nimport { CreateCommand } from \"../commands/create.controller.js\";\nimport { DevCommand } from \"../commands/dev.controller.js\";\nimport { GrantCommand } from \"../commands/grant.controller.js\";\nimport { InfoCommand } from \"../commands/info.controller.js\";\nimport { InspectCommand } from \"../commands/inspect.controller.js\";\nimport { InstallCommand } from \"../commands/install.controller.js\";\nimport { ListCommand } from \"../commands/list.controller.js\";\nimport { PackCommand } from \"../commands/pack.controller.js\";\nimport { PermissionsCommand } from \"../commands/permissions.controller.js\";\nimport { PublishCommand } from \"../commands/publish.controller.js\";\nimport { RegistryCommand } from \"../commands/registry.controller.js\";\nimport { RevokeCommand } from \"../commands/revoke.controller.js\";\nimport { RunCommand } from \"../commands/run.controller.js\";\nimport { UninstallCommand } from \"../commands/uninstall.controller.js\";\nimport { UpdateCommand } from \"../commands/update.controller.js\";\nimport { ValidatePublishCommand } from \"../commands/validate-publish.controller.js\";\nimport { AppBuildService } from \"../runtime/app-build.service.js\";\nimport { AppRuntimeToolchainService } from \"../runtime/app-runtime-toolchain.service.js\";\nimport { AppRuntimeOptionsService } from \"./app-runtime-options.service.js\";\n\nexport class AppRuntimeCliService {\n constructor(\n private readonly optionsService: AppRuntimeOptionsService = new AppRuntimeOptionsService(),\n ) {}\n\n run = async (): Promise<void> => {\n const args = process.argv.slice(2);\n const [command, ...restArgs] = args;\n if (command === \"--help\" || command === \"help\") {\n this.writeUsage();\n return;\n }\n if (command === \"--version\" || command === \"version\") {\n this.write(`${packageJson.version}\\n`);\n return;\n }\n if (!command) {\n this.writeUsage();\n process.exit(1);\n }\n await this.dispatch(command, restArgs);\n };\n\n private dispatch = async (command: string, restArgs: string[]): Promise<void> => {\n switch (command) {\n case \"create\":\n await this.handleCreate(restArgs);\n return;\n case \"inspect\":\n await this.handleInspect(restArgs);\n return;\n case \"build\":\n await this.handleBuild(restArgs);\n return;\n case \"doctor\":\n await this.handleDoctor(restArgs);\n return;\n case \"run\":\n await this.handleRun(restArgs);\n return;\n case \"dev\":\n await this.handleDev(restArgs);\n return;\n case \"pack\":\n await this.handlePack(restArgs);\n return;\n case \"publish\":\n await this.handlePublish(restArgs);\n return;\n case \"validate-publish\":\n await this.handleValidatePublish(restArgs);\n return;\n case \"install\":\n await this.handleInstall(restArgs);\n return;\n case \"update\":\n await this.handleUpdate(restArgs);\n return;\n case \"uninstall\":\n await this.handleUninstall(restArgs);\n return;\n case \"list\":\n await this.handleList(restArgs);\n return;\n case \"info\":\n await this.handleInfo(restArgs);\n return;\n case \"registry\":\n await this.handleRegistry(restArgs);\n return;\n case \"permissions\":\n await this.handlePermissions(restArgs);\n return;\n case \"grant\":\n await this.handleGrant(restArgs);\n return;\n case \"revoke\":\n await this.handleRevoke(restArgs);\n return;\n default:\n this.writeUsage();\n process.exit(1);\n }\n };\n\n private handleCreate = async (restArgs: string[]): Promise<void> => {\n const { target, optionArgs } = this.optionsService.readTarget(\"create\", restArgs);\n const options = this.optionsService.readCreateOptions(optionArgs);\n await new CreateCommand().run({\n appDirectory: target,\n template: options.template,\n json: options.json,\n write: this.write,\n });\n };\n\n private handleInspect = async (restArgs: string[]): Promise<void> => {\n const { target, optionArgs } = this.optionsService.readTarget(\"inspect\", restArgs);\n const options = this.optionsService.readJsonOnlyOptions(optionArgs);\n await new InspectCommand().run({\n appDirectory: target,\n json: options.json,\n write: this.write,\n });\n };\n\n private handleBuild = async (restArgs: string[]): Promise<void> => {\n const { target, optionArgs } = this.optionsService.readTarget(\"build\", restArgs);\n const options = this.optionsService.readBuildOptions(optionArgs);\n const result = await new AppBuildService().build({\n appDirectory: target,\n install: options.install,\n });\n if (options.json) {\n this.write(`${JSON.stringify({ ok: true, build: result }, null, 2)}\\n`);\n return;\n }\n if (!result.built) {\n this.write(`Build skipped: ${result.skippedReason ?? result.mainKind}\\n`);\n return;\n }\n this.write(`Built ${result.mainKind} app\\n`);\n this.write(`Main: ${result.mainEntryPath}\\n`);\n if (result.installedDependencies) {\n this.write(\"Dependencies: installed\\n\");\n }\n };\n\n private handleDoctor = async (restArgs: string[]): Promise<void> => {\n const options = this.optionsService.readJsonOnlyOptions(restArgs);\n const result = await new AppRuntimeToolchainService().doctor();\n if (options.json) {\n this.write(`${JSON.stringify({ ok: result.ok, doctor: result }, null, 2)}\\n`);\n if (!result.ok) {\n process.exitCode = 1;\n }\n return;\n }\n this.write(`NApp runtime doctor: ${result.ok ? \"ok\" : \"not ready\"}\\n`);\n for (const tool of result.tools) {\n this.write(\n `${tool.ok ? \"ok\" : \"missing\"} ${tool.name}${tool.version ? ` ${tool.version}` : \"\"}\\n`,\n );\n if (!tool.ok) {\n this.write(` ${tool.installHint}\\n`);\n }\n }\n if (!result.ok) {\n process.exitCode = 1;\n }\n };\n\n private handleRun = async (restArgs: string[]): Promise<void> => {\n const { target, optionArgs } = this.optionsService.readTarget(\"run\", restArgs);\n const options = this.optionsService.readRuntimeOptions(optionArgs);\n await new RunCommand().run({\n appReference: target,\n host: options.host,\n port: options.port,\n dataDirectory: options.dataDirectory,\n json: options.json,\n documentGrantMap: options.documentGrantMap,\n write: this.write,\n });\n };\n\n private handleDev = async (restArgs: string[]): Promise<void> => {\n const { target, optionArgs } = this.optionsService.readTarget(\"dev\", restArgs);\n const options = this.optionsService.readRuntimeOptions(optionArgs);\n await new DevCommand().run({\n appReference: target,\n host: options.host,\n port: options.port,\n dataDirectory: options.dataDirectory,\n json: options.json,\n documentGrantMap: options.documentGrantMap,\n write: this.write,\n });\n };\n\n private handlePack = async (restArgs: string[]): Promise<void> => {\n const { target, optionArgs } = this.optionsService.readTarget(\"pack\", restArgs);\n const options = this.optionsService.readPackOptions(optionArgs);\n await new PackCommand().run({\n appDirectory: target,\n outputPath: options.outputPath,\n mode: options.mode,\n json: options.json,\n write: this.write,\n });\n };\n\n private handlePublish = async (restArgs: string[]): Promise<void> => {\n const { target, optionArgs } = this.optionsService.readTarget(\"publish\", restArgs);\n const options = this.optionsService.readPublishOptions(optionArgs);\n await new PublishCommand().run({\n appDirectory: target,\n metadataPath: options.metadataPath,\n apiBaseUrl: options.apiBaseUrl,\n token: options.token,\n mode: options.mode,\n json: options.json,\n write: this.write,\n });\n };\n\n private handleValidatePublish = async (restArgs: string[]): Promise<void> => {\n const { target, optionArgs } = this.optionsService.readTarget(\"validate-publish\", restArgs);\n const options = this.optionsService.readPublishOptions(optionArgs);\n await new ValidatePublishCommand().run({\n appDirectory: target,\n metadataPath: options.metadataPath,\n mode: options.mode,\n json: options.json,\n write: this.write,\n });\n };\n\n private handleInstall = async (restArgs: string[]): Promise<void> => {\n const { target, optionArgs } = this.optionsService.readTarget(\"install\", restArgs);\n const options = this.optionsService.readInstallOptions(optionArgs);\n await new InstallCommand().run({\n appSource: target,\n registryUrl: options.registryUrl,\n json: options.json,\n write: this.write,\n });\n };\n\n private handleUpdate = async (restArgs: string[]): Promise<void> => {\n const { target, optionArgs } = this.optionsService.readTarget(\"update\", restArgs);\n const options = this.optionsService.readUpdateOptions(optionArgs);\n await new UpdateCommand().run({\n appId: target,\n version: options.version,\n registryUrl: options.registryUrl,\n json: options.json,\n write: this.write,\n });\n };\n\n private handleUninstall = async (restArgs: string[]): Promise<void> => {\n const { target, optionArgs } = this.optionsService.readTarget(\"uninstall\", restArgs);\n const options = this.optionsService.readUninstallOptions(optionArgs);\n await new UninstallCommand().run({\n appId: target,\n purgeData: options.purgeData,\n json: options.json,\n write: this.write,\n });\n };\n\n private handleList = async (restArgs: string[]): Promise<void> => {\n const options = this.optionsService.readJsonOnlyOptions(restArgs);\n await new ListCommand().run({\n json: options.json,\n write: this.write,\n });\n };\n\n private handleInfo = async (restArgs: string[]): Promise<void> => {\n const { target, optionArgs } = this.optionsService.readTarget(\"info\", restArgs);\n const options = this.optionsService.readJsonOnlyOptions(optionArgs);\n await new InfoCommand().run({\n appId: target,\n json: options.json,\n write: this.write,\n });\n };\n\n private handleRegistry = async (restArgs: string[]): Promise<void> => {\n const [actionOrUrl, ...optionArgs] = restArgs;\n if (!actionOrUrl || actionOrUrl === \"get\") {\n const options = this.optionsService.readJsonOnlyOptions(optionArgs);\n await new RegistryCommand().run({\n action: \"get\",\n json: options.json,\n write: this.write,\n });\n return;\n }\n if (actionOrUrl === \"--json\") {\n const options = this.optionsService.readJsonOnlyOptions([actionOrUrl, ...optionArgs]);\n await new RegistryCommand().run({\n action: \"get\",\n json: options.json,\n write: this.write,\n });\n return;\n }\n if (actionOrUrl === \"set\") {\n const { target, optionArgs: actionOptionArgs } = this.optionsService.readTarget(\n \"registry set\",\n optionArgs,\n );\n const options = this.optionsService.readJsonOnlyOptions(actionOptionArgs);\n await new RegistryCommand().run({\n action: \"set\",\n registryUrl: target,\n json: options.json,\n write: this.write,\n });\n return;\n }\n if (actionOrUrl === \"reset\") {\n const options = this.optionsService.readJsonOnlyOptions(optionArgs);\n await new RegistryCommand().run({\n action: \"reset\",\n json: options.json,\n write: this.write,\n });\n return;\n }\n throw new Error(`未知 registry 子命令:${actionOrUrl}`);\n };\n\n private handlePermissions = async (restArgs: string[]): Promise<void> => {\n const { target, optionArgs } = this.optionsService.readTarget(\"permissions\", restArgs);\n const options = this.optionsService.readJsonOnlyOptions(optionArgs);\n await new PermissionsCommand().run({\n appId: target,\n json: options.json,\n write: this.write,\n });\n };\n\n private handleGrant = async (restArgs: string[]): Promise<void> => {\n const { target, optionArgs } = this.optionsService.readTarget(\"grant\", restArgs);\n const options = this.optionsService.readGrantOptions(optionArgs);\n await new GrantCommand().run({\n appId: target,\n documentGrantMap: options.documentGrantMap,\n json: options.json,\n write: this.write,\n });\n };\n\n private handleRevoke = async (restArgs: string[]): Promise<void> => {\n const { target, optionArgs } = this.optionsService.readTarget(\"revoke\", restArgs);\n const options = this.optionsService.readRevokeOptions(optionArgs);\n await new RevokeCommand().run({\n appId: target,\n documentScopeIds: options.documentScopeIds,\n json: options.json,\n write: this.write,\n });\n };\n\n private writeUsage = (): void => {\n this.write(\"Usage: napp create <app-dir> [--template starter|ts-http|ts-http-lite] [--json]\\n\");\n this.write(\" napp inspect <app-dir> [--json]\\n\");\n this.write(\" napp build <app-dir> [--install] [--json]\\n\");\n this.write(\" napp doctor [--json]\\n\");\n this.write(\" napp <run|dev> <app-dir|app-id> [--host 127.0.0.1] [--port 3100] [--data /path] [--json] [--document scope=/path]\\n\");\n this.write(\" napp pack <app-dir> [--mode source|bundle] [--out bundle.napp] [--json]\\n\");\n this.write(\" napp publish <app-dir> [--mode source|bundle] [--meta marketplace.json] [--api-base <url>] [--token <token>] [--json]\\n\");\n this.write(\" napp validate-publish <app-dir> [--mode source|bundle] [--meta marketplace.json] [--json]\\n\");\n this.write(\" napp install <app-dir|bundle.napp|app-id[@version]> [--registry <url>] [--json]\\n\");\n this.write(\" napp update <app-id> [--version <version>] [--registry <url>] [--json]\\n\");\n this.write(\" napp uninstall <app-id> [--purge-data] [--json]\\n\");\n this.write(\" napp list [--json]\\n\");\n this.write(\" napp info <app-id> [--json]\\n\");\n this.write(\" napp registry [get] [--json]\\n\");\n this.write(\" napp registry set <url> [--json]\\n\");\n this.write(\" napp registry reset [--json]\\n\");\n this.write(\" napp permissions <app-id> [--json]\\n\");\n this.write(\" napp grant <app-id> --document scope=/path [--json]\\n\");\n this.write(\" napp revoke <app-id> --document scope [--json]\\n\");\n this.write(\" napp --help\\n\");\n this.write(\" napp --version\\n\");\n };\n\n private write = (text: string): void => {\n process.stdout.write(text);\n };\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"app-runtime-options.service.d.ts","names":[],"sources":["../../src/cli/app-runtime-options.service.ts"],"mappings":";;;;;KAIY,iBAAA;EACV,IAAA;EACA,IAAA;EACA,aAAA;EACA,IAAA;EACA,gBAAA,EAAkB,mBAAA;AAAA;AAAA,KAGR,gBAAA;EACV,IAAA;EACA,QAAA,EAAU,mBAAA;AAAA;AAAA,KAGA,cAAA;EACV,IAAA;EACA,UAAA;EACA,IAAA,EAAM,mBAAA;AAAA;AAAA,KAGI,eAAA;EACV,IAAA;EACA,OAAA;AAAA;AAAA,KAGU,kBAAA;EACV,IAAA;AAAA;AAAA,KAGU,iBAAA;EACV,IAAA;EACA,WAAA;AAAA;AAAA,KAGU,gBAAA;EACV,IAAA;EACA,WAAA;EACA,OAAA;AAAA;AAAA,KAGU,mBAAA;EACV,IAAA;EACA,SAAA;AAAA;AAAA,KAGU,eAAA;EACV,IAAA;EACA,gBAAA,EAAkB,mBAAA;AAAA;AAAA,KAGR,gBAAA;EACV,IAAA;EACA,gBAAA;AAAA;AAAA,KAGU,iBAAA;EACV,IAAA;EACA,YAAA;EACA,UAAA;EACA,KAAA;EACA,IAAA,EAAM,mBAAA;AAAA;AAAA,cAGK,wBAAA;EACX,UAAA,GACE,OAAA,UACA,OAAA;IAEA,MAAA;IACA,UAAA;EAAA;EAYF,iBAAA,GAAqB,OAAA,eAAoB,gBAAA;EAAA,QA4BjC,kBAAA;EAOR,eAAA,GAAmB,OAAA,eAAoB,cAAA;EA8BvC,gBAAA,GAAoB,OAAA,eAAoB,eAAA;EAuBxC,mBAAA,GAAuB,OAAA,eAAoB,kBAAA;EAmB3C,kBAAA,GAAsB,OAAA,eAAoB,iBAAA;EAyB1C,iBAAA,GAAqB,OAAA,eAAoB,gBAAA;EA6BzC,oBAAA,GAAwB,OAAA,eAAoB,mBAAA;EAuB5C,kBAAA,GAAsB,OAAA,eAAoB,iBAAA;EAiD1C,gBAAA,GAAoB,OAAA,eAAoB,eAAA;EAgCxC,iBAAA,GAAqB,OAAA,eAAoB,gBAAA;EA+BzC,kBAAA,GAAsB,OAAA,eAAoB,iBAAA;EAAA,QAsClC,oBAAA;EAAA,QAOA,mBAAA;EAAA,QAgBA,mBAAA;EAAA,QAQA,kBAAA;AAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"app-runtime-options.service.js","names":[],"sources":["../../src/cli/app-runtime-options.service.ts"],"sourcesContent":["import type { AppDocumentGrantMap } from \"../permissions/app-permissions.types.js\";\nimport type { AppDistributionMode } from \"../bundle/app-bundle.types.js\";\nimport type { AppScaffoldTemplate } from \"../scaffold/app-scaffold.service.js\";\n\nexport type RuntimeCliOptions = {\n host: string;\n port: number;\n dataDirectory?: string;\n json: boolean;\n documentGrantMap: AppDocumentGrantMap;\n};\n\nexport type CreateCliOptions = {\n json: boolean;\n template: AppScaffoldTemplate;\n};\n\nexport type PackCliOptions = {\n json: boolean;\n outputPath?: string;\n mode: AppDistributionMode;\n};\n\nexport type BuildCliOptions = {\n json: boolean;\n install: boolean;\n};\n\nexport type JsonOnlyCliOptions = {\n json: boolean;\n};\n\nexport type InstallCliOptions = {\n json: boolean;\n registryUrl?: string;\n};\n\nexport type UpdateCliOptions = {\n json: boolean;\n registryUrl?: string;\n version?: string;\n};\n\nexport type UninstallCliOptions = {\n json: boolean;\n purgeData: boolean;\n};\n\nexport type GrantCliOptions = {\n json: boolean;\n documentGrantMap: AppDocumentGrantMap;\n};\n\nexport type RevokeCliOptions = {\n json: boolean;\n documentScopeIds: string[];\n};\n\nexport type PublishCliOptions = {\n json: boolean;\n metadataPath?: string;\n apiBaseUrl?: string;\n token?: string;\n mode: AppDistributionMode;\n};\n\nexport class AppRuntimeOptionsService {\n readTarget = (\n command: string,\n rawArgs: string[],\n ): {\n target: string;\n optionArgs: string[];\n } => {\n const [target, ...optionArgs] = rawArgs;\n if (!target || target.startsWith(\"--\")) {\n throw new Error(`${command} 缺少目标参数。`);\n }\n return {\n target,\n optionArgs,\n };\n };\n\n readCreateOptions = (rawArgs: string[]): CreateCliOptions => {\n const options: CreateCliOptions = {\n json: false,\n template: \"starter\",\n };\n\n for (let index = 0; index < rawArgs.length; index += 1) {\n const current = rawArgs[index];\n if (!current?.startsWith(\"--\")) {\n throw new Error(`未知参数:${current}`);\n }\n const nextValue = rawArgs[index + 1];\n switch (current) {\n case \"--json\":\n options.json = true;\n break;\n case \"--template\":\n options.template = this.readCreateTemplate(this.requireOptionValue(current, nextValue));\n index += 1;\n break;\n default:\n throw new Error(`未知参数:${current}`);\n }\n }\n\n return options;\n };\n\n private readCreateTemplate = (rawTemplate: string): AppScaffoldTemplate => {\n if (rawTemplate === \"starter\" || rawTemplate === \"ts-http\" || rawTemplate === \"ts-http-lite\") {\n return rawTemplate;\n }\n throw new Error(\"--template 只支持 starter、ts-http 或 ts-http-lite。\");\n };\n\n readPackOptions = (rawArgs: string[]): PackCliOptions => {\n const options: PackCliOptions = {\n json: false,\n mode: \"source\",\n };\n for (let index = 0; index < rawArgs.length; index += 1) {\n const current = rawArgs[index];\n if (!current?.startsWith(\"--\")) {\n throw new Error(`未知参数:${current}`);\n }\n const nextValue = rawArgs[index + 1];\n switch (current) {\n case \"--json\":\n options.json = true;\n break;\n case \"--out\":\n options.outputPath = this.requireOptionValue(current, nextValue);\n index += 1;\n break;\n case \"--mode\":\n options.mode = this.readDistributionMode(this.requireOptionValue(current, nextValue));\n index += 1;\n break;\n default:\n throw new Error(`未知参数:${current}`);\n }\n }\n return options;\n };\n\n readBuildOptions = (rawArgs: string[]): BuildCliOptions => {\n const options: BuildCliOptions = {\n json: false,\n install: false,\n };\n for (const current of rawArgs) {\n if (!current?.startsWith(\"--\")) {\n throw new Error(`未知参数:${current}`);\n }\n switch (current) {\n case \"--json\":\n options.json = true;\n break;\n case \"--install\":\n options.install = true;\n break;\n default:\n throw new Error(`未知参数:${current}`);\n }\n }\n return options;\n };\n\n readJsonOnlyOptions = (rawArgs: string[]): JsonOnlyCliOptions => {\n const options: JsonOnlyCliOptions = {\n json: false,\n };\n for (const current of rawArgs) {\n if (!current?.startsWith(\"--\")) {\n throw new Error(`未知参数:${current}`);\n }\n switch (current) {\n case \"--json\":\n options.json = true;\n break;\n default:\n throw new Error(`未知参数:${current}`);\n }\n }\n return options;\n };\n\n readInstallOptions = (rawArgs: string[]): InstallCliOptions => {\n const options: InstallCliOptions = {\n json: false,\n };\n for (let index = 0; index < rawArgs.length; index += 1) {\n const current = rawArgs[index];\n if (!current?.startsWith(\"--\")) {\n throw new Error(`未知参数:${current}`);\n }\n const nextValue = rawArgs[index + 1];\n switch (current) {\n case \"--json\":\n options.json = true;\n break;\n case \"--registry\":\n options.registryUrl = this.requireOptionValue(current, nextValue);\n index += 1;\n break;\n default:\n throw new Error(`未知参数:${current}`);\n }\n }\n return options;\n };\n\n readUpdateOptions = (rawArgs: string[]): UpdateCliOptions => {\n const options: UpdateCliOptions = {\n json: false,\n };\n for (let index = 0; index < rawArgs.length; index += 1) {\n const current = rawArgs[index];\n if (!current?.startsWith(\"--\")) {\n throw new Error(`未知参数:${current}`);\n }\n const nextValue = rawArgs[index + 1];\n switch (current) {\n case \"--json\":\n options.json = true;\n break;\n case \"--registry\":\n options.registryUrl = this.requireOptionValue(current, nextValue);\n index += 1;\n break;\n case \"--version\":\n options.version = this.requireOptionValue(current, nextValue);\n index += 1;\n break;\n default:\n throw new Error(`未知参数:${current}`);\n }\n }\n return options;\n };\n\n readUninstallOptions = (rawArgs: string[]): UninstallCliOptions => {\n const options: UninstallCliOptions = {\n json: false,\n purgeData: false,\n };\n for (const current of rawArgs) {\n if (!current?.startsWith(\"--\")) {\n throw new Error(`未知参数:${current}`);\n }\n switch (current) {\n case \"--json\":\n options.json = true;\n break;\n case \"--purge-data\":\n options.purgeData = true;\n break;\n default:\n throw new Error(`未知参数:${current}`);\n }\n }\n return options;\n };\n\n readRuntimeOptions = (rawArgs: string[]): RuntimeCliOptions => {\n const options: RuntimeCliOptions = {\n host: \"127.0.0.1\",\n port: 3100,\n dataDirectory: undefined,\n json: false,\n documentGrantMap: {},\n };\n\n for (let index = 0; index < rawArgs.length; index += 1) {\n const current = rawArgs[index];\n if (!current?.startsWith(\"--\")) {\n throw new Error(`未知参数:${current}`);\n }\n const nextValue = rawArgs[index + 1];\n switch (current) {\n case \"--host\":\n options.host = this.requireOptionValue(current, nextValue);\n index += 1;\n break;\n case \"--port\":\n options.port = Number.parseInt(this.requireOptionValue(current, nextValue), 10);\n if (Number.isNaN(options.port) || options.port < 0) {\n throw new Error(\"--port 必须是非负整数。\");\n }\n index += 1;\n break;\n case \"--json\":\n options.json = true;\n break;\n case \"--data\":\n options.dataDirectory = this.requireOptionValue(current, nextValue);\n index += 1;\n break;\n case \"--document\":\n this.assignDocumentGrant(\n options.documentGrantMap,\n this.requireOptionValue(current, nextValue),\n );\n index += 1;\n break;\n default:\n throw new Error(`未知参数:${current}`);\n }\n }\n\n return options;\n };\n\n readGrantOptions = (rawArgs: string[]): GrantCliOptions => {\n const options: GrantCliOptions = {\n json: false,\n documentGrantMap: {},\n };\n for (let index = 0; index < rawArgs.length; index += 1) {\n const current = rawArgs[index];\n if (!current?.startsWith(\"--\")) {\n throw new Error(`未知参数:${current}`);\n }\n const nextValue = rawArgs[index + 1];\n switch (current) {\n case \"--json\":\n options.json = true;\n break;\n case \"--document\":\n this.assignDocumentGrant(\n options.documentGrantMap,\n this.requireOptionValue(current, nextValue),\n );\n index += 1;\n break;\n default:\n throw new Error(`未知参数:${current}`);\n }\n }\n if (Object.keys(options.documentGrantMap).length === 0) {\n throw new Error(\"grant 至少需要一个 --document scope=/path。\");\n }\n return options;\n };\n\n readRevokeOptions = (rawArgs: string[]): RevokeCliOptions => {\n const options: RevokeCliOptions = {\n json: false,\n documentScopeIds: [],\n };\n for (let index = 0; index < rawArgs.length; index += 1) {\n const current = rawArgs[index];\n if (!current?.startsWith(\"--\")) {\n throw new Error(`未知参数:${current}`);\n }\n const nextValue = rawArgs[index + 1];\n switch (current) {\n case \"--json\":\n options.json = true;\n break;\n case \"--document\":\n options.documentScopeIds.push(\n this.readDocumentScopeId(this.requireOptionValue(current, nextValue)),\n );\n index += 1;\n break;\n default:\n throw new Error(`未知参数:${current}`);\n }\n }\n if (options.documentScopeIds.length === 0) {\n throw new Error(\"revoke 至少需要一个 --document scope。\");\n }\n return options;\n };\n\n readPublishOptions = (rawArgs: string[]): PublishCliOptions => {\n const options: PublishCliOptions = {\n json: false,\n mode: \"source\",\n };\n for (let index = 0; index < rawArgs.length; index += 1) {\n const current = rawArgs[index];\n if (!current?.startsWith(\"--\")) {\n throw new Error(`未知参数:${current}`);\n }\n const nextValue = rawArgs[index + 1];\n switch (current) {\n case \"--json\":\n options.json = true;\n break;\n case \"--meta\":\n options.metadataPath = this.requireOptionValue(current, nextValue);\n index += 1;\n break;\n case \"--api-base\":\n options.apiBaseUrl = this.requireOptionValue(current, nextValue);\n index += 1;\n break;\n case \"--token\":\n options.token = this.requireOptionValue(current, nextValue);\n index += 1;\n break;\n case \"--mode\":\n options.mode = this.readDistributionMode(this.requireOptionValue(current, nextValue));\n index += 1;\n break;\n default:\n throw new Error(`未知参数:${current}`);\n }\n }\n return options;\n };\n\n private readDistributionMode = (rawMode: string): AppDistributionMode => {\n if (rawMode === \"source\" || rawMode === \"bundle\") {\n return rawMode;\n }\n throw new Error(\"--mode 只支持 source 或 bundle。\");\n };\n\n private assignDocumentGrant = (\n documentGrantMap: AppDocumentGrantMap,\n rawGrant: string,\n ): void => {\n const delimiterIndex = rawGrant.indexOf(\"=\");\n if (delimiterIndex < 1) {\n throw new Error(\"--document 必须使用 scopeId=/absolute/or/relative/path 格式。\");\n }\n const scopeId = rawGrant.slice(0, delimiterIndex).trim();\n const directoryPath = rawGrant.slice(delimiterIndex + 1).trim();\n if (!scopeId || !directoryPath) {\n throw new Error(\"--document 缺少 scopeId 或 path。\");\n }\n documentGrantMap[scopeId] = directoryPath;\n };\n\n private readDocumentScopeId = (scopeId: string): string => {\n const normalized = scopeId.trim();\n if (!normalized || normalized.includes(\"=\")) {\n throw new Error(\"--document 必须使用 scopeId 格式。\");\n }\n return normalized;\n };\n\n private requireOptionValue = (flag: string, nextValue: string | undefined): string => {\n if (!nextValue || nextValue.startsWith(\"--\")) {\n throw new Error(`${flag} 缺少值。`);\n }\n return nextValue;\n };\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"create.controller.d.ts","names":[],"sources":["../../src/commands/create.controller.ts"],"mappings":";;;cAGa,aAAA;EAAA,iBAEQ,eAAA;cAAA,eAAA,GAAiB,kBAAA;EAGpC,GAAA,GAAa,MAAA;IACX,YAAA;IACA,QAAA,EAAU,mBAAA;IACV,IAAA;IACA,KAAA,GAAQ,IAAA;EAAA,MACN,OAAA;AAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"create.controller.js","names":[],"sources":["../../src/commands/create.controller.ts"],"sourcesContent":["import { AppScaffoldService } from \"../scaffold/app-scaffold.service.js\";\nimport type { AppScaffoldTemplate } from \"../scaffold/app-scaffold.service.js\";\n\nexport class CreateCommand {\n constructor(\n private readonly scaffoldService: AppScaffoldService = new AppScaffoldService(),\n ) {}\n\n run = async (params: {\n appDirectory: string;\n template: AppScaffoldTemplate;\n json: boolean;\n write: (text: string) => void;\n }): Promise<void> => {\n const { appDirectory, template, json, write } = params;\n const result = await this.scaffoldService.scaffold(appDirectory, { template });\n if (json) {\n write(`${JSON.stringify({ ok: true, created: result }, null, 2)}\\n`);\n return;\n }\n write(`Created app scaffold at ${result.appDirectory}\\n`);\n write(`Template: ${result.template}\\n`);\n write(`Manifest: ${result.manifestPath}\\n`);\n write(\"Next: napp inspect <app-dir> && napp run <app-dir>\\n\");\n };\n}\n"],"mappings":";;AAGA,IAAa,gBAAb,MAA2B;CACzB,YACE,kBAAuD,IAAI,oBAAoB,EAC/E;AADiB,OAAA,kBAAA;;CAGnB,MAAM,OAAO,WAKQ;EACnB,MAAM,EAAE,cAAc,UAAU,MAAM,UAAU;EAChD,MAAM,SAAS,MAAM,KAAK,gBAAgB,SAAS,cAAc,EAAE,UAAU,CAAC;AAC9E,MAAI,MAAM;AACR,SAAM,GAAG,KAAK,UAAU;IAAE,IAAI;IAAM,SAAS;IAAQ,EAAE,MAAM,EAAE,CAAC,IAAI;AACpE;;AAEF,QAAM,2BAA2B,OAAO,aAAa,IAAI;AACzD,QAAM,aAAa,OAAO,SAAS,IAAI;AACvC,QAAM,aAAa,OAAO,aAAa,IAAI;AAC3C,QAAM,uDAAuD"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"dev.controller.js","names":[],"sources":["../../src/commands/dev.controller.ts"],"sourcesContent":["import { RunCommand, type RunCommandInput } from \"./run.controller.js\";\n\nexport class DevCommand {\n constructor(private readonly runCommand: RunCommand = new RunCommand()) {}\n\n run = async (params: RunCommandInput): Promise<void> => {\n await this.runCommand.run(params);\n };\n}\n"],"mappings":";;AAEA,IAAa,aAAb,MAAwB;CACtB,YAAY,aAA0C,IAAI,YAAY,EAAE;AAA3C,OAAA,aAAA;;CAE7B,MAAM,OAAO,WAA2C;AACtD,QAAM,KAAK,WAAW,IAAI,OAAO"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"grant.controller.d.ts","names":[],"sources":["../../src/commands/grant.controller.ts"],"mappings":";;;;cAGa,YAAA;EAAA,iBAEQ,YAAA;cAAA,YAAA,GAAc,eAAA;EAGjC,GAAA,GAAa,MAAA;IACX,KAAA;IACA,gBAAA,EAAkB,mBAAA;IAClB,IAAA;IACA,KAAA,GAAQ,IAAA;EAAA,MACN,OAAA;AAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"grant.controller.js","names":[],"sources":["../../src/commands/grant.controller.ts"],"sourcesContent":["import { AppGrantService } from \"../permissions/app-grant.service.js\";\nimport type { AppDocumentGrantMap } from \"../permissions/app-permissions.types.js\";\n\nexport class GrantCommand {\n constructor(\n private readonly grantService: AppGrantService = new AppGrantService(),\n ) {}\n\n run = async (params: {\n appId: string;\n documentGrantMap: AppDocumentGrantMap;\n json: boolean;\n write: (text: string) => void;\n }): Promise<void> => {\n const { appId, documentGrantMap, json, write } = params;\n const results = await Promise.all(\n Object.entries(documentGrantMap).map(([scopeId, directoryPath]) =>\n this.grantService.grantDocumentScope({\n appId,\n scopeId,\n directoryPath,\n }),\n ),\n );\n if (json) {\n write(`${JSON.stringify({ ok: true, grants: results }, null, 2)}\\n`);\n return;\n }\n for (const result of results) {\n write(`Granted ${result.scopeId} -> ${result.grantedPath}\\n`);\n }\n };\n}\n"],"mappings":";;AAGA,IAAa,eAAb,MAA0B;CACxB,YACE,eAAiD,IAAI,iBAAiB,EACtE;AADiB,OAAA,eAAA;;CAGnB,MAAM,OAAO,WAKQ;EACnB,MAAM,EAAE,OAAO,kBAAkB,MAAM,UAAU;EACjD,MAAM,UAAU,MAAM,QAAQ,IAC5B,OAAO,QAAQ,iBAAiB,CAAC,KAAK,CAAC,SAAS,mBAC9C,KAAK,aAAa,mBAAmB;GACnC;GACA;GACA;GACD,CAAC,CACH,CACF;AACD,MAAI,MAAM;AACR,SAAM,GAAG,KAAK,UAAU;IAAE,IAAI;IAAM,QAAQ;IAAS,EAAE,MAAM,EAAE,CAAC,IAAI;AACpE;;AAEF,OAAK,MAAM,UAAU,QACnB,OAAM,WAAW,OAAO,QAAQ,MAAM,OAAO,YAAY,IAAI"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"info.controller.d.ts","names":[],"sources":["../../src/commands/info.controller.ts"],"mappings":";;;cAEa,WAAA;EAAA,iBAEQ,mBAAA;cAAA,mBAAA,GAAqB,sBAAA;EAGxC,GAAA,GAAa,MAAA;IACX,KAAA;IACA,IAAA;IACA,KAAA,GAAQ,IAAA;EAAA,MACN,OAAA;AAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"info.controller.js","names":[],"sources":["../../src/commands/info.controller.ts"],"sourcesContent":["import { AppInstallationService } from \"../install/app-installation.service.js\";\n\nexport class InfoCommand {\n constructor(\n private readonly installationService: AppInstallationService = new AppInstallationService(),\n ) {}\n\n run = async (params: {\n appId: string;\n json: boolean;\n write: (text: string) => void;\n }): Promise<void> => {\n const { appId, json, write } = params;\n const result = await this.installationService.info(appId);\n if (json) {\n write(`${JSON.stringify({ ok: true, app: result }, null, 2)}\\n`);\n return;\n }\n write(`App: ${result.name} (${result.appId})\\n`);\n write(`Active version: ${result.activeVersion}\\n`);\n write(`Data: ${result.dataDirectory}\\n`);\n write(`Installed versions: ${result.installedVersions.map((item) => item.version).join(\", \")}\\n`);\n const activeVersion = result.installedVersions.find(\n (item) => item.version === result.activeVersion,\n );\n if (activeVersion?.registryUrl) {\n write(`Registry: ${activeVersion.registryUrl}\\n`);\n }\n if (activeVersion?.publisher) {\n write(`Publisher: ${activeVersion.publisher.name} (${activeVersion.publisher.id})\\n`);\n }\n };\n}\n"],"mappings":";;AAEA,IAAa,cAAb,MAAyB;CACvB,YACE,sBAA+D,IAAI,wBAAwB,EAC3F;AADiB,OAAA,sBAAA;;CAGnB,MAAM,OAAO,WAIQ;EACnB,MAAM,EAAE,OAAO,MAAM,UAAU;EAC/B,MAAM,SAAS,MAAM,KAAK,oBAAoB,KAAK,MAAM;AACzD,MAAI,MAAM;AACR,SAAM,GAAG,KAAK,UAAU;IAAE,IAAI;IAAM,KAAK;IAAQ,EAAE,MAAM,EAAE,CAAC,IAAI;AAChE;;AAEF,QAAM,QAAQ,OAAO,KAAK,IAAI,OAAO,MAAM,KAAK;AAChD,QAAM,mBAAmB,OAAO,cAAc,IAAI;AAClD,QAAM,SAAS,OAAO,cAAc,IAAI;AACxC,QAAM,uBAAuB,OAAO,kBAAkB,KAAK,SAAS,KAAK,QAAQ,CAAC,KAAK,KAAK,CAAC,IAAI;EACjG,MAAM,gBAAgB,OAAO,kBAAkB,MAC5C,SAAS,KAAK,YAAY,OAAO,cACnC;AACD,MAAI,eAAe,YACjB,OAAM,aAAa,cAAc,YAAY,IAAI;AAEnD,MAAI,eAAe,UACjB,OAAM,cAAc,cAAc,UAAU,KAAK,IAAI,cAAc,UAAU,GAAG,KAAK"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"inspect.controller.js","names":[],"sources":["../../src/commands/inspect.controller.ts"],"sourcesContent":["import { AppManifestService } from \"../manifest/app-manifest.service.js\";\n\nexport class InspectCommand {\n constructor(\n private readonly manifestService: AppManifestService = new AppManifestService(),\n ) {}\n\n run = async (params: {\n appDirectory: string;\n json: boolean;\n write: (text: string) => void;\n }): Promise<void> => {\n const { appDirectory, json, write } = params;\n const bundle = await this.manifestService.load(appDirectory);\n const summary = this.manifestService.summarize(bundle);\n if (json) {\n write(`${JSON.stringify({ ok: true, summary }, null, 2)}\\n`);\n return;\n }\n write(`App: ${summary.name} (${summary.id})\\n`);\n write(`Version: ${summary.version}\\n`);\n write(`Main Kind: ${summary.mainKind}\\n`);\n if (summary.action) {\n write(`Action: ${summary.action}\\n`);\n }\n write(`Main: ${summary.mainEntryPath}\\n`);\n write(`UI: ${summary.uiEntryPath}\\n`);\n };\n}\n"],"mappings":";;AAEA,IAAa,iBAAb,MAA4B;CAC1B,YACE,kBAAuD,IAAI,oBAAoB,EAC/E;AADiB,OAAA,kBAAA;;CAGnB,MAAM,OAAO,WAIQ;EACnB,MAAM,EAAE,cAAc,MAAM,UAAU;EACtC,MAAM,SAAS,MAAM,KAAK,gBAAgB,KAAK,aAAa;EAC5D,MAAM,UAAU,KAAK,gBAAgB,UAAU,OAAO;AACtD,MAAI,MAAM;AACR,SAAM,GAAG,KAAK,UAAU;IAAE,IAAI;IAAM;IAAS,EAAE,MAAM,EAAE,CAAC,IAAI;AAC5D;;AAEF,QAAM,QAAQ,QAAQ,KAAK,IAAI,QAAQ,GAAG,KAAK;AAC/C,QAAM,YAAY,QAAQ,QAAQ,IAAI;AACtC,QAAM,cAAc,QAAQ,SAAS,IAAI;AACzC,MAAI,QAAQ,OACV,OAAM,WAAW,QAAQ,OAAO,IAAI;AAEtC,QAAM,SAAS,QAAQ,cAAc,IAAI;AACzC,QAAM,OAAO,QAAQ,YAAY,IAAI"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"install.controller.d.ts","names":[],"sources":["../../src/commands/install.controller.ts"],"mappings":";;;cAEa,cAAA;EAAA,iBAEQ,mBAAA;cAAA,mBAAA,GAAqB,sBAAA;EAGxC,GAAA,GAAa,MAAA;IACX,SAAA;IACA,WAAA;IACA,IAAA;IACA,KAAA,GAAQ,IAAA;EAAA,MACN,OAAA;AAAA"}