@lcap/nasl
Version:
NetEase Application Specific Language
44 lines • 1.51 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.sortTsString = void 0;
const babel = require('@babel/core');
const generate = require('@babel/generator').default;
const traverse = require('@babel/traverse').default;
const t = require('@babel/types');
function sortTsString(tsString) {
const str = `type a = ${tsString}`;
let ast;
try {
ast = babel.parseSync(str, {
filename: 'result.ts',
presets: [require('@babel/preset-typescript')],
});
}
catch (error) {
return null;
}
const visitor = {
TSTypeLiteral(path) {
path.node.members.sort((a, b) => {
if (a.type === 'TSPropertySignature' && b.type === 'TSPropertySignature') {
return a.key.name.localeCompare(b.key.name);
}
return 0;
});
},
ArrayExpression(path) {
path.node.elements.sort((a, b) => {
if (a.type === 'ObjectExpression' && b.type === 'ObjectExpression') {
return t.isIdentifier(a.properties[0].key) && t.isIdentifier(b.properties[0].key)
? a.properties[0].key.name.localeCompare(b.properties[0].key.name)
: 0;
}
return 0;
});
},
};
traverse(ast, visitor);
return generate(ast).code;
}
exports.sortTsString = sortTsString;
//# sourceMappingURL=sortTsString.js.map