@dereekb/dbx-components-mcp 14.16.0 → 14.17.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.
@@ -114,7 +114,7 @@
114
114
  "selector": "[dbxFilterMapRouteParams]",
115
115
  "className": "DbxFilterMapRouteParamsDirective",
116
116
  "module": "@dereekb/dbx-core",
117
- "description": "Loads the filter of a keyed entry in an ancestor {@link FilterMap} from the current route params, so a link can open the page on a specific filter.\n\nThe params' filter becomes the key's default filter when the page loads, and a later change to the params (such as a link to\nthe same page with other params) sets the key's filter. When {@link DbxFilterMapRouteParamsConfig.paramsFromFilter} is set,\nevery change to the key is also written back to the URL, so reloading the page keeps the filter.\n\nThe params must be declared on the current route (for UIRouter, as query params of an ancestor state, ideally `dynamic: true`\nso writing them does not reload the state). Do not use it together with {@link DbxFilterMapStorageDirective} on the same key,\nsince both set the key's default filter.",
117
+ "description": "Loads the filter of a keyed entry in an ancestor {@link FilterMap} from the current route params, so a link can open the page on a specific filter.\n\nThe params' filter becomes the key's default filter when the page loads, and a later change to the params (such as a link to\nthe same page with other params) sets the key's filter. When {@link DbxFilterMapRouteParamsConfig.paramsFromFilter} is set,\nevery change to the key is also written back to the URL, so reloading the page keeps the filter.\n\nThe params must be declared on the current route (for UIRouter, as query params of an ancestor state, ideally `dynamic: true`\nso writing them does not reload the state). Do not use it together with {@link DbxFilterMapStorageDirective} on the same key,\nsince both set the key's default filter.\n\nA filter popover that edits the key should set `closeOnFilterChange: false` on its `DbxFilterComponentConfig`, which also keeps it\nopen across the route transition each change causes (`closeOnTransition`).",
118
118
  "inputs": [
119
119
  {
120
120
  "name": "dbxFilterMapRouteParams",
@@ -988,6 +988,45 @@
988
988
  "example": "<dbx-dialog-content>\n <h2>Confirm</h2>\n <p>Are you sure?</p>\n</dbx-dialog-content>",
989
989
  "minimalExample": "<div dbxDialogContent>Body</div>"
990
990
  },
991
+ {
992
+ "slug": "filter-popover-button",
993
+ "category": "overlay",
994
+ "kind": "component",
995
+ "selector": "dbx-filter-popover-button",
996
+ "className": "DbxFilterPopoverButtonComponent",
997
+ "module": "@dereekb/dbx-web",
998
+ "description": "Renders an icon button that opens a filter popover when clicked.\n\nThe popover closes when the filter changes unless `closeOnFilterChange` is false, and closes on a route transition unless\n`closeOnTransition` (which defaults to `closeOnFilterChange`) is false — so a popover editing a filter that is written to the\nURL stays open while it is edited. The popover always closes when this button is destroyed, such as when leaving the page.\nA `dbx-filter-wrapper` without its own Apply button applies its last change before the popover closes on its close button\nor a click outside.",
999
+ "inputs": [
1000
+ {
1001
+ "name": "disabled",
1002
+ "type": "Maybe<boolean>",
1003
+ "description": "",
1004
+ "required": false
1005
+ },
1006
+ {
1007
+ "name": "buttonDisplayStyle",
1008
+ "type": "Maybe<DbxButtonDisplayStylePair>",
1009
+ "description": "",
1010
+ "required": false
1011
+ },
1012
+ {
1013
+ "name": "config",
1014
+ "type": "Maybe<DbxFilterComponentConfig<F, any, any, any>>",
1015
+ "description": "",
1016
+ "required": false,
1017
+ "default": "undefined"
1018
+ }
1019
+ ],
1020
+ "outputs": [],
1021
+ "relatedSlugs": [
1022
+ "popover"
1023
+ ],
1024
+ "skillRefs": [
1025
+ "dbx__ref__dbx-component-patterns"
1026
+ ],
1027
+ "example": "<dbx-filter-popover-button [config]=\"filterConfig\" [buttonDisplayStyle]=\"{ display: { icon: 'filter_alt' } }\"></dbx-filter-popover-button>",
1028
+ "minimalExample": "<dbx-filter-popover-button [config]=\"filterConfig\"></dbx-filter-popover-button>"
1029
+ },
991
1030
  {
992
1031
  "slug": "popover",
993
1032
  "category": "overlay",
@@ -1047,6 +1047,122 @@
1047
1047
  }
1048
1048
  ]
