1
1
import * as path from "path" ;
2
- import * as fs from "fs-extra" ;
2
+ import fse from "fs-extra" ;
3
+ import fs from "fs/promises" ;
3
4
import chalk from "chalk" ;
4
5
import { Command } from "commander" ;
5
6
import {
8
9
IContentsEntry ,
9
10
logOutput ,
10
11
logWarning ,
11
- createTempDir ,
12
+ createTempDirAsync ,
12
13
IContentsEntryHashmap ,
13
14
kbToMB ,
14
15
setNestedProperty ,
@@ -56,7 +57,7 @@ export default program
56
57
const mappedOptions : IAssetPostProcessorOptions = {
57
58
sourceAssetsFolders : options . sourceAssetsFolders . split ( "," ) . map ( ( s ) => s . trim ( ) ) ,
58
59
} ;
59
- new AssetsPostProcessor ( mappedOptions ) . run ( ) ;
60
+ await new AssetsPostProcessor ( mappedOptions ) . run ( ) ;
60
61
} ) ;
61
62
62
63
/***************************************************************************************
@@ -67,22 +68,22 @@ export class AssetsPostProcessor {
67
68
private stagingDir : string ;
68
69
constructor ( private options : IAssetPostProcessorOptions ) { }
69
70
70
- public run ( ) {
71
+ public async run ( ) {
71
72
const { app_data } = this . activeDeployment ;
72
73
const { sourceAssetsFolders } = this . options ;
73
74
const { _parent_config } = this . activeDeployment ;
74
75
const appAssetsFolder = path . resolve ( app_data . output_path , "assets" ) ;
75
- fs . ensureDirSync ( appAssetsFolder ) ;
76
+ await fs . mkdir ( appAssetsFolder , { recursive : true } ) ;
76
77
// Populate merged assets staging to run quality control checks and generate full contents lists
77
- this . stagingDir = createTempDir ( ) ;
78
+ this . stagingDir = await createTempDirAsync ( ) ;
78
79
const mergedAssetsHashmap : IContentsEntryHashmap = { } ;
79
80
80
81
// Include parent config in list of source assets
81
82
// TODO - may want to reconsider this functionality in the future given ability to use
82
83
// multiple input sources instead
83
84
if ( _parent_config ) {
84
85
const parentAssetsFolder = path . resolve ( _parent_config . _workspace_path , "app_data" , "assets" ) ;
85
- fs . ensureDirSync ( parentAssetsFolder ) ;
86
+ await fs . mkdir ( parentAssetsFolder ) ;
86
87
sourceAssetsFolders . unshift ( parentAssetsFolder ) ;
87
88
}
88
89
@@ -111,9 +112,9 @@ export class AssetsPostProcessor {
111
112
112
113
// copy deployment assets to main folder and write merged contents file
113
114
replicateDir ( this . stagingDir , appAssetsFolder ) ;
114
- fs . removeSync ( this . stagingDir ) ;
115
+ await fs . rm ( this . stagingDir , { recursive : true , force : true } ) ;
115
116
116
- this . writeAssetsContentsFiles ( appAssetsFolder , tracked , untracked ) ;
117
+ await this . writeAssetsContentsFiles ( appAssetsFolder , tracked , untracked ) ;
117
118
console . log ( chalk . green ( "Asset Process Complete" ) ) ;
118
119
}
119
120
@@ -123,34 +124,37 @@ export class AssetsPostProcessor {
123
124
* `untracked-assets.json` provides a summary of all assets that appear in translation or theme folders
124
125
* but do not have corresponding default global entries (only populated if entries exist)
125
126
*/
126
- private writeAssetsContentsFiles (
127
+ private async writeAssetsContentsFiles (
127
128
appAssetsFolder : string ,
128
129
assetEntries : IAssetEntryHashmap ,
129
130
missingEntries : IAssetEntryHashmap
130
131
) {
131
- if ( fs . existsSync ( appAssetsFolder ) ) {
132
+ if ( await fse . pathExists ( appAssetsFolder ) ) {
132
133
const contentsTarget = path . resolve ( appAssetsFolder , "contents.json" ) ;
133
- fs . writeFileSync ( contentsTarget , JSON . stringify ( sortJsonKeys ( assetEntries ) , null , 2 ) ) ;
134
+ await fs . writeFile ( contentsTarget , JSON . stringify ( sortJsonKeys ( assetEntries ) , null , 2 ) ) ;
134
135
const missingTarget = path . resolve ( appAssetsFolder , "untracked-assets.json" ) ;
135
- if ( fs . existsSync ( missingTarget ) ) fs . removeSync ( missingTarget ) ;
136
+ if ( await fse . pathExists ( missingTarget ) ) {
137
+ await fs . rm ( missingTarget , { recursive : true , force : true } ) ;
138
+ }
139
+
136
140
if ( Object . keys ( missingEntries ) . length > 0 ) {
137
141
logWarning ( {
138
142
msg1 : "Assets override found without corresponding entry" ,
139
143
msg2 : Object . keys ( missingEntries ) . join ( "\n" ) ,
140
144
} ) ;
141
- fs . writeFileSync ( missingTarget , JSON . stringify ( sortJsonKeys ( missingEntries ) , null , 2 ) ) ;
145
+ await fs . writeFile ( missingTarget , JSON . stringify ( sortJsonKeys ( missingEntries ) , null , 2 ) ) ;
142
146
}
143
147
}
144
148
}
145
149
146
- private mergeParentAssets ( sourceAssets : { [ relativePath : string ] : IContentsEntry } ) {
150
+ private async mergeParentAssets ( sourceAssets : { [ relativePath : string ] : IContentsEntry } ) {
147
151
const { _parent_config } = this . activeDeployment ;
148
152
const mergedAssets = { ...sourceAssets } ;
149
153
150
154
// If parent config exists also include any parent files that would not be overwritten by source
151
155
if ( _parent_config ) {
152
156
const parentAssetsFolder = path . resolve ( _parent_config . _workspace_path , "app_data" , "assets" ) ;
153
- fs . ensureDirSync ( parentAssetsFolder ) ;
157
+ await fs . mkdir ( parentAssetsFolder ) ;
154
158
const parentAssets = generateFolderFlatMap ( parentAssetsFolder , { includeLocalPath : true } ) ;
155
159
const filteredParentAssets = this . filterAppAssets ( parentAssets ) ;
156
160
Object . keys ( filteredParentAssets ) . forEach ( ( relativePath ) => {
0 commit comments