godot-export-presets 0.1.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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/parser.ts","../src/writer.ts","../src/config-file.ts","../src/export-presets/parser.ts","../src/export-presets/serializer.ts","../src/export-presets/file-io.ts","../src/export-presets/operations.ts","../src/export-presets/merge.ts","../src/export-presets/base-presets.ts"],"names":["c","peek","writeFile","readFile"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Parser for Godot config file format\n * Based on Godot's VariantParser implementation\n */\n\nexport class ParseError extends Error {\n constructor(message: string, public line: number) {\n super(`Parse error at line ${line}: ${message}`);\n this.name = \"ParseError\";\n }\n}\n\ntype TokenType =\n | \"STRING\"\n | \"NUMBER\"\n | \"BOOLEAN\"\n | \"IDENTIFIER\"\n | \"BRACKET_OPEN\"\n | \"BRACKET_CLOSE\"\n | \"PARENTHESIS_OPEN\"\n | \"PARENTHESIS_CLOSE\"\n | \"EQUAL\"\n | \"COMMA\"\n | \"SEMICOLON\"\n | \"HASH\"\n | \"EOF\";\n\ninterface Token {\n type: TokenType;\n value: string | number | boolean;\n line: number;\n}\n\nclass Stream {\n private pos = 0;\n private line = 1;\n private saved: string | null = null;\n\n constructor(private content: string) {}\n\n get_char(): string {\n if (this.saved !== null) {\n const c = this.saved;\n this.saved = null;\n return c;\n }\n if (this.pos >= this.content.length) {\n return \"\\0\";\n }\n const c = this.content[this.pos++];\n if (c === \"\\n\") {\n this.line++;\n }\n return c;\n }\n\n peek_char(): string {\n if (this.pos >= this.content.length) {\n return \"\\0\";\n }\n return this.content[this.pos];\n }\n\n save_char(c: string): void {\n this.saved = c;\n }\n\n is_eof(): boolean {\n return this.pos >= this.content.length && this.saved === null;\n }\n\n get_line(): number {\n return this.line;\n }\n}\n\nfunction is_whitespace(c: string): boolean {\n return c === \" \" || c === \"\\t\" || c === \"\\r\" || c === \"\\n\";\n}\n\nfunction is_digit(c: string): boolean {\n return c >= \"0\" && c <= \"9\";\n}\n\nfunction is_alpha(c: string): boolean {\n return (c >= \"a\" && c <= \"z\") || (c >= \"A\" && c <= \"Z\") || c === \"_\";\n}\n\nfunction is_alnum(c: string): boolean {\n return is_alpha(c) || is_digit(c);\n}\n\nfunction is_identifier_char(c: string): boolean {\n return is_alnum(c) || c === \"/\" || c === \".\" || c === \"_\" || c === \"-\";\n}\n\nfunction get_token(stream: Stream): Token {\n // Skip whitespace\n while (true) {\n const c = stream.peek_char();\n if (is_whitespace(c)) {\n stream.get_char();\n continue;\n }\n break;\n }\n\n const line = stream.get_line();\n const c = stream.get_char();\n\n if (c === \"\\0\") {\n return { type: \"EOF\", value: \"\", line };\n }\n\n switch (c) {\n case \"[\":\n return { type: \"BRACKET_OPEN\", value: c, line };\n case \"]\":\n return { type: \"BRACKET_CLOSE\", value: c, line };\n case \"(\":\n return { type: \"PARENTHESIS_OPEN\", value: c, line };\n case \")\":\n return { type: \"PARENTHESIS_CLOSE\", value: c, line };\n case \"=\":\n return { type: \"EQUAL\", value: c, line };\n case \",\":\n return { type: \"COMMA\", value: c, line };\n case \";\":\n // Comment - skip to end of line\n while (true) {\n const ch = stream.get_char();\n if (ch === \"\\n\" || ch === \"\\0\") {\n break;\n }\n }\n return get_token(stream); // Get next token after comment\n case \"#\":\n // Comment - skip to end of line\n while (true) {\n const ch = stream.get_char();\n if (ch === \"\\n\" || ch === \"\\0\") {\n break;\n }\n }\n return get_token(stream); // Get next token after comment\n case '\"': {\n // String - supports multi-line strings\n let str = \"\";\n let escaped = false;\n while (true) {\n const ch = stream.get_char();\n if (ch === \"\\0\") {\n throw new ParseError(\"Unterminated string\", line);\n }\n if (escaped) {\n if (ch === \"n\") {\n str += \"\\n\";\n } else if (ch === \"t\") {\n str += \"\\t\";\n } else if (ch === \"r\") {\n str += \"\\r\";\n } else if (ch === \"\\\\\") {\n str += \"\\\\\";\n } else if (ch === '\"') {\n str += '\"';\n } else {\n str += ch;\n }\n escaped = false;\n } else if (ch === \"\\\\\") {\n escaped = true;\n } else if (ch === '\"') {\n // Check if this is the end of the string\n // Look ahead to see if there's whitespace, newline, EOF, or comment\n const peek = stream.peek_char();\n if (\n peek === \"\\0\" ||\n peek === \"\\n\" ||\n peek === \"\\r\" ||\n peek === \" \" ||\n peek === \"\\t\" ||\n peek === \";\" ||\n peek === \"#\"\n ) {\n break;\n }\n // If followed by '=', it might be end of key (like \"a=b\"=value)\n // But if it's in the middle, it's part of the string\n // For now, assume it's the end if followed by whitespace/comment/newline\n break;\n } else {\n str += ch;\n }\n }\n return { type: \"STRING\", value: str, line };\n }\n default: {\n // Number, boolean, or identifier\n const peek = stream.peek_char();\n if (\n is_digit(c) ||\n (c === \"-\" && is_digit(peek)) ||\n (c === \"+\" && is_digit(peek)) ||\n (c === \".\" && is_digit(peek))\n ) {\n // Number - only start if we have a digit or sign followed by digit\n let numStr = c;\n let hasDot = c === \".\";\n while (true) {\n const nextPeek = stream.peek_char();\n if (is_digit(nextPeek) || nextPeek === \".\") {\n if (nextPeek === \".\") {\n if (hasDot) break;\n hasDot = true;\n }\n numStr += stream.get_char();\n } else {\n break;\n }\n }\n const num = parseFloat(numStr);\n if (isNaN(num)) {\n throw new ParseError(`Invalid number: ${numStr}`, line);\n }\n return { type: \"NUMBER\", value: num, line };\n } else if (is_alpha(c) || c === \"/\") {\n // Identifier or boolean\n let ident = c;\n while (true) {\n const peek = stream.peek_char();\n if (is_identifier_char(peek)) {\n ident += stream.get_char();\n } else {\n break;\n }\n }\n if (ident === \"true\") {\n return { type: \"BOOLEAN\", value: true, line };\n } else if (ident === \"false\") {\n return { type: \"BOOLEAN\", value: false, line };\n }\n return { type: \"IDENTIFIER\", value: ident, line };\n } else {\n throw new ParseError(`Unexpected character: ${c}`, line);\n }\n }\n }\n}\n\nfunction parse_construct_args(stream: Stream): number[] {\n const args: number[] = [];\n let token = get_token(stream);\n\n if (token.type !== \"PARENTHESIS_OPEN\") {\n throw new ParseError(\"Expected '(' in constructor\", token.line);\n }\n\n let first = true;\n while (true) {\n if (!first) {\n token = get_token(stream);\n if (token.type === \"COMMA\") {\n // Continue\n } else if (token.type === \"PARENTHESIS_CLOSE\") {\n break;\n } else {\n throw new ParseError(\"Expected ',' or ')' in constructor\", token.line);\n }\n }\n\n token = get_token(stream);\n if (first && token.type === \"PARENTHESIS_CLOSE\") {\n break;\n }\n\n if (token.type === \"NUMBER\") {\n args.push(token.value as number);\n } else if (token.type === \"IDENTIFIER\") {\n // Try to parse as number (e.g., \"inf\", \"nan\")\n const ident = token.value as string;\n if (ident === \"inf\" || ident === \"Infinity\") {\n args.push(Infinity);\n } else if (ident === \"-inf\" || ident === \"-Infinity\") {\n args.push(-Infinity);\n } else if (ident === \"nan\" || ident === \"NaN\") {\n args.push(NaN);\n } else {\n throw new ParseError(`Expected number in constructor, got: ${ident}`, token.line);\n }\n } else {\n throw new ParseError(\"Expected number in constructor\", token.line);\n }\n first = false;\n }\n\n return args;\n}\n\nfunction parse_value(stream: Stream): unknown {\n const token = get_token(stream);\n\n switch (token.type) {\n case \"STRING\":\n return token.value;\n case \"NUMBER\":\n return token.value;\n case \"BOOLEAN\":\n return token.value;\n case \"IDENTIFIER\": {\n const ident = token.value as string;\n if (ident === \"Color\") {\n const args = parse_construct_args(stream);\n if (args.length !== 4) {\n throw new ParseError(\"Expected 4 arguments for Color constructor\", token.line);\n }\n return { r: args[0], g: args[1], b: args[2], a: args[3] };\n } else if (ident === \"Vector2\") {\n const args = parse_construct_args(stream);\n if (args.length !== 2) {\n throw new ParseError(\"Expected 2 arguments for Vector2 constructor\", token.line);\n }\n return { x: args[0], y: args[1] };\n } else {\n throw new ParseError(`Unknown identifier: ${ident}`, token.line);\n }\n }\n default:\n throw new ParseError(`Unexpected token type: ${token.type}`, token.line);\n }\n}\n\nexport function parse_config(content: string): {\n values: Map<string, Map<string, unknown>>;\n error?: Error;\n} {\n const values = new Map<string, Map<string, unknown>>();\n const stream = new Stream(content);\n let currentSection = \"\";\n\n try {\n while (true) {\n // Skip whitespace\n while (true) {\n const peek = stream.peek_char();\n if (is_whitespace(peek)) {\n stream.get_char();\n continue;\n }\n break;\n }\n\n const token = get_token(stream);\n if (token.type === \"EOF\") {\n break;\n }\n\n if (token.type === \"BRACKET_OPEN\") {\n // Parse section name\n const sectionToken = get_token(stream);\n if (sectionToken.type !== \"IDENTIFIER\" && sectionToken.type !== \"STRING\") {\n throw new ParseError(\"Expected section name\", sectionToken.line);\n }\n let sectionName = String(sectionToken.value);\n const closeToken = get_token(stream);\n if (closeToken.type === \"BRACKET_CLOSE\") {\n // Handle escaped brackets\n sectionName = sectionName.replace(/\\\\\\]/g, \"]\");\n currentSection = sectionName;\n if (!values.has(currentSection)) {\n values.set(currentSection, new Map());\n }\n } else {\n throw new ParseError(\"Expected ']' after section name\", closeToken.line);\n }\n } else if (token.type === \"IDENTIFIER\" || token.type === \"STRING\") {\n // Key-value pair - key can be identifier or quoted string\n const key = String(token.value);\n const equalToken = get_token(stream);\n if (equalToken.type !== \"EQUAL\") {\n throw new ParseError(\"Expected '=' after key\", equalToken.line);\n }\n const value = parse_value(stream);\n\n if (!values.has(currentSection)) {\n values.set(currentSection, new Map());\n }\n values.get(currentSection)!.set(key, value);\n } else if (token.type === \"BRACKET_CLOSE\") {\n throw new ParseError(\"Unexpected ']'\", token.line);\n }\n }\n } catch (error) {\n if (error instanceof ParseError) {\n return { values, error };\n }\n throw error;\n }\n\n return { values };\n}\n\n","/**\n * Writer for Godot config file format\n * Serializes values back to config format matching Godot's output\n */\n\nimport type { Color, Vector2 } from \"./types.js\";\n\nfunction needs_quotes(str: string): boolean {\n // Quote if contains special characters, spaces, or Unicode characters\n // Based on Godot's property_name_encode() logic:\n // Quote if contains: =, \", ;, [, ], or characters < 33 or > 126\n if (str.length === 0) return true;\n \n for (let i = 0; i < str.length; i++) {\n const code = str.charCodeAt(i);\n if (\n code === 61 || // =\n code === 34 || // \"\n code === 59 || // ;\n code === 91 || // [\n code === 93 || // ]\n code < 33 || // control characters and space\n code > 126 // extended ASCII and Unicode\n ) {\n return true;\n }\n }\n \n return false;\n}\n\nfunction encode_key(key: string): string {\n if (needs_quotes(key)) {\n // Escape quotes and backslashes\n const escaped = key.replace(/\\\\/g, \"\\\\\\\\\").replace(/\"/g, '\\\\\"');\n return `\"${escaped}\"`;\n }\n return key;\n}\n\nfunction escape_string(str: string): string {\n // Don't escape newlines - preserve them for multi-line strings\n // Godot preserves newlines in strings when writing\n return str\n .replace(/\\\\/g, \"\\\\\\\\\")\n .replace(/\"/g, '\\\\\"');\n}\n\nfunction serialize_value(value: unknown): string {\n if (value === null || value === undefined) {\n return \"null\";\n }\n\n if (typeof value === \"string\") {\n return `\"${escape_string(value)}\"`;\n }\n\n if (typeof value === \"number\") {\n if (isNaN(value)) {\n return \"nan\";\n }\n if (!isFinite(value)) {\n return value > 0 ? \"inf\" : \"-inf\";\n }\n return String(value);\n }\n\n if (typeof value === \"boolean\") {\n return value ? \"true\" : \"false\";\n }\n\n // Check for Color object\n if (\n typeof value === \"object\" &&\n value !== null &&\n \"r\" in value &&\n \"g\" in value &&\n \"b\" in value &&\n \"a\" in value &&\n typeof (value as Color).r === \"number\" &&\n typeof (value as Color).g === \"number\" &&\n typeof (value as Color).b === \"number\" &&\n typeof (value as Color).a === \"number\"\n ) {\n const color = value as Color;\n return `Color(${color.r}, ${color.g}, ${color.b}, ${color.a})`;\n }\n\n // Check for Vector2 object\n if (\n typeof value === \"object\" &&\n value !== null &&\n \"x\" in value &&\n \"y\" in value &&\n typeof (value as Vector2).x === \"number\" &&\n typeof (value as Vector2).y === \"number\"\n ) {\n const vec = value as Vector2;\n return `Vector2(${vec.x}, ${vec.y})`;\n }\n\n // Fallback: try to stringify\n return String(value);\n}\n\nexport function serialize_config(\n values: Map<string, Map<string, unknown>>\n): string {\n const sections: string[] = [];\n let first = true;\n\n for (const [section, keys] of values.entries()) {\n if (!first) {\n sections.push(\"\");\n }\n first = false;\n\n if (section) {\n // Escape brackets in section name\n const escapedSection = section.replace(/\\]/g, \"\\\\]\");\n sections.push(`[${escapedSection}]`);\n sections.push(\"\");\n }\n\n for (const [key, value] of keys.entries()) {\n const encodedKey = encode_key(key);\n const serializedValue = serialize_value(value);\n sections.push(`${encodedKey}=${serializedValue}`);\n }\n }\n\n const result = sections.join(\"\\n\");\n // Godot adds a trailing newline after the last line\n return result + \"\\n\";\n}\n\n","/**\n * ConfigFile class for reading and writing Godot config files\n * Based on Godot's ConfigFile implementation\n */\n\nimport { parse_config } from \"./parser.js\";\nimport { serialize_config } from \"./writer.js\";\nimport { writeFile } from \"node:fs/promises\";\n\nexport class ConfigFile {\n private values = new Map<string, Map<string, unknown>>();\n\n /**\n * Parse config file content\n * @param content Config file content as string\n * @returns Error if parsing failed, undefined on success\n */\n parse(content: string): Error | undefined {\n const { values, error } = parse_config(content);\n if (error) {\n return error;\n }\n this.values = values;\n return undefined;\n }\n\n /**\n * Get a value from the config file\n * @param section Section name (empty string for section-less keys)\n * @param key Key name\n * @param defaultValue Optional default value if key doesn't exist\n * @returns The value or default value\n */\n get_value(section: string, key: string, defaultValue?: unknown): unknown {\n const sectionMap = this.values.get(section);\n if (!sectionMap) {\n if (defaultValue !== undefined) {\n return defaultValue;\n }\n throw new Error(\n `Section \"${section}\" not found and no default value provided`\n );\n }\n if (!sectionMap.has(key)) {\n if (defaultValue !== undefined) {\n return defaultValue;\n }\n throw new Error(\n `Key \"${key}\" not found in section \"${section}\" and no default value provided`\n );\n }\n return sectionMap.get(key);\n }\n\n /**\n * Set a value in the config file\n * @param section Section name (empty string for section-less keys)\n * @param key Key name\n * @param value Value to set\n */\n set_value(section: string, key: string, value: unknown): void {\n if (!this.values.has(section)) {\n this.values.set(section, new Map());\n }\n this.values.get(section)!.set(key, value);\n }\n\n /**\n * Save config file to disk\n * @param path File path to save to\n */\n async save(path: string): Promise<void> {\n const content = serialize_config(this.values);\n await writeFile(path, content, \"utf-8\");\n }\n\n /**\n * Check if a section exists\n * @param section Section name\n * @returns True if section exists\n */\n has_section(section: string): boolean {\n return this.values.has(section);\n }\n\n /**\n * Check if a key exists in a section\n * @param section Section name\n * @param key Key name\n * @returns True if key exists in section\n */\n has_section_key(section: string, key: string): boolean {\n const sectionMap = this.values.get(section);\n if (!sectionMap) {\n return false;\n }\n return sectionMap.has(key);\n }\n\n /**\n * Clear all values\n */\n clear(): void {\n this.values.clear();\n }\n\n /**\n * Get all section names\n */\n get_sections(): string[] {\n return Array.from(this.values.keys());\n }\n\n /**\n * Get all keys in a section\n */\n get_section_keys(section: string): string[] {\n const sectionMap = this.values.get(section);\n if (!sectionMap) {\n return [];\n }\n return Array.from(sectionMap.keys());\n }\n\n /**\n * Encode config to text format\n */\n encode_to_text(): string {\n return serialize_config(this.values);\n }\n}\n\n","/**\n * Parser for export_presets.cfg file format\n */\n\nimport { ConfigFile } from \"../config-file.js\";\nimport type { ExportPreset, ExportPresetsFile, PresetOptions } from \"./types.js\";\n\nexport function parseExportPresets(content: string): ExportPresetsFile {\n const configFile = new ConfigFile();\n const error = configFile.parse(content);\n\n if (error) {\n throw error;\n }\n\n const presets: ExportPreset[] = [];\n const sections = configFile.get_sections();\n\n // Find all preset sections (preset.0, preset.1, etc.)\n const presetSections = sections\n .filter((s) => s.startsWith(\"preset.\") && !s.includes(\".options\"))\n .sort((a, b) => {\n const aNum = parseInt(a.split(\".\")[1] || \"0\", 10);\n const bNum = parseInt(b.split(\".\")[1] || \"0\", 10);\n return aNum - bNum;\n });\n\n for (const presetSection of presetSections) {\n const preset: ExportPreset = {\n name: \"\",\n platform: \"\",\n runnable: false,\n };\n\n // Get all keys from the preset section\n const keys = configFile.get_section_keys(presetSection);\n for (const key of keys) {\n const value = configFile.get_value(presetSection, key);\n if (key === \"options\") {\n // This shouldn't happen, but handle it\n continue;\n }\n (preset as Record<string, unknown>)[key] = value;\n }\n\n // Get options from preset.X.options section\n const optionsSection = `${presetSection}.options`;\n if (configFile.has_section(optionsSection)) {\n const options: PresetOptions = {};\n const optionKeys = configFile.get_section_keys(optionsSection);\n for (const key of optionKeys) {\n options[key] = configFile.get_value(optionsSection, key);\n }\n preset.options = options;\n }\n\n presets.push(preset);\n }\n\n return { presets };\n}\n\n","/**\n * Serializer for export_presets.cfg file format\n */\n\nimport { ConfigFile } from \"../config-file.js\";\nimport type { ExportPreset, ExportPresetsFile } from \"./types.js\";\n\nexport function serializeExportPresets(presets: ExportPresetsFile): string {\n const configFile = new ConfigFile();\n\n for (let i = 0; i < presets.presets.length; i++) {\n const preset = presets.presets[i];\n const presetSection = `preset.${i}`;\n const optionsSection = `${presetSection}.options`;\n\n // Write preset properties (excluding options)\n for (const [key, value] of Object.entries(preset)) {\n if (key === \"options\") {\n continue;\n }\n configFile.set_value(presetSection, key, value);\n }\n\n // Write options\n if (preset.options) {\n for (const [key, value] of Object.entries(preset.options)) {\n configFile.set_value(optionsSection, key, value);\n }\n }\n }\n\n // Use ConfigFile's internal serialization\n return configFile.encode_to_text();\n}\n\n","/**\n * File I/O operations for export presets\n */\n\nimport { readFile, writeFile } from \"node:fs/promises\";\nimport { parseExportPresets } from \"./parser.js\";\nimport { serializeExportPresets } from \"./serializer.js\";\nimport type { ExportPresetsFile } from \"./types.js\";\n\nexport async function loadExportPresets(\n filePath: string\n): Promise<ExportPresetsFile> {\n try {\n const content = await readFile(filePath, \"utf-8\");\n return parseExportPresets(content);\n } catch (error: unknown) {\n if (\n error &&\n typeof error === \"object\" &&\n \"code\" in error &&\n error.code === \"ENOENT\"\n ) {\n throw new Error(`File not found: ${filePath}`);\n }\n throw error;\n }\n}\n\nexport async function saveExportPresets(\n filePath: string,\n presets: ExportPresetsFile\n): Promise<void> {\n const content = serializeExportPresets(presets);\n await writeFile(filePath, content, \"utf-8\");\n}\n\n","/**\n * Preset operations: get, find, set, remove\n */\n\nimport type {\n ExportPreset,\n ExportPresetsFile,\n FindPresetCriteria,\n} from \"./types.js\";\n\nexport function getPreset(\n presets: ExportPresetsFile,\n index: number\n): ExportPreset | undefined {\n if (index < 0 || index >= presets.presets.length) {\n return undefined;\n }\n return presets.presets[index];\n}\n\nexport function findPreset(\n presets: ExportPresetsFile,\n criteria: FindPresetCriteria\n): ExportPreset | undefined {\n if (criteria.index !== undefined) {\n return getPreset(presets, criteria.index);\n }\n\n for (const preset of presets.presets) {\n if (criteria.platform) {\n const presetPlatform = String(preset.platform || \"\").trim().toUpperCase();\n const searchPlatform = criteria.platform.trim().toUpperCase();\n if (presetPlatform === searchPlatform) {\n return preset;\n }\n }\n\n if (criteria.name) {\n const presetName = String(preset.name || \"\").trim().toUpperCase();\n const searchName = criteria.name.trim().toUpperCase();\n if (presetName === searchName) {\n return preset;\n }\n }\n }\n\n return undefined;\n}\n\nexport function setPreset(\n presets: ExportPresetsFile,\n preset: ExportPreset,\n index?: number\n): ExportPresetsFile {\n const newPresets = [...presets.presets];\n\n if (index !== undefined && index >= 0 && index < newPresets.length) {\n // Update existing preset\n newPresets[index] = preset;\n } else {\n // Add new preset\n newPresets.push(preset);\n }\n\n return { presets: newPresets };\n}\n\nexport function removePreset(\n presets: ExportPresetsFile,\n index: number\n): ExportPresetsFile {\n if (index < 0 || index >= presets.presets.length) {\n return presets;\n }\n\n const newPresets = [...presets.presets];\n newPresets.splice(index, 1);\n return { presets: newPresets };\n}\n\n","/**\n * Merging functions for presets and options\n */\n\nimport type { ExportPreset, PresetOptions } from \"./types.js\";\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return (\n typeof value === \"object\" &&\n value !== null &&\n !Array.isArray(value) &&\n Object.prototype.toString.call(value) === \"[object Object]\"\n );\n}\n\nfunction deepMerge(\n target: Record<string, unknown>,\n source: Record<string, unknown>\n): Record<string, unknown> {\n const result = { ...target };\n\n for (const [key, sourceValue] of Object.entries(source)) {\n const targetValue = result[key];\n\n if (\n isPlainObject(targetValue) &&\n isPlainObject(sourceValue) &&\n key !== \"options\"\n ) {\n // Deep merge objects (except options which we handle separately)\n result[key] = deepMerge(\n targetValue as Record<string, unknown>,\n sourceValue as Record<string, unknown>\n );\n } else {\n // Override with source value\n result[key] = sourceValue;\n }\n }\n\n return result;\n}\n\nexport function mergePresets(...presets: ExportPreset[]): ExportPreset {\n if (presets.length === 0) {\n throw new Error(\"At least one preset required for merging\");\n }\n\n if (presets.length === 1) {\n return {\n ...presets[0],\n options: presets[0].options ? { ...presets[0].options } : undefined,\n };\n }\n\n // Start with first preset (deep copy)\n let merged: ExportPreset = {\n ...presets[0],\n options: presets[0].options ? { ...presets[0].options } : undefined,\n };\n\n // Merge each subsequent preset\n for (let i = 1; i < presets.length; i++) {\n const current = presets[i];\n\n // Deep merge the main preset properties (excluding options)\n const currentWithoutOptions: Record<string, unknown> = { ...current };\n delete currentWithoutOptions.options;\n\n merged = deepMerge(\n merged as Record<string, unknown>,\n currentWithoutOptions\n ) as ExportPreset;\n\n // Merge options separately (always merge, even if one is undefined)\n merged.options = mergeOptions(\n merged.options || {},\n current.options || {}\n );\n }\n\n return merged;\n}\n\nexport function mergeOptions(...options: PresetOptions[]): PresetOptions {\n if (options.length === 0) {\n return {};\n }\n\n if (options.length === 1) {\n return { ...options[0] };\n }\n\n // Simple shallow merge for options (they're flat key-value pairs)\n const merged: PresetOptions = {};\n for (const opts of options) {\n Object.assign(merged, opts);\n }\n\n return merged;\n}\n\n","/**\n * Base preset definitions for common platforms and Godot versions\n */\n\nimport type { ExportPreset } from \"./types.js\";\n\nexport type GodotMajorVersion = 3 | 4;\nexport type Platform = \"Android\" | \"iOS\";\n\n/**\n * Extract major version number from version string\n * @param version Version string (e.g., \"4.3.2\", \"3.5.1\")\n * @returns Major version number (3 or 4)\n */\nexport function getMajorVersion(version: string): GodotMajorVersion {\n const match = version.match(/^(\\d+)/);\n if (!match) {\n throw new Error(`Invalid version string: ${version}`);\n }\n const major = parseInt(match[1], 10);\n if (major !== 3 && major !== 4) {\n throw new Error(`Unsupported Godot version: ${major}`);\n }\n return major as GodotMajorVersion;\n}\n\n/**\n * Check if a base preset exists for the given platform and version\n */\nexport function hasBasePreset(\n platform: Platform,\n version: GodotMajorVersion\n): boolean {\n return (\n (platform === \"Android\" && (version === 3 || version === 4)) ||\n (platform === \"iOS\" && (version === 3 || version === 4))\n );\n}\n\n/**\n * Get base preset for platform and version\n */\nexport function getBasePreset(\n platform: Platform,\n version: GodotMajorVersion\n): ExportPreset {\n switch (platform) {\n case \"Android\":\n return version === 3\n ? getBasePreset_Android_v3()\n : getBasePreset_Android_v4();\n case \"iOS\":\n return version === 3\n ? getBasePreset_iOS_v3()\n : getBasePreset_iOS_v4();\n default:\n throw new Error(\n `Unsupported platform: ${platform}. Supported platforms: Android, iOS`\n );\n }\n}\n\n/**\n * Base preset for Android (Godot 3.x)\n */\nexport function getBasePreset_Android_v3(): ExportPreset {\n return {\n name: \"Android\",\n platform: \"Android\",\n runnable: true,\n advanced_options: false,\n dedicated_server: false,\n custom_features: \"\",\n export_filter: \"all_resources\",\n include_filter: \"*.json\",\n exclude_filter: \"\",\n export_path: \"game.aab\",\n encryption_include_filters: \"\",\n encryption_exclude_filters: \"\",\n encrypt_pck: false,\n encrypt_directory: false,\n script_export_mode: 1,\n options: {\n \"custom_build/use_custom_build\": true,\n \"custom_build/export_format\": 1,\n \"custom_build/min_sdk\": \"\",\n \"custom_build/target_sdk\": \"\",\n \"architectures/armeabi-v7a\": false,\n \"architectures/arm64-v8a\": true,\n \"architectures/x86\": false,\n \"architectures/x86_64\": false,\n \"one_click_deploy/clear_previous_install\": true,\n \"package/signed\": true,\n \"package/classify_as_game\": true,\n \"package/retain_data_on_uninstall\": false,\n \"package/exclude_from_recents\": false,\n \"launcher_icons/main_192x192\": \"\",\n \"launcher_icons/adaptive_foreground_432x432\": \"\",\n \"launcher_icons/adaptive_background_432x432\": \"\",\n \"graphics/opengl_debug\": false,\n \"xr_features/xr_mode\": 0,\n \"xr_features/hand_tracking\": 0,\n \"xr_features/hand_tracking_frequency\": 0,\n \"xr_features/passthrough\": 0,\n \"screen/immersive_mode\": true,\n \"screen/support_small\": true,\n \"screen/support_normal\": true,\n \"screen/support_large\": true,\n \"screen/support_xlarge\": true,\n \"user_data_backup/allow\": true,\n \"command_line/extra_args\": \"\",\n \"apk_expansion/enable\": false,\n \"apk_expansion/salt\": \"\",\n \"apk_expansion/public_key\": \"\",\n \"permissions/custom_permissions\": \"PoolStringArray( )\",\n \"permissions/access_checkin_properties\": false,\n \"permissions/access_coarse_location\": false,\n \"permissions/access_fine_location\": false,\n \"permissions/access_location_extra_commands\": false,\n \"permissions/access_mock_location\": false,\n \"permissions/access_network_state\": false,\n \"permissions/access_surface_flinger\": false,\n \"permissions/access_wifi_state\": false,\n \"permissions/account_manager\": false,\n \"permissions/add_voicemail\": false,\n \"permissions/authenticate_accounts\": false,\n \"permissions/battery_stats\": false,\n \"permissions/bind_accessibility_service\": false,\n \"permissions/bind_appwidget\": false,\n \"permissions/bind_device_admin\": false,\n \"permissions/bind_input_method\": false,\n \"permissions/bind_nfc_service\": false,\n \"permissions/bind_notification_listener_service\": false,\n \"permissions/bind_print_service\": false,\n \"permissions/bind_remoteviews\": false,\n \"permissions/bind_text_service\": false,\n \"permissions/bind_vpn_service\": false,\n \"permissions/bind_wallpaper\": false,\n \"permissions/bluetooth\": false,\n \"permissions/bluetooth_admin\": false,\n \"permissions/bluetooth_privileged\": false,\n \"permissions/brick\": false,\n \"permissions/broadcast_package_removed\": false,\n \"permissions/broadcast_sms\": false,\n \"permissions/broadcast_sticky\": false,\n \"permissions/broadcast_wap_push\": false,\n \"permissions/call_phone\": false,\n \"permissions/call_privileged\": false,\n \"permissions/camera\": false,\n \"permissions/capture_audio_output\": false,\n \"permissions/capture_secure_video_output\": false,\n \"permissions/capture_video_output\": false,\n \"permissions/change_component_enabled_state\": false,\n \"permissions/change_configuration\": false,\n \"permissions/change_network_state\": false,\n \"permissions/change_wifi_multicast_state\": false,\n \"permissions/change_wifi_state\": false,\n \"permissions/clear_app_cache\": false,\n \"permissions/clear_app_user_data\": false,\n \"permissions/control_location_updates\": false,\n \"permissions/delete_cache_files\": false,\n \"permissions/delete_packages\": false,\n \"permissions/device_power\": false,\n \"permissions/diagnostic\": false,\n \"permissions/disable_keyguard\": false,\n \"permissions/dump\": false,\n \"permissions/expand_status_bar\": false,\n \"permissions/factory_test\": false,\n \"permissions/flashlight\": false,\n \"permissions/force_back\": false,\n \"permissions/get_accounts\": false,\n \"permissions/get_package_size\": false,\n \"permissions/get_tasks\": false,\n \"permissions/get_top_activity_info\": false,\n \"permissions/global_search\": false,\n \"permissions/hardware_test\": false,\n \"permissions/inject_events\": false,\n \"permissions/install_location_provider\": false,\n \"permissions/install_packages\": false,\n \"permissions/install_shortcut\": false,\n \"permissions/internal_system_window\": false,\n \"permissions/internet\": false,\n \"permissions/kill_background_processes\": false,\n \"permissions/location_hardware\": false,\n \"permissions/manage_accounts\": false,\n \"permissions/manage_app_tokens\": false,\n \"permissions/manage_documents\": false,\n \"permissions/manage_external_storage\": false,\n \"permissions/master_clear\": false,\n \"permissions/media_content_control\": false,\n \"permissions/modify_audio_settings\": false,\n \"permissions/modify_phone_state\": false,\n \"permissions/mount_format_filesystems\": false,\n \"permissions/mount_unmount_filesystems\": false,\n \"permissions/nfc\": false,\n \"permissions/persistent_activity\": false,\n \"permissions/process_outgoing_calls\": false,\n \"permissions/read_calendar\": false,\n \"permissions/read_call_log\": false,\n \"permissions/read_contacts\": false,\n \"permissions/read_external_storage\": false,\n \"permissions/read_frame_buffer\": false,\n \"permissions/read_history_bookmarks\": false,\n \"permissions/read_input_state\": false,\n \"permissions/read_logs\": false,\n \"permissions/read_phone_state\": false,\n \"permissions/read_profile\": false,\n \"permissions/read_sms\": false,\n \"permissions/read_social_stream\": false,\n \"permissions/read_sync_settings\": false,\n \"permissions/read_sync_stats\": false,\n \"permissions/read_user_dictionary\": false,\n \"permissions/reboot\": false,\n \"permissions/receive_boot_completed\": false,\n \"permissions/receive_mms\": false,\n \"permissions/receive_sms\": false,\n \"permissions/receive_wap_push\": false,\n \"permissions/record_audio\": false,\n \"permissions/reorder_tasks\": false,\n \"permissions/restart_packages\": false,\n \"permissions/send_respond_via_message\": false,\n \"permissions/send_sms\": false,\n \"permissions/set_activity_watcher\": false,\n \"permissions/set_alarm\": false,\n \"permissions/set_always_finish\": false,\n \"permissions/set_animation_scale\": false,\n \"permissions/set_debug_app\": false,\n \"permissions/set_orientation\": false,\n \"permissions/set_pointer_speed\": false,\n \"permissions/set_preferred_applications\": false,\n \"permissions/set_process_limit\": false,\n \"permissions/set_time\": false,\n \"permissions/set_time_zone\": false,\n \"permissions/set_wallpaper\": false,\n \"permissions/set_wallpaper_hints\": false,\n \"permissions/signal_persistent_processes\": false,\n \"permissions/status_bar\": false,\n \"permissions/subscribed_feeds_read\": false,\n \"permissions/subscribed_feeds_write\": false,\n \"permissions/system_alert_window\": false,\n \"permissions/transmit_ir\": false,\n \"permissions/uninstall_shortcut\": false,\n \"permissions/update_device_stats\": false,\n \"permissions/use_credentials\": false,\n \"permissions/use_sip\": false,\n \"permissions/vibrate\": false,\n \"permissions/wake_lock\": false,\n \"permissions/write_apn_settings\": false,\n \"permissions/write_calendar\": false,\n \"permissions/write_call_log\": false,\n \"permissions/write_contacts\": false,\n \"permissions/write_external_storage\": false,\n \"permissions/write_gservices\": false,\n \"permissions/write_history_bookmarks\": false,\n \"permissions/write_profile\": false,\n \"permissions/write_secure_settings\": false,\n \"permissions/write_settings\": false,\n \"permissions/write_sms\": false,\n \"permissions/write_social_stream\": false,\n \"permissions/write_sync_settings\": false,\n \"permissions/write_user_dictionary\": false,\n },\n };\n}\n\n/**\n * Base preset for Android (Godot 4.x)\n */\nexport function getBasePreset_Android_v4(): ExportPreset {\n return {\n name: \"Android\",\n platform: \"Android\",\n runnable: true,\n advanced_options: false,\n dedicated_server: false,\n custom_features: \"\",\n export_filter: \"all_resources\",\n include_filter: \"\",\n exclude_filter: \"\",\n export_path: \"game.aab\",\n encryption_include_filters: \"\",\n encryption_exclude_filters: \"\",\n encrypt_pck: false,\n encrypt_directory: false,\n script_export_mode: 2,\n options: {\n \"gradle_build/use_gradle_build\": true,\n \"gradle_build/export_format\": 1,\n \"gradle_build/compress_native_libraries\": false,\n \"gradle_build/min_sdk\": \"\",\n \"gradle_build/target_sdk\": \"\",\n \"architectures/armeabi-v7a\": false,\n \"architectures/arm64-v8a\": true,\n \"architectures/x86\": false,\n \"architectures/x86_64\": false,\n \"package/signed\": true,\n \"package/app_category\": 2,\n \"package/retain_data_on_uninstall\": false,\n \"package/exclude_from_recents\": false,\n \"package/show_in_android_tv\": false,\n \"package/show_in_app_library\": true,\n \"package/show_as_launcher_app\": false,\n \"launcher_icons/main_192x192\": \"\",\n \"launcher_icons/adaptive_foreground_432x432\": \"\",\n \"launcher_icons/adaptive_background_432x432\": \"\",\n \"graphics/opengl_debug\": false,\n \"xr_features/xr_mode\": 0,\n \"screen/immersive_mode\": true,\n \"screen/support_small\": true,\n \"screen/support_normal\": true,\n \"screen/support_large\": true,\n \"screen/support_xlarge\": true,\n \"user_data_backup/allow\": false,\n \"command_line/extra_args\": \"\",\n \"apk_expansion/enable\": false,\n \"apk_expansion/SALT\": \"\",\n \"apk_expansion/public_key\": \"\",\n \"permissions/custom_permissions\": \"PackedStringArray()\",\n \"permissions/access_checkin_properties\": false,\n \"permissions/access_coarse_location\": false,\n \"permissions/access_fine_location\": false,\n \"permissions/access_location_extra_commands\": false,\n \"permissions/access_mock_location\": false,\n \"permissions/access_network_state\": false,\n \"permissions/access_surface_flinger\": false,\n \"permissions/access_wifi_state\": false,\n \"permissions/account_manager\": false,\n \"permissions/add_voicemail\": false,\n \"permissions/authenticate_accounts\": false,\n \"permissions/battery_stats\": false,\n \"permissions/bind_accessibility_service\": false,\n \"permissions/bind_appwidget\": false,\n \"permissions/bind_device_admin\": false,\n \"permissions/bind_input_method\": false,\n \"permissions/bind_nfc_service\": false,\n \"permissions/bind_notification_listener_service\": false,\n \"permissions/bind_print_service\": false,\n \"permissions/bind_remoteviews\": false,\n \"permissions/bind_text_service\": false,\n \"permissions/bind_vpn_service\": false,\n \"permissions/bind_wallpaper\": false,\n \"permissions/bluetooth\": false,\n \"permissions/bluetooth_admin\": false,\n \"permissions/bluetooth_privileged\": false,\n \"permissions/brick\": false,\n \"permissions/broadcast_package_removed\": false,\n \"permissions/broadcast_sms\": false,\n \"permissions/broadcast_sticky\": false,\n \"permissions/broadcast_wap_push\": false,\n \"permissions/call_phone\": false,\n \"permissions/call_privileged\": false,\n \"permissions/camera\": false,\n \"permissions/capture_audio_output\": false,\n \"permissions/capture_secure_video_output\": false,\n \"permissions/capture_video_output\": false,\n \"permissions/change_component_enabled_state\": false,\n \"permissions/change_configuration\": false,\n \"permissions/change_network_state\": false,\n \"permissions/change_wifi_multicast_state\": false,\n \"permissions/change_wifi_state\": false,\n \"permissions/clear_app_cache\": false,\n \"permissions/clear_app_user_data\": false,\n \"permissions/control_location_updates\": false,\n \"permissions/delete_cache_files\": false,\n \"permissions/delete_packages\": false,\n \"permissions/device_power\": false,\n \"permissions/diagnostic\": false,\n \"permissions/disable_keyguard\": false,\n \"permissions/dump\": false,\n \"permissions/expand_status_bar\": false,\n \"permissions/factory_test\": false,\n \"permissions/flashlight\": false,\n \"permissions/force_back\": false,\n \"permissions/get_accounts\": false,\n \"permissions/get_package_size\": false,\n \"permissions/get_tasks\": false,\n \"permissions/get_top_activity_info\": false,\n \"permissions/global_search\": false,\n \"permissions/hardware_test\": false,\n \"permissions/inject_events\": false,\n \"permissions/install_location_provider\": false,\n \"permissions/install_packages\": false,\n \"permissions/install_shortcut\": false,\n \"permissions/internal_system_window\": false,\n \"permissions/internet\": false,\n \"permissions/kill_background_processes\": false,\n \"permissions/location_hardware\": false,\n \"permissions/manage_accounts\": false,\n \"permissions/manage_app_tokens\": false,\n \"permissions/manage_documents\": false,\n \"permissions/manage_external_storage\": false,\n \"permissions/master_clear\": false,\n \"permissions/media_content_control\": false,\n \"permissions/modify_audio_settings\": false,\n \"permissions/modify_phone_state\": false,\n \"permissions/mount_format_filesystems\": false,\n \"permissions/mount_unmount_filesystems\": false,\n \"permissions/nfc\": false,\n \"permissions/persistent_activity\": false,\n \"permissions/process_outgoing_calls\": false,\n \"permissions/read_calendar\": false,\n \"permissions/read_call_log\": false,\n \"permissions/read_contacts\": false,\n \"permissions/read_external_storage\": false,\n \"permissions/read_frame_buffer\": false,\n \"permissions/read_history_bookmarks\": false,\n \"permissions/read_input_state\": false,\n \"permissions/read_logs\": false,\n \"permissions/read_phone_state\": false,\n \"permissions/read_profile\": false,\n \"permissions/read_sms\": false,\n \"permissions/read_social_stream\": false,\n \"permissions/read_sync_settings\": false,\n \"permissions/read_sync_stats\": false,\n \"permissions/read_user_dictionary\": false,\n \"permissions/reboot\": false,\n \"permissions/receive_boot_completed\": false,\n \"permissions/receive_mms\": false,\n \"permissions/receive_sms\": false,\n \"permissions/receive_wap_push\": false,\n \"permissions/record_audio\": false,\n \"permissions/reorder_tasks\": false,\n \"permissions/restart_packages\": false,\n \"permissions/send_respond_via_message\": false,\n \"permissions/send_sms\": false,\n \"permissions/set_activity_watcher\": false,\n \"permissions/set_alarm\": false,\n \"permissions/set_always_finish\": false,\n \"permissions/set_animation_scale\": false,\n \"permissions/set_debug_app\": false,\n \"permissions/set_orientation\": false,\n \"permissions/set_pointer_speed\": false,\n \"permissions/set_preferred_applications\": false,\n \"permissions/set_process_limit\": false,\n \"permissions/set_time\": false,\n \"permissions/set_time_zone\": false,\n \"permissions/set_wallpaper\": false,\n \"permissions/set_wallpaper_hints\": false,\n \"permissions/signal_persistent_processes\": false,\n \"permissions/status_bar\": false,\n \"permissions/subscribed_feeds_read\": false,\n \"permissions/subscribed_feeds_write\": false,\n \"permissions/system_alert_window\": false,\n \"permissions/transmit_ir\": false,\n \"permissions/uninstall_shortcut\": false,\n \"permissions/update_device_stats\": false,\n \"permissions/use_credentials\": false,\n \"permissions/use_sip\": false,\n \"permissions/vibrate\": false,\n \"permissions/wake_lock\": false,\n \"permissions/write_apn_settings\": false,\n \"permissions/write_calendar\": false,\n \"permissions/write_call_log\": false,\n \"permissions/write_contacts\": false,\n \"permissions/write_external_storage\": false,\n \"permissions/write_gservices\": false,\n \"permissions/write_history_bookmarks\": false,\n \"permissions/write_profile\": false,\n \"permissions/write_secure_settings\": false,\n \"permissions/write_settings\": false,\n \"permissions/write_sms\": false,\n \"permissions/write_social_stream\": false,\n \"permissions/write_sync_settings\": false,\n \"permissions/write_user_dictionary\": false,\n },\n };\n}\n\n/**\n * Base preset for iOS (Godot 3.x)\n */\nexport function getBasePreset_iOS_v3(): ExportPreset {\n return {\n name: \"iOS\",\n platform: \"iOS\",\n runnable: true,\n custom_features: \"\",\n export_filter: \"all_resources\",\n include_filter: \"\",\n exclude_filter: \"\",\n export_path: \"\",\n script_export_mode: 1,\n script_encryption_key: \"\",\n options: {\n \"custom_template/debug\": \"\",\n \"architectures/armv7\": false,\n \"architectures/arm64\": true,\n \"application/copyright\": \"\",\n \"application/icon_interpolation\": 4,\n \"application/info\": \"Made with Godot Engine\",\n \"application/provisioning_profile_uuid_debug\": \"\",\n \"application/provisioning_profile_uuid_release\": \"\",\n \"application/signature\": \"\",\n \"application/targeted_device_family\": 2,\n \"capabilities/access_wifi\": false,\n \"capabilities/push_notifications\": false,\n \"user_data/accessible_from_files_app\": false,\n \"user_data/accessible_from_itunes_sharing\": false,\n \"privacy/camera_usage_description\": \"\",\n \"privacy/microphone_usage_description\": \"\",\n \"privacy/photolibrary_usage_description\": \"\",\n \"privacy/file_timestamp_access_reasons\": 3,\n \"privacy/system_boot_time_access_reasons\": 1,\n \"privacy/disk_space_access_reasons\": 3,\n \"privacy/active_keyboard_access_reasons\": 0,\n \"privacy/user_defaults_access_reasons\": 0,\n \"privacy/tracking_enabled\": false,\n \"privacy/tracking_domains\": \"PoolStringArray( )\",\n \"privacy/collected_data/name/collected\": false,\n \"privacy/collected_data/name/linked_to_user\": false,\n \"privacy/collected_data/name/used_for_tracking\": false,\n \"privacy/collected_data/name/collection_purposes\": 0,\n \"privacy/collected_data/email_address/collected\": false,\n \"privacy/collected_data/email_address/linked_to_user\": false,\n \"privacy/collected_data/email_address/used_for_tracking\": false,\n \"privacy/collected_data/email_address/collection_purposes\": 0,\n \"privacy/collected_data/phone_number/collected\": false,\n \"privacy/collected_data/phone_number/linked_to_user\": false,\n \"privacy/collected_data/phone_number/used_for_tracking\": false,\n \"privacy/collected_data/phone_number/collection_purposes\": 0,\n \"privacy/collected_data/physical_address/collected\": false,\n \"privacy/collected_data/physical_address/linked_to_user\": false,\n \"privacy/collected_data/physical_address/used_for_tracking\": false,\n \"privacy/collected_data/physical_address/collection_purposes\": 0,\n \"privacy/collected_data/other_contact_info/collected\": false,\n \"privacy/collected_data/other_contact_info/linked_to_user\": false,\n \"privacy/collected_data/other_contact_info/used_for_tracking\": false,\n \"privacy/collected_data/other_contact_info/collection_purposes\": 0,\n \"privacy/collected_data/health/collected\": false,\n \"privacy/collected_data/health/linked_to_user\": false,\n \"privacy/collected_data/health/used_for_tracking\": false,\n \"privacy/collected_data/health/collection_purposes\": 0,\n \"privacy/collected_data/fitness/collected\": false,\n \"privacy/collected_data/fitness/linked_to_user\": false,\n \"privacy/collected_data/fitness/used_for_tracking\": false,\n \"privacy/collected_data/fitness/collection_purposes\": 0,\n \"privacy/collected_data/payment_info/collected\": false,\n \"privacy/collected_data/payment_info/linked_to_user\": false,\n \"privacy/collected_data/payment_info/used_for_tracking\": false,\n \"privacy/collected_data/payment_info/collection_purposes\": 0,\n \"privacy/collected_data/credit_info/collected\": false,\n \"privacy/collected_data/credit_info/linked_to_user\": false,\n \"privacy/collected_data/credit_info/used_for_tracking\": false,\n \"privacy/collected_data/credit_info/collection_purposes\": 0,\n \"privacy/collected_data/other_financial_info/collected\": false,\n \"privacy/collected_data/other_financial_info/linked_to_user\": false,\n \"privacy/collected_data/other_financial_info/used_for_tracking\": false,\n \"privacy/collected_data/other_financial_info/collection_purposes\": 0,\n \"privacy/collected_data/precise_location/collected\": false,\n \"privacy/collected_data/precise_location/linked_to_user\": false,\n \"privacy/collected_data/precise_location/used_for_tracking\": false,\n \"privacy/collected_data/precise_location/collection_purposes\": 0,\n \"privacy/collected_data/coarse_location/collected\": false,\n \"privacy/collected_data/coarse_location/linked_to_user\": false,\n \"privacy/collected_data/coarse_location/used_for_tracking\": false,\n \"privacy/collected_data/coarse_location/collection_purposes\": 0,\n \"privacy/collected_data/sensitive_info/collected\": false,\n \"privacy/collected_data/sensitive_info/linked_to_user\": false,\n \"privacy/collected_data/sensitive_info/used_for_tracking\": false,\n \"privacy/collected_data/sensitive_info/collection_purposes\": 0,\n \"privacy/collected_data/contacts/collected\": false,\n \"privacy/collected_data/contacts/linked_to_user\": false,\n \"privacy/collected_data/contacts/used_for_tracking\": false,\n \"privacy/collected_data/contacts/collection_purposes\": 0,\n \"privacy/collected_data/emails_or_text_messages/collected\": false,\n \"privacy/collected_data/emails_or_text_messages/linked_to_user\": false,\n \"privacy/collected_data/emails_or_text_messages/used_for_tracking\": false,\n \"privacy/collected_data/emails_or_text_messages/collection_purposes\": 0,\n \"privacy/collected_data/photos_or_videos/collected\": false,\n \"privacy/collected_data/photos_or_videos/linked_to_user\": false,\n \"privacy/collected_data/photos_or_videos/used_for_tracking\": false,\n \"privacy/collected_data/photos_or_videos/collection_purposes\": 0,\n \"privacy/collected_data/audio_data/collected\": false,\n \"privacy/collected_data/audio_data/linked_to_user\": false,\n \"privacy/collected_data/audio_data/used_for_tracking\": false,\n \"privacy/collected_data/audio_data/collection_purposes\": 0,\n \"privacy/collected_data/gameplay_content/collected\": false,\n \"privacy/collected_data/gameplay_content/linked_to_user\": false,\n \"privacy/collected_data/gameplay_content/used_for_tracking\": false,\n \"privacy/collected_data/gameplay_content/collection_purposes\": 0,\n \"privacy/collected_data/customer_support/collected\": false,\n \"privacy/collected_data/customer_support/linked_to_user\": false,\n \"privacy/collected_data/customer_support/used_for_tracking\": false,\n \"privacy/collected_data/customer_support/collection_purposes\": 0,\n \"privacy/collected_data/other_user_content/collected\": false,\n \"privacy/collected_data/other_user_content/linked_to_user\": false,\n \"privacy/collected_data/other_user_content/used_for_tracking\": false,\n \"privacy/collected_data/other_user_content/collection_purposes\": 0,\n \"privacy/collected_data/browsing_history/collected\": false,\n \"privacy/collected_data/browsing_history/linked_to_user\": false,\n \"privacy/collected_data/browsing_history/used_for_tracking\": false,\n \"privacy/collected_data/browsing_history/collection_purposes\": 0,\n \"privacy/collected_data/search_hhistory/collected\": false,\n \"privacy/collected_data/search_hhistory/linked_to_user\": false,\n \"privacy/collected_data/search_hhistory/used_for_tracking\": false,\n \"privacy/collected_data/search_hhistory/collection_purposes\": 0,\n \"privacy/collected_data/user_id/collected\": false,\n \"privacy/collected_data/user_id/linked_to_user\": false,\n \"privacy/collected_data/user_id/used_for_tracking\": false,\n \"privacy/collected_data/user_id/collection_purposes\": 0,\n \"privacy/collected_data/device_id/collected\": false,\n \"privacy/collected_data/device_id/linked_to_user\": false,\n \"privacy/collected_data/device_id/used_for_tracking\": false,\n \"privacy/collected_data/device_id/collection_purposes\": 0,\n \"privacy/collected_data/purchase_history/collected\": false,\n \"privacy/collected_data/purchase_history/linked_to_user\": false,\n \"privacy/collected_data/purchase_history/used_for_tracking\": false,\n \"privacy/collected_data/purchase_history/collection_purposes\": 0,\n \"privacy/collected_data/product_interaction/collected\": false,\n \"privacy/collected_data/product_interaction/linked_to_user\": false,\n \"privacy/collected_data/product_interaction/used_for_tracking\": false,\n \"privacy/collected_data/product_interaction/collection_purposes\": 0,\n \"privacy/collected_data/advertising_data/collected\": false,\n \"privacy/collected_data/advertising_data/linked_to_user\": false,\n \"privacy/collected_data/advertising_data/used_for_tracking\": false,\n \"privacy/collected_data/advertising_data/collection_purposes\": 0,\n \"privacy/collected_data/other_usage_data/collected\": false,\n \"privacy/collected_data/other_usage_data/linked_to_user\": false,\n \"privacy/collected_data/other_usage_data/used_for_tracking\": false,\n \"privacy/collected_data/other_usage_data/collection_purposes\": 0,\n \"privacy/collected_data/crash_data/collected\": false,\n \"privacy/collected_data/crash_data/linked_to_user\": false,\n \"privacy/collected_data/crash_data/used_for_tracking\": false,\n \"privacy/collected_data/crash_data/collection_purposes\": 0,\n \"privacy/collected_data/performance_data/collected\": false,\n \"privacy/collected_data/performance_data/linked_to_user\": false,\n \"privacy/collected_data/performance_data/used_for_tracking\": false,\n \"privacy/collected_data/performance_data/collection_purposes\": 0,\n \"privacy/collected_data/other_diagnostic_data/collected\": false,\n \"privacy/collected_data/other_diagnostic_data/linked_to_user\": false,\n \"privacy/collected_data/other_diagnostic_data/used_for_tracking\": false,\n \"privacy/collected_data/other_diagnostic_data/collection_purposes\": 0,\n \"privacy/collected_data/environment_scanning/collected\": false,\n \"privacy/collected_data/environment_scanning/linked_to_user\": false,\n \"privacy/collected_data/environment_scanning/used_for_tracking\": false,\n \"privacy/collected_data/environment_scanning/collection_purposes\": 0,\n \"privacy/collected_data/hands/collected\": false,\n \"privacy/collected_data/hands/linked_to_user\": false,\n \"privacy/collected_data/hands/used_for_tracking\": false,\n \"privacy/collected_data/hands/collection_purposes\": 0,\n \"privacy/collected_data/head/collected\": false,\n \"privacy/collected_data/head/linked_to_user\": false,\n \"privacy/collected_data/head/used_for_tracking\": false,\n \"privacy/collected_data/head/collection_purposes\": 0,\n \"privacy/collected_data/other_data_types/collected\": false,\n \"privacy/collected_data/other_data_types/linked_to_user\": false,\n \"privacy/collected_data/other_data_types/used_for_tracking\": false,\n \"privacy/collected_data/other_data_types/collection_purposes\": 0,\n \"icons/app_store_1024x1024\": \"\",\n \"icons/ipad_152x152\": \"\",\n \"icons/ipad_167x167\": \"\",\n \"icons/ipad_76x76\": \"\",\n \"icons/iphone_120x120\": \"\",\n \"icons/iphone_180x180\": \"\",\n \"icons/spotlight_40x40\": \"\",\n \"icons/spotlight_80x80\": \"\",\n \"storyboard/image_scale_mode\": 0,\n \"storyboard/custom_image@2x\": \"\",\n \"storyboard/custom_image@3x\": \"\",\n \"storyboard/use_custom_bg_color\": false,\n \"storyboard/custom_bg_color\": \"Color( 0, 0, 0, 1 )\",\n },\n };\n}\n\n/**\n * Base preset for iOS (Godot 4.x)\n */\nexport function getBasePreset_iOS_v4(): ExportPreset {\n return {\n name: \"iOS\",\n platform: \"iOS\",\n runnable: true,\n dedicated_server: false,\n custom_features: \"\",\n export_filter: \"all_resources\",\n include_filter: \"\",\n exclude_filter: \"\",\n export_path: \"output\",\n encryption_include_filters: \"\",\n encryption_exclude_filters: \"\",\n encrypt_pck: false,\n encrypt_directory: false,\n options: {\n \"custom_template/debug\": \"\",\n \"custom_template/release\": \"\",\n \"architectures/arm64\": true,\n \"application/signature\": \"\",\n \"application/icon_interpolation\": \"4\",\n \"application/launch_screens_interpolation\": \"4\",\n \"application/export_project_only\": true,\n \"capabilities/access_wifi\": false,\n \"capabilities/push_notifications\": false,\n \"user_data/accessible_from_files_app\": false,\n \"user_data/accessible_from_itunes_sharing\": false,\n \"privacy/camera_usage_description\": \"\",\n \"privacy/camera_usage_description_localized\": \"{}\",\n \"privacy/microphone_usage_description\": \"\",\n \"privacy/microphone_usage_description_localized\": \"{}\",\n \"privacy/photolibrary_usage_description\": \"\",\n \"privacy/photolibrary_usage_description_localized\": \"{}\",\n \"icons/app_store_1024x1024\": \"\",\n \"icons/ipad_152x152\": \"\",\n \"icons/ipad_167x167\": \"\",\n \"icons/ipad_76x76\": \"\",\n \"icons/iphone_120x120\": \"\",\n \"icons/iphone_180x180\": \"\",\n \"icons/notification_40x40\": \"\",\n \"icons/notification_60x60\": \"\",\n \"icons/settings_58x58\": \"\",\n \"icons/settings_87x87\": \"\",\n \"icons/spotlight_40x40\": \"\",\n \"icons/spotlight_80x80\": \"\",\n \"storyboard/use_launch_screen_storyboard\": true,\n \"storyboard/image_scale_mode\": \"0\",\n \"storyboard/custom_image@2x\": \"\",\n \"storyboard/custom_image@3x\": \"\",\n \"storyboard/use_custom_bg_color\": false,\n \"storyboard/custom_bg_color\": \"Color(0, 0, 0, 1)\",\n \"landscape_launch_screens/iphone_2436x1125\": \"\",\n \"landscape_launch_screens/iphone_2208x1242\": \"\",\n \"landscape_launch_screens/ipad_1024x768\": \"\",\n \"landscape_launch_screens/ipad_2048x1536\": \"\",\n \"portrait_launch_screens/iphone_640x960\": \"\",\n \"portrait_launch_screens/iphone_640x1136\": \"\",\n \"portrait_launch_screens/iphone_750x1334\": \"\",\n \"portrait_launch_screens/iphone_1125x2436\": \"\",\n \"portrait_launch_screens/ipad_768x1024\": \"\",\n \"portrait_launch_screens/ipad_1536x2048\": \"\",\n \"portrait_launch_screens/iphone_1242x2208\": \"\",\n },\n };\n}\n\n"]}
@@ -0,0 +1,181 @@
1
+ /**
2
+ * ConfigFile class for reading and writing Godot config files
3
+ * Based on Godot's ConfigFile implementation
4
+ */
5
+ declare class ConfigFile {
6
+ private values;
7
+ /**
8
+ * Parse config file content
9
+ * @param content Config file content as string
10
+ * @returns Error if parsing failed, undefined on success
11
+ */
12
+ parse(content: string): Error | undefined;
13
+ /**
14
+ * Get a value from the config file
15
+ * @param section Section name (empty string for section-less keys)
16
+ * @param key Key name
17
+ * @param defaultValue Optional default value if key doesn't exist
18
+ * @returns The value or default value
19
+ */
20
+ get_value(section: string, key: string, defaultValue?: unknown): unknown;
21
+ /**
22
+ * Set a value in the config file
23
+ * @param section Section name (empty string for section-less keys)
24
+ * @param key Key name
25
+ * @param value Value to set
26
+ */
27
+ set_value(section: string, key: string, value: unknown): void;
28
+ /**
29
+ * Save config file to disk
30
+ * @param path File path to save to
31
+ */
32
+ save(path: string): Promise<void>;
33
+ /**
34
+ * Check if a section exists
35
+ * @param section Section name
36
+ * @returns True if section exists
37
+ */
38
+ has_section(section: string): boolean;
39
+ /**
40
+ * Check if a key exists in a section
41
+ * @param section Section name
42
+ * @param key Key name
43
+ * @returns True if key exists in section
44
+ */
45
+ has_section_key(section: string, key: string): boolean;
46
+ /**
47
+ * Clear all values
48
+ */
49
+ clear(): void;
50
+ /**
51
+ * Get all section names
52
+ */
53
+ get_sections(): string[];
54
+ /**
55
+ * Get all keys in a section
56
+ */
57
+ get_section_keys(section: string): string[];
58
+ /**
59
+ * Encode config to text format
60
+ */
61
+ encode_to_text(): string;
62
+ }
63
+
64
+ /**
65
+ * Type definitions for Godot config file types
66
+ */
67
+ interface Color {
68
+ r: number;
69
+ g: number;
70
+ b: number;
71
+ a: number;
72
+ }
73
+ interface Vector2 {
74
+ x: number;
75
+ y: number;
76
+ }
77
+
78
+ /**
79
+ * Types for Godot export presets
80
+ */
81
+ interface ExportPreset {
82
+ name: string;
83
+ platform: string;
84
+ runnable: boolean;
85
+ dedicated_server?: boolean;
86
+ custom_features?: string;
87
+ export_filter?: string;
88
+ include_filter?: string;
89
+ exclude_filter?: string;
90
+ export_path?: string;
91
+ encryption_include_filters?: string;
92
+ encryption_exclude_filters?: string;
93
+ encrypt_pck?: boolean;
94
+ encrypt_directory?: boolean;
95
+ script_export_mode?: number;
96
+ [key: string]: unknown;
97
+ options?: PresetOptions;
98
+ }
99
+ type PresetOptions = Record<string, unknown>;
100
+ interface ExportPresetsFile {
101
+ presets: ExportPreset[];
102
+ }
103
+ interface FindPresetCriteria {
104
+ name?: string;
105
+ platform?: string;
106
+ index?: number;
107
+ }
108
+
109
+ /**
110
+ * Parser for export_presets.cfg file format
111
+ */
112
+
113
+ declare function parseExportPresets(content: string): ExportPresetsFile;
114
+
115
+ /**
116
+ * Serializer for export_presets.cfg file format
117
+ */
118
+
119
+ declare function serializeExportPresets(presets: ExportPresetsFile): string;
120
+
121
+ /**
122
+ * File I/O operations for export presets
123
+ */
124
+
125
+ declare function loadExportPresets(filePath: string): Promise<ExportPresetsFile>;
126
+ declare function saveExportPresets(filePath: string, presets: ExportPresetsFile): Promise<void>;
127
+
128
+ /**
129
+ * Preset operations: get, find, set, remove
130
+ */
131
+
132
+ declare function getPreset(presets: ExportPresetsFile, index: number): ExportPreset | undefined;
133
+ declare function findPreset(presets: ExportPresetsFile, criteria: FindPresetCriteria): ExportPreset | undefined;
134
+ declare function setPreset(presets: ExportPresetsFile, preset: ExportPreset, index?: number): ExportPresetsFile;
135
+ declare function removePreset(presets: ExportPresetsFile, index: number): ExportPresetsFile;
136
+
137
+ /**
138
+ * Merging functions for presets and options
139
+ */
140
+
141
+ declare function mergePresets(...presets: ExportPreset[]): ExportPreset;
142
+ declare function mergeOptions(...options: PresetOptions[]): PresetOptions;
143
+
144
+ /**
145
+ * Base preset definitions for common platforms and Godot versions
146
+ */
147
+
148
+ type GodotMajorVersion = 3 | 4;
149
+ type Platform = "Android" | "iOS";
150
+ /**
151
+ * Extract major version number from version string
152
+ * @param version Version string (e.g., "4.3.2", "3.5.1")
153
+ * @returns Major version number (3 or 4)
154
+ */
155
+ declare function getMajorVersion(version: string): GodotMajorVersion;
156
+ /**
157
+ * Check if a base preset exists for the given platform and version
158
+ */
159
+ declare function hasBasePreset(platform: Platform, version: GodotMajorVersion): boolean;
160
+ /**
161
+ * Get base preset for platform and version
162
+ */
163
+ declare function getBasePreset(platform: Platform, version: GodotMajorVersion): ExportPreset;
164
+ /**
165
+ * Base preset for Android (Godot 3.x)
166
+ */
167
+ declare function getBasePreset_Android_v3(): ExportPreset;
168
+ /**
169
+ * Base preset for Android (Godot 4.x)
170
+ */
171
+ declare function getBasePreset_Android_v4(): ExportPreset;
172
+ /**
173
+ * Base preset for iOS (Godot 3.x)
174
+ */
175
+ declare function getBasePreset_iOS_v3(): ExportPreset;
176
+ /**
177
+ * Base preset for iOS (Godot 4.x)
178
+ */
179
+ declare function getBasePreset_iOS_v4(): ExportPreset;
180
+
181
+ export { type Color, ConfigFile, type ExportPreset, type ExportPresetsFile, type FindPresetCriteria, type GodotMajorVersion, type Platform, type PresetOptions, type Vector2, findPreset, getBasePreset, getBasePreset_Android_v3, getBasePreset_Android_v4, getBasePreset_iOS_v3, getBasePreset_iOS_v4, getMajorVersion, getPreset, hasBasePreset, loadExportPresets, mergeOptions, mergePresets, parseExportPresets, removePreset, saveExportPresets, serializeExportPresets, setPreset };
@@ -0,0 +1,181 @@
1
+ /**
2
+ * ConfigFile class for reading and writing Godot config files
3
+ * Based on Godot's ConfigFile implementation
4
+ */
5
+ declare class ConfigFile {
6
+ private values;
7
+ /**
8
+ * Parse config file content
9
+ * @param content Config file content as string
10
+ * @returns Error if parsing failed, undefined on success
11
+ */
12
+ parse(content: string): Error | undefined;
13
+ /**
14
+ * Get a value from the config file
15
+ * @param section Section name (empty string for section-less keys)
16
+ * @param key Key name
17
+ * @param defaultValue Optional default value if key doesn't exist
18
+ * @returns The value or default value
19
+ */
20
+ get_value(section: string, key: string, defaultValue?: unknown): unknown;
21
+ /**
22
+ * Set a value in the config file
23
+ * @param section Section name (empty string for section-less keys)
24
+ * @param key Key name
25
+ * @param value Value to set
26
+ */
27
+ set_value(section: string, key: string, value: unknown): void;
28
+ /**
29
+ * Save config file to disk
30
+ * @param path File path to save to
31
+ */
32
+ save(path: string): Promise<void>;
33
+ /**
34
+ * Check if a section exists
35
+ * @param section Section name
36
+ * @returns True if section exists
37
+ */
38
+ has_section(section: string): boolean;
39
+ /**
40
+ * Check if a key exists in a section
41
+ * @param section Section name
42
+ * @param key Key name
43
+ * @returns True if key exists in section
44
+ */
45
+ has_section_key(section: string, key: string): boolean;
46
+ /**
47
+ * Clear all values
48
+ */
49
+ clear(): void;
50
+ /**
51
+ * Get all section names
52
+ */
53
+ get_sections(): string[];
54
+ /**
55
+ * Get all keys in a section
56
+ */
57
+ get_section_keys(section: string): string[];
58
+ /**
59
+ * Encode config to text format
60
+ */
61
+ encode_to_text(): string;
62
+ }
63
+
64
+ /**
65
+ * Type definitions for Godot config file types
66
+ */
67
+ interface Color {
68
+ r: number;
69
+ g: number;
70
+ b: number;
71
+ a: number;
72
+ }
73
+ interface Vector2 {
74
+ x: number;
75
+ y: number;
76
+ }
77
+
78
+ /**
79
+ * Types for Godot export presets
80
+ */
81
+ interface ExportPreset {
82
+ name: string;
83
+ platform: string;
84
+ runnable: boolean;
85
+ dedicated_server?: boolean;
86
+ custom_features?: string;
87
+ export_filter?: string;
88
+ include_filter?: string;
89
+ exclude_filter?: string;
90
+ export_path?: string;
91
+ encryption_include_filters?: string;
92
+ encryption_exclude_filters?: string;
93
+ encrypt_pck?: boolean;
94
+ encrypt_directory?: boolean;
95
+ script_export_mode?: number;
96
+ [key: string]: unknown;
97
+ options?: PresetOptions;
98
+ }
99
+ type PresetOptions = Record<string, unknown>;
100
+ interface ExportPresetsFile {
101
+ presets: ExportPreset[];
102
+ }
103
+ interface FindPresetCriteria {
104
+ name?: string;
105
+ platform?: string;
106
+ index?: number;
107
+ }
108
+
109
+ /**
110
+ * Parser for export_presets.cfg file format
111
+ */
112
+
113
+ declare function parseExportPresets(content: string): ExportPresetsFile;
114
+
115
+ /**
116
+ * Serializer for export_presets.cfg file format
117
+ */
118
+
119
+ declare function serializeExportPresets(presets: ExportPresetsFile): string;
120
+
121
+ /**
122
+ * File I/O operations for export presets
123
+ */
124
+
125
+ declare function loadExportPresets(filePath: string): Promise<ExportPresetsFile>;
126
+ declare function saveExportPresets(filePath: string, presets: ExportPresetsFile): Promise<void>;
127
+
128
+ /**
129
+ * Preset operations: get, find, set, remove
130
+ */
131
+
132
+ declare function getPreset(presets: ExportPresetsFile, index: number): ExportPreset | undefined;
133
+ declare function findPreset(presets: ExportPresetsFile, criteria: FindPresetCriteria): ExportPreset | undefined;
134
+ declare function setPreset(presets: ExportPresetsFile, preset: ExportPreset, index?: number): ExportPresetsFile;
135
+ declare function removePreset(presets: ExportPresetsFile, index: number): ExportPresetsFile;
136
+
137
+ /**
138
+ * Merging functions for presets and options
139
+ */
140
+
141
+ declare function mergePresets(...presets: ExportPreset[]): ExportPreset;
142
+ declare function mergeOptions(...options: PresetOptions[]): PresetOptions;
143
+
144
+ /**
145
+ * Base preset definitions for common platforms and Godot versions
146
+ */
147
+
148
+ type GodotMajorVersion = 3 | 4;
149
+ type Platform = "Android" | "iOS";
150
+ /**
151
+ * Extract major version number from version string
152
+ * @param version Version string (e.g., "4.3.2", "3.5.1")
153
+ * @returns Major version number (3 or 4)
154
+ */
155
+ declare function getMajorVersion(version: string): GodotMajorVersion;
156
+ /**
157
+ * Check if a base preset exists for the given platform and version
158
+ */
159
+ declare function hasBasePreset(platform: Platform, version: GodotMajorVersion): boolean;
160
+ /**
161
+ * Get base preset for platform and version
162
+ */
163
+ declare function getBasePreset(platform: Platform, version: GodotMajorVersion): ExportPreset;
164
+ /**
165
+ * Base preset for Android (Godot 3.x)
166
+ */
167
+ declare function getBasePreset_Android_v3(): ExportPreset;
168
+ /**
169
+ * Base preset for Android (Godot 4.x)
170
+ */
171
+ declare function getBasePreset_Android_v4(): ExportPreset;
172
+ /**
173
+ * Base preset for iOS (Godot 3.x)
174
+ */
175
+ declare function getBasePreset_iOS_v3(): ExportPreset;
176
+ /**
177
+ * Base preset for iOS (Godot 4.x)
178
+ */
179
+ declare function getBasePreset_iOS_v4(): ExportPreset;
180
+
181
+ export { type Color, ConfigFile, type ExportPreset, type ExportPresetsFile, type FindPresetCriteria, type GodotMajorVersion, type Platform, type PresetOptions, type Vector2, findPreset, getBasePreset, getBasePreset_Android_v3, getBasePreset_Android_v4, getBasePreset_iOS_v3, getBasePreset_iOS_v4, getMajorVersion, getPreset, hasBasePreset, loadExportPresets, mergeOptions, mergePresets, parseExportPresets, removePreset, saveExportPresets, serializeExportPresets, setPreset };