@gtkx/config 1.3.0 → 1.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -5,9 +5,9 @@
5
5
  <h1 align="center">GTKX</h1>
6
6
 
7
7
  <p align="center">
8
- The React framework for Linux.<br />
9
- Write native Linux applications with React and TypeScript.
10
- Built on the GNOME stack and standard web tooling.
8
+ The React framework for Linux, built on GTK.<br />
9
+ Write native GTK4 desktop applications with React and TypeScript.
10
+ Real GTK widgets, the GNOME stack, and standard web tooling.
11
11
  </p>
12
12
 
13
13
  <p align="center">
@@ -98,7 +98,7 @@ GTK4 is mature, and GtkBuilder XML can lay out a static interface, but nothing r
98
98
  - a React reconciler that exposes every GObject as a JSX element,
99
99
  - a CLI for scaffolding, development, and production builds,
100
100
  - a dev server with Fast Refresh that patches your running UI in place,
101
- - CSS-in-JS styling, React Spring animations, and high-level list, grid, and dialog components,
101
+ - CSS-in-JS styling, React Hook Form-powered Adwaita controls, gettext-backed react-i18next localization, React Spring animations, React Navigation stack, tab, drawer, and split view navigators, and high-level list, grid, and dialog components,
102
102
  - a Testing Library-style API for querying and driving your widgets in tests,
103
103
  - and a Model Context Protocol (MCP) server that exposes your live app to AI agents.
104
104
 
