applescript-node 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +441 -0
- package/dist/builder-utils.d.ts +19 -0
- package/dist/builder.d.ts +725 -0
- package/dist/compiler.d.ts +15 -0
- package/dist/decompiler.d.ts +6 -0
- package/dist/executor.d.ts +97 -0
- package/dist/expressions.d.ts +252 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.js +3220 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +3195 -0
- package/dist/index.mjs.map +1 -0
- package/dist/languages.d.ts +61 -0
- package/dist/loader.d.ts +24 -0
- package/dist/sdef.d.ts +50 -0
- package/dist/sources/applications.d.ts +102 -0
- package/dist/sources/index.d.ts +29 -0
- package/dist/sources/system.d.ts +178 -0
- package/dist/sources/windows.d.ts +61 -0
- package/dist/types.d.ts +787 -0
- package/dist/validator.d.ts +106 -0
- package/package.json +130 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/expressions.ts","../src/builder-utils.ts","../src/builder.ts","../src/executor.ts","../src/compiler.ts","../src/decompiler.ts","../src/languages.ts","../src/loader.ts","../src/sdef.ts","../src/sources/index.ts","../src/sources/applications.ts","../src/sources/system.ts","../src/sources/windows.ts","../src/validator.ts","../src/index.ts"],"names":["expr","execCallback","exec","promisify","getAll","getFrontmost"],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * ExprBuilder provides a type-safe DSL for building AppleScript expressions.\n * Instead of writing raw strings like: `if('counter > 10')`\n * You can write: `if(expr => expr.gt('counter', 10))`\n *\n * This enables:\n * - Type checking and autocomplete for variables in scope\n * - Prevention of common syntax errors\n * - Composable expressions\n * - Self-documenting code\n *\n * @template TScope - Union of variable names available in the current scope.\n * When used within loop callbacks like `forEach`, this will include loop variables\n * like 'aPerson', 'aNote', etc., enabling autocomplete for them.\n *\n * @example\n * // Basic usage with scoped variable\n * .forEach('aPerson', 'every person', (b) => {\n * b.ifThen(\n * (e) => e.gt(e.count(e.property('aPerson', 'emails')), 0),\n * // ^^^^^^^^ 'aPerson' gets autocomplete!\n * (then_) => then_.setExpression('email', (e) =>\n * e.valueOfItem(1, e.property('aPerson', 'emails'))\n * )\n * );\n * })\n *\n * @example\n * // Nested loops with multiple scoped variables\n * .forEach('anAccount', 'every account', (outer) => {\n * outer.forEach('aNote', 'notes of anAccount', (inner) => {\n * // Both 'anAccount' and 'aNote' are in scope here\n * inner.setExpression('accountName', (e) => e.property('anAccount', 'name'));\n * inner.setExpression('noteName', (e) => e.property('aNote', 'name'));\n * });\n * })\n */\n\nexport class ExprBuilder<TScope extends string = never> {\n /**\n * Greater than comparison: left > right\n * @param left - Variable or expression. Scoped variables (from loops) get autocomplete.\n * The type `TScope | (string & Record<never, never>)` provides autocomplete for scoped\n * variables while still accepting any string expression.\n * @param right - Value to compare against (string or number)\n * @returns AppleScript expression: \"left > right\"\n * @example\n * e.gt('counter', 10) // => \"counter > 10\"\n * e.gt('aPerson', 5) // => \"aPerson > 5\" (with autocomplete for 'aPerson' if in scope)\n */\n gt(left: TScope | (string & Record<never, never>), right: string | number): string {\n const rightValue = typeof right === 'number' ? right.toString() : `\"${right}\"`;\n return `${left} > ${rightValue}`;\n }\n\n /**\n * Less than comparison: left < right\n * @param left - Variable or expression (scoped variables get autocomplete)\n */\n lt(left: TScope | (string & Record<never, never>), right: string | number): string {\n const rightValue = typeof right === 'number' ? right.toString() : `\"${right}\"`;\n return `${left} < ${rightValue}`;\n }\n\n /**\n * Greater than or equal: left >= right\n * @param left - Variable or expression (scoped variables get autocomplete)\n */\n gte(left: TScope | (string & Record<never, never>), right: string | number): string {\n const rightValue = typeof right === 'number' ? right.toString() : `\"${right}\"`;\n return `${left} >= ${rightValue}`;\n }\n\n /**\n * Less than or equal: left <= right\n * @param left - Variable or expression (scoped variables get autocomplete)\n */\n lte(left: TScope | (string & Record<never, never>), right: string | number): string {\n const rightValue = typeof right === 'number' ? right.toString() : `\"${right}\"`;\n return `${left} <= ${rightValue}`;\n }\n\n /**\n * Equality comparison: left = right\n * @param left - Variable or expression (scoped variables get autocomplete)\n */\n eq(left: TScope | (string & Record<never, never>), right: string | number | boolean): string {\n let rightValue: string;\n if (typeof right === 'string') {\n rightValue = `\"${right}\"`;\n } else if (typeof right === 'boolean') {\n rightValue = right.toString();\n } else {\n rightValue = right.toString();\n }\n return `${left} = ${rightValue}`;\n }\n\n /**\n * Inequality comparison: left is not equal to right\n * @param left - Variable or expression (scoped variables get autocomplete)\n */\n ne(left: TScope | (string & Record<never, never>), right: string | number | boolean): string {\n let rightValue: string;\n if (typeof right === 'string') {\n rightValue = `\"${right}\"`;\n } else if (typeof right === 'boolean') {\n rightValue = right.toString();\n } else {\n rightValue = right.toString();\n }\n return `${left} is not equal to ${rightValue}`;\n }\n\n /**\n * Logical AND: combines multiple conditions\n * Example: expr.and(expr.gt('x', 5), expr.lt('x', 10))\n */\n and(...conditions: string[]): string {\n return conditions.join(' and ');\n }\n\n /**\n * Logical OR: combines multiple conditions\n * Example: expr.or(expr.eq('status', 'done'), expr.eq('status', 'skipped'))\n */\n or(...conditions: string[]): string {\n return conditions.join(' or ');\n }\n\n /**\n * Logical NOT: negates a condition\n * Example: expr.not(expr.eq('status', 'pending'))\n */\n not(condition: string): string {\n return `not ${condition}`;\n }\n\n /**\n * String length: length of str\n * Often used in conditions like: expr.gt(expr.length('name'), 5)\n */\n length(str: string): string {\n return `length of ${str}`;\n }\n\n /**\n * Property access: prop of obj\n * @param obj - Variable name. Scoped variables (from loops) get autocomplete.\n * The type allows both scoped variables and arbitrary string expressions.\n * @param prop - Property name to access\n * @returns AppleScript expression: \"prop of obj\"\n * @example\n * e.property('aNote', 'name') // => \"name of aNote\"\n * e.property('aPerson', 'emails') // => \"emails of aPerson\" (with autocomplete for 'aPerson')\n */\n property(obj: TScope | (string & Record<never, never>), prop: string): string {\n return `${prop} of ${obj}`;\n }\n\n /**\n * Count: count of items\n * Example: expr.gt(expr.count('notes'), 10)\n */\n count(items: string): string {\n return `count of ${items}`;\n }\n\n /**\n * Existence check: exists item\n * Example: expr.exists('window \"Settings\"')\n */\n exists(item: string): string {\n return `exists ${item}`;\n }\n\n /**\n * String contains: haystack contains needle\n * Example: expr.contains('name', '\"test\"')\n */\n contains(haystack: string, needle: string | number): string {\n const needleValue = typeof needle === 'number' ? needle.toString() : needle;\n return `${haystack} contains ${needleValue}`;\n }\n\n /**\n * String starts with: str begins with prefix\n * Example: expr.startsWith('name', '\"John\"')\n */\n startsWith(str: string, prefix: string): string {\n return `${str} begins with ${prefix}`;\n }\n\n /**\n * String ends with: str ends with suffix\n * Example: expr.endsWith('name', '\"son\"')\n */\n endsWith(str: string, suffix: string): string {\n return `${str} ends with ${suffix}`;\n }\n\n /**\n * Type checking: the type of item is typeName\n * Common types: 'text', 'number', 'list', 'record', 'boolean'\n */\n typeEquals(item: string, type: string): string {\n return `the type of ${item} is ${type}`;\n }\n\n /**\n * Matches wildcard pattern\n * Example: expr.matches('name', '\"*Smith*\"')\n */\n matches(str: string, pattern: string): string {\n return `${str} contains ${pattern}`;\n }\n\n /**\n * Parentheses for explicit grouping\n * Useful when combining complex boolean expressions\n * Example: expr.or(expr.paren(expr.and(...)), expr.eq(...))\n */\n paren(condition: string): string {\n return `(${condition})`;\n }\n\n /**\n * Create a comparison between two expressions\n * Useful for comparing two computed properties\n * Example: expr.compare('length of name1', '>', 'length of name2')\n */\n compare(left: string, operator: '>' | '<' | '>=' | '<=' | '=' | '!=', right: string): string {\n return `${left} ${operator} ${right}`;\n }\n\n /**\n * Collection accessor: every element of container\n * Example: expr.every('participant', 'aChat') => \"every participant of aChat\"\n * Example: expr.every('note', 'folder \"Notes\"') => \"every note of folder \\\"Notes\\\"\"\n */\n every(element: string, container: string): string {\n return `every ${element} of ${container}`;\n }\n\n /**\n * Nested property accessor: chains multiple properties\n * Example: expr.nestedProperty('aChat', 'account', 'id') => \"id of account of aChat\"\n * Example: expr.nestedProperty('note', 'folder', 'name') => \"name of folder of note\"\n * @param obj - Variable name (scoped variables get autocomplete)\n */\n nestedProperty(obj: TScope | (string & Record<never, never>), ...properties: string[]): string {\n if (properties.length === 0) {\n return obj;\n }\n // Build from inside out: \"id of account of aChat\"\n return properties.reduce((acc, prop) => `${prop} of ${acc}`, obj);\n }\n\n /**\n * Type casting: expression as type\n * Example: expr.asType('creation date of aNote', 'string') => \"creation date of aNote as string\"\n * Example: expr.asType(expr.property('aNote', 'id'), 'text') => \"id of aNote as text\"\n */\n asType(expression: string, type: 'string' | 'text' | 'number' | 'integer' | 'list'): string {\n return `${expression} as ${type}`;\n }\n\n /**\n * Substring/range accessor: text start thru end of source\n * Example: expr.text(1, 100, 'notePlaintext') => \"text 1 thru 100 of notePlaintext\"\n * Example: expr.text(5, 10, 'myString') => \"text 5 thru 10 of myString\"\n */\n text(start: number, end: number, source: string): string {\n return `text ${start} thru ${end} of ${source}`;\n }\n\n /**\n * Character accessor: character n of source\n * Example: expr.character(1, 'myString') => \"character 1 of myString\"\n */\n character(index: number, source: string): string {\n return `character ${index} of ${source}`;\n }\n\n /**\n * Item accessor: item n of collection\n * Example: expr.item(1, 'myList') => \"item 1 of myList\"\n * Example: expr.item('i', 'notes') => \"item i of notes\"\n */\n item(index: number | string, collection: string): string {\n return `item ${index} of ${collection}`;\n }\n\n /**\n * Items range: items start thru end of collection\n * Example: expr.items(1, 5, 'myList') => \"items 1 thru 5 of myList\"\n */\n items(start: number, end: number, collection: string): string {\n return `items ${start} thru ${end} of ${collection}`;\n }\n\n /**\n * First item: first element of collection\n * Example: expr.first('note', 'notes') => \"first note of notes\"\n */\n first(element: string, collection: string): string {\n return `first ${element} of ${collection}`;\n }\n\n /**\n * Last item: last element of collection\n * Example: expr.last('note', 'notes') => \"last note of notes\"\n */\n last(element: string, collection: string): string {\n return `last ${element} of ${collection}`;\n }\n\n /**\n * Some: some element where condition\n * Example: expr.some('note', 'notes', 'name contains \"test\"')\n */\n some(element: string, collection: string, condition: string): string {\n return `some ${element} of ${collection} where ${condition}`;\n }\n\n /**\n * Filter: every element where condition\n * Example: expr.filter('note', 'notes', 'shared = true')\n */\n filter(element: string, collection: string, condition: string): string {\n return `every ${element} of ${collection} where ${condition}`;\n }\n\n /**\n * Concatenation: left & right\n * Example: expr.concat('text 1 thru 50 of body', '\"...\"') => 'text 1 thru 50 of body & \"...\"'\n */\n concat(...parts: string[]): string {\n return parts.join(' & ');\n }\n\n /**\n * Property of item accessor: property of item N of collection\n * Example: expr.propertyOfItem('value', 1, 'emails of aPerson') => \"value of item 1 of emails of aPerson\"\n * Example: expr.propertyOfItem('name', 1, 'contacts') => \"name of item 1 of contacts\"\n */\n propertyOfItem(property: string, index: number | string, collection: string): string {\n return `${property} of item ${index} of ${collection}`;\n }\n\n /**\n * Value of item accessor (common shorthand for propertyOfItem('value', ...))\n * Example: expr.valueOfItem(1, 'emails of aPerson') => \"value of item 1 of emails of aPerson\"\n * Example: expr.valueOfItem(1, 'phones of contact') => \"value of item 1 of phones of contact\"\n */\n valueOfItem(index: number | string, collection: string): string {\n return this.propertyOfItem('value', index, collection);\n }\n}\n\n/**\n * Factory function for creating an ExprBuilder with type-tracked scope.\n * This is typically not needed as callbacks receive an ExprBuilder instance automatically.\n *\n * @template TScope - Union of variable names available in the current scope.\n * TypeScript will infer this from loop contexts automatically.\n * @returns ExprBuilder instance with scope tracking\n *\n * @example\n * // Usually you don't need to call this - use callbacks instead:\n * .forEach('aPerson', 'every person', (b) => {\n * b.ifThen((e) => e.gt('counter', 10), ...) // 'e' provided automatically\n * })\n *\n * @example\n * // Manual usage (rare):\n * const e = expr<'myVar' | 'anotherVar'>();\n * e.property('myVar', 'name'); // 'myVar' gets autocomplete\n */\nexport function expr<TScope extends string = never>(): ExprBuilder<TScope> {\n return new ExprBuilder<TScope>();\n}\n","import { ExprBuilder } from './expressions.js';\n\n/**\n * Resolves an expression that can be either a string or a function that takes an ExprBuilder.\n * This is a common pattern throughout the builder for accepting flexible expression inputs.\n *\n * @template TScope - Union of variable names available in the current scope (for type-safe ExprBuilder)\n * @param expression - Either a string expression or a function that builds an expression using ExprBuilder\n * @returns The resolved string expression\n *\n * @example\n * ```typescript\n * // String expression\n * resolveExpression('counter > 10') // => 'counter > 10'\n *\n * // Function expression\n * resolveExpression((e) => e.gt('counter', 10)) // => 'counter > 10'\n * ```\n */\nexport function resolveExpression<TScope extends string = never>(\n expression: string | ((expr: ExprBuilder<TScope>) => string),\n): string {\n return typeof expression === 'function' ? expression(new ExprBuilder<TScope>()) : expression;\n}\n","import { resolveExpression } from './builder-utils.js';\nimport { ExprBuilder } from './expressions.js';\nimport type { AppleScriptValue, JsonObjectShape, ScriptBuilder } from './types.js';\n\ntype BlockType =\n | 'tell'\n | 'if'\n | 'repeat'\n | 'considering'\n | 'ignoring'\n | 'using'\n | 'with'\n | 'try'\n | 'on';\n\nclass ScriptBuilderError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'ScriptBuilderError';\n }\n}\n\nexport class AppleScriptBuilder implements ScriptBuilder {\n private script: string[] = [];\n private indentLevel = 0;\n private readonly INDENT = ' ';\n private blockStack: { type: BlockType; target?: string }[] = [];\n\n private getIndentation(): string {\n return this.INDENT.repeat(this.indentLevel);\n }\n\n private escapeString(str: string): string {\n // In AppleScript, backslashes and quotes need to be escaped\n // Also handle common escape sequences\n return str\n .replace(/\\\\/g, '\\\\\\\\') // Backslash\n .replace(/\"/g, '\\\\\"') // Quote\n .replace(/\\n/g, '\\\\n') // Newline\n .replace(/\\r/g, '\\\\r') // Carriage return\n .replace(/\\t/g, '\\\\t'); // Tab\n }\n\n private formatValue(value: AppleScriptValue): string {\n if (value === null) return 'missing value';\n if (typeof value === 'string') return `\"${this.escapeString(value)}\"`;\n if (typeof value === 'number') return value.toString();\n if (typeof value === 'boolean') return value.toString();\n if (Array.isArray(value)) {\n return `{${value.map((v) => this.formatValue(v)).join(', ')}}`;\n }\n const entries = Object.entries(value as Record<string, AppleScriptValue>)\n .map(([k, v]) => `${k}:${this.formatValue(v)}`)\n .join(', ');\n return `{${entries}}`;\n }\n\n private makeRecord(properties: Record<string, AppleScriptValue>): string {\n const entries = Object.entries(properties)\n .map(([k, v]) => `${k}:${this.formatValue(v)}`)\n .join(', ');\n return `{${entries}}`;\n }\n\n private validateBlockStack(): void {\n if (this.blockStack.length > 0) {\n const unclosedBlocks = this.blockStack.map((b) => b.type).join(', ');\n throw new ScriptBuilderError(`Unclosed blocks remain: ${unclosedBlocks}`);\n }\n }\n\n private pushBlock(type: BlockType, target?: string): void {\n this.blockStack.push({ type, target });\n this.indentLevel++;\n }\n\n private popBlock(): void {\n if (this.blockStack.length === 0) {\n throw new ScriptBuilderError('Cannot end block: no blocks are currently open');\n }\n this.blockStack.pop();\n this.indentLevel--;\n }\n\n private validateBlockType(expectedType: BlockType): void {\n if (this.blockStack.length === 0) {\n throw new ScriptBuilderError(\n `Cannot end ${expectedType} block: no blocks are currently open`,\n );\n }\n const currentBlock = this.blockStack[this.blockStack.length - 1];\n if (currentBlock.type !== expectedType) {\n throw new ScriptBuilderError(\n `Cannot end ${expectedType} block: currently inside ${currentBlock.type} block`,\n );\n }\n }\n\n private addLine(line: string): void {\n this.script.push(`${this.getIndentation()}${line}`);\n }\n\n // Core language constructs\n tell(target: string): this {\n this.script.push(`${this.getIndentation()}tell application \"${this.escapeString(target)}\"`);\n this.pushBlock('tell', target);\n return this;\n }\n\n tellTarget(target: string): this {\n this.script.push(`${this.getIndentation()}tell ${target}`);\n this.pushBlock('tell', target);\n return this;\n }\n\n tellProcess(processName: string): this {\n this.script.push(\n `${this.getIndentation()}tell application \"System Events\" to tell process \"${this.escapeString(processName)}\"`,\n );\n this.pushBlock('tell', processName);\n return this;\n }\n\n on(handlerName: string, parameters?: string[]): this {\n const params = parameters?.length ? ` ${parameters.join(', ')}` : '';\n this.script.push(`${this.getIndentation()}on ${handlerName}${params}`);\n this.pushBlock('on', handlerName);\n return this;\n }\n\n /**\n * Define a handler using the 'to' syntax (alternative to 'on').\n * Both 'on' and 'to' are equivalent in AppleScript.\n * @param handlerName The name of the handler\n * @param parameters Optional array of parameter names\n * @returns This builder instance for method chaining\n * @example\n * .to('sayHello', ['name'])\n * .displayDialog('Hello ' & name)\n * .endto()\n */\n to(handlerName: string, parameters?: string[]): this {\n const params = parameters?.length ? ` ${parameters.join(', ')}` : '';\n this.script.push(`${this.getIndentation()}to ${handlerName}${params}`);\n this.pushBlock('on', handlerName);\n return this;\n }\n\n /**\n * Call/invoke a handler with parameters.\n * @param handlerName The name of the handler to call\n * @param parameters Optional array of parameter values\n * @returns This builder instance for method chaining\n * @example\n * .callHandler('sayHello', ['\"John\"'])\n * .callHandler('processFile', ['theFile', 'true'])\n */\n callHandler(handlerName: string, parameters?: string[]): this {\n const params = parameters?.length ? ` ${parameters.join(', ')}` : '';\n this.script.push(`${this.getIndentation()}${handlerName}${params}`);\n return this;\n }\n\n /**\n * Call a handler from within a tell statement using 'my' keyword.\n * Required when calling handlers from within tell blocks.\n * @param handlerName The name of the handler to call\n * @param parameters Optional array of parameter values\n * @returns This builder instance for method chaining\n * @example\n * .tell('Finder')\n * .my('processFile', ['theFile'])\n * .endtell()\n */\n my(handlerName: string, parameters?: string[]): this {\n const params = parameters?.length ? ` ${parameters.join(', ')}` : '';\n this.script.push(`${this.getIndentation()}my ${handlerName}${params}`);\n return this;\n }\n\n /**\n * Call a handler from within a tell statement using 'of me' syntax.\n * Alternative to 'my' keyword for calling handlers from within tell blocks.\n * @param handlerName The name of the handler to call\n * @param parameters Optional array of parameter values\n * @returns This builder instance for method chaining\n * @example\n * .tell('Finder')\n * .ofMe('processFile', ['theFile'])\n * .endtell()\n */\n ofMe(handlerName: string, parameters?: string[]): this {\n const params = parameters?.length ? ` ${parameters.join(', ')}` : '';\n this.script.push(`${this.getIndentation()}${handlerName}${params} of me`);\n return this;\n }\n\n /**\n * Define a handler with labeled parameters (interleaved syntax).\n * AppleScript supports splitting parameter names with colons and spaces.\n * @param handlerName The name of the handler\n * @param labeledParams Object with parameter labels and values\n * @returns This builder instance for method chaining\n * @example\n * .onLabeled('displayError', { message: 'theErrorMessage', buttons: 'theButtons' })\n * .displayDialog(theErrorMessage, { buttons: theButtons })\n * .endon()\n */\n onLabeled(handlerName: string, labeledParams: Record<string, string>): this {\n const paramPairs = Object.entries(labeledParams);\n const params = paramPairs.map(([label, value]) => `${label} ${value}`).join(', ');\n this.script.push(`${this.getIndentation()}on ${handlerName} ${params}`);\n this.pushBlock('on', handlerName);\n return this;\n }\n\n /**\n * Define a handler with labeled parameters using 'to' syntax.\n * @param handlerName The name of the handler\n * @param labeledParams Object with parameter labels and values\n * @returns This builder instance for method chaining\n */\n toLabeled(handlerName: string, labeledParams: Record<string, string>): this {\n const paramPairs = Object.entries(labeledParams);\n const params = paramPairs.map(([label, value]) => `${label} ${value}`).join(', ');\n this.script.push(`${this.getIndentation()}to ${handlerName} ${params}`);\n this.pushBlock('on', handlerName);\n return this;\n }\n\n // Event Handlers\n\n /**\n * Define a 'run' event handler (implicit or explicit).\n * The run handler is called when a script executes.\n * @param explicit If true, explicitly define the run handler; if false, use implicit\n * @returns This builder instance for method chaining\n * @example\n * .runHandler(true) // Explicit: on run ... end run\n * .displayDialog('Script is running')\n * .endrun()\n */\n runHandler(explicit = false): this {\n if (explicit) {\n this.script.push(`${this.getIndentation()}on run`);\n this.pushBlock('on', 'run');\n }\n return this;\n }\n\n /**\n * Define a 'quit' event handler.\n * Called when a script app quits.\n * @returns This builder instance for method chaining\n * @example\n * .quitHandler()\n * .displayDialog('Script is quitting')\n * .endquit()\n */\n quitHandler(): this {\n this.script.push(`${this.getIndentation()}on quit`);\n this.pushBlock('on', 'quit');\n return this;\n }\n\n /**\n * Define an 'open' event handler for drag-and-drop support.\n * Makes the script app drag-and-droppable.\n * @param parameterName Name for the dropped items parameter (default: 'theDroppedItems')\n * @returns This builder instance for method chaining\n * @example\n * .openHandler('theFiles')\n * .repeatWith('aFile', 'theFiles')\n * .displayDialog('Processing: ' & aFile)\n * .endrepeat()\n * .endopen()\n */\n openHandler(parameterName = 'theDroppedItems'): this {\n this.script.push(`${this.getIndentation()}on open ${parameterName}`);\n this.pushBlock('on', 'open');\n return this;\n }\n\n /**\n * Define an 'idle' event handler for stay-open applications.\n * Called periodically in stay-open script apps.\n * @param returnSeconds Number of seconds to wait before next idle call (default: 30)\n * @returns This builder instance for method chaining\n * @example\n * .idleHandler(5) // Check every 5 seconds\n * .displayDialog('Idle processing')\n * .return(5) // Return 5 seconds for next idle\n * .endidle()\n */\n idleHandler(_returnSeconds = 30): this {\n this.script.push(`${this.getIndentation()}on idle`);\n this.pushBlock('on', 'idle');\n return this;\n }\n\n end(): this {\n if (this.blockStack.length === 0) {\n throw new ScriptBuilderError('Cannot call end(): no blocks are currently open');\n }\n\n const block = this.blockStack[this.blockStack.length - 1];\n this.popBlock();\n\n // For 'on' blocks, use the handler name if available, otherwise use 'on'\n const endText = block.type === 'on' && block.target ? block.target : block.type;\n this.script.push(`${this.getIndentation()}end ${endText}`);\n return this;\n }\n\n /**\n * Explicitly end an if block.\n * Preferred over end() for clarity when working with multiple nested blocks.\n */\n endif(): this {\n this.validateBlockType('if');\n return this.end();\n }\n\n /**\n * Explicitly end a repeat block.\n * Preferred over end() for clarity when working with multiple nested blocks.\n */\n endrepeat(): this {\n this.validateBlockType('repeat');\n return this.end();\n }\n\n /**\n * Explicitly end a try block.\n * Preferred over end() for clarity when working with multiple nested blocks.\n */\n endtry(): this {\n this.validateBlockType('try');\n return this.end();\n }\n\n /**\n * Explicitly end a tell block.\n * Preferred over end() for clarity when working with multiple nested blocks.\n */\n endtell(): this {\n this.validateBlockType('tell');\n return this.end();\n }\n\n /**\n * Explicitly end an on handler block.\n * Preferred over end() for clarity when working with multiple nested blocks.\n */\n endon(): this {\n this.validateBlockType('on');\n return this.end();\n }\n\n /**\n * Explicitly end a considering block.\n * Preferred over end() for clarity when working with multiple nested blocks.\n */\n endconsidering(): this {\n this.validateBlockType('considering');\n return this.end();\n }\n\n /**\n * Explicitly end an ignoring block.\n * Preferred over end() for clarity when working with multiple nested blocks.\n */\n endignoring(): this {\n this.validateBlockType('ignoring');\n return this.end();\n }\n\n /**\n * Explicitly end a using block.\n * Preferred over end() for clarity when working with multiple nested blocks.\n */\n endusing(): this {\n this.validateBlockType('using');\n return this.end();\n }\n\n /**\n * Explicitly end a with block.\n * Preferred over end() for clarity when working with multiple nested blocks.\n */\n endwith(): this {\n this.validateBlockType('with');\n return this.end();\n }\n\n /**\n * Explicitly end a 'to' handler block.\n * Preferred over end() for clarity when working with handlers.\n */\n endto(): this {\n this.validateBlockType('on'); // 'to' handlers use the same block type as 'on'\n return this.end();\n }\n\n /**\n * Explicitly end a 'run' handler block.\n * Preferred over end() for clarity when working with run handlers.\n */\n endrun(): this {\n this.validateBlockType('on');\n return this.end();\n }\n\n /**\n * Explicitly end a 'quit' handler block.\n * Preferred over end() for clarity when working with quit handlers.\n */\n endquit(): this {\n this.validateBlockType('on');\n return this.end();\n }\n\n /**\n * Explicitly end an 'open' handler block.\n * Preferred over end() for clarity when working with open handlers.\n */\n endopen(): this {\n this.validateBlockType('on');\n return this.end();\n }\n\n /**\n * Explicitly end an 'idle' handler block.\n * Preferred over end() for clarity when working with idle handlers.\n */\n endidle(): this {\n this.validateBlockType('on');\n return this.end();\n }\n\n if(condition: string | ((expr: ExprBuilder) => string)): this {\n const conditionStr = resolveExpression(condition);\n this.script.push(`${this.getIndentation()}if ${conditionStr}`);\n this.pushBlock('if');\n return this;\n }\n\n thenBlock(): this {\n if (this.blockStack.length === 0 || this.blockStack[this.blockStack.length - 1].type !== 'if') {\n throw new ScriptBuilderError('Cannot call thenBlock(): no if block is currently open');\n }\n // Append 'then' to the previous if statement line\n const lastLine = this.script[this.script.length - 1];\n this.script[this.script.length - 1] = `${lastLine} then`;\n return this;\n }\n\n else(): this {\n if (this.blockStack.length === 0 || this.blockStack[this.blockStack.length - 1].type !== 'if') {\n throw new ScriptBuilderError('Cannot call else(): no if block is currently open');\n }\n this.indentLevel--;\n this.script.push(`${this.getIndentation()}else`);\n this.indentLevel++;\n return this;\n }\n\n elseIf(condition: string): this {\n if (this.blockStack.length === 0 || this.blockStack[this.blockStack.length - 1].type !== 'if') {\n throw new ScriptBuilderError('Cannot call elseIf(): no if block is currently open');\n }\n this.indentLevel--;\n this.script.push(`${this.getIndentation()}else if ${condition}`);\n this.indentLevel++;\n return this;\n }\n\n repeat(times?: number): this {\n if (times !== undefined && (!Number.isInteger(times) || times < 1)) {\n throw new ScriptBuilderError('Repeat times must be a positive integer');\n }\n\n if (times !== undefined) {\n this.script.push(`${this.getIndentation()}repeat ${times} times`);\n } else {\n this.script.push(`${this.getIndentation()}repeat`);\n }\n this.pushBlock('repeat');\n return this;\n }\n\n repeatWith(variable: string, list: string): this {\n if (!(variable && list)) {\n throw new ScriptBuilderError('Both variable and list must be provided for repeatWith');\n }\n this.script.push(`${this.getIndentation()}repeat with ${variable} in ${list}`);\n this.pushBlock('repeat');\n return this;\n }\n\n repeatUntil(condition: string): this {\n if (!condition) {\n throw new ScriptBuilderError('Condition must be provided for repeatUntil');\n }\n this.script.push(`${this.getIndentation()}repeat until ${condition}`);\n this.pushBlock('repeat');\n return this;\n }\n\n repeatWhile(condition: string): this {\n if (!condition) {\n throw new ScriptBuilderError('Condition must be provided for repeatWhile');\n }\n this.script.push(`${this.getIndentation()}repeat while ${condition}`);\n this.pushBlock('repeat');\n return this;\n }\n\n repeatWithRange(variable: string, start: number | string, end: number | string): this {\n if (!(variable && start && end)) {\n throw new ScriptBuilderError('Variable, start, and end must be provided for repeatWithRange');\n }\n const startExpr = typeof start === 'number' ? start.toString() : start;\n const endExpr = typeof end === 'number' ? end.toString() : end;\n this.script.push(\n `${this.getIndentation()}repeat with ${variable} from ${startExpr} to ${endExpr}`,\n );\n this.pushBlock('repeat');\n return this;\n }\n\n exitRepeat(): this {\n const hasRepeatBlock = this.blockStack.some((block) => block.type === 'repeat');\n if (!hasRepeatBlock) {\n throw new ScriptBuilderError('Cannot call exitRepeat(): no repeat block is currently open');\n }\n this.script.push(`${this.getIndentation()}exit repeat`);\n return this;\n }\n\n exitRepeatIf(condition: string | ((expr: ExprBuilder) => string)): this {\n const hasRepeatBlock = this.blockStack.some((block) => block.type === 'repeat');\n if (!hasRepeatBlock) {\n throw new ScriptBuilderError('Cannot call exitRepeatIf(): no repeat block is currently open');\n }\n const cond = resolveExpression(condition);\n this.script.push(`${this.getIndentation()}if ${cond} then`);\n this.indentLevel++;\n this.script.push(`${this.getIndentation()}exit repeat`);\n this.indentLevel--;\n this.script.push(`${this.getIndentation()}end if`);\n return this;\n }\n\n continueRepeat(): this {\n const hasRepeatBlock = this.blockStack.some((block) => block.type === 'repeat');\n if (!hasRepeatBlock) {\n throw new ScriptBuilderError(\n 'Cannot call continueRepeat(): no repeat block is currently open',\n );\n }\n this.script.push(`${this.getIndentation()}continue repeat`);\n return this;\n }\n\n considering(attributes: string[]): this {\n if (!attributes.length) {\n throw new ScriptBuilderError('At least one attribute must be provided for considering');\n }\n this.script.push(`${this.getIndentation()}considering ${attributes.join(', ')}`);\n this.pushBlock('considering');\n return this;\n }\n\n ignoring(attributes: string[]): this {\n if (!attributes.length) {\n throw new ScriptBuilderError('At least one attribute must be provided for ignoring');\n }\n this.script.push(`${this.getIndentation()}ignoring ${attributes.join(', ')}`);\n this.pushBlock('ignoring');\n return this;\n }\n\n using(terms: string[]): this {\n this.script.push(`${this.getIndentation()}using terms from ${terms.join(', ')}`);\n this.pushBlock('using');\n return this;\n }\n\n with(timeout?: number, transaction?: boolean): this {\n let command = `${this.getIndentation()}with`;\n if (timeout !== undefined) command += ` timeout of ${timeout}`;\n if (transaction) command += ' transaction';\n this.script.push(command);\n this.pushBlock('with');\n return this;\n }\n\n try(): this {\n this.script.push(`${this.getIndentation()}try`);\n this.pushBlock('try');\n return this;\n }\n\n onError(variableName?: string): this {\n if (\n this.blockStack.length === 0 ||\n this.blockStack[this.blockStack.length - 1].type !== 'try'\n ) {\n throw new ScriptBuilderError('Cannot call onError(): no try block is currently open');\n }\n this.indentLevel--;\n const varPart = variableName ? ` ${variableName}` : '';\n this.script.push(`${this.getIndentation()}on error${varPart}`);\n this.indentLevel++;\n return this;\n }\n\n error(message: string, number?: number): this {\n let command = `${this.getIndentation()}error \"${this.escapeString(message)}\"`;\n if (number !== undefined) command += ` number ${number}`;\n this.script.push(command);\n return this;\n }\n\n return(value: AppleScriptValue): this {\n this.script.push(`${this.getIndentation()}return ${this.formatValue(value)}`);\n return this;\n }\n\n returnRaw(expression: string): this {\n this.script.push(`${this.getIndentation()}return ${expression}`);\n return this;\n }\n\n /**\n * Build a JSON object string from AppleScript variables.\n * Generates clean, readable JSON without manual string concatenation.\n *\n * @param variableMap Mapping of JSON keys to AppleScript variable names\n * @returns AppleScript expression that evaluates to a JSON string\n *\n * @example\n * // Instead of manual string building:\n * // '\"{\" & \"\\\\\"name\\\\\":\\\\\"\" & winName & \"\\\\\"}\" '\n *\n * // Use:\n * const jsonExpr = builder.buildJsonObject({\n * name: 'winName',\n * position: 'winPosition',\n * size: 'winSize'\n * });\n * builder.returnRaw(jsonExpr);\n *\n * // Generates: '{\"name\":\"Calculator\",\"position\":\"100,200\",\"size\":\"800x600\"}'\n */\n buildJsonObject(variableMap: Record<string, string>): string {\n const entries = Object.entries(variableMap);\n\n // Build the JSON string expression\n const parts: string[] = ['\"{\"'];\n\n entries.forEach(([jsonKey, varName], index) => {\n const comma = index > 0 ? ',' : '';\n // Each part: ,\"key\":\"value\"\n parts.push(`\"${comma}\\\\\"${jsonKey}\\\\\":\\\\\"\"`);\n parts.push(varName);\n parts.push('\"\\\\\"\"');\n });\n\n parts.push('\"}\"');\n\n // Join with & operators\n return parts.join(' & ');\n }\n\n /**\n * Build and return a JSON object from AppleScript variables.\n * Convenience method that combines buildJsonObject() with returnRaw().\n *\n * @param variableMap Mapping of JSON keys to AppleScript variable names\n *\n * @example\n * .setExpression('winName', 'name of window 1')\n * .setExpression('winPosition', 'position of window 1 as text')\n * .returnJsonObject({\n * name: 'winName',\n * position: 'winPosition'\n * })\n */\n returnJsonObject<TProperties extends Record<string, string>>(\n variableMap: TProperties,\n ): ScriptBuilder<never, JsonObjectShape<TProperties>> {\n const jsonExpr = this.buildJsonObject(variableMap);\n this.returnRaw(jsonExpr);\n return this as ScriptBuilder<never, JsonObjectShape<TProperties>>;\n }\n\n /**\n * Ultra-convenient shorthand for the common \"map collection to JSON\" pattern.\n * Replaces verbose manual iteration, property extraction, and JSON conversion.\n *\n * This single method handles:\n * - Creating temporary collection list\n * - Iterating through items (with optional limit/condition)\n * - Extracting properties with smart detection (simple vs complex expressions)\n * - Field-level transformations (firstOf, ifExists, type conversion)\n * - Error handling (skip failed items)\n * - JSON serialization and return\n *\n * @param itemVariable Loop variable name (e.g., 'aNote')\n * @param collection Collection to iterate (e.g., 'every note')\n * @param properties Mapping of JSON keys to AppleScript properties or PropertyExtractor objects\n * @param options Optional: limit, until/while conditions, error handling\n *\n * @example\n * // Simple properties\n * .tell('Notes')\n * .mapToJson('aNote', 'every note', {\n * id: 'id',\n * name: 'name',\n * content: 'plaintext',\n * created: 'creation date of aNote as string',\n * }, { limit: 10, skipErrors: true })\n * .endtell()\n *\n * @example\n * // Advanced field extractors (NEW!)\n * .tell('Contacts')\n * .mapToJson('aPerson', 'every person', {\n * id: 'id',\n * name: 'name',\n * email: { property: (e) => e.property('aPerson', 'emails'), firstOf: true },\n * phone: { property: 'phones', firstOf: true },\n * birthday: { property: 'birth date', ifExists: true, asType: 'string' },\n * }, { limit: 50, skipErrors: true })\n * .endtell()\n */\n mapToJson<\n TProperties extends Record<\n string,\n | string\n | {\n readonly property?: string | ((e: ExprBuilder) => string);\n readonly firstOf?: boolean;\n readonly ifExists?: boolean;\n readonly asType?: string;\n readonly default?: string | ((e: ExprBuilder) => string);\n }\n >,\n >(\n itemVariable: string,\n collection: string,\n properties: TProperties,\n options: {\n limit?: number;\n until?: string | ((expr: ExprBuilder) => string);\n while?: string | ((expr: ExprBuilder) => string);\n skipErrors?: boolean;\n } = {},\n ): ScriptBuilder<never, JsonObjectShape<TProperties>[]> {\n const listVar = '__collected_items';\n\n // 1. Initialize collection list\n this.set(listVar, []);\n\n // 2. Set up loop with optional limit/condition\n const buildBody = (b: ScriptBuilder) => {\n // Process properties to separate simple strings from transformations\n const transformedVars: Record<string, string> = {};\n const finalPropertyMap: Record<string, string> = {};\n\n for (const [jsonKey, propDef] of Object.entries(properties)) {\n if (typeof propDef === 'string') {\n // Simple string property - use directly\n finalPropertyMap[jsonKey] = propDef;\n } else {\n // PropertyExtractor - needs transformation\n if (!propDef.property) {\n throw new ScriptBuilderError(\n `PropertyExtractor for \"${jsonKey}\" must have a \"property\" field`,\n );\n }\n const tempVarName = `__temp_${jsonKey}`;\n const propExpr =\n typeof propDef.property === 'function'\n ? propDef.property(new ExprBuilder())\n : `${propDef.property} of ${itemVariable}`; // Append \"of itemVariable\" for string properties\n const defaultVal = propDef.default\n ? typeof propDef.default === 'function'\n ? propDef.default(new ExprBuilder())\n : propDef.default\n : 'missing value';\n\n if (propDef.firstOf) {\n // Use setFirstOf() for first-or-default pattern\n b.setFirstOf(tempVarName, propExpr, defaultVal);\n } else if (propDef.ifExists) {\n // Use setIfExists() for existence check pattern\n b.setIfExists(tempVarName, propExpr, defaultVal, propDef.asType);\n } else {\n // Just set the expression directly\n b.setExpression(tempVarName, propExpr);\n }\n\n transformedVars[jsonKey] = tempVarName;\n finalPropertyMap[jsonKey] = tempVarName;\n }\n }\n\n // Build record using both simple properties and transformed variables\n if (options.skipErrors) {\n b.tryCatch(\n (tryBlock) => tryBlock.pickEndRecord(listVar, itemVariable, finalPropertyMap),\n (catchBlock) => catchBlock.comment('Skip items with errors'),\n );\n } else {\n b.pickEndRecord(listVar, itemVariable, finalPropertyMap);\n }\n };\n\n if (options.limit !== undefined) {\n const limit = options.limit;\n this.set('__counter', 0);\n this.forEachUntil<string>(\n itemVariable,\n collection,\n (e) => e.gte('__counter', limit),\n (b) => {\n b.increment('__counter');\n buildBody(b);\n },\n );\n } else if (options.until !== undefined) {\n this.forEachUntil<string>(itemVariable, collection, options.until, buildBody);\n } else if (options.while !== undefined) {\n this.forEachWhile<string>(itemVariable, collection, options.while, buildBody);\n } else {\n this.forEach<string>(itemVariable, collection, buildBody);\n }\n\n // 3. Return as JSON - map JSON keys to record property keys (not AppleScript expressions)\n // The record has keys like {id: value, name: value}, so we need to map id→id, name→name, etc.\n const recordPropertyMap = Object.keys(properties).reduce<Record<string, string>>((acc, key) => {\n acc[key] = key; // JSON key maps to record property with same name\n return acc;\n }, {});\n return this.returnAsJson(listVar, recordPropertyMap);\n }\n\n /**\n * Return a list of records as a JSON string.\n * Converts AppleScript records to JSON format by manually building the JSON string.\n * Handles proper escaping of strings, booleans, numbers, and null values.\n * @param listVariable Name of the variable containing a list of records\n * @param propertyMap Mapping of JSON keys to AppleScript property names (e.g., {id: 'noteId', name: 'noteName'})\n */\n returnAsJson<TProperties extends Record<string, string>>(\n listVariable: string,\n propertyMap: TProperties,\n ): ScriptBuilder<never, JsonObjectShape<TProperties>[]> {\n // Prepend handlers to the beginning of the script (they must be at top level)\n const handlers = [\n '',\n 'on escapeJsonString(str)',\n ' set escapedStr to str',\n ` set escapedStr to my replaceText(escapedStr, \"\\\\\\\\\", \"\\\\\\\\\\\\\\\\\")`,\n ` set escapedStr to my replaceText(escapedStr, \"\\\\\"\", \"\\\\\\\\\\\\\"\") `,\n ` set escapedStr to my replaceText(escapedStr, return, \"\\\\\\\\n\")`,\n ` set escapedStr to my replaceText(escapedStr, linefeed, \"\\\\\\\\n\")`,\n ` set escapedStr to my replaceText(escapedStr, tab, \"\\\\\\\\t\")`,\n ' return escapedStr',\n 'end escapeJsonString',\n '',\n 'on replaceText(theText, searchStr, replaceStr)',\n ` set AppleScript's text item delimiters to searchStr`,\n ' set textItems to text items of theText',\n ` set AppleScript's text item delimiters to replaceStr`,\n ' set newText to textItems as text',\n ` set AppleScript's text item delimiters to \"\"`,\n ' return newText',\n 'end replaceText',\n '',\n 'on valueToJson(val)',\n ' if val is missing value then',\n ` return \"null\"`,\n ' else if class of val is boolean then',\n ' if val then',\n ` return \"true\"`,\n ' else',\n ` return \"false\"`,\n ' end if',\n ' else if class of val is integer or class of val is real then',\n ' return val as text',\n ' else',\n ` return \"\\\\\"\" & my escapeJsonString(val as text) & \"\\\\\"\"`,\n ' end if',\n 'end valueToJson',\n '',\n ];\n\n // Insert handlers at the beginning of the script\n this.script.unshift(...handlers);\n\n // Build JSON array from list of records (at current position in script)\n this.raw('set jsonParts to {}');\n this.raw(`repeat with rec in ${listVariable}`);\n this.raw(' try');\n this.raw(` set itemJson to \"{\"`);\n\n // Generate property access for each key in the property map\n const entries = Object.entries(propertyMap);\n entries.forEach(([jsonKey, appleScriptProp], index) => {\n const comma = index > 0 ? ',' : '';\n this.raw(\n ` set itemJson to itemJson & \"${comma}\\\\\"${jsonKey}\\\\\":\" & my valueToJson(${appleScriptProp} of rec)`,\n );\n });\n\n this.raw(` set itemJson to itemJson & \"}\"`);\n this.raw(' set end of jsonParts to itemJson');\n this.raw(' end try');\n this.raw('end repeat');\n this.raw('');\n this.raw(`set AppleScript's text item delimiters to \",\"`);\n this.raw(`set jsonArray to \"[\" & (jsonParts as text) & \"]\"`);\n this.raw(`set AppleScript's text item delimiters to \"\"`);\n this.raw('return jsonArray');\n return this as ScriptBuilder<never, JsonObjectShape<TProperties>[]>;\n }\n\n log(message: string): this {\n this.script.push(`${this.getIndentation()}log \"${this.escapeString(message)}\"`);\n return this;\n }\n\n comment(text: string): this {\n this.script.push(`${this.getIndentation()}-- ${text}`);\n return this;\n }\n\n // Application control\n activate(): this {\n this.script.push(`${this.getIndentation()}activate`);\n return this;\n }\n\n quit(): this {\n this.script.push(`${this.getIndentation()}quit`);\n return this;\n }\n\n reopen(): this {\n this.script.push(`${this.getIndentation()}reopen`);\n return this;\n }\n\n launch(): this {\n this.script.push(`${this.getIndentation()}launch`);\n return this;\n }\n\n running(): this {\n this.script.push(`${this.getIndentation()}running`);\n return this;\n }\n\n // Window management\n closeWindow(window?: string): this {\n if (window) {\n this.script.push(`${this.getIndentation()}close window \"${this.escapeString(window)}\"`);\n } else {\n this.script.push(`${this.getIndentation()}close front window`);\n }\n return this;\n }\n\n closeAllWindows(): this {\n this.script.push(`${this.getIndentation()}close every window`);\n return this;\n }\n\n minimizeWindow(window?: string): this {\n if (window) {\n this.script.push(\n `${this.getIndentation()}set miniaturized of window \"${this.escapeString(window)}\" to true`,\n );\n } else {\n this.script.push(`${this.getIndentation()}set miniaturized of front window to true`);\n }\n return this;\n }\n\n zoomWindow(window?: string): this {\n if (window) {\n this.script.push(\n `${this.getIndentation()}set zoomed of window \"${this.escapeString(window)}\" to true`,\n );\n } else {\n this.script.push(`${this.getIndentation()}set zoomed of front window to true`);\n }\n return this;\n }\n\n // UI interaction\n click(target: string): this {\n this.script.push(`${this.getIndentation()}click ${target}`);\n return this;\n }\n\n select(target: string): this {\n this.script.push(`${this.getIndentation()}select ${target}`);\n return this;\n }\n\n keystroke(text: string, modifiers?: string[]): this {\n const modString = modifiers?.length ? ` using {${modifiers.join(', ')}}` : '';\n this.script.push(`${this.getIndentation()}keystroke \"${this.escapeString(text)}\"${modString}`);\n return this;\n }\n\n /**\n * Type multiple characters with automatic delays between each keystroke.\n * Convenient shorthand for typing sequences like numbers or text.\n * @param text String of characters to type (each character gets a separate keystroke)\n * @param delayBetween Delay in seconds between each keystroke (default: 0.1)\n * @example\n * // Instead of:\n * // .keystroke('1').delay(0.1).keystroke('2').delay(0.1).keystroke('3')\n * // Use:\n * // .keystrokes('123')\n */\n keystrokes(text: string, delayBetween = 0.1): this {\n const chars = text.split('');\n chars.forEach((char, index) => {\n this.keystroke(char);\n // Add delay after each keystroke except the last one\n if (index < chars.length - 1) {\n this.delay(delayBetween);\n }\n });\n return this;\n }\n\n delay(seconds: number): this {\n this.script.push(`${this.getIndentation()}delay ${seconds}`);\n return this;\n }\n\n // Dialog and alerts\n displayDialog(\n text: string,\n options: {\n buttons?: string[];\n defaultButton?: string;\n withIcon?: 'stop' | 'note' | 'caution';\n givingUpAfter?: number;\n } = {},\n ): ScriptBuilder {\n let command = `${this.getIndentation()}display dialog \"${this.escapeString(text)}\"`;\n\n if (options.buttons?.length) {\n const escapedButtons = options.buttons.map((b) => this.escapeString(b));\n command += ` buttons {\"${escapedButtons.join('\", \"')}\"}`;\n }\n\n if (options.defaultButton) {\n command += ` default button \"${this.escapeString(options.defaultButton)}\"`;\n }\n\n if (options.withIcon) {\n command += ` with icon ${options.withIcon}`;\n }\n\n if (options.givingUpAfter) {\n command += ` giving up after ${options.givingUpAfter}`;\n }\n\n this.script.push(command);\n return this;\n }\n\n displayNotification(\n text: string,\n options: {\n title?: string;\n subtitle?: string;\n sound?: string;\n } = {},\n ): ScriptBuilder {\n let command = `${this.getIndentation()}display notification \"${this.escapeString(text)}\"`;\n\n if (options.title) {\n command += ` with title \"${this.escapeString(options.title)}\"`;\n }\n\n if (options.subtitle) {\n command += ` subtitle \"${this.escapeString(options.subtitle)}\"`;\n }\n\n if (options.sound) {\n command += ` sound name \"${this.escapeString(options.sound)}\"`;\n }\n\n this.script.push(command);\n return this;\n }\n\n // Variables and properties\n set<TNewVar extends string>(variable: TNewVar, value: AppleScriptValue): ScriptBuilder<TNewVar> {\n this.script.push(`${this.getIndentation()}set ${variable} to ${this.formatValue(value)}`);\n return this as ScriptBuilder<TNewVar>;\n }\n\n setExpression<TNewVar extends string>(\n variable: TNewVar,\n expression: string | Record<string, string> | ((expr: ExprBuilder) => string),\n ): ScriptBuilder<TNewVar> {\n let expr: string;\n if (typeof expression === 'function') {\n expr = expression(new ExprBuilder());\n } else if (typeof expression === 'string') {\n expr = expression;\n } else {\n expr = this.makeRecordFrom(expression);\n }\n this.script.push(`${this.getIndentation()}set ${variable} to ${expr}`);\n return this as ScriptBuilder<TNewVar>;\n }\n\n setExpressions(expressions: Record<string, string | ((expr: ExprBuilder) => string)>): this {\n for (const [variable, expression] of Object.entries(expressions)) {\n const expr = resolveExpression(expression);\n this.script.push(`${this.getIndentation()}set ${variable} to ${expr}`);\n }\n return this;\n }\n\n appendTo(\n variable: string,\n expression: string | ((expr: ExprBuilder) => string),\n options?: { prependLinefeed?: boolean; appendLinefeed?: boolean },\n ): this {\n let expr = resolveExpression(expression);\n\n // Add linefeed wrapping if requested\n if (options?.prependLinefeed) {\n expr = `linefeed & ${expr}`;\n }\n if (options?.appendLinefeed) {\n expr = `${expr} & linefeed`;\n }\n\n this.script.push(`${this.getIndentation()}set ${variable} to ${variable} & ${expr}`);\n return this;\n }\n\n increment(variable: string, by = 1): this {\n this.script.push(`${this.getIndentation()}set ${variable} to ${variable} + ${by}`);\n return this;\n }\n\n decrement(variable: string, by = 1): this {\n this.script.push(`${this.getIndentation()}set ${variable} to ${variable} - ${by}`);\n return this;\n }\n\n get(property: string): this {\n this.script.push(`${this.getIndentation()}get ${property}`);\n return this;\n }\n\n copy<TNewVar extends string>(value: AppleScriptValue, to: TNewVar): ScriptBuilder<TNewVar> {\n this.script.push(`${this.getIndentation()}copy ${this.formatValue(value)} to ${to}`);\n return this as ScriptBuilder<TNewVar>;\n }\n\n count(items: string): this {\n this.script.push(`${this.getIndentation()}count ${items}`);\n return this;\n }\n\n setCountOf<TNewVar extends string>(variable: TNewVar, items: string): ScriptBuilder<TNewVar> {\n this.script.push(`${this.getIndentation()}set ${variable} to count of (${items})`);\n return this as ScriptBuilder<TNewVar>;\n }\n\n exists(item: string): this {\n this.script.push(`${this.getIndentation()}exists ${item}`);\n return this;\n }\n\n setEnd(variable: string, value: AppleScriptValue): this {\n this.script.push(\n `${this.getIndentation()}set end of ${variable} to ${this.formatValue(value)}`,\n );\n return this;\n }\n\n setEndRaw(\n variable: string,\n expression: string | Record<string, string> | ((expr: ExprBuilder) => string),\n ): this {\n let expr: string;\n if (typeof expression === 'function') {\n expr = expression(new ExprBuilder());\n } else if (typeof expression === 'string') {\n expr = expression;\n } else {\n expr = this.makeRecordFrom(expression);\n }\n this.script.push(`${this.getIndentation()}set end of ${variable} to ${expr}`);\n return this;\n }\n\n setEndRecord(\n listVariable: string,\n sourceOrExpressions: string | Record<string, string>,\n propertyMap?: Record<string, string>,\n ): this {\n let recordExpressions: Record<string, string>;\n\n if (typeof sourceOrExpressions === 'string') {\n // Form 1: .setEndRecord(list, source, {key: 'property'})\n // Automatically append \"of source\" to each property\n if (!propertyMap) {\n throw new ScriptBuilderError(\n 'propertyMap is required when sourceOrExpressions is a source object name',\n );\n }\n const sourceObj = sourceOrExpressions;\n recordExpressions = Object.entries(propertyMap).reduce<Record<string, string>>(\n (acc, [key, prop]) => {\n acc[key] = `${prop} of ${sourceObj}`;\n return acc;\n },\n {},\n );\n } else {\n // Form 2: .setEndRecord(list, {key: 'full expression'})\n recordExpressions = sourceOrExpressions;\n }\n\n const recordStr = this.makeRecordFrom(recordExpressions);\n this.script.push(`${this.getIndentation()}set end of ${listVariable} to ${recordStr}`);\n return this;\n }\n\n /**\n * Intuitive shorthand for picking properties from a source object and building a record.\n * Automatically detects full expressions vs simple property names:\n * - Simple properties (no special keywords) get \"of source\" appended\n * - Complex expressions (with 'of', 'as', 'where', etc.) are used as-is\n *\n * @param listVariable Name of the list to append the record to\n * @param sourceObject Name of the source object to extract properties from\n * @param propertyMap Mapping of record keys to property names/expressions\n *\n * @example\n * // Mix simple properties and complex expressions\n * .pickEndRecord('notesList', 'aNote', {\n * noteId: 'id', // => id of aNote\n * noteName: 'name', // => name of aNote\n * noteCreated: 'creation date of aNote as string', // used as-is (has 'as')\n * noteModified: 'modification date as string', // used as-is (has 'as')\n * })\n */\n pickEndRecord(\n listVariable: string,\n sourceObject: string,\n propertyMap: Record<string, string>,\n ): this {\n const recordExpressions = Object.entries(propertyMap).reduce<Record<string, string>>(\n (acc, [key, prop]) => {\n // Check if property looks like a full expression (contains AppleScript keywords)\n // OR if it's a temp variable from PropertyExtractor (starts with __temp_)\n // If so, use as-is. Otherwise, append \"of source\" for shorthand.\n const isFullExpression =\n prop.startsWith('__temp_') ||\n prop.includes(' of ') ||\n prop.includes(' where ') ||\n prop.includes(' as ') ||\n prop.includes(' whose ') ||\n prop.includes(' thru ') ||\n prop.includes('every ') ||\n prop.includes('some ') ||\n prop.includes('first ') ||\n prop.includes('last ') ||\n prop.includes('count ') ||\n prop.includes('length ') ||\n prop.includes(' contains ') ||\n prop.includes(' begins with ') ||\n prop.includes(' ends with ');\n\n acc[key] = isFullExpression ? prop : `${prop} of ${sourceObject}`;\n return acc;\n },\n {},\n );\n\n const recordStr = this.makeRecordFrom(recordExpressions);\n this.script.push(`${this.getIndentation()}set end of ${listVariable} to ${recordStr}`);\n return this;\n }\n\n /**\n * Set variable using ternary operator pattern with if-then-else block.\n * Much more concise than manually calling ifThenElse for simple conditional assignments.\n *\n * Generates an if-then-else block that sets the variable conditionally.\n *\n * @param variable - Variable name to set\n * @param condition - Condition to evaluate (string or ExprBuilder callback)\n * @param trueExpression - Expression to use if condition is true\n * @param falseExpression - Expression to use if condition is false\n *\n * @example\n * // With ExprBuilder for type-safe conditions\n * .setTernary('personEmail',\n * (e) => e.gt(e.count(e.property('aPerson', 'emails')), 0),\n * (e) => e.valueOfItem(1, e.property('aPerson', 'emails')),\n * 'missing value'\n * )\n *\n * @example\n * // With strings\n * .setTernary('status',\n * 'count of items > 0',\n * '\"active\"',\n * '\"empty\"'\n * )\n *\n * @example\n * // Replaces verbose ifThenElse:\n * // .ifThenElse(\n * // (e) => e.gt('x', 10),\n * // (then_) => then_.set('result', 'high'),\n * // (else_) => else_.set('result', 'low')\n * // )\n * // With concise ternary:\n * .setTernary('result', (e) => e.gt('x', 10), '\"high\"', '\"low\"')\n */\n setTernary<TNewVar extends string>(\n variable: TNewVar,\n condition: string | ((e: ExprBuilder) => string),\n trueExpression: string | ((e: ExprBuilder) => string),\n falseExpression: string | ((e: ExprBuilder) => string),\n ): ScriptBuilder<TNewVar> {\n const cond = resolveExpression(condition);\n const trueExpr = resolveExpression(trueExpression);\n const falseExpr = resolveExpression(falseExpression);\n\n // Generate proper if-then-else block (AppleScript doesn't support inline conditionals)\n return this.ifThenElse(\n cond,\n (then_) => then_.setExpression(variable, trueExpr),\n (else_) => else_.setExpression(variable, falseExpr),\n ) as ScriptBuilder<TNewVar>;\n }\n\n /**\n * Append to list using ternary operator pattern with if-then-else block.\n * Combines setEndRaw with conditional logic for ultra-concise syntax.\n *\n * Generates an if-then-else block that conditionally appends to the list.\n *\n * @param listVariable - Name of the list to append to\n * @param condition - Condition to evaluate (string or ExprBuilder callback)\n * @param trueExpression - Expression to append if condition is true\n * @param falseExpression - Expression to append if condition is false\n *\n * @example\n * // Conditionally append different values\n * .set('results', [])\n * .forEach('item', 'every file of desktop', (loop) =>\n * loop.setEndTernary('results',\n * (e) => e.gt(e.property('item', 'size'), 1000000),\n * '\"large\"',\n * '\"small\"'\n * )\n * )\n *\n * @example\n * // With complex expressions\n * .setEndTernary('emails',\n * 'count of email addresses of person > 0',\n * 'value of item 1 of email addresses of person',\n * 'missing value'\n * )\n */\n setEndTernary(\n listVariable: string,\n condition: string | ((e: ExprBuilder) => string),\n trueExpression: string | ((e: ExprBuilder) => string),\n falseExpression: string | ((e: ExprBuilder) => string),\n ): ScriptBuilder {\n const cond = resolveExpression(condition);\n const trueExpr = resolveExpression(trueExpression);\n const falseExpr = resolveExpression(falseExpression);\n\n // Generate proper if-then-else block (AppleScript doesn't support inline conditionals)\n return this.ifThenElse(\n cond,\n (then_) => then_.setEndRaw(listVariable, trueExpr),\n (else_) => else_.setEndRaw(listVariable, falseExpr),\n );\n }\n\n /**\n * Set variable to first item of collection or default value if collection is empty.\n * Ultra-shorthand for the common \"first or default\" pattern.\n *\n * Automatically generates an if-then-else block that checks the collection count and sets the variable accordingly.\n *\n * @template TNewVar - The variable name (inferred from first parameter)\n * @param variable - Variable name to set (will be added to scope)\n * @param collection - Collection expression to get first item from\n * @param defaultValue - Value to use if collection is empty (default: 'missing value')\n *\n * @example\n * // Get first email or missing value\n * .setFirstOf('personEmail', (e) => e.property('aPerson', 'emails'))\n *\n * @example\n * // Get first email or custom default\n * .setFirstOf('personEmail', (e) => e.property('aPerson', 'emails'), '\"no-email@example.com\"')\n *\n * @example\n * // With string expression\n * .setFirstOf('personEmail', 'emails of aPerson', 'missing value')\n *\n * @example\n * // Replaces verbose pattern:\n * // .setTernary('personEmail',\n * // (e) => e.gt(e.count(e.property('aPerson', 'emails')), 0),\n * // (e) => e.valueOfItem(1, e.property('aPerson', 'emails')),\n * // 'missing value'\n * // )\n */\n setFirstOf<TNewVar extends string>(\n variable: TNewVar,\n collection: string | ((e: ExprBuilder) => string),\n defaultValue: string | ((e: ExprBuilder) => string) = 'missing value',\n ): ScriptBuilder<TNewVar> {\n const coll = resolveExpression(collection);\n const defaultVal = resolveExpression(defaultValue);\n\n // Generate proper if-then-else block (AppleScript doesn't support inline conditionals)\n return this.ifThenElse(\n `count of ${coll} > 0`,\n (then_) => then_.setExpression(variable, `value of item 1 of ${coll}`),\n (else_) => else_.setExpression(variable, defaultVal),\n ) as ScriptBuilder<TNewVar>;\n }\n\n /**\n * Append first item of collection or default value to a list.\n * Ultra-shorthand for the common \"first or default\" pattern in list building.\n *\n * Automatically generates an if-then-else block that checks the collection count and appends to the list accordingly.\n *\n * @param listVariable - Name of the list to append to\n * @param collection - Collection expression to get first item from\n * @param defaultValue - Value to use if collection is empty (default: 'missing value')\n *\n * @example\n * // Build list of first emails\n * .forEach('person', 'every person', (loop) =>\n * loop.setEndFirstOf('emails', (e) => e.property('person', 'email addresses'))\n * )\n *\n * @example\n * // With custom default\n * .setEndFirstOf('results', 'items of record', '\"\"')\n */\n setEndFirstOf(\n listVariable: string,\n collection: string | ((e: ExprBuilder) => string),\n defaultValue: string | ((e: ExprBuilder) => string) = 'missing value',\n ): ScriptBuilder {\n const coll = resolveExpression(collection);\n const defaultVal = resolveExpression(defaultValue);\n\n // Generate proper if-then-else block (AppleScript doesn't support inline conditionals)\n return this.ifThenElse(\n `count of ${coll} > 0`,\n (then_) => then_.setEndRaw(listVariable, `value of item 1 of ${coll}`),\n (else_) => else_.setEndRaw(listVariable, defaultVal),\n );\n }\n\n /**\n * Set variable to property value if it exists, otherwise use default value.\n * Ultra-shorthand for the common \"take if exists or default\" pattern.\n *\n * Automatically generates an if-then-else block that checks if the property exists\n * and sets the variable accordingly, with optional type conversion.\n *\n * @template TNewVar - The variable name (inferred from first parameter)\n * @param variable - Variable name to set (will be added to scope)\n * @param property - Property expression to check and retrieve\n * @param defaultValue - Value to use if property doesn't exist (default: 'missing value')\n * @param asType - Optional type to convert property to (e.g., 'string', 'integer')\n *\n * @example\n * // Get birth date as string or missing value\n * .setIfExists('personBirthday',\n * (e) => e.property('aPerson', 'birth date'),\n * 'missing value',\n * 'string'\n * )\n *\n * @example\n * // Simpler syntax with string expression\n * .setIfExists('personBirthday', 'birth date of aPerson', 'missing value', 'string')\n *\n * @example\n * // Without type conversion\n * .setIfExists('personNote', 'note of aPerson', '\"\"')\n *\n * @example\n * // Replaces verbose pattern:\n * // .setTernary('personBirthday',\n * // (e) => e.exists(e.property('aPerson', 'birth date')),\n * // (e) => e.asType(e.property('aPerson', 'birth date'), 'string'),\n * // 'missing value'\n * // )\n */\n setIfExists<TNewVar extends string>(\n variable: TNewVar,\n property: string | ((e: ExprBuilder) => string),\n defaultValue: string | ((e: ExprBuilder) => string) = 'missing value',\n asType?: string,\n ): ScriptBuilder<TNewVar> {\n const prop = resolveExpression(property);\n const defaultVal = resolveExpression(defaultValue);\n\n // Build the value expression with optional type conversion\n const valueExpr = asType ? `${prop} as ${asType}` : prop;\n\n // Generate proper if-then-else block\n return this.ifThenElse(\n `exists ${prop}`,\n (then_) => then_.setExpression(variable, valueExpr),\n (else_) => else_.setExpression(variable, defaultVal),\n ) as ScriptBuilder<TNewVar>;\n }\n\n /**\n * Append property value to list if it exists, otherwise append default value.\n * Ultra-shorthand for the common \"take if exists or default\" pattern in list building.\n *\n * Automatically generates an if-then-else block that checks if the property exists\n * and appends to the list accordingly, with optional type conversion.\n *\n * @param listVariable - Name of the list to append to\n * @param property - Property expression to check and retrieve\n * @param defaultValue - Value to use if property doesn't exist (default: 'missing value')\n * @param asType - Optional type to convert property to (e.g., 'string', 'integer')\n *\n * @example\n * // Build list of birth dates\n * .forEach('person', 'every person', (loop) =>\n * loop.setEndIfExists('dates', 'birth date of person', '\"\"', 'string')\n * )\n *\n * @example\n * // With ExprBuilder\n * .setEndIfExists('notes',\n * (e) => e.property('contact', 'note'),\n * 'missing value'\n * )\n */\n setEndIfExists(\n listVariable: string,\n property: string | ((e: ExprBuilder) => string),\n defaultValue: string | ((e: ExprBuilder) => string) = 'missing value',\n asType?: string,\n ): ScriptBuilder {\n const prop = resolveExpression(property);\n const defaultVal = resolveExpression(defaultValue);\n\n // Build the value expression with optional type conversion\n const valueExpr = asType ? `${prop} as ${asType}` : prop;\n\n // Generate proper if-then-else block\n return this.ifThenElse(\n `exists ${prop}`,\n (then_) => then_.setEndRaw(listVariable, valueExpr),\n (else_) => else_.setEndRaw(listVariable, defaultVal),\n );\n }\n\n setProperty(variable: string, property: string, value: AppleScriptValue): this {\n this.script.push(\n `${this.getIndentation()}set ${property} of ${variable} to ${this.formatValue(value)}`,\n );\n return this;\n }\n\n makeRecordFrom(variableNames: Record<string, string>): string {\n const entries = Object.entries(variableNames)\n .map(([key, varName]) => `${key}:${varName}`)\n .join(', ');\n return `{${entries}}`;\n }\n\n // List operations\n first(items: string): this {\n this.script.push(`${this.getIndentation()}first item of ${items}`);\n return this;\n }\n\n last(items: string): this {\n this.script.push(`${this.getIndentation()}last item of ${items}`);\n return this;\n }\n\n rest(items: string): this {\n this.script.push(`${this.getIndentation()}rest of ${items}`);\n return this;\n }\n\n reverse(items: string): this {\n this.script.push(`${this.getIndentation()}reverse of ${items}`);\n return this;\n }\n\n some(items: string, test: string): this {\n this.script.push(`${this.getIndentation()}some item of ${items} where ${test}`);\n return this;\n }\n\n every(items: string, test: string): this {\n this.script.push(`${this.getIndentation()}every item of ${items} where ${test}`);\n return this;\n }\n\n whose(items: string, condition: string): string {\n return `${items} whose ${condition}`;\n }\n\n getEvery(itemType: string, location?: string): this {\n const loc = location ? ` of ${location}` : '';\n this.script.push(`${this.getIndentation()}get every ${itemType}${loc}`);\n return this;\n }\n\n getEveryWhere(itemType: string, condition: string, location?: string): this {\n const loc = location ? ` of ${location}` : '';\n this.script.push(`${this.getIndentation()}get every ${itemType}${loc} where ${condition}`);\n return this;\n }\n\n // Text operations\n offset(text: string, in_: string): this {\n this.script.push(`${this.getIndentation()}offset of ${text} in ${in_}`);\n return this;\n }\n\n contains(text: string, in_: string): this {\n this.script.push(`${this.getIndentation()}${in_} contains ${text}`);\n return this;\n }\n\n beginsWith(text: string, with_: string): this {\n this.script.push(`${this.getIndentation()}${text} begins with ${with_}`);\n return this;\n }\n\n endsWith(text: string, with_: string): this {\n this.script.push(`${this.getIndentation()}${text} ends with ${with_}`);\n return this;\n }\n\n // System operations\n path(to: string): this {\n this.script.push(`${this.getIndentation()}path to ${to}`);\n return this;\n }\n\n info(for_: string): this {\n this.script.push(`${this.getIndentation()}info for ${for_}`);\n return this;\n }\n\n do(script: string): this {\n this.script.push(`${this.getIndentation()}do script \"${this.escapeString(script)}\"`);\n return this;\n }\n\n doShellScript(command: string, administrator?: boolean): this {\n let cmd = `${this.getIndentation()}do shell script \"${this.escapeString(command)}\"`;\n if (administrator) {\n cmd += ' with administrator privileges';\n }\n this.script.push(cmd);\n return this;\n }\n\n // Raw script and building\n raw(script: string): this {\n this.script.push(`${this.getIndentation()}${script}`);\n return this;\n }\n\n // Enhanced Application control\n getRunningApplications(): this {\n this.raw(\n 'tell application \"System Events\" to return {name, bundle identifier, visible, frontmost} of every process where background only is false',\n );\n return this;\n }\n\n getFrontmostApplication(): this {\n this.raw(\n 'tell application \"System Events\" to return name of first process where frontmost is true',\n );\n return this;\n }\n\n activateApplication(appName: string): this {\n this.raw(`tell application \"${this.escapeString(appName)}\" to activate`);\n return this;\n }\n\n hideApplication(appName: string): this {\n this.raw(\n `tell application \"System Events\" to tell process \"${this.escapeString(appName)}\" to set visible to false`,\n );\n return this;\n }\n\n unhideApplication(appName: string): this {\n this.raw(\n `tell application \"System Events\" to tell process \"${this.escapeString(appName)}\" to set visible to true`,\n );\n return this;\n }\n\n quitApplication(appName: string): this {\n this.raw(`tell application \"${this.escapeString(appName)}\" to quit`);\n return this;\n }\n\n isApplicationRunning(appName: string): this {\n this.raw(\n `tell application \"System Events\" to return exists (processes where name is \"${this.escapeString(appName)}\")`,\n );\n return this;\n }\n\n getApplicationInfo(appName: string): this {\n this.raw(\n `tell application \"System Events\" to tell process \"${this.escapeString(appName)}\" to return properties`,\n );\n return this;\n }\n\n // Enhanced Window management\n getWindowInfo(appName: string, windowName?: string): this {\n this.raw(\n windowName\n ? `tell application \"${this.escapeString(appName)}\" to tell window \"${this.escapeString(windowName)}\" to return {name, id, bounds, miniaturized, zoomed}`\n : `tell application \"${this.escapeString(appName)}\" to tell front window to return {name, id, bounds, miniaturized, zoomed}`,\n );\n return this;\n }\n\n getAllWindows(appName: string): this {\n this.raw(\n `tell application \"${this.escapeString(appName)}\" to return {name, id, bounds, miniaturized, zoomed} of every window`,\n );\n return this;\n }\n\n getFrontmostWindow(appName: string): this {\n this.raw(\n `tell application \"${this.escapeString(appName)}\" to tell front window to return {name, id, bounds, miniaturized, zoomed}`,\n );\n return this;\n }\n\n setWindowBounds(\n appName: string,\n windowName: string,\n bounds: { x: number; y: number; width: number; height: number },\n ): this {\n this.raw(\n `tell application \"${this.escapeString(appName)}\" to tell window \"${this.escapeString(windowName)}\" to set bounds to {${bounds.x}, ${bounds.y}, ${bounds.x + bounds.width}, ${bounds.y + bounds.height}}`,\n );\n return this;\n }\n\n moveWindow(appName: string, windowName: string, x: number, y: number): this {\n this.raw(\n `tell application \"${this.escapeString(appName)}\" to tell window \"${this.escapeString(windowName)}\" to set position to {${x}, ${y}}`,\n );\n return this;\n }\n\n resizeWindow(appName: string, windowName: string, width: number, height: number): this {\n this.raw(\n `tell application \"${this.escapeString(appName)}\" to tell window \"${this.escapeString(windowName)}\" to set size to {${width}, ${height}}`,\n );\n return this;\n }\n\n arrangeWindows(arrangement: 'cascade' | 'tile' | 'stack'): this {\n this.raw(`tell application \"System Events\" to tell process \"Finder\" to ${arrangement} windows`);\n return this;\n }\n\n focusWindow(appName: string, windowName: string): this {\n this.raw(`tell application \"${this.escapeString(appName)}\" to activate`);\n this.raw(\n `tell application \"${this.escapeString(appName)}\" to tell window \"${this.escapeString(windowName)}\" to set index to 1`,\n );\n return this;\n }\n\n switchToWindow(appName: string, windowName: string): this {\n return this.focusWindow(appName, windowName);\n }\n\n // Enhanced UI interaction\n pressKey(key: string, modifiers?: ('command' | 'option' | 'control' | 'shift')[]): this {\n const modString = modifiers?.length ? ` using {${modifiers.join(', ')}}` : '';\n this.raw(`tell application \"System Events\" to key code ${key}${modString}`);\n return this;\n }\n\n pressKeyCode(keyCode: number, modifiers?: ('command' | 'option' | 'control' | 'shift')[]): this {\n const modString = modifiers?.length ? ` using {${modifiers.join(', ')}}` : '';\n this.raw(`tell application \"System Events\" to key code ${keyCode}${modString}`);\n return this;\n }\n\n typeText(text: string): this {\n this.raw(`tell application \"System Events\" to keystroke \"${this.escapeString(text)}\"`);\n return this;\n }\n\n clickButton(buttonName: string): this {\n this.raw(`tell application \"System Events\" to click button \"${this.escapeString(buttonName)}\"`);\n return this;\n }\n\n clickMenuItem(menuName: string, itemName: string): this {\n this.raw(\n `tell application \"System Events\" to click menu item \"${this.escapeString(itemName)}\" of menu \"${this.escapeString(menuName)}\" of menu bar 1`,\n );\n return this;\n }\n\n // Convenience helpers for cleaner API\n /**\n * Simplified tell application pattern with automatic block closing.\n * Cleaner than manually calling tell()...end().\n * @param appName Name of the application to tell\n * @param block Callback that builds commands for the application\n */\n tellApp(appName: string, block: (builder: ScriptBuilder) => void): this {\n this.tell(appName);\n block(this as ScriptBuilder);\n return this.end();\n }\n\n /**\n * Simplified if-then pattern that automatically closes the if block.\n * Cleaner than manually calling if()...thenBlock()...endif().\n * @param condition The condition to check (string or ExprBuilder callback)\n * @param thenBlock Callback that builds the then branch\n */\n ifThen(\n condition: string | ((expr: ExprBuilder) => string),\n thenBlock: (builder: ScriptBuilder) => void,\n ): this {\n this.if(condition).thenBlock();\n thenBlock(this as ScriptBuilder);\n return this.endif();\n }\n\n /**\n * Simplified if-then-else pattern that automatically closes the if block.\n * Cleaner than manually calling if()...thenBlock()...else()...endif().\n * @param condition The condition to check (string or ExprBuilder callback)\n * @param thenBlock Callback that builds the then branch\n * @param elseBlock Callback that builds the else branch\n */\n ifThenElse(\n condition: string | ((expr: ExprBuilder) => string),\n thenBlock: (builder: ScriptBuilder) => void,\n elseBlock: (builder: ScriptBuilder) => void,\n ): this {\n this.if(condition).thenBlock();\n thenBlock(this as ScriptBuilder);\n this.else();\n elseBlock(this as ScriptBuilder);\n return this.endif();\n }\n\n /**\n * Simplified try-catch pattern that automatically closes the try block.\n * Cleaner than manually calling try()...onError()...endtry().\n * @param tryBlock Callback that builds the try branch\n * @param catchBlock Callback that builds the on error branch\n */\n tryCatch(\n tryBlock: (builder: ScriptBuilder) => void,\n catchBlock: (builder: ScriptBuilder) => void,\n ): this {\n this.try();\n tryBlock(this as ScriptBuilder);\n this.onError();\n catchBlock(this as ScriptBuilder);\n return this.endtry();\n }\n\n /**\n * Simplified try-catch pattern with error variable capture.\n * @param tryBlock Callback that builds the try branch\n * @param errorVarName Name of the variable to capture the error\n * @param catchBlock Callback that builds the on error branch\n */\n tryCatchError(\n tryBlock: (builder: ScriptBuilder) => void,\n errorVarName: string,\n catchBlock: (builder: ScriptBuilder) => void,\n ): this {\n this.try();\n tryBlock(this as ScriptBuilder);\n this.onError(errorVarName);\n catchBlock(this as ScriptBuilder);\n return this.endtry();\n }\n\n /**\n * Iterate over items with automatic block closing.\n * More intuitive name for repeatWith that uses callback pattern.\n * @param variable Loop variable name\n * @param list Expression for the list to iterate (e.g., 'every note')\n * @param block Callback that builds the loop body\n */\n forEach<TNewVar extends string>(\n variable: TNewVar,\n list: string,\n block: (builder: ScriptBuilder<TNewVar>) => void,\n ): this {\n this.repeatWith(variable, list);\n block(this as ScriptBuilder<TNewVar>);\n return this.endrepeat();\n }\n\n /**\n * Iterate over items while a condition is true.\n * Combines forEach with an early exit condition for cleaner syntax.\n * @param variable Loop variable name\n * @param list Expression for the list to iterate (e.g., 'every note')\n * @param condition Condition to check before each iteration (continues while true)\n * @param block Callback that builds the loop body\n */\n forEachWhile<TNewVar extends string>(\n variable: TNewVar,\n list: string,\n condition: string | ((expr: ExprBuilder<TNewVar>) => string),\n block: (builder: ScriptBuilder<TNewVar>) => void,\n ): this {\n this.repeatWith(variable, list);\n this.ifThen(\n typeof condition === 'function' ? (e) => e.not(condition(e)) : (e) => e.not(condition),\n (b) => b.exitRepeat(),\n );\n block(this as ScriptBuilder<TNewVar>);\n return this.endrepeat();\n }\n\n /**\n * Iterate over items until a condition becomes true.\n * Combines forEach with an early exit condition for cleaner syntax.\n * @param variable Loop variable name\n * @param list Expression for the list to iterate (e.g., 'every note')\n * @param condition Condition to check before each iteration (exits when true)\n * @param block Callback that builds the loop body\n */\n forEachUntil<TNewVar extends string>(\n variable: TNewVar,\n list: string,\n condition: string | ((expr: ExprBuilder<TNewVar>) => string),\n block: (builder: ScriptBuilder<TNewVar>) => void,\n ): this {\n this.repeatWith(variable, list);\n this.ifThen(condition, (b) => b.exitRepeat());\n block(this as ScriptBuilder<TNewVar>);\n return this.endrepeat();\n }\n\n /**\n * Repeat a fixed number of times with automatic block closing.\n * @param times Number of times to repeat\n * @param block Callback that builds the loop body\n */\n repeatTimes(times: number, block: (builder: ScriptBuilder) => void): this {\n this.repeat(times);\n block(this as ScriptBuilder);\n return this.endrepeat();\n }\n\n /**\n * Repeat while condition is true with automatic block closing.\n * @param condition Condition to check (continues while true)\n * @param block Callback that builds the loop body\n */\n repeatWhileBlock(condition: string, block: (builder: ScriptBuilder) => void): this {\n this.repeatWhile(condition);\n block(this as ScriptBuilder);\n return this.endrepeat();\n }\n\n /**\n * Repeat until condition is true with automatic block closing.\n * @param condition Condition to check (continues until true)\n * @param block Callback that builds the loop body\n */\n repeatUntilBlock(condition: string, block: (builder: ScriptBuilder) => void): this {\n this.repeatUntil(condition);\n block(this as ScriptBuilder);\n return this.endrepeat();\n }\n\n /**\n * Load an existing AppleScript into the builder, preserving its structure.\n * Parses the script to detect block structure (tell, if, repeat, etc.) and\n * maintains proper nesting so you can continue editing with the builder API.\n * @param script The AppleScript source code to load\n * @returns This builder instance for method chaining\n */\n loadFromScript(script: string): this {\n const lines = script.split('\\n');\n\n for (const line of lines) {\n // Add the line as-is to preserve original formatting\n this.script.push(line);\n\n // Detect block structure to maintain proper nesting\n const trimmed = line.trim().toLowerCase();\n\n // Detect block starts and update block stack\n if (trimmed.startsWith('tell ') || /^tell application/.exec(trimmed)) {\n const target = this.extractTarget(line);\n this.pushBlock('tell', target);\n } else if (trimmed.startsWith('if ')) {\n this.pushBlock('if');\n } else if (\n trimmed.startsWith('repeat ') ||\n trimmed === 'repeat' ||\n trimmed.startsWith('repeat with ')\n ) {\n this.pushBlock('repeat');\n } else if (trimmed === 'try' || trimmed.startsWith('try ')) {\n this.pushBlock('try');\n } else if (trimmed.startsWith('on ') && !trimmed.startsWith('on error')) {\n // Only push 'on' block for handler definitions, not 'on error' in try blocks\n this.pushBlock('on');\n } else if (trimmed.startsWith('considering ')) {\n this.pushBlock('considering');\n } else if (trimmed.startsWith('ignoring ')) {\n this.pushBlock('ignoring');\n } else if (trimmed.startsWith('using ')) {\n this.pushBlock('using');\n } else if (trimmed.startsWith('with ')) {\n this.pushBlock('with');\n }\n // Detect block ends and update block stack\n else if (\n trimmed === 'end' ||\n trimmed === 'end tell' ||\n trimmed === 'end if' ||\n trimmed === 'end repeat' ||\n trimmed === 'end try' ||\n trimmed === 'end considering' ||\n trimmed === 'end ignoring' ||\n trimmed === 'end using' ||\n trimmed === 'end with' ||\n trimmed.startsWith('end ')\n ) {\n this.popBlock();\n }\n }\n\n return this;\n }\n\n /**\n * Helper method to extract the target from a tell statement.\n * @param line The tell statement line\n * @returns The extracted target or undefined\n */\n private extractTarget(line: string): string | undefined {\n const match = /tell\\s+(?:application\\s+)?\"?([^\"]+)\"?/i.exec(line);\n return match ? match[1].trim() : undefined;\n }\n\n build(): string {\n this.validateBlockStack();\n return this.script.join('\\n');\n }\n\n reset(): this {\n this.script = [];\n this.indentLevel = 0;\n this.blockStack = [];\n return this;\n }\n}\n","import { exec as execCallback } from 'node:child_process';\nimport { promisify } from 'node:util';\nimport type { OsaScriptOptions, Prettify, ScriptExecutionResult } from './types.js';\n\nconst exec = promisify(execCallback);\n\n/**\n * ScriptExecutor - Core execution engine for AppleScript and JavaScript\n *\n * **IMPORTANT: Error Handling**\n *\n * This class implements robust error handling that is critical for production use:\n *\n * 1. **Type-Safe Error Extraction**: Errors from `child_process.exec` can be various types\n * (Error objects, ErrnoException, etc.). The error handling properly extracts:\n * - Error messages from Error instances or converts other types to strings\n * - Exit codes from ErrnoException.code (which can be string or number)\n * - Defaults to exit code 1 if code is missing or invalid\n *\n * 2. **Exit Code Handling**: The exit code extraction handles three cases:\n * - String codes: Parsed with parseInt (e.g., \"1\" -> 1)\n * - Number codes: Used directly\n * - Missing/null codes: Defaults to 1\n *\n * 3. **Why This Matters**: Without proper error handling:\n * - TypeScript would allow unsafe type assertions\n * - Runtime errors could occur when accessing error.code\n * - Exit codes might be undefined, causing downstream issues\n *\n * **Usage Example:**\n * ```typescript\n * const result = await ScriptExecutor.execute('tell app \"Finder\" to activate');\n * if (!result.success) {\n * console.error(`Script failed with exit code ${result.exitCode}: ${result.error}`);\n * }\n * ```\n *\n * **Testing Considerations:**\n * - Always test both success and failure paths\n * - Mock different error types (Error, ErrnoException, etc.)\n * - Verify exit codes are correctly extracted and defaulted\n * - Ensure error messages are properly extracted regardless of error type\n *\n * @see {@link ScriptExecutionResult} for the result structure\n * @see {@link OsaScriptOptions} for execution options\n */\nexport class ScriptExecutor {\n private static buildFlags(options: OsaScriptOptions = {}): string {\n const flags: string[] = [];\n\n if (options.language) {\n flags.push(`-l ${options.language}`);\n }\n\n const outputFlags = [];\n if (options.humanReadable !== false) outputFlags.push('h');\n if (options.errorToStdout) outputFlags.push('o');\n\n if (outputFlags.length > 0) {\n flags.push(`-s ${outputFlags.join('')}`);\n }\n\n return flags.join(' ');\n }\n\n /**\n * Execute an AppleScript or JavaScript string\n *\n * **Error Handling:**\n * This method implements comprehensive error handling that safely extracts:\n * - Error messages from any error type (Error, ErrnoException, etc.)\n * - Exit codes with proper type checking and defaults\n *\n * **Important Notes:**\n * - Script strings are automatically escaped for shell safety\n * - Single quotes in scripts are escaped using the pattern: `'` -> `'\"'\"'`\n * - Always returns a result object, never throws (errors are captured in result)\n *\n * @param script - The AppleScript or JavaScript code to execute\n * @param options - Execution options (language, output format, etc.)\n * @returns Promise resolving to execution result with success flag, output, error, and exit code\n *\n * @example\n * ```typescript\n * const result = await ScriptExecutor.execute('tell app \"Finder\" to get name');\n * if (result.success) {\n * console.log(result.output); // \"Finder\"\n * } else {\n * console.error(`Failed: ${result.error} (exit code: ${result.exitCode})`);\n * }\n * ```\n */\n static async execute<T = string>(\n script: string,\n options: OsaScriptOptions = {},\n ): Promise<ScriptExecutionResult<T>> {\n try {\n const flags = ScriptExecutor.buildFlags(options);\n const command = `osascript ${flags} -e '${script.replace(/'/g, \"'\\\"'\\\"'\")}'`;\n\n const { stdout } = await exec(command);\n\n return {\n success: true,\n output: stdout.trim() as Prettify<T>,\n exitCode: 0,\n };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n const errnoException = error as { code?: string | number | null };\n const exitCode =\n typeof errnoException.code === 'string'\n ? Number.parseInt(errnoException.code, 10) || 1\n : typeof errnoException.code === 'number'\n ? errnoException.code\n : 1;\n return {\n success: false,\n output: null as Prettify<T>,\n error: message,\n exitCode,\n };\n }\n }\n\n /**\n * Execute an AppleScript or JavaScript file\n *\n * **Error Handling:**\n * Uses the same robust error handling as `execute()` method.\n * See {@link ScriptExecutor.execute} for details on error handling patterns.\n *\n * **Important Notes:**\n * - File paths are passed directly to osascript (no shell escaping needed)\n * - File must exist and be readable\n * - Always returns a result object, never throws\n *\n * @param filePath - Path to the script file (.applescript, .scpt, etc.)\n * @param options - Execution options (language, output format, etc.)\n * @returns Promise resolving to execution result with success flag, output, error, and exit code\n *\n * @example\n * ```typescript\n * const result = await ScriptExecutor.executeFile('./scripts/my-script.applescript');\n * if (result.success) {\n * console.log(result.output);\n * }\n * ```\n */\n static async executeFile<T = string>(\n filePath: string,\n options: OsaScriptOptions = {},\n ): Promise<ScriptExecutionResult<T>> {\n try {\n const flags = ScriptExecutor.buildFlags(options);\n const command = `osascript ${flags} \"${filePath}\"`;\n\n const { stdout } = await exec(command);\n\n return {\n success: true,\n output: stdout.trim() as Prettify<T>,\n exitCode: 0,\n };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n const errnoException = error as { code?: string | number | null };\n const exitCode =\n typeof errnoException.code === 'string'\n ? Number.parseInt(errnoException.code, 10) || 1\n : typeof errnoException.code === 'number'\n ? errnoException.code\n : 1;\n return {\n success: false,\n output: null as Prettify<T>,\n error: message,\n exitCode,\n };\n }\n }\n}\n","import { exec as execCallback } from 'node:child_process';\nimport { randomBytes } from 'node:crypto';\nimport { writeFile } from 'node:fs/promises';\nimport { tmpdir } from 'node:os';\nimport { join } from 'node:path';\nimport { promisify } from 'node:util';\n\nconst exec = promisify(execCallback);\n\nexport interface CompileOptions {\n language?: 'AppleScript' | 'JavaScript';\n executeOnly?: boolean;\n stayOpen?: boolean;\n useStartupScreen?: boolean;\n outputPath?: string;\n bundleScript?: boolean;\n}\n\nexport interface CompileResult {\n success: boolean;\n outputPath: string;\n error?: string;\n}\n\nfunction buildCompileFlags(options: CompileOptions): string[] {\n const flags: string[] = [];\n\n if (options.language) {\n flags.push(`-l ${options.language}`);\n }\n\n if (options.executeOnly) {\n flags.push('-x');\n }\n\n if (options.stayOpen) {\n flags.push('-s');\n }\n\n if (options.useStartupScreen) {\n flags.push('-u');\n }\n\n return flags;\n}\n\nexport async function compileScript(\n script: string,\n options: CompileOptions = {},\n): Promise<CompileResult> {\n try {\n // Create a temporary file for the source script\n const tmpId = randomBytes(8).toString('hex');\n const sourcePath = join(tmpdir(), `script_${tmpId}.applescript`);\n await writeFile(sourcePath, script, 'utf8');\n\n // Determine output path\n const outputPath = options.outputPath ?? join(tmpdir(), `script_${tmpId}.scpt`);\n const outputExt = options.bundleScript ? '.scptd' : '.scpt';\n const finalOutputPath = outputPath.endsWith(outputExt)\n ? outputPath\n : `${outputPath}${outputExt}`;\n\n // Build and execute compile command\n const flags = buildCompileFlags(options);\n const command = `osacompile ${flags.join(' ')} -o \"${finalOutputPath}\" \"${sourcePath}\"`;\n\n await exec(command);\n\n return {\n success: true,\n outputPath: finalOutputPath,\n };\n } catch (error) {\n const err = error as { message: string };\n return {\n success: false,\n outputPath: '',\n error: err.message,\n };\n }\n}\n\nexport async function compileScriptFile(\n filePath: string,\n options: CompileOptions = {},\n): Promise<CompileResult> {\n try {\n // Determine output path\n const outputPath = options.outputPath ?? filePath.replace(/\\.[^.]+$/, '.scpt');\n const outputExt = options.bundleScript ? '.scptd' : '.scpt';\n const finalOutputPath = outputPath.endsWith(outputExt)\n ? outputPath\n : `${outputPath}${outputExt}`;\n\n // Build and execute compile command\n const flags = buildCompileFlags(options);\n const command = `osacompile ${flags.join(' ')} -o \"${finalOutputPath}\" \"${filePath}\"`;\n\n await exec(command);\n\n return {\n success: true,\n outputPath: finalOutputPath,\n };\n } catch (error) {\n const err = error as { message: string };\n return {\n success: false,\n outputPath: '',\n error: err.message,\n };\n }\n}\n","import { exec as execCallback } from 'node:child_process';\nimport { promisify } from 'node:util';\n\nconst exec = promisify(execCallback);\n\nexport interface DecompileResult {\n success: boolean;\n source?: string;\n error?: string;\n}\n\nexport async function decompileScript(scriptPath: string): Promise<DecompileResult> {\n try {\n const { stdout, stderr } = await exec(`osadecompile \"${scriptPath}\"`);\n\n if (stderr) {\n return {\n success: false,\n error: stderr.trim(),\n };\n }\n\n return {\n success: true,\n source: stdout.trim(),\n };\n } catch (error) {\n const err = error as { message: string };\n return {\n success: false,\n error: err.message,\n };\n }\n}\n","import { exec as execCallback } from 'node:child_process';\nimport { promisify } from 'node:util';\n\nconst exec = promisify(execCallback);\n\nexport interface OsaLanguageInfo {\n name: string;\n subtype: string;\n manufacturer: string;\n capabilities: {\n compiling: boolean;\n sourceData: boolean;\n coercion: boolean;\n eventHandling: boolean;\n recording: boolean;\n convenience: boolean;\n dialects: boolean;\n appleEvents: boolean;\n };\n description?: string;\n}\n\n/**\n * Parse capability flags from osalang output\n *\n * **IMPORTANT: Empty String Handling**\n *\n * This function safely handles empty flag strings:\n * - Empty strings result in all capabilities being false\n * - Prevents runtime errors when flags are missing from language output\n * - Used by getInstalledLanguages() which defaults flags to '' when missing\n *\n * **Flag Meanings:**\n * - 'c': compiling - can compile scripts\n * - 'g': sourceData - supports source data\n * - 'x': coercion - supports type coercion\n * - 'e': eventHandling - supports event handling\n * - 'r': recording - supports script recording\n * - 'v': convenience - convenience features\n * - 'd': dialects - supports dialects\n * - 'h': appleEvents - supports Apple Events\n *\n * @param flags - Capability flags string from osalang output (e.g., \"cgxervdh\")\n * @returns Object with boolean flags for each capability\n *\n * @example\n * ```typescript\n * const caps = parseCapabilityFlags('cgxervdh');\n * // { compiling: true, sourceData: true, ... }\n *\n * const emptyCaps = parseCapabilityFlags('');\n * // { compiling: false, sourceData: false, ... } (all false)\n * ```\n */\nfunction parseCapabilityFlags(flags: string): OsaLanguageInfo['capabilities'] {\n return {\n compiling: flags.includes('c'),\n sourceData: flags.includes('g'),\n coercion: flags.includes('x'),\n eventHandling: flags.includes('e'),\n recording: flags.includes('r'),\n convenience: flags.includes('v'),\n dialects: flags.includes('d'),\n appleEvents: flags.includes('h'),\n };\n}\n\n/**\n * Get all installed OSA (Open Scripting Architecture) languages\n *\n * **IMPORTANT: Empty Output Handling**\n *\n * This function includes critical handling for edge cases:\n *\n * 1. **Empty Output**: When `osalang -L` returns empty output (e.g., on systems\n * with no languages installed, or in test environments), the function:\n * - Filters out empty lines to prevent parsing errors\n * - Returns an empty array instead of crashing\n *\n * 2. **Missing Flags**: When a language line doesn't have capability flags:\n * - Defaults to empty string for flags parameter\n * - parseCapabilityFlags() safely handles empty strings (all capabilities false)\n *\n * 3. **Why This Matters**: Without proper empty output handling:\n * - Empty stdout would cause split() to return [''], leading to parsing errors\n * - Missing flags would cause undefined access in parseCapabilityFlags()\n * - Tests and edge cases would fail unpredictably\n *\n * **Usage Example:**\n * ```typescript\n * const languages = await getInstalledLanguages();\n * if (languages.length === 0) {\n * console.warn('No OSA languages found');\n * } else {\n * languages.forEach(lang => console.log(`${lang.name}: ${lang.capabilities}`));\n * }\n * ```\n *\n * **Testing Considerations:**\n * - Always test with empty output (simulates edge cases)\n * - Test with malformed lines (missing flags, etc.)\n * - Verify empty arrays are returned gracefully\n * - Ensure parseCapabilityFlags handles empty strings safely\n *\n * @returns Promise resolving to array of language information objects\n * @throws Never throws - always returns array (empty if no languages found)\n *\n * @see {@link OsaLanguageInfo} for the language information structure\n * @see {@link parseCapabilityFlags} for capability flag parsing\n */\nexport async function getInstalledLanguages(): Promise<OsaLanguageInfo[]> {\n const { stdout } = await exec('osalang -L');\n // CRITICAL: Filter empty lines to handle empty output gracefully\n // Empty output can occur in test environments or edge cases\n const lines = stdout\n .trim()\n .split('\\n')\n .filter((line) => line.trim().length > 0);\n\n return lines.map((line) => {\n // Format: name manu flags description\n // CRITICAL: Default flags to empty string to handle missing flags\n // This prevents undefined access in parseCapabilityFlags()\n const [name, manufacturer, flags = '', ...descParts] = line.split(/\\s+/);\n const description = descParts\n .join(' ')\n .replace(/\\(([^)]+)\\)/, '$1')\n .trim();\n\n return {\n name,\n subtype: name,\n manufacturer,\n capabilities: parseCapabilityFlags(flags),\n description,\n };\n });\n}\n\nexport async function getDefaultLanguage(): Promise<OsaLanguageInfo> {\n const { stdout } = await exec('osalang -d');\n const defaultLang = stdout.trim();\n const allLangs = await getInstalledLanguages();\n return allLangs.find((lang) => lang.name === defaultLang) ?? allLangs[0];\n}\n","import { readFile } from 'node:fs/promises';\nimport { AppleScriptBuilder } from './builder.js';\n\n/**\n * Load an AppleScript file and return a builder instance that can be edited further.\n * The script is parsed to maintain proper block structure (tell, if, repeat, etc.)\n * so you can continue adding commands using the fluent builder API.\n *\n * @param filePath Absolute or relative path to the AppleScript (.applescript or .scpt) file\n * @returns Promise that resolves to an AppleScriptBuilder instance with the loaded script\n * @throws Error if the file cannot be read\n *\n * @example\n * ```typescript\n * // Load an existing script and append new commands\n * const script = await loadScript('./my-script.applescript');\n * script\n * .tell('Finder')\n * .displayDialog('Script loaded and extended!')\n * .endtell();\n *\n * const result = await runScript(script);\n * console.log(result.output);\n * ```\n */\nexport async function loadScript(filePath: string): Promise<AppleScriptBuilder> {\n try {\n const content = await readFile(filePath, 'utf-8');\n const builder = new AppleScriptBuilder();\n builder.loadFromScript(content);\n return builder;\n } catch (error: unknown) {\n if (error instanceof Error) {\n throw new Error(`Failed to load script from ${filePath}: ${error.message}`);\n }\n throw error;\n }\n}\n","import { exec as execCallback } from 'node:child_process';\nimport { promisify } from 'node:util';\nimport { XMLParser } from 'fast-xml-parser';\nimport type {\n ApplicationDictionary,\n Class,\n Command,\n Element,\n Enumeration,\n Enumerator,\n Parameter,\n Property,\n Suite,\n TypeInfo,\n} from './types.js';\n\nconst exec = promisify(execCallback);\n\n// Cache for sdef results to avoid repeated parsing\nconst sdefCache = new Map<string, ApplicationDictionary>();\n\n/**\n * Extract the scripting definition (sdef) XML for a macOS application\n * @param appPath - Path to the application (e.g., '/System/Applications/Messages.app')\n * @returns Promise resolving to the sdef XML string\n */\nexport async function getSdef(appPath: string): Promise<string> {\n try {\n const { stdout } = await exec(`sdef \"${appPath}\"`);\n return stdout;\n } catch (error) {\n if (error instanceof Error) {\n throw new Error(`Failed to get sdef for ${appPath}: ${error.message}`);\n }\n throw error;\n }\n}\n\n/**\n * Parse sdef XML into a structured ApplicationDictionary\n * @param xml - The sdef XML string to parse\n * @returns Parsed ApplicationDictionary\n */\nexport function parseSdef(xml: string): ApplicationDictionary {\n const parser = new XMLParser({\n ignoreAttributes: false,\n attributeNamePrefix: '@_',\n textNodeName: '#text',\n parseAttributeValue: false,\n trimValues: true,\n isArray: (name) => {\n // These elements can appear multiple times\n return [\n 'suite',\n 'class',\n 'command',\n 'enumeration',\n 'property',\n 'element',\n 'parameter',\n 'enumerator',\n 'type',\n ].includes(name);\n },\n });\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const parsed = parser.parse(xml);\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access\n const dictionary = parsed.dictionary;\n\n if (!dictionary) {\n throw new Error('Invalid sdef XML: missing dictionary root element');\n }\n\n const suites: Suite[] = [];\n\n // Handle suites (can be an array or single object)\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access\n const suitesData = Array.isArray(dictionary.suite)\n ? // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n dictionary.suite\n : // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n dictionary.suite\n ? // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n [dictionary.suite]\n : [];\n\n for (const suiteData of suitesData) {\n const suite: Suite = {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access\n name: suiteData['@_name'] ?? '',\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access\n code: suiteData['@_code'] ?? '',\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access\n description: suiteData['@_description'],\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n classes: parseClasses(suiteData.class),\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n commands: parseCommands(suiteData.command),\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n enumerations: parseEnumerations(suiteData.enumeration),\n };\n suites.push(suite);\n }\n\n return { suites };\n}\n\n// XML parsing helper functions - these work with dynamic XML parser output\n/* eslint-disable @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-argument */\n\nfunction parseClasses(classesData: unknown): Class[] {\n if (!classesData) return [];\n const classes = Array.isArray(classesData) ? classesData : [classesData];\n\n return classes.map((cls: any) => ({\n name: cls['@_name'] ?? '',\n code: cls['@_code'] ?? '',\n description: cls['@_description'],\n plural: cls['@_plural'],\n inherits: cls['@_inherits'],\n properties: parseProperties(cls.property),\n elements: parseElements(cls.element),\n }));\n}\n\nfunction parseProperties(propertiesData: unknown): Property[] {\n if (!propertiesData) return [];\n const properties = Array.isArray(propertiesData) ? propertiesData : [propertiesData];\n\n return properties.map((prop: any) => ({\n name: prop['@_name'] ?? '',\n code: prop['@_code'] ?? '',\n type: parseTypeInfo(prop['@_type'], prop.type),\n access: (prop['@_access'] as 'r' | 'rw' | undefined) ?? 'rw',\n description: prop['@_description'],\n }));\n}\n\nfunction parseElements(elementsData: unknown): Element[] {\n if (!elementsData) return [];\n const elements = Array.isArray(elementsData) ? elementsData : [elementsData];\n\n return elements.map((elem: any) => ({\n type: elem['@_type'] ?? '',\n access: elem['@_access'] as 'r' | 'rw' | undefined,\n }));\n}\n\nfunction parseCommands(commandsData: unknown): Command[] {\n if (!commandsData) return [];\n const commands = Array.isArray(commandsData) ? commandsData : [commandsData];\n\n return commands.map((cmd: any) => ({\n name: cmd['@_name'] ?? '',\n code: cmd['@_code'] ?? '',\n description: cmd['@_description'],\n directParameter: cmd['direct-parameter']\n ? {\n type: cmd['direct-parameter']['@_type'] ?? '',\n description: cmd['direct-parameter']['@_description'],\n }\n : undefined,\n parameters: parseParameters(cmd.parameter),\n result: cmd.result\n ? {\n type: cmd.result['@_type'] ?? '',\n description: cmd.result['@_description'],\n }\n : undefined,\n }));\n}\n\nfunction parseParameters(parametersData: unknown): Parameter[] {\n if (!parametersData) return [];\n const parameters = Array.isArray(parametersData) ? parametersData : [parametersData];\n\n return parameters.map((param: any) => ({\n name: param['@_name'] ?? '',\n code: param['@_code'] ?? '',\n type: parseTypeInfo(param['@_type'], param.type),\n optional: param['@_optional'] === 'yes',\n description: param['@_description'],\n }));\n}\n\nfunction parseEnumerations(enumerationsData: unknown): Enumeration[] {\n if (!enumerationsData) return [];\n const enumerations = Array.isArray(enumerationsData) ? enumerationsData : [enumerationsData];\n\n return enumerations.map((enumData: any) => ({\n name: enumData['@_name'] ?? '',\n code: enumData['@_code'] ?? '',\n enumerators: parseEnumerators(enumData.enumerator),\n }));\n}\n\nfunction parseEnumerators(enumeratorsData: unknown): Enumerator[] {\n if (!enumeratorsData) return [];\n const enumerators = Array.isArray(enumeratorsData) ? enumeratorsData : [enumeratorsData];\n\n return enumerators.map((enumer: any) => ({\n name: enumer['@_name'] ?? '',\n code: enumer['@_code'] ?? '',\n description: enumer['@_description'],\n }));\n}\n\nfunction parseTypeInfo(typeAttr: string | undefined, typeElement: any): TypeInfo {\n // If type is specified as an attribute\n if (typeAttr) {\n return { type: typeAttr };\n }\n\n // If type is specified as a nested element\n if (typeElement) {\n const types = Array.isArray(typeElement) ? typeElement : [typeElement];\n // For now, use the first type if multiple are specified\n const firstType = types[0];\n return {\n type: firstType['@_type'] ?? 'any',\n list: firstType['@_list'] === 'yes',\n };\n }\n\n return { type: 'any' };\n}\n\n/* eslint-enable @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-argument */\n\n/**\n * Get and parse the application dictionary for a macOS application\n * @param appPath - Path to the application (e.g., '/System/Applications/Messages.app')\n * @param useCache - Whether to use cached results (default: true)\n * @returns Promise resolving to the parsed ApplicationDictionary\n */\nexport async function getApplicationDictionary(\n appPath: string,\n useCache = true,\n): Promise<ApplicationDictionary> {\n // Check cache first\n if (useCache && sdefCache.has(appPath)) {\n const cached = sdefCache.get(appPath);\n if (cached) return cached;\n }\n\n // Get and parse sdef\n const xml = await getSdef(appPath);\n const dictionary = parseSdef(xml);\n\n // Cache the result\n if (useCache) {\n sdefCache.set(appPath, dictionary);\n }\n\n return dictionary;\n}\n\n/**\n * Clear the sdef cache\n */\nexport function clearSdefCache(): void {\n sdefCache.clear();\n}\n\n/**\n * Get a list of all commands in an application dictionary\n * @param dictionary - The application dictionary\n * @returns Array of all commands from all suites\n */\nexport function getAllCommands(dictionary: ApplicationDictionary): Command[] {\n return dictionary.suites.flatMap((suite) => suite.commands);\n}\n\n/**\n * Get a list of all classes in an application dictionary\n * @param dictionary - The application dictionary\n * @returns Array of all classes from all suites\n */\nexport function getAllClasses(dictionary: ApplicationDictionary): Class[] {\n return dictionary.suites.flatMap((suite) => suite.classes);\n}\n\n/**\n * Find a command by name in an application dictionary\n * @param dictionary - The application dictionary\n * @param commandName - The name of the command to find\n * @returns The command if found, undefined otherwise\n */\nexport function findCommand(\n dictionary: ApplicationDictionary,\n commandName: string,\n): Command | undefined {\n for (const suite of dictionary.suites) {\n const command = suite.commands.find((cmd) => cmd.name === commandName);\n if (command) return command;\n }\n return;\n}\n\n/**\n * Find a class by name in an application dictionary\n * @param dictionary - The application dictionary\n * @param className - The name of the class to find\n * @returns The class if found, undefined otherwise\n */\nexport function findClass(dictionary: ApplicationDictionary, className: string): Class | undefined {\n for (const suite of dictionary.suites) {\n const cls = suite.classes.find((c) => c.name === className);\n if (cls) return cls;\n }\n return;\n}\n","/**\n * High-level data source APIs for common macOS operations.\n *\n * These modules provide clean, succinct entry points for typical macOS data sourcing tasks.\n * Each module wraps the low-level builder API to provide simple, async functions.\n *\n * @example\n * // Get all open windows across all applications\n * import { windows } from 'applescript-node/sources';\n * const allWindows = await windows.getAll();\n *\n * @example\n * // Get all running applications\n * import { applications } from 'applescript-node/sources';\n * const apps = await applications.getAll();\n *\n * @example\n * // Get system information\n * import { system } from 'applescript-node/sources';\n * const info = await system.getInfo();\n *\n * @module sources\n */\n\nexport type { ApplicationInfo } from './applications.js';\nexport * as applications from './applications.js';\nexport type { DisplayInfo, SystemInfo, VolumeInfo } from './system.js';\nexport * as system from './system.js';\n// Re-export types for convenience\nexport type { WindowInfo } from './windows.js';\nexport * as windows from './windows.js';\n","import { ScriptExecutor } from '../executor.js';\nimport { createScript } from '../index.js';\n\n/**\n * Application information returned from macOS\n */\nexport interface ApplicationInfo {\n name: string;\n bundleId: string;\n pid: number;\n visible: boolean;\n frontmost: boolean;\n windowCount: number;\n}\n\n/**\n * Get all running applications\n * @param includeBackgroundApps - Include background-only applications (default: false)\n * @returns Array of running application information\n *\n * @example\n * import { applications } from 'applescript-node/sources';\n * const apps = await applications.getAll();\n * console.log(`Found ${apps.length} running applications`);\n */\nexport async function getAll(includeBackgroundApps = false): Promise<ApplicationInfo[]> {\n const whereClause = includeBackgroundApps ? '' : ' whose background only is false';\n\n const script = createScript()\n .tell('System Events')\n .set('appsList', [])\n .forEach('proc', `every process${whereClause}`, (b) =>\n b.tryCatch(\n (tryBlock) =>\n tryBlock\n .setExpression('procName', (e) => e.property('proc', 'name'))\n .setExpression('procBundleId', (e) => e.property('proc', 'bundle identifier'))\n .setExpression('procPid', (e) => e.property('proc', 'unix id'))\n .setExpression('procVisible', (e) => e.property('proc', 'visible'))\n .setExpression('procFrontmost', (e) => e.property('proc', 'frontmost'))\n .setExpression('procWindowCount', (e) => e.count(e.property('proc', 'windows')))\n .pickEndRecord('appsList', 'proc', {\n name: 'procName',\n bundleId: 'procBundleId',\n pid: 'procPid',\n visible: 'procVisible',\n frontmost: 'procFrontmost',\n windowCount: 'procWindowCount',\n }),\n (catchBlock) => catchBlock.comment('Skip processes with errors'),\n ),\n )\n .returnAsJson('appsList', {\n name: 'name',\n bundleId: 'bundleId',\n pid: 'pid',\n visible: 'visible',\n frontmost: 'frontmost',\n windowCount: 'windowCount',\n })\n .endtell();\n\n const result = await ScriptExecutor.execute(script.build());\n\n if (!result.success) {\n throw new Error(`Failed to get applications: ${result.error}`);\n }\n\n // Parse JSON output\n return JSON.parse(result.output ?? '[]') as ApplicationInfo[];\n}\n\n/**\n * Get the frontmost (focused) application\n * @returns The currently focused application\n *\n * @example\n * import { applications } from 'applescript-node/sources';\n * const frontApp = await applications.getFrontmost();\n * console.log(`Active application: ${frontApp.name}`);\n */\nexport async function getFrontmost(): Promise<ApplicationInfo> {\n const script = createScript()\n .tell('System Events')\n .setExpression('frontProc', 'first process whose frontmost is true')\n .returnJsonObject({\n name: 'name of frontProc',\n bundleId: 'bundle identifier of frontProc',\n pid: 'unix id of frontProc',\n visible: 'visible of frontProc',\n frontmost: 'true',\n windowCount: 'count of windows of frontProc',\n })\n .endtell();\n\n const result = await ScriptExecutor.execute(script.build());\n\n if (!result.success) {\n throw new Error(`Failed to get frontmost application: ${result.error}`);\n }\n\n // Parse JSON output\n return JSON.parse(result.output ?? '{}') as ApplicationInfo;\n}\n\n/**\n * Check if an application is running\n * @param appName - Name of the application to check\n * @returns True if the application is running, false otherwise\n *\n * @example\n * import { applications } from 'applescript-node/sources';\n * if (await applications.isRunning('Safari')) {\n * console.log('Safari is running');\n * }\n */\nexport async function isRunning(appName: string): Promise<boolean> {\n const escapedAppName = appName.replace(/\"/g, '\\\\\"');\n const script = `\n tell application \"System Events\"\n return exists (processes where name is \"${escapedAppName}\")\n end tell\n `;\n\n const result = await ScriptExecutor.execute(script);\n return result.success && result.output === 'true';\n}\n\n/**\n * Get application by name\n * @param appName - Name of the application\n * @returns Application information, or null if not running\n *\n * @example\n * import { applications } from 'applescript-node/sources';\n * const safari = await applications.getByName('Safari');\n * if (safari) {\n * console.log(`Safari PID: ${safari.pid}`);\n * }\n */\nexport async function getByName(appName: string): Promise<ApplicationInfo | null> {\n const allApps = await getAll(true);\n return allApps.find((app) => app.name === appName) ?? null;\n}\n\n/**\n * Activate (bring to front) an application\n * @param appName - Name of the application to activate\n *\n * @example\n * import { applications } from 'applescript-node/sources';\n * await applications.activate('Safari');\n */\nexport async function activate(appName: string): Promise<void> {\n const script = createScript().tell(appName).activate().endtell();\n\n const result = await ScriptExecutor.execute(script.build());\n\n if (!result.success) {\n throw new Error(`Failed to activate ${appName}: ${result.error}`);\n }\n}\n\n/**\n * Launch an application without activating it\n * @param appName - Name of the application to launch\n *\n * @example\n * import { applications } from 'applescript-node/sources';\n * await applications.launch('Calendar');\n */\nexport async function launch(appName: string): Promise<void> {\n const script = createScript().tell(appName).launch().endtell();\n\n const result = await ScriptExecutor.execute(script.build());\n\n if (!result.success) {\n throw new Error(`Failed to launch ${appName}: ${result.error}`);\n }\n}\n\n/**\n * Quit an application\n * @param appName - Name of the application to quit\n *\n * @example\n * import { applications } from 'applescript-node/sources';\n * await applications.quit('TextEdit');\n */\nexport async function quit(appName: string): Promise<void> {\n const script = createScript().tell(appName).quit().endtell();\n\n const result = await ScriptExecutor.execute(script.build());\n\n if (!result.success) {\n throw new Error(`Failed to quit ${appName}: ${result.error}`);\n }\n}\n\n/**\n * Hide an application\n * @param appName - Name of the application to hide\n *\n * @example\n * import { applications } from 'applescript-node/sources';\n * await applications.hide('Safari');\n */\nexport async function hide(appName: string): Promise<void> {\n const script = createScript()\n .tell('System Events')\n .tell(`process \"${appName.replace(/\"/g, '\\\\\"')}\"`)\n .raw('set visible to false')\n .endtell()\n .endtell();\n\n const result = await ScriptExecutor.execute(script.build());\n\n if (!result.success) {\n throw new Error(`Failed to hide ${appName}: ${result.error}`);\n }\n}\n\n/**\n * Show (unhide) an application\n * @param appName - Name of the application to show\n *\n * @example\n * import { applications } from 'applescript-node/sources';\n * await applications.show('Safari');\n */\nexport async function show(appName: string): Promise<void> {\n const script = createScript()\n .tell('System Events')\n .tell(`process \"${appName.replace(/\"/g, '\\\\\"')}\"`)\n .raw('set visible to true')\n .endtell()\n .endtell();\n\n const result = await ScriptExecutor.execute(script.build());\n\n if (!result.success) {\n throw new Error(`Failed to show ${appName}: ${result.error}`);\n }\n}\n","import { ScriptExecutor } from '../executor.js';\nimport { createScript } from '../index.js';\n\n/**\n * System information returned from macOS\n */\nexport interface SystemInfo {\n computerName: string;\n hostname: string;\n osVersion: string;\n systemVersion: string;\n userName: string;\n homeDirectory: string;\n architecture: string;\n}\n\n/**\n * Volume information for mounted drives\n */\nexport interface VolumeInfo {\n name: string;\n capacity: number;\n freeSpace: number;\n usedSpace: number;\n format: string;\n ejectable: boolean;\n}\n\n/**\n * Display information\n */\nexport interface DisplayInfo {\n id: number;\n bounds: {\n x: number;\n y: number;\n width: number;\n height: number;\n };\n}\n\n/**\n * Get system information\n * @returns System information including computer name, OS version, etc.\n *\n * @example\n * import { system } from 'applescript-node/sources';\n * const info = await system.getInfo();\n * console.log(`Computer: ${info.computerName}`);\n * console.log(`OS: ${info.osVersion}`);\n */\nexport async function getInfo(): Promise<SystemInfo> {\n const script = `\n set computerName to computer name of (system info)\n set userName to short user name of (system info)\n set osVersion to system version of (system info)\n\n set homeDir to POSIX path of (path to home folder)\n\n -- Get hostname via shell\n set hostname to do shell script \"hostname\"\n\n -- Get architecture via shell\n set arch to do shell script \"uname -m\"\n\n return \"{\" & ¬\n \"\\\\\"computerName\\\\\":\\\\\"\" & computerName & \"\\\\\",\" & ¬\n \"\\\\\"hostname\\\\\":\\\\\"\" & hostname & \"\\\\\",\" & ¬\n \"\\\\\"osVersion\\\\\":\\\\\"\" & osVersion & \"\\\\\",\" & ¬\n \"\\\\\"systemVersion\\\\\":\\\\\"\" & osVersion & \"\\\\\",\" & ¬\n \"\\\\\"userName\\\\\":\\\\\"\" & userName & \"\\\\\",\" & ¬\n \"\\\\\"homeDirectory\\\\\":\\\\\"\" & homeDir & \"\\\\\",\" & ¬\n \"\\\\\"architecture\\\\\":\\\\\"\" & arch & \"\\\\\"\" & ¬\n \"}\"\n `;\n\n const result = await ScriptExecutor.execute(script);\n\n if (!result.success) {\n throw new Error(`Failed to get system info: ${result.error}`);\n }\n\n return JSON.parse(result.output ?? '{}') as SystemInfo;\n}\n\n/**\n * Get information about mounted volumes\n * @returns Array of volume information for all mounted drives\n *\n * @example\n * import { system } from 'applescript-node/sources';\n * const volumes = await system.getVolumes();\n * volumes.forEach(vol => {\n * console.log(`${vol.name}: ${vol.freeSpace}GB free of ${vol.capacity}GB`);\n * });\n */\nexport async function getVolumes(): Promise<VolumeInfo[]> {\n const script = createScript()\n .tell('Finder')\n .set('volumesList', [])\n .forEach('aDisk', 'every disk', (b) =>\n b.tryCatch(\n (tryBlock) =>\n tryBlock\n .setExpression('diskName', (e) => e.property('aDisk', 'name'))\n .setExpression('diskCapacity', (e) => e.property('aDisk', 'capacity'))\n .setExpression('diskFreeSpace', (e) => e.property('aDisk', 'free space'))\n .setExpression('diskFormat', (e) => e.property('aDisk', 'format'))\n .setExpression('diskEjectable', (e) => e.property('aDisk', 'ejectable'))\n .raw('set diskUsed to diskCapacity - diskFreeSpace')\n .setEndRecord('volumesList', {\n name: 'diskName',\n capacity: 'diskCapacity',\n freeSpace: 'diskFreeSpace',\n usedSpace: 'diskUsed',\n format: 'diskFormat',\n ejectable: 'diskEjectable',\n }),\n (catchBlock) => catchBlock.comment('Skip disks with errors'),\n ),\n )\n .returnAsJson('volumesList', {\n name: 'name',\n capacity: 'capacity',\n freeSpace: 'freeSpace',\n usedSpace: 'usedSpace',\n format: 'format',\n ejectable: 'ejectable',\n })\n .endtell();\n\n const result = await ScriptExecutor.execute(script.build());\n\n if (!result.success) {\n throw new Error(`Failed to get volumes: ${result.error}`);\n }\n\n // Parse JSON output\n return JSON.parse(result.output ?? '[]') as VolumeInfo[];\n}\n\n/**\n * Get display information for all connected displays\n * @returns Array of display information\n *\n * @example\n * import { system } from 'applescript-node/sources';\n * const displays = await system.getDisplays();\n * console.log(`Found ${displays.length} display(s)`);\n */\nexport async function getDisplays(): Promise<DisplayInfo[]> {\n // Use shell command to get display information as macOS API has changed\n const script = `\n do shell script \"system_profiler SPDisplaysDataType | grep Resolution\"\n `;\n\n const result = await ScriptExecutor.execute(script);\n\n if (!result.success) {\n // Return a default display if we can't get real data\n return [\n {\n id: 1,\n bounds: {\n x: 0,\n y: 0,\n width: 0,\n height: 0,\n },\n },\n ];\n }\n\n // Parse resolution from system_profiler output\n // Format: \"Resolution: 2560 x 1600 (2x)\"\n const lines = (result.output ?? '').split('\\n');\n const displays: DisplayInfo[] = lines\n .map((line, idx) => {\n const match = /Resolution:\\s+(\\d+)\\s+x\\s+(\\d+)/.exec(line);\n if (match) {\n return {\n id: idx + 1,\n bounds: {\n x: 0,\n y: 0,\n width: Number.parseInt(match[1], 10),\n height: Number.parseInt(match[2], 10),\n },\n };\n }\n return null;\n })\n .filter((d): d is DisplayInfo => d !== null);\n\n return displays.length > 0\n ? displays\n : [\n {\n id: 1,\n bounds: {\n x: 0,\n y: 0,\n width: 0,\n height: 0,\n },\n },\n ];\n}\n\n/**\n * Get the current clipboard contents\n * @returns Clipboard text content\n *\n * @example\n * import { system } from 'applescript-node/sources';\n * const clipboardText = await system.getClipboard();\n * console.log('Clipboard:', clipboardText);\n */\nexport async function getClipboard(): Promise<string> {\n const script = `\n try\n return the clipboard as text\n on error\n return \"\"\n end try\n `;\n\n const result = await ScriptExecutor.execute(script);\n\n if (!result.success) {\n return '';\n }\n\n return result.output ?? '';\n}\n\n/**\n * Set the clipboard contents\n * @param text - Text to set in clipboard\n *\n * @example\n * import { system } from 'applescript-node/sources';\n * await system.setClipboard('Hello, World!');\n */\nexport async function setClipboard(text: string): Promise<void> {\n const script = createScript()\n .raw(`set the clipboard to \"${text.replace(/\"/g, '\\\\\"')}\"`)\n .build();\n\n const result = await ScriptExecutor.execute(script);\n\n if (!result.success) {\n throw new Error(`Failed to set clipboard: ${result.error}`);\n }\n}\n\n/**\n * Get path to common system folders\n * @param folder - Folder identifier (e.g., 'home', 'desktop', 'documents', 'downloads', 'applications', 'library', 'temporary items')\n * @returns POSIX path to the folder\n *\n * @example\n * import { system } from 'applescript-node/sources';\n * const desktop = await system.getPath('desktop');\n * console.log('Desktop path:', desktop);\n */\nexport async function getPath(\n folder:\n | 'home'\n | 'desktop'\n | 'documents'\n | 'downloads'\n | 'applications'\n | 'library'\n | 'temporary items'\n | 'music'\n | 'pictures'\n | 'movies'\n | 'public',\n): Promise<string> {\n const folderMap: Record<string, string> = {\n home: 'home folder',\n desktop: 'desktop folder',\n documents: 'documents folder',\n downloads: 'downloads folder',\n applications: 'applications folder',\n library: 'library folder',\n 'temporary items': 'temporary items folder',\n music: 'music folder',\n pictures: 'pictures folder',\n movies: 'movies folder',\n public: 'public folder',\n };\n\n const folderName = folderMap[folder] || 'home folder';\n\n const script = `POSIX path of (path to ${folderName})`;\n\n const result = await ScriptExecutor.execute(script);\n\n if (!result.success) {\n throw new Error(`Failed to get path for ${folder}: ${result.error}`);\n }\n\n return (result.output ?? '').trim();\n}\n\n/**\n * Check if the system is in dark mode\n * @returns True if dark mode is enabled\n *\n * @example\n * import { system } from 'applescript-node/sources';\n * if (await system.isDarkMode()) {\n * console.log('Dark mode is enabled');\n * }\n */\nexport async function isDarkMode(): Promise<boolean> {\n const script =\n 'tell application \"System Events\" to tell appearance preferences to return dark mode';\n\n const result = await ScriptExecutor.execute(script);\n\n return result.success && (result.output ?? '').trim() === 'true';\n}\n\n/**\n * Get system uptime in seconds\n * @returns Number of seconds since last boot\n *\n * @example\n * import { system } from 'applescript-node/sources';\n * const uptime = await system.getUptime();\n * console.log(`System uptime: ${Math.floor(uptime / 3600)} hours`);\n */\n/**\n * Get system uptime in seconds since last boot\n *\n * **IMPORTANT: Invalid Input Handling**\n *\n * This function includes critical error handling for edge cases:\n *\n * 1. **Invalid Boot Time**: When the shell script returns invalid output\n * (non-numeric, malformed, etc.):\n * - Number.parseInt() returns NaN\n * - NaN is detected and defaults to 0 (treats as current time)\n * - Result: uptime = current_time - 0 = large positive number\n *\n * 2. **Why Default to 0**: Defaulting invalid boot time to 0 ensures:\n * - Function always returns a valid number (never NaN)\n * - Result is always positive (current time is always > 0)\n * - Downstream code can safely use the result without NaN checks\n *\n * 3. **Why This Matters**: Without proper NaN handling:\n * - `now - NaN` = NaN, causing downstream errors\n * - Tests expecting positive numbers would fail\n * - Production code could crash on unexpected input\n *\n * **Usage Example:**\n * ```typescript\n * const uptime = await system.getUptime();\n * console.log(`System has been up for ${uptime} seconds`);\n * console.log(`That's ${Math.floor(uptime / 3600)} hours`);\n * ```\n *\n * **Edge Cases Handled:**\n * - Invalid/malformed boot time output → defaults to 0\n * - Empty output → defaults to 0\n * - Non-numeric output → defaults to 0\n * - Script execution failure → throws error (expected behavior)\n *\n * **Testing Considerations:**\n * - Test with valid boot time output\n * - Test with invalid output (non-numeric, empty, etc.)\n * - Verify NaN is properly handled and defaults to 0\n * - Ensure result is always a positive number\n *\n * @returns Promise resolving to uptime in seconds (always positive, never NaN)\n * @throws Error if script execution fails (different from invalid output)\n *\n * @example\n * ```typescript\n * try {\n * const uptime = await getUptime();\n * // uptime is always a valid positive number\n * if (uptime > 86400) {\n * console.log('System has been up for more than a day');\n * }\n * } catch (error) {\n * // Only thrown if osascript execution fails\n * console.error('Failed to get uptime:', error);\n * }\n * ```\n */\nexport async function getUptime(): Promise<number> {\n const script = \"do shell script \\\"sysctl -n kern.boottime | awk '{print $4}' | sed 's/,//'\\\"\";\n\n const result = await ScriptExecutor.execute(script);\n\n if (!result.success) {\n throw new Error(`Failed to get uptime: ${result.error}`);\n }\n\n const bootTime = Number.parseInt((result.output ?? '0').trim(), 10);\n const now = Math.floor(Date.now() / 1000);\n\n // CRITICAL: Handle NaN from invalid boot time output\n // Defaults to 0 (treat as current time) to ensure result is always valid\n // Without this, now - NaN = NaN, causing downstream errors\n const validBootTime = Number.isNaN(bootTime) ? 0 : bootTime;\n\n return now - validBootTime;\n}\n","import { ScriptExecutor } from '../executor.js';\nimport { createScript } from '../index.js';\n\n/**\n * Window information returned from macOS\n */\nexport interface WindowInfo {\n name: string;\n app: string;\n id: number;\n bounds: {\n x: number;\n y: number;\n width: number;\n height: number;\n };\n minimized: boolean;\n zoomed: boolean;\n visible: boolean;\n}\n\n/**\n * Get all open windows across all applications\n * @returns Array of window information for all visible windows\n *\n * @example\n * import { windows } from 'applescript-node/sources';\n * const allWindows = await windows.getAll();\n * console.log(`Found ${allWindows.length} open windows`);\n */\nexport async function getAll(): Promise<WindowInfo[]> {\n const script = createScript()\n .tell('System Events')\n .set('windowsList', [])\n .forEach('proc', 'every process whose visible is true', (b) =>\n b\n .setExpression('appName', (e) => e.property('proc', 'name'))\n .forEach('win', 'windows of proc', (inner) =>\n inner.tryCatch(\n (tryBlock) =>\n tryBlock\n .setExpression('winName', (e) => e.property('win', 'name'))\n .setExpression('winId', (e) => e.property('win', 'id'))\n .setExpression('winBounds', (e) => e.property('win', 'position'))\n .setExpression('winSize', (e) => e.property('win', 'size'))\n .setExpression('winMinimized', (e) =>\n e.property('win', 'value of attribute \"AXMinimized\"'),\n )\n .setExpression('winZoomed', (e) =>\n e.property('win', 'value of attribute \"AXFullScreen\"'),\n )\n // Build window record using setEndRecord with full expressions\n .setEndRecord('windowsList', {\n name: 'winName',\n app: 'appName',\n id: 'winId',\n x: 'item 1 of winBounds',\n y: 'item 2 of winBounds',\n width: 'item 1 of winSize',\n height: 'item 2 of winSize',\n minimized: 'winMinimized',\n zoomed: 'winZoomed',\n visible: 'true',\n }),\n (catchBlock) => catchBlock.comment('Skip windows with errors'),\n ),\n ),\n )\n .returnAsJson('windowsList', {\n name: 'name',\n app: 'app',\n id: 'id',\n x: 'x',\n y: 'y',\n width: 'width',\n height: 'height',\n minimized: 'minimized',\n zoomed: 'zoomed',\n visible: 'visible',\n })\n .endtell();\n\n const result = await ScriptExecutor.execute(script.build());\n\n if (!result.success) {\n throw new Error(`Failed to get windows: ${result.error}`);\n }\n\n // Parse JSON output\n const windows = JSON.parse(result.output ?? '[]') as unknown[];\n\n return windows.map((win: unknown) => {\n const w = win as Record<string, unknown>;\n return {\n name: (w.name as string | undefined) ?? '',\n app: (w.app as string | undefined) ?? '',\n id: Number(w.id ?? 0),\n bounds: {\n x: Number(w.x ?? 0),\n y: Number(w.y ?? 0),\n width: Number(w.width ?? 0),\n height: Number(w.height ?? 0),\n },\n minimized: Boolean(w.minimized),\n zoomed: Boolean(w.zoomed),\n visible: Boolean(w.visible),\n };\n });\n}\n\n/**\n * Get all windows for a specific application\n * @param appName - Name of the application (e.g., 'Safari', 'Chrome', 'Finder')\n * @returns Array of window information for the specified application\n *\n * @example\n * import { windows } from 'applescript-node/sources';\n * const safariWindows = await windows.getByApp('Safari');\n * console.log(`Safari has ${safariWindows.length} windows open`);\n */\nexport async function getByApp(appName: string): Promise<WindowInfo[]> {\n const allWindows = await getAll();\n return allWindows.filter((win) => win.app === appName);\n}\n\n/**\n * Get the frontmost (focused) window across all applications\n * @returns The currently focused window, or null if no window is focused\n *\n * @example\n * import { windows } from 'applescript-node/sources';\n * const activeWindow = await windows.getFrontmost();\n * if (activeWindow) {\n * console.log(`Active window: ${activeWindow.name} (${activeWindow.app})`);\n * }\n */\nexport async function getFrontmost(): Promise<WindowInfo | null> {\n const script = `\n tell application \"System Events\"\n set frontApp to name of first process whose frontmost is true\n tell process frontApp\n try\n set frontWin to front window\n set winName to name of frontWin\n set winBounds to position of frontWin\n set winSize to size of frontWin\n set winMinimized to value of attribute \"AXMinimized\" of frontWin\n set winZoomed to value of attribute \"AXFullScreen\" of frontWin\n\n return \"{\" & ¬\n \"\\\\\"name\\\\\":\\\\\"\" & winName & \"\\\\\",\" & ¬\n \"\\\\\"app\\\\\":\\\\\"\" & frontApp & \"\\\\\",\" & ¬\n \"\\\\\"x\\\\\":\" & (item 1 of winBounds) & \",\" & ¬\n \"\\\\\"y\\\\\":\" & (item 2 of winBounds) & \",\" & ¬\n \"\\\\\"width\\\\\":\" & (item 1 of winSize) & \",\" & ¬\n \"\\\\\"height\\\\\":\" & (item 2 of winSize) & \",\" & ¬\n \"\\\\\"minimized\\\\\":\" & winMinimized & \",\" & ¬\n \"\\\\\"zoomed\\\\\":\" & winZoomed & \",\" & ¬\n \"\\\\\"visible\\\\\":true\" & ¬\n \"}\"\n on error\n return \"\"\n end try\n end tell\n end tell\n `;\n\n const result = await ScriptExecutor.execute(script);\n\n if (!(result.success && result.output)) {\n return null;\n }\n\n try {\n const win = JSON.parse(result.output) as Record<string, unknown>;\n return {\n name: (win.name as string | undefined) ?? '',\n app: (win.app as string | undefined) ?? '',\n id: 0, // Frontmost window query doesn't include ID\n bounds: {\n x: Number(win.x ?? 0),\n y: Number(win.y ?? 0),\n width: Number(win.width ?? 0),\n height: Number(win.height ?? 0),\n },\n minimized: Boolean(win.minimized),\n zoomed: Boolean(win.zoomed),\n visible: Boolean(win.visible),\n };\n } catch {\n return null;\n }\n}\n\n/**\n * Get window count by application\n * @returns Map of application names to window counts\n *\n * @example\n * import { windows } from 'applescript-node/sources';\n * const counts = await windows.getCountByApp();\n * console.log('Window counts:', counts);\n * // { 'Safari': 3, 'Chrome': 2, 'Terminal': 1 }\n */\nexport async function getCountByApp(): Promise<Record<string, number>> {\n const allWindows = await getAll();\n const counts: Record<string, number> = {};\n\n for (const win of allWindows) {\n counts[win.app] = (counts[win.app] || 0) + 1;\n }\n\n return counts;\n}\n","import { findClass, findCommand, getAllClasses, getApplicationDictionary } from './sdef.js';\nimport type { ApplicationDictionary, Class, Command, Property } from './types.js';\n\n/**\n * Validation severity levels\n */\nexport type ValidationSeverity = 'error' | 'warning' | 'info';\n\n/**\n * Validation issue found in a script\n */\nexport interface ValidationIssue {\n severity: ValidationSeverity;\n message: string;\n line?: number;\n column?: number;\n code?: string;\n suggestion?: string;\n}\n\n/**\n * Result of script validation\n */\nexport interface ValidationResult {\n valid: boolean;\n issues: ValidationIssue[];\n errors: ValidationIssue[];\n warnings: ValidationIssue[];\n info: ValidationIssue[];\n}\n\n/**\n * Options for script validation\n */\nexport interface ValidationOptions {\n /**\n * Strictness level for validation\n * - 'strict': Treat warnings as errors\n * - 'normal': Standard validation (default)\n * - 'lenient': Only report errors, skip warnings\n */\n strictness?: 'strict' | 'normal' | 'lenient';\n\n /**\n * Whether to provide suggestions for fixes\n */\n provideSuggestions?: boolean;\n\n /**\n * Custom dictionary to validate against (otherwise fetched from appPath)\n */\n dictionary?: ApplicationDictionary;\n}\n\n/**\n * Script validator for AppleScript validation against application sdef\n */\nexport class ScriptValidator {\n private dictionary: ApplicationDictionary;\n private appName: string;\n\n constructor(dictionary: ApplicationDictionary, appName: string) {\n this.dictionary = dictionary;\n this.appName = appName;\n }\n\n /**\n * Create a validator for a specific application\n */\n static async forApplication(appPath: string): Promise<ScriptValidator> {\n const dictionary = await getApplicationDictionary(appPath);\n // Extract app name from path\n const appName =\n appPath\n .split('/')\n .pop()\n ?.replace(/\\.app$/, '') ?? 'Unknown';\n return new ScriptValidator(dictionary, appName);\n }\n\n /**\n * Validate a script string\n */\n validate(script: string, options: ValidationOptions = {}): ValidationResult {\n const { strictness = 'normal', provideSuggestions = true } = options;\n\n const issues: ValidationIssue[] = [];\n\n // Extract tell blocks to identify target application\n const tellBlocks = this.extractTellBlocks(script);\n\n for (const block of tellBlocks) {\n // Validate commands in this block\n this.validateCommands(block.content, issues, provideSuggestions);\n\n // Validate property access\n this.validateProperties(block.content, issues, provideSuggestions);\n }\n\n // Categorize issues\n const errors = issues.filter((i) => i.severity === 'error');\n const warnings = issues.filter((i) => i.severity === 'warning');\n const info = issues.filter((i) => i.severity === 'info');\n\n // Determine if valid based on strictness\n let valid = errors.length === 0;\n if (strictness === 'strict') {\n valid = valid && warnings.length === 0;\n }\n\n return {\n valid,\n issues,\n errors,\n warnings,\n info,\n };\n }\n\n /**\n * Extract tell application blocks from script\n */\n private extractTellBlocks(script: string): { target: string; content: string }[] {\n const blocks: { target: string; content: string }[] = [];\n const lines = script.split('\\n');\n\n let currentBlock: { target: string; content: string; depth: number } | null = null;\n let blockDepth = 0;\n\n for (const line of lines) {\n const trimmed = line.trim();\n\n // Match tell application \"AppName\" or tell application \"System Events\"\n const tellMatch = /^tell\\s+application\\s+\"([^\"]+)\"/i.exec(trimmed);\n if (tellMatch) {\n const target = tellMatch[1];\n if (currentBlock) {\n blockDepth++;\n } else {\n currentBlock = { target, content: '', depth: 0 };\n }\n continue;\n }\n\n // Match end tell\n if (/^end\\s+tell/i.test(trimmed)) {\n if (blockDepth > 0) {\n blockDepth--;\n } else if (currentBlock) {\n blocks.push(currentBlock);\n currentBlock = null;\n }\n continue;\n }\n\n // Add content to current block\n if (currentBlock) {\n currentBlock.content += line + '\\n';\n }\n }\n\n return blocks;\n }\n\n /**\n * Validate commands in script content\n */\n private validateCommands(\n content: string,\n issues: ValidationIssue[],\n provideSuggestions: boolean,\n ): void {\n // Look for command-like patterns\n // This is a simplified parser - a full parser would be more complex\n\n // Pattern: words at the start of a line (potential commands)\n // Exclude keywords like if, then, else, repeat, etc.\n const lines = content.split('\\n');\n const keywords = new Set([\n 'if',\n 'then',\n 'else',\n 'end',\n 'repeat',\n 'tell',\n 'to',\n 'of',\n 'on',\n 'return',\n 'try',\n 'error',\n 'set',\n 'get',\n 'copy',\n 'count',\n 'exit',\n 'considering',\n 'ignoring',\n 'with',\n 'without',\n 'using',\n 'my',\n 'its',\n 'a',\n 'an',\n 'the',\n 'some',\n 'every',\n 'whose',\n ]);\n\n for (const line of lines) {\n const trimmed = line.trim();\n if (!trimmed || trimmed.startsWith('--')) continue;\n\n // Extract first word (potential command)\n const words = trimmed.split(/\\s+/);\n if (words.length === 0) continue;\n\n const potentialCommand = words[0].toLowerCase();\n\n // Skip keywords\n if (keywords.has(potentialCommand)) continue;\n\n // Check if this looks like a command (not a variable assignment pattern)\n if (/^[a-z_][a-z0-9_]*$/i.test(potentialCommand)) {\n // Check if command exists in sdef\n const command = findCommand(this.dictionary, potentialCommand);\n\n if (!command) {\n const issue: ValidationIssue = {\n severity: 'warning',\n message: `Command '${potentialCommand}' might not exist in ${this.appName}`,\n code: 'unknown-command',\n };\n\n if (provideSuggestions) {\n const suggestion = this.suggestSimilarCommand(potentialCommand);\n if (suggestion) {\n issue.suggestion = `Did you mean '${suggestion.name}'? ${suggestion.description ?? ''}`;\n }\n }\n\n issues.push(issue);\n }\n }\n }\n }\n\n /**\n * Validate property access in script content\n */\n private validateProperties(\n content: string,\n issues: ValidationIssue[],\n _provideSuggestions: boolean,\n ): void {\n // Look for property set operations\n // Pattern: set property [of object] to value\n // Matches: \"set id of chat \"test\" to \"new-id\"\"\n // Captures the property name before \"of\" or \"to\"\n const setPattern = /set\\s+([\\w\\s]+?)\\s+(?:of\\s+|to\\s+)/gi;\n\n let match: RegExpExecArray | null;\n while ((match = setPattern.exec(content)) !== null) {\n const propertyName = match[1].trim();\n\n // Skip if this looks like a variable name (no spaces usually)\n // Property names in AppleScript can have spaces like \"full name\"\n if (propertyName && propertyName.length > 0) {\n // Check if this property is read-only in any class\n const readOnlyProp = this.findReadOnlyProperty(propertyName);\n\n if (readOnlyProp) {\n issues.push({\n severity: 'error',\n message: `Property '${propertyName}' is read-only and cannot be set`,\n code: 'readonly-property',\n suggestion: `Property '${propertyName}' in class '${readOnlyProp.className}' has access level 'r' (read-only)`,\n });\n }\n }\n }\n }\n\n /**\n * Find a read-only property by name across all classes\n */\n private findReadOnlyProperty(\n propertyName: string,\n ): { className: string; property: Property } | null {\n const classes = getAllClasses(this.dictionary);\n\n for (const cls of classes) {\n const prop = cls.properties.find(\n (p) => p.name.toLowerCase() === propertyName.toLowerCase() && p.access === 'r',\n );\n if (prop) {\n return { className: cls.name, property: prop };\n }\n }\n\n return null;\n }\n\n /**\n * Suggest a similar command name using string similarity\n */\n private suggestSimilarCommand(commandName: string): Command | undefined {\n const allCommands = this.dictionary.suites.flatMap((suite) => suite.commands);\n\n // Simple Levenshtein-like matching\n let bestMatch: Command | undefined;\n let bestScore = Number.POSITIVE_INFINITY;\n\n for (const cmd of allCommands) {\n const distance = this.levenshteinDistance(commandName.toLowerCase(), cmd.name.toLowerCase());\n\n // Only suggest if reasonably similar (distance <= 3)\n if (distance < bestScore && distance <= 3) {\n bestScore = distance;\n bestMatch = cmd;\n }\n }\n\n return bestMatch;\n }\n\n /**\n * Calculate Levenshtein distance between two strings\n */\n private levenshteinDistance(a: string, b: string): number {\n const matrix: number[][] = [];\n\n for (let i = 0; i <= b.length; i++) {\n matrix[i] = [i];\n }\n\n for (let j = 0; j <= a.length; j++) {\n matrix[0][j] = j;\n }\n\n for (let i = 1; i <= b.length; i++) {\n for (let j = 1; j <= a.length; j++) {\n if (b.charAt(i - 1) === a.charAt(j - 1)) {\n matrix[i][j] = matrix[i - 1][j - 1];\n } else {\n matrix[i][j] = Math.min(\n matrix[i - 1][j - 1] + 1, // substitution\n matrix[i][j - 1] + 1, // insertion\n matrix[i - 1][j] + 1, // deletion\n );\n }\n }\n }\n\n return matrix[b.length][a.length];\n }\n\n /**\n * Validate a command and its parameters\n */\n validateCommand(\n commandName: string,\n parameters: Record<string, unknown> = {},\n ): ValidationIssue[] {\n const issues: ValidationIssue[] = [];\n const command = findCommand(this.dictionary, commandName);\n\n if (!command) {\n issues.push({\n severity: 'error',\n message: `Command '${commandName}' does not exist in ${this.appName}`,\n code: 'unknown-command',\n });\n return issues;\n }\n\n // Check required parameters\n const requiredParams = command.parameters.filter((p) => !p.optional);\n for (const param of requiredParams) {\n if (!(param.name in parameters)) {\n issues.push({\n severity: 'error',\n message: `Required parameter '${param.name}' is missing for command '${commandName}'`,\n code: 'missing-parameter',\n suggestion: param.description,\n });\n }\n }\n\n // Check for unknown parameters\n for (const paramName of Object.keys(parameters)) {\n const paramDef = command.parameters.find((p) => p.name === paramName);\n if (!paramDef) {\n issues.push({\n severity: 'warning',\n message: `Unknown parameter '${paramName}' for command '${commandName}'`,\n code: 'unknown-parameter',\n });\n }\n }\n\n return issues;\n }\n\n /**\n * Validate property access on a class\n */\n validatePropertyAccess(\n className: string,\n propertyName: string,\n accessType: 'read' | 'write',\n ): ValidationIssue[] {\n const issues: ValidationIssue[] = [];\n const cls = findClass(this.dictionary, className);\n\n if (!cls) {\n issues.push({\n severity: 'error',\n message: `Class '${className}' does not exist in ${this.appName}`,\n code: 'unknown-class',\n });\n return issues;\n }\n\n const property = cls.properties.find((p) => p.name === propertyName);\n\n if (!property) {\n issues.push({\n severity: 'error',\n message: `Property '${propertyName}' does not exist on class '${className}'`,\n code: 'unknown-property',\n });\n return issues;\n }\n\n if (accessType === 'write' && property.access === 'r') {\n issues.push({\n severity: 'error',\n message: `Property '${propertyName}' is read-only on class '${className}'`,\n code: 'readonly-property',\n suggestion: `Property has access level 'r'. Available properties with write access: ${cls.properties\n .filter((p) => p.access === 'rw')\n .map((p) => p.name)\n .join(', ')}`,\n });\n }\n\n return issues;\n }\n\n /**\n * Get all available commands in the application\n */\n getAvailableCommands(): Command[] {\n return this.dictionary.suites.flatMap((suite) => suite.commands);\n }\n\n /**\n * Get all available classes in the application\n */\n getAvailableClasses(): Class[] {\n return getAllClasses(this.dictionary);\n }\n}\n\n/**\n * Quick validation helper function\n */\nexport async function validateScript(\n script: string,\n appPath: string,\n options?: ValidationOptions,\n): Promise<ValidationResult> {\n const validator = await ScriptValidator.forApplication(appPath);\n return validator.validate(script, options);\n}\n","import { AppleScriptBuilder } from './builder.js';\nimport { ScriptExecutor } from './executor.js';\nimport type { OsaScriptOptions, Prettify, ScriptBuilder, ScriptExecutionResult } from './types.js';\n\nexport * from './builder.js';\nexport * from './compiler.js';\nexport * from './decompiler.js';\nexport * from './executor.js';\nexport * from './expressions.js';\nexport * from './languages.js';\nexport * from './loader.js';\nexport * from './sdef.js';\n// High-level data source APIs\nexport * as sources from './sources/index.js';\nexport type {\n AppleScriptValue,\n ApplicationDictionary,\n ApplicationTarget,\n Class,\n Command,\n Element,\n Enumeration,\n Enumerator,\n OsaScriptOptions,\n Parameter,\n Prettify,\n ProcessInfo,\n Property,\n PropertyExtractor,\n ScriptBuilder,\n ScriptError,\n ScriptExecutionResult,\n Suite,\n TypeInfo,\n WindowInfo,\n} from './types.js';\nexport * from './validator.js';\n\nexport const createScript = () => new AppleScriptBuilder();\n\nexport function runScript<TScope extends string, TReturn>(\n script: ScriptBuilder<TScope, TReturn>,\n options?: OsaScriptOptions,\n): Promise<ScriptExecutionResult<Prettify<TReturn>>>;\n\n// eslint-disable-next-line no-redeclare\nexport function runScript<T = string>(\n script: string,\n options?: OsaScriptOptions,\n): Promise<ScriptExecutionResult<Prettify<T>>>;\n\n// Implementation\n// eslint-disable-next-line no-redeclare\nexport async function runScript<T = string>(\n script: string | ScriptBuilder<string, T>,\n options?: OsaScriptOptions,\n): Promise<ScriptExecutionResult<T>> {\n const scriptString = typeof script === 'string' ? script : script.build();\n const result = await ScriptExecutor.execute(scriptString, options);\n\n // If the output looks like JSON (starts with '[' or '{'), parse it automatically\n // This handles returnAsJson, mapToJson, and returnJsonObject which return JSON strings\n if (result.success && result.output) {\n const trimmed = result.output.trim();\n if (trimmed.startsWith('[') || trimmed.startsWith('{')) {\n try {\n const parsed = JSON.parse(result.output) as Prettify<T>;\n const parsedResult: ScriptExecutionResult<T> = {\n success: result.success,\n output: parsed,\n exitCode: result.exitCode,\n };\n return parsedResult;\n } catch {\n // If parsing fails, return the string as-is\n // This handles cases where the string happens to start with '[' or '{' but isn't valid JSON\n }\n }\n }\n\n return result as ScriptExecutionResult<T>;\n}\n\nexport const runScriptFile = async <T = string>(\n filePath: string,\n options?: OsaScriptOptions,\n): Promise<ScriptExecutionResult<T>> => ScriptExecutor.executeFile<T>(filePath, options);\n"]}
|