@wix/patterns-cms 1.11.0 → 1.14.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.
Files changed (51) hide show
  1. package/dist/cjs/adapter/__tests__/transformCmsSchema.spec.js +9 -0
  2. package/dist/cjs/adapter/__tests__/transformCmsSchema.spec.js.map +1 -1
  3. package/dist/cjs/adapter/__tests__/useCmsSchemaSource.spec.js +142 -0
  4. package/dist/cjs/adapter/__tests__/useCmsSchemaSource.spec.js.map +1 -0
  5. package/dist/cjs/adapter/createCmsBackend.js +2 -0
  6. package/dist/cjs/adapter/createCmsBackend.js.map +1 -1
  7. package/dist/cjs/adapter/index.js +3 -3
  8. package/dist/cjs/adapter/index.js.map +1 -1
  9. package/dist/cjs/adapter/transformCmsSchema.js +4 -1
  10. package/dist/cjs/adapter/transformCmsSchema.js.map +1 -1
  11. package/dist/cjs/adapter/useCmsSchemaSource.js +72 -0
  12. package/dist/cjs/adapter/useCmsSchemaSource.js.map +1 -0
  13. package/dist/cjs/testkit/cmsFetchMocks.js +7 -6
  14. package/dist/cjs/testkit/cmsFetchMocks.js.map +1 -1
  15. package/dist/esm/adapter/__tests__/transformCmsSchema.spec.js +5 -0
  16. package/dist/esm/adapter/__tests__/transformCmsSchema.spec.js.map +1 -1
  17. package/dist/esm/adapter/__tests__/useCmsSchemaSource.spec.js +117 -0
  18. package/dist/esm/adapter/__tests__/useCmsSchemaSource.spec.js.map +1 -0
  19. package/dist/esm/adapter/createCmsBackend.js.map +1 -1
  20. package/dist/esm/adapter/index.js +1 -1
  21. package/dist/esm/adapter/index.js.map +1 -1
  22. package/dist/esm/adapter/transformCmsSchema.js +4 -1
  23. package/dist/esm/adapter/transformCmsSchema.js.map +1 -1
  24. package/dist/esm/adapter/useCmsSchemaSource.js +56 -0
  25. package/dist/esm/adapter/useCmsSchemaSource.js.map +1 -0
  26. package/dist/esm/testkit/cmsFetchMocks.js +4 -3
  27. package/dist/esm/testkit/cmsFetchMocks.js.map +1 -1
  28. package/dist/types/adapter/__tests__/useCmsSchemaSource.spec.d.ts +2 -0
  29. package/dist/types/adapter/__tests__/useCmsSchemaSource.spec.d.ts.map +1 -0
  30. package/dist/types/adapter/createCmsBackend.d.ts +4 -2
  31. package/dist/types/adapter/createCmsBackend.d.ts.map +1 -1
  32. package/dist/types/adapter/index.d.ts +1 -1
  33. package/dist/types/adapter/index.d.ts.map +1 -1
  34. package/dist/types/adapter/transformCmsSchema.d.ts.map +1 -1
  35. package/dist/types/adapter/useCmsSchemaSource.d.ts +19 -0
  36. package/dist/types/adapter/useCmsSchemaSource.d.ts.map +1 -0
  37. package/dist/types/testkit/cmsFetchMocks.d.ts +5 -4
  38. package/dist/types/testkit/cmsFetchMocks.d.ts.map +1 -1
  39. package/package.json +6 -5
  40. package/dist/cjs/adapter/__tests__/createCmsSchemaSource.spec.js +0 -37
  41. package/dist/cjs/adapter/__tests__/createCmsSchemaSource.spec.js.map +0 -1
  42. package/dist/cjs/adapter/createCmsSchemaSource.js +0 -35
  43. package/dist/cjs/adapter/createCmsSchemaSource.js.map +0 -1
  44. package/dist/esm/adapter/__tests__/createCmsSchemaSource.spec.js +0 -32
  45. package/dist/esm/adapter/__tests__/createCmsSchemaSource.spec.js.map +0 -1
  46. package/dist/esm/adapter/createCmsSchemaSource.js +0 -25
  47. package/dist/esm/adapter/createCmsSchemaSource.js.map +0 -1
  48. package/dist/types/adapter/__tests__/createCmsSchemaSource.spec.d.ts +0 -2
  49. package/dist/types/adapter/__tests__/createCmsSchemaSource.spec.d.ts.map +0 -1
  50. package/dist/types/adapter/createCmsSchemaSource.d.ts +0 -12
  51. package/dist/types/adapter/createCmsSchemaSource.d.ts.map +0 -1
@@ -108,6 +108,15 @@ describe('transformCmsSchema', () => {
108
108
  expect((_schema$fields$secret2 = schema.fields.secret) == null ? void 0 : _schema$fields$secret2.helpText).toBe('A hint');
109
109
  expect((_schema$fields$secret3 = schema.fields.secret) == null ? void 0 : _schema$fields$secret3.isSystem).toBe(true);
110
110
  });
