Skip to content

Commit

Permalink
feat(ClassConstructorParser): add accessibility property
Browse files Browse the repository at this point in the history
  • Loading branch information
RealShadowNova committed Oct 24, 2022
1 parent 3491f96 commit c23ede8
Show file tree
Hide file tree
Showing 2 changed files with 103 additions and 9 deletions.
79 changes: 73 additions & 6 deletions src/bin/lib/migrateProjectJson.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { bold, yellow } from 'colorette';
import type { ClassParser } from '../../lib/structures/class-parser';
import { ClassParser } from '../../lib/structures/class-parser';
import type { EnumParser } from '../../lib/structures/enum-parser';
import type { FunctionParser } from '../../lib/structures/FunctionParser';
import type { InterfaceParser } from '../../lib/structures/interface-parser';
Expand All @@ -26,6 +26,7 @@ export function migrateProjectJson(
| Migration.MajorThree.MinorTwo.ProjectJson
| Migration.MajorFour.MinorZero.ProjectJson
| Migration.MajorSix.MinorZero.ProjectJson
| Migration.MajorSeven.MinorZero.ProjectJson
): ProjectParser.Json | string {
const { typeDocJsonParserVersion, id, name, classes, enums, functions, interfaces, namespaces, typeAliases } = projectJson;

Expand Down Expand Up @@ -121,7 +122,8 @@ function migrateClassJson(
| Migration.MajorTwo.MinorThree.ClassJson
| Migration.MajorThree.MinorZero.ClassJson
| Migration.MajorFour.MinorZero.ClassJson
| Migration.MajorSix.MinorZero.ClassJson,
| Migration.MajorSix.MinorZero.ClassJson
| Migration.MajorSeven.MinorZero.ClassJson,
typeDocJsonParserVersion: string
): ClassParser.Json {
const { id, name, comment, source, external, abstract, extendsType, implementsType, construct, properties, methods } = classJson;
Expand Down Expand Up @@ -168,6 +170,7 @@ function migrateClassJson(
comment: construct.comment,
source: construct.source ? migrateSourceJson(construct.source, typeDocJsonParserVersion) : null,
parentId: id,
accessibility: ClassParser.Accessibility.Public,
parameters: construct.parameters.map((parameterJson) => migrateParameterJson(parameterJson, typeDocJsonParserVersion))
},
properties: properties.map((propertyJson) => {
Expand Down Expand Up @@ -207,10 +210,64 @@ function migrateClassJson(

case '6.0.1':

case '6.0.2':
case '6.0.2': {
const { typeParameters } = classJson as Migration.MajorSix.MinorZero.ClassJson;

return {
id,
name,
comment,
source: source ? migrateSourceJson(source, typeDocJsonParserVersion) : null,
external,
abstract,
extendsType,
implementsType,
typeParameters: typeParameters.map((typeParameterJson) => migrateTypeParameterJson(typeParameterJson, typeDocJsonParserVersion)),
construct: {
id: construct.id,
name: construct.name,
comment: construct.comment,
source: construct.source ? migrateSourceJson(construct.source, typeDocJsonParserVersion) : null,
parentId: id,
accessibility: ClassParser.Accessibility.Public,
parameters: construct.parameters.map((parameterJson) => migrateParameterJson(parameterJson, typeDocJsonParserVersion))
},
properties: properties.map((propertyJson) => {
const { id, name, comment, source, accessibility, abstract, static: _static, readonly, optional, type } = propertyJson;

return {
id,
name,
comment,
source: source ? migrateSourceJson(source, typeDocJsonParserVersion) : null,
parentId: id,
accessibility,
abstract,
static: _static,
readonly,
optional,
type
};
}),
methods: methods.map((methodJson) => {
const { id, name, source, accessibility, abstract, static: _static, signatures } = methodJson;

return {
id,
name,
source: source ? migrateSourceJson(source, typeDocJsonParserVersion) : null,
parentId: id,
accessibility,
abstract,
static: _static,
signatures: signatures.map((signatureJson) => migrateSignatureJson(signatureJson, typeDocJsonParserVersion))
};
})
};
}

case '7.0.0': {
const { typeParameters } = classJson as Migration.MajorSix.MinorZero.ClassJson;
const { typeParameters, construct } = classJson as Migration.MajorSeven.MinorZero.ClassJson;

return {
id,
Expand All @@ -228,6 +285,7 @@ function migrateClassJson(
comment: construct.comment,
source: construct.source ? migrateSourceJson(construct.source, typeDocJsonParserVersion) : null,
parentId: id,
accessibility: construct.accessibility,
parameters: construct.parameters.map((parameterJson) => migrateParameterJson(parameterJson, typeDocJsonParserVersion))
},
properties: properties.map((propertyJson) => {
Expand Down Expand Up @@ -365,7 +423,11 @@ function migrateEnum(
}

function migrateFunction(
functionJson: Migration.MajorTwo.MinorOne.FunctionJson | Migration.MajorTwo.MinorThree.FunctionJson | Migration.MajorThree.MinorZero.FunctionJson,
functionJson:
| Migration.MajorTwo.MinorOne.FunctionJson
| Migration.MajorTwo.MinorThree.FunctionJson
| Migration.MajorThree.MinorZero.FunctionJson
| Migration.MajorSeven.MinorZero.FunctionJson,
typeDocJsonParserVersion: string
): FunctionParser.Json {
const { id, name, comment, source, external, signatures } = functionJson;
Expand Down Expand Up @@ -1414,11 +1476,16 @@ export namespace Migration {
functions: FunctionJson[];
}

export interface ClassJson extends Omit<MajorSix.MinorZero.ClassJson, 'methods'> {
export interface ClassJson extends Omit<MajorSix.MinorZero.ClassJson, 'construct' | 'methods'> {
construct: ClassJson.ConstructorJson;
methods: ClassJson.MethodJson[];
}

export namespace ClassJson {
export interface ConstructorJson extends MajorFour.MinorZero.ClassJson.ConstructorJson {
accessibility: MajorTwo.MinorOne.ClassJson.Accessibility;
}

export interface MethodJson extends Omit<MajorSix.MinorZero.ClassJson.MethodJson, 'signatures'> {
signatures: Misc.SignatureJson[];
}
Expand Down
33 changes: 30 additions & 3 deletions src/lib/structures/class-parser/ClassConstructorParser.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import type { JSONOutput } from 'typedoc';
import { ReflectionKind } from '../../types';
import { CommentParser, ParameterParser, SourceParser } from '../misc';
import { Parser } from '../Parser';
import { ClassParser } from './ClassParser';

export class ClassConstructorParser extends Parser {
/**
Expand All @@ -16,6 +17,12 @@ export class ClassConstructorParser extends Parser {
*/
public readonly parentId: number;

/**
* The accessibility of this constructor.
* @since 7.0.0
*/
public accessibility: ClassParser.Accessibility;

/**
* The parameter parsers of this constructor.
* @since 1.0.0
Expand All @@ -25,10 +32,11 @@ export class ClassConstructorParser extends Parser {
public constructor(data: ClassConstructorParser.Data) {
super(data);

const { comment, parentId, parameters } = data;
const { comment, parentId, accessibility, parameters } = data;

this.comment = comment;
this.parentId = parentId;
this.accessibility = accessibility;
this.parameters = parameters;
}

Expand All @@ -42,6 +50,7 @@ export class ClassConstructorParser extends Parser {
...super.toJSON(),
comment: this.comment.toJSON(),
parentId: this.parentId,
accessibility: this.accessibility,
parameters: this.parameters.map((parameter) => parameter.toJSON())
};
}
Expand All @@ -53,7 +62,7 @@ export class ClassConstructorParser extends Parser {
* @returns The generated parser.
*/
public static generateFromTypeDoc(reflection: JSONOutput.DeclarationReflection, parentId: number): ClassConstructorParser {
const { kind, kindString = 'Unknown', id, name, comment = { summary: [] }, sources = [], signatures = [] } = reflection;
const { kind, kindString = 'Unknown', id, name, comment = { summary: [] }, sources = [], flags, signatures = [] } = reflection;

if (kind !== ReflectionKind.Constructor) {
throw new Error(`Expected Constructor (${ReflectionKind.Constructor}), but received ${kindString} (${kind})`);
Expand All @@ -71,6 +80,11 @@ export class ClassConstructorParser extends Parser {
comment: CommentParser.generateFromTypeDoc(comment),
source: sources.length ? SourceParser.generateFromTypeDoc(sources[0]) : null,
parentId,
accessibility: flags.isPrivate
? ClassParser.Accessibility.Private
: flags.isProtected
? ClassParser.Accessibility.Protected
: ClassParser.Accessibility.Public,
parameters: parameters.map((parameter) => ParameterParser.generateFromTypeDoc(parameter))
});
}
Expand All @@ -81,14 +95,15 @@ export class ClassConstructorParser extends Parser {
* @returns The generated parser.
*/
public static generateFromJson(json: ClassConstructorParser.Json): ClassConstructorParser {
const { id, name, comment, source, parentId, parameters } = json;
const { id, name, comment, source, parentId, accessibility, parameters } = json;

return new ClassConstructorParser({
id,
name,
comment: CommentParser.generateFromJson(comment),
source: source ? SourceParser.generateFromJson(source) : null,
parentId,
accessibility,
parameters: parameters.map((parameter) => ParameterParser.generateFromJson(parameter))
});
}
Expand All @@ -102,6 +117,12 @@ export namespace ClassConstructorParser {
*/
comment: CommentParser;

/**
* The accessibility of this constructor.
* @since 7.0.0
*/
accessibility: ClassParser.Accessibility;

/**
* The id of the parent class parser.
* @since 4.0.0
Expand All @@ -122,6 +143,12 @@ export namespace ClassConstructorParser {
*/
comment: CommentParser.Data;

/**
* The accessibility of this constructor.
* @since 7.0.0
*/
accessibility: ClassParser.Accessibility;

/**
* The id of the parent class parser.
* @since 4.0.0
Expand Down

0 comments on commit c23ede8

Please sign in to comment.