1
1
import * as API from "api/api"
2
2
import { TemplateVersion } from "api/typesGenerated"
3
- import untar , { File as UntarFile } from "js-untar"
4
3
import { FileTree , setFile } from "./filetree"
4
+ import { TarReader } from "./tar"
5
5
6
6
/**
7
7
* Content by filename
@@ -10,32 +10,16 @@ export type TemplateVersionFiles = Record<string, string>
10
10
11
11
export const getTemplateVersionFiles = async (
12
12
version : TemplateVersion ,
13
- allowedExtensions : string [ ] ,
14
- allowedFiles : string [ ] ,
15
13
) : Promise < TemplateVersionFiles > => {
16
14
const files : TemplateVersionFiles = { }
17
15
const tarFile = await API . getFile ( version . job . file_id )
18
- const blobs : Record < string , Blob > = { }
19
-
20
- await untar ( tarFile ) . then ( undefined , undefined , async ( file ) => {
21
- const paths = file . name . split ( "/" )
22
- const filename = paths [ paths . length - 1 ]
23
- const [ _ , extension ] = filename . split ( "." )
24
-
25
- if (
26
- allowedExtensions . includes ( extension ) ||
27
- allowedFiles . includes ( filename )
28
- ) {
29
- blobs [ filename ] = file . blob
16
+ const tarReader = new TarReader ( )
17
+ await tarReader . readFile ( tarFile )
18
+ for ( const file of tarReader . fileInfo ) {
19
+ if ( isAllowedFile ( file . name ) ) {
20
+ files [ file . name ] = tarReader . getTextFile ( file . name ) as string
30
21
}
31
- } )
32
-
33
- await Promise . all (
34
- Object . entries ( blobs ) . map ( async ( [ filename , blob ] ) => {
35
- files [ filename ] = await blob . text ( )
36
- } ) ,
37
- )
38
-
22
+ }
39
23
return files
40
24
}
41
25
@@ -46,23 +30,17 @@ export const isAllowedFile = (name: string) => {
46
30
}
47
31
48
32
export const createTemplateVersionFileTree = async (
49
- untarFiles : UntarFile [ ] ,
33
+ tarReader : TarReader ,
50
34
) : Promise < FileTree > => {
51
35
let fileTree : FileTree = { }
52
- const blobs : Record < string , Blob > = { }
53
-
54
- for ( const untarFile of untarFiles ) {
55
- if ( isAllowedFile ( untarFile . name ) ) {
56
- blobs [ untarFile . name ] = untarFile . blob
36
+ for ( const file of tarReader . fileInfo ) {
37
+ if ( isAllowedFile ( file . name ) ) {
38
+ fileTree = setFile (
39
+ file . name ,
40
+ tarReader . getTextFile ( file . name ) as string ,
41
+ fileTree ,
42
+ )
57
43
}
58
44
}
59
-
60
- await Promise . all (
61
- Object . entries ( blobs ) . map ( async ( [ fullPath , blob ] ) => {
62
- const content = await blob . text ( )
63
- fileTree = setFile ( fullPath , content , fileTree )
64
- } ) ,
65
- )
66
-
67
45
return fileTree
68
46
}
0 commit comments