1049
1049
  },
1050
+ {
1051
+ "slug": "notification-task-bots-due-for-repair-query",
1052
+ "name": "notificationTaskBotsDueForRepairQuery",
1053
+ "module": "@dereekb/firebase",
1054
+ "subpath": "model/notification/notification.query",
1055
+ "signature": "notificationTaskBotsDueForRepairQuery(before: Date): FirestoreQueryConstraint[]",
1056
+ "description": "Query constraints for finding {@link NotificationTaskBot} documents whose soonest live run (`nat`) is at or before the given time.\n\nUsed by the repair sweep to find bots with an overdue run, whose run task may have gone missing.",
1057
+ "model": "NotificationTaskBot",
1058
+ "collection": "ntb",
1059
+ "isNested": false,
1060
+ "scope": "COLLECTION",
1061
+ "manual": false,
1062
+ "skip": false,
1063
+ "category": "sweep",
1064
+ "params": [
1065
+ {
1066
+ "name": "before",
1067
+ "type": "Date",
1068
+ "description": "- Bots with a `nat` at or before this time are returned.",
1069
+ "optional": false
1070
+ }
1071
+ ],
1072
+ "returns": "Array of Firestore query constraints filtering for overdue bots.",
1073
+ "tags": [
1074
+ "sweep",
1075
+ "notificationtaskbot",
1076
+ "notification",
1077
+ "task",
1078
+ "bots",
1079
+ "due",
1080
+ "for",
1081
+ "repair",
1082
+ "query",
1083
+ "notificationtaskbotsdueforrepairquery",
1084
+ "bot",
1085
+ "constraints",
1086
+ "finding",
1087
+ "link",
1088
+ "documents",
1089
+ "whose",
1090
+ "soonest",
1091
+ "live",
1092
+ "run"
1093
+ ],
1094
+ "constraintSequences": [
1095
+ {
1096
+ "pathLabel": "all",
1097
+ "entries": [
1098
+ {
1099
+ "kind": "where",
1100
+ "fieldPath": "nat",
1101
+ "operator": "<="
1102
+ }
1103
+ ]
1104
+ }
1105
+ ],
1106
+ "derivedComposites": [],
1107
+ "derivedFieldOverrides": []
1108
+ },
1109
+ {
1110
+ "slug": "notification-task-bots-stalled-query",
1111
+ "name": "notificationTaskBotsStalledQuery",
1112
+ "module": "@dereekb/firebase",
1113
+ "subpath": "model/notification/notification.query",
1114
+ "signature": "notificationTaskBotsStalledQuery(stalledBefore?: Date): FirestoreQueryConstraint[]",
1115
+ "description": "Query constraints for finding {@link NotificationTaskBot} documents with a stalled entry: their `stl` (the earliest\nentry `stl`) is at or before the given time.\n\nThe repair sweep marks a live run stalled when its task keeps failing or nothing picks it up. Pass an earlier time to\nfind the bots that have been stalled at least that long. Use it for an admin list (`NotificationTaskBotCollectionStore`)\nor an alerting cron. Firestore's automatic single-field index covers it.",
1116
+ "model": "NotificationTaskBot",
1117
+ "collection": "ntb",
1118
+ "isNested": false,
1119
+ "scope": "COLLECTION",
1120
+ "manual": false,
1121
+ "skip": false,
1122
+ "category": "lookup",
1123
+ "params": [
1124
+ {
1125
+ "name": "stalledBefore",
1126
+ "type": "Date",
1127
+ "description": "- Bots whose earliest stalled entry was marked at or before this time are returned. Defaults to now.",
1128
+ "optional": true
1129
+ }
1130
+ ],
1131
+ "returns": "Array of Firestore query constraints filtering for stalled bots.",
1132
+ "tags": [
1133
+ "lookup",
1134
+ "notificationtaskbot",
1135
+ "notification",
1136
+ "task",
1137
+ "bots",
1138
+ "stalled",
1139
+ "query",
1140
+ "notificationtaskbotsstalledquery",
1141
+ "bot",
1142
+ "constraints",
1143
+ "finding",
1144
+ "link",
1145
+ "documents",
1146
+ "entry",
1147
+ "their",
1148
+ "stl",
1149
+ "earliest"
1150
+ ],
1151
+ "constraintSequences": [
1152
+ {
1153
+ "pathLabel": "all",
1154
+ "entries": [
1155
+ {
1156
+ "kind": "where",
1157
+ "fieldPath": "stl",
1158
+ "operator": "<="
1159
+ }
1160
+ ]
1161
+ }
1162
+ ],
1163
+ "derivedComposites": [],
1164
+ "derivedFieldOverrides": []
1165
+ },
1050
1166
  {
1051
1167
  "slug": "oidc-entries-with-type-query",
1052
1168
  "name": "oidcEntriesWithTypeQuery",
@@ -312,6 +312,52 @@
312
312
  ],
