@contember/client 1.1.0-beta.4 → 1.1.0-rc.12

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.
Files changed (41) hide show
  1. package/dist/development/content/params/whereToFilter.js.map +1 -1
  2. package/dist/development/content/upload/GenerateUploadUrlMutationBuilder.js +13 -6
  3. package/dist/development/content/upload/GenerateUploadUrlMutationBuilder.js.map +1 -1
  4. package/dist/development/content/upload/S3FileUploader.js +51 -36
  5. package/dist/development/content/upload/S3FileUploader.js.map +1 -1
  6. package/dist/development/crudQueryBuilder/CrudQueryBuilder.js.map +1 -1
  7. package/dist/development/crudQueryBuilder/WriteDataBuilder.js +5 -5
  8. package/dist/development/crudQueryBuilder/WriteDataBuilder.js.map +1 -1
  9. package/dist/development/crudQueryBuilder/types.js.map +1 -1
  10. package/dist/development/graphQlClient/GraphQlClient.js.map +1 -1
  11. package/dist/development/index.js.map +1 -1
  12. package/dist/production/content/params/whereToFilter.js.map +1 -1
  13. package/dist/production/content/upload/GenerateUploadUrlMutationBuilder.js +13 -6
  14. package/dist/production/content/upload/GenerateUploadUrlMutationBuilder.js.map +1 -1
  15. package/dist/production/content/upload/S3FileUploader.js +51 -36
  16. package/dist/production/content/upload/S3FileUploader.js.map +1 -1
  17. package/dist/production/crudQueryBuilder/CrudQueryBuilder.js.map +1 -1
  18. package/dist/production/crudQueryBuilder/WriteDataBuilder.js +5 -5
  19. package/dist/production/crudQueryBuilder/WriteDataBuilder.js.map +1 -1
  20. package/dist/production/crudQueryBuilder/types.js.map +1 -1
  21. package/dist/production/graphQlClient/GraphQlClient.js.map +1 -1
  22. package/dist/production/index.js.map +1 -1
  23. package/dist/types/content/params/whereToFilter.d.ts.map +1 -1
  24. package/dist/types/content/upload/GenerateUploadUrlMutationBuilder.d.ts +6 -1
  25. package/dist/types/content/upload/GenerateUploadUrlMutationBuilder.d.ts.map +1 -1
  26. package/dist/types/content/upload/S3FileUploader.d.ts +10 -4
  27. package/dist/types/content/upload/S3FileUploader.d.ts.map +1 -1
  28. package/dist/types/crudQueryBuilder/types.d.ts +18 -18
  29. package/dist/types/crudQueryBuilder/types.d.ts.map +1 -1
  30. package/dist/types/graphQlClient/GraphQlClient.d.ts +2 -2
  31. package/dist/types/graphQlClient/GraphQlClient.d.ts.map +1 -1
  32. package/dist/types/index.d.ts +1 -1
  33. package/dist/types/index.d.ts.map +1 -1
  34. package/dist/types/tsconfig.tsbuildinfo +1 -1
  35. package/package.json +10 -7
  36. package/src/content/params/whereToFilter.ts +2 -2
  37. package/src/content/upload/GenerateUploadUrlMutationBuilder.ts +24 -10
  38. package/src/content/upload/S3FileUploader.ts +65 -43
  39. package/src/graphQlClient/GraphQlClient.ts +2 -2
  40. package/src/index.ts +1 -1
  41. package/LICENSE +0 -186
@@ -1 +1 @@
1
- {"version":3,"file":"whereToFilter.js","sources":["../../../../src/content/params/whereToFilter.ts"],"sourcesContent":["import type { Input } from '@contember/schema'\nimport { GraphQlLiteral } from '../../graphQlBuilder'\n\nexport const whereToFilter = (\n\tby: Input.UniqueWhere<GraphQlLiteral>,\n): Input.Where<Input.Condition<Input.ColumnValue<GraphQlLiteral>>> => {\n\tconst where: Input.Where<Input.Condition<Input.ColumnValue<GraphQlLiteral>>> = {}\n\tfor (const key in by) {\n\t\tconst value = by[key]\n\n\t\tif (value instanceof GraphQlLiteral || typeof value === 'string' || typeof value === 'number') {\n\t\t\twhere[key] = { eq: value }\n\t\t} else {\n\t\t\twhere[key] = whereToFilter(value)\n\t\t}\n\t}\n\n\treturn where\n}\n"],"names":[],"mappings":";AAGa,MAAA,gBAAgB,CAC5B,OACqE;AACrE,QAAM,QAAyE,CAAA;AAC/E,aAAW,OAAO,IAAI;AACrB,UAAM,QAAQ,GAAG;AAEjB,QAAI,iBAAiB,kBAAkB,OAAO,UAAU,YAAY,OAAO,UAAU,UAAU;AACxF,YAAA,OAAO,EAAE,IAAI,MAAM;AAAA,IAAA,OACnB;AACA,YAAA,OAAO,cAAc,KAAK;AAAA,IACjC;AAAA,EACD;AAEO,SAAA;AACR;"}
1
+ {"version":3,"file":"whereToFilter.js","sources":["../../../../src/content/params/whereToFilter.ts"],"sourcesContent":["import type { Input, Writable } from '@contember/schema'\nimport { GraphQlLiteral } from '../../graphQlBuilder'\n\nexport const whereToFilter = (\n\tby: Input.UniqueWhere<GraphQlLiteral>,\n): Input.Where<Input.Condition<Input.ColumnValue<GraphQlLiteral>>> => {\n\tconst where: Writable<Input.Where<Input.Condition<Input.ColumnValue<GraphQlLiteral>>>> = {}\n\tfor (const key in by) {\n\t\tconst value = by[key]\n\n\t\tif (value instanceof GraphQlLiteral || typeof value === 'string' || typeof value === 'number') {\n\t\t\twhere[key] = { eq: value }\n\t\t} else {\n\t\t\twhere[key] = whereToFilter(value)\n\t\t}\n\t}\n\n\treturn where\n}\n"],"names":[],"mappings":";AAGa,MAAA,gBAAgB,CAC5B,OACqE;AACrE,QAAM,QAAmF,CAAA;AACzF,aAAW,OAAO,IAAI;AACrB,UAAM,QAAQ,GAAG;AAEjB,QAAI,iBAAiB,kBAAkB,OAAO,UAAU,YAAY,OAAO,UAAU,UAAU;AACxF,YAAA,OAAO,EAAE,IAAI,MAAM;AAAA,IAAA,OACnB;AACA,YAAA,OAAO,cAAc,KAAK;AAAA,IACjC;AAAA,EACD;AAEO,SAAA;AACR;"}
@@ -1,20 +1,27 @@
1
+ import { ObjectBuilder } from "../../graphQlBuilder/ObjectBuilder.js";
2
+ import { QueryBuilder } from "../../graphQlBuilder/QueryBuilder.js";
1
3
  var __defProp = Object.defineProperty;
2
4
  var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3
5
  var __publicField = (obj, key, value) => {
4
6
  __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
5
7
  return value;
6
8
  };
