@gtkx/cli 2.0.0-beta.2 → 2.0.0-beta.4

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 (144) hide show
  1. package/dist/cli.d.ts +1 -1
  2. package/dist/cli.d.ts.map +1 -1
  3. package/dist/cli.js +12 -2
  4. package/dist/cli.js.map +1 -1
  5. package/dist/codegen/config-dependencies.d.ts +3 -0
  6. package/dist/codegen/config-dependencies.d.ts.map +1 -0
  7. package/dist/codegen/config-dependencies.js +355 -0
  8. package/dist/codegen/config-dependencies.js.map +1 -0
  9. package/dist/codegen/reference.d.ts.map +1 -1
  10. package/dist/codegen/reference.js +1 -0
  11. package/dist/codegen/reference.js.map +1 -1
  12. package/dist/codegen/run-codegen.d.ts +3 -2
  13. package/dist/codegen/run-codegen.d.ts.map +1 -1
  14. package/dist/codegen/run-codegen.js +33 -14
  15. package/dist/codegen/run-codegen.js.map +1 -1
  16. package/dist/codegen/store-resolver.d.ts +2 -0
  17. package/dist/codegen/store-resolver.d.ts.map +1 -1
  18. package/dist/codegen/store-resolver.js +6 -3
  19. package/dist/codegen/store-resolver.js.map +1 -1
  20. package/dist/commands/cleanup.d.ts +9 -0
  21. package/dist/commands/cleanup.d.ts.map +1 -0
  22. package/dist/commands/cleanup.js +31 -0
  23. package/dist/commands/cleanup.js.map +1 -0
  24. package/dist/commands/dev.d.ts +1 -0
  25. package/dist/commands/dev.d.ts.map +1 -1
  26. package/dist/commands/dev.js +13 -4
  27. package/dist/commands/dev.js.map +1 -1
  28. package/dist/commands/docs.d.ts.map +1 -1
  29. package/dist/commands/docs.js +1 -0
  30. package/dist/commands/docs.js.map +1 -1
  31. package/dist/deploy/freedesktop/validate.d.ts.map +1 -1
  32. package/dist/deploy/freedesktop/validate.js +11 -4
  33. package/dist/deploy/freedesktop/validate.js.map +1 -1
  34. package/dist/deploy/nfpm/config.d.ts +3 -2
  35. package/dist/deploy/nfpm/config.d.ts.map +1 -1
  36. package/dist/deploy/nfpm/config.js +3 -3
  37. package/dist/deploy/nfpm/config.js.map +1 -1
  38. package/dist/deploy/node-runtime/index.d.ts.map +1 -1
  39. package/dist/deploy/node-runtime/index.js +2 -1
  40. package/dist/deploy/node-runtime/index.js.map +1 -1
  41. package/dist/deploy/payload/stage.d.ts.map +1 -1
  42. package/dist/deploy/payload/stage.js +24 -3
  43. package/dist/deploy/payload/stage.js.map +1 -1
  44. package/dist/deploy/settings/extra-files.d.ts.map +1 -1
  45. package/dist/deploy/settings/extra-files.js +4 -3
  46. package/dist/deploy/settings/extra-files.js.map +1 -1
  47. package/dist/deploy/targets/nfpm-target.d.ts.map +1 -1
  48. package/dist/deploy/targets/nfpm-target.js +12 -7
  49. package/dist/deploy/targets/nfpm-target.js.map +1 -1
  50. package/dist/dev/entry-env.d.ts +2 -1
  51. package/dist/dev/entry-env.d.ts.map +1 -1
  52. package/dist/dev/entry-env.js +2 -1
  53. package/dist/dev/entry-env.js.map +1 -1
  54. package/dist/dev/runner-deps.d.ts +1 -1
  55. package/dist/dev/runner-deps.d.ts.map +1 -1
  56. package/dist/dev/runner-deps.js +3 -3
  57. package/dist/dev/runner-deps.js.map +1 -1
  58. package/dist/dev/runner-main.d.ts.map +1 -1
  59. package/dist/dev/runner-main.js +8 -3
  60. package/dist/dev/runner-main.js.map +1 -1
  61. package/dist/dev/supervisor.d.ts +3 -1
  62. package/dist/dev/supervisor.d.ts.map +1 -1
  63. package/dist/dev/supervisor.js +124 -27
  64. package/dist/dev/supervisor.js.map +1 -1
  65. package/dist/i18n/catalogs.d.ts.map +1 -1
  66. package/dist/i18n/catalogs.js +1 -0
  67. package/dist/i18n/catalogs.js.map +1 -1
  68. package/dist/i18n/source-messages.d.ts +3 -1
  69. package/dist/i18n/source-messages.d.ts.map +1 -1
  70. package/dist/i18n/source-messages.js +167 -37
  71. package/dist/i18n/source-messages.js.map +1 -1
  72. package/dist/internal/build-output.d.ts.map +1 -1
  73. package/dist/internal/build-output.js +53 -6
  74. package/dist/internal/build-output.js.map +1 -1
  75. package/dist/internal/docs-elements.d.ts +1 -0
  76. package/dist/internal/docs-elements.d.ts.map +1 -1
  77. package/dist/internal/docs-elements.js +5 -4
  78. package/dist/internal/docs-elements.js.map +1 -1
  79. package/dist/internal/errors.d.ts +2 -1
  80. package/dist/internal/errors.d.ts.map +1 -1
  81. package/dist/internal/errors.js +1 -1
  82. package/dist/internal/errors.js.map +1 -1
  83. package/dist/internal/parent-process.d.ts +12 -0
  84. package/dist/internal/parent-process.d.ts.map +1 -0
  85. package/dist/internal/parent-process.js +74 -0
  86. package/dist/internal/parent-process.js.map +1 -0
  87. package/dist/internal/prepare-project.d.ts +1 -0
  88. package/dist/internal/prepare-project.d.ts.map +1 -1
  89. package/dist/internal/prepare-project.js +8 -2
  90. package/dist/internal/prepare-project.js.map +1 -1
  91. package/dist/vite-plugins/ensure-store.d.ts +1 -1
  92. package/dist/vite-plugins/ensure-store.d.ts.map +1 -1
  93. package/dist/vite-plugins/ensure-store.js +2 -2
  94. package/dist/vite-plugins/ensure-store.js.map +1 -1
  95. package/dist/vite-plugins/i18n.d.ts +1 -1
  96. package/dist/vite-plugins/i18n.d.ts.map +1 -1
  97. package/dist/vite-plugins/i18n.js +24 -11
  98. package/dist/vite-plugins/i18n.js.map +1 -1
  99. package/dist/vite-plugins/index.d.ts.map +1 -1
  100. package/dist/vite-plugins/index.js +3 -1
  101. package/dist/vite-plugins/index.js.map +1 -1
  102. package/dist/vite-plugins/native.d.ts.map +1 -1
  103. package/dist/vite-plugins/native.js +0 -4
  104. package/dist/vite-plugins/native.js.map +1 -1
  105. package/dist/vite-plugins/settings-worker-env.d.ts +1 -1
  106. package/dist/vite-plugins/settings-worker-env.d.ts.map +1 -1
  107. package/dist/vite-plugins/settings-worker-env.js +2 -2
  108. package/dist/vite-plugins/settings-worker-env.js.map +1 -1
  109. package/dist/vitest-plugin.d.ts +2 -1
  110. package/dist/vitest-plugin.d.ts.map +1 -1
  111. package/dist/vitest-plugin.js +6 -6
  112. package/dist/vitest-plugin.js.map +1 -1
  113. package/package.json +12 -9
  114. package/src/cli.ts +12 -2
  115. package/src/codegen/config-dependencies.ts +470 -0
  116. package/src/codegen/reference.ts +1 -0
  117. package/src/codegen/run-codegen.ts +39 -17
  118. package/src/codegen/store-resolver.ts +8 -3
  119. package/src/commands/cleanup.ts +36 -0
  120. package/src/commands/dev.ts +26 -4
  121. package/src/commands/docs.ts +1 -0
  122. package/src/deploy/freedesktop/validate.ts +13 -4
  123. package/src/deploy/nfpm/config.ts +9 -3
  124. package/src/deploy/node-runtime/index.ts +2 -1
  125. package/src/deploy/payload/stage.ts +42 -3
  126. package/src/deploy/settings/extra-files.ts +5 -3
  127. package/src/deploy/targets/nfpm-target.ts +13 -6
  128. package/src/dev/entry-env.ts +2 -1
  129. package/src/dev/runner-deps.ts +3 -3
  130. package/src/dev/runner-main.ts +10 -3
  131. package/src/dev/supervisor.ts +164 -30
  132. package/src/i18n/catalogs.ts +1 -0
  133. package/src/i18n/source-messages.ts +240 -41
  134. package/src/internal/build-output.ts +79 -7
  135. package/src/internal/docs-elements.ts +10 -4
  136. package/src/internal/errors.ts +1 -1
  137. package/src/internal/parent-process.ts +110 -0
  138. package/src/internal/prepare-project.ts +9 -3
  139. package/src/vite-plugins/ensure-store.ts +2 -2
  140. package/src/vite-plugins/i18n.ts +30 -14
  141. package/src/vite-plugins/index.ts +8 -1
  142. package/src/vite-plugins/native.ts +0 -5
  143. package/src/vite-plugins/settings-worker-env.ts +2 -2
  144. package/src/vitest-plugin.ts +6 -6
@@ -1,6 +1,6 @@
1
1
  import { isPathInside, isRecord } from "@gtkx/utils";
2
2
  import { lstatSync, readdirSync } from "node:fs";
3
- import { join, relative, resolve, sep } from "node:path";
3
+ import { dirname, join, relative, resolve, sep } from "node:path";
4
4
  import { BUILD_MANIFEST_FILENAME, BUILD_MANIFEST_GENERATOR, } from "./build-manifest.js";
5
5
  import { prepareOutputDirectory, readRegularFile, } from "./output-directory.js";
6
6
  const DEFAULT_BUILD_OUT_DIR = "dist";
@@ -33,18 +33,65 @@ const isReusableBuildDirectory = (path) => {
33
33
  }
34
34
  return stats.isDirectory() && (readdirSync(path).length === 0 || isGtkxBuildDirectory(path));
35
35
  };
