Skip to content

Commit 474f9af

Browse files
committed
Add JSDoc based types
1 parent 3e9774c commit 474f9af

File tree

5 files changed

+71
-55
lines changed

5 files changed

+71
-55
lines changed

Diff for: .gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
coverage/
22
node_modules/
33
.DS_Store
4+
*.d.ts
45
*.log
56
yarn.lock

Diff for: index.js

+30-44
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,38 @@
1-
import gfmAutolinkLiteralFromMarkdown from 'mdast-util-gfm-autolink-literal/from-markdown.js'
2-
import gfmAutolinkLiteralToMarkdown from 'mdast-util-gfm-autolink-literal/to-markdown.js'
3-
import gfmStrikethroughFromMarkdown from 'mdast-util-gfm-strikethrough/from-markdown.js'
4-
import gfmStrikethroughToMarkdown from 'mdast-util-gfm-strikethrough/to-markdown.js'
5-
import gfmTableFromMarkdown from 'mdast-util-gfm-table/from-markdown.js'
6-
import gfmTableToMarkdown from 'mdast-util-gfm-table/to-markdown.js'
7-
import gfmTaskListItemFromMarkdown from 'mdast-util-gfm-task-list-item/from-markdown.js'
8-
import gfmTaskListItemToMarkdown from 'mdast-util-gfm-task-list-item/to-markdown.js'
9-
10-
const own = {}.hasOwnProperty
11-
12-
export const gfmFromMarkdown = configure([
1+
/**
2+
* @typedef {import('mdast-util-from-markdown').Extension} FromMarkdownExtension
3+
* @typedef {import('mdast-util-to-markdown').Options} ToMarkdownExtension
4+
*
5+
* @typedef {import('mdast-util-gfm-table').Options} Options
6+
*/
7+
8+
import {
9+
gfmAutolinkLiteralFromMarkdown,
10+
gfmAutolinkLiteralToMarkdown
11+
} from 'mdast-util-gfm-autolink-literal'
12+
import {
13+
gfmStrikethroughFromMarkdown,
14+
gfmStrikethroughToMarkdown
15+
} from 'mdast-util-gfm-strikethrough'
16+
import {gfmTableFromMarkdown, gfmTableToMarkdown} from 'mdast-util-gfm-table'
17+
import {
18+
gfmTaskListItemFromMarkdown,
19+
gfmTaskListItemToMarkdown
20+
} from 'mdast-util-gfm-task-list-item'
21+
22+
/**
23+
* @type {Array.<FromMarkdownExtension>}
24+
*/
25+
export const gfmFromMarkdown = [
1326
gfmAutolinkLiteralFromMarkdown,
1427
gfmStrikethroughFromMarkdown,
1528
gfmTableFromMarkdown,
1629
gfmTaskListItemFromMarkdown
17-
])
30+
]
1831

