@buoy-gg/env 7.0.41 → 7.0.43
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/README.md +11 -87
- package/lib/commonjs/env/components/EnvStatsOverview.js +1 -159
- package/lib/commonjs/env/components/EnvVarRow.js +1 -189
- package/lib/commonjs/env/components/EnvVarSection.js +1 -84
- package/lib/commonjs/env/components/EnvVarsModal.js +1 -322
- package/lib/commonjs/env/hooks/useDynamicEnv.js +1 -92
- package/lib/commonjs/env/types/index.js +1 -27
- package/lib/commonjs/env/types/types.js +1 -1
- package/lib/commonjs/env/types/userTypes.js +1 -1
- package/lib/commonjs/env/utils/envTypeDetector.js +1 -59
- package/lib/commonjs/env/utils/helpers.js +1 -119
- package/lib/commonjs/env/utils/index.js +1 -38
- package/lib/commonjs/env/utils/remoteEnv.js +1 -24
- package/lib/commonjs/env/utils/utils.js +1 -121
- package/lib/commonjs/index.js +1 -77
- package/lib/commonjs/preset.js +1 -81
- package/lib/commonjs/sync/envSyncAdapter.js +1 -51
- package/lib/module/env/components/EnvStatsOverview.js +1 -155
- package/lib/module/env/components/EnvVarRow.js +1 -185
- package/lib/module/env/components/EnvVarSection.js +1 -80
- package/lib/module/env/components/EnvVarsModal.js +1 -317
- package/lib/module/env/hooks/useDynamicEnv.js +1 -88
- package/lib/module/env/types/index.js +1 -4
- package/lib/module/env/types/types.js +1 -1
- package/lib/module/env/types/userTypes.js +1 -1
- package/lib/module/env/utils/envTypeDetector.js +1 -55
- package/lib/module/env/utils/helpers.js +1 -114
- package/lib/module/env/utils/index.js +1 -5
- package/lib/module/env/utils/remoteEnv.js +1 -19
- package/lib/module/env/utils/utils.js +1 -116
- package/lib/module/index.js +1 -21
- package/lib/module/preset.js +1 -78
- package/lib/module/sync/envSyncAdapter.js +1 -46
- package/lib/web/index.mjs +1 -2
- package/package.json +4 -7
- package/lib/typescript/env/components/EnvStatsOverview.d.ts.map +0 -1
- package/lib/typescript/env/components/EnvVarRow.d.ts.map +0 -1
- package/lib/typescript/env/components/EnvVarSection.d.ts.map +0 -1
- package/lib/typescript/env/components/EnvVarsModal.d.ts.map +0 -1
- package/lib/typescript/env/hooks/useDynamicEnv.d.ts.map +0 -1
- package/lib/typescript/env/types/index.d.ts.map +0 -1
- package/lib/typescript/env/types/types.d.ts.map +0 -1
- package/lib/typescript/env/types/userTypes.d.ts.map +0 -1
- package/lib/typescript/env/utils/envTypeDetector.d.ts.map +0 -1
- package/lib/typescript/env/utils/helpers.d.ts.map +0 -1
- package/lib/typescript/env/utils/index.d.ts.map +0 -1
- package/lib/typescript/env/utils/remoteEnv.d.ts.map +0 -1
- package/lib/typescript/env/utils/utils.d.ts.map +0 -1
- package/lib/typescript/index.d.ts.map +0 -1
- package/lib/typescript/preset.d.ts.map +0 -1
- package/lib/typescript/sync/envSyncAdapter.d.ts.map +0 -1
|
@@ -1,38 +1 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
var _envTypeDetector = require("./envTypeDetector");
|
|
7
|
-
Object.keys(_envTypeDetector).forEach(function (key) {
|
|
8
|
-
if (key === "default" || key === "__esModule") return;
|
|
9
|
-
if (key in exports && exports[key] === _envTypeDetector[key]) return;
|
|
10
|
-
Object.defineProperty(exports, key, {
|
|
11
|
-
enumerable: true,
|
|
12
|
-
get: function () {
|
|
13
|
-
return _envTypeDetector[key];
|
|
14
|
-
}
|
|
15
|
-
});
|
|
16
|
-
});
|
|
17
|
-
var _helpers = require("./helpers");
|
|
18
|
-
Object.keys(_helpers).forEach(function (key) {
|
|
19
|
-
if (key === "default" || key === "__esModule") return;
|
|
20
|
-
if (key in exports && exports[key] === _helpers[key]) return;
|
|
21
|
-
Object.defineProperty(exports, key, {
|
|
22
|
-
enumerable: true,
|
|
23
|
-
get: function () {
|
|
24
|
-
return _helpers[key];
|
|
25
|
-
}
|
|
26
|
-
});
|
|
27
|
-
});
|
|
28
|
-
var _utils = require("./utils");
|
|
29
|
-
Object.keys(_utils).forEach(function (key) {
|
|
30
|
-
if (key === "default" || key === "__esModule") return;
|
|
31
|
-
if (key in exports && exports[key] === _utils[key]) return;
|
|
32
|
-
Object.defineProperty(exports, key, {
|
|
33
|
-
enumerable: true,
|
|
34
|
-
get: function () {
|
|
35
|
-
return _utils[key];
|
|
36
|
-
}
|
|
37
|
-
});
|
|
38
|
-
});
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:true});var _envTypeDetector=require("./envTypeDetector");Object.keys(_envTypeDetector).forEach(function(e){if(e==="default"||e==="__esModule")return;if(e in exports&&exports[e]===_envTypeDetector[e])return;Object.defineProperty(exports,e,{enumerable:true,get:function(){return _envTypeDetector[e]}})});var _helpers=require("./helpers");Object.keys(_helpers).forEach(function(e){if(e==="default"||e==="__esModule")return;if(e in exports&&exports[e]===_helpers[e])return;Object.defineProperty(exports,e,{enumerable:true,get:function(){return _helpers[e]}})});var _utils=require("./utils");Object.keys(_utils).forEach(function(e){if(e==="default"||e==="__esModule")return;if(e in exports&&exports[e]===_utils[e])return;Object.defineProperty(exports,e,{enumerable:true,get:function(){return _utils[e]}})});
|
|
@@ -1,24 +1 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.getRemoteEnv = getRemoteEnv;
|
|
7
|
-
exports.setRemoteEnv = setRemoteEnv;
|
|
8
|
-
/**
|
|
9
|
-
* Remote env override for remote mirror mode (desktop dashboard).
|
|
10
|
-
*
|
|
11
|
-
* The dashboard has no meaningful process.env of its own — the env values it
|
|
12
|
-
* shows come from the synced device. When set, useDynamicEnv reads from this
|
|
13
|
-
* map instead of process.env.
|
|
14
|
-
*/
|
|
15
|
-
|
|
16
|
-
let remoteEnv = null;
|
|
17
|
-
|
|
18
|
-
/** Override the env source. Pass null to restore process.env. */
|
|
19
|
-
function setRemoteEnv(env) {
|
|
20
|
-
remoteEnv = env;
|
|
21
|
-
}
|
|
22
|
-
function getRemoteEnv() {
|
|
23
|
-
return remoteEnv;
|
|
24
|
-
}
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.getRemoteEnv=getRemoteEnv;exports.setRemoteEnv=setRemoteEnv;let remoteEnv=null;function setRemoteEnv(e){remoteEnv=e}function getRemoteEnv(){return remoteEnv}
|
|
@@ -1,121 +1 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.processEnvVars = exports.calculateStats = void 0;
|
|
7
|
-
var _envTypeDetector = require("./envTypeDetector");
|
|
8
|
-
/**
|
|
9
|
-
* Combines the auto-detected runtime environment values with the declared `requiredEnvVars`
|
|
10
|
-
* configuration and produces categorized metadata for rendering in the UI.
|
|
11
|
-
*
|
|
12
|
-
* @param autoCollectedEnvVars - Values discovered via `useDynamicEnv` (key/value string map).
|
|
13
|
-
* @param requiredEnvVars - Optional list of required variables describing expectations to validate.
|
|
14
|
-
* @returns Required and optional variable collections annotated with validation status.
|
|
15
|
-
*/
|
|
16
|
-
const processEnvVars = (autoCollectedEnvVars, requiredEnvVars) => {
|
|
17
|
-
const requiredVarInfos = [];
|
|
18
|
-
const optionalVarInfos = [];
|
|
19
|
-
const processedKeys = new Set();
|
|
20
|
-
|
|
21
|
-
// Process required variables
|
|
22
|
-
requiredEnvVars?.forEach(envVar => {
|
|
23
|
-
const key = typeof envVar === "string" ? envVar : envVar.key;
|
|
24
|
-
const expectedValue = typeof envVar === "object" && "expectedValue" in envVar ? envVar.expectedValue : undefined;
|
|
25
|
-
const expectedType = typeof envVar === "object" && "expectedType" in envVar ? envVar.expectedType : undefined;
|
|
26
|
-
const description = typeof envVar === "object" && "description" in envVar ? envVar.description : undefined;
|
|
27
|
-
processedKeys.add(key);
|
|
28
|
-
const actualValue = autoCollectedEnvVars[key];
|
|
29
|
-
const isPresent = actualValue !== undefined;
|
|
30
|
-
let status;
|
|
31
|
-
if (!isPresent) {
|
|
32
|
-
status = "required_missing";
|
|
33
|
-
} else if (expectedValue) {
|
|
34
|
-
// Handle different expectedValue patterns
|
|
35
|
-
let valueMatches = false;
|
|
36
|
-
if (expectedValue === "sk_*") {
|
|
37
|
-
valueMatches = actualValue.startsWith("sk_");
|
|
38
|
-
} else if (expectedValue === "production or development") {
|
|
39
|
-
valueMatches = actualValue === "production" || actualValue === "development";
|
|
40
|
-
} else {
|
|
41
|
-
valueMatches = actualValue === expectedValue;
|
|
42
|
-
}
|
|
43
|
-
status = valueMatches ? "required_present" : "required_wrong_value";
|
|
44
|
-
} else if (expectedType && (0, _envTypeDetector.getEnvVarType)(actualValue).toLowerCase() !== expectedType.toLowerCase()) {
|
|
45
|
-
status = "required_wrong_type";
|
|
46
|
-
} else {
|
|
47
|
-
status = "required_present";
|
|
48
|
-
}
|
|
49
|
-
requiredVarInfos.push({
|
|
50
|
-
key,
|
|
51
|
-
value: actualValue,
|
|
52
|
-
expectedValue,
|
|
53
|
-
expectedType,
|
|
54
|
-
description,
|
|
55
|
-
status,
|
|
56
|
-
category: "required"
|
|
57
|
-
});
|
|
58
|
-
});
|
|
59
|
-
|
|
60
|
-
// Process optional variables (those that exist but aren't required)
|
|
61
|
-
Object.entries(autoCollectedEnvVars).forEach(([key, value]) => {
|
|
62
|
-
if (!processedKeys.has(key)) {
|
|
63
|
-
optionalVarInfos.push({
|
|
64
|
-
key,
|
|
65
|
-
value,
|
|
66
|
-
status: "optional_present",
|
|
67
|
-
category: "optional"
|
|
68
|
-
});
|
|
69
|
-
}
|
|
70
|
-
});
|
|
71
|
-
|
|
72
|
-
// Sort each category
|
|
73
|
-
requiredVarInfos.sort((a, b) => {
|
|
74
|
-
const statusOrder = {
|
|
75
|
-
required_missing: 0,
|
|
76
|
-
required_wrong_value: 1,
|
|
77
|
-
required_wrong_type: 2,
|
|
78
|
-
required_present: 3,
|
|
79
|
-
optional_present: 4
|
|
80
|
-
};
|
|
81
|
-
if (statusOrder[a.status] !== statusOrder[b.status]) {
|
|
82
|
-
return statusOrder[a.status] - statusOrder[b.status];
|
|
83
|
-
}
|
|
84
|
-
return a.key.localeCompare(b.key);
|
|
85
|
-
});
|
|
86
|
-
optionalVarInfos.sort((a, b) => a.key.localeCompare(b.key));
|
|
87
|
-
return {
|
|
88
|
-
requiredVars: requiredVarInfos,
|
|
89
|
-
optionalVars: optionalVarInfos
|
|
90
|
-
};
|
|
91
|
-
};
|
|
92
|
-
|
|
93
|
-
/**
|
|
94
|
-
* Derives aggregate statistics from the processed environment variable lists for health badges
|
|
95
|
-
* and summary chips in the modal UI.
|
|
96
|
-
*
|
|
97
|
-
* @param requiredVars - Processed required variables with validation state.
|
|
98
|
-
* @param optionalVars - Processed optional variables discovered at runtime.
|
|
99
|
-
* @param totalEnvVars - Raw key/value map of every detected environment variable.
|
|
100
|
-
* @returns Counts related to overall env health for display purposes.
|
|
101
|
-
*/
|
|
102
|
-
exports.processEnvVars = processEnvVars;
|
|
103
|
-
const calculateStats = (requiredVars, optionalVars, totalEnvVars) => {
|
|
104
|
-
const totalCount = Object.keys(totalEnvVars).length;
|
|
105
|
-
const requiredCount = requiredVars.length;
|
|
106
|
-
const missingCount = requiredVars.filter(v => v.status === "required_missing").length;
|
|
107
|
-
const wrongValueCount = requiredVars.filter(v => v.status === "required_wrong_value").length;
|
|
108
|
-
const wrongTypeCount = requiredVars.filter(v => v.status === "required_wrong_type").length;
|
|
109
|
-
const presentRequiredCount = requiredVars.filter(v => v.status === "required_present").length;
|
|
110
|
-
const optionalCount = optionalVars.length;
|
|
111
|
-
return {
|
|
112
|
-
totalCount,
|
|
113
|
-
requiredCount,
|
|
114
|
-
missingCount,
|
|
115
|
-
wrongValueCount,
|
|
116
|
-
wrongTypeCount,
|
|
117
|
-
presentRequiredCount,
|
|
118
|
-
optionalCount
|
|
119
|
-
};
|
|
120
|
-
};
|
|
121
|
-
exports.calculateStats = calculateStats;
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.processEnvVars=exports.calculateStats=void 0;var _envTypeDetector=require("./envTypeDetector");const processEnvVars=(r,a)=>{const n=[];const i=[];const p=new Set;a?.forEach(e=>{const s=typeof e==="string"?e:e.key;const o=typeof e==="object"&&"expectedValue"in e?e.expectedValue:void 0;const u=typeof e==="object"&&"expectedType"in e?e.expectedType:void 0;const d=typeof e==="object"&&"description"in e?e.description:void 0;p.add(s);const t=r[s];const _=t!==void 0;let c;if(!_){c="required_missing"}else if(o){let l=false;if(o==="sk_*"){l=t.startsWith("sk_")}else if(o==="production or development"){l=t==="production"||t==="development"}else{l=t===o}c=l?"required_present":"required_wrong_value"}else if(u&&(0,_envTypeDetector.getEnvVarType)(t).toLowerCase()!==u.toLowerCase()){c="required_wrong_type"}else{c="required_present"}n.push({key:s,value:t,expectedValue:o,expectedType:u,description:d,status:c,category:"required"})});Object.entries(r).forEach(([e,s])=>{if(!p.has(e)){i.push({key:e,value:s,status:"optional_present",category:"optional"})}});n.sort((e,s)=>{const o={required_missing:0,required_wrong_value:1,required_wrong_type:2,required_present:3,optional_present:4};if(o[e.status]!==o[s.status]){return o[e.status]-o[s.status]}return e.key.localeCompare(s.key)});i.sort((e,s)=>e.key.localeCompare(s.key));return{requiredVars:n,optionalVars:i}};exports.processEnvVars=processEnvVars;const calculateStats=(r,a,n)=>{const i=Object.keys(n).length;const p=r.length;const e=r.filter(t=>t.status==="required_missing").length;const s=r.filter(t=>t.status==="required_wrong_value").length;const o=r.filter(t=>t.status==="required_wrong_type").length;const u=r.filter(t=>t.status==="required_present").length;const d=a.length;return{totalCount:i,requiredCount:p,missingCount:e,wrongValueCount:s,wrongTypeCount:o,presentRequiredCount:u,optionalCount:d}};exports.calculateStats=calculateStats;
|
package/lib/commonjs/index.js
CHANGED
|
@@ -1,77 +1 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
var _exportNames = {
|
|
7
|
-
envToolPreset: true,
|
|
8
|
-
createEnvTool: true,
|
|
9
|
-
EnvVarsModal: true,
|
|
10
|
-
EnvToolView: true,
|
|
11
|
-
createEnvSyncAdapter: true,
|
|
12
|
-
setRemoteEnv: true
|
|
13
|
-
};
|
|
14
|
-
Object.defineProperty(exports, "EnvToolView", {
|
|
15
|
-
enumerable: true,
|
|
16
|
-
get: function () {
|
|
17
|
-
return _EnvVarsModal.EnvToolView;
|
|
18
|
-
}
|
|
19
|
-
});
|
|
20
|
-
Object.defineProperty(exports, "EnvVarsModal", {
|
|
21
|
-
enumerable: true,
|
|
22
|
-
get: function () {
|
|
23
|
-
return _EnvVarsModal.EnvVarsModal;
|
|
24
|
-
}
|
|
25
|
-
});
|
|
26
|
-
Object.defineProperty(exports, "createEnvSyncAdapter", {
|
|
27
|
-
enumerable: true,
|
|
28
|
-
get: function () {
|
|
29
|
-
return _envSyncAdapter.createEnvSyncAdapter;
|
|
30
|
-
}
|
|
31
|
-
});
|
|
32
|
-
Object.defineProperty(exports, "createEnvTool", {
|
|
33
|
-
enumerable: true,
|
|
34
|
-
get: function () {
|
|
35
|
-
return _preset.createEnvTool;
|
|
36
|
-
}
|
|
37
|
-
});
|
|
38
|
-
Object.defineProperty(exports, "envToolPreset", {
|
|
39
|
-
enumerable: true,
|
|
40
|
-
get: function () {
|
|
41
|
-
return _preset.envToolPreset;
|
|
42
|
-
}
|
|
43
|
-
});
|
|
44
|
-
Object.defineProperty(exports, "setRemoteEnv", {
|
|
45
|
-
enumerable: true,
|
|
46
|
-
get: function () {
|
|
47
|
-
return _remoteEnv.setRemoteEnv;
|
|
48
|
-
}
|
|
49
|
-
});
|
|
50
|
-
var _preset = require("./preset");
|
|
51
|
-
var _EnvVarsModal = require("./env/components/EnvVarsModal");
|
|
52
|
-
var _envSyncAdapter = require("./sync/envSyncAdapter");
|
|
53
|
-
var _remoteEnv = require("./env/utils/remoteEnv");
|
|
54
|
-
var _types = require("./env/types");
|
|
55
|
-
Object.keys(_types).forEach(function (key) {
|
|
56
|
-
if (key === "default" || key === "__esModule") return;
|
|
57
|
-
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
|
58
|
-
if (key in exports && exports[key] === _types[key]) return;
|
|
59
|
-
Object.defineProperty(exports, key, {
|
|
60
|
-
enumerable: true,
|
|
61
|
-
get: function () {
|
|
62
|
-
return _types[key];
|
|
63
|
-
}
|
|
64
|
-
});
|
|
65
|
-
});
|
|
66
|
-
var _utils = require("./env/utils");
|
|
67
|
-
Object.keys(_utils).forEach(function (key) {
|
|
68
|
-
if (key === "default" || key === "__esModule") return;
|
|
69
|
-
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
|
70
|
-
if (key in exports && exports[key] === _utils[key]) return;
|
|
71
|
-
Object.defineProperty(exports, key, {
|
|
72
|
-
enumerable: true,
|
|
73
|
-
get: function () {
|
|
74
|
-
return _utils[key];
|
|
75
|
-
}
|
|
76
|
-
});
|
|
77
|
-
});
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:true});var _exportNames={envToolPreset:true,createEnvTool:true,EnvVarsModal:true,EnvToolView:true,createEnvSyncAdapter:true,setRemoteEnv:true};Object.defineProperty(exports,"EnvToolView",{enumerable:true,get:function(){return _EnvVarsModal.EnvToolView}});Object.defineProperty(exports,"EnvVarsModal",{enumerable:true,get:function(){return _EnvVarsModal.EnvVarsModal}});Object.defineProperty(exports,"createEnvSyncAdapter",{enumerable:true,get:function(){return _envSyncAdapter.createEnvSyncAdapter}});Object.defineProperty(exports,"createEnvTool",{enumerable:true,get:function(){return _preset.createEnvTool}});Object.defineProperty(exports,"envToolPreset",{enumerable:true,get:function(){return _preset.envToolPreset}});Object.defineProperty(exports,"setRemoteEnv",{enumerable:true,get:function(){return _remoteEnv.setRemoteEnv}});var _preset=require("./preset");var _EnvVarsModal=require("./env/components/EnvVarsModal");var _envSyncAdapter=require("./sync/envSyncAdapter");var _remoteEnv=require("./env/utils/remoteEnv");var _types=require("./env/types");Object.keys(_types).forEach(function(e){if(e==="default"||e==="__esModule")return;if(Object.prototype.hasOwnProperty.call(_exportNames,e))return;if(e in exports&&exports[e]===_types[e])return;Object.defineProperty(exports,e,{enumerable:true,get:function(){return _types[e]}})});var _utils=require("./env/utils");Object.keys(_utils).forEach(function(e){if(e==="default"||e==="__esModule")return;if(Object.prototype.hasOwnProperty.call(_exportNames,e))return;if(e in exports&&exports[e]===_utils[e])return;Object.defineProperty(exports,e,{enumerable:true,get:function(){return _utils[e]}})});
|
package/lib/commonjs/preset.js
CHANGED
|
@@ -1,81 +1 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.envToolPreset = exports.createEnvTool = void 0;
|
|
7
|
-
var _floatingToolsCore = require("@buoy-gg/floating-tools-core");
|
|
8
|
-
var _EnvVarsModal = require("./env/components/EnvVarsModal");
|
|
9
|
-
var _envSyncAdapter = require("./sync/envSyncAdapter");
|
|
10
|
-
var _sharedUi = require("@buoy-gg/shared-ui");
|
|
11
|
-
var _jsxRuntime = require("react/jsx-runtime");
|
|
12
|
-
/**
|
|
13
|
-
* Pre-configured environment variables tool for FloatingDevTools
|
|
14
|
-
*
|
|
15
|
-
* This preset provides a zero-config way to add env var inspection to your dev tools.
|
|
16
|
-
* Just import and add it to your apps array!
|
|
17
|
-
*
|
|
18
|
-
* @example
|
|
19
|
-
* ```tsx
|
|
20
|
-
* import { envToolPreset } from '@buoy-gg/env';
|
|
21
|
-
*
|
|
22
|
-
* const installedApps = [
|
|
23
|
-
* envToolPreset, // That's it!
|
|
24
|
-
* // ...other tools
|
|
25
|
-
* ];
|
|
26
|
-
* ```
|
|
27
|
-
*/
|
|
28
|
-
|
|
29
|
-
/**
|
|
30
|
-
* Pre-configured environment variables tool for FloatingDevTools.
|
|
31
|
-
* Includes:
|
|
32
|
-
* - Automatic env var discovery
|
|
33
|
-
* - Required variable validation
|
|
34
|
-
* - Search and filtering
|
|
35
|
-
* - Copy functionality
|
|
36
|
-
*/
|
|
37
|
-
const envToolPreset = exports.envToolPreset = (0, _sharedUi.defineToolPreset)({
|
|
38
|
-
id: "env",
|
|
39
|
-
name: "ENV",
|
|
40
|
-
description: "Environment variables debugger",
|
|
41
|
-
slot: "both",
|
|
42
|
-
icon: ({
|
|
43
|
-
size
|
|
44
|
-
}) => /*#__PURE__*/(0, _jsxRuntime.jsx)(_floatingToolsCore.EnvIcon, {
|
|
45
|
-
size: size
|
|
46
|
-
}),
|
|
47
|
-
component: _EnvVarsModal.EnvVarsModal,
|
|
48
|
-
props: {
|
|
49
|
-
requiredEnvVars: [],
|
|
50
|
-
enableSharedModalDimensions: true
|
|
51
|
-
}
|
|
52
|
-
});
|
|
53
|
-
|
|
54
|
-
/**
|
|
55
|
-
* Create a custom environment variables tool configuration.
|
|
56
|
-
* Use this if you want to override default settings or provide required env vars.
|
|
57
|
-
*
|
|
58
|
-
* @example
|
|
59
|
-
* ```tsx
|
|
60
|
-
* import { createEnvTool, envVar, createEnvVarConfig } from '@buoy-gg/env';
|
|
61
|
-
*
|
|
62
|
-
* const requiredEnvVars = createEnvVarConfig([
|
|
63
|
-
* envVar("EXPO_PUBLIC_API_URL").exists(),
|
|
64
|
-
* envVar("EXPO_PUBLIC_DEBUG_MODE").withType("boolean").build(),
|
|
65
|
-
* ]);
|
|
66
|
-
*
|
|
67
|
-
* const myEnvTool = createEnvTool({
|
|
68
|
-
* requiredEnvVars,
|
|
69
|
-
* colorPreset: "cyan",
|
|
70
|
-
* enableSharedModalDimensions: true,
|
|
71
|
-
* });
|
|
72
|
-
* ```
|
|
73
|
-
*/
|
|
74
|
-
const createEnvTool = exports.createEnvTool = (0, _sharedUi.createToolFactory)(envToolPreset, options => {
|
|
75
|
-
// Shared with the sync adapter so the desktop panel checks the same list.
|
|
76
|
-
(0, _envSyncAdapter.setToolRequiredEnvVars)(options.requiredEnvVars || []);
|
|
77
|
-
return {
|
|
78
|
-
requiredEnvVars: options.requiredEnvVars || [],
|
|
79
|
-
enableSharedModalDimensions: options.enableSharedModalDimensions ?? true
|
|
80
|
-
};
|
|
81
|
-
});
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.envToolPreset=exports.createEnvTool=void 0;var _floatingToolsCore=require("@buoy-gg/floating-tools-core");var _EnvVarsModal=require("./env/components/EnvVarsModal");var _envSyncAdapter=require("./sync/envSyncAdapter");var _sharedUi=require("@buoy-gg/shared-ui");var _jsxRuntime=require("react/jsx-runtime");const envToolPreset=exports.envToolPreset=(0,_sharedUi.defineToolPreset)({id:"env",name:"ENV",description:"Environment variables debugger",slot:"both",icon:({size:e})=>(0,_jsxRuntime.jsx)(_floatingToolsCore.EnvIcon,{size:e}),component:_EnvVarsModal.EnvVarsModal,props:{requiredEnvVars:[],enableSharedModalDimensions:true}});const createEnvTool=exports.createEnvTool=(0,_sharedUi.createToolFactory)(envToolPreset,e=>{(0,_envSyncAdapter.setToolRequiredEnvVars)(e.requiredEnvVars||[]);return{requiredEnvVars:e.requiredEnvVars||[],enableSharedModalDimensions:e.enableSharedModalDimensions??true}});
|
|
@@ -1,51 +1 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.createEnvSyncAdapter = createEnvSyncAdapter;
|
|
7
|
-
exports.setToolRequiredEnvVars = setToolRequiredEnvVars;
|
|
8
|
-
var _remoteEnv = require("../env/utils/remoteEnv");
|
|
9
|
-
/** Collect the device's env vars (only EXPO_PUBLIC_-style vars exist in RN). */
|
|
10
|
-
function collectEnv() {
|
|
11
|
-
const env = {};
|
|
12
|
-
// @ts-ignore process.env does exist
|
|
13
|
-
for (const [key, value] of Object.entries((0, _remoteEnv.getRemoteEnv)() ?? (typeof process === "undefined" ? {} : process.env))) {
|
|
14
|
-
if (typeof value === "string") {
|
|
15
|
-
env[key] = value;
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
return env;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* Create a sync adapter for the env tool, consumed by @buoy-gg/external-sync's
|
|
23
|
-
* `useExternalSync` (structurally matches its ToolSyncAdapter interface so
|
|
24
|
-
* this package doesn't need a dependency on it).
|
|
25
|
-
*
|
|
26
|
-
* Env vars are baked into the bundle, so the snapshot is static — it's sent
|
|
27
|
-
* once when a dashboard starts watching. Pass the same `requiredEnvVars`
|
|
28
|
-
* config you give FloatingDevTools so the dashboard validates against it.
|
|
29
|
-
*/
|
|
30
|
-
let toolRequiredEnvVars = [];
|
|
31
|
-
|
|
32
|
-
/**
|
|
33
|
-
* Called by `createEnvTool`. An app that declares its variables on the tool
|
|
34
|
-
* (`apps={[createEnvTool({ requiredEnvVars })]}`) rather than on
|
|
35
|
-
* FloatingDevTools used to sync an empty list, so the desktop panel checked
|
|
36
|
-
* nothing and showed no required variables.
|
|
37
|
-
*/
|
|
38
|
-
function setToolRequiredEnvVars(vars) {
|
|
39
|
-
toolRequiredEnvVars = vars;
|
|
40
|
-
}
|
|
41
|
-
function createEnvSyncAdapter(requiredEnvVars = []) {
|
|
42
|
-
return {
|
|
43
|
-
version: 1,
|
|
44
|
-
getSnapshot: () => ({
|
|
45
|
-
env: collectEnv(),
|
|
46
|
-
requiredEnvVars: requiredEnvVars.length > 0 ? requiredEnvVars : toolRequiredEnvVars
|
|
47
|
-
}),
|
|
48
|
-
// Env never changes at runtime — nothing to subscribe to
|
|
49
|
-
subscribe: () => () => {}
|
|
50
|
-
};
|
|
51
|
-
}
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.createEnvSyncAdapter=createEnvSyncAdapter;exports.setToolRequiredEnvVars=setToolRequiredEnvVars;var _remoteEnv=require("../env/utils/remoteEnv");function collectEnv(){const e={};for(const[n,t]of Object.entries((0,_remoteEnv.getRemoteEnv)()??(typeof process==="undefined"?{}:process.env))){if(typeof t==="string"){e[n]=t}}return e}let toolRequiredEnvVars=[];function setToolRequiredEnvVars(e){toolRequiredEnvVars=e}function createEnvSyncAdapter(e=[]){return{version:1,getSnapshot:()=>({env:collectEnv(),requiredEnvVars:e.length>0?e:toolRequiredEnvVars}),subscribe:()=>()=>{}}}
|
|
@@ -1,155 +1 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
import { View, Text, StyleSheet, TouchableOpacity } from "react-native";
|
|
4
|
-
import { CompactRow, night, monoFont } from "@buoy-gg/shared-ui";
|
|
5
|
-
import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
|
|
6
|
-
export function EnvStatsOverview({
|
|
7
|
-
stats,
|
|
8
|
-
healthPercentage,
|
|
9
|
-
healthStatus,
|
|
10
|
-
healthColor,
|
|
11
|
-
activeFilter = "all",
|
|
12
|
-
onFilterChange
|
|
13
|
-
}) {
|
|
14
|
-
const issuesCount = stats.wrongValueCount + stats.wrongTypeCount;
|
|
15
|
-
return /*#__PURE__*/_jsxs(View, {
|
|
16
|
-
style: styles.container,
|
|
17
|
-
children: [/*#__PURE__*/_jsx(CompactRow, {
|
|
18
|
-
statusDotColor: healthColor,
|
|
19
|
-
statusLabel: "System",
|
|
20
|
-
statusSublabel: healthStatus.toLowerCase(),
|
|
21
|
-
primaryText: "Environment Configuration",
|
|
22
|
-
secondaryText: `${healthPercentage}% healthy`,
|
|
23
|
-
testID: "buoy-env-health",
|
|
24
|
-
statusSublabelTestID: "buoy-env-health-status",
|
|
25
|
-
accessibilityLabel: `Environment configuration ${healthStatus.toLowerCase()}, ${healthPercentage}% healthy`,
|
|
26
|
-
customBadge: /*#__PURE__*/_jsx(View, {
|
|
27
|
-
style: [styles.percentBadge, {
|
|
28
|
-
borderColor: healthColor + "40",
|
|
29
|
-
backgroundColor: healthColor + "10"
|
|
30
|
-
}],
|
|
31
|
-
children: /*#__PURE__*/_jsxs(Text, {
|
|
32
|
-
style: [styles.percentText, {
|
|
33
|
-
color: healthColor
|
|
34
|
-
}],
|
|
35
|
-
testID: "buoy-env-health-percent",
|
|
36
|
-
children: [healthPercentage, "%"]
|
|
37
|
-
})
|
|
38
|
-
})
|
|
39
|
-
}), /*#__PURE__*/_jsxs(View, {
|
|
40
|
-
style: styles.statsGrid,
|
|
41
|
-
children: [/*#__PURE__*/_jsxs(TouchableOpacity, {
|
|
42
|
-
style: [styles.statCard, activeFilter === "all" && styles.statCardActive],
|
|
43
|
-
onPress: () => onFilterChange?.("all"),
|
|
44
|
-
activeOpacity: 0.8,
|
|
45
|
-
testID: "buoy-env-filter-all",
|
|
46
|
-
accessibilityRole: "button",
|
|
47
|
-
accessibilityLabel: "Show all variables",
|
|
48
|
-
accessibilityState: {
|
|
49
|
-
selected: activeFilter === "all"
|
|
50
|
-
},
|
|
51
|
-
children: [/*#__PURE__*/_jsx(Text, {
|
|
52
|
-
style: [styles.statValue, activeFilter === "all" && styles.statValueActive],
|
|
53
|
-
testID: "buoy-env-filter-all-count",
|
|
54
|
-
children: stats.requiredCount + stats.optionalCount
|
|
55
|
-
}), /*#__PURE__*/_jsx(Text, {
|
|
56
|
-
style: [styles.statLabel, activeFilter === "all" && styles.statLabelActive],
|
|
57
|
-
children: "ALL"
|
|
58
|
-
})]
|
|
59
|
-
}), /*#__PURE__*/_jsxs(TouchableOpacity, {
|
|
60
|
-
style: [styles.statCard, activeFilter === "missing" && styles.statCardActive],
|
|
61
|
-
onPress: () => onFilterChange?.("missing"),
|
|
62
|
-
activeOpacity: 0.8,
|
|
63
|
-
testID: "buoy-env-filter-missing",
|
|
64
|
-
accessibilityRole: "button",
|
|
65
|
-
accessibilityLabel: "Show missing variables",
|
|
66
|
-
accessibilityState: {
|
|
67
|
-
selected: activeFilter === "missing"
|
|
68
|
-
},
|
|
69
|
-
children: [/*#__PURE__*/_jsx(Text, {
|
|
70
|
-
style: [styles.statValue, activeFilter === "missing" && styles.statValueActive],
|
|
71
|
-
testID: "buoy-env-filter-missing-count",
|
|
72
|
-
children: stats.missingCount
|
|
73
|
-
}), /*#__PURE__*/_jsx(Text, {
|
|
74
|
-
style: [styles.statLabel, activeFilter === "missing" && styles.statLabelActive],
|
|
75
|
-
children: "MISSING"
|
|
76
|
-
})]
|
|
77
|
-
}), /*#__PURE__*/_jsxs(TouchableOpacity, {
|
|
78
|
-
style: [styles.statCard, activeFilter === "issues" && styles.statCardActive],
|
|
79
|
-
onPress: () => onFilterChange?.("issues"),
|
|
80
|
-
activeOpacity: 0.8,
|
|
81
|
-
testID: "buoy-env-filter-issues",
|
|
82
|
-
accessibilityRole: "button",
|
|
83
|
-
accessibilityLabel: "Show variables with issues",
|
|
84
|
-
accessibilityState: {
|
|
85
|
-
selected: activeFilter === "issues"
|
|
86
|
-
},
|
|
87
|
-
children: [/*#__PURE__*/_jsx(Text, {
|
|
88
|
-
style: [styles.statValue, activeFilter === "issues" && styles.statValueActive],
|
|
89
|
-
testID: "buoy-env-filter-issues-count",
|
|
90
|
-
children: issuesCount
|
|
91
|
-
}), /*#__PURE__*/_jsx(Text, {
|
|
92
|
-
style: [styles.statLabel, activeFilter === "issues" && styles.statLabelActive],
|
|
93
|
-
children: "ISSUES"
|
|
94
|
-
})]
|
|
95
|
-
})]
|
|
96
|
-
})]
|
|
97
|
-
});
|
|
98
|
-
}
|
|
99
|
-
const styles = StyleSheet.create({
|
|
100
|
-
container: {
|
|
101
|
-
gap: 8
|
|
102
|
-
},
|
|
103
|
-
statsGrid: {
|
|
104
|
-
flexDirection: "row",
|
|
105
|
-
gap: 8,
|
|
106
|
-
paddingHorizontal: 4
|
|
107
|
-
},
|
|
108
|
-
statCard: {
|
|
109
|
-
flex: 1,
|
|
110
|
-
backgroundColor: night.color.surface,
|
|
111
|
-
borderRadius: 10,
|
|
112
|
-
borderWidth: 1,
|
|
113
|
-
borderColor: night.color.border,
|
|
114
|
-
padding: 12,
|
|
115
|
-
alignItems: "center",
|
|
116
|
-
justifyContent: "center",
|
|
117
|
-
minHeight: 64
|
|
118
|
-
},
|
|
119
|
-
statCardActive: {
|
|
120
|
-
borderColor: night.color.accentBorderStrong,
|
|
121
|
-
backgroundColor: night.color.accentSoft
|
|
122
|
-
},
|
|
123
|
-
statValue: {
|
|
124
|
-
fontSize: 22,
|
|
125
|
-
fontWeight: "700",
|
|
126
|
-
fontFamily: monoFont,
|
|
127
|
-
lineHeight: 26,
|
|
128
|
-
color: night.color.text
|
|
129
|
-
},
|
|
130
|
-
statValueActive: {
|
|
131
|
-
color: night.color.accent
|
|
132
|
-
},
|
|
133
|
-
statLabel: {
|
|
134
|
-
fontSize: 9,
|
|
135
|
-
color: night.color.textTertiary,
|
|
136
|
-
marginTop: 4,
|
|
137
|
-
textTransform: "uppercase",
|
|
138
|
-
letterSpacing: 0.5,
|
|
139
|
-
fontWeight: "600"
|
|
140
|
-
},
|
|
141
|
-
statLabelActive: {
|
|
142
|
-
color: night.color.accent
|
|
143
|
-
},
|
|
144
|
-
percentBadge: {
|
|
145
|
-
paddingHorizontal: 8,
|
|
146
|
-
paddingVertical: 4,
|
|
147
|
-
borderRadius: 6,
|
|
148
|
-
borderWidth: 1
|
|
149
|
-
},
|
|
150
|
-
percentText: {
|
|
151
|
-
fontSize: 14,
|
|
152
|
-
fontWeight: "700",
|
|
153
|
-
fontFamily: monoFont
|
|
154
|
-
}
|
|
155
|
-
});
|
|
1
|
+
"use strict";import{View as u,Text as i,StyleSheet as m,TouchableOpacity as d}from"react-native";import{CompactRow as p,night as s,monoFont as y}from"@buoy-gg/shared-ui";import{jsxs as a,jsx as o}from"react/jsx-runtime";export function EnvStatsOverview({stats:l,healthPercentage:n,healthStatus:b,healthColor:r,activeFilter:e="all",onFilterChange:c}){const g=l.wrongValueCount+l.wrongTypeCount;return a(u,{style:t.container,children:[o(p,{statusDotColor:r,statusLabel:"System",statusSublabel:b.toLowerCase(),primaryText:"Environment Configuration",secondaryText:`${n}% healthy`,testID:"buoy-env-health",statusSublabelTestID:"buoy-env-health-status",accessibilityLabel:`Environment configuration ${b.toLowerCase()}, ${n}% healthy`,customBadge:o(u,{style:[t.percentBadge,{borderColor:r+"40",backgroundColor:r+"10"}],children:a(i,{style:[t.percentText,{color:r}],testID:"buoy-env-health-percent",children:[n,"%"]})})}),a(u,{style:t.statsGrid,children:[a(d,{style:[t.statCard,e==="all"&&t.statCardActive],onPress:()=>c?.("all"),activeOpacity:.8,testID:"buoy-env-filter-all",accessibilityRole:"button",accessibilityLabel:"Show all variables",accessibilityState:{selected:e==="all"},children:[o(i,{style:[t.statValue,e==="all"&&t.statValueActive],testID:"buoy-env-filter-all-count",children:l.requiredCount+l.optionalCount}),o(i,{style:[t.statLabel,e==="all"&&t.statLabelActive],children:"ALL"})]}),a(d,{style:[t.statCard,e==="missing"&&t.statCardActive],onPress:()=>c?.("missing"),activeOpacity:.8,testID:"buoy-env-filter-missing",accessibilityRole:"button",accessibilityLabel:"Show missing variables",accessibilityState:{selected:e==="missing"},children:[o(i,{style:[t.statValue,e==="missing"&&t.statValueActive],testID:"buoy-env-filter-missing-count",children:l.missingCount}),o(i,{style:[t.statLabel,e==="missing"&&t.statLabelActive],children:"MISSING"})]}),a(d,{style:[t.statCard,e==="issues"&&t.statCardActive],onPress:()=>c?.("issues"),activeOpacity:.8,testID:"buoy-env-filter-issues",accessibilityRole:"button",accessibilityLabel:"Show variables with issues",accessibilityState:{selected:e==="issues"},children:[o(i,{style:[t.statValue,e==="issues"&&t.statValueActive],testID:"buoy-env-filter-issues-count",children:g}),o(i,{style:[t.statLabel,e==="issues"&&t.statLabelActive],children:"ISSUES"})]})]})]})}const t=m.create({container:{gap:8},statsGrid:{flexDirection:"row",gap:8,paddingHorizontal:4},statCard:{flex:1,backgroundColor:s.color.surface,borderRadius:10,borderWidth:1,borderColor:s.color.border,padding:12,alignItems:"center",justifyContent:"center",minHeight:64},statCardActive:{borderColor:s.color.accentBorderStrong,backgroundColor:s.color.accentSoft},statValue:{fontSize:22,fontWeight:"700",fontFamily:y,lineHeight:26,color:s.color.text},statValueActive:{color:s.color.accent},statLabel:{fontSize:9,color:s.color.textTertiary,marginTop:4,textTransform:"uppercase",letterSpacing:.5,fontWeight:"600"},statLabelActive:{color:s.color.accent},percentBadge:{paddingHorizontal:8,paddingVertical:4,borderRadius:6,borderWidth:1},percentText:{fontSize:14,fontWeight:"700",fontFamily:y}});
|