@gtkx/cli 2.0.0-beta.1 → 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/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/run-codegen.d.ts +4 -2
- package/dist/codegen/run-codegen.d.ts.map +1 -1
- package/dist/codegen/run-codegen.js +13 -8
- package/dist/codegen/run-codegen.js.map +1 -1
- package/dist/codegen/store-resolver.d.ts +1 -1
- package/dist/codegen/store-resolver.d.ts.map +1 -1
- package/dist/codegen/store-resolver.js +2 -2
- 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/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/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/notices/node-runtime.js +2 -2
- package/dist/deploy/notices/node-runtime.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.js +1 -1
- 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 +15 -4
- 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/paths.d.ts +2 -1
- package/dist/deploy/settings/paths.d.ts.map +1 -1
- package/dist/deploy/settings/paths.js +113 -5
- package/dist/deploy/settings/paths.js.map +1 -1
- package/dist/deploy/targets/flatpak-source.d.ts.map +1 -1
- package/dist/deploy/targets/flatpak-source.js +11 -2
- package/dist/deploy/targets/flatpak-source.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/i18n/source-messages.d.ts.map +1 -1
- package/dist/i18n/source-messages.js +835 -1
- package/dist/i18n/source-messages.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/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/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.js +1 -1
- 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/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 +58 -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 +6 -2
- package/dist/vite-plugins/index.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/package.json +9 -9
- package/src/builder.ts +18 -5
- package/src/cli.ts +3 -0
- package/src/codegen/run-codegen.ts +15 -7
- package/src/codegen/store-resolver.ts +2 -2
- 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/deploy/freedesktop/metainfo.ts +73 -21
- 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/notices/node-runtime.ts +2 -2
- package/src/deploy/payload/launcher.ts +20 -1
- package/src/deploy/payload/stage.ts +1 -1
- package/src/deploy/run-deploy.ts +56 -16
- package/src/deploy/settings/build-manifest.ts +28 -3
- package/src/deploy/settings/extra-files.ts +26 -2
- package/src/deploy/settings/index.ts +3 -1
- package/src/deploy/settings/paths.ts +70 -5
- package/src/deploy/targets/flatpak-source.ts +13 -2
- package/src/deploy/types.ts +1 -0
- package/src/dev/headless.ts +40 -0
- package/src/dev/runner-deps.ts +1 -1
- package/src/i18n/source-messages.ts +1220 -2
- package/src/internal/build-manifest.ts +25 -1
- package/src/internal/build-output.ts +99 -0
- package/src/internal/entry-arg.ts +8 -1
- package/src/internal/output-directory.ts +699 -0
- package/src/internal/prepare-project.ts +5 -5
- package/src/internal/source-imports.ts +1 -1
- package/src/mcp/client.ts +2 -2
- package/src/vite-plugins/build-manifest.ts +7 -1
- package/src/vite-plugins/i18n.ts +86 -5
- package/src/vite-plugins/index.ts +14 -7
- package/src/vite-plugins/self-contained.ts +184 -185
|
@@ -2,22 +2,22 @@ import { ensureGeneratedIn } from "../codegen/run-codegen.js";
|
|
|
2
2
|
import { type CodegenContext, resolveCodegenContext } from "../codegen/store-resolver.js";
|
|
3
3
|
import { resolveCwd, resolveEntry } from "./entry-arg.js";
|
|
4
4
|
|
|
5
|
-
type ProjectArgs = { entry?: string; cwd?: string };
|
|
6
|
-
type PreparedProject = { cwd: string; entry: string };
|
|
5
|
+
type ProjectArgs = { entry?: string; cwd?: string; config?: string };
|
|
6
|
+
type PreparedProject = { cwd: string; entry: string; configFile: string };
|
|
7
7
|
type ResolvedProject = PreparedProject & { context: CodegenContext };
|
|
8
8
|
|
|
9
9
|
const resolveProject = async (args: ProjectArgs, mode: string): Promise<ResolvedProject> => {
|
|
10
10
|
const cwd = resolveCwd(args);
|
|
11
|
-
const context = await resolveCodegenContext(cwd, mode);
|
|
11
|
+
const context = await resolveCodegenContext(cwd, mode, args.config);
|
|
12
12
|
|
|
13
|
-
return { cwd, entry: resolveEntry(cwd, args.entry), context };
|
|
13
|
+
return { cwd, entry: resolveEntry(cwd, args.entry), configFile: context.configFile, context };
|
|
14
14
|
};
|
|
15
15
|
|
|
16
16
|
const prepareProject = async (args: ProjectArgs, mode: string): Promise<PreparedProject> => {
|
|
17
17
|
const { cwd, entry, context } = await resolveProject(args, mode);
|
|
18
18
|
await ensureGeneratedIn(context, { shouldAnnounce: true, mode });
|
|
19
19
|
|
|
20
|
-
return { cwd, entry };
|
|
20
|
+
return { cwd, entry, configFile: context.configFile };
|
|
21
21
|
};
|
|
22
22
|
|
|
23
23
|
export { prepareProject, resolveProject };
|
|
@@ -33,7 +33,7 @@ const discoverSourceFiles = (dir: string): string[] =>
|
|
|
33
33
|
sortStringsBy(
|
|
34
34
|
globSync("**/{*,.*}", {
|
|
35
35
|
cwd: dir,
|
|
36
|
-
exclude: ["**/{build,coverage,dist,node_modules,out-tsc}/**"],
|
|
36
|
+
exclude: ["**/{build,coverage,dist,node_modules,out-tsc}/**", "**/.gtkx-output-*/**"],
|
|
37
37
|
withFileTypes: true,
|
|
38
38
|
})
|
|
39
39
|
.filter((entry) => entry.isFile())
|
package/src/mcp/client.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import * as Gio from "@gtkx/gi/gio";
|
|
2
2
|
import * as Gtk from "@gtkx/gi/gtk";
|
|
3
3
|
import {
|
|
4
|
-
DEFAULT_SOCKET_PATH,
|
|
5
4
|
isConnectionClosedError,
|
|
6
5
|
type JSONRPCRequest,
|
|
7
6
|
ProtocolConnection,
|
|
7
|
+
resolveMcpSocketPath,
|
|
8
8
|
type Result,
|
|
9
9
|
} from "@gtkx/mcp/internal";
|
|
10
10
|
import { error, errorMessage, info, normalizeError } from "@gtkx/utils";
|
|
@@ -65,7 +65,7 @@ class McpClient {
|
|
|
65
65
|
private registry = new WidgetRegistry();
|
|
66
66
|
|
|
67
67
|
constructor(options: McpClientOptions) {
|
|
68
|
-
this.socketPath = options.socketPath
|
|
68
|
+
this.socketPath = resolveMcpSocketPath(options.socketPath);
|
|
69
69
|
this.applicationId = options.applicationId;
|
|
70
70
|
}
|
|
71
71
|
|
|
@@ -21,6 +21,11 @@ type ManifestState = {
|
|
|
21
21
|
outDir: string;
|
|
22
22
|
};
|
|
23
23
|
|
|
24
|
+
type BuildConfigIdentity = {
|
|
25
|
+
configFile: string;
|
|
26
|
+
configDigest: string;
|
|
27
|
+
};
|
|
28
|
+
|
|
24
29
|
const PACKAGE_MANIFEST_FILENAME = "package.json";
|
|
25
30
|
const DEFAULT_OUT_DIR = "dist";
|
|
26
31
|
const JSON_INDENT = 4;
|
|
@@ -73,7 +78,7 @@ const packagesFor = (outDir: string, ids: string[]): RecordedPackage[] => {
|
|
|
73
78
|
|
|
74
79
|
const renderManifest = (manifest: BuildManifest): string => `${JSON.stringify(manifest, null, JSON_INDENT)}\n`;
|
|
75
80
|
|
|
76
|
-
function gtkxBuildManifest(root: string, collector: BuildManifestCollector): Plugin {
|
|
81
|
+
function gtkxBuildManifest(root: string, collector: BuildManifestCollector, identity: BuildConfigIdentity): Plugin {
|
|
77
82
|
const state: ManifestState = { outDir: join(root, DEFAULT_OUT_DIR) };
|
|
78
83
|
|
|
79
84
|
return {
|
|
@@ -90,6 +95,7 @@ function gtkxBuildManifest(root: string, collector: BuildManifestCollector): Plu
|
|
|
90
95
|
const manifest: BuildManifest = {
|
|
91
96
|
generator: BUILD_MANIFEST_GENERATOR,
|
|
92
97
|
formatVersion: BUILD_MANIFEST_FORMAT_VERSION,
|
|
98
|
+
...identity,
|
|
93
99
|
schemas: collector.schemas,
|
|
94
100
|
packages: packagesFor(state.outDir, ids),
|
|
95
101
|
};
|
package/src/vite-plugins/i18n.ts
CHANGED
|
@@ -1,7 +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 { toPosixPath } from "@gtkx/utils";
|
|
4
|
+
import { isPathWithin, toPosixPath } from "@gtkx/utils";
|
|
5
5
|
import { existsSync, mkdirSync } from "node:fs";
|
|
6
6
|
import { createRequire } from "node:module";
|
|
7
7
|
import { dirname, join, posix, relative, resolve } from "node:path";
|
|
@@ -13,7 +13,8 @@ import {
|
|
|
13
13
|
synchronizeCatalogs,
|
|
14
14
|
} from "../i18n/catalogs.js";
|
|
15
15
|
import { extractSourceCatalog } from "../i18n/source-messages.js";
|
|
16
|
-
import {
|
|
16
|
+
import { emitI18nTypes } from "../i18n/types.js";
|
|
17
|
+
import { discoverSourceFiles, sourceLanguage } from "../internal/source-imports.js";
|
|
17
18
|
import { stripQuery } from "./strip-query.js";
|
|
18
19
|
|
|
19
20
|
type I18nState = {
|
|
@@ -21,6 +22,7 @@ type I18nState = {
|
|
|
21
22
|
i18nRoot: string;
|
|
22
23
|
outDir: string;
|
|
23
24
|
project: CatalogProject | null;
|
|
25
|
+
extraction: Promise<void>;
|
|
24
26
|
};
|
|
25
27
|
|
|
26
28
|
const BOOTSTRAP_SPECIFIER = "@gtkx/i18n/bootstrap";
|
|
@@ -94,6 +96,7 @@ const buildCatalogs = (state: I18nState): void => {
|
|
|
94
96
|
const extractProjectMessages = async (
|
|
95
97
|
state: I18nState,
|
|
96
98
|
shouldPreserveMetadataMessages: boolean,
|
|
99
|
+
shouldSynchronizeCatalogs: boolean,
|
|
97
100
|
): Promise<void> => {
|
|
98
101
|
const project = state.project;
|
|
99
102
|
|
|
@@ -104,7 +107,65 @@ const extractProjectMessages = async (
|
|
|
104
107
|
const srcDir = join(project.root, "src");
|
|
105
108
|
const sourceFiles = discoverSourceFiles(existsSync(srcDir) ? srcDir : project.root);
|
|
106
109
|
await extractSourceCatalog(project, sourceFiles, shouldPreserveMetadataMessages);
|
|
107
|
-
|
|
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
|
+
}
|
|
108
169
|
};
|
|
109
170
|
|
|
110
171
|
const gtkxI18n = (
|
|
@@ -112,7 +173,13 @@ const gtkxI18n = (
|
|
|
112
173
|
loadConfig: ConfigLoader = createConfigLoader(),
|
|
113
174
|
shouldPreserveMetadataMessages = true,
|
|
114
175
|
): Plugin => {
|
|
115
|
-
const state: I18nState = {
|
|
176
|
+
const state: I18nState = {
|
|
177
|
+
entryPath,
|
|
178
|
+
extraction: Promise.resolve(),
|
|
179
|
+
i18nRoot: "",
|
|
180
|
+
outDir: "",
|
|
181
|
+
project: null,
|
|
182
|
+
};
|
|
116
183
|
|
|
117
184
|
return {
|
|
118
185
|
name: "gtkx:i18n",
|
|
@@ -120,7 +187,21 @@ const gtkxI18n = (
|
|
|
120
187
|
|
|
121
188
|
configResolved: (config) => applyResolvedConfig(state, config, loadConfig),
|
|
122
189
|
|
|
123
|
-
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
|
+
},
|
|
124
205
|
|
|
125
206
|
transform(code, id) {
|
|
126
207
|
if (isI18nLocaleModule(state, id)) {
|
|
@@ -13,13 +13,20 @@ import { gtkxSettings } from "./settings.js";
|
|
|
13
13
|
import { gtkxStoreLinks } from "./store-links.js";
|
|
14
14
|
import { gtkxUndeclaredLibrary } from "./undeclared-library.js";
|
|
15
15
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
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
|
+
});
|
|
23
30
|
|
|
24
31
|
return [
|
|
25
32
|
createConfigPlugin({ name: "gtkx:config", loadConfig }),
|