@dereekb/dbx-cli 13.42.0 → 14.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/eslint/index.esm.js +2 -2
  2. package/eslint/package.json +7 -7
  3. package/firebase-api-manifest/main.js +22 -4
  4. package/firebase-api-manifest/package.json +5 -5
  5. package/firestore-query-manifest/main.js +9 -7
  6. package/firestore-query-manifest/package.json +4 -4
  7. package/generate-firestore-indexes/main.js +3 -3
  8. package/generate-firestore-indexes/package.json +3 -3
  9. package/generate-mcp-manifest/package.json +4 -4
  10. package/generate-route-manifest/main.js +1 -1
  11. package/generate-route-manifest/package.json +3 -3
  12. package/index.esm.js +2835 -2002
  13. package/lint-cache/package.json +3 -3
  14. package/manifest-extract/index.esm.js +6 -12
  15. package/manifest-extract/package.json +9 -10
  16. package/model-test/index.esm.js +61 -63
  17. package/model-test/package.json +3 -3
  18. package/package.json +14 -14
  19. package/route/package.json +7 -7
  20. package/src/lib/doctor/build-drift.check.d.ts +21 -0
  21. package/src/lib/doctor/doctor.command.factory.d.ts +21 -2
  22. package/src/lib/doctor/firestore-session.check.d.ts +7 -1
  23. package/src/lib/doctor/index.d.ts +1 -0
  24. package/src/lib/firestore/firestore.sdk-identity.d.ts +193 -0
  25. package/src/lib/firestore/index.d.ts +1 -0
  26. package/src/lib/manifest/types.d.ts +21 -0
  27. package/src/lib/mcp-scan/manifest/css-utilities-schema.d.ts +2 -2
  28. package/src/lib/mcp-scan/manifest/dbx-docs-ui-examples-schema.d.ts +2 -2
  29. package/src/lib/mcp-scan/manifest/ui-components-schema.d.ts +2 -2
  30. package/src/lib/mcp-scan/scan/dbx-docs-ui-examples-extract.d.ts +1 -1
  31. package/src/lib/mcp-scan/scan/ui-components-extract.d.ts +1 -1
  32. package/src/lib/runner/build-stamp.d.ts +138 -0
  33. package/src/lib/runner/index.d.ts +1 -0
  34. package/src/lib/runner/run.d.ts +13 -0
  35. package/test/index.esm.js +19 -22
  36. package/test/package.json +11 -11
  37. package/validate/index.js +1069 -76
  38. package/validate/package.json +4 -4
@@ -1,14 +1,14 @@
1
1
  {
2
2
  "name": "@dereekb/dbx-cli-lint-cache",
3
- "version": "13.42.0",
3
+ "version": "14.0.0",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "devDependencies": {
7
7
  "@types/yargs": "^17.0.35",
8
- "eslint": "10.4.0"
8
+ "eslint": "10.9.1"
9
9
  },
10
10
  "peerDependencies": {
11
- "@dereekb/util": "13.42.0",
11
+ "@dereekb/util": "14.0.0",
12
12
  "yargs": "^18.0.0"
13
13
  }
14
14
  }
@@ -9,9 +9,7 @@ function _define_property$1(obj, key, value) {
9
9
  configurable: true,
10
10
  writable: true
11
11
  });
12
- } else {
13
- obj[key] = value;
14
- }
12
+ } else obj[key] = value;
15
13
  return obj;
16
14
  }
17
15
  function _object_spread$1(target) {
@@ -39,9 +37,8 @@ function ownKeys$1(object, enumerableOnly) {
39
37
  }
40
38
  function _object_spread_props$1(target, source) {
41
39
  source = source != null ? source : {};
42
- if (Object.getOwnPropertyDescriptors) {
43
- Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
44
- } else {
40
+ if (Object.getOwnPropertyDescriptors) Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
41
+ else {
45
42
  ownKeys$1(Object(source)).forEach(function(key) {
46
43
  Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
47
44
  });
@@ -652,9 +649,7 @@ function _define_property(obj, key, value) {
652
649
  configurable: true,
653
650
  writable: true
654
651
  });
655
- } else {
656
- obj[key] = value;
657
- }
652
+ } else obj[key] = value;
658
653
  return obj;
659
654
  }
