@webiny/api-headless-cms-sql 0.0.0-unstable.7c2def32a7 → 0.0.0-unstable.9609e4e0c9

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.
@@ -4,6 +4,7 @@ import { KnexClient } from "@webiny/api-core-sql";
4
4
  import { EntryTableManager } from "../../features/entryTableManager/abstractions.js";
5
5
  import { StorageTransformRegistry } from "@webiny/api-headless-cms/exports/api/cms/storage.js";
6
6
  import { CmsStorageModelProvider } from "@webiny/api-headless-cms/features/shared/abstractions.js";
7
+ import { CmsEntrySystemField } from "@webiny/api-headless-cms/features/contentEntry/EntrySystemField/index.js";
7
8
  import { ValueFilterRegistry } from "@webiny/db-utils";
8
9
  import { FieldFilterPathRegistry, FieldFilterValueTransformRegistry, FieldFilterCreateRegistry, FieldSortingRegistry } from "@webiny/api-headless-cms-storage";
9
10
  declare class SqlGetEntryImpl implements GetEntryStorageOperation.Interface {
@@ -15,8 +16,9 @@ declare class SqlGetEntryImpl implements GetEntryStorageOperation.Interface {
15
16
  private readonly filterCreateRegistry;
16
17
  private readonly sortingRegistry;
17
18
  private readonly valueFilterRegistry;
19
+ private readonly entrySystemFields;
18
20
  private readonly knex;
19
- constructor(knexClient: KnexClient.Interface, entryTableManager: EntryTableManager.Interface, storageTransformRegistry: StorageTransformRegistry.Interface, storageModelProvider: CmsStorageModelProvider.Interface, pathRegistry: FieldFilterPathRegistry.Interface, transformRegistry: FieldFilterValueTransformRegistry.Interface, filterCreateRegistry: FieldFilterCreateRegistry.Interface, sortingRegistry: FieldSortingRegistry.Interface, valueFilterRegistry: ValueFilterRegistry.Interface);
21
+ constructor(knexClient: KnexClient.Interface, entryTableManager: EntryTableManager.Interface, storageTransformRegistry: StorageTransformRegistry.Interface, storageModelProvider: CmsStorageModelProvider.Interface, pathRegistry: FieldFilterPathRegistry.Interface, transformRegistry: FieldFilterValueTransformRegistry.Interface, filterCreateRegistry: FieldFilterCreateRegistry.Interface, sortingRegistry: FieldSortingRegistry.Interface, valueFilterRegistry: ValueFilterRegistry.Interface, entrySystemFields: CmsEntrySystemField.Interface[]);
20
22
  execute<T extends CmsEntryValues = CmsEntryValues>(model: CmsModel, params: CmsEntryStorageOperationsGetParams): Promise<import("@webiny/api-headless-cms/types/types.js").CmsEntry<T> | null>;
21
23
  }
22
24
  export declare const SqlGetEntry: typeof SqlGetEntryImpl & {
@@ -3,11 +3,12 @@ import { KnexClient } from "@webiny/api-core-sql";
3
3
  import { EntryTableManager } from "../../features/entryTableManager/abstractions.js";
4
4
  import { StorageTransformRegistry } from "@webiny/api-headless-cms/exports/api/cms/storage.js";
5
5
  import { CmsStorageModelProvider } from "@webiny/api-headless-cms/features/shared/abstractions.js";
6
+ import { CmsEntrySystemField } from "@webiny/api-headless-cms/features/contentEntry/EntrySystemField/index.js";
6
7
  import { ValueFilterRegistry } from "@webiny/db-utils";
7
8
  import { FieldFilterCreateRegistry, FieldFilterPathRegistry, FieldFilterValueTransformRegistry, FieldSortingRegistry } from "@webiny/api-headless-cms-storage";
8
9
  import { listEntries } from "./queryHelpers.js";
9
10
  class SqlGetEntryImpl {
10
- constructor(knexClient, entryTableManager, storageTransformRegistry, storageModelProvider, pathRegistry, transformRegistry, filterCreateRegistry, sortingRegistry, valueFilterRegistry){
11
+ constructor(knexClient, entryTableManager, storageTransformRegistry, storageModelProvider, pathRegistry, transformRegistry, filterCreateRegistry, sortingRegistry, valueFilterRegistry, entrySystemFields){
11
12
  this.entryTableManager = entryTableManager;
12
13
  this.storageTransformRegistry = storageTransformRegistry;
13
14
  this.storageModelProvider = storageModelProvider;
@@ -16,6 +17,7 @@ class SqlGetEntryImpl {
16
17
  this.filterCreateRegistry = filterCreateRegistry;
17
18
  this.sortingRegistry = sortingRegistry;
18
19
  this.valueFilterRegistry = valueFilterRegistry;
20
+ this.entrySystemFields = entrySystemFields;
19
21
  this.knex = knexClient.client;
20
22
  }
21
23
  async execute(model, params) {
@@ -29,7 +31,8 @@ class SqlGetEntryImpl {
29
31
  transformRegistry: this.transformRegistry,
30
32
  filterCreateRegistry: this.filterCreateRegistry,
31
33
  sortingRegistry: this.sortingRegistry,
32
- valueFilterRegistry: this.valueFilterRegistry
34
+ valueFilterRegistry: this.valueFilterRegistry,
35
+ systemFields: this.entrySystemFields.map((systemField)=>systemField.field)
33
36
  }, model, {
34
37
  ...params,
35
38
  limit: 1
@@ -48,7 +51,13 @@ const SqlGetEntry = GetEntryStorageOperation.createImplementation({
48
51
  FieldFilterValueTransformRegistry,
49
52
  FieldFilterCreateRegistry,
50
53
  FieldSortingRegistry,
51
- ValueFilterRegistry
54
+ ValueFilterRegistry,
55
+ [
56
+ CmsEntrySystemField,
57
+ {
58
+ multiple: true
59
+ }
60
+ ]
52
61
  ]
53
62
  });
54
63
  export { SqlGetEntry };
@@ -1 +1 @@
1
- {"version":3,"file":"operations/entry/SqlGetEntry.js","sources":["../../../src/operations/entry/SqlGetEntry.ts"],"sourcesContent":["import type { Knex } from \"knex\";\nimport type {\n CmsEntryStorageOperationsGetParams,\n CmsEntryValues,\n CmsModel\n} from \"@webiny/api-headless-cms/types/index.js\";\nimport { GetEntryStorageOperation } from \"@webiny/api-headless-cms/features/shared/storageOperations/entry/GetEntryStorageOperation.js\";\nimport { KnexClient } from \"@webiny/api-core-sql\";\nimport { EntryTableManager } from \"~/features/entryTableManager/abstractions.js\";\nimport { StorageTransformRegistry } from \"@webiny/api-headless-cms/exports/api/cms/storage.js\";\nimport { CmsStorageModelProvider } from \"@webiny/api-headless-cms/features/shared/abstractions.js\";\nimport { ValueFilterRegistry } from \"@webiny/db-utils\";\nimport {\n FieldFilterPathRegistry,\n FieldFilterValueTransformRegistry,\n FieldFilterCreateRegistry,\n FieldSortingRegistry\n} from \"@webiny/api-headless-cms-storage\";\nimport { listEntries } from \"./queryHelpers.js\";\n\nclass SqlGetEntryImpl implements GetEntryStorageOperation.Interface {\n private readonly knex: Knex;\n\n public constructor(\n knexClient: KnexClient.Interface,\n private readonly entryTableManager: EntryTableManager.Interface,\n private readonly storageTransformRegistry: StorageTransformRegistry.Interface,\n private readonly storageModelProvider: CmsStorageModelProvider.Interface,\n private readonly pathRegistry: FieldFilterPathRegistry.Interface,\n private readonly transformRegistry: FieldFilterValueTransformRegistry.Interface,\n private readonly filterCreateRegistry: FieldFilterCreateRegistry.Interface,\n private readonly sortingRegistry: FieldSortingRegistry.Interface,\n private readonly valueFilterRegistry: ValueFilterRegistry.Interface\n ) {\n this.knex = knexClient.client;\n }\n\n async execute<T extends CmsEntryValues = CmsEntryValues>(\n model: CmsModel,\n params: CmsEntryStorageOperationsGetParams\n ) {\n await this.entryTableManager.ensureTable();\n\n const { items } = await listEntries<T>(\n {\n knex: this.knex,\n tableName: this.entryTableManager.getTableName(),\n storageModelProvider: this.storageModelProvider,\n storageTransformRegistry: this.storageTransformRegistry,\n pathRegistry: this.pathRegistry,\n transformRegistry: this.transformRegistry,\n filterCreateRegistry: this.filterCreateRegistry,\n sortingRegistry: this.sortingRegistry,\n valueFilterRegistry: this.valueFilterRegistry\n },\n model,\n { ...params, limit: 1 }\n );\n\n return items.shift() || null;\n }\n}\n\nexport const SqlGetEntry = GetEntryStorageOperation.createImplementation({\n implementation: SqlGetEntryImpl,\n dependencies: [\n KnexClient,\n EntryTableManager,\n StorageTransformRegistry,\n CmsStorageModelProvider,\n FieldFilterPathRegistry,\n FieldFilterValueTransformRegistry,\n FieldFilterCreateRegistry,\n FieldSortingRegistry,\n ValueFilterRegistry\n ]\n});\n"],"names":["SqlGetEntryImpl","knexClient","entryTableManager","storageTransformRegistry","storageModelProvider","pathRegistry","transformRegistry","filterCreateRegistry","sortingRegistry","valueFilterRegistry","model","params","items","listEntries","SqlGetEntry","GetEntryStorageOperation","KnexClient","EntryTableManager","StorageTransformRegistry","CmsStorageModelProvider","FieldFilterPathRegistry","FieldFilterValueTransformRegistry","FieldFilterCreateRegistry","FieldSortingRegistry","ValueFilterRegistry"],"mappings":";;;;;;;;AAoBA,MAAMA;IAGF,YACIC,UAAgC,EACfC,iBAA8C,EAC9CC,wBAA4D,EAC5DC,oBAAuD,EACvDC,YAA+C,EAC/CC,iBAA8D,EAC9DC,oBAAyD,EACzDC,eAA+C,EAC/CC,mBAAkD,CACrE;aARmBP,iBAAiB,GAAjBA;aACAC,wBAAwB,GAAxBA;aACAC,oBAAoB,GAApBA;aACAC,YAAY,GAAZA;aACAC,iBAAiB,GAAjBA;aACAC,oBAAoB,GAApBA;aACAC,eAAe,GAAfA;aACAC,mBAAmB,GAAnBA;QAEjB,IAAI,CAAC,IAAI,GAAGR,WAAW,MAAM;IACjC;IAEA,MAAM,QACFS,KAAe,EACfC,MAA0C,EAC5C;QACE,MAAM,IAAI,CAAC,iBAAiB,CAAC,WAAW;QAExC,MAAM,EAAEC,KAAK,EAAE,GAAG,MAAMC,YACpB;YACI,MAAM,IAAI,CAAC,IAAI;YACf,WAAW,IAAI,CAAC,iBAAiB,CAAC,YAAY;YAC9C,sBAAsB,IAAI,CAAC,oBAAoB;YAC/C,0BAA0B,IAAI,CAAC,wBAAwB;YACvD,cAAc,IAAI,CAAC,YAAY;YAC/B,mBAAmB,IAAI,CAAC,iBAAiB;YACzC,sBAAsB,IAAI,CAAC,oBAAoB;YAC/C,iBAAiB,IAAI,CAAC,eAAe;YACrC,qBAAqB,IAAI,CAAC,mBAAmB;QACjD,GACAH,OACA;YAAE,GAAGC,MAAM;YAAE,OAAO;QAAE;QAG1B,OAAOC,MAAM,KAAK,MAAM;IAC5B;AACJ;AAEO,MAAME,cAAcC,yBAAyB,oBAAoB,CAAC;IACrE,gBAAgBf;IAChB,cAAc;QACVgB;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;KACH;AACL"}
1
+ {"version":3,"file":"operations/entry/SqlGetEntry.js","sources":["../../../src/operations/entry/SqlGetEntry.ts"],"sourcesContent":["import type { Knex } from \"knex\";\nimport type {\n CmsEntryStorageOperationsGetParams,\n CmsEntryValues,\n CmsModel\n} from \"@webiny/api-headless-cms/types/index.js\";\nimport { GetEntryStorageOperation } from \"@webiny/api-headless-cms/features/shared/storageOperations/entry/GetEntryStorageOperation.js\";\nimport { KnexClient } from \"@webiny/api-core-sql\";\nimport { EntryTableManager } from \"~/features/entryTableManager/abstractions.js\";\nimport { StorageTransformRegistry } from \"@webiny/api-headless-cms/exports/api/cms/storage.js\";\nimport { CmsStorageModelProvider } from \"@webiny/api-headless-cms/features/shared/abstractions.js\";\nimport { CmsEntrySystemField } from \"@webiny/api-headless-cms/features/contentEntry/EntrySystemField/index.js\";\nimport { ValueFilterRegistry } from \"@webiny/db-utils\";\nimport {\n FieldFilterPathRegistry,\n FieldFilterValueTransformRegistry,\n FieldFilterCreateRegistry,\n FieldSortingRegistry\n} from \"@webiny/api-headless-cms-storage\";\nimport { listEntries } from \"./queryHelpers.js\";\n\nclass SqlGetEntryImpl implements GetEntryStorageOperation.Interface {\n private readonly knex: Knex;\n\n public constructor(\n knexClient: KnexClient.Interface,\n private readonly entryTableManager: EntryTableManager.Interface,\n private readonly storageTransformRegistry: StorageTransformRegistry.Interface,\n private readonly storageModelProvider: CmsStorageModelProvider.Interface,\n private readonly pathRegistry: FieldFilterPathRegistry.Interface,\n private readonly transformRegistry: FieldFilterValueTransformRegistry.Interface,\n private readonly filterCreateRegistry: FieldFilterCreateRegistry.Interface,\n private readonly sortingRegistry: FieldSortingRegistry.Interface,\n private readonly valueFilterRegistry: ValueFilterRegistry.Interface,\n private readonly entrySystemFields: CmsEntrySystemField.Interface[]\n ) {\n this.knex = knexClient.client;\n }\n\n async execute<T extends CmsEntryValues = CmsEntryValues>(\n model: CmsModel,\n params: CmsEntryStorageOperationsGetParams\n ) {\n await this.entryTableManager.ensureTable();\n\n const { items } = await listEntries<T>(\n {\n knex: this.knex,\n tableName: this.entryTableManager.getTableName(),\n storageModelProvider: this.storageModelProvider,\n storageTransformRegistry: this.storageTransformRegistry,\n pathRegistry: this.pathRegistry,\n transformRegistry: this.transformRegistry,\n filterCreateRegistry: this.filterCreateRegistry,\n sortingRegistry: this.sortingRegistry,\n valueFilterRegistry: this.valueFilterRegistry,\n systemFields: this.entrySystemFields.map(systemField => systemField.field)\n },\n model,\n { ...params, limit: 1 }\n );\n\n return items.shift() || null;\n }\n}\n\nexport const SqlGetEntry = GetEntryStorageOperation.createImplementation({\n implementation: SqlGetEntryImpl,\n dependencies: [\n KnexClient,\n EntryTableManager,\n StorageTransformRegistry,\n CmsStorageModelProvider,\n FieldFilterPathRegistry,\n FieldFilterValueTransformRegistry,\n FieldFilterCreateRegistry,\n FieldSortingRegistry,\n ValueFilterRegistry,\n [CmsEntrySystemField, { multiple: true }]\n ]\n});\n"],"names":["SqlGetEntryImpl","knexClient","entryTableManager","storageTransformRegistry","storageModelProvider","pathRegistry","transformRegistry","filterCreateRegistry","sortingRegistry","valueFilterRegistry","entrySystemFields","model","params","items","listEntries","systemField","SqlGetEntry","GetEntryStorageOperation","KnexClient","EntryTableManager","StorageTransformRegistry","CmsStorageModelProvider","FieldFilterPathRegistry","FieldFilterValueTransformRegistry","FieldFilterCreateRegistry","FieldSortingRegistry","ValueFilterRegistry","CmsEntrySystemField"],"mappings":";;;;;;;;;AAqBA,MAAMA;IAGF,YACIC,UAAgC,EACfC,iBAA8C,EAC9CC,wBAA4D,EAC5DC,oBAAuD,EACvDC,YAA+C,EAC/CC,iBAA8D,EAC9DC,oBAAyD,EACzDC,eAA+C,EAC/CC,mBAAkD,EAClDC,iBAAkD,CACrE;aATmBR,iBAAiB,GAAjBA;aACAC,wBAAwB,GAAxBA;aACAC,oBAAoB,GAApBA;aACAC,YAAY,GAAZA;aACAC,iBAAiB,GAAjBA;aACAC,oBAAoB,GAApBA;aACAC,eAAe,GAAfA;aACAC,mBAAmB,GAAnBA;aACAC,iBAAiB,GAAjBA;QAEjB,IAAI,CAAC,IAAI,GAAGT,WAAW,MAAM;IACjC;IAEA,MAAM,QACFU,KAAe,EACfC,MAA0C,EAC5C;QACE,MAAM,IAAI,CAAC,iBAAiB,CAAC,WAAW;QAExC,MAAM,EAAEC,KAAK,EAAE,GAAG,MAAMC,YACpB;YACI,MAAM,IAAI,CAAC,IAAI;YACf,WAAW,IAAI,CAAC,iBAAiB,CAAC,YAAY;YAC9C,sBAAsB,IAAI,CAAC,oBAAoB;YAC/C,0BAA0B,IAAI,CAAC,wBAAwB;YACvD,cAAc,IAAI,CAAC,YAAY;YAC/B,mBAAmB,IAAI,CAAC,iBAAiB;YACzC,sBAAsB,IAAI,CAAC,oBAAoB;YAC/C,iBAAiB,IAAI,CAAC,eAAe;YACrC,qBAAqB,IAAI,CAAC,mBAAmB;YAC7C,cAAc,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAACC,CAAAA,cAAeA,YAAY,KAAK;QAC7E,GACAJ,OACA;YAAE,GAAGC,MAAM;YAAE,OAAO;QAAE;QAG1B,OAAOC,MAAM,KAAK,MAAM;IAC5B;AACJ;AAEO,MAAMG,cAAcC,yBAAyB,oBAAoB,CAAC;IACrE,gBAAgBjB;IAChB,cAAc;QACVkB;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACA;YAACC;YAAqB;gBAAE,UAAU;YAAK;SAAE;KAC5C;AACL"}
@@ -4,6 +4,7 @@ import { KnexClient } from "@webiny/api-core-sql";
4
4
  import { EntryTableManager } from "../../features/entryTableManager/abstractions.js";
5
5
  import { StorageTransformRegistry } from "@webiny/api-headless-cms/exports/api/cms/storage.js";
6
6
  import { CmsStorageModelProvider } from "@webiny/api-headless-cms/features/shared/abstractions.js";
7
+ import { CmsEntrySystemField } from "@webiny/api-headless-cms/features/contentEntry/EntrySystemField/index.js";
7
8
  import { ValueFilterRegistry } from "@webiny/db-utils";
8
9
  import { FieldFilterPathRegistry, FieldFilterValueTransformRegistry, FieldFilterCreateRegistry, FieldSortingRegistry } from "@webiny/api-headless-cms-storage";
9
10
  declare class SqlGetUniqueFieldValuesImpl implements GetUniqueFieldValuesStorageOperation.Interface {
@@ -15,8 +16,9 @@ declare class SqlGetUniqueFieldValuesImpl implements GetUniqueFieldValuesStorage
15
16
  private readonly filterCreateRegistry;
16
17
  private readonly sortingRegistry;
17
18
  private readonly valueFilterRegistry;
19
+ private readonly entrySystemFields;
18
20
  private readonly knex;
19
- constructor(knexClient: KnexClient.Interface, entryTableManager: EntryTableManager.Interface, storageTransformRegistry: StorageTransformRegistry.Interface, storageModelProvider: CmsStorageModelProvider.Interface, pathRegistry: FieldFilterPathRegistry.Interface, transformRegistry: FieldFilterValueTransformRegistry.Interface, filterCreateRegistry: FieldFilterCreateRegistry.Interface, sortingRegistry: FieldSortingRegistry.Interface, valueFilterRegistry: ValueFilterRegistry.Interface);
21
+ constructor(knexClient: KnexClient.Interface, entryTableManager: EntryTableManager.Interface, storageTransformRegistry: StorageTransformRegistry.Interface, storageModelProvider: CmsStorageModelProvider.Interface, pathRegistry: FieldFilterPathRegistry.Interface, transformRegistry: FieldFilterValueTransformRegistry.Interface, filterCreateRegistry: FieldFilterCreateRegistry.Interface, sortingRegistry: FieldSortingRegistry.Interface, valueFilterRegistry: ValueFilterRegistry.Interface, entrySystemFields: CmsEntrySystemField.Interface[]);
20
22
  execute(model: CmsModel, params: CmsEntryStorageOperationsGetUniqueFieldValuesParams): Promise<import("@webiny/api-headless-cms/types/types.js").CmsEntryUniqueValue[]>;
21
23
  }
22
24
  export declare const SqlGetUniqueFieldValues: typeof SqlGetUniqueFieldValuesImpl & {
@@ -3,11 +3,12 @@ import { KnexClient } from "@webiny/api-core-sql";
3
3
  import { EntryTableManager } from "../../features/entryTableManager/abstractions.js";
4
4
  import { StorageTransformRegistry } from "@webiny/api-headless-cms/exports/api/cms/storage.js";
5
5
  import { CmsStorageModelProvider } from "@webiny/api-headless-cms/features/shared/abstractions.js";
6
+ import { CmsEntrySystemField } from "@webiny/api-headless-cms/features/contentEntry/EntrySystemField/index.js";
6
7
  import { ValueFilterRegistry } from "@webiny/db-utils";
7
8
  import { FieldFilterCreateRegistry, FieldFilterPathRegistry, FieldFilterValueTransformRegistry, FieldSortingRegistry, aggregateUniqueFieldValues } from "@webiny/api-headless-cms-storage";
8
9
  import { MAX_LIST_LIMIT, listEntries } from "./queryHelpers.js";
9
10
  class SqlGetUniqueFieldValuesImpl {
10
- constructor(knexClient, entryTableManager, storageTransformRegistry, storageModelProvider, pathRegistry, transformRegistry, filterCreateRegistry, sortingRegistry, valueFilterRegistry){
11
+ constructor(knexClient, entryTableManager, storageTransformRegistry, storageModelProvider, pathRegistry, transformRegistry, filterCreateRegistry, sortingRegistry, valueFilterRegistry, entrySystemFields){
11
12
  this.entryTableManager = entryTableManager;
12
13
  this.storageTransformRegistry = storageTransformRegistry;
13
14
  this.storageModelProvider = storageModelProvider;
@@ -16,6 +17,7 @@ class SqlGetUniqueFieldValuesImpl {
16
17
  this.filterCreateRegistry = filterCreateRegistry;
17
18
  this.sortingRegistry = sortingRegistry;
18
19
  this.valueFilterRegistry = valueFilterRegistry;
20
+ this.entrySystemFields = entrySystemFields;
19
21
  this.knex = knexClient.client;
20
22
  }
21
23
  async execute(model, params) {
@@ -31,7 +33,8 @@ class SqlGetUniqueFieldValuesImpl {
31
33
  transformRegistry: this.transformRegistry,
32
34
  filterCreateRegistry: this.filterCreateRegistry,
33
35
  sortingRegistry: this.sortingRegistry,
34
- valueFilterRegistry: this.valueFilterRegistry
36
+ valueFilterRegistry: this.valueFilterRegistry,
37
+ systemFields: this.entrySystemFields.map((systemField)=>systemField.field)
35
38
  }, model, {
36
39
  where: params.where,
37
40
  limit: MAX_LIST_LIMIT
@@ -50,7 +53,13 @@ const SqlGetUniqueFieldValues = GetUniqueFieldValuesStorageOperation.createImple
50
53
  FieldFilterValueTransformRegistry,
51
54
  FieldFilterCreateRegistry,
52
55
  FieldSortingRegistry,
53
- ValueFilterRegistry
56
+ ValueFilterRegistry,
57
+ [
58
+ CmsEntrySystemField,
59
+ {
60
+ multiple: true
61
+ }
62
+ ]
54
63
  ]
55
64
  });
56
65
  export { SqlGetUniqueFieldValues };
@@ -1 +1 @@
1
- {"version":3,"file":"operations/entry/SqlGetUniqueFieldValues.js","sources":["../../../src/operations/entry/SqlGetUniqueFieldValues.ts"],"sourcesContent":["import type { Knex } from \"knex\";\nimport type {\n CmsEntryStorageOperationsGetUniqueFieldValuesParams,\n CmsModel\n} from \"@webiny/api-headless-cms/types/index.js\";\nimport { GetUniqueFieldValuesStorageOperation } from \"@webiny/api-headless-cms/features/shared/storageOperations/entry/GetUniqueFieldValuesStorageOperation.js\";\nimport { KnexClient } from \"@webiny/api-core-sql\";\nimport { EntryTableManager } from \"~/features/entryTableManager/abstractions.js\";\nimport { StorageTransformRegistry } from \"@webiny/api-headless-cms/exports/api/cms/storage.js\";\nimport { CmsStorageModelProvider } from \"@webiny/api-headless-cms/features/shared/abstractions.js\";\nimport { ValueFilterRegistry } from \"@webiny/db-utils\";\nimport {\n aggregateUniqueFieldValues,\n FieldFilterPathRegistry,\n FieldFilterValueTransformRegistry,\n FieldFilterCreateRegistry,\n FieldSortingRegistry\n} from \"@webiny/api-headless-cms-storage\";\nimport { listEntries, MAX_LIST_LIMIT } from \"./queryHelpers.js\";\n\nclass SqlGetUniqueFieldValuesImpl implements GetUniqueFieldValuesStorageOperation.Interface {\n private readonly knex: Knex;\n\n public constructor(\n knexClient: KnexClient.Interface,\n private readonly entryTableManager: EntryTableManager.Interface,\n private readonly storageTransformRegistry: StorageTransformRegistry.Interface,\n private readonly storageModelProvider: CmsStorageModelProvider.Interface,\n private readonly pathRegistry: FieldFilterPathRegistry.Interface,\n private readonly transformRegistry: FieldFilterValueTransformRegistry.Interface,\n private readonly filterCreateRegistry: FieldFilterCreateRegistry.Interface,\n private readonly sortingRegistry: FieldSortingRegistry.Interface,\n private readonly valueFilterRegistry: ValueFilterRegistry.Interface\n ) {\n this.knex = knexClient.client;\n }\n\n async execute(model: CmsModel, params: CmsEntryStorageOperationsGetUniqueFieldValuesParams) {\n const field = model.fields.find(f => f.fieldId === params.fieldId);\n\n if (!field) {\n return [];\n }\n\n await this.entryTableManager.ensureTable();\n\n const { items } = await listEntries(\n {\n knex: this.knex,\n tableName: this.entryTableManager.getTableName(),\n storageModelProvider: this.storageModelProvider,\n storageTransformRegistry: this.storageTransformRegistry,\n pathRegistry: this.pathRegistry,\n transformRegistry: this.transformRegistry,\n filterCreateRegistry: this.filterCreateRegistry,\n sortingRegistry: this.sortingRegistry,\n valueFilterRegistry: this.valueFilterRegistry\n },\n model,\n {\n where: params.where,\n limit: MAX_LIST_LIMIT\n }\n );\n\n return aggregateUniqueFieldValues(items, field.fieldId);\n }\n}\n\nexport const SqlGetUniqueFieldValues = GetUniqueFieldValuesStorageOperation.createImplementation({\n implementation: SqlGetUniqueFieldValuesImpl,\n dependencies: [\n KnexClient,\n EntryTableManager,\n StorageTransformRegistry,\n CmsStorageModelProvider,\n FieldFilterPathRegistry,\n FieldFilterValueTransformRegistry,\n FieldFilterCreateRegistry,\n FieldSortingRegistry,\n ValueFilterRegistry\n ]\n});\n"],"names":["SqlGetUniqueFieldValuesImpl","knexClient","entryTableManager","storageTransformRegistry","storageModelProvider","pathRegistry","transformRegistry","filterCreateRegistry","sortingRegistry","valueFilterRegistry","model","params","field","f","items","listEntries","MAX_LIST_LIMIT","aggregateUniqueFieldValues","SqlGetUniqueFieldValues","GetUniqueFieldValuesStorageOperation","KnexClient","EntryTableManager","StorageTransformRegistry","CmsStorageModelProvider","FieldFilterPathRegistry","FieldFilterValueTransformRegistry","FieldFilterCreateRegistry","FieldSortingRegistry","ValueFilterRegistry"],"mappings":";;;;;;;;AAoBA,MAAMA;IAGF,YACIC,UAAgC,EACfC,iBAA8C,EAC9CC,wBAA4D,EAC5DC,oBAAuD,EACvDC,YAA+C,EAC/CC,iBAA8D,EAC9DC,oBAAyD,EACzDC,eAA+C,EAC/CC,mBAAkD,CACrE;aARmBP,iBAAiB,GAAjBA;aACAC,wBAAwB,GAAxBA;aACAC,oBAAoB,GAApBA;aACAC,YAAY,GAAZA;aACAC,iBAAiB,GAAjBA;aACAC,oBAAoB,GAApBA;aACAC,eAAe,GAAfA;aACAC,mBAAmB,GAAnBA;QAEjB,IAAI,CAAC,IAAI,GAAGR,WAAW,MAAM;IACjC;IAEA,MAAM,QAAQS,KAAe,EAAEC,MAA2D,EAAE;QACxF,MAAMC,QAAQF,MAAM,MAAM,CAAC,IAAI,CAACG,CAAAA,IAAKA,EAAE,OAAO,KAAKF,OAAO,OAAO;QAEjE,IAAI,CAACC,OACD,OAAO,EAAE;QAGb,MAAM,IAAI,CAAC,iBAAiB,CAAC,WAAW;QAExC,MAAM,EAAEE,KAAK,EAAE,GAAG,MAAMC,YACpB;YACI,MAAM,IAAI,CAAC,IAAI;YACf,WAAW,IAAI,CAAC,iBAAiB,CAAC,YAAY;YAC9C,sBAAsB,IAAI,CAAC,oBAAoB;YAC/C,0BAA0B,IAAI,CAAC,wBAAwB;YACvD,cAAc,IAAI,CAAC,YAAY;YAC/B,mBAAmB,IAAI,CAAC,iBAAiB;YACzC,sBAAsB,IAAI,CAAC,oBAAoB;YAC/C,iBAAiB,IAAI,CAAC,eAAe;YACrC,qBAAqB,IAAI,CAAC,mBAAmB;QACjD,GACAL,OACA;YACI,OAAOC,OAAO,KAAK;YACnB,OAAOK;QACX;QAGJ,OAAOC,2BAA2BH,OAAOF,MAAM,OAAO;IAC1D;AACJ;AAEO,MAAMM,0BAA0BC,qCAAqC,oBAAoB,CAAC;IAC7F,gBAAgBnB;IAChB,cAAc;QACVoB;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;KACH;AACL"}
1
+ {"version":3,"file":"operations/entry/SqlGetUniqueFieldValues.js","sources":["../../../src/operations/entry/SqlGetUniqueFieldValues.ts"],"sourcesContent":["import type { Knex } from \"knex\";\nimport type {\n CmsEntryStorageOperationsGetUniqueFieldValuesParams,\n CmsModel\n} from \"@webiny/api-headless-cms/types/index.js\";\nimport { GetUniqueFieldValuesStorageOperation } from \"@webiny/api-headless-cms/features/shared/storageOperations/entry/GetUniqueFieldValuesStorageOperation.js\";\nimport { KnexClient } from \"@webiny/api-core-sql\";\nimport { EntryTableManager } from \"~/features/entryTableManager/abstractions.js\";\nimport { StorageTransformRegistry } from \"@webiny/api-headless-cms/exports/api/cms/storage.js\";\nimport { CmsStorageModelProvider } from \"@webiny/api-headless-cms/features/shared/abstractions.js\";\nimport { CmsEntrySystemField } from \"@webiny/api-headless-cms/features/contentEntry/EntrySystemField/index.js\";\nimport { ValueFilterRegistry } from \"@webiny/db-utils\";\nimport {\n aggregateUniqueFieldValues,\n FieldFilterPathRegistry,\n FieldFilterValueTransformRegistry,\n FieldFilterCreateRegistry,\n FieldSortingRegistry\n} from \"@webiny/api-headless-cms-storage\";\nimport { listEntries, MAX_LIST_LIMIT } from \"./queryHelpers.js\";\n\nclass SqlGetUniqueFieldValuesImpl implements GetUniqueFieldValuesStorageOperation.Interface {\n private readonly knex: Knex;\n\n public constructor(\n knexClient: KnexClient.Interface,\n private readonly entryTableManager: EntryTableManager.Interface,\n private readonly storageTransformRegistry: StorageTransformRegistry.Interface,\n private readonly storageModelProvider: CmsStorageModelProvider.Interface,\n private readonly pathRegistry: FieldFilterPathRegistry.Interface,\n private readonly transformRegistry: FieldFilterValueTransformRegistry.Interface,\n private readonly filterCreateRegistry: FieldFilterCreateRegistry.Interface,\n private readonly sortingRegistry: FieldSortingRegistry.Interface,\n private readonly valueFilterRegistry: ValueFilterRegistry.Interface,\n private readonly entrySystemFields: CmsEntrySystemField.Interface[]\n ) {\n this.knex = knexClient.client;\n }\n\n async execute(model: CmsModel, params: CmsEntryStorageOperationsGetUniqueFieldValuesParams) {\n const field = model.fields.find(f => f.fieldId === params.fieldId);\n\n if (!field) {\n return [];\n }\n\n await this.entryTableManager.ensureTable();\n\n const { items } = await listEntries(\n {\n knex: this.knex,\n tableName: this.entryTableManager.getTableName(),\n storageModelProvider: this.storageModelProvider,\n storageTransformRegistry: this.storageTransformRegistry,\n pathRegistry: this.pathRegistry,\n transformRegistry: this.transformRegistry,\n filterCreateRegistry: this.filterCreateRegistry,\n sortingRegistry: this.sortingRegistry,\n valueFilterRegistry: this.valueFilterRegistry,\n systemFields: this.entrySystemFields.map(systemField => systemField.field)\n },\n model,\n {\n where: params.where,\n limit: MAX_LIST_LIMIT\n }\n );\n\n return aggregateUniqueFieldValues(items, field.fieldId);\n }\n}\n\nexport const SqlGetUniqueFieldValues = GetUniqueFieldValuesStorageOperation.createImplementation({\n implementation: SqlGetUniqueFieldValuesImpl,\n dependencies: [\n KnexClient,\n EntryTableManager,\n StorageTransformRegistry,\n CmsStorageModelProvider,\n FieldFilterPathRegistry,\n FieldFilterValueTransformRegistry,\n FieldFilterCreateRegistry,\n FieldSortingRegistry,\n ValueFilterRegistry,\n [CmsEntrySystemField, { multiple: true }]\n ]\n});\n"],"names":["SqlGetUniqueFieldValuesImpl","knexClient","entryTableManager","storageTransformRegistry","storageModelProvider","pathRegistry","transformRegistry","filterCreateRegistry","sortingRegistry","valueFilterRegistry","entrySystemFields","model","params","field","f","items","listEntries","systemField","MAX_LIST_LIMIT","aggregateUniqueFieldValues","SqlGetUniqueFieldValues","GetUniqueFieldValuesStorageOperation","KnexClient","EntryTableManager","StorageTransformRegistry","CmsStorageModelProvider","FieldFilterPathRegistry","FieldFilterValueTransformRegistry","FieldFilterCreateRegistry","FieldSortingRegistry","ValueFilterRegistry","CmsEntrySystemField"],"mappings":";;;;;;;;;AAqBA,MAAMA;IAGF,YACIC,UAAgC,EACfC,iBAA8C,EAC9CC,wBAA4D,EAC5DC,oBAAuD,EACvDC,YAA+C,EAC/CC,iBAA8D,EAC9DC,oBAAyD,EACzDC,eAA+C,EAC/CC,mBAAkD,EAClDC,iBAAkD,CACrE;aATmBR,iBAAiB,GAAjBA;aACAC,wBAAwB,GAAxBA;aACAC,oBAAoB,GAApBA;aACAC,YAAY,GAAZA;aACAC,iBAAiB,GAAjBA;aACAC,oBAAoB,GAApBA;aACAC,eAAe,GAAfA;aACAC,mBAAmB,GAAnBA;aACAC,iBAAiB,GAAjBA;QAEjB,IAAI,CAAC,IAAI,GAAGT,WAAW,MAAM;IACjC;IAEA,MAAM,QAAQU,KAAe,EAAEC,MAA2D,EAAE;QACxF,MAAMC,QAAQF,MAAM,MAAM,CAAC,IAAI,CAACG,CAAAA,IAAKA,EAAE,OAAO,KAAKF,OAAO,OAAO;QAEjE,IAAI,CAACC,OACD,OAAO,EAAE;QAGb,MAAM,IAAI,CAAC,iBAAiB,CAAC,WAAW;QAExC,MAAM,EAAEE,KAAK,EAAE,GAAG,MAAMC,YACpB;YACI,MAAM,IAAI,CAAC,IAAI;YACf,WAAW,IAAI,CAAC,iBAAiB,CAAC,YAAY;YAC9C,sBAAsB,IAAI,CAAC,oBAAoB;YAC/C,0BAA0B,IAAI,CAAC,wBAAwB;YACvD,cAAc,IAAI,CAAC,YAAY;YAC/B,mBAAmB,IAAI,CAAC,iBAAiB;YACzC,sBAAsB,IAAI,CAAC,oBAAoB;YAC/C,iBAAiB,IAAI,CAAC,eAAe;YACrC,qBAAqB,IAAI,CAAC,mBAAmB;YAC7C,cAAc,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAACC,CAAAA,cAAeA,YAAY,KAAK;QAC7E,GACAN,OACA;YACI,OAAOC,OAAO,KAAK;YACnB,OAAOM;QACX;QAGJ,OAAOC,2BAA2BJ,OAAOF,MAAM,OAAO;IAC1D;AACJ;AAEO,MAAMO,0BAA0BC,qCAAqC,oBAAoB,CAAC;IAC7F,gBAAgBrB;IAChB,cAAc;QACVsB;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACA;YAACC;YAAqB;gBAAE,UAAU;YAAK;SAAE;KAC5C;AACL"}
@@ -4,6 +4,7 @@ import { KnexClient } from "@webiny/api-core-sql";
4
4
  import { EntryTableManager } from "../../features/entryTableManager/abstractions.js";
5
5
  import { StorageTransformRegistry } from "@webiny/api-headless-cms/exports/api/cms/storage.js";
6
6
  import { CmsStorageModelProvider } from "@webiny/api-headless-cms/features/shared/abstractions.js";
7
+ import { CmsEntrySystemField } from "@webiny/api-headless-cms/features/contentEntry/EntrySystemField/index.js";
7
8
  import { ValueFilterRegistry } from "@webiny/db-utils";
8
9
  import { FieldFilterPathRegistry, FieldFilterValueTransformRegistry, FieldFilterCreateRegistry, FieldSortingRegistry } from "@webiny/api-headless-cms-storage";
9
10
  declare class SqlListEntriesImpl implements ListEntriesStorageOperation.Interface {
@@ -15,8 +16,9 @@ declare class SqlListEntriesImpl implements ListEntriesStorageOperation.Interfac
15
16
  private readonly filterCreateRegistry;
16
17
  private readonly sortingRegistry;
17
18
  private readonly valueFilterRegistry;
19
+ private readonly entrySystemFields;
18
20
  private readonly knex;
19
- constructor(knexClient: KnexClient.Interface, entryTableManager: EntryTableManager.Interface, storageTransformRegistry: StorageTransformRegistry.Interface, storageModelProvider: CmsStorageModelProvider.Interface, pathRegistry: FieldFilterPathRegistry.Interface, transformRegistry: FieldFilterValueTransformRegistry.Interface, filterCreateRegistry: FieldFilterCreateRegistry.Interface, sortingRegistry: FieldSortingRegistry.Interface, valueFilterRegistry: ValueFilterRegistry.Interface);
21
+ constructor(knexClient: KnexClient.Interface, entryTableManager: EntryTableManager.Interface, storageTransformRegistry: StorageTransformRegistry.Interface, storageModelProvider: CmsStorageModelProvider.Interface, pathRegistry: FieldFilterPathRegistry.Interface, transformRegistry: FieldFilterValueTransformRegistry.Interface, filterCreateRegistry: FieldFilterCreateRegistry.Interface, sortingRegistry: FieldSortingRegistry.Interface, valueFilterRegistry: ValueFilterRegistry.Interface, entrySystemFields: CmsEntrySystemField.Interface[]);
20
22
  execute<T extends CmsEntryValues = CmsEntryValues>(model: CmsModel, params: CmsEntryStorageOperationsListParams): Promise<import("@webiny/api-headless-cms/types/types.js").CmsEntryStorageOperationsListResponse<import("@webiny/api-headless-cms/types/types.js").CmsEntry<T>>>;
21
23
  }
22
24
  export declare const SqlListEntries: typeof SqlListEntriesImpl & {
@@ -3,11 +3,12 @@ import { KnexClient } from "@webiny/api-core-sql";
3
3
  import { EntryTableManager } from "../../features/entryTableManager/abstractions.js";
4
4
  import { StorageTransformRegistry } from "@webiny/api-headless-cms/exports/api/cms/storage.js";
5
5
  import { CmsStorageModelProvider } from "@webiny/api-headless-cms/features/shared/abstractions.js";
6
+ import { CmsEntrySystemField } from "@webiny/api-headless-cms/features/contentEntry/EntrySystemField/index.js";
6
7
  import { ValueFilterRegistry } from "@webiny/db-utils";
7
8
  import { FieldFilterCreateRegistry, FieldFilterPathRegistry, FieldFilterValueTransformRegistry, FieldSortingRegistry } from "@webiny/api-headless-cms-storage";
8
9
  import { listEntries } from "./queryHelpers.js";
9
10
  class SqlListEntriesImpl {
10
- constructor(knexClient, entryTableManager, storageTransformRegistry, storageModelProvider, pathRegistry, transformRegistry, filterCreateRegistry, sortingRegistry, valueFilterRegistry){
11
+ constructor(knexClient, entryTableManager, storageTransformRegistry, storageModelProvider, pathRegistry, transformRegistry, filterCreateRegistry, sortingRegistry, valueFilterRegistry, entrySystemFields){
11
12
  this.entryTableManager = entryTableManager;
12
13
  this.storageTransformRegistry = storageTransformRegistry;
13
14
  this.storageModelProvider = storageModelProvider;
@@ -16,6 +17,7 @@ class SqlListEntriesImpl {
16
17
  this.filterCreateRegistry = filterCreateRegistry;
17
18
  this.sortingRegistry = sortingRegistry;
18
19
  this.valueFilterRegistry = valueFilterRegistry;
20
+ this.entrySystemFields = entrySystemFields;
19
21
  this.knex = knexClient.client;
20
22
  }
21
23
  async execute(model, params) {
@@ -29,7 +31,8 @@ class SqlListEntriesImpl {
29
31
  transformRegistry: this.transformRegistry,
30
32
  filterCreateRegistry: this.filterCreateRegistry,
31
33
  sortingRegistry: this.sortingRegistry,
32
- valueFilterRegistry: this.valueFilterRegistry
34
+ valueFilterRegistry: this.valueFilterRegistry,
35
+ systemFields: this.entrySystemFields.map((systemField)=>systemField.field)
33
36
  }, model, params);
34
37
  }
35
38
  }
@@ -44,7 +47,13 @@ const SqlListEntries = ListEntriesStorageOperation.createImplementation({
44
47
  FieldFilterValueTransformRegistry,
45
48
  FieldFilterCreateRegistry,
46
49
  FieldSortingRegistry,
47
- ValueFilterRegistry
50
+ ValueFilterRegistry,
51
+ [
52
+ CmsEntrySystemField,
53
+ {
54
+ multiple: true
55
+ }
56
+ ]
48
57
  ]
49
58
  });
50
59
  export { SqlListEntries };
@@ -1 +1 @@
1
- {"version":3,"file":"operations/entry/SqlListEntries.js","sources":["../../../src/operations/entry/SqlListEntries.ts"],"sourcesContent":["import type { Knex } from \"knex\";\nimport type {\n CmsEntryStorageOperationsListParams,\n CmsEntryValues,\n CmsModel\n} from \"@webiny/api-headless-cms/types/index.js\";\nimport { ListEntriesStorageOperation } from \"@webiny/api-headless-cms/features/shared/storageOperations/entry/ListEntriesStorageOperation.js\";\nimport { KnexClient } from \"@webiny/api-core-sql\";\nimport { EntryTableManager } from \"~/features/entryTableManager/abstractions.js\";\nimport { StorageTransformRegistry } from \"@webiny/api-headless-cms/exports/api/cms/storage.js\";\nimport { CmsStorageModelProvider } from \"@webiny/api-headless-cms/features/shared/abstractions.js\";\nimport { ValueFilterRegistry } from \"@webiny/db-utils\";\nimport {\n FieldFilterPathRegistry,\n FieldFilterValueTransformRegistry,\n FieldFilterCreateRegistry,\n FieldSortingRegistry\n} from \"@webiny/api-headless-cms-storage\";\nimport { listEntries } from \"./queryHelpers.js\";\n\nclass SqlListEntriesImpl implements ListEntriesStorageOperation.Interface {\n private readonly knex: Knex;\n\n public constructor(\n knexClient: KnexClient.Interface,\n private readonly entryTableManager: EntryTableManager.Interface,\n private readonly storageTransformRegistry: StorageTransformRegistry.Interface,\n private readonly storageModelProvider: CmsStorageModelProvider.Interface,\n private readonly pathRegistry: FieldFilterPathRegistry.Interface,\n private readonly transformRegistry: FieldFilterValueTransformRegistry.Interface,\n private readonly filterCreateRegistry: FieldFilterCreateRegistry.Interface,\n private readonly sortingRegistry: FieldSortingRegistry.Interface,\n private readonly valueFilterRegistry: ValueFilterRegistry.Interface\n ) {\n this.knex = knexClient.client;\n }\n\n async execute<T extends CmsEntryValues = CmsEntryValues>(\n model: CmsModel,\n params: CmsEntryStorageOperationsListParams\n ) {\n await this.entryTableManager.ensureTable();\n\n return listEntries<T>(\n {\n knex: this.knex,\n tableName: this.entryTableManager.getTableName(),\n storageModelProvider: this.storageModelProvider,\n storageTransformRegistry: this.storageTransformRegistry,\n pathRegistry: this.pathRegistry,\n transformRegistry: this.transformRegistry,\n filterCreateRegistry: this.filterCreateRegistry,\n sortingRegistry: this.sortingRegistry,\n valueFilterRegistry: this.valueFilterRegistry\n },\n model,\n params\n );\n }\n}\n\nexport const SqlListEntries = ListEntriesStorageOperation.createImplementation({\n implementation: SqlListEntriesImpl,\n dependencies: [\n KnexClient,\n EntryTableManager,\n StorageTransformRegistry,\n CmsStorageModelProvider,\n FieldFilterPathRegistry,\n FieldFilterValueTransformRegistry,\n FieldFilterCreateRegistry,\n FieldSortingRegistry,\n ValueFilterRegistry\n ]\n});\n"],"names":["SqlListEntriesImpl","knexClient","entryTableManager","storageTransformRegistry","storageModelProvider","pathRegistry","transformRegistry","filterCreateRegistry","sortingRegistry","valueFilterRegistry","model","params","listEntries","SqlListEntries","ListEntriesStorageOperation","KnexClient","EntryTableManager","StorageTransformRegistry","CmsStorageModelProvider","FieldFilterPathRegistry","FieldFilterValueTransformRegistry","FieldFilterCreateRegistry","FieldSortingRegistry","ValueFilterRegistry"],"mappings":";;;;;;;;AAoBA,MAAMA;IAGF,YACIC,UAAgC,EACfC,iBAA8C,EAC9CC,wBAA4D,EAC5DC,oBAAuD,EACvDC,YAA+C,EAC/CC,iBAA8D,EAC9DC,oBAAyD,EACzDC,eAA+C,EAC/CC,mBAAkD,CACrE;aARmBP,iBAAiB,GAAjBA;aACAC,wBAAwB,GAAxBA;aACAC,oBAAoB,GAApBA;aACAC,YAAY,GAAZA;aACAC,iBAAiB,GAAjBA;aACAC,oBAAoB,GAApBA;aACAC,eAAe,GAAfA;aACAC,mBAAmB,GAAnBA;QAEjB,IAAI,CAAC,IAAI,GAAGR,WAAW,MAAM;IACjC;IAEA,MAAM,QACFS,KAAe,EACfC,MAA2C,EAC7C;QACE,MAAM,IAAI,CAAC,iBAAiB,CAAC,WAAW;QAExC,OAAOC,YACH;YACI,MAAM,IAAI,CAAC,IAAI;YACf,WAAW,IAAI,CAAC,iBAAiB,CAAC,YAAY;YAC9C,sBAAsB,IAAI,CAAC,oBAAoB;YAC/C,0BAA0B,IAAI,CAAC,wBAAwB;YACvD,cAAc,IAAI,CAAC,YAAY;YAC/B,mBAAmB,IAAI,CAAC,iBAAiB;YACzC,sBAAsB,IAAI,CAAC,oBAAoB;YAC/C,iBAAiB,IAAI,CAAC,eAAe;YACrC,qBAAqB,IAAI,CAAC,mBAAmB;QACjD,GACAF,OACAC;IAER;AACJ;AAEO,MAAME,iBAAiBC,4BAA4B,oBAAoB,CAAC;IAC3E,gBAAgBd;IAChB,cAAc;QACVe;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;KACH;AACL"}
1
+ {"version":3,"file":"operations/entry/SqlListEntries.js","sources":["../../../src/operations/entry/SqlListEntries.ts"],"sourcesContent":["import type { Knex } from \"knex\";\nimport type {\n CmsEntryStorageOperationsListParams,\n CmsEntryValues,\n CmsModel\n} from \"@webiny/api-headless-cms/types/index.js\";\nimport { ListEntriesStorageOperation } from \"@webiny/api-headless-cms/features/shared/storageOperations/entry/ListEntriesStorageOperation.js\";\nimport { KnexClient } from \"@webiny/api-core-sql\";\nimport { EntryTableManager } from \"~/features/entryTableManager/abstractions.js\";\nimport { StorageTransformRegistry } from \"@webiny/api-headless-cms/exports/api/cms/storage.js\";\nimport { CmsStorageModelProvider } from \"@webiny/api-headless-cms/features/shared/abstractions.js\";\nimport { CmsEntrySystemField } from \"@webiny/api-headless-cms/features/contentEntry/EntrySystemField/index.js\";\nimport { ValueFilterRegistry } from \"@webiny/db-utils\";\nimport {\n FieldFilterPathRegistry,\n FieldFilterValueTransformRegistry,\n FieldFilterCreateRegistry,\n FieldSortingRegistry\n} from \"@webiny/api-headless-cms-storage\";\nimport { listEntries } from \"./queryHelpers.js\";\n\nclass SqlListEntriesImpl implements ListEntriesStorageOperation.Interface {\n private readonly knex: Knex;\n\n public constructor(\n knexClient: KnexClient.Interface,\n private readonly entryTableManager: EntryTableManager.Interface,\n private readonly storageTransformRegistry: StorageTransformRegistry.Interface,\n private readonly storageModelProvider: CmsStorageModelProvider.Interface,\n private readonly pathRegistry: FieldFilterPathRegistry.Interface,\n private readonly transformRegistry: FieldFilterValueTransformRegistry.Interface,\n private readonly filterCreateRegistry: FieldFilterCreateRegistry.Interface,\n private readonly sortingRegistry: FieldSortingRegistry.Interface,\n private readonly valueFilterRegistry: ValueFilterRegistry.Interface,\n private readonly entrySystemFields: CmsEntrySystemField.Interface[]\n ) {\n this.knex = knexClient.client;\n }\n\n async execute<T extends CmsEntryValues = CmsEntryValues>(\n model: CmsModel,\n params: CmsEntryStorageOperationsListParams\n ) {\n await this.entryTableManager.ensureTable();\n\n return listEntries<T>(\n {\n knex: this.knex,\n tableName: this.entryTableManager.getTableName(),\n storageModelProvider: this.storageModelProvider,\n storageTransformRegistry: this.storageTransformRegistry,\n pathRegistry: this.pathRegistry,\n transformRegistry: this.transformRegistry,\n filterCreateRegistry: this.filterCreateRegistry,\n sortingRegistry: this.sortingRegistry,\n valueFilterRegistry: this.valueFilterRegistry,\n systemFields: this.entrySystemFields.map(systemField => systemField.field)\n },\n model,\n params\n );\n }\n}\n\nexport const SqlListEntries = ListEntriesStorageOperation.createImplementation({\n implementation: SqlListEntriesImpl,\n dependencies: [\n KnexClient,\n EntryTableManager,\n StorageTransformRegistry,\n CmsStorageModelProvider,\n FieldFilterPathRegistry,\n FieldFilterValueTransformRegistry,\n FieldFilterCreateRegistry,\n FieldSortingRegistry,\n ValueFilterRegistry,\n [CmsEntrySystemField, { multiple: true }]\n ]\n});\n"],"names":["SqlListEntriesImpl","knexClient","entryTableManager","storageTransformRegistry","storageModelProvider","pathRegistry","transformRegistry","filterCreateRegistry","sortingRegistry","valueFilterRegistry","entrySystemFields","model","params","listEntries","systemField","SqlListEntries","ListEntriesStorageOperation","KnexClient","EntryTableManager","StorageTransformRegistry","CmsStorageModelProvider","FieldFilterPathRegistry","FieldFilterValueTransformRegistry","FieldFilterCreateRegistry","FieldSortingRegistry","ValueFilterRegistry","CmsEntrySystemField"],"mappings":";;;;;;;;;AAqBA,MAAMA;IAGF,YACIC,UAAgC,EACfC,iBAA8C,EAC9CC,wBAA4D,EAC5DC,oBAAuD,EACvDC,YAA+C,EAC/CC,iBAA8D,EAC9DC,oBAAyD,EACzDC,eAA+C,EAC/CC,mBAAkD,EAClDC,iBAAkD,CACrE;aATmBR,iBAAiB,GAAjBA;aACAC,wBAAwB,GAAxBA;aACAC,oBAAoB,GAApBA;aACAC,YAAY,GAAZA;aACAC,iBAAiB,GAAjBA;aACAC,oBAAoB,GAApBA;aACAC,eAAe,GAAfA;aACAC,mBAAmB,GAAnBA;aACAC,iBAAiB,GAAjBA;QAEjB,IAAI,CAAC,IAAI,GAAGT,WAAW,MAAM;IACjC;IAEA,MAAM,QACFU,KAAe,EACfC,MAA2C,EAC7C;QACE,MAAM,IAAI,CAAC,iBAAiB,CAAC,WAAW;QAExC,OAAOC,YACH;YACI,MAAM,IAAI,CAAC,IAAI;YACf,WAAW,IAAI,CAAC,iBAAiB,CAAC,YAAY;YAC9C,sBAAsB,IAAI,CAAC,oBAAoB;YAC/C,0BAA0B,IAAI,CAAC,wBAAwB;YACvD,cAAc,IAAI,CAAC,YAAY;YAC/B,mBAAmB,IAAI,CAAC,iBAAiB;YACzC,sBAAsB,IAAI,CAAC,oBAAoB;YAC/C,iBAAiB,IAAI,CAAC,eAAe;YACrC,qBAAqB,IAAI,CAAC,mBAAmB;YAC7C,cAAc,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAACC,CAAAA,cAAeA,YAAY,KAAK;QAC7E,GACAH,OACAC;IAER;AACJ;AAEO,MAAMG,iBAAiBC,4BAA4B,oBAAoB,CAAC;IAC3E,gBAAgBhB;IAChB,cAAc;QACViB;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACA;YAACC;YAAqB;gBAAE,UAAU;YAAK;SAAE;KAC5C;AACL"}
@@ -1,5 +1,5 @@
1
1
  import type { Knex } from "knex";
2
- import type { CmsEntry, CmsEntryStorageOperationsListParams, CmsEntryStorageOperationsListResponse, CmsEntryValues, CmsModel, CmsStorageEntry } from "@webiny/api-headless-cms/types/index.js";
2
+ import type { CmsEntry, CmsEntryStorageOperationsListParams, CmsEntryStorageOperationsListResponse, CmsEntryValues, CmsModel, CmsModelField, CmsStorageEntry } from "@webiny/api-headless-cms/types/index.js";
3
3
  import type { StorageTransformRegistry } from "@webiny/api-headless-cms/exports/api/cms/storage.js";
4
4
  import type { CmsStorageModelProvider } from "@webiny/api-headless-cms/features/shared/abstractions.js";
5
5
  import type { ValueFilterRegistry } from "@webiny/db-utils";
@@ -24,5 +24,7 @@ export interface IListEntriesDeps {
24
24
  filterCreateRegistry: FieldFilterCreateRegistry.Interface;
25
25
  sortingRegistry: FieldSortingRegistry.Interface;
26
26
  valueFilterRegistry: ValueFilterRegistry.Interface;
27
+ /** Fields registered as `CmsEntrySystemField`, filterable under `system`. */
28
+ systemFields: CmsModelField[];
27
29
  }
28
30
  export declare const listEntries: <T extends CmsEntryValues = CmsEntryValues>(deps: IListEntriesDeps, initialModel: CmsModel, params: CmsEntryStorageOperationsListParams) => Promise<CmsEntryStorageOperationsListResponse<CmsEntry<T>>>;
@@ -68,7 +68,8 @@ const listEntries = async (deps, initialModel, params)=>{
68
68
  const modelFields = createFields({
69
69
  pathRegistry: deps.pathRegistry,
70
70
  transformRegistry: deps.transformRegistry,
71
- fields: model.fields
71
+ fields: model.fields,
72
+ systemFields: deps.systemFields
72
73
  });
73
74
  const filteredItems = filter({
74
75
  items: records,
@@ -1 +1 @@
1
- {"version":3,"file":"operations/entry/queryHelpers.js","sources":["../../../src/operations/entry/queryHelpers.ts"],"sourcesContent":["import type { Knex } from \"knex\";\nimport type {\n CmsEntry,\n CmsEntryListWhere,\n CmsEntryStorageOperationsListParams,\n CmsEntryStorageOperationsListResponse,\n CmsEntryValues,\n CmsModel,\n CmsStorageEntry\n} from \"@webiny/api-headless-cms/types/index.js\";\nimport { decodeCursor, encodeCursor } from \"@webiny/utils\";\nimport type { StorageTransformRegistry } from \"@webiny/api-headless-cms/exports/api/cms/storage.js\";\nimport type { CmsStorageModelProvider } from \"@webiny/api-headless-cms/features/shared/abstractions.js\";\nimport type { ValueFilterRegistry } from \"@webiny/db-utils\";\nimport {\n createFields,\n filter,\n sort,\n createStorageTransformCallable\n} from \"@webiny/api-headless-cms-storage\";\nimport type {\n FieldFilterPathRegistry,\n FieldFilterValueTransformRegistry,\n FieldFilterCreateRegistry,\n FieldSortingRegistry\n} from \"@webiny/api-headless-cms-storage\";\nimport type { IEntryRow } from \"./types.js\";\nimport { rowToEntry, mergeEntryLevelMeta } from \"./mappers.js\";\n\nexport const MAX_LIST_LIMIT = 1000000;\n\nexport const createEntryQuery = (knex: Knex, tableName: string): Knex.QueryBuilder<IEntryRow> => {\n return knex<IEntryRow>(tableName);\n};\n\nexport interface IEntryQueryModel {\n tenant: string;\n modelId: string;\n}\n\nexport const createModelEntryQuery = (\n knex: Knex,\n tableName: string,\n model: IEntryQueryModel\n): Knex.QueryBuilder<IEntryRow> => {\n return createEntryQuery(knex, tableName)\n .where(\"tenant\", model.tenant)\n .andWhere(\"modelId\", model.modelId);\n};\n\nexport const syncEntryToLatest = async (\n knex: Knex,\n tableName: string,\n model: IEntryQueryModel,\n entry: CmsStorageEntry,\n extraPatch?: (latest: CmsEntry) => void\n): Promise<void> => {\n if (entry.isLatest) {\n return;\n }\n\n const latestRow = await createModelEntryQuery(knex, tableName, model)\n .andWhere(\"entryId\", entry.entryId)\n .andWhere(\"isLatest\", true)\n .first();\n\n if (!latestRow) {\n return;\n }\n\n const latest = JSON.parse(latestRow.data);\n const merged = mergeEntryLevelMeta(entry, latest);\n\n if (extraPatch) {\n extraPatch(merged);\n }\n\n await createModelEntryQuery(knex, tableName, model)\n .andWhere(\"id\", latestRow.id)\n .update({ data: JSON.stringify(merged) });\n};\n\nexport const patchAllEntryRevisions = async (\n knex: Knex,\n tableName: string,\n model: IEntryQueryModel,\n entryId: string,\n patch: (entry: CmsEntry) => void,\n columnUpdates?: Partial<IEntryRow>\n): Promise<void> => {\n const rows = await createModelEntryQuery(knex, tableName, model).andWhere(\"entryId\", entryId);\n\n if (rows.length === 0) {\n return;\n }\n\n const cases: Array<{ id: string; data: string }> = rows.map((row: IEntryRow) => {\n const parsed = JSON.parse(row.data);\n patch(parsed);\n return { id: row.id, data: JSON.stringify(parsed) };\n });\n\n const update: Record<string, unknown> = {\n data: knex.raw(\n `CASE id ${cases.map(() => \"WHEN ? THEN ?\").join(\" \")} END`,\n cases.flatMap((c: { id: string; data: string }) => [c.id, c.data])\n ),\n ...columnUpdates\n };\n\n await createModelEntryQuery(knex, tableName, model).andWhere(\"entryId\", entryId).update(update);\n};\n\nexport interface IListEntriesDeps {\n knex: Knex;\n tableName: string;\n storageModelProvider: CmsStorageModelProvider.Interface;\n storageTransformRegistry: StorageTransformRegistry.Interface;\n pathRegistry: FieldFilterPathRegistry.Interface;\n transformRegistry: FieldFilterValueTransformRegistry.Interface;\n filterCreateRegistry: FieldFilterCreateRegistry.Interface;\n sortingRegistry: FieldSortingRegistry.Interface;\n valueFilterRegistry: ValueFilterRegistry.Interface;\n}\n\nexport const listEntries = async <T extends CmsEntryValues = CmsEntryValues>(\n deps: IListEntriesDeps,\n initialModel: CmsModel,\n params: CmsEntryStorageOperationsListParams\n): Promise<CmsEntryStorageOperationsListResponse<CmsEntry<T>>> => {\n const model = deps.storageModelProvider.getModel(initialModel);\n const {\n where: initialWhere,\n sort: sortBy,\n search,\n fields: searchFields,\n limit: initialLimit,\n after\n } = params;\n\n const limit =\n initialLimit <= 0 || initialLimit >= MAX_LIST_LIMIT ? MAX_LIST_LIMIT : initialLimit;\n\n const qb = createEntryQuery(deps.knex, deps.tableName)\n .where(\"tenant\", model.tenant)\n .andWhere(\"modelId\", model.modelId);\n\n if (initialWhere.entryId) {\n qb.andWhere(\"entryId\", initialWhere.entryId);\n } else if (initialWhere.published === true) {\n qb.andWhere(\"isPublished\", true);\n } else {\n qb.andWhere(\"isLatest\", true);\n }\n\n if (initialWhere.wbyDeleted !== undefined) {\n qb.andWhere(\"wbyDeleted\", initialWhere.wbyDeleted);\n } else {\n qb.andWhere(\"wbyDeleted\", false);\n }\n\n const rows: IEntryRow[] = await qb;\n\n if (rows.length === 0) {\n return {\n hasMoreItems: false,\n totalCount: 0,\n cursor: null,\n items: [] as CmsEntry<T>[]\n };\n }\n\n const fromStorage = createStorageTransformCallable(deps.storageTransformRegistry, model);\n\n const records = await Promise.all(\n rows.map(async row => {\n const entry = rowToEntry(row) as CmsStorageEntry;\n\n for (const field of model.fields) {\n entry.values[field.fieldId] = await fromStorage(field, entry.values[field.fieldId]);\n }\n\n return entry as CmsEntry<T>;\n })\n );\n\n const where: Partial<CmsEntryListWhere> = { ...initialWhere };\n delete where[\"published\"];\n delete where[\"latest\"];\n delete where[\"entryId\"];\n delete where[\"wbyDeleted\"];\n\n const modelFields = createFields({\n pathRegistry: deps.pathRegistry,\n transformRegistry: deps.transformRegistry,\n fields: model.fields\n });\n\n const filteredItems = filter<T>({\n items: records,\n where,\n filterCreateRegistry: deps.filterCreateRegistry,\n transformRegistry: deps.transformRegistry,\n fields: modelFields,\n fullTextSearch: {\n term: search,\n fields: searchFields || []\n },\n valueFilterRegistry: deps.valueFilterRegistry\n });\n\n const totalCount = filteredItems.length;\n\n const sortedItems = sort<T>({\n model,\n items: filteredItems,\n sort: sortBy,\n fields: modelFields,\n sortingRegistry: deps.sortingRegistry\n });\n\n const start = parseInt((decodeCursor(after) as string) || \"0\") || 0;\n const hasMoreItems = totalCount > start + limit;\n const slicedItems = sortedItems.slice(start, start + limit);\n const cursor = encodeCursor(`${start + limit}`);\n\n return {\n hasMoreItems,\n totalCount,\n cursor,\n items: slicedItems\n };\n};\n"],"names":["MAX_LIST_LIMIT","createEntryQuery","knex","tableName","createModelEntryQuery","model","syncEntryToLatest","entry","extraPatch","latestRow","latest","JSON","merged","mergeEntryLevelMeta","patchAllEntryRevisions","entryId","patch","columnUpdates","rows","cases","row","parsed","update","c","listEntries","deps","initialModel","params","initialWhere","sortBy","search","searchFields","initialLimit","after","limit","qb","undefined","fromStorage","createStorageTransformCallable","records","Promise","rowToEntry","field","where","modelFields","createFields","filteredItems","filter","totalCount","sortedItems","sort","start","parseInt","decodeCursor","hasMoreItems","slicedItems","cursor","encodeCursor"],"mappings":"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"}
1
+ {"version":3,"file":"operations/entry/queryHelpers.js","sources":["../../../src/operations/entry/queryHelpers.ts"],"sourcesContent":["import type { Knex } from \"knex\";\nimport type {\n CmsEntry,\n CmsEntryListWhere,\n CmsEntryStorageOperationsListParams,\n CmsEntryStorageOperationsListResponse,\n CmsEntryValues,\n CmsModel,\n CmsModelField,\n CmsStorageEntry\n} from \"@webiny/api-headless-cms/types/index.js\";\nimport { decodeCursor, encodeCursor } from \"@webiny/utils\";\nimport type { StorageTransformRegistry } from \"@webiny/api-headless-cms/exports/api/cms/storage.js\";\nimport type { CmsStorageModelProvider } from \"@webiny/api-headless-cms/features/shared/abstractions.js\";\nimport type { ValueFilterRegistry } from \"@webiny/db-utils\";\nimport {\n createFields,\n filter,\n sort,\n createStorageTransformCallable\n} from \"@webiny/api-headless-cms-storage\";\nimport type {\n FieldFilterPathRegistry,\n FieldFilterValueTransformRegistry,\n FieldFilterCreateRegistry,\n FieldSortingRegistry\n} from \"@webiny/api-headless-cms-storage\";\nimport type { IEntryRow } from \"./types.js\";\nimport { rowToEntry, mergeEntryLevelMeta } from \"./mappers.js\";\n\nexport const MAX_LIST_LIMIT = 1000000;\n\nexport const createEntryQuery = (knex: Knex, tableName: string): Knex.QueryBuilder<IEntryRow> => {\n return knex<IEntryRow>(tableName);\n};\n\nexport interface IEntryQueryModel {\n tenant: string;\n modelId: string;\n}\n\nexport const createModelEntryQuery = (\n knex: Knex,\n tableName: string,\n model: IEntryQueryModel\n): Knex.QueryBuilder<IEntryRow> => {\n return createEntryQuery(knex, tableName)\n .where(\"tenant\", model.tenant)\n .andWhere(\"modelId\", model.modelId);\n};\n\nexport const syncEntryToLatest = async (\n knex: Knex,\n tableName: string,\n model: IEntryQueryModel,\n entry: CmsStorageEntry,\n extraPatch?: (latest: CmsEntry) => void\n): Promise<void> => {\n if (entry.isLatest) {\n return;\n }\n\n const latestRow = await createModelEntryQuery(knex, tableName, model)\n .andWhere(\"entryId\", entry.entryId)\n .andWhere(\"isLatest\", true)\n .first();\n\n if (!latestRow) {\n return;\n }\n\n const latest = JSON.parse(latestRow.data);\n const merged = mergeEntryLevelMeta(entry, latest);\n\n if (extraPatch) {\n extraPatch(merged);\n }\n\n await createModelEntryQuery(knex, tableName, model)\n .andWhere(\"id\", latestRow.id)\n .update({ data: JSON.stringify(merged) });\n};\n\nexport const patchAllEntryRevisions = async (\n knex: Knex,\n tableName: string,\n model: IEntryQueryModel,\n entryId: string,\n patch: (entry: CmsEntry) => void,\n columnUpdates?: Partial<IEntryRow>\n): Promise<void> => {\n const rows = await createModelEntryQuery(knex, tableName, model).andWhere(\"entryId\", entryId);\n\n if (rows.length === 0) {\n return;\n }\n\n const cases: Array<{ id: string; data: string }> = rows.map((row: IEntryRow) => {\n const parsed = JSON.parse(row.data);\n patch(parsed);\n return { id: row.id, data: JSON.stringify(parsed) };\n });\n\n const update: Record<string, unknown> = {\n data: knex.raw(\n `CASE id ${cases.map(() => \"WHEN ? THEN ?\").join(\" \")} END`,\n cases.flatMap((c: { id: string; data: string }) => [c.id, c.data])\n ),\n ...columnUpdates\n };\n\n await createModelEntryQuery(knex, tableName, model).andWhere(\"entryId\", entryId).update(update);\n};\n\nexport interface IListEntriesDeps {\n knex: Knex;\n tableName: string;\n storageModelProvider: CmsStorageModelProvider.Interface;\n storageTransformRegistry: StorageTransformRegistry.Interface;\n pathRegistry: FieldFilterPathRegistry.Interface;\n transformRegistry: FieldFilterValueTransformRegistry.Interface;\n filterCreateRegistry: FieldFilterCreateRegistry.Interface;\n sortingRegistry: FieldSortingRegistry.Interface;\n valueFilterRegistry: ValueFilterRegistry.Interface;\n /** Fields registered as `CmsEntrySystemField`, filterable under `system`. */\n systemFields: CmsModelField[];\n}\n\nexport const listEntries = async <T extends CmsEntryValues = CmsEntryValues>(\n deps: IListEntriesDeps,\n initialModel: CmsModel,\n params: CmsEntryStorageOperationsListParams\n): Promise<CmsEntryStorageOperationsListResponse<CmsEntry<T>>> => {\n const model = deps.storageModelProvider.getModel(initialModel);\n const {\n where: initialWhere,\n sort: sortBy,\n search,\n fields: searchFields,\n limit: initialLimit,\n after\n } = params;\n\n const limit =\n initialLimit <= 0 || initialLimit >= MAX_LIST_LIMIT ? MAX_LIST_LIMIT : initialLimit;\n\n const qb = createEntryQuery(deps.knex, deps.tableName)\n .where(\"tenant\", model.tenant)\n .andWhere(\"modelId\", model.modelId);\n\n if (initialWhere.entryId) {\n qb.andWhere(\"entryId\", initialWhere.entryId);\n } else if (initialWhere.published === true) {\n qb.andWhere(\"isPublished\", true);\n } else {\n qb.andWhere(\"isLatest\", true);\n }\n\n if (initialWhere.wbyDeleted !== undefined) {\n qb.andWhere(\"wbyDeleted\", initialWhere.wbyDeleted);\n } else {\n qb.andWhere(\"wbyDeleted\", false);\n }\n\n const rows: IEntryRow[] = await qb;\n\n if (rows.length === 0) {\n return {\n hasMoreItems: false,\n totalCount: 0,\n cursor: null,\n items: [] as CmsEntry<T>[]\n };\n }\n\n const fromStorage = createStorageTransformCallable(deps.storageTransformRegistry, model);\n\n const records = await Promise.all(\n rows.map(async row => {\n const entry = rowToEntry(row) as CmsStorageEntry;\n\n for (const field of model.fields) {\n entry.values[field.fieldId] = await fromStorage(field, entry.values[field.fieldId]);\n }\n\n return entry as CmsEntry<T>;\n })\n );\n\n const where: Partial<CmsEntryListWhere> = { ...initialWhere };\n delete where[\"published\"];\n delete where[\"latest\"];\n delete where[\"entryId\"];\n delete where[\"wbyDeleted\"];\n\n const modelFields = createFields({\n pathRegistry: deps.pathRegistry,\n transformRegistry: deps.transformRegistry,\n fields: model.fields,\n systemFields: deps.systemFields\n });\n\n const filteredItems = filter<T>({\n items: records,\n where,\n filterCreateRegistry: deps.filterCreateRegistry,\n transformRegistry: deps.transformRegistry,\n fields: modelFields,\n fullTextSearch: {\n term: search,\n fields: searchFields || []\n },\n valueFilterRegistry: deps.valueFilterRegistry\n });\n\n const totalCount = filteredItems.length;\n\n const sortedItems = sort<T>({\n model,\n items: filteredItems,\n sort: sortBy,\n fields: modelFields,\n sortingRegistry: deps.sortingRegistry\n });\n\n const start = parseInt((decodeCursor(after) as string) || \"0\") || 0;\n const hasMoreItems = totalCount > start + limit;\n const slicedItems = sortedItems.slice(start, start + limit);\n const cursor = encodeCursor(`${start + limit}`);\n\n return {\n hasMoreItems,\n totalCount,\n cursor,\n items: slicedItems\n };\n};\n"],"names":["MAX_LIST_LIMIT","createEntryQuery","knex","tableName","createModelEntryQuery","model","syncEntryToLatest","entry","extraPatch","latestRow","latest","JSON","merged","mergeEntryLevelMeta","patchAllEntryRevisions","entryId","patch","columnUpdates","rows","cases","row","parsed","update","c","listEntries","deps","initialModel","params","initialWhere","sortBy","search","searchFields","initialLimit","after","limit","qb","undefined","fromStorage","createStorageTransformCallable","records","Promise","rowToEntry","field","where","modelFields","createFields","filteredItems","filter","totalCount","sortedItems","sort","start","parseInt","decodeCursor","hasMoreItems","slicedItems","cursor","encodeCursor"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webiny/api-headless-cms-sql",
3
- "version": "0.0.0-unstable.7c2def32a7",
3
+ "version": "0.0.0-unstable.9609e4e0c9",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": "./index.js",
@@ -22,25 +22,25 @@
22
22
  "description": "SQL storage operations for Headless CMS API.",
23
23
  "license": "MIT",
24
24
  "dependencies": {
25
- "@webiny/api-core-sql": "0.0.0-unstable.7c2def32a7",
26
- "@webiny/api-headless-cms": "0.0.0-unstable.7c2def32a7",
27
- "@webiny/api-headless-cms-storage": "0.0.0-unstable.7c2def32a7",
28
- "@webiny/db-utils": "0.0.0-unstable.7c2def32a7",
29
- "@webiny/feature": "0.0.0-unstable.7c2def32a7",
30
- "@webiny/handler": "0.0.0-unstable.7c2def32a7",
31
- "@webiny/utils": "0.0.0-unstable.7c2def32a7",
25
+ "@webiny/api-core-sql": "0.0.0-unstable.9609e4e0c9",
26
+ "@webiny/api-headless-cms": "0.0.0-unstable.9609e4e0c9",
27
+ "@webiny/api-headless-cms-storage": "0.0.0-unstable.9609e4e0c9",
28
+ "@webiny/db-utils": "0.0.0-unstable.9609e4e0c9",
29
+ "@webiny/feature": "0.0.0-unstable.9609e4e0c9",
30
+ "@webiny/handler": "0.0.0-unstable.9609e4e0c9",
31
+ "@webiny/utils": "0.0.0-unstable.9609e4e0c9",
32
32
  "knex": "3.3.0"
33
33
  },
34
34
  "devDependencies": {
35
- "@electric-sql/pglite": "0.5.5",
36
- "@electric-sql/pglite-socket": "0.2.8",
37
- "@webiny/api-core": "0.0.0-unstable.7c2def32a7",
38
- "@webiny/build-tools": "0.0.0-unstable.7c2def32a7",
35
+ "@electric-sql/pglite": "0.5.13",
36
+ "@electric-sql/pglite-socket": "0.2.16",
37
+ "@webiny/api-core": "0.0.0-unstable.9609e4e0c9",
38
+ "@webiny/build-tools": "0.0.0-unstable.9609e4e0c9",
39
39
  "@webiny/di": "2.0.0",
40
40
  "better-sqlite3": "13.0.3",
41
- "pg": "8.23.0",
41
+ "pg": "8.23.1",
42
42
  "typescript": "7.0.2",
43
- "vitest": "4.1.11"
43
+ "vitest": "5.0.5"
44
44
  },
45
45
  "publishConfig": {
46
46
  "access": "public"