@wix/patterns-cms 1.9.0 → 1.11.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 (44) hide show
  1. package/dist/cjs/adapter/__tests__/cmsFieldActions.spec.js +71 -1
  2. package/dist/cjs/adapter/__tests__/cmsFieldActions.spec.js.map +1 -1
  3. package/dist/cjs/adapter/__tests__/createCmsSchemaSource.spec.js +10 -11
  4. package/dist/cjs/adapter/__tests__/createCmsSchemaSource.spec.js.map +1 -1
  5. package/dist/cjs/adapter/createCmsFieldActions.js +51 -23
  6. package/dist/cjs/adapter/createCmsFieldActions.js.map +1 -1
  7. package/dist/cjs/adapter/createCmsSchemaSource.js +4 -12
  8. package/dist/cjs/adapter/createCmsSchemaSource.js.map +1 -1
  9. package/dist/cjs/adapter/index.js +3 -1
  10. package/dist/cjs/adapter/index.js.map +1 -1
  11. package/dist/cjs/adapter/listCmsCollections.js +15 -0
  12. package/dist/cjs/adapter/listCmsCollections.js.map +1 -0
  13. package/dist/cjs/testkit/cmsFetchMocks.js +165 -0
  14. package/dist/cjs/testkit/cmsFetchMocks.js.map +1 -0
  15. package/dist/cjs/testkit/index.js +10 -0
  16. package/dist/cjs/testkit/index.js.map +1 -0
  17. package/dist/esm/adapter/__tests__/cmsFieldActions.spec.js +53 -0
  18. package/dist/esm/adapter/__tests__/cmsFieldActions.spec.js.map +1 -1
  19. package/dist/esm/adapter/__tests__/createCmsSchemaSource.spec.js +6 -15
  20. package/dist/esm/adapter/__tests__/createCmsSchemaSource.spec.js.map +1 -1
  21. package/dist/esm/adapter/createCmsFieldActions.js +47 -22
  22. package/dist/esm/adapter/createCmsFieldActions.js.map +1 -1
  23. package/dist/esm/adapter/createCmsSchemaSource.js +4 -20
  24. package/dist/esm/adapter/createCmsSchemaSource.js.map +1 -1
  25. package/dist/esm/adapter/index.js +1 -0
  26. package/dist/esm/adapter/index.js.map +1 -1
  27. package/dist/esm/adapter/listCmsCollections.js +13 -0
  28. package/dist/esm/adapter/listCmsCollections.js.map +1 -0
  29. package/dist/esm/testkit/cmsFetchMocks.js +115 -0
  30. package/dist/esm/testkit/cmsFetchMocks.js.map +1 -0
  31. package/dist/esm/testkit/index.js +2 -0
  32. package/dist/esm/testkit/index.js.map +1 -0
  33. package/dist/types/adapter/createCmsFieldActions.d.ts.map +1 -1
  34. package/dist/types/adapter/createCmsSchemaSource.d.ts.map +1 -1
  35. package/dist/types/adapter/index.d.ts +1 -0
  36. package/dist/types/adapter/index.d.ts.map +1 -1
  37. package/dist/types/adapter/listCmsCollections.d.ts +7 -0
  38. package/dist/types/adapter/listCmsCollections.d.ts.map +1 -0
  39. package/dist/types/testkit/cmsFetchMocks.d.ts +47 -0
  40. package/dist/types/testkit/cmsFetchMocks.d.ts.map +1 -0
  41. package/dist/types/testkit/index.d.ts +2 -0
  42. package/dist/types/testkit/index.d.ts.map +1 -0
  43. package/package.json +20 -6
  44. package/testkit/package.json +6 -0