313
313
  "notes": "Key of a {@link NotificationTemplateTypeInfoGroup}. Template types whose groups share a key are shown together."
314
314
  },
315
+ {
316
+ "name": "NotificationTaskBotEntryId",
317
+ "package": "@dereekb/firebase",
318
+ "module": "src/lib/model/notification/notification.id",
319
+ "kind": "semantic-type",
320
+ "definition": "string",
321
+ "baseType": "string",
322
+ "topics": [
323
+ "string",
324
+ "dereekb-firebase:notification"
325
+ ],
326
+ "guards": [
327
+ "isNotificationTaskBotEntryId"
328
+ ],
329
+ "notes": "Identifier of a {@link NotificationTaskBotEmbeddedScriptEntry}, unique within its bot.\n\nMust match {@link NOTIFICATION_TASK_BOT_ENTRY_ID_REGEX}."
330
+ },
331
+ {
332
+ "name": "NotificationTaskBotScriptGroupKey",
333
+ "package": "@dereekb/firebase",
334
+ "module": "src/lib/model/notification/notification.id",
335
+ "kind": "semantic-type",
336
+ "definition": "string",
337
+ "baseType": "string",
338
+ "topics": [
339
+ "identifier",
340
+ "string",
341
+ "dereekb-firebase:notification"
342
+ ],
343
+ "guards": [
344
+ "isNotificationTaskBotScriptGroupKey"
345
+ ],
346
+ "notes": "Key of a NotificationTaskBotScriptGroup, the topic a script belongs to (e.g. \"Email reminders\").\n\nThe bot's owner opts out of a whole group at once rather than individual entries.\n\nMust match {@link NOTIFICATION_TASK_BOT_SCRIPT_GROUP_KEY_REGEX}."
347
+ },
348
+ {
349
+ "name": "NotificationTaskBotRunNumber",
350
+ "package": "@dereekb/firebase",
351
+ "module": "src/lib/model/notification/notification.id",
352
+ "kind": "semantic-type",
353
+ "definition": "number",
354
+ "baseType": "number",
355
+ "topics": [
356
+ "numeric",
357
+ "dereekb-firebase:notification"
358
+ ],
359
+ "notes": "Run number of a single NotificationTaskBot run. Taken from the bot's monotonic run counter, so it never repeats within a bot."
360
+ },
315
361
  {
316
362
  "name": "NotificationTemplateType",
317
363
  "package": "@dereekb/firebase",
@@ -381,6 +427,32 @@
381
427
  ],
