From 866cdee501f1406d17102b7f275d18635c14f868 Mon Sep 17 00:00:00 2001 From: Chlod Alejandro Date: Wed, 22 Feb 2023 13:31:29 +0800 Subject: [PATCH] util: add indices --- scripts/genUtilIndices.js | 62 +++++++++++++++++++++++++++++++++++++++ src/util/index.ts | 40 +++++++++++++++++++++++++ src/wiki/util/index.ts | 50 +++++++++++++++++++++++++++++++ 3 files changed, 152 insertions(+) create mode 100644 scripts/genUtilIndices.js create mode 100644 src/util/index.ts create mode 100644 src/wiki/util/index.ts diff --git a/scripts/genUtilIndices.js b/scripts/genUtilIndices.js new file mode 100644 index 00000000..9be6533f --- /dev/null +++ b/scripts/genUtilIndices.js @@ -0,0 +1,62 @@ +const fs = require( 'fs/promises' ); +const path = require( 'path' ); + +/** + * Generates `util` and `mw/util` indices. + */ +( async () => { + + /** + * + * @param subpath + */ + async function genIndex( subpath ) { + const utilPath = path.join( process.cwd(), 'src', subpath ); + const modules = []; + const hasNoDefault = []; + + const dir = ( await fs.opendir( utilPath ) ); + for await ( const fse of dir ) { + const moduleName = fse.name.replace( /\.ts$/, '' ); + + if ( fse.isFile() && fse.name !== 'index.ts' ) { + modules.push( moduleName ); + if ( + !( await fs.readFile( path.join( utilPath, fse.name ) ) ) + .toString( 'utf8' ) + .includes( 'export default' ) + ) { + hasNoDefault.push( moduleName ); + } + } + } + + await fs.writeFile( + path.join( utilPath, 'index.ts' ), + modules + .map( v => `import ${ + hasNoDefault.includes( v ) ? `* as ${v}` : v + } from './${v}';` ) + .join( '\n' ) + + '\n' + + 'export default {\n' + + modules + .map( ( v, i ) => `\t${v}: ${v}` + ( i === modules.length - 1 ? '' : ',' ) ) + .join( '\n' ) + '\n' + + '};\n' + ); + } + + try { + await genIndex( 'util' ); + } catch ( e ) { + console.error( 'Failed to generate indices for src/util.', e ); + } + + try { + await genIndex( 'wiki/util' ); + } catch ( e ) { + console.error( 'Failed to generate indices for src/wiki/util.', e ); + } + +} )(); diff --git a/src/util/index.ts b/src/util/index.ts new file mode 100644 index 00000000..cac2f7c2 --- /dev/null +++ b/src/util/index.ts @@ -0,0 +1,40 @@ +import * as blockExit from './blockExit'; +import classMix from './classMix'; +import cleanParams from './cleanParams'; +import cloneRegex from './cloneRegex'; +import copyToClipboard from './copyToClipboard'; +import equalTitle from './equalTitle'; +import fromObjectEntries from './fromObjectEntries'; +import generateId from './generateId'; +import getObjectValues from './getObjectValues'; +import last from './last'; +import matchAll from './matchAll'; +import moveToStart from './moveToStart'; +import pickSequence from './pickSequence'; +import removeElement from './removeElement'; +import Requester from './Requester'; +import sleep from './sleep'; +import swapElements from './swapElements'; +import unwrapWidget from './unwrapWidget'; +import yesNo from './yesNo'; +export default { + blockExit: blockExit, + classMix: classMix, + cleanParams: cleanParams, + cloneRegex: cloneRegex, + copyToClipboard: copyToClipboard, + equalTitle: equalTitle, + fromObjectEntries: fromObjectEntries, + generateId: generateId, + getObjectValues: getObjectValues, + last: last, + matchAll: matchAll, + moveToStart: moveToStart, + pickSequence: pickSequence, + removeElement: removeElement, + Requester: Requester, + sleep: sleep, + swapElements: swapElements, + unwrapWidget: unwrapWidget, + yesNo: yesNo +}; diff --git a/src/wiki/util/index.ts b/src/wiki/util/index.ts new file mode 100644 index 00000000..88eddf8e --- /dev/null +++ b/src/wiki/util/index.ts @@ -0,0 +1,50 @@ +import anchorToTitle from './anchorToTitle'; +import decorateEditSummary from './decorateEditSummary'; +import delink from './delink'; +import errorToOO from './errorToOO'; +import getNativeRange from './getNativeRange'; +import getPageContent from './getPageContent'; +import getPageTitle from './getPageTitle'; +import getRevisionContent from './getRevisionContent'; +import getRevisionDiffURL from './getRevisionDiffURL'; +import getRevisionURL from './getRevisionURL'; +import getSectionHTML from './getSectionHTML'; +import getSectionId from './getSectionId'; +import guessAuthor from './guessAuthor'; +import msgEval from './msgEval'; +import normalizeTitle from './normalizeTitle'; +import nsId from './nsId'; +import openWindow from './openWindow'; +import performHacks from './performHacks'; +import purge from './purge'; +import renderWikitext from './renderWikitext'; +import sectionHeadingId from './sectionHeadingId'; +import sectionHeadingN from './sectionHeadingN'; +import sectionHeadingName from './sectionHeadingName'; +import toRedirectsObject from './toRedirectsObject'; +export default { + anchorToTitle: anchorToTitle, + decorateEditSummary: decorateEditSummary, + delink: delink, + errorToOO: errorToOO, + getNativeRange: getNativeRange, + getPageContent: getPageContent, + getPageTitle: getPageTitle, + getRevisionContent: getRevisionContent, + getRevisionDiffURL: getRevisionDiffURL, + getRevisionURL: getRevisionURL, + getSectionHTML: getSectionHTML, + getSectionId: getSectionId, + guessAuthor: guessAuthor, + msgEval: msgEval, + normalizeTitle: normalizeTitle, + nsId: nsId, + openWindow: openWindow, + performHacks: performHacks, + purge: purge, + renderWikitext: renderWikitext, + sectionHeadingId: sectionHeadingId, + sectionHeadingN: sectionHeadingN, + sectionHeadingName: sectionHeadingName, + toRedirectsObject: toRedirectsObject +};