@wix/patterns-cms 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/adapter/__tests__/cmsFieldActions.spec.js +436 -0
- package/dist/cjs/adapter/__tests__/cmsFieldActions.spec.js.map +1 -0
- package/dist/cjs/adapter/__tests__/cmsPermissions.spec.js +175 -0
- package/dist/cjs/adapter/__tests__/cmsPermissions.spec.js.map +1 -0
- package/dist/cjs/adapter/__tests__/createCmsBackend.spec.js +440 -0
- package/dist/cjs/adapter/__tests__/createCmsBackend.spec.js.map +1 -0
- package/dist/cjs/adapter/__tests__/filterUtils.spec.js +426 -0
- package/dist/cjs/adapter/__tests__/filterUtils.spec.js.map +1 -0
- package/dist/cjs/adapter/__tests__/getFieldKey.spec.js +24 -0
- package/dist/cjs/adapter/__tests__/getFieldKey.spec.js.map +1 -0
- package/dist/cjs/adapter/__tests__/loadCmsSchema.spec.js +166 -0
- package/dist/cjs/adapter/__tests__/loadCmsSchema.spec.js.map +1 -0
- package/dist/cjs/adapter/__tests__/searchUtils.spec.js +116 -0
- package/dist/cjs/adapter/__tests__/searchUtils.spec.js.map +1 -0
- package/dist/cjs/adapter/__tests__/sortUtils.spec.js +118 -0
- package/dist/cjs/adapter/__tests__/sortUtils.spec.js.map +1 -0
- package/dist/cjs/adapter/__tests__/transformCmsSchema.spec.js +210 -0
- package/dist/cjs/adapter/__tests__/transformCmsSchema.spec.js.map +1 -0
- package/dist/cjs/adapter/__tests__/wixDataQueryRecorder.js +54 -0
- package/dist/cjs/adapter/__tests__/wixDataQueryRecorder.js.map +1 -0
- package/dist/cjs/adapter/cmsBackup.js +52 -0
- package/dist/cjs/adapter/cmsBackup.js.map +1 -0
- package/dist/cjs/adapter/cmsFieldTypeMap.js +43 -0
- package/dist/cjs/adapter/cmsFieldTypeMap.js.map +1 -0
- package/dist/cjs/adapter/cmsPermissions.js +94 -0
- package/dist/cjs/adapter/cmsPermissions.js.map +1 -0
- package/dist/cjs/adapter/constants.js +20 -0
- package/dist/cjs/adapter/constants.js.map +1 -0
- package/dist/cjs/adapter/createCmsBackend.js +131 -0
- package/dist/cjs/adapter/createCmsBackend.js.map +1 -0
- package/dist/cjs/adapter/createCmsFieldActions.js +182 -0
- package/dist/cjs/adapter/createCmsFieldActions.js.map +1 -0
- package/dist/cjs/adapter/fetchExternalDbConnections.js +24 -0
- package/dist/cjs/adapter/fetchExternalDbConnections.js.map +1 -0
- package/dist/cjs/adapter/fetchUserPermissions.js +24 -0
- package/dist/cjs/adapter/fetchUserPermissions.js.map +1 -0
- package/dist/cjs/adapter/filterUtils.js +128 -0
- package/dist/cjs/adapter/filterUtils.js.map +1 -0
- package/dist/cjs/adapter/getFieldKey.js +19 -0
- package/dist/cjs/adapter/getFieldKey.js.map +1 -0
- package/dist/cjs/adapter/index.js +36 -0
- package/dist/cjs/adapter/index.js.map +1 -0
- package/dist/cjs/adapter/loadCmsSchema.js +51 -0
- package/dist/cjs/adapter/loadCmsSchema.js.map +1 -0
- package/dist/cjs/adapter/pollUntilReady.js +30 -0
- package/dist/cjs/adapter/pollUntilReady.js.map +1 -0
- package/dist/cjs/adapter/searchUtils.js +32 -0
- package/dist/cjs/adapter/searchUtils.js.map +1 -0
- package/dist/cjs/adapter/sortUtils.js +34 -0
- package/dist/cjs/adapter/sortUtils.js.map +1 -0
- package/dist/cjs/adapter/transformCmsSchema.js +75 -0
- package/dist/cjs/adapter/transformCmsSchema.js.map +1 -0
- package/dist/cjs/index.js +10 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/esm/adapter/__tests__/cmsFieldActions.spec.js +335 -0
- package/dist/esm/adapter/__tests__/cmsFieldActions.spec.js.map +1 -0
- package/dist/esm/adapter/__tests__/cmsPermissions.spec.js +173 -0
- package/dist/esm/adapter/__tests__/cmsPermissions.spec.js.map +1 -0
- package/dist/esm/adapter/__tests__/createCmsBackend.spec.js +307 -0
- package/dist/esm/adapter/__tests__/createCmsBackend.spec.js.map +1 -0
- package/dist/esm/adapter/__tests__/filterUtils.spec.js +298 -0
- package/dist/esm/adapter/__tests__/filterUtils.spec.js.map +1 -0
- package/dist/esm/adapter/__tests__/getFieldKey.spec.js +22 -0
- package/dist/esm/adapter/__tests__/getFieldKey.spec.js.map +1 -0
- package/dist/esm/adapter/__tests__/loadCmsSchema.spec.js +147 -0
- package/dist/esm/adapter/__tests__/loadCmsSchema.spec.js.map +1 -0
- package/dist/esm/adapter/__tests__/searchUtils.spec.js +109 -0
- package/dist/esm/adapter/__tests__/searchUtils.spec.js.map +1 -0
- package/dist/esm/adapter/__tests__/sortUtils.spec.js +85 -0
- package/dist/esm/adapter/__tests__/sortUtils.spec.js.map +1 -0
- package/dist/esm/adapter/__tests__/transformCmsSchema.spec.js +201 -0
- package/dist/esm/adapter/__tests__/transformCmsSchema.spec.js.map +1 -0
- package/dist/esm/adapter/__tests__/wixDataQueryRecorder.js +42 -0
- package/dist/esm/adapter/__tests__/wixDataQueryRecorder.js.map +1 -0
- package/dist/esm/adapter/cmsBackup.js +34 -0
- package/dist/esm/adapter/cmsBackup.js.map +1 -0
- package/dist/esm/adapter/cmsFieldTypeMap.js +37 -0
- package/dist/esm/adapter/cmsFieldTypeMap.js.map +1 -0
- package/dist/esm/adapter/cmsPermissions.js +91 -0
- package/dist/esm/adapter/cmsPermissions.js.map +1 -0
- package/dist/esm/adapter/constants.js +25 -0
- package/dist/esm/adapter/constants.js.map +1 -0
- package/dist/esm/adapter/createCmsBackend.js +113 -0
- package/dist/esm/adapter/createCmsBackend.js.map +1 -0
- package/dist/esm/adapter/createCmsFieldActions.js +159 -0
- package/dist/esm/adapter/createCmsFieldActions.js.map +1 -0
- package/dist/esm/adapter/fetchExternalDbConnections.js +17 -0
- package/dist/esm/adapter/fetchExternalDbConnections.js.map +1 -0
- package/dist/esm/adapter/fetchUserPermissions.js +15 -0
- package/dist/esm/adapter/fetchUserPermissions.js.map +1 -0
- package/dist/esm/adapter/filterUtils.js +126 -0
- package/dist/esm/adapter/filterUtils.js.map +1 -0
- package/dist/esm/adapter/getFieldKey.js +13 -0
- package/dist/esm/adapter/getFieldKey.js.map +1 -0
- package/dist/esm/adapter/index.js +15 -0
- package/dist/esm/adapter/index.js.map +1 -0
- package/dist/esm/adapter/loadCmsSchema.js +48 -0
- package/dist/esm/adapter/loadCmsSchema.js.map +1 -0
- package/dist/esm/adapter/pollUntilReady.js +24 -0
- package/dist/esm/adapter/pollUntilReady.js.map +1 -0
- package/dist/esm/adapter/searchUtils.js +24 -0
- package/dist/esm/adapter/searchUtils.js.map +1 -0
- package/dist/esm/adapter/sortUtils.js +21 -0
- package/dist/esm/adapter/sortUtils.js.map +1 -0
- package/dist/esm/adapter/transformCmsSchema.js +70 -0
- package/dist/esm/adapter/transformCmsSchema.js.map +1 -0
- package/dist/esm/index.js +2 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/types/adapter/__tests__/cmsFieldActions.spec.d.ts +2 -0
- package/dist/types/adapter/__tests__/cmsFieldActions.spec.d.ts.map +1 -0
- package/dist/types/adapter/__tests__/cmsPermissions.spec.d.ts +2 -0
- package/dist/types/adapter/__tests__/cmsPermissions.spec.d.ts.map +1 -0
- package/dist/types/adapter/__tests__/createCmsBackend.spec.d.ts +2 -0
- package/dist/types/adapter/__tests__/createCmsBackend.spec.d.ts.map +1 -0
- package/dist/types/adapter/__tests__/filterUtils.spec.d.ts +2 -0
- package/dist/types/adapter/__tests__/filterUtils.spec.d.ts.map +1 -0
- package/dist/types/adapter/__tests__/getFieldKey.spec.d.ts +2 -0
- package/dist/types/adapter/__tests__/getFieldKey.spec.d.ts.map +1 -0
- package/dist/types/adapter/__tests__/loadCmsSchema.spec.d.ts +2 -0
- package/dist/types/adapter/__tests__/loadCmsSchema.spec.d.ts.map +1 -0
- package/dist/types/adapter/__tests__/searchUtils.spec.d.ts +2 -0
- package/dist/types/adapter/__tests__/searchUtils.spec.d.ts.map +1 -0
- package/dist/types/adapter/__tests__/sortUtils.spec.d.ts +2 -0
- package/dist/types/adapter/__tests__/sortUtils.spec.d.ts.map +1 -0
- package/dist/types/adapter/__tests__/transformCmsSchema.spec.d.ts +2 -0
- package/dist/types/adapter/__tests__/transformCmsSchema.spec.d.ts.map +1 -0
- package/dist/types/adapter/__tests__/wixDataQueryRecorder.d.ts +40 -0
- package/dist/types/adapter/__tests__/wixDataQueryRecorder.d.ts.map +1 -0
- package/dist/types/adapter/cmsBackup.d.ts +7 -0
- package/dist/types/adapter/cmsBackup.d.ts.map +1 -0
- package/dist/types/adapter/cmsFieldTypeMap.d.ts +8 -0
- package/dist/types/adapter/cmsFieldTypeMap.d.ts.map +1 -0
- package/dist/types/adapter/cmsPermissions.d.ts +21 -0
- package/dist/types/adapter/cmsPermissions.d.ts.map +1 -0
- package/dist/types/adapter/constants.d.ts +14 -0
- package/dist/types/adapter/constants.d.ts.map +1 -0
- package/dist/types/adapter/createCmsBackend.d.ts +9 -0
- package/dist/types/adapter/createCmsBackend.d.ts.map +1 -0
- package/dist/types/adapter/createCmsFieldActions.d.ts +8 -0
- package/dist/types/adapter/createCmsFieldActions.d.ts.map +1 -0
- package/dist/types/adapter/fetchExternalDbConnections.d.ts +11 -0
- package/dist/types/adapter/fetchExternalDbConnections.d.ts.map +1 -0
- package/dist/types/adapter/fetchUserPermissions.d.ts +7 -0
- package/dist/types/adapter/fetchUserPermissions.d.ts.map +1 -0
- package/dist/types/adapter/filterUtils.d.ts +14 -0
- package/dist/types/adapter/filterUtils.d.ts.map +1 -0
- package/dist/types/adapter/getFieldKey.d.ts +3 -0
- package/dist/types/adapter/getFieldKey.d.ts.map +1 -0
- package/dist/types/adapter/index.d.ts +15 -0
- package/dist/types/adapter/index.d.ts.map +1 -0
- package/dist/types/adapter/loadCmsSchema.d.ts +29 -0
- package/dist/types/adapter/loadCmsSchema.d.ts.map +1 -0
- package/dist/types/adapter/pollUntilReady.d.ts +11 -0
- package/dist/types/adapter/pollUntilReady.d.ts.map +1 -0
- package/dist/types/adapter/searchUtils.d.ts +12 -0
- package/dist/types/adapter/searchUtils.d.ts.map +1 -0
- package/dist/types/adapter/sortUtils.d.ts +11 -0
- package/dist/types/adapter/sortUtils.d.ts.map +1 -0
- package/dist/types/adapter/transformCmsSchema.d.ts +12 -0
- package/dist/types/adapter/transformCmsSchema.d.ts.map +1 -0
- package/dist/types/index.d.ts +2 -0
- package/dist/types/index.d.ts.map +1 -0
- package/package.json +123 -0
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _data = require("@wix/data");
|
|
4
|
+
var _transformCmsSchema = require("../transformCmsSchema");
|
|
5
|
+
/** Reads referenceMetadata off a (possibly non-reference) Field for assertions. */
|
|
6
|
+
const refMeta = field => field == null ? void 0 : field.referenceMetadata;
|
|
7
|
+
const COLLECTION_ID = 'collection-1';
|
|
8
|
+
const makeField = (overrides = {}) => ({
|
|
9
|
+
key: 'field',
|
|
10
|
+
type: _data.collections.Type.TEXT,
|
|
11
|
+
systemField: false,
|
|
12
|
+
encrypted: false,
|
|
13
|
+
plugins: [],
|
|
14
|
+
displayName: 'Field',
|
|
15
|
+
capabilities: {
|
|
16
|
+
queryOperators: [],
|
|
17
|
+
sortable: false
|
|
18
|
+
},
|
|
19
|
+
...overrides
|
|
20
|
+
});
|
|
21
|
+
const makeCollection = (fields, overrides = {}) => ({
|
|
22
|
+
_id: COLLECTION_ID,
|
|
23
|
+
collectionType: 'NATIVE',
|
|
24
|
+
capabilities: {
|
|
25
|
+
dataOperations: ['SAVE', 'UPDATE', 'REMOVE']
|
|
26
|
+
},
|
|
27
|
+
permissions: {
|
|
28
|
+
read: 'ANYONE',
|
|
29
|
+
insert: 'SITE_MEMBER',
|
|
30
|
+
update: 'SITE_MEMBER',
|
|
31
|
+
remove: 'SITE_MEMBER'
|
|
32
|
+
},
|
|
33
|
+
plugins: [],
|
|
34
|
+
fields,
|
|
35
|
+
...overrides
|
|
36
|
+
});
|
|
37
|
+
describe('transformCmsSchema', () => {
|
|
38
|
+
it('maps CMS fields to the source-neutral Schema and drops keyless fields', () => {
|
|
39
|
+
var _schema$fields$field, _schema$fields$field2, _schema$fields$field3, _schema$fields$field4, _schema$fields$field5, _schema$fields$field6, _schema$fields$field7, _schema$fields$field8;
|
|
40
|
+
const collection = makeCollection([makeField({
|
|
41
|
+
key: 'field1',
|
|
42
|
+
type: _data.collections.Type.TEXT,
|
|
43
|
+
displayName: 'Field 1',
|
|
44
|
+
capabilities: {
|
|
45
|
+
queryOperators: [_data.collections.QueryOperator.EQ],
|
|
46
|
+
sortable: true
|
|
47
|
+
}
|
|
48
|
+
}), makeField({
|
|
49
|
+
key: 'field2',
|
|
50
|
+
type: _data.collections.Type.NUMBER,
|
|
51
|
+
displayName: 'Field 2',
|
|
52
|
+
capabilities: {
|
|
53
|
+
queryOperators: [_data.collections.QueryOperator.GTE, _data.collections.QueryOperator.LTE],
|
|
54
|
+
sortable: true
|
|
55
|
+
}
|
|
56
|
+
}), makeField({
|
|
57
|
+
key: '',
|
|
58
|
+
type: _data.collections.Type.BOOLEAN,
|
|
59
|
+
displayName: 'Empty Key Field',
|
|
60
|
+
capabilities: {
|
|
61
|
+
queryOperators: [],
|
|
62
|
+
sortable: false
|
|
63
|
+
}
|
|
64
|
+
})]);
|
|
65
|
+
const schema = (0, _transformCmsSchema.transformCmsSchema)(collection);
|
|
66
|
+
expect(schema.fields).toBeDefined();
|
|
67
|
+
expect(Object.keys(schema.fields).length).toBe(2);
|
|
68
|
+
expect(schema.fields).toHaveProperty('field1');
|
|
69
|
+
expect(schema.fields).toHaveProperty('field2');
|
|
70
|
+
expect(schema.fields).not.toHaveProperty('');
|
|
71
|
+
expect((_schema$fields$field = schema.fields.field1) == null ? void 0 : _schema$fields$field.type).toBe('SHORT_TEXT');
|
|
72
|
+
expect((_schema$fields$field2 = schema.fields.field1) == null ? void 0 : _schema$fields$field2.displayName).toBe('Field 1');
|
|
73
|
+
expect((_schema$fields$field3 = schema.fields.field1) == null || (_schema$fields$field3 = _schema$fields$field3.capabilities) == null ? void 0 : _schema$fields$field3.sortable).toBe(true);
|
|
74
|
+
expect((_schema$fields$field4 = schema.fields.field1) == null || (_schema$fields$field4 = _schema$fields$field4.capabilities) == null ? void 0 : _schema$fields$field4.supportedQueryOperators).toEqual([_data.collections.QueryOperator.EQ]);
|
|
75
|
+
expect((_schema$fields$field5 = schema.fields.field2) == null ? void 0 : _schema$fields$field5.type).toBe('NUMBER');
|
|
76
|
+
expect((_schema$fields$field6 = schema.fields.field2) == null ? void 0 : _schema$fields$field6.displayName).toBe('Field 2');
|
|
77
|
+
expect((_schema$fields$field7 = schema.fields.field2) == null || (_schema$fields$field7 = _schema$fields$field7.capabilities) == null ? void 0 : _schema$fields$field7.sortable).toBe(true);
|
|
78
|
+
expect((_schema$fields$field8 = schema.fields.field2) == null || (_schema$fields$field8 = _schema$fields$field8.capabilities) == null ? void 0 : _schema$fields$field8.supportedQueryOperators).toEqual([_data.collections.QueryOperator.GTE, _data.collections.QueryOperator.LTE]);
|
|
79
|
+
});
|
|
80
|
+
it('sets id, idField and displayField from the collection', () => {
|
|
81
|
+
var _schema$fields$title, _schema$fields$other;
|
|
82
|
+
const schema = (0, _transformCmsSchema.transformCmsSchema)(makeCollection([makeField({
|
|
83
|
+
key: 'title'
|
|
84
|
+
}), makeField({
|
|
85
|
+
key: 'other'
|
|
86
|
+
})], {
|
|
87
|
+
displayField: 'title'
|
|
88
|
+
}));
|
|
89
|
+
expect(schema.id).toBe(COLLECTION_ID);
|
|
90
|
+
expect(schema.idField).toBe('_id');
|
|
91
|
+
expect(schema.displayField).toBe('title');
|
|
92
|
+
expect((_schema$fields$title = schema.fields.title) == null ? void 0 : _schema$fields$title.isPrimary).toBe(true);
|
|
93
|
+
expect((_schema$fields$other = schema.fields.other) == null ? void 0 : _schema$fields$other.isPrimary).toBe(false);
|
|
94
|
+
});
|
|
95
|
+
it('defaults displayField to "_id" when the collection has none', () => {
|
|
96
|
+
const schema = (0, _transformCmsSchema.transformCmsSchema)(makeCollection([makeField()]));
|
|
97
|
+
expect(schema.displayField).toBe('_id');
|
|
98
|
+
});
|
|
99
|
+
it('maps encrypted → isPii, description → helpText and systemField → isSystem', () => {
|
|
100
|
+
var _schema$fields$secret, _schema$fields$secret2, _schema$fields$secret3;
|
|
101
|
+
const schema = (0, _transformCmsSchema.transformCmsSchema)(makeCollection([makeField({
|
|
102
|
+
key: 'secret',
|
|
103
|
+
encrypted: true,
|
|
104
|
+
description: 'A hint',
|
|
105
|
+
systemField: true
|
|
106
|
+
})]));
|
|
107
|
+
expect((_schema$fields$secret = schema.fields.secret) == null ? void 0 : _schema$fields$secret.isPii).toBe(true);
|
|
108
|
+
expect((_schema$fields$secret2 = schema.fields.secret) == null ? void 0 : _schema$fields$secret2.helpText).toBe('A hint');
|
|
109
|
+
expect((_schema$fields$secret3 = schema.fields.secret) == null ? void 0 : _schema$fields$secret3.isSystem).toBe(true);
|
|
110
|
+
});
|
|
111
|
+
it('maps validation ranges and required', () => {
|
|
112
|
+
var _schema$fields$num, _schema$fields$num2, _schema$fields$text;
|
|
113
|
+
const schema = (0, _transformCmsSchema.transformCmsSchema)(makeCollection([makeField({
|
|
114
|
+
key: 'num',
|
|
115
|
+
type: _data.collections.Type.NUMBER,
|
|
116
|
+
required: true,
|
|
117
|
+
numberRange: {
|
|
118
|
+
min: 0,
|
|
119
|
+
max: 10
|
|
120
|
+
}
|
|
121
|
+
}), makeField({
|
|
122
|
+
key: 'text',
|
|
123
|
+
type: _data.collections.Type.TEXT,
|
|
124
|
+
stringLengthRange: {
|
|
125
|
+
minLength: 1,
|
|
126
|
+
maxLength: 5
|
|
127
|
+
}
|
|
128
|
+
})]));
|
|
129
|
+
expect((_schema$fields$num = schema.fields.num) == null || (_schema$fields$num = _schema$fields$num.validation) == null ? void 0 : _schema$fields$num.required).toBe(true);
|
|
130
|
+
expect((_schema$fields$num2 = schema.fields.num) == null || (_schema$fields$num2 = _schema$fields$num2.validation) == null ? void 0 : _schema$fields$num2.numberRange).toEqual({
|
|
131
|
+
min: 0,
|
|
132
|
+
max: 10
|
|
133
|
+
});
|
|
134
|
+
expect((_schema$fields$text = schema.fields.text) == null || (_schema$fields$text = _schema$fields$text.validation) == null ? void 0 : _schema$fields$text.stringLengthRange).toEqual({
|
|
135
|
+
minLength: 1,
|
|
136
|
+
maxLength: 5
|
|
137
|
+
});
|
|
138
|
+
});
|
|
139
|
+
it('resolves an unmapped CMS field type to UNKNOWN', () => {
|
|
140
|
+
var _schema$fields$weird;
|
|
141
|
+
const schema = (0, _transformCmsSchema.transformCmsSchema)(makeCollection([makeField({
|
|
142
|
+
key: 'weird',
|
|
143
|
+
type: 'SOME_FUTURE_TYPE'
|
|
144
|
+
})]));
|
|
145
|
+
expect((_schema$fields$weird = schema.fields.weird) == null ? void 0 : _schema$fields$weird.type).toBe('UNKNOWN');
|
|
146
|
+
});
|
|
147
|
+
it('attaches referenceMetadata for a REFERENCE field with a target collection', () => {
|
|
148
|
+
var _schema$fields$ref, _refMeta;
|
|
149
|
+
const schema = (0, _transformCmsSchema.transformCmsSchema)(makeCollection([makeField({
|
|
150
|
+
key: 'ref',
|
|
151
|
+
type: _data.collections.Type.REFERENCE,
|
|
152
|
+
typeMetadata: {
|
|
153
|
+
reference: {
|
|
154
|
+
referencedCollectionId: 'other-collection'
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
})]));
|
|
158
|
+
expect((_schema$fields$ref = schema.fields.ref) == null ? void 0 : _schema$fields$ref.type).toBe('REFERENCE');
|
|
159
|
+
expect((_refMeta = refMeta(schema.fields.ref)) == null ? void 0 : _refMeta.referencedCollectionId).toBe('other-collection');
|
|
160
|
+
});
|
|
161
|
+
it('attaches referenceMetadata for a MULTI_REFERENCE field with a target collection', () => {
|
|
162
|
+
var _schema$fields$multiR, _refMeta2;
|
|
163
|
+
const schema = (0, _transformCmsSchema.transformCmsSchema)(makeCollection([makeField({
|
|
164
|
+
key: 'multiRef',
|
|
165
|
+
type: _data.collections.Type.MULTI_REFERENCE,
|
|
166
|
+
typeMetadata: {
|
|
167
|
+
multiReference: {
|
|
168
|
+
referencedCollectionId: 'other-collection'
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
})]));
|
|
172
|
+
expect((_schema$fields$multiR = schema.fields.multiRef) == null ? void 0 : _schema$fields$multiR.type).toBe('MULTI_REFERENCE');
|
|
173
|
+
expect((_refMeta2 = refMeta(schema.fields.multiRef)) == null ? void 0 : _refMeta2.referencedCollectionId).toBe('other-collection');
|
|
174
|
+
});
|
|
175
|
+
it('degrades a reference field without a target collection to UNKNOWN', () => {
|
|
176
|
+
var _schema$fields$dangli;
|
|
177
|
+
const schema = (0, _transformCmsSchema.transformCmsSchema)(makeCollection([makeField({
|
|
178
|
+
key: 'danglingRef',
|
|
179
|
+
type: _data.collections.Type.REFERENCE
|
|
180
|
+
})]));
|
|
181
|
+
expect((_schema$fields$dangli = schema.fields.danglingRef) == null ? void 0 : _schema$fields$dangli.type).toBe('UNKNOWN');
|
|
182
|
+
expect(refMeta(schema.fields.danglingRef)).toBeUndefined();
|
|
183
|
+
});
|
|
184
|
+
it('projects permissions from the collection and user permissions', () => {
|
|
185
|
+
const schema = (0, _transformCmsSchema.transformCmsSchema)(makeCollection([makeField()]), {
|
|
186
|
+
userPermissions: ['WIX_DATA.CREATE_COLLECTION_FIELD', 'WIX_DATA.UPDATE_COLLECTION_FIELD', 'WIX_DATA.DELETE_COLLECTION_FIELD', 'WIX_DATA.INSERT', 'WIX_DATA.UPDATE', 'WIX_DATA.REMOVE']
|
|
187
|
+
});
|
|
188
|
+
expect(schema.schemaPermissions).toEqual({
|
|
189
|
+
createField: true,
|
|
190
|
+
updateField: true,
|
|
191
|
+
deleteField: true
|
|
192
|
+
});
|
|
193
|
+
expect(schema.itemPermissions).toEqual({
|
|
194
|
+
createItem: true,
|
|
195
|
+
updateItem: true,
|
|
196
|
+
deleteItem: true
|
|
197
|
+
});
|
|
198
|
+
});
|
|
199
|
+
it('leaves schemaPermissions undefined for a shared (non-editable) collection', () => {
|
|
200
|
+
const schema = (0, _transformCmsSchema.transformCmsSchema)(makeCollection([makeField()], {
|
|
201
|
+
plugins: [{
|
|
202
|
+
type: 'SHARED'
|
|
203
|
+
}]
|
|
204
|
+
}), {
|
|
205
|
+
userPermissions: ['WIX_DATA.CREATE_COLLECTION_FIELD', 'WIX_DATA.UPDATE_COLLECTION_FIELD', 'WIX_DATA.DELETE_COLLECTION_FIELD']
|
|
206
|
+
});
|
|
207
|
+
expect(schema.schemaPermissions).toBeUndefined();
|
|
208
|
+
});
|
|
209
|
+
});
|
|
210
|
+
//# sourceMappingURL=transformCmsSchema.spec.js.map
|
|
@@ -0,0 +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":[]}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
exports.__esModule = true;
|
|
4
|
+
exports.wasCalled = exports.firstCallArgs = exports.createQueryRecorder = exports.calledMethods = void 0;
|
|
5
|
+
/**
|
|
6
|
+
* Test helper: a chainable recorder that stands in for `@wix/data`'s
|
|
7
|
+
* `items.query(...)` / `items.filter()` builders. Every WQL method returns the
|
|
8
|
+
* same chainable object and appends a `{ method, args }` record to `calls`, so a
|
|
9
|
+
* spec can assert exactly which WQL operators a util produced (and with what
|
|
10
|
+
* arguments) without depending on the real builder's private `filterTree` shape.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
const CHAINABLE_METHODS = ['eq', 'ne', 'contains', 'hasSome', 'ge', 'le', 'gt', 'lt', 'isEmpty', 'isNotEmpty', 'ascending', 'descending', 'include', 'skip', 'limit', 'and', 'or', 'not'];
|
|
14
|
+
const createQueryRecorder = () => {
|
|
15
|
+
const recorder = {
|
|
16
|
+
calls: []
|
|
17
|
+
};
|
|
18
|
+
CHAINABLE_METHODS.forEach(method => {
|
|
19
|
+
recorder[method] = (...args) => {
|
|
20
|
+
recorder.calls.push({
|
|
21
|
+
method,
|
|
22
|
+
args
|
|
23
|
+
});
|
|
24
|
+
return recorder;
|
|
25
|
+
};
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
// `find` is only used by the backend's `find`; util specs never call it.
|
|
29
|
+
recorder.find = (...args) => {
|
|
30
|
+
recorder.calls.push({
|
|
31
|
+
method: 'find',
|
|
32
|
+
args
|
|
33
|
+
});
|
|
34
|
+
return recorder;
|
|
35
|
+
};
|
|
36
|
+
return recorder;
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
/** Returns the args of the first recorded call to `method`, or undefined. */
|
|
40
|
+
exports.createQueryRecorder = createQueryRecorder;
|
|
41
|
+
const firstCallArgs = (recorder, method) => {
|
|
42
|
+
var _recorder$calls$find;
|
|
43
|
+
return (_recorder$calls$find = recorder.calls.find(c => c.method === method)) == null ? void 0 : _recorder$calls$find.args;
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
/** Returns the recorded methods (in call order). */
|
|
47
|
+
exports.firstCallArgs = firstCallArgs;
|
|
48
|
+
const calledMethods = recorder => recorder.calls.map(c => c.method);
|
|
49
|
+
|
|
50
|
+
/** Whether `method` was recorded at least once. */
|
|
51
|
+
exports.calledMethods = calledMethods;
|
|
52
|
+
const wasCalled = (recorder, method) => recorder.calls.some(c => c.method === method);
|
|
53
|
+
exports.wasCalled = wasCalled;
|
|
54
|
+
//# sourceMappingURL=wixDataQueryRecorder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["CHAINABLE_METHODS","createQueryRecorder","recorder","calls","forEach","method","args","push","find","exports","firstCallArgs","_recorder$calls$find","c","calledMethods","map","wasCalled","some"],"sources":["../../../../src/adapter/__tests__/wixDataQueryRecorder.ts"],"sourcesContent":["/**\n * Test helper: a chainable recorder that stands in for `@wix/data`'s\n * `items.query(...)` / `items.filter()` builders. Every WQL method returns the\n * same chainable object and appends a `{ method, args }` record to `calls`, so a\n * spec can assert exactly which WQL operators a util produced (and with what\n * arguments) without depending on the real builder's private `filterTree` shape.\n */\nexport interface QueryRecorder {\n calls: { method: string; args: unknown[] }[];\n eq: (...args: unknown[]) => QueryRecorder;\n ne: (...args: unknown[]) => QueryRecorder;\n contains: (...args: unknown[]) => QueryRecorder;\n hasSome: (...args: unknown[]) => QueryRecorder;\n ge: (...args: unknown[]) => QueryRecorder;\n le: (...args: unknown[]) => QueryRecorder;\n gt: (...args: unknown[]) => QueryRecorder;\n lt: (...args: unknown[]) => QueryRecorder;\n isEmpty: (...args: unknown[]) => QueryRecorder;\n isNotEmpty: (...args: unknown[]) => QueryRecorder;\n ascending: (...args: unknown[]) => QueryRecorder;\n descending: (...args: unknown[]) => QueryRecorder;\n include: (...args: unknown[]) => QueryRecorder;\n skip: (...args: unknown[]) => QueryRecorder;\n limit: (...args: unknown[]) => QueryRecorder;\n and: (...args: unknown[]) => QueryRecorder;\n or: (...args: unknown[]) => QueryRecorder;\n not: (...args: unknown[]) => QueryRecorder;\n find: (...args: unknown[]) => unknown;\n}\n\nconst CHAINABLE_METHODS = [\n 'eq',\n 'ne',\n 'contains',\n 'hasSome',\n 'ge',\n 'le',\n 'gt',\n 'lt',\n 'isEmpty',\n 'isNotEmpty',\n 'ascending',\n 'descending',\n 'include',\n 'skip',\n 'limit',\n 'and',\n 'or',\n 'not',\n] as const;\n\nexport const createQueryRecorder = (): QueryRecorder => {\n const recorder = { calls: [] } as unknown as QueryRecorder;\n\n CHAINABLE_METHODS.forEach((method) => {\n (recorder as unknown as Record<string, unknown>)[method] = (\n ...args: unknown[]\n ) => {\n recorder.calls.push({ method, args });\n return recorder;\n };\n });\n\n // `find` is only used by the backend's `find`; util specs never call it.\n recorder.find = (...args: unknown[]) => {\n recorder.calls.push({ method: 'find', args });\n return recorder;\n };\n\n return recorder;\n};\n\n/** Returns the args of the first recorded call to `method`, or undefined. */\nexport const firstCallArgs = (\n recorder: QueryRecorder,\n method: string,\n): unknown[] | undefined =>\n recorder.calls.find((c) => c.method === method)?.args;\n\n/** Returns the recorded methods (in call order). */\nexport const calledMethods = (recorder: QueryRecorder): string[] =>\n recorder.calls.map((c) => c.method);\n\n/** Whether `method` was recorded at least once. */\nexport const wasCalled = (recorder: QueryRecorder, method: string): boolean =>\n recorder.calls.some((c) => c.method === method);\n"],"mappings":";;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;;AAwBA,MAAMA,iBAAiB,GAAG,CACxB,IAAI,EACJ,IAAI,EACJ,UAAU,EACV,SAAS,EACT,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,SAAS,EACT,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,SAAS,EACT,MAAM,EACN,OAAO,EACP,KAAK,EACL,IAAI,EACJ,KAAK,CACG;AAEH,MAAMC,mBAAmB,GAAGA,CAAA,KAAqB;EACtD,MAAMC,QAAQ,GAAG;IAAEC,KAAK,EAAE;EAAG,CAA6B;EAE1DH,iBAAiB,CAACI,OAAO,CAAEC,MAAM,IAAK;IACnCH,QAAQ,CAAwCG,MAAM,CAAC,GAAG,CACzD,GAAGC,IAAe,KACf;MACHJ,QAAQ,CAACC,KAAK,CAACI,IAAI,CAAC;QAAEF,MAAM;QAAEC;MAAK,CAAC,CAAC;MACrC,OAAOJ,QAAQ;IACjB,CAAC;EACH,CAAC,CAAC;;EAEF;EACAA,QAAQ,CAACM,IAAI,GAAG,CAAC,GAAGF,IAAe,KAAK;IACtCJ,QAAQ,CAACC,KAAK,CAACI,IAAI,CAAC;MAAEF,MAAM,EAAE,MAAM;MAAEC;IAAK,CAAC,CAAC;IAC7C,OAAOJ,QAAQ;EACjB,CAAC;EAED,OAAOA,QAAQ;AACjB,CAAC;;AAED;AAAAO,OAAA,CAAAR,mBAAA,GAAAA,mBAAA;AACO,MAAMS,aAAa,GAAGA,CAC3BR,QAAuB,EACvBG,MAAc;EAAA,IAAAM,oBAAA;EAAA,QAAAA,oBAAA,GAEdT,QAAQ,CAACC,KAAK,CAACK,IAAI,CAAEI,CAAC,IAAKA,CAAC,CAACP,MAAM,KAAKA,MAAM,CAAC,qBAA/CM,oBAAA,CAAiDL,IAAI;AAAA;;AAEvD;AAAAG,OAAA,CAAAC,aAAA,GAAAA,aAAA;AACO,MAAMG,aAAa,GAAIX,QAAuB,IACnDA,QAAQ,CAACC,KAAK,CAACW,GAAG,CAAEF,CAAC,IAAKA,CAAC,CAACP,MAAM,CAAC;;AAErC;AAAAI,OAAA,CAAAI,aAAA,GAAAA,aAAA;AACO,MAAME,SAAS,GAAGA,CAACb,QAAuB,EAAEG,MAAc,KAC/DH,QAAQ,CAACC,KAAK,CAACa,IAAI,CAAEJ,CAAC,IAAKA,CAAC,CAACP,MAAM,KAAKA,MAAM,CAAC;AAACI,OAAA,CAAAM,SAAA,GAAAA,SAAA","ignoreList":[]}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
exports.__esModule = true;
|
|
4
|
+
exports.createCmsBackupConfig = createCmsBackupConfig;
|
|
5
|
+
var _data = require("@wix/data");
|
|
6
|
+
var _essentials = require("@wix/essentials");
|
|
7
|
+
var _pollUntilReady = require("./pollUntilReady");
|
|
8
|
+
/**
|
|
9
|
+
* Builds the `BackupConfig` over `@wix/data` backups: `create`/`restore` return an id,
|
|
10
|
+
* `waitFor*` poll the list endpoint until a terminal status (`READY`/`COMPLETED`/`FAILED`).
|
|
11
|
+
*/
|
|
12
|
+
function createCmsBackupConfig() {
|
|
13
|
+
return {
|
|
14
|
+
create: async () => {
|
|
15
|
+
var _response$backup;
|
|
16
|
+
const response = await _essentials.errorHandler.withErrorHandler(async () => _data.backups.createBackup(), {});
|
|
17
|
+
return {
|
|
18
|
+
backupId: response == null || (_response$backup = response.backup) == null ? void 0 : _response$backup._id
|
|
19
|
+
};
|
|
20
|
+
},
|
|
21
|
+
waitForCompletion: async (backupId, options) => {
|
|
22
|
+
await (0, _pollUntilReady.pollUntilReady)(async () => {
|
|
23
|
+
const {
|
|
24
|
+
backups: list
|
|
25
|
+
} = await _essentials.errorHandler.withErrorHandler(() => _data.backups.listBackups(), {});
|
|
26
|
+
const found = list == null ? void 0 : list.find(b => b._id === backupId);
|
|
27
|
+
return (found == null ? void 0 : found.status) === 'READY' || (found == null ? void 0 : found.status) === 'FAILED';
|
|
28
|
+
}, {
|
|
29
|
+
signal: options == null ? void 0 : options.signal
|
|
30
|
+
});
|
|
31
|
+
},
|
|
32
|
+
restore: async backupId => {
|
|
33
|
+
var _response$restoration;
|
|
34
|
+
const response = await _essentials.errorHandler.withErrorHandler(async () => _data.backups.restoreBackup(backupId), {});
|
|
35
|
+
return {
|
|
36
|
+
restorationId: response == null || (_response$restoration = response.restoration) == null ? void 0 : _response$restoration._id
|
|
37
|
+
};
|
|
38
|
+
},
|
|
39
|
+
waitForRestoration: async (restorationId, options) => {
|
|
40
|
+
await (0, _pollUntilReady.pollUntilReady)(async () => {
|
|
41
|
+
const {
|
|
42
|
+
restorations: list
|
|
43
|
+
} = await _essentials.errorHandler.withErrorHandler(() => _data.backups.listRestorations(), {});
|
|
44
|
+
const found = list == null ? void 0 : list.find(r => r._id === restorationId);
|
|
45
|
+
return (found == null ? void 0 : found.status) === 'COMPLETED' || (found == null ? void 0 : found.status) === 'FAILED';
|
|
46
|
+
}, {
|
|
47
|
+
signal: options == null ? void 0 : options.signal
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=cmsBackup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_data","require","_essentials","_pollUntilReady","createCmsBackupConfig","create","_response$backup","response","errorHandler","withErrorHandler","backups","createBackup","backupId","backup","_id","waitForCompletion","options","pollUntilReady","list","listBackups","found","find","b","status","signal","restore","_response$restoration","restoreBackup","restorationId","restoration","waitForRestoration","restorations","listRestorations","r"],"sources":["../../../src/adapter/cmsBackup.ts"],"sourcesContent":["import { backups } from '@wix/data';\nimport { errorHandler } from '@wix/essentials';\nimport type { BackupConfig } from '@wix/bex-core';\nimport { pollUntilReady } from './pollUntilReady';\n\n/**\n * Builds the `BackupConfig` over `@wix/data` backups: `create`/`restore` return an id,\n * `waitFor*` poll the list endpoint until a terminal status (`READY`/`COMPLETED`/`FAILED`).\n */\nexport function createCmsBackupConfig(): BackupConfig {\n return {\n create: async () => {\n const response = await errorHandler.withErrorHandler(\n async () => backups.createBackup(),\n {},\n );\n return { backupId: response?.backup?._id! };\n },\n\n waitForCompletion: async (backupId, options) => {\n await pollUntilReady(\n async () => {\n const { backups: list } = await errorHandler.withErrorHandler(\n () => backups.listBackups(),\n {},\n );\n const found = list?.find((b) => b._id === backupId);\n return found?.status === 'READY' || found?.status === 'FAILED';\n },\n { signal: options?.signal },\n );\n },\n\n restore: async (backupId: string) => {\n const response = await errorHandler.withErrorHandler(\n async () => backups.restoreBackup(backupId),\n {},\n );\n return { restorationId: response?.restoration?._id! };\n },\n\n waitForRestoration: async (restorationId, options) => {\n await pollUntilReady(\n async () => {\n const { restorations: list } = await errorHandler.withErrorHandler(\n () => backups.listRestorations(),\n {},\n );\n const found = list?.find((r) => r._id === restorationId);\n return found?.status === 'COMPLETED' || found?.status === 'FAILED';\n },\n { signal: options?.signal },\n );\n },\n };\n}\n"],"mappings":";;;;AAAA,IAAAA,KAAA,GAAAC,OAAA;AACA,IAAAC,WAAA,GAAAD,OAAA;AAEA,IAAAE,eAAA,GAAAF,OAAA;AAEA;AACA;AACA;AACA;AACO,SAASG,qBAAqBA,CAAA,EAAiB;EACpD,OAAO;IACLC,MAAM,EAAE,MAAAA,CAAA,KAAY;MAAA,IAAAC,gBAAA;MAClB,MAAMC,QAAQ,GAAG,MAAMC,wBAAY,CAACC,gBAAgB,CAClD,YAAYC,aAAO,CAACC,YAAY,CAAC,CAAC,EAClC,CAAC,CACH,CAAC;MACD,OAAO;QAAEC,QAAQ,EAAEL,QAAQ,aAAAD,gBAAA,GAARC,QAAQ,CAAEM,MAAM,qBAAhBP,gBAAA,CAAkBQ;MAAK,CAAC;IAC7C,CAAC;IAEDC,iBAAiB,EAAE,MAAAA,CAAOH,QAAQ,EAAEI,OAAO,KAAK;MAC9C,MAAM,IAAAC,8BAAc,EAClB,YAAY;QACV,MAAM;UAAEP,OAAO,EAAEQ;QAAK,CAAC,GAAG,MAAMV,wBAAY,CAACC,gBAAgB,CAC3D,MAAMC,aAAO,CAACS,WAAW,CAAC,CAAC,EAC3B,CAAC,CACH,CAAC;QACD,MAAMC,KAAK,GAAGF,IAAI,oBAAJA,IAAI,CAAEG,IAAI,CAAEC,CAAC,IAAKA,CAAC,CAACR,GAAG,KAAKF,QAAQ,CAAC;QACnD,OAAO,CAAAQ,KAAK,oBAALA,KAAK,CAAEG,MAAM,MAAK,OAAO,IAAI,CAAAH,KAAK,oBAALA,KAAK,CAAEG,MAAM,MAAK,QAAQ;MAChE,CAAC,EACD;QAAEC,MAAM,EAAER,OAAO,oBAAPA,OAAO,CAAEQ;MAAO,CAC5B,CAAC;IACH,CAAC;IAEDC,OAAO,EAAE,MAAOb,QAAgB,IAAK;MAAA,IAAAc,qBAAA;MACnC,MAAMnB,QAAQ,GAAG,MAAMC,wBAAY,CAACC,gBAAgB,CAClD,YAAYC,aAAO,CAACiB,aAAa,CAACf,QAAQ,CAAC,EAC3C,CAAC,CACH,CAAC;MACD,OAAO;QAAEgB,aAAa,EAAErB,QAAQ,aAAAmB,qBAAA,GAARnB,QAAQ,CAAEsB,WAAW,qBAArBH,qBAAA,CAAuBZ;MAAK,CAAC;IACvD,CAAC;IAEDgB,kBAAkB,EAAE,MAAAA,CAAOF,aAAa,EAAEZ,OAAO,KAAK;MACpD,MAAM,IAAAC,8BAAc,EAClB,YAAY;QACV,MAAM;UAAEc,YAAY,EAAEb;QAAK,CAAC,GAAG,MAAMV,wBAAY,CAACC,gBAAgB,CAChE,MAAMC,aAAO,CAACsB,gBAAgB,CAAC,CAAC,EAChC,CAAC,CACH,CAAC;QACD,MAAMZ,KAAK,GAAGF,IAAI,oBAAJA,IAAI,CAAEG,IAAI,CAAEY,CAAC,IAAKA,CAAC,CAACnB,GAAG,KAAKc,aAAa,CAAC;QACxD,OAAO,CAAAR,KAAK,oBAALA,KAAK,CAAEG,MAAM,MAAK,WAAW,IAAI,CAAAH,KAAK,oBAALA,KAAK,CAAEG,MAAM,MAAK,QAAQ;MACpE,CAAC,EACD;QAAEC,MAAM,EAAER,OAAO,oBAAPA,OAAO,CAAEQ;MAAO,CAC5B,CAAC;IACH;EACF,CAAC;AACH","ignoreList":[]}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
exports.__esModule = true;
|
|
4
|
+
exports.PatternsFieldTypeToCmsFieldType = exports.CmsFieldTypeToPatternsFieldType = exports.CMS_EMAIL_TYPE = void 0;
|
|
5
|
+
var _data = require("@wix/data");
|
|
6
|
+
// CMS returns 'EMAIL' but `collections.Type` doesn't expose it yet — cast as a workaround.
|
|
7
|
+
const CMS_EMAIL_TYPE = exports.CMS_EMAIL_TYPE = 'EMAIL';
|
|
8
|
+
|
|
9
|
+
/** Raw CMS field type → `PatternsFieldType`. Unlisted types resolve to `'UNKNOWN'`. */
|
|
10
|
+
const CmsFieldTypeToPatternsFieldType = exports.CmsFieldTypeToPatternsFieldType = {
|
|
11
|
+
[_data.collections.Type.TEXT]: 'SHORT_TEXT',
|
|
12
|
+
[_data.collections.Type.DATE]: 'DATE',
|
|
13
|
+
[_data.collections.Type.DATETIME]: 'DATETIME',
|
|
14
|
+
[_data.collections.Type.TIME]: 'TIME',
|
|
15
|
+
[_data.collections.Type.NUMBER]: 'NUMBER',
|
|
16
|
+
[_data.collections.Type.BOOLEAN]: 'BOOLEAN',
|
|
17
|
+
[_data.collections.Type.URL]: 'URL',
|
|
18
|
+
[_data.collections.Type.ADDRESS]: 'ADDRESS',
|
|
19
|
+
[_data.collections.Type.OBJECT]: 'OBJECT',
|
|
20
|
+
[_data.collections.Type.RICH_TEXT]: 'RICH_TEXT',
|
|
21
|
+
[_data.collections.Type.RICH_CONTENT]: 'RICH_CONTENT',
|
|
22
|
+
[_data.collections.Type.ARRAY]: 'ARRAY',
|
|
23
|
+
[_data.collections.Type.ARRAY_STRING]: 'ARRAY',
|
|
24
|
+
[_data.collections.Type.REFERENCE]: 'REFERENCE',
|
|
25
|
+
[_data.collections.Type.MULTI_REFERENCE]: 'MULTI_REFERENCE',
|
|
26
|
+
[_data.collections.Type.IMAGE]: 'IMAGE',
|
|
27
|
+
[_data.collections.Type.VIDEO]: 'VIDEO',
|
|
28
|
+
[_data.collections.Type.MEDIA_GALLERY]: 'MEDIA_GALLERY',
|
|
29
|
+
[_data.collections.Type.DOCUMENT]: 'DOCUMENT',
|
|
30
|
+
[_data.collections.Type.ARRAY_DOCUMENT]: 'MULTI_DOCUMENT',
|
|
31
|
+
[_data.collections.Type.AUDIO]: 'AUDIO',
|
|
32
|
+
[CMS_EMAIL_TYPE]: 'EMAIL',
|
|
33
|
+
[_data.collections.Type.LEGACY_COLOR]: 'COLOR'
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
/** Reverse map — only these are creatable via `addField`; others throw "not supported". */
|
|
37
|
+
const PatternsFieldTypeToCmsFieldType = exports.PatternsFieldTypeToCmsFieldType = {
|
|
38
|
+
SHORT_TEXT: _data.collections.Type.TEXT,
|
|
39
|
+
NUMBER: _data.collections.Type.NUMBER,
|
|
40
|
+
BOOLEAN: _data.collections.Type.BOOLEAN,
|
|
41
|
+
DATE: _data.collections.Type.DATE
|
|
42
|
+
};
|
|
43
|
+
//# sourceMappingURL=cmsFieldTypeMap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_data","require","CMS_EMAIL_TYPE","exports","CmsFieldTypeToPatternsFieldType","collections","Type","TEXT","DATE","DATETIME","TIME","NUMBER","BOOLEAN","URL","ADDRESS","OBJECT","RICH_TEXT","RICH_CONTENT","ARRAY","ARRAY_STRING","REFERENCE","MULTI_REFERENCE","IMAGE","VIDEO","MEDIA_GALLERY","DOCUMENT","ARRAY_DOCUMENT","AUDIO","LEGACY_COLOR","PatternsFieldTypeToCmsFieldType","SHORT_TEXT"],"sources":["../../../src/adapter/cmsFieldTypeMap.ts"],"sourcesContent":["import { collections } from '@wix/data';\nimport type { PatternsFieldType } from '@wix/bex-core';\n\n// CMS returns 'EMAIL' but `collections.Type` doesn't expose it yet — cast as a workaround.\nexport const CMS_EMAIL_TYPE = 'EMAIL' as collections.Type;\n\n/** Raw CMS field type → `PatternsFieldType`. Unlisted types resolve to `'UNKNOWN'`. */\nexport const CmsFieldTypeToPatternsFieldType: Partial<\n Record<collections.Type, PatternsFieldType>\n> = {\n [collections.Type.TEXT]: 'SHORT_TEXT',\n [collections.Type.DATE]: 'DATE',\n [collections.Type.DATETIME]: 'DATETIME',\n [collections.Type.TIME]: 'TIME',\n [collections.Type.NUMBER]: 'NUMBER',\n [collections.Type.BOOLEAN]: 'BOOLEAN',\n [collections.Type.URL]: 'URL',\n [collections.Type.ADDRESS]: 'ADDRESS',\n [collections.Type.OBJECT]: 'OBJECT',\n [collections.Type.RICH_TEXT]: 'RICH_TEXT',\n [collections.Type.RICH_CONTENT]: 'RICH_CONTENT',\n [collections.Type.ARRAY]: 'ARRAY',\n [collections.Type.ARRAY_STRING]: 'ARRAY',\n [collections.Type.REFERENCE]: 'REFERENCE',\n [collections.Type.MULTI_REFERENCE]: 'MULTI_REFERENCE',\n [collections.Type.IMAGE]: 'IMAGE',\n [collections.Type.VIDEO]: 'VIDEO',\n [collections.Type.MEDIA_GALLERY]: 'MEDIA_GALLERY',\n [collections.Type.DOCUMENT]: 'DOCUMENT',\n [collections.Type.ARRAY_DOCUMENT]: 'MULTI_DOCUMENT',\n [collections.Type.AUDIO]: 'AUDIO',\n [CMS_EMAIL_TYPE]: 'EMAIL',\n [collections.Type.LEGACY_COLOR]: 'COLOR',\n};\n\n/** Reverse map — only these are creatable via `addField`; others throw \"not supported\". */\nexport const PatternsFieldTypeToCmsFieldType: Partial<\n Record<PatternsFieldType, collections.Type>\n> = {\n SHORT_TEXT: collections.Type.TEXT,\n NUMBER: collections.Type.NUMBER,\n BOOLEAN: collections.Type.BOOLEAN,\n DATE: collections.Type.DATE,\n};\n"],"mappings":";;;;AAAA,IAAAA,KAAA,GAAAC,OAAA;AAGA;AACO,MAAMC,cAAc,GAAAC,OAAA,CAAAD,cAAA,GAAG,OAA2B;;AAEzD;AACO,MAAME,+BAEZ,GAAAD,OAAA,CAAAC,+BAAA,GAAG;EACF,CAACC,iBAAW,CAACC,IAAI,CAACC,IAAI,GAAG,YAAY;EACrC,CAACF,iBAAW,CAACC,IAAI,CAACE,IAAI,GAAG,MAAM;EAC/B,CAACH,iBAAW,CAACC,IAAI,CAACG,QAAQ,GAAG,UAAU;EACvC,CAACJ,iBAAW,CAACC,IAAI,CAACI,IAAI,GAAG,MAAM;EAC/B,CAACL,iBAAW,CAACC,IAAI,CAACK,MAAM,GAAG,QAAQ;EACnC,CAACN,iBAAW,CAACC,IAAI,CAACM,OAAO,GAAG,SAAS;EACrC,CAACP,iBAAW,CAACC,IAAI,CAACO,GAAG,GAAG,KAAK;EAC7B,CAACR,iBAAW,CAACC,IAAI,CAACQ,OAAO,GAAG,SAAS;EACrC,CAACT,iBAAW,CAACC,IAAI,CAACS,MAAM,GAAG,QAAQ;EACnC,CAACV,iBAAW,CAACC,IAAI,CAACU,SAAS,GAAG,WAAW;EACzC,CAACX,iBAAW,CAACC,IAAI,CAACW,YAAY,GAAG,cAAc;EAC/C,CAACZ,iBAAW,CAACC,IAAI,CAACY,KAAK,GAAG,OAAO;EACjC,CAACb,iBAAW,CAACC,IAAI,CAACa,YAAY,GAAG,OAAO;EACxC,CAACd,iBAAW,CAACC,IAAI,CAACc,SAAS,GAAG,WAAW;EACzC,CAACf,iBAAW,CAACC,IAAI,CAACe,eAAe,GAAG,iBAAiB;EACrD,CAAChB,iBAAW,CAACC,IAAI,CAACgB,KAAK,GAAG,OAAO;EACjC,CAACjB,iBAAW,CAACC,IAAI,CAACiB,KAAK,GAAG,OAAO;EACjC,CAAClB,iBAAW,CAACC,IAAI,CAACkB,aAAa,GAAG,eAAe;EACjD,CAACnB,iBAAW,CAACC,IAAI,CAACmB,QAAQ,GAAG,UAAU;EACvC,CAACpB,iBAAW,CAACC,IAAI,CAACoB,cAAc,GAAG,gBAAgB;EACnD,CAACrB,iBAAW,CAACC,IAAI,CAACqB,KAAK,GAAG,OAAO;EACjC,CAACzB,cAAc,GAAG,OAAO;EACzB,CAACG,iBAAW,CAACC,IAAI,CAACsB,YAAY,GAAG;AACnC,CAAC;;AAED;AACO,MAAMC,+BAEZ,GAAA1B,OAAA,CAAA0B,+BAAA,GAAG;EACFC,UAAU,EAAEzB,iBAAW,CAACC,IAAI,CAACC,IAAI;EACjCI,MAAM,EAAEN,iBAAW,CAACC,IAAI,CAACK,MAAM;EAC/BC,OAAO,EAAEP,iBAAW,CAACC,IAAI,CAACM,OAAO;EACjCJ,IAAI,EAAEH,iBAAW,CAACC,IAAI,CAACE;AACzB,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
exports.__esModule = true;
|
|
4
|
+
exports.computeCmsPermissions = void 0;
|
|
5
|
+
const WIX_FORMS = '14ce1214-b278-a7e4-1373-00cebd1bef7c';
|
|
6
|
+
const FORM_APP = '225dd912-7dea-4738-8688-4b8c6955ffc2';
|
|
7
|
+
const WIX_DATA = {
|
|
8
|
+
CREATE_FIELD: 'WIX_DATA.CREATE_COLLECTION_FIELD',
|
|
9
|
+
UPDATE_FIELD: 'WIX_DATA.UPDATE_COLLECTION_FIELD',
|
|
10
|
+
DELETE_FIELD: 'WIX_DATA.DELETE_COLLECTION_FIELD',
|
|
11
|
+
INSERT: 'WIX_DATA.INSERT',
|
|
12
|
+
UPDATE: 'WIX_DATA.UPDATE',
|
|
13
|
+
REMOVE: 'WIX_DATA.REMOVE'
|
|
14
|
+
};
|
|
15
|
+
const SCHEMA_FIELD_PERMISSIONS = [WIX_DATA.CREATE_FIELD, WIX_DATA.UPDATE_FIELD, WIX_DATA.DELETE_FIELD];
|
|
16
|
+
|
|
17
|
+
/** An external-database connection; determines whether an EXTERNAL collection is editable. */
|
|
18
|
+
|
|
19
|
+
// `allowedDataPermissions` is an internal-only field on the v2 `getDataCollection`
|
|
20
|
+
// response (stripped from the public `@wix/data` typings); cast to read it.
|
|
21
|
+
|
|
22
|
+
// EXTERNAL collection ids are `connectionName/dataCollectionId`; match the
|
|
23
|
+
// converter's lastIndexOf('/') split.
|
|
24
|
+
const externalNamespaceFromId = collectionId => {
|
|
25
|
+
if (!collectionId) {
|
|
26
|
+
return null;
|
|
27
|
+
}
|
|
28
|
+
const index = collectionId.lastIndexOf('/');
|
|
29
|
+
return index === -1 ? null : collectionId.substring(0, index);
|
|
30
|
+
};
|
|
31
|
+
const isCollectionShared = schema => {
|
|
32
|
+
var _schema$plugins;
|
|
33
|
+
return ((_schema$plugins = schema.plugins) == null ? void 0 : _schema$plugins.some(p => p.type === 'SHARED')) ?? false;
|
|
34
|
+
};
|
|
35
|
+
const isFormsCollection = schema => schema.ownerAppId === WIX_FORMS || schema.ownerAppId === FORM_APP;
|
|
36
|
+
const isWixAppReadOnly = schema => schema.collectionType === 'WIX_APP' && schema.ownerAppId !== 'SiteMembers' && !isFormsCollection(schema);
|
|
37
|
+
const isExternalEditable = (schema, externalDbConnections) => {
|
|
38
|
+
var _connection$capabilit, _connection$capabilit2;
|
|
39
|
+
const namespace = externalNamespaceFromId(schema._id);
|
|
40
|
+
const connection = namespace ? externalDbConnections.find(c => c.namespace === namespace) : undefined;
|
|
41
|
+
return !!(connection != null && (_connection$capabilit = connection.capabilities) != null && _connection$capabilit.collectionModificationsSupported) && (((_connection$capabilit2 = connection.capabilities.fieldTypes) == null ? void 0 : _connection$capabilit2.length) ?? 0) > 0;
|
|
42
|
+
};
|
|
43
|
+
const isSchemaEditable = (schema, externalDbConnections) => {
|
|
44
|
+
if (isCollectionShared(schema)) {
|
|
45
|
+
return false;
|
|
46
|
+
}
|
|
47
|
+
if (schema.collectionType === 'NATIVE') {
|
|
48
|
+
return true;
|
|
49
|
+
}
|
|
50
|
+
if (schema.collectionType === 'EXTERNAL') {
|
|
51
|
+
return isExternalEditable(schema, externalDbConnections);
|
|
52
|
+
}
|
|
53
|
+
return false;
|
|
54
|
+
};
|
|
55
|
+
const canEditSchemaFields = userPermissions => SCHEMA_FIELD_PERMISSIONS.every(p => userPermissions.includes(p));
|
|
56
|
+
const computeItemPermissions = (schema, userPermissions) => {
|
|
57
|
+
var _schema$capabilities;
|
|
58
|
+
if (isCollectionShared(schema) || isWixAppReadOnly(schema)) {
|
|
59
|
+
return {
|
|
60
|
+
createItem: false,
|
|
61
|
+
updateItem: false,
|
|
62
|
+
deleteItem: false
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
const ops = ((_schema$capabilities = schema.capabilities) == null ? void 0 : _schema$capabilities.dataOperations) ?? [];
|
|
66
|
+
const roles = schema.permissions;
|
|
67
|
+
const allowed = schema.allowedDataPermissions;
|
|
68
|
+
const hasAbacOrAnyone = (role, abacPermission) => role === 'ANYONE' || userPermissions.includes(abacPermission);
|
|
69
|
+
const notDataRestricted = key => (allowed == null ? void 0 : allowed[key]) !== false;
|
|
70
|
+
return {
|
|
71
|
+
// cms-web does NOT apply the ANYONE bypass for insert (raw ABAC check).
|
|
72
|
+
createItem: ops.includes('SAVE') && notDataRestricted('itemInsert') && userPermissions.includes(WIX_DATA.INSERT),
|
|
73
|
+
updateItem: ops.includes('UPDATE') && notDataRestricted('itemUpdate') && hasAbacOrAnyone(roles == null ? void 0 : roles.update, WIX_DATA.UPDATE),
|
|
74
|
+
deleteItem: ops.includes('REMOVE') && notDataRestricted('itemRemove') && hasAbacOrAnyone(roles == null ? void 0 : roles.remove, WIX_DATA.REMOVE)
|
|
75
|
+
};
|
|
76
|
+
};
|
|
77
|
+
/**
|
|
78
|
+
* Computes the source-neutral permissions from the CMS collection and the
|
|
79
|
+
* user's ABAC permissions.
|
|
80
|
+
*/
|
|
81
|
+
const computeCmsPermissions = (schema, userPermissions = [], externalDbConnections = []) => {
|
|
82
|
+
const schemaEditable = isSchemaEditable(schema, externalDbConnections);
|
|
83
|
+
const canEditFields = schemaEditable && canEditSchemaFields(userPermissions);
|
|
84
|
+
return {
|
|
85
|
+
schemaPermissions: schemaEditable ? {
|
|
86
|
+
createField: canEditFields,
|
|
87
|
+
updateField: canEditFields,
|
|
88
|
+
deleteField: canEditFields
|
|
89
|
+
} : undefined,
|
|
90
|
+
itemPermissions: computeItemPermissions(schema, userPermissions)
|
|
91
|
+
};
|
|
92
|
+
};
|
|
93
|
+
exports.computeCmsPermissions = computeCmsPermissions;
|
|
94
|
+
//# sourceMappingURL=cmsPermissions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["WIX_FORMS","FORM_APP","WIX_DATA","CREATE_FIELD","UPDATE_FIELD","DELETE_FIELD","INSERT","UPDATE","REMOVE","SCHEMA_FIELD_PERMISSIONS","externalNamespaceFromId","collectionId","index","lastIndexOf","substring","isCollectionShared","schema","_schema$plugins","plugins","some","p","type","isFormsCollection","ownerAppId","isWixAppReadOnly","collectionType","isExternalEditable","externalDbConnections","_connection$capabilit","_connection$capabilit2","namespace","_id","connection","find","c","undefined","capabilities","collectionModificationsSupported","fieldTypes","length","isSchemaEditable","canEditSchemaFields","userPermissions","every","includes","computeItemPermissions","_schema$capabilities","createItem","updateItem","deleteItem","ops","dataOperations","roles","permissions","allowed","allowedDataPermissions","hasAbacOrAnyone","role","abacPermission","notDataRestricted","key","update","remove","computeCmsPermissions","schemaEditable","canEditFields","schemaPermissions","createField","updateField","deleteField","itemPermissions","exports"],"sources":["../../../src/adapter/cmsPermissions.ts"],"sourcesContent":["import { collections } from '@wix/data';\nimport type { ItemPermissions, SchemaPermissions } from '@wix/bex-core';\n\nconst WIX_FORMS = '14ce1214-b278-a7e4-1373-00cebd1bef7c';\nconst FORM_APP = '225dd912-7dea-4738-8688-4b8c6955ffc2';\n\nconst WIX_DATA = {\n CREATE_FIELD: 'WIX_DATA.CREATE_COLLECTION_FIELD',\n UPDATE_FIELD: 'WIX_DATA.UPDATE_COLLECTION_FIELD',\n DELETE_FIELD: 'WIX_DATA.DELETE_COLLECTION_FIELD',\n INSERT: 'WIX_DATA.INSERT',\n UPDATE: 'WIX_DATA.UPDATE',\n REMOVE: 'WIX_DATA.REMOVE',\n};\n\nconst SCHEMA_FIELD_PERMISSIONS = [\n WIX_DATA.CREATE_FIELD,\n WIX_DATA.UPDATE_FIELD,\n WIX_DATA.DELETE_FIELD,\n];\n\n/** An external-database connection; determines whether an EXTERNAL collection is editable. */\nexport interface ExternalDbConnection {\n namespace: string;\n capabilities?: {\n collectionModificationsSupported?: boolean;\n fieldTypes?: string[];\n };\n}\n\n// `allowedDataPermissions` is an internal-only field on the v2 `getDataCollection`\n// response (stripped from the public `@wix/data` typings); cast to read it.\ninterface AllowedDataPermissions {\n itemInsert?: boolean;\n itemUpdate?: boolean;\n itemRemove?: boolean;\n}\ntype DataCollectionWithAllowed = collections.DataCollection & {\n allowedDataPermissions?: AllowedDataPermissions;\n};\n\n// EXTERNAL collection ids are `connectionName/dataCollectionId`; match the\n// converter's lastIndexOf('/') split.\nconst externalNamespaceFromId = (\n collectionId: string | undefined,\n): string | null => {\n if (!collectionId) {\n return null;\n }\n const index = collectionId.lastIndexOf('/');\n return index === -1 ? null : collectionId.substring(0, index);\n};\n\nconst isCollectionShared = (schema: collections.DataCollection): boolean =>\n schema.plugins?.some((p) => p.type === 'SHARED') ?? false;\n\nconst isFormsCollection = (schema: collections.DataCollection): boolean =>\n schema.ownerAppId === WIX_FORMS || schema.ownerAppId === FORM_APP;\n\nconst isWixAppReadOnly = (schema: collections.DataCollection): boolean =>\n schema.collectionType === 'WIX_APP' &&\n schema.ownerAppId !== 'SiteMembers' &&\n !isFormsCollection(schema);\n\nconst isExternalEditable = (\n schema: collections.DataCollection,\n externalDbConnections: ExternalDbConnection[],\n): boolean => {\n const namespace = externalNamespaceFromId(schema._id);\n const connection = namespace\n ? externalDbConnections.find((c) => c.namespace === namespace)\n : undefined;\n return (\n !!connection?.capabilities?.collectionModificationsSupported &&\n (connection.capabilities.fieldTypes?.length ?? 0) > 0\n );\n};\n\nconst isSchemaEditable = (\n schema: collections.DataCollection,\n externalDbConnections: ExternalDbConnection[],\n): boolean => {\n if (isCollectionShared(schema)) {\n return false;\n }\n if (schema.collectionType === 'NATIVE') {\n return true;\n }\n if (schema.collectionType === 'EXTERNAL') {\n return isExternalEditable(schema, externalDbConnections);\n }\n return false;\n};\n\nconst canEditSchemaFields = (userPermissions: string[]): boolean =>\n SCHEMA_FIELD_PERMISSIONS.every((p) => userPermissions.includes(p));\n\nconst computeItemPermissions = (\n schema: collections.DataCollection,\n userPermissions: string[],\n): ItemPermissions => {\n if (isCollectionShared(schema) || isWixAppReadOnly(schema)) {\n return { createItem: false, updateItem: false, deleteItem: false };\n }\n\n const ops = schema.capabilities?.dataOperations ?? [];\n const roles = schema.permissions;\n const allowed = (schema as DataCollectionWithAllowed).allowedDataPermissions;\n\n const hasAbacOrAnyone = (role: string | undefined, abacPermission: string) =>\n role === 'ANYONE' || userPermissions.includes(abacPermission);\n const notDataRestricted = (key: keyof AllowedDataPermissions) =>\n allowed?.[key] !== false;\n\n return {\n // cms-web does NOT apply the ANYONE bypass for insert (raw ABAC check).\n createItem:\n ops.includes('SAVE') &&\n notDataRestricted('itemInsert') &&\n userPermissions.includes(WIX_DATA.INSERT),\n updateItem:\n ops.includes('UPDATE') &&\n notDataRestricted('itemUpdate') &&\n hasAbacOrAnyone(roles?.update, WIX_DATA.UPDATE),\n deleteItem:\n ops.includes('REMOVE') &&\n notDataRestricted('itemRemove') &&\n hasAbacOrAnyone(roles?.remove, WIX_DATA.REMOVE),\n };\n};\n\nexport interface CmsPermissions {\n /** `undefined` when the schema's fields cannot be edited. */\n schemaPermissions?: SchemaPermissions;\n itemPermissions: ItemPermissions;\n}\n\n/**\n * Computes the source-neutral permissions from the CMS collection and the\n * user's ABAC permissions.\n */\nexport const computeCmsPermissions = (\n schema: collections.DataCollection,\n userPermissions: string[] = [],\n externalDbConnections: ExternalDbConnection[] = [],\n): CmsPermissions => {\n const schemaEditable = isSchemaEditable(schema, externalDbConnections);\n const canEditFields = schemaEditable && canEditSchemaFields(userPermissions);\n\n return {\n schemaPermissions: schemaEditable\n ? {\n createField: canEditFields,\n updateField: canEditFields,\n deleteField: canEditFields,\n }\n : undefined,\n itemPermissions: computeItemPermissions(schema, userPermissions),\n };\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
exports.__esModule = true;
|
|
4
|
+
exports.HasValueFilters = exports.HAS_VALUE_FILTER_TYPES = exports.FilterPropToOperator = exports.BooleanFilters = void 0;
|
|
5
|
+
/** Range-filter property keys produced by the UI query layer. */
|
|
6
|
+
|
|
7
|
+
const FilterPropToOperator = exports.FilterPropToOperator = {
|
|
8
|
+
from: 'GTE',
|
|
9
|
+
to: 'LTE'
|
|
10
|
+
};
|
|
11
|
+
const BooleanFilters = exports.BooleanFilters = {
|
|
12
|
+
checked: 'checked',
|
|
13
|
+
unchecked: 'unchecked'
|
|
14
|
+
};
|
|
15
|
+
const HasValueFilters = exports.HasValueFilters = {
|
|
16
|
+
hasValue: 'hasValue',
|
|
17
|
+
noValue: 'noValue'
|
|
18
|
+
};
|
|
19
|
+
const HAS_VALUE_FILTER_TYPES = exports.HAS_VALUE_FILTER_TYPES = ['RICH_CONTENT', 'TIME', 'DOCUMENT', 'MULTI_DOCUMENT', 'AUDIO', 'IMAGE', 'OBJECT', 'ARRAY', 'MEDIA_GALLERY', 'COLOR'];
|
|
20
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["FilterPropToOperator","exports","from","to","BooleanFilters","checked","unchecked","HasValueFilters","hasValue","noValue","HAS_VALUE_FILTER_TYPES"],"sources":["../../../src/adapter/constants.ts"],"sourcesContent":["import type { QueryOperator } from '@wix/bex-core';\n\n/** Range-filter property keys produced by the UI query layer. */\nexport type FilterProp = 'from' | 'to';\n\nexport const FilterPropToOperator: Record<FilterProp, QueryOperator> = {\n from: 'GTE',\n to: 'LTE',\n};\n\nexport const BooleanFilters = {\n checked: 'checked',\n unchecked: 'unchecked',\n};\n\nexport const HasValueFilters = {\n hasValue: 'hasValue',\n noValue: 'noValue',\n};\n\nexport const HAS_VALUE_FILTER_TYPES = [\n 'RICH_CONTENT',\n 'TIME',\n 'DOCUMENT',\n 'MULTI_DOCUMENT',\n 'AUDIO',\n 'IMAGE',\n 'OBJECT',\n 'ARRAY',\n 'MEDIA_GALLERY',\n 'COLOR',\n];\n"],"mappings":";;;;AAEA;;AAGO,MAAMA,oBAAuD,GAAAC,OAAA,CAAAD,oBAAA,GAAG;EACrEE,IAAI,EAAE,KAAK;EACXC,EAAE,EAAE;AACN,CAAC;AAEM,MAAMC,cAAc,GAAAH,OAAA,CAAAG,cAAA,GAAG;EAC5BC,OAAO,EAAE,SAAS;EAClBC,SAAS,EAAE;AACb,CAAC;AAEM,MAAMC,eAAe,GAAAN,OAAA,CAAAM,eAAA,GAAG;EAC7BC,QAAQ,EAAE,UAAU;EACpBC,OAAO,EAAE;AACX,CAAC;AAEM,MAAMC,sBAAsB,GAAAT,OAAA,CAAAS,sBAAA,GAAG,CACpC,cAAc,EACd,MAAM,EACN,UAAU,EACV,gBAAgB,EAChB,OAAO,EACP,OAAO,EACP,QAAQ,EACR,OAAO,EACP,eAAe,EACf,OAAO,CACR","ignoreList":[]}
|