123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- /**
- * The MIT License (MIT)
- * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>
- */
- 'use strict';
- /**
- * A regexp-tree plugin to translate `/./s` to `/[\0-\uFFFF]/`.
- */
- module.exports = {
- // Whether `u` flag present. In which case we transform to
- // \u{10FFFF} instead of \uFFFF.
- _hasUFlag: false,
- // Only run this plugin if we have `s` flag.
- shouldRun: function shouldRun(ast) {
- var shouldRun = ast.flags.includes('s');
- if (!shouldRun) {
- return false;
- }
- // Strip the `s` flag.
- ast.flags = ast.flags.replace('s', '');
- // Whether we have also `u`.
- this._hasUFlag = ast.flags.includes('u');
- return true;
- },
- Char: function Char(path) {
- var node = path.node;
- if (node.kind !== 'meta' || node.value !== '.') {
- return;
- }
- var toValue = '\\uFFFF';
- var toSymbol = '\uFFFF';
- if (this._hasUFlag) {
- toValue = '\\u{10FFFF}';
- toSymbol = '\uDBFF\uDFFF';
- }
- path.replace({
- type: 'CharacterClass',
- expressions: [{
- type: 'ClassRange',
- from: {
- type: 'Char',
- value: '\\0',
- kind: 'decimal',
- symbol: '\0'
- },
- to: {
- type: 'Char',
- value: toValue,
- kind: 'unicode',
- symbol: toSymbol
- }
- }]
- });
- }
- };
|