8
8
9
9
var Archiver = require ( './lib/core' ) ;
10
10
11
- module . exports = Archiver ;
11
+ var formats = { } ;
12
12
13
- module . exports . create = function ( format , options ) {
14
- return new Archiver ( format , options ) ;
13
+ var vending = module . exports = function ( format , options ) {
14
+ return vending . create ( format , options ) ;
15
15
} ;
16
16
17
- module . exports . registerFormat = function ( format , module ) {
18
- throw new Error ( 'registerFormat is no longer supported.' ) ;
19
- } ;
17
+ module . exports . registerFormat = registerFormat ;
18
+
19
+ function registerFormat ( format , module ) {
20
+ if ( formats [ format ] ) {
21
+ throw new Error ( 'register(' + format + '): format already registered' ) ;
22
+ }
23
+
24
+ if ( typeof module !== 'function' ) {
25
+ throw new Error ( 'register(' + format + '): format module invalid' ) ;
26
+ }
27
+
28
+ if ( typeof module . prototype . append !== 'function' || typeof module . prototype . finalize !== 'function' ) {
29
+ throw new Error ( 'register(' + format + '): format module missing methods' ) ;
30
+ }
31
+
32
+ formats [ format ] = module ;
33
+ }
34
+
35
+ vending . create = function ( format , options ) {
36
+ if ( formats [ format ] ) {
37
+ var instance = new Archiver ( format , options ) ;
38
+ instance . setFormat ( format ) ;
39
+ instance . setModule ( new formats [ format ] ( options ) ) ;
40
+
41
+ return instance ;
42
+ } else {
43
+ throw new Error ( 'create(' + format + '): format not registered' ) ;
44
+ }
45
+ } ;
46
+
47
+ registerFormat ( 'zip' , require ( './lib/plugins/zip' ) ) ;
48
+ registerFormat ( 'tar' , require ( './lib/plugins/tar' ) ) ;
49
+ registerFormat ( 'json' , require ( './lib/plugins/json' ) ) ;
0 commit comments