@gtkx/cli 1.6.0 → 2.0.0-beta.2

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 (309) hide show
  1. package/README.md +5 -5
  2. package/dist/builder.d.ts +1 -0
  3. package/dist/builder.d.ts.map +1 -1
  4. package/dist/builder.js +17 -5
  5. package/dist/builder.js.map +1 -1
  6. package/dist/cli.js +2 -0
  7. package/dist/cli.js.map +1 -1
  8. package/dist/codegen/freshness.d.ts.map +1 -1
  9. package/dist/codegen/freshness.js +45 -16
  10. package/dist/codegen/freshness.js.map +1 -1
  11. package/dist/codegen/reference.d.ts.map +1 -1
  12. package/dist/codegen/reference.js +1 -7
  13. package/dist/codegen/reference.js.map +1 -1
  14. package/dist/codegen/report.d.ts.map +1 -1
  15. package/dist/codegen/report.js +5 -16
  16. package/dist/codegen/report.js.map +1 -1
  17. package/dist/codegen/run-codegen.d.ts +7 -7
  18. package/dist/codegen/run-codegen.d.ts.map +1 -1
  19. package/dist/codegen/run-codegen.js +35 -107
  20. package/dist/codegen/run-codegen.js.map +1 -1
  21. package/dist/codegen/store-resolver.d.ts +1 -2
  22. package/dist/codegen/store-resolver.d.ts.map +1 -1
  23. package/dist/codegen/store-resolver.js +10 -19
  24. package/dist/codegen/store-resolver.js.map +1 -1
  25. package/dist/commands/build.d.ts +5 -0
  26. package/dist/commands/build.d.ts.map +1 -1
  27. package/dist/commands/build.js +83 -10
  28. package/dist/commands/build.js.map +1 -1
  29. package/dist/commands/codegen.d.ts +1 -0
  30. package/dist/commands/codegen.d.ts.map +1 -1
  31. package/dist/commands/codegen.js +6 -5
  32. package/dist/commands/codegen.js.map +1 -1
  33. package/dist/commands/deploy.d.ts +1 -0
  34. package/dist/commands/deploy.d.ts.map +1 -1
  35. package/dist/commands/deploy.js +4 -2
  36. package/dist/commands/deploy.js.map +1 -1
  37. package/dist/commands/dev.d.ts +8 -0
  38. package/dist/commands/dev.d.ts.map +1 -1
  39. package/dist/commands/dev.js +19 -1
  40. package/dist/commands/dev.js.map +1 -1
  41. package/dist/commands/docs.d.ts.map +1 -1
  42. package/dist/commands/docs.js +5 -15
  43. package/dist/commands/docs.js.map +1 -1
  44. package/dist/deploy/freedesktop/copyright.d.ts.map +1 -1
  45. package/dist/deploy/freedesktop/copyright.js +2 -13
  46. package/dist/deploy/freedesktop/copyright.js.map +1 -1
  47. package/dist/deploy/freedesktop/metainfo.d.ts.map +1 -1
  48. package/dist/deploy/freedesktop/metainfo.js +41 -2
  49. package/dist/deploy/freedesktop/metainfo.js.map +1 -1
  50. package/dist/deploy/freedesktop/xml.d.ts.map +1 -1
  51. package/dist/deploy/freedesktop/xml.js +21 -25
  52. package/dist/deploy/freedesktop/xml.js.map +1 -1
  53. package/dist/deploy/nfpm/config.d.ts.map +1 -1
  54. package/dist/deploy/nfpm/config.js +5 -2
  55. package/dist/deploy/nfpm/config.js.map +1 -1
  56. package/dist/deploy/nfpm/contents.d.ts.map +1 -1
  57. package/dist/deploy/nfpm/contents.js +8 -0
  58. package/dist/deploy/nfpm/contents.js.map +1 -1
  59. package/dist/deploy/node-runtime/elf.d.ts +2 -1
  60. package/dist/deploy/node-runtime/elf.d.ts.map +1 -1
  61. package/dist/deploy/node-runtime/elf.js +32 -5
  62. package/dist/deploy/node-runtime/elf.js.map +1 -1
  63. package/dist/deploy/node-runtime/index.d.ts +2 -1
  64. package/dist/deploy/node-runtime/index.d.ts.map +1 -1
  65. package/dist/deploy/node-runtime/index.js +73 -4
  66. package/dist/deploy/node-runtime/index.js.map +1 -1
  67. package/dist/deploy/node-runtime/license.d.ts.map +1 -1
  68. package/dist/deploy/node-runtime/license.js +2 -9
  69. package/dist/deploy/node-runtime/license.js.map +1 -1
  70. package/dist/deploy/notices/node-runtime.js +2 -2
  71. package/dist/deploy/notices/node-runtime.js.map +1 -1
  72. package/dist/deploy/notices/packages.d.ts.map +1 -1
  73. package/dist/deploy/notices/packages.js +3 -10
  74. package/dist/deploy/notices/packages.js.map +1 -1
  75. package/dist/deploy/payload/copy-tree.d.ts.map +1 -1
  76. package/dist/deploy/payload/copy-tree.js +3 -3
  77. package/dist/deploy/payload/copy-tree.js.map +1 -1
  78. package/dist/deploy/payload/launcher.d.ts.map +1 -1
  79. package/dist/deploy/payload/launcher.js +14 -1
  80. package/dist/deploy/payload/launcher.js.map +1 -1
  81. package/dist/deploy/payload/stage.d.ts.map +1 -1
  82. package/dist/deploy/payload/stage.js +2 -4
  83. package/dist/deploy/payload/stage.js.map +1 -1
  84. package/dist/deploy/run-deploy.d.ts +1 -0
  85. package/dist/deploy/run-deploy.d.ts.map +1 -1
  86. package/dist/deploy/run-deploy.js +100 -14
  87. package/dist/deploy/run-deploy.js.map +1 -1
  88. package/dist/deploy/settings/build-manifest.d.ts +6 -1
  89. package/dist/deploy/settings/build-manifest.d.ts.map +1 -1
  90. package/dist/deploy/settings/build-manifest.js +17 -17
  91. package/dist/deploy/settings/build-manifest.js.map +1 -1
  92. package/dist/deploy/settings/extra-files.d.ts +1 -1
  93. package/dist/deploy/settings/extra-files.d.ts.map +1 -1
  94. package/dist/deploy/settings/extra-files.js +22 -1
  95. package/dist/deploy/settings/extra-files.js.map +1 -1
  96. package/dist/deploy/settings/index.d.ts +1 -0
  97. package/dist/deploy/settings/index.d.ts.map +1 -1
  98. package/dist/deploy/settings/index.js +2 -1
  99. package/dist/deploy/settings/index.js.map +1 -1
  100. package/dist/deploy/settings/libraries.d.ts.map +1 -1
  101. package/dist/deploy/settings/libraries.js +2 -19
  102. package/dist/deploy/settings/libraries.js.map +1 -1
  103. package/dist/deploy/settings/paths.d.ts +2 -2
  104. package/dist/deploy/settings/paths.d.ts.map +1 -1
  105. package/dist/deploy/settings/paths.js +110 -12
  106. package/dist/deploy/settings/paths.js.map +1 -1
  107. package/dist/deploy/settings/screenshots.d.ts.map +1 -1
  108. package/dist/deploy/settings/screenshots.js +6 -31
  109. package/dist/deploy/settings/screenshots.js.map +1 -1
  110. package/dist/deploy/targets/flatpak-pnpm.js +4 -4
  111. package/dist/deploy/targets/flatpak-pnpm.js.map +1 -1
  112. package/dist/deploy/targets/flatpak-source.d.ts.map +1 -1
  113. package/dist/deploy/targets/flatpak-source.js +15 -6
  114. package/dist/deploy/targets/flatpak-source.js.map +1 -1
  115. package/dist/deploy/targets/flatpak-sources.js +1 -1
  116. package/dist/deploy/targets/flatpak-sources.js.map +1 -1
  117. package/dist/deploy/types.d.ts +1 -0
  118. package/dist/deploy/types.d.ts.map +1 -1
  119. package/dist/deploy/types.js.map +1 -1
  120. package/dist/dev/headless.d.ts +3 -0
  121. package/dist/dev/headless.d.ts.map +1 -0
  122. package/dist/dev/headless.js +35 -0
  123. package/dist/dev/headless.js.map +1 -0
  124. package/dist/dev/runner-deps.js +1 -1
  125. package/dist/dev/runner-deps.js.map +1 -1
  126. package/dist/dev/runner-main.d.ts.map +1 -1
  127. package/dist/dev/runner-main.js +1 -2
  128. package/dist/dev/runner-main.js.map +1 -1
  129. package/dist/dev/schema-dir.d.ts +1 -1
  130. package/dist/dev/schema-dir.d.ts.map +1 -1
  131. package/dist/dev/schema-dir.js +2 -4
  132. package/dist/dev/schema-dir.js.map +1 -1
  133. package/dist/i18n/catalogs.d.ts.map +1 -1
  134. package/dist/i18n/catalogs.js +2 -1
  135. package/dist/i18n/catalogs.js.map +1 -1
  136. package/dist/i18n/metadata-templates.d.ts.map +1 -1
  137. package/dist/i18n/metadata-templates.js +2 -1
  138. package/dist/i18n/metadata-templates.js.map +1 -1
  139. package/dist/i18n/source-messages.d.ts +3 -21
  140. package/dist/i18n/source-messages.d.ts.map +1 -1
  141. package/dist/i18n/source-messages.js +900 -85
  142. package/dist/i18n/source-messages.js.map +1 -1
  143. package/dist/i18n/types.d.ts +6 -7
  144. package/dist/i18n/types.d.ts.map +1 -1
  145. package/dist/i18n/types.js +83 -96
  146. package/dist/i18n/types.js.map +1 -1
  147. package/dist/internal/build-manifest.d.ts +5 -2
  148. package/dist/internal/build-manifest.d.ts.map +1 -1
  149. package/dist/internal/build-manifest.js +15 -2
  150. package/dist/internal/build-manifest.js.map +1 -1
  151. package/dist/internal/build-output.d.ts +8 -0
  152. package/dist/internal/build-output.d.ts.map +1 -0
  153. package/dist/internal/build-output.js +69 -0
  154. package/dist/internal/build-output.js.map +1 -0
  155. package/dist/internal/docs-elements.js +2 -2
  156. package/dist/internal/docs-elements.js.map +1 -1
  157. package/dist/internal/entry-arg.d.ts +4 -1
  158. package/dist/internal/entry-arg.d.ts.map +1 -1
  159. package/dist/internal/entry-arg.js +7 -1
  160. package/dist/internal/entry-arg.js.map +1 -1
  161. package/dist/internal/icon-path.d.ts.map +1 -1
  162. package/dist/internal/icon-path.js +5 -16
  163. package/dist/internal/icon-path.js.map +1 -1
  164. package/dist/internal/output-directory.d.ts +15 -0
  165. package/dist/internal/output-directory.d.ts.map +1 -0
  166. package/dist/internal/output-directory.js +490 -0
  167. package/dist/internal/output-directory.js.map +1 -0
  168. package/dist/internal/prepare-project.d.ts +2 -0
  169. package/dist/internal/prepare-project.d.ts.map +1 -1
  170. package/dist/internal/prepare-project.js +3 -3
  171. package/dist/internal/prepare-project.js.map +1 -1
  172. package/dist/internal/source-imports.d.ts.map +1 -1
  173. package/dist/internal/source-imports.js +10 -41
  174. package/dist/internal/source-imports.js.map +1 -1
  175. package/dist/mcp/client.js +2 -2
  176. package/dist/mcp/client.js.map +1 -1
  177. package/dist/settings/render.d.ts +0 -1
  178. package/dist/settings/render.d.ts.map +1 -1
  179. package/dist/settings/render.js +1 -11
  180. package/dist/settings/render.js.map +1 -1
  181. package/dist/settings/schema.d.ts +2 -2
  182. package/dist/settings/schema.d.ts.map +1 -1
  183. package/dist/settings/schema.js +21 -62
  184. package/dist/settings/schema.js.map +1 -1
  185. package/dist/vite-plugins/asset-imports.d.ts +1 -2
  186. package/dist/vite-plugins/asset-imports.d.ts.map +1 -1
  187. package/dist/vite-plugins/asset-imports.js +19 -32
  188. package/dist/vite-plugins/asset-imports.js.map +1 -1
  189. package/dist/vite-plugins/asset-specifier.d.ts +1 -3
  190. package/dist/vite-plugins/asset-specifier.d.ts.map +1 -1
  191. package/dist/vite-plugins/asset-specifier.js +1 -4
  192. package/dist/vite-plugins/asset-specifier.js.map +1 -1
  193. package/dist/vite-plugins/build-manifest.d.ts +5 -1
  194. package/dist/vite-plugins/build-manifest.d.ts.map +1 -1
  195. package/dist/vite-plugins/build-manifest.js +2 -1
  196. package/dist/vite-plugins/build-manifest.js.map +1 -1
  197. package/dist/vite-plugins/i18n.d.ts.map +1 -1
  198. package/dist/vite-plugins/i18n.js +59 -6
  199. package/dist/vite-plugins/i18n.js.map +1 -1
  200. package/dist/vite-plugins/index.d.ts +8 -1
  201. package/dist/vite-plugins/index.d.ts.map +1 -1
  202. package/dist/vite-plugins/index.js +8 -6
  203. package/dist/vite-plugins/index.js.map +1 -1
  204. package/dist/vite-plugins/resources.d.ts.map +1 -1
  205. package/dist/vite-plugins/resources.js +32 -97
  206. package/dist/vite-plugins/resources.js.map +1 -1
  207. package/dist/vite-plugins/self-contained.d.ts.map +1 -1
  208. package/dist/vite-plugins/self-contained.js +159 -158
  209. package/dist/vite-plugins/self-contained.js.map +1 -1
  210. package/dist/vite-plugins/settings-worker-env.d.ts.map +1 -1
  211. package/dist/vite-plugins/settings-worker-env.js +2 -4
  212. package/dist/vite-plugins/settings-worker-env.js.map +1 -1
  213. package/dist/vite-plugins/settings.d.ts +1 -2
  214. package/dist/vite-plugins/settings.d.ts.map +1 -1
  215. package/dist/vite-plugins/settings.js +8 -14
  216. package/dist/vite-plugins/settings.js.map +1 -1
  217. package/dist/vite-plugins/undeclared-library.d.ts.map +1 -1
  218. package/dist/vite-plugins/undeclared-library.js +10 -13
  219. package/dist/vite-plugins/undeclared-library.js.map +1 -1
  220. package/dist/vite-plugins/worker.d.ts.map +1 -1
  221. package/dist/vite-plugins/worker.js +0 -1
  222. package/dist/vite-plugins/worker.js.map +1 -1
  223. package/package.json +21 -15
  224. package/src/builder.ts +18 -5
  225. package/src/cli.ts +3 -0
  226. package/src/codegen/freshness.ts +66 -17
  227. package/src/codegen/reference.ts +1 -8
  228. package/src/codegen/report.ts +5 -21
  229. package/src/codegen/run-codegen.ts +42 -151
  230. package/src/codegen/store-resolver.ts +10 -26
  231. package/src/commands/build.ts +13 -2
  232. package/src/commands/codegen.ts +6 -5
  233. package/src/commands/deploy.ts +4 -2
  234. package/src/commands/dev.ts +20 -1
  235. package/src/commands/docs.ts +5 -17
  236. package/src/deploy/freedesktop/copyright.ts +2 -14
  237. package/src/deploy/freedesktop/metainfo.ts +73 -21
  238. package/src/deploy/freedesktop/xml.ts +24 -32
  239. package/src/deploy/nfpm/config.ts +5 -2
  240. package/src/deploy/nfpm/contents.ts +8 -0
  241. package/src/deploy/node-runtime/elf.ts +43 -5
  242. package/src/deploy/node-runtime/index.ts +105 -5
  243. package/src/deploy/node-runtime/license.ts +2 -8
  244. package/src/deploy/notices/node-runtime.ts +2 -2
  245. package/src/deploy/notices/packages.ts +3 -11
  246. package/src/deploy/payload/copy-tree.ts +3 -4
  247. package/src/deploy/payload/launcher.ts +20 -1
  248. package/src/deploy/payload/stage.ts +3 -7
  249. package/src/deploy/run-deploy.ts +56 -16
  250. package/src/deploy/settings/build-manifest.ts +30 -17
  251. package/src/deploy/settings/extra-files.ts +26 -2
  252. package/src/deploy/settings/index.ts +3 -1
  253. package/src/deploy/settings/libraries.ts +1 -22
  254. package/src/deploy/settings/paths.ts +68 -13
  255. package/src/deploy/settings/screenshots.ts +8 -46
  256. package/src/deploy/targets/flatpak-pnpm.ts +4 -4
  257. package/src/deploy/targets/flatpak-source.ts +17 -6
  258. package/src/deploy/targets/flatpak-sources.ts +1 -1
  259. package/src/deploy/types.ts +1 -0
  260. package/src/dev/headless.ts +40 -0
  261. package/src/dev/runner-deps.ts +1 -1
  262. package/src/dev/runner-main.ts +1 -2
  263. package/src/dev/schema-dir.ts +2 -4
  264. package/src/i18n/catalogs.ts +2 -1
  265. package/src/i18n/metadata-templates.ts +2 -1
  266. package/src/i18n/source-messages.ts +1442 -262
  267. package/src/i18n/types.ts +97 -131
  268. package/src/internal/build-manifest.ts +25 -1
  269. package/src/internal/build-output.ts +99 -0
  270. package/src/internal/docs-elements.ts +2 -2
  271. package/src/internal/entry-arg.ts +8 -1
  272. package/src/internal/icon-path.ts +6 -19
  273. package/src/internal/output-directory.ts +699 -0
  274. package/src/internal/prepare-project.ts +5 -5
  275. package/src/internal/source-imports.ts +14 -50
  276. package/src/mcp/client.ts +2 -2
  277. package/src/settings/render.ts +1 -13
  278. package/src/settings/schema.ts +19 -81
  279. package/src/vite-plugins/asset-imports.ts +20 -44
  280. package/src/vite-plugins/asset-specifier.ts +0 -5
  281. package/src/vite-plugins/build-manifest.ts +7 -1
  282. package/src/vite-plugins/i18n.ts +87 -5
  283. package/src/vite-plugins/index.ts +16 -11
  284. package/src/vite-plugins/resources.ts +37 -140
  285. package/src/vite-plugins/self-contained.ts +184 -185
  286. package/src/vite-plugins/settings-worker-env.ts +2 -4
  287. package/src/vite-plugins/settings.ts +11 -20
  288. package/src/vite-plugins/undeclared-library.ts +14 -20
  289. package/src/vite-plugins/worker.ts +0 -1
  290. package/dist/i18n/binding-extractor.d.ts +0 -30
  291. package/dist/i18n/binding-extractor.d.ts.map +0 -1
  292. package/dist/i18n/binding-extractor.js +0 -1324
  293. package/dist/i18n/binding-extractor.js.map +0 -1
  294. package/dist/i18n/extractor-plugin.d.ts +0 -8
  295. package/dist/i18n/extractor-plugin.d.ts.map +0 -1
  296. package/dist/i18n/extractor-plugin.js +0 -247
  297. package/dist/i18n/extractor-plugin.js.map +0 -1
  298. package/dist/internal/data-dir.d.ts +0 -4
  299. package/dist/internal/data-dir.d.ts.map +0 -1
  300. package/dist/internal/data-dir.js +0 -52
  301. package/dist/internal/data-dir.js.map +0 -1
  302. package/dist/vite-plugins/animated.d.ts +0 -5
  303. package/dist/vite-plugins/animated.d.ts.map +0 -1
  304. package/dist/vite-plugins/animated.js +0 -325
  305. package/dist/vite-plugins/animated.js.map +0 -1
  306. package/src/i18n/binding-extractor.ts +0 -1969
  307. package/src/i18n/extractor-plugin.ts +0 -413
  308. package/src/internal/data-dir.ts +0 -70
  309. package/src/vite-plugins/animated.ts +0 -486
