@gtkx/cli 1.1.0 → 1.2.1

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 (153) hide show
  1. package/dist/builder.d.ts.map +1 -1
  2. package/dist/builder.js +2 -0
  3. package/dist/builder.js.map +1 -1
  4. package/dist/codegen/report.d.ts.map +1 -1
  5. package/dist/codegen/report.js +3 -0
  6. package/dist/codegen/report.js.map +1 -1
  7. package/dist/codegen/run-codegen.d.ts +1 -0
  8. package/dist/codegen/run-codegen.d.ts.map +1 -1
  9. package/dist/codegen/run-codegen.js +7 -1
  10. package/dist/codegen/run-codegen.js.map +1 -1
  11. package/dist/commands/docs.d.ts.map +1 -1
  12. package/dist/commands/docs.js +1 -0
  13. package/dist/commands/docs.js.map +1 -1
  14. package/dist/deploy/freedesktop/copyright.d.ts +2 -2
  15. package/dist/deploy/freedesktop/copyright.d.ts.map +1 -1
  16. package/dist/deploy/freedesktop/copyright.js +105 -14
  17. package/dist/deploy/freedesktop/copyright.js.map +1 -1
  18. package/dist/deploy/install-hints.d.ts.map +1 -1
  19. package/dist/deploy/install-hints.js +7 -4
  20. package/dist/deploy/install-hints.js.map +1 -1
  21. package/dist/deploy/node-runtime/download.d.ts +5 -1
  22. package/dist/deploy/node-runtime/download.d.ts.map +1 -1
  23. package/dist/deploy/node-runtime/download.js +6 -3
  24. package/dist/deploy/node-runtime/download.js.map +1 -1
  25. package/dist/deploy/node-runtime/index.d.ts +2 -1
  26. package/dist/deploy/node-runtime/index.d.ts.map +1 -1
  27. package/dist/deploy/node-runtime/index.js +10 -9
  28. package/dist/deploy/node-runtime/index.js.map +1 -1
  29. package/dist/deploy/node-runtime/license.d.ts +4 -0
  30. package/dist/deploy/node-runtime/license.d.ts.map +1 -0
  31. package/dist/deploy/node-runtime/license.js +19 -0
  32. package/dist/deploy/node-runtime/license.js.map +1 -0
  33. package/dist/deploy/notices/collect.d.ts +8 -0
  34. package/dist/deploy/notices/collect.d.ts.map +1 -0
  35. package/dist/deploy/notices/collect.js +17 -0
  36. package/dist/deploy/notices/collect.js.map +1 -0
  37. package/dist/deploy/notices/dependencies.d.ts +5 -0
  38. package/dist/deploy/notices/dependencies.d.ts.map +1 -0
  39. package/dist/deploy/notices/dependencies.js +39 -0
  40. package/dist/deploy/notices/dependencies.js.map +1 -0
  41. package/dist/deploy/notices/gtkx.d.ts +6 -0
  42. package/dist/deploy/notices/gtkx.d.ts.map +1 -0
  43. package/dist/deploy/notices/gtkx.js +68 -0
  44. package/dist/deploy/notices/gtkx.js.map +1 -0
  45. package/dist/deploy/notices/libraries.d.ts +4 -0
  46. package/dist/deploy/notices/libraries.d.ts.map +1 -0
  47. package/dist/deploy/notices/libraries.js +60 -0
  48. package/dist/deploy/notices/libraries.js.map +1 -0
  49. package/dist/deploy/notices/node-runtime.d.ts +4 -0
  50. package/dist/deploy/notices/node-runtime.d.ts.map +1 -0
  51. package/dist/deploy/notices/node-runtime.js +78 -0
  52. package/dist/deploy/notices/node-runtime.js.map +1 -0
  53. package/dist/deploy/notices/packages.d.ts +13 -0
  54. package/dist/deploy/notices/packages.d.ts.map +1 -0
  55. package/dist/deploy/notices/packages.js +115 -0
  56. package/dist/deploy/notices/packages.js.map +1 -0
  57. package/dist/deploy/notices/render.d.ts +4 -0
  58. package/dist/deploy/notices/render.d.ts.map +1 -0
  59. package/dist/deploy/notices/render.js +41 -0
  60. package/dist/deploy/notices/render.js.map +1 -0
  61. package/dist/deploy/notices/text.d.ts +5 -0
  62. package/dist/deploy/notices/text.d.ts.map +1 -0
  63. package/dist/deploy/notices/text.js +34 -0
  64. package/dist/deploy/notices/text.js.map +1 -0
  65. package/dist/deploy/payload/copy-tree.d.ts +2 -1
  66. package/dist/deploy/payload/copy-tree.d.ts.map +1 -1
  67. package/dist/deploy/payload/copy-tree.js +3 -1
  68. package/dist/deploy/payload/copy-tree.js.map +1 -1
  69. package/dist/deploy/payload/stage.d.ts +7 -3
  70. package/dist/deploy/payload/stage.d.ts.map +1 -1
  71. package/dist/deploy/payload/stage.js +25 -14
  72. package/dist/deploy/payload/stage.js.map +1 -1
  73. package/dist/deploy/run-deploy.d.ts.map +1 -1
  74. package/dist/deploy/run-deploy.js +28 -7
  75. package/dist/deploy/run-deploy.js.map +1 -1
  76. package/dist/deploy/settings/extra-files.d.ts +4 -0
  77. package/dist/deploy/settings/extra-files.d.ts.map +1 -0
  78. package/dist/deploy/settings/extra-files.js +11 -0
  79. package/dist/deploy/settings/extra-files.js.map +1 -0
  80. package/dist/deploy/settings/index.d.ts.map +1 -1
  81. package/dist/deploy/settings/index.js +2 -1
  82. package/dist/deploy/settings/index.js.map +1 -1
  83. package/dist/deploy/settings/package-manifest.d.ts +2 -0
  84. package/dist/deploy/settings/package-manifest.d.ts.map +1 -1
  85. package/dist/deploy/settings/package-manifest.js +8 -0
  86. package/dist/deploy/settings/package-manifest.js.map +1 -1
  87. package/dist/deploy/settings/paths.d.ts +2 -1
  88. package/dist/deploy/settings/paths.d.ts.map +1 -1
  89. package/dist/deploy/settings/paths.js +1 -1
  90. package/dist/deploy/settings/paths.js.map +1 -1
  91. package/dist/deploy/targets/flatpak-manifest.d.ts +3 -1
  92. package/dist/deploy/targets/flatpak-manifest.d.ts.map +1 -1
  93. package/dist/deploy/targets/flatpak-manifest.js +50 -4
  94. package/dist/deploy/targets/flatpak-manifest.js.map +1 -1
  95. package/dist/deploy/targets/flatpak-pnpm.d.ts +15 -0
  96. package/dist/deploy/targets/flatpak-pnpm.d.ts.map +1 -0
  97. package/dist/deploy/targets/flatpak-pnpm.js +69 -0
  98. package/dist/deploy/targets/flatpak-pnpm.js.map +1 -0
  99. package/dist/deploy/targets/flatpak-source.d.ts.map +1 -1
  100. package/dist/deploy/targets/flatpak-source.js +70 -7
  101. package/dist/deploy/targets/flatpak-source.js.map +1 -1
  102. package/dist/deploy/targets/flatpak-sources.d.ts +5 -3
  103. package/dist/deploy/targets/flatpak-sources.d.ts.map +1 -1
  104. package/dist/deploy/targets/flatpak-sources.js +23 -9
  105. package/dist/deploy/targets/flatpak-sources.js.map +1 -1
  106. package/dist/deploy/targets/flatpak.d.ts.map +1 -1
  107. package/dist/deploy/targets/flatpak.js +3 -2
  108. package/dist/deploy/targets/flatpak.js.map +1 -1
  109. package/dist/deploy/tools.d.ts +3 -1
  110. package/dist/deploy/tools.d.ts.map +1 -1
  111. package/dist/deploy/tools.js +17 -3
  112. package/dist/deploy/tools.js.map +1 -1
  113. package/dist/deploy/types.d.ts +22 -2
  114. package/dist/deploy/types.d.ts.map +1 -1
  115. package/dist/deploy/types.js.map +1 -1
  116. package/dist/vite-plugins/bundled-packages.d.ts +5 -0
  117. package/dist/vite-plugins/bundled-packages.d.ts.map +1 -0
  118. package/dist/vite-plugins/bundled-packages.js +63 -0
  119. package/dist/vite-plugins/bundled-packages.js.map +1 -0
  120. package/package.json +9 -9
  121. package/src/builder.ts +2 -0
  122. package/src/codegen/report.ts +4 -0
  123. package/src/codegen/run-codegen.ts +11 -1
  124. package/src/commands/docs.ts +1 -0
  125. package/src/deploy/freedesktop/copyright.ts +153 -18
  126. package/src/deploy/install-hints.ts +9 -6
  127. package/src/deploy/node-runtime/download.ts +13 -4
  128. package/src/deploy/node-runtime/index.ts +17 -11
  129. package/src/deploy/node-runtime/license.ts +24 -0
  130. package/src/deploy/notices/collect.ts +26 -0
  131. package/src/deploy/notices/dependencies.ts +53 -0
  132. package/src/deploy/notices/gtkx.ts +92 -0
  133. package/src/deploy/notices/libraries.ts +81 -0
  134. package/src/deploy/notices/node-runtime.ts +101 -0
  135. package/src/deploy/notices/packages.ts +168 -0
  136. package/src/deploy/notices/render.ts +52 -0
  137. package/src/deploy/notices/text.ts +42 -0
  138. package/src/deploy/payload/copy-tree.ts +5 -1
  139. package/src/deploy/payload/stage.ts +40 -16
  140. package/src/deploy/run-deploy.ts +34 -6
  141. package/src/deploy/settings/extra-files.ts +21 -0
  142. package/src/deploy/settings/index.ts +2 -1
  143. package/src/deploy/settings/package-manifest.ts +12 -0
  144. package/src/deploy/settings/paths.ts +1 -1
  145. package/src/deploy/targets/flatpak-manifest.ts +69 -4
  146. package/src/deploy/targets/flatpak-pnpm.ts +115 -0
  147. package/src/deploy/targets/flatpak-source.ts +105 -6
  148. package/src/deploy/targets/flatpak-sources.ts +36 -9
  149. package/src/deploy/targets/flatpak.ts +3 -2
  150. package/src/deploy/tools.ts +23 -2
  151. package/src/deploy/types.ts +27 -1
  152. package/src/vite-plugins/bundled-packages.ts +95 -0
  153. package/LICENSE +0 -373
@@ -1 +1 @@
1
- {"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../src/builder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,YAAY,EAAmC,MAAM,MAAM,CAAC;AAQ1E,KAAK,YAAY,GAAG;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,IAAI,CAAC,EAAE,YAAY,GAAG,SAAS,CAAC;CACnC,CAAC;AAoBF,QAAA,MAAM,KAAK,GAAU,SAAS,YAAY,KAAG,OAAO,CAAC,MAAM,CA8B1D,CAAC;AAEF,OAAO,EAAE,KAAK,EAAE,CAAC"}
1
+ {"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../src/builder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,YAAY,EAAmC,MAAM,MAAM,CAAC;AAS1E,KAAK,YAAY,GAAG;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,IAAI,CAAC,EAAE,YAAY,GAAG,SAAS,CAAC;CACnC,CAAC;AAoBF,QAAA,MAAM,KAAK,GAAU,SAAS,YAAY,KAAG,OAAO,CAAC,MAAM,CA+B1D,CAAC;AAEF,OAAO,EAAE,KAAK,EAAE,CAAC"}
package/dist/builder.js CHANGED
@@ -1,6 +1,7 @@
1
1
  import { join, posix } from "node:path";
2
2
  import { mergeConfig, build as viteBuild } from "vite";
3
3
  import { gtkxBuiltUrl } from "./vite-plugins/built-url.js";
4
+ import { gtkxBundledPackages } from "./vite-plugins/bundled-packages.js";
4
5
  import { BUNDLE_FILENAME, ESM_EXTENSION } from "./vite-plugins/esm-extension.js";
5
6
  import { gtkxVitePlugins } from "./vite-plugins/index.js";
6
7
  import { gtkxNative } from "./vite-plugins/native.js";
@@ -32,6 +33,7 @@ const build = async (options) => {
32
33
  gtkxWorker(),
33
34
  gtkxBuiltUrl(assetBase),
34
35
  gtkxNative(root),
36
+ gtkxBundledPackages(root),
35
37
  gtkxSelfContained(),
36
38
  ],