660
655
  function _object_spread(target) {
@@ -682,9 +677,8 @@ function ownKeys(object, enumerableOnly) {
682
677
  }
683
678
  function _object_spread_props(target, source) {
684
679
  source = source != null ? source : {};
685
- if (Object.getOwnPropertyDescriptors) {
686
- Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
687
- } else {
680
+ if (Object.getOwnPropertyDescriptors) Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
681
+ else {
688
682
  ownKeys(Object(source)).forEach(function(key) {
689
683
  Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
690
684
  });
@@ -1,18 +1,17 @@
1
1
  {
2
2
  "name": "@dereekb/dbx-cli/manifest-extract",
3
- "version": "13.42.0",
3
+ "version": "14.0.0",
4
4
  "type": "module",
5
5
  "sideEffects": false,
6
6
  "peerDependencies": {
7
- "@dereekb/date": "13.15.0",
8
- "@dereekb/dbx-cli": "13.42.0",
9
- "@dereekb/firebase": "13.15.0",
10
- "@dereekb/model": "13.15.0",
11
- "@dereekb/nestjs": "13.15.0",
12
- "@dereekb/rxjs": "13.15.0",
13
- "@dereekb/util": "13.15.0",
14
- "@dereekb/util-fetch": "13.15.0",
15
- "ts-morph": "^21.0.0"
7
+ "@dereekb/date": "14.0.0",
8
+ "@dereekb/dbx-cli": "14.0.0",
9
+ "@dereekb/firebase": "14.0.0",
10
+ "@dereekb/model": "14.0.0",
11
+ "@dereekb/nestjs": "14.0.0",
12
+ "@dereekb/rxjs": "14.0.0",
13
+ "@dereekb/util": "14.0.0",
14
+ "ts-morph": "^28.0.0"
16
15
  },
17
16
  "exports": {
18
17
  "./package.json": "./package.json",
@@ -11,11 +11,8 @@ function asyncGeneratorStep$3(gen, resolve, reject, _next, _throw, key, arg) {
11
11
  reject(error);
12
12
  return;
13
13
  }
14
- if (info.done) {
15
- resolve(value);
16
- } else {
17
- Promise.resolve(value).then(_next, _throw);
18
- }
14
+ if (info.done) resolve(value);
15
+ else Promise.resolve(value).then(_next, _throw);
19
16
  }
20
17
  function _async_to_generator$3(fn) {
21
18
  return function() {
@@ -2353,11 +2350,8 @@ function asyncGeneratorStep$2(gen, resolve, reject, _next, _throw, key, arg) {
2353
2350
  reject(error);
2354
2351
  return;
2355
2352
  }
2356
- if (info.done) {
2357
- resolve(value);
2358
- } else {
2359
- Promise.resolve(value).then(_next, _throw);
2360
- }
2353
+ if (info.done) resolve(value);
2354
+ else Promise.resolve(value).then(_next, _throw);
2361
2355
  }
2362
2356
  function _async_to_generator$2(fn) {
2363
2357
  return function() {
@@ -2517,11 +2511,8 @@ function asyncGeneratorStep$1(gen, resolve, reject, _next, _throw, key, arg) {
2517
2511
  reject(error);
2518
2512
  return;
2519
2513
  }
2520
- if (info.done) {
2521
- resolve(value);
2522
- } else {
2523
- Promise.resolve(value).then(_next, _throw);
2524
- }
2514
+ if (info.done) resolve(value);
2515
+ else Promise.resolve(value).then(_next, _throw);
2525
2516
  }
2526
2517
  function _async_to_generator$1(fn) {
2527
2518
  return function() {
@@ -2722,7 +2713,9 @@ function _array_without_holes$4(arr) {
2722
2713
  if (Array.isArray(arr)) return _array_like_to_array$4(arr);
2723
2714
  }
2724
2715
  function _iterable_to_array$4(iter) {
2725
- if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
2716
+ if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) {
2717
+ return Array.from(iter);
2718
+ }
2726
2719
  }
2727
2720
  function _iterable_to_array_limit$2(arr, i) {
2728
2721
  var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"];
@@ -2749,10 +2742,10 @@ function _iterable_to_array_limit$2(arr, i) {
2749
2742
  return _arr;
2750
2743
  }
2751
2744
  function _non_iterable_rest$2() {
2752
- throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
2745
+ throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
2753
2746
  }
2754
2747
  function _non_iterable_spread$4() {
2755
- throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
2748
+ throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
2756
2749
  }
2757
2750
  function _sliced_to_array$2(arr, i) {
2758
2751
  return _array_with_holes$2(arr) || _iterable_to_array_limit$2(arr, i) || _unsupported_iterable_to_array$4(arr, i) || _non_iterable_rest$2();
@@ -2979,11 +2972,8 @@ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
2979
2972
  reject(error);
2980
2973
  return;
2981
2974
  }
2982
- if (info.done) {
2983
- resolve(value);
2984
- } else {
2985
- Promise.resolve(value).then(_next, _throw);
2986
- }
2975
+ if (info.done) resolve(value);
2976
+ else Promise.resolve(value).then(_next, _throw);
2987
2977
  }
2988
2978
  function _async_to_generator(fn) {
2989
2979
  return function() {
@@ -3001,22 +2991,16 @@ function _async_to_generator(fn) {
3001
2991
  };
3002
2992
  }
3003
2993
  function _iterable_to_array$3(iter) {
3004
- if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
2994
+ if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) {
2995
+ return Array.from(iter);
2996
+ }
3005
2997
  }
3006
2998
  function _non_iterable_spread$3() {
3007
- throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
2999
+ throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
3008
3000
  }
3009
3001
  function _to_consumable_array$3(arr) {
3010
3002
  return _array_without_holes$3(arr) || _iterable_to_array$3(arr) || _unsupported_iterable_to_array$3(arr) || _non_iterable_spread$3();
3011
3003
  }
3012
- function _unsupported_iterable_to_array$3(o, minLen) {
3013
- if (!o) return;
3014
- if (typeof o === "string") return _array_like_to_array$3(o, minLen);
3015
- var n = Object.prototype.toString.call(o).slice(8, -1);
3016
- if (n === "Object" && o.constructor) n = o.constructor.name;
3017
- if (n === "Map" || n === "Set") return Array.from(n);
3018
- if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array$3(o, minLen);
3019
- }
3020
3004
  function _ts_generator(thisArg, body) {
3021
3005
  var f, y, t, _ = {
3022
3006
  label: 0,
@@ -3118,18 +3102,32 @@ function _ts_generator(thisArg, body) {
3118
3102
  }
3119
3103
  function _ts_values(o) {
3120
3104
  var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
3121
- if (m) return m.call(o);
3122
- if (o && typeof o.length === "number") return {
3123
- next: function() {
3124
- if (o && i >= o.length) o = void 0;
3125
- return {
3126
- value: o && o[i++],
3127
- done: !o
3128
- };
3129
- }
3130
- };
3105
+ if (m) {
3106
+ return m.call(o);
3107
+ }
3108
+ if (o && typeof o.length === "number") {
3109
+ return {
3110
+ next: function() {
3111
+ if (o && i >= o.length) {
3112
+ o = void 0;
3113
+ }
3114
+ return {
3115
+ value: o && o[i++],
3116
+ done: !o
3117
+ };
3118
+ }
3119
+ };
3120
+ }
3131
3121
  throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
3132
3122
  }
3123
+ function _unsupported_iterable_to_array$3(o, minLen) {
3124
+ if (!o) return;
3125
+ if (typeof o === "string") return _array_like_to_array$3(o, minLen);
3126
+ var n = Object.prototype.toString.call(o).slice(8, -1);
3127
+ if (n === "Object" && o.constructor) n = o.constructor.name;
3128
+ if (n === "Map" || n === "Set") return Array.from(n);
3129
+ if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array$3(o, minLen);
3130
+ }
3133
3131
  /**
3134
3132
  * Finds the existing spec hotspots that reference a model's fixture (or its
3135
3133
  * parents), or the default files to create when there are none.
@@ -3615,13 +3613,13 @@ function _define_property$1(obj, key, value) {
3615
3613
  configurable: true,
3616
3614
  writable: true
3617
3615
  });
3618
- } else {
3619
- obj[key] = value;
3620
- }
3616
+ } else obj[key] = value;
3621
3617
  return obj;
3622
3618
  }
3623
3619
  function _iterable_to_array$2(iter) {
3624
- if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
3620
+ if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) {
3621
+ return Array.from(iter);
3622
+ }
3625
3623
  }
3626
3624
  function _iterable_to_array_limit$1(arr, i) {
3627
3625
  var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"];
@@ -3648,10 +3646,10 @@ function _iterable_to_array_limit$1(arr, i) {
3648
3646
  return _arr;
3649
3647
  }
3650
3648
  function _non_iterable_rest$1() {
3651
- throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
3649
+ throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
3652
3650
  }
3653
3651
  function _non_iterable_spread$2() {
3654
- throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
3652
+ throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
3655
3653
  }
3656
3654
  function _object_spread$1(target) {
3657
3655
  for(var i = 1; i < arguments.length; i++){
@@ -3678,9 +3676,8 @@ function ownKeys$1(object, enumerableOnly) {
3678
3676
  }
3679
3677
  function _object_spread_props$1(target, source) {
3680
3678
  source = source != null ? source : {};
3681
- if (Object.getOwnPropertyDescriptors) {
3682
- Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
3683
- } else {
3679
+ if (Object.getOwnPropertyDescriptors) Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
3680
+ else {
3684
3681
  ownKeys$1(Object(source)).forEach(function(key) {
3685
3682
  Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
3686
3683
  });
@@ -4027,13 +4024,13 @@ function _define_property(obj, key, value) {
4027
4024
  configurable: true,
4028
4025
  writable: true
4029
4026
  });
4030
- } else {
4031
- obj[key] = value;
4032
- }
4027
+ } else obj[key] = value;
4033
4028
  return obj;
4034
4029
  }
4035
4030
  function _iterable_to_array$1(iter) {
4036
- if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
4031
+ if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) {
4032
+ return Array.from(iter);
4033
+ }
4037
4034
  }
4038
4035
  function _iterable_to_array_limit(arr, i) {
4039
4036
  var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"];
@@ -4060,10 +4057,10 @@ function _iterable_to_array_limit(arr, i) {
4060
4057
  return _arr;
4061
4058
  }
4062
4059
  function _non_iterable_rest() {
4063
- throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
4060
+ throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
4064
4061
  }
4065
4062
  function _non_iterable_spread$1() {
4066
- throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
4063
+ throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
4067
4064
  }
4068
4065
  function _object_spread(target) {
4069
4066
  for(var i = 1; i < arguments.length; i++){
@@ -4090,9 +4087,8 @@ function ownKeys(object, enumerableOnly) {
4090
4087
  }
4091
4088
  function _object_spread_props(target, source) {
4092
4089
  source = source != null ? source : {};
4093
- if (Object.getOwnPropertyDescriptors) {
4094
- Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
4095
- } else {
4090
+ if (Object.getOwnPropertyDescriptors) Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
4091
+ else {
4096
4092
  ownKeys(Object(source)).forEach(function(key) {
4097
4093
  Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
4098
4094
  });
@@ -5440,10 +5436,12 @@ function _array_without_holes(arr) {
5440
5436
  if (Array.isArray(arr)) return _array_like_to_array(arr);
5441
5437
  }
5442
5438
  function _iterable_to_array(iter) {
5443
- if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
5439
+ if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) {
5440
+ return Array.from(iter);
5441
+ }
5444
5442
  }
5445
5443
  function _non_iterable_spread() {
5446
- throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
5444
+ throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
5447
5445
  }
5448
5446
  function _to_consumable_array(arr) {
5449
5447
  return _array_without_holes(arr) || _iterable_to_array(arr) || _unsupported_iterable_to_array(arr) || _non_iterable_spread();
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "name": "@dereekb/dbx-cli/model-test",
3
- "version": "13.42.0",
3
+ "version": "14.0.0",
4
4
  "type": "module",
5
5
  "sideEffects": false,
6
6
  "peerDependencies": {
7
- "@dereekb/util": "13.42.0",
8
- "ts-morph": "^21.0.0"
7
+ "@dereekb/util": "14.0.0",
8
+ "ts-morph": "^28.0.0"
9
9
  },
10
10
  "exports": {
11
11
  "./package.json": "./package.json",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dereekb/dbx-cli",
3
- "version": "13.42.0",
3
+ "version": "14.0.0",
4
4
  "type": "module",
5
5
  "sideEffects": false,
6
6
  "bin": {
@@ -66,24 +66,24 @@
66
66
  }
67
67
  },
68
68
  "peerDependencies": {
69
- "@dereekb/date": "13.42.0",
70
- "@dereekb/firebase": "13.42.0",
71
- "@dereekb/model": "13.42.0",
72
- "@dereekb/nestjs": "13.42.0",
73
- "@dereekb/util": "13.42.0",
74
- "@nestjs/common": "^11.1.19",
69
+ "@dereekb/date": "14.0.0",
70
+ "@dereekb/firebase": "14.0.0",
71
+ "@dereekb/model": "14.0.0",
72
+ "@dereekb/nestjs": "14.0.0",
73
+ "@dereekb/util": "14.0.0",
74
+ "@nestjs/common": "^12.0.1",
75
75
  "arktype": "^2.2.0",
76
- "firebase": "^12.12.1",
77
- "jiti": "2.6.1",
78
- "prettier": "3.8.3",
79
- "ts-morph": "^21.0.0",
80
- "vitest": "4.1.5",
76
+ "firebase": "^12.18.0",
77
+ "jiti": "2.7.0",
78
+ "prettier": "3.9.6",
79
+ "ts-morph": "^28.0.0",
80
+ "vitest": "4.1.11",
81
81
  "yargs": "^18.0.0"
82
82
  },
83
83
  "devDependencies": {
84
- "@angular/core": "21.2.11",
84
+ "@angular/core": "22.1.4",
85
85
  "@types/yargs": "^17.0.35",
86
- "eslint": "10.4.0"
86
+ "eslint": "10.9.1"
87
87
  },
88
88
  "module": "./index.esm.js",
89
89
  "main": "./index.esm.js",
@@ -1,15 +1,15 @@
1
1
  {
2
2
  "name": "@dereekb/dbx-cli/route",
3
- "version": "13.42.0",
3
+ "version": "14.0.0",
4
4
  "type": "module",
5
5
  "sideEffects": false,
6
6
  "peerDependencies": {
7
- "@dereekb/date": "13.42.0",
8
- "@dereekb/dbx-cli": "13.42.0",
9
- "@dereekb/firebase": "13.42.0",
10
- "@dereekb/model": "13.42.0",
11
- "@dereekb/nestjs": "13.42.0",
12
- "@dereekb/util": "13.42.0"
7
+ "@dereekb/date": "14.0.0",
8
+ "@dereekb/dbx-cli": "14.0.0",
9
+ "@dereekb/firebase": "14.0.0",
10
+ "@dereekb/model": "14.0.0",
11
+ "@dereekb/nestjs": "14.0.0",
12
+ "@dereekb/util": "14.0.0"
13
13
  },
14
14
  "exports": {
15
15
  "./package.json": "./package.json",
@@ -0,0 +1,21 @@
1
+ import { type InspectCliBuildDriftInput } from '../runner/build-stamp';
2
+ import { type DoctorCheck } from './doctor.command.factory';
3
+ /**
4
+ * Name reported by the check {@link createCliBuildDriftDoctorCheck} builds.
5
+ */
6
+ export declare const BUILD_DRIFT_DOCTOR_CHECK_NAME = "cli-build-not-stale";
7
+ /**
8
+ * Builds the doctor check that compares the running artifact against the `@dereekb/*` tree resolved
9
+ * at run time.
10
+ *
11
+ * Runs FIRST in the default check list, ahead of every network hop, because a stale artifact
12
+ * invalidates the answers those hops give: they exercise the framework that is loaded now, not the
13
+ * one the bundle was compiled against, so a green `token-refresh-round-trip` next to a red read is
14
+ * exactly the misleading report this check exists to pre-empt.
15
+ *
16
+ * @param input - Optional overrides forwarded to {@link inspectCliBuildDrift}; apps normally pass only
17
+ * `manifestGeneratorVersion`.
18
+ * @returns The {@link DoctorCheck}.
19
+ * @__NO_SIDE_EFFECTS__
20
+ */
21
+ export declare function createCliBuildDriftDoctorCheck(input?: InspectCliBuildDriftInput): DoctorCheck;
@@ -16,11 +16,24 @@ export interface DoctorCheckResult {
16
16
  }
17
17
  export type DoctorCheck = (input: DoctorCheckInput) => Promise<DoctorCheckResult>;
18
18
  /**
19
- * Built-in checks: config file present, active env resolved, OIDC discovery, token refresh, API reachability.
19
+ * Input for {@link defaultDoctorChecks}.
20
+ */
21
+ export interface DefaultDoctorChecksInput {
22
+ /**
23
+ * The `@dereekb/dbx-cli` version that emitted the app's generated manifests
24
+ * (`<NAMESPACE>_STAMP.generatorVersion`). Forwarded to the build-drift check so a manifest produced
25
+ * by a different generator than the one running it is flagged.
26
+ */
27
+ readonly manifestGeneratorVersion?: Maybe<string>;
28
+ }
29
+ /**
30
+ * Built-in checks: build not stale, config file present, active env resolved, OIDC discovery, token
31
+ * refresh, API reachability.
20
32
  *
33
+ * @param input - Optional configuration for the built-in checks.
21
34
  * @returns The default {@link DoctorCheck} list, in execution order.
22
35
  */
23
- export declare function defaultDoctorChecks(): DoctorCheck[];
36
+ export declare function defaultDoctorChecks(input?: DefaultDoctorChecksInput): DoctorCheck[];
24
37
  export interface CreateDoctorCommandInput {
25
38
  readonly cliName: string;
26
39
  /**
@@ -32,6 +45,11 @@ export interface CreateDoctorCommandInput {
32
45
  * doctor can run against an env that only stores overrides on top of a registered default.
33
46
  */
34
47
  readonly defaultEnvs?: readonly CliEnvDefault[];
48
+ /**
49
+ * The generator version stamped into the app's generated manifests, forwarded to the built-in
50
+ * build-drift check.
51
+ */
52
+ readonly manifestGeneratorVersion?: Maybe<string>;
35
53
  }
36
54
  /**
37
55
  * Composable doctor command.
@@ -43,6 +61,7 @@ export interface CreateDoctorCommandInput {
43
61
  * @param input.cliName - The CLI's binary name.
44
62
  * @param input.checks - Additional checks to append after the default check list.
45
63
  * @param input.defaultEnvs - Built-in env presets merged underneath the user's stored env when names match.
64
+ * @param input.manifestGeneratorVersion - The generator version stamped into the app's generated manifests.
46
65
  * @returns A yargs `CommandModule` exposing the `doctor` command.
47
66
  * @__NO_SIDE_EFFECTS__
48
67
  */
@@ -120,7 +120,13 @@ export declare function buildFirestoreSessionDoctorReadRouting(input: {
120
120
  * 3. `GET /session/firestore` is reachable and mints a custom token (+ an App Check token when the
121
121
  * API is configured with a web `appId`);
122
122
  * 4. `signInWithCustomToken` succeeds against the configured project;
123
- * 5. the app-supplied {@link FirestoreSessionDoctorProbe} performs one rules-protected read.
123
+ * 5. the session's Firestore handle is one the loaded client SDK accepts (`inspectCliFirestoreSdkIdentity`),
124
+ * reported as `stage: 'firestore-sdk-identity'`. Sits between the sign-in and the read because it
125
+ * is the hop whose failure otherwise MASQUERADES as the read's: the handshake returns a uid, and
126
+ * the read then dies on the SDK's `Expected first argument to collection() to be …` — a message
127
+ * that names neither the model nor the handle, and sends the operator to rules and App Check
128
+ * instead of to a duplicated SDK or a stale artifact;
129
+ * 6. the app-supplied {@link FirestoreSessionDoctorProbe} performs one rules-protected read.
124
130
  *
125
131
  * Doctor checks run PRE-AUTH — `DoctorCheckInput` is only `{ cliName, envName, env, config }`, with no
126
132
  * token and no `CliContext` — so this loads credentials itself via `buildCliPaths` +
@@ -1,2 +1,3 @@
1
+ export * from './build-drift.check';
1
2
  export * from './doctor.command.factory';
2
3
  export * from './firestore-session.check';