111
+ it('treats the manual-sort field as system even when not flagged by @wix/data', () => {
112
+ var _schema$fields$key;
113
+ const key = '_manualSort_48382113-d33d-415b-b416-b65642f65483';
114
+ const schema = (0, _transformCmsSchema.transformCmsSchema)(makeCollection([makeField({
115
+ key,
116
+ systemField: false
117
+ })]));
118
+ expect((_schema$fields$key = schema.fields[key]) == null ? void 0 : _schema$fields$key.isSystem).toBe(true);
119
+ });
111
120
  it('maps validation ranges and required', () => {
112
121
  var _schema$fields$num, _schema$fields$num2, _schema$fields$text;
113
122
  const schema = (0, _transformCmsSchema.transformCmsSchema)(makeCollection([makeField({
@@ -1 +1 @@
1
- {"version":3,"names":["_data","require","_transformCmsSchema","refMeta","field","referenceMetadata","COLLECTION_ID","makeField","overrides","key","type","collections","Type","TEXT","systemField","encrypted","plugins","displayName","capabilities","queryOperators","sortable","makeCollection","fields","_id","collectionType","dataOperations","permissions","read","insert","update","remove","describe","it","_schema$fields$field","_schema$fields$field2","_schema$fields$field3","_schema$fields$field4","_schema$fields$field5","_schema$fields$field6","_schema$fields$field7","_schema$fields$field8","collection","QueryOperator","EQ","NUMBER","GTE","LTE","BOOLEAN","schema","transformCmsSchema","expect","toBeDefined","Object","keys","length","toBe","toHaveProperty","not","field1","supportedQueryOperators","toEqual","field2","_schema$fields$title","_schema$fields$other","displayField","id","idField","title","isPrimary","other","_schema$fields$secret","_schema$fields$secret2","_schema$fields$secret3","description","secret","isPii","helpText","isSystem","_schema$fields$num","_schema$fields$num2","_schema$fields$text","required","numberRange","min","max","stringLengthRange","minLength","maxLength","num","validation","text","_schema$fields$weird","weird","_schema$fields$ref","_refMeta","REFERENCE","typeMetadata","reference","referencedCollectionId","ref","_schema$fields$multiR","_refMeta2","MULTI_REFERENCE","multiReference","multiRef","_schema$fields$dangli","danglingRef","toBeUndefined","userPermissions","schemaPermissions","createField","updateField","deleteField","itemPermissions","createItem","updateItem","deleteItem"],"sources":["../../../../src/adapter/__tests__/transformCmsSchema.spec.ts"],"sourcesContent":["import { collections } from '@wix/data';\nimport type { Field } from '@wix/bex-core';\nimport { transformCmsSchema } from '../transformCmsSchema';\n\n/** Reads referenceMetadata off a (possibly non-reference) Field for assertions. */\nconst refMeta = (field: Field | undefined) =>\n (field as { referenceMetadata?: { referencedCollectionId: string } })\n ?.referenceMetadata;\n\nconst COLLECTION_ID = 'collection-1';\n\nconst makeField = (\n overrides: Partial<collections.Field> = {},\n): collections.Field => ({\n key: 'field',\n type: collections.Type.TEXT,\n systemField: false,\n encrypted: false,\n plugins: [],\n displayName: 'Field',\n capabilities: { queryOperators: [], sortable: false },\n ...overrides,\n});\n\nconst makeCollection = (\n fields: collections.Field[],\n overrides: Partial<collections.DataCollection> = {},\n): collections.DataCollection => ({\n _id: COLLECTION_ID,\n collectionType: 'NATIVE',\n capabilities: { dataOperations: ['SAVE', 'UPDATE', 'REMOVE'] },\n permissions: {\n read: 'ANYONE',\n insert: 'SITE_MEMBER',\n update: 'SITE_MEMBER',\n remove: 'SITE_MEMBER',\n },\n plugins: [],\n fields,\n ...overrides,\n});\n\ndescribe('transformCmsSchema', () => {\n it('maps CMS fields to the source-neutral Schema and drops keyless fields', () => {\n const collection = makeCollection([\n makeField({\n key: 'field1',\n type: collections.Type.TEXT,\n displayName: 'Field 1',\n capabilities: {\n queryOperators: [collections.QueryOperator.EQ],\n sortable: true,\n },\n }),\n makeField({\n key: 'field2',\n type: collections.Type.NUMBER,\n displayName: 'Field 2',\n capabilities: {\n queryOperators: [\n collections.QueryOperator.GTE,\n collections.QueryOperator.LTE,\n ],\n sortable: true,\n },\n }),\n makeField({\n key: '',\n type: collections.Type.BOOLEAN,\n displayName: 'Empty Key Field',\n capabilities: { queryOperators: [], sortable: false },\n }),\n ]);\n\n const schema = transformCmsSchema(collection);\n\n expect(schema.fields).toBeDefined();\n expect(Object.keys(schema.fields).length).toBe(2);\n expect(schema.fields).toHaveProperty('field1');\n expect(schema.fields).toHaveProperty('field2');\n expect(schema.fields).not.toHaveProperty('');\n\n expect(schema.fields.field1?.type).toBe('SHORT_TEXT');\n expect(schema.fields.field1?.displayName).toBe('Field 1');\n expect(schema.fields.field1?.capabilities?.sortable).toBe(true);\n expect(schema.fields.field1?.capabilities?.supportedQueryOperators).toEqual(\n [collections.QueryOperator.EQ],\n );\n\n expect(schema.fields.field2?.type).toBe('NUMBER');\n expect(schema.fields.field2?.displayName).toBe('Field 2');\n expect(schema.fields.field2?.capabilities?.sortable).toBe(true);\n expect(schema.fields.field2?.capabilities?.supportedQueryOperators).toEqual(\n [collections.QueryOperator.GTE, collections.QueryOperator.LTE],\n );\n });\n\n it('sets id, idField and displayField from the collection', () => {\n const schema = transformCmsSchema(\n makeCollection(\n [makeField({ key: 'title' }), makeField({ key: 'other' })],\n { displayField: 'title' },\n ),\n );\n\n expect(schema.id).toBe(COLLECTION_ID);\n expect(schema.idField).toBe('_id');\n expect(schema.displayField).toBe('title');\n expect(schema.fields.title?.isPrimary).toBe(true);\n expect(schema.fields.other?.isPrimary).toBe(false);\n });\n\n it('defaults displayField to \"_id\" when the collection has none', () => {\n const schema = transformCmsSchema(makeCollection([makeField()]));\n\n expect(schema.displayField).toBe('_id');\n });\n\n it('maps encrypted → isPii, description → helpText and systemField → isSystem', () => {\n const schema = transformCmsSchema(\n makeCollection([\n makeField({\n key: 'secret',\n encrypted: true,\n description: 'A hint',\n systemField: true,\n }),\n ]),\n );\n\n expect(schema.fields.secret?.isPii).toBe(true);\n expect(schema.fields.secret?.helpText).toBe('A hint');\n expect(schema.fields.secret?.isSystem).toBe(true);\n });\n\n it('maps validation ranges and required', () => {\n const schema = transformCmsSchema(\n makeCollection([\n makeField({\n key: 'num',\n type: collections.Type.NUMBER,\n required: true,\n numberRange: { min: 0, max: 10 },\n }),\n makeField({\n key: 'text',\n type: collections.Type.TEXT,\n stringLengthRange: { minLength: 1, maxLength: 5 },\n }),\n ]),\n );\n\n expect(schema.fields.num?.validation?.required).toBe(true);\n expect(schema.fields.num?.validation?.numberRange).toEqual({\n min: 0,\n max: 10,\n });\n expect(schema.fields.text?.validation?.stringLengthRange).toEqual({\n minLength: 1,\n maxLength: 5,\n });\n });\n\n it('resolves an unmapped CMS field type to UNKNOWN', () => {\n const schema = transformCmsSchema(\n makeCollection([\n makeField({\n key: 'weird',\n type: 'SOME_FUTURE_TYPE' as collections.Type,\n }),\n ]),\n );\n\n expect(schema.fields.weird?.type).toBe('UNKNOWN');\n });\n\n it('attaches referenceMetadata for a REFERENCE field with a target collection', () => {\n const schema = transformCmsSchema(\n makeCollection([\n makeField({\n key: 'ref',\n type: collections.Type.REFERENCE,\n typeMetadata: {\n reference: { referencedCollectionId: 'other-collection' },\n },\n }),\n ]),\n );\n\n expect(schema.fields.ref?.type).toBe('REFERENCE');\n expect(refMeta(schema.fields.ref)?.referencedCollectionId).toBe(\n 'other-collection',\n );\n });\n\n it('attaches referenceMetadata for a MULTI_REFERENCE field with a target collection', () => {\n const schema = transformCmsSchema(\n makeCollection([\n makeField({\n key: 'multiRef',\n type: collections.Type.MULTI_REFERENCE,\n typeMetadata: {\n multiReference: { referencedCollectionId: 'other-collection' },\n },\n }),\n ]),\n );\n\n expect(schema.fields.multiRef?.type).toBe('MULTI_REFERENCE');\n expect(refMeta(schema.fields.multiRef)?.referencedCollectionId).toBe(\n 'other-collection',\n );\n });\n\n it('degrades a reference field without a target collection to UNKNOWN', () => {\n const schema = transformCmsSchema(\n makeCollection([\n makeField({ key: 'danglingRef', type: collections.Type.REFERENCE }),\n ]),\n );\n\n expect(schema.fields.danglingRef?.type).toBe('UNKNOWN');\n expect(refMeta(schema.fields.danglingRef)).toBeUndefined();\n });\n\n it('projects permissions from the collection and user permissions', () => {\n const schema = transformCmsSchema(makeCollection([makeField()]), {\n userPermissions: [\n 'WIX_DATA.CREATE_COLLECTION_FIELD',\n 'WIX_DATA.UPDATE_COLLECTION_FIELD',\n 'WIX_DATA.DELETE_COLLECTION_FIELD',\n 'WIX_DATA.INSERT',\n 'WIX_DATA.UPDATE',\n 'WIX_DATA.REMOVE',\n ],\n });\n\n expect(schema.schemaPermissions).toEqual({\n createField: true,\n updateField: true,\n deleteField: true,\n });\n expect(schema.itemPermissions).toEqual({\n createItem: true,\n updateItem: true,\n deleteItem: true,\n });\n });\n\n it('leaves schemaPermissions undefined for a shared (non-editable) collection', () => {\n const schema = transformCmsSchema(\n makeCollection([makeField()], { plugins: [{ type: 'SHARED' }] }),\n {\n userPermissions: [\n 'WIX_DATA.CREATE_COLLECTION_FIELD',\n 'WIX_DATA.UPDATE_COLLECTION_FIELD',\n 'WIX_DATA.DELETE_COLLECTION_FIELD',\n ],\n },\n );\n\n expect(schema.schemaPermissions).toBeUndefined();\n });\n});\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_data","require","_transformCmsSchema","refMeta","field","referenceMetadata","COLLECTION_ID","makeField","overrides","key","type","collections","Type","TEXT","systemField","encrypted","plugins","displayName","capabilities","queryOperators","sortable","makeCollection","fields","_id","collectionType","dataOperations","permissions","read","insert","update","remove","describe","it","_schema$fields$field","_schema$fields$field2","_schema$fields$field3","_schema$fields$field4","_schema$fields$field5","_schema$fields$field6","_schema$fields$field7","_schema$fields$field8","collection","QueryOperator","EQ","NUMBER","GTE","LTE","BOOLEAN","schema","transformCmsSchema","expect","toBeDefined","Object","keys","length","toBe","toHaveProperty","not","field1","supportedQueryOperators","toEqual","field2","_schema$fields$title","_schema$fields$other","displayField","id","idField","title","isPrimary","other","_schema$fields$secret","_schema$fields$secret2","_schema$fields$secret3","description","secret","isPii","helpText","isSystem","_schema$fields$key","_schema$fields$num","_schema$fields$num2","_schema$fields$text","required","numberRange","min","max","stringLengthRange","minLength","maxLength","num","validation","text","_schema$fields$weird","weird","_schema$fields$ref","_refMeta","REFERENCE","typeMetadata","reference","referencedCollectionId","ref","_schema$fields$multiR","_refMeta2","MULTI_REFERENCE","multiReference","multiRef","_schema$fields$dangli","danglingRef","toBeUndefined","userPermissions","schemaPermissions","createField","updateField","deleteField","itemPermissions","createItem","updateItem","deleteItem"],"sources":["../../../../src/adapter/__tests__/transformCmsSchema.spec.ts"],"sourcesContent":["import { collections } from '@wix/data';\nimport type { Field } from '@wix/bex-core';\nimport { transformCmsSchema } from '../transformCmsSchema';\n\n/** Reads referenceMetadata off a (possibly non-reference) Field for assertions. */\nconst refMeta = (field: Field | undefined) =>\n (field as { referenceMetadata?: { referencedCollectionId: string } })\n ?.referenceMetadata;\n\nconst COLLECTION_ID = 'collection-1';\n\nconst makeField = (\n overrides: Partial<collections.Field> = {},\n): collections.Field => ({\n key: 'field',\n type: collections.Type.TEXT,\n systemField: false,\n encrypted: false,\n plugins: [],\n displayName: 'Field',\n capabilities: { queryOperators: [], sortable: false },\n ...overrides,\n});\n\nconst makeCollection = (\n fields: collections.Field[],\n overrides: Partial<collections.DataCollection> = {},\n): collections.DataCollection => ({\n _id: COLLECTION_ID,\n collectionType: 'NATIVE',\n capabilities: { dataOperations: ['SAVE', 'UPDATE', 'REMOVE'] },\n permissions: {\n read: 'ANYONE',\n insert: 'SITE_MEMBER',\n update: 'SITE_MEMBER',\n remove: 'SITE_MEMBER',\n },\n plugins: [],\n fields,\n ...overrides,\n});\n\ndescribe('transformCmsSchema', () => {\n it('maps CMS fields to the source-neutral Schema and drops keyless fields', () => {\n const collection = makeCollection([\n makeField({\n key: 'field1',\n type: collections.Type.TEXT,\n displayName: 'Field 1',\n capabilities: {\n queryOperators: [collections.QueryOperator.EQ],\n sortable: true,\n },\n }),\n makeField({\n key: 'field2',\n type: collections.Type.NUMBER,\n displayName: 'Field 2',\n capabilities: {\n queryOperators: [\n collections.QueryOperator.GTE,\n collections.QueryOperator.LTE,\n ],\n sortable: true,\n },\n }),\n makeField({\n key: '',\n type: collections.Type.BOOLEAN,\n displayName: 'Empty Key Field',\n capabilities: { queryOperators: [], sortable: false },\n }),\n ]);\n\n const schema = transformCmsSchema(collection);\n\n expect(schema.fields).toBeDefined();\n expect(Object.keys(schema.fields).length).toBe(2);\n expect(schema.fields).toHaveProperty('field1');\n expect(schema.fields).toHaveProperty('field2');\n expect(schema.fields).not.toHaveProperty('');\n\n expect(schema.fields.field1?.type).toBe('SHORT_TEXT');\n expect(schema.fields.field1?.displayName).toBe('Field 1');\n expect(schema.fields.field1?.capabilities?.sortable).toBe(true);\n expect(schema.fields.field1?.capabilities?.supportedQueryOperators).toEqual(\n [collections.QueryOperator.EQ],\n );\n\n expect(schema.fields.field2?.type).toBe('NUMBER');\n expect(schema.fields.field2?.displayName).toBe('Field 2');\n expect(schema.fields.field2?.capabilities?.sortable).toBe(true);\n expect(schema.fields.field2?.capabilities?.supportedQueryOperators).toEqual(\n [collections.QueryOperator.GTE, collections.QueryOperator.LTE],\n );\n });\n\n it('sets id, idField and displayField from the collection', () => {\n const schema = transformCmsSchema(\n makeCollection(\n [makeField({ key: 'title' }), makeField({ key: 'other' })],\n { displayField: 'title' },\n ),\n );\n\n expect(schema.id).toBe(COLLECTION_ID);\n expect(schema.idField).toBe('_id');\n expect(schema.displayField).toBe('title');\n expect(schema.fields.title?.isPrimary).toBe(true);\n expect(schema.fields.other?.isPrimary).toBe(false);\n });\n\n it('defaults displayField to \"_id\" when the collection has none', () => {\n const schema = transformCmsSchema(makeCollection([makeField()]));\n\n expect(schema.displayField).toBe('_id');\n });\n\n it('maps encrypted → isPii, description → helpText and systemField → isSystem', () => {\n const schema = transformCmsSchema(\n makeCollection([\n makeField({\n key: 'secret',\n encrypted: true,\n description: 'A hint',\n systemField: true,\n }),\n ]),\n );\n\n expect(schema.fields.secret?.isPii).toBe(true);\n expect(schema.fields.secret?.helpText).toBe('A hint');\n expect(schema.fields.secret?.isSystem).toBe(true);\n });\n\n it('treats the manual-sort field as system even when not flagged by @wix/data', () => {\n const key = '_manualSort_48382113-d33d-415b-b416-b65642f65483';\n const schema = transformCmsSchema(\n makeCollection([makeField({ key, systemField: false })]),\n );\n\n expect(schema.fields[key]?.isSystem).toBe(true);\n });\n\n it('maps validation ranges and required', () => {\n const schema = transformCmsSchema(\n makeCollection([\n makeField({\n key: 'num',\n type: collections.Type.NUMBER,\n required: true,\n numberRange: { min: 0, max: 10 },\n }),\n makeField({\n key: 'text',\n type: collections.Type.TEXT,\n stringLengthRange: { minLength: 1, maxLength: 5 },\n }),\n ]),\n );\n\n expect(schema.fields.num?.validation?.required).toBe(true);\n expect(schema.fields.num?.validation?.numberRange).toEqual({\n min: 0,\n max: 10,\n });\n expect(schema.fields.text?.validation?.stringLengthRange).toEqual({\n minLength: 1,\n maxLength: 5,\n });\n });\n\n it('resolves an unmapped CMS field type to UNKNOWN', () => {\n const schema = transformCmsSchema(\n makeCollection([\n makeField({\n key: 'weird',\n type: 'SOME_FUTURE_TYPE' as collections.Type,\n }),\n ]),\n );\n\n expect(schema.fields.weird?.type).toBe('UNKNOWN');\n });\n\n it('attaches referenceMetadata for a REFERENCE field with a target collection', () => {\n const schema = transformCmsSchema(\n makeCollection([\n makeField({\n key: 'ref',\n type: collections.Type.REFERENCE,\n typeMetadata: {\n reference: { referencedCollectionId: 'other-collection' },\n },\n }),\n ]),\n );\n\n expect(schema.fields.ref?.type).toBe('REFERENCE');\n expect(refMeta(schema.fields.ref)?.referencedCollectionId).toBe(\n 'other-collection',\n );\n });\n\n it('attaches referenceMetadata for a MULTI_REFERENCE field with a target collection', () => {\n const schema = transformCmsSchema(\n makeCollection([\n makeField({\n key: 'multiRef',\n type: collections.Type.MULTI_REFERENCE,\n typeMetadata: {\n multiReference: { referencedCollectionId: 'other-collection' },\n },\n }),\n ]),\n );\n\n expect(schema.fields.multiRef?.type).toBe('MULTI_REFERENCE');\n expect(refMeta(schema.fields.multiRef)?.referencedCollectionId).toBe(\n 'other-collection',\n );\n });\n\n it('degrades a reference field without a target collection to UNKNOWN', () => {\n const schema = transformCmsSchema(\n makeCollection([\n makeField({ key: 'danglingRef', type: collections.Type.REFERENCE }),\n ]),\n );\n\n expect(schema.fields.danglingRef?.type).toBe('UNKNOWN');\n expect(refMeta(schema.fields.danglingRef)).toBeUndefined();\n });\n\n it('projects permissions from the collection and user permissions', () => {\n const schema = transformCmsSchema(makeCollection([makeField()]), {\n userPermissions: [\n 'WIX_DATA.CREATE_COLLECTION_FIELD',\n 'WIX_DATA.UPDATE_COLLECTION_FIELD',\n 'WIX_DATA.DELETE_COLLECTION_FIELD',\n 'WIX_DATA.INSERT',\n 'WIX_DATA.UPDATE',\n 'WIX_DATA.REMOVE',\n ],\n });\n\n expect(schema.schemaPermissions).toEqual({\n createField: true,\n updateField: true,\n deleteField: true,\n });\n expect(schema.itemPermissions).toEqual({\n createItem: true,\n updateItem: true,\n deleteItem: true,\n });\n });\n\n it('leaves schemaPermissions undefined for a shared (non-editable) collection', () => {\n const schema = transformCmsSchema(\n makeCollection([makeField()], { plugins: [{ type: 'SHARED' }] }),\n {\n userPermissions: [\n 'WIX_DATA.CREATE_COLLECTION_FIELD',\n 'WIX_DATA.UPDATE_COLLECTION_FIELD',\n 'WIX_DATA.DELETE_COLLECTION_FIELD',\n ],\n },\n );\n\n expect(schema.schemaPermissions).toBeUndefined();\n });\n});\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,142 @@
1
+ "use strict";
2
+
3
+ var _bexCore = require("@wix/bex-core");
4
+ var _data = require("@wix/data");
5
+ var _useCmsSchemaSource = require("../useCmsSchemaSource");
6
+ var _fetchUserPermissions = require("../fetchUserPermissions");
7
+ var _fetchExternalDbConnections = require("../fetchExternalDbConnections");
8
+ // loadCmsSchema imports errorHandler at evaluation time; stub it so importing
9
+ // the source builder is side-effect free.
10
+ jest.mock('@wix/essentials', () => ({
11
+ errorHandler: {
12
+ withErrorHandler: fn => fn()
13
+ }
14
+ }));
15
+
16
+ // Keep @wix/data real (cmsFieldTypeMap reads `collections.Type` at evaluation
17
+ // time) and stub only the collection fetch, so loadSchema runs the real
18
+ // loader + transform against a fixed collection.
19
+ jest.mock('@wix/data', () => {
20
+ const actual = jest.requireActual('@wix/data');
21
+ return {
22
+ ...actual,
23
+ collections: {
24
+ ...actual.collections,
25
+ getDataCollection: jest.fn()
26
+ }
27
+ };
28
+ });
29
+ jest.mock('../fetchUserPermissions', () => ({
30
+ fetchUserPermissions: jest.fn()
31
+ }));
32
+ jest.mock('../fetchExternalDbConnections', () => ({
33
+ fetchExternalDbConnections: jest.fn()
34
+ }));
35
+ const getDataCollection = _data.collections.getDataCollection;
36
+ const fetchUserPermissionsMock = _fetchUserPermissions.fetchUserPermissions;
37
+ const fetchExternalDbConnectionsMock = _fetchExternalDbConnections.fetchExternalDbConnections;
38
+ const httpClient = {};
39
+
40
+ // A collection with one reference field pointing at "Camels".
41
+ const collectionWithReference = () => ({
42
+ _id: 'Products',
43
+ collectionType: 'NATIVE',
44
+ displayField: 'title',
45
+ capabilities: {
46
+ dataOperations: ['SAVE', 'UPDATE', 'REMOVE']
47
+ },
48
+ permissions: {
49
+ read: 'ANYONE',
50
+ insert: 'SITE_MEMBER',
51
+ update: 'SITE_MEMBER',
52
+ remove: 'SITE_MEMBER'
53
+ },
54
+ plugins: [],
55
+ fields: [{
56
+ key: 'title',
57
+ type: _data.collections.Type.TEXT,
58
+ systemField: false,
59
+ encrypted: false,
60
+ plugins: [],
61
+ displayName: 'Title',
62
+ capabilities: {
63
+ queryOperators: [],
64
+ sortable: true
65
+ }
66
+ }, {
67
+ key: 'supplier',
68
+ type: _data.collections.Type.REFERENCE,
69
+ systemField: false,
70
+ encrypted: false,
71
+ plugins: [],
72
+ displayName: 'Supplier',
73
+ capabilities: {
74
+ queryOperators: [],
75
+ sortable: false
76
+ },
77
+ typeMetadata: {
78
+ reference: {
79
+ referencedCollectionId: 'Camels'
80
+ }
81
+ }
82
+ }]
83
+ });
84
+ describe('useCmsSchemaSource', () => {
85
+ beforeEach(() => {
86
+ jest.clearAllMocks();
87
+ getDataCollection.mockResolvedValue(collectionWithReference());
88
+ fetchUserPermissionsMock.mockResolvedValue([]);
89
+ fetchExternalDbConnectionsMock.mockResolvedValue([]);
90
+ });
91
+ it('declares the creatable types in display order — labels come from the standard names in the UI', () => {
92
+ const source = (0, _bexCore.defineSchemaSource)((0, _useCmsSchemaSource.cmsSchemaSourceInput)({
93
+ collectionId: 'Pokemon',
94
+ httpClient
95
+ }));
96
+ expect(source.creatableFieldTypes).toEqual([{
97
+ patternsType: 'SHORT_TEXT'
98
+ }, {
99
+ patternsType: 'NUMBER'
100
+ }, {
101
+ patternsType: 'BOOLEAN'
102
+ }, {
103
+ patternsType: 'DATE'
104
+ }]);
105
+ });
106
+ it('builds an offset source keyed by the collectionId', () => {
107
+ const source = (0, _bexCore.defineSchemaSource)((0, _useCmsSchemaSource.cmsSchemaSourceInput)({
108
+ collectionId: 'Pokemon',
109
+ httpClient
110
+ }));
111
+ expect(source.collectionId).toBe('Pokemon');
112
+ expect(source.paginationMode).toBe('offset');
113
+ });
114
+ it('auto-builds a reference source per reference field once the schema loads', async () => {
115
+ const source = (0, _bexCore.defineSchemaSource)((0, _useCmsSchemaSource.cmsSchemaSourceInput)({
116
+ collectionId: 'Products',
117
+ httpClient
118
+ }));
119
+
120
+ // Nothing is wired until the schema (and its reference fields) is known.
121
+ expect(source.references).toEqual({});
122
+ await source.loadSchema();
123
+ expect(source.references.Camels).toBeDefined();
124
+ expect(source.references.Camels.collectionId).toBe('Camels');
125
+ });
126
+ it('keeps a seeded reference source instead of auto-building it', async () => {
127
+ const seeded = (0, _bexCore.defineSchemaSource)((0, _useCmsSchemaSource.cmsSchemaSourceInput)({
128
+ collectionId: 'Camels',
129
+ httpClient
130
+ }));
131
+ const source = (0, _bexCore.defineSchemaSource)((0, _useCmsSchemaSource.cmsSchemaSourceInput)({
132
+ collectionId: 'Products',
133
+ httpClient,
134
+ references: {
135
+ Camels: seeded
136
+ }
137
+ }));
138
+ await source.loadSchema();
139
+ expect(source.references.Camels).toBe(seeded);
140
+ });
141
+ });
142
+ //# sourceMappingURL=useCmsSchemaSource.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_bexCore","require","_data","_useCmsSchemaSource","_fetchUserPermissions","_fetchExternalDbConnections","jest","mock","errorHandler","withErrorHandler","fn","actual","requireActual","collections","getDataCollection","fetchUserPermissions","fetchExternalDbConnections","fetchUserPermissionsMock","fetchExternalDbConnectionsMock","httpClient","collectionWithReference","_id","collectionType","displayField","capabilities","dataOperations","permissions","read","insert","update","remove","plugins","fields","key","type","Type","TEXT","systemField","encrypted","displayName","queryOperators","sortable","REFERENCE","typeMetadata","reference","referencedCollectionId","describe","beforeEach","clearAllMocks","mockResolvedValue","it","source","defineSchemaSource","cmsSchemaSourceInput","collectionId","expect","creatableFieldTypes","toEqual","patternsType","toBe","paginationMode","references","loadSchema","Camels","toBeDefined","seeded"],"sources":["../../../../src/adapter/__tests__/useCmsSchemaSource.spec.ts"],"sourcesContent":["import { defineSchemaSource } from '@wix/bex-core';\nimport { collections } from '@wix/data';\nimport { cmsSchemaSourceInput } from '../useCmsSchemaSource';\nimport { fetchUserPermissions } from '../fetchUserPermissions';\nimport { fetchExternalDbConnections } from '../fetchExternalDbConnections';\n\n// loadCmsSchema imports errorHandler at evaluation time; stub it so importing\n// the source builder is side-effect free.\njest.mock('@wix/essentials', () => ({\n errorHandler: {\n withErrorHandler: (fn: () => unknown) => fn(),\n },\n}));\n\n// Keep @wix/data real (cmsFieldTypeMap reads `collections.Type` at evaluation\n// time) and stub only the collection fetch, so loadSchema runs the real\n// loader + transform against a fixed collection.\njest.mock('@wix/data', () => {\n const actual = jest.requireActual('@wix/data');\n return {\n ...actual,\n collections: {\n ...actual.collections,\n getDataCollection: jest.fn(),\n },\n };\n});\njest.mock('../fetchUserPermissions', () => ({\n fetchUserPermissions: jest.fn(),\n}));\njest.mock('../fetchExternalDbConnections', () => ({\n fetchExternalDbConnections: jest.fn(),\n}));\n\nconst getDataCollection = collections.getDataCollection as unknown as jest.Mock;\nconst fetchUserPermissionsMock = fetchUserPermissions as unknown as jest.Mock;\nconst fetchExternalDbConnectionsMock =\n fetchExternalDbConnections as unknown as jest.Mock;\n\nconst httpClient = {} as unknown as Parameters<\n typeof cmsSchemaSourceInput\n>[0]['httpClient'];\n\n// A collection with one reference field pointing at \"Camels\".\nconst collectionWithReference = (): collections.DataCollection => ({\n _id: 'Products',\n collectionType: 'NATIVE',\n displayField: 'title',\n capabilities: { dataOperations: ['SAVE', 'UPDATE', 'REMOVE'] },\n permissions: {\n read: 'ANYONE',\n insert: 'SITE_MEMBER',\n update: 'SITE_MEMBER',\n remove: 'SITE_MEMBER',\n },\n plugins: [],\n fields: [\n {\n key: 'title',\n type: collections.Type.TEXT,\n systemField: false,\n encrypted: false,\n plugins: [],\n displayName: 'Title',\n capabilities: { queryOperators: [], sortable: true },\n },\n {\n key: 'supplier',\n type: collections.Type.REFERENCE,\n systemField: false,\n encrypted: false,\n plugins: [],\n displayName: 'Supplier',\n capabilities: { queryOperators: [], sortable: false },\n typeMetadata: { reference: { referencedCollectionId: 'Camels' } },\n },\n ],\n});\n\ndescribe('useCmsSchemaSource', () => {\n beforeEach(() => {\n jest.clearAllMocks();\n getDataCollection.mockResolvedValue(collectionWithReference());\n fetchUserPermissionsMock.mockResolvedValue([]);\n fetchExternalDbConnectionsMock.mockResolvedValue([]);\n });\n\n it('declares the creatable types in display order — labels come from the standard names in the UI', () => {\n const source = defineSchemaSource(\n cmsSchemaSourceInput({\n collectionId: 'Pokemon',\n httpClient,\n }),\n );\n\n expect(source.creatableFieldTypes).toEqual([\n { patternsType: 'SHORT_TEXT' },\n { patternsType: 'NUMBER' },\n { patternsType: 'BOOLEAN' },\n { patternsType: 'DATE' },\n ]);\n });\n\n it('builds an offset source keyed by the collectionId', () => {\n const source = defineSchemaSource(\n cmsSchemaSourceInput({\n collectionId: 'Pokemon',\n httpClient,\n }),\n );\n\n expect(source.collectionId).toBe('Pokemon');\n expect(source.paginationMode).toBe('offset');\n });\n\n it('auto-builds a reference source per reference field once the schema loads', async () => {\n const source = defineSchemaSource(\n cmsSchemaSourceInput({ collectionId: 'Products', httpClient }),\n );\n\n // Nothing is wired until the schema (and its reference fields) is known.\n expect(source.references).toEqual({});\n\n await source.loadSchema();\n\n expect(source.references.Camels).toBeDefined();\n expect(source.references.Camels.collectionId).toBe('Camels');\n });\n\n it('keeps a seeded reference source instead of auto-building it', async () => {\n const seeded = defineSchemaSource(\n cmsSchemaSourceInput({ collectionId: 'Camels', httpClient }),\n );\n const source = defineSchemaSource(\n cmsSchemaSourceInput({\n collectionId: 'Products',\n httpClient,\n references: { Camels: seeded },\n }),\n );\n\n await source.loadSchema();\n\n expect(source.references.Camels).toBe(seeded);\n });\n});\n"],"mappings":"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","ignoreList":[]}
@@ -23,6 +23,8 @@ const updateMultiReferences = async (collectionId, entityId, entity, multiRefere
23
23
  }));
24
24
  };
25
25
 
26
+ /** CMS supports every item capability except `move`. */
27
+
26
28
  /**
27
29
  * Builds the `CollectionBackend` for a CMS collection over `@wix/data`. Reference
28
30
  * fields are expanded via `.include(...)` on `get`/`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","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 CollectionBackendBase,\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/** 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 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,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.createCmsSchemaSource = 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;
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 _createCmsSchemaSource = require("./createCmsSchemaSource");
9
- exports.createCmsSchemaSource = _createCmsSchemaSource.createCmsSchemaSource;
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","_createCmsSchemaSource","createCmsSchemaSource","_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 createCmsSchemaSource,\n type CreateCmsSchemaSourceDeps,\n} from './createCmsSchemaSource';\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,sBAAA,GAAAJ,OAAA;AAGiCC,OAAA,CAAAI,qBAAA,GAAAD,sBAAA,CAAAC,qBAAA;AACjC,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
+ {"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":[]}
@@ -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
- isSystem: field.systemField ?? false,
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, Schema } from '@wix/bex-core';\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 isSystem: field.systemField ?? false,\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":[]}
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, Schema } from '@wix/bex-core';\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":";;;;AAEA,IAAAA,gBAAA,GAAAC,OAAA;AACA,IAAAC,eAAA,GAAAD,OAAA;AAYA;AACO,SAASE,kBAAkBA,CAChCC,MAAkC,EAClCC,OAAkC,GAAG,CAAC,CAAC,EAC/B;EACR,MAAM;IAAEC,eAAe,GAAG,EAAE;IAAEC,qBAAqB,GAAG;EAAG,CAAC,GAAGF,OAAO;EACpE,MAAMG,YAAY,GAAGJ,MAAM,CAACK,GAAa;EAEzC,MAAMC,iBAAiB,GAAG,CAACN,MAAM,CAACO,MAAM,IAAI,EAAE,EAAEC,MAAM,CACpD,CAACC,GAAG,EAAEC,KAAK,KAAK;IAAA,IAAAC,mBAAA,EAAAC,oBAAA,EAAAC,mBAAA,EAAAC,oBAAA;IACd,IAAI,CAACJ,KAAK,CAACK,GAAG,EAAE;MACd,OAAON,GAAG;IACZ;IAEA,MAAMO,SAAS,GAAGN,KAAK,CAACO,IAAI,GACxBC,gDAA+B,CAACR,KAAK,CAACO,IAAI,CAAC,IAAI,SAAS,GACxD,SAAS;IAEb,MAAME,SAAS,GAAG;MAChBC,EAAE,EAAEV,KAAK,CAACK,GAAG;MACbM,WAAW,EAAEX,KAAK,CAACW,WAAW,IAAI,EAAE;MACpCC,SAAS,EAAEZ,KAAK,CAACK,GAAG,KAAKf,MAAM,CAACuB,YAAY;MAC5CC,KAAK,EAAEd,KAAK,CAACe,SAAS,IAAI,KAAK;MAC/BC,QAAQ,EAAEhB,KAAK,CAACiB,WAAW,IAAIC,SAAS;MACxC;MACA;MACA;MACAC,QAAQ,EACN,CAACnB,KAAK,CAACoB,WAAW,IAAI,KAAK,KAAKpB,KAAK,CAACK,GAAG,CAACgB,UAAU,CAAC,aAAa,CAAC;MACrEC,UAAU,EAAE;QACVC,WAAW,EAAEvB,KAAK,CAACuB,WAAW,GAC1B;UACEC,GAAG,EAAExB,KAAK,CAACuB,WAAW,CAACC,GAAG,IAAIN,SAAS;UACvCO,GAAG,EAAEzB,KAAK,CAACuB,WAAW,CAACE,GAAG,IAAIP;QAChC,CAAC,GACDA,SAAS;QACbQ,iBAAiB,EAAE1B,KAAK,CAAC0B,iBAAiB,GACtC;UACEC,SAAS,EAAE3B,KAAK,CAAC0B,iBAAiB,CAACC,SAAS,IAAIT,SAAS;UACzDU,SAAS,EAAE5B,KAAK,CAAC0B,iBAAiB,CAACE,SAAS,IAAIV;QAClD,CAAC,GACDA,SAAS;QACbW,QAAQ,EAAE7B,KAAK,CAAC6B,QAAQ,IAAI;MAC9B,CAAC;MACDC,YAAY,EAAE;QACZC,uBAAuB,EAAE,EAAA9B,mBAAA,GAAAD,KAAK,CAAC8B,YAAY,qBAAlB7B,mBAAA,CAAoB+B,cAAc,KAAI,EAAE;QACjEC,QAAQ,EAAE,EAAA/B,oBAAA,GAAAF,KAAK,CAAC8B,YAAY,qBAAlB5B,oBAAA,CAAoB+B,QAAQ,KAAI;MAC5C;IACF,CAAC;IAED,MAAMC,sBAAsB,GAC1B,EAAA/B,mBAAA,GAAAH,KAAK,CAACmC,YAAY,cAAAhC,mBAAA,GAAlBA,mBAAA,CAAoBiC,SAAS,qBAA7BjC,mBAAA,CAA+B+B,sBAAsB,OAAA9B,oBAAA,GACrDJ,KAAK,CAACmC,YAAY,cAAA/B,oBAAA,GAAlBA,oBAAA,CAAoBiC,cAAc,qBAAlCjC,oBAAA,CAAoC8B,sBAAsB;IAE5D,MAAMI,WAAW,GACfhC,SAAS,KAAK,WAAW,IAAIA,SAAS,KAAK,iBAAiB;IAE9D,IAAIgC,WAAW,IAAIJ,sBAAsB,EAAE;MACzCnC,GAAG,CAACC,KAAK,CAACK,GAAG,CAAC,GAAG;QACf,GAAGI,SAAS;QACZF,IAAI,EAAED,SAA4C;QAClDiC,iBAAiB,EAAE;UAAEL;QAAuB;MAC9C,CAAC;IACH,CAAC,MAAM;MACLnC,GAAG,CAACC,KAAK,CAACK,GAAG,CAAC,GAAG;QACf,GAAGI,SAAS;QACZ;QACAF,IAAI,EAAE+B,WAAW,GAAG,SAAS,GAAGhC;MAClC,CAAC;IACH;IAEA,OAAOP,GAAG;EACZ,CAAC,EACD,CAAC,CACH,CAAC;EAED,MAAM;IAAEyC,iBAAiB;IAAEC;EAAgB,CAAC,GAAG,IAAAC,qCAAqB,EAClEpD,MAAM,EACNE,eAAe,EACfC,qBACF,CAAC;EAED,OAAO;IACLiB,EAAE,EAAEhB,YAAY;IAChBG,MAAM,EAAED,iBAAiB;IACzBiB,YAAY,EAAEvB,MAAM,CAACuB,YAAY,IAAI,KAAK;IAC1C8B,OAAO,EAAE,KAAK;IACdH,iBAAiB;IACjBC;EACF,CAAC;AACH","ignoreList":[]}
@@ -0,0 +1,72 @@
1
+ "use strict";
2
+
3
+ exports.__esModule = true;
4
+ exports.cmsSchemaSourceInput = cmsSchemaSourceInput;
5
+ exports.useCmsSchemaSource = useCmsSchemaSource;
6
+ var _react = require("@wix/bex-core/react");
7
+ var _bexCore = require("@wix/bex-core");
8
+ var _loadCmsSchema = require("./loadCmsSchema");
9
+ // The field types the add/edit modal offers, in display order. These are the
10
+ // only types @wix/data can create (see PatternsFieldTypeToCmsFieldType).
11
+ const CMS_CREATABLE_TYPES = [{
12
+ patternsType: 'SHORT_TEXT'
13
+ }, {
14
+ patternsType: 'NUMBER'
15
+ }, {
16
+ patternsType: 'BOOLEAN'
17
+ }, {
18
+ patternsType: 'DATE'
19
+ }];
20
+ function cmsSchemaSourceInput(deps) {
21
+ const {
22
+ collectionId,
23
+ references: seedReferences,
24
+ ...loaderDeps
25
+ } = deps;
26
+ const loader = (0, _loadCmsSchema.createCmsSchemaLoader)(loaderDeps);
27
+
28
+ // Reference fields are wired automatically: when the schema loads, each
29
+ // REFERENCE / MULTI_REFERENCE field's referencedCollectionId gets a child CMS
30
+ // source (same loader deps) added to `references`, so entity-page reference
31
+ // inputs can query the referenced collection with no manual wiring. The object
32
+ // is shared with the resolved source; seeded entries win over auto-built ones.
33
+ const references = {
34
+ ...seedReferences
35
+ };
36
+ const loadSchema = async () => {
37
+ const loaded = await loader(collectionId);
38
+ Object.values(loaded.schema.fields).forEach(field => {
39
+ if ((field == null ? void 0 : field.type) !== 'REFERENCE' && (field == null ? void 0 : field.type) !== 'MULTI_REFERENCE') {
40
+ return;
41
+ }
42
+ const referencedCollectionId = field.referenceMetadata.referencedCollectionId;
43
+ if (referencedCollectionId && !references[referencedCollectionId]) {
44
+ references[referencedCollectionId] = (0, _bexCore.defineSchemaSource)(cmsSchemaSourceInput({
45
+ collectionId: referencedCollectionId,
46
+ ...loaderDeps
47
+ }));
48
+ }
49
+ });
50
+ return loaded;
51
+ };
52
+ return {
53
+ collectionId,
54
+ loadSchema,
55
+ creatableFieldTypes: CMS_CREATABLE_TYPES,
56
+ references
57
+ };
58
+ }
59
+
60
+ /**
61
+ * A ready-to-use `SchemaSource` for a CMS collection: wraps the CMS schema
62
+ * loader and supplies the CMS field types. Pass it to a `@wix/patterns/schema`
63
+ * collection hook.
64
+ */
65
+ function useCmsSchemaSource(deps) {
66
+ const container = (0, _react.useWixPatternsContainer)();
67
+ return (0, _react.useSchemaSource)(cmsSchemaSourceInput({
68
+ ...deps,
69
+ httpClient: deps.httpClient ?? container.httpClient
70
+ }));
71
+ }
72
+ //# sourceMappingURL=useCmsSchemaSource.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_react","require","_bexCore","_loadCmsSchema","CMS_CREATABLE_TYPES","patternsType","cmsSchemaSourceInput","deps","collectionId","references","seedReferences","loaderDeps","loader","createCmsSchemaLoader","loadSchema","loaded","Object","values","schema","fields","forEach","field","type","referencedCollectionId","referenceMetadata","defineSchemaSource","creatableFieldTypes","useCmsSchemaSource","container","useWixPatternsContainer","useSchemaSource","httpClient"],"sources":["../../../src/adapter/useCmsSchemaSource.ts"],"sourcesContent":["import { useSchemaSource, useWixPatternsContainer } from '@wix/bex-core/react';\nimport { defineSchemaSource } from '@wix/bex-core';\nimport type {\n CreatableFieldType,\n SchemaSource,\n SchemaSourceInput,\n} from '@wix/bex-core';\nimport {\n createCmsSchemaLoader,\n type CreateCmsSchemaLoaderDeps,\n} from './loadCmsSchema';\n\n// The field types the add/edit modal offers, in display order. These are the\n// only types @wix/data can create (see PatternsFieldTypeToCmsFieldType).\nconst CMS_CREATABLE_TYPES: CreatableFieldType[] = [\n { patternsType: 'SHORT_TEXT' },\n { patternsType: 'NUMBER' },\n { patternsType: 'BOOLEAN' },\n { patternsType: 'DATE' },\n];\n\nexport interface UseCmsSchemaSourceDeps\n extends Omit<CreateCmsSchemaLoaderDeps, 'httpClient'> {\n collectionId: string;\n /** Default: the patterns container's client. */\n httpClient?: CreateCmsSchemaLoaderDeps['httpClient'];\n /** Seed sources for referenced collections, keyed by referenced collection\n * id. Usually unnecessary — reference fields are resolved automatically from\n * the loaded schema. Provide an entry only to override the auto-built one. */\n references?: Record<string, SchemaSource<any>>;\n}\n\nexport function cmsSchemaSourceInput<\n T extends Record<string, unknown> = Record<string, unknown>,\n>(\n deps: UseCmsSchemaSourceDeps & Pick<CreateCmsSchemaLoaderDeps, 'httpClient'>,\n): SchemaSourceInput<T> {\n const { collectionId, references: seedReferences, ...loaderDeps } = deps;\n const loader = createCmsSchemaLoader<T>(loaderDeps);\n\n // Reference fields are wired automatically: when the schema loads, each\n // REFERENCE / MULTI_REFERENCE field's referencedCollectionId gets a child CMS\n // source (same loader deps) added to `references`, so entity-page reference\n // inputs can query the referenced collection with no manual wiring. The object\n // is shared with the resolved source; seeded entries win over auto-built ones.\n const references: Record<string, SchemaSource<any>> = { ...seedReferences };\n\n const loadSchema = async () => {\n const loaded = await loader(collectionId);\n Object.values(loaded.schema.fields).forEach((field) => {\n if (field?.type !== 'REFERENCE' && field?.type !== 'MULTI_REFERENCE') {\n return;\n }\n const referencedCollectionId =\n field.referenceMetadata.referencedCollectionId;\n if (referencedCollectionId && !references[referencedCollectionId]) {\n references[referencedCollectionId] = defineSchemaSource(\n cmsSchemaSourceInput({\n collectionId: referencedCollectionId,\n ...loaderDeps,\n }),\n );\n }\n });\n return loaded;\n };\n\n return {\n collectionId,\n loadSchema,\n creatableFieldTypes: CMS_CREATABLE_TYPES,\n references,\n };\n}\n\n/**\n * A ready-to-use `SchemaSource` for a CMS collection: wraps the CMS schema\n * loader and supplies the CMS field types. Pass it to a `@wix/patterns/schema`\n * collection hook.\n */\nexport function useCmsSchemaSource<\n T extends Record<string, unknown> = Record<string, unknown>,\n>(deps: UseCmsSchemaSourceDeps): SchemaSource<T> {\n const container = useWixPatternsContainer();\n return useSchemaSource<T>(\n cmsSchemaSourceInput<T>({\n ...deps,\n httpClient: deps.httpClient ?? container.httpClient,\n }),\n );\n}\n"],"mappings":";;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,QAAA,GAAAD,OAAA;AAMA,IAAAE,cAAA,GAAAF,OAAA;AAKA;AACA;AACA,MAAMG,mBAAyC,GAAG,CAChD;EAAEC,YAAY,EAAE;AAAa,CAAC,EAC9B;EAAEA,YAAY,EAAE;AAAS,CAAC,EAC1B;EAAEA,YAAY,EAAE;AAAU,CAAC,EAC3B;EAAEA,YAAY,EAAE;AAAO,CAAC,CACzB;AAaM,SAASC,oBAAoBA,CAGlCC,IAA4E,EACtD;EACtB,MAAM;IAAEC,YAAY;IAAEC,UAAU,EAAEC,cAAc;IAAE,GAAGC;EAAW,CAAC,GAAGJ,IAAI;EACxE,MAAMK,MAAM,GAAG,IAAAC,oCAAqB,EAAIF,UAAU,CAAC;;EAEnD;EACA;EACA;EACA;EACA;EACA,MAAMF,UAA6C,GAAG;IAAE,GAAGC;EAAe,CAAC;EAE3E,MAAMI,UAAU,GAAG,MAAAA,CAAA,KAAY;IAC7B,MAAMC,MAAM,GAAG,MAAMH,MAAM,CAACJ,YAAY,CAAC;IACzCQ,MAAM,CAACC,MAAM,CAACF,MAAM,CAACG,MAAM,CAACC,MAAM,CAAC,CAACC,OAAO,CAAEC,KAAK,IAAK;MACrD,IAAI,CAAAA,KAAK,oBAALA,KAAK,CAAEC,IAAI,MAAK,WAAW,IAAI,CAAAD,KAAK,oBAALA,KAAK,CAAEC,IAAI,MAAK,iBAAiB,EAAE;QACpE;MACF;MACA,MAAMC,sBAAsB,GAC1BF,KAAK,CAACG,iBAAiB,CAACD,sBAAsB;MAChD,IAAIA,sBAAsB,IAAI,CAACd,UAAU,CAACc,sBAAsB,CAAC,EAAE;QACjEd,UAAU,CAACc,sBAAsB,CAAC,GAAG,IAAAE,2BAAkB,EACrDnB,oBAAoB,CAAC;UACnBE,YAAY,EAAEe,sBAAsB;UACpC,GAAGZ;QACL,CAAC,CACH,CAAC;MACH;IACF,CAAC,CAAC;IACF,OAAOI,MAAM;EACf,CAAC;EAED,OAAO;IACLP,YAAY;IACZM,UAAU;IACVY,mBAAmB,EAAEtB,mBAAmB;IACxCK;EACF,CAAC;AACH;;AAEA;AACA;AACA;AACA;AACA;AACO,SAASkB,kBAAkBA,CAEhCpB,IAA4B,EAAmB;EAC/C,MAAMqB,SAAS,GAAG,IAAAC,8BAAuB,EAAC,CAAC;EAC3C,OAAO,IAAAC,sBAAe,EACpBxB,oBAAoB,CAAI;IACtB,GAAGC,IAAI;IACPwB,UAAU,EAAExB,IAAI,CAACwB,UAAU,IAAIH,SAAS,CAACG;EAC3C,CAAC,CACH,CAAC;AACH","ignoreList":[]}
@@ -6,6 +6,7 @@ exports.mockCmsItems = mockCmsItems;
6
6
  var _fetchMock = require("@wix/sdk-testkit/fetch-mock");
7
7
  var _meta = require("@wix/data/meta");
8
8
  var _data = require("@wix/data");
9
+ var _bexCore = require("@wix/bex-core");
9
10
  var _cmsFieldTypeMap = require("../adapter/cmsFieldTypeMap");
10
11
  var itemsApi = _interopRequireWildcard(require("@wix/wix-data-items-sdk/build/cjs/src/data-items-api-client"));
11
12
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
@@ -45,7 +46,7 @@ function collectionResponse(collectionId, fields, displayField) {
45
46
  }
46
47
 
47
48
  /**
48
- * Routes the collection schema (`getDataCollection`) that `createCmsSchemaSource`
49
+ * Routes the collection schema (`getDataCollection`) that `useCmsSchemaSource`
49
50
  * loads. `@wix/data` issues real fetch calls; the caller's fetch-mock instance
50
51
  * intercepts them by URL.
51
52
  */
@@ -96,12 +97,12 @@ function queryDataItemsMeta() {
96
97
  }
97
98
 
98
99
  // A resolver reads a page of rows for a decoded query — this is exactly a schema
99
- // source's `collectionConfig.fetchData`, so an in-memory source wires straight
100
- // in. A plain array is normalized to one below.
100
+ // source's derived fetch (`sourceFetchData`), so an in-memory source wires
101
+ // straight in. A plain array is normalized to one below.
101
102
 
102
103
  /**
103
104
  * What `mockCmsItems` serves: either plain rows or a resolver that returns a page
104
- * per query (a schema source's `collectionConfig.fetchData` is exactly a resolver).
105
+ * per query (a schema source's derived fetch is exactly a resolver).
105
106
  */
106
107
 
107
108
  /**
@@ -142,10 +143,10 @@ function toResolver(items) {
142
143
  /**
143
144
  * Routes the collection's rows (`items.query(...).find()`). Pass plain rows, or a
144
145
  * resolver `(query) => Promise<{ items, total }>` — the latter is a schema source's
145
- * `collectionConfig.fetchData`, so an in-memory source drives paging per request.
146
+ * `sourceFetchData(source)`, so an in-memory source drives paging per request.
146
147
  */
147
148
  function mockCmsItems(fetchMock, options) {
148
- const resolve = 'source' in options ? options.source.collectionConfig.fetchData : toResolver(options.items);
149
+ const resolve = 'source' in options ? (0, _bexCore.sourceFetchData)(options.source) : toResolver(options.items);
149
150
  const [url] = (0, _fetchMock.when)(queryDataItemsMeta()).reply(null);
150
151
  fetchMock.route(url, async opts => {
151
152
  const {