/
Bybaleshqa
/
Forktest
Обзор
Документация
Войти
/
Bybaleshqa
/
Forktest
Код
Запросы
1
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
develop
scripts/theme-parser/comp.js
100 строк
3 KB
Denis Svyatovets
chore: добавлен парсинг признака deprecated у токенов
03 июл 2024, 09:13
03 июл 2024, 09:13
df66427
Код
Авторство
О чём код?
const fs = require('fs') const ts = require('typescript') const path = require('path') const { createParseTokenAssignment, findChildrenByKind, createLogChildren, } = require('./utils') const readCompFile = (path) => { const rootNode = ts.createSourceFile( path, fs.readFileSync(path, 'utf8'), // sourceText ts.ScriptTarget.Latest // langugeVersion ) const parseTokenAssignment = createParseTokenAssignment(rootNode) const firstSt = findChildrenByKind(rootNode, ts.SyntaxKind.FirstStatement) const res = {} firstSt.forEach((st) => { const vdl = findChildrenByKind(st, ts.SyntaxKind.VariableDeclarationList)[0] const vd = findChildrenByKind(vdl, ts.SyntaxKind.VariableDeclaration)[0] const funcName = findChildrenByKind(vd, ts.SyntaxKind.Identifier)[0] .escapedText const compName = funcName.replace('create', '')[0].toLowerCase() + funcName.replace('create', '').slice(1) const func = findChildrenByKind(vd, ts.SyntaxKind.ArrowFunction)[0] const pExp = findChildrenByKind( func, ts.SyntaxKind.ParenthesizedExpression )[0] const objExp = findChildrenByKind( pExp, ts.SyntaxKind.ObjectLiteralExpression )[0] const compTokens = {} objExp.forEachChild((tokenAssignment) => { const tokenName = findChildrenByKind( tokenAssignment, ts.SyntaxKind.Identifier )[0].escapedText const tokenFullName = `comp.${compName}.${tokenName}` let tokenValueAssignment let replacements = [] tokenAssignment.forEachChild((x) => { if (x.kind === ts.SyntaxKind.Identifier) { const text = x.getFullText(rootNode) if (text.includes('@deprecated')) { replacements = (text.match(/`([a-z|.]*)`/gi) || []).map( (depToken) => depToken.replace(/`/g, '') ) } return } tokenValueAssignment = x }) compTokens[tokenName] = { compName, tokenName, tokenFullName, ...parseTokenAssignment(tokenValueAssignment), ...(replacements.length ? { replacements } : {}), } }) res[compName] = compTokens }) return res } const getCompTokens = () => { const compFolder = path.resolve(__dirname, '../../packages/theme/src/comp') return fs .readdirSync(compFolder, { withFileTypes: true }) .reduce((acc, x) => { if (!x.isDirectory() && !x.name.includes('index')) { acc = { ...acc, ...readCompFile(`${compFolder}/${x.name}`), } } return acc }, {}) } module.exports = { getCompTokens, }