@webiny/api-headless-cms-import-export 5.43.0-beta.0 → 5.43.0-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webiny/api-headless-cms-import-export",
3
- "version": "5.43.0-beta.0",
3
+ "version": "5.43.0-beta.2",
4
4
  "main": "index.js",
5
5
  "description": "Import / Export for Webiny Headless CMS",
6
6
  "keywords": [
@@ -14,14 +14,14 @@
14
14
  "license": "MIT",
15
15
  "dependencies": {
16
16
  "@smithy/node-http-handler": "2.1.6",
17
- "@webiny/api-file-manager": "5.43.0-beta.0",
18
- "@webiny/api-headless-cms": "5.43.0-beta.0",
19
- "@webiny/aws-sdk": "5.43.0-beta.0",
20
- "@webiny/error": "5.43.0-beta.0",
21
- "@webiny/handler-graphql": "5.43.0-beta.0",
22
- "@webiny/plugins": "5.43.0-beta.0",
23
- "@webiny/tasks": "5.43.0-beta.0",
24
- "@webiny/utils": "5.43.0-beta.0",
17
+ "@webiny/api-file-manager": "5.43.0-beta.2",
18
+ "@webiny/api-headless-cms": "5.43.0-beta.2",
19
+ "@webiny/aws-sdk": "5.43.0-beta.2",
20
+ "@webiny/error": "5.43.0-beta.2",
21
+ "@webiny/handler-graphql": "5.43.0-beta.2",
22
+ "@webiny/plugins": "5.43.0-beta.2",
23
+ "@webiny/tasks": "5.43.0-beta.2",
24
+ "@webiny/utils": "5.43.0-beta.2",
25
25
  "archiver": "7.0.1",
26
26
  "bytes": "3.1.2",
27
27
  "uniqid": "5.4.0",
@@ -31,22 +31,21 @@
31
31
  "devDependencies": {
32
32
  "@types/adm-zip": "0.5.5",
33
33
  "@types/unzipper": "0.10.10",
34
- "@webiny/api": "5.43.0-beta.0",
35
- "@webiny/api-admin-users": "5.43.0-beta.0",
36
- "@webiny/api-i18n": "5.43.0-beta.0",
37
- "@webiny/api-security": "5.43.0-beta.0",
38
- "@webiny/api-tenancy": "5.43.0-beta.0",
39
- "@webiny/api-wcp": "5.43.0-beta.0",
40
- "@webiny/handler": "5.43.0-beta.0",
41
- "@webiny/handler-aws": "5.43.0-beta.0",
34
+ "@webiny/api": "5.43.0-beta.2",
35
+ "@webiny/api-admin-users": "5.43.0-beta.2",
36
+ "@webiny/api-i18n": "5.43.0-beta.2",
37
+ "@webiny/api-security": "5.43.0-beta.2",
38
+ "@webiny/api-tenancy": "5.43.0-beta.2",
39
+ "@webiny/api-wcp": "5.43.0-beta.2",
40
+ "@webiny/handler": "5.43.0-beta.2",
41
+ "@webiny/handler-aws": "5.43.0-beta.2",
42
42
  "@webiny/plugins": "0.0.0",
43
- "@webiny/project-utils": "5.43.0-beta.0",
44
- "@webiny/wcp": "5.43.0-beta.0",
43
+ "@webiny/project-utils": "5.43.0-beta.2",
44
+ "@webiny/wcp": "5.43.0-beta.2",
45
45
  "adm-zip": "0.5.16",
46
46
  "aws-sdk-client-mock": "4.1.0",
47
47
  "graphql": "15.9.0",
48
- "ttypescript": "1.5.15",
49
- "typescript": "4.9.5"
48
+ "typescript": "5.3.3"
50
49
  },
51
50
  "scripts": {
52
51
  "build": "node ../cli/bin.js run build",
@@ -56,5 +55,5 @@
56
55
  "access": "public",
57
56
  "directory": "dist"
58
57
  },
59
- "gitHead": "abfb4ec7b4391f2414cd22f2c5539c84b6c8abbf"
58
+ "gitHead": "dbed8c263df662358aca18c3cf452cd280f2dfd9"
60
59
  }
@@ -1 +1 @@
1
- {"version":3,"names":["_clientS","require","_error","_bytes","_interopRequireDefault","_MultipartUploadHandlerPauseResult","_MultipartUploadHandlerAbortResult","_MultipartUploadHandlerCompleteResult","_MultipartUploadHandlerAddResult","MIN_BUFFER_SIZE","bytes","parse","getMinBufferSize","minBufferSize","size","MultipartUploadHandler","buffer","bufferLength","constructor","params","uploadId","length","WebinyError","message","code","filename","client","bucket","parts","getBuffer","add","push","createMultipartUploadHandlerAddResult","written","pause","body","Buffer","concat","write","complete","cmd","CompleteMultipartUploadCommand","UploadId","Bucket","Key","MultipartUpload","Parts","map","part","ETag","tag","PartNumber","partNumber","result","send","createMultipartUploadHandlerCompleteResult","abort","AbortMultipartUploadCommand","createMultipartUploadHandlerAbortResult","createMultipartUploadHandlerPauseResult","nextPart","getNextPartNumber","UploadPartCommand","Body","replaceAll","getUploadId","at","exports","createMultipartUpload"],"sources":["MultipartUploadHandler.ts"],"sourcesContent":["import type { S3Client } from \"@webiny/aws-sdk/client-s3\";\nimport {\n AbortMultipartUploadCommand,\n CompleteMultipartUploadCommand,\n UploadPartCommand\n} from \"@webiny/aws-sdk/client-s3\";\nimport { WebinyError } from \"@webiny/error\";\nimport bytes from \"bytes\";\nimport type {\n ICreateMultipartUploadHandler,\n IMultipartUploadHandler,\n IMultipartUploadHandlerAbortResult,\n IMultipartUploadHandlerAddParams,\n IMultipartUploadHandlerAddResult,\n IMultipartUploadHandlerCompleteResult,\n IMultipartUploadHandlerGetBufferResult,\n IMultipartUploadHandlerParams,\n IMultipartUploadHandlerParamsMinBufferSize,\n IMultipartUploadHandlerPauseResult,\n IPart\n} from \"../abstractions/MultipartUploadHandler\";\nimport { createMultipartUploadHandlerPauseResult } from \"./MultipartUploadHandlerPauseResult\";\nimport { createMultipartUploadHandlerAbortResult } from \"./MultipartUploadHandlerAbortResult\";\nimport { createMultipartUploadHandlerCompleteResult } from \"./MultipartUploadHandlerCompleteResult\";\nimport { createMultipartUploadHandlerAddResult } from \"./MultipartUploadHandlerAddResult\";\n\n/**\n * Minimum we can send into the S3 is 5MB.\n * We can modify to have this value bigger if required.\n */\nconst MIN_BUFFER_SIZE = bytes.parse(\"5MB\") as number;\n\nconst getMinBufferSize = (minBufferSize?: IMultipartUploadHandlerParamsMinBufferSize): number => {\n if (!minBufferSize) {\n return MIN_BUFFER_SIZE;\n }\n const size = typeof minBufferSize === \"number\" ? minBufferSize : bytes.parse(minBufferSize);\n if (size && size >= MIN_BUFFER_SIZE) {\n return size;\n }\n return MIN_BUFFER_SIZE;\n};\n\nexport class MultipartUploadHandler implements IMultipartUploadHandler {\n private readonly uploadId: string;\n private readonly client: S3Client;\n private readonly bucket: string;\n private readonly filename: string;\n private readonly minBufferSize: IMultipartUploadHandlerParamsMinBufferSize;\n private readonly parts: IPart[];\n\n private buffer: Buffer[] = [];\n private bufferLength = 0;\n\n public constructor(params: IMultipartUploadHandlerParams) {\n if (!params.uploadId?.length) {\n throw new WebinyError({\n message: `Missing \"uploadId\" in the multipart upload handler.`,\n code: \"MULTIPART_UPLOAD_ERROR\"\n });\n } else if (!params.filename?.length) {\n throw new WebinyError({\n message: `Missing \"filename\" in the multipart upload handler.`,\n code: \"MULTIPART_UPLOAD_ERROR\"\n });\n }\n this.uploadId = params.uploadId;\n this.client = params.client;\n this.bucket = params.bucket;\n this.filename = params.filename;\n this.parts = params.parts || [];\n this.minBufferSize = getMinBufferSize(params.minBufferSize);\n }\n\n public getBuffer(): IMultipartUploadHandlerGetBufferResult {\n return {\n buffer: this.buffer,\n bufferLength: this.bufferLength\n };\n }\n\n public async add(buffer: Buffer): Promise<IMultipartUploadHandlerAddResult> {\n this.buffer.push(buffer);\n this.bufferLength = this.bufferLength + buffer.length;\n if (this.bufferLength < this.minBufferSize) {\n return createMultipartUploadHandlerAddResult({\n parts: this.parts,\n written: false,\n pause: () => {\n return this.pause();\n }\n });\n }\n const bufferLength = this.bufferLength;\n\n const body = Buffer.concat(this.buffer, bufferLength);\n this.buffer = [];\n this.bufferLength = 0;\n await this.write({\n body,\n bufferLength\n });\n\n return createMultipartUploadHandlerAddResult({\n parts: this.parts,\n written: true,\n pause: () => {\n return this.pause();\n }\n });\n }\n\n public async complete(): Promise<IMultipartUploadHandlerCompleteResult> {\n const bufferLength = this.bufferLength;\n const body = Buffer.concat(this.buffer, bufferLength);\n this.buffer = [];\n this.bufferLength = 0;\n\n await this.write({\n body,\n bufferLength\n });\n\n if (this.parts.length === 0) {\n throw new WebinyError({\n message: `Failed to complete the upload, no parts were uploaded.`,\n code: \"S3_ERROR\"\n });\n }\n\n const cmd = new CompleteMultipartUploadCommand({\n UploadId: this.uploadId,\n Bucket: this.bucket,\n Key: this.filename,\n MultipartUpload: {\n Parts: this.parts.map(part => {\n return {\n ETag: part.tag,\n PartNumber: part.partNumber\n };\n })\n }\n });\n const result = await this.client.send(cmd);\n\n return createMultipartUploadHandlerCompleteResult({\n result,\n uploadId: this.uploadId,\n parts: this.parts\n });\n }\n\n public async abort(): Promise<IMultipartUploadHandlerAbortResult> {\n const cmd = new AbortMultipartUploadCommand({\n UploadId: this.uploadId,\n Bucket: this.bucket,\n Key: this.filename\n });\n const result = await this.client.send(cmd);\n return createMultipartUploadHandlerAbortResult({\n result,\n uploadId: this.uploadId,\n parts: this.parts\n });\n }\n\n private async pause(): Promise<IMultipartUploadHandlerPauseResult> {\n if (this.bufferLength > 0) {\n throw new WebinyError({\n message: `Failed to pause the upload, buffer was not empty.`,\n code: \"S3_ERROR\"\n });\n } else if (this.parts.length === 0) {\n throw new WebinyError({\n message: `Failed to pause the upload, no parts were uploaded.`,\n code: \"S3_ERROR\"\n });\n }\n\n return createMultipartUploadHandlerPauseResult({\n uploadId: this.uploadId,\n parts: this.parts\n });\n }\n\n private async write(params: IMultipartUploadHandlerAddParams): Promise<boolean> {\n if (params.bufferLength <= 0) {\n return false;\n }\n\n const nextPart = this.getNextPartNumber();\n const cmd = new UploadPartCommand({\n Bucket: this.bucket,\n Key: this.filename,\n UploadId: this.uploadId,\n Body: params.body,\n PartNumber: nextPart\n });\n const result = await this.client.send(cmd);\n if (!result.ETag) {\n throw new WebinyError({\n message: `Failed to upload part: ${nextPart}`,\n code: \"S3_ERROR\"\n });\n }\n this.parts.push({\n partNumber: nextPart,\n tag: result.ETag.replaceAll('\"', \"\")\n });\n return true;\n }\n\n public getUploadId(): string {\n return this.uploadId;\n }\n\n public getNextPartNumber(): number {\n if (this.parts.length === 0) {\n return 1;\n }\n const part = this.parts.at(-1);\n if (!part) {\n return 1;\n }\n return part.partNumber + 1;\n }\n}\n\nexport const createMultipartUpload: ICreateMultipartUploadHandler = params => {\n return new MultipartUploadHandler(params);\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_clientS","require","_error","_bytes","_interopRequireDefault","_MultipartUploadHandlerPauseResult","_MultipartUploadHandlerAbortResult","_MultipartUploadHandlerCompleteResult","_MultipartUploadHandlerAddResult","MIN_BUFFER_SIZE","bytes","parse","getMinBufferSize","minBufferSize","size","MultipartUploadHandler","buffer","bufferLength","constructor","params","uploadId","length","WebinyError","message","code","filename","client","bucket","parts","getBuffer","add","push","createMultipartUploadHandlerAddResult","written","pause","body","Buffer","concat","write","complete","cmd","CompleteMultipartUploadCommand","UploadId","Bucket","Key","MultipartUpload","Parts","map","part","ETag","tag","PartNumber","partNumber","result","send","createMultipartUploadHandlerCompleteResult","abort","AbortMultipartUploadCommand","createMultipartUploadHandlerAbortResult","createMultipartUploadHandlerPauseResult","nextPart","getNextPartNumber","UploadPartCommand","Body","replaceAll","getUploadId","at","exports","createMultipartUpload"],"sources":["MultipartUploadHandler.ts"],"sourcesContent":["import type { S3Client } from \"@webiny/aws-sdk/client-s3\";\nimport {\n AbortMultipartUploadCommand,\n CompleteMultipartUploadCommand,\n UploadPartCommand\n} from \"@webiny/aws-sdk/client-s3\";\nimport { WebinyError } from \"@webiny/error\";\nimport bytes from \"bytes\";\nimport type {\n ICreateMultipartUploadHandler,\n IMultipartUploadHandler,\n IMultipartUploadHandlerAbortResult,\n IMultipartUploadHandlerAddParams,\n IMultipartUploadHandlerAddResult,\n IMultipartUploadHandlerCompleteResult,\n IMultipartUploadHandlerGetBufferResult,\n IMultipartUploadHandlerParams,\n IMultipartUploadHandlerParamsMinBufferSize,\n IMultipartUploadHandlerPauseResult,\n IPart\n} from \"../abstractions/MultipartUploadHandler\";\nimport { createMultipartUploadHandlerPauseResult } from \"./MultipartUploadHandlerPauseResult\";\nimport { createMultipartUploadHandlerAbortResult } from \"./MultipartUploadHandlerAbortResult\";\nimport { createMultipartUploadHandlerCompleteResult } from \"./MultipartUploadHandlerCompleteResult\";\nimport { createMultipartUploadHandlerAddResult } from \"./MultipartUploadHandlerAddResult\";\n\n/**\n * Minimum we can send into the S3 is 5MB.\n * We can modify to have this value bigger if required.\n */\nconst MIN_BUFFER_SIZE = bytes.parse(\"5MB\") as number;\n\nconst getMinBufferSize = (minBufferSize?: IMultipartUploadHandlerParamsMinBufferSize): number => {\n if (!minBufferSize) {\n return MIN_BUFFER_SIZE;\n }\n const size = typeof minBufferSize === \"number\" ? minBufferSize : bytes.parse(minBufferSize);\n if (size && size >= MIN_BUFFER_SIZE) {\n return size;\n }\n return MIN_BUFFER_SIZE;\n};\n\nexport class MultipartUploadHandler implements IMultipartUploadHandler {\n private readonly uploadId: string;\n private readonly client: S3Client;\n private readonly bucket: string;\n private readonly filename: string;\n private readonly minBufferSize: number;\n private readonly parts: IPart[];\n\n private buffer: Buffer[] = [];\n private bufferLength = 0;\n\n public constructor(params: IMultipartUploadHandlerParams) {\n if (!params.uploadId?.length) {\n throw new WebinyError({\n message: `Missing \"uploadId\" in the multipart upload handler.`,\n code: \"MULTIPART_UPLOAD_ERROR\"\n });\n } else if (!params.filename?.length) {\n throw new WebinyError({\n message: `Missing \"filename\" in the multipart upload handler.`,\n code: \"MULTIPART_UPLOAD_ERROR\"\n });\n }\n this.uploadId = params.uploadId;\n this.client = params.client;\n this.bucket = params.bucket;\n this.filename = params.filename;\n this.parts = params.parts || [];\n this.minBufferSize = getMinBufferSize(params.minBufferSize);\n }\n\n public getBuffer(): IMultipartUploadHandlerGetBufferResult {\n return {\n buffer: this.buffer,\n bufferLength: this.bufferLength\n };\n }\n\n public async add(buffer: Buffer): Promise<IMultipartUploadHandlerAddResult> {\n this.buffer.push(buffer);\n this.bufferLength = this.bufferLength + buffer.length;\n if (this.bufferLength < this.minBufferSize) {\n return createMultipartUploadHandlerAddResult({\n parts: this.parts,\n written: false,\n pause: () => {\n return this.pause();\n }\n });\n }\n const bufferLength = this.bufferLength;\n\n const body = Buffer.concat(this.buffer, bufferLength);\n this.buffer = [];\n this.bufferLength = 0;\n await this.write({\n body,\n bufferLength\n });\n\n return createMultipartUploadHandlerAddResult({\n parts: this.parts,\n written: true,\n pause: () => {\n return this.pause();\n }\n });\n }\n\n public async complete(): Promise<IMultipartUploadHandlerCompleteResult> {\n const bufferLength = this.bufferLength;\n const body = Buffer.concat(this.buffer, bufferLength);\n this.buffer = [];\n this.bufferLength = 0;\n\n await this.write({\n body,\n bufferLength\n });\n\n if (this.parts.length === 0) {\n throw new WebinyError({\n message: `Failed to complete the upload, no parts were uploaded.`,\n code: \"S3_ERROR\"\n });\n }\n\n const cmd = new CompleteMultipartUploadCommand({\n UploadId: this.uploadId,\n Bucket: this.bucket,\n Key: this.filename,\n MultipartUpload: {\n Parts: this.parts.map(part => {\n return {\n ETag: part.tag,\n PartNumber: part.partNumber\n };\n })\n }\n });\n const result = await this.client.send(cmd);\n\n return createMultipartUploadHandlerCompleteResult({\n result,\n uploadId: this.uploadId,\n parts: this.parts\n });\n }\n\n public async abort(): Promise<IMultipartUploadHandlerAbortResult> {\n const cmd = new AbortMultipartUploadCommand({\n UploadId: this.uploadId,\n Bucket: this.bucket,\n Key: this.filename\n });\n const result = await this.client.send(cmd);\n return createMultipartUploadHandlerAbortResult({\n result,\n uploadId: this.uploadId,\n parts: this.parts\n });\n }\n\n private async pause(): Promise<IMultipartUploadHandlerPauseResult> {\n if (this.bufferLength > 0) {\n throw new WebinyError({\n message: `Failed to pause the upload, buffer was not empty.`,\n code: \"S3_ERROR\"\n });\n } else if (this.parts.length === 0) {\n throw new WebinyError({\n message: `Failed to pause the upload, no parts were uploaded.`,\n code: \"S3_ERROR\"\n });\n }\n\n return createMultipartUploadHandlerPauseResult({\n uploadId: this.uploadId,\n parts: this.parts\n });\n }\n\n private async write(params: IMultipartUploadHandlerAddParams): Promise<boolean> {\n if (params.bufferLength <= 0) {\n return false;\n }\n\n const nextPart = this.getNextPartNumber();\n const cmd = new UploadPartCommand({\n Bucket: this.bucket,\n Key: this.filename,\n UploadId: this.uploadId,\n Body: params.body,\n PartNumber: nextPart\n });\n const result = await this.client.send(cmd);\n if (!result.ETag) {\n throw new WebinyError({\n message: `Failed to upload part: ${nextPart}`,\n code: \"S3_ERROR\"\n });\n }\n this.parts.push({\n partNumber: nextPart,\n tag: result.ETag.replaceAll('\"', \"\")\n });\n return true;\n }\n\n public getUploadId(): string {\n return this.uploadId;\n }\n\n public getNextPartNumber(): number {\n if (this.parts.length === 0) {\n return 1;\n }\n const part = this.parts.at(-1);\n if (!part) {\n return 1;\n }\n return part.partNumber + 1;\n }\n}\n\nexport const createMultipartUpload: ICreateMultipartUploadHandler = params => {\n return new MultipartUploadHandler(params);\n};\n"],"mappings":"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","ignoreList":[]}