@@ -158,6 +158,7 @@ Explore the [example apps](https://github.com/gtkx-org/gtkx/tree/main/examples):
158
158
  - [`gtk-demo`](https://github.com/gtkx-org/gtkx/tree/main/examples/gtk-demo): a React port of the official GTK4 widget showcase, covering lists, dialogs, gestures, CSS, and OpenGL.
159
159
  - [`browser`](https://github.com/gtkx-org/gtkx/tree/main/examples/browser): a WebKitWebView-based web browser.
160
160
  - [`animations`](https://github.com/gtkx-org/gtkx/tree/main/examples/animations): a tour of `@gtkx/animated`, React Spring animations driven by the GTK frame clock.
161
+ - [`navigation`](https://github.com/gtkx-org/gtkx/tree/main/examples/navigation): a tour of `@gtkx/navigation`, React Navigation's stack, tab, and drawer navigators rendered with libadwaita.
161
162
  - [`tutorial`](https://github.com/gtkx-org/gtkx/tree/main/examples/tutorial): the Tasks app the documentation builds.
162
163
 
163
164
  ## Status
package/dist/config.d.ts CHANGED
@@ -33,7 +33,10 @@ type ResolvedConfig = {
33
33
  applicationId: string;
34
34
  /** React Compiler options for the build, or `null` when the compiler is disabled. */
35
35
  reactCompiler: ResolvedReactCompilerOptions | null;
36
- /** Signal names, keyed by GLib type name, that stay suppressed while a React commit runs. */
36
+ /**
37
+ * Signal names, keyed by GLib type name, that stay suppressed while a React commit writes to a widget.
38
+ * `notify` stays suppressed only for the property being written.
39
+ */
37
40
  userEventSignals: Record<string, string[]>;
38
41
  /** Path of the module exporting per-element configs, or `null` when none is configured. */
39
42
  elements: string | null;
@@ -56,6 +59,7 @@ declare const configSchema: z.ZodObject<{
56
59
  v2ValueReturns: z.ZodOptional<z.ZodBoolean>;
57
60
  v2FinishResults: z.ZodOptional<z.ZodBoolean>;
58
61
  v2InoutReturns: z.ZodOptional<z.ZodBoolean>;
62
+ v2ResourceImports: z.ZodOptional<z.ZodBoolean>;
59
63
  }, z.core.$strip>>;
60
64
  libraries: z.ZodOptional<z.ZodCustom<string[] | "*", string[] | "*">>;
61
65
  girPath: z.ZodOptional<z.ZodArray<z.ZodString>>;
@@ -78,6 +82,7 @@ declare const configSchema: z.ZodObject<{
78
82
  omittedProps: z.ZodOptional<z.ZodArray<z.ZodString>>;
79
83
  }, z.core.$strip>>>;
80
84
  }, z.core.$strip>>;
85
+ applicationIcon: z.ZodOptional<z.ZodString>;
81
86
  deploy: z.ZodOptional<z.ZodObject<{
82
87
  targets: z.ZodOptional<z.ZodArray<z.ZodEnum<{
83
88
  appimage: "appimage";
@@ -117,7 +122,6 @@ declare const configSchema: z.ZodObject<{
117
122
  translate: "translate";
118
123
  "vcs-browser": "vcs-browser";
119
124
  }> & z.core.$partial, z.ZodURL>>;
120
- icons: z.ZodOptional<z.ZodString>;
121
125
  screenshots: z.ZodOptional<z.ZodArray<z.ZodObject<{
122
126
  url: z.ZodOptional<z.ZodURL>;
123
127
  file: z.ZodOptional<z.ZodString>;
@@ -170,6 +174,7 @@ declare const configSchema: z.ZodObject<{
170
174
  source: z.ZodString;
171
175
  mode: z.ZodOptional<z.ZodString>;
172
176
  }, z.core.$strict>]>>>;
177
+ minimumLibraryVersions: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
173
178
  depends: z.ZodOptional<z.ZodObject<{
174
179
  deb: z.ZodOptional<z.ZodArray<z.ZodString>>;
175
180
  rpm: z.ZodOptional<z.ZodArray<z.ZodString>>;
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,KAAK,YAAY,EAAE,MAAM,KAAK,CAAC;AAG5D,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAMxB,wGAAwG;AACxG,KAAK,4BAA4B,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC;AACvE,0GAA0G;AAC1G,KAAK,2BAA2B,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC;AAErE,uGAAuG;AACvG,KAAK,oBAAoB,GAAG;IACxB,+FAA+F;IAC/F,eAAe,CAAC,EAAE,4BAA4B,CAAC;IAC/C,kGAAkG;IAClG,cAAc,CAAC,EAAE,2BAA2B,CAAC;CAChD,CAAC;AAEF;;;GAGG;AACH,KAAK,4BAA4B,GAAG,oBAAoB,GAAG;IACvD,kDAAkD;IAClD,MAAM,EAAE,IAAI,CAAC;CAChB,CAAC;AAEF;;;;;GAKG;AACH,KAAK,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAC3C,KAAK,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAGvD,2GAA2G;AAC3G,KAAK,cAAc,GAAG;IAClB,2DAA2D;IAC3D,aAAa,EAAE,MAAM,CAAC;IACtB,qFAAqF;IACrF,aAAa,EAAE,4BAA4B,GAAG,IAAI,CAAC;IACnD;;;OAGG;IACH,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAC3C,2FAA2F;IAC3F,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,qGAAqG;IACrG,YAAY,EAAE,MAAM,EAAE,CAAC;CAC1B,CAAC;AAIF,QAAA,MAAM,yBAAyB,MAAM,CAAC;AACtC,+DAA+D;AAC/D,QAAA,MAAM,iBAAiB,mDAAoD,CAAC;AAC5E,8DAA8D;AAC9D,QAAA,MAAM,gBAAgB,oDAAqD,CAAC;AA4F5E,QAAA,MAAM,kBAAkB;;;iBAMvB,CAAC;AAgCF,qGAAqG;AACrG,QAAA,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAWhB,CAAC;AAEH;;;GAGG;AACH,QAAA,MAAM,YAAY,EAAE,YAAY,CAAC,MAAM,CAAgC,CAAC;AAsBxE,QAAA,MAAM,oBAAoB,GAAI,eAAe,MAAM,KAAG,OAMrD,CAAC;AAeF,QAAA,MAAM,cAAc,GAAI,QAAQ,MAAM,KAAG,IAMxC,CAAC;AAEF;;;GAGG;AACH,QAAA,MAAM,WAAW,GAAI,MAAM,MAAM,EAAE,UAAU,MAAM,KAAG,MAA8B,CAAC;AAUrF,QAAA,MAAM,mBAAmB,GAAI,UAAU,MAAM,CAAC,UAAU,CAAC,KAAG,MAAM,EAGpC,CAAC;AAc/B,QAAA,MAAM,wBAAwB,GAAI,UAAU,MAAM,CAAC,UAAU,CAAC,KAAG,MAAM,CAAC,MAAM,EAAE,YAAY,CAChC,CAAC;AAE7D,QAAA,MAAM,mBAAmB,GAAI,UAAU,MAAM,CAAC,UAAU,CAAC,KAAG,MAAM,CAAC,MAAM,EAAE,YAAY,CAC/B,CAAC;AAEzD,QAAA,MAAM,mBAAmB,GAAI,UAAU,MAAM,CAAC,UAAU,CAAC,KAAG,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CACpB,CAAC;AAEhE,QAAA,MAAM,aAAa,GAAI,QAAQ,MAAM,EAAE,OAAO,MAAM,KAAG,cAMrD,CAAC;AAEH,OAAO,EACH,yBAAyB,EACzB,YAAY,EACZ,oBAAoB,EACpB,cAAc,EACd,WAAW,EACX,mBAAmB,EACnB,wBAAwB,EACxB,mBAAmB,EACnB,mBAAmB,EACnB,aAAa,EACb,KAAK,4BAA4B,EACjC,KAAK,MAAM,EACX,KAAK,cAAc,GACtB,CAAC"}
package/dist/config.js CHANGED
@@ -4,9 +4,9 @@ import { resolve } from "node:path";
4
4
  import { z } from "zod";
5
5
  import { configError, isRecord, rawIssue } from "./config-error.js";
6
6
  import { deploySchema } from "./deploy.js";
7
+ import { isGirLibrary, text } from "./schema-text.js";
7
8
  import { resolveUserEventSignals } from "./user-event-signals.js";
8
9
  const LIBRARIES_WILDCARD = "*";
9
- const GIR_LIBRARY_PATTERN = /^[A-Za-z][A-Za-z0-9]*-\d+(?:\.\d+)*$/;
10
10
  const APPLICATION_ID_PATTERN = /^[A-Za-z_][A-Za-z0-9_-]*(\.[A-Za-z_][A-Za-z0-9_-]*)+$/;
11
11
  const APPLICATION_ID_MAX_LENGTH = 255;
12
12
  /** Compilation modes `babel-plugin-react-compiler` accepts. */
@@ -85,6 +85,7 @@ const futureSchema = z.object({
85
85
  v2ValueReturns: z.boolean({ error: "must be a boolean" }).optional(),
86
86
  v2FinishResults: z.boolean({ error: "must be a boolean" }).optional(),
87
87
  v2InoutReturns: z.boolean({ error: "must be a boolean" }).optional(),
88
+ v2ResourceImports: z.boolean({ error: "must be a boolean" }).optional(),
88
89
  });
89
90
  /** Schema every `gtkx.config.ts` is validated against, and the source of the {@link Config} type. */
90
91
  const configSchema = z.object({
@@ -96,6 +97,7 @@ const configSchema = z.object({
96
97
  codegen: z.boolean({ error: "must be a boolean" }).optional(),
97
98
  userEventSignals: userEventSignalsSchema.optional(),
98
99
  elements: elementsSchema.optional(),
100
+ applicationIcon: text("must be a path to an icon theme directory or a single icon file").optional(),
99
101
  deploy: deploySchema.optional(),
100
102
  });
101
103
  /**
@@ -104,7 +106,7 @@ const configSchema = z.object({
104
106
  */
105
107
  const defineConfig = createDefineConfig();
106
108
  const libraryEntryIssues = (value, index, entry) => {
107
- if (typeof entry === "string" && GIR_LIBRARY_PATTERN.test(entry)) {
109
+ if (typeof entry === "string" && isGirLibrary(entry)) {
108
110
  return [];
109
111
  }
110
112
  if (entry === LIBRARIES_WILDCARD) {
@@ -1 +1 @@
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.ts\";\nimport { deploySchema } from \"./deploy.ts\";\nimport { resolveUserEventSignals } from \"./user-event-signals.ts\";\n\n/** Accepted `reactCompiler.compilationMode` values, choosing which functions the compiler processes. */\ntype ReactCompilerCompilationMode = (typeof COMPILATION_MODES)[number];\n/** Accepted `reactCompiler.panicThreshold` values, choosing which compiler diagnostics fail the build. */\ntype ReactCompilerPanicThreshold = (typeof PANIC_THRESHOLDS)[number];\n\n/** Object form of the `reactCompiler` config key, forwarded as-is to `babel-plugin-react-compiler`. */\ntype ReactCompilerOptions = {\n /** Which functions the compiler processes; left to the compiler's own default when omitted. */\n compilationMode?: ReactCompilerCompilationMode;\n /** Which compiler diagnostics fail the build; left to the compiler's own default when omitted. */\n panicThreshold?: ReactCompilerPanicThreshold;\n};\n\n/**\n * The React Compiler options the build hands to `babel-plugin-react-compiler`, with the React version\n * GTKX targets filled in.\n */\ntype ResolvedReactCompilerOptions = ReactCompilerOptions & {\n /** React major version the compiler emits for. */\n target: \"19\";\n};\n\n/**\n * User-facing configuration for a GTKX project, as authored in `gtkx.config.ts`: the GIR libraries\n * to bind and where to find them, the GApplication id, per-element configuration, the React\n * Compiler, codegen, and user event signal settings, and the `future` block opting into behavior\n * that becomes the default in the next major version.\n */\ntype Config = z.infer<typeof configSchema>;\ntype ModuleExport = z.infer<typeof moduleExportSchema>;\ntype ElementConfigEntry = z.infer<typeof elementConfigSchema>;\n\n/** Configuration reduced to the values the app runtime and the build need, with paths already resolved. */\ntype ResolvedConfig = {\n /** The GApplication identifier the app registers under. */\n applicationId: string;\n /** React Compiler options for the build, or `null` when the compiler is disabled. */\n reactCompiler: ResolvedReactCompilerOptions | null;\n /** Signal names, keyed by GLib type name, that stay suppressed while a React commit runs. */\n userEventSignals: Record<string, string[]>;\n /** Path of the module exporting per-element configs, or `null` when none is configured. */\n elements: string | null;\n /** GLib type names of the elements marked `isLazy`, whose GObject their parent container creates. */\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;\n/** Compilation modes `babel-plugin-react-compiler` accepts. */\nconst COMPILATION_MODES = [\"infer\", \"syntax\", \"annotation\", \"all\"] as const;\n/** Panic thresholds `babel-plugin-react-compiler` accepts. */\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 isLazy: z.boolean({ error: \"must be a boolean\" }).optional(),\n omittedProps: z\n .array(\n z.string({ error: \"must be a non-empty property name\" }).min(1, {\n error: \"must be a non-empty property name\",\n }),\n { error: \"must be an array of property names\" },\n )\n .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 futureSchema = z.object({\n v2ByteArrays: z.boolean({ error: \"must be a boolean\" }).optional(),\n v2ValueReturns: z.boolean({ error: \"must be a boolean\" }).optional(),\n v2FinishResults: z.boolean({ error: \"must be a boolean\" }).optional(),\n v2InoutReturns: z.boolean({ error: \"must be a boolean\" }).optional(),\n});\n\n/** Schema every `gtkx.config.ts` is validated against, and the source of the {@link Config} type. */\nconst configSchema = z.object({\n future: futureSchema.optional(),\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 deploy: deploySchema.optional(),\n});\n\n/**\n * Returns the given configuration unchanged, typed as {@link Config}, so `gtkx.config.ts` gets\n * autocompletion and type checking.\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. `override` wins over `base` on conflicting scalar and object keys, while\n * arrays are concatenated with the `override` entries first.\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.isLazy === true)\n .map(([type]) => type);\n\nconst elementEntryValues = <T>(\n elements: Config[\"elements\"],\n pick: (entry: ElementConfigEntry) => T | undefined,\n): Record<string, T> =>\n Object.fromEntries(\n Object.entries(elements?.config ?? {}).flatMap(([type, entry]) => {\n const value = pick(entry);\n\n return value === undefined ? [] : [[type, value] as const];\n }),\n );\n\nconst resolveElementComponents = (elements: Config[\"elements\"]): Record<string, ModuleExport> =>\n elementEntryValues(elements, (entry) => entry.component);\n\nconst resolveElementProps = (elements: Config[\"elements\"]): Record<string, ModuleExport> =>\n elementEntryValues(elements, (entry) => entry.props);\n\nconst resolveOmittedProps = (elements: Config[\"elements\"]): Record<string, string[]> =>\n elementEntryValues(elements, (entry) => entry.omittedProps);\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 APPLICATION_ID_MAX_LENGTH,\n defineConfig,\n isValidApplicationId,\n validateConfig,\n mergeConfig,\n resolveLazyElements,\n resolveElementComponents,\n resolveElementProps,\n resolveOmittedProps,\n resolveConfig,\n type ResolvedReactCompilerOptions,\n type Config,\n type ResolvedConfig,\n};\n"]}
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.ts\";\nimport { deploySchema } from \"./deploy.ts\";\nimport { isGirLibrary, text } from \"./schema-text.ts\";\nimport { resolveUserEventSignals } from \"./user-event-signals.ts\";\n\n/** Accepted `reactCompiler.compilationMode` values, choosing which functions the compiler processes. */\ntype ReactCompilerCompilationMode = (typeof COMPILATION_MODES)[number];\n/** Accepted `reactCompiler.panicThreshold` values, choosing which compiler diagnostics fail the build. */\ntype ReactCompilerPanicThreshold = (typeof PANIC_THRESHOLDS)[number];\n\n/** Object form of the `reactCompiler` config key, forwarded as-is to `babel-plugin-react-compiler`. */\ntype ReactCompilerOptions = {\n /** Which functions the compiler processes; left to the compiler's own default when omitted. */\n compilationMode?: ReactCompilerCompilationMode;\n /** Which compiler diagnostics fail the build; left to the compiler's own default when omitted. */\n panicThreshold?: ReactCompilerPanicThreshold;\n};\n\n/**\n * The React Compiler options the build hands to `babel-plugin-react-compiler`, with the React version\n * GTKX targets filled in.\n */\ntype ResolvedReactCompilerOptions = ReactCompilerOptions & {\n /** React major version the compiler emits for. */\n target: \"19\";\n};\n\n/**\n * User-facing configuration for a GTKX project, as authored in `gtkx.config.ts`: the GIR libraries\n * to bind and where to find them, the GApplication id, per-element configuration, the React\n * Compiler, codegen, and user event signal settings, and the `future` block opting into behavior\n * that becomes the default in the next major version.\n */\ntype Config = z.infer<typeof configSchema>;\ntype ModuleExport = z.infer<typeof moduleExportSchema>;\ntype ElementConfigEntry = z.infer<typeof elementConfigSchema>;\n\n/** Configuration reduced to the values the app runtime and the build need, with paths already resolved. */\ntype ResolvedConfig = {\n /** The GApplication identifier the app registers under. */\n applicationId: string;\n /** React Compiler options for the build, or `null` when the compiler is disabled. */\n reactCompiler: ResolvedReactCompilerOptions | null;\n /**\n * Signal names, keyed by GLib type name, that stay suppressed while a React commit writes to a widget.\n * `notify` stays suppressed only for the property being written.\n */\n userEventSignals: Record<string, string[]>;\n /** Path of the module exporting per-element configs, or `null` when none is configured. */\n elements: string | null;\n /** GLib type names of the elements marked `isLazy`, whose GObject their parent container creates. */\n lazyElements: string[];\n};\n\nconst LIBRARIES_WILDCARD = \"*\";\nconst APPLICATION_ID_PATTERN = /^[A-Za-z_][A-Za-z0-9_-]*(\\.[A-Za-z_][A-Za-z0-9_-]*)+$/;\nconst APPLICATION_ID_MAX_LENGTH = 255;\n/** Compilation modes `babel-plugin-react-compiler` accepts. */\nconst COMPILATION_MODES = [\"infer\", \"syntax\", \"annotation\", \"all\"] as const;\n/** Panic thresholds `babel-plugin-react-compiler` accepts. */\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 isLazy: z.boolean({ error: \"must be a boolean\" }).optional(),\n omittedProps: z\n .array(\n z.string({ error: \"must be a non-empty property name\" }).min(1, {\n error: \"must be a non-empty property name\",\n }),\n { error: \"must be an array of property names\" },\n )\n .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 futureSchema = z.object({\n v2ByteArrays: z.boolean({ error: \"must be a boolean\" }).optional(),\n v2ValueReturns: z.boolean({ error: \"must be a boolean\" }).optional(),\n v2FinishResults: z.boolean({ error: \"must be a boolean\" }).optional(),\n v2InoutReturns: z.boolean({ error: \"must be a boolean\" }).optional(),\n v2ResourceImports: z.boolean({ error: \"must be a boolean\" }).optional(),\n});\n\n/** Schema every `gtkx.config.ts` is validated against, and the source of the {@link Config} type. */\nconst configSchema = z.object({\n future: futureSchema.optional(),\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 applicationIcon: text(\"must be a path to an icon theme directory or a single icon file\").optional(),\n deploy: deploySchema.optional(),\n});\n\n/**\n * Returns the given configuration unchanged, typed as {@link Config}, so `gtkx.config.ts` gets\n * autocompletion and type checking.\n */\nconst defineConfig: DefineConfig<Config> = createDefineConfig<Config>();\n\nconst libraryEntryIssues = (value: unknown[], index: number, entry: unknown): ReturnType<typeof rawIssue>[] => {\n if (typeof entry === \"string\" && isGirLibrary(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. `override` wins over `base` on conflicting scalar and object keys, while\n * arrays are concatenated with the `override` entries first.\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.isLazy === true)\n .map(([type]) => type);\n\nconst elementEntryValues = <T>(\n elements: Config[\"elements\"],\n pick: (entry: ElementConfigEntry) => T | undefined,\n): Record<string, T> =>\n Object.fromEntries(\n Object.entries(elements?.config ?? {}).flatMap(([type, entry]) => {\n const value = pick(entry);\n\n return value === undefined ? [] : [[type, value] as const];\n }),\n );\n\nconst resolveElementComponents = (elements: Config[\"elements\"]): Record<string, ModuleExport> =>\n elementEntryValues(elements, (entry) => entry.component);\n\nconst resolveElementProps = (elements: Config[\"elements\"]): Record<string, ModuleExport> =>\n elementEntryValues(elements, (entry) => entry.props);\n\nconst resolveOmittedProps = (elements: Config[\"elements\"]): Record<string, string[]> =>\n elementEntryValues(elements, (entry) => entry.omittedProps);\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 APPLICATION_ID_MAX_LENGTH,\n defineConfig,\n isValidApplicationId,\n validateConfig,\n mergeConfig,\n resolveLazyElements,\n resolveElementComponents,\n resolveElementProps,\n resolveOmittedProps,\n resolveConfig,\n type ResolvedReactCompilerOptions,\n type Config,\n type ResolvedConfig,\n};\n"]}
package/dist/deploy.d.ts CHANGED
@@ -38,7 +38,6 @@ declare const deploySchema: z.ZodObject<{
38
38
  translate: "translate";
39
39
  "vcs-browser": "vcs-browser";
40
40
  }> & z.core.$partial, z.ZodURL>>;
41
- icons: z.ZodOptional<z.ZodString>;
42
41
  screenshots: z.ZodOptional<z.ZodArray<z.ZodObject<{
43
42
  url: z.ZodOptional<z.ZodURL>;
44
43
  file: z.ZodOptional<z.ZodString>;
@@ -91,6 +90,7 @@ declare const deploySchema: z.ZodObject<{
91
90
  source: z.ZodString;
92
91
  mode: z.ZodOptional<z.ZodString>;
93
92
  }, z.core.$strict>]>>>;
93
+ minimumLibraryVersions: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
94
94
  depends: z.ZodOptional<z.ZodObject<{
95
95
  deb: z.ZodOptional<z.ZodArray<z.ZodString>>;
96
96
  rpm: z.ZodOptional<z.ZodArray<z.ZodString>>;
@@ -1 +1 @@
1
- {"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../src/deploy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AA4MxB,QAAA,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAgEhB,CAAC;AAEH,OAAO,EAAE,YAAY,EAAE,CAAC"}
1
+ {"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../src/deploy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAiOxB,QAAA,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAgEhB,CAAC;AAEH,OAAO,EAAE,YAAY,EAAE,CAAC"}
package/dist/deploy.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { z } from "zod";
2
- import { fileExtension, flag, relativePathRecord, text, textList, textRecord, url } from "./schema-text.js";
2
+ import { fileExtension, flag, girLibrary, relativePathRecord, text, textList, textRecord, url, } from "./schema-text.js";
3
3
  const APPIMAGE_COMPRESSIONS = ["gzip", "xz", "zstd"];
4
4
  const DEB_COMPRESSIONS = ["gzip", "none", "xz", "zstd"];
5
5
  const DEB_SIGN_METHODS = ["debsign", "dpkg-sig"];
@@ -31,12 +31,22 @@ const HEX_COLOR_ERROR = "must be a #rrggbb color";
31
31
  const HEX_COLOR_PATTERN = /^#[\dA-Fa-f]{6}$/;
32
32
  const KEY_FILE_ERROR = "must be a path to a PGP key file";
33
33
  const KEY_ID_ERROR = "must be a PGP key id";
34
+ const MINIMUM_LIBRARY_VERSION_ERROR = "must be a version such as 4.18";
35
+ const MINIMUM_LIBRARY_VERSION_PATTERN = /^\d+(?:\.\d+)*$/;
36
+ const MINIMUM_LIBRARY_VERSIONS_ERROR = "must be a record of GIR library ids to a minimum version";
37
+ const LIBRARY_ID_ERROR = 'must be a GIR library identifier of the form "Name-Version", such as "Gtk-4.0"';
34
38
  const SCRIPT_ERROR = "must be a path to a shell script";
35
39
  const SOURCE_PATH_ERROR = "must be a source path";
36
40
  const SPDX_ERROR = "must be an SPDX license expression";
37
41
  const URL_ERROR = "must be an absolute URL";
38
42
  const VERSION_ERROR = "must be a version string";
39
43
  const hexColorSchema = z.string({ error: HEX_COLOR_ERROR }).regex(HEX_COLOR_PATTERN, { error: HEX_COLOR_ERROR });
44
+ const minimumLibraryVersionSchema = z
45
+ .string({ error: MINIMUM_LIBRARY_VERSION_ERROR })
46
+ .regex(MINIMUM_LIBRARY_VERSION_PATTERN, { error: MINIMUM_LIBRARY_VERSION_ERROR });
47
+ const minimumLibraryVersionsSchema = z.record(girLibrary(LIBRARY_ID_ERROR), minimumLibraryVersionSchema, {
48
+ error: MINIMUM_LIBRARY_VERSIONS_ERROR,
49
+ });
40
50
  const relationsSchema = z.strictObject({
41
51
  deb: textList("Debian package relation", "must be an array of Debian package relations").optional(),
42
52
  rpm: textList("RPM package relation", "must be an array of RPM package relations").optional(),
@@ -205,7 +215,6 @@ const deploySchema = z.strictObject({
205
215
  error: "must be a record of AppStream url kinds to URLs",
206
216
  })
207
217
  .optional(),
208
- icons: text("must be a path to an icon theme directory or a single icon file").optional(),
209
218
  screenshots: z.array(screenshotSchema, { error: "must be an array of screenshots" }).optional(),
210
219
  screenshotBaseUrl: url("must be an absolute base URL").optional(),
211
220
  branding: brandingSchema.optional(),
@@ -227,6 +236,7 @@ const deploySchema = z.strictObject({
227
236
  .optional(),
228
237
  isDbusActivatable: flag(BOOLEAN_ERROR).optional(),
229
238
  extraFiles: relativePathRecord("must be a destination path inside the install prefix, without a leading slash or a .. segment", extraFileEntrySchema, "must be a record of prefix-relative destinations to source paths or { source, mode } entries").optional(),
239
+ minimumLibraryVersions: minimumLibraryVersionsSchema.optional(),
230
240
  depends: relationsSchema.optional(),
231
241
  relations: extraRelationsSchema.optional(),
232
242
  scripts: scriptsSchema.optional(),
@@ -1 +1 @@
1
- {"version":3,"file":"deploy.js","sourceRoot":"","sources":["../src/deploy.ts"],"names":[],"mappings":"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","sourcesContent":["import { z } from \"zod\";\nimport { fileExtension, flag, relativePathRecord, text, textList, textRecord, url } from \"./schema-text.ts\";\n\nconst APPIMAGE_COMPRESSIONS = [\"gzip\", \"xz\", \"zstd\"] as const;\nconst DEB_COMPRESSIONS = [\"gzip\", \"none\", \"xz\", \"zstd\"] as const;\nconst DEB_SIGN_METHODS = [\"debsign\", \"dpkg-sig\"] as const;\nconst DEB_SIGN_TYPES = [\"archive\", \"maint\", \"origin\"] as const;\nconst DEPLOY_TARGET_NAMES = [\"appimage\", \"deb\", \"flatpak\", \"rpm\"] as const;\nconst FLATPAK_MODES = [\"prebuilt\", \"source\"] as const;\nconst NODE_SOURCES = [\"download\", \"host\", \"path\"] as const;\nconst OARS_INTENSITIES = [\"intense\", \"mild\", \"moderate\", \"none\"] as const;\nconst PACKAGE_MANAGERS = [\"npm\", \"pnpm\", \"yarn\"] as const;\nconst RELEASE_TYPES = [\"development\", \"snapshot\", \"stable\"] as const;\nconst RELEASE_URGENCIES = [\"critical\", \"high\", \"low\", \"medium\"] as const;\nconst RPM_COMPRESSIONS = [\"gzip\", \"lzma\", \"xz\", \"zstd\"] as const;\n\nconst URL_KINDS = [\n \"bugtracker\",\n \"contact\",\n \"contribute\",\n \"donation\",\n \"faq\",\n \"help\",\n \"translate\",\n \"vcs-browser\",\n] as const;\n\nconst BOOLEAN_ERROR = \"must be a boolean\";\nconst EPOCH_ERROR = \"must be a non-negative integer\";\nconst EXTRA_FILE_ERROR = \"must be a source path or a { source, mode } entry\";\nconst FILE_MODE_ERROR = \"must be an octal file mode such as 755\";\nconst FILE_MODE_PATTERN = /^[0-7]{3,4}$/;\nconst HEX_COLOR_ERROR = \"must be a #rrggbb color\";\nconst HEX_COLOR_PATTERN = /^#[\\dA-Fa-f]{6}$/;\nconst KEY_FILE_ERROR = \"must be a path to a PGP key file\";\nconst KEY_ID_ERROR = \"must be a PGP key id\";\nconst SCRIPT_ERROR = \"must be a path to a shell script\";\nconst SOURCE_PATH_ERROR = \"must be a source path\";\nconst SPDX_ERROR = \"must be an SPDX license expression\";\nconst URL_ERROR = \"must be an absolute URL\";\nconst VERSION_ERROR = \"must be a version string\";\nconst hexColorSchema = z.string({ error: HEX_COLOR_ERROR }).regex(HEX_COLOR_PATTERN, { error: HEX_COLOR_ERROR });\n\nconst relationsSchema = z.strictObject({\n deb: textList(\"Debian package relation\", \"must be an array of Debian package relations\").optional(),\n rpm: textList(\"RPM package relation\", \"must be an array of RPM package relations\").optional(),\n});\n\nconst developerSchema = z.strictObject({\n id: text(\"must be a reverse-DNS developer id\").optional(),\n name: text(\"must be a developer or organization name\").optional(),\n email: text(\"must be an email address\").optional(),\n});\n\nconst screenshotSchema = z\n .strictObject({\n url: url(\"must be an absolute URL to a PNG or JPEG\").optional(),\n file: text(\"must be an image path relative to the project root\").optional(),\n caption: text(\"must be a screenshot caption\").optional(),\n isDefault: flag(BOOLEAN_ERROR).optional(),\n })\n .refine((entry) => entry.url !== undefined || entry.file !== undefined, {\n error: \"must have either a `url` or a `file`\",\n });\n\nconst releaseSchema = z.strictObject({\n version: text(VERSION_ERROR),\n date: z.iso.date({ error: \"must be an ISO date (YYYY-MM-DD)\" }),\n type: z.enum(RELEASE_TYPES, { error: \"must be one of development, snapshot, stable\" }).optional(),\n urgency: z.enum(RELEASE_URGENCIES, { error: \"must be one of critical, high, low, medium\" }).optional(),\n notes: textList(\"release note paragraph\", \"must be an array of release note paragraphs\").optional(),\n url: url(URL_ERROR).optional(),\n});\n\nconst fileAssociationSchema = z.strictObject({\n extension: fileExtension(\"must be a file extension without a leading dot\"),\n mimeType: text(\"must be a MIME type such as text/plain\"),\n description: text(\"must be a description of the file type\").optional(),\n});\n\nconst desktopActionSchema = z.strictObject({\n name: text(\"must be an action name\"),\n args: textList(\"argument\", \"must be an array of arguments appended to Exec\").optional(),\n icon: text(\"must be an icon name\").optional(),\n});\n\nconst brandingSchema = z.strictObject({\n light: hexColorSchema,\n dark: hexColorSchema,\n});\n\nconst extraFileSchema = z.strictObject({\n source: text(SOURCE_PATH_ERROR),\n mode: z.string({ error: FILE_MODE_ERROR }).regex(FILE_MODE_PATTERN, { error: FILE_MODE_ERROR }).optional(),\n});\n\nconst extraFileEntrySchema = z.union([text(SOURCE_PATH_ERROR), extraFileSchema], { error: EXTRA_FILE_ERROR });\n\nconst nodeRuntimeSchema = z.strictObject({\n source: z.enum(NODE_SOURCES, { error: \"must be one of download, host, path\" }).optional(),\n version: text(\"must be a Node.js version such as 24.19.0\").optional(),\n path: text(\"must be a path to a node binary\").optional(),\n shouldStrip: flag(BOOLEAN_ERROR).optional(),\n shouldUseCompileCache: flag(BOOLEAN_ERROR).optional(),\n});\n\nconst scriptsSchema = z.strictObject({\n preInstall: text(SCRIPT_ERROR).optional(),\n postInstall: text(SCRIPT_ERROR).optional(),\n preRemove: text(SCRIPT_ERROR).optional(),\n postRemove: text(SCRIPT_ERROR).optional(),\n});\n\nconst debSchema = z.strictObject({\n packageName: text(\"must be a Debian package name\").optional(),\n section: text(\"must be a Debian archive section\").optional(),\n priority: text(\"must be a Debian priority\").optional(),\n compression: z.enum(DEB_COMPRESSIONS, { error: \"must be one of gzip, none, xz, zstd\" }).optional(),\n fields: textRecord(\"must be a control field value\", \"must be a record of control field names to values\")\n .optional(),\n});\n\nconst rpmSchema = z.strictObject({\n packageName: text(\"must be an RPM package name\").optional(),\n group: text(\"must be an RPM group\").optional(),\n compression: z.enum(RPM_COMPRESSIONS, { error: \"must be one of gzip, lzma, xz, zstd\" }).optional(),\n prefixes: textList(\"prefix\", \"must be an array of relocation prefixes\").optional(),\n});\n\nconst appimageSchema = z.strictObject({\n fileName: text(\"must be an output file name\").optional(),\n compression: z.enum(APPIMAGE_COMPRESSIONS, { error: \"must be one of gzip, xz, zstd\" }).optional(),\n updateInformation: text(\"must be an AppImage update information string\").optional(),\n runtimeFile: text(\"must be a path to an AppImage runtime file\").optional(),\n});\n\nconst flatpakSourceSchema = z.strictObject({\n url: url(\"must be an absolute git URL\").optional(),\n tag: text(\"must be a git tag\").optional(),\n commit: text(\"must be a git commit sha\").optional(),\n});\n\nconst flatpakSchema = z.strictObject({\n mode: z.enum(FLATPAK_MODES, { error: 'must be \"prebuilt\" or \"source\"' }).optional(),\n runtime: text(\"must be a runtime id\").optional(),\n runtimeVersion: text('must be a runtime branch such as \"50\"').optional(),\n sdk: text(\"must be an SDK id\").optional(),\n nodeExtension: text(\"must be a Node SDK extension id\").optional(),\n sdkExtensions: textList(\"SDK extension id\", \"must be an array of SDK extension ids\").optional(),\n base: text(\"must be a base app id\").optional(),\n baseVersion: text(\"must be a base app version\").optional(),\n branch: text(\"must be a branch name\").optional(),\n finishArgs: textList(\"finish argument\", \"must be an array of flatpak finish arguments\").optional(),\n cleanup: textList(\"cleanup pattern\", \"must be an array of cleanup patterns\").optional(),\n buildCommands: textList(\"shell command\", \"must be an array of shell commands\").optional(),\n modules: z.array(z.unknown(), { error: \"must be an array of flatpak module objects\" }).optional(),\n source: flatpakSourceSchema.optional(),\n packageManager: z.enum(PACKAGE_MANAGERS, { error: \"must be one of npm, pnpm, yarn\" }).optional(),\n lockfile: text(\"must be a path to a lockfile\").optional(),\n runtimeRepo: url(\"must be an absolute .flatpakrepo URL\").optional(),\n shouldEmitBundle: flag(BOOLEAN_ERROR).optional(),\n shouldInstall: flag(BOOLEAN_ERROR).optional(),\n shouldUseRofilesFuse: flag(BOOLEAN_ERROR).optional(),\n});\n\nconst debSigningSchema = z.strictObject({\n keyFile: text(KEY_FILE_ERROR),\n keyId: text(KEY_ID_ERROR).optional(),\n method: z.enum(DEB_SIGN_METHODS, { error: 'must be \"debsign\" or \"dpkg-sig\"' }).optional(),\n type: z.enum(DEB_SIGN_TYPES, { error: \"must be one of archive, maint, origin\" }).optional(),\n signer: text(\"must be a signer name and email\").optional(),\n});\n\nconst rpmSigningSchema = z.strictObject({\n keyFile: text(KEY_FILE_ERROR),\n keyId: text(KEY_ID_ERROR).optional(),\n});\n\nconst flatpakSigningSchema = z.strictObject({\n gpgKeyId: text(\"must be a GPG key id\"),\n gpgHomeDir: text(\"must be a path to a GPG home directory\").optional(),\n});\n\nconst appimageSigningSchema = z.strictObject({\n gpgKeyId: text(\"must be a GPG key id\"),\n});\n\nconst signingSchema = z.strictObject({\n appimage: appimageSigningSchema.optional(),\n deb: debSigningSchema.optional(),\n flatpak: flatpakSigningSchema.optional(),\n rpm: rpmSigningSchema.optional(),\n});\n\nconst extraRelationsSchema = z.strictObject({\n recommends: relationsSchema.optional(),\n suggests: relationsSchema.optional(),\n provides: relationsSchema.optional(),\n conflicts: relationsSchema.optional(),\n replaces: relationsSchema.optional(),\n breaks: relationsSchema.optional(),\n preDepends: relationsSchema.optional(),\n});\n\nconst deploySchema = z.strictObject({\n targets: z\n .array(z.enum(DEPLOY_TARGET_NAMES, { error: \"must be one of appimage, deb, flatpak, rpm\" }), {\n error: \"must be an array of deploy targets\",\n })\n .optional(),\n outDir: text(\"must be a directory path relative to the project root\").optional(),\n name: text(\"must be the display name shown in the launcher\").optional(),\n genericName: text(\"must be a generic application name\").optional(),\n binaryName: text(\"must be a kebab-case command name\").optional(),\n version: text(VERSION_ERROR).optional(),\n release: text(\"must be a packaging revision\").optional(),\n epoch: z.int({ error: EPOCH_ERROR }).min(0, { error: EPOCH_ERROR }).optional(),\n summary: text(\"must be a single-line summary without a trailing period\").optional(),\n description: textList(\"description paragraph\", \"must be an array of description paragraphs\").optional(),\n keywords: textList(\"search keyword\", \"must be an array of search keywords\").optional(),\n categories: textList(\"freedesktop category\", \"must be an array of freedesktop categories\").optional(),\n mimeTypes: textList(\"MIME type\", \"must be an array of MIME types\").optional(),\n developer: developerSchema.optional(),\n license: text(SPDX_ERROR).optional(),\n licenseFile: text(\"must be a path to a license file\").optional(),\n metadataLicense: text(SPDX_ERROR).optional(),\n copyright: text(\"must be a copyright line\").optional(),\n homepage: url(URL_ERROR).optional(),\n urls: z\n .partialRecord(z.enum(URL_KINDS), url(URL_ERROR), {\n error: \"must be a record of AppStream url kinds to URLs\",\n })\n .optional(),\n icons: text(\"must be a path to an icon theme directory or a single icon file\").optional(),\n screenshots: z.array(screenshotSchema, { error: \"must be an array of screenshots\" }).optional(),\n screenshotBaseUrl: url(\"must be an absolute base URL\").optional(),\n branding: brandingSchema.optional(),\n contentRating: z\n .record(z.string(), z.enum(OARS_INTENSITIES, { error: \"must be one of intense, mild, moderate, none\" }), {\n error: \"must be a record of OARS 1.1 attribute ids to intensities\",\n })\n .optional(),\n releases: z.array(releaseSchema, { error: \"must be an array of releases\" }).optional(),\n execArgs: textList(\"argument\", \"must be an array of arguments appended to Exec\").optional(),\n fileAssociations: z\n .array(fileAssociationSchema, { error: \"must be an array of file associations\" })\n .optional(),\n protocols: textList(\"URL scheme\", \"must be an array of URL schemes\").optional(),\n desktopActions: z\n .record(z.string(), desktopActionSchema, { error: \"must be a record of action ids to actions\" })\n .optional(),\n desktopEntry: textRecord(\"must be a desktop entry value\", \"must be a record of desktop entry keys to values\")\n .optional(),\n isDbusActivatable: flag(BOOLEAN_ERROR).optional(),\n extraFiles: relativePathRecord(\n \"must be a destination path inside the install prefix, without a leading slash or a .. segment\",\n extraFileEntrySchema,\n \"must be a record of prefix-relative destinations to source paths or { source, mode } entries\",\n ).optional(),\n depends: relationsSchema.optional(),\n relations: extraRelationsSchema.optional(),\n scripts: scriptsSchema.optional(),\n node: nodeRuntimeSchema.optional(),\n signing: signingSchema.optional(),\n appimage: appimageSchema.optional(),\n deb: debSchema.optional(),\n flatpak: flatpakSchema.optional(),\n rpm: rpmSchema.optional(),\n});\n\nexport { deploySchema };\n"]}
1
+ {"version":3,"file":"deploy.js","sourceRoot":"","sources":["../src/deploy.ts"],"names":[],"mappings":"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","sourcesContent":["import { z } from \"zod\";\nimport {\n fileExtension,\n flag,\n girLibrary,\n relativePathRecord,\n text,\n textList,\n textRecord,\n url,\n} from \"./schema-text.ts\";\n\nconst APPIMAGE_COMPRESSIONS = [\"gzip\", \"xz\", \"zstd\"] as const;\nconst DEB_COMPRESSIONS = [\"gzip\", \"none\", \"xz\", \"zstd\"] as const;\nconst DEB_SIGN_METHODS = [\"debsign\", \"dpkg-sig\"] as const;\nconst DEB_SIGN_TYPES = [\"archive\", \"maint\", \"origin\"] as const;\nconst DEPLOY_TARGET_NAMES = [\"appimage\", \"deb\", \"flatpak\", \"rpm\"] as const;\nconst FLATPAK_MODES = [\"prebuilt\", \"source\"] as const;\nconst NODE_SOURCES = [\"download\", \"host\", \"path\"] as const;\nconst OARS_INTENSITIES = [\"intense\", \"mild\", \"moderate\", \"none\"] as const;\nconst PACKAGE_MANAGERS = [\"npm\", \"pnpm\", \"yarn\"] as const;\nconst RELEASE_TYPES = [\"development\", \"snapshot\", \"stable\"] as const;\nconst RELEASE_URGENCIES = [\"critical\", \"high\", \"low\", \"medium\"] as const;\nconst RPM_COMPRESSIONS = [\"gzip\", \"lzma\", \"xz\", \"zstd\"] as const;\n\nconst URL_KINDS = [\n \"bugtracker\",\n \"contact\",\n \"contribute\",\n \"donation\",\n \"faq\",\n \"help\",\n \"translate\",\n \"vcs-browser\",\n] as const;\n\nconst BOOLEAN_ERROR = \"must be a boolean\";\nconst EPOCH_ERROR = \"must be a non-negative integer\";\nconst EXTRA_FILE_ERROR = \"must be a source path or a { source, mode } entry\";\nconst FILE_MODE_ERROR = \"must be an octal file mode such as 755\";\nconst FILE_MODE_PATTERN = /^[0-7]{3,4}$/;\nconst HEX_COLOR_ERROR = \"must be a #rrggbb color\";\nconst HEX_COLOR_PATTERN = /^#[\\dA-Fa-f]{6}$/;\nconst KEY_FILE_ERROR = \"must be a path to a PGP key file\";\nconst KEY_ID_ERROR = \"must be a PGP key id\";\nconst MINIMUM_LIBRARY_VERSION_ERROR = \"must be a version such as 4.18\";\nconst MINIMUM_LIBRARY_VERSION_PATTERN = /^\\d+(?:\\.\\d+)*$/;\nconst MINIMUM_LIBRARY_VERSIONS_ERROR = \"must be a record of GIR library ids to a minimum version\";\nconst LIBRARY_ID_ERROR = 'must be a GIR library identifier of the form \"Name-Version\", such as \"Gtk-4.0\"';\nconst SCRIPT_ERROR = \"must be a path to a shell script\";\nconst SOURCE_PATH_ERROR = \"must be a source path\";\nconst SPDX_ERROR = \"must be an SPDX license expression\";\nconst URL_ERROR = \"must be an absolute URL\";\nconst VERSION_ERROR = \"must be a version string\";\nconst hexColorSchema = z.string({ error: HEX_COLOR_ERROR }).regex(HEX_COLOR_PATTERN, { error: HEX_COLOR_ERROR });\n\nconst minimumLibraryVersionSchema = z\n .string({ error: MINIMUM_LIBRARY_VERSION_ERROR })\n .regex(MINIMUM_LIBRARY_VERSION_PATTERN, { error: MINIMUM_LIBRARY_VERSION_ERROR });\n\nconst minimumLibraryVersionsSchema = z.record(girLibrary(LIBRARY_ID_ERROR), minimumLibraryVersionSchema, {\n error: MINIMUM_LIBRARY_VERSIONS_ERROR,\n});\n\nconst relationsSchema = z.strictObject({\n deb: textList(\"Debian package relation\", \"must be an array of Debian package relations\").optional(),\n rpm: textList(\"RPM package relation\", \"must be an array of RPM package relations\").optional(),\n});\n\nconst developerSchema = z.strictObject({\n id: text(\"must be a reverse-DNS developer id\").optional(),\n name: text(\"must be a developer or organization name\").optional(),\n email: text(\"must be an email address\").optional(),\n});\n\nconst screenshotSchema = z\n .strictObject({\n url: url(\"must be an absolute URL to a PNG or JPEG\").optional(),\n file: text(\"must be an image path relative to the project root\").optional(),\n caption: text(\"must be a screenshot caption\").optional(),\n isDefault: flag(BOOLEAN_ERROR).optional(),\n })\n .refine((entry) => entry.url !== undefined || entry.file !== undefined, {\n error: \"must have either a `url` or a `file`\",\n });\n\nconst releaseSchema = z.strictObject({\n version: text(VERSION_ERROR),\n date: z.iso.date({ error: \"must be an ISO date (YYYY-MM-DD)\" }),\n type: z.enum(RELEASE_TYPES, { error: \"must be one of development, snapshot, stable\" }).optional(),\n urgency: z.enum(RELEASE_URGENCIES, { error: \"must be one of critical, high, low, medium\" }).optional(),\n notes: textList(\"release note paragraph\", \"must be an array of release note paragraphs\").optional(),\n url: url(URL_ERROR).optional(),\n});\n\nconst fileAssociationSchema = z.strictObject({\n extension: fileExtension(\"must be a file extension without a leading dot\"),\n mimeType: text(\"must be a MIME type such as text/plain\"),\n description: text(\"must be a description of the file type\").optional(),\n});\n\nconst desktopActionSchema = z.strictObject({\n name: text(\"must be an action name\"),\n args: textList(\"argument\", \"must be an array of arguments appended to Exec\").optional(),\n icon: text(\"must be an icon name\").optional(),\n});\n\nconst brandingSchema = z.strictObject({\n light: hexColorSchema,\n dark: hexColorSchema,\n});\n\nconst extraFileSchema = z.strictObject({\n source: text(SOURCE_PATH_ERROR),\n mode: z.string({ error: FILE_MODE_ERROR }).regex(FILE_MODE_PATTERN, { error: FILE_MODE_ERROR }).optional(),\n});\n\nconst extraFileEntrySchema = z.union([text(SOURCE_PATH_ERROR), extraFileSchema], { error: EXTRA_FILE_ERROR });\n\nconst nodeRuntimeSchema = z.strictObject({\n source: z.enum(NODE_SOURCES, { error: \"must be one of download, host, path\" }).optional(),\n version: text(\"must be a Node.js version such as 24.19.0\").optional(),\n path: text(\"must be a path to a node binary\").optional(),\n shouldStrip: flag(BOOLEAN_ERROR).optional(),\n shouldUseCompileCache: flag(BOOLEAN_ERROR).optional(),\n});\n\nconst scriptsSchema = z.strictObject({\n preInstall: text(SCRIPT_ERROR).optional(),\n postInstall: text(SCRIPT_ERROR).optional(),\n preRemove: text(SCRIPT_ERROR).optional(),\n postRemove: text(SCRIPT_ERROR).optional(),\n});\n\nconst debSchema = z.strictObject({\n packageName: text(\"must be a Debian package name\").optional(),\n section: text(\"must be a Debian archive section\").optional(),\n priority: text(\"must be a Debian priority\").optional(),\n compression: z.enum(DEB_COMPRESSIONS, { error: \"must be one of gzip, none, xz, zstd\" }).optional(),\n fields: textRecord(\"must be a control field value\", \"must be a record of control field names to values\")\n .optional(),\n});\n\nconst rpmSchema = z.strictObject({\n packageName: text(\"must be an RPM package name\").optional(),\n group: text(\"must be an RPM group\").optional(),\n compression: z.enum(RPM_COMPRESSIONS, { error: \"must be one of gzip, lzma, xz, zstd\" }).optional(),\n prefixes: textList(\"prefix\", \"must be an array of relocation prefixes\").optional(),\n});\n\nconst appimageSchema = z.strictObject({\n fileName: text(\"must be an output file name\").optional(),\n compression: z.enum(APPIMAGE_COMPRESSIONS, { error: \"must be one of gzip, xz, zstd\" }).optional(),\n updateInformation: text(\"must be an AppImage update information string\").optional(),\n runtimeFile: text(\"must be a path to an AppImage runtime file\").optional(),\n});\n\nconst flatpakSourceSchema = z.strictObject({\n url: url(\"must be an absolute git URL\").optional(),\n tag: text(\"must be a git tag\").optional(),\n commit: text(\"must be a git commit sha\").optional(),\n});\n\nconst flatpakSchema = z.strictObject({\n mode: z.enum(FLATPAK_MODES, { error: 'must be \"prebuilt\" or \"source\"' }).optional(),\n runtime: text(\"must be a runtime id\").optional(),\n runtimeVersion: text('must be a runtime branch such as \"50\"').optional(),\n sdk: text(\"must be an SDK id\").optional(),\n nodeExtension: text(\"must be a Node SDK extension id\").optional(),\n sdkExtensions: textList(\"SDK extension id\", \"must be an array of SDK extension ids\").optional(),\n base: text(\"must be a base app id\").optional(),\n baseVersion: text(\"must be a base app version\").optional(),\n branch: text(\"must be a branch name\").optional(),\n finishArgs: textList(\"finish argument\", \"must be an array of flatpak finish arguments\").optional(),\n cleanup: textList(\"cleanup pattern\", \"must be an array of cleanup patterns\").optional(),\n buildCommands: textList(\"shell command\", \"must be an array of shell commands\").optional(),\n modules: z.array(z.unknown(), { error: \"must be an array of flatpak module objects\" }).optional(),\n source: flatpakSourceSchema.optional(),\n packageManager: z.enum(PACKAGE_MANAGERS, { error: \"must be one of npm, pnpm, yarn\" }).optional(),\n lockfile: text(\"must be a path to a lockfile\").optional(),\n runtimeRepo: url(\"must be an absolute .flatpakrepo URL\").optional(),\n shouldEmitBundle: flag(BOOLEAN_ERROR).optional(),\n shouldInstall: flag(BOOLEAN_ERROR).optional(),\n shouldUseRofilesFuse: flag(BOOLEAN_ERROR).optional(),\n});\n\nconst debSigningSchema = z.strictObject({\n keyFile: text(KEY_FILE_ERROR),\n keyId: text(KEY_ID_ERROR).optional(),\n method: z.enum(DEB_SIGN_METHODS, { error: 'must be \"debsign\" or \"dpkg-sig\"' }).optional(),\n type: z.enum(DEB_SIGN_TYPES, { error: \"must be one of archive, maint, origin\" }).optional(),\n signer: text(\"must be a signer name and email\").optional(),\n});\n\nconst rpmSigningSchema = z.strictObject({\n keyFile: text(KEY_FILE_ERROR),\n keyId: text(KEY_ID_ERROR).optional(),\n});\n\nconst flatpakSigningSchema = z.strictObject({\n gpgKeyId: text(\"must be a GPG key id\"),\n gpgHomeDir: text(\"must be a path to a GPG home directory\").optional(),\n});\n\nconst appimageSigningSchema = z.strictObject({\n gpgKeyId: text(\"must be a GPG key id\"),\n});\n\nconst signingSchema = z.strictObject({\n appimage: appimageSigningSchema.optional(),\n deb: debSigningSchema.optional(),\n flatpak: flatpakSigningSchema.optional(),\n rpm: rpmSigningSchema.optional(),\n});\n\nconst extraRelationsSchema = z.strictObject({\n recommends: relationsSchema.optional(),\n suggests: relationsSchema.optional(),\n provides: relationsSchema.optional(),\n conflicts: relationsSchema.optional(),\n replaces: relationsSchema.optional(),\n breaks: relationsSchema.optional(),\n preDepends: relationsSchema.optional(),\n});\n\nconst deploySchema = z.strictObject({\n targets: z\n .array(z.enum(DEPLOY_TARGET_NAMES, { error: \"must be one of appimage, deb, flatpak, rpm\" }), {\n error: \"must be an array of deploy targets\",\n })\n .optional(),\n outDir: text(\"must be a directory path relative to the project root\").optional(),\n name: text(\"must be the display name shown in the launcher\").optional(),\n genericName: text(\"must be a generic application name\").optional(),\n binaryName: text(\"must be a kebab-case command name\").optional(),\n version: text(VERSION_ERROR).optional(),\n release: text(\"must be a packaging revision\").optional(),\n epoch: z.int({ error: EPOCH_ERROR }).min(0, { error: EPOCH_ERROR }).optional(),\n summary: text(\"must be a single-line summary without a trailing period\").optional(),\n description: textList(\"description paragraph\", \"must be an array of description paragraphs\").optional(),\n keywords: textList(\"search keyword\", \"must be an array of search keywords\").optional(),\n categories: textList(\"freedesktop category\", \"must be an array of freedesktop categories\").optional(),\n mimeTypes: textList(\"MIME type\", \"must be an array of MIME types\").optional(),\n developer: developerSchema.optional(),\n license: text(SPDX_ERROR).optional(),\n licenseFile: text(\"must be a path to a license file\").optional(),\n metadataLicense: text(SPDX_ERROR).optional(),\n copyright: text(\"must be a copyright line\").optional(),\n homepage: url(URL_ERROR).optional(),\n urls: z\n .partialRecord(z.enum(URL_KINDS), url(URL_ERROR), {\n error: \"must be a record of AppStream url kinds to URLs\",\n })\n .optional(),\n screenshots: z.array(screenshotSchema, { error: \"must be an array of screenshots\" }).optional(),\n screenshotBaseUrl: url(\"must be an absolute base URL\").optional(),\n branding: brandingSchema.optional(),\n contentRating: z\n .record(z.string(), z.enum(OARS_INTENSITIES, { error: \"must be one of intense, mild, moderate, none\" }), {\n error: \"must be a record of OARS 1.1 attribute ids to intensities\",\n })\n .optional(),\n releases: z.array(releaseSchema, { error: \"must be an array of releases\" }).optional(),\n execArgs: textList(\"argument\", \"must be an array of arguments appended to Exec\").optional(),\n fileAssociations: z\n .array(fileAssociationSchema, { error: \"must be an array of file associations\" })\n .optional(),\n protocols: textList(\"URL scheme\", \"must be an array of URL schemes\").optional(),\n desktopActions: z\n .record(z.string(), desktopActionSchema, { error: \"must be a record of action ids to actions\" })\n .optional(),\n desktopEntry: textRecord(\"must be a desktop entry value\", \"must be a record of desktop entry keys to values\")\n .optional(),\n isDbusActivatable: flag(BOOLEAN_ERROR).optional(),\n extraFiles: relativePathRecord(\n \"must be a destination path inside the install prefix, without a leading slash or a .. segment\",\n extraFileEntrySchema,\n \"must be a record of prefix-relative destinations to source paths or { source, mode } entries\",\n ).optional(),\n minimumLibraryVersions: minimumLibraryVersionsSchema.optional(),\n depends: relationsSchema.optional(),\n relations: extraRelationsSchema.optional(),\n scripts: scriptsSchema.optional(),\n node: nodeRuntimeSchema.optional(),\n signing: signingSchema.optional(),\n appimage: appimageSchema.optional(),\n deb: debSchema.optional(),\n flatpak: flatpakSchema.optional(),\n rpm: rpmSchema.optional(),\n});\n\nexport { deploySchema };\n"]}
@@ -1,4 +1,5 @@
1
1
  export type { ResolvedReactCompilerOptions } from "./config.ts";
2
2
  export { APPLICATION_ID_MAX_LENGTH, isValidApplicationId, resolveElementComponents, resolveElementProps, resolveLazyElements, resolveOmittedProps, } from "./config.ts";
3
3
  export { createConfigLoader } from "./loader.ts";
4
+ export { resourceBasePath } from "./resource-base-path.ts";
4
5
  //# sourceMappingURL=internal.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"internal.d.ts","sourceRoot":"","sources":["../src/internal.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,4BAA4B,EAAE,MAAM,aAAa,CAAC;AAChE,OAAO,EACH,yBAAyB,EACzB,oBAAoB,EACpB,wBAAwB,EACxB,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,GACtB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"internal.d.ts","sourceRoot":"","sources":["../src/internal.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,4BAA4B,EAAE,MAAM,aAAa,CAAC;AAChE,OAAO,EACH,yBAAyB,EACzB,oBAAoB,EACpB,wBAAwB,EACxB,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,GACtB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC"}
package/dist/internal.js CHANGED
@@ -1,3 +1,4 @@
1
1
  export { APPLICATION_ID_MAX_LENGTH, isValidApplicationId, resolveElementComponents, resolveElementProps, resolveLazyElements, resolveOmittedProps, } from "./config.js";
2
2
  export { createConfigLoader } from "./loader.js";
3
+ export { resourceBasePath } from "./resource-base-path.js";
3
4
  //# sourceMappingURL=internal.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"internal.js","sourceRoot":"","sources":["../src/internal.ts"],"names":[],"mappings":"AACA,OAAO,EACH,yBAAyB,EACzB,oBAAoB,EACpB,wBAAwB,EACxB,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,GACtB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC","sourcesContent":["export type { ResolvedReactCompilerOptions } from \"./config.ts\";\nexport {\n APPLICATION_ID_MAX_LENGTH,\n isValidApplicationId,\n resolveElementComponents,\n resolveElementProps,\n resolveLazyElements,\n resolveOmittedProps,\n} from \"./config.ts\";\nexport { createConfigLoader } from \"./loader.ts\";\n"]}
1
+ {"version":3,"file":"internal.js","sourceRoot":"","sources":["../src/internal.ts"],"names":[],"mappings":"AACA,OAAO,EACH,yBAAyB,EACzB,oBAAoB,EACpB,wBAAwB,EACxB,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,GACtB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC","sourcesContent":["export type { ResolvedReactCompilerOptions } from \"./config.ts\";\nexport {\n APPLICATION_ID_MAX_LENGTH,\n isValidApplicationId,\n resolveElementComponents,\n resolveElementProps,\n resolveLazyElements,\n resolveOmittedProps,\n} from \"./config.ts\";\nexport { createConfigLoader } from \"./loader.ts\";\nexport { resourceBasePath } from \"./resource-base-path.ts\";\n"]}
@@ -0,0 +1,3 @@
1
+ declare const resourceBasePath: (applicationId: string) => string;
2
+ export { resourceBasePath };
3
+ //# sourceMappingURL=resource-base-path.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resource-base-path.d.ts","sourceRoot":"","sources":["../src/resource-base-path.ts"],"names":[],"mappings":"AAAA,QAAA,MAAM,gBAAgB,GAAI,eAAe,MAAM,KAAG,MAAkD,CAAC;AAErG,OAAO,EAAE,gBAAgB,EAAE,CAAC"}
@@ -0,0 +1,3 @@
1
+ const resourceBasePath = (applicationId) => `/${applicationId.replaceAll(".", "/")}`;
2
+ export { resourceBasePath };
3
+ //# sourceMappingURL=resource-base-path.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resource-base-path.js","sourceRoot":"","sources":["../src/resource-base-path.ts"],"names":[],"mappings":"AAAA,MAAM,gBAAgB,GAAG,CAAC,aAAqB,EAAU,EAAE,CAAC,IAAI,aAAa,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC;AAErG,OAAO,EAAE,gBAAgB,EAAE,CAAC","sourcesContent":["const resourceBasePath = (applicationId: string): string => `/${applicationId.replaceAll(\".\", \"/\")}`;\n\nexport { resourceBasePath };\n"]}
@@ -1,10 +1,12 @@
1
1
  import { z } from "zod";
2
+ declare const isGirLibrary: (value: string) => boolean;
2
3
  declare const text: (message: string) => z.ZodString;
3
4
  declare const textList: (itemNoun: string, listMessage: string) => z.ZodArray<z.ZodString>;
4
5
  declare const url: (message: string) => z.ZodURL;
5
6
  declare const flag: (message: string) => z.ZodBoolean;
6
7
  declare const textRecord: (valueMessage: string, recordMessage: string) => z.ZodRecord<z.ZodString, z.ZodString>;
7
8
  declare const fileExtension: (message: string) => z.ZodString;
9
+ declare const girLibrary: (message: string) => z.ZodString;
8
10
  declare const relativePathRecord: <Value extends z.ZodType>(keyMessage: string, value: Value, recordMessage: string) => z.ZodRecord<z.ZodString, Value>;
9
- export { fileExtension, flag, relativePathRecord, text, textList, textRecord, url };
11
+ export { fileExtension, flag, girLibrary, isGirLibrary, relativePathRecord, text, textList, textRecord, url };
10
12
  //# sourceMappingURL=schema-text.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"schema-text.d.ts","sourceRoot":"","sources":["../src/schema-text.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAaxB,QAAA,MAAM,IAAI,GAAI,SAAS,MAAM,KAAG,CAAC,CAAC,SAAoE,CAAC;AAEvG,QAAA,MAAM,QAAQ,GAAI,UAAU,MAAM,EAAE,aAAa,MAAM,KAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CACJ,CAAC;AAE7E,QAAA,MAAM,GAAG,GAAI,SAAS,MAAM,KAAG,CAAC,CAAC,MAAmC,CAAC;AACrE,QAAA,MAAM,IAAI,GAAI,SAAS,MAAM,KAAG,CAAC,CAAC,UAA2C,CAAC;AAE9E,QAAA,MAAM,UAAU,GAAI,cAAc,MAAM,EAAE,eAAe,MAAM,KAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,SAAS,CAChC,CAAC;AAEvE,QAAA,MAAM,aAAa,GAAI,SAAS,MAAM,KAAG,CAAC,CAAC,SACuD,CAAC;AAKnG,QAAA,MAAM,kBAAkB,GAAI,KAAK,SAAS,CAAC,CAAC,OAAO,EAC/C,YAAY,MAAM,EAClB,OAAO,KAAK,EACZ,eAAe,MAAM,KACtB,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,EAAE,KAAK,CAAwE,CAAC;AAE1G,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC"}
1
+ {"version":3,"file":"schema-text.d.ts","sourceRoot":"","sources":["../src/schema-text.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAMxB,QAAA,MAAM,YAAY,GAAI,OAAO,MAAM,KAAG,OAAkC,CAAC;AAUzE,QAAA,MAAM,IAAI,GAAI,SAAS,MAAM,KAAG,CAAC,CAAC,SAAoE,CAAC;AAEvG,QAAA,MAAM,QAAQ,GAAI,UAAU,MAAM,EAAE,aAAa,MAAM,KAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CACJ,CAAC;AAE7E,QAAA,MAAM,GAAG,GAAI,SAAS,MAAM,KAAG,CAAC,CAAC,MAAmC,CAAC;AACrE,QAAA,MAAM,IAAI,GAAI,SAAS,MAAM,KAAG,CAAC,CAAC,UAA2C,CAAC;AAE9E,QAAA,MAAM,UAAU,GAAI,cAAc,MAAM,EAAE,eAAe,MAAM,KAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,SAAS,CAChC,CAAC;AAEvE,QAAA,MAAM,aAAa,GAAI,SAAS,MAAM,KAAG,CAAC,CAAC,SACuD,CAAC;AAEnG,QAAA,MAAM,UAAU,GAAI,SAAS,MAAM,KAAG,CAAC,CAAC,SACmD,CAAC;AAK5F,QAAA,MAAM,kBAAkB,GAAI,KAAK,SAAS,CAAC,CAAC,OAAO,EAC/C,YAAY,MAAM,EAClB,OAAO,KAAK,EACZ,eAAe,MAAM,KACtB,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,EAAE,KAAK,CAAwE,CAAC;AAE1G,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,UAAU,EAAE,YAAY,EAAE,kBAAkB,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC"}
@@ -1,6 +1,8 @@
1
1
  import { z } from "zod";
2
2
  const FILE_EXTENSION = /^[^\s./\\*?[\]]+(?:\.[^\s./\\*?[\]]+)*$/;
3
+ const GIR_LIBRARY = /^[A-Za-z][A-Za-z0-9]*-\d+(?:\.\d+)*$/;
3
4
  const SEGMENT_SEPARATOR = /[/\\]/;
5
+ const isGirLibrary = (value) => GIR_LIBRARY.test(value);
4
6
  const isRelativePath = (value) => {
5
7
  if (value.length === 0 || value.startsWith("/") || value.includes("\\")) {
6
8
  return false;
@@ -13,7 +15,8 @@ const url = (message) => z.url({ error: message });
13
15
  const flag = (message) => z.boolean({ error: message });
14
16
  const textRecord = (valueMessage, recordMessage) => z.record(z.string(), text(valueMessage), { error: recordMessage });
15
17
  const fileExtension = (message) => z.string({ error: message }).refine((value) => FILE_EXTENSION.test(value), { error: message });
18
+ const girLibrary = (message) => z.string({ error: message }).refine((value) => isGirLibrary(value), { error: message });
16
19
  const relativePath = (message) => z.string({ error: message }).refine((value) => isRelativePath(value), { error: message });
17
20
  const relativePathRecord = (keyMessage, value, recordMessage) => z.record(relativePath(keyMessage), value, { error: recordMessage });
18
- export { fileExtension, flag, relativePathRecord, text, textList, textRecord, url };
21
+ export { fileExtension, flag, girLibrary, isGirLibrary, relativePathRecord, text, textList, textRecord, url };
19
22
  //# sourceMappingURL=schema-text.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"schema-text.js","sourceRoot":"","sources":["../src/schema-text.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,cAAc,GAAG,yCAAyC,CAAC;AACjE,MAAM,iBAAiB,GAAG,OAAO,CAAC;AAElC,MAAM,cAAc,GAAG,CAAC,KAAa,EAAW,EAAE;IAC9C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACtE,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,OAAO,KAAK,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,EAAE,IAAI,IAAI,KAAK,IAAI,CAAC,CAAC;AACxF,CAAC,CAAC;AAEF,MAAM,IAAI,GAAG,CAAC,OAAe,EAAe,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;AAEvG,MAAM,QAAQ,GAAG,CAAC,QAAgB,EAAE,WAAmB,EAA2B,EAAE,CAChF,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,uBAAuB,QAAQ,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;AAE7E,MAAM,GAAG,GAAG,CAAC,OAAe,EAAY,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;AACrE,MAAM,IAAI,GAAG,CAAC,OAAe,EAAgB,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;AAE9E,MAAM,UAAU,GAAG,CAAC,YAAoB,EAAE,aAAqB,EAAyC,EAAE,CACtG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,YAAY,CAAC,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC,CAAC;AAEvE,MAAM,aAAa,GAAG,CAAC,OAAe,EAAe,EAAE,CACnD,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;AAEnG,MAAM,YAAY,GAAG,CAAC,OAAe,EAAe,EAAE,CAClD,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;AAE9F,MAAM,kBAAkB,GAAG,CACvB,UAAkB,EAClB,KAAY,EACZ,aAAqB,EACU,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC,CAAC;AAE1G,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC","sourcesContent":["import { z } from \"zod\";\n\nconst FILE_EXTENSION = /^[^\\s./\\\\*?[\\]]+(?:\\.[^\\s./\\\\*?[\\]]+)*$/;\nconst SEGMENT_SEPARATOR = /[/\\\\]/;\n\nconst isRelativePath = (value: string): boolean => {\n if (value.length === 0 || value.startsWith(\"/\") || value.includes(\"\\\\\")) {\n return false;\n }\n\n return value.split(SEGMENT_SEPARATOR).every((part) => part !== \"\" && part !== \"..\");\n};\n\nconst text = (message: string): z.ZodString => z.string({ error: message }).min(1, { error: message });\n\nconst textList = (itemNoun: string, listMessage: string): z.ZodArray<z.ZodString> =>\n z.array(text(`must be a non-empty ${itemNoun}`), { error: listMessage });\n\nconst url = (message: string): z.ZodURL => z.url({ error: message });\nconst flag = (message: string): z.ZodBoolean => z.boolean({ error: message });\n\nconst textRecord = (valueMessage: string, recordMessage: string): z.ZodRecord<z.ZodString, z.ZodString> =>\n z.record(z.string(), text(valueMessage), { error: recordMessage });\n\nconst fileExtension = (message: string): z.ZodString =>\n z.string({ error: message }).refine((value) => FILE_EXTENSION.test(value), { error: message });\n\nconst relativePath = (message: string): z.ZodString =>\n z.string({ error: message }).refine((value) => isRelativePath(value), { error: message });\n\nconst relativePathRecord = <Value extends z.ZodType>(\n keyMessage: string,\n value: Value,\n recordMessage: string,\n): z.ZodRecord<z.ZodString, Value> => z.record(relativePath(keyMessage), value, { error: recordMessage });\n\nexport { fileExtension, flag, relativePathRecord, text, textList, textRecord, url };\n"]}
1
+ {"version":3,"file":"schema-text.js","sourceRoot":"","sources":["../src/schema-text.ts"],"names":[],"mappings":"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","sourcesContent":["import { z } from \"zod\";\n\nconst FILE_EXTENSION = /^[^\\s./\\\\*?[\\]]+(?:\\.[^\\s./\\\\*?[\\]]+)*$/;\nconst GIR_LIBRARY = /^[A-Za-z][A-Za-z0-9]*-\\d+(?:\\.\\d+)*$/;\nconst SEGMENT_SEPARATOR = /[/\\\\]/;\n\nconst isGirLibrary = (value: string): boolean => GIR_LIBRARY.test(value);\n\nconst isRelativePath = (value: string): boolean => {\n if (value.length === 0 || value.startsWith(\"/\") || value.includes(\"\\\\\")) {\n return false;\n }\n\n return value.split(SEGMENT_SEPARATOR).every((part) => part !== \"\" && part !== \"..\");\n};\n\nconst text = (message: string): z.ZodString => z.string({ error: message }).min(1, { error: message });\n\nconst textList = (itemNoun: string, listMessage: string): z.ZodArray<z.ZodString> =>\n z.array(text(`must be a non-empty ${itemNoun}`), { error: listMessage });\n\nconst url = (message: string): z.ZodURL => z.url({ error: message });\nconst flag = (message: string): z.ZodBoolean => z.boolean({ error: message });\n\nconst textRecord = (valueMessage: string, recordMessage: string): z.ZodRecord<z.ZodString, z.ZodString> =>\n z.record(z.string(), text(valueMessage), { error: recordMessage });\n\nconst fileExtension = (message: string): z.ZodString =>\n z.string({ error: message }).refine((value) => FILE_EXTENSION.test(value), { error: message });\n\nconst girLibrary = (message: string): z.ZodString =>\n z.string({ error: message }).refine((value) => isGirLibrary(value), { error: message });\n\nconst relativePath = (message: string): z.ZodString =>\n z.string({ error: message }).refine((value) => isRelativePath(value), { error: message });\n\nconst relativePathRecord = <Value extends z.ZodType>(\n keyMessage: string,\n value: Value,\n recordMessage: string,\n): z.ZodRecord<z.ZodString, Value> => z.record(relativePath(keyMessage), value, { error: recordMessage });\n\nexport { fileExtension, flag, girLibrary, isGirLibrary, relativePathRecord, text, textList, textRecord, url };\n"]}
@@ -1 +1 @@
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,QAAA,MAAM,kBAAkB,GAAI,QAAQ,cAAc,KAAG,MAoBpD,CAAC;AAEF,OAAO,EAAE,sBAAsB,EAAE,+BAA+B,EAAE,kBAAkB,EAAE,CAAC"}
1
+ {"version":3,"file":"virtual.d.ts","sourceRoot":"","sources":["../src/virtual.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAGlD,QAAA,MAAM,sBAAsB,wBAAwB,CAAC;AACrD,QAAA,MAAM,+BAA+B,0BAAgC,CAAC;AAMtE,QAAA,MAAM,kBAAkB,GAAI,QAAQ,cAAc,KAAG,MAqBpD,CAAC;AAEF,OAAO,EAAE,sBAAsB,EAAE,+BAA+B,EAAE,kBAAkB,EAAE,CAAC"}
package/dist/virtual.js CHANGED
@@ -1,3 +1,4 @@
1
+ import { resourceBasePath } from "./resource-base-path.js";
1
2
  const GTKX_CONFIG_VIRTUAL_ID = "virtual:gtkx-config";
2
3
  const RESOLVED_GTKX_CONFIG_VIRTUAL_ID = `\0${GTKX_CONFIG_VIRTUAL_ID}`;
3
4
  const METADATA_SPECIFIER = "@gtkx/jsx/metadata";
@@ -14,6 +15,7 @@ const renderConfigModule = (config) => {
14
15
  ...behaviorImports,
15
16
  `export * from ${JSON.stringify(METADATA_SPECIFIER)};`,
16
17
  `export const applicationId = ${JSON.stringify(config.applicationId)};`,
18
+ `export const resourceBasePath = ${JSON.stringify(resourceBasePath(config.applicationId))};`,
17
19
  `export const userEventSignals = ${JSON.stringify(config.userEventSignals)};`,
18
20
  config.elements === null
19
21
  ? `export const elements = ${lazyJson};`
@@ -1 +1 @@
1
- {"version":3,"file":"virtual.js","sourceRoot":"","sources":["../src/virtual.ts"],"names":[],"mappings":"AAEA,MAAM,sBAAsB,GAAG,qBAAqB,CAAC;AACrD,MAAM,+BAA+B,GAAG,KAAK,sBAAsB,EAAE,CAAC;AACtE,MAAM,kBAAkB,GAAG,oBAAoB,CAAC;AAEhD,MAAM,iBAAiB,GAAG,CAAC,YAAsB,EAAuC,EAAE,CACtF,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAE7E,MAAM,kBAAkB,GAAG,CAAC,MAAsB,EAAU,EAAE;IAC1D,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC;IAExE,MAAM,eAAe,GACjB,MAAM,CAAC,QAAQ,KAAK,IAAI;QACpB,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC;YACM,6DAA6D;YAC7D,kCAAkC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG;SACvE,CAAC;IAEd,OAAO;QACH,GAAG,eAAe;QAClB,iBAAiB,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,GAAG;QACtD,gCAAgC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG;QACvE,mCAAmC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,gBAAgB,CAAC,GAAG;QAC7E,MAAM,CAAC,QAAQ,KAAK,IAAI;YACpB,CAAC,CAAC,2BAA2B,QAAQ,GAAG;YACxC,CAAC,CAAC,mEAAmE,QAAQ,IAAI;KACxF,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjB,CAAC,CAAC;AAEF,OAAO,EAAE,sBAAsB,EAAE,+BAA+B,EAAE,kBAAkB,EAAE,CAAC","sourcesContent":["import type { ResolvedConfig } from \"./config.ts\";\n\nconst GTKX_CONFIG_VIRTUAL_ID = \"virtual:gtkx-config\";\nconst RESOLVED_GTKX_CONFIG_VIRTUAL_ID = `\\0${GTKX_CONFIG_VIRTUAL_ID}`;\nconst METADATA_SPECIFIER = \"@gtkx/jsx/metadata\";\n\nconst lazyElementConfig = (lazyElements: string[]): Record<string, { isLazy: boolean }> =>\n Object.fromEntries(lazyElements.map((type) => [type, { isLazy: true }]));\n\nconst renderConfigModule = (config: ResolvedConfig): string => {\n const lazyJson = JSON.stringify(lazyElementConfig(config.lazyElements));\n\n const behaviorImports =\n config.elements === null\n ? []\n : [\n \"import { mergeElementConfigs } from \\\"@gtkx/react/config\\\";\",\n `import __elementBehaviors from ${JSON.stringify(config.elements)};`,\n ];\n\n return [\n ...behaviorImports,\n `export * from ${JSON.stringify(METADATA_SPECIFIER)};`,\n `export const applicationId = ${JSON.stringify(config.applicationId)};`,\n `export const userEventSignals = ${JSON.stringify(config.userEventSignals)};`,\n config.elements === null\n ? `export const elements = ${lazyJson};`\n : `export const elements = mergeElementConfigs(__elementBehaviors, ${lazyJson});`,\n ].join(\"\\n\");\n};\n\nexport { GTKX_CONFIG_VIRTUAL_ID, RESOLVED_GTKX_CONFIG_VIRTUAL_ID, renderConfigModule };\n"]}
1
+ {"version":3,"file":"virtual.js","sourceRoot":"","sources":["../src/virtual.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAE3D,MAAM,sBAAsB,GAAG,qBAAqB,CAAC;AACrD,MAAM,+BAA+B,GAAG,KAAK,sBAAsB,EAAE,CAAC;AACtE,MAAM,kBAAkB,GAAG,oBAAoB,CAAC;AAEhD,MAAM,iBAAiB,GAAG,CAAC,YAAsB,EAAuC,EAAE,CACtF,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAE7E,MAAM,kBAAkB,GAAG,CAAC,MAAsB,EAAU,EAAE;IAC1D,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC;IAExE,MAAM,eAAe,GACjB,MAAM,CAAC,QAAQ,KAAK,IAAI;QACpB,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC;YACM,6DAA6D;YAC7D,kCAAkC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG;SACvE,CAAC;IAEd,OAAO;QACH,GAAG,eAAe;QAClB,iBAAiB,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,GAAG;QACtD,gCAAgC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG;QACvE,mCAAmC,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,GAAG;QAC5F,mCAAmC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,gBAAgB,CAAC,GAAG;QAC7E,MAAM,CAAC,QAAQ,KAAK,IAAI;YACpB,CAAC,CAAC,2BAA2B,QAAQ,GAAG;YACxC,CAAC,CAAC,mEAAmE,QAAQ,IAAI;KACxF,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjB,CAAC,CAAC;AAEF,OAAO,EAAE,sBAAsB,EAAE,+BAA+B,EAAE,kBAAkB,EAAE,CAAC","sourcesContent":["import type { ResolvedConfig } from \"./config.ts\";\nimport { resourceBasePath } from \"./resource-base-path.ts\";\n\nconst GTKX_CONFIG_VIRTUAL_ID = \"virtual:gtkx-config\";\nconst RESOLVED_GTKX_CONFIG_VIRTUAL_ID = `\\0${GTKX_CONFIG_VIRTUAL_ID}`;\nconst METADATA_SPECIFIER = \"@gtkx/jsx/metadata\";\n\nconst lazyElementConfig = (lazyElements: string[]): Record<string, { isLazy: boolean }> =>\n Object.fromEntries(lazyElements.map((type) => [type, { isLazy: true }]));\n\nconst renderConfigModule = (config: ResolvedConfig): string => {\n const lazyJson = JSON.stringify(lazyElementConfig(config.lazyElements));\n\n const behaviorImports =\n config.elements === null\n ? []\n : [\n \"import { mergeElementConfigs } from \\\"@gtkx/react/config\\\";\",\n `import __elementBehaviors from ${JSON.stringify(config.elements)};`,\n ];\n\n return [\n ...behaviorImports,\n `export * from ${JSON.stringify(METADATA_SPECIFIER)};`,\n `export const applicationId = ${JSON.stringify(config.applicationId)};`,\n `export const resourceBasePath = ${JSON.stringify(resourceBasePath(config.applicationId))};`,\n `export const userEventSignals = ${JSON.stringify(config.userEventSignals)};`,\n config.elements === null\n ? `export const elements = ${lazyJson};`\n : `export const elements = mergeElementConfigs(__elementBehaviors, ${lazyJson});`,\n ].join(\"\\n\");\n};\n\nexport { GTKX_CONFIG_VIRTUAL_ID, RESOLVED_GTKX_CONFIG_VIRTUAL_ID, renderConfigModule };\n"]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@gtkx/config",
3
- "version": "1.3.0",
4
- "description": "gtkx.config.ts schema, loader, and the element-prop mapping language shared across the GTKX toolchain",
3
+ "version": "1.5.0",
4
+ "description": "Config schema, loader, and element-prop mapping for the GTK toolchain.",
5
5
  "keywords": [
6
6
  "gtkx",
7
7
  "gtk",
@@ -62,7 +62,7 @@
62
62
  "defu": "^6.1.7",
63
63
  "vite": "^8.2.2",
64
64
  "zod": "^4.4.3",
65
- "@gtkx/utils": "1.3.0"
65
+ "@gtkx/utils": "1.5.0"
66
66
  },
67
67
  "scripts": {
68
68
  "release": "tsx ../../scripts/release-package.ts"
package/src/config.ts CHANGED
@@ -4,6 +4,7 @@ import { resolve } from "node:path";
4
4
  import { z } from "zod";
5
5
  import { configError, isRecord, rawIssue } from "./config-error.ts";
6
6
  import { deploySchema } from "./deploy.ts";
7
+ import { isGirLibrary, text } from "./schema-text.ts";
7
8
  import { resolveUserEventSignals } from "./user-event-signals.ts";
8
9
 
9
10
  /** Accepted `reactCompiler.compilationMode` values, choosing which functions the compiler processes. */
@@ -44,7 +45,10 @@ type ResolvedConfig = {
44
45
  applicationId: string;
45
46
  /** React Compiler options for the build, or `null` when the compiler is disabled. */
46
47
  reactCompiler: ResolvedReactCompilerOptions | null;
47
- /** Signal names, keyed by GLib type name, that stay suppressed while a React commit runs. */
48
+ /**
49
+ * Signal names, keyed by GLib type name, that stay suppressed while a React commit writes to a widget.
50
+ * `notify` stays suppressed only for the property being written.
51
+ */
48
52
  userEventSignals: Record<string, string[]>;
49
53
  /** Path of the module exporting per-element configs, or `null` when none is configured. */
50
54
  elements: string | null;
@@ -53,7 +57,6 @@ type ResolvedConfig = {
53
57
  };
54
58
 
55
59
  const LIBRARIES_WILDCARD = "*";
56
- const GIR_LIBRARY_PATTERN = /^[A-Za-z][A-Za-z0-9]*-\d+(?:\.\d+)*$/;
57
60
  const APPLICATION_ID_PATTERN = /^[A-Za-z_][A-Za-z0-9_-]*(\.[A-Za-z_][A-Za-z0-9_-]*)+$/;
58
61
  const APPLICATION_ID_MAX_LENGTH = 255;
59
62
  /** Compilation modes `babel-plugin-react-compiler` accepts. */
@@ -186,6 +189,7 @@ const futureSchema = z.object({
186
189
  v2ValueReturns: z.boolean({ error: "must be a boolean" }).optional(),
187
190
  v2FinishResults: z.boolean({ error: "must be a boolean" }).optional(),
188
191
  v2InoutReturns: z.boolean({ error: "must be a boolean" }).optional(),
192
+ v2ResourceImports: z.boolean({ error: "must be a boolean" }).optional(),
189
193
  });
190
194
 
191
195
  /** Schema every `gtkx.config.ts` is validated against, and the source of the {@link Config} type. */
@@ -198,6 +202,7 @@ const configSchema = z.object({
198
202
  codegen: z.boolean({ error: "must be a boolean" }).optional(),
199
203
  userEventSignals: userEventSignalsSchema.optional(),
200
204
  elements: elementsSchema.optional(),
205
+ applicationIcon: text("must be a path to an icon theme directory or a single icon file").optional(),
201
206
  deploy: deploySchema.optional(),
202
207
  });
203
208
 
@@ -208,7 +213,7 @@ const configSchema = z.object({
208
213
  const defineConfig: DefineConfig<Config> = createDefineConfig<Config>();
209
214
 
210
215
  const libraryEntryIssues = (value: unknown[], index: number, entry: unknown): ReturnType<typeof rawIssue>[] => {
211
- if (typeof entry === "string" && GIR_LIBRARY_PATTERN.test(entry)) {
216
+ if (typeof entry === "string" && isGirLibrary(entry)) {
212
217
  return [];
213
218
  }
214
219
 
package/src/deploy.ts CHANGED
@@ -1,5 +1,14 @@
1
1
  import { z } from "zod";
2
- import { fileExtension, flag, relativePathRecord, text, textList, textRecord, url } from "./schema-text.ts";
2
+ import {
3
+ fileExtension,
4
+ flag,
5
+ girLibrary,
6
+ relativePathRecord,
7
+ text,
8
+ textList,
9
+ textRecord,
10
+ url,
11
+ } from "./schema-text.ts";
3
12
 
4
13
  const APPIMAGE_COMPRESSIONS = ["gzip", "xz", "zstd"] as const;
5
14
  const DEB_COMPRESSIONS = ["gzip", "none", "xz", "zstd"] as const;
@@ -34,6 +43,10 @@ const HEX_COLOR_ERROR = "must be a #rrggbb color";
34
43
  const HEX_COLOR_PATTERN = /^#[\dA-Fa-f]{6}$/;
35
44
  const KEY_FILE_ERROR = "must be a path to a PGP key file";
36
45
  const KEY_ID_ERROR = "must be a PGP key id";
46
+ const MINIMUM_LIBRARY_VERSION_ERROR = "must be a version such as 4.18";
47
+ const MINIMUM_LIBRARY_VERSION_PATTERN = /^\d+(?:\.\d+)*$/;
48
+ const MINIMUM_LIBRARY_VERSIONS_ERROR = "must be a record of GIR library ids to a minimum version";
49
+ const LIBRARY_ID_ERROR = 'must be a GIR library identifier of the form "Name-Version", such as "Gtk-4.0"';
37
50
  const SCRIPT_ERROR = "must be a path to a shell script";
38
51
  const SOURCE_PATH_ERROR = "must be a source path";
39
52
  const SPDX_ERROR = "must be an SPDX license expression";
@@ -41,6 +54,14 @@ const URL_ERROR = "must be an absolute URL";
41
54
  const VERSION_ERROR = "must be a version string";
42
55
  const hexColorSchema = z.string({ error: HEX_COLOR_ERROR }).regex(HEX_COLOR_PATTERN, { error: HEX_COLOR_ERROR });
43
56
 
57
+ const minimumLibraryVersionSchema = z
58
+ .string({ error: MINIMUM_LIBRARY_VERSION_ERROR })
59
+ .regex(MINIMUM_LIBRARY_VERSION_PATTERN, { error: MINIMUM_LIBRARY_VERSION_ERROR });
60
+
61
+ const minimumLibraryVersionsSchema = z.record(girLibrary(LIBRARY_ID_ERROR), minimumLibraryVersionSchema, {
62
+ error: MINIMUM_LIBRARY_VERSIONS_ERROR,
63
+ });
64
+
44
65
  const relationsSchema = z.strictObject({
45
66
  deb: textList("Debian package relation", "must be an array of Debian package relations").optional(),
46
67
  rpm: textList("RPM package relation", "must be an array of RPM package relations").optional(),
@@ -231,7 +252,6 @@ const deploySchema = z.strictObject({
231
252
  error: "must be a record of AppStream url kinds to URLs",
232
253
  })
233
254
  .optional(),
234
- icons: text("must be a path to an icon theme directory or a single icon file").optional(),
235
255
  screenshots: z.array(screenshotSchema, { error: "must be an array of screenshots" }).optional(),
236
256
  screenshotBaseUrl: url("must be an absolute base URL").optional(),
237
257
  branding: brandingSchema.optional(),
@@ -257,6 +277,7 @@ const deploySchema = z.strictObject({
257
277
  extraFileEntrySchema,
258
278
  "must be a record of prefix-relative destinations to source paths or { source, mode } entries",
259
279
  ).optional(),
280
+ minimumLibraryVersions: minimumLibraryVersionsSchema.optional(),
260
281
  depends: relationsSchema.optional(),
261
282
  relations: extraRelationsSchema.optional(),
262
283
  scripts: scriptsSchema.optional(),
package/src/internal.ts CHANGED
@@ -8,3 +8,4 @@ export {
8
8
  resolveOmittedProps,
9
9
  } from "./config.ts";
10
10
  export { createConfigLoader } from "./loader.ts";
11
+ export { resourceBasePath } from "./resource-base-path.ts";
@@ -0,0 +1,3 @@
1
+ const resourceBasePath = (applicationId: string): string => `/${applicationId.replaceAll(".", "/")}`;
2
+
3
+ export { resourceBasePath };
@@ -1,8 +1,11 @@
1
1
  import { z } from "zod";
2
2
 
3
3
  const FILE_EXTENSION = /^[^\s./\\*?[\]]+(?:\.[^\s./\\*?[\]]+)*$/;
4
+ const GIR_LIBRARY = /^[A-Za-z][A-Za-z0-9]*-\d+(?:\.\d+)*$/;
4
5
  const SEGMENT_SEPARATOR = /[/\\]/;
5
6
 
7
+ const isGirLibrary = (value: string): boolean => GIR_LIBRARY.test(value);
8
+
6
9
  const isRelativePath = (value: string): boolean => {
7
10
  if (value.length === 0 || value.startsWith("/") || value.includes("\\")) {
8
11
  return false;
@@ -25,6 +28,9 @@ const textRecord = (valueMessage: string, recordMessage: string): z.ZodRecord<z.
25
28
  const fileExtension = (message: string): z.ZodString =>
26
29
  z.string({ error: message }).refine((value) => FILE_EXTENSION.test(value), { error: message });
27
30
 
31
+ const girLibrary = (message: string): z.ZodString =>
32
+ z.string({ error: message }).refine((value) => isGirLibrary(value), { error: message });
33
+
28
34
  const relativePath = (message: string): z.ZodString =>
29
35
  z.string({ error: message }).refine((value) => isRelativePath(value), { error: message });
30
36
 
@@ -34,4 +40,4 @@ const relativePathRecord = <Value extends z.ZodType>(
34
40
  recordMessage: string,
35
41
  ): z.ZodRecord<z.ZodString, Value> => z.record(relativePath(keyMessage), value, { error: recordMessage });
36
42
 
37
- export { fileExtension, flag, relativePathRecord, text, textList, textRecord, url };
43
+ export { fileExtension, flag, girLibrary, isGirLibrary, relativePathRecord, text, textList, textRecord, url };
package/src/virtual.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  import type { ResolvedConfig } from "./config.ts";
2
+ import { resourceBasePath } from "./resource-base-path.ts";
2
3
 
3
4
  const GTKX_CONFIG_VIRTUAL_ID = "virtual:gtkx-config";
4
5
  const RESOLVED_GTKX_CONFIG_VIRTUAL_ID = `\0${GTKX_CONFIG_VIRTUAL_ID}`;
@@ -22,6 +23,7 @@ const renderConfigModule = (config: ResolvedConfig): string => {
22
23
  ...behaviorImports,
23
24
  `export * from ${JSON.stringify(METADATA_SPECIFIER)};`,
24
25
  `export const applicationId = ${JSON.stringify(config.applicationId)};`,
26
+ `export const resourceBasePath = ${JSON.stringify(resourceBasePath(config.applicationId))};`,
25
27
  `export const userEventSignals = ${JSON.stringify(config.userEventSignals)};`,
26
28
  config.elements === null
27
29
  ? `export const elements = ${lazyJson};`