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
JavaScript
"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