source: imaps-frontend/node_modules/braces/lib/compile.js

main
Last change on this file was 0c6b92a, checked in by stefan toskovski <stefantoska84@…>, 5 weeks ago

Pred finalna verzija

  • Property mode set to 100644
File size: 1.5 KB
Line 
1'use strict';
2
3const fill = require('fill-range');
4const utils = require('./utils');
5
6const compile = (ast, options = {}) => {
7 const walk = (node, parent = {}) => {
8 const invalidBlock = utils.isInvalidBrace(parent);
9 const invalidNode = node.invalid === true && options.escapeInvalid === true;
10 const invalid = invalidBlock === true || invalidNode === true;
11 const prefix = options.escapeInvalid === true ? '\\' : '';
12 let output = '';
13
14 if (node.isOpen === true) {
15 return prefix + node.value;
16 }
17
18 if (node.isClose === true) {
19 console.log('node.isClose', prefix, node.value);
20 return prefix + node.value;
21 }
22
23 if (node.type === 'open') {
24 return invalid ? prefix + node.value : '(';
25 }
26
27 if (node.type === 'close') {
28 return invalid ? prefix + node.value : ')';
29 }
30
31 if (node.type === 'comma') {
32 return node.prev.type === 'comma' ? '' : invalid ? node.value : '|';
33 }
34
35 if (node.value) {
36 return node.value;
37 }
38
39 if (node.nodes && node.ranges > 0) {
40 const args = utils.reduce(node.nodes);
41 const range = fill(...args, { ...options, wrap: false, toRegex: true, strictZeros: true });
42
43 if (range.length !== 0) {
44 return args.length > 1 && range.length > 1 ? `(${range})` : range;
45 }
46 }
47
48 if (node.nodes) {
49 for (const child of node.nodes) {
50 output += walk(child, node);
51 }
52 }
53
54 return output;
55 };
56
57 return walk(ast);
58};
59
60module.exports = compile;
Note: See TracBrowser for help on using the repository browser.