UNPKG

23 kBHTMLView Raw
1<!doctype html>
2<html lang="en">
3<head>
4 <title>Code coverage report for lib/file.js</title>
5 <meta charset="utf-8" />
6 <link rel="stylesheet" href="../prettify.css" />
7 <link rel="stylesheet" href="../base.css" />
8 <meta name="viewport" content="width=device-width, initial-scale=1">
9 <style type='text/css'>
10 .coverage-summary .sorter {
11 background-image: url(../sort-arrow-sprite.png);
12 }
13 </style>
14</head>
15<body>
16<div class='wrapper'>
17 <div class='pad1'>
18 <h1>
19 <a href="../index.html">all files</a> / <a href="index.html">lib/</a> file.js
20 </h1>
21 <div class='clearfix'>
22 <div class='fl pad1y space-right2'>
23 <span class="strong">100% </span>
24 <span class="quiet">Statements</span>
25 <span class='fraction'>53/53</span>
26 </div>
27 <div class='fl pad1y space-right2'>
28 <span class="strong">100% </span>
29 <span class="quiet">Branches</span>
30 <span class='fraction'>10/10</span>
31 </div>
32 <div class='fl pad1y space-right2'>
33 <span class="strong">100% </span>
34 <span class="quiet">Functions</span>
35 <span class='fraction'>21/21</span>
36 </div>
37 <div class='fl pad1y space-right2'>
38 <span class="strong">100% </span>
39 <span class="quiet">Lines</span>
40 <span class='fraction'>52/52</span>
41 </div>
42 </div>
43 </div>
44 <div class='status-line high'></div>
45<pre><table class="coverage">
46<tr><td class="line-count quiet">1
472
483
494
505
516
527
538
549
5510
5611
5712
5813
5914
6015
6116
6217
6318
6419
6520
6621
6722
6823
6924
7025
7126
7227
7328
7429
7530
7631
7732
7833
7934
8035
8136
8237
8338
8439
8540
8641
8742
8843
8944
9045
9146
9247
9348
9449
9550
9651
9752
9853
9954
10055
10156
10257
10358
10459
10560
10661
10762
10863
10964
11065
11166
11267
11368
11469
11570
11671
11772
11873
11974
12075
12176
12277
12378
12479
12580
12681
12782
12883
12984
13085
13186
13287
13388
13489
13590
13691
13792
13893
13994
14095
14196
14297
14398
14499
145100
146101
147102
148103
149104
150105
151106
152107
153108
154109
155110
156111
157112
158113
159114
160115
161116
162117
163118
164119
165120
166121
167122
168123
169124
170125
171126
172127
173128
174129
175130
176131
177132
178133
179134
180135
181136
182137
183138
184139
185140
186141
187142
188143
189144
190145
191146
192147
193148
194149
195150
196151
197152
198153
199154
200155
201156
202157
203158
204159
205160
206161
207162
208163
209164
210165
211166
212167
213168
214169
215170
216171
217172
218173
219174
220175
221176
222177
223178
224179
225180
226181
227182
228183
229184
230185
231186
232187
233188
234189
235190
236191
237192
238193
239194
240195
241196
242197
243198
244199
245200
246201
247202
248203
249204
250205
251206
252207
253208
254209
255210
256211
257212
258213
259214
260215
261216
262217
263218
264219
265220
266221
267222
268223
269224
270225
271226
272227
273228
274229
275230
276231
277232
278233
279234
280235
281236
282237
283238
284239
285240
286241
287242
288243
289244
290245
291246
292247
293248
294249
295250
296251
297252
298253
299254
300255
301256
302257
303258
304259
305260
306261
307262
308263
309264
310265
311266
312267</td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
313<span class="cline-any cline-neutral">&nbsp;</span>
314<span class="cline-any cline-yes"></span>
315<span class="cline-any cline-yes"></span>
316<span class="cline-any cline-yes"></span>
317<span class="cline-any cline-yes"></span>
318<span class="cline-any cline-yes"></span>
319<span class="cline-any cline-yes"></span>
320<span class="cline-any cline-yes"></span>
321<span class="cline-any cline-neutral">&nbsp;</span>
322<span class="cline-any cline-neutral">&nbsp;</span>
323<span class="cline-any cline-neutral">&nbsp;</span>
324<span class="cline-any cline-neutral">&nbsp;</span>
325<span class="cline-any cline-neutral">&nbsp;</span>
326<span class="cline-any cline-neutral">&nbsp;</span>
327<span class="cline-any cline-neutral">&nbsp;</span>
328<span class="cline-any cline-neutral">&nbsp;</span>
329<span class="cline-any cline-neutral">&nbsp;</span>
330<span class="cline-any cline-neutral">&nbsp;</span>
331<span class="cline-any cline-neutral">&nbsp;</span>
332<span class="cline-any cline-neutral">&nbsp;</span>
333<span class="cline-any cline-neutral">&nbsp;</span>
334<span class="cline-any cline-neutral">&nbsp;</span>
335<span class="cline-any cline-yes">216×</span>
336<span class="cline-any cline-yes">216×</span>
337<span class="cline-any cline-neutral">&nbsp;</span>
338<span class="cline-any cline-yes">216×</span>
339<span class="cline-any cline-yes">33×</span>
340<span class="cline-any cline-neutral">&nbsp;</span>
341<span class="cline-any cline-yes">183×</span>
342<span class="cline-any cline-neutral">&nbsp;</span>
343<span class="cline-any cline-neutral">&nbsp;</span>
344<span class="cline-any cline-yes">216×</span>
345<span class="cline-any cline-yes">216×</span>
346<span class="cline-any cline-neutral">&nbsp;</span>
347<span class="cline-any cline-neutral">&nbsp;</span>
348<span class="cline-any cline-neutral">&nbsp;</span>
349<span class="cline-any cline-neutral">&nbsp;</span>
350<span class="cline-any cline-neutral">&nbsp;</span>
351<span class="cline-any cline-neutral">&nbsp;</span>
352<span class="cline-any cline-neutral">&nbsp;</span>
353<span class="cline-any cline-neutral">&nbsp;</span>
354<span class="cline-any cline-neutral">&nbsp;</span>
355<span class="cline-any cline-neutral">&nbsp;</span>
356<span class="cline-any cline-yes"></span>
357<span class="cline-any cline-neutral">&nbsp;</span>
358<span class="cline-any cline-neutral">&nbsp;</span>
359<span class="cline-any cline-neutral">&nbsp;</span>
360<span class="cline-any cline-neutral">&nbsp;</span>
361<span class="cline-any cline-neutral">&nbsp;</span>
362<span class="cline-any cline-neutral">&nbsp;</span>
363<span class="cline-any cline-neutral">&nbsp;</span>
364<span class="cline-any cline-neutral">&nbsp;</span>
365<span class="cline-any cline-neutral">&nbsp;</span>
366<span class="cline-any cline-neutral">&nbsp;</span>
367<span class="cline-any cline-yes"></span>
368<span class="cline-any cline-neutral">&nbsp;</span>
369<span class="cline-any cline-neutral">&nbsp;</span>
370<span class="cline-any cline-neutral">&nbsp;</span>
371<span class="cline-any cline-neutral">&nbsp;</span>
372<span class="cline-any cline-neutral">&nbsp;</span>
373<span class="cline-any cline-neutral">&nbsp;</span>
374<span class="cline-any cline-neutral">&nbsp;</span>
375<span class="cline-any cline-neutral">&nbsp;</span>
376<span class="cline-any cline-neutral">&nbsp;</span>
377<span class="cline-any cline-neutral">&nbsp;</span>
378<span class="cline-any cline-yes"></span>
379<span class="cline-any cline-neutral">&nbsp;</span>
380<span class="cline-any cline-neutral">&nbsp;</span>
381<span class="cline-any cline-neutral">&nbsp;</span>
382<span class="cline-any cline-neutral">&nbsp;</span>
383<span class="cline-any cline-neutral">&nbsp;</span>
384<span class="cline-any cline-neutral">&nbsp;</span>
385<span class="cline-any cline-neutral">&nbsp;</span>
386<span class="cline-any cline-neutral">&nbsp;</span>
387<span class="cline-any cline-neutral">&nbsp;</span>
388<span class="cline-any cline-yes"></span>
389<span class="cline-any cline-neutral">&nbsp;</span>
390<span class="cline-any cline-neutral">&nbsp;</span>
391<span class="cline-any cline-neutral">&nbsp;</span>
392<span class="cline-any cline-neutral">&nbsp;</span>
393<span class="cline-any cline-neutral">&nbsp;</span>
394<span class="cline-any cline-neutral">&nbsp;</span>
395<span class="cline-any cline-neutral">&nbsp;</span>
396<span class="cline-any cline-neutral">&nbsp;</span>
397<span class="cline-any cline-neutral">&nbsp;</span>
398<span class="cline-any cline-neutral">&nbsp;</span>
399<span class="cline-any cline-yes"></span>
400<span class="cline-any cline-neutral">&nbsp;</span>
401<span class="cline-any cline-neutral">&nbsp;</span>
402<span class="cline-any cline-neutral">&nbsp;</span>
403<span class="cline-any cline-neutral">&nbsp;</span>
404<span class="cline-any cline-neutral">&nbsp;</span>
405<span class="cline-any cline-neutral">&nbsp;</span>
406<span class="cline-any cline-neutral">&nbsp;</span>
407<span class="cline-any cline-neutral">&nbsp;</span>
408<span class="cline-any cline-neutral">&nbsp;</span>
409<span class="cline-any cline-neutral">&nbsp;</span>
410<span class="cline-any cline-yes"></span>
411<span class="cline-any cline-neutral">&nbsp;</span>
412<span class="cline-any cline-neutral">&nbsp;</span>
413<span class="cline-any cline-neutral">&nbsp;</span>
414<span class="cline-any cline-neutral">&nbsp;</span>
415<span class="cline-any cline-neutral">&nbsp;</span>
416<span class="cline-any cline-neutral">&nbsp;</span>
417<span class="cline-any cline-neutral">&nbsp;</span>
418<span class="cline-any cline-neutral">&nbsp;</span>
419<span class="cline-any cline-neutral">&nbsp;</span>
420<span class="cline-any cline-neutral">&nbsp;</span>
421<span class="cline-any cline-yes"></span>
422<span class="cline-any cline-neutral">&nbsp;</span>
423<span class="cline-any cline-neutral">&nbsp;</span>
424<span class="cline-any cline-neutral">&nbsp;</span>
425<span class="cline-any cline-neutral">&nbsp;</span>
426<span class="cline-any cline-neutral">&nbsp;</span>
427<span class="cline-any cline-neutral">&nbsp;</span>
428<span class="cline-any cline-neutral">&nbsp;</span>
429<span class="cline-any cline-neutral">&nbsp;</span>
430<span class="cline-any cline-neutral">&nbsp;</span>
431<span class="cline-any cline-yes"></span>
432<span class="cline-any cline-neutral">&nbsp;</span>
433<span class="cline-any cline-neutral">&nbsp;</span>
434<span class="cline-any cline-neutral">&nbsp;</span>
435<span class="cline-any cline-neutral">&nbsp;</span>
436<span class="cline-any cline-neutral">&nbsp;</span>
437<span class="cline-any cline-neutral">&nbsp;</span>
438<span class="cline-any cline-neutral">&nbsp;</span>
439<span class="cline-any cline-neutral">&nbsp;</span>
440<span class="cline-any cline-neutral">&nbsp;</span>
441<span class="cline-any cline-neutral">&nbsp;</span>
442<span class="cline-any cline-yes"></span>
443<span class="cline-any cline-neutral">&nbsp;</span>
444<span class="cline-any cline-neutral">&nbsp;</span>
445<span class="cline-any cline-neutral">&nbsp;</span>
446<span class="cline-any cline-neutral">&nbsp;</span>
447<span class="cline-any cline-neutral">&nbsp;</span>
448<span class="cline-any cline-neutral">&nbsp;</span>
449<span class="cline-any cline-yes"></span>
450<span class="cline-any cline-yes"></span>
451<span class="cline-any cline-neutral">&nbsp;</span>
452<span class="cline-any cline-neutral">&nbsp;</span>
453<span class="cline-any cline-neutral">&nbsp;</span>
454<span class="cline-any cline-neutral">&nbsp;</span>
455<span class="cline-any cline-neutral">&nbsp;</span>
456<span class="cline-any cline-neutral">&nbsp;</span>
457<span class="cline-any cline-neutral">&nbsp;</span>
458<span class="cline-any cline-neutral">&nbsp;</span>
459<span class="cline-any cline-yes"></span>
460<span class="cline-any cline-neutral">&nbsp;</span>
461<span class="cline-any cline-neutral">&nbsp;</span>
462<span class="cline-any cline-neutral">&nbsp;</span>
463<span class="cline-any cline-neutral">&nbsp;</span>
464<span class="cline-any cline-neutral">&nbsp;</span>
465<span class="cline-any cline-neutral">&nbsp;</span>
466<span class="cline-any cline-neutral">&nbsp;</span>
467<span class="cline-any cline-neutral">&nbsp;</span>
468<span class="cline-any cline-yes"></span>
469<span class="cline-any cline-neutral">&nbsp;</span>
470<span class="cline-any cline-neutral">&nbsp;</span>
471<span class="cline-any cline-neutral">&nbsp;</span>
472<span class="cline-any cline-neutral">&nbsp;</span>
473<span class="cline-any cline-neutral">&nbsp;</span>
474<span class="cline-any cline-neutral">&nbsp;</span>
475<span class="cline-any cline-neutral">&nbsp;</span>
476<span class="cline-any cline-neutral">&nbsp;</span>
477<span class="cline-any cline-yes"></span>
478<span class="cline-any cline-neutral">&nbsp;</span>
479<span class="cline-any cline-neutral">&nbsp;</span>
480<span class="cline-any cline-neutral">&nbsp;</span>
481<span class="cline-any cline-neutral">&nbsp;</span>
482<span class="cline-any cline-neutral">&nbsp;</span>
483<span class="cline-any cline-neutral">&nbsp;</span>
484<span class="cline-any cline-neutral">&nbsp;</span>
485<span class="cline-any cline-neutral">&nbsp;</span>
486<span class="cline-any cline-neutral">&nbsp;</span>
487<span class="cline-any cline-yes"></span>
488<span class="cline-any cline-neutral">&nbsp;</span>
489<span class="cline-any cline-neutral">&nbsp;</span>
490<span class="cline-any cline-neutral">&nbsp;</span>
491<span class="cline-any cline-neutral">&nbsp;</span>
492<span class="cline-any cline-neutral">&nbsp;</span>
493<span class="cline-any cline-neutral">&nbsp;</span>
494<span class="cline-any cline-neutral">&nbsp;</span>
495<span class="cline-any cline-neutral">&nbsp;</span>
496<span class="cline-any cline-neutral">&nbsp;</span>
497<span class="cline-any cline-yes">31×</span>
498<span class="cline-any cline-yes">31×</span>
499<span class="cline-any cline-yes">31×</span>
500<span class="cline-any cline-yes">31×</span>
501<span class="cline-any cline-neutral">&nbsp;</span>
502<span class="cline-any cline-neutral">&nbsp;</span>
503<span class="cline-any cline-neutral">&nbsp;</span>
504<span class="cline-any cline-neutral">&nbsp;</span>
505<span class="cline-any cline-neutral">&nbsp;</span>
506<span class="cline-any cline-neutral">&nbsp;</span>
507<span class="cline-any cline-neutral">&nbsp;</span>
508<span class="cline-any cline-neutral">&nbsp;</span>
509<span class="cline-any cline-neutral">&nbsp;</span>
510<span class="cline-any cline-neutral">&nbsp;</span>
511<span class="cline-any cline-neutral">&nbsp;</span>
512<span class="cline-any cline-neutral">&nbsp;</span>
513<span class="cline-any cline-neutral">&nbsp;</span>
514<span class="cline-any cline-neutral">&nbsp;</span>
515<span class="cline-any cline-neutral">&nbsp;</span>
516<span class="cline-any cline-neutral">&nbsp;</span>
517<span class="cline-any cline-yes"></span>
518<span class="cline-any cline-yes"></span>
519<span class="cline-any cline-yes"></span>
520<span class="cline-any cline-yes"></span>
521<span class="cline-any cline-yes"></span>
522<span class="cline-any cline-yes"></span>
523<span class="cline-any cline-yes"></span>
524<span class="cline-any cline-neutral">&nbsp;</span>
525<span class="cline-any cline-yes"></span>
526<span class="cline-any cline-neutral">&nbsp;</span>
527<span class="cline-any cline-yes"></span>
528<span class="cline-any cline-neutral">&nbsp;</span>
529<span class="cline-any cline-neutral">&nbsp;</span>
530<span class="cline-any cline-neutral">&nbsp;</span>
531<span class="cline-any cline-neutral">&nbsp;</span>
532<span class="cline-any cline-neutral">&nbsp;</span>
533<span class="cline-any cline-neutral">&nbsp;</span>
534<span class="cline-any cline-neutral">&nbsp;</span>
535<span class="cline-any cline-neutral">&nbsp;</span>
536<span class="cline-any cline-neutral">&nbsp;</span>
537<span class="cline-any cline-yes">14×</span>
538<span class="cline-any cline-yes">14×</span>
539<span class="cline-any cline-yes">14×</span>
540<span class="cline-any cline-neutral">&nbsp;</span>
541<span class="cline-any cline-neutral">&nbsp;</span>
542<span class="cline-any cline-neutral">&nbsp;</span>
543<span class="cline-any cline-neutral">&nbsp;</span>
544<span class="cline-any cline-neutral">&nbsp;</span>
545<span class="cline-any cline-neutral">&nbsp;</span>
546<span class="cline-any cline-neutral">&nbsp;</span>
547<span class="cline-any cline-neutral">&nbsp;</span>
548<span class="cline-any cline-yes">175×</span>
549<span class="cline-any cline-neutral">&nbsp;</span>
550<span class="cline-any cline-neutral">&nbsp;</span>
551<span class="cline-any cline-neutral">&nbsp;</span>
552<span class="cline-any cline-neutral">&nbsp;</span>
553<span class="cline-any cline-neutral">&nbsp;</span>
554<span class="cline-any cline-neutral">&nbsp;</span>
555<span class="cline-any cline-neutral">&nbsp;</span>
556<span class="cline-any cline-neutral">&nbsp;</span>
557<span class="cline-any cline-neutral">&nbsp;</span>
558<span class="cline-any cline-neutral">&nbsp;</span>
559<span class="cline-any cline-neutral">&nbsp;</span>
560<span class="cline-any cline-yes"></span>
561<span class="cline-any cline-yes"></span>
562<span class="cline-any cline-yes"></span>
563<span class="cline-any cline-yes"></span>
564<span class="cline-any cline-neutral">&nbsp;</span>
565<span class="cline-any cline-neutral">&nbsp;</span>
566<span class="cline-any cline-neutral">&nbsp;</span>
567<span class="cline-any cline-neutral">&nbsp;</span>
568<span class="cline-any cline-neutral">&nbsp;</span>
569<span class="cline-any cline-neutral">&nbsp;</span>
570<span class="cline-any cline-neutral">&nbsp;</span>
571<span class="cline-any cline-neutral">&nbsp;</span>
572<span class="cline-any cline-yes">214×</span>
573<span class="cline-any cline-neutral">&nbsp;</span>
574<span class="cline-any cline-neutral">&nbsp;</span>
575<span class="cline-any cline-neutral">&nbsp;</span>
576<span class="cline-any cline-neutral">&nbsp;</span>
577<span class="cline-any cline-yes"></span>
578<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">'use strict'
579&nbsp;
580let assert = require('assert')
581let debug = require('debug')('mako-file')
582let extension = require('file-extension')
583let path = require('path')
584let utils = require('mako-utils')
585let uuid = require('uuid')
586let Vinyl = require('vinyl')
587&nbsp;
588/**
589 * Represents a file within a build tree.
590 *
591 * @class
592 */
593class File extends Vinyl {
594 /**
595 * Sets up the instance.
596 *
597 * @param {Object} params The vinyl params for this file.
598 * @param {Tree} tree The parent build tree.
599 */
600 constructor (params, tree) {
601 assert(params, 'params needed to initialize a file')
602 debug('initialize with %s', params)
603&nbsp;
604 if (typeof params === 'string') {
605 super({ path: params })
606 } else {
607 super(params)
608 }
609&nbsp;
610 if (!this.id) this.id = File.id()
611 this.tree = tree
612 }
613&nbsp;
614 /**
615 * Check to see if this file has the given path currently. (or did at some
616 * point in it's history)
617 *
618 * @param {String} path The absolute path to search for.
619 * @return {Boolean} has
620 */
621 hasPath (path) {
622 return this.history.indexOf(path) &gt; -1
623 }
624&nbsp;
625 /**
626 * Check to see if the `child` file is a dependency of this file.
627 *
628 * @see Tree#hasDependency()
629 * @param {String} child The file ID of the dependency.
630 * @return {Boolean} has
631 */
632 hasDependency (child) {
633 return this.tree.hasDependency(this.id, child)
634 }
635&nbsp;
636 /**
637 * Adds the `child` as a dependency of this file. Returns the new `File`
638 * instance.
639 *
640 * @see Tree#addDependency()
641 * @param {String} child The file ID of the dependency.
642 */
643 addDependency (child) {
644 this.tree.addDependency(this.id, child)
645 }
646&nbsp;
647 /**
648 * Removes the `child` as a dependency of this file.
649 *
650 * @see Tree#removeDependency()
651 * @param {String} child The file ID of the dependency.
652 */
653 removeDependency (child) {
654 this.tree.removeDependency(this.id, child)
655 }
656&nbsp;
657 /**
658 * Find the dependencies of this file.
659 *
660 * @see Tree#dependencies()
661 * @param {Object} options The search criteria.
662 * @return {Array} files
663 */
664 dependencies (options) {
665 return this.tree.dependenciesOf(this.id, options)
666 }
667&nbsp;
668 /**
669 * Check to see if the `parent` file is a dependant of this file.
670 *
671 * @see Tree#hasDependant()
672 * @param {String} parent The file ID of the dependant.
673 * @return {Boolean} has
674 */
675 hasDependant (parent) {
676 return this.tree.hasDependant(this.id, parent)
677 }
678&nbsp;
679 /**
680 * Adds the `parent` as a dependant of this file. Returns the new `File`
681 * instance.
682 *
683 * @see Tree#addDependant()
684 * @param {String} parent The file ID of the dependant.
685 */
686 addDependant (parent) {
687 this.tree.addDependant(this.id, parent)
688 }
689&nbsp;
690 /**
691 * Removes the `parent` as a dependant of this file.
692 *
693 * @see Tree#removeDependant()
694 * @param {String} parent The file ID of the dependant.
695 */
696 removeDependant (parent) {
697 this.tree.removeDependant(this.id, parent)
698 }
699&nbsp;
700 /**
701 * Find the dependants of this file.
702 *
703 * @see Tree#dependants()
704 * @param {Object} options The search criteria.
705 * @return {Array} files
706 */
707 dependants (options) {
708 return this.tree.dependantsOf(this.id, options)
709 }
710&nbsp;
711 /**
712 * Used to reset a file prior to re-running the analyze phase.
713 */
714 reset () {
715 this.history.splice(1)
716 this.contents = null
717 }
718&nbsp;
719 /**
720 * Retrieves the current type for the file.
721 *
722 * @return {String} type
723 */
724 get type () {
725 return extension(this.basename)
726 }
727&nbsp;
728 /**
729 * Set the type/extension for this file.
730 *
731 * @param {String} type The type (without the leading dot)
732 */
733 set type (type) {
734 this.extname = `.${type}`
735 }
736&nbsp;
737 /**
738 * Gets the initial path for this file.
739 *
740 * @return {String} path
741 */
742 get initialPath () {
743 return this.history[0]
744 }
745&nbsp;
746 /**
747 * Determine the original file type for this file (as if no transformations
748 * have been run)
749 *
750 * @return {String} type
751 */
752 get initialType () {
753 return extension(path.basename(this.initialPath))
754 }
755&nbsp;
756 /**
757 * Creates a clone of this file.
758 *
759 * @param {Tree} tree The tree to attach the clone to.
760 * @return {File}
761 */
762 clone (tree) {
763 debug('cloning %s', utils.relative(this.path))
764 let clone = super.clone()
765 clone.tree = tree || this.tree
766 return clone
767 }
768&nbsp;
769 /**
770 * Performs a deep copy of this file, making the following alterations after
771 * successfully cloning:
772 * - a new id is generated (so it can be added to a tree as a different file)
773 * - uses `newPath` to update the path (relative to the current path)
774 *
775 * Available `options` include:
776 * - resetPath: if enabled, it will reset file.history with only the new path
777 *
778 * @param {String} newPath The relative path for this new file.
779 * @param {Object} options Additional options.
780 * @return {File} copy
781 */
782 copy (newPath, options) {
783 assert(newPath, 'a new path is required to copy a file')
784 debug('copying %s', utils.relative(this.path))
785 let absolute = path.resolve(this.dirname, newPath)
786 let copy = this.clone()
787 copy.id = File.id()
788 if (options &amp;&amp; options.resetPath) {
789 copy.history = [ absolute ]
790 } else {
791 copy.path = absolute
792 }
793 return copy
794 }
795&nbsp;
796 /**
797 * Returns a trimmed object that can be serialized as JSON. It strips the tree
798 * link and includes all other properties, including the custom ones.
799 *
800 * @return {File} obj
801 */
802 toJSON () {
803 let clone = this.clone()
804 delete clone.tree
805 return clone
806 }
807&nbsp;
808 /**
809 * Allow for easier logging.
810 *
811 * @return {String} str
812 */
813 toString () {
814 return this.inspect()
815 }
816&nbsp;
817 /**
818 * Used to parse a string value into a usable file.
819 *
820 * @static
821 * @param {String} input The raw JSON string to parse.
822 * @param {Tree} tree The tree to associate this file with.
823 * @return {File}
824 */
825 static fromObject (input, tree) {
826 let props = Object.assign({}, input, { path: null })
827 props.contents = props._contents
828 delete props._contents
829 return new File(props, tree)
830 }
831&nbsp;
832 /**
833 * Used to generate IDs, exposed as a static method to allow customization.
834 *
835 * @return {String} id
836 */
837 static id () {
838 return uuid.v4()
839 }
840}
841&nbsp;
842// single export
843module.exports = File
844&nbsp;</pre></td></tr>
845</table></pre>
846<div class='push'></div><!-- for sticky footer -->
847</div><!-- /wrapper -->
848<div class='footer quiet pad2 space-top1 center small'>
849 Code coverage
850 generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Sat Jul 01 2017 00:49:52 GMT-0700 (PDT)
851</div>
852</div>
853<script src="../prettify.js"></script>
854<script>
855window.onload = function () {
856 if (typeof prettyPrint === 'function') {
857 prettyPrint();
858 }
859};
860</script>
861<script src="../sorter.js"></script>
862</body>
863</html>