@gtkx/cli 0.21.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 -56
- 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 -8
- package/package.json +32 -38
- package/src/babel-modules.d.ts +13 -0
- package/src/builder.ts +28 -84
- 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 -55
- package/dist/create.d.ts.map +0 -1
- package/dist/create.js +0 -236
- package/dist/create.js.map +0 -1
- package/dist/dev-server.d.ts +0 -37
- package/dist/dev-server.d.ts.map +0 -1
- package/dist/dev-server.js +0 -130
- 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-gsettings.d.ts +0 -28
- package/dist/vite-plugin-gtkx-gsettings.d.ts.map +0 -1
- package/dist/vite-plugin-gtkx-gsettings.js +0 -147
- package/dist/vite-plugin-gtkx-gsettings.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 -326
- 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-gsettings.ts +0 -168
- 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 @@
|
|
|
1
|
+
{"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/settings/render.ts"],"names":[],"mappings":"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","sourcesContent":["import { upperFirst } from \"@gtkx/utils\";\nimport type { ParsedKey, ParsedSchema, ParsedSchemaFile } from \"./parser.js\";\n\nconst GTKX_ENV_MODULE_HEADER = `/**\n * GSettings schema modules generated by GTKX from the project's\n * \\`.gschema.xml\\` files. Regenerated by \\`gtkx codegen\\`, \\`gtkx dev\\`, and\n * \\`gtkx build\\`; do not edit.\n */`;\n\nconst VARIANT_TS_TYPES: Record<string, string> = {\n b: \"boolean\",\n i: \"number\",\n u: \"number\",\n x: \"number\",\n t: \"number\",\n d: \"number\",\n s: \"string\",\n as: \"string[]\",\n};\n\nconst VARIANT_FALLBACK_TS_TYPE = `import(\"@gtkx/gi/glib\").Variant`;\n\nconst ENUM_KIND = \"enum\";\nconst FLAGS_KIND = \"flags\";\n\nconst toJsStringLiteral = (value: string): string =>\n JSON.stringify(value).replaceAll(\"\\u2028\", \"\\\\u2028\").replaceAll(\"\\u2029\", \"\\\\u2029\");\n\nconst exportNameFor = (schemaId: string): string => schemaId.replaceAll(\".\", \"_\");\n\nconst unionOf = (values: string[]): string => values.map(toJsStringLiteral).join(\" | \");\n\nconst tsTypeForKey = (key: ParsedKey, file: ParsedSchemaFile): string => {\n if (key.enumId !== null) {\n const nicks = file.enums.get(key.enumId);\n return nicks !== undefined && nicks.length > 0 ? unionOf(nicks) : \"string\";\n }\n if (key.flagsId !== null) {\n const nicks = file.flags.get(key.flagsId);\n return nicks !== undefined && nicks.length > 0 ? `(${unionOf(nicks)})[]` : \"string[]\";\n }\n if (key.variantType === \"s\" && key.choices.length > 0) {\n return unionOf(key.choices);\n }\n return VARIANT_TS_TYPES[key.variantType ?? \"\"] ?? VARIANT_FALLBACK_TS_TYPE;\n};\n\nconst runtimeKindForKey = (key: ParsedKey): string => {\n if (key.enumId !== null) return ENUM_KIND;\n if (key.flagsId !== null) return FLAGS_KIND;\n return key.variantType ?? \"\";\n};\n\nconst runtimeKeysFor = (schema: ParsedSchema): string => {\n const entries = schema.keys.map(\n (key) => `${toJsStringLiteral(key.name)}: ${toJsStringLiteral(runtimeKindForKey(key))}`,\n );\n return `{ ${entries.join(\", \")} }`;\n};\n\nexport const renderRuntimeModule = (file: ParsedSchemaFile): string => {\n const lines: string[] = [];\n file.schemas.forEach((schema, index) => {\n const keysName = `keys_${index}`;\n const id = toJsStringLiteral(schema.id);\n lines.push(`const ${keysName} = ${runtimeKeysFor(schema)};`);\n if (schema.path === null) {\n lines.push(\n `export const ${exportNameFor(schema.id)} = { id: ${id}, keys: ${keysName}, at: (path) => ({ id: ${id}, path, keys: ${keysName} }) };`,\n );\n } else {\n lines.push(`export const ${exportNameFor(schema.id)} = { id: ${id}, path: null, keys: ${keysName} };`);\n }\n });\n const first = file.schemas[0];\n if (first !== undefined) {\n lines.push(`export default ${exportNameFor(first.id)};`);\n }\n return lines.join(\"\\n\");\n};\n\nconst sanitizeSummary = (summary: string): string => summary.replaceAll(\"*/\", \"*\\\\/\");\n\nconst interfaceNameFor = (schemaId: string, usedNames: Set<string>): string => {\n const base = `${schemaId\n .split(/[^a-zA-Z0-9]+/)\n .filter((part) => part.length > 0)\n .map(upperFirst)\n .join(\"\")}Keys`;\n let name = base;\n let suffix = 2;\n while (usedNames.has(name)) {\n name = `${base}${suffix}`;\n suffix += 1;\n }\n usedNames.add(name);\n return name;\n};\n\nconst renderKeysType = (name: string, schema: ParsedSchema, file: ParsedSchemaFile): string[] => {\n const lines = [` type ${name} = {`];\n for (const key of schema.keys) {\n if (key.summary !== null) {\n lines.push(` /** ${sanitizeSummary(key.summary)} */`);\n }\n lines.push(` ${toJsStringLiteral(key.name)}: ${tsTypeForKey(key, file)};`);\n }\n lines.push(\" };\");\n return lines;\n};\n\nconst boundRefTypeLines = (interfaceName: string, indent: string): string[] => [\n `${indent}id: string;`,\n `${indent}path: string | null;`,\n `${indent}keys: { [P in keyof ${interfaceName}]: string };`,\n `${indent}__keys__?: ${interfaceName};`,\n];\n\nconst renderSchemaConst = (schema: ParsedSchema, interfaceName: string): string[] => {\n const exportName = exportNameFor(schema.id);\n if (schema.path !== null) {\n return [\n ` const ${exportName}: {`,\n ` id: ${toJsStringLiteral(schema.id)};`,\n ...boundRefTypeLines(interfaceName, \" \").slice(1),\n \" };\",\n ];\n }\n return [\n ` const ${exportName}: {`,\n ` id: ${JSON.stringify(schema.id)};`,\n ` keys: { [P in keyof ${interfaceName}]: string };`,\n ` __keys__?: ${interfaceName};`,\n \" at(path: string): {\",\n ...boundRefTypeLines(interfaceName, \" \"),\n \" };\",\n \" };\",\n ];\n};\n\nconst renderFileModule = (file: ParsedSchemaFile, usedNames: Set<string>): string[] => {\n const lines = [`declare module \"${file.fileName}\" {`];\n const exportNames: string[] = [];\n file.schemas.forEach((schema, index) => {\n if (index > 0) lines.push(\"\");\n const interfaceName = interfaceNameFor(schema.id, usedNames);\n lines.push(...renderKeysType(interfaceName, schema, file));\n lines.push(\"\");\n lines.push(...renderSchemaConst(schema, interfaceName));\n exportNames.push(exportNameFor(schema.id));\n });\n if (exportNames.length > 0) {\n lines.push(\"\");\n lines.push(` export { ${exportNames.join(\", \")} };`);\n lines.push(` export default ${exportNames[0]};`);\n }\n lines.push(\"}\");\n return lines;\n};\n\nexport const renderEnvModule = (files: ParsedSchemaFile[]): string => {\n const usedNames = new Set<string>();\n const blocks = files\n .filter((file) => file.schemas.length > 0)\n .map((file) => renderFileModule(file, usedNames).join(\"\\n\"));\n return `${[GTKX_ENV_MODULE_HEADER, ...blocks].join(\"\\n\\n\")}\\n`;\n};\n"]}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export declare const SCHEMA_SUFFIX = ".gschema.xml";
|
|
2
|
+
export declare const prependSchemaDir: (dir: string, existing: string | undefined) => string;
|
|
3
|
+
export declare const stageSchema: (dir: string, filePath: string) => void;
|
|
4
|
+
type SchemaEnvResult = {
|
|
5
|
+
path: string;
|
|
6
|
+
written: boolean;
|
|
7
|
+
};
|
|
8
|
+
export declare const findSchemaFiles: (dataDir: string) => string[];
|
|
9
|
+
export declare const stageAndCompileProjectSchemas: (root: string, dataDir: string | null) => string | null;
|
|
10
|
+
export declare const schemaEnvPath: (rootDir: string) => string;
|
|
11
|
+
export declare const emitSchemaEnv: (rootDir: string, dataDir: string | null) => SchemaEnvResult;
|
|
12
|
+
export {};
|
|
13
|
+
//# sourceMappingURL=schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/settings/schema.ts"],"names":[],"mappings":"AAWA,eAAO,MAAM,aAAa,iBAAiB,CAAC;AAE5C,eAAO,MAAM,gBAAgB,QAAS,MAAM,YAAY,MAAM,GAAG,SAAS,KAAG,MAI5E,CAAC;AAOF,eAAO,MAAM,WAAW,QAAS,MAAM,YAAY,MAAM,KAAG,IAE3D,CAAC;AAOF,KAAK,eAAe,GAAG;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;CACpB,CAAC;AAYF,eAAO,MAAM,eAAe,YAAa,MAAM,KAAG,MAAM,EAcvD,CAAC;AAEF,eAAO,MAAM,6BAA6B,SAAU,MAAM,WAAW,MAAM,GAAG,IAAI,KAAG,MAAM,GAAG,IAW7F,CAAC;AAEF,eAAO,MAAM,aAAa,YAAa,MAAM,KAAG,MAA4D,CAAC;AA6B7G,eAAO,MAAM,aAAa,YAAa,MAAM,WAAW,MAAM,GAAG,IAAI,KAAG,eAQvE,CAAC"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { copyFileSync, mkdirSync, mkdtempSync, readdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
3
|
+
import { tmpdir } from "node:os";
|
|
4
|
+
import { dirname, join, relative } from "node:path";
|
|
5
|
+
import { sortStrings, warn } from "@gtkx/utils";
|
|
6
|
+
import { DATA_IMPORT_PREFIX } from "../internal/data-dir.js";
|
|
7
|
+
import { removeTempDir } from "../internal/staging-dir.js";
|
|
8
|
+
import { compileSchemas } from "./compile.js";
|
|
9
|
+
import { parseSchemaXml, SchemaParseError } from "./parser.js";
|
|
10
|
+
import { renderEnvModule } from "./render.js";
|
|
11
|
+
export const SCHEMA_SUFFIX = ".gschema.xml";
|
|
12
|
+
export const prependSchemaDir = (dir, existing) => {
|
|
13
|
+
if (existing === undefined || existing.length === 0)
|
|
14
|
+
return dir;
|
|
15
|
+
if (existing.split(":").includes(dir))
|
|
16
|
+
return existing;
|
|
17
|
+
return `${dir}:${existing}`;
|
|
18
|
+
};
|
|
19
|
+
const STAGED_NAME_LENGTH = 16;
|
|
20
|
+
const stagedSchemaName = (filePath) => `${createHash("sha1").update(filePath).digest("hex").slice(0, STAGED_NAME_LENGTH)}${SCHEMA_SUFFIX}`;
|
|
21
|
+
export const stageSchema = (dir, filePath) => {
|
|
22
|
+
copyFileSync(filePath, join(dir, stagedSchemaName(filePath)));
|
|
23
|
+
};
|
|
24
|
+
const toForwardSlashes = (value) => value.replaceAll(/[/\\]/g, "/");
|
|
25
|
+
const moduleSpecifierFor = (dataDirAbs, filePath) => `${DATA_IMPORT_PREFIX}/${toForwardSlashes(relative(dataDirAbs, filePath))}`;
|
|
26
|
+
const readVisibleEntries = (dir) => {
|
|
27
|
+
try {
|
|
28
|
+
return readdirSync(dir, { withFileTypes: true }).filter((entry) => !entry.name.startsWith("."));
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
return [];
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
const isSchemaFile = (entry) => entry.isFile() && entry.name.endsWith(SCHEMA_SUFFIX);
|
|
35
|
+
export const findSchemaFiles = (dataDir) => {
|
|
36
|
+
const found = [];
|
|
37
|
+
const walk = (dir) => {
|
|
38
|
+
for (const entry of readVisibleEntries(dir)) {
|
|
39
|
+
const full = join(dir, entry.name);
|
|
40
|
+
if (entry.isDirectory()) {
|
|
41
|
+
walk(full);
|
|
42
|
+
}
|
|
43
|
+
else if (isSchemaFile(entry)) {
|
|
44
|
+
found.push(full);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
walk(dataDir);
|
|
49
|
+
return sortStrings(found);
|
|
50
|
+
};
|
|
51
|
+
export const stageAndCompileProjectSchemas = (root, dataDir) => {
|
|
52
|
+
if (dataDir === null)
|
|
53
|
+
return null;
|
|
54
|
+
const schemaFiles = findSchemaFiles(join(root, dataDir));
|
|
55
|
+
if (schemaFiles.length === 0)
|
|
56
|
+
return null;
|
|
57
|
+
const dir = mkdtempSync(join(tmpdir(), "gtkx-schemas-"));
|
|
58
|
+
for (const filePath of schemaFiles)
|
|
59
|
+
stageSchema(dir, filePath);
|
|
60
|
+
compileSchemas(dir);
|
|
61
|
+
process.once("exit", () => removeTempDir(dir));
|
|
62
|
+
return dir;
|
|
63
|
+
};
|
|
64
|
+
export const schemaEnvPath = (rootDir) => join(rootDir, "node_modules", ".gtkx", "env.d.ts");
|
|
65
|
+
const parseProjectSchemas = (schemaFiles, dataDirAbs) => {
|
|
66
|
+
const parsed = [];
|
|
67
|
+
for (const filePath of schemaFiles) {
|
|
68
|
+
const specifier = moduleSpecifierFor(dataDirAbs, filePath);
|
|
69
|
+
try {
|
|
70
|
+
parsed.push(parseSchemaXml(readFileSync(filePath, "utf-8"), specifier));
|
|
71
|
+
}
|
|
72
|
+
catch (error) {
|
|
73
|
+
if (!(error instanceof SchemaParseError))
|
|
74
|
+
throw error;
|
|
75
|
+
warn(`Skipping ${filePath} in schema type generation: ${error.message}`);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
return parsed;
|
|
79
|
+
};
|
|
80
|
+
const writeIfChanged = (path, content) => {
|
|
81
|
+
let existing = null;
|
|
82
|
+
try {
|
|
83
|
+
existing = readFileSync(path, "utf-8");
|
|
84
|
+
}
|
|
85
|
+
catch {
|
|
86
|
+
existing = null;
|
|
87
|
+
}
|
|
88
|
+
if (existing === content)
|
|
89
|
+
return false;
|
|
90
|
+
mkdirSync(dirname(path), { recursive: true });
|
|
91
|
+
writeFileSync(path, content);
|
|
92
|
+
return true;
|
|
93
|
+
};
|
|
94
|
+
export const emitSchemaEnv = (rootDir, dataDir) => {
|
|
95
|
+
const dataDirAbs = dataDir === null ? null : join(rootDir, dataDir);
|
|
96
|
+
const schemaFiles = dataDirAbs === null ? [] : findSchemaFiles(dataDirAbs);
|
|
97
|
+
const parsed = dataDirAbs === null ? [] : parseProjectSchemas(schemaFiles, dataDirAbs);
|
|
98
|
+
const content = renderEnvModule(parsed);
|
|
99
|
+
const path = schemaEnvPath(rootDir);
|
|
100
|
+
const written = writeIfChanged(path, content);
|
|
101
|
+
return { path, written };
|
|
102
|
+
};
|
|
103
|
+
//# sourceMappingURL=schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/settings/schema.ts"],"names":[],"mappings":"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","sourcesContent":["import { createHash } from \"node:crypto\";\nimport { copyFileSync, type Dirent, mkdirSync, mkdtempSync, readdirSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { tmpdir } from \"node:os\";\nimport { dirname, join, relative } from \"node:path\";\nimport { sortStrings, warn } from \"@gtkx/utils\";\nimport { DATA_IMPORT_PREFIX } from \"../internal/data-dir.js\";\nimport { removeTempDir } from \"../internal/staging-dir.js\";\nimport { compileSchemas } from \"./compile.js\";\nimport { type ParsedSchemaFile, parseSchemaXml, SchemaParseError } from \"./parser.js\";\nimport { renderEnvModule } from \"./render.js\";\n\nexport const SCHEMA_SUFFIX = \".gschema.xml\";\n\nexport const prependSchemaDir = (dir: string, existing: string | undefined): string => {\n if (existing === undefined || existing.length === 0) return dir;\n if (existing.split(\":\").includes(dir)) return existing;\n return `${dir}:${existing}`;\n};\n\nconst STAGED_NAME_LENGTH = 16;\n\nconst stagedSchemaName = (filePath: string): string =>\n `${createHash(\"sha1\").update(filePath).digest(\"hex\").slice(0, STAGED_NAME_LENGTH)}${SCHEMA_SUFFIX}`;\n\nexport const stageSchema = (dir: string, filePath: string): void => {\n copyFileSync(filePath, join(dir, stagedSchemaName(filePath)));\n};\n\nconst toForwardSlashes = (value: string): string => value.replaceAll(/[/\\\\]/g, \"/\");\n\nconst moduleSpecifierFor = (dataDirAbs: string, filePath: string): string =>\n `${DATA_IMPORT_PREFIX}/${toForwardSlashes(relative(dataDirAbs, filePath))}`;\n\ntype SchemaEnvResult = {\n path: string;\n written: boolean;\n};\n\nconst readVisibleEntries = (dir: string): Dirent[] => {\n try {\n return readdirSync(dir, { withFileTypes: true }).filter((entry) => !entry.name.startsWith(\".\"));\n } catch {\n return [];\n }\n};\n\nconst isSchemaFile = (entry: Dirent): boolean => entry.isFile() && entry.name.endsWith(SCHEMA_SUFFIX);\n\nexport const findSchemaFiles = (dataDir: string): string[] => {\n const found: string[] = [];\n const walk = (dir: string): void => {\n for (const entry of readVisibleEntries(dir)) {\n const full = join(dir, entry.name);\n if (entry.isDirectory()) {\n walk(full);\n } else if (isSchemaFile(entry)) {\n found.push(full);\n }\n }\n };\n walk(dataDir);\n return sortStrings(found);\n};\n\nexport const stageAndCompileProjectSchemas = (root: string, dataDir: string | null): string | null => {\n if (dataDir === null) return null;\n const schemaFiles = findSchemaFiles(join(root, dataDir));\n if (schemaFiles.length === 0) return null;\n\n const dir = mkdtempSync(join(tmpdir(), \"gtkx-schemas-\"));\n for (const filePath of schemaFiles) stageSchema(dir, filePath);\n compileSchemas(dir);\n process.once(\"exit\", () => removeTempDir(dir));\n\n return dir;\n};\n\nexport const schemaEnvPath = (rootDir: string): string => join(rootDir, \"node_modules\", \".gtkx\", \"env.d.ts\");\n\nconst parseProjectSchemas = (schemaFiles: string[], dataDirAbs: string): ParsedSchemaFile[] => {\n const parsed: ParsedSchemaFile[] = [];\n for (const filePath of schemaFiles) {\n const specifier = moduleSpecifierFor(dataDirAbs, filePath);\n try {\n parsed.push(parseSchemaXml(readFileSync(filePath, \"utf-8\"), specifier));\n } catch (error) {\n if (!(error instanceof SchemaParseError)) throw error;\n warn(`Skipping ${filePath} in schema type generation: ${error.message}`);\n }\n }\n return parsed;\n};\n\nconst writeIfChanged = (path: string, content: string): boolean => {\n let existing: string | null = null;\n try {\n existing = readFileSync(path, \"utf-8\");\n } catch {\n existing = null;\n }\n if (existing === content) return false;\n mkdirSync(dirname(path), { recursive: true });\n writeFileSync(path, content);\n return true;\n};\n\nexport const emitSchemaEnv = (rootDir: string, dataDir: string | null): SchemaEnvResult => {\n const dataDirAbs = dataDir === null ? null : join(rootDir, dataDir);\n const schemaFiles = dataDirAbs === null ? [] : findSchemaFiles(dataDirAbs);\n const parsed = dataDirAbs === null ? [] : parseProjectSchemas(schemaFiles, dataDirAbs);\n const content = renderEnvModule(parsed);\n const path = schemaEnvPath(rootDir);\n const written = writeIfChanged(path, content);\n return { path, written };\n};\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"asset-extensions.d.ts","sourceRoot":"","sources":["../../src/vite-plugins/asset-extensions.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,gBAAgB,UAuB5B,CAAC;AAEF,eAAO,MAAM,QAAQ,QAAoE,CAAC;AAE1F,eAAO,MAAM,aAAa,QAA6E,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export const ASSET_EXTENSIONS = [
|
|
2
|
+
"png",
|
|
3
|
+
"jpg",
|
|
4
|
+
"jpeg",
|
|
5
|
+
"gif",
|
|
6
|
+
"svg",
|
|
7
|
+
"webp",
|
|
8
|
+
"webm",
|
|
9
|
+
"mp4",
|
|
10
|
+
"ogg",
|
|
11
|
+
"mp3",
|
|
12
|
+
"wav",
|
|
13
|
+
"flac",
|
|
14
|
+
"aac",
|
|
15
|
+
"woff",
|
|
16
|
+
"woff2",
|
|
17
|
+
"eot",
|
|
18
|
+
"ttf",
|
|
19
|
+
"otf",
|
|
20
|
+
"ico",
|
|
21
|
+
"avif",
|
|
22
|
+
"data",
|
|
23
|
+
"gpa",
|
|
24
|
+
];
|
|
25
|
+
export const ASSET_RE = new RegExp(String.raw `\.(?:${ASSET_EXTENSIONS.join("|")})$`, "i");
|
|
26
|
+
export const ASSET_PATH_RE = new RegExp(String.raw `\.(?:${ASSET_EXTENSIONS.join("|")})(?:\?.*)?$`, "i");
|
|
27
|
+
//# sourceMappingURL=asset-extensions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"asset-extensions.js","sourceRoot":"","sources":["../../src/vite-plugins/asset-extensions.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC5B,KAAK;IACL,KAAK;IACL,MAAM;IACN,KAAK;IACL,KAAK;IACL,MAAM;IACN,MAAM;IACN,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,MAAM;IACN,KAAK;IACL,MAAM;IACN,OAAO;IACP,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,MAAM;IACN,MAAM;IACN,KAAK;CACR,CAAC;AAEF,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,CAAA,QAAQ,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AAE1F,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,CAAA,QAAQ,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC","sourcesContent":["export const ASSET_EXTENSIONS = [\n \"png\",\n \"jpg\",\n \"jpeg\",\n \"gif\",\n \"svg\",\n \"webp\",\n \"webm\",\n \"mp4\",\n \"ogg\",\n \"mp3\",\n \"wav\",\n \"flac\",\n \"aac\",\n \"woff\",\n \"woff2\",\n \"eot\",\n \"ttf\",\n \"otf\",\n \"ico\",\n \"avif\",\n \"data\",\n \"gpa\",\n];\n\nexport const ASSET_RE = new RegExp(String.raw`\\.(?:${ASSET_EXTENSIONS.join(\"|\")})$`, \"i\");\n\nexport const ASSET_PATH_RE = new RegExp(String.raw`\\.(?:${ASSET_EXTENSIONS.join(\"|\")})(?:\\?.*)?$`, \"i\");\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"built-url.d.ts","sourceRoot":"","sources":["../../src/vite-plugins/built-url.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAEnC,wBAAgB,YAAY,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAgCvD"}
|
|
@@ -1,21 +1,7 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Vite plugin that configures `renderBuiltUrl` for resolving asset imports
|
|
3
|
-
* to filesystem paths at runtime.
|
|
4
|
-
*
|
|
5
|
-
* When `assetBase` is provided, assets resolve relative to the executable
|
|
6
|
-
* directory using `path.join(path.dirname(process.execPath), assetBase, filename)`.
|
|
7
|
-
* This supports FHS-compliant layouts where assets live in `../share/<app>/`.
|
|
8
|
-
*
|
|
9
|
-
* When `assetBase` is omitted, assets resolve relative to the bundle file
|
|
10
|
-
* via `import.meta.url`, which works when assets are co-located with the
|
|
11
|
-
* executable.
|
|
12
|
-
*
|
|
13
|
-
* Only applies when the user has not already configured
|
|
14
|
-
* `experimental.renderBuiltUrl` in their Vite config.
|
|
15
|
-
*/
|
|
16
1
|
export function gtkxBuiltUrl(assetBase) {
|
|
17
2
|
return {
|
|
18
3
|
name: "gtkx:built-url",
|
|
4
|
+
apply: "build",
|
|
19
5
|
config(userConfig) {
|
|
20
6
|
if (userConfig.experimental?.renderBuiltUrl) {
|
|
21
7
|
return;
|
|
@@ -31,8 +17,9 @@ export function gtkxBuiltUrl(assetBase) {
|
|
|
31
17
|
runtime: `require("path").join(require("path").dirname(process.execPath),${JSON.stringify(assetBase)},${JSON.stringify(filename)})`,
|
|
32
18
|
};
|
|
33
19
|
}
|
|
20
|
+
const filenameLiteral = JSON.stringify(`./${filename}`);
|
|
34
21
|
return {
|
|
35
|
-
runtime: `new URL(${
|
|
22
|
+
runtime: `new URL(${filenameLiteral}, import.meta.url).pathname`,
|
|
36
23
|
};
|
|
37
24
|
},
|
|
38
25
|
},
|
|
@@ -40,4 +27,4 @@ export function gtkxBuiltUrl(assetBase) {
|
|
|
40
27
|
},
|
|
41
28
|
};
|
|
42
29
|
}
|
|
43
|
-
//# sourceMappingURL=
|
|
30
|
+
//# sourceMappingURL=built-url.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"built-url.js","sourceRoot":"","sources":["../../src/vite-plugins/built-url.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,YAAY,CAAC,SAAkB;IAC3C,OAAO;QACH,IAAI,EAAE,gBAAgB;QACtB,KAAK,EAAE,OAAO;QAEd,MAAM,CAAC,UAAU;YACb,IAAI,UAAU,CAAC,YAAY,EAAE,cAAc,EAAE,CAAC;gBAC1C,OAAO;YACX,CAAC;YAED,OAAO;gBACH,YAAY,EAAE;oBACV,cAAc,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE;wBAC7B,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;4BACnB,OAAO;wBACX,CAAC;wBAED,IAAI,SAAS,EAAE,CAAC;4BACZ,OAAO;gCACH,OAAO,EAAE,kEAAkE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG;6BACtI,CAAC;wBACN,CAAC;wBAED,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,QAAQ,EAAE,CAAC,CAAC;wBACxD,OAAO;4BACH,OAAO,EAAE,WAAW,eAAe,6BAA6B;yBACnE,CAAC;oBACN,CAAC;iBACJ;aACJ,CAAC;QACN,CAAC;KACJ,CAAC;AACN,CAAC","sourcesContent":["import type { Plugin } from \"vite\";\n\nexport function gtkxBuiltUrl(assetBase?: string): Plugin {\n return {\n name: \"gtkx:built-url\",\n apply: \"build\",\n\n config(userConfig) {\n if (userConfig.experimental?.renderBuiltUrl) {\n return;\n }\n\n return {\n experimental: {\n renderBuiltUrl(filename, { type }) {\n if (type !== \"asset\") {\n return;\n }\n\n if (assetBase) {\n return {\n runtime: `require(\"path\").join(require(\"path\").dirname(process.execPath),${JSON.stringify(assetBase)},${JSON.stringify(filename)})`,\n };\n }\n\n const filenameLiteral = JSON.stringify(`./${filename}`);\n return {\n runtime: `new URL(${filenameLiteral}, import.meta.url).pathname`,\n };\n },\n },\n };\n },\n };\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"css.d.ts","sourceRoot":"","sources":["../../src/vite-plugins/css.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAQnC,wBAAgB,OAAO,IAAI,MAAM,CA4BhC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { readFileSync } from "node:fs";
|
|
2
|
+
import { createVirtualNamespace } from "./virtual-module.js";
|
|
3
|
+
const CSS_RE = /\.css$/i;
|
|
4
|
+
const INJECT_SUFFIX = "?inject";
|
|
5
|
+
const VIRTUAL_PREFIX = "\0gtkx-css:";
|
|
6
|
+
const { isVirtual, fromVirtualId, resolveToVirtual } = createVirtualNamespace(VIRTUAL_PREFIX);
|
|
7
|
+
export function gtkxCss() {
|
|
8
|
+
return {
|
|
9
|
+
name: "gtkx:css",
|
|
10
|
+
enforce: "pre",
|
|
11
|
+
async resolveId(source, importer, options) {
|
|
12
|
+
if (!CSS_RE.test(source)) {
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
const virtualId = await resolveToVirtual(this, { source, importer, options });
|
|
16
|
+
if (virtualId === undefined)
|
|
17
|
+
return;
|
|
18
|
+
return virtualId + INJECT_SUFFIX;
|
|
19
|
+
},
|
|
20
|
+
load(id) {
|
|
21
|
+
if (isVirtual(id) && id.endsWith(INJECT_SUFFIX)) {
|
|
22
|
+
const filePath = fromVirtualId(id.slice(0, -INJECT_SUFFIX.length));
|
|
23
|
+
const content = readFileSync(filePath, "utf-8");
|
|
24
|
+
return [`import { injectGlobal } from "@gtkx/css";`, `injectGlobal(${JSON.stringify(content)});`].join("\n");
|
|
25
|
+
}
|
|
26
|
+
return;
|
|
27
|
+
},
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=css.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"css.js","sourceRoot":"","sources":["../../src/vite-plugins/css.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAE7D,MAAM,MAAM,GAAG,SAAS,CAAC;AACzB,MAAM,aAAa,GAAG,SAAS,CAAC;AAChC,MAAM,cAAc,GAAG,aAAa,CAAC;AACrC,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,gBAAgB,EAAE,GAAG,sBAAsB,CAAC,cAAc,CAAC,CAAC;AAE9F,MAAM,UAAU,OAAO;IACnB,OAAO;QACH,IAAI,EAAE,UAAU;QAChB,OAAO,EAAE,KAAK;QAEd,KAAK,CAAC,SAAS,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO;YACrC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;gBACvB,OAAO;YACX,CAAC;YAED,MAAM,SAAS,GAAG,MAAM,gBAAgB,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;YAC9E,IAAI,SAAS,KAAK,SAAS;gBAAE,OAAO;YAEpC,OAAO,SAAS,GAAG,aAAa,CAAC;QACrC,CAAC;QAED,IAAI,CAAC,EAAE;YACH,IAAI,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;gBAC9C,MAAM,QAAQ,GAAG,aAAa,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC;gBACnE,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;gBAChD,OAAO,CAAC,2CAA2C,EAAE,gBAAgB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAClG,IAAI,CACP,CAAC;YACN,CAAC;YAED,OAAO;QACX,CAAC;KACJ,CAAC;AACN,CAAC","sourcesContent":["import { readFileSync } from \"node:fs\";\nimport type { Plugin } from \"vite\";\nimport { createVirtualNamespace } from \"./virtual-module.js\";\n\nconst CSS_RE = /\\.css$/i;\nconst INJECT_SUFFIX = \"?inject\";\nconst VIRTUAL_PREFIX = \"\\0gtkx-css:\";\nconst { isVirtual, fromVirtualId, resolveToVirtual } = createVirtualNamespace(VIRTUAL_PREFIX);\n\nexport function gtkxCss(): Plugin {\n return {\n name: \"gtkx:css\",\n enforce: \"pre\",\n\n async resolveId(source, importer, options) {\n if (!CSS_RE.test(source)) {\n return;\n }\n\n const virtualId = await resolveToVirtual(this, { source, importer, options });\n if (virtualId === undefined) return;\n\n return virtualId + INJECT_SUFFIX;\n },\n\n load(id) {\n if (isVirtual(id) && id.endsWith(INJECT_SUFFIX)) {\n const filePath = fromVirtualId(id.slice(0, -INJECT_SUFFIX.length));\n const content = readFileSync(filePath, \"utf-8\");\n return [`import { injectGlobal } from \"@gtkx/css\";`, `injectGlobal(${JSON.stringify(content)});`].join(\n \"\\n\",\n );\n }\n\n return;\n },\n };\n}\n"]}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export declare const REFRESH_REG = "$RefreshReg$";
|
|
2
|
+
export declare const REFRESH_SIG = "$RefreshSig$";
|
|
3
|
+
export declare const REFRESH_RUNTIME_SPECIFIER = "@gtkx/cli/refresh-runtime";
|
|
4
|
+
export declare const shouldTransformForRefresh: (id: string, transformOptions: {
|
|
5
|
+
ssr?: boolean | undefined;
|
|
6
|
+
} | undefined) => boolean;
|
|
7
|
+
//# sourceMappingURL=refresh-filter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"refresh-filter.d.ts","sourceRoot":"","sources":["../../../src/vite-plugins/fast-refresh/refresh-filter.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,WAAW,iBAAiB,CAAC;AAE1C,eAAO,MAAM,WAAW,iBAAiB,CAAC;AAE1C,eAAO,MAAM,yBAAyB,8BAA8B,CAAC;AAKrE,eAAO,MAAM,yBAAyB,OAC9B,MAAM,oBACQ;IAAE,GAAG,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;CAAE,GAAG,SAAS,KAC5D,OAKF,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export const REFRESH_REG = "$RefreshReg$";
|
|
2
|
+
export const REFRESH_SIG = "$RefreshSig$";
|
|
3
|
+
export const REFRESH_RUNTIME_SPECIFIER = "@gtkx/cli/refresh-runtime";
|
|
4
|
+
const REFRESH_INCLUDE = /\.[tj]sx?$/;
|
|
5
|
+
const REFRESH_EXCLUDE = /node_modules|[/\\]dist[/\\]|[/\\]\.gtkx[/\\]/;
|
|
6
|
+
export const shouldTransformForRefresh = (id, transformOptions) => {
|
|
7
|
+
if (!transformOptions?.ssr)
|
|
8
|
+
return false;
|
|
9
|
+
if (!REFRESH_INCLUDE.test(id))
|
|
10
|
+
return false;
|
|
11
|
+
if (REFRESH_EXCLUDE.test(id))
|
|
12
|
+
return false;
|
|
13
|
+
return true;
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=refresh-filter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"refresh-filter.js","sourceRoot":"","sources":["../../../src/vite-plugins/fast-refresh/refresh-filter.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,WAAW,GAAG,cAAc,CAAC;AAE1C,MAAM,CAAC,MAAM,WAAW,GAAG,cAAc,CAAC;AAE1C,MAAM,CAAC,MAAM,yBAAyB,GAAG,2BAA2B,CAAC;AAErE,MAAM,eAAe,GAAG,YAAY,CAAC;AACrC,MAAM,eAAe,GAAG,8CAA8C,CAAC;AAEvE,MAAM,CAAC,MAAM,yBAAyB,GAAG,CACrC,EAAU,EACV,gBAA2D,EACpD,EAAE;IACT,IAAI,CAAC,gBAAgB,EAAE,GAAG;QAAE,OAAO,KAAK,CAAC;IACzC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;QAAE,OAAO,KAAK,CAAC;IAC5C,IAAI,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;QAAE,OAAO,KAAK,CAAC;IAC3C,OAAO,IAAI,CAAC;AAChB,CAAC,CAAC","sourcesContent":["export const REFRESH_REG = \"$RefreshReg$\";\n\nexport const REFRESH_SIG = \"$RefreshSig$\";\n\nexport const REFRESH_RUNTIME_SPECIFIER = \"@gtkx/cli/refresh-runtime\";\n\nconst REFRESH_INCLUDE = /\\.[tj]sx?$/;\nconst REFRESH_EXCLUDE = /node_modules|[/\\\\]dist[/\\\\]|[/\\\\]\\.gtkx[/\\\\]/;\n\nexport const shouldTransformForRefresh = (\n id: string,\n transformOptions: { ssr?: boolean | undefined } | undefined,\n): boolean => {\n if (!transformOptions?.ssr) return false;\n if (!REFRESH_INCLUDE.test(id)) return false;\n if (REFRESH_EXCLUDE.test(id)) return false;\n return true;\n};\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"swc-refresh.d.ts","sourceRoot":"","sources":["../../../src/vite-plugins/fast-refresh/swc-refresh.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAGnC,wBAAgB,cAAc,IAAI,MAAM,CAoCvC;AAED,wBAAgB,kBAAkB,IAAI,MAAM,CAiC3C;AAED,eAAO,MAAM,eAAe,QAAO,MAAM,EAA8C,CAAC"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { fileURLToPath } from "node:url";
|
|
2
|
+
import { transform } from "@swc/core";
|
|
3
|
+
import { REFRESH_REG, REFRESH_RUNTIME_SPECIFIER, REFRESH_SIG, shouldTransformForRefresh } from "./refresh-filter.js";
|
|
4
|
+
export function gtkxSwcRefresh() {
|
|
5
|
+
return {
|
|
6
|
+
name: "gtkx:swc-refresh",
|
|
7
|
+
enforce: "pre",
|
|
8
|
+
apply: "serve",
|
|
9
|
+
async transform(code, id, transformOptions) {
|
|
10
|
+
if (!shouldTransformForRefresh(id, transformOptions)) {
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
const isTsx = id.endsWith(".tsx");
|
|
14
|
+
const isTs = id.endsWith(".ts") || isTsx;
|
|
15
|
+
const swcOptions = {
|
|
16
|
+
filename: id,
|
|
17
|
+
sourceFileName: id,
|
|
18
|
+
sourceMaps: true,
|
|
19
|
+
jsc: {
|
|
20
|
+
parser: isTs ? { syntax: "typescript", tsx: isTsx } : { syntax: "ecmascript", jsx: true },
|
|
21
|
+
transform: {
|
|
22
|
+
react: {
|
|
23
|
+
runtime: "automatic",
|
|
24
|
+
development: true,
|
|
25
|
+
refresh: true,
|
|
26
|
+
},
|
|
27
|
+
},
|
|
28
|
+
target: "es2022",
|
|
29
|
+
},
|
|
30
|
+
};
|
|
31
|
+
const result = await transform(code, swcOptions);
|
|
32
|
+
return result.map === undefined ? { code: result.code } : { code: result.code, map: result.map };
|
|
33
|
+
},
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
export function gtkxRefreshRuntime() {
|
|
37
|
+
return {
|
|
38
|
+
name: "gtkx:refresh-runtime",
|
|
39
|
+
enforce: "post",
|
|
40
|
+
apply: "serve",
|
|
41
|
+
resolveId(id) {
|
|
42
|
+
if (id !== REFRESH_RUNTIME_SPECIFIER)
|
|
43
|
+
return undefined;
|
|
44
|
+
return fileURLToPath(import.meta.resolve(REFRESH_RUNTIME_SPECIFIER));
|
|
45
|
+
},
|
|
46
|
+
transform(code, id, transformOptions) {
|
|
47
|
+
if (!shouldTransformForRefresh(id, transformOptions)) {
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
if (!code.includes(REFRESH_REG) && !code.includes(REFRESH_SIG)) {
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
const moduleIdJson = JSON.stringify(id);
|
|
54
|
+
const header = `
|
|
55
|
+
import { createModuleRegistration as __createModuleRegistration__ } from "${REFRESH_RUNTIME_SPECIFIER}";
|
|
56
|
+
const { ${REFRESH_REG}, ${REFRESH_SIG} } = __createModuleRegistration__(${moduleIdJson});
|
|
57
|
+
`;
|
|
58
|
+
return {
|
|
59
|
+
code: header + code,
|
|
60
|
+
map: null,
|
|
61
|
+
};
|
|
62
|
+
},
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
export const gtkxFastRefresh = () => [gtkxSwcRefresh(), gtkxRefreshRuntime()];
|
|
66
|
+
//# sourceMappingURL=swc-refresh.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"swc-refresh.js","sourceRoot":"","sources":["../../../src/vite-plugins/fast-refresh/swc-refresh.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAA8B,SAAS,EAAE,MAAM,WAAW,CAAC;AAElE,OAAO,EAAE,WAAW,EAAE,yBAAyB,EAAE,WAAW,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAErH,MAAM,UAAU,cAAc;IAC1B,OAAO;QACH,IAAI,EAAE,kBAAkB;QACxB,OAAO,EAAE,KAAK;QACd,KAAK,EAAE,OAAO;QAEd,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,EAAE,gBAAgB;YACtC,IAAI,CAAC,yBAAyB,CAAC,EAAE,EAAE,gBAAgB,CAAC,EAAE,CAAC;gBACnD,OAAO;YACX,CAAC;YAED,MAAM,KAAK,GAAG,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YAClC,MAAM,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC;YAEzC,MAAM,UAAU,GAAe;gBAC3B,QAAQ,EAAE,EAAE;gBACZ,cAAc,EAAE,EAAE;gBAClB,UAAU,EAAE,IAAI;gBAChB,GAAG,EAAE;oBACD,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,EAAE,IAAI,EAAE;oBACzF,SAAS,EAAE;wBACP,KAAK,EAAE;4BACH,OAAO,EAAE,WAAW;4BACpB,WAAW,EAAE,IAAI;4BACjB,OAAO,EAAE,IAAI;yBAChB;qBACJ;oBACD,MAAM,EAAE,QAAQ;iBACnB;aACJ,CAAC;YAEF,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;YAEjD,OAAO,MAAM,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,CAAC;QACrG,CAAC;KACJ,CAAC;AACN,CAAC;AAED,MAAM,UAAU,kBAAkB;IAC9B,OAAO;QACH,IAAI,EAAE,sBAAsB;QAC5B,OAAO,EAAE,MAAM;QACf,KAAK,EAAE,OAAO;QAEd,SAAS,CAAC,EAAE;YACR,IAAI,EAAE,KAAK,yBAAyB;gBAAE,OAAO,SAAS,CAAC;YACvD,OAAO,aAAa,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC,CAAC;QACzE,CAAC;QAED,SAAS,CAAC,IAAI,EAAE,EAAE,EAAE,gBAAgB;YAChC,IAAI,CAAC,yBAAyB,CAAC,EAAE,EAAE,gBAAgB,CAAC,EAAE,CAAC;gBACnD,OAAO;YACX,CAAC;YAED,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;gBAC7D,OAAO;YACX,CAAC;YAED,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;YAExC,MAAM,MAAM,GAAG;4EACiD,yBAAyB;UAC3F,WAAW,KAAK,WAAW,qCAAqC,YAAY;CACrF,CAAC;YAEU,OAAO;gBACH,IAAI,EAAE,MAAM,GAAG,IAAI;gBACnB,GAAG,EAAE,IAAI;aACZ,CAAC;QACN,CAAC;KACJ,CAAC;AACN,CAAC;AAED,MAAM,CAAC,MAAM,eAAe,GAAG,GAAa,EAAE,CAAC,CAAC,cAAc,EAAE,EAAE,kBAAkB,EAAE,CAAC,CAAC","sourcesContent":["import { fileURLToPath } from \"node:url\";\nimport { type Options as SwcOptions, transform } from \"@swc/core\";\nimport type { Plugin } from \"vite\";\nimport { REFRESH_REG, REFRESH_RUNTIME_SPECIFIER, REFRESH_SIG, shouldTransformForRefresh } from \"./refresh-filter.js\";\n\nexport function gtkxSwcRefresh(): Plugin {\n return {\n name: \"gtkx:swc-refresh\",\n enforce: \"pre\",\n apply: \"serve\",\n\n async transform(code, id, transformOptions) {\n if (!shouldTransformForRefresh(id, transformOptions)) {\n return;\n }\n\n const isTsx = id.endsWith(\".tsx\");\n const isTs = id.endsWith(\".ts\") || isTsx;\n\n const swcOptions: SwcOptions = {\n filename: id,\n sourceFileName: id,\n sourceMaps: true,\n jsc: {\n parser: isTs ? { syntax: \"typescript\", tsx: isTsx } : { syntax: \"ecmascript\", jsx: true },\n transform: {\n react: {\n runtime: \"automatic\",\n development: true,\n refresh: true,\n },\n },\n target: \"es2022\",\n },\n };\n\n const result = await transform(code, swcOptions);\n\n return result.map === undefined ? { code: result.code } : { code: result.code, map: result.map };\n },\n };\n}\n\nexport function gtkxRefreshRuntime(): Plugin {\n return {\n name: \"gtkx:refresh-runtime\",\n enforce: \"post\",\n apply: \"serve\",\n\n resolveId(id) {\n if (id !== REFRESH_RUNTIME_SPECIFIER) return undefined;\n return fileURLToPath(import.meta.resolve(REFRESH_RUNTIME_SPECIFIER));\n },\n\n transform(code, id, transformOptions) {\n if (!shouldTransformForRefresh(id, transformOptions)) {\n return;\n }\n\n if (!code.includes(REFRESH_REG) && !code.includes(REFRESH_SIG)) {\n return;\n }\n\n const moduleIdJson = JSON.stringify(id);\n\n const header = `\nimport { createModuleRegistration as __createModuleRegistration__ } from \"${REFRESH_RUNTIME_SPECIFIER}\";\nconst { ${REFRESH_REG}, ${REFRESH_SIG} } = __createModuleRegistration__(${moduleIdJson});\n`;\n\n return {\n code: header + code,\n map: null,\n };\n },\n };\n}\n\nexport const gtkxFastRefresh = (): Plugin[] => [gtkxSwcRefresh(), gtkxRefreshRuntime()];\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"icons.d.ts","sourceRoot":"","sources":["../../src/vite-plugins/icons.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAc,MAAM,MAAM,CAAC;AAqB/C,wBAAgB,SAAS,IAAI,MAAM,CAiClC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { readFileSync } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { info } from "@gtkx/utils";
|
|
4
|
+
import { prependBanner } from "../internal/banner.js";
|
|
5
|
+
import { resolveDataDir } from "../internal/data-dir.js";
|
|
6
|
+
import { listFilesRecursive } from "../internal/list-files.js";
|
|
7
|
+
const ICONS_DIR = "icons";
|
|
8
|
+
const XDG_ENV_BANNER = [
|
|
9
|
+
`process.env.XDG_DATA_DIRS = [`,
|
|
10
|
+
` decodeURIComponent(new URL(".", import.meta.url).pathname),`,
|
|
11
|
+
` process.env.XDG_DATA_DIRS || "/usr/local/share:/usr/share",`,
|
|
12
|
+
`].join(":");`,
|
|
13
|
+
].join("\n");
|
|
14
|
+
const findIconFiles = (iconsDir) => iconsDir === null ? [] : listFilesRecursive(iconsDir);
|
|
15
|
+
export function gtkxIcons() {
|
|
16
|
+
const state = {
|
|
17
|
+
iconsDir: null,
|
|
18
|
+
};
|
|
19
|
+
return {
|
|
20
|
+
name: "gtkx:icons",
|
|
21
|
+
enforce: "pre",
|
|
22
|
+
apply: "build",
|
|
23
|
+
config(config) {
|
|
24
|
+
const root = config.root ?? process.cwd();
|
|
25
|
+
const dataDir = resolveDataDir(root);
|
|
26
|
+
state.iconsDir = dataDir === null ? null : join(root, dataDir, ICONS_DIR);
|
|
27
|
+
},
|
|
28
|
+
outputOptions(options) {
|
|
29
|
+
if (findIconFiles(state.iconsDir).length === 0)
|
|
30
|
+
return;
|
|
31
|
+
return prependBanner(options, XDG_ENV_BANNER);
|
|
32
|
+
},
|
|
33
|
+
buildEnd() {
|
|
34
|
+
const icons = findIconFiles(state.iconsDir);
|
|
35
|
+
for (const { absPath, rel } of icons) {
|
|
36
|
+
this.emitFile({
|
|
37
|
+
type: "asset",
|
|
38
|
+
fileName: join(ICONS_DIR, rel),
|
|
39
|
+
source: readFileSync(absPath),
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
if (icons.length > 0)
|
|
43
|
+
info(`Copied ${icons.length} icon(s) into ${ICONS_DIR}/`);
|
|
44
|
+
},
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=icons.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"icons.js","sourceRoot":"","sources":["../../src/vite-plugins/icons.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAEnC,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAmB,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAEhF,MAAM,SAAS,GAAG,OAAO,CAAC;AAE1B,MAAM,cAAc,GAAG;IACnB,+BAA+B;IAC/B,iEAAiE;IACjE,iEAAiE;IACjE,cAAc;CACjB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAMb,MAAM,aAAa,GAAG,CAAC,QAAuB,EAAgB,EAAE,CAC5D,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC;AAE1D,MAAM,UAAU,SAAS;IACrB,MAAM,KAAK,GAAgB;QACvB,QAAQ,EAAE,IAAI;KACjB,CAAC;IAEF,OAAO;QACH,IAAI,EAAE,YAAY;QAClB,OAAO,EAAE,KAAK;QACd,KAAK,EAAE,OAAO;QAEd,MAAM,CAAC,MAAkB;YACrB,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;YAC1C,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;YACrC,KAAK,CAAC,QAAQ,GAAG,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;QAC9E,CAAC;QAED,aAAa,CAAC,OAAO;YACjB,IAAI,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO;YACvD,OAAO,aAAa,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;QAClD,CAAC;QAED,QAAQ;YACJ,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YAC5C,KAAK,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,KAAK,EAAE,CAAC;gBACnC,IAAI,CAAC,QAAQ,CAAC;oBACV,IAAI,EAAE,OAAO;oBACb,QAAQ,EAAE,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC;oBAC9B,MAAM,EAAE,YAAY,CAAC,OAAO,CAAC;iBAChC,CAAC,CAAC;YACP,CAAC;YACD,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;gBAAE,IAAI,CAAC,UAAU,KAAK,CAAC,MAAM,iBAAiB,SAAS,GAAG,CAAC,CAAC;QACpF,CAAC;KACJ,CAAC;AACN,CAAC","sourcesContent":["import { readFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { info } from \"@gtkx/utils\";\nimport type { Plugin, UserConfig } from \"vite\";\nimport { prependBanner } from \"../internal/banner.js\";\nimport { resolveDataDir } from \"../internal/data-dir.js\";\nimport { type ListedFile, listFilesRecursive } from \"../internal/list-files.js\";\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\ntype PluginState = {\n iconsDir: string | null;\n};\n\nconst findIconFiles = (iconsDir: string | null): ListedFile[] =>\n iconsDir === null ? [] : listFilesRecursive(iconsDir);\n\nexport function gtkxIcons(): Plugin {\n const state: PluginState = {\n iconsDir: null,\n };\n\n return {\n name: \"gtkx:icons\",\n enforce: \"pre\",\n apply: \"build\",\n\n config(config: UserConfig) {\n const root = config.root ?? process.cwd();\n const dataDir = resolveDataDir(root);\n state.iconsDir = dataDir === null ? null : join(root, dataDir, ICONS_DIR);\n },\n\n outputOptions(options) {\n if (findIconFiles(state.iconsDir).length === 0) return;\n return prependBanner(options, XDG_ENV_BANNER);\n },\n\n buildEnd() {\n const icons = findIconFiles(state.iconsDir);\n for (const { absPath, rel } of icons) {\n this.emitFile({\n type: \"asset\",\n fileName: join(ICONS_DIR, rel),\n source: readFileSync(absPath),\n });\n }\n if (icons.length > 0) info(`Copied ${icons.length} icon(s) into ${ICONS_DIR}/`);\n },\n };\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/vite-plugins/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAQnC,eAAO,MAAM,eAAe,UAAW,MAAM,KAAG,MAAM,EAWrD,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { createConfigLoader } from "@gtkx/config/internal";
|
|
2
|
+
import createConfigPlugin from "@gtkx/config/vite-plugin";
|
|
3
|
+
import { gtkxCss } from "./css.js";
|
|
4
|
+
import { gtkxIcons } from "./icons.js";
|
|
5
|
+
import { gtkxReactCompiler } from "./react-compiler.js";
|
|
6
|
+
import { gtkxResources } from "./resources.js";
|
|
7
|
+
import { gtkxSettings } from "./settings.js";
|
|
8
|
+
import { gtkxUndeclaredLibrary } from "./undeclared-library.js";
|
|
9
|
+
export const gtkxVitePlugins = (mode) => {
|
|
10
|
+
const loadConfig = createConfigLoader(mode !== undefined ? { mode } : {});
|
|
11
|
+
return [
|
|
12
|
+
createConfigPlugin({ name: "gtkx:config", loadConfig }),
|
|
13
|
+
gtkxUndeclaredLibrary(mode),
|
|
14
|
+
gtkxSettings(),
|
|
15
|
+
gtkxIcons(),
|
|
16
|
+
gtkxResources(loadConfig),
|
|
17
|
+
gtkxCss(),
|
|
18
|
+
gtkxReactCompiler(loadConfig),
|
|
19
|
+
];
|
|
20
|
+
};
|
|
21
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/vite-plugins/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,kBAAkB,MAAM,0BAA0B,CAAC;AAE1D,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,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAEhE,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,IAAa,EAAY,EAAE;IACvD,MAAM,UAAU,GAAG,kBAAkB,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC1E,OAAO;QACH,kBAAkB,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,UAAU,EAAE,CAAC;QACvD,qBAAqB,CAAC,IAAI,CAAC;QAC3B,YAAY,EAAE;QACd,SAAS,EAAE;QACX,aAAa,CAAC,UAAU,CAAC;QACzB,OAAO,EAAE;QACT,iBAAiB,CAAC,UAAU,CAAC;KAChC,CAAC;AACN,CAAC,CAAC","sourcesContent":["import { createConfigLoader } from \"@gtkx/config/internal\";\nimport createConfigPlugin from \"@gtkx/config/vite-plugin\";\nimport type { Plugin } from \"vite\";\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 { gtkxUndeclaredLibrary } from \"./undeclared-library.js\";\n\nexport const gtkxVitePlugins = (mode?: string): Plugin[] => {\n const loadConfig = createConfigLoader(mode !== undefined ? { mode } : {});\n return [\n createConfigPlugin({ name: \"gtkx:config\", loadConfig }),\n gtkxUndeclaredLibrary(mode),\n gtkxSettings(),\n gtkxIcons(),\n gtkxResources(loadConfig),\n gtkxCss(),\n gtkxReactCompiler(loadConfig),\n ];\n};\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"native.d.ts","sourceRoot":"","sources":["../../src/vite-plugins/native.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AA2CnC,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CA0B/C"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
2
|
+
import { createRequire } from "node:module";
|
|
3
|
+
import { arch, platform } from "node:os";
|
|
4
|
+
import { dirname, join } from "node:path";
|
|
5
|
+
const EMITTED_BINDING_SPECIFIER = "./gtkx.node";
|
|
6
|
+
function resolveBinaryPath(projectRequire, currentArch) {
|
|
7
|
+
const nativeRoot = dirname(projectRequire.resolve("@gtkx/native/package.json"));
|
|
8
|
+
const localBinary = join(nativeRoot, `native.linux-${currentArch}-gnu.node`);
|
|
9
|
+
return existsSync(localBinary) ? localBinary : projectRequire.resolve(`@gtkx/native-linux-${currentArch}-gnu`);
|
|
10
|
+
}
|
|
11
|
+
function resolvePlatformBinary(projectRequire) {
|
|
12
|
+
const currentPlatform = platform();
|
|
13
|
+
const currentArch = arch();
|
|
14
|
+
if (currentPlatform !== "linux") {
|
|
15
|
+
throw new Error(`Unsupported build platform: ${currentPlatform}, only Linux is supported`);
|
|
16
|
+
}
|
|
17
|
+
if (currentArch !== "x64" && currentArch !== "arm64") {
|
|
18
|
+
throw new Error(`Unsupported build architecture: ${currentArch}, only x64 and arm64 are supported`);
|
|
19
|
+
}
|
|
20
|
+
return readFileSync(resolveBinaryPath(projectRequire, currentArch));
|
|
21
|
+
}
|
|
22
|
+
function rewriteLoader(code) {
|
|
23
|
+
const idents = [];
|
|
24
|
+
for (const match of code.matchAll(/export\s*\{\s*([A-Za-z0-9_$]+)\s*\}/g)) {
|
|
25
|
+
const ident = match[1];
|
|
26
|
+
if (ident) {
|
|
27
|
+
idents.push(ident);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
const bindings = idents.join(", ");
|
|
31
|
+
return [
|
|
32
|
+
`import { createRequire as __gtkxCreateRequire } from "node:module";`,
|
|
33
|
+
`const __gtkxNative = __gtkxCreateRequire(import.meta.url)(${JSON.stringify(EMITTED_BINDING_SPECIFIER)});`,
|
|
34
|
+
`const { ${bindings} } = __gtkxNative;`,
|
|
35
|
+
`export { ${bindings} };`,
|
|
36
|
+
].join("\n");
|
|
37
|
+
}
|
|
38
|
+
export function gtkxNative(root) {
|
|
39
|
+
const projectRequire = createRequire(join(root, "package.json"));
|
|
40
|
+
let cachedLoaderPath;
|
|
41
|
+
const loaderPath = () => {
|
|
42
|
+
cachedLoaderPath ??= join(dirname(projectRequire.resolve("@gtkx/native/package.json")), "index.js");
|
|
43
|
+
return cachedLoaderPath;
|
|
44
|
+
};
|
|
45
|
+
return {
|
|
46
|
+
name: "gtkx:native",
|
|
47
|
+
enforce: "pre",
|
|
48
|
+
apply: "build",
|
|
49
|
+
buildStart() {
|
|
50
|
+
this.emitFile({ type: "asset", fileName: "gtkx.node", source: resolvePlatformBinary(projectRequire) });
|
|
51
|
+
},
|
|
52
|
+
resolveId(id) {
|
|
53
|
+
return id === EMITTED_BINDING_SPECIFIER ? { id, external: true } : null;
|
|
54
|
+
},
|
|
55
|
+
transform(code, id) {
|
|
56
|
+
return id.replace(/\?.*$/, "") === loaderPath() ? rewriteLoader(code) : null;
|
|
57
|
+
},
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=native.js.map
|