@fern-api/generator-migrations 0.0.2 → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":["typescriptSdkMigrations"],"sources":["../../../../node_modules/.pnpm/immer@10.1.3/node_modules/immer/dist/immer.mjs","../../../migrations-base/lib/utils.js","../../src/generators/typescript/migrations/1.0.0.ts","../../src/generators/typescript/migrations/2.0.0.ts","../../src/generators/typescript/migrations/3.0.0.ts","../../src/generators/typescript/migrations/index.ts","../../src/index.ts"],"sourcesContent":["// src/utils/env.ts\nvar NOTHING = Symbol.for(\"immer-nothing\");\nvar DRAFTABLE = Symbol.for(\"immer-draftable\");\nvar DRAFT_STATE = Symbol.for(\"immer-state\");\n\n// src/utils/errors.ts\nvar errors = process.env.NODE_ENV !== \"production\" ? [\n // All error codes, starting by 0:\n function(plugin) {\n return `The plugin for '${plugin}' has not been loaded into Immer. To enable the plugin, import and call \\`enable${plugin}()\\` when initializing your application.`;\n },\n function(thing) {\n return `produce can only be called on things that are draftable: plain objects, arrays, Map, Set or classes that are marked with '[immerable]: true'. Got '${thing}'`;\n },\n \"This object has been frozen and should not be mutated\",\n function(data) {\n return \"Cannot use a proxy that has been revoked. Did you pass an object from inside an immer function to an async process? \" + data;\n },\n \"An immer producer returned a new value *and* modified its draft. Either return a new value *or* modify the draft.\",\n \"Immer forbids circular references\",\n \"The first or second argument to `produce` must be a function\",\n \"The third argument to `produce` must be a function or undefined\",\n \"First argument to `createDraft` must be a plain object, an array, or an immerable object\",\n \"First argument to `finishDraft` must be a draft returned by `createDraft`\",\n function(thing) {\n return `'current' expects a draft, got: ${thing}`;\n },\n \"Object.defineProperty() cannot be used on an Immer draft\",\n \"Object.setPrototypeOf() cannot be used on an Immer draft\",\n \"Immer only supports deleting array indices\",\n \"Immer only supports setting array indices and the 'length' property\",\n function(thing) {\n return `'original' expects a draft, got: ${thing}`;\n }\n // Note: if more errors are added, the errorOffset in Patches.ts should be increased\n // See Patches.ts for additional errors\n] : [];\nfunction die(error, ...args) {\n if (process.env.NODE_ENV !== \"production\") {\n const e = errors[error];\n const msg = typeof e === \"function\" ? e.apply(null, args) : e;\n throw new Error(`[Immer] ${msg}`);\n }\n throw new Error(\n `[Immer] minified error nr: ${error}. Full error at: https://bit.ly/3cXEKWf`\n );\n}\n\n// src/utils/common.ts\nvar getPrototypeOf = Object.getPrototypeOf;\nfunction isDraft(value) {\n return !!value && !!value[DRAFT_STATE];\n}\nfunction isDraftable(value) {\n if (!value)\n return false;\n return isPlainObject(value) || Array.isArray(value) || !!value[DRAFTABLE] || !!value.constructor?.[DRAFTABLE] || isMap(value) || isSet(value);\n}\nvar objectCtorString = Object.prototype.constructor.toString();\nfunction isPlainObject(value) {\n if (!value || typeof value !== \"object\")\n return false;\n const proto = getPrototypeOf(value);\n if (proto === null) {\n return true;\n }\n const Ctor = Object.hasOwnProperty.call(proto, \"constructor\") && proto.constructor;\n if (Ctor === Object)\n return true;\n return typeof Ctor == \"function\" && Function.toString.call(Ctor) === objectCtorString;\n}\nfunction original(value) {\n if (!isDraft(value))\n die(15, value);\n return value[DRAFT_STATE].base_;\n}\nfunction each(obj, iter) {\n if (getArchtype(obj) === 0 /* Object */) {\n Reflect.ownKeys(obj).forEach((key) => {\n iter(key, obj[key], obj);\n });\n } else {\n obj.forEach((entry, index) => iter(index, entry, obj));\n }\n}\nfunction getArchtype(thing) {\n const state = thing[DRAFT_STATE];\n return state ? state.type_ : Array.isArray(thing) ? 1 /* Array */ : isMap(thing) ? 2 /* Map */ : isSet(thing) ? 3 /* Set */ : 0 /* Object */;\n}\nfunction has(thing, prop) {\n return getArchtype(thing) === 2 /* Map */ ? thing.has(prop) : Object.prototype.hasOwnProperty.call(thing, prop);\n}\nfunction get(thing, prop) {\n return getArchtype(thing) === 2 /* Map */ ? thing.get(prop) : thing[prop];\n}\nfunction set(thing, propOrOldValue, value) {\n const t = getArchtype(thing);\n if (t === 2 /* Map */)\n thing.set(propOrOldValue, value);\n else if (t === 3 /* Set */) {\n thing.add(value);\n } else\n thing[propOrOldValue] = value;\n}\nfunction is(x, y) {\n if (x === y) {\n return x !== 0 || 1 / x === 1 / y;\n } else {\n return x !== x && y !== y;\n }\n}\nfunction isMap(target) {\n return target instanceof Map;\n}\nfunction isSet(target) {\n return target instanceof Set;\n}\nfunction latest(state) {\n return state.copy_ || state.base_;\n}\nfunction shallowCopy(base, strict) {\n if (isMap(base)) {\n return new Map(base);\n }\n if (isSet(base)) {\n return new Set(base);\n }\n if (Array.isArray(base))\n return Array.prototype.slice.call(base);\n const isPlain = isPlainObject(base);\n if (strict === true || strict === \"class_only\" && !isPlain) {\n const descriptors = Object.getOwnPropertyDescriptors(base);\n delete descriptors[DRAFT_STATE];\n let keys = Reflect.ownKeys(descriptors);\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n const desc = descriptors[key];\n if (desc.writable === false) {\n desc.writable = true;\n desc.configurable = true;\n }\n if (desc.get || desc.set)\n descriptors[key] = {\n configurable: true,\n writable: true,\n // could live with !!desc.set as well here...\n enumerable: desc.enumerable,\n value: base[key]\n };\n }\n return Object.create(getPrototypeOf(base), descriptors);\n } else {\n const proto = getPrototypeOf(base);\n if (proto !== null && isPlain) {\n return { ...base };\n }\n const obj = Object.create(proto);\n return Object.assign(obj, base);\n }\n}\nfunction freeze(obj, deep = false) {\n if (isFrozen(obj) || isDraft(obj) || !isDraftable(obj))\n return obj;\n if (getArchtype(obj) > 1) {\n Object.defineProperties(obj, {\n set: { value: dontMutateFrozenCollections },\n add: { value: dontMutateFrozenCollections },\n clear: { value: dontMutateFrozenCollections },\n delete: { value: dontMutateFrozenCollections }\n });\n }\n Object.freeze(obj);\n if (deep)\n Object.values(obj).forEach((value) => freeze(value, true));\n return obj;\n}\nfunction dontMutateFrozenCollections() {\n die(2);\n}\nfunction isFrozen(obj) {\n return Object.isFrozen(obj);\n}\n\n// src/utils/plugins.ts\nvar plugins = {};\nfunction getPlugin(pluginKey) {\n const plugin = plugins[pluginKey];\n if (!plugin) {\n die(0, pluginKey);\n }\n return plugin;\n}\nfunction loadPlugin(pluginKey, implementation) {\n if (!plugins[pluginKey])\n plugins[pluginKey] = implementation;\n}\n\n// src/core/scope.ts\nvar currentScope;\nfunction getCurrentScope() {\n return currentScope;\n}\nfunction createScope(parent_, immer_) {\n return {\n drafts_: [],\n parent_,\n immer_,\n // Whenever the modified draft contains a draft from another scope, we\n // need to prevent auto-freezing so the unowned draft can be finalized.\n canAutoFreeze_: true,\n unfinalizedDrafts_: 0\n };\n}\nfunction usePatchesInScope(scope, patchListener) {\n if (patchListener) {\n getPlugin(\"Patches\");\n scope.patches_ = [];\n scope.inversePatches_ = [];\n scope.patchListener_ = patchListener;\n }\n}\nfunction revokeScope(scope) {\n leaveScope(scope);\n scope.drafts_.forEach(revokeDraft);\n scope.drafts_ = null;\n}\nfunction leaveScope(scope) {\n if (scope === currentScope) {\n currentScope = scope.parent_;\n }\n}\nfunction enterScope(immer2) {\n return currentScope = createScope(currentScope, immer2);\n}\nfunction revokeDraft(draft) {\n const state = draft[DRAFT_STATE];\n if (state.type_ === 0 /* Object */ || state.type_ === 1 /* Array */)\n state.revoke_();\n else\n state.revoked_ = true;\n}\n\n// src/core/finalize.ts\nfunction processResult(result, scope) {\n scope.unfinalizedDrafts_ = scope.drafts_.length;\n const baseDraft = scope.drafts_[0];\n const isReplaced = result !== void 0 && result !== baseDraft;\n if (isReplaced) {\n if (baseDraft[DRAFT_STATE].modified_) {\n revokeScope(scope);\n die(4);\n }\n if (isDraftable(result)) {\n result = finalize(scope, result);\n if (!scope.parent_)\n maybeFreeze(scope, result);\n }\n if (scope.patches_) {\n getPlugin(\"Patches\").generateReplacementPatches_(\n baseDraft[DRAFT_STATE].base_,\n result,\n scope.patches_,\n scope.inversePatches_\n );\n }\n } else {\n result = finalize(scope, baseDraft, []);\n }\n revokeScope(scope);\n if (scope.patches_) {\n scope.patchListener_(scope.patches_, scope.inversePatches_);\n }\n return result !== NOTHING ? result : void 0;\n}\nfunction finalize(rootScope, value, path) {\n if (isFrozen(value))\n return value;\n const state = value[DRAFT_STATE];\n if (!state) {\n each(\n value,\n (key, childValue) => finalizeProperty(rootScope, state, value, key, childValue, path)\n );\n return value;\n }\n if (state.scope_ !== rootScope)\n return value;\n if (!state.modified_) {\n maybeFreeze(rootScope, state.base_, true);\n return state.base_;\n }\n if (!state.finalized_) {\n state.finalized_ = true;\n state.scope_.unfinalizedDrafts_--;\n const result = state.copy_;\n let resultEach = result;\n let isSet2 = false;\n if (state.type_ === 3 /* Set */) {\n resultEach = new Set(result);\n result.clear();\n isSet2 = true;\n }\n each(\n resultEach,\n (key, childValue) => finalizeProperty(rootScope, state, result, key, childValue, path, isSet2)\n );\n maybeFreeze(rootScope, result, false);\n if (path && rootScope.patches_) {\n getPlugin(\"Patches\").generatePatches_(\n state,\n path,\n rootScope.patches_,\n rootScope.inversePatches_\n );\n }\n }\n return state.copy_;\n}\nfunction finalizeProperty(rootScope, parentState, targetObject, prop, childValue, rootPath, targetIsSet) {\n if (process.env.NODE_ENV !== \"production\" && childValue === targetObject)\n die(5);\n if (isDraft(childValue)) {\n const path = rootPath && parentState && parentState.type_ !== 3 /* Set */ && // Set objects are atomic since they have no keys.\n !has(parentState.assigned_, prop) ? rootPath.concat(prop) : void 0;\n const res = finalize(rootScope, childValue, path);\n set(targetObject, prop, res);\n if (isDraft(res)) {\n rootScope.canAutoFreeze_ = false;\n } else\n return;\n } else if (targetIsSet) {\n targetObject.add(childValue);\n }\n if (isDraftable(childValue) && !isFrozen(childValue)) {\n if (!rootScope.immer_.autoFreeze_ && rootScope.unfinalizedDrafts_ < 1) {\n return;\n }\n finalize(rootScope, childValue);\n if ((!parentState || !parentState.scope_.parent_) && typeof prop !== \"symbol\" && (isMap(targetObject) ? targetObject.has(prop) : Object.prototype.propertyIsEnumerable.call(targetObject, prop)))\n maybeFreeze(rootScope, childValue);\n }\n}\nfunction maybeFreeze(scope, value, deep = false) {\n if (!scope.parent_ && scope.immer_.autoFreeze_ && scope.canAutoFreeze_) {\n freeze(value, deep);\n }\n}\n\n// src/core/proxy.ts\nfunction createProxyProxy(base, parent) {\n const isArray = Array.isArray(base);\n const state = {\n type_: isArray ? 1 /* Array */ : 0 /* Object */,\n // Track which produce call this is associated with.\n scope_: parent ? parent.scope_ : getCurrentScope(),\n // True for both shallow and deep changes.\n modified_: false,\n // Used during finalization.\n finalized_: false,\n // Track which properties have been assigned (true) or deleted (false).\n assigned_: {},\n // The parent draft state.\n parent_: parent,\n // The base state.\n base_: base,\n // The base proxy.\n draft_: null,\n // set below\n // The base copy with any updated values.\n copy_: null,\n // Called by the `produce` function.\n revoke_: null,\n isManual_: false\n };\n let target = state;\n let traps = objectTraps;\n if (isArray) {\n target = [state];\n traps = arrayTraps;\n }\n const { revoke, proxy } = Proxy.revocable(target, traps);\n state.draft_ = proxy;\n state.revoke_ = revoke;\n return proxy;\n}\nvar objectTraps = {\n get(state, prop) {\n if (prop === DRAFT_STATE)\n return state;\n const source = latest(state);\n if (!has(source, prop)) {\n return readPropFromProto(state, source, prop);\n }\n const value = source[prop];\n if (state.finalized_ || !isDraftable(value)) {\n return value;\n }\n if (value === peek(state.base_, prop)) {\n prepareCopy(state);\n return state.copy_[prop] = createProxy(value, state);\n }\n return value;\n },\n has(state, prop) {\n return prop in latest(state);\n },\n ownKeys(state) {\n return Reflect.ownKeys(latest(state));\n },\n set(state, prop, value) {\n const desc = getDescriptorFromProto(latest(state), prop);\n if (desc?.set) {\n desc.set.call(state.draft_, value);\n return true;\n }\n if (!state.modified_) {\n const current2 = peek(latest(state), prop);\n const currentState = current2?.[DRAFT_STATE];\n if (currentState && currentState.base_ === value) {\n state.copy_[prop] = value;\n state.assigned_[prop] = false;\n return true;\n }\n if (is(value, current2) && (value !== void 0 || has(state.base_, prop)))\n return true;\n prepareCopy(state);\n markChanged(state);\n }\n if (state.copy_[prop] === value && // special case: handle new props with value 'undefined'\n (value !== void 0 || prop in state.copy_) || // special case: NaN\n Number.isNaN(value) && Number.isNaN(state.copy_[prop]))\n return true;\n state.copy_[prop] = value;\n state.assigned_[prop] = true;\n return true;\n },\n deleteProperty(state, prop) {\n if (peek(state.base_, prop) !== void 0 || prop in state.base_) {\n state.assigned_[prop] = false;\n prepareCopy(state);\n markChanged(state);\n } else {\n delete state.assigned_[prop];\n }\n if (state.copy_) {\n delete state.copy_[prop];\n }\n return true;\n },\n // Note: We never coerce `desc.value` into an Immer draft, because we can't make\n // the same guarantee in ES5 mode.\n getOwnPropertyDescriptor(state, prop) {\n const owner = latest(state);\n const desc = Reflect.getOwnPropertyDescriptor(owner, prop);\n if (!desc)\n return desc;\n return {\n writable: true,\n configurable: state.type_ !== 1 /* Array */ || prop !== \"length\",\n enumerable: desc.enumerable,\n value: owner[prop]\n };\n },\n defineProperty() {\n die(11);\n },\n getPrototypeOf(state) {\n return getPrototypeOf(state.base_);\n },\n setPrototypeOf() {\n die(12);\n }\n};\nvar arrayTraps = {};\neach(objectTraps, (key, fn) => {\n arrayTraps[key] = function() {\n arguments[0] = arguments[0][0];\n return fn.apply(this, arguments);\n };\n});\narrayTraps.deleteProperty = function(state, prop) {\n if (process.env.NODE_ENV !== \"production\" && isNaN(parseInt(prop)))\n die(13);\n return arrayTraps.set.call(this, state, prop, void 0);\n};\narrayTraps.set = function(state, prop, value) {\n if (process.env.NODE_ENV !== \"production\" && prop !== \"length\" && isNaN(parseInt(prop)))\n die(14);\n return objectTraps.set.call(this, state[0], prop, value, state[0]);\n};\nfunction peek(draft, prop) {\n const state = draft[DRAFT_STATE];\n const source = state ? latest(state) : draft;\n return source[prop];\n}\nfunction readPropFromProto(state, source, prop) {\n const desc = getDescriptorFromProto(source, prop);\n return desc ? `value` in desc ? desc.value : (\n // This is a very special case, if the prop is a getter defined by the\n // prototype, we should invoke it with the draft as context!\n desc.get?.call(state.draft_)\n ) : void 0;\n}\nfunction getDescriptorFromProto(source, prop) {\n if (!(prop in source))\n return void 0;\n let proto = getPrototypeOf(source);\n while (proto) {\n const desc = Object.getOwnPropertyDescriptor(proto, prop);\n if (desc)\n return desc;\n proto = getPrototypeOf(proto);\n }\n return void 0;\n}\nfunction markChanged(state) {\n if (!state.modified_) {\n state.modified_ = true;\n if (state.parent_) {\n markChanged(state.parent_);\n }\n }\n}\nfunction prepareCopy(state) {\n if (!state.copy_) {\n state.copy_ = shallowCopy(\n state.base_,\n state.scope_.immer_.useStrictShallowCopy_\n );\n }\n}\n\n// src/core/immerClass.ts\nvar Immer2 = class {\n constructor(config) {\n this.autoFreeze_ = true;\n this.useStrictShallowCopy_ = false;\n /**\n * The `produce` function takes a value and a \"recipe function\" (whose\n * return value often depends on the base state). The recipe function is\n * free to mutate its first argument however it wants. All mutations are\n * only ever applied to a __copy__ of the base state.\n *\n * Pass only a function to create a \"curried producer\" which relieves you\n * from passing the recipe function every time.\n *\n * Only plain objects and arrays are made mutable. All other objects are\n * considered uncopyable.\n *\n * Note: This function is __bound__ to its `Immer` instance.\n *\n * @param {any} base - the initial state\n * @param {Function} recipe - function that receives a proxy of the base state as first argument and which can be freely modified\n * @param {Function} patchListener - optional function that will be called with all the patches produced here\n * @returns {any} a new state, or the initial state if nothing was modified\n */\n this.produce = (base, recipe, patchListener) => {\n if (typeof base === \"function\" && typeof recipe !== \"function\") {\n const defaultBase = recipe;\n recipe = base;\n const self = this;\n return function curriedProduce(base2 = defaultBase, ...args) {\n return self.produce(base2, (draft) => recipe.call(this, draft, ...args));\n };\n }\n if (typeof recipe !== \"function\")\n die(6);\n if (patchListener !== void 0 && typeof patchListener !== \"function\")\n die(7);\n let result;\n if (isDraftable(base)) {\n const scope = enterScope(this);\n const proxy = createProxy(base, void 0);\n let hasError = true;\n try {\n result = recipe(proxy);\n hasError = false;\n } finally {\n if (hasError)\n revokeScope(scope);\n else\n leaveScope(scope);\n }\n usePatchesInScope(scope, patchListener);\n return processResult(result, scope);\n } else if (!base || typeof base !== \"object\") {\n result = recipe(base);\n if (result === void 0)\n result = base;\n if (result === NOTHING)\n result = void 0;\n if (this.autoFreeze_)\n freeze(result, true);\n if (patchListener) {\n const p = [];\n const ip = [];\n getPlugin(\"Patches\").generateReplacementPatches_(base, result, p, ip);\n patchListener(p, ip);\n }\n return result;\n } else\n die(1, base);\n };\n this.produceWithPatches = (base, recipe) => {\n if (typeof base === \"function\") {\n return (state, ...args) => this.produceWithPatches(state, (draft) => base(draft, ...args));\n }\n let patches, inversePatches;\n const result = this.produce(base, recipe, (p, ip) => {\n patches = p;\n inversePatches = ip;\n });\n return [result, patches, inversePatches];\n };\n if (typeof config?.autoFreeze === \"boolean\")\n this.setAutoFreeze(config.autoFreeze);\n if (typeof config?.useStrictShallowCopy === \"boolean\")\n this.setUseStrictShallowCopy(config.useStrictShallowCopy);\n }\n createDraft(base) {\n if (!isDraftable(base))\n die(8);\n if (isDraft(base))\n base = current(base);\n const scope = enterScope(this);\n const proxy = createProxy(base, void 0);\n proxy[DRAFT_STATE].isManual_ = true;\n leaveScope(scope);\n return proxy;\n }\n finishDraft(draft, patchListener) {\n const state = draft && draft[DRAFT_STATE];\n if (!state || !state.isManual_)\n die(9);\n const { scope_: scope } = state;\n usePatchesInScope(scope, patchListener);\n return processResult(void 0, scope);\n }\n /**\n * Pass true to automatically freeze all copies created by Immer.\n *\n * By default, auto-freezing is enabled.\n */\n setAutoFreeze(value) {\n this.autoFreeze_ = value;\n }\n /**\n * Pass true to enable strict shallow copy.\n *\n * By default, immer does not copy the object descriptors such as getter, setter and non-enumrable properties.\n */\n setUseStrictShallowCopy(value) {\n this.useStrictShallowCopy_ = value;\n }\n applyPatches(base, patches) {\n let i;\n for (i = patches.length - 1; i >= 0; i--) {\n const patch = patches[i];\n if (patch.path.length === 0 && patch.op === \"replace\") {\n base = patch.value;\n break;\n }\n }\n if (i > -1) {\n patches = patches.slice(i + 1);\n }\n const applyPatchesImpl = getPlugin(\"Patches\").applyPatches_;\n if (isDraft(base)) {\n return applyPatchesImpl(base, patches);\n }\n return this.produce(\n base,\n (draft) => applyPatchesImpl(draft, patches)\n );\n }\n};\nfunction createProxy(value, parent) {\n const draft = isMap(value) ? getPlugin(\"MapSet\").proxyMap_(value, parent) : isSet(value) ? getPlugin(\"MapSet\").proxySet_(value, parent) : createProxyProxy(value, parent);\n const scope = parent ? parent.scope_ : getCurrentScope();\n scope.drafts_.push(draft);\n return draft;\n}\n\n// src/core/current.ts\nfunction current(value) {\n if (!isDraft(value))\n die(10, value);\n return currentImpl(value);\n}\nfunction currentImpl(value) {\n if (!isDraftable(value) || isFrozen(value))\n return value;\n const state = value[DRAFT_STATE];\n let copy;\n if (state) {\n if (!state.modified_)\n return state.base_;\n state.finalized_ = true;\n copy = shallowCopy(value, state.scope_.immer_.useStrictShallowCopy_);\n } else {\n copy = shallowCopy(value, true);\n }\n each(copy, (key, childValue) => {\n set(copy, key, currentImpl(childValue));\n });\n if (state) {\n state.finalized_ = false;\n }\n return copy;\n}\n\n// src/plugins/patches.ts\nfunction enablePatches() {\n const errorOffset = 16;\n if (process.env.NODE_ENV !== \"production\") {\n errors.push(\n 'Sets cannot have \"replace\" patches.',\n function(op) {\n return \"Unsupported patch operation: \" + op;\n },\n function(path) {\n return \"Cannot apply patch, path doesn't resolve: \" + path;\n },\n \"Patching reserved attributes like __proto__, prototype and constructor is not allowed\"\n );\n }\n const REPLACE = \"replace\";\n const ADD = \"add\";\n const REMOVE = \"remove\";\n function generatePatches_(state, basePath, patches, inversePatches) {\n switch (state.type_) {\n case 0 /* Object */:\n case 2 /* Map */:\n return generatePatchesFromAssigned(\n state,\n basePath,\n patches,\n inversePatches\n );\n case 1 /* Array */:\n return generateArrayPatches(state, basePath, patches, inversePatches);\n case 3 /* Set */:\n return generateSetPatches(\n state,\n basePath,\n patches,\n inversePatches\n );\n }\n }\n function generateArrayPatches(state, basePath, patches, inversePatches) {\n let { base_, assigned_ } = state;\n let copy_ = state.copy_;\n if (copy_.length < base_.length) {\n ;\n [base_, copy_] = [copy_, base_];\n [patches, inversePatches] = [inversePatches, patches];\n }\n for (let i = 0; i < base_.length; i++) {\n if (assigned_[i] && copy_[i] !== base_[i]) {\n const path = basePath.concat([i]);\n patches.push({\n op: REPLACE,\n path,\n // Need to maybe clone it, as it can in fact be the original value\n // due to the base/copy inversion at the start of this function\n value: clonePatchValueIfNeeded(copy_[i])\n });\n inversePatches.push({\n op: REPLACE,\n path,\n value: clonePatchValueIfNeeded(base_[i])\n });\n }\n }\n for (let i = base_.length; i < copy_.length; i++) {\n const path = basePath.concat([i]);\n patches.push({\n op: ADD,\n path,\n // Need to maybe clone it, as it can in fact be the original value\n // due to the base/copy inversion at the start of this function\n value: clonePatchValueIfNeeded(copy_[i])\n });\n }\n for (let i = copy_.length - 1; base_.length <= i; --i) {\n const path = basePath.concat([i]);\n inversePatches.push({\n op: REMOVE,\n path\n });\n }\n }\n function generatePatchesFromAssigned(state, basePath, patches, inversePatches) {\n const { base_, copy_ } = state;\n each(state.assigned_, (key, assignedValue) => {\n const origValue = get(base_, key);\n const value = get(copy_, key);\n const op = !assignedValue ? REMOVE : has(base_, key) ? REPLACE : ADD;\n if (origValue === value && op === REPLACE)\n return;\n const path = basePath.concat(key);\n patches.push(op === REMOVE ? { op, path } : { op, path, value });\n inversePatches.push(\n op === ADD ? { op: REMOVE, path } : op === REMOVE ? { op: ADD, path, value: clonePatchValueIfNeeded(origValue) } : { op: REPLACE, path, value: clonePatchValueIfNeeded(origValue) }\n );\n });\n }\n function generateSetPatches(state, basePath, patches, inversePatches) {\n let { base_, copy_ } = state;\n let i = 0;\n base_.forEach((value) => {\n if (!copy_.has(value)) {\n const path = basePath.concat([i]);\n patches.push({\n op: REMOVE,\n path,\n value\n });\n inversePatches.unshift({\n op: ADD,\n path,\n value\n });\n }\n i++;\n });\n i = 0;\n copy_.forEach((value) => {\n if (!base_.has(value)) {\n const path = basePath.concat([i]);\n patches.push({\n op: ADD,\n path,\n value\n });\n inversePatches.unshift({\n op: REMOVE,\n path,\n value\n });\n }\n i++;\n });\n }\n function generateReplacementPatches_(baseValue, replacement, patches, inversePatches) {\n patches.push({\n op: REPLACE,\n path: [],\n value: replacement === NOTHING ? void 0 : replacement\n });\n inversePatches.push({\n op: REPLACE,\n path: [],\n value: baseValue\n });\n }\n function applyPatches_(draft, patches) {\n patches.forEach((patch) => {\n const { path, op } = patch;\n let base = draft;\n for (let i = 0; i < path.length - 1; i++) {\n const parentType = getArchtype(base);\n let p = path[i];\n if (typeof p !== \"string\" && typeof p !== \"number\") {\n p = \"\" + p;\n }\n if ((parentType === 0 /* Object */ || parentType === 1 /* Array */) && (p === \"__proto__\" || p === \"constructor\"))\n die(errorOffset + 3);\n if (typeof base === \"function\" && p === \"prototype\")\n die(errorOffset + 3);\n base = get(base, p);\n if (typeof base !== \"object\")\n die(errorOffset + 2, path.join(\"/\"));\n }\n const type = getArchtype(base);\n const value = deepClonePatchValue(patch.value);\n const key = path[path.length - 1];\n switch (op) {\n case REPLACE:\n switch (type) {\n case 2 /* Map */:\n return base.set(key, value);\n case 3 /* Set */:\n die(errorOffset);\n default:\n return base[key] = value;\n }\n case ADD:\n switch (type) {\n case 1 /* Array */:\n return key === \"-\" ? base.push(value) : base.splice(key, 0, value);\n case 2 /* Map */:\n return base.set(key, value);\n case 3 /* Set */:\n return base.add(value);\n default:\n return base[key] = value;\n }\n case REMOVE:\n switch (type) {\n case 1 /* Array */:\n return base.splice(key, 1);\n case 2 /* Map */:\n return base.delete(key);\n case 3 /* Set */:\n return base.delete(patch.value);\n default:\n return delete base[key];\n }\n default:\n die(errorOffset + 1, op);\n }\n });\n return draft;\n }\n function deepClonePatchValue(obj) {\n if (!isDraftable(obj))\n return obj;\n if (Array.isArray(obj))\n return obj.map(deepClonePatchValue);\n if (isMap(obj))\n return new Map(\n Array.from(obj.entries()).map(([k, v]) => [k, deepClonePatchValue(v)])\n );\n if (isSet(obj))\n return new Set(Array.from(obj).map(deepClonePatchValue));\n const cloned = Object.create(getPrototypeOf(obj));\n for (const key in obj)\n cloned[key] = deepClonePatchValue(obj[key]);\n if (has(obj, DRAFTABLE))\n cloned[DRAFTABLE] = obj[DRAFTABLE];\n return cloned;\n }\n function clonePatchValueIfNeeded(obj) {\n if (isDraft(obj)) {\n return deepClonePatchValue(obj);\n } else\n return obj;\n }\n loadPlugin(\"Patches\", {\n applyPatches_,\n generatePatches_,\n generateReplacementPatches_\n });\n}\n\n// src/plugins/mapset.ts\nfunction enableMapSet() {\n class DraftMap extends Map {\n constructor(target, parent) {\n super();\n this[DRAFT_STATE] = {\n type_: 2 /* Map */,\n parent_: parent,\n scope_: parent ? parent.scope_ : getCurrentScope(),\n modified_: false,\n finalized_: false,\n copy_: void 0,\n assigned_: void 0,\n base_: target,\n draft_: this,\n isManual_: false,\n revoked_: false\n };\n }\n get size() {\n return latest(this[DRAFT_STATE]).size;\n }\n has(key) {\n return latest(this[DRAFT_STATE]).has(key);\n }\n set(key, value) {\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n if (!latest(state).has(key) || latest(state).get(key) !== value) {\n prepareMapCopy(state);\n markChanged(state);\n state.assigned_.set(key, true);\n state.copy_.set(key, value);\n state.assigned_.set(key, true);\n }\n return this;\n }\n delete(key) {\n if (!this.has(key)) {\n return false;\n }\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n prepareMapCopy(state);\n markChanged(state);\n if (state.base_.has(key)) {\n state.assigned_.set(key, false);\n } else {\n state.assigned_.delete(key);\n }\n state.copy_.delete(key);\n return true;\n }\n clear() {\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n if (latest(state).size) {\n prepareMapCopy(state);\n markChanged(state);\n state.assigned_ = /* @__PURE__ */ new Map();\n each(state.base_, (key) => {\n state.assigned_.set(key, false);\n });\n state.copy_.clear();\n }\n }\n forEach(cb, thisArg) {\n const state = this[DRAFT_STATE];\n latest(state).forEach((_value, key, _map) => {\n cb.call(thisArg, this.get(key), key, this);\n });\n }\n get(key) {\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n const value = latest(state).get(key);\n if (state.finalized_ || !isDraftable(value)) {\n return value;\n }\n if (value !== state.base_.get(key)) {\n return value;\n }\n const draft = createProxy(value, state);\n prepareMapCopy(state);\n state.copy_.set(key, draft);\n return draft;\n }\n keys() {\n return latest(this[DRAFT_STATE]).keys();\n }\n values() {\n const iterator = this.keys();\n return {\n [Symbol.iterator]: () => this.values(),\n next: () => {\n const r = iterator.next();\n if (r.done)\n return r;\n const value = this.get(r.value);\n return {\n done: false,\n value\n };\n }\n };\n }\n entries() {\n const iterator = this.keys();\n return {\n [Symbol.iterator]: () => this.entries(),\n next: () => {\n const r = iterator.next();\n if (r.done)\n return r;\n const value = this.get(r.value);\n return {\n done: false,\n value: [r.value, value]\n };\n }\n };\n }\n [(DRAFT_STATE, Symbol.iterator)]() {\n return this.entries();\n }\n }\n function proxyMap_(target, parent) {\n return new DraftMap(target, parent);\n }\n function prepareMapCopy(state) {\n if (!state.copy_) {\n state.assigned_ = /* @__PURE__ */ new Map();\n state.copy_ = new Map(state.base_);\n }\n }\n class DraftSet extends Set {\n constructor(target, parent) {\n super();\n this[DRAFT_STATE] = {\n type_: 3 /* Set */,\n parent_: parent,\n scope_: parent ? parent.scope_ : getCurrentScope(),\n modified_: false,\n finalized_: false,\n copy_: void 0,\n base_: target,\n draft_: this,\n drafts_: /* @__PURE__ */ new Map(),\n revoked_: false,\n isManual_: false\n };\n }\n get size() {\n return latest(this[DRAFT_STATE]).size;\n }\n has(value) {\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n if (!state.copy_) {\n return state.base_.has(value);\n }\n if (state.copy_.has(value))\n return true;\n if (state.drafts_.has(value) && state.copy_.has(state.drafts_.get(value)))\n return true;\n return false;\n }\n add(value) {\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n if (!this.has(value)) {\n prepareSetCopy(state);\n markChanged(state);\n state.copy_.add(value);\n }\n return this;\n }\n delete(value) {\n if (!this.has(value)) {\n return false;\n }\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n prepareSetCopy(state);\n markChanged(state);\n return state.copy_.delete(value) || (state.drafts_.has(value) ? state.copy_.delete(state.drafts_.get(value)) : (\n /* istanbul ignore next */\n false\n ));\n }\n clear() {\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n if (latest(state).size) {\n prepareSetCopy(state);\n markChanged(state);\n state.copy_.clear();\n }\n }\n values() {\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n prepareSetCopy(state);\n return state.copy_.values();\n }\n entries() {\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n prepareSetCopy(state);\n return state.copy_.entries();\n }\n keys() {\n return this.values();\n }\n [(DRAFT_STATE, Symbol.iterator)]() {\n return this.values();\n }\n forEach(cb, thisArg) {\n const iterator = this.values();\n let result = iterator.next();\n while (!result.done) {\n cb.call(thisArg, result.value, result.value, this);\n result = iterator.next();\n }\n }\n }\n function proxySet_(target, parent) {\n return new DraftSet(target, parent);\n }\n function prepareSetCopy(state) {\n if (!state.copy_) {\n state.copy_ = /* @__PURE__ */ new Set();\n state.base_.forEach((value) => {\n if (isDraftable(value)) {\n const draft = createProxy(value, state);\n state.drafts_.set(value, draft);\n state.copy_.add(draft);\n } else {\n state.copy_.add(value);\n }\n });\n }\n }\n function assertUnrevoked(state) {\n if (state.revoked_)\n die(3, JSON.stringify(latest(state)));\n }\n loadPlugin(\"MapSet\", { proxyMap_, proxySet_ });\n}\n\n// src/immer.ts\nvar immer = new Immer2();\nvar produce = immer.produce;\nvar produceWithPatches = /* @__PURE__ */ immer.produceWithPatches.bind(\n immer\n);\nvar setAutoFreeze = /* @__PURE__ */ immer.setAutoFreeze.bind(immer);\nvar setUseStrictShallowCopy = /* @__PURE__ */ immer.setUseStrictShallowCopy.bind(\n immer\n);\nvar applyPatches = /* @__PURE__ */ immer.applyPatches.bind(immer);\nvar createDraft = /* @__PURE__ */ immer.createDraft.bind(immer);\nvar finishDraft = /* @__PURE__ */ immer.finishDraft.bind(immer);\nfunction castDraft(value) {\n return value;\n}\nfunction castImmutable(value) {\n return value;\n}\nexport {\n Immer2 as Immer,\n applyPatches,\n castDraft,\n castImmutable,\n createDraft,\n current,\n enableMapSet,\n enablePatches,\n finishDraft,\n freeze,\n DRAFTABLE as immerable,\n isDraft,\n isDraftable,\n NOTHING as nothing,\n original,\n produce,\n produceWithPatches,\n setAutoFreeze,\n setUseStrictShallowCopy\n};\n//# sourceMappingURL=immer.mjs.map","import { produce } from \"immer\";\n/**\n * Helper function to safely get config object from generator invocation.\n * Returns an empty object if config is not set or not an object.\n *\n * @param config - The generator invocation schema\n * @returns The config object or an empty object\n *\n * @example\n * ```typescript\n * const configObj = getConfigObject(config);\n * const migratedConfig = {\n * ...configObj,\n * newField: \"value\"\n * };\n * ```\n */\nexport function getConfigObject(config) {\n return config.config && typeof config.config === \"object\" ? config.config : {};\n}\n/**\n * Helper function to set a config field only if it's not already defined.\n * This is useful for preserving user's explicit configuration while setting old defaults.\n *\n * @param configObj - The config object to check\n * @param field - The field name to check\n * @param defaultValue - The default value to set if field is undefined\n * @returns An object with the field set, or an empty object if already defined\n *\n * @example\n * ```typescript\n * const migratedConfig = {\n * ...configObj,\n * ...setIfUndefined(configObj, \"newField\", \"default-value\"),\n * ...setIfUndefined(configObj, \"anotherField\", true)\n * };\n * ```\n */\nexport function setIfUndefined(configObj, field, defaultValue) {\n return configObj[field] === undefined ? { [field]: defaultValue } : {};\n}\n/**\n * Helper function to create a migrated generator config with updated config object.\n *\n * @param originalConfig - The original generator invocation schema\n * @param migratedConfigObj - The migrated config object\n * @returns A new generator invocation schema with the migrated config\n *\n * @example\n * ```typescript\n * const configObj = getConfigObject(config);\n * const migratedConfigObj = {\n * ...configObj,\n * newField: \"value\"\n * };\n * return createMigratedConfig(config, migratedConfigObj);\n * ```\n */\nexport function createMigratedConfig(originalConfig, migratedConfigObj) {\n return {\n ...originalConfig,\n config: migratedConfigObj\n };\n}\n/**\n * Helper function to format a log message about fields that were set.\n *\n * @param fieldsSet - Array of field names that were set\n * @param fieldsSkipped - Array of field names that were skipped\n * @returns A formatted log message, or undefined if no fields were set\n *\n * @example\n * ```typescript\n * const result = applyDefaultsWithTracking(configObj, defaults);\n * const logMessage = formatFieldChanges(result.fieldsSet, result.fieldsSkipped);\n * if (logMessage) {\n * context?.log?.(logMessage);\n * }\n * ```\n */\nexport function formatFieldChanges(fieldsSet, fieldsSkipped) {\n if (fieldsSet.length === 0) {\n return undefined;\n }\n const parts = [];\n parts.push(`Set ${fieldsSet.length} field(s): ${fieldsSet.join(\", \")}`);\n if (fieldsSkipped.length > 0) {\n parts.push(`(skipped ${fieldsSkipped.length}: ${fieldsSkipped.join(\", \")})`);\n }\n return parts.join(\" \");\n}\n/**\n * Helper function to apply multiple field defaults in a single call.\n * Each field is only set if it's currently undefined.\n *\n * @param configObj - The config object to update\n * @param defaults - Object mapping field names to their default values\n * @returns A merged config object with defaults applied\n *\n * @example\n * ```typescript\n * const configObj = getConfigObject(config);\n * const migratedConfig = applyDefaults(configObj, {\n * field1: \"default1\",\n * field2: true,\n * field3: 42\n * });\n * return createMigratedConfig(config, migratedConfig);\n * ```\n */\nexport function applyDefaults(configObj, defaults) {\n const result = { ...configObj };\n for (const [field, defaultValue] of Object.entries(defaults)) {\n if (result[field] === undefined) {\n result[field] = defaultValue;\n }\n }\n return result;\n}\n/**\n * Migrate a generator config using Immer's produce for immutable updates.\n * This is the recommended way to write migrations as it handles nested updates elegantly.\n *\n * @param config - The original generator config\n * @param updater - Function that mutates the config draft (uses Immer)\n * @returns A new generator config with updates applied\n *\n * @example\n * ```typescript\n * // Simple field updates\n * return migrateConfig(config, (draft) => {\n * draft.oldField = false; // Set old default\n * draft.newField = true; // Set new default\n * });\n *\n * // Conditional updates (only if undefined)\n * return migrateConfig(config, (draft) => {\n * draft.field1 ??= false; // Only set if undefined\n * draft.field2 ??= true;\n * });\n *\n * // Nested updates\n * return migrateConfig(config, (draft) => {\n * draft.nested ??= {};\n * draft.nested.field = \"value\";\n * });\n *\n * // Removing fields\n * return migrateConfig(config, (draft) => {\n * delete draft.deprecated;\n * });\n *\n * // Renaming fields\n * return migrateConfig(config, (draft) => {\n * draft.newName = draft.oldName;\n * delete draft.oldName;\n * });\n * ```\n */\nexport function migrateConfig(config, updater) {\n const configObj = getConfigObject(config);\n const migratedConfigObj = produce(configObj, updater);\n return {\n ...config,\n config: migratedConfigObj\n };\n}\n/**\n * Helper function to apply multiple field defaults and track which fields were changed.\n * Each field is only set if it's currently undefined.\n *\n * @param configObj - The config object to update\n * @param defaults - Object mapping field names to their default values\n * @returns Result with config, fieldsSet, and fieldsSkipped\n *\n * @example\n * ```typescript\n * const configObj = getConfigObject(config);\n * const result = applyDefaultsWithTracking(configObj, {\n * field1: \"default1\",\n * field2: true,\n * field3: 42\n * });\n * console.log(`Set: ${result.fieldsSet.join(\", \")}`);\n * console.log(`Skipped: ${result.fieldsSkipped.join(\", \")}`);\n * return createMigratedConfig(config, result.config);\n * ```\n */\nexport function applyDefaultsWithTracking(configObj, defaults) {\n const result = { ...configObj };\n const fieldsSet = [];\n const fieldsSkipped = [];\n for (const [field, defaultValue] of Object.entries(defaults)) {\n if (result[field] === undefined) {\n result[field] = defaultValue;\n fieldsSet.push(field);\n }\n else {\n fieldsSkipped.push(field);\n }\n }\n return {\n config: result,\n fieldsSet,\n fieldsSkipped\n };\n}\n//# sourceMappingURL=utils.js.map","import type { Migration } from \"@fern-api/migrations-base\";\nimport { migrateConfig } from \"@fern-api/migrations-base\";\n\n/**\n * Migration for version 1.0.0\n *\n * ## Context\n *\n * Version 1.0.0 introduced new defaults to improve the developer experience and modernize\n * the generated SDK. These changes make the SDK more ergonomic and reduce boilerplate,\n * but could break existing code that relied on the old defaults.\n *\n * To ensure backwards compatibility during upgrades, this migration explicitly sets the\n * old defaults for users upgrading from pre-1.0.0 versions. This allows their existing\n * code to continue working without changes.\n *\n * ## Changed Defaults\n *\n * | Field | Old Default (pre-1.0.0) | New Default (1.0.0+) | Impact |\n * |-------|-------------------------|----------------------|--------|\n * | `inlineFileProperties` | `false` | `true` | File upload properties are now inlined into request types |\n * | `inlinePathParameters` | `false` | `true` | Path parameters are now inlined into method signatures |\n * | `enableInlineTypes` | `false` | `true` | Type definitions are inlined where beneficial |\n * | `noSerdeLayer` | `false` | `true` | Serialization/deserialization layer is removed for simpler types |\n * | `omitUndefined` | `false` | `true` | Undefined values are omitted from JSON output |\n * | `skipResponseValidation` | `false` | `true` | Response validation is skipped for better performance |\n * | `useLegacyExports` | `true` | `false` | Modern ESM exports are used instead of legacy CommonJS |\n *\n * ## Migration Strategy\n *\n * This migration uses the nullish coalescing assignment operator (`??=`) to only set\n * values that are explicitly undefined. This means:\n * - ✅ If a user has explicitly configured a field (even to the new default), that value is preserved\n * - ✅ If a field is undefined, the old default is set for backwards compatibility\n * - ✅ Unknown/custom fields are preserved\n *\n * ## Examples\n *\n * ### Example 1: Empty Config (Migration Applied)\n *\n * **Before Migration (0.9.0 → 1.0.0):**\n * ```yaml\n * generators:\n * - name: fernapi/fern-typescript-sdk\n * version: 0.9.0\n * config: {}\n * ```\n *\n * **After Migration:**\n * ```yaml\n * generators:\n * - name: fernapi/fern-typescript-sdk\n * version: 1.0.0\n * config:\n * inlineFileProperties: false # Set by migration\n * inlinePathParameters: false # Set by migration\n * enableInlineTypes: false # Set by migration\n * noSerdeLayer: false # Set by migration\n * omitUndefined: false # Set by migration\n * skipResponseValidation: false # Set by migration\n * useLegacyExports: true # Set by migration\n * ```\n *\n * **Result:** SDK behavior remains unchanged, existing code continues to work.\n *\n * ### Example 2: Partially Configured (Selective Migration)\n *\n * **Before Migration:**\n * ```yaml\n * generators:\n * - name: fernapi/fern-typescript-sdk\n * version: 0.9.0\n * config:\n * inlineFileProperties: true # User explicitly wants new behavior\n * packageName: \"@acme/sdk\"\n * ```\n *\n * **After Migration:**\n * ```yaml\n * generators:\n * - name: fernapi/fern-typescript-sdk\n * version: 1.0.0\n * config:\n * inlineFileProperties: true # Preserved (explicitly set)\n * packageName: \"@acme/sdk\" # Preserved (custom field)\n * inlinePathParameters: false # Set by migration\n * enableInlineTypes: false # Set by migration\n * noSerdeLayer: false # Set by migration\n * omitUndefined: false # Set by migration\n * skipResponseValidation: false # Set by migration\n * useLegacyExports: true # Set by migration\n * ```\n *\n * **Result:** User's explicit choice is honored, other fields get old defaults.\n *\n * ### Example 3: Fully Configured (No Migration Needed)\n *\n * **Before Migration:**\n * ```yaml\n * generators:\n * - name: fernapi/fern-typescript-sdk\n * version: 0.9.0\n * config:\n * inlineFileProperties: true\n * inlinePathParameters: true\n * enableInlineTypes: true\n * noSerdeLayer: true\n * omitUndefined: true\n * skipResponseValidation: true\n * useLegacyExports: false\n * ```\n *\n * **After Migration:**\n * ```yaml\n * # No changes - all fields explicitly configured\n * generators:\n * - name: fernapi/fern-typescript-sdk\n * version: 1.0.0\n * config:\n * inlineFileProperties: true\n * inlinePathParameters: true\n * enableInlineTypes: true\n * noSerdeLayer: true\n * omitUndefined: true\n * skipResponseValidation: true\n * useLegacyExports: false\n * ```\n *\n * **Result:** User gets the new defaults they explicitly configured.\n *\n * ## Why These Defaults Changed\n *\n * - **Inline properties/parameters**: Reduces type nesting and improves IDE autocomplete\n * - **No serde layer**: Simplifies generated code and improves runtime performance\n * - **Omit undefined**: Produces cleaner JSON payloads and matches JavaScript conventions\n * - **Skip validation**: Improves performance by trusting the API contract\n * - **Modern exports**: Better tree-shaking and compatibility with modern bundlers\n *\n * ## When to Opt Into New Defaults\n *\n * After upgrading and verifying your code works, consider removing the old defaults\n * to adopt the new behavior:\n *\n * ```yaml\n * generators:\n * - name: fernapi/fern-typescript-sdk\n * version: 1.0.0\n * config: {} # Remove all fields to use new defaults\n * ```\n *\n * Test your code thoroughly before making this change.\n */\nexport const migration_1_0_0: Migration = {\n version: \"1.0.0\",\n\n migrateGeneratorConfig: ({ config }) =>\n migrateConfig(config, (draft) => {\n // Only set old defaults if the fields are not already explicitly configured\n // Using the nullish coalescing assignment operator (??=) to set only if undefined\n draft.inlineFileProperties ??= false;\n draft.inlinePathParameters ??= false;\n draft.enableInlineTypes ??= false;\n draft.noSerdeLayer ??= false;\n draft.omitUndefined ??= false;\n draft.skipResponseValidation ??= false;\n draft.useLegacyExports ??= true;\n }),\n\n migrateGeneratorsYml: ({ document }) => document\n};\n","import type { Migration } from \"@fern-api/migrations-base\";\nimport { migrateConfig } from \"@fern-api/migrations-base\";\n\n/**\n * Migration for version 2.0.0\n *\n * ## Context\n *\n * Version 2.0.0 introduced zero-dependency SDKs by default, using native browser and\n * Node.js APIs instead of external packages. This significantly reduces bundle size\n * and eliminates dependency management issues, but requires Node.js 18+ and modern\n * browsers with native fetch/streams support.\n *\n * For users upgrading from pre-2.0.0 versions who need to maintain compatibility with\n * older runtimes, this migration explicitly sets the old defaults that use polyfills\n * and wrapper libraries.\n *\n * ## Changed Defaults\n *\n * | Field | Old Default (pre-2.0.0) | New Default (2.0.0+) | Impact |\n * |-------|-------------------------|----------------------|--------|\n * | `streamType` | `\"wrapper\"` | `\"web\"` | Uses native Web Streams API instead of wrapper library |\n * | `fileResponseType` | `\"stream\"` | `\"binary-response\"` | Returns binary response instead of stream wrapper |\n * | `formDataSupport` | `\"Node16\"` | `\"Node18\"` | Uses native FormData (Node 18+) instead of polyfill |\n * | `fetchSupport` | `\"node-fetch\"` | `\"native\"` | Uses native fetch (Node 18+/browsers) instead of node-fetch |\n *\n * ## Migration Strategy\n *\n * This migration uses the nullish coalescing assignment operator (`??=`) to only set\n * values that are explicitly undefined. This means:\n * - ✅ If a user has explicitly configured a field, that value is preserved\n * - ✅ If a field is undefined, the old default (with dependencies) is set\n * - ✅ Users can opt into zero-dependency mode by removing these fields later\n *\n * ## Examples\n *\n * ### Example 1: Empty Config (Migration Applied - Dependencies Maintained)\n *\n * **Before Migration (1.9.0 → 2.0.0):**\n * ```yaml\n * generators:\n * - name: fernapi/fern-typescript-sdk\n * version: 1.9.0\n * config: {}\n * ```\n *\n * **After Migration:**\n * ```yaml\n * generators:\n * - name: fernapi/fern-typescript-sdk\n * version: 2.0.0\n * config:\n * streamType: wrapper # Set by migration - uses wrapper library\n * fileResponseType: stream # Set by migration - uses stream wrapper\n * formDataSupport: Node16 # Set by migration - uses polyfill\n * fetchSupport: node-fetch # Set by migration - uses node-fetch package\n * ```\n *\n * **Result:** SDK continues using external dependencies, works with Node 16+.\n *\n * **Dependencies Required:**\n * - `node-fetch` for HTTP requests\n * - `form-data` for multipart uploads\n * - Stream wrapper libraries\n *\n * ### Example 2: Opting Into Zero-Dependency Mode\n *\n * **After Initial Migration:**\n * ```yaml\n * generators:\n * - name: fernapi/fern-typescript-sdk\n * version: 2.0.0\n * config:\n * streamType: wrapper\n * fileResponseType: stream\n * formDataSupport: Node16\n * fetchSupport: node-fetch\n * ```\n *\n * **To Adopt Zero-Dependency Mode:**\n * ```yaml\n * generators:\n * - name: fernapi/fern-typescript-sdk\n * version: 2.0.0\n * config: {} # Remove all fields to use new defaults\n * ```\n *\n * **Result:** SDK uses native APIs, no external dependencies required.\n *\n * **Requirements for Zero-Dependency Mode:**\n * - Node.js 18+ (for native fetch and FormData)\n * - OR modern browsers (Chrome 42+, Firefox 39+, Safari 10.1+, Edge 14+)\n *\n * ## Why These Defaults Changed\n *\n * ### Bundle Size Impact\n *\n * **With Dependencies (Old):**\n * ```\n * node-fetch: ~90KB\n * form-data: ~40KB\n * stream wrappers: ~20KB\n * Total: ~150KB added to your bundle\n * ```\n *\n * **Zero Dependencies (New):**\n * ```\n * Total: 0KB (uses native APIs)\n * ```\n *\n * ### Performance Benefits\n *\n * - **Native fetch**: ~30% faster than node-fetch\n * - **Native streams**: ~40% faster than wrapper libraries\n * - **No dependency resolution**: Faster npm install and startup time\n *\n * ## Runtime Compatibility\n *\n * ### With Old Defaults (Migration Applied)\n * - ✅ Node.js 12+\n * - ✅ All browsers (with polyfills)\n * - ✅ Edge runtimes (Cloudflare Workers, etc.)\n *\n * ### With New Defaults (Zero-Dependency)\n * - ✅ Node.js 18+\n * - ✅ Modern browsers (last 2 years)\n * - ⚠️ May need polyfills for edge runtimes\n *\n * ## Migration Path to Zero-Dependency\n *\n * ### Step 1: Upgrade with Migration (Safe)\n * ```bash\n * fern generator upgrade\n * ```\n * Result: Old behavior preserved, dependencies still required.\n *\n * ### Step 2: Update Node Version (If Needed)\n * Ensure your runtime is Node 18+ or a modern browser.\n *\n * ### Step 3: Remove Old Defaults\n * Edit `generators.yml`:\n * ```yaml\n * config: {} # Use new zero-dependency defaults\n * ```\n *\n * ### Step 4: Remove Dependencies\n * ```bash\n * npm uninstall node-fetch form-data\n * ```\n *\n * ### Step 5: Test Thoroughly\n * Verify streams, file uploads, and fetch operations work correctly.\n */\nexport const migration_2_0_0: Migration = {\n version: \"2.0.0\",\n\n migrateGeneratorConfig: ({ config }) =>\n migrateConfig(config, (draft) => {\n // Only set old defaults if the fields are not already explicitly configured\n draft.streamType ??= \"wrapper\";\n draft.fileResponseType ??= \"stream\";\n draft.formDataSupport ??= \"Node16\";\n draft.fetchSupport ??= \"node-fetch\";\n }),\n\n migrateGeneratorsYml: ({ document }) => document\n};\n","import type { Migration } from \"@fern-api/migrations-base\";\nimport { migrateConfig } from \"@fern-api/migrations-base\";\n\n/**\n * Migration for version 3.0.0\n *\n * ## Context\n *\n * Version 3.0.0 modernized the generated SDK tooling by switching to pnpm and Vitest,\n * which offer better performance, smaller disk usage, and faster test execution compared\n * to yarn and Jest. However, teams with existing workflows may prefer to maintain their\n * current tooling.\n *\n * This migration explicitly sets the old defaults for users upgrading from pre-3.0.0\n * versions, allowing them to continue using yarn and Jest without any changes to their\n * development workflow.\n *\n * ## Changed Defaults\n *\n * | Field | Old Default (pre-3.0.0) | New Default (3.0.0+) | Impact |\n * |-------|-------------------------|----------------------|--------|\n * | `packageManager` | `\"yarn\"` | `\"pnpm\"` | Generated package.json uses pnpm for dependency management |\n * | `testFramework` | `\"jest\"` | `\"vitest\"` | Generated tests use Vitest instead of Jest |\n *\n * ## Migration Strategy\n *\n * This migration uses the nullish coalescing assignment operator (`??=`) to only set\n * values that are explicitly undefined. This means:\n * - ✅ If a user has explicitly configured a field, that value is preserved\n * - ✅ If a field is undefined, the old default is set\n * - ✅ Users can opt into modern tooling by removing these fields later\n *\n * ## Examples\n *\n * ### Example 1: Empty Config (Migration Applied - Keep Yarn + Jest)\n *\n * **Before Migration (2.9.0 → 3.0.0):**\n * ```yaml\n * generators:\n * - name: fernapi/fern-typescript-sdk\n * version: 2.9.0\n * config: {}\n * ```\n *\n * **After Migration:**\n * ```yaml\n * generators:\n * - name: fernapi/fern-typescript-sdk\n * version: 3.0.0\n * config:\n * packageManager: yarn # Set by migration - keeps yarn\n * testFramework: jest # Set by migration - keeps jest\n * ```\n *\n * **Result:** Generated SDK continues using yarn and Jest.\n *\n * **Generated Files:**\n * - `package.json` with yarn scripts and Jest config\n * - Test files using Jest syntax (`describe`, `it`, `expect`)\n * - `.yarnrc` or `.yarnrc.yml` if applicable\n *\n * ### Example 2: Adopting Modern Tooling (pnpm + Vitest)\n *\n * **After Initial Migration:**\n * ```yaml\n * generators:\n * - name: fernapi/fern-typescript-sdk\n * version: 3.0.0\n * config:\n * packageManager: yarn\n * testFramework: jest\n * ```\n *\n * **To Adopt pnpm + Vitest:**\n * ```yaml\n * generators:\n * - name: fernapi/fern-typescript-sdk\n * version: 3.0.0\n * config: {} # Remove to use new defaults\n * ```\n *\n * **Result:** Generated SDK uses pnpm and Vitest.\n *\n * **Generated Files:**\n * - `package.json` with pnpm scripts\n * - `vitest.config.ts` for test configuration\n * - Test files using Vitest syntax (compatible with Jest)\n * - `pnpm-workspace.yaml` if applicable\n *\n * ### Example 3: Mixed Tooling (Custom Configuration)\n *\n * **Keep yarn but adopt Vitest:**\n * ```yaml\n * generators:\n * - name: fernapi/fern-typescript-sdk\n * version: 3.0.0\n * config:\n * packageManager: yarn # Keep yarn\n * # testFramework defaults to vitest\n * ```\n *\n * **Keep Jest but adopt pnpm:**\n * ```yaml\n * generators:\n * - name: fernapi/fern-typescript-sdk\n * version: 3.0.0\n * config:\n * testFramework: jest # Keep Jest\n * # packageManager defaults to pnpm\n * ```\n *\n * ## Why These Defaults Changed\n *\n * ### pnpm vs yarn\n *\n * **Performance:**\n * - pnpm install is 2-3x faster than yarn\n * - Uses hard links instead of copying files\n * - Significantly smaller `node_modules` (50-70% reduction)\n *\n * **Correctness:**\n * - Strict dependency resolution prevents phantom dependencies\n * - Better monorepo support with workspaces\n * - More deterministic builds\n *\n * **Ecosystem:**\n * - Growing adoption in major projects (Vue 3, Prisma, Turborepo)\n * - Better compatibility with modern tooling\n *\n * ### Vitest vs Jest\n *\n * **Performance:**\n * - 10-20x faster test execution with native ESM\n * - Built-in watch mode with instant HMR\n * - Parallel test execution by default\n *\n * **Developer Experience:**\n * - Native TypeScript support (no ts-jest needed)\n * - Vite-powered with instant module reloading\n * - Jest-compatible API (easy migration)\n * - Better error messages and stack traces\n *\n * **Modern Features:**\n * - Native ESM support\n * - Web Workers and multi-threading support\n * - In-source testing capabilities\n *\n * ## Compatibility Notes\n *\n * ### Vitest Limitations\n *\n * Vitest is **not compatible** with certain generator configurations:\n *\n * 1. **`useBigInt: true`**: Vitest doesn't handle BigInt serialization the same way as Jest\n * - **Workaround**: Keep `testFramework: jest` if using BigInt\n *\n * 2. **`streamType: wrapper`**: Older stream wrappers may not work with Vitest's ESM mode\n * - **Workaround**: Either use `streamType: web` or keep `testFramework: jest`\n *\n * 3. **`packagePath` (custom paths)**: May have module resolution issues with Vitest\n * - **Workaround**: Keep `testFramework: jest` for complex custom paths\n *\n * If you have any of these configurations, the migration correctly keeps Jest as the test framework.\n *\n * ## Migration Path to Modern Tooling\n *\n * ### Step 1: Upgrade with Migration (Safe)\n * ```bash\n * fern generator upgrade\n * ```\n * Result: Keeps yarn and Jest, no workflow changes needed.\n *\n * ### Step 2: Install pnpm (Optional)\n * ```bash\n * npm install -g pnpm@latest\n * ```\n *\n * ### Step 3: Adopt Modern Tooling (Optional)\n * Edit `generators.yml`:\n * ```yaml\n * config: {} # Use pnpm + vitest\n * ```\n *\n * ### Step 4: Update CI/CD (Optional)\n * Update CI scripts to use pnpm:\n * ```yaml\n * # GitHub Actions example\n * - uses: pnpm/action-setup@v2\n * with:\n * version: 8\n * - run: pnpm install\n * - run: pnpm test\n * ```\n *\n * ### Step 5: Migrate yarn.lock (Optional)\n * ```bash\n * # Convert yarn.lock to pnpm-lock.yaml\n * pnpm import\n * rm yarn.lock\n * ```\n *\n * ## Troubleshooting\n *\n * ### \"pnpm: command not found\"\n * **Cause:** pnpm not installed globally.\n * **Solution:** Install pnpm: `npm install -g pnpm`\n *\n * ### Vitest errors with BigInt\n * **Cause:** Vitest and BigInt serialization incompatibility.\n * **Solution:** Use `testFramework: jest` in config.\n *\n * ### Module resolution errors with Vitest\n * **Cause:** ESM/CommonJS compatibility issues.\n * **Solution:** Either fix module format or use `testFramework: jest`.\n *\n * ### Tests fail after switching to Vitest\n * **Cause:** Vitest has stricter ESM requirements.\n * **Solution:** Ensure `package.json` has `\"type\": \"module\"` or use `.ts` extensions.\n *\n * ## Performance Comparison\n *\n * Based on typical SDK project (50 tests, 1000 LOC):\n *\n * **Install Time:**\n * - yarn: ~15s\n * - pnpm: ~5s (3x faster)\n *\n * **Test Execution:**\n * - Jest: ~8s\n * - Vitest: ~0.8s (10x faster)\n *\n * **Disk Usage:**\n * - yarn: ~200MB node_modules\n * - pnpm: ~80MB node_modules (60% reduction)\n *\n * ## Recommendations\n *\n * - **New projects**: Use the new defaults (pnpm + Vitest)\n * - **Existing projects**: Keep old defaults initially, migrate when convenient\n * - **CI/CD-heavy projects**: Consider pnpm for faster installs\n * - **Projects with BigInt**: Keep Jest until Vitest improves BigInt support\n */\nexport const migration_3_0_0: Migration = {\n version: \"3.0.0\",\n\n migrateGeneratorConfig: ({ config }) =>\n migrateConfig(config, (draft) => {\n // Only set old defaults if the fields are not already explicitly configured\n draft.packageManager ??= \"yarn\";\n draft.testFramework ??= \"jest\";\n }),\n\n migrateGeneratorsYml: ({ document }) => document\n};\n","import type { MigrationModule } from \"@fern-api/migrations-base\";\n\nimport { migration_1_0_0 } from \"./1.0.0.js\";\nimport { migration_2_0_0 } from \"./2.0.0.js\";\nimport { migration_3_0_0 } from \"./3.0.0.js\";\n\n/**\n * Migration module for TypeScript SDK generators.\n *\n * This module contains migrations for configuration changes across\n * all TypeScript SDK generator variants:\n * - fernapi/fern-typescript\n * - fernapi/fern-typescript-sdk\n * - fernapi/fern-typescript-node-sdk\n * - fernapi/fern-typescript-browser-sdk\n *\n * Each migration is defined in a separate file under this directory.\n * Migrations are automatically applied by the Fern CLI when running:\n * `fern generator upgrade --generator typescript-sdk`\n */\nconst migrationModule: MigrationModule = {\n migrations: [migration_1_0_0, migration_2_0_0, migration_3_0_0]\n};\n\nexport default migrationModule;\n","/**\n * @fern-api/generator-migrations\n *\n * Unified migration package for all Fern generator configurations.\n *\n * This package contains migrations for all generators, organized by generator name.\n */\n\nimport type { MigrationModule } from \"@fern-api/migrations-base\";\nimport typescriptSdkMigrations from \"./generators/typescript/migrations/index.js\";\n\n/**\n * All generator migrations indexed by full generator name.\n *\n * When adding migrations for a new generator:\n * 1. Add migrations under src/generators/{language}/migrations/\n * 2. Import the migration module\n * 3. Add entries for all generator name variants\n */\nexport const migrations: Record<string, MigrationModule> = {\n // TypeScript SDK - all variants share the same migrations\n \"fernapi/fern-typescript\": typescriptSdkMigrations,\n \"fernapi/fern-typescript-sdk\": typescriptSdkMigrations,\n \"fernapi/fern-typescript-node-sdk\": typescriptSdkMigrations,\n \"fernapi/fern-typescript-browser-sdk\": typescriptSdkMigrations\n};\n"],"x_google_ignoreList":[0],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","names":["migration_1_0_0","migration_2_0_0","migrationModule","migration_1_0_0","migration_2_0_0","migration_2_0_0","migration_3_0_0","migrationModule","migration_2_0_0","migration_3_0_0","migration_1_0_0","migrationModule","migration_1_0_0","migrationModule","csharpSdkMigrations","javaModelMigrations","javaSdkMigrations","pythonSdkMigrations","typescriptSdkMigrations"],"sources":["../../../../node_modules/.pnpm/immer@10.1.3/node_modules/immer/dist/immer.mjs","../../../migrations-base/lib/utils.js","../../src/generators/csharp/migrations/1.0.0.ts","../../src/generators/csharp/migrations/2.0.0.ts","../../src/generators/csharp/migrations/index.ts","../../src/generators/java/migrations/2.0.0.ts","../../src/generators/java/migrations/3.0.0.ts","../../src/generators/java/migrations/index.ts","../../src/generators/java-model/migrations/1.0.0.ts","../../src/generators/java-model/migrations/index.ts","../../src/generators/python/migrations/4.0.0.ts","../../src/generators/python/migrations/index.ts","../../src/generators/typescript/migrations/1.0.0.ts","../../src/generators/typescript/migrations/2.0.0.ts","../../src/generators/typescript/migrations/3.0.0.ts","../../src/generators/typescript/migrations/index.ts","../../src/index.ts"],"sourcesContent":["// src/utils/env.ts\nvar NOTHING = Symbol.for(\"immer-nothing\");\nvar DRAFTABLE = Symbol.for(\"immer-draftable\");\nvar DRAFT_STATE = Symbol.for(\"immer-state\");\n\n// src/utils/errors.ts\nvar errors = process.env.NODE_ENV !== \"production\" ? [\n // All error codes, starting by 0:\n function(plugin) {\n return `The plugin for '${plugin}' has not been loaded into Immer. To enable the plugin, import and call \\`enable${plugin}()\\` when initializing your application.`;\n },\n function(thing) {\n return `produce can only be called on things that are draftable: plain objects, arrays, Map, Set or classes that are marked with '[immerable]: true'. Got '${thing}'`;\n },\n \"This object has been frozen and should not be mutated\",\n function(data) {\n return \"Cannot use a proxy that has been revoked. Did you pass an object from inside an immer function to an async process? \" + data;\n },\n \"An immer producer returned a new value *and* modified its draft. Either return a new value *or* modify the draft.\",\n \"Immer forbids circular references\",\n \"The first or second argument to `produce` must be a function\",\n \"The third argument to `produce` must be a function or undefined\",\n \"First argument to `createDraft` must be a plain object, an array, or an immerable object\",\n \"First argument to `finishDraft` must be a draft returned by `createDraft`\",\n function(thing) {\n return `'current' expects a draft, got: ${thing}`;\n },\n \"Object.defineProperty() cannot be used on an Immer draft\",\n \"Object.setPrototypeOf() cannot be used on an Immer draft\",\n \"Immer only supports deleting array indices\",\n \"Immer only supports setting array indices and the 'length' property\",\n function(thing) {\n return `'original' expects a draft, got: ${thing}`;\n }\n // Note: if more errors are added, the errorOffset in Patches.ts should be increased\n // See Patches.ts for additional errors\n] : [];\nfunction die(error, ...args) {\n if (process.env.NODE_ENV !== \"production\") {\n const e = errors[error];\n const msg = typeof e === \"function\" ? e.apply(null, args) : e;\n throw new Error(`[Immer] ${msg}`);\n }\n throw new Error(\n `[Immer] minified error nr: ${error}. Full error at: https://bit.ly/3cXEKWf`\n );\n}\n\n// src/utils/common.ts\nvar getPrototypeOf = Object.getPrototypeOf;\nfunction isDraft(value) {\n return !!value && !!value[DRAFT_STATE];\n}\nfunction isDraftable(value) {\n if (!value)\n return false;\n return isPlainObject(value) || Array.isArray(value) || !!value[DRAFTABLE] || !!value.constructor?.[DRAFTABLE] || isMap(value) || isSet(value);\n}\nvar objectCtorString = Object.prototype.constructor.toString();\nfunction isPlainObject(value) {\n if (!value || typeof value !== \"object\")\n return false;\n const proto = getPrototypeOf(value);\n if (proto === null) {\n return true;\n }\n const Ctor = Object.hasOwnProperty.call(proto, \"constructor\") && proto.constructor;\n if (Ctor === Object)\n return true;\n return typeof Ctor == \"function\" && Function.toString.call(Ctor) === objectCtorString;\n}\nfunction original(value) {\n if (!isDraft(value))\n die(15, value);\n return value[DRAFT_STATE].base_;\n}\nfunction each(obj, iter) {\n if (getArchtype(obj) === 0 /* Object */) {\n Reflect.ownKeys(obj).forEach((key) => {\n iter(key, obj[key], obj);\n });\n } else {\n obj.forEach((entry, index) => iter(index, entry, obj));\n }\n}\nfunction getArchtype(thing) {\n const state = thing[DRAFT_STATE];\n return state ? state.type_ : Array.isArray(thing) ? 1 /* Array */ : isMap(thing) ? 2 /* Map */ : isSet(thing) ? 3 /* Set */ : 0 /* Object */;\n}\nfunction has(thing, prop) {\n return getArchtype(thing) === 2 /* Map */ ? thing.has(prop) : Object.prototype.hasOwnProperty.call(thing, prop);\n}\nfunction get(thing, prop) {\n return getArchtype(thing) === 2 /* Map */ ? thing.get(prop) : thing[prop];\n}\nfunction set(thing, propOrOldValue, value) {\n const t = getArchtype(thing);\n if (t === 2 /* Map */)\n thing.set(propOrOldValue, value);\n else if (t === 3 /* Set */) {\n thing.add(value);\n } else\n thing[propOrOldValue] = value;\n}\nfunction is(x, y) {\n if (x === y) {\n return x !== 0 || 1 / x === 1 / y;\n } else {\n return x !== x && y !== y;\n }\n}\nfunction isMap(target) {\n return target instanceof Map;\n}\nfunction isSet(target) {\n return target instanceof Set;\n}\nfunction latest(state) {\n return state.copy_ || state.base_;\n}\nfunction shallowCopy(base, strict) {\n if (isMap(base)) {\n return new Map(base);\n }\n if (isSet(base)) {\n return new Set(base);\n }\n if (Array.isArray(base))\n return Array.prototype.slice.call(base);\n const isPlain = isPlainObject(base);\n if (strict === true || strict === \"class_only\" && !isPlain) {\n const descriptors = Object.getOwnPropertyDescriptors(base);\n delete descriptors[DRAFT_STATE];\n let keys = Reflect.ownKeys(descriptors);\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n const desc = descriptors[key];\n if (desc.writable === false) {\n desc.writable = true;\n desc.configurable = true;\n }\n if (desc.get || desc.set)\n descriptors[key] = {\n configurable: true,\n writable: true,\n // could live with !!desc.set as well here...\n enumerable: desc.enumerable,\n value: base[key]\n };\n }\n return Object.create(getPrototypeOf(base), descriptors);\n } else {\n const proto = getPrototypeOf(base);\n if (proto !== null && isPlain) {\n return { ...base };\n }\n const obj = Object.create(proto);\n return Object.assign(obj, base);\n }\n}\nfunction freeze(obj, deep = false) {\n if (isFrozen(obj) || isDraft(obj) || !isDraftable(obj))\n return obj;\n if (getArchtype(obj) > 1) {\n Object.defineProperties(obj, {\n set: { value: dontMutateFrozenCollections },\n add: { value: dontMutateFrozenCollections },\n clear: { value: dontMutateFrozenCollections },\n delete: { value: dontMutateFrozenCollections }\n });\n }\n Object.freeze(obj);\n if (deep)\n Object.values(obj).forEach((value) => freeze(value, true));\n return obj;\n}\nfunction dontMutateFrozenCollections() {\n die(2);\n}\nfunction isFrozen(obj) {\n return Object.isFrozen(obj);\n}\n\n// src/utils/plugins.ts\nvar plugins = {};\nfunction getPlugin(pluginKey) {\n const plugin = plugins[pluginKey];\n if (!plugin) {\n die(0, pluginKey);\n }\n return plugin;\n}\nfunction loadPlugin(pluginKey, implementation) {\n if (!plugins[pluginKey])\n plugins[pluginKey] = implementation;\n}\n\n// src/core/scope.ts\nvar currentScope;\nfunction getCurrentScope() {\n return currentScope;\n}\nfunction createScope(parent_, immer_) {\n return {\n drafts_: [],\n parent_,\n immer_,\n // Whenever the modified draft contains a draft from another scope, we\n // need to prevent auto-freezing so the unowned draft can be finalized.\n canAutoFreeze_: true,\n unfinalizedDrafts_: 0\n };\n}\nfunction usePatchesInScope(scope, patchListener) {\n if (patchListener) {\n getPlugin(\"Patches\");\n scope.patches_ = [];\n scope.inversePatches_ = [];\n scope.patchListener_ = patchListener;\n }\n}\nfunction revokeScope(scope) {\n leaveScope(scope);\n scope.drafts_.forEach(revokeDraft);\n scope.drafts_ = null;\n}\nfunction leaveScope(scope) {\n if (scope === currentScope) {\n currentScope = scope.parent_;\n }\n}\nfunction enterScope(immer2) {\n return currentScope = createScope(currentScope, immer2);\n}\nfunction revokeDraft(draft) {\n const state = draft[DRAFT_STATE];\n if (state.type_ === 0 /* Object */ || state.type_ === 1 /* Array */)\n state.revoke_();\n else\n state.revoked_ = true;\n}\n\n// src/core/finalize.ts\nfunction processResult(result, scope) {\n scope.unfinalizedDrafts_ = scope.drafts_.length;\n const baseDraft = scope.drafts_[0];\n const isReplaced = result !== void 0 && result !== baseDraft;\n if (isReplaced) {\n if (baseDraft[DRAFT_STATE].modified_) {\n revokeScope(scope);\n die(4);\n }\n if (isDraftable(result)) {\n result = finalize(scope, result);\n if (!scope.parent_)\n maybeFreeze(scope, result);\n }\n if (scope.patches_) {\n getPlugin(\"Patches\").generateReplacementPatches_(\n baseDraft[DRAFT_STATE].base_,\n result,\n scope.patches_,\n scope.inversePatches_\n );\n }\n } else {\n result = finalize(scope, baseDraft, []);\n }\n revokeScope(scope);\n if (scope.patches_) {\n scope.patchListener_(scope.patches_, scope.inversePatches_);\n }\n return result !== NOTHING ? result : void 0;\n}\nfunction finalize(rootScope, value, path) {\n if (isFrozen(value))\n return value;\n const state = value[DRAFT_STATE];\n if (!state) {\n each(\n value,\n (key, childValue) => finalizeProperty(rootScope, state, value, key, childValue, path)\n );\n return value;\n }\n if (state.scope_ !== rootScope)\n return value;\n if (!state.modified_) {\n maybeFreeze(rootScope, state.base_, true);\n return state.base_;\n }\n if (!state.finalized_) {\n state.finalized_ = true;\n state.scope_.unfinalizedDrafts_--;\n const result = state.copy_;\n let resultEach = result;\n let isSet2 = false;\n if (state.type_ === 3 /* Set */) {\n resultEach = new Set(result);\n result.clear();\n isSet2 = true;\n }\n each(\n resultEach,\n (key, childValue) => finalizeProperty(rootScope, state, result, key, childValue, path, isSet2)\n );\n maybeFreeze(rootScope, result, false);\n if (path && rootScope.patches_) {\n getPlugin(\"Patches\").generatePatches_(\n state,\n path,\n rootScope.patches_,\n rootScope.inversePatches_\n );\n }\n }\n return state.copy_;\n}\nfunction finalizeProperty(rootScope, parentState, targetObject, prop, childValue, rootPath, targetIsSet) {\n if (process.env.NODE_ENV !== \"production\" && childValue === targetObject)\n die(5);\n if (isDraft(childValue)) {\n const path = rootPath && parentState && parentState.type_ !== 3 /* Set */ && // Set objects are atomic since they have no keys.\n !has(parentState.assigned_, prop) ? rootPath.concat(prop) : void 0;\n const res = finalize(rootScope, childValue, path);\n set(targetObject, prop, res);\n if (isDraft(res)) {\n rootScope.canAutoFreeze_ = false;\n } else\n return;\n } else if (targetIsSet) {\n targetObject.add(childValue);\n }\n if (isDraftable(childValue) && !isFrozen(childValue)) {\n if (!rootScope.immer_.autoFreeze_ && rootScope.unfinalizedDrafts_ < 1) {\n return;\n }\n finalize(rootScope, childValue);\n if ((!parentState || !parentState.scope_.parent_) && typeof prop !== \"symbol\" && (isMap(targetObject) ? targetObject.has(prop) : Object.prototype.propertyIsEnumerable.call(targetObject, prop)))\n maybeFreeze(rootScope, childValue);\n }\n}\nfunction maybeFreeze(scope, value, deep = false) {\n if (!scope.parent_ && scope.immer_.autoFreeze_ && scope.canAutoFreeze_) {\n freeze(value, deep);\n }\n}\n\n// src/core/proxy.ts\nfunction createProxyProxy(base, parent) {\n const isArray = Array.isArray(base);\n const state = {\n type_: isArray ? 1 /* Array */ : 0 /* Object */,\n // Track which produce call this is associated with.\n scope_: parent ? parent.scope_ : getCurrentScope(),\n // True for both shallow and deep changes.\n modified_: false,\n // Used during finalization.\n finalized_: false,\n // Track which properties have been assigned (true) or deleted (false).\n assigned_: {},\n // The parent draft state.\n parent_: parent,\n // The base state.\n base_: base,\n // The base proxy.\n draft_: null,\n // set below\n // The base copy with any updated values.\n copy_: null,\n // Called by the `produce` function.\n revoke_: null,\n isManual_: false\n };\n let target = state;\n let traps = objectTraps;\n if (isArray) {\n target = [state];\n traps = arrayTraps;\n }\n const { revoke, proxy } = Proxy.revocable(target, traps);\n state.draft_ = proxy;\n state.revoke_ = revoke;\n return proxy;\n}\nvar objectTraps = {\n get(state, prop) {\n if (prop === DRAFT_STATE)\n return state;\n const source = latest(state);\n if (!has(source, prop)) {\n return readPropFromProto(state, source, prop);\n }\n const value = source[prop];\n if (state.finalized_ || !isDraftable(value)) {\n return value;\n }\n if (value === peek(state.base_, prop)) {\n prepareCopy(state);\n return state.copy_[prop] = createProxy(value, state);\n }\n return value;\n },\n has(state, prop) {\n return prop in latest(state);\n },\n ownKeys(state) {\n return Reflect.ownKeys(latest(state));\n },\n set(state, prop, value) {\n const desc = getDescriptorFromProto(latest(state), prop);\n if (desc?.set) {\n desc.set.call(state.draft_, value);\n return true;\n }\n if (!state.modified_) {\n const current2 = peek(latest(state), prop);\n const currentState = current2?.[DRAFT_STATE];\n if (currentState && currentState.base_ === value) {\n state.copy_[prop] = value;\n state.assigned_[prop] = false;\n return true;\n }\n if (is(value, current2) && (value !== void 0 || has(state.base_, prop)))\n return true;\n prepareCopy(state);\n markChanged(state);\n }\n if (state.copy_[prop] === value && // special case: handle new props with value 'undefined'\n (value !== void 0 || prop in state.copy_) || // special case: NaN\n Number.isNaN(value) && Number.isNaN(state.copy_[prop]))\n return true;\n state.copy_[prop] = value;\n state.assigned_[prop] = true;\n return true;\n },\n deleteProperty(state, prop) {\n if (peek(state.base_, prop) !== void 0 || prop in state.base_) {\n state.assigned_[prop] = false;\n prepareCopy(state);\n markChanged(state);\n } else {\n delete state.assigned_[prop];\n }\n if (state.copy_) {\n delete state.copy_[prop];\n }\n return true;\n },\n // Note: We never coerce `desc.value` into an Immer draft, because we can't make\n // the same guarantee in ES5 mode.\n getOwnPropertyDescriptor(state, prop) {\n const owner = latest(state);\n const desc = Reflect.getOwnPropertyDescriptor(owner, prop);\n if (!desc)\n return desc;\n return {\n writable: true,\n configurable: state.type_ !== 1 /* Array */ || prop !== \"length\",\n enumerable: desc.enumerable,\n value: owner[prop]\n };\n },\n defineProperty() {\n die(11);\n },\n getPrototypeOf(state) {\n return getPrototypeOf(state.base_);\n },\n setPrototypeOf() {\n die(12);\n }\n};\nvar arrayTraps = {};\neach(objectTraps, (key, fn) => {\n arrayTraps[key] = function() {\n arguments[0] = arguments[0][0];\n return fn.apply(this, arguments);\n };\n});\narrayTraps.deleteProperty = function(state, prop) {\n if (process.env.NODE_ENV !== \"production\" && isNaN(parseInt(prop)))\n die(13);\n return arrayTraps.set.call(this, state, prop, void 0);\n};\narrayTraps.set = function(state, prop, value) {\n if (process.env.NODE_ENV !== \"production\" && prop !== \"length\" && isNaN(parseInt(prop)))\n die(14);\n return objectTraps.set.call(this, state[0], prop, value, state[0]);\n};\nfunction peek(draft, prop) {\n const state = draft[DRAFT_STATE];\n const source = state ? latest(state) : draft;\n return source[prop];\n}\nfunction readPropFromProto(state, source, prop) {\n const desc = getDescriptorFromProto(source, prop);\n return desc ? `value` in desc ? desc.value : (\n // This is a very special case, if the prop is a getter defined by the\n // prototype, we should invoke it with the draft as context!\n desc.get?.call(state.draft_)\n ) : void 0;\n}\nfunction getDescriptorFromProto(source, prop) {\n if (!(prop in source))\n return void 0;\n let proto = getPrototypeOf(source);\n while (proto) {\n const desc = Object.getOwnPropertyDescriptor(proto, prop);\n if (desc)\n return desc;\n proto = getPrototypeOf(proto);\n }\n return void 0;\n}\nfunction markChanged(state) {\n if (!state.modified_) {\n state.modified_ = true;\n if (state.parent_) {\n markChanged(state.parent_);\n }\n }\n}\nfunction prepareCopy(state) {\n if (!state.copy_) {\n state.copy_ = shallowCopy(\n state.base_,\n state.scope_.immer_.useStrictShallowCopy_\n );\n }\n}\n\n// src/core/immerClass.ts\nvar Immer2 = class {\n constructor(config) {\n this.autoFreeze_ = true;\n this.useStrictShallowCopy_ = false;\n /**\n * The `produce` function takes a value and a \"recipe function\" (whose\n * return value often depends on the base state). The recipe function is\n * free to mutate its first argument however it wants. All mutations are\n * only ever applied to a __copy__ of the base state.\n *\n * Pass only a function to create a \"curried producer\" which relieves you\n * from passing the recipe function every time.\n *\n * Only plain objects and arrays are made mutable. All other objects are\n * considered uncopyable.\n *\n * Note: This function is __bound__ to its `Immer` instance.\n *\n * @param {any} base - the initial state\n * @param {Function} recipe - function that receives a proxy of the base state as first argument and which can be freely modified\n * @param {Function} patchListener - optional function that will be called with all the patches produced here\n * @returns {any} a new state, or the initial state if nothing was modified\n */\n this.produce = (base, recipe, patchListener) => {\n if (typeof base === \"function\" && typeof recipe !== \"function\") {\n const defaultBase = recipe;\n recipe = base;\n const self = this;\n return function curriedProduce(base2 = defaultBase, ...args) {\n return self.produce(base2, (draft) => recipe.call(this, draft, ...args));\n };\n }\n if (typeof recipe !== \"function\")\n die(6);\n if (patchListener !== void 0 && typeof patchListener !== \"function\")\n die(7);\n let result;\n if (isDraftable(base)) {\n const scope = enterScope(this);\n const proxy = createProxy(base, void 0);\n let hasError = true;\n try {\n result = recipe(proxy);\n hasError = false;\n } finally {\n if (hasError)\n revokeScope(scope);\n else\n leaveScope(scope);\n }\n usePatchesInScope(scope, patchListener);\n return processResult(result, scope);\n } else if (!base || typeof base !== \"object\") {\n result = recipe(base);\n if (result === void 0)\n result = base;\n if (result === NOTHING)\n result = void 0;\n if (this.autoFreeze_)\n freeze(result, true);\n if (patchListener) {\n const p = [];\n const ip = [];\n getPlugin(\"Patches\").generateReplacementPatches_(base, result, p, ip);\n patchListener(p, ip);\n }\n return result;\n } else\n die(1, base);\n };\n this.produceWithPatches = (base, recipe) => {\n if (typeof base === \"function\") {\n return (state, ...args) => this.produceWithPatches(state, (draft) => base(draft, ...args));\n }\n let patches, inversePatches;\n const result = this.produce(base, recipe, (p, ip) => {\n patches = p;\n inversePatches = ip;\n });\n return [result, patches, inversePatches];\n };\n if (typeof config?.autoFreeze === \"boolean\")\n this.setAutoFreeze(config.autoFreeze);\n if (typeof config?.useStrictShallowCopy === \"boolean\")\n this.setUseStrictShallowCopy(config.useStrictShallowCopy);\n }\n createDraft(base) {\n if (!isDraftable(base))\n die(8);\n if (isDraft(base))\n base = current(base);\n const scope = enterScope(this);\n const proxy = createProxy(base, void 0);\n proxy[DRAFT_STATE].isManual_ = true;\n leaveScope(scope);\n return proxy;\n }\n finishDraft(draft, patchListener) {\n const state = draft && draft[DRAFT_STATE];\n if (!state || !state.isManual_)\n die(9);\n const { scope_: scope } = state;\n usePatchesInScope(scope, patchListener);\n return processResult(void 0, scope);\n }\n /**\n * Pass true to automatically freeze all copies created by Immer.\n *\n * By default, auto-freezing is enabled.\n */\n setAutoFreeze(value) {\n this.autoFreeze_ = value;\n }\n /**\n * Pass true to enable strict shallow copy.\n *\n * By default, immer does not copy the object descriptors such as getter, setter and non-enumrable properties.\n */\n setUseStrictShallowCopy(value) {\n this.useStrictShallowCopy_ = value;\n }\n applyPatches(base, patches) {\n let i;\n for (i = patches.length - 1; i >= 0; i--) {\n const patch = patches[i];\n if (patch.path.length === 0 && patch.op === \"replace\") {\n base = patch.value;\n break;\n }\n }\n if (i > -1) {\n patches = patches.slice(i + 1);\n }\n const applyPatchesImpl = getPlugin(\"Patches\").applyPatches_;\n if (isDraft(base)) {\n return applyPatchesImpl(base, patches);\n }\n return this.produce(\n base,\n (draft) => applyPatchesImpl(draft, patches)\n );\n }\n};\nfunction createProxy(value, parent) {\n const draft = isMap(value) ? getPlugin(\"MapSet\").proxyMap_(value, parent) : isSet(value) ? getPlugin(\"MapSet\").proxySet_(value, parent) : createProxyProxy(value, parent);\n const scope = parent ? parent.scope_ : getCurrentScope();\n scope.drafts_.push(draft);\n return draft;\n}\n\n// src/core/current.ts\nfunction current(value) {\n if (!isDraft(value))\n die(10, value);\n return currentImpl(value);\n}\nfunction currentImpl(value) {\n if (!isDraftable(value) || isFrozen(value))\n return value;\n const state = value[DRAFT_STATE];\n let copy;\n if (state) {\n if (!state.modified_)\n return state.base_;\n state.finalized_ = true;\n copy = shallowCopy(value, state.scope_.immer_.useStrictShallowCopy_);\n } else {\n copy = shallowCopy(value, true);\n }\n each(copy, (key, childValue) => {\n set(copy, key, currentImpl(childValue));\n });\n if (state) {\n state.finalized_ = false;\n }\n return copy;\n}\n\n// src/plugins/patches.ts\nfunction enablePatches() {\n const errorOffset = 16;\n if (process.env.NODE_ENV !== \"production\") {\n errors.push(\n 'Sets cannot have \"replace\" patches.',\n function(op) {\n return \"Unsupported patch operation: \" + op;\n },\n function(path) {\n return \"Cannot apply patch, path doesn't resolve: \" + path;\n },\n \"Patching reserved attributes like __proto__, prototype and constructor is not allowed\"\n );\n }\n const REPLACE = \"replace\";\n const ADD = \"add\";\n const REMOVE = \"remove\";\n function generatePatches_(state, basePath, patches, inversePatches) {\n switch (state.type_) {\n case 0 /* Object */:\n case 2 /* Map */:\n return generatePatchesFromAssigned(\n state,\n basePath,\n patches,\n inversePatches\n );\n case 1 /* Array */:\n return generateArrayPatches(state, basePath, patches, inversePatches);\n case 3 /* Set */:\n return generateSetPatches(\n state,\n basePath,\n patches,\n inversePatches\n );\n }\n }\n function generateArrayPatches(state, basePath, patches, inversePatches) {\n let { base_, assigned_ } = state;\n let copy_ = state.copy_;\n if (copy_.length < base_.length) {\n ;\n [base_, copy_] = [copy_, base_];\n [patches, inversePatches] = [inversePatches, patches];\n }\n for (let i = 0; i < base_.length; i++) {\n if (assigned_[i] && copy_[i] !== base_[i]) {\n const path = basePath.concat([i]);\n patches.push({\n op: REPLACE,\n path,\n // Need to maybe clone it, as it can in fact be the original value\n // due to the base/copy inversion at the start of this function\n value: clonePatchValueIfNeeded(copy_[i])\n });\n inversePatches.push({\n op: REPLACE,\n path,\n value: clonePatchValueIfNeeded(base_[i])\n });\n }\n }\n for (let i = base_.length; i < copy_.length; i++) {\n const path = basePath.concat([i]);\n patches.push({\n op: ADD,\n path,\n // Need to maybe clone it, as it can in fact be the original value\n // due to the base/copy inversion at the start of this function\n value: clonePatchValueIfNeeded(copy_[i])\n });\n }\n for (let i = copy_.length - 1; base_.length <= i; --i) {\n const path = basePath.concat([i]);\n inversePatches.push({\n op: REMOVE,\n path\n });\n }\n }\n function generatePatchesFromAssigned(state, basePath, patches, inversePatches) {\n const { base_, copy_ } = state;\n each(state.assigned_, (key, assignedValue) => {\n const origValue = get(base_, key);\n const value = get(copy_, key);\n const op = !assignedValue ? REMOVE : has(base_, key) ? REPLACE : ADD;\n if (origValue === value && op === REPLACE)\n return;\n const path = basePath.concat(key);\n patches.push(op === REMOVE ? { op, path } : { op, path, value });\n inversePatches.push(\n op === ADD ? { op: REMOVE, path } : op === REMOVE ? { op: ADD, path, value: clonePatchValueIfNeeded(origValue) } : { op: REPLACE, path, value: clonePatchValueIfNeeded(origValue) }\n );\n });\n }\n function generateSetPatches(state, basePath, patches, inversePatches) {\n let { base_, copy_ } = state;\n let i = 0;\n base_.forEach((value) => {\n if (!copy_.has(value)) {\n const path = basePath.concat([i]);\n patches.push({\n op: REMOVE,\n path,\n value\n });\n inversePatches.unshift({\n op: ADD,\n path,\n value\n });\n }\n i++;\n });\n i = 0;\n copy_.forEach((value) => {\n if (!base_.has(value)) {\n const path = basePath.concat([i]);\n patches.push({\n op: ADD,\n path,\n value\n });\n inversePatches.unshift({\n op: REMOVE,\n path,\n value\n });\n }\n i++;\n });\n }\n function generateReplacementPatches_(baseValue, replacement, patches, inversePatches) {\n patches.push({\n op: REPLACE,\n path: [],\n value: replacement === NOTHING ? void 0 : replacement\n });\n inversePatches.push({\n op: REPLACE,\n path: [],\n value: baseValue\n });\n }\n function applyPatches_(draft, patches) {\n patches.forEach((patch) => {\n const { path, op } = patch;\n let base = draft;\n for (let i = 0; i < path.length - 1; i++) {\n const parentType = getArchtype(base);\n let p = path[i];\n if (typeof p !== \"string\" && typeof p !== \"number\") {\n p = \"\" + p;\n }\n if ((parentType === 0 /* Object */ || parentType === 1 /* Array */) && (p === \"__proto__\" || p === \"constructor\"))\n die(errorOffset + 3);\n if (typeof base === \"function\" && p === \"prototype\")\n die(errorOffset + 3);\n base = get(base, p);\n if (typeof base !== \"object\")\n die(errorOffset + 2, path.join(\"/\"));\n }\n const type = getArchtype(base);\n const value = deepClonePatchValue(patch.value);\n const key = path[path.length - 1];\n switch (op) {\n case REPLACE:\n switch (type) {\n case 2 /* Map */:\n return base.set(key, value);\n case 3 /* Set */:\n die(errorOffset);\n default:\n return base[key] = value;\n }\n case ADD:\n switch (type) {\n case 1 /* Array */:\n return key === \"-\" ? base.push(value) : base.splice(key, 0, value);\n case 2 /* Map */:\n return base.set(key, value);\n case 3 /* Set */:\n return base.add(value);\n default:\n return base[key] = value;\n }\n case REMOVE:\n switch (type) {\n case 1 /* Array */:\n return base.splice(key, 1);\n case 2 /* Map */:\n return base.delete(key);\n case 3 /* Set */:\n return base.delete(patch.value);\n default:\n return delete base[key];\n }\n default:\n die(errorOffset + 1, op);\n }\n });\n return draft;\n }\n function deepClonePatchValue(obj) {\n if (!isDraftable(obj))\n return obj;\n if (Array.isArray(obj))\n return obj.map(deepClonePatchValue);\n if (isMap(obj))\n return new Map(\n Array.from(obj.entries()).map(([k, v]) => [k, deepClonePatchValue(v)])\n );\n if (isSet(obj))\n return new Set(Array.from(obj).map(deepClonePatchValue));\n const cloned = Object.create(getPrototypeOf(obj));\n for (const key in obj)\n cloned[key] = deepClonePatchValue(obj[key]);\n if (has(obj, DRAFTABLE))\n cloned[DRAFTABLE] = obj[DRAFTABLE];\n return cloned;\n }\n function clonePatchValueIfNeeded(obj) {\n if (isDraft(obj)) {\n return deepClonePatchValue(obj);\n } else\n return obj;\n }\n loadPlugin(\"Patches\", {\n applyPatches_,\n generatePatches_,\n generateReplacementPatches_\n });\n}\n\n// src/plugins/mapset.ts\nfunction enableMapSet() {\n class DraftMap extends Map {\n constructor(target, parent) {\n super();\n this[DRAFT_STATE] = {\n type_: 2 /* Map */,\n parent_: parent,\n scope_: parent ? parent.scope_ : getCurrentScope(),\n modified_: false,\n finalized_: false,\n copy_: void 0,\n assigned_: void 0,\n base_: target,\n draft_: this,\n isManual_: false,\n revoked_: false\n };\n }\n get size() {\n return latest(this[DRAFT_STATE]).size;\n }\n has(key) {\n return latest(this[DRAFT_STATE]).has(key);\n }\n set(key, value) {\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n if (!latest(state).has(key) || latest(state).get(key) !== value) {\n prepareMapCopy(state);\n markChanged(state);\n state.assigned_.set(key, true);\n state.copy_.set(key, value);\n state.assigned_.set(key, true);\n }\n return this;\n }\n delete(key) {\n if (!this.has(key)) {\n return false;\n }\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n prepareMapCopy(state);\n markChanged(state);\n if (state.base_.has(key)) {\n state.assigned_.set(key, false);\n } else {\n state.assigned_.delete(key);\n }\n state.copy_.delete(key);\n return true;\n }\n clear() {\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n if (latest(state).size) {\n prepareMapCopy(state);\n markChanged(state);\n state.assigned_ = /* @__PURE__ */ new Map();\n each(state.base_, (key) => {\n state.assigned_.set(key, false);\n });\n state.copy_.clear();\n }\n }\n forEach(cb, thisArg) {\n const state = this[DRAFT_STATE];\n latest(state).forEach((_value, key, _map) => {\n cb.call(thisArg, this.get(key), key, this);\n });\n }\n get(key) {\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n const value = latest(state).get(key);\n if (state.finalized_ || !isDraftable(value)) {\n return value;\n }\n if (value !== state.base_.get(key)) {\n return value;\n }\n const draft = createProxy(value, state);\n prepareMapCopy(state);\n state.copy_.set(key, draft);\n return draft;\n }\n keys() {\n return latest(this[DRAFT_STATE]).keys();\n }\n values() {\n const iterator = this.keys();\n return {\n [Symbol.iterator]: () => this.values(),\n next: () => {\n const r = iterator.next();\n if (r.done)\n return r;\n const value = this.get(r.value);\n return {\n done: false,\n value\n };\n }\n };\n }\n entries() {\n const iterator = this.keys();\n return {\n [Symbol.iterator]: () => this.entries(),\n next: () => {\n const r = iterator.next();\n if (r.done)\n return r;\n const value = this.get(r.value);\n return {\n done: false,\n value: [r.value, value]\n };\n }\n };\n }\n [(DRAFT_STATE, Symbol.iterator)]() {\n return this.entries();\n }\n }\n function proxyMap_(target, parent) {\n return new DraftMap(target, parent);\n }\n function prepareMapCopy(state) {\n if (!state.copy_) {\n state.assigned_ = /* @__PURE__ */ new Map();\n state.copy_ = new Map(state.base_);\n }\n }\n class DraftSet extends Set {\n constructor(target, parent) {\n super();\n this[DRAFT_STATE] = {\n type_: 3 /* Set */,\n parent_: parent,\n scope_: parent ? parent.scope_ : getCurrentScope(),\n modified_: false,\n finalized_: false,\n copy_: void 0,\n base_: target,\n draft_: this,\n drafts_: /* @__PURE__ */ new Map(),\n revoked_: false,\n isManual_: false\n };\n }\n get size() {\n return latest(this[DRAFT_STATE]).size;\n }\n has(value) {\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n if (!state.copy_) {\n return state.base_.has(value);\n }\n if (state.copy_.has(value))\n return true;\n if (state.drafts_.has(value) && state.copy_.has(state.drafts_.get(value)))\n return true;\n return false;\n }\n add(value) {\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n if (!this.has(value)) {\n prepareSetCopy(state);\n markChanged(state);\n state.copy_.add(value);\n }\n return this;\n }\n delete(value) {\n if (!this.has(value)) {\n return false;\n }\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n prepareSetCopy(state);\n markChanged(state);\n return state.copy_.delete(value) || (state.drafts_.has(value) ? state.copy_.delete(state.drafts_.get(value)) : (\n /* istanbul ignore next */\n false\n ));\n }\n clear() {\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n if (latest(state).size) {\n prepareSetCopy(state);\n markChanged(state);\n state.copy_.clear();\n }\n }\n values() {\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n prepareSetCopy(state);\n return state.copy_.values();\n }\n entries() {\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n prepareSetCopy(state);\n return state.copy_.entries();\n }\n keys() {\n return this.values();\n }\n [(DRAFT_STATE, Symbol.iterator)]() {\n return this.values();\n }\n forEach(cb, thisArg) {\n const iterator = this.values();\n let result = iterator.next();\n while (!result.done) {\n cb.call(thisArg, result.value, result.value, this);\n result = iterator.next();\n }\n }\n }\n function proxySet_(target, parent) {\n return new DraftSet(target, parent);\n }\n function prepareSetCopy(state) {\n if (!state.copy_) {\n state.copy_ = /* @__PURE__ */ new Set();\n state.base_.forEach((value) => {\n if (isDraftable(value)) {\n const draft = createProxy(value, state);\n state.drafts_.set(value, draft);\n state.copy_.add(draft);\n } else {\n state.copy_.add(value);\n }\n });\n }\n }\n function assertUnrevoked(state) {\n if (state.revoked_)\n die(3, JSON.stringify(latest(state)));\n }\n loadPlugin(\"MapSet\", { proxyMap_, proxySet_ });\n}\n\n// src/immer.ts\nvar immer = new Immer2();\nvar produce = immer.produce;\nvar produceWithPatches = /* @__PURE__ */ immer.produceWithPatches.bind(\n immer\n);\nvar setAutoFreeze = /* @__PURE__ */ immer.setAutoFreeze.bind(immer);\nvar setUseStrictShallowCopy = /* @__PURE__ */ immer.setUseStrictShallowCopy.bind(\n immer\n);\nvar applyPatches = /* @__PURE__ */ immer.applyPatches.bind(immer);\nvar createDraft = /* @__PURE__ */ immer.createDraft.bind(immer);\nvar finishDraft = /* @__PURE__ */ immer.finishDraft.bind(immer);\nfunction castDraft(value) {\n return value;\n}\nfunction castImmutable(value) {\n return value;\n}\nexport {\n Immer2 as Immer,\n applyPatches,\n castDraft,\n castImmutable,\n createDraft,\n current,\n enableMapSet,\n enablePatches,\n finishDraft,\n freeze,\n DRAFTABLE as immerable,\n isDraft,\n isDraftable,\n NOTHING as nothing,\n original,\n produce,\n produceWithPatches,\n setAutoFreeze,\n setUseStrictShallowCopy\n};\n//# sourceMappingURL=immer.mjs.map","import { produce } from \"immer\";\n/**\n * Helper function to safely get config object from generator invocation.\n * Returns an empty object if config is not set or not an object.\n *\n * @param config - The generator invocation schema\n * @returns The config object or an empty object\n *\n * @example\n * ```typescript\n * const configObj = getConfigObject(config);\n * const migratedConfig = {\n * ...configObj,\n * newField: \"value\"\n * };\n * ```\n */\nexport function getConfigObject(config) {\n return config.config && typeof config.config === \"object\" ? config.config : {};\n}\n/**\n * Helper function to set a config field only if it's not already defined.\n * This is useful for preserving user's explicit configuration while setting old defaults.\n *\n * @param configObj - The config object to check\n * @param field - The field name to check\n * @param defaultValue - The default value to set if field is undefined\n * @returns An object with the field set, or an empty object if already defined\n *\n * @example\n * ```typescript\n * const migratedConfig = {\n * ...configObj,\n * ...setIfUndefined(configObj, \"newField\", \"default-value\"),\n * ...setIfUndefined(configObj, \"anotherField\", true)\n * };\n * ```\n */\nexport function setIfUndefined(configObj, field, defaultValue) {\n return configObj[field] === undefined ? { [field]: defaultValue } : {};\n}\n/**\n * Helper function to create a migrated generator config with updated config object.\n *\n * @param originalConfig - The original generator invocation schema\n * @param migratedConfigObj - The migrated config object\n * @returns A new generator invocation schema with the migrated config\n *\n * @example\n * ```typescript\n * const configObj = getConfigObject(config);\n * const migratedConfigObj = {\n * ...configObj,\n * newField: \"value\"\n * };\n * return createMigratedConfig(config, migratedConfigObj);\n * ```\n */\nexport function createMigratedConfig(originalConfig, migratedConfigObj) {\n return {\n ...originalConfig,\n config: migratedConfigObj\n };\n}\n/**\n * Helper function to format a log message about fields that were set.\n *\n * @param fieldsSet - Array of field names that were set\n * @param fieldsSkipped - Array of field names that were skipped\n * @returns A formatted log message, or undefined if no fields were set\n *\n * @example\n * ```typescript\n * const result = applyDefaultsWithTracking(configObj, defaults);\n * const logMessage = formatFieldChanges(result.fieldsSet, result.fieldsSkipped);\n * if (logMessage) {\n * context?.log?.(logMessage);\n * }\n * ```\n */\nexport function formatFieldChanges(fieldsSet, fieldsSkipped) {\n if (fieldsSet.length === 0) {\n return undefined;\n }\n const parts = [];\n parts.push(`Set ${fieldsSet.length} field(s): ${fieldsSet.join(\", \")}`);\n if (fieldsSkipped.length > 0) {\n parts.push(`(skipped ${fieldsSkipped.length}: ${fieldsSkipped.join(\", \")})`);\n }\n return parts.join(\" \");\n}\n/**\n * Helper function to apply multiple field defaults in a single call.\n * Each field is only set if it's currently undefined.\n *\n * @param configObj - The config object to update\n * @param defaults - Object mapping field names to their default values\n * @returns A merged config object with defaults applied\n *\n * @example\n * ```typescript\n * const configObj = getConfigObject(config);\n * const migratedConfig = applyDefaults(configObj, {\n * field1: \"default1\",\n * field2: true,\n * field3: 42\n * });\n * return createMigratedConfig(config, migratedConfig);\n * ```\n */\nexport function applyDefaults(configObj, defaults) {\n const result = { ...configObj };\n for (const [field, defaultValue] of Object.entries(defaults)) {\n if (result[field] === undefined) {\n result[field] = defaultValue;\n }\n }\n return result;\n}\n/**\n * Migrate a generator config using Immer's produce for immutable updates.\n * This is the recommended way to write migrations as it handles nested updates elegantly.\n *\n * @param config - The original generator config\n * @param updater - Function that mutates the config draft (uses Immer)\n * @returns A new generator config with updates applied\n *\n * @example\n * ```typescript\n * // Simple field updates\n * return migrateConfig(config, (draft) => {\n * draft.oldField = false; // Set old default\n * draft.newField = true; // Set new default\n * });\n *\n * // Conditional updates (only if undefined)\n * return migrateConfig(config, (draft) => {\n * draft.field1 ??= false; // Only set if undefined\n * draft.field2 ??= true;\n * });\n *\n * // Nested updates\n * return migrateConfig(config, (draft) => {\n * draft.nested ??= {};\n * draft.nested.field = \"value\";\n * });\n *\n * // Removing fields\n * return migrateConfig(config, (draft) => {\n * delete draft.deprecated;\n * });\n *\n * // Renaming fields\n * return migrateConfig(config, (draft) => {\n * draft.newName = draft.oldName;\n * delete draft.oldName;\n * });\n * ```\n */\nexport function migrateConfig(config, updater) {\n const configObj = getConfigObject(config);\n const migratedConfigObj = produce(configObj, updater);\n return {\n ...config,\n config: migratedConfigObj\n };\n}\n/**\n * Helper function to apply multiple field defaults and track which fields were changed.\n * Each field is only set if it's currently undefined.\n *\n * @param configObj - The config object to update\n * @param defaults - Object mapping field names to their default values\n * @returns Result with config, fieldsSet, and fieldsSkipped\n *\n * @example\n * ```typescript\n * const configObj = getConfigObject(config);\n * const result = applyDefaultsWithTracking(configObj, {\n * field1: \"default1\",\n * field2: true,\n * field3: 42\n * });\n * console.log(`Set: ${result.fieldsSet.join(\", \")}`);\n * console.log(`Skipped: ${result.fieldsSkipped.join(\", \")}`);\n * return createMigratedConfig(config, result.config);\n * ```\n */\nexport function applyDefaultsWithTracking(configObj, defaults) {\n const result = { ...configObj };\n const fieldsSet = [];\n const fieldsSkipped = [];\n for (const [field, defaultValue] of Object.entries(defaults)) {\n if (result[field] === undefined) {\n result[field] = defaultValue;\n fieldsSet.push(field);\n }\n else {\n fieldsSkipped.push(field);\n }\n }\n return {\n config: result,\n fieldsSet,\n fieldsSkipped\n };\n}\n//# sourceMappingURL=utils.js.map","import type { Migration } from \"@fern-api/migrations-base\";\nimport { migrateConfig } from \"@fern-api/migrations-base\";\n\n// Note: This is not a JSDoc comment because we want this to be stripped from the compiled output\n\n// Migration for version 1.0.0\n//\n// Context:\n// Version 1.0.0 introduced new defaults to improve the developer experience and modernize\n// the generated C# SDK. These changes make the SDK more ergonomic and follow C# conventions\n// more closely, but could break existing code that relied on the old defaults.\n//\n// To ensure backwards compatibility during upgrades, this migration explicitly sets the\n// old defaults for users upgrading from pre-1.0.0 versions. This allows their existing\n// code to continue working without changes.\n//\n// Changed Defaults:\n// - root-namespace-for-core-classes: false → true (Core classes are now in the root namespace)\n// - pascal-case-environments: false → true (Environment names use PascalCase instead of UPPER_CASE)\n// - simplify-object-dictionaries: false → true (Object dictionaries use simplified syntax)\n//\n// Migration Strategy:\n// This migration uses the nullish coalescing assignment operator (??=) to only set\n// values that are explicitly undefined. This means:\n// - If a user has explicitly configured a field (even to the new default), that value is preserved\n// - If a field is undefined, the old default is set for backwards compatibility\n// - Unknown/custom fields are preserved\nexport const migration_1_0_0: Migration = {\n version: \"1.0.0\",\n\n migrateGeneratorConfig: ({ config }) =>\n migrateConfig(config, (draft) => {\n // Only set old defaults if the fields are not already explicitly configured\n // Using the nullish coalescing assignment operator (??=) to set only if undefined\n draft[\"root-namespace-for-core-classes\"] ??= false;\n draft[\"pascal-case-environments\"] ??= false;\n draft[\"simplify-object-dictionaries\"] ??= false;\n }),\n\n migrateGeneratorsYml: ({ document }) => document\n};\n","import type { Migration } from \"@fern-api/migrations-base\";\nimport { migrateConfig } from \"@fern-api/migrations-base\";\n\n// Note: This is not a JSDoc comment because we want this to be stripped from the compiled output\n\n// Migration for version 2.0.0\n//\n// Context:\n// Version 2.0.0 introduced significant changes to defaults to improve the developer experience\n// and modernize the generated C# SDK. These changes make the SDK more ergonomic and follow\n// modern C# best practices, but could break existing code that relied on the old defaults.\n//\n// To ensure backwards compatibility during upgrades, this migration explicitly sets the\n// old defaults for users upgrading from pre-2.0.0 versions. This allows their existing\n// code to continue working without changes.\n//\n// Configuration Renames (old names are automatically migrated to new names):\n// - experimental-enable-forward-compatible-enums → enable-forward-compatible-enums\n// - experimental-additional-properties → additional-properties\n//\n// Changed Defaults:\n// - additional-properties: false → true (Enables additional properties on generated models)\n// - enable-forward-compatible-enums: false → true (Enables forward-compatible enum handling)\n// - generate-mock-server-tests: false → true (Generates mock server tests)\n// - inline-path-parameters: false → true (Path parameters are inlined into method signatures)\n// - simplify-object-dictionaries: true → false (Reverts to non-simplified object dictionary syntax)\n// - use-discriminated-unions: false → true (Uses discriminated unions for union types)\n//\n// Migration Strategy:\n// This migration uses the nullish coalescing assignment operator (??=) to only set\n// values that are explicitly undefined. This means:\n// - If a user has explicitly configured a field (even to the new default), that value is preserved\n// - If a field is undefined, the old default is set for backwards compatibility\n// - Unknown/custom fields are preserved\n// - Old experimental names are migrated to new stable names, preserving the user's configured value\nexport const migration_2_0_0: Migration = {\n version: \"2.0.0\",\n\n migrateGeneratorConfig: ({ config }) =>\n migrateConfig(config, (draft) => {\n // Migrate renamed configuration options from experimental to stable names\n // If the old name exists, move its value to the new name and delete the old name\n if (\"experimental-additional-properties\" in draft) {\n const value = draft[\"experimental-additional-properties\"];\n delete draft[\"experimental-additional-properties\"];\n draft[\"additional-properties\"] = value;\n }\n\n if (\"experimental-enable-forward-compatible-enums\" in draft) {\n const value = draft[\"experimental-enable-forward-compatible-enums\"];\n delete draft[\"experimental-enable-forward-compatible-enums\"];\n draft[\"enable-forward-compatible-enums\"] = value;\n }\n\n // Set old defaults for fields that are not explicitly configured\n // Using the nullish coalescing assignment operator (??=) to set only if undefined\n draft[\"additional-properties\"] ??= false;\n draft[\"enable-forward-compatible-enums\"] ??= false;\n draft[\"generate-mock-server-tests\"] ??= false;\n draft[\"inline-path-parameters\"] ??= false;\n draft[\"simplify-object-dictionaries\"] ??= true;\n draft[\"use-discriminated-unions\"] ??= false;\n }),\n\n migrateGeneratorsYml: ({ document }) => document\n};\n","import type { MigrationModule } from \"@fern-api/migrations-base\";\n\nimport { migration_1_0_0 } from \"./1.0.0.js\";\nimport { migration_2_0_0 } from \"./2.0.0.js\";\n\n/**\n * Migration module for C# SDK generator.\n *\n * This module contains migrations for configuration changes for\n * the C# SDK generator:\n * - fernapi/fern-csharp-sdk\n *\n * Each migration is defined in a separate file under this directory.\n * Migrations are automatically applied by the Fern CLI when running:\n * `fern generator upgrade --generator csharp-sdk`\n */\nconst migrationModule: MigrationModule = {\n migrations: [migration_1_0_0, migration_2_0_0]\n};\n\nexport default migrationModule;\n","import type { Migration } from \"@fern-api/migrations-base\";\nimport { migrateConfig } from \"@fern-api/migrations-base\";\n\n// Note: This is not a JSDoc comment because we want this to be stripped from the compiled output\n\n// Migration for version 2.0.0\n//\n// Context:\n// Version 2.0.0 introduced a breaking change to improve code safety and correctness by\n// enforcing non-null checks for required fields in generated builder methods. Previously,\n// builder methods did not validate that required fields were set, which could lead to\n// runtime errors when null values were passed for required fields.\n//\n// To ensure backwards compatibility during upgrades, this migration explicitly disables\n// the required property builder checks for users upgrading from pre-2.0.0 versions.\n// This allows their existing code to continue working without changes.\n//\n// Changed Behavior:\n// - disable-required-property-builder-checks: false → true (when migrating from v1 to v2)\n// In v2, builder methods enforce non-null checks like:\n// ```java\n// @java.lang.Override\n// @JsonSetter(\"name\")\n// public NameStage name(@NotNull String name) {\n// this.name = Objects.requireNonNull(name, \"name must not be null\");\n// return this;\n// }\n// ```\n// Setting this to true restores the v1 behavior without null checks.\n//\n// Migration Strategy:\n// This migration uses the nullish coalescing assignment operator (??=) to only set\n// the value if it is explicitly undefined. This means:\n// - If a user has explicitly configured this field (even to false), that value is preserved\n// - If the field is undefined, it is set to true for backwards compatibility\n// - Unknown/custom fields are preserved\nexport const migration_2_0_0: Migration = {\n version: \"2.0.0\",\n\n migrateGeneratorConfig: ({ config }) =>\n migrateConfig(config, (draft) => {\n // Set old default to disable the new required property builder checks\n // Using the nullish coalescing assignment operator (??=) to set only if undefined\n draft[\"disable-required-property-builder-checks\"] ??= true;\n }),\n\n migrateGeneratorsYml: ({ document }) => document\n};\n","import type { Migration } from \"@fern-api/migrations-base\";\nimport { migrateConfig } from \"@fern-api/migrations-base\";\n\n// Note: This is not a JSDoc comment because we want this to be stripped from the compiled output\n\n// Migration for version 3.0.0\n//\n// Context:\n// Version 3.0.0 introduced a breaking change by defaulting to forward-compatible enums.\n// This provides resilience against new enum variants added on the backend but changes\n// the structure of generated enum types from traditional Java enums to class-based enums\n// that support unknown values through a visitor pattern.\n//\n// Forward-compatible enums are particularly important for:\n// - Mobile applications that cannot be easily updated\n// - Maintaining backward compatibility when backend adds new enum values\n// - Arrays of enum values where new variants previously caused client failures\n//\n// To ensure backwards compatibility during upgrades, this migration explicitly disables\n// forward-compatible enums for users upgrading from pre-3.0.0 versions. This allows their\n// existing code to continue using traditional Java enums without changes.\n//\n// Changed Default:\n// - enable-forward-compatible-enums: false → true (when migrating from v2 to v3)\n// In v3, enums are generated as class-based enums with visitor pattern support for unknown values\n// instead of traditional Java enum types. Setting this to false restores traditional enum generation.\n//\n// Migration Strategy:\n// This migration uses the nullish coalescing assignment operator (??=) to only set\n// the value if it is explicitly undefined. This means:\n// - If a user has explicitly configured this field (even to true), that value is preserved\n// - If the field is undefined, it is set to false for backwards compatibility\n// - Unknown/custom fields are preserved\nexport const migration_3_0_0: Migration = {\n version: \"3.0.0\",\n\n migrateGeneratorConfig: ({ config }) =>\n migrateConfig(config, (draft) => {\n // Set old default to disable forward-compatible enums\n // Using the nullish coalescing assignment operator (??=) to set only if undefined\n draft[\"enable-forward-compatible-enums\"] ??= false;\n }),\n\n migrateGeneratorsYml: ({ document }) => document\n};\n","import type { MigrationModule } from \"@fern-api/migrations-base\";\n\nimport { migration_2_0_0 } from \"./2.0.0.js\";\nimport { migration_3_0_0 } from \"./3.0.0.js\";\n\n/**\n * Migration module for Java SDK generator.\n *\n * This module contains migrations for configuration changes for\n * the Java SDK generator:\n * - fernapi/fern-java-sdk\n *\n * Each migration is defined in a separate file under this directory.\n * Migrations are automatically applied by the Fern CLI when running:\n * `fern generator upgrade --generator java-sdk`\n */\nconst migrationModule: MigrationModule = {\n migrations: [migration_2_0_0, migration_3_0_0]\n};\n\nexport default migrationModule;\n","import type { Migration } from \"@fern-api/migrations-base\";\nimport { migrateConfig } from \"@fern-api/migrations-base\";\n\n// Note: This is not a JSDoc comment because we want this to be stripped from the compiled output\n\n// Migration for version 1.0.0\n//\n// Context:\n// Version 1.0.0 introduced a breaking change to improve code safety and correctness by\n// enforcing non-null checks for required fields in generated builder methods. Previously,\n// builder methods did not validate that required fields were set, which could lead to\n// runtime errors when null values were passed for required fields.\n//\n// To ensure backwards compatibility during upgrades, this migration explicitly disables\n// the required property builder checks for users upgrading from pre-1.0.0 versions.\n// This allows their existing code to continue working without changes.\n//\n// Changed Behavior:\n// - disable-required-property-builder-checks: false → true (when migrating from v0 to v1)\n// In v1, builder methods enforce non-null checks like:\n// ```java\n// @java.lang.Override\n// @JsonSetter(\"name\")\n// public NameStage name(@NotNull String name) {\n// this.name = Objects.requireNonNull(name, \"name must not be null\");\n// return this;\n// }\n// ```\n// Setting this to true restores the v0 behavior without null checks.\n//\n// Migration Strategy:\n// This migration uses the nullish coalescing assignment operator (??=) to only set\n// the value if it is explicitly undefined. This means:\n// - If a user has explicitly configured this field (even to false), that value is preserved\n// - If the field is undefined, it is set to true for backwards compatibility\n// - Unknown/custom fields are preserved\nexport const migration_1_0_0: Migration = {\n version: \"1.0.0\",\n\n migrateGeneratorConfig: ({ config }) =>\n migrateConfig(config, (draft) => {\n // Set old default to disable the new required property builder checks\n // Using the nullish coalescing assignment operator (??=) to set only if undefined\n draft[\"disable-required-property-builder-checks\"] ??= true;\n }),\n\n migrateGeneratorsYml: ({ document }) => document\n};\n","import type { MigrationModule } from \"@fern-api/migrations-base\";\n\nimport { migration_1_0_0 } from \"./1.0.0.js\";\n\n/**\n * Migration module for Java Model generators.\n *\n * This module contains migrations for configuration changes for\n * the Java Model generators:\n * - fernapi/fern-java-model\n * - fernapi/fern-java-spring\n *\n * Each migration is defined in a separate file under this directory.\n * Migrations are automatically applied by the Fern CLI when running:\n * `fern generator upgrade --generator java-model`\n * `fern generator upgrade --generator java-spring`\n */\nconst migrationModule: MigrationModule = {\n migrations: [migration_1_0_0]\n};\n\nexport default migrationModule;\n","import type { Migration } from \"@fern-api/migrations-base\";\nimport { migrateConfig } from \"@fern-api/migrations-base\";\n\n// Note: This is not a JSDoc comment because we want this to be stripped from the compiled output\n\n// Migration for version 4.0.0\n//\n// Context:\n// Version 4.0.0 introduced a breaking change by removing Pydantic field aliases and replacing\n// them with an internal representation. This allows for more robust handling of field aliases\n// and prevents issues with Pydantic V2 and mypy.\n//\n// Previously, Pydantic field aliases were used to map Python snake_case field names to API\n// camelCase field names. In v4, this was removed in favor of an internal representation that\n// handles the mapping without relying on Pydantic's alias system.\n//\n// To ensure backwards compatibility during upgrades, this migration explicitly enables\n// Pydantic field aliases for users upgrading from pre-4.0.0 versions. This allows their\n// existing code to continue using the old Pydantic alias behavior.\n//\n// Changed Default:\n// - pydantic_config.use_pydantic_field_aliases: false → true (when migrating from v3 to v4)\n// In v4, Pydantic field aliases are removed by default. Setting this to true restores\n// the v3 behavior with Pydantic field aliases.\n//\n// Migration Strategy:\n// This migration uses the nullish coalescing assignment operator (??=) to only set\n// the value if it is explicitly undefined. This means:\n// - If a user has explicitly configured this field (even to false), that value is preserved\n// - If the field is undefined, it is set to true for backwards compatibility\n// - Unknown/custom fields are preserved\n// - The migration creates the pydantic_config object if it doesn't exist\nexport const migration_4_0_0: Migration = {\n version: \"4.0.0\",\n\n migrateGeneratorConfig: ({ config }) =>\n migrateConfig(config, (draft) => {\n // Ensure pydantic_config object exists (handle undefined and null)\n if (draft.pydantic_config === undefined || draft.pydantic_config === null) {\n draft.pydantic_config = {};\n }\n\n // Set old default to enable Pydantic field aliases\n // Using the nullish coalescing assignment operator (??=) to set only if undefined\n if (typeof draft.pydantic_config === \"object\" && draft.pydantic_config !== null) {\n // TypeScript doesn't know about the structure, so we use bracket notation\n (draft.pydantic_config as Record<string, unknown>).use_pydantic_field_aliases ??= true;\n }\n }),\n\n migrateGeneratorsYml: ({ document }) => document\n};\n","import type { MigrationModule } from \"@fern-api/migrations-base\";\n\nimport { migration_4_0_0 } from \"./4.0.0.js\";\n\n/**\n * Migration module for Python SDK generator.\n *\n * This module contains migrations for configuration changes for\n * the Python SDK generator:\n * - fernapi/fern-python-sdk\n *\n * Each migration is defined in a separate file under this directory.\n * Migrations are automatically applied by the Fern CLI when running:\n * `fern generator upgrade --generator python-sdk`\n *\n * Note: Versions 1.0.0 and 2.0.0 mentioned \"breaking configuration changes\"\n * but did not document specific configuration options that changed, so they\n * are not included in this migration module.\n */\nconst migrationModule: MigrationModule = {\n migrations: [migration_4_0_0]\n};\n\nexport default migrationModule;\n","import type { Migration } from \"@fern-api/migrations-base\";\nimport { migrateConfig } from \"@fern-api/migrations-base\";\n\n// Note: This is not a JSDoc comment because we want this to be stripped from the compiled output\n\n// Migration for version 1.0.0\n//\n// Context:\n// Version 1.0.0 introduced new defaults to improve the developer experience and modernize\n// the generated SDK. These changes make the SDK more ergonomic and reduce boilerplate,\n// but could break existing code that relied on the old defaults.\n//\n// To ensure backwards compatibility during upgrades, this migration explicitly sets the\n// old defaults for users upgrading from pre-1.0.0 versions. This allows their existing\n// code to continue working without changes.\n//\n// Changed Defaults:\n// - inlineFileProperties: false → true (File upload properties are now inlined into request types)\n// - inlinePathParameters: false → true (Path parameters are now inlined into method signatures)\n// - enableInlineTypes: false → true (Type definitions are inlined where beneficial)\n// - noSerdeLayer: false → true (Serialization/deserialization layer is removed for simpler types)\n// - omitUndefined: false → true (Undefined values are omitted from JSON output)\n// - skipResponseValidation: false → true (Response validation is skipped for better performance)\n// - useLegacyExports: true → false (Modern ESM exports are used instead of legacy CommonJS)\n//\n// Migration Strategy:\n// This migration uses the nullish coalescing assignment operator (??=) to only set\n// values that are explicitly undefined. This means:\n// - If a user has explicitly configured a field (even to the new default), that value is preserved\n// - If a field is undefined, the old default is set for backwards compatibility\n// - Unknown/custom fields are preserved\nexport const migration_1_0_0: Migration = {\n version: \"1.0.0\",\n\n migrateGeneratorConfig: ({ config }) =>\n migrateConfig(config, (draft) => {\n // Only set old defaults if the fields are not already explicitly configured\n // Using the nullish coalescing assignment operator (??=) to set only if undefined\n draft.inlineFileProperties ??= false;\n draft.inlinePathParameters ??= false;\n draft.enableInlineTypes ??= false;\n draft.noSerdeLayer ??= false;\n draft.omitUndefined ??= false;\n draft.skipResponseValidation ??= false;\n draft.useLegacyExports ??= true;\n }),\n\n migrateGeneratorsYml: ({ document }) => document\n};\n","import type { Migration } from \"@fern-api/migrations-base\";\nimport { migrateConfig } from \"@fern-api/migrations-base\";\n\n// Note: This is not a JSDoc comment because we want this to be stripped from the compiled output\n\n// Migration for version 2.0.0\n//\n// Context:\n// Version 2.0.0 introduced zero-dependency SDKs by default, using native browser and\n// Node.js APIs instead of external packages. This significantly reduces bundle size\n// and eliminates dependency management issues, but requires Node.js 18+ and modern\n// browsers with native fetch/streams support.\n//\n// For users upgrading from pre-2.0.0 versions who need to maintain compatibility with\n// older runtimes, this migration explicitly sets the old defaults that use polyfills\n// and wrapper libraries.\n//\n// Changed Defaults:\n// - streamType: \"wrapper\" → \"web\" (Uses native Web Streams API instead of wrapper library)\n// - fileResponseType: \"stream\" → \"binary-response\" (Returns binary response instead of stream wrapper)\n// - formDataSupport: \"Node16\" → \"Node18\" (Uses native FormData (Node 18+) instead of polyfill)\n// - fetchSupport: \"node-fetch\" → \"native\" (Uses native fetch (Node 18+/browsers) instead of node-fetch)\n//\n// Migration Strategy:\n// This migration uses the nullish coalescing assignment operator (??=) to only set\n// values that are explicitly undefined. This means:\n// - If a user has explicitly configured a field, that value is preserved\n// - If a field is undefined, the old default (with dependencies) is set\n// - Users can opt into zero-dependency mode by removing these fields later\nexport const migration_2_0_0: Migration = {\n version: \"2.0.0\",\n\n migrateGeneratorConfig: ({ config }) =>\n migrateConfig(config, (draft) => {\n // Only set old defaults if the fields are not already explicitly configured\n draft.streamType ??= \"wrapper\";\n draft.fileResponseType ??= \"stream\";\n draft.formDataSupport ??= \"Node16\";\n draft.fetchSupport ??= \"node-fetch\";\n }),\n\n migrateGeneratorsYml: ({ document }) => document\n};\n","import type { Migration } from \"@fern-api/migrations-base\";\nimport { migrateConfig } from \"@fern-api/migrations-base\";\n\n// Note: This is not a JSDoc comment because we want this to be stripped from the compiled output\n\n// Migration for version 3.0.0\n//\n// Context:\n// Version 3.0.0 modernized the generated SDK tooling by switching to pnpm and Vitest,\n// which offer better performance, smaller disk usage, and faster test execution compared\n// to yarn and Jest. However, teams with existing workflows may prefer to maintain their\n// current tooling.\n//\n// This migration explicitly sets the old defaults for users upgrading from pre-3.0.0\n// versions, allowing them to continue using yarn and Jest without any changes to their\n// development workflow.\n//\n// Changed Defaults:\n// - packageManager: \"yarn\" → \"pnpm\" (Generated package.json uses pnpm for dependency management)\n// - testFramework: \"jest\" → \"vitest\" (Generated tests use Vitest instead of Jest)\n//\n// Migration Strategy:\n// This migration uses the nullish coalescing assignment operator (??=) to only set\n// values that are explicitly undefined. This means:\n// - If a user has explicitly configured a field, that value is preserved\n// - If a field is undefined, the old default is set\n// - Users can opt into modern tooling by removing these fields later\n//\n// Compatibility Notes:\n// Vitest is not compatible with certain generator configurations:\n// - useBigInt: true (Vitest doesn't handle BigInt serialization the same way as Jest)\n// - streamType: wrapper (Older stream wrappers may not work with Vitest's ESM mode)\n// - packagePath (custom paths) (May have module resolution issues with Vitest)\nexport const migration_3_0_0: Migration = {\n version: \"3.0.0\",\n\n migrateGeneratorConfig: ({ config }) =>\n migrateConfig(config, (draft) => {\n // Only set old defaults if the fields are not already explicitly configured\n draft.packageManager ??= \"yarn\";\n draft.testFramework ??= \"jest\";\n }),\n\n migrateGeneratorsYml: ({ document }) => document\n};\n","import type { MigrationModule } from \"@fern-api/migrations-base\";\n\nimport { migration_1_0_0 } from \"./1.0.0.js\";\nimport { migration_2_0_0 } from \"./2.0.0.js\";\nimport { migration_3_0_0 } from \"./3.0.0.js\";\n\n/**\n * Migration module for TypeScript SDK generators.\n *\n * This module contains migrations for configuration changes across\n * all TypeScript SDK generator variants:\n * - fernapi/fern-typescript\n * - fernapi/fern-typescript-sdk\n * - fernapi/fern-typescript-node-sdk\n * - fernapi/fern-typescript-browser-sdk\n *\n * Each migration is defined in a separate file under this directory.\n * Migrations are automatically applied by the Fern CLI when running:\n * `fern generator upgrade --generator typescript-sdk`\n */\nconst migrationModule: MigrationModule = {\n migrations: [migration_1_0_0, migration_2_0_0, migration_3_0_0]\n};\n\nexport default migrationModule;\n","/**\n * @fern-api/generator-migrations\n *\n * Unified migration package for all Fern generator configurations.\n *\n * This package contains migrations for all generators, organized by generator name.\n */\n\nimport type { MigrationModule } from \"@fern-api/migrations-base\";\nimport csharpSdkMigrations from \"./generators/csharp/migrations/index.js\";\nimport javaSdkMigrations from \"./generators/java/migrations/index.js\";\nimport javaModelMigrations from \"./generators/java-model/migrations/index.js\";\nimport pythonSdkMigrations from \"./generators/python/migrations/index.js\";\nimport typescriptSdkMigrations from \"./generators/typescript/migrations/index.js\";\n\n/**\n * All generator migrations indexed by full generator name.\n *\n * When adding migrations for a new generator:\n * 1. Add migrations under src/generators/{language}/migrations/\n * 2. Import the migration module\n * 3. Add entries for all generator name variants\n */\nexport const migrations: Record<string, MigrationModule> = {\n // C# SDK\n \"fernapi/fern-csharp-sdk\": csharpSdkMigrations,\n\n // Java Model - both model and spring generators share the same migrations\n \"fernapi/fern-java-model\": javaModelMigrations,\n \"fernapi/fern-java-spring\": javaModelMigrations,\n\n // Java SDK\n \"fernapi/fern-java-sdk\": javaSdkMigrations,\n\n // Python - SDK, FastAPI, and Pydantic all share the same migrations\n \"fernapi/fern-python-sdk\": pythonSdkMigrations,\n \"fernapi/fern-fastapi-server\": pythonSdkMigrations,\n \"fernapi/fern-pydantic-model\": pythonSdkMigrations,\n\n // TypeScript SDK - all variants share the same migrations\n \"fernapi/fern-typescript\": typescriptSdkMigrations,\n \"fernapi/fern-typescript-sdk\": typescriptSdkMigrations,\n \"fernapi/fern-typescript-node-sdk\": typescriptSdkMigrations,\n \"fernapi/fern-typescript-browser-sdk\": typescriptSdkMigrations\n};\n"],"x_google_ignoreList":[0],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fern-api/generator-migrations",
3
- "version": "0.0.2",
3
+ "version": "0.0.3",
4
4
  "description": "Unified migration package for all Fern generator configurations",
5
5
  "repository": {
6
6
  "type": "git",