@gtkx/cli 1.2.2 → 1.4.0
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 +6 -4
- package/dist/builder.d.ts +0 -1
- package/dist/builder.d.ts.map +1 -1
- package/dist/builder.js +6 -6
- package/dist/builder.js.map +1 -1
- package/dist/codegen/freshness.js +1 -1
- package/dist/codegen/freshness.js.map +1 -1
- package/dist/codegen/run-codegen.d.ts +2 -2
- package/dist/codegen/run-codegen.d.ts.map +1 -1
- package/dist/codegen/run-codegen.js +28 -9
- package/dist/codegen/run-codegen.js.map +1 -1
- package/dist/commands/build.d.ts +0 -4
- package/dist/commands/build.d.ts.map +1 -1
- package/dist/commands/build.js +0 -5
- package/dist/commands/build.js.map +1 -1
- package/dist/commands/codegen.d.ts.map +1 -1
- package/dist/commands/codegen.js +1 -3
- package/dist/commands/codegen.js.map +1 -1
- package/dist/commands/docs.d.ts.map +1 -1
- package/dist/commands/docs.js +3 -0
- package/dist/commands/docs.js.map +1 -1
- package/dist/deploy/depends.d.ts +2 -2
- package/dist/deploy/depends.d.ts.map +1 -1
- package/dist/deploy/depends.js +30 -15
- package/dist/deploy/depends.js.map +1 -1
- package/dist/deploy/nfpm/config.js +1 -1
- package/dist/deploy/nfpm/config.js.map +1 -1
- package/dist/deploy/node-runtime/elf.d.ts +1 -1
- package/dist/deploy/node-runtime/elf.d.ts.map +1 -1
- package/dist/deploy/node-runtime/elf.js +2 -2
- package/dist/deploy/node-runtime/elf.js.map +1 -1
- package/dist/deploy/node-runtime/index.js +2 -2
- package/dist/deploy/node-runtime/index.js.map +1 -1
- package/dist/deploy/notices/collect.d.ts +3 -1
- package/dist/deploy/notices/collect.d.ts.map +1 -1
- package/dist/deploy/notices/collect.js +2 -2
- package/dist/deploy/notices/collect.js.map +1 -1
- package/dist/deploy/notices/packages.d.ts +2 -1
- package/dist/deploy/notices/packages.d.ts.map +1 -1
- package/dist/deploy/notices/packages.js +4 -27
- package/dist/deploy/notices/packages.js.map +1 -1
- package/dist/deploy/payload/icons.d.ts +7 -3
- package/dist/deploy/payload/icons.d.ts.map +1 -1
- package/dist/deploy/payload/icons.js +46 -28
- package/dist/deploy/payload/icons.js.map +1 -1
- package/dist/deploy/payload/stage.d.ts.map +1 -1
- package/dist/deploy/payload/stage.js +3 -2
- package/dist/deploy/payload/stage.js.map +1 -1
- package/dist/deploy/run-deploy.d.ts.map +1 -1
- package/dist/deploy/run-deploy.js +63 -11
- package/dist/deploy/run-deploy.js.map +1 -1
- package/dist/deploy/settings/build-manifest.d.ts +9 -0
- package/dist/deploy/settings/build-manifest.d.ts.map +1 -0
- package/dist/deploy/settings/build-manifest.js +80 -0
- package/dist/deploy/settings/build-manifest.js.map +1 -0
- package/dist/deploy/settings/index.d.ts.map +1 -1
- package/dist/deploy/settings/index.js +9 -3
- package/dist/deploy/settings/index.js.map +1 -1
- package/dist/deploy/settings/libraries.d.ts +8 -0
- package/dist/deploy/settings/libraries.d.ts.map +1 -0
- package/dist/deploy/settings/libraries.js +39 -0
- package/dist/deploy/settings/libraries.js.map +1 -0
- package/dist/deploy/settings/paths.d.ts +3 -0
- package/dist/deploy/settings/paths.d.ts.map +1 -1
- package/dist/deploy/settings/paths.js +6 -32
- package/dist/deploy/settings/paths.js.map +1 -1
- package/dist/deploy/targets/appimage.d.ts.map +1 -1
- package/dist/deploy/targets/appimage.js +19 -13
- package/dist/deploy/targets/appimage.js.map +1 -1
- package/dist/deploy/targets/flatpak-manifest.d.ts +2 -1
- package/dist/deploy/targets/flatpak-manifest.d.ts.map +1 -1
- package/dist/deploy/targets/flatpak-manifest.js +5 -1
- package/dist/deploy/targets/flatpak-manifest.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 +9 -6
- package/dist/deploy/targets/flatpak-source.js.map +1 -1
- package/dist/deploy/types.d.ts +4 -4
- package/dist/deploy/types.d.ts.map +1 -1
- package/dist/deploy/types.js.map +1 -1
- package/dist/dev/icon-dir.d.ts +1 -1
- package/dist/dev/icon-dir.d.ts.map +1 -1
- package/dist/dev/icon-dir.js +20 -7
- package/dist/dev/icon-dir.js.map +1 -1
- package/dist/dev/runner-deps.d.ts.map +1 -1
- package/dist/dev/runner-deps.js +5 -1
- package/dist/dev/runner-deps.js.map +1 -1
- package/dist/dev/runner-main.js +4 -4
- package/dist/dev/runner-main.js.map +1 -1
- package/dist/dev/runner.d.ts +1 -1
- package/dist/dev/runner.d.ts.map +1 -1
- package/dist/dev/runner.js +1 -1
- package/dist/dev/runner.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 +3 -1
- package/dist/dev/schema-dir.js.map +1 -1
- package/dist/internal/build-manifest.d.ts +20 -0
- package/dist/internal/build-manifest.d.ts.map +1 -0
- package/dist/internal/build-manifest.js +6 -0
- package/dist/internal/build-manifest.js.map +1 -0
- package/dist/internal/icon-path.d.ts +13 -0
- package/dist/internal/icon-path.d.ts.map +1 -0
- package/dist/internal/icon-path.js +86 -0
- package/dist/internal/icon-path.js.map +1 -0
- package/dist/internal/source-imports.d.ts +8 -0
- package/dist/internal/source-imports.d.ts.map +1 -0
- package/dist/internal/source-imports.js +144 -0
- package/dist/internal/source-imports.js.map +1 -0
- package/dist/mcp/widget-properties.d.ts.map +1 -1
- package/dist/mcp/widget-properties.js +3 -12
- package/dist/mcp/widget-properties.js.map +1 -1
- package/dist/settings/render.d.ts +7 -1
- package/dist/settings/render.d.ts.map +1 -1
- package/dist/settings/render.js +69 -20
- package/dist/settings/render.js.map +1 -1
- package/dist/settings/schema.d.ts +4 -3
- package/dist/settings/schema.d.ts.map +1 -1
- package/dist/settings/schema.js +122 -15
- package/dist/settings/schema.js.map +1 -1
- package/dist/vite-plugins/asset-emitter.d.ts +1 -1
- package/dist/vite-plugins/asset-emitter.d.ts.map +1 -1
- package/dist/vite-plugins/asset-emitter.js.map +1 -1
- package/dist/vite-plugins/asset-extensions.d.ts.map +1 -1
- package/dist/vite-plugins/asset-extensions.js +1 -0
- package/dist/vite-plugins/asset-extensions.js.map +1 -1
- package/dist/vite-plugins/asset-imports.d.ts +2 -1
- package/dist/vite-plugins/asset-imports.d.ts.map +1 -1
- package/dist/vite-plugins/asset-imports.js +37 -16
- package/dist/vite-plugins/asset-imports.js.map +1 -1
- package/dist/vite-plugins/asset-specifier.d.ts +13 -1
- package/dist/vite-plugins/asset-specifier.d.ts.map +1 -1
- package/dist/vite-plugins/asset-specifier.js +39 -1
- package/dist/vite-plugins/asset-specifier.js.map +1 -1
- package/dist/vite-plugins/build-manifest.d.ts +5 -0
- package/dist/vite-plugins/build-manifest.d.ts.map +1 -0
- package/dist/vite-plugins/{bundled-packages.js → build-manifest.js} +20 -14
- package/dist/vite-plugins/build-manifest.js.map +1 -0
- package/dist/vite-plugins/built-url.d.ts +1 -1
- package/dist/vite-plugins/built-url.d.ts.map +1 -1
- package/dist/vite-plugins/built-url.js +37 -24
- package/dist/vite-plugins/built-url.js.map +1 -1
- package/dist/vite-plugins/icons.d.ts +2 -1
- package/dist/vite-plugins/icons.d.ts.map +1 -1
- package/dist/vite-plugins/icons.js +25 -12
- package/dist/vite-plugins/icons.js.map +1 -1
- package/dist/vite-plugins/index.d.ts +2 -1
- package/dist/vite-plugins/index.d.ts.map +1 -1
- package/dist/vite-plugins/index.js +7 -5
- package/dist/vite-plugins/index.js.map +1 -1
- package/dist/vite-plugins/native.d.ts.map +1 -1
- package/dist/vite-plugins/native.js +23 -4
- package/dist/vite-plugins/native.js.map +1 -1
- package/dist/vite-plugins/resource-init-module.d.ts +7 -3
- package/dist/vite-plugins/resource-init-module.d.ts.map +1 -1
- package/dist/vite-plugins/resource-init-module.js +39 -14
- package/dist/vite-plugins/resource-init-module.js.map +1 -1
- package/dist/vite-plugins/resource-shared.d.ts +3 -1
- package/dist/vite-plugins/resource-shared.d.ts.map +1 -1
- package/dist/vite-plugins/resource-shared.js +3 -1
- package/dist/vite-plugins/resource-shared.js.map +1 -1
- package/dist/vite-plugins/resources.d.ts +1 -1
- package/dist/vite-plugins/resources.d.ts.map +1 -1
- package/dist/vite-plugins/resources.js +922 -86
- package/dist/vite-plugins/resources.js.map +1 -1
- package/dist/vite-plugins/settings-worker-env.d.ts.map +1 -1
- package/dist/vite-plugins/settings-worker-env.js +6 -3
- package/dist/vite-plugins/settings-worker-env.js.map +1 -1
- package/dist/vite-plugins/settings.d.ts +3 -1
- package/dist/vite-plugins/settings.d.ts.map +1 -1
- package/dist/vite-plugins/settings.js +63 -23
- package/dist/vite-plugins/settings.js.map +1 -1
- package/dist/vite-plugins/store-links.js +1 -1
- package/dist/vite-plugins/store-links.js.map +1 -1
- package/dist/vite-plugins/undeclared-library.d.ts.map +1 -1
- package/dist/vite-plugins/undeclared-library.js +25 -13
- package/dist/vite-plugins/undeclared-library.js.map +1 -1
- package/env.d.ts +11 -192
- package/package.json +14 -14
- package/src/builder.ts +6 -7
- package/src/codegen/freshness.ts +1 -1
- package/src/codegen/run-codegen.ts +33 -10
- package/src/commands/build.ts +0 -5
- package/src/commands/codegen.ts +1 -3
- package/src/commands/docs.ts +3 -0
- package/src/deploy/depends.ts +47 -18
- package/src/deploy/nfpm/config.ts +1 -1
- package/src/deploy/node-runtime/elf.ts +3 -3
- package/src/deploy/node-runtime/index.ts +2 -2
- package/src/deploy/notices/collect.ts +4 -2
- package/src/deploy/notices/packages.ts +5 -43
- package/src/deploy/payload/icons.ts +64 -34
- package/src/deploy/payload/stage.ts +5 -2
- package/src/deploy/run-deploy.ts +87 -12
- package/src/deploy/settings/build-manifest.ts +122 -0
- package/src/deploy/settings/index.ts +9 -4
- package/src/deploy/settings/libraries.ts +57 -0
- package/src/deploy/settings/paths.ts +10 -47
- package/src/deploy/targets/appimage.ts +32 -15
- package/src/deploy/targets/flatpak-manifest.ts +7 -1
- package/src/deploy/targets/flatpak-pnpm.ts +4 -4
- package/src/deploy/targets/flatpak-source.ts +9 -10
- package/src/deploy/types.ts +4 -4
- package/src/dev/icon-dir.ts +31 -7
- package/src/dev/runner-deps.ts +5 -1
- package/src/dev/runner-main.ts +4 -4
- package/src/dev/runner.ts +2 -2
- package/src/dev/schema-dir.ts +3 -1
- package/src/internal/build-manifest.ts +32 -0
- package/src/internal/icon-path.ts +127 -0
- package/src/internal/source-imports.ts +200 -0
- package/src/mcp/widget-properties.ts +3 -14
- package/src/settings/render.ts +99 -21
- package/src/settings/schema.ts +190 -17
- package/src/vite-plugins/asset-emitter.ts +1 -1
- package/src/vite-plugins/asset-extensions.ts +1 -0
- package/src/vite-plugins/asset-imports.ts +60 -19
- package/src/vite-plugins/asset-specifier.ts +73 -1
- package/src/vite-plugins/{bundled-packages.ts → build-manifest.ts} +30 -19
- package/src/vite-plugins/built-url.ts +49 -28
- package/src/vite-plugins/icons.ts +33 -14
- package/src/vite-plugins/index.ts +12 -5
- package/src/vite-plugins/native.ts +31 -4
- package/src/vite-plugins/resource-init-module.ts +44 -15
- package/src/vite-plugins/resource-shared.ts +4 -0
- package/src/vite-plugins/resources.ts +1459 -100
- package/src/vite-plugins/settings-worker-env.ts +7 -3
- package/src/vite-plugins/settings.ts +89 -21
- package/src/vite-plugins/store-links.ts +1 -1
- package/src/vite-plugins/undeclared-library.ts +31 -13
- package/dist/vite-plugins/bundled-packages.d.ts +0 -5
- package/dist/vite-plugins/bundled-packages.d.ts.map +0 -1
- package/dist/vite-plugins/bundled-packages.js.map +0 -1
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { isRecord, sortStringsBy } from "@gtkx/utils";
|
|
2
2
|
import { readFileSync } from "node:fs";
|
|
3
3
|
import { dirname, join, relative, resolve } from "node:path";
|
|
4
|
+
import { BUILD_MANIFEST_FILENAME, BUILD_MANIFEST_FORMAT_VERSION, BUILD_MANIFEST_GENERATOR, } from "../internal/build-manifest.js";
|
|
4
5
|
import { stripQuery } from "./strip-query.js";
|
|
5
|
-
const
|
|
6
|
-
const MANIFEST_FILENAME = "package.json";
|
|
6
|
+
const PACKAGE_MANIFEST_FILENAME = "package.json";
|
|
7
7
|
const DEFAULT_OUT_DIR = "dist";
|
|
8
8
|
const JSON_INDENT = 4;
|
|
9
9
|
const identityIn = (dir) => {
|
|
10
10
|
try {
|
|
11
|
-
const parsed = JSON.parse(readFileSync(join(dir,
|
|
11
|
+
const parsed = JSON.parse(readFileSync(join(dir, PACKAGE_MANIFEST_FILENAME), "utf8"));
|
|
12
12
|
if (!isRecord(parsed) || typeof parsed.name !== "string") {
|
|
13
13
|
return null;
|
|
14
14
|
}
|
|
@@ -30,34 +30,40 @@ const packageForModule = (id) => {
|
|
|
30
30
|
const path = stripQuery(id);
|
|
31
31
|
return path.startsWith("/") ? packageIn(dirname(path)) : null;
|
|
32
32
|
};
|
|
33
|
-
const
|
|
33
|
+
const packageKey = (entry) => `${entry.name}@${entry.version ?? ""}`;
|
|
34
34
|
const relativeTo = (outDir, entry) => ({
|
|
35
35
|
...entry,
|
|
36
36
|
dir: relative(outDir, entry.dir),
|
|
37
37
|
});
|
|
38
|
-
const
|
|
38
|
+
const packagesFor = (outDir, ids) => {
|
|
39
39
|
const found = ids.map((id) => packageForModule(id)).filter((entry) => entry !== null);
|
|
40
|
-
const unique = new Map(found.map((entry) => [
|
|
41
|
-
|
|
42
|
-
return `${JSON.stringify({ packages }, null, JSON_INDENT)}\n`;
|
|
40
|
+
const unique = new Map(found.map((entry) => [packageKey(entry), entry]));
|
|
41
|
+
return sortStringsBy(unique.values(), packageKey).map((entry) => relativeTo(outDir, entry));
|
|
43
42
|
};
|
|
44
|
-
|
|
43
|
+
const renderManifest = (manifest) => `${JSON.stringify(manifest, null, JSON_INDENT)}\n`;
|
|
44
|
+
function gtkxBuildManifest(root, collector) {
|
|
45
45
|
const state = { outDir: join(root, DEFAULT_OUT_DIR) };
|
|
46
46
|
return {
|
|
47
|
-
name: "gtkx:
|
|
47
|
+
name: "gtkx:build-manifest",
|
|
48
48
|
apply: "build",
|
|
49
49
|
configResolved(config) {
|
|
50
50
|
state.outDir = resolve(config.root, config.build.outDir);
|
|
51
51
|
},
|
|
52
52
|
generateBundle(_options, bundle) {
|
|
53
53
|
const ids = Object.values(bundle).flatMap((output) => (output.type === "chunk" ? output.moduleIds : []));
|
|
54
|
+
const manifest = {
|
|
55
|
+
generator: BUILD_MANIFEST_GENERATOR,
|
|
56
|
+
formatVersion: BUILD_MANIFEST_FORMAT_VERSION,
|
|
57
|
+
schemas: collector.schemas,
|
|
58
|
+
packages: packagesFor(state.outDir, ids),
|
|
59
|
+
};
|
|
54
60
|
this.emitFile({
|
|
55
61
|
type: "asset",
|
|
56
|
-
fileName:
|
|
57
|
-
source:
|
|
62
|
+
fileName: BUILD_MANIFEST_FILENAME,
|
|
63
|
+
source: renderManifest(manifest),
|
|
58
64
|
});
|
|
59
65
|
},
|
|
60
66
|
};
|
|
61
67
|
}
|
|
62
|
-
export {
|
|
63
|
-
//# sourceMappingURL=
|
|
68
|
+
export { gtkxBuildManifest };
|
|
69
|
+
//# sourceMappingURL=build-manifest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build-manifest.js","sourceRoot":"","sources":["../../src/vite-plugins/build-manifest.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Plugin } from \"vite\";\nimport { isRecord, sortStringsBy } from \"@gtkx/utils\";\nimport { readFileSync } from \"node:fs\";\nimport { dirname, join, relative, resolve } from \"node:path\";\nimport {\n BUILD_MANIFEST_FILENAME,\n BUILD_MANIFEST_FORMAT_VERSION,\n BUILD_MANIFEST_GENERATOR,\n type BuildManifest,\n type BuildManifestCollector,\n type RecordedPackage,\n} from \"../internal/build-manifest.js\";\nimport { stripQuery } from \"./strip-query.js\";\n\ntype PackageIdentity = {\n name: string;\n version: string | null;\n};\n\ntype ManifestState = {\n outDir: string;\n};\n\nconst PACKAGE_MANIFEST_FILENAME = \"package.json\";\nconst DEFAULT_OUT_DIR = \"dist\";\nconst JSON_INDENT = 4;\n\nconst identityIn = (dir: string): PackageIdentity | null => {\n try {\n const parsed: unknown = JSON.parse(readFileSync(join(dir, PACKAGE_MANIFEST_FILENAME), \"utf8\"));\n\n if (!isRecord(parsed) || typeof parsed.name !== \"string\") {\n return null;\n }\n\n return { name: parsed.name, version: typeof parsed.version === \"string\" ? parsed.version : null };\n } catch {\n return null;\n }\n};\n\nconst packageIn = (dir: string): RecordedPackage | null => {\n const identity = identityIn(dir);\n\n if (identity !== null) {\n return { ...identity, dir };\n }\n\n const parent = dirname(dir);\n\n return parent === dir ? null : packageIn(parent);\n};\n\nconst packageForModule = (id: string): RecordedPackage | null => {\n const path = stripQuery(id);\n\n return path.startsWith(\"/\") ? packageIn(dirname(path)) : null;\n};\n\nconst packageKey = (entry: RecordedPackage): string => `${entry.name}@${entry.version ?? \"\"}`;\n\nconst relativeTo = (outDir: string, entry: RecordedPackage): RecordedPackage => ({\n ...entry,\n dir: relative(outDir, entry.dir),\n});\n\nconst packagesFor = (outDir: string, ids: string[]): RecordedPackage[] => {\n const found = ids.map((id) => packageForModule(id)).filter((entry) => entry !== null);\n const unique: Map<string, RecordedPackage> = new Map(found.map((entry) => [packageKey(entry), entry]));\n\n return sortStringsBy(unique.values(), packageKey).map((entry) => relativeTo(outDir, entry));\n};\n\nconst renderManifest = (manifest: BuildManifest): string => `${JSON.stringify(manifest, null, JSON_INDENT)}\\n`;\n\nfunction gtkxBuildManifest(root: string, collector: BuildManifestCollector): Plugin {\n const state: ManifestState = { outDir: join(root, DEFAULT_OUT_DIR) };\n\n return {\n name: \"gtkx:build-manifest\",\n apply: \"build\",\n\n configResolved(config) {\n state.outDir = resolve(config.root, config.build.outDir);\n },\n\n generateBundle(_options, bundle) {\n const ids = Object.values(bundle).flatMap((output) => (output.type === \"chunk\" ? output.moduleIds : []));\n\n const manifest: BuildManifest = {\n generator: BUILD_MANIFEST_GENERATOR,\n formatVersion: BUILD_MANIFEST_FORMAT_VERSION,\n schemas: collector.schemas,\n packages: packagesFor(state.outDir, ids),\n };\n\n this.emitFile({\n type: \"asset\",\n fileName: BUILD_MANIFEST_FILENAME,\n source: renderManifest(manifest),\n });\n },\n };\n}\n\nexport { gtkxBuildManifest };\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"built-url.d.ts","sourceRoot":"","sources":["../../src/vite-plugins/built-url.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"built-url.d.ts","sourceRoot":"","sources":["../../src/vite-plugins/built-url.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAc,MAAM,MAAM,CAAC;AAyD/C,iBAAS,YAAY,IAAI,MAAM,CAiB9B;AAED,OAAO,EAAE,YAAY,EAAE,CAAC"}
|
|
@@ -1,38 +1,51 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
const
|
|
5
|
-
const specifier = JSON.stringify(target.replace(LEADING_SLASHES, "./"));
|
|
6
|
-
return `decodeURIComponent(new URL(${specifier}, ${EXECUTABLE_URL_BASE}).pathname)`;
|
|
7
|
-
};
|
|
1
|
+
import { existsSync } from "node:fs";
|
|
2
|
+
import { isAbsolute } from "node:path";
|
|
3
|
+
import { stripQuery } from "./strip-query.js";
|
|
4
|
+
const URL_QUERY_RE = /\?url(?:&t=\d+)?$/;
|
|
8
5
|
const bundleRelativeUrl = (filename) => {
|
|
9
6
|
const specifier = JSON.stringify(`./${filename}`);
|
|
10
7
|
return `decodeURIComponent(new URL(${specifier}, import.meta.url).pathname)`;
|
|
11
8
|
};
|
|
12
|
-
const renderAssetUrl = (filename, type
|
|
9
|
+
const renderAssetUrl = (filename, type) => {
|
|
13
10
|
if (type !== "asset") {
|
|
14
11
|
return undefined;
|
|
15
12
|
}
|
|
16
|
-
|
|
17
|
-
|
|
13
|
+
return { runtime: bundleRelativeUrl(filename) };
|
|
14
|
+
};
|
|
15
|
+
const configureBuiltUrl = (userConfig, command) => {
|
|
16
|
+
if (command !== "build" || userConfig.experimental?.renderBuiltUrl) {
|
|
17
|
+
return undefined;
|
|
18
|
+
}
|
|
19
|
+
return {
|
|
20
|
+
experimental: {
|
|
21
|
+
renderBuiltUrl(filename, { type }) {
|
|
22
|
+
return renderAssetUrl(filename, type);
|
|
23
|
+
},
|
|
24
|
+
},
|
|
25
|
+
};
|
|
26
|
+
};
|
|
27
|
+
const loadDevFileUrl = (ctx, state, id) => {
|
|
28
|
+
if (state.isBuild || !URL_QUERY_RE.test(id)) {
|
|
29
|
+
return undefined;
|
|
30
|
+
}
|
|
31
|
+
const file = stripQuery(id);
|
|
32
|
+
if (!isAbsolute(file) || !existsSync(file)) {
|
|
33
|
+
return undefined;
|
|
18
34
|
}
|
|
19
|
-
|
|
35
|
+
ctx.addWatchFile(file);
|
|
36
|
+
return `export default ${JSON.stringify(file)};`;
|
|
20
37
|
};
|
|
21
|
-
function gtkxBuiltUrl(
|
|
38
|
+
function gtkxBuiltUrl() {
|
|
39
|
+
const state = { isBuild: false };
|
|
22
40
|
return {
|
|
23
41
|
name: "gtkx:built-url",
|
|
24
|
-
|
|
25
|
-
config(userConfig)
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
renderBuiltUrl(filename, { type }) {
|
|
32
|
-
return renderAssetUrl(filename, type, assetBase);
|
|
33
|
-
},
|
|
34
|
-
},
|
|
35
|
-
};
|
|
42
|
+
enforce: "pre",
|
|
43
|
+
config: (userConfig, { command }) => configureBuiltUrl(userConfig, command),
|
|
44
|
+
configResolved(config) {
|
|
45
|
+
state.isBuild = config.command === "build";
|
|
46
|
+
},
|
|
47
|
+
load(id) {
|
|
48
|
+
return loadDevFileUrl(this, state, id);
|
|
36
49
|
},
|
|
37
50
|
};
|
|
38
51
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"built-url.js","sourceRoot":"","sources":["../../src/vite-plugins/built-url.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"built-url.js","sourceRoot":"","sources":["../../src/vite-plugins/built-url.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAK9C,MAAM,YAAY,GAAG,mBAAmB,CAAC;AAEzC,MAAM,iBAAiB,GAAG,CAAC,QAAgB,EAAU,EAAE;IACnD,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,QAAQ,EAAE,CAAC,CAAC;IAElD,OAAO,8BAA8B,SAAS,8BAA8B,CAAC;AACjF,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,CACnB,QAAgB,EAChB,IAAY,EACmB,EAAE;IACjC,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;QACnB,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,iBAAiB,CAAC,QAAQ,CAAC,EAAE,CAAC;AACpD,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CAAC,UAAsB,EAAE,OAAe,EAA0B,EAAE;IAC1F,IAAI,OAAO,KAAK,OAAO,IAAI,UAAU,CAAC,YAAY,EAAE,cAAc,EAAE,CAAC;QACjE,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,OAAO;QACH,YAAY,EAAE;YACV,cAAc,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE;gBAC7B,OAAO,cAAc,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;YAC1C,CAAC;SACJ;KACJ,CAAC;AACN,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,CAAC,GAAiB,EAAE,KAAkB,EAAE,EAAU,EAAsB,EAAE;IAC7F,IAAI,KAAK,CAAC,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;QAC1C,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,MAAM,IAAI,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC;IAE5B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACzC,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IAEvB,OAAO,kBAAkB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC;AACrD,CAAC,CAAC;AAEF,SAAS,YAAY;IACjB,MAAM,KAAK,GAAgB,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAE9C,OAAO;QACH,IAAI,EAAE,gBAAgB;QACtB,OAAO,EAAE,KAAK;QAEd,MAAM,EAAE,CAAC,UAAU,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,iBAAiB,CAAC,UAAU,EAAE,OAAO,CAAC;QAE3E,cAAc,CAAC,MAAM;YACjB,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,KAAK,OAAO,CAAC;QAC/C,CAAC;QAED,IAAI,CAAC,EAAE;YACH,OAAO,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;QAC3C,CAAC;KACJ,CAAC;AACN,CAAC;AAED,OAAO,EAAE,YAAY,EAAE,CAAC","sourcesContent":["import type { Plugin, UserConfig } from \"vite\";\nimport { existsSync } from \"node:fs\";\nimport { isAbsolute } from \"node:path\";\nimport { stripQuery } from \"./strip-query.js\";\n\ntype PluginState = { isBuild: boolean };\ntype WatchContext = { addWatchFile: (file: string) => void };\n\nconst URL_QUERY_RE = /\\?url(?:&t=\\d+)?$/;\n\nconst bundleRelativeUrl = (filename: string): string => {\n const specifier = JSON.stringify(`./${filename}`);\n\n return `decodeURIComponent(new URL(${specifier}, import.meta.url).pathname)`;\n};\n\nconst renderAssetUrl = (\n filename: string,\n type: string,\n): { runtime: string } | undefined => {\n if (type !== \"asset\") {\n return undefined;\n }\n\n return { runtime: bundleRelativeUrl(filename) };\n};\n\nconst configureBuiltUrl = (userConfig: UserConfig, command: string): UserConfig | undefined => {\n if (command !== \"build\" || userConfig.experimental?.renderBuiltUrl) {\n return undefined;\n }\n\n return {\n experimental: {\n renderBuiltUrl(filename, { type }) {\n return renderAssetUrl(filename, type);\n },\n },\n };\n};\n\nconst loadDevFileUrl = (ctx: WatchContext, state: PluginState, id: string): string | undefined => {\n if (state.isBuild || !URL_QUERY_RE.test(id)) {\n return undefined;\n }\n\n const file = stripQuery(id);\n\n if (!isAbsolute(file) || !existsSync(file)) {\n return undefined;\n }\n\n ctx.addWatchFile(file);\n\n return `export default ${JSON.stringify(file)};`;\n};\n\nfunction gtkxBuiltUrl(): Plugin {\n const state: PluginState = { isBuild: false };\n\n return {\n name: \"gtkx:built-url\",\n enforce: \"pre\",\n\n config: (userConfig, { command }) => configureBuiltUrl(userConfig, command),\n\n configResolved(config) {\n state.isBuild = config.command === \"build\";\n },\n\n load(id) {\n return loadDevFileUrl(this, state, id);\n },\n };\n}\n\nexport { gtkxBuiltUrl };\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"icons.d.ts","sourceRoot":"","sources":["../../src/vite-plugins/icons.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAc,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"icons.d.ts","sourceRoot":"","sources":["../../src/vite-plugins/icons.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,KAAK,EAAE,MAAM,EAAc,MAAM,MAAM,CAAC;AA2D/C,iBAAS,SAAS,CAAC,UAAU,GAAE,YAAmC,GAAG,MAAM,CA2B1E;AAED,OAAO,EAAE,SAAS,EAAE,CAAC"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
+
import { createConfigLoader } from "@gtkx/config/internal";
|
|
1
2
|
import { info } from "@gtkx/utils";
|
|
2
3
|
import { readFileSync } from "node:fs";
|
|
3
4
|
import { join } from "node:path";
|
|
4
5
|
import { prependBanner } from "../internal/banner.js";
|
|
5
|
-
import {
|
|
6
|
+
import { relativeIconPath, resolveApplicationIcon, } from "../internal/icon-path.js";
|
|
6
7
|
import { listFilesRecursive } from "../internal/list-files.js";
|
|
7
8
|
const ICONS_DIR = "icons";
|
|
8
9
|
const XDG_ENV_BANNER = [
|
|
@@ -11,11 +12,22 @@ const XDG_ENV_BANNER = [
|
|
|
11
12
|
" process.env.XDG_DATA_DIRS || \"/usr/local/share:/usr/share\",",
|
|
12
13
|
"].join(\":\");",
|
|
13
14
|
].join("\n");
|
|
14
|
-
const findIconFiles = (
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
15
|
+
const findIconFiles = (state) => {
|
|
16
|
+
if (state.source.kind === "theme") {
|
|
17
|
+
return listFilesRecursive(state.source.path);
|
|
18
|
+
}
|
|
19
|
+
if (state.source.kind === "none") {
|
|
20
|
+
return [];
|
|
21
|
+
}
|
|
22
|
+
return [{
|
|
23
|
+
absPath: state.source.path,
|
|
24
|
+
rel: relativeIconPath(state.applicationId, state.source.path),
|
|
25
|
+
}];
|
|
26
|
+
};
|
|
27
|
+
const applyUserConfig = async (state, config, loadConfig) => {
|
|
28
|
+
const { config: gtkxConfig, root } = await loadConfig.load(config.root ?? process.cwd());
|
|
29
|
+
state.applicationId = gtkxConfig.applicationId;
|
|
30
|
+
state.source = resolveApplicationIcon(root, gtkxConfig.applicationId, gtkxConfig.applicationIcon);
|
|
19
31
|
};
|
|
20
32
|
const emitIcons = (ctx, icons) => {
|
|
21
33
|
for (const { absPath, rel } of icons) {
|
|
@@ -25,25 +37,26 @@ const emitIcons = (ctx, icons) => {
|
|
|
25
37
|
info(`Copied ${String(icons.length)} icon(s) into ${ICONS_DIR}/`);
|
|
26
38
|
}
|
|
27
39
|
};
|
|
28
|
-
function gtkxIcons() {
|
|
40
|
+
function gtkxIcons(loadConfig = createConfigLoader()) {
|
|
29
41
|
const state = {
|
|
30
|
-
|
|
42
|
+
applicationId: "",
|
|
43
|
+
source: { kind: "none" },
|
|
31
44
|
};
|
|
32
45
|
return {
|
|
33
46
|
name: "gtkx:icons",
|
|
34
47
|
enforce: "pre",
|
|
35
48
|
apply: "build",
|
|
36
|
-
config(config) {
|
|
37
|
-
state
|
|
49
|
+
async config(config) {
|
|
50
|
+
await applyUserConfig(state, config, loadConfig);
|
|
38
51
|
},
|
|
39
52
|
outputOptions(options) {
|
|
40
|
-
if (findIconFiles(state
|
|
53
|
+
if (findIconFiles(state).length === 0) {
|
|
41
54
|
return;
|
|
42
55
|
}
|
|
43
56
|
return prependBanner(options, XDG_ENV_BANNER);
|
|
44
57
|
},
|
|
45
58
|
buildEnd() {
|
|
46
|
-
emitIcons(this, findIconFiles(state
|
|
59
|
+
emitIcons(this, findIconFiles(state));
|
|
47
60
|
},
|
|
48
61
|
};
|
|
49
62
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"icons.js","sourceRoot":"","sources":["../../src/vite-plugins/icons.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"icons.js","sourceRoot":"","sources":["../../src/vite-plugins/icons.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ConfigLoader } from \"@gtkx/config\";\nimport type { Plugin, UserConfig } from \"vite\";\nimport { createConfigLoader } from \"@gtkx/config/internal\";\nimport { info } from \"@gtkx/utils\";\nimport { readFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport type { AssetEmitter } from \"./asset-emitter.js\";\nimport { prependBanner } from \"../internal/banner.js\";\nimport {\n relativeIconPath,\n resolveApplicationIcon,\n type ResolvedApplicationIcon,\n} from \"../internal/icon-path.js\";\nimport { type ListedFile, listFilesRecursive } from \"../internal/list-files.js\";\n\ntype PluginState = {\n applicationId: string;\n source: ResolvedApplicationIcon;\n};\n\nconst ICONS_DIR = \"icons\";\n\nconst XDG_ENV_BANNER = [\n \"process.env.XDG_DATA_DIRS = [\",\n \" decodeURIComponent(new URL(\\\".\\\", import.meta.url).pathname),\",\n \" process.env.XDG_DATA_DIRS || \\\"/usr/local/share:/usr/share\\\",\",\n \"].join(\\\":\\\");\",\n].join(\"\\n\");\n\nconst findIconFiles = (state: PluginState): ListedFile[] => {\n if (state.source.kind === \"theme\") {\n return listFilesRecursive(state.source.path);\n }\n\n if (state.source.kind === \"none\") {\n return [];\n }\n\n return [{\n absPath: state.source.path,\n rel: relativeIconPath(state.applicationId, state.source.path),\n }];\n};\n\nconst applyUserConfig = async (state: PluginState, config: UserConfig, loadConfig: ConfigLoader): Promise<void> => {\n const { config: gtkxConfig, root } = await loadConfig.load(config.root ?? process.cwd());\n state.applicationId = gtkxConfig.applicationId;\n state.source = resolveApplicationIcon(root, gtkxConfig.applicationId, gtkxConfig.applicationIcon);\n};\n\nconst emitIcons = (ctx: AssetEmitter, icons: ListedFile[]): void => {\n for (const { absPath, rel } of icons) {\n ctx.emitFile({ type: \"asset\", fileName: join(ICONS_DIR, rel), source: readFileSync(absPath) });\n }\n\n if (icons.length > 0) {\n info(`Copied ${String(icons.length)} icon(s) into ${ICONS_DIR}/`);\n }\n};\n\nfunction gtkxIcons(loadConfig: ConfigLoader = createConfigLoader()): Plugin {\n const state: PluginState = {\n applicationId: \"\",\n source: { kind: \"none\" },\n };\n\n return {\n name: \"gtkx:icons\",\n enforce: \"pre\",\n apply: \"build\",\n\n async config(config: UserConfig) {\n await applyUserConfig(state, config, loadConfig);\n },\n\n outputOptions(options) {\n if (findIconFiles(state).length === 0) {\n return;\n }\n\n return prependBanner(options, XDG_ENV_BANNER);\n },\n\n buildEnd() {\n emitIcons(this, findIconFiles(state));\n },\n };\n}\n\nexport { gtkxIcons };\n"]}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { Plugin } from "vite";
|
|
2
|
-
|
|
2
|
+
import type { BuildManifestCollector } from "../internal/build-manifest.js";
|
|
3
|
+
declare const gtkxVitePlugins: (mode?: string, entryPath?: string, buildManifest?: BuildManifestCollector) => Plugin[];
|
|
3
4
|
export { gtkxVitePlugins };
|
|
4
5
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/vite-plugins/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/vite-plugins/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAGnC,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAW5E,QAAA,MAAM,eAAe,GACjB,OAAO,MAAM,EACb,YAAY,MAAM,EAClB,gBAAgB,sBAAsB,KACvC,MAAM,EAeR,CAAC;AAEF,OAAO,EAAE,eAAe,EAAE,CAAC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { createConfigLoader } from "@gtkx/config/internal";
|
|
2
2
|
import createConfigPlugin from "@gtkx/config/vite-plugin";
|
|
3
3
|
import { gtkxAssetImports } from "./asset-imports.js";
|
|
4
|
+
import { gtkxBuiltUrl } from "./built-url.js";
|
|
4
5
|
import { gtkxCss } from "./css.js";
|
|
5
6
|
import { gtkxIcons } from "./icons.js";
|
|
6
7
|
import { gtkxReactCompiler } from "./react-compiler.js";
|
|
@@ -8,16 +9,17 @@ import { gtkxResources } from "./resources.js";
|
|
|
8
9
|
import { gtkxSettings } from "./settings.js";
|
|
9
10
|
import { gtkxStoreLinks } from "./store-links.js";
|
|
10
11
|
import { gtkxUndeclaredLibrary } from "./undeclared-library.js";
|
|
11
|
-
const gtkxVitePlugins = (mode) => {
|
|
12
|
+
const gtkxVitePlugins = (mode, entryPath, buildManifest) => {
|
|
12
13
|
const loadConfig = createConfigLoader(mode === undefined ? {} : { mode });
|
|
13
14
|
return [
|
|
14
15
|
createConfigPlugin({ name: "gtkx:config", loadConfig }),
|
|
15
16
|
gtkxStoreLinks(),
|
|
16
17
|
gtkxUndeclaredLibrary(loadConfig),
|
|
17
|
-
gtkxSettings(),
|
|
18
|
-
gtkxIcons(),
|
|
19
|
-
gtkxAssetImports(),
|
|
20
|
-
|
|
18
|
+
gtkxSettings(loadConfig, buildManifest),
|
|
19
|
+
gtkxIcons(loadConfig),
|
|
20
|
+
gtkxAssetImports(loadConfig),
|
|
21
|
+
gtkxBuiltUrl(),
|
|
22
|
+
gtkxResources(loadConfig, entryPath),
|
|
21
23
|
gtkxCss(),
|
|
22
24
|
gtkxReactCompiler(loadConfig),
|
|
23
25
|
];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/vite-plugins/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,kBAAkB,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/vite-plugins/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,kBAAkB,MAAM,0BAA0B,CAAC;AAE1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACnC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAEhE,MAAM,eAAe,GAAG,CACpB,IAAa,EACb,SAAkB,EAClB,aAAsC,EAC9B,EAAE;IACV,MAAM,UAAU,GAAG,kBAAkB,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;IAE1E,OAAO;QACH,kBAAkB,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,UAAU,EAAE,CAAC;QACvD,cAAc,EAAE;QAChB,qBAAqB,CAAC,UAAU,CAAC;QACjC,YAAY,CAAC,UAAU,EAAE,aAAa,CAAC;QACvC,SAAS,CAAC,UAAU,CAAC;QACrB,gBAAgB,CAAC,UAAU,CAAC;QAC5B,YAAY,EAAE;QACd,aAAa,CAAC,UAAU,EAAE,SAAS,CAAC;QACpC,OAAO,EAAE;QACT,iBAAiB,CAAC,UAAU,CAAC;KAChC,CAAC;AACN,CAAC,CAAC;AAEF,OAAO,EAAE,eAAe,EAAE,CAAC","sourcesContent":["import type { Plugin } from \"vite\";\nimport { createConfigLoader } from \"@gtkx/config/internal\";\nimport createConfigPlugin from \"@gtkx/config/vite-plugin\";\nimport type { BuildManifestCollector } from \"../internal/build-manifest.js\";\nimport { gtkxAssetImports } from \"./asset-imports.js\";\nimport { gtkxBuiltUrl } from \"./built-url.js\";\nimport { gtkxCss } from \"./css.js\";\nimport { gtkxIcons } from \"./icons.js\";\nimport { gtkxReactCompiler } from \"./react-compiler.js\";\nimport { gtkxResources } from \"./resources.js\";\nimport { gtkxSettings } from \"./settings.js\";\nimport { gtkxStoreLinks } from \"./store-links.js\";\nimport { gtkxUndeclaredLibrary } from \"./undeclared-library.js\";\n\nconst gtkxVitePlugins = (\n mode?: string,\n entryPath?: string,\n buildManifest?: BuildManifestCollector,\n): Plugin[] => {\n const loadConfig = createConfigLoader(mode === undefined ? {} : { mode });\n\n return [\n createConfigPlugin({ name: \"gtkx:config\", loadConfig }),\n gtkxStoreLinks(),\n gtkxUndeclaredLibrary(loadConfig),\n gtkxSettings(loadConfig, buildManifest),\n gtkxIcons(loadConfig),\n gtkxAssetImports(loadConfig),\n gtkxBuiltUrl(),\n gtkxResources(loadConfig, entryPath),\n gtkxCss(),\n gtkxReactCompiler(loadConfig),\n ];\n};\n\nexport { gtkxVitePlugins };\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"native.d.ts","sourceRoot":"","sources":["../../src/vite-plugins/native.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"native.d.ts","sourceRoot":"","sources":["../../src/vite-plugins/native.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AA2EnC,iBAAS,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAgCxC;AAED,OAAO,EAAE,UAAU,EAAE,CAAC"}
|
|
@@ -4,6 +4,7 @@ import { arch, platform } from "node:os";
|
|
|
4
4
|
import { dirname, join } from "node:path";
|
|
5
5
|
import { stripQuery } from "./strip-query.js";
|
|
6
6
|
const EMITTED_BINDING_SPECIFIER = "./gtkx.node";
|
|
7
|
+
const BINDING_FILENAME = "gtkx.node";
|
|
7
8
|
function resolveBinaryPath(projectRequire, currentArch) {
|
|
8
9
|
const nativeRoot = dirname(projectRequire.resolve("@gtkx/native/package.json"));
|
|
9
10
|
const localBinary = join(nativeRoot, `native.linux-${currentArch}-gnu.node`);
|
|
@@ -20,7 +21,7 @@ function resolvePlatformBinary(projectRequire) {
|
|
|
20
21
|
}
|
|
21
22
|
return readFileSync(resolveBinaryPath(projectRequire, currentArch));
|
|
22
23
|
}
|
|
23
|
-
function rewriteLoader(code) {
|
|
24
|
+
function rewriteLoader(code, bindingReferenceId) {
|
|
24
25
|
const idents = [];
|
|
25
26
|
for (const match of code.matchAll(/export\s*\{\s*([A-Za-z0-9_$]+)\s*\}/g)) {
|
|
26
27
|
const ident = match[1];
|
|
@@ -31,14 +32,28 @@ function rewriteLoader(code) {
|
|
|
31
32
|
const bindings = idents.join(", ");
|
|
32
33
|
return [
|
|
33
34
|
"import { createRequire as __gtkxCreateRequire } from \"node:module\";",
|
|
34
|
-
|
|
35
|
+
"import { fileURLToPath as __gtkxFileURLToPath } from \"node:url\";",
|
|
36
|
+
`const __gtkxNativeLocation = import.meta.ROLLUP_FILE_URL_${bindingReferenceId};`,
|
|
37
|
+
"const __gtkxNativePath = __gtkxNativeLocation.startsWith(\"file:\") " +
|
|
38
|
+
"? __gtkxFileURLToPath(__gtkxNativeLocation) : __gtkxNativeLocation;",
|
|
39
|
+
"const __gtkxNative = __gtkxCreateRequire(import.meta.url)(__gtkxNativePath);",
|
|
35
40
|
`const { ${bindings} } = __gtkxNative;`,
|
|
36
41
|
`export { ${bindings} };`,
|
|
37
42
|
].join("\n");
|
|
38
43
|
}
|
|
44
|
+
const transformLoader = (code, id, loaderPath, bindingReferenceId) => {
|
|
45
|
+
if (stripQuery(id) !== loaderPath) {
|
|
46
|
+
return null;
|
|
47
|
+
}
|
|
48
|
+
if (bindingReferenceId === null) {
|
|
49
|
+
throw new Error("Cannot render the native loader before its binary has been emitted");
|
|
50
|
+
}
|
|
51
|
+
return rewriteLoader(code, bindingReferenceId);
|
|
52
|
+
};
|
|
39
53
|
function gtkxNative(root) {
|
|
40
54
|
const projectRequire = createRequire(join(root, "package.json"));
|
|
41
55
|
let cachedLoaderPath;
|
|
56
|
+
let bindingReferenceId = null;
|
|
42
57
|
const loaderPath = () => {
|
|
43
58
|
cachedLoaderPath ??= join(dirname(projectRequire.resolve("@gtkx/native/package.json")), "index.js");
|
|
44
59
|
return cachedLoaderPath;
|
|
@@ -48,13 +63,17 @@ function gtkxNative(root) {
|
|
|
48
63
|
enforce: "pre",
|
|
49
64
|
apply: "build",
|
|
50
65
|
buildStart() {
|
|
51
|
-
this.emitFile({
|
|
66
|
+
bindingReferenceId = this.emitFile({
|
|
67
|
+
type: "asset",
|
|
68
|
+
fileName: BINDING_FILENAME,
|
|
69
|
+
source: resolvePlatformBinary(projectRequire),
|
|
70
|
+
});
|
|
52
71
|
},
|
|
53
72
|
resolveId(id) {
|
|
54
73
|
return id === EMITTED_BINDING_SPECIFIER ? { id, external: true } : null;
|
|
55
74
|
},
|
|
56
75
|
transform(code, id) {
|
|
57
|
-
return
|
|
76
|
+
return transformLoader(code, id, loaderPath(), bindingReferenceId);
|
|
58
77
|
},
|
|
59
78
|
};
|
|
60
79
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"native.js","sourceRoot":"","sources":["../../src/vite-plugins/native.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,MAAM,yBAAyB,GAAG,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"native.js","sourceRoot":"","sources":["../../src/vite-plugins/native.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Plugin } from \"vite\";\nimport { existsSync, readFileSync } from \"node:fs\";\nimport { createRequire } from \"node:module\";\nimport { arch, platform } from \"node:os\";\nimport { dirname, join } from \"node:path\";\nimport { stripQuery } from \"./strip-query.js\";\n\nconst EMITTED_BINDING_SPECIFIER = \"./gtkx.node\";\nconst BINDING_FILENAME = \"gtkx.node\";\n\nfunction resolveBinaryPath(projectRequire: ReturnType<typeof createRequire>, currentArch: string): string {\n const nativeRoot = dirname(projectRequire.resolve(\"@gtkx/native/package.json\"));\n const localBinary = join(nativeRoot, `native.linux-${currentArch}-gnu.node`);\n\n return existsSync(localBinary) ? localBinary : projectRequire.resolve(`@gtkx/native-linux-${currentArch}-gnu`);\n}\n\nfunction resolvePlatformBinary(projectRequire: ReturnType<typeof createRequire>): Buffer {\n const currentPlatform = platform();\n\n if (currentPlatform !== \"linux\") {\n throw new Error(`Unsupported build platform: ${currentPlatform}, only Linux is supported`);\n }\n\n const currentArch = arch();\n\n if (currentArch !== \"x64\" && currentArch !== \"arm64\") {\n throw new Error(`Unsupported build architecture: ${currentArch}, only x64 and arm64 are supported`);\n }\n\n return readFileSync(resolveBinaryPath(projectRequire, currentArch));\n}\n\nfunction rewriteLoader(code: string, bindingReferenceId: string): string {\n const idents: string[] = [];\n\n for (const match of code.matchAll(/export\\s*\\{\\s*([A-Za-z0-9_$]+)\\s*\\}/g)) {\n const ident = match[1];\n\n if (ident) {\n idents.push(ident);\n }\n }\n\n const bindings = idents.join(\", \");\n\n return [\n \"import { createRequire as __gtkxCreateRequire } from \\\"node:module\\\";\",\n \"import { fileURLToPath as __gtkxFileURLToPath } from \\\"node:url\\\";\",\n `const __gtkxNativeLocation = import.meta.ROLLUP_FILE_URL_${bindingReferenceId};`,\n \"const __gtkxNativePath = __gtkxNativeLocation.startsWith(\\\"file:\\\") \" +\n \"? __gtkxFileURLToPath(__gtkxNativeLocation) : __gtkxNativeLocation;\",\n \"const __gtkxNative = __gtkxCreateRequire(import.meta.url)(__gtkxNativePath);\",\n `const { ${bindings} } = __gtkxNative;`,\n `export { ${bindings} };`,\n ].join(\"\\n\");\n}\n\nconst transformLoader = (\n code: string,\n id: string,\n loaderPath: string,\n bindingReferenceId: string | null,\n): string | null => {\n if (stripQuery(id) !== loaderPath) {\n return null;\n }\n\n if (bindingReferenceId === null) {\n throw new Error(\"Cannot render the native loader before its binary has been emitted\");\n }\n\n return rewriteLoader(code, bindingReferenceId);\n};\n\nfunction gtkxNative(root: string): Plugin {\n const projectRequire = createRequire(join(root, \"package.json\"));\n let cachedLoaderPath: string | undefined;\n let bindingReferenceId: string | null = null;\n\n const loaderPath = (): string => {\n cachedLoaderPath ??= join(dirname(projectRequire.resolve(\"@gtkx/native/package.json\")), \"index.js\");\n\n return cachedLoaderPath;\n };\n\n return {\n name: \"gtkx:native\",\n enforce: \"pre\",\n apply: \"build\",\n\n buildStart() {\n bindingReferenceId = this.emitFile({\n type: \"asset\",\n fileName: BINDING_FILENAME,\n source: resolvePlatformBinary(projectRequire),\n });\n },\n\n resolveId(id) {\n return id === EMITTED_BINDING_SPECIFIER ? { id, external: true } : null;\n },\n\n transform(code, id) {\n return transformLoader(code, id, loaderPath(), bindingReferenceId);\n },\n };\n}\n\nexport { gtkxNative };\n"]}
|
|
@@ -1,6 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
isBuild:
|
|
1
|
+
type InitModuleOptions = {
|
|
2
|
+
isBuild: true;
|
|
3
|
+
bundleReferenceId: string;
|
|
4
|
+
} | {
|
|
5
|
+
isBuild: false;
|
|
3
6
|
devBundlePath: string;
|
|
4
|
-
}
|
|
7
|
+
};
|
|
8
|
+
declare const renderInitModule: (options: InitModuleOptions) => string;
|
|
5
9
|
export { renderInitModule };
|
|
6
10
|
//# sourceMappingURL=resource-init-module.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resource-init-module.d.ts","sourceRoot":"","sources":["../../src/vite-plugins/resource-init-module.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"resource-init-module.d.ts","sourceRoot":"","sources":["../../src/vite-plugins/resource-init-module.ts"],"names":[],"mappings":"AAEA,KAAK,iBAAiB,GAAG;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,iBAAiB,EAAE,MAAM,CAAA;CAAE,GACjE;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,CAAC;AA+E9C,QAAA,MAAM,gBAAgB,GAAI,SAAS,iBAAiB,KAAG,MAC4D,CAAC;AAEpH,OAAO,EAAE,gBAAgB,EAAE,CAAC"}
|
|
@@ -1,13 +1,27 @@
|
|
|
1
|
-
import {
|
|
2
|
-
const
|
|
3
|
-
"
|
|
1
|
+
import { REFRESH_EXPORT, REGISTER_REFRESH_EXPORT } from "./resource-shared.js";
|
|
2
|
+
const refreshCallbackSource = () => [
|
|
3
|
+
"const refreshCallbacks = new Map();",
|
|
4
|
+
"",
|
|
5
|
+
`export function ${REGISTER_REFRESH_EXPORT}(key, callback) {`,
|
|
6
|
+
" refreshCallbacks.set(key, callback);",
|
|
7
|
+
" callback();",
|
|
8
|
+
"}",
|
|
9
|
+
"",
|
|
10
|
+
"function runRefreshCallbacks() {",
|
|
11
|
+
" for (const callback of refreshCallbacks.values()) callback();",
|
|
12
|
+
"}",
|
|
13
|
+
];
|
|
14
|
+
const buildInitModuleSource = (bundleReferenceId) => [
|
|
4
15
|
"import { fileURLToPath } from \"node:url\";",
|
|
5
16
|
"import { Resource, resourcesRegister } from \"@gtkx/gi/gio\";",
|
|
6
17
|
"",
|
|
7
|
-
|
|
8
|
-
|
|
18
|
+
`const bundleLocation = import.meta.ROLLUP_FILE_URL_${bundleReferenceId};`,
|
|
19
|
+
"const bundlePath = bundleLocation.startsWith(\"file:\") ? fileURLToPath(bundleLocation) : bundleLocation;",
|
|
20
|
+
"const resource = Resource.load(bundlePath);",
|
|
9
21
|
"resourcesRegister(resource);",
|
|
10
22
|
"",
|
|
23
|
+
...refreshCallbackSource(),
|
|
24
|
+
"",
|
|
11
25
|
"export function ensureRegistered() {}",
|
|
12
26
|
`export function ${REFRESH_EXPORT}() {}`,
|
|
13
27
|
].join("\n");
|
|
@@ -27,25 +41,36 @@ const devInitModuleSource = (bundlePath) => {
|
|
|
27
41
|
" current = next;",
|
|
28
42
|
"}",
|
|
29
43
|
"",
|
|
44
|
+
"function unregister() {",
|
|
45
|
+
" if (!current) return;",
|
|
46
|
+
" resourcesUnregister(current);",
|
|
47
|
+
" current = null;",
|
|
48
|
+
" lastSig = \"\";",
|
|
49
|
+
"}",
|
|
50
|
+
"",
|
|
51
|
+
...refreshCallbackSource(),
|
|
52
|
+
"",
|
|
30
53
|
"export function ensureRegistered() {",
|
|
31
|
-
` if (!existsSync(${bundlePathLiteral}))
|
|
54
|
+
` if (!existsSync(${bundlePathLiteral})) {`,
|
|
55
|
+
" unregister();",
|
|
56
|
+
" return;",
|
|
57
|
+
" }",
|
|
32
58
|
` const { size, mtimeMs } = statSync(${bundlePathLiteral});`,
|
|
33
59
|
" const sig = size + \":\" + mtimeMs;",
|
|
34
|
-
" if (sig
|
|
35
|
-
"
|
|
36
|
-
"
|
|
60
|
+
" if (sig !== lastSig) {",
|
|
61
|
+
" register();",
|
|
62
|
+
" lastSig = sig;",
|
|
63
|
+
" }",
|
|
37
64
|
"}",
|
|
38
65
|
"",
|
|
39
66
|
"ensureRegistered();",
|
|
40
67
|
"",
|
|
41
68
|
`export function ${REFRESH_EXPORT}() {`,
|
|
42
|
-
|
|
43
|
-
"
|
|
44
|
-
` const { size, mtimeMs } = statSync(${bundlePathLiteral});`,
|
|
45
|
-
" lastSig = size + \":\" + mtimeMs;",
|
|
69
|
+
" ensureRegistered();",
|
|
70
|
+
" runRefreshCallbacks();",
|
|
46
71
|
"}",
|
|
47
72
|
].join("\n");
|
|
48
73
|
};
|
|
49
|
-
const renderInitModule = (options) => options.isBuild ? buildInitModuleSource() : devInitModuleSource(options.devBundlePath);
|
|
74
|
+
const renderInitModule = (options) => options.isBuild ? buildInitModuleSource(options.bundleReferenceId) : devInitModuleSource(options.devBundlePath);
|
|
50
75
|
export { renderInitModule };
|
|
51
76
|
//# sourceMappingURL=resource-init-module.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resource-init-module.js","sourceRoot":"","sources":["../../src/vite-plugins/resource-init-module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"resource-init-module.js","sourceRoot":"","sources":["../../src/vite-plugins/resource-init-module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAK/E,MAAM,qBAAqB,GAAG,GAAa,EAAE,CAAC;IAC1C,qCAAqC;IACrC,EAAE;IACF,mBAAmB,uBAAuB,mBAAmB;IAC7D,0CAA0C;IAC1C,iBAAiB;IACjB,GAAG;IACH,EAAE;IACF,kCAAkC;IAClC,mEAAmE;IACnE,GAAG;CACN,CAAC;AAEF,MAAM,qBAAqB,GAAG,CAAC,iBAAyB,EAAU,EAAE,CAChE;IACI,6CAA6C;IAC7C,+DAA+D;IAC/D,EAAE;IACF,sDAAsD,iBAAiB,GAAG;IAC1E,2GAA2G;IAC3G,6CAA6C;IAC7C,8BAA8B;IAC9B,EAAE;IACF,GAAG,qBAAqB,EAAE;IAC1B,EAAE;IACF,uCAAuC;IACvC,mBAAmB,cAAc,OAAO;CAC3C,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEjB,MAAM,mBAAmB,GAAG,CAAC,UAAkB,EAAU,EAAE;IACvD,MAAM,iBAAiB,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;IAErD,OAAO;QACH,mDAAmD;QACnD,oFAAoF;QACpF,EAAE;QACF,qBAAqB;QACrB,qBAAqB;QACrB,EAAE;QACF,uBAAuB;QACvB,kCAAkC,iBAAiB,IAAI;QACvD,gDAAgD;QAChD,8BAA8B;QAC9B,qBAAqB;QACrB,GAAG;QACH,EAAE;QACF,yBAAyB;QACzB,2BAA2B;QAC3B,mCAAmC;QACnC,qBAAqB;QACrB,qBAAqB;QACrB,GAAG;QACH,EAAE;QACF,GAAG,qBAAqB,EAAE;QAC1B,EAAE;QACF,sCAAsC;QACtC,uBAAuB,iBAAiB,MAAM;QAC9C,uBAAuB;QACvB,iBAAiB;QACjB,OAAO;QACP,0CAA0C,iBAAiB,IAAI;QAC/D,yCAAyC;QACzC,4BAA4B;QAC5B,qBAAqB;QACrB,wBAAwB;QACxB,OAAO;QACP,GAAG;QACH,EAAE;QACF,qBAAqB;QACrB,EAAE;QACF,mBAAmB,cAAc,MAAM;QACvC,yBAAyB;QACzB,4BAA4B;QAC5B,GAAG;KACN,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjB,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,CAAC,OAA0B,EAAU,EAAE,CAC5D,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,qBAAqB,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;AAEpH,OAAO,EAAE,gBAAgB,EAAE,CAAC","sourcesContent":["import { REFRESH_EXPORT, REGISTER_REFRESH_EXPORT } from \"./resource-shared.js\";\n\ntype InitModuleOptions = { isBuild: true; bundleReferenceId: string } |\n { isBuild: false; devBundlePath: string };\n\nconst refreshCallbackSource = (): string[] => [\n \"const refreshCallbacks = new Map();\",\n \"\",\n `export function ${REGISTER_REFRESH_EXPORT}(key, callback) {`,\n \" refreshCallbacks.set(key, callback);\",\n \" callback();\",\n \"}\",\n \"\",\n \"function runRefreshCallbacks() {\",\n \" for (const callback of refreshCallbacks.values()) callback();\",\n \"}\",\n];\n\nconst buildInitModuleSource = (bundleReferenceId: string): string =>\n [\n \"import { fileURLToPath } from \\\"node:url\\\";\",\n \"import { Resource, resourcesRegister } from \\\"@gtkx/gi/gio\\\";\",\n \"\",\n `const bundleLocation = import.meta.ROLLUP_FILE_URL_${bundleReferenceId};`,\n \"const bundlePath = bundleLocation.startsWith(\\\"file:\\\") ? fileURLToPath(bundleLocation) : bundleLocation;\",\n \"const resource = Resource.load(bundlePath);\",\n \"resourcesRegister(resource);\",\n \"\",\n ...refreshCallbackSource(),\n \"\",\n \"export function ensureRegistered() {}\",\n `export function ${REFRESH_EXPORT}() {}`,\n ].join(\"\\n\");\n\nconst devInitModuleSource = (bundlePath: string): string => {\n const bundlePathLiteral = JSON.stringify(bundlePath);\n\n return [\n \"import { existsSync, statSync } from \\\"node:fs\\\";\",\n \"import { Resource, resourcesRegister, resourcesUnregister } from \\\"@gtkx/gi/gio\\\";\",\n \"\",\n \"let current = null;\",\n \"let lastSig = \\\"\\\";\",\n \"\",\n \"function register() {\",\n ` const next = Resource.load(${bundlePathLiteral});`,\n \" if (current) resourcesUnregister(current);\",\n \" resourcesRegister(next);\",\n \" current = next;\",\n \"}\",\n \"\",\n \"function unregister() {\",\n \" if (!current) return;\",\n \" resourcesUnregister(current);\",\n \" current = null;\",\n \" lastSig = \\\"\\\";\",\n \"}\",\n \"\",\n ...refreshCallbackSource(),\n \"\",\n \"export function ensureRegistered() {\",\n ` if (!existsSync(${bundlePathLiteral})) {`,\n \" unregister();\",\n \" return;\",\n \" }\",\n ` const { size, mtimeMs } = statSync(${bundlePathLiteral});`,\n \" const sig = size + \\\":\\\" + mtimeMs;\",\n \" if (sig !== lastSig) {\",\n \" register();\",\n \" lastSig = sig;\",\n \" }\",\n \"}\",\n \"\",\n \"ensureRegistered();\",\n \"\",\n `export function ${REFRESH_EXPORT}() {`,\n \" ensureRegistered();\",\n \" runRefreshCallbacks();\",\n \"}\",\n ].join(\"\\n\");\n};\n\nconst renderInitModule = (options: InitModuleOptions): string =>\n options.isBuild ? buildInitModuleSource(options.bundleReferenceId) : devInitModuleSource(options.devBundlePath);\n\nexport { renderInitModule };\n"]}
|