382
428
  "notes": "Discriminator string that routes the subtask to the correct processing configuration."
383
429
  },
430
+ {
431
+ "name": "NotificationTaskBotScriptType",
432
+ "package": "@dereekb/firebase",
433
+ "module": "src/lib/model/notification/notification.taskbot",
434
+ "kind": "semantic-type",
435
+ "definition": "string",
436
+ "baseType": "string",
437
+ "topics": [
438
+ "string",
439
+ "dereekb-firebase:notification"
440
+ ],
441
+ "notes": "Type of a NotificationTaskBot script, registered by the app. Selects the server-side processor that runs an entry."
442
+ },
443
+ {
444
+ "name": "NotificationTaskBotPauseReason",
445
+ "package": "@dereekb/firebase",
446
+ "module": "src/lib/model/notification/notification.taskbot",
447
+ "kind": "semantic-type",
448
+ "definition": "string",
449
+ "baseType": "string",
450
+ "topics": [
451
+ "string",
452
+ "dereekb-firebase:notification"
453
+ ],
454
+ "notes": "Reason an entry was paused. The library defines {@link NOTIFICATION_TASK_BOT_PAUSE_REASON_MANUAL} and\n{@link NOTIFICATION_TASK_BOT_PAUSE_REASON_FAILED}; scripts may add their own (e.g. `'no_progress'`)."
455
+ },
384
456
  {
385
457
  "name": "NotificationTaskCheckpointString",
386
458
  "package": "@dereekb/firebase",
@@ -263,6 +263,74 @@
263
263
  "firebase-auth-oob-code-data-pair-delimiter"
264
264
  ]
265
265
  },
266
+ {
267
+ "slug": "form-space-submission-notification-task-key",
268
+ "name": "formSpaceSubmissionNotificationTaskKey",
269
+ "kind": "function",
270
+ "category": "firestore",
271
+ "module": "@dereekb/firebase",
272
+ "subpath": "model/formspace/formspace.task",
273
+ "signature": "formSpaceSubmissionNotificationTaskKey(input: FormSpaceSubmissionNotificationTaskUniqueIdInput): NotificationTaskKey",
274
+ "description": "Returns the full key of the NotificationTask processing one SUBMISSION ATTEMPT of a FormSpace.\n\nThe task lives in the framework task box because {@link formSpaceSubmissionNotificationTaskTemplate} sets no notification model, and {@link uniqueNotificationTaskKey} applies the same default.",
275
+ "params": [
276
+ {
277
+ "name": "input",
278
+ "type": "FormSpaceSubmissionNotificationTaskUniqueIdInput",
279
+ "description": "- The FormSpace id and the attempt's reopen count.",
280
+ "optional": false
281
+ }
282
+ ],
283
+ "returns": "The unique notification task's full key.",
284
+ "tags": [
285
+ "formspace",
286
+ "notification",
287
+ "task",
288
+ "submission",
289
+ "attempt",
290
+ "key",
291
+ "firestore",
292
+ "form",
293
+ "space",
294
+ "formspacesubmissionnotificationtaskkey"
295
+ ],
296
+ "example": "formSpaceSubmissionNotificationTaskKey({ formSpaceId: 'abc' }); // 'nb/not_not/nbn/abc_FSPS'\nformSpaceSubmissionNotificationTaskKey({ formSpaceId: 'abc', reopenCount: 2 }); // 'nb/not_not/nbn/abc_FSPS_r2'",
297
+ "relatedSlugs": [
298
+ "unique-notification-task-key"
299
+ ]
300
+ },
301
+ {
302
+ "slug": "unique-notification-task-key",
303
+ "name": "uniqueNotificationTaskKey",
304
+ "kind": "function",
305
+ "category": "firestore",
306
+ "module": "@dereekb/firebase",
307
+ "subpath": "model/notification/notification.create",
308
+ "signature": "uniqueNotificationTaskKey(input: UniqueNotificationTaskKeyInput): NotificationTaskKey",
309
+ "description": "Returns the key of a unique notification task: the notification with the unique id in the notification model's box.\n\nThis is the location {@link createNotificationDocumentPair} loads a unique task from when its accessor comes from `context`, so a key recorded with this function always points at the created task.",
310
+ "params": [
311
+ {
312
+ "name": "input",
313
+ "type": "UniqueNotificationTaskKeyInput",
314
+ "description": "- The notification model and the unique task id.",
315
+ "optional": false
316
+ }
317
+ ],
318
+ "returns": "The full key of the unique notification task.",
319
+ "tags": [
320
+ "notification",
321
+ "task",
322
+ "unique",
323
+ "key",
324
+ "notification-box",
325
+ "location",
326
+ "firestore",
327
+ "uniquenotificationtaskkey"
328
+ ],
329
+ "example": "uniqueNotificationTaskKey({ notificationModel: 'profile/abc', uniqueId: 'abc_T' }); // 'nb/profile_abc/nbn/abc_T'\nuniqueNotificationTaskKey({ uniqueId: 'abc_T' }); // 'nb/not_not/nbn/abc_T'",
330
+ "relatedSlugs": [
331
+ "form-space-submission-notification-task-key"
332
+ ]
333
+ },
266
334
  {
267
335
  "slug": "is-nth-hour-of-day",
268
336
  "name": "isNthHourOfDay",
@@ -1186,6 +1254,50 @@
1186
1254
  "load-documents-for-document-references"
1187
1255
  ]
