@@ -8,44 +8,51 @@ export function makeImagePersistencePlan(
8
8
imageOutputRootPath : string ,
9
9
imagePrefix : string
10
10
) : void {
11
- if ( imageSet . fileType ?. ext ) {
12
- // Since most images come from pasting screenshots, there isn't normally a filename. That's fine, we just make a hash of the url
13
- // Images that are stored by notion come to us with a complex url that changes over time, so we pick out the UUID that doesn't change. Example:
14
- // https://s3.us-west-2.amazonaws.com/secure.notion-static.com/d1058f46-4d2f-4292-8388-4ad393383439/Untitled.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45EIPT3X45%2F20220516%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20220516T233630Z&X-Amz-Expires=3600&X-Amz-Signature=f215704094fcc884d37073b0b108cf6d1c9da9b7d57a898da38bc30c30b4c4b5&X-Amz-SignedHeaders=host&x-id=GetObject
15
- // But around Sept 2023, they changed the url to be something like:
16
- // https://prod-files-secure.s3.us-west-2.amazonaws.com/d9a2b712-cf69-4bd6-9d65-87a4ceeacca2/d1bcdc8c-b065-4e40-9a11-392aabeb220e/Untitled.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45EIPT3X45%2F20230915%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20230915T161258Z&X-Amz-Expires=3600&X-Amz-Signature=28fca48e65fba86d539c3c4b7676fce1fa0857aa194f7b33dd4a468ecca6ab24&X-Amz-SignedHeaders=host&x-id=GetObject
17
- // The thing we want is the last UUID before the ?
11
+ const urlBeforeQuery = imageSet . primaryUrl . split ( "?" ) [ 0 ] ;
18
12
19
- const urlBeforeQuery = imageSet . primaryUrl . split ( "?" ) [ 0 ] ;
20
- const thingToHash = findLastUuid ( urlBeforeQuery ) ?? urlBeforeQuery ;
13
+ let imageFileExtension : string | undefined = imageSet . fileType ?. ext ;
14
+ if ( ! imageFileExtension ) {
15
+ // Try to get the extension from the url
16
+ imageFileExtension = urlBeforeQuery . split ( "." ) . pop ( ) ;
21
17
22
- const hash = hashOfString ( thingToHash ) ;
23
- imageSet . outputFileName = `${ hash } .${ imageSet . fileType . ext } ` ;
24
-
25
- imageSet . primaryFileOutputPath = Path . posix . join (
26
- imageOutputRootPath ?. length > 0
27
- ? imageOutputRootPath
28
- : imageSet . pathToParentDocument ! ,
29
- imageSet . outputFileName
30
- ) ;
31
-
32
- if ( imageOutputRootPath && imageSet . localizedUrls . length ) {
18
+ if ( ! imageFileExtension ) {
33
19
error (
34
- "imageOutputPath was declared, but one or more localizedUrls were found too. If you are going to localize screenshots, then you can't declare an imageOutputPath."
20
+ `Something wrong with the filetype extension on the blob we got from ${ imageSet . primaryUrl } `
35
21
) ;
36
22
exit ( 1 ) ;
37
23
}
24
+ }
25
+
26
+ // Since most images come from pasting screenshots, there isn't normally a filename. That's fine, we just make a hash of the url
27
+ // Images that are stored by notion come to us with a complex url that changes over time, so we pick out the UUID that doesn't change. Example:
28
+ // https://s3.us-west-2.amazonaws.com/secure.notion-static.com/d1058f46-4d2f-4292-8388-4ad393383439/Untitled.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45EIPT3X45%2F20220516%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20220516T233630Z&X-Amz-Expires=3600&X-Amz-Signature=f215704094fcc884d37073b0b108cf6d1c9da9b7d57a898da38bc30c30b4c4b5&X-Amz-SignedHeaders=host&x-id=GetObject
29
+ // But around Sept 2023, they changed the url to be something like:
30
+ // https://prod-files-secure.s3.us-west-2.amazonaws.com/d9a2b712-cf69-4bd6-9d65-87a4ceeacca2/d1bcdc8c-b065-4e40-9a11-392aabeb220e/Untitled.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45EIPT3X45%2F20230915%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20230915T161258Z&X-Amz-Expires=3600&X-Amz-Signature=28fca48e65fba86d539c3c4b7676fce1fa0857aa194f7b33dd4a468ecca6ab24&X-Amz-SignedHeaders=host&x-id=GetObject
31
+ // The thing we want is the last UUID before the ?
38
32
39
- imageSet . filePathToUseInMarkdown =
40
- ( imagePrefix ?. length > 0 ? imagePrefix : "." ) +
41
- "/" +
42
- imageSet . outputFileName ;
43
- } else {
33
+ const thingToHash = findLastUuid ( urlBeforeQuery ) ?? urlBeforeQuery ;
34
+
35
+ const hash = hashOfString ( thingToHash ) ;
36
+ imageSet . outputFileName = `${ hash } .${ imageFileExtension } ` ;
37
+
38
+ imageSet . primaryFileOutputPath = Path . posix . join (
39
+ imageOutputRootPath ?. length > 0
40
+ ? imageOutputRootPath
41
+ : imageSet . pathToParentDocument ! ,
42
+ imageSet . outputFileName
43
+ ) ;
44
+
45
+ if ( imageOutputRootPath && imageSet . localizedUrls . length ) {
44
46
error (
45
- `Something wrong with the filetype extension on the blob we got from ${ imageSet . primaryUrl } `
47
+ "imageOutputPath was declared, but one or more localizedUrls were found too. If you are going to localize screenshots, then you can't declare an imageOutputPath."
46
48
) ;
47
49
exit ( 1 ) ;
48
50
}
51
+
52
+ imageSet . filePathToUseInMarkdown =
53
+ ( imagePrefix ?. length > 0 ? imagePrefix : "." ) +
54
+ "/" +
55
+ imageSet . outputFileName ;
49
56
}
50
57
51
58
function findLastUuid ( url : string ) : string | null {
0 commit comments