44 * @typedef {import('mdast').HTML } HTML
55 * @typedef {import('mdast-util-mdx-expression').MDXFlowExpression } MDXFlowExpression
66 * @typedef {import('mdast-util-mdx-expression').MDXTextExpression } MDXTextExpression
7- * @typedef { Root|Content } Node
8- *
9- * @typedef { string|number|boolean } MarkerParameterValue
10- * @typedef {Record<string, MarkerParameterValue> } MarkerParameters
7+ */
8+
9+ /**
10+ * @typedef {Root | Content } Node
1111 *
1212 * @typedef Mdx1CommentNode
1313 * @property {'comment' } type
1414 * @property {string } value
1515 *
16+ * @typedef {string | number | boolean } MarkerParameterValue
17+ * Value.
18+ *
19+ * If it looks like a number (to JavaScript), it’s cast as number.
20+ * The strings `true` and `false` are turned into their corresponding
21+ * booleans.
22+ * The empty string is also considered the `true` boolean.
23+ * @typedef {Record<string, MarkerParameterValue> } MarkerParameters
24+ * Parameters.
25+ *
1626 * @typedef Marker
1727 * Comment marker.
1828 * @property {string } name
1929 * Name of marker.
2030 * @property {string } attributes
2131 * Value after name.
22- * @property {MarkerParameters| null } parameters
32+ * @property {MarkerParameters | null } parameters
2333 * Parsed attributes, with decimal numbers, `true`, and `false` are casted to
2434 * numbers and booleans.
25- * @property {HTML| Mdx1CommentNode| MDXFlowExpression| MDXTextExpression } node
35+ * @property {HTML | Mdx1CommentNode | MDXFlowExpression | MDXTextExpression } node
2636 * Reference to given node.
2737 */
2838
@@ -34,12 +44,13 @@ const markerExpression = new RegExp(
3444 '(\\s*<!--' + commentExpression . source + '-->\\s*)'
3545)
3646
47+ // To do: next major: replace `null` with `undefined` in API output.
3748/**
3849 * Parse a comment marker.
3950 *
4051 * @param {unknown } value
4152 * `Node` to parse.
42- * @returns {Marker| null }
53+ * @returns {Marker | null }
4354 * Information, when applicable.
4455 */
4556export function commentMarker ( value ) {
@@ -52,7 +63,7 @@ export function commentMarker(value) {
5263 value . type === 'mdxTextExpression' )
5364 ) {
5465 let offset = 2
55- /** @type {RegExpMatchArray| null| undefined } */
66+ /** @type {RegExpMatchArray | null | undefined } */
5667 let match
5768
5869 // @ts -expect-error: MDX@1
@@ -87,10 +98,12 @@ export function commentMarker(value) {
8798}
8899
89100/**
90- * Parse `value` into an object .
101+ * Parse a string of “attributes” .
91102 *
92103 * @param {string } value
93- * @returns {MarkerParameters|null }
104+ * Attributes.
105+ * @returns {MarkerParameters | null }
106+ * Parameters.
94107 */
95108function parseParameters ( value ) {
96109 /** @type {MarkerParameters } */
@@ -111,18 +124,20 @@ function parseParameters(value) {
111124 * @param {string } $2
112125 * @param {string } $3
113126 * @param {string } $4
127+ * @returns {string }
114128 */
115129 // eslint-disable-next-line max-params
116130 function replacer ( _ , $1 , $2 , $3 , $4 ) {
117131 /** @type {MarkerParameterValue } */
118132 let value = $2 || $3 || $4 || ''
133+ const number = Number ( value )
119134
120135 if ( value === 'true' || value === '' ) {
121136 value = true
122137 } else if ( value === 'false' ) {
123138 value = false
124- } else if ( ! Number . isNaN ( Number ( value ) ) ) {
125- value = Number ( value )
139+ } else if ( ! Number . isNaN ( number ) ) {
140+ value = number
126141 }
127142
128143 parameters [ $1 ] = value
@@ -132,8 +147,12 @@ function parseParameters(value) {
132147}
133148
134149/**
150+ * Check if something looks like a node.
151+ *
135152 * @param {unknown } value
153+ * Thing.
136154 * @returns {value is Node }
155+ * It’s a node!
137156 */
138157function isNode ( value ) {
139158 return Boolean ( value && typeof value === 'object' && 'type' in value )
0 commit comments