1188
1256
  },
1257
+ {
1258
+ "slug": "load-document-for-id-or-key",
1259
+ "name": "loadDocumentForIdOrKey",
1260
+ "kind": "function",
1261
+ "category": "firestore",
1262
+ "module": "@dereekb/firebase",
1263
+ "subpath": "common/firestore/accessor/document.utility",
1264
+ "signature": "loadDocumentForIdOrKey(accessor: FirestoreDocumentAccessor<T, D>, idOrKey: FirestoreModelId | FirestoreModelKey): D",
1265
+ "description": "Loads the {@link FirestoreDocument} a document id or a full key refers to.\n\nA value containing `/` is a full key, loaded with `accessor.loadDocumentForKey()`, which refuses a key of another\ncollection. Anything else is a document id, loaded relative to the accessor's collection with `accessor.loadDocumentForId()`.\nResolving an id through the accessor, rather than prefixing a collection name onto it, keeps a subcollection's parent and\na test driver's fuzzed collection names intact. No network calls are made.",
1266
+ "params": [
1267
+ {
1268
+ "name": "accessor",
1269
+ "type": "FirestoreDocumentAccessor<T, D>",
1270
+ "description": "- Accessor to load the document with (must have collection context to resolve an id).",
1271
+ "optional": false
1272
+ },
1273
+ {
1274
+ "name": "idOrKey",
1275
+ "type": "FirestoreModelId | FirestoreModelKey",
1276
+ "description": "- A document id (`abc123`) or a full key (`gb/abc123`).",
1277
+ "optional": false
1278
+ }
1279
+ ],
1280
+ "returns": "The document instance.",
1281
+ "tags": [
1282
+ "firestore",
1283
+ "document",
1284
+ "loader",
1285
+ "accessor",
1286
+ "id",
1287
+ "key",
1288
+ "path",
1289
+ "either",
1290
+ "promote",
1291
+ "load",
1292
+ "for",
1293
+ "or",
1294
+ "loaddocumentforidorkey"
1295
+ ],
1296
+ "relatedSlugs": [
1297
+ "load-documents-for-ids",
1298
+ "load-documents-for-keys"
1299
+ ]
1300
+ },
1189
1301
  {
1190
1302
  "slug": "firestore-document-loader",
1191
1303
  "name": "firestoreDocumentLoader",
@@ -5,6 +5,47 @@
5
5
  "generatedAt": "1970-01-01T00:00:00.000Z",
6
6
  "generator": "@dereekb/dbx-components-mcp/scripts/generate-manifests.mjs",
7
7
  "entries": [
8
+ {
9
+ "slug": "merge-clearable-object-update",
10
+ "name": "mergeClearableObjectUpdate",
11
+ "kind": "function",
12
+ "category": "object",
13
+ "module": "@dereekb/model",
14
+ "subpath": "type/type",
15
+ "signature": "mergeClearableObjectUpdate(current: Maybe<Partial<T>>, update: Maybe<ClearableObjectUpdate<T>>): Partial<T>",
16
+ "description": "Merges a {@link ClearableObjectUpdate} into the current object and returns the result as a new object.\n\nA `null` value in the update deletes the key, and an `undefined` value leaves the current value unchanged.\n`null` and `undefined` values already on the current object are dropped too, so the result only holds set values.",
17
+ "params": [
18
+ {
19
+ "name": "current",
20
+ "type": "Maybe<Partial<T>>",
21
+ "description": "- The current object. Null/undefined is treated as an empty object.",
22
+ "optional": false
23
+ },
24
+ {
25
+ "name": "update",
26
+ "type": "Maybe<ClearableObjectUpdate<T>>",
27
+ "description": "- The update to merge in. Null/undefined returns a copy of the current values.",
28
+ "optional": false
29
+ }
30
+ ],
31
+ "returns": "A new object with the update applied. Neither input is modified.",
32
+ "tags": [
33
+ "object",
34
+ "merge",
35
+ "update",
36
+ "patch",
37
+ "clear",
38
+ "clearable",
39
+ "null",
40
+ "delete",
41
+ "mergeclearableobjectupdate"
42
+ ],
43
+ "example": "mergeClearableObjectUpdate({ a: 1, b: 2 }, { b: null, c: 3, d: undefined });\n// { a: 1, c: 3 }",
44
+ "relatedSlugs": [
45
+ "merge-objects",
46
+ "strip-object"
47
+ ]
48
+ },
8
49
  {
9
50
  "slug": "iso8601-day-string-type",
10
51
  "name": "iso8601DayStringType",
@@ -1528,6 +1528,55 @@
1528
1528
  "random-number-factory"
1529
1529
  ]
1530
1530
  },
1531
+ {
1532
+ "slug": "array-to-object",
1533
+ "name": "arrayToObject",
1534
+ "kind": "function",
1535
+ "category": "array",
1536
+ "module": "@dereekb/util",
1537
+ "subpath": "array/array.map",
1538
+ "signature": "arrayToObject(values: T[], keyFnOrConfig: ReadKeyFunction<T, K> | ArrayToObjectConfig<T, K, V>, valueFn?: (t: T) => V): Record<K, V>",
1539
+ "description": "Maps the values of the input array to a Record object, keyed by the result of a key function.\nItems with undefined keys are omitted. Optionally transforms each value using a value function.\n\nAlso accepts an {@link ArrayToObjectConfig} as the second argument, which can throw when two values share a key instead of letting the last value win.",
1540
+ "params": [
1541
+ {
1542
+ "name": "values",
1543
+ "type": "T[]",
1544
+ "description": "- source array of items to map",
1545
+ "optional": false
1546
+ },
1547
+ {
1548
+ "name": "keyFnOrConfig",
1549
+ "type": "ReadKeyFunction<T, K> | ArrayToObjectConfig<T, K, V>",
1550
+ "description": "",
1551
+ "optional": false
1552
+ },
1553
+ {
1554
+ "name": "valueFn",
1555
+ "type": "(t: T) => V",
1556
+ "description": "- optional function to transform each item into the desired record value",
1557
+ "optional": true
1558
+ }
1559
+ ],
1560
+ "returns": "a Record of keys to values derived from the input array",
1561
+ "tags": [
1562
+ "array",
1563
+ "object",
1564
+ "record",
1565
+ "index",
1566
+ "key",
1567
+ "lookup",
1568
+ "duplicate",
1569
+ "unique",
1570
+ "registry",
1571
+ "to",
1572
+ "arraytoobject"
1573
+ ],
1574
+ "example": "const byId = arrayToObject([{ id: 'a' }, { id: 'b' }], (x) => x.id);\n// { a: { id: 'a' }, b: { id: 'b' } }\n\nconst registry = arrayToObject(configs, {\n readKey: (x) => x.type,\n throwOnDuplicateKey: (type) => new Error(`duplicate type in registry: ${type}`)\n});",
1575
+ "relatedSlugs": [
1576
+ "is-unique-keyed-function",
1577
+ "key-value-map-factory"
1578
+ ]
1579
+ },
1531
1580
  {
1532
1581
  "slug": "random-pick-factory",
1533
1582
  "name": "randomPickFactory",
@@ -10089,6 +10138,40 @@
10089
10138
  "handler-factory"
10090
10139
  ]
10091
10140
  },
