@cdmbase/wiki-browser 12.0.18-alpha.34 → 12.0.18-alpha.35
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.
|
@@ -582,6 +582,18 @@
|
|
|
582
582
|
"updatedAt": "Recently",
|
|
583
583
|
"frontmatter": {}
|
|
584
584
|
},
|
|
585
|
+
{
|
|
586
|
+
"contentId": "adminide-modules-preferences-pagesettings-troubleshootingsettingswithpageexplainplan",
|
|
587
|
+
"slug": "preferences-pagesettings-troubleshootingsettingswithpageexplainplan",
|
|
588
|
+
"filePath": "/content/docs/adminide-modules/preferences/pageSettings/troubleshootingSettingsWithPageExplainPlan.md",
|
|
589
|
+
"relativePath": "adminide-modules/preferences/pageSettings/troubleshootingSettingsWithPageExplainPlan.md",
|
|
590
|
+
"categoryId": "adminide-modules",
|
|
591
|
+
"title": "TroubleshootingSettingsWithPageExplainPlan",
|
|
592
|
+
"description": "",
|
|
593
|
+
"author": "Documentation",
|
|
594
|
+
"updatedAt": "Recently",
|
|
595
|
+
"frontmatter": {}
|
|
596
|
+
},
|
|
585
597
|
{
|
|
586
598
|
"contentId": "adminide-modules-preferences-permissions-roles-permissions",
|
|
587
599
|
"slug": "preferences-permissions-roles-permissions",
|
|
@@ -4045,6 +4057,15 @@
|
|
|
4045
4057
|
"updatedAt": "Recently",
|
|
4046
4058
|
"categoryId": "adminide-modules"
|
|
4047
4059
|
},
|
|
4060
|
+
{
|
|
4061
|
+
"id": "adminide-modules-preferences-pagesettings-troubleshootingsettingswithpageexplainplan",
|
|
4062
|
+
"title": "TroubleshootingSettingsWithPageExplainPlan",
|
|
4063
|
+
"description": "",
|
|
4064
|
+
"slug": "preferences-pagesettings-troubleshootingsettingswithpageexplainplan",
|
|
4065
|
+
"author": "Documentation",
|
|
4066
|
+
"updatedAt": "Recently",
|
|
4067
|
+
"categoryId": "adminide-modules"
|
|
4068
|
+
},
|
|
4048
4069
|
{
|
|
4049
4070
|
"id": "adminide-modules-preferences-usesettingsloader",
|
|
4050
4071
|
"title": "Use Setting Loader",
|
|
@@ -5447,6 +5468,7 @@
|
|
|
5447
5468
|
"adminide-modules-preferences-machine-configuration": "/content/docs/adminide-modules/preferences/machine-configuration.md",
|
|
5448
5469
|
"adminide-modules-preferences-pagesettings-generatecdecodeuri": "/content/docs/adminide-modules/preferences/pageSettings/generateCdecodeUri.md",
|
|
5449
5470
|
"adminide-modules-preferences-pagesettings-migratingfromusesettings": "/content/docs/adminide-modules/preferences/pageSettings/migratingFromUseSettings.md",
|
|
5471
|
+
"adminide-modules-preferences-pagesettings-troubleshootingsettingswithpageexplainplan": "/content/docs/adminide-modules/preferences/pageSettings/troubleshootingSettingsWithPageExplainPlan.md",
|
|
5450
5472
|
"adminide-modules-preferences-permissions-roles-permissions": "/content/docs/adminide-modules/preferences/permissions/Roles-Permissions.md",
|
|
5451
5473
|
"adminide-modules-preferences-permissions-settinguserpermissions": "/content/docs/adminide-modules/preferences/permissions/settingUserPermissions.md",
|
|
5452
5474
|
"adminide-modules-preferences-preference-dependency": "/content/docs/adminide-modules/preferences/preference-dependency.md",
|
|
@@ -5907,6 +5929,21 @@
|
|
|
5907
5929
|
"author": "Documentation",
|
|
5908
5930
|
"updatedAt": "Recently",
|
|
5909
5931
|
"frontmatter": {}
|
|
5932
|
+
},
|
|
5933
|
+
{
|
|
5934
|
+
"type": "file",
|
|
5935
|
+
"name": "troubleshootingSettingsWithPageExplainPlan",
|
|
5936
|
+
"title": "TroubleshootingSettingsWithPageExplainPlan",
|
|
5937
|
+
"path": "adminide-modules/preferences/pageSettings/troubleshootingSettingsWithPageExplainPlan.md",
|
|
5938
|
+
"contentId": "adminide-modules-preferences-pagesettings-troubleshootingsettingswithpageexplainplan",
|
|
5939
|
+
"slug": "preferences-pagesettings-troubleshootingsettingswithpageexplainplan",
|
|
5940
|
+
"categoryId": "adminide-modules",
|
|
5941
|
+
"filePath": "/content/docs/adminide-modules/preferences/pageSettings/troubleshootingSettingsWithPageExplainPlan.md",
|
|
5942
|
+
"relativePath": "adminide-modules/preferences/pageSettings/troubleshootingSettingsWithPageExplainPlan.md",
|
|
5943
|
+
"description": "",
|
|
5944
|
+
"author": "Documentation",
|
|
5945
|
+
"updatedAt": "Recently",
|
|
5946
|
+
"frontmatter": {}
|
|
5910
5947
|
}
|
|
5911
5948
|
]
|
|
5912
5949
|
},
|
|
@@ -10213,6 +10250,12 @@
|
|
|
10213
10250
|
"path": "/help/adminide-modules/preferences-pagesettings-migratingfromusesettings",
|
|
10214
10251
|
"children": [],
|
|
10215
10252
|
"isFile": true
|
|
10253
|
+
},
|
|
10254
|
+
{
|
|
10255
|
+
"title": "TroubleshootingSettingsWithPageExplainPlan",
|
|
10256
|
+
"path": "/help/adminide-modules/preferences-pagesettings-troubleshootingsettingswithpageexplainplan",
|
|
10257
|
+
"children": [],
|
|
10258
|
+
"isFile": true
|
|
10216
10259
|
}
|
|
10217
10260
|
],
|
|
10218
10261
|
"isFile": false
|
|
@@ -0,0 +1,691 @@
|
|
|
1
|
+
# Troubleshooting Settings with `pageExplainPlan`
|
|
2
|
+
|
|
3
|
+
When settings or extensions are not showing up as expected, the `pageExplainPlan` GraphQL query is the **primary debugging tool**. It reveals exactly which configuration subjects will be loaded, in what order they merge, and which extensions are resolved — without actually performing the merge. Think of it as a **dry-run** for `pageSettings`.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Table of Contents
|
|
8
|
+
|
|
9
|
+
1. [Quick Start](#quick-start)
|
|
10
|
+
2. [Understanding the Query](#understanding-the-query)
|
|
11
|
+
3. [Understanding the Response](#understanding-the-response)
|
|
12
|
+
4. [Troubleshooting: Missing Extensions](#troubleshooting-missing-extensions)
|
|
13
|
+
5. [Troubleshooting: Missing or Wrong Settings](#troubleshooting-missing-or-wrong-settings)
|
|
14
|
+
6. [Common Pitfalls](#common-pitfalls)
|
|
15
|
+
7. [Reference: ConfigurationTarget Values](#reference-configurationtarget-values)
|
|
16
|
+
8. [Reference: Extension Resolution Flow](#reference-extension-resolution-flow)
|
|
17
|
+
9. [Reference: Schema IDs (`ContributionSchemaId`)](#reference-schema-ids-contributionschemaid)
|
|
18
|
+
10. [Reference: Fragment Names (`ConfigFragmentName`)](#reference-fragment-names-configfragmentname)
|
|
19
|
+
11. [Reference: Collection Names (`ConfigCollectionName`)](#reference-collection-names-configcollectionname)
|
|
20
|
+
12. [Reference: Extension Names (`ConfigExtensionName`)](#reference-extension-names-configextensionname)
|
|
21
|
+
13. [Reference: URI Construction Pattern](#reference-uri-construction-pattern)
|
|
22
|
+
14. [Advanced: Comparing with `pageSettings`](#advanced-comparing-with-pagesettings)
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## Quick Start
|
|
27
|
+
|
|
28
|
+
Open your GraphQL console (e.g. GraphQL Playground, Apollo Sandbox) and run:
|
|
29
|
+
|
|
30
|
+
```graphql
|
|
31
|
+
query GetPageExplainPlan($resourceUri: URIInput!, $options: PageSettingsOptionsInput) {
|
|
32
|
+
pageExplainPlan(resourceUri: $resourceUri, options: $options) {
|
|
33
|
+
target
|
|
34
|
+
targetName
|
|
35
|
+
fragmentData
|
|
36
|
+
mergeOrder
|
|
37
|
+
effectiveExtensions {
|
|
38
|
+
effectiveExtensions
|
|
39
|
+
userDisabledPublicExtensions
|
|
40
|
+
hasUserCustomizations
|
|
41
|
+
installedExtensionSlugs
|
|
42
|
+
defaultPublicExtensions
|
|
43
|
+
userExtensionOverrides
|
|
44
|
+
finalExtensionsList {
|
|
45
|
+
name
|
|
46
|
+
type
|
|
47
|
+
source
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
subjects {
|
|
51
|
+
typeName
|
|
52
|
+
target
|
|
53
|
+
resource
|
|
54
|
+
description
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
### Variables — Organization-level settings
|
|
61
|
+
|
|
62
|
+
```json
|
|
63
|
+
{
|
|
64
|
+
"resourceUri": {
|
|
65
|
+
"scheme": "cdecode",
|
|
66
|
+
"authority": "default",
|
|
67
|
+
"path": "/<your-org-slug>",
|
|
68
|
+
"fragment": "settings"
|
|
69
|
+
},
|
|
70
|
+
"options": {
|
|
71
|
+
"schemaId": "configuration",
|
|
72
|
+
"includeMarketplace": true,
|
|
73
|
+
"target": 4
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
> **Important:** Replace `<your-org-slug>` with your actual organization name/slug (the path segment after `/`).
|
|
79
|
+
|
|
80
|
+
---
|
|
81
|
+
|
|
82
|
+
## Understanding the Query
|
|
83
|
+
|
|
84
|
+
### `resourceUri` fields
|
|
85
|
+
|
|
86
|
+
| Field | Description | Example |
|
|
87
|
+
| ----------- | ------------------------------------- | -------------------------------------------- |
|
|
88
|
+
| `scheme` | Always `"cdecode"` | `"cdecode"` |
|
|
89
|
+
| `authority` | Tenant identifier | `"default"` |
|
|
90
|
+
| `path` | Organization + optional resource path | `"/my-org"` or `"/my-org/projects/proj-123"` |
|
|
91
|
+
| `fragment` | Data fragment to load | `"settings"` or `"policies"` |
|
|
92
|
+
|
|
93
|
+
### `options` fields
|
|
94
|
+
|
|
95
|
+
| Field | Type | Default | Description |
|
|
96
|
+
| -------------------- | --------- | --------------------- | ----------------------------------------------------------------------------------------- |
|
|
97
|
+
| `schemaId` | `String` | `"uilayout"` | Schema to query against. Use `"configuration"` for extension/app settings. |
|
|
98
|
+
| `target` | `Int` | _(inferred from URI)_ | Configuration target level. See [reference table](#reference-configurationtarget-values). |
|
|
99
|
+
| `includeMarketplace` | `Boolean` | `false` | **Must be `true`** to see extension-related subjects and `effectiveExtensions`. |
|
|
100
|
+
| `configKey` | `String` | — | Dot-separated key to narrow results (e.g. `"timetracker.timesheet"`). |
|
|
101
|
+
| `overrides` | `Object` | — | Override identifier, e.g. `{ "overrideIdentifier": "desktop" }`. |
|
|
102
|
+
|
|
103
|
+
### Choosing the right `target`
|
|
104
|
+
|
|
105
|
+
| Value | Name | When to use |
|
|
106
|
+
| ------- | ----------------------- | ------------------------------------------------------------- |
|
|
107
|
+
| `1` | `USER` | Debugging user-level settings |
|
|
108
|
+
| `2` | `APPLICATION` | Debugging tenant/application settings |
|
|
109
|
+
| `3` | `MACHINE` | Debugging machine-specific settings |
|
|
110
|
+
| **`4`** | **`ORGANIZATION`** | **Most common — debugging org-level settings and extensions** |
|
|
111
|
+
| `5` | `ORGANIZATION_RESOURCE` | Debugging project/team/resource-level settings |
|
|
112
|
+
|
|
113
|
+
---
|
|
114
|
+
|
|
115
|
+
## Understanding the Response
|
|
116
|
+
|
|
117
|
+
### `target` / `targetName`
|
|
118
|
+
|
|
119
|
+
Confirms the configuration target that was resolved. If you set `target: 4` in options, you should see:
|
|
120
|
+
|
|
121
|
+
```json
|
|
122
|
+
"target": 4,
|
|
123
|
+
"targetName": "ORGANIZATION"
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
If the `targetName` doesn't match what you expect, the URI path may be causing a different target to be inferred.
|
|
127
|
+
|
|
128
|
+
### `mergeOrder`
|
|
129
|
+
|
|
130
|
+
The order in which configuration layers are merged (left-to-right, later wins):
|
|
131
|
+
|
|
132
|
+
```json
|
|
133
|
+
"mergeOrder": [
|
|
134
|
+
"SystemConfiguration",
|
|
135
|
+
"PublicExtensionConfigurations",
|
|
136
|
+
"ApplicationConfiguration",
|
|
137
|
+
"UserConfiguration",
|
|
138
|
+
"OrganizationConfiguration"
|
|
139
|
+
]
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
**Key merge order variants for `ORGANIZATION` target:**
|
|
143
|
+
|
|
144
|
+
| Scenario | Merge Order |
|
|
145
|
+
| ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------- |
|
|
146
|
+
| `includeMarketplace: false` | `System → Application → User → Organization` |
|
|
147
|
+
| `includeMarketplace: true`, no user customizations, no private extensions | `System → PublicExtensionConfigs → Application → User → Organization` |
|
|
148
|
+
| `includeMarketplace: true`, no user customizations, **has** private extensions | `System → PublicExtensionConfigs → OrgMarketExtConfigs → Application → User → Organization` |
|
|
149
|
+
| `includeMarketplace: true`, **has** user customizations | `System → EffectiveExtensionConfigs → Application → User → Organization` |
|
|
150
|
+
|
|
151
|
+
### `subjects`
|
|
152
|
+
|
|
153
|
+
Each subject represents a configuration source that will be loaded and merged:
|
|
154
|
+
|
|
155
|
+
```json
|
|
156
|
+
{
|
|
157
|
+
"typeName": "DefaultConfiguration",
|
|
158
|
+
"target": 6,
|
|
159
|
+
"resource": "mongo-db-file:///configuration_registry?schemaId=configuration&target=4&isMarketplace=false&source=system",
|
|
160
|
+
"description": "System defaults from contribution registry (non-marketplace)"
|
|
161
|
+
}
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
**Key fields to check:**
|
|
165
|
+
|
|
166
|
+
- **`typeName`** — The type of configuration (`DefaultConfiguration`, `OrganizationConfiguration`, etc.)
|
|
167
|
+
- **`resource`** — The actual URI that will be used to read data. If `null`, that subject won't be loaded.
|
|
168
|
+
- **`description`** — Human-readable explanation of what this subject provides.
|
|
169
|
+
|
|
170
|
+
### `effectiveExtensions`
|
|
171
|
+
|
|
172
|
+
Only populated when `includeMarketplace: true`. This is the **core** data for debugging missing extensions:
|
|
173
|
+
|
|
174
|
+
```json
|
|
175
|
+
{
|
|
176
|
+
"effectiveExtensions": ["ext-a", "ext-b", "ext-c"],
|
|
177
|
+
"userDisabledPublicExtensions": ["ext-d"],
|
|
178
|
+
"hasUserCustomizations": true,
|
|
179
|
+
"installedExtensionSlugs": ["private-ext-1"],
|
|
180
|
+
"defaultPublicExtensions": { "ext-a": true, "ext-b": true, "ext-d": true, "ext-e": false },
|
|
181
|
+
"userExtensionOverrides": { "ext-d": false, "ext-e": true },
|
|
182
|
+
"finalExtensionsList": [
|
|
183
|
+
{ "name": "ext-a", "type": "PUBLIC", "source": "DEFAULT_ENABLED" },
|
|
184
|
+
{ "name": "ext-b", "type": "PUBLIC", "source": "DEFAULT_ENABLED" },
|
|
185
|
+
{ "name": "ext-e", "type": "PUBLIC", "source": "USER_ENABLED" },
|
|
186
|
+
{ "name": "private-ext-1", "type": "PRIVATE", "source": "INSTALLED" }
|
|
187
|
+
]
|
|
188
|
+
}
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
---
|
|
192
|
+
|
|
193
|
+
## Troubleshooting: Missing Extensions
|
|
194
|
+
|
|
195
|
+
### Step 1 — Run the query with `includeMarketplace: true`
|
|
196
|
+
|
|
197
|
+
If you forget this flag (or set it to `false`), `effectiveExtensions` will be `null` and no extension configuration subjects will appear. This is the **most common mistake**.
|
|
198
|
+
|
|
199
|
+
### Step 2 — Check `defaultPublicExtensions`
|
|
200
|
+
|
|
201
|
+
This shows **all** public extensions from `system_extension` and their default enabled state.
|
|
202
|
+
|
|
203
|
+
**Is your extension listed here?**
|
|
204
|
+
|
|
205
|
+
- ✅ **Yes, with value `true`** → Extension is default-enabled. Go to Step 3.
|
|
206
|
+
- ✅ **Yes, with value `false`** → Extension is default-disabled. It will only appear if the user explicitly enables it (see Step 4).
|
|
207
|
+
- ❌ **Not listed** → Extension is **not registered** in `system_extension`. The extension needs to be published and its `configuration` contribution registered in the `configuration_registry` collection.
|
|
208
|
+
|
|
209
|
+
**How to fix a missing extension in `defaultPublicExtensions`:**
|
|
210
|
+
|
|
211
|
+
1. Verify the extension is published to the marketplace.
|
|
212
|
+
2. Check the `configuration_registry` collection for an entry with `extensionName: "system_extension"` that includes an `extensions.<your-extension-slug>` property.
|
|
213
|
+
3. Ensure the property has `scope: 3` (ORGANIZATION) or higher.
|
|
214
|
+
|
|
215
|
+
### Step 3 — Check `userDisabledPublicExtensions`
|
|
216
|
+
|
|
217
|
+
If your extension is in this array, the user has **explicitly disabled** it at the organization level.
|
|
218
|
+
|
|
219
|
+
```json
|
|
220
|
+
"userDisabledPublicExtensions": ["my-extension"]
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
**How to verify:** Check the organization settings document (collection: typically `organizations` or the settings fragment) for:
|
|
224
|
+
|
|
225
|
+
```json
|
|
226
|
+
{ "extensions.my-extension": false }
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
**How to fix:** Remove or set the override to `true` in the org settings.
|
|
230
|
+
|
|
231
|
+
### Step 4 — Check `userExtensionOverrides`
|
|
232
|
+
|
|
233
|
+
This shows any overrides the user has set in their org settings:
|
|
234
|
+
|
|
235
|
+
```json
|
|
236
|
+
"userExtensionOverrides": {
|
|
237
|
+
"ext-d": false,
|
|
238
|
+
"ext-e": true
|
|
239
|
+
}
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
- `false` → User disabled this extension (it will be removed from effective list even if default-enabled).
|
|
243
|
+
- `true` → User enabled this extension (it will be added to effective list even if default-disabled).
|
|
244
|
+
|
|
245
|
+
### Step 5 — Check `installedExtensionSlugs`
|
|
246
|
+
|
|
247
|
+
These are **private/installed** extensions from the `installed_extensions` collection.
|
|
248
|
+
|
|
249
|
+
**Is your private extension listed here?**
|
|
250
|
+
|
|
251
|
+
- ✅ **Yes** → It should be in `effectiveExtensions`. If not, check that `settings.effectiveEnabled` is `true` in the installed extension document.
|
|
252
|
+
- ❌ **Not listed** → The extension is not installed for this org, OR `settings.effectiveEnabled` is `false`, OR the `orgId` couldn't be resolved.
|
|
253
|
+
|
|
254
|
+
**How to fix a missing installed extension:**
|
|
255
|
+
|
|
256
|
+
1. Check `installed_extensions` collection for a document with matching `orgId` and `sourceDocumentId`.
|
|
257
|
+
2. Verify `settings.effectiveEnabled: true`.
|
|
258
|
+
3. If your org slug isn't resolving, check the `slugService` — the `orgId` from the URI path is resolved via `slugService.resolveOrganizationSlug()`.
|
|
259
|
+
|
|
260
|
+
### Step 6 — Check `effectiveExtensions` (the final list)
|
|
261
|
+
|
|
262
|
+
This is the **final computed list** of extensions that will be loaded. It combines:
|
|
263
|
+
|
|
264
|
+
```
|
|
265
|
+
effectiveExtensions = (default-enabled public - user-disabled) + user-enabled + installed private
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
If your extension is **not** in `effectiveExtensions` but **is** in `defaultPublicExtensions` with `true`:
|
|
269
|
+
→ It was removed by a user override. Check `userDisabledPublicExtensions`.
|
|
270
|
+
|
|
271
|
+
If your extension is **not** in `effectiveExtensions` and **not** in `defaultPublicExtensions`:
|
|
272
|
+
→ It's neither registered as a public extension nor installed as a private one.
|
|
273
|
+
|
|
274
|
+
### Step 7 — Check `finalExtensionsList` for type/source details
|
|
275
|
+
|
|
276
|
+
This gives a comprehensive breakdown with categorization:
|
|
277
|
+
|
|
278
|
+
| `type` | `source` | Meaning |
|
|
279
|
+
| --------- | ----------------- | ------------------------------------------- |
|
|
280
|
+
| `PUBLIC` | `DEFAULT_ENABLED` | Public extension enabled by default |
|
|
281
|
+
| `PUBLIC` | `USER_ENABLED` | Public extension enabled by user override |
|
|
282
|
+
| `PRIVATE` | `INSTALLED` | Private extension from installed_extensions |
|
|
283
|
+
|
|
284
|
+
### Step 8 — Check extension configuration subjects
|
|
285
|
+
|
|
286
|
+
Look at the `subjects` array for extension-related entries. They use `typeName: "DefaultConfiguration"` but have different `resource` URIs:
|
|
287
|
+
|
|
288
|
+
| What to look for in `resource` URI | Subject type |
|
|
289
|
+
| ---------------------------------- | ------------------------------------------------------------ |
|
|
290
|
+
| `source=system` | System defaults (non-marketplace) |
|
|
291
|
+
| `source=public` | Public extension configurations |
|
|
292
|
+
| `source=installed` | Installed/private extension configurations |
|
|
293
|
+
| `source=effective` | Filtered effective extensions (when user has customizations) |
|
|
294
|
+
|
|
295
|
+
**Example — No user customizations (public + installed separately):**
|
|
296
|
+
|
|
297
|
+
```json
|
|
298
|
+
[
|
|
299
|
+
{
|
|
300
|
+
"typeName": "DefaultConfiguration",
|
|
301
|
+
"resource": "...&source=public&extensionNames=ext-a,ext-b",
|
|
302
|
+
"description": "Public extension configurations..."
|
|
303
|
+
},
|
|
304
|
+
{
|
|
305
|
+
"typeName": "DefaultConfiguration",
|
|
306
|
+
"resource": "...&source=installed&extensionNames=private-ext",
|
|
307
|
+
"description": "Installed (private) extension configurations..."
|
|
308
|
+
},
|
|
309
|
+
{ "typeName": "DefaultConfiguration", "resource": "...&source=system", "description": "System defaults..." }
|
|
310
|
+
]
|
|
311
|
+
```
|
|
312
|
+
|
|
313
|
+
**Example — User has customizations (effective only):**
|
|
314
|
+
|
|
315
|
+
```json
|
|
316
|
+
[
|
|
317
|
+
{
|
|
318
|
+
"typeName": "DefaultConfiguration",
|
|
319
|
+
"resource": "...&source=effective&extensionNames=ext-a,ext-b,private-ext",
|
|
320
|
+
"description": "Customized extension configurations..."
|
|
321
|
+
},
|
|
322
|
+
{ "typeName": "DefaultConfiguration", "resource": "...&source=system", "description": "System defaults..." }
|
|
323
|
+
]
|
|
324
|
+
```
|
|
325
|
+
|
|
326
|
+
If the `resource` for your extension subject is `null`, the URI generation failed — check server logs for errors.
|
|
327
|
+
|
|
328
|
+
---
|
|
329
|
+
|
|
330
|
+
## Troubleshooting: Missing or Wrong Settings
|
|
331
|
+
|
|
332
|
+
### Problem: Settings value not what I expect
|
|
333
|
+
|
|
334
|
+
1. Run `pageExplainPlan` and look at the `mergeOrder`.
|
|
335
|
+
2. Later entries **override** earlier ones. For example, if `OrganizationConfiguration` is last, org-level settings win.
|
|
336
|
+
3. Run `pageSettings` with the same variables to see the actual merged result.
|
|
337
|
+
4. Compare: the value in the final merged settings comes from the **last subject** in `mergeOrder` that defines that key.
|
|
338
|
+
|
|
339
|
+
### Problem: `subjects` has `null` resource for a configuration layer
|
|
340
|
+
|
|
341
|
+
This means the URI for that configuration layer could not be built. Common causes:
|
|
342
|
+
|
|
343
|
+
| Subject | Likely cause |
|
|
344
|
+
| ------------------------------------------------------ | ------------------------------------------------------------------------------------------------- |
|
|
345
|
+
| `UserConfiguration` resource is `null` | No `accountId` in the request context. The user might not be authenticated. |
|
|
346
|
+
| `ApplicationConfiguration` resource is `null` | The `slugService.convertToResourceUri` failed. Check if the tenant/application exists. |
|
|
347
|
+
| `OrganizationConfiguration` resource is `null` | The org slug in the URI path couldn't be resolved. Verify the path segment matches an actual org. |
|
|
348
|
+
| `OrganizationResourceConfiguration` resource is `null` | The resource type/id in the URI path couldn't be resolved. |
|
|
349
|
+
|
|
350
|
+
### Problem: `fragmentData` is wrong
|
|
351
|
+
|
|
352
|
+
If you see `fragmentData: "settings"` but expected `"policies"`, check:
|
|
353
|
+
|
|
354
|
+
- The `fragment` field in your `resourceUri` input.
|
|
355
|
+
- The fragment is the part after `#` in a URI. Set it explicitly: `"fragment": "settings"` or `"fragment": "policies"`.
|
|
356
|
+
|
|
357
|
+
---
|
|
358
|
+
|
|
359
|
+
## Common Pitfalls
|
|
360
|
+
|
|
361
|
+
### 1. Forgetting `includeMarketplace: true`
|
|
362
|
+
|
|
363
|
+
**Symptom:** `effectiveExtensions` is `null`, no extension subjects in the plan.
|
|
364
|
+
**Fix:** Set `"includeMarketplace": true` in options.
|
|
365
|
+
|
|
366
|
+
### 2. Wrong `target` value
|
|
367
|
+
|
|
368
|
+
**Symptom:** Fewer subjects than expected, or the `mergeOrder` is too short.
|
|
369
|
+
**Fix:** Use `target: 4` for org-level, `target: 5` for resource-level.
|
|
370
|
+
|
|
371
|
+
### 3. Org slug in URI path doesn't resolve
|
|
372
|
+
|
|
373
|
+
**Symptom:** `OrganizationConfiguration` subject has `null` resource; `effectiveExtensions` is empty or `null`.
|
|
374
|
+
**Fix:** Verify the URI path starts with `/<valid-org-slug>`. The slug must match an organization in the database.
|
|
375
|
+
|
|
376
|
+
### 4. Using `schemaId: "uilayout"` instead of `"configuration"`
|
|
377
|
+
|
|
378
|
+
**Symptom:** Extensions show up but their configuration settings don't appear in `pageSettings`.
|
|
379
|
+
**Fix:** Use `"schemaId": "configuration"` to get extension configuration settings.
|
|
380
|
+
|
|
381
|
+
### 5. Extension not in `system_extension`
|
|
382
|
+
|
|
383
|
+
**Symptom:** Extension doesn't appear in `defaultPublicExtensions`.
|
|
384
|
+
**Fix:** Ensure the extension registers its `extensions.<slug>` property in the `system_extension` configuration contribution with `scope: 3` (ORGANIZATION).
|
|
385
|
+
|
|
386
|
+
### 6. Installed extension has `effectiveEnabled: false`
|
|
387
|
+
|
|
388
|
+
**Symptom:** Extension doesn't appear in `installedExtensionSlugs`.
|
|
389
|
+
**Fix:** Update the `installed_extensions` document to set `settings.effectiveEnabled: true`.
|
|
390
|
+
|
|
391
|
+
---
|
|
392
|
+
|
|
393
|
+
## Reference: ConfigurationTarget Values
|
|
394
|
+
|
|
395
|
+
| Value | Name | Description |
|
|
396
|
+
| ----- | ----------------------- | --------------------------------------------- |
|
|
397
|
+
| `1` | `USER` | User-specific settings |
|
|
398
|
+
| `2` | `APPLICATION` | Tenant/application-level settings |
|
|
399
|
+
| `3` | `MACHINE` | Machine-specific settings |
|
|
400
|
+
| `4` | `ORGANIZATION` | Organization-level settings |
|
|
401
|
+
| `5` | `ORGANIZATION_RESOURCE` | Resource-level settings (project, team, etc.) |
|
|
402
|
+
| `6` | `DEFAULT` | System defaults |
|
|
403
|
+
| `7` | `MEMORY` | In-memory (transient) |
|
|
404
|
+
|
|
405
|
+
---
|
|
406
|
+
|
|
407
|
+
## Reference: Extension Resolution Flow
|
|
408
|
+
|
|
409
|
+
The `getEffectiveExtensions` method follows this sequence:
|
|
410
|
+
|
|
411
|
+
```
|
|
412
|
+
┌─────────────────────────────────────────────────────────┐
|
|
413
|
+
│ 1. Query installed_extensions collection │
|
|
414
|
+
│ Filter: orgId + settings.effectiveEnabled = true │
|
|
415
|
+
│ Result: installedExtensionSlugs[] │
|
|
416
|
+
├─────────────────────────────────────────────────────────┤
|
|
417
|
+
│ 2. Read organization settings document │
|
|
418
|
+
│ Look for: extensions.* keys (flat or nested) │
|
|
419
|
+
│ Result: userExtensionOverrides {} │
|
|
420
|
+
├─────────────────────────────────────────────────────────┤
|
|
421
|
+
│ 3. Load system_extension from configuration_registry │
|
|
422
|
+
│ Filter: extensions.* keys with scope >= ORGANIZATION│
|
|
423
|
+
│ Result: defaultPublicExtensions {} │
|
|
424
|
+
├─────────────────────────────────────────────────────────┤
|
|
425
|
+
│ 4. Calculate effective extensions │
|
|
426
|
+
│ │
|
|
427
|
+
│ effective = (default enabled public) │
|
|
428
|
+
│ - (user disabled) │
|
|
429
|
+
│ + (user enabled, was default-disabled) │
|
|
430
|
+
│ + (installed private extensions) │
|
|
431
|
+
│ │
|
|
432
|
+
│ Result: effectiveExtensions[] │
|
|
433
|
+
├─────────────────────────────────────────────────────────┤
|
|
434
|
+
│ 5. Build finalExtensionsList with type/source metadata │
|
|
435
|
+
│ PUBLIC/DEFAULT_ENABLED │
|
|
436
|
+
│ PUBLIC/USER_ENABLED │
|
|
437
|
+
│ PRIVATE/INSTALLED │
|
|
438
|
+
└─────────────────────────────────────────────────────────┘
|
|
439
|
+
```
|
|
440
|
+
|
|
441
|
+
---
|
|
442
|
+
|
|
443
|
+
## Advanced: Comparing with `pageSettings`
|
|
444
|
+
|
|
445
|
+
After using `pageExplainPlan` to understand the plan, run `pageSettings` with the **same variables** to see the actual merged result:
|
|
446
|
+
|
|
447
|
+
```graphql
|
|
448
|
+
query GetPageSettings($uri: URIInput!, $options: PageSettingsOptionsInput) {
|
|
449
|
+
pageSettings(uri: $uri, options: $options) {
|
|
450
|
+
target
|
|
451
|
+
settings
|
|
452
|
+
subjects {
|
|
453
|
+
__typename
|
|
454
|
+
resource
|
|
455
|
+
contents
|
|
456
|
+
keys
|
|
457
|
+
target
|
|
458
|
+
overrides {
|
|
459
|
+
identifiers
|
|
460
|
+
contents
|
|
461
|
+
}
|
|
462
|
+
}
|
|
463
|
+
explainPlan {
|
|
464
|
+
mergeOrder
|
|
465
|
+
targetName
|
|
466
|
+
effectiveExtensions {
|
|
467
|
+
effectiveExtensions
|
|
468
|
+
hasUserCustomizations
|
|
469
|
+
}
|
|
470
|
+
}
|
|
471
|
+
}
|
|
472
|
+
}
|
|
473
|
+
```
|
|
474
|
+
|
|
475
|
+
With variables:
|
|
476
|
+
|
|
477
|
+
```json
|
|
478
|
+
{
|
|
479
|
+
"uri": {
|
|
480
|
+
"scheme": "cdecode",
|
|
481
|
+
"authority": "default",
|
|
482
|
+
"path": "/<your-org-slug>",
|
|
483
|
+
"fragment": "settings"
|
|
484
|
+
},
|
|
485
|
+
"options": {
|
|
486
|
+
"schemaId": "configuration",
|
|
487
|
+
"includeMarketplace": true,
|
|
488
|
+
"target": 4
|
|
489
|
+
}
|
|
490
|
+
}
|
|
491
|
+
```
|
|
492
|
+
|
|
493
|
+
**Comparison checklist:**
|
|
494
|
+
|
|
495
|
+
1. `pageExplainPlan.mergeOrder` should match `pageSettings.explainPlan.mergeOrder`.
|
|
496
|
+
2. For each subject in `pageExplainPlan.subjects`, there should be a corresponding entry in `pageSettings.subjects`.
|
|
497
|
+
3. If a subject has `resource: null` in the plan, the corresponding `pageSettings` subject may be missing or have empty `contents`.
|
|
498
|
+
4. Check `pageSettings.subjects[].keys` — if your expected setting key isn't listed, the configuration for that extension didn't load.
|
|
499
|
+
|
|
500
|
+
---
|
|
501
|
+
|
|
502
|
+
## Example: Full Debugging Session
|
|
503
|
+
|
|
504
|
+
**Scenario:** Extension `my-org/workflow-ext` settings are not appearing.
|
|
505
|
+
|
|
506
|
+
**Step 1:** Run `pageExplainPlan`:
|
|
507
|
+
|
|
508
|
+
```json
|
|
509
|
+
{
|
|
510
|
+
"resourceUri": {
|
|
511
|
+
"scheme": "cdecode",
|
|
512
|
+
"authority": "default",
|
|
513
|
+
"path": "/my-org",
|
|
514
|
+
"fragment": "settings"
|
|
515
|
+
},
|
|
516
|
+
"options": {
|
|
517
|
+
"schemaId": "configuration",
|
|
518
|
+
"includeMarketplace": true,
|
|
519
|
+
"target": 4
|
|
520
|
+
}
|
|
521
|
+
}
|
|
522
|
+
```
|
|
523
|
+
|
|
524
|
+
**Step 2:** Check `effectiveExtensions.defaultPublicExtensions`:
|
|
525
|
+
|
|
526
|
+
```json
|
|
527
|
+
"defaultPublicExtensions": {
|
|
528
|
+
"my-org/workflow-ext": true,
|
|
529
|
+
"my-org/other-ext": true
|
|
530
|
+
}
|
|
531
|
+
```
|
|
532
|
+
|
|
533
|
+
✅ Extension is registered and default-enabled.
|
|
534
|
+
|
|
535
|
+
**Step 3:** Check `effectiveExtensions.userDisabledPublicExtensions`:
|
|
536
|
+
|
|
537
|
+
```json
|
|
538
|
+
"userDisabledPublicExtensions": ["my-org/workflow-ext"]
|
|
539
|
+
```
|
|
540
|
+
|
|
541
|
+
❌ **Found it!** The user/org has disabled this extension.
|
|
542
|
+
|
|
543
|
+
**Step 4:** Check `effectiveExtensions.userExtensionOverrides`:
|
|
544
|
+
|
|
545
|
+
```json
|
|
546
|
+
"userExtensionOverrides": {
|
|
547
|
+
"my-org/workflow-ext": false
|
|
548
|
+
}
|
|
549
|
+
```
|
|
550
|
+
|
|
551
|
+
Confirmed — someone set `extensions.my-org/workflow-ext: false` in the organization settings.
|
|
552
|
+
|
|
553
|
+
**Step 5:** Fix by updating the organization settings:
|
|
554
|
+
|
|
555
|
+
```json
|
|
556
|
+
{ "extensions.my-org/workflow-ext": true }
|
|
557
|
+
```
|
|
558
|
+
|
|
559
|
+
Or remove the override entirely so the default (`true`) takes effect.
|
|
560
|
+
|
|
561
|
+
**Step 6:** Re-run `pageExplainPlan` to confirm the extension now appears in `effectiveExtensions`.
|
|
562
|
+
|
|
563
|
+
---
|
|
564
|
+
|
|
565
|
+
## Reference: Schema IDs (`ContributionSchemaId`)
|
|
566
|
+
|
|
567
|
+
Every metadata schema attached to an extension has a `schemaId` that determines **what kind of contribution** it represents. The enum lives in `common` (`generated-models.ts`).
|
|
568
|
+
|
|
569
|
+
| Enum Key | Value | Purpose | Used For |
|
|
570
|
+
| ------------------ | -------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------- |
|
|
571
|
+
| `Configuration` | `'configuration'` | **Application settings / preferences.** Key-value settings that appear in the Settings editor. | App settings, user preferences, feature flags, integration config |
|
|
572
|
+
| `UiLayout` | `'uiLayout'` | **UI layout contributions.** Defines how pages/views are rendered — project dashboards, marketplace pages, AI providers, forms, workflows, etc. | Page templates, credential forms, dashboard layouts |
|
|
573
|
+
| `Policy` | `'policy'` | **Access control & governance rules.** Defines policies like RBAC, data governance, security, usage limits. | Access control, data governance, security policies, usage limits |
|
|
574
|
+
| `SubscriptionPlan` | `'subscriptionPlan'` | **Billing / subscription plan definitions.** Payment policies, feature entitlements, pricing tiers. | Subscription plans, payment policies, feature entitlements |
|
|
575
|
+
| `UserRole` | `'userRole'` | **User role definitions.** Defines roles and their permissions within the platform. | Role definitions for RBAC |
|
|
576
|
+
| `Permission` | `'permission'` | **Permission definitions.** Fine-grained permissions that can be assigned to roles. | Permission rules for access control |
|
|
577
|
+
| `Secrets` | `'secrets'` | **Secret / credential management.** Defines environment variables and secrets an extension needs. | API keys, tokens, connection strings |
|
|
578
|
+
| `Integration` | `'integration'` | **Integration configuration.** Used for third-party service integrations. | OAuth, webhooks, external service config |
|
|
579
|
+
| `Dummy` | `'dummy'` | **Test / placeholder schema.** Used in tests or as a no-op placeholder. | Testing only |
|
|
580
|
+
|
|
581
|
+
### Additional Schema IDs (not in the enum, used as string literals)
|
|
582
|
+
|
|
583
|
+
These are used in the form-builder but aren't part of the `ContributionSchemaId` enum:
|
|
584
|
+
|
|
585
|
+
| Value | Purpose |
|
|
586
|
+
| ---------------------- | --------------------------------------------------------------------------------------------- |
|
|
587
|
+
| `'stepper-form'` | Multi-step wizard forms (stepper UI). Used with `FormType.MULTI_FORM`. |
|
|
588
|
+
| `'form-page-builder'` | Drag-and-drop page builder forms. Used with `FormType.MULTI_FORM`. |
|
|
589
|
+
| `'commands'` | Command palette contributions (actions users can trigger). Used with `FormType.CONTRIBUTION`. |
|
|
590
|
+
| `'menus'` | Menu contributions (context menus, title bars, etc.). Used with `FormType.CONTRIBUTION`. |
|
|
591
|
+
| `'credentials'` | Credential form schemas (OAuth, API key, etc.). Used with `FormType.CONTRIBUTION`. |
|
|
592
|
+
| `'postgresql-builder'` | PostgreSQL database schema builder. Used with `FormType.DATABASE_BUILDER`. |
|
|
593
|
+
| `'mysql-builder'` | MySQL database schema builder. Used with `FormType.DATABASE_BUILDER`. |
|
|
594
|
+
| `'mongodb-builder'` | MongoDB/general database schema builder. Used with `FormType.DATABASE_BUILDER`. |
|
|
595
|
+
|
|
596
|
+
---
|
|
597
|
+
|
|
598
|
+
## Reference: Fragment Names (`ConfigFragmentName`)
|
|
599
|
+
|
|
600
|
+
The `fragment` in the `resourceUri` (and in configuration URIs) determines **which slice of the configuration document** to load. Defined in `common` (`generated-models.ts`).
|
|
601
|
+
|
|
602
|
+
| Enum Key | Value | Purpose |
|
|
603
|
+
| --------------------- | ----------------------- | ---------------------------------------------- |
|
|
604
|
+
| `Settings` | `'settings'` | General extension/app settings (most common) |
|
|
605
|
+
| `UiSettings` | `'uiSettings'` | UI-specific settings (layout, theme, display) |
|
|
606
|
+
| `Policies` | `'policies'` | Policy configuration data |
|
|
607
|
+
| `Permissions` | `'permissions'` | Permission configuration data |
|
|
608
|
+
| `Roles` | `'roles'` | Role definitions |
|
|
609
|
+
| `ContributionRoles` | `'contributionRoles'` | Roles defined by extension contributions |
|
|
610
|
+
| `Resources` | `'resources'` | Resource-level configuration |
|
|
611
|
+
| `ApplicationPolicies` | `'applicationPolicies'` | Application-level policy rules |
|
|
612
|
+
| `BillingPlanPolicies` | `'billingPlanPolicies'` | Billing/subscription plan policy rules |
|
|
613
|
+
| `OrgMembers` | `'orgMembers'` | Organization members document with role values |
|
|
614
|
+
| `PaymentPolicies` | `'paymentPolicies'` | Payment-specific policy rules |
|
|
615
|
+
| `SubscriptionPlan` | `'subscriptionPlan'` | Subscription plan data |
|
|
616
|
+
| `TeamMembers` | `'teamMembers'` | Team members document with role values |
|
|
617
|
+
|
|
618
|
+
### How `schemaId` and `fragment` relate
|
|
619
|
+
|
|
620
|
+
| Scenario | `schemaId` | `fragment` |
|
|
621
|
+
| -------------------------- | -------------------- | -------------------- |
|
|
622
|
+
| Extension app settings | `'configuration'` | `'settings'` |
|
|
623
|
+
| UI layout / page templates | `'uiLayout'` | `'uiSettings'` |
|
|
624
|
+
| Access control policies | `'policy'` | `'policies'` |
|
|
625
|
+
| Permission rules | `'permission'` | `'permissions'` |
|
|
626
|
+
| User roles | `'userRole'` | `'roles'` |
|
|
627
|
+
| Subscription/billing plans | `'subscriptionPlan'` | `'subscriptionPlan'` |
|
|
628
|
+
| Secrets/credentials | `'secrets'` | `'settings'` |
|
|
629
|
+
|
|
630
|
+
---
|
|
631
|
+
|
|
632
|
+
## Reference: Collection Names (`ConfigCollectionName`)
|
|
633
|
+
|
|
634
|
+
The collection name determines **which MongoDB collection** stores the configuration data. Defined in `common` (`generated-models.ts`).
|
|
635
|
+
|
|
636
|
+
| Enum Key | Value | Purpose |
|
|
637
|
+
| --------------------------- | ----------------------------- | ---------------------------------------------- |
|
|
638
|
+
| `Organizations` | `'organizations'` | Organization-level configuration (most common) |
|
|
639
|
+
| `Application` | `'application'` | Application/tenant-level configuration |
|
|
640
|
+
| `Applications` | `'applications'` | Multi-app configuration |
|
|
641
|
+
| `Projects` | `'projects'` | Project-level configuration |
|
|
642
|
+
| `Teams` | `'teams'` | Team-level configuration |
|
|
643
|
+
| `Accounts` | `'accounts'` | User account configuration |
|
|
644
|
+
| `Clients` | `'clients'` | Client/API-key configuration |
|
|
645
|
+
| `Workspaces` | `'workspaces'` | Workspace-level configuration |
|
|
646
|
+
| `Tasks` | `'tasks'` | Task-level configuration |
|
|
647
|
+
| `Tags` | `'tags'` | Tag/label configuration |
|
|
648
|
+
| `Machines` | `'machines'` | Machine-specific configuration |
|
|
649
|
+
| `IntegrationWorkflow` | `'integrationWorkflow'` | Integration workflow configuration |
|
|
650
|
+
| `Integrationconfigurations` | `'integrationconfigurations'` | Integration service configuration |
|
|
651
|
+
| `Post` | `'POST'` | Post/content configuration |
|
|
652
|
+
|
|
653
|
+
---
|
|
654
|
+
|
|
655
|
+
## Reference: Extension Names (`ConfigExtensionName`)
|
|
656
|
+
|
|
657
|
+
The extension name determines **which sub-document** within a configuration collection holds the data.
|
|
658
|
+
|
|
659
|
+
| Enum Key | Value | Purpose |
|
|
660
|
+
| ------------- | --------------- | ----------------------------- |
|
|
661
|
+
| `Settings` | `'settings'` | General settings sub-document |
|
|
662
|
+
| `Policies` | `'policies'` | Policy sub-document |
|
|
663
|
+
| `Permissions` | `'permissions'` | Permissions sub-document |
|
|
664
|
+
| `Userrole` | `'userrole'` | User role sub-document |
|
|
665
|
+
|
|
666
|
+
---
|
|
667
|
+
|
|
668
|
+
## Reference: URI Construction Pattern
|
|
669
|
+
|
|
670
|
+
A full configuration URI follows this pattern:
|
|
671
|
+
|
|
672
|
+
```
|
|
673
|
+
cdecode://<authority>/<org-slug>[/<resource-path>]#<fragmentName>
|
|
674
|
+
```
|
|
675
|
+
|
|
676
|
+
When the system resolves settings internally it builds a MongoDB query URI like:
|
|
677
|
+
|
|
678
|
+
```
|
|
679
|
+
mongo-db-file:///configuration_registry?schemaId=<schemaId>&target=<target>&isMarketplace=<bool>&source=<source>
|
|
680
|
+
```
|
|
681
|
+
|
|
682
|
+
### Example URIs by schema type
|
|
683
|
+
|
|
684
|
+
| Schema | URI Fragment | Options |
|
|
685
|
+
| ------------------ | ------------------- | --------------------------------------------- |
|
|
686
|
+
| App settings | `#settings` | `{ schemaId: 'configuration', target: 4 }` |
|
|
687
|
+
| UI layout | `#uiSettings` | `{ schemaId: 'uiLayout', target: 4 }` |
|
|
688
|
+
| Policies | `#policies` | `{ schemaId: 'policy', target: 4 }` |
|
|
689
|
+
| Permissions | `#permissions` | `{ schemaId: 'permission', target: 4 }` |
|
|
690
|
+
| Roles | `#roles` | `{ schemaId: 'userRole', target: 4 }` |
|
|
691
|
+
| Subscription plans | `#subscriptionPlan` | `{ schemaId: 'subscriptionPlan', target: 4 }` |
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cdmbase/wiki-browser",
|
|
3
|
-
"version": "12.0.18-alpha.
|
|
3
|
+
"version": "12.0.18-alpha.35",
|
|
4
4
|
"description": "Sample core for higher packages to depend on",
|
|
5
5
|
"license": "ISC",
|
|
6
6
|
"author": "CDMBase LLC",
|
|
@@ -65,7 +65,7 @@
|
|
|
65
65
|
}
|
|
66
66
|
]
|
|
67
67
|
},
|
|
68
|
-
"gitHead": "
|
|
68
|
+
"gitHead": "251e8b5529d82c2cefc13184761e35eb0e1cee2f",
|
|
69
69
|
"typescript": {
|
|
70
70
|
"definition": "lib/index.d.ts"
|
|
71
71
|
}
|