@@ -1,9 +1,14 @@
1
+ import type { Config } from "@gtkx/config";
1
2
  import type { DeploySettings } from "../types.js";
2
3
  import { type RecordedPackage } from "../../internal/build-manifest.js";
3
4
  type ResolvedBuildManifest = {
4
5
  packages: RecordedPackage[];
5
6
  schemaFiles: string[];
6
7
  };
7
- declare const readBuildManifest: (settings: DeploySettings) => ResolvedBuildManifest;
8
+ type ExpectedBuildConfig = {
9
+ config: Config;
10
+ configFile: string;
11
+ };
12
+ declare const readBuildManifest: (settings: DeploySettings, expected: ExpectedBuildConfig) => ResolvedBuildManifest;
8
13
  export { readBuildManifest };
9
14
  //# sourceMappingURL=build-manifest.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"build-manifest.d.ts","sourceRoot":"","sources":["../../../src/deploy/settings/build-manifest.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAKH,KAAK,eAAe,EACvB,MAAM,kCAAkC,CAAC;AAO1C,KAAK,qBAAqB,GAAG;IACzB,QAAQ,EAAE,eAAe,EAAE,CAAC;IAC5B,WAAW,EAAE,MAAM,EAAE,CAAC;CACzB,CAAC;AAqFF,QAAA,MAAM,iBAAiB,GAAI,UAAU,cAAc,KAAG,qBAcrD,CAAC;AAEF,OAAO,EAAE,iBAAiB,EAAE,CAAC"}
