diff --git a/complex-types.d.ts b/complex-types.d.ts index 33e815e..0877550 100644 --- a/complex-types.d.ts +++ b/complex-types.d.ts @@ -1,14 +1,14 @@ import {Literal} from 'mdast' import {Program} from 'estree-jsx' -export interface MDXFlowExpression extends Literal { +export interface MdxFlowExpression extends Literal { type: 'mdxFlowExpression' data?: { estree?: Program } & Literal['data'] } -export interface MDXTextExpression extends Literal { +export interface MdxTextExpression extends Literal { type: 'mdxTextExpression' data?: { estree?: Program @@ -17,10 +17,22 @@ export interface MDXTextExpression extends Literal { declare module 'mdast' { interface StaticPhrasingContentMap { - mdxTextExpression: MDXTextExpression + mdxTextExpression: MdxTextExpression } interface BlockContentMap { - mdxFlowExpression: MDXFlowExpression + mdxFlowExpression: MdxFlowExpression + } +} + +declare module 'hast' { + interface RootContentMap { + mdxTextExpression: MdxTextExpression + mdxFlowExpression: MdxFlowExpression + } + + interface ElementContentMap { + mdxFlowExpression: MdxFlowExpression + mdxFlowExpression: MdxFlowExpression } } diff --git a/index.js b/index.js index 93517c9..b7c25b0 100644 --- a/index.js +++ b/index.js @@ -4,8 +4,13 @@ * @typedef {import('mdast-util-to-markdown').Options} ToMarkdownExtension * @typedef {import('mdast-util-to-markdown').Handle} ToMarkdownHandle * @typedef {import('estree-jsx').Program} Program - * @typedef {import('./complex-types').MDXFlowExpression} MDXFlowExpression - * @typedef {import('./complex-types').MDXTextExpression} MDXTextExpression + * @typedef {import('./complex-types').MdxFlowExpression} MdxFlowExpression + * @typedef {import('./complex-types').MdxTextExpression} MdxTextExpression + */ + +/** + * @typedef {MdxFlowExpression} MDXFlowExpression + * @typedef {MdxTextExpression} MDXTextExpression */ /** @type {FromMarkdownExtension} */ diff --git a/package.json b/package.json index ca102eb..bc95a58 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "mdast-util-mdx-expression", - "version": "1.1.1", + "version": "1.2.0", "description": "mdast extension to parse and serialize MDX (or MDX.js) expressions", "license": "MIT", "keywords": [ @@ -36,15 +36,17 @@ "index.js" ], "dependencies": { - "@types/estree-jsx": "^0.0.1" + "@types/estree-jsx": "^0.0.1", + "@types/hast": "^2.0.0", + "@types/mdast": "^3.0.0", + "mdast-util-from-markdown": "^1.0.0", + "mdast-util-to-markdown": "^1.0.0" }, "devDependencies": { "@types/acorn": "^4.0.0", "@types/tape": "^4.0.0", "acorn": "^8.0.0", "c8": "^7.0.0", - "mdast-util-from-markdown": "^1.0.0", - "mdast-util-to-markdown": "^1.0.0", "micromark-extension-mdx-expression": "^1.0.0", "prettier": "^2.0.0", "remark-cli": "^10.0.0", @@ -54,7 +56,7 @@ "type-coverage": "^2.0.0", "typescript": "^4.0.0", "unist-util-remove-position": "^4.0.0", - "xo": "^0.44.0" + "xo": "^0.47.0" }, "scripts": { "build": "rimraf \"{index,test}.d.ts\" && tsc && type-coverage", diff --git a/test.js b/test.js index 97237eb..69e6834 100644 --- a/test.js +++ b/test.js @@ -471,3 +471,43 @@ test('mdast -> markdown', (t) => { t.end() }) + +test('markdown -> mdast -> markdown', (t) => { + t.deepEqual( + toMarkdown( + fromMarkdown(' {`\n a\n `}', { + extensions: [mdxExpression()], + mdastExtensions: [mdxExpressionFromMarkdown] + }), + {extensions: [mdxExpressionToMarkdown]} + ), + '{`\na\n`}\n', + 'should strip superfluous whitespace as much as the opening prefix, or less, when roundtripping expressions (flow)' + ) + + t.deepEqual( + toMarkdown( + fromMarkdown(' {`\n a\n `}', { + extensions: [mdxExpression()], + mdastExtensions: [mdxExpressionFromMarkdown] + }), + {extensions: [mdxExpressionToMarkdown]} + ), + '{`\n a\n`}\n', + 'should strip superfluous whitespace (but not more) when roundtripping expressions (flow)' + ) + + t.deepEqual( + toMarkdown( + fromMarkdown('a {`\n b\n `} c', { + extensions: [mdxExpression()], + mdastExtensions: [mdxExpressionFromMarkdown] + }), + {extensions: [mdxExpressionToMarkdown]} + ), + 'a {`\n b\n `} c\n', + 'should not strip consecutive lines in expressions (text)' + ) + + t.end() +})