@gtkx/cli 1.6.0 → 2.0.0-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -5
- package/dist/builder.d.ts +1 -0
- package/dist/builder.d.ts.map +1 -1
- package/dist/builder.js +17 -5
- package/dist/builder.js.map +1 -1
- package/dist/cli.js +2 -0
- package/dist/cli.js.map +1 -1
- package/dist/codegen/freshness.d.ts.map +1 -1
- package/dist/codegen/freshness.js +45 -16
- package/dist/codegen/freshness.js.map +1 -1
- package/dist/codegen/reference.d.ts.map +1 -1
- package/dist/codegen/reference.js +1 -7
- package/dist/codegen/reference.js.map +1 -1
- package/dist/codegen/report.d.ts.map +1 -1
- package/dist/codegen/report.js +5 -16
- package/dist/codegen/report.js.map +1 -1
- package/dist/codegen/run-codegen.d.ts +7 -7
- package/dist/codegen/run-codegen.d.ts.map +1 -1
- package/dist/codegen/run-codegen.js +35 -107
- package/dist/codegen/run-codegen.js.map +1 -1
- package/dist/codegen/store-resolver.d.ts +1 -2
- package/dist/codegen/store-resolver.d.ts.map +1 -1
- package/dist/codegen/store-resolver.js +10 -19
- package/dist/codegen/store-resolver.js.map +1 -1
- package/dist/commands/build.d.ts +5 -0
- package/dist/commands/build.d.ts.map +1 -1
- package/dist/commands/build.js +83 -10
- package/dist/commands/build.js.map +1 -1
- package/dist/commands/codegen.d.ts +1 -0
- package/dist/commands/codegen.d.ts.map +1 -1
- package/dist/commands/codegen.js +6 -5
- package/dist/commands/codegen.js.map +1 -1
- package/dist/commands/deploy.d.ts +1 -0
- package/dist/commands/deploy.d.ts.map +1 -1
- package/dist/commands/deploy.js +4 -2
- package/dist/commands/deploy.js.map +1 -1
- package/dist/commands/dev.d.ts +8 -0
- package/dist/commands/dev.d.ts.map +1 -1
- package/dist/commands/dev.js +19 -1
- package/dist/commands/dev.js.map +1 -1
- package/dist/commands/docs.d.ts.map +1 -1
- package/dist/commands/docs.js +5 -15
- package/dist/commands/docs.js.map +1 -1
- package/dist/deploy/freedesktop/copyright.d.ts.map +1 -1
- package/dist/deploy/freedesktop/copyright.js +2 -13
- package/dist/deploy/freedesktop/copyright.js.map +1 -1
- package/dist/deploy/freedesktop/metainfo.d.ts.map +1 -1
- package/dist/deploy/freedesktop/metainfo.js +41 -2
- package/dist/deploy/freedesktop/metainfo.js.map +1 -1
- package/dist/deploy/freedesktop/xml.d.ts.map +1 -1
- package/dist/deploy/freedesktop/xml.js +21 -25
- package/dist/deploy/freedesktop/xml.js.map +1 -1
- package/dist/deploy/nfpm/config.d.ts.map +1 -1
- package/dist/deploy/nfpm/config.js +5 -2
- package/dist/deploy/nfpm/config.js.map +1 -1
- package/dist/deploy/nfpm/contents.d.ts.map +1 -1
- package/dist/deploy/nfpm/contents.js +8 -0
- package/dist/deploy/nfpm/contents.js.map +1 -1
- package/dist/deploy/node-runtime/elf.d.ts +2 -1
- package/dist/deploy/node-runtime/elf.d.ts.map +1 -1
- package/dist/deploy/node-runtime/elf.js +32 -5
- package/dist/deploy/node-runtime/elf.js.map +1 -1
- package/dist/deploy/node-runtime/index.d.ts +2 -1
- package/dist/deploy/node-runtime/index.d.ts.map +1 -1
- package/dist/deploy/node-runtime/index.js +73 -4
- package/dist/deploy/node-runtime/index.js.map +1 -1
- package/dist/deploy/node-runtime/license.d.ts.map +1 -1
- package/dist/deploy/node-runtime/license.js +2 -9
- package/dist/deploy/node-runtime/license.js.map +1 -1
- package/dist/deploy/notices/node-runtime.js +2 -2
- package/dist/deploy/notices/node-runtime.js.map +1 -1
- package/dist/deploy/notices/packages.d.ts.map +1 -1
- package/dist/deploy/notices/packages.js +3 -10
- package/dist/deploy/notices/packages.js.map +1 -1
- package/dist/deploy/payload/copy-tree.d.ts.map +1 -1
- package/dist/deploy/payload/copy-tree.js +3 -3
- package/dist/deploy/payload/copy-tree.js.map +1 -1
- package/dist/deploy/payload/launcher.d.ts.map +1 -1
- package/dist/deploy/payload/launcher.js +14 -1
- package/dist/deploy/payload/launcher.js.map +1 -1
- package/dist/deploy/payload/stage.d.ts.map +1 -1
- package/dist/deploy/payload/stage.js +2 -4
- package/dist/deploy/payload/stage.js.map +1 -1
- package/dist/deploy/run-deploy.d.ts +1 -0
- package/dist/deploy/run-deploy.d.ts.map +1 -1
- package/dist/deploy/run-deploy.js +100 -14
- package/dist/deploy/run-deploy.js.map +1 -1
- package/dist/deploy/settings/build-manifest.d.ts +6 -1
- package/dist/deploy/settings/build-manifest.d.ts.map +1 -1
- package/dist/deploy/settings/build-manifest.js +17 -17
- package/dist/deploy/settings/build-manifest.js.map +1 -1
- package/dist/deploy/settings/extra-files.d.ts +1 -1
- package/dist/deploy/settings/extra-files.d.ts.map +1 -1
- package/dist/deploy/settings/extra-files.js +22 -1
- package/dist/deploy/settings/extra-files.js.map +1 -1
- package/dist/deploy/settings/index.d.ts +1 -0
- package/dist/deploy/settings/index.d.ts.map +1 -1
- package/dist/deploy/settings/index.js +2 -1
- package/dist/deploy/settings/index.js.map +1 -1
- package/dist/deploy/settings/libraries.d.ts.map +1 -1
- package/dist/deploy/settings/libraries.js +2 -19
- package/dist/deploy/settings/libraries.js.map +1 -1
- package/dist/deploy/settings/paths.d.ts +2 -2
- package/dist/deploy/settings/paths.d.ts.map +1 -1
- package/dist/deploy/settings/paths.js +110 -12
- package/dist/deploy/settings/paths.js.map +1 -1
- package/dist/deploy/settings/screenshots.d.ts.map +1 -1
- package/dist/deploy/settings/screenshots.js +6 -31
- package/dist/deploy/settings/screenshots.js.map +1 -1
- package/dist/deploy/targets/flatpak-pnpm.js +4 -4
- package/dist/deploy/targets/flatpak-pnpm.js.map +1 -1
- package/dist/deploy/targets/flatpak-source.d.ts.map +1 -1
- package/dist/deploy/targets/flatpak-source.js +15 -6
- package/dist/deploy/targets/flatpak-source.js.map +1 -1
- package/dist/deploy/targets/flatpak-sources.js +1 -1
- package/dist/deploy/targets/flatpak-sources.js.map +1 -1
- package/dist/deploy/types.d.ts +1 -0
- package/dist/deploy/types.d.ts.map +1 -1
- package/dist/deploy/types.js.map +1 -1
- package/dist/dev/headless.d.ts +3 -0
- package/dist/dev/headless.d.ts.map +1 -0
- package/dist/dev/headless.js +35 -0
- package/dist/dev/headless.js.map +1 -0
- package/dist/dev/runner-deps.js +1 -1
- package/dist/dev/runner-deps.js.map +1 -1
- package/dist/dev/runner-main.d.ts.map +1 -1
- package/dist/dev/runner-main.js +1 -2
- package/dist/dev/runner-main.js.map +1 -1
- package/dist/dev/schema-dir.d.ts +1 -1
- package/dist/dev/schema-dir.d.ts.map +1 -1
- package/dist/dev/schema-dir.js +2 -4
- package/dist/dev/schema-dir.js.map +1 -1
- package/dist/i18n/catalogs.d.ts.map +1 -1
- package/dist/i18n/catalogs.js +2 -1
- package/dist/i18n/catalogs.js.map +1 -1
- package/dist/i18n/metadata-templates.d.ts.map +1 -1
- package/dist/i18n/metadata-templates.js +2 -1
- package/dist/i18n/metadata-templates.js.map +1 -1
- package/dist/i18n/source-messages.d.ts +3 -21
- package/dist/i18n/source-messages.d.ts.map +1 -1
- package/dist/i18n/source-messages.js +900 -85
- package/dist/i18n/source-messages.js.map +1 -1
- package/dist/i18n/types.d.ts +6 -7
- package/dist/i18n/types.d.ts.map +1 -1
- package/dist/i18n/types.js +83 -96
- package/dist/i18n/types.js.map +1 -1
- package/dist/internal/build-manifest.d.ts +5 -2
- package/dist/internal/build-manifest.d.ts.map +1 -1
- package/dist/internal/build-manifest.js +15 -2
- package/dist/internal/build-manifest.js.map +1 -1
- package/dist/internal/build-output.d.ts +8 -0
- package/dist/internal/build-output.d.ts.map +1 -0
- package/dist/internal/build-output.js +69 -0
- package/dist/internal/build-output.js.map +1 -0
- package/dist/internal/docs-elements.js +2 -2
- package/dist/internal/docs-elements.js.map +1 -1
- package/dist/internal/entry-arg.d.ts +4 -1
- package/dist/internal/entry-arg.d.ts.map +1 -1
- package/dist/internal/entry-arg.js +7 -1
- package/dist/internal/entry-arg.js.map +1 -1
- package/dist/internal/icon-path.d.ts.map +1 -1
- package/dist/internal/icon-path.js +5 -16
- package/dist/internal/icon-path.js.map +1 -1
- package/dist/internal/output-directory.d.ts +15 -0
- package/dist/internal/output-directory.d.ts.map +1 -0
- package/dist/internal/output-directory.js +490 -0
- package/dist/internal/output-directory.js.map +1 -0
- package/dist/internal/prepare-project.d.ts +2 -0
- package/dist/internal/prepare-project.d.ts.map +1 -1
- package/dist/internal/prepare-project.js +3 -3
- package/dist/internal/prepare-project.js.map +1 -1
- package/dist/internal/source-imports.d.ts.map +1 -1
- package/dist/internal/source-imports.js +10 -41
- package/dist/internal/source-imports.js.map +1 -1
- package/dist/mcp/client.js +2 -2
- package/dist/mcp/client.js.map +1 -1
- package/dist/settings/render.d.ts +0 -1
- package/dist/settings/render.d.ts.map +1 -1
- package/dist/settings/render.js +1 -11
- package/dist/settings/render.js.map +1 -1
- package/dist/settings/schema.d.ts +2 -2
- package/dist/settings/schema.d.ts.map +1 -1
- package/dist/settings/schema.js +21 -62
- package/dist/settings/schema.js.map +1 -1
- package/dist/vite-plugins/asset-imports.d.ts +1 -2
- package/dist/vite-plugins/asset-imports.d.ts.map +1 -1
- package/dist/vite-plugins/asset-imports.js +19 -32
- package/dist/vite-plugins/asset-imports.js.map +1 -1
- package/dist/vite-plugins/asset-specifier.d.ts +1 -3
- package/dist/vite-plugins/asset-specifier.d.ts.map +1 -1
- package/dist/vite-plugins/asset-specifier.js +1 -4
- package/dist/vite-plugins/asset-specifier.js.map +1 -1
- package/dist/vite-plugins/build-manifest.d.ts +5 -1
- package/dist/vite-plugins/build-manifest.d.ts.map +1 -1
- package/dist/vite-plugins/build-manifest.js +2 -1
- package/dist/vite-plugins/build-manifest.js.map +1 -1
- package/dist/vite-plugins/i18n.d.ts.map +1 -1
- package/dist/vite-plugins/i18n.js +59 -6
- package/dist/vite-plugins/i18n.js.map +1 -1
- package/dist/vite-plugins/index.d.ts +8 -1
- package/dist/vite-plugins/index.d.ts.map +1 -1
- package/dist/vite-plugins/index.js +8 -6
- package/dist/vite-plugins/index.js.map +1 -1
- package/dist/vite-plugins/resources.d.ts.map +1 -1
- package/dist/vite-plugins/resources.js +32 -97
- package/dist/vite-plugins/resources.js.map +1 -1
- package/dist/vite-plugins/self-contained.d.ts.map +1 -1
- package/dist/vite-plugins/self-contained.js +159 -158
- package/dist/vite-plugins/self-contained.js.map +1 -1
- package/dist/vite-plugins/settings-worker-env.d.ts.map +1 -1
- package/dist/vite-plugins/settings-worker-env.js +2 -4
- package/dist/vite-plugins/settings-worker-env.js.map +1 -1
- package/dist/vite-plugins/settings.d.ts +1 -2
- package/dist/vite-plugins/settings.d.ts.map +1 -1
- package/dist/vite-plugins/settings.js +8 -14
- package/dist/vite-plugins/settings.js.map +1 -1
- package/dist/vite-plugins/undeclared-library.d.ts.map +1 -1
- package/dist/vite-plugins/undeclared-library.js +10 -13
- package/dist/vite-plugins/undeclared-library.js.map +1 -1
- package/dist/vite-plugins/worker.d.ts.map +1 -1
- package/dist/vite-plugins/worker.js +0 -1
- package/dist/vite-plugins/worker.js.map +1 -1
- package/package.json +21 -15
- package/src/builder.ts +18 -5
- package/src/cli.ts +3 -0
- package/src/codegen/freshness.ts +66 -17
- package/src/codegen/reference.ts +1 -8
- package/src/codegen/report.ts +5 -21
- package/src/codegen/run-codegen.ts +42 -151
- package/src/codegen/store-resolver.ts +10 -26
- package/src/commands/build.ts +13 -2
- package/src/commands/codegen.ts +6 -5
- package/src/commands/deploy.ts +4 -2
- package/src/commands/dev.ts +20 -1
- package/src/commands/docs.ts +5 -17
- package/src/deploy/freedesktop/copyright.ts +2 -14
- package/src/deploy/freedesktop/metainfo.ts +73 -21
- package/src/deploy/freedesktop/xml.ts +24 -32
- package/src/deploy/nfpm/config.ts +5 -2
- package/src/deploy/nfpm/contents.ts +8 -0
- package/src/deploy/node-runtime/elf.ts +43 -5
- package/src/deploy/node-runtime/index.ts +105 -5
- package/src/deploy/node-runtime/license.ts +2 -8
- package/src/deploy/notices/node-runtime.ts +2 -2
- package/src/deploy/notices/packages.ts +3 -11
- package/src/deploy/payload/copy-tree.ts +3 -4
- package/src/deploy/payload/launcher.ts +20 -1
- package/src/deploy/payload/stage.ts +3 -7
- package/src/deploy/run-deploy.ts +56 -16
- package/src/deploy/settings/build-manifest.ts +30 -17
- package/src/deploy/settings/extra-files.ts +26 -2
- package/src/deploy/settings/index.ts +3 -1
- package/src/deploy/settings/libraries.ts +1 -22
- package/src/deploy/settings/paths.ts +68 -13
- package/src/deploy/settings/screenshots.ts +8 -46
- package/src/deploy/targets/flatpak-pnpm.ts +4 -4
- package/src/deploy/targets/flatpak-source.ts +17 -6
- package/src/deploy/targets/flatpak-sources.ts +1 -1
- package/src/deploy/types.ts +1 -0
- package/src/dev/headless.ts +40 -0
- package/src/dev/runner-deps.ts +1 -1
- package/src/dev/runner-main.ts +1 -2
- package/src/dev/schema-dir.ts +2 -4
- package/src/i18n/catalogs.ts +2 -1
- package/src/i18n/metadata-templates.ts +2 -1
- package/src/i18n/source-messages.ts +1442 -262
- package/src/i18n/types.ts +97 -131
- package/src/internal/build-manifest.ts +25 -1
- package/src/internal/build-output.ts +99 -0
- package/src/internal/docs-elements.ts +2 -2
- package/src/internal/entry-arg.ts +8 -1
- package/src/internal/icon-path.ts +6 -19
- package/src/internal/output-directory.ts +699 -0
- package/src/internal/prepare-project.ts +5 -5
- package/src/internal/source-imports.ts +14 -50
- package/src/mcp/client.ts +2 -2
- package/src/settings/render.ts +1 -13
- package/src/settings/schema.ts +19 -81
- package/src/vite-plugins/asset-imports.ts +20 -44
- package/src/vite-plugins/asset-specifier.ts +0 -5
- package/src/vite-plugins/build-manifest.ts +7 -1
- package/src/vite-plugins/i18n.ts +87 -5
- package/src/vite-plugins/index.ts +16 -11
- package/src/vite-plugins/resources.ts +37 -140
- package/src/vite-plugins/self-contained.ts +184 -185
- package/src/vite-plugins/settings-worker-env.ts +2 -4
- package/src/vite-plugins/settings.ts +11 -20
- package/src/vite-plugins/undeclared-library.ts +14 -20
- package/src/vite-plugins/worker.ts +0 -1
- package/dist/i18n/binding-extractor.d.ts +0 -30
- package/dist/i18n/binding-extractor.d.ts.map +0 -1
- package/dist/i18n/binding-extractor.js +0 -1324
- package/dist/i18n/binding-extractor.js.map +0 -1
- package/dist/i18n/extractor-plugin.d.ts +0 -8
- package/dist/i18n/extractor-plugin.d.ts.map +0 -1
- package/dist/i18n/extractor-plugin.js +0 -247
- package/dist/i18n/extractor-plugin.js.map +0 -1
- package/dist/internal/data-dir.d.ts +0 -4
- package/dist/internal/data-dir.d.ts.map +0 -1
- package/dist/internal/data-dir.js +0 -52
- package/dist/internal/data-dir.js.map +0 -1
- package/dist/vite-plugins/animated.d.ts +0 -5
- package/dist/vite-plugins/animated.d.ts.map +0 -1
- package/dist/vite-plugins/animated.js +0 -325
- package/dist/vite-plugins/animated.js.map +0 -1
- package/src/i18n/binding-extractor.ts +0 -1969
- package/src/i18n/extractor-plugin.ts +0 -413
- package/src/internal/data-dir.ts +0 -70
- package/src/vite-plugins/animated.ts +0 -486
package/src/vite-plugins/i18n.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { ConfigLoader } from "@gtkx/config";
|
|
2
2
|
import type { Plugin, ResolvedConfig } from "vite";
|
|
3
3
|
import { createConfigLoader } from "@gtkx/config/internal";
|
|
4
|
+
import { isPathWithin, toPosixPath } from "@gtkx/utils";
|
|
4
5
|
import { existsSync, mkdirSync } from "node:fs";
|
|
5
6
|
import { createRequire } from "node:module";
|
|
6
7
|
import { dirname, join, posix, relative, resolve } from "node:path";
|
|
@@ -12,7 +13,8 @@ import {
|
|
|
12
13
|
synchronizeCatalogs,
|
|
13
14
|
} from "../i18n/catalogs.js";
|
|
14
15
|
import { extractSourceCatalog } from "../i18n/source-messages.js";
|
|
15
|
-
import {
|
|
16
|
+
import { emitI18nTypes } from "../i18n/types.js";
|
|
17
|
+
import { discoverSourceFiles, sourceLanguage } from "../internal/source-imports.js";
|
|
16
18
|
import { stripQuery } from "./strip-query.js";
|
|
17
19
|
|
|
18
20
|
type I18nState = {
|
|
@@ -20,6 +22,7 @@ type I18nState = {
|
|
|
20
22
|
i18nRoot: string;
|
|
21
23
|
outDir: string;
|
|
22
24
|
project: CatalogProject | null;
|
|
25
|
+
extraction: Promise<void>;
|
|
23
26
|
};
|
|
24
27
|
|
|
25
28
|
const BOOTSTRAP_SPECIFIER = "@gtkx/i18n/bootstrap";
|
|
@@ -32,7 +35,7 @@ const isI18nLocaleModule = (state: I18nState, id: string): boolean => {
|
|
|
32
35
|
return false;
|
|
33
36
|
}
|
|
34
37
|
|
|
35
|
-
const path = relative(state.i18nRoot, stripQuery(id))
|
|
38
|
+
const path = toPosixPath(relative(state.i18nRoot, stripQuery(id)));
|
|
36
39
|
|
|
37
40
|
return LOCALE_MODULE_PATHS.has(path);
|
|
38
41
|
};
|
|
@@ -93,6 +96,7 @@ const buildCatalogs = (state: I18nState): void => {
|
|
|
93
96
|
const extractProjectMessages = async (
|
|
94
97
|
state: I18nState,
|
|
95
98
|
shouldPreserveMetadataMessages: boolean,
|
|
99
|
+
shouldSynchronizeCatalogs: boolean,
|
|
96
100
|
): Promise<void> => {
|
|
97
101
|
const project = state.project;
|
|
98
102
|
|
|
@@ -103,7 +107,65 @@ const extractProjectMessages = async (
|
|
|
103
107
|
const srcDir = join(project.root, "src");
|
|
104
108
|
const sourceFiles = discoverSourceFiles(existsSync(srcDir) ? srcDir : project.root);
|
|
105
109
|
await extractSourceCatalog(project, sourceFiles, shouldPreserveMetadataMessages);
|
|
106
|
-
|
|
110
|
+
|
|
111
|
+
if (shouldSynchronizeCatalogs) {
|
|
112
|
+
synchronizeCatalogs(project);
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
await emitI18nTypes(project.root);
|
|
116
|
+
};
|
|
117
|
+
|
|
118
|
+
const settleExtraction = async (pending: Promise<void>): Promise<void> => {
|
|
119
|
+
try {
|
|
120
|
+
await pending;
|
|
121
|
+
} catch {
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
};
|
|
125
|
+
|
|
126
|
+
const queueExtraction = (
|
|
127
|
+
state: I18nState,
|
|
128
|
+
shouldPreserveMetadataMessages: boolean,
|
|
129
|
+
shouldSynchronizeCatalogs: boolean,
|
|
130
|
+
): Promise<void> => {
|
|
131
|
+
const prior = state.extraction;
|
|
132
|
+
const pending = (async (): Promise<void> => {
|
|
133
|
+
await settleExtraction(prior);
|
|
134
|
+
await extractProjectMessages(
|
|
135
|
+
state,
|
|
136
|
+
shouldPreserveMetadataMessages,
|
|
137
|
+
shouldSynchronizeCatalogs,
|
|
138
|
+
);
|
|
139
|
+
})();
|
|
140
|
+
|
|
141
|
+
state.extraction = pending;
|
|
142
|
+
|
|
143
|
+
return pending;
|
|
144
|
+
};
|
|
145
|
+
|
|
146
|
+
const isProjectSource = (state: I18nState, path: string): boolean => {
|
|
147
|
+
const project = state.project;
|
|
148
|
+
|
|
149
|
+
if (project === null || sourceLanguage(path) === undefined) {
|
|
150
|
+
return false;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
const srcDir = join(project.root, "src");
|
|
154
|
+
const sourceRoot = existsSync(srcDir) ? srcDir : project.root;
|
|
155
|
+
|
|
156
|
+
return isPathWithin(sourceRoot, path);
|
|
157
|
+
};
|
|
158
|
+
|
|
159
|
+
const refreshProjectMessages = async (
|
|
160
|
+
state: I18nState,
|
|
161
|
+
shouldPreserveMetadataMessages: boolean,
|
|
162
|
+
reportError: (message: string) => void,
|
|
163
|
+
): Promise<void> => {
|
|
164
|
+
try {
|
|
165
|
+
await queueExtraction(state, shouldPreserveMetadataMessages, false);
|
|
166
|
+
} catch (error) {
|
|
167
|
+
reportError(error instanceof Error ? error.message : String(error));
|
|
168
|
+
}
|
|
107
169
|
};
|
|
108
170
|
|
|
109
171
|
const gtkxI18n = (
|
|
@@ -111,7 +173,13 @@ const gtkxI18n = (
|
|
|
111
173
|
loadConfig: ConfigLoader = createConfigLoader(),
|
|
112
174
|
shouldPreserveMetadataMessages = true,
|
|
113
175
|
): Plugin => {
|
|
114
|
-
const state: I18nState = {
|
|
176
|
+
const state: I18nState = {
|
|
177
|
+
entryPath,
|
|
178
|
+
extraction: Promise.resolve(),
|
|
179
|
+
i18nRoot: "",
|
|
180
|
+
outDir: "",
|
|
181
|
+
project: null,
|
|
182
|
+
};
|
|
115
183
|
|
|
116
184
|
return {
|
|
117
185
|
name: "gtkx:i18n",
|
|
@@ -119,7 +187,21 @@ const gtkxI18n = (
|
|
|
119
187
|
|
|
120
188
|
configResolved: (config) => applyResolvedConfig(state, config, loadConfig),
|
|
121
189
|
|
|
122
|
-
buildStart: () =>
|
|
190
|
+
buildStart: () => queueExtraction(state, shouldPreserveMetadataMessages, true),
|
|
191
|
+
|
|
192
|
+
hotUpdate(options) {
|
|
193
|
+
if (!isProjectSource(state, options.file)) {
|
|
194
|
+
return;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
return refreshProjectMessages(
|
|
198
|
+
state,
|
|
199
|
+
shouldPreserveMetadataMessages,
|
|
200
|
+
(message) => {
|
|
201
|
+
options.server.config.logger.error(message);
|
|
202
|
+
},
|
|
203
|
+
);
|
|
204
|
+
},
|
|
123
205
|
|
|
124
206
|
transform(code, id) {
|
|
125
207
|
if (isI18nLocaleModule(state, id)) {
|
|
@@ -2,7 +2,6 @@ import type { Plugin } from "vite";
|
|
|
2
2
|
import { createConfigLoader } from "@gtkx/config/internal";
|
|
3
3
|
import createConfigPlugin from "@gtkx/config/vite-plugin";
|
|
4
4
|
import type { BuildManifestCollector } from "../internal/build-manifest.js";
|
|
5
|
-
import { gtkxAnimated } from "./animated.js";
|
|
6
5
|
import { gtkxAssetImports } from "./asset-imports.js";
|
|
7
6
|
import { gtkxBuiltUrl } from "./built-url.js";
|
|
8
7
|
import { gtkxCss } from "./css.js";
|
|
@@ -14,26 +13,32 @@ import { gtkxSettings } from "./settings.js";
|
|
|
14
13
|
import { gtkxStoreLinks } from "./store-links.js";
|
|
15
14
|
import { gtkxUndeclaredLibrary } from "./undeclared-library.js";
|
|
16
15
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
16
|
+
type GtkxVitePluginOptions = {
|
|
17
|
+
buildManifest?: BuildManifestCollector | undefined;
|
|
18
|
+
configFile?: string | undefined;
|
|
19
|
+
entryPath?: string | undefined;
|
|
20
|
+
mode?: string | undefined;
|
|
21
|
+
shouldPreserveI18nMetadata?: boolean | undefined;
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
const gtkxVitePlugins = (options: GtkxVitePluginOptions = {}): Plugin[] => {
|
|
25
|
+
const { buildManifest, configFile, entryPath, mode, shouldPreserveI18nMetadata = true } = options;
|
|
26
|
+
const loadConfig = createConfigLoader({
|
|
27
|
+
...(mode !== undefined && { mode }),
|
|
28
|
+
...(configFile !== undefined && { configFile }),
|
|
29
|
+
});
|
|
24
30
|
|
|
25
31
|
return [
|
|
26
32
|
createConfigPlugin({ name: "gtkx:config", loadConfig }),
|
|
27
33
|
...(entryPath === undefined ? [] : [gtkxI18n(entryPath, loadConfig, shouldPreserveI18nMetadata)]),
|
|
28
34
|
gtkxStoreLinks(),
|
|
29
35
|
gtkxUndeclaredLibrary(loadConfig),
|
|
30
|
-
gtkxSettings(
|
|
36
|
+
gtkxSettings(buildManifest),
|
|
31
37
|
gtkxIcons(loadConfig),
|
|
32
|
-
gtkxAssetImports(
|
|
38
|
+
gtkxAssetImports(),
|
|
33
39
|
gtkxBuiltUrl(),
|
|
34
40
|
gtkxResources(loadConfig, entryPath),
|
|
35
41
|
gtkxCss(),
|
|
36
|
-
gtkxAnimated(loadConfig),
|
|
37
42
|
gtkxReactCompiler(loadConfig),
|
|
38
43
|
];
|
|
39
44
|
};
|
|
@@ -1,20 +1,17 @@
|
|
|
1
1
|
import type { ConfigLoader } from "@gtkx/config";
|
|
2
2
|
import type { ModuleNode, Plugin, ResolvedConfig, Rolldown, UserConfig, ViteDevServer } from "vite";
|
|
3
|
-
import { createConfigLoader,
|
|
4
|
-
import { error, info, isRecord, sortStrings } from "@gtkx/utils";
|
|
3
|
+
import { createConfigLoader, resourceBasePath } from "@gtkx/config/internal";
|
|
4
|
+
import { error, info, isPathInside, isRecord, sortStrings, toPosixPath } from "@gtkx/utils";
|
|
5
5
|
import { copyFileSync, existsSync, mkdirSync, readFileSync, rmSync, writeFileSync } from "node:fs";
|
|
6
6
|
import { basename, dirname, extname, isAbsolute, join, posix, relative, sep } from "node:path";
|
|
7
7
|
import { parseSync } from "vite";
|
|
8
|
-
import {
|
|
9
|
-
import { type ListedFile, listFilesRecursive } from "../internal/list-files.js";
|
|
8
|
+
import { withExclusiveLoad } from "../internal/module-loads.js";
|
|
10
9
|
import { runCliTool } from "../internal/run-cli-tool.js";
|
|
11
10
|
import { parseRuntimeImportsIn, type SourceImport, sourceLanguage } from "../internal/source-imports.js";
|
|
12
11
|
import { createRetainedStagingDir, type RetainedStagingDir, withStagingDir } from "../internal/staging-dir.js";
|
|
13
12
|
import { ASSET_RE } from "./asset-extensions.js";
|
|
14
13
|
import {
|
|
15
|
-
DATA_PREFIX,
|
|
16
14
|
isBareRelativeAsset,
|
|
17
|
-
isDataAsset,
|
|
18
15
|
parseIconSpecifier,
|
|
19
16
|
parseResourceSpecifier,
|
|
20
17
|
} from "./asset-specifier.js";
|
|
@@ -44,7 +41,6 @@ type PluginState = {
|
|
|
44
41
|
prefix: string;
|
|
45
42
|
root: string;
|
|
46
43
|
isBuild: boolean;
|
|
47
|
-
isV2: boolean;
|
|
48
44
|
entries: Map<string, ResourceEntry>;
|
|
49
45
|
bundledSpecifiers: Map<string, Set<string>>;
|
|
50
46
|
moduleDependencies: Map<string, Set<string>>;
|
|
@@ -58,7 +54,6 @@ type PluginState = {
|
|
|
58
54
|
devBundlePath: string;
|
|
59
55
|
server: ViteDevServer | null;
|
|
60
56
|
compiledSignature: string;
|
|
61
|
-
dataDir: string | null;
|
|
62
57
|
bundleReferenceId: string | null;
|
|
63
58
|
iconOwners: Map<string, ResourceEntry>;
|
|
64
59
|
};
|
|
@@ -118,7 +113,7 @@ type DerivedIconEntry = {
|
|
|
118
113
|
resourcePath: string;
|
|
119
114
|
};
|
|
120
115
|
|
|
121
|
-
type
|
|
116
|
+
type ResolveRequest = {
|
|
122
117
|
source: string;
|
|
123
118
|
importer: string | undefined;
|
|
124
119
|
options: Record<string, unknown> | undefined;
|
|
@@ -128,6 +123,7 @@ const RESOURCE_COMPILER = "glib-compile-resources";
|
|
|
128
123
|
const MANIFEST_PREFIX = "/";
|
|
129
124
|
const DEV_STAGING_PREFIX = "resources-dev";
|
|
130
125
|
const MANIFEST_FILENAME = "package.json";
|
|
126
|
+
const DATA_PREFIX = "#data/";
|
|
131
127
|
const BUNDLED_QUERY_MENTION_RE = /[?&](?:icon|resource)(?:[=&]|$)/;
|
|
132
128
|
const ICON_EXTENSIONS: Set<string> = new Set([".png", ".svg", ".xpm"]);
|
|
133
129
|
|
|
@@ -164,16 +160,8 @@ const STOCK_ICON_CONTEXTS: Set<string> = new Set([
|
|
|
164
160
|
const ICON_SIZE_RE = /^([1-9]\d*)x\1(?:@[1-9]\d*)?$/;
|
|
165
161
|
const RESERVED_ICON_NAMES: Set<string> = new Set(["", ".", ".."]);
|
|
166
162
|
|
|
167
|
-
const toForwardSlashes = (value: string): string => value.replaceAll(/[/\\]/g, "/");
|
|
168
|
-
|
|
169
|
-
const isWithin = (root: string, path: string): boolean => {
|
|
170
|
-
const rel = relative(root, path);
|
|
171
|
-
|
|
172
|
-
return rel.length > 0 && !isAbsolute(rel) && rel !== ".." && !rel.startsWith(`..${sep}`);
|
|
173
|
-
};
|
|
174
|
-
|
|
175
163
|
const isDependencyFile = (root: string, path: string): boolean =>
|
|
176
|
-
|
|
164
|
+
isPathInside(root, path) && relative(root, path).split(sep).includes("node_modules");
|
|
177
165
|
|
|
178
166
|
const packageIdentityIn = (dir: string): string | null => {
|
|
179
167
|
try {
|
|
@@ -216,17 +204,17 @@ const validateResourcePath = (resourcePath: string): string => {
|
|
|
216
204
|
};
|
|
217
205
|
|
|
218
206
|
const derivedResourcePath = (state: PluginState, sourcePath: string): string => {
|
|
219
|
-
if (
|
|
220
|
-
return validateResourcePath(`${state.prefix}/${
|
|
207
|
+
if (isPathInside(state.root, sourcePath) && !isDependencyFile(state.root, sourcePath)) {
|
|
208
|
+
return validateResourcePath(`${state.prefix}/${toPosixPath(relative(state.root, sourcePath))}`);
|
|
221
209
|
}
|
|
222
210
|
|
|
223
211
|
const owner = packageForFile(sourcePath);
|
|
224
212
|
|
|
225
|
-
if (owner === null || !
|
|
213
|
+
if (owner === null || !isPathInside(owner.dir, sourcePath)) {
|
|
226
214
|
throw new Error(`${sourcePath} is outside the application and does not belong to a named package`);
|
|
227
215
|
}
|
|
228
216
|
|
|
229
|
-
const packagePath =
|
|
217
|
+
const packagePath = toPosixPath(relative(owner.dir, sourcePath));
|
|
230
218
|
|
|
231
219
|
return validateResourcePath(`${state.prefix}/${owner.name}/${packagePath}`);
|
|
232
220
|
};
|
|
@@ -292,7 +280,7 @@ const iconLayoutInParts = (parts: string[], beforeIndex: number): string | null
|
|
|
292
280
|
};
|
|
293
281
|
|
|
294
282
|
const iconLayoutFromTree = (sourcePath: string): string | null => {
|
|
295
|
-
const parts =
|
|
283
|
+
const parts = toPosixPath(sourcePath).split("/");
|
|
296
284
|
|
|
297
285
|
return iconLayoutInParts(parts, parts.length - 2);
|
|
298
286
|
};
|
|
@@ -335,11 +323,10 @@ const hasSideEffectIconImport = (code: string, id: string): boolean => {
|
|
|
335
323
|
};
|
|
336
324
|
|
|
337
325
|
const retainSideEffectIconImport = (
|
|
338
|
-
state: PluginState,
|
|
339
326
|
code: string,
|
|
340
327
|
id: string,
|
|
341
328
|
): { code: string; moduleSideEffects: true } | null =>
|
|
342
|
-
|
|
329
|
+
hasSideEffectIconImport(code, id)
|
|
343
330
|
? { code, moduleSideEffects: true }
|
|
344
331
|
: null;
|
|
345
332
|
|
|
@@ -430,20 +417,6 @@ const refreshRegisteredDevBundle = (state: PluginState): void => {
|
|
|
430
417
|
}
|
|
431
418
|
};
|
|
432
419
|
|
|
433
|
-
const scanDataAssets = (dataDir: string): ListedFile[] => listFilesRecursive(dataDir, (name) => ASSET_RE.test(name));
|
|
434
|
-
|
|
435
|
-
const primeLegacyDevBundle = (state: PluginState): void => {
|
|
436
|
-
if (state.dataDir === null) {
|
|
437
|
-
return;
|
|
438
|
-
}
|
|
439
|
-
|
|
440
|
-
for (const { absPath, rel } of scanDataAssets(state.dataDir)) {
|
|
441
|
-
registerEntry(state, absPath, rel);
|
|
442
|
-
}
|
|
443
|
-
|
|
444
|
-
compileDevBundle(state);
|
|
445
|
-
};
|
|
446
|
-
|
|
447
420
|
const registerDevAsset = (state: PluginState): void => {
|
|
448
421
|
if (entriesSignature(state) !== state.compiledSignature) {
|
|
449
422
|
compileDevBundle(state);
|
|
@@ -490,7 +463,7 @@ const activateEntry = (state: PluginState, entry: ResourceEntry): ResourceEntry
|
|
|
490
463
|
};
|
|
491
464
|
|
|
492
465
|
const isDeclarativeImporter = (state: PluginState, importer: string | undefined): importer is string =>
|
|
493
|
-
!state.isBuild &&
|
|
466
|
+
!state.isBuild && importer !== undefined;
|
|
494
467
|
|
|
495
468
|
const setSourceAvailability = (state: PluginState, file: string, isAvailable: boolean): void => {
|
|
496
469
|
if (isAvailable) {
|
|
@@ -713,26 +686,6 @@ const resolveIconEntry = async (
|
|
|
713
686
|
};
|
|
714
687
|
};
|
|
715
688
|
|
|
716
|
-
const resolveLegacyAssetEntry = async (
|
|
717
|
-
ctx: ResolveContext,
|
|
718
|
-
state: PluginState,
|
|
719
|
-
request: LegacyResolveRequest,
|
|
720
|
-
): Promise<ResourceEntry | undefined> => {
|
|
721
|
-
const resolved = await ctx.resolve(request.source, request.importer, { ...request.options, skipSelf: true });
|
|
722
|
-
|
|
723
|
-
if (!resolved || resolved.external) {
|
|
724
|
-
return undefined;
|
|
725
|
-
}
|
|
726
|
-
|
|
727
|
-
const sourcePath = stripQuery(resolved.id);
|
|
728
|
-
|
|
729
|
-
if (!isAbsolute(sourcePath)) {
|
|
730
|
-
return undefined;
|
|
731
|
-
}
|
|
732
|
-
|
|
733
|
-
return registerEntry(state, sourcePath, request.source.slice(DATA_PREFIX.length));
|
|
734
|
-
};
|
|
735
|
-
|
|
736
689
|
const loadInitModule = (state: PluginState): string => {
|
|
737
690
|
if (state.isBuild) {
|
|
738
691
|
if (state.bundleReferenceId === null) {
|
|
@@ -831,8 +784,7 @@ const loadAssetModule = (state: PluginState, virtualId: string): string => {
|
|
|
831
784
|
const { absPath, iconName, rel } = virtualAssetMetadata(virtualId);
|
|
832
785
|
const resourcePath = validateResourcePath(rel);
|
|
833
786
|
const { entry, isRegistered } = loadedResourceEntry(state, absPath, resourcePath);
|
|
834
|
-
const
|
|
835
|
-
const defaultValue = iconName ?? (state.isV2 ? entry.resourcePath : uri);
|
|
787
|
+
const defaultValue = iconName ?? entry.resourcePath;
|
|
836
788
|
compileLoadedDevAsset(state, isRegistered);
|
|
837
789
|
|
|
838
790
|
return [
|
|
@@ -899,12 +851,12 @@ const isSourceModule = (file: string): boolean => sourceLanguage(file) !== undef
|
|
|
899
851
|
const isBundledSource = (source: string): boolean =>
|
|
900
852
|
parseResourceSpecifier(source) !== null || parseIconSpecifier(source) !== null;
|
|
901
853
|
|
|
902
|
-
const
|
|
854
|
+
const validateUnbundledSource = (source: string): void => {
|
|
903
855
|
if (isLegacyDataSpecifier(source)) {
|
|
904
856
|
throw new Error(`${JSON.stringify(source)} uses the legacy #data asset form`);
|
|
905
857
|
}
|
|
906
858
|
|
|
907
|
-
|
|
859
|
+
rejectInvalidSpecifier(source);
|
|
908
860
|
};
|
|
909
861
|
|
|
910
862
|
const resolvedModuleDependency = async (
|
|
@@ -916,7 +868,7 @@ const resolvedModuleDependency = async (
|
|
|
916
868
|
return null;
|
|
917
869
|
}
|
|
918
870
|
|
|
919
|
-
|
|
871
|
+
validateUnbundledSource(source);
|
|
920
872
|
const resolved = await ctx.resolve(source, importer, { skipSelf: true });
|
|
921
873
|
|
|
922
874
|
if (resolved === null) {
|
|
@@ -952,7 +904,7 @@ const importerReconciliation = async (
|
|
|
952
904
|
const file = stripQuery(id);
|
|
953
905
|
const key = importerKey(file);
|
|
954
906
|
|
|
955
|
-
if (
|
|
907
|
+
if (state.isBuild || !isSourceModule(file)) {
|
|
956
908
|
return null;
|
|
957
909
|
}
|
|
958
910
|
|
|
@@ -1171,35 +1123,16 @@ const forgetImporterDeclarations = (state: PluginState, importer: string): void
|
|
|
1171
1123
|
state.declaredIcons.delete(importer);
|
|
1172
1124
|
};
|
|
1173
1125
|
|
|
1174
|
-
const
|
|
1175
|
-
|
|
1176
|
-
|
|
1177
|
-
for (const [key, values] of source) {
|
|
1178
|
-
clone.set(key, new Set(values));
|
|
1179
|
-
}
|
|
1180
|
-
|
|
1181
|
-
return clone;
|
|
1182
|
-
};
|
|
1183
|
-
|
|
1184
|
-
const cloneDeclarationMap = (
|
|
1185
|
-
source: Map<string, Map<string, ResourceEntry>>,
|
|
1186
|
-
): Map<string, Map<string, ResourceEntry>> => {
|
|
1187
|
-
const clone: Map<string, Map<string, ResourceEntry>> = new Map();
|
|
1188
|
-
|
|
1189
|
-
for (const [key, declarations] of source) {
|
|
1190
|
-
clone.set(key, new Map(declarations));
|
|
1191
|
-
}
|
|
1192
|
-
|
|
1193
|
-
return clone;
|
|
1194
|
-
};
|
|
1126
|
+
const cloneMapValues = <Value>(source: Map<string, Value>, clone: (value: Value) => Value): Map<string, Value> =>
|
|
1127
|
+
new Map([...source].map(([key, value]) => [key, clone(value)]));
|
|
1195
1128
|
|
|
1196
1129
|
const reconciliationCandidate = (state: PluginState): PluginState => ({
|
|
1197
1130
|
...state,
|
|
1198
|
-
bundledSpecifiers:
|
|
1199
|
-
moduleDependencies:
|
|
1200
|
-
prunedDependencies:
|
|
1201
|
-
declaredEntries:
|
|
1202
|
-
declaredIcons:
|
|
1131
|
+
bundledSpecifiers: cloneMapValues(state.bundledSpecifiers, (values) => new Set(values)),
|
|
1132
|
+
moduleDependencies: cloneMapValues(state.moduleDependencies, (values) => new Set(values)),
|
|
1133
|
+
prunedDependencies: cloneMapValues(state.prunedDependencies, (values) => new Set(values)),
|
|
1134
|
+
declaredEntries: cloneMapValues(state.declaredEntries, (entries) => new Map(entries)),
|
|
1135
|
+
declaredIcons: cloneMapValues(state.declaredIcons, (entries) => new Map(entries)),
|
|
1203
1136
|
missingSourcePaths: new Set(state.missingSourcePaths),
|
|
1204
1137
|
});
|
|
1205
1138
|
|
|
@@ -1333,7 +1266,7 @@ const commitReconciliation = (state: PluginState, candidate: PluginState): void
|
|
|
1333
1266
|
state.iconOwners = candidate.iconOwners;
|
|
1334
1267
|
};
|
|
1335
1268
|
|
|
1336
|
-
const
|
|
1269
|
+
const reconcileImporter = async (ctx: ResolveContext, state: PluginState, id: string): Promise<void> => {
|
|
1337
1270
|
const reconciliation = await importerReconciliation(ctx, state, id);
|
|
1338
1271
|
|
|
1339
1272
|
if (reconciliation === null) {
|
|
@@ -1353,7 +1286,6 @@ const resolveResourceConfig = async (state: PluginState, config: UserConfig, loa
|
|
|
1353
1286
|
const loaded = await loadConfig.load(config.root ?? process.cwd());
|
|
1354
1287
|
state.prefix = resourceBasePath(loaded.config.applicationId);
|
|
1355
1288
|
state.root = loaded.root;
|
|
1356
|
-
state.isV2 = resolveFuture(loaded.config.future).isResourceImported;
|
|
1357
1289
|
|
|
1358
1290
|
return {
|
|
1359
1291
|
assetsInclude: [ASSET_RE],
|
|
@@ -1423,14 +1355,6 @@ const attachResourceWatcher = (state: PluginState, server: ViteDevServer): void
|
|
|
1423
1355
|
const applyResolvedConfig = (state: PluginState, config: ResolvedConfig): void => {
|
|
1424
1356
|
state.isBuild = config.command === "build";
|
|
1425
1357
|
state.root = config.root;
|
|
1426
|
-
state.dataDir = null;
|
|
1427
|
-
|
|
1428
|
-
if (state.isBuild || state.isV2) {
|
|
1429
|
-
return;
|
|
1430
|
-
}
|
|
1431
|
-
|
|
1432
|
-
const relativeDataDir = resolveDataDir(config.root);
|
|
1433
|
-
state.dataDir = relativeDataDir === null ? null : join(config.root, relativeDataDir);
|
|
1434
1358
|
};
|
|
1435
1359
|
|
|
1436
1360
|
const loadResourceModule = (state: PluginState, id: string): string | undefined => {
|
|
@@ -1448,7 +1372,7 @@ const loadResourceModule = (state: PluginState, id: string): string | undefined
|
|
|
1448
1372
|
const isLegacyDataSpecifier = (source: string): boolean =>
|
|
1449
1373
|
source.startsWith(DATA_PREFIX) && ASSET_RE.test(stripQuery(source));
|
|
1450
1374
|
|
|
1451
|
-
const
|
|
1375
|
+
const rejectInvalidSpecifier = (source: string): void => {
|
|
1452
1376
|
if (BUNDLED_QUERY_MENTION_RE.test(source)) {
|
|
1453
1377
|
throw new Error(
|
|
1454
1378
|
`${JSON.stringify(source)} is not a valid bundled asset import; use ?resource, ` +
|
|
@@ -1467,7 +1391,7 @@ const rejectInvalidV2Specifier = (source: string): void => {
|
|
|
1467
1391
|
const resolveExplicitResourceId = async (
|
|
1468
1392
|
ctx: ResolveContext,
|
|
1469
1393
|
state: PluginState,
|
|
1470
|
-
request:
|
|
1394
|
+
request: ResolveRequest,
|
|
1471
1395
|
): Promise<string | undefined> => {
|
|
1472
1396
|
const specifier = parseResourceSpecifier(request.source);
|
|
1473
1397
|
|
|
@@ -1488,7 +1412,7 @@ const resolveExplicitResourceId = async (
|
|
|
1488
1412
|
const resolveIconResourceId = async (
|
|
1489
1413
|
ctx: ResolveContext,
|
|
1490
1414
|
state: PluginState,
|
|
1491
|
-
request:
|
|
1415
|
+
request: ResolveRequest,
|
|
1492
1416
|
): Promise<RetainedIconModuleId | undefined> => {
|
|
1493
1417
|
const specifier = parseIconSpecifier(request.source);
|
|
1494
1418
|
|
|
@@ -1508,10 +1432,10 @@ const resolveIconResourceId = async (
|
|
|
1508
1432
|
: { id: virtualIconId(resolved), moduleSideEffects: true };
|
|
1509
1433
|
};
|
|
1510
1434
|
|
|
1511
|
-
const
|
|
1435
|
+
const resolveBundledResourceId = async (
|
|
1512
1436
|
ctx: ResolveContext,
|
|
1513
1437
|
state: PluginState,
|
|
1514
|
-
request:
|
|
1438
|
+
request: ResolveRequest,
|
|
1515
1439
|
): Promise<ResourceModuleId | undefined> => {
|
|
1516
1440
|
if (isLegacyDataSpecifier(request.source)) {
|
|
1517
1441
|
throw new Error(
|
|
@@ -1534,46 +1458,21 @@ const resolveV2ResourceId = async (
|
|
|
1534
1458
|
return resolved;
|
|
1535
1459
|
}
|
|
1536
1460
|
|
|
1537
|
-
|
|
1461
|
+
rejectInvalidSpecifier(request.source);
|
|
1538
1462
|
|
|
1539
1463
|
return undefined;
|
|
1540
1464
|
};
|
|
1541
1465
|
|
|
1542
|
-
const resolveLegacyResourceId = async (
|
|
1543
|
-
ctx: ResolveContext,
|
|
1544
|
-
state: PluginState,
|
|
1545
|
-
request: LegacyResolveRequest,
|
|
1546
|
-
): Promise<string | undefined> => {
|
|
1547
|
-
if (BUNDLED_QUERY_MENTION_RE.test(request.source)) {
|
|
1548
|
-
throw new Error(`${JSON.stringify(request.source)} requires future.v2ResourceImports`);
|
|
1549
|
-
}
|
|
1550
|
-
|
|
1551
|
-
if (!isDataAsset(request.source)) {
|
|
1552
|
-
return undefined;
|
|
1553
|
-
}
|
|
1554
|
-
|
|
1555
|
-
const entry = await resolveLegacyAssetEntry(ctx, state, request);
|
|
1556
|
-
|
|
1557
|
-
return entry === undefined ? undefined : virtualAssetId(entry);
|
|
1558
|
-
};
|
|
1559
|
-
|
|
1560
1466
|
const resolveResourceId = (
|
|
1561
1467
|
ctx: ResolveContext,
|
|
1562
1468
|
state: PluginState,
|
|
1563
|
-
request:
|
|
1469
|
+
request: ResolveRequest,
|
|
1564
1470
|
): Promise<ResourceModuleId | undefined> => {
|
|
1565
1471
|
if (request.source === VIRTUAL_INIT) {
|
|
1566
1472
|
return Promise.resolve(VIRTUAL_INIT);
|
|
1567
1473
|
}
|
|
1568
1474
|
|
|
1569
|
-
return state
|
|
1570
|
-
? resolveV2ResourceId(ctx, state, request)
|
|
1571
|
-
: resolveLegacyResourceId(ctx, state, request);
|
|
1572
|
-
};
|
|
1573
|
-
|
|
1574
|
-
const configureResourceServer = (state: PluginState, server: ViteDevServer): void => {
|
|
1575
|
-
attachResourceWatcher(state, server);
|
|
1576
|
-
primeLegacyDevBundle(state);
|
|
1475
|
+
return resolveBundledResourceId(ctx, state, request);
|
|
1577
1476
|
};
|
|
1578
1477
|
|
|
1579
1478
|
const createResourcesPlugin = (state: PluginState, loadConfig: ConfigLoader): Plugin => ({
|
|
@@ -1588,7 +1487,7 @@ const createResourcesPlugin = (state: PluginState, loadConfig: ConfigLoader): Pl
|
|
|
1588
1487
|
},
|
|
1589
1488
|
|
|
1590
1489
|
configureServer: (server) => {
|
|
1591
|
-
|
|
1490
|
+
attachResourceWatcher(state, server);
|
|
1592
1491
|
},
|
|
1593
1492
|
|
|
1594
1493
|
buildStart() {
|
|
@@ -1610,9 +1509,9 @@ const createResourcesPlugin = (state: PluginState, loadConfig: ConfigLoader): Pl
|
|
|
1610
1509
|
},
|
|
1611
1510
|
|
|
1612
1511
|
async transform(code, id) {
|
|
1613
|
-
await
|
|
1512
|
+
await withExclusiveLoad(state, () => reconcileImporter(this, state, id));
|
|
1614
1513
|
|
|
1615
|
-
return retainSideEffectIconImport(
|
|
1514
|
+
return retainSideEffectIconImport(code, id);
|
|
1616
1515
|
},
|
|
1617
1516
|
|
|
1618
1517
|
generateBundle(_options, bundle) {
|
|
@@ -1629,7 +1528,6 @@ function gtkxResources(loadConfig: ConfigLoader = createConfigLoader(), entryPat
|
|
|
1629
1528
|
prefix: "",
|
|
1630
1529
|
root: "",
|
|
1631
1530
|
isBuild: false,
|
|
1632
|
-
isV2: false,
|
|
1633
1531
|
entries: new Map(),
|
|
1634
1532
|
bundledSpecifiers: new Map(),
|
|
1635
1533
|
moduleDependencies: new Map(),
|
|
@@ -1643,7 +1541,6 @@ function gtkxResources(loadConfig: ConfigLoader = createConfigLoader(), entryPat
|
|
|
1643
1541
|
devBundlePath: "",
|
|
1644
1542
|
server: null,
|
|
1645
1543
|
compiledSignature: "",
|
|
1646
|
-
dataDir: null,
|
|
1647
1544
|
bundleReferenceId: null,
|
|
1648
1545
|
iconOwners: new Map(),
|
|
1649
1546
|
};
|