@wix/patterns-cms 1.11.0 → 1.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/adapter/__tests__/cmsFieldActions.spec.js.map +1 -1
- package/dist/cjs/adapter/__tests__/createCmsBackend.spec.js +107 -14
- package/dist/cjs/adapter/__tests__/createCmsBackend.spec.js.map +1 -1
- package/dist/cjs/adapter/__tests__/filterUtils.spec.js +7 -7
- package/dist/cjs/adapter/__tests__/filterUtils.spec.js.map +1 -1
- package/dist/cjs/adapter/__tests__/searchUtils.spec.js.map +1 -1
- package/dist/cjs/adapter/__tests__/sortUtils.spec.js.map +1 -1
- package/dist/cjs/adapter/__tests__/transformCmsSchema.spec.js +9 -0
- package/dist/cjs/adapter/__tests__/transformCmsSchema.spec.js.map +1 -1
- package/dist/cjs/adapter/__tests__/useCmsSchemaSource.spec.js +178 -0
- package/dist/cjs/adapter/__tests__/useCmsSchemaSource.spec.js.map +1 -0
- package/dist/cjs/adapter/cmsBackup.js.map +1 -1
- package/dist/cjs/adapter/cmsFieldTypeMap.js.map +1 -1
- package/dist/cjs/adapter/cmsPermissions.js.map +1 -1
- package/dist/cjs/adapter/constants.js.map +1 -1
- package/dist/cjs/adapter/createCmsBackend.js +35 -10
- package/dist/cjs/adapter/createCmsBackend.js.map +1 -1
- package/dist/cjs/adapter/createCmsFieldActions.js.map +1 -1
- package/dist/cjs/adapter/fetchExternalDbConnections.js.map +1 -1
- package/dist/cjs/adapter/filterUtils.js +7 -7
- package/dist/cjs/adapter/filterUtils.js.map +1 -1
- package/dist/cjs/adapter/index.js +3 -3
- package/dist/cjs/adapter/index.js.map +1 -1
- package/dist/cjs/adapter/loadCmsSchema.js.map +1 -1
- package/dist/cjs/adapter/searchUtils.js.map +1 -1
- package/dist/cjs/adapter/sortUtils.js.map +1 -1
- package/dist/cjs/adapter/transformCmsSchema.js +4 -1
- package/dist/cjs/adapter/transformCmsSchema.js.map +1 -1
- package/dist/cjs/adapter/useCmsSchemaSource.js +97 -0
- package/dist/cjs/adapter/useCmsSchemaSource.js.map +1 -0
- package/dist/cjs/testkit/cmsFetchMocks.js +7 -6
- package/dist/cjs/testkit/cmsFetchMocks.js.map +1 -1
- package/dist/esm/adapter/__tests__/cmsFieldActions.spec.js +15 -3
- package/dist/esm/adapter/__tests__/cmsFieldActions.spec.js.map +1 -1
- package/dist/esm/adapter/__tests__/createCmsBackend.spec.js +68 -12
- package/dist/esm/adapter/__tests__/createCmsBackend.spec.js.map +1 -1
- package/dist/esm/adapter/__tests__/filterUtils.spec.js +1 -1
- package/dist/esm/adapter/__tests__/filterUtils.spec.js.map +1 -1
- package/dist/esm/adapter/__tests__/searchUtils.spec.js.map +1 -1
- package/dist/esm/adapter/__tests__/sortUtils.spec.js.map +1 -1
- package/dist/esm/adapter/__tests__/transformCmsSchema.spec.js +5 -0
- package/dist/esm/adapter/__tests__/transformCmsSchema.spec.js.map +1 -1
- package/dist/esm/adapter/__tests__/useCmsSchemaSource.spec.js +156 -0
- package/dist/esm/adapter/__tests__/useCmsSchemaSource.spec.js.map +1 -0
- package/dist/esm/adapter/createCmsBackend.js +33 -10
- package/dist/esm/adapter/createCmsBackend.js.map +1 -1
- package/dist/esm/adapter/createCmsFieldActions.js.map +1 -1
- package/dist/esm/adapter/filterUtils.js +2 -2
- package/dist/esm/adapter/filterUtils.js.map +1 -1
- package/dist/esm/adapter/index.js +1 -1
- package/dist/esm/adapter/index.js.map +1 -1
- package/dist/esm/adapter/loadCmsSchema.js.map +1 -1
- package/dist/esm/adapter/searchUtils.js.map +1 -1
- package/dist/esm/adapter/sortUtils.js.map +1 -1
- package/dist/esm/adapter/transformCmsSchema.js +4 -1
- package/dist/esm/adapter/transformCmsSchema.js.map +1 -1
- package/dist/esm/adapter/useCmsSchemaSource.js +87 -0
- package/dist/esm/adapter/useCmsSchemaSource.js.map +1 -0
- package/dist/esm/testkit/cmsFetchMocks.js +4 -3
- package/dist/esm/testkit/cmsFetchMocks.js.map +1 -1
- package/dist/types/adapter/__tests__/useCmsSchemaSource.spec.d.ts +2 -0
- package/dist/types/adapter/__tests__/useCmsSchemaSource.spec.d.ts.map +1 -0
- package/dist/types/adapter/cmsBackup.d.ts +1 -1
- package/dist/types/adapter/cmsFieldTypeMap.d.ts +1 -1
- package/dist/types/adapter/cmsPermissions.d.ts +1 -1
- package/dist/types/adapter/constants.d.ts +1 -1
- package/dist/types/adapter/createCmsBackend.d.ts +4 -2
- package/dist/types/adapter/createCmsBackend.d.ts.map +1 -1
- package/dist/types/adapter/createCmsFieldActions.d.ts +1 -1
- package/dist/types/adapter/createCmsFieldActions.d.ts.map +1 -1
- package/dist/types/adapter/fetchExternalDbConnections.d.ts +1 -1
- package/dist/types/adapter/filterUtils.d.ts +2 -1
- package/dist/types/adapter/filterUtils.d.ts.map +1 -1
- package/dist/types/adapter/index.d.ts +1 -1
- package/dist/types/adapter/index.d.ts.map +1 -1
- package/dist/types/adapter/loadCmsSchema.d.ts +2 -1
- package/dist/types/adapter/loadCmsSchema.d.ts.map +1 -1
- package/dist/types/adapter/searchUtils.d.ts +2 -1
- package/dist/types/adapter/searchUtils.d.ts.map +1 -1
- package/dist/types/adapter/sortUtils.d.ts +2 -1
- package/dist/types/adapter/sortUtils.d.ts.map +1 -1
- package/dist/types/adapter/transformCmsSchema.d.ts +1 -1
- package/dist/types/adapter/transformCmsSchema.d.ts.map +1 -1
- package/dist/types/adapter/useCmsSchemaSource.d.ts +22 -0
- package/dist/types/adapter/useCmsSchemaSource.d.ts.map +1 -0
- package/dist/types/testkit/cmsFetchMocks.d.ts +6 -5
- package/dist/types/testkit/cmsFetchMocks.d.ts.map +1 -1
- package/package.json +9 -8
- package/dist/cjs/adapter/__tests__/createCmsSchemaSource.spec.js +0 -37
- package/dist/cjs/adapter/__tests__/createCmsSchemaSource.spec.js.map +0 -1
- package/dist/cjs/adapter/createCmsSchemaSource.js +0 -35
- package/dist/cjs/adapter/createCmsSchemaSource.js.map +0 -1
- package/dist/esm/adapter/__tests__/createCmsSchemaSource.spec.js +0 -32
- package/dist/esm/adapter/__tests__/createCmsSchemaSource.spec.js.map +0 -1
- package/dist/esm/adapter/createCmsSchemaSource.js +0 -25
- package/dist/esm/adapter/createCmsSchemaSource.js.map +0 -1
- package/dist/types/adapter/__tests__/createCmsSchemaSource.spec.d.ts +0 -2
- package/dist/types/adapter/__tests__/createCmsSchemaSource.spec.d.ts.map +0 -1
- package/dist/types/adapter/createCmsSchemaSource.d.ts +0 -12
- package/dist/types/adapter/createCmsSchemaSource.d.ts.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["WIX_FORMS","FORM_APP","WIX_DATA","CREATE_FIELD","UPDATE_FIELD","DELETE_FIELD","INSERT","UPDATE","REMOVE","SCHEMA_FIELD_PERMISSIONS","externalNamespaceFromId","collectionId","index","lastIndexOf","substring","isCollectionShared","schema","_schema$plugins","plugins","some","p","type","isFormsCollection","ownerAppId","isWixAppReadOnly","collectionType","isExternalEditable","externalDbConnections","_connection$capabilit","_connection$capabilit2","namespace","_id","connection","find","c","undefined","capabilities","collectionModificationsSupported","fieldTypes","length","isSchemaEditable","canEditSchemaFields","userPermissions","every","includes","computeItemPermissions","_schema$capabilities","createItem","updateItem","deleteItem","ops","dataOperations","roles","permissions","allowed","allowedDataPermissions","hasAbacOrAnyone","role","abacPermission","notDataRestricted","key","update","remove","computeCmsPermissions","schemaEditable","canEditFields","schemaPermissions","createField","updateField","deleteField","itemPermissions","exports"],"sources":["../../../src/adapter/cmsPermissions.ts"],"sourcesContent":["import { collections } from '@wix/data';\nimport type { ItemPermissions, SchemaPermissions } from '@wix/
|
|
1
|
+
{"version":3,"names":["WIX_FORMS","FORM_APP","WIX_DATA","CREATE_FIELD","UPDATE_FIELD","DELETE_FIELD","INSERT","UPDATE","REMOVE","SCHEMA_FIELD_PERMISSIONS","externalNamespaceFromId","collectionId","index","lastIndexOf","substring","isCollectionShared","schema","_schema$plugins","plugins","some","p","type","isFormsCollection","ownerAppId","isWixAppReadOnly","collectionType","isExternalEditable","externalDbConnections","_connection$capabilit","_connection$capabilit2","namespace","_id","connection","find","c","undefined","capabilities","collectionModificationsSupported","fieldTypes","length","isSchemaEditable","canEditSchemaFields","userPermissions","every","includes","computeItemPermissions","_schema$capabilities","createItem","updateItem","deleteItem","ops","dataOperations","roles","permissions","allowed","allowedDataPermissions","hasAbacOrAnyone","role","abacPermission","notDataRestricted","key","update","remove","computeCmsPermissions","schemaEditable","canEditFields","schemaPermissions","createField","updateField","deleteField","itemPermissions","exports"],"sources":["../../../src/adapter/cmsPermissions.ts"],"sourcesContent":["import { collections } from '@wix/data';\nimport type { ItemPermissions, SchemaPermissions } from '@wix/patterns';\n\nconst WIX_FORMS = '14ce1214-b278-a7e4-1373-00cebd1bef7c';\nconst FORM_APP = '225dd912-7dea-4738-8688-4b8c6955ffc2';\n\nconst WIX_DATA = {\n CREATE_FIELD: 'WIX_DATA.CREATE_COLLECTION_FIELD',\n UPDATE_FIELD: 'WIX_DATA.UPDATE_COLLECTION_FIELD',\n DELETE_FIELD: 'WIX_DATA.DELETE_COLLECTION_FIELD',\n INSERT: 'WIX_DATA.INSERT',\n UPDATE: 'WIX_DATA.UPDATE',\n REMOVE: 'WIX_DATA.REMOVE',\n};\n\nconst SCHEMA_FIELD_PERMISSIONS = [\n WIX_DATA.CREATE_FIELD,\n WIX_DATA.UPDATE_FIELD,\n WIX_DATA.DELETE_FIELD,\n];\n\n/** An external-database connection; determines whether an EXTERNAL collection is editable. */\nexport interface ExternalDbConnection {\n namespace: string;\n capabilities?: {\n collectionModificationsSupported?: boolean;\n fieldTypes?: string[];\n };\n}\n\n// `allowedDataPermissions` is an internal-only field on the v2 `getDataCollection`\n// response (stripped from the public `@wix/data` typings); cast to read it.\ninterface AllowedDataPermissions {\n itemInsert?: boolean;\n itemUpdate?: boolean;\n itemRemove?: boolean;\n}\ntype DataCollectionWithAllowed = collections.DataCollection & {\n allowedDataPermissions?: AllowedDataPermissions;\n};\n\n// EXTERNAL collection ids are `connectionName/dataCollectionId`; match the\n// converter's lastIndexOf('/') split.\nconst externalNamespaceFromId = (\n collectionId: string | undefined,\n): string | null => {\n if (!collectionId) {\n return null;\n }\n const index = collectionId.lastIndexOf('/');\n return index === -1 ? null : collectionId.substring(0, index);\n};\n\nconst isCollectionShared = (schema: collections.DataCollection): boolean =>\n schema.plugins?.some((p) => p.type === 'SHARED') ?? false;\n\nconst isFormsCollection = (schema: collections.DataCollection): boolean =>\n schema.ownerAppId === WIX_FORMS || schema.ownerAppId === FORM_APP;\n\nconst isWixAppReadOnly = (schema: collections.DataCollection): boolean =>\n schema.collectionType === 'WIX_APP' &&\n schema.ownerAppId !== 'SiteMembers' &&\n !isFormsCollection(schema);\n\nconst isExternalEditable = (\n schema: collections.DataCollection,\n externalDbConnections: ExternalDbConnection[],\n): boolean => {\n const namespace = externalNamespaceFromId(schema._id);\n const connection = namespace\n ? externalDbConnections.find((c) => c.namespace === namespace)\n : undefined;\n return (\n !!connection?.capabilities?.collectionModificationsSupported &&\n (connection.capabilities.fieldTypes?.length ?? 0) > 0\n );\n};\n\nconst isSchemaEditable = (\n schema: collections.DataCollection,\n externalDbConnections: ExternalDbConnection[],\n): boolean => {\n if (isCollectionShared(schema)) {\n return false;\n }\n if (schema.collectionType === 'NATIVE') {\n return true;\n }\n if (schema.collectionType === 'EXTERNAL') {\n return isExternalEditable(schema, externalDbConnections);\n }\n return false;\n};\n\nconst canEditSchemaFields = (userPermissions: string[]): boolean =>\n SCHEMA_FIELD_PERMISSIONS.every((p) => userPermissions.includes(p));\n\nconst computeItemPermissions = (\n schema: collections.DataCollection,\n userPermissions: string[],\n): ItemPermissions => {\n if (isCollectionShared(schema) || isWixAppReadOnly(schema)) {\n return { createItem: false, updateItem: false, deleteItem: false };\n }\n\n const ops = schema.capabilities?.dataOperations ?? [];\n const roles = schema.permissions;\n const allowed = (schema as DataCollectionWithAllowed).allowedDataPermissions;\n\n const hasAbacOrAnyone = (role: string | undefined, abacPermission: string) =>\n role === 'ANYONE' || userPermissions.includes(abacPermission);\n const notDataRestricted = (key: keyof AllowedDataPermissions) =>\n allowed?.[key] !== false;\n\n return {\n // cms-web does NOT apply the ANYONE bypass for insert (raw ABAC check).\n createItem:\n ops.includes('SAVE') &&\n notDataRestricted('itemInsert') &&\n userPermissions.includes(WIX_DATA.INSERT),\n updateItem:\n ops.includes('UPDATE') &&\n notDataRestricted('itemUpdate') &&\n hasAbacOrAnyone(roles?.update, WIX_DATA.UPDATE),\n deleteItem:\n ops.includes('REMOVE') &&\n notDataRestricted('itemRemove') &&\n hasAbacOrAnyone(roles?.remove, WIX_DATA.REMOVE),\n };\n};\n\nexport interface CmsPermissions {\n /** `undefined` when the schema's fields cannot be edited. */\n schemaPermissions?: SchemaPermissions;\n itemPermissions: ItemPermissions;\n}\n\n/**\n * Computes the source-neutral permissions from the CMS collection and the\n * user's ABAC permissions.\n */\nexport const computeCmsPermissions = (\n schema: collections.DataCollection,\n userPermissions: string[] = [],\n externalDbConnections: ExternalDbConnection[] = [],\n): CmsPermissions => {\n const schemaEditable = isSchemaEditable(schema, externalDbConnections);\n const canEditFields = schemaEditable && canEditSchemaFields(userPermissions);\n\n return {\n schemaPermissions: schemaEditable\n ? {\n createField: canEditFields,\n updateField: canEditFields,\n deleteField: canEditFields,\n }\n : undefined,\n itemPermissions: computeItemPermissions(schema, userPermissions),\n };\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["FilterPropToOperator","exports","from","to","BooleanFilters","checked","unchecked","HasValueFilters","hasValue","noValue","HAS_VALUE_FILTER_TYPES"],"sources":["../../../src/adapter/constants.ts"],"sourcesContent":["import type { QueryOperator } from '@wix/
|
|
1
|
+
{"version":3,"names":["FilterPropToOperator","exports","from","to","BooleanFilters","checked","unchecked","HasValueFilters","hasValue","noValue","HAS_VALUE_FILTER_TYPES"],"sources":["../../../src/adapter/constants.ts"],"sourcesContent":["import type { QueryOperator } from '@wix/patterns';\n\n/** Range-filter property keys produced by the UI query layer. */\nexport type FilterProp = 'from' | 'to';\n\nexport const FilterPropToOperator: Record<FilterProp, QueryOperator> = {\n from: 'GTE',\n to: 'LTE',\n};\n\nexport const BooleanFilters = {\n checked: 'checked',\n unchecked: 'unchecked',\n};\n\nexport const HasValueFilters = {\n hasValue: 'hasValue',\n noValue: 'noValue',\n};\n\nexport const HAS_VALUE_FILTER_TYPES = [\n 'RICH_CONTENT',\n 'TIME',\n 'DOCUMENT',\n 'MULTI_DOCUMENT',\n 'AUDIO',\n 'IMAGE',\n 'OBJECT',\n 'ARRAY',\n 'MEDIA_GALLERY',\n 'COLOR',\n];\n"],"mappings":";;;;AAEA;;AAGO,MAAMA,oBAAuD,GAAAC,OAAA,CAAAD,oBAAA,GAAG;EACrEE,IAAI,EAAE,KAAK;EACXC,EAAE,EAAE;AACN,CAAC;AAEM,MAAMC,cAAc,GAAAH,OAAA,CAAAG,cAAA,GAAG;EAC5BC,OAAO,EAAE,SAAS;EAClBC,SAAS,EAAE;AACb,CAAC;AAEM,MAAMC,eAAe,GAAAN,OAAA,CAAAM,eAAA,GAAG;EAC7BC,QAAQ,EAAE,UAAU;EACpBC,OAAO,EAAE;AACX,CAAC;AAEM,MAAMC,sBAAsB,GAAAT,OAAA,CAAAS,sBAAA,GAAG,CACpC,cAAc,EACd,MAAM,EACN,UAAU,EACV,gBAAgB,EAChB,OAAO,EACP,OAAO,EACP,QAAQ,EACR,OAAO,EACP,eAAe,EACf,OAAO,CACR","ignoreList":[]}
|
|
@@ -11,18 +11,32 @@ var _cmsBackup = require("./cmsBackup");
|
|
|
11
11
|
const getReferenceFields = fields => Object.values(fields).filter(f => (f == null ? void 0 : f.type) === 'REFERENCE' || (f == null ? void 0 : f.type) === 'MULTI_REFERENCE');
|
|
12
12
|
const getMultiReferenceFields = fields => Object.values(fields).filter(f => (f == null ? void 0 : f.type) === 'MULTI_REFERENCE');
|
|
13
13
|
|
|
14
|
-
/**
|
|
14
|
+
/** The referenced item's id, from either a bare id or the `{_id, <display>}`
|
|
15
|
+
* object the cell editors and form fields carry so they can render a label. */
|
|
16
|
+
const toReferenceId = value => {
|
|
17
|
+
if (value && typeof value === 'object' && !Array.isArray(value)) {
|
|
18
|
+
const id = value._id;
|
|
19
|
+
return typeof id === 'string' ? id : value;
|
|
20
|
+
}
|
|
21
|
+
return value;
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
/** MULTI_REFERENCE values aren't stored inline — sync them via the reference
|
|
25
|
+
* endpoint. A field the entity doesn't carry is left untouched; one it carries
|
|
26
|
+
* as empty (the last reference removed) is unlinked. */
|
|
15
27
|
const updateMultiReferences = async (collectionId, entityId, entity, multiReferenceFields) => {
|
|
16
28
|
await Promise.all(multiReferenceFields.map(async field => {
|
|
17
|
-
|
|
18
|
-
if (!Array.isArray(rawValue)) {
|
|
29
|
+
if (!(field.id in entity)) {
|
|
19
30
|
return;
|
|
20
31
|
}
|
|
21
|
-
const
|
|
32
|
+
const rawValue = entity[field.id];
|
|
33
|
+
const referenceIds = Array.isArray(rawValue) ? rawValue.map(value => toReferenceId(value)) : [];
|
|
22
34
|
await _data.items.replaceReferences(collectionId, field.id, entityId, referenceIds);
|
|
23
35
|
}));
|
|
24
36
|
};
|
|
25
37
|
|
|
38
|
+
/** CMS supports every item capability except `move`. */
|
|
39
|
+
|
|
26
40
|
/**
|
|
27
41
|
* Builds the `CollectionBackend` for a CMS collection over `@wix/data`. Reference
|
|
28
42
|
* fields are expanded via `.include(...)` on `get`/`find`.
|
|
@@ -71,9 +85,9 @@ function createCmsBackend(collectionId, fields) {
|
|
|
71
85
|
await _data.items.bulkRemove(collectionId, entityIds);
|
|
72
86
|
},
|
|
73
87
|
find: async (query, options = {}) => {
|
|
74
|
-
// Without options, search
|
|
75
|
-
//
|
|
76
|
-
//
|
|
88
|
+
// Without options, search is skipped. The options arg is not on the
|
|
89
|
+
// `CollectionBackend.find` contract type — how a consumer supplies it is
|
|
90
|
+
// still open.
|
|
77
91
|
const searchableFieldIds = options.searchableFieldIds ?? [];
|
|
78
92
|
let dataQuery = _data.items.query(collectionId);
|
|
79
93
|
dataQuery = (0, _searchUtils.addSearchToDataQuery)({
|
|
@@ -92,9 +106,20 @@ function createCmsBackend(collectionId, fields) {
|
|
|
92
106
|
query,
|
|
93
107
|
fields
|
|
94
108
|
});
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
109
|
+
|
|
110
|
+
// Reference fields are expanded for rendering, not for querying — the
|
|
111
|
+
// cells read the referenced item's display field off the value, so a row
|
|
112
|
+
// holding a bare id shows blank. Not gated on `searchableFieldIds`: this
|
|
113
|
+
// source's default is just the display field, so gating meant no
|
|
114
|
+
// expansion at all. Matches auto-patterns, which passes every visible
|
|
115
|
+
// field as searchable and so always expands.
|
|
116
|
+
//
|
|
117
|
+
// A read-restricted referenced collection makes the whole query fail. If
|
|
118
|
+
// that shows up, retry with the offending fields dropped (cms-web's
|
|
119
|
+
// `fallbackQueryWithInclude`), and chunk the list — includes are capped
|
|
120
|
+
// per query.
|
|
121
|
+
if (allReferenceFieldIds.length > 0) {
|
|
122
|
+
dataQuery = dataQuery.include(...allReferenceFieldIds);
|
|
98
123
|
}
|
|
99
124
|
const offset = query.offset ?? 0;
|
|
100
125
|
const res = await dataQuery.skip(offset).limit(query.limit).find({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_data","require","_essentials","_filterUtils","_searchUtils","_sortUtils","_cmsBackup","getReferenceFields","fields","Object","values","filter","f","type","getMultiReferenceFields","updateMultiReferences","collectionId","entityId","entity","multiReferenceFields","Promise","all","map","field","rawValue","id","Array","isArray","referenceIds","value","_id","items","replaceReferences","createCmsBackend","allReferenceFieldIds","get","dataQuery","query","eq","length","include","res","find","returnTotalCount","Error","create","created","insert","createdId","update","delete","remove","bulkDelete","entityIds","bulkRemove","options","searchableFieldIds","addSearchToDataQuery","addFiltersToDataQuery","addSortToDataQuery","includeFieldIds","includes","offset","skip","limit","total","totalCount","hasNext","bulkInsert","entities","errorHandler","withErrorHandler","inserted","updated","errors","succeeded","failed","e","rowIndex","originalIndex","message","code","backup","createCmsBackupConfig"],"sources":["../../../src/adapter/createCmsBackend.ts"],"sourcesContent":["import { items } from '@wix/data';\nimport { errorHandler } from '@wix/essentials';\nimport type {\n BulkInsertResult,\n CollectionBackend,\n Field,\n OffsetQuery,\n OffsetQueryResult,\n Schema,\n} from '@wix/bex-core';\nimport { addFiltersToDataQuery } from './filterUtils';\nimport { addSearchToDataQuery } from './searchUtils';\nimport { addSortToDataQuery } from './sortUtils';\nimport { createCmsBackupConfig } from './cmsBackup';\n\ntype SchemaFields = Schema['fields'];\n\nconst getReferenceFields = (fields: SchemaFields): Field[] =>\n Object.values(fields).filter(\n (f): f is Field => f?.type === 'REFERENCE' || f?.type === 'MULTI_REFERENCE',\n );\n\nconst getMultiReferenceFields = (fields: SchemaFields): Field[] =>\n Object.values(fields).filter(\n (f): f is Field => f?.type === 'MULTI_REFERENCE',\n );\n\n/** MULTI_REFERENCE values aren't stored inline — sync them via the reference endpoint. */\nconst updateMultiReferences = async (\n collectionId: string,\n entityId: string,\n entity: Record<string, unknown>,\n multiReferenceFields: Field[],\n) => {\n await Promise.all(\n multiReferenceFields.map(async (field) => {\n const rawValue = entity[field.id];\n if (!Array.isArray(rawValue)) {\n return;\n }\n const referenceIds = (rawValue as Record<string, unknown>[]).map(\n (value) => value._id as string,\n );\n\n await items.replaceReferences(\n collectionId,\n field.id,\n entityId,\n referenceIds,\n );\n }),\n );\n};\n\n/**\n * Builds the `CollectionBackend` for a CMS collection over `@wix/data`. Reference\n * fields are expanded via `.include(...)` on `get`/`find`.\n */\nexport function createCmsBackend<\n T extends Record<string, unknown> = Record<string, unknown>,\n>(collectionId: string, fields: SchemaFields): CollectionBackend<T> {\n const multiReferenceFields = getMultiReferenceFields(fields);\n const allReferenceFieldIds = getReferenceFields(fields).map((f) => f.id);\n\n return {\n get: async (entityId: string): Promise<T> => {\n let dataQuery = items.query(collectionId).eq('_id', entityId);\n if (allReferenceFieldIds.length > 0) {\n dataQuery = dataQuery.include(...allReferenceFieldIds);\n }\n const res = await dataQuery.find({ returnTotalCount: false });\n const entity = res.items[0];\n if (!entity) {\n throw new Error(`Entity not found: ${entityId}`);\n }\n return entity as unknown as T;\n },\n\n create: async (entity: Partial<T>): Promise<T> => {\n const created = (await items.insert(\n collectionId,\n entity as Record<string, unknown>,\n )) as Record<string, unknown>;\n const createdId = created._id as string;\n if (createdId) {\n await updateMultiReferences(\n collectionId,\n createdId,\n entity as Record<string, unknown>,\n multiReferenceFields,\n );\n }\n return { ...entity, _id: createdId } as unknown as T;\n },\n\n update: async (entity: T): Promise<T> => {\n await items.update(\n collectionId,\n entity as Record<string, unknown> & { _id: string },\n );\n const entityId = (entity as Record<string, unknown>)._id as string;\n if (entityId) {\n await updateMultiReferences(\n collectionId,\n entityId,\n entity as Record<string, unknown>,\n multiReferenceFields,\n );\n }\n return entity;\n },\n\n delete: async (entityId: string): Promise<void> => {\n await items.remove(collectionId, entityId);\n },\n\n bulkDelete: async (entityIds: string[]): Promise<void> => {\n await items.bulkRemove(collectionId, entityIds);\n },\n\n find: async (\n query: OffsetQuery,\n options: {\n searchableFieldIds?: string[];\n } = {},\n ): Promise<OffsetQueryResult<T>> => {\n // Without options, search and reference-includes are skipped (matches\n // auto-patterns). The options arg is not on the `CollectionBackend.find`\n // contract type — how a consumer supplies it is still open.\n const searchableFieldIds: string[] = options.searchableFieldIds ?? [];\n\n let dataQuery = items.query(collectionId);\n dataQuery = addSearchToDataQuery({\n dataQuery,\n query,\n fields,\n searchableFieldIds,\n });\n dataQuery = addFiltersToDataQuery({\n dataQuery,\n query,\n fields,\n });\n dataQuery = addSortToDataQuery({ dataQuery, query, fields });\n\n const includeFieldIds = allReferenceFieldIds.filter((id) =>\n searchableFieldIds.includes(id),\n );\n if (includeFieldIds.length > 0) {\n dataQuery = dataQuery.include(...includeFieldIds);\n }\n\n const offset = query.offset ?? 0;\n const res = await dataQuery\n .skip(offset)\n .limit(query.limit)\n .find({ returnTotalCount: true });\n\n const total = res.totalCount ?? 0;\n return {\n items: res.items as unknown as T[],\n total,\n hasNext: offset + res.items.length < total,\n };\n },\n\n bulkInsert: (entities: Partial<T>[]): Promise<BulkInsertResult> =>\n errorHandler.withErrorHandler(async () => {\n const { inserted, updated, errors } = await items.bulkInsert(\n collectionId,\n entities as Record<string, unknown>[],\n );\n return {\n succeeded: inserted + updated,\n failed: errors.length,\n errors: errors.map((e) => ({\n rowIndex: e.originalIndex,\n message: e.message,\n code: e.code,\n })),\n };\n }, {}),\n\n backup: createCmsBackupConfig(),\n };\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_data","require","_essentials","_filterUtils","_searchUtils","_sortUtils","_cmsBackup","getReferenceFields","fields","Object","values","filter","f","type","getMultiReferenceFields","toReferenceId","value","Array","isArray","id","_id","updateMultiReferences","collectionId","entityId","entity","multiReferenceFields","Promise","all","map","field","rawValue","referenceIds","items","replaceReferences","createCmsBackend","allReferenceFieldIds","get","dataQuery","query","eq","length","include","res","find","returnTotalCount","Error","create","created","insert","createdId","update","delete","remove","bulkDelete","entityIds","bulkRemove","options","searchableFieldIds","addSearchToDataQuery","addFiltersToDataQuery","addSortToDataQuery","offset","skip","limit","total","totalCount","hasNext","bulkInsert","entities","errorHandler","withErrorHandler","inserted","updated","errors","succeeded","failed","e","rowIndex","originalIndex","message","code","backup","createCmsBackupConfig"],"sources":["../../../src/adapter/createCmsBackend.ts"],"sourcesContent":["import { items } from '@wix/data';\nimport { errorHandler } from '@wix/essentials';\nimport type {\n BulkInsertResult,\n Field,\n OffsetQuery,\n OffsetQueryResult,\n} from '@wix/patterns';\nimport type {\n CollectionBackend,\n CollectionBackendBase,\n Schema,\n} from '@wix/patterns/schema';\nimport { addFiltersToDataQuery } from './filterUtils';\nimport { addSearchToDataQuery } from './searchUtils';\nimport { addSortToDataQuery } from './sortUtils';\nimport { createCmsBackupConfig } from './cmsBackup';\n\ntype SchemaFields = Schema['fields'];\n\nconst getReferenceFields = (fields: SchemaFields): Field[] =>\n Object.values(fields).filter(\n (f): f is Field => f?.type === 'REFERENCE' || f?.type === 'MULTI_REFERENCE',\n );\n\nconst getMultiReferenceFields = (fields: SchemaFields): Field[] =>\n Object.values(fields).filter(\n (f): f is Field => f?.type === 'MULTI_REFERENCE',\n );\n\n/** The referenced item's id, from either a bare id or the `{_id, <display>}`\n * object the cell editors and form fields carry so they can render a label. */\nconst toReferenceId = (value: unknown): unknown => {\n if (value && typeof value === 'object' && !Array.isArray(value)) {\n const id = (value as Record<string, unknown>)._id;\n return typeof id === 'string' ? id : value;\n }\n return value;\n};\n\n/** MULTI_REFERENCE values aren't stored inline — sync them via the reference\n * endpoint. A field the entity doesn't carry is left untouched; one it carries\n * as empty (the last reference removed) is unlinked. */\nconst updateMultiReferences = async (\n collectionId: string,\n entityId: string,\n entity: Record<string, unknown>,\n multiReferenceFields: Field[],\n) => {\n await Promise.all(\n multiReferenceFields.map(async (field) => {\n if (!(field.id in entity)) {\n return;\n }\n const rawValue = entity[field.id];\n const referenceIds = Array.isArray(rawValue)\n ? rawValue.map((value) => toReferenceId(value) as string)\n : [];\n\n await items.replaceReferences(\n collectionId,\n field.id,\n entityId,\n referenceIds,\n );\n }),\n );\n};\n\n/** CMS supports every item capability except `move`. */\nexport type CmsCollectionBackend<\n T extends Record<string, unknown> = Record<string, unknown>,\n> = CollectionBackend<T> & Required<Omit<CollectionBackendBase<T>, 'move'>>;\n\n/**\n * Builds the `CollectionBackend` for a CMS collection over `@wix/data`. Reference\n * fields are expanded via `.include(...)` on `get`/`find`.\n */\nexport function createCmsBackend<\n T extends Record<string, unknown> = Record<string, unknown>,\n>(collectionId: string, fields: SchemaFields): CmsCollectionBackend<T> {\n const multiReferenceFields = getMultiReferenceFields(fields);\n const allReferenceFieldIds = getReferenceFields(fields).map((f) => f.id);\n\n return {\n get: async (entityId: string): Promise<T> => {\n let dataQuery = items.query(collectionId).eq('_id', entityId);\n if (allReferenceFieldIds.length > 0) {\n dataQuery = dataQuery.include(...allReferenceFieldIds);\n }\n const res = await dataQuery.find({ returnTotalCount: false });\n const entity = res.items[0];\n if (!entity) {\n throw new Error(`Entity not found: ${entityId}`);\n }\n return entity as unknown as T;\n },\n\n create: async (entity: Partial<T>): Promise<T> => {\n const created = (await items.insert(\n collectionId,\n entity as Record<string, unknown>,\n )) as Record<string, unknown>;\n const createdId = created._id as string;\n if (createdId) {\n await updateMultiReferences(\n collectionId,\n createdId,\n entity as Record<string, unknown>,\n multiReferenceFields,\n );\n }\n return { ...entity, _id: createdId } as unknown as T;\n },\n\n update: async (entity: T): Promise<T> => {\n await items.update(\n collectionId,\n entity as Record<string, unknown> & { _id: string },\n );\n const entityId = (entity as Record<string, unknown>)._id as string;\n if (entityId) {\n await updateMultiReferences(\n collectionId,\n entityId,\n entity as Record<string, unknown>,\n multiReferenceFields,\n );\n }\n return entity;\n },\n\n delete: async (entityId: string): Promise<void> => {\n await items.remove(collectionId, entityId);\n },\n\n bulkDelete: async (entityIds: string[]): Promise<void> => {\n await items.bulkRemove(collectionId, entityIds);\n },\n\n find: async (\n query: OffsetQuery,\n options: {\n searchableFieldIds?: string[];\n } = {},\n ): Promise<OffsetQueryResult<T>> => {\n // Without options, search is skipped. The options arg is not on the\n // `CollectionBackend.find` contract type — how a consumer supplies it is\n // still open.\n const searchableFieldIds: string[] = options.searchableFieldIds ?? [];\n\n let dataQuery = items.query(collectionId);\n dataQuery = addSearchToDataQuery({\n dataQuery,\n query,\n fields,\n searchableFieldIds,\n });\n dataQuery = addFiltersToDataQuery({\n dataQuery,\n query,\n fields,\n });\n dataQuery = addSortToDataQuery({ dataQuery, query, fields });\n\n // Reference fields are expanded for rendering, not for querying — the\n // cells read the referenced item's display field off the value, so a row\n // holding a bare id shows blank. Not gated on `searchableFieldIds`: this\n // source's default is just the display field, so gating meant no\n // expansion at all. Matches auto-patterns, which passes every visible\n // field as searchable and so always expands.\n //\n // A read-restricted referenced collection makes the whole query fail. If\n // that shows up, retry with the offending fields dropped (cms-web's\n // `fallbackQueryWithInclude`), and chunk the list — includes are capped\n // per query.\n if (allReferenceFieldIds.length > 0) {\n dataQuery = dataQuery.include(...allReferenceFieldIds);\n }\n\n const offset = query.offset ?? 0;\n const res = await dataQuery\n .skip(offset)\n .limit(query.limit)\n .find({ returnTotalCount: true });\n\n const total = res.totalCount ?? 0;\n return {\n items: res.items as unknown as T[],\n total,\n hasNext: offset + res.items.length < total,\n };\n },\n\n bulkInsert: (entities: Partial<T>[]): Promise<BulkInsertResult> =>\n errorHandler.withErrorHandler(async () => {\n const { inserted, updated, errors } = await items.bulkInsert(\n collectionId,\n entities as Record<string, unknown>[],\n );\n return {\n succeeded: inserted + updated,\n failed: errors.length,\n errors: errors.map((e) => ({\n rowIndex: e.originalIndex,\n message: e.message,\n code: e.code,\n })),\n };\n }, {}),\n\n backup: createCmsBackupConfig(),\n };\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_data","require","_cmsFieldTypeMap","_transformCmsSchema","_getFieldKey","_pollUntilReady","COPY_TASK_POLL_INTERVAL_MS","COPY_TASK_MAX_ATTEMPTS","waitForCopyTask","taskId","pollUntilReady","task","tasks","getTask","status","_task$failures","failure","failures","Error","code","description","filter","Boolean","join","interval","maxAttempts","err","message","createCmsFieldActions","collectionId","getCollection","existingFieldKeys","_getCollection","fields","flatMap","f","key","findCmsField","fieldKey","_getCollection2","find","fieldsAfterMutation","dataCollection","transformCmsSchema","toCmsField","field","_field$validation","_field$validation2","_field$validation3","cmsType","PatternsFieldTypeToCmsFieldType","type","cmsField","displayName","required","validation","isPii","encrypted","helpText","numberRange","stringLengthRange","buildFieldPatch","fieldId","updates","_findCmsField","_updates$validation","_updates$validation2","_updates$validation3","sourceCmsType","patch","undefined","cloneFieldDefinition","source","newKey","newDisplayName","_cloned$typeMetadata","systemField","capabilities","rest","cloned","typeMetadata","multiReference","referencingFieldKey","addField","getFieldKey","collections","createDataCollectionField","addFields","collection","cmsFields","map","id","updateDataCollection","editField","patchDataCollectionField","deleteField","deleteDataCollectionField","renameField","newName","makePrimary","patchDataCollection","displayField","duplicateField","sourceField","duplicateFieldWithContent","createdTask","createTask","copyFieldDataOptions","dataCollectionId","sourceFieldKey","targetFieldKey","_id"],"sources":["../../../src/adapter/createCmsFieldActions.ts"],"sourcesContent":["import { collections, tasks } from '@wix/data';\nimport type { Field, FieldActions, Schema } from '@wix/bex-core';\nimport { PatternsFieldTypeToCmsFieldType } from './cmsFieldTypeMap';\nimport { transformCmsSchema } from './transformCmsSchema';\nimport { getFieldKey } from './getFieldKey';\nimport { pollUntilReady } from './pollUntilReady';\n\nconst COPY_TASK_POLL_INTERVAL_MS = 1000;\nconst COPY_TASK_MAX_ATTEMPTS = 300;\n\n/** Polls a COPY_FIELD_DATA task to completion, mapping the generic poll-timeout error. */\nconst waitForCopyTask = async (taskId: string): Promise<void> => {\n try {\n await pollUntilReady(\n async () => {\n const task = await tasks.getTask(taskId);\n if (task.status === 'FAILED') {\n const failure = task.failures?.[0];\n throw new Error(\n [failure?.code, failure?.description].filter(Boolean).join(': ') ||\n 'Copy field data task failed',\n );\n }\n return task.status === 'COMPLETED';\n },\n {\n interval: COPY_TASK_POLL_INTERVAL_MS,\n maxAttempts: COPY_TASK_MAX_ATTEMPTS,\n },\n );\n } catch (err) {\n if (err instanceof Error && err.message === 'Backup polling timed out') {\n throw new Error('Copy field data task timed out');\n }\n throw err;\n }\n};\n\n/**\n * Builds the `FieldActions` for a CMS collection over `@wix/data`. `getCollection`\n * returns the current raw collection snapshot (for existing keys + source field types).\n */\nexport function createCmsFieldActions(\n collectionId: string,\n getCollection: () => collections.DataCollection | null,\n): FieldActions {\n const existingFieldKeys = (): string[] =>\n getCollection()?.fields?.flatMap((f) => (f.key ? [f.key] : [])) ?? [];\n\n const findCmsField = (fieldKey: string): collections.Field | undefined =>\n getCollection()?.fields?.find((f) => f.key === fieldKey);\n\n // A field mutation returns the updated collection; turn it into the new fields\n // map. The SDK guarantees `dataCollection` on a successful mutation, so there is\n // no missing-collection case to handle here.\n const fieldsAfterMutation = (\n dataCollection: collections.DataCollection,\n ): Schema['fields'] => transformCmsSchema(dataCollection).fields;\n\n // Maps a source-neutral `Field` to a CMS field under the given `key`. Throws\n // for a type with no CMS mapping before any SDK call. Shared by addField (key\n // derived from the display name) and addFields (key = the caller's field.id).\n const toCmsField = (field: Field, key: string): collections.Field => {\n const cmsType = PatternsFieldTypeToCmsFieldType[field.type];\n if (!cmsType) {\n throw new Error(`Field type ${field.type} not supported yet`);\n }\n\n const cmsField: collections.Field = {\n key,\n displayName: field.displayName,\n type: cmsType,\n required: field.validation?.required ?? false,\n };\n\n if (field.isPii) {\n cmsField.encrypted = true;\n }\n if (field.helpText) {\n cmsField.description = field.helpText;\n }\n if (field.type === 'NUMBER' && field.validation?.numberRange) {\n cmsField.numberRange = field.validation.numberRange;\n }\n if (field.type === 'SHORT_TEXT' && field.validation?.stringLengthRange) {\n cmsField.stringLengthRange = field.validation.stringLengthRange;\n }\n\n return cmsField;\n };\n\n const buildFieldPatch = (\n fieldId: string,\n updates: Partial<Field>,\n ): collections.Field => {\n const sourceCmsType = findCmsField(fieldId)?.type;\n const patch: collections.Field = { key: fieldId };\n if (updates.displayName !== undefined) {\n patch.displayName = updates.displayName;\n }\n if (updates.isPii !== undefined) {\n patch.encrypted = updates.isPii;\n }\n if (updates.helpText !== undefined) {\n patch.description = updates.helpText;\n }\n if (updates.validation?.required !== undefined) {\n patch.required = updates.validation.required;\n }\n if (updates.validation?.numberRange && sourceCmsType === 'NUMBER') {\n patch.numberRange = updates.validation.numberRange;\n }\n if (updates.validation?.stringLengthRange && sourceCmsType === 'TEXT') {\n patch.stringLengthRange = updates.validation.stringLengthRange;\n }\n return patch;\n };\n\n /**\n * Clones a CMS field for duplication: drops `systemField`/`capabilities` and clears\n * `referencingFieldKey` so the duplicate gets its own backing reference field.\n */\n const cloneFieldDefinition = (\n source: collections.Field,\n newKey: string,\n newDisplayName: string,\n ): collections.Field => {\n const { systemField, capabilities, ...rest } = source;\n const cloned: collections.Field = {\n ...rest,\n key: newKey,\n displayName: newDisplayName,\n };\n if (cloned.typeMetadata?.multiReference?.referencingFieldKey) {\n cloned.typeMetadata = {\n ...cloned.typeMetadata,\n multiReference: {\n ...cloned.typeMetadata.multiReference,\n referencingFieldKey: undefined,\n },\n };\n }\n return cloned;\n };\n\n return {\n addField: async (field: Field) => {\n const cmsField = toCmsField(\n field,\n getFieldKey(existingFieldKeys(), field.displayName),\n );\n const { dataCollection } = await collections.createDataCollectionField(\n collectionId,\n { field: cmsField },\n );\n return fieldsAfterMutation(dataCollection!);\n },\n\n addFields: async (fields: Field[]) => {\n const collection = getCollection();\n if (!collection) {\n throw new Error(`Collection ${collectionId} not found`);\n }\n\n // Callers decide the keys up front (import uploads values under them), so\n // key each new field by its `id` — mapped before any SDK call so an\n // unsupported type throws without a partial write.\n const cmsFields = fields.map((field) => toCmsField(field, field.id));\n\n // One mutation for all new fields: append them to the existing\n // definition. Unlike the field mutations, `updateDataCollection` resolves\n // with the updated collection directly (not wrapped in `{ dataCollection }`).\n const dataCollection = await collections.updateDataCollection({\n ...collection,\n fields: [...(collection.fields ?? []), ...cmsFields],\n });\n return fieldsAfterMutation(dataCollection);\n },\n\n editField: async (fieldId, updates) => {\n const { dataCollection } = await collections.patchDataCollectionField(\n collectionId,\n buildFieldPatch(fieldId, updates),\n );\n return fieldsAfterMutation(dataCollection!);\n },\n\n deleteField: async (fieldId) => {\n const { dataCollection } = await collections.deleteDataCollectionField(\n collectionId,\n { fieldKey: fieldId },\n );\n return fieldsAfterMutation(dataCollection!);\n },\n\n renameField: async (fieldId, newName) => {\n await collections.patchDataCollectionField(\n collectionId,\n buildFieldPatch(fieldId, { displayName: newName }),\n );\n },\n\n makePrimary: async (fieldId) => {\n const { dataCollection } = await collections.patchDataCollection(\n collectionId,\n { displayField: fieldId },\n );\n return fieldsAfterMutation(dataCollection!);\n },\n\n duplicateField: async (fieldId) => {\n const sourceField = findCmsField(fieldId);\n if (!sourceField || !sourceField.type) {\n throw new Error(`Field ${fieldId} not found`);\n }\n const newDisplayName = `${sourceField.displayName ?? fieldId} (Copy)`;\n const newKey = getFieldKey(existingFieldKeys(), newDisplayName);\n const { dataCollection } = await collections.createDataCollectionField(\n collectionId,\n { field: cloneFieldDefinition(sourceField, newKey, newDisplayName) },\n );\n return fieldsAfterMutation(dataCollection!);\n },\n\n duplicateFieldWithContent: async (fieldId) => {\n const sourceField = findCmsField(fieldId);\n if (!sourceField || !sourceField.type) {\n throw new Error(`Field ${fieldId} not found`);\n }\n const newDisplayName = `${sourceField.displayName ?? fieldId} (Copy)`;\n const newKey = getFieldKey(existingFieldKeys(), newDisplayName);\n const { dataCollection } = await collections.createDataCollectionField(\n collectionId,\n { field: cloneFieldDefinition(sourceField, newKey, newDisplayName) },\n );\n const createdTask = await tasks.createTask({\n type: 'COPY_FIELD_DATA',\n copyFieldDataOptions: {\n dataCollectionId: collectionId,\n sourceFieldKey: fieldId,\n targetFieldKey: newKey,\n },\n });\n await waitForCopyTask(createdTask._id!);\n return fieldsAfterMutation(dataCollection!);\n },\n };\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_data","require","_cmsFieldTypeMap","_transformCmsSchema","_getFieldKey","_pollUntilReady","COPY_TASK_POLL_INTERVAL_MS","COPY_TASK_MAX_ATTEMPTS","waitForCopyTask","taskId","pollUntilReady","task","tasks","getTask","status","_task$failures","failure","failures","Error","code","description","filter","Boolean","join","interval","maxAttempts","err","message","createCmsFieldActions","collectionId","getCollection","existingFieldKeys","_getCollection","fields","flatMap","f","key","findCmsField","fieldKey","_getCollection2","find","fieldsAfterMutation","dataCollection","transformCmsSchema","toCmsField","field","_field$validation","_field$validation2","_field$validation3","cmsType","PatternsFieldTypeToCmsFieldType","type","cmsField","displayName","required","validation","isPii","encrypted","helpText","numberRange","stringLengthRange","buildFieldPatch","fieldId","updates","_findCmsField","_updates$validation","_updates$validation2","_updates$validation3","sourceCmsType","patch","undefined","cloneFieldDefinition","source","newKey","newDisplayName","_cloned$typeMetadata","systemField","capabilities","rest","cloned","typeMetadata","multiReference","referencingFieldKey","addField","getFieldKey","collections","createDataCollectionField","addFields","collection","cmsFields","map","id","updateDataCollection","editField","patchDataCollectionField","deleteField","deleteDataCollectionField","renameField","newName","makePrimary","patchDataCollection","displayField","duplicateField","sourceField","duplicateFieldWithContent","createdTask","createTask","copyFieldDataOptions","dataCollectionId","sourceFieldKey","targetFieldKey","_id"],"sources":["../../../src/adapter/createCmsFieldActions.ts"],"sourcesContent":["import { collections, tasks } from '@wix/data';\nimport type { Field } from '@wix/patterns';\nimport type { FieldActions, Schema } from '@wix/patterns/schema';\nimport { PatternsFieldTypeToCmsFieldType } from './cmsFieldTypeMap';\nimport { transformCmsSchema } from './transformCmsSchema';\nimport { getFieldKey } from './getFieldKey';\nimport { pollUntilReady } from './pollUntilReady';\n\nconst COPY_TASK_POLL_INTERVAL_MS = 1000;\nconst COPY_TASK_MAX_ATTEMPTS = 300;\n\n/** Polls a COPY_FIELD_DATA task to completion, mapping the generic poll-timeout error. */\nconst waitForCopyTask = async (taskId: string): Promise<void> => {\n try {\n await pollUntilReady(\n async () => {\n const task = await tasks.getTask(taskId);\n if (task.status === 'FAILED') {\n const failure = task.failures?.[0];\n throw new Error(\n [failure?.code, failure?.description].filter(Boolean).join(': ') ||\n 'Copy field data task failed',\n );\n }\n return task.status === 'COMPLETED';\n },\n {\n interval: COPY_TASK_POLL_INTERVAL_MS,\n maxAttempts: COPY_TASK_MAX_ATTEMPTS,\n },\n );\n } catch (err) {\n if (err instanceof Error && err.message === 'Backup polling timed out') {\n throw new Error('Copy field data task timed out');\n }\n throw err;\n }\n};\n\n/**\n * Builds the `FieldActions` for a CMS collection over `@wix/data`. `getCollection`\n * returns the current raw collection snapshot (for existing keys + source field types).\n */\nexport function createCmsFieldActions(\n collectionId: string,\n getCollection: () => collections.DataCollection | null,\n): FieldActions {\n const existingFieldKeys = (): string[] =>\n getCollection()?.fields?.flatMap((f) => (f.key ? [f.key] : [])) ?? [];\n\n const findCmsField = (fieldKey: string): collections.Field | undefined =>\n getCollection()?.fields?.find((f) => f.key === fieldKey);\n\n // A field mutation returns the updated collection; turn it into the new fields\n // map. The SDK guarantees `dataCollection` on a successful mutation, so there is\n // no missing-collection case to handle here.\n const fieldsAfterMutation = (\n dataCollection: collections.DataCollection,\n ): Schema['fields'] => transformCmsSchema(dataCollection).fields;\n\n // Maps a source-neutral `Field` to a CMS field under the given `key`. Throws\n // for a type with no CMS mapping before any SDK call. Shared by addField (key\n // derived from the display name) and addFields (key = the caller's field.id).\n const toCmsField = (field: Field, key: string): collections.Field => {\n const cmsType = PatternsFieldTypeToCmsFieldType[field.type];\n if (!cmsType) {\n throw new Error(`Field type ${field.type} not supported yet`);\n }\n\n const cmsField: collections.Field = {\n key,\n displayName: field.displayName,\n type: cmsType,\n required: field.validation?.required ?? false,\n };\n\n if (field.isPii) {\n cmsField.encrypted = true;\n }\n if (field.helpText) {\n cmsField.description = field.helpText;\n }\n if (field.type === 'NUMBER' && field.validation?.numberRange) {\n cmsField.numberRange = field.validation.numberRange;\n }\n if (field.type === 'SHORT_TEXT' && field.validation?.stringLengthRange) {\n cmsField.stringLengthRange = field.validation.stringLengthRange;\n }\n\n return cmsField;\n };\n\n const buildFieldPatch = (\n fieldId: string,\n updates: Partial<Field>,\n ): collections.Field => {\n const sourceCmsType = findCmsField(fieldId)?.type;\n const patch: collections.Field = { key: fieldId };\n if (updates.displayName !== undefined) {\n patch.displayName = updates.displayName;\n }\n if (updates.isPii !== undefined) {\n patch.encrypted = updates.isPii;\n }\n if (updates.helpText !== undefined) {\n patch.description = updates.helpText;\n }\n if (updates.validation?.required !== undefined) {\n patch.required = updates.validation.required;\n }\n if (updates.validation?.numberRange && sourceCmsType === 'NUMBER') {\n patch.numberRange = updates.validation.numberRange;\n }\n if (updates.validation?.stringLengthRange && sourceCmsType === 'TEXT') {\n patch.stringLengthRange = updates.validation.stringLengthRange;\n }\n return patch;\n };\n\n /**\n * Clones a CMS field for duplication: drops `systemField`/`capabilities` and clears\n * `referencingFieldKey` so the duplicate gets its own backing reference field.\n */\n const cloneFieldDefinition = (\n source: collections.Field,\n newKey: string,\n newDisplayName: string,\n ): collections.Field => {\n const { systemField, capabilities, ...rest } = source;\n const cloned: collections.Field = {\n ...rest,\n key: newKey,\n displayName: newDisplayName,\n };\n if (cloned.typeMetadata?.multiReference?.referencingFieldKey) {\n cloned.typeMetadata = {\n ...cloned.typeMetadata,\n multiReference: {\n ...cloned.typeMetadata.multiReference,\n referencingFieldKey: undefined,\n },\n };\n }\n return cloned;\n };\n\n return {\n addField: async (field: Field) => {\n const cmsField = toCmsField(\n field,\n getFieldKey(existingFieldKeys(), field.displayName),\n );\n const { dataCollection } = await collections.createDataCollectionField(\n collectionId,\n { field: cmsField },\n );\n return fieldsAfterMutation(dataCollection!);\n },\n\n addFields: async (fields: Field[]) => {\n const collection = getCollection();\n if (!collection) {\n throw new Error(`Collection ${collectionId} not found`);\n }\n\n // Callers decide the keys up front (import uploads values under them), so\n // key each new field by its `id` — mapped before any SDK call so an\n // unsupported type throws without a partial write.\n const cmsFields = fields.map((field) => toCmsField(field, field.id));\n\n // One mutation for all new fields: append them to the existing\n // definition. Unlike the field mutations, `updateDataCollection` resolves\n // with the updated collection directly (not wrapped in `{ dataCollection }`).\n const dataCollection = await collections.updateDataCollection({\n ...collection,\n fields: [...(collection.fields ?? []), ...cmsFields],\n });\n return fieldsAfterMutation(dataCollection);\n },\n\n editField: async (fieldId, updates) => {\n const { dataCollection } = await collections.patchDataCollectionField(\n collectionId,\n buildFieldPatch(fieldId, updates),\n );\n return fieldsAfterMutation(dataCollection!);\n },\n\n deleteField: async (fieldId) => {\n const { dataCollection } = await collections.deleteDataCollectionField(\n collectionId,\n { fieldKey: fieldId },\n );\n return fieldsAfterMutation(dataCollection!);\n },\n\n renameField: async (fieldId, newName) => {\n await collections.patchDataCollectionField(\n collectionId,\n buildFieldPatch(fieldId, { displayName: newName }),\n );\n },\n\n makePrimary: async (fieldId) => {\n const { dataCollection } = await collections.patchDataCollection(\n collectionId,\n { displayField: fieldId },\n );\n return fieldsAfterMutation(dataCollection!);\n },\n\n duplicateField: async (fieldId) => {\n const sourceField = findCmsField(fieldId);\n if (!sourceField || !sourceField.type) {\n throw new Error(`Field ${fieldId} not found`);\n }\n const newDisplayName = `${sourceField.displayName ?? fieldId} (Copy)`;\n const newKey = getFieldKey(existingFieldKeys(), newDisplayName);\n const { dataCollection } = await collections.createDataCollectionField(\n collectionId,\n { field: cloneFieldDefinition(sourceField, newKey, newDisplayName) },\n );\n return fieldsAfterMutation(dataCollection!);\n },\n\n duplicateFieldWithContent: async (fieldId) => {\n const sourceField = findCmsField(fieldId);\n if (!sourceField || !sourceField.type) {\n throw new Error(`Field ${fieldId} not found`);\n }\n const newDisplayName = `${sourceField.displayName ?? fieldId} (Copy)`;\n const newKey = getFieldKey(existingFieldKeys(), newDisplayName);\n const { dataCollection } = await collections.createDataCollectionField(\n collectionId,\n { field: cloneFieldDefinition(sourceField, newKey, newDisplayName) },\n );\n const createdTask = await tasks.createTask({\n type: 'COPY_FIELD_DATA',\n copyFieldDataOptions: {\n dataCollectionId: collectionId,\n sourceFieldKey: fieldId,\n targetFieldKey: newKey,\n },\n });\n await waitForCopyTask(createdTask._id!);\n return fieldsAfterMutation(dataCollection!);\n },\n };\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_http","require","fetchExternalDbConnections","httpClient","data","request","listExternalDatabaseConnections","externalDatabaseConnections","map","conn","namespace","name","capabilities","collectionModificationsSupported","fieldTypes","exports"],"sources":["../../../src/adapter/fetchExternalDbConnections.ts"],"sourcesContent":["import { listExternalDatabaseConnections } from '@wix/bex-utils/@wix/ambassador-data-v1-external-database-connection/http';\nimport type { WixPatternsContainerParams } from '@wix/
|
|
1
|
+
{"version":3,"names":["_http","require","fetchExternalDbConnections","httpClient","data","request","listExternalDatabaseConnections","externalDatabaseConnections","map","conn","namespace","name","capabilities","collectionModificationsSupported","fieldTypes","exports"],"sources":["../../../src/adapter/fetchExternalDbConnections.ts"],"sourcesContent":["import { listExternalDatabaseConnections } from '@wix/bex-utils/@wix/ambassador-data-v1-external-database-connection/http';\nimport type { WixPatternsContainerParams } from '@wix/patterns';\nimport type { ExternalDbConnection } from './cmsPermissions';\n\nexport type { ExternalDbConnection } from './cmsPermissions';\n\ntype HttpClient = WixPatternsContainerParams['httpClient'];\n\n/**\n * Lists the site's external-database connections in the source-neutral\n * `ExternalDbConnection` shape. Ambassador client from the `@wix/bex-utils` bundle via\n * `/http` (not `/builders` — `Error.captureStackTrace` crashes Firefox/Safari).\n */\nexport const fetchExternalDbConnections = async (\n httpClient: HttpClient,\n): Promise<ExternalDbConnection[]> => {\n const { data } = await httpClient.request(\n listExternalDatabaseConnections({}),\n );\n\n return (data.externalDatabaseConnections ?? []).map((conn) => ({\n namespace: conn.name ?? '',\n capabilities: conn.capabilities && {\n collectionModificationsSupported:\n conn.capabilities.collectionModificationsSupported,\n fieldTypes: conn.capabilities.fieldTypes as string[] | undefined,\n },\n }));\n};\n"],"mappings":";;;;AAAA,IAAAA,KAAA,GAAAC,OAAA;AAQA;AACA;AACA;AACA;AACA;AACO,MAAMC,0BAA0B,GAAG,MACxCC,UAAsB,IACc;EACpC,MAAM;IAAEC;EAAK,CAAC,GAAG,MAAMD,UAAU,CAACE,OAAO,CACvC,IAAAC,qCAA+B,EAAC,CAAC,CAAC,CACpC,CAAC;EAED,OAAO,CAACF,IAAI,CAACG,2BAA2B,IAAI,EAAE,EAAEC,GAAG,CAAEC,IAAI,KAAM;IAC7DC,SAAS,EAAED,IAAI,CAACE,IAAI,IAAI,EAAE;IAC1BC,YAAY,EAAEH,IAAI,CAACG,YAAY,IAAI;MACjCC,gCAAgC,EAC9BJ,IAAI,CAACG,YAAY,CAACC,gCAAgC;MACpDC,UAAU,EAAEL,IAAI,CAACG,YAAY,CAACE;IAChC;EACF,CAAC,CAAC,CAAC;AACL,CAAC;AAACC,OAAA,CAAAb,0BAAA,GAAAA,0BAAA","ignoreList":[]}
|
|
@@ -3,16 +3,16 @@
|
|
|
3
3
|
exports.__esModule = true;
|
|
4
4
|
exports.addFiltersToDataQuery = addFiltersToDataQuery;
|
|
5
5
|
var _data = require("@wix/data");
|
|
6
|
-
var
|
|
6
|
+
var _patterns = require("@wix/patterns");
|
|
7
7
|
var _constants = require("./constants");
|
|
8
|
-
// FilterOperator is a real runtime enum
|
|
8
|
+
// FilterOperator is a real runtime enum (a value import, not type-only).
|
|
9
9
|
|
|
10
10
|
const FilterPropToMethod = {
|
|
11
11
|
from: 'ge',
|
|
12
12
|
to: 'le',
|
|
13
|
-
[
|
|
14
|
-
[
|
|
15
|
-
[
|
|
13
|
+
[_patterns.FilterOperator.CONTAINS]: 'contains',
|
|
14
|
+
[_patterns.FilterOperator.IS_EMPTY]: 'isEmpty',
|
|
15
|
+
[_patterns.FilterOperator.EXISTS]: 'isNotEmpty'
|
|
16
16
|
};
|
|
17
17
|
function isValidFilterProp(prop) {
|
|
18
18
|
return prop in FilterPropToMethod;
|
|
@@ -43,7 +43,7 @@ const isSupportedOperator = (fields, filterProp, filterKey) => {
|
|
|
43
43
|
*/
|
|
44
44
|
const getQueryFieldId = (fieldId, fieldType, operator) => {
|
|
45
45
|
const isAddressField = fieldType === 'ADDRESS';
|
|
46
|
-
const isExistenceOperator = operator ===
|
|
46
|
+
const isExistenceOperator = operator === _patterns.FilterOperator.IS_EMPTY || operator === _patterns.FilterOperator.EXISTS;
|
|
47
47
|
return isAddressField && !isExistenceOperator ? `${fieldId}.formatted` : fieldId;
|
|
48
48
|
};
|
|
49
49
|
function addFiltersToDataQuery({
|
|
@@ -93,7 +93,7 @@ function addFiltersToDataQuery({
|
|
|
93
93
|
if (operatorFilter.operator) {
|
|
94
94
|
var _fields$fieldId3;
|
|
95
95
|
const queryFieldId = getQueryFieldId(fieldId, (_fields$fieldId3 = fields[fieldId]) == null ? void 0 : _fields$fieldId3.type, operatorFilter.operator);
|
|
96
|
-
if (operatorFilter.operator ===
|
|
96
|
+
if (operatorFilter.operator === _patterns.FilterOperator.NOT_CONTAINS) {
|
|
97
97
|
const containsFilter = _data.items.filter().contains(queryFieldId, operatorFilter.value);
|
|
98
98
|
dataQueryWithFilters = dataQueryWithFilters.not(containsFilter);
|
|
99
99
|
} else {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_data","require","_bexCore","_constants","FilterPropToMethod","from","to","FilterOperator","CONTAINS","IS_EMPTY","EXISTS","isValidFilterProp","prop","getOperatorForFilter","undefined","isSupportedOperator","fields","filterProp","filterKey","_field$capabilities","field","operator","FilterPropToOperator","supportedOperators","capabilities","supportedQueryOperators","includes","getQueryFieldId","fieldId","fieldType","isAddressField","isExistenceOperator","addFiltersToDataQuery","dataQuery","query","dataQueryWithFilters","filters","filter","Array","isArray","_fields$fieldId","_fields$fieldId2","filterArray","type","some","item","id","BooleanFilters","checked","eq","falseFilter","items","undefinedFilter","and","or","HAS_VALUE_FILTER_TYPES","wantsHasValue","HasValueFilters","hasValue","wantsNoValue","noValue","isNotEmpty","isEmpty","hasSome","map","operatorFilter","_fields$fieldId3","queryFieldId","NOT_CONTAINS","containsFilter","contains","value","not","filterObj"],"sources":["../../../src/adapter/filterUtils.ts"],"sourcesContent":["import { items } from '@wix/data';\n// FilterOperator is a real runtime enum exported from @wix/bex-core (not cairo).\nimport { FilterOperator } from '@wix/bex-core';\nimport type { OffsetQuery, Schema } from '@wix/bex-core';\nimport {\n BooleanFilters,\n FilterProp,\n FilterPropToOperator,\n HasValueFilters,\n HAS_VALUE_FILTER_TYPES,\n} from './constants';\n\ntype SchemaFields = Schema['fields'];\n\nexport type CmsOperatorMethod =\n | 'ge'\n | 'le'\n | 'contains'\n | 'isEmpty'\n | 'isNotEmpty';\n\nconst FilterPropToMethod: Partial<\n Record<FilterProp | FilterOperator, CmsOperatorMethod>\n> = {\n from: 'ge',\n to: 'le',\n [FilterOperator.CONTAINS]: 'contains',\n [FilterOperator.IS_EMPTY]: 'isEmpty',\n [FilterOperator.EXISTS]: 'isNotEmpty',\n};\n\nfunction isValidFilterProp(prop: string): prop is FilterProp {\n return prop in FilterPropToMethod;\n}\n\nfunction getOperatorForFilter(prop: string): CmsOperatorMethod | undefined {\n if (isValidFilterProp(prop)) {\n return FilterPropToMethod[prop];\n }\n return undefined;\n}\n\nconst isSupportedOperator = (\n fields: SchemaFields,\n filterProp: string,\n filterKey: string,\n) => {\n const field = fields[filterKey];\n if (!field) {\n return false;\n }\n\n if (!isValidFilterProp(filterProp)) {\n return false;\n }\n\n const operator = FilterPropToOperator[filterProp];\n const supportedOperators = field.capabilities?.supportedQueryOperators;\n return supportedOperators?.includes(operator);\n};\n\n/**\n * ADDRESS text operators query the `.formatted` nested property; existence operators\n * (IS_EMPTY/EXISTS) query the field directly.\n */\nconst getQueryFieldId = (\n fieldId: string,\n fieldType: string | undefined,\n operator: FilterOperator,\n): string => {\n const isAddressField = fieldType === 'ADDRESS';\n const isExistenceOperator =\n operator === FilterOperator.IS_EMPTY || operator === FilterOperator.EXISTS;\n\n return isAddressField && !isExistenceOperator\n ? `${fieldId}.formatted`\n : fieldId;\n};\n\nexport function addFiltersToDataQuery({\n dataQuery,\n query,\n fields,\n}: {\n dataQuery: items.WixDataQuery;\n query: OffsetQuery;\n fields: SchemaFields;\n}) {\n let dataQueryWithFilters = dataQuery;\n const { filters } = query;\n for (const fieldId in filters) {\n // Skip filters for keys that aren't fields in the loaded schema (stale URL\n // state, a deleted field) — otherwise the query hits an unknown field.\n if (!fields[fieldId]) {\n continue;\n }\n const filter = filters[fieldId];\n if (!filter) {\n continue;\n }\n\n if (Array.isArray(filter)) {\n const filterArray = filter as { id?: unknown }[];\n if (fields[fieldId]?.type === 'BOOLEAN') {\n if (filterArray.some((item) => item.id === BooleanFilters.checked)) {\n dataQueryWithFilters = dataQueryWithFilters.eq(fieldId, true);\n } else {\n const falseFilter = items.filter().eq(fieldId, false);\n const undefinedFilter = items.filter().eq(fieldId, undefined);\n dataQueryWithFilters = dataQueryWithFilters.and(\n falseFilter.or(undefinedFilter),\n );\n }\n } else if (\n fields[fieldId]?.type &&\n HAS_VALUE_FILTER_TYPES.includes(fields[fieldId]!.type)\n ) {\n const wantsHasValue = filterArray.some(\n (item) => item.id === HasValueFilters.hasValue,\n );\n const wantsNoValue = filterArray.some(\n (item) => item.id === HasValueFilters.noValue,\n );\n // Apply only when exactly one option is selected.\n if (wantsHasValue && !wantsNoValue) {\n dataQueryWithFilters = dataQueryWithFilters.isNotEmpty(fieldId);\n } else if (wantsNoValue && !wantsHasValue) {\n dataQueryWithFilters = dataQueryWithFilters.isEmpty(fieldId);\n }\n } else {\n dataQueryWithFilters = dataQueryWithFilters.hasSome(\n fieldId,\n filterArray.map((item) => item.id) as string[],\n );\n }\n } else if (typeof filter === 'object') {\n const operatorFilter = filter as {\n operator?: FilterOperator;\n value?: unknown;\n };\n if (operatorFilter.operator) {\n const queryFieldId = getQueryFieldId(\n fieldId,\n fields[fieldId]?.type,\n operatorFilter.operator,\n );\n\n if (operatorFilter.operator === FilterOperator.NOT_CONTAINS) {\n const containsFilter = items\n .filter()\n .contains(queryFieldId, operatorFilter.value as string);\n dataQueryWithFilters = dataQueryWithFilters.not(containsFilter);\n } else {\n const operator = getOperatorForFilter(operatorFilter.operator);\n if (operator) {\n if (operator === 'isEmpty' || operator === 'isNotEmpty') {\n dataQueryWithFilters = dataQueryWithFilters[operator](fieldId);\n } else {\n dataQueryWithFilters = dataQueryWithFilters[operator](\n queryFieldId,\n operatorFilter.value as string,\n );\n }\n }\n }\n }\n const filterObj = filter as Record<string, unknown>;\n for (const filterProp in filterObj) {\n const operator = getOperatorForFilter(filterProp);\n if (\n operator &&\n typeof dataQuery[operator] === 'function' &&\n isSupportedOperator(fields, filterProp, fieldId)\n ) {\n const value = filterObj[filterProp];\n if (value !== undefined && value !== null) {\n dataQueryWithFilters = dataQueryWithFilters[operator](\n fieldId,\n value as string,\n );\n }\n }\n }\n }\n }\n\n return dataQueryWithFilters;\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_data","require","_patterns","_constants","FilterPropToMethod","from","to","FilterOperator","CONTAINS","IS_EMPTY","EXISTS","isValidFilterProp","prop","getOperatorForFilter","undefined","isSupportedOperator","fields","filterProp","filterKey","_field$capabilities","field","operator","FilterPropToOperator","supportedOperators","capabilities","supportedQueryOperators","includes","getQueryFieldId","fieldId","fieldType","isAddressField","isExistenceOperator","addFiltersToDataQuery","dataQuery","query","dataQueryWithFilters","filters","filter","Array","isArray","_fields$fieldId","_fields$fieldId2","filterArray","type","some","item","id","BooleanFilters","checked","eq","falseFilter","items","undefinedFilter","and","or","HAS_VALUE_FILTER_TYPES","wantsHasValue","HasValueFilters","hasValue","wantsNoValue","noValue","isNotEmpty","isEmpty","hasSome","map","operatorFilter","_fields$fieldId3","queryFieldId","NOT_CONTAINS","containsFilter","contains","value","not","filterObj"],"sources":["../../../src/adapter/filterUtils.ts"],"sourcesContent":["import { items } from '@wix/data';\n// FilterOperator is a real runtime enum (a value import, not type-only).\nimport { FilterOperator } from '@wix/patterns';\nimport type { OffsetQuery } from '@wix/patterns';\nimport type { Schema } from '@wix/patterns/schema';\nimport {\n BooleanFilters,\n FilterProp,\n FilterPropToOperator,\n HasValueFilters,\n HAS_VALUE_FILTER_TYPES,\n} from './constants';\n\ntype SchemaFields = Schema['fields'];\n\nexport type CmsOperatorMethod =\n | 'ge'\n | 'le'\n | 'contains'\n | 'isEmpty'\n | 'isNotEmpty';\n\nconst FilterPropToMethod: Partial<\n Record<FilterProp | FilterOperator, CmsOperatorMethod>\n> = {\n from: 'ge',\n to: 'le',\n [FilterOperator.CONTAINS]: 'contains',\n [FilterOperator.IS_EMPTY]: 'isEmpty',\n [FilterOperator.EXISTS]: 'isNotEmpty',\n};\n\nfunction isValidFilterProp(prop: string): prop is FilterProp {\n return prop in FilterPropToMethod;\n}\n\nfunction getOperatorForFilter(prop: string): CmsOperatorMethod | undefined {\n if (isValidFilterProp(prop)) {\n return FilterPropToMethod[prop];\n }\n return undefined;\n}\n\nconst isSupportedOperator = (\n fields: SchemaFields,\n filterProp: string,\n filterKey: string,\n) => {\n const field = fields[filterKey];\n if (!field) {\n return false;\n }\n\n if (!isValidFilterProp(filterProp)) {\n return false;\n }\n\n const operator = FilterPropToOperator[filterProp];\n const supportedOperators = field.capabilities?.supportedQueryOperators;\n return supportedOperators?.includes(operator);\n};\n\n/**\n * ADDRESS text operators query the `.formatted` nested property; existence operators\n * (IS_EMPTY/EXISTS) query the field directly.\n */\nconst getQueryFieldId = (\n fieldId: string,\n fieldType: string | undefined,\n operator: FilterOperator,\n): string => {\n const isAddressField = fieldType === 'ADDRESS';\n const isExistenceOperator =\n operator === FilterOperator.IS_EMPTY || operator === FilterOperator.EXISTS;\n\n return isAddressField && !isExistenceOperator\n ? `${fieldId}.formatted`\n : fieldId;\n};\n\nexport function addFiltersToDataQuery({\n dataQuery,\n query,\n fields,\n}: {\n dataQuery: items.WixDataQuery;\n query: OffsetQuery;\n fields: SchemaFields;\n}) {\n let dataQueryWithFilters = dataQuery;\n const { filters } = query;\n for (const fieldId in filters) {\n // Skip filters for keys that aren't fields in the loaded schema (stale URL\n // state, a deleted field) — otherwise the query hits an unknown field.\n if (!fields[fieldId]) {\n continue;\n }\n const filter = filters[fieldId];\n if (!filter) {\n continue;\n }\n\n if (Array.isArray(filter)) {\n const filterArray = filter as { id?: unknown }[];\n if (fields[fieldId]?.type === 'BOOLEAN') {\n if (filterArray.some((item) => item.id === BooleanFilters.checked)) {\n dataQueryWithFilters = dataQueryWithFilters.eq(fieldId, true);\n } else {\n const falseFilter = items.filter().eq(fieldId, false);\n const undefinedFilter = items.filter().eq(fieldId, undefined);\n dataQueryWithFilters = dataQueryWithFilters.and(\n falseFilter.or(undefinedFilter),\n );\n }\n } else if (\n fields[fieldId]?.type &&\n HAS_VALUE_FILTER_TYPES.includes(fields[fieldId]!.type)\n ) {\n const wantsHasValue = filterArray.some(\n (item) => item.id === HasValueFilters.hasValue,\n );\n const wantsNoValue = filterArray.some(\n (item) => item.id === HasValueFilters.noValue,\n );\n // Apply only when exactly one option is selected.\n if (wantsHasValue && !wantsNoValue) {\n dataQueryWithFilters = dataQueryWithFilters.isNotEmpty(fieldId);\n } else if (wantsNoValue && !wantsHasValue) {\n dataQueryWithFilters = dataQueryWithFilters.isEmpty(fieldId);\n }\n } else {\n dataQueryWithFilters = dataQueryWithFilters.hasSome(\n fieldId,\n filterArray.map((item) => item.id) as string[],\n );\n }\n } else if (typeof filter === 'object') {\n const operatorFilter = filter as {\n operator?: FilterOperator;\n value?: unknown;\n };\n if (operatorFilter.operator) {\n const queryFieldId = getQueryFieldId(\n fieldId,\n fields[fieldId]?.type,\n operatorFilter.operator,\n );\n\n if (operatorFilter.operator === FilterOperator.NOT_CONTAINS) {\n const containsFilter = items\n .filter()\n .contains(queryFieldId, operatorFilter.value as string);\n dataQueryWithFilters = dataQueryWithFilters.not(containsFilter);\n } else {\n const operator = getOperatorForFilter(operatorFilter.operator);\n if (operator) {\n if (operator === 'isEmpty' || operator === 'isNotEmpty') {\n dataQueryWithFilters = dataQueryWithFilters[operator](fieldId);\n } else {\n dataQueryWithFilters = dataQueryWithFilters[operator](\n queryFieldId,\n operatorFilter.value as string,\n );\n }\n }\n }\n }\n const filterObj = filter as Record<string, unknown>;\n for (const filterProp in filterObj) {\n const operator = getOperatorForFilter(filterProp);\n if (\n operator &&\n typeof dataQuery[operator] === 'function' &&\n isSupportedOperator(fields, filterProp, fieldId)\n ) {\n const value = filterObj[filterProp];\n if (value !== undefined && value !== null) {\n dataQueryWithFilters = dataQueryWithFilters[operator](\n fieldId,\n value as string,\n );\n }\n }\n }\n }\n }\n\n return dataQueryWithFilters;\n}\n"],"mappings":";;;;AAAA,IAAAA,KAAA,GAAAC,OAAA;AAEA,IAAAC,SAAA,GAAAD,OAAA;AAGA,IAAAE,UAAA,GAAAF,OAAA;AAJA;;AAqBA,MAAMG,kBAEL,GAAG;EACFC,IAAI,EAAE,IAAI;EACVC,EAAE,EAAE,IAAI;EACR,CAACC,wBAAc,CAACC,QAAQ,GAAG,UAAU;EACrC,CAACD,wBAAc,CAACE,QAAQ,GAAG,SAAS;EACpC,CAACF,wBAAc,CAACG,MAAM,GAAG;AAC3B,CAAC;AAED,SAASC,iBAAiBA,CAACC,IAAY,EAAsB;EAC3D,OAAOA,IAAI,IAAIR,kBAAkB;AACnC;AAEA,SAASS,oBAAoBA,CAACD,IAAY,EAAiC;EACzE,IAAID,iBAAiB,CAACC,IAAI,CAAC,EAAE;IAC3B,OAAOR,kBAAkB,CAACQ,IAAI,CAAC;EACjC;EACA,OAAOE,SAAS;AAClB;AAEA,MAAMC,mBAAmB,GAAGA,CAC1BC,MAAoB,EACpBC,UAAkB,EAClBC,SAAiB,KACd;EAAA,IAAAC,mBAAA;EACH,MAAMC,KAAK,GAAGJ,MAAM,CAACE,SAAS,CAAC;EAC/B,IAAI,CAACE,KAAK,EAAE;IACV,OAAO,KAAK;EACd;EAEA,IAAI,CAACT,iBAAiB,CAACM,UAAU,CAAC,EAAE;IAClC,OAAO,KAAK;EACd;EAEA,MAAMI,QAAQ,GAAGC,+BAAoB,CAACL,UAAU,CAAC;EACjD,MAAMM,kBAAkB,IAAAJ,mBAAA,GAAGC,KAAK,CAACI,YAAY,qBAAlBL,mBAAA,CAAoBM,uBAAuB;EACtE,OAAOF,kBAAkB,oBAAlBA,kBAAkB,CAAEG,QAAQ,CAACL,QAAQ,CAAC;AAC/C,CAAC;;AAED;AACA;AACA;AACA;AACA,MAAMM,eAAe,GAAGA,CACtBC,OAAe,EACfC,SAA6B,EAC7BR,QAAwB,KACb;EACX,MAAMS,cAAc,GAAGD,SAAS,KAAK,SAAS;EAC9C,MAAME,mBAAmB,GACvBV,QAAQ,KAAKd,wBAAc,CAACE,QAAQ,IAAIY,QAAQ,KAAKd,wBAAc,CAACG,MAAM;EAE5E,OAAOoB,cAAc,IAAI,CAACC,mBAAmB,GACzC,GAAGH,OAAO,YAAY,GACtBA,OAAO;AACb,CAAC;AAEM,SAASI,qBAAqBA,CAAC;EACpCC,SAAS;EACTC,KAAK;EACLlB;AAKF,CAAC,EAAE;EACD,IAAImB,oBAAoB,GAAGF,SAAS;EACpC,MAAM;IAAEG;EAAQ,CAAC,GAAGF,KAAK;EACzB,KAAK,MAAMN,OAAO,IAAIQ,OAAO,EAAE;IAC7B;IACA;IACA,IAAI,CAACpB,MAAM,CAACY,OAAO,CAAC,EAAE;MACpB;IACF;IACA,MAAMS,MAAM,GAAGD,OAAO,CAACR,OAAO,CAAC;IAC/B,IAAI,CAACS,MAAM,EAAE;MACX;IACF;IAEA,IAAIC,KAAK,CAACC,OAAO,CAACF,MAAM,CAAC,EAAE;MAAA,IAAAG,eAAA,EAAAC,gBAAA;MACzB,MAAMC,WAAW,GAAGL,MAA4B;MAChD,IAAI,EAAAG,eAAA,GAAAxB,MAAM,CAACY,OAAO,CAAC,qBAAfY,eAAA,CAAiBG,IAAI,MAAK,SAAS,EAAE;QACvC,IAAID,WAAW,CAACE,IAAI,CAAEC,IAAI,IAAKA,IAAI,CAACC,EAAE,KAAKC,yBAAc,CAACC,OAAO,CAAC,EAAE;UAClEb,oBAAoB,GAAGA,oBAAoB,CAACc,EAAE,CAACrB,OAAO,EAAE,IAAI,CAAC;QAC/D,CAAC,MAAM;UACL,MAAMsB,WAAW,GAAGC,WAAK,CAACd,MAAM,CAAC,CAAC,CAACY,EAAE,CAACrB,OAAO,EAAE,KAAK,CAAC;UACrD,MAAMwB,eAAe,GAAGD,WAAK,CAACd,MAAM,CAAC,CAAC,CAACY,EAAE,CAACrB,OAAO,EAAEd,SAAS,CAAC;UAC7DqB,oBAAoB,GAAGA,oBAAoB,CAACkB,GAAG,CAC7CH,WAAW,CAACI,EAAE,CAACF,eAAe,CAChC,CAAC;QACH;MACF,CAAC,MAAM,IACL,CAAAX,gBAAA,GAAAzB,MAAM,CAACY,OAAO,CAAC,aAAfa,gBAAA,CAAiBE,IAAI,IACrBY,iCAAsB,CAAC7B,QAAQ,CAACV,MAAM,CAACY,OAAO,CAAC,CAAEe,IAAI,CAAC,EACtD;QACA,MAAMa,aAAa,GAAGd,WAAW,CAACE,IAAI,CACnCC,IAAI,IAAKA,IAAI,CAACC,EAAE,KAAKW,0BAAe,CAACC,QACxC,CAAC;QACD,MAAMC,YAAY,GAAGjB,WAAW,CAACE,IAAI,CAClCC,IAAI,IAAKA,IAAI,CAACC,EAAE,KAAKW,0BAAe,CAACG,OACxC,CAAC;QACD;QACA,IAAIJ,aAAa,IAAI,CAACG,YAAY,EAAE;UAClCxB,oBAAoB,GAAGA,oBAAoB,CAAC0B,UAAU,CAACjC,OAAO,CAAC;QACjE,CAAC,MAAM,IAAI+B,YAAY,IAAI,CAACH,aAAa,EAAE;UACzCrB,oBAAoB,GAAGA,oBAAoB,CAAC2B,OAAO,CAAClC,OAAO,CAAC;QAC9D;MACF,CAAC,MAAM;QACLO,oBAAoB,GAAGA,oBAAoB,CAAC4B,OAAO,CACjDnC,OAAO,EACPc,WAAW,CAACsB,GAAG,CAAEnB,IAAI,IAAKA,IAAI,CAACC,EAAE,CACnC,CAAC;MACH;IACF,CAAC,MAAM,IAAI,OAAOT,MAAM,KAAK,QAAQ,EAAE;MACrC,MAAM4B,cAAc,GAAG5B,MAGtB;MACD,IAAI4B,cAAc,CAAC5C,QAAQ,EAAE;QAAA,IAAA6C,gBAAA;QAC3B,MAAMC,YAAY,GAAGxC,eAAe,CAClCC,OAAO,GAAAsC,gBAAA,GACPlD,MAAM,CAACY,OAAO,CAAC,qBAAfsC,gBAAA,CAAiBvB,IAAI,EACrBsB,cAAc,CAAC5C,QACjB,CAAC;QAED,IAAI4C,cAAc,CAAC5C,QAAQ,KAAKd,wBAAc,CAAC6D,YAAY,EAAE;UAC3D,MAAMC,cAAc,GAAGlB,WAAK,CACzBd,MAAM,CAAC,CAAC,CACRiC,QAAQ,CAACH,YAAY,EAAEF,cAAc,CAACM,KAAe,CAAC;UACzDpC,oBAAoB,GAAGA,oBAAoB,CAACqC,GAAG,CAACH,cAAc,CAAC;QACjE,CAAC,MAAM;UACL,MAAMhD,QAAQ,GAAGR,oBAAoB,CAACoD,cAAc,CAAC5C,QAAQ,CAAC;UAC9D,IAAIA,QAAQ,EAAE;YACZ,IAAIA,QAAQ,KAAK,SAAS,IAAIA,QAAQ,KAAK,YAAY,EAAE;cACvDc,oBAAoB,GAAGA,oBAAoB,CAACd,QAAQ,CAAC,CAACO,OAAO,CAAC;YAChE,CAAC,MAAM;cACLO,oBAAoB,GAAGA,oBAAoB,CAACd,QAAQ,CAAC,CACnD8C,YAAY,EACZF,cAAc,CAACM,KACjB,CAAC;YACH;UACF;QACF;MACF;MACA,MAAME,SAAS,GAAGpC,MAAiC;MACnD,KAAK,MAAMpB,UAAU,IAAIwD,SAAS,EAAE;QAClC,MAAMpD,QAAQ,GAAGR,oBAAoB,CAACI,UAAU,CAAC;QACjD,IACEI,QAAQ,IACR,OAAOY,SAAS,CAACZ,QAAQ,CAAC,KAAK,UAAU,IACzCN,mBAAmB,CAACC,MAAM,EAAEC,UAAU,EAAEW,OAAO,CAAC,EAChD;UACA,MAAM2C,KAAK,GAAGE,SAAS,CAACxD,UAAU,CAAC;UACnC,IAAIsD,KAAK,KAAKzD,SAAS,IAAIyD,KAAK,KAAK,IAAI,EAAE;YACzCpC,oBAAoB,GAAGA,oBAAoB,CAACd,QAAQ,CAAC,CACnDO,OAAO,EACP2C,KACF,CAAC;UACH;QACF;MACF;IACF;EACF;EAEA,OAAOpC,oBAAoB;AAC7B","ignoreList":[]}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
exports.__esModule = true;
|
|
4
|
-
exports.transformCmsSchema = exports.pollUntilReady = exports.listCmsCollections = exports.getFieldKey = exports.fetchUserPermissions = exports.fetchExternalDbConnections = exports.fetchCmsCollection = exports.
|
|
4
|
+
exports.useCmsSchemaSource = exports.transformCmsSchema = exports.pollUntilReady = exports.listCmsCollections = exports.getFieldKey = exports.fetchUserPermissions = exports.fetchExternalDbConnections = exports.fetchCmsCollection = exports.createCmsSchemaLoader = exports.createCmsFieldActions = exports.createCmsBackupConfig = exports.createCmsBackend = exports.computeCmsPermissions = exports.addSortToDataQuery = exports.addSearchToDataQuery = exports.addFiltersToDataQuery = exports.PatternsFieldTypeToCmsFieldType = exports.CmsFieldTypeToPatternsFieldType = exports.CMS_EMAIL_TYPE = void 0;
|
|
5
5
|
var _loadCmsSchema = require("./loadCmsSchema");
|
|
6
6
|
exports.createCmsSchemaLoader = _loadCmsSchema.createCmsSchemaLoader;
|
|
7
7
|
exports.fetchCmsCollection = _loadCmsSchema.fetchCmsCollection;
|
|
8
|
-
var
|
|
9
|
-
exports.
|
|
8
|
+
var _useCmsSchemaSource = require("./useCmsSchemaSource");
|
|
9
|
+
exports.useCmsSchemaSource = _useCmsSchemaSource.useCmsSchemaSource;
|
|
10
10
|
var _listCmsCollections = require("./listCmsCollections");
|
|
11
11
|
exports.listCmsCollections = _listCmsCollections.listCmsCollections;
|
|
12
12
|
var _transformCmsSchema = require("./transformCmsSchema");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_loadCmsSchema","require","exports","createCmsSchemaLoader","fetchCmsCollection","
|
|
1
|
+
{"version":3,"names":["_loadCmsSchema","require","exports","createCmsSchemaLoader","fetchCmsCollection","_useCmsSchemaSource","useCmsSchemaSource","_listCmsCollections","listCmsCollections","_transformCmsSchema","transformCmsSchema","_createCmsBackend","createCmsBackend","_createCmsFieldActions","createCmsFieldActions","_cmsPermissions","computeCmsPermissions","_cmsFieldTypeMap","CmsFieldTypeToPatternsFieldType","PatternsFieldTypeToCmsFieldType","CMS_EMAIL_TYPE","_filterUtils","addFiltersToDataQuery","_searchUtils","addSearchToDataQuery","_sortUtils","addSortToDataQuery","_getFieldKey","getFieldKey","_cmsBackup","createCmsBackupConfig","_pollUntilReady","pollUntilReady","_fetchExternalDbConnections","fetchExternalDbConnections","_fetchUserPermissions","fetchUserPermissions"],"sources":["../../../src/adapter/index.ts"],"sourcesContent":["export {\n createCmsSchemaLoader,\n fetchCmsCollection,\n type CreateCmsSchemaLoaderDeps,\n} from './loadCmsSchema';\nexport {\n useCmsSchemaSource,\n type UseCmsSchemaSourceDeps,\n} from './useCmsSchemaSource';\nexport {\n listCmsCollections,\n type CmsCollectionSummary,\n} from './listCmsCollections';\nexport {\n transformCmsSchema,\n type TransformCmsSchemaOptions,\n} from './transformCmsSchema';\nexport { createCmsBackend } from './createCmsBackend';\nexport { createCmsFieldActions } from './createCmsFieldActions';\nexport {\n computeCmsPermissions,\n type CmsPermissions,\n type ExternalDbConnection,\n} from './cmsPermissions';\nexport {\n CmsFieldTypeToPatternsFieldType,\n PatternsFieldTypeToCmsFieldType,\n CMS_EMAIL_TYPE,\n} from './cmsFieldTypeMap';\nexport { addFiltersToDataQuery } from './filterUtils';\nexport { addSearchToDataQuery } from './searchUtils';\nexport { addSortToDataQuery } from './sortUtils';\nexport { getFieldKey } from './getFieldKey';\nexport { createCmsBackupConfig } from './cmsBackup';\nexport { pollUntilReady, type PollOptions } from './pollUntilReady';\nexport { fetchExternalDbConnections } from './fetchExternalDbConnections';\nexport { fetchUserPermissions } from './fetchUserPermissions';\n"],"mappings":";;;;AAAA,IAAAA,cAAA,GAAAC,OAAA;AAIyBC,OAAA,CAAAC,qBAAA,GAAAH,cAAA,CAAAG,qBAAA;AAAAD,OAAA,CAAAE,kBAAA,GAAAJ,cAAA,CAAAI,kBAAA;AACzB,IAAAC,mBAAA,GAAAJ,OAAA;AAG8BC,OAAA,CAAAI,kBAAA,GAAAD,mBAAA,CAAAC,kBAAA;AAC9B,IAAAC,mBAAA,GAAAN,OAAA;AAG8BC,OAAA,CAAAM,kBAAA,GAAAD,mBAAA,CAAAC,kBAAA;AAC9B,IAAAC,mBAAA,GAAAR,OAAA;AAG8BC,OAAA,CAAAQ,kBAAA,GAAAD,mBAAA,CAAAC,kBAAA;AAC9B,IAAAC,iBAAA,GAAAV,OAAA;AAAsDC,OAAA,CAAAU,gBAAA,GAAAD,iBAAA,CAAAC,gBAAA;AACtD,IAAAC,sBAAA,GAAAZ,OAAA;AAAgEC,OAAA,CAAAY,qBAAA,GAAAD,sBAAA,CAAAC,qBAAA;AAChE,IAAAC,eAAA,GAAAd,OAAA;AAI0BC,OAAA,CAAAc,qBAAA,GAAAD,eAAA,CAAAC,qBAAA;AAC1B,IAAAC,gBAAA,GAAAhB,OAAA;AAI2BC,OAAA,CAAAgB,+BAAA,GAAAD,gBAAA,CAAAC,+BAAA;AAAAhB,OAAA,CAAAiB,+BAAA,GAAAF,gBAAA,CAAAE,+BAAA;AAAAjB,OAAA,CAAAkB,cAAA,GAAAH,gBAAA,CAAAG,cAAA;AAC3B,IAAAC,YAAA,GAAApB,OAAA;AAAsDC,OAAA,CAAAoB,qBAAA,GAAAD,YAAA,CAAAC,qBAAA;AACtD,IAAAC,YAAA,GAAAtB,OAAA;AAAqDC,OAAA,CAAAsB,oBAAA,GAAAD,YAAA,CAAAC,oBAAA;AACrD,IAAAC,UAAA,GAAAxB,OAAA;AAAiDC,OAAA,CAAAwB,kBAAA,GAAAD,UAAA,CAAAC,kBAAA;AACjD,IAAAC,YAAA,GAAA1B,OAAA;AAA4CC,OAAA,CAAA0B,WAAA,GAAAD,YAAA,CAAAC,WAAA;AAC5C,IAAAC,UAAA,GAAA5B,OAAA;AAAoDC,OAAA,CAAA4B,qBAAA,GAAAD,UAAA,CAAAC,qBAAA;AACpD,IAAAC,eAAA,GAAA9B,OAAA;AAAoEC,OAAA,CAAA8B,cAAA,GAAAD,eAAA,CAAAC,cAAA;AACpE,IAAAC,2BAAA,GAAAhC,OAAA;AAA0EC,OAAA,CAAAgC,0BAAA,GAAAD,2BAAA,CAAAC,0BAAA;AAC1E,IAAAC,qBAAA,GAAAlC,OAAA;AAA8DC,OAAA,CAAAkC,oBAAA,GAAAD,qBAAA,CAAAC,oBAAA","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_data","require","_essentials","_transformCmsSchema","_createCmsBackend","_createCmsFieldActions","_fetchExternalDbConnections","_fetchUserPermissions","fetchCmsCollection","collectionId","errorHandler","withErrorHandler","collections","getDataCollection","includeAllowedDataPermissions","createCmsSchemaLoader","deps","httpClient","includeUserPermissions","metasiteId","undefined","rawCollection","userPermissions","externalDbConnections","Promise","all","resolve","fetchUserPermissions","catch","fetchExternalDbConnections","schema","transformCmsSchema","backend","createCmsBackend","fields","fieldActions","createCmsFieldActions"],"sources":["../../../src/adapter/loadCmsSchema.ts"],"sourcesContent":["import { collections } from '@wix/data';\nimport { errorHandler } from '@wix/essentials';\nimport type {
|
|
1
|
+
{"version":3,"names":["_data","require","_essentials","_transformCmsSchema","_createCmsBackend","_createCmsFieldActions","_fetchExternalDbConnections","_fetchUserPermissions","fetchCmsCollection","collectionId","errorHandler","withErrorHandler","collections","getDataCollection","includeAllowedDataPermissions","createCmsSchemaLoader","deps","httpClient","includeUserPermissions","metasiteId","undefined","rawCollection","userPermissions","externalDbConnections","Promise","all","resolve","fetchUserPermissions","catch","fetchExternalDbConnections","schema","transformCmsSchema","backend","createCmsBackend","fields","fieldActions","createCmsFieldActions"],"sources":["../../../src/adapter/loadCmsSchema.ts"],"sourcesContent":["import { collections } from '@wix/data';\nimport { errorHandler } from '@wix/essentials';\nimport type { WixPatternsContainerParams } from '@wix/patterns';\nimport type { LoadedSchema, SchemaLoader } from '@wix/patterns/schema';\nimport { transformCmsSchema } from './transformCmsSchema';\nimport { createCmsBackend } from './createCmsBackend';\nimport { createCmsFieldActions } from './createCmsFieldActions';\nimport type { ExternalDbConnection } from './cmsPermissions';\nimport { fetchExternalDbConnections } from './fetchExternalDbConnections';\nimport { fetchUserPermissions } from './fetchUserPermissions';\n\ntype HttpClient = WixPatternsContainerParams['httpClient'];\n\nexport interface CreateCmsSchemaLoaderDeps {\n httpClient: HttpClient;\n /** Fetch the user's ABAC permissions for field-management gating. Default `false`. */\n includeUserPermissions?: boolean;\n /** Host-supplied metasite id; the ABAC permission fetch is skipped without it. */\n metasiteId?: string;\n /** Pre-resolved overrides (tests); skip the internal fetch when provided. */\n userPermissions?: string[];\n externalDbConnections?: ExternalDbConnection[];\n}\n\n/**\n * Fetches the raw `@wix/data` collection. `includeAllowedDataPermissions` asks the\n * server to evaluate the calling user against the collection's data-permission rules\n * (`allowedDataPermissions` on the response — read by cmsPermissions.ts). The option\n * is forwarded at runtime but stripped from the public typings, hence the cast.\n */\nexport async function fetchCmsCollection(\n collectionId: string,\n): Promise<collections.DataCollection> {\n return errorHandler.withErrorHandler<collections.DataCollection>(\n async () =>\n collections.getDataCollection(collectionId, {\n includeAllowedDataPermissions: true,\n } as collections.GetDataCollectionOptions),\n {},\n );\n}\n\n/**\n * Creates the CMS `SchemaLoader`: fetches the collection, ABAC permissions and\n * external-DB connections in parallel and returns them as `LoadedSchema`.\n * Failed permission/connection fetches degrade to `[]`.\n */\nexport function createCmsSchemaLoader<\n T extends Record<string, unknown> = Record<string, unknown>,\n>(deps: CreateCmsSchemaLoaderDeps): SchemaLoader<T> {\n const { httpClient, includeUserPermissions = false } = deps;\n\n return async (collectionId: string): Promise<LoadedSchema<T>> => {\n const metasiteId = includeUserPermissions ? deps.metasiteId : undefined;\n\n const [rawCollection, userPermissions, externalDbConnections] =\n await Promise.all([\n fetchCmsCollection(collectionId),\n deps.userPermissions !== undefined\n ? Promise.resolve(deps.userPermissions)\n : includeUserPermissions && metasiteId\n ? fetchUserPermissions(metasiteId).catch(() => [] as string[])\n : Promise.resolve([] as string[]),\n deps.externalDbConnections !== undefined\n ? Promise.resolve(deps.externalDbConnections)\n : fetchExternalDbConnections(httpClient).catch(\n () => [] as ExternalDbConnection[],\n ),\n ]);\n\n const schema = transformCmsSchema(rawCollection, {\n userPermissions,\n externalDbConnections,\n });\n const backend = createCmsBackend<T>(collectionId, schema.fields);\n const fieldActions = createCmsFieldActions(\n collectionId,\n () => rawCollection,\n );\n\n return { schema, backend, fieldActions };\n };\n}\n"],"mappings":";;;;;AAAA,IAAAA,KAAA,GAAAC,OAAA;AACA,IAAAC,WAAA,GAAAD,OAAA;AAGA,IAAAE,mBAAA,GAAAF,OAAA;AACA,IAAAG,iBAAA,GAAAH,OAAA;AACA,IAAAI,sBAAA,GAAAJ,OAAA;AAEA,IAAAK,2BAAA,GAAAL,OAAA;AACA,IAAAM,qBAAA,GAAAN,OAAA;AAeA;AACA;AACA;AACA;AACA;AACA;AACO,eAAeO,kBAAkBA,CACtCC,YAAoB,EACiB;EACrC,OAAOC,wBAAY,CAACC,gBAAgB,CAClC,YACEC,iBAAW,CAACC,iBAAiB,CAACJ,YAAY,EAAE;IAC1CK,6BAA6B,EAAE;EACjC,CAAyC,CAAC,EAC5C,CAAC,CACH,CAAC;AACH;;AAEA;AACA;AACA;AACA;AACA;AACO,SAASC,qBAAqBA,CAEnCC,IAA+B,EAAmB;EAClD,MAAM;IAAEC,UAAU;IAAEC,sBAAsB,GAAG;EAAM,CAAC,GAAGF,IAAI;EAE3D,OAAO,MAAOP,YAAoB,IAA+B;IAC/D,MAAMU,UAAU,GAAGD,sBAAsB,GAAGF,IAAI,CAACG,UAAU,GAAGC,SAAS;IAEvE,MAAM,CAACC,aAAa,EAAEC,eAAe,EAAEC,qBAAqB,CAAC,GAC3D,MAAMC,OAAO,CAACC,GAAG,CAAC,CAChBjB,kBAAkB,CAACC,YAAY,CAAC,EAChCO,IAAI,CAACM,eAAe,KAAKF,SAAS,GAC9BI,OAAO,CAACE,OAAO,CAACV,IAAI,CAACM,eAAe,CAAC,GACrCJ,sBAAsB,IAAIC,UAAU,GACpC,IAAAQ,0CAAoB,EAACR,UAAU,CAAC,CAACS,KAAK,CAAC,MAAM,EAAc,CAAC,GAC5DJ,OAAO,CAACE,OAAO,CAAC,EAAc,CAAC,EACnCV,IAAI,CAACO,qBAAqB,KAAKH,SAAS,GACpCI,OAAO,CAACE,OAAO,CAACV,IAAI,CAACO,qBAAqB,CAAC,GAC3C,IAAAM,sDAA0B,EAACZ,UAAU,CAAC,CAACW,KAAK,CAC1C,MAAM,EACR,CAAC,CACN,CAAC;IAEJ,MAAME,MAAM,GAAG,IAAAC,sCAAkB,EAACV,aAAa,EAAE;MAC/CC,eAAe;MACfC;IACF,CAAC,CAAC;IACF,MAAMS,OAAO,GAAG,IAAAC,kCAAgB,EAAIxB,YAAY,EAAEqB,MAAM,CAACI,MAAM,CAAC;IAChE,MAAMC,YAAY,GAAG,IAAAC,4CAAqB,EACxC3B,YAAY,EACZ,MAAMY,aACR,CAAC;IAED,OAAO;MAAES,MAAM;MAAEE,OAAO;MAAEG;IAAa,CAAC;EAC1C,CAAC;AACH","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_data","require","TEXT_FIELD_TYPES","addSearchToDataQuery","dataQuery","query","fields","searchableFieldIds","searchableFields","Object","keys","filter","fieldId","field","isFieldSearchable","includes","type","search","length","searchFilter","forEach","currentFilter","items","contains","or","and"],"sources":["../../../src/adapter/searchUtils.ts"],"sourcesContent":["import { items } from '@wix/data';\nimport type { OffsetQuery
|
|
1
|
+
{"version":3,"names":["_data","require","TEXT_FIELD_TYPES","addSearchToDataQuery","dataQuery","query","fields","searchableFieldIds","searchableFields","Object","keys","filter","fieldId","field","isFieldSearchable","includes","type","search","length","searchFilter","forEach","currentFilter","items","contains","or","and"],"sources":["../../../src/adapter/searchUtils.ts"],"sourcesContent":["import { items } from '@wix/data';\nimport type { OffsetQuery } from '@wix/patterns';\nimport type { Schema } from '@wix/patterns/schema';\n\ntype SchemaFields = Schema['fields'];\n\nconst TEXT_FIELD_TYPES = ['LONG_TEXT', 'SHORT_TEXT'];\n\n/** Free-text search: OR of `contains` over `SHORT_TEXT`/`LONG_TEXT` fields in `searchableFieldIds`. */\nexport function addSearchToDataQuery({\n dataQuery,\n query,\n fields,\n searchableFieldIds,\n}: {\n dataQuery: items.WixDataQuery;\n query: OffsetQuery;\n fields: SchemaFields;\n searchableFieldIds: string[];\n}) {\n const searchableFields = Object.keys(fields).filter((fieldId) => {\n const field = fields[fieldId];\n const isFieldSearchable = searchableFieldIds.includes(fieldId);\n\n return isFieldSearchable && field && TEXT_FIELD_TYPES.includes(field.type);\n });\n\n if (query.search && searchableFields.length > 0) {\n let searchFilter: items.WixDataFilter | null = null;\n\n searchableFields.forEach((field) => {\n const currentFilter = items.filter().contains(field, query.search!);\n searchFilter = searchFilter\n ? searchFilter.or(currentFilter)\n : currentFilter;\n });\n\n if (searchFilter) {\n dataQuery = dataQuery.and(searchFilter);\n }\n }\n\n return dataQuery;\n}\n"],"mappings":";;;;AAAA,IAAAA,KAAA,GAAAC,OAAA;AAMA,MAAMC,gBAAgB,GAAG,CAAC,WAAW,EAAE,YAAY,CAAC;;AAEpD;AACO,SAASC,oBAAoBA,CAAC;EACnCC,SAAS;EACTC,KAAK;EACLC,MAAM;EACNC;AAMF,CAAC,EAAE;EACD,MAAMC,gBAAgB,GAAGC,MAAM,CAACC,IAAI,CAACJ,MAAM,CAAC,CAACK,MAAM,CAAEC,OAAO,IAAK;IAC/D,MAAMC,KAAK,GAAGP,MAAM,CAACM,OAAO,CAAC;IAC7B,MAAME,iBAAiB,GAAGP,kBAAkB,CAACQ,QAAQ,CAACH,OAAO,CAAC;IAE9D,OAAOE,iBAAiB,IAAID,KAAK,IAAIX,gBAAgB,CAACa,QAAQ,CAACF,KAAK,CAACG,IAAI,CAAC;EAC5E,CAAC,CAAC;EAEF,IAAIX,KAAK,CAACY,MAAM,IAAIT,gBAAgB,CAACU,MAAM,GAAG,CAAC,EAAE;IAC/C,IAAIC,YAAwC,GAAG,IAAI;IAEnDX,gBAAgB,CAACY,OAAO,CAAEP,KAAK,IAAK;MAClC,MAAMQ,aAAa,GAAGC,WAAK,CAACX,MAAM,CAAC,CAAC,CAACY,QAAQ,CAACV,KAAK,EAAER,KAAK,CAACY,MAAO,CAAC;MACnEE,YAAY,GAAGA,YAAY,GACvBA,YAAY,CAACK,EAAE,CAACH,aAAa,CAAC,GAC9BA,aAAa;IACnB,CAAC,CAAC;IAEF,IAAIF,YAAY,EAAE;MAChBf,SAAS,GAAGA,SAAS,CAACqB,GAAG,CAACN,YAAY,CAAC;IACzC;EACF;EAEA,OAAOf,SAAS;AAClB","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["addSortToDataQuery","dataQuery","query","fields","dataQueryWithSort","sort","forEach","sortField","fieldName","order","_fieldDefinition$capa","fieldDefinition","capabilities","sortable","ascending","descending"],"sources":["../../../src/adapter/sortUtils.ts"],"sourcesContent":["import { items } from '@wix/data';\nimport type { OffsetQuery
|
|
1
|
+
{"version":3,"names":["addSortToDataQuery","dataQuery","query","fields","dataQueryWithSort","sort","forEach","sortField","fieldName","order","_fieldDefinition$capa","fieldDefinition","capabilities","sortable","ascending","descending"],"sources":["../../../src/adapter/sortUtils.ts"],"sourcesContent":["import { items } from '@wix/data';\nimport type { OffsetQuery } from '@wix/patterns';\nimport type { Schema } from '@wix/patterns/schema';\n\ntype SchemaFields = Schema['fields'];\n\n/** Applies the query's sort to the WQL query — only `sortable` fields. */\nexport function addSortToDataQuery({\n dataQuery,\n query,\n fields,\n}: {\n dataQuery: items.WixDataQuery;\n query: OffsetQuery;\n fields: SchemaFields;\n}) {\n let dataQueryWithSort = dataQuery;\n const { sort } = query;\n sort?.forEach((sortField) => {\n const { fieldName, order } = sortField;\n if (fieldName && order) {\n const fieldDefinition = fields[fieldName];\n if (fieldDefinition?.capabilities?.sortable) {\n if (order === 'asc') {\n dataQueryWithSort = dataQueryWithSort.ascending(fieldName);\n } else if (order === 'desc') {\n dataQueryWithSort = dataQueryWithSort.descending(fieldName);\n }\n }\n }\n });\n\n return dataQueryWithSort;\n}\n"],"mappings":";;;;AAMA;AACO,SAASA,kBAAkBA,CAAC;EACjCC,SAAS;EACTC,KAAK;EACLC;AAKF,CAAC,EAAE;EACD,IAAIC,iBAAiB,GAAGH,SAAS;EACjC,MAAM;IAAEI;EAAK,CAAC,GAAGH,KAAK;EACtBG,IAAI,YAAJA,IAAI,CAAEC,OAAO,CAAEC,SAAS,IAAK;IAC3B,MAAM;MAAEC,SAAS;MAAEC;IAAM,CAAC,GAAGF,SAAS;IACtC,IAAIC,SAAS,IAAIC,KAAK,EAAE;MAAA,IAAAC,qBAAA;MACtB,MAAMC,eAAe,GAAGR,MAAM,CAACK,SAAS,CAAC;MACzC,IAAIG,eAAe,aAAAD,qBAAA,GAAfC,eAAe,CAAEC,YAAY,aAA7BF,qBAAA,CAA+BG,QAAQ,EAAE;QAC3C,IAAIJ,KAAK,KAAK,KAAK,EAAE;UACnBL,iBAAiB,GAAGA,iBAAiB,CAACU,SAAS,CAACN,SAAS,CAAC;QAC5D,CAAC,MAAM,IAAIC,KAAK,KAAK,MAAM,EAAE;UAC3BL,iBAAiB,GAAGA,iBAAiB,CAACW,UAAU,CAACP,SAAS,CAAC;QAC7D;MACF;IACF;EACF,CAAC,CAAC;EAEF,OAAOJ,iBAAiB;AAC1B","ignoreList":[]}
|
|
@@ -23,7 +23,10 @@ function transformCmsSchema(schema, options = {}) {
|
|
|
23
23
|
isPrimary: field.key === schema.displayField,
|
|
24
24
|
isPii: field.encrypted ?? false,
|
|
25
25
|
helpText: field.description ?? undefined,
|
|
26
|
-
|
|
26
|
+
// `@wix/data` does not flag the manual-sort field (`_manualSort_<id>`)
|
|
27
|
+
// as `systemField`, but it is internal and must not surface as an
|
|
28
|
+
// editable field — treat it as system, matching auto-patterns.
|
|
29
|
+
isSystem: (field.systemField ?? false) || field.key.startsWith('_manualSort'),
|
|
27
30
|
validation: {
|
|
28
31
|
numberRange: field.numberRange ? {
|
|
29
32
|
min: field.numberRange.min ?? undefined,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_cmsFieldTypeMap","require","_cmsPermissions","transformCmsSchema","schema","options","userPermissions","externalDbConnections","collectionId","_id","transformedFields","fields","reduce","acc","field","_field$capabilities","_field$capabilities2","_field$typeMetadata","_field$typeMetadata2","key","fieldType","type","CmsFieldTypeToPatternsFieldType","baseField","id","displayName","isPrimary","displayField","isPii","encrypted","helpText","description","undefined","isSystem","systemField","validation","numberRange","min","max","stringLengthRange","minLength","maxLength","required","capabilities","supportedQueryOperators","queryOperators","sortable","referencedCollectionId","typeMetadata","reference","multiReference","isReference","referenceMetadata","schemaPermissions","itemPermissions","computeCmsPermissions","idField"],"sources":["../../../src/adapter/transformCmsSchema.ts"],"sourcesContent":["import { collections } from '@wix/data';\nimport type { Field
|
|
1
|
+
{"version":3,"names":["_cmsFieldTypeMap","require","_cmsPermissions","transformCmsSchema","schema","options","userPermissions","externalDbConnections","collectionId","_id","transformedFields","fields","reduce","acc","field","_field$capabilities","_field$capabilities2","_field$typeMetadata","_field$typeMetadata2","key","fieldType","type","CmsFieldTypeToPatternsFieldType","baseField","id","displayName","isPrimary","displayField","isPii","encrypted","helpText","description","undefined","isSystem","systemField","startsWith","validation","numberRange","min","max","stringLengthRange","minLength","maxLength","required","capabilities","supportedQueryOperators","queryOperators","sortable","referencedCollectionId","typeMetadata","reference","multiReference","isReference","referenceMetadata","schemaPermissions","itemPermissions","computeCmsPermissions","idField"],"sources":["../../../src/adapter/transformCmsSchema.ts"],"sourcesContent":["import { collections } from '@wix/data';\nimport type { Field } from '@wix/patterns';\nimport type { Schema } from '@wix/patterns/schema';\nimport { CmsFieldTypeToPatternsFieldType } from './cmsFieldTypeMap';\nimport {\n computeCmsPermissions,\n type ExternalDbConnection,\n} from './cmsPermissions';\n\nexport interface TransformCmsSchemaOptions {\n /** Current user's ABAC permission strings. */\n userPermissions?: string[];\n /** External-DB connections (drive EXTERNAL-collection editability). */\n externalDbConnections?: ExternalDbConnection[];\n}\n\n/** Transforms a raw `@wix/data` `DataCollection` into the source-neutral `Schema`. */\nexport function transformCmsSchema(\n schema: collections.DataCollection,\n options: TransformCmsSchemaOptions = {},\n): Schema {\n const { userPermissions = [], externalDbConnections = [] } = options;\n const collectionId = schema._id as string;\n\n const transformedFields = (schema.fields || []).reduce<Record<string, Field>>(\n (acc, field) => {\n if (!field.key) {\n return acc;\n }\n\n const fieldType = field.type\n ? CmsFieldTypeToPatternsFieldType[field.type] || 'UNKNOWN'\n : 'UNKNOWN';\n\n const baseField = {\n id: field.key,\n displayName: field.displayName || '',\n isPrimary: field.key === schema.displayField,\n isPii: field.encrypted ?? false,\n helpText: field.description ?? undefined,\n // `@wix/data` does not flag the manual-sort field (`_manualSort_<id>`)\n // as `systemField`, but it is internal and must not surface as an\n // editable field — treat it as system, matching auto-patterns.\n isSystem:\n (field.systemField ?? false) || field.key.startsWith('_manualSort'),\n validation: {\n numberRange: field.numberRange\n ? {\n min: field.numberRange.min ?? undefined,\n max: field.numberRange.max ?? undefined,\n }\n : undefined,\n stringLengthRange: field.stringLengthRange\n ? {\n minLength: field.stringLengthRange.minLength ?? undefined,\n maxLength: field.stringLengthRange.maxLength ?? undefined,\n }\n : undefined,\n required: field.required ?? false,\n },\n capabilities: {\n supportedQueryOperators: field.capabilities?.queryOperators || [],\n sortable: field.capabilities?.sortable || false,\n },\n };\n\n const referencedCollectionId =\n field.typeMetadata?.reference?.referencedCollectionId ??\n field.typeMetadata?.multiReference?.referencedCollectionId;\n\n const isReference =\n fieldType === 'REFERENCE' || fieldType === 'MULTI_REFERENCE';\n\n if (isReference && referencedCollectionId) {\n acc[field.key] = {\n ...baseField,\n type: fieldType as 'REFERENCE' | 'MULTI_REFERENCE',\n referenceMetadata: { referencedCollectionId },\n };\n } else {\n acc[field.key] = {\n ...baseField,\n // A reference field without a target collection degrades to UNKNOWN.\n type: isReference ? 'UNKNOWN' : fieldType,\n };\n }\n\n return acc;\n },\n {},\n );\n\n const { schemaPermissions, itemPermissions } = computeCmsPermissions(\n schema,\n userPermissions,\n externalDbConnections,\n );\n\n return {\n id: collectionId,\n fields: transformedFields,\n displayField: schema.displayField ?? '_id',\n idField: '_id',\n schemaPermissions,\n itemPermissions,\n };\n}\n"],"mappings":"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","ignoreList":[]}
|