@gtkx/cli 0.20.0 → 1.0.0-rc.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +173 -0
- package/bin/gtkx-dev-runner.js +9 -0
- package/dist/builder.d.ts +2 -50
- package/dist/builder.d.ts.map +1 -1
- package/dist/builder.js +22 -48
- package/dist/builder.js.map +1 -1
- package/dist/cli.d.ts +1 -2
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +11 -124
- package/dist/cli.js.map +1 -1
- package/dist/codegen/freshness.d.ts +11 -0
- package/dist/codegen/freshness.d.ts.map +1 -0
- package/dist/codegen/freshness.js +42 -0
- package/dist/codegen/freshness.js.map +1 -0
- package/dist/codegen/report.d.ts +3 -0
- package/dist/codegen/report.d.ts.map +1 -0
- package/dist/codegen/report.js +16 -0
- package/dist/codegen/report.js.map +1 -0
- package/dist/codegen/run-codegen.d.ts +35 -0
- package/dist/codegen/run-codegen.d.ts.map +1 -0
- package/dist/codegen/run-codegen.js +133 -0
- package/dist/codegen/run-codegen.js.map +1 -0
- package/dist/codegen/store-resolver.d.ts +21 -0
- package/dist/codegen/store-resolver.d.ts.map +1 -0
- package/dist/codegen/store-resolver.js +52 -0
- package/dist/codegen/store-resolver.js.map +1 -0
- package/dist/commands/build.d.ts +9 -0
- package/dist/commands/build.d.ts.map +1 -0
- package/dist/commands/build.js +33 -0
- package/dist/commands/build.js.map +1 -0
- package/dist/commands/codegen.d.ts +9 -0
- package/dist/commands/codegen.d.ts.map +1 -0
- package/dist/commands/codegen.js +40 -0
- package/dist/commands/codegen.js.map +1 -0
- package/dist/commands/dev.d.ts +5 -0
- package/dist/commands/dev.d.ts.map +1 -0
- package/dist/commands/dev.js +21 -0
- package/dist/commands/dev.js.map +1 -0
- package/dist/commands/docs.d.ts +19 -0
- package/dist/commands/docs.d.ts.map +1 -0
- package/dist/commands/docs.js +59 -0
- package/dist/commands/docs.js.map +1 -0
- package/dist/dev/icon-dir.d.ts +2 -0
- package/dist/dev/icon-dir.d.ts.map +1 -0
- package/dist/dev/icon-dir.js +13 -0
- package/dist/dev/icon-dir.js.map +1 -0
- package/dist/dev/refresh-tracker.d.ts +6 -0
- package/dist/dev/refresh-tracker.d.ts.map +1 -0
- package/dist/dev/refresh-tracker.js +18 -0
- package/dist/dev/refresh-tracker.js.map +1 -0
- package/dist/dev/runner-deps.d.ts +3 -0
- package/dist/dev/runner-deps.d.ts.map +1 -0
- package/dist/dev/runner-deps.js +39 -0
- package/dist/dev/runner-deps.js.map +1 -0
- package/dist/dev/runner-main.d.ts +2 -0
- package/dist/dev/runner-main.d.ts.map +1 -0
- package/dist/dev/runner-main.js +28 -0
- package/dist/dev/runner-main.js.map +1 -0
- package/dist/dev/runner.d.ts +23 -0
- package/dist/dev/runner.d.ts.map +1 -0
- package/dist/dev/runner.js +88 -0
- package/dist/dev/runner.js.map +1 -0
- package/dist/dev/schema-dir.d.ts +2 -0
- package/dist/dev/schema-dir.d.ts.map +1 -0
- package/dist/dev/schema-dir.js +10 -0
- package/dist/dev/schema-dir.js.map +1 -0
- package/dist/dev/supervisor.d.ts +17 -0
- package/dist/dev/supervisor.d.ts.map +1 -0
- package/dist/dev/supervisor.js +142 -0
- package/dist/dev/supervisor.js.map +1 -0
- package/dist/dev/vite-dev-server.d.ts +21 -0
- package/dist/dev/vite-dev-server.d.ts.map +1 -0
- package/dist/dev/vite-dev-server.js +12 -0
- package/dist/dev/vite-dev-server.js.map +1 -0
- package/dist/internal/banner.d.ts +3 -0
- package/dist/internal/banner.d.ts.map +1 -0
- package/dist/internal/banner.js +8 -0
- package/dist/internal/banner.js.map +1 -0
- package/dist/internal/data-dir.d.ts +3 -0
- package/dist/internal/data-dir.d.ts.map +1 -0
- package/dist/internal/data-dir.js +37 -0
- package/dist/internal/data-dir.js.map +1 -0
- package/dist/internal/entry-arg.d.ts +19 -0
- package/dist/internal/entry-arg.d.ts.map +1 -0
- package/dist/internal/entry-arg.js +33 -0
- package/dist/internal/entry-arg.js.map +1 -0
- package/dist/internal/errors.d.ts +4 -0
- package/dist/internal/errors.d.ts.map +1 -0
- package/dist/internal/errors.js +27 -0
- package/dist/internal/errors.js.map +1 -0
- package/dist/internal/list-files.d.ts +6 -0
- package/dist/internal/list-files.d.ts.map +1 -0
- package/dist/internal/list-files.js +13 -0
- package/dist/internal/list-files.js.map +1 -0
- package/dist/internal/resolve-cli-tool.d.ts +2 -0
- package/dist/internal/resolve-cli-tool.d.ts.map +1 -0
- package/dist/internal/resolve-cli-tool.js +20 -0
- package/dist/internal/resolve-cli-tool.js.map +1 -0
- package/dist/internal/staging-dir.d.ts +3 -0
- package/dist/internal/staging-dir.d.ts.map +1 -0
- package/dist/internal/staging-dir.js +16 -0
- package/dist/internal/staging-dir.js.map +1 -0
- package/dist/internal/xdg-data-dirs.d.ts +2 -0
- package/dist/internal/xdg-data-dirs.d.ts.map +1 -0
- package/dist/internal/xdg-data-dirs.js +8 -0
- package/dist/internal/xdg-data-dirs.js.map +1 -0
- package/dist/mcp/client.d.ts +23 -0
- package/dist/mcp/client.d.ts.map +1 -0
- package/dist/mcp/client.js +157 -0
- package/dist/mcp/client.js.map +1 -0
- package/dist/mcp/handlers.d.ts +8 -0
- package/dist/mcp/handlers.d.ts.map +1 -0
- package/dist/mcp/handlers.js +119 -0
- package/dist/mcp/handlers.js.map +1 -0
- package/dist/mcp/index.d.ts +4 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +17 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/serialize-widget.d.ts +10 -0
- package/dist/mcp/serialize-widget.d.ts.map +1 -0
- package/dist/mcp/serialize-widget.js +20 -0
- package/dist/mcp/serialize-widget.js.map +1 -0
- package/dist/mcp/testing-loader.d.ts +6 -0
- package/dist/mcp/testing-loader.d.ts.map +1 -0
- package/dist/mcp/testing-loader.js +25 -0
- package/dist/mcp/testing-loader.js.map +1 -0
- package/dist/mcp/widget-registry.d.ts +13 -0
- package/dist/mcp/widget-registry.d.ts.map +1 -0
- package/dist/mcp/widget-registry.js +38 -0
- package/dist/mcp/widget-registry.js.map +1 -0
- package/dist/refresh-runtime.d.ts +10 -20
- package/dist/refresh-runtime.d.ts.map +1 -1
- package/dist/refresh-runtime.js +12 -36
- package/dist/refresh-runtime.js.map +1 -1
- package/dist/settings/compile.d.ts +2 -0
- package/dist/settings/compile.d.ts.map +1 -0
- package/dist/settings/compile.js +19 -0
- package/dist/settings/compile.js.map +1 -0
- package/dist/settings/parser.d.ts +23 -0
- package/dist/settings/parser.d.ts.map +1 -0
- package/dist/settings/parser.js +117 -0
- package/dist/settings/parser.js.map +1 -0
- package/dist/settings/render.d.ts +4 -0
- package/dist/settings/render.d.ts.map +1 -0
- package/dist/settings/render.js +148 -0
- package/dist/settings/render.js.map +1 -0
- package/dist/settings/schema.d.ts +13 -0
- package/dist/settings/schema.d.ts.map +1 -0
- package/dist/settings/schema.js +103 -0
- package/dist/settings/schema.js.map +1 -0
- package/dist/vite-plugins/asset-extensions.d.ts +4 -0
- package/dist/vite-plugins/asset-extensions.d.ts.map +1 -0
- package/dist/vite-plugins/asset-extensions.js +27 -0
- package/dist/vite-plugins/asset-extensions.js.map +1 -0
- package/dist/vite-plugins/built-url.d.ts +3 -0
- package/dist/vite-plugins/built-url.d.ts.map +1 -0
- package/dist/{vite-plugin-gtkx-built-url.js → vite-plugins/built-url.js} +4 -17
- package/dist/vite-plugins/built-url.js.map +1 -0
- package/dist/vite-plugins/css.d.ts +3 -0
- package/dist/vite-plugins/css.d.ts.map +1 -0
- package/dist/vite-plugins/css.js +30 -0
- package/dist/vite-plugins/css.js.map +1 -0
- package/dist/vite-plugins/fast-refresh/refresh-filter.d.ts +7 -0
- package/dist/vite-plugins/fast-refresh/refresh-filter.d.ts.map +1 -0
- package/dist/vite-plugins/fast-refresh/refresh-filter.js +15 -0
- package/dist/vite-plugins/fast-refresh/refresh-filter.js.map +1 -0
- package/dist/vite-plugins/fast-refresh/swc-refresh.d.ts +5 -0
- package/dist/vite-plugins/fast-refresh/swc-refresh.d.ts.map +1 -0
- package/dist/vite-plugins/fast-refresh/swc-refresh.js +66 -0
- package/dist/vite-plugins/fast-refresh/swc-refresh.js.map +1 -0
- package/dist/vite-plugins/icons.d.ts +3 -0
- package/dist/vite-plugins/icons.d.ts.map +1 -0
- package/dist/vite-plugins/icons.js +47 -0
- package/dist/vite-plugins/icons.js.map +1 -0
- package/dist/vite-plugins/index.d.ts +3 -0
- package/dist/vite-plugins/index.d.ts.map +1 -0
- package/dist/vite-plugins/index.js +21 -0
- package/dist/vite-plugins/index.js.map +1 -0
- package/dist/vite-plugins/native.d.ts +3 -0
- package/dist/vite-plugins/native.d.ts.map +1 -0
- package/dist/vite-plugins/native.js +60 -0
- package/dist/vite-plugins/native.js.map +1 -0
- package/dist/vite-plugins/react-compiler.d.ts +4 -0
- package/dist/vite-plugins/react-compiler.d.ts.map +1 -0
- package/dist/vite-plugins/react-compiler.js +56 -0
- package/dist/vite-plugins/react-compiler.js.map +1 -0
- package/dist/vite-plugins/react-dom-prebundle.d.ts +3 -0
- package/dist/vite-plugins/react-dom-prebundle.d.ts.map +1 -0
- package/dist/vite-plugins/react-dom-prebundle.js +11 -0
- package/dist/vite-plugins/react-dom-prebundle.js.map +1 -0
- package/dist/vite-plugins/resource-init-module.d.ts +5 -0
- package/dist/vite-plugins/resource-init-module.d.ts.map +1 -0
- package/dist/vite-plugins/resource-init-module.js +50 -0
- package/dist/vite-plugins/resource-init-module.js.map +1 -0
- package/dist/vite-plugins/resource-shared.d.ts +6 -0
- package/dist/vite-plugins/resource-shared.d.ts.map +1 -0
- package/dist/vite-plugins/resource-shared.js +21 -0
- package/dist/vite-plugins/resource-shared.js.map +1 -0
- package/dist/vite-plugins/resources.d.ts +4 -0
- package/dist/vite-plugins/resources.d.ts.map +1 -0
- package/dist/vite-plugins/resources.js +220 -0
- package/dist/vite-plugins/resources.js.map +1 -0
- package/dist/vite-plugins/settings-worker-env.d.ts +3 -0
- package/dist/vite-plugins/settings-worker-env.d.ts.map +1 -0
- package/dist/vite-plugins/settings-worker-env.js +21 -0
- package/dist/vite-plugins/settings-worker-env.js.map +1 -0
- package/dist/vite-plugins/settings.d.ts +3 -0
- package/dist/vite-plugins/settings.d.ts.map +1 -0
- package/dist/vite-plugins/settings.js +190 -0
- package/dist/vite-plugins/settings.js.map +1 -0
- package/dist/vite-plugins/undeclared-library.d.ts +3 -0
- package/dist/vite-plugins/undeclared-library.d.ts.map +1 -0
- package/dist/vite-plugins/undeclared-library.js +47 -0
- package/dist/vite-plugins/undeclared-library.js.map +1 -0
- package/dist/vite-plugins/virtual-module.d.ts +22 -0
- package/dist/vite-plugins/virtual-module.d.ts.map +1 -0
- package/dist/vite-plugins/virtual-module.js +18 -0
- package/dist/vite-plugins/virtual-module.js.map +1 -0
- package/dist/vitest-plugin.d.ts +10 -0
- package/dist/vitest-plugin.d.ts.map +1 -0
- package/dist/vitest-plugin.js +12 -0
- package/dist/vitest-plugin.js.map +1 -0
- package/env.d.ts +131 -3
- package/package.json +32 -38
- package/src/babel-modules.d.ts +13 -0
- package/src/builder.ts +28 -76
- package/src/cli.ts +22 -0
- package/src/codegen/freshness.ts +52 -0
- package/src/codegen/report.ts +20 -0
- package/src/codegen/run-codegen.ts +185 -0
- package/src/codegen/store-resolver.ts +75 -0
- package/src/commands/build.ts +37 -0
- package/src/commands/codegen.ts +44 -0
- package/src/commands/dev.ts +25 -0
- package/src/commands/docs.ts +66 -0
- package/src/dev/icon-dir.ts +11 -0
- package/src/dev/refresh-tracker.ts +21 -0
- package/src/dev/runner-deps.ts +42 -0
- package/src/dev/runner-main.ts +33 -0
- package/src/dev/runner.ts +126 -0
- package/src/dev/schema-dir.ts +11 -0
- package/src/dev/supervisor.ts +178 -0
- package/src/dev/vite-dev-server.ts +34 -0
- package/src/internal/banner.ts +9 -0
- package/src/internal/data-dir.ts +39 -0
- package/src/internal/entry-arg.ts +38 -0
- package/src/internal/errors.ts +28 -0
- package/src/internal/list-files.ts +17 -0
- package/src/internal/resolve-cli-tool.ts +21 -0
- package/src/internal/staging-dir.ts +16 -0
- package/src/internal/xdg-data-dirs.ts +7 -0
- package/src/mcp/client.ts +177 -0
- package/src/mcp/handlers.ts +156 -0
- package/src/mcp/index.ts +22 -0
- package/src/mcp/serialize-widget.ts +34 -0
- package/src/mcp/testing-loader.ts +32 -0
- package/src/mcp/widget-registry.ts +43 -0
- package/src/refresh-runtime.ts +12 -41
- package/src/settings/compile.ts +19 -0
- package/src/settings/parser.ts +154 -0
- package/src/settings/render.ts +167 -0
- package/src/settings/schema.ts +115 -0
- package/src/vite-plugins/asset-extensions.ts +28 -0
- package/src/{vite-plugin-gtkx-built-url.ts → vite-plugins/built-url.ts} +3 -16
- package/src/vite-plugins/css.ts +38 -0
- package/src/vite-plugins/fast-refresh/refresh-filter.ts +18 -0
- package/src/vite-plugins/fast-refresh/swc-refresh.ts +79 -0
- package/src/vite-plugins/icons.ts +58 -0
- package/src/vite-plugins/index.ts +22 -0
- package/src/vite-plugins/native.ts +74 -0
- package/src/vite-plugins/react-compiler.ts +70 -0
- package/src/vite-plugins/react-dom-prebundle.ts +14 -0
- package/src/vite-plugins/resource-init-module.ts +54 -0
- package/src/vite-plugins/resource-shared.ts +27 -0
- package/src/vite-plugins/resources.ts +272 -0
- package/src/vite-plugins/settings-worker-env.ts +25 -0
- package/src/vite-plugins/settings.ts +221 -0
- package/src/vite-plugins/undeclared-library.ts +69 -0
- package/src/vite-plugins/virtual-module.ts +37 -0
- package/src/vitest-plugin.ts +14 -0
- package/dist/create.d.ts +0 -54
- package/dist/create.d.ts.map +0 -1
- package/dist/create.js +0 -221
- package/dist/create.js.map +0 -1
- package/dist/dev-server.d.ts +0 -38
- package/dist/dev-server.d.ts.map +0 -1
- package/dist/dev-server.js +0 -128
- package/dist/dev-server.js.map +0 -1
- package/dist/index.d.ts +0 -4
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -4
- package/dist/index.js.map +0 -1
- package/dist/mcp-client.d.ts +0 -31
- package/dist/mcp-client.d.ts.map +0 -1
- package/dist/mcp-client.js +0 -430
- package/dist/mcp-client.js.map +0 -1
- package/dist/templates.d.ts +0 -9
- package/dist/templates.d.ts.map +0 -1
- package/dist/templates.js +0 -16
- package/dist/templates.js.map +0 -1
- package/dist/vite-plugin-gtkx-assets.d.ts +0 -20
- package/dist/vite-plugin-gtkx-assets.d.ts.map +0 -1
- package/dist/vite-plugin-gtkx-assets.js +0 -57
- package/dist/vite-plugin-gtkx-assets.js.map +0 -1
- package/dist/vite-plugin-gtkx-built-url.d.ts +0 -18
- package/dist/vite-plugin-gtkx-built-url.d.ts.map +0 -1
- package/dist/vite-plugin-gtkx-built-url.js.map +0 -1
- package/dist/vite-plugin-gtkx-native.d.ts +0 -14
- package/dist/vite-plugin-gtkx-native.d.ts.map +0 -1
- package/dist/vite-plugin-gtkx-native.js +0 -53
- package/dist/vite-plugin-gtkx-native.js.map +0 -1
- package/dist/vite-plugin-gtkx-refresh.d.ts +0 -8
- package/dist/vite-plugin-gtkx-refresh.d.ts.map +0 -1
- package/dist/vite-plugin-gtkx-refresh.js +0 -37
- package/dist/vite-plugin-gtkx-refresh.js.map +0 -1
- package/dist/vite-plugin-swc-ssr-refresh.d.ts +0 -8
- package/dist/vite-plugin-swc-ssr-refresh.d.ts.map +0 -1
- package/dist/vite-plugin-swc-ssr-refresh.js +0 -46
- package/dist/vite-plugin-swc-ssr-refresh.js.map +0 -1
- package/src/cli.tsx +0 -154
- package/src/create.ts +0 -310
- package/src/dev-server.tsx +0 -162
- package/src/index.ts +0 -3
- package/src/mcp-client.ts +0 -518
- package/src/templates.ts +0 -26
- package/src/vite-plugin-gtkx-assets.ts +0 -69
- package/src/vite-plugin-gtkx-native.ts +0 -64
- package/src/vite-plugin-gtkx-refresh.ts +0 -54
- package/src/vite-plugin-swc-ssr-refresh.ts +0 -61
- package/templates/claude/EXAMPLES.md.ejs +0 -744
- package/templates/claude/SKILL.md.ejs +0 -93
- package/templates/claude/WIDGETS.md.ejs +0 -820
- package/templates/config/vitest.config.ts.ejs +0 -11
- package/templates/gitignore.ejs +0 -4
- package/templates/package.json.ejs +0 -16
- package/templates/src/app.tsx.ejs +0 -32
- package/templates/src/dev.tsx.ejs +0 -5
- package/templates/src/gtkx-env.d.ts.ejs +0 -1
- package/templates/src/index.tsx.ejs +0 -5
- package/templates/tests/app.test.tsx.ejs +0 -16
- package/templates/tsconfig.json.ejs +0 -14
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
import { mkdtempSync, readFileSync } from "node:fs";
|
|
2
|
+
import { tmpdir } from "node:os";
|
|
3
|
+
import { basename, join } from "node:path";
|
|
4
|
+
import { error, errorMessage, info } from "@gtkx/utils";
|
|
5
|
+
import { prependBanner } from "../internal/banner.js";
|
|
6
|
+
import { resolveDataDir } from "../internal/data-dir.js";
|
|
7
|
+
import { removeTempDir, withStagingDir } from "../internal/staging-dir.js";
|
|
8
|
+
import { compileSchemas } from "../settings/compile.js";
|
|
9
|
+
import { parseSchemaXml, SchemaParseError } from "../settings/parser.js";
|
|
10
|
+
import { renderRuntimeModule } from "../settings/render.js";
|
|
11
|
+
import { emitSchemaEnv, prependSchemaDir, SCHEMA_SUFFIX, stageSchema } from "../settings/schema.js";
|
|
12
|
+
import { createVirtualNamespace } from "./virtual-module.js";
|
|
13
|
+
const VIRTUAL_PREFIX = "\0gtkx-settings:";
|
|
14
|
+
const { isVirtual, fromVirtualId, resolveToVirtual } = createVirtualNamespace(VIRTUAL_PREFIX);
|
|
15
|
+
const SCHEMA_ENV_BANNER = [
|
|
16
|
+
`process.env.GSETTINGS_SCHEMA_DIR = [`,
|
|
17
|
+
` decodeURIComponent(new URL(".", import.meta.url).pathname),`,
|
|
18
|
+
` process.env.GSETTINGS_SCHEMA_DIR,`,
|
|
19
|
+
`]`,
|
|
20
|
+
` .filter(Boolean)`,
|
|
21
|
+
` .join(":");`,
|
|
22
|
+
].join("\n");
|
|
23
|
+
const ensureSchemaDir = (state) => {
|
|
24
|
+
if (!state.schemaDir) {
|
|
25
|
+
const runnerDir = process.env.GTKX_DEV_SCHEMA_DIR;
|
|
26
|
+
if (runnerDir) {
|
|
27
|
+
state.schemaDir = runnerDir;
|
|
28
|
+
return runnerDir;
|
|
29
|
+
}
|
|
30
|
+
const dir = mkdtempSync(join(tmpdir(), "gtkx-schemas-"));
|
|
31
|
+
state.schemaDir = dir;
|
|
32
|
+
const cleanup = () => removeTempDir(dir);
|
|
33
|
+
state.cleanupProcessExit = cleanup;
|
|
34
|
+
process.once("exit", cleanup);
|
|
35
|
+
}
|
|
36
|
+
return state.schemaDir;
|
|
37
|
+
};
|
|
38
|
+
const releaseSchemaDir = (state) => {
|
|
39
|
+
if (!state.schemaDir)
|
|
40
|
+
return;
|
|
41
|
+
if (state.cleanupProcessExit) {
|
|
42
|
+
removeTempDir(state.schemaDir);
|
|
43
|
+
process.removeListener("exit", state.cleanupProcessExit);
|
|
44
|
+
state.cleanupProcessExit = null;
|
|
45
|
+
}
|
|
46
|
+
state.schemaDir = null;
|
|
47
|
+
};
|
|
48
|
+
const compileSchemaDir = (state) => {
|
|
49
|
+
if (!state.schemaDir)
|
|
50
|
+
return;
|
|
51
|
+
compileSchemas(state.schemaDir);
|
|
52
|
+
process.env.GSETTINGS_SCHEMA_DIR = prependSchemaDir(state.schemaDir, process.env.GSETTINGS_SCHEMA_DIR);
|
|
53
|
+
};
|
|
54
|
+
const syncSchemaEnv = (state) => {
|
|
55
|
+
if (state.rootDir === null)
|
|
56
|
+
return;
|
|
57
|
+
try {
|
|
58
|
+
emitSchemaEnv(state.rootDir, state.dataDir);
|
|
59
|
+
}
|
|
60
|
+
catch (cause) {
|
|
61
|
+
error(`Failed to generate GSettings schema types: ${errorMessage(cause)}`);
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
const registerSchemaForMode = (state, filePath, id) => {
|
|
65
|
+
const fileName = basename(filePath);
|
|
66
|
+
if (state.isBuild) {
|
|
67
|
+
state.buildSchemas.add(filePath);
|
|
68
|
+
info(`Queued GSettings schema: ${fileName}`);
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
state.trackedSchemas.set(filePath, id);
|
|
72
|
+
const dir = ensureSchemaDir(state);
|
|
73
|
+
stageSchema(dir, filePath);
|
|
74
|
+
compileSchemaDir(state);
|
|
75
|
+
info(`Compiled GSettings schema: ${fileName}`);
|
|
76
|
+
};
|
|
77
|
+
const loadSchemaModule = (ctx, state, id) => {
|
|
78
|
+
const filePath = fromVirtualId(id);
|
|
79
|
+
const xml = readFileSync(filePath, "utf-8");
|
|
80
|
+
const fileName = basename(filePath);
|
|
81
|
+
registerSchemaForMode(state, filePath, id);
|
|
82
|
+
let parsed;
|
|
83
|
+
try {
|
|
84
|
+
parsed = parseSchemaXml(xml, fileName);
|
|
85
|
+
}
|
|
86
|
+
catch (error) {
|
|
87
|
+
if (!(error instanceof SchemaParseError))
|
|
88
|
+
throw error;
|
|
89
|
+
ctx.error(error.message);
|
|
90
|
+
}
|
|
91
|
+
if (parsed.schemas.length === 0) {
|
|
92
|
+
ctx.error(`No <schema id="..."> found in ${fileName}`);
|
|
93
|
+
}
|
|
94
|
+
return renderRuntimeModule(parsed);
|
|
95
|
+
};
|
|
96
|
+
const emitCompiledSchemas = (ctx, state) => {
|
|
97
|
+
if (!state.isBuild || state.buildSchemas.size === 0)
|
|
98
|
+
return;
|
|
99
|
+
const compiled = withStagingDir("schemas-build", (dir) => {
|
|
100
|
+
for (const filePath of state.buildSchemas) {
|
|
101
|
+
stageSchema(dir, filePath);
|
|
102
|
+
}
|
|
103
|
+
compileSchemas(dir);
|
|
104
|
+
return readFileSync(join(dir, "gschemas.compiled"));
|
|
105
|
+
});
|
|
106
|
+
ctx.emitFile({
|
|
107
|
+
type: "asset",
|
|
108
|
+
fileName: "gschemas.compiled",
|
|
109
|
+
source: compiled,
|
|
110
|
+
});
|
|
111
|
+
info(`Compiled ${state.buildSchemas.size} GSettings schema(s)`);
|
|
112
|
+
};
|
|
113
|
+
const handleSchemaHotUpdate = (state, file, server) => {
|
|
114
|
+
const virtualId = state.trackedSchemas.get(file);
|
|
115
|
+
if (!virtualId)
|
|
116
|
+
return;
|
|
117
|
+
const dir = ensureSchemaDir(state);
|
|
118
|
+
stageSchema(dir, file);
|
|
119
|
+
compileSchemaDir(state);
|
|
120
|
+
info(`Recompiled GSettings schema: ${basename(file)}`);
|
|
121
|
+
const mod = server.moduleGraph.getModuleById(virtualId);
|
|
122
|
+
if (mod) {
|
|
123
|
+
server.moduleGraph.invalidateModule(mod);
|
|
124
|
+
return [mod];
|
|
125
|
+
}
|
|
126
|
+
return undefined;
|
|
127
|
+
};
|
|
128
|
+
const watchSchemaFiles = (state, server) => {
|
|
129
|
+
server.httpServer?.once("close", () => releaseSchemaDir(state));
|
|
130
|
+
server.watcher.once("close", () => releaseSchemaDir(state));
|
|
131
|
+
const refreshSchemaTypes = (file) => {
|
|
132
|
+
if (file.endsWith(SCHEMA_SUFFIX))
|
|
133
|
+
syncSchemaEnv(state);
|
|
134
|
+
};
|
|
135
|
+
server.watcher.on("add", refreshSchemaTypes);
|
|
136
|
+
server.watcher.on("unlink", refreshSchemaTypes);
|
|
137
|
+
};
|
|
138
|
+
export function gtkxSettings() {
|
|
139
|
+
const state = {
|
|
140
|
+
schemaDir: null,
|
|
141
|
+
rootDir: null,
|
|
142
|
+
dataDir: null,
|
|
143
|
+
isBuild: false,
|
|
144
|
+
trackedSchemas: new Map(),
|
|
145
|
+
buildSchemas: new Set(),
|
|
146
|
+
cleanupProcessExit: null,
|
|
147
|
+
};
|
|
148
|
+
return {
|
|
149
|
+
name: "gtkx:settings",
|
|
150
|
+
enforce: "pre",
|
|
151
|
+
config(config) {
|
|
152
|
+
state.dataDir = resolveDataDir(config.root ?? process.cwd());
|
|
153
|
+
},
|
|
154
|
+
configResolved(config) {
|
|
155
|
+
state.isBuild = config.command === "build";
|
|
156
|
+
state.rootDir = typeof config.root === "string" ? config.root : null;
|
|
157
|
+
syncSchemaEnv(state);
|
|
158
|
+
},
|
|
159
|
+
configureServer(server) {
|
|
160
|
+
watchSchemaFiles(state, server);
|
|
161
|
+
},
|
|
162
|
+
outputOptions(options) {
|
|
163
|
+
if (!state.isBuild)
|
|
164
|
+
return;
|
|
165
|
+
return prependBanner(options, SCHEMA_ENV_BANNER);
|
|
166
|
+
},
|
|
167
|
+
async resolveId(source, importer, options) {
|
|
168
|
+
if (!source.endsWith(SCHEMA_SUFFIX))
|
|
169
|
+
return;
|
|
170
|
+
return resolveToVirtual(this, { source, importer, options });
|
|
171
|
+
},
|
|
172
|
+
load(id) {
|
|
173
|
+
if (!isVirtual(id))
|
|
174
|
+
return;
|
|
175
|
+
return loadSchemaModule(this, state, id);
|
|
176
|
+
},
|
|
177
|
+
buildEnd() {
|
|
178
|
+
emitCompiledSchemas(this, state);
|
|
179
|
+
},
|
|
180
|
+
closeBundle() {
|
|
181
|
+
releaseSchemaDir(state);
|
|
182
|
+
},
|
|
183
|
+
handleHotUpdate({ file, server }) {
|
|
184
|
+
if (file.endsWith(SCHEMA_SUFFIX))
|
|
185
|
+
syncSchemaEnv(state);
|
|
186
|
+
return handleSchemaHotUpdate(state, file, server);
|
|
187
|
+
},
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
//# sourceMappingURL=settings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settings.js","sourceRoot":"","sources":["../../src/vite-plugins/settings.ts"],"names":[],"mappings":"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","sourcesContent":["import { mkdtempSync, readFileSync } from \"node:fs\";\nimport { tmpdir } from \"node:os\";\nimport { basename, join } from \"node:path\";\nimport { error, errorMessage, info } from \"@gtkx/utils\";\nimport type { ModuleNode, Plugin, UserConfig, ViteDevServer } from \"vite\";\nimport { prependBanner } from \"../internal/banner.js\";\nimport { resolveDataDir } from \"../internal/data-dir.js\";\nimport { removeTempDir, withStagingDir } from \"../internal/staging-dir.js\";\nimport { compileSchemas } from \"../settings/compile.js\";\nimport { parseSchemaXml, SchemaParseError } from \"../settings/parser.js\";\nimport { renderRuntimeModule } from \"../settings/render.js\";\nimport { emitSchemaEnv, prependSchemaDir, SCHEMA_SUFFIX, stageSchema } from \"../settings/schema.js\";\nimport { createVirtualNamespace } from \"./virtual-module.js\";\n\nconst VIRTUAL_PREFIX = \"\\0gtkx-settings:\";\nconst { isVirtual, fromVirtualId, resolveToVirtual } = createVirtualNamespace(VIRTUAL_PREFIX);\n\nconst SCHEMA_ENV_BANNER = [\n `process.env.GSETTINGS_SCHEMA_DIR = [`,\n ` decodeURIComponent(new URL(\".\", import.meta.url).pathname),`,\n ` process.env.GSETTINGS_SCHEMA_DIR,`,\n `]`,\n ` .filter(Boolean)`,\n ` .join(\":\");`,\n].join(\"\\n\");\n\ntype PluginState = {\n schemaDir: string | null;\n rootDir: string | null;\n dataDir: string | null;\n isBuild: boolean;\n trackedSchemas: Map<string, string>;\n buildSchemas: Set<string>;\n cleanupProcessExit: (() => void) | null;\n};\n\ntype PluginContext = {\n error: (message: string) => never;\n emitFile: (file: { type: \"asset\"; fileName: string; source: Buffer }) => void;\n};\n\nconst ensureSchemaDir = (state: PluginState): string => {\n if (!state.schemaDir) {\n const runnerDir = process.env.GTKX_DEV_SCHEMA_DIR;\n if (runnerDir) {\n state.schemaDir = runnerDir;\n return runnerDir;\n }\n const dir = mkdtempSync(join(tmpdir(), \"gtkx-schemas-\"));\n state.schemaDir = dir;\n const cleanup = (): void => removeTempDir(dir);\n state.cleanupProcessExit = cleanup;\n process.once(\"exit\", cleanup);\n }\n return state.schemaDir;\n};\n\nconst releaseSchemaDir = (state: PluginState): void => {\n if (!state.schemaDir) return;\n if (state.cleanupProcessExit) {\n removeTempDir(state.schemaDir);\n process.removeListener(\"exit\", state.cleanupProcessExit);\n state.cleanupProcessExit = null;\n }\n state.schemaDir = null;\n};\n\nconst compileSchemaDir = (state: PluginState): void => {\n if (!state.schemaDir) return;\n compileSchemas(state.schemaDir);\n process.env.GSETTINGS_SCHEMA_DIR = prependSchemaDir(state.schemaDir, process.env.GSETTINGS_SCHEMA_DIR);\n};\n\nconst syncSchemaEnv = (state: PluginState): void => {\n if (state.rootDir === null) return;\n try {\n emitSchemaEnv(state.rootDir, state.dataDir);\n } catch (cause) {\n error(`Failed to generate GSettings schema types: ${errorMessage(cause)}`);\n }\n};\n\nconst registerSchemaForMode = (state: PluginState, filePath: string, id: string): void => {\n const fileName = basename(filePath);\n if (state.isBuild) {\n state.buildSchemas.add(filePath);\n info(`Queued GSettings schema: ${fileName}`);\n return;\n }\n state.trackedSchemas.set(filePath, id);\n const dir = ensureSchemaDir(state);\n stageSchema(dir, filePath);\n compileSchemaDir(state);\n info(`Compiled GSettings schema: ${fileName}`);\n};\n\nconst loadSchemaModule = (ctx: PluginContext, state: PluginState, id: string): string => {\n const filePath = fromVirtualId(id);\n const xml = readFileSync(filePath, \"utf-8\");\n const fileName = basename(filePath);\n\n registerSchemaForMode(state, filePath, id);\n\n let parsed: ReturnType<typeof parseSchemaXml>;\n try {\n parsed = parseSchemaXml(xml, fileName);\n } catch (error) {\n if (!(error instanceof SchemaParseError)) throw error;\n ctx.error(error.message);\n }\n if (parsed.schemas.length === 0) {\n ctx.error(`No <schema id=\"...\"> found in ${fileName}`);\n }\n return renderRuntimeModule(parsed);\n};\n\nconst emitCompiledSchemas = (ctx: PluginContext, state: PluginState): void => {\n if (!state.isBuild || state.buildSchemas.size === 0) return;\n\n const compiled = withStagingDir(\"schemas-build\", (dir) => {\n for (const filePath of state.buildSchemas) {\n stageSchema(dir, filePath);\n }\n compileSchemas(dir);\n return readFileSync(join(dir, \"gschemas.compiled\"));\n });\n ctx.emitFile({\n type: \"asset\",\n fileName: \"gschemas.compiled\",\n source: compiled,\n });\n\n info(`Compiled ${state.buildSchemas.size} GSettings schema(s)`);\n};\n\nconst handleSchemaHotUpdate = (state: PluginState, file: string, server: ViteDevServer): ModuleNode[] | undefined => {\n const virtualId = state.trackedSchemas.get(file);\n if (!virtualId) return;\n\n const dir = ensureSchemaDir(state);\n stageSchema(dir, file);\n compileSchemaDir(state);\n\n info(`Recompiled GSettings schema: ${basename(file)}`);\n\n const mod = server.moduleGraph.getModuleById(virtualId);\n if (mod) {\n server.moduleGraph.invalidateModule(mod);\n return [mod];\n }\n return undefined;\n};\n\nconst watchSchemaFiles = (state: PluginState, server: ViteDevServer): void => {\n server.httpServer?.once(\"close\", () => releaseSchemaDir(state));\n server.watcher.once(\"close\", () => releaseSchemaDir(state));\n const refreshSchemaTypes = (file: string): void => {\n if (file.endsWith(SCHEMA_SUFFIX)) syncSchemaEnv(state);\n };\n server.watcher.on(\"add\", refreshSchemaTypes);\n server.watcher.on(\"unlink\", refreshSchemaTypes);\n};\n\nexport function gtkxSettings(): Plugin {\n const state: PluginState = {\n schemaDir: null,\n rootDir: null,\n dataDir: null,\n isBuild: false,\n trackedSchemas: new Map(),\n buildSchemas: new Set(),\n cleanupProcessExit: null,\n };\n\n return {\n name: \"gtkx:settings\",\n enforce: \"pre\",\n\n config(config: UserConfig) {\n state.dataDir = resolveDataDir(config.root ?? process.cwd());\n },\n\n configResolved(config) {\n state.isBuild = config.command === \"build\";\n state.rootDir = typeof config.root === \"string\" ? config.root : null;\n syncSchemaEnv(state);\n },\n\n configureServer(server) {\n watchSchemaFiles(state, server);\n },\n\n outputOptions(options) {\n if (!state.isBuild) return;\n return prependBanner(options, SCHEMA_ENV_BANNER);\n },\n\n async resolveId(source, importer, options) {\n if (!source.endsWith(SCHEMA_SUFFIX)) return;\n return resolveToVirtual(this, { source, importer, options });\n },\n\n load(id) {\n if (!isVirtual(id)) return;\n return loadSchemaModule(this, state, id);\n },\n\n buildEnd() {\n emitCompiledSchemas(this, state);\n },\n\n closeBundle() {\n releaseSchemaDir(state);\n },\n\n handleHotUpdate({ file, server }) {\n if (file.endsWith(SCHEMA_SUFFIX)) syncSchemaEnv(state);\n return handleSchemaHotUpdate(state, file, server);\n },\n };\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"undeclared-library.d.ts","sourceRoot":"","sources":["../../src/vite-plugins/undeclared-library.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAc,MAAM,MAAM,CAAC;AAyC/C,wBAAgB,qBAAqB,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAyB3D"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { discoverGirNamespaces, resolveGirPath } from "@gtkx/codegen";
|
|
2
|
+
import { loadConfig } from "@gtkx/config";
|
|
3
|
+
const GENERATED_MODULE_PATTERN = /^@gtkx\/(?:gi|jsx)\/([a-z0-9]+)$/;
|
|
4
|
+
const girSearchPaths = async (state) => {
|
|
5
|
+
if (state.girPath === null) {
|
|
6
|
+
const { config } = await loadConfig(state.root, { mode: state.mode });
|
|
7
|
+
state.girPath = resolveGirPath(config.girPath);
|
|
8
|
+
}
|
|
9
|
+
return state.girPath;
|
|
10
|
+
};
|
|
11
|
+
const namespaceOf = (identifier) => identifier.slice(0, identifier.indexOf("-")).toLowerCase();
|
|
12
|
+
const findGirIdentifier = (girPath, namespace) => discoverGirNamespaces(girPath).find((identifier) => namespaceOf(identifier) === namespace);
|
|
13
|
+
const undeclaredLibraryError = (source, namespace, girPath) => {
|
|
14
|
+
const identifier = findGirIdentifier(girPath, namespace);
|
|
15
|
+
if (identifier === undefined) {
|
|
16
|
+
return new Error(`Cannot resolve "${source}": the binding store has no "${namespace}" module, and no GIR data for it ` +
|
|
17
|
+
`was found in [${girPath.join(", ")}]. If "${namespace}" is a library, install its ` +
|
|
18
|
+
"gobject-introspection data package and add its GIR identifier to `libraries` in gtkx.config.ts. " +
|
|
19
|
+
"Otherwise run gtkx codegen to regenerate the store.");
|
|
20
|
+
}
|
|
21
|
+
return new Error(`Cannot resolve "${source}": the "${identifier}" bindings have not been generated. ` +
|
|
22
|
+
`Add "${identifier}" to \`libraries\` in gtkx.config.ts, then run gtkx dev or gtkx build again.`);
|
|
23
|
+
};
|
|
24
|
+
export function gtkxUndeclaredLibrary(mode) {
|
|
25
|
+
const state = {
|
|
26
|
+
root: "",
|
|
27
|
+
mode,
|
|
28
|
+
girPath: null,
|
|
29
|
+
};
|
|
30
|
+
return {
|
|
31
|
+
name: "gtkx:undeclared-library",
|
|
32
|
+
enforce: "pre",
|
|
33
|
+
config(config) {
|
|
34
|
+
state.root = config.root ?? process.cwd();
|
|
35
|
+
},
|
|
36
|
+
async resolveId(source, importer, options) {
|
|
37
|
+
const namespace = GENERATED_MODULE_PATTERN.exec(source)?.[1];
|
|
38
|
+
if (namespace === undefined)
|
|
39
|
+
return;
|
|
40
|
+
const resolved = await this.resolve(source, importer, { ...options, skipSelf: true });
|
|
41
|
+
if (resolved !== null)
|
|
42
|
+
return;
|
|
43
|
+
throw undeclaredLibraryError(source, namespace, await girSearchPaths(state));
|
|
44
|
+
},
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=undeclared-library.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"undeclared-library.js","sourceRoot":"","sources":["../../src/vite-plugins/undeclared-library.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACtE,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAG1C,MAAM,wBAAwB,GAAG,kCAAkC,CAAC;AAQpE,MAAM,cAAc,GAAG,KAAK,EAAE,KAAkB,EAAqB,EAAE;IACnE,IAAI,KAAK,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;QACzB,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;QACtE,KAAK,CAAC,OAAO,GAAG,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACnD,CAAC;IACD,OAAO,KAAK,CAAC,OAAO,CAAC;AACzB,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,CAAC,UAAkB,EAAU,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;AAE/G,MAAM,iBAAiB,GAAG,CAAC,OAAiB,EAAE,SAAiB,EAAsB,EAAE,CACnF,qBAAqB,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,WAAW,CAAC,UAAU,CAAC,KAAK,SAAS,CAAC,CAAC;AAE/F,MAAM,sBAAsB,GAAG,CAAC,MAAc,EAAE,SAAiB,EAAE,OAAiB,EAAS,EAAE;IAC3F,MAAM,UAAU,GAAG,iBAAiB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IAEzD,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QAC3B,OAAO,IAAI,KAAK,CACZ,mBAAmB,MAAM,gCAAgC,SAAS,mCAAmC;YACjG,iBAAiB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,SAAS,8BAA8B;YACpF,kGAAkG;YAClG,qDAAqD,CAC5D,CAAC;IACN,CAAC;IAED,OAAO,IAAI,KAAK,CACZ,mBAAmB,MAAM,WAAW,UAAU,sCAAsC;QAChF,QAAQ,UAAU,8EAA8E,CACvG,CAAC;AACN,CAAC,CAAC;AAEF,MAAM,UAAU,qBAAqB,CAAC,IAAa;IAC/C,MAAM,KAAK,GAAgB;QACvB,IAAI,EAAE,EAAE;QACR,IAAI;QACJ,OAAO,EAAE,IAAI;KAChB,CAAC;IAEF,OAAO;QACH,IAAI,EAAE,yBAAyB;QAC/B,OAAO,EAAE,KAAK;QAEd,MAAM,CAAC,MAAkB;YACrB,KAAK,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAC9C,CAAC;QAED,KAAK,CAAC,SAAS,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO;YACrC,MAAM,SAAS,GAAG,wBAAwB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAC7D,IAAI,SAAS,KAAK,SAAS;gBAAE,OAAO;YAEpC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,GAAG,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;YACtF,IAAI,QAAQ,KAAK,IAAI;gBAAE,OAAO;YAE9B,MAAM,sBAAsB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC;QACjF,CAAC;KACJ,CAAC;AACN,CAAC","sourcesContent":["import { discoverGirNamespaces, resolveGirPath } from \"@gtkx/codegen\";\nimport { loadConfig } from \"@gtkx/config\";\nimport type { Plugin, UserConfig } from \"vite\";\n\nconst GENERATED_MODULE_PATTERN = /^@gtkx\\/(?:gi|jsx)\\/([a-z0-9]+)$/;\n\ntype PluginState = {\n root: string;\n mode: string | undefined;\n girPath: string[] | null;\n};\n\nconst girSearchPaths = async (state: PluginState): Promise<string[]> => {\n if (state.girPath === null) {\n const { config } = await loadConfig(state.root, { mode: state.mode });\n state.girPath = resolveGirPath(config.girPath);\n }\n return state.girPath;\n};\n\nconst namespaceOf = (identifier: string): string => identifier.slice(0, identifier.indexOf(\"-\")).toLowerCase();\n\nconst findGirIdentifier = (girPath: string[], namespace: string): string | undefined =>\n discoverGirNamespaces(girPath).find((identifier) => namespaceOf(identifier) === namespace);\n\nconst undeclaredLibraryError = (source: string, namespace: string, girPath: string[]): Error => {\n const identifier = findGirIdentifier(girPath, namespace);\n\n if (identifier === undefined) {\n return new Error(\n `Cannot resolve \"${source}\": the binding store has no \"${namespace}\" module, and no GIR data for it ` +\n `was found in [${girPath.join(\", \")}]. If \"${namespace}\" is a library, install its ` +\n \"gobject-introspection data package and add its GIR identifier to `libraries` in gtkx.config.ts. \" +\n \"Otherwise run gtkx codegen to regenerate the store.\",\n );\n }\n\n return new Error(\n `Cannot resolve \"${source}\": the \"${identifier}\" bindings have not been generated. ` +\n `Add \"${identifier}\" to \\`libraries\\` in gtkx.config.ts, then run gtkx dev or gtkx build again.`,\n );\n};\n\nexport function gtkxUndeclaredLibrary(mode?: string): Plugin {\n const state: PluginState = {\n root: \"\",\n mode,\n girPath: null,\n };\n\n return {\n name: \"gtkx:undeclared-library\",\n enforce: \"pre\",\n\n config(config: UserConfig) {\n state.root = config.root ?? process.cwd();\n },\n\n async resolveId(source, importer, options) {\n const namespace = GENERATED_MODULE_PATTERN.exec(source)?.[1];\n if (namespace === undefined) return;\n\n const resolved = await this.resolve(source, importer, { ...options, skipSelf: true });\n if (resolved !== null) return;\n\n throw undeclaredLibraryError(source, namespace, await girSearchPaths(state));\n },\n };\n}\n"]}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
type VirtualResolveContext = {
|
|
2
|
+
resolve: (source: string, importer?: string, options?: {
|
|
3
|
+
skipSelf?: boolean;
|
|
4
|
+
} & Record<string, unknown>) => Promise<{
|
|
5
|
+
id: string;
|
|
6
|
+
external?: boolean | "absolute" | "relative";
|
|
7
|
+
} | null>;
|
|
8
|
+
};
|
|
9
|
+
type VirtualResolveRequest = {
|
|
10
|
+
source: string;
|
|
11
|
+
importer: string | undefined;
|
|
12
|
+
options: Record<string, unknown> | undefined;
|
|
13
|
+
};
|
|
14
|
+
type VirtualNamespace = {
|
|
15
|
+
isVirtual: (id: string) => boolean;
|
|
16
|
+
toVirtualId: (realId: string) => string;
|
|
17
|
+
fromVirtualId: (id: string) => string;
|
|
18
|
+
resolveToVirtual: (ctx: VirtualResolveContext, request: VirtualResolveRequest) => Promise<string | undefined>;
|
|
19
|
+
};
|
|
20
|
+
export declare const createVirtualNamespace: (prefix: string) => VirtualNamespace;
|
|
21
|
+
export {};
|
|
22
|
+
//# sourceMappingURL=virtual-module.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"virtual-module.d.ts","sourceRoot":"","sources":["../../src/vite-plugins/virtual-module.ts"],"names":[],"mappings":"AAAA,KAAK,qBAAqB,GAAG;IACzB,OAAO,EAAE,CACL,MAAM,EAAE,MAAM,EACd,QAAQ,CAAC,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KACzD,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,OAAO,GAAG,UAAU,GAAG,UAAU,CAAA;KAAE,GAAG,IAAI,CAAC,CAAC;CACrF,CAAC;AAEF,KAAK,qBAAqB,GAAG;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;CAChD,CAAC;AAEF,KAAK,gBAAgB,GAAG;IACpB,SAAS,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC;IACnC,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC;IACxC,aAAa,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,MAAM,CAAC;IACtC,gBAAgB,EAAE,CAAC,GAAG,EAAE,qBAAqB,EAAE,OAAO,EAAE,qBAAqB,KAAK,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;CACjH,CAAC;AAEF,eAAO,MAAM,sBAAsB,WAAY,MAAM,KAAG,gBAevD,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export const createVirtualNamespace = (prefix) => {
|
|
2
|
+
const toVirtualId = (realId) => prefix + realId;
|
|
3
|
+
return {
|
|
4
|
+
isVirtual: (id) => id.startsWith(prefix),
|
|
5
|
+
toVirtualId,
|
|
6
|
+
fromVirtualId: (id) => id.slice(prefix.length),
|
|
7
|
+
resolveToVirtual: async (ctx, request) => {
|
|
8
|
+
const resolved = await ctx.resolve(request.source, request.importer, {
|
|
9
|
+
...request.options,
|
|
10
|
+
skipSelf: true,
|
|
11
|
+
});
|
|
12
|
+
if (!resolved || resolved.external)
|
|
13
|
+
return undefined;
|
|
14
|
+
return toVirtualId(resolved.id);
|
|
15
|
+
},
|
|
16
|
+
};
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=virtual-module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"virtual-module.js","sourceRoot":"","sources":["../../src/vite-plugins/virtual-module.ts"],"names":[],"mappings":"AAqBA,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,MAAc,EAAoB,EAAE;IACvE,MAAM,WAAW,GAAG,CAAC,MAAc,EAAU,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC;IAChE,OAAO;QACH,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC;QACxC,WAAW;QACX,aAAa,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;QAC9C,gBAAgB,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE;YACrC,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,EAAE;gBACjE,GAAG,OAAO,CAAC,OAAO;gBAClB,QAAQ,EAAE,IAAI;aACjB,CAAC,CAAC;YACH,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,QAAQ;gBAAE,OAAO,SAAS,CAAC;YACrD,OAAO,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACpC,CAAC;KACJ,CAAC;AACN,CAAC,CAAC","sourcesContent":["type VirtualResolveContext = {\n resolve: (\n source: string,\n importer?: string,\n options?: { skipSelf?: boolean } & Record<string, unknown>,\n ) => Promise<{ id: string; external?: boolean | \"absolute\" | \"relative\" } | null>;\n};\n\ntype VirtualResolveRequest = {\n source: string;\n importer: string | undefined;\n options: Record<string, unknown> | undefined;\n};\n\ntype VirtualNamespace = {\n isVirtual: (id: string) => boolean;\n toVirtualId: (realId: string) => string;\n fromVirtualId: (id: string) => string;\n resolveToVirtual: (ctx: VirtualResolveContext, request: VirtualResolveRequest) => Promise<string | undefined>;\n};\n\nexport const createVirtualNamespace = (prefix: string): VirtualNamespace => {\n const toVirtualId = (realId: string): string => prefix + realId;\n return {\n isVirtual: (id) => id.startsWith(prefix),\n toVirtualId,\n fromVirtualId: (id) => id.slice(prefix.length),\n resolveToVirtual: async (ctx, request) => {\n const resolved = await ctx.resolve(request.source, request.importer, {\n ...request.options,\n skipSelf: true,\n });\n if (!resolved || resolved.external) return undefined;\n return toVirtualId(resolved.id);\n },\n };\n};\n"]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Plugin } from "vite";
|
|
2
|
+
/**
|
|
3
|
+
* Vite plugin factory that assembles the plugins needed to run GTKX apps under Vitest,
|
|
4
|
+
* combining the shared GTKX Vite plugins with the `@gtkx/vitest` test integration.
|
|
5
|
+
*
|
|
6
|
+
* @returns The ordered array of Vite plugins to include in a Vitest configuration.
|
|
7
|
+
*/
|
|
8
|
+
declare const gtkx: () => Plugin[];
|
|
9
|
+
export default gtkx;
|
|
10
|
+
//# sourceMappingURL=vitest-plugin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vitest-plugin.d.ts","sourceRoot":"","sources":["../src/vitest-plugin.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAInC;;;;;GAKG;AACH,QAAA,MAAM,IAAI,QAAO,MAAM,EAAmE,CAAC;eAE5E,IAAI"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import gtkxVitest from "@gtkx/vitest";
|
|
2
|
+
import { gtkxVitePlugins } from "./vite-plugins/index.js";
|
|
3
|
+
import { gtkxSettingsWorkerEnv } from "./vite-plugins/settings-worker-env.js";
|
|
4
|
+
/**
|
|
5
|
+
* Vite plugin factory that assembles the plugins needed to run GTKX apps under Vitest,
|
|
6
|
+
* combining the shared GTKX Vite plugins with the `@gtkx/vitest` test integration.
|
|
7
|
+
*
|
|
8
|
+
* @returns The ordered array of Vite plugins to include in a Vitest configuration.
|
|
9
|
+
*/
|
|
10
|
+
const gtkx = () => [...gtkxVitePlugins(), gtkxSettingsWorkerEnv(), gtkxVitest()];
|
|
11
|
+
export default gtkx;
|
|
12
|
+
//# sourceMappingURL=vitest-plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vitest-plugin.js","sourceRoot":"","sources":["../src/vitest-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,cAAc,CAAC;AAEtC,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,uCAAuC,CAAC;AAE9E;;;;;GAKG;AACH,MAAM,IAAI,GAAG,GAAa,EAAE,CAAC,CAAC,GAAG,eAAe,EAAE,EAAE,qBAAqB,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;AAE3F,eAAe,IAAI,CAAC","sourcesContent":["import gtkxVitest from \"@gtkx/vitest\";\nimport type { Plugin } from \"vite\";\nimport { gtkxVitePlugins } from \"./vite-plugins/index.js\";\nimport { gtkxSettingsWorkerEnv } from \"./vite-plugins/settings-worker-env.js\";\n\n/**\n * Vite plugin factory that assembles the plugins needed to run GTKX apps under Vitest,\n * combining the shared GTKX Vite plugins with the `@gtkx/vitest` test integration.\n *\n * @returns The ordered array of Vite plugins to include in a Vitest configuration.\n */\nconst gtkx = (): Plugin[] => [...gtkxVitePlugins(), gtkxSettingsWorkerEnv(), gtkxVitest()];\n\nexport default gtkx;\n"]}
|
package/env.d.ts
CHANGED
|
@@ -1,11 +1,139 @@
|
|
|
1
1
|
/// <reference types="vite/client" />
|
|
2
|
+
/// <reference types="@gtkx/config/env" />
|
|
2
3
|
|
|
3
|
-
declare module "*.
|
|
4
|
-
const
|
|
5
|
-
export
|
|
4
|
+
declare module "*.png" {
|
|
5
|
+
const resourceUri: string;
|
|
6
|
+
export const path: string;
|
|
7
|
+
export default resourceUri;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
declare module "*.jpg" {
|
|
11
|
+
const resourceUri: string;
|
|
12
|
+
export const path: string;
|
|
13
|
+
export default resourceUri;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
declare module "*.jpeg" {
|
|
17
|
+
const resourceUri: string;
|
|
18
|
+
export const path: string;
|
|
19
|
+
export default resourceUri;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
declare module "*.gif" {
|
|
23
|
+
const resourceUri: string;
|
|
24
|
+
export const path: string;
|
|
25
|
+
export default resourceUri;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
declare module "*.svg" {
|
|
29
|
+
const resourceUri: string;
|
|
30
|
+
export const path: string;
|
|
31
|
+
export default resourceUri;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
declare module "*.webp" {
|
|
35
|
+
const resourceUri: string;
|
|
36
|
+
export const path: string;
|
|
37
|
+
export default resourceUri;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
declare module "*.webm" {
|
|
41
|
+
const resourceUri: string;
|
|
42
|
+
export const path: string;
|
|
43
|
+
export default resourceUri;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
declare module "*.mp4" {
|
|
47
|
+
const resourceUri: string;
|
|
48
|
+
export const path: string;
|
|
49
|
+
export default resourceUri;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
declare module "*.ogg" {
|
|
53
|
+
const resourceUri: string;
|
|
54
|
+
export const path: string;
|
|
55
|
+
export default resourceUri;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
declare module "*.mp3" {
|
|
59
|
+
const resourceUri: string;
|
|
60
|
+
export const path: string;
|
|
61
|
+
export default resourceUri;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
declare module "*.wav" {
|
|
65
|
+
const resourceUri: string;
|
|
66
|
+
export const path: string;
|
|
67
|
+
export default resourceUri;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
declare module "*.flac" {
|
|
71
|
+
const resourceUri: string;
|
|
72
|
+
export const path: string;
|
|
73
|
+
export default resourceUri;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
declare module "*.aac" {
|
|
77
|
+
const resourceUri: string;
|
|
78
|
+
export const path: string;
|
|
79
|
+
export default resourceUri;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
declare module "*.woff" {
|
|
83
|
+
const resourceUri: string;
|
|
84
|
+
export const path: string;
|
|
85
|
+
export default resourceUri;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
declare module "*.woff2" {
|
|
89
|
+
const resourceUri: string;
|
|
90
|
+
export const path: string;
|
|
91
|
+
export default resourceUri;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
declare module "*.eot" {
|
|
95
|
+
const resourceUri: string;
|
|
96
|
+
export const path: string;
|
|
97
|
+
export default resourceUri;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
declare module "*.ttf" {
|
|
101
|
+
const resourceUri: string;
|
|
102
|
+
export const path: string;
|
|
103
|
+
export default resourceUri;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
declare module "*.otf" {
|
|
107
|
+
const resourceUri: string;
|
|
108
|
+
export const path: string;
|
|
109
|
+
export default resourceUri;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
declare module "*.ico" {
|
|
113
|
+
const resourceUri: string;
|
|
114
|
+
export const path: string;
|
|
115
|
+
export default resourceUri;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
declare module "*.avif" {
|
|
119
|
+
const resourceUri: string;
|
|
120
|
+
export const path: string;
|
|
121
|
+
export default resourceUri;
|
|
6
122
|
}
|
|
7
123
|
|
|
8
124
|
declare module "*.data" {
|
|
125
|
+
const resourceUri: string;
|
|
126
|
+
export const path: string;
|
|
127
|
+
export default resourceUri;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
declare module "*.gpa" {
|
|
131
|
+
const resourceUri: string;
|
|
132
|
+
export const path: string;
|
|
133
|
+
export default resourceUri;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
declare module "*.css?url" {
|
|
9
137
|
const path: string;
|
|
10
138
|
export default path;
|
|
11
139
|
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gtkx/cli",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "1.0.0-rc.1",
|
|
4
|
+
"description": "Command-line tool and Vite plugin stack that scaffolds, develops, builds, and documents GTKX applications",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"gtkx",
|
|
7
7
|
"gtk",
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
},
|
|
23
23
|
"repository": {
|
|
24
24
|
"type": "git",
|
|
25
|
-
"url": "https://github.com/gtkx-org/gtkx.git",
|
|
25
|
+
"url": "git+https://github.com/gtkx-org/gtkx.git",
|
|
26
26
|
"directory": "packages/cli"
|
|
27
27
|
},
|
|
28
28
|
"license": "MPL-2.0",
|
|
@@ -30,22 +30,14 @@
|
|
|
30
30
|
"type": "module",
|
|
31
31
|
"exports": {
|
|
32
32
|
"./package.json": "./package.json",
|
|
33
|
-
".": {
|
|
34
|
-
"types": "./dist/index.d.ts",
|
|
35
|
-
"default": "./dist/index.js"
|
|
36
|
-
},
|
|
37
|
-
"./builder": {
|
|
38
|
-
"types": "./dist/builder.d.ts",
|
|
39
|
-
"default": "./dist/builder.js"
|
|
40
|
-
},
|
|
41
|
-
"./dev-server": {
|
|
42
|
-
"types": "./dist/dev-server.d.ts",
|
|
43
|
-
"default": "./dist/dev-server.js"
|
|
44
|
-
},
|
|
45
33
|
"./refresh-runtime": {
|
|
46
34
|
"types": "./dist/refresh-runtime.d.ts",
|
|
47
35
|
"default": "./dist/refresh-runtime.js"
|
|
48
36
|
},
|
|
37
|
+
"./vitest-plugin": {
|
|
38
|
+
"types": "./dist/vitest-plugin.d.ts",
|
|
39
|
+
"default": "./dist/vitest-plugin.js"
|
|
40
|
+
},
|
|
49
41
|
"./env": "./env.d.ts"
|
|
50
42
|
},
|
|
51
43
|
"bin": {
|
|
@@ -56,38 +48,40 @@
|
|
|
56
48
|
"bin",
|
|
57
49
|
"dist",
|
|
58
50
|
"env.d.ts",
|
|
59
|
-
"src"
|
|
60
|
-
"templates"
|
|
51
|
+
"src"
|
|
61
52
|
],
|
|
53
|
+
"engines": {
|
|
54
|
+
"node": ">=24"
|
|
55
|
+
},
|
|
62
56
|
"dependencies": {
|
|
63
|
-
"@
|
|
64
|
-
"@
|
|
65
|
-
"
|
|
66
|
-
"
|
|
57
|
+
"@babel/core": "^8.0.1",
|
|
58
|
+
"@babel/preset-typescript": "^8.0.1",
|
|
59
|
+
"@swc/core": "^1.15.43",
|
|
60
|
+
"babel-plugin-react-compiler": "^1.0.0",
|
|
61
|
+
"citty": "^0.2.2",
|
|
62
|
+
"fast-xml-parser": "^5.10.0",
|
|
67
63
|
"react-refresh": "^0.18.0",
|
|
68
|
-
"vite": "^
|
|
69
|
-
"@gtkx/
|
|
70
|
-
"@gtkx/
|
|
71
|
-
"@gtkx/
|
|
64
|
+
"vite": "^8.1.4",
|
|
65
|
+
"@gtkx/codegen": "1.0.0-rc.1",
|
|
66
|
+
"@gtkx/runtime": "1.0.0-rc.1",
|
|
67
|
+
"@gtkx/mcp": "1.0.0-rc.1",
|
|
68
|
+
"@gtkx/utils": "1.0.0-rc.1",
|
|
69
|
+
"@gtkx/config": "1.0.0-rc.1",
|
|
70
|
+
"create-gtkx": "1.0.0-rc.1",
|
|
71
|
+
"@gtkx/vitest": "1.0.0-rc.1"
|
|
72
72
|
},
|
|
73
73
|
"devDependencies": {
|
|
74
|
-
"@types/
|
|
74
|
+
"@types/babel__core": "^7.20.5",
|
|
75
75
|
"@types/react-refresh": "^0.14.7",
|
|
76
|
-
"
|
|
77
|
-
"@gtkx/testing": "0.
|
|
76
|
+
"vitest": "^4.1.10",
|
|
77
|
+
"@gtkx/testing": "1.0.0-rc.1"
|
|
78
78
|
},
|
|
79
79
|
"peerDependencies": {
|
|
80
|
-
"react": "^19"
|
|
81
|
-
"@gtkx/testing": "0.20.0"
|
|
82
|
-
},
|
|
83
|
-
"peerDependenciesMeta": {
|
|
84
|
-
"@gtkx/testing": {
|
|
85
|
-
"optional": true
|
|
86
|
-
}
|
|
80
|
+
"react": "^19"
|
|
87
81
|
},
|
|
88
82
|
"scripts": {
|
|
89
|
-
"build": "tsc -b",
|
|
90
|
-
"
|
|
91
|
-
"
|
|
83
|
+
"build": "tsc -b tsconfig.lib.json",
|
|
84
|
+
"typecheck": "tsc -b --emitDeclarationOnly",
|
|
85
|
+
"release": "tsx ../../scripts/release-package.ts"
|
|
92
86
|
}
|
|
93
87
|
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
declare module "babel-plugin-react-compiler" {
|
|
2
|
+
import type { PluginTarget } from "@babel/core";
|
|
3
|
+
|
|
4
|
+
const plugin: PluginTarget & { default?: PluginTarget };
|
|
5
|
+
export default plugin;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
declare module "@babel/preset-typescript" {
|
|
9
|
+
import type { PresetTarget } from "@babel/core";
|
|
10
|
+
|
|
11
|
+
const preset: PresetTarget & { default?: PresetTarget };
|
|
12
|
+
export default preset;
|
|
13
|
+
}
|