dsh-edge 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.i18n.yaml +6 -0
- package/README.md +183 -0
- package/README.zh.md +183 -0
- package/THIRD_PARTY_NOTICES.md +199 -0
- package/dist/_headers +3 -0
- package/dist/assets/fonts/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
- package/dist/assets/fonts/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
- package/dist/assets/fonts/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
- package/dist/assets/fonts/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
- package/dist/assets/fonts/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
- package/dist/assets/fonts/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
- package/dist/assets/fonts/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
- package/dist/assets/fonts/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
- package/dist/assets/fonts/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
- package/dist/assets/fonts/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
- package/dist/assets/fonts/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
- package/dist/assets/fonts/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
- package/dist/assets/fonts/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
- package/dist/assets/fonts/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
- package/dist/assets/fonts/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
- package/dist/assets/fonts/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
- package/dist/assets/fonts/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
- package/dist/assets/fonts/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
- package/dist/assets/fonts/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
- package/dist/assets/fonts/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
- package/dist/assets/fonts/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
- package/dist/assets/fonts/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
- package/dist/assets/fonts/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
- package/dist/assets/fonts/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
- package/dist/assets/fonts/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
- package/dist/assets/fonts/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
- package/dist/assets/fonts/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
- package/dist/assets/fonts/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
- package/dist/assets/fonts/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
- package/dist/assets/fonts/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
- package/dist/assets/fonts/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
- package/dist/assets/fonts/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
- package/dist/assets/fonts/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
- package/dist/assets/fonts/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
- package/dist/assets/fonts/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
- package/dist/assets/fonts/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
- package/dist/assets/fonts/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
- package/dist/assets/fonts/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
- package/dist/assets/fonts/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
- package/dist/assets/fonts/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
- package/dist/assets/fonts/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
- package/dist/assets/fonts/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
- package/dist/assets/fonts/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
- package/dist/assets/fonts/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
- package/dist/assets/fonts/KaTeX_Script-Regular-D5yQViql.woff +0 -0
- package/dist/assets/fonts/KaTeX_Size1-Regular-C195tn64.woff +0 -0
- package/dist/assets/fonts/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
- package/dist/assets/fonts/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
- package/dist/assets/fonts/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
- package/dist/assets/fonts/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
- package/dist/assets/fonts/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
- package/dist/assets/fonts/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
- package/dist/assets/fonts/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
- package/dist/assets/fonts/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
- package/dist/assets/fonts/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
- package/dist/assets/fonts/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
- package/dist/assets/fonts/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
- package/dist/assets/fonts/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
- package/dist/assets/fonts/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
- package/dist/assets/index-C-1AiF3k.js +112 -0
- package/dist/assets/index-CSGf6Qzd.css +1 -0
- package/dist/assets/langs/c-BIGW1oBm.js +2 -0
- package/dist/assets/langs/cpp-DIPi6g--.js +2 -0
- package/dist/assets/langs/csharp-DSvCPggb.js +2 -0
- package/dist/assets/langs/css-CLj8gQPS.js +2 -0
- package/dist/assets/langs/go-C27-OAKa.js +2 -0
- package/dist/assets/langs/html-CfGypltT.js +2 -0
- package/dist/assets/langs/ini-BEwlwnbL.js +2 -0
- package/dist/assets/langs/java-CylS5w8V.js +2 -0
- package/dist/assets/langs/kotlin-BdnUsdx6.js +2 -0
- package/dist/assets/langs/less-B1dDrJ26.js +2 -0
- package/dist/assets/langs/lua-BaeVxFsk.js +2 -0
- package/dist/assets/langs/markdown-Cvjx9yec.js +2 -0
- package/dist/assets/langs/mdx-Cmh6b_Ma.js +2 -0
- package/dist/assets/langs/php-D-uCvoST.js +2 -0
- package/dist/assets/langs/python-B6aJPvgy.js +2 -0
- package/dist/assets/langs/ruby-DEItuUFs.js +2 -0
- package/dist/assets/langs/rust-B1yitclQ.js +2 -0
- package/dist/assets/langs/scss-D5BDwBP9.js +2 -0
- package/dist/assets/langs/sql-CRqJ_cUM.js +2 -0
- package/dist/assets/langs/swift-D82vCrfD.js +2 -0
- package/dist/assets/langs/toml-vGWfd6FD.js +2 -0
- package/dist/assets/langs/xml-sdJ4AIDG.js +2 -0
- package/dist/assets/langs/yaml-Buea-lGh.js +2 -0
- package/dist/assets/vendor-Cjbwl5VI.js +411 -0
- package/dist/assets/vendor-CjyC-hUb.css +1 -0
- package/dist/favicon.svg +8 -0
- package/dist/index.html +35 -0
- package/dist/manifest.webmanifest +16 -0
- package/dist/plugins/@deepseek-ai/dsh-api-gateway/client.js +420 -0
- package/dist/plugins/@deepseek-ai/dsh-api-remotes/client.js +5937 -0
- package/dist/plugins/@deepseek-ai/dsh-client-connection/client.js +10207 -0
- package/dist/plugins/@deepseek-ai/dsh-client-locale/client.js +1231 -0
- package/dist/plugins/@deepseek-ai/dsh-client-modules/client.js +259 -0
- package/dist/plugins/@deepseek-ai/dsh-client-runtime/client.js +10539 -0
- package/dist/plugins/@deepseek-ai/dsh-client-ui-agent-preset/client.js +1725 -0
- package/dist/plugins/@deepseek-ai/dsh-client-ui-commands/client.js +1116 -0
- package/dist/plugins/@deepseek-ai/dsh-client-ui-conversation/client.js +9832 -0
- package/dist/plugins/@deepseek-ai/dsh-client-ui-deliverables/client.js +373 -0
- package/dist/plugins/@deepseek-ai/dsh-client-ui-edge/client.js +549 -0
- package/dist/plugins/@deepseek-ai/dsh-client-ui-input-trigger/client.js +859 -0
- package/dist/plugins/@deepseek-ai/dsh-client-ui-jobs/client.js +280 -0
- package/dist/plugins/@deepseek-ai/dsh-client-ui-layout/client.js +456 -0
- package/dist/plugins/@deepseek-ai/dsh-client-ui-model-selection/client.js +804 -0
- package/dist/plugins/@deepseek-ai/dsh-client-ui-permission-presets/client.js +461 -0
- package/dist/plugins/@deepseek-ai/dsh-client-ui-settings/client.js +254 -0
- package/dist/plugins/@deepseek-ai/dsh-client-ui-settings-general/client.js +609 -0
- package/dist/plugins/@deepseek-ai/dsh-client-ui-sidebar/client.js +292 -0
- package/dist/plugins/@deepseek-ai/dsh-client-ui-skill/client.js +327 -0
- package/dist/plugins/@deepseek-ai/dsh-client-ui-subagent/client.js +710 -0
- package/dist/plugins/@deepseek-ai/dsh-client-ui-theme/client.js +1312 -0
- package/dist/plugins/@deepseek-ai/dsh-client-ui-tool/client.js +1630 -0
- package/dist/plugins/@deepseek-ai/dsh-client-ui-trajectory/client.js +7370 -0
- package/dist/plugins/@deepseek-ai/dsh-client-ui-user-questions/client.js +700 -0
- package/dist/plugins/@deepseek-ai/dsh-client-ui-workflow-run/client.js +474 -0
- package/dist/plugins/@deepseek-ai/dsh-client-ui-workspace/client.js +2426 -0
- package/dist/plugins/@deepseek-ai/dsh-typert-registry/client.js +1372 -0
- package/package.json +97 -0
- package/scripts/assemble-web.mjs +230 -0
- package/scripts/bundle-size.d.mts +2 -0
- package/scripts/bundle-size.mjs +26 -0
- package/scripts/bundle.mjs +53 -0
- package/scripts/cli.d.mts +39 -0
- package/scripts/cli.mjs +496 -0
- package/scripts/install.d.mts +149 -0
- package/scripts/install.mjs +989 -0
- package/scripts/legal-files.mjs +24 -0
- package/scripts/verify-packed.mjs +32 -0
- package/scripts/wrangler-config.d.mts +18 -0
- package/scripts/wrangler-config.mjs +84 -0
- package/src/agent.ts +119 -0
- package/src/auth.ts +352 -0
- package/src/deepseek.ts +231 -0
- package/src/deployment.ts +147 -0
- package/src/direct-shell-core-empty.ts +10 -0
- package/src/direct-shell-protocol.ts +5 -0
- package/src/direct-shell.ts +341 -0
- package/src/do-session-persistence.ts +1064 -0
- package/src/edge-api.ts +796 -0
- package/src/edge-credentials.ts +56 -0
- package/src/edge-remotes.ts +41 -0
- package/src/edge-workspace-store.ts +339 -0
- package/src/http.ts +212 -0
- package/src/index.ts +196 -0
- package/src/instance.ts +1007 -0
- package/src/isolated-direct-shell-unavailable.ts +11 -0
- package/src/protocol.ts +39 -0
- package/src/release.ts +9 -0
- package/src/session-store.ts +1110 -0
- package/src/sse.ts +86 -0
- package/src/web-search.ts +38 -0
- package/src/workspace.ts +270 -0
- package/wrangler.jsonc +56 -0
|
@@ -0,0 +1,549 @@
|
|
|
1
|
+
window.__ModuleLoader__.load({
|
|
2
|
+
id: "@deepseek-ai/dsh-client-ui-edge",
|
|
3
|
+
factory: (require) => {
|
|
4
|
+
var module = { exports: {} };
|
|
5
|
+
var exports = module.exports;
|
|
6
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
7
|
+
//#region \0rolldown/runtime.js
|
|
8
|
+
var __commonJSMin = (cb, mod) => () => (mod || (cb((mod = { exports: {} }).exports, mod), cb = null), mod.exports);
|
|
9
|
+
//#endregion
|
|
10
|
+
let _deepseek_ai_dsh_client_ui_primitives = require("@deepseek-ai/dsh-client-ui-primitives");
|
|
11
|
+
let react_jsx_runtime = require("react/jsx-runtime");
|
|
12
|
+
let react = require("react");
|
|
13
|
+
let _deepseek_ai_dsh_client_runtime_client = require("@deepseek-ai/dsh-client-runtime/client");
|
|
14
|
+
//#endregion
|
|
15
|
+
//#region lib/types/client/store.js
|
|
16
|
+
var import_umd = (/* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
17
|
+
(function(global, factory) {
|
|
18
|
+
typeof exports === "object" && typeof module !== "undefined" ? factory(exports) : typeof define === "function" && define.amd ? define(["exports"], factory) : (global = typeof globalThis !== "undefined" ? globalThis : global || self, factory(global.compareVersions = {}));
|
|
19
|
+
})(exports, (function(exports$1) {
|
|
20
|
+
"use strict";
|
|
21
|
+
const semver = /^[v^~<>=]*?(\d+)(?:\.([x*]|\d+)(?:\.([x*]|\d+)(?:\.([x*]|\d+))?(?:-([\da-z\-]+(?:\.[\da-z\-]+)*))?(?:\+[\da-z\-]+(?:\.[\da-z\-]+)*)?)?)?$/i;
|
|
22
|
+
const validateAndParse = (version) => {
|
|
23
|
+
if (typeof version !== "string") throw new TypeError("Invalid argument expected string");
|
|
24
|
+
const match = version.match(semver);
|
|
25
|
+
if (!match) throw new Error(`Invalid argument not valid semver ('${version}' received)`);
|
|
26
|
+
match.shift();
|
|
27
|
+
return match;
|
|
28
|
+
};
|
|
29
|
+
const isWildcard = (s) => s === "*" || s === "x" || s === "X";
|
|
30
|
+
const tryParse = (v) => {
|
|
31
|
+
const n = parseInt(v, 10);
|
|
32
|
+
return isNaN(n) ? v : n;
|
|
33
|
+
};
|
|
34
|
+
const forceType = (a, b) => typeof a !== typeof b ? [String(a), String(b)] : [a, b];
|
|
35
|
+
const compareStrings = (a, b) => {
|
|
36
|
+
if (isWildcard(a) || isWildcard(b)) return 0;
|
|
37
|
+
const [ap, bp] = forceType(tryParse(a), tryParse(b));
|
|
38
|
+
if (ap > bp) return 1;
|
|
39
|
+
if (ap < bp) return -1;
|
|
40
|
+
return 0;
|
|
41
|
+
};
|
|
42
|
+
const compareSegments = (a, b) => {
|
|
43
|
+
for (let i = 0; i < Math.max(a.length, b.length); i++) {
|
|
44
|
+
const r = compareStrings(a[i] || "0", b[i] || "0");
|
|
45
|
+
if (r !== 0) return r;
|
|
46
|
+
}
|
|
47
|
+
return 0;
|
|
48
|
+
};
|
|
49
|
+
/**
|
|
50
|
+
* Compare [semver](https://semver.org/) version strings to find greater, equal or lesser.
|
|
51
|
+
* This library supports the full semver specification, including comparing versions with different number of digits like `1.0.0`, `1.0`, `1`, and pre-release versions like `1.0.0-alpha`.
|
|
52
|
+
* @param v1 - First version to compare
|
|
53
|
+
* @param v2 - Second version to compare
|
|
54
|
+
* @returns Numeric value compatible with the [Array.sort(fn) interface](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#Parameters).
|
|
55
|
+
*/
|
|
56
|
+
const compareVersions = (v1, v2) => {
|
|
57
|
+
const n1 = validateAndParse(v1);
|
|
58
|
+
const n2 = validateAndParse(v2);
|
|
59
|
+
const p1 = n1.pop();
|
|
60
|
+
const p2 = n2.pop();
|
|
61
|
+
const r = compareSegments(n1, n2);
|
|
62
|
+
if (r !== 0) return r;
|
|
63
|
+
if (p1 && p2) return compareSegments(p1.split("."), p2.split("."));
|
|
64
|
+
else if (p1 || p2) return p1 ? -1 : 1;
|
|
65
|
+
return 0;
|
|
66
|
+
};
|
|
67
|
+
/**
|
|
68
|
+
* Compare [semver](https://semver.org/) version strings using the specified operator.
|
|
69
|
+
*
|
|
70
|
+
* @param v1 First version to compare
|
|
71
|
+
* @param v2 Second version to compare
|
|
72
|
+
* @param operator Allowed arithmetic operator to use
|
|
73
|
+
* @returns `true` if the comparison between the firstVersion and the secondVersion satisfies the operator, `false` otherwise.
|
|
74
|
+
*
|
|
75
|
+
* @example
|
|
76
|
+
* ```
|
|
77
|
+
* compare('10.1.8', '10.0.4', '>'); // return true
|
|
78
|
+
* compare('10.0.1', '10.0.1', '='); // return true
|
|
79
|
+
* compare('10.1.1', '10.2.2', '<'); // return true
|
|
80
|
+
* compare('10.1.1', '10.2.2', '<='); // return true
|
|
81
|
+
* compare('10.1.1', '10.2.2', '>='); // return false
|
|
82
|
+
* ```
|
|
83
|
+
*/
|
|
84
|
+
const compare = (v1, v2, operator) => {
|
|
85
|
+
assertValidOperator(operator);
|
|
86
|
+
const res = compareVersions(v1, v2);
|
|
87
|
+
return operatorResMap[operator].includes(res);
|
|
88
|
+
};
|
|
89
|
+
const operatorResMap = {
|
|
90
|
+
">": [1],
|
|
91
|
+
">=": [0, 1],
|
|
92
|
+
"=": [0],
|
|
93
|
+
"<=": [-1, 0],
|
|
94
|
+
"<": [-1],
|
|
95
|
+
"!=": [-1, 1]
|
|
96
|
+
};
|
|
97
|
+
const allowedOperators = Object.keys(operatorResMap);
|
|
98
|
+
const assertValidOperator = (op) => {
|
|
99
|
+
if (typeof op !== "string") throw new TypeError(`Invalid operator type, expected string but got ${typeof op}`);
|
|
100
|
+
if (allowedOperators.indexOf(op) === -1) throw new Error(`Invalid operator, expected one of ${allowedOperators.join("|")}`);
|
|
101
|
+
};
|
|
102
|
+
/**
|
|
103
|
+
* Match [npm semver](https://docs.npmjs.com/cli/v6/using-npm/semver) version range.
|
|
104
|
+
*
|
|
105
|
+
* @param version Version number to match
|
|
106
|
+
* @param range Range pattern for version
|
|
107
|
+
* @returns `true` if the version number is within the range, `false` otherwise.
|
|
108
|
+
*
|
|
109
|
+
* @example
|
|
110
|
+
* ```
|
|
111
|
+
* satisfies('1.1.0', '^1.0.0'); // return true
|
|
112
|
+
* satisfies('1.1.0', '~1.0.0'); // return false
|
|
113
|
+
* ```
|
|
114
|
+
*/
|
|
115
|
+
const satisfies = (version, range) => {
|
|
116
|
+
range = range.replace(/([><=]+)\s+/g, "$1");
|
|
117
|
+
if (range.includes("||")) return range.split("||").some((r) => satisfies(version, r));
|
|
118
|
+
else if (range.includes(" - ")) {
|
|
119
|
+
const [a, b] = range.split(" - ", 2);
|
|
120
|
+
return satisfies(version, `>=${a} <=${b}`);
|
|
121
|
+
} else if (range.includes(" ")) return range.trim().replace(/\s{2,}/g, " ").split(" ").every((r) => satisfies(version, r));
|
|
122
|
+
const m = range.match(/^([<>=~^]+)/);
|
|
123
|
+
const op = m ? m[1] : "=";
|
|
124
|
+
if (op !== "^" && op !== "~") return compare(version, range, op);
|
|
125
|
+
const [v1, v2, v3, , vp] = validateAndParse(version);
|
|
126
|
+
const [r1, r2, r3, , rp] = validateAndParse(range);
|
|
127
|
+
const v = [
|
|
128
|
+
v1,
|
|
129
|
+
v2,
|
|
130
|
+
v3
|
|
131
|
+
];
|
|
132
|
+
const r = [
|
|
133
|
+
r1,
|
|
134
|
+
r2 !== null && r2 !== void 0 ? r2 : "x",
|
|
135
|
+
r3 !== null && r3 !== void 0 ? r3 : "x"
|
|
136
|
+
];
|
|
137
|
+
if (rp) {
|
|
138
|
+
if (!vp) return false;
|
|
139
|
+
if (compareSegments(v, r) !== 0) return false;
|
|
140
|
+
if (compareSegments(vp.split("."), rp.split(".")) === -1) return false;
|
|
141
|
+
}
|
|
142
|
+
const nonZero = r.findIndex((v) => v !== "0") + 1;
|
|
143
|
+
const i = op === "~" ? 2 : nonZero > 1 ? nonZero : 1;
|
|
144
|
+
if (compareSegments(v.slice(0, i), r.slice(0, i)) !== 0) return false;
|
|
145
|
+
if (compareSegments(v.slice(i), r.slice(i)) === -1) return false;
|
|
146
|
+
return true;
|
|
147
|
+
};
|
|
148
|
+
/**
|
|
149
|
+
* Validate [semver](https://semver.org/) version strings.
|
|
150
|
+
*
|
|
151
|
+
* @param version Version number to validate
|
|
152
|
+
* @returns `true` if the version number is a valid semver version number, `false` otherwise.
|
|
153
|
+
*
|
|
154
|
+
* @example
|
|
155
|
+
* ```
|
|
156
|
+
* validate('1.0.0-rc.1'); // return true
|
|
157
|
+
* validate('1.0-rc.1'); // return false
|
|
158
|
+
* validate('foo'); // return false
|
|
159
|
+
* ```
|
|
160
|
+
*/
|
|
161
|
+
const validate = (version) => typeof version === "string" && /^[v\d]/.test(version) && semver.test(version);
|
|
162
|
+
/**
|
|
163
|
+
* Validate [semver](https://semver.org/) version strings strictly. Will not accept wildcards and version ranges.
|
|
164
|
+
*
|
|
165
|
+
* @param version Version number to validate
|
|
166
|
+
* @returns `true` if the version number is a valid semver version number `false` otherwise
|
|
167
|
+
*
|
|
168
|
+
* @example
|
|
169
|
+
* ```
|
|
170
|
+
* validate('1.0.0-rc.1'); // return true
|
|
171
|
+
* validate('1.0-rc.1'); // return false
|
|
172
|
+
* validate('foo'); // return false
|
|
173
|
+
* ```
|
|
174
|
+
*/
|
|
175
|
+
const validateStrict = (version) => typeof version === "string" && /^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$/.test(version);
|
|
176
|
+
exports$1.compare = compare;
|
|
177
|
+
exports$1.compareVersions = compareVersions;
|
|
178
|
+
exports$1.satisfies = satisfies;
|
|
179
|
+
exports$1.validate = validate;
|
|
180
|
+
exports$1.validateStrict = validateStrict;
|
|
181
|
+
}));
|
|
182
|
+
})))();
|
|
183
|
+
/** Repeatable command for upgrading an existing Edge deployment. */
|
|
184
|
+
const DSH_EDGE_UPGRADE_COMMAND = "pnpm dlx dsh-edge@latest upgrade";
|
|
185
|
+
/** Public release history for the Edge distribution. */
|
|
186
|
+
const DSH_EDGE_RELEASES_URL = "https://github.com/pawaca/dsh-edge/releases";
|
|
187
|
+
function releaseStatus(current, latest) {
|
|
188
|
+
if (!(0, import_umd.validate)(current) || current === "0.0.0") return "development";
|
|
189
|
+
if (latest === void 0 || !(0, import_umd.validate)(latest)) return "unavailable";
|
|
190
|
+
return (0, import_umd.compareVersions)(latest, current) > 0 ? "update-available" : "latest";
|
|
191
|
+
}
|
|
192
|
+
function messageOf(error) {
|
|
193
|
+
return error instanceof Error ? error.message : String(error);
|
|
194
|
+
}
|
|
195
|
+
function isHealth(value) {
|
|
196
|
+
if (value === null || typeof value !== "object") return false;
|
|
197
|
+
const health = value;
|
|
198
|
+
return health.ok === true && health.service === "dsh-edge" && health.status === "ready" && (health.shell === "just-bash-direct" || health.shell === "just-bash-isolated") && health.storage === "durable-object-sqlite-vfs" && typeof health.deploymentId === "string" && typeof health.version === "string" && typeof health.upstreamVersion === "string";
|
|
199
|
+
}
|
|
200
|
+
/** Lazy, fail-soft controller for the Edge deployment settings page. */
|
|
201
|
+
var EdgeSettingsController = class {
|
|
202
|
+
io;
|
|
203
|
+
/** Observable settings state consumed by the client runtime. */
|
|
204
|
+
store = (0, _deepseek_ai_dsh_client_runtime_client.createSnapshotStore)({
|
|
205
|
+
status: "idle",
|
|
206
|
+
copied: false,
|
|
207
|
+
signingOut: false
|
|
208
|
+
});
|
|
209
|
+
loadGeneration = 0;
|
|
210
|
+
constructor(io) {
|
|
211
|
+
this.io = io;
|
|
212
|
+
}
|
|
213
|
+
/** Load the current deployment projection without affecting owner-session state. */
|
|
214
|
+
async load() {
|
|
215
|
+
const generation = ++this.loadGeneration;
|
|
216
|
+
this.store.update((state) => {
|
|
217
|
+
state.status = "loading";
|
|
218
|
+
delete state.error;
|
|
219
|
+
});
|
|
220
|
+
try {
|
|
221
|
+
const healthResponse = await this.io.fetch("/api/health", { credentials: "same-origin" });
|
|
222
|
+
if (!healthResponse.ok) throw new Error(`HTTP ${String(healthResponse.status)}`);
|
|
223
|
+
const health = await healthResponse.json();
|
|
224
|
+
if (!isHealth(health)) throw new Error("Invalid Edge health response");
|
|
225
|
+
if (generation !== this.loadGeneration) return;
|
|
226
|
+
this.store.update((state) => {
|
|
227
|
+
state.status = "ready";
|
|
228
|
+
state.health = health;
|
|
229
|
+
state.releaseStatus = releaseStatus(health.version);
|
|
230
|
+
delete state.latestVersion;
|
|
231
|
+
delete state.error;
|
|
232
|
+
});
|
|
233
|
+
let latestVersion;
|
|
234
|
+
try {
|
|
235
|
+
const releaseResponse = await this.io.fetch("https://registry.npmjs.org/dsh-edge/latest", { signal: AbortSignal.timeout(5e3) });
|
|
236
|
+
if (releaseResponse.ok) {
|
|
237
|
+
const release = await releaseResponse.json();
|
|
238
|
+
if (release !== null && typeof release === "object" && typeof release.version === "string") latestVersion = release.version;
|
|
239
|
+
}
|
|
240
|
+
} catch {}
|
|
241
|
+
if (generation !== this.loadGeneration || latestVersion === void 0) return;
|
|
242
|
+
this.store.update((state) => {
|
|
243
|
+
state.releaseStatus = releaseStatus(health.version, latestVersion);
|
|
244
|
+
state.latestVersion = latestVersion;
|
|
245
|
+
});
|
|
246
|
+
} catch (error) {
|
|
247
|
+
if (generation !== this.loadGeneration) return;
|
|
248
|
+
this.store.update((state) => {
|
|
249
|
+
state.status = "error";
|
|
250
|
+
state.error = messageOf(error);
|
|
251
|
+
delete state.health;
|
|
252
|
+
});
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
/** Copy the stable upgrade command without affecting health or owner-session state. */
|
|
256
|
+
async copyUpgrade() {
|
|
257
|
+
try {
|
|
258
|
+
await this.io.copy(DSH_EDGE_UPGRADE_COMMAND);
|
|
259
|
+
this.store.update((state) => {
|
|
260
|
+
state.copied = true;
|
|
261
|
+
delete state.copyError;
|
|
262
|
+
});
|
|
263
|
+
} catch (error) {
|
|
264
|
+
this.store.update((state) => {
|
|
265
|
+
state.copied = false;
|
|
266
|
+
state.copyError = messageOf(error);
|
|
267
|
+
});
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
/** Clear the browser owner session without affecting deployment-health state. */
|
|
271
|
+
async signOut() {
|
|
272
|
+
this.store.update((state) => {
|
|
273
|
+
state.signingOut = true;
|
|
274
|
+
delete state.signOutError;
|
|
275
|
+
});
|
|
276
|
+
try {
|
|
277
|
+
const response = await this.io.fetch("/api/auth/logout", {
|
|
278
|
+
method: "POST",
|
|
279
|
+
credentials: "same-origin",
|
|
280
|
+
redirect: "manual"
|
|
281
|
+
});
|
|
282
|
+
if (!response.ok && response.status !== 0 && response.status !== 303) throw new Error(`HTTP ${String(response.status)}`);
|
|
283
|
+
this.io.navigate("/login");
|
|
284
|
+
} catch (error) {
|
|
285
|
+
this.store.update((state) => {
|
|
286
|
+
state.signingOut = false;
|
|
287
|
+
state.signOutError = messageOf(error);
|
|
288
|
+
});
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
};
|
|
292
|
+
//#endregion
|
|
293
|
+
//#region \0dsh-css:/private/var/folders/nm/n5smty9962gf5rhjc5855kt80000gn/T/dsh-edge-release-worktree.XXXXXX.RcJjogaGt4/repo/packages/client/ui-edge/src/client/EdgeSettingsSection.module.css.mjs
|
|
294
|
+
const css = ".Q2BQLa_section{gap:20px;max-width:720px;display:grid}.Q2BQLa_section header h2,.Q2BQLa_card h3{color:var(--dsw-alias-text-primary);margin:0}.Q2BQLa_section header p,.Q2BQLa_card p{color:var(--dsw-alias-label-secondary)}.Q2BQLa_card{border:1px solid var(--dsw-alias-border-subtle);border-radius:12px;padding:18px}.Q2BQLa_card dl{margin:12px 0}.Q2BQLa_row{border-bottom:1px solid var(--dsw-alias-border-secondary);grid-template-columns:minmax(150px,1fr) minmax(0,2fr);gap:16px;padding:8px 0;display:grid}.Q2BQLa_row:last-child{border-bottom:0}.Q2BQLa_row dt{color:var(--dsw-alias-label-secondary)}.Q2BQLa_row dd{overflow-wrap:anywhere;color:var(--dsw-alias-text-primary);margin:0}.Q2BQLa_actions{flex-wrap:wrap;align-items:center;gap:12px;display:flex}.Q2BQLa_actions a{color:var(--dsw-alias-brand-primary)}.Q2BQLa_status{align-items:center;gap:8px;display:flex}.Q2BQLa_notice{color:var(--dsw-alias-label-secondary)}.Q2BQLa_error{color:var(--dsw-alias-state-error-primary)!important}@media (width<=560px){.Q2BQLa_row{grid-template-columns:1fr;gap:4px}}";
|
|
295
|
+
const tagId = "@deepseek-ai/dsh-client-ui-edge/EdgeSettingsSection.module.css";
|
|
296
|
+
if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId) + "]") === null) {
|
|
297
|
+
const tag = document.createElement("style");
|
|
298
|
+
tag.dataset.plugin = "@deepseek-ai/dsh-client-ui-edge";
|
|
299
|
+
tag.dataset.pluginCss = tagId;
|
|
300
|
+
tag.textContent = css;
|
|
301
|
+
document.head.appendChild(tag);
|
|
302
|
+
}
|
|
303
|
+
var EdgeSettingsSection_module_css_default = {
|
|
304
|
+
"row": "Q2BQLa_row",
|
|
305
|
+
"status": "Q2BQLa_status",
|
|
306
|
+
"error": "Q2BQLa_error",
|
|
307
|
+
"card": "Q2BQLa_card",
|
|
308
|
+
"actions": "Q2BQLa_actions",
|
|
309
|
+
"notice": "Q2BQLa_notice",
|
|
310
|
+
"section": "Q2BQLa_section"
|
|
311
|
+
};
|
|
312
|
+
//#endregion
|
|
313
|
+
//#region lib/types/client/EdgeSettingsSection.js
|
|
314
|
+
function Row({ label, value }) {
|
|
315
|
+
return (0, react_jsx_runtime.jsxs)("div", {
|
|
316
|
+
className: EdgeSettingsSection_module_css_default.row,
|
|
317
|
+
children: [(0, react_jsx_runtime.jsx)("dt", { children: label }), (0, react_jsx_runtime.jsx)("dd", { children: value })]
|
|
318
|
+
});
|
|
319
|
+
}
|
|
320
|
+
function EdgeSettingsSection(props) {
|
|
321
|
+
const { useEdgeSettings, load, copyUpgrade, signOut, t } = props;
|
|
322
|
+
(0, react.useEffect)(() => {
|
|
323
|
+
load();
|
|
324
|
+
}, [load]);
|
|
325
|
+
const state = useEdgeSettings((snapshot) => snapshot);
|
|
326
|
+
const deploymentDetails = state.status === "idle" || state.status === "loading" ? (0, react_jsx_runtime.jsx)("p", {
|
|
327
|
+
className: EdgeSettingsSection_module_css_default.notice,
|
|
328
|
+
children: t("loading")
|
|
329
|
+
}) : state.status === "error" || state.health === void 0 ? (0, react_jsx_runtime.jsxs)("div", {
|
|
330
|
+
className: EdgeSettingsSection_module_css_default.notice,
|
|
331
|
+
role: "alert",
|
|
332
|
+
children: [(0, react_jsx_runtime.jsx)("p", { children: t("loadFailed") }), (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
|
|
333
|
+
variant: "outline",
|
|
334
|
+
size: "sm",
|
|
335
|
+
onClick: () => {
|
|
336
|
+
load();
|
|
337
|
+
},
|
|
338
|
+
children: t("retry")
|
|
339
|
+
})]
|
|
340
|
+
}) : (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [(0, react_jsx_runtime.jsxs)("section", {
|
|
341
|
+
className: EdgeSettingsSection_module_css_default.card,
|
|
342
|
+
"aria-labelledby": "edge-release-title",
|
|
343
|
+
children: [
|
|
344
|
+
(0, react_jsx_runtime.jsx)("h3", {
|
|
345
|
+
id: "edge-release-title",
|
|
346
|
+
children: t("release")
|
|
347
|
+
}),
|
|
348
|
+
(0, react_jsx_runtime.jsxs)("dl", { children: [
|
|
349
|
+
(0, react_jsx_runtime.jsx)(Row, {
|
|
350
|
+
label: t("currentVersion"),
|
|
351
|
+
value: state.health.version
|
|
352
|
+
}),
|
|
353
|
+
(0, react_jsx_runtime.jsx)(Row, {
|
|
354
|
+
label: t("latestVersion"),
|
|
355
|
+
value: state.latestVersion ?? "—"
|
|
356
|
+
}),
|
|
357
|
+
(0, react_jsx_runtime.jsx)(Row, {
|
|
358
|
+
label: t("upstreamVersion"),
|
|
359
|
+
value: state.health.upstreamVersion
|
|
360
|
+
})
|
|
361
|
+
] }),
|
|
362
|
+
(0, react_jsx_runtime.jsxs)("p", {
|
|
363
|
+
className: EdgeSettingsSection_module_css_default.status,
|
|
364
|
+
children: [state.releaseStatus === void 0 || state.releaseStatus === "unavailable" ? null : (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.StateDot, { state: state.releaseStatus === "update-available" ? "warning" : "done" }), state.releaseStatus === "latest" ? t("latest") : state.releaseStatus === "update-available" ? t("updateAvailable") : state.releaseStatus === "development" ? t("development") : t("unavailable")]
|
|
365
|
+
}),
|
|
366
|
+
(0, react_jsx_runtime.jsxs)("div", {
|
|
367
|
+
className: EdgeSettingsSection_module_css_default.actions,
|
|
368
|
+
children: [state.releaseStatus === "update-available" ? (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
|
|
369
|
+
variant: "outline",
|
|
370
|
+
size: "sm",
|
|
371
|
+
onClick: () => {
|
|
372
|
+
copyUpgrade();
|
|
373
|
+
},
|
|
374
|
+
children: state.copied ? t("copied") : t("copyUpgrade")
|
|
375
|
+
}) : null, (0, react_jsx_runtime.jsx)("a", {
|
|
376
|
+
href: DSH_EDGE_RELEASES_URL,
|
|
377
|
+
target: "_blank",
|
|
378
|
+
rel: "noreferrer",
|
|
379
|
+
children: t("releaseNotes")
|
|
380
|
+
})]
|
|
381
|
+
}),
|
|
382
|
+
state.copyError === void 0 ? null : (0, react_jsx_runtime.jsx)("p", {
|
|
383
|
+
className: EdgeSettingsSection_module_css_default.error,
|
|
384
|
+
role: "alert",
|
|
385
|
+
children: t("copyFailed")
|
|
386
|
+
})
|
|
387
|
+
]
|
|
388
|
+
}), (0, react_jsx_runtime.jsxs)("section", {
|
|
389
|
+
className: EdgeSettingsSection_module_css_default.card,
|
|
390
|
+
"aria-labelledby": "edge-runtime-title",
|
|
391
|
+
children: [(0, react_jsx_runtime.jsx)("h3", {
|
|
392
|
+
id: "edge-runtime-title",
|
|
393
|
+
children: t("runtime")
|
|
394
|
+
}), (0, react_jsx_runtime.jsxs)("dl", { children: [
|
|
395
|
+
(0, react_jsx_runtime.jsx)(Row, {
|
|
396
|
+
label: t("runtime"),
|
|
397
|
+
value: state.health.shell === "just-bash-direct" ? t("direct") : t("isolated")
|
|
398
|
+
}),
|
|
399
|
+
(0, react_jsx_runtime.jsx)(Row, {
|
|
400
|
+
label: t("storage"),
|
|
401
|
+
value: t("durableStorage")
|
|
402
|
+
}),
|
|
403
|
+
(0, react_jsx_runtime.jsx)(Row, {
|
|
404
|
+
label: t("deploymentId"),
|
|
405
|
+
value: (0, react_jsx_runtime.jsx)("code", { children: state.health.deploymentId })
|
|
406
|
+
})
|
|
407
|
+
] })]
|
|
408
|
+
})] });
|
|
409
|
+
return (0, react_jsx_runtime.jsxs)("div", {
|
|
410
|
+
className: EdgeSettingsSection_module_css_default.section,
|
|
411
|
+
children: [
|
|
412
|
+
(0, react_jsx_runtime.jsxs)("header", { children: [(0, react_jsx_runtime.jsx)("h2", { children: t("title") }), (0, react_jsx_runtime.jsx)("p", { children: t("intro") })] }),
|
|
413
|
+
deploymentDetails,
|
|
414
|
+
(0, react_jsx_runtime.jsxs)("section", {
|
|
415
|
+
className: EdgeSettingsSection_module_css_default.card,
|
|
416
|
+
"aria-labelledby": "edge-owner-title",
|
|
417
|
+
children: [
|
|
418
|
+
(0, react_jsx_runtime.jsx)("h3", {
|
|
419
|
+
id: "edge-owner-title",
|
|
420
|
+
children: t("ownerSession")
|
|
421
|
+
}),
|
|
422
|
+
(0, react_jsx_runtime.jsx)("p", { children: t("ownerIntro") }),
|
|
423
|
+
state.signOutError === void 0 ? null : (0, react_jsx_runtime.jsx)("p", {
|
|
424
|
+
className: EdgeSettingsSection_module_css_default.error,
|
|
425
|
+
role: "alert",
|
|
426
|
+
children: t("signOutFailed")
|
|
427
|
+
}),
|
|
428
|
+
(0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
|
|
429
|
+
variant: "outline",
|
|
430
|
+
size: "sm",
|
|
431
|
+
disabled: state.signingOut,
|
|
432
|
+
onClick: () => {
|
|
433
|
+
signOut();
|
|
434
|
+
},
|
|
435
|
+
children: state.signingOut ? t("signingOut") : t("signOut")
|
|
436
|
+
})
|
|
437
|
+
]
|
|
438
|
+
})
|
|
439
|
+
]
|
|
440
|
+
});
|
|
441
|
+
}
|
|
442
|
+
//#endregion
|
|
443
|
+
//#region lib/types/client/locales.js
|
|
444
|
+
/** English copy is the key-set source of truth for the Edge settings page. */
|
|
445
|
+
const en = {
|
|
446
|
+
nav: "DSH Edge",
|
|
447
|
+
title: "DSH Edge",
|
|
448
|
+
intro: "Deployment details and updates for this Cloudflare Worker.",
|
|
449
|
+
release: "Release",
|
|
450
|
+
currentVersion: "Installed version",
|
|
451
|
+
latestVersion: "Latest version",
|
|
452
|
+
upstreamVersion: "DeepSeek Harness base",
|
|
453
|
+
latest: "Up to date",
|
|
454
|
+
updateAvailable: "Update available",
|
|
455
|
+
development: "Development build",
|
|
456
|
+
unavailable: "Could not check npm",
|
|
457
|
+
runtime: "Runtime",
|
|
458
|
+
direct: "Free · Direct Shell",
|
|
459
|
+
isolated: "Isolated · Dynamic Worker",
|
|
460
|
+
storage: "Storage",
|
|
461
|
+
durableStorage: "Durable Object SQLite VFS",
|
|
462
|
+
deploymentId: "Deployment ID",
|
|
463
|
+
model: "Model",
|
|
464
|
+
loading: "Loading deployment details…",
|
|
465
|
+
loadFailed: "Could not load deployment details.",
|
|
466
|
+
retry: "Retry",
|
|
467
|
+
copyUpgrade: "Copy upgrade command",
|
|
468
|
+
copied: "Upgrade command copied",
|
|
469
|
+
copyFailed: "Could not copy the command. Try again.",
|
|
470
|
+
releaseNotes: "Release notes",
|
|
471
|
+
ownerSession: "Owner session",
|
|
472
|
+
ownerIntro: "Signing out clears this browser’s owner session. Your deployment and data remain unchanged.",
|
|
473
|
+
signOut: "Sign out",
|
|
474
|
+
signingOut: "Signing out…",
|
|
475
|
+
signOutFailed: "Could not sign out. Try again."
|
|
476
|
+
};
|
|
477
|
+
/** Simplified Chinese copy for the Edge settings page. */
|
|
478
|
+
const zh = {
|
|
479
|
+
nav: "DSH Edge",
|
|
480
|
+
title: "DSH Edge",
|
|
481
|
+
intro: "查看此 Cloudflare Worker 的部署信息和更新。",
|
|
482
|
+
release: "版本",
|
|
483
|
+
currentVersion: "当前版本",
|
|
484
|
+
latestVersion: "最新版本",
|
|
485
|
+
upstreamVersion: "DeepSeek Harness 基础版本",
|
|
486
|
+
latest: "已是最新版本",
|
|
487
|
+
updateAvailable: "有可用更新",
|
|
488
|
+
development: "开发版本",
|
|
489
|
+
unavailable: "无法检查 npm",
|
|
490
|
+
runtime: "运行时",
|
|
491
|
+
direct: "免费 · Direct Shell",
|
|
492
|
+
isolated: "隔离 · Dynamic Worker",
|
|
493
|
+
storage: "存储",
|
|
494
|
+
durableStorage: "Durable Object SQLite VFS",
|
|
495
|
+
deploymentId: "部署 ID",
|
|
496
|
+
model: "模型",
|
|
497
|
+
loading: "正在读取部署信息…",
|
|
498
|
+
loadFailed: "无法读取部署信息。",
|
|
499
|
+
retry: "重试",
|
|
500
|
+
copyUpgrade: "复制升级命令",
|
|
501
|
+
copied: "已复制升级命令",
|
|
502
|
+
copyFailed: "无法复制命令,请重试。",
|
|
503
|
+
releaseNotes: "版本说明",
|
|
504
|
+
ownerSession: "Owner 会话",
|
|
505
|
+
ownerIntro: "退出只会清除此浏览器的 Owner 会话,不会改变部署或数据。",
|
|
506
|
+
signOut: "退出登录",
|
|
507
|
+
signingOut: "正在退出…",
|
|
508
|
+
signOutFailed: "退出失败,请重试。"
|
|
509
|
+
};
|
|
510
|
+
//#endregion
|
|
511
|
+
//#region lib/types/client/index.js
|
|
512
|
+
const inject = ["slots", "locale"];
|
|
513
|
+
function apply(ctx) {
|
|
514
|
+
ctx.effect(() => ctx.locale.register("settings.edge", {
|
|
515
|
+
en,
|
|
516
|
+
zh
|
|
517
|
+
}), "ui-edge: settings dictionaries");
|
|
518
|
+
const controller = new EdgeSettingsController({
|
|
519
|
+
fetch: (input, init) => globalThis.fetch(input, init),
|
|
520
|
+
copy: async (text) => {
|
|
521
|
+
if (!await (0, _deepseek_ai_dsh_client_ui_primitives.writeClipboard)(text)) throw new Error("Clipboard write was rejected");
|
|
522
|
+
},
|
|
523
|
+
navigate: (path) => {
|
|
524
|
+
globalThis.location.assign(path);
|
|
525
|
+
}
|
|
526
|
+
});
|
|
527
|
+
const injected = () => ({
|
|
528
|
+
hooks: { edgeSettings: controller.store },
|
|
529
|
+
load: () => controller.load(),
|
|
530
|
+
copyUpgrade: () => controller.copyUpgrade(),
|
|
531
|
+
signOut: () => controller.signOut()
|
|
532
|
+
});
|
|
533
|
+
ctx.slots.inject("settings.section", () => ctx.slots.register({
|
|
534
|
+
name: "settings.section",
|
|
535
|
+
id: "dsh-edge",
|
|
536
|
+
order: 90,
|
|
537
|
+
label: () => ctx.locale.bind("settings.edge")("nav"),
|
|
538
|
+
locale: "settings.edge",
|
|
539
|
+
inject: injected
|
|
540
|
+
}, EdgeSettingsSection));
|
|
541
|
+
}
|
|
542
|
+
//#endregion
|
|
543
|
+
exports.apply = apply;
|
|
544
|
+
exports.inject = inject;
|
|
545
|
+
return module.exports;
|
|
546
|
+
}
|
|
547
|
+
});
|
|
548
|
+
|
|
549
|
+
//# sourceMappingURL=client.js.map
|