32+
/**
33+
* @param {Options} [options]
34+
* @returns {ToMarkdownExtension}
35+
*/
1936
export function gfmToMarkdown(options) {
2037
return {
2138
extensions: [
@@ -26,34 +43,3 @@ export function gfmToMarkdown(options) {
2643
]
2744
}
2845
}
29-
30-
function configure(extensions) {
31-
const config = {transforms: [], canContainEols: []}
32-
const length = extensions.length
33-
let index = -1
34-
35-
while (++index < length) {
36-
extension(config, extensions[index])
37-
}
38-
39-
return config
40-
}
41-
42-
function extension(config, extension) {
43-
let key
44-
let left
45-
let right
46-
47-
for (key in extension) {
48-
if (own.call(extension, key)) {
49-
left = own.call(config, key) ? config[key] : (config[key] = {})
50-
right = extension[key]
51-
52-
if (key === 'canContainEols' || key === 'transforms') {
53-
config[key] = [].concat(left, right)
54-
} else {
55-
Object.assign(left, right)
56-
}
57-
}
58-
}
59-
}

Diff for: package.json

+21-8
Original file line numberDiff line numberDiff line change
@@ -33,36 +33,43 @@
3333
"sideEffects": false,
3434
"type": "module",
3535
"main": "index.js",
36+
"types": "index.d.ts",
3637
"files": [
38+
"index.d.ts",
3739
"index.js"
3840
],
3941
"dependencies": {
40-
"mdast-util-gfm-autolink-literal": "^0.1.0",
41-
"mdast-util-gfm-strikethrough": "^0.2.0",
42-
"mdast-util-gfm-table": "^0.1.0",
43-
"mdast-util-gfm-task-list-item": "^0.1.0",
44-
"mdast-util-to-markdown": "^0.6.1"
42+
"mdast-util-gfm-autolink-literal": "^1.0.0",
43+
"mdast-util-gfm-strikethrough": "^1.0.0",
44+
"mdast-util-gfm-table": "^1.0.0",
45+
"mdast-util-gfm-task-list-item": "^1.0.0"
4546
},
4647
"devDependencies": {
48+
"@types/tape": "^4.0.0",
4749
"c8": "^7.0.0",
4850
"github-slugger": "^1.0.0",
4951
"hast-util-to-html": "^8.0.0",
50-
"mdast-util-from-markdown": "^0.8.0",
52+
"mdast-util-from-markdown": "^1.0.0",
5153
"mdast-util-to-hast": "^11.0.0",
52-
"micromark-extension-gfm": "^0.3.0",
54+
"mdast-util-to-markdown": "^1.0.0",
55+
"micromark-extension-gfm": "^1.0.0",
5356
"node-fetch": "^2.0.0",
5457
"prettier": "^2.0.0",
5558
"remark-cli": "^9.0.0",
5659
"remark-preset-wooorm": "^8.0.0",
60+
"rimraf": "^3.0.0",
5761
"tape": "^5.0.0",
62+
"type-coverage": "^2.0.0",
63+
"typescript": "^4.0.0",
5864
"xo": "^0.39.0"
5965
},
6066
"scripts": {
67+
"build": "rimraf \"*.d.ts\" && tsc && type-coverage",
6168
"format": "remark . -qfo && prettier . -w --loglevel warn && xo --fix",
6269
"crawl": "node script/crawl-tests",
6370
"test-api": "node --conditions development test/index.js",
6471
"test-coverage": "c8 --check-coverage --branches 100 --functions 100 --lines 100 --statements 100 --reporter lcov node --conditions development test/index.js",
65-
"test": "npm run format && npm run test-coverage"
72+
"test": "npm run build && npm run format && npm run test-coverage"
6673
},
6774
"prettier": {
6875
"tabWidth": 2,
@@ -79,5 +86,11 @@
7986
"plugins": [
8087
"preset-wooorm"
8188
]
89+
},
90+
"typeCoverage": {
91+
"atLeast": 100,
92+
"detail": true,
93+
"strict": true,
94+
"ignoreCatch": true
8295
}
8396
}

Diff for: test/index.js

+3-3
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@ import test from 'tape'
44
import Slugger from 'github-slugger'
55
import {toHast} from 'mdast-util-to-hast'
66
import {toHtml} from 'hast-util-to-html'
7-
import fromMarkdown from 'mdast-util-from-markdown'
8-
import toMarkdown from 'mdast-util-to-markdown'
9-
import gfm from 'micromark-extension-gfm'
7+
import {fromMarkdown} from 'mdast-util-from-markdown'
8+
import {toMarkdown} from 'mdast-util-to-markdown'
9+
import {gfm} from 'micromark-extension-gfm'
1010
import {gfmFromMarkdown, gfmToMarkdown} from '../index.js'
1111

1212
const spec = JSON.parse(fs.readFileSync(path.join('test', 'spec.json')))

Diff for: tsconfig.json

+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
{
2+
"include": ["*.js"],
3+
"compilerOptions": {
4+
"target": "ES2020",
5+
"lib": ["ES2020"],
6+
"module": "ES2020",
7+
"moduleResolution": "node",
8+
"allowJs": true,
9+
"checkJs": true,
10+
"declaration": true,
11+
"emitDeclarationOnly": true,
12+
"allowSyntheticDefaultImports": true,
13+
"skipLibCheck": true,
14+
"strict": true
15+
}
16+
}

0 commit comments

Comments
 (0)