* feat(markdown): inital implementation
* feat(markdown): support strong
* fix: add missing default value
* feat(markdown): support inlineCode
* feat: support delete
* feat: support link
* feat: support image
* feat: support blockquote
* feat: support heading
* feat: support code
* feat: support yaml
* feat: support html
* feat: support list
* feat: support thematicBreak
* feat: support table
* feat: support linkReference
* feat: support imageReference
* feat: support definition
* feat: support footnote
* feat: support footnoteReference
* feat: support footnoteDefinition
* test(cli): update snapshots
* refactor: extract SINGLE_LINE_NODE_TYPES
* refactor: printChildren
* fix: correct newlines
* test: add trailing newline
* fix: blockquote formatting
* fix: node types
* fix: break line correctly
* fix: remove unnecessary properties to make AST_COMPARE happy
* fix: escape `|` in tableCell content
* fix: unexpected line break
* fix: ast difference from loose list
* fix: html break lines
* refactor: fix linting
* fix: normalize ast
* fix: escape specific chars
* test: add more tests
* fix: build markdown parser
* chore: remove unnecessary *.log
* fix: escape html entity
* feat: support prettier-ignore
* fix: line break for non-loose listItem
* feat: support formatting `code` based on `lang`
* fix: add `jsx` and `tsx`
* fix: use multiparser
* refactor: fix linting
* test: update test case 😉
* feat: switch to `_` style emphasis
* fix: sequence list should use different prefix
* test: add tests
* fix: do not print additional new line after `prettier-ignore`
* fix(list): enforce `1.` to avoid unnecessary git diff
* feat: enable `commonmark` option
* feat: support `break`
* fix: escape backslash
* refactor: escape html entity using backslash
* fix: respect autolink-style link
* feat: support md`...` and markdown`...`
* docs: replace ands with commas
* fix: respect indented code block
* fix: respect html entity
* docs: add docs for modified MDAST
* fix: inlineCode is breakline-able
* feat: support backtick in inlineCode
* feat: support a-lot-of-backtick in fenced code block
* feat: use `~~~`-style code block in js template
* fix: respect escaped chars
* fix: use `*`-style emphasis for invalid `_`-style output
* test: add test cases
* fix: use `- - -`-style thematicBreak to avoid conflict with yaml
* fix: remain the same content for linkReference identifier
* fix: `inlineCode` gap can be a line break
* fix: `html` should not print trailing spaces if it's in root
* refactor: fix typo
* fix: wrap `definition`'s url if there's whitespace
* fix: remove unnecessary whitespace at the end of paragraph
* fix: fix: remove unnecessary whitespace at the start of paragraph
* fix: setence children length is possible 0
* fix: support continuous ordered list
* fix: do not print addtional hardline after loose list
* fix: use double-backtick style for single-backtick value in inlineCode
* fix: support nested emphasis
* fix: support space-url in link/image
* fix: escape `)` in link/image url
* fix: support single-quote in link/image/definition title
* fix: respect alt in image/imageReference
* fix: use `*`-style thematicBreak in list
* fix: loose/tight list linebreaks
* fix: print third linebreak before indented code block with a tight list in the previous
* test: move bug cases
* fix: remove unnecessary linebreaks
* refactor: fix typo
81 lines
1.8 KiB
JavaScript
81 lines
1.8 KiB
JavaScript
"use strict";
|
|
|
|
const path = require("path");
|
|
const ConfigError = require("./errors").ConfigError;
|
|
|
|
const parsers = {
|
|
get flow() {
|
|
return eval("require")("./parser-flow");
|
|
},
|
|
get graphql() {
|
|
return eval("require")("./parser-graphql");
|
|
},
|
|
get parse5() {
|
|
return eval("require")("./parser-parse5");
|
|
},
|
|
get babylon() {
|
|
return eval("require")("./parser-babylon");
|
|
},
|
|
get typescript() {
|
|
return eval("require")("./parser-typescript");
|
|
},
|
|
get css() {
|
|
return eval("require")("./parser-postcss");
|
|
},
|
|
get less() {
|
|
return eval("require")("./parser-postcss");
|
|
},
|
|
get scss() {
|
|
return eval("require")("./parser-postcss");
|
|
},
|
|
get json() {
|
|
return eval("require")("./parser-babylon");
|
|
},
|
|
get markdown() {
|
|
return eval("require")("./parser-markdown");
|
|
}
|
|
};
|
|
|
|
function resolveParseFunction(opts) {
|
|
if (typeof opts.parser === "function") {
|
|
return opts.parser;
|
|
}
|
|
if (typeof opts.parser === "string") {
|
|
if (parsers.hasOwnProperty(opts.parser)) {
|
|
return parsers[opts.parser];
|
|
}
|
|
try {
|
|
return eval("require")(path.resolve(process.cwd(), opts.parser));
|
|
} catch (err) {
|
|
/* istanbul ignore next */
|
|
throw new ConfigError(`Couldn't resolve parser "${opts.parser}"`);
|
|
}
|
|
}
|
|
/* istanbul ignore next */
|
|
return parsers.babylon;
|
|
}
|
|
|
|
function parse(text, opts) {
|
|
const parseFunction = resolveParseFunction(opts);
|
|
|
|
try {
|
|
return parseFunction(text, parsers, opts);
|
|
} catch (error) {
|
|
const loc = error.loc;
|
|
|
|
if (loc) {
|
|
const codeFrame = require("babel-code-frame");
|
|
error.codeFrame = codeFrame.codeFrameColumns(text, loc, {
|
|
highlightCode: true
|
|
});
|
|
error.message += "\n" + error.codeFrame;
|
|
throw error;
|
|
}
|
|
|
|
/* istanbul ignore next */
|
|
throw error.stack;
|
|
}
|
|
}
|
|
|
|
module.exports = { parse };
|