Skip to content

Commit 489b664

Browse files
committed
Fix to improve return type
1 parent 7f21c4b commit 489b664

File tree

3 files changed

+21
-20
lines changed

3 files changed

+21
-20
lines changed

index.js

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,29 @@
11
/**
22
* @typedef {import('unist').Node} Node
3-
* @typedef {Node & {position: undefined}} NodeWithUndefinedPosition
4-
* @typedef {Omit<Node, 'position'>} NodeWithoutPosition
53
*/
64

75
import {visit} from 'unist-util-visit'
86

7+
/**
8+
* Utility to remove positions from a tree
9+
*
10+
* @param node The unist tree
11+
* @param force if `force` is given, uses `delete`, otherwise, sets positions to `undefined`.
12+
* @returns The same node, but either with `position: undefined` or w/o `position` fields
13+
*/
914
export const removePosition =
1015
/**
1116
* @type {(
12-
* ((tree: Node, force?: false) => NodeWithUndefinedPosition) &
13-
* ((tree: Node, force: true) => NodeWithoutPosition)
17+
* (<Tree extends Node>(tree: Tree, force?: false) => Tree) &
18+
* (<Tree extends Node>(tree: Tree, force: true) => Tree)
1419
* )}
1520
*/
1621
(
1722
/**
18-
* Utility to remove positions from a tree
19-
*
20-
* @param {Node} node the unist tree
21-
* @param {boolean} [force=false] if `force` is given, uses `delete`, otherwise, sets positions to `undefined`.
22-
* @returns {NodeWithUndefinedPosition}
23+
* @template {Node} Tree
24+
* @param {Tree} node
25+
* @param {boolean} [force=false]
26+
* @returns {Tree}
2327
*/
2428
function (node, force) {
2529
visit(node, remove)

index.test-d.ts

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,15 @@
11
import {expectType} from 'tsd'
22
import {Node} from 'unist'
3+
import {Root} from 'mdast'
34
import remark from 'remark'
4-
import {
5-
removePosition,
6-
NodeWithUndefinedPosition,
7-
NodeWithoutPosition
8-
} from './index.js'
5+
import {removePosition} from './index.js'
96

10-
const tree: Node = remark().parse(
11-
'Some _emphasis_, **importance**, and `code`.'
12-
)
7+
const tree: Root = {type: 'root', children: []}
138

14-
expectType<NodeWithUndefinedPosition>(removePosition(tree))
15-
expectType<NodeWithUndefinedPosition>(removePosition(tree, false))
16-
expectType<NodeWithoutPosition>(removePosition(tree, true))
9+
expectType<Root>(removePosition(tree))
10+
expectType<Root>(removePosition(tree, false))
11+
expectType<Root>(removePosition(tree, true))
12+
expectType<Root>(removePosition(tree, true))
1713

1814
// Used as a plugin
1915
void remark()

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
"unist-util-visit": "^4.0.0"
3939
},
4040
"devDependencies": {
41+
"@types/mdast": "^3.0.0",
4142
"@types/tape": "^4.0.0",
4243
"c8": "^7.0.0",
4344
"prettier": "^2.0.0",

0 commit comments

Comments
 (0)