@metricinsights/pp-dev 1.5.0-beta.31 → 1.5.0-beta.33
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/TEMPLATE_VARIABLES.md +25 -25
- package/dist/cjs/auth.provider-C3O8wdGc.js +2 -0
- package/dist/cjs/auth.provider-C3O8wdGc.js.map +1 -0
- package/dist/cjs/cli.js +1 -1
- package/dist/cjs/cli.js.map +1 -1
- package/dist/cjs/index-DnVkH9ZF.js +2 -0
- package/dist/cjs/index-DnVkH9ZF.js.map +1 -0
- package/dist/cjs/index.js +1 -1
- package/dist/cjs/internal.middleware-63EM6Z98.js +2 -0
- package/dist/cjs/internal.middleware-63EM6Z98.js.map +1 -0
- package/dist/cjs/migrate-oVYAMhLH.js +2 -0
- package/dist/cjs/{migrate-Gi9k9cLw.js.map → migrate-oVYAMhLH.js.map} +1 -1
- package/dist/cjs/plugin.js +1 -1
- package/dist/cjs/plugin.js.map +1 -1
- package/dist/cjs/{version-manifest-CVBuIKBS.js → version-manifest-fusPAO4h.js} +2 -2
- package/dist/cjs/{version-manifest-CVBuIKBS.js.map → version-manifest-fusPAO4h.js.map} +1 -1
- package/dist/cjs/version-plugin-B6tVqztE.js +2 -0
- package/dist/cjs/{version-plugin-DBdqn2Rn.js.map → version-plugin-B6tVqztE.js.map} +1 -1
- package/dist/client/index.html +1 -3
- package/dist/client/request-inspector.html +90 -79
- package/dist/client/variables-editor.html +47 -40
- package/dist/esm/auth.provider-sKqGOS5N.js +2 -0
- package/dist/esm/auth.provider-sKqGOS5N.js.map +1 -0
- package/dist/esm/cli.js +1 -1
- package/dist/esm/cli.js.map +1 -1
- package/dist/esm/index-DEFt8X6C.js +2 -0
- package/dist/esm/index-DEFt8X6C.js.map +1 -0
- package/dist/esm/index.js +1 -1
- package/dist/esm/internal.middleware-BVjskCUz.js +2 -0
- package/dist/esm/internal.middleware-BVjskCUz.js.map +1 -0
- package/dist/esm/migrate-BxksV7OV.js +2 -0
- package/dist/esm/{migrate-CCBRuVfj.js.map → migrate-BxksV7OV.js.map} +1 -1
- package/dist/esm/plugin.js +1 -1
- package/dist/esm/plugin.js.map +1 -1
- package/dist/esm/version-manifest-CGzLQLmu.js +2 -0
- package/dist/esm/{version-manifest-CyzmnFOe.js.map → version-manifest-CGzLQLmu.js.map} +1 -1
- package/dist/esm/version-plugin-Byv2M38F.js +2 -0
- package/dist/esm/{version-plugin-6rxIgQ-I.js.map → version-plugin-Byv2M38F.js.map} +1 -1
- package/package.json +1 -1
- package/dist/cjs/auth.provider-fI0tFsf5.js +0 -2
- package/dist/cjs/auth.provider-fI0tFsf5.js.map +0 -1
- package/dist/cjs/index-Ty1d2YCg.js +0 -2
- package/dist/cjs/index-Ty1d2YCg.js.map +0 -1
- package/dist/cjs/migrate-Gi9k9cLw.js +0 -2
- package/dist/cjs/request-capture.middleware-6DhFLyIz.js +0 -2
- package/dist/cjs/request-capture.middleware-6DhFLyIz.js.map +0 -1
- package/dist/cjs/version-plugin-DBdqn2Rn.js +0 -2
- package/dist/esm/auth.provider-DDUsu1H1.js +0 -2
- package/dist/esm/auth.provider-DDUsu1H1.js.map +0 -1
- package/dist/esm/index-tD-QICGk.js +0 -2
- package/dist/esm/index-tD-QICGk.js.map +0 -1
- package/dist/esm/migrate-CCBRuVfj.js +0 -2
- package/dist/esm/request-capture.middleware-VElwjU1W.js +0 -2
- package/dist/esm/request-capture.middleware-VElwjU1W.js.map +0 -1
- package/dist/esm/version-manifest-CyzmnFOe.js +0 -2
- package/dist/esm/version-plugin-6rxIgQ-I.js +0 -2
|
@@ -1,87 +1,98 @@
|
|
|
1
|
-
<!
|
|
1
|
+
<!doctype html>
|
|
2
2
|
<html lang="en">
|
|
3
|
-
<head>
|
|
4
|
-
<meta charset="utf-8"
|
|
5
|
-
<meta name="viewport" content="width=device-width,initial-scale=1"
|
|
6
|
-
<title>Request Inspector — pp-dev</title>
|
|
7
|
-
<script>
|
|
8
|
-
// Set the stored theme override before first paint, so switching pages/reloading doesn't
|
|
9
|
-
// flash the OS-default theme before settling on the user's explicit choice.
|
|
10
|
-
try {
|
|
11
|
-
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8" />
|
|
5
|
+
<meta name="viewport" content="width=device-width,initial-scale=1" />
|
|
6
|
+
<title>Request Inspector — pp-dev</title>
|
|
7
|
+
<script>
|
|
8
|
+
// Set the stored theme override before first paint, so switching pages/reloading doesn't
|
|
9
|
+
// flash the OS-default theme before settling on the user's explicit choice.
|
|
10
|
+
try {
|
|
11
|
+
var ppDevStoredTheme = localStorage.getItem('pp-dev-info-theme');
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
} catch (e) {}
|
|
17
|
-
</script>
|
|
18
|
-
<link rel="stylesheet" href="/@pp-dev/inspector/request-inspector.css"
|
|
19
|
-
<script type="module" src="/@pp-dev/inspector/request-inspector.js"></script>
|
|
20
|
-
</head>
|
|
21
|
-
<body data-capture-limit="{{captureLimit}}">
|
|
22
|
-
<div class="app">
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
</div>
|
|
31
|
-
<div class="toolbar-spacer"></div>
|
|
32
|
-
<div class="theme-switch" id="theme-switch">
|
|
33
|
-
<button data-theme-choice="auto" aria-pressed="false">Auto</button>
|
|
34
|
-
<button data-theme-choice="dark" aria-pressed="false">Dark</button>
|
|
35
|
-
<button data-theme-choice="light" aria-pressed="false">Light</button>
|
|
36
|
-
</div>
|
|
37
|
-
<button class="btn btn-sm btn-danger" data-action="clear">Clear</button>
|
|
38
|
-
</div>
|
|
39
|
-
<div class="split">
|
|
40
|
-
<div class="pane-list">
|
|
41
|
-
<div class="filter-bar" id="filter-bar">
|
|
42
|
-
<input class="filter-input" id="search-input" placeholder="Filter by URL…" />
|
|
43
|
-
<div class="filter-selects">
|
|
44
|
-
<select class="filter-select" id="method-select">
|
|
45
|
-
<option value="">All</option>
|
|
46
|
-
<option>GET</option><option>POST</option><option>PUT</option>
|
|
47
|
-
<option>PATCH</option><option>DELETE</option><option>HEAD</option>
|
|
48
|
-
</select>
|
|
49
|
-
<select class="filter-select" id="status-select">
|
|
50
|
-
<option value="">All</option>
|
|
51
|
-
<option value="2">2xx</option><option value="3">3xx</option>
|
|
52
|
-
<option value="4">4xx</option><option value="5">5xx</option>
|
|
53
|
-
</select>
|
|
54
|
-
<select class="filter-select" id="source-select">
|
|
55
|
-
<option value="">All</option>
|
|
56
|
-
<option value="local">Local</option>
|
|
57
|
-
<option value="proxy">Proxy</option>
|
|
58
|
-
<option value="proxy-cache">Cached</option>
|
|
59
|
-
</select>
|
|
60
|
-
<select class="filter-select" id="user-select" title="The user whose tab made the request" style="display:none">
|
|
61
|
-
<option value="">All users</option>
|
|
62
|
-
</select>
|
|
13
|
+
if (ppDevStoredTheme === 'dark' || ppDevStoredTheme === 'light') {
|
|
14
|
+
document.documentElement.setAttribute('data-pp-dev-theme', ppDevStoredTheme);
|
|
15
|
+
}
|
|
16
|
+
} catch (e) {}
|
|
17
|
+
</script>
|
|
18
|
+
<link rel="stylesheet" href="/@pp-dev/inspector/request-inspector.css" />
|
|
19
|
+
<script type="module" src="/@pp-dev/inspector/request-inspector.js"></script>
|
|
20
|
+
</head>
|
|
21
|
+
<body data-capture-limit="{{captureLimit}}">
|
|
22
|
+
<div class="app">
|
|
23
|
+
<div class="toolbar">
|
|
24
|
+
<span class="toolbar-title">🔍 Request Inspector</span>
|
|
25
|
+
<span class="live-dot" title="Live"></span>
|
|
26
|
+
<span class="toolbar-badge" id="req-count">0 requests</span>
|
|
27
|
+
<div class="mem-bar-wrap">
|
|
28
|
+
<div class="mem-bar"><div class="mem-bar-fill" id="mem-fill" style="width: 0%"></div></div>
|
|
29
|
+
<span id="mem-text">0 B / 1 GB</span>
|
|
63
30
|
</div>
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
<
|
|
68
|
-
<
|
|
69
|
-
<div style="font-size:11px">Requests to the dev server will appear here</div>
|
|
31
|
+
<div class="toolbar-spacer"></div>
|
|
32
|
+
<div class="theme-switch" id="theme-switch">
|
|
33
|
+
<button data-theme-choice="auto" aria-pressed="false">Auto</button>
|
|
34
|
+
<button data-theme-choice="dark" aria-pressed="false">Dark</button>
|
|
35
|
+
<button data-theme-choice="light" aria-pressed="false">Light</button>
|
|
70
36
|
</div>
|
|
37
|
+
<button class="btn btn-sm btn-danger" data-action="clear">Clear</button>
|
|
71
38
|
</div>
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
39
|
+
<div class="split">
|
|
40
|
+
<div class="pane-list">
|
|
41
|
+
<div class="filter-bar" id="filter-bar">
|
|
42
|
+
<input class="filter-input" id="search-input" placeholder="Filter by URL…" />
|
|
43
|
+
<div class="filter-selects">
|
|
44
|
+
<select class="filter-select" id="method-select">
|
|
45
|
+
<option value="">All</option>
|
|
46
|
+
<option>GET</option>
|
|
47
|
+
<option>POST</option>
|
|
48
|
+
<option>PUT</option>
|
|
49
|
+
<option>PATCH</option>
|
|
50
|
+
<option>DELETE</option>
|
|
51
|
+
<option>HEAD</option>
|
|
52
|
+
</select>
|
|
53
|
+
<select class="filter-select" id="status-select">
|
|
54
|
+
<option value="">All</option>
|
|
55
|
+
<option value="2">2xx</option>
|
|
56
|
+
<option value="3">3xx</option>
|
|
57
|
+
<option value="4">4xx</option>
|
|
58
|
+
<option value="5">5xx</option>
|
|
59
|
+
</select>
|
|
60
|
+
<select class="filter-select" id="source-select">
|
|
61
|
+
<option value="">All</option>
|
|
62
|
+
<option value="local">Local</option>
|
|
63
|
+
<option value="proxy">Proxy</option>
|
|
64
|
+
<option value="proxy-cache">Cached</option>
|
|
65
|
+
</select>
|
|
66
|
+
<select
|
|
67
|
+
class="filter-select"
|
|
68
|
+
id="user-select"
|
|
69
|
+
title="The user whose tab made the request"
|
|
70
|
+
style="display: none"
|
|
71
|
+
>
|
|
72
|
+
<option value="">All users</option>
|
|
73
|
+
</select>
|
|
74
|
+
</div>
|
|
75
|
+
</div>
|
|
76
|
+
<div class="req-list" id="req-list">
|
|
77
|
+
<div class="empty-state">
|
|
78
|
+
<div class="empty-icon">📡</div>
|
|
79
|
+
<div>No requests captured yet</div>
|
|
80
|
+
<div style="font-size: 11px">Requests to the dev server will appear here</div>
|
|
81
|
+
</div>
|
|
82
|
+
</div>
|
|
83
|
+
</div>
|
|
84
|
+
<div class="pane-detail">
|
|
85
|
+
<div class="detail-empty" id="detail-empty">
|
|
86
|
+
<div style="font-size: 32px; opacity: 0.3">←</div>
|
|
87
|
+
<div>Select a request to inspect</div>
|
|
88
|
+
</div>
|
|
89
|
+
<div id="detail-panel" style="display: none; flex: 1; flex-direction: column; overflow: hidden">
|
|
90
|
+
<div class="detail-info-bar" id="detail-info"></div>
|
|
91
|
+
<div class="info-url" id="detail-url"></div>
|
|
92
|
+
<div class="detail-scroll" id="detail-scroll"></div>
|
|
93
|
+
</div>
|
|
94
|
+
</div>
|
|
82
95
|
</div>
|
|
83
96
|
</div>
|
|
84
|
-
</
|
|
85
|
-
</div>
|
|
86
|
-
</body>
|
|
97
|
+
</body>
|
|
87
98
|
</html>
|
|
@@ -1,44 +1,51 @@
|
|
|
1
|
-
<!
|
|
1
|
+
<!doctype html>
|
|
2
2
|
<html lang="en">
|
|
3
|
-
<head>
|
|
4
|
-
<meta charset="utf-8"
|
|
5
|
-
<meta name="viewport" content="width=device-width,initial-scale=1"
|
|
6
|
-
<title>Variables Editor — pp-dev</title>
|
|
7
|
-
<script>
|
|
8
|
-
// Set the stored theme override before first paint, so switching pages/reloading doesn't
|
|
9
|
-
// flash the OS-default theme before settling on the user's explicit choice (see setTheme()).
|
|
10
|
-
try {
|
|
11
|
-
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8" />
|
|
5
|
+
<meta name="viewport" content="width=device-width,initial-scale=1" />
|
|
6
|
+
<title>Variables Editor — pp-dev</title>
|
|
7
|
+
<script>
|
|
8
|
+
// Set the stored theme override before first paint, so switching pages/reloading doesn't
|
|
9
|
+
// flash the OS-default theme before settling on the user's explicit choice (see setTheme()).
|
|
10
|
+
try {
|
|
11
|
+
var ppDevStoredTheme = localStorage.getItem('pp-dev-info-theme');
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
} catch (e) {}
|
|
17
|
-
</script>
|
|
18
|
-
<link rel="stylesheet" href="/@pp-dev/variables-editor/variables-editor.css"
|
|
19
|
-
<script type="module" src="/@pp-dev/variables-editor/variables-editor.js"></script>
|
|
20
|
-
</head>
|
|
21
|
-
<!-- data-template-less: "true" when the page has no template; the CSS then hides .ve-template-only. -->
|
|
22
|
-
<body data-template-less="{{templateLess}}">
|
|
23
|
-
<div class="app">
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
13
|
+
if (ppDevStoredTheme === 'dark' || ppDevStoredTheme === 'light') {
|
|
14
|
+
document.documentElement.setAttribute('data-pp-dev-theme', ppDevStoredTheme);
|
|
15
|
+
}
|
|
16
|
+
} catch (e) {}
|
|
17
|
+
</script>
|
|
18
|
+
<link rel="stylesheet" href="/@pp-dev/variables-editor/variables-editor.css" />
|
|
19
|
+
<script type="module" src="/@pp-dev/variables-editor/variables-editor.js"></script>
|
|
20
|
+
</head>
|
|
21
|
+
<!-- data-template-less: "true" when the page has no template; the CSS then hides .ve-template-only. -->
|
|
22
|
+
<body data-template-less="{{templateLess}}">
|
|
23
|
+
<div class="app">
|
|
24
|
+
<div class="toolbar">
|
|
25
|
+
<span class="toolbar-title">🧩 Variables Editor</span>
|
|
26
|
+
<div class="tabs ve-template-only">
|
|
27
|
+
<button class="tab" id="tab-schema" data-action="switch-tab" data-tab="schema">Schema</button>
|
|
28
|
+
<button class="tab" id="tab-values" data-action="switch-tab" data-tab="values">Values</button>
|
|
29
|
+
</div>
|
|
30
|
+
<span class="ve-loading-indicator ve-template-only" id="loading-indicator" style="display: none"
|
|
31
|
+
><span class="ve-loading-dot"></span>Refreshing…</span
|
|
32
|
+
>
|
|
33
|
+
<div class="toolbar-spacer"></div>
|
|
34
|
+
<button class="btn btn-sm ve-template-only" data-action="refresh">↻ Refresh</button>
|
|
35
|
+
<button class="btn btn-sm btn-primary ve-template-only" id="save-btn" data-action="save">Save</button>
|
|
36
|
+
<div class="theme-switch" id="theme-switch">
|
|
37
|
+
<button data-theme-choice="auto" aria-pressed="false">Auto</button>
|
|
38
|
+
<button data-theme-choice="dark" aria-pressed="false">Dark</button>
|
|
39
|
+
<button data-theme-choice="light" aria-pressed="false">Light</button>
|
|
40
|
+
</div>
|
|
41
|
+
</div>
|
|
42
|
+
<div class="content" id="content"></div>
|
|
29
43
|
</div>
|
|
30
|
-
<
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
<button data-theme-choice="light" aria-pressed="false">Light</button>
|
|
38
|
-
</div>
|
|
39
|
-
</div>
|
|
40
|
-
<div class="content" id="content"></div>
|
|
41
|
-
</div>
|
|
42
|
-
<button class="btn btn-sm btn-primary local-update-btn ve-template-only" id="local-update-btn" hidden data-action="update-local-values"></button>
|
|
43
|
-
</body>
|
|
44
|
+
<button
|
|
45
|
+
class="btn btn-sm btn-primary local-update-btn ve-template-only"
|
|
46
|
+
id="local-update-btn"
|
|
47
|
+
hidden
|
|
48
|
+
data-action="update-local-values"
|
|
49
|
+
></button>
|
|
50
|
+
</body>
|
|
44
51
|
</html>
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{createColors as e}from"picocolors";import t from"node:path";import*as i from"fs";import{readFileSync as s,existsSync as n}from"fs";import*as r from"path";import{resolve as o}from"path";import a from"ejs";import{fileURLToPath as d}from"url";import{isIP as p}from"node:net";import{createLogger as c}from"vite";const l=o("undefined"!=typeof __filename&&__filename||d(import.meta.url),"../../.."),u=o("undefined"!=typeof __filename&&__filename||d(import.meta.url),"../.."),m=n(o(l,"package.json"))?l:u,f=o(m,"dist/client/client.js"),{version:h,name:v}=JSON.parse(s(o(m,"package.json")).toString()),g=h,w=v,y="/p",b="/pt",E="/pl",$="PP_DEV_NEXT_BUILD",j="PP_DEV_NEXT_BUILD_DIST_DIR",P=[".pp-dev.config.js",".pp-dev.config.cjs",".pp-dev.config.mjs",".pp-dev.config.ts",".pp-dev.config.cts",".pp-dev.config.mts",".pp-dev.config.json","pp-dev.config.js","pp-dev.config.cjs","pp-dev.config.mjs","pp-dev.config.ts","pp-dev.config.cts","pp-dev.config.mts","pp-dev.config.json"],S="info";let L,_;function k(){return L??={level:S,logger:c(S)},L.logger}function A(e){return void 0!==e&&e!==L?.level&&(L={level:e,logger:c(e)}),_??={info:(e,t)=>k().info(e,t),warn:(e,t)=>k().warn(e,t),warnOnce:(e,t)=>k().warnOnce(e,t),error:(e,t)=>k().error(e,t),clearScreen:e=>k().clearScreen(e),hasErrorLogged:e=>k().hasErrorLogged(e),get hasWarned(){return k().hasWarned},set hasWarned(e){k().hasWarned=e}},_}const D=e();function x(e,i){if(!e||e.includes("\0")||t.posix.isAbsolute(e)||t.win32.isAbsolute(e)||t.win32.parse(e).root)throw new Error(`[pp-dev] ${i} must be a relative path inside its output directory.`);const s=t.posix.normalize(e.replace(/\\/g,"/"));if("."===s||".."===s||s.startsWith("../"))throw new Error(`[pp-dev] ${i} must stay inside its output directory.`);return s}function N(e){return x(`${e.replace(/^@/,"").replace(/[\\/]+/g,"-")}.zip`,"default ZIP output file name")}function T(e,i,s){return t.resolve(e,s||i)}function R(e,i,s){const n=x(i,s),r=t.resolve(e),o=t.resolve(r,...n.split("/")),a=t.relative(r,o);if(".."===a||a.startsWith(`..${t.sep}`)||t.isAbsolute(a))throw new Error(`[pp-dev] ${s} must resolve inside its output directory.`);return o}const O=["top-left","top-right","bottom-left","bottom-right"],C=2147483647;function H(e,t){const i=e.mi?.mode??"standalone",s=e.app?.type??"template",n=e.mi?.apiVersion??7,r=e.mi?.url??process.env.MI_BACKEND_URL;if(!(e.app?.name??t))throw new Error("[pp-dev] app.name is required (or set package.json#name)");const o=e.sync?.maxBackups;if(void 0!==o&&!1!==o&&!(Number.isInteger(o)&&o>=0))throw new Error(`[pp-dev] sync.maxBackups must be a whole number ≥ 0 or false (0 and false keep every backup), got ${JSON.stringify(o)}`);const a=e.sync?.buildTimeoutMs;if(void 0!==a&&!(Number.isInteger(a)&&a>0&&a<=C))throw new Error(`[pp-dev] sync.buildTimeoutMs must be a whole number of milliseconds between 1 and 2147483647, got ${JSON.stringify(a)}`);if(e.mi?.include&&"standalone"!==i)throw console.warn('[pp-dev] mi.include is only valid when mi.mode is "standalone"'),new Error('[pp-dev] mi.include requires mi.mode to be "standalone"');if(!r){if("embedding"===i||"template"===s)throw new Error('[pp-dev] mi.url is required when mi.mode is "embedding" or app.type is "template"');"standalone"===i&&"page"===s&&console.warn("[pp-dev] mi.url is not set — dev server will run without a backend proxy")}if("template"===s&&!e.app?.id)throw new Error('[pp-dev] app.id is required when app.type is "template"');if("page"===s&&r&&("standalone"===i||n>=7)&&!e.app?.id)throw new Error('[pp-dev] app.id is required when backend page data is loaded for app.type "page"');if(void 0!==e.devPanel?.position&&!O.includes(e.devPanel.position))throw new Error(`[pp-dev] devPanel.position must be one of: ${O.join(", ")}`);const d=e.server?.allowedHosts;if(!(void 0===d||!0===d||Array.isArray(d)&&d.every(e=>"string"==typeof e&&""!==e.trim())))throw new Error(`[pp-dev] server.allowedHosts must be a list of host names or true, got ${JSON.stringify(d)}`)}function B(e,t){const{mi:i={},app:s={},proxy:n={},build:r={},sync:o={},inspector:a={},devPanel:d={},users:p={},server:c={}}=e,l=i.mode??"standalone",u=s.type??"template",m=i.apiVersion??7,f="standalone"===l;let h=!1;"top-bar"===i.include?h=!0:"shared-components"===i.include&&(h={addSharedComponentsScripts:!0,addRootElement:!1});const v="page"===u,g=s.name??t;if(!g)throw new Error("[pp-dev] app.name is required (or set package.json#name)");const w="VERSION-v{packageversion}-{currentDate}.json";let y;const b=r.zip;let E;y=!1!==b&&(!0===b||void 0===b?{outFileName:N(g),outDir:"dist-zip"}:{outFileName:x(b.fileName??N(g),"build.zip.fileName"),outDir:b.outDir??"dist-zip",...b.inDir?{inDir:b.inDir}:{}});const $=r.versionFile;let j;E=!1!==$&&(!0===$||void 0===$?{versionFileTemplate:w,enabled:!0}:{versionFileTemplate:x($.fileNameTemplate??w,"build.versionFile.fileNameTemplate"),enabled:$.enabled??!0});const P=r.imageOptimisations;return j=!1!==P&&(!0===P||void 0===P?{}:P),{templateName:g,backendBaseURL:i.url??process.env.MI_BACKEND_URL,appId:s.id,templateLess:v,miHudLess:f,integrateMiTopBar:h,enableProxyCache:n.cache??!0,proxyCacheTTL:n.cacheTtl??6e5,disableSSLValidation:n.tls?.allowSelfSigned??!1,imageOptimizer:j,outDir:r.outDir??"dist",distZip:y,versionPlugin:E,syncBackupsDir:o.backupsDir??"backups",syncMaxBackups:o.maxBackups,syncBuildTimeoutMs:o.buildTimeoutMs,v7Features:m>=7,personalAccessToken:i.token??process.env.MI_ACCESS_TOKEN,inspectorEnabled:a.enabled??!0,inspectorMaxMemory:a.maxMemory??1073741824,inspectorCaptureLimit:a.captureLimit??10485760,devPanelPosition:d.position??"bottom-right",devPanelHidden:d.hidden??!1,devPanelAutoHide:d.autoHide??!1,persistUsers:p.persist??!1,allowedHosts:!0===c.allowedHosts||(c.allowedHosts??[]).map(e=>e.trim().toLowerCase())}}const I=Object.freeze({__proto__:null,normalizePPDevConfig:B,validatePPDevConfig:H}),W=r.dirname(f),M=r.join(W,"index.html");let U=null;function z(e){return{css:r.posix.join(e,w,"client/client.css"),js:r.posix.join(e,w,"client/client.js")}}function F(e){return function(){if(U)return U;const e=i.readFileSync(M,{encoding:"utf8"});return U=a.compile(e,{openDelimiter:"{",closeDelimiter:"}",async:!1,rmWhitespace:!0,compileDebug:!1}),U}()({PACKAGE_NAME:w,VERSION:g,backendBaseURL:e.backendBaseURL,templateLess:e.templateLess,appId:e.appId,canSync:e.canSync??!0,devPanelPosition:e.devPanelPosition??"bottom-right",devPanelHidden:e.devPanelHidden??!1,devPanelAutoHide:e.devPanelAutoHide??!1})}function V(e,t,i){if(!/<\/?(html|body|head)\b/i.test(e))return e;const{css:s,js:n}=z(t),r=F(i),o=`<link rel="stylesheet" href="${s}">`,a=`${r}${`<script type="module" src="${n}"><\/script>`}`;let d=e,p=!1;if(/<\/head>/i.test(d)&&(d=d.replace(/<\/head>/i,e=>`${o}${e}`),p=!0),/<body[^>]*>/i.test(d)){const e=p?"":o;d=d.replace(/<body[^>]*>/i,t=>`${t}${e}${a}`)}else d=`${p?"":o}${d}${a}`;return d}const q={".js":"text/javascript; charset=utf-8",".css":"text/css; charset=utf-8",".map":"application/json; charset=utf-8"};function J(e){const t=r.posix.join(e,w,"client")+"/",s=new Set(["client.js","client.css","client.js.map","client.css.map"]);return(e,n,o)=>{const a=(e.url??"").split("?")[0];if(!a.startsWith(t))return void o();const d=a.slice(t.length);if(!s.has(d))return void o();const p=r.join(W,d);i.readFile(p,(e,t)=>{e?o():(n.statusCode=200,n.setHeader("Content-Type",q[r.extname(d)]??"application/octet-stream"),n.setHeader("Cache-Control","no-cache"),n.end(t))})}}const K=new Set(["GET","HEAD","OPTIONS"]);function G(e,t){if(void 0===e||!0===t)return!0;const i=function(e){const t=e.trim().toLowerCase();if(t.startsWith("[")){const e=t.indexOf("]");return e>0&&6===p(t.slice(1,e))?{ip:!0}:void 0}const i=t.replace(/:\d*$/,"");if(i&&!i.includes(":"))return 4===p(i)?{ip:!0}:{hostname:i}}(e);if(void 0===i)return!1;if("ip"in i)return!0;const{hostname:s}=i;return"localhost"===s||s.endsWith(".localhost")||function(e,t){return t.some(t=>t===e||t.startsWith(".")&&(t.slice(1)===e||e.endsWith(t)))}(s,t)}function X(e){const t=JSON.stringify((e??"").replace(/:\d*$/,""));return`Blocked by pp-dev: this host (${t}) is not allowed. To allow it, add ${t} to server.allowedHosts in the pp-dev config.`}function Z(e){return!0===e?[]:e.filter(e=>!e.startsWith("."))}function Q(e,t=[]){const i=e.headers.origin,s=e.headers.host;if("string"==typeof i){if("null"===i)return'Origin "null" (a sandboxed or file:// page)';let e;try{e=new URL(i)}catch{return`unreadable Origin "${i}"`}if("localhost"===(n=e.hostname)||n.endsWith(".localhost")||"[::1]"===n||/^127(?:\.\d{1,3}){3}$/.test(n)||Z(t).includes(e.hostname))return null;const r=s?function(e,t){try{return new URL(`${e}//${t}`).host}catch{return}}(e.protocol,s):void 0;return r&&e.host===r?null:`Origin ${e.origin} is neither this dev server (${s??"no Host"}) nor this machine`}var n;const r=e.headers["sec-fetch-site"];return K.has((e.method??"GET").toUpperCase())||"cross-site"!==r?null:"sent from a cross-site page"}function Y(e=[]){return(t,i,s)=>{const n=Q(t,e);n?i.status(403).json({error:`Blocked by pp-dev: ${n}.`}):s()}}class ee{state={isAuthenticated:!1,isRedirected:!1};listeners=new Set;getState(){return{...this.state}}isAuthenticated(){return this.state.isAuthenticated}isRedirected(){return this.state.isRedirected}setAuthenticated(e){this.state.isAuthenticated=e,this.notifyListeners()}setRedirected(e){this.state.isRedirected=e,this.notifyListeners()}updateState(e){void 0!==e.isAuthenticated&&(this.state.isAuthenticated=e.isAuthenticated),void 0!==e.isRedirected&&(this.state.isRedirected=e.isRedirected),this.notifyListeners()}reset(){this.state={isAuthenticated:!1,isRedirected:!1},this.notifyListeners()}subscribe(e){return this.listeners.add(e),()=>{this.listeners.delete(e)}}notifyListeners(){this.listeners.forEach(e=>{try{e(this.getState())}catch(e){A().error(`Error in auth state listener: ${e instanceof Error?e.stack??e.message:String(e)}`)}})}}const te=new ee;export{ee as A,I as B,P,g as V,D as a,Q as b,A as c,y as d,E as e,b as f,V as g,X as h,G as i,$ as j,N as k,R as l,f as m,B as n,z as o,F as p,w as q,T as r,m as s,x as t,Z as u,H as v,j as w,te as x,J as y,Y as z};
|
|
2
|
+
//# sourceMappingURL=auth.provider-sKqGOS5N.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.provider-sKqGOS5N.js","sources":["../../../src/constants.ts","../../../src/lib/logger.ts","../../../src/lib/helpers/color.helper.ts","../../../src/lib/output-path.ts","../../../src/lib/pp-dev-config.ts","../../../src/lib/dev-panel.ts","../../../src/lib/helpers/origin-guard.ts","../../../src/lib/auth.provider.ts"],"sourcesContent":[null,null,null,null,null,null,null,null],"names":["afterBundlePath","resolve","__filename","fileURLToPath","url","beforeBundlePath","PP_DEV_PACKAGE_DIR","existsSync","PP_DEV_CLIENT_ENTRY","version","name","JSON","parse","readFileSync","toString","VERSION","PACKAGE_NAME","PATH_PAGE_PREFIX","PATH_TEMPLATE_PREFIX","PATH_TEMPLATE_LOCAL_PREFIX","PP_DEV_NEXT_BUILD_ENV_VAR","PP_DEV_NEXT_BUILD_DIST_DIR_ENV_VAR","PP_DEV_CONFIG_NAMES","DEFAULT_LEVEL","current","shared","active","level","logger","createViteLogger","createLogger","undefined","info","msg","options","warn","warnOnce","error","clearScreen","type","hasErrorLogged","hasWarned","value","colors","createColors","normalizeRelativeOutputPath","relativePath","optionName","includes","path","posix","isAbsolute","win32","root","Error","normalized","normalize","replace","startsWith","createDefaultZipFileName","appName","resolveZipSourceDir","projectRoot","outDir","inDir","resolveOutputFilePath","directory","fileName","safeRelativePath","resolvedDirectory","resolvedFile","split","relativeToDirectory","relative","sep","DEV_PANEL_POSITIONS","MAX_TIMER_DELAY_MS","validatePPDevConfig","config","templateName","miMode","mi","mode","appType","app","apiVersion","miUrl","process","env","MI_BACKEND_URL","maxBackups","sync","Number","isInteger","stringify","buildTimeoutMs","include","console","id","devPanel","position","join","allowedHosts","server","Array","isArray","every","host","trim","normalizePPDevConfig","proxy","build","inspector","users","miHudLess","integrateMiTopBar","addSharedComponentsScripts","addRootElement","templateLess","resolvedName","defaultVersionFileTemplate","distZip","zipCfg","zip","versionPlugin","outFileName","vfCfg","versionFile","imageOptimizer","versionFileTemplate","enabled","fileNameTemplate","imgCfg","imageOptimisations","backendBaseURL","appId","enableProxyCache","cache","proxyCacheTTL","cacheTtl","disableSSLValidation","tls","allowSelfSigned","syncBackupsDir","backupsDir","syncMaxBackups","syncBuildTimeoutMs","v7Features","personalAccessToken","token","MI_ACCESS_TOKEN","inspectorEnabled","inspectorMaxMemory","maxMemory","inspectorCaptureLimit","captureLimit","devPanelPosition","devPanelHidden","hidden","devPanelAutoHide","autoHide","persistUsers","persist","map","toLowerCase","CLIENT_DIST_DIR","dirname","TEMPLATE_PATH","compiledTemplate","getDevPanelAssetPaths","base","css","js","renderDevPanelMarkup","data","templateContent","fs","encoding","ejs","compile","openDelimiter","closeDelimiter","async","rmWhitespace","compileDebug","getTemplate","template","canSync","injectDevPanel","html","test","panelMarkup","linkTag","bodyPrepend","result","linkInjected","headEnd","head","bodyStart","CONTENT_TYPES","createDevPanelAssetMiddleware","assetPrefix","allowed","Set","req","res","next","pathname","slice","length","has","filePath","readFile","err","content","statusCode","setHeader","extname","end","SAFE_METHODS","isHostAllowed","named","trimmed","indexOf","isIP","ip","hostname","readHostHeader","endsWith","some","matchesAllowedHost","hostNotAllowedMessage","exactAllowedHosts","filter","crossOriginReason","origin","headers","originUrl","URL","requestHost","scheme","normalizeHost","protocol","fetchSite","method","toUpperCase","createOriginGuard","reason","status","json","AuthProvider","state","isAuthenticated","isRedirected","listeners","getState","this","setAuthenticated","authenticated","notifyListeners","setRedirected","redirected","updateState","updates","reset","subscribe","listener","add","delete","forEach","stack","message","String","authProvider"],"mappings":"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"}
|