@webiny/api-headless-cms-sql 0.0.0-unstable.9f53ea597d

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 (70) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +11 -0
  3. package/features/entryTableManager/EntryTableManager.d.ts +17 -0
  4. package/features/entryTableManager/EntryTableManager.js +63 -0
  5. package/features/entryTableManager/EntryTableManager.js.map +1 -0
  6. package/features/entryTableManager/abstractions.d.ts +9 -0
  7. package/features/entryTableManager/abstractions.js +5 -0
  8. package/features/entryTableManager/abstractions.js.map +1 -0
  9. package/features/entryTableManager/feature.d.ts +4 -0
  10. package/features/entryTableManager/feature.js +11 -0
  11. package/features/entryTableManager/feature.js.map +1 -0
  12. package/features/groupSchemaManager/GroupSchemaManager.d.ts +13 -0
  13. package/features/groupSchemaManager/GroupSchemaManager.js +44 -0
  14. package/features/groupSchemaManager/GroupSchemaManager.js.map +1 -0
  15. package/features/groupSchemaManager/abstractions.d.ts +8 -0
  16. package/features/groupSchemaManager/abstractions.js +5 -0
  17. package/features/groupSchemaManager/abstractions.js.map +1 -0
  18. package/features/groupSchemaManager/feature.d.ts +4 -0
  19. package/features/groupSchemaManager/feature.js +11 -0
  20. package/features/groupSchemaManager/feature.js.map +1 -0
  21. package/features/modelSchemaManager/ModelSchemaManager.d.ts +13 -0
  22. package/features/modelSchemaManager/ModelSchemaManager.js +54 -0
  23. package/features/modelSchemaManager/ModelSchemaManager.js.map +1 -0
  24. package/features/modelSchemaManager/abstractions.d.ts +8 -0
  25. package/features/modelSchemaManager/abstractions.js +5 -0
  26. package/features/modelSchemaManager/abstractions.js.map +1 -0
  27. package/features/modelSchemaManager/feature.d.ts +4 -0
  28. package/features/modelSchemaManager/feature.js +11 -0
  29. package/features/modelSchemaManager/feature.js.map +1 -0
  30. package/features/tableNameResolver/TableNameResolver.d.ts +13 -0
  31. package/features/tableNameResolver/TableNameResolver.js +24 -0
  32. package/features/tableNameResolver/TableNameResolver.js.map +1 -0
  33. package/features/tableNameResolver/abstractions.d.ts +16 -0
  34. package/features/tableNameResolver/abstractions.js +6 -0
  35. package/features/tableNameResolver/abstractions.js.map +1 -0
  36. package/features/tableNameResolver/feature.d.ts +4 -0
  37. package/features/tableNameResolver/feature.js +11 -0
  38. package/features/tableNameResolver/feature.js.map +1 -0
  39. package/index.d.ts +8 -0
  40. package/index.js +81 -0
  41. package/index.js.map +1 -0
  42. package/operations/entry/index.d.ts +13 -0
  43. package/operations/entry/index.js +362 -0
  44. package/operations/entry/index.js.map +1 -0
  45. package/operations/entry/mappers.d.ts +5 -0
  46. package/operations/entry/mappers.js +26 -0
  47. package/operations/entry/mappers.js.map +1 -0
  48. package/operations/entry/types.d.ts +11 -0
  49. package/operations/entry/types.js +0 -0
  50. package/operations/group/index.d.ts +5 -0
  51. package/operations/group/index.js +58 -0
  52. package/operations/group/index.js.map +1 -0
  53. package/operations/group/mappers.d.ts +4 -0
  54. package/operations/group/mappers.js +32 -0
  55. package/operations/group/mappers.js.map +1 -0
  56. package/operations/group/types.d.ts +18 -0
  57. package/operations/group/types.js +17 -0
  58. package/operations/group/types.js.map +1 -0
  59. package/operations/model/index.d.ts +5 -0
  60. package/operations/model/index.js +50 -0
  61. package/operations/model/index.js.map +1 -0
  62. package/operations/model/mappers.d.ts +4 -0
  63. package/operations/model/mappers.js +52 -0
  64. package/operations/model/mappers.js.map +1 -0
  65. package/operations/model/types.d.ts +28 -0
  66. package/operations/model/types.js +27 -0
  67. package/operations/model/types.js.map +1 -0
  68. package/package.json +48 -0
  69. package/types.d.ts +10 -0
  70. package/types.js +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"operations/group/mappers.js","sources":["../../../src/operations/group/mappers.ts"],"sourcesContent":["import type { CmsGroup } from \"@webiny/api-headless-cms/types/index.js\";\nimport type { IGroupRow } from \"./types.js\";\n\nexport const groupToRow = (group: CmsGroup): IGroupRow => {\n return {\n id: group.id,\n name: group.name,\n slug: group.slug,\n tenant: group.tenant,\n description: group.description ?? null,\n icon: group.icon ? JSON.stringify(group.icon) : null,\n createdBy_id: group.createdBy?.id ?? null,\n createdBy_displayName: group.createdBy?.displayName ?? null,\n createdBy_type: group.createdBy?.type ?? null,\n createdBy: group.createdBy ? JSON.stringify(group.createdBy) : null,\n createdOn: group.createdOn ?? null,\n savedOn: group.savedOn ?? null,\n isPrivate: group.isPrivate ?? false,\n isPlugin: group.isPlugin ?? false\n };\n};\n\nexport const rowToGroup = (row: IGroupRow): CmsGroup => {\n return {\n id: row.id,\n name: row.name,\n slug: row.slug,\n tenant: row.tenant,\n description: row.description || null,\n icon: row.icon ? JSON.parse(row.icon) : null,\n createdBy: row.createdBy ? JSON.parse(row.createdBy) : undefined,\n createdOn: row.createdOn ?? undefined,\n savedOn: row.savedOn ?? undefined,\n isPrivate: row.isPrivate,\n isPlugin: row.isPlugin\n };\n};\n"],"names":["groupToRow","group","JSON","rowToGroup","row","undefined"],"mappings":"AAGO,MAAMA,aAAa,CAACC,QAChB;QACH,IAAIA,MAAM,EAAE;QACZ,MAAMA,MAAM,IAAI;QAChB,MAAMA,MAAM,IAAI;QAChB,QAAQA,MAAM,MAAM;QACpB,aAAaA,MAAM,WAAW,IAAI;QAClC,MAAMA,MAAM,IAAI,GAAGC,KAAK,SAAS,CAACD,MAAM,IAAI,IAAI;QAChD,cAAcA,MAAM,SAAS,EAAE,MAAM;QACrC,uBAAuBA,MAAM,SAAS,EAAE,eAAe;QACvD,gBAAgBA,MAAM,SAAS,EAAE,QAAQ;QACzC,WAAWA,MAAM,SAAS,GAAGC,KAAK,SAAS,CAACD,MAAM,SAAS,IAAI;QAC/D,WAAWA,MAAM,SAAS,IAAI;QAC9B,SAASA,MAAM,OAAO,IAAI;QAC1B,WAAWA,MAAM,SAAS,IAAI;QAC9B,UAAUA,MAAM,QAAQ,IAAI;IAChC;AAGG,MAAME,aAAa,CAACC,MAChB;QACH,IAAIA,IAAI,EAAE;QACV,MAAMA,IAAI,IAAI;QACd,MAAMA,IAAI,IAAI;QACd,QAAQA,IAAI,MAAM;QAClB,aAAaA,IAAI,WAAW,IAAI;QAChC,MAAMA,IAAI,IAAI,GAAGF,KAAK,KAAK,CAACE,IAAI,IAAI,IAAI;QACxC,WAAWA,IAAI,SAAS,GAAGF,KAAK,KAAK,CAACE,IAAI,SAAS,IAAIC;QACvD,WAAWD,IAAI,SAAS,IAAIC;QAC5B,SAASD,IAAI,OAAO,IAAIC;QACxB,WAAWD,IAAI,SAAS;QACxB,UAAUA,IAAI,QAAQ;IAC1B"}
