{"version":3,"sources":["../../node_modules/.pnpm/chalk@5.4.1/node_modules/chalk/source/vendor/ansi-styles/index.js","../../node_modules/.pnpm/chalk@5.4.1/node_modules/chalk/source/vendor/supports-color/index.js","../../node_modules/.pnpm/chalk@5.4.1/node_modules/chalk/source/utilities.js","../../node_modules/.pnpm/chalk@5.4.1/node_modules/chalk/source/index.js","../../src/error-logger.ts","../../src/cache/index.ts","../../src/auth/token-manager.ts","../../src/auth/index.ts","../../src/client/concurrent-queue.ts","../../src/client/or-filter-batching.ts","../../src/client/index.ts","../../src/generators/import-utils.ts","../../src/generators/utils.ts","../../src/generators/entity-interface.ts","../../src/generators/optionset-generation.ts","../../src/generators/metadata-generation.ts","../../src/generators/binding-types.ts","../../src/generators/expand-types.ts","../../src/generators/import-generation.ts","../../src/generators/index.ts","../../src/generators/hooks/entity-hooks.ts","../../src/generators/hooks/list-hooks.ts","../../src/generators/hooks/query-builders.ts","../../src/generators/hooks/utilities.ts","../../src/generators/hooks/index.ts","../../src/codegen/formatter.ts","../../src/codegen/directory-manager.ts","../../src/codegen/file-writer.ts","../../src/codegen/result-tracking.ts","../../src/codegen/orchestrator.ts","../../src/config/index.ts","../../src/cli/output/formatters.ts","../../src/cli/validation/url-validator.ts","../../src/cli/prompts/user-prompts.ts","../../src/cli/config/cli-config.ts","../../src/cli/interactive/simple-interactive.ts","../../src/cli/commands/generate.ts","../../src/cli/commands/init.ts","../../src/cli/commands/validate.ts","../../src/cli/commands/cache.ts","../../src/cli/index.ts","../../src/bin/cli.ts"],"names":["process","styles","chalk","resolve","getAuthenticatedFetch","generateOptionSetTypeName","os","expandTypeName","generateOptionSetConstantName","shouldOrganizeDirectories","join","fs","dirname","configFromFile","relatedEntities","program"],"mappings":"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","file":"cli.mjs","sourcesContent":["const ANSI_BACKGROUND_OFFSET = 10;\n\nconst wrapAnsi16 = (offset = 0) => code => `\\u001B[${code + offset}m`;\n\nconst wrapAnsi256 = (offset = 0) => code => `\\u001B[${38 + offset};5;${code}m`;\n\nconst wrapAnsi16m = (offset = 0) => (red, green, blue) => `\\u001B[${38 + offset};2;${red};${green};${blue}m`;\n\nconst styles = {\n\tmodifier: {\n\t\treset: [0, 0],\n\t\t// 21 isn't widely supported and 22 does the same thing\n\t\tbold: [1, 22],\n\t\tdim: [2, 22],\n\t\titalic: [3, 23],\n\t\tunderline: [4, 24],\n\t\toverline: [53, 55],\n\t\tinverse: [7, 27],\n\t\thidden: [8, 28],\n\t\tstrikethrough: [9, 29],\n\t},\n\tcolor: {\n\t\tblack: [30, 39],\n\t\tred: [31, 39],\n\t\tgreen: [32, 39],\n\t\tyellow: [33, 39],\n\t\tblue: [34, 39],\n\t\tmagenta: [35, 39],\n\t\tcyan: [36, 39],\n\t\twhite: [37, 39],\n\n\t\t// Bright color\n\t\tblackBright: [90, 39],\n\t\tgray: [90, 39], // Alias of `blackBright`\n\t\tgrey: [90, 39], // Alias of `blackBright`\n\t\tredBright: [91, 39],\n\t\tgreenBright: [92, 39],\n\t\tyellowBright: [93, 39],\n\t\tblueBright: [94, 39],\n\t\tmagentaBright: [95, 39],\n\t\tcyanBright: [96, 39],\n\t\twhiteBright: [97, 39],\n\t},\n\tbgColor: {\n\t\tbgBlack: [40, 49],\n\t\tbgRed: [41, 49],\n\t\tbgGreen: [42, 49],\n\t\tbgYellow: [43, 49],\n\t\tbgBlue: [44, 49],\n\t\tbgMagenta: [45, 49],\n\t\tbgCyan: [46, 49],\n\t\tbgWhite: [47, 49],\n\n\t\t// Bright color\n\t\tbgBlackBright: [100, 49],\n\t\tbgGray: [100, 49], // Alias of `bgBlackBright`\n\t\tbgGrey: [100, 49], // Alias of `bgBlackBright`\n\t\tbgRedBright: [101, 49],\n\t\tbgGreenBright: [102, 49],\n\t\tbgYellowBright: [103, 49],\n\t\tbgBlueBright: [104, 49],\n\t\tbgMagentaBright: [105, 49],\n\t\tbgCyanBright: [106, 49],\n\t\tbgWhiteBright: [107, 49],\n\t},\n};\n\nexport const modifierNames = Object.keys(styles.modifier);\nexport const foregroundColorNames = Object.keys(styles.color);\nexport const backgroundColorNames = Object.keys(styles.bgColor);\nexport const colorNames = [...foregroundColorNames, ...backgroundColorNames];\n\nfunction assembleStyles() {\n\tconst codes = new Map();\n\n\tfor (const [groupName, group] of Object.entries(styles)) {\n\t\tfor (const [styleName, style] of Object.entries(group)) {\n\t\t\tstyles[styleName] = {\n\t\t\t\topen: `\\u001B[${style[0]}m`,\n\t\t\t\tclose: `\\u001B[${style[1]}m`,\n\t\t\t};\n\n\t\t\tgroup[styleName] = styles[styleName];\n\n\t\t\tcodes.set(style[0], style[1]);\n\t\t}\n\n\t\tObject.defineProperty(styles, groupName, {\n\t\t\tvalue: group,\n\t\t\tenumerable: false,\n\t\t});\n\t}\n\n\tObject.defineProperty(styles, 'codes', {\n\t\tvalue: codes,\n\t\tenumerable: false,\n\t});\n\n\tstyles.color.close = '\\u001B[39m';\n\tstyles.bgColor.close = '\\u001B[49m';\n\n\tstyles.color.ansi = wrapAnsi16();\n\tstyles.color.ansi256 = wrapAnsi256();\n\tstyles.color.ansi16m = wrapAnsi16m();\n\tstyles.bgColor.ansi = wrapAnsi16(ANSI_BACKGROUND_OFFSET);\n\tstyles.bgColor.ansi256 = wrapAnsi256(ANSI_BACKGROUND_OFFSET);\n\tstyles.bgColor.ansi16m = wrapAnsi16m(ANSI_BACKGROUND_OFFSET);\n\n\t// From https://github.com/Qix-/color-convert/blob/3f0e0d4e92e235796ccb17f6e85c72094a651f49/conversions.js\n\tObject.defineProperties(styles, {\n\t\trgbToAnsi256: {\n\t\t\tvalue(red, green, blue) {\n\t\t\t\t// We use the extended greyscale palette here, with the exception of\n\t\t\t\t// black and white. normal palette only has 4 greyscale shades.\n\t\t\t\tif (red === green && green === blue) {\n\t\t\t\t\tif (red < 8) {\n\t\t\t\t\t\treturn 16;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (red > 248) {\n\t\t\t\t\t\treturn 231;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn Math.round(((red - 8) / 247) * 24) + 232;\n\t\t\t\t}\n\n\t\t\t\treturn 16\n\t\t\t\t\t+ (36 * Math.round(red / 255 * 5))\n\t\t\t\t\t+ (6 * Math.round(green / 255 * 5))\n\t\t\t\t\t+ Math.round(blue / 255 * 5);\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToRgb: {\n\t\t\tvalue(hex) {\n\t\t\t\tconst matches = /[a-f\\d]{6}|[a-f\\d]{3}/i.exec(hex.toString(16));\n\t\t\t\tif (!matches) {\n\t\t\t\t\treturn [0, 0, 0];\n\t\t\t\t}\n\n\t\t\t\tlet [colorString] = matches;\n\n\t\t\t\tif (colorString.length === 3) {\n\t\t\t\t\tcolorString = [...colorString].map(character => character + character).join('');\n\t\t\t\t}\n\n\t\t\t\tconst integer = Number.parseInt(colorString, 16);\n\n\t\t\t\treturn [\n\t\t\t\t\t/* eslint-disable no-bitwise */\n\t\t\t\t\t(integer >> 16) & 0xFF,\n\t\t\t\t\t(integer >> 8) & 0xFF,\n\t\t\t\t\tinteger & 0xFF,\n\t\t\t\t\t/* eslint-enable no-bitwise */\n\t\t\t\t];\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToAnsi256: {\n\t\t\tvalue: hex => styles.rgbToAnsi256(...styles.hexToRgb(hex)),\n\t\t\tenumerable: false,\n\t\t},\n\t\tansi256ToAnsi: {\n\t\t\tvalue(code) {\n\t\t\t\tif (code < 8) {\n\t\t\t\t\treturn 30 + code;\n\t\t\t\t}\n\n\t\t\t\tif (code < 16) {\n\t\t\t\t\treturn 90 + (code - 8);\n\t\t\t\t}\n\n\t\t\t\tlet red;\n\t\t\t\tlet green;\n\t\t\t\tlet blue;\n\n\t\t\t\tif (code >= 232) {\n\t\t\t\t\tred = (((code - 232) * 10) + 8) / 255;\n\t\t\t\t\tgreen = red;\n\t\t\t\t\tblue = red;\n\t\t\t\t} else {\n\t\t\t\t\tcode -= 16;\n\n\t\t\t\t\tconst remainder = code % 36;\n\n\t\t\t\t\tred = Math.floor(code / 36) / 5;\n\t\t\t\t\tgreen = Math.floor(remainder / 6) / 5;\n\t\t\t\t\tblue = (remainder % 6) / 5;\n\t\t\t\t}\n\n\t\t\t\tconst value = Math.max(red, green, blue) * 2;\n\n\t\t\t\tif (value === 0) {\n\t\t\t\t\treturn 30;\n\t\t\t\t}\n\n\t\t\t\t// eslint-disable-next-line no-bitwise\n\t\t\t\tlet result = 30 + ((Math.round(blue) << 2) | (Math.round(green) << 1) | Math.round(red));\n\n\t\t\t\tif (value === 2) {\n\t\t\t\t\tresult += 60;\n\t\t\t\t}\n\n\t\t\t\treturn result;\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\trgbToAnsi: {\n\t\t\tvalue: (red, green, blue) => styles.ansi256ToAnsi(styles.rgbToAnsi256(red, green, blue)),\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToAnsi: {\n\t\t\tvalue: hex => styles.ansi256ToAnsi(styles.hexToAnsi256(hex)),\n\t\t\tenumerable: false,\n\t\t},\n\t});\n\n\treturn styles;\n}\n\nconst ansiStyles = assembleStyles();\n\nexport default ansiStyles;\n","import process from 'node:process';\nimport os from 'node:os';\nimport tty from 'node:tty';\n\n// From: https://github.com/sindresorhus/has-flag/blob/main/index.js\n/// function hasFlag(flag, argv = globalThis.Deno?.args ?? process.argv) {\nfunction hasFlag(flag, argv = globalThis.Deno ? globalThis.Deno.args : process.argv) {\n\tconst prefix = flag.startsWith('-') ? '' : (flag.length === 1 ? '-' : '--');\n\tconst position = argv.indexOf(prefix + flag);\n\tconst terminatorPosition = argv.indexOf('--');\n\treturn position !== -1 && (terminatorPosition === -1 || position < terminatorPosition);\n}\n\nconst {env} = process;\n\nlet flagForceColor;\nif (\n\thasFlag('no-color')\n\t|| hasFlag('no-colors')\n\t|| hasFlag('color=false')\n\t|| hasFlag('color=never')\n) {\n\tflagForceColor = 0;\n} else if (\n\thasFlag('color')\n\t|| hasFlag('colors')\n\t|| hasFlag('color=true')\n\t|| hasFlag('color=always')\n) {\n\tflagForceColor = 1;\n}\n\nfunction envForceColor() {\n\tif ('FORCE_COLOR' in env) {\n\t\tif (env.FORCE_COLOR === 'true') {\n\t\t\treturn 1;\n\t\t}\n\n\t\tif (env.FORCE_COLOR === 'false') {\n\t\t\treturn 0;\n\t\t}\n\n\t\treturn env.FORCE_COLOR.length === 0 ? 1 : Math.min(Number.parseInt(env.FORCE_COLOR, 10), 3);\n\t}\n}\n\nfunction translateLevel(level) {\n\tif (level === 0) {\n\t\treturn false;\n\t}\n\n\treturn {\n\t\tlevel,\n\t\thasBasic: true,\n\t\thas256: level >= 2,\n\t\thas16m: level >= 3,\n\t};\n}\n\nfunction _supportsColor(haveStream, {streamIsTTY, sniffFlags = true} = {}) {\n\tconst noFlagForceColor = envForceColor();\n\tif (noFlagForceColor !== undefined) {\n\t\tflagForceColor = noFlagForceColor;\n\t}\n\n\tconst forceColor = sniffFlags ? flagForceColor : noFlagForceColor;\n\n\tif (forceColor === 0) {\n\t\treturn 0;\n\t}\n\n\tif (sniffFlags) {\n\t\tif (hasFlag('color=16m')\n\t\t\t|| hasFlag('color=full')\n\t\t\t|| hasFlag('color=truecolor')) {\n\t\t\treturn 3;\n\t\t}\n\n\t\tif (hasFlag('color=256')) {\n\t\t\treturn 2;\n\t\t}\n\t}\n\n\t// Check for Azure DevOps pipelines.\n\t// Has to be above the `!streamIsTTY` check.\n\tif ('TF_BUILD' in env && 'AGENT_NAME' in env) {\n\t\treturn 1;\n\t}\n\n\tif (haveStream && !streamIsTTY && forceColor === undefined) {\n\t\treturn 0;\n\t}\n\n\tconst min = forceColor || 0;\n\n\tif (env.TERM === 'dumb') {\n\t\treturn min;\n\t}\n\n\tif (process.platform === 'win32') {\n\t\t// Windows 10 build 10586 is the first Windows release that supports 256 colors.\n\t\t// Windows 10 build 14931 is the first release that supports 16m/TrueColor.\n\t\tconst osRelease = os.release().split('.');\n\t\tif (\n\t\t\tNumber(osRelease[0]) >= 10\n\t\t\t&& Number(osRelease[2]) >= 10_586\n\t\t) {\n\t\t\treturn Number(osRelease[2]) >= 14_931 ? 3 : 2;\n\t\t}\n\n\t\treturn 1;\n\t}\n\n\tif ('CI' in env) {\n\t\tif (['GITHUB_ACTIONS', 'GITEA_ACTIONS', 'CIRCLECI'].some(key => key in env)) {\n\t\t\treturn 3;\n\t\t}\n\n\t\tif (['TRAVIS', 'APPVEYOR', 'GITLAB_CI', 'BUILDKITE', 'DRONE'].some(sign => sign in env) || env.CI_NAME === 'codeship') {\n\t\t\treturn 1;\n\t\t}\n\n\t\treturn min;\n\t}\n\n\tif ('TEAMCITY_VERSION' in env) {\n\t\treturn /^(9\\.(0*[1-9]\\d*)\\.|\\d{2,}\\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0;\n\t}\n\n\tif (env.COLORTERM === 'truecolor') {\n\t\treturn 3;\n\t}\n\n\tif (env.TERM === 'xterm-kitty') {\n\t\treturn 3;\n\t}\n\n\tif ('TERM_PROGRAM' in env) {\n\t\tconst version = Number.parseInt((env.TERM_PROGRAM_VERSION || '').split('.')[0], 10);\n\n\t\tswitch (env.TERM_PROGRAM) {\n\t\t\tcase 'iTerm.app': {\n\t\t\t\treturn version >= 3 ? 3 : 2;\n\t\t\t}\n\n\t\t\tcase 'Apple_Terminal': {\n\t\t\t\treturn 2;\n\t\t\t}\n\t\t\t// No default\n\t\t}\n\t}\n\n\tif (/-256(color)?$/i.test(env.TERM)) {\n\t\treturn 2;\n\t}\n\n\tif (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) {\n\t\treturn 1;\n\t}\n\n\tif ('COLORTERM' in env) {\n\t\treturn 1;\n\t}\n\n\treturn min;\n}\n\nexport function createSupportsColor(stream, options = {}) {\n\tconst level = _supportsColor(stream, {\n\t\tstreamIsTTY: stream && stream.isTTY,\n\t\t...options,\n\t});\n\n\treturn translateLevel(level);\n}\n\nconst supportsColor = {\n\tstdout: createSupportsColor({isTTY: tty.isatty(1)}),\n\tstderr: createSupportsColor({isTTY: tty.isatty(2)}),\n};\n\nexport default supportsColor;\n","// TODO: When targeting Node.js 16, use `String.prototype.replaceAll`.\nexport function stringReplaceAll(string, substring, replacer) {\n\tlet index = string.indexOf(substring);\n\tif (index === -1) {\n\t\treturn string;\n\t}\n\n\tconst substringLength = substring.length;\n\tlet endIndex = 0;\n\tlet returnValue = '';\n\tdo {\n\t\treturnValue += string.slice(endIndex, index) + substring + replacer;\n\t\tendIndex = index + substringLength;\n\t\tindex = string.indexOf(substring, endIndex);\n\t} while (index !== -1);\n\n\treturnValue += string.slice(endIndex);\n\treturn returnValue;\n}\n\nexport function stringEncaseCRLFWithFirstIndex(string, prefix, postfix, index) {\n\tlet endIndex = 0;\n\tlet returnValue = '';\n\tdo {\n\t\tconst gotCR = string[index - 1] === '\\r';\n\t\treturnValue += string.slice(endIndex, (gotCR ? index - 1 : index)) + prefix + (gotCR ? '\\r\\n' : '\\n') + postfix;\n\t\tendIndex = index + 1;\n\t\tindex = string.indexOf('\\n', endIndex);\n\t} while (index !== -1);\n\n\treturnValue += string.slice(endIndex);\n\treturn returnValue;\n}\n","import ansiStyles from '#ansi-styles';\nimport supportsColor from '#supports-color';\nimport { // eslint-disable-line import/order\n\tstringReplaceAll,\n\tstringEncaseCRLFWithFirstIndex,\n} from './utilities.js';\n\nconst {stdout: stdoutColor, stderr: stderrColor} = supportsColor;\n\nconst GENERATOR = Symbol('GENERATOR');\nconst STYLER = Symbol('STYLER');\nconst IS_EMPTY = Symbol('IS_EMPTY');\n\n// `supportsColor.level` → `ansiStyles.color[name]` mapping\nconst levelMapping = [\n\t'ansi',\n\t'ansi',\n\t'ansi256',\n\t'ansi16m',\n];\n\nconst styles = Object.create(null);\n\nconst applyOptions = (object, options = {}) => {\n\tif (options.level && !(Number.isInteger(options.level) && options.level >= 0 && options.level <= 3)) {\n\t\tthrow new Error('The `level` option should be an integer from 0 to 3');\n\t}\n\n\t// Detect level if not set manually\n\tconst colorLevel = stdoutColor ? stdoutColor.level : 0;\n\tobject.level = options.level === undefined ? colorLevel : options.level;\n};\n\nexport class Chalk {\n\tconstructor(options) {\n\t\t// eslint-disable-next-line no-constructor-return\n\t\treturn chalkFactory(options);\n\t}\n}\n\nconst chalkFactory = options => {\n\tconst chalk = (...strings) => strings.join(' ');\n\tapplyOptions(chalk, options);\n\n\tObject.setPrototypeOf(chalk, createChalk.prototype);\n\n\treturn chalk;\n};\n\nfunction createChalk(options) {\n\treturn chalkFactory(options);\n}\n\nObject.setPrototypeOf(createChalk.prototype, Function.prototype);\n\nfor (const [styleName, style] of Object.entries(ansiStyles)) {\n\tstyles[styleName] = {\n\t\tget() {\n\t\t\tconst builder = createBuilder(this, createStyler(style.open, style.close, this[STYLER]), this[IS_EMPTY]);\n\t\t\tObject.defineProperty(this, styleName, {value: builder});\n\t\t\treturn builder;\n\t\t},\n\t};\n}\n\nstyles.visible = {\n\tget() {\n\t\tconst builder = createBuilder(this, this[STYLER], true);\n\t\tObject.defineProperty(this, 'visible', {value: builder});\n\t\treturn builder;\n\t},\n};\n\nconst getModelAnsi = (model, level, type, ...arguments_) => {\n\tif (model === 'rgb') {\n\t\tif (level === 'ansi16m') {\n\t\t\treturn ansiStyles[type].ansi16m(...arguments_);\n\t\t}\n\n\t\tif (level === 'ansi256') {\n\t\t\treturn ansiStyles[type].ansi256(ansiStyles.rgbToAnsi256(...arguments_));\n\t\t}\n\n\t\treturn ansiStyles[type].ansi(ansiStyles.rgbToAnsi(...arguments_));\n\t}\n\n\tif (model === 'hex') {\n\t\treturn getModelAnsi('rgb', level, type, ...ansiStyles.hexToRgb(...arguments_));\n\t}\n\n\treturn ansiStyles[type][model](...arguments_);\n};\n\nconst usedModels = ['rgb', 'hex', 'ansi256'];\n\nfor (const model of usedModels) {\n\tstyles[model] = {\n\t\tget() {\n\t\t\tconst {level} = this;\n\t\t\treturn function (...arguments_) {\n\t\t\t\tconst styler = createStyler(getModelAnsi(model, levelMapping[level], 'color', ...arguments_), ansiStyles.color.close, this[STYLER]);\n\t\t\t\treturn createBuilder(this, styler, this[IS_EMPTY]);\n\t\t\t};\n\t\t},\n\t};\n\n\tconst bgModel = 'bg' + model[0].toUpperCase() + model.slice(1);\n\tstyles[bgModel] = {\n\t\tget() {\n\t\t\tconst {level} = this;\n\t\t\treturn function (...arguments_) {\n\t\t\t\tconst styler = createStyler(getModelAnsi(model, levelMapping[level], 'bgColor', ...arguments_), ansiStyles.bgColor.close, this[STYLER]);\n\t\t\t\treturn createBuilder(this, styler, this[IS_EMPTY]);\n\t\t\t};\n\t\t},\n\t};\n}\n\nconst proto = Object.defineProperties(() => {}, {\n\t...styles,\n\tlevel: {\n\t\tenumerable: true,\n\t\tget() {\n\t\t\treturn this[GENERATOR].level;\n\t\t},\n\t\tset(level) {\n\t\t\tthis[GENERATOR].level = level;\n\t\t},\n\t},\n});\n\nconst createStyler = (open, close, parent) => {\n\tlet openAll;\n\tlet closeAll;\n\tif (parent === undefined) {\n\t\topenAll = open;\n\t\tcloseAll = close;\n\t} else {\n\t\topenAll = parent.openAll + open;\n\t\tcloseAll = close + parent.closeAll;\n\t}\n\n\treturn {\n\t\topen,\n\t\tclose,\n\t\topenAll,\n\t\tcloseAll,\n\t\tparent,\n\t};\n};\n\nconst createBuilder = (self, _styler, _isEmpty) => {\n\t// Single argument is hot path, implicit coercion is faster than anything\n\t// eslint-disable-next-line no-implicit-coercion\n\tconst builder = (...arguments_) => applyStyle(builder, (arguments_.length === 1) ? ('' + arguments_[0]) : arguments_.join(' '));\n\n\t// We alter the prototype because we must return a function, but there is\n\t// no way to create a function with a different prototype\n\tObject.setPrototypeOf(builder, proto);\n\n\tbuilder[GENERATOR] = self;\n\tbuilder[STYLER] = _styler;\n\tbuilder[IS_EMPTY] = _isEmpty;\n\n\treturn builder;\n};\n\nconst applyStyle = (self, string) => {\n\tif (self.level <= 0 || !string) {\n\t\treturn self[IS_EMPTY] ? '' : string;\n\t}\n\n\tlet styler = self[STYLER];\n\n\tif (styler === undefined) {\n\t\treturn string;\n\t}\n\n\tconst {openAll, closeAll} = styler;\n\tif (string.includes('\\u001B')) {\n\t\twhile (styler !== undefined) {\n\t\t\t// Replace any instances already present with a re-opening code\n\t\t\t// otherwise only the part of the string until said closing code\n\t\t\t// will be colored, and the rest will simply be 'plain'.\n\t\t\tstring = stringReplaceAll(string, styler.close, styler.open);\n\n\t\t\tstyler = styler.parent;\n\t\t}\n\t}\n\n\t// We can move both next actions out of loop, because remaining actions in loop won't have\n\t// any/visible effect on parts we add here. Close the styling before a linebreak and reopen\n\t// after next line to fix a bleed issue on macOS: https://github.com/chalk/chalk/pull/92\n\tconst lfIndex = string.indexOf('\\n');\n\tif (lfIndex !== -1) {\n\t\tstring = stringEncaseCRLFWithFirstIndex(string, closeAll, openAll, lfIndex);\n\t}\n\n\treturn openAll + string + closeAll;\n};\n\nObject.defineProperties(createChalk.prototype, styles);\n\nconst chalk = createChalk();\nexport const chalkStderr = createChalk({level: stderrColor ? stderrColor.level : 0});\n\nexport {\n\tmodifierNames,\n\tforegroundColorNames,\n\tbackgroundColorNames,\n\tcolorNames,\n\n\t// TODO: Remove these aliases in the next major version\n\tmodifierNames as modifiers,\n\tforegroundColorNames as foregroundColors,\n\tbackgroundColorNames as backgroundColors,\n\tcolorNames as colors,\n} from './vendor/ansi-styles/index.js';\n\nexport {\n\tstdoutColor as supportsColor,\n\tstderrColor as supportsColorStderr,\n};\n\nexport default chalk;\n","import type { DataverseErrorResponse, DataverseErrorDetails } from './types.js'\n\nexport async function advancedLog(response: Response, requestUrl?: string, requestMethod?: string, requestBody?: string): Promise<DataverseErrorDetails> {\n  const timestamp = new Date().toISOString()\n  \n  // Extract headers\n  const headers: Record<string, string> = {}\n  response.headers.forEach((value, key) => {\n    headers[key] = value\n  })\n  \n  // Extract request ID if available (common in Dataverse responses)\n  const requestId = headers['request-id'] || headers['x-ms-request-id'] || headers['activityid']\n  \n  let errorDetails: DataverseErrorDetails = {\n    status: response.status,\n    statusText: response.statusText,\n    url: requestUrl || response.url,\n    method: requestMethod || 'GET',\n    headers,\n    timestamp,\n    requestId\n  }\n  \n  // Try to parse error response body\n  try {\n    // Clone the response to avoid \"body already read\" errors\n    const responseClone = response.clone()\n    const responseText = await responseClone.text()\n    errorDetails.body = responseText\n    \n    if (responseText) {\n      try {\n        const errorResponse: DataverseErrorResponse = JSON.parse(responseText)\n        if (errorResponse.error) {\n          errorDetails.error = errorResponse.error\n        }\n      } catch (parseError) {\n        console.warn('Failed to parse error response as JSON:', parseError)\n      }\n    }\n  } catch (textError) {\n    console.warn('Failed to read response body:', textError)\n  }\n  \n  // Log detailed error information\n  console.error('🚨 Dataverse API Error Details:')\n  console.error('━'.repeat(60))\n  console.error(`⏰ Timestamp: ${errorDetails.timestamp}`)\n  console.error(`🌐 URL: ${errorDetails.url}`)\n  console.error(`📋 Method: ${errorDetails.method}`)\n  console.error(`📊 Status: ${errorDetails.status} ${errorDetails.statusText}`)\n  \n  if (errorDetails.requestId) {\n    console.error(`🆔 Request ID: ${errorDetails.requestId}`)\n  }\n  \n  if (errorDetails.error) {\n    console.error('❌ Error Details:')\n    console.error(`   Code: ${errorDetails.error.code}`)\n    console.error(`   Message: ${errorDetails.error.message}`)\n    \n    if (errorDetails.error['@Microsoft.PowerApps.CDS.ErrorDetails.OperationStatus']) {\n      console.error(`   Operation Status: ${errorDetails.error['@Microsoft.PowerApps.CDS.ErrorDetails.OperationStatus']}`)\n    }\n    \n    if (errorDetails.error['@Microsoft.PowerApps.CDS.ErrorDetails.SubErrorCode']) {\n      console.error(`   Sub Error Code: ${errorDetails.error['@Microsoft.PowerApps.CDS.ErrorDetails.SubErrorCode']}`)\n    }\n    \n    if (errorDetails.error['@Microsoft.PowerApps.CDS.HelpLink']) {\n      console.error(`   Help Link: ${errorDetails.error['@Microsoft.PowerApps.CDS.HelpLink']}`)\n    }\n    \n    if (errorDetails.error['@Microsoft.PowerApps.CDS.TraceText']) {\n      console.error(`   Trace Text:`)\n      console.error(`   ${errorDetails.error['@Microsoft.PowerApps.CDS.TraceText']}`)\n    }\n    \n    if (errorDetails.error['@Microsoft.PowerApps.CDS.InnerError.Message']) {\n      console.error(`   Inner Error: ${errorDetails.error['@Microsoft.PowerApps.CDS.InnerError.Message']}`)\n    }\n  } else if (errorDetails.body) {\n    console.error('📄 Raw Response Body:')\n    console.error(errorDetails.body)\n  }\n  \n  console.error('📋 Request Headers:')\n  Object.entries(headers).forEach(([key, value]) => {\n    // Don't log sensitive headers\n    if (key.toLowerCase().includes('authorization') || key.toLowerCase().includes('cookie')) {\n      console.error(`   ${key}: [REDACTED]`)\n    } else {\n      console.error(`   ${key}: ${value}`)\n    }\n  })\n  \n  if (requestBody) {\n    console.error('📤 Request Body:')\n    console.error(requestBody)\n  }\n  \n  console.error('━'.repeat(60))\n  \n  return errorDetails\n}\n\nexport function getErrorCodeDescription(code: string): string {\n  // Common Dataverse error codes based on documentation\n  const errorDescriptions: Record<string, string> = {\n    '0x80040265': 'Generic custom business logic error',\n    '0x80040333': 'SQL timeout expired',\n    '0x80040888': 'Invalid query parameter',\n    '0x8004431A': 'Cannot add or act on behalf of another user privilege',\n    '0x80044150': 'Principal privilege denied',  \n    '0x80040220': 'Cannot assign to disabled user',\n    '0x80040225': 'Cannot assign to inactive business unit',\n    '0x80040237': 'Cannot delete due to association',\n    '0x80040216': 'Cannot create activity for inactive campaign',\n    '0x80040274': 'Duplicate record',\n    '0x80040264': 'Invalid argument',\n    '0x80040217': 'Invalid operation',\n    '0x80040266': 'Not supported',\n    '0x80040313': 'Concurrency version mismatch',\n    '0x80040201': 'Access denied',\n    '0x80040277': 'Attribute permission read is missing',\n    '0x80040278': 'Attribute permission update is missing during update',\n    '0x80040234': 'Attribute privilege create is missing',\n    '0x80040231': 'Cannot act on behalf of another user',\n    '0x80040230': 'CRM security error',\n    '0x80040200': 'Invalid access rights',\n    '0x80040276': 'Privilege create is disabled for organization',\n    '0x80040221': 'Privilege denied'\n  }\n  \n  return errorDescriptions[code] || 'Unknown error code'\n}\n\nexport function getStatusCodeDescription(status: number): string {\n  const statusDescriptions: Record<number, string> = {\n    400: 'Bad Request - Invalid request syntax or unsupported query parameters',\n    401: 'Unauthorized - Authentication failed or insufficient permissions',\n    403: 'Forbidden - Access denied or insufficient privileges',\n    404: 'Not Found - Resource does not exist',\n    405: 'Method Not Allowed - HTTP method not supported for this resource',\n    412: 'Precondition Failed - Concurrency or duplicate record issues',\n    413: 'Payload Too Large - Request size exceeds limits',\n    429: 'Too Many Requests - API rate limits exceeded',\n    501: 'Not Implemented - Operation not supported',\n    503: 'Service Unavailable - Dataverse service temporarily unavailable'\n  }\n  \n  return statusDescriptions[status] || 'Unknown status code'\n}","import crypto from 'crypto'\r\n\r\n/**\r\n * In-memory cache to avoid duplicate requests during single session\r\n */\r\ninterface CachedResponse {\r\n  body: string\r\n  status: number\r\n  statusText: string\r\n  headers: Record<string, string>\r\n}\r\n\r\nconst memoryCache = new Map<string, CachedResponse>()\r\n\r\n/**\r\n * Generate deterministic cache key from request parameters\r\n */\r\nfunction generateCacheKey(url: string, options: RequestInit = {}): string {\r\n  const normalizedUrl = url.toLowerCase().trim()\r\n  const method = (options.method || 'GET').toUpperCase()\r\n  \r\n  // Only include headers that affect response (exclude authorization since tokens change frequently)\r\n  const relevantHeaders: Record<string, string> = {}\r\n  if (options.headers) {\r\n    const headers = options.headers as Record<string, string>\r\n    // Include content negotiation headers but NOT authorization (tokens change)\r\n    for (const [key, value] of Object.entries(headers)) {\r\n      const lowerKey = key.toLowerCase()\r\n      if (lowerKey.includes('accept') || \r\n          lowerKey.includes('prefer')) {\r\n        relevantHeaders[lowerKey] = value\r\n      }\r\n    }\r\n  }\r\n  \r\n  const keyData = {\r\n    url: normalizedUrl,\r\n    method,\r\n    headers: relevantHeaders\r\n  }\r\n  \r\n  return crypto.createHash('sha256')\r\n    .update(JSON.stringify(keyData))\r\n    .digest('hex')\r\n}\r\n\r\n/**\r\n * Get response from memory cache if available\r\n */\r\nexport async function getFromCache(url: string, options: RequestInit = {}): Promise<Response | null> {\r\n  const cacheKey = generateCacheKey(url, options)\r\n  \r\n  const memoryHit = memoryCache.get(cacheKey)\r\n  if (memoryHit) {\r\n    // Return new Response from cached data\r\n    return new Response(memoryHit.body, {\r\n      status: memoryHit.status,\r\n      statusText: memoryHit.statusText,\r\n      headers: new Headers(memoryHit.headers)\r\n    })\r\n  }\r\n\r\n  return null\r\n}\r\n\r\n/**\r\n * Save successful response to memory cache\r\n */\r\nexport async function saveToCache(url: string, options: RequestInit = {}, response: Response): Promise<void> {\r\n  const cacheKey = generateCacheKey(url, options)\r\n  \r\n  if (response.ok && response.status === 200) {\r\n    // Read the body and save to cache\r\n    const body = await response.clone().text()\r\n    \r\n    // Convert headers to plain object\r\n    const headers: Record<string, string> = {}\r\n    response.headers.forEach((value, key) => {\r\n      headers[key] = value\r\n    })\r\n    \r\n    const cachedResponse: CachedResponse = {\r\n      body,\r\n      status: response.status,\r\n      statusText: response.statusText,\r\n      headers\r\n    }\r\n    \r\n    memoryCache.set(cacheKey, cachedResponse)\r\n  }\r\n}\r\n\r\n/**\r\n * Clear memory cache\r\n */\r\nexport function clearMemoryCache(): number {\r\n  const clearedCount = memoryCache.size\r\n  memoryCache.clear()\r\n  return clearedCount\r\n}\r\n\r\n/**\r\n * Get memory cache status\r\n */\r\nexport function getMemoryCacheStatus(): {\r\n  entryCount: number\r\n} {\r\n  return {\r\n    entryCount: memoryCache.size\r\n  }\r\n}","import { DefaultAzureCredential, TokenCredential } from '@azure/identity'\n\n// Cached token information\ninterface CachedToken {\n  token: string\n  expiresAt: number // Unix timestamp in milliseconds\n  resourceUrl: string\n}\n\n/**\n * Token manager that aggressively caches tokens to avoid repeated authentication\n * This is crucial for performance - getting a token takes 6-8 seconds!\n */\nexport class TokenManager {\n  private tokenCache = new Map<string, CachedToken>()\n  private readonly credential: TokenCredential\n  private readonly bufferTimeMs = 5 * 60 * 1000 // Refresh 5 minutes before expiry\n\n  constructor(credential?: TokenCredential) {\n    this.credential = credential || new DefaultAzureCredential()\n  }\n\n  /**\n   * Get a cached token or acquire a new one\n   * This method is the key to performance - it ensures we only get 1 token per resource per run\n   */\n  async getToken(resourceUrl: string): Promise<string> {\n    const normalizedUrl = this.normalizeResourceUrl(resourceUrl)\n    const cacheKey = normalizedUrl\n    \n    // Check if we have a valid cached token\n    const cached = this.tokenCache.get(cacheKey)\n    if (cached && this.isTokenValid(cached)) {\n      // Using cached token\n      return cached.token\n    }\n\n    // Acquire new token\n    \n    try {\n      const baseUrl = normalizedUrl.endsWith('/') ? normalizedUrl.slice(0, -1) : normalizedUrl\n      const scope = `${baseUrl}/.default`\n      \n      const tokenResponse = await this.credential.getToken([scope])\n      if (!tokenResponse?.token) {\n        throw new Error('No token received from credential')\n      }\n\n      // Token acquired successfully\n\n      // Cache the token\n      const cachedToken: CachedToken = {\n        token: tokenResponse.token,\n        expiresAt: tokenResponse.expiresOnTimestamp,\n        resourceUrl: normalizedUrl\n      }\n      this.tokenCache.set(cacheKey, cachedToken)\n\n      return tokenResponse.token\n\n    } catch (error) {\n      \n      throw new Error(\n        `Failed to acquire Azure access token for resource: ${resourceUrl}\\n` +\n        `Error: ${error instanceof Error ? error.message : String(error)}\\n\\n` +\n        `Please authenticate via one of these methods:\\n` +\n        `  • Azure CLI: az login\\n` +\n        `  • Environment variables: AZURE_CLIENT_ID, AZURE_CLIENT_SECRET, AZURE_TENANT_ID\\n` +\n        `  • Managed Identity (when running in Azure)`\n      )\n    }\n  }\n\n  /**\n   * Pre-acquire token for a resource to avoid delays during API calls\n   */\n  async preAcquireToken(resourceUrl: string): Promise<void> {\n    await this.getToken(resourceUrl)\n  }\n\n  /**\n   * Check if a cached token is still valid (with buffer time)\n   */\n  private isTokenValid(cached: CachedToken): boolean {\n    const now = Date.now()\n    const expiresWithBuffer = cached.expiresAt - this.bufferTimeMs\n    return now < expiresWithBuffer\n  }\n\n  /**\n   * Normalize resource URL for consistent caching\n   */\n  private normalizeResourceUrl(resourceUrl: string): string {\n    if (!resourceUrl) {\n      throw new Error('Resource URL is required for authentication')\n    }\n    \n    try {\n      const url = new URL(resourceUrl)\n      return `${url.protocol}//${url.host}`\n    } catch {\n      throw new Error(`Invalid resource URL: ${resourceUrl}`)\n    }\n  }\n\n  /**\n   * Clear all cached tokens (useful for testing)\n   */\n  clearCache(): void {\n    this.tokenCache.clear()\n  }\n\n  /**\n   * Get cache statistics\n   */\n  getCacheStats(): { totalTokens: number; validTokens: number } {\n    const totalTokens = this.tokenCache.size\n    let validTokens = 0\n    \n    for (const cached of this.tokenCache.values()) {\n      if (this.isTokenValid(cached)) {\n        validTokens++\n      }\n    }\n\n    return { totalTokens, validTokens }\n  }\n}\n\n// Global token manager instance\nlet globalTokenManager: TokenManager | null = null\n\n/**\n * Get the global token manager instance\n */\nexport function getTokenManager(credential?: TokenCredential): TokenManager {\n  if (!globalTokenManager) {\n    globalTokenManager = new TokenManager(credential)\n  }\n  return globalTokenManager\n}\n\n/**\n * Pre-acquire token using the global token manager\n */\nexport async function preAcquireGlobalToken(resourceUrl: string, credential?: TokenCredential): Promise<void> {\n  const manager = getTokenManager(credential)\n  await manager.preAcquireToken(resourceUrl)\n}","import { DefaultAzureCredential, TokenCredential } from '@azure/identity'\nimport { advancedLog } from '../error-logger.js'\nimport { getFromCache, saveToCache } from '../cache/index.js'\nimport { getTokenManager } from './token-manager.js'\n\n// Azure authentication options\nexport interface AzureAuthOptions {\n  resourceUrl: string\n  credential?: TokenCredential\n}\n\n/**\n * Simple authentication using DefaultAzureCredential\n * Supports Azure CLI, Environment Variables, Managed Identity, etc.\n */\nexport async function getAzureToken(options: AzureAuthOptions): Promise<string | null> {\n  const { resourceUrl, credential } = options\n  \n  try {\n    const normalizedUrl = validateResourceUrl(resourceUrl)\n    const useCredential = credential || new DefaultAzureCredential()\n    \n    // Construct proper scope\n    const baseUrl = normalizedUrl.endsWith('/') ? normalizedUrl.slice(0, -1) : normalizedUrl\n    const scope = `${baseUrl}/.default`\n    \n    const tokenResponse = await useCredential.getToken([scope])\n    return tokenResponse?.token || null\n  } catch (error) {\n    throw new Error(\n      `Failed to acquire Azure access token for resource: ${resourceUrl}\\n` +\n      `Error: ${error instanceof Error ? error.message : String(error)}\\n\\n` +\n      `Please authenticate via one of these methods:\\n` +\n      `  • Azure CLI: az login\\n` +\n      `  • Environment variables: AZURE_CLIENT_ID, AZURE_CLIENT_SECRET, AZURE_TENANT_ID\\n` +\n      `  • Managed Identity (when running in Azure)`\n    )\n  }\n}\n\n/**\n * Validate and normalize resource URL\n */\nfunction validateResourceUrl(resourceUrl: string): string {\n  if (!resourceUrl) {\n    throw new Error('Resource URL is required for authentication')\n  }\n  \n  try {\n    const url = new URL(resourceUrl)\n    return `${url.protocol}//${url.host}`\n  } catch {\n    throw new Error(`Invalid resource URL: ${resourceUrl}`)\n  }\n}\n\n/**\n * Create an authenticated fetch function for making API calls\n */\nexport function createAuthenticatedFetcher(\n  resourceUrl: string,\n  options: { \n    maxRetries?: number\n    baseDelay?: number\n    credential?: TokenCredential\n  } = {}\n) {\n  const { maxRetries = 3, baseDelay = 1000, credential } = options\n  \n  return async function authenticatedFetch(\n    url: string,\n    requestOptions: RequestInit = {}\n  ): Promise<Response> {\n    // Handle both absolute and relative URLs\n    const fullUrl = url.startsWith('http') ? url : `${resourceUrl.replace(/\\/$/, '')}${url}`\n    \n    let lastError: Error | null = null\n    \n    for (let attempt = 0; attempt <= maxRetries; attempt++) {\n      try {\n        \n        // Get cached token (much faster - no repeated authentication!)\n        const tokenManager = getTokenManager(credential)\n        const accessToken = await tokenManager.getToken(resourceUrl)\n        \n        if (!accessToken) {\n          throw new Error('Failed to acquire access token')\n        }\n        \n        // Check cache first (only for GET requests)\n        if (!requestOptions.method || requestOptions.method.toUpperCase() === 'GET') {\n          const cachedResponse = await getFromCache(fullUrl, requestOptions)\n          if (cachedResponse) {\n            return cachedResponse\n          }\n        }\n        \n        // Make the request with authentication\n        const headers = new Headers(requestOptions.headers)\n        headers.set('Authorization', `Bearer ${accessToken}`)\n        headers.set('Accept', 'application/json')\n        headers.set('Content-Type', 'application/json')\n        headers.set('Prefer', 'odata.include-annotations=\"*\"')\n        \n        const response = await fetch(fullUrl, {\n          ...requestOptions,\n          headers\n        })\n        \n        // Response parsing optimization\n        if (response.ok && response.headers.get('content-type')?.includes('application/json')) {\n          // Large responses are handled automatically\n        }\n        \n        // Save successful GET responses to cache\n        if (response.ok && (!requestOptions.method || requestOptions.method.toUpperCase() === 'GET')) {\n          await saveToCache(fullUrl, requestOptions, response.clone())\n        }\n        \n        // Handle rate limiting\n        if (response.status === 429) {\n          const retryAfter = parseInt(response.headers.get('Retry-After') || '5') * 1000\n          if (attempt < maxRetries) {\n            await new Promise(resolve => setTimeout(resolve, retryAfter))\n            continue\n          }\n        }\n        \n        \n        if (!response.ok) {\n          await advancedLog(response, fullUrl, requestOptions.method || 'GET', requestOptions.body as string)\n        }\n        \n        return response\n        \n      } catch (error) {\n        lastError = error instanceof Error ? error : new Error(String(error))\n        \n        if (attempt < maxRetries) {\n          // Exponential backoff\n          const delay = baseDelay * Math.pow(2, attempt)\n          await new Promise(resolve => setTimeout(resolve, delay))\n        }\n      }\n    }\n    \n    throw lastError || new Error('Authentication failed after all retries')\n  }\n}","import { advancedLog } from '../error-logger.js'\n\n/**\n * Request with retry capability\n */\ninterface QueuedRequest<T> {\n  execute: () => Promise<void>\n  resolve: (value: T) => void\n  reject: (error: unknown) => void\n  retryCount: number\n  maxRetries: number\n  priority: number\n}\n\n/**\n * Rate limit information from API response headers\n */\nexport interface RateLimitInfo {\n  remainingRequests?: number\n  remainingDuration?: number\n  retryAfter?: number\n}\n\n/**\n * Concurrent request queue that respects Dataverse API limits\n * \n * Limits (per user, per web server):\n * - 6,000 requests within 5-minute sliding window\n * - 52+ concurrent requests maximum\n * - 20 minutes combined execution time\n */\nexport class ConcurrentRequestQueue {\n  private activeRequests = 0\n  private readonly maxConcurrent: number\n  private readonly queue: Array<QueuedRequest<any>> = [] // eslint-disable-line @typescript-eslint/no-explicit-any\n  private rateLimitInfo: RateLimitInfo = {}\n  private readonly requestHistory: number[] = []\n  private totalRequestsCounter = 0 // Track total API calls made\n  private lastProgressLog = 0 // Track when we last logged progress\n\n  constructor(maxConcurrent = 25) {\n    // Reduced from 50 to 25 to avoid overwhelming Dataverse metadata endpoints\n    // 50 concurrent caused 3-8 second response times per request\n    \n    // Windows networking may be slower - reduce concurrency further on Windows\n    const platformMaxConcurrent = process.platform === 'win32' ? 15 : 25\n    this.maxConcurrent = Math.min(maxConcurrent, platformMaxConcurrent)\n    \n  }\n\n  /**\n   * Execute a request with automatic queuing and retry\n   */\n  async execute<T>(\n    request: () => Promise<Response>, \n    options: {\n      maxRetries?: number\n      priority?: number\n      url?: string\n      method?: string\n    } = {}\n  ): Promise<T> {\n    const { maxRetries = 3, priority = 0 } = options\n\n    return new Promise<T>((resolve, reject) => {\n      const queuedRequest: QueuedRequest<T> = {\n        execute: async () => {\n          try {\n            this.activeRequests++\n            this.totalRequestsCounter++\n            this.recordRequest()\n            \n            \n            const response = await request()\n            \n            this.updateRateLimitInfo(response)\n            \n            // Handle rate limiting\n            if (response.status === 429) {\n              const retryAfter = this.parseRetryAfter(response)\n              if (queuedRequest.retryCount < queuedRequest.maxRetries) {\n                console.warn(`Rate limited (429), retrying after ${retryAfter}ms...`)\n                await this.delay(retryAfter)\n                queuedRequest.retryCount++\n                this.queue.unshift(queuedRequest) // Priority retry\n                return\n              } else {\n                throw new Error(`Rate limit exceeded after ${maxRetries} retries`)\n              }\n            }\n\n            if (!response.ok) {\n              // Log error details for non-rate-limit errors\n              if (options.url) {\n                await advancedLog(response, options.url, options.method || 'GET')\n              }\n              throw new Error(`Request failed: ${response.status} ${response.statusText}`)\n            }\n\n            const result = await response.json() as T\n            resolve(result)\n          } catch (error) {\n            if (queuedRequest.retryCount < queuedRequest.maxRetries && this.isRetryableError(error)) {\n              console.warn(`Request failed, retrying (${queuedRequest.retryCount + 1}/${queuedRequest.maxRetries})...`, error)\n              queuedRequest.retryCount++\n              await this.delay(Math.pow(2, queuedRequest.retryCount) * 1000) // Exponential backoff\n              this.queue.unshift(queuedRequest) // Priority retry\n            } else {\n              reject(error)\n            }\n          } finally {\n            this.activeRequests--\n            this.processNext()\n          }\n        },\n        resolve,\n        reject,\n        retryCount: 0,\n        maxRetries,\n        priority\n      }\n\n      // Insert based on priority (higher priority first)\n      const insertIndex = this.queue.findIndex(req => req.priority < priority)\n      if (insertIndex === -1) {\n        this.queue.push(queuedRequest)\n      } else {\n        this.queue.splice(insertIndex, 0, queuedRequest)\n      }\n\n      this.processNext()\n    })\n  }\n\n  /**\n   * Process the next request in the queue if capacity allows\n   */\n  private async processNext(): Promise<void> {\n    // Check if we're hitting request rate limits\n    if (this.shouldThrottle()) {\n      const delay = this.calculateThrottleDelay()\n      if (delay > 0) {\n        setTimeout(() => this.processNext(), delay)\n        return\n      }\n    }\n\n    if (this.activeRequests >= this.maxConcurrent || this.queue.length === 0) {\n      return\n    }\n\n    const request = this.queue.shift()\n    if (request) {\n      // Don't await - let it run concurrently\n      request.execute().catch(error => {\n        console.error('Queue request execution failed:', error)\n      })\n    }\n  }\n\n  /**\n   * Update rate limit information from response headers\n   */\n  private updateRateLimitInfo(response: Response): void {\n    const remainingRequests = response.headers.get('x-ms-ratelimit-burst-remaining-xrm-requests')\n    const remainingDuration = response.headers.get('x-ms-ratelimit-time-remaining-xrm-requests')\n    const retryAfter = response.headers.get('Retry-After')\n\n    if (remainingRequests) {\n      this.rateLimitInfo.remainingRequests = parseInt(remainingRequests, 10)\n    }\n    if (remainingDuration) {\n      this.rateLimitInfo.remainingDuration = parseInt(remainingDuration, 10)\n    }\n    if (retryAfter) {\n      this.rateLimitInfo.retryAfter = parseInt(retryAfter, 10)\n    }\n  }\n\n  /**\n   * Parse Retry-After header value\n   */\n  private parseRetryAfter(response: Response): number {\n    const retryAfter = response.headers.get('Retry-After')\n    if (!retryAfter) return 1000 // Default 1 second\n\n    const seconds = parseInt(retryAfter, 10)\n    return isNaN(seconds) ? 1000 : seconds * 1000 // Convert to milliseconds\n  }\n\n  /**\n   * Record request timestamp for rate limiting\n   */\n  private recordRequest(): void {\n    const now = Date.now()\n    this.requestHistory.push(now)\n    \n    // Clean old requests (older than 5 minutes)\n    const fiveMinutesAgo = now - 5 * 60 * 1000\n    while (this.requestHistory.length > 0 && this.requestHistory[0] < fiveMinutesAgo) {\n      this.requestHistory.shift()\n    }\n  }\n\n  /**\n   * Check if we should throttle requests based on rate limits\n   */\n  private shouldThrottle(): boolean {\n    // If we have explicit rate limit info, use it\n    if (this.rateLimitInfo.remainingRequests !== undefined) {\n      return this.rateLimitInfo.remainingRequests < 100 // Throttle when under 100 requests remaining\n    }\n\n    // Otherwise, use our request history\n    const requestsInLast5Minutes = this.requestHistory.length\n    return requestsInLast5Minutes > 5000 // Throttle when approaching 6000 limit\n  }\n\n  /**\n   * Calculate delay for throttling\n   */\n  private calculateThrottleDelay(): number {\n    if (this.rateLimitInfo.retryAfter) {\n      return this.rateLimitInfo.retryAfter * 1000\n    }\n\n    // If we have remaining duration info, calculate based on that\n    if (this.rateLimitInfo.remainingDuration && this.rateLimitInfo.remainingRequests) {\n      const averageDelay = this.rateLimitInfo.remainingDuration / this.rateLimitInfo.remainingRequests\n      return Math.max(averageDelay * 1000, 100) // At least 100ms between requests\n    }\n\n    // Default throttling based on request history\n    const requestsInLast5Minutes = this.requestHistory.length\n    if (requestsInLast5Minutes > 5000) {\n      return Math.min((requestsInLast5Minutes - 5000) * 10, 5000) // Increase delay as we approach limit\n    }\n\n    return 0\n  }\n\n  /**\n   * Check if an error is retryable\n   */\n  private isRetryableError(error: unknown): boolean {\n    if (error instanceof Error) {\n      const message = error.message.toLowerCase()\n      return message.includes('timeout') || \n             message.includes('network') || \n             message.includes('connection') ||\n             message.includes('429') // Rate limit\n    }\n    return false\n  }\n\n  /**\n   * Delay utility\n   */\n  private delay(ms: number): Promise<void> {\n    return new Promise(resolve => setTimeout(resolve, ms))\n  }\n\n  /**\n   * Get current queue status\n   */\n  getStatus(): {\n    activeRequests: number\n    queuedRequests: number\n    rateLimitInfo: RateLimitInfo\n    requestsInLast5Minutes: number\n    totalRequestsMade: number\n  } {\n    return {\n      activeRequests: this.activeRequests,\n      queuedRequests: this.queue.length,\n      rateLimitInfo: { ...this.rateLimitInfo },\n      requestsInLast5Minutes: this.requestHistory.length,\n      totalRequestsMade: this.totalRequestsCounter\n    }\n  }\n\n  /**\n   * Log final statistics\n   */\n  logFinalStats(): void {\n    // Final statistics available via getStatus() if needed\n  }\n\n  /**\n   * Wait for all active requests to complete\n   */\n  async waitForCompletion(): Promise<void> {\n    while (this.activeRequests > 0 || this.queue.length > 0) {\n      await this.delay(100)\n    }\n  }\n}\n\n// Singleton instance for the entire application\nexport const globalRequestQueue = new ConcurrentRequestQueue()","import type { EntityDefinition } from '../types.js'\nimport { createAuthenticatedFetcher } from '../auth/index.js'\nimport { globalRequestQueue } from './concurrent-queue.js'\n\n// Create authenticated fetcher instance\nfunction getAuthenticatedFetch() {\n  const dataverseUrl = process.env.DATAVERSE_INSTANCE\n  if (!dataverseUrl) {\n    throw new Error('DATAVERSE_INSTANCE environment variable is required')\n  }\n  return createAuthenticatedFetcher(dataverseUrl)\n}\n\n/**\n * Batch size for OR filter conditions\n * Based on testing in API-KNOWLEDGE.md, up to 15 OR conditions work reliably\n */\nconst OR_BATCH_SIZE = 15\n\n/**\n * Progress callback for OR-filter batching\n */\nexport type OrFilterProgressCallback = (current: number, total: number, item?: string) => void\n\n/**\n * Fetch multiple entities using OR filter batching for optimal performance\n * \n * This leverages the API capability to filter multiple entities in a single request:\n * $filter=LogicalName eq 'entity1' or LogicalName eq 'entity2' or ...\n * \n * Based on API testing documented in API-KNOWLEDGE.md:\n * - Up to 15 OR conditions tested successfully\n * - Reduces API calls by 15x compared to individual requests\n * - Filter length up to 420 characters, URL length up to 608 characters\n * \n * @param entityNames - Array of entity logical names to fetch\n * @param select - Fields to select for each entity\n * @param onProgress - Optional progress callback\n * @returns Promise<EntityDefinition[]>\n */\nexport async function fetchEntitiesWithOrFilter(\n  entityNames: string[],\n  select: string[] = [\n    'LogicalName',\n    'SchemaName', \n    'DisplayName',\n    'Description',\n    'HasActivities',\n    'HasFeedback',\n    'HasNotes',\n    'IsActivity',\n    'IsCustomEntity',\n    'OwnershipType',\n    'PrimaryIdAttribute',\n    'PrimaryNameAttribute',\n    'EntitySetName'\n  ],\n  onProgress?: OrFilterProgressCallback\n): Promise<EntityDefinition[]> {\n  if (entityNames.length === 0) {\n    return []\n  }\n\n  const allEntities: EntityDefinition[] = []\n  let processedCount = 0\n  \n  // Process entity names in batches for OR filter\n  for (let i = 0; i < entityNames.length; i += OR_BATCH_SIZE) {\n    const batch = entityNames.slice(i, i + OR_BATCH_SIZE)\n    \n    try {\n      const batchEntities = await fetchEntityBatchWithOrFilter(batch, select)\n      allEntities.push(...batchEntities)\n      processedCount += batch.length\n      \n      // Report progress after each batch\n      if (onProgress) {\n        const lastEntityInBatch = batch[batch.length - 1]\n        onProgress(processedCount, entityNames.length, lastEntityInBatch)\n      }\n    } catch (error) {\n      console.warn(`Failed to fetch entity batch [${batch.join(', ')}]:`, error)\n      \n      // Fallback: Try individual requests for this batch\n      console.log(`Falling back to individual requests for batch: ${batch.join(', ')}`)\n      for (const entityName of batch) {\n        try {\n          const entity = await fetchSingleEntityWithQueue(entityName, select)\n          if (entity) {\n            allEntities.push(entity)\n          }\n          processedCount++\n          \n          // Report progress for individual fallback requests\n          if (onProgress) {\n            onProgress(processedCount, entityNames.length, entityName)\n          }\n        } catch (singleError) {\n          console.warn(`Failed to fetch individual entity '${entityName}':`, singleError)\n          processedCount++\n          \n          // Still report progress even for failed entities\n          if (onProgress) {\n            onProgress(processedCount, entityNames.length, entityName)\n          }\n        }\n      }\n    }\n  }\n\n  return allEntities\n}\n\n/**\n * Fetch a batch of entities using OR filter in a single API call\n */\nasync function fetchEntityBatchWithOrFilter(\n  entityNames: string[],\n  select: string[]\n): Promise<EntityDefinition[]> {\n  // Build OR filter: LogicalName eq 'entity1' or LogicalName eq 'entity2' or ...\n  const orConditions = entityNames.map(name => `LogicalName eq '${name}'`)\n  const filter = orConditions.join(' or ')\n  \n  // Build URL parameters\n  const params = new URLSearchParams()\n  if (select.length > 0) {\n    params.append('$select', select.join(','))\n  }\n  params.append('$filter', filter)\n  \n  const url = `/api/data/v9.1/EntityDefinitions?${params.toString()}`\n  \n  // Use the concurrent queue for this request\n  const response = await globalRequestQueue.execute<{ value: EntityDefinition[] }>(\n    () => getAuthenticatedFetch()(url, { method: 'GET' }),\n    { \n      url, \n      method: 'GET',\n      priority: 1 // High priority for entity metadata\n    }\n  )\n  \n  return response.value || []\n}\n\n/**\n * Fetch a single entity using the concurrent queue (fallback method)\n */\nasync function fetchSingleEntityWithQueue(\n  entityLogicalName: string,\n  select: string[]\n): Promise<EntityDefinition | null> {\n  try {\n    const params = new URLSearchParams()\n    if (select.length > 0) {\n      params.append('$select', select.join(','))\n    }\n    \n    const url = `/api/data/v9.2/EntityDefinitions(LogicalName='${entityLogicalName}')${params.toString() ? `?${params.toString()}` : ''}`\n    \n    const response = await globalRequestQueue.execute<EntityDefinition>(\n      () => getAuthenticatedFetch()(url, { method: 'GET' }),\n      { \n        url, \n        method: 'GET',\n        priority: 1\n      }\n    )\n    \n    return response\n    \n  } catch (error) {\n    // Check if it's a 404 (entity not found) - this is expected sometimes\n    if (error instanceof Error && error.message.includes('404')) {\n      return null\n    }\n    throw error\n  }\n}\n\n/**\n * Calculate optimal batch configuration based on entity names\n * \n * This analyzes the entity names to determine the best batching strategy\n * considering URL length limits and API capabilities.\n */\nexport function calculateOptimalBatching(entityNames: string[]): {\n  batchSize: number\n  estimatedRequests: number\n  averageEntityNameLength: number\n} {\n  if (entityNames.length === 0) {\n    return { batchSize: 0, estimatedRequests: 0, averageEntityNameLength: 0 }\n  }\n\n  const averageEntityNameLength = entityNames.reduce((sum, name) => sum + name.length, 0) / entityNames.length\n  \n  // Calculate estimated filter length for OR_BATCH_SIZE entities\n  // Format: LogicalName eq 'entity1' or LogicalName eq 'entity2' or ...\n  // Each condition: \"LogicalName eq '\" + entityName + \"'\" (17 chars + entity name length)\n  // Plus \" or \" between conditions (4 chars)\n  const estimatedFilterLength = OR_BATCH_SIZE * (17 + averageEntityNameLength) + (OR_BATCH_SIZE - 1) * 4\n  \n  let optimalBatchSize = OR_BATCH_SIZE\n  \n  // If estimated filter length is too long, reduce batch size\n  // API-KNOWLEDGE.md shows 420 characters tested successfully, so use 400 as safe limit\n  if (estimatedFilterLength > 400) {\n    optimalBatchSize = Math.floor(400 / (17 + averageEntityNameLength + 4))\n    optimalBatchSize = Math.max(1, Math.min(optimalBatchSize, OR_BATCH_SIZE))\n  }\n  \n  const estimatedRequests = Math.ceil(entityNames.length / optimalBatchSize)\n  \n  return {\n    batchSize: optimalBatchSize,\n    estimatedRequests,\n    averageEntityNameLength\n  }\n}\n\n/**\n * Analyze and log batching performance information (debug mode only)\n */\nexport function logBatchingAnalysis(entityNames: string[], debugMode: boolean = false): void {\n  if (!debugMode) return\n  \n  const analysis = calculateOptimalBatching(entityNames)\n  \n  console.log(`[STATS] OR-Filter Batching Analysis:`)\n  console.log(`   • Total entities: ${entityNames.length}`)\n  console.log(`   • Optimal batch size: ${analysis.batchSize}`)\n  console.log(`   • Estimated API requests: ${analysis.estimatedRequests}`)\n  console.log(`   • Average entity name length: ${analysis.averageEntityNameLength.toFixed(1)} chars`)\n  console.log(`   • Performance improvement: ${Math.round((entityNames.length / analysis.estimatedRequests) * 10) / 10}x fewer requests`)\n}","import type { EntityDefinition, AttributeMetadata } from '../types.js'\nimport { createAuthenticatedFetcher } from '../auth/index.js'\nimport { preAcquireGlobalToken } from '../auth/token-manager.js'\nimport { advancedLog, getStatusCodeDescription } from '../error-logger.js'\nimport { globalRequestQueue } from './concurrent-queue.js'\nimport { fetchEntitiesWithOrFilter } from './or-filter-batching.js'\n\n// Create authenticated fetcher instance\nfunction getAuthenticatedFetch() {\n  const dataverseUrl = process.env.DATAVERSE_INSTANCE\n  if (!dataverseUrl) {\n    throw new Error('DATAVERSE_INSTANCE environment variable is required')\n  }\n  return createAuthenticatedFetcher(dataverseUrl)\n}\n\n/**\n * Options for fetching entity metadata\n */\nexport interface FetchEntityMetadataOptions {\n  includeAttributes?: boolean\n  includeRelationships?: boolean\n  attributeTypes?: string[]\n  select?: string[]\n  progressCallback?: ProgressCallback\n}\n\n/**\n * Global option set definition from Dataverse API\n */\nexport interface GlobalOptionSetDefinition {\n  MetadataId: string\n  Name: string\n  DisplayName?: {\n    LocalizedLabels: Array<{ Label: string; LanguageCode: number }>\n    UserLocalizedLabel?: { Label: string; LanguageCode: number }\n  }\n  Description?: {\n    LocalizedLabels: Array<{ Label: string; LanguageCode: number }>\n    UserLocalizedLabel?: { Label: string; LanguageCode: number }\n  }\n  Options: Array<{\n    Value: number\n    Label?: {\n      LocalizedLabels: Array<{ Label: string; LanguageCode: number }>\n      UserLocalizedLabel?: { Label: string; LanguageCode: number }\n    }\n    Description?: {\n      LocalizedLabels: Array<{ Label: string; LanguageCode: number }>\n      UserLocalizedLabel?: { Label: string; LanguageCode: number }\n    }\n  }>\n  IsCustomOptionSet: boolean\n  IsGlobal: boolean\n  OptionSetType: string\n}\n\n/**\n * Picklist attribute metadata with expanded option set\n */\nexport interface PicklistAttributeMetadata extends AttributeMetadata {\n  '@odata.type': 'Microsoft.Dynamics.CRM.PicklistAttributeMetadata'\n  OptionSet?: {\n    MetadataId: string\n    Name?: string\n    DisplayName?: {\n      LocalizedLabels: Array<{ Label: string; LanguageCode: number }>\n      UserLocalizedLabel?: { Label: string; LanguageCode: number }\n    }\n    Options: Array<{\n      Value: number\n      Label?: {\n        LocalizedLabels: Array<{ Label: string; LanguageCode: number }>\n        UserLocalizedLabel?: { Label: string; LanguageCode: number }\n      }\n    }>\n    IsGlobal: boolean\n    IsCustomOptionSet: boolean\n  }\n  GlobalOptionSet?: string\n}\n\n/**\n * Multi-select picklist attribute metadata\n */\nexport interface MultiSelectPicklistAttributeMetadata extends AttributeMetadata {\n  '@odata.type': 'Microsoft.Dynamics.CRM.MultiSelectPicklistAttributeMetadata'\n  OptionSet?: PicklistAttributeMetadata['OptionSet']\n  GlobalOptionSet?: string\n}\n\n/**\n * Lookup attribute metadata with target information\n */\nexport interface LookupAttributeMetadata extends AttributeMetadata {\n  '@odata.type': 'Microsoft.Dynamics.CRM.LookupAttributeMetadata'\n  Targets?: string[]\n  Format?: string\n}\n\n/**\n * State attribute metadata\n */\nexport interface StateAttributeMetadata extends AttributeMetadata {\n  '@odata.type': 'Microsoft.Dynamics.CRM.StateAttributeMetadata'\n  OptionSet?: PicklistAttributeMetadata['OptionSet']\n}\n\n/**\n * Status attribute metadata\n */\nexport interface StatusAttributeMetadata extends AttributeMetadata {\n  '@odata.type': 'Microsoft.Dynamics.CRM.StatusAttributeMetadata'\n  OptionSet?: PicklistAttributeMetadata['OptionSet']\n}\n\n/**\n * Solution definition from Dataverse API\n */\nexport interface SolutionDefinition {\n  solutionid: string\n  uniquename: string\n  friendlyname?: string\n  version?: string\n  publisherid?: string\n  ismanaged?: boolean\n  description?: string\n}\n\n/**\n * Solution component definition from Dataverse API\n */\nexport interface SolutionComponent {\n  solutioncomponentid: string\n  solutionid?: string\n  _solutionid_value?: string  // Alternative field name returned by API\n  objectid: string\n  componenttype: number\n  rootcomponentbehavior?: number\n  ismetadata?: boolean\n}\n\n/**\n * Component type constants for solution components\n */\nexport const COMPONENT_TYPES = {\n  ENTITY: 1,\n  ATTRIBUTE: 2,\n  RELATIONSHIP: 10,\n  OPTION_SET: 9,\n  // Add more as needed\n} as const\n\n/**\n * Fetch single entity metadata from Dataverse\n * \n * @param entityLogicalName - The logical name of the entity (e.g., 'account', 'contact')\n * @param options - Options for customizing the fetch\n * @returns Promise<EntityDefinition | null>\n */\nexport async function fetchEntityMetadata(\n  entityLogicalName: string,\n  options: FetchEntityMetadataOptions = {}\n): Promise<EntityDefinition | null> {\n  const {\n    includeAttributes = true,\n    includeRelationships = false,\n    select = [\n      'LogicalName',\n      'SchemaName', \n      'DisplayName',\n      'Description',\n      'HasActivities',\n      'HasFeedback',\n      'HasNotes',\n      'IsActivity',\n      'IsCustomEntity',\n      'OwnershipType',\n      'PrimaryIdAttribute',\n      'PrimaryNameAttribute',\n      'EntitySetName'\n    ]\n  } = options\n\n  try {\n    // Build URL with proper OData parameters\n    const params = new URLSearchParams()\n    \n    if (select.length > 0) {\n      params.append('$select', select.join(','))\n    }\n    \n    // Add expand parameters if needed\n    const expandItems: string[] = []\n    if (includeAttributes) {\n      expandItems.push('Attributes')\n    }\n    if (includeRelationships) {\n      expandItems.push('OneToManyRelationships', 'ManyToOneRelationships', 'ManyToManyRelationships')\n    }\n    \n    if (expandItems.length > 0) {\n      params.append('$expand', expandItems.join(','))\n    }\n    \n    const url = `/api/data/v9.2/EntityDefinitions(LogicalName='${entityLogicalName}')${params.toString() ? `?${params.toString()}` : ''}`\n    \n    const authenticatedFetch = getAuthenticatedFetch()\n    const response = await authenticatedFetch(url, { method: 'GET' })\n    \n    if (response.status === 404) {\n      return null // Entity not found\n    }\n    \n    if (!response.ok) {\n      await advancedLog(response, url, 'GET')\n      const statusDescription = getStatusCodeDescription(response.status)\n      throw new Error(`Failed to fetch entity metadata for '${entityLogicalName}': ${response.status} ${response.statusText} - ${statusDescription}`)\n    }\n    \n    const entityData = await response.json() as EntityDefinition\n    \n    // If attributes are requested, fetch them separately with full OptionSet data\n    if (includeAttributes && entityData) {\n      try {\n        const detailedAttributes = await fetchEntityAttributes(entityLogicalName)\n        // Replace the basic attributes with detailed ones that include OptionSet data\n        entityData.Attributes = detailedAttributes\n      } catch (error) {\n        // If fetching detailed attributes fails, keep the basic ones\n        console.warn(`Failed to fetch detailed attributes for ${entityLogicalName}, using basic attributes:`, error)\n      }\n    }\n    \n    return entityData\n    \n  } catch (error) {\n    if (error instanceof Error) {\n      throw new Error(`Error fetching entity metadata for '${entityLogicalName}': ${error.message}`)\n    }\n    throw error\n  }\n}\n\n/**\n * Progress callback for entity fetching\n */\nexport type ProgressCallback = (current: number, total: number, entityName?: string) => void\n\n/**\n * Fetch ALL entity metadata from Dataverse for complete type safety\n * Used when fullMetadata is enabled in configuration\n */\nexport async function fetchAllEntityMetadata(\n  options: FetchEntityMetadataOptions & { onProgress?: ProgressCallback } = {}\n): Promise<EntityDefinition[]> {\n  console.log(`🌍 Fetching ALL entities from Dataverse for complete type safety...`)\n  \n  try {\n    // Get all entities with basic metadata first\n    const allEntities = await fetchAllEntities({\n      select: [\n        'LogicalName',\n        'SchemaName', \n        'DisplayName',\n        'Description',\n        'HasActivities',\n        'HasFeedback',\n        'HasNotes',\n        'IsActivity',\n        'IsCustomEntity',\n        'OwnershipType',\n        'PrimaryIdAttribute',\n        'PrimaryNameAttribute',\n        'EntitySetName'\n      ]\n    })\n    \n    console.log(`Found ${allEntities.length} total entities in Dataverse`)\n    \n    // Now fetch detailed metadata for each entity if attributes are requested\n    if (options.includeAttributes) {\n      const entitiesWithAttributes = await fetchMultipleEntities(\n        allEntities.map(e => e.LogicalName),\n        { ...options, onProgress: options.onProgress }\n      )\n      \n      console.log(`✅ Successfully fetched detailed metadata for ${entitiesWithAttributes.length} entities`)\n      return entitiesWithAttributes\n    }\n    \n    return allEntities\n    \n  } catch (error) {\n    if (error instanceof Error) {\n      throw new Error(`Error fetching all entity metadata: ${error.message}`)\n    }\n    throw error\n  }\n}\n\n/**\n * Fetch multiple entities metadata including related entities for type-safe expands\n */\nexport async function fetchMultipleEntitiesWithRelated(\n  entityNames: string[],\n  options: FetchEntityMetadataOptions & { includeRelatedEntities?: boolean } = {}\n): Promise<{\n  primaryEntities: EntityDefinition[]\n  relatedEntities: Map<string, EntityDefinition>\n}> {\n  const { includeRelatedEntities = false, ...baseOptions } = options\n  \n  console.log(`Fetching metadata for ${entityNames.length} primary entities...`)\n  \n  // Fetch primary entities with relationships if needed\n  const primaryEntities = await fetchMultipleEntities(entityNames, {\n    ...baseOptions,\n    includeRelationships: includeRelatedEntities\n  })\n\n  const relatedEntities = new Map<string, EntityDefinition>()\n\n  if (includeRelatedEntities && primaryEntities.length > 0) {\n    // Import processor function to extract related entity names\n    const { processEntityMetadata, extractRelatedEntityNames } = await import('../processors/index.js')\n    \n    // Process primary entities to extract related entity names\n    const allRelatedEntityNames = new Set<string>()\n    \n    for (const entity of primaryEntities) {\n      const processed = processEntityMetadata(entity)\n      const relatedNames = extractRelatedEntityNames(processed)\n      relatedNames.forEach(name => allRelatedEntityNames.add(name))\n    }\n\n    // Remove primary entities from related entities list to avoid duplicates\n    entityNames.forEach(name => allRelatedEntityNames.delete(name))\n\n    const relatedEntityArray = Array.from(allRelatedEntityNames)\n\n    if (relatedEntityArray.length > 0) {\n      console.log(`Discovering ${relatedEntityArray.length} related entities...`)\n      console.log(`Fetching metadata for related entities...`)\n      \n      // Fetch related entities metadata\n      const relatedEntitiesArray = await fetchMultipleEntities(relatedEntityArray, baseOptions)\n      \n      // Store in map for easy lookup\n      for (const entity of relatedEntitiesArray) {\n        relatedEntities.set(entity.LogicalName, entity)\n      }\n      \n      console.log(`✅ Successfully fetched ${relatedEntitiesArray.length} related entities`)\n    }\n  }\n\n  return {\n    primaryEntities,\n    relatedEntities\n  }\n}\n\n/**\n * Fetch entity attributes with proper casting for specific attribute types\n * This is essential for getting full picklist option data\n * \n * Uses parallel processing for attribute type casting to improve performance\n * \n * @param entityLogicalName - The logical name of the entity\n * @param attributeTypes - Specific attribute types to cast (optional)\n * @returns Promise<AttributeMetadata[]>\n */\nexport async function fetchEntityAttributes(\n  entityLogicalName: string,\n  attributeTypes: string[] = [\n    'Microsoft.Dynamics.CRM.PicklistAttributeMetadata',\n    'Microsoft.Dynamics.CRM.MultiSelectPicklistAttributeMetadata',\n    'Microsoft.Dynamics.CRM.StateAttributeMetadata',\n    'Microsoft.Dynamics.CRM.StatusAttributeMetadata',\n    'Microsoft.Dynamics.CRM.LookupAttributeMetadata'\n  ]\n): Promise<AttributeMetadata[]> {\n  \n  try {\n    // First fetch all attributes with basic information including AttributeOf for auxiliary filtering\n    const basicUrl = `/api/data/v9.2/EntityDefinitions(LogicalName='${entityLogicalName}')/Attributes?$select=LogicalName,SchemaName,DisplayName,Description,AttributeType,IsCustomAttribute,IsValidForCreate,IsValidForRead,IsValidForUpdate,RequiredLevel,IsPrimaryId,IsPrimaryName,AttributeOf`\n    \n    const basicData = await globalRequestQueue.execute<{ value: AttributeMetadata[] }>(\n      () => getAuthenticatedFetch()(basicUrl, { method: 'GET' }),\n      { \n        url: basicUrl, \n        method: 'GET',\n        priority: 2 // High priority for basic attributes\n      }\n    )\n    \n    const basicAttributes = basicData.value\n    \n    // Smart optimization: Only cast attribute types that actually exist in this entity\n    // This can reduce API calls from 5 per entity to 0-3 per entity on average\n    const existingAttributeTypes = new Set<string>()\n    for (const attr of basicAttributes) {\n      if (attr.AttributeType === 'Picklist') {\n        existingAttributeTypes.add('Microsoft.Dynamics.CRM.PicklistAttributeMetadata')\n      } else if (attr.AttributeType === 'MultiSelectPicklist') {\n        existingAttributeTypes.add('Microsoft.Dynamics.CRM.MultiSelectPicklistAttributeMetadata')\n      } else if (attr.AttributeType === 'State') {\n        existingAttributeTypes.add('Microsoft.Dynamics.CRM.StateAttributeMetadata')\n      } else if (attr.AttributeType === 'Status') {\n        existingAttributeTypes.add('Microsoft.Dynamics.CRM.StatusAttributeMetadata')\n      } else if (attr.AttributeType === 'Lookup' || attr.AttributeType === 'Customer' || attr.AttributeType === 'Owner') {\n        existingAttributeTypes.add('Microsoft.Dynamics.CRM.LookupAttributeMetadata')\n      }\n    }\n    \n    const relevantAttributeTypes = attributeTypes.filter(type => existingAttributeTypes.has(type))\n    \n    if (relevantAttributeTypes.length === 0) {\n      // No special attribute types found - return basic attributes only\n      return basicAttributes\n    }\n    \n    // Process only the relevant attribute types in parallel for much better performance\n    const castPromises = relevantAttributeTypes.map(async (attributeType) => {\n      try {\n        const castUrl = `/api/data/v9.2/EntityDefinitions(LogicalName='${entityLogicalName}')/Attributes/${attributeType}`\n        \n        // Add expand for option sets if dealing with picklist types\n        const expandParams = attributeType.includes('Picklist') || attributeType.includes('State') || attributeType.includes('Status')\n          ? '?$expand=OptionSet' \n          : ''\n        \n        const castData = await globalRequestQueue.execute<{ value: AttributeMetadata[] }>(\n          () => getAuthenticatedFetch()(`${castUrl}${expandParams}`, { method: 'GET' }),\n          {\n            url: `${castUrl}${expandParams}`,\n            method: 'GET',\n            priority: 1, // Lower priority than basic attributes\n            maxRetries: 2 // Fewer retries for attribute casting (non-critical)\n          }\n        )\n        \n        return castData.value || []\n      } catch (castError) {\n        console.warn(`Failed to cast attributes for type ${attributeType} on entity ${entityLogicalName}:`, castError)\n        return []\n      }\n    })\n    \n    // Wait for all attribute type casting to complete\n    const castResults = await Promise.all(castPromises)\n    \n    // Merge all cast attributes with basic attributes\n    for (const castAttributes of castResults) {\n      for (const castAttr of castAttributes) {\n        const basicIndex = basicAttributes.findIndex(attr => attr.LogicalName === castAttr.LogicalName)\n        if (basicIndex >= 0) {\n          // Replace basic attribute with cast version that has full details\n          basicAttributes[basicIndex] = { ...basicAttributes[basicIndex], ...castAttr }\n          }\n      }\n    }\n    \n    return basicAttributes\n    \n  } catch (error) {\n    if (error instanceof Error) {\n      throw new Error(`Error fetching entity attributes for '${entityLogicalName}': ${error.message}`)\n    }\n    throw error\n  }\n}\n\n/**\n * Fetch global option set definition\n * \n * @param optionSetName - The name of the global option set\n * @returns Promise<GlobalOptionSetDefinition | null>\n */\nexport async function fetchGlobalOptionSet(optionSetName: string): Promise<GlobalOptionSetDefinition | null> {\n  try {\n    const url = `/api/data/v9.2/GlobalOptionSetDefinitions(Name='${optionSetName}')`\n    \n    const optionSetData = await globalRequestQueue.execute<GlobalOptionSetDefinition>(\n      () => getAuthenticatedFetch()(url, { method: 'GET' }),\n      { \n        url, \n        method: 'GET',\n        priority: 0 // Normal priority for option sets\n      }\n    )\n    \n    return optionSetData\n    \n  } catch (error) {\n    // Check if it's a 404 (option set not found) - this is expected sometimes\n    if (error instanceof Error && error.message.includes('404')) {\n      return null\n    }\n    \n    if (error instanceof Error) {\n      throw new Error(`Error fetching global option set '${optionSetName}': ${error.message}`)\n    }\n    throw error\n  }\n}\n\n/**\n * Fetch entities by publisher prefix (not actual solution membership)\n * NOTE: Uses client-side filtering since startswith() is not supported by EntityDefinitions\n * \n * @param publisherPrefix - The publisher prefix (e.g., 'pum')\n * @returns Promise<EntityDefinition[]>\n */\nexport async function fetchPublisherEntities(\n  publisherPrefix: string\n): Promise<EntityDefinition[]> {\n  try {\n    // Since startswith() is NOT SUPPORTED (Error 0x8006088a), fetch all custom entities\n    // and filter client-side. See API-KNOWLEDGE.md for details.\n    const allCustomEntities = await fetchAllEntities({\n      customOnly: true,\n      select: ['LogicalName', 'SchemaName', 'DisplayName', 'Description', 'IsCustomEntity', 'PrimaryIdAttribute', 'PrimaryNameAttribute']\n    })\n    \n    // Filter client-side by publisher prefix\n    const filterPattern = `${publisherPrefix}_`\n    const solutionEntities = allCustomEntities.filter(entity => \n      entity.LogicalName.startsWith(filterPattern)\n    )\n    \n    // Note: If no entities found, solutionEntities will be empty array\n    \n    return solutionEntities\n    \n  } catch (error) {\n    if (error instanceof Error) {\n      throw new Error(`Error fetching publisher entities for publisher '${publisherPrefix}': ${error.message}`)\n    }\n    throw error\n  }\n}\n\n/**\n * Fetch multiple entities by logical names\n * \n * Uses OR-filter batching for optimal performance when cache is disabled\n * \n * @param entityNames - Array of entity logical names\n * @param options - Options for customizing the fetch\n * @returns Promise<EntityDefinition[]>\n */\nexport async function fetchMultipleEntities(\n  entityNames: string[],\n  options: FetchEntityMetadataOptions & { onProgress?: ProgressCallback } = {}\n): Promise<EntityDefinition[]> {\n  if (entityNames.length === 0) {\n    return []\n  }\n\n  // PRE-AUTHENTICATE: This is the key to performance!\n  // Get token once at the start instead of for every request (6-8 seconds each!)\n  const dataverseUrl = process.env.DATAVERSE_INSTANCE\n  if (!dataverseUrl) {\n    throw new Error('DATAVERSE_INSTANCE environment variable is required')\n  }\n  \n  // Pre-authenticate to avoid token delays during batch processing\n  await preAcquireGlobalToken(dataverseUrl)\n\n\n  const { onProgress, includeAttributes = true, includeRelationships = false } = options\n  \n  let basicEntities: EntityDefinition[] = []\n\n  if (includeRelationships) {\n    // When relationships are needed, OR-filter batching won't work (relationships require individual calls)\n    // Fall back to individual fetchEntityMetadata calls for complete relationship data\n    console.log(`Relationships needed - using individual entity calls for ${entityNames.length} entities`)\n    const batchSize = 10 // Much smaller batches for relationship calls to avoid overwhelming Dataverse\n    \n    for (let i = 0; i < entityNames.length; i += batchSize) {\n      const batch = entityNames.slice(i, i + batchSize)\n      \n      const batchPromises = batch.map(entityName => \n        fetchEntityMetadata(entityName, options).catch(error => {\n          console.warn(`Failed to fetch entity '${entityName}':`, error)\n          return null\n        })\n      )\n      \n      const batchResults = await Promise.all(batchPromises)\n      \n      // Add successful results to entities array\n      for (const result of batchResults) {\n        if (result) {\n          basicEntities.push(result)\n        }\n      }\n      \n      // Report progress after each batch\n      if (onProgress) {\n        const currentCount = Math.min(i + batchSize, entityNames.length)\n        const lastEntityInBatch = batch[batch.length - 1]\n        onProgress(currentCount, entityNames.length, lastEntityInBatch)\n      }\n      \n      // Add delay between batches to avoid overwhelming Dataverse with relationship calls\n      if (i + batchSize < entityNames.length) {\n        await new Promise(resolve => setTimeout(resolve, 500)) // 500ms delay between batches\n      }\n    }\n  } else {\n    // When no relationships needed, use OR-filter batching for optimal performance\n    console.log(`Using OR-filter batching for optimal performance`)\n    \n    // First, get basic entity definitions using OR-filter batching\n    basicEntities = await fetchEntitiesWithOrFilter(entityNames, [\n      'LogicalName',\n      'SchemaName', \n      'DisplayName',\n      'Description',\n      'HasActivities',\n      'HasFeedback',\n      'HasNotes',\n      'IsActivity',\n      'IsCustomEntity',\n      'OwnershipType',\n      'PrimaryIdAttribute',\n      'PrimaryNameAttribute',\n      'EntitySetName'\n    ], onProgress ? (current: number, total: number, item?: string): void => {\n      // When attributes are included, entity fetching is just the first phase\n      // So we report progress as current/total but with \"Basic\" prefix to indicate phase\n      if (includeAttributes) {\n        onProgress(current, total, `Basic: ${item || ''}`)\n      } else {\n        // When no attributes needed, this is the final progress\n        onProgress(current, total, item)\n      }\n    } : undefined)\n  }\n  \n\n  // If attributes are needed, fetch them for each entity using the concurrent queue\n  if (includeAttributes && basicEntities.length > 0) {\n    \n    // Track completed entities for accurate progress reporting\n    let completedAttributeEntities = 0\n    \n    // Process attribute requests in batches to avoid Promise.all() overhead with 875+ entities\n    const batchSize = 50 // Process 50 entities at a time\n    const entitiesWithAttributes: EntityDefinition[] = []\n    \n    for (let i = 0; i < basicEntities.length; i += batchSize) {\n      const batch = basicEntities.slice(i, i + batchSize)\n      \n      const batchPromises = batch.map(async (entity) => {\n        try {\n          const detailedAttributes = await fetchEntityAttributes(entity.LogicalName)\n          entity.Attributes = detailedAttributes\n          \n          // Atomically increment and report progress (only every 1% to avoid spam)\n          completedAttributeEntities++\n          if (onProgress) {\n            const percentComplete = Math.floor((completedAttributeEntities / basicEntities.length) * 100)\n            const prevPercentComplete = Math.floor(((completedAttributeEntities - 1) / basicEntities.length) * 100)\n            \n            // Only report progress when percentage changes, or for the final entity\n            if (percentComplete !== prevPercentComplete || completedAttributeEntities === basicEntities.length) {\n              onProgress(completedAttributeEntities, basicEntities.length, entity.LogicalName)\n            }\n          }\n          \n          return entity\n        } catch (error) {\n          console.warn(`Failed to fetch attributes for ${entity.LogicalName}, using basic entity:`, error)\n          \n          // Still increment progress for failed entities (only every 1% to avoid spam)\n          completedAttributeEntities++\n          if (onProgress) {\n            const percentComplete = Math.floor((completedAttributeEntities / basicEntities.length) * 100)\n            const prevPercentComplete = Math.floor(((completedAttributeEntities - 1) / basicEntities.length) * 100)\n            \n            // Only report progress when percentage changes, or for the final entity\n            if (percentComplete !== prevPercentComplete || completedAttributeEntities === basicEntities.length) {\n              onProgress(completedAttributeEntities, basicEntities.length, entity.LogicalName)\n            }\n          }\n          \n          return entity // Return basic entity without detailed attributes\n        }\n      })\n      \n      const batchResults = await Promise.all(batchPromises)\n      entitiesWithAttributes.push(...batchResults)\n    }\n    \n    return entitiesWithAttributes\n  }\n  \n  return basicEntities\n}\n\n/**\n * Check if an entity exists\n * \n * @param entityLogicalName - The logical name of the entity\n * @returns Promise<boolean>\n */\nexport async function entityExists(entityLogicalName: string): Promise<boolean> {\n  try {\n    const url = `/api/data/v9.2/EntityDefinitions(LogicalName='${entityLogicalName}')?$select=LogicalName`\n    \n    const authenticatedFetch = getAuthenticatedFetch()\n    const response = await authenticatedFetch(url, { method: 'GET' })\n    \n    return response.ok\n  } catch {\n    return false\n  }\n}\n\n/**\n * Get all available entities (EntityDefinitions endpoint does not support $top/$skip pagination)\n * \n * @param options - Options for filtering (no pagination support)\n * @returns Promise<EntityDefinition[]>\n */\nexport async function fetchAllEntities(options: {\n  filter?: string\n  customOnly?: boolean\n  select?: string[]\n} = {}): Promise<EntityDefinition[]> {\n  const {\n    filter,\n    customOnly = false,\n    select = ['LogicalName', 'SchemaName', 'DisplayName', 'IsCustomEntity']\n  } = options\n  \n  try {\n    const params = new URLSearchParams()\n    \n    if (select.length > 0) {\n      params.append('$select', select.join(','))\n    }\n    \n    // Build filter\n    const filters: string[] = []\n    if (customOnly) {\n      filters.push('IsCustomEntity eq true')\n    }\n    if (filter) {\n      filters.push(filter)\n    }\n    \n    if (filters.length > 0) {\n      params.append('$filter', filters.join(' and '))\n    }\n    \n    // Note: $top and $skip are NOT SUPPORTED by EntityDefinitions endpoint\n    // See API-KNOWLEDGE.md for details - Error Code: 0x80060888\n    \n    const url = `/api/data/v9.2/EntityDefinitions?${params.toString()}`\n    \n    const authenticatedFetch = getAuthenticatedFetch()\n    const response = await authenticatedFetch(url, { method: 'GET' })\n    \n    if (!response.ok) {\n      await advancedLog(response, url, 'GET')\n      const statusDescription = getStatusCodeDescription(response.status)\n      throw new Error(`Failed to fetch all entities: ${response.status} ${response.statusText} - ${statusDescription}`)\n    }\n    \n    const data = await response.json() as { value: EntityDefinition[] }\n    \n    // Since API doesn't support pagination, we need to implement client-side filtering if needed\n    return data.value\n    \n  } catch (error) {\n    if (error instanceof Error) {\n      throw new Error(`Error fetching all entities: ${error.message}`)\n    }\n    throw error\n  }\n}\n\n/**\n * Find solution by unique name or friendly name\n * \n * @param solutionName - Solution unique name or friendly name\n * @returns Promise<SolutionDefinition | null>\n */\nexport async function findSolution(solutionName: string): Promise<SolutionDefinition | null> {\n  try {\n    // First try by unique name (most common)\n    let url = `/api/data/v9.2/solutions?$filter=uniquename eq '${solutionName}'&$select=solutionid,uniquename,friendlyname,version,publisherid,ismanaged,description`\n    \n    const authenticatedFetch = getAuthenticatedFetch()\n    let response = await authenticatedFetch(url, { method: 'GET' })\n    \n    if (!response.ok) {\n      await advancedLog(response, url, 'GET')\n      const statusDescription = getStatusCodeDescription(response.status)\n      throw new Error(`Failed to search solutions by unique name '${solutionName}': ${response.status} ${response.statusText} - ${statusDescription}`)\n    }\n    \n    let data = await response.json() as { value: SolutionDefinition[] }\n    \n    if (data.value.length > 0) {\n      return data.value[0]\n    }\n    \n    // If not found by unique name, try by friendly name\n    url = `/api/data/v9.2/solutions?$filter=friendlyname eq '${solutionName}'&$select=solutionid,uniquename,friendlyname,version,publisherid,ismanaged,description`\n    \n    response = await authenticatedFetch(url, { method: 'GET' })\n    \n    if (!response.ok) {\n      await advancedLog(response, url, 'GET')\n      const statusDescription = getStatusCodeDescription(response.status)\n      throw new Error(`Failed to search solutions by friendly name '${solutionName}': ${response.status} ${response.statusText} - ${statusDescription}`)\n    }\n    \n    data = await response.json() as { value: SolutionDefinition[] }\n    \n    return data.value.length > 0 ? data.value[0] : null\n    \n  } catch (error) {\n    if (error instanceof Error) {\n      throw new Error(`Error finding solution '${solutionName}': ${error.message}`)\n    }\n    throw error\n  }\n}\n\n/**\n * Fetch solution components by solution ID\n * \n * @param solutionId - The solution GUID\n * @param componentType - The component type to filter by (optional)\n * @returns Promise<SolutionComponent[]>\n */\nexport async function fetchSolutionComponents(\n  solutionId: string,\n  componentType?: number\n): Promise<SolutionComponent[]> {\n  try {\n    const params = new URLSearchParams()\n    \n    // Build filter - solutionid needs to be properly formatted as GUID\n    const filters: string[] = [`_solutionid_value eq '${solutionId}'`]\n    if (componentType !== undefined) {\n      filters.push(`componenttype eq ${componentType}`)\n    }\n    \n    params.append('$filter', filters.join(' and '))\n    params.append('$select', 'solutioncomponentid,solutionid,objectid,componenttype,rootcomponentbehavior,ismetadata')\n    \n    const url = `/api/data/v9.2/solutioncomponents?${params.toString()}`\n    \n    const authenticatedFetch = getAuthenticatedFetch()\n    const response = await authenticatedFetch(url, { method: 'GET' })\n    \n    if (!response.ok) {\n      await advancedLog(response, url, 'GET')\n      const statusDescription = getStatusCodeDescription(response.status)\n      throw new Error(`Failed to fetch solution components for solution '${solutionId}': ${response.status} ${response.statusText} - ${statusDescription}`)\n    }\n    \n    const data = await response.json() as { value: SolutionComponent[] }\n    return data.value\n    \n  } catch (error) {\n    if (error instanceof Error) {\n      throw new Error(`Error fetching solution components for solution '${solutionId}': ${error.message}`)\n    }\n    throw error\n  }\n}\n\n/**\n * Fetch entities from a specific solution by solution name (actual solution membership)\n * This provides true solution-based filtering, not just publisher prefix matching\n * \n * @param solutionName - The solution unique name or friendly name\n * @returns Promise<EntityDefinition[]>\n */\nexport async function fetchSolutionEntities(solutionName: string): Promise<EntityDefinition[]> {\n  try {\n    // Find the solution\n    const solution = await findSolution(solutionName)\n    \n    if (!solution) {\n      return [] // Solution not found, return empty array\n    }\n    \n    // Get entity components from the solution\n    const entityComponents = await fetchSolutionComponents(solution.solutionid, COMPONENT_TYPES.ENTITY)\n    \n    if (entityComponents.length === 0) {\n      return [] // No entity components in solution\n    }\n    \n    // Fetch entity metadata for each component\n    const entities: EntityDefinition[] = []\n    \n    // Process in batches\n    const batchSize = 15  // Conservative batch size for API calls\n    for (let i = 0; i < entityComponents.length; i += batchSize) {\n      const batch = entityComponents.slice(i, i + batchSize)\n      \n      const batchPromises = batch.map(async (component) => {\n        try {\n          // Use the objectid to fetch the entity metadata by MetadataId\n          const url = `/api/data/v9.2/EntityDefinitions?$filter=MetadataId eq ${component.objectid}&$select=LogicalName,SchemaName,DisplayName,Description,IsCustomEntity,PrimaryIdAttribute,PrimaryNameAttribute,EntitySetName`\n          \n          const authenticatedFetch = getAuthenticatedFetch()\n    const response = await authenticatedFetch(url, { method: 'GET' })\n          \n          if (response.ok) {\n            const data = await response.json() as { value: EntityDefinition[] }\n            return data.value.length > 0 ? data.value[0] : null\n          } else {\n            console.warn(`Failed to fetch entity metadata for component ${component.objectid}:`, response.status, response.statusText)\n            return null\n          }\n        } catch (error) {\n          console.warn(`Failed to fetch entity for component ${component.objectid}:`, error)\n          return null\n        }\n      })\n      \n      const batchResults = await Promise.all(batchPromises)\n      \n      // Add successful results to entities array\n      for (const result of batchResults) {\n        if (result) {\n          entities.push(result)\n        }\n      }\n      \n      // Add delay between batches to avoid overwhelming the API\n      if (i + batchSize < entityComponents.length) {\n        await new Promise(resolve => setTimeout(resolve, 50))\n      }\n    }\n    \n    return entities\n    \n  } catch (error) {\n    if (error instanceof Error) {\n      throw new Error(`Error fetching solution entities for solution '${solutionName}': ${error.message}`)\n    }\n    throw error\n  }\n}","/**\n * Utilities for calculating correct import paths based on directory organization\n */\n\n/**\n * Helper to determine the correct import path for entity files based on directory structure\n */\nexport function getEntityImportPath(\n  fromEntityLogicalName: string,\n  toEntityLogicalName: string,\n  primaryEntities: string[] = [],\n  relatedEntitiesDir: string = 'related'\n): string {\n  const fromIsPrimary = primaryEntities.includes(fromEntityLogicalName)\n  const toIsPrimary = primaryEntities.includes(toEntityLogicalName)\n  \n  if (fromIsPrimary && toIsPrimary) {\n    // Both primary: ./entity\n    return `./${toEntityLogicalName.toLowerCase()}.js`\n  } else if (fromIsPrimary && !toIsPrimary) {\n    // From primary to related: ./related/entity\n    return `./${relatedEntitiesDir}/${toEntityLogicalName.toLowerCase()}.js`\n  } else if (!fromIsPrimary && toIsPrimary) {\n    // From related to primary: ../entity\n    return `../${toEntityLogicalName.toLowerCase()}.js`\n  } else {\n    // Both related: ./entity\n    return `./${toEntityLogicalName.toLowerCase()}.js`\n  }\n}\n\n/**\n * Helper to determine the correct import path for shared files (query-types, global-choices) \n * based on directory structure\n */\nexport function getSharedImportPath(\n  fromEntityLogicalName: string,\n  sharedFile: string,\n  primaryEntities: string[] = []\n): string {\n  const fromIsPrimary = primaryEntities.includes(fromEntityLogicalName)\n  \n  if (fromIsPrimary) {\n    // From primary: ./shared-file or ./subdirectory/file\n    return `./${sharedFile}`\n  } else {\n    // From related: ../shared-file or ../subdirectory/file\n    return `../${sharedFile}`\n  }\n}\n\n/**\n * Helper to determine import path from hooks directory to entity files\n */\nexport function getHooksToEntityImportPath(\n  entityLogicalName: string,\n  primaryEntities: string[] = [],\n  relatedEntitiesDir: string = 'related'\n): string {\n  const entityIsPrimary = primaryEntities.includes(entityLogicalName)\n  \n  if (entityIsPrimary) {\n    // From hooks to primary entity: ../entity\n    return `../${entityLogicalName.toLowerCase()}.js`\n  } else {\n    // From hooks to related entity: ../related/entity\n    return `../${relatedEntitiesDir}/${entityLogicalName.toLowerCase()}.js`\n  }\n}\n\n/**\n * Helper to determine import path from hooks directory to shared files\n */\nexport function getHooksToSharedImportPath(\n  sharedFile: string\n): string {\n  // From hooks directory to shared files: ../shared-file\n  return `../${sharedFile}`\n}\n\n/**\n * Check if directory organization should be enabled based on configuration\n */\nexport function shouldOrganizeDirectories(\n  relatedEntitiesDir: string | undefined,\n  fullMetadata: boolean,\n  primaryEntities: string[] = []\n): boolean {\n  return !!(relatedEntitiesDir && (fullMetadata || primaryEntities.length > 0))\n}","/**\n * Utility functions for TypeScript generation\n */\n\n/**\n * Sanitize a property name to be a valid JavaScript identifier\n */\nexport function sanitizePropertyName(name: string): string {\n  // Ensure property name is a valid JavaScript identifier\n  let sanitized = name.replace(/[^a-zA-Z0-9_$]/g, '_')\n  \n  // Ensure it doesn't start with a number\n  if (/^[0-9]/.test(sanitized)) {\n    sanitized = `_${sanitized}`\n  }\n  \n  // Handle reserved keywords by prefixing with underscore\n  if (isReservedKeyword(sanitized)) {\n    sanitized = `_${sanitized}`\n  }\n  \n  return sanitized\n}\n\n/**\n * Sanitize an interface name to be a valid TypeScript interface identifier\n */\nexport function sanitizeInterfaceName(name: string): string {\n  // Ensure interface name is a valid JavaScript identifier\n  let sanitized = name.replace(/[^a-zA-Z0-9_$]/g, '_')\n  \n  // Ensure it doesn't start with a number\n  if (/^[0-9]/.test(sanitized)) {\n    sanitized = `_${sanitized}`\n  }\n  \n  // Handle reserved keywords by capitalizing the first letter\n  if (isReservedKeyword(sanitized)) {\n    sanitized = sanitized.charAt(0).toUpperCase() + sanitized.slice(1)\n  }\n  \n  return sanitized\n}\n\n/**\n * Check if a name is a reserved keyword\n */\nfunction isReservedKeyword(name: string): boolean {\n  const reservedKeywords = [\n    'break', 'case', 'catch', 'class', 'const', 'continue', 'debugger', 'default', 'delete', 'do',\n    'else', 'enum', 'export', 'extends', 'false', 'finally', 'for', 'function', 'if', 'import',\n    'in', 'instanceof', 'new', 'null', 'return', 'super', 'switch', 'this', 'throw', 'true',\n    'try', 'typeof', 'var', 'void', 'while', 'with', 'yield', 'let', 'static', 'implements',\n    'interface', 'package', 'private', 'protected', 'public', 'abstract', 'as', 'any', 'boolean',\n    'number', 'string', 'symbol', 'type', 'from', 'of', 'readonly', 'keyof', 'infer', 'never',\n    'unknown', 'object', 'undefined'\n  ]\n  \n  return reservedKeywords.includes(name.toLowerCase())\n}\n\n/**\n * Sanitize option label to be a valid identifier\n */\nexport function sanitizeOptionName(label: string): string {\n  // Convert label to PascalCase identifier\n  let sanitized = label\n    .replace(/[^a-zA-Z0-9\\s]/g, '') // Remove special characters\n    .replace(/\\s+/g, ' ') // Normalize spaces\n    .split(' ')\n    .map(word => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())\n    .join('')\n    .replace(/^[0-9]/, '_$&') // Handle leading numbers\n  \n  // If the sanitized name is empty (e.g., emoji-only labels), generate a fallback\n  if (!sanitized || sanitized.trim() === '') {\n    // Create a fallback name using the original label's character codes\n    const fallback = 'Option' + Array.from(label)\n      .map(char => char.charCodeAt(0))\n      .join('')\n    return fallback\n  }\n  \n  return sanitized\n}\n\n/**\n * Generate option set constant name from option set name\n */\nexport function generateOptionSetConstantName(optionSetName: string): string {\n  // Convert to PascalCase\n  return optionSetName\n    .split('_')\n    .map(part => part.charAt(0).toUpperCase() + part.slice(1).toLowerCase())\n    .join('')\n}\n\n/**\n * Generate option set type name from option set name\n */\nexport function generateOptionSetTypeName(optionSetName: string): string {\n  return generateOptionSetConstantName(optionSetName)\n}\n\n/**\n * Escape string for safe inclusion in generated code\n */\nexport function escapeString(str: string): string {\n  return str.replace(/\\\\/g, '\\\\\\\\').replace(/\"/g, '\\\\\"').replace(/\\n/g, '\\\\n').replace(/\\r/g, '\\\\r')\n}","import type { \n  ProcessedEntityMetadata, \n  ProcessedAttributeMetadata\n} from '../processors/index.js'\nimport type { TypeGenerationOptions } from './index.js'\nimport { sanitizePropertyName, sanitizeInterfaceName } from './utils.js'\n\n/**\n * Generate TypeScript interface for an entity\n */\nexport function generateEntityInterface(\n  entityMetadata: ProcessedEntityMetadata,\n  options: TypeGenerationOptions = {}\n): string {\n  const {\n    entityPrefix = '',\n    includeComments = true,\n    excludeAuxiliaryAttributes = true\n  } = options\n\n  const lines: string[] = []\n  const schemaName = sanitizeInterfaceName(entityMetadata.schemaName)\n  const interfaceName = `${entityPrefix}${schemaName}`\n\n  // Add entity comments\n  if (includeComments) {\n    lines.push(`/**`)\n    lines.push(` * ${entityMetadata.displayName}`)\n    if (entityMetadata.description) {\n      lines.push(` * ${entityMetadata.description}`)\n    }\n    lines.push(` * Entity: ${entityMetadata.logicalName}`)\n    lines.push(` * Schema: ${entityMetadata.schemaName}`)\n    lines.push(` * Primary Key: ${entityMetadata.primaryIdAttribute}`)\n    if (entityMetadata.primaryNameAttribute) {\n      lines.push(` * Primary Name: ${entityMetadata.primaryNameAttribute}`)\n    }\n    lines.push(` */`)\n  }\n\n  lines.push(`export interface ${interfaceName} {`)\n\n  // Process attributes\n  let attributesToProcess = entityMetadata.attributes\n  \n  // Filter out auxiliary attributes if requested\n  if (excludeAuxiliaryAttributes) {\n    attributesToProcess = attributesToProcess.filter(attr => \n      !attr.attributeOf || // Exclude auxiliary attributes\n      attr.isPrimaryId ||  // Always include primary ID\n      attr.logicalName === entityMetadata.primaryNameAttribute // Always include primary name\n    )\n  }\n\n  // Generate properties for each attribute\n  for (const attribute of attributesToProcess) {\n    const propertyLines = generateAttributeProperty(attribute, options)\n    propertyLines.forEach(line => lines.push(`  ${line}`))\n  }\n\n  lines.push(`}`)\n\n  return lines.join('\\n')\n}\n\n/**\n * Generate property definition for an attribute\n */\nfunction generateAttributeProperty(\n  attribute: ProcessedAttributeMetadata,\n  options: TypeGenerationOptions\n): string[] {\n  const { includeComments = true } = options\n  const lines: string[] = []\n\n  // Add attribute comment\n  if (includeComments && attribute.displayName) {\n    let comment = `/** ${attribute.displayName}`\n    if (attribute.description && attribute.description !== attribute.displayName) {\n      comment += ` - ${attribute.description}`\n    }\n    comment += ` */`\n    lines.push(comment)\n  }\n\n  // Determine property name (ensure valid JavaScript identifier)\n  const propertyName = sanitizePropertyName(attribute.logicalName)\n  \n  // Determine if property is optional\n  const isOptional = attribute.requiredLevel !== 'SystemRequired' && !attribute.isPrimaryId\n  const optionalMarker = isOptional ? '?' : ''\n\n  // Determine TypeScript type\n  const typeString = generateAttributeType(attribute)\n\n  // Add additional type information in comment\n  let additionalInfo = ''\n  if (includeComments) {\n    const infoParts: string[] = []\n    \n    if (attribute.maxLength) {\n      infoParts.push(`Max length: ${attribute.maxLength}`)\n    }\n    \n    if (attribute.minValue !== undefined || attribute.maxValue !== undefined) {\n      const range = `Range: ${attribute.minValue ?? 'unbounded'} to ${attribute.maxValue ?? 'unbounded'}`\n      infoParts.push(range)\n    }\n    \n    if (attribute.targets && attribute.targets.length > 0) {\n      infoParts.push(`Lookup to: ${attribute.targets.join(', ')}`)\n    }\n    \n    if (attribute.optionSetName) {\n      infoParts.push(`Option set: ${attribute.optionSetName}`)\n    }\n    \n    additionalInfo = infoParts.length > 0 ? ` // ${infoParts.join(', ')}` : ''\n  }\n\n  lines.push(`${propertyName}${optionalMarker}: ${typeString};${additionalInfo}`)\n\n  // Add _value property for lookup fields when includeLookupValues is enabled\n  if (attribute.attributeType === 'Lookup' && options.includeLookupValues) {\n    const valueProperty = `_${attribute.logicalName}_value`\n    const valueComment = includeComments ? `/** ${valueProperty} - Resolved lookup GUID value */` : ''\n    if (valueComment) lines.push(valueComment)\n    lines.push(`${valueProperty}?: string; // Lookup value`)\n  }\n\n  return lines\n}\n\n/**\n * Generate TypeScript type for an attribute\n */\nfunction generateAttributeType(attribute: ProcessedAttributeMetadata): string {\n  switch (attribute.attributeType) {\n    case 'String':\n    case 'Memo':\n      return 'string'\n      \n    case 'Integer':\n    case 'BigInt':\n    case 'Decimal':\n    case 'Double':\n    case 'Money':\n      return 'number'\n      \n    case 'Boolean':\n      return 'boolean'\n      \n    case 'DateTime':\n      return 'Date | string'\n      \n    case 'Uniqueidentifier':\n      return 'string' // GUID as string\n      \n    case 'Lookup':\n    case 'Customer':\n    case 'Owner':\n      return 'string' // EntityReference ID as string\n      \n    case 'Picklist':\n    case 'State':\n    case 'Status':\n      if (attribute.optionSetName) {\n        const typeName = generateOptionSetTypeName(attribute.optionSetName)\n        return `${typeName}Value`\n      }\n      return 'number'\n      \n    case 'MultiSelectPicklist':\n      if (attribute.optionSetName) {\n        const typeName = generateOptionSetTypeName(attribute.optionSetName)\n        return `${typeName}Value[]`\n      }\n      return 'number[]'\n      \n    case 'Virtual':\n    case 'EntityName':\n      return 'string'\n      \n    default:\n      // For unknown types, default to 'any' to prevent TypeScript errors\n      return 'any'\n  }\n}\n\n/**\n * Generate option set type name from option set name\n */\nfunction generateOptionSetTypeName(optionSetName: string): string {\n  return optionSetName\n    .split('_')\n    .map(part => part.charAt(0).toUpperCase() + part.slice(1).toLowerCase())\n    .join('')\n}","import type { ProcessedOptionSet } from '../processors/index.js'\nimport type { TypeGenerationOptions } from './index.js'\nimport { sanitizeOptionName, generateOptionSetConstantName, generateOptionSetTypeName, escapeString } from './utils.js'\n\n/**\n * Generate TypeScript constants for an option set\n */\nexport function generateOptionSetConstants(\n  optionSet: ProcessedOptionSet,\n  options: TypeGenerationOptions = {}\n): string {\n  const { includeComments = true } = options\n  const lines: string[] = []\n  \n  const constantName = generateOptionSetConstantName(optionSet.name)\n  const typeName = generateOptionSetTypeName(optionSet.name)\n\n  // Option set header comment\n  if (includeComments) {\n    lines.push(`/**`)\n    lines.push(` * ${optionSet.displayName}`)\n    if (optionSet.description) {\n      lines.push(` * ${optionSet.description}`)\n    }\n    lines.push(` * LogicalName: ${optionSet.name}`)\n    lines.push(` * Global: ${optionSet.isGlobal}`)\n    lines.push(` * Custom: ${optionSet.isCustom}`)\n    lines.push(` */`)\n  }\n\n  // Generate constant object\n  lines.push(`export const ${constantName} = {`)\n\n  // Generate options\n  optionSet.options.forEach((option, index) => {\n    const isLast = index === optionSet.options.length - 1\n    const optionName = sanitizeOptionName(option.label)\n    \n    if (includeComments && option.description) {\n      lines.push(`  /** ${escapeString(option.description)} */`)\n    }\n    \n    lines.push(`  ${optionName}: { Value: ${option.value}, Label: \"${escapeString(option.label)}\" }${isLast ? '' : ','}`)\n  })\n\n  lines.push(`} as const;`)\n  lines.push('')\n\n  // Generate type definition\n  if (includeComments) {\n    lines.push(`/** ${optionSet.displayName} option values */`)\n  }\n  lines.push(`export type ${typeName}Value = (typeof ${constantName})[keyof typeof ${constantName}][\"Value\"];`)\n\n  return lines.join('\\n')\n}\n\n/**\n * Generate TypeScript file for a global option set\n */\nexport function generateGlobalOptionSetFile(\n  optionSet: ProcessedOptionSet,\n  options: TypeGenerationOptions = {}\n): string {\n  if (!optionSet.isGlobal) {\n    throw new Error(`Option set ${optionSet.name} is not global`)\n  }\n\n  const lines: string[] = []\n\n  // File header\n  lines.push(`// Generated TypeScript definitions for global option set: ${optionSet.name}`)\n  lines.push(`// Display Name: ${optionSet.displayName}`)\n  lines.push(`// Global: ${optionSet.isGlobal}`)\n  lines.push(`// Custom: ${optionSet.isCustom}`)\n  lines.push(`// Generated: ${new Date().toISOString()}`)\n  lines.push('')\n\n  // Generate the option set constants and types\n  lines.push(generateOptionSetConstants(optionSet, options))\n\n  return lines.join('\\n')\n}","import type { ProcessedEntityMetadata } from '../processors/index.js'\nimport type { TypeGenerationOptions } from './index.js'\nimport { sanitizeInterfaceName, escapeString } from './utils.js'\n\n/**\n * Generate metadata object for runtime use\n */\nexport function generateMetadataObject(\n  entityMetadata: ProcessedEntityMetadata,\n  options: TypeGenerationOptions = {}\n): string {\n  const { includeComments = true } = options\n  const lines: string[] = []\n  const schemaName = sanitizeInterfaceName(entityMetadata.schemaName)\n  const metadataName = `${schemaName}Meta`\n\n  // Metadata header comment\n  if (includeComments) {\n    lines.push(`/**`)\n    lines.push(` * Runtime metadata for ${entityMetadata.displayName}`)\n    lines.push(` * Provides entity schema information for API operations`)\n    lines.push(` */`)\n  }\n\n  lines.push(`export const ${metadataName} = {`)\n  \n  // Basic entity information\n  lines.push(`  logicalName: \"${entityMetadata.logicalName}\",`)\n  lines.push(`  schemaName: \"${entityMetadata.schemaName}\",`)\n  lines.push(`  displayName: \"${escapeString(entityMetadata.displayName)}\",`)\n  lines.push(`  entitySetName: \"${entityMetadata.entitySetName}\",`)\n  lines.push(`  isCustomEntity: ${entityMetadata.isCustomEntity},`)\n  \n  if (entityMetadata.description) {\n    lines.push(`  description: \"${escapeString(entityMetadata.description)}\",`)\n  }\n  \n  // Attribute details for runtime use\n  const primaryIdAttr = entityMetadata.attributes.find(attr => attr.isPrimaryId)\n  const primaryNameAttr = entityMetadata.attributes.find(attr => attr.logicalName === entityMetadata.primaryNameAttribute)\n  const lookupAttributes = entityMetadata.attributes.filter(attr => attr.attributeType === 'Lookup')\n  const requiredAttributes = entityMetadata.attributes.filter(attr => attr.requiredLevel === 'SystemRequired' || attr.requiredLevel === 'ApplicationRequired')\n  \n  lines.push(`  primaryKey: {`)\n  lines.push(`    logicalName: \"${entityMetadata.primaryIdAttribute}\",`)\n  lines.push(`    attributeType: \"${primaryIdAttr?.attributeType || 'Uniqueidentifier'}\",`)\n  lines.push(`    displayName: \"${escapeString(primaryIdAttr?.displayName || entityMetadata.primaryIdAttribute)}\"`)\n  lines.push(`  },`)\n  \n  if (primaryNameAttr) {\n    lines.push(`  primaryName: {`)\n    lines.push(`    logicalName: \"${entityMetadata.primaryNameAttribute}\",`)\n    lines.push(`    attributeType: \"${primaryNameAttr.attributeType}\",`)\n    lines.push(`    displayName: \"${escapeString(primaryNameAttr.displayName)}\",`)\n    if (primaryNameAttr.maxLength) {\n      lines.push(`    maxLength: ${primaryNameAttr.maxLength}`)\n    }\n    lines.push(`  },`)\n  }\n  \n  // Quick reference arrays\n  lines.push(`  lookupAttributes: [${lookupAttributes.map(attr => `\"${attr.logicalName}\"`).join(', ')}],`)\n  lines.push(`  requiredAttributes: [${requiredAttributes.filter(attr => !attr.isPrimaryId).map(attr => `\"${attr.logicalName}\"`).join(', ')}],`)\n  \n  // Option sets summary\n  if (entityMetadata.optionSets.length > 0) {\n    lines.push(`  optionSets: [${entityMetadata.optionSets.map(os => `\"${os.name}\"`).join(', ')}],`)\n  }\n  \n  // Expandable properties for $expand operations\n  if (entityMetadata.expandableProperties.length > 0) {\n    lines.push(`  expandableProperties: [`)\n    entityMetadata.expandableProperties.forEach(prop => {\n      const comment = lookupAttributes.some(attr => attr.logicalName === prop) \n        ? ' // Lookup field' \n        : ' // Relationship'\n      lines.push(`    \"${prop}\",${comment}`)\n    })\n    lines.push(`  ],`)\n  }\n  \n  // Related entities for type-safe nested expands\n  if (Object.keys(entityMetadata.relatedEntities).length > 0) {\n    lines.push(`  relatedEntities: {`)\n    Object.entries(entityMetadata.relatedEntities).forEach(([relationshipName, info]) => {\n      lines.push(`    \"${relationshipName}\": {`)\n      lines.push(`      relationshipName: \"${info.relationshipName}\",`)\n      lines.push(`      targetEntityLogicalName: \"${info.targetEntityLogicalName}\",`)\n      lines.push(`      targetEntitySetName: \"${info.targetEntitySetName}\",`)\n      lines.push(`      relationshipType: \"${info.relationshipType}\"`)\n      lines.push(`    },`)\n    })\n    lines.push(`  },`)\n  }\n  \n  // Generation info\n  lines.push(`  generated: \"${new Date().toISOString()}\"`)\n  \n  lines.push(`} as const;`)\n\n  return lines.join('\\n')\n}","import type { ProcessedEntityMetadata } from '../processors/index.js'\nimport type { TypeGenerationOptions } from './index.js'\nimport { sanitizeInterfaceName } from './utils.js'\n\n/**\n * Generate binding types for @odata.bind operations\n */\nexport function generateBindingTypes(\n  entityMetadata: ProcessedEntityMetadata,\n  options: TypeGenerationOptions,\n  allEntities: ProcessedEntityMetadata[] = []\n): string {\n  const { includeComments = true } = options\n  \n  // Create lookup dictionary from actual metadata\n  const entityLookup = new Map<string, ProcessedEntityMetadata>()\n  allEntities.forEach(entity => {\n    entityLookup.set(entity.logicalName, entity)\n  })\n  \n  // Filter out read-only system fields that cannot be set via @odata.bind\n  const readOnlySystemFields = new Set([\n    'createdby',\n    'modifiedby', \n    'createdonbehalfby',\n    'modifiedonbehalfby',\n    'owninguser',\n    'owningteam',\n    'owningbusinessunit'\n  ])\n  \n  const lookupAttributes = entityMetadata.attributes.filter(attr => \n    attr.attributeType === 'Lookup' && !readOnlySystemFields.has(attr.logicalName)\n  )\n  \n  if (lookupAttributes.length === 0) {\n    return ''\n  }\n\n  const lines: string[] = []\n  const schemaTypeName = sanitizeInterfaceName(entityMetadata.schemaName)\n  \n  if (includeComments) {\n    lines.push(`/**`)\n    lines.push(` * Binding types for ${entityMetadata.schemaName} @odata.bind operations`)\n    lines.push(` */`)\n  }\n  \n  lines.push(`export type ${schemaTypeName}Bindings = {`)\n  \n  for (const attr of lookupAttributes) {\n    const bindingProperty = `${attr.schemaName}@odata.bind`\n    const targets = attr.targets && attr.targets.length > 0 ? ` // Bind to: ${attr.targets.join(', ')}` : ''\n    lines.push(`  '${bindingProperty}'?: string;${targets}`)\n  }\n  \n  lines.push(`};`)\n  \n  // Generate type-safe binding helper functions\n  lines.push('')\n  lines.push(`/**`)\n  lines.push(` * Type-safe helper functions for creating ${entityMetadata.schemaName} @odata.bind relationships`)\n  lines.push(` * Each function returns the correct entity set path for the target entity`)\n  lines.push(` */`)\n  lines.push(`export const ${schemaTypeName}Bindings = {`)\n  \n  for (const attr of lookupAttributes) {\n    const functionName = attr.logicalName\n    const targets = attr.targets || []\n    \n    if (targets.length === 1) {\n      // Single target - type-safe function\n      const target = targets[0]\n      const targetEntity = entityLookup.get(target)\n      if (!targetEntity) {\n        // Skip this lookup if target entity metadata is not available\n        // This allows single-entity generation to work without all related entities\n        continue\n      }\n      const entitySet = targetEntity.entitySetName\n      lines.push(`  /** Create @odata.bind for ${attr.logicalName} -> ${target} */`)\n      lines.push(`  ${functionName}: (id: string): { '${attr.schemaName}@odata.bind': string } => ({`)\n      lines.push(`    '${attr.schemaName}@odata.bind': \\`/${entitySet}(\\${id})\\``)\n      lines.push(`  }),`)\n    } else if (targets.length > 1) {\n      // Multiple targets - require entity type parameter\n      // Filter out targets that don't have metadata available\n      const availableTargets = targets.filter(target => entityLookup.has(target))\n      \n      if (availableTargets.length === 0) {\n        // Skip this lookup if no target entities are available\n        continue\n      }\n      \n      lines.push(`  /** Create @odata.bind for ${attr.logicalName} -> ${availableTargets.join(' | ')} */`)\n      lines.push(`  ${functionName}: (id: string, entityType: '${availableTargets.join(\"' | '\")}') => {`)\n      lines.push(`    const entitySets = {`)\n      availableTargets.forEach(target => {\n        const targetEntity = entityLookup.get(target)!\n        const entitySet = targetEntity.entitySetName\n        lines.push(`      '${target}': '${entitySet}',`)\n      })\n      lines.push(`    } as const;`)\n      lines.push(`    return { '${attr.schemaName}@odata.bind': \\`/\\${entitySets[entityType]}(\\${id})\\` };`)\n      lines.push(`  },`)\n    } else {\n      // No targets specified - generic function\n      lines.push(`  /** Create @odata.bind for ${attr.logicalName} (generic) */`)\n      lines.push(`  ${functionName}: (id: string, entitySet: string): { '${attr.schemaName}@odata.bind': string } => ({`)\n      lines.push(`    '${attr.schemaName}@odata.bind': \\`/\\${entitySet}(\\${id})\\``)\n      lines.push(`  }),`)\n    }\n  }\n  \n  lines.push(`} as const;`)\n  \n  // Add Create and Update utility types with bindings\n  lines.push('')\n  lines.push(`export type ${schemaTypeName}Create = Partial<${entityMetadata.schemaName}> & Partial<${schemaTypeName}Bindings> & {`)\n  \n  // Only add primary name attribute if it exists and is not empty\n  const primaryNameAttr = entityMetadata.primaryNameAttribute?.trim()\n  if (primaryNameAttr) {\n    lines.push(`  ${primaryNameAttr}: string; // Required for create`)\n  }\n  \n  lines.push(`};`)\n  \n  lines.push('')\n  lines.push(`export type ${schemaTypeName}Update = Partial<Omit<${entityMetadata.schemaName}, '${entityMetadata.primaryIdAttribute}'>> & Partial<${schemaTypeName}Bindings> & {`)\n  \n  // Primary ID attribute should always exist, but add safety check\n  const primaryIdAttr = entityMetadata.primaryIdAttribute?.trim()\n  if (primaryIdAttr) {\n    lines.push(`  ${primaryIdAttr}: string; // Required for update`)\n  }\n  \n  lines.push(`};`)\n  \n  return lines.join('\\n')\n}","import type { ProcessedEntityMetadata } from '../processors/index.js'\nimport type { TypeGenerationOptions } from './index.js'\nimport { sanitizeInterfaceName } from './utils.js'\nimport { getEntityImportPath, getSharedImportPath, shouldOrganizeDirectories } from './import-utils.js'\n\n/**\n * Generate type-safe expand types for $expand operations\n */\nexport function generateExpandTypes(\n  entityMetadata: ProcessedEntityMetadata,\n  options: TypeGenerationOptions = {},\n  allEntities: ProcessedEntityMetadata[] = [],\n  maxDepth: number = 3,\n  currentDepth: number = 0\n): { expandTypes: string, relatedEntityImports: string[] } {\n  const { includeComments = true, fullMetadata = false, primaryEntities = [], relatedEntitiesDir = 'related' } = options\n  const organizingDirectories = shouldOrganizeDirectories(relatedEntitiesDir, fullMetadata, primaryEntities)\n  const lines: string[] = []\n  const schemaName = sanitizeInterfaceName(entityMetadata.schemaName)\n  const relatedEntityImports: string[] = []\n  \n  // Depth limiting prevents infinite recursion\n  \n  // Create lookup dictionary from actual metadata instead of hardcoded mapping\n  const entityLookup = new Map<string, ProcessedEntityMetadata>()\n  allEntities.forEach(entity => {\n    entityLookup.set(entity.logicalName, entity)\n  })\n  \n  if (includeComments) {\n    lines.push(`/**`)\n    lines.push(` * Type-safe expand properties for ${entityMetadata.displayName}`)\n    lines.push(` * Enables IntelliSense for $expand relationship names`)\n    lines.push(` */`)\n  }\n  \n  // Generate union type for expandable properties\n  const expandablePropsTypeName = `${schemaName}ExpandableProperties`\n  if (entityMetadata.expandableProperties.length > 0) {\n    lines.push(`export type ${expandablePropsTypeName} =`)\n    entityMetadata.expandableProperties.forEach((prop, index) => {\n      const isFirst = index === 0\n      const prefix = isFirst ? '  ' : '  | '\n      lines.push(`${prefix}\"${prop}\"`)\n    })\n  } else {\n    lines.push(`export type ${expandablePropsTypeName} = never`)\n  }\n  \n  lines.push('')\n  \n  if (includeComments) {\n    lines.push(`/**`)\n    lines.push(` * Type-safe expand options for ${entityMetadata.displayName}`)\n    lines.push(` * Supports both array format and object format with nested options`)\n    lines.push(` */`)\n  }\n  \n  // Generate expand type with both array and object support\n  const expandTypeName = `${schemaName}Expand`\n  \n  if (fullMetadata) {\n    // Advanced mode: Full type-safe expand support with all related entity imports\n    lines.push(`export type ${expandTypeName} =`)\n    lines.push(`  | ${expandablePropsTypeName}[]`) // Array format\n    lines.push(`  | ${schemaName}TypeSafeExpand`) // Type-safe object format\n\n    lines.push('')\n    \n    if (includeComments) {\n      lines.push(`/**`)\n      lines.push(` * Type-safe expand with target entity field awareness`)\n      lines.push(` * $select shows actual field names from target entities`)\n      lines.push(` */`)\n    }\n    \n    // Generate type-safe expand type that maps relationships to target entity types\n    lines.push(`export type ${schemaName}TypeSafeExpand = {`)\n    \n    // Generate type mappings for each relationship\n    if (Object.keys(entityMetadata.relatedEntities).length > 0) {\n      // Add imports for query types (only add once)\n      if (!relatedEntityImports.some(imp => imp.includes('ODataFilter'))) {\n        const queryTypesPath = organizingDirectories \n          ? getSharedImportPath(entityMetadata.logicalName, 'query-types.js', primaryEntities)\n          : './query-types.js'\n        relatedEntityImports.push(`import type { ODataFilter, ODataOrderBy } from '${queryTypesPath}'`)\n      }\n      \n      Object.entries(entityMetadata.relatedEntities).forEach(([relationshipName, info]) => {\n        // Look up the actual schema name from the processed entities using our metadata lookup\n        const relatedEntity = entityLookup.get(info.targetEntityLogicalName)\n        if (!relatedEntity) {\n          // Skip this relationship if target entity metadata is not available\n          // This allows single-entity generation to work without all related entities\n          return\n        }\n        const targetSchemaName = sanitizeInterfaceName(relatedEntity.schemaName)\n        \n        // Add import for the target entity type (skip self-references)\n        if (info.targetEntityLogicalName !== entityMetadata.logicalName) {\n          // Calculate correct import path based on directory organization\n          const entityImportPath = organizingDirectories \n            ? getEntityImportPath(entityMetadata.logicalName, info.targetEntityLogicalName, primaryEntities, relatedEntitiesDir)\n            : `./${relatedEntity.schemaName.toLowerCase()}.js`\n          relatedEntityImports.push(`import type { ${targetSchemaName} } from '${entityImportPath}'`)\n        }\n        \n        lines.push(`  \"${relationshipName}\"?: {`)\n        lines.push(`    $select?: (keyof ${targetSchemaName})[]`)\n        lines.push(`    $filter?: ODataFilter<${targetSchemaName}>`)\n        lines.push(`    $orderby?: ODataOrderBy<${targetSchemaName}>`)\n        lines.push(`    $top?: number`)\n        \n        // Add recursive expand support if we haven't reached max depth\n        if (currentDepth < maxDepth) {\n          const expandTypeName = `${targetSchemaName}Expand`\n          lines.push(`    $expand?: ${expandTypeName}`)\n          \n          // Add import for the target entity's expand type (skip self-references to avoid circular imports)\n          if (info.targetEntityLogicalName !== entityMetadata.logicalName) {\n            const entityImportPath = organizingDirectories \n              ? getEntityImportPath(entityMetadata.logicalName, info.targetEntityLogicalName, primaryEntities, relatedEntitiesDir)\n              : `./${relatedEntity.schemaName.toLowerCase()}.js`\n            relatedEntityImports.push(`import type { ${expandTypeName} } from '${entityImportPath}'`)\n          }\n        }\n        \n        lines.push(`  }`)\n      })\n    }\n    \n    lines.push(`}`)\n  } else {\n    // Simple mode: Type-safe expand support with related entity imports when available\n    lines.push(`export type ${expandTypeName} = `)\n    lines.push(`  | ${expandablePropsTypeName}[]`)\n    \n    // Check if we have related entities available for type-safe $select\n    if (Object.keys(entityMetadata.relatedEntities).length > 0) {\n      // Add imports for query types  \n      const queryTypesPath = organizingDirectories \n        ? getSharedImportPath(entityMetadata.logicalName, 'query-types.js', primaryEntities)\n        : './query-types.js'\n      relatedEntityImports.push(`import type { ODataFilter, ODataOrderBy } from '${queryTypesPath}'`)\n      \n      // Generate type mappings for each relationship with proper $select typing\n      lines.push(`  | {`)\n      Object.entries(entityMetadata.relatedEntities).forEach(([relationshipName, info]) => {\n        // Look up the actual schema name from the processed entities\n        const relatedEntity = entityLookup.get(info.targetEntityLogicalName)\n        if (!relatedEntity) {\n          // Skip this relationship if target entity metadata is not available\n          return\n        }\n        const targetSchemaName = sanitizeInterfaceName(relatedEntity.schemaName)\n        \n        // Add import for the target entity type (skip self-references)\n        if (info.targetEntityLogicalName !== entityMetadata.logicalName) {\n          const entityImportPath = organizingDirectories \n            ? getEntityImportPath(entityMetadata.logicalName, info.targetEntityLogicalName, primaryEntities, relatedEntitiesDir)\n            : `./related/${relatedEntity.schemaName.toLowerCase()}.js`\n          relatedEntityImports.push(`import type { ${targetSchemaName} } from '${entityImportPath}'`)\n        }\n        \n        lines.push(`      \"${relationshipName}\"?: {`)\n        lines.push(`        $select?: (keyof ${targetSchemaName})[]`)\n        lines.push(`        $filter?: ODataFilter<${targetSchemaName}>`)\n        lines.push(`        $orderby?: ODataOrderBy<${targetSchemaName}>`)\n        lines.push(`        $top?: number`)\n        lines.push(`        $skip?: number`)\n        \n        // Add recursive expand support in simple mode too\n        if (currentDepth < maxDepth) {\n          const expandTypeName = `${targetSchemaName}Expand`\n          lines.push(`        $expand?: ${expandTypeName}`)\n          \n          // Add import for the target entity's expand type (skip self-references to avoid circular imports)\n          if (info.targetEntityLogicalName !== entityMetadata.logicalName) {\n            const entityImportPath = organizingDirectories \n              ? getEntityImportPath(entityMetadata.logicalName, info.targetEntityLogicalName, primaryEntities, relatedEntitiesDir)\n              : `./related/${relatedEntity.schemaName.toLowerCase()}.js`\n            relatedEntityImports.push(`import type { ${expandTypeName} } from '${entityImportPath}'`)\n          }\n        }\n        \n        lines.push(`      }`)\n      })\n      lines.push(`    }`)\n    } else {\n      // Fallback to generic string[] if no related entities\n      lines.push(`  | Partial<Record<${expandablePropsTypeName}, {`)\n      lines.push(`      $select?: string[]`)\n      lines.push(`      $filter?: any`)\n      lines.push(`      $orderby?: any`)\n      lines.push(`      $top?: number`)\n      lines.push(`      $skip?: number`)\n      lines.push(`    }>>`)\n    }\n    \n    if (includeComments) {\n      lines.push('')\n      lines.push(`/**`)\n      lines.push(` * Type-safe expand options for ${entityMetadata.displayName}`)\n      lines.push(` * Use string array format: [\"relationship1\", \"relationship2\"]`)\n      lines.push(` * Or object format with type safety: { \"relationship\": { $select: [...] } }`)\n      lines.push(` */`)\n    }\n  }\n  \n  return {\n    expandTypes: lines.join('\\n'),\n    relatedEntityImports\n  }\n}","/**\n * Generate imports for the generated code\n */\nexport function generateImports(requiredImports: string[]): string {\n  if (requiredImports.length === 0) return ''\n  \n  const lines: string[] = []\n  lines.push(`// Required imports`)\n  \n  for (const importStatement of requiredImports) {\n    lines.push(importStatement)\n  }\n  \n  lines.push('')\n  \n  return lines.join('\\n')\n}","import type { \n  ProcessedEntityMetadata\n} from '../processors/index.js'\nimport { getSharedImportPath, shouldOrganizeDirectories } from './import-utils.js'\n\n// Import from modular files\nimport { generateEntityInterface } from './entity-interface.js'\nimport { generateOptionSetConstants } from './optionset-generation.js'\nimport { generateMetadataObject } from './metadata-generation.js'\nimport { generateBindingTypes } from './binding-types.js'\nimport { generateExpandTypes } from './expand-types.js'\nimport { generateOptionSetConstantName, generateOptionSetTypeName } from './utils.js'\n\n/**\n * TypeScript generation options\n */\nexport interface TypeGenerationOptions {\n  entityPrefix?: string\n  includeComments?: boolean\n  includeValidation?: boolean\n  includeMetadata?: boolean\n  useExactTypes?: boolean\n  includeLookupValues?: boolean\n  includeBindingTypes?: boolean\n  excludeAuxiliaryAttributes?: boolean\n  fullMetadata?: boolean\n  excludeSystemAuditRelationships?: boolean\n  // Directory structure options\n  primaryEntities?: string[]\n  relatedEntitiesDir?: string\n}\n\n/**\n * Generated TypeScript code result\n */\nexport interface GeneratedCode {\n  interfaces: string\n  constants: string\n  types: string\n  metadata?: string\n  validation?: string\n  imports: string[]\n}\n\n// Re-export all the functions from the modules\nexport { generateEntityInterface } from './entity-interface.js'\nexport { generateOptionSetConstants, generateGlobalOptionSetFile } from './optionset-generation.js'\nexport { generateMetadataObject } from './metadata-generation.js'\nexport { generateImports } from './import-generation.js'\n\n/**\n * Check if a global option set constant is actually used in the entity\n * (beyond just the type usage in interface properties)\n */\nfunction checkIfConstantIsUsed(): boolean {\n  // In the current implementation, we only use the types in interfaces\n  // We don't use the constants themselves in the generated code\n  // This might change if we add validation functions or default values later\n  \n  // For now, we only need the type imports, not the constants\n  return false\n}\n\n/**\n * Generate complete TypeScript file for an entity\n */\nexport function generateEntityFile(\n  entityMetadata: ProcessedEntityMetadata,\n  options: TypeGenerationOptions = {},\n  allEntities: ProcessedEntityMetadata[] = []\n): GeneratedCode {\n  const lines: string[] = []\n  const imports: Set<string> = new Set()\n\n  // Directory organization configuration\n  const { primaryEntities = [], relatedEntitiesDir = 'related', fullMetadata = false } = options\n  const organizingDirectories = shouldOrganizeDirectories(relatedEntitiesDir, fullMetadata, primaryEntities)\n\n  // File header\n  lines.push(`// Generated TypeScript definitions for ${entityMetadata.schemaName}`)\n  lines.push(`// Entity: ${entityMetadata.displayName}`)\n  lines.push(`// Total Attributes: ${entityMetadata.attributes.length}`)\n  lines.push(`// Generated: ${new Date().toISOString()}`)\n  lines.push('')\n\n  // Separate global and local option sets\n  const localOptionSets = entityMetadata.optionSets.filter(os => !os.isGlobal)\n  const globalOptionSets = entityMetadata.optionSets.filter(os => os.isGlobal)\n\n  // Add imports for global option sets - only import what's needed\n  for (const globalOptionSet of globalOptionSets) {\n    const constantName = generateOptionSetConstantName(globalOptionSet.name)\n    const typeName = generateOptionSetTypeName(globalOptionSet.name)\n    \n    // Check if we actually use the constant (not just the type) in the entity\n    const usesConstant = checkIfConstantIsUsed()\n    \n    // Calculate correct import path for global choices\n    const globalChoicePath = organizingDirectories \n      ? getSharedImportPath(entityMetadata.logicalName, `global-choices/${globalOptionSet.name}.js`, primaryEntities)\n      : `./global-choices/${globalOptionSet.name}.js`\n    \n    if (usesConstant) {\n      imports.add(`import { ${constantName}, type ${typeName}Value } from '${globalChoicePath}'`)\n    } else {\n      // Only import the type if constant is not used\n      imports.add(`import type { ${typeName}Value } from '${globalChoicePath}'`)\n    }\n  }\n\n  // Generate option set constants only for local option sets\n  const constants: string[] = []\n  for (const optionSet of localOptionSets) {\n    constants.push(generateOptionSetConstants(optionSet, options))\n    constants.push('')\n  }\n\n  // Generate main entity interface\n  const interfaces = generateEntityInterface(entityMetadata, options)\n\n  // Generate binding types if enabled\n  const bindingTypes = options.includeBindingTypes \n    ? generateBindingTypes(entityMetadata, options, allEntities)\n    : undefined\n\n  // Generate expand types for type-safe $expand operations\n  const expandResult = generateExpandTypes(entityMetadata, options, allEntities, 3, 0)\n  const expandTypes = expandResult.expandTypes\n  \n  // Add related entity imports to the imports set\n  expandResult.relatedEntityImports.forEach(imp => imports.add(imp))\n\n  // Generate metadata object\n  const metadata = options.includeMetadata \n    ? generateMetadataObject(entityMetadata, options)\n    : undefined\n\n  // Combine all type definitions\n  const allTypes = [\n    interfaces,\n    expandTypes,\n    bindingTypes,\n    metadata\n  ].filter(Boolean).join('\\n\\n')\n\n  return {\n    interfaces: allTypes,\n    constants: constants.join('\\n'),\n    types: '', // No utility types are generated anymore\n    metadata: undefined, // Already included in interfaces\n    imports: Array.from(imports)\n  }\n}","/**\n * Individual entity hooks generation\n * Contains logic for generating single entity React Query hooks\n */\n\nimport type { ProcessedEntityMetadata } from '../../processors/index.js'\n\n/**\n * Generate entity-specific examples for documentation\n */\nexport function generateEntitySpecificExamples(entityMetadata: ProcessedEntityMetadata): {\n  primaryName: string\n  secondaryField: string\n} {\n  const primaryName = entityMetadata.primaryNameAttribute || 'name'\n  const secondaryField = entityMetadata.attributes.find(a => a.logicalName !== primaryName)?.logicalName || 'createdon'\n  \n  return { primaryName, secondaryField }\n}\n\n/**\n * Generate hook for fetching a single entity\n */\nexport function generateSingleEntityHook(\n  lines: string[],\n  interfaceName: string,\n  schemaTypeName: string,\n  primaryKey: string,\n  entityMetadata: ProcessedEntityMetadata,\n  includeComments: boolean\n): void {\n  if (includeComments) {\n    const examples = generateEntitySpecificExamples(entityMetadata)\n    \n    lines.push(`/**`)\n    lines.push(` * Fetch a single ${entityMetadata.displayName} by ID`)\n    lines.push(` * `)\n    lines.push(` * @param id - The ${primaryKey} of the entity`)\n    lines.push(` * @param options - Query options with type-safe field selection`)\n    lines.push(` * @param options.$select - Select specific fields (provides IntelliSense)`)\n    lines.push(` * @param options.$expand - Expand related entities`)\n    lines.push(` * `)\n    lines.push(` * @example`)\n    lines.push(` * // Basic usage`)\n    lines.push(` * const { data, isLoading, error } = use${schemaTypeName}(entityId)`)\n    lines.push(` * `)\n    lines.push(` * @example`)\n    lines.push(` * // With field selection and error handling`)\n    lines.push(` * const { data: ${entityMetadata.logicalName.toLowerCase()}, isLoading } = use${schemaTypeName}(`)\n    lines.push(` *   '<entity-id>',`)\n    lines.push(` *   { `)\n    lines.push(` *     $select: ['${examples.primaryName}', '${examples.secondaryField}'],`)\n    lines.push(` *     enabled: !!entityId // Only run when ID exists`)\n    lines.push(` *   }`)\n    lines.push(` * )`)\n    lines.push(` */`)\n  }\n  \n  lines.push(`export function use${schemaTypeName}(`)\n  lines.push(`    id: string | undefined,`)\n  lines.push(`    options: ${interfaceName}Options & Omit<UseQueryOptions<${interfaceName}>, 'queryKey' | 'queryFn'> = {}`)\n  lines.push(`): UseQueryResult<${interfaceName}> {`)\n  lines.push(`  const { $select, $expand, ...queryOptions } = options`)\n  lines.push(`  `)\n  lines.push(`  return useQuery({`)\n  lines.push(`    queryKey: ${schemaTypeName}QueryKeys.detail(id || ''),`)\n  lines.push(`    queryFn: async (): Promise<${interfaceName}> => {`)\n  lines.push(`      if (!id) throw new Error('ID is required')`)\n  lines.push(`      `)\n  lines.push(`      const url = ${interfaceName}Queries.buildEntityUrl(id, { $select, $expand })`)\n  lines.push(`      const response = await fetch(url)`)\n  lines.push(`      `)\n  lines.push(`      if (!response.ok) {`)\n  lines.push(`        throw new Error(\\`Failed to fetch ${entityMetadata.displayName}: \\${response.statusText}\\`)`)\n  lines.push(`      }`)\n  lines.push(`      `)\n  lines.push(`      return response.json()`)\n  lines.push(`    },`)\n  lines.push(`    enabled: !!id,`)\n  lines.push(`    ...queryOptions`)\n  lines.push(`  })`)\n  lines.push(`}`)\n}\n\n/**\n * Generate option set constant name from option set name\n */\nexport function generateOptionSetConstantName(optionSetName: string): string {\n  return optionSetName\n    .split('_')\n    .map(part => part.charAt(0).toUpperCase() + part.slice(1).toLowerCase())\n    .join('')\n}\n\n","/**\n * List and count hooks generation\n * Contains logic for generating entity list and count React Query hooks\n */\n\nimport type { ProcessedEntityMetadata } from '../../processors/index.js'\nimport { generateOptionSetConstantName } from './entity-hooks.js'\n\n/**\n * Generate hook for fetching a list of entities\n */\nexport function generateEntityListHook(\n  lines: string[],\n  interfaceName: string,\n  schemaTypeName: string,\n  entityMetadata: ProcessedEntityMetadata,\n  includeComments: boolean\n): void {\n  if (includeComments) {\n    const stateAttribute = entityMetadata.attributes.find(attr => attr.logicalName === 'statecode')\n    const stateExample = stateAttribute?.optionSetName \n      ? `${generateOptionSetConstantName(stateAttribute.optionSetName)}.Active.Value`\n      : '0'\n    \n    lines.push(`/**`)\n    lines.push(` * Fetch a list of ${entityMetadata.displayName} entities with filtering and pagination`)\n    lines.push(` * `)\n    lines.push(` * @param options - Query options with type-safe filters and field selection`)\n    lines.push(` * @param options.$filter - Filter entities using type-safe field names and operators`)\n    lines.push(` * @param options.$select - Select specific fields (provides IntelliSense)`)\n    lines.push(` * @param options.$orderby - Sort by fields with 'asc' or 'desc' direction`)\n    lines.push(` * @param options.$top - Limit number of results`)\n    lines.push(` * @param options.$skip - Skip results for pagination`)\n    lines.push(` * `)\n    lines.push(` * @example`)\n    lines.push(` * // Basic list`)\n    lines.push(` * const { data } = use${schemaTypeName}List()`)\n    lines.push(` * `)\n    lines.push(` * @example`)\n    lines.push(` * // Advanced filtering with type safety`)\n    lines.push(` * const { data: ${entityMetadata.logicalName.toLowerCase()}s } = use${schemaTypeName}List({`)\n    lines.push(` *   $filter: { `)\n    lines.push(` *     statecode: ${stateExample},`)\n    lines.push(` *     ${entityMetadata.primaryNameAttribute}: { $contains: 'important' },`)\n    lines.push(` *     $and: [`)\n    lines.push(` *       { createdon: { $gte: new Date() } }`)\n    lines.push(` *     ]`)\n    lines.push(` *   },`)\n    lines.push(` *   $select: ['${entityMetadata.primaryNameAttribute}', '${entityMetadata.attributes.find(a => a.logicalName !== entityMetadata.primaryNameAttribute)?.logicalName || 'createdon'}'],`)\n    lines.push(` *   $orderby: { ${entityMetadata.primaryNameAttribute}: 'asc' },`)\n    lines.push(` *   $top: 10`)\n    lines.push(` * })`)\n    lines.push(` */`)\n  }\n  \n  lines.push(`export function use${schemaTypeName}List(`)\n  lines.push(`    options: ${interfaceName}ListOptions & Omit<UseQueryOptions<ODataResponse<${interfaceName}>>, 'queryKey' | 'queryFn'> = {}`)\n  lines.push(`): UseQueryResult<ODataResponse<${interfaceName}>> {`)\n  lines.push(`  const { $filter, $select, $expand, $orderby, $top, $skip, ...queryOptions } = options`)\n  lines.push(`  `)\n  lines.push(`  return useQuery({`)\n  lines.push(`    queryKey: ${schemaTypeName}QueryKeys.list({ $filter, $select, $expand, $orderby, $top, $skip }),`)\n  lines.push(`    queryFn: async (): Promise<ODataResponse<${interfaceName}>> => {`)\n  lines.push(`      const url = ${interfaceName}Queries.buildListUrl({ $filter, $select, $expand, $orderby, $top, $skip })`)\n  lines.push(`      const response = await fetch(url)`)\n  lines.push(`      `)\n  lines.push(`      if (!response.ok) {`)\n  lines.push(`        throw new Error(\\`Failed to fetch ${entityMetadata.displayName} list: \\${response.statusText}\\`)`)\n  lines.push(`      }`)\n  lines.push(`      `)\n  lines.push(`      return response.json()`)\n  lines.push(`    },`)\n  lines.push(`    ...queryOptions`)\n  lines.push(`  })`)\n  lines.push(`}`)\n}\n\n/**\n * Generate hook for counting entities\n */\nexport function generateEntityCountHook(\n  lines: string[],\n  interfaceName: string,\n  schemaTypeName: string,\n  entityMetadata: ProcessedEntityMetadata,\n  includeComments: boolean\n): void {\n  if (includeComments) {\n    lines.push(`/**`)\n    lines.push(` * Hook for counting ${entityMetadata.displayName} entities`)\n    lines.push(` * `)\n    lines.push(` * @param options - Filter options to count specific entities`)\n    lines.push(` * `)\n    lines.push(` * @example`)\n    lines.push(` * const { data: count } = use${schemaTypeName}Count({`)\n    lines.push(` *   $filter: { statecode: 0 }`)\n    lines.push(` * })`)\n    lines.push(` */`)\n  }\n  \n  lines.push(`export function use${schemaTypeName}Count(`)\n  lines.push(`    options: Pick<${interfaceName}ListOptions, '$filter'> & Omit<UseQueryOptions<number>, 'queryKey' | 'queryFn'> = {}`)\n  lines.push(`): UseQueryResult<number> {`)\n  lines.push(`  const { $filter, ...queryOptions } = options`)\n  lines.push(`  `)\n  lines.push(`  return useQuery({`)\n  lines.push(`    queryKey: ${schemaTypeName}QueryKeys.count({ $filter }),`)\n  lines.push(`    queryFn: async (): Promise<number> => {`)\n  lines.push(`      const url = ${interfaceName}Queries.buildCountUrl({ $filter })`)\n  lines.push(`      const response = await fetch(url)`)\n  lines.push(`      `)\n  lines.push(`      if (!response.ok) {`)\n  lines.push(`        throw new Error(\\`Failed to count ${entityMetadata.displayName}: \\${response.statusText}\\`)`)\n  lines.push(`      }`)\n  lines.push(`      `)\n  lines.push(`      const count = await response.text()`)\n  lines.push(`      return parseInt(count, 10)`)\n  lines.push(`    },`)\n  lines.push(`    ...queryOptions`)\n  lines.push(`  })`)\n  lines.push(`}`)\n}","/**\n * Query builders generation\n * Contains logic for generating entity-specific query builders and helper functions\n */\n\nimport type { ProcessedEntityMetadata } from '../../processors/index.js'\nimport type { TypeGenerationOptions } from '../index.js'\n\n/**\n * Generate query builder utilities for an entity\n */\nexport function generateEntityQueryBuilders(\n  entityMetadata: ProcessedEntityMetadata,\n  options: TypeGenerationOptions = {}\n): string {\n  const { includeComments = true } = options\n  const lines: string[] = []\n  const interfaceName = entityMetadata.schemaName\n  const schemaTypeName = entityMetadata.schemaName\n  const entitySetName = entityMetadata.entitySetName\n  \n  // File header\n  if (includeComments) {\n    lines.push(`/**`)\n    lines.push(` * Query Builders for ${entityMetadata.displayName}`)\n    lines.push(` * `)\n    lines.push(` * Auto-generated type-safe query builders for Dataverse entity: ${entityMetadata.logicalName}`)\n    lines.push(` * Provides transparent, modifiable query construction functions`)\n    lines.push(` * `)\n    lines.push(` * @generated ${new Date().toISOString()}`)\n    lines.push(` * @entity ${entityMetadata.displayName} (${entityMetadata.schemaName})`)\n    lines.push(` * @entitySet ${entityMetadata.entitySetName}`)\n    lines.push(` */`)\n  }\n  lines.push('')\n  \n  \n  // Correct path for queries directory structure\n  // Primary entities: queries/entity.queries.ts → ../entity.js\n  // Related entities: queries/related/entity.queries.ts → ../../related/entity.js\n  const isPrimary = (options.primaryEntities || []).includes(entityMetadata.logicalName)\n  const entityImportPath = isPrimary \n    ? `../${entityMetadata.logicalName}.js`\n    : `../../related/${entityMetadata.logicalName}.js`\n    \n  lines.push(`import { ${interfaceName}Meta } from '${entityImportPath}'`)\n  lines.push(`import type { ${interfaceName}, ${interfaceName}Expand } from '${entityImportPath}'`)\n  lines.push(`import type {`)\n  lines.push(`    ODataFilter,`)\n  lines.push(`    ODataSelect,`)\n  lines.push(`    ODataOrderBy`)\n  lines.push(`} from '../query-types.js'`)\n  lines.push('')\n  lines.push(`// Type-safe options for ${interfaceName} operations`)\n  lines.push(`type ${interfaceName}ListOptions = {`)\n  lines.push(`    $select?: ODataSelect<${interfaceName}>`)\n  lines.push(`    $expand?: ${interfaceName}Expand`)\n  lines.push(`    $filter?: ODataFilter<${interfaceName}>`)\n  lines.push(`    $orderby?: ODataOrderBy<${interfaceName}>`)\n  lines.push(`    $top?: number`)\n  lines.push(`    $skip?: number`)\n  lines.push(`    $count?: boolean`)\n  lines.push(`    $search?: string`)\n  lines.push(`}`)\n  lines.push('')\n  lines.push(`type ${interfaceName}Options = {`)\n  lines.push(`    $select?: ODataSelect<${interfaceName}>`)\n  lines.push(`    $expand?: ${interfaceName}Expand`)\n  lines.push(`}`)\n  lines.push('')\n  \n  // Generate helper functions\n  generateQueryHelperFunctions(lines, interfaceName)\n  \n  // Generate the main query builder object\n  if (includeComments) {\n    lines.push(`/**`)\n    lines.push(` * Query builders for ${entityMetadata.displayName}`)\n    lines.push(` * `)\n    lines.push(` * These functions provide transparent query building that you can modify.`)\n    lines.push(` * All functions are pure and return URL strings that you can inspect and customize.`)\n    lines.push(` */`)\n  }\n  lines.push(`export const ${schemaTypeName}Queries = {`)\n  lines.push(`  /**`)\n  lines.push(`   * Build URL for fetching a single ${entityMetadata.displayName} by ID`)\n  lines.push(`   */`)\n  lines.push(`  buildEntityUrl: (id: string, options: ${interfaceName}Options = {}): string => {`)\n  lines.push(`    return buildODataUrl('${entitySetName}', options, id)`)\n  lines.push(`  },`)\n  lines.push(``)\n  lines.push(`  /**`)\n  lines.push(`   * Build URL for fetching a list of ${entityMetadata.displayName} entities`)\n  lines.push(`   */`)\n  lines.push(`  buildListUrl: (options: ${interfaceName}ListOptions = {}): string => {`)\n  lines.push(`    return buildODataUrl('${entitySetName}', options)`)\n  lines.push(`  },`)\n  lines.push(``)\n  lines.push(`  /**`)\n  lines.push(`   * Build URL for counting ${entityMetadata.displayName} entities`)\n  lines.push(`   */`)\n  lines.push(`  buildCountUrl: (options: Pick<${interfaceName}ListOptions, '$filter'> = {}): string => {`)\n  lines.push(`    const baseUrl = buildODataUrl('${entitySetName}', options)`)\n  lines.push(`    return baseUrl.replace('${entitySetName}', '${entitySetName}/$count')`)\n  lines.push(`  },`)\n  lines.push(``)\n  lines.push(`  /**`)\n  lines.push(`   * Build OData filter string from filter object`)\n  lines.push(`   */`)\n  lines.push(`  buildFilter: (filter: ODataFilter<${interfaceName}>): string => {`)\n  lines.push(`    return buildFilter<${interfaceName}>(filter)`)\n  lines.push(`  },`)\n  lines.push(``)\n  lines.push(`  /**`)\n  lines.push(`   * Build OData orderby string from orderby object`)\n  lines.push(`   */`)\n  lines.push(`  buildOrderBy: (orderby: ODataOrderBy<${interfaceName}>): string => {`)\n  lines.push(`    return buildOrderBy<${interfaceName}>(orderby)`)\n  lines.push(`  },`)\n  lines.push(``)\n  lines.push(`  /** Entity metadata for reference */`)\n  lines.push(`  entitySet: '${entitySetName}',`)\n  lines.push(`  logicalName: '${entityMetadata.logicalName}',`)\n  lines.push(`  displayName: '${entityMetadata.displayName}'`)\n  lines.push(`}`)\n  \n  return lines.join('\\n')\n}\n\n/**\n * Generate the helper functions used by query builders\n */\nexport function generateQueryHelperFunctions(lines: string[], interfaceName: string): void {\n  // Types are imported, no need to redefine\n  \n  // OData operators\n  lines.push(`const odataOperators = {`)\n  lines.push(`    $eq: <T>(field: keyof T, value: any) => \\`\\${String(field)} eq \\${formatValue(value)}\\`,`)\n  lines.push(`    $ne: <T>(field: keyof T, value: any) => \\`\\${String(field)} ne \\${formatValue(value)}\\`,`)\n  lines.push(`    $gt: <T>(field: keyof T, value: any) => \\`\\${String(field)} gt \\${formatValue(value)}\\`,`)\n  lines.push(`    $lt: <T>(field: keyof T, value: any) => \\`\\${String(field)} lt \\${formatValue(value)}\\`,`)\n  lines.push(`    $gte: <T>(field: keyof T, value: any) => \\`\\${String(field)} ge \\${formatValue(value)}\\`,`)\n  lines.push(`    $lte: <T>(field: keyof T, value: any) => \\`\\${String(field)} le \\${formatValue(value)}\\`,`)\n  lines.push(`    $contains: <T>(field: keyof T, value: string) => \\`contains(\\${String(field)}, '\\${value}')\\`,`)\n  lines.push(`    $startswith: <T>(field: keyof T, value: string) => \\`startswith(\\${String(field)}, '\\${value}')\\`,`)\n  lines.push(`    $endswith: <T>(field: keyof T, value: string) => \\`endswith(\\${String(field)}, '\\${value}')\\`,`)\n  lines.push(`    $in: <T>(field: keyof T, values: any[]) => \\`\\${String(field)} in (\\${values.map(formatValue).join(',')})\\`,`)\n  lines.push(`} as const`)\n  lines.push('')\n  \n  // Format value function\n  lines.push(`const formatValue = (value: any): string => {`)\n  lines.push(`    if (value === null || value === undefined) return 'null'`)\n  lines.push(`    if (typeof value === 'string') return \\`'\\${value.replace(/'/g, \"''\")}\\``)\n  lines.push(`    if (value instanceof Date) return \\`'\\${value.toISOString()}'\\``)\n  lines.push(`    if (typeof value === 'boolean') return value.toString()`)\n  lines.push(`    return String(value)`)\n  lines.push(`}`)\n  lines.push('')\n  \n  // Build filter function\n  lines.push(`// Build OData filter string with support for logical operators`)\n  lines.push(`const buildFilter = <T>(filter: ODataFilter<T>): string => {`)\n  lines.push(`    const conditions = Object.entries(filter)`)\n  lines.push(`        .filter(([key]) => !key.startsWith('$'))`)\n  lines.push(`        .map(([field, value]) => {`)\n  lines.push(`            if (typeof value === 'object' && value !== null && !(value instanceof Date)) {`)\n  lines.push(`                return Object.entries(value)`)\n  lines.push(`                    .map(([op, val]) => {`)\n  lines.push(`                        const operatorFn = odataOperators[op as keyof typeof odataOperators]`)\n  lines.push(`                        return operatorFn ? operatorFn<T>(field as keyof T, val) : null`)\n  lines.push(`                    })`)\n  lines.push(`                    .filter(Boolean)`)\n  lines.push(`                    .join(' and ')`)\n  lines.push(`            }`)\n  lines.push(`            return odataOperators.$eq<T>(field as keyof T, value)`)\n  lines.push(`        })`)\n  lines.push(`        .filter(Boolean)`)\n  lines.push(``)\n  lines.push(`    // Handle $and and $or logical operators`)\n  lines.push(`    const logicalConditions: string[] = []`)\n  lines.push(`    if ('$and' in filter && filter.$and) {`)\n  lines.push(`        const andConditions = filter.$and.map(f => buildFilter<T>(f)).filter(Boolean)`)\n  lines.push(`        if (andConditions.length > 0) {`)\n  lines.push(`            logicalConditions.push(\\`(\\${andConditions.join(' and ')})\\`)`)\n  lines.push(`        }`)\n  lines.push(`    }`)\n  lines.push(`    if ('$or' in filter && filter.$or) {`)\n  lines.push(`        const orConditions = filter.$or.map(f => buildFilter<T>(f)).filter(Boolean)`)\n  lines.push(`        if (orConditions.length > 0) {`)\n  lines.push(`            logicalConditions.push(\\`(\\${orConditions.join(' or ')})\\`)`)\n  lines.push(`        }`)\n  lines.push(`    }`)\n  lines.push(``)\n  lines.push(`    const allConditions = [...conditions, ...logicalConditions].filter(Boolean)`)\n  lines.push(`    return allConditions.join(' and ')`)\n  lines.push(`}`)\n  lines.push('')\n  \n  // Enhanced build expand function with metadata validation and recursive support\n  lines.push(`// Build OData expand string with support for nested selects, recursive expansion, and relationship validation`)\n  lines.push(`const buildExpand = (expand: any): string => {`)\n  lines.push(`    if (Array.isArray(expand)) {`)\n  lines.push(`        // Simple array format: ['rel1', 'rel2'] - validate against expandable properties`)\n  lines.push(`        for (const relationshipName of expand) {`)\n  lines.push(`            if (!${interfaceName}Meta.expandableProperties.includes(relationshipName as any)) {`)\n  lines.push(`                throw new Error(\\`Unknown relationship '\\${relationshipName}'. Available relationships: \\${${interfaceName}Meta.expandableProperties.join(', ')}\\`)`)\n  lines.push(`            }`)\n  lines.push(`        }`)\n  lines.push(`        return expand.join(',')`)\n  lines.push(`    }`)\n  lines.push(`    `)\n  lines.push(`    if (typeof expand === 'object' && expand !== null) {`)\n  lines.push(`        // Object format: { rel1: { $select: ['field1'], $expand: { ... } }, rel2: { $select: ['field2'] } }`)\n  lines.push(`        return Object.entries(expand)`)\n  lines.push(`            .map(([relationshipName, options]: [string, any]) => {`)\n  lines.push(`                // Validate relationship exists`)\n  lines.push(`                if (!${interfaceName}Meta.expandableProperties.includes(relationshipName as any)) {`)\n  lines.push(`                    throw new Error(\\`Unknown relationship '\\${relationshipName}'. Available relationships: \\${${interfaceName}Meta.expandableProperties.join(', ')}\\`)`)\n  lines.push(`                }`)\n  lines.push(`                `)\n  lines.push(`                if (!options || typeof options !== 'object') {`)\n  lines.push(`                    return relationshipName`)\n  lines.push(`                }`)\n  lines.push(`                `)\n  lines.push(`                const nestedParams: string[] = []`)\n  lines.push(`                if (options.$select && Array.isArray(options.$select)) {`)\n  lines.push(`                    nestedParams.push(\\`$select=\\${options.$select.join(',')}\\`)`)\n  lines.push(`                }`)\n  lines.push(`                if (options.$filter) {`)\n  lines.push(`                    nestedParams.push(\\`$filter=\\${buildExpandFilter(options.$filter)}\\`)`)\n  lines.push(`                }`)\n  lines.push(`                if (options.$orderby) {`)\n  lines.push(`                    const orderBy = typeof options.$orderby === 'object' && !Array.isArray(options.$orderby)`)\n  lines.push(`                        ? Object.entries(options.$orderby).map(([field, dir]) => \\`\\${field} \\${dir}\\`).join(', ')`)\n  lines.push(`                        : Array.isArray(options.$orderby) ? options.$orderby.join(', ') : options.$orderby`)\n  lines.push(`                    nestedParams.push(\\`$orderby=\\${orderBy}\\`)`)\n  lines.push(`                }`)\n  lines.push(`                if (options.$top !== undefined) {`)\n  lines.push(`                    nestedParams.push(\\`$top=\\${options.$top}\\`)`)\n  lines.push(`                }`)\n  lines.push(`                `)\n  lines.push(`                // Handle recursive nested expands`)\n  lines.push(`                if (options.$expand) {`)\n  lines.push(`                    const nestedExpand = buildExpand(options.$expand)`)\n  lines.push(`                    if (nestedExpand) {`)\n  lines.push(`                        nestedParams.push(\\`$expand=\\${nestedExpand}\\`)`)\n  lines.push(`                    }`)\n  lines.push(`                }`)\n  lines.push(`                `)\n  lines.push(`                return nestedParams.length > 0 `)\n  lines.push(`                    ? \\`\\${relationshipName}(\\${nestedParams.join(';')})\\``)\n  lines.push(`                    : relationshipName`)\n  lines.push(`            })`)\n  lines.push(`            .join(',')`)\n  lines.push(`    }`)\n  lines.push(`    `)\n  lines.push(`    return String(expand)`)\n  lines.push(`}`)\n  lines.push('')\n  \n  // Simple filter builder for expand filters (simplified version)\n  lines.push(`// Build filter for expand operations (simplified)`)\n  lines.push(`const buildExpandFilter = (filter: any): string => {`)\n  lines.push(`    if (typeof filter === 'object' && filter !== null) {`)\n  lines.push(`        return Object.entries(filter)`)\n  lines.push(`            .map(([field, value]) => {`)\n  lines.push(`                if (typeof value === 'object' && value !== null) {`)\n  lines.push(`                    return Object.entries(value)`)\n  lines.push(`                        .map(([op, val]) => \\`\\${field} \\${op.replace('$', '')} \\${formatValue(val)}\\`)`)\n  lines.push(`                        .join(' and ')`)\n  lines.push(`                }`)\n  lines.push(`                return \\`\\${field} eq \\${formatValue(value)}\\``)\n  lines.push(`            })`)\n  lines.push(`            .join(' and ')`)\n  lines.push(`    }`)\n  lines.push(`    return String(filter)`)\n  lines.push(`}`)\n  lines.push('')\n  \n  // Build OData URL function\n  lines.push(`// Build complete OData URL with query parameters`)\n  lines.push(`const buildODataUrl = (entitySet: string, options: ${interfaceName}ListOptions = {}, id?: string): string => {`)\n  lines.push(`    const baseUrl = \\`/api/data/v9.2/\\${entitySet}\\``)\n  lines.push(`    const url = id ? \\`\\${baseUrl}(\\${id})\\` : baseUrl`)\n  lines.push(``)\n  lines.push(`    const queryParams = [`)\n  lines.push(`        options.$select && \\`$select=\\${options.$select.join(',')}\\`,`)\n  lines.push(`        options.$expand && \\`$expand=\\${buildExpand(options.$expand)}\\`,`)\n  lines.push(`        options.$filter && \\`$filter=\\${buildFilter(options.$filter)}\\`,`)\n  lines.push(`        options.$orderby && \\`$orderby=\\${buildOrderBy(options.$orderby)}\\`,`)\n  lines.push(`        options.$top !== undefined && \\`$top=\\${options.$top}\\`,`)\n  lines.push(`        options.$skip !== undefined && \\`$skip=\\${options.$skip}\\`,`)\n  lines.push(`        options.$count && \\`$count=true\\`,`)\n  lines.push(`        options.$search && \\`$search=\\${encodeURIComponent(options.$search)}\\`,`)\n  lines.push(`    ].filter(Boolean)`)\n  lines.push(``)\n  lines.push(`    return queryParams.length > 0 ? \\`\\${url}?\\${queryParams.join('&')}\\` : url`)\n  lines.push(`}`)\n  lines.push('')\n  \n  // Build order by function\n  lines.push(`// Build order by clause`)\n  lines.push(`const buildOrderBy = <T>(orderby: ODataOrderBy<T>): string => {`)\n  lines.push(`    return Object.entries(orderby)`)\n  lines.push(`        .map(([field, direction]) => \\`\\${field} \\${direction}\\`)`)\n  lines.push(`        .join(', ')`)\n  lines.push(`}`)\n  lines.push('')\n}\n\n/**\n * Generate a query builders file for an entity  \n */\nexport function generateEntityQueryBuildersFile(\n  entityMetadata: ProcessedEntityMetadata,\n  options: TypeGenerationOptions = {}\n): string {\n  const { includeComments = true } = options\n  const lines: string[] = []\n  \n  // File header with clear documentation\n  if (includeComments) {\n    lines.push(`/**`)\n    lines.push(` * Query Builders for ${entityMetadata.displayName}`)\n    lines.push(` * `)\n    lines.push(` * Auto-generated type-safe query builders for Dataverse entity: ${entityMetadata.logicalName}`)\n    lines.push(` * These are transparent, modifiable functions that you can customize as needed`)\n    lines.push(` * `)\n    lines.push(` * @generated ${new Date().toISOString()}`)\n    lines.push(` * @entity ${entityMetadata.displayName} (${entityMetadata.schemaName})`)\n    lines.push(` * @entitySet ${entityMetadata.entitySetName}`)\n    lines.push(` */`)\n  } else {\n    lines.push(`// Generated query builders for ${entityMetadata.schemaName}`)\n    lines.push(`// Entity: ${entityMetadata.displayName}`)  \n    lines.push(`// Generated: ${new Date().toISOString()}`)\n  }\n  lines.push('')\n  \n  // Generate the query builders\n  lines.push(generateEntityQueryBuilders(entityMetadata, options))\n  \n  return lines.join('\\n')\n}","/**\n * Hook utilities and documentation generation\n * Contains utilities for generating hook indexes, documentation, and helper functions\n */\n\nimport type { ProcessedEntityMetadata } from '../../processors/index.js'\nimport type { TypeGenerationOptions } from '../index.js'\nimport { sanitizeInterfaceName } from '../utils.js'\n\n/**\n * Generate hooks index file that exports all entity hooks\n */\nexport function generateHooksIndex(\n  entities: ProcessedEntityMetadata[],\n  options: TypeGenerationOptions = {}\n): string {\n  const { includeComments = true } = options\n  const lines: string[] = []\n  \n  // File header\n  lines.push(`// Generated React Query hooks index`)\n  lines.push(`// Total entities: ${entities.length}`)\n  lines.push(`// Generated: ${new Date().toISOString()}`)\n  lines.push('')\n  \n  if (includeComments && entities.length > 0) {\n    const firstEntity = entities[0]\n    const pascalTypeName = sanitizeInterfaceName(firstEntity.schemaName)\n    \n    lines.push(`/**`)\n    lines.push(` * Barrel exports for all entity React Query hooks`)\n    lines.push(` * `)\n    lines.push(` * @example`)\n    lines.push(` * import { use${pascalTypeName}, use${pascalTypeName}List } from './hooks'`)\n    lines.push(` * `)\n    lines.push(` * const { data: entity } = use${pascalTypeName}('<entity-id>')`)\n    lines.push(` * const { data: entities } = use${pascalTypeName}List({ statecode: 0 })`)\n    lines.push(` */`)\n    lines.push('')\n  }\n  \n  // Export all hooks\n  for (const entity of entities) {\n    const hooksFile = `${entity.logicalName}.hooks.js`\n    lines.push(`export * from './${hooksFile}'`)\n  }\n  \n  lines.push('')\n  \n  // Note: All query keys are provided by the generated hooks\n  // Use queryClient.invalidateQueries(EntityQueryKeys.all) for cache invalidation\n  \n  return lines.join('\\n')\n}\n\n\n/**\n * Generate a separate hooks file for an entity\n */\nexport function generateEntityHooksFile(\n  entityMetadata: ProcessedEntityMetadata,\n  options: TypeGenerationOptions = {},\n  hooksContent?: string\n): string {\n  const { includeComments = true } = options\n  const lines: string[] = []\n  \n  // File header with clear documentation\n  if (includeComments) {\n    lines.push(`/**`)\n    lines.push(` * React Query Hooks for ${entityMetadata.displayName}`)\n    lines.push(` * `)\n    lines.push(` * Auto-generated type-safe hooks for Dataverse entity: ${entityMetadata.logicalName}`)\n    lines.push(` * Provides full TypeScript intellisense for queries, filters, and selections`)\n    lines.push(` * `)\n    lines.push(` * @generated ${new Date().toISOString()}`)\n    lines.push(` * @entity ${entityMetadata.displayName} (${entityMetadata.schemaName})`)\n    lines.push(` * @entitySet ${entityMetadata.entitySetName}`)\n    lines.push(` */`)\n  } else {\n    lines.push(`// Generated React Query hooks for ${entityMetadata.schemaName}`)\n    lines.push(`// Entity: ${entityMetadata.displayName}`)  \n    lines.push(`// Generated: ${new Date().toISOString()}`)\n  }\n  lines.push('')\n  \n  // Add the hooks content if provided\n  if (hooksContent) {\n    lines.push(hooksContent)\n  }\n  \n  return lines.join('\\n')\n}","/**\n * Hooks module orchestrator\n * Re-exports all hooks generation functionality from individual modules\n */\n\n// Entity hooks exports\nexport {\n  generateEntitySpecificExamples,\n  generateSingleEntityHook,\n  generateOptionSetConstantName\n} from './entity-hooks.js'\n\n// List hooks exports\nexport {\n  generateEntityListHook,\n  generateEntityCountHook\n} from './list-hooks.js'\n\n// Query builders exports\nexport {\n  generateEntityQueryBuilders,\n  generateQueryHelperFunctions,\n  generateEntityQueryBuildersFile\n} from './query-builders.js'\n\n// Utilities exports\nexport {\n  generateHooksIndex,\n  generateEntityHooksFile\n} from './utilities.js'\n\n// Main composable functions that combine the above modules\nimport type { ProcessedEntityMetadata } from '../../processors/index.js'\nimport type { TypeGenerationOptions } from '../index.js'\nimport { getHooksToEntityImportPath, getHooksToSharedImportPath, shouldOrganizeDirectories } from '../import-utils.js'\nimport { sanitizeInterfaceName } from '../utils.js'\nimport { \n  generateSingleEntityHook, \n  generateOptionSetConstantName\n} from './entity-hooks.js'\nimport { generateEntityListHook, generateEntityCountHook } from './list-hooks.js'\n\n/**\n * Generate individual, composable React Query hooks for an entity\n * Each hook is standalone and can be easily customized by developers\n */\nexport function generateEntityHooks(\n  entityMetadata: ProcessedEntityMetadata,\n  options: TypeGenerationOptions = {}\n): string {\n  const { \n    includeComments = true,\n    primaryEntities = [],\n    relatedEntitiesDir = 'related'\n  } = options\n  const lines: string[] = []\n  \n  const interfaceName = sanitizeInterfaceName(entityMetadata.schemaName)\n  const primaryKey = entityMetadata.primaryIdAttribute\n  \n  // Determine import paths based on directory structure\n  const organizingDirectories = shouldOrganizeDirectories(relatedEntitiesDir, options.fullMetadata ?? false, primaryEntities)\n  const entityImportPath = organizingDirectories \n    ? getHooksToEntityImportPath(entityMetadata.logicalName, primaryEntities, relatedEntitiesDir)\n    : `../${entityMetadata.logicalName.toLowerCase()}.js`\n  const queryTypesImportPath = getHooksToSharedImportPath('query-types.js')\n  \n  // Import statements\n  lines.push(`import { useQuery } from '@tanstack/react-query'`)\n  lines.push(`import type { UseQueryOptions, UseQueryResult } from '@tanstack/react-query'`)\n  lines.push(`import { ${interfaceName}Meta } from '${entityImportPath}'`)\n  lines.push(`import type { ${interfaceName}, ${interfaceName}Expand } from '${entityImportPath}'`)\n  lines.push(`import type {`)\n  lines.push(`    ODataFilter,`)\n  lines.push(`    ODataSelect,`)\n  lines.push(`    ODataOrderBy,`)\n  lines.push(`    ODataResponse`)\n  lines.push(`} from '${queryTypesImportPath}'`)\n  \n  // Query builders import path (from hooks to queries directory)\n  // Both hooks and queries follow the same directory structure, so we can use relative paths within each\n  const isPrimary = primaryEntities.includes(entityMetadata.logicalName)\n  const queryBuildersImportPath = isPrimary \n    ? `../queries/${entityMetadata.logicalName}.queries.js`    // hooks/entity.hooks.ts → queries/entity.queries.ts\n    : `../${entityMetadata.logicalName}.queries.js`             // hooks/related/entity.hooks.ts → queries/related/entity.queries.ts\n  lines.push(`import { ${interfaceName}Queries } from '${queryBuildersImportPath}'`)\n  \n  // Import related entity types for type-safe expands (only if they exist)\n  // NOTE: We skip generating imports for related entities that don't have type files\n  // This prevents import errors when only a subset of entities are being generated\n  const relatedEntityImports = new Set<string>()\n  \n  // Future enhancement: Pass available entities list to conditionally generate imports\n  \n  if (relatedEntityImports.size > 0) {\n    lines.push('')\n    lines.push(`// Related entity imports for type-safe expands`)\n    Array.from(relatedEntityImports).sort().forEach(importLine => lines.push(importLine))\n  }\n  \n  // Import option set constants for examples\n  const stateAttribute = entityMetadata.attributes.find(attr => attr.logicalName === 'statecode')\n  if (stateAttribute?.optionSetName) {\n    const stateConstantName = generateOptionSetConstantName(stateAttribute.optionSetName)\n    lines.push(`import { ${stateConstantName} } from '${entityImportPath}'`)\n  }\n  \n  lines.push('')\n  \n  // =====================================================================\n  // Configuration\n  // =====================================================================\n  \n  if (includeComments) {\n    lines.push(`/**`)\n    lines.push(` * Uses standard fetch - authentication handled by dataverse-utilities or model-driven apps`)\n    lines.push(` */`)\n  }\n  lines.push(``)\n  \n  // Custom types with entity-specific expand support\n  if (includeComments) {\n    lines.push(`/**`)\n    lines.push(` * Type-safe options for ${entityMetadata.displayName} entity operations`)\n    lines.push(` * Uses entity-specific expand types for full IntelliSense support`)\n    lines.push(` */`)\n  }\n  lines.push(`type ${interfaceName}ListOptions = {`)\n  lines.push(`  $select?: ODataSelect<${interfaceName}>`)\n  lines.push(`  $expand?: ${interfaceName}Expand`)\n  lines.push(`  $filter?: ODataFilter<${interfaceName}>`)\n  lines.push(`  $orderby?: ODataOrderBy<${interfaceName}>`)\n  lines.push(`  $top?: number`)\n  lines.push(`  $skip?: number`)\n  lines.push(`  $count?: boolean`)\n  lines.push(`  $search?: string`)\n  lines.push(`}`)\n  lines.push('')\n  lines.push(`type ${interfaceName}Options = {`)\n  lines.push(`  $select?: ODataSelect<${interfaceName}>`)\n  lines.push(`  $expand?: ${interfaceName}Expand`)\n  lines.push(`}`)\n  \n  // =====================================================================\n  // React Query Hooks (using generated query builders)\n  // =====================================================================\n  \n  if (includeComments) {\n    lines.push(`/**`)\n    lines.push(` * These hooks use the generated query builders from ${interfaceName}Queries.`)\n    lines.push(` * You can modify the query building logic by editing the queries file.`)\n    lines.push(` */`)\n    lines.push(``)\n  }\n  \n  generateSingleEntityHook(lines, interfaceName, interfaceName, primaryKey, entityMetadata, includeComments)\n  lines.push('')\n  \n  generateEntityListHook(lines, interfaceName, interfaceName, entityMetadata, includeComments)\n  lines.push('')\n  \n  generateEntityCountHook(lines, interfaceName, interfaceName, entityMetadata, includeComments)\n  lines.push('')\n  \n  // =====================================================================\n  // Query Keys for Cache Management\n  // =====================================================================\n  \n  if (includeComments) {\n    lines.push(`/**`)\n    lines.push(` * Query keys for React Query cache management`)\n    lines.push(` * `)\n    lines.push(` * Use these to invalidate or prefetch specific queries:`)\n    lines.push(` * - \\`queryClient.invalidateQueries(${interfaceName}QueryKeys.all)\\` - Invalidate all queries`)\n    lines.push(` * - \\`queryClient.invalidateQueries(${interfaceName}QueryKeys.detail(id))\\` - Invalidate specific entity`)\n    lines.push(` * - \\`queryClient.invalidateQueries(${interfaceName}QueryKeys.list())\\` - Invalidate all lists`)\n    lines.push(` */`)\n  }\n  lines.push(`export const ${interfaceName}QueryKeys = {`)\n  lines.push(`  /** Base key for all ${entityMetadata.displayName} queries */`)\n  lines.push(`  all: ['${entityMetadata.logicalName}'] as const,`)\n  lines.push(`  /** Key for single entity queries */`)\n  lines.push(`  detail: (id: string) => [...${interfaceName}QueryKeys.all, 'detail', id] as const,`)\n  lines.push(`  /** Key for entity list queries */`)\n  lines.push(`  list: (options?: ${interfaceName}ListOptions) => [...${interfaceName}QueryKeys.all, 'list', options] as const,`)\n  lines.push(`  /** Key for entity count queries */`)\n  lines.push(`  count: (options?: Pick<${interfaceName}ListOptions, '$filter'>) => [...${interfaceName}QueryKeys.all, 'count', options] as const,`)\n  lines.push(`}`)\n  \n  return lines.join('\\n')\n}","import { Project, ScriptTarget, ModuleKind } from 'ts-morph'\nimport { generateImports } from '../generators/index.js'\nimport type { GeneratedCode } from '../generators/index.js'\n\n/**\n * Combine generated code parts into final content\n */\nexport function combineGeneratedCode(code: GeneratedCode): string {\n  const parts: string[] = []\n\n  // Add imports\n  if (code.imports.length > 0) {\n    parts.push(generateImports(code.imports))\n  }\n\n  // Add constants (option sets)\n  if (code.constants.trim()) {\n    parts.push(code.constants)\n    parts.push('')\n  }\n\n  // Add interfaces\n  if (code.interfaces.trim()) {\n    parts.push(code.interfaces)\n    parts.push('')\n  }\n\n  // Add utility types\n  if (code.types.trim()) {\n    parts.push(code.types)\n    parts.push('')\n  }\n\n  // Add metadata\n  if (code.metadata?.trim()) {\n    parts.push(code.metadata)\n    parts.push('')\n  }\n\n  // Add validation\n  if (code.validation?.trim()) {\n    parts.push(code.validation)\n  }\n\n  return parts.join('\\n').trim() + '\\n'\n}\n\n// Track formatting progress globally\nlet formattingProgress = { \n  current: 0, \n  total: 0, \n  onProgress: null as ((current: number, total: number, item?: string) => void) | null \n}\n\n/**\n * Format TypeScript code using ts-morph for proper TypeScript formatting\n */\nexport async function formatCode(code: string, showProgress: boolean = false): Promise<string> {\n  try {\n    // Track formatting progress if requested - only update every 50 files to avoid spam\n    if (showProgress && formattingProgress.onProgress) {\n      formattingProgress.current++\n      // Only update progress every 50 files or on the last file\n      if (formattingProgress.current % 50 === 0 || formattingProgress.current === formattingProgress.total) {\n        formattingProgress.onProgress(formattingProgress.current, formattingProgress.total, 'formatting')\n      }\n    }\n\n    // Create a temporary ts-morph project for formatting\n    const project = new Project({\n      useInMemoryFileSystem: true,\n      compilerOptions: {\n        target: ScriptTarget.ES2020,\n        module: ModuleKind.ES2020,\n        declaration: true,\n        esModuleInterop: true,\n        allowSyntheticDefaultImports: true,\n        strict: true,\n        skipLibCheck: true\n      }\n    })\n\n    // Create a temporary source file with the code\n    const sourceFile = project.createSourceFile('temp.ts', code)\n    \n    // Format the code using ts-morph's formatting capabilities\n    sourceFile.formatText({\n      ensureNewLineAtEndOfFile: true,\n      insertSpaceAfterCommaDelimiter: true,\n      insertSpaceAfterSemicolonInForStatements: true,\n      insertSpaceBeforeAndAfterBinaryOperators: true,\n      insertSpaceAfterConstructor: false,\n      insertSpaceAfterKeywordsInControlFlowStatements: true,\n      insertSpaceAfterFunctionKeywordForAnonymousFunctions: false,\n      insertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis: false,\n      insertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets: false,\n      insertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces: false,\n      insertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces: false,\n      insertSpaceBeforeFunctionParenthesis: false,\n      placeOpenBraceOnNewLineForFunctions: false,\n      placeOpenBraceOnNewLineForControlBlocks: false,\n      insertSpaceBeforeTypeAnnotation: false,\n      insertSpaceAfterTypeAssertion: true\n    })\n\n    // Get the formatted text\n    const formattedCode = sourceFile.getFullText()\n    \n    // Clean up the project\n    project.removeSourceFile(sourceFile)\n\n    return formattedCode\n  } catch (error) {\n    // Fallback to basic formatting if ts-morph formatting fails\n    console.warn('ts-morph formatting failed, falling back to basic formatting:', error)\n    return code\n      .replace(/\\n\\n\\n+/g, '\\n\\n') // Remove excessive newlines\n      .replace(/^\\s*\\n/gm, '\\n') // Remove empty lines with whitespace\n      .replace(/\\s+$/gm, '') // Remove trailing whitespace\n      .trim() + '\\n'\n  }\n}\n\n/**\n * Initialize formatting progress tracking\n */\nexport function initializeFormattingProgress(totalFiles: number, onProgress?: (current: number, total: number, item?: string) => void): void {\n  formattingProgress = { current: 0, total: totalFiles, onProgress: onProgress || null }\n}\n\n/**\n * Complete formatting progress tracking\n */\nexport function completeFormattingProgress(): void {\n  formattingProgress.onProgress = null\n}\n\n/**\n * Validate generated TypeScript code using ts-morph compiler integration\n */\nexport async function validateGeneratedCode(\n  filePath: string\n): Promise<{ isValid: boolean; errors: string[]; warnings: string[] }> {\n  try {\n    const { promises: fs } = await import('fs')\n    const content = await fs.readFile(filePath, 'utf8')\n    const errors: string[] = []\n    const warnings: string[] = []\n\n    // Basic content validation\n    if (!content.trim()) {\n      errors.push('File is empty')\n      return { isValid: false, errors, warnings }\n    }\n\n    // Use ts-morph for comprehensive TypeScript validation\n    const project = new Project({\n      useInMemoryFileSystem: true,\n      compilerOptions: {\n        target: ScriptTarget.ES2020,\n        module: ModuleKind.ES2020,\n        declaration: true,\n        esModuleInterop: true,\n        allowSyntheticDefaultImports: true,\n        strict: true,\n        skipLibCheck: true,\n        noUnusedLocals: false, // Don't warn about unused variables in generated code\n        noUnusedParameters: false,\n        noResolve: true, // Don't try to resolve imports - we're just validating syntax\n        moduleResolution: undefined // Skip module resolution\n      }\n    })\n\n    try {\n      // Create source file and get diagnostics\n      const sourceFile = project.createSourceFile(filePath, content)\n      \n      // Get semantic and syntactic diagnostics\n      const diagnostics = sourceFile.getPreEmitDiagnostics()\n      \n      for (const diagnostic of diagnostics) {\n        const message = diagnostic.getMessageText()\n        const messageText = typeof message === 'string' ? message : message.getMessageText()\n        const line = diagnostic.getLineNumber()\n        const formattedMessage = line ? `Line ${line}: ${messageText}` : messageText\n\n        // Skip module resolution errors in generated code\n        if (messageText.includes(\"Cannot find module\") || \n            messageText.includes(\"Module resolution\") ||\n            messageText.includes(\"moduleResolution\")) {\n          continue\n        }\n\n        // Categorize by severity\n        const category = diagnostic.getCategory()\n        if (category === 1) { // Error\n          errors.push(formattedMessage)\n        } else if (category === 0) { // Warning\n          warnings.push(formattedMessage)\n        }\n      }\n\n      // Additional validation checks\n      const exports = sourceFile.getExportedDeclarations()\n      if (exports.size === 0) {\n        warnings.push('No exports found - file may not be usable as a module')\n      }\n\n      // Check for common issues in generated code\n      const text = sourceFile.getFullText()\n      if (text.includes('undefined')) {\n        warnings.push('Contains \"undefined\" - may indicate incomplete generation')\n      }\n\n      project.removeSourceFile(sourceFile)\n    } catch (compilerError) {\n      errors.push(`TypeScript compilation error: ${compilerError instanceof Error ? compilerError.message : String(compilerError)}`)\n    }\n\n    return {\n      isValid: errors.length === 0,\n      errors,\n      warnings\n    }\n\n  } catch (error) {\n    return {\n      isValid: false,\n      errors: [error instanceof Error ? error.message : String(error)],\n      warnings: []\n    }\n  }\n}","import { promises as fs } from 'fs'\nimport { join } from 'path'\nimport type { CodeGenConfig } from './index.js'\n\n/**\n * Helper function to determine if an entity is a primary entity\n */\nexport function isPrimaryEntity(entityLogicalName: string, primaryEntities: string[] = []): boolean {\n  return primaryEntities.includes(entityLogicalName)\n}\n\n/**\n * Helper function to get the correct directory path for an entity\n */\nexport function getEntityDirectory(entityLogicalName: string, config: CodeGenConfig): string {\n  // Check if directory organization should be enabled\n  const shouldOrganizeDirectories = config.relatedEntitiesDir && \n    (config.typeGenerationOptions.fullMetadata || config.primaryEntities?.length);\n  \n  if (!shouldOrganizeDirectories || isPrimaryEntity(entityLogicalName, config.primaryEntities)) {\n    return config.outputDir // Primary entities go in root\n  }\n  return join(config.outputDir, config.relatedEntitiesDir!) // Related entities go in subdirectory\n}\n\n/**\n * Create output directory structure\n */\nexport async function createOutputDirectory(\n  outputDir: string,\n  subdirectories: string[] = []\n): Promise<{ created: string[]; errors: string[] }> {\n  const created: string[] = []\n  const errors: string[] = []\n\n  try {\n    // Create main output directory\n    await fs.mkdir(outputDir, { recursive: true })\n    created.push(outputDir)\n\n    // Create subdirectories\n    for (const subdir of subdirectories) {\n      try {\n        const subdirPath = join(outputDir, subdir)\n        await fs.mkdir(subdirPath, { recursive: true })\n        created.push(subdirPath)\n      } catch (error) {\n        errors.push(`Failed to create subdirectory ${subdir}: ${error instanceof Error ? error.message : String(error)}`)\n      }\n    }\n\n  } catch (error) {\n    errors.push(`Failed to create output directory ${outputDir}: ${error instanceof Error ? error.message : String(error)}`)\n  }\n\n  return { created, errors }\n}\n\n/**\n * Clean generated files\n */\nexport async function cleanGeneratedFiles(\n  outputDir: string,\n  pattern: string = '*.ts'\n): Promise<{ deletedFiles: string[]; errors: string[] }> {\n  const deletedFiles: string[] = []\n  const errors: string[] = []\n\n  try {\n    // Read directory\n    const files = await fs.readdir(outputDir)\n    \n    // Filter files by pattern (basic glob support)\n    const targetFiles = files.filter(file => {\n      if (pattern === '*.ts') {\n        return file.endsWith('.ts')\n      }\n      if (pattern === '*.d.ts') {\n        return file.endsWith('.d.ts')\n      }\n      return file.includes(pattern.replace('*', ''))\n    })\n\n    // Delete files\n    for (const file of targetFiles) {\n      try {\n        const filePath = join(outputDir, file)\n        await fs.unlink(filePath)\n        deletedFiles.push(filePath)\n      } catch (error) {\n        errors.push(`Failed to delete ${file}: ${error instanceof Error ? error.message : String(error)}`)\n      }\n    }\n\n  } catch (error) {\n    errors.push(`Failed to read directory ${outputDir}: ${error instanceof Error ? error.message : String(error)}`)\n  }\n\n  return { deletedFiles, errors }\n}\n\n/**\n * Get statistics about generated files\n */\nexport async function getGeneratedFileStats(\n  outputDir: string\n): Promise<{\n  totalFiles: number\n  totalSize: number\n  averageSize: number\n  largestFile: { path: string; size: number } | null\n  smallestFile: { path: string; size: number } | null\n}> {\n  try {\n    const files = await fs.readdir(outputDir)\n    const tsFiles = files.filter(f => f.endsWith('.ts') || f.endsWith('.d.ts'))\n    \n    if (tsFiles.length === 0) {\n      return {\n        totalFiles: 0,\n        totalSize: 0,\n        averageSize: 0,\n        largestFile: null,\n        smallestFile: null\n      }\n    }\n\n    const fileStats: Array<{ path: string; size: number }> = []\n    let totalSize = 0\n\n    for (const file of tsFiles) {\n      const filePath = join(outputDir, file)\n      const stat = await fs.stat(filePath)\n      const size = stat.size\n      \n      fileStats.push({ path: filePath, size })\n      totalSize += size\n    }\n\n    fileStats.sort((a, b) => a.size - b.size)\n\n    return {\n      totalFiles: tsFiles.length,\n      totalSize,\n      averageSize: Math.round(totalSize / tsFiles.length),\n      largestFile: fileStats[fileStats.length - 1] || null,\n      smallestFile: fileStats[0] || null\n    }\n\n  } catch {\n    return {\n      totalFiles: 0,\n      totalSize: 0,\n      averageSize: 0,\n      largestFile: null,\n      smallestFile: null\n    }\n  }\n}","import { promises as fs } from 'fs'\nimport { join, dirname } from 'path'\nimport type { ProcessedEntityMetadata, ProcessedOptionSet } from '../processors/index.js'\nimport type { CodeGenConfig, GeneratedFileResult } from './index.js'\nimport { generateEntityFile, generateGlobalOptionSetFile } from '../generators/index.js'\nimport { generateEntityHooks, generateEntityHooksFile, generateEntityQueryBuildersFile } from '../generators/query-hooks.js'\nimport { combineGeneratedCode, formatCode } from './formatter.js'\nimport { isPrimaryEntity, getEntityDirectory } from './directory-manager.js'\n\n/**\n * Write TypeScript declaration file for a global option set\n */\nexport async function writeGlobalOptionSetDeclaration(\n  optionSet: ProcessedOptionSet,\n  config: CodeGenConfig\n): Promise<GeneratedFileResult> {\n  try {\n    // Generate the code\n    const content = generateGlobalOptionSetFile(optionSet, config.typeGenerationOptions)\n    \n    // Format the code if prettier is enabled\n    const formattedContent = config.prettier \n      ? await formatCode(content, true)\n      : content\n\n    // Determine file path - create in global-choices subdirectory\n    const fileName = `${optionSet.name.toLowerCase()}${config.fileExtension}`\n    const filePath = join(config.outputDir, 'global-choices', fileName)\n\n    // Ensure output directory exists\n    await fs.mkdir(dirname(filePath), { recursive: true })\n\n    // Check if file exists and overwrite setting\n    if (!config.overwrite) {\n      try {\n        await fs.access(filePath)\n        return {\n          filePath,\n          content: formattedContent,\n          size: Buffer.byteLength(formattedContent, 'utf8'),\n          success: false,\n          error: 'File exists and overwrite is disabled'\n        }\n      } catch {\n        // File doesn't exist, proceed with writing\n      }\n    }\n\n    // Write the file\n    await fs.writeFile(filePath, formattedContent, 'utf8')\n\n    return {\n      filePath,\n      content: formattedContent,\n      size: Buffer.byteLength(formattedContent, 'utf8'),\n      success: true\n    }\n\n  } catch (error) {\n    return {\n      filePath: join(config.outputDir, 'global-choices', `${optionSet.name.toLowerCase()}${config.fileExtension}`),\n      content: '',\n      size: 0,\n      success: false,\n      error: error instanceof Error ? error.message : String(error)\n    }\n  }\n}\n\n/**\n * Write React Query hooks file for an entity\n */\nexport async function writeEntityHooksFile(\n  entityMetadata: ProcessedEntityMetadata,\n  config: CodeGenConfig\n): Promise<GeneratedFileResult> {\n  try {\n    // Generate the actual hooks content first\n    const hooksContent = generateEntityHooks(entityMetadata, config.typeGenerationOptions)\n    \n    // Generate the complete hooks file with header and content\n    const content = generateEntityHooksFile(entityMetadata, config.typeGenerationOptions, hooksContent)\n    \n    // Format the code if prettier is enabled\n    const formattedContent = config.prettier \n      ? await formatCode(content, true)\n      : content\n\n    // Determine file path - hooks files go in hooks subdirectory with related entities in hooks/related\n    const fileName = `${entityMetadata.logicalName}.hooks${config.fileExtension}`\n    const hooksBaseDir = join(config.outputDir, 'hooks')\n    \n    // Check if directory organization should be enabled\n    const shouldOrganizeDirectories = config.relatedEntitiesDir && \n      (config.typeGenerationOptions.fullMetadata || config.primaryEntities?.length);\n    \n    const hooksDir = !shouldOrganizeDirectories || isPrimaryEntity(entityMetadata.logicalName, config.primaryEntities) \n      ? hooksBaseDir \n      : join(hooksBaseDir, config.relatedEntitiesDir || 'related')\n    const filePath = join(hooksDir, fileName)\n\n    // Ensure output directory exists\n    await fs.mkdir(dirname(filePath), { recursive: true })\n\n    // Check if file exists and overwrite setting\n    if (!config.overwrite) {\n      try {\n        await fs.access(filePath)\n        return {\n          filePath,\n          content: formattedContent,\n          size: Buffer.byteLength(formattedContent, 'utf8'),\n          success: false,\n          error: 'File exists and overwrite is disabled'\n        }\n      } catch {\n        // File doesn't exist, proceed with writing\n      }\n    }\n\n    // Write the file\n    await fs.writeFile(filePath, formattedContent, 'utf8')\n\n    return {\n      filePath,\n      content: formattedContent,\n      size: Buffer.byteLength(formattedContent, 'utf8'),\n      success: true\n    }\n\n  } catch (error) {\n    const hooksBaseDir = join(config.outputDir, 'hooks')\n    \n    // Check if directory organization should be enabled\n    const shouldOrganizeDirectories = config.relatedEntitiesDir && \n      (config.typeGenerationOptions.fullMetadata || config.primaryEntities?.length);\n    \n    const hooksDir = !shouldOrganizeDirectories || isPrimaryEntity(entityMetadata.logicalName, config.primaryEntities) \n      ? hooksBaseDir \n      : join(hooksBaseDir, config.relatedEntitiesDir || 'related')\n    return {\n      filePath: join(hooksDir, `${entityMetadata.logicalName}.hooks${config.fileExtension}`),\n      content: '',\n      size: 0,\n      success: false,\n      error: error instanceof Error ? error.message : String(error)\n    }\n  }\n}\n\n/**\n * Write query builders file for an entity\n */\nexport async function writeEntityQueryBuildersFile(\n  entityMetadata: ProcessedEntityMetadata,\n  config: CodeGenConfig\n): Promise<GeneratedFileResult> {\n  try {\n    // Generate the query builders code\n    const content = generateEntityQueryBuildersFile(entityMetadata, config.typeGenerationOptions)\n    \n    // Format the code if prettier is enabled\n    const formattedContent = config.prettier \n      ? await formatCode(content, true)\n      : content\n\n    // Determine file path - query builders files go in queries subdirectory with related entities in queries/related\n    const fileName = `${entityMetadata.logicalName}.queries${config.fileExtension}`\n    const queriesBaseDir = join(config.outputDir, 'queries')\n    \n    // Check if directory organization should be enabled\n    const shouldOrganizeDirectories = config.relatedEntitiesDir && \n      (config.typeGenerationOptions.fullMetadata || config.primaryEntities?.length);\n    \n    const queriesDir = !shouldOrganizeDirectories || isPrimaryEntity(entityMetadata.logicalName, config.primaryEntities) \n      ? queriesBaseDir \n      : join(queriesBaseDir, config.relatedEntitiesDir || 'related')\n    const filePath = join(queriesDir, fileName)\n\n    // Ensure output directory exists\n    await fs.mkdir(dirname(filePath), { recursive: true })\n\n    // Check if file exists and overwrite setting\n    if (!config.overwrite) {\n      try {\n        await fs.access(filePath)\n        return {\n          filePath,\n          content: formattedContent,\n          size: Buffer.byteLength(formattedContent, 'utf8'),\n          success: false,\n          error: 'File exists and overwrite is disabled'\n        }\n      } catch {\n        // File doesn't exist, proceed with writing\n      }\n    }\n\n    // Write the file\n    await fs.writeFile(filePath, formattedContent, 'utf8')\n\n    return {\n      filePath,\n      content: formattedContent,\n      size: Buffer.byteLength(formattedContent, 'utf8'),\n      success: true\n    }\n\n  } catch (error) {\n    const queriesBaseDir = join(config.outputDir, 'queries')\n    \n    // Check if directory organization should be enabled\n    const shouldOrganizeDirectories = config.relatedEntitiesDir && \n      (config.typeGenerationOptions.fullMetadata || config.primaryEntities?.length);\n    \n    const queriesDir = !shouldOrganizeDirectories || isPrimaryEntity(entityMetadata.logicalName, config.primaryEntities) \n      ? queriesBaseDir \n      : join(queriesBaseDir, config.relatedEntitiesDir || 'related')\n    return {\n      filePath: join(queriesDir, `${entityMetadata.logicalName}.queries${config.fileExtension}`),\n      content: '',\n      size: 0,\n      success: false,\n      error: error instanceof Error ? error.message : String(error)\n    }\n  }\n}\n\n/**\n * Write TypeScript declaration file for an entity\n */\nexport async function writeEntityTypeDeclaration(\n  entityMetadata: ProcessedEntityMetadata,\n  config: CodeGenConfig,\n  allEntities: ProcessedEntityMetadata[] = []\n): Promise<GeneratedFileResult> {\n  try {\n    // Generate the code\n    const generatedCode = generateEntityFile(entityMetadata, config.typeGenerationOptions, allEntities)\n    \n    // Combine all parts into final content\n    const content = combineGeneratedCode(generatedCode)\n    \n    // Format the code if prettier is enabled\n    const formattedContent = config.prettier \n      ? await formatCode(content, true)\n      : content\n\n    // Determine file path - primary entities in root, related entities in subdirectory\n    const fileName = `${entityMetadata.schemaName.toLowerCase()}${config.fileExtension}`\n    const entityDir = getEntityDirectory(entityMetadata.logicalName, config)\n    const filePath = join(entityDir, fileName)\n\n    // Ensure output directory exists\n    await fs.mkdir(dirname(filePath), { recursive: true })\n\n    // Check if file exists and overwrite setting\n    if (!config.overwrite) {\n      try {\n        await fs.access(filePath)\n        return {\n          filePath,\n          content: formattedContent,\n          size: Buffer.byteLength(formattedContent, 'utf8'),\n          success: false,\n          error: 'File exists and overwrite is disabled'\n        }\n      } catch {\n        // File doesn't exist, proceed with writing\n      }\n    }\n\n    // Write the file\n    await fs.writeFile(filePath, formattedContent, 'utf8')\n\n    return {\n      filePath,\n      content: formattedContent,\n      size: Buffer.byteLength(formattedContent, 'utf8'),\n      success: true\n    }\n\n  } catch (error) {\n    const entityDir = getEntityDirectory(entityMetadata.logicalName, config)\n    return {\n      filePath: join(entityDir, `${entityMetadata.schemaName.toLowerCase()}${config.fileExtension}`),\n      content: '',\n      size: 0,\n      success: false,\n      error: error instanceof Error ? error.message : String(error)\n    }\n  }\n}\n\n/**\n * Write query-types file\n */\nexport async function writeQueryTypesFile(config: CodeGenConfig): Promise<GeneratedFileResult> {\n  const fileName = `query-types${config.fileExtension}`\n  const filePath = join(config.outputDir, fileName)\n  \n  try {\n    // Generate the query-types content\n    const queryTypesContent = await generateQueryTypesFile(config)\n    \n    await fs.mkdir(dirname(filePath), { recursive: true })\n    await fs.writeFile(filePath, queryTypesContent, 'utf8')\n    \n    const stats = await fs.stat(filePath)\n    \n    return {\n      filePath,\n      content: queryTypesContent,\n      size: stats.size,\n      success: true\n    }\n    \n  } catch (error) {\n    return {\n      filePath,\n      content: '',\n      size: 0,\n      success: false,\n      error: error instanceof Error ? error.message : String(error)\n    }\n  }\n}\n\n/**\n * Generate query-types file content\n */\nasync function generateQueryTypesFile(config: CodeGenConfig): Promise<string> {\n  const { includeComments = true } = config.typeGenerationOptions\n  \n  // Read the source query types file\n  const { fileURLToPath } = await import('url')\n  const { dirname } = await import('path')\n  const currentFile = fileURLToPath(import.meta.url)\n  const currentDir = dirname(currentFile)\n  const sourceQueryTypesPath = join(currentDir, '..', 'query', 'types.ts')\n  let sourceContent: string\n  \n  try {\n    sourceContent = await fs.readFile(sourceQueryTypesPath, 'utf8')\n  } catch {\n    // Fallback content if source file is not available\n    sourceContent = generateFallbackQueryTypes()\n  }\n  \n  const lines: string[] = []\n  \n  if (includeComments) {\n    lines.push('/**')\n    lines.push(' * Query Types for Dataverse OData Operations')\n    lines.push(' * ')\n    lines.push(' * Auto-generated type definitions for type-safe Dataverse queries.')\n    lines.push(' * Provides full TypeScript support for filtering, selecting, expanding, and ordering.')\n    lines.push(' * ')\n    lines.push(` * @generated ${new Date().toISOString()}`)\n    lines.push(' */')\n    lines.push('')\n  }\n  \n  // Process the source content to make it suitable for the generated output\n  const processedContent = sourceContent\n    .replace(/^import .*$/gm, '') // Remove import statements\n    .replace(/^export \\{ .* \\}.*$/gm, '') // Remove export statements\n    .replace(/\\/\\*\\*[\\s\\S]*?\\*\\//g, '') // Remove existing JSDoc comments if not including comments\n    .replace(/^\\s*\\n/gm, '') // Remove empty lines\n    .trim()\n  \n  lines.push(processedContent)\n  \n  return lines.join('\\n')\n}\n\n/**\n * Generate fallback query types if source file is not available\n */\nfunction generateFallbackQueryTypes(): string {\n  return `// Basic OData query types for Dataverse operations\n// NOTE: Use entity-specific expand types instead of these generic types for full type safety\n\n// Base OData operators for different field types\nexport type StringOperators<T = string> = {\n  $eq?: T\n  $ne?: T\n  $in?: T[]\n  $nin?: T[]\n  $contains?: T\n  $startswith?: T\n  $endswith?: T\n  $like?: T\n  $null?: boolean\n  $notnull?: boolean\n}\n\nexport type NumberOperators<T = number> = {\n  $eq?: T\n  $ne?: T\n  $gt?: T\n  $gte?: T\n  $lt?: T\n  $lte?: T\n  $in?: T[]\n  $nin?: T[]\n  $null?: boolean\n  $notnull?: boolean\n}\n\nexport type BooleanOperators = {\n  $eq?: boolean\n  $ne?: boolean\n  $null?: boolean\n  $notnull?: boolean\n}\n\nexport type DateOperators = {\n  $eq?: Date | string\n  $ne?: Date | string\n  $gt?: Date | string\n  $gte?: Date | string\n  $lt?: Date | string\n  $lte?: Date | string\n  $in?: (Date | string)[]\n  $nin?: (Date | string)[]\n  $null?: boolean\n  $notnull?: boolean\n  // Dataverse-specific date functions\n  $today?: boolean\n  $yesterday?: boolean\n  $tomorrow?: boolean\n  $thisweek?: boolean\n  $thismonth?: boolean\n  $thisyear?: boolean\n  $lastweek?: boolean\n  $lastmonth?: boolean\n  $lastyear?: boolean\n  $nextweek?: boolean\n  $nextmonth?: boolean\n  $nextyear?: boolean\n  $lastxdays?: number\n  $nextxdays?: number\n  $lastxmonths?: number\n  $nextxmonths?: number\n  $lastxyears?: number\n  $nextxyears?: number\n}\n\nexport type LookupOperators = {\n  $eq?: string  // GUID\n  $ne?: string\n  $in?: string[]\n  $nin?: string[]\n  $null?: boolean\n  $notnull?: boolean\n}\n\n// Type mapping for different attribute types\nexport type FilterOperatorForType<T> = \n  T extends string ? StringOperators<T> | T :\n  T extends number ? NumberOperators<T> | T :\n  T extends boolean ? BooleanOperators | T :\n  T extends Date ? DateOperators | T :\n  T extends string | Date ? DateOperators | T :\n  T extends (infer U)[] ? FilterOperatorForType<U> | U[] :\n  StringOperators<T> | T\n\n// Filter type that maps entity properties to appropriate operators\nexport type ODataFilter<TEntity> = {\n  [K in keyof TEntity]?: FilterOperatorForType<TEntity[K]>\n} & {\n  $and?: ODataFilter<TEntity>[]\n  $or?: ODataFilter<TEntity>[]\n  $not?: ODataFilter<TEntity>\n}\n\nexport type ODataSelect<TEntity> = (keyof TEntity)[]\n\n// Generic fallback - entity-specific types should override this\nexport type ODataExpand<TMetadata = any> = \n  | string[]\n  | Record<string, {\n      $select?: string[]\n      $filter?: any\n      $orderby?: any\n      $top?: number\n      $skip?: number\n    }>\n\nexport type ODataOrderBy<TEntity> = {\n  [K in keyof TEntity]?: 'asc' | 'desc'\n} | string[]\n\nexport interface EntityListOptions<TEntity, TMetadata = any> {\n  $select?: ODataSelect<TEntity>\n  $expand?: ODataExpand<TMetadata>\n  $filter?: ODataFilter<TEntity>\n  $orderby?: ODataOrderBy<TEntity>\n  $top?: number\n  $skip?: number\n  $count?: boolean\n  $search?: string\n}\n\nexport interface EntityOptions<TEntity, TMetadata = any> {\n  $select?: ODataSelect<TEntity>\n  $expand?: ODataExpand<TMetadata>\n}\n\nexport interface ODataResponse<T> {\n  '@odata.context': string\n  '@odata.count'?: number\n  '@odata.nextLink'?: string\n  value: T[]\n}\n\nexport interface ODataSingleResponse<T> extends Omit<ODataResponse<T>, 'value'> {\n  value?: T\n}`\n}","import { promises as fs } from 'fs'\nimport { join, relative } from 'path'\nimport type { CodeGenConfig, GeneratedFileResult } from './index.js'\nimport { formatCode } from './formatter.js'\n\n/**\n * Generate barrel export index file\n */\nexport async function generateIndexFile(\n  successfulFiles: GeneratedFileResult[],\n  config: CodeGenConfig\n): Promise<GeneratedFileResult> {\n  try {\n    const lines: string[] = []\n    \n    // Add file header\n    lines.push('// Generated barrel exports')\n    lines.push(`// Generated: ${new Date().toISOString()}`)\n    lines.push(`// Files: ${successfulFiles.length}`)\n    lines.push('')\n\n    // Add exports for each successful file\n    for (const file of successfulFiles) {\n      // Get relative path from output directory\n      const relativePath = relative(config.outputDir, file.filePath)\n      const exportPath = relativePath.replace(/\\.(ts|d\\.ts)$/, '')\n      lines.push(`export * from './${exportPath.replaceAll('\\\\', '/')}'`)\n    }\n\n    const content = lines.join('\\n') + '\\n'\n    const formattedContent = config.prettier \n      ? await formatCode(content, true)\n      : content\n\n    const indexPath = join(config.outputDir, `index${config.fileExtension}`)\n    \n    await fs.writeFile(indexPath, formattedContent, 'utf8')\n\n    return {\n      filePath: indexPath,\n      content: formattedContent,\n      size: Buffer.byteLength(formattedContent, 'utf8'),\n      success: true\n    }\n\n  } catch (error) {\n    return {\n      filePath: join(config.outputDir, `index${config.fileExtension}`),\n      content: '',\n      size: 0,\n      success: false,\n      error: error instanceof Error ? error.message : String(error)\n    }\n  }\n}\n\n/**\n * Calculate and return final code generation results\n */\nexport function calculateGenerationResults(\n  files: GeneratedFileResult[],\n  indexFile: GeneratedFileResult | undefined,\n  startTime: number\n): {\n  files: GeneratedFileResult[]\n  indexFile?: GeneratedFileResult\n  totalFiles: number\n  successfulFiles: number\n  failedFiles: number\n  totalSize: number\n  duration: number\n} {\n  const duration = Date.now() - startTime\n  const successfulFiles = files.filter(r => r.success).length\n  const failedFiles = files.length - successfulFiles\n  const totalSize = files.reduce((sum, r) => sum + r.size, 0)\n\n  return {\n    files,\n    indexFile,\n    totalFiles: files.length,\n    successfulFiles,\n    failedFiles,\n    totalSize,\n    duration\n  }\n}","import type { ProcessedEntityMetadata, ProcessedOptionSet } from '../processors/index.js'\nimport type { CodeGenConfig, GeneratedFileResult, CodeGenResult } from './index.js'\nimport { \n  writeGlobalOptionSetDeclaration, \n  writeEntityHooksFile, \n  writeEntityQueryBuildersFile, \n  writeEntityTypeDeclaration,\n  writeQueryTypesFile \n} from './file-writer.js'\nimport { generateIndexFile, calculateGenerationResults } from './result-tracking.js'\nimport { initializeFormattingProgress, completeFormattingProgress } from './formatter.js'\n\n/**\n * Default code generation configuration\n */\nexport const DEFAULT_CODEGEN_CONFIG: CodeGenConfig = {\n  outputDir: './generated',\n  fileExtension: '.ts',\n  indexFile: true,\n  prettier: true,\n  eslint: false,\n  overwrite: true,\n  generateHooks: false, // Default disabled - most users don't need React Query hooks\n  relatedEntitiesDir: 'related',\n  primaryEntities: [],\n  typeGenerationOptions: {\n    includeComments: true,\n    includeValidation: true,\n    includeMetadata: true,\n    useExactTypes: true\n  }\n}\n\n/**\n * Generate TypeScript declarations for multiple entities with optional related entities\n */\nexport async function generateMultipleEntityTypes(\n  entities: ProcessedEntityMetadata[],\n  config: Partial<CodeGenConfig> = {},\n  relatedEntities: ProcessedEntityMetadata[] = [],\n  onProgress?: (current: number, total: number, item?: string) => void\n): Promise<CodeGenResult> {\n  const finalConfig = { ...DEFAULT_CODEGEN_CONFIG, ...config }\n  const startTime = Date.now()\n  \n  const results: GeneratedFileResult[] = []\n  \n  // Combine primary and related entities for processing\n  const allEntities = [...entities, ...relatedEntities]\n  \n  console.log(`Generating ${entities.length} primary entity files${relatedEntities.length > 0 ? ` + ${relatedEntities.length} related entity files` : ''}...`)\n  \n  // Collect all unique global option sets from all entities\n  const globalOptionSetsMap = new Map<string, ProcessedOptionSet>()\n  \n  for (const entity of allEntities) {\n    for (const optionSet of entity.optionSets) {\n      if (optionSet.isGlobal && !globalOptionSetsMap.has(optionSet.name)) {\n        globalOptionSetsMap.set(optionSet.name, optionSet)\n      }\n    }\n  }\n  \n  // Setup progress tracking for generation\n  const totalExpectedFiles = allEntities.length + (finalConfig.generateHooks ? entities.length * 2 : 0) + globalOptionSetsMap.size + (finalConfig.generateHooks ? 1 : 0) + (finalConfig.indexFile ? 1 : 0)\n  let completedFiles = 0\n  \n  // Initialize formatting progress if prettier is enabled\n  if (finalConfig.prettier) {\n    initializeFormattingProgress(totalExpectedFiles, onProgress)\n  }\n  \n  const globalOptionSets = Array.from(globalOptionSetsMap.values())\n  \n  // Generate global option set files\n  if (globalOptionSets.length > 0) {\n    const globalOptionSetPromises = globalOptionSets.map(optionSet => \n      writeGlobalOptionSetDeclaration(optionSet, finalConfig)\n    )\n    \n    const globalOptionSetResults = await Promise.all(globalOptionSetPromises)\n    results.push(...globalOptionSetResults)\n  }\n  \n  // Only generate hooks for primary entities requested by the user\n  // Related entities get type definitions but not hooks/queries\n  const entitiesNeedingHooks = new Set<ProcessedEntityMetadata>()\n  \n  if (finalConfig.generateHooks) {\n    // Only add primary entities - no hooks for related entities\n    entities.forEach(entity => entitiesNeedingHooks.add(entity))\n    \n    console.log(`Generating ${entities.length} hooks for primary entities only...`)\n  }\n  \n  // Process entities in batches to avoid overwhelming the system\n  const batchSize = 8  // Efficient batch size - each entity makes ~6 API calls, so 8*6=48 concurrent requests max\n  const totalBatches = Math.ceil(allEntities.length / batchSize)\n  \n  for (let batchIndex = 0; batchIndex < totalBatches; batchIndex++) {\n    const i = batchIndex * batchSize\n    const batch = allEntities.slice(i, i + batchSize)\n    \n    // Generate type declarations\n    const typePromises = batch.map(entity => \n      writeEntityTypeDeclaration(entity, finalConfig, allEntities)\n    )\n    \n    // Generate hooks for entities that need them (primary + related entities referenced in hooks)\n    const entitiesNeedingHooksInBatch = batch.filter(entity => entitiesNeedingHooks.has(entity))\n    const hookPromises = finalConfig.generateHooks \n      ? entitiesNeedingHooksInBatch.map(entity => writeEntityHooksFile(entity, finalConfig))\n      : []\n    \n    // Generate query builders for entities that have hooks\n    const queryBuilderPromises = finalConfig.generateHooks \n      ? entitiesNeedingHooksInBatch.map(entity => writeEntityQueryBuildersFile(entity, finalConfig))\n      : []\n    \n    const batchResults = await Promise.all([...typePromises, ...hookPromises, ...queryBuilderPromises])\n    results.push(...batchResults)\n    \n    // Update progress bar with current status\n    completedFiles = results.filter(r => r.success).length\n    if (onProgress && !finalConfig.prettier) {\n      // Show progress for file generation (formatting will have its own progress)\n      const currentEntity = batch[batch.length - 1]?.logicalName || ''\n      onProgress(completedFiles, totalExpectedFiles, currentEntity)\n    }\n    \n    // Brief delay between batches to respect API rate limits\n    if (batchIndex < totalBatches - 1) {\n      await new Promise(resolve => setTimeout(resolve, 100))  // Moderate delay for API courtesy\n    }\n  }\n\n  // Generate query-types file if hooks are enabled\n  if (finalConfig.generateHooks) {\n    const queryTypesResult = await writeQueryTypesFile(finalConfig)\n    results.push(queryTypesResult)\n  }\n\n  // Generate index file if requested\n  let indexFile: GeneratedFileResult | undefined\n  if (finalConfig.indexFile) {\n    // Only include entity files in the main index, not global option sets\n    const entityFiles = results.filter(r => r.success && !r.filePath.includes('global-choices'))\n    indexFile = await generateIndexFile(entityFiles, finalConfig)\n  }\n\n  // Complete formatting progress if it was enabled\n  if (finalConfig.prettier) {\n    completeFormattingProgress()\n  }\n\n  return calculateGenerationResults(results, indexFile, startTime)\n}","import { promises as fs } from 'fs'\nimport { resolve } from 'path'\nimport type { TypeGenerationOptions } from '../generators/index.js'\nimport type { CodeGenConfig } from '../codegen/index.js'\n\n/**\n * Dataverse type generator configuration\n */\nexport interface DataverseTypeGenConfig {\n  /** Dataverse instance URL (optional, can use environment variables) */\n  dataverseUrl?: string\n  \n  /** Output directory for generated files */\n  outputDir: string\n  \n  /** File extension for generated files */\n  fileExtension: '.ts' | '.d.ts'\n  \n  /** Specific entity logical names to generate */\n  entities?: string[]\n  \n  /** Publisher prefix to filter entities */\n  publisher?: string\n  \n  /** Solution name (unique name or friendly name) to filter entities by actual solution membership */\n  solution?: string\n  \n  /** Directory name for related entities (default: \"related\") */\n  relatedEntitiesDir?: string\n  \n  /** Generate ALL entities from Dataverse for complete type safety */\n  fullMetadata?: boolean\n  \n  /** Authentication configuration */\n  auth?: {\n    clientId?: string\n    tenantId?: string\n    scopes?: string[]\n  }\n  \n  \n  /** Type generation options */\n  typeGeneration: TypeGenerationOptions & {\n    /** Entity prefix for generated interfaces */\n    entityPrefix?: string\n    /** Include barrel export index file */\n    indexFile?: boolean\n    /** Generate React Query hooks alongside types */\n    generateHooks?: boolean\n    /** Exclude auxiliary attributes (those with AttributeOf field) for cleaner interfaces */\n    excludeAuxiliaryAttributes?: boolean\n  }\n  \n  \n  \n}\n\n/**\n * Default configuration\n */\nexport const DEFAULT_CONFIG: DataverseTypeGenConfig = {\n  outputDir: './generated',\n  fileExtension: '.ts',\n  relatedEntitiesDir: 'related', // Default subdirectory for related entities\n  fullMetadata: false, // Default to false for performance\n  typeGeneration: {\n    includeComments: true,\n    includeValidation: true,\n    includeMetadata: true,\n    useExactTypes: true,\n    includeLookupValues: true,\n    includeBindingTypes: true,\n    indexFile: true,\n    generateHooks: false, // Default disabled - most users don't need React Query hooks\n    excludeAuxiliaryAttributes: true // Default to true for cleaner interfaces\n  }\n}\n\n/**\n * Configuration file names to search for\n */\nconst CONFIG_FILE_NAMES = [\n  'dataverse.config.ts',\n  'dataverse.config.js',\n  'dataverse.config.mjs',\n  'dataverse.config.json',\n  '.dataverserc.json',\n  '.dataverserc',\n  'dataverse.json'\n]\n\n/**\n * Load configuration from file system\n */\nexport async function loadConfiguration(\n  configPath?: string\n): Promise<DataverseTypeGenConfig> {\n  let config = { ...DEFAULT_CONFIG }\n  \n  // Try to load configuration file\n  const loadedConfig = await loadConfigFile(configPath)\n  if (loadedConfig) {\n    config = mergeConfigurations(config, loadedConfig)\n  }\n  \n  \n  // Apply environment variable overrides\n  config = applyEnvironmentVariables(config)\n  \n  \n  return config\n}\n\n/**\n * Load configuration from file\n */\nasync function loadConfigFile(configPath?: string): Promise<Partial<DataverseTypeGenConfig> | null> {\n  // If specific path provided, try only that\n  if (configPath) {\n    try {\n      return await loadSingleConfigFile(resolve(configPath))\n    } catch (error) {\n      throw new Error(`Failed to load config file at ${configPath}: ${error instanceof Error ? error.message : String(error)}`)\n    }\n  }\n  \n  // Search for config files in order of preference\n  for (const fileName of CONFIG_FILE_NAMES) {\n    try {\n      const fullPath = resolve(fileName)\n      const config = await loadSingleConfigFile(fullPath)\n      if (config) {\n        // Configuration loaded successfully\n        return config\n      }\n    } catch {\n      // File doesn't exist or can't be loaded, continue to next\n    }\n  }\n  \n  return null\n}\n\n/**\n * Load single configuration file\n */\nasync function loadSingleConfigFile(filePath: string): Promise<Partial<DataverseTypeGenConfig> | null> {\n  try {\n    await fs.access(filePath)\n  } catch {\n    return null // File doesn't exist\n  }\n  \n  if (filePath.endsWith('.json')) {\n    const content = await fs.readFile(filePath, 'utf8')\n    return JSON.parse(content)\n  }\n  \n  if (filePath.endsWith('.js') || filePath.endsWith('.mjs') || filePath.endsWith('.ts')) {\n    // For JS/TS files, we would need dynamic import\n    // For now, show a helpful message\n    console.warn(`⚠️ JavaScript/TypeScript config files (${filePath}) are not yet supported. Please use JSON format.`)\n    return null\n  }\n  \n  // Try to parse as JSON for .dataverserc files\n  try {\n    const content = await fs.readFile(filePath, 'utf8')\n    return JSON.parse(content)\n  } catch {\n    return null\n  }\n}\n\n/**\n * Merge two configuration objects deeply\n */\nfunction mergeConfigurations(\n  base: DataverseTypeGenConfig, \n  override: Partial<DataverseTypeGenConfig>\n): DataverseTypeGenConfig {\n  const result = { ...base }\n  \n  for (const [key, value] of Object.entries(override)) {\n    if (value === null || value === undefined) {\n      continue\n    }\n    \n    if (typeof value === 'object' && !Array.isArray(value) && typeof result[key as keyof DataverseTypeGenConfig] === 'object') {\n      // Deep merge objects\n      (result as Record<string, unknown>)[key] = {\n        ...(result[key as keyof DataverseTypeGenConfig] as Record<string, unknown>),\n        ...value\n      }\n    } else {\n      // Direct assignment for primitives and arrays\n      (result as Record<string, unknown>)[key] = value\n    }\n  }\n  \n  return result\n}\n\n/**\n * Apply environment variable overrides\n */\nfunction applyEnvironmentVariables(config: DataverseTypeGenConfig): DataverseTypeGenConfig {\n  const result = { ...config }\n  \n  // Dataverse URL\n  if (process.env.DATAVERSE_INSTANCE) {\n    result.dataverseUrl = process.env.DATAVERSE_INSTANCE\n  }\n  \n  // Output directory\n  if (process.env.DATAVERSE_OUTPUT_DIR) {\n    result.outputDir = process.env.DATAVERSE_OUTPUT_DIR\n  }\n  \n  // File extension\n  if (process.env.DATAVERSE_FILE_EXTENSION) {\n    const ext = process.env.DATAVERSE_FILE_EXTENSION\n    if (ext === '.ts' || ext === '.d.ts') {\n      result.fileExtension = ext\n    }\n  }\n  \n  // Publisher prefix\n  if (process.env.DATAVERSE_PUBLISHER) {\n    result.publisher = process.env.DATAVERSE_PUBLISHER\n  }\n  \n  // Solution name\n  if (process.env.DATAVERSE_SOLUTION) {\n    result.solution = process.env.DATAVERSE_SOLUTION\n  }\n  \n  // Azure authentication\n  if (process.env.VITE_AZURE_CLIENT_ID || process.env.AZURE_CLIENT_ID) {\n    result.auth = {\n      ...result.auth,\n      clientId: process.env.VITE_AZURE_CLIENT_ID || process.env.AZURE_CLIENT_ID\n    }\n  }\n  \n  if (process.env.VITE_AZURE_TENANT_ID || process.env.AZURE_TENANT_ID) {\n    result.auth = {\n      ...result.auth,\n      tenantId: process.env.VITE_AZURE_TENANT_ID || process.env.AZURE_TENANT_ID\n    }\n  }\n  \n  \n  return result\n}\n\n\n/**\n * Validate configuration\n */\nexport function validateConfiguration(config: DataverseTypeGenConfig): {\n  isValid: boolean\n  errors: string[]\n  warnings: string[]\n} {\n  const errors: string[] = []\n  const warnings: string[] = []\n  \n  // Required fields\n  if (!config.outputDir) {\n    errors.push('outputDir is required')\n  }\n  \n  if (!config.fileExtension || (config.fileExtension !== '.ts' && config.fileExtension !== '.d.ts')) {\n    errors.push('fileExtension must be \".ts\" or \".d.ts\"')\n  }\n  \n  // Dataverse connection\n  if (!config.dataverseUrl && !process.env.DATAVERSE_INSTANCE) {\n    errors.push('Dataverse URL must be configured via config.dataverseUrl or environment variables')\n  }\n  \n  // Entity selection\n  if (!config.entities && !config.publisher && !config.solution) {\n    warnings.push('No entities, publisher, or solution specified - will generate for all custom entities')\n  }\n  \n  // Publisher and solution cannot both be specified\n  if (config.publisher && config.solution) {\n    errors.push('Cannot specify both publisher and solution - choose one discovery method')\n  }\n  \n  // Output directory validation\n  if (config.outputDir && config.outputDir.includes('..')) {\n    warnings.push('outputDir contains relative path segments - ensure this is intentional')\n  }\n  \n  return {\n    isValid: errors.length === 0,\n    errors,\n    warnings\n  }\n}\n\n/**\n * Convert DataverseTypeGenConfig to CodeGenConfig\n */\nexport function toCodeGenConfig(config: DataverseTypeGenConfig): CodeGenConfig {\n  return {\n    outputDir: config.outputDir,\n    fileExtension: config.fileExtension,\n    indexFile: config.typeGeneration.indexFile ?? true,\n    prettier: true, // Default to prettier\n    eslint: false, // Default to no eslint\n    overwrite: true, // Default to overwrite\n    generateHooks: config.typeGeneration.generateHooks ?? false,\n    relatedEntitiesDir: config.relatedEntitiesDir,\n    primaryEntities: config.entities || [],\n    typeGenerationOptions: {\n      entityPrefix: config.typeGeneration.entityPrefix,\n      includeComments: config.typeGeneration.includeComments,\n      includeValidation: config.typeGeneration.includeValidation,\n      includeMetadata: config.typeGeneration.includeMetadata,\n      useExactTypes: config.typeGeneration.useExactTypes,\n      includeLookupValues: config.typeGeneration.includeLookupValues,\n      includeBindingTypes: config.typeGeneration.includeBindingTypes,\n      excludeAuxiliaryAttributes: config.typeGeneration.excludeAuxiliaryAttributes,\n      fullMetadata: config.fullMetadata,\n      primaryEntities: config.entities || [],\n      relatedEntitiesDir: config.relatedEntitiesDir,\n    }\n  }\n}\n\n/**\n * Save configuration to file\n */\nexport async function saveConfiguration(\n  config: DataverseTypeGenConfig,\n  filePath: string = 'dataverse.config.json'\n): Promise<void> {\n  const content = JSON.stringify(config, null, 2)\n  await fs.writeFile(filePath, content, 'utf8')\n}\n\n/**\n * Get current environment\n */\nexport function getCurrentEnvironment(): string {\n  return process.env.NODE_ENV || process.env.DATAVERSE_ENV || 'development'\n}\n\n/**\n * Create sample configuration\n */\nexport function createSampleConfig(): DataverseTypeGenConfig {\n  return {\n    ...DEFAULT_CONFIG,\n    entities: ['account', 'contact', 'opportunity'],\n    publisher: 'your_publisher_prefix',\n    solution: 'your_solution_name',\n    typeGeneration: {\n      ...DEFAULT_CONFIG.typeGeneration,\n      entityPrefix: 'CRM',\n      includeComments: true,\n      includeMetadata: true\n    }\n  }\n}\n\n","/**\n * Simple CLI logging\n */\nexport class SimpleLogger {\n  private verbose: boolean\n  private debug: boolean\n  private quiet: boolean\n  private outputFormat: 'text' | 'json'\n  private jsonOutput: Array<{\n    level: string\n    message?: string\n    timestamp: string\n    [key: string]: unknown\n  }> = []\n\n  constructor(options: { verbose?: boolean; debug?: boolean; quiet?: boolean; outputFormat?: 'text' | 'json' } = {}) {\n    this.verbose = options.verbose || false\n    this.debug = options.debug || false\n    this.quiet = options.quiet || false\n    this.outputFormat = options.outputFormat || 'text'\n    \n  }\n\n  info(message: string): void {\n    if (this.quiet && this.outputFormat === 'text') return\n    if (this.outputFormat === 'json') {\n      this.jsonOutput.push({ level: 'info', message, timestamp: new Date().toISOString() })\n    } else {\n      console.log(message)\n    }\n  }\n\n  success(message: string): void {\n    if (this.quiet && this.outputFormat === 'text') return\n    if (this.outputFormat === 'json') {\n      this.jsonOutput.push({ level: 'success', message, timestamp: new Date().toISOString() })\n    } else {\n      console.log(`✅ ${message}`)\n    }\n  }\n\n  warning(message: string): void {\n    if (this.outputFormat === 'json') {\n      this.jsonOutput.push({ level: 'warning', message, timestamp: new Date().toISOString() })\n    } else {\n      console.log(`⚠️ ${message}`)\n    }\n  }\n\n  error(message: string, actionableHint?: string): void {\n    const fullMessage = actionableHint ? `${message}\\n💡 ${actionableHint}` : message\n    if (this.outputFormat === 'json') {\n      this.jsonOutput.push({ level: 'error', message: fullMessage, timestamp: new Date().toISOString() })\n    } else {\n      console.error(`❌ ${fullMessage}`)\n    }\n  }\n\n  debugLog(message: string): void {\n    if (this.debug) {\n      if (this.outputFormat === 'json') {\n        this.jsonOutput.push({ level: 'debug', message, timestamp: new Date().toISOString() })\n      } else {\n        console.log(`🔍 ${message}`)\n      }\n    }\n  }\n\n  verboseDebug(message: string): void {\n    if (this.verbose) {\n      this.debugLog(message)\n    }\n  }\n\n  getJsonOutput(): Array<{ level: string; message?: string; timestamp: string; [key: string]: unknown }> {\n    return this.jsonOutput\n  }\n\n  outputJson(): void {\n    if (this.outputFormat === 'json') {\n      console.log(JSON.stringify(this.jsonOutput, null, 2))\n    }\n  }\n\n  progress(current: number, total: number, item?: string): void {\n    if (this.quiet && this.outputFormat === 'text') return\n    \n    const percentage = Math.round((current / total) * 100)\n    const itemText = item ? ` - ${item}` : ''\n    const progressBar = this.createProgressBar(percentage)\n    \n    if (this.outputFormat === 'json') {\n      this.jsonOutput.push({\n        level: 'progress',\n        current,\n        total,\n        percentage,\n        item,\n        timestamp: new Date().toISOString()\n      })\n    } else {\n      console.log(`${progressBar} ${current}/${total} (${percentage}%)${itemText}`)\n    }\n  }\n  \n  private createProgressBar(percentage: number): string {\n    const width = 20\n    const filled = Math.round((percentage / 100) * width)\n    const empty = width - filled\n    return `[${'\\u2588'.repeat(filled)}${'\\u2591'.repeat(empty)}]`\n  }\n}","import { promises as fs } from 'fs'\nimport { resolve } from 'path'\nimport { SimpleLogger } from '../output/formatters.js'\nimport type { CLIConfig } from '../config/cli-config.js'\n\n/**\n * Validate Dataverse URL format\n */\nexport function validateDataverseUrl(url: string): { isValid: boolean; message?: string } {\n  if (!url) {\n    return { isValid: false, message: 'URL cannot be empty' }\n  }\n\n  try {\n    const parsedUrl = new URL(url)\n    \n    // Must be HTTPS\n    if (parsedUrl.protocol !== 'https:') {\n      return { isValid: false, message: 'URL must use HTTPS protocol' }\n    }\n\n    // Must be a Dataverse domain pattern\n    const hostname = parsedUrl.hostname.toLowerCase()\n    const validPatterns = [\n      /\\.crm\\d*\\.dynamics\\.com$/,\n      /\\.crm\\d*\\.microsoftdynamics\\.com$/,\n      /\\.crm\\d*\\.dynamics\\.cn$/,\n      /\\.crm\\d*\\.microsoftdynamics\\.de$/,\n      /\\.crm\\d*\\.microsoftdynamics\\.us$/\n    ]\n\n    const isValidDomain = validPatterns.some(pattern => pattern.test(hostname))\n    if (!isValidDomain) {\n      return { \n        isValid: false, \n        message: 'URL must be a valid Dataverse instance (e.g., https://yourorg.crm.dynamics.com)' \n      }\n    }\n\n    return { isValid: true }\n  } catch {\n    return { isValid: false, message: 'Invalid URL format' }\n  }\n}\n\n/**\n * Validate CLI inputs before execution\n */\nexport async function validateInputs(config: CLIConfig, logger: SimpleLogger): Promise<void> {\n  logger.debugLog('Validating CLI inputs...')\n  \n  // Check if output directory parent exists and is writable\n  try {\n    const parentDir = resolve(config.outputDir, '..')\n    await fs.access(parentDir, fs.constants.W_OK)\n  } catch {\n    throw new Error(`Output directory parent '${resolve(config.outputDir, '..')}' is not writable or doesn't exist`)\n  }\n  \n  // Validate entity names format if provided\n  if (config.entities && Array.isArray(config.entities)) {\n    for (const entity of config.entities) {\n      if (typeof entity === 'string' && !/^[a-z_][a-z0-9_]*$/i.test(entity)) {\n        throw new Error(`Invalid entity name '${entity}'. Entity names should contain only letters, numbers, and underscores.`)\n      }\n    }\n  }\n  \n  // Validate file extension\n  if (config.fileExtension !== '.ts' && config.fileExtension !== '.d.ts') {\n    throw new Error(`Invalid file extension '${config.fileExtension}'. Must be '.ts' or '.d.ts'`)\n  }\n  \n  logger.debugLog('Input validation completed successfully')\n}","import { createInterface } from 'readline'\nimport { SimpleLogger } from '../output/formatters.js'\nimport { validateDataverseUrl } from '../validation/url-validator.js'\n\n/**\n * Prompt user for input\n */\nexport async function promptUser(question: string): Promise<string> {\n  const rl = createInterface({\n    input: process.stdin,\n    output: process.stdout\n  })\n\n  return new Promise((resolve) => {\n    rl.question(question, (answer) => {\n      rl.close()\n      resolve(answer.trim())\n    })\n  })\n}\n\n/**\n * Interactively prompt for Dataverse URL\n */\nexport async function promptForDataverseUrl(logger: SimpleLogger): Promise<string> {\n  logger.info('Dataverse URL is required but not configured.')\n  logger.info('You can set it via:')\n  logger.info('  • Environment variable: DATAVERSE_INSTANCE=https://yourorg.crm.dynamics.com')\n  logger.info('  • Command line option: --dataverse-url https://yourorg.crm.dynamics.com')\n  logger.info('  • Configuration file')\n  console.log()\n\n  let url = ''\n  let attempts = 0\n  const maxAttempts = 3\n\n  while (attempts < maxAttempts) {\n    url = await promptUser('Please enter your Dataverse instance URL: ')\n    \n    if (url.toLowerCase() === 'exit' || url.toLowerCase() === 'quit') {\n      logger.info('Cancelled by user')\n      process.exit(0)\n    }\n\n    const validation = validateDataverseUrl(url)\n    if (validation.isValid) {\n      logger.success(`Valid Dataverse URL: ${url}`)\n      return url\n    }\n\n    attempts++\n    logger.error(`Invalid URL: ${validation.message}`)\n    \n    if (attempts < maxAttempts) {\n      logger.info(`Please try again (${maxAttempts - attempts} attempts remaining, or type 'exit' to cancel)`)\n    }\n  }\n\n  logger.error('Too many invalid attempts. Please check your Dataverse URL and try again.')\n  process.exit(1)\n}\n\n/**\n * Confirm full metadata operation with user\n */\nexport async function confirmFullMetadata(logger: SimpleLogger): Promise<boolean> {\n  logger.warning('Full metadata mode will fetch ALL entities from Dataverse (800+ entities)')\n  logger.info('This operation will:')\n  logger.info('  • Take several minutes to complete')\n  logger.info('  • Make thousands of API requests (2,000-5,000+)')\n  logger.info('  • Generate types for system and custom entities')\n  logger.info('  • Only needed for complete cross-entity type safety')\n  console.log()\n  logger.info('Most users should use specific entities instead:')\n  logger.info('  --entities account,contact,opportunity')\n  logger.info('  --publisher your_prefix')\n  logger.info('  --solution \"Your Solution\"')\n  console.log()\n  \n  const answer = await promptUser('Continue with full metadata generation? (y/N): ')\n  \n  const confirmed = answer.toLowerCase() === 'y' || answer.toLowerCase() === 'yes'\n  if (!confirmed) {\n    logger.info('Operation cancelled. Use specific entities for faster generation.')\n    return false\n  }\n  \n  return true\n}","import type { DataverseTypeGenConfig } from '../../config/index.js'\n\n/**\n * CLI configuration interface\n */\nexport interface CLIConfig {\n  dataverseUrl?: string\n  outputDir: string\n  entities?: string[] | string\n  publisher?: string\n  solution?: string\n  fileExtension: '.ts' | '.d.ts'\n  includeComments: boolean\n  includeMetadata: boolean\n  includeValidation: boolean\n  fullMetadata: boolean\n  generateHooks: boolean\n  overwrite: boolean\n  verbose: boolean\n  debug: boolean\n  quiet: boolean\n  dryRun: boolean\n  outputFormat: 'text' | 'json'\n  config?: string\n}\n\n/**\n * Default CLI configuration\n */\nexport const DEFAULT_CLI_CONFIG: CLIConfig = {\n  outputDir: './generated',\n  fileExtension: '.ts',\n  includeComments: true,\n  includeMetadata: true,\n  includeValidation: true,\n  fullMetadata: false, // Default to false for performance\n  generateHooks: false, // Default to false - most users don't need React Query hooks\n  overwrite: true,\n  verbose: false,\n  debug: false,\n  quiet: false,\n  dryRun: false,\n  outputFormat: 'text'\n}\n\n/**\n * Convert DataverseTypeGenConfig to CLI-compatible format\n */\nexport function convertToCliConfig(config: DataverseTypeGenConfig): Partial<CLIConfig> {\n  return {\n    dataverseUrl: config.dataverseUrl,\n    outputDir: config.outputDir,\n    entities: config.entities,\n    publisher: config.publisher,\n    solution: config.solution,\n    fileExtension: config.fileExtension,\n    includeComments: config.typeGeneration.includeComments ?? true,\n    includeMetadata: config.typeGeneration.includeMetadata ?? true,\n    includeValidation: config.typeGeneration.includeValidation ?? true,\n    fullMetadata: config.fullMetadata ?? false,\n    generateHooks: config.typeGeneration.generateHooks ?? false,\n    overwrite: true, // Always overwrite for CLI\n    verbose: false,\n    debug: false,\n    quiet: false,\n    dryRun: false,\n    outputFormat: 'text'\n  }\n}","import chalk from 'chalk'\nimport { \n  fetchAllEntities,\n  fetchEntityMetadata,\n  type ProgressCallback\n} from '../../client/index.js'\nimport { processEntityMetadata } from '../../processors/index.js'\nimport { generateMultipleEntityTypes } from '../../codegen/index.js'\nimport type { DataverseTypeGenConfig } from '../../config/index.js'\n\ninterface Entity {\n  logicalName: string\n  displayName: string\n  schemaName: string\n}\n\nexport async function runSimpleInteractiveGenerate(config: DataverseTypeGenConfig): Promise<boolean> {\n  try {\n    console.log(chalk.blue.bold('🚀 Interactive Dataverse Type Generator'))\n    console.log('')\n    \n    // Step 1: Load entities\n    console.log(chalk.cyan('📋 Loading available entities...'))\n    const entityList = await fetchAllEntities()\n    const entities: Entity[] = entityList.map(e => ({\n      logicalName: e.LogicalName,\n      displayName: e.DisplayName?.UserLocalizedLabel?.Label || e.LogicalName,\n      schemaName: e.SchemaName\n    }))\n    \n    console.log(chalk.green(`✅ Found ${entities.length} entities`))\n    console.log('')\n    \n    // Step 2: Show sample entities\n    console.log(chalk.yellow('📝 Sample entities available:'))\n    entities.slice(0, 10).forEach((entity, index) => {\n      console.log(`  ${index + 1}. ${entity.displayName} (${entity.logicalName})`)\n    })\n    if (entities.length > 10) {\n      console.log(`  ... and ${entities.length - 10} more`)\n    }\n    console.log('')\n    \n    // For demo purposes, let's generate types for the first few custom entities\n    const customEntities = entities.filter(e => \n      e.logicalName.includes('_') && \n      !e.logicalName.startsWith('msdyn_') &&\n      !e.logicalName.startsWith('msft_')\n    ).slice(0, 3)\n    \n    if (customEntities.length === 0) {\n      console.log(chalk.yellow('⚠️  No custom entities found. Using first 3 system entities instead.'))\n      customEntities.push(...entities.slice(0, 3))\n    }\n    \n    console.log(chalk.blue('🎯 Generating types for these entities:'))\n    customEntities.forEach(entity => {\n      console.log(`  • ${entity.displayName} (${entity.logicalName})`)\n    })\n    console.log('')\n    \n    // Step 3: Fetch metadata with progress\n    console.log(chalk.cyan('📡 Fetching entity metadata...'))\n    let current = 0\n    const total = customEntities.length\n    \n    const progressCallback: ProgressCallback = (curr, tot) => {\n      current = curr\n      const percentage = Math.round((curr / tot) * 100)\n      const bar = '█'.repeat(Math.floor(percentage / 5)) + '░'.repeat(20 - Math.floor(percentage / 5))\n      process.stdout.write(`\\r  [${bar}] ${percentage}% (${curr}/${tot})`)\n    }\n    \n    const metadataResults = []\n    for (const entity of customEntities) {\n      try {\n        const metadata = await fetchEntityMetadata(entity.logicalName, { progressCallback })\n        if (metadata) {\n          metadataResults.push(metadata)\n        }\n        current++\n        progressCallback(current, total)\n      } catch (error) {\n        console.log(chalk.red(`\\n❌ Failed to fetch ${entity.logicalName}: ${error instanceof Error ? error.message : 'Unknown error'}`))\n      }\n    }\n    \n    console.log('\\n' + chalk.green(`✅ Fetched metadata for ${metadataResults.length} entities`))\n    console.log('')\n    \n    // Step 4: Process metadata\n    console.log(chalk.cyan('⚙️  Processing metadata...'))\n    const processedMetadata = metadataResults.map(result => processEntityMetadata(result))\n    console.log(chalk.green(`✅ Processed ${processedMetadata.length} entities`))\n    console.log('')\n    \n    // Step 5: Generate TypeScript types\n    console.log(chalk.cyan('🔧 Generating TypeScript types...'))\n    await generateMultipleEntityTypes(processedMetadata, config)\n    console.log(chalk.green('✅ TypeScript types generated successfully!'))\n    console.log('')\n    \n    // Step 6: Summary\n    console.log(chalk.green.bold('🎉 Generation Complete!'))\n    console.log(chalk.gray(`Generated types for ${processedMetadata.length} entities:`))\n    processedMetadata.forEach(entity => {\n      console.log(chalk.gray(`  • ${entity.displayName || entity.logicalName}`))\n    })\n    console.log('')\n    console.log(chalk.blue(`📁 Files generated in: ${config.outputDir || './generated'}`))\n    \n    return true\n    \n  } catch (error) {\n    console.log('')\n    console.log(chalk.red.bold('❌ Generation failed!'))\n    console.log(chalk.red(error instanceof Error ? error.message : 'Unknown error'))\n    return false\n  }\n}","import { \n  fetchEntityMetadata,\n  fetchMultipleEntities,\n  fetchPublisherEntities,\n  fetchSolutionEntities,\n  fetchAllEntities,\n  fetchAllEntityMetadata,\n  type ProgressCallback\n} from '../../client/index.js'\nimport { processEntityMetadata, type ProcessedEntityMetadata } from '../../processors/index.js'\nimport { \n  generateMultipleEntityTypes,\n  type CodeGenConfig \n} from '../../codegen/index.js'\nimport { \n  loadConfiguration,\n  toCodeGenConfig,\n  DEFAULT_CONFIG,\n  type DataverseTypeGenConfig \n} from '../../config/index.js'\nimport { SimpleLogger } from '../output/formatters.js'\nimport { validateInputs } from '../validation/url-validator.js'\nimport { promptForDataverseUrl, confirmFullMetadata } from '../prompts/user-prompts.js'\nimport { DEFAULT_CLI_CONFIG, convertToCliConfig, type CLIConfig } from '../config/cli-config.js'\nimport { globalRequestQueue } from '../../client/concurrent-queue.js'\nimport { runSimpleInteractiveGenerate } from '../interactive/simple-interactive.js'\n\n/**\n * Generate command implementation\n */\nexport async function generateCommand(options: Record<string, unknown>): Promise<void> {\n  const commandStartTime = Date.now()\n  const loggerOptions = {\n    verbose: Boolean(options.verbose),\n    debug: Boolean(options.debug),\n    quiet: Boolean(options.quiet),\n    outputFormat: (options.outputFormat as 'text' | 'json') || 'text'\n  }\n  const logger = new SimpleLogger(loggerOptions)\n  \n  try {\n    // Check for interactive mode\n    if (options.interactive) {\n      logger.info('Starting interactive Dataverse type generation...')\n      \n      // Load minimal config for interactive mode\n      const configFromFile = options.config ? \n        await loadConfiguration(options.config as string) : \n        DEFAULT_CONFIG\n        \n      const success = await runSimpleInteractiveGenerate(configFromFile)\n      if (!success) {\n        process.exit(1)\n      }\n      return\n    }\n    \n    logger.info('Starting Dataverse type generation...')\n    \n    if (options.dryRun) {\n      logger.info('Running in dry-run mode - no files will be generated')\n    }\n    \n    // Load configuration using the proper config system (unless --no-config-file is specified)\n    const skipConfigFile = options.configFile === false\n    if (skipConfigFile) {\n      logger.debugLog('Skipping configuration file loading (--no-config-file)')\n    }\n    \n    let configFromFile: Partial<CLIConfig>\n    if (skipConfigFile) {\n      configFromFile = {} // Empty config when skipping config file - use only defaults + CLI\n    } else {\n      const loadedConfig = await loadConfiguration(options.config as string)\n      configFromFile = convertToCliConfig(loadedConfig)\n    }\n    \n    // Merge: defaults < config file < explicit CLI options  \n    // Only include CLI options that were explicitly provided (not undefined)\n    const explicitCliOptions: Partial<CLIConfig> = {}\n    Object.keys(options).forEach(key => {\n      const value = options[key]\n      if (value !== undefined) {\n        (explicitCliOptions as Record<string, unknown>)[key] = value\n      }\n    })\n    \n    const config = { ...DEFAULT_CLI_CONFIG, ...configFromFile, ...explicitCliOptions }\n    \n    // Parse CLI-specific options that need type conversion\n    if (options.fullMetadata !== undefined) {\n      config.fullMetadata = Boolean(options.fullMetadata)\n    }\n    \n    // Handle hook generation options (--hooks enables, --no-hooks disables)\n    if (options.hooks !== undefined) {\n      config.generateHooks = Boolean(options.hooks)\n    }\n    \n    // Validate inputs before proceeding\n    await validateInputs(config, logger)\n    \n    logger.debugLog(`Configuration: ${JSON.stringify(config, null, 2)}`)\n\n    // Validate and ensure Dataverse URL is available\n    if (!process.env.DATAVERSE_INSTANCE && !config.dataverseUrl) {\n      // Interactively prompt for URL\n      config.dataverseUrl = await promptForDataverseUrl(logger)\n    }\n    \n    // Set the environment variable for the auth system to use\n    if (config.dataverseUrl) {\n      process.env.DATAVERSE_INSTANCE = config.dataverseUrl\n      logger.debugLog(`Set DATAVERSE_INSTANCE to: ${config.dataverseUrl}`)\n    }\n\n    let entitiesToProcess: string[] = []\n\n    // Determine which entities to generate\n    if (config.entities?.length) {\n      // Handle both comma-separated strings and arrays\n      if (Array.isArray(config.entities)) {\n        entitiesToProcess = config.entities.flatMap(entity => \n          typeof entity === 'string' ? entity.split(',').map((e: string) => e.trim()).filter((e: string) => e) : [String(entity)]\n        )\n      } else if (typeof config.entities === 'string') {\n        entitiesToProcess = config.entities.split(',').map((e: string) => e.trim()).filter((e: string) => e)\n      } else {\n        entitiesToProcess = [String(config.entities)]\n      }\n      \n      if (entitiesToProcess.length > 0) {\n        logger.info(`Generating types for specified entities: ${entitiesToProcess.join(', ')}`)\n      }\n      \n    } else if (config.publisher) {\n      logger.info(`Discovering entities for publisher: ${config.publisher}`)\n      const publisherEntities = await fetchPublisherEntities(config.publisher)\n      entitiesToProcess = publisherEntities.map(e => e.LogicalName)\n      logger.success(`Found ${entitiesToProcess.length} entities for publisher ${config.publisher}`)\n      \n      if (config.debug && entitiesToProcess.length > 0) {\n        logger.debugLog(`Entities to process: ${entitiesToProcess.slice(0, 10).join(', ')}${entitiesToProcess.length > 10 ? '...' : ''}`)\n      }\n      \n    } else if (config.solution) {\n      logger.info(`Discovering entities for solution: ${config.solution}`)\n      const solutionEntities = await fetchSolutionEntities(config.solution)\n      entitiesToProcess = solutionEntities.map(e => e.LogicalName)\n      logger.success(`Found ${entitiesToProcess.length} entities for solution ${config.solution}`)\n      \n    } else {\n      logger.warning('No specific entities, publisher, or solution specified. Use --entities, --publisher, or --solution to limit scope.')\n      logger.info('Fetching all custom entities...')\n      const allEntities = await fetchAllEntities({ customOnly: true })\n      entitiesToProcess = allEntities.map(e => e.LogicalName)\n      logger.info(`Found ${entitiesToProcess.length} custom entities`)\n    }\n\n    if (entitiesToProcess.length === 0) {\n      logger.warning('No entities found to process')\n      \n      if (config.debug) {\n        logger.debugLog('Debugging entity discovery:')\n        if (config.entities) {\n          logger.debugLog(`  - Searched for specific entities: ${JSON.stringify(config.entities)}`)\n        } else if (config.publisher) {\n          logger.debugLog(`  - Searched for publisher prefix: '${config.publisher}'`)\n          logger.debugLog(`  - Expected entities to start with: '${config.publisher}_'`)\n        } else if (config.solution) {\n          logger.debugLog(`  - Searched for solution: '${config.solution}'`)\n        } else {\n          logger.debugLog('  - Searched for all custom entities')\n        }\n      }\n      \n      return\n    }\n\n    // Determine entity processing strategy\n    let processedEntities: ProcessedEntityMetadata[] = []\n    let allEntitiesForLookup: ProcessedEntityMetadata[] = []\n    \n    if (config.fullMetadata) {\n      // Confirm full metadata operation with user (unless in quiet mode)\n      if (!loggerOptions.quiet) {\n        const confirmed = await confirmFullMetadata(logger)\n        if (!confirmed) {\n          return\n        }\n      }\n      \n      // FULL METADATA APPROACH: Fetch ALL entities for complete type safety\n      logger.info(`🌍 Using full metadata mode - fetching ALL entities for complete type safety...`)\n      logger.warning(`This will take several minutes due to API rate limiting (respecting Dataverse limits)`)\n      \n      const allEntityMetadata = await fetchAllEntityMetadata({\n        includeAttributes: true,\n        includeRelationships: true,\n        onProgress: (current, total, entityName) => {\n          if (!loggerOptions.quiet) {\n            logger.progress(current, total, `Fetching: ${entityName}`)\n          }\n        }\n      })\n      \n      // Process all entities\n      logger.info(`Processing ${allEntityMetadata.length} entities...`)\n      for (let i = 0; i < allEntityMetadata.length; i++) {\n        const entityMetadata = allEntityMetadata[i]\n        if (!loggerOptions.quiet && (i % 25 === 0 || i === allEntityMetadata.length - 1)) { // Show progress every 25 entities\n          logger.progress(i + 1, allEntityMetadata.length, entityMetadata.LogicalName)\n        }\n        \n        try {\n          // Apply special configuration for systemuser to exclude system audit relationships\n          const processingOptions = entityMetadata.LogicalName === 'systemuser' \n            ? { excludeSystemAuditRelationships: true }\n            : undefined\n          \n          const processed = processEntityMetadata(entityMetadata, processingOptions)\n          allEntitiesForLookup.push(processed)\n          \n          // Keep track of primary entities (the ones user specifically requested)\n          if (entitiesToProcess.includes(entityMetadata.LogicalName)) {\n            processedEntities.push(processed)\n          }\n          \n        } catch (error) {\n          logger.warning(`Failed to process ${entityMetadata.LogicalName}: ${error instanceof Error ? error.message : String(error)}`)\n        }\n      }\n      \n      logger.success(`Successfully processed ${allEntitiesForLookup.length} total entities (${processedEntities.length} primary entities)`)\n      \n    } else {\n      // ORIGINAL APPROACH: Fetch only specified entities + related entities if enabled\n      logger.info(`Fetching metadata for ${entitiesToProcess.length} specified entities...`)\n      \n      for (let i = 0; i < entitiesToProcess.length; i++) {\n        const entityName = entitiesToProcess[i]\n        if (!loggerOptions.quiet) {\n          logger.progress(i + 1, entitiesToProcess.length, entityName)\n        }\n        \n        try {\n          const rawMetadata = await fetchEntityMetadata(entityName, {\n            includeAttributes: true,\n            includeRelationships: true\n          })\n          \n          if (rawMetadata) {\n            // Apply special configuration for systemuser to exclude system audit relationships\n            const processingOptions = rawMetadata.LogicalName === 'systemuser' \n              ? { excludeSystemAuditRelationships: true }\n              : undefined\n            \n            const processed = processEntityMetadata(rawMetadata, processingOptions)\n            processedEntities.push(processed)\n            logger.verboseDebug(`Processed ${entityName} (${processed.attributes.length} attributes)`)\n          } else {\n            logger.warning(`Entity ${entityName} not found`)\n          }\n          \n        } catch (error) {\n          logger.error(`Failed to process ${entityName}: ${error instanceof Error ? error.message : String(error)}`)\n        }\n      }\n\n      // Copy primary entities to allEntitiesForLookup\n      allEntitiesForLookup = [...processedEntities]\n\n      // Process related entities (always enabled in v1 for better type safety)\n      if (processedEntities.length > 0) {\n        logger.info(`Discovering related entities...`)\n        \n        // Collect all unique related entity logical names\n        const relatedEntityNames = new Set<string>()\n        const processedEntityNames = new Set(processedEntities.map(e => e.logicalName))\n        \n        \n        // Ultra-fast approach: collect all targets first, then deduplicate in one pass\n        const allTargets: string[] = []\n        \n        for (const entity of processedEntities) {\n          const relationshipTargets = Object.values(entity.relatedEntities)\n          \n          // Just collect all targets - no Set operations in hot loop\n          for (const relatedInfo of relationshipTargets) {\n            allTargets.push(relatedInfo.targetEntityLogicalName)\n          }\n        }\n        \n        // Single pass deduplication - much faster than checking Sets repeatedly\n        for (const targetName of allTargets) {\n          if (!processedEntityNames.has(targetName)) {\n            relatedEntityNames.add(targetName)\n          }\n        }\n        \n        \n        if (relatedEntityNames.size > 0) {\n          logger.info(`Found ${relatedEntityNames.size} related entities to process...`)\n          \n          const relatedEntityNamesArray = Array.from(relatedEntityNames)\n          \n          // Use the new batch processing with OR-filter optimization\n          const relatedEntities = await fetchMultipleEntities(relatedEntityNamesArray, {\n            includeAttributes: true,\n            onProgress: loggerOptions.quiet ? undefined : ((current: number, total: number, entityName?: string) => {\n              logger.progress(current, total, entityName)\n            }) as ProgressCallback\n          })\n          \n          // Process the batched results\n          for (const rawMetadata of relatedEntities) {\n            try {\n              if (rawMetadata) {\n                // Apply special configuration for systemuser to exclude system audit relationships\n                const processingOptions = rawMetadata.LogicalName === 'systemuser' \n                  ? { excludeSystemAuditRelationships: true }\n                  : undefined\n                \n                const processed = processEntityMetadata(rawMetadata, processingOptions)\n                allEntitiesForLookup.push(processed)\n                logger.verboseDebug(`Processed related entity ${rawMetadata.LogicalName} (${processed.attributes.length} attributes)`)\n              }\n              \n            } catch (error) {\n              logger.warning(`Failed to process related entity ${rawMetadata?.LogicalName || 'unknown'}: ${error instanceof Error ? error.message : String(error)}`)\n            }\n          }\n          \n          logger.success(`Successfully processed ${allEntitiesForLookup.length - processedEntities.length} related entities`)\n        } else {\n          logger.info('No related entities found to process')\n        }\n      }\n    }\n\n    if (processedEntities.length === 0) {\n      logger.error('No primary entities were successfully processed')\n      process.exit(1)\n    }\n\n    // Generate TypeScript files\n    if (config.dryRun) {\n      logger.info(`Dry run: Would generate ${processedEntities.length} TypeScript files in ${config.outputDir}`)\n      logger.info('Dry run summary:')\n      for (const entity of processedEntities) {\n        logger.info(`   - ${entity.logicalName}.${config.fileExtension} (${entity.attributes.length} attributes)`)\n      }\n      logger.success('Dry run completed successfully!')\n      return\n    }\n    \n    logger.info(`Generating TypeScript files in ${config.outputDir}...`)\n    \n    // Convert back to DataverseTypeGenConfig format and use the proper transformation  \n    const baseConfig = skipConfigFile ? DEFAULT_CONFIG : await loadConfiguration(options.config as string)\n    const finalDataverseConfig: DataverseTypeGenConfig = {\n      ...baseConfig,\n      // Override with any CLI options that were provided\n      outputDir: config.outputDir,\n      fileExtension: config.fileExtension,\n      entities: entitiesToProcess.length > 0 ? entitiesToProcess : baseConfig.entities,\n      publisher: config.publisher,\n      solution: config.solution,\n      fullMetadata: config.fullMetadata,\n      typeGeneration: {\n        ...baseConfig.typeGeneration,\n        includeComments: config.includeComments,\n        includeMetadata: config.includeMetadata,\n        includeValidation: config.includeValidation,\n        generateHooks: config.generateHooks,\n      }\n    }\n    \n    const codeGenConfig: Partial<CodeGenConfig> = toCodeGenConfig(finalDataverseConfig)\n    \n    // For the generate function, we need to separate primary entities from related entities\n    // In full metadata mode, all entities except primary ones are \"related entities\"\n    const relatedEntities = allEntitiesForLookup.filter(entity => \n      !processedEntities.some(primary => primary.logicalName === entity.logicalName)\n    )\n    \n    const result = await generateMultipleEntityTypes(processedEntities, codeGenConfig, relatedEntities, (current, total, item) => {\n      if (!loggerOptions.quiet) {\n        logger.progress(current, total, item)\n      }\n    })\n    \n    // Report results\n    logger.success(`Generated ${result.successfulFiles} TypeScript files`)\n    \n    if (result.failedFiles > 0) {\n      logger.warning(`${result.failedFiles} files failed to generate`)\n      \n      for (const file of result.files) {\n        if (!file.success && file.error) {\n          logger.error(`${file.filePath}: ${file.error}`)\n        }\n      }\n    }\n    \n    if (result.indexFile?.success) {\n      logger.success(`Generated index file: ${result.indexFile.filePath}`)\n    }\n    \n    // Enhanced statistics reporting\n    const totalDurationMs = Date.now() - commandStartTime\n    const stats = {\n      totalFiles: result.totalFiles,\n      successful: result.successfulFiles,\n      failed: result.failedFiles,\n      totalSizeKB: Math.round(result.totalSize / 1024),\n      durationMs: totalDurationMs,\n      codeGenDurationMs: result.duration  // Keep the original for debugging if needed\n    }\n    \n    if (loggerOptions.outputFormat === 'json') {\n      const output = logger.getJsonOutput()\n      output.push({ level: 'statistics', ...stats, timestamp: new Date().toISOString() })\n    } else {\n      logger.info(`Generation Statistics:`)\n      logger.info(`   │`)\n      logger.info(`   - Total files: ${stats.totalFiles}`)\n      logger.info(`   - Successful: [OK] ${stats.successful}`)\n      logger.info(`   - Failed: ${stats.failed > 0 ? `❌ ${stats.failed}` : '✅ 0'}`)\n      logger.info(`   - Total size: ${stats.totalSizeKB}KB`)\n      logger.info(`   - Duration: ${(stats.durationMs / 1000).toFixed(1)}s`)\n    }\n    \n    // Log final API request statistics\n    globalRequestQueue.logFinalStats()\n    \n    logger.success('Type generation completed successfully!')\n    \n  } catch (error) {\n    const errorMessage = error instanceof Error ? error.message : String(error)\n    let actionableHint: string | undefined\n    \n    // Provide actionable hints for common errors\n    if (errorMessage.includes('ENOENT')) {\n      actionableHint = 'Check that the specified paths exist'\n    } else if (errorMessage.includes('EACCES') || errorMessage.includes('not writable')) {\n      actionableHint = 'Check directory permissions or run with appropriate privileges'\n    } else if (errorMessage.includes('Invalid entity name')) {\n      actionableHint = 'Use valid Dataverse entity logical names (lowercase, underscore separated)'\n    } else if (errorMessage.includes('Connection failed')) {\n      actionableHint = 'Verify your Dataverse URL and authentication. Run `dataverse-type-gen validate` to test connection'\n    }\n    \n    logger.error(`Fatal error: ${errorMessage}`, actionableHint)\n    \n    if (logger.getJsonOutput().length > 0) {\n      logger.outputJson()\n    }\n    \n    process.exit(1)\n  } finally {\n    if (loggerOptions.outputFormat === 'json') {\n      logger.outputJson()\n    }\n  }\n}","import { promises as fs } from 'fs'\nimport { join } from 'path'\nimport { SimpleLogger } from '../output/formatters.js'\n\n/**\n * Init command implementation\n */\nexport async function initCommand(options: Record<string, unknown>): Promise<void> {\n  const loggerOptions = {\n    verbose: Boolean(options.verbose),\n    debug: Boolean(options.debug || false),\n    outputFormat: 'text' as const\n  }\n  const logger = new SimpleLogger(loggerOptions)\n  \n  try {\n    logger.info('Initializing Dataverse type generator...')\n    \n    // Create configuration file\n    const configPath = (options.config as string) || 'dataverse.config.json'\n    const config = {\n      \"outputDir\": \"./generated\",\n      \"fileExtension\": \".ts\",\n      \"includeComments\": true,\n      \"includeMetadata\": true,\n      \"includeValidation\": true,\n      \"entities\": [\n        \"// Add specific entity logical names here\",\n        \"// Example: \\\"account\\\", \\\"contact\\\", \\\"opportunity\\\"\"\n      ],\n      \"publisher\": \"// Your publisher prefix (e.g., 'pum') - for filtering by naming convention\",\n      \"solution\": \"// Your solution name (e.g., 'MySolution') - for filtering by actual solution membership\",\n      \"cache\": {\n        \"enabled\": false,\n        \"ttlHours\": 2,\n        \"maxSizeMB\": 100\n      },\n      \"typeGenerationOptions\": {\n        \"useExactTypes\": true\n      }\n    }\n    \n    await fs.writeFile(configPath, JSON.stringify(config, null, 2))\n    logger.success(`Created configuration file: ${configPath}`)\n    \n    // Create output directory\n    const outputDir = (options.outputDir as string) || './generated'\n    await fs.mkdir(outputDir, { recursive: true })\n    logger.success(`Created output directory: ${outputDir}`)\n    \n    // Create .gitignore\n    const gitignorePath = join(outputDir, '.gitignore')\n    const gitignoreContent = `# Generated TypeScript files\n*.ts\n*.d.ts\n!*.test.ts\n!*.spec.ts\n\n# Keep directory\n!.gitignore\n`\n    \n    await fs.writeFile(gitignorePath, gitignoreContent)\n    logger.success(`Created .gitignore: ${gitignorePath}`)\n    \n    logger.info(``)\n    logger.info(`🎯 Next steps:`)\n    logger.info(`   1. Configure your Dataverse connection:`)\n    logger.info(`      export DATAVERSE_INSTANCE=\"https://yourorg.crm.dynamics.com\"`)\n    logger.info(`   2. Edit ${configPath} to specify entities, publisher, or solution`)\n    logger.info(`   3. Run: npx dataverse-type-gen generate`)\n    logger.info(``)\n    logger.success('Initialization completed!')\n    \n  } catch (error) {\n    logger.error(`Initialization failed: ${error instanceof Error ? error.message : String(error)}`)\n    process.exit(1)\n  }\n}","import { fetchAllEntities } from '../../client/index.js'\nimport { loadConfiguration } from '../../config/index.js'\nimport { SimpleLogger } from '../output/formatters.js'\n\n/**\n * Validate command implementation\n */\nexport async function validateCommand(options: Record<string, unknown>): Promise<void> {\n  const loggerOptions = {\n    verbose: Boolean(options.verbose),\n    debug: Boolean(options.debug),\n    outputFormat: (options.outputFormat as 'text' | 'json') || 'text'\n  }\n  const logger = new SimpleLogger(loggerOptions)\n  \n  try {\n    logger.info('Validating Dataverse connection and configuration...')\n    \n    // Check environment variables\n    const dataverseUrl = process.env.DATAVERSE_INSTANCE\n    if (!dataverseUrl) {\n      logger.error('DATAVERSE_INSTANCE environment variable not set')\n      process.exit(1)\n    }\n    \n    logger.success(`Dataverse URL configured: ${dataverseUrl}`)\n    \n    // Test connection by fetching a few entities\n    logger.info('Testing Dataverse connection...')\n    \n    try {\n      const testEntities = await fetchAllEntities({ select: ['LogicalName', 'DisplayName'] })\n      \n      if (testEntities.length > 0) {\n        logger.success(`Connection successful - found ${testEntities.length} entities`)\n        \n        for (const entity of testEntities.slice(0, 5)) { // Show only first 5\n          const displayName = entity.DisplayName?.UserLocalizedLabel?.Label || entity.LogicalName\n          logger.info(`   - ${entity.LogicalName} (${displayName})`)\n        }\n      } else {\n        logger.warning('Connection successful but no entities found')\n      }\n      \n    } catch (error) {\n      logger.error(`Connection failed: ${error instanceof Error ? error.message : String(error)}`)\n      process.exit(1)\n    }\n    \n    // Validate configuration file if exists\n    try {\n      const dataverseConfig = await loadConfiguration(options.config as string)\n      logger.success('Configuration file loaded successfully')\n      \n      if (options.verbose) {\n        logger.verboseDebug(`Configuration: ${JSON.stringify(dataverseConfig, null, 2)}`)\n      }\n    } catch (error) {\n      logger.info(`No configuration file found (using defaults): ${error instanceof Error ? error.message : String(error)}`)\n    }\n    \n    logger.success('Validation completed successfully!')\n    \n  } catch (error) {\n    logger.error(`Validation failed: ${error instanceof Error ? error.message : String(error)}`)\n    process.exit(1)\n  }\n}","import { clearMemoryCache, getMemoryCacheStatus } from '../../cache/index.js'\nimport { SimpleLogger } from '../output/formatters.js'\n\n/**\n * Cache status command implementation - shows in-memory cache status only\n */\nexport async function cacheStatusCommand(options: Record<string, unknown>): Promise<void> {\n  const loggerOptions = {\n    verbose: Boolean(options.verbose),\n    debug: Boolean(options.debug),\n    outputFormat: (options.outputFormat as 'text' | 'json') || 'text'\n  }\n  const logger = new SimpleLogger(loggerOptions)\n  \n  try {\n    logger.info('Memory Cache Status')\n    \n    const status = getMemoryCacheStatus()\n    \n    if (loggerOptions.outputFormat === 'json') {\n      const output = logger.getJsonOutput()\n      output.push({ level: 'cache_status', ...status, timestamp: new Date().toISOString() })\n    } else {\n      logger.info(`   |`)\n      logger.info(`   - Type: In-memory only`)\n      logger.info(`   - Entries: ${status.entryCount}`)\n      logger.info(`   - Session cache (cleared on restart)`)\n    }\n    \n  } catch (error) {\n    logger.error(`Failed to get cache status: ${error instanceof Error ? error.message : String(error)}`)\n    process.exit(1)\n  } finally {\n    if (loggerOptions.outputFormat === 'json') {\n      logger.outputJson()\n    }\n  }\n}\n\n/**\n * Cache clear command implementation - clears in-memory cache only\n */\nexport async function cacheClearCommand(options: Record<string, unknown>): Promise<void> {\n  const loggerOptions = {\n    verbose: Boolean(options.verbose),\n    debug: Boolean(options.debug),\n    outputFormat: (options.outputFormat as 'text' | 'json') || 'text'\n  }\n  const logger = new SimpleLogger(loggerOptions)\n  \n  try {\n    logger.info('[CLEAR] Clearing memory cache...')\n    \n    const clearedCount = clearMemoryCache()\n    \n    logger.success(`Cleared ${clearedCount} entries from memory cache`)\n    \n  } catch (error) {\n    logger.error(`Failed to clear cache: ${error instanceof Error ? error.message : String(error)}`)\n    process.exit(1)\n  } finally {\n    if (loggerOptions.outputFormat === 'json') {\n      logger.outputJson()\n    }\n  }\n}","#!/usr/bin/env node\n\nimport { Command } from 'commander'\nimport chalk from 'chalk'\nimport { generateCommand } from './commands/generate.js'\nimport { initCommand } from './commands/init.js'\nimport { validateCommand } from './commands/validate.js'\nimport { cacheStatusCommand, cacheClearCommand } from './commands/cache.js'\n\n\n\n/**\n * Main CLI setup\n */\nexport function setupCLI(): Command {\n  const program = new Command()\n  \n  program\n    .name('dataverse-type-gen')\n    .description('Generate TypeScript types from Dataverse metadata')\n    .version('1.2.0')\n  \n  // Generate command\n  program\n    .command('generate')\n    .description('Generate TypeScript types from Dataverse entities')\n    .option('-o, --output-dir <dir>', 'Output directory for generated files')\n    .option('-e, --entities <entities>', 'Comma-separated entity logical names (e.g. account,contact,opportunity)')\n    .option('-p, --publisher <prefix>', 'Publisher prefix to filter entities (naming convention based)')\n    .option('-s, --solution <name>', 'Solution name to filter entities (actual solution membership)')\n    .option('--dataverse-url <url>', 'Dataverse instance URL (e.g. https://yourorg.crm.dynamics.com)')\n    .option('--file-extension <ext>', 'File extension (.ts or .d.ts)', '.ts')\n    .option('--no-comments', 'Exclude comments from generated code')\n    .option('--no-metadata', 'Exclude metadata objects')\n    .option('--no-validation', 'Exclude validation functions')\n    .option('--no-overwrite', 'Do not overwrite existing files')\n    .option('--hooks', 'Enable React Query hooks generation (requires @tanstack/react-query)')\n    .option('--no-hooks', 'Exclude React Query hooks generation (default behavior)')\n    .option('--full-metadata', 'Generate ALL entities from Dataverse for complete type safety (slower initial run)')\n    .option('-c, --config <path>', 'Configuration file path')\n    .option('--no-config-file', 'Skip loading configuration file (use only CLI arguments and defaults)')\n    .option('-v, --verbose', 'Verbose output')\n    .option('--debug', 'Enable debug mode with detailed logging')\n    .option('-q, --quiet', 'Suppress non-error output')\n    .option('--dry-run', 'Preview what would be generated without creating files')\n    .option('--output-format <format>', 'Output format: text or json', 'text')\n    .option('-i, --interactive', 'Run in interactive mode with visual UI')\n    .addHelpText('after', `\nExamples:\n  $ dataverse-type-gen generate --entities account,contact,opportunity\n  $ dataverse-type-gen generate --publisher your_prefix --dry-run\n  $ dataverse-type-gen generate --solution MySolution --quiet\n  $ dataverse-type-gen generate --entities account --output-dir ./src/types --debug\n  $ dataverse-type-gen generate --dataverse-url https://yourorg.crm.dynamics.com --publisher prefix\n  $ dataverse-type-gen generate --solution \"My Custom Solution\" --output-format json\n  $ dataverse-type-gen generate --config ./custom-config.json --verbose\n  $ dataverse-type-gen generate --entities pum_initiative\n  $ dataverse-type-gen generate --publisher pum\n  $ dataverse-type-gen generate --entities pum_initiative --full-metadata\n  $ dataverse-type-gen generate --entities pum_initiative --no-config-file\n  $ dataverse-type-gen generate --interactive`)\n    .action(generateCommand)\n  \n  // Init command\n  program\n    .command('init')\n    .description('Initialize Dataverse type generator configuration')\n    .option('-o, --output-dir <dir>', 'Output directory for generated files')\n    .option('-c, --config <path>', 'Configuration file path', 'dataverse.config.json')\n    .option('-v, --verbose', 'Verbose output')\n    .addHelpText('after', `\nExamples:\n  $ dataverse-type-gen init\n  $ dataverse-type-gen init --config ./my-config.json\n  $ dataverse-type-gen init --output-dir ./src/generated`)\n    .action(initCommand)\n  \n  // Validate command\n  program\n    .command('validate')\n    .description('Validate Dataverse connection and configuration')\n    .option('-c, --config <path>', 'Configuration file path')\n    .option('-v, --verbose', 'Verbose output')\n    .option('--debug', 'Enable debug mode')\n    .option('--output-format <format>', 'Output format: text or json', 'text')\n    .addHelpText('after', `\nExamples:\n  $ dataverse-type-gen validate\n  $ dataverse-type-gen validate --config ./dataverse.config.json\n  $ dataverse-type-gen validate --verbose`)\n    .action(validateCommand)\n  \n  // Cache command group - internal development tool\n  const cacheCommand = program\n    .command('cache')\n    .description('[Development] Manage in-memory cache')\n  \n  cacheCommand\n    .command('status')\n    .description('Show cache status and statistics')\n    .option('-v, --verbose', 'Verbose output')\n    .option('--debug', 'Enable debug mode')\n    .option('--output-format <format>', 'Output format: text or json', 'text')\n    .addHelpText('after', `\nExamples:\n  $ dataverse-type-gen cache status\n  $ dataverse-type-gen cache status --verbose`)\n    .action(cacheStatusCommand)\n  \n  cacheCommand\n    .command('clear')\n    .description('Clear in-memory cache')\n    .option('-v, --verbose', 'Verbose output')\n    .option('--debug', 'Enable debug mode')\n    .option('--output-format <format>', 'Output format: text or json', 'text')\n    .addHelpText('after', `\nExamples:\n  $ dataverse-type-gen cache clear`)\n    .action(cacheClearCommand)\n  \n  // Info command\n  program\n    .command('info')\n    .description('Show information about the type generator')\n    .action(() => {\n      console.log(chalk.blue('Dataverse Type Generator'))\n      console.log('')\n      console.log('[ENV] Environment Variables:')\n      console.log(`   DATAVERSE_INSTANCE: ${process.env.DATAVERSE_INSTANCE || 'Not set'}`)\n      console.log('')\n      console.log('[DIR] Current Directory:', process.cwd())\n      console.log('📦 Node Version:', process.version)\n      console.log('')\n      console.log('📚 For more information:')\n      console.log('   - Run: dataverse-type-gen --help')\n      console.log('   - Run: dataverse-type-gen init')\n      console.log('   - Run: dataverse-type-gen validate')\n    })\n  \n  return program\n}\n\n// CLI setup is now handled by src/bin/cli.ts\n// This file only exports the setupCLI function for testing and reuse","#!/usr/bin/env node\n\n/**\n * Dedicated CLI entry point\n * This file is ONLY for CLI execution and is never imported as a module\n */\n\nimport { setupCLI } from '../cli/index.js'\n\n// Always run the CLI when this file is executed\nconst program = setupCLI()\nprogram.parse()"]}