@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.
- package/LICENSE +21 -0
- package/README.md +11 -0
- package/features/entryTableManager/EntryTableManager.d.ts +17 -0
- package/features/entryTableManager/EntryTableManager.js +63 -0
- package/features/entryTableManager/EntryTableManager.js.map +1 -0
- package/features/entryTableManager/abstractions.d.ts +9 -0
- package/features/entryTableManager/abstractions.js +5 -0
- package/features/entryTableManager/abstractions.js.map +1 -0
- package/features/entryTableManager/feature.d.ts +4 -0
- package/features/entryTableManager/feature.js +11 -0
- package/features/entryTableManager/feature.js.map +1 -0
- package/features/groupSchemaManager/GroupSchemaManager.d.ts +13 -0
- package/features/groupSchemaManager/GroupSchemaManager.js +44 -0
- package/features/groupSchemaManager/GroupSchemaManager.js.map +1 -0
- package/features/groupSchemaManager/abstractions.d.ts +8 -0
- package/features/groupSchemaManager/abstractions.js +5 -0
- package/features/groupSchemaManager/abstractions.js.map +1 -0
- package/features/groupSchemaManager/feature.d.ts +4 -0
- package/features/groupSchemaManager/feature.js +11 -0
- package/features/groupSchemaManager/feature.js.map +1 -0
- package/features/modelSchemaManager/ModelSchemaManager.d.ts +13 -0
- package/features/modelSchemaManager/ModelSchemaManager.js +54 -0
- package/features/modelSchemaManager/ModelSchemaManager.js.map +1 -0
- package/features/modelSchemaManager/abstractions.d.ts +8 -0
- package/features/modelSchemaManager/abstractions.js +5 -0
- package/features/modelSchemaManager/abstractions.js.map +1 -0
- package/features/modelSchemaManager/feature.d.ts +4 -0
- package/features/modelSchemaManager/feature.js +11 -0
- package/features/modelSchemaManager/feature.js.map +1 -0
- package/features/tableNameResolver/TableNameResolver.d.ts +13 -0
- package/features/tableNameResolver/TableNameResolver.js +24 -0
- package/features/tableNameResolver/TableNameResolver.js.map +1 -0
- package/features/tableNameResolver/abstractions.d.ts +16 -0
- package/features/tableNameResolver/abstractions.js +6 -0
- package/features/tableNameResolver/abstractions.js.map +1 -0
- package/features/tableNameResolver/feature.d.ts +4 -0
- package/features/tableNameResolver/feature.js +11 -0
- package/features/tableNameResolver/feature.js.map +1 -0
- package/index.d.ts +8 -0
- package/index.js +81 -0
- package/index.js.map +1 -0
- package/operations/entry/index.d.ts +13 -0
- package/operations/entry/index.js +362 -0
- package/operations/entry/index.js.map +1 -0
- package/operations/entry/mappers.d.ts +5 -0
- package/operations/entry/mappers.js +26 -0
- package/operations/entry/mappers.js.map +1 -0
- package/operations/entry/types.d.ts +11 -0
- package/operations/entry/types.js +0 -0
- package/operations/group/index.d.ts +5 -0
- package/operations/group/index.js +58 -0
- package/operations/group/index.js.map +1 -0
- package/operations/group/mappers.d.ts +4 -0
- package/operations/group/mappers.js +32 -0
- package/operations/group/mappers.js.map +1 -0
- package/operations/group/types.d.ts +18 -0
- package/operations/group/types.js +17 -0
- package/operations/group/types.js.map +1 -0
- package/operations/model/index.d.ts +5 -0
- package/operations/model/index.js +50 -0
- package/operations/model/index.js.map +1 -0
- package/operations/model/mappers.d.ts +4 -0
- package/operations/model/mappers.js +52 -0
- package/operations/model/mappers.js.map +1 -0
- package/operations/model/types.d.ts +28 -0
- package/operations/model/types.js +27 -0
- package/operations/model/types.js.map +1 -0
- package/package.json +48 -0
- package/types.d.ts +10 -0
- 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,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
|