41 lines
1.7 KiB
JavaScript
41 lines
1.7 KiB
JavaScript
'use strict';
|
|
|
|
// JSDoc has issues getting the name of `export default class NAME {}`
|
|
// this gross regex hacks around that issue until it is fixed.
|
|
// See: https://github.com/jsdoc3/jsdoc/issues/1137#issuecomment-174829004
|
|
|
|
const rgxGross = /(\/\*{2}[\W\w]+?\*\/)\s*export\s+default\s+class\s+([^\s]*)/g;
|
|
const grossReplace = 'export default $2;\n\n$1\nclass $2';
|
|
|
|
// JSDoc has issues with expressing member properties within a class
|
|
// this is another terrible hack to address this issue.
|
|
// See: https://github.com/jsdoc3/jsdoc/issues/1301
|
|
|
|
// eslint-disable-next-line no-useless-escape
|
|
const rgxMember = /(\@member \{[^\}]+\})(\n[^\/]+\/[\b\s]+)(this\.([^\s]+))/g;
|
|
const rgxClassName = /export (default )?class (.+?)\s/;
|
|
// eslint-disable-next-line no-useless-escape
|
|
const rgxNamespace = /\@memberof ([\.a-zA-Z0-9]+)\s/;
|
|
|
|
exports.handlers = {
|
|
/**
|
|
* Called before parsing a file, giving us a change to replace the source.
|
|
*
|
|
* @param {*} e - The `beforeParse` event data.
|
|
* @param {string} e.filename - The name of the file being parsed.
|
|
* @param {string} e.source - The source of the file being parsed.
|
|
*/
|
|
beforeParse(e) {
|
|
const namespace = e.source.match(rgxNamespace);
|
|
const className = e.source.match(rgxClassName);
|
|
|
|
// Fix members not showing up attached to class
|
|
if (namespace && className) {
|
|
// console.log(`${namespace[1]}.${className[2]}`);
|
|
// Replaces "@member {Type}"" with "@member {Type} PIXI.ClassName#prop"
|
|
e.source = e.source.replace(rgxMember, `$1 ${namespace[1]}.${className[2]}#$4$2$3`);
|
|
}
|
|
|
|
e.source = e.source.replace(rgxGross, grossReplace);
|
|
},
|
|
}; |