mirror of
https://github.com/Kir-Antipov/mc-publish.git
synced 2024-11-22 00:11:02 -05:00
Made a class that represents TypeScript variable
This commit is contained in:
parent
2d6d4c860f
commit
0c09b68595
1 changed files with 123 additions and 0 deletions
123
src/utils/typescript/typescript-variable.ts
Normal file
123
src/utils/typescript/typescript-variable.ts
Normal file
|
@ -0,0 +1,123 @@
|
|||
import { TypeScriptNode } from "./typescript-node";
|
||||
import { AbstractTypeScriptNode } from "./abstract-typescript-node";
|
||||
import { getIndentation, getNewline, TypeScriptFormattingOptions } from "./typescript-formatting-options";
|
||||
import { isCommentableTypeScriptNode } from "./commentable-typescript-node";
|
||||
|
||||
/**
|
||||
* Represents the `const` keyword in TypeScript variable declaration.
|
||||
*/
|
||||
const CONST_DECLARATION = "const";
|
||||
|
||||
/**
|
||||
* Represents the `let` keyword in TypeScript variable declaration.
|
||||
*/
|
||||
const LET_DECLARATION = "let";
|
||||
|
||||
/**
|
||||
* Represents the `var` keyword in TypeScript variable declaration.
|
||||
*/
|
||||
const VAR_DECLARATION = "var";
|
||||
|
||||
/**
|
||||
* Represents a TypeScript variable declaration type.
|
||||
*/
|
||||
type TypeScriptVariableDeclaration = typeof CONST_DECLARATION | typeof LET_DECLARATION | typeof VAR_DECLARATION;
|
||||
|
||||
/**
|
||||
* Represents a TypeScript variable.
|
||||
*/
|
||||
export class TypeScriptVariable extends AbstractTypeScriptNode {
|
||||
/**
|
||||
* The name of the variable.
|
||||
*/
|
||||
private readonly _name: string;
|
||||
|
||||
/**
|
||||
* The value assigned to the TypeScript variable.
|
||||
*/
|
||||
private readonly _value: TypeScriptNode;
|
||||
|
||||
/**
|
||||
* The declaration type of the TypeScript variable (const, let, or var).
|
||||
*/
|
||||
private readonly _declaration: TypeScriptVariableDeclaration;
|
||||
|
||||
/**
|
||||
* Constructs a new {@link TypeScriptVariable} instance with the specified name, value, and declaration type.
|
||||
*
|
||||
* @param name - The name of the variable.
|
||||
* @param value - The value assigned to the variable.
|
||||
* @param declaration - The declaration type of the variable (const, let, or var). Defaults to `const`.
|
||||
*/
|
||||
private constructor(name: string, value: TypeScriptNode, declaration?: TypeScriptVariableDeclaration) {
|
||||
super();
|
||||
this._name = name;
|
||||
this._value = value;
|
||||
this._declaration = declaration || CONST_DECLARATION;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new {@link TypeScriptVariable} instance with the specified name, value, and declaration type.
|
||||
*
|
||||
* @param name - The name of the variable.
|
||||
* @param node - The value assigned to the variable.
|
||||
* @param declaration - The declaration type of the variable (const, let, or var). Defaults to `const`.
|
||||
*
|
||||
* @returns A new {@link TypeScriptVariable} instance.
|
||||
*/
|
||||
static create(name: string, node: TypeScriptNode, declaration?: TypeScriptVariableDeclaration): TypeScriptVariable {
|
||||
return new TypeScriptVariable(name, node, declaration);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the declaration type of the TypeScript variable (const, let, or var).
|
||||
*/
|
||||
get declaration(): TypeScriptVariableDeclaration {
|
||||
return this._declaration;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the name of the TypeScript variable.
|
||||
*/
|
||||
get name(): string {
|
||||
return this._name;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the value assigned to the TypeScript variable.
|
||||
*/
|
||||
get value(): TypeScriptNode {
|
||||
return this._value;
|
||||
}
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
formatComments(options?: TypeScriptFormattingOptions): string {
|
||||
const newline = getNewline(options);
|
||||
const node = this._value;
|
||||
|
||||
const thisComments = super.formatComments(options);
|
||||
const nodeComments = isCommentableTypeScriptNode(node) ? node.formatComments(options) : "";
|
||||
if (!thisComments) {
|
||||
return nodeComments;
|
||||
}
|
||||
if (!nodeComments) {
|
||||
return thisComments;
|
||||
}
|
||||
return `${thisComments}${newline}${nodeComments}`;
|
||||
}
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
formatContent(options?: TypeScriptFormattingOptions): string {
|
||||
const indent = getIndentation(options);
|
||||
|
||||
const value = this._value;
|
||||
const formattedValue = (isCommentableTypeScriptNode(value) ? value.formatContent(options) : value.format(options)).trimStart();
|
||||
const formattedExport = `${indent}${this._declaration} ${this._name} = ${formattedValue}${formattedValue.endsWith(";") ? "" : ";"}`;
|
||||
|
||||
return formattedExport;
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue