@@ -40,7 +40,8 @@ tokens using [micromark][micromark], and turned into nodes using [mdast-util-fro
40
40
This package is [ ESM only] [ esm ] .
41
41
42
42
``` sh
43
- yarn add @flex-development/docast-util-from-docs @flex-development/docast @types/mdast @types/unist
43
+ yarn add @flex-development/docast-util-from-docs
44
+ yarn add -D @flex-development/docast @types/mdast @types/unist micromark-util-types
44
45
```
45
46
46
47
From Git:
@@ -58,7 +59,243 @@ yarn add @flex-development/docast-util-from-docs@flex-development/docast-util-fr
58
59
59
60
## Use
60
61
61
- ** TODO** : use
62
+ Say we have the following TypeScript file ` fibonacci-sequence.ts ` :
63
+
64
+ ```` ts
65
+ /**
66
+ * @file FibonacciSequence
67
+ * @module FibonacciSequence
68
+ * @see https://codewars.com/kata/55695bc4f75bbaea5100016b
69
+ */
70
+
71
+ /**
72
+ * Fibonacci sequence iterator.
73
+ *
74
+ * :::info
75
+ * A fibonacci sequence starts with two `1`s. Every element afterwards is the
76
+ * sum of the two previous elements:
77
+ * ```txt
78
+ * 1, 1, 2, 3, 5, 8, 13, ..., 89, 144, 233, 377, ...
79
+ * ```
80
+ * :::
81
+ *
82
+ * @implements {Iterator<number, number>}
83
+ */
84
+ class FibonacciSequence implements Iterator <number , number > {
85
+ /**
86
+ * First managed sequence value.
87
+ *
88
+ * @public
89
+ * @instance
90
+ * @member {number} fib1
91
+ */
92
+ public fib1: number
93
+
94
+ /**
95
+ * Second managed sequence value.
96
+ *
97
+ * @public
98
+ * @instance
99
+ * @member {number} fib2
100
+ */
101
+ public fib2: number
102
+
103
+ /**
104
+ * Max sequence value.
105
+ *
106
+ * @private
107
+ * @instance
108
+ * @member {number} max
109
+ */
110
+ readonly #max: number
111
+
112
+ /**
113
+ * Create a new fibonacci sequence iterator.
114
+ *
115
+ * @param {number} [max= Number.MAX_SAFE_INTEGER ] - Max sequence value
116
+ */
117
+ constructor (max : number = Number .MAX_SAFE_INTEGER) {
118
+ this .#max = max < 0 ? 0 : max
119
+ this .fib1 = this .fib2 = 1
120
+ }
121
+
122
+ /**
123
+ * Iterable protocol.
124
+ *
125
+ * @public
126
+ * @instance
127
+ *
128
+ * @return {IterableIterator<number>} Current sequence iterator
129
+ */
130
+ public [Symbol .iterator ](): IterableIterator <number > {
131
+ return this
132
+ }
133
+
134
+ /**
135
+ * Get the next value in the fibonacci sequence.
136
+ *
137
+ * @public
138
+ * @instance
139
+ *
140
+ * @return {IteratorResult<number, number>} Next sequence value
141
+ */
142
+ public next(): IteratorResult <number , number > {
143
+ /**
144
+ * Temporary sequence value.
145
+ *
146
+ * @const {number} value
147
+ */
148
+ const value: number = this .fib1
149
+
150
+ // reset current sequence values
151
+ this .fib1 = this .fib2
152
+ this .fib2 = value + this .fib1
153
+
154
+ return { done: value >= this .#max , value }
155
+ }
156
+ }
157
+
158
+ export default FibonacciSequence
159
+ ````
160
+
161
+ …and our module ` example.mjs ` looks as follows:
162
+
163
+ ``` js
164
+ import { fromDocs } from ' @flex-development/docast-util-from-docs'
165
+ import { directiveFromMarkdown } from ' mdast-util-directive'
166
+ import { directive } from ' micromark-extension-directive'
167
+ import { read } from ' to-vfile'
168
+ import { inspect } from ' unist-util-inspect'
169
+
170
+ const file = await read (' fibonacci-sequence.ts' )
171
+
172
+ const tree = fromDocs (file, {
173
+ mdastExtensions: [directiveFromMarkdown ()],
174
+ micromarkExtensions: [directive ()]
175
+ })
176
+
177
+ console .log (inspect (tree))
178
+ ```
179
+
180
+ …now running ` node example.mjs ` yields:
181
+
182
+ ``` sh
183
+ root[9]
184
+ ├─0 comment[3] (1:1-5:4, 0-122)
185
+ │ │ code: null
186
+ │ ├─0 blockTag< file> [1] (2:4-2:27, 7-30)
187
+ │ │ │ tag: " @file"
188
+ │ │ └─0 text " FibonacciSequence" (2:10-2:27, 13-30)
189
+ │ ├─1 blockTag< module> [1] (3:4-3:29, 34-59)
190
+ │ │ │ tag: " @module"
191
+ │ │ └─0 text " FibonacciSequence" (3:12-3:29, 42-59)
192
+ │ └─2 blockTag< see> [1] (4:4-4:59, 63-118)
193
+ │ │ tag: " @see"
194
+ │ └─0 text " https://codewars.com/kata/55695bc4f75bbaea5100016b" (4:9-4:59, 68-118)
195
+ ├─1 comment[2] (7:1-19:4, 124-414)
196
+ │ │ code: null
197
+ │ ├─0 description[4] (8:4-16:7, 131-365)
198
+ │ │ ├─0 paragraph[1] (8:4-8:32, 131-159)
199
+ │ │ │ └─0 text " Fibonacci sequence iterator." (8:4-8:32, 131-159)
200
+ │ │ ├─1 break (8:32-9:1, 159-160)
201
+ │ │ ├─2 break (9:3-10:1, 162-163)
202
+ │ │ │ data: {" blank" :true}
203
+ │ │ └─3 containerDirective< info> [2] (10:4-16:7, 166-365)
204
+ │ │ │ attributes: {}
205
+ │ │ ├─0 paragraph[3] (11:4-12:37, 177-288)
206
+ │ │ │ ├─0 text " A fibonacci sequence starts with two " (11:4-11:41, 177-214)
207
+ │ │ │ ├─1 inlineCode " 1" (11:41-11:44, 214-217)
208
+ │ │ │ └─2 text " s. Every element afterwards is the sum of the two previous elements:" (11:44-12:37, 217-288)
209
+ │ │ └─1 code " 1, 1, 2, 3, 5, 8, 13, ..., 89, 144, 233, 377, ..." (13:4-15:7, 292-358)
210
+ │ │ lang: " txt"
211
+ │ │ meta: null
212
+ │ └─1 blockTag< implements> [1] (18:4-18:42, 372-410)
213
+ │ │ tag: " @implements"
214
+ │ └─0 typeExpression " Iterator<number, number>" (18:16-18:42, 384-410)
215
+ ├─2 comment[4] (21:3-27:6, 479-583)
216
+ │ │ code: null
217
+ │ ├─0 description[1] (22:6-22:35, 488-517)
218
+ │ │ └─0 paragraph[1] (22:6-22:35, 488-517)
219
+ │ │ └─0 text " First managed sequence value." (22:6-22:35, 488-517)
220
+ │ ├─1 blockTag< public> [0] (24:6-24:13, 528-535)
221
+ │ │ tag: " @public"
222
+ │ ├─2 blockTag< instance> [0] (25:6-25:15, 541-550)
223
+ │ │ tag: " @instance"
224
+ │ └─3 blockTag< member> [2] (26:6-26:27, 556-577)
225
+ │ │ tag: " @member"
226
+ │ ├─0 typeExpression " number" (26:14-26:22, 564-572)
227
+ │ └─1 text " fib1" (26:23-26:27, 573-577)
228
+ ├─3 comment[4] (30:3-36:6, 609-714)
229
+ │ │ code: null
230
+ │ ├─0 description[1] (31:6-31:36, 618-648)
231
+ │ │ └─0 paragraph[1] (31:6-31:36, 618-648)
232
+ │ │ └─0 text " Second managed sequence value." (31:6-31:36, 618-648)
233
+ │ ├─1 blockTag< public> [0] (33:6-33:13, 659-666)
234
+ │ │ tag: " @public"
235
+ │ ├─2 blockTag< instance> [0] (34:6-34:15, 672-681)
236
+ │ │ tag: " @instance"
237
+ │ └─3 blockTag< member> [2] (35:6-35:27, 687-708)
238
+ │ │ tag: " @member"
239
+ │ ├─0 typeExpression " number" (35:14-35:22, 695-703)
240
+ │ └─1 text " fib2" (35:23-35:27, 704-708)
241
+ ├─4 comment[4] (39:3-45:6, 740-834)
242
+ │ │ code: null
243
+ │ ├─0 description[1] (40:6-40:25, 749-768)
244
+ │ │ └─0 paragraph[1] (40:6-40:25, 749-768)
245
+ │ │ └─0 text " Max sequence value." (40:6-40:25, 749-768)
246
+ │ ├─1 blockTag< private> [0] (42:6-42:14, 779-787)
247
+ │ │ tag: " @private"
248
+ │ ├─2 blockTag< instance> [0] (43:6-43:15, 793-802)
249
+ │ │ tag: " @instance"
250
+ │ └─3 blockTag< member> [2] (44:6-44:26, 808-828)
251
+ │ │ tag: " @member"
252
+ │ ├─0 typeExpression " number" (44:14-44:22, 816-824)
253
+ │ └─1 text " max" (44:23-44:26, 825-828)
254
+ ├─5 comment[2] (48:3-52:6, 862-995)
255
+ │ │ code: null
256
+ │ ├─0 description[1] (49:6-49:47, 871-912)
257
+ │ │ └─0 paragraph[1] (49:6-49:47, 871-912)
258
+ │ │ └─0 text " Create a new fibonacci sequence iterator." (49:6-49:47, 871-912)
259
+ │ └─1 blockTag< param> [2] (51:6-51:72, 923-989)
260
+ │ │ tag: " @param"
261
+ │ ├─0 typeExpression " number" (51:13-51:21, 930-938)
262
+ │ └─1 text " [max=Number.MAX_SAFE_INTEGER] - Max sequence value" (51:22-51:72, 939-989)
263
+ ├─6 comment[4] (58:3-65:6, 1122-1259)
264
+ │ │ code: null
265
+ │ ├─0 description[1] (59:6-59:24, 1131-1149)
266
+ │ │ └─0 paragraph[1] (59:6-59:24, 1131-1149)
267
+ │ │ └─0 text " Iterable protocol." (59:6-59:24, 1131-1149)
268
+ │ ├─1 blockTag< public> [0] (61:6-61:13, 1160-1167)
269
+ │ │ tag: " @public"
270
+ │ ├─2 blockTag< instance> [0] (62:6-62:15, 1173-1182)
271
+ │ │ tag: " @instance"
272
+ │ └─3 blockTag< return> [2] (64:6-64:66, 1193-1253)
273
+ │ │ tag: " @return"
274
+ │ ├─0 typeExpression " IterableIterator<number>" (64:14-64:40, 1201-1227)
275
+ │ └─1 text " Current sequence iterator" (64:41-64:66, 1228-1253)
276
+ ├─7 comment[4] (70:3-77:6, 1340-1504)
277
+ │ │ code: null
278
+ │ ├─0 description[1] (71:6-71:51, 1349-1394)
279
+ │ │ └─0 paragraph[1] (71:6-71:51, 1349-1394)
280
+ │ │ └─0 text " Get the next value in the fibonacci sequence." (71:6-71:51, 1349-1394)
281
+ │ ├─1 blockTag< public> [0] (73:6-73:13, 1405-1412)
282
+ │ │ tag: " @public"
283
+ │ ├─2 blockTag< instance> [0] (74:6-74:15, 1418-1427)
284
+ │ │ tag: " @instance"
285
+ │ └─3 blockTag< return> [2] (76:6-76:66, 1438-1498)
286
+ │ │ tag: " @return"
287
+ │ ├─0 typeExpression " IteratorResult<number, number>" (76:14-76:46, 1446-1478)
288
+ │ └─1 text " Next sequence value" (76:47-76:66, 1479-1498)
289
+ └─8 comment[2] (79:5-83:8, 1559-1639)
290
+ │ code: null
291
+ ├─0 description[1] (80:8-80:33, 1570-1595)
292
+ │ └─0 paragraph[1] (80:8-80:33, 1570-1595)
293
+ │ └─0 text " Temporary sequence value." (80:8-80:33, 1570-1595)
294
+ └─1 blockTag< const> [2] (82:8-82:29, 1610-1631)
295
+ │ tag: " @const"
296
+ ├─0 typeExpression " number" (82:15-82:23, 1617-1625)
297
+ └─1 text " value" (82:24-82:29, 1626-1631)
298
+ ```
62
299
63
300
## API
64
301
0 commit comments