1
- //! rev-web-assets v1.0 .0 ~~ https://github.com/center-key/rev-web-assets ~~ MIT License
1
+ //! rev-web-assets v1.1 .0 ~~ https://github.com/center-key/rev-web-assets ~~ MIT License
2
2
3
3
var __importDefault = ( this && this . __importDefault ) || function ( mod ) {
4
4
return ( mod && mod . __esModule ) ? mod : { "default" : mod } ;
@@ -51,6 +51,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
51
51
hashedFilename : null ,
52
52
destFolder : destFolder ,
53
53
destPath : null ,
54
+ usedIn : isHtml ? null : [ ] ,
55
+ references : isHtml ? null : 0 ,
54
56
} ;
55
57
} ;
56
58
const manifest = files . map ( process ) ;
@@ -66,16 +68,21 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
66
68
const hash = crypto_1 . default . createHash ( 'md5' ) . update ( contents ) . digest ( 'hex' ) ;
67
69
detail . hash = hash . substring ( 0 , hashLen ) ;
68
70
detail . hashedFilename = revWebAssets . hashFilename ( detail . filename , detail . hash ) ;
71
+ return detail ;
69
72
} ,
70
73
hashAssetPath ( manifest , detail , settings ) {
71
- return ( matched , pre , uri , post ) => {
74
+ const replacer = ( matched , pre , uri , post ) => {
72
75
const ext = path_1 . default . extname ( uri ) ;
73
76
const doNotHash = uri . includes ( ':' ) || [ '.html' , '.htm' , '.php' ] . includes ( ext ) || ext . length < 2 ;
74
77
const canonicalPath = detail . canonicalFolder ? detail . canonicalFolder + '/' : '' ;
75
78
const canonical = ( 0 , slash_1 . default ) ( path_1 . default . normalize ( canonicalPath + uri ) ) ;
76
79
const assetDetail = doNotHash ? null : manifest . find ( detail => detail . canonical === canonical ) ;
77
80
if ( assetDetail && ! assetDetail . hash )
78
81
revWebAssets . calcAssetHash ( assetDetail ) ;
82
+ if ( assetDetail )
83
+ assetDetail . references ++ ;
84
+ if ( assetDetail && ! assetDetail . usedIn . includes ( detail . canonical ) )
85
+ assetDetail . usedIn . push ( detail . canonical ) ;
79
86
const hashedUri = ( ) => {
80
87
const hashed = revWebAssets . hashFilename ( uri , assetDetail . hash ) ;
81
88
const noBase = ! settings . metaContentBase || ! pre . startsWith ( '<meta' ) ;
@@ -84,6 +91,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
84
91
} ;
85
92
return ( assetDetail === null || assetDetail === void 0 ? void 0 : assetDetail . hash ) ? pre + hashedUri ( ) + post : matched ;
86
93
} ;
94
+ return replacer ;
87
95
} ,
88
96
processHtml ( manifest , settings ) {
89
97
const hrefPattern = / ( < [ a - z ] { 1 , 4 } \s .* h r e f = [ ' " ] ? ) ( [ ^ " ' > \s ] * ) ( [ ' " ] ? [ ^ < ] * > ) / ig;
@@ -126,6 +134,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
126
134
revision ( sourceFolder , targetFolder , options ) {
127
135
const defaults = {
128
136
cd : null ,
137
+ force : false ,
129
138
metaContentBase : null ,
130
139
saveManifest : false ,
131
140
} ;
@@ -149,7 +158,11 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
149
158
const manifest = revWebAssets . manifest ( source , target ) ;
150
159
revWebAssets . processHtml ( manifest , settings ) ;
151
160
revWebAssets . processCss ( manifest , settings ) ;
161
+ const hashUnusedAsset = ( detail ) => ! detail . hash && ! detail . isHtml && revWebAssets . calcAssetHash ( detail ) ;
162
+ if ( settings . force )
163
+ manifest . forEach ( hashUnusedAsset ) ;
152
164
revWebAssets . copyAssets ( manifest ) ;
165
+ manifest . forEach ( detail => detail . usedIn && detail . usedIn . sort ( ) ) ;
153
166
const manifestPath = path_1 . default . join ( target , 'manifest.json' ) ;
154
167
if ( settings . saveManifest )
155
168
fs_1 . default . writeFileSync ( manifestPath , JSON . stringify ( manifest , null , ' ' ) + '\n' ) ;
0 commit comments