UNPKG

compatfactory

Version:

A library that unifies the TypeScript Compiler API factory functions across all versions of TypeScript and makes them conform with the Node Factory API

989 lines (988 loc) 160 kB
"use strict"; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __hasOwnProp = Object.prototype.hasOwnProperty; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); // src/index.ts var src_exports = {}; __export(src_exports, { ensureNodeFactory: () => ensureNodeFactory }); module.exports = __toCommonJS(src_exports); function ensureNodeFactory(factoryLike) { if ("factory" in factoryLike && factoryLike.factory != null) { return normalizeNodeFactory(factoryLike.factory); } else if (!("updateSourceFileNode" in factoryLike)) { return normalizeNodeFactory(factoryLike); } return createNodeFactory(factoryLike); } function splitDecoratorsAndModifiers(modifierLikes) { const decorators = modifierLikes?.filter((modifier) => "expression" in modifier) ?? []; const modifiers = modifierLikes?.filter((modifier) => !("expression" in modifier)) ?? []; return [decorators == null || decorators.length < 1 ? void 0 : decorators, modifiers == null || modifiers.length < 1 ? void 0 : modifiers]; } function normalizeNodeFactory(factory) { const ts4CastFactory = factory; if (Boolean(factory.__compatUpgraded)) { return factory; } let badDecoratorsAsFirstArgument = false; try { badDecoratorsAsFirstArgument = ts4CastFactory.createImportEqualsDeclaration([], false, "", ts4CastFactory.createIdentifier("")).decorators != null; } catch { badDecoratorsAsFirstArgument = ts4CastFactory.createImportEqualsDeclaration([], [], false, "", ts4CastFactory.createIdentifier("")).decorators != null; } const badCreateImportEqualsDeclaration = badDecoratorsAsFirstArgument && factory.createImportEqualsDeclaration.length === 4; const badCreateImportSpecifier = badDecoratorsAsFirstArgument && factory.createImportSpecifier.length === 2; const badCreateExportSpecifier = badDecoratorsAsFirstArgument && factory.createExportSpecifier.length === 2; const badCreateMappedTypeNodeA = badDecoratorsAsFirstArgument && factory.createMappedTypeNode.length === 4; const badCreateMappedTypeNodeB = badDecoratorsAsFirstArgument && factory.createMappedTypeNode.length === 5; const badCreateTypeParameterDeclaration = badDecoratorsAsFirstArgument && factory.createTypeParameterDeclaration.length === 3; const badCreateImportTypeNode = factory.createImportAttribute == null; const badCreateImportDeclaration = !badDecoratorsAsFirstArgument && factory.createImportAttribute == null; const badCreateExportDeclaration = !badDecoratorsAsFirstArgument && factory.createImportAttribute == null; const missingCreateSatisfiesExpression = factory.createSatisfiesExpression == null; const missingCreateClassStaticBlockDeclaration = factory.createClassStaticBlockDeclaration == null; const missingCreateUniquePrivateName = factory.createUniquePrivateName == null; const missingGetGeneratedPrivateNameForNode = factory.getGeneratedPrivateNameForNode == null; const missingCreatePrivateIdentifier = factory.createPrivateIdentifier == null; const missingCreateAssertClause = factory.createAssertClause == null; const missingCreateAssertEntry = factory.createAssertEntry == null; const missingCreateImportTypeAssertionContainer = factory.createImportTypeAssertionContainer == null; const missingCreateImportAttributes = factory.createImportAttributes == null; const missingCreateImportAttribute = factory.createImportAttribute == null; const missingCreateJSDocMemberName = factory.createJSDocMemberName == null; const missingCreateJSDocLinkCode = factory.createJSDocLinkCode == null; const missingCreateJSDocLinkPlain = factory.createJSDocLinkPlain == null; const missingCreateJSDocOverloadTag = factory.createJSDocOverloadTag == null; const missingCreateJSDocThrowsTag = factory.createJSDocThrowsTag == null; const missingCreateJSDocSatisfiesTag = factory.createJSDocSatisfiesTag == null; const missingCreateJSDocImportTag = factory.createJSDocImportTag == null; const missingCreateJsxNamespacedName = factory.createJsxNamespacedName == null; const missingReplaceModifiers = factory.replaceModifiers == null; const missingReplaceDecoratorsAndModifiers = factory.replaceDecoratorsAndModifiers == null; const missingReplacePropertyName = factory.replacePropertyName == null; const needsModifications = badCreateImportEqualsDeclaration || badCreateImportSpecifier || badCreateExportSpecifier || badCreateImportTypeNode || badCreateImportDeclaration || badCreateExportDeclaration || badCreateMappedTypeNodeA || badCreateMappedTypeNodeB || badCreateTypeParameterDeclaration || missingCreateSatisfiesExpression || missingCreateClassStaticBlockDeclaration || missingCreateUniquePrivateName || missingGetGeneratedPrivateNameForNode || missingCreatePrivateIdentifier || missingCreateAssertClause || missingCreateAssertEntry || missingCreateImportTypeAssertionContainer || missingCreateImportAttributes || missingCreateImportAttribute || missingCreateJSDocMemberName || missingCreateJSDocLinkCode || missingCreateJSDocLinkPlain || missingCreateJSDocOverloadTag || missingCreateJSDocThrowsTag || missingCreateJSDocSatisfiesTag || missingCreateJSDocImportTag || missingCreateJsxNamespacedName || missingReplaceModifiers || missingReplaceDecoratorsAndModifiers || missingReplacePropertyName || badDecoratorsAsFirstArgument; if (needsModifications) { const withOriginal = "original" in factory.updateBlock(factory.createBlock([]), []); const setOriginalNode = (node, original) => { node.original = original; return node; }; const setTextRangeEnd = (range, end) => { range.end = end; return range; }; const setTextRangePos = (range, pos) => { range.pos = pos; return range; }; const setTextRangePosEnd = (range, pos, end) => setTextRangeEnd(setTextRangePos(range, pos), end); const setTextRange = (range, loc) => loc != null ? setTextRangePosEnd(range, loc.pos, loc.end) : range; const updateWithoutOriginal = (updated, original) => { if (updated !== original) { setTextRange(updated, original); } return updated; }; const updateWithOriginal = (updated, original) => { if (updated !== original) { setOriginalNode(updated, original); setTextRange(updated, original); } return updated; }; const update = withOriginal ? updateWithOriginal : updateWithoutOriginal; const createPrivateIdentifier = missingCreatePrivateIdentifier ? /* @__PURE__ */ (() => function(text) { const node = factory.createIdentifier(text); return node; })() : factory.createPrivateIdentifier; return { ["__compatUpgraded"]: true, ...factory, createPrivateIdentifier, ...badCreateImportEqualsDeclaration ? /* @__PURE__ */ (() => { function createImportEqualsDeclaration(decoratorsOrModifiers, modifiersOrIsTypeOnly, isTypeOnlyOrName, nameOrModuleReference, moduleReferenceOrUndefined) { const isShort = arguments.length <= 4; const decorators = isShort ? splitDecoratorsAndModifiers(decoratorsOrModifiers)[0] : decoratorsOrModifiers; const modifiers = isShort ? splitDecoratorsAndModifiers(decoratorsOrModifiers)[1] : modifiersOrIsTypeOnly; const name = isShort ? isTypeOnlyOrName : nameOrModuleReference; const moduleReference = isShort ? nameOrModuleReference : moduleReferenceOrUndefined; return factory.createImportEqualsDeclaration( decorators, modifiers, name, moduleReference ); } function updateImportEqualsDeclaration(node, decoratorsOrModifiers, modifiersOrIsTypeOnly, isTypeOnlyOrName, nameOrModuleReference, moduleReferenceOrUndefined) { const isShort = arguments.length <= 5; const decorators = isShort ? splitDecoratorsAndModifiers(decoratorsOrModifiers)[0] : decoratorsOrModifiers; const modifiers = isShort ? splitDecoratorsAndModifiers(decoratorsOrModifiers)[1] : modifiersOrIsTypeOnly; const name = isShort ? isTypeOnlyOrName : nameOrModuleReference; const moduleReference = isShort ? nameOrModuleReference : moduleReferenceOrUndefined; return factory.updateImportEqualsDeclaration( node, decorators, modifiers, name, moduleReference ); } return { createImportEqualsDeclaration, updateImportEqualsDeclaration }; })() : {}, ...badCreateImportSpecifier ? { createImportSpecifier(isTypeOnly, propertyName, name) { return factory.createImportSpecifier(propertyName, name); }, updateImportSpecifier(node, isTypeOnly, propertyName, name) { return factory.updateImportSpecifier( node, propertyName, name ); } } : {}, ...badCreateExportSpecifier ? { createExportSpecifier(isTypeOnly, propertyName, name) { return factory.createExportSpecifier(propertyName, name); }, updateExportSpecifier(node, isTypeOnly, propertyName, name) { return factory.updateExportSpecifier( node, propertyName, name ); } } : {}, ...badCreateImportTypeNode ? /* @__PURE__ */ (() => { function createImportTypeNode(argument, attributesOrQualifier, qualifierOrTypeArguments, typeArgumentsOrIsTypeOf, isTypeOfOrUndefined) { const qualifier = attributesOrQualifier != null && attributesOrQualifier.kind === 300 ? void 0 : attributesOrQualifier; if (arguments.length < 5) { return factory.createImportTypeNode( argument, qualifier, qualifierOrTypeArguments, typeArgumentsOrIsTypeOf ); } else { return factory.createImportTypeNode( argument, qualifierOrTypeArguments, typeArgumentsOrIsTypeOf, isTypeOfOrUndefined ); } } function updateImportTypeNode(node, argument, attributesOrQualifier, qualifierOrTypeArguments, typeArgumentsOrIsTypeOf, isTypeOfOrUndefined) { const qualifierOrUndefined = attributesOrQualifier != null && attributesOrQualifier.kind === 300 ? void 0 : attributesOrQualifier; if (arguments.length < 6) { return factory.updateImportTypeNode( node, argument, qualifierOrUndefined, qualifierOrTypeArguments, typeArgumentsOrIsTypeOf ); } else { return factory.updateImportTypeNode( node, argument, qualifierOrTypeArguments, typeArgumentsOrIsTypeOf, isTypeOfOrUndefined ); } } return { createImportTypeNode, updateImportTypeNode }; })() : {}, ...badCreateImportDeclaration ? /* @__PURE__ */ (() => { function createImportDeclaration(modifiers, importClause, moduleSpecifier, _) { return factory.createImportDeclaration( modifiers, importClause, moduleSpecifier ); } function updateImportDeclaration(node, modifiers, importClause, moduleSpecifier, _) { return factory.updateImportDeclaration( node, modifiers, importClause, moduleSpecifier, void 0 ); } return { createImportDeclaration, updateImportDeclaration }; })() : {}, ...badCreateExportDeclaration ? /* @__PURE__ */ (() => { function createExportDeclaration(modifiers, isTypeOnly, exportClause, moduleSpecifier, _) { return factory.createExportDeclaration( modifiers, isTypeOnly, exportClause, moduleSpecifier ); } function updateExportDeclaration(node, modifiers, isTypeOnly, exportClause, moduleSpecifier, _) { return factory.updateExportDeclaration( node, modifiers, isTypeOnly, exportClause, moduleSpecifier, void 0 ); } return { createExportDeclaration, updateExportDeclaration }; })() : {}, ...badCreateMappedTypeNodeA ? { createMappedTypeNode(readonlyToken, typeParameter, nameType, questionToken, type) { return factory.createMappedTypeNode( readonlyToken, typeParameter, questionToken, type ); }, updateMappedTypeNode(node, readonlyToken, typeParameter, nameType, questionToken, type) { return factory.updateMappedTypeNode( node, readonlyToken, typeParameter, questionToken, type ); } } : {}, ...badCreateMappedTypeNodeB ? { createMappedTypeNode(readonlyToken, typeParameter, nameType, questionToken, type, members) { return factory.createMappedTypeNode( readonlyToken, typeParameter, nameType, questionToken, type ); }, updateMappedTypeNode(node, readonlyToken, typeParameter, nameType, questionToken, type, members) { return factory.updateMappedTypeNode( node, readonlyToken, typeParameter, nameType, questionToken, type ); } } : {}, ...badCreateTypeParameterDeclaration ? /* @__PURE__ */ (() => { function createTypeParameterDeclaration(modifiersOrName, nameOrConstraint, constraintOrDefaultType, defaultTypeOrUndefined) { const isShort = typeof modifiersOrName === "string" || modifiersOrName != null && !Array.isArray(modifiersOrName) && "escapedText" in modifiersOrName; const modifiers = isShort ? void 0 : modifiersOrName; const name = isShort ? modifiersOrName : nameOrConstraint; const constraint = isShort ? nameOrConstraint : constraintOrDefaultType; const defaultType = isShort ? constraintOrDefaultType : defaultTypeOrUndefined; const typeParameterDeclaration = factory.createTypeParameterDeclaration( name, constraint, defaultType ); if (modifiers != null) { typeParameterDeclaration.modifiers = factory.createNodeArray(modifiers); } return typeParameterDeclaration; } function updateTypeParameterDeclaration(node, modifiersOrName, nameOrConstraint, constraintOrDefaultType, defaultTypeOrUndefined) { const isShort = modifiersOrName != null && !Array.isArray(modifiersOrName) && "escapedText" in modifiersOrName; const modifiers = isShort ? void 0 : modifiersOrName; const name = isShort ? modifiersOrName : nameOrConstraint; const constraint = isShort ? nameOrConstraint : constraintOrDefaultType; const defaultType = isShort ? constraintOrDefaultType : defaultTypeOrUndefined; const typeParameterDeclaration = factory.updateTypeParameterDeclaration( node, name, constraint, defaultType ); if (modifiers != null) { typeParameterDeclaration.modifiers = factory.createNodeArray(modifiers); } return typeParameterDeclaration; } return { createTypeParameterDeclaration, updateTypeParameterDeclaration }; })() : {}, ...missingCreateSatisfiesExpression ? /* @__PURE__ */ (() => { function createSatisfiesExpression(expression, type) { return { ...expression }; } function updateSatisfiesExpression(node, expression, type) { return expression === node.expression && type === node.type ? node : update(createSatisfiesExpression(expression, type), node); } return { createSatisfiesExpression, updateSatisfiesExpression }; })() : {}, ...missingCreateUniquePrivateName ? /* @__PURE__ */ (() => { function createUniquePrivateName(text) { if (text != null && !text.startsWith("#")) { throw new TypeError("First character of private identifier must be #: " + text); } const node = createPrivateIdentifier(text ?? ""); return node; } return { createUniquePrivateName }; })() : {}, ...missingGetGeneratedPrivateNameForNode ? /* @__PURE__ */ (() => { function getGeneratedPrivateNameForNode(node) { return createPrivateIdentifier(""); } return { getGeneratedPrivateNameForNode }; })() : {}, ...missingCreateClassStaticBlockDeclaration ? /* @__PURE__ */ (() => { function createClassStaticBlockDeclaration(decoratorsOrBlock, modifiersOrUndefined, bodyOrUndefined) { const body = arguments.length >= 3 ? bodyOrUndefined : decoratorsOrBlock; const node = factory.createEmptyStatement(); node.body = body; node.transformFlags = 8388608; return node; } function updateClassStaticBlockDeclaration(node, decoratorsOrBlock, modifiersOrUndefined, bodyOrUndefined) { const body = arguments.length >= 4 ? bodyOrUndefined : decoratorsOrBlock; return body === node.body ? node : update(createClassStaticBlockDeclaration(body), node); } return { createClassStaticBlockDeclaration, updateClassStaticBlockDeclaration }; })() : {}, ...missingCreateAssertClause ? /* @__PURE__ */ (() => { function createAssertClause(elements, multiLine) { const node = factory.createEmptyStatement(); node.elements = elements; node.multiLine = multiLine; node.transformFlags |= 4; return node; } function updateAssertClause(node, elements, multiLine) { return node.elements !== elements || node.multiLine !== multiLine ? update(createAssertClause(elements, multiLine), node) : node; } return { createAssertClause, updateAssertClause }; })() : {}, ...missingCreateAssertEntry ? /* @__PURE__ */ (() => { function createAssertEntry(name, value) { const node = factory.createEmptyStatement(); node.name = name; node.value = value; node.transformFlags |= 4; return node; } function updateAssertEntry(node, name, value) { return node.name !== name || node.value !== value ? update(createAssertEntry(name, value), node) : node; } return { createAssertEntry, updateAssertEntry }; })() : {}, ...missingCreateImportTypeAssertionContainer ? /* @__PURE__ */ (() => { function createImportTypeAssertionContainer(clause, multiLine) { const node = factory.createEmptyStatement(); node.assertClause = clause; node.multiLine = multiLine; return node; } function updateImportTypeAssertionContainer(node, clause, multiLine) { return node.assertClause !== clause || node.multiLine !== multiLine ? update(createImportTypeAssertionContainer(clause, multiLine), node) : node; } return { createImportTypeAssertionContainer, updateImportTypeAssertionContainer }; })() : {}, ...missingCreateImportAttributes ? /* @__PURE__ */ (() => { function createImportAttributes(elements, multiLine) { const node = factory.createEmptyStatement(); node.elements = elements; node.multiLine = multiLine; return node; } function updateImportAttributes(node, elements, multiLine) { return node.elements !== elements || node.multiLine !== multiLine ? update(createImportAttributes(elements, multiLine), node) : node; } return { createImportAttributes, updateImportAttributes }; })() : {}, ...missingCreateImportAttribute ? /* @__PURE__ */ (() => { function createImportAttribute(name, value) { const node = factory.createEmptyStatement(); node.name = name; node.value = value; return node; } function updateImportAttribute(node, name, value) { return node.name !== name || node.value !== value ? update(createImportAttribute(name, value), node) : node; } return { createImportAttribute, updateImportAttribute }; })() : {}, ...missingReplaceModifiers ? /* @__PURE__ */ (() => { function replaceModifiers(n, modifiers) { let modifierArray; if (typeof modifiers === "number") { modifierArray = factory.createModifiersFromModifierFlags(modifiers); } else { modifierArray = modifiers; } const clone = "cloneNode" in factory ? factory.cloneNode(n) : { ...n }; clone.modifiers = factory.createNodeArray(modifierArray); return clone; } return { replaceModifiers }; })() : {}, ...missingReplaceDecoratorsAndModifiers ? /* @__PURE__ */ (() => { function replaceDecoratorsAndModifiers(n, modifiers) { const clone = "cloneNode" in factory ? factory.cloneNode(n) : { ...n }; clone.modifiers = factory.createNodeArray(modifiers); return clone; } return { replaceDecoratorsAndModifiers }; })() : {}, ...missingReplacePropertyName ? /* @__PURE__ */ (() => { function replacePropertyName(n, name) { const clone = "cloneNode" in factory ? factory.cloneNode(n) : { ...n }; clone.name = name; return clone; } return { replacePropertyName }; })() : {}, ...missingCreateJSDocMemberName ? /* @__PURE__ */ (() => { function createJSDocMemberName(left, right) { const base = factory.createJSDocComment(void 0, void 0); delete base.comment; delete base.tags; const node = base; node.left = left; node.right = right; return node; } function updateJSDocMemberName(node, left, right) { return left === node.left && right === node.right ? node : update(createJSDocMemberName(left, right), node); } return { createJSDocMemberName, updateJSDocMemberName }; })() : {}, ...missingCreateJSDocLinkCode ? /* @__PURE__ */ (() => { function createJSDocLinkCode(name, text) { const base = factory.createJSDocComment(void 0, void 0); delete base.comment; delete base.tags; const node = base; node.name = name; node.text = text; return node; } function updateJSDocLinkCode(node, name, text) { return name === node.name && text === node.text ? node : update(createJSDocLinkCode(name, text), node); } return { createJSDocLinkCode, updateJSDocLinkCode }; })() : {}, ...missingCreateJSDocLinkPlain ? /* @__PURE__ */ (() => { function createJSDocLinkPlain(name, text) { const base = factory.createJSDocComment(void 0, void 0); delete base.comment; delete base.tags; const node = base; node.name = name; node.text = text; return node; } function updateJSDocLinkPlain(node, name, text) { return name === node.name && text === node.text ? node : update(createJSDocLinkPlain(name, text), node); } return { createJSDocLinkPlain, updateJSDocLinkPlain }; })() : {}, ...missingCreateJSDocOverloadTag ? /* @__PURE__ */ (() => { function createJSDocOverloadTag(tagName, typeExpression, comment) { const base = factory.createJSDocComment(void 0, void 0); delete base.comment; delete base.tags; const node = base; if (tagName != null) node.tagName = tagName; node.typeExpression = typeExpression; node.comment = comment; return node; } function updateJSDocOverloadTag(node, tagName, typeExpression, comment) { return tagName === node.tagName && typeExpression === node.typeExpression && comment === node.comment ? node : update(createJSDocOverloadTag(tagName, typeExpression, comment), node); } return { createJSDocOverloadTag, updateJSDocOverloadTag }; })() : {}, ...missingCreateJSDocThrowsTag ? /* @__PURE__ */ (() => { function createJSDocThrowsTag(tagName, typeExpression, comment) { const base = factory.createJSDocComment(void 0, void 0); delete base.comment; delete base.tags; const node = base; if (tagName != null) node.tagName = tagName; node.typeExpression = typeExpression; node.comment = comment; return node; } function updateJSDocThrowsTag(node, tagName, typeExpression, comment) { return tagName === node.tagName && typeExpression === node.typeExpression && comment === node.comment ? node : update(createJSDocThrowsTag(tagName ?? node.tagName, typeExpression, comment), node); } return { createJSDocThrowsTag, updateJSDocThrowsTag }; })() : {}, ...missingCreateJSDocSatisfiesTag ? /* @__PURE__ */ (() => { function createJSDocSatisfiesTag(tagName, typeExpression, comment) { const base = factory.createJSDocComment(void 0, void 0); delete base.comment; delete base.tags; const node = base; if (tagName != null) node.tagName = tagName; node.typeExpression = typeExpression; node.comment = comment; return node; } function updateJSDocSatisfiesTag(node, tagName, typeExpression, comment) { return tagName === node.tagName && typeExpression === node.typeExpression && comment === node.comment ? node : update(createJSDocSatisfiesTag(tagName, typeExpression, comment), node); } return { createJSDocSatisfiesTag, updateJSDocSatisfiesTag }; })() : {}, ...missingCreateJSDocImportTag ? /* @__PURE__ */ (() => { function createJSDocImportTag(tagName, importClause, moduleSpecifier, attributes, comment) { const base = factory.createJSDocComment(void 0, void 0); delete base.comment; delete base.tags; const node = base; if (tagName != null) node.tagName = tagName; node.comment = comment; node.importClause = importClause; node.moduleSpecifier = moduleSpecifier; node.attributes = attributes; return node; } function updateJSDocImportTag(node, tagName, importClause, moduleSpecifier, attributes, comment) { return tagName === node.tagName && importClause === node.importClause && comment === node.comment && moduleSpecifier === node.moduleSpecifier && attributes === node.attributes ? node : update(createJSDocImportTag(tagName, importClause, moduleSpecifier, attributes, comment), node); } return { createJSDocImportTag, updateJSDocImportTag }; })() : {}, ...missingCreateJsxNamespacedName ? /* @__PURE__ */ (() => { function createJsxNamespacedName(namespace, name) { const node = factory.createEmptyStatement(); node.namespace = namespace; node.name = name; return node; } function updateJsxNamespacedName(node, namespace, name) { return node.namespace !== namespace || node.name !== name ? update(createJsxNamespacedName(namespace, name), node) : node; } return { createJsxNamespacedName, updateJsxNamespacedName }; })() : {}, ...badDecoratorsAsFirstArgument ? /* @__PURE__ */ (() => { function createParameterDeclaration(decoratorsOrModifiers, modifiersOrDotDotDotToken, dotDotDotTokenOrName, nameOrQuestionToken, questionTokenOrType, typeOrInitializer, initializerOrUndefined) { const isShort = typeof dotDotDotTokenOrName === "string" || dotDotDotTokenOrName != null && dotDotDotTokenOrName.kind !== 25; const decorators = isShort ? splitDecoratorsAndModifiers(decoratorsOrModifiers)[0] : decoratorsOrModifiers; const modifiers = isShort ? splitDecoratorsAndModifiers(decoratorsOrModifiers)[1] : modifiersOrDotDotDotToken; const dotDotDotToken = isShort ? modifiersOrDotDotDotToken : dotDotDotTokenOrName; const name = isShort ? dotDotDotTokenOrName : nameOrQuestionToken; const questionToken = isShort ? nameOrQuestionToken : questionTokenOrType; const type = isShort ? questionTokenOrType : typeOrInitializer; const initializer = isShort ? typeOrInitializer : initializerOrUndefined; return factory.createParameterDeclaration( decorators, modifiers, dotDotDotToken, name, questionToken, type, initializer ); } function updateParameterDeclaration(node, decoratorsOrModifiers, modifiersOrDotDotDotToken, dotDotDotTokenOrName, nameOrQuestionToken, questionTokenOrType, typeOrInitializer, initializerOrUndefined) { const isShort = typeof dotDotDotTokenOrName === "string" || dotDotDotTokenOrName != null && dotDotDotTokenOrName.kind !== 25; const decorators = isShort ? splitDecoratorsAndModifiers(decoratorsOrModifiers)[0] : decoratorsOrModifiers; const modifiers = isShort ? splitDecoratorsAndModifiers(decoratorsOrModifiers)[1] : modifiersOrDotDotDotToken; const dotDotDotToken = isShort ? modifiersOrDotDotDotToken : dotDotDotTokenOrName; const name = isShort ? dotDotDotTokenOrName : nameOrQuestionToken; const questionToken = isShort ? nameOrQuestionToken : questionTokenOrType; const type = isShort ? questionTokenOrType : typeOrInitializer; const initializer = isShort ? typeOrInitializer : initializerOrUndefined; return factory.updateParameterDeclaration( node, decorators, modifiers, dotDotDotToken, name, questionToken, type, initializer ); } function createPropertyDeclaration(decoratorsOrModifiers, modifiersOrName, nameOrQuestionOrExclamationToken, questionOrExclamationTokenOrType, typeOrInitializer, initializerOrUndefined) { const isShort = typeof modifiersOrName === "string" || modifiersOrName != null && !Array.isArray(modifiersOrName); const decorators = isShort ? splitDecoratorsAndModifiers(decoratorsOrModifiers)[0] : decoratorsOrModifiers; const modifiers = isShort ? splitDecoratorsAndModifiers(decoratorsOrModifiers)[1] : modifiersOrName; const name = isShort ? modifiersOrName : nameOrQuestionOrExclamationToken; const questionOrExclamationToken = isShort ? nameOrQuestionOrExclamationToken : questionOrExclamationTokenOrType; const type = isShort ? questionOrExclamationTokenOrType : typeOrInitializer; const initializer = isShort ? typeOrInitializer : initializerOrUndefined; return factory.createPropertyDeclaration( decorators, modifiers, name, questionOrExclamationToken, type, initializer ); } function updatePropertyDeclaration(node, decoratorsOrModifiers, modifiersOrName, nameOrQuestionOrExclamationToken, questionOrExclamationTokenOrType, typeOrInitializer, initializerOrUndefined) { const isShort = typeof modifiersOrName === "string" || modifiersOrName != null && !Array.isArray(modifiersOrName); const decorators = isShort ? splitDecoratorsAndModifiers(decoratorsOrModifiers)[0] : decoratorsOrModifiers; const modifiers = isShort ? splitDecoratorsAndModifiers(decoratorsOrModifiers)[1] : modifiersOrName; const name = isShort ? modifiersOrName : nameOrQuestionOrExclamationToken; const questionOrExclamationToken = isShort ? nameOrQuestionOrExclamationToken : questionOrExclamationTokenOrType; const type = isShort ? questionOrExclamationTokenOrType : typeOrInitializer; const initializer = isShort ? typeOrInitializer : initializerOrUndefined; return factory.updatePropertyDeclaration( node, decorators, modifiers, name, questionOrExclamationToken, type, initializer ); } function createMethodDeclaration(decoratorsOrModifiers, modifiersOrAsteriskToken, asteriskTokenOrName, nameOrQuestionToken, questionTokenOrTypeParameters, typeParametersOrParameters, parametersOrType, typeOrBody, bodyOrUndefined) { const isShort = typeof asteriskTokenOrName === "string" || asteriskTokenOrName != null && asteriskTokenOrName.kind !== 41; const decorators = isShort ? splitDecoratorsAndModifiers(decoratorsOrModifiers)[0] : decoratorsOrModifiers; const modifiers = isShort ? splitDecoratorsAndModifiers(decoratorsOrModifiers)[1] : modifiersOrAsteriskToken; const asteriskToken = isShort ? modifiersOrAsteriskToken : asteriskTokenOrName; const name = isShort ? asteriskTokenOrName : nameOrQuestionToken; const questionToken = isShort ? nameOrQuestionToken : questionTokenOrTypeParameters; const typeParameters = isShort ? questionTokenOrTypeParameters : typeParametersOrParameters; const parameters = isShort ? typeParametersOrParameters : parametersOrType; const type = isShort ? parametersOrType : typeOrBody; const body = isShort ? typeOrBody : bodyOrUndefined; return factory.createMethodDeclaration( decorators, modifiers, asteriskToken, name, questionToken, typeParameters, parameters, type, body ); } function updateMethodDeclaration(node, decoratorsOrModifiers, modifiersOrAsteriskToken, asteriskTokenOrName, nameOrQuestionToken, questionTokenOrTypeParameters, typeParametersOrParameters, parametersOrType, typeOrBody, bodyOrUndefined) { const isShort = typeof asteriskTokenOrName === "string" || asteriskTokenOrName != null && asteriskTokenOrName.kind !== 41; const decorators = isShort ? splitDecoratorsAndModifiers(decoratorsOrModifiers)[0] : decoratorsOrModifiers; const modifiers = isShort ? splitDecoratorsAndModifiers(decoratorsOrModifiers)[1] : modifiersOrAsteriskToken; const asteriskToken = isShort ? modifiersOrAsteriskToken : asteriskTokenOrName; const name = isShort ? asteriskTokenOrName : nameOrQuestionToken; const questionToken = isShort ? nameOrQuestionToken : questionTokenOrTypeParameters; const typeParameters = isShort ? questionTokenOrTypeParameters : typeParametersOrParameters; const parameters = isShort ? typeParametersOrParameters : parametersOrType; const type = isShort ? parametersOrType : typeOrBody; const body = isShort ? typeOrBody : bodyOrUndefined; return factory.updateMethodDeclaration( node, decorators, modifiers, asteriskToken, name, questionToken, typeParameters, parameters, type, body ); } function createConstructorDeclaration(decoratorsOrModifiers, modifiersOrParameters, parametersOrBody, bodyOrUndefined) { const isShort = arguments.length <= 3; const decorators = isShort ? splitDecoratorsAndModifiers(decoratorsOrModifiers)[0] : decoratorsOrModifiers; const modifiers = isShort ? splitDecoratorsAndModifiers(decoratorsOrModifiers)[1] : modifiersOrParameters; const parameters = isShort ? modifiersOrParameters : parametersOrBody; const body = isShort ? parametersOrBody : bodyOrUndefined; return factory.createConstructorDeclaration( decorators, modifiers, parameters, body ); } function updateConstructorDeclaration(node, decoratorsOrModifiers, modifiersOrParameters, parametersOrBody, bodyOrUndefined) { const isShort = arguments.length <= 4; const decorators = isShort ? splitDecoratorsAndModifiers(decoratorsOrModifiers)[0] : decoratorsOrModifiers; const modifiers = isShort ? splitDecoratorsAndModifiers(decoratorsOrModifiers)[1] : modifiersOrParameters; const parameters = isShort ? modifiersOrParameters : parametersOrBody; const body = isShort ? parametersOrBody : bodyOrUndefined; return factory.updateConstructorDeclaration( node, decorators, modifiers, parameters, body ); } function createGetAccessorDeclaration(decoratorsOrModifiers, modifiersOrName, nameOrParameters, parametersOrType, typeOrBody, bodyOrUndefined) { const isShort = typeof modifiersOrName === "string" || modifiersOrName != null && !Array.isArray(modifiersOrName); const decorators = isShort ? splitDecoratorsAndModifiers(decoratorsOrModifiers)[0] : decoratorsOrModifiers; const modifiers = isShort ? splitDecoratorsAndModifiers(decoratorsOrModifiers)[1] : modifiersOrName; const name = isShort ? modifiersOrName : nameOrParameters; const parameters = isShort ? nameOrParameters : parametersOrType; const type = isShort ? parametersOrType : typeOrBody; const body = isShort ? typeOrBody : bodyOrUndefined; return factory.createGetAccessorDeclaration( decorators, modifiers, name, parameters, type, body ); } function updateGetAccessorDeclaration(node, decoratorsOrModifiers, modifiersOrName, nameOrParameters, parametersOrType, typeOrBody, bodyOrUndefined) { const isShort = typeof modifiersOrName === "string" || modifiersOrName != null && !Array.isArray(modifiersOrName); const decorators = isShort ? splitDecoratorsAndModifiers(decoratorsOrModifiers)[0] : decoratorsOrModifiers; const modifiers = isShort ? splitDecoratorsAndModifiers(decoratorsOrModifiers)[1] : modifiersOrName; const name = isShort ? modifiersOrName : nameOrParameters; const parameters = isShort ? nameOrParameters : parametersOrType; const type = isShort ? parametersOrType : typeOrBody; const body = isShort ? typeOrBody : bodyOrUndefined; return factory.updateGetAccessorDeclaration( node, decorators, modifiers, name, parameters, type, body ); } function createSetAccessorDeclaration(decoratorsOrModifiers, modifiersOrName, nameOrParameters, parametersOrBody, bodyOrUndefined) { const isShort = typeof modifiersOrName === "string" || modifiersOrName != null && !Array.isArray(modifiersOrName); const decorators = isShort ? splitDecoratorsAndModifiers(decoratorsOrModifiers)[0] : decoratorsOrModifiers; const modifiers = isShort ? splitDecoratorsAndModifiers(decoratorsOrModifiers)[1] : modifiersOrName; const name = isShort ? modifiersOrName : nameOrParameters; const parameters = isShort ? nameOrParameters : parametersOrBody; const body = isShort ? parametersOrBody : bodyOrUndefined; return factory.createSetAccessorDeclaration( decorators, modifiers, name, parameters, body ); } function updateSetAccessorDeclaration(node, decoratorsOrModifiers, modifiersOrName, nameOrParameters, parametersOrBody, bodyOrUndefined) { const isShort = typeof modifiersOrName === "string" || modifiersOrName != null && !Array.isArray(modifiersOrName); const decorators = isShort ? splitDecoratorsAndModifiers(decoratorsOrModifiers)[0] : decoratorsOrModifiers; const modifiers = isShort ? splitDecoratorsAndModifiers(decoratorsOrModifiers)[1] : modifiersOrName; const name = isShort ? modifiersOrName : nameOrParameters; const parameters = isShort ? nameOrParameters : parametersOrBody; const body = isShort ? parametersOrBody : bodyOrUndefined; return factory.updateSetAccessorDeclaration( node, decorators, modifiers, name, parameters, body ); } function createIndexSignature(decoratorsOrModifiers, modifiersOrParameters, parametersOrType, typeOrUndefined) { const isShort = arguments.length <= 3; const decorators = isShort ? splitDecoratorsAndModifiers(decoratorsOrModifiers)[0] : decoratorsOrModifiers; const modifiers = isShort ? splitDecoratorsAndModifiers(decoratorsOrModifiers)[1] : modifiersOrParameters; const parameters = isShort ? modifiersOrParameters : parametersOrType; const type = isShort ? parametersOrType : typeOrUndefined; return factory.createIndexSignature( decorators, modifiers, parameters, type ); } function updateIndexSignature(node, decoratorsOrModifiers, modifiersOrParameters, parametersOrType, typeOrUndefined) { const isShort = arguments.length <= 4; const decorators = isShort ? splitDecoratorsAndModifiers(decoratorsOrModifiers)[0] : decoratorsOrModifiers; const modifiers = isShort ? splitDecoratorsAndModifiers(decoratorsOrModifiers)[1] : modifiersOrParameters; const parameters = isShort ? modifiersOrParameters : parametersOrType; const type = isShort ? parametersOrType : typeOrUndefined; return factory.updateIndexSignature( node, decorators, modifiers, parameters, type ); } function createClassStaticBlockDeclaration(decoratorsOrBody, modifiersOrUndefined, bodyOrUndefined) { const isShort = arguments.length <= 1; const body = isShort ? decoratorsOrBody : bodyOrUndefined; if (missingCreateClassStaticBlockDeclaration) { const node = factory.createEmptyStatement(); node.body = body; node.transformFlags = 8388608; return node; } else { return ts4CastFactory.createClassStaticBlockDeclaration(void 0, void 0, body); } } function updateClassStaticBlockDeclaration(node, decoratorsOrBody, modifiersOrUndefined, bodyOrUndefined) { const isShort = arguments.length <= 2; const body = isShort ? decoratorsOrBody : bodyOrUndefined; if (missingCreateClassStaticBlockDeclaration) { return body === node.body ? node : update(createClassStaticBlockDeclaration(body), node); } else { return ts4CastFactory.updateClassStaticBlockDeclaration(node, void 0, void 0, body); } } function createClassExpression(decoratorsOrModifiers, modifiersOrName, nameOrTypeParameters, typeParametersOrHeritageClauses, heritageClausesOrMembers, membersOrUndefined) { const isShort = typeof modifiersOrName === "string" || modifiersOrName != null && !Array.isArray(modifiersOrName) && "escapedText" in modifiersOrName; const decorators = isShort ? splitDecoratorsAndModifiers(decoratorsOrModifiers)[0] : decoratorsOrModifiers; const modifiers = isShort ? splitDecoratorsAndModifiers(decoratorsOrModifiers)[1] : modifiersOrName; const name = isShort ? modifiersOrName : nameOrTypeParameters; const typeParameters = isShort ? nameOrTypeParameters : typeParametersOrHeritageClauses; const heritageClauses = isShort ? typeParametersOrHeritageClauses : heritageClausesOrMembers; const members = isShort ? heritageClausesOrMembers : membersOrUndefined; return factory.createClassExpression( decorators, modifiers, name, typeParameters, heritageClauses, members ); } function updateClassExpression(node, decoratorsOrModifiers, modifiersOrName, nameOrTypeParameters, typeParametersOrHeritageClauses, heritageClausesOrMembers, membersOrUndefined) { const isShort = typeof modifiersOrName === "string" || modifiersOrName != null && !Array.isArray(modifiersOrName) && "escapedText" in modifiersOrName; const decorators = isShort ? splitDecoratorsAndModifiers(decoratorsOrModifiers)[0] : decoratorsOrModifiers; const modifiers = isShort ? splitDecoratorsAndModifiers(decoratorsOrModifiers)[1] : modifiersOrName; const name = isShort ? modifiersOrName : nameOrTypeParameters; const typeParameters = isShort ? nameOrTypeParameters : typeParametersOrHeritageClauses; const heritageClauses = isShort ? typeParametersOrHeritageClauses : heritageClausesOrMembers; const members = isShort ? heritageClausesOrMembers : membersOrUndefined; return factory.updateClassExpression( node, decorators, modifiers, name, typeParameters, heritageClauses, members ); } function createFunctionDeclaration(decoratorsOrModifiers, modifiersOrAsteriskToken, asteriskTokenOrName, nameOrTypeParameters, typeParametersOrParameters, parametersOrType, typeOrBody, bodyOrUndefined) { const isShort = arguments.length <= 7; const decorators = isShort ? splitDecoratorsAndModifiers(decoratorsOrModifiers)[0] : decoratorsOrModifiers; const modifiers = isShort ? splitDecoratorsAndModifiers(decoratorsOrModifiers)[1] : modifiersOrAsteriskToken; const asteriskToken = isShort ? modifiersOrAsteriskToken : asteriskTokenOrName; const name = isShort ? asteriskTokenOrName : nameOrTypeParameters; const typeParameters = isShort ? nameOrTypeParameters : typeParametersOrParameters; const parameters = isShort ? typeParametersOrParameters : parametersOrType; const type = isShort ? parametersOrType : typeOrBody; const body = isShort ? typeOrBody : bodyOrUndefined; return factory.createFunctionDeclaration( decorators, modifiers, asteriskToken, name, typeParameters, parameters, type, body ); } function updateFunctionDeclaration(node, decoratorsOrModifiers, modifiersOrAsteriskToken, asteriskTokenOrName, nameOrTypeParameters, typeParametersOrParameters, parametersOrType, typeOrBody, bodyOrUndefined) { const isShort = arguments.length <= 8; const decorators = isShort ? splitDecoratorsAndModifiers(decoratorsOrModifiers)[0] : decoratorsOrModifiers; const modifiers = isShort ? splitDecoratorsAndModifiers(decoratorsOrModifiers)[1] : modifiersOrAsteriskToken; const asteriskToken = isShort ? modifiersOrAsteriskToken : asteriskTokenOrName; const name = isShort ? asteriskTokenOrName : nameOrTypeParameters; const typeParameters = isShort ? nameOrTypeParameters : typeParametersOrParameters; const parameters = isShort ? typeParametersOrParameters : parametersOrType; const type = isShort ? parametersOrType : typeOrBody; const body = isShort ? typeOrBody : bodyOrUndefined; return factory.updateFunctionDeclaration( node, decorators, modifiers, asteriskToken, name, typeParameters, parameters, type, body ); } function createClassDeclaration(decoratorsOrModifiers, modifiersOrName, nameOrTypeParameters, typeParametersOrHeritageClauses, heritageClausesOrMembers, membersOrUndefined) { const isShort = arguments.length <= 5; const decorators = isShort ? splitDecoratorsAndModifiers(decoratorsOrModifiers)[0] : decoratorsOrModifiers; const modifiers = isShort ? splitDecorat