@@ -9,9 +9,9 @@ const copyFile = require('fs-copy-file'); // node v6.10.3 support
9
9
10
10
const AbstractService = require ( '../AbstractService' ) ;
11
11
12
- function resolveFile ( from ) {
12
+ function resolveFile ( from , opts = { } ) {
13
13
return new Promise ( ( resolve , reject ) => {
14
- glob ( from , { } , ( err , files ) => {
14
+ glob ( from , opts , ( err , files ) => {
15
15
if ( err ) return reject ( ) ;
16
16
return resolve ( files ) ;
17
17
} ) ;
@@ -31,6 +31,46 @@ class Dependencies extends AbstractService {
31
31
return path . resolve ( rooPath ) ;
32
32
}
33
33
34
+ /**
35
+ * Implementing package pattern ignore
36
+ * https://github.com/agutoli/serverless-layers/issues/118
37
+ */
38
+ async excludePatternFiles ( ) {
39
+ let filesToIgnore = [ ] ;
40
+ let filesToExclude = [ ] ;
41
+
42
+ /**
43
+ * Patterns allows you to define globs that will be excluded / included from the
44
+ * resulting artifact. If you wish to exclude files you can use a glob pattern prefixed
45
+ * with ! such as !exclude-me/**. Serverless will run the glob patterns in order so
46
+ * you can always re-include previously excluded files and directories.
47
+ *
48
+ * Reference: https://www.serverless.com/framework/docs/providers/aws/guide/packaging
49
+ */
50
+ for ( let pattern of this . plugin . service . package . patterns ) {
51
+ if ( pattern . startsWith ( '!' ) ) {
52
+ const resolvedFiles = await resolveFile ( pattern . substr ( 1 ) , {
53
+ cwd : this . layersPackageDir
54
+ } ) ;
55
+ filesToIgnore = filesToIgnore . concat ( resolvedFiles ) ;
56
+ } else {
57
+ // change directory
58
+ const resolvedFiles = await resolveFile ( pattern , {
59
+ cwd : this . layersPackageDir
60
+ } ) ;
61
+ filesToExclude = filesToExclude . concat ( resolvedFiles ) ;
62
+ }
63
+ }
64
+
65
+ filesToExclude . forEach ( ( filename ) => {
66
+ // check if folder or files are being ignored, and shouldn't be removed.
67
+ const shouldBeIgnored = filesToIgnore . filter ( x => x . startsWith ( filename ) ) . length > 0 ;
68
+ if ( ! shouldBeIgnored ) {
69
+ fs . rmSync ( path . join ( this . layersPackageDir , filename ) , { force : true , recursive : true } ) ;
70
+ }
71
+ } ) ;
72
+ }
73
+
34
74
async run ( cmd ) {
35
75
const output = execSync ( cmd , {
36
76
cwd : this . layersPackageDir ,
@@ -104,6 +144,9 @@ class Dependencies extends AbstractService {
104
144
console . log ( e ) ;
105
145
}
106
146
}
147
+
148
+ // cleanup files
149
+ await this . excludePatternFiles ( ) ;
107
150
}
108
151
}
109
152
0 commit comments