Files
2025-07-24 18:46:24 +02:00

53 lines
1.7 KiB
TypeScript

export type RegexPlusAst = OnigurumaAst & {
options: {
disable: {
[key: string]: boolean;
};
force: {
[key: string]: boolean;
};
};
_originMap: Map<CapturingGroupNode, CapturingGroupNode>;
_strategy: string | null;
};
/**
@import {CapturingGroupNode, OnigurumaAst, Node} from 'oniguruma-parser/parser';
@import {Visitor} from 'oniguruma-parser/traverser';
*/
/**
@typedef {
OnigurumaAst & {
options: {
disable: {[key: string]: boolean};
force: {[key: string]: boolean};
};
_originMap: Map<CapturingGroupNode, CapturingGroupNode>;
_strategy: string | null;
}
} RegexPlusAst
*/
/**
Transforms an Oniguruma AST in-place to a [Regex+](https://github.com/slevithan/regex) AST.
Assumes target ES2025, expecting the generator to down-convert to the desired JS target version.
Regex+'s syntax and behavior is a strict superset of native JavaScript, so the AST is very close
to representing native ES2025 `RegExp` but with some added features (atomic groups, possessive
quantifiers, recursion). The AST doesn't use some of Regex+'s extended features like flag x or
subroutines because they follow PCRE behavior and work somewhat differently than in Oniguruma. The
AST represents what's needed to precisely reproduce Oniguruma behavior using Regex+.
@param {OnigurumaAst} ast
@param {{
accuracy?: keyof Accuracy;
asciiWordBoundaries?: boolean;
avoidSubclass?: boolean;
bestEffortTarget?: keyof Target;
}} [options]
@returns {RegexPlusAst}
*/
export function transform(ast: createAlternative, options?: {
accuracy?: "default" | "strict";
asciiWordBoundaries?: boolean;
avoidSubclass?: boolean;
bestEffortTarget?: "auto" | "ES2025" | "ES2024" | "ES2018";
}): RegexPlusAst;