1
+ {"version":3,"file":"build-manifest.d.ts","sourceRoot":"","sources":["../../../src/deploy/settings/build-manifest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAI3C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAMH,KAAK,eAAe,EACvB,MAAM,kCAAkC,CAAC;AAO1C,KAAK,qBAAqB,GAAG;IACzB,QAAQ,EAAE,eAAe,EAAE,CAAC;IAC5B,WAAW,EAAE,MAAM,EAAE,CAAC;CACzB,CAAC;AAEF,KAAK,mBAAmB,GAAG;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;CACtB,CAAC;AA0FF,QAAA,MAAM,iBAAiB,GAAI,UAAU,cAAc,EAAE,UAAU,mBAAmB,KAAG,qBAepF,CAAC;AAEF,OAAO,EAAE,iBAAiB,EAAE,CAAC"}
@@ -1,7 +1,7 @@
1
- import { isRecord, sortStrings } from "@gtkx/utils";
1
+ import { isPathInside, isRecord, sortStrings, toPosixPath } from "@gtkx/utils";
2
2
  import { existsSync, readFileSync, statSync } from "node:fs";
3
- import { isAbsolute, join, relative, resolve, sep } from "node:path";
4
- import { BUILD_MANIFEST_FILENAME, BUILD_MANIFEST_FORMAT_VERSION, BUILD_MANIFEST_GENERATOR, } from "../../internal/build-manifest.js";
3
+ import { isAbsolute, join, relative, resolve } from "node:path";
4
+ import { BUILD_MANIFEST_FILENAME, BUILD_MANIFEST_FORMAT_VERSION, BUILD_MANIFEST_GENERATOR, configDigest, } from "../../internal/build-manifest.js";
5
5
  import { assertUniqueSchemaBasenames, projectRelativeSchemaPath, SCHEMA_SUFFIX, } from "../../settings/schema.js";
6
6
  const invalidManifest = (path) => new Error(`Cannot deploy: ${path} is not a valid GTKX build manifest. Run \`gtkx build\` again.`);
7
7
  const recordedSchemas = (value, path) => value.map((entry) => {
@@ -24,6 +24,8 @@ const parseBuildManifest = (value, path) => {
24
24
  if (!isRecord(value) ||
25
25
  value.generator !== BUILD_MANIFEST_GENERATOR ||
26
26
  value.formatVersion !== BUILD_MANIFEST_FORMAT_VERSION ||
27
+ typeof value.configFile !== "string" ||
28
+ typeof value.configDigest !== "string" ||
27
29
  !Array.isArray(value.schemas) ||
28
30
  !Array.isArray(value.packages)) {
29
31
  throw invalidManifest(path);
@@ -32,28 +34,19 @@ const parseBuildManifest = (value, path) => {
32
34
  return {
33
35
  generator: BUILD_MANIFEST_GENERATOR,
34
36
  formatVersion: BUILD_MANIFEST_FORMAT_VERSION,
37
+ configFile: value.configFile,
38
+ configDigest: value.configDigest,
35
39
  schemas: recordedSchemas(value.schemas, path),
36
40
  packages: packages.map((entry) => recordedPackage(entry, path)),
37
41
  };
38
42
  };
39
- const isFile = (path) => {
40
- try {
41
- return statSync(path, { throwIfNoEntry: false })?.isFile() === true;
42
- }
43
- catch {
44
- return false;
45
- }
46
- };
47
- const isInsideProject = (root, filePath) => {
48
- const rel = relative(root, filePath);
49
- return rel.length > 0 && rel !== ".." && !rel.startsWith(`..${sep}`) && !isAbsolute(rel);
50
- };
43
+ const isFile = (path) => statSync(path, { throwIfNoEntry: false })?.isFile() === true;
51
44
  const resolveRecordedSchema = (root, manifestPath, entry) => {
52
45
  if (isAbsolute(entry) || !entry.endsWith(SCHEMA_SUFFIX)) {
53
46
  throw new Error(`Cannot deploy: ${manifestPath} records an invalid GSettings schema path.`);
54
47
  }
55
48
  const filePath = resolve(root, entry);
56
- if (!isInsideProject(root, filePath)) {
49
+ if (!isPathInside(root, filePath)) {
57
50
  throw new Error(`Cannot deploy: ${manifestPath} records a GSettings schema outside the project.`);
58
51
  }
59
52
  if (!isFile(filePath)) {
@@ -64,13 +57,20 @@ const resolveRecordedSchema = (root, manifestPath, entry) => {
64
57
  }
65
58
  return filePath;
66
59
  };
67
- const readBuildManifest = (settings) => {
60
+ const assertBuildConfig = (settings, manifestPath, manifest, expected) => {
61
+ const expectedFile = toPosixPath(relative(settings.paths.root, expected.configFile));
62
+ if (manifest.configFile !== expectedFile || manifest.configDigest !== configDigest(expected.config)) {
63
+ throw new Error(`Cannot deploy: ${manifestPath} was built from a different GTKX configuration.`);
64
+ }
65
+ };
66
+ const readBuildManifest = (settings, expected) => {
68
67
  const manifestPath = join(settings.paths.dist, BUILD_MANIFEST_FILENAME);
69
68
  if (!existsSync(manifestPath)) {
70
69
  throw new Error(`Cannot deploy: ${manifestPath} is missing. Run \`gtkx build\` first.`);
71
70
  }
72
71
  const parsed = JSON.parse(readFileSync(manifestPath, "utf8"));
73
72
  const manifest = parseBuildManifest(parsed, manifestPath);
73
+ assertBuildConfig(settings, manifestPath, manifest, expected);
74
74
  const files = manifest.schemas.map((entry) => resolveRecordedSchema(settings.paths.root, manifestPath, entry));
75
75
  const unique = sortStrings(new Set(files));
76
76
  assertUniqueSchemaBasenames(unique);
@@ -1 +1 @@
1
- {"version":3,"file":"build-manifest.js","sourceRoot":"","sources":["../../../src/deploy/settings/build-manifest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAErE,OAAO,EACH,uBAAuB,EACvB,6BAA6B,EAC7B,wBAAwB,GAG3B,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EACH,2BAA2B,EAC3B,yBAAyB,EACzB,aAAa,GAChB,MAAM,0BAA0B,CAAC;AAOlC,MAAM,eAAe,GAAG,CAAC,IAAY,EAAS,EAAE,CAC5C,IAAI,KAAK,CAAC,kBAAkB,IAAI,gEAAgE,CAAC,CAAC;AAEtG,MAAM,eAAe,GAAG,CAAC,KAAgB,EAAE,IAAY,EAAY,EAAE,CACjE,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;IAChB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC5B,MAAM,eAAe,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;IAED,OAAO,KAAK,CAAC;AACjB,CAAC,CAAC,CAAC;AAEP,MAAM,eAAe,GAAG,CAAC,KAAc,EAAE,IAAY,EAAmB,EAAE;IACtE,IACI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAChB,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ;QAC9B,OAAO,KAAK,CAAC,GAAG,KAAK,QAAQ;QAC7B,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC;QACrB,CAAC,KAAK,CAAC,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,CAAC,EAC/D,CAAC;QACC,MAAM,eAAe,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC;AACxE,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAAG,CAAC,KAAc,EAAE,IAAY,EAAiB,EAAE;IACvE,IACI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAChB,KAAK,CAAC,SAAS,KAAK,wBAAwB;QAC5C,KAAK,CAAC,aAAa,KAAK,6BAA6B;QACrD,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC;QAC7B,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,EAChC,CAAC;QACC,MAAM,eAAe,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;IAED,MAAM,QAAQ,GAAc,KAAK,CAAC,QAAQ,CAAC;IAE3C,OAAO;QACH,SAAS,EAAE,wBAAwB;QACnC,aAAa,EAAE,6BAA6B;QAC5C,OAAO,EAAE,eAAe,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC;QAC7C,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,eAAe,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;KAClE,CAAC;AACN,CAAC,CAAC;AAEF,MAAM,MAAM,GAAG,CAAC,IAAY,EAAW,EAAE;IACrC,IAAI,CAAC;QACD,OAAO,QAAQ,CAAC,IAAI,EAAE,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IACxE,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,KAAK,CAAC;IACjB,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,CAAC,IAAY,EAAE,QAAgB,EAAW,EAAE;IAChE,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAErC,OAAO,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,GAAG,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,GAAG,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;AAC7F,CAAC,CAAC;AAEF,MAAM,qBAAqB,GAAG,CAAC,IAAY,EAAE,YAAoB,EAAE,KAAa,EAAU,EAAE;IACxF,IAAI,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;QACtD,MAAM,IAAI,KAAK,CAAC,kBAAkB,YAAY,4CAA4C,CAAC,CAAC;IAChG,CAAC;IAED,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAEtC,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CAAC,kBAAkB,YAAY,kDAAkD,CAAC,CAAC;IACtG,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,gDAAgD,QAAQ,cAAc,CAAC,CAAC;IAC5F,CAAC;IAED,IAAI,yBAAyB,CAAC,IAAI,EAAE,QAAQ,CAAC,KAAK,IAAI,EAAE,CAAC;QACrD,MAAM,IAAI,KAAK,CAAC,kBAAkB,YAAY,kDAAkD,CAAC,CAAC;IACtG,CAAC;IAED,OAAO,QAAQ,CAAC;AACpB,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CAAC,QAAwB,EAAyB,EAAE;IAC1E,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,uBAAuB,CAAC,CAAC;IAExE,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,kBAAkB,YAAY,wCAAwC,CAAC,CAAC;IAC5F,CAAC;IAED,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC;IACvE,MAAM,QAAQ,GAAG,kBAAkB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAC1D,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,qBAAqB,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,YAAY,EAAE,KAAK,CAAC,CAAC,CAAC;IAC/G,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;IAC3C,2BAA2B,CAAC,MAAM,CAAC,CAAC;IAEpC,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC;AAChE,CAAC,CAAC;AAEF,OAAO,EAAE,iBAAiB,EAAE,CAAC","sourcesContent":["import { isRecord, sortStrings } from \"@gtkx/utils\";\nimport { existsSync, readFileSync, statSync } from \"node:fs\";\nimport { isAbsolute, join, relative, resolve, sep } from \"node:path\";\nimport type { DeploySettings } from \"../types.js\";\nimport {\n BUILD_MANIFEST_FILENAME,\n BUILD_MANIFEST_FORMAT_VERSION,\n BUILD_MANIFEST_GENERATOR,\n type BuildManifest,\n type RecordedPackage,\n} from \"../../internal/build-manifest.js\";\nimport {\n assertUniqueSchemaBasenames,\n projectRelativeSchemaPath,\n SCHEMA_SUFFIX,\n} from \"../../settings/schema.js\";\n\ntype ResolvedBuildManifest = {\n packages: RecordedPackage[];\n schemaFiles: string[];\n};\n\nconst invalidManifest = (path: string): Error =>\n new Error(`Cannot deploy: ${path} is not a valid GTKX build manifest. Run \\`gtkx build\\` again.`);\n\nconst recordedSchemas = (value: unknown[], path: string): string[] =>\n value.map((entry) => {\n if (typeof entry !== \"string\") {\n throw invalidManifest(path);\n }\n\n return entry;\n });\n\nconst recordedPackage = (value: unknown, path: string): RecordedPackage => {\n if (\n !isRecord(value) ||\n typeof value.name !== \"string\" ||\n typeof value.dir !== \"string\" ||\n isAbsolute(value.dir) ||\n (value.version !== null && typeof value.version !== \"string\")\n ) {\n throw invalidManifest(path);\n }\n\n return { name: value.name, version: value.version, dir: value.dir };\n};\n\nconst parseBuildManifest = (value: unknown, path: string): BuildManifest => {\n if (\n !isRecord(value) ||\n value.generator !== BUILD_MANIFEST_GENERATOR ||\n value.formatVersion !== BUILD_MANIFEST_FORMAT_VERSION ||\n !Array.isArray(value.schemas) ||\n !Array.isArray(value.packages)\n ) {\n throw invalidManifest(path);\n }\n\n const packages: unknown[] = value.packages;\n\n return {\n generator: BUILD_MANIFEST_GENERATOR,\n formatVersion: BUILD_MANIFEST_FORMAT_VERSION,\n schemas: recordedSchemas(value.schemas, path),\n packages: packages.map((entry) => recordedPackage(entry, path)),\n };\n};\n\nconst isFile = (path: string): boolean => {\n try {\n return statSync(path, { throwIfNoEntry: false })?.isFile() === true;\n } catch {\n return false;\n }\n};\n\nconst isInsideProject = (root: string, filePath: string): boolean => {\n const rel = relative(root, filePath);\n\n return rel.length > 0 && rel !== \"..\" && !rel.startsWith(`..${sep}`) && !isAbsolute(rel);\n};\n\nconst resolveRecordedSchema = (root: string, manifestPath: string, entry: string): string => {\n if (isAbsolute(entry) || !entry.endsWith(SCHEMA_SUFFIX)) {\n throw new Error(`Cannot deploy: ${manifestPath} records an invalid GSettings schema path.`);\n }\n\n const filePath = resolve(root, entry);\n\n if (!isInsideProject(root, filePath)) {\n throw new Error(`Cannot deploy: ${manifestPath} records a GSettings schema outside the project.`);\n }\n\n if (!isFile(filePath)) {\n throw new Error(`Cannot deploy: the recorded GSettings schema ${filePath} is missing.`);\n }\n\n if (projectRelativeSchemaPath(root, filePath) === null) {\n throw new Error(`Cannot deploy: ${manifestPath} records a GSettings schema outside the project.`);\n }\n\n return filePath;\n};\n\nconst readBuildManifest = (settings: DeploySettings): ResolvedBuildManifest => {\n const manifestPath = join(settings.paths.dist, BUILD_MANIFEST_FILENAME);\n\n if (!existsSync(manifestPath)) {\n throw new Error(`Cannot deploy: ${manifestPath} is missing. Run \\`gtkx build\\` first.`);\n }\n\n const parsed: unknown = JSON.parse(readFileSync(manifestPath, \"utf8\"));\n const manifest = parseBuildManifest(parsed, manifestPath);\n const files = manifest.schemas.map((entry) => resolveRecordedSchema(settings.paths.root, manifestPath, entry));\n const unique = sortStrings(new Set(files));\n assertUniqueSchemaBasenames(unique);\n\n return { packages: manifest.packages, schemaFiles: unique };\n};\n\nexport { readBuildManifest };\n"]}
1
+ {"version":3,"file":"build-manifest.js","sourceRoot":"","sources":["../../../src/deploy/settings/build-manifest.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/E,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEhE,OAAO,EACH,uBAAuB,EACvB,6BAA6B,EAC7B,wBAAwB,EAExB,YAAY,GAEf,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EACH,2BAA2B,EAC3B,yBAAyB,EACzB,aAAa,GAChB,MAAM,0BAA0B,CAAC;AAYlC,MAAM,eAAe,GAAG,CAAC,IAAY,EAAS,EAAE,CAC5C,IAAI,KAAK,CAAC,kBAAkB,IAAI,gEAAgE,CAAC,CAAC;AAEtG,MAAM,eAAe,GAAG,CAAC,KAAgB,EAAE,IAAY,EAAY,EAAE,CACjE,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;IAChB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC5B,MAAM,eAAe,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;IAED,OAAO,KAAK,CAAC;AACjB,CAAC,CAAC,CAAC;AAEP,MAAM,eAAe,GAAG,CAAC,KAAc,EAAE,IAAY,EAAmB,EAAE;IACtE,IACI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAChB,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ;QAC9B,OAAO,KAAK,CAAC,GAAG,KAAK,QAAQ;QAC7B,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC;QACrB,CAAC,KAAK,CAAC,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,CAAC,EAC/D,CAAC;QACC,MAAM,eAAe,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC;AACxE,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAAG,CAAC,KAAc,EAAE,IAAY,EAAiB,EAAE;IACvE,IACI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAChB,KAAK,CAAC,SAAS,KAAK,wBAAwB;QAC5C,KAAK,CAAC,aAAa,KAAK,6BAA6B;QACrD,OAAO,KAAK,CAAC,UAAU,KAAK,QAAQ;QACpC,OAAO,KAAK,CAAC,YAAY,KAAK,QAAQ;QACtC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC;QAC7B,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,EAChC,CAAC;QACC,MAAM,eAAe,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;IAED,MAAM,QAAQ,GAAc,KAAK,CAAC,QAAQ,CAAC;IAE3C,OAAO;QACH,SAAS,EAAE,wBAAwB;QACnC,aAAa,EAAE,6BAA6B;QAC5C,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,YAAY,EAAE,KAAK,CAAC,YAAY;QAChC,OAAO,EAAE,eAAe,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC;QAC7C,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,eAAe,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;KAClE,CAAC;AACN,CAAC,CAAC;AAEF,MAAM,MAAM,GAAG,CAAC,IAAY,EAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;AAEvG,MAAM,qBAAqB,GAAG,CAAC,IAAY,EAAE,YAAoB,EAAE,KAAa,EAAU,EAAE;IACxF,IAAI,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;QACtD,MAAM,IAAI,KAAK,CAAC,kBAAkB,YAAY,4CAA4C,CAAC,CAAC;IAChG,CAAC;IAED,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAEtC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,CAAC;QAChC,MAAM,IAAI,KAAK,CAAC,kBAAkB,YAAY,kDAAkD,CAAC,CAAC;IACtG,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,gDAAgD,QAAQ,cAAc,CAAC,CAAC;IAC5F,CAAC;IAED,IAAI,yBAAyB,CAAC,IAAI,EAAE,QAAQ,CAAC,KAAK,IAAI,EAAE,CAAC;QACrD,MAAM,IAAI,KAAK,CAAC,kBAAkB,YAAY,kDAAkD,CAAC,CAAC;IACtG,CAAC;IAED,OAAO,QAAQ,CAAC;AACpB,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CACtB,QAAwB,EACxB,YAAoB,EACpB,QAAuB,EACvB,QAA6B,EACzB,EAAE;IACN,MAAM,YAAY,GAAG,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;IAErF,IAAI,QAAQ,CAAC,UAAU,KAAK,YAAY,IAAI,QAAQ,CAAC,YAAY,KAAK,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAClG,MAAM,IAAI,KAAK,CAAC,kBAAkB,YAAY,iDAAiD,CAAC,CAAC;IACrG,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CAAC,QAAwB,EAAE,QAA6B,EAAyB,EAAE;IACzG,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,uBAAuB,CAAC,CAAC;IAExE,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,kBAAkB,YAAY,wCAAwC,CAAC,CAAC;IAC5F,CAAC;IAED,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC;IACvE,MAAM,QAAQ,GAAG,kBAAkB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAC1D,iBAAiB,CAAC,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC9D,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,qBAAqB,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,YAAY,EAAE,KAAK,CAAC,CAAC,CAAC;IAC/G,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;IAC3C,2BAA2B,CAAC,MAAM,CAAC,CAAC;IAEpC,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC;AAChE,CAAC,CAAC;AAEF,OAAO,EAAE,iBAAiB,EAAE,CAAC","sourcesContent":["import type { Config } from \"@gtkx/config\";\nimport { isPathInside, isRecord, sortStrings, toPosixPath } from \"@gtkx/utils\";\nimport { existsSync, readFileSync, statSync } from \"node:fs\";\nimport { isAbsolute, join, relative, resolve } from \"node:path\";\nimport type { DeploySettings } from \"../types.js\";\nimport {\n BUILD_MANIFEST_FILENAME,\n BUILD_MANIFEST_FORMAT_VERSION,\n BUILD_MANIFEST_GENERATOR,\n type BuildManifest,\n configDigest,\n type RecordedPackage,\n} from \"../../internal/build-manifest.js\";\nimport {\n assertUniqueSchemaBasenames,\n projectRelativeSchemaPath,\n SCHEMA_SUFFIX,\n} from \"../../settings/schema.js\";\n\ntype ResolvedBuildManifest = {\n packages: RecordedPackage[];\n schemaFiles: string[];\n};\n\ntype ExpectedBuildConfig = {\n config: Config;\n configFile: string;\n};\n\nconst invalidManifest = (path: string): Error =>\n new Error(`Cannot deploy: ${path} is not a valid GTKX build manifest. Run \\`gtkx build\\` again.`);\n\nconst recordedSchemas = (value: unknown[], path: string): string[] =>\n value.map((entry) => {\n if (typeof entry !== \"string\") {\n throw invalidManifest(path);\n }\n\n return entry;\n });\n\nconst recordedPackage = (value: unknown, path: string): RecordedPackage => {\n if (\n !isRecord(value) ||\n typeof value.name !== \"string\" ||\n typeof value.dir !== \"string\" ||\n isAbsolute(value.dir) ||\n (value.version !== null && typeof value.version !== \"string\")\n ) {\n throw invalidManifest(path);\n }\n\n return { name: value.name, version: value.version, dir: value.dir };\n};\n\nconst parseBuildManifest = (value: unknown, path: string): BuildManifest => {\n if (\n !isRecord(value) ||\n value.generator !== BUILD_MANIFEST_GENERATOR ||\n value.formatVersion !== BUILD_MANIFEST_FORMAT_VERSION ||\n typeof value.configFile !== \"string\" ||\n typeof value.configDigest !== \"string\" ||\n !Array.isArray(value.schemas) ||\n !Array.isArray(value.packages)\n ) {\n throw invalidManifest(path);\n }\n\n const packages: unknown[] = value.packages;\n\n return {\n generator: BUILD_MANIFEST_GENERATOR,\n formatVersion: BUILD_MANIFEST_FORMAT_VERSION,\n configFile: value.configFile,\n configDigest: value.configDigest,\n schemas: recordedSchemas(value.schemas, path),\n packages: packages.map((entry) => recordedPackage(entry, path)),\n };\n};\n\nconst isFile = (path: string): boolean => statSync(path, { throwIfNoEntry: false })?.isFile() === true;\n\nconst resolveRecordedSchema = (root: string, manifestPath: string, entry: string): string => {\n if (isAbsolute(entry) || !entry.endsWith(SCHEMA_SUFFIX)) {\n throw new Error(`Cannot deploy: ${manifestPath} records an invalid GSettings schema path.`);\n }\n\n const filePath = resolve(root, entry);\n\n if (!isPathInside(root, filePath)) {\n throw new Error(`Cannot deploy: ${manifestPath} records a GSettings schema outside the project.`);\n }\n\n if (!isFile(filePath)) {\n throw new Error(`Cannot deploy: the recorded GSettings schema ${filePath} is missing.`);\n }\n\n if (projectRelativeSchemaPath(root, filePath) === null) {\n throw new Error(`Cannot deploy: ${manifestPath} records a GSettings schema outside the project.`);\n }\n\n return filePath;\n};\n\nconst assertBuildConfig = (\n settings: DeploySettings,\n manifestPath: string,\n manifest: BuildManifest,\n expected: ExpectedBuildConfig,\n): void => {\n const expectedFile = toPosixPath(relative(settings.paths.root, expected.configFile));\n\n if (manifest.configFile !== expectedFile || manifest.configDigest !== configDigest(expected.config)) {\n throw new Error(`Cannot deploy: ${manifestPath} was built from a different GTKX configuration.`);\n }\n};\n\nconst readBuildManifest = (settings: DeploySettings, expected: ExpectedBuildConfig): ResolvedBuildManifest => {\n const manifestPath = join(settings.paths.dist, BUILD_MANIFEST_FILENAME);\n\n if (!existsSync(manifestPath)) {\n throw new Error(`Cannot deploy: ${manifestPath} is missing. Run \\`gtkx build\\` first.`);\n }\n\n const parsed: unknown = JSON.parse(readFileSync(manifestPath, \"utf8\"));\n const manifest = parseBuildManifest(parsed, manifestPath);\n assertBuildConfig(settings, manifestPath, manifest, expected);\n const files = manifest.schemas.map((entry) => resolveRecordedSchema(settings.paths.root, manifestPath, entry));\n const unique = sortStrings(new Set(files));\n assertUniqueSchemaBasenames(unique);\n\n return { packages: manifest.packages, schemaFiles: unique };\n};\n\nexport { readBuildManifest };\n"]}
@@ -1,4 +1,4 @@
1
1
  import type { DeployConfig, DeployExtraFile } from "../types.js";
2
- declare const resolveExtraFiles: (deploy: DeployConfig) => DeployExtraFile[];
2
+ declare const resolveExtraFiles: (root: string, deploy: DeployConfig) => DeployExtraFile[];
3
3
  export { resolveExtraFiles };
4
4
  //# sourceMappingURL=extra-files.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"extra-files.d.ts","sourceRoot":"","sources":["../../../src/deploy/settings/extra-files.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAiBjE,QAAA,MAAM,iBAAiB,GAAI,QAAQ,YAAY,KAAG,eAAe,EAC8C,CAAC;AAEhH,OAAO,EAAE,iBAAiB,EAAE,CAAC"}
1
+ {"version":3,"file":"extra-files.d.ts","sourceRoot":"","sources":["../../../src/deploy/settings/extra-files.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AA+BjE,QAAA,MAAM,iBAAiB,GAAI,MAAM,MAAM,EAAE,QAAQ,YAAY,KAAG,eAAe,EAS9E,CAAC;AAEF,OAAO,EAAE,iBAAiB,EAAE,CAAC"}
@@ -1,4 +1,18 @@
1
+ import { statSync } from "node:fs";
2
+ import { resolve } from "node:path";
1
3
  const OCTAL_RADIX = 8;
4
+ const assertSourceFile = (root, file) => {
5
+ const source = resolve(root, file.source);
6
+ try {
7
+ if (statSync(source).isFile()) {
8
+ return;
9
+ }
10
+ }
11
+ catch {
12
+ throw new Error(`Cannot install "${file.destination}": its source file "${file.source}" does not exist`);
13
+ }
14
+ throw new Error(`Cannot install "${file.destination}": its source "${file.source}" is not a file`);
15
+ };
2
16
  const resolveExtraFile = (destination, entry) => {
3
17
  if (typeof entry === "string") {
4
18
  return { destination, source: entry, mode: null };
@@ -6,6 +20,13 @@ const resolveExtraFile = (destination, entry) => {
6
20
  const mode = entry.mode === undefined ? null : Number.parseInt(entry.mode, OCTAL_RADIX);
7
21
  return { destination, source: entry.source, mode };
8
22
  };
9
- const resolveExtraFiles = (deploy) => Object.entries(deploy.extraFiles ?? {}).map(([destination, entry]) => resolveExtraFile(destination, entry));
23
+ const resolveExtraFiles = (root, deploy) => {
24
+ const files = Object.entries(deploy.extraFiles ?? {})
25
+ .map(([destination, entry]) => resolveExtraFile(destination, entry));
26
+ for (const file of files) {
27
+ assertSourceFile(root, file);
28
+ }
29
+ return files;
30
+ };
10
31
  export { resolveExtraFiles };
11
32
  //# sourceMappingURL=extra-files.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"extra-files.js","sourceRoot":"","sources":["../../../src/deploy/settings/extra-files.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,GAAG,CAAC,CAAC;AAEtB,MAAM,gBAAgB,GAAG,CAAC,WAAmB,EAAE,KAAqB,EAAmB,EAAE;IACrF,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC5B,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACtD,CAAC;IAED,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IAExF,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC;AACvD,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CAAC,MAAoB,EAAqB,EAAE,CAClE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,gBAAgB,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC;AAEhH,OAAO,EAAE,iBAAiB,EAAE,CAAC","sourcesContent":["import type { DeployConfig, DeployExtraFile } from \"../types.js\";\n\ntype ExtraFiles = NonNullable<DeployConfig[\"extraFiles\"]>;\ntype ExtraFileEntry = NonNullable<ExtraFiles[string]>;\n\nconst OCTAL_RADIX = 8;\n\nconst resolveExtraFile = (destination: string, entry: ExtraFileEntry): DeployExtraFile => {\n if (typeof entry === \"string\") {\n return { destination, source: entry, mode: null };\n }\n\n const mode = entry.mode === undefined ? null : Number.parseInt(entry.mode, OCTAL_RADIX);\n\n return { destination, source: entry.source, mode };\n};\n\nconst resolveExtraFiles = (deploy: DeployConfig): DeployExtraFile[] =>\n Object.entries(deploy.extraFiles ?? {}).map(([destination, entry]) => resolveExtraFile(destination, entry));\n\nexport { resolveExtraFiles };\n"]}
1
+ {"version":3,"file":"extra-files.js","sourceRoot":"","sources":["../../../src/deploy/settings/extra-files.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,MAAM,WAAW,GAAG,CAAC,CAAC;AAEtB,MAAM,gBAAgB,GAAG,CAAC,IAAY,EAAE,IAAqB,EAAQ,EAAE;IACnE,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IAE1C,IAAI,CAAC;QACD,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;YAC5B,OAAO;QACX,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACL,MAAM,IAAI,KAAK,CAAC,mBAAmB,IAAI,CAAC,WAAW,uBAAuB,IAAI,CAAC,MAAM,kBAAkB,CAAC,CAAC;IAC7G,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,mBAAmB,IAAI,CAAC,WAAW,kBAAkB,IAAI,CAAC,MAAM,iBAAiB,CAAC,CAAC;AACvG,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,CAAC,WAAmB,EAAE,KAAqB,EAAmB,EAAE;IACrF,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC5B,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACtD,CAAC;IAED,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IAExF,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC;AACvD,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CAAC,IAAY,EAAE,MAAoB,EAAqB,EAAE;IAChF,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,IAAI,EAAE,CAAC;SAChD,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,gBAAgB,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC;IAEzE,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACvB,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACjC,CAAC;IAED,OAAO,KAAK,CAAC;AACjB,CAAC,CAAC;AAEF,OAAO,EAAE,iBAAiB,EAAE,CAAC","sourcesContent":["import { statSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport type { DeployConfig, DeployExtraFile } from \"../types.js\";\n\ntype ExtraFiles = NonNullable<DeployConfig[\"extraFiles\"]>;\ntype ExtraFileEntry = NonNullable<ExtraFiles[string]>;\n\nconst OCTAL_RADIX = 8;\n\nconst assertSourceFile = (root: string, file: DeployExtraFile): void => {\n const source = resolve(root, file.source);\n\n try {\n if (statSync(source).isFile()) {\n return;\n }\n } catch {\n throw new Error(`Cannot install \"${file.destination}\": its source file \"${file.source}\" does not exist`);\n }\n\n throw new Error(`Cannot install \"${file.destination}\": its source \"${file.source}\" is not a file`);\n};\n\nconst resolveExtraFile = (destination: string, entry: ExtraFileEntry): DeployExtraFile => {\n if (typeof entry === \"string\") {\n return { destination, source: entry, mode: null };\n }\n\n const mode = entry.mode === undefined ? null : Number.parseInt(entry.mode, OCTAL_RADIX);\n\n return { destination, source: entry.source, mode };\n};\n\nconst resolveExtraFiles = (root: string, deploy: DeployConfig): DeployExtraFile[] => {\n const files = Object.entries(deploy.extraFiles ?? {})\n .map(([destination, entry]) => resolveExtraFile(destination, entry));\n\n for (const file of files) {\n assertSourceFile(root, file);\n }\n\n return files;\n};\n\nexport { resolveExtraFiles };\n"]}
@@ -3,6 +3,7 @@ import type { DeploySettings } from "../types.js";
3
3
  type SettingsRequest = {
4
4
  root: string;
5
5
  config: Config;
6
+ configFile: string;
6
7
  outDirOverride?: string | undefined;
7
8
  now?: Date | undefined;
8
9
  };
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/deploy/settings/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,EAKR,cAAc,EAEjB,MAAM,aAAa,CAAC;AAsBrB,KAAK,eAAe,GAAG;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,GAAG,CAAC,EAAE,IAAI,GAAG,SAAS,CAAC;CAC1B,CAAC;AAwIF,QAAA,MAAM,qBAAqB,GAAI,SAAS,eAAe,KAAG,cAqBzD,CAAC;AAEF,OAAO,EAAE,qBAAqB,EAAE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/deploy/settings/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,EAKR,cAAc,EAEjB,MAAM,aAAa,CAAC;AAsBrB,KAAK,eAAe,GAAG;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,GAAG,CAAC,EAAE,IAAI,GAAG,SAAS,CAAC;CAC1B,CAAC;AAwIF,QAAA,MAAM,qBAAqB,GAAI,SAAS,eAAe,KAAG,cAsBzD,CAAC;AAEF,OAAO,EAAE,qBAAqB,EAAE,CAAC"}
@@ -89,10 +89,11 @@ const resolveDeploySettings = (request) => {
89
89
  const core = resolveCore(request);
90
90
  const deploy = core.identity.deploy;
91
91
  return {
92
+ configFile: request.configFile,
92
93
  ...identitySlice(core),
93
94
  ...metadataSlice(request.root, core),
94
95
  ...desktopSlice(deploy),
95
- extraFiles: resolveExtraFiles(deploy),
96
+ extraFiles: resolveExtraFiles(request.root, deploy),
96
97
  versions: core.versions,
97
98
  arch: resolveArch(),
98
99
  paths: resolvePaths({
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/deploy/settings/index.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AACxF,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAEH,iBAAiB,EACjB,gBAAgB,EAChB,kBAAkB,EAClB,gBAAgB,EAChB,cAAc,EACd,sBAAsB,EACtB,WAAW,EACX,cAAc,EACd,oBAAoB,GACvB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AA+C/C,MAAM,eAAe,GAAG,EAAE,CAAC;AAC3B,MAAM,uBAAuB,GAAG,IAAI,CAAC;AAErC,MAAM,gBAAgB,GAAG,CAAC,KAAyB,EAAe,EAAE;IAChE,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACnD,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAE9B,OAAO,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO,GAAG,uBAAuB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACzF,CAAC,CAAC;AAEF,MAAM,SAAS,GAAG,CAAC,GAAS,EAAU,EAAE;IACpC,MAAM,KAAK,GAAG,gBAAgB,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,GAAG,CAAC;IAErE,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC;AACzD,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,CAAC,CAAgB,EAAE,CAAgB,EAAU,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;AAEtH,MAAM,eAAe,GAAG,CAAC,MAAoB,EAAE,OAAe,EAAE,IAAY,EAAmB,EAAE,CAC7F,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;KACnC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACb,OAAO,EAAE,KAAK,CAAC,OAAO;IACtB,IAAI,EAAE,KAAK,CAAC,IAAI;IAChB,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,IAAI;IACxB,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,IAAI;IAC9B,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,EAAE;IACxB,GAAG,EAAE,KAAK,CAAC,GAAG,IAAI,IAAI;CACzB,CAAC,CAAC;KACF,QAAQ,CAAC,WAAW,CAAC,CAAC;AAE/B,MAAM,qBAAqB,GAAG,CAAC,MAAoB,EAAyB,EAAE,CAC1E,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;IAC/D,EAAE;IACF,IAAI,EAAE,MAAM,CAAC,IAAI;IACjB,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,EAAE;IACvB,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,IAAI;CAC5B,CAAC,CAAC,CAAC;AAER,MAAM,aAAa,GAAG,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAgB,EAAiB,EAAE,CAAC,CAAC;IACnF,aAAa,EAAE,QAAQ,CAAC,aAAa;IACrC,UAAU,EAAE,iBAAiB,CAAC,QAAQ,CAAC;IACvC,IAAI,EAAE,WAAW,CAAC,QAAQ,CAAC;IAC3B,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,WAAW,IAAI,IAAI;IAChD,OAAO,EAAE,cAAc,CAAC,QAAQ,CAAC;IACjC,WAAW,EAAE,kBAAkB,CAAC,QAAQ,CAAC;IACzC,SAAS;IACT,OAAO,EAAE,cAAc,CAAC,QAAQ,CAAC;IACjC,eAAe,EAAE,sBAAsB,CAAC,QAAQ,CAAC;IACjD,SAAS,EAAE,gBAAgB,CAAC,QAAQ,EAAE,SAAS,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,cAAc,EAAE,CAAC;IACjF,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,QAAQ,IAAI,QAAQ,CAAC,QAAQ,CAAC,QAAQ;CACnE,CAAC,CAAC;AAEH,MAAM,aAAa,GAAG,CAAC,IAAY,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAgB,EAAiB,EAAE;IAC9F,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;IAE/B,OAAO;QACH,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,EAAE;QAC/B,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,EAAE;QACnC,SAAS,EAAE,gBAAgB,CAAC,MAAM,CAAC;QACnC,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,EAAE;QACvB,WAAW,EAAE,kBAAkB,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;QACjD,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,IAAI;QACjC,aAAa,EAAE,MAAM,CAAC,aAAa,IAAI,EAAE;QACzC,QAAQ,EAAE,eAAe,CAAC,MAAM,EAAE,QAAQ,CAAC,cAAc,EAAE,IAAI,CAAC;KACnE,CAAC;AACN,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,CAAC,MAAoB,EAAgB,EAAE,CAAC,CAAC;IAC1D,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,EAAE;IAC/B,SAAS,EAAE,gBAAgB,CAAC,MAAM,CAAC;IACnC,gBAAgB,EAAE,uBAAuB,CAAC,MAAM,CAAC;IACjD,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,EAAE;IACjC,cAAc,EAAE,qBAAqB,CAAC,MAAM,CAAC;IAC7C,YAAY,EAAE,MAAM,CAAC,YAAY,IAAI,EAAE;IACvC,iBAAiB,EAAE,MAAM,CAAC,iBAAiB,IAAI,KAAK;CACvD,CAAC,CAAC;AAEH,MAAM,WAAW,GAAG,CAAC,OAAwB,EAAgB,EAAE;IAC3D,MAAM,QAAQ,GAAoB;QAC9B,aAAa,EAAE,OAAO,CAAC,MAAM,CAAC,aAAa;QAC3C,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE;QACnC,QAAQ,EAAE,mBAAmB,CAAC,OAAO,CAAC,IAAI,CAAC;KAC9C,CAAC;IAEF,MAAM,QAAQ,GAAG,eAAe,CAAC;QAC7B,OAAO,EAAE,oBAAoB,CAAC,QAAQ,CAAC;QACvC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,OAAO;QAChC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,KAAK;KAC/B,CAAC,CAAC;IAEH,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,gBAAgB,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,CAAC,OAAO,CAAC,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC,EAAE,CAAC;AACrH,CAAC,CAAC;AAEF,MAAM,qBAAqB,GAAG,CAAC,OAAwB,EAAkB,EAAE;IACvE,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IAClC,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;IAEpC,OAAO;QACH,GAAG,aAAa,CAAC,IAAI,CAAC;QACtB,GAAG,aAAa,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC;QACpC,GAAG,YAAY,CAAC,MAAM,CAAC;QACvB,UAAU,EAAE,iBAAiB,CAAC,MAAM,CAAC;QACrC,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,IAAI,EAAE,WAAW,EAAE;QACnB,KAAK,EAAE,YAAY,CAAC;YAChB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,MAAM;YACN,eAAe,EAAE,OAAO,CAAC,MAAM,CAAC,eAAe;YAC/C,aAAa,EAAE,OAAO,CAAC,MAAM,CAAC,aAAa;YAC3C,cAAc,EAAE,OAAO,CAAC,cAAc;SACzC,CAAC;QACF,GAAG,gBAAgB,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC;QACjD,MAAM;KACT,CAAC;AACN,CAAC,CAAC;AAEF,OAAO,EAAE,qBAAqB,EAAE,CAAC","sourcesContent":["import type { Config } from \"@gtkx/config\";\nimport type {\n DeployConfig,\n DeployDesktopAction,\n DeployDeveloper,\n DeployRelease,\n DeploySettings,\n DeployVersions,\n} from \"../types.js\";\nimport { resolveArch } from \"./arch.js\";\nimport { resolveExecToken, resolveFileAssociations, resolveMimeTypes } from \"./exec.js\";\nimport { resolveExtraFiles } from \"./extra-files.js\";\nimport {\n type IdentityRequest,\n resolveBinaryName,\n resolveCopyright,\n resolveDescription,\n resolveDeveloper,\n resolveLicense,\n resolveMetadataLicense,\n resolveName,\n resolveSummary,\n resolveVersionString,\n} from \"./identity.js\";\nimport { resolveLibraries } from \"./libraries.js\";\nimport { readPackageManifest } from \"./package-manifest.js\";\nimport { resolvePaths } from \"./paths.js\";\nimport { resolveScreenshots } from \"./screenshots.js\";\nimport { resolveVersions } from \"./version.js\";\n\ntype SettingsRequest = {\n root: string;\n config: Config;\n outDirOverride?: string | undefined;\n now?: Date | undefined;\n};\n\ntype ResolvedCore = {\n identity: IdentityRequest;\n developer: DeployDeveloper;\n versions: DeployVersions;\n date: string;\n};\n\ntype IdentitySlice = Pick<\n DeploySettings,\n | \"applicationId\" |\n \"binaryName\" |\n \"copyright\" |\n \"description\" |\n \"developer\" |\n \"genericName\" |\n \"homepage\" |\n \"license\" |\n \"metadataLicense\" |\n \"name\" |\n \"summary\"\n>;\n\ntype MetadataSlice = Pick<\n DeploySettings,\n \"branding\" | \"categories\" | \"contentRating\" | \"keywords\" | \"mimeTypes\" | \"releases\" | \"screenshots\" | \"urls\"\n>;\n\ntype DesktopSlice = Pick<\n DeploySettings,\n | \"desktopActions\" |\n \"desktopEntry\" |\n \"execArgs\" |\n \"execToken\" |\n \"fileAssociations\" |\n \"isDbusActivatable\" |\n \"protocols\"\n>;\n\nconst ISO_DATE_LENGTH = 10;\nconst MILLISECONDS_PER_SECOND = 1000;\n\nconst reproducibleDate = (epoch: string | undefined): Date | null => {\n if (epoch === undefined || epoch.trim().length === 0) {\n return null;\n }\n\n const seconds = Number(epoch);\n\n return Number.isFinite(seconds) ? new Date(seconds * MILLISECONDS_PER_SECOND) : null;\n};\n\nconst buildDate = (now: Date): string => {\n const stamp = reproducibleDate(process.env.SOURCE_DATE_EPOCH) ?? now;\n\n return stamp.toISOString().slice(0, ISO_DATE_LENGTH);\n};\n\nconst newestFirst = (a: DeployRelease, b: DeployRelease): number => Number(a.date < b.date) - Number(a.date > b.date);\n\nconst resolveReleases = (deploy: DeployConfig, version: string, date: string): DeployRelease[] =>\n (deploy.releases ?? [{ version, date }])\n .map((entry) => ({\n version: entry.version,\n date: entry.date,\n type: entry.type ?? null,\n urgency: entry.urgency ?? null,\n notes: entry.notes ?? [],\n url: entry.url ?? null,\n }))\n .toSorted(newestFirst);\n\nconst resolveDesktopActions = (deploy: DeployConfig): DeployDesktopAction[] =>\n Object.entries(deploy.desktopActions ?? {}).map(([id, action]) => ({\n id,\n name: action.name,\n args: action.args ?? [],\n icon: action.icon ?? null,\n }));\n\nconst identitySlice = ({ identity, developer, date }: ResolvedCore): IdentitySlice => ({\n applicationId: identity.applicationId,\n binaryName: resolveBinaryName(identity),\n name: resolveName(identity),\n genericName: identity.deploy.genericName ?? null,\n summary: resolveSummary(identity),\n description: resolveDescription(identity),\n developer,\n license: resolveLicense(identity),\n metadataLicense: resolveMetadataLicense(identity),\n copyright: resolveCopyright(identity, developer, new Date(date).getUTCFullYear()),\n homepage: identity.deploy.homepage ?? identity.manifest.homepage,\n});\n\nconst metadataSlice = (root: string, { identity, versions, date }: ResolvedCore): MetadataSlice => {\n const deploy = identity.deploy;\n\n return {\n keywords: deploy.keywords ?? [],\n categories: deploy.categories ?? [],\n mimeTypes: resolveMimeTypes(deploy),\n urls: deploy.urls ?? {},\n screenshots: resolveScreenshots({ root, deploy }),\n branding: deploy.branding ?? null,\n contentRating: deploy.contentRating ?? {},\n releases: resolveReleases(deploy, versions.packageVersion, date),\n };\n};\n\nconst desktopSlice = (deploy: DeployConfig): DesktopSlice => ({\n execArgs: deploy.execArgs ?? [],\n execToken: resolveExecToken(deploy),\n fileAssociations: resolveFileAssociations(deploy),\n protocols: deploy.protocols ?? [],\n desktopActions: resolveDesktopActions(deploy),\n desktopEntry: deploy.desktopEntry ?? {},\n isDbusActivatable: deploy.isDbusActivatable ?? false,\n});\n\nconst resolveCore = (request: SettingsRequest): ResolvedCore => {\n const identity: IdentityRequest = {\n applicationId: request.config.applicationId,\n deploy: request.config.deploy ?? {},\n manifest: readPackageManifest(request.root),\n };\n\n const versions = resolveVersions({\n version: resolveVersionString(identity),\n release: identity.deploy.release,\n epoch: identity.deploy.epoch,\n });\n\n return { identity, developer: resolveDeveloper(identity), versions, date: buildDate(request.now ?? new Date()) };\n};\n\nconst resolveDeploySettings = (request: SettingsRequest): DeploySettings => {\n const core = resolveCore(request);\n const deploy = core.identity.deploy;\n\n return {\n ...identitySlice(core),\n ...metadataSlice(request.root, core),\n ...desktopSlice(deploy),\n extraFiles: resolveExtraFiles(deploy),\n versions: core.versions,\n arch: resolveArch(),\n paths: resolvePaths({\n root: request.root,\n deploy,\n applicationIcon: request.config.applicationIcon,\n applicationId: request.config.applicationId,\n outDirOverride: request.outDirOverride,\n }),\n ...resolveLibraries(request.root, request.config),\n deploy,\n };\n};\n\nexport { resolveDeploySettings };\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/deploy/settings/index.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AACxF,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAEH,iBAAiB,EACjB,gBAAgB,EAChB,kBAAkB,EAClB,gBAAgB,EAChB,cAAc,EACd,sBAAsB,EACtB,WAAW,EACX,cAAc,EACd,oBAAoB,GACvB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAgD/C,MAAM,eAAe,GAAG,EAAE,CAAC;AAC3B,MAAM,uBAAuB,GAAG,IAAI,CAAC;AAErC,MAAM,gBAAgB,GAAG,CAAC,KAAyB,EAAe,EAAE;IAChE,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACnD,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAE9B,OAAO,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO,GAAG,uBAAuB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACzF,CAAC,CAAC;AAEF,MAAM,SAAS,GAAG,CAAC,GAAS,EAAU,EAAE;IACpC,MAAM,KAAK,GAAG,gBAAgB,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,GAAG,CAAC;IAErE,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC;AACzD,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,CAAC,CAAgB,EAAE,CAAgB,EAAU,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;AAEtH,MAAM,eAAe,GAAG,CAAC,MAAoB,EAAE,OAAe,EAAE,IAAY,EAAmB,EAAE,CAC7F,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;KACnC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACb,OAAO,EAAE,KAAK,CAAC,OAAO;IACtB,IAAI,EAAE,KAAK,CAAC,IAAI;IAChB,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,IAAI;IACxB,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,IAAI;IAC9B,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,EAAE;IACxB,GAAG,EAAE,KAAK,CAAC,GAAG,IAAI,IAAI;CACzB,CAAC,CAAC;KACF,QAAQ,CAAC,WAAW,CAAC,CAAC;AAE/B,MAAM,qBAAqB,GAAG,CAAC,MAAoB,EAAyB,EAAE,CAC1E,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;IAC/D,EAAE;IACF,IAAI,EAAE,MAAM,CAAC,IAAI;IACjB,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,EAAE;IACvB,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,IAAI;CAC5B,CAAC,CAAC,CAAC;AAER,MAAM,aAAa,GAAG,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAgB,EAAiB,EAAE,CAAC,CAAC;IACnF,aAAa,EAAE,QAAQ,CAAC,aAAa;IACrC,UAAU,EAAE,iBAAiB,CAAC,QAAQ,CAAC;IACvC,IAAI,EAAE,WAAW,CAAC,QAAQ,CAAC;IAC3B,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,WAAW,IAAI,IAAI;IAChD,OAAO,EAAE,cAAc,CAAC,QAAQ,CAAC;IACjC,WAAW,EAAE,kBAAkB,CAAC,QAAQ,CAAC;IACzC,SAAS;IACT,OAAO,EAAE,cAAc,CAAC,QAAQ,CAAC;IACjC,eAAe,EAAE,sBAAsB,CAAC,QAAQ,CAAC;IACjD,SAAS,EAAE,gBAAgB,CAAC,QAAQ,EAAE,SAAS,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,cAAc,EAAE,CAAC;IACjF,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,QAAQ,IAAI,QAAQ,CAAC,QAAQ,CAAC,QAAQ;CACnE,CAAC,CAAC;AAEH,MAAM,aAAa,GAAG,CAAC,IAAY,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAgB,EAAiB,EAAE;IAC9F,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;IAE/B,OAAO;QACH,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,EAAE;QAC/B,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,EAAE;QACnC,SAAS,EAAE,gBAAgB,CAAC,MAAM,CAAC;QACnC,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,EAAE;QACvB,WAAW,EAAE,kBAAkB,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;QACjD,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,IAAI;QACjC,aAAa,EAAE,MAAM,CAAC,aAAa,IAAI,EAAE;QACzC,QAAQ,EAAE,eAAe,CAAC,MAAM,EAAE,QAAQ,CAAC,cAAc,EAAE,IAAI,CAAC;KACnE,CAAC;AACN,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,CAAC,MAAoB,EAAgB,EAAE,CAAC,CAAC;IAC1D,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,EAAE;IAC/B,SAAS,EAAE,gBAAgB,CAAC,MAAM,CAAC;IACnC,gBAAgB,EAAE,uBAAuB,CAAC,MAAM,CAAC;IACjD,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,EAAE;IACjC,cAAc,EAAE,qBAAqB,CAAC,MAAM,CAAC;IAC7C,YAAY,EAAE,MAAM,CAAC,YAAY,IAAI,EAAE;IACvC,iBAAiB,EAAE,MAAM,CAAC,iBAAiB,IAAI,KAAK;CACvD,CAAC,CAAC;AAEH,MAAM,WAAW,GAAG,CAAC,OAAwB,EAAgB,EAAE;IAC3D,MAAM,QAAQ,GAAoB;QAC9B,aAAa,EAAE,OAAO,CAAC,MAAM,CAAC,aAAa;QAC3C,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE;QACnC,QAAQ,EAAE,mBAAmB,CAAC,OAAO,CAAC,IAAI,CAAC;KAC9C,CAAC;IAEF,MAAM,QAAQ,GAAG,eAAe,CAAC;QAC7B,OAAO,EAAE,oBAAoB,CAAC,QAAQ,CAAC;QACvC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,OAAO;QAChC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,KAAK;KAC/B,CAAC,CAAC;IAEH,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,gBAAgB,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,CAAC,OAAO,CAAC,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC,EAAE,CAAC;AACrH,CAAC,CAAC;AAEF,MAAM,qBAAqB,GAAG,CAAC,OAAwB,EAAkB,EAAE;IACvE,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IAClC,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;IAEpC,OAAO;QACH,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,GAAG,aAAa,CAAC,IAAI,CAAC;QACtB,GAAG,aAAa,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC;QACpC,GAAG,YAAY,CAAC,MAAM,CAAC;QACvB,UAAU,EAAE,iBAAiB,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;QACnD,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,IAAI,EAAE,WAAW,EAAE;QACnB,KAAK,EAAE,YAAY,CAAC;YAChB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,MAAM;YACN,eAAe,EAAE,OAAO,CAAC,MAAM,CAAC,eAAe;YAC/C,aAAa,EAAE,OAAO,CAAC,MAAM,CAAC,aAAa;YAC3C,cAAc,EAAE,OAAO,CAAC,cAAc;SACzC,CAAC;QACF,GAAG,gBAAgB,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC;QACjD,MAAM;KACT,CAAC;AACN,CAAC,CAAC;AAEF,OAAO,EAAE,qBAAqB,EAAE,CAAC","sourcesContent":["import type { Config } from \"@gtkx/config\";\nimport type {\n DeployConfig,\n DeployDesktopAction,\n DeployDeveloper,\n DeployRelease,\n DeploySettings,\n DeployVersions,\n} from \"../types.js\";\nimport { resolveArch } from \"./arch.js\";\nimport { resolveExecToken, resolveFileAssociations, resolveMimeTypes } from \"./exec.js\";\nimport { resolveExtraFiles } from \"./extra-files.js\";\nimport {\n type IdentityRequest,\n resolveBinaryName,\n resolveCopyright,\n resolveDescription,\n resolveDeveloper,\n resolveLicense,\n resolveMetadataLicense,\n resolveName,\n resolveSummary,\n resolveVersionString,\n} from \"./identity.js\";\nimport { resolveLibraries } from \"./libraries.js\";\nimport { readPackageManifest } from \"./package-manifest.js\";\nimport { resolvePaths } from \"./paths.js\";\nimport { resolveScreenshots } from \"./screenshots.js\";\nimport { resolveVersions } from \"./version.js\";\n\ntype SettingsRequest = {\n root: string;\n config: Config;\n configFile: string;\n outDirOverride?: string | undefined;\n now?: Date | undefined;\n};\n\ntype ResolvedCore = {\n identity: IdentityRequest;\n developer: DeployDeveloper;\n versions: DeployVersions;\n date: string;\n};\n\ntype IdentitySlice = Pick<\n DeploySettings,\n | \"applicationId\" |\n \"binaryName\" |\n \"copyright\" |\n \"description\" |\n \"developer\" |\n \"genericName\" |\n \"homepage\" |\n \"license\" |\n \"metadataLicense\" |\n \"name\" |\n \"summary\"\n>;\n\ntype MetadataSlice = Pick<\n DeploySettings,\n \"branding\" | \"categories\" | \"contentRating\" | \"keywords\" | \"mimeTypes\" | \"releases\" | \"screenshots\" | \"urls\"\n>;\n\ntype DesktopSlice = Pick<\n DeploySettings,\n | \"desktopActions\" |\n \"desktopEntry\" |\n \"execArgs\" |\n \"execToken\" |\n \"fileAssociations\" |\n \"isDbusActivatable\" |\n \"protocols\"\n>;\n\nconst ISO_DATE_LENGTH = 10;\nconst MILLISECONDS_PER_SECOND = 1000;\n\nconst reproducibleDate = (epoch: string | undefined): Date | null => {\n if (epoch === undefined || epoch.trim().length === 0) {\n return null;\n }\n\n const seconds = Number(epoch);\n\n return Number.isFinite(seconds) ? new Date(seconds * MILLISECONDS_PER_SECOND) : null;\n};\n\nconst buildDate = (now: Date): string => {\n const stamp = reproducibleDate(process.env.SOURCE_DATE_EPOCH) ?? now;\n\n return stamp.toISOString().slice(0, ISO_DATE_LENGTH);\n};\n\nconst newestFirst = (a: DeployRelease, b: DeployRelease): number => Number(a.date < b.date) - Number(a.date > b.date);\n\nconst resolveReleases = (deploy: DeployConfig, version: string, date: string): DeployRelease[] =>\n (deploy.releases ?? [{ version, date }])\n .map((entry) => ({\n version: entry.version,\n date: entry.date,\n type: entry.type ?? null,\n urgency: entry.urgency ?? null,\n notes: entry.notes ?? [],\n url: entry.url ?? null,\n }))\n .toSorted(newestFirst);\n\nconst resolveDesktopActions = (deploy: DeployConfig): DeployDesktopAction[] =>\n Object.entries(deploy.desktopActions ?? {}).map(([id, action]) => ({\n id,\n name: action.name,\n args: action.args ?? [],\n icon: action.icon ?? null,\n }));\n\nconst identitySlice = ({ identity, developer, date }: ResolvedCore): IdentitySlice => ({\n applicationId: identity.applicationId,\n binaryName: resolveBinaryName(identity),\n name: resolveName(identity),\n genericName: identity.deploy.genericName ?? null,\n summary: resolveSummary(identity),\n description: resolveDescription(identity),\n developer,\n license: resolveLicense(identity),\n metadataLicense: resolveMetadataLicense(identity),\n copyright: resolveCopyright(identity, developer, new Date(date).getUTCFullYear()),\n homepage: identity.deploy.homepage ?? identity.manifest.homepage,\n});\n\nconst metadataSlice = (root: string, { identity, versions, date }: ResolvedCore): MetadataSlice => {\n const deploy = identity.deploy;\n\n return {\n keywords: deploy.keywords ?? [],\n categories: deploy.categories ?? [],\n mimeTypes: resolveMimeTypes(deploy),\n urls: deploy.urls ?? {},\n screenshots: resolveScreenshots({ root, deploy }),\n branding: deploy.branding ?? null,\n contentRating: deploy.contentRating ?? {},\n releases: resolveReleases(deploy, versions.packageVersion, date),\n };\n};\n\nconst desktopSlice = (deploy: DeployConfig): DesktopSlice => ({\n execArgs: deploy.execArgs ?? [],\n execToken: resolveExecToken(deploy),\n fileAssociations: resolveFileAssociations(deploy),\n protocols: deploy.protocols ?? [],\n desktopActions: resolveDesktopActions(deploy),\n desktopEntry: deploy.desktopEntry ?? {},\n isDbusActivatable: deploy.isDbusActivatable ?? false,\n});\n\nconst resolveCore = (request: SettingsRequest): ResolvedCore => {\n const identity: IdentityRequest = {\n applicationId: request.config.applicationId,\n deploy: request.config.deploy ?? {},\n manifest: readPackageManifest(request.root),\n };\n\n const versions = resolveVersions({\n version: resolveVersionString(identity),\n release: identity.deploy.release,\n epoch: identity.deploy.epoch,\n });\n\n return { identity, developer: resolveDeveloper(identity), versions, date: buildDate(request.now ?? new Date()) };\n};\n\nconst resolveDeploySettings = (request: SettingsRequest): DeploySettings => {\n const core = resolveCore(request);\n const deploy = core.identity.deploy;\n\n return {\n configFile: request.configFile,\n ...identitySlice(core),\n ...metadataSlice(request.root, core),\n ...desktopSlice(deploy),\n extraFiles: resolveExtraFiles(request.root, deploy),\n versions: core.versions,\n arch: resolveArch(),\n paths: resolvePaths({\n root: request.root,\n deploy,\n applicationIcon: request.config.applicationIcon,\n applicationId: request.config.applicationId,\n outDirOverride: request.outDirOverride,\n }),\n ...resolveLibraries(request.root, request.config),\n deploy,\n };\n};\n\nexport { resolveDeploySettings };\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"libraries.d.ts","sourceRoot":"","sources":["../../../src/deploy/settings/libraries.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAU3C,KAAK,iBAAiB,GAAG;IACrB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,sBAAsB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClD,CAAC;AA6BF,QAAA,MAAM,gBAAgB,GAAI,MAAM,MAAM,EAAE,QAAQ,MAAM,KAAG,iBASxD,CAAC;AAEF,OAAO,EAAE,gBAAgB,EAAE,CAAC"}
1
+ {"version":3,"file":"libraries.d.ts","sourceRoot":"","sources":["../../../src/deploy/settings/libraries.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAQ3C,KAAK,iBAAiB,GAAG;IACrB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,sBAAsB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClD,CAAC;AAUF,QAAA,MAAM,gBAAgB,GAAI,MAAM,MAAM,EAAE,QAAQ,MAAM,KAAG,iBASxD,CAAC;AAEF,OAAO,EAAE,gBAAgB,EAAE,CAAC"}
@@ -1,5 +1,4 @@
1
- import { resolveLibraries as expandLibraries, readGeneratedLibraries, resolveGirPath, resolveStore, } from "@gtkx/codegen";
2
- import { resolveFuture } from "@gtkx/config/internal";
1
+ import { resolveLibraries as expandLibraries, readGeneratedLibraries, resolveStore, } from "@gtkx/codegen";
3
2
  const generatedLibraries = (root) => {
4
3
  try {
5
4
  return readGeneratedLibraries(resolveStore(root).gi.storeDir);
@@ -8,25 +7,9 @@ const generatedLibraries = (root) => {
8
7
  return null;
9
8
  }
10
9
  };
11
- const discoveredLibraries = (config, isAdwaitaDefault) => {
12
- try {
13
- return expandLibraries(config.libraries, resolveGirPath(config.girPath), isAdwaitaDefault);
14
- }
15
- catch {
16
- return null;
17
- }
18
- };
19
- const configLibraries = (config) => {
20
- const { isAdwaitaDefault } = resolveFuture(config.future);
21
- const libraries = config.libraries;
22
- if (Array.isArray(libraries)) {
23
- return expandLibraries(libraries, [], isAdwaitaDefault);
24
- }
25
- return discoveredLibraries(config, isAdwaitaDefault) ?? expandLibraries(undefined, [], isAdwaitaDefault);
26
- };
27
10
  const resolveLibraries = (root, config) => {
28
11
  const generated = generatedLibraries(root);
29
- const libraries = generated?.libraries ?? configLibraries(config);
12
+ const libraries = generated?.libraries ?? expandLibraries(config.libraries);
30
13
  const deploy = config.deploy ?? {};
31
14
  return {
32
15
  libraries,
@@ -1 +1 @@
1
- {"version":3,"file":"libraries.js","sourceRoot":"","sources":["../../../src/deploy/settings/libraries.ts"],"names":[],"mappings":"AACA,OAAO,EACH,gBAAgB,IAAI,eAAe,EAEnC,sBAAsB,EACtB,cAAc,EACd,YAAY,GACf,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAOtD,MAAM,kBAAkB,GAAG,CAAC,IAAY,EAA6B,EAAE;IACnE,IAAI,CAAC;QACD,OAAO,sBAAsB,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;IAClE,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,IAAI,CAAC;IAChB,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,CAAC,MAAc,EAAE,gBAAyB,EAAmB,EAAE;IACvF,IAAI,CAAC;QACD,OAAO,eAAe,CAAC,MAAM,CAAC,SAAS,EAAE,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,gBAAgB,CAAC,CAAC;IAC/F,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,IAAI,CAAC;IAChB,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,CAAC,MAAc,EAAY,EAAE;IACjD,MAAM,EAAE,gBAAgB,EAAE,GAAG,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC1D,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;IAEnC,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;QAC3B,OAAO,eAAe,CAAC,SAAS,EAAE,EAAE,EAAE,gBAAgB,CAAC,CAAC;IAC5D,CAAC;IAED,OAAO,mBAAmB,CAAC,MAAM,EAAE,gBAAgB,CAAC,IAAI,eAAe,CAAC,SAAS,EAAE,EAAE,EAAE,gBAAgB,CAAC,CAAC;AAC7G,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,CAAC,IAAY,EAAE,MAAc,EAAqB,EAAE;IACzE,MAAM,SAAS,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAC3C,MAAM,SAAS,GAAG,SAAS,EAAE,SAAS,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC;IAClE,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC;IAEnC,OAAO;QACH,SAAS;QACT,sBAAsB,EAAE,MAAM,CAAC,sBAAsB,IAAI,EAAE;KAC9D,CAAC;AACN,CAAC,CAAC;AAEF,OAAO,EAAE,gBAAgB,EAAE,CAAC","sourcesContent":["import type { Config } from \"@gtkx/config\";\nimport {\n resolveLibraries as expandLibraries,\n type GeneratedLibraries,\n readGeneratedLibraries,\n resolveGirPath,\n resolveStore,\n} from \"@gtkx/codegen\";\nimport { resolveFuture } from \"@gtkx/config/internal\";\n\ntype ResolvedLibraries = {\n libraries: string[];\n minimumLibraryVersions: Record<string, string>;\n};\n\nconst generatedLibraries = (root: string): GeneratedLibraries | null => {\n try {\n return readGeneratedLibraries(resolveStore(root).gi.storeDir);\n } catch {\n return null;\n }\n};\n\nconst discoveredLibraries = (config: Config, isAdwaitaDefault: boolean): string[] | null => {\n try {\n return expandLibraries(config.libraries, resolveGirPath(config.girPath), isAdwaitaDefault);\n } catch {\n return null;\n }\n};\n\nconst configLibraries = (config: Config): string[] => {\n const { isAdwaitaDefault } = resolveFuture(config.future);\n const libraries = config.libraries;\n\n if (Array.isArray(libraries)) {\n return expandLibraries(libraries, [], isAdwaitaDefault);\n }\n\n return discoveredLibraries(config, isAdwaitaDefault) ?? expandLibraries(undefined, [], isAdwaitaDefault);\n};\n\nconst resolveLibraries = (root: string, config: Config): ResolvedLibraries => {\n const generated = generatedLibraries(root);\n const libraries = generated?.libraries ?? configLibraries(config);\n const deploy = config.deploy ?? {};\n\n return {\n libraries,\n minimumLibraryVersions: deploy.minimumLibraryVersions ?? {},\n };\n};\n\nexport { resolveLibraries };\n"]}
1
+ {"version":3,"file":"libraries.js","sourceRoot":"","sources":["../../../src/deploy/settings/libraries.ts"],"names":[],"mappings":"AACA,OAAO,EACH,gBAAgB,IAAI,eAAe,EAEnC,sBAAsB,EACtB,YAAY,GACf,MAAM,eAAe,CAAC;AAOvB,MAAM,kBAAkB,GAAG,CAAC,IAAY,EAA6B,EAAE;IACnE,IAAI,CAAC;QACD,OAAO,sBAAsB,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;IAClE,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,IAAI,CAAC;IAChB,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,CAAC,IAAY,EAAE,MAAc,EAAqB,EAAE;IACzE,MAAM,SAAS,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAC3C,MAAM,SAAS,GAAG,SAAS,EAAE,SAAS,IAAI,eAAe,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAC5E,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC;IAEnC,OAAO;QACH,SAAS;QACT,sBAAsB,EAAE,MAAM,CAAC,sBAAsB,IAAI,EAAE;KAC9D,CAAC;AACN,CAAC,CAAC;AAEF,OAAO,EAAE,gBAAgB,EAAE,CAAC","sourcesContent":["import type { Config } from \"@gtkx/config\";\nimport {\n resolveLibraries as expandLibraries,\n type GeneratedLibraries,\n readGeneratedLibraries,\n resolveStore,\n} from \"@gtkx/codegen\";\n\ntype ResolvedLibraries = {\n libraries: string[];\n minimumLibraryVersions: Record<string, string>;\n};\n\nconst generatedLibraries = (root: string): GeneratedLibraries | null => {\n try {\n return readGeneratedLibraries(resolveStore(root).gi.storeDir);\n } catch {\n return null;\n }\n};\n\nconst resolveLibraries = (root: string, config: Config): ResolvedLibraries => {\n const generated = generatedLibraries(root);\n const libraries = generated?.libraries ?? expandLibraries(config.libraries);\n const deploy = config.deploy ?? {};\n\n return {\n libraries,\n minimumLibraryVersions: deploy.minimumLibraryVersions ?? {},\n };\n};\n\nexport { resolveLibraries };\n"]}
@@ -7,7 +7,7 @@ type PathsRequest = {
7
7
  applicationId: Config["applicationId"];
8
8
  outDirOverride: string | undefined;
9
9
  };
10
- declare const isInside: (parent: string, candidate: string) => boolean;
10
+ declare const prepareDeployOutDir: (root: string, outDir: string) => void;
11
11
  declare const resolvePaths: (request: PathsRequest) => DeployPaths;
12
- export { isInside, resolvePaths };
12
+ export { prepareDeployOutDir, resolvePaths };
13
13
  //# sourceMappingURL=paths.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../../src/deploy/settings/paths.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAG3C,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAG7D,KAAK,YAAY,GAAG;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,YAAY,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC,iBAAiB,CAAC,CAAC;IAC3C,aAAa,EAAE,MAAM,CAAC,eAAe,CAAC,CAAC;IACvC,cAAc,EAAE,MAAM,GAAG,SAAS,CAAC;CACtC,CAAC;AAMF,QAAA,MAAM,QAAQ,GAAI,QAAQ,MAAM,EAAE,WAAW,MAAM,KAAG,OAIrD,CAAC;AAmCF,QAAA,MAAM,YAAY,GAAI,SAAS,YAAY,KAAG,WAkB7C,CAAC;AAEF,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC"}
1
+ {"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../../src/deploy/settings/paths.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAI3C,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAI7D,KAAK,YAAY,GAAG;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,YAAY,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC,iBAAiB,CAAC,CAAC;IAC3C,aAAa,EAAE,MAAM,CAAC,eAAe,CAAC,CAAC;IACvC,cAAc,EAAE,MAAM,GAAG,SAAS,CAAC;CACtC,CAAC;AAoEF,QAAA,MAAM,mBAAmB,GAAI,MAAM,MAAM,EAAE,QAAQ,MAAM,KAAG,IAW3D,CAAC;AAmBF,QAAA,MAAM,YAAY,GAAI,SAAS,YAAY,KAAG,WAkB7C,CAAC;AAEF,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,CAAC"}
@@ -1,29 +1,127 @@
1
- import { statSync } from "node:fs";
2
- import { isAbsolute, join, relative, resolve } from "node:path";
1
+ var __addDisposableResource = (this && this.__addDisposableResource) || function (env, value, async) {
2
+ if (value !== null && value !== void 0) {
3
+ if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected.");
4
+ var dispose, inner;
5
+ if (async) {
6
+ if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined.");
7
+ dispose = value[Symbol.asyncDispose];
8
+ }
9
+ if (dispose === void 0) {
10
+ if (!Symbol.dispose) throw new TypeError("Symbol.dispose is not defined.");
11
+ dispose = value[Symbol.dispose];
12
+ if (async) inner = dispose;
13
+ }
14
+ if (typeof dispose !== "function") throw new TypeError("Object not disposable.");
15
+ if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };
16
+ env.stack.push({ value: value, dispose: dispose, async: async });
17
+ }
18
+ else if (async) {
19
+ env.stack.push({ async: true });
20
+ }
21
+ return value;
22
+ };
23
+ var __disposeResources = (this && this.__disposeResources) || (function (SuppressedError) {
24
+ return function (env) {
25
+ function fail(e) {
26
+ env.error = env.hasError ? new SuppressedError(e, env.error, "An error was suppressed during disposal.") : e;
27
+ env.hasError = true;
28
+ }
29
+ var r, s = 0;
30
+ function next() {
31
+ while (r = env.stack.pop()) {
32
+ try {
33
+ if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);
34
+ if (r.dispose) {
35
+ var result = r.dispose.call(r.value);
36
+ if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });
37
+ }
38
+ else s |= 1;
39
+ }
40
+ catch (e) {
41
+ fail(e);
42
+ }
43
+ }
44
+ if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();
45
+ if (env.hasError) throw env.error;
46
+ }
47
+ return next();
48
+ };
49
+ })(typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
50
+ var e = new Error(message);
51
+ return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
52
+ });
53
+ import { isPathInside } from "@gtkx/utils";
54
+ import { lstatSync, readdirSync, statSync, writeFileSync } from "node:fs";
55
+ import { join, relative, resolve, sep } from "node:path";
3
56
  import { resolveApplicationIcon } from "../../internal/icon-path.js";
57
+ import { prepareOutputDirectory, readRegularFile } from "../../internal/output-directory.js";
4
58
  const DEFAULT_OUT_DIR = "build";
5
59
  const DIST_DIR = "dist";
60
+ const DEPLOY_MARKER_FILENAME = ".gtkx-deploy.json";
61
+ const DEPLOY_MARKER = `${JSON.stringify({ generator: "gtkx-deploy", formatVersion: 1 })}\n`;
6
62
  const LICENSE_CANDIDATES = ["LICENSE", "LICENSE.md", "LICENSE.txt", "COPYING", "COPYING.md"];
7
- const isInside = (parent, candidate) => {
8
- const rel = relative(parent, candidate);
9
- return rel.length > 0 && !rel.startsWith("..") && !isAbsolute(rel);
63
+ const hasSymlinkComponent = (root, target) => {
64
+ let current = root;
65
+ for (const segment of relative(root, target).split(sep)) {
66
+ current = join(current, segment);
67
+ if (lstatSync(current, { throwIfNoEntry: false })?.isSymbolicLink() === true) {
68
+ return true;
69
+ }
70
+ }
71
+ return false;
72
+ };
73
+ const isDeployMarker = (path) => {
74
+ return readRegularFile(path) === DEPLOY_MARKER;
75
+ };
76
+ const isReusableDeployDirectory = (path) => {
77
+ const entry = lstatSync(path, { throwIfNoEntry: false });
78
+ if (entry === undefined) {
79
+ return true;
80
+ }
81
+ return entry.isDirectory() &&
82
+ (readdirSync(path).length === 0 || isDeployMarker(join(path, DEPLOY_MARKER_FILENAME)));
83
+ };
84
+ const deployOutputError = (root, configured) => new Error(`Cannot use "${configured}" as the deploy output directory: choose an empty directory or an ` +
85
+ `earlier GTKX deploy directory below ${root}`);
86
+ const assertSafeDeployOutDir = (root, outDir, configured) => {
87
+ const dist = join(root, DIST_DIR);
88
+ if (outDir === dist ||
89
+ !isPathInside(root, outDir) ||
90
+ isPathInside(dist, outDir) ||
91
+ hasSymlinkComponent(root, outDir)) {
92
+ throw deployOutputError(root, configured);
93
+ }
10
94
  };
11
95
  const resolveOutDir = ({ root, deploy, outDirOverride }) => {
12
96
  const configured = outDirOverride ?? deploy.outDir ?? DEFAULT_OUT_DIR;
13
97
  const outDir = resolve(root, configured);
14
- if (!isInside(root, outDir)) {
15
- throw new Error(`Cannot use "${configured}" as the deploy output directory: it is outside ${root}`);
98
+ assertSafeDeployOutDir(root, outDir, configured);
99
+ if (!isReusableDeployDirectory(outDir)) {
100
+ throw deployOutputError(root, configured);
16
101
  }
17
102
  return outDir;
18
103
  };
19
- const existingFile = (path) => {
104
+ const prepareDeployOutDir = (root, outDir) => {
105
+ const env_1 = { stack: [], error: void 0, hasError: false };
20
106
  try {
21
- return statSync(path, { throwIfNoEntry: false })?.isFile() === true ? path : null;
107
+ assertSafeDeployOutDir(root, outDir, outDir);
108
+ const prepared = prepareOutputDirectory(root, outDir, isReusableDeployDirectory);
109
+ if (prepared.status === "unsafe") {
110
+ throw deployOutputError(root, outDir);
111
+ }
112
+ const transaction = __addDisposableResource(env_1, prepared.transaction, false);
113
+ transaction.commit();
114
+ writeFileSync(join(outDir, DEPLOY_MARKER_FILENAME), DEPLOY_MARKER, { flag: "wx" });
115
+ }
116
+ catch (e_1) {
117
+ env_1.error = e_1;
118
+ env_1.hasError = true;
22
119
  }
23
- catch {
24
- return null;
120
+ finally {
121
+ __disposeResources(env_1);
25
122
  }
26
123
  };
124
+ const existingFile = (path) => statSync(path, { throwIfNoEntry: false })?.isFile() === true ? path : null;
27
125
  const resolveLicenseFile = (root, configured) => {
28
126
  if (configured !== undefined) {
29
127
  const path = resolve(root, configured);
@@ -52,5 +150,5 @@ const resolvePaths = (request) => {
52
150
  schemaFiles: [],
53
151
  };
54
152
  };
55
- export { isInside, resolvePaths };
153
+ export { prepareDeployOutDir, resolvePaths };
56
154
  //# sourceMappingURL=paths.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"paths.js","sourceRoot":"","sources":["../../../src/deploy/settings/paths.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Config } from \"@gtkx/config\";\nimport { statSync } from \"node:fs\";\nimport { isAbsolute, join, relative, resolve } from \"node:path\";\nimport type { DeployConfig, DeployPaths } from \"../types.js\";\nimport { resolveApplicationIcon } from \"../../internal/icon-path.js\";\n\ntype PathsRequest = {\n root: string;\n deploy: DeployConfig;\n applicationIcon: Config[\"applicationIcon\"];\n applicationId: Config[\"applicationId\"];\n outDirOverride: string | undefined;\n};\n\nconst DEFAULT_OUT_DIR = \"build\";\nconst DIST_DIR = \"dist\";\nconst LICENSE_CANDIDATES = [\"LICENSE\", \"LICENSE.md\", \"LICENSE.txt\", \"COPYING\", \"COPYING.md\"];\n\nconst isInside = (parent: string, candidate: string): boolean => {\n const rel = relative(parent, candidate);\n\n return rel.length > 0 && !rel.startsWith(\"..\") && !isAbsolute(rel);\n};\n\nconst resolveOutDir = ({ root, deploy, outDirOverride }: PathsRequest): string => {\n const configured = outDirOverride ?? deploy.outDir ?? DEFAULT_OUT_DIR;\n const outDir = resolve(root, configured);\n\n if (!isInside(root, outDir)) {\n throw new Error(`Cannot use \"${configured}\" as the deploy output directory: it is outside ${root}`);\n }\n\n return outDir;\n};\n\nconst existingFile = (path: string): string | null => {\n try {\n return statSync(path, { throwIfNoEntry: false })?.isFile() === true ? path : null;\n } catch {\n return null;\n }\n};\n\nconst resolveLicenseFile = (root: string, configured: string | undefined): string | null => {\n if (configured !== undefined) {\n const path = resolve(root, configured);\n\n if (existingFile(path) === null) {\n throw new Error(`Cannot read the license file \"${configured}\": no such file under ${root}`);\n }\n\n return path;\n }\n\n return LICENSE_CANDIDATES.map((name) => existingFile(join(root, name))).find((path) => path !== null) ?? null;\n};\n\nconst resolvePaths = (request: PathsRequest): DeployPaths => {\n const { root, deploy } = request;\n const outDir = resolveOutDir(request);\n\n return {\n root,\n dist: join(root, DIST_DIR),\n outDir,\n metadata: join(outDir, \"metadata\"),\n runtime: join(outDir, \"runtime\"),\n stage: join(outDir, \"stage\"),\n overlay: join(outDir, \"overlay\"),\n targets: join(outDir, \"targets\"),\n output: join(outDir, \"out\"),\n applicationIcon: resolveApplicationIcon(root, request.applicationId, request.applicationIcon),\n licenseFile: resolveLicenseFile(root, deploy.licenseFile),\n schemaFiles: [],\n };\n};\n\nexport { isInside, resolvePaths };\n"]}
1
+ {"version":3,"file":"paths.js","sourceRoot":"","sources":["../../../src/deploy/settings/paths.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Config } from \"@gtkx/config\";\nimport { isPathInside } from \"@gtkx/utils\";\nimport { lstatSync, readdirSync, statSync, writeFileSync } from \"node:fs\";\nimport { join, relative, resolve, sep } from \"node:path\";\nimport type { DeployConfig, DeployPaths } from \"../types.js\";\nimport { resolveApplicationIcon } from \"../../internal/icon-path.js\";\nimport { prepareOutputDirectory, readRegularFile } from \"../../internal/output-directory.js\";\n\ntype PathsRequest = {\n root: string;\n deploy: DeployConfig;\n applicationIcon: Config[\"applicationIcon\"];\n applicationId: Config[\"applicationId\"];\n outDirOverride: string | undefined;\n};\n\nconst DEFAULT_OUT_DIR = \"build\";\nconst DIST_DIR = \"dist\";\nconst DEPLOY_MARKER_FILENAME = \".gtkx-deploy.json\";\nconst DEPLOY_MARKER = `${JSON.stringify({ generator: \"gtkx-deploy\", formatVersion: 1 })}\\n`;\nconst LICENSE_CANDIDATES = [\"LICENSE\", \"LICENSE.md\", \"LICENSE.txt\", \"COPYING\", \"COPYING.md\"];\n\nconst hasSymlinkComponent = (root: string, target: string): boolean => {\n let current = root;\n\n for (const segment of relative(root, target).split(sep)) {\n current = join(current, segment);\n\n if (lstatSync(current, { throwIfNoEntry: false })?.isSymbolicLink() === true) {\n return true;\n }\n }\n\n return false;\n};\n\nconst isDeployMarker = (path: string): boolean => {\n return readRegularFile(path) === DEPLOY_MARKER;\n};\n\nconst isReusableDeployDirectory = (path: string): boolean => {\n const entry = lstatSync(path, { throwIfNoEntry: false });\n\n if (entry === undefined) {\n return true;\n }\n\n return entry.isDirectory() &&\n (readdirSync(path).length === 0 || isDeployMarker(join(path, DEPLOY_MARKER_FILENAME)));\n};\n\nconst deployOutputError = (root: string, configured: string): Error =>\n new Error(\n `Cannot use \"${configured}\" as the deploy output directory: choose an empty directory or an ` +\n `earlier GTKX deploy directory below ${root}`,\n );\n\nconst assertSafeDeployOutDir = (root: string, outDir: string, configured: string): void => {\n const dist = join(root, DIST_DIR);\n\n if (\n outDir === dist ||\n !isPathInside(root, outDir) ||\n isPathInside(dist, outDir) ||\n hasSymlinkComponent(root, outDir)\n ) {\n throw deployOutputError(root, configured);\n }\n};\n\nconst resolveOutDir = ({ root, deploy, outDirOverride }: PathsRequest): string => {\n const configured = outDirOverride ?? deploy.outDir ?? DEFAULT_OUT_DIR;\n const outDir = resolve(root, configured);\n assertSafeDeployOutDir(root, outDir, configured);\n\n if (!isReusableDeployDirectory(outDir)) {\n throw deployOutputError(root, configured);\n }\n\n return outDir;\n};\n\nconst prepareDeployOutDir = (root: string, outDir: string): void => {\n assertSafeDeployOutDir(root, outDir, outDir);\n const prepared = prepareOutputDirectory(root, outDir, isReusableDeployDirectory);\n\n if (prepared.status === \"unsafe\") {\n throw deployOutputError(root, outDir);\n }\n\n using transaction = prepared.transaction;\n transaction.commit();\n writeFileSync(join(outDir, DEPLOY_MARKER_FILENAME), DEPLOY_MARKER, { flag: \"wx\" });\n};\n\nconst existingFile = (path: string): string | null =>\n statSync(path, { throwIfNoEntry: false })?.isFile() === true ? path : null;\n\nconst resolveLicenseFile = (root: string, configured: string | undefined): string | null => {\n if (configured !== undefined) {\n const path = resolve(root, configured);\n\n if (existingFile(path) === null) {\n throw new Error(`Cannot read the license file \"${configured}\": no such file under ${root}`);\n }\n\n return path;\n }\n\n return LICENSE_CANDIDATES.map((name) => existingFile(join(root, name))).find((path) => path !== null) ?? null;\n};\n\nconst resolvePaths = (request: PathsRequest): DeployPaths => {\n const { root, deploy } = request;\n const outDir = resolveOutDir(request);\n\n return {\n root,\n dist: join(root, DIST_DIR),\n outDir,\n metadata: join(outDir, \"metadata\"),\n runtime: join(outDir, \"runtime\"),\n stage: join(outDir, \"stage\"),\n overlay: join(outDir, \"overlay\"),\n targets: join(outDir, \"targets\"),\n output: join(outDir, \"out\"),\n applicationIcon: resolveApplicationIcon(root, request.applicationId, request.applicationIcon),\n licenseFile: resolveLicenseFile(root, deploy.licenseFile),\n schemaFiles: [],\n };\n};\n\nexport { prepareDeployOutDir, resolvePaths };\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"screenshots.d.ts","sourceRoot":"","sources":["../../../src/deploy/settings/screenshots.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAGlE,KAAK,iBAAiB,GAAG;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,YAAY,CAAC;CACxB,CAAC;AAqGF,QAAA,MAAM,kBAAkB,GAAI,SAAS,iBAAiB,KAAG,gBAAgB,EAexE,CAAC;AAEF,OAAO,EAAE,kBAAkB,EAAE,CAAC"}
1
+ {"version":3,"file":"screenshots.d.ts","sourceRoot":"","sources":["../../../src/deploy/settings/screenshots.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAGlE,KAAK,iBAAiB,GAAG;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,YAAY,CAAC;CACxB,CAAC;AA8DF,QAAA,MAAM,kBAAkB,GAAI,SAAS,iBAAiB,KAAG,gBAAgB,EAexE,CAAC;AAEF,OAAO,EAAE,kBAAkB,EAAE,CAAC"}