{
	"root": true,

	"globals": {
		"AggregateError": false,
		"ArrayBuffer": false,
		"Atomics": false,
		"BigInt": false,
		"BigInt64Array": false,
		"BigUint64Array": false,
		"FinalizationRegistry": false,
		"globalThis": false,
		"Promise": false,
		"Proxy": false,
		"Map": false,
		"Reflect": false,
		"Set": false,
		"SharedArrayBuffer": false,
		"SuppressedError": false,
		"Symbol": false,
		"WeakMap": false,
		"WeakRef": false,
		"WeakSet": false
	},

	"env": {
		"es6": false,
		"browser": false,
		"node": true,
		"amd": false,
		"mocha": false,
		"jasmine": false
	},

	"reportUnusedDisableDirectives": true,

	"ignorePatterns": [
		"coverage/",
		".nyc_output/"
	],

	"parser": "./parser.js",

	"parserOptions": {
		"ecmaVersion": 3,
		"allowReserved": true,
		"sourceType": "script"
	},

	"rules": {
		"accessor-pairs": [2, {
			"getWithoutSet": false,
			"setWithoutGet": true,
			"enforceForClassMembers": true
		}],
		"array-bracket-newline": [2, { "multiline": true, "minItems": 3 }],
		"array-bracket-spacing": [2, "never", {
			"singleValue": false,
			"objectsInArrays": false,
			"arraysInArrays": false
		}],
		"array-callback-return": [2],
		"array-element-newline": [2, "consistent"],
		"arrow-body-style": [2, "as-needed"],
		"arrow-parens": [2, "always"],
		"arrow-spacing": [2, { "before": true, "after": true }],
		"block-scoped-var": [0],
		"block-spacing": [2, "always"],
		"brace-style": [2, "1tbs", { "allowSingleLine": true }],
		"callback-return": [2, ["callback"]],
		"camelcase": [2, {
			"properties": "always",
			"ignoreDestructuring": false,
			"ignoreImports": false,
			"allow": []
		}],
		"capitalized-comments": [0],
		"class-methods-use-this": [2, { "exceptMethods": [] }],
		"comma-dangle": [2, "never"],
		"comma-spacing": [2, { "before": false, "after": true }],
		"comma-style": [2, "last"],
		"complexity": [2, 20],
		"computed-property-spacing": [2, "never"],
		"consistent-return": [2],
		"consistent-this": [0, "that"],
		"constructor-super": [2],
		"curly": [2, "all"],
		"default-case": [2, { "commentPattern": "(?:)" }],
		"default-case-last": [2],
		"default-param-last": [2],
		"dot-location": [2, "property"],
		"dot-notation": [2, { "allowKeywords": false, "allowPattern": "throws" }],
		"eol-last": [2, "always"],
		"eqeqeq": [2],
		"for-direction": [2],
		"function-call-argument-newline": [2, "consistent"],
		"func-call-spacing": [2, "never"],
		"func-names": [0, "always", {
			"generators": "always"
		}],
		"func-name-matching": [2, "never", {
			"includeCommonJSModuleExports": false,
			"considerPropertyDescriptor": true
		}],
		"func-style": [2, "expression"],
		"function-paren-newline": [2, "multiline"],
		"generator-star-spacing": [2, {
			"before": false,
			"after": true,
			"anonymous": { "before": false, "after": true },
			"method": { "before": false, "after": true },
			"named": { "before": false, "after": true }
		}],
		"getter-return": [2, { "allowImplicit": true }],
		"global-require": [2],
		"grouped-accessor-pairs": [2, "getBeforeSet"],
		"guard-for-in": [0],
		"handle-callback-err": [0],
		"id-blacklist": [0],
		"id-denylist": [2, "native"],
		"id-length": [2, { "min": 1, "max": 20, "properties": "never" }],
		"id-match": [0],
		"implicit-arrow-linebreak": [2, "beside"],
		"indent": [2, "tab", {
			"SwitchCase": 1,
			"VariableDeclarator": 1,
			"outerIIFEBody": 1,
			"FunctionDeclaration": {
				"parameters": 1,
				"body": 1
			},
			"FunctionExpression": {
				"parameters": 1,
				"body": 1
			},
			"CallExpression": {
				"arguments": 1
			},
			"ArrayExpression": 1,
			"ObjectExpression": 1,
			"ImportDeclaration": 1,
			"flatTernaryExpressions": false,
			"ignoredNodes": [
				"JSXElement",
				"JSXElement > *",
				"JSXAttribute",
				"JSXIdentifier",
				"JSXNamespacedName",
				"JSXMemberExpression",
				"JSXSpreadAttribute",
				"JSXExpressionContainer",
				"JSXOpeningElement",
				"JSXClosingElement",
				"JSXText",
				"JSXEmptyExpression",
				"JSXSpreadChild",
				"JSXFragment",
				"JSXOpeningFragment",
				"JSXClosingFragment"
			]
		}],
		"init-declarations": [0, "always"],
		"jsx-quotes": [2, "prefer-double"],
		"key-spacing": [2, {
			"beforeColon": false,
			"afterColon": true,
			"mode": "strict"
		}],
		"keyword-spacing": [2, {
			"before": true,
			"after": true,
			"overrides": {
				"return": { "after": true },
				"throw": { "after": true },
				"case": { "after": true }
			}
		}],
		"linebreak-style": [2, "unix"],
		"line-comment-position": [0, {
			"position": "beside",
			"ignorePattern": "",
			"applyDefaultPatterns": true
		}],
		"lines-around-comment": [2, {
			"beforeBlockComment": false,
			"afterBlockComment": false,
			"beforeLineComment": false,
			"allowBlockStart": true,
			"allowBlockEnd": true
		}],
		"lines-around-directive": [2, {
			"before": "always",
			"after": "always"
		}],
		"lines-between-class-members": [2, "always", {
			"exceptAfterSingleLine": false
		}],
		"max-classes-per-file": [0, 1],
		"max-depth": [2, 4],
		"max-len": [2, 120, 4, {
			"ignoreUrls": true,
			"ignoreComments": true,
			"ignoreRegExpLiterals": true,
			"ignoreStrings": true,
			"ignoreTemplateLiterals": true
		}],
		"max-lines-per-function": [2, {
			"max": 50,
			"skipBlankLines": true,
			"skipComments": true,
			"IIFEs": true
		}],
		"max-lines": [2, {
			"max": 300,
			"skipBlankLines": true,
			"skipComments": true
		}],
		"max-nested-callbacks": [2, 2],
		"max-params": [2, 3],
		"max-statements": [2, 30],
		"max-statements-per-line": [2, { "max": 1 }],
		"multiline-comment-style": [2, "starred-block"],
		"multiline-ternary": [0, "always-multiline"],
		"new-parens": [2],
		"new-cap": [2, { "capIsNewExceptions": ["Symbol", "BigInt"] }],
		"newline-after-var": [0],
		"newline-before-return": [0],
		"newline-per-chained-call": [2, { "ignoreChainWithDepth": 6 }],
		"no-alert": [2],
		"no-array-constructor": [2],
		"no-async-promise-executor": [2],
		"no-await-in-loop": [2],
		"no-compare-neg-zero": [2],
		"no-confusing-arrow": [2],
		"no-bitwise": [0],
		"no-buffer-constructor": [2],
		"no-caller": [2],
		"no-case-declarations": [2],
		"no-catch-shadow": [2],
		"no-class-assign": [2],
		"no-cond-assign": [2],
		"no-console": [2],
		"no-const-assign": [2],
		"no-constant-condition": [2],
		"no-constructor-return": [2],
		"no-continue": [2],
		"no-control-regex": [2],
		"no-debugger": [2],
		"no-delete-var": [2],
		"no-div-regex": [2],
		"no-dupe-args": [2],
		"no-dupe-class-members": [2],
		"no-dupe-else-if": [2],
		"no-dupe-keys": [2],
		"no-duplicate-case": [2],
		"no-duplicate-imports": [2, { "includeExports": false }],
		"no-else-return": [2],
		"no-empty": [2, { "allowEmptyCatch": true }],
		"no-empty-character-class": [2],
		"no-empty-function": [2, { "allow": ["arrowFunctions", "functions"] }],
		"no-empty-pattern": [2],
		"no-eq-null": [0],
		"no-eval": [2],
		"no-ex-assign": [2],
		"no-extend-native": [2],
		"no-extra-bind": [2],
		"no-extra-boolean-cast": [2],
		"no-extra-label": [2],
		"no-extra-parens": [2, "all", {
			"conditionalAssign": false,
			"nestedBinaryExpressions": false,
			"returnAssign": false,
			"ignoreJSX": "all",
			"enforceForArrowConditionals": false,
			"enforceForSequenceExpressions": true,
			"enforceForNewInMemberExpressions": false
		}],
		"no-extra-semi": [2],
		"no-fallthrough": [2],
		"no-floating-decimal": [2],
		"no-func-assign": [2],
		"no-implied-eval": [2],
		"no-implicit-coercion": [2, {
			"boolean": false,
			"number": true,
			"string": true,
			"disallowTemplateShorthand": false,
			"allow": []
		}],
		"no-implicit-globals": [2],
		"no-import-assign": [2],
		"no-inline-comments": [0],
		"no-inner-declarations": [2, "functions"],
		"no-invalid-regexp": [2, { "allowConstructorFlags": ["u", "y"] }],
		"no-invalid-this": [2],
		"no-irregular-whitespace": [2],
		"no-iterator": [2],
		"no-label-var": [2],
		"no-labels": [2, { "allowLoop": false, "allowSwitch": false }],
		"no-lone-blocks": [2],
		"no-lonely-if": [2],
		"no-loop-func": [2],
		"no-loss-of-precision": [2],
		"no-magic-numbers": [1, { "ignore": [], "enforceConst": false, "detectObjects": true }],
		"no-misleading-character-class": [2],
		"no-mixed-operators": [2, {
			"groups": [
				["+", "-", "*", "/", "%", "**"],
				["&", "|", "^", "~", "<<", ">>", ">>>"],
				["==", "!=", "===", "!==", ">", ">=", "<", "<="],
				["&&", "||"],
				["in", "instanceof"]
			],
			"allowSamePrecedence": true
		}],
		"no-mixed-requires": [0, false],
		"no-mixed-spaces-and-tabs": [2, false],
		"no-multi-assign": [2, { "ignoreNonDeclaration": false }],
		"no-multi-spaces": [2, { "ignoreEOLComments": false }],
		"no-multi-str": [2],
		"no-multiple-empty-lines": [2, { "max": 1, "maxEOF": 1 }],
		"no-global-assign": [2, { "exceptions": [] }],
		"no-native-reassign": [2],
		"no-negated-condition": [2],
		"no-negated-in-lhs": [2],
		"no-nested-ternary": [0],
		"no-new": [2],
		"no-new-func": [2],
		"no-new-object": [2],
		"no-new-require": [0],
		"no-new-symbol": [2],
		"no-new-wrappers": [2],
		"no-nonoctal-decimal-escape": [2],
		"no-obj-calls": [2],
		"no-octal": [2],
		"no-octal-escape": [2],
		"no-param-reassign": [2, {
			"props": true,
			"ignorePropertyModificationsFor": [],
			"ignorePropertyModificationsForRegex": []
		}],
		"no-path-concat": [0],
		"no-plusplus": [2, { "allowForLoopAfterthoughts": true }],
		"no-process-env": [0],
		"no-process-exit": [2],
		"no-promise-executor-return": [2],
		"no-proto": [2],
		"no-prototype-builtins": [2],
		"no-redeclare": [2],
		"prefer-regex-literals": [2],
		"no-regex-spaces": [2],
		"no-restricted-globals": [0],
		"no-restricted-exports": [2, {
			"restrictedNamedExports": ["then"]
		}],
		"no-restricted-imports": [0],
		"no-restricted-modules": [0],
		"no-restricted-properties": [2, {
			"object": "Symbol",
			"property": "for",
			"message": "Symbol.for is unshimmable"
		}, {
			"object": "arguments",
			"property": "callee",
			"message": "arguments.callee is deprecated"
		}, {
			"property": "__defineGetter__",
			"message": "Please use Object.defineProperty instead."
		}, {
			"property": "__defineSetter__",
			"message": "Please use Object.defineProperty instead."
		}],
		"no-restricted-syntax": [2, "BreakStatement", "ContinueStatement", "DebuggerStatement", "ForInStatement", "LabeledStatement", "WithStatement"],
		"no-return-assign": [2, "always"],
		"no-return-await": [2],
		"no-script-url": [2],
		"no-self-assign": [2, { "props": true }],
		"no-self-compare": [0],
		"no-setter-return": [2],
		"no-sequences": [2, { "allowInParentheses": false }],
		"no-shadow": [2, { "builtinGlobals": false, "hoist": "functions", "allow": [] }],
		"no-shadow-restricted-names": [2],
		"no-spaced-func": [2],
		"no-sparse-arrays": [2],
		"no-sync": [0],
		"no-tabs": [0],
		"no-template-curly-in-string": [2],
		"no-ternary": [0],
		"no-this-before-super": [2],
		"no-throw-literal": [2],
		"no-trailing-spaces": [2, {
			"skipBlankLines": false,
			"ignoreComments": false
		}],
		"no-undef": [2, { "typeof": true }],
		"no-undef-init": [2],
		"no-undefined": [0],
		"no-underscore-dangle": [2, {
			"allow": [],
			"allowAfterThis": false,
			"allowAfterSuper": false,
			"allowAfterThisConstructor": false,
			"enforceInMethodNames": true
		}],
		"no-unexpected-multiline": [2],
		"no-unmodified-loop-condition": [2],
		"no-unneeded-ternary": [2],
		"no-unreachable": [2],
		"no-unreachable-loop": [2],
		"no-unsafe-finally": [2],
		"no-unsafe-negation": [2, { "enforceForOrderingRelations": true }],
		"no-unsafe-optional-chaining": [2],
		"no-unused-expressions": [2, {
			"allowShortCircuit": false,
			"allowTernary": false,
			"allowTaggedTemplates": true,
			"enforceForJSX": true
		}],
		"no-unused-labels": [2],
		"no-unused-private-class-members": [2],
		"no-unused-vars": [2, { "vars": "all", "args": "after-used" }],
		"no-use-before-define": [2],
		"no-useless-backreference": [2],
		"no-useless-call": [2],
		"no-useless-catch": [2],
		"no-useless-computed-key": [2, {
			"enforceForClassMembers": true
		}],
		"no-useless-concat": [2],
		"no-useless-constructor": [2],
		"no-useless-escape": [2],
		"no-useless-rename": [2, {
			"ignoreDestructuring": false,
			"ignoreImport": false,
			"ignoreExport": false
		}],
		"no-useless-return": [2],
		"no-var": [0],
		"no-void": [0],
		"no-warning-comments": [0, { "terms": ["todo", "fixme", "xxx"], "location": "start" }],
		"no-whitespace-before-property": [2],
		"no-with": [2],
		"nonblock-statement-body-position": [2, "beside"],
		"object-curly-newline": [2, {
			"ObjectExpression": { "multiline": true, "consistent": true, "minProperties": 3 },
			"ObjectPattern": { "multiline": true, "consistent": true, "minProperties": 3 }
		}],
		"object-curly-spacing": [2, "always"],
		"object-property-newline": [0, {
			"allowMultiplePropertiesPerLine": true
		}],
		"object-shorthand": [2, "never"],
		"one-var": [0],
		"one-var-declaration-per-line": [2, "initializations"],
		"operator-assignment": [0, "always"],
		"operator-linebreak": [2, "none", {
				"overrides": {
						"?": "before",
						":": "before",
						"&&": "before",
						"||": "before"
				}
		}],
		"padded-blocks": [0],
		"padding-line-between-statements": [0],
		"prefer-arrow-callback": [0, {
			"allowNamedFunctions": true,
			"allowUnboundThis": true
		}],
		"prefer-const": [0, {
			"destructuring": "any",
			"ignoreReadBeforeAssign": true
		}],
		"prefer-destructuring": [0, {
			"VariableDeclarator": {
				"array": false,
				"object": true
			},
			"AssignmentExpression": {
				"array": true,
				"object": true
			}
		}, {
			"enforceForRenamedProperties": false
		}],
		"prefer-exponentiation-operator": [0],
		"prefer-named-capture-group": [0],
		"prefer-numeric-literals": [0],
		"prefer-object-has-own": [0],
		"prefer-object-spread": [0],
		"prefer-promise-reject-errors": [2, { "allowEmptyReject": true }],
		"prefer-reflect": [0],
		"prefer-rest-params": [0],
		"prefer-spread": [0],
		"prefer-template": [0],
		"quote-props": [2, "as-needed", { "keywords": true }],
		"quotes": [2, "single", "avoid-escape"],
		"radix": [2],
		"require-atomic-updates": [2, { "allowProperties": true }],
		"require-await": [0],
		"require-jsdoc": [0],
		"require-unicode-regexp": [0],
		"require-yield": [2],
		"rest-spread-spacing": [2, "never"],
		"semi": [2],
		"semi-spacing": [2, { "before": false, "after": true }],
		"semi-style": [2, "last"],
		"sort-imports": [0],
		"sort-keys": [2, "asc", { "caseSensitive": false, "natural": true }],
		"sort-vars": [0],
		"space-before-blocks": [2, { "functions": "always", "keywords": "always", "classes": "always" }],
		"space-before-function-paren": [2, { "anonymous": "always", "named": "never", "asyncArrow": "always" }],
		"space-in-brackets": [0, "never", {
			"singleValue": true,
			"arraysInArrays": false,
			"arraysInObjects": false,
			"objectsInArrays": true,
			"objectsInObjects": true,
			"propertyName": false
		}],
		"space-in-parens": [2, "never"],
		"space-infix-ops": [2],
		"space-unary-ops": [2, { "words": true, "nonwords": false }],
		"spaced-comment": [2, "always", { "markers": ["!"] }],
		"spaced-line-comment": [0, "always"],
		"strict": [2, "global"],
		"switch-colon-spacing": [2, { "after": true, "before": false }],
		"symbol-description": [2],
		"template-curly-spacing": [2, "never"],
		"template-tag-spacing": [2, "never"],
		"unicode-bom": [2, "never"],
		"use-isnan": [2, { "enforceForSwitchCase": true }],
		"valid-jsdoc": [0],
		"valid-typeof": [2],
		"vars-on-top": [0],
		"wrap-iife": [2, "outside", { "functionPrototypeMethods": true }],
		"wrap-regex": [2],
		"yield-star-spacing": [2, { "before": false, "after": true }],
		"yoda": [2, "never", { "exceptRange": true, "onlyEquality": false }]
	},

	"overrides": [
		{
			"files": "test/**",
			"extends": "./tests"
		},
		{
			"files": "bin/**",
			"rules": {
				"no-console": [0],
				"no-process-env": [0],
				"no-process-exit": [2]
			}
		},
		{
			"files": "**/*.mjs",
			"extends": "./esm"
		}
	]
}
