2022-09-19 12:00:09 -04:00
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0
2023-10-11 11:30:41 -04:00
2024-10-16 11:53:18 -04:00
import { unlink , readFile } from "node:fs/promises" ;
2022-09-19 12:00:09 -04:00
import {
readdirSync ,
createWriteStream ,
readFileSync ,
writeFileSync ,
2022-10-17 16:23:34 -04:00
existsSync ,
mkdirSync ,
2024-10-16 11:53:18 -04:00
} from "node:fs" ;
2022-09-19 12:00:09 -04:00
import archiver from "archiver" ;
2024-10-16 11:53:18 -04:00
import { fileURLToPath } from "node:url" ;
2024-10-22 09:41:55 -04:00
import { logger } from "./util-log.js" ;
2023-10-11 11:30:41 -04:00
import { splitMapTrim } from "./util-string.js" ;
2022-09-19 12:00:09 -04:00
2023-10-11 11:30:41 -04:00
/**
* @param {string} fileNames
*/
export const deleteFiles = ( fileNames ) => Promise . all ( fileNames . map ( unlink ) ) ;
2022-09-19 12:00:09 -04:00
S3 Cleanup (#4475)
* move and rename s3 files
* refactor copy-object example, add tests, clean up metadata
* refactor create-bucket example, add tests, clean up metadata
* refactor delete-bucket-policy example, add tests, clean up metadata
* refactor put-bucket-website example, add tests, clean up metadata
* refactor delete-bucket-website example, add tests, clean up metadata
* refactor delete-bucket example, add tests, clean up metadata
* refactor put-object example, add tests, clean up metadata
* refactor delete-object example, add tests, clean up metadata
* refactor put-bucket-policy example, add tests, clean up metadata
* refactor put-bucket-cors example, add tests, clean up metadata
* refactor get-bucket-cors example, add tests, clean up metadata
* refactor get-bucket-policy example, add tests, clean up metadata
* refactor put-bucket-acl, add test, update metadata
* refactor list-objects, add test, update metadata
* refactor list-buckets, add test, update metadata
* refactor get-object, add test, update metadata
* refactor get-bucket-website, add test, update metadata
* refactor delete-objects, add test, update metadata
* start basic scenario
* add upload, list, copy, delete, and empty steps to s3 example
* add upload, list, copy, delete, and empty steps to s3 example
* finish basic scenario
* fix malformed snippets
* clean up some excerpt descriptions
* update multipart and create/list/delete scenarios
* update presigned url examples
* update README
* update list-objects to handle over 1000 objects
* add web-example and test out deprecating snippets
* add readme reference to new media items
* copy editing
2023-03-01 15:47:39 -05:00
// snippet-start:[javascript.v3.utils.dirnameFromMetaUrl]
2023-10-11 11:30:41 -04:00
export const dirnameFromMetaUrl = ( metaUrl ) =>
fileURLToPath ( new URL ( "." , metaUrl ) ) ;
S3 Cleanup (#4475)
* move and rename s3 files
* refactor copy-object example, add tests, clean up metadata
* refactor create-bucket example, add tests, clean up metadata
* refactor delete-bucket-policy example, add tests, clean up metadata
* refactor put-bucket-website example, add tests, clean up metadata
* refactor delete-bucket-website example, add tests, clean up metadata
* refactor delete-bucket example, add tests, clean up metadata
* refactor put-object example, add tests, clean up metadata
* refactor delete-object example, add tests, clean up metadata
* refactor put-bucket-policy example, add tests, clean up metadata
* refactor put-bucket-cors example, add tests, clean up metadata
* refactor get-bucket-cors example, add tests, clean up metadata
* refactor get-bucket-policy example, add tests, clean up metadata
* refactor put-bucket-acl, add test, update metadata
* refactor list-objects, add test, update metadata
* refactor list-buckets, add test, update metadata
* refactor get-object, add test, update metadata
* refactor get-bucket-website, add test, update metadata
* refactor delete-objects, add test, update metadata
* start basic scenario
* add upload, list, copy, delete, and empty steps to s3 example
* add upload, list, copy, delete, and empty steps to s3 example
* finish basic scenario
* fix malformed snippets
* clean up some excerpt descriptions
* update multipart and create/list/delete scenarios
* update presigned url examples
* update README
* update list-objects to handle over 1000 objects
* add web-example and test out deprecating snippets
* add readme reference to new media items
* copy editing
2023-03-01 15:47:39 -05:00
// snippet-end:[javascript.v3.utils.dirnameFromMetaUrl]
2022-09-19 12:00:09 -04:00
2023-10-11 11:30:41 -04:00
export const getNewLineDelimitedEntries = ( str ) =>
splitMapTrim ( "\n" , getTmp ( str ) || "" ) ;
2022-10-13 09:37:43 -04:00
2023-10-11 11:30:41 -04:00
export const getTmp = ( name ) => {
try {
return readFileSync ( ` ./ ${ name } .tmp ` , { encoding : "utf-8" } ) ;
} catch ( e ) {
return null ;
}
} ;
2022-09-19 12:00:09 -04:00
S3 Cleanup (#4475)
* move and rename s3 files
* refactor copy-object example, add tests, clean up metadata
* refactor create-bucket example, add tests, clean up metadata
* refactor delete-bucket-policy example, add tests, clean up metadata
* refactor put-bucket-website example, add tests, clean up metadata
* refactor delete-bucket-website example, add tests, clean up metadata
* refactor delete-bucket example, add tests, clean up metadata
* refactor put-object example, add tests, clean up metadata
* refactor delete-object example, add tests, clean up metadata
* refactor put-bucket-policy example, add tests, clean up metadata
* refactor put-bucket-cors example, add tests, clean up metadata
* refactor get-bucket-cors example, add tests, clean up metadata
* refactor get-bucket-policy example, add tests, clean up metadata
* refactor put-bucket-acl, add test, update metadata
* refactor list-objects, add test, update metadata
* refactor list-buckets, add test, update metadata
* refactor get-object, add test, update metadata
* refactor get-bucket-website, add test, update metadata
* refactor delete-objects, add test, update metadata
* start basic scenario
* add upload, list, copy, delete, and empty steps to s3 example
* add upload, list, copy, delete, and empty steps to s3 example
* finish basic scenario
* fix malformed snippets
* clean up some excerpt descriptions
* update multipart and create/list/delete scenarios
* update presigned url examples
* update README
* update list-objects to handle over 1000 objects
* add web-example and test out deprecating snippets
* add readme reference to new media items
* copy editing
2023-03-01 15:47:39 -05:00
export const setTmp = ( name , data ) =>
2022-09-19 12:00:09 -04:00
writeFileSync ( ` ./ ${ name } .tmp ` , data , { encoding : "utf-8" } ) ;
S3 Cleanup (#4475)
* move and rename s3 files
* refactor copy-object example, add tests, clean up metadata
* refactor create-bucket example, add tests, clean up metadata
* refactor delete-bucket-policy example, add tests, clean up metadata
* refactor put-bucket-website example, add tests, clean up metadata
* refactor delete-bucket-website example, add tests, clean up metadata
* refactor delete-bucket example, add tests, clean up metadata
* refactor put-object example, add tests, clean up metadata
* refactor delete-object example, add tests, clean up metadata
* refactor put-bucket-policy example, add tests, clean up metadata
* refactor put-bucket-cors example, add tests, clean up metadata
* refactor get-bucket-cors example, add tests, clean up metadata
* refactor get-bucket-policy example, add tests, clean up metadata
* refactor put-bucket-acl, add test, update metadata
* refactor list-objects, add test, update metadata
* refactor list-buckets, add test, update metadata
* refactor get-object, add test, update metadata
* refactor get-bucket-website, add test, update metadata
* refactor delete-objects, add test, update metadata
* start basic scenario
* add upload, list, copy, delete, and empty steps to s3 example
* add upload, list, copy, delete, and empty steps to s3 example
* finish basic scenario
* fix malformed snippets
* clean up some excerpt descriptions
* update multipart and create/list/delete scenarios
* update presigned url examples
* update README
* update list-objects to handle over 1000 objects
* add web-example and test out deprecating snippets
* add readme reference to new media items
* copy editing
2023-03-01 15:47:39 -05:00
export const handleZipWarning = ( resolve ) => ( w ) => {
2024-10-22 09:41:55 -04:00
logger . log ( w ) ;
2022-09-19 12:00:09 -04:00
resolve ( ) ;
} ;
S3 Cleanup (#4475)
* move and rename s3 files
* refactor copy-object example, add tests, clean up metadata
* refactor create-bucket example, add tests, clean up metadata
* refactor delete-bucket-policy example, add tests, clean up metadata
* refactor put-bucket-website example, add tests, clean up metadata
* refactor delete-bucket-website example, add tests, clean up metadata
* refactor delete-bucket example, add tests, clean up metadata
* refactor put-object example, add tests, clean up metadata
* refactor delete-object example, add tests, clean up metadata
* refactor put-bucket-policy example, add tests, clean up metadata
* refactor put-bucket-cors example, add tests, clean up metadata
* refactor get-bucket-cors example, add tests, clean up metadata
* refactor get-bucket-policy example, add tests, clean up metadata
* refactor put-bucket-acl, add test, update metadata
* refactor list-objects, add test, update metadata
* refactor list-buckets, add test, update metadata
* refactor get-object, add test, update metadata
* refactor get-bucket-website, add test, update metadata
* refactor delete-objects, add test, update metadata
* start basic scenario
* add upload, list, copy, delete, and empty steps to s3 example
* add upload, list, copy, delete, and empty steps to s3 example
* finish basic scenario
* fix malformed snippets
* clean up some excerpt descriptions
* update multipart and create/list/delete scenarios
* update presigned url examples
* update README
* update list-objects to handle over 1000 objects
* add web-example and test out deprecating snippets
* add readme reference to new media items
* copy editing
2023-03-01 15:47:39 -05:00
export const handleZipEnd = ( resolve , path ) => async ( ) => {
2024-10-22 09:41:55 -04:00
logger . log ( "Zipped successfully." ) ;
2022-09-19 12:00:09 -04:00
const buffer = await readFile ( path ) ;
resolve ( buffer ) ;
} ;
2023-10-11 11:30:41 -04:00
export const makeDir = ( dir ) => ( existsSync ( dir ) ? dir : mkdirSync ( dir ) ) ;
2022-10-17 16:23:34 -04:00
2023-10-11 11:30:41 -04:00
export const readLines = ( path ) => readFileSync ( path ) . toString ( ) . split ( "\n" ) ;
2022-10-17 16:23:34 -04:00
2023-10-11 11:30:41 -04:00
export const readSubdirSync = ( directory ) =>
readdirSync ( directory , { withFileTypes : true } )
. filter ( ( dirent ) => dirent . isDirectory ( ) )
. map ( ( dirent ) => dirent . name ) ;
2022-10-17 16:23:34 -04:00
S3 Cleanup (#4475)
* move and rename s3 files
* refactor copy-object example, add tests, clean up metadata
* refactor create-bucket example, add tests, clean up metadata
* refactor delete-bucket-policy example, add tests, clean up metadata
* refactor put-bucket-website example, add tests, clean up metadata
* refactor delete-bucket-website example, add tests, clean up metadata
* refactor delete-bucket example, add tests, clean up metadata
* refactor put-object example, add tests, clean up metadata
* refactor delete-object example, add tests, clean up metadata
* refactor put-bucket-policy example, add tests, clean up metadata
* refactor put-bucket-cors example, add tests, clean up metadata
* refactor get-bucket-cors example, add tests, clean up metadata
* refactor get-bucket-policy example, add tests, clean up metadata
* refactor put-bucket-acl, add test, update metadata
* refactor list-objects, add test, update metadata
* refactor list-buckets, add test, update metadata
* refactor get-object, add test, update metadata
* refactor get-bucket-website, add test, update metadata
* refactor delete-objects, add test, update metadata
* start basic scenario
* add upload, list, copy, delete, and empty steps to s3 example
* add upload, list, copy, delete, and empty steps to s3 example
* finish basic scenario
* fix malformed snippets
* clean up some excerpt descriptions
* update multipart and create/list/delete scenarios
* update presigned url examples
* update README
* update list-objects to handle over 1000 objects
* add web-example and test out deprecating snippets
* add readme reference to new media items
* copy editing
2023-03-01 15:47:39 -05:00
export const zip = ( inputPath ) =>
2022-09-19 12:00:09 -04:00
new Promise ( ( resolve , reject ) => {
try {
readdirSync ( inputPath ) ;
} catch ( err ) {
reject (
2023-10-02 12:43:28 -04:00
new Error (
` Cannot zip directory ${ inputPath } . Directory doesn't exist. ` ,
) ,
2022-09-19 12:00:09 -04:00
) ;
return ;
}
const archive = archiver ( "zip" ) ;
2024-10-22 09:41:55 -04:00
logger . log ( ` Zipping ${ inputPath } ... ` ) ;
2022-09-19 12:00:09 -04:00
const output = createWriteStream ( ` ${ inputPath } .zip ` ) ;
output . on ( "close" , handleZipEnd ( resolve , ` ${ inputPath } .zip ` ) ) ;
archive . pipe ( output ) ;
archive . on ( "error" , reject ) ;
archive . on ( "warning" , handleZipWarning ( resolve ) ) ;
archive . directory ( inputPath , false ) ;
archive . finalize ( ) ;
} ) ;