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

981 lines 159 kB
// src/index.ts 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 ? 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.createClassDeclaration( decorators, modifiers, name, typeParameters, heritageClauses, members ); } function updateClassDeclaration(node, decoratorsOrModifiers, modifiersOrName, nameOrTypeParameters, typeParametersOrHeritageClauses, heritageClausesOrMembers, membersOrUndefined) { const isShort = arguments.length <= 6; const decorators = isShort ? splitDecoratorsAndModifiers(