@gtkx/config 0.21.0 → 1.0.0-rc.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +137 -82
- package/dist/config-error.d.ts +16 -0
- package/dist/config-error.d.ts.map +1 -0
- package/dist/config-error.js +45 -0
- package/dist/config-error.js.map +1 -0
- package/dist/config.d.ts +73 -37
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +123 -82
- package/dist/config.js.map +1 -1
- package/dist/index.d.ts +2 -10
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -8
- package/dist/index.js.map +1 -1
- package/dist/internal.d.ts +3 -0
- package/dist/internal.d.ts.map +1 -0
- package/dist/internal.js +3 -0
- package/dist/internal.js.map +1 -0
- package/dist/loader.d.ts +21 -16
- package/dist/loader.d.ts.map +1 -1
- package/dist/loader.js +26 -38
- package/dist/loader.js.map +1 -1
- package/dist/user-event-signals.d.ts +4 -0
- package/dist/user-event-signals.d.ts.map +1 -0
- package/dist/user-event-signals.js +54 -0
- package/dist/user-event-signals.js.map +1 -0
- package/dist/virtual.d.ts +9 -6
- package/dist/virtual.d.ts.map +1 -1
- package/dist/virtual.js +26 -18
- package/dist/virtual.js.map +1 -1
- package/dist/vite-plugin.d.ts +16 -0
- package/dist/vite-plugin.d.ts.map +1 -0
- package/dist/vite-plugin.js +31 -0
- package/dist/vite-plugin.js.map +1 -0
- package/package.json +18 -11
- package/src/config-error.ts +67 -0
- package/src/config.ts +227 -145
- package/src/index.ts +3 -83
- package/src/internal.ts +2 -0
- package/src/loader.ts +44 -55
- package/src/user-event-signals.ts +57 -0
- package/src/virtual.ts +28 -34
- package/src/vite-plugin.ts +51 -0
- package/dist/bundled-modules.d.ts +0 -2
- package/dist/bundled-modules.d.ts.map +0 -1
- package/dist/bundled-modules.js +0 -2
- package/dist/bundled-modules.js.map +0 -1
- package/dist/data-dir.d.ts +0 -4
- package/dist/data-dir.d.ts.map +0 -1
- package/dist/data-dir.js +0 -37
- package/dist/data-dir.js.map +0 -1
- package/dist/plugin.d.ts +0 -9
- package/dist/plugin.d.ts.map +0 -1
- package/dist/plugin.js +0 -24
- package/dist/plugin.js.map +0 -1
- package/dist/runtime.d.ts +0 -22
- package/dist/runtime.d.ts.map +0 -1
- package/dist/runtime.js +0 -22
- package/dist/runtime.js.map +0 -1
- package/dist/table-rules-ir.d.ts +0 -36
- package/dist/table-rules-ir.d.ts.map +0 -1
- package/dist/table-rules-ir.js +0 -2
- package/dist/table-rules-ir.js.map +0 -1
- package/dist/table-schema.d.ts +0 -107
- package/dist/table-schema.d.ts.map +0 -1
- package/dist/table-schema.js +0 -199
- package/dist/table-schema.js.map +0 -1
- package/dist/validators.d.ts +0 -4
- package/dist/validators.d.ts.map +0 -1
- package/dist/validators.js +0 -10
- package/dist/validators.js.map +0 -1
- package/dist/wrapper-protocol.d.ts +0 -12
- package/dist/wrapper-protocol.d.ts.map +0 -1
- package/dist/wrapper-protocol.js +0 -12
- package/dist/wrapper-protocol.js.map +0 -1
- package/env.d.ts +0 -26
- package/src/bundled-modules.ts +0 -1
- package/src/data-dir.ts +0 -39
- package/src/plugin.ts +0 -30
- package/src/table-rules-ir.ts +0 -42
- package/src/table-schema.ts +0 -342
- package/src/validators.ts +0 -15
- package/src/wrapper-protocol.ts +0 -21
package/dist/config.js
CHANGED
|
@@ -1,104 +1,145 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
import { createDefineConfig } from "c12";
|
|
2
|
+
import { defu } from "defu";
|
|
3
|
+
import { resolve } from "node:path";
|
|
4
|
+
import { z } from "zod";
|
|
5
|
+
import { configError, isRecord, rawIssue } from "./config-error.js";
|
|
6
|
+
import { resolveUserEventSignals } from "./user-event-signals.js";
|
|
7
|
+
const LIBRARIES_WILDCARD = "*";
|
|
8
|
+
const GIR_LIBRARY_PATTERN = /^[A-Za-z][A-Za-z0-9]*-\d+(?:\.\d+)*$/;
|
|
9
|
+
const APPLICATION_ID_PATTERN = /^[A-Za-z_][A-Za-z0-9_-]*(\.[A-Za-z_][A-Za-z0-9_-]*)+$/;
|
|
10
|
+
const APPLICATION_ID_MAX_LENGTH = 255;
|
|
11
|
+
const COMPILATION_MODES = ["infer", "syntax", "annotation", "all"];
|
|
12
|
+
const PANIC_THRESHOLDS = ["none", "critical_errors", "all_errors"];
|
|
5
13
|
const REACT_COMPILER_TARGET = "19";
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
const
|
|
10
|
-
|
|
11
|
-
};
|
|
12
|
-
const validateLibraryEntry = (library) => {
|
|
13
|
-
if (typeof library === "string" && GIR_NAMESPACE_PATTERN.test(library)) {
|
|
14
|
+
const COMPILATION_MODE_SET = new Set(COMPILATION_MODES);
|
|
15
|
+
const PANIC_THRESHOLD_SET = new Set(PANIC_THRESHOLDS);
|
|
16
|
+
const librariesSchema = z.custom().check((ctx) => {
|
|
17
|
+
const value = ctx.value;
|
|
18
|
+
if (value === LIBRARIES_WILDCARD) {
|
|
14
19
|
return;
|
|
15
20
|
}
|
|
16
|
-
if (
|
|
17
|
-
|
|
18
|
-
}
|
|
19
|
-
throw new Error(`gtkx.config.ts: invalid library identifier "${String(library)}" — must be of the form "Name-Version" (e.g. "Gtk-4.0")`);
|
|
20
|
-
};
|
|
21
|
-
const validateLibraries = (libraries) => {
|
|
22
|
-
if (libraries === undefined || libraries === LIBRARIES_WILDCARD) {
|
|
21
|
+
if (!Array.isArray(value) || value.length === 0) {
|
|
22
|
+
ctx.issues.push(rawIssue(value, [], `must be "${LIBRARIES_WILDCARD}", a non-empty string array, or omitted`));
|
|
23
23
|
return;
|
|
24
24
|
}
|
|
25
|
-
|
|
26
|
-
|
|
25
|
+
for (const [index, entry] of value.entries()) {
|
|
26
|
+
ctx.issues.push(...libraryEntryIssues(value, index, entry));
|
|
27
27
|
}
|
|
28
|
-
|
|
29
|
-
|
|
28
|
+
});
|
|
29
|
+
const applicationIdSchema = z.custom().check((ctx) => {
|
|
30
|
+
const value = ctx.value;
|
|
31
|
+
if (typeof value !== "string" || !isValidApplicationId(value)) {
|
|
32
|
+
ctx.issues.push(rawIssue(value, [], `invalid \`applicationId\` "${value}", must satisfy g_application_id_is_valid ` +
|
|
33
|
+
'(e.g. "org.example.MyApp")', true));
|
|
30
34
|
}
|
|
31
|
-
};
|
|
32
|
-
const
|
|
33
|
-
|
|
34
|
-
|
|
35
|
+
});
|
|
36
|
+
const reactCompilerSchema = z.custom().check((ctx) => {
|
|
37
|
+
const value = ctx.value;
|
|
38
|
+
if (typeof value === "boolean") {
|
|
39
|
+
return;
|
|
35
40
|
}
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
if (applicationId === undefined)
|
|
41
|
+
if (!isRecord(value)) {
|
|
42
|
+
ctx.issues.push(rawIssue(value, [], "must be a boolean or an options object"));
|
|
39
43
|
return;
|
|
40
|
-
if (typeof applicationId !== "string" || !isValidApplicationId(applicationId)) {
|
|
41
|
-
throw new Error(`gtkx.config.ts: invalid \`applicationId\` "${String(applicationId)}" — ` +
|
|
42
|
-
`must satisfy g_application_id_is_valid (e.g. "org.example.MyApp")`);
|
|
43
44
|
}
|
|
45
|
+
const compilationMode = value.compilationMode;
|
|
46
|
+
if (!isValidReactCompilerOption(compilationMode, COMPILATION_MODE_SET)) {
|
|
47
|
+
ctx.issues.push(rawIssue(value, [], `invalid \`reactCompiler.compilationMode\` "${String(compilationMode)}", ` +
|
|
48
|
+
`must be one of ${COMPILATION_MODES.join(", ")}`, true));
|
|
49
|
+
}
|
|
50
|
+
const panicThreshold = value.panicThreshold;
|
|
51
|
+
if (!isValidReactCompilerOption(panicThreshold, PANIC_THRESHOLD_SET)) {
|
|
52
|
+
ctx.issues.push(rawIssue(value, [], `invalid \`reactCompiler.panicThreshold\` "${String(panicThreshold)}", ` +
|
|
53
|
+
`must be one of ${PANIC_THRESHOLDS.join(", ")}`, true));
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
const userEventSignalsSchema = z.record(z.string(), z.array(z.string({ error: "must be a non-empty signal name" }).min(1, { error: "must be a non-empty signal name" }), {
|
|
57
|
+
error: "must be an array of signal names",
|
|
58
|
+
}), { error: "must be a record of GLib type names to signal name arrays" });
|
|
59
|
+
const moduleExportSchema = z.object({
|
|
60
|
+
module: z.string({ error: "must be a module specifier" }).min(1, { error: "must be a module specifier" }),
|
|
61
|
+
export: z.string({ error: "must be an export name" }).min(1, { error: "must be an export name" }),
|
|
62
|
+
}, { error: "must be a { module, export } object" });
|
|
63
|
+
const elementConfigSchema = z.object({
|
|
64
|
+
component: moduleExportSchema.optional(),
|
|
65
|
+
props: moduleExportSchema.optional(),
|
|
66
|
+
lazy: z.boolean({ error: "must be a boolean" }).optional(),
|
|
67
|
+
});
|
|
68
|
+
const elementsSchema = z.object({
|
|
69
|
+
behaviors: z
|
|
70
|
+
.string({ error: "must be a path to a module exporting element behaviors" })
|
|
71
|
+
.min(1, { error: "must be a path to a module exporting element behaviors" })
|
|
72
|
+
.optional(),
|
|
73
|
+
config: z.record(z.string(), elementConfigSchema).optional(),
|
|
74
|
+
});
|
|
75
|
+
const configSchema = z.object({
|
|
76
|
+
libraries: librariesSchema.optional(),
|
|
77
|
+
girPath: z.array(z.string(), { error: "must be an array of strings if provided" }).optional(),
|
|
78
|
+
applicationId: applicationIdSchema,
|
|
79
|
+
reactCompiler: reactCompilerSchema.optional(),
|
|
80
|
+
codegen: z.boolean({ error: "must be a boolean" }).optional(),
|
|
81
|
+
userEventSignals: userEventSignalsSchema.optional(),
|
|
82
|
+
elements: elementsSchema.optional(),
|
|
83
|
+
});
|
|
84
|
+
/**
|
|
85
|
+
* Identity helper that returns the given configuration typed as {@link Config},
|
|
86
|
+
* enabling editor autocompletion and type checking in `gtkx.config.ts`.
|
|
87
|
+
*/
|
|
88
|
+
const defineConfig = createDefineConfig();
|
|
89
|
+
const libraryEntryIssues = (value, index, entry) => {
|
|
90
|
+
if (typeof entry === "string" && GIR_LIBRARY_PATTERN.test(entry)) {
|
|
91
|
+
return [];
|
|
92
|
+
}
|
|
93
|
+
if (entry === LIBRARIES_WILDCARD) {
|
|
94
|
+
const message = `to generate every library, set \`libraries: "${LIBRARIES_WILDCARD}"\` as a bare string, ` +
|
|
95
|
+
"not an array entry";
|
|
96
|
+
return [rawIssue(value, [index], message, true)];
|
|
97
|
+
}
|
|
98
|
+
const message = `invalid library identifier "${String(entry)}", must be of the form "Name-Version" ` +
|
|
99
|
+
'(e.g. "Gtk-4.0")';
|
|
100
|
+
return [rawIssue(value, [index], message, true)];
|
|
44
101
|
};
|
|
45
|
-
const
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
if (value !== undefined && !allowed.includes(value)) {
|
|
49
|
-
throw new Error(`gtkx.config.ts: invalid \`reactCompiler.${field}\` "${String(value)}" — must be one of ${allowed.join(", ")}`);
|
|
102
|
+
const isValidApplicationId = (applicationId) => {
|
|
103
|
+
if (applicationId.length === 0 || applicationId.length > APPLICATION_ID_MAX_LENGTH) {
|
|
104
|
+
return false;
|
|
50
105
|
}
|
|
106
|
+
return APPLICATION_ID_PATTERN.test(applicationId);
|
|
51
107
|
};
|
|
52
|
-
const
|
|
53
|
-
if (
|
|
54
|
-
return;
|
|
55
|
-
if (typeof reactCompiler !== "object" || reactCompiler === null || Array.isArray(reactCompiler)) {
|
|
56
|
-
throw new Error("gtkx.config.ts: `reactCompiler` must be a boolean or an options object");
|
|
108
|
+
const resolveReactCompilerOptions = (setting) => {
|
|
109
|
+
if (setting === false) {
|
|
110
|
+
return null;
|
|
57
111
|
}
|
|
58
|
-
|
|
59
|
-
|
|
112
|
+
const overrides = setting === undefined || setting === true ? {} : setting;
|
|
113
|
+
return { ...overrides, target: REACT_COMPILER_TARGET };
|
|
60
114
|
};
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
validateObjectPropRows(config.objectProps);
|
|
68
|
-
validateVirtualPropRows(config.virtualProps);
|
|
69
|
-
validateElementMap(config.elementMap);
|
|
70
|
-
validateReactCompiler(config.reactCompiler);
|
|
115
|
+
const isValidReactCompilerOption = (value, allowed) => value === undefined || (typeof value === "string" && allowed.has(value));
|
|
116
|
+
const validateConfig = (config) => {
|
|
117
|
+
const result = configSchema.safeParse(config);
|
|
118
|
+
if (!result.success) {
|
|
119
|
+
throw configError(result.error);
|
|
120
|
+
}
|
|
71
121
|
};
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
if (
|
|
80
|
-
return
|
|
81
|
-
if (Array.isArray(base) && Array.isArray(override))
|
|
82
|
-
return [...base, ...override];
|
|
83
|
-
if (isMergeableObject(base) && isMergeableObject(override)) {
|
|
84
|
-
const merged = { ...base };
|
|
85
|
-
for (const key of Object.keys(override)) {
|
|
86
|
-
merged[key] = mergeConfigValue(base[key], override[key]);
|
|
87
|
-
}
|
|
88
|
-
return merged;
|
|
122
|
+
/**
|
|
123
|
+
* Deep-merges two configurations, with `override` taking precedence over `base`.
|
|
124
|
+
* @param base The lower-priority configuration.
|
|
125
|
+
* @param override The higher-priority configuration whose values win on conflict.
|
|
126
|
+
*/
|
|
127
|
+
const mergeConfig = (base, override) => defu(override, base);
|
|
128
|
+
const resolveElementsModule = (behaviors, root) => {
|
|
129
|
+
if (behaviors === undefined) {
|
|
130
|
+
return null;
|
|
89
131
|
}
|
|
90
|
-
return
|
|
132
|
+
return root === undefined ? behaviors : resolve(root, behaviors);
|
|
91
133
|
};
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
134
|
+
const resolveLazyElements = (elements) => Object.entries(elements?.config ?? {})
|
|
135
|
+
.filter(([, entry]) => entry.lazy === true)
|
|
136
|
+
.map(([type]) => type);
|
|
137
|
+
const resolveConfig = (config, root) => ({
|
|
96
138
|
applicationId: config.applicationId,
|
|
97
|
-
containerProps: config.containerProps ?? {},
|
|
98
|
-
arrayProps: config.arrayProps ?? {},
|
|
99
|
-
objectProps: config.objectProps ?? {},
|
|
100
|
-
virtualProps: config.virtualProps ?? {},
|
|
101
|
-
elementMap: config.elementMap ?? [],
|
|
102
139
|
reactCompiler: resolveReactCompilerOptions(config.reactCompiler),
|
|
140
|
+
userEventSignals: resolveUserEventSignals(config.userEventSignals),
|
|
141
|
+
elements: resolveElementsModule(config.elements?.behaviors, root),
|
|
142
|
+
lazyElements: resolveLazyElements(config.elements),
|
|
103
143
|
});
|
|
144
|
+
export { LIBRARIES_WILDCARD, GIR_LIBRARY_PATTERN, defineConfig, isValidApplicationId, resolveReactCompilerOptions, validateConfig, mergeConfig, resolveLazyElements, resolveConfig, };
|
|
104
145
|
//# sourceMappingURL=config.js.map
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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","sourcesContent":["import { createDefineConfig, type DefineConfig } from \"c12\";\nimport { defu } from \"defu\";\nimport { resolve } from \"node:path\";\nimport { z } from \"zod\";\nimport { configError, isRecord, rawIssue } from \"./config-error.js\";\nimport { resolveUserEventSignals } from \"./user-event-signals.js\";\n\ntype ReactCompilerCompilationMode = (typeof COMPILATION_MODES)[number];\ntype ReactCompilerPanicThreshold = (typeof PANIC_THRESHOLDS)[number];\n\ntype ReactCompilerOptions = {\n compilationMode?: ReactCompilerCompilationMode;\n panicThreshold?: ReactCompilerPanicThreshold;\n};\n\n/**\n * React Compiler options resolved for the build, with the compilation target\n * fixed to React 19.\n */\ntype ResolvedReactCompilerOptions = ReactCompilerOptions & {\n target: \"19\";\n};\n\n/**\n * User-facing configuration for a GTKX project, as authored in `gtkx.config.ts`:\n * the GIR libraries to bind, extra `.gir` search paths, the GApplication id,\n * a module of per-element configuration (lazy flags and custom behaviors),\n * per-element component wrappers keyed by GLib type name, the React Compiler and\n * codegen settings, and additional user event signals to suppress during React\n * commits.\n */\ntype Config = z.infer<typeof configSchema>;\n\n/**\n * Configuration reduced to the values needed at runtime: the GApplication\n * identifier, the resolved React Compiler options (`null` when disabled), the\n * user event signals suppressed while a React commit is in progress, and the\n * module path holding per-element configuration (`null` when unset).\n */\ntype ResolvedConfig = {\n applicationId: string;\n reactCompiler: ResolvedReactCompilerOptions | null;\n userEventSignals: Record<string, string[]>;\n elements: string | null;\n lazyElements: string[];\n};\n\nconst LIBRARIES_WILDCARD = \"*\";\nconst GIR_LIBRARY_PATTERN = /^[A-Za-z][A-Za-z0-9]*-\\d+(?:\\.\\d+)*$/;\nconst APPLICATION_ID_PATTERN = /^[A-Za-z_][A-Za-z0-9_-]*(\\.[A-Za-z_][A-Za-z0-9_-]*)+$/;\nconst APPLICATION_ID_MAX_LENGTH = 255;\nconst COMPILATION_MODES = [\"infer\", \"syntax\", \"annotation\", \"all\"] as const;\nconst PANIC_THRESHOLDS = [\"none\", \"critical_errors\", \"all_errors\"] as const;\nconst REACT_COMPILER_TARGET = \"19\";\nconst COMPILATION_MODE_SET: Set<string> = new Set(COMPILATION_MODES);\nconst PANIC_THRESHOLD_SET: Set<string> = new Set(PANIC_THRESHOLDS);\n\nconst librariesSchema = z.custom<typeof LIBRARIES_WILDCARD | string[]>().check((ctx) => {\n const value = ctx.value;\n\n if (value === LIBRARIES_WILDCARD) {\n return;\n }\n\n if (!Array.isArray(value) || value.length === 0) {\n ctx.issues.push(rawIssue(value, [], `must be \"${LIBRARIES_WILDCARD}\", a non-empty string array, or omitted`));\n\n return;\n }\n\n for (const [index, entry] of value.entries()) {\n ctx.issues.push(...libraryEntryIssues(value, index, entry));\n }\n});\n\nconst applicationIdSchema = z.custom<string>().check((ctx) => {\n const value = ctx.value;\n\n if (typeof value !== \"string\" || !isValidApplicationId(value)) {\n ctx.issues.push(\n rawIssue(\n value,\n [],\n `invalid \\`applicationId\\` \"${value}\", must satisfy g_application_id_is_valid ` +\n '(e.g. \"org.example.MyApp\")',\n true,\n ),\n );\n }\n});\n\nconst reactCompilerSchema = z.custom<boolean | ReactCompilerOptions>().check((ctx) => {\n const value = ctx.value;\n\n if (typeof value === \"boolean\") {\n return;\n }\n\n if (!isRecord(value)) {\n ctx.issues.push(rawIssue(value, [], \"must be a boolean or an options object\"));\n\n return;\n }\n\n const compilationMode = value.compilationMode;\n\n if (!isValidReactCompilerOption(compilationMode, COMPILATION_MODE_SET)) {\n ctx.issues.push(\n rawIssue(\n value,\n [],\n `invalid \\`reactCompiler.compilationMode\\` \"${String(compilationMode)}\", ` +\n `must be one of ${COMPILATION_MODES.join(\", \")}`,\n true,\n ),\n );\n }\n\n const panicThreshold = value.panicThreshold;\n\n if (!isValidReactCompilerOption(panicThreshold, PANIC_THRESHOLD_SET)) {\n ctx.issues.push(\n rawIssue(\n value,\n [],\n `invalid \\`reactCompiler.panicThreshold\\` \"${String(panicThreshold)}\", ` +\n `must be one of ${PANIC_THRESHOLDS.join(\", \")}`,\n true,\n ),\n );\n }\n});\n\nconst userEventSignalsSchema = z.record(\n z.string(),\n z.array(\n z.string({ error: \"must be a non-empty signal name\" }).min(1, { error: \"must be a non-empty signal name\" }),\n {\n error: \"must be an array of signal names\",\n },\n ),\n { error: \"must be a record of GLib type names to signal name arrays\" },\n);\n\nconst moduleExportSchema = z.object(\n {\n module: z.string({ error: \"must be a module specifier\" }).min(1, { error: \"must be a module specifier\" }),\n export: z.string({ error: \"must be an export name\" }).min(1, { error: \"must be an export name\" }),\n },\n { error: \"must be a { module, export } object\" },\n);\n\nconst elementConfigSchema = z.object({\n component: moduleExportSchema.optional(),\n props: moduleExportSchema.optional(),\n lazy: z.boolean({ error: \"must be a boolean\" }).optional(),\n});\n\nconst elementsSchema = z.object({\n behaviors: z\n .string({ error: \"must be a path to a module exporting element behaviors\" })\n .min(1, { error: \"must be a path to a module exporting element behaviors\" })\n .optional(),\n config: z.record(z.string(), elementConfigSchema).optional(),\n});\n\nconst configSchema = z.object({\n libraries: librariesSchema.optional(),\n girPath: z.array(z.string(), { error: \"must be an array of strings if provided\" }).optional(),\n applicationId: applicationIdSchema,\n reactCompiler: reactCompilerSchema.optional(),\n codegen: z.boolean({ error: \"must be a boolean\" }).optional(),\n userEventSignals: userEventSignalsSchema.optional(),\n elements: elementsSchema.optional(),\n});\n\n/**\n * Identity helper that returns the given configuration typed as {@link Config},\n * enabling editor autocompletion and type checking in `gtkx.config.ts`.\n */\nconst defineConfig: DefineConfig<Config> = createDefineConfig<Config>();\n\nconst libraryEntryIssues = (value: unknown[], index: number, entry: unknown): ReturnType<typeof rawIssue>[] => {\n if (typeof entry === \"string\" && GIR_LIBRARY_PATTERN.test(entry)) {\n return [];\n }\n\n if (entry === LIBRARIES_WILDCARD) {\n const message =\n `to generate every library, set \\`libraries: \"${LIBRARIES_WILDCARD}\"\\` as a bare string, ` +\n \"not an array entry\";\n\n return [rawIssue(value, [index], message, true)];\n }\n\n const message =\n `invalid library identifier \"${String(entry)}\", must be of the form \"Name-Version\" ` +\n '(e.g. \"Gtk-4.0\")';\n\n return [rawIssue(value, [index], message, true)];\n};\n\nconst isValidApplicationId = (applicationId: string): boolean => {\n if (applicationId.length === 0 || applicationId.length > APPLICATION_ID_MAX_LENGTH) {\n return false;\n }\n\n return APPLICATION_ID_PATTERN.test(applicationId);\n};\n\nconst resolveReactCompilerOptions = (setting: Config[\"reactCompiler\"]): ResolvedReactCompilerOptions | null => {\n if (setting === false) {\n return null;\n }\n\n const overrides = setting === undefined || setting === true ? {} : setting;\n\n return { ...overrides, target: REACT_COMPILER_TARGET };\n};\n\nconst isValidReactCompilerOption = (value: unknown, allowed: Set<string>): boolean =>\n value === undefined || (typeof value === \"string\" && allowed.has(value));\n\nconst validateConfig = (config: Config): void => {\n const result = configSchema.safeParse(config);\n\n if (!result.success) {\n throw configError(result.error);\n }\n};\n\n/**\n * Deep-merges two configurations, with `override` taking precedence over `base`.\n * @param base The lower-priority configuration.\n * @param override The higher-priority configuration whose values win on conflict.\n */\nconst mergeConfig = (base: Config, override: Config): Config => defu(override, base);\n\nconst resolveElementsModule = (behaviors: string | undefined, root: string | undefined): string | null => {\n if (behaviors === undefined) {\n return null;\n }\n\n return root === undefined ? behaviors : resolve(root, behaviors);\n};\n\nconst resolveLazyElements = (elements: Config[\"elements\"]): string[] =>\n Object.entries(elements?.config ?? {})\n .filter(([, entry]) => entry.lazy === true)\n .map(([type]) => type);\n\nconst resolveConfig = (config: Config, root?: string): ResolvedConfig => ({\n applicationId: config.applicationId,\n reactCompiler: resolveReactCompilerOptions(config.reactCompiler),\n userEventSignals: resolveUserEventSignals(config.userEventSignals),\n elements: resolveElementsModule(config.elements?.behaviors, root),\n lazyElements: resolveLazyElements(config.elements),\n});\n\nexport {\n LIBRARIES_WILDCARD,\n GIR_LIBRARY_PATTERN,\n defineConfig,\n isValidApplicationId,\n resolveReactCompilerOptions,\n validateConfig,\n mergeConfig,\n resolveLazyElements,\n resolveConfig,\n type ResolvedReactCompilerOptions,\n type Config,\n type ResolvedConfig,\n};\n"]}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,11 +1,3 @@
|
|
|
1
|
-
export {
|
|
2
|
-
export {
|
|
3
|
-
export { DATA_IMPORT_KEY, DATA_IMPORT_PREFIX, resolveDataDir } from "./data-dir.js";
|
|
4
|
-
export { createGtkxConfigLoader, type GtkxConfigLoader, GtkxConfigNotFoundError, type LoadedConfig, type LoadGtkxConfigOptions, type LoadResolvedGtkxConfigOptions, loadGtkxConfig, loadResolvedGtkxConfig, } from "./loader.js";
|
|
5
|
-
export { createGtkxConfigPlugin, type GtkxConfigPluginOptions } from "./plugin.js";
|
|
6
|
-
export type { AddMethodArg, AddMethodRule, PageMetaSetter, PropCondition, PropRule, SetterPropGroup, SetterPropStep, SignalPropRule, } from "./table-rules-ir.js";
|
|
7
|
-
export type { ArrayPropRow, AttachShape, AttachShapeTable, AttachVerb, CallArg, CallStep, ConstructSetter, ConstructStep, ContainerPropRow, DetachGuard, ElementMapRule, MethodVerb, ObjectPropRow, OrderedInsertVerb, PerElementPropRows, PresenceCondition, UserTableRows, VerbArgs, VirtualPropRow, } from "./table-schema.js";
|
|
8
|
-
export { CAMEL_CASE_NAME_PATTERN, PASCAL_CASE_NAME_PATTERN, validateArrayOf, } from "./validators.js";
|
|
9
|
-
export { GTKX_CONFIG_VIRTUAL_ID, RESOLVED_GTKX_CONFIG_VIRTUAL_ID, renderGtkxConfigModule, type SerializedGtkxConfig, serializeGtkxConfig, } from "./virtual.js";
|
|
10
|
-
export { BUFFER_TEXT_KIND, CONTAINER_PROP_KIND, LABEL_TEXT_KIND, LAYOUT_CHILD_KIND, META_OBJECT_KIND, OVERLAY_KIND, SLOT_KIND, TAB_LABEL_KIND, TEXT_ANCHOR_KIND, TEXT_PAINTABLE_KIND, WRAPPER_NODE_ELEMENT, } from "./wrapper-protocol.js";
|
|
1
|
+
export { type Config, defineConfig, mergeConfig, type ResolvedConfig, type ResolvedReactCompilerOptions, } from "./config.js";
|
|
2
|
+
export { type LoadedConfig, loadConfig } from "./loader.js";
|
|
11
3
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,KAAK,MAAM,EACX,YAAY,EACZ,WAAW,EACX,KAAK,cAAc,EACnB,KAAK,4BAA4B,GACpC,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,KAAK,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,9 +1,3 @@
|
|
|
1
|
-
export {
|
|
2
|
-
export {
|
|
3
|
-
export { DATA_IMPORT_KEY, DATA_IMPORT_PREFIX, resolveDataDir } from "./data-dir.js";
|
|
4
|
-
export { createGtkxConfigLoader, GtkxConfigNotFoundError, loadGtkxConfig, loadResolvedGtkxConfig, } from "./loader.js";
|
|
5
|
-
export { createGtkxConfigPlugin } from "./plugin.js";
|
|
6
|
-
export { CAMEL_CASE_NAME_PATTERN, PASCAL_CASE_NAME_PATTERN, validateArrayOf, } from "./validators.js";
|
|
7
|
-
export { GTKX_CONFIG_VIRTUAL_ID, RESOLVED_GTKX_CONFIG_VIRTUAL_ID, renderGtkxConfigModule, serializeGtkxConfig, } from "./virtual.js";
|
|
8
|
-
export { BUFFER_TEXT_KIND, CONTAINER_PROP_KIND, LABEL_TEXT_KIND, LAYOUT_CHILD_KIND, META_OBJECT_KIND, OVERLAY_KIND, SLOT_KIND, TAB_LABEL_KIND, TEXT_ANCHOR_KIND, TEXT_PAINTABLE_KIND, WRAPPER_NODE_ELEMENT, } from "./wrapper-protocol.js";
|
|
1
|
+
export { defineConfig, mergeConfig, } from "./config.js";
|
|
2
|
+
export { loadConfig } from "./loader.js";
|
|
9
3
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAEH,YAAY,EACZ,WAAW,GAGd,MAAM,aAAa,CAAC;AACrB,OAAO,EAAqB,UAAU,EAAE,MAAM,aAAa,CAAC","sourcesContent":["export {\n type Config,\n defineConfig,\n mergeConfig,\n type ResolvedConfig,\n type ResolvedReactCompilerOptions,\n} from \"./config.js\";\nexport { type LoadedConfig, loadConfig } from \"./loader.js\";\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"internal.d.ts","sourceRoot":"","sources":["../src/internal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AACjH,OAAO,EAAE,KAAK,YAAY,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC"}
|
package/dist/internal.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"internal.js","sourceRoot":"","sources":["../src/internal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AACjH,OAAO,EAAqB,kBAAkB,EAAE,MAAM,aAAa,CAAC","sourcesContent":["export { GIR_LIBRARY_PATTERN, isValidApplicationId, LIBRARIES_WILDCARD, resolveLazyElements } from \"./config.js\";\nexport { type ConfigLoader, createConfigLoader } from \"./loader.js\";\n"]}
|
package/dist/loader.d.ts
CHANGED
|
@@ -1,20 +1,25 @@
|
|
|
1
|
-
import { type
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
import { type Config, type ResolvedConfig } from "./config.js";
|
|
2
|
+
/**
|
|
3
|
+
* Result of loading a `gtkx.config.ts` file: the parsed configuration, the
|
|
4
|
+
* resolved config file path (`undefined` when none was found), and the project
|
|
5
|
+
* root it was loaded from.
|
|
6
|
+
*/
|
|
7
|
+
type LoadedConfig = {
|
|
8
|
+
config: Config;
|
|
4
9
|
configFile: string | undefined;
|
|
5
|
-
|
|
10
|
+
root: string;
|
|
6
11
|
};
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
}
|
|
10
|
-
export type LoadGtkxConfigOptions = {
|
|
11
|
-
mode?: string;
|
|
12
|
+
type LoadConfigOptions = {
|
|
13
|
+
mode?: string | undefined;
|
|
12
14
|
};
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
15
|
+
type ConfigLoader = (cwd: string) => Promise<ResolvedConfig>;
|
|
16
|
+
/**
|
|
17
|
+
* Loads and validates the `gtkx.config.ts` file for a project, returning the
|
|
18
|
+
* parsed configuration together with the config file path and project root.
|
|
19
|
+
* @param cwd Directory from which to search for the configuration file.
|
|
20
|
+
* @param options Loading options, such as the environment mode.
|
|
21
|
+
*/
|
|
22
|
+
declare const loadConfig: (cwd: string, options?: LoadConfigOptions) => Promise<LoadedConfig>;
|
|
23
|
+
declare const createConfigLoader: (options?: LoadConfigOptions) => ConfigLoader;
|
|
24
|
+
export { loadConfig, createConfigLoader, type LoadedConfig, type LoadConfigOptions, type ConfigLoader };
|
|
20
25
|
//# sourceMappingURL=loader.d.ts.map
|
package/dist/loader.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,MAAM,EAAiB,KAAK,cAAc,EAAkB,MAAM,aAAa,CAAC;AAE9F;;;;GAIG;AACH,KAAK,YAAY,GAAG;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,IAAI,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,KAAK,iBAAiB,GAAG;IACrB,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC7B,CAAC;AAEF,KAAK,YAAY,GAAG,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC;AAE7D;;;;;GAKG;AACH,QAAA,MAAM,UAAU,GAAU,KAAK,MAAM,EAAE,UAAS,iBAAsB,KAAG,OAAO,CAAC,YAAY,CAuB5F,CAAC;AAEF,QAAA,MAAM,kBAAkB,GAAI,UAAS,iBAAsB,KAAG,YAqB7D,CAAC;AAEF,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,KAAK,YAAY,EAAE,KAAK,iBAAiB,EAAE,KAAK,YAAY,EAAE,CAAC"}
|
package/dist/loader.js
CHANGED
|
@@ -1,62 +1,50 @@
|
|
|
1
|
+
import { loadConfig as loadConfigFile } from "c12";
|
|
1
2
|
import { existsSync } from "node:fs";
|
|
2
3
|
import { resolve } from "node:path";
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
`\n` +
|
|
13
|
-
` export default defineConfig({\n` +
|
|
14
|
-
` libraries: ["Gtk-4.0", "Adw-1"],\n` +
|
|
15
|
-
` });\n`);
|
|
16
|
-
this.name = "GtkxConfigNotFoundError";
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
export const loadGtkxConfig = async (cwd, options = {}) => {
|
|
20
|
-
const result = await loadConfig({
|
|
4
|
+
import { resolveConfig, validateConfig } from "./config.js";
|
|
5
|
+
/**
|
|
6
|
+
* Loads and validates the `gtkx.config.ts` file for a project, returning the
|
|
7
|
+
* parsed configuration together with the config file path and project root.
|
|
8
|
+
* @param cwd Directory from which to search for the configuration file.
|
|
9
|
+
* @param options Loading options, such as the environment mode.
|
|
10
|
+
*/
|
|
11
|
+
const loadConfig = async (cwd, options = {}) => {
|
|
12
|
+
const result = await loadConfigFile({
|
|
21
13
|
name: "gtkx",
|
|
22
14
|
cwd,
|
|
23
15
|
rcFile: false,
|
|
24
16
|
globalRc: false,
|
|
25
17
|
packageJson: false,
|
|
26
18
|
context: { mode: options.mode },
|
|
19
|
+
...((options.mode !== undefined) && { envName: options.mode }),
|
|
27
20
|
});
|
|
28
|
-
|
|
29
|
-
|
|
21
|
+
const config = result.config;
|
|
22
|
+
const isFound = result.configFile !== undefined && existsSync(resolve(cwd, result.configFile));
|
|
23
|
+
if (isFound) {
|
|
24
|
+
validateConfig(config);
|
|
30
25
|
}
|
|
31
|
-
validateGtkxConfig(result.config);
|
|
32
26
|
return {
|
|
33
|
-
config
|
|
34
|
-
configFile: result.configFile,
|
|
35
|
-
|
|
27
|
+
config,
|
|
28
|
+
configFile: isFound ? result.configFile : undefined,
|
|
29
|
+
root: result.cwd ?? cwd,
|
|
36
30
|
};
|
|
37
31
|
};
|
|
38
|
-
|
|
39
|
-
try {
|
|
40
|
-
const { config } = await loadGtkxConfig(cwd, options.mode === undefined ? {} : { mode: options.mode });
|
|
41
|
-
return resolveGtkxConfig(config);
|
|
42
|
-
}
|
|
43
|
-
catch (error) {
|
|
44
|
-
if (options.allowMissing && error instanceof GtkxConfigNotFoundError) {
|
|
45
|
-
return resolveGtkxConfig({});
|
|
46
|
-
}
|
|
47
|
-
throw error;
|
|
48
|
-
}
|
|
49
|
-
};
|
|
50
|
-
export const createGtkxConfigLoader = (options = {}) => {
|
|
32
|
+
const createConfigLoader = (options = {}) => {
|
|
51
33
|
const cache = new Map();
|
|
34
|
+
const loadResolved = async (root) => {
|
|
35
|
+
const { config } = await loadConfig(root, options);
|
|
36
|
+
validateConfig(config);
|
|
37
|
+
return resolveConfig(config, root);
|
|
38
|
+
};
|
|
52
39
|
return (cwd) => {
|
|
53
40
|
const root = resolve(cwd);
|
|
54
41
|
let pending = cache.get(root);
|
|
55
42
|
if (!pending) {
|
|
56
|
-
pending =
|
|
43
|
+
pending = loadResolved(root);
|
|
57
44
|
cache.set(root, pending);
|
|
58
45
|
}
|
|
59
46
|
return pending;
|
|
60
47
|
};
|
|
61
48
|
};
|
|
49
|
+
export { loadConfig, createConfigLoader };
|
|
62
50
|
//# sourceMappingURL=loader.js.map
|
package/dist/loader.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,IAAI,cAAc,EAAE,MAAM,KAAK,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAe,aAAa,EAAuB,cAAc,EAAE,MAAM,aAAa,CAAC;AAmB9F;;;;;GAKG;AACH,MAAM,UAAU,GAAG,KAAK,EAAE,GAAW,EAAE,UAA6B,EAAE,EAAyB,EAAE;IAC7F,MAAM,MAAM,GAAG,MAAM,cAAc,CAAS;QACxC,IAAI,EAAE,MAAM;QACZ,GAAG;QACH,MAAM,EAAE,KAAK;QACb,QAAQ,EAAE,KAAK;QACf,WAAW,EAAE,KAAK;QAClB,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE;QAC/B,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC;KACjE,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IAC7B,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,KAAK,SAAS,IAAI,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;IAE/F,IAAI,OAAO,EAAE,CAAC;QACV,cAAc,CAAC,MAAM,CAAC,CAAC;IAC3B,CAAC;IAED,OAAO;QACH,MAAM;QACN,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS;QACnD,IAAI,EAAE,MAAM,CAAC,GAAG,IAAI,GAAG;KAC1B,CAAC;AACN,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAAG,CAAC,UAA6B,EAAE,EAAgB,EAAE;IACzE,MAAM,KAAK,GAAyC,IAAI,GAAG,EAAE,CAAC;IAE9D,MAAM,YAAY,GAAG,KAAK,EAAE,IAAY,EAA2B,EAAE;QACjE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACnD,cAAc,CAAC,MAAM,CAAC,CAAC;QAEvB,OAAO,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACvC,CAAC,CAAC;IAEF,OAAO,CAAC,GAAW,EAA2B,EAAE;QAC5C,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QAC1B,IAAI,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAE9B,IAAI,CAAC,OAAO,EAAE,CAAC;YACX,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;YAC7B,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC7B,CAAC;QAED,OAAO,OAAO,CAAC;IACnB,CAAC,CAAC;AACN,CAAC,CAAC;AAEF,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAgE,CAAC","sourcesContent":["import { loadConfig as loadConfigFile } from \"c12\";\nimport { existsSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport { type Config, resolveConfig, type ResolvedConfig, validateConfig } from \"./config.js\";\n\n/**\n * Result of loading a `gtkx.config.ts` file: the parsed configuration, the\n * resolved config file path (`undefined` when none was found), and the project\n * root it was loaded from.\n */\ntype LoadedConfig = {\n config: Config;\n configFile: string | undefined;\n root: string;\n};\n\ntype LoadConfigOptions = {\n mode?: string | undefined;\n};\n\ntype ConfigLoader = (cwd: string) => Promise<ResolvedConfig>;\n\n/**\n * Loads and validates the `gtkx.config.ts` file for a project, returning the\n * parsed configuration together with the config file path and project root.\n * @param cwd Directory from which to search for the configuration file.\n * @param options Loading options, such as the environment mode.\n */\nconst loadConfig = async (cwd: string, options: LoadConfigOptions = {}): Promise<LoadedConfig> => {\n const result = await loadConfigFile<Config>({\n name: \"gtkx\",\n cwd,\n rcFile: false,\n globalRc: false,\n packageJson: false,\n context: { mode: options.mode },\n ...((options.mode !== undefined) && { envName: options.mode }),\n });\n\n const config = result.config;\n const isFound = result.configFile !== undefined && existsSync(resolve(cwd, result.configFile));\n\n if (isFound) {\n validateConfig(config);\n }\n\n return {\n config,\n configFile: isFound ? result.configFile : undefined,\n root: result.cwd ?? cwd,\n };\n};\n\nconst createConfigLoader = (options: LoadConfigOptions = {}): ConfigLoader => {\n const cache: Map<string, Promise<ResolvedConfig>> = new Map();\n\n const loadResolved = async (root: string): Promise<ResolvedConfig> => {\n const { config } = await loadConfig(root, options);\n validateConfig(config);\n\n return resolveConfig(config, root);\n };\n\n return (cwd: string): Promise<ResolvedConfig> => {\n const root = resolve(cwd);\n let pending = cache.get(root);\n\n if (!pending) {\n pending = loadResolved(root);\n cache.set(root, pending);\n }\n\n return pending;\n };\n};\n\nexport { loadConfig, createConfigLoader, type LoadedConfig, type LoadConfigOptions, type ConfigLoader };\n"]}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
declare const DEFAULT_USER_EVENT_SIGNALS: Record<string, string[]>;
|
|
2
|
+
declare const resolveUserEventSignals: (overrides: Record<string, string[]> | undefined) => Record<string, string[]>;
|
|
3
|
+
export { DEFAULT_USER_EVENT_SIGNALS, resolveUserEventSignals };
|
|
4
|
+
//# sourceMappingURL=user-event-signals.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user-event-signals.d.ts","sourceRoot":"","sources":["../src/user-event-signals.ts"],"names":[],"mappings":"AAAA,QAAA,MAAM,0BAA0B,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CA2CxD,CAAC;AAEF,QAAA,MAAM,uBAAuB,GAAI,WAAW,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,SAAS,KAAG,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CASzG,CAAC;AAEF,OAAO,EAAE,0BAA0B,EAAE,uBAAuB,EAAE,CAAC"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
const DEFAULT_USER_EVENT_SIGNALS = {
|
|
2
|
+
AdwAlertDialog: ["response"],
|
|
3
|
+
AdwCarousel: ["page-changed"],
|
|
4
|
+
AdwDialog: ["closed"],
|
|
5
|
+
AdwNavigationView: ["pushed"],
|
|
6
|
+
AdwTabView: ["close-page", "page-attached", "page-detached", "page-reordered"],
|
|
7
|
+
GObject: ["notify"],
|
|
8
|
+
GtkAdjustment: ["changed", "value-changed"],
|
|
9
|
+
GtkAppChooserButton: ["changed"],
|
|
10
|
+
GtkAppChooserWidget: ["application-selected"],
|
|
11
|
+
GtkCalendar: ["day-selected"],
|
|
12
|
+
GtkCheckButton: ["toggled"],
|
|
13
|
+
GtkComboBox: ["changed"],
|
|
14
|
+
GtkEditable: ["changed", "delete-text", "insert-text"],
|
|
15
|
+
GtkEntryBuffer: ["deleted-text", "inserted-text"],
|
|
16
|
+
GtkFlowBox: ["selected-children-changed"],
|
|
17
|
+
GtkIconView: ["selection-changed"],
|
|
18
|
+
GtkListBox: ["row-selected", "selected-rows-changed"],
|
|
19
|
+
GtkNotebook: ["page-added", "page-removed", "page-reordered", "switch-page"],
|
|
20
|
+
GtkPopover: ["closed"],
|
|
21
|
+
GtkRange: ["value-changed"],
|
|
22
|
+
GtkScaleButton: ["value-changed"],
|
|
23
|
+
GtkScrolledWindow: ["edge-reached"],
|
|
24
|
+
GtkSearchEntry: ["search-changed"],
|
|
25
|
+
GtkSelectionModel: ["selection-changed"],
|
|
26
|
+
GtkSpinButton: ["value-changed"],
|
|
27
|
+
GtkSwitch: ["state-set"],
|
|
28
|
+
GtkTextBuffer: [
|
|
29
|
+
"apply-tag",
|
|
30
|
+
"changed",
|
|
31
|
+
"delete-range",
|
|
32
|
+
"insert-child-anchor",
|
|
33
|
+
"insert-paintable",
|
|
34
|
+
"insert-text",
|
|
35
|
+
"mark-deleted",
|
|
36
|
+
"mark-set",
|
|
37
|
+
"modified-changed",
|
|
38
|
+
"remove-tag",
|
|
39
|
+
],
|
|
40
|
+
GtkToggleButton: ["toggled"],
|
|
41
|
+
GtkTreeSelection: ["changed"],
|
|
42
|
+
GtkTreeView: ["columns-changed", "cursor-changed", "row-collapsed", "row-expanded"],
|
|
43
|
+
GtkWidget: ["state-flags-changed"],
|
|
44
|
+
};
|
|
45
|
+
const resolveUserEventSignals = (overrides) => {
|
|
46
|
+
const resolved = { ...DEFAULT_USER_EVENT_SIGNALS };
|
|
47
|
+
const overrideEntries = Object.entries(overrides ?? {});
|
|
48
|
+
for (const [typeName, signals] of overrideEntries) {
|
|
49
|
+
resolved[typeName] = [...new Set([...(resolved[typeName] ?? []), ...signals])];
|
|
50
|
+
}
|
|
51
|
+
return resolved;
|
|
52
|
+
};
|
|
53
|
+
export { DEFAULT_USER_EVENT_SIGNALS, resolveUserEventSignals };
|
|
54
|
+
//# sourceMappingURL=user-event-signals.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user-event-signals.js","sourceRoot":"","sources":["../src/user-event-signals.ts"],"names":[],"mappings":"AAAA,MAAM,0BAA0B,GAA6B;IACzD,cAAc,EAAE,CAAC,UAAU,CAAC;IAC5B,WAAW,EAAE,CAAC,cAAc,CAAC;IAC7B,SAAS,EAAE,CAAC,QAAQ,CAAC;IACrB,iBAAiB,EAAE,CAAC,QAAQ,CAAC;IAC7B,UAAU,EAAE,CAAC,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,gBAAgB,CAAC;IAC9E,OAAO,EAAE,CAAC,QAAQ,CAAC;IACnB,aAAa,EAAE,CAAC,SAAS,EAAE,eAAe,CAAC;IAC3C,mBAAmB,EAAE,CAAC,SAAS,CAAC;IAChC,mBAAmB,EAAE,CAAC,sBAAsB,CAAC;IAC7C,WAAW,EAAE,CAAC,cAAc,CAAC;IAC7B,cAAc,EAAE,CAAC,SAAS,CAAC;IAC3B,WAAW,EAAE,CAAC,SAAS,CAAC;IACxB,WAAW,EAAE,CAAC,SAAS,EAAE,aAAa,EAAE,aAAa,CAAC;IACtD,cAAc,EAAE,CAAC,cAAc,EAAE,eAAe,CAAC;IACjD,UAAU,EAAE,CAAC,2BAA2B,CAAC;IACzC,WAAW,EAAE,CAAC,mBAAmB,CAAC;IAClC,UAAU,EAAE,CAAC,cAAc,EAAE,uBAAuB,CAAC;IACrD,WAAW,EAAE,CAAC,YAAY,EAAE,cAAc,EAAE,gBAAgB,EAAE,aAAa,CAAC;IAC5E,UAAU,EAAE,CAAC,QAAQ,CAAC;IACtB,QAAQ,EAAE,CAAC,eAAe,CAAC;IAC3B,cAAc,EAAE,CAAC,eAAe,CAAC;IACjC,iBAAiB,EAAE,CAAC,cAAc,CAAC;IACnC,cAAc,EAAE,CAAC,gBAAgB,CAAC;IAClC,iBAAiB,EAAE,CAAC,mBAAmB,CAAC;IACxC,aAAa,EAAE,CAAC,eAAe,CAAC;IAChC,SAAS,EAAE,CAAC,WAAW,CAAC;IACxB,aAAa,EAAE;QACX,WAAW;QACX,SAAS;QACT,cAAc;QACd,qBAAqB;QACrB,kBAAkB;QAClB,aAAa;QACb,cAAc;QACd,UAAU;QACV,kBAAkB;QAClB,YAAY;KACf;IACD,eAAe,EAAE,CAAC,SAAS,CAAC;IAC5B,gBAAgB,EAAE,CAAC,SAAS,CAAC;IAC7B,WAAW,EAAE,CAAC,iBAAiB,EAAE,gBAAgB,EAAE,eAAe,EAAE,cAAc,CAAC;IACnF,SAAS,EAAE,CAAC,qBAAqB,CAAC;CACrC,CAAC;AAEF,MAAM,uBAAuB,GAAG,CAAC,SAA+C,EAA4B,EAAE;IAC1G,MAAM,QAAQ,GAA6B,EAAE,GAAG,0BAA0B,EAAE,CAAC;IAC7E,MAAM,eAAe,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;IAExD,KAAK,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,eAAe,EAAE,CAAC;QAChD,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IACnF,CAAC;IAED,OAAO,QAAQ,CAAC;AACpB,CAAC,CAAC;AAEF,OAAO,EAAE,0BAA0B,EAAE,uBAAuB,EAAE,CAAC","sourcesContent":["const DEFAULT_USER_EVENT_SIGNALS: Record<string, string[]> = {\n AdwAlertDialog: [\"response\"],\n AdwCarousel: [\"page-changed\"],\n AdwDialog: [\"closed\"],\n AdwNavigationView: [\"pushed\"],\n AdwTabView: [\"close-page\", \"page-attached\", \"page-detached\", \"page-reordered\"],\n GObject: [\"notify\"],\n GtkAdjustment: [\"changed\", \"value-changed\"],\n GtkAppChooserButton: [\"changed\"],\n GtkAppChooserWidget: [\"application-selected\"],\n GtkCalendar: [\"day-selected\"],\n GtkCheckButton: [\"toggled\"],\n GtkComboBox: [\"changed\"],\n GtkEditable: [\"changed\", \"delete-text\", \"insert-text\"],\n GtkEntryBuffer: [\"deleted-text\", \"inserted-text\"],\n GtkFlowBox: [\"selected-children-changed\"],\n GtkIconView: [\"selection-changed\"],\n GtkListBox: [\"row-selected\", \"selected-rows-changed\"],\n GtkNotebook: [\"page-added\", \"page-removed\", \"page-reordered\", \"switch-page\"],\n GtkPopover: [\"closed\"],\n GtkRange: [\"value-changed\"],\n GtkScaleButton: [\"value-changed\"],\n GtkScrolledWindow: [\"edge-reached\"],\n GtkSearchEntry: [\"search-changed\"],\n GtkSelectionModel: [\"selection-changed\"],\n GtkSpinButton: [\"value-changed\"],\n GtkSwitch: [\"state-set\"],\n GtkTextBuffer: [\n \"apply-tag\",\n \"changed\",\n \"delete-range\",\n \"insert-child-anchor\",\n \"insert-paintable\",\n \"insert-text\",\n \"mark-deleted\",\n \"mark-set\",\n \"modified-changed\",\n \"remove-tag\",\n ],\n GtkToggleButton: [\"toggled\"],\n GtkTreeSelection: [\"changed\"],\n GtkTreeView: [\"columns-changed\", \"cursor-changed\", \"row-collapsed\", \"row-expanded\"],\n GtkWidget: [\"state-flags-changed\"],\n};\n\nconst resolveUserEventSignals = (overrides: Record<string, string[]> | undefined): Record<string, string[]> => {\n const resolved: Record<string, string[]> = { ...DEFAULT_USER_EVENT_SIGNALS };\n const overrideEntries = Object.entries(overrides ?? {});\n\n for (const [typeName, signals] of overrideEntries) {\n resolved[typeName] = [...new Set([...(resolved[typeName] ?? []), ...signals])];\n }\n\n return resolved;\n};\n\nexport { DEFAULT_USER_EVENT_SIGNALS, resolveUserEventSignals };\n"]}
|
package/dist/virtual.d.ts
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
1
|
+
import type { ResolvedConfig } from "./config.js";
|
|
2
|
+
declare const GTKX_CONFIG_VIRTUAL_ID = "virtual:gtkx-config";
|
|
3
|
+
declare const RESOLVED_GTKX_CONFIG_VIRTUAL_ID = "\0virtual:gtkx-config";
|
|
4
|
+
/**
|
|
5
|
+
* The runtime element config is the app's static per-element config (currently its lazy flags) merged
|
|
6
|
+
* with its behaviors module, so a single `elements` map is registered.
|
|
7
|
+
*/
|
|
8
|
+
declare const renderConfigModule: (config: ResolvedConfig) => string;
|
|
9
|
+
export { GTKX_CONFIG_VIRTUAL_ID, RESOLVED_GTKX_CONFIG_VIRTUAL_ID, renderConfigModule };
|
|
7
10
|
//# sourceMappingURL=virtual.d.ts.map
|
package/dist/virtual.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"virtual.d.ts","sourceRoot":"","sources":["../src/virtual.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"virtual.d.ts","sourceRoot":"","sources":["../src/virtual.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD,QAAA,MAAM,sBAAsB,wBAAwB,CAAC;AACrD,QAAA,MAAM,+BAA+B,0BAAgC,CAAC;AAMtE;;;GAGG;AACH,QAAA,MAAM,kBAAkB,GAAI,QAAQ,cAAc,KAAG,MAoBpD,CAAC;AAEF,OAAO,EAAE,sBAAsB,EAAE,+BAA+B,EAAE,kBAAkB,EAAE,CAAC"}
|