7
- import { ObjectBuilder } from "../../graphQlBuilder/ObjectBuilder.js";
8
- import { QueryBuilder } from "../../graphQlBuilder/QueryBuilder.js";
9
9
  const _GenerateUploadUrlMutationBuilder = class {
10
10
  static buildQuery(parameters) {
11
11
  return new QueryBuilder().mutation((builder) => {
12
12
  for (const alias in parameters) {
13
13
  const fileParameters = parameters[alias];
14
- builder = builder.object(
15
- alias,
16
- _GenerateUploadUrlMutationBuilder.generateUploadUrlFields.argument("contentType", fileParameters.contentType).argument("expiration", fileParameters.expiration).argument("prefix", fileParameters.prefix).argument("acl", fileParameters.acl)
17
- );
14
+ if (fileParameters.suffix || fileParameters.fileName || fileParameters.extension) {
15
+ builder = builder.object(
16
+ alias,
17
+ _GenerateUploadUrlMutationBuilder.generateUploadUrlFields.argument("input", fileParameters)
18
+ );
19
+ } else {
20
+ builder = builder.object(
21
+ alias,
22
+ _GenerateUploadUrlMutationBuilder.generateUploadUrlFields.argument("contentType", fileParameters.contentType).argument("expiration", fileParameters.expiration).argument("prefix", fileParameters.prefix).argument("acl", fileParameters.acl)
23
+ );
24
+ }
18
25
  }
19
26
  return builder;
20
27
  });
@@ -1 +1 @@
1
- {"version":3,"file":"GenerateUploadUrlMutationBuilder.js","sources":["../../../../src/content/upload/GenerateUploadUrlMutationBuilder.ts"],"sourcesContent":["import { GraphQlLiteral, ObjectBuilder, QueryBuilder } from '../../graphQlBuilder'\n\nclass GenerateUploadUrlMutationBuilder {\n\tprivate static generateUploadUrlFields = new ObjectBuilder()\n\t\t.name('generateUploadUrl')\n\t\t.field('url')\n\t\t.field('publicUrl')\n\t\t.field('method')\n\t\t.object('headers', builder => builder.field('key').field('value'))\n\n\tpublic static buildQuery(parameters: GenerateUploadUrlMutationBuilder.MutationParameters): string {\n\t\treturn new QueryBuilder().mutation(builder => {\n\t\t\tfor (const alias in parameters) {\n\t\t\t\tconst fileParameters = parameters[alias]\n\n\t\t\t\tbuilder = builder.object(\n\t\t\t\t\talias,\n\t\t\t\t\tGenerateUploadUrlMutationBuilder.generateUploadUrlFields\n\t\t\t\t\t\t.argument('contentType', fileParameters.contentType)\n\t\t\t\t\t\t.argument('expiration', fileParameters.expiration)\n\t\t\t\t\t\t.argument('prefix', fileParameters.prefix)\n\t\t\t\t\t\t.argument('acl', fileParameters.acl),\n\t\t\t\t)\n\t\t\t}\n\n\t\t\treturn builder\n\t\t})\n\t}\n}\n\nnamespace GenerateUploadUrlMutationBuilder {\n\texport interface FileParameters {\n\t\tcontentType: string\n\t\texpiration?: number\n\t\tprefix?: string\n\t\tacl?: GraphQlLiteral<'PUBLIC_READ' | 'PRIVATE' | 'NONE'>\n\t}\n\n\texport interface MutationParameters {\n\t\t[alias: string]: FileParameters\n\t}\n\n\texport interface ResponseBody {\n\t\turl: string\n\t\tpublicUrl: string\n\t\tmethod: string\n\t\theaders: Array<{\n\t\t\tkey: string\n\t\t\tvalue: string\n\t\t}>\n\t}\n\n\texport interface MutationResponse {\n\t\t[alias: string]: ResponseBody\n\t}\n}\n\nexport { GenerateUploadUrlMutationBuilder }\n"],"names":[],"mappings":";;;;;;;;AAEA,MAAM,oCAAN,MAAuC;AAAA,EAQtC,OAAc,WAAW,YAAyE;AACjG,WAAO,IAAI,aAAA,EAAe,SAAS,CAAW,YAAA;AAC7C,iBAAW,SAAS,YAAY;AAC/B,cAAM,iBAAiB,WAAW;AAElC,kBAAU,QAAQ;AAAA,UACjB;AAAA,UACA,kCAAiC,wBAC/B,SAAS,eAAe,eAAe,WAAW,EAClD,SAAS,cAAc,eAAe,UAAU,EAChD,SAAS,UAAU,eAAe,MAAM,EACxC,SAAS,OAAO,eAAe,GAAG;AAAA,QAAA;AAAA,MAEtC;AAEO,aAAA;AAAA,IAAA,CACP;AAAA,EACF;AACD;AA1BA,IAAM,mCAAN;AACC,cADK,kCACU,2BAA0B,IAAI,cAAc,EACzD,KAAK,mBAAmB,EACxB,MAAM,KAAK,EACX,MAAM,WAAW,EACjB,MAAM,QAAQ,EACd,OAAO,WAAW,CAAA,YAAW,QAAQ,MAAM,KAAK,EAAE,MAAM,OAAO,CAAC;"}
1
+ {"version":3,"file":"GenerateUploadUrlMutationBuilder.js","sources":["../../../../src/content/upload/GenerateUploadUrlMutationBuilder.ts"],"sourcesContent":["import { GraphQlLiteral, ObjectBuilder, QueryBuilder } from '../../graphQlBuilder'\n\nclass GenerateUploadUrlMutationBuilder {\n\tprivate static generateUploadUrlFields = new ObjectBuilder()\n\t\t.name('generateUploadUrl')\n\t\t.field('url')\n\t\t.field('publicUrl')\n\t\t.field('method')\n\t\t.object('headers', builder => builder.field('key').field('value'))\n\n\tpublic static buildQuery(parameters: GenerateUploadUrlMutationBuilder.MutationParameters): string {\n\t\treturn new QueryBuilder().mutation(builder => {\n\t\t\tfor (const alias in parameters) {\n\t\t\t\tconst fileParameters = parameters[alias]\n\t\t\t\tif (fileParameters.suffix || fileParameters.fileName || fileParameters.extension) {\n\t\t\t\t\tbuilder = builder.object(\n\t\t\t\t\t\talias,\n\t\t\t\t\t\tGenerateUploadUrlMutationBuilder.generateUploadUrlFields\n\t\t\t\t\t\t\t.argument('input', fileParameters),\n\t\t\t\t\t)\n\t\t\t\t} else {\n\t\t\t\t\t// BC\n\t\t\t\t\tbuilder = builder.object(\n\t\t\t\t\t\talias,\n\t\t\t\t\t\tGenerateUploadUrlMutationBuilder.generateUploadUrlFields\n\t\t\t\t\t\t\t.argument('contentType', fileParameters.contentType)\n\t\t\t\t\t\t\t.argument('expiration', fileParameters.expiration)\n\t\t\t\t\t\t\t.argument('prefix', fileParameters.prefix)\n\t\t\t\t\t\t\t.argument('acl', fileParameters.acl),\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn builder\n\t\t})\n\t}\n}\n\nnamespace GenerateUploadUrlMutationBuilder {\n\texport type Acl = GraphQlLiteral<'PUBLIC_READ' | 'PRIVATE' | 'NONE'>;\n\n\texport interface FileParameters {\n\t\tcontentType: string\n\t\texpiration?: number\n\t\tsize?: number\n\t\tprefix?: string\n\t\textension?: string\n\t\tsuffix?: string\n\t\tfileName?: string\n\t\tacl?: Acl\n\t}\n\n\texport interface MutationParameters {\n\t\t[alias: string]: FileParameters\n\t}\n\n\texport interface ResponseBody {\n\t\turl: string\n\t\tpublicUrl: string\n\t\tmethod: string\n\t\theaders: Array<{\n\t\t\tkey: string\n\t\t\tvalue: string\n\t\t}>\n\t}\n\n\texport interface MutationResponse {\n\t\t[alias: string]: ResponseBody\n\t}\n}\n\nexport { GenerateUploadUrlMutationBuilder }\n"],"names":[],"mappings":";;;;;;;;AAEA,MAAM,oCAAN,MAAuC;AAAA,EAQtC,OAAc,WAAW,YAAyE;AACjG,WAAO,IAAI,aAAA,EAAe,SAAS,CAAW,YAAA;AAC7C,iBAAW,SAAS,YAAY;AAC/B,cAAM,iBAAiB,WAAW;AAClC,YAAI,eAAe,UAAU,eAAe,YAAY,eAAe,WAAW;AACjF,oBAAU,QAAQ;AAAA,YACjB;AAAA,YACA,kCAAiC,wBAC/B,SAAS,SAAS,cAAc;AAAA,UAAA;AAAA,QACnC,OACM;AAEN,oBAAU,QAAQ;AAAA,YACjB;AAAA,YACA,kCAAiC,wBAC/B,SAAS,eAAe,eAAe,WAAW,EAClD,SAAS,cAAc,eAAe,UAAU,EAChD,SAAS,UAAU,eAAe,MAAM,EACxC,SAAS,OAAO,eAAe,GAAG;AAAA,UAAA;AAAA,QAEtC;AAAA,MACD;AAEO,aAAA;AAAA,IAAA,CACP;AAAA,EACF;AACD;AAlCA,IAAM,mCAAN;AACC,cADK,kCACU,2BAA0B,IAAI,cAAc,EACzD,KAAK,mBAAmB,EACxB,MAAM,KAAK,EACX,MAAM,WAAW,EACjB,MAAM,QAAQ,EACd,OAAO,WAAW,CAAA,YAAW,QAAQ,MAAM,KAAK,EAAE,MAAM,OAAO,CAAC,CAAA;"}
@@ -1,26 +1,27 @@
1
+ import pLimit from "p-limit";
2
+ import { FileUploadError } from "./FileUploadError.js";
3
+ import { GenerateUploadUrlMutationBuilder } from "./GenerateUploadUrlMutationBuilder.js";
4
+ import { readFileAsArrayBuffer } from "../../utils/readFileAsArrayBuffer.js";
1
5
  var __defProp = Object.defineProperty;
2
6
  var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3
7
  var __publicField = (obj, key, value) => {
4
8
  __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
5
9
  return value;
6
10
  };
7
- import { GenerateUploadUrlMutationBuilder } from "./GenerateUploadUrlMutationBuilder.js";
8
- import { FileUploadError } from "./FileUploadError.js";
9
- import { readFileAsArrayBuffer } from "../../utils/readFileAsArrayBuffer.js";
10
11
  class S3FileUploader {
11
12
  constructor(options = {}) {
13
+ this.options = options;
12
14
  __publicField(this, "uploadState");
13
15
  __publicField(this, "generateNewAlias", (() => {
14
16
  let alias = 1;
15
17
  return () => alias++;
16
18
  })());
17
- this.options = options;
18
19
  this.uploadState = /* @__PURE__ */ new WeakMap();
19
20
  }
20
21
  static formatFullAlias(alias) {
21
22
  return `file${alias}`;
22
23
  }
23
- async upload(files, { contentApiClient, onSuccess, onError, onProgress }) {
24
+ async upload(files, options) {
24
25
  const parameters = {};
25
26
  for (const [file, metadata] of files) {
26
27
  if (this.uploadState.has(file)) {
@@ -35,6 +36,10 @@ class S3FileUploader {
35
36
  parameters[S3FileUploader.formatFullAlias(alias)] = {
36
37
  contentType: uploadOptions?.fileType ?? file.type,
37
38
  prefix: uploadOptions?.filePrefix,
39
+ suffix: uploadOptions?.fileSuffix,
40
+ size: uploadOptions?.fileSize,
41
+ extension: uploadOptions?.fileExtension,
42
+ fileName: uploadOptions?.fileName,
38
43
  expiration: uploadOptions?.fileExpiration,
39
44
  acl: uploadOptions?.fileAcl
40
45
  };
@@ -44,48 +49,58 @@ class S3FileUploader {
44
49
  }
45
50
  const mutation = GenerateUploadUrlMutationBuilder.buildQuery(parameters);
46
51
  try {
47
- const response = await contentApiClient.sendRequest(mutation);
52
+ const response = await options.contentApiClient.sendRequest(mutation);
48
53
  const responseData = response.data;
54
+ const limit = pLimit(this.options.concurrency ?? 5);
55
+ const promises = [];
49
56
  for (const [file] of files) {
50
- const fileState = this.uploadState.get(file);
51
- const datumBody = responseData[S3FileUploader.formatFullAlias(fileState.alias)];
52
- const uploadRequestBody = await readFileAsArrayBuffer(file);
53
- const xhr = new XMLHttpRequest();
54
- fileState.request = xhr;
55
- xhr.open(datumBody.method, datumBody.url);
56
- for (const header of datumBody.headers) {
57
- xhr.setRequestHeader(header.key, header.value);
58
- }
59
- xhr.addEventListener("load", () => {
60
- const successMetadata = {
61
- fileUrl: datumBody.publicUrl
62
- };
63
- onSuccess([[file, successMetadata]]);
64
- });
65
- onError && xhr.addEventListener("error", (e) => {
66
- onError([file]);
67
- });
68
- onProgress && xhr.upload?.addEventListener("progress", (e) => {
69
- onProgress([
70
- [
71
- file,
72
- {
73
- progress: e.loaded / e.total
74
- }
75
- ]
76
- ]);
77
- });
78
- xhr.send(uploadRequestBody);
57
+ promises.push(limit(() => this.uploadSingleFile(file, responseData, options)));
79
58
  }
59
+ await Promise.all(promises);
80
60
  } catch (error) {
81
61
  if (error instanceof FileUploadError) {
82
62
  const fileUploadError = error;
83
- onError(Array.from(files).map(([file]) => [file, fileUploadError]));
63
+ options.onError(Array.from(files).map(([file]) => [file, fileUploadError]));
84
64
  } else {
85
65
  throw error;
86
66
  }
87
67
  }
88
68
  }
69
+ uploadSingleFile(file, responseData, { onProgress, onError, onSuccess }) {
70
+ return new Promise(async (resolve, reject) => {
71
+ const fileState = this.uploadState.get(file);
72
+ const datumBody = responseData[S3FileUploader.formatFullAlias(fileState.alias)];
73
+ const uploadRequestBody = await readFileAsArrayBuffer(file);
74
+ const xhr = new XMLHttpRequest();
75
+ fileState.request = xhr;
76
+ xhr.open(datumBody.method, datumBody.url);
77
+ for (const header of datumBody.headers) {
78
+ xhr.setRequestHeader(header.key, header.value);
79
+ }
80
+ xhr.addEventListener("load", () => {
81
+ const successMetadata = {
82
+ fileUrl: datumBody.publicUrl
83
+ };
84
+ onSuccess([[file, successMetadata]]);
85
+ resolve();
86
+ });
87
+ xhr.addEventListener("error", (e) => {
88
+ onError([file]);
89
+ reject(e);
90
+ });
91
+ xhr.upload?.addEventListener("progress", (e) => {
92
+ onProgress([
93
+ [
94
+ file,
95
+ {
96
+ progress: e.loaded / e.total
97
+ }
98
+ ]
99
+ ]);
100
+ });
101
+ xhr.send(uploadRequestBody);
102
+ });
103
+ }
89
104
  }
90
105
  export {
91
106
  S3FileUploader
@@ -1 +1 @@
1
- {"version":3,"file":"S3FileUploader.js","sources":["../../../../src/content/upload/S3FileUploader.ts"],"sourcesContent":["import { readFileAsArrayBuffer } from '../../utils'\nimport type { FileUploader, FileUploaderInitializeOptions } from './FileUploader'\nimport { GenerateUploadUrlMutationBuilder } from './GenerateUploadUrlMutationBuilder'\nimport type { UploadedFileMetadata } from './UploadedFileMetadata'\nimport { FileUploadError } from './FileUploadError'\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\t{ contentApiClient, onSuccess, onError, onProgress }: 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\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 response = await contentApiClient.sendRequest(mutation)\n\t\t\tconst responseData: GenerateUploadUrlMutationBuilder.MutationResponse = response.data\n\n\t\t\tfor (const [file] of files) {\n\t\t\t\tconst fileState = this.uploadState.get(file)!\n\t\t\t\tconst datumBody = responseData[S3FileUploader.formatFullAlias(fileState.alias)]\n\t\t\t\tconst uploadRequestBody = await readFileAsArrayBuffer(file)\n\t\t\t\tconst xhr = new XMLHttpRequest()\n\n\t\t\t\tfileState.request = xhr\n\n\t\t\t\txhr.open(datumBody.method, datumBody.url)\n\n\t\t\t\tfor (const header of datumBody.headers) {\n\t\t\t\t\txhr.setRequestHeader(header.key, header.value)\n\t\t\t\t}\n\t\t\t\txhr.addEventListener('load', () => {\n\t\t\t\t\tconst successMetadata: S3FileUploader.SuccessMetadata = {\n\t\t\t\t\t\tfileUrl: datumBody.publicUrl,\n\t\t\t\t\t}\n\t\t\t\t\tonSuccess([[file, successMetadata]])\n\t\t\t\t})\n\t\t\t\tonError &&\n\t\t\t\t\txhr.addEventListener('error', e => {\n\t\t\t\t\t\tonError([file])\n\t\t\t\t\t})\n\t\t\t\tonProgress &&\n\t\t\t\t\txhr.upload?.addEventListener('progress', e => {\n\t\t\t\t\t\tonProgress([\n\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\tfile,\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tprogress: e.loaded / e.total,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t])\n\t\t\t\t\t})\n\t\t\t\txhr.send(uploadRequestBody)\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tif (error instanceof FileUploadError) {\n\t\t\t\tconst fileUploadError = error\n\t\t\t\tonError(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\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}\n\n\texport interface S3UploadOptions {\n\t\tfileType?: GenerateUploadUrlMutationBuilder.FileParameters['contentType']\n\t\tfileExpiration?: GenerateUploadUrlMutationBuilder.FileParameters['expiration']\n\t\tfilePrefix?: GenerateUploadUrlMutationBuilder.FileParameters['prefix']\n\t\tfileAcl?: GenerateUploadUrlMutationBuilder.FileParameters['acl']\n\t}\n}\n\nexport { S3FileUploader }\n"],"names":[],"mappings":";;;;;;;;;AAWA,MAAM,eAAuE;AAAA,EAGrE,YAA4B,UAAkC,IAAI;AAFxD;AAMT,6CAAoB,MAAM;AACjC,UAAI,QAAQ;AACZ,aAAO,MAAM;AAAA,IAAA;AANqB,SAAA,UAAA;AAC7B,SAAA,kCAAkB;EACxB;AAAA,EAOA,OAAe,gBAAgB,OAAe;AAC7C,WAAO,OAAO;AAAA,EACf;AAAA,EAEA,MAAa,OACZ,OACA,EAAE,kBAAkB,WAAW,SAAS,cACvC;AACD,UAAM,aAAkE,CAAA;AAExE,eAAW,CAAC,MAAM,QAAQ,KAAK,OAAO;AACrC,UAAI,KAAK,YAAY,IAAI,IAAI,GAAG;AAC/B,cAAM,cAAc,KAAK,YAAY,IAAI,IAAI;AAC7C,oBAAY,SAAS;MACtB;AAEM,YAAA,QAAQ,KAAK;AACd,WAAA,YAAY,IAAI,MAAM;AAAA,QAC1B;AAAA,MAAA,CACA;AAED,YAAM,gBAAgB,KAAK,QAAQ,mBAAmB,IAAI;AAE/C,iBAAA,eAAe,gBAAgB,KAAK,KAAK;AAAA,QACnD,aAAa,eAAe,YAAY,KAAK;AAAA,QAC7C,QAAQ,eAAe;AAAA,QACvB,YAAY,eAAe;AAAA,QAC3B,KAAK,eAAe;AAAA,MAAA;AAGZ,eAAA,YAAY,iBAAiB,SAAS,MAAM;AACpD,aAAK,YAAY,IAAI,IAAI,GAAG,SAAS;MAAM,CAC3C;AAAA,IACF;AAEM,UAAA,WAAW,iCAAiC,WAAW,UAAU;AACnE,QAAA;AACH,YAAM,WAAW,MAAM,iBAAiB,YAAY,QAAQ;AAC5D,YAAM,eAAkE,SAAS;AAEtE,iBAAA,CAAC,IAAI,KAAK,OAAO;AAC3B,cAAM,YAAY,KAAK,YAAY,IAAI,IAAI;AAC3C,cAAM,YAAY,aAAa,eAAe,gBAAgB,UAAU,KAAK;AACvE,cAAA,oBAAoB,MAAM,sBAAsB,IAAI;AACpD,cAAA,MAAM,IAAI;AAEhB,kBAAU,UAAU;AAEpB,YAAI,KAAK,UAAU,QAAQ,UAAU,GAAG;AAE7B,mBAAA,UAAU,UAAU,SAAS;AACvC,cAAI,iBAAiB,OAAO,KAAK,OAAO,KAAK;AAAA,QAC9C;AACI,YAAA,iBAAiB,QAAQ,MAAM;AAClC,gBAAM,kBAAkD;AAAA,YACvD,SAAS,UAAU;AAAA,UAAA;AAEpB,oBAAU,CAAC,CAAC,MAAM,eAAe,CAAC,CAAC;AAAA,QAAA,CACnC;AAEA,mBAAA,IAAI,iBAAiB,SAAS,CAAK,MAAA;AAC1B,kBAAA,CAAC,IAAI,CAAC;AAAA,QAAA,CACd;AACF,sBACC,IAAI,QAAQ,iBAAiB,YAAY,CAAK,MAAA;AAClC,qBAAA;AAAA,YACV;AAAA,cACC;AAAA,cACA;AAAA,gBACC,UAAU,EAAE,SAAS,EAAE;AAAA,cACxB;AAAA,YACD;AAAA,UAAA,CACA;AAAA,QAAA,CACD;AACF,YAAI,KAAK,iBAAiB;AAAA,MAC3B;AAAA,aACQ;AACR,UAAI,iBAAiB,iBAAiB;AACrC,cAAM,kBAAkB;AACxB,gBAAQ,MAAM,KAAK,KAAK,EAAE,IAAI,CAAC,CAAC,IAAI,MAAM,CAAC,MAAM,eAAe,CAAC,CAAC;AAAA,MAAA,OAE5D;AACA,cAAA;AAAA,MACP;AAAA,IACD;AAAA,EACD;AACD;"}
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 response = await options.contentApiClient.sendRequest<{ data: GenerateUploadUrlMutationBuilder.MutationResponse }>(mutation)\n\t\t\tconst responseData = response.data\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 +1 @@
1
- {"version":3,"file":"CrudQueryBuilder.js","sources":["../../../src/crudQueryBuilder/CrudQueryBuilder.ts"],"sourcesContent":["import { ObjectBuilder, QueryBuilder, RootObjectBuilder } from '../graphQlBuilder'\nimport { isEmptyObject } from '../utils'\nimport { CrudQueryBuilderError } from './CrudQueryBuilderError'\nimport { ReadBuilder } from './ReadBuilder'\nimport type {\n\tCreateMutationArguments,\n\tCreateMutationFields,\n\tDeleteMutationArguments,\n\tDeleteMutationFields,\n\tGetQueryArguments,\n\tListQueryArguments,\n\tMutations,\n\tPaginateQueryArguments,\n\tQueries,\n\tUpdateMutationArguments,\n\tUpdateMutationFields,\n\tWriteOperation,\n} from './types'\nimport { WriteBuilder } from './WriteBuilder'\n\nexport class CrudQueryBuilder {\n\tconstructor(\n\t\tprivate type: undefined | 'query' | 'mutation' = undefined,\n\t\tprivate rootObjectBuilder: RootObjectBuilder = new RootObjectBuilder(),\n\t) {}\n\n\tpublic fragment(name: string, typeName: string, query: ReadBuilder.BuilderFactory<never>): CrudQueryBuilder {\n\t\tconst readBuilder = ReadBuilder.instantiateFromFactory(query)\n\t\tconst objectBuilder = readBuilder.objectBuilder.name(typeName)\n\n\t\treturn new CrudQueryBuilder(this.type, this.rootObjectBuilder.fragment(name, objectBuilder))\n\t}\n\n\tpublic list(\n\t\tname: string,\n\t\tquery: ReadBuilder.BuilderFactory<ListQueryArguments>,\n\t\talias?: string,\n\t): Omit<CrudQueryBuilder, Mutations> {\n\t\tif (this.type === 'mutation') {\n\t\t\tthrow new CrudQueryBuilderError('Cannot combine queries and mutations')\n\t\t}\n\t\tname = `list${name}`\n\t\tquery = ReadBuilder.instantiateFromFactory(query)\n\n\t\tconst [objectName, objectBuilder] =\n\t\t\ttypeof alias === 'string' ? [alias, query.objectBuilder.name(name)] : [name, query.objectBuilder]\n\n\t\treturn new CrudQueryBuilder('query', this.rootObjectBuilder.object(objectName, objectBuilder))\n\t}\n\n\tpublic paginate(\n\t\tname: string,\n\t\tquery: ReadBuilder.BuilderFactory<PaginateQueryArguments>,\n\t\talias?: string,\n\t): Omit<CrudQueryBuilder, Mutations> {\n\t\tif (this.type === 'mutation') {\n\t\t\tthrow new CrudQueryBuilderError('Cannot combine queries and mutations')\n\t\t}\n\t\tname = `paginate${name}`\n\t\tquery = ReadBuilder.instantiateFromFactory(query)\n\n\t\tconst [objectName, objectBuilder] =\n\t\t\ttypeof alias === 'string' ? [alias, query.objectBuilder.name(name)] : [name, query.objectBuilder]\n\n\t\treturn new CrudQueryBuilder('query', this.rootObjectBuilder.object(objectName, objectBuilder))\n\t}\n\n\tpublic get(\n\t\tname: string,\n\t\tquery: ReadBuilder.BuilderFactory<GetQueryArguments>,\n\t\talias?: string,\n\t): Omit<CrudQueryBuilder, Mutations> {\n\t\tif (this.type === 'mutation') {\n\t\t\tthrow new CrudQueryBuilderError('Cannot combine queries and mutations')\n\t\t}\n\t\tname = `get${name}`\n\t\tquery = ReadBuilder.instantiateFromFactory(query)\n\n\t\tconst [objectName, objectBuilder] =\n\t\t\ttypeof alias === 'string' ? [alias, query.objectBuilder.name(name)] : [name, query.objectBuilder]\n\n\t\treturn new CrudQueryBuilder('query', this.rootObjectBuilder.object(objectName, objectBuilder))\n\t}\n\n\tpublic update(\n\t\tname: string,\n\t\tquery: WriteBuilder.BuilderFactory<UpdateMutationArguments, UpdateMutationFields, WriteOperation.Update>,\n\t\talias?: string,\n\t): Omit<CrudQueryBuilder, Queries> {\n\t\tif (this.type === 'query') {\n\t\t\tthrow new CrudQueryBuilderError('Cannot combine queries and mutations')\n\t\t}\n\t\tname = `update${name}`\n\t\tquery = WriteBuilder.instantiateFromFactory(query)\n\n\t\tif (isEmptyObject(query.objectBuilder.args.data)) {\n\t\t\treturn this\n\t\t}\n\n\t\tconst [objectName, objectBuilder] =\n\t\t\ttypeof alias === 'string' ? [alias, query.objectBuilder.name(name)] : [name, query.objectBuilder]\n\n\t\treturn new CrudQueryBuilder('mutation', this.rootObjectBuilder.object(objectName, objectBuilder))\n\t}\n\n\tpublic create(\n\t\tname: string,\n\t\tquery: WriteBuilder.BuilderFactory<CreateMutationArguments, CreateMutationFields, WriteOperation.Create>,\n\t\talias?: string,\n\t): Omit<CrudQueryBuilder, Queries> {\n\t\tif (this.type === 'query') {\n\t\t\tthrow new CrudQueryBuilderError('Cannot combine queries and mutations')\n\t\t}\n\t\tname = `create${name}`\n\t\tquery = WriteBuilder.instantiateFromFactory(query)\n\n\t\tif (isEmptyObject(query.objectBuilder.args.data)) {\n\t\t\treturn this\n\t\t}\n\n\t\tconst [objectName, objectBuilder] =\n\t\t\ttypeof alias === 'string' ? [alias, query.objectBuilder.name(name)] : [name, query.objectBuilder]\n\n\t\treturn new CrudQueryBuilder('mutation', this.rootObjectBuilder.object(objectName, objectBuilder))\n\t}\n\n\tpublic delete(\n\t\tname: string,\n\t\tquery: WriteBuilder.BuilderFactory<DeleteMutationArguments, DeleteMutationFields, WriteOperation.Delete>,\n\t\talias?: string,\n\t): Omit<CrudQueryBuilder, Queries> {\n\t\tif (this.type === 'query') {\n\t\t\tthrow new CrudQueryBuilderError('Cannot combine queries and mutations')\n\t\t}\n\t\tname = `delete${name}`\n\t\tquery = WriteBuilder.instantiateFromFactory(query)\n\n\t\tconst [objectName, objectBuilder] =\n\t\t\ttypeof alias === 'string' ? [alias, query.objectBuilder.name(name)] : [name, query.objectBuilder]\n\n\t\treturn new CrudQueryBuilder('mutation', this.rootObjectBuilder.object(objectName, objectBuilder))\n\t}\n\n\tpublic inTransaction(alias: string = 'transaction', options: { deferForeignKeyConstraints?: boolean } = {}): CrudQueryBuilder {\n\t\tconst objectBuilder = new ObjectBuilder(\n\t\t\t['ok', 'errorMessage'],\n\t\t\t{ ...this.rootObjectBuilder.objects },\n\t\t\t{ options },\n\t\t\tundefined,\n\t\t\tundefined,\n\t\t\t'transaction',\n\t\t)\n\n\t\treturn new CrudQueryBuilder(this.type, new RootObjectBuilder({ [alias]: objectBuilder }, this.rootObjectBuilder.fragmentDefinitions))\n\t}\n\n\tgetGql(): string {\n\t\tconst builder = new QueryBuilder()\n\t\tswitch (this.type) {\n\t\t\tcase 'mutation':\n\t\t\t\treturn builder.mutation(this.rootObjectBuilder)\n\t\t\tcase 'query':\n\t\t\t\treturn builder.query(this.rootObjectBuilder)\n\t\t\tdefault:\n\t\t\t\tthrow new CrudQueryBuilderError(`Invalid type ${this.type}`)\n\t\t}\n\t}\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"CrudQueryBuilder.js","sources":["../../../src/crudQueryBuilder/CrudQueryBuilder.ts"],"sourcesContent":["import { ObjectBuilder, QueryBuilder, RootObjectBuilder } from '../graphQlBuilder'\nimport { isEmptyObject } from '../utils'\nimport { CrudQueryBuilderError } from './CrudQueryBuilderError'\nimport { ReadBuilder } from './ReadBuilder'\nimport type {\n\tCreateMutationArguments,\n\tCreateMutationFields,\n\tDeleteMutationArguments,\n\tDeleteMutationFields,\n\tGetQueryArguments,\n\tListQueryArguments,\n\tMutations,\n\tPaginateQueryArguments,\n\tQueries,\n\tUpdateMutationArguments,\n\tUpdateMutationFields,\n\tWriteOperation,\n} from './types'\nimport { WriteBuilder } from './WriteBuilder'\n\nexport class CrudQueryBuilder {\n\tconstructor(\n\t\tprivate type: undefined | 'query' | 'mutation' = undefined,\n\t\tprivate rootObjectBuilder: RootObjectBuilder = new RootObjectBuilder(),\n\t) {}\n\n\tpublic fragment(name: string, typeName: string, query: ReadBuilder.BuilderFactory<never>): CrudQueryBuilder {\n\t\tconst readBuilder = ReadBuilder.instantiateFromFactory(query)\n\t\tconst objectBuilder = readBuilder.objectBuilder.name(typeName)\n\n\t\treturn new CrudQueryBuilder(this.type, this.rootObjectBuilder.fragment(name, objectBuilder))\n\t}\n\n\tpublic list(\n\t\tname: string,\n\t\tquery: ReadBuilder.BuilderFactory<ListQueryArguments>,\n\t\talias?: string,\n\t): Omit<CrudQueryBuilder, Mutations> {\n\t\tif (this.type === 'mutation') {\n\t\t\tthrow new CrudQueryBuilderError('Cannot combine queries and mutations')\n\t\t}\n\t\tname = `list${name}`\n\t\tquery = ReadBuilder.instantiateFromFactory(query)\n\n\t\tconst [objectName, objectBuilder] =\n\t\t\ttypeof alias === 'string' ? [alias, query.objectBuilder.name(name)] : [name, query.objectBuilder]\n\n\t\treturn new CrudQueryBuilder('query', this.rootObjectBuilder.object(objectName, objectBuilder))\n\t}\n\n\tpublic paginate(\n\t\tname: string,\n\t\tquery: ReadBuilder.BuilderFactory<PaginateQueryArguments>,\n\t\talias?: string,\n\t): Omit<CrudQueryBuilder, Mutations> {\n\t\tif (this.type === 'mutation') {\n\t\t\tthrow new CrudQueryBuilderError('Cannot combine queries and mutations')\n\t\t}\n\t\tname = `paginate${name}`\n\t\tquery = ReadBuilder.instantiateFromFactory(query)\n\n\t\tconst [objectName, objectBuilder] =\n\t\t\ttypeof alias === 'string' ? [alias, query.objectBuilder.name(name)] : [name, query.objectBuilder]\n\n\t\treturn new CrudQueryBuilder('query', this.rootObjectBuilder.object(objectName, objectBuilder))\n\t}\n\n\tpublic get(\n\t\tname: string,\n\t\tquery: ReadBuilder.BuilderFactory<GetQueryArguments>,\n\t\talias?: string,\n\t): Omit<CrudQueryBuilder, Mutations> {\n\t\tif (this.type === 'mutation') {\n\t\t\tthrow new CrudQueryBuilderError('Cannot combine queries and mutations')\n\t\t}\n\t\tname = `get${name}`\n\t\tquery = ReadBuilder.instantiateFromFactory(query)\n\n\t\tconst [objectName, objectBuilder] =\n\t\t\ttypeof alias === 'string' ? [alias, query.objectBuilder.name(name)] : [name, query.objectBuilder]\n\n\t\treturn new CrudQueryBuilder('query', this.rootObjectBuilder.object(objectName, objectBuilder))\n\t}\n\n\tpublic update(\n\t\tname: string,\n\t\tquery: WriteBuilder.BuilderFactory<UpdateMutationArguments, UpdateMutationFields, WriteOperation.Update>,\n\t\talias?: string,\n\t): Omit<CrudQueryBuilder, Queries> {\n\t\tif (this.type === 'query') {\n\t\t\tthrow new CrudQueryBuilderError('Cannot combine queries and mutations')\n\t\t}\n\t\tname = `update${name}`\n\t\tquery = WriteBuilder.instantiateFromFactory(query)\n\n\t\tif (isEmptyObject(query.objectBuilder.args.data)) {\n\t\t\treturn this\n\t\t}\n\n\t\tconst [objectName, objectBuilder] =\n\t\t\ttypeof alias === 'string' ? [alias, query.objectBuilder.name(name)] : [name, query.objectBuilder]\n\n\t\treturn new CrudQueryBuilder('mutation', this.rootObjectBuilder.object(objectName, objectBuilder))\n\t}\n\n\tpublic create(\n\t\tname: string,\n\t\tquery: WriteBuilder.BuilderFactory<CreateMutationArguments, CreateMutationFields, WriteOperation.Create>,\n\t\talias?: string,\n\t): Omit<CrudQueryBuilder, Queries> {\n\t\tif (this.type === 'query') {\n\t\t\tthrow new CrudQueryBuilderError('Cannot combine queries and mutations')\n\t\t}\n\t\tname = `create${name}`\n\t\tquery = WriteBuilder.instantiateFromFactory(query)\n\n\t\tif (isEmptyObject(query.objectBuilder.args.data)) {\n\t\t\treturn this\n\t\t}\n\n\t\tconst [objectName, objectBuilder] =\n\t\t\ttypeof alias === 'string' ? [alias, query.objectBuilder.name(name)] : [name, query.objectBuilder]\n\n\t\treturn new CrudQueryBuilder('mutation', this.rootObjectBuilder.object(objectName, objectBuilder))\n\t}\n\n\tpublic delete(\n\t\tname: string,\n\t\tquery: WriteBuilder.BuilderFactory<DeleteMutationArguments, DeleteMutationFields, WriteOperation.Delete>,\n\t\talias?: string,\n\t): Omit<CrudQueryBuilder, Queries> {\n\t\tif (this.type === 'query') {\n\t\t\tthrow new CrudQueryBuilderError('Cannot combine queries and mutations')\n\t\t}\n\t\tname = `delete${name}`\n\t\tquery = WriteBuilder.instantiateFromFactory(query)\n\n\t\tconst [objectName, objectBuilder] =\n\t\t\ttypeof alias === 'string' ? [alias, query.objectBuilder.name(name)] : [name, query.objectBuilder]\n\n\t\treturn new CrudQueryBuilder('mutation', this.rootObjectBuilder.object(objectName, objectBuilder))\n\t}\n\n\tpublic inTransaction(alias: string = 'transaction', options: { deferForeignKeyConstraints?: boolean } = {}): CrudQueryBuilder {\n\t\tconst objectBuilder = new ObjectBuilder(\n\t\t\t['ok', 'errorMessage'],\n\t\t\t{ ...this.rootObjectBuilder.objects },\n\t\t\t{ options },\n\t\t\tundefined,\n\t\t\tundefined,\n\t\t\t'transaction',\n\t\t)\n\n\t\treturn new CrudQueryBuilder(this.type, new RootObjectBuilder({ [alias]: objectBuilder }, this.rootObjectBuilder.fragmentDefinitions))\n\t}\n\n\tgetGql(): string {\n\t\tconst builder = new QueryBuilder()\n\t\tswitch (this.type) {\n\t\t\tcase 'mutation':\n\t\t\t\treturn builder.mutation(this.rootObjectBuilder)\n\t\t\tcase 'query':\n\t\t\t\treturn builder.query(this.rootObjectBuilder)\n\t\t\tdefault:\n\t\t\t\tthrow new CrudQueryBuilderError(`Invalid type ${this.type}`)\n\t\t}\n\t}\n}\n"],"names":[],"mappings":";;;;;;;AAoBO,MAAM,iBAAiB;AAAA,EAC7B,YACS,OAAyC,QACzC,oBAAuC,IAAI,qBAClD;AAFO,SAAA,OAAA;AACA,SAAA,oBAAA;AAAA,EACN;AAAA,EAEI,SAAS,MAAc,UAAkB,OAA4D;AACrG,UAAA,cAAc,YAAY,uBAAuB,KAAK;AAC5D,UAAM,gBAAgB,YAAY,cAAc,KAAK,QAAQ;AAEtD,WAAA,IAAI,iBAAiB,KAAK,MAAM,KAAK,kBAAkB,SAAS,MAAM,aAAa,CAAC;AAAA,EAC5F;AAAA,EAEO,KACN,MACA,OACA,OACoC;AAChC,QAAA,KAAK,SAAS,YAAY;AACvB,YAAA,IAAI,sBAAsB,sCAAsC;AAAA,IACvE;AACA,WAAO,OAAO;AACN,YAAA,YAAY,uBAAuB,KAAK;AAEhD,UAAM,CAAC,YAAY,aAAa,IAC/B,OAAO,UAAU,WAAW,CAAC,OAAO,MAAM,cAAc,KAAK,IAAI,CAAC,IAAI,CAAC,MAAM,MAAM,aAAa;AAE1F,WAAA,IAAI,iBAAiB,SAAS,KAAK,kBAAkB,OAAO,YAAY,aAAa,CAAC;AAAA,EAC9F;AAAA,EAEO,SACN,MACA,OACA,OACoC;AAChC,QAAA,KAAK,SAAS,YAAY;AACvB,YAAA,IAAI,sBAAsB,sCAAsC;AAAA,IACvE;AACA,WAAO,WAAW;AACV,YAAA,YAAY,uBAAuB,KAAK;AAEhD,UAAM,CAAC,YAAY,aAAa,IAC/B,OAAO,UAAU,WAAW,CAAC,OAAO,MAAM,cAAc,KAAK,IAAI,CAAC,IAAI,CAAC,MAAM,MAAM,aAAa;AAE1F,WAAA,IAAI,iBAAiB,SAAS,KAAK,kBAAkB,OAAO,YAAY,aAAa,CAAC;AAAA,EAC9F;AAAA,EAEO,IACN,MACA,OACA,OACoC;AAChC,QAAA,KAAK,SAAS,YAAY;AACvB,YAAA,IAAI,sBAAsB,sCAAsC;AAAA,IACvE;AACA,WAAO,MAAM;AACL,YAAA,YAAY,uBAAuB,KAAK;AAEhD,UAAM,CAAC,YAAY,aAAa,IAC/B,OAAO,UAAU,WAAW,CAAC,OAAO,MAAM,cAAc,KAAK,IAAI,CAAC,IAAI,CAAC,MAAM,MAAM,aAAa;AAE1F,WAAA,IAAI,iBAAiB,SAAS,KAAK,kBAAkB,OAAO,YAAY,aAAa,CAAC;AAAA,EAC9F;AAAA,EAEO,OACN,MACA,OACA,OACkC;AAC9B,QAAA,KAAK,SAAS,SAAS;AACpB,YAAA,IAAI,sBAAsB,sCAAsC;AAAA,IACvE;AACA,WAAO,SAAS;AACR,YAAA,aAAa,uBAAuB,KAAK;AAEjD,QAAI,cAAc,MAAM,cAAc,KAAK,IAAI,GAAG;AAC1C,aAAA;AAAA,IACR;AAEA,UAAM,CAAC,YAAY,aAAa,IAC/B,OAAO,UAAU,WAAW,CAAC,OAAO,MAAM,cAAc,KAAK,IAAI,CAAC,IAAI,CAAC,MAAM,MAAM,aAAa;AAE1F,WAAA,IAAI,iBAAiB,YAAY,KAAK,kBAAkB,OAAO,YAAY,aAAa,CAAC;AAAA,EACjG;AAAA,EAEO,OACN,MACA,OACA,OACkC;AAC9B,QAAA,KAAK,SAAS,SAAS;AACpB,YAAA,IAAI,sBAAsB,sCAAsC;AAAA,IACvE;AACA,WAAO,SAAS;AACR,YAAA,aAAa,uBAAuB,KAAK;AAEjD,QAAI,cAAc,MAAM,cAAc,KAAK,IAAI,GAAG;AAC1C,aAAA;AAAA,IACR;AAEA,UAAM,CAAC,YAAY,aAAa,IAC/B,OAAO,UAAU,WAAW,CAAC,OAAO,MAAM,cAAc,KAAK,IAAI,CAAC,IAAI,CAAC,MAAM,MAAM,aAAa;AAE1F,WAAA,IAAI,iBAAiB,YAAY,KAAK,kBAAkB,OAAO,YAAY,aAAa,CAAC;AAAA,EACjG;AAAA,EAEO,OACN,MACA,OACA,OACkC;AAC9B,QAAA,KAAK,SAAS,SAAS;AACpB,YAAA,IAAI,sBAAsB,sCAAsC;AAAA,IACvE;AACA,WAAO,SAAS;AACR,YAAA,aAAa,uBAAuB,KAAK;AAEjD,UAAM,CAAC,YAAY,aAAa,IAC/B,OAAO,UAAU,WAAW,CAAC,OAAO,MAAM,cAAc,KAAK,IAAI,CAAC,IAAI,CAAC,MAAM,MAAM,aAAa;AAE1F,WAAA,IAAI,iBAAiB,YAAY,KAAK,kBAAkB,OAAO,YAAY,aAAa,CAAC;AAAA,EACjG;AAAA,EAEO,cAAc,QAAgB,eAAe,UAAoD,CAAA,GAAsB;AAC7H,UAAM,gBAAgB,IAAI;AAAA,MACzB,CAAC,MAAM,cAAc;AAAA,MACrB,EAAE,GAAG,KAAK,kBAAkB,QAAQ;AAAA,MACpC,EAAE,QAAQ;AAAA,MACV;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAGD,WAAO,IAAI,iBAAiB,KAAK,MAAM,IAAI,kBAAkB,EAAE,CAAC,QAAQ,cAAc,GAAG,KAAK,kBAAkB,mBAAmB,CAAC;AAAA,EACrI;AAAA,EAEA,SAAiB;AACV,UAAA,UAAU,IAAI;AACpB,YAAQ,KAAK,MAAM;AAAA,MAClB,KAAK;AACG,eAAA,QAAQ,SAAS,KAAK,iBAAiB;AAAA,MAC/C,KAAK;AACG,eAAA,QAAQ,MAAM,KAAK,iBAAiB;AAAA,MAC5C;AACC,cAAM,IAAI,sBAAsB,gBAAgB,KAAK,MAAM;AAAA,IAC7D;AAAA,EACD;AACD;"}
@@ -1,14 +1,14 @@
1
+ import { CrudQueryBuilderError } from "./CrudQueryBuilderError.js";
2
+ import { WriteManyRelationBuilder } from "./WriteManyRelationBuilder.js";
3
+ import { WriteOneRelationBuilder } from "./WriteOneRelationBuilder.js";
4
+ import { GraphQlLiteral } from "../graphQlBuilder/GraphQlLiteral.js";
5
+ import { isEmptyObject } from "../utils/isEmptyObject.js";
1
6
  var __defProp = Object.defineProperty;
2
7
  var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3
8
  var __publicField = (obj, key, value) => {
4
9
  __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
5
10
  return value;
6
11
  };
7
- import { CrudQueryBuilderError } from "./CrudQueryBuilderError.js";
8
- import { WriteManyRelationBuilder } from "./WriteManyRelationBuilder.js";
9
- import { WriteOneRelationBuilder } from "./WriteOneRelationBuilder.js";
10
- import { GraphQlLiteral } from "../graphQlBuilder/GraphQlLiteral.js";
11
- import { isEmptyObject } from "../utils/isEmptyObject.js";
12
12
  class WriteDataBuilder {
13
13
  constructor(data) {
14
14
  __publicField(this, "data");
@@ -1 +1 @@
1
- {"version":3,"file":"WriteDataBuilder.js","sources":["../../../src/crudQueryBuilder/WriteDataBuilder.ts"],"sourcesContent":["import type { Input, Value } from '@contember/schema'\nimport { GraphQlLiteral } from '../graphQlBuilder'\nimport { isEmptyObject } from '../utils'\nimport { CrudQueryBuilderError } from './CrudQueryBuilderError'\nimport type { WriteOperation } from './types'\nimport { WriteManyRelationBuilder } from './WriteManyRelationBuilder'\nimport { WriteOneRelationBuilder } from './WriteOneRelationBuilder'\n\nclass WriteDataBuilder<Op extends WriteOperation.ContentfulOperation> {\n\tpublic readonly data: WriteDataBuilder.DataFormat[Op['op']]\n\n\tpublic constructor(data?: WriteDataBuilder.DataFormat[Op['op']]) {\n\t\tthis.data = data || {}\n\t}\n\n\tpublic static resolveData<Op extends WriteOperation.ContentfulOperation>(\n\t\tdataLike: WriteDataBuilder.DataLike<Op>,\n\t): WriteDataBuilder.DataFormat[Op['op']] | undefined {\n\t\tlet resolvedData: WriteDataBuilder.DataFormat[Op['op']]\n\n\t\tif (dataLike instanceof WriteDataBuilder) {\n\t\t\tresolvedData = dataLike.data\n\t\t} else if (typeof dataLike === 'function') {\n\t\t\tresolvedData = dataLike(new WriteDataBuilder()).data\n\t\t} else {\n\t\t\tresolvedData = dataLike\n\t\t}\n\n\t\tif (isEmptyObject(resolvedData)) {\n\t\t\treturn undefined\n\t\t}\n\t\treturn resolvedData\n\t}\n\n\tpublic set(fieldName: string, value: Input.ColumnValue<GraphQlLiteral>) {\n\t\treturn new WriteDataBuilder<Op>({ ...this.data, [fieldName]: value })\n\t}\n\n\tpublic many(fieldName: string, data: WriteManyRelationBuilder.BuilderFactory<Op>): WriteDataBuilder<Op> {\n\t\tconst resolvedData = WriteManyRelationBuilder.instantiateFromFactory(data).data\n\t\treturn resolvedData === undefined || resolvedData.length === 0\n\t\t\t? this\n\t\t\t: new WriteDataBuilder<Op>(this.mergeInFreshData(this.data, fieldName, resolvedData))\n\t}\n\n\tpublic one(fieldName: string, data: WriteOneRelationBuilder.BuilderFactory<Op>): WriteDataBuilder<Op> {\n\t\tconst resolvedData = WriteOneRelationBuilder.instantiateFromFactory(data).data\n\t\treturn resolvedData === undefined || isEmptyObject(resolvedData)\n\t\t\t? this\n\t\t\t: new WriteDataBuilder<Op>(this.mergeInFreshData(this.data, fieldName, resolvedData))\n\t}\n\n\tprivate mergeInFreshData(\n\t\toriginal: WriteDataBuilder.DataFormat[Op['op']],\n\t\tfieldName: string,\n\t\tfresh: WriteManyRelationBuilder.DataFormat[Op['op']] | WriteOneRelationBuilder.DataFormat[Op['op']],\n\t): WriteDataBuilder.DataFormat[Op['op']] {\n\t\tif (fieldName in original) {\n\t\t\tconst existingValue = original[fieldName]\n\t\t\tif (Array.isArray(existingValue)) {\n\t\t\t\tif (Array.isArray(fresh)) {\n\t\t\t\t\treturn { ...original, [fieldName]: [...existingValue, ...fresh] }\n\t\t\t\t}\n\t\t\t\tthrow new CrudQueryBuilderError(`Inconsistent data.`)\n\t\t\t}\n\t\t\tif (Array.isArray(fresh)) {\n\t\t\t\tthrow new CrudQueryBuilderError(`Inconsistent data.`)\n\t\t\t}\n\t\t\treturn { ...original, [fieldName]: this.mergeUpdateOne(existingValue, fresh) }\n\t\t}\n\t\treturn { ...original, [fieldName]: fresh }\n\t}\n\n\tprivate mergeUpdateOne(\n\t\toriginal:\n\t\t\t| Value.FieldValue<GraphQlLiteral>\n\t\t\t| Input.CreateOneRelationInput<GraphQlLiteral>\n\t\t\t| Input.UpdateOneRelationInput<GraphQlLiteral>,\n\t\tfresh:\n\t\t\t| Value.FieldValue<GraphQlLiteral>\n\t\t\t| Input.CreateOneRelationInput<GraphQlLiteral>\n\t\t\t| Input.UpdateOneRelationInput<GraphQlLiteral>,\n\t):\n\t\t| Value.FieldValue<GraphQlLiteral>\n\t\t| Input.CreateOneRelationInput<GraphQlLiteral>\n\t\t| Input.UpdateOneRelationInput<GraphQlLiteral> {\n\t\t// TODO This implementation pretty bad but it will have to do for now.\n\t\tif (original instanceof GraphQlLiteral) {\n\t\t\tif (fresh instanceof GraphQlLiteral) {\n\t\t\t\tif (original.value === fresh.value) {\n\t\t\t\t\treturn original\n\t\t\t\t}\n\t\t\t}\n\t\t\tthrow new CrudQueryBuilderError(`Inconsistent data.`)\n\t\t}\n\t\tif (fresh instanceof GraphQlLiteral) {\n\t\t\tthrow new CrudQueryBuilderError(`Inconsistent data.`)\n\t\t}\n\n\t\tif (Array.isArray(original)) {\n\t\t\tif (Array.isArray(fresh)) {\n\t\t\t\treturn [...original, ...fresh]\n\t\t\t}\n\t\t\tthrow new CrudQueryBuilderError(`Inconsistent data.`)\n\t\t}\n\t\tif (Array.isArray(fresh)) {\n\t\t\tthrow new CrudQueryBuilderError(`Inconsistent data.`)\n\t\t}\n\n\t\tif (original === null) {\n\t\t\tif (fresh === null) {\n\t\t\t\treturn original\n\t\t\t}\n\t\t}\n\t\tif (fresh === null) {\n\t\t\tthrow new CrudQueryBuilderError(`Inconsistent data.`)\n\t\t}\n\n\t\tif (typeof original === 'object') {\n\t\t\tif (typeof fresh === 'object') {\n\t\t\t\tconst composite: any = { ...original }\n\t\t\t\tfor (const field in fresh) {\n\t\t\t\t\tconst fromFresh = (fresh as any)[field]\n\t\t\t\t\tcomposite[field] = field in composite ? this.mergeUpdateOne(composite[field], fromFresh) : fromFresh\n\t\t\t\t}\n\t\t\t\treturn composite\n\t\t\t}\n\t\t\tthrow new CrudQueryBuilderError(`Inconsistent data.`)\n\t\t}\n\t\tif (typeof fresh === 'object') {\n\t\t\tthrow new CrudQueryBuilderError(`Inconsistent data.`)\n\t\t}\n\n\t\tif (original === fresh) {\n\t\t\treturn original\n\t\t}\n\t\tthrow new CrudQueryBuilderError(`Inconsistent data.`)\n\t}\n}\n\nnamespace WriteDataBuilder {\n\texport interface DataFormat {\n\t\tcreate: Input.CreateDataInput<GraphQlLiteral>\n\t\tupdate: Input.UpdateDataInput<GraphQlLiteral>\n\t}\n\n\texport type DataLike<Op extends WriteOperation.ContentfulOperation> =\n\t\t| DataFormat[Op['op']]\n\t\t| WriteDataBuilder<Op>\n\t\t| ((builder: WriteDataBuilder<Op>) => WriteDataBuilder<Op>)\n}\n\nexport { WriteDataBuilder }\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"WriteDataBuilder.js","sources":["../../../src/crudQueryBuilder/WriteDataBuilder.ts"],"sourcesContent":["import type { Input, Value } from '@contember/schema'\nimport { GraphQlLiteral } from '../graphQlBuilder'\nimport { isEmptyObject } from '../utils'\nimport { CrudQueryBuilderError } from './CrudQueryBuilderError'\nimport type { WriteOperation } from './types'\nimport { WriteManyRelationBuilder } from './WriteManyRelationBuilder'\nimport { WriteOneRelationBuilder } from './WriteOneRelationBuilder'\n\nclass WriteDataBuilder<Op extends WriteOperation.ContentfulOperation> {\n\tpublic readonly data: WriteDataBuilder.DataFormat[Op['op']]\n\n\tpublic constructor(data?: WriteDataBuilder.DataFormat[Op['op']]) {\n\t\tthis.data = data || {}\n\t}\n\n\tpublic static resolveData<Op extends WriteOperation.ContentfulOperation>(\n\t\tdataLike: WriteDataBuilder.DataLike<Op>,\n\t): WriteDataBuilder.DataFormat[Op['op']] | undefined {\n\t\tlet resolvedData: WriteDataBuilder.DataFormat[Op['op']]\n\n\t\tif (dataLike instanceof WriteDataBuilder) {\n\t\t\tresolvedData = dataLike.data\n\t\t} else if (typeof dataLike === 'function') {\n\t\t\tresolvedData = dataLike(new WriteDataBuilder()).data\n\t\t} else {\n\t\t\tresolvedData = dataLike\n\t\t}\n\n\t\tif (isEmptyObject(resolvedData)) {\n\t\t\treturn undefined\n\t\t}\n\t\treturn resolvedData\n\t}\n\n\tpublic set(fieldName: string, value: Input.ColumnValue<GraphQlLiteral>) {\n\t\treturn new WriteDataBuilder<Op>({ ...this.data, [fieldName]: value })\n\t}\n\n\tpublic many(fieldName: string, data: WriteManyRelationBuilder.BuilderFactory<Op>): WriteDataBuilder<Op> {\n\t\tconst resolvedData = WriteManyRelationBuilder.instantiateFromFactory(data).data\n\t\treturn resolvedData === undefined || resolvedData.length === 0\n\t\t\t? this\n\t\t\t: new WriteDataBuilder<Op>(this.mergeInFreshData(this.data, fieldName, resolvedData))\n\t}\n\n\tpublic one(fieldName: string, data: WriteOneRelationBuilder.BuilderFactory<Op>): WriteDataBuilder<Op> {\n\t\tconst resolvedData = WriteOneRelationBuilder.instantiateFromFactory(data).data\n\t\treturn resolvedData === undefined || isEmptyObject(resolvedData)\n\t\t\t? this\n\t\t\t: new WriteDataBuilder<Op>(this.mergeInFreshData(this.data, fieldName, resolvedData))\n\t}\n\n\tprivate mergeInFreshData(\n\t\toriginal: WriteDataBuilder.DataFormat[Op['op']],\n\t\tfieldName: string,\n\t\tfresh: WriteManyRelationBuilder.DataFormat[Op['op']] | WriteOneRelationBuilder.DataFormat[Op['op']],\n\t): WriteDataBuilder.DataFormat[Op['op']] {\n\t\tif (fieldName in original) {\n\t\t\tconst existingValue = original[fieldName]\n\t\t\tif (Array.isArray(existingValue)) {\n\t\t\t\tif (Array.isArray(fresh)) {\n\t\t\t\t\treturn { ...original, [fieldName]: [...existingValue, ...fresh] }\n\t\t\t\t}\n\t\t\t\tthrow new CrudQueryBuilderError(`Inconsistent data.`)\n\t\t\t}\n\t\t\tif (Array.isArray(fresh)) {\n\t\t\t\tthrow new CrudQueryBuilderError(`Inconsistent data.`)\n\t\t\t}\n\t\t\treturn { ...original, [fieldName]: this.mergeUpdateOne(existingValue, fresh) }\n\t\t}\n\t\treturn { ...original, [fieldName]: fresh }\n\t}\n\n\tprivate mergeUpdateOne(\n\t\toriginal:\n\t\t\t| Value.FieldValue<GraphQlLiteral>\n\t\t\t| Input.CreateOneRelationInput<GraphQlLiteral>\n\t\t\t| Input.UpdateOneRelationInput<GraphQlLiteral>,\n\t\tfresh:\n\t\t\t| Value.FieldValue<GraphQlLiteral>\n\t\t\t| Input.CreateOneRelationInput<GraphQlLiteral>\n\t\t\t| Input.UpdateOneRelationInput<GraphQlLiteral>,\n\t):\n\t\t| Value.FieldValue<GraphQlLiteral>\n\t\t| Input.CreateOneRelationInput<GraphQlLiteral>\n\t\t| Input.UpdateOneRelationInput<GraphQlLiteral> {\n\t\t// TODO This implementation pretty bad but it will have to do for now.\n\t\tif (original instanceof GraphQlLiteral) {\n\t\t\tif (fresh instanceof GraphQlLiteral) {\n\t\t\t\tif (original.value === fresh.value) {\n\t\t\t\t\treturn original\n\t\t\t\t}\n\t\t\t}\n\t\t\tthrow new CrudQueryBuilderError(`Inconsistent data.`)\n\t\t}\n\t\tif (fresh instanceof GraphQlLiteral) {\n\t\t\tthrow new CrudQueryBuilderError(`Inconsistent data.`)\n\t\t}\n\n\t\tif (Array.isArray(original)) {\n\t\t\tif (Array.isArray(fresh)) {\n\t\t\t\treturn [...original, ...fresh]\n\t\t\t}\n\t\t\tthrow new CrudQueryBuilderError(`Inconsistent data.`)\n\t\t}\n\t\tif (Array.isArray(fresh)) {\n\t\t\tthrow new CrudQueryBuilderError(`Inconsistent data.`)\n\t\t}\n\n\t\tif (original === null) {\n\t\t\tif (fresh === null) {\n\t\t\t\treturn original\n\t\t\t}\n\t\t}\n\t\tif (fresh === null) {\n\t\t\tthrow new CrudQueryBuilderError(`Inconsistent data.`)\n\t\t}\n\n\t\tif (typeof original === 'object') {\n\t\t\tif (typeof fresh === 'object') {\n\t\t\t\tconst composite: any = { ...original }\n\t\t\t\tfor (const field in fresh) {\n\t\t\t\t\tconst fromFresh = (fresh as any)[field]\n\t\t\t\t\tcomposite[field] = field in composite ? this.mergeUpdateOne(composite[field], fromFresh) : fromFresh\n\t\t\t\t}\n\t\t\t\treturn composite\n\t\t\t}\n\t\t\tthrow new CrudQueryBuilderError(`Inconsistent data.`)\n\t\t}\n\t\tif (typeof fresh === 'object') {\n\t\t\tthrow new CrudQueryBuilderError(`Inconsistent data.`)\n\t\t}\n\n\t\tif (original === fresh) {\n\t\t\treturn original\n\t\t}\n\t\tthrow new CrudQueryBuilderError(`Inconsistent data.`)\n\t}\n}\n\nnamespace WriteDataBuilder {\n\texport interface DataFormat {\n\t\tcreate: Input.CreateDataInput<GraphQlLiteral>\n\t\tupdate: Input.UpdateDataInput<GraphQlLiteral>\n\t}\n\n\texport type DataLike<Op extends WriteOperation.ContentfulOperation> =\n\t\t| DataFormat[Op['op']]\n\t\t| WriteDataBuilder<Op>\n\t\t| ((builder: WriteDataBuilder<Op>) => WriteDataBuilder<Op>)\n}\n\nexport { WriteDataBuilder }\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sources":["../../../src/crudQueryBuilder/types.ts"],"sourcesContent":["import { GraphQlLiteral } from '../graphQlBuilder'\n\nexport type Mutations = 'create' | 'update' | 'delete'\n\nexport type Queries = 'get' | 'list' | 'paginate'\n\nexport type GetQueryArguments = 'by'\n\nexport type ListQueryArguments = 'filter' | 'orderBy' | 'offset' | 'limit'\n\nexport type PaginateQueryArguments = 'filter' | 'orderBy' | 'skip' | 'first'\n\nexport type CreateMutationArguments = 'data'\n\nexport type UpdateMutationArguments = 'data' | 'by'\n\nexport type DeleteMutationArguments = 'by'\n\nexport type ReductionArguments = 'filter' | 'by'\n\nexport type HasOneArguments = 'filter'\n\nexport type HasManyArguments = 'filter' | 'orderBy' | 'offset' | 'limit'\n\nexport type UpdateMutationFields = 'ok' | 'validation' | 'errors' | 'errorMessage' | 'node'\n\nexport type CreateMutationFields = 'ok' | 'validation' | 'errors' | 'errorMessage' | 'node'\n\nexport type DeleteMutationFields = 'ok' | 'node' | 'errors' | 'errorMessage'\n\nexport type WriteArguments = CreateMutationArguments | UpdateMutationArguments | DeleteMutationArguments\n\nexport type WriteFields = UpdateMutationFields | CreateMutationFields\n\nexport type ReadArguments =\n\t| GetQueryArguments\n\t| ListQueryArguments\n\t| PaginateQueryArguments\n\t| HasOneArguments\n\t| HasManyArguments\n\nexport interface WriteRelationOps {\n\tcreate: 'create' | 'connect'\n\tupdate: 'create' | 'connect' | 'delete' | 'disconnect' | 'update' | 'upsert'\n}\n\nexport type OrderDirection = GraphQlLiteral<'asc'> | GraphQlLiteral<'desc'>\n\n// TODO Silly enums because TS does not support enum extension 🙄\n// https://github.com/Microsoft/TypeScript/issues/17592\nexport namespace WriteOperation {\n\texport interface Operation {\n\t\top: 'create' | 'update' | 'delete'\n\t}\n\texport abstract class Operation implements Operation {}\n\n\texport interface ContentfulOperation {\n\t\top: 'create' | 'update'\n\t}\n\texport abstract class ContentfulOperation extends Operation implements ContentfulOperation {}\n\n\texport class Update extends ContentfulOperation {\n\t\toverride readonly op = 'update' as const\n\t}\n\n\texport class Create extends ContentfulOperation {\n\t\toverride readonly op = 'create' as const\n\t}\n\n\texport class Delete extends Operation {\n\t\toverride readonly op = 'delete' as const\n\t}\n}\n"],"names":["WriteOperation"],"mappings":";;;;;;AAkDiB,IAAA;AAAA,CAAV,CAAUA,oBAAV;AAIC,QAAe,UAA+B;AAAA,EAAC;AAA/CA,kBAAe,YAAA;AAKf,QAAe,4BAA4B,UAAyC;AAAA,EAAC;AAArFA,kBAAe,sBAAA;AAEf,QAAM,eAAe,oBAAoB;AAAA,IAAzC;AAAA;AACY,gCAAK;AAAA;AAAA,EACxB;AAFOA,kBAAM,SAAA;AAIN,QAAM,eAAe,oBAAoB;AAAA,IAAzC;AAAA;AACY,gCAAK;AAAA;AAAA,EACxB;AAFOA,kBAAM,SAAA;AAIN,QAAM,eAAe,UAAU;AAAA,IAA/B;AAAA;AACY,gCAAK;AAAA;AAAA,EACxB;AAFOA,kBAAM,SAAA;AAAA,GAnBG,mBAAA,iBAAA,CAAA,EAAA;"}
1
+ {"version":3,"file":"types.js","sources":["../../../src/crudQueryBuilder/types.ts"],"sourcesContent":["import { GraphQlLiteral } from '../graphQlBuilder'\n\nexport type Mutations = 'create' | 'update' | 'delete'\n\nexport type Queries = 'get' | 'list' | 'paginate'\n\nexport type GetQueryArguments = 'by'\n\nexport type ListQueryArguments = 'filter' | 'orderBy' | 'offset' | 'limit'\n\nexport type PaginateQueryArguments = 'filter' | 'orderBy' | 'skip' | 'first'\n\nexport type CreateMutationArguments = 'data'\n\nexport type UpdateMutationArguments = 'data' | 'by'\n\nexport type DeleteMutationArguments = 'by'\n\nexport type ReductionArguments = 'filter' | 'by'\n\nexport type HasOneArguments = 'filter'\n\nexport type HasManyArguments = 'filter' | 'orderBy' | 'offset' | 'limit'\n\nexport type UpdateMutationFields = 'ok' | 'validation' | 'errors' | 'errorMessage' | 'node'\n\nexport type CreateMutationFields = 'ok' | 'validation' | 'errors' | 'errorMessage' | 'node'\n\nexport type DeleteMutationFields = 'ok' | 'node' | 'errors' | 'errorMessage'\n\nexport type WriteArguments = CreateMutationArguments | UpdateMutationArguments | DeleteMutationArguments\n\nexport type WriteFields = UpdateMutationFields | CreateMutationFields\n\nexport type ReadArguments =\n\t| GetQueryArguments\n\t| ListQueryArguments\n\t| PaginateQueryArguments\n\t| HasOneArguments\n\t| HasManyArguments\n\nexport interface WriteRelationOps {\n\tcreate: 'create' | 'connect'\n\tupdate: 'create' | 'connect' | 'delete' | 'disconnect' | 'update' | 'upsert'\n}\n\nexport type OrderDirection = GraphQlLiteral<'asc'> | GraphQlLiteral<'desc'>\n\n// TODO Silly enums because TS does not support enum extension 🙄\n// https://github.com/Microsoft/TypeScript/issues/17592\nexport namespace WriteOperation {\n\texport interface Operation {\n\t\top: 'create' | 'update' | 'delete'\n\t}\n\texport abstract class Operation implements Operation {}\n\n\texport interface ContentfulOperation {\n\t\top: 'create' | 'update'\n\t}\n\texport abstract class ContentfulOperation extends Operation implements ContentfulOperation {}\n\n\texport class Update extends ContentfulOperation {\n\t\toverride readonly op = 'update' as const\n\t}\n\n\texport class Create extends ContentfulOperation {\n\t\toverride readonly op = 'create' as const\n\t}\n\n\texport class Delete extends Operation {\n\t\toverride readonly op = 'delete' as const\n\t}\n}\n"],"names":["WriteOperation"],"mappings":";;;;;;AAkDiB,IAAA;AAAA,CAAV,CAAUA,oBAAV;AAIC,QAAe,UAA+B;AAAA,EAAC;AAA/CA,kBAAe,YAAA;AAKf,QAAe,4BAA4B,UAAyC;AAAA,EAAC;AAArFA,kBAAe,sBAAA;AAEf,QAAM,eAAe,oBAAoB;AAAA,IAAzC,cAAA;AAAA,YAAA,GAAA,SAAA;AACN,oBAAA,MAAkB,MAAK,QAAA;AAAA,IAAA;AAAA,EACxB;AAFOA,kBAAM,SAAA;AAIN,QAAM,eAAe,oBAAoB;AAAA,IAAzC,cAAA;AAAA,YAAA,GAAA,SAAA;AACN,oBAAA,MAAkB,MAAK,QAAA;AAAA,IAAA;AAAA,EACxB;AAFOA,kBAAM,SAAA;AAIN,QAAM,eAAe,UAAU;AAAA,IAA/B,cAAA;AAAA,YAAA,GAAA,SAAA;AACN,oBAAA,MAAkB,MAAK,QAAA;AAAA,IAAA;AAAA,EACxB;AAFOA,kBAAM,SAAA;AAAA,GAnBG,mBAAA,iBAAA,CAAA,EAAA;"}
@@ -1 +1 @@
1
- {"version":3,"file":"GraphQlClient.js","sources":["../../../src/graphQlClient/GraphQlClient.ts"],"sourcesContent":["export interface GraphQlClientRequestOptions {\n\tvariables?: GraphQlClientVariables\n\tapiTokenOverride?: string\n\tsignal?: AbortSignal\n\theaders?: Record<string, string>\n}\n\nexport interface GraphQlClientVariables {\n\t[name: string]: any\n}\n\nexport type GraphQlClientFailedRequestMetadata = Pick<Response, 'status' | 'statusText'> & {\n\tresponseText: string\n}\n\nexport class GraphQlClient {\n\tconstructor(public readonly apiUrl: string, private readonly apiToken?: string) {}\n\n\tasync sendRequest<T = any>(\n\t\tquery: string,\n\t\t{ apiTokenOverride, signal, variables, headers }: GraphQlClientRequestOptions = {},\n\t): Promise<T> {\n\t\tconst resolvedHeaders: Record<string, string> = { 'Content-Type': 'application/json', ...headers }\n\t\tconst resolvedToken = apiTokenOverride ?? this.apiToken\n\n\t\tif (resolvedToken !== undefined) {\n\t\t\tresolvedHeaders['Authorization'] = `Bearer ${resolvedToken}`\n\t\t}\n\n\t\tconsole.debug(query)\n\n\t\tconst response = await fetch(this.apiUrl, {\n\t\t\tmethod: 'POST',\n\t\t\theaders: resolvedHeaders,\n\t\t\tsignal,\n\t\t\tbody: JSON.stringify({ query, variables }),\n\t\t})\n\n\t\tif (response.ok) {\n\t\t\t// It may still have errors (e.g. unfilled fields) but as far as the request goes, it is ok.\n\t\t\treturn await response.json()\n\t\t}\n\n\t\tconst failedRequest: GraphQlClientFailedRequestMetadata = {\n\t\t\tstatus: response.status,\n\t\t\tstatusText: response.statusText,\n\t\t\tresponseText: await response.text(),\n\t\t}\n\n\t\treturn Promise.reject(failedRequest)\n\t}\n}\n"],"names":[],"mappings":"AAeO,MAAM,cAAc;AAAA,EAC1B,YAA4B,QAAiC,UAAmB;AAApD,SAAA,SAAA;AAAiC,SAAA,WAAA;AAAA,EAAoB;AAAA,EAEjF,MAAM,YACL,OACA,EAAE,kBAAkB,QAAQ,WAAW,QAAyC,IAAA,IACnE;AACb,UAAM,kBAA0C,EAAE,gBAAgB,oBAAoB,GAAG,QAAQ;AAC3F,UAAA,gBAAgB,oBAAoB,KAAK;AAE/C,QAAI,kBAAkB,QAAW;AAChC,sBAAgB,mBAAmB,UAAU;AAAA,IAC9C;AAEA,YAAQ,MAAM,KAAK;AAEnB,UAAM,WAAW,MAAM,MAAM,KAAK,QAAQ;AAAA,MACzC,QAAQ;AAAA,MACR,SAAS;AAAA,MACT;AAAA,MACA,MAAM,KAAK,UAAU,EAAE,OAAO,WAAW;AAAA,IAAA,CACzC;AAED,QAAI,SAAS,IAAI;AAET,aAAA,MAAM,SAAS;IACvB;AAEA,UAAM,gBAAoD;AAAA,MACzD,QAAQ,SAAS;AAAA,MACjB,YAAY,SAAS;AAAA,MACrB,cAAc,MAAM,SAAS,KAAK;AAAA,IAAA;AAG5B,WAAA,QAAQ,OAAO,aAAa;AAAA,EACpC;AACD;"}
1
+ {"version":3,"file":"GraphQlClient.js","sources":["../../../src/graphQlClient/GraphQlClient.ts"],"sourcesContent":["export interface GraphQlClientRequestOptions {\n\tvariables?: GraphQlClientVariables\n\tapiTokenOverride?: string\n\tsignal?: AbortSignal\n\theaders?: Record<string, string>\n}\n\nexport interface GraphQlClientVariables {\n\t[name: string]: any\n}\n\nexport type GraphQlClientFailedRequestMetadata = Pick<Response, 'status' | 'statusText'> & {\n\tresponseText: string\n}\n\nexport class GraphQlClient {\n\tconstructor(public readonly apiUrl: string, private readonly apiToken?: string) { }\n\n\tasync sendRequest<T = unknown>(\n\t\tquery: string,\n\t\t{ apiTokenOverride, signal, variables, headers }: GraphQlClientRequestOptions = {},\n\t): Promise<T> {\n\t\tconst resolvedHeaders: Record<string, string> = { 'Content-Type': 'application/json', ...headers }\n\t\tconst resolvedToken = apiTokenOverride ?? this.apiToken\n\n\t\tif (resolvedToken !== undefined) {\n\t\t\tresolvedHeaders['Authorization'] = `Bearer ${resolvedToken}`\n\t\t}\n\n\t\tconsole.debug(query)\n\n\t\tconst response = await fetch(this.apiUrl, {\n\t\t\tmethod: 'POST',\n\t\t\theaders: resolvedHeaders,\n\t\t\tsignal,\n\t\t\tbody: JSON.stringify({ query, variables }),\n\t\t})\n\n\t\tif (response.ok) {\n\t\t\t// It may still have errors (e.g. unfilled fields) but as far as the request goes, it is ok.\n\t\t\treturn await response.json()\n\t\t}\n\n\t\tconst failedRequest: GraphQlClientFailedRequestMetadata = {\n\t\t\tstatus: response.status,\n\t\t\tstatusText: response.statusText,\n\t\t\tresponseText: await response.text(),\n\t\t}\n\n\t\treturn Promise.reject(failedRequest)\n\t}\n}\n"],"names":[],"mappings":"AAeO,MAAM,cAAc;AAAA,EAC1B,YAA4B,QAAiC,UAAmB;AAApD,SAAA,SAAA;AAAiC,SAAA,WAAA;AAAA,EAAqB;AAAA,EAElF,MAAM,YACL,OACA,EAAE,kBAAkB,QAAQ,WAAW,QAAyC,IAAA,IACnE;AACb,UAAM,kBAA0C,EAAE,gBAAgB,oBAAoB,GAAG,QAAQ;AAC3F,UAAA,gBAAgB,oBAAoB,KAAK;AAE/C,QAAI,kBAAkB,QAAW;AAChC,sBAAgB,mBAAmB,UAAU;AAAA,IAC9C;AAEA,YAAQ,MAAM,KAAK;AAEnB,UAAM,WAAW,MAAM,MAAM,KAAK,QAAQ;AAAA,MACzC,QAAQ;AAAA,MACR,SAAS;AAAA,MACT;AAAA,MACA,MAAM,KAAK,UAAU,EAAE,OAAO,WAAW;AAAA,IAAA,CACzC;AAED,QAAI,SAAS,IAAI;AAET,aAAA,MAAM,SAAS;IACvB;AAEA,UAAM,gBAAoD;AAAA,MACzD,QAAQ,SAAS;AAAA,MACjB,YAAY,SAAS;AAAA,MACrB,cAAc,MAAM,SAAS,KAAK;AAAA,IAAA;AAG5B,WAAA,QAAQ,OAAO,aAAa;AAAA,EACpC;AACD;"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/index.ts"],"sourcesContent":["import * as CrudQueryBuilderTmp from './crudQueryBuilder'\n\nimport * as GraphQlBuilderTmp from './graphQlBuilder'\nexport { GraphQlLiteral } from './graphQlBuilder'\n\nexport namespace GraphQlBuilder {\n\texport import GraphqlLiteral = GraphQlBuilderTmp.GraphQlLiteral\n\texport import GraphQlLiteral = GraphQlBuilderTmp.GraphQlLiteral\n\texport import ObjectBuilder = GraphQlBuilderTmp.ObjectBuilder\n\texport import QueryCompiler = GraphQlBuilderTmp.QueryCompiler\n\texport import QueryBuilder = GraphQlBuilderTmp.QueryBuilder\n\texport import RootObjectBuilder = GraphQlBuilderTmp.RootObjectBuilder\n}\n\nexport namespace CrudQueryBuilder {\n\texport import CrudQueryBuilder = CrudQueryBuilderTmp.CrudQueryBuilder\n\texport import ReadBuilder = CrudQueryBuilderTmp.ReadBuilder\n\texport import WriteBuilder = CrudQueryBuilderTmp.WriteBuilder\n\texport import WriteDataBuilder = CrudQueryBuilderTmp.WriteDataBuilder\n\texport import WriteManyRelationBuilder = CrudQueryBuilderTmp.WriteManyRelationBuilder\n\texport import WriteOneRelationBuilder = CrudQueryBuilderTmp.WriteOneRelationBuilder\n\texport import WriteOperation = CrudQueryBuilderTmp.WriteOperation\n\texport type CreateMutationArguments = CrudQueryBuilderTmp.CreateMutationArguments\n\texport type CreateMutationFields = CrudQueryBuilderTmp.CreateMutationFields\n\texport type DeleteMutationArguments = CrudQueryBuilderTmp.DeleteMutationArguments\n\texport type DeleteMutationFields = CrudQueryBuilderTmp.DeleteMutationFields\n\texport type GetQueryArguments = CrudQueryBuilderTmp.GetQueryArguments\n\texport type HasManyArguments = CrudQueryBuilderTmp.HasManyArguments\n\texport type HasOneArguments = CrudQueryBuilderTmp.HasOneArguments\n\texport type ListQueryArguments = CrudQueryBuilderTmp.ListQueryArguments\n\texport type Mutations = CrudQueryBuilderTmp.Mutations\n\texport type OrderDirection = CrudQueryBuilderTmp.OrderDirection\n\texport type PaginateQueryArguments = CrudQueryBuilderTmp.PaginateQueryArguments\n\texport type Queries = CrudQueryBuilderTmp.Queries\n\texport type ReadArguments = CrudQueryBuilderTmp.ReadArguments\n\texport type ReductionArguments = CrudQueryBuilderTmp.ReductionArguments\n\texport type UpdateMutationArguments = CrudQueryBuilderTmp.UpdateMutationArguments\n\texport type UpdateMutationFields = CrudQueryBuilderTmp.UpdateMutationFields\n\texport type WriteArguments = CrudQueryBuilderTmp.WriteArguments\n\texport type WriteFields = CrudQueryBuilderTmp.WriteFields\n\texport type WriteRelationOps = CrudQueryBuilderTmp.WriteRelationOps\n}\n\nexport * from './content'\nexport * from './graphQlClient'\nexport * from './system'\nexport * from './tenant'\n\nexport type { Input, Value, Result } from '@contember/schema'\n"],"names":["GraphQlBuilder","GraphQlBuilderTmp.GraphQlLiteral","GraphQlBuilderTmp.ObjectBuilder","GraphQlBuilderTmp.QueryCompiler","GraphQlBuilderTmp.QueryBuilder","GraphQlBuilderTmp.RootObjectBuilder","CrudQueryBuilderTmp.CrudQueryBuilder","CrudQueryBuilderTmp.ReadBuilder","CrudQueryBuilderTmp.WriteBuilder","CrudQueryBuilderTmp.WriteDataBuilder","CrudQueryBuilderTmp.WriteManyRelationBuilder","CrudQueryBuilderTmp.WriteOneRelationBuilder","CrudQueryBuilderTmp.WriteOperation"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAKiB,IAAA;AAAA,CAAV,CAAUA,oBAAV;AACQA,kBAAA,iBAAiBC;AACjBD,kBAAA,iBAAiBC;AACjBD,kBAAA,gBAAgBE;AAChBF,kBAAA,gBAAgBG;AAChBH,kBAAA,eAAeI;AACfJ,kBAAA,oBAAoBK;AAAkB,GANpC,mBAAA,iBAAA,CAAA,EAAA;AASA,IAAA;AAAA,CAAV,CAAU,sBAAV;AACQ,uCAAmBC;AACnB,kCAAcC;AACd,mCAAeC;AACf,uCAAmBC;AACnB,+CAA2BC;AAC3B,8CAA0BC;AAC1B,qCAAiBC;AAAoB,GAPnC,qBAAA,mBAAA,CAAA,EAAA;"}
1
+ {"version":3,"file":"index.js","sources":["../../src/index.ts"],"sourcesContent":["import * as CrudQueryBuilderTmp from './crudQueryBuilder'\n\nimport * as GraphQlBuilderTmp from './graphQlBuilder'\nexport { GraphQlLiteral } from './graphQlBuilder'\n\nexport namespace GraphQlBuilder {\n\texport import GraphqlLiteral = GraphQlBuilderTmp.GraphQlLiteral\n\texport import GraphQlLiteral = GraphQlBuilderTmp.GraphQlLiteral\n\texport import ObjectBuilder = GraphQlBuilderTmp.ObjectBuilder\n\texport import QueryCompiler = GraphQlBuilderTmp.QueryCompiler\n\texport import QueryBuilder = GraphQlBuilderTmp.QueryBuilder\n\texport import RootObjectBuilder = GraphQlBuilderTmp.RootObjectBuilder\n}\n\nexport namespace CrudQueryBuilder {\n\texport import CrudQueryBuilder = CrudQueryBuilderTmp.CrudQueryBuilder\n\texport import ReadBuilder = CrudQueryBuilderTmp.ReadBuilder\n\texport import WriteBuilder = CrudQueryBuilderTmp.WriteBuilder\n\texport import WriteDataBuilder = CrudQueryBuilderTmp.WriteDataBuilder\n\texport import WriteManyRelationBuilder = CrudQueryBuilderTmp.WriteManyRelationBuilder\n\texport import WriteOneRelationBuilder = CrudQueryBuilderTmp.WriteOneRelationBuilder\n\texport import WriteOperation = CrudQueryBuilderTmp.WriteOperation\n\texport type CreateMutationArguments = CrudQueryBuilderTmp.CreateMutationArguments\n\texport type CreateMutationFields = CrudQueryBuilderTmp.CreateMutationFields\n\texport type DeleteMutationArguments = CrudQueryBuilderTmp.DeleteMutationArguments\n\texport type DeleteMutationFields = CrudQueryBuilderTmp.DeleteMutationFields\n\texport type GetQueryArguments = CrudQueryBuilderTmp.GetQueryArguments\n\texport type HasManyArguments = CrudQueryBuilderTmp.HasManyArguments\n\texport type HasOneArguments = CrudQueryBuilderTmp.HasOneArguments\n\texport type ListQueryArguments = CrudQueryBuilderTmp.ListQueryArguments\n\texport type Mutations = CrudQueryBuilderTmp.Mutations\n\texport type OrderDirection = CrudQueryBuilderTmp.OrderDirection\n\texport type PaginateQueryArguments = CrudQueryBuilderTmp.PaginateQueryArguments\n\texport type Queries = CrudQueryBuilderTmp.Queries\n\texport type ReadArguments = CrudQueryBuilderTmp.ReadArguments\n\texport type ReductionArguments = CrudQueryBuilderTmp.ReductionArguments\n\texport type UpdateMutationArguments = CrudQueryBuilderTmp.UpdateMutationArguments\n\texport type UpdateMutationFields = CrudQueryBuilderTmp.UpdateMutationFields\n\texport type WriteArguments = CrudQueryBuilderTmp.WriteArguments\n\texport type WriteFields = CrudQueryBuilderTmp.WriteFields\n\texport type WriteRelationOps = CrudQueryBuilderTmp.WriteRelationOps\n}\n\nexport * from './content'\nexport * from './graphQlClient'\nexport * from './system'\nexport * from './tenant'\n\nexport type { Input, Value, Result, Writable } from '@contember/schema'\n"],"names":["GraphQlBuilder","GraphQlBuilderTmp.GraphQlLiteral","GraphQlBuilderTmp.ObjectBuilder","GraphQlBuilderTmp.QueryCompiler","GraphQlBuilderTmp.QueryBuilder","GraphQlBuilderTmp.RootObjectBuilder","CrudQueryBuilderTmp.CrudQueryBuilder","CrudQueryBuilderTmp.ReadBuilder","CrudQueryBuilderTmp.WriteBuilder","CrudQueryBuilderTmp.WriteDataBuilder","CrudQueryBuilderTmp.WriteManyRelationBuilder","CrudQueryBuilderTmp.WriteOneRelationBuilder","CrudQueryBuilderTmp.WriteOperation"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAKiB,IAAA;AAAA,CAAV,CAAUA,oBAAV;AACQA,kBAAA,iBAAiBC;AACjBD,kBAAA,iBAAiBC;AACjBD,kBAAA,gBAAgBE;AAChBF,kBAAA,gBAAgBG;AAChBH,kBAAA,eAAeI;AACfJ,kBAAA,oBAAoBK;AAAkB,GANpC,mBAAA,iBAAA,CAAA,EAAA;AASA,IAAA;AAAA,CAAV,CAAU,sBAAV;AACQ,uCAAmBC;AACnB,kCAAcC;AACd,mCAAeC;AACf,uCAAmBC;AACnB,+CAA2BC;AAC3B,8CAA0BC;AAC1B,qCAAiBC;AAAoB,GAPnC,qBAAA,mBAAA,CAAA,EAAA;"}
@@ -1 +1 @@
1
- {"version":3,"file":"whereToFilter.js","sources":["../../../../src/content/params/whereToFilter.ts"],"sourcesContent":["import type { Input } from '@contember/schema'\nimport { GraphQlLiteral } from '../../graphQlBuilder'\n\nexport const whereToFilter = (\n\tby: Input.UniqueWhere<GraphQlLiteral>,\n): Input.Where<Input.Condition<Input.ColumnValue<GraphQlLiteral>>> => {\n\tconst where: Input.Where<Input.Condition<Input.ColumnValue<GraphQlLiteral>>> = {}\n\tfor (const key in by) {\n\t\tconst value = by[key]\n\n\t\tif (value instanceof GraphQlLiteral || typeof value === 'string' || typeof value === 'number') {\n\t\t\twhere[key] = { eq: value }\n\t\t} else {\n\t\t\twhere[key] = whereToFilter(value)\n\t\t}\n\t}\n\n\treturn where\n}\n"],"names":[],"mappings":";AAGa,MAAA,gBAAgB,CAC5B,OACqE;AACrE,QAAM,QAAyE,CAAA;AAC/E,aAAW,OAAO,IAAI;AACrB,UAAM,QAAQ,GAAG;AAEjB,QAAI,iBAAiB,kBAAkB,OAAO,UAAU,YAAY,OAAO,UAAU,UAAU;AACxF,YAAA,OAAO,EAAE,IAAI,MAAM;AAAA,IAAA,OACnB;AACA,YAAA,OAAO,cAAc,KAAK;AAAA,IACjC;AAAA,EACD;AAEO,SAAA;AACR;"}
1
+ {"version":3,"file":"whereToFilter.js","sources":["../../../../src/content/params/whereToFilter.ts"],"sourcesContent":["import type { Input, Writable } from '@contember/schema'\nimport { GraphQlLiteral } from '../../graphQlBuilder'\n\nexport const whereToFilter = (\n\tby: Input.UniqueWhere<GraphQlLiteral>,\n): Input.Where<Input.Condition<Input.ColumnValue<GraphQlLiteral>>> => {\n\tconst where: Writable<Input.Where<Input.Condition<Input.ColumnValue<GraphQlLiteral>>>> = {}\n\tfor (const key in by) {\n\t\tconst value = by[key]\n\n\t\tif (value instanceof GraphQlLiteral || typeof value === 'string' || typeof value === 'number') {\n\t\t\twhere[key] = { eq: value }\n\t\t} else {\n\t\t\twhere[key] = whereToFilter(value)\n\t\t}\n\t}\n\n\treturn where\n}\n"],"names":[],"mappings":";AAGa,MAAA,gBAAgB,CAC5B,OACqE;AACrE,QAAM,QAAmF,CAAA;AACzF,aAAW,OAAO,IAAI;AACrB,UAAM,QAAQ,GAAG;AAEjB,QAAI,iBAAiB,kBAAkB,OAAO,UAAU,YAAY,OAAO,UAAU,UAAU;AACxF,YAAA,OAAO,EAAE,IAAI,MAAM;AAAA,IAAA,OACnB;AACA,YAAA,OAAO,cAAc,KAAK;AAAA,IACjC;AAAA,EACD;AAEO,SAAA;AACR;"}
@@ -1,20 +1,27 @@
1
+ import { ObjectBuilder } from "../../graphQlBuilder/ObjectBuilder.js";
2
+ import { QueryBuilder } from "../../graphQlBuilder/QueryBuilder.js";
1
3
  var __defProp = Object.defineProperty;
2
4
  var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3
5
  var __publicField = (obj, key, value) => {
4
6
  __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
5
7
  return value;
6
8
  };
7
- import { ObjectBuilder } from "../../graphQlBuilder/ObjectBuilder.js";
8
- import { QueryBuilder } from "../../graphQlBuilder/QueryBuilder.js";
9
9
  const _GenerateUploadUrlMutationBuilder = class {
10
10
  static buildQuery(parameters) {
11
11
  return new QueryBuilder().mutation((builder) => {
12
12
  for (const alias in parameters) {
13
13
  const fileParameters = parameters[alias];
14
- builder = builder.object(
15
- alias,
16
- _GenerateUploadUrlMutationBuilder.generateUploadUrlFields.argument("contentType", fileParameters.contentType).argument("expiration", fileParameters.expiration).argument("prefix", fileParameters.prefix).argument("acl", fileParameters.acl)
17
- );
14
+ if (fileParameters.suffix || fileParameters.fileName || fileParameters.extension) {
15
+ builder = builder.object(
16
+ alias,
17
+ _GenerateUploadUrlMutationBuilder.generateUploadUrlFields.argument("input", fileParameters)
18
+ );
19
+ } else {
20
+ builder = builder.object(
21
+ alias,
22
+ _GenerateUploadUrlMutationBuilder.generateUploadUrlFields.argument("contentType", fileParameters.contentType).argument("expiration", fileParameters.expiration).argument("prefix", fileParameters.prefix).argument("acl", fileParameters.acl)
23
+ );
24
+ }
18
25
  }
19
26
  return builder;
20
27
  });
@@ -1 +1 @@
1
- {"version":3,"file":"GenerateUploadUrlMutationBuilder.js","sources":["../../../../src/content/upload/GenerateUploadUrlMutationBuilder.ts"],"sourcesContent":["import { GraphQlLiteral, ObjectBuilder, QueryBuilder } from '../../graphQlBuilder'\n\nclass GenerateUploadUrlMutationBuilder {\n\tprivate static generateUploadUrlFields = new ObjectBuilder()\n\t\t.name('generateUploadUrl')\n\t\t.field('url')\n\t\t.field('publicUrl')\n\t\t.field('method')\n\t\t.object('headers', builder => builder.field('key').field('value'))\n\n\tpublic static buildQuery(parameters: GenerateUploadUrlMutationBuilder.MutationParameters): string {\n\t\treturn new QueryBuilder().mutation(builder => {\n\t\t\tfor (const alias in parameters) {\n\t\t\t\tconst fileParameters = parameters[alias]\n\n\t\t\t\tbuilder = builder.object(\n\t\t\t\t\talias,\n\t\t\t\t\tGenerateUploadUrlMutationBuilder.generateUploadUrlFields\n\t\t\t\t\t\t.argument('contentType', fileParameters.contentType)\n\t\t\t\t\t\t.argument('expiration', fileParameters.expiration)\n\t\t\t\t\t\t.argument('prefix', fileParameters.prefix)\n\t\t\t\t\t\t.argument('acl', fileParameters.acl),\n\t\t\t\t)\n\t\t\t}\n\n\t\t\treturn builder\n\t\t})\n\t}\n}\n\nnamespace GenerateUploadUrlMutationBuilder {\n\texport interface FileParameters {\n\t\tcontentType: string\n\t\texpiration?: number\n\t\tprefix?: string\n\t\tacl?: GraphQlLiteral<'PUBLIC_READ' | 'PRIVATE' | 'NONE'>\n\t}\n\n\texport interface MutationParameters {\n\t\t[alias: string]: FileParameters\n\t}\n\n\texport interface ResponseBody {\n\t\turl: string\n\t\tpublicUrl: string\n\t\tmethod: string\n\t\theaders: Array<{\n\t\t\tkey: string\n\t\t\tvalue: string\n\t\t}>\n\t}\n\n\texport interface MutationResponse {\n\t\t[alias: string]: ResponseBody\n\t}\n}\n\nexport { GenerateUploadUrlMutationBuilder }\n"],"names":[],"mappings":";;;;;;;;AAEA,MAAM,oCAAN,MAAuC;AAAA,EAQtC,OAAc,WAAW,YAAyE;AACjG,WAAO,IAAI,aAAA,EAAe,SAAS,CAAW,YAAA;AAC7C,iBAAW,SAAS,YAAY;AAC/B,cAAM,iBAAiB,WAAW;AAElC,kBAAU,QAAQ;AAAA,UACjB;AAAA,UACA,kCAAiC,wBAC/B,SAAS,eAAe,eAAe,WAAW,EAClD,SAAS,cAAc,eAAe,UAAU,EAChD,SAAS,UAAU,eAAe,MAAM,EACxC,SAAS,OAAO,eAAe,GAAG;AAAA,QAAA;AAAA,MAEtC;AAEO,aAAA;AAAA,IAAA,CACP;AAAA,EACF;AACD;AA1BA,IAAM,mCAAN;AACC,cADK,kCACU,2BAA0B,IAAI,cAAc,EACzD,KAAK,mBAAmB,EACxB,MAAM,KAAK,EACX,MAAM,WAAW,EACjB,MAAM,QAAQ,EACd,OAAO,WAAW,CAAA,YAAW,QAAQ,MAAM,KAAK,EAAE,MAAM,OAAO,CAAC;"}
1
+ {"version":3,"file":"GenerateUploadUrlMutationBuilder.js","sources":["../../../../src/content/upload/GenerateUploadUrlMutationBuilder.ts"],"sourcesContent":["import { GraphQlLiteral, ObjectBuilder, QueryBuilder } from '../../graphQlBuilder'\n\nclass GenerateUploadUrlMutationBuilder {\n\tprivate static generateUploadUrlFields = new ObjectBuilder()\n\t\t.name('generateUploadUrl')\n\t\t.field('url')\n\t\t.field('publicUrl')\n\t\t.field('method')\n\t\t.object('headers', builder => builder.field('key').field('value'))\n\n\tpublic static buildQuery(parameters: GenerateUploadUrlMutationBuilder.MutationParameters): string {\n\t\treturn new QueryBuilder().mutation(builder => {\n\t\t\tfor (const alias in parameters) {\n\t\t\t\tconst fileParameters = parameters[alias]\n\t\t\t\tif (fileParameters.suffix || fileParameters.fileName || fileParameters.extension) {\n\t\t\t\t\tbuilder = builder.object(\n\t\t\t\t\t\talias,\n\t\t\t\t\t\tGenerateUploadUrlMutationBuilder.generateUploadUrlFields\n\t\t\t\t\t\t\t.argument('input', fileParameters),\n\t\t\t\t\t)\n\t\t\t\t} else {\n\t\t\t\t\t// BC\n\t\t\t\t\tbuilder = builder.object(\n\t\t\t\t\t\talias,\n\t\t\t\t\t\tGenerateUploadUrlMutationBuilder.generateUploadUrlFields\n\t\t\t\t\t\t\t.argument('contentType', fileParameters.contentType)\n\t\t\t\t\t\t\t.argument('expiration', fileParameters.expiration)\n\t\t\t\t\t\t\t.argument('prefix', fileParameters.prefix)\n\t\t\t\t\t\t\t.argument('acl', fileParameters.acl),\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn builder\n\t\t})\n\t}\n}\n\nnamespace GenerateUploadUrlMutationBuilder {\n\texport type Acl = GraphQlLiteral<'PUBLIC_READ' | 'PRIVATE' | 'NONE'>;\n\n\texport interface FileParameters {\n\t\tcontentType: string\n\t\texpiration?: number\n\t\tsize?: number\n\t\tprefix?: string\n\t\textension?: string\n\t\tsuffix?: string\n\t\tfileName?: string\n\t\tacl?: Acl\n\t}\n\n\texport interface MutationParameters {\n\t\t[alias: string]: FileParameters\n\t}\n\n\texport interface ResponseBody {\n\t\turl: string\n\t\tpublicUrl: string\n\t\tmethod: string\n\t\theaders: Array<{\n\t\t\tkey: string\n\t\t\tvalue: string\n\t\t}>\n\t}\n\n\texport interface MutationResponse {\n\t\t[alias: string]: ResponseBody\n\t}\n}\n\nexport { GenerateUploadUrlMutationBuilder }\n"],"names":[],"mappings":";;;;;;;;AAEA,MAAM,oCAAN,MAAuC;AAAA,EAQtC,OAAc,WAAW,YAAyE;AACjG,WAAO,IAAI,aAAA,EAAe,SAAS,CAAW,YAAA;AAC7C,iBAAW,SAAS,YAAY;AAC/B,cAAM,iBAAiB,WAAW;AAClC,YAAI,eAAe,UAAU,eAAe,YAAY,eAAe,WAAW;AACjF,oBAAU,QAAQ;AAAA,YACjB;AAAA,YACA,kCAAiC,wBAC/B,SAAS,SAAS,cAAc;AAAA,UAAA;AAAA,QACnC,OACM;AAEN,oBAAU,QAAQ;AAAA,YACjB;AAAA,YACA,kCAAiC,wBAC/B,SAAS,eAAe,eAAe,WAAW,EAClD,SAAS,cAAc,eAAe,UAAU,EAChD,SAAS,UAAU,eAAe,MAAM,EACxC,SAAS,OAAO,eAAe,GAAG;AAAA,UAAA;AAAA,QAEtC;AAAA,MACD;AAEO,aAAA;AAAA,IAAA,CACP;AAAA,EACF;AACD;AAlCA,IAAM,mCAAN;AACC,cADK,kCACU,2BAA0B,IAAI,cAAc,EACzD,KAAK,mBAAmB,EACxB,MAAM,KAAK,EACX,MAAM,WAAW,EACjB,MAAM,QAAQ,EACd,OAAO,WAAW,CAAA,YAAW,QAAQ,MAAM,KAAK,EAAE,MAAM,OAAO,CAAC,CAAA;"}
@@ -1,26 +1,27 @@
1
+ import pLimit from "p-limit";
2
+ import { FileUploadError } from "./FileUploadError.js";
3
+ import { GenerateUploadUrlMutationBuilder } from "./GenerateUploadUrlMutationBuilder.js";
4
+ import { readFileAsArrayBuffer } from "../../utils/readFileAsArrayBuffer.js";
1
5
  var __defProp = Object.defineProperty;
2
6
  var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3
7
  var __publicField = (obj, key, value) => {
4
8
  __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
5
9
  return value;
6
10
  };
7
- import { GenerateUploadUrlMutationBuilder } from "./GenerateUploadUrlMutationBuilder.js";
8
- import { FileUploadError } from "./FileUploadError.js";
9
- import { readFileAsArrayBuffer } from "../../utils/readFileAsArrayBuffer.js";
10
11
  class S3FileUploader {
11
12
  constructor(options = {}) {
13
+ this.options = options;
12
14
  __publicField(this, "uploadState");
13
15
  __publicField(this, "generateNewAlias", (() => {
14
16
  let alias = 1;
15
17
  return () => alias++;
16
18
  })());
17
- this.options = options;
18
19
  this.uploadState = /* @__PURE__ */ new WeakMap();
19
20
  }
20
21
  static formatFullAlias(alias) {
21
22
  return `file${alias}`;
22
23
  }
23
- async upload(files, { contentApiClient, onSuccess, onError, onProgress }) {
24
+ async upload(files, options) {
24
25
  const parameters = {};
25
26
  for (const [file, metadata] of files) {
26
27
  if (this.uploadState.has(file)) {
@@ -35,6 +36,10 @@ class S3FileUploader {
35
36
  parameters[S3FileUploader.formatFullAlias(alias)] = {
36
37
  contentType: uploadOptions?.fileType ?? file.type,
37
38
  prefix: uploadOptions?.filePrefix,
39
+ suffix: uploadOptions?.fileSuffix,
40
+ size: uploadOptions?.fileSize,
41
+ extension: uploadOptions?.fileExtension,
42
+ fileName: uploadOptions?.fileName,
38
43
  expiration: uploadOptions?.fileExpiration,
39
44
  acl: uploadOptions?.fileAcl
40
45
  };
@@ -44,48 +49,58 @@ class S3FileUploader {
44
49
  }
45
50
  const mutation = GenerateUploadUrlMutationBuilder.buildQuery(parameters);
46
51
  try {
47
- const response = await contentApiClient.sendRequest(mutation);
52
+ const response = await options.contentApiClient.sendRequest(mutation);
48
53
  const responseData = response.data;
54
+ const limit = pLimit(this.options.concurrency ?? 5);
55
+ const promises = [];
49
56
  for (const [file] of files) {
50
- const fileState = this.uploadState.get(file);
51
- const datumBody = responseData[S3FileUploader.formatFullAlias(fileState.alias)];
52
- const uploadRequestBody = await readFileAsArrayBuffer(file);
53
- const xhr = new XMLHttpRequest();
54
- fileState.request = xhr;
55
- xhr.open(datumBody.method, datumBody.url);
56
- for (const header of datumBody.headers) {
57
- xhr.setRequestHeader(header.key, header.value);
58
- }
59
- xhr.addEventListener("load", () => {
60
- const successMetadata = {
61
- fileUrl: datumBody.publicUrl
62
- };
63
- onSuccess([[file, successMetadata]]);
64
- });
65
- onError && xhr.addEventListener("error", (e) => {
66
- onError([file]);
67
- });
68
- onProgress && xhr.upload?.addEventListener("progress", (e) => {
69
- onProgress([
70
- [
71
- file,
72
- {
73
- progress: e.loaded / e.total
74
- }
75
- ]
76
- ]);
77
- });
78
- xhr.send(uploadRequestBody);
57
+ promises.push(limit(() => this.uploadSingleFile(file, responseData, options)));
79
58
  }
59
+ await Promise.all(promises);
80
60
  } catch (error) {
81
61
  if (error instanceof FileUploadError) {
82
62
  const fileUploadError = error;
83
- onError(Array.from(files).map(([file]) => [file, fileUploadError]));
63
+ options.onError(Array.from(files).map(([file]) => [file, fileUploadError]));
84
64
  } else {
85
65
  throw error;
86
66
  }
87
67
  }
88
68
  }
69
+ uploadSingleFile(file, responseData, { onProgress, onError, onSuccess }) {
70
+ return new Promise(async (resolve, reject) => {
71
+ const fileState = this.uploadState.get(file);
72
+ const datumBody = responseData[S3FileUploader.formatFullAlias(fileState.alias)];
73
+ const uploadRequestBody = await readFileAsArrayBuffer(file);
74
+ const xhr = new XMLHttpRequest();
75
+ fileState.request = xhr;
76
+ xhr.open(datumBody.method, datumBody.url);
77
+ for (const header of datumBody.headers) {
78
+ xhr.setRequestHeader(header.key, header.value);
79
+ }
80
+ xhr.addEventListener("load", () => {
81
+ const successMetadata = {
82
+ fileUrl: datumBody.publicUrl
83
+ };
84
+ onSuccess([[file, successMetadata]]);
85
+ resolve();
86
+ });
87
+ xhr.addEventListener("error", (e) => {
88
+ onError([file]);
89
+ reject(e);
90
+ });
91
+ xhr.upload?.addEventListener("progress", (e) => {
92
+ onProgress([
93
+ [
94
+ file,
95
+ {
96
+ progress: e.loaded / e.total
97
+ }
98
+ ]
99
+ ]);
100
+ });
101
+ xhr.send(uploadRequestBody);
102
+ });
103
+ }
89
104
  }
90
105
  export {
91
106
  S3FileUploader