eslint-mdx
Advanced tools
Comparing version 1.9.1 to 1.10.0
@@ -6,2 +6,13 @@ # Change Log | ||
# [1.10.0](https://github.com/mdx-js/eslint-mdx/compare/v1.9.1...v1.10.0) (2021-03-16) | ||
### Features | ||
* use eslint-plugin-markdown as processor! ([#283](https://github.com/mdx-js/eslint-mdx/issues/283)) ([abe30cb](https://github.com/mdx-js/eslint-mdx/commit/abe30cbfd62d89f700888053b01331bc74394bd2)) | ||
## [1.9.1](https://github.com/mdx-js/eslint-mdx/compare/v1.9.0...v1.9.1) (2021-03-11) | ||
@@ -8,0 +19,0 @@ |
@@ -5,3 +5,2 @@ 'use strict'; | ||
var espree = require('espree'); | ||
var tslib = require('tslib'); | ||
@@ -25,2 +24,3 @@ var path = require('path'); | ||
'babel-eslint', | ||
'espree', | ||
]; | ||
@@ -48,3 +48,3 @@ var JSX_TYPES = ['JSXElement', 'JSXFragment']; | ||
} | ||
var parsers = [espree.parse]; | ||
var parsers = []; | ||
// try to load FALLBACK_PARSERS automatically | ||
@@ -64,3 +64,3 @@ for (var _i = 0, FALLBACK_PARSERS_1 = FALLBACK_PARSERS; _i < FALLBACK_PARSERS_1.length; _i++) { | ||
if (parserFn) { | ||
parsers.unshift(parserFn); | ||
parsers.push(parserFn); | ||
} | ||
@@ -449,22 +449,21 @@ } | ||
} | ||
catch (e) { | ||
if (hasProperties(e, LOC_ERROR_PROPERTIES)) { | ||
catch (err) { | ||
if (hasProperties(err, LOC_ERROR_PROPERTIES)) { | ||
var start = node.position.start; | ||
/* istanbul ignore else */ | ||
if ('index' in e) { | ||
e.index += start.offset - OFFSET; | ||
if ('index' in err) { | ||
err.index += start.offset - OFFSET; | ||
} | ||
else if ('pos' in e) { | ||
e.pos += start.offset - OFFSET; | ||
else if ('pos' in err) { | ||
err.pos += start.offset - OFFSET; | ||
} | ||
e.column = | ||
err.column = | ||
/* istanbul ignore next */ | ||
e.lineNumber > 1 ? e.column : e.column + start.column - OFFSET; | ||
e.lineNumber += start.line - 1; | ||
throw e; | ||
err.lineNumber > 1 ? err.column : err.column + start.column - OFFSET; | ||
err.lineNumber += start.line - 1; | ||
throw err; | ||
} | ||
return node; | ||
} | ||
var expression = program | ||
.body[0].expression; | ||
var expression = program.body[0].expression; | ||
if (!isJsxNode(expression) || expression.children.length <= 1) { | ||
@@ -478,14 +477,7 @@ return node; | ||
} | ||
var nodeStart = jsNode.start, nodeEnd = jsNode.end, | ||
/* istanbul ignore next */ | ||
_a = jsNode.loc, | ||
/* istanbul ignore next */ | ||
_b = _a === void 0 ? { | ||
var nodeStart = jsNode.start, nodeEnd = jsNode.end, _a = jsNode.loc, _b = _a === void 0 ? { | ||
start: { column: nodeStart, line: 1 }, | ||
end: { column: nodeEnd, line: 1 }, | ||
} : _a, start = _b.start, end = _b.end, | ||
/* istanbul ignore next */ | ||
_c = jsNode.range, | ||
/* istanbul ignore next */ | ||
range = _c === void 0 ? [nodeStart, nodeEnd] : _c; | ||
} : _a, start = _b.start, end = _b.end, _c = jsNode.range, range = _c === void 0 ? [nodeStart, nodeEnd] : _c; | ||
var startLine = line + start.line - 1; | ||
@@ -492,0 +484,0 @@ var endLine = line + end.line - 1; |
@@ -1,1 +0,1 @@ | ||
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("espree"),t=require("tslib"),r=require("path"),n=require("remark-mdx"),s=require("remark-parse"),o=require("unified");function i(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var a=i(r),p=i(n),l=i(s),u=i(o),c=["@typescript-eslint/parser","@babel/eslint-parser","babel-eslint"],f=["JSXElement","JSXFragment"],m=function(e){return f.includes(e.type)},x=function(t){if(t){if("string"==typeof t&&(t=require(t)),"object"==typeof t&&(t="parseForESLint"in t&&t.parseForESLint||"parse"in t&&t.parse),"function"!=typeof t)throw new TypeError("Invalid custom parser for `eslint-mdx`: "+t);return[t]}for(var r=[e.parse],n=0,s=c;n<s.length;n++){var o=s[n];try{var i=require(o),a="parseForESLint"in i?i.parseForESLint:i.parse;a&&r.unshift(a)}catch(e){}}return r},h=function(e){var t=e.start.offset,r=e.end.offset;return{range:[t,r],loc:e,start:t,end:r}},d=function(e,t){return"object"==typeof e&&e&&t.every((function(t){return t in e}))},_=function(e,t,r){if(e&&"object"==typeof e)for(var n=0,s=Object.values(e);n<s.length;n++){var o=s[n];_(o,t,r)}if(!d(e,["loc","range"]))return e;var i=e.loc,a=i.start,p=i.end,l=e.range,u=l[0]+r,c=l[1]+r;return Object.assign(e,{start:u,end:c,range:[u,c],loc:{start:{line:t+a.line,column:a.column},end:{line:t+p.line,column:p.column}}})},v=function(e){return e&&e[e.length-1]},E="(?:\\s+[a-zA-Z_:][a-zA-Z0-9:._-]*(?:\\s*=\\s*"+("(?:[^\"'=<>`\\u0000-\\u0020]+|'[^']*'|\"[^\"]*\"|"+"{.*}".replace(".","[\0-]")+")")+")?)",g="<[A-Za-z]*[A-Za-z0-9\\.\\-]*"+E+"*\\s*>",y="<\\s*\\/[A-Za-z]*[A-Za-z0-9\\.\\-]*\\s*>",S="<[A-Za-z]*[A-Za-z0-9\\.\\-]*"+E+"*\\s*\\/?>",T="\x3c!----\x3e|\x3c!--(?:-?[^>-])(?:-?[^-])*--\x3e",N=new RegExp("^(?:"+g+")$"),b=new RegExp("^(?:"+y+")$"),O=new RegExp("^(?:"+g+"[^<]*"+y+")$"),L=new RegExp("^(?:"+S+")$"),A=new RegExp("^(?:"+T+")$"),P=new RegExp("(\x3c!---*)([\\s\\S]*?)(-*--\x3e)"),R=new RegExp("(\x3c!---*)([\\s\\S]*?)(-*--\x3e)","g"),C=function(e){return N.test(e.trim())},J=function(e){return b.test(e.trim())},j=function(e){return A.test(e.trim())},w=function(e){return O.test(e.trim())},z=function(e){return L.test(e.trim())},F=function(){function e(e){var t=e.code,r=e.enter;this.code=t,this._enter=r}return e.prototype.combineLeftJsxNodes=function(e,r){var n,s=e[0].position.start,o=t.__assign({},v(e).position.end);return r&&(null===(n=r.position.indent)||void 0===n?void 0:n.length)>0&&(o.offset+=r.position.indent.reduce((function(e,t,r){return e+(r?t+1:0)}),0)),{type:"jsx",data:e[0].data,value:this.code.slice(s.offset,o.offset),position:{start:s,end:o}}},e.prototype.combineJsxNodes=function(e,r){var n=this,s=0,o=!1,i=[],a=e.length;return e.reduce((function(e,p,l){if("jsx"===p.type){var u=p.value;if(C(u))s++,o=!0,i.push(p);else{if(J(u))s--,i.push(p);else if(j(u)||z(u)||w(u))i.push(p);else{l||(s++,o=!0);try{var c=B.normalizeJsxNode(p,r);i.push.apply(i,Array.isArray(c)?c:[c])}catch(e){if(!s){var f=p.position.start;throw Object.assign(new SyntaxError("unknown jsx node: "+JSON.stringify(u)),{lineNumber:f.line,column:f.column,index:f.offset})}i.push(p)}}if(!s){var m=i.findIndex((function(e){return"string"==typeof e.value&&C(e.value)}));-1===m?o?e.push(n.combineLeftJsxNodes(i,r)):e.push.apply(e,i):e.push.apply(e,t.__spreadArray(t.__spreadArray([],i.slice(0,m)),[n.combineLeftJsxNodes(i.slice(m),r)])),i.length=0}}}else s?i.push(p):e.push(p);return l===a-1&&i.length>0&&e.push(n.combineLeftJsxNodes(i,r)),e}),[])},e.prototype.traverse=function(e,t){if(e){var r=e.children;if(r)for(var n=e,s=0,o=r=e.children=this.combineJsxNodes(r,n);s<o.length;s++){var i=o[s];this.traverse(i,n)}this._enter(e,t)}},e}(),X=function(e,t){return new F(t).traverse(e)},G=u.default().use(l.default).freeze(),M=G().use(p.default).freeze(),k=["body","comments","tokens"],q=["export","import","jsx"],Z=["column","lineNumber"],$=[".mdx"],I=[".md"],D={comment:!0,ecmaFeatures:{jsx:!0},ecmaVersion:(new Date).getUTCFullYear(),sourceType:"module",tokens:!0,filePath:"__placeholder__.mdx",loc:!0,range:!0},W="<$>".length,H=function(){function e(){this._options=D,this.parse=this.parse.bind(this),this.parseForESLint=this.parseForESLint.bind(this)}return e.prototype.normalizeJsxNode=function(e,r,n){void 0===n&&(n=this._options);var s=e.value;if("jsx"!==e.type||j(s))return e;if(P.exec(s)){var o=[],i=e.position.start,a=i.line,p=i.column,l=i.offset,u=e.data;Object.assign(e,{data:t.__assign(t.__assign({},u),{jsxType:"JSXElementWithHTMLComments",comments:o,inline:!!r&&"root"!==r.type}),value:s.replace(R,(function(e,t,r,n,i){var u=i+e.length,c=s.slice(0,i).split("\n"),f=s.slice(0,u).split("\n"),m="{/"+"*".repeat(t.length-2)+r+"*".repeat(n.length-2)+"/}",x=c.length-1,h=f.length-1;return o.push({fixed:m,loc:{start:{line:a+x,column:v(c).length+(x?0:p-1),offset:l+i},end:{line:a+h,column:v(f).length+(h?0:p-1),offset:l+u}},origin:e}),m}))})}return this._normalizeJsxNodes(e,n)},e.prototype.parse=function(e,t){return this.parseForESLint(e,t).ast},e.prototype.parseForESLint=function(e,r){var n=this,s=a.default.extname(r.filePath),o=$.concat(r.extensions||[]).includes(s),i=I.concat(r.markdownExtensions||[]).includes(s);if(!o&&!i)return this._eslintParse(e,r);var p=(o?M:G).parse(e);return this._ast=t.__assign(t.__assign({},h(p.position)),{type:"Program",sourceType:r.sourceType||"module",body:[],comments:[],tokens:[]}),this._services={JSXElementsWithHTMLComments:[]},o&&X(p,{code:e,enter:function(e,t){if(q.includes(e.type))for(var s=n.normalizeJsxNode(e,t,r),o=0,i=s=Array.isArray(s)?s:[s];o<i.length;o++){var a=i[o];n._nodeToAst(a,r)}}}),{ast:this._ast,services:this._services}},e.prototype._eslintParse=function(e,t){var r,n;this._parsers&&t.parser===this._options.parser||(this._parsers=x(t.parser)),t.filePath&&this._options!==t&&Object.assign(this._options,t);for(var s=0,o=this._parsers;s<o.length;s++){var i=o[s];try{r=i(e,this._options);break}catch(e){n||(n=e)}}if(!r&&n)throw n;return"ast"in r&&r.ast?r:{ast:r}},e.prototype._normalizeJsxNodes=function(e,t){var r,n=e.value;try{r=this._eslintParse("<$>"+n+"</$>",t).ast}catch(t){if(d(t,Z)){var s=e.position.start;throw"index"in t?t.index+=s.offset-W:"pos"in t&&(t.pos+=s.offset-W),t.column=t.lineNumber>1?t.column:t.column+s.column-W,t.lineNumber+=s.line-1,t}return e}var o=r.body[0].expression;if(!m(o)||o.children.length<=1)return e;var i=e.position.start,a=i.line,p=i.offset,l=e.data;return o.children.reduce((function(e,t){if(!m(t))return e;var r=t.start,s=t.end,o=t.loc,i=void 0===o?{start:{column:r,line:1},end:{column:s,line:1}}:o,u=i.start,c=i.end,f=t.range,x=void 0===f?[r,s]:f,h=a+u.line-1,d=a+c.line-1,_=x[0]-W,v=x[1]-W;return e.push({type:"jsx",data:e.length>0?null:l,value:n.slice(_,v),position:{start:{line:h,column:a===h?u.column-W:u.column,offset:p+_},end:{line:d,column:a===h?c.column-W:c.column,offset:p+v}}}),e}),[])},e.prototype._nodeToAst=function(e,t){var r;e.data&&"JSXElementWithHTMLComments"===e.data.jsxType&&this._services.JSXElementsWithHTMLComments.push(e);var n=e.value,s=h(e.position),o=s.loc,i=s.start,a=s.end;if(j(n)){var p=P.exec(n)[2];this._ast.comments.push({type:"Block",value:p,loc:o,range:[i,a]})}else{var l,u=o.start.line-1;try{l=this._eslintParse(n,t).ast}catch(e){throw d(e,Z)&&(e.index+=i,e.column=e.lineNumber>1?e.column:e.column+o.start.column,e.lineNumber+=u),e}for(var c=i-l.range[0],f=0,m=k;f<m.length;f++){var x=m[f];(r=this._ast[x]).push.apply(r,l[x].map((function(e){return _(e,u,c)})))}}},e}(),B=new H,U=B.parse,Y=B.parseForESLint;exports.AST_PROPS=k,exports.CLOSE_TAG_REGEX=b,exports.COMMENT_CONTENT_REGEX=P,exports.COMMENT_CONTENT_REGEX_GLOBAL=R,exports.COMMENT_REGEX=A,exports.DEFAULT_EXTENSIONS=$,exports.DEFAULT_PARSER_OPTIONS=D,exports.ES_NODE_TYPES=q,exports.FALLBACK_PARSERS=c,exports.JSX_TYPES=f,exports.LOC_ERROR_PROPERTIES=Z,exports.MARKDOWN_EXTENSIONS=I,exports.OPEN_CLOSE_TAG_REGEX=O,exports.OPEN_TAG_REGEX=N,exports.Parser=H,exports.SELF_CLOSING_TAG_REGEX=L,exports.Traverse=F,exports.closeTag=y,exports.comment=T,exports.commentClose="(-*--\x3e)",exports.commentContent="(\x3c!---*)([\\s\\S]*?)(-*--\x3e)",exports.commentOpen="(\x3c!---*)",exports.first=function(e){return e&&e[0]},exports.hasProperties=d,exports.isCloseTag=J,exports.isComment=j,exports.isJsxNode=m,exports.isOpenCloseTag=w,exports.isOpenTag=C,exports.isSelfClosingTag=z,exports.last=v,exports.mdProcessor=G,exports.mdxProcessor=M,exports.normalizeParser=x,exports.normalizePosition=h,exports.openTag=g,exports.parse=U,exports.parseForESLint=Y,exports.parser=B,exports.restoreNodeLocation=_,exports.selfClosingTag=S,exports.traverse=X; | ||
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("tslib"),t=require("path"),r=require("remark-mdx"),n=require("remark-parse"),s=require("unified");function o(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var i=o(t),a=o(r),p=o(n),l=o(s),u=["@typescript-eslint/parser","@babel/eslint-parser","babel-eslint","espree"],c=["JSXElement","JSXFragment"],f=function(e){return c.includes(e.type)},m=function(e){if(e){if("string"==typeof e&&(e=require(e)),"object"==typeof e&&(e="parseForESLint"in e&&e.parseForESLint||"parse"in e&&e.parse),"function"!=typeof e)throw new TypeError("Invalid custom parser for `eslint-mdx`: "+e);return[e]}for(var t=[],r=0,n=u;r<n.length;r++){var s=n[r];try{var o=require(s),i="parseForESLint"in o?o.parseForESLint:o.parse;i&&t.push(i)}catch(e){}}return t},x=function(e){var t=e.start.offset,r=e.end.offset;return{range:[t,r],loc:e,start:t,end:r}},h=function(e,t){return"object"==typeof e&&e&&t.every((function(t){return t in e}))},d=function(e,t,r){if(e&&"object"==typeof e)for(var n=0,s=Object.values(e);n<s.length;n++){var o=s[n];d(o,t,r)}if(!h(e,["loc","range"]))return e;var i=e.loc,a=i.start,p=i.end,l=e.range,u=l[0]+r,c=l[1]+r;return Object.assign(e,{start:u,end:c,range:[u,c],loc:{start:{line:t+a.line,column:a.column},end:{line:t+p.line,column:p.column}}})},_=function(e){return e&&e[e.length-1]},v="(?:\\s+[a-zA-Z_:][a-zA-Z0-9:._-]*(?:\\s*=\\s*"+("(?:[^\"'=<>`\\u0000-\\u0020]+|'[^']*'|\"[^\"]*\"|"+"{.*}".replace(".","[\0-]")+")")+")?)",E="<[A-Za-z]*[A-Za-z0-9\\.\\-]*"+v+"*\\s*>",g="<\\s*\\/[A-Za-z]*[A-Za-z0-9\\.\\-]*\\s*>",y="<[A-Za-z]*[A-Za-z0-9\\.\\-]*"+v+"*\\s*\\/?>",S="\x3c!----\x3e|\x3c!--(?:-?[^>-])(?:-?[^-])*--\x3e",T=new RegExp("^(?:"+E+")$"),N=new RegExp("^(?:"+g+")$"),b=new RegExp("^(?:"+E+"[^<]*"+g+")$"),O=new RegExp("^(?:"+y+")$"),L=new RegExp("^(?:"+S+")$"),A=new RegExp("(\x3c!---*)([\\s\\S]*?)(-*--\x3e)"),P=new RegExp("(\x3c!---*)([\\s\\S]*?)(-*--\x3e)","g"),R=function(e){return T.test(e.trim())},C=function(e){return N.test(e.trim())},J=function(e){return L.test(e.trim())},j=function(e){return b.test(e.trim())},w=function(e){return O.test(e.trim())},z=function(){function t(e){var t=e.code,r=e.enter;this.code=t,this._enter=r}return t.prototype.combineLeftJsxNodes=function(t,r){var n,s=t[0].position.start,o=e.__assign({},_(t).position.end);return r&&(null===(n=r.position.indent)||void 0===n?void 0:n.length)>0&&(o.offset+=r.position.indent.reduce((function(e,t,r){return e+(r?t+1:0)}),0)),{type:"jsx",data:t[0].data,value:this.code.slice(s.offset,o.offset),position:{start:s,end:o}}},t.prototype.combineJsxNodes=function(t,r){var n=this,s=0,o=!1,i=[],a=t.length;return t.reduce((function(t,p,l){if("jsx"===p.type){var u=p.value;if(R(u))s++,o=!0,i.push(p);else{if(C(u))s--,i.push(p);else if(J(u)||w(u)||j(u))i.push(p);else{l||(s++,o=!0);try{var c=H.normalizeJsxNode(p,r);i.push.apply(i,Array.isArray(c)?c:[c])}catch(e){if(!s){var f=p.position.start;throw Object.assign(new SyntaxError("unknown jsx node: "+JSON.stringify(u)),{lineNumber:f.line,column:f.column,index:f.offset})}i.push(p)}}if(!s){var m=i.findIndex((function(e){return"string"==typeof e.value&&R(e.value)}));-1===m?o?t.push(n.combineLeftJsxNodes(i,r)):t.push.apply(t,i):t.push.apply(t,e.__spreadArray(e.__spreadArray([],i.slice(0,m)),[n.combineLeftJsxNodes(i.slice(m),r)])),i.length=0}}}else s?i.push(p):t.push(p);return l===a-1&&i.length>0&&t.push(n.combineLeftJsxNodes(i,r)),t}),[])},t.prototype.traverse=function(e,t){if(e){var r=e.children;if(r)for(var n=e,s=0,o=r=e.children=this.combineJsxNodes(r,n);s<o.length;s++){var i=o[s];this.traverse(i,n)}this._enter(e,t)}},t}(),F=function(e,t){return new z(t).traverse(e)},X=l.default().use(p.default).freeze(),G=X().use(a.default).freeze(),M=["body","comments","tokens"],k=["export","import","jsx"],Z=["column","lineNumber"],$=[".mdx"],q=[".md"],I={comment:!0,ecmaFeatures:{jsx:!0},ecmaVersion:(new Date).getUTCFullYear(),sourceType:"module",tokens:!0,filePath:"__placeholder__.mdx",loc:!0,range:!0},D="<$>".length,W=function(){function t(){this._options=I,this.parse=this.parse.bind(this),this.parseForESLint=this.parseForESLint.bind(this)}return t.prototype.normalizeJsxNode=function(t,r,n){void 0===n&&(n=this._options);var s=t.value;if("jsx"!==t.type||J(s))return t;if(A.exec(s)){var o=[],i=t.position.start,a=i.line,p=i.column,l=i.offset,u=t.data;Object.assign(t,{data:e.__assign(e.__assign({},u),{jsxType:"JSXElementWithHTMLComments",comments:o,inline:!!r&&"root"!==r.type}),value:s.replace(P,(function(e,t,r,n,i){var u=i+e.length,c=s.slice(0,i).split("\n"),f=s.slice(0,u).split("\n"),m="{/"+"*".repeat(t.length-2)+r+"*".repeat(n.length-2)+"/}",x=c.length-1,h=f.length-1;return o.push({fixed:m,loc:{start:{line:a+x,column:_(c).length+(x?0:p-1),offset:l+i},end:{line:a+h,column:_(f).length+(h?0:p-1),offset:l+u}},origin:e}),m}))})}return this._normalizeJsxNodes(t,n)},t.prototype.parse=function(e,t){return this.parseForESLint(e,t).ast},t.prototype.parseForESLint=function(t,r){var n=this,s=i.default.extname(r.filePath),o=$.concat(r.extensions||[]).includes(s),a=q.concat(r.markdownExtensions||[]).includes(s);if(!o&&!a)return this._eslintParse(t,r);var p=(o?G:X).parse(t);return this._ast=e.__assign(e.__assign({},x(p.position)),{type:"Program",sourceType:r.sourceType||"module",body:[],comments:[],tokens:[]}),this._services={JSXElementsWithHTMLComments:[]},o&&F(p,{code:t,enter:function(e,t){if(k.includes(e.type))for(var s=n.normalizeJsxNode(e,t,r),o=0,i=s=Array.isArray(s)?s:[s];o<i.length;o++){var a=i[o];n._nodeToAst(a,r)}}}),{ast:this._ast,services:this._services}},t.prototype._eslintParse=function(e,t){var r,n;this._parsers&&t.parser===this._options.parser||(this._parsers=m(t.parser)),t.filePath&&this._options!==t&&Object.assign(this._options,t);for(var s=0,o=this._parsers;s<o.length;s++){var i=o[s];try{r=i(e,this._options);break}catch(e){n||(n=e)}}if(!r&&n)throw n;return"ast"in r&&r.ast?r:{ast:r}},t.prototype._normalizeJsxNodes=function(e,t){var r,n=e.value;try{r=this._eslintParse("<$>"+n+"</$>",t).ast}catch(t){if(h(t,Z)){var s=e.position.start;throw"index"in t?t.index+=s.offset-D:"pos"in t&&(t.pos+=s.offset-D),t.column=t.lineNumber>1?t.column:t.column+s.column-D,t.lineNumber+=s.line-1,t}return e}var o=r.body[0].expression;if(!f(o)||o.children.length<=1)return e;var i=e.position.start,a=i.line,p=i.offset,l=e.data;return o.children.reduce((function(e,t){if(!f(t))return e;var r=t.start,s=t.end,o=t.loc,i=void 0===o?{start:{column:r,line:1},end:{column:s,line:1}}:o,u=i.start,c=i.end,m=t.range,x=void 0===m?[r,s]:m,h=a+u.line-1,d=a+c.line-1,_=x[0]-D,v=x[1]-D;return e.push({type:"jsx",data:e.length>0?null:l,value:n.slice(_,v),position:{start:{line:h,column:a===h?u.column-D:u.column,offset:p+_},end:{line:d,column:a===h?c.column-D:c.column,offset:p+v}}}),e}),[])},t.prototype._nodeToAst=function(e,t){var r;e.data&&"JSXElementWithHTMLComments"===e.data.jsxType&&this._services.JSXElementsWithHTMLComments.push(e);var n=e.value,s=x(e.position),o=s.loc,i=s.start,a=s.end;if(J(n)){var p=A.exec(n)[2];this._ast.comments.push({type:"Block",value:p,loc:o,range:[i,a]})}else{var l,u=o.start.line-1;try{l=this._eslintParse(n,t).ast}catch(e){throw h(e,Z)&&(e.index+=i,e.column=e.lineNumber>1?e.column:e.column+o.start.column,e.lineNumber+=u),e}for(var c=i-l.range[0],f=0,m=M;f<m.length;f++){var _=m[f];(r=this._ast[_]).push.apply(r,l[_].map((function(e){return d(e,u,c)})))}}},t}(),H=new W,B=H.parse,U=H.parseForESLint;exports.AST_PROPS=M,exports.CLOSE_TAG_REGEX=N,exports.COMMENT_CONTENT_REGEX=A,exports.COMMENT_CONTENT_REGEX_GLOBAL=P,exports.COMMENT_REGEX=L,exports.DEFAULT_EXTENSIONS=$,exports.DEFAULT_PARSER_OPTIONS=I,exports.ES_NODE_TYPES=k,exports.FALLBACK_PARSERS=u,exports.JSX_TYPES=c,exports.LOC_ERROR_PROPERTIES=Z,exports.MARKDOWN_EXTENSIONS=q,exports.OPEN_CLOSE_TAG_REGEX=b,exports.OPEN_TAG_REGEX=T,exports.Parser=W,exports.SELF_CLOSING_TAG_REGEX=O,exports.Traverse=z,exports.closeTag=g,exports.comment=S,exports.commentClose="(-*--\x3e)",exports.commentContent="(\x3c!---*)([\\s\\S]*?)(-*--\x3e)",exports.commentOpen="(\x3c!---*)",exports.first=function(e){return e&&e[0]},exports.hasProperties=h,exports.isCloseTag=C,exports.isComment=J,exports.isJsxNode=f,exports.isOpenCloseTag=j,exports.isOpenTag=R,exports.isSelfClosingTag=w,exports.last=_,exports.mdProcessor=X,exports.mdxProcessor=G,exports.normalizeParser=m,exports.normalizePosition=x,exports.openTag=E,exports.parse=B,exports.parseForESLint=U,exports.parser=H,exports.restoreNodeLocation=d,exports.selfClosingTag=y,exports.traverse=F; |
@@ -1,2 +0,1 @@ | ||
import { parse as parse$1 } from 'espree'; | ||
import path from 'path'; | ||
@@ -12,2 +11,3 @@ import remarkMdx from 'remark-mdx'; | ||
'babel-eslint', | ||
'espree', | ||
]; | ||
@@ -33,3 +33,3 @@ const JSX_TYPES = ['JSXElement', 'JSXFragment']; | ||
} | ||
const parsers = [parse$1]; | ||
const parsers = []; | ||
// try to load FALLBACK_PARSERS automatically | ||
@@ -48,3 +48,3 @@ for (const fallback of FALLBACK_PARSERS) { | ||
if (parserFn) { | ||
parsers.unshift(parserFn); | ||
parsers.push(parserFn); | ||
} | ||
@@ -414,22 +414,21 @@ } | ||
} | ||
catch (e) { | ||
if (hasProperties(e, LOC_ERROR_PROPERTIES)) { | ||
catch (err) { | ||
if (hasProperties(err, LOC_ERROR_PROPERTIES)) { | ||
const { position: { start }, } = node; | ||
/* istanbul ignore else */ | ||
if ('index' in e) { | ||
e.index += start.offset - OFFSET; | ||
if ('index' in err) { | ||
err.index += start.offset - OFFSET; | ||
} | ||
else if ('pos' in e) { | ||
e.pos += start.offset - OFFSET; | ||
else if ('pos' in err) { | ||
err.pos += start.offset - OFFSET; | ||
} | ||
e.column = | ||
err.column = | ||
/* istanbul ignore next */ | ||
e.lineNumber > 1 ? e.column : e.column + start.column - OFFSET; | ||
e.lineNumber += start.line - 1; | ||
throw e; | ||
err.lineNumber > 1 ? err.column : err.column + start.column - OFFSET; | ||
err.lineNumber += start.line - 1; | ||
throw err; | ||
} | ||
return node; | ||
} | ||
const { expression } = program | ||
.body[0]; | ||
const { expression } = program.body[0]; | ||
if (!isJsxNode(expression) || expression.children.length <= 1) { | ||
@@ -443,10 +442,7 @@ return node; | ||
} | ||
const { start: nodeStart, end: nodeEnd, | ||
/* istanbul ignore next */ | ||
loc: { start, end } = { | ||
const { start: nodeStart, end: nodeEnd, loc: { start, end } = { | ||
start: { column: nodeStart, line: 1 }, | ||
end: { column: nodeEnd, line: 1 }, | ||
}, | ||
/* istanbul ignore next */ | ||
range = [nodeStart, nodeEnd], } = jsNode; | ||
}, range = [nodeStart, nodeEnd], } = jsNode; | ||
const startLine = line + start.line - 1; | ||
@@ -453,0 +449,0 @@ const endLine = line + end.line - 1; |
@@ -1,1 +0,1 @@ | ||
import{parse as e}from"espree";import t from"path";import s from"remark-mdx";import n from"remark-parse";import o from"unified";const r=["@typescript-eslint/parser","@babel/eslint-parser","babel-eslint"],i=["JSXElement","JSXFragment"],a=e=>i.includes(e.type),c=t=>{if(t){if("string"==typeof t&&(t=require(t)),"object"==typeof t&&(t="parseForESLint"in t&&t.parseForESLint||"parse"in t&&t.parse),"function"!=typeof t)throw new TypeError(`Invalid custom parser for \`eslint-mdx\`: ${t}`);return[t]}const s=[e];for(const e of r)try{const t=require(e),n="parseForESLint"in t?t.parseForESLint:t.parse;n&&s.unshift(n)}catch(e){}return s},l=e=>{const t=e.start.offset,s=e.end.offset;return{range:[t,s],loc:e,start:t,end:s}},p=(e,t)=>"object"==typeof e&&e&&t.every((t=>t in e)),u=(e,t,s)=>{if(e&&"object"==typeof e)for(const n of Object.values(e))u(n,t,s);if(!p(e,["loc","range"]))return e;const{loc:{start:n,end:o},range:r}=e,i=r[0]+s,a=r[1]+s;return Object.assign(e,{start:i,end:a,range:[i,a],loc:{start:{line:t+n.line,column:n.column},end:{line:t+o.line,column:o.column}}})},m=e=>e&&e[0],h=e=>e&&e[e.length-1],f="(?:\\s+[a-zA-Z_:][a-zA-Z0-9:._-]*(?:\\s*=\\s*"+("(?:[^\"'=<>`\\u0000-\\u0020]+|'[^']*'|\"[^\"]*\"|"+"{.*}".replace(".","[\0-]")+")")+")?)",d="<[A-Za-z]*[A-Za-z0-9\\.\\-]*"+f+"*\\s*>",x="<\\s*\\/[A-Za-z]*[A-Za-z0-9\\.\\-]*\\s*>",g="<[A-Za-z]*[A-Za-z0-9\\.\\-]*"+f+"*\\s*\\/?>",y="\x3c!----\x3e|\x3c!--(?:-?[^>-])(?:-?[^-])*--\x3e",b="(\x3c!---*)",_="(-*--\x3e)",v="(\x3c!---*)([\\s\\S]*?)(-*--\x3e)",E=new RegExp(`^(?:${d})$`),j=new RegExp(`^(?:${x})$`),S=new RegExp(`^(?:${d+"[^<]*"+x})$`),w=new RegExp(`^(?:${g})$`),J=new RegExp(`^(?:${y})$`),N=new RegExp("(\x3c!---*)([\\s\\S]*?)(-*--\x3e)"),$=new RegExp("(\x3c!---*)([\\s\\S]*?)(-*--\x3e)","g"),L=e=>E.test(e.trim()),z=e=>j.test(e.trim()),A=e=>J.test(e.trim()),T=e=>S.test(e.trim()),F=e=>w.test(e.trim());class O{constructor({code:e,enter:t}){this.code=e,this._enter=t}combineLeftJsxNodes(e,t){var s;const n=e[0].position.start,o=Object.assign({},h(e).position.end);return t&&(null===(s=t.position.indent)||void 0===s?void 0:s.length)>0&&(o.offset+=t.position.indent.reduce(((e,t,s)=>e+(s?t+1:0)),0)),{type:"jsx",data:e[0].data,value:this.code.slice(n.offset,o.offset),position:{start:n,end:o}}}combineJsxNodes(e,t){let s=0,n=!1;const o=[],{length:r}=e;return e.reduce(((e,i,a)=>{if("jsx"===i.type){const r=i.value;if(L(r))s++,n=!0,o.push(i);else{if(z(r))s--,o.push(i);else if(A(r)||F(r)||T(r))o.push(i);else{a||(s++,n=!0);try{const e=B.normalizeJsxNode(i,t);o.push(...Array.isArray(e)?e:[e])}catch(e){if(!s){const{start:e}=i.position;throw Object.assign(new SyntaxError("unknown jsx node: "+JSON.stringify(r)),{lineNumber:e.line,column:e.column,index:e.offset})}o.push(i)}}if(!s){const s=o.findIndex((e=>"string"==typeof e.value&&L(e.value)));-1===s?n?e.push(this.combineLeftJsxNodes(o,t)):e.push(...o):e.push(...o.slice(0,s),this.combineLeftJsxNodes(o.slice(s),t)),o.length=0}}}else s?o.push(i):e.push(i);return a===r-1&&o.length>0&&e.push(this.combineLeftJsxNodes(o,t)),e}),[])}traverse(e,t){if(!e)return;let s=e.children;if(s){const t=e;s=e.children=this.combineJsxNodes(s,t);for(const e of s)this.traverse(e,t)}this._enter(e,t)}}const k=(e,t)=>new O(t).traverse(e),P=o().use(n).freeze(),Z=P().use(s).freeze(),R=["body","comments","tokens"],X=["export","import","jsx"],C=["column","lineNumber"],H=[".mdx"],M=[".md"],W={comment:!0,ecmaFeatures:{jsx:!0},ecmaVersion:(new Date).getUTCFullYear(),sourceType:"module",tokens:!0,filePath:"__placeholder__.mdx",loc:!0,range:!0},q="<$>".length;class I{constructor(){this._options=W,this.parse=this.parse.bind(this),this.parseForESLint=this.parseForESLint.bind(this)}normalizeJsxNode(e,t,s=this._options){const n=e.value;if("jsx"!==e.type||A(n))return e;if(N.exec(n)){const s=[],{position:{start:{line:o,column:r,offset:i}},data:a}=e;Object.assign(e,{data:Object.assign(Object.assign({},a),{jsxType:"JSXElementWithHTMLComments",comments:s,inline:!!t&&"root"!==t.type}),value:n.replace($,((e,t,a,c,l)=>{const p=l+e.length,u=n.slice(0,l).split("\n"),m=n.slice(0,p).split("\n"),f=`{/${"*".repeat(t.length-2)}${a}${"*".repeat(c.length-2)}/}`,d=u.length-1,x=m.length-1;return s.push({fixed:f,loc:{start:{line:o+d,column:h(u).length+(d?0:r-1),offset:i+l},end:{line:o+x,column:h(m).length+(x?0:r-1),offset:i+p}},origin:e}),f}))})}return this._normalizeJsxNodes(e,s)}parse(e,t){return this.parseForESLint(e,t).ast}parseForESLint(e,s){const n=t.extname(s.filePath),o=H.concat(s.extensions||[]).includes(n),r=M.concat(s.markdownExtensions||[]).includes(n);if(!o&&!r)return this._eslintParse(e,s);const i=(o?Z:P).parse(e);return this._ast=Object.assign(Object.assign({},l(i.position)),{type:"Program",sourceType:s.sourceType||"module",body:[],comments:[],tokens:[]}),this._services={JSXElementsWithHTMLComments:[]},o&&k(i,{code:e,enter:(e,t)=>{if(!X.includes(e.type))return;let n=this.normalizeJsxNode(e,t,s);n=Array.isArray(n)?n:[n];for(const e of n)this._nodeToAst(e,s)}}),{ast:this._ast,services:this._services}}_eslintParse(e,t){let s,n;this._parsers&&t.parser===this._options.parser||(this._parsers=c(t.parser)),t.filePath&&this._options!==t&&Object.assign(this._options,t);for(const t of this._parsers)try{s=t(e,this._options);break}catch(e){n||(n=e)}if(!s&&n)throw n;return"ast"in s&&s.ast?s:{ast:s}}_normalizeJsxNodes(e,t){const s=e.value;let n;try{n=this._eslintParse(`<$>${s}</$>`,t).ast}catch(t){if(p(t,C)){const{position:{start:s}}=e;throw"index"in t?t.index+=s.offset-q:"pos"in t&&(t.pos+=s.offset-q),t.column=t.lineNumber>1?t.column:t.column+s.column-q,t.lineNumber+=s.line-1,t}return e}const{expression:o}=n.body[0];if(!a(o)||o.children.length<=1)return e;const{position:{start:{line:r,offset:i}},data:c}=e;return o.children.reduce(((e,t)=>{if(!a(t))return e;const{start:n,end:o,loc:{start:l,end:p}={start:{column:n,line:1},end:{column:o,line:1}},range:u=[n,o]}=t,m=r+l.line-1,h=r+p.line-1,f=u[0]-q,d=u[1]-q;return e.push({type:"jsx",data:e.length>0?null:c,value:s.slice(f,d),position:{start:{line:m,column:r===m?l.column-q:l.column,offset:i+f},end:{line:h,column:r===m?p.column-q:p.column,offset:i+d}}}),e}),[])}_nodeToAst(e,t){e.data&&"JSXElementWithHTMLComments"===e.data.jsxType&&this._services.JSXElementsWithHTMLComments.push(e);const s=e.value,{loc:n,start:o,end:r}=l(e.position);if(A(s)){const e=N.exec(s)[2];return void this._ast.comments.push({type:"Block",value:e,loc:n,range:[o,r]})}const i=n.start.line-1;let a;try{a=this._eslintParse(s,t).ast}catch(e){throw p(e,C)&&(e.index+=o,e.column=e.lineNumber>1?e.column:e.column+n.start.column,e.lineNumber+=i),e}const c=o-a.range[0];for(const e of R)this._ast[e].push(...a[e].map((e=>u(e,i,c))))}}const B=new I,{parse:D,parseForESLint:U}=B;export{R as AST_PROPS,j as CLOSE_TAG_REGEX,N as COMMENT_CONTENT_REGEX,$ as COMMENT_CONTENT_REGEX_GLOBAL,J as COMMENT_REGEX,H as DEFAULT_EXTENSIONS,W as DEFAULT_PARSER_OPTIONS,X as ES_NODE_TYPES,r as FALLBACK_PARSERS,i as JSX_TYPES,C as LOC_ERROR_PROPERTIES,M as MARKDOWN_EXTENSIONS,S as OPEN_CLOSE_TAG_REGEX,E as OPEN_TAG_REGEX,I as Parser,w as SELF_CLOSING_TAG_REGEX,O as Traverse,x as closeTag,y as comment,_ as commentClose,v as commentContent,b as commentOpen,m as first,p as hasProperties,z as isCloseTag,A as isComment,a as isJsxNode,T as isOpenCloseTag,L as isOpenTag,F as isSelfClosingTag,h as last,P as mdProcessor,Z as mdxProcessor,c as normalizeParser,l as normalizePosition,d as openTag,D as parse,U as parseForESLint,B as parser,u as restoreNodeLocation,g as selfClosingTag,k as traverse}; | ||
import e from"path";import t from"remark-mdx";import s from"remark-parse";import n from"unified";const o=["@typescript-eslint/parser","@babel/eslint-parser","babel-eslint","espree"],r=["JSXElement","JSXFragment"],i=e=>r.includes(e.type),a=e=>{if(e){if("string"==typeof e&&(e=require(e)),"object"==typeof e&&(e="parseForESLint"in e&&e.parseForESLint||"parse"in e&&e.parse),"function"!=typeof e)throw new TypeError(`Invalid custom parser for \`eslint-mdx\`: ${e}`);return[e]}const t=[];for(const e of o)try{const s=require(e),n="parseForESLint"in s?s.parseForESLint:s.parse;n&&t.push(n)}catch(e){}return t},c=e=>{const t=e.start.offset,s=e.end.offset;return{range:[t,s],loc:e,start:t,end:s}},l=(e,t)=>"object"==typeof e&&e&&t.every((t=>t in e)),p=(e,t,s)=>{if(e&&"object"==typeof e)for(const n of Object.values(e))p(n,t,s);if(!l(e,["loc","range"]))return e;const{loc:{start:n,end:o},range:r}=e,i=r[0]+s,a=r[1]+s;return Object.assign(e,{start:i,end:a,range:[i,a],loc:{start:{line:t+n.line,column:n.column},end:{line:t+o.line,column:o.column}}})},u=e=>e&&e[0],m=e=>e&&e[e.length-1],h="(?:\\s+[a-zA-Z_:][a-zA-Z0-9:._-]*(?:\\s*=\\s*"+("(?:[^\"'=<>`\\u0000-\\u0020]+|'[^']*'|\"[^\"]*\"|"+"{.*}".replace(".","[\0-]")+")")+")?)",f="<[A-Za-z]*[A-Za-z0-9\\.\\-]*"+h+"*\\s*>",d="<\\s*\\/[A-Za-z]*[A-Za-z0-9\\.\\-]*\\s*>",x="<[A-Za-z]*[A-Za-z0-9\\.\\-]*"+h+"*\\s*\\/?>",g="\x3c!----\x3e|\x3c!--(?:-?[^>-])(?:-?[^-])*--\x3e",y="(\x3c!---*)",b="(-*--\x3e)",_="(\x3c!---*)([\\s\\S]*?)(-*--\x3e)",v=new RegExp(`^(?:${f})$`),E=new RegExp(`^(?:${d})$`),j=new RegExp(`^(?:${f+"[^<]*"+d})$`),S=new RegExp(`^(?:${x})$`),w=new RegExp(`^(?:${g})$`),J=new RegExp("(\x3c!---*)([\\s\\S]*?)(-*--\x3e)"),N=new RegExp("(\x3c!---*)([\\s\\S]*?)(-*--\x3e)","g"),$=e=>v.test(e.trim()),L=e=>E.test(e.trim()),z=e=>w.test(e.trim()),A=e=>j.test(e.trim()),T=e=>S.test(e.trim());class F{constructor({code:e,enter:t}){this.code=e,this._enter=t}combineLeftJsxNodes(e,t){var s;const n=e[0].position.start,o=Object.assign({},m(e).position.end);return t&&(null===(s=t.position.indent)||void 0===s?void 0:s.length)>0&&(o.offset+=t.position.indent.reduce(((e,t,s)=>e+(s?t+1:0)),0)),{type:"jsx",data:e[0].data,value:this.code.slice(n.offset,o.offset),position:{start:n,end:o}}}combineJsxNodes(e,t){let s=0,n=!1;const o=[],{length:r}=e;return e.reduce(((e,i,a)=>{if("jsx"===i.type){const r=i.value;if($(r))s++,n=!0,o.push(i);else{if(L(r))s--,o.push(i);else if(z(r)||T(r)||A(r))o.push(i);else{a||(s++,n=!0);try{const e=I.normalizeJsxNode(i,t);o.push(...Array.isArray(e)?e:[e])}catch(e){if(!s){const{start:e}=i.position;throw Object.assign(new SyntaxError("unknown jsx node: "+JSON.stringify(r)),{lineNumber:e.line,column:e.column,index:e.offset})}o.push(i)}}if(!s){const s=o.findIndex((e=>"string"==typeof e.value&&$(e.value)));-1===s?n?e.push(this.combineLeftJsxNodes(o,t)):e.push(...o):e.push(...o.slice(0,s),this.combineLeftJsxNodes(o.slice(s),t)),o.length=0}}}else s?o.push(i):e.push(i);return a===r-1&&o.length>0&&e.push(this.combineLeftJsxNodes(o,t)),e}),[])}traverse(e,t){if(!e)return;let s=e.children;if(s){const t=e;s=e.children=this.combineJsxNodes(s,t);for(const e of s)this.traverse(e,t)}this._enter(e,t)}}const O=(e,t)=>new F(t).traverse(e),k=n().use(s).freeze(),P=k().use(t).freeze(),Z=["body","comments","tokens"],R=["export","import","jsx"],X=["column","lineNumber"],C=[".mdx"],H=[".md"],M={comment:!0,ecmaFeatures:{jsx:!0},ecmaVersion:(new Date).getUTCFullYear(),sourceType:"module",tokens:!0,filePath:"__placeholder__.mdx",loc:!0,range:!0},W="<$>".length;class q{constructor(){this._options=M,this.parse=this.parse.bind(this),this.parseForESLint=this.parseForESLint.bind(this)}normalizeJsxNode(e,t,s=this._options){const n=e.value;if("jsx"!==e.type||z(n))return e;if(J.exec(n)){const s=[],{position:{start:{line:o,column:r,offset:i}},data:a}=e;Object.assign(e,{data:Object.assign(Object.assign({},a),{jsxType:"JSXElementWithHTMLComments",comments:s,inline:!!t&&"root"!==t.type}),value:n.replace(N,((e,t,a,c,l)=>{const p=l+e.length,u=n.slice(0,l).split("\n"),h=n.slice(0,p).split("\n"),f=`{/${"*".repeat(t.length-2)}${a}${"*".repeat(c.length-2)}/}`,d=u.length-1,x=h.length-1;return s.push({fixed:f,loc:{start:{line:o+d,column:m(u).length+(d?0:r-1),offset:i+l},end:{line:o+x,column:m(h).length+(x?0:r-1),offset:i+p}},origin:e}),f}))})}return this._normalizeJsxNodes(e,s)}parse(e,t){return this.parseForESLint(e,t).ast}parseForESLint(t,s){const n=e.extname(s.filePath),o=C.concat(s.extensions||[]).includes(n),r=H.concat(s.markdownExtensions||[]).includes(n);if(!o&&!r)return this._eslintParse(t,s);const i=(o?P:k).parse(t);return this._ast=Object.assign(Object.assign({},c(i.position)),{type:"Program",sourceType:s.sourceType||"module",body:[],comments:[],tokens:[]}),this._services={JSXElementsWithHTMLComments:[]},o&&O(i,{code:t,enter:(e,t)=>{if(!R.includes(e.type))return;let n=this.normalizeJsxNode(e,t,s);n=Array.isArray(n)?n:[n];for(const e of n)this._nodeToAst(e,s)}}),{ast:this._ast,services:this._services}}_eslintParse(e,t){let s,n;this._parsers&&t.parser===this._options.parser||(this._parsers=a(t.parser)),t.filePath&&this._options!==t&&Object.assign(this._options,t);for(const t of this._parsers)try{s=t(e,this._options);break}catch(e){n||(n=e)}if(!s&&n)throw n;return"ast"in s&&s.ast?s:{ast:s}}_normalizeJsxNodes(e,t){const s=e.value;let n;try{n=this._eslintParse(`<$>${s}</$>`,t).ast}catch(t){if(l(t,X)){const{position:{start:s}}=e;throw"index"in t?t.index+=s.offset-W:"pos"in t&&(t.pos+=s.offset-W),t.column=t.lineNumber>1?t.column:t.column+s.column-W,t.lineNumber+=s.line-1,t}return e}const{expression:o}=n.body[0];if(!i(o)||o.children.length<=1)return e;const{position:{start:{line:r,offset:a}},data:c}=e;return o.children.reduce(((e,t)=>{if(!i(t))return e;const{start:n,end:o,loc:{start:l,end:p}={start:{column:n,line:1},end:{column:o,line:1}},range:u=[n,o]}=t,m=r+l.line-1,h=r+p.line-1,f=u[0]-W,d=u[1]-W;return e.push({type:"jsx",data:e.length>0?null:c,value:s.slice(f,d),position:{start:{line:m,column:r===m?l.column-W:l.column,offset:a+f},end:{line:h,column:r===m?p.column-W:p.column,offset:a+d}}}),e}),[])}_nodeToAst(e,t){e.data&&"JSXElementWithHTMLComments"===e.data.jsxType&&this._services.JSXElementsWithHTMLComments.push(e);const s=e.value,{loc:n,start:o,end:r}=c(e.position);if(z(s)){const e=J.exec(s)[2];return void this._ast.comments.push({type:"Block",value:e,loc:n,range:[o,r]})}const i=n.start.line-1;let a;try{a=this._eslintParse(s,t).ast}catch(e){throw l(e,X)&&(e.index+=o,e.column=e.lineNumber>1?e.column:e.column+n.start.column,e.lineNumber+=i),e}const u=o-a.range[0];for(const e of Z)this._ast[e].push(...a[e].map((e=>p(e,i,u))))}}const I=new q,{parse:B,parseForESLint:D}=I;export{Z as AST_PROPS,E as CLOSE_TAG_REGEX,J as COMMENT_CONTENT_REGEX,N as COMMENT_CONTENT_REGEX_GLOBAL,w as COMMENT_REGEX,C as DEFAULT_EXTENSIONS,M as DEFAULT_PARSER_OPTIONS,R as ES_NODE_TYPES,o as FALLBACK_PARSERS,r as JSX_TYPES,X as LOC_ERROR_PROPERTIES,H as MARKDOWN_EXTENSIONS,j as OPEN_CLOSE_TAG_REGEX,v as OPEN_TAG_REGEX,q as Parser,S as SELF_CLOSING_TAG_REGEX,F as Traverse,d as closeTag,g as comment,b as commentClose,_ as commentContent,y as commentOpen,u as first,l as hasProperties,L as isCloseTag,z as isComment,i as isJsxNode,A as isOpenCloseTag,$ as isOpenTag,T as isSelfClosingTag,m as last,k as mdProcessor,P as mdxProcessor,a as normalizeParser,c as normalizePosition,f as openTag,B as parse,D as parseForESLint,I as parser,p as restoreNodeLocation,x as selfClosingTag,O as traverse}; |
@@ -1,2 +0,1 @@ | ||
import { parse as parse$1 } from 'espree'; | ||
import { __assign, __spreadArray } from 'tslib'; | ||
@@ -13,2 +12,3 @@ import path from 'path'; | ||
'babel-eslint', | ||
'espree', | ||
]; | ||
@@ -36,3 +36,3 @@ var JSX_TYPES = ['JSXElement', 'JSXFragment']; | ||
} | ||
var parsers = [parse$1]; | ||
var parsers = []; | ||
// try to load FALLBACK_PARSERS automatically | ||
@@ -52,3 +52,3 @@ for (var _i = 0, FALLBACK_PARSERS_1 = FALLBACK_PARSERS; _i < FALLBACK_PARSERS_1.length; _i++) { | ||
if (parserFn) { | ||
parsers.unshift(parserFn); | ||
parsers.push(parserFn); | ||
} | ||
@@ -437,22 +437,21 @@ } | ||
} | ||
catch (e) { | ||
if (hasProperties(e, LOC_ERROR_PROPERTIES)) { | ||
catch (err) { | ||
if (hasProperties(err, LOC_ERROR_PROPERTIES)) { | ||
var start = node.position.start; | ||
/* istanbul ignore else */ | ||
if ('index' in e) { | ||
e.index += start.offset - OFFSET; | ||
if ('index' in err) { | ||
err.index += start.offset - OFFSET; | ||
} | ||
else if ('pos' in e) { | ||
e.pos += start.offset - OFFSET; | ||
else if ('pos' in err) { | ||
err.pos += start.offset - OFFSET; | ||
} | ||
e.column = | ||
err.column = | ||
/* istanbul ignore next */ | ||
e.lineNumber > 1 ? e.column : e.column + start.column - OFFSET; | ||
e.lineNumber += start.line - 1; | ||
throw e; | ||
err.lineNumber > 1 ? err.column : err.column + start.column - OFFSET; | ||
err.lineNumber += start.line - 1; | ||
throw err; | ||
} | ||
return node; | ||
} | ||
var expression = program | ||
.body[0].expression; | ||
var expression = program.body[0].expression; | ||
if (!isJsxNode(expression) || expression.children.length <= 1) { | ||
@@ -466,14 +465,7 @@ return node; | ||
} | ||
var nodeStart = jsNode.start, nodeEnd = jsNode.end, | ||
/* istanbul ignore next */ | ||
_a = jsNode.loc, | ||
/* istanbul ignore next */ | ||
_b = _a === void 0 ? { | ||
var nodeStart = jsNode.start, nodeEnd = jsNode.end, _a = jsNode.loc, _b = _a === void 0 ? { | ||
start: { column: nodeStart, line: 1 }, | ||
end: { column: nodeEnd, line: 1 }, | ||
} : _a, start = _b.start, end = _b.end, | ||
/* istanbul ignore next */ | ||
_c = jsNode.range, | ||
/* istanbul ignore next */ | ||
range = _c === void 0 ? [nodeStart, nodeEnd] : _c; | ||
} : _a, start = _b.start, end = _b.end, _c = jsNode.range, range = _c === void 0 ? [nodeStart, nodeEnd] : _c; | ||
var startLine = line + start.line - 1; | ||
@@ -480,0 +472,0 @@ var endLine = line + end.line - 1; |
@@ -1,1 +0,1 @@ | ||
import{parse as e}from"espree";import{__assign as t,__spreadArray as n}from"tslib";import r from"path";import s from"remark-mdx";import i from"remark-parse";import o from"unified";var a=["@typescript-eslint/parser","@babel/eslint-parser","babel-eslint"],u=["JSXElement","JSXFragment"],l=function(e){return u.includes(e.type)},c=function(t){if(t){if("string"==typeof t&&(t=require(t)),"object"==typeof t&&(t="parseForESLint"in t&&t.parseForESLint||"parse"in t&&t.parse),"function"!=typeof t)throw new TypeError("Invalid custom parser for `eslint-mdx`: "+t);return[t]}for(var n=[e],r=0,s=a;r<s.length;r++){var i=s[r];try{var o=require(i),u="parseForESLint"in o?o.parseForESLint:o.parse;u&&n.unshift(u)}catch(e){}}return n},p=function(e){var t=e.start.offset,n=e.end.offset;return{range:[t,n],loc:e,start:t,end:n}},f=function(e,t){return"object"==typeof e&&e&&t.every((function(t){return t in e}))},m=function(e,t,n){if(e&&"object"==typeof e)for(var r=0,s=Object.values(e);r<s.length;r++){var i=s[r];m(i,t,n)}if(!f(e,["loc","range"]))return e;var o=e.loc,a=o.start,u=o.end,l=e.range,c=l[0]+n,p=l[1]+n;return Object.assign(e,{start:c,end:p,range:[c,p],loc:{start:{line:t+a.line,column:a.column},end:{line:t+u.line,column:u.column}}})},h=function(e){return e&&e[0]},d=function(e){return e&&e[e.length-1]},v="(?:\\s+[a-zA-Z_:][a-zA-Z0-9:._-]*(?:\\s*=\\s*"+("(?:[^\"'=<>`\\u0000-\\u0020]+|'[^']*'|\"[^\"]*\"|"+"{.*}".replace(".","[\0-]")+")")+")?)",x="<[A-Za-z]*[A-Za-z0-9\\.\\-]*"+v+"*\\s*>",y="<\\s*\\/[A-Za-z]*[A-Za-z0-9\\.\\-]*\\s*>",g="<[A-Za-z]*[A-Za-z0-9\\.\\-]*"+v+"*\\s*\\/?>",_="\x3c!----\x3e|\x3c!--(?:-?[^>-])(?:-?[^-])*--\x3e",b="(\x3c!---*)",E="(-*--\x3e)",S="(\x3c!---*)([\\s\\S]*?)(-*--\x3e)",w=new RegExp("^(?:"+x+")$"),J=new RegExp("^(?:"+y+")$"),N=new RegExp("^(?:"+x+"[^<]*"+y+")$"),j=new RegExp("^(?:"+g+")$"),L=new RegExp("^(?:"+_+")$"),z=new RegExp("(\x3c!---*)([\\s\\S]*?)(-*--\x3e)"),A=new RegExp("(\x3c!---*)([\\s\\S]*?)(-*--\x3e)","g"),T=function(e){return w.test(e.trim())},F=function(e){return J.test(e.trim())},k=function(e){return L.test(e.trim())},P=function(e){return N.test(e.trim())},Z=function(e){return j.test(e.trim())},$=function(){function e(e){var t=e.code,n=e.enter;this.code=t,this._enter=n}return e.prototype.combineLeftJsxNodes=function(e,n){var r,s=e[0].position.start,i=t({},d(e).position.end);return n&&(null===(r=n.position.indent)||void 0===r?void 0:r.length)>0&&(i.offset+=n.position.indent.reduce((function(e,t,n){return e+(n?t+1:0)}),0)),{type:"jsx",data:e[0].data,value:this.code.slice(s.offset,i.offset),position:{start:s,end:i}}},e.prototype.combineJsxNodes=function(e,t){var r=this,s=0,i=!1,o=[],a=e.length;return e.reduce((function(e,u,l){if("jsx"===u.type){var c=u.value;if(T(c))s++,i=!0,o.push(u);else{if(F(c))s--,o.push(u);else if(k(c)||Z(c)||P(c))o.push(u);else{l||(s++,i=!0);try{var p=U.normalizeJsxNode(u,t);o.push.apply(o,Array.isArray(p)?p:[p])}catch(e){if(!s){var f=u.position.start;throw Object.assign(new SyntaxError("unknown jsx node: "+JSON.stringify(c)),{lineNumber:f.line,column:f.column,index:f.offset})}o.push(u)}}if(!s){var m=o.findIndex((function(e){return"string"==typeof e.value&&T(e.value)}));-1===m?i?e.push(r.combineLeftJsxNodes(o,t)):e.push.apply(e,o):e.push.apply(e,n(n([],o.slice(0,m)),[r.combineLeftJsxNodes(o.slice(m),t)])),o.length=0}}}else s?o.push(u):e.push(u);return l===a-1&&o.length>0&&e.push(r.combineLeftJsxNodes(o,t)),e}),[])},e.prototype.traverse=function(e,t){if(e){var n=e.children;if(n)for(var r=e,s=0,i=n=e.children=this.combineJsxNodes(n,r);s<i.length;s++){var o=i[s];this.traverse(o,r)}this._enter(e,t)}},e}(),R=function(e,t){return new $(t).traverse(e)},O=o().use(i).freeze(),X=O().use(s).freeze(),C=["body","comments","tokens"],H=["export","import","jsx"],M=["column","lineNumber"],W=[".mdx"],q=[".md"],I={comment:!0,ecmaFeatures:{jsx:!0},ecmaVersion:(new Date).getUTCFullYear(),sourceType:"module",tokens:!0,filePath:"__placeholder__.mdx",loc:!0,range:!0},B="<$>".length,D=function(){function e(){this._options=I,this.parse=this.parse.bind(this),this.parseForESLint=this.parseForESLint.bind(this)}return e.prototype.normalizeJsxNode=function(e,n,r){void 0===r&&(r=this._options);var s=e.value;if("jsx"!==e.type||k(s))return e;if(z.exec(s)){var i=[],o=e.position.start,a=o.line,u=o.column,l=o.offset,c=e.data;Object.assign(e,{data:t(t({},c),{jsxType:"JSXElementWithHTMLComments",comments:i,inline:!!n&&"root"!==n.type}),value:s.replace(A,(function(e,t,n,r,o){var c=o+e.length,p=s.slice(0,o).split("\n"),f=s.slice(0,c).split("\n"),m="{/"+"*".repeat(t.length-2)+n+"*".repeat(r.length-2)+"/}",h=p.length-1,v=f.length-1;return i.push({fixed:m,loc:{start:{line:a+h,column:d(p).length+(h?0:u-1),offset:l+o},end:{line:a+v,column:d(f).length+(v?0:u-1),offset:l+c}},origin:e}),m}))})}return this._normalizeJsxNodes(e,r)},e.prototype.parse=function(e,t){return this.parseForESLint(e,t).ast},e.prototype.parseForESLint=function(e,n){var s=this,i=r.extname(n.filePath),o=W.concat(n.extensions||[]).includes(i),a=q.concat(n.markdownExtensions||[]).includes(i);if(!o&&!a)return this._eslintParse(e,n);var u=(o?X:O).parse(e);return this._ast=t(t({},p(u.position)),{type:"Program",sourceType:n.sourceType||"module",body:[],comments:[],tokens:[]}),this._services={JSXElementsWithHTMLComments:[]},o&&R(u,{code:e,enter:function(e,t){if(H.includes(e.type))for(var r=s.normalizeJsxNode(e,t,n),i=0,o=r=Array.isArray(r)?r:[r];i<o.length;i++){var a=o[i];s._nodeToAst(a,n)}}}),{ast:this._ast,services:this._services}},e.prototype._eslintParse=function(e,t){var n,r;this._parsers&&t.parser===this._options.parser||(this._parsers=c(t.parser)),t.filePath&&this._options!==t&&Object.assign(this._options,t);for(var s=0,i=this._parsers;s<i.length;s++){var o=i[s];try{n=o(e,this._options);break}catch(e){r||(r=e)}}if(!n&&r)throw r;return"ast"in n&&n.ast?n:{ast:n}},e.prototype._normalizeJsxNodes=function(e,t){var n,r=e.value;try{n=this._eslintParse("<$>"+r+"</$>",t).ast}catch(t){if(f(t,M)){var s=e.position.start;throw"index"in t?t.index+=s.offset-B:"pos"in t&&(t.pos+=s.offset-B),t.column=t.lineNumber>1?t.column:t.column+s.column-B,t.lineNumber+=s.line-1,t}return e}var i=n.body[0].expression;if(!l(i)||i.children.length<=1)return e;var o=e.position.start,a=o.line,u=o.offset,c=e.data;return i.children.reduce((function(e,t){if(!l(t))return e;var n=t.start,s=t.end,i=t.loc,o=void 0===i?{start:{column:n,line:1},end:{column:s,line:1}}:i,p=o.start,f=o.end,m=t.range,h=void 0===m?[n,s]:m,d=a+p.line-1,v=a+f.line-1,x=h[0]-B,y=h[1]-B;return e.push({type:"jsx",data:e.length>0?null:c,value:r.slice(x,y),position:{start:{line:d,column:a===d?p.column-B:p.column,offset:u+x},end:{line:v,column:a===d?f.column-B:f.column,offset:u+y}}}),e}),[])},e.prototype._nodeToAst=function(e,t){var n;e.data&&"JSXElementWithHTMLComments"===e.data.jsxType&&this._services.JSXElementsWithHTMLComments.push(e);var r=e.value,s=p(e.position),i=s.loc,o=s.start,a=s.end;if(k(r)){var u=z.exec(r)[2];this._ast.comments.push({type:"Block",value:u,loc:i,range:[o,a]})}else{var l,c=i.start.line-1;try{l=this._eslintParse(r,t).ast}catch(e){throw f(e,M)&&(e.index+=o,e.column=e.lineNumber>1?e.column:e.column+i.start.column,e.lineNumber+=c),e}for(var h=o-l.range[0],d=0,v=C;d<v.length;d++){var x=v[d];(n=this._ast[x]).push.apply(n,l[x].map((function(e){return m(e,c,h)})))}}},e}(),U=new D,V=U.parse,Y=U.parseForESLint;export{C as AST_PROPS,J as CLOSE_TAG_REGEX,z as COMMENT_CONTENT_REGEX,A as COMMENT_CONTENT_REGEX_GLOBAL,L as COMMENT_REGEX,W as DEFAULT_EXTENSIONS,I as DEFAULT_PARSER_OPTIONS,H as ES_NODE_TYPES,a as FALLBACK_PARSERS,u as JSX_TYPES,M as LOC_ERROR_PROPERTIES,q as MARKDOWN_EXTENSIONS,N as OPEN_CLOSE_TAG_REGEX,w as OPEN_TAG_REGEX,D as Parser,j as SELF_CLOSING_TAG_REGEX,$ as Traverse,y as closeTag,_ as comment,E as commentClose,S as commentContent,b as commentOpen,h as first,f as hasProperties,F as isCloseTag,k as isComment,l as isJsxNode,P as isOpenCloseTag,T as isOpenTag,Z as isSelfClosingTag,d as last,O as mdProcessor,X as mdxProcessor,c as normalizeParser,p as normalizePosition,x as openTag,V as parse,Y as parseForESLint,U as parser,m as restoreNodeLocation,g as selfClosingTag,R as traverse}; | ||
import{__assign as e,__spreadArray as t}from"tslib";import n from"path";import r from"remark-mdx";import s from"remark-parse";import i from"unified";var o=["@typescript-eslint/parser","@babel/eslint-parser","babel-eslint","espree"],a=["JSXElement","JSXFragment"],u=function(e){return a.includes(e.type)},l=function(e){if(e){if("string"==typeof e&&(e=require(e)),"object"==typeof e&&(e="parseForESLint"in e&&e.parseForESLint||"parse"in e&&e.parse),"function"!=typeof e)throw new TypeError("Invalid custom parser for `eslint-mdx`: "+e);return[e]}for(var t=[],n=0,r=o;n<r.length;n++){var s=r[n];try{var i=require(s),a="parseForESLint"in i?i.parseForESLint:i.parse;a&&t.push(a)}catch(e){}}return t},c=function(e){var t=e.start.offset,n=e.end.offset;return{range:[t,n],loc:e,start:t,end:n}},p=function(e,t){return"object"==typeof e&&e&&t.every((function(t){return t in e}))},f=function(e,t,n){if(e&&"object"==typeof e)for(var r=0,s=Object.values(e);r<s.length;r++){var i=s[r];f(i,t,n)}if(!p(e,["loc","range"]))return e;var o=e.loc,a=o.start,u=o.end,l=e.range,c=l[0]+n,m=l[1]+n;return Object.assign(e,{start:c,end:m,range:[c,m],loc:{start:{line:t+a.line,column:a.column},end:{line:t+u.line,column:u.column}}})},m=function(e){return e&&e[0]},h=function(e){return e&&e[e.length-1]},d="(?:\\s+[a-zA-Z_:][a-zA-Z0-9:._-]*(?:\\s*=\\s*"+("(?:[^\"'=<>`\\u0000-\\u0020]+|'[^']*'|\"[^\"]*\"|"+"{.*}".replace(".","[\0-]")+")")+")?)",v="<[A-Za-z]*[A-Za-z0-9\\.\\-]*"+d+"*\\s*>",x="<\\s*\\/[A-Za-z]*[A-Za-z0-9\\.\\-]*\\s*>",y="<[A-Za-z]*[A-Za-z0-9\\.\\-]*"+d+"*\\s*\\/?>",g="\x3c!----\x3e|\x3c!--(?:-?[^>-])(?:-?[^-])*--\x3e",_="(\x3c!---*)",b="(-*--\x3e)",E="(\x3c!---*)([\\s\\S]*?)(-*--\x3e)",S=new RegExp("^(?:"+v+")$"),w=new RegExp("^(?:"+x+")$"),J=new RegExp("^(?:"+v+"[^<]*"+x+")$"),N=new RegExp("^(?:"+y+")$"),j=new RegExp("^(?:"+g+")$"),L=new RegExp("(\x3c!---*)([\\s\\S]*?)(-*--\x3e)"),z=new RegExp("(\x3c!---*)([\\s\\S]*?)(-*--\x3e)","g"),A=function(e){return S.test(e.trim())},T=function(e){return w.test(e.trim())},F=function(e){return j.test(e.trim())},k=function(e){return J.test(e.trim())},P=function(e){return N.test(e.trim())},Z=function(){function n(e){var t=e.code,n=e.enter;this.code=t,this._enter=n}return n.prototype.combineLeftJsxNodes=function(t,n){var r,s=t[0].position.start,i=e({},h(t).position.end);return n&&(null===(r=n.position.indent)||void 0===r?void 0:r.length)>0&&(i.offset+=n.position.indent.reduce((function(e,t,n){return e+(n?t+1:0)}),0)),{type:"jsx",data:t[0].data,value:this.code.slice(s.offset,i.offset),position:{start:s,end:i}}},n.prototype.combineJsxNodes=function(e,n){var r=this,s=0,i=!1,o=[],a=e.length;return e.reduce((function(e,u,l){if("jsx"===u.type){var c=u.value;if(A(c))s++,i=!0,o.push(u);else{if(T(c))s--,o.push(u);else if(F(c)||P(c)||k(c))o.push(u);else{l||(s++,i=!0);try{var p=D.normalizeJsxNode(u,n);o.push.apply(o,Array.isArray(p)?p:[p])}catch(e){if(!s){var f=u.position.start;throw Object.assign(new SyntaxError("unknown jsx node: "+JSON.stringify(c)),{lineNumber:f.line,column:f.column,index:f.offset})}o.push(u)}}if(!s){var m=o.findIndex((function(e){return"string"==typeof e.value&&A(e.value)}));-1===m?i?e.push(r.combineLeftJsxNodes(o,n)):e.push.apply(e,o):e.push.apply(e,t(t([],o.slice(0,m)),[r.combineLeftJsxNodes(o.slice(m),n)])),o.length=0}}}else s?o.push(u):e.push(u);return l===a-1&&o.length>0&&e.push(r.combineLeftJsxNodes(o,n)),e}),[])},n.prototype.traverse=function(e,t){if(e){var n=e.children;if(n)for(var r=e,s=0,i=n=e.children=this.combineJsxNodes(n,r);s<i.length;s++){var o=i[s];this.traverse(o,r)}this._enter(e,t)}},n}(),$=function(e,t){return new Z(t).traverse(e)},R=i().use(s).freeze(),O=R().use(r).freeze(),X=["body","comments","tokens"],C=["export","import","jsx"],H=["column","lineNumber"],M=[".mdx"],W=[".md"],q={comment:!0,ecmaFeatures:{jsx:!0},ecmaVersion:(new Date).getUTCFullYear(),sourceType:"module",tokens:!0,filePath:"__placeholder__.mdx",loc:!0,range:!0},I="<$>".length,B=function(){function t(){this._options=q,this.parse=this.parse.bind(this),this.parseForESLint=this.parseForESLint.bind(this)}return t.prototype.normalizeJsxNode=function(t,n,r){void 0===r&&(r=this._options);var s=t.value;if("jsx"!==t.type||F(s))return t;if(L.exec(s)){var i=[],o=t.position.start,a=o.line,u=o.column,l=o.offset,c=t.data;Object.assign(t,{data:e(e({},c),{jsxType:"JSXElementWithHTMLComments",comments:i,inline:!!n&&"root"!==n.type}),value:s.replace(z,(function(e,t,n,r,o){var c=o+e.length,p=s.slice(0,o).split("\n"),f=s.slice(0,c).split("\n"),m="{/"+"*".repeat(t.length-2)+n+"*".repeat(r.length-2)+"/}",d=p.length-1,v=f.length-1;return i.push({fixed:m,loc:{start:{line:a+d,column:h(p).length+(d?0:u-1),offset:l+o},end:{line:a+v,column:h(f).length+(v?0:u-1),offset:l+c}},origin:e}),m}))})}return this._normalizeJsxNodes(t,r)},t.prototype.parse=function(e,t){return this.parseForESLint(e,t).ast},t.prototype.parseForESLint=function(t,r){var s=this,i=n.extname(r.filePath),o=M.concat(r.extensions||[]).includes(i),a=W.concat(r.markdownExtensions||[]).includes(i);if(!o&&!a)return this._eslintParse(t,r);var u=(o?O:R).parse(t);return this._ast=e(e({},c(u.position)),{type:"Program",sourceType:r.sourceType||"module",body:[],comments:[],tokens:[]}),this._services={JSXElementsWithHTMLComments:[]},o&&$(u,{code:t,enter:function(e,t){if(C.includes(e.type))for(var n=s.normalizeJsxNode(e,t,r),i=0,o=n=Array.isArray(n)?n:[n];i<o.length;i++){var a=o[i];s._nodeToAst(a,r)}}}),{ast:this._ast,services:this._services}},t.prototype._eslintParse=function(e,t){var n,r;this._parsers&&t.parser===this._options.parser||(this._parsers=l(t.parser)),t.filePath&&this._options!==t&&Object.assign(this._options,t);for(var s=0,i=this._parsers;s<i.length;s++){var o=i[s];try{n=o(e,this._options);break}catch(e){r||(r=e)}}if(!n&&r)throw r;return"ast"in n&&n.ast?n:{ast:n}},t.prototype._normalizeJsxNodes=function(e,t){var n,r=e.value;try{n=this._eslintParse("<$>"+r+"</$>",t).ast}catch(t){if(p(t,H)){var s=e.position.start;throw"index"in t?t.index+=s.offset-I:"pos"in t&&(t.pos+=s.offset-I),t.column=t.lineNumber>1?t.column:t.column+s.column-I,t.lineNumber+=s.line-1,t}return e}var i=n.body[0].expression;if(!u(i)||i.children.length<=1)return e;var o=e.position.start,a=o.line,l=o.offset,c=e.data;return i.children.reduce((function(e,t){if(!u(t))return e;var n=t.start,s=t.end,i=t.loc,o=void 0===i?{start:{column:n,line:1},end:{column:s,line:1}}:i,p=o.start,f=o.end,m=t.range,h=void 0===m?[n,s]:m,d=a+p.line-1,v=a+f.line-1,x=h[0]-I,y=h[1]-I;return e.push({type:"jsx",data:e.length>0?null:c,value:r.slice(x,y),position:{start:{line:d,column:a===d?p.column-I:p.column,offset:l+x},end:{line:v,column:a===d?f.column-I:f.column,offset:l+y}}}),e}),[])},t.prototype._nodeToAst=function(e,t){var n;e.data&&"JSXElementWithHTMLComments"===e.data.jsxType&&this._services.JSXElementsWithHTMLComments.push(e);var r=e.value,s=c(e.position),i=s.loc,o=s.start,a=s.end;if(F(r)){var u=L.exec(r)[2];this._ast.comments.push({type:"Block",value:u,loc:i,range:[o,a]})}else{var l,m=i.start.line-1;try{l=this._eslintParse(r,t).ast}catch(e){throw p(e,H)&&(e.index+=o,e.column=e.lineNumber>1?e.column:e.column+i.start.column,e.lineNumber+=m),e}for(var h=o-l.range[0],d=0,v=X;d<v.length;d++){var x=v[d];(n=this._ast[x]).push.apply(n,l[x].map((function(e){return f(e,m,h)})))}}},t}(),D=new B,U=D.parse,V=D.parseForESLint;export{X as AST_PROPS,w as CLOSE_TAG_REGEX,L as COMMENT_CONTENT_REGEX,z as COMMENT_CONTENT_REGEX_GLOBAL,j as COMMENT_REGEX,M as DEFAULT_EXTENSIONS,q as DEFAULT_PARSER_OPTIONS,C as ES_NODE_TYPES,o as FALLBACK_PARSERS,a as JSX_TYPES,H as LOC_ERROR_PROPERTIES,W as MARKDOWN_EXTENSIONS,J as OPEN_CLOSE_TAG_REGEX,S as OPEN_TAG_REGEX,B as Parser,N as SELF_CLOSING_TAG_REGEX,Z as Traverse,x as closeTag,g as comment,b as commentClose,E as commentContent,_ as commentOpen,m as first,p as hasProperties,T as isCloseTag,F as isComment,u as isJsxNode,k as isOpenCloseTag,A as isOpenTag,P as isSelfClosingTag,h as last,R as mdProcessor,O as mdxProcessor,l as normalizeParser,c as normalizePosition,v as openTag,U as parse,V as parseForESLint,D as parser,f as restoreNodeLocation,y as selfClosingTag,$ as traverse}; |
@@ -1,2 +0,2 @@ | ||
export * from './helper'; | ||
export * from './helpers'; | ||
export * from './parser'; | ||
@@ -6,2 +6,1 @@ export * from './regexp'; | ||
export * from './types'; | ||
//# sourceMappingURL=index.d.ts.map |
@@ -1,2 +0,2 @@ | ||
export * from './helper'; | ||
export * from './helpers'; | ||
export * from './parser'; | ||
@@ -3,0 +3,0 @@ export * from './regexp'; |
@@ -1,4 +0,5 @@ | ||
import { AST, Linter } from 'eslint'; | ||
import type { AST, Linter } from 'eslint'; | ||
import unified from 'unified'; | ||
import { Node, Parent, ParserOptions } from './types'; | ||
import type { Node, Parent } from 'unist'; | ||
import type { ParserOptions } from './types'; | ||
export declare const mdProcessor: unified.FrozenProcessor<unified.Settings>; | ||
@@ -14,3 +15,3 @@ export declare const mdxProcessor: unified.FrozenProcessor<unified.Settings>; | ||
constructor(); | ||
normalizeJsxNode(node: Node, parent?: Parent, options?: ParserOptions): import("unist").Node | import("unist").Node[]; | ||
normalizeJsxNode(node: Node, parent?: Parent, options?: ParserOptions): Node | Node[]; | ||
parse(code: string, options: ParserOptions): AST.Program; | ||
@@ -21,2 +22,1 @@ parseForESLint(code: string, options: ParserOptions): Linter.ESLintParseResult; | ||
export declare const parse: (code: string, options: ParserOptions) => AST.Program, parseForESLint: (code: string, options: ParserOptions) => Linter.ESLintParseResult; | ||
//# sourceMappingURL=parser.d.ts.map |
@@ -1,2 +0,1 @@ | ||
import { __assign } from "tslib"; | ||
import path from 'path'; | ||
@@ -6,13 +5,13 @@ import remarkMdx from 'remark-mdx'; | ||
import unified from 'unified'; | ||
import { hasProperties, isJsxNode, last, normalizeParser, normalizePosition, restoreNodeLocation, } from './helper'; | ||
import { hasProperties, isJsxNode, last, normalizeParser, normalizePosition, restoreNodeLocation, } from './helpers'; | ||
import { COMMENT_CONTENT_REGEX, COMMENT_CONTENT_REGEX_GLOBAL, isComment, } from './regexp'; | ||
import { traverse } from './traverse'; | ||
export var mdProcessor = unified().use(remarkParse).freeze(); | ||
export var mdxProcessor = mdProcessor().use(remarkMdx).freeze(); | ||
export var AST_PROPS = ['body', 'comments', 'tokens']; | ||
export var ES_NODE_TYPES = ['export', 'import', 'jsx']; | ||
export var LOC_ERROR_PROPERTIES = ['column', 'lineNumber']; | ||
export var DEFAULT_EXTENSIONS = ['.mdx']; | ||
export var MARKDOWN_EXTENSIONS = ['.md']; | ||
export var DEFAULT_PARSER_OPTIONS = { | ||
export const mdProcessor = unified().use(remarkParse).freeze(); | ||
export const mdxProcessor = mdProcessor().use(remarkMdx).freeze(); | ||
export const AST_PROPS = ['body', 'comments', 'tokens']; | ||
export const ES_NODE_TYPES = ['export', 'import', 'jsx']; | ||
export const LOC_ERROR_PROPERTIES = ['column', 'lineNumber']; | ||
export const DEFAULT_EXTENSIONS = ['.mdx']; | ||
export const MARKDOWN_EXTENSIONS = ['.md']; | ||
export const DEFAULT_PARSER_OPTIONS = { | ||
comment: true, | ||
@@ -31,7 +30,7 @@ ecmaFeatures: { | ||
}; | ||
var JSX_WRAPPER_START = '<$>'; | ||
var JSX_WRAPPER_END = '</$>'; | ||
var OFFSET = JSX_WRAPPER_START.length; | ||
var Parser = /** @class */ (function () { | ||
function Parser() { | ||
const JSX_WRAPPER_START = '<$>'; | ||
const JSX_WRAPPER_END = '</$>'; | ||
const OFFSET = JSX_WRAPPER_START.length; | ||
export class Parser { | ||
constructor() { | ||
// @internal | ||
@@ -42,38 +41,37 @@ this._options = DEFAULT_PARSER_OPTIONS; | ||
} | ||
Parser.prototype.normalizeJsxNode = function (node, parent, options) { | ||
if (options === void 0) { options = this._options; } | ||
var value = node.value; | ||
normalizeJsxNode(node, parent, options = this._options) { | ||
const value = node.value; | ||
if (node.type !== 'jsx' || isComment(value)) { | ||
return node; | ||
} | ||
var commentContent = COMMENT_CONTENT_REGEX.exec(value); | ||
const commentContent = COMMENT_CONTENT_REGEX.exec(value); | ||
if (commentContent) { | ||
var comments_1 = []; | ||
var _a = node.position.start, line_1 = _a.line, column_1 = _a.column, startOffset_1 = _a.offset, data = node.data; | ||
const comments = []; | ||
const { position: { start: { line, column, offset: startOffset }, }, data, } = node; | ||
Object.assign(node, { | ||
data: __assign(__assign({}, data), { jsxType: 'JSXElementWithHTMLComments', comments: comments_1, | ||
data: Object.assign(Object.assign({}, data), { jsxType: 'JSXElementWithHTMLComments', comments, | ||
// jsx in paragraph is considered as plain html in mdx, what means html style comments are valid | ||
// TODO: in this case, jsx style comments could be a mistake | ||
inline: !!parent && parent.type !== 'root' }), | ||
value: value.replace(COMMENT_CONTENT_REGEX_GLOBAL, function (matched, $0, $1, $2, offset) { | ||
var endOffset = offset + matched.length; | ||
var startLines = value.slice(0, offset).split('\n'); | ||
var endLines = value.slice(0, endOffset).split('\n'); | ||
var fixed = "{/" + '*'.repeat($0.length - 2) + $1 + '*'.repeat($2.length - 2) + "/}"; | ||
var startLineOffset = startLines.length - 1; | ||
var endLineOffset = endLines.length - 1; | ||
comments_1.push({ | ||
fixed: fixed, | ||
value: value.replace(COMMENT_CONTENT_REGEX_GLOBAL, (matched, $0, $1, $2, offset) => { | ||
const endOffset = offset + matched.length; | ||
const startLines = value.slice(0, offset).split('\n'); | ||
const endLines = value.slice(0, endOffset).split('\n'); | ||
const fixed = `{/${'*'.repeat($0.length - 2)}${$1}${'*'.repeat($2.length - 2)}/}`; | ||
const startLineOffset = startLines.length - 1; | ||
const endLineOffset = endLines.length - 1; | ||
comments.push({ | ||
fixed, | ||
// ! eslint ast column is 0-indexed, but unified is 1-indexed | ||
loc: { | ||
start: { | ||
line: line_1 + startLineOffset, | ||
line: line + startLineOffset, | ||
column: last(startLines).length + | ||
(startLineOffset ? 0 : column_1 - 1), | ||
offset: startOffset_1 + offset, | ||
(startLineOffset ? 0 : column - 1), | ||
offset: startOffset + offset, | ||
}, | ||
end: { | ||
line: line_1 + endLineOffset, | ||
column: last(endLines).length + (endLineOffset ? 0 : column_1 - 1), | ||
offset: startOffset_1 + endOffset, | ||
line: line + endLineOffset, | ||
column: last(endLines).length + (endLineOffset ? 0 : column - 1), | ||
offset: startOffset + endOffset, | ||
}, | ||
@@ -88,17 +86,16 @@ }, | ||
return this._normalizeJsxNodes(node, options); | ||
}; | ||
Parser.prototype.parse = function (code, options) { | ||
} | ||
parse(code, options) { | ||
return this.parseForESLint(code, options).ast; | ||
}; | ||
} | ||
// eslint-disable-next-line sonarjs/cognitive-complexity | ||
Parser.prototype.parseForESLint = function (code, options) { | ||
var _this = this; | ||
var extname = path.extname(options.filePath); | ||
var isMdx = DEFAULT_EXTENSIONS.concat(options.extensions || []).includes(extname); | ||
var isMarkdown = MARKDOWN_EXTENSIONS.concat(options.markdownExtensions || []).includes(extname); | ||
parseForESLint(code, options) { | ||
const extname = path.extname(options.filePath); | ||
const isMdx = DEFAULT_EXTENSIONS.concat(options.extensions || []).includes(extname); | ||
const isMarkdown = MARKDOWN_EXTENSIONS.concat(options.markdownExtensions || []).includes(extname); | ||
if (!isMdx && !isMarkdown) { | ||
return this._eslintParse(code, options); | ||
} | ||
var root = (isMdx ? mdxProcessor : mdProcessor).parse(code); | ||
this._ast = __assign(__assign({}, normalizePosition(root.position)), { type: 'Program', sourceType: options.sourceType || 'module', body: [], comments: [], tokens: [] }); | ||
const root = (isMdx ? mdxProcessor : mdProcessor).parse(code); | ||
this._ast = Object.assign(Object.assign({}, normalizePosition(root.position)), { type: 'Program', sourceType: options.sourceType || 'module', body: [], comments: [], tokens: [] }); | ||
this._services = { | ||
@@ -109,12 +106,11 @@ JSXElementsWithHTMLComments: [], | ||
traverse(root, { | ||
code: code, | ||
enter: function (node, parent) { | ||
code, | ||
enter: (node, parent) => { | ||
if (!ES_NODE_TYPES.includes(node.type)) { | ||
return; | ||
} | ||
var normalized = _this.normalizeJsxNode(node, parent, options); | ||
let normalized = this.normalizeJsxNode(node, parent, options); | ||
normalized = Array.isArray(normalized) ? normalized : [normalized]; | ||
for (var _i = 0, normalized_1 = normalized; _i < normalized_1.length; _i++) { | ||
var normalizedNode = normalized_1[_i]; | ||
_this._nodeToAst(normalizedNode, options); | ||
for (const normalizedNode of normalized) { | ||
this._nodeToAst(normalizedNode, options); | ||
} | ||
@@ -128,5 +124,5 @@ }, | ||
}; | ||
}; | ||
} | ||
// @internal | ||
Parser.prototype._eslintParse = function (code, options) { | ||
_eslintParse(code, options) { | ||
if (!this._parsers || options.parser !== this._options.parser) { | ||
@@ -139,8 +135,7 @@ this._parsers = normalizeParser(options.parser); | ||
} | ||
var program; | ||
var parseError; | ||
for (var _i = 0, _a = this._parsers; _i < _a.length; _i++) { | ||
var parser_1 = _a[_i]; | ||
let program; | ||
let parseError; | ||
for (const parser of this._parsers) { | ||
try { | ||
program = parser_1(code, this._options); | ||
program = parser(code, this._options); | ||
break; | ||
@@ -161,57 +156,49 @@ } | ||
: { ast: program }); | ||
}; | ||
} | ||
// fix adjacent JSX nodes | ||
// @internal | ||
// eslint-disable-next-line sonarjs/cognitive-complexity | ||
Parser.prototype._normalizeJsxNodes = function (node, options) { | ||
var value = node.value; | ||
var program; | ||
_normalizeJsxNodes(node, options) { | ||
const value = node.value; | ||
let program; | ||
try { | ||
// wrap into single element which is valid jsx but not valid jsx in mdx, so that it won't break on adjacent JSX nodes | ||
program = this._eslintParse("" + JSX_WRAPPER_START + value + JSX_WRAPPER_END, options).ast; | ||
program = this._eslintParse(`${JSX_WRAPPER_START}${value}${JSX_WRAPPER_END}`, options).ast; | ||
} | ||
catch (e) { | ||
if (hasProperties(e, LOC_ERROR_PROPERTIES)) { | ||
var start = node.position.start; | ||
catch (err) { | ||
if (hasProperties(err, LOC_ERROR_PROPERTIES)) { | ||
const { position: { start }, } = node; | ||
/* istanbul ignore else */ | ||
if ('index' in e) { | ||
e.index += start.offset - OFFSET; | ||
if ('index' in err) { | ||
err.index += start.offset - OFFSET; | ||
} | ||
else if ('pos' in e) { | ||
e.pos += start.offset - OFFSET; | ||
else if ('pos' in err) { | ||
err.pos += start.offset - OFFSET; | ||
} | ||
e.column = | ||
err.column = | ||
/* istanbul ignore next */ | ||
e.lineNumber > 1 ? e.column : e.column + start.column - OFFSET; | ||
e.lineNumber += start.line - 1; | ||
throw e; | ||
err.lineNumber > 1 ? err.column : err.column + start.column - OFFSET; | ||
err.lineNumber += start.line - 1; | ||
throw err; | ||
} | ||
return node; | ||
} | ||
var expression = program | ||
.body[0].expression; | ||
const { expression } = program.body[0]; | ||
if (!isJsxNode(expression) || expression.children.length <= 1) { | ||
return node; | ||
} | ||
var _a = node.position.start, line = _a.line, offset = _a.offset, data = node.data; | ||
return expression.children.reduce(function (nodes, jsNode) { | ||
const { position: { start: { line, offset }, }, data, } = node; | ||
return expression.children.reduce((nodes, jsNode) => { | ||
if (!isJsxNode(jsNode)) { | ||
return nodes; | ||
} | ||
var nodeStart = jsNode.start, nodeEnd = jsNode.end, | ||
/* istanbul ignore next */ | ||
_a = jsNode.loc, | ||
/* istanbul ignore next */ | ||
_b = _a === void 0 ? { | ||
const { start: nodeStart, end: nodeEnd, loc: { start, end } = { | ||
start: { column: nodeStart, line: 1 }, | ||
end: { column: nodeEnd, line: 1 }, | ||
} : _a, start = _b.start, end = _b.end, | ||
/* istanbul ignore next */ | ||
_c = jsNode.range, | ||
/* istanbul ignore next */ | ||
range = _c === void 0 ? [nodeStart, nodeEnd] : _c; | ||
var startLine = line + start.line - 1; | ||
var endLine = line + end.line - 1; | ||
var startOffset = range[0] - OFFSET; | ||
var endOffset = range[1] - OFFSET; | ||
}, range = [nodeStart, nodeEnd], } = jsNode; | ||
const startLine = line + start.line - 1; | ||
const endLine = line + end.line - 1; | ||
const startOffset = range[0] - OFFSET; | ||
const endOffset = range[1] - OFFSET; | ||
nodes.push({ | ||
@@ -236,18 +223,17 @@ type: 'jsx', | ||
}, []); | ||
}; | ||
} | ||
// @internal | ||
Parser.prototype._nodeToAst = function (node, options) { | ||
var _a; | ||
_nodeToAst(node, options) { | ||
if (node.data && node.data.jsxType === 'JSXElementWithHTMLComments') { | ||
this._services.JSXElementsWithHTMLComments.push(node); | ||
} | ||
var value = node.value; | ||
var _b = normalizePosition(node.position), loc = _b.loc, start = _b.start, end = _b.end; | ||
const value = node.value; | ||
const { loc, start, end } = normalizePosition(node.position); | ||
// fix #4 | ||
if (isComment(value)) { | ||
var comment = COMMENT_CONTENT_REGEX.exec(value)[2]; | ||
const comment = COMMENT_CONTENT_REGEX.exec(value)[2]; | ||
this._ast.comments.push({ | ||
type: 'Block', | ||
value: comment, | ||
loc: loc, | ||
loc, | ||
range: [start, end], | ||
@@ -257,4 +243,4 @@ }); | ||
} | ||
var startLine = loc.start.line - 1; // ! line is 1-indexed, change to 0-indexed to simplify usage | ||
var program; | ||
const startLine = loc.start.line - 1; // ! line is 1-indexed, change to 0-indexed to simplify usage | ||
let program; | ||
try { | ||
@@ -273,16 +259,12 @@ program = this._eslintParse(value, options).ast; | ||
} | ||
var offset = start - program.range[0]; | ||
for (var _i = 0, AST_PROPS_1 = AST_PROPS; _i < AST_PROPS_1.length; _i++) { | ||
var prop = AST_PROPS_1[_i]; | ||
(_a = this._ast[prop]).push.apply(_a, program[prop].map(function (item) { | ||
return restoreNodeLocation(item, startLine, offset); | ||
})); | ||
} | ||
}; | ||
return Parser; | ||
}()); | ||
export { Parser }; | ||
export var parser = new Parser(); | ||
const offset = start - program.range[0]; | ||
for (const prop of AST_PROPS) | ||
this._ast[prop].push( | ||
// ts doesn't understand the mixed type | ||
...program[prop].map((item) => restoreNodeLocation(item, startLine, offset))); | ||
} | ||
} | ||
export const parser = new Parser(); | ||
// eslint-disable-next-line @typescript-eslint/unbound-method | ||
export var parse = parser.parse, parseForESLint = parser.parseForESLint; | ||
export const { parse, parseForESLint } = parser; | ||
//# sourceMappingURL=parser.js.map |
@@ -20,2 +20,1 @@ export declare const openTag: string; | ||
export declare const isSelfClosingTag: (text: string) => boolean; | ||
//# sourceMappingURL=regexp.d.ts.map |
// based on https://github.com/mdx-js/mdx/blob/master/packages/remark-mdx/tag.js | ||
var dotAllPolyfill = '[\0-\uFFFF]'; | ||
var attributeName = '[a-zA-Z_:][a-zA-Z0-9:._-]*'; | ||
var unquoted = '[^"\'=<>`\\u0000-\\u0020]+'; | ||
var singleQuoted = "'[^']*'"; | ||
var doubleQuoted = '"[^"]*"'; | ||
var jsProps = '{.*}'.replace('.', dotAllPolyfill); | ||
var attributeValue = '(?:' + | ||
const dotAllPolyfill = '[\0-\uFFFF]'; | ||
const attributeName = '[a-zA-Z_:][a-zA-Z0-9:._-]*'; | ||
const unquoted = '[^"\'=<>`\\u0000-\\u0020]+'; | ||
const singleQuoted = "'[^']*'"; | ||
const doubleQuoted = '"[^"]*"'; | ||
const jsProps = '{.*}'.replace('.', dotAllPolyfill); | ||
const attributeValue = '(?:' + | ||
unquoted + | ||
@@ -17,26 +17,22 @@ '|' + | ||
')'; | ||
var attribute = '(?:\\s+' + attributeName + '(?:\\s*=\\s*' + attributeValue + ')?)'; | ||
export var openTag = '<[A-Za-z]*[A-Za-z0-9\\.\\-]*' + attribute + '*\\s*>'; | ||
export var closeTag = '<\\s*\\/[A-Za-z]*[A-Za-z0-9\\.\\-]*\\s*>'; | ||
export var selfClosingTag = '<[A-Za-z]*[A-Za-z0-9\\.\\-]*' + attribute + '*\\s*\\/?>'; | ||
export var comment = '<!---->|<!--(?:-?[^>-])(?:-?[^-])*-->'; | ||
export var commentOpen = '(<!---*)'; | ||
export var commentClose = '(-*-->)'; | ||
export var commentContent = commentOpen + "([\\s\\S]*?)" + commentClose; | ||
export var OPEN_TAG_REGEX = new RegExp("^(?:" + openTag + ")$"); | ||
export var CLOSE_TAG_REGEX = new RegExp("^(?:" + closeTag + ")$"); | ||
export var OPEN_CLOSE_TAG_REGEX = new RegExp("^(?:" + (openTag + '[^<]*' + closeTag) + ")$"); | ||
export var SELF_CLOSING_TAG_REGEX = new RegExp("^(?:" + selfClosingTag + ")$"); | ||
export var COMMENT_REGEX = new RegExp("^(?:" + comment + ")$"); | ||
export var COMMENT_CONTENT_REGEX = new RegExp(commentContent); | ||
export var COMMENT_CONTENT_REGEX_GLOBAL = new RegExp(commentContent, 'g'); | ||
export var isOpenTag = function (text) { return OPEN_TAG_REGEX.test(text.trim()); }; | ||
export var isCloseTag = function (text) { return CLOSE_TAG_REGEX.test(text.trim()); }; | ||
export var isComment = function (text) { return COMMENT_REGEX.test(text.trim()); }; | ||
export var isOpenCloseTag = function (text) { | ||
return OPEN_CLOSE_TAG_REGEX.test(text.trim()); | ||
}; | ||
export var isSelfClosingTag = function (text) { | ||
return SELF_CLOSING_TAG_REGEX.test(text.trim()); | ||
}; | ||
const attribute = '(?:\\s+' + attributeName + '(?:\\s*=\\s*' + attributeValue + ')?)'; | ||
export const openTag = '<[A-Za-z]*[A-Za-z0-9\\.\\-]*' + attribute + '*\\s*>'; | ||
export const closeTag = '<\\s*\\/[A-Za-z]*[A-Za-z0-9\\.\\-]*\\s*>'; | ||
export const selfClosingTag = '<[A-Za-z]*[A-Za-z0-9\\.\\-]*' + attribute + '*\\s*\\/?>'; | ||
export const comment = '<!---->|<!--(?:-?[^>-])(?:-?[^-])*-->'; | ||
export const commentOpen = '(<!---*)'; | ||
export const commentClose = '(-*-->)'; | ||
export const commentContent = `${commentOpen}([\\s\\S]*?)${commentClose}`; | ||
export const OPEN_TAG_REGEX = new RegExp(`^(?:${openTag})$`); | ||
export const CLOSE_TAG_REGEX = new RegExp(`^(?:${closeTag})$`); | ||
export const OPEN_CLOSE_TAG_REGEX = new RegExp(`^(?:${openTag + '[^<]*' + closeTag})$`); | ||
export const SELF_CLOSING_TAG_REGEX = new RegExp(`^(?:${selfClosingTag})$`); | ||
export const COMMENT_REGEX = new RegExp(`^(?:${comment})$`); | ||
export const COMMENT_CONTENT_REGEX = new RegExp(commentContent); | ||
export const COMMENT_CONTENT_REGEX_GLOBAL = new RegExp(commentContent, 'g'); | ||
export const isOpenTag = (text) => OPEN_TAG_REGEX.test(text.trim()); | ||
export const isCloseTag = (text) => CLOSE_TAG_REGEX.test(text.trim()); | ||
export const isComment = (text) => COMMENT_REGEX.test(text.trim()); | ||
export const isOpenCloseTag = (text) => OPEN_CLOSE_TAG_REGEX.test(text.trim()); | ||
export const isSelfClosingTag = (text) => SELF_CLOSING_TAG_REGEX.test(text.trim()); | ||
//# sourceMappingURL=regexp.js.map |
@@ -1,2 +0,3 @@ | ||
import { Node, Parent, TraverseOptions } from './types'; | ||
import type { Node, Parent } from 'unist'; | ||
import type { TraverseOptions } from './types'; | ||
export declare class Traverse { | ||
@@ -6,6 +7,5 @@ code: string; | ||
combineLeftJsxNodes(jsxNodes: Node[], parent?: Parent): Node; | ||
combineJsxNodes(nodes: Node[], parent?: Parent): import("unist").Node[]; | ||
combineJsxNodes(nodes: Node[], parent?: Parent): Node[]; | ||
traverse(node: Node, parent?: Parent): void; | ||
} | ||
export declare const traverse: (root: Parent, options: TraverseOptions) => void; | ||
//# sourceMappingURL=traverse.d.ts.map |
@@ -1,18 +0,16 @@ | ||
import { __assign, __spreadArray } from "tslib"; | ||
import { last } from './helper'; | ||
import { last } from './helpers'; | ||
import { parser } from './parser'; | ||
import { isCloseTag, isComment, isOpenCloseTag, isOpenTag, isSelfClosingTag, } from './regexp'; | ||
var Traverse = /** @class */ (function () { | ||
function Traverse(_a) { | ||
var code = _a.code, enter = _a.enter; | ||
export class Traverse { | ||
constructor({ code, enter }) { | ||
this.code = code; | ||
this._enter = enter; | ||
} | ||
Traverse.prototype.combineLeftJsxNodes = function (jsxNodes, parent) { | ||
combineLeftJsxNodes(jsxNodes, parent) { | ||
var _a; | ||
var start = jsxNodes[0].position.start; | ||
var end = __assign({}, last(jsxNodes).position.end); | ||
const start = jsxNodes[0].position.start; | ||
const end = Object.assign({}, last(jsxNodes).position.end); | ||
// fix #279 | ||
if (parent && ((_a = parent.position.indent) === null || _a === void 0 ? void 0 : _a.length) > 0) { | ||
end.offset += parent.position.indent.reduce(function (acc, indent, index) { return acc + (index ? indent + 1 : 0); }, 0); | ||
end.offset += parent.position.indent.reduce((acc, indent, index) => acc + (index ? indent + 1 : 0), 0); | ||
} | ||
@@ -24,18 +22,17 @@ return { | ||
position: { | ||
start: start, | ||
end: end, | ||
start, | ||
end, | ||
}, | ||
}; | ||
}; | ||
} | ||
// fix #7 | ||
Traverse.prototype.combineJsxNodes = function (nodes, parent) { | ||
var _this = this; | ||
var offset = 0; | ||
var hasOpenTag = false; | ||
var jsxNodes = []; | ||
var length = nodes.length; | ||
combineJsxNodes(nodes, parent) { | ||
let offset = 0; | ||
let hasOpenTag = false; | ||
const jsxNodes = []; | ||
const { length } = nodes; | ||
// eslint-disable-next-line sonarjs/cognitive-complexity | ||
return nodes.reduce(function (acc, node, index) { | ||
return nodes.reduce((acc, node, index) => { | ||
if (node.type === 'jsx') { | ||
var value = node.value; | ||
const value = node.value; | ||
if (isOpenTag(value)) { | ||
@@ -64,4 +61,4 @@ offset++; | ||
// fix #138 | ||
var nodes_1 = parser.normalizeJsxNode(node, parent); | ||
jsxNodes.push.apply(jsxNodes, (Array.isArray(nodes_1) ? nodes_1 : [nodes_1])); | ||
const nodes = parser.normalizeJsxNode(node, parent); | ||
jsxNodes.push(...(Array.isArray(nodes) ? nodes : [nodes])); | ||
} | ||
@@ -76,3 +73,3 @@ catch (_a) { | ||
// should never happen, just for robustness | ||
var start = node.position.start; | ||
const { start } = node.position; | ||
throw Object.assign(new SyntaxError('unknown jsx node: ' + JSON.stringify(value)), { | ||
@@ -88,13 +85,13 @@ lineNumber: start.line, | ||
// fix #158 | ||
var firstOpenTagIndex = jsxNodes.findIndex(function (node) { return typeof node.value === 'string' && isOpenTag(node.value); }); | ||
const firstOpenTagIndex = jsxNodes.findIndex(node => typeof node.value === 'string' && isOpenTag(node.value)); | ||
if (firstOpenTagIndex === -1) { | ||
if (hasOpenTag) { | ||
acc.push(_this.combineLeftJsxNodes(jsxNodes, parent)); | ||
acc.push(this.combineLeftJsxNodes(jsxNodes, parent)); | ||
} | ||
else { | ||
acc.push.apply(acc, jsxNodes); | ||
acc.push(...jsxNodes); | ||
} | ||
} | ||
else { | ||
acc.push.apply(acc, __spreadArray(__spreadArray([], jsxNodes.slice(0, firstOpenTagIndex)), [_this.combineLeftJsxNodes(jsxNodes.slice(firstOpenTagIndex), parent)])); | ||
acc.push(...jsxNodes.slice(0, firstOpenTagIndex), this.combineLeftJsxNodes(jsxNodes.slice(firstOpenTagIndex), parent)); | ||
} | ||
@@ -112,8 +109,8 @@ jsxNodes.length = 0; | ||
if (index === length - 1 && jsxNodes.length > 0) { | ||
acc.push(_this.combineLeftJsxNodes(jsxNodes, parent)); | ||
acc.push(this.combineLeftJsxNodes(jsxNodes, parent)); | ||
} | ||
return acc; | ||
}, []); | ||
}; | ||
Traverse.prototype.traverse = function (node, parent) { | ||
} | ||
traverse(node, parent) { | ||
/* istanbul ignore if */ | ||
@@ -124,19 +121,14 @@ if (!node) { | ||
} | ||
var children = node.children; | ||
let children = node.children; | ||
if (children) { | ||
var parent_1 = node; | ||
children = node.children = this.combineJsxNodes(children, parent_1); | ||
for (var _i = 0, children_1 = children; _i < children_1.length; _i++) { | ||
var child = children_1[_i]; | ||
this.traverse(child, parent_1); | ||
const parent = node; | ||
children = node.children = this.combineJsxNodes(children, parent); | ||
for (const child of children) { | ||
this.traverse(child, parent); | ||
} | ||
} | ||
this._enter(node, parent); | ||
}; | ||
return Traverse; | ||
}()); | ||
export { Traverse }; | ||
export var traverse = function (root, options) { | ||
return new Traverse(options).traverse(root); | ||
}; | ||
} | ||
} | ||
export const traverse = (root, options) => new Traverse(options).traverse(root); | ||
//# sourceMappingURL=traverse.js.map |
@@ -1,12 +0,7 @@ | ||
import { AST, Linter } from 'eslint'; | ||
export declare type JSXElement = import('@babel/types').JSXElement; | ||
export declare type JSXFragment = import('@babel/types').JSXFragment; | ||
export declare type Node = import('unist').Node; | ||
export declare type Parent = import('unist').Parent; | ||
export declare type Point = import('unist').Point; | ||
import type { JSXElement, JSXFragment } from '@babel/types'; | ||
import type { AST, Linter } from 'eslint'; | ||
import type { Node, Parent, Point } from 'unist'; | ||
export declare type JsxNode = (JSXElement | JSXFragment) & { | ||
range: [number, number]; | ||
}; | ||
export declare type JsxTypes = Readonly<[JSXElement['type'], JSXFragment['type']]>; | ||
export declare type JsxType = JsxTypes[number]; | ||
export declare type Arrayable<T> = T[] | readonly T[]; | ||
@@ -47,2 +42,1 @@ export declare type ParserFn = (code: string, options: Linter.ParserOptions) => AST.Program | Linter.ESLintParseResult; | ||
} | ||
//# sourceMappingURL=types.d.ts.map |
{ | ||
"name": "eslint-mdx", | ||
"version": "1.9.1", | ||
"version": "1.10.0", | ||
"description": "ESLint Parser for MDX", | ||
@@ -36,3 +36,2 @@ "repository": "git+https://github.com/mdx-js/eslint-mdx.git", | ||
"dependencies": { | ||
"espree": "^7.3.1", | ||
"remark-mdx": "^1.6.22", | ||
@@ -43,3 +42,3 @@ "remark-parse": "^8.0.3", | ||
}, | ||
"gitHead": "171488e03fd6fd5942ce3dafdbec68de07b96481" | ||
"gitHead": "d8bf426e39a42f935dee25ee7df9e5eb850912aa" | ||
} |
@@ -25,3 +25,4 @@ <p align="center"> | ||
> [ESLint][] Parser/Plugin for [MDX][], helps you lint all ES syntaxes excluding `code` block of course. | ||
> [ESLint][] Parser/Plugin for [MDX][], helps you lint all ES syntaxes. | ||
> Linting `code` blocks can be enabled with `mdx/code-blocks` setting too! | ||
> Work perfectly with `eslint-plugin-import`, `eslint-plugin-prettier` or any other eslint plugins. | ||
@@ -77,5 +78,9 @@ > And also can be integrated with [remark-lint][] plugins to lint markdown syntaxes. | ||
```json | ||
```jsonc | ||
{ | ||
"extends": ["plugin:mdx/recommended"] | ||
"extends": ["plugin:mdx/recommended"], | ||
// optional, if you want to lint code blocks at the same time | ||
"settings": { | ||
"mdx/code-blocks": true | ||
} | ||
} | ||
@@ -89,2 +94,6 @@ ``` | ||
"extends": ["plugin:mdx/recommended"], | ||
// optional, if you want to lint code blocks at the same time | ||
"settings": { | ||
"mdx/code-blocks": true | ||
}, | ||
"overrides": [ | ||
@@ -106,2 +115,6 @@ { | ||
"extends": ["plugin:mdx/overrides"] | ||
}, | ||
{ | ||
"files": "**/*.{md,mdx}/**", | ||
"extends": "plugin:mdx/code-blocks" | ||
} | ||
@@ -119,2 +132,6 @@ ] | ||
extends: ['plugin:mdx/recommended'], | ||
// optional, if you want to lint code blocks at the same time | ||
settings: { | ||
'mdx/code-blocks': true, | ||
}, | ||
overrides: [ | ||
@@ -133,8 +150,10 @@ { | ||
}, | ||
Object.assign( | ||
{ | ||
files: ['*.mdx'], | ||
}, | ||
configs.overrides, | ||
), | ||
{ | ||
files: ['*.mdx'], | ||
...configs.overrides, | ||
}, | ||
{ | ||
files: '**/*.{md,mdx}/**', | ||
...configs.codeBlocks, | ||
}, | ||
], | ||
@@ -144,6 +163,6 @@ } | ||
2. Make sure ESLint knows to run on `.mdx` files: | ||
2. Make sure ESLint knows to run on `.md` or `.mdx` files: | ||
```sh | ||
eslint . --ext js,mdx | ||
eslint . --ext js,md,mdx | ||
``` | ||
@@ -153,3 +172,3 @@ | ||
1. `parser` (`string | ParserConfig | ParserFn`): Custom parser for ES syntax is supported, although `@typescript-eslint/parser` or `babel-eslint` will be detected automatically what means you actually do not need to do this: | ||
1. `parser` (`string | ParserConfig | ParserFn`): Custom parser for ES syntax is supported, although `@typescript-eslint/parser` or `@babel/eslint-parser` or `babel-eslint` will be detected automatically what means you actually do not need to do this: | ||
@@ -177,7 +196,7 @@ ```json | ||
Inline JSX like `Inline <Component />` is supported by [MDX][], but rule `react/no-unescaped-entities` from [eslint-plugin-react][] is incompatible with it, `mdx/no-unescaped-entities` is the replacement. | ||
Inline JSX like `Inline <Component />` is supported by [MDX][], but rule `react/no-unescaped-entities` from [eslint-plugin-react][] is incompatible with it, `mdx/no-unescaped-entities` is the replacement, so make sure that you've turned off the original `no-unescaped-entities` rule. | ||
### mdx/no-unused-expressions | ||
[MDX][] can render `jsx` block automatically without exporting them, but [ESLint][] will report `no-unused-expressions` issue which could be unexpected, this rule is a replacement of it, so make sure that you've turned off the original `no-unused-expressions` rule. | ||
[MDX][] can render `jsx` block automatically without exporting them, but [ESLint][] will report `no-unused-expressions` issue which could be unexpected, this rule is the replacement, so make sure that you've turned off the original `no-unused-expressions` rule. | ||
@@ -190,2 +209,19 @@ ### mdx/remark | ||
If you want to disable or change severity of some related rules, it won't work by setting rules in eslint config like `'remark-lint-no-duplicate-headings': 0`, you should change your remark config instead like following: | ||
```jsonc | ||
{ | ||
"plugins": [ | ||
"@1stg/remark-config", | ||
// change to error severity, notice `[]` is required | ||
["lint-no-duplicate-headings", [2]], | ||
// disable following plugin | ||
[ | ||
"lint-no-multiple-toplevel-headings", | ||
[0] // or false | ||
] | ||
] | ||
} | ||
``` | ||
## Prettier Integration | ||
@@ -192,0 +228,0 @@ |
@@ -1,75 +0,5 @@ | ||
declare module 'espree' { | ||
import * as estree from 'estree' | ||
// The version of espree that's loaded, like "v3.4.0". | ||
export const version: string | ||
// Parse the given text as javascript into an abstract syntax tree. | ||
export function parse(text: string, opts?: Options): estree.Program | ||
// Walk the given text and produce an array of tokens. | ||
export function tokenize(text: string, opts?: Options): Token[] | ||
interface Token { | ||
type: string | ||
value: string | ||
start: number | ||
end: number | ||
} | ||
// A map from node type to the properties on that type that contain more nodes. | ||
export const VisitorKeys: { [kind: string]: string[] } | ||
const node: estree.Node | ||
// A map of node types to themselves. | ||
export const Syntax: { [type: string]: typeof node.type } | ||
// Options for parsing. | ||
interface Options { | ||
// attach range information to each node | ||
range?: boolean | ||
// attach line/column location information to each node | ||
loc?: boolean | ||
// create a top-level comments array containing all comments | ||
comment?: boolean | ||
// attach comments to the closest relevant node as leadingComments and | ||
// trailingComments | ||
attachComment?: boolean | ||
// create a top-level tokens array containing all tokens | ||
tokens?: true | ||
// set to 3, 5 (default), 6, 7, or 8 to specify the version of ECMAScript | ||
// syntax you want to use. | ||
// You can also set to 2015 (same as 6), 2016 (same as 7), or 2017 (same as 8) | ||
// to use the year-based naming. | ||
ecmaVersion?: number | ||
// specify which type of script you're parsing (script or module, default is script) | ||
sourceType?: 'script' | 'module' | ||
// specify additional language features | ||
ecmaFeatures?: { | ||
// enable JSX parsing | ||
jsx?: boolean | ||
// enable return in global scope | ||
globalReturn?: boolean | ||
// enable implied strict mode (if ecmaVersion >= 5) | ||
impliedStrict?: boolean | ||
// allow experimental object rest/spread | ||
experimentalObjectRestSpread?: boolean | ||
} | ||
} | ||
} | ||
declare module 'remark-mdx' { | ||
import * as unified from 'unified' | ||
import type * as unified from 'unified' | ||
const mdx: unified.Attacher | ||
export = mdx | ||
} |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Dynamic require
Supply chain riskDynamic require can indicate the package is performing dangerous or unsafe dynamic code execution.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Dynamic require
Supply chain riskDynamic require can indicate the package is performing dangerous or unsafe dynamic code execution.
Found 1 instance in 1 package
5
253
166153
29
2356
- Removedespree@^7.3.1
- Removedacorn@7.4.1(transitive)
- Removedeslint-visitor-keys@1.3.0(transitive)
- Removedespree@7.3.1(transitive)