10141
+ {
10142
+ "slug": "typed-config-registry",
10143
+ "name": "typedConfigRegistry",
10144
+ "kind": "factory",
10145
+ "category": "service",
10146
+ "module": "@dereekb/util",
10147
+ "subpath": "service/typed.service",
10148
+ "signature": "typedConfigRegistry(config: TypedConfigRegistrySetupConfig<C, T>): TypedConfigRegistry<C, T>",
10149
+ "description": "Creates a {@link TypedConfigRegistry} over a record of configs.\n\nLookups read the passed record with an own-property check, so a type such as `constructor` never resolves to an `Object.prototype` member. The known types and configs are captured when the registry is created and returned as copies.",
10150
+ "params": [
10151
+ {
10152
+ "name": "config",
10153
+ "type": "TypedConfigRegistrySetupConfig<C, T>",
10154
+ "description": "- The configs and the fallback for unregistered types.",
10155
+ "optional": false
10156
+ }
10157
+ ],
10158
+ "returns": "A registry whose members can be re-exposed under domain-specific names.",
10159
+ "tags": [
10160
+ "service",
10161
+ "registry",
10162
+ "config",
10163
+ "type",
10164
+ "lookup",
10165
+ "fallback",
10166
+ "default",
10167
+ "typed",
10168
+ "typedconfigregistry"
10169
+ ],
10170
+ "example": "const registry = typedConfigRegistry({\n configs: { a: { type: 'a', label: 'A' } },\n defaultConfigForType: (type) => ({ type, label: 'Unknown' })\n});\n\nregistry.configForType('a'); // { type: 'a', label: 'A' }\nregistry.configForType('b'); // { type: 'b', label: 'Unknown' }\nregistry.registeredConfigForType('b'); // undefined",
10171
+ "relatedSlugs": [
10172
+ "array-to-object"
10173
+ ]
10174
+ },
10092
10175
  {
10093
10176
  "slug": "is-in-set-decision-function",
10094
10177
  "name": "isInSetDecisionFunction",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dereekb/dbx-components-mcp",
3
- "version": "14.16.0",
3
+ "version": "14.17.0",
4
4
  "sideEffects": false,
5
5
  "type": "module",
6
6
  "bin": {
@@ -12,7 +12,7 @@
12
12
  "ts-morph": "^21.0.0"
13
13
  },
14
14
  "peerDependencies": {
15
- "@dereekb/dbx-cli": "14.16.0",
16
- "@dereekb/util": "14.16.0"
15
+ "@dereekb/dbx-cli": "14.17.0",
16
+ "@dereekb/util": "14.17.0"
17
17
  }
18
18
  }