37
39
  build: {
@@ -1 +1 @@
1
- {"version":3,"file":"builder.js","sourceRoot":"","sources":["../src/builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAqB,WAAW,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,MAAM,CAAC;AAC1E,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AACjF,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAQtD,MAAM,UAAU,GAAG,YAAY,CAAC;AAChC,MAAM,UAAU,GAAG,eAAe,CAAC;AACnC,MAAM,eAAe,GAAG,MAAM,CAAC;AAC/B,MAAM,kBAAkB,GAAG,QAAQ,CAAC;AACpC,MAAM,gBAAgB,GAAG,eAAe,CAAC;AAEzC,MAAM,aAAa,GAAiB;IAChC,KAAK,EAAE;QACH,aAAa,EAAE,IAAI;QACnB,MAAM,EAAE,eAAe;QACvB,MAAM,EAAE,IAAI;QACZ,SAAS,EAAE,KAAK;KACnB;IACD,MAAM,EAAE;QACJ,sBAAsB,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC;KACrD;CACJ,CAAC;AAEF,MAAM,KAAK,GAAG,KAAK,EAAE,OAAqB,EAAmB,EAAE;IAC3D,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC;IACvD,MAAM,IAAI,GAAG,UAAU,EAAE,IAAI,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAC/C,MAAM,SAAS,GAAG,UAAU,EAAE,KAAK,EAAE,SAAS,IAAI,kBAAkB,CAAC;IAErE,MAAM,MAAM,GAAiB;QACzB,OAAO,EAAE;YACL,GAAG,eAAe,CAAC,UAAU,CAAC;YAC9B,UAAU,EAAE;YACZ,YAAY,CAAC,SAAS,CAAC;YACvB,UAAU,CAAC,IAAI,CAAC;YAChB,iBAAiB,EAAE;SACtB;QACD,KAAK,EAAE;YACH,GAAG,EAAE,KAAK;YACV,iBAAiB,EAAE,CAAC;YACpB,eAAe,EAAE;gBACb,MAAM,EAAE;oBACJ,cAAc,EAAE,gBAAgB;oBAChC,cAAc,EAAE,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,GAAG,aAAa,CAAC;oBACjE,SAAS,EAAE,IAAI;iBAClB;aACJ;SACJ;KACJ,CAAC;IAEF,MAAM,MAAM,GAAiB,WAAW,CAAC,WAAW,CAAC,aAAa,EAAE,UAAU,IAAI,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;IAC/F,MAAM,SAAS,CAAC,EAAE,GAAG,MAAM,EAAE,GAAG,EAAE,EAAE,GAAG,MAAM,CAAC,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;IAEzE,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,IAAI,eAAe,EAAE,gBAAgB,CAAC,CAAC;AAC3E,CAAC,CAAC;AAEF,OAAO,EAAE,KAAK,EAAE,CAAC","sourcesContent":["import { join, posix } from \"node:path\";\nimport { type InlineConfig, mergeConfig, build as viteBuild } from \"vite\";\nimport { gtkxBuiltUrl } from \"./vite-plugins/built-url.js\";\nimport { BUNDLE_FILENAME, ESM_EXTENSION } from \"./vite-plugins/esm-extension.js\";\nimport { gtkxVitePlugins } from \"./vite-plugins/index.js\";\nimport { gtkxNative } from \"./vite-plugins/native.js\";\nimport { gtkxSelfContained } from \"./vite-plugins/self-contained.js\";\nimport { gtkxWorker } from \"./vite-plugins/worker.js\";\n\ntype BuildOptions = {\n entry: string;\n assetBase?: string | undefined;\n vite?: InlineConfig | undefined;\n};\n\nconst BUILD_MODE = \"production\";\nconst CHUNK_STEM = \"[name]-[hash]\";\nconst DEFAULT_OUT_DIR = \"dist\";\nconst DEFAULT_ASSETS_DIR = \"assets\";\nconst ENTRY_FILE_NAMES = BUNDLE_FILENAME;\n\nconst buildDefaults: InlineConfig = {\n build: {\n ssrEmitAssets: true,\n outDir: DEFAULT_OUT_DIR,\n minify: true,\n cssMinify: false,\n },\n define: {\n \"process.env.NODE_ENV\": JSON.stringify(BUILD_MODE),\n },\n};\n\nconst build = async (options: BuildOptions): Promise<string> => {\n const { entry, assetBase, vite: viteConfig } = options;\n const root = viteConfig?.root ?? process.cwd();\n const assetsDir = viteConfig?.build?.assetsDir ?? DEFAULT_ASSETS_DIR;\n\n const forced: InlineConfig = {\n plugins: [\n ...gtkxVitePlugins(BUILD_MODE),\n gtkxWorker(),\n gtkxBuiltUrl(assetBase),\n gtkxNative(root),\n gtkxSelfContained(),\n ],\n build: {\n ssr: entry,\n assetsInlineLimit: 0,\n rolldownOptions: {\n output: {\n entryFileNames: ENTRY_FILE_NAMES,\n chunkFileNames: posix.join(assetsDir, CHUNK_STEM + ESM_EXTENSION),\n keepNames: true,\n },\n },\n },\n };\n\n const merged: InlineConfig = mergeConfig(mergeConfig(buildDefaults, viteConfig ?? {}), forced);\n await viteBuild({ ...merged, ssr: { ...merged.ssr, noExternal: true } });\n\n return join(merged.build?.outDir ?? DEFAULT_OUT_DIR, ENTRY_FILE_NAMES);\n};\n\nexport { build };\n"]}
1
+ {"version":3,"file":"builder.js","sourceRoot":"","sources":["../src/builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAqB,WAAW,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,MAAM,CAAC;AAC1E,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AACjF,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAQtD,MAAM,UAAU,GAAG,YAAY,CAAC;AAChC,MAAM,UAAU,GAAG,eAAe,CAAC;AACnC,MAAM,eAAe,GAAG,MAAM,CAAC;AAC/B,MAAM,kBAAkB,GAAG,QAAQ,CAAC;AACpC,MAAM,gBAAgB,GAAG,eAAe,CAAC;AAEzC,MAAM,aAAa,GAAiB;IAChC,KAAK,EAAE;QACH,aAAa,EAAE,IAAI;QACnB,MAAM,EAAE,eAAe;QACvB,MAAM,EAAE,IAAI;QACZ,SAAS,EAAE,KAAK;KACnB;IACD,MAAM,EAAE;QACJ,sBAAsB,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC;KACrD;CACJ,CAAC;AAEF,MAAM,KAAK,GAAG,KAAK,EAAE,OAAqB,EAAmB,EAAE;IAC3D,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC;IACvD,MAAM,IAAI,GAAG,UAAU,EAAE,IAAI,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAC/C,MAAM,SAAS,GAAG,UAAU,EAAE,KAAK,EAAE,SAAS,IAAI,kBAAkB,CAAC;IAErE,MAAM,MAAM,GAAiB;QACzB,OAAO,EAAE;YACL,GAAG,eAAe,CAAC,UAAU,CAAC;YAC9B,UAAU,EAAE;YACZ,YAAY,CAAC,SAAS,CAAC;YACvB,UAAU,CAAC,IAAI,CAAC;YAChB,mBAAmB,CAAC,IAAI,CAAC;YACzB,iBAAiB,EAAE;SACtB;QACD,KAAK,EAAE;YACH,GAAG,EAAE,KAAK;YACV,iBAAiB,EAAE,CAAC;YACpB,eAAe,EAAE;gBACb,MAAM,EAAE;oBACJ,cAAc,EAAE,gBAAgB;oBAChC,cAAc,EAAE,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,GAAG,aAAa,CAAC;oBACjE,SAAS,EAAE,IAAI;iBAClB;aACJ;SACJ;KACJ,CAAC;IAEF,MAAM,MAAM,GAAiB,WAAW,CAAC,WAAW,CAAC,aAAa,EAAE,UAAU,IAAI,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;IAC/F,MAAM,SAAS,CAAC,EAAE,GAAG,MAAM,EAAE,GAAG,EAAE,EAAE,GAAG,MAAM,CAAC,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;IAEzE,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,IAAI,eAAe,EAAE,gBAAgB,CAAC,CAAC;AAC3E,CAAC,CAAC;AAEF,OAAO,EAAE,KAAK,EAAE,CAAC","sourcesContent":["import { join, posix } from \"node:path\";\nimport { type InlineConfig, mergeConfig, build as viteBuild } from \"vite\";\nimport { gtkxBuiltUrl } from \"./vite-plugins/built-url.js\";\nimport { gtkxBundledPackages } from \"./vite-plugins/bundled-packages.js\";\nimport { BUNDLE_FILENAME, ESM_EXTENSION } from \"./vite-plugins/esm-extension.js\";\nimport { gtkxVitePlugins } from \"./vite-plugins/index.js\";\nimport { gtkxNative } from \"./vite-plugins/native.js\";\nimport { gtkxSelfContained } from \"./vite-plugins/self-contained.js\";\nimport { gtkxWorker } from \"./vite-plugins/worker.js\";\n\ntype BuildOptions = {\n entry: string;\n assetBase?: string | undefined;\n vite?: InlineConfig | undefined;\n};\n\nconst BUILD_MODE = \"production\";\nconst CHUNK_STEM = \"[name]-[hash]\";\nconst DEFAULT_OUT_DIR = \"dist\";\nconst DEFAULT_ASSETS_DIR = \"assets\";\nconst ENTRY_FILE_NAMES = BUNDLE_FILENAME;\n\nconst buildDefaults: InlineConfig = {\n build: {\n ssrEmitAssets: true,\n outDir: DEFAULT_OUT_DIR,\n minify: true,\n cssMinify: false,\n },\n define: {\n \"process.env.NODE_ENV\": JSON.stringify(BUILD_MODE),\n },\n};\n\nconst build = async (options: BuildOptions): Promise<string> => {\n const { entry, assetBase, vite: viteConfig } = options;\n const root = viteConfig?.root ?? process.cwd();\n const assetsDir = viteConfig?.build?.assetsDir ?? DEFAULT_ASSETS_DIR;\n\n const forced: InlineConfig = {\n plugins: [\n ...gtkxVitePlugins(BUILD_MODE),\n gtkxWorker(),\n gtkxBuiltUrl(assetBase),\n gtkxNative(root),\n gtkxBundledPackages(root),\n gtkxSelfContained(),\n ],\n build: {\n ssr: entry,\n assetsInlineLimit: 0,\n rolldownOptions: {\n output: {\n entryFileNames: ENTRY_FILE_NAMES,\n chunkFileNames: posix.join(assetsDir, CHUNK_STEM + ESM_EXTENSION),\n keepNames: true,\n },\n },\n },\n };\n\n const merged: InlineConfig = mergeConfig(mergeConfig(buildDefaults, viteConfig ?? {}), forced);\n await viteBuild({ ...merged, ssr: { ...merged.ssr, noExternal: true } });\n\n return join(merged.build?.outDir ?? DEFAULT_OUT_DIR, ENTRY_FILE_NAMES);\n};\n\nexport { build };\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../src/codegen/report.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAIzD,QAAA,MAAM,mBAAmB,GAAI,QAAQ,gBAAgB,EAAE,SAAS,MAAM,KAAG,MAAM,EAqB9E,CAAC;AAEF,OAAO,EAAE,mBAAmB,EAAE,CAAC"}
1
+ {"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../src/codegen/report.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAIzD,QAAA,MAAM,mBAAmB,GAAI,QAAQ,gBAAgB,EAAE,SAAS,MAAM,KAAG,MAAM,EAyB9E,CAAC;AAEF,OAAO,EAAE,mBAAmB,EAAE,CAAC"}
@@ -10,6 +10,9 @@ const formatCodegenResult = (result, totalMs) => {
10
10
  if (result.girPath) {
11
11
  details.push(`girPath=${result.girPath.join(":")}`);
12
12
  }
13
+ if (result.future && result.future.length > 0) {
14
+ details.push(`future=${result.future.join(", ")}`);
15
+ }
13
16
  details.push(`${String(result.namespaces)} namespaces, ${String(result.intrinsicElements)} intrinsic elements ` +
14
17
  `in ${String(result.duration)}ms (total ${String(totalMs)}ms)`);
15
18
  return details.map((detail) => PREFIX + detail);
@@ -1 +1 @@
1
- {"version":3,"file":"report.js","sourceRoot":"","sources":["../../src/codegen/report.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,GAAG,WAAW,CAAC;AAE3B,MAAM,mBAAmB,GAAG,CAAC,MAAwB,EAAE,OAAe,EAAY,EAAE;IAChF,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QACpB,OAAO,CAAC,IAAI,CAAC,UAAU,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;IAChD,CAAC;IAED,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;QACnB,OAAO,CAAC,IAAI,CAAC,aAAa,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC7D,CAAC;IAED,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACjB,OAAO,CAAC,IAAI,CAAC,WAAW,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACxD,CAAC;IAED,OAAO,CAAC,IAAI,CACR,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,gBAAgB,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,sBAAsB;QAClG,MAAM,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,MAAM,CAAC,OAAO,CAAC,KAAK,CACjE,CAAC;IAEF,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;AACpD,CAAC,CAAC;AAEF,OAAO,EAAE,mBAAmB,EAAE,CAAC","sourcesContent":["import type { RunCodegenResult } from \"./run-codegen.js\";\n\nconst PREFIX = \"codegen: \";\n\nconst formatCodegenResult = (result: RunCodegenResult, totalMs: number): string[] => {\n const details: string[] = [];\n\n if (result.configFile) {\n details.push(`config=${result.configFile}`);\n }\n\n if (result.libraries) {\n details.push(`libraries=${result.libraries.join(\", \")}`);\n }\n\n if (result.girPath) {\n details.push(`girPath=${result.girPath.join(\":\")}`);\n }\n\n details.push(\n `${String(result.namespaces)} namespaces, ${String(result.intrinsicElements)} intrinsic elements ` +\n `in ${String(result.duration)}ms (total ${String(totalMs)}ms)`,\n );\n\n return details.map((detail) => PREFIX + detail);\n};\n\nexport { formatCodegenResult };\n"]}
1
+ {"version":3,"file":"report.js","sourceRoot":"","sources":["../../src/codegen/report.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,GAAG,WAAW,CAAC;AAE3B,MAAM,mBAAmB,GAAG,CAAC,MAAwB,EAAE,OAAe,EAAY,EAAE;IAChF,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QACpB,OAAO,CAAC,IAAI,CAAC,UAAU,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;IAChD,CAAC;IAED,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;QACnB,OAAO,CAAC,IAAI,CAAC,aAAa,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC7D,CAAC;IAED,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACjB,OAAO,CAAC,IAAI,CAAC,WAAW,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACxD,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5C,OAAO,CAAC,IAAI,CAAC,UAAU,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACvD,CAAC;IAED,OAAO,CAAC,IAAI,CACR,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,gBAAgB,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,sBAAsB;QAClG,MAAM,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,MAAM,CAAC,OAAO,CAAC,KAAK,CACjE,CAAC;IAEF,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;AACpD,CAAC,CAAC;AAEF,OAAO,EAAE,mBAAmB,EAAE,CAAC","sourcesContent":["import type { RunCodegenResult } from \"./run-codegen.js\";\n\nconst PREFIX = \"codegen: \";\n\nconst formatCodegenResult = (result: RunCodegenResult, totalMs: number): string[] => {\n const details: string[] = [];\n\n if (result.configFile) {\n details.push(`config=${result.configFile}`);\n }\n\n if (result.libraries) {\n details.push(`libraries=${result.libraries.join(\", \")}`);\n }\n\n if (result.girPath) {\n details.push(`girPath=${result.girPath.join(\":\")}`);\n }\n\n if (result.future && result.future.length > 0) {\n details.push(`future=${result.future.join(\", \")}`);\n }\n\n details.push(\n `${String(result.namespaces)} namespaces, ${String(result.intrinsicElements)} intrinsic elements ` +\n `in ${String(result.duration)}ms (total ${String(totalMs)}ms)`,\n );\n\n return details.map((detail) => PREFIX + detail);\n};\n\nexport { formatCodegenResult };\n"]}
@@ -20,6 +20,7 @@ type RunCodegenResult = {
20
20
  girPath?: string[] | undefined;
21
21
  configFile?: string | undefined;
22
22
  libraries?: string[] | undefined;
23
+ future?: string[] | undefined;
23
24
  };
24
25
  type EnsureGeneratedOptions = {
25
26
  shouldAnnounce?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"run-codegen.d.ts","sourceRoot":"","sources":["../../src/codegen/run-codegen.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,MAAM,EAAc,MAAM,cAAc,CAAC;AAYvD,OAAO,EAAE,KAAK,aAAa,EAAwC,MAAM,gBAAgB,CAAC;AAC1F,OAAO,EAAE,KAAK,cAAc,EAA4C,MAAM,qBAAqB,CAAC;AAEpG,KAAK,iBAAiB,GAAG;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,QAAQ,CAAC,EAAE,YAAY,CAAC;CAC3B,CAAC;AAEF,KAAK,YAAY,GAAG;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,KAAK,gBAAgB,GAAG;IACpB,aAAa,EAAE,OAAO,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IAC/B,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,SAAS,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;CACpC,CAAC;AAUF,KAAK,sBAAsB,GAAG;IAAE,cAAc,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAqF1E,QAAA,MAAM,UAAU,GAAU,UAAS,iBAAsB,KAAG,OAAO,CAAC,gBAAgB,CAmCnF,CAAC;AAEF,QAAA,MAAM,iBAAiB,GAAU,KAAK,MAAM,EAAE,OAAO,MAAM,KAAG,OAAO,CAAC,OAAO,CAQ5E,CAAC;AAEF,QAAA,MAAM,aAAa,GAAI,KAAK,MAAM,KAAG,IAEpC,CAAC;AAkDF,QAAA,MAAM,iBAAiB,GACnB,SAAS,cAAc,EACvB,UAAS,sBAA2B,KACrC,OAAO,CAAC,OAAO,CAAuE,CAAC;AAG1F,QAAA,MAAM,eAAe,GAAU,KAAK,MAAM,EAAE,UAAS,sBAA2B,KAAG,OAAO,CAAC,OAAO,CACS,CAAC;AAE5G,QAAA,MAAM,kBAAkB,GACpB,KAAK,MAAM,EACX,OAAO,MAAM,KACd,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAAC,UAAU,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAAE,CAS9D,CAAC;AAEF,OAAO,EACH,UAAU,EACV,iBAAiB,EACjB,aAAa,EACb,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,KAAK,gBAAgB,GACxB,CAAC"}
1
+ {"version":3,"file":"run-codegen.d.ts","sourceRoot":"","sources":["../../src/codegen/run-codegen.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,MAAM,EAAc,MAAM,cAAc,CAAC;AAYvD,OAAO,EAAE,KAAK,aAAa,EAAwC,MAAM,gBAAgB,CAAC;AAC1F,OAAO,EAAE,KAAK,cAAc,EAA4C,MAAM,qBAAqB,CAAC;AAEpG,KAAK,iBAAiB,GAAG;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,QAAQ,CAAC,EAAE,YAAY,CAAC;CAC3B,CAAC;AAEF,KAAK,YAAY,GAAG;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,KAAK,gBAAgB,GAAG;IACpB,aAAa,EAAE,OAAO,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IAC/B,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,SAAS,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IACjC,MAAM,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;CACjC,CAAC;AAWF,KAAK,sBAAsB,GAAG;IAAE,cAAc,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AA2F1E,QAAA,MAAM,UAAU,GAAU,UAAS,iBAAsB,KAAG,OAAO,CAAC,gBAAgB,CAqCnF,CAAC;AAEF,QAAA,MAAM,iBAAiB,GAAU,KAAK,MAAM,EAAE,OAAO,MAAM,KAAG,OAAO,CAAC,OAAO,CAQ5E,CAAC;AAEF,QAAA,MAAM,aAAa,GAAI,KAAK,MAAM,KAAG,IAEpC,CAAC;AAkDF,QAAA,MAAM,iBAAiB,GACnB,SAAS,cAAc,EACvB,UAAS,sBAA2B,KACrC,OAAO,CAAC,OAAO,CAAuE,CAAC;AAG1F,QAAA,MAAM,eAAe,GAAU,KAAK,MAAM,EAAE,UAAS,sBAA2B,KAAG,OAAO,CAAC,OAAO,CACS,CAAC;AAE5G,QAAA,MAAM,kBAAkB,GACpB,KAAK,MAAM,EACX,OAAO,MAAM,KACd,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAAC,UAAU,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAAE,CAS9D,CAAC;AAEF,OAAO,EACH,UAAU,EACV,iBAAiB,EACjB,aAAa,EACb,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,KAAK,gBAAgB,GACxB,CAAC"}
@@ -21,9 +21,10 @@ const removeShadowingStores = (cwd) => {
21
21
  sweepProjectStaging(cwd);
22
22
  removeStores(getShadowingStorePaths(cwd));
23
23
  };
24
- const codegenOptions = ({ store, libraries, girPath, elements }) => ({
24
+ const codegenOptions = ({ store, libraries, girPath, elements, isByteArrayTyped }) => ({
25
25
  libraries,
26
26
  girPath,
27
+ isByteArrayTyped,
27
28
  gi: {
28
29
  storeDir: store.giStoreDir,
29
30
  linkDir: store.giLinkDir,
@@ -42,6 +43,9 @@ const codegenOptions = ({ store, libraries, girPath, elements }) => ({
42
43
  userLazyElements: resolveLazyElements(elements),
43
44
  userOmittedProps: resolveOmittedProps(elements),
44
45
  });
46
+ const enabledFutureFlags = (config) => Object.entries(config.future ?? {})
47
+ .filter(([, value]) => value === true)
48
+ .map(([name]) => name);
45
49
  const disabledCodegenResult = (configFile) => ({
46
50
  isRegenerated: false,
47
51
  namespaces: 0,
@@ -86,6 +90,7 @@ const runCodegen = async (options = {}) => {
86
90
  libraries,
87
91
  girPath,
88
92
  elements: config.elements,
93
+ isByteArrayTyped: config.future?.v2ByteArrays === true,
89
94
  }),
90
95
  isForced,
91
96
  });
@@ -97,6 +102,7 @@ const runCodegen = async (options = {}) => {
97
102
  girPath,
98
103
  configFile,
99
104
  libraries,
105
+ future: enabledFutureFlags(config),
100
106
  };
101
107
  };
102
108
  const isCodegenDisabled = async (cwd, mode) => {
@@ -1 +1 @@
1
- {"version":3,"file":"run-codegen.js","sourceRoot":"","sources":["../../src/codegen/run-codegen.ts"],"names":[],"mappings":"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","sourcesContent":["import { runCodegen as runCodegenCore } from \"@gtkx/codegen\";\nimport { getShadowingStorePaths, sweepProjectStaging } from \"@gtkx/codegen/internal\";\nimport { type Config, loadConfig } from \"@gtkx/config\";\nimport {\n resolveElementComponents,\n resolveElementProps,\n resolveLazyElements,\n resolveOmittedProps,\n} from \"@gtkx/config/internal\";\nimport { info } from \"@gtkx/utils\";\nimport { rmSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport { resolveDataDir } from \"../internal/data-dir.js\";\nimport { emitSchemaEnv } from \"../settings/schema.js\";\nimport { type CodegenInputs, isCodegenStale, resolveCodegenInputs } from \"./freshness.js\";\nimport { type CodegenContext, type CodegenStore, resolveCodegenContext } from \"./store-resolver.js\";\n\ntype RunCodegenOptions = {\n cwd?: string;\n mode?: string | undefined;\n isForced?: boolean;\n inputs?: CodegenInputs;\n resolved?: LoadedConfig;\n};\n\ntype LoadedConfig = {\n config: Config;\n configFile: string;\n};\n\ntype RunCodegenResult = {\n isRegenerated: boolean;\n namespaces: number;\n intrinsicElements: number;\n duration: number;\n girPath?: string[] | undefined;\n configFile?: string | undefined;\n libraries?: string[] | undefined;\n};\n\ntype CodegenOptionsInput = {\n store: CodegenStore;\n libraries: string[];\n girPath: string[];\n elements: Config[\"elements\"];\n};\n\ntype PreparedCodegen = CodegenInputs & { isForced: boolean };\ntype EnsureGeneratedOptions = { shouldAnnounce?: boolean; mode?: string };\n\ntype RunOptionsInput = {\n root: string;\n mode: string | undefined;\n inputs: CodegenInputs | null;\n resolved: LoadedConfig;\n};\n\nconst GIR_PATH_MISSING_MESSAGE =\n \"No GIR search paths available. Install gobject-introspection \" +\n \"(Linux: `sudo dnf install gobject-introspection-devel` or `sudo apt install libgirepository1.0-dev`), \" +\n \"or set `girPath` in gtkx.config.ts.\";\n\nconst removeStores = (paths: string[]): void => {\n for (const path of paths) {\n rmSync(path, { recursive: true, force: true });\n }\n};\n\nconst removeShadowingStores = (cwd: string): void => {\n sweepProjectStaging(cwd);\n removeStores(getShadowingStorePaths(cwd));\n};\n\nconst codegenOptions = ({ store, libraries, girPath, elements }: CodegenOptionsInput) => ({\n libraries,\n girPath,\n gi: {\n storeDir: store.giStoreDir,\n linkDir: store.giLinkDir,\n version: store.runtimeVersion,\n },\n jsx:\n store.react === null\n ? undefined\n : {\n storeDir: store.jsxStoreDir,\n linkDir: store.jsxLinkDir,\n version: store.react.version,\n },\n reactSubexports: store.react?.subexports ?? [],\n userComponents: resolveElementComponents(elements),\n userProps: resolveElementProps(elements),\n userLazyElements: resolveLazyElements(elements),\n userOmittedProps: resolveOmittedProps(elements),\n});\n\nconst disabledCodegenResult = (configFile: string): RunCodegenResult => ({\n isRegenerated: false,\n namespaces: 0,\n intrinsicElements: 0,\n duration: 0,\n girPath: [],\n configFile,\n libraries: [],\n});\n\nconst regeneratedStorePaths = (store: CodegenStore): string[] => {\n if (store.react === null) {\n return [store.giStoreDir, store.giLinkDir];\n }\n\n return [store.giStoreDir, store.giLinkDir, store.jsxStoreDir, store.jsxLinkDir];\n};\n\nconst clearGeneratedStores = (store: CodegenStore): void => {\n removeStores(regeneratedStorePaths(store));\n};\n\nconst resolveLoadedConfig = async (options: RunCodegenOptions, cwd: string): Promise<LoadedConfig> =>\n options.resolved ?? (await loadConfig(cwd, { mode: options.mode }));\n\nconst prepareCodegen = (options: RunCodegenOptions, cwd: string, config: Config): PreparedCodegen => {\n const { girPath, libraries, store } = options.inputs ?? resolveCodegenInputs(cwd, config);\n\n if (girPath.length === 0) {\n throw new Error(GIR_PATH_MISSING_MESSAGE);\n }\n\n const isForced = options.isForced === true || isCodegenStale({ girPath, libraries, store });\n\n return { girPath, libraries, store, isForced };\n};\n\nconst runCodegen = async (options: RunCodegenOptions = {}): Promise<RunCodegenResult> => {\n const cwd = options.cwd ?? process.cwd();\n const { config, configFile } = await resolveLoadedConfig(options, cwd);\n\n if (config.codegen === false) {\n removeShadowingStores(cwd);\n\n return disabledCodegenResult(configFile);\n }\n\n const { girPath, libraries, store, isForced } = prepareCodegen(options, cwd, config);\n\n if (options.isForced) {\n clearGeneratedStores(store);\n }\n\n const result = await runCodegenCore({\n ...codegenOptions({\n store,\n libraries,\n girPath,\n elements: config.elements,\n }),\n isForced,\n });\n\n return {\n isRegenerated: result.isRegenerated,\n namespaces: result.namespaces,\n intrinsicElements: result.intrinsicElements,\n duration: result.duration,\n girPath,\n configFile,\n libraries,\n };\n};\n\nconst isCodegenDisabled = async (cwd: string, mode?: string): Promise<boolean> => {\n try {\n const { config } = await loadConfig(cwd, { mode });\n\n return config.codegen === false;\n } catch {\n return false;\n }\n};\n\nconst syncSchemaEnv = (cwd: string): void => {\n emitSchemaEnv(cwd, resolveDataDir(cwd));\n};\n\nconst resolveInputsOrNull = (cwd: string, config: Config): CodegenInputs | null => {\n try {\n return resolveCodegenInputs(cwd, config);\n } catch {\n return null;\n }\n};\n\nconst maybeAnnounceStale = (shouldAnnounce: boolean | undefined, inputs: CodegenInputs | null): void => {\n if (!shouldAnnounce) {\n return;\n }\n\n if (inputs === null || isCodegenStale(inputs)) {\n info(\"generated bindings missing; running codegen...\");\n }\n};\n\nconst getRunOptions = ({ root, mode, inputs, resolved }: RunOptionsInput): RunCodegenOptions => {\n if (inputs === null) {\n return { cwd: root, mode, resolved };\n }\n\n return { cwd: root, mode, inputs, resolved };\n};\n\nconst isPreflightSkipped = (options: EnsureGeneratedOptions): boolean =>\n options.shouldAnnounce === true && process.env.GTKX_DISABLE_PREFLIGHT === \"1\";\n\n/* eslint-disable-next-line unicorn/consistent-boolean-name -- the boolean reports whether codegen ran */\nconst generate = async (context: CodegenContext, options: EnsureGeneratedOptions): Promise<boolean> => {\n syncSchemaEnv(context.root);\n\n if (context.config.codegen === false) {\n removeShadowingStores(context.root);\n\n return false;\n }\n\n const inputs = resolveInputsOrNull(context.root, context.config);\n maybeAnnounceStale(options.shouldAnnounce, inputs);\n const resolved = { config: context.config, configFile: context.configFile };\n const result = await runCodegen(getRunOptions({ root: context.root, mode: options.mode, inputs, resolved }));\n\n return result.isRegenerated;\n};\n\n/* eslint-disable-next-line unicorn/consistent-boolean-name -- the boolean reports whether codegen ran */\nconst ensureGeneratedIn = async (\n context: CodegenContext,\n options: EnsureGeneratedOptions = {},\n): Promise<boolean> => (isPreflightSkipped(options) ? false : generate(context, options));\n\n/* eslint-disable-next-line unicorn/consistent-boolean-name -- the boolean reports whether codegen ran */\nconst ensureGenerated = async (cwd: string, options: EnsureGeneratedOptions = {}): Promise<boolean> =>\n isPreflightSkipped(options) ? false : generate(await resolveCodegenContext(cwd, options.mode), options);\n\nconst resolveConfigWatch = async (\n cwd: string,\n mode?: string,\n): Promise<{ paths: string[]; regenerate: () => Promise<void> }> => {\n const { configFile, root } = await loadConfig(cwd, { mode });\n\n return {\n paths: [resolve(root, configFile)],\n regenerate: async () => {\n await runCodegen({ cwd: root, mode });\n },\n };\n};\n\nexport {\n runCodegen,\n isCodegenDisabled,\n syncSchemaEnv,\n ensureGenerated,\n ensureGeneratedIn,\n resolveConfigWatch,\n type RunCodegenResult,\n};\n"]}
1
+ {"version":3,"file":"run-codegen.js","sourceRoot":"","sources":["../../src/codegen/run-codegen.ts"],"names":[],"mappings":"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","sourcesContent":["import { runCodegen as runCodegenCore } from \"@gtkx/codegen\";\nimport { getShadowingStorePaths, sweepProjectStaging } from \"@gtkx/codegen/internal\";\nimport { type Config, loadConfig } from \"@gtkx/config\";\nimport {\n resolveElementComponents,\n resolveElementProps,\n resolveLazyElements,\n resolveOmittedProps,\n} from \"@gtkx/config/internal\";\nimport { info } from \"@gtkx/utils\";\nimport { rmSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport { resolveDataDir } from \"../internal/data-dir.js\";\nimport { emitSchemaEnv } from \"../settings/schema.js\";\nimport { type CodegenInputs, isCodegenStale, resolveCodegenInputs } from \"./freshness.js\";\nimport { type CodegenContext, type CodegenStore, resolveCodegenContext } from \"./store-resolver.js\";\n\ntype RunCodegenOptions = {\n cwd?: string;\n mode?: string | undefined;\n isForced?: boolean;\n inputs?: CodegenInputs;\n resolved?: LoadedConfig;\n};\n\ntype LoadedConfig = {\n config: Config;\n configFile: string;\n};\n\ntype RunCodegenResult = {\n isRegenerated: boolean;\n namespaces: number;\n intrinsicElements: number;\n duration: number;\n girPath?: string[] | undefined;\n configFile?: string | undefined;\n libraries?: string[] | undefined;\n future?: string[] | undefined;\n};\n\ntype CodegenOptionsInput = {\n store: CodegenStore;\n libraries: string[];\n girPath: string[];\n elements: Config[\"elements\"];\n isByteArrayTyped: boolean;\n};\n\ntype PreparedCodegen = CodegenInputs & { isForced: boolean };\ntype EnsureGeneratedOptions = { shouldAnnounce?: boolean; mode?: string };\n\ntype RunOptionsInput = {\n root: string;\n mode: string | undefined;\n inputs: CodegenInputs | null;\n resolved: LoadedConfig;\n};\n\nconst GIR_PATH_MISSING_MESSAGE =\n \"No GIR search paths available. Install gobject-introspection \" +\n \"(Linux: `sudo dnf install gobject-introspection-devel` or `sudo apt install libgirepository1.0-dev`), \" +\n \"or set `girPath` in gtkx.config.ts.\";\n\nconst removeStores = (paths: string[]): void => {\n for (const path of paths) {\n rmSync(path, { recursive: true, force: true });\n }\n};\n\nconst removeShadowingStores = (cwd: string): void => {\n sweepProjectStaging(cwd);\n removeStores(getShadowingStorePaths(cwd));\n};\n\nconst codegenOptions = ({ store, libraries, girPath, elements, isByteArrayTyped }: CodegenOptionsInput) => ({\n libraries,\n girPath,\n isByteArrayTyped,\n gi: {\n storeDir: store.giStoreDir,\n linkDir: store.giLinkDir,\n version: store.runtimeVersion,\n },\n jsx:\n store.react === null\n ? undefined\n : {\n storeDir: store.jsxStoreDir,\n linkDir: store.jsxLinkDir,\n version: store.react.version,\n },\n reactSubexports: store.react?.subexports ?? [],\n userComponents: resolveElementComponents(elements),\n userProps: resolveElementProps(elements),\n userLazyElements: resolveLazyElements(elements),\n userOmittedProps: resolveOmittedProps(elements),\n});\n\nconst enabledFutureFlags = (config: Config): string[] =>\n Object.entries(config.future ?? {})\n .filter(([, value]) => value === true)\n .map(([name]) => name);\n\nconst disabledCodegenResult = (configFile: string): RunCodegenResult => ({\n isRegenerated: false,\n namespaces: 0,\n intrinsicElements: 0,\n duration: 0,\n girPath: [],\n configFile,\n libraries: [],\n});\n\nconst regeneratedStorePaths = (store: CodegenStore): string[] => {\n if (store.react === null) {\n return [store.giStoreDir, store.giLinkDir];\n }\n\n return [store.giStoreDir, store.giLinkDir, store.jsxStoreDir, store.jsxLinkDir];\n};\n\nconst clearGeneratedStores = (store: CodegenStore): void => {\n removeStores(regeneratedStorePaths(store));\n};\n\nconst resolveLoadedConfig = async (options: RunCodegenOptions, cwd: string): Promise<LoadedConfig> =>\n options.resolved ?? (await loadConfig(cwd, { mode: options.mode }));\n\nconst prepareCodegen = (options: RunCodegenOptions, cwd: string, config: Config): PreparedCodegen => {\n const { girPath, libraries, store } = options.inputs ?? resolveCodegenInputs(cwd, config);\n\n if (girPath.length === 0) {\n throw new Error(GIR_PATH_MISSING_MESSAGE);\n }\n\n const isForced = options.isForced === true || isCodegenStale({ girPath, libraries, store });\n\n return { girPath, libraries, store, isForced };\n};\n\nconst runCodegen = async (options: RunCodegenOptions = {}): Promise<RunCodegenResult> => {\n const cwd = options.cwd ?? process.cwd();\n const { config, configFile } = await resolveLoadedConfig(options, cwd);\n\n if (config.codegen === false) {\n removeShadowingStores(cwd);\n\n return disabledCodegenResult(configFile);\n }\n\n const { girPath, libraries, store, isForced } = prepareCodegen(options, cwd, config);\n\n if (options.isForced) {\n clearGeneratedStores(store);\n }\n\n const result = await runCodegenCore({\n ...codegenOptions({\n store,\n libraries,\n girPath,\n elements: config.elements,\n isByteArrayTyped: config.future?.v2ByteArrays === true,\n }),\n isForced,\n });\n\n return {\n isRegenerated: result.isRegenerated,\n namespaces: result.namespaces,\n intrinsicElements: result.intrinsicElements,\n duration: result.duration,\n girPath,\n configFile,\n libraries,\n future: enabledFutureFlags(config),\n };\n};\n\nconst isCodegenDisabled = async (cwd: string, mode?: string): Promise<boolean> => {\n try {\n const { config } = await loadConfig(cwd, { mode });\n\n return config.codegen === false;\n } catch {\n return false;\n }\n};\n\nconst syncSchemaEnv = (cwd: string): void => {\n emitSchemaEnv(cwd, resolveDataDir(cwd));\n};\n\nconst resolveInputsOrNull = (cwd: string, config: Config): CodegenInputs | null => {\n try {\n return resolveCodegenInputs(cwd, config);\n } catch {\n return null;\n }\n};\n\nconst maybeAnnounceStale = (shouldAnnounce: boolean | undefined, inputs: CodegenInputs | null): void => {\n if (!shouldAnnounce) {\n return;\n }\n\n if (inputs === null || isCodegenStale(inputs)) {\n info(\"generated bindings missing; running codegen...\");\n }\n};\n\nconst getRunOptions = ({ root, mode, inputs, resolved }: RunOptionsInput): RunCodegenOptions => {\n if (inputs === null) {\n return { cwd: root, mode, resolved };\n }\n\n return { cwd: root, mode, inputs, resolved };\n};\n\nconst isPreflightSkipped = (options: EnsureGeneratedOptions): boolean =>\n options.shouldAnnounce === true && process.env.GTKX_DISABLE_PREFLIGHT === \"1\";\n\n/* eslint-disable-next-line unicorn/consistent-boolean-name -- the boolean reports whether codegen ran */\nconst generate = async (context: CodegenContext, options: EnsureGeneratedOptions): Promise<boolean> => {\n syncSchemaEnv(context.root);\n\n if (context.config.codegen === false) {\n removeShadowingStores(context.root);\n\n return false;\n }\n\n const inputs = resolveInputsOrNull(context.root, context.config);\n maybeAnnounceStale(options.shouldAnnounce, inputs);\n const resolved = { config: context.config, configFile: context.configFile };\n const result = await runCodegen(getRunOptions({ root: context.root, mode: options.mode, inputs, resolved }));\n\n return result.isRegenerated;\n};\n\n/* eslint-disable-next-line unicorn/consistent-boolean-name -- the boolean reports whether codegen ran */\nconst ensureGeneratedIn = async (\n context: CodegenContext,\n options: EnsureGeneratedOptions = {},\n): Promise<boolean> => (isPreflightSkipped(options) ? false : generate(context, options));\n\n/* eslint-disable-next-line unicorn/consistent-boolean-name -- the boolean reports whether codegen ran */\nconst ensureGenerated = async (cwd: string, options: EnsureGeneratedOptions = {}): Promise<boolean> =>\n isPreflightSkipped(options) ? false : generate(await resolveCodegenContext(cwd, options.mode), options);\n\nconst resolveConfigWatch = async (\n cwd: string,\n mode?: string,\n): Promise<{ paths: string[]; regenerate: () => Promise<void> }> => {\n const { configFile, root } = await loadConfig(cwd, { mode });\n\n return {\n paths: [resolve(root, configFile)],\n regenerate: async () => {\n await runCodegen({ cwd: root, mode });\n },\n };\n};\n\nexport {\n runCodegen,\n isCodegenDisabled,\n syncSchemaEnv,\n ensureGenerated,\n ensureGeneratedIn,\n resolveConfigWatch,\n type RunCodegenResult,\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"docs.d.ts","sourceRoot":"","sources":["../../src/commands/docs.ts"],"names":[],"mappings":"AAkBA,QAAA,MAAM,IAAI;;;;;;;;;;;;;;;;;EA6ER,CAAC;AA6CH,OAAO,EAAE,IAAI,EAAE,CAAC"}
1
+ {"version":3,"file":"docs.d.ts","sourceRoot":"","sources":["../../src/commands/docs.ts"],"names":[],"mappings":"AAkBA,QAAA,MAAM,IAAI;;;;;;;;;;;;;;;;;EA8ER,CAAC;AA6CH,OAAO,EAAE,IAAI,EAAE,CAAC"}
@@ -57,6 +57,7 @@ const docs = defineCommand({
57
57
  props: builtin.props,
58
58
  omittedProps: mergeOmittedProps(builtin.omittedProps, resolveOmittedProps(config.elements)),
59
59
  isForced: args.force,
60
+ isByteArrayTyped: config.future?.v2ByteArrays === true,
60
61
  });
61
62
  if (!isRegenerated) {
62
63
  info(`docs: pages in ${outDir} are up to date`);
@@ -1 +1 @@
1
- {"version":3,"file":"docs.js","sourceRoot":"","sources":["../../src/commands/docs.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n type ElementProps,\n mergeOmittedProps,\n type OmittedProps,\n readBuiltinElements,\n resolveGirPath,\n resolveLibraries,\n resolveStore,\n} from \"@gtkx/codegen\";\nimport { writeDocs } from \"@gtkx/codegen/internal\";\nimport { loadConfig } from \"@gtkx/config\";\nimport { resolveOmittedProps } from \"@gtkx/config/internal\";\nimport { info } from \"@gtkx/utils\";\nimport { defineCommand } from \"citty\";\nimport { existsSync } from \"node:fs\";\nimport { isAbsolute, relative, resolve, sep } from \"node:path\";\nimport { cwdArg, resolveCwd } from \"../internal/entry-arg.js\";\n\nconst docs = defineCommand({\n meta: {\n name: \"docs\",\n description:\n \"Generate markdown reference pages for the JSX elements of the GIR libraries declared in gtkx.config.ts\",\n },\n args: {\n out: {\n type: \"string\",\n description:\n \"Output directory for the generated markdown pages, below the project root. It must be empty \" +\n \"or hold an earlier `gtkx docs` run, whose pages are replaced\",\n default: \"docs/reference\",\n },\n \"base-path\": {\n type: \"string\",\n description: \"URL base path used for links between generated pages\",\n default: \"/reference\",\n },\n force: {\n type: \"boolean\",\n description:\n \"Regenerate even when the pages are up to date with the GIR libraries, the base path, \" +\n \"and the element props the project configures\",\n default: false,\n },\n ...cwdArg,\n },\n async run({ args }) {\n const cwd = resolveCwd(args);\n const { config } = await loadConfig(cwd);\n\n if (config.codegen === false) {\n throw new Error(\n \"codegen is disabled for this project, so there are no GIR libraries to document. \" +\n \"Remove `codegen: false` from gtkx.config.ts to use `gtkx docs`.\",\n );\n }\n\n const girPath = resolveGirPath(config.girPath);\n\n if (girPath.length === 0) {\n throw new Error(\n \"No GIR search paths available. Install gobject-introspection \" +\n \"(Linux: `sudo dnf install gobject-introspection-devel` or \" +\n \"`sudo apt install libgirepository1.0-dev`), or set `girPath` in gtkx.config.ts.\",\n );\n }\n\n const libraries = resolveLibraries(config.libraries, girPath);\n const startedAt = Date.now();\n const outDir = resolveOutDir(cwd, args.out);\n const builtin = await resolveDocsElements(cwd);\n\n const { isRegenerated, namespaces } = writeDocs({\n libraries,\n girPath,\n outDir,\n basePath: args[\"base-path\"],\n props: builtin.props,\n omittedProps: mergeOmittedProps(builtin.omittedProps, resolveOmittedProps(config.elements)),\n isForced: args.force,\n });\n\n if (!isRegenerated) {\n info(`docs: pages in ${outDir} are up to date`);\n\n return;\n }\n\n const count = namespaces.reduce((total, namespace) => total + namespace.elements.length, 0);\n\n info(\n `docs: wrote ${String(count)} element pages across ${String(namespaces.length)} namespaces ` +\n `to ${outDir} in ${String(Date.now() - startedAt)}ms`,\n );\n },\n});\n\nconst isBelow = (parent: string, child: string): boolean => {\n const path = relative(parent, child);\n\n return path !== \"\" && path !== \"..\" && !path.startsWith(`..${sep}`) && !isAbsolute(path);\n};\n\nconst outDirReason = (cwd: string, out: string, outDir: string): string => {\n if (out.trim() === \"\") {\n return \"it was empty, which names the project root itself\";\n }\n\n if (outDir === cwd) {\n return \"it names the project root itself\";\n }\n\n return `${outDir} is outside it`;\n};\n\nconst resolveOutDir = (cwd: string, out: string): string => {\n const outDir = out.trim() === \"\" ? cwd : resolve(cwd, out);\n\n if (isBelow(cwd, outDir)) {\n return outDir;\n }\n\n throw new Error(\n `--out must name a directory below the project root ${cwd}, and ${outDirReason(cwd, out, outDir)}. ` +\n \"Pass a path such as --out=docs/reference.\",\n );\n};\n\nconst resolveDocsElements = async (cwd: string): Promise<{ props: ElementProps; omittedProps: OmittedProps }> => {\n const { gi, reactSubexports } = resolveStore(cwd);\n\n if (!existsSync(gi.storeDir)) {\n return { props: {}, omittedProps: {} };\n }\n\n const { props, omittedProps } = await readBuiltinElements(reactSubexports, gi.storeDir);\n\n return { props, omittedProps };\n};\n\nexport { docs };\n"]}
1
+ {"version":3,"file":"docs.js","sourceRoot":"","sources":["../../src/commands/docs.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n type ElementProps,\n mergeOmittedProps,\n type OmittedProps,\n readBuiltinElements,\n resolveGirPath,\n resolveLibraries,\n resolveStore,\n} from \"@gtkx/codegen\";\nimport { writeDocs } from \"@gtkx/codegen/internal\";\nimport { loadConfig } from \"@gtkx/config\";\nimport { resolveOmittedProps } from \"@gtkx/config/internal\";\nimport { info } from \"@gtkx/utils\";\nimport { defineCommand } from \"citty\";\nimport { existsSync } from \"node:fs\";\nimport { isAbsolute, relative, resolve, sep } from \"node:path\";\nimport { cwdArg, resolveCwd } from \"../internal/entry-arg.js\";\n\nconst docs = defineCommand({\n meta: {\n name: \"docs\",\n description:\n \"Generate markdown reference pages for the JSX elements of the GIR libraries declared in gtkx.config.ts\",\n },\n args: {\n out: {\n type: \"string\",\n description:\n \"Output directory for the generated markdown pages, below the project root. It must be empty \" +\n \"or hold an earlier `gtkx docs` run, whose pages are replaced\",\n default: \"docs/reference\",\n },\n \"base-path\": {\n type: \"string\",\n description: \"URL base path used for links between generated pages\",\n default: \"/reference\",\n },\n force: {\n type: \"boolean\",\n description:\n \"Regenerate even when the pages are up to date with the GIR libraries, the base path, \" +\n \"and the element props the project configures\",\n default: false,\n },\n ...cwdArg,\n },\n async run({ args }) {\n const cwd = resolveCwd(args);\n const { config } = await loadConfig(cwd);\n\n if (config.codegen === false) {\n throw new Error(\n \"codegen is disabled for this project, so there are no GIR libraries to document. \" +\n \"Remove `codegen: false` from gtkx.config.ts to use `gtkx docs`.\",\n );\n }\n\n const girPath = resolveGirPath(config.girPath);\n\n if (girPath.length === 0) {\n throw new Error(\n \"No GIR search paths available. Install gobject-introspection \" +\n \"(Linux: `sudo dnf install gobject-introspection-devel` or \" +\n \"`sudo apt install libgirepository1.0-dev`), or set `girPath` in gtkx.config.ts.\",\n );\n }\n\n const libraries = resolveLibraries(config.libraries, girPath);\n const startedAt = Date.now();\n const outDir = resolveOutDir(cwd, args.out);\n const builtin = await resolveDocsElements(cwd);\n\n const { isRegenerated, namespaces } = writeDocs({\n libraries,\n girPath,\n outDir,\n basePath: args[\"base-path\"],\n props: builtin.props,\n omittedProps: mergeOmittedProps(builtin.omittedProps, resolveOmittedProps(config.elements)),\n isForced: args.force,\n isByteArrayTyped: config.future?.v2ByteArrays === true,\n });\n\n if (!isRegenerated) {\n info(`docs: pages in ${outDir} are up to date`);\n\n return;\n }\n\n const count = namespaces.reduce((total, namespace) => total + namespace.elements.length, 0);\n\n info(\n `docs: wrote ${String(count)} element pages across ${String(namespaces.length)} namespaces ` +\n `to ${outDir} in ${String(Date.now() - startedAt)}ms`,\n );\n },\n});\n\nconst isBelow = (parent: string, child: string): boolean => {\n const path = relative(parent, child);\n\n return path !== \"\" && path !== \"..\" && !path.startsWith(`..${sep}`) && !isAbsolute(path);\n};\n\nconst outDirReason = (cwd: string, out: string, outDir: string): string => {\n if (out.trim() === \"\") {\n return \"it was empty, which names the project root itself\";\n }\n\n if (outDir === cwd) {\n return \"it names the project root itself\";\n }\n\n return `${outDir} is outside it`;\n};\n\nconst resolveOutDir = (cwd: string, out: string): string => {\n const outDir = out.trim() === \"\" ? cwd : resolve(cwd, out);\n\n if (isBelow(cwd, outDir)) {\n return outDir;\n }\n\n throw new Error(\n `--out must name a directory below the project root ${cwd}, and ${outDirReason(cwd, out, outDir)}. ` +\n \"Pass a path such as --out=docs/reference.\",\n );\n};\n\nconst resolveDocsElements = async (cwd: string): Promise<{ props: ElementProps; omittedProps: OmittedProps }> => {\n const { gi, reactSubexports } = resolveStore(cwd);\n\n if (!existsSync(gi.storeDir)) {\n return { props: {}, omittedProps: {} };\n }\n\n const { props, omittedProps } = await readBuiltinElements(reactSubexports, gi.storeDir);\n\n return { props, omittedProps };\n};\n\nexport { docs };\n"]}
@@ -1,4 +1,4 @@
1
- import type { DeploySettings } from "../types.js";
2
- declare const renderCopyright: (settings: DeploySettings) => string;
1
+ import type { DeploySettings, NoticeSection } from "../types.js";
2
+ declare const renderCopyright: (settings: DeploySettings, sections: NoticeSection[]) => string;
3
3
  export { renderCopyright };
4
4
  //# sourceMappingURL=copyright.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"copyright.d.ts","sourceRoot":"","sources":["../../../src/deploy/freedesktop/copyright.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AA4BlD,QAAA,MAAM,eAAe,GAAI,UAAU,cAAc,KAAG,MASpC,CAAC;AAEjB,OAAO,EAAE,eAAe,EAAE,CAAC"}
1
+ {"version":3,"file":"copyright.d.ts","sourceRoot":"","sources":["../../../src/deploy/freedesktop/copyright.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAU,aAAa,EAAE,MAAM,aAAa,CAAC;AA+JzE,QAAA,MAAM,eAAe,GAAI,UAAU,cAAc,EAAE,UAAU,aAAa,EAAE,KAAG,MAa9E,CAAC;AAEF,OAAO,EAAE,eAAe,EAAE,CAAC"}
@@ -1,33 +1,124 @@
1
1
  import { readFileSync } from "node:fs";
2
+ import { BUNDLE_FILENAME } from "../../vite-plugins/esm-extension.js";
2
3
  const FORMAT_URL = "https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/";
3
4
  const CONTINUATION_BLANK = " .";
4
- const indentLicenseBody = (body) => body
5
- .split("\n")
6
- .map((line) => (line.trim().length === 0 ? CONTINUATION_BLANK : ` ${line}`));
7
- const licenseBody = (licenseFile) => {
5
+ const UNKNOWN_COPYRIGHT = "unknown";
6
+ const UNKNOWN_LICENSE = "unknown";
7
+ const LICENSE_SEPARATOR = " and ";
8
+ const SPDX_GROUPING = /[()]/g;
9
+ const SPDX_OPERATOR = /\b(?:AND|OR|WITH)\b/g;
10
+ const REPEATED_SPACE = / {2,}/g;
11
+ const OUTSIDE_NAME = /[^\w.+-]+/g;
12
+ const NAME_JOINER = "-";
13
+ const NAME_TOKEN = /^[\w.+-]+$/;
14
+ const NAME_CONNECTIVE = / (?:or|with) /;
15
+ const indentLine = (line) => (line.trim().length === 0 ? CONTINUATION_BLANK : ` ${line}`);
16
+ const foldedField = (name, lines) => {
17
+ const [first, ...rest] = lines;
18
+ return first === undefined ? [] : [`${name}: ${first}`, ...rest.map((line) => indentLine(line))];
19
+ };
20
+ const licenseText = (licenseFile) => {
8
21
  if (licenseFile === null) {
9
- return [];
22
+ return null;
10
23
  }
11
24
  try {
12
- return indentLicenseBody(readFileSync(licenseFile, "utf8").trimEnd());
25
+ return readFileSync(licenseFile, "utf8").trimEnd();
13
26
  }
14
27
  catch {
15
- return [];
28
+ return null;
16
29
  }
17
30
  };
18
- const headerLines = (settings) => [
31
+ const shortName = (license) => license
32
+ .replaceAll(SPDX_GROUPING, " ")
33
+ .replaceAll(SPDX_OPERATOR, (operator) => operator.toLowerCase())
34
+ .replaceAll(REPEATED_SPACE, " ")
35
+ .trim();
36
+ const isShortName = (part) => part.split(NAME_CONNECTIVE).every((token) => NAME_TOKEN.test(token));
37
+ const namePart = (part) => isShortName(part) ? part : part.split(OUTSIDE_NAME).filter((token) => token.length > 0).join(NAME_JOINER);
38
+ const shortNames = (license) => shortName(license).split(LICENSE_SEPARATOR).map((part) => namePart(part)).filter((part) => part.length > 0);
39
+ const licenseNames = (notices) => {
40
+ const names = [...new Set(notices.flatMap((notice) => shortNames(notice.license)))];
41
+ return names.length === 0 ? UNKNOWN_LICENSE : names.join(LICENSE_SEPARATOR);
42
+ };
43
+ const compactNotice = (notice) => {
44
+ const label = `${notice.subject} (${licenseNames([notice])})`;
45
+ return notice.source === null ? label : `${label}: ${notice.source}`;
46
+ };
47
+ const noticeBody = (notice, reproduced) => {
48
+ const head = [
49
+ "",
50
+ `${notice.subject} (${licenseNames([notice])})`,
51
+ ...(notice.source === null ? [] : [`Source: ${notice.source}`]),
52
+ ];
53
+ if (notice.text === null || reproduced.has(notice.text)) {
54
+ return head;
55
+ }
56
+ reproduced.add(notice.text);
57
+ return [...head, "", ...notice.text.split("\n")];
58
+ };
59
+ const copyrightNames = (notices) => {
60
+ const lines = [...new Set(notices.flatMap((notice) => notice.copyright))];
61
+ return lines.length === 0 ? [UNKNOWN_COPYRIGHT] : lines;
62
+ };
63
+ const stanzaComment = (sections) => sections.flatMap((section, index) => [...(index === 0 ? [] : [""]), section.title, ...section.summary]);
64
+ const sectionComment = (section) => [
65
+ section.title,
66
+ "",
67
+ ...section.summary,
68
+ "",
69
+ ...section.notices.map((notice) => compactNotice(notice)),
70
+ ];
71
+ const bundlePath = (settings) => `lib/${settings.binaryName}/${BUNDLE_FILENAME}`;
72
+ const applicationNotice = (settings) => ({
73
+ subject: settings.name,
74
+ license: settings.license,
75
+ source: settings.homepage,
76
+ copyright: [settings.copyright],
77
+ text: null,
78
+ });
79
+ const stanzaNotices = (settings, files, sections) => {
80
+ const own = files === bundlePath(settings) ? [applicationNotice(settings)] : [];
81
+ return [...own, ...sections.flatMap((section) => section.notices)];
82
+ };
83
+ const fileStanza = ({ settings, files, sections, reproduced }) => {
84
+ const notices = stanzaNotices(settings, files, sections);
85
+ const texts = notices.flatMap((notice) => noticeBody(notice, reproduced));
86
+ return [
87
+ `Files: ${files}`,
88
+ ...foldedField("Comment", stanzaComment(sections)),
89
+ ...foldedField("Copyright", copyrightNames(notices)),
90
+ ...foldedField("License", [licenseNames(notices), ...texts]),
91
+ "",
92
+ ];
93
+ };
94
+ const filePatterns = (sections) => [...new Set(sections.flatMap((section) => section.files))];
95
+ const sectionsFor = (sections, files) => sections.filter((section) => section.files.includes(files));
96
+ const headerComment = (sections) => sections.filter((section) => section.files.length === 0).flatMap((section) => sectionComment(section));
97
+ const headerLines = (settings, sections) => [
19
98
  `Format: ${FORMAT_URL}`,
20
99
  `Upstream-Name: ${settings.name}`,
21
100
  ...(settings.homepage === null ? [] : [`Source: ${settings.homepage}`]),
101
+ ...foldedField("Comment", headerComment(sections)),
22
102
  ];
23
- const renderCopyright = (settings) => [
24
- ...headerLines(settings),
25
- "",
103
+ const applicationStanza = (settings, text) => [
26
104
  "Files: *",
27
105
  `Copyright: ${settings.copyright}`,
28
- `License: ${settings.license}`,
29
- ...licenseBody(settings.paths.licenseFile),
106
+ ...foldedField("License", [
107
+ licenseNames([applicationNotice(settings)]),
108
+ ...(text === null ? [] : text.split("\n")),
109
+ ]),
30
110
  "",
31
- ].join("\n");
111
+ ];
112
+ const renderCopyright = (settings, sections) => {
113
+ const own = licenseText(settings.paths.licenseFile);
114
+ const reproduced = new Set(own === null ? [] : [own]);
115
+ const stanzas = filePatterns(sections).flatMap((files) => fileStanza({ settings, files, sections: sectionsFor(sections, files), reproduced }));
116
+ return [
117
+ ...headerLines(settings, sections),
118
+ "",
119
+ ...applicationStanza(settings, own),
120
+ ...stanzas,
121
+ ].join("\n");
122
+ };
32
123
  export { renderCopyright };
33
124
  //# sourceMappingURL=copyright.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"copyright.js","sourceRoot":"","sources":["../../../src/deploy/freedesktop/copyright.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAGvC,MAAM,UAAU,GAAG,oEAAoE,CAAC;AACxF,MAAM,kBAAkB,GAAG,IAAI,CAAC;AAEhC,MAAM,iBAAiB,GAAG,CAAC,IAAY,EAAY,EAAE,CACjD,IAAI;KACC,KAAK,CAAC,IAAI,CAAC;KACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC;AAErF,MAAM,WAAW,GAAG,CAAC,WAA0B,EAAY,EAAE;IACzD,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;QACvB,OAAO,EAAE,CAAC;IACd,CAAC;IAED,IAAI,CAAC;QACD,OAAO,iBAAiB,CAAC,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;IAC1E,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,EAAE,CAAC;IACd,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,CAAC,QAAwB,EAAY,EAAE,CAAC;IACxD,WAAW,UAAU,EAAE;IACvB,kBAAkB,QAAQ,CAAC,IAAI,EAAE;IACjC,GAAG,CAAC,QAAQ,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,WAAW,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC;CAC1E,CAAC;AAEF,MAAM,eAAe,GAAG,CAAC,QAAwB,EAAU,EAAE,CACzD;IACI,GAAG,WAAW,CAAC,QAAQ,CAAC;IACxB,EAAE;IACF,UAAU;IACV,cAAc,QAAQ,CAAC,SAAS,EAAE;IAClC,YAAY,QAAQ,CAAC,OAAO,EAAE;IAC9B,GAAG,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC;IAC1C,EAAE;CACL,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEjB,OAAO,EAAE,eAAe,EAAE,CAAC","sourcesContent":["import { readFileSync } from \"node:fs\";\nimport type { DeploySettings } from \"../types.js\";\n\nconst FORMAT_URL = \"https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/\";\nconst CONTINUATION_BLANK = \" .\";\n\nconst indentLicenseBody = (body: string): string[] =>\n body\n .split(\"\\n\")\n .map((line) => (line.trim().length === 0 ? CONTINUATION_BLANK : ` ${line}`));\n\nconst licenseBody = (licenseFile: string | null): string[] => {\n if (licenseFile === null) {\n return [];\n }\n\n try {\n return indentLicenseBody(readFileSync(licenseFile, \"utf8\").trimEnd());\n } catch {\n return [];\n }\n};\n\nconst headerLines = (settings: DeploySettings): string[] => [\n `Format: ${FORMAT_URL}`,\n `Upstream-Name: ${settings.name}`,\n ...(settings.homepage === null ? [] : [`Source: ${settings.homepage}`]),\n];\n\nconst renderCopyright = (settings: DeploySettings): string =>\n [\n ...headerLines(settings),\n \"\",\n \"Files: *\",\n `Copyright: ${settings.copyright}`,\n `License: ${settings.license}`,\n ...licenseBody(settings.paths.licenseFile),\n \"\",\n ].join(\"\\n\");\n\nexport { renderCopyright };\n"]}
1
+ {"version":3,"file":"copyright.js","sourceRoot":"","sources":["../../../src/deploy/freedesktop/copyright.ts"],"names":[],"mappings":"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","sourcesContent":["import { readFileSync } from \"node:fs\";\nimport type { DeploySettings, Notice, NoticeSection } from \"../types.js\";\nimport { BUNDLE_FILENAME } from \"../../vite-plugins/esm-extension.js\";\n\ntype FileStanza = {\n settings: DeploySettings;\n files: string;\n sections: NoticeSection[];\n reproduced: Set<string>;\n};\n\nconst FORMAT_URL = \"https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/\";\nconst CONTINUATION_BLANK = \" .\";\nconst UNKNOWN_COPYRIGHT = \"unknown\";\nconst UNKNOWN_LICENSE = \"unknown\";\nconst LICENSE_SEPARATOR = \" and \";\nconst SPDX_GROUPING = /[()]/g;\nconst SPDX_OPERATOR = /\\b(?:AND|OR|WITH)\\b/g;\nconst REPEATED_SPACE = / {2,}/g;\nconst OUTSIDE_NAME = /[^\\w.+-]+/g;\nconst NAME_JOINER = \"-\";\nconst NAME_TOKEN = /^[\\w.+-]+$/;\nconst NAME_CONNECTIVE = / (?:or|with) /;\n\nconst indentLine = (line: string): string => (line.trim().length === 0 ? CONTINUATION_BLANK : ` ${line}`);\n\nconst foldedField = (name: string, lines: string[]): string[] => {\n const [first, ...rest] = lines;\n\n return first === undefined ? [] : [`${name}: ${first}`, ...rest.map((line) => indentLine(line))];\n};\n\nconst licenseText = (licenseFile: string | null): string | null => {\n if (licenseFile === null) {\n return null;\n }\n\n try {\n return readFileSync(licenseFile, \"utf8\").trimEnd();\n } catch {\n return null;\n }\n};\n\nconst shortName = (license: string): string =>\n license\n .replaceAll(SPDX_GROUPING, \" \")\n .replaceAll(SPDX_OPERATOR, (operator) => operator.toLowerCase())\n .replaceAll(REPEATED_SPACE, \" \")\n .trim();\n\nconst isShortName = (part: string): boolean =>\n part.split(NAME_CONNECTIVE).every((token) => NAME_TOKEN.test(token));\n\nconst namePart = (part: string): string =>\n isShortName(part) ? part : part.split(OUTSIDE_NAME).filter((token) => token.length > 0).join(NAME_JOINER);\n\nconst shortNames = (license: string): string[] =>\n shortName(license).split(LICENSE_SEPARATOR).map((part) => namePart(part)).filter((part) => part.length > 0);\n\nconst licenseNames = (notices: Notice[]): string => {\n const names = [...new Set(notices.flatMap((notice) => shortNames(notice.license)))];\n\n return names.length === 0 ? UNKNOWN_LICENSE : names.join(LICENSE_SEPARATOR);\n};\n\nconst compactNotice = (notice: Notice): string => {\n const label = `${notice.subject} (${licenseNames([notice])})`;\n\n return notice.source === null ? label : `${label}: ${notice.source}`;\n};\n\nconst noticeBody = (notice: Notice, reproduced: Set<string>): string[] => {\n const head = [\n \"\",\n `${notice.subject} (${licenseNames([notice])})`,\n ...(notice.source === null ? [] : [`Source: ${notice.source}`]),\n ];\n\n if (notice.text === null || reproduced.has(notice.text)) {\n return head;\n }\n\n reproduced.add(notice.text);\n\n return [...head, \"\", ...notice.text.split(\"\\n\")];\n};\n\nconst copyrightNames = (notices: Notice[]): string[] => {\n const lines = [...new Set(notices.flatMap((notice) => notice.copyright))];\n\n return lines.length === 0 ? [UNKNOWN_COPYRIGHT] : lines;\n};\n\nconst stanzaComment = (sections: NoticeSection[]): string[] =>\n sections.flatMap((section, index) => [...(index === 0 ? [] : [\"\"]), section.title, ...section.summary]);\n\nconst sectionComment = (section: NoticeSection): string[] => [\n section.title,\n \"\",\n ...section.summary,\n \"\",\n ...section.notices.map((notice) => compactNotice(notice)),\n];\n\nconst bundlePath = (settings: DeploySettings): string => `lib/${settings.binaryName}/${BUNDLE_FILENAME}`;\n\nconst applicationNotice = (settings: DeploySettings): Notice => ({\n subject: settings.name,\n license: settings.license,\n source: settings.homepage,\n copyright: [settings.copyright],\n text: null,\n});\n\nconst stanzaNotices = (settings: DeploySettings, files: string, sections: NoticeSection[]): Notice[] => {\n const own = files === bundlePath(settings) ? [applicationNotice(settings)] : [];\n\n return [...own, ...sections.flatMap((section) => section.notices)];\n};\n\nconst fileStanza = ({ settings, files, sections, reproduced }: FileStanza): string[] => {\n const notices = stanzaNotices(settings, files, sections);\n const texts = notices.flatMap((notice) => noticeBody(notice, reproduced));\n\n return [\n `Files: ${files}`,\n ...foldedField(\"Comment\", stanzaComment(sections)),\n ...foldedField(\"Copyright\", copyrightNames(notices)),\n ...foldedField(\"License\", [licenseNames(notices), ...texts]),\n \"\",\n ];\n};\n\nconst filePatterns = (sections: NoticeSection[]): string[] =>\n [...new Set(sections.flatMap((section) => section.files))];\n\nconst sectionsFor = (sections: NoticeSection[], files: string): NoticeSection[] =>\n sections.filter((section) => section.files.includes(files));\n\nconst headerComment = (sections: NoticeSection[]): string[] =>\n sections.filter((section) => section.files.length === 0).flatMap((section) => sectionComment(section));\n\nconst headerLines = (settings: DeploySettings, sections: NoticeSection[]): string[] => [\n `Format: ${FORMAT_URL}`,\n `Upstream-Name: ${settings.name}`,\n ...(settings.homepage === null ? [] : [`Source: ${settings.homepage}`]),\n ...foldedField(\"Comment\", headerComment(sections)),\n];\n\nconst applicationStanza = (settings: DeploySettings, text: string | null): string[] => [\n \"Files: *\",\n `Copyright: ${settings.copyright}`,\n ...foldedField(\"License\", [\n licenseNames([applicationNotice(settings)]),\n ...(text === null ? [] : text.split(\"\\n\")),\n ]),\n \"\",\n];\n\nconst renderCopyright = (settings: DeploySettings, sections: NoticeSection[]): string => {\n const own = licenseText(settings.paths.licenseFile);\n const reproduced: Set<string> = new Set(own === null ? [] : [own]);\n\n const stanzas = filePatterns(sections).flatMap((files) =>\n fileStanza({ settings, files, sections: sectionsFor(sections, files), reproduced }));\n\n return [\n ...headerLines(settings, sections),\n \"\",\n ...applicationStanza(settings, own),\n ...stanzas,\n ].join(\"\\n\");\n};\n\nexport { renderCopyright };\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"install-hints.d.ts","sourceRoot":"","sources":["../../src/deploy/install-hints.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AA0FhD,QAAA,MAAM,mBAAmB,QAAO,aAK/B,CAAC;AAEF,QAAA,MAAM,YAAY,GAAI,MAAM,MAAM,EAAE,QAAQ,aAAa,KAAG,MAAM,EAOjE,CAAC;AAEF,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,CAAC"}
1
+ {"version":3,"file":"install-hints.d.ts","sourceRoot":"","sources":["../../src/deploy/install-hints.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AA8FhD,QAAA,MAAM,mBAAmB,QAAO,aAK/B,CAAC;AAEF,QAAA,MAAM,YAAY,GAAI,MAAM,MAAM,EAAE,QAAQ,aAAa,KAAG,MAAM,EAMjE,CAAC;AAEF,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,CAAC"}
@@ -39,9 +39,13 @@ const PACKAGE_FOR_TOOL = {
39
39
  strip: { arch: "binutils", debian: "binutils", fedora: "binutils", suse: "binutils" },
40
40
  tar: { arch: "tar", debian: "tar", fedora: "tar", suse: "tar" },
41
41
  };
42
+ const GENERATOR_SOURCE = "git+https://github.com/flatpak/flatpak-builder-tools.git#subdirectory=node";
42
43
  const EXTRA_HINTS = {
43
- "flatpak-builder": "or: flatpak install --user -y flathub org.flatpak.Builder",
44
- "flatpak-node-generator": "pipx install git+https://github.com/flatpak/flatpak-builder-tools.git#subdirectory=node",
44
+ "flatpak-builder": ["or: flatpak install --user -y flathub org.flatpak.Builder"],
45
+ "flatpak-node-generator": [
46
+ `pipx install ${GENERATOR_SOURCE}`,
47
+ `or, when the installed copy is too old to vendor pnpm: pipx install --force ${GENERATOR_SOURCE}`,
48
+ ],
45
49
  };
46
50
  const unquote = (value) => QUOTED.exec(value)?.[1] ?? value;
47
51
  const readOsReleaseText = () => {
@@ -77,9 +81,8 @@ const detectPackageFamily = () => {
77
81
  const installHints = (tool, family) => {
78
82
  const packageName = PACKAGE_FOR_TOOL[tool]?.[family];
79
83
  const command = INSTALL_COMMAND[family];
80
- const extra = EXTRA_HINTS[tool];
81
84
  const install = packageName !== undefined && command !== undefined ? [`${command} ${packageName}`] : [];
82
- return extra === undefined ? install : [...install, extra];
85
+ return [...install, ...(EXTRA_HINTS[tool] ?? [])];
83
86
  };
84
87
  export { detectPackageFamily, installHints };
85
88
  //# sourceMappingURL=install-hints.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"install-hints.js","sourceRoot":"","sources":["../../src/deploy/install-hints.ts"],"names":[],"mappings":"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","sourcesContent":["import { readFileSync } from \"node:fs\";\nimport type { PackageFamily } from \"./types.js\";\n\ntype FamilyPackages = Partial<Record<PackageFamily, string>>;\n\nconst OS_RELEASE_PATH = \"/etc/os-release\";\nconst OS_RELEASE_LINE = /^(?<key>[A-Z_]+)=(?<value>.*)$/;\nconst QUOTED = /^\"(.*)\"$/;\n\nconst FAMILY_BY_ID: Record<string, PackageFamily> = {\n arch: \"arch\",\n debian: \"debian\",\n fedora: \"fedora\",\n manjaro: \"arch\",\n opensuse: \"suse\",\n \"opensuse-leap\": \"suse\",\n \"opensuse-tumbleweed\": \"suse\",\n rhel: \"fedora\",\n sles: \"suse\",\n suse: \"suse\",\n ubuntu: \"debian\",\n};\n\nconst INSTALL_COMMAND: Partial<Record<PackageFamily, string>> = {\n arch: \"sudo pacman -S\",\n debian: \"sudo apt install\",\n fedora: \"sudo dnf install\",\n suse: \"sudo zypper install\",\n};\n\nconst PACKAGE_FOR_TOOL: Record<string, FamilyPackages> = {\n appstreamcli: { arch: \"appstream\", debian: \"appstream\", fedora: \"appstream\", suse: \"AppStream\" },\n \"desktop-file-validate\": {\n arch: \"desktop-file-utils\",\n debian: \"desktop-file-utils\",\n fedora: \"desktop-file-utils\",\n suse: \"desktop-file-utils\",\n },\n file: { arch: \"file\", debian: \"file\", fedora: \"file\", suse: \"file\" },\n \"flatpak-builder\": {\n arch: \"flatpak-builder\",\n debian: \"flatpak-builder\",\n fedora: \"flatpak-builder\",\n suse: \"flatpak-builder\",\n },\n strip: { arch: \"binutils\", debian: \"binutils\", fedora: \"binutils\", suse: \"binutils\" },\n tar: { arch: \"tar\", debian: \"tar\", fedora: \"tar\", suse: \"tar\" },\n};\n\nconst EXTRA_HINTS: Record<string, string> = {\n \"flatpak-builder\": \"or: flatpak install --user -y flathub org.flatpak.Builder\",\n \"flatpak-node-generator\":\n \"pipx install git+https://github.com/flatpak/flatpak-builder-tools.git#subdirectory=node\",\n};\n\nconst unquote = (value: string): string => QUOTED.exec(value)?.[1] ?? value;\n\nconst readOsReleaseText = (): string => {\n try {\n return readFileSync(OS_RELEASE_PATH, \"utf8\");\n } catch {\n return \"\";\n }\n};\n\nconst osReleaseEntry = (line: string): [string, string] | null => {\n const match = OS_RELEASE_LINE.exec(line.trim());\n\n return match?.groups ? [match.groups.key ?? \"\", unquote(match.groups.value ?? \"\")] : null;\n};\n\nconst readOsRelease = (): Record<string, string> =>\n Object.fromEntries(\n readOsReleaseText()\n .split(\"\\n\")\n .map((line) => osReleaseEntry(line))\n .filter((entry) => entry !== null),\n );\n\nconst familyForIds = (ids: string[]): PackageFamily => {\n for (const id of ids) {\n const family = FAMILY_BY_ID[id];\n\n if (family !== undefined) {\n return family;\n }\n }\n\n return \"unknown\";\n};\n\nconst detectPackageFamily = (): PackageFamily => {\n const release = readOsRelease();\n const like = (release.ID_LIKE ?? \"\").split(\" \").filter((entry) => entry.length > 0);\n\n return familyForIds([release.ID ?? \"\", ...like]);\n};\n\nconst installHints = (tool: string, family: PackageFamily): string[] => {\n const packageName = PACKAGE_FOR_TOOL[tool]?.[family];\n const command = INSTALL_COMMAND[family];\n const extra = EXTRA_HINTS[tool];\n const install = packageName !== undefined && command !== undefined ? [`${command} ${packageName}`] : [];\n\n return extra === undefined ? install : [...install, extra];\n};\n\nexport { detectPackageFamily, installHints };\n"]}
1
+ {"version":3,"file":"install-hints.js","sourceRoot":"","sources":["../../src/deploy/install-hints.ts"],"names":[],"mappings":"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","sourcesContent":["import { readFileSync } from \"node:fs\";\nimport type { PackageFamily } from \"./types.js\";\n\ntype FamilyPackages = Partial<Record<PackageFamily, string>>;\n\nconst OS_RELEASE_PATH = \"/etc/os-release\";\nconst OS_RELEASE_LINE = /^(?<key>[A-Z_]+)=(?<value>.*)$/;\nconst QUOTED = /^\"(.*)\"$/;\n\nconst FAMILY_BY_ID: Record<string, PackageFamily> = {\n arch: \"arch\",\n debian: \"debian\",\n fedora: \"fedora\",\n manjaro: \"arch\",\n opensuse: \"suse\",\n \"opensuse-leap\": \"suse\",\n \"opensuse-tumbleweed\": \"suse\",\n rhel: \"fedora\",\n sles: \"suse\",\n suse: \"suse\",\n ubuntu: \"debian\",\n};\n\nconst INSTALL_COMMAND: Partial<Record<PackageFamily, string>> = {\n arch: \"sudo pacman -S\",\n debian: \"sudo apt install\",\n fedora: \"sudo dnf install\",\n suse: \"sudo zypper install\",\n};\n\nconst PACKAGE_FOR_TOOL: Record<string, FamilyPackages> = {\n appstreamcli: { arch: \"appstream\", debian: \"appstream\", fedora: \"appstream\", suse: \"AppStream\" },\n \"desktop-file-validate\": {\n arch: \"desktop-file-utils\",\n debian: \"desktop-file-utils\",\n fedora: \"desktop-file-utils\",\n suse: \"desktop-file-utils\",\n },\n file: { arch: \"file\", debian: \"file\", fedora: \"file\", suse: \"file\" },\n \"flatpak-builder\": {\n arch: \"flatpak-builder\",\n debian: \"flatpak-builder\",\n fedora: \"flatpak-builder\",\n suse: \"flatpak-builder\",\n },\n strip: { arch: \"binutils\", debian: \"binutils\", fedora: \"binutils\", suse: \"binutils\" },\n tar: { arch: \"tar\", debian: \"tar\", fedora: \"tar\", suse: \"tar\" },\n};\n\nconst GENERATOR_SOURCE = \"git+https://github.com/flatpak/flatpak-builder-tools.git#subdirectory=node\";\n\nconst EXTRA_HINTS: Record<string, string[]> = {\n \"flatpak-builder\": [\"or: flatpak install --user -y flathub org.flatpak.Builder\"],\n \"flatpak-node-generator\": [\n `pipx install ${GENERATOR_SOURCE}`,\n `or, when the installed copy is too old to vendor pnpm: pipx install --force ${GENERATOR_SOURCE}`,\n ],\n};\n\nconst unquote = (value: string): string => QUOTED.exec(value)?.[1] ?? value;\n\nconst readOsReleaseText = (): string => {\n try {\n return readFileSync(OS_RELEASE_PATH, \"utf8\");\n } catch {\n return \"\";\n }\n};\n\nconst osReleaseEntry = (line: string): [string, string] | null => {\n const match = OS_RELEASE_LINE.exec(line.trim());\n\n return match?.groups ? [match.groups.key ?? \"\", unquote(match.groups.value ?? \"\")] : null;\n};\n\nconst readOsRelease = (): Record<string, string> =>\n Object.fromEntries(\n readOsReleaseText()\n .split(\"\\n\")\n .map((line) => osReleaseEntry(line))\n .filter((entry) => entry !== null),\n );\n\nconst familyForIds = (ids: string[]): PackageFamily => {\n for (const id of ids) {\n const family = FAMILY_BY_ID[id];\n\n if (family !== undefined) {\n return family;\n }\n }\n\n return \"unknown\";\n};\n\nconst detectPackageFamily = (): PackageFamily => {\n const release = readOsRelease();\n const like = (release.ID_LIKE ?? \"\").split(\" \").filter((entry) => entry.length > 0);\n\n return familyForIds([release.ID ?? \"\", ...like]);\n};\n\nconst installHints = (tool: string, family: PackageFamily): string[] => {\n const packageName = PACKAGE_FOR_TOOL[tool]?.[family];\n const command = INSTALL_COMMAND[family];\n const install = packageName !== undefined && command !== undefined ? [`${command} ${packageName}`] : [];\n\n return [...install, ...(EXTRA_HINTS[tool] ?? [])];\n};\n\nexport { detectPackageFamily, installHints };\n"]}
@@ -1,3 +1,7 @@
1
- declare const downloadNode: (version: string, arch: string, destDir: string) => Promise<string>;
1
+ type DownloadedNode = {
2
+ path: string;
3
+ licenseFile: string;
4
+ };
5
+ declare const downloadNode: (version: string, arch: string, destDir: string) => Promise<DownloadedNode>;
2
6
  export { downloadNode };
3
7
  //# sourceMappingURL=download.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"download.d.ts","sourceRoot":"","sources":["../../../src/deploy/node-runtime/download.ts"],"names":[],"mappings":"AA4BA,QAAA,MAAM,YAAY,GAAU,SAAS,MAAM,EAAE,MAAM,MAAM,EAAE,SAAS,MAAM,KAAG,OAAO,CAAC,MAAM,CAiB1F,CAAC;AAEF,OAAO,EAAE,YAAY,EAAE,CAAC"}
1
+ {"version":3,"file":"download.d.ts","sourceRoot":"","sources":["../../../src/deploy/node-runtime/download.ts"],"names":[],"mappings":"AAOA,KAAK,cAAc,GAAG;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACvB,CAAC;AA2BF,QAAA,MAAM,YAAY,GAAU,SAAS,MAAM,EAAE,MAAM,MAAM,EAAE,SAAS,MAAM,KAAG,OAAO,CAAC,cAAc,CAiBlG,CAAC;AAEF,OAAO,EAAE,YAAY,EAAE,CAAC"}
@@ -2,9 +2,11 @@ import { mkdirSync } from "node:fs";
2
2
  import { join } from "node:path";
3
3
  import { runCliTool } from "../../internal/run-cli-tool.js";
4
4
  import { cachedDigest, cacheDir, downloadFile, publishedDigest } from "../download.js";
5
+ import { LICENSE_FILENAME } from "./license.js";
5
6
  const DIST_BASE_URL = "https://nodejs.org/dist";
6
- const STRIP_COMPONENTS = "2";
7
+ const STRIP_COMPONENTS = "1";
7
8
  const CHECKSUMS_FILE = "SHASUMS256.txt";
9
+ const NODE_PATH = "bin/node";
8
10
  const releaseName = (version, arch) => `node-v${version}-linux-${arch}`;
9
11
  const digestRequest = (version, assetName, dir) => ({
10
12
  url: `${DIST_BASE_URL}/v${version}/${CHECKSUMS_FILE}`,
@@ -13,10 +15,11 @@ const digestRequest = (version, assetName, dir) => ({
13
15
  subject: `Node.js ${version}`,
14
16
  });
15
17
  const extractNode = (archive, dir, version, arch) => {
18
+ const release = releaseName(version, arch);
16
19
  runCliTool({
17
20
  tool: "tar",
18
21
  args: ["-xJf", archive, "-C", dir, "--strip-components", STRIP_COMPONENTS,
19
- `${releaseName(version, arch)}/bin/node`],
22
+ `${release}/${NODE_PATH}`, `${release}/${LICENSE_FILENAME}`],
20
23
  target: `Node.js ${version}`,
21
24
  });
22
25
  };
@@ -33,7 +36,7 @@ const downloadNode = async (version, arch, destDir) => {
33
36
  });
34
37
  mkdirSync(destDir, { recursive: true });
35
38
  extractNode(archive, destDir, version, arch);
36
- return join(destDir, "node");
39
+ return { path: join(destDir, NODE_PATH), licenseFile: join(destDir, LICENSE_FILENAME) };
37
40
  };
38
41
  export { downloadNode };
39
42
  //# sourceMappingURL=download.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"download.js","sourceRoot":"","sources":["../../../src/deploy/node-runtime/download.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEvF,MAAM,aAAa,GAAG,yBAAyB,CAAC;AAChD,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAC7B,MAAM,cAAc,GAAG,gBAAgB,CAAC;AAExC,MAAM,WAAW,GAAG,CAAC,OAAe,EAAE,IAAY,EAAU,EAAE,CAAC,SAAS,OAAO,UAAU,IAAI,EAAE,CAAC;AAEhG,MAAM,aAAa,GAAG,CAAC,OAAe,EAAE,SAAiB,EAAE,GAAW,EAAiB,EAAE,CAAC,CAAC;IACvF,GAAG,EAAE,GAAG,aAAa,KAAK,OAAO,IAAI,cAAc,EAAE;IACrD,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,SAAS,CAAC;IACtC,SAAS;IACT,OAAO,EAAE,WAAW,OAAO,EAAE;CAChC,CAAC,CAAC;AAEH,MAAM,WAAW,GAAG,CAAC,OAAe,EAAE,GAAW,EAAE,OAAe,EAAE,IAAY,EAAQ,EAAE;IACtF,UAAU,CAAC;QACP,IAAI,EAAE,KAAK;QACX,IAAI,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,oBAAoB,EAAE,gBAAgB;YACrE,GAAG,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC;QAC7C,MAAM,EAAE,WAAW,OAAO,EAAE;KAC/B,CAAC,CAAC;AACP,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,KAAK,EAAE,OAAe,EAAE,IAAY,EAAE,OAAe,EAAmB,EAAE;IAC3F,MAAM,SAAS,GAAG,GAAG,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC;IACzD,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,MAAM,EAAE,GAAG,OAAO,UAAU,IAAI,EAAE,CAAC,CAAC,CAAC;IAC3D,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC;IAEvD,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC;QAC/B,GAAG,EAAE,GAAG,aAAa,KAAK,OAAO,IAAI,SAAS,EAAE;QAChD,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC;QAC1B,KAAK,EAAE,WAAW,OAAO,cAAc,IAAI,EAAE;QAC7C,MAAM,EAAE,MAAM,YAAY,CAAC,OAAO,CAAC;QACnC,WAAW,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC,OAAO,CAAC;KAC9C,CAAC,CAAC;IAEH,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACxC,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IAE7C,OAAO,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;AACjC,CAAC,CAAC;AAEF,OAAO,EAAE,YAAY,EAAE,CAAC","sourcesContent":["import { mkdirSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport type { DigestRequest } from \"../download.js\";\nimport { runCliTool } from \"../../internal/run-cli-tool.js\";\nimport { cachedDigest, cacheDir, downloadFile, publishedDigest } from \"../download.js\";\n\nconst DIST_BASE_URL = \"https://nodejs.org/dist\";\nconst STRIP_COMPONENTS = \"2\";\nconst CHECKSUMS_FILE = \"SHASUMS256.txt\";\n\nconst releaseName = (version: string, arch: string): string => `node-v${version}-linux-${arch}`;\n\nconst digestRequest = (version: string, assetName: string, dir: string): DigestRequest => ({\n url: `${DIST_BASE_URL}/v${version}/${CHECKSUMS_FILE}`,\n dest: join(dir, `${assetName}.sha256`),\n assetName,\n subject: `Node.js ${version}`,\n});\n\nconst extractNode = (archive: string, dir: string, version: string, arch: string): void => {\n runCliTool({\n tool: \"tar\",\n args: [\"-xJf\", archive, \"-C\", dir, \"--strip-components\", STRIP_COMPONENTS,\n `${releaseName(version, arch)}/bin/node`],\n target: `Node.js ${version}`,\n });\n};\n\nconst downloadNode = async (version: string, arch: string, destDir: string): Promise<string> => {\n const assetName = `${releaseName(version, arch)}.tar.xz`;\n const dir = cacheDir([\"node\", `${version}-linux-${arch}`]);\n const request = digestRequest(version, assetName, dir);\n\n const archive = await downloadFile({\n url: `${DIST_BASE_URL}/v${version}/${assetName}`,\n dest: join(dir, assetName),\n label: `Node.js ${version} for linux-${arch}`,\n sha256: await cachedDigest(request),\n freshSha256: () => publishedDigest(request),\n });\n\n mkdirSync(destDir, { recursive: true });\n extractNode(archive, destDir, version, arch);\n\n return join(destDir, \"node\");\n};\n\nexport { downloadNode };\n"]}
1
+ {"version":3,"file":"download.js","sourceRoot":"","sources":["../../../src/deploy/node-runtime/download.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACvF,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAOhD,MAAM,aAAa,GAAG,yBAAyB,CAAC;AAChD,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAC7B,MAAM,cAAc,GAAG,gBAAgB,CAAC;AACxC,MAAM,SAAS,GAAG,UAAU,CAAC;AAE7B,MAAM,WAAW,GAAG,CAAC,OAAe,EAAE,IAAY,EAAU,EAAE,CAAC,SAAS,OAAO,UAAU,IAAI,EAAE,CAAC;AAEhG,MAAM,aAAa,GAAG,CAAC,OAAe,EAAE,SAAiB,EAAE,GAAW,EAAiB,EAAE,CAAC,CAAC;IACvF,GAAG,EAAE,GAAG,aAAa,KAAK,OAAO,IAAI,cAAc,EAAE;IACrD,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,SAAS,CAAC;IACtC,SAAS;IACT,OAAO,EAAE,WAAW,OAAO,EAAE;CAChC,CAAC,CAAC;AAEH,MAAM,WAAW,GAAG,CAAC,OAAe,EAAE,GAAW,EAAE,OAAe,EAAE,IAAY,EAAQ,EAAE;IACtF,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAE3C,UAAU,CAAC;QACP,IAAI,EAAE,KAAK;QACX,IAAI,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,oBAAoB,EAAE,gBAAgB;YACrE,GAAG,OAAO,IAAI,SAAS,EAAE,EAAE,GAAG,OAAO,IAAI,gBAAgB,EAAE,CAAC;QAChE,MAAM,EAAE,WAAW,OAAO,EAAE;KAC/B,CAAC,CAAC;AACP,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,KAAK,EAAE,OAAe,EAAE,IAAY,EAAE,OAAe,EAA2B,EAAE;IACnG,MAAM,SAAS,GAAG,GAAG,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC;IACzD,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,MAAM,EAAE,GAAG,OAAO,UAAU,IAAI,EAAE,CAAC,CAAC,CAAC;IAC3D,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC;IAEvD,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC;QAC/B,GAAG,EAAE,GAAG,aAAa,KAAK,OAAO,IAAI,SAAS,EAAE;QAChD,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC;QAC1B,KAAK,EAAE,WAAW,OAAO,cAAc,IAAI,EAAE;QAC7C,MAAM,EAAE,MAAM,YAAY,CAAC,OAAO,CAAC;QACnC,WAAW,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC,OAAO,CAAC;KAC9C,CAAC,CAAC;IAEH,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACxC,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IAE7C,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,OAAO,EAAE,gBAAgB,CAAC,EAAE,CAAC;AAC5F,CAAC,CAAC;AAEF,OAAO,EAAE,YAAY,EAAE,CAAC","sourcesContent":["import { mkdirSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport type { DigestRequest } from \"../download.js\";\nimport { runCliTool } from \"../../internal/run-cli-tool.js\";\nimport { cachedDigest, cacheDir, downloadFile, publishedDigest } from \"../download.js\";\nimport { LICENSE_FILENAME } from \"./license.js\";\n\ntype DownloadedNode = {\n path: string;\n licenseFile: string;\n};\n\nconst DIST_BASE_URL = \"https://nodejs.org/dist\";\nconst STRIP_COMPONENTS = \"1\";\nconst CHECKSUMS_FILE = \"SHASUMS256.txt\";\nconst NODE_PATH = \"bin/node\";\n\nconst releaseName = (version: string, arch: string): string => `node-v${version}-linux-${arch}`;\n\nconst digestRequest = (version: string, assetName: string, dir: string): DigestRequest => ({\n url: `${DIST_BASE_URL}/v${version}/${CHECKSUMS_FILE}`,\n dest: join(dir, `${assetName}.sha256`),\n assetName,\n subject: `Node.js ${version}`,\n});\n\nconst extractNode = (archive: string, dir: string, version: string, arch: string): void => {\n const release = releaseName(version, arch);\n\n runCliTool({\n tool: \"tar\",\n args: [\"-xJf\", archive, \"-C\", dir, \"--strip-components\", STRIP_COMPONENTS,\n `${release}/${NODE_PATH}`, `${release}/${LICENSE_FILENAME}`],\n target: `Node.js ${version}`,\n });\n};\n\nconst downloadNode = async (version: string, arch: string, destDir: string): Promise<DownloadedNode> => {\n const assetName = `${releaseName(version, arch)}.tar.xz`;\n const dir = cacheDir([\"node\", `${version}-linux-${arch}`]);\n const request = digestRequest(version, assetName, dir);\n\n const archive = await downloadFile({\n url: `${DIST_BASE_URL}/v${version}/${assetName}`,\n dest: join(dir, assetName),\n label: `Node.js ${version} for linux-${arch}`,\n sha256: await cachedDigest(request),\n freshSha256: () => publishedDigest(request),\n });\n\n mkdirSync(destDir, { recursive: true });\n extractNode(archive, destDir, version, arch);\n\n return { path: join(destDir, NODE_PATH), licenseFile: join(destDir, LICENSE_FILENAME) };\n};\n\nexport { downloadNode };\n"]}