15
15
*/
16
16
17
17
const gulp = require ( 'gulp' ) ;
18
- const closureCompiler = require ( 'gulp -closure-compiler' ) ;
18
+ const closureCompiler = require ( 'google -closure-compiler' ) . gulp ( ) ;
19
19
const del = require ( 'del' ) ;
20
20
const express = require ( 'express' ) ;
21
21
const path = require ( 'path' ) ;
22
- const { through } = require ( 'event-stream' ) ;
23
- const File = require ( 'vinyl' ) ;
22
+ const sourcemaps = require ( 'gulp-sourcemaps' ) ;
24
23
25
24
// The optimization level for the JS compiler.
26
25
// Valid levels: WHITESPACE_ONLY, SIMPLE_OPTIMIZATIONS, ADVANCED_OPTIMIZATIONS.
@@ -29,82 +28,74 @@ const OPTIMIZATION_LEVEL = 'ADVANCED_OPTIMIZATIONS';
29
28
30
29
// For minified builds, wrap the output so we avoid leaking global variables.
31
30
const CJS_WRAPPER_PREFIX =
32
- `(function() {var firebase = require('@firebase/app').default;` ;
31
+ `(function() {var firebase = require('@firebase/app').default;` ;
33
32
const EMS_WRAPPER_PREFIX = `import firebase from '@firebase/app';(function() {` ;
34
33
const WRAPPER_SUFFIX =
35
- `}).apply(typeof global !== 'undefined' ? ` +
36
- `global : typeof self !== 'undefined' ? ` +
37
- `self : typeof window !== 'undefined' ? window : {});` ;
38
-
39
- /*
40
- * Re-emits file variations surrounding a content of an input file with
41
- * CommonJS and EcmaScript modules wrappers.
42
- */
43
- const wrap = through ( function ( file ) {
44
- const makeFile = ( prefix , path ) =>
45
- new File ( {
46
- path,
47
- contents : Buffer . concat ( [
48
- Buffer . from ( prefix ) ,
49
- file . contents ,
50
- Buffer . from ( WRAPPER_SUFFIX )
51
- ] )
52
- } ) ;
53
-
54
- this . emit ( 'data' , makeFile ( CJS_WRAPPER_PREFIX , 'auth.js' ) ) ;
55
- this . emit ( 'data' , makeFile ( EMS_WRAPPER_PREFIX , 'auth.esm.js' ) ) ;
56
- } ) ;
57
-
58
- // The path to Closure Compiler.
59
- const COMPILER_PATH = `${ path . dirname (
60
- require . resolve ( 'google-closure-compiler/package.json' )
61
- ) } /compiler.jar`;
34
+ `}).apply(typeof global !== 'undefined' ? ` +
35
+ `global : typeof self !== 'undefined' ? ` +
36
+ `self : typeof window !== 'undefined' ? window : {});` ;
62
37
63
38
const closureLibRoot = path . dirname (
64
- require . resolve ( 'google-closure-library/package.json' )
39
+ require . resolve ( 'google-closure-library/package.json' )
65
40
) ;
66
41
67
- // Builds the core Firebase-auth JS.
68
- const buildFirebaseAuth = ( ) =>
69
- gulp
70
- . src ( [
71
- `${ closureLibRoot } /closure/goog/**/*.js` ,
72
- `${ closureLibRoot } /third_party/closure/goog/**/*.js` ,
73
- 'src/**/*.js'
74
- ] )
75
- . pipe (
42
+ /**
43
+ * Builds the core Firebase-auth JS.
44
+ * @param {string } filename name of the generated file
45
+ * @param {string } prefix prefix to the compiled code
46
+ * @param {string } suffix suffix to the compiled code
47
+ */
48
+ function createBuildTask ( filename , prefix , suffix ) {
49
+ return ( ) =>
50
+ gulp
51
+ . src ( [
52
+ `${ closureLibRoot } /closure/goog/**/*.js` ,
53
+ `${ closureLibRoot } /third_party/closure/goog/**/*.js` ,
54
+ 'src/**/*.js'
55
+ ] , { base : '.' } )
56
+ . pipe ( sourcemaps . init ( ) )
57
+ . pipe (
76
58
closureCompiler ( {
77
- compilerPath : COMPILER_PATH ,
78
- fileName : 'unwrapped.js' ,
79
- compilerFlags : {
80
- closure_entry_point : 'fireauth.exports' ,
81
- compilation_level : OPTIMIZATION_LEVEL ,
82
- externs : [
83
- 'externs/externs.js' ,
84
- 'externs/grecaptcha.js' ,
85
- 'externs/gapi.iframes.js' ,
86
- path . resolve (
87
- __dirname ,
88
- '../firebase/externs/firebase-app-externs.js'
89
- ) ,
90
- path . resolve (
91
- __dirname ,
92
- '../firebase/externs/firebase-error-externs.js'
93
- ) ,
94
- path . resolve (
95
- __dirname ,
96
- '../firebase/externs/firebase-app-internal-externs.js'
97
- )
98
- ] ,
99
- language_out : 'ES5' ,
100
- only_closure_dependencies : true
101
- }
59
+ js_output_file : filename ,
60
+ output_wrapper : `${ prefix } %output%${ suffix } ` ,
61
+ entry_point : 'fireauth.exports' ,
62
+ compilation_level : OPTIMIZATION_LEVEL ,
63
+ externs : [
64
+ 'externs/externs.js' ,
65
+ 'externs/grecaptcha.js' ,
66
+ 'externs/gapi.iframes.js' ,
67
+ path . resolve (
68
+ __dirname ,
69
+ '../firebase/externs/firebase-app-externs.js'
70
+ ) ,
71
+ path . resolve (
72
+ __dirname ,
73
+ '../firebase/externs/firebase-error-externs.js'
74
+ ) ,
75
+ path . resolve (
76
+ __dirname ,
77
+ '../firebase/externs/firebase-app-internal-externs.js'
78
+ )
79
+ ] ,
80
+ language_out : 'ES5' ,
81
+ only_closure_dependencies : true
102
82
} )
103
- )
104
- . pipe ( wrap )
105
- . pipe ( gulp . dest ( 'dist' ) ) ;
83
+ )
84
+ . pipe ( sourcemaps . write ( '.' ) )
85
+ . pipe ( gulp . dest ( 'dist' ) ) ;
86
+ }
87
+
88
+ // commonjs build
89
+ const cjsBuild = createBuildTask ( 'auth.js' , CJS_WRAPPER_PREFIX , WRAPPER_SUFFIX ) ;
90
+ gulp . task ( 'cjs' , cjsBuild ) ;
91
+
92
+ // esm build
93
+ const esmBuild = createBuildTask ( 'auth.esm.js' , EMS_WRAPPER_PREFIX , WRAPPER_SUFFIX ) ;
94
+ gulp . task ( 'esm' , esmBuild ) ;
106
95
107
- gulp . task ( 'build-firebase-auth-js' , buildFirebaseAuth ) ;
96
+ // build without wrapper
97
+ const unwrappedBuild = createBuildTask ( 'unwrapped.js' , '' , '' ) ;
98
+ gulp . task ( 'build-firebase-auth-js' , unwrappedBuild ) ;
108
99
109
100
// Deletes intermediate files.
110
101
gulp . task ( 'clean' , done => del ( [ 'dist/*' , 'dist' ] , done ) ) ;
@@ -114,12 +105,12 @@ gulp.task('serve', () => {
114
105
const app = express ( ) ;
115
106
116
107
app . use (
117
- '/node_modules' ,
118
- express . static ( path . resolve ( __dirname , '../../node_modules' ) )
108
+ '/node_modules' ,
109
+ express . static ( path . resolve ( __dirname , '../../node_modules' ) )
119
110
) ;
120
111
app . use ( express . static ( __dirname ) ) ;
121
112
122
113
app . listen ( 4000 ) ;
123
114
} ) ;
124
115
125
- gulp . task ( 'default' , buildFirebaseAuth ) ;
116
+ gulp . task ( 'default' , gulp . parallel ( 'cjs' , 'esm' ) ) ;
0 commit comments