domma-cms 0.23.0 → 0.25.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/CLAUDE.md +14 -0
- package/admin/js/api.js +1 -1
- package/admin/js/app.js +4 -4
- package/admin/js/lib/crud-tutorial.js +1 -1
- package/admin/js/lib/project-context.js +1 -1
- package/admin/js/templates/api-endpoint-editor.html +120 -0
- package/admin/js/templates/api-endpoints.html +13 -0
- package/admin/js/templates/api-tokens.html +13 -0
- package/admin/js/templates/effects.html +752 -752
- package/admin/js/templates/form-submissions.html +30 -30
- package/admin/js/templates/forms.html +17 -17
- package/admin/js/templates/my-profile.html +17 -17
- package/admin/js/templates/role-editor.html +70 -70
- package/admin/js/templates/roles.html +10 -10
- package/admin/js/views/api-endpoint-editor.js +1 -0
- package/admin/js/views/api-endpoints.js +7 -0
- package/admin/js/views/api-tokens.js +8 -0
- package/admin/js/views/collection-editor.js +4 -4
- package/admin/js/views/index.js +1 -1
- package/admin/js/views/project-detail.js +1 -1
- package/admin/js/views/roles.js +1 -1
- package/bin/lib/config-merge.js +44 -44
- package/bin/update.js +547 -547
- package/config/menus/admin-sidebar.json +13 -1
- package/package.json +1 -1
- package/server/middleware/auth.js +253 -253
- package/server/routes/api/api-endpoints.js +96 -0
- package/server/routes/api/api-tokens.js +83 -0
- package/server/routes/api/auth.js +309 -309
- package/server/routes/api/collections.js +114 -17
- package/server/routes/api/endpoints-public.js +88 -0
- package/server/routes/api/navigation.js +42 -42
- package/server/routes/api/settings.js +141 -141
- package/server/routes/public.js +202 -202
- package/server/server.js +16 -1
- package/server/services/apiEndpoints.js +402 -0
- package/server/services/apiTokens.js +273 -0
- package/server/services/email.js +167 -167
- package/server/services/permissionRegistry.js +26 -0
- package/server/services/presetCollections.js +54 -0
- package/server/services/projects.js +18 -2
- package/server/services/roles.js +16 -0
- package/server/services/scaffolder.js +54 -1
- package/server/services/sidebar-migration.js +45 -0
- package/server/services/userProfiles.js +199 -199
- package/server/services/users.js +302 -302
- package/config/connections.json.bak +0 -9
package/bin/lib/config-merge.js
CHANGED
|
@@ -1,44 +1,44 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Domma CMS — Config Merge Utility
|
|
3
|
-
* Merges new keys from an upstream config into an existing user config,
|
|
4
|
-
* without ever overwriting values the user already has.
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
* Deep-merge new keys from `upstream` into `existing`.
|
|
9
|
-
* Existing values are never modified — only missing keys are added.
|
|
10
|
-
*
|
|
11
|
-
* @param {object} existing - The user's current config object
|
|
12
|
-
* @param {object} upstream - The upstream (new version) config object
|
|
13
|
-
* @param {string} [_prefix] - Internal: key path prefix for reporting
|
|
14
|
-
* @returns {{ merged: object, added: string[] }} Merged object + list of added key paths
|
|
15
|
-
*/
|
|
16
|
-
export function deepMergeNewKeys(existing, upstream, _prefix = '') {
|
|
17
|
-
const merged = {...existing};
|
|
18
|
-
const added = [];
|
|
19
|
-
|
|
20
|
-
for (const [key, upstreamVal] of Object.entries(upstream)) {
|
|
21
|
-
const fullKey = _prefix ? `${_prefix}.${key}` : key;
|
|
22
|
-
|
|
23
|
-
if (!(key in existing)) {
|
|
24
|
-
// Key is entirely missing — add it wholesale
|
|
25
|
-
merged[key] = upstreamVal;
|
|
26
|
-
added.push(fullKey);
|
|
27
|
-
} else if (
|
|
28
|
-
upstreamVal !== null &&
|
|
29
|
-
typeof upstreamVal === 'object' &&
|
|
30
|
-
!Array.isArray(upstreamVal) &&
|
|
31
|
-
typeof existing[key] === 'object' &&
|
|
32
|
-
existing[key] !== null &&
|
|
33
|
-
!Array.isArray(existing[key])
|
|
34
|
-
) {
|
|
35
|
-
// Both sides are plain objects — recurse
|
|
36
|
-
const child = deepMergeNewKeys(existing[key], upstreamVal, fullKey);
|
|
37
|
-
merged[key] = child.merged;
|
|
38
|
-
added.push(...child.added);
|
|
39
|
-
}
|
|
40
|
-
// Otherwise: existing value wins — no action
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
return {merged, added};
|
|
44
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* Domma CMS — Config Merge Utility
|
|
3
|
+
* Merges new keys from an upstream config into an existing user config,
|
|
4
|
+
* without ever overwriting values the user already has.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Deep-merge new keys from `upstream` into `existing`.
|
|
9
|
+
* Existing values are never modified — only missing keys are added.
|
|
10
|
+
*
|
|
11
|
+
* @param {object} existing - The user's current config object
|
|
12
|
+
* @param {object} upstream - The upstream (new version) config object
|
|
13
|
+
* @param {string} [_prefix] - Internal: key path prefix for reporting
|
|
14
|
+
* @returns {{ merged: object, added: string[] }} Merged object + list of added key paths
|
|
15
|
+
*/
|
|
16
|
+
export function deepMergeNewKeys(existing, upstream, _prefix = '') {
|
|
17
|
+
const merged = {...existing};
|
|
18
|
+
const added = [];
|
|
19
|
+
|
|
20
|
+
for (const [key, upstreamVal] of Object.entries(upstream)) {
|
|
21
|
+
const fullKey = _prefix ? `${_prefix}.${key}` : key;
|
|
22
|
+
|
|
23
|
+
if (!(key in existing)) {
|
|
24
|
+
// Key is entirely missing — add it wholesale
|
|
25
|
+
merged[key] = upstreamVal;
|
|
26
|
+
added.push(fullKey);
|
|
27
|
+
} else if (
|
|
28
|
+
upstreamVal !== null &&
|
|
29
|
+
typeof upstreamVal === 'object' &&
|
|
30
|
+
!Array.isArray(upstreamVal) &&
|
|
31
|
+
typeof existing[key] === 'object' &&
|
|
32
|
+
existing[key] !== null &&
|
|
33
|
+
!Array.isArray(existing[key])
|
|
34
|
+
) {
|
|
35
|
+
// Both sides are plain objects — recurse
|
|
36
|
+
const child = deepMergeNewKeys(existing[key], upstreamVal, fullKey);
|
|
37
|
+
merged[key] = child.merged;
|
|
38
|
+
added.push(...child.added);
|
|
39
|
+
}
|
|
40
|
+
// Otherwise: existing value wins — no action
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
return {merged, added};
|
|
44
|
+
}
|