36
- const buildOutputError = (root) => new Error(`Build output must be an empty directory or an earlier GTKX build below the project root ${root}`);
36
+ const outputName = (root, path) => relative(root, path) || ".";
37
+ const gtkxBuildAncestor = (root, outDir) => {
38
+ let ancestor = dirname(outDir);
39
+ while (isPathInside(root, ancestor)) {
40
+ if (isGtkxBuildDirectory(ancestor)) {
41
+ return ancestor;
42
+ }
43
+ ancestor = dirname(ancestor);
44
+ }
45
+ return null;
46
+ };
47
+ const childDirectories = (parent) => readdirSync(parent, { withFileTypes: true })
48
+ .filter((entry) => entry.isDirectory())
49
+ .map((entry) => join(parent, entry.name));
50
+ const gtkxBuildDescendant = (root) => {
51
+ const pending = childDirectories(root);
52
+ while (pending.length > 0) {
53
+ const path = pending.pop();
54
+ if (path === undefined) {
55
+ return null;
56
+ }
57
+ if (isGtkxBuildDirectory(path)) {
58
+ return path;
59
+ }
60
+ pending.push(...childDirectories(path));
61
+ }
62
+ return null;
63
+ };
37
64
  const assertSafeBuildLocation = (root, outDir) => {
38
- if (!isPathInside(root, outDir) || hasSymlinkComponent(root, outDir)) {
39
- throw buildOutputError(root);
65
+ if (!isPathInside(root, outDir)) {
66
+ throw new Error(`Build output ${outDir} must be below the project root ${root}`);
67
+ }
68
+ if (hasSymlinkComponent(root, outDir)) {
69
+ throw new Error(`Build output ${outputName(root, outDir)} passes through a symbolic link`);
70
+ }
71
+ const ancestor = gtkxBuildAncestor(root, outDir);
72
+ if (ancestor !== null) {
73
+ throw new Error(`Build output ${outputName(root, outDir)} is nested inside the earlier GTKX build ` +
74
+ outputName(root, ancestor));
75
+ }
76
+ };
77
+ const nonReusableBuildOutputError = (root, outDir) => {
78
+ const stats = lstatSync(outDir, { throwIfNoEntry: false });
79
+ if (stats?.isDirectory() !== true) {
80
+ return new Error(`Build output ${outputName(root, outDir)} exists and is not a directory`);
81
+ }
82
+ const descendant = gtkxBuildDescendant(outDir);
83
+ if (descendant !== null) {
84
+ return new Error(`Build output ${outputName(root, outDir)} contains the earlier GTKX build ` +
85
+ outputName(root, descendant));
40
86
  }
87
+ return new Error(`Build output ${outputName(root, outDir)} is nonempty and is not an earlier GTKX build`);
41
88
  };
42
89
  const resolveBuildOutDir = (root, configured) => {
43
90
  const selected = configured ?? DEFAULT_BUILD_OUT_DIR;
44
91
  const outDir = resolve(root, selected);
45
92
  assertSafeBuildLocation(root, outDir);
46
93
  if (!isReusableBuildDirectory(outDir)) {
47
- throw buildOutputError(root);
94
+ throw nonReusableBuildOutputError(root, outDir);
48
95
  }
49
96
  return outDir;
50
97
  };
@@ -52,7 +99,7 @@ const prepareBuildOutDir = (root, outDir) => {
52
99
  assertSafeBuildLocation(root, outDir);
53
100
  const prepared = prepareOutputDirectory(root, outDir, isReusableBuildDirectory);
54
101
  if (prepared.status === "unsafe") {
55
- throw buildOutputError(root);
102
+ throw new Error(`Build output ${outputName(root, outDir)} became unsafe while preparing it`);
56
103
  }
57
104
  const transaction = prepared.transaction;
58
105
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"build-output.js","sourceRoot":"","sources":["../../src/internal/build-output.ts"],"names":[],"mappings":"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","sourcesContent":["import { isPathInside, isRecord } from \"@gtkx/utils\";\nimport { lstatSync, readdirSync } from \"node:fs\";\nimport { join, relative, resolve, sep } from \"node:path\";\nimport {\n BUILD_MANIFEST_FILENAME,\n BUILD_MANIFEST_GENERATOR,\n} from \"./build-manifest.js\";\nimport {\n type OutputDirectoryTransaction,\n prepareOutputDirectory,\n readRegularFile,\n} from \"./output-directory.js\";\n\nconst DEFAULT_BUILD_OUT_DIR = \"dist\";\nconst PRESERVED_BUILD_ENTRIES: ReadonlySet<string> = new Set([\".git\"]);\n\ntype PreparedBuildOutDir = Disposable & { commit: () => void; path: string };\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 isGtkxBuildDirectory = (path: string): boolean => {\n const manifest = join(path, BUILD_MANIFEST_FILENAME);\n const contents = readRegularFile(manifest);\n\n try {\n const parsed: unknown = contents === null ? null : JSON.parse(contents);\n\n return isRecord(parsed) && parsed.generator === BUILD_MANIFEST_GENERATOR;\n } catch {\n return false;\n }\n};\n\nconst isReusableBuildDirectory = (path: string): boolean => {\n const stats = lstatSync(path, { throwIfNoEntry: false });\n\n if (stats === undefined) {\n return true;\n }\n\n return stats.isDirectory() && (readdirSync(path).length === 0 || isGtkxBuildDirectory(path));\n};\n\nconst buildOutputError = (root: string): Error =>\n new Error(`Build output must be an empty directory or an earlier GTKX build below the project root ${root}`);\n\nconst assertSafeBuildLocation = (root: string, outDir: string): void => {\n if (!isPathInside(root, outDir) || hasSymlinkComponent(root, outDir)) {\n throw buildOutputError(root);\n }\n};\n\nconst resolveBuildOutDir = (root: string, configured?: string): string => {\n const selected = configured ?? DEFAULT_BUILD_OUT_DIR;\n const outDir = resolve(root, selected);\n\n assertSafeBuildLocation(root, outDir);\n\n if (!isReusableBuildDirectory(outDir)) {\n throw buildOutputError(root);\n }\n\n return outDir;\n};\n\nconst prepareBuildOutDir = (root: string, outDir: string): PreparedBuildOutDir => {\n assertSafeBuildLocation(root, outDir);\n const prepared = prepareOutputDirectory(root, outDir, isReusableBuildDirectory);\n\n if (prepared.status === \"unsafe\") {\n throw buildOutputError(root);\n }\n\n const transaction: OutputDirectoryTransaction = prepared.transaction;\n\n return {\n path: transaction.path,\n commit: () => {\n transaction.commit(PRESERVED_BUILD_ENTRIES, isGtkxBuildDirectory);\n },\n [Symbol.dispose]: () => {\n transaction[Symbol.dispose]();\n },\n };\n};\n\nexport { prepareBuildOutDir, resolveBuildOutDir };\n"]}
1
+ {"version":3,"file":"build-output.js","sourceRoot":"","sources":["../../src/internal/build-output.ts"],"names":[],"mappings":"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","sourcesContent":["import { isPathInside, isRecord } from \"@gtkx/utils\";\nimport { lstatSync, readdirSync } from \"node:fs\";\nimport { dirname, join, relative, resolve, sep } from \"node:path\";\nimport {\n BUILD_MANIFEST_FILENAME,\n BUILD_MANIFEST_GENERATOR,\n} from \"./build-manifest.js\";\nimport {\n type OutputDirectoryTransaction,\n prepareOutputDirectory,\n readRegularFile,\n} from \"./output-directory.js\";\n\nconst DEFAULT_BUILD_OUT_DIR = \"dist\";\nconst PRESERVED_BUILD_ENTRIES: ReadonlySet<string> = new Set([\".git\"]);\n\ntype PreparedBuildOutDir = Disposable & { commit: () => void; path: string };\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 isGtkxBuildDirectory = (path: string): boolean => {\n const manifest = join(path, BUILD_MANIFEST_FILENAME);\n const contents = readRegularFile(manifest);\n\n try {\n const parsed: unknown = contents === null ? null : JSON.parse(contents);\n\n return isRecord(parsed) && parsed.generator === BUILD_MANIFEST_GENERATOR;\n } catch {\n return false;\n }\n};\n\nconst isReusableBuildDirectory = (path: string): boolean => {\n const stats = lstatSync(path, { throwIfNoEntry: false });\n\n if (stats === undefined) {\n return true;\n }\n\n return stats.isDirectory() && (readdirSync(path).length === 0 || isGtkxBuildDirectory(path));\n};\n\nconst outputName = (root: string, path: string): string => relative(root, path) || \".\";\n\nconst gtkxBuildAncestor = (root: string, outDir: string): string | null => {\n let ancestor = dirname(outDir);\n\n while (isPathInside(root, ancestor)) {\n if (isGtkxBuildDirectory(ancestor)) {\n return ancestor;\n }\n\n ancestor = dirname(ancestor);\n }\n\n return null;\n};\n\nconst childDirectories = (parent: string): string[] =>\n readdirSync(parent, { withFileTypes: true })\n .filter((entry) => entry.isDirectory())\n .map((entry) => join(parent, entry.name));\n\nconst gtkxBuildDescendant = (root: string): string | null => {\n const pending = childDirectories(root);\n\n while (pending.length > 0) {\n const path = pending.pop();\n\n if (path === undefined) {\n return null;\n }\n\n if (isGtkxBuildDirectory(path)) {\n return path;\n }\n\n pending.push(...childDirectories(path));\n }\n\n return null;\n};\n\nconst assertSafeBuildLocation = (root: string, outDir: string): void => {\n if (!isPathInside(root, outDir)) {\n throw new Error(`Build output ${outDir} must be below the project root ${root}`);\n }\n\n if (hasSymlinkComponent(root, outDir)) {\n throw new Error(`Build output ${outputName(root, outDir)} passes through a symbolic link`);\n }\n\n const ancestor = gtkxBuildAncestor(root, outDir);\n\n if (ancestor !== null) {\n throw new Error(\n `Build output ${outputName(root, outDir)} is nested inside the earlier GTKX build ` +\n outputName(root, ancestor),\n );\n }\n};\n\nconst nonReusableBuildOutputError = (root: string, outDir: string): Error => {\n const stats = lstatSync(outDir, { throwIfNoEntry: false });\n\n if (stats?.isDirectory() !== true) {\n return new Error(`Build output ${outputName(root, outDir)} exists and is not a directory`);\n }\n\n const descendant = gtkxBuildDescendant(outDir);\n\n if (descendant !== null) {\n return new Error(\n `Build output ${outputName(root, outDir)} contains the earlier GTKX build ` +\n outputName(root, descendant),\n );\n }\n\n return new Error(\n `Build output ${outputName(root, outDir)} is nonempty and is not an earlier GTKX build`,\n );\n};\n\nconst resolveBuildOutDir = (root: string, configured?: string): string => {\n const selected = configured ?? DEFAULT_BUILD_OUT_DIR;\n const outDir = resolve(root, selected);\n\n assertSafeBuildLocation(root, outDir);\n\n if (!isReusableBuildDirectory(outDir)) {\n throw nonReusableBuildOutputError(root, outDir);\n }\n\n return outDir;\n};\n\nconst prepareBuildOutDir = (root: string, outDir: string): PreparedBuildOutDir => {\n assertSafeBuildLocation(root, outDir);\n const prepared = prepareOutputDirectory(root, outDir, isReusableBuildDirectory);\n\n if (prepared.status === \"unsafe\") {\n throw new Error(`Build output ${outputName(root, outDir)} became unsafe while preparing it`);\n }\n\n const transaction: OutputDirectoryTransaction = prepared.transaction;\n\n return {\n path: transaction.path,\n commit: () => {\n transaction.commit(PRESERVED_BUILD_ENTRIES, isGtkxBuildDirectory);\n },\n [Symbol.dispose]: () => {\n transaction[Symbol.dispose]();\n },\n };\n};\n\nexport { prepareBuildOutDir, resolveBuildOutDir };\n"]}
@@ -2,6 +2,7 @@ import { type ElementProps, type OmittedProps } from "@gtkx/codegen";
2
2
  type DocsElements = {
3
3
  props: ElementProps;
4
4
  omittedProps: OmittedProps;
5
+ acceptedChildTypes: Record<string, string[]>;
5
6
  };
6
7
  declare const resolveDocsElements: (cwd: string) => Promise<DocsElements>;
7
8
  export { resolveDocsElements };
@@ -1 +1 @@
1
- {"version":3,"file":"docs-elements.d.ts","sourceRoot":"","sources":["../../src/internal/docs-elements.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,YAAY,EAAqC,MAAM,eAAe,CAAC;AAGxG,KAAK,YAAY,GAAG;IAChB,KAAK,EAAE,YAAY,CAAC;IACpB,YAAY,EAAE,YAAY,CAAC;CAC9B,CAAC;AAEF,QAAA,MAAM,mBAAmB,GAAU,KAAK,MAAM,KAAG,OAAO,CAAC,YAAY,CAUpE,CAAC;AAEF,OAAO,EAAE,mBAAmB,EAAE,CAAC"}
1
+ {"version":3,"file":"docs-elements.d.ts","sourceRoot":"","sources":["../../src/internal/docs-elements.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,KAAK,YAAY,EACjB,KAAK,YAAY,EAEpB,MAAM,eAAe,CAAC;AAIvB,KAAK,YAAY,GAAG;IAChB,KAAK,EAAE,YAAY,CAAC;IACpB,YAAY,EAAE,YAAY,CAAC;IAC3B,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;CAChD,CAAC;AAEF,QAAA,MAAM,mBAAmB,GAAU,KAAK,MAAM,KAAG,OAAO,CAAC,YAAY,CAUpE,CAAC;AAEF,OAAO,EAAE,mBAAmB,EAAE,CAAC"}
@@ -1,12 +1,13 @@
1
- import { readBuiltinElements, resolveStore } from "@gtkx/codegen";
1
+ import { resolveStore, } from "@gtkx/codegen";
2
+ import { readBuiltinElementsForDocs } from "@gtkx/codegen/internal";
2
3
  import { existsSync } from "node:fs";
3
4
  const resolveDocsElements = async (cwd) => {
4
5
  const { gi } = resolveStore(cwd);
5
6
  if (!existsSync(gi.storeDir)) {
6
- return { props: {}, omittedProps: {} };
7
+ return { props: {}, omittedProps: {}, acceptedChildTypes: {} };
7
8
  }
8
- const { props, omittedProps } = await readBuiltinElements();
9
- return { props, omittedProps };
9
+ const { props, omittedProps, acceptedChildTypes } = await readBuiltinElementsForDocs();
10
+ return { props, omittedProps, acceptedChildTypes };
10
11
  };
11
12
  export { resolveDocsElements };
12
13
  //# sourceMappingURL=docs-elements.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"docs-elements.js","sourceRoot":"","sources":["../../src/internal/docs-elements.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwC,mBAAmB,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AACxG,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAOrC,MAAM,mBAAmB,GAAG,KAAK,EAAE,GAAW,EAAyB,EAAE;IACrE,MAAM,EAAE,EAAE,EAAE,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;IAEjC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC3B,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC;IAC3C,CAAC;IAED,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,MAAM,mBAAmB,EAAE,CAAC;IAE5D,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC;AACnC,CAAC,CAAC;AAEF,OAAO,EAAE,mBAAmB,EAAE,CAAC","sourcesContent":["import { type ElementProps, type OmittedProps, readBuiltinElements, resolveStore } from \"@gtkx/codegen\";\nimport { existsSync } from \"node:fs\";\n\ntype DocsElements = {\n props: ElementProps;\n omittedProps: OmittedProps;\n};\n\nconst resolveDocsElements = async (cwd: string): Promise<DocsElements> => {\n const { gi } = resolveStore(cwd);\n\n if (!existsSync(gi.storeDir)) {\n return { props: {}, omittedProps: {} };\n }\n\n const { props, omittedProps } = await readBuiltinElements();\n\n return { props, omittedProps };\n};\n\nexport { resolveDocsElements };\n"]}
1
+ {"version":3,"file":"docs-elements.js","sourceRoot":"","sources":["../../src/internal/docs-elements.ts"],"names":[],"mappings":"AAAA,OAAO,EAGH,YAAY,GACf,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAQrC,MAAM,mBAAmB,GAAG,KAAK,EAAE,GAAW,EAAyB,EAAE;IACrE,MAAM,EAAE,EAAE,EAAE,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;IAEjC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC3B,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,kBAAkB,EAAE,EAAE,EAAE,CAAC;IACnE,CAAC;IAED,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,kBAAkB,EAAE,GAAG,MAAM,0BAA0B,EAAE,CAAC;IAEvF,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,kBAAkB,EAAE,CAAC;AACvD,CAAC,CAAC;AAEF,OAAO,EAAE,mBAAmB,EAAE,CAAC","sourcesContent":["import {\n type ElementProps,\n type OmittedProps,\n resolveStore,\n} from \"@gtkx/codegen\";\nimport { readBuiltinElementsForDocs } from \"@gtkx/codegen/internal\";\nimport { existsSync } from \"node:fs\";\n\ntype DocsElements = {\n props: ElementProps;\n omittedProps: OmittedProps;\n acceptedChildTypes: Record<string, string[]>;\n};\n\nconst resolveDocsElements = async (cwd: string): Promise<DocsElements> => {\n const { gi } = resolveStore(cwd);\n\n if (!existsSync(gi.storeDir)) {\n return { props: {}, omittedProps: {}, acceptedChildTypes: {} };\n }\n\n const { props, omittedProps, acceptedChildTypes } = await readBuiltinElementsForDocs();\n\n return { props, omittedProps, acceptedChildTypes };\n};\n\nexport { resolveDocsElements };\n"]}
@@ -1,4 +1,5 @@
1
1
  import type { ArgsDef, CommandDef } from "citty";
2
+ declare const printError: (cause: unknown) => never;
2
3
  declare const withErrorBoundary: <T extends ArgsDef>(command: CommandDef<T>) => CommandDef<T>;
3
- export { withErrorBoundary };
4
+ export { printError, withErrorBoundary };
4
5
  //# sourceMappingURL=errors.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/internal/errors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAgBjD,QAAA,MAAM,iBAAiB,GAAI,CAAC,SAAS,OAAO,EAAE,SAAS,UAAU,CAAC,CAAC,CAAC,KAAG,UAAU,CAAC,CAAC,CAiBlF,CAAC;AAEF,OAAO,EAAE,iBAAiB,EAAE,CAAC"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/internal/errors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAKjD,QAAA,MAAM,UAAU,GAAI,OAAO,OAAO,KAAG,KASpC,CAAC;AAEF,QAAA,MAAM,iBAAiB,GAAI,CAAC,SAAS,OAAO,EAAE,SAAS,UAAU,CAAC,CAAC,CAAC,KAAG,UAAU,CAAC,CAAC,CAiBlF,CAAC;AAEF,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,CAAC"}
@@ -25,5 +25,5 @@ const withErrorBoundary = (command) => {
25
25
  },
26
26
  };
27
27
  };
28
- export { withErrorBoundary };
28
+ export { printError, withErrorBoundary };
29
29
  //# sourceMappingURL=errors.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/internal/errors.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,MAAM,eAAe,GAAG,CAAC,CAAC;AAE1B,MAAM,UAAU,GAAG,CAAC,KAAc,EAAS,EAAE;IACzC,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACvE,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAEtB,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QACtD,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC;IAED,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;AAClC,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CAAoB,OAAsB,EAAiB,EAAE;IACnF,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IAExB,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACpB,OAAO,OAAO,CAAC;IACnB,CAAC;IAED,OAAO;QACH,GAAG,OAAO;QACV,GAAG,EAAE,KAAK,EAAE,OAAO,EAAoB,EAAE;YACrC,IAAI,CAAC;gBACD,OAAO,MAAM,GAAG,CAAC,OAAO,CAAC,CAAC;YAC9B,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACb,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC;YAC7B,CAAC;QACL,CAAC;KACJ,CAAC;AACN,CAAC,CAAC;AAEF,OAAO,EAAE,iBAAiB,EAAE,CAAC","sourcesContent":["import type { ArgsDef, CommandDef } from \"citty\";\nimport { logger } from \"@gtkx/utils\";\n\nconst ERROR_EXIT_CODE = 1;\n\nconst printError = (cause: unknown): never => {\n const message = cause instanceof Error ? cause.message : String(cause);\n logger.error(message);\n\n if (cause instanceof Error && cause.stack !== undefined) {\n logger.debug(cause.stack);\n }\n\n process.exit(ERROR_EXIT_CODE);\n};\n\nconst withErrorBoundary = <T extends ArgsDef>(command: CommandDef<T>): CommandDef<T> => {\n const run = command.run;\n\n if (run === undefined) {\n return command;\n }\n\n return {\n ...command,\n run: async (context): Promise<unknown> => {\n try {\n return await run(context);\n } catch (error) {\n return printError(error);\n }\n },\n };\n};\n\nexport { withErrorBoundary };\n"]}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/internal/errors.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,MAAM,eAAe,GAAG,CAAC,CAAC;AAE1B,MAAM,UAAU,GAAG,CAAC,KAAc,EAAS,EAAE;IACzC,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACvE,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAEtB,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QACtD,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC;IAED,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;AAClC,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CAAoB,OAAsB,EAAiB,EAAE;IACnF,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IAExB,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACpB,OAAO,OAAO,CAAC;IACnB,CAAC;IAED,OAAO;QACH,GAAG,OAAO;QACV,GAAG,EAAE,KAAK,EAAE,OAAO,EAAoB,EAAE;YACrC,IAAI,CAAC;gBACD,OAAO,MAAM,GAAG,CAAC,OAAO,CAAC,CAAC;YAC9B,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACb,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC;YAC7B,CAAC;QACL,CAAC;KACJ,CAAC;AACN,CAAC,CAAC;AAEF,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,CAAC","sourcesContent":["import type { ArgsDef, CommandDef } from \"citty\";\nimport { logger } from \"@gtkx/utils\";\n\nconst ERROR_EXIT_CODE = 1;\n\nconst printError = (cause: unknown): never => {\n const message = cause instanceof Error ? cause.message : String(cause);\n logger.error(message);\n\n if (cause instanceof Error && cause.stack !== undefined) {\n logger.debug(cause.stack);\n }\n\n process.exit(ERROR_EXIT_CODE);\n};\n\nconst withErrorBoundary = <T extends ArgsDef>(command: CommandDef<T>): CommandDef<T> => {\n const run = command.run;\n\n if (run === undefined) {\n return command;\n }\n\n return {\n ...command,\n run: async (context): Promise<unknown> => {\n try {\n return await run(context);\n } catch (error) {\n return printError(error);\n }\n },\n };\n};\n\nexport { printError, withErrorBoundary };\n"]}
@@ -0,0 +1,12 @@
1
+ type ProcessIdentity = {
2
+ pid: number;
3
+ parentId: number;
4
+ processGroupId: number;
5
+ startTime: string;
6
+ state: string;
7
+ };
8
+ type ProcessGroupOwner = Pick<ProcessIdentity, "pid" | "startTime">;
9
+ declare const initialParentId: number;
10
+ declare const getInitialProcessGroupOwner: () => ProcessGroupOwner | undefined;
11
+ export { getInitialProcessGroupOwner, initialParentId };
12
+ //# sourceMappingURL=parent-process.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parent-process.d.ts","sourceRoot":"","sources":["../../src/internal/parent-process.ts"],"names":[],"mappings":"AAEA,KAAK,eAAe,GAAG;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,KAAK,iBAAiB,GAAG,IAAI,CAAC,eAAe,EAAE,KAAK,GAAG,WAAW,CAAC,CAAC;AAIpE,QAAA,MAAM,eAAe,QAAe,CAAC;AAuFrC,QAAA,MAAM,2BAA2B,QAAO,iBAAiB,GAAG,SAM3D,CAAC;AAEF,OAAO,EAAE,2BAA2B,EAAE,eAAe,EAAE,CAAC"}
@@ -0,0 +1,74 @@
1
+ import { readFileSync } from "node:fs";
2
+ const initialParentId = process.ppid;
3
+ const STOPPED_PROCESS_STATES = new Set(["Z", "X", "x"]);
4
+ const processIdentity = (pid) => {
5
+ const stat = readFileSync(`/proc/${String(pid)}/stat`, "utf8");
6
+ const fields = stat.slice(stat.lastIndexOf(") ") + 2).split(" ");
7
+ const state = fields[0];
8
+ const parentId = Number(fields[1]);
9
+ const processGroupId = Number(fields[2]);
10
+ const startTime = fields[19];
11
+ if (state === undefined ||
12
+ startTime === undefined ||
13
+ !Number.isSafeInteger(parentId) ||
14
+ !Number.isSafeInteger(processGroupId)) {
15
+ throw new Error(`Failed to identify process ${String(pid)}`);
16
+ }
17
+ return { pid, parentId, processGroupId, startTime, state };
18
+ };
19
+ const ancestorFor = (process, ancestorId) => {
20
+ let current = process;
21
+ while (current.parentId > 1) {
22
+ const parent = processIdentity(current.parentId);
23
+ if (parent.pid === ancestorId) {
24
+ return parent;
25
+ }
26
+ current = parent;
27
+ }
28
+ return undefined;
29
+ };
30
+ const processGroupOwner = (process) => {
31
+ if (process.processGroupId !== process.pid || STOPPED_PROCESS_STATES.has(process.state)) {
32
+ throw new Error(`Failed to identify process group ${String(process.pid)}`);
33
+ }
34
+ return { pid: process.pid, startTime: process.startTime };
35
+ };
36
+ const processGroupOwnerFor = (process) => {
37
+ if (process.processGroupId === process.pid) {
38
+ return undefined;
39
+ }
40
+ const groupLeader = processGroupOwner(processIdentity(process.processGroupId));
41
+ const owner = ancestorFor(process, groupLeader.pid);
42
+ if (owner !== undefined) {
43
+ return groupLeader;
44
+ }
45
+ const currentGroupLeader = processGroupOwner(processIdentity(groupLeader.pid));
46
+ if (currentGroupLeader.startTime !== groupLeader.startTime) {
47
+ throw new Error(`Failed to identify process group ${String(groupLeader.pid)}`);
48
+ }
49
+ return undefined;
50
+ };
51
+ const captureProcessGroupOwner = () => {
52
+ try {
53
+ const initialProcess = processIdentity(process.pid);
54
+ if (initialProcess.parentId !== initialParentId) {
55
+ throw new Error("The process that launched GTKX exited during startup");
56
+ }
57
+ return { isCaptured: true, owner: processGroupOwnerFor(initialProcess) };
58
+ }
59
+ catch (error) {
60
+ return {
61
+ isCaptured: false,
62
+ error: error instanceof Error ? error : new Error("Failed to identify the process that launched GTKX"),
63
+ };
64
+ }
65
+ };
66
+ const capturedProcessGroupOwner = captureProcessGroupOwner();
67
+ const getInitialProcessGroupOwner = () => {
68
+ if (!capturedProcessGroupOwner.isCaptured) {
69
+ throw capturedProcessGroupOwner.error;
70
+ }
71
+ return capturedProcessGroupOwner.owner;
72
+ };
73
+ export { getInitialProcessGroupOwner, initialParentId };
74
+ //# sourceMappingURL=parent-process.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parent-process.js","sourceRoot":"","sources":["../../src/internal/parent-process.ts"],"names":[],"mappings":"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","sourcesContent":["import { readFileSync } from \"node:fs\";\n\ntype ProcessIdentity = {\n pid: number;\n parentId: number;\n processGroupId: number;\n startTime: string;\n state: string;\n};\n\ntype ProcessGroupOwner = Pick<ProcessIdentity, \"pid\" | \"startTime\">;\ntype ProcessGroupOwnerCapture = { isCaptured: true; owner: ProcessGroupOwner | undefined } |\n { isCaptured: false; error: Error };\n\nconst initialParentId = process.ppid;\nconst STOPPED_PROCESS_STATES: Set<string> = new Set([\"Z\", \"X\", \"x\"]);\n\nconst processIdentity = (pid: number): ProcessIdentity => {\n const stat = readFileSync(`/proc/${String(pid)}/stat`, \"utf8\");\n const fields = stat.slice(stat.lastIndexOf(\") \") + 2).split(\" \");\n const state = fields[0];\n const parentId = Number(fields[1]);\n const processGroupId = Number(fields[2]);\n const startTime = fields[19];\n\n if (\n state === undefined ||\n startTime === undefined ||\n !Number.isSafeInteger(parentId) ||\n !Number.isSafeInteger(processGroupId)\n ) {\n throw new Error(`Failed to identify process ${String(pid)}`);\n }\n\n return { pid, parentId, processGroupId, startTime, state };\n};\n\nconst ancestorFor = (process: ProcessIdentity, ancestorId: number): ProcessIdentity | undefined => {\n let current = process;\n\n while (current.parentId > 1) {\n const parent = processIdentity(current.parentId);\n\n if (parent.pid === ancestorId) {\n return parent;\n }\n\n current = parent;\n }\n\n return undefined;\n};\n\nconst processGroupOwner = (process: ProcessIdentity): ProcessGroupOwner => {\n if (process.processGroupId !== process.pid || STOPPED_PROCESS_STATES.has(process.state)) {\n throw new Error(`Failed to identify process group ${String(process.pid)}`);\n }\n\n return { pid: process.pid, startTime: process.startTime };\n};\n\nconst processGroupOwnerFor = (process: ProcessIdentity): ProcessGroupOwner | undefined => {\n if (process.processGroupId === process.pid) {\n return undefined;\n }\n\n const groupLeader = processGroupOwner(processIdentity(process.processGroupId));\n const owner = ancestorFor(process, groupLeader.pid);\n\n if (owner !== undefined) {\n return groupLeader;\n }\n\n const currentGroupLeader = processGroupOwner(processIdentity(groupLeader.pid));\n\n if (currentGroupLeader.startTime !== groupLeader.startTime) {\n throw new Error(`Failed to identify process group ${String(groupLeader.pid)}`);\n }\n\n return undefined;\n};\n\nconst captureProcessGroupOwner = (): ProcessGroupOwnerCapture => {\n try {\n const initialProcess = processIdentity(process.pid);\n\n if (initialProcess.parentId !== initialParentId) {\n throw new Error(\"The process that launched GTKX exited during startup\");\n }\n\n return { isCaptured: true, owner: processGroupOwnerFor(initialProcess) };\n } catch (error) {\n return {\n isCaptured: false,\n error: error instanceof Error ? error : new Error(\"Failed to identify the process that launched GTKX\"),\n };\n }\n};\n\nconst capturedProcessGroupOwner = captureProcessGroupOwner();\n\nconst getInitialProcessGroupOwner = (): ProcessGroupOwner | undefined => {\n if (!capturedProcessGroupOwner.isCaptured) {\n throw capturedProcessGroupOwner.error;\n }\n\n return capturedProcessGroupOwner.owner;\n};\n\nexport { getInitialProcessGroupOwner, initialParentId };\n"]}
@@ -8,6 +8,7 @@ type PreparedProject = {
8
8
  cwd: string;
9
9
  entry: string;
10
10
  configFile: string;
11
+ configDependencies: string[];
11
12
  };
12
13
  type ResolvedProject = PreparedProject & {
13
14
  context: CodegenContext;
@@ -1 +1 @@
1
- {"version":3,"file":"prepare-project.d.ts","sourceRoot":"","sources":["../../src/internal/prepare-project.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,cAAc,EAAyB,MAAM,8BAA8B,CAAC;AAG1F,KAAK,WAAW,GAAG;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AACrE,KAAK,eAAe,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC;AAC1E,KAAK,eAAe,GAAG,eAAe,GAAG;IAAE,OAAO,EAAE,cAAc,CAAA;CAAE,CAAC;AAErE,QAAA,MAAM,cAAc,GAAU,MAAM,WAAW,EAAE,MAAM,MAAM,KAAG,OAAO,CAAC,eAAe,CAKtF,CAAC;AAEF,QAAA,MAAM,cAAc,GAAU,MAAM,WAAW,EAAE,MAAM,MAAM,KAAG,OAAO,CAAC,eAAe,CAKtF,CAAC;AAEF,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,CAAC"}
1
+ {"version":3,"file":"prepare-project.d.ts","sourceRoot":"","sources":["../../src/internal/prepare-project.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,cAAc,EAAyB,MAAM,8BAA8B,CAAC;AAG1F,KAAK,WAAW,GAAG;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AACrE,KAAK,eAAe,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,kBAAkB,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC;AACxG,KAAK,eAAe,GAAG,eAAe,GAAG;IAAE,OAAO,EAAE,cAAc,CAAA;CAAE,CAAC;AAErE,QAAA,MAAM,cAAc,GAAU,MAAM,WAAW,EAAE,MAAM,MAAM,KAAG,OAAO,CAAC,eAAe,CAWtF,CAAC;AAEF,QAAA,MAAM,cAAc,GAAU,MAAM,WAAW,EAAE,MAAM,MAAM,KAAG,OAAO,CAAC,eAAe,CAKtF,CAAC;AAEF,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,CAAC"}
@@ -4,12 +4,18 @@ import { resolveCwd, resolveEntry } from "./entry-arg.js";
4
4
  const resolveProject = async (args, mode) => {
5
5
  const cwd = resolveCwd(args);
6
6
  const context = await resolveCodegenContext(cwd, mode, args.config);
7
- return { cwd, entry: resolveEntry(cwd, args.entry), configFile: context.configFile, context };
7
+ return {
8
+ cwd,
9
+ entry: resolveEntry(cwd, args.entry),
10
+ configFile: context.configFile,
11
+ configDependencies: context.configDependencies,
12
+ context,
13
+ };
8
14
  };
9
15
  const prepareProject = async (args, mode) => {
10
16
  const { cwd, entry, context } = await resolveProject(args, mode);
11
17
  await ensureGeneratedIn(context, { shouldAnnounce: true, mode });
12
- return { cwd, entry, configFile: context.configFile };
18
+ return { cwd, entry, configFile: context.configFile, configDependencies: context.configDependencies };
13
19
  };
14
20
  export { prepareProject, resolveProject };
15
21
  //# sourceMappingURL=prepare-project.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"prepare-project.js","sourceRoot":"","sources":["../../src/internal/prepare-project.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAuB,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAC1F,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAM1D,MAAM,cAAc,GAAG,KAAK,EAAE,IAAiB,EAAE,IAAY,EAA4B,EAAE;IACvF,MAAM,GAAG,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAC7B,MAAM,OAAO,GAAG,MAAM,qBAAqB,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IAEpE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,OAAO,EAAE,CAAC;AAClG,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,KAAK,EAAE,IAAiB,EAAE,IAAY,EAA4B,EAAE;IACvF,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,MAAM,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACjE,MAAM,iBAAiB,CAAC,OAAO,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAEjE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC;AAC1D,CAAC,CAAC;AAEF,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,CAAC","sourcesContent":["import { ensureGeneratedIn } from \"../codegen/run-codegen.js\";\nimport { type CodegenContext, resolveCodegenContext } from \"../codegen/store-resolver.js\";\nimport { resolveCwd, resolveEntry } from \"./entry-arg.js\";\n\ntype ProjectArgs = { entry?: string; cwd?: string; config?: string };\ntype PreparedProject = { cwd: string; entry: string; configFile: string };\ntype ResolvedProject = PreparedProject & { context: CodegenContext };\n\nconst resolveProject = async (args: ProjectArgs, mode: string): Promise<ResolvedProject> => {\n const cwd = resolveCwd(args);\n const context = await resolveCodegenContext(cwd, mode, args.config);\n\n return { cwd, entry: resolveEntry(cwd, args.entry), configFile: context.configFile, context };\n};\n\nconst prepareProject = async (args: ProjectArgs, mode: string): Promise<PreparedProject> => {\n const { cwd, entry, context } = await resolveProject(args, mode);\n await ensureGeneratedIn(context, { shouldAnnounce: true, mode });\n\n return { cwd, entry, configFile: context.configFile };\n};\n\nexport { prepareProject, resolveProject };\n"]}
1
+ {"version":3,"file":"prepare-project.js","sourceRoot":"","sources":["../../src/internal/prepare-project.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAuB,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAC1F,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAM1D,MAAM,cAAc,GAAG,KAAK,EAAE,IAAiB,EAAE,IAAY,EAA4B,EAAE;IACvF,MAAM,GAAG,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAC7B,MAAM,OAAO,GAAG,MAAM,qBAAqB,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IAEpE,OAAO;QACH,GAAG;QACH,KAAK,EAAE,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC;QACpC,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,kBAAkB,EAAE,OAAO,CAAC,kBAAkB;QAC9C,OAAO;KACV,CAAC;AACN,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,KAAK,EAAE,IAAiB,EAAE,IAAY,EAA4B,EAAE;IACvF,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,MAAM,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACjE,MAAM,iBAAiB,CAAC,OAAO,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAEjE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,kBAAkB,EAAE,OAAO,CAAC,kBAAkB,EAAE,CAAC;AAC1G,CAAC,CAAC;AAEF,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,CAAC","sourcesContent":["import { ensureGeneratedIn } from \"../codegen/run-codegen.js\";\nimport { type CodegenContext, resolveCodegenContext } from \"../codegen/store-resolver.js\";\nimport { resolveCwd, resolveEntry } from \"./entry-arg.js\";\n\ntype ProjectArgs = { entry?: string; cwd?: string; config?: string };\ntype PreparedProject = { cwd: string; entry: string; configFile: string; configDependencies: string[] };\ntype ResolvedProject = PreparedProject & { context: CodegenContext };\n\nconst resolveProject = async (args: ProjectArgs, mode: string): Promise<ResolvedProject> => {\n const cwd = resolveCwd(args);\n const context = await resolveCodegenContext(cwd, mode, args.config);\n\n return {\n cwd,\n entry: resolveEntry(cwd, args.entry),\n configFile: context.configFile,\n configDependencies: context.configDependencies,\n context,\n };\n};\n\nconst prepareProject = async (args: ProjectArgs, mode: string): Promise<PreparedProject> => {\n const { cwd, entry, context } = await resolveProject(args, mode);\n await ensureGeneratedIn(context, { shouldAnnounce: true, mode });\n\n return { cwd, entry, configFile: context.configFile, configDependencies: context.configDependencies };\n};\n\nexport { prepareProject, resolveProject };\n"]}
@@ -1,4 +1,4 @@
1
1
  import type { Plugin } from "vite";
2
- declare const gtkxEnsureStore: () => Plugin;
2
+ declare const gtkxEnsureStore: (configFile?: string) => Plugin;
3
3
  export { gtkxEnsureStore };
4
4
  //# sourceMappingURL=ensure-store.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ensure-store.d.ts","sourceRoot":"","sources":["../../src/vite-plugins/ensure-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAKnC,QAAA,MAAM,eAAe,QAAO,MAM1B,CAAC;AAEH,OAAO,EAAE,eAAe,EAAE,CAAC"}
1
+ {"version":3,"file":"ensure-store.d.ts","sourceRoot":"","sources":["../../src/vite-plugins/ensure-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAKnC,QAAA,MAAM,eAAe,GAAI,aAAa,MAAM,KAAG,MAM7C,CAAC;AAEH,OAAO,EAAE,eAAe,EAAE,CAAC"}
@@ -1,9 +1,9 @@
1
1
  import { ensureGenerated } from "../codegen/run-codegen.js";
2
2
  const TEST_MODE = "test";
3
- const gtkxEnsureStore = () => ({
3
+ const gtkxEnsureStore = (configFile) => ({
4
4
  name: "gtkx:ensure-store",
5
5
  async config() {
6
- await ensureGenerated(process.cwd(), { shouldAnnounce: true, mode: TEST_MODE });
6
+ await ensureGenerated(process.cwd(), { shouldAnnounce: true, mode: TEST_MODE, configFile });
7
7
  },
8
8
  });
9
9
  export { gtkxEnsureStore };
@@ -1 +1 @@
1
- {"version":3,"file":"ensure-store.js","sourceRoot":"","sources":["../../src/vite-plugins/ensure-store.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAE5D,MAAM,SAAS,GAAG,MAAM,CAAC;AAEzB,MAAM,eAAe,GAAG,GAAW,EAAE,CAAC,CAAC;IACnC,IAAI,EAAE,mBAAmB;IAEzB,KAAK,CAAC,MAAM;QACR,MAAM,eAAe,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;IACpF,CAAC;CACJ,CAAC,CAAC;AAEH,OAAO,EAAE,eAAe,EAAE,CAAC","sourcesContent":["import type { Plugin } from \"vite\";\nimport { ensureGenerated } from \"../codegen/run-codegen.js\";\n\nconst TEST_MODE = \"test\";\n\nconst gtkxEnsureStore = (): Plugin => ({\n name: \"gtkx:ensure-store\",\n\n async config() {\n await ensureGenerated(process.cwd(), { shouldAnnounce: true, mode: TEST_MODE });\n },\n});\n\nexport { gtkxEnsureStore };\n"]}
1
+ {"version":3,"file":"ensure-store.js","sourceRoot":"","sources":["../../src/vite-plugins/ensure-store.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAE5D,MAAM,SAAS,GAAG,MAAM,CAAC;AAEzB,MAAM,eAAe,GAAG,CAAC,UAAmB,EAAU,EAAE,CAAC,CAAC;IACtD,IAAI,EAAE,mBAAmB;IAEzB,KAAK,CAAC,MAAM;QACR,MAAM,eAAe,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,CAAC;IAChG,CAAC;CACJ,CAAC,CAAC;AAEH,OAAO,EAAE,eAAe,EAAE,CAAC","sourcesContent":["import type { Plugin } from \"vite\";\nimport { ensureGenerated } from \"../codegen/run-codegen.js\";\n\nconst TEST_MODE = \"test\";\n\nconst gtkxEnsureStore = (configFile?: string): Plugin => ({\n name: \"gtkx:ensure-store\",\n\n async config() {\n await ensureGenerated(process.cwd(), { shouldAnnounce: true, mode: TEST_MODE, configFile });\n },\n});\n\nexport { gtkxEnsureStore };\n"]}
@@ -1,5 +1,5 @@
1
1
  import type { ConfigLoader } from "@gtkx/config";
2
2
  import type { Plugin } from "vite";
3
- declare const gtkxI18n: (entryPath: string, loadConfig?: ConfigLoader, shouldPreserveMetadataMessages?: boolean) => Plugin;
3
+ declare const gtkxI18n: (entryPath: string, loadConfig?: ConfigLoader, shouldPreserveMetadataMessages?: boolean, shouldRecoverExtractionErrors?: boolean) => Plugin;
4
4
  export { gtkxI18n };
5
5
  //# sourceMappingURL=i18n.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../../src/vite-plugins/i18n.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,KAAK,EAAE,MAAM,EAAkB,MAAM,MAAM,CAAC;AAyKnD,QAAA,MAAM,QAAQ,GACV,WAAW,MAAM,EACjB,aAAY,YAAmC,EAC/C,wCAAqC,KACtC,MAmDF,CAAC;AAEF,OAAO,EAAE,QAAQ,EAAE,CAAC"}
1
+ {"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../../src/vite-plugins/i18n.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,KAAK,EAAE,MAAM,EAAkB,MAAM,MAAM,CAAC;AAyLnD,QAAA,MAAM,QAAQ,GACV,WAAW,MAAM,EACjB,aAAY,YAAmC,EAC/C,wCAAqC,EACrC,uCAAqC,KACtC,MAkDF,CAAC;AAEF,OAAO,EAAE,QAAQ,EAAE,CAAC"}
@@ -1,10 +1,10 @@
1
1
  import { createConfigLoader } from "@gtkx/config/internal";
2
- import { isPathWithin, toPosixPath } from "@gtkx/utils";
2
+ import { isPathWithin, logger, toPosixPath } from "@gtkx/utils";
3
3
  import { existsSync, mkdirSync } from "node:fs";
4
4
  import { createRequire } from "node:module";
5
5
  import { dirname, join, posix, relative, resolve } from "node:path";
6
6
  import { compileCatalogs, LOCALE_DIRNAME, resolveCatalogProject, synchronizeCatalogs, } from "../i18n/catalogs.js";
7
- import { extractSourceCatalog } from "../i18n/source-messages.js";
7
+ import { extractSourceCatalog, SourceExtractionError } from "../i18n/source-messages.js";
8
8
  import { emitI18nTypes } from "../i18n/types.js";
9
9
  import { discoverSourceFiles, sourceLanguage } from "../internal/source-imports.js";
10
10
  import { stripQuery } from "./strip-query.js";
@@ -91,18 +91,30 @@ const isProjectSource = (state, path) => {
91
91
  const sourceRoot = existsSync(srcDir) ? srcDir : project.root;
92
92
  return isPathWithin(sourceRoot, path);
93
93
  };
94
- const refreshProjectMessages = async (state, shouldPreserveMetadataMessages, reportError) => {
94
+ const refreshProjectMessages = async (state, shouldPreserveMetadataMessages, shouldSynchronizeCatalogs = false) => {
95
95
  try {
96
- await queueExtraction(state, shouldPreserveMetadataMessages, false);
96
+ await queueExtraction(state, shouldPreserveMetadataMessages, shouldSynchronizeCatalogs);
97
97
  }
98
98
  catch (error) {
99
- reportError(error instanceof Error ? error.message : String(error));
99
+ logger.error(error instanceof Error ? error.message : String(error));
100
100
  }
101
101
  };
102
- const gtkxI18n = (entryPath, loadConfig = createConfigLoader(), shouldPreserveMetadataMessages = true) => {
102
+ const recoverInitialSourceExtraction = async (state, shouldPreserveMetadataMessages) => {
103
+ try {
104
+ await queueExtraction(state, shouldPreserveMetadataMessages, true);
105
+ }
106
+ catch (error) {
107
+ if (!(error instanceof SourceExtractionError)) {
108
+ throw error;
109
+ }
110
+ logger.error(error.message);
111
+ }
112
+ };
113
+ const gtkxI18n = (entryPath, loadConfig = createConfigLoader(), shouldPreserveMetadataMessages = true, shouldRecoverExtractionErrors = false) => {
103
114
  const state = {
104
115
  entryPath,
105
116
  extraction: Promise.resolve(),
117
+ hotUpdateTimestamp: null,
106
118
  i18nRoot: "",
107
119
  outDir: "",
108
120
  project: null,
@@ -111,14 +123,15 @@ const gtkxI18n = (entryPath, loadConfig = createConfigLoader(), shouldPreserveMe
111
123
  name: "gtkx:i18n",
112
124
  enforce: "pre",
113
125
  configResolved: (config) => applyResolvedConfig(state, config, loadConfig),
114
- buildStart: () => queueExtraction(state, shouldPreserveMetadataMessages, true),
126
+ buildStart: () => shouldRecoverExtractionErrors
127
+ ? recoverInitialSourceExtraction(state, shouldPreserveMetadataMessages)
128
+ : queueExtraction(state, shouldPreserveMetadataMessages, true),
115
129
  hotUpdate(options) {
116
- if (!isProjectSource(state, options.file)) {
130
+ if (!isProjectSource(state, options.file) || state.hotUpdateTimestamp === options.timestamp) {
117
131
  return;
118
132
  }
119
- return refreshProjectMessages(state, shouldPreserveMetadataMessages, (message) => {
120
- options.server.config.logger.error(message);
121
- });
133
+ state.hotUpdateTimestamp = options.timestamp;
134
+ return refreshProjectMessages(state, shouldPreserveMetadataMessages);
122
135
  },
123
136
  transform(code, id) {
124
137
  if (isI18nLocaleModule(state, id)) {
@@ -1 +1 @@
1
- {"version":3,"file":"i18n.js","sourceRoot":"","sources":["../../src/vite-plugins/i18n.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ConfigLoader } from \"@gtkx/config\";\nimport type { Plugin, ResolvedConfig } from \"vite\";\nimport { createConfigLoader } from \"@gtkx/config/internal\";\nimport { isPathWithin, toPosixPath } from \"@gtkx/utils\";\nimport { existsSync, mkdirSync } from \"node:fs\";\nimport { createRequire } from \"node:module\";\nimport { dirname, join, posix, relative, resolve } from \"node:path\";\nimport {\n type CatalogProject,\n compileCatalogs,\n LOCALE_DIRNAME,\n resolveCatalogProject,\n synchronizeCatalogs,\n} from \"../i18n/catalogs.js\";\nimport { extractSourceCatalog } from \"../i18n/source-messages.js\";\nimport { emitI18nTypes } from \"../i18n/types.js\";\nimport { discoverSourceFiles, sourceLanguage } from \"../internal/source-imports.js\";\nimport { stripQuery } from \"./strip-query.js\";\n\ntype I18nState = {\n entryPath: string;\n i18nRoot: string;\n outDir: string;\n project: CatalogProject | null;\n extraction: Promise<void>;\n};\n\nconst BOOTSTRAP_SPECIFIER = \"@gtkx/i18n/bootstrap\";\nconst LOCALE_URL_PLACEHOLDER = \"__GTKX_BUNDLE_LOCALE_DIR__\";\nconst LOCALE_MODULE_PATHS = new Set([\"dist/locale.js\", \"src/locale.ts\"]);\nconst LOCALE_URL_PATTERN = /new URL\\(([\"'])locale\\1,\\s*import\\.meta\\.url\\)/;\n\nconst isI18nLocaleModule = (state: I18nState, id: string): boolean => {\n if (state.i18nRoot.length === 0) {\n return false;\n }\n\n const path = toPosixPath(relative(state.i18nRoot, stripQuery(id)));\n\n return LOCALE_MODULE_PATHS.has(path);\n};\n\nconst markLocaleUrl = (code: string): string =>\n code.replace(\n LOCALE_URL_PATTERN,\n () => `new URL(${JSON.stringify(LOCALE_URL_PLACEHOLDER)}, import.meta.url)`,\n );\n\nconst localeUrlForChunk = (fileName: string): string => {\n const path = posix.relative(posix.dirname(fileName), LOCALE_DIRNAME);\n\n return path.length === 0 ? \".\" : path;\n};\n\nconst rebaseLocaleUrl = (state: I18nState, code: string, fileName: string, moduleIds: string[]): string | null => {\n if (moduleIds.every((id) => !isI18nLocaleModule(state, id))) {\n return null;\n }\n\n const placeholder = JSON.stringify(LOCALE_URL_PLACEHOLDER);\n\n if (!code.includes(placeholder)) {\n throw new Error(`Unable to locate the @gtkx/i18n locale fallback in ${fileName}`);\n }\n\n return code.replace(placeholder, () => JSON.stringify(localeUrlForChunk(fileName)));\n};\n\nconst applyResolvedConfig = async (\n state: I18nState,\n config: ResolvedConfig,\n loadConfig: ConfigLoader,\n): Promise<void> => {\n state.entryPath = resolve(config.root, state.entryPath);\n state.outDir = resolve(config.root, config.build.outDir);\n const application = await loadConfig.resolve(config.root);\n state.project = resolveCatalogProject(config.root, application.applicationId);\n\n if (state.project !== null) {\n const projectRequire = createRequire(resolve(config.root, \"package.json\"));\n state.i18nRoot = dirname(projectRequire.resolve(\"@gtkx/i18n/package.json\"));\n }\n};\n\nconst buildCatalogs = (state: I18nState): void => {\n const project = state.project;\n\n if (project === null) {\n return;\n }\n\n mkdirSync(state.outDir, { recursive: true });\n compileCatalogs(project, resolve(state.outDir, LOCALE_DIRNAME));\n};\n\nconst extractProjectMessages = async (\n state: I18nState,\n shouldPreserveMetadataMessages: boolean,\n shouldSynchronizeCatalogs: boolean,\n): Promise<void> => {\n const project = state.project;\n\n if (project === null) {\n return;\n }\n\n const srcDir = join(project.root, \"src\");\n const sourceFiles = discoverSourceFiles(existsSync(srcDir) ? srcDir : project.root);\n await extractSourceCatalog(project, sourceFiles, shouldPreserveMetadataMessages);\n\n if (shouldSynchronizeCatalogs) {\n synchronizeCatalogs(project);\n }\n\n await emitI18nTypes(project.root);\n};\n\nconst settleExtraction = async (pending: Promise<void>): Promise<void> => {\n try {\n await pending;\n } catch {\n return;\n }\n};\n\nconst queueExtraction = (\n state: I18nState,\n shouldPreserveMetadataMessages: boolean,\n shouldSynchronizeCatalogs: boolean,\n): Promise<void> => {\n const prior = state.extraction;\n const pending = (async (): Promise<void> => {\n await settleExtraction(prior);\n await extractProjectMessages(\n state,\n shouldPreserveMetadataMessages,\n shouldSynchronizeCatalogs,\n );\n })();\n\n state.extraction = pending;\n\n return pending;\n};\n\nconst isProjectSource = (state: I18nState, path: string): boolean => {\n const project = state.project;\n\n if (project === null || sourceLanguage(path) === undefined) {\n return false;\n }\n\n const srcDir = join(project.root, \"src\");\n const sourceRoot = existsSync(srcDir) ? srcDir : project.root;\n\n return isPathWithin(sourceRoot, path);\n};\n\nconst refreshProjectMessages = async (\n state: I18nState,\n shouldPreserveMetadataMessages: boolean,\n reportError: (message: string) => void,\n): Promise<void> => {\n try {\n await queueExtraction(state, shouldPreserveMetadataMessages, false);\n } catch (error) {\n reportError(error instanceof Error ? error.message : String(error));\n }\n};\n\nconst gtkxI18n = (\n entryPath: string,\n loadConfig: ConfigLoader = createConfigLoader(),\n shouldPreserveMetadataMessages = true,\n): Plugin => {\n const state: I18nState = {\n entryPath,\n extraction: Promise.resolve(),\n i18nRoot: \"\",\n outDir: \"\",\n project: null,\n };\n\n return {\n name: \"gtkx:i18n\",\n enforce: \"pre\",\n\n configResolved: (config) => applyResolvedConfig(state, config, loadConfig),\n\n buildStart: () => queueExtraction(state, shouldPreserveMetadataMessages, true),\n\n hotUpdate(options) {\n if (!isProjectSource(state, options.file)) {\n return;\n }\n\n return refreshProjectMessages(\n state,\n shouldPreserveMetadataMessages,\n (message) => {\n options.server.config.logger.error(message);\n },\n );\n },\n\n transform(code, id) {\n if (isI18nLocaleModule(state, id)) {\n return markLocaleUrl(code);\n }\n\n if (state.project === null || resolve(stripQuery(id)) !== state.entryPath) {\n return;\n }\n\n return `import ${JSON.stringify(BOOTSTRAP_SPECIFIER)};\\n${code}`;\n },\n\n renderChunk(code, chunk) {\n return rebaseLocaleUrl(state, code, chunk.fileName, chunk.moduleIds);\n },\n\n generateBundle() {\n buildCatalogs(state);\n },\n };\n};\n\nexport { gtkxI18n };\n"]}
1
+ {"version":3,"file":"i18n.js","sourceRoot":"","sources":["../../src/vite-plugins/i18n.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ConfigLoader } from \"@gtkx/config\";\nimport type { Plugin, ResolvedConfig } from \"vite\";\nimport { createConfigLoader } from \"@gtkx/config/internal\";\nimport { isPathWithin, logger, toPosixPath } from \"@gtkx/utils\";\nimport { existsSync, mkdirSync } from \"node:fs\";\nimport { createRequire } from \"node:module\";\nimport { dirname, join, posix, relative, resolve } from \"node:path\";\nimport {\n type CatalogProject,\n compileCatalogs,\n LOCALE_DIRNAME,\n resolveCatalogProject,\n synchronizeCatalogs,\n} from \"../i18n/catalogs.js\";\nimport { extractSourceCatalog, SourceExtractionError } from \"../i18n/source-messages.js\";\nimport { emitI18nTypes } from \"../i18n/types.js\";\nimport { discoverSourceFiles, sourceLanguage } from \"../internal/source-imports.js\";\nimport { stripQuery } from \"./strip-query.js\";\n\ntype I18nState = {\n entryPath: string;\n i18nRoot: string;\n outDir: string;\n project: CatalogProject | null;\n extraction: Promise<void>;\n hotUpdateTimestamp: number | null;\n};\n\nconst BOOTSTRAP_SPECIFIER = \"@gtkx/i18n/bootstrap\";\nconst LOCALE_URL_PLACEHOLDER = \"__GTKX_BUNDLE_LOCALE_DIR__\";\nconst LOCALE_MODULE_PATHS = new Set([\"dist/locale.js\", \"src/locale.ts\"]);\nconst LOCALE_URL_PATTERN = /new URL\\(([\"'])locale\\1,\\s*import\\.meta\\.url\\)/;\n\nconst isI18nLocaleModule = (state: I18nState, id: string): boolean => {\n if (state.i18nRoot.length === 0) {\n return false;\n }\n\n const path = toPosixPath(relative(state.i18nRoot, stripQuery(id)));\n\n return LOCALE_MODULE_PATHS.has(path);\n};\n\nconst markLocaleUrl = (code: string): string =>\n code.replace(\n LOCALE_URL_PATTERN,\n () => `new URL(${JSON.stringify(LOCALE_URL_PLACEHOLDER)}, import.meta.url)`,\n );\n\nconst localeUrlForChunk = (fileName: string): string => {\n const path = posix.relative(posix.dirname(fileName), LOCALE_DIRNAME);\n\n return path.length === 0 ? \".\" : path;\n};\n\nconst rebaseLocaleUrl = (state: I18nState, code: string, fileName: string, moduleIds: string[]): string | null => {\n if (moduleIds.every((id) => !isI18nLocaleModule(state, id))) {\n return null;\n }\n\n const placeholder = JSON.stringify(LOCALE_URL_PLACEHOLDER);\n\n if (!code.includes(placeholder)) {\n throw new Error(`Unable to locate the @gtkx/i18n locale fallback in ${fileName}`);\n }\n\n return code.replace(placeholder, () => JSON.stringify(localeUrlForChunk(fileName)));\n};\n\nconst applyResolvedConfig = async (\n state: I18nState,\n config: ResolvedConfig,\n loadConfig: ConfigLoader,\n): Promise<void> => {\n state.entryPath = resolve(config.root, state.entryPath);\n state.outDir = resolve(config.root, config.build.outDir);\n const application = await loadConfig.resolve(config.root);\n state.project = resolveCatalogProject(config.root, application.applicationId);\n\n if (state.project !== null) {\n const projectRequire = createRequire(resolve(config.root, \"package.json\"));\n state.i18nRoot = dirname(projectRequire.resolve(\"@gtkx/i18n/package.json\"));\n }\n};\n\nconst buildCatalogs = (state: I18nState): void => {\n const project = state.project;\n\n if (project === null) {\n return;\n }\n\n mkdirSync(state.outDir, { recursive: true });\n compileCatalogs(project, resolve(state.outDir, LOCALE_DIRNAME));\n};\n\nconst extractProjectMessages = async (\n state: I18nState,\n shouldPreserveMetadataMessages: boolean,\n shouldSynchronizeCatalogs: boolean,\n): Promise<void> => {\n const project = state.project;\n\n if (project === null) {\n return;\n }\n\n const srcDir = join(project.root, \"src\");\n const sourceFiles = discoverSourceFiles(existsSync(srcDir) ? srcDir : project.root);\n await extractSourceCatalog(project, sourceFiles, shouldPreserveMetadataMessages);\n\n if (shouldSynchronizeCatalogs) {\n synchronizeCatalogs(project);\n }\n\n await emitI18nTypes(project.root);\n};\n\nconst settleExtraction = async (pending: Promise<void>): Promise<void> => {\n try {\n await pending;\n } catch {\n return;\n }\n};\n\nconst queueExtraction = (\n state: I18nState,\n shouldPreserveMetadataMessages: boolean,\n shouldSynchronizeCatalogs: boolean,\n): Promise<void> => {\n const prior = state.extraction;\n const pending = (async (): Promise<void> => {\n await settleExtraction(prior);\n await extractProjectMessages(\n state,\n shouldPreserveMetadataMessages,\n shouldSynchronizeCatalogs,\n );\n })();\n\n state.extraction = pending;\n\n return pending;\n};\n\nconst isProjectSource = (state: I18nState, path: string): boolean => {\n const project = state.project;\n\n if (project === null || sourceLanguage(path) === undefined) {\n return false;\n }\n\n const srcDir = join(project.root, \"src\");\n const sourceRoot = existsSync(srcDir) ? srcDir : project.root;\n\n return isPathWithin(sourceRoot, path);\n};\n\nconst refreshProjectMessages = async (\n state: I18nState,\n shouldPreserveMetadataMessages: boolean,\n shouldSynchronizeCatalogs = false,\n): Promise<void> => {\n try {\n await queueExtraction(state, shouldPreserveMetadataMessages, shouldSynchronizeCatalogs);\n } catch (error) {\n logger.error(error instanceof Error ? error.message : String(error));\n }\n};\n\nconst recoverInitialSourceExtraction = async (\n state: I18nState,\n shouldPreserveMetadataMessages: boolean,\n): Promise<void> => {\n try {\n await queueExtraction(state, shouldPreserveMetadataMessages, true);\n } catch (error) {\n if (!(error instanceof SourceExtractionError)) {\n throw error;\n }\n\n logger.error(error.message);\n }\n};\n\nconst gtkxI18n = (\n entryPath: string,\n loadConfig: ConfigLoader = createConfigLoader(),\n shouldPreserveMetadataMessages = true,\n shouldRecoverExtractionErrors = false,\n): Plugin => {\n const state: I18nState = {\n entryPath,\n extraction: Promise.resolve(),\n hotUpdateTimestamp: null,\n i18nRoot: \"\",\n outDir: \"\",\n project: null,\n };\n\n return {\n name: \"gtkx:i18n\",\n enforce: \"pre\",\n\n configResolved: (config) => applyResolvedConfig(state, config, loadConfig),\n\n buildStart: () => shouldRecoverExtractionErrors\n ? recoverInitialSourceExtraction(state, shouldPreserveMetadataMessages)\n : queueExtraction(state, shouldPreserveMetadataMessages, true),\n\n hotUpdate(options) {\n if (!isProjectSource(state, options.file) || state.hotUpdateTimestamp === options.timestamp) {\n return;\n }\n\n state.hotUpdateTimestamp = options.timestamp;\n\n return refreshProjectMessages(state, shouldPreserveMetadataMessages);\n },\n\n transform(code, id) {\n if (isI18nLocaleModule(state, id)) {\n return markLocaleUrl(code);\n }\n\n if (state.project === null || resolve(stripQuery(id)) !== state.entryPath) {\n return;\n }\n\n return `import ${JSON.stringify(BOOTSTRAP_SPECIFIER)};\\n${code}`;\n },\n\n renderChunk(code, chunk) {\n return rebaseLocaleUrl(state, code, chunk.fileName, chunk.moduleIds);\n },\n\n generateBundle() {\n buildCatalogs(state);\n },\n };\n};\n\nexport { gtkxI18n };\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/vite-plugins/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAGnC,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAY5E,KAAK,qBAAqB,GAAG;IACzB,aAAa,CAAC,EAAE,sBAAsB,GAAG,SAAS,CAAC;IACnD,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,0BAA0B,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CACpD,CAAC;AAEF,QAAA,MAAM,eAAe,GAAI,UAAS,qBAA0B,KAAG,MAAM,EAoBpE,CAAC;AAEF,OAAO,EAAE,eAAe,EAAE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/vite-plugins/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAGnC,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAY5E,KAAK,qBAAqB,GAAG;IACzB,aAAa,CAAC,EAAE,sBAAsB,GAAG,SAAS,CAAC;IACnD,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,0BAA0B,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CACpD,CAAC;AAEF,QAAA,MAAM,eAAe,GAAI,UAAS,qBAA0B,KAAG,MAAM,EA2BpE,CAAC;AAEF,OAAO,EAAE,eAAe,EAAE,CAAC"}
@@ -18,7 +18,9 @@ const gtkxVitePlugins = (options = {}) => {
18
18
  });
19
19
  return [
20
20
  createConfigPlugin({ name: "gtkx:config", loadConfig }),
21
- ...(entryPath === undefined ? [] : [gtkxI18n(entryPath, loadConfig, shouldPreserveI18nMetadata)]),
21
+ ...(entryPath === undefined
22
+ ? []
23
+ : [gtkxI18n(entryPath, loadConfig, shouldPreserveI18nMetadata, mode === "development")]),
22
24
  gtkxStoreLinks(),
23
25
  gtkxUndeclaredLibrary(loadConfig),
24
26
  gtkxSettings(buildManifest),
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/vite-plugins/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,kBAAkB,MAAM,0BAA0B,CAAC;AAE1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAUhE,MAAM,eAAe,GAAG,CAAC,UAAiC,EAAE,EAAY,EAAE;IACtE,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,IAAI,EAAE,0BAA0B,GAAG,IAAI,EAAE,GAAG,OAAO,CAAC;IAClG,MAAM,UAAU,GAAG,kBAAkB,CAAC;QAClC,GAAG,CAAC,IAAI,KAAK,SAAS,IAAI,EAAE,IAAI,EAAE,CAAC;QACnC,GAAG,CAAC,UAAU,KAAK,SAAS,IAAI,EAAE,UAAU,EAAE,CAAC;KAClD,CAAC,CAAC;IAEH,OAAO;QACH,kBAAkB,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,UAAU,EAAE,CAAC;QACvD,GAAG,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,EAAE,UAAU,EAAE,0BAA0B,CAAC,CAAC,CAAC;QACjG,cAAc,EAAE;QAChB,qBAAqB,CAAC,UAAU,CAAC;QACjC,YAAY,CAAC,aAAa,CAAC;QAC3B,SAAS,CAAC,UAAU,CAAC;QACrB,gBAAgB,EAAE;QAClB,YAAY,EAAE;QACd,aAAa,CAAC,UAAU,EAAE,SAAS,CAAC;QACpC,OAAO,EAAE;QACT,iBAAiB,CAAC,UAAU,CAAC;KAChC,CAAC;AACN,CAAC,CAAC;AAEF,OAAO,EAAE,eAAe,EAAE,CAAC","sourcesContent":["import type { Plugin } from \"vite\";\nimport { createConfigLoader } from \"@gtkx/config/internal\";\nimport createConfigPlugin from \"@gtkx/config/vite-plugin\";\nimport type { BuildManifestCollector } from \"../internal/build-manifest.js\";\nimport { gtkxAssetImports } from \"./asset-imports.js\";\nimport { gtkxBuiltUrl } from \"./built-url.js\";\nimport { gtkxCss } from \"./css.js\";\nimport { gtkxI18n } from \"./i18n.js\";\nimport { gtkxIcons } from \"./icons.js\";\nimport { gtkxReactCompiler } from \"./react-compiler.js\";\nimport { gtkxResources } from \"./resources.js\";\nimport { gtkxSettings } from \"./settings.js\";\nimport { gtkxStoreLinks } from \"./store-links.js\";\nimport { gtkxUndeclaredLibrary } from \"./undeclared-library.js\";\n\ntype GtkxVitePluginOptions = {\n buildManifest?: BuildManifestCollector | undefined;\n configFile?: string | undefined;\n entryPath?: string | undefined;\n mode?: string | undefined;\n shouldPreserveI18nMetadata?: boolean | undefined;\n};\n\nconst gtkxVitePlugins = (options: GtkxVitePluginOptions = {}): Plugin[] => {\n const { buildManifest, configFile, entryPath, mode, shouldPreserveI18nMetadata = true } = options;\n const loadConfig = createConfigLoader({\n ...(mode !== undefined && { mode }),\n ...(configFile !== undefined && { configFile }),\n });\n\n return [\n createConfigPlugin({ name: \"gtkx:config\", loadConfig }),\n ...(entryPath === undefined ? [] : [gtkxI18n(entryPath, loadConfig, shouldPreserveI18nMetadata)]),\n gtkxStoreLinks(),\n gtkxUndeclaredLibrary(loadConfig),\n gtkxSettings(buildManifest),\n gtkxIcons(loadConfig),\n gtkxAssetImports(),\n gtkxBuiltUrl(),\n gtkxResources(loadConfig, entryPath),\n gtkxCss(),\n gtkxReactCompiler(loadConfig),\n ];\n};\n\nexport { gtkxVitePlugins };\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/vite-plugins/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,kBAAkB,MAAM,0BAA0B,CAAC;AAE1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAUhE,MAAM,eAAe,GAAG,CAAC,UAAiC,EAAE,EAAY,EAAE;IACtE,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,IAAI,EAAE,0BAA0B,GAAG,IAAI,EAAE,GAAG,OAAO,CAAC;IAClG,MAAM,UAAU,GAAG,kBAAkB,CAAC;QAClC,GAAG,CAAC,IAAI,KAAK,SAAS,IAAI,EAAE,IAAI,EAAE,CAAC;QACnC,GAAG,CAAC,UAAU,KAAK,SAAS,IAAI,EAAE,UAAU,EAAE,CAAC;KAClD,CAAC,CAAC;IAEH,OAAO;QACH,kBAAkB,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,UAAU,EAAE,CAAC;QACvD,GAAG,CAAC,SAAS,KAAK,SAAS;YACvB,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,CAAC,QAAQ,CACH,SAAS,EACT,UAAU,EACV,0BAA0B,EAC1B,IAAI,KAAK,aAAa,CACzB,CAAC,CAAC;QACX,cAAc,EAAE;QAChB,qBAAqB,CAAC,UAAU,CAAC;QACjC,YAAY,CAAC,aAAa,CAAC;QAC3B,SAAS,CAAC,UAAU,CAAC;QACrB,gBAAgB,EAAE;QAClB,YAAY,EAAE;QACd,aAAa,CAAC,UAAU,EAAE,SAAS,CAAC;QACpC,OAAO,EAAE;QACT,iBAAiB,CAAC,UAAU,CAAC;KAChC,CAAC;AACN,CAAC,CAAC;AAEF,OAAO,EAAE,eAAe,EAAE,CAAC","sourcesContent":["import type { Plugin } from \"vite\";\nimport { createConfigLoader } from \"@gtkx/config/internal\";\nimport createConfigPlugin from \"@gtkx/config/vite-plugin\";\nimport type { BuildManifestCollector } from \"../internal/build-manifest.js\";\nimport { gtkxAssetImports } from \"./asset-imports.js\";\nimport { gtkxBuiltUrl } from \"./built-url.js\";\nimport { gtkxCss } from \"./css.js\";\nimport { gtkxI18n } from \"./i18n.js\";\nimport { gtkxIcons } from \"./icons.js\";\nimport { gtkxReactCompiler } from \"./react-compiler.js\";\nimport { gtkxResources } from \"./resources.js\";\nimport { gtkxSettings } from \"./settings.js\";\nimport { gtkxStoreLinks } from \"./store-links.js\";\nimport { gtkxUndeclaredLibrary } from \"./undeclared-library.js\";\n\ntype GtkxVitePluginOptions = {\n buildManifest?: BuildManifestCollector | undefined;\n configFile?: string | undefined;\n entryPath?: string | undefined;\n mode?: string | undefined;\n shouldPreserveI18nMetadata?: boolean | undefined;\n};\n\nconst gtkxVitePlugins = (options: GtkxVitePluginOptions = {}): Plugin[] => {\n const { buildManifest, configFile, entryPath, mode, shouldPreserveI18nMetadata = true } = options;\n const loadConfig = createConfigLoader({\n ...(mode !== undefined && { mode }),\n ...(configFile !== undefined && { configFile }),\n });\n\n return [\n createConfigPlugin({ name: \"gtkx:config\", loadConfig }),\n ...(entryPath === undefined\n ? []\n : [gtkxI18n(\n entryPath,\n loadConfig,\n shouldPreserveI18nMetadata,\n mode === \"development\",\n )]),\n gtkxStoreLinks(),\n gtkxUndeclaredLibrary(loadConfig),\n gtkxSettings(buildManifest),\n gtkxIcons(loadConfig),\n gtkxAssetImports(),\n gtkxBuiltUrl(),\n gtkxResources(loadConfig, entryPath),\n gtkxCss(),\n gtkxReactCompiler(loadConfig),\n ];\n};\n\nexport { gtkxVitePlugins };\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"native.d.ts","sourceRoot":"","sources":["../../src/vite-plugins/native.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AA2EnC,iBAAS,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAgCxC;AAED,OAAO,EAAE,UAAU,EAAE,CAAC"}
1
+ {"version":3,"file":"native.d.ts","sourceRoot":"","sources":["../../src/vite-plugins/native.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AA0EnC,iBAAS,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CA4BxC;AAED,OAAO,EAAE,UAAU,EAAE,CAAC"}