An object containing information about the fired event.
',
- name: 'eventInfo'
- } );
- }
- }
-};
diff --git a/packages/jsdoc-plugins/lib/export-fixer/export-fixer.js b/packages/jsdoc-plugins/lib/export-fixer/export-fixer.js
deleted file mode 100644
index 374a35013..000000000
--- a/packages/jsdoc-plugins/lib/export-fixer/export-fixer.js
+++ /dev/null
@@ -1,24 +0,0 @@
-/**
- * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
- * For licensing, see LICENSE.md.
- */
-
-'use strict';
-
-module.exports = {
- handlers: {
- /**
- * @see http://usejsdoc.org/about-plugins.html#event-beforeparse
- * @param evt
- */
- beforeParse( evt ) {
- // See https://github.com/ckeditor/ckeditor5-design/blob/jsdoc-module-test/jsdoc/plugins/export-fix.js
- // and the contents of that branch for better understanding of wht these replacements do.
-
- evt.source = evt.source
- .replace( /(\n\t*)export default class /, '$1class ' )
- .replace( /(\n\t*)export class /g, '$1class ' )
- .replace( /(\n\t*)export default function /, '$1export function ' );
- }
- }
-};
diff --git a/packages/jsdoc-plugins/lib/fix-code-snippets.js b/packages/jsdoc-plugins/lib/fix-code-snippets.js
deleted file mode 100644
index fd8178936..000000000
--- a/packages/jsdoc-plugins/lib/fix-code-snippets.js
+++ /dev/null
@@ -1,80 +0,0 @@
-/**
- * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
- * For licensing, see LICENSE.md.
- */
-
-/**
- * A fixer for doclet descriptions including code snippets.
- * After upgrading JSDoc to v. 3.6.4 snippets started to contain leading tabs or spaces.
- * This plugin removes that left padding.
- */
-exports.handlers = {
- parseComplete: e => {
- /** @type {Array.} */
- const doclets = e.doclets;
-
- for ( const doclet of doclets ) {
- if ( doclet.description ) {
- doclet.description = fixDescription( doclet.description );
- }
-
- if ( doclet.classdesc ) {
- doclet.classdesc = fixDescription( doclet.classdesc );
- }
-
- if ( doclet.params ) {
- for ( const param of doclet.params ) {
- if ( param.description ) {
- param.description = fixDescription( param.description );
- }
- }
- }
-
- if ( doclet.returns ) {
- for ( const returnObject of doclet.returns ) {
- if ( returnObject.description ) {
- returnObject.description = fixDescription( returnObject.description );
- }
- }
- }
-
- if ( doclet.properties ) {
- for ( const property of doclet.properties ) {
- if ( property.description ) {
- property.description = fixDescription( property.description );
- }
- }
- }
- }
- }
-};
-
-function fixDescription( desc ) {
- return desc.replace( /(.*?)<\/code><\/pre>/gs, ( _match, codeSnippetContent ) => {
- const codeRows = codeSnippetContent.split( '\n' );
-
- let paddingSize = 0;
-
- while ( true ) {
- const paddingText = codeRows[ 0 ].slice( 0, paddingSize + 1 );
-
- // When some row starts with a different text or
- // padding contains some non-whitespace characters
- // then it means that it is no loner a padding.
- if (
- ( codeRows.some( row => /\S/.test( row ) && !row.startsWith( paddingText ) ) ) ||
- /\S/.test( paddingText )
- ) {
- break;
- }
-
- paddingSize++;
- }
-
- return (
- '' +
- codeRows.map( row => row.slice( paddingSize ) ).join( '\n' ) +
- '
'
- );
- } );
-}
diff --git a/packages/jsdoc-plugins/lib/longname-fixer/fixers/convert-short-refs-to-full-refs.js b/packages/jsdoc-plugins/lib/longname-fixer/fixers/convert-short-refs-to-full-refs.js
deleted file mode 100644
index 8de5b6418..000000000
--- a/packages/jsdoc-plugins/lib/longname-fixer/fixers/convert-short-refs-to-full-refs.js
+++ /dev/null
@@ -1,227 +0,0 @@
-/**
- * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
- * For licensing, see LICENSE.md.
- */
-
-'use strict';
-
-const assign = Object.assign;
-
-/**
- * @param {Array.} doclets
- */
-function convertShortRefsToFullRefs( doclets ) {
- addMissingModulePart( doclets );
- convertShortRefsInLongnameAndMemberof( doclets );
- convertShortRefsInFireTag( doclets );
- convertShortRefsInSeeTag( doclets );
- convertShortRefsInLinks( doclets );
-}
-
-/** @param {Array.} doclets */
-function addMissingModulePart( doclets ) {
- /** @type {Record} */
- const fileNameModuleDoclets = {};
-
- for ( const doclet of doclets ) {
- if ( doclet.kind === 'module' ) {
- fileNameModuleDoclets[ doclet.meta.path + '/' + doclet.meta.filename ] = doclet;
- }
- }
-
- for ( const doclet of doclets ) {
- if ( [ 'interface', 'class', 'mixin' ].includes( doclet.kind ) ) {
- if (
- !doclet.longname.startsWith( 'module:' ) &&
- fileNameModuleDoclets[ doclet.meta.path + '/' + doclet.meta.filename ]
- ) {
- const module = fileNameModuleDoclets[ doclet.meta.path + '/' + doclet.meta.filename ];
-
- assign( doclet, {
- scope: 'inner',
- memberof: module.longname,
- longname: module.longname + '~' + doclet.longname
- } );
- }
- }
- }
-}
-
-/** @param {Array.} doclets */
-function convertShortRefsInLongnameAndMemberof( doclets ) {
- const fileDoclets = groupDocletsByFiles( doclets );
-
- for ( const doclet of doclets ) {
- const parentDoclet = getCorrespondingParent( fileDoclets[ doclet.meta.path + '/' + doclet.meta.filename ], doclet );
-
- const firstNameChar = doclet.longname[ 0 ];
-
- if ( firstNameChar === '~' ) {
- assign( doclet, {
- memberof: parentDoclet.memberof + '~' + parentDoclet.name,
- longname: parentDoclet.memberof + doclet.longname
- } );
- } else if ( firstNameChar === '#' ) {
- assign( doclet, {
- memberof: parentDoclet.longname,
- longname: parentDoclet.longname + doclet.longname
- } );
- }
-
- // Fixes longname in events containing ':' in their names (e.g. change:attribute)
- if ( doclet.kind === 'event' ) {
- if ( doclet.longname.includes( '~' ) && doclet.longname.includes( '#' ) ) {
- continue;
- }
-
- doclet.memberof = parentDoclet.longname;
-
- if ( !doclet.name.includes( 'event' ) ) {
- doclet.longname = parentDoclet.longname + '#event:' + doclet.name;
- } else {
- doclet.longname = parentDoclet.longname + '#' + doclet.name;
- }
- }
- }
-}
-
-/** @param {Array.} doclets */
-function convertShortRefsInFireTag( doclets ) {
- for ( const doclet of doclets ) {
- if ( !doclet.fires ) {
- continue;
- }
-
- doclet.fires = doclet.fires.map( event => {
- if ( event.includes( 'module:' ) ) {
- return event;
- }
-
- if ( !event.includes( 'event:' ) ) {
- event = 'event:' + event;
- }
-
- if ( doclet.memberof.includes( '~' ) ) {
- return doclet.memberof + '#' + event;
- }
-
- return doclet.longname + '#' + event;
- } );
- }
-}
-
-/** @param {Array.} doclets */
-function convertShortRefsInSeeTag( doclets ) {
- /** @type {Doclet} */
- let lastInterfaceOrClass;
-
- for ( const doclet of doclets ) {
- if ( [ 'interface', 'class', 'mixin' ].includes( doclet.kind ) ) {
- lastInterfaceOrClass = doclet;
- }
-
- if ( !doclet.see ) {
- continue;
- }
-
- doclet.see = doclet.see.map( see => {
- if ( see[ 0 ] === '#' ) {
- return lastInterfaceOrClass.longname + see;
- }
-
- if ( see[ 0 ] === '~' ) {
- return lastInterfaceOrClass.memberof + see;
- }
-
- return see;
- } );
- }
-}
-
-function convertShortRefsInLinks( doclets ) {
- const fileDoclets = groupDocletsByFiles( doclets );
-
- for ( const doclet of doclets ) {
- const parentDoclet = getCorrespondingParent( fileDoclets[ doclet.meta.path + '/' + doclet.meta.filename ], doclet );
-
- let memberof = doclet.memberof;
-
- // Errors have their own module 'module/errors'.
- // Shortened links in error descriptions should link to the class items, not the error module.
- if ( doclet.kind === 'error' && parentDoclet ) {
- memberof = parentDoclet.longname;
- }
-
- const linkRegExp = /{@link *([~#][^}]+)}/g;
- const replacer = ( _fullLink, linkContent ) => {
- const [ ref, ...linkDescription ] = linkContent.split( ' ' );
- const [ className, methodName ] = ref.split( '#' );
-
- let result = '{@link ' + memberof;
-
- if ( !memberof.includes( className ) ) {
- return result + linkContent + '}';
- }
-
- if ( methodName ) {
- result += '#' + methodName;
- }
-
- result += linkDescription.map( word => ' ' + word ).join( ' ' );
-
- return result + '}';
- };
-
- const comment = doclet.comment.replace( linkRegExp, replacer );
-
- let description = doclet.description;
-
- if ( description ) {
- description = doclet.description.replace( linkRegExp, replacer );
- }
-
- Object.assign( doclet, { comment, description } );
- }
-}
-
-/**
- * @param {Array.} doclets
- */
-function groupDocletsByFiles( doclets ) {
- /** @type {Record.>}*/
- const files = {};
-
- for ( const doclet of doclets ) {
- if ( !files[ doclet.meta.path + '/' + doclet.meta.filename ] ) {
- files[ doclet.meta.path + '/' + doclet.meta.filename ] = [];
- }
-
- files[ doclet.meta.path + '/' + doclet.meta.filename ].push( doclet );
- }
-
- return files;
-}
-
-/**
- * Finds within the same file the parent doclet (`class`, `interface` or `mixin`).
- *
- * @param {Array.} fileDoclets
- * @param {Doclet} doclet
-*/
-function getCorrespondingParent( fileDoclets, doclet ) {
- let closestParent = null;
- let closestLine = -1;
-
- for ( const fileDoclet of fileDoclets ) {
- if ( [ 'interface', 'class', 'mixin' ].includes( fileDoclet.kind ) ) {
- if ( fileDoclet.meta.lineno > closestLine && fileDoclet.meta.lineno <= doclet.meta.lineno ) {
- closestParent = fileDoclet;
- closestLine = fileDoclet.meta.lineno;
- }
- }
- }
-
- return closestParent;
-}
-
-module.exports = convertShortRefsToFullRefs;
diff --git a/packages/jsdoc-plugins/lib/longname-fixer/fixers/fix-incorrect-class-constructor.js b/packages/jsdoc-plugins/lib/longname-fixer/fixers/fix-incorrect-class-constructor.js
deleted file mode 100644
index 8b6dc7045..000000000
--- a/packages/jsdoc-plugins/lib/longname-fixer/fixers/fix-incorrect-class-constructor.js
+++ /dev/null
@@ -1,68 +0,0 @@
-/**
- * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
- * For licensing, see LICENSE.md.
- */
-
-'use strict';
-
-const { isEqual } = require( 'lodash' );
-
-/**
- * This function is supposed to fix both constructor and class doclets.
- *
- * JSDoc completely messes up doclets for constructors and classes.
- * They are duplicated (where the only one contains valuable data), have invalid descriptions, etc.
- *
- * @param {Array.} doclets
- */
-module.exports = function fixIncorrectClassConstructor( doclets ) {
- const knownConstructorDoclets = new Set();
- const knownDoclets = new Map();
-
- for ( const doclet of doclets ) {
- // Constructor doclets have the same longname as class doclets.
- if ( doclet.kind === 'class' && doclet.params ) {
- Object.assign( doclet, {
- longname: doclet.longname + '#constructor',
- memberof: doclet.longname,
- kind: 'function',
- scope: 'instance',
- name: 'constructor'
- } );
-
- if ( doclet.comment ) {
- delete doclet.undocumented;
- }
- }
-
- if ( doclet.kind === 'function' && doclet.name === 'constructor' ) {
- if ( knownConstructorDoclets.has( doclet.longname ) ) {
- doclet.ignore = true;
- }
-
- knownConstructorDoclets.add( doclet.longname );
- }
-
- if ( doclet.kind === 'class' && doclet.classdesc ) {
- if ( doclet.description && doclet.description !== doclet.classdesc ) {
- doclet.ignore = true;
- } else {
- if ( doclet.classdesc ) {
- delete doclet.undocumented;
- }
- }
-
- if ( !doclet.comment || doclet.comment.includes( '@inheritDoc' ) ) {
- doclet.ignore = true;
- }
- }
-
- // Remove duplicates (mostly they are created by the relation-fixer).
- // The whole relation-fixer's logic should be rewritten.
- if ( knownDoclets.has( doclet.longname ) && isEqual( doclet, knownDoclets.get( doclet.longname ) ) ) {
- doclet.ignore = true;
- }
-
- knownDoclets.set( doclet.longname, doclet );
- }
-};
diff --git a/packages/jsdoc-plugins/lib/longname-fixer/longname-fixer.js b/packages/jsdoc-plugins/lib/longname-fixer/longname-fixer.js
deleted file mode 100644
index 3c6b526aa..000000000
--- a/packages/jsdoc-plugins/lib/longname-fixer/longname-fixer.js
+++ /dev/null
@@ -1,41 +0,0 @@
-/**
- * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
- * For licensing, see LICENSE.md.
- */
-
-/**
- * @see http://usejsdoc.org/about-plugins.html
- */
-
-'use strict';
-
-const convertShortRefsToFullRefs = require( './fixers/convert-short-refs-to-full-refs' );
-const fixIncorrectClassConstructor = require( './fixers/fix-incorrect-class-constructor' );
-
-const modulePattern = /module:[\w-]+(\/[\w-]+)*$/;
-
-exports.handlers = {
- parseComplete: e => {
- const doclets = e.doclets;
-
- fixIncorrectClassConstructor( doclets );
- convertShortRefsToFullRefs( doclets );
-
- // Fix exported functions.
- // All exported functions should be marked as module's `inner`.
- for ( const doclet of doclets ) {
- if ( doclet.kind === 'function' && doclet.scope === 'static' && modulePattern.test( doclet.memberof ) ) {
- doclet.scope = 'inner';
- doclet.longname = doclet.longname.replace( /\./, '~' );
- }
-
- if ( doclet.kind === 'constant' && doclet.scope === 'static' && modulePattern.test( doclet.memberof ) ) {
- doclet.scope = 'inner';
- doclet.longname = doclet.longname.replace( /\./, '~' );
- }
- }
-
- // Filter out incorrect doclets.
- e.doclets = doclets.filter( doclet => !doclet.ignore );
- }
-};
diff --git a/packages/jsdoc-plugins/lib/observable-event-provider/addmissingeventdocletsforobservables.js b/packages/jsdoc-plugins/lib/observable-event-provider/addmissingeventdocletsforobservables.js
deleted file mode 100644
index d898730b7..000000000
--- a/packages/jsdoc-plugins/lib/observable-event-provider/addmissingeventdocletsforobservables.js
+++ /dev/null
@@ -1,133 +0,0 @@
-/**
- * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
- * For licensing, see LICENSE.md.
- */
-
-'use strict';
-
-const { cloneDeep } = require( 'lodash' );
-
-/**
- * Creates event doclets for observable properties if they're missing.
- * See #285.
- *
- * @param {Array.} doclets
- * @returns {Array.} An array of enhanced doclets.
- */
-module.exports = function addMissingEventDocletsForObservables( doclets ) {
- doclets = markFiredEvents( doclets );
-
- const newEventDoclets = createMissingEventDoclets( doclets );
-
- return doclets.concat( newEventDoclets );
-};
-
-// @param {Array.} doclets
-// @returns {Array.} An array of doclets with fixed fires property.
-function markFiredEvents( doclets ) {
- return doclets.map( doclet => {
- if ( !doclet.observable ) {
- return doclet;
- }
-
- const newDoclet = cloneDeep( doclet );
- const eventName = newDoclet.memberof + '#event:change:' + newDoclet.name;
-
- if ( !newDoclet.fires ) {
- newDoclet.fires = [];
- }
-
- if ( !newDoclet.fires.includes( eventName ) ) {
- newDoclet.fires.push( eventName );
- }
-
- return newDoclet;
- } );
-}
-
-// @param {Array.} doclets
-// @returns {Array.} An array of new event doclets.
-function createMissingEventDoclets( doclets ) {
- const eventLongNames = doclets.filter( d => d.kind === 'event' ).map( d => d.longname );
- const observableEvents = getObservableEvents( doclets );
-
- return observableEvents
- // Skip for existing events.
- .filter( observableEvent => !eventLongNames.includes( observableEvent.name ) )
- .map( observableEvent => {
- const originalProperty = observableEvent.property;
-
- const typeNames = originalProperty.type ?
- originalProperty.type.names :
- [ '*' ];
-
- const eventDoclet = {
- comment: '',
- meta: cloneDeep( originalProperty.meta ),
- description: `Fired when the ${ originalProperty.name }
property changed value.
`,
- kind: 'event',
- name: 'change:' + originalProperty.name,
- params: [ {
- type: {
- names: [ 'module:utils/eventinfo~EventInfo' ]
- },
- description: '
An object containing information about the fired event.
',
- name: 'eventInfo'
- },
- {
- type: {
- names: [ 'String' ]
- },
- description: `Name of the changed property (${ originalProperty.name }
).
`,
- name: 'name'
- },
- {
- type: {
- names: [ ...typeNames ]
- },
- description: [
- `New value of the ${ originalProperty.name }
property with given key or null
, `,
- 'if operation should remove property.
'
- ].join( '' ),
- name: 'value'
- },
- {
- type: {
- names: [ ...typeNames ]
- },
- description: [
- `Old value of the ${ originalProperty.name }
property with given key or null
, `,
- 'if property was not set before.
'
- ].join( '' ),
- name: 'oldValue'
- } ],
- memberof: originalProperty.memberof,
- longname: observableEvent.name,
- scope: 'instance',
- access: originalProperty.access ? originalProperty.access : 'public'
- };
-
- if ( originalProperty.inherited ) {
- eventDoclet.inherited = true;
- }
-
- if ( originalProperty.mixed ) {
- eventDoclet.mixed = true;
- }
-
- return eventDoclet;
- } );
-}
-
-function getObservableEvents( doclets ) {
- return doclets
- .filter( doclet => doclet.observable )
- .map( observableDoclet => {
- const eventName = observableDoclet.memberof + '#event:change:' + observableDoclet.name;
-
- return {
- name: eventName,
- property: observableDoclet
- };
- } );
-}
diff --git a/packages/jsdoc-plugins/lib/observable-event-provider/index.js b/packages/jsdoc-plugins/lib/observable-event-provider/index.js
deleted file mode 100644
index 83285112a..000000000
--- a/packages/jsdoc-plugins/lib/observable-event-provider/index.js
+++ /dev/null
@@ -1,16 +0,0 @@
-/**
- * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
- * For licensing, see LICENSE.md.
- */
-
-'use strict';
-
-const addMissingEventDocletsForObservables = require( './addmissingeventdocletsforobservables' );
-
-module.exports = {
- handlers: {
- processingComplete( e ) {
- e.doclets = addMissingEventDocletsForObservables( e.doclets );
- }
- }
-};
diff --git a/packages/jsdoc-plugins/lib/purge-private-api-docs.js b/packages/jsdoc-plugins/lib/purge-private-api-docs.js
deleted file mode 100644
index 79586ffad..000000000
--- a/packages/jsdoc-plugins/lib/purge-private-api-docs.js
+++ /dev/null
@@ -1,113 +0,0 @@
-/**
- * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
- * For licensing, see LICENSE.md.
- */
-
-// A plugin for JSDoc that should purge non-public API docs.
-// Public API docs should contain the `@publicApi` tag below the `@module` tag.
-
-const path = require( 'path' );
-const fs = require( 'fs' );
-
-module.exports = {
- handlers: {
- /**
- * @see http://usejsdoc.org/about-plugins.html#event-beforeparse
- * @param {any} evt
- */
- beforeParse( evt ) {
- // Skip public packages.
- if ( !isPrivatePackageFile( evt.filename ) ) {
- return;
- }
-
- // Do not emit any JSDoc doclet if the `@publicApi` tag is missing in that file.
- if ( !evt.source.includes( '@publicApi' ) ) {
- evt.source = '';
-
- return;
- }
-
- // Do not emit any JSDoc doclet if the '@module' tag is missing and log a warning.
- if ( !evt.source.includes( '@module' ) ) {
- evt.source = '';
-
- const filename = path.relative( process.cwd(), evt.filename );
-
- console.warn( `File ${ filename } did not start with '@module' tag and hence it will be ignored while building docs.` );
- }
- },
-
- processingComplete( evt ) {
- for ( const doclet of evt.doclets ) {
- if ( doclet.meta && doclet.meta.path ) {
- if ( isPrivatePackageFile( doclet.meta.path ) ) {
- doclet.skipSource = true;
- }
- }
- }
-
- // Filter out protected and private doclets.
- // It's a simple and naive approach, this way private and protected
- // doclets from inherited public resources are also filtered out.
- evt.doclets = evt.doclets.filter( doclet => {
- if ( !doclet.skipSource ) {
- return true;
- }
-
- if ( doclet.access === 'private' ) {
- return false;
- }
-
- if ( doclet.access === 'protected' ) {
- return false;
- }
-
- return true;
- } );
- }
- },
-
- /**
- * See http://usejsdoc.org/about-plugins.html#tag-definition.
- *
- * @param {any} dictionary
- */
- defineTags( dictionary ) {
- dictionary.defineTag( 'publicApi', {
- mustHaveValue: false,
- canHaveType: false,
- canHaveName: false,
-
- /**
- * @param {any} doclet
- * @param {any} tag
- */
- onTagged( doclet ) {
- Object.assign( doclet, {
- publicApi: true
- } );
- }
- } );
- }
-};
-
-function isPrivatePackageFile( fileName ) {
- let dirName = path.dirname( fileName );
-
- while ( true ) {
- const pathToPackageJson = path.join( dirName, 'package.json' );
-
- if ( fs.existsSync( pathToPackageJson ) ) {
- return !!JSON.parse( fs.readFileSync( pathToPackageJson ).toString() ).private;
- }
-
- dirName = path.dirname( dirName );
-
- // Root's dirname is equal to the root,
- // So if this check passes, then we should break this endless loop.
- if ( dirName === path.dirname( dirName ) ) {
- throw new Error( `${ fileName } is not placed inside the NPM project.` );
- }
- }
-}
diff --git a/packages/jsdoc-plugins/lib/relation-fixer/addmissingdoclets.js b/packages/jsdoc-plugins/lib/relation-fixer/addmissingdoclets.js
deleted file mode 100644
index 127beb890..000000000
--- a/packages/jsdoc-plugins/lib/relation-fixer/addmissingdoclets.js
+++ /dev/null
@@ -1,148 +0,0 @@
-/**
- * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
- * For licensing, see LICENSE.md.
- */
-
-'use strict';
-
-const getMissingDocletsData = require( './getmissingdocletsdata' );
-const DocletCollection = require( '../utils/doclet-collection' );
-
-module.exports = addMissingDoclets;
-
-/**
- * Adds missing doclets for members coming from implemented interfaces, extended classes, mixins and typedefs.
- * It does also support inheriting static members and typedef inheritance, which both are not supported by the JSDoc.
- * This function requires input to be preprocessed by the `buildRelations()` function.
- *
- * @param {Array.} doclets
- * @returns {Array.}
- */
-function addMissingDoclets( doclets ) {
- const docletCollection = new DocletCollection();
-
- for ( const doclet of doclets ) {
- // Group doclets by memberof property.
- docletCollection.add( `memberof:${ doclet.memberof }`, doclet );
- }
-
- const extensibleDoclets = doclets.filter( doclet => {
- return (
- doclet.kind === 'class' ||
- doclet.kind === 'interface' ||
- doclet.kind === 'mixin'
- );
- } );
-
- /** @type {Array.} */
- const newDocletsToAdd = [];
-
- /** @type {Array.} */
- const docletsToIgnore = [];
-
- /**
- * @type {Array.