@@ -0,0 +1,18 @@
1
+ import type { CmsGroup } from "@webiny/api-headless-cms/types/index.js";
2
+ export interface IGroupRow {
3
+ id: string;
4
+ name: string;
5
+ slug: string;
6
+ tenant: string;
7
+ description: string | null;
8
+ icon: string | null;
9
+ createdBy_id: string | null;
10
+ createdBy_displayName: string | null;
11
+ createdBy_type: string | null;
12
+ createdBy: string | null;
13
+ createdOn: string | null;
14
+ savedOn: string | null;
15
+ isPrivate: boolean;
16
+ isPlugin: boolean;
17
+ }
18
+ export declare const GROUP_COLUMNS: (keyof CmsGroup)[];
@@ -0,0 +1,17 @@
1
+ const GROUP_COLUMN_MAP = {
2
+ id: true,
3
+ name: true,
4
+ slug: true,
5
+ tenant: true,
6
+ description: true,
7
+ icon: true,
8
+ createdBy: true,
9
+ createdOn: true,
10
+ savedOn: true,
11
+ isPrivate: true,
12
+ isPlugin: true
13
+ };
14
+ const GROUP_COLUMNS = Object.keys(GROUP_COLUMN_MAP);
15
+ export { GROUP_COLUMNS };
16
+
17
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"operations/group/types.js","sources":["../../../src/operations/group/types.ts"],"sourcesContent":["import type { CmsGroup } from \"@webiny/api-headless-cms/types/index.js\";\n\n/* SQL row representation of CmsGroup. */\nexport interface IGroupRow {\n id: string;\n name: string;\n slug: string;\n tenant: string;\n description: string | null;\n icon: string | null;\n /* Filterable identity columns. */\n createdBy_id: string | null;\n createdBy_displayName: string | null;\n createdBy_type: string | null;\n /* Full identity as JSON for extensibility. */\n createdBy: string | null;\n createdOn: string | null;\n savedOn: string | null;\n isPrivate: boolean;\n isPlugin: boolean;\n}\n\n/* Validated against CmsGroup — TypeScript errors if CmsGroup gains a new field. */\nconst GROUP_COLUMN_MAP: Record<keyof CmsGroup, true> = {\n id: true,\n name: true,\n slug: true,\n tenant: true,\n description: true,\n icon: true,\n createdBy: true,\n createdOn: true,\n savedOn: true,\n isPrivate: true,\n isPlugin: true\n};\n\nexport const GROUP_COLUMNS = Object.keys(GROUP_COLUMN_MAP) as (keyof CmsGroup)[];\n"],"names":["GROUP_COLUMN_MAP","GROUP_COLUMNS","Object"],"mappings":"AAuBA,MAAMA,mBAAiD;IACnD,IAAI;IACJ,MAAM;IACN,MAAM;IACN,QAAQ;IACR,aAAa;IACb,MAAM;IACN,WAAW;IACX,WAAW;IACX,SAAS;IACT,WAAW;IACX,UAAU;AACd;AAEO,MAAMC,gBAAgBC,OAAO,IAAI,CAACF"}
@@ -0,0 +1,5 @@
1
+ import type { CmsModelStorageOperations } from "@webiny/api-headless-cms/types/index.js";
2
+ import { TableNameResolver } from "../../features/tableNameResolver/abstractions.js";
3
+ import { ModelSchemaManager } from "../../features/modelSchemaManager/abstractions.js";
4
+ import { KnexClient } from "@webiny/api-core-sql";
5
+ export declare const createModelsStorageOperations: (knex: KnexClient.Interface, tableNameResolver: TableNameResolver.Interface, modelSchemaManager: ModelSchemaManager.Interface) => CmsModelStorageOperations;
@@ -0,0 +1,50 @@
1
+ import { modelToRow, rowToModel } from "./mappers.js";
2
+ const createModelsStorageOperations = (knex, tableNameResolver, modelSchemaManager)=>{
3
+ const tableName = tableNameResolver.resolve("models");
4
+ const ensureSchema = async ()=>{
5
+ await modelSchemaManager.ensure(tableName);
6
+ };
7
+ const query = ()=>knex.client(tableName);
8
+ const get = async (params)=>{
9
+ await ensureSchema();
10
+ const row = await query().where("modelId", params.modelId).where("tenant", params.tenant).first();
11
+ if (!row) return null;
12
+ return rowToModel(row);
13
+ };
14
+ const list = async (params)=>{
15
+ await ensureSchema();
16
+ const { where } = params;
17
+ const qb = query().where("tenant", where.tenant);
18
+ qb.orderBy("modelId", "asc");
19
+ const rows = await qb.select();
20
+ return rows.map(rowToModel);
21
+ };
22
+ const create = async (params)=>{
23
+ const model = params.model;
24
+ const row = modelToRow(model);
25
+ await ensureSchema();
26
+ await query().insert(row);
27
+ return model;
28
+ };
29
+ const update = async (params)=>{
30
+ const model = params.model;
31
+ const row = modelToRow(model);
32
+ await ensureSchema();
33
+ await query().where("modelId", model.modelId).update(row);
34
+ return model;
35
+ };
36
+ const deleteModel = async (params)=>{
37
+ await ensureSchema();
38
+ await query().where("modelId", params.model.modelId).delete();
39
+ };
40
+ return {
41
+ get,
42
+ list,
43
+ create,
44
+ update,
45
+ delete: deleteModel
46
+ };
47
+ };
48
+ export { createModelsStorageOperations };
49
+
50
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"operations/model/index.js","sources":["../../../src/operations/model/index.ts"],"sourcesContent":["import type {\n CmsModelStorageOperations,\n CmsModelStorageOperationsCreateParams,\n CmsModelStorageOperationsDeleteParams,\n CmsModelStorageOperationsGetParams,\n CmsModelStorageOperationsListParams,\n CmsModelStorageOperationsUpdateParams,\n StorageCmsModel\n} from \"@webiny/api-headless-cms/types/index.js\";\nimport type { IModelRow } from \"./types.js\";\nimport { TableNameResolver } from \"~/features/tableNameResolver/abstractions.js\";\nimport { ModelSchemaManager } from \"~/features/modelSchemaManager/abstractions.js\";\nimport { modelToRow, rowToModel } from \"./mappers.js\";\nimport { KnexClient } from \"@webiny/api-core-sql\";\n\nexport const createModelsStorageOperations = (\n knex: KnexClient.Interface,\n tableNameResolver: TableNameResolver.Interface,\n modelSchemaManager: ModelSchemaManager.Interface\n): CmsModelStorageOperations => {\n const tableName = tableNameResolver.resolve(\"models\");\n\n const ensureSchema = async () => {\n await modelSchemaManager.ensure(tableName);\n };\n\n const query = () => {\n return knex.client<IModelRow>(tableName);\n };\n\n const get = async (\n params: CmsModelStorageOperationsGetParams\n ): Promise<StorageCmsModel | null> => {\n await ensureSchema();\n\n const row = await query()\n .where(\"modelId\", params.modelId)\n .where(\"tenant\", params.tenant)\n .first();\n\n if (!row) {\n return null;\n }\n\n return rowToModel(row);\n };\n\n const list = async (\n params: CmsModelStorageOperationsListParams\n ): Promise<StorageCmsModel[]> => {\n await ensureSchema();\n\n const { where } = params;\n const qb = query()\n // We always need to filter by tenant.\n .where(\"tenant\", where.tenant);\n\n /* Default sort by modelId ascending (alphabetical), matching DDB sort key behavior. */\n qb.orderBy(\"modelId\", \"asc\");\n\n const rows = await qb.select<IModelRow[]>();\n\n return rows.map(rowToModel);\n };\n\n const create = async (\n params: CmsModelStorageOperationsCreateParams\n ): Promise<StorageCmsModel> => {\n const model = params.model;\n const row = modelToRow(model);\n\n await ensureSchema();\n await query().insert(row);\n\n return model;\n };\n\n const update = async (\n params: CmsModelStorageOperationsUpdateParams\n ): Promise<StorageCmsModel> => {\n const model = params.model;\n const row = modelToRow(model);\n\n await ensureSchema();\n await query().where(\"modelId\", model.modelId).update(row);\n\n return model;\n };\n\n const deleteModel = async (params: CmsModelStorageOperationsDeleteParams): Promise<void> => {\n await ensureSchema();\n await query().where(\"modelId\", params.model.modelId).delete();\n };\n\n return {\n get,\n list,\n create,\n update,\n delete: deleteModel\n };\n};\n"],"names":["createModelsStorageOperations","knex","tableNameResolver","modelSchemaManager","tableName","ensureSchema","query","get","params","row","rowToModel","list","where","qb","rows","create","model","modelToRow","update","deleteModel"],"mappings":";AAeO,MAAMA,gCAAgC,CACzCC,MACAC,mBACAC;IAEA,MAAMC,YAAYF,kBAAkB,OAAO,CAAC;IAE5C,MAAMG,eAAe;QACjB,MAAMF,mBAAmB,MAAM,CAACC;IACpC;IAEA,MAAME,QAAQ,IACHL,KAAK,MAAM,CAAYG;IAGlC,MAAMG,MAAM,OACRC;QAEA,MAAMH;QAEN,MAAMI,MAAM,MAAMH,QACb,KAAK,CAAC,WAAWE,OAAO,OAAO,EAC/B,KAAK,CAAC,UAAUA,OAAO,MAAM,EAC7B,KAAK;QAEV,IAAI,CAACC,KACD,OAAO;QAGX,OAAOC,WAAWD;IACtB;IAEA,MAAME,OAAO,OACTH;QAEA,MAAMH;QAEN,MAAM,EAAEO,KAAK,EAAE,GAAGJ;QAClB,MAAMK,KAAKP,QAEN,KAAK,CAAC,UAAUM,MAAM,MAAM;QAGjCC,GAAG,OAAO,CAAC,WAAW;QAEtB,MAAMC,OAAO,MAAMD,GAAG,MAAM;QAE5B,OAAOC,KAAK,GAAG,CAACJ;IACpB;IAEA,MAAMK,SAAS,OACXP;QAEA,MAAMQ,QAAQR,OAAO,KAAK;QAC1B,MAAMC,MAAMQ,WAAWD;QAEvB,MAAMX;QACN,MAAMC,QAAQ,MAAM,CAACG;QAErB,OAAOO;IACX;IAEA,MAAME,SAAS,OACXV;QAEA,MAAMQ,QAAQR,OAAO,KAAK;QAC1B,MAAMC,MAAMQ,WAAWD;QAEvB,MAAMX;QACN,MAAMC,QAAQ,KAAK,CAAC,WAAWU,MAAM,OAAO,EAAE,MAAM,CAACP;QAErD,OAAOO;IACX;IAEA,MAAMG,cAAc,OAAOX;QACvB,MAAMH;QACN,MAAMC,QAAQ,KAAK,CAAC,WAAWE,OAAO,KAAK,CAAC,OAAO,EAAE,MAAM;IAC/D;IAEA,OAAO;QACHD;QACAI;QACAI;QACAG;QACA,QAAQC;IACZ;AACJ"}
@@ -0,0 +1,4 @@
1
+ import type { StorageCmsModel } from "@webiny/api-headless-cms/types/index.js";
2
+ import type { IModelRow } from "./types.js";
3
+ export declare const modelToRow: (model: StorageCmsModel) => IModelRow;
4
+ export declare const rowToModel: (row: IModelRow) => StorageCmsModel;
@@ -0,0 +1,52 @@
1
+ const modelToRow = (model)=>({
2
+ tenant: model.tenant,
3
+ modelId: model.modelId,
4
+ name: model.name,
5
+ singularApiName: model.singularApiName,
6
+ pluralApiName: model.pluralApiName,
7
+ group: model.group,
8
+ icon: model.icon ? JSON.stringify(model.icon) : null,
9
+ description: model.description ?? null,
10
+ fields: JSON.stringify(model.fields),
11
+ layout: JSON.stringify(model.layout),
12
+ tags: model.tags ? JSON.stringify(model.tags) : null,
13
+ titleFieldId: model.titleFieldId,
14
+ descriptionFieldId: model.descriptionFieldId ?? null,
15
+ imageFieldId: model.imageFieldId ?? null,
16
+ isPrivate: model.isPrivate ?? false,
17
+ isPlugin: model.isPlugin ?? false,
18
+ authorization: null != model.authorization ? JSON.stringify(model.authorization) : null,
19
+ createdBy_id: model.createdBy?.id ?? null,
20
+ createdBy_displayName: model.createdBy?.displayName ?? null,
21
+ createdBy_type: model.createdBy?.type ?? null,
22
+ createdBy: model.createdBy ? JSON.stringify(model.createdBy) : null,
23
+ createdOn: model.createdOn ?? null,
24
+ savedOn: model.savedOn ?? null,
25
+ settings: model.settings ? JSON.stringify(model.settings) : null
26
+ });
27
+ const rowToModel = (row)=>({
28
+ tenant: row.tenant,
29
+ modelId: row.modelId,
30
+ name: row.name,
31
+ singularApiName: row.singularApiName,
32
+ pluralApiName: row.pluralApiName,
33
+ group: row.group,
34
+ icon: row.icon ? JSON.parse(row.icon) : null,
35
+ description: row.description || null,
36
+ fields: JSON.parse(row.fields),
37
+ layout: JSON.parse(row.layout),
38
+ tags: row.tags ? JSON.parse(row.tags) : void 0,
39
+ titleFieldId: row.titleFieldId,
40
+ descriptionFieldId: row.descriptionFieldId,
41
+ imageFieldId: row.imageFieldId,
42
+ isPrivate: row.isPrivate,
43
+ isPlugin: row.isPlugin,
44
+ authorization: row.authorization ? JSON.parse(row.authorization) : void 0,
45
+ createdBy: row.createdBy ? JSON.parse(row.createdBy) : void 0,
46
+ createdOn: row.createdOn ?? void 0,
47
+ savedOn: row.savedOn ?? void 0,
48
+ settings: row.settings ? JSON.parse(row.settings) : void 0
49
+ });
50
+ export { modelToRow, rowToModel };
51
+
52
+ //# sourceMappingURL=mappers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"operations/model/mappers.js","sources":["../../../src/operations/model/mappers.ts"],"sourcesContent":["import type { StorageCmsModel } from \"@webiny/api-headless-cms/types/index.js\";\nimport type { IModelRow } from \"./types.js\";\n\nexport const modelToRow = (model: StorageCmsModel): IModelRow => {\n return {\n tenant: model.tenant,\n modelId: model.modelId,\n name: model.name,\n singularApiName: model.singularApiName,\n pluralApiName: model.pluralApiName,\n group: model.group,\n icon: model.icon ? JSON.stringify(model.icon) : null,\n description: model.description ?? null,\n fields: JSON.stringify(model.fields),\n layout: JSON.stringify(model.layout),\n tags: model.tags ? JSON.stringify(model.tags) : null,\n titleFieldId: model.titleFieldId,\n descriptionFieldId: model.descriptionFieldId ?? null,\n imageFieldId: model.imageFieldId ?? null,\n isPrivate: model.isPrivate ?? false,\n isPlugin: model.isPlugin ?? false,\n authorization: model.authorization != null ? JSON.stringify(model.authorization) : null,\n createdBy_id: model.createdBy?.id ?? null,\n createdBy_displayName: model.createdBy?.displayName ?? null,\n createdBy_type: model.createdBy?.type ?? null,\n createdBy: model.createdBy ? JSON.stringify(model.createdBy) : null,\n createdOn: model.createdOn ?? null,\n savedOn: model.savedOn ?? null,\n settings: model.settings ? JSON.stringify(model.settings) : null\n };\n};\n\nexport const rowToModel = (row: IModelRow): StorageCmsModel => {\n return {\n tenant: row.tenant,\n modelId: row.modelId,\n name: row.name,\n singularApiName: row.singularApiName,\n pluralApiName: row.pluralApiName,\n group: row.group,\n icon: row.icon ? JSON.parse(row.icon) : null,\n description: row.description || null,\n fields: JSON.parse(row.fields),\n layout: JSON.parse(row.layout),\n tags: row.tags ? JSON.parse(row.tags) : undefined,\n titleFieldId: row.titleFieldId,\n descriptionFieldId: row.descriptionFieldId,\n imageFieldId: row.imageFieldId,\n isPrivate: row.isPrivate,\n isPlugin: row.isPlugin,\n authorization: row.authorization ? JSON.parse(row.authorization) : undefined,\n createdBy: row.createdBy ? JSON.parse(row.createdBy) : undefined,\n createdOn: row.createdOn ?? undefined,\n savedOn: row.savedOn ?? undefined,\n settings: row.settings ? JSON.parse(row.settings) : undefined\n };\n};\n"],"names":["modelToRow","model","JSON","rowToModel","row","undefined"],"mappings":"AAGO,MAAMA,aAAa,CAACC,QAChB;QACH,QAAQA,MAAM,MAAM;QACpB,SAASA,MAAM,OAAO;QACtB,MAAMA,MAAM,IAAI;QAChB,iBAAiBA,MAAM,eAAe;QACtC,eAAeA,MAAM,aAAa;QAClC,OAAOA,MAAM,KAAK;QAClB,MAAMA,MAAM,IAAI,GAAGC,KAAK,SAAS,CAACD,MAAM,IAAI,IAAI;QAChD,aAAaA,MAAM,WAAW,IAAI;QAClC,QAAQC,KAAK,SAAS,CAACD,MAAM,MAAM;QACnC,QAAQC,KAAK,SAAS,CAACD,MAAM,MAAM;QACnC,MAAMA,MAAM,IAAI,GAAGC,KAAK,SAAS,CAACD,MAAM,IAAI,IAAI;QAChD,cAAcA,MAAM,YAAY;QAChC,oBAAoBA,MAAM,kBAAkB,IAAI;QAChD,cAAcA,MAAM,YAAY,IAAI;QACpC,WAAWA,MAAM,SAAS,IAAI;QAC9B,UAAUA,MAAM,QAAQ,IAAI;QAC5B,eAAeA,AAAuB,QAAvBA,MAAM,aAAa,GAAWC,KAAK,SAAS,CAACD,MAAM,aAAa,IAAI;QACnF,cAAcA,MAAM,SAAS,EAAE,MAAM;QACrC,uBAAuBA,MAAM,SAAS,EAAE,eAAe;QACvD,gBAAgBA,MAAM,SAAS,EAAE,QAAQ;QACzC,WAAWA,MAAM,SAAS,GAAGC,KAAK,SAAS,CAACD,MAAM,SAAS,IAAI;QAC/D,WAAWA,MAAM,SAAS,IAAI;QAC9B,SAASA,MAAM,OAAO,IAAI;QAC1B,UAAUA,MAAM,QAAQ,GAAGC,KAAK,SAAS,CAACD,MAAM,QAAQ,IAAI;IAChE;AAGG,MAAME,aAAa,CAACC,MAChB;QACH,QAAQA,IAAI,MAAM;QAClB,SAASA,IAAI,OAAO;QACpB,MAAMA,IAAI,IAAI;QACd,iBAAiBA,IAAI,eAAe;QACpC,eAAeA,IAAI,aAAa;QAChC,OAAOA,IAAI,KAAK;QAChB,MAAMA,IAAI,IAAI,GAAGF,KAAK,KAAK,CAACE,IAAI,IAAI,IAAI;QACxC,aAAaA,IAAI,WAAW,IAAI;QAChC,QAAQF,KAAK,KAAK,CAACE,IAAI,MAAM;QAC7B,QAAQF,KAAK,KAAK,CAACE,IAAI,MAAM;QAC7B,MAAMA,IAAI,IAAI,GAAGF,KAAK,KAAK,CAACE,IAAI,IAAI,IAAIC;QACxC,cAAcD,IAAI,YAAY;QAC9B,oBAAoBA,IAAI,kBAAkB;QAC1C,cAAcA,IAAI,YAAY;QAC9B,WAAWA,IAAI,SAAS;QACxB,UAAUA,IAAI,QAAQ;QACtB,eAAeA,IAAI,aAAa,GAAGF,KAAK,KAAK,CAACE,IAAI,aAAa,IAAIC;QACnE,WAAWD,IAAI,SAAS,GAAGF,KAAK,KAAK,CAACE,IAAI,SAAS,IAAIC;QACvD,WAAWD,IAAI,SAAS,IAAIC;QAC5B,SAASD,IAAI,OAAO,IAAIC;QACxB,UAAUD,IAAI,QAAQ,GAAGF,KAAK,KAAK,CAACE,IAAI,QAAQ,IAAIC;IACxD"}
@@ -0,0 +1,28 @@
1
+ import type { StorageCmsModel } from "@webiny/api-headless-cms/types/index.js";
2
+ export interface IModelRow {
3
+ tenant: string;
4
+ modelId: string;
5
+ name: string;
6
+ singularApiName: string;
7
+ pluralApiName: string;
8
+ group: string;
9
+ icon: string | null;
10
+ description: string | null;
11
+ fields: string;
12
+ layout: string;
13
+ tags: string | null;
14
+ titleFieldId: string;
15
+ descriptionFieldId: string | null;
16
+ imageFieldId: string | null;
17
+ isPrivate: boolean;
18
+ isPlugin: boolean;
19
+ authorization: string | null;
20
+ createdBy_id: string | null;
21
+ createdBy_displayName: string | null;
22
+ createdBy_type: string | null;
23
+ createdBy: string | null;
24
+ createdOn: string | null;
25
+ savedOn: string | null;
26
+ settings: string | null;
27
+ }
28
+ export declare const MODEL_COLUMNS: (keyof StorageCmsModel)[];
@@ -0,0 +1,27 @@
1
+ const MODEL_COLUMN_MAP = {
2
+ name: true,
3
+ modelId: true,
4
+ singularApiName: true,
5
+ pluralApiName: true,
6
+ tenant: true,
7
+ group: true,
8
+ icon: true,
9
+ description: true,
10
+ fields: true,
11
+ layout: true,
12
+ tags: true,
13
+ titleFieldId: true,
14
+ descriptionFieldId: true,
15
+ imageFieldId: true,
16
+ isPrivate: true,
17
+ authorization: true,
18
+ isPlugin: true,
19
+ createdOn: true,
20
+ savedOn: true,
21
+ createdBy: true,
22
+ settings: true
23
+ };
24
+ const MODEL_COLUMNS = Object.keys(MODEL_COLUMN_MAP);
25
+ export { MODEL_COLUMNS };
26
+
27
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"operations/model/types.js","sources":["../../../src/operations/model/types.ts"],"sourcesContent":["import type { StorageCmsModel } from \"@webiny/api-headless-cms/types/index.js\";\n\n/* SQL row representation of StorageCmsModel. */\nexport interface IModelRow {\n tenant: string;\n modelId: string;\n name: string;\n singularApiName: string;\n pluralApiName: string;\n group: string;\n icon: string | null;\n description: string | null;\n fields: string;\n layout: string;\n tags: string | null;\n titleFieldId: string;\n descriptionFieldId: string | null;\n imageFieldId: string | null;\n isPrivate: boolean;\n isPlugin: boolean;\n authorization: string | null;\n createdBy_id: string | null;\n createdBy_displayName: string | null;\n createdBy_type: string | null;\n createdBy: string | null;\n createdOn: string | null;\n savedOn: string | null;\n settings: string | null;\n}\n\n/* Validated against StorageCmsModel — TypeScript errors if StorageCmsModel gains a new field. */\nconst MODEL_COLUMN_MAP: Record<keyof StorageCmsModel, true> = {\n name: true,\n modelId: true,\n singularApiName: true,\n pluralApiName: true,\n tenant: true,\n group: true,\n icon: true,\n description: true,\n fields: true,\n layout: true,\n tags: true,\n titleFieldId: true,\n descriptionFieldId: true,\n imageFieldId: true,\n isPrivate: true,\n authorization: true,\n isPlugin: true,\n createdOn: true,\n savedOn: true,\n createdBy: true,\n settings: true\n};\n\nexport const MODEL_COLUMNS = Object.keys(MODEL_COLUMN_MAP) as (keyof StorageCmsModel)[];\n"],"names":["MODEL_COLUMN_MAP","MODEL_COLUMNS","Object"],"mappings":"AA+BA,MAAMA,mBAAwD;IAC1D,MAAM;IACN,SAAS;IACT,iBAAiB;IACjB,eAAe;IACf,QAAQ;IACR,OAAO;IACP,MAAM;IACN,aAAa;IACb,QAAQ;IACR,QAAQ;IACR,MAAM;IACN,cAAc;IACd,oBAAoB;IACpB,cAAc;IACd,WAAW;IACX,eAAe;IACf,UAAU;IACV,WAAW;IACX,SAAS;IACT,WAAW;IACX,UAAU;AACd;AAEO,MAAMC,gBAAgBC,OAAO,IAAI,CAACF"}
package/package.json ADDED
@@ -0,0 +1,48 @@
1
+ {
2
+ "name": "@webiny/api-headless-cms-sql",
3
+ "version": "0.0.0-unstable.9f53ea597d",
4
+ "type": "module",
5
+ "exports": {
6
+ ".": "./index.js",
7
+ "./*": "./*"
8
+ },
9
+ "keywords": [
10
+ "@webiny/api-headless-cms",
11
+ "storage-operations",
12
+ "sql",
13
+ "postgresql",
14
+ "knex",
15
+ "cms:sql"
16
+ ],
17
+ "repository": {
18
+ "type": "git",
19
+ "url": "https://github.com/webiny/webiny-js.git",
20
+ "directory": "packages/api-headless-cms-sql"
21
+ },
22
+ "description": "SQL storage operations for Headless CMS API.",
23
+ "license": "MIT",
24
+ "dependencies": {
25
+ "@webiny/api-core-sql": "0.0.0-unstable.9f53ea597d",
26
+ "@webiny/api-headless-cms": "0.0.0-unstable.9f53ea597d",
27
+ "@webiny/api-headless-cms-storage": "0.0.0-unstable.9f53ea597d",
28
+ "@webiny/db-utils": "0.0.0-unstable.9f53ea597d",
29
+ "@webiny/feature": "0.0.0-unstable.9f53ea597d",
30
+ "@webiny/handler": "0.0.0-unstable.9f53ea597d",
31
+ "@webiny/plugins": "0.0.0-unstable.9f53ea597d",
32
+ "@webiny/utils": "0.0.0-unstable.9f53ea597d",
33
+ "knex": "3.3.0"
34
+ },
35
+ "devDependencies": {
36
+ "@webiny/build-tools": "0.0.0-unstable.9f53ea597d",
37
+ "@webiny/project-utils": "0.0.0-unstable.9f53ea597d",
38
+ "better-sqlite3": "13.0.1",
39
+ "typescript": "7.0.2",
40
+ "vitest": "4.1.10"
41
+ },
42
+ "publishConfig": {
43
+ "access": "public"
44
+ },
45
+ "webiny": {
46
+ "publishFrom": "dist"
47
+ }
48
+ }
package/types.d.ts ADDED
@@ -0,0 +1,10 @@
1
+ import type { PluginsContainer } from "@webiny/plugins/types.js";
2
+ import type { CmsContext, HeadlessCmsStorageOperations as BaseHeadlessCmsStorageOperations } from "@webiny/api-headless-cms/types/index.js";
3
+ export type { CmsContext };
4
+ export interface SqlStorageOperationsFactoryParams {
5
+ plugins: PluginsContainer;
6
+ container: CmsContext["container"];
7
+ }
8
+ export interface SqlStorageOperationsFactory {
9
+ (params: SqlStorageOperationsFactoryParams): BaseHeadlessCmsStorageOperations;
10
+ }
package/types.js ADDED
File without changes