@@ -0,0 +1,13 @@
1
+ import { collections } from '@wix/data';
2
+ import { errorHandler } from '@wix/essentials';
3
+ /** Lists the site's CMS collections — for collection pickers. */
4
+ export async function listCmsCollections() {
5
+ const response = await errorHandler.withErrorHandler(async () => collections.listDataCollections(), {});
6
+ return (response.collections ?? [])
7
+ .map((collection) => ({
8
+ id: collection._id ?? '',
9
+ displayName: collection.displayName ?? collection._id ?? '',
10
+ }))
11
+ .filter((collection) => collection.id !== '');
12
+ }
13
+ //# sourceMappingURL=listCmsCollections.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listCmsCollections.js","sourceRoot":"","sources":["../../../src/adapter/listCmsCollections.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAO/C,iEAAiE;AACjE,MAAM,CAAC,KAAK,UAAU,kBAAkB;IACtC,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,gBAAgB,CAClD,KAAK,IAAI,EAAE,CAAC,WAAW,CAAC,mBAAmB,EAAE,EAC7C,EAAE,CACH,CAAC;IACF,OAAO,CAAC,QAAQ,CAAC,WAAW,IAAI,EAAE,CAAC;SAChC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;QACpB,EAAE,EAAE,UAAU,CAAC,GAAG,IAAI,EAAE;QACxB,WAAW,EAAE,UAAU,CAAC,WAAW,IAAI,UAAU,CAAC,GAAG,IAAI,EAAE;KAC5D,CAAC,CAAC;SACF,MAAM,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;AAClD,CAAC"}
@@ -0,0 +1,115 @@
1
+ import { when } from '@wix/sdk-testkit/fetch-mock';
2
+ import { collections as collectionsMeta } from '@wix/data/meta';
3
+ import { collections } from '@wix/data';
4
+ import { PatternsFieldTypeToCmsFieldType } from '../adapter/cmsFieldTypeMap';
5
+ // The query endpoint's request options aren't exposed on any public entry, so
6
+ // reach into the items SDK internals to derive its URL (no @wix/data/meta entry).
7
+ // eslint-disable-next-line no-restricted-imports
8
+ import * as itemsApi from '@wix/wix-data-items-sdk/build/cjs/src/data-items-api-client';
9
+ function toCmsFields(fields, idField) {
10
+ return Object.values(fields)
11
+ .filter((field) => field != null)
12
+ .map((field) => ({
13
+ key: field.id,
14
+ displayName: field.displayName,
15
+ type: PatternsFieldTypeToCmsFieldType[field.type] ?? collections.Type.TEXT,
16
+ ...(field.id === idField ? { systemField: true } : {}),
17
+ }));
18
+ }
19
+ function collectionResponse(collectionId, fields, displayField) {
20
+ return {
21
+ referencedCollections: [],
22
+ collection: {
23
+ id: collectionId,
24
+ collectionType: collections.CollectionType.WIX_APP,
25
+ pagingModes: [collections.PagingMode.OFFSET],
26
+ plugins: [],
27
+ displayField,
28
+ fields,
29
+ },
30
+ };
31
+ }
32
+ /**
33
+ * Routes the collection schema (`getDataCollection`) that `createCmsSchemaSource`
34
+ * loads. `@wix/data` issues real fetch calls; the caller's fetch-mock instance
35
+ * intercepts them by URL.
36
+ */
37
+ export function mockCmsCollection(fetchMock, options) {
38
+ if ('source' in options) {
39
+ const { source } = options;
40
+ const [url] = when(collectionsMeta.getDataCollection())
41
+ .withParams({ dataCollectionId: source.collectionId })
42
+ .reply(undefined);
43
+ fetchMock.route(url, async () => {
44
+ const { schema } = await source.loadSchema();
45
+ return collectionResponse(source.collectionId, toCmsFields(schema.fields, schema.idField), schema.displayField);
46
+ });
47
+ return;
48
+ }
49
+ const { collectionId, fields, displayField = 'name' } = options;
50
+ const [url, data] = when(collectionsMeta.getDataCollection())
51
+ .withParams({ dataCollectionId: collectionId })
52
+ .reply(collectionResponse(collectionId, fields, displayField));
53
+ fetchMock.route(url, data);
54
+ }
55
+ // The items-query endpoint has no `@wix/data/meta` entry, so derive its URL from
56
+ // the wix-data-items SDK request options.
57
+ function queryDataItemsMeta() {
58
+ return {
59
+ getUrl: (context) =>
60
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
61
+ itemsApi.reqOptions(itemsApi.queryDataItemsRequestOptions, {})(context).url,
62
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
63
+ httpMethod: itemsApi.queryDataItemsRequestOptions.method,
64
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
65
+ path: itemsApi.queryDataItemsRequestOptions.httpPath,
66
+ pathParams: {},
67
+ __requestType: null,
68
+ __originalRequestType: null,
69
+ __responseType: null,
70
+ __originalResponseType: null,
71
+ };
72
+ }
73
+ function decodeOffsetQuery(opts) {
74
+ const raw = opts.queryParams.get('.r');
75
+ const query = raw ? JSON.parse(atob(raw))?.query : undefined;
76
+ return {
77
+ offset: query?.paging?.offset ?? 0,
78
+ limit: query?.paging?.limit ?? 100,
79
+ };
80
+ }
81
+ function toResolver(items) {
82
+ if (typeof items === 'function') {
83
+ return items;
84
+ }
85
+ // Plain array: slice by the requested page, report the full count as total.
86
+ return (async (query) => {
87
+ const offset = query.offset ?? 0;
88
+ const limit = query.limit ?? items.length;
89
+ const page = items.slice(offset, offset + limit);
90
+ return {
91
+ items: page,
92
+ total: items.length,
93
+ hasNext: offset + page.length < items.length,
94
+ };
95
+ });
96
+ }
97
+ /**
98
+ * Routes the collection's rows (`items.query(...).find()`). Pass plain rows, or a
99
+ * resolver `(query) => Promise<{ items, total }>` — the latter is a schema source's
100
+ * `collectionConfig.fetchData`, so an in-memory source drives paging per request.
101
+ */
102
+ export function mockCmsItems(fetchMock, options) {
103
+ const resolve = 'source' in options
104
+ ? options.source.collectionConfig.fetchData
105
+ : toResolver(options.items);
106
+ const [url] = when(queryDataItemsMeta()).reply(null);
107
+ fetchMock.route(url, async (opts) => {
108
+ const { items: page, total } = await resolve(decodeOffsetQuery(opts));
109
+ return {
110
+ dataItems: page.map((data) => ({ data })),
111
+ pagingMetadata: { total },
112
+ };
113
+ });
114
+ }
115
+ //# sourceMappingURL=cmsFetchMocks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cmsFetchMocks.js","sourceRoot":"","sources":["../../../src/testkit/cmsFetchMocks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,6BAA6B,CAAC;AACnD,OAAO,EAAE,WAAW,IAAI,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAExC,OAAO,EAAE,+BAA+B,EAAE,MAAM,4BAA4B,CAAC;AAC7E,8EAA8E;AAC9E,kFAAkF;AAClF,iDAAiD;AACjD,OAAO,KAAK,QAAQ,MAAM,6DAA6D,CAAC;AAmBxF,SAAS,WAAW,CAAC,MAAwB,EAAE,OAAe;IAC5D,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;SACzB,MAAM,CAAC,CAAC,KAAK,EAAsC,EAAE,CAAC,KAAK,IAAI,IAAI,CAAC;SACpE,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACf,GAAG,EAAE,KAAK,CAAC,EAAE;QACb,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,IAAI,EACF,+BAA+B,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI;QACtE,GAAG,CAAC,KAAK,CAAC,EAAE,KAAK,OAAO,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACvD,CAAC,CAAC,CAAC;AACR,CAAC;AAED,SAAS,kBAAkB,CACzB,YAAoB,EACpB,MAAqB,EACrB,YAAoB;IAEpB,OAAO;QACL,qBAAqB,EAAE,EAAE;QACzB,UAAU,EAAE;YACV,EAAE,EAAE,YAAY;YAChB,cAAc,EAAE,WAAW,CAAC,cAAc,CAAC,OAAO;YAClD,WAAW,EAAE,CAAC,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC;YAC5C,OAAO,EAAE,EAAE;YACX,YAAY;YACZ,MAAM;SACP;KACuC,CAAC;AAC7C,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAE/B,SAAoB,EAAE,OAAoC;IAC1D,IAAI,QAAQ,IAAI,OAAO,EAAE;QACvB,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;QAC3B,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,iBAAiB,EAAE,CAAC;aACpD,UAAU,CAAC,EAAE,gBAAgB,EAAE,MAAM,CAAC,YAAY,EAAE,CAAC;aACrD,KAAK,CAAC,SAAS,CAAC,CAAC;QAEpB,SAAS,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,IAAI,EAAE;YAC9B,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,UAAU,EAAE,CAAC;YAC7C,OAAO,kBAAkB,CACvB,MAAM,CAAC,YAAY,EACnB,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,EAC1C,MAAM,CAAC,YAAY,CACpB,CAAC;QACJ,CAAC,CAAC,CAAC;QACH,OAAO;KACR;IAED,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,YAAY,GAAG,MAAM,EAAE,GAAG,OAAO,CAAC;IAChE,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,iBAAiB,EAAE,CAAC;SAC1D,UAAU,CAAC,EAAE,gBAAgB,EAAE,YAAY,EAAE,CAAC;SAC9C,KAAK,CAAC,kBAAkB,CAAC,YAAY,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC;IAEjE,SAAS,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;AAC7B,CAAC;AAED,iFAAiF;AACjF,0CAA0C;AAC1C,SAAS,kBAAkB;IACzB,OAAO;QACL,MAAM,EAAE,CAAC,OAAgB,EAAE,EAAE;QAC3B,8DAA8D;QAC7D,QAAQ,CAAC,UAAkB,CAC1B,QAAQ,CAAC,4BAA4B,EACrC,EAAE,CACH,CAAC,OAAO,CAAC,CAAC,GAAG;QAChB,8DAA8D;QAC9D,UAAU,EAAG,QAAQ,CAAC,4BAAoC,CAAC,MAAM;QACjE,8DAA8D;QAC9D,IAAI,EAAG,QAAQ,CAAC,4BAAoC,CAAC,QAAQ;QAC7D,UAAU,EAAE,EAAE;QACd,aAAa,EAAE,IAAI;QACnB,qBAAqB,EAAE,IAAI;QAC3B,cAAc,EAAE,IAAI;QACpB,sBAAsB,EAAE,IAAI;KAC7B,CAAC;AACJ,CAAC;AA+BD,SAAS,iBAAiB,CACxB,IAAe;IAEf,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACvC,MAAM,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;IAC7D,OAAO;QACL,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC;QAClC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,GAAG;KACjB,CAAC;AACtB,CAAC;AAED,SAAS,UAAU,CACjB,KAAkB;IAElB,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE;QAC/B,OAAO,KAAK,CAAC;KACd;IACD,4EAA4E;IAC5E,OAAO,CAAC,KAAK,EAAE,KAAqB,EAAE,EAAE;QACtC,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC;QACjC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,CAAC;QAC1C,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,CAAC,CAAC;QACjD,OAAO;YACL,KAAK,EAAE,IAAI;YACX,KAAK,EAAE,KAAK,CAAC,MAAM;YACnB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM;SAC7C,CAAC;IACJ,CAAC,CAAqB,CAAC;AACzB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAC1B,SAAoB,EACpB,OAA+B;IAE/B,MAAM,OAAO,GACX,QAAQ,IAAI,OAAO;QACjB,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,SAAS;QAC3C,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAChC,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAErD,SAAS,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,EAAE,IAAe,EAAE,EAAE;QAC7C,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,OAAO,CAAC,iBAAiB,CAAI,IAAI,CAAC,CAAC,CAAC;QACzE,OAAO;YACL,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;YACzC,cAAc,EAAE,EAAE,KAAK,EAAE;SAC1B,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from './cmsFetchMocks';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/testkit/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"createCmsFieldActions.d.ts","sourceRoot":"","sources":["../../../src/adapter/createCmsFieldActions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAS,MAAM,WAAW,CAAC;AAC/C,OAAO,KAAK,EAAS,YAAY,EAAU,MAAM,eAAe,CAAC;AAqCjE;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,YAAY,EAAE,MAAM,EACpB,aAAa,EAAE,MAAM,WAAW,CAAC,cAAc,GAAG,IAAI,GACrD,YAAY,CA0Kd"}
1
+ {"version":3,"file":"createCmsFieldActions.d.ts","sourceRoot":"","sources":["../../../src/adapter/createCmsFieldActions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAS,MAAM,WAAW,CAAC;AAC/C,OAAO,KAAK,EAAS,YAAY,EAAU,MAAM,eAAe,CAAC;AAqCjE;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,YAAY,EAAE,MAAM,EACpB,aAAa,EAAE,MAAM,WAAW,CAAC,cAAc,GAAG,IAAI,GACrD,YAAY,CA0Md"}
@@ -1 +1 @@
1
- {"version":3,"file":"createCmsSchemaSource.d.ts","sourceRoot":"","sources":["../../../src/adapter/createCmsSchemaSource.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAsB,YAAY,EAAE,MAAM,eAAe,CAAC;AACtE,OAAO,EAEL,KAAK,yBAAyB,EAC/B,MAAM,iBAAiB,CAAC;AA8BzB,MAAM,WAAW,yBAA0B,SAAQ,yBAAyB;IAC1E,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC3D,IAAI,EAAE,yBAAyB,GAAG,YAAY,CAAC,CAAC,CAAC,CAQlD"}
1
+ {"version":3,"file":"createCmsSchemaSource.d.ts","sourceRoot":"","sources":["../../../src/adapter/createCmsSchemaSource.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAsB,YAAY,EAAE,MAAM,eAAe,CAAC;AACtE,OAAO,EAEL,KAAK,yBAAyB,EAC/B,MAAM,iBAAiB,CAAC;AAWzB,MAAM,WAAW,yBAA0B,SAAQ,yBAAyB;IAC1E,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC3D,IAAI,EAAE,yBAAyB,GAAG,YAAY,CAAC,CAAC,CAAC,CAQlD"}
@@ -1,5 +1,6 @@
1
1
  export { createCmsSchemaLoader, fetchCmsCollection, type CreateCmsSchemaLoaderDeps, } from './loadCmsSchema';
2
2
  export { createCmsSchemaSource, type CreateCmsSchemaSourceDeps, } from './createCmsSchemaSource';
3
+ export { listCmsCollections, type CmsCollectionSummary, } from './listCmsCollections';
3
4
  export { transformCmsSchema, type TransformCmsSchemaOptions, } from './transformCmsSchema';
4
5
  export { createCmsBackend } from './createCmsBackend';
5
6
  export { createCmsFieldActions } from './createCmsFieldActions';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/adapter/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,kBAAkB,EAClB,KAAK,yBAAyB,GAC/B,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,qBAAqB,EACrB,KAAK,yBAAyB,GAC/B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,kBAAkB,EAClB,KAAK,yBAAyB,GAC/B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EACL,qBAAqB,EACrB,KAAK,cAAc,EACnB,KAAK,oBAAoB,GAC1B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,+BAA+B,EAC/B,+BAA+B,EAC/B,cAAc,GACf,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,KAAK,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpE,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAC1E,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/adapter/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,kBAAkB,EAClB,KAAK,yBAAyB,GAC/B,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,qBAAqB,EACrB,KAAK,yBAAyB,GAC/B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,kBAAkB,EAClB,KAAK,oBAAoB,GAC1B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,kBAAkB,EAClB,KAAK,yBAAyB,GAC/B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EACL,qBAAqB,EACrB,KAAK,cAAc,EACnB,KAAK,oBAAoB,GAC1B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,+BAA+B,EAC/B,+BAA+B,EAC/B,cAAc,GACf,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,KAAK,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpE,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAC1E,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC"}
@@ -0,0 +1,7 @@
1
+ export interface CmsCollectionSummary {
2
+ id: string;
3
+ displayName: string;
4
+ }
5
+ /** Lists the site's CMS collections — for collection pickers. */
6
+ export declare function listCmsCollections(): Promise<CmsCollectionSummary[]>;
7
+ //# sourceMappingURL=listCmsCollections.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listCmsCollections.d.ts","sourceRoot":"","sources":["../../../src/adapter/listCmsCollections.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,iEAAiE;AACjE,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAW1E"}
@@ -0,0 +1,47 @@
1
+ import { collections } from '@wix/data';
2
+ import type { SchemaSource } from '@wix/bex-core';
3
+ import type { FetchMock } from 'fetch-mock';
4
+ export type WixDataFields = NonNullable<collections.GetDataCollectionResponse['collection']>['fields'];
5
+ /**
6
+ * Mock the collection schema (`getDataCollection`) either from explicit CMS fields
7
+ * or straight from a schema source — a `createInMemorySchemaSource` becomes the
8
+ * single source of truth for the schema, its contract fields converted back to CMS
9
+ * fields (types with no CMS mapping fall back to text — enough to render).
10
+ */
11
+ export type MockCmsCollectionOptions<T extends Record<string, unknown> = Record<string, unknown>> = {
12
+ collectionId: string;
13
+ fields: WixDataFields;
14
+ displayField?: string;
15
+ } | {
16
+ source: SchemaSource<T>;
17
+ };
18
+ /**
19
+ * Routes the collection schema (`getDataCollection`) that `createCmsSchemaSource`
20
+ * loads. `@wix/data` issues real fetch calls; the caller's fetch-mock instance
21
+ * intercepts them by URL.
22
+ */
23
+ export declare function mockCmsCollection<T extends Record<string, unknown> = Record<string, unknown>>(fetchMock: FetchMock, options: MockCmsCollectionOptions<T>): void;
24
+ type ItemsResolver<T> = SchemaSource<T>['collectionConfig']['fetchData'];
25
+ /**
26
+ * What `mockCmsItems` serves: either plain rows or a resolver that returns a page
27
+ * per query (a schema source's `collectionConfig.fetchData` is exactly a resolver).
28
+ */
29
+ export type CmsItems<T extends Record<string, unknown>> = T[] | ItemsResolver<T>;
30
+ /**
31
+ * Mock the rows either from explicit items/resolver or straight from a schema
32
+ * source — pass `{ source }` and a `createInMemorySchemaSource` becomes the single
33
+ * source of truth for the rows too.
34
+ */
35
+ export type MockCmsItemsOptions<T extends Record<string, unknown>> = {
36
+ items: CmsItems<T>;
37
+ } | {
38
+ source: SchemaSource<T>;
39
+ };
40
+ /**
41
+ * Routes the collection's rows (`items.query(...).find()`). Pass plain rows, or a
42
+ * resolver `(query) => Promise<{ items, total }>` — the latter is a schema source's
43
+ * `collectionConfig.fetchData`, so an in-memory source drives paging per request.
44
+ */
45
+ export declare function mockCmsItems<T extends Record<string, unknown>>(fetchMock: FetchMock, options: MockCmsItemsOptions<T>): void;
46
+ export {};
47
+ //# sourceMappingURL=cmsFetchMocks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cmsFetchMocks.d.ts","sourceRoot":"","sources":["../../../src/testkit/cmsFetchMocks.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,KAAK,EAAU,YAAY,EAAE,MAAM,eAAe,CAAC;AAM1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,MAAM,MAAM,aAAa,GAAG,WAAW,CACrC,WAAW,CAAC,yBAAyB,CAAC,YAAY,CAAC,CACpD,CAAC,QAAQ,CAAC,CAAC;AAEZ;;;;;GAKG;AACH,MAAM,MAAM,wBAAwB,CAClC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAEzD;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,aAAa,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,GACtE;IAAE,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,CAAA;CAAE,CAAC;AAgChC;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC3D,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,wBAAwB,CAAC,CAAC,CAAC,GAAG,IAAI,CAwBlE;AA2BD,KAAK,aAAa,CAAC,CAAC,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,WAAW,CAAC,CAAC;AAGzE;;;GAGG;AACH,MAAM,MAAM,QAAQ,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAClD,CAAC,EAAE,GACH,aAAa,CAAC,CAAC,CAAC,CAAC;AAErB;;;;GAIG;AACH,MAAM,MAAM,mBAAmB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAC7D;IAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAA;CAAE,GACtB;IAAE,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,CAAA;CAAE,CAAC;AAsChC;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5D,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAC9B,IAAI,CAcN"}
@@ -0,0 +1,2 @@
1
+ export * from './cmsFetchMocks';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/testkit/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wix/patterns-cms",
3
- "version": "1.9.0",
3
+ "version": "1.11.0",
4
4
  "license": "UNLICENSED",
5
5
  "author": {
6
6
  "name": "Cairo",
@@ -23,25 +23,39 @@
23
23
  "files": [
24
24
  "dist/cjs",
25
25
  "dist/esm",
26
- "dist/types"
26
+ "dist/types",
27
+ "testkit"
27
28
  ],
28
29
  "dependencies": {
29
30
  "@babel/runtime": "^7.0.0",
30
- "@wix/bex-core": "2.331.0",
31
- "@wix/bex-utils": "2.118.0",
31
+ "@wix/bex-core": "2.333.0",
32
+ "@wix/bex-utils": "2.120.0",
32
33
  "@wix/data": "^1.0.323",
34
+ "@wix/wix-data-items-sdk": "^1.0.504",
33
35
  "lodash": "^4.17.20",
34
36
  "tslib": "^2.0.0"
35
37
  },
36
38
  "peerDependencies": {
37
- "@wix/essentials": ">=0.1.26"
39
+ "@wix/essentials": ">=0.1.26",
40
+ "@wix/sdk-testkit": ">=0.1.6",
41
+ "fetch-mock": ">=12.5.2"
42
+ },
43
+ "peerDependenciesMeta": {
44
+ "@wix/sdk-testkit": {
45
+ "optional": true
46
+ },
47
+ "fetch-mock": {
48
+ "optional": true
49
+ }
38
50
  },
39
51
  "devDependencies": {
40
52
  "@types/lodash": "^4.14.168",
41
53
  "@wix/eslint-config-yoshi": "^6.74.0",
42
54
  "@wix/essentials": "^0.1.26",
43
55
  "@wix/jest-yoshi-preset-base": "^6.74.0",
56
+ "@wix/sdk-testkit": "^0.1.6",
44
57
  "@wix/yoshi-flow-library": "^6.74.0",
58
+ "fetch-mock": "^12.5.2",
45
59
  "ts-node": "^10.9.1",
46
60
  "typescript": "~4.9.5"
47
61
  },
@@ -119,5 +133,5 @@
119
133
  "wallaby": {
120
134
  "autoDetect": true
121
135
  },
122
- "falconPackageHash": "60444f855b8806e75c7a180a1038e9e463701c3fc7bcf6b8954c714a"
136
+ "falconPackageHash": "b778bb61a618d44cd686bc11c5646a2fdc4f7b2ea33908335200bd2f"
123
137
  }
@@ -0,0 +1,6 @@
1
+ {
2
+ "main": "../dist/cjs/testkit/index.js",
3
+ "module": "../dist/esm/testkit/index.js",
4
+ "types": "../dist/types/testkit/index.d.ts",
5
+ "sideEffects": false
6
+ }