@contember/client 2.0.0-alpha.3 → 2.0.0-alpha.5
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/dist/development/index.cjs +0 -4
- package/dist/development/index.cjs.map +1 -1
- package/dist/development/index.js +0 -4
- package/dist/development/index.js.map +1 -1
- package/dist/production/index.cjs +0 -4
- package/dist/production/index.cjs.map +1 -1
- package/dist/production/index.js +0 -4
- package/dist/production/index.js.map +1 -1
- package/dist/types/content/upload/index.d.ts +0 -6
- package/dist/types/content/upload/index.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +5 -6
- package/src/content/upload/index.ts +0 -6
- package/dist/development/content/upload/FileUploadError.cjs +0 -10
- package/dist/development/content/upload/FileUploadError.cjs.map +0 -1
- package/dist/development/content/upload/FileUploadError.js +0 -10
- package/dist/development/content/upload/FileUploadError.js.map +0 -1
- package/dist/development/content/upload/S3FileUploader.cjs +0 -107
- package/dist/development/content/upload/S3FileUploader.cjs.map +0 -1
- package/dist/development/content/upload/S3FileUploader.js +0 -107
- package/dist/development/content/upload/S3FileUploader.js.map +0 -1
- package/dist/development/utils/readFileAsArrayBuffer.cjs +0 -15
- package/dist/development/utils/readFileAsArrayBuffer.cjs.map +0 -1
- package/dist/development/utils/readFileAsArrayBuffer.js +0 -15
- package/dist/development/utils/readFileAsArrayBuffer.js.map +0 -1
- package/dist/production/content/upload/FileUploadError.cjs +0 -10
- package/dist/production/content/upload/FileUploadError.cjs.map +0 -1
- package/dist/production/content/upload/FileUploadError.js +0 -10
- package/dist/production/content/upload/FileUploadError.js.map +0 -1
- package/dist/production/content/upload/S3FileUploader.cjs +0 -107
- package/dist/production/content/upload/S3FileUploader.cjs.map +0 -1
- package/dist/production/content/upload/S3FileUploader.js +0 -107
- package/dist/production/content/upload/S3FileUploader.js.map +0 -1
- package/dist/production/utils/readFileAsArrayBuffer.cjs +0 -15
- package/dist/production/utils/readFileAsArrayBuffer.cjs.map +0 -1
- package/dist/production/utils/readFileAsArrayBuffer.js +0 -15
- package/dist/production/utils/readFileAsArrayBuffer.js.map +0 -1
- package/dist/types/content/upload/FileUploadError.d.ts +0 -9
- package/dist/types/content/upload/FileUploadError.d.ts.map +0 -1
- package/dist/types/content/upload/FileUploadProgress.d.ts +0 -4
- package/dist/types/content/upload/FileUploadProgress.d.ts.map +0 -1
- package/dist/types/content/upload/FileUploader.d.ts +0 -15
- package/dist/types/content/upload/FileUploader.d.ts.map +0 -1
- package/dist/types/content/upload/S3FileUploader.d.ts +0 -33
- package/dist/types/content/upload/S3FileUploader.d.ts.map +0 -1
- package/dist/types/content/upload/SwitchFileUploader.d.ts +0 -13
- package/dist/types/content/upload/SwitchFileUploader.d.ts.map +0 -1
- package/dist/types/content/upload/UploadedFileMetadata.d.ts +0 -4
- package/dist/types/content/upload/UploadedFileMetadata.d.ts.map +0 -1
- package/src/content/upload/FileUploadError.ts +0 -10
- package/src/content/upload/FileUploadProgress.ts +0 -3
- package/src/content/upload/FileUploader.ts +0 -19
- package/src/content/upload/S3FileUploader.ts +0 -150
- package/src/content/upload/SwitchFileUploader.ts +0 -40
- package/src/content/upload/UploadedFileMetadata.ts +0 -3
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"S3FileUploader.js","sources":["../../../../src/content/upload/S3FileUploader.ts"],"sourcesContent":["import pLimit from 'p-limit'\nimport { readFileAsArrayBuffer } from '../../utils'\nimport { FileUploadError } from './FileUploadError'\nimport type { FileUploader, FileUploaderInitializeOptions } from './FileUploader'\nimport { GenerateUploadUrlMutationBuilder } from './GenerateUploadUrlMutationBuilder'\nimport type { UploadedFileMetadata } from './UploadedFileMetadata'\n\ninterface S3UploadState {\n\trequest?: XMLHttpRequest\n\talias: number\n}\n\nclass S3FileUploader implements FileUploader<S3FileUploader.SuccessMetadata> {\n\tprivate readonly uploadState: WeakMap<File, S3UploadState>\n\n\tpublic constructor(public readonly options: S3FileUploader.Options = {}) {\n\t\tthis.uploadState = new WeakMap()\n\t}\n\n\tprivate generateNewAlias = (() => {\n\t\tlet alias = 1\n\t\treturn () => alias++\n\t})()\n\n\tprivate static formatFullAlias(alias: number) {\n\t\treturn `file${alias}`\n\t}\n\n\tpublic async upload(\n\t\tfiles: Map<File, UploadedFileMetadata>,\n\t\toptions: FileUploaderInitializeOptions,\n\t) {\n\t\tconst parameters: GenerateUploadUrlMutationBuilder.MutationParameters = {}\n\n\t\tfor (const [file, metadata] of files) {\n\t\t\tif (this.uploadState.has(file)) {\n\t\t\t\tconst uploadState = this.uploadState.get(file)!\n\t\t\t\tuploadState.request?.abort()\n\t\t\t}\n\n\t\t\tconst alias = this.generateNewAlias()\n\t\t\tthis.uploadState.set(file, {\n\t\t\t\talias,\n\t\t\t})\n\n\t\t\tconst uploadOptions = this.options.getUploadOptions?.(file)\n\n\t\t\tparameters[S3FileUploader.formatFullAlias(alias)] = {\n\t\t\t\tcontentType: uploadOptions?.fileType ?? file.type,\n\t\t\t\tprefix: uploadOptions?.filePrefix,\n\t\t\t\tsuffix: uploadOptions?.fileSuffix,\n\t\t\t\tsize: uploadOptions?.fileSize,\n\t\t\t\textension: uploadOptions?.fileExtension,\n\t\t\t\tfileName: uploadOptions?.fileName,\n\t\t\t\texpiration: uploadOptions?.fileExpiration,\n\t\t\t\tacl: uploadOptions?.fileAcl,\n\t\t\t}\n\n\t\t\tmetadata.abortSignal.addEventListener('abort', () => {\n\t\t\t\tthis.uploadState.get(file)?.request?.abort()\n\t\t\t})\n\t\t}\n\n\t\tconst mutation = GenerateUploadUrlMutationBuilder.buildQuery(parameters)\n\t\ttry {\n\t\t\tconst responseData = await options.contentApiClient.execute<GenerateUploadUrlMutationBuilder.MutationResponse>(mutation.query, { variables: mutation.variables })\n\t\t\tconst limit = pLimit(this.options.concurrency ?? 5)\n\t\t\tconst promises: Promise<void>[] = []\n\t\t\tfor (const [file] of files) {\n\t\t\t\tpromises.push(limit(() => this.uploadSingleFile(file, responseData, options)))\n\t\t\t}\n\t\t\tawait Promise.all(promises)\n\t\t} catch (error) {\n\t\t\tif (error instanceof FileUploadError) {\n\t\t\t\tconst fileUploadError = error\n\t\t\t\toptions.onError(Array.from(files).map(([file]) => [file, fileUploadError]))\n\n\t\t\t} else {\n\t\t\t\tthrow error\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate uploadSingleFile(\n\t\tfile: File,\n\t\tresponseData: GenerateUploadUrlMutationBuilder.MutationResponse,\n\t\t{ onProgress, onError, onSuccess }: FileUploaderInitializeOptions,\n\t) {\n\t\treturn new Promise<void>(async (resolve, reject) => {\n\t\t\tconst fileState = this.uploadState.get(file)!\n\t\t\tconst datumBody = responseData[S3FileUploader.formatFullAlias(fileState.alias)]\n\t\t\tconst uploadRequestBody = await readFileAsArrayBuffer(file)\n\t\t\tconst xhr = new XMLHttpRequest()\n\n\t\t\tfileState.request = xhr\n\n\t\t\txhr.open(datumBody.method, datumBody.url)\n\n\t\t\tfor (const header of datumBody.headers) {\n\t\t\t\txhr.setRequestHeader(header.key, header.value)\n\t\t\t}\n\t\t\txhr.addEventListener('load', () => {\n\t\t\t\tconst successMetadata: S3FileUploader.SuccessMetadata = {\n\t\t\t\t\tfileUrl: datumBody.publicUrl,\n\t\t\t\t}\n\t\t\t\tonSuccess([[file, successMetadata]])\n\t\t\t\tresolve()\n\t\t\t})\n\t\t\txhr.addEventListener('error', e => {\n\t\t\t\tonError([file])\n\t\t\t\treject(e)\n\t\t\t})\n\t\t\txhr.upload?.addEventListener('progress', e => {\n\t\t\t\tonProgress([\n\t\t\t\t\t[\n\t\t\t\t\t\tfile,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tprogress: e.loaded / e.total,\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t])\n\t\t\t})\n\t\t\txhr.send(uploadRequestBody)\n\t\t})\n\t}\n}\n\nnamespace S3FileUploader {\n\texport interface SuccessMetadata {\n\t\tfileUrl: string\n\t}\n\n\texport interface Options {\n\t\tgetUploadOptions?: (file: File) => S3UploadOptions\n\t\tconcurrency?: number\n\t}\n\n\texport interface S3UploadOptions {\n\t\tfileType?: GenerateUploadUrlMutationBuilder.FileParameters['contentType']\n\t\tfileExpiration?: number\n\t\tfileSize?: number\n\t\tfilePrefix?: string\n\t\tfileSuffix?: string\n\t\tfileName?: string\n\t\tfileExtension?: string\n\t\tfileAcl?: GenerateUploadUrlMutationBuilder.Acl\n\t}\n}\n\nexport { S3FileUploader }\n"],"names":[],"mappings":"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"}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
-
const readFileAsArrayBuffer = (file) => new Promise((resolve, reject) => {
|
|
4
|
-
const reader = new FileReader();
|
|
5
|
-
reader.onload = () => {
|
|
6
|
-
if (reader.result === null) {
|
|
7
|
-
reject();
|
|
8
|
-
return;
|
|
9
|
-
}
|
|
10
|
-
resolve(reader.result);
|
|
11
|
-
};
|
|
12
|
-
reader.readAsArrayBuffer(file);
|
|
13
|
-
});
|
|
14
|
-
exports.readFileAsArrayBuffer = readFileAsArrayBuffer;
|
|
15
|
-
//# sourceMappingURL=readFileAsArrayBuffer.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"readFileAsArrayBuffer.cjs","sources":["../../../src/utils/readFileAsArrayBuffer.ts"],"sourcesContent":["export const readFileAsArrayBuffer = (file: File): Promise<string | ArrayBuffer> =>\n\tnew Promise((resolve, reject) => {\n\t\tconst reader = new FileReader()\n\t\treader.onload = () => {\n\t\t\tif (reader.result === null) {\n\t\t\t\treject()\n\t\t\t\treturn\n\t\t\t}\n\t\t\tresolve(reader.result)\n\t\t}\n\t\treader.readAsArrayBuffer(file)\n\t})\n"],"names":[],"mappings":";;AAAO,MAAM,wBAAwB,CAAC,SACrC,IAAI,QAAQ,CAAC,SAAS,WAAW;AAC1B,QAAA,SAAS,IAAI;AACnB,SAAO,SAAS,MAAM;AACjB,QAAA,OAAO,WAAW,MAAM;AACpB;AACP;AAAA,IACD;AACA,YAAQ,OAAO,MAAM;AAAA,EAAA;AAEtB,SAAO,kBAAkB,IAAI;AAC9B,CAAC;;"}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
const readFileAsArrayBuffer = (file) => new Promise((resolve, reject) => {
|
|
2
|
-
const reader = new FileReader();
|
|
3
|
-
reader.onload = () => {
|
|
4
|
-
if (reader.result === null) {
|
|
5
|
-
reject();
|
|
6
|
-
return;
|
|
7
|
-
}
|
|
8
|
-
resolve(reader.result);
|
|
9
|
-
};
|
|
10
|
-
reader.readAsArrayBuffer(file);
|
|
11
|
-
});
|
|
12
|
-
export {
|
|
13
|
-
readFileAsArrayBuffer
|
|
14
|
-
};
|
|
15
|
-
//# sourceMappingURL=readFileAsArrayBuffer.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"readFileAsArrayBuffer.js","sources":["../../../src/utils/readFileAsArrayBuffer.ts"],"sourcesContent":["export const readFileAsArrayBuffer = (file: File): Promise<string | ArrayBuffer> =>\n\tnew Promise((resolve, reject) => {\n\t\tconst reader = new FileReader()\n\t\treader.onload = () => {\n\t\t\tif (reader.result === null) {\n\t\t\t\treject()\n\t\t\t\treturn\n\t\t\t}\n\t\t\tresolve(reader.result)\n\t\t}\n\t\treader.readAsArrayBuffer(file)\n\t})\n"],"names":[],"mappings":"AAAO,MAAM,wBAAwB,CAAC,SACrC,IAAI,QAAQ,CAAC,SAAS,WAAW;AAC1B,QAAA,SAAS,IAAI;AACnB,SAAO,SAAS,MAAM;AACjB,QAAA,OAAO,WAAW,MAAM;AACpB;AACP;AAAA,IACD;AACA,YAAQ,OAAO,MAAM;AAAA,EAAA;AAEtB,SAAO,kBAAkB,IAAI;AAC9B,CAAC;"}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
-
class FileUploadError extends Error {
|
|
4
|
-
constructor(options = {}) {
|
|
5
|
-
super(options.developerMessage);
|
|
6
|
-
this.options = options;
|
|
7
|
-
}
|
|
8
|
-
}
|
|
9
|
-
exports.FileUploadError = FileUploadError;
|
|
10
|
-
//# sourceMappingURL=FileUploadError.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"FileUploadError.cjs","sources":["../../../../src/content/upload/FileUploadError.ts"],"sourcesContent":["export interface FileUploadErrorOptions {\n\tdeveloperMessage?: string\n\tendUserMessage?: string\n}\n\nexport class FileUploadError extends Error {\n\tpublic constructor(public readonly options: FileUploadErrorOptions = {}) {\n\t\tsuper(options.developerMessage)\n\t}\n}\n"],"names":[],"mappings":";;AAKO,MAAM,wBAAwB,MAAM;AAAA,EACnC,YAA4B,UAAkC,IAAI;AACxE,UAAM,QAAQ,gBAAgB;AADI,SAAA,UAAA;AAAA,EAEnC;AACD;;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"FileUploadError.js","sources":["../../../../src/content/upload/FileUploadError.ts"],"sourcesContent":["export interface FileUploadErrorOptions {\n\tdeveloperMessage?: string\n\tendUserMessage?: string\n}\n\nexport class FileUploadError extends Error {\n\tpublic constructor(public readonly options: FileUploadErrorOptions = {}) {\n\t\tsuper(options.developerMessage)\n\t}\n}\n"],"names":[],"mappings":"AAKO,MAAM,wBAAwB,MAAM;AAAA,EACnC,YAA4B,UAAkC,IAAI;AACxE,UAAM,QAAQ,gBAAgB;AADI,SAAA,UAAA;AAAA,EAEnC;AACD;"}
|
|
@@ -1,107 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __defProp = Object.defineProperty;
|
|
3
|
-
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
4
|
-
var __publicField = (obj, key, value) => {
|
|
5
|
-
__defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
6
|
-
return value;
|
|
7
|
-
};
|
|
8
|
-
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
9
|
-
const pLimit = require("p-limit");
|
|
10
|
-
const FileUploadError = require("./FileUploadError.cjs");
|
|
11
|
-
const GenerateUploadUrlMutationBuilder = require("./GenerateUploadUrlMutationBuilder.cjs");
|
|
12
|
-
const readFileAsArrayBuffer = require("../../utils/readFileAsArrayBuffer.cjs");
|
|
13
|
-
class S3FileUploader {
|
|
14
|
-
constructor(options = {}) {
|
|
15
|
-
__publicField(this, "uploadState");
|
|
16
|
-
__publicField(this, "generateNewAlias", /* @__PURE__ */ (() => {
|
|
17
|
-
let alias = 1;
|
|
18
|
-
return () => alias++;
|
|
19
|
-
})());
|
|
20
|
-
this.options = options;
|
|
21
|
-
this.uploadState = /* @__PURE__ */ new WeakMap();
|
|
22
|
-
}
|
|
23
|
-
static formatFullAlias(alias) {
|
|
24
|
-
return `file${alias}`;
|
|
25
|
-
}
|
|
26
|
-
async upload(files, options) {
|
|
27
|
-
const parameters = {};
|
|
28
|
-
for (const [file, metadata] of files) {
|
|
29
|
-
if (this.uploadState.has(file)) {
|
|
30
|
-
const uploadState = this.uploadState.get(file);
|
|
31
|
-
uploadState.request?.abort();
|
|
32
|
-
}
|
|
33
|
-
const alias = this.generateNewAlias();
|
|
34
|
-
this.uploadState.set(file, {
|
|
35
|
-
alias
|
|
36
|
-
});
|
|
37
|
-
const uploadOptions = this.options.getUploadOptions?.(file);
|
|
38
|
-
parameters[S3FileUploader.formatFullAlias(alias)] = {
|
|
39
|
-
contentType: uploadOptions?.fileType ?? file.type,
|
|
40
|
-
prefix: uploadOptions?.filePrefix,
|
|
41
|
-
suffix: uploadOptions?.fileSuffix,
|
|
42
|
-
size: uploadOptions?.fileSize,
|
|
43
|
-
extension: uploadOptions?.fileExtension,
|
|
44
|
-
fileName: uploadOptions?.fileName,
|
|
45
|
-
expiration: uploadOptions?.fileExpiration,
|
|
46
|
-
acl: uploadOptions?.fileAcl
|
|
47
|
-
};
|
|
48
|
-
metadata.abortSignal.addEventListener("abort", () => {
|
|
49
|
-
this.uploadState.get(file)?.request?.abort();
|
|
50
|
-
});
|
|
51
|
-
}
|
|
52
|
-
const mutation = GenerateUploadUrlMutationBuilder.GenerateUploadUrlMutationBuilder.buildQuery(parameters);
|
|
53
|
-
try {
|
|
54
|
-
const responseData = await options.contentApiClient.execute(mutation.query, { variables: mutation.variables });
|
|
55
|
-
const limit = pLimit(this.options.concurrency ?? 5);
|
|
56
|
-
const promises = [];
|
|
57
|
-
for (const [file] of files) {
|
|
58
|
-
promises.push(limit(() => this.uploadSingleFile(file, responseData, options)));
|
|
59
|
-
}
|
|
60
|
-
await Promise.all(promises);
|
|
61
|
-
} catch (error) {
|
|
62
|
-
if (error instanceof FileUploadError.FileUploadError) {
|
|
63
|
-
const fileUploadError = error;
|
|
64
|
-
options.onError(Array.from(files).map(([file]) => [file, fileUploadError]));
|
|
65
|
-
} else {
|
|
66
|
-
throw error;
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
uploadSingleFile(file, responseData, { onProgress, onError, onSuccess }) {
|
|
71
|
-
return new Promise(async (resolve, reject) => {
|
|
72
|
-
const fileState = this.uploadState.get(file);
|
|
73
|
-
const datumBody = responseData[S3FileUploader.formatFullAlias(fileState.alias)];
|
|
74
|
-
const uploadRequestBody = await readFileAsArrayBuffer.readFileAsArrayBuffer(file);
|
|
75
|
-
const xhr = new XMLHttpRequest();
|
|
76
|
-
fileState.request = xhr;
|
|
77
|
-
xhr.open(datumBody.method, datumBody.url);
|
|
78
|
-
for (const header of datumBody.headers) {
|
|
79
|
-
xhr.setRequestHeader(header.key, header.value);
|
|
80
|
-
}
|
|
81
|
-
xhr.addEventListener("load", () => {
|
|
82
|
-
const successMetadata = {
|
|
83
|
-
fileUrl: datumBody.publicUrl
|
|
84
|
-
};
|
|
85
|
-
onSuccess([[file, successMetadata]]);
|
|
86
|
-
resolve();
|
|
87
|
-
});
|
|
88
|
-
xhr.addEventListener("error", (e) => {
|
|
89
|
-
onError([file]);
|
|
90
|
-
reject(e);
|
|
91
|
-
});
|
|
92
|
-
xhr.upload?.addEventListener("progress", (e) => {
|
|
93
|
-
onProgress([
|
|
94
|
-
[
|
|
95
|
-
file,
|
|
96
|
-
{
|
|
97
|
-
progress: e.loaded / e.total
|
|
98
|
-
}
|
|
99
|
-
]
|
|
100
|
-
]);
|
|
101
|
-
});
|
|
102
|
-
xhr.send(uploadRequestBody);
|
|
103
|
-
});
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
exports.S3FileUploader = S3FileUploader;
|
|
107
|
-
//# sourceMappingURL=S3FileUploader.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"S3FileUploader.cjs","sources":["../../../../src/content/upload/S3FileUploader.ts"],"sourcesContent":["import pLimit from 'p-limit'\nimport { readFileAsArrayBuffer } from '../../utils'\nimport { FileUploadError } from './FileUploadError'\nimport type { FileUploader, FileUploaderInitializeOptions } from './FileUploader'\nimport { GenerateUploadUrlMutationBuilder } from './GenerateUploadUrlMutationBuilder'\nimport type { UploadedFileMetadata } from './UploadedFileMetadata'\n\ninterface S3UploadState {\n\trequest?: XMLHttpRequest\n\talias: number\n}\n\nclass S3FileUploader implements FileUploader<S3FileUploader.SuccessMetadata> {\n\tprivate readonly uploadState: WeakMap<File, S3UploadState>\n\n\tpublic constructor(public readonly options: S3FileUploader.Options = {}) {\n\t\tthis.uploadState = new WeakMap()\n\t}\n\n\tprivate generateNewAlias = (() => {\n\t\tlet alias = 1\n\t\treturn () => alias++\n\t})()\n\n\tprivate static formatFullAlias(alias: number) {\n\t\treturn `file${alias}`\n\t}\n\n\tpublic async upload(\n\t\tfiles: Map<File, UploadedFileMetadata>,\n\t\toptions: FileUploaderInitializeOptions,\n\t) {\n\t\tconst parameters: GenerateUploadUrlMutationBuilder.MutationParameters = {}\n\n\t\tfor (const [file, metadata] of files) {\n\t\t\tif (this.uploadState.has(file)) {\n\t\t\t\tconst uploadState = this.uploadState.get(file)!\n\t\t\t\tuploadState.request?.abort()\n\t\t\t}\n\n\t\t\tconst alias = this.generateNewAlias()\n\t\t\tthis.uploadState.set(file, {\n\t\t\t\talias,\n\t\t\t})\n\n\t\t\tconst uploadOptions = this.options.getUploadOptions?.(file)\n\n\t\t\tparameters[S3FileUploader.formatFullAlias(alias)] = {\n\t\t\t\tcontentType: uploadOptions?.fileType ?? file.type,\n\t\t\t\tprefix: uploadOptions?.filePrefix,\n\t\t\t\tsuffix: uploadOptions?.fileSuffix,\n\t\t\t\tsize: uploadOptions?.fileSize,\n\t\t\t\textension: uploadOptions?.fileExtension,\n\t\t\t\tfileName: uploadOptions?.fileName,\n\t\t\t\texpiration: uploadOptions?.fileExpiration,\n\t\t\t\tacl: uploadOptions?.fileAcl,\n\t\t\t}\n\n\t\t\tmetadata.abortSignal.addEventListener('abort', () => {\n\t\t\t\tthis.uploadState.get(file)?.request?.abort()\n\t\t\t})\n\t\t}\n\n\t\tconst mutation = GenerateUploadUrlMutationBuilder.buildQuery(parameters)\n\t\ttry {\n\t\t\tconst responseData = await options.contentApiClient.execute<GenerateUploadUrlMutationBuilder.MutationResponse>(mutation.query, { variables: mutation.variables })\n\t\t\tconst limit = pLimit(this.options.concurrency ?? 5)\n\t\t\tconst promises: Promise<void>[] = []\n\t\t\tfor (const [file] of files) {\n\t\t\t\tpromises.push(limit(() => this.uploadSingleFile(file, responseData, options)))\n\t\t\t}\n\t\t\tawait Promise.all(promises)\n\t\t} catch (error) {\n\t\t\tif (error instanceof FileUploadError) {\n\t\t\t\tconst fileUploadError = error\n\t\t\t\toptions.onError(Array.from(files).map(([file]) => [file, fileUploadError]))\n\n\t\t\t} else {\n\t\t\t\tthrow error\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate uploadSingleFile(\n\t\tfile: File,\n\t\tresponseData: GenerateUploadUrlMutationBuilder.MutationResponse,\n\t\t{ onProgress, onError, onSuccess }: FileUploaderInitializeOptions,\n\t) {\n\t\treturn new Promise<void>(async (resolve, reject) => {\n\t\t\tconst fileState = this.uploadState.get(file)!\n\t\t\tconst datumBody = responseData[S3FileUploader.formatFullAlias(fileState.alias)]\n\t\t\tconst uploadRequestBody = await readFileAsArrayBuffer(file)\n\t\t\tconst xhr = new XMLHttpRequest()\n\n\t\t\tfileState.request = xhr\n\n\t\t\txhr.open(datumBody.method, datumBody.url)\n\n\t\t\tfor (const header of datumBody.headers) {\n\t\t\t\txhr.setRequestHeader(header.key, header.value)\n\t\t\t}\n\t\t\txhr.addEventListener('load', () => {\n\t\t\t\tconst successMetadata: S3FileUploader.SuccessMetadata = {\n\t\t\t\t\tfileUrl: datumBody.publicUrl,\n\t\t\t\t}\n\t\t\t\tonSuccess([[file, successMetadata]])\n\t\t\t\tresolve()\n\t\t\t})\n\t\t\txhr.addEventListener('error', e => {\n\t\t\t\tonError([file])\n\t\t\t\treject(e)\n\t\t\t})\n\t\t\txhr.upload?.addEventListener('progress', e => {\n\t\t\t\tonProgress([\n\t\t\t\t\t[\n\t\t\t\t\t\tfile,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tprogress: e.loaded / e.total,\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t])\n\t\t\t})\n\t\t\txhr.send(uploadRequestBody)\n\t\t})\n\t}\n}\n\nnamespace S3FileUploader {\n\texport interface SuccessMetadata {\n\t\tfileUrl: string\n\t}\n\n\texport interface Options {\n\t\tgetUploadOptions?: (file: File) => S3UploadOptions\n\t\tconcurrency?: number\n\t}\n\n\texport interface S3UploadOptions {\n\t\tfileType?: GenerateUploadUrlMutationBuilder.FileParameters['contentType']\n\t\tfileExpiration?: number\n\t\tfileSize?: number\n\t\tfilePrefix?: string\n\t\tfileSuffix?: string\n\t\tfileName?: string\n\t\tfileExtension?: string\n\t\tfileAcl?: GenerateUploadUrlMutationBuilder.Acl\n\t}\n}\n\nexport { S3FileUploader }\n"],"names":["GenerateUploadUrlMutationBuilder","FileUploadError","readFileAsArrayBuffer"],"mappings":"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"}
|
|
@@ -1,107 +0,0 @@
|
|
|
1
|
-
var __defProp = Object.defineProperty;
|
|
2
|
-
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
3
|
-
var __publicField = (obj, key, value) => {
|
|
4
|
-
__defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
5
|
-
return value;
|
|
6
|
-
};
|
|
7
|
-
import pLimit from "p-limit";
|
|
8
|
-
import { FileUploadError } from "./FileUploadError.js";
|
|
9
|
-
import { GenerateUploadUrlMutationBuilder } from "./GenerateUploadUrlMutationBuilder.js";
|
|
10
|
-
import { readFileAsArrayBuffer } from "../../utils/readFileAsArrayBuffer.js";
|
|
11
|
-
class S3FileUploader {
|
|
12
|
-
constructor(options = {}) {
|
|
13
|
-
__publicField(this, "uploadState");
|
|
14
|
-
__publicField(this, "generateNewAlias", /* @__PURE__ */ (() => {
|
|
15
|
-
let alias = 1;
|
|
16
|
-
return () => alias++;
|
|
17
|
-
})());
|
|
18
|
-
this.options = options;
|
|
19
|
-
this.uploadState = /* @__PURE__ */ new WeakMap();
|
|
20
|
-
}
|
|
21
|
-
static formatFullAlias(alias) {
|
|
22
|
-
return `file${alias}`;
|
|
23
|
-
}
|
|
24
|
-
async upload(files, options) {
|
|
25
|
-
const parameters = {};
|
|
26
|
-
for (const [file, metadata] of files) {
|
|
27
|
-
if (this.uploadState.has(file)) {
|
|
28
|
-
const uploadState = this.uploadState.get(file);
|
|
29
|
-
uploadState.request?.abort();
|
|
30
|
-
}
|
|
31
|
-
const alias = this.generateNewAlias();
|
|
32
|
-
this.uploadState.set(file, {
|
|
33
|
-
alias
|
|
34
|
-
});
|
|
35
|
-
const uploadOptions = this.options.getUploadOptions?.(file);
|
|
36
|
-
parameters[S3FileUploader.formatFullAlias(alias)] = {
|
|
37
|
-
contentType: uploadOptions?.fileType ?? file.type,
|
|
38
|
-
prefix: uploadOptions?.filePrefix,
|
|
39
|
-
suffix: uploadOptions?.fileSuffix,
|
|
40
|
-
size: uploadOptions?.fileSize,
|
|
41
|
-
extension: uploadOptions?.fileExtension,
|
|
42
|
-
fileName: uploadOptions?.fileName,
|
|
43
|
-
expiration: uploadOptions?.fileExpiration,
|
|
44
|
-
acl: uploadOptions?.fileAcl
|
|
45
|
-
};
|
|
46
|
-
metadata.abortSignal.addEventListener("abort", () => {
|
|
47
|
-
this.uploadState.get(file)?.request?.abort();
|
|
48
|
-
});
|
|
49
|
-
}
|
|
50
|
-
const mutation = GenerateUploadUrlMutationBuilder.buildQuery(parameters);
|
|
51
|
-
try {
|
|
52
|
-
const responseData = await options.contentApiClient.execute(mutation.query, { variables: mutation.variables });
|
|
53
|
-
const limit = pLimit(this.options.concurrency ?? 5);
|
|
54
|
-
const promises = [];
|
|
55
|
-
for (const [file] of files) {
|
|
56
|
-
promises.push(limit(() => this.uploadSingleFile(file, responseData, options)));
|
|
57
|
-
}
|
|
58
|
-
await Promise.all(promises);
|
|
59
|
-
} catch (error) {
|
|
60
|
-
if (error instanceof FileUploadError) {
|
|
61
|
-
const fileUploadError = error;
|
|
62
|
-
options.onError(Array.from(files).map(([file]) => [file, fileUploadError]));
|
|
63
|
-
} else {
|
|
64
|
-
throw error;
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
uploadSingleFile(file, responseData, { onProgress, onError, onSuccess }) {
|
|
69
|
-
return new Promise(async (resolve, reject) => {
|
|
70
|
-
const fileState = this.uploadState.get(file);
|
|
71
|
-
const datumBody = responseData[S3FileUploader.formatFullAlias(fileState.alias)];
|
|
72
|
-
const uploadRequestBody = await readFileAsArrayBuffer(file);
|
|
73
|
-
const xhr = new XMLHttpRequest();
|
|
74
|
-
fileState.request = xhr;
|
|
75
|
-
xhr.open(datumBody.method, datumBody.url);
|
|
76
|
-
for (const header of datumBody.headers) {
|
|
77
|
-
xhr.setRequestHeader(header.key, header.value);
|
|
78
|
-
}
|
|
79
|
-
xhr.addEventListener("load", () => {
|
|
80
|
-
const successMetadata = {
|
|
81
|
-
fileUrl: datumBody.publicUrl
|
|
82
|
-
};
|
|
83
|
-
onSuccess([[file, successMetadata]]);
|
|
84
|
-
resolve();
|
|
85
|
-
});
|
|
86
|
-
xhr.addEventListener("error", (e) => {
|
|
87
|
-
onError([file]);
|
|
88
|
-
reject(e);
|
|
89
|
-
});
|
|
90
|
-
xhr.upload?.addEventListener("progress", (e) => {
|
|
91
|
-
onProgress([
|
|
92
|
-
[
|
|
93
|
-
file,
|
|
94
|
-
{
|
|
95
|
-
progress: e.loaded / e.total
|
|
96
|
-
}
|
|
97
|
-
]
|
|
98
|
-
]);
|
|
99
|
-
});
|
|
100
|
-
xhr.send(uploadRequestBody);
|
|
101
|
-
});
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
export {
|
|
105
|
-
S3FileUploader
|
|
106
|
-
};
|
|
107
|
-
//# sourceMappingURL=S3FileUploader.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"S3FileUploader.js","sources":["../../../../src/content/upload/S3FileUploader.ts"],"sourcesContent":["import pLimit from 'p-limit'\nimport { readFileAsArrayBuffer } from '../../utils'\nimport { FileUploadError } from './FileUploadError'\nimport type { FileUploader, FileUploaderInitializeOptions } from './FileUploader'\nimport { GenerateUploadUrlMutationBuilder } from './GenerateUploadUrlMutationBuilder'\nimport type { UploadedFileMetadata } from './UploadedFileMetadata'\n\ninterface S3UploadState {\n\trequest?: XMLHttpRequest\n\talias: number\n}\n\nclass S3FileUploader implements FileUploader<S3FileUploader.SuccessMetadata> {\n\tprivate readonly uploadState: WeakMap<File, S3UploadState>\n\n\tpublic constructor(public readonly options: S3FileUploader.Options = {}) {\n\t\tthis.uploadState = new WeakMap()\n\t}\n\n\tprivate generateNewAlias = (() => {\n\t\tlet alias = 1\n\t\treturn () => alias++\n\t})()\n\n\tprivate static formatFullAlias(alias: number) {\n\t\treturn `file${alias}`\n\t}\n\n\tpublic async upload(\n\t\tfiles: Map<File, UploadedFileMetadata>,\n\t\toptions: FileUploaderInitializeOptions,\n\t) {\n\t\tconst parameters: GenerateUploadUrlMutationBuilder.MutationParameters = {}\n\n\t\tfor (const [file, metadata] of files) {\n\t\t\tif (this.uploadState.has(file)) {\n\t\t\t\tconst uploadState = this.uploadState.get(file)!\n\t\t\t\tuploadState.request?.abort()\n\t\t\t}\n\n\t\t\tconst alias = this.generateNewAlias()\n\t\t\tthis.uploadState.set(file, {\n\t\t\t\talias,\n\t\t\t})\n\n\t\t\tconst uploadOptions = this.options.getUploadOptions?.(file)\n\n\t\t\tparameters[S3FileUploader.formatFullAlias(alias)] = {\n\t\t\t\tcontentType: uploadOptions?.fileType ?? file.type,\n\t\t\t\tprefix: uploadOptions?.filePrefix,\n\t\t\t\tsuffix: uploadOptions?.fileSuffix,\n\t\t\t\tsize: uploadOptions?.fileSize,\n\t\t\t\textension: uploadOptions?.fileExtension,\n\t\t\t\tfileName: uploadOptions?.fileName,\n\t\t\t\texpiration: uploadOptions?.fileExpiration,\n\t\t\t\tacl: uploadOptions?.fileAcl,\n\t\t\t}\n\n\t\t\tmetadata.abortSignal.addEventListener('abort', () => {\n\t\t\t\tthis.uploadState.get(file)?.request?.abort()\n\t\t\t})\n\t\t}\n\n\t\tconst mutation = GenerateUploadUrlMutationBuilder.buildQuery(parameters)\n\t\ttry {\n\t\t\tconst responseData = await options.contentApiClient.execute<GenerateUploadUrlMutationBuilder.MutationResponse>(mutation.query, { variables: mutation.variables })\n\t\t\tconst limit = pLimit(this.options.concurrency ?? 5)\n\t\t\tconst promises: Promise<void>[] = []\n\t\t\tfor (const [file] of files) {\n\t\t\t\tpromises.push(limit(() => this.uploadSingleFile(file, responseData, options)))\n\t\t\t}\n\t\t\tawait Promise.all(promises)\n\t\t} catch (error) {\n\t\t\tif (error instanceof FileUploadError) {\n\t\t\t\tconst fileUploadError = error\n\t\t\t\toptions.onError(Array.from(files).map(([file]) => [file, fileUploadError]))\n\n\t\t\t} else {\n\t\t\t\tthrow error\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate uploadSingleFile(\n\t\tfile: File,\n\t\tresponseData: GenerateUploadUrlMutationBuilder.MutationResponse,\n\t\t{ onProgress, onError, onSuccess }: FileUploaderInitializeOptions,\n\t) {\n\t\treturn new Promise<void>(async (resolve, reject) => {\n\t\t\tconst fileState = this.uploadState.get(file)!\n\t\t\tconst datumBody = responseData[S3FileUploader.formatFullAlias(fileState.alias)]\n\t\t\tconst uploadRequestBody = await readFileAsArrayBuffer(file)\n\t\t\tconst xhr = new XMLHttpRequest()\n\n\t\t\tfileState.request = xhr\n\n\t\t\txhr.open(datumBody.method, datumBody.url)\n\n\t\t\tfor (const header of datumBody.headers) {\n\t\t\t\txhr.setRequestHeader(header.key, header.value)\n\t\t\t}\n\t\t\txhr.addEventListener('load', () => {\n\t\t\t\tconst successMetadata: S3FileUploader.SuccessMetadata = {\n\t\t\t\t\tfileUrl: datumBody.publicUrl,\n\t\t\t\t}\n\t\t\t\tonSuccess([[file, successMetadata]])\n\t\t\t\tresolve()\n\t\t\t})\n\t\t\txhr.addEventListener('error', e => {\n\t\t\t\tonError([file])\n\t\t\t\treject(e)\n\t\t\t})\n\t\t\txhr.upload?.addEventListener('progress', e => {\n\t\t\t\tonProgress([\n\t\t\t\t\t[\n\t\t\t\t\t\tfile,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tprogress: e.loaded / e.total,\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t])\n\t\t\t})\n\t\t\txhr.send(uploadRequestBody)\n\t\t})\n\t}\n}\n\nnamespace S3FileUploader {\n\texport interface SuccessMetadata {\n\t\tfileUrl: string\n\t}\n\n\texport interface Options {\n\t\tgetUploadOptions?: (file: File) => S3UploadOptions\n\t\tconcurrency?: number\n\t}\n\n\texport interface S3UploadOptions {\n\t\tfileType?: GenerateUploadUrlMutationBuilder.FileParameters['contentType']\n\t\tfileExpiration?: number\n\t\tfileSize?: number\n\t\tfilePrefix?: string\n\t\tfileSuffix?: string\n\t\tfileName?: string\n\t\tfileExtension?: string\n\t\tfileAcl?: GenerateUploadUrlMutationBuilder.Acl\n\t}\n}\n\nexport { S3FileUploader }\n"],"names":[],"mappings":"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"}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
-
const readFileAsArrayBuffer = (file) => new Promise((resolve, reject) => {
|
|
4
|
-
const reader = new FileReader();
|
|
5
|
-
reader.onload = () => {
|
|
6
|
-
if (reader.result === null) {
|
|
7
|
-
reject();
|
|
8
|
-
return;
|
|
9
|
-
}
|
|
10
|
-
resolve(reader.result);
|
|
11
|
-
};
|
|
12
|
-
reader.readAsArrayBuffer(file);
|
|
13
|
-
});
|
|
14
|
-
exports.readFileAsArrayBuffer = readFileAsArrayBuffer;
|
|
15
|
-
//# sourceMappingURL=readFileAsArrayBuffer.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"readFileAsArrayBuffer.cjs","sources":["../../../src/utils/readFileAsArrayBuffer.ts"],"sourcesContent":["export const readFileAsArrayBuffer = (file: File): Promise<string | ArrayBuffer> =>\n\tnew Promise((resolve, reject) => {\n\t\tconst reader = new FileReader()\n\t\treader.onload = () => {\n\t\t\tif (reader.result === null) {\n\t\t\t\treject()\n\t\t\t\treturn\n\t\t\t}\n\t\t\tresolve(reader.result)\n\t\t}\n\t\treader.readAsArrayBuffer(file)\n\t})\n"],"names":[],"mappings":";;AAAO,MAAM,wBAAwB,CAAC,SACrC,IAAI,QAAQ,CAAC,SAAS,WAAW;AAC1B,QAAA,SAAS,IAAI;AACnB,SAAO,SAAS,MAAM;AACjB,QAAA,OAAO,WAAW,MAAM;AACpB;AACP;AAAA,IACD;AACA,YAAQ,OAAO,MAAM;AAAA,EAAA;AAEtB,SAAO,kBAAkB,IAAI;AAC9B,CAAC;;"}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
const readFileAsArrayBuffer = (file) => new Promise((resolve, reject) => {
|
|
2
|
-
const reader = new FileReader();
|
|
3
|
-
reader.onload = () => {
|
|
4
|
-
if (reader.result === null) {
|
|
5
|
-
reject();
|
|
6
|
-
return;
|
|
7
|
-
}
|
|
8
|
-
resolve(reader.result);
|
|
9
|
-
};
|
|
10
|
-
reader.readAsArrayBuffer(file);
|
|
11
|
-
});
|
|
12
|
-
export {
|
|
13
|
-
readFileAsArrayBuffer
|
|
14
|
-
};
|
|
15
|
-
//# sourceMappingURL=readFileAsArrayBuffer.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"readFileAsArrayBuffer.js","sources":["../../../src/utils/readFileAsArrayBuffer.ts"],"sourcesContent":["export const readFileAsArrayBuffer = (file: File): Promise<string | ArrayBuffer> =>\n\tnew Promise((resolve, reject) => {\n\t\tconst reader = new FileReader()\n\t\treader.onload = () => {\n\t\t\tif (reader.result === null) {\n\t\t\t\treject()\n\t\t\t\treturn\n\t\t\t}\n\t\t\tresolve(reader.result)\n\t\t}\n\t\treader.readAsArrayBuffer(file)\n\t})\n"],"names":[],"mappings":"AAAO,MAAM,wBAAwB,CAAC,SACrC,IAAI,QAAQ,CAAC,SAAS,WAAW;AAC1B,QAAA,SAAS,IAAI;AACnB,SAAO,SAAS,MAAM;AACjB,QAAA,OAAO,WAAW,MAAM;AACpB;AACP;AAAA,IACD;AACA,YAAQ,OAAO,MAAM;AAAA,EAAA;AAEtB,SAAO,kBAAkB,IAAI;AAC9B,CAAC;"}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
export interface FileUploadErrorOptions {
|
|
2
|
-
developerMessage?: string;
|
|
3
|
-
endUserMessage?: string;
|
|
4
|
-
}
|
|
5
|
-
export declare class FileUploadError extends Error {
|
|
6
|
-
readonly options: FileUploadErrorOptions;
|
|
7
|
-
constructor(options?: FileUploadErrorOptions);
|
|
8
|
-
}
|
|
9
|
-
//# sourceMappingURL=FileUploadError.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"FileUploadError.d.ts","sourceRoot":"","sources":["../../../../src/content/upload/FileUploadError.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,sBAAsB;IACtC,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,cAAc,CAAC,EAAE,MAAM,CAAA;CACvB;AAED,qBAAa,eAAgB,SAAQ,KAAK;aACN,OAAO,EAAE,sBAAsB;gBAA/B,OAAO,GAAE,sBAA2B;CAGvE"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"FileUploadProgress.d.ts","sourceRoot":"","sources":["../../../../src/content/upload/FileUploadProgress.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,kBAAkB;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAA;CACjB"}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import type { GraphQlClient } from '../../graphQlClient';
|
|
2
|
-
import type { FileUploadError } from './FileUploadError';
|
|
3
|
-
import type { FileUploadProgress } from './FileUploadProgress';
|
|
4
|
-
import type { UploadedFileMetadata } from './UploadedFileMetadata';
|
|
5
|
-
export interface FileUploader<Result = any, Error extends FileUploadError = FileUploadError> {
|
|
6
|
-
upload: (files: Map<File, UploadedFileMetadata>, options: FileUploaderInitializeOptions<Result, Error>) => Promise<void>;
|
|
7
|
-
destroy?: (files: Result[]) => Promise<void>;
|
|
8
|
-
}
|
|
9
|
-
export interface FileUploaderInitializeOptions<Result = any, Error extends FileUploadError = FileUploadError> {
|
|
10
|
-
contentApiClient: GraphQlClient;
|
|
11
|
-
onSuccess: (result: Iterable<[File, Result]>) => void;
|
|
12
|
-
onError: (error: Iterable<File | [File, Error]>) => void;
|
|
13
|
-
onProgress: (progress: Iterable<[File, FileUploadProgress]>) => void;
|
|
14
|
-
}
|
|
15
|
-
//# sourceMappingURL=FileUploader.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"FileUploader.d.ts","sourceRoot":"","sources":["../../../../src/content/upload/FileUploader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACxD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACxD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AAC9D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAA;AAElE,MAAM,WAAW,YAAY,CAAC,MAAM,GAAG,GAAG,EAAE,KAAK,SAAS,eAAe,GAAG,eAAe;IAC1F,MAAM,EAAE,CACP,KAAK,EAAE,GAAG,CAAC,IAAI,EAAE,oBAAoB,CAAC,EACtC,OAAO,EAAE,6BAA6B,CAAC,MAAM,EAAE,KAAK,CAAC,KACjD,OAAO,CAAC,IAAI,CAAC,CAAA;IAClB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CAC5C;AAED,MAAM,WAAW,6BAA6B,CAAC,MAAM,GAAG,GAAG,EAAE,KAAK,SAAS,eAAe,GAAG,eAAe;IAC3G,gBAAgB,EAAE,aAAa,CAAA;IAC/B,SAAS,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,KAAK,IAAI,CAAA;IACrD,OAAO,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,KAAK,IAAI,CAAA;IACxD,UAAU,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,IAAI,EAAE,kBAAkB,CAAC,CAAC,KAAK,IAAI,CAAA;CACpE"}
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
import type { FileUploader, FileUploaderInitializeOptions } from './FileUploader';
|
|
2
|
-
import { GenerateUploadUrlMutationBuilder } from './GenerateUploadUrlMutationBuilder';
|
|
3
|
-
import type { UploadedFileMetadata } from './UploadedFileMetadata';
|
|
4
|
-
declare class S3FileUploader implements FileUploader<S3FileUploader.SuccessMetadata> {
|
|
5
|
-
readonly options: S3FileUploader.Options;
|
|
6
|
-
private readonly uploadState;
|
|
7
|
-
constructor(options?: S3FileUploader.Options);
|
|
8
|
-
private generateNewAlias;
|
|
9
|
-
private static formatFullAlias;
|
|
10
|
-
upload(files: Map<File, UploadedFileMetadata>, options: FileUploaderInitializeOptions): Promise<void>;
|
|
11
|
-
private uploadSingleFile;
|
|
12
|
-
}
|
|
13
|
-
declare namespace S3FileUploader {
|
|
14
|
-
interface SuccessMetadata {
|
|
15
|
-
fileUrl: string;
|
|
16
|
-
}
|
|
17
|
-
interface Options {
|
|
18
|
-
getUploadOptions?: (file: File) => S3UploadOptions;
|
|
19
|
-
concurrency?: number;
|
|
20
|
-
}
|
|
21
|
-
interface S3UploadOptions {
|
|
22
|
-
fileType?: GenerateUploadUrlMutationBuilder.FileParameters['contentType'];
|
|
23
|
-
fileExpiration?: number;
|
|
24
|
-
fileSize?: number;
|
|
25
|
-
filePrefix?: string;
|
|
26
|
-
fileSuffix?: string;
|
|
27
|
-
fileName?: string;
|
|
28
|
-
fileExtension?: string;
|
|
29
|
-
fileAcl?: GenerateUploadUrlMutationBuilder.Acl;
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
export { S3FileUploader };
|
|
33
|
-
//# sourceMappingURL=S3FileUploader.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"S3FileUploader.d.ts","sourceRoot":"","sources":["../../../../src/content/upload/S3FileUploader.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,6BAA6B,EAAE,MAAM,gBAAgB,CAAA;AACjF,OAAO,EAAE,gCAAgC,EAAE,MAAM,oCAAoC,CAAA;AACrF,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAA;AAOlE,cAAM,cAAe,YAAW,YAAY,CAAC,cAAc,CAAC,eAAe,CAAC;aAGxC,OAAO,EAAE,cAAc,CAAC,OAAO;IAFlE,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA8B;gBAEvB,OAAO,GAAE,cAAc,CAAC,OAAY;IAIvE,OAAO,CAAC,gBAAgB,CAGpB;IAEJ,OAAO,CAAC,MAAM,CAAC,eAAe;IAIjB,MAAM,CAClB,KAAK,EAAE,GAAG,CAAC,IAAI,EAAE,oBAAoB,CAAC,EACtC,OAAO,EAAE,6BAA6B;IAqDvC,OAAO,CAAC,gBAAgB;CA0CxB;AAED,kBAAU,cAAc,CAAC;IACxB,UAAiB,eAAe;QAC/B,OAAO,EAAE,MAAM,CAAA;KACf;IAED,UAAiB,OAAO;QACvB,gBAAgB,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,eAAe,CAAA;QAClD,WAAW,CAAC,EAAE,MAAM,CAAA;KACpB;IAED,UAAiB,eAAe;QAC/B,QAAQ,CAAC,EAAE,gCAAgC,CAAC,cAAc,CAAC,aAAa,CAAC,CAAA;QACzE,cAAc,CAAC,EAAE,MAAM,CAAA;QACvB,QAAQ,CAAC,EAAE,MAAM,CAAA;QACjB,UAAU,CAAC,EAAE,MAAM,CAAA;QACnB,UAAU,CAAC,EAAE,MAAM,CAAA;QACnB,QAAQ,CAAC,EAAE,MAAM,CAAA;QACjB,aAAa,CAAC,EAAE,MAAM,CAAA;QACtB,OAAO,CAAC,EAAE,gCAAgC,CAAC,GAAG,CAAA;KAC9C;CACD;AAED,OAAO,EAAE,cAAc,EAAE,CAAA"}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import type { FileUploader, FileUploaderInitializeOptions } from './FileUploader';
|
|
2
|
-
import type { UploadedFileMetadata } from './UploadedFileMetadata';
|
|
3
|
-
declare class SwitchFileUploader implements FileUploader {
|
|
4
|
-
private readonly subUploaders;
|
|
5
|
-
constructor(subUploaders: SwitchFileUploader.SubUploaders);
|
|
6
|
-
upload(files: Map<File, UploadedFileMetadata>, options: FileUploaderInitializeOptions): Promise<void>;
|
|
7
|
-
}
|
|
8
|
-
declare namespace SwitchFileUploader {
|
|
9
|
-
type FilePredicate = (file: File) => boolean;
|
|
10
|
-
type SubUploaders = Iterable<[FilePredicate, FileUploader]>;
|
|
11
|
-
}
|
|
12
|
-
export { SwitchFileUploader };
|
|
13
|
-
//# sourceMappingURL=SwitchFileUploader.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SwitchFileUploader.d.ts","sourceRoot":"","sources":["../../../../src/content/upload/SwitchFileUploader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,6BAA6B,EAAE,MAAM,gBAAgB,CAAA;AACjF,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAA;AAElE,cAAM,kBAAmB,YAAW,YAAY;IAC5B,OAAO,CAAC,QAAQ,CAAC,YAAY;gBAAZ,YAAY,EAAE,kBAAkB,CAAC,YAAY;IAEpE,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,EAAE,oBAAoB,CAAC,EAAE,OAAO,EAAE,6BAA6B;CA0BlG;AAED,kBAAU,kBAAkB,CAAC;IAC5B,KAAY,aAAa,GAAG,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAA;IACnD,KAAY,YAAY,GAAG,QAAQ,CAAC,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC,CAAA;CAClE;AAED,OAAO,EAAE,kBAAkB,EAAE,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"UploadedFileMetadata.d.ts","sourceRoot":"","sources":["../../../../src/content/upload/UploadedFileMetadata.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,oBAAoB;IACpC,WAAW,EAAE,WAAW,CAAA;CACxB"}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
export interface FileUploadErrorOptions {
|
|
2
|
-
developerMessage?: string
|
|
3
|
-
endUserMessage?: string
|
|
4
|
-
}
|
|
5
|
-
|
|
6
|
-
export class FileUploadError extends Error {
|
|
7
|
-
public constructor(public readonly options: FileUploadErrorOptions = {}) {
|
|
8
|
-
super(options.developerMessage)
|
|
9
|
-
}
|
|
10
|
-
}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import type { GraphQlClient } from '../../graphQlClient'
|
|
2
|
-
import type { FileUploadError } from './FileUploadError'
|
|
3
|
-
import type { FileUploadProgress } from './FileUploadProgress'
|
|
4
|
-
import type { UploadedFileMetadata } from './UploadedFileMetadata'
|
|
5
|
-
|
|
6
|
-
export interface FileUploader<Result = any, Error extends FileUploadError = FileUploadError> {
|
|
7
|
-
upload: (
|
|
8
|
-
files: Map<File, UploadedFileMetadata>,
|
|
9
|
-
options: FileUploaderInitializeOptions<Result, Error>,
|
|
10
|
-
) => Promise<void>
|
|
11
|
-
destroy?: (files: Result[]) => Promise<void> // TODO Note that admin uploaders don'T actually invoke this yet.
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
export interface FileUploaderInitializeOptions<Result = any, Error extends FileUploadError = FileUploadError> {
|
|
15
|
-
contentApiClient: GraphQlClient
|
|
16
|
-
onSuccess: (result: Iterable<[File, Result]>) => void
|
|
17
|
-
onError: (error: Iterable<File | [File, Error]>) => void
|
|
18
|
-
onProgress: (progress: Iterable<[File, FileUploadProgress]>) => void
|
|
19
|
-
}
|