@lark-apaas/coding-preset-vite-react 0.1.1-alpha.0 → 0.1.1
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 +13 -0
- package/lib/index.d.ts +52 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +410 -0
- package/lib/index.js.map +1 -0
- package/lib/plugins/capabilities.d.ts +23 -0
- package/lib/plugins/capabilities.d.ts.map +1 -0
- package/lib/plugins/capabilities.js +151 -0
- package/lib/plugins/capabilities.js.map +1 -0
- package/lib/plugins/dev-logs.d.ts +44 -0
- package/lib/plugins/dev-logs.d.ts.map +1 -0
- package/lib/plugins/dev-logs.js +544 -0
- package/lib/plugins/dev-logs.js.map +1 -0
- package/lib/plugins/error-overlay.d.ts +19 -0
- package/lib/plugins/error-overlay.d.ts.map +1 -0
- package/lib/plugins/error-overlay.js +136 -0
- package/lib/plugins/error-overlay.js.map +1 -0
- package/lib/plugins/fonts-mirror.d.ts +14 -0
- package/lib/plugins/fonts-mirror.d.ts.map +1 -0
- package/lib/plugins/fonts-mirror.js +70 -0
- package/lib/plugins/fonts-mirror.js.map +1 -0
- package/lib/plugins/health.d.ts +19 -0
- package/lib/plugins/health.d.ts.map +1 -0
- package/lib/plugins/health.js +36 -0
- package/lib/plugins/health.js.map +1 -0
- package/lib/plugins/hmr-timing.d.ts +13 -0
- package/lib/plugins/hmr-timing.d.ts.map +1 -0
- package/lib/plugins/hmr-timing.js +93 -0
- package/lib/plugins/hmr-timing.js.map +1 -0
- package/lib/plugins/html-minify.d.ts +18 -0
- package/lib/plugins/html-minify.d.ts.map +1 -0
- package/lib/plugins/html-minify.js +100 -0
- package/lib/plugins/html-minify.js.map +1 -0
- package/lib/plugins/module-alias.d.ts +12 -0
- package/lib/plugins/module-alias.d.ts.map +1 -0
- package/lib/plugins/module-alias.js +78 -0
- package/lib/plugins/module-alias.js.map +1 -0
- package/lib/plugins/og-meta.d.ts +21 -0
- package/lib/plugins/og-meta.d.ts.map +1 -0
- package/lib/plugins/og-meta.js +60 -0
- package/lib/plugins/og-meta.js.map +1 -0
- package/lib/plugins/polyfill.d.ts +11 -0
- package/lib/plugins/polyfill.d.ts.map +1 -0
- package/lib/plugins/polyfill.js +140 -0
- package/lib/plugins/polyfill.js.map +1 -0
- package/lib/plugins/routes.d.ts +26 -0
- package/lib/plugins/routes.d.ts.map +1 -0
- package/lib/plugins/routes.js +265 -0
- package/lib/plugins/routes.js.map +1 -0
- package/lib/plugins/slardar.d.ts +24 -0
- package/lib/plugins/slardar.d.ts.map +1 -0
- package/lib/plugins/slardar.js +74 -0
- package/lib/plugins/slardar.js.map +1 -0
- package/lib/plugins/static-assets.d.ts +10 -0
- package/lib/plugins/static-assets.d.ts.map +1 -0
- package/lib/plugins/static-assets.js +307 -0
- package/lib/plugins/static-assets.js.map +1 -0
- package/lib/plugins/view-context.d.ts +22 -0
- package/lib/plugins/view-context.d.ts.map +1 -0
- package/lib/plugins/view-context.js +165 -0
- package/lib/plugins/view-context.js.map +1 -0
- package/lib/plugins/vite-client-patch.d.ts +4 -0
- package/lib/plugins/vite-client-patch.d.ts.map +1 -0
- package/lib/plugins/vite-client-patch.js +37 -0
- package/lib/plugins/vite-client-patch.js.map +1 -0
- package/lib/plugins/ws-watchdog.d.ts +22 -0
- package/lib/plugins/ws-watchdog.d.ts.map +1 -0
- package/lib/plugins/ws-watchdog.js +103 -0
- package/lib/plugins/ws-watchdog.js.map +1 -0
- package/lib/polyfills/index.d.ts +15 -0
- package/lib/polyfills/index.d.ts.map +1 -0
- package/lib/polyfills/index.js +36 -0
- package/lib/polyfills/index.js.map +1 -0
- package/lib/utils/normalize-base-path.d.ts +37 -0
- package/lib/utils/normalize-base-path.d.ts.map +1 -0
- package/lib/utils/normalize-base-path.js +57 -0
- package/lib/utils/normalize-base-path.js.map +1 -0
- package/lib/utils/snapdom-proxy.d.ts +12 -0
- package/lib/utils/snapdom-proxy.d.ts.map +1 -0
- package/lib/utils/snapdom-proxy.js +75 -0
- package/lib/utils/snapdom-proxy.js.map +1 -0
- package/package.json +9 -15
- package/dist/index.d.ts +0 -320
- package/dist/index.js +0 -1941
- package/dist/index.js.map +0 -1
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.slardarPlugin = slardarPlugin;
|
|
4
|
+
function buildSlardarScript(bid, globalName) {
|
|
5
|
+
return `
|
|
6
|
+
const slardarScript = document.createElement('script');
|
|
7
|
+
slardarScript.src = 'https://lf3-short.ibytedapm.com/slardar/fe/sdk-web/browser.cn.js?bid=${bid}&globalName=${globalName}';
|
|
8
|
+
slardarScript.crossOrigin = 'anonymous';
|
|
9
|
+
slardarScript.onload = function() {
|
|
10
|
+
if (window.${globalName}) {
|
|
11
|
+
window.${globalName}('context.merge', {
|
|
12
|
+
tenantId: window.tenantId ?? '',
|
|
13
|
+
appId: window.appId ?? '',
|
|
14
|
+
});
|
|
15
|
+
window.${globalName}('init', {
|
|
16
|
+
bid: '${bid}',
|
|
17
|
+
env: window.ENVIRONMENT || 'online',
|
|
18
|
+
userId: window.userId ?? '',
|
|
19
|
+
});
|
|
20
|
+
window.${globalName}('start');
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
slardarScript.onerror = function() {
|
|
24
|
+
console.warn('Failed to load Slardar script');
|
|
25
|
+
};
|
|
26
|
+
document.head.appendChild(slardarScript);
|
|
27
|
+
`;
|
|
28
|
+
}
|
|
29
|
+
function buildTeaScript() {
|
|
30
|
+
return `
|
|
31
|
+
(function (win, export_obj) {
|
|
32
|
+
win['LogAnalyticsObject'] = export_obj;
|
|
33
|
+
if (!win[export_obj]) {
|
|
34
|
+
function _collect() { _collect.q.push(arguments); }
|
|
35
|
+
_collect.q = _collect.q || [];
|
|
36
|
+
win[export_obj] = _collect;
|
|
37
|
+
}
|
|
38
|
+
win[export_obj].l = +new Date();
|
|
39
|
+
})(window, 'collectEvent');
|
|
40
|
+
|
|
41
|
+
const teaScript = document.createElement('script');
|
|
42
|
+
teaScript.src = 'https://lf3-cdn-tos.bytescm.com/obj/static/log-sdk/collect/5.1/collect.js';
|
|
43
|
+
teaScript.crossOrigin = 'anonymous';
|
|
44
|
+
teaScript.async = true;
|
|
45
|
+
teaScript.onerror = function() {
|
|
46
|
+
console.warn('Failed to load Tea script');
|
|
47
|
+
};
|
|
48
|
+
document.head.appendChild(teaScript);
|
|
49
|
+
`;
|
|
50
|
+
}
|
|
51
|
+
function slardarPlugin(options = {}) {
|
|
52
|
+
const { bid = 'apaas_miaoda', globalName = 'KSlardarWeb' } = options;
|
|
53
|
+
return {
|
|
54
|
+
name: 'miaoda-slardar',
|
|
55
|
+
transformIndexHtml(html) {
|
|
56
|
+
const tags = [
|
|
57
|
+
{ tag: 'script', children: buildSlardarScript(bid, globalName), injectTo: 'head-prepend' },
|
|
58
|
+
{
|
|
59
|
+
tag: 'script',
|
|
60
|
+
attrs: {
|
|
61
|
+
src: 'https://sf3-scmcdn-cn.feishucdn.com/obj/unpkg/byted/performance/0.1.2/dist/performance.iife.js',
|
|
62
|
+
crossorigin: 'anonymous',
|
|
63
|
+
defer: true,
|
|
64
|
+
},
|
|
65
|
+
injectTo: 'head-prepend',
|
|
66
|
+
},
|
|
67
|
+
{ tag: 'script', children: buildTeaScript(), injectTo: 'head-prepend' },
|
|
68
|
+
];
|
|
69
|
+
return { html, tags };
|
|
70
|
+
},
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
exports.default = slardarPlugin;
|
|
74
|
+
//# sourceMappingURL=slardar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slardar.js","sourceRoot":"","sources":["../../src/plugins/slardar.ts"],"names":[],"mappings":";;AAwEA,sCAuBC;AAxED,SAAS,kBAAkB,CAAC,GAAW,EAAE,UAAkB;IACzD,OAAO;;gGAEuF,GAAG,eAAe,UAAU;;;mBAGzG,UAAU;iBACZ,UAAU;;;;iBAIV,UAAU;kBACT,GAAG;;;;iBAIJ,UAAU;;;;;;;GAOxB,CAAC;AACJ,CAAC;AAED,SAAS,cAAc;IACrB,OAAO;;;;;;;;;;;;;;;;;;;GAmBN,CAAC;AACJ,CAAC;AAED,SAAgB,aAAa,CAAC,UAAgC,EAAE;IAC9D,MAAM,EAAE,GAAG,GAAG,cAAc,EAAE,UAAU,GAAG,aAAa,EAAE,GAAG,OAAO,CAAC;IAErE,OAAO;QACL,IAAI,EAAE,gBAAgB;QAEtB,kBAAkB,CAAC,IAAI;YACrB,MAAM,IAAI,GAAwB;gBAChC,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,kBAAkB,CAAC,GAAG,EAAE,UAAU,CAAC,EAAE,QAAQ,EAAE,cAAc,EAAE;gBAC1F;oBACE,GAAG,EAAE,QAAQ;oBACb,KAAK,EAAE;wBACL,GAAG,EAAE,gGAAgG;wBACrG,WAAW,EAAE,WAAW;wBACxB,KAAK,EAAE,IAAI;qBACZ;oBACD,QAAQ,EAAE,cAAc;iBACzB;gBACD,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,cAAc,EAAE,EAAE,QAAQ,EAAE,cAAc,EAAE;aACxE,CAAC;YACF,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QACxB,CAAC;KACF,CAAC;AACJ,CAAC;AAED,kBAAe,aAAa,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Plugin } from 'vite';
|
|
2
|
+
export interface StaticAssetsPluginOptions {
|
|
3
|
+
/** Client base path prefix for routes. */
|
|
4
|
+
clientBasePath?: string;
|
|
5
|
+
/** Project root directory. Defaults to `process.cwd()`. */
|
|
6
|
+
rootDir?: string;
|
|
7
|
+
}
|
|
8
|
+
export declare function staticAssetsPlugin(options?: StaticAssetsPluginOptions): Plugin;
|
|
9
|
+
export default staticAssetsPlugin;
|
|
10
|
+
//# sourceMappingURL=static-assets.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"static-assets.d.ts","sourceRoot":"","sources":["../../src/plugins/static-assets.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAqB,MAAM,EAAiB,MAAM,MAAM,CAAC;AAqErE,MAAM,WAAW,yBAAyB;IACxC,0CAA0C;IAC1C,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,2DAA2D;IAC3D,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,kBAAkB,CAAC,OAAO,GAAE,yBAA8B,GAAG,MAAM,CAiMlF;AAED,eAAe,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,307 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.staticAssetsPlugin = staticAssetsPlugin;
|
|
37
|
+
/**
|
|
38
|
+
* 业务工程 `shared/static/*` 静态资源解析。
|
|
39
|
+
*
|
|
40
|
+
* - JSON:dev 内联展开成 `export default {...}`;prod 走 `window.__STATIC_JSON__['key']`
|
|
41
|
+
* (prod HTML 注入 inline script 一次性塞所有 json)
|
|
42
|
+
* - 其它文件:返回 URL 字符串 `${publicPrefix}/<rel>`(默认 `${clientBasePath}/static/<rel>`)
|
|
43
|
+
* - 脚本扩展(.ts/.tsx/.js/.jsx/.mts/.cts/.mjs/.cjs):fallback 到真实路径,让 Vite 当普通模块打
|
|
44
|
+
* - 带 query 的 import(`?raw`/`?url` 等):返回真实路径 + query,让 Vite 内置处理
|
|
45
|
+
*
|
|
46
|
+
* 算法移植自 `@lark-apaas/coding-vite-preset/static-assets-plugin`,
|
|
47
|
+
* 把 `glob` 依赖换成 `fs.readdirSync` 递归遍历,去掉额外 dep。
|
|
48
|
+
*/
|
|
49
|
+
const fs = __importStar(require("node:fs"));
|
|
50
|
+
const path = __importStar(require("node:path"));
|
|
51
|
+
const PREFIX = '@shared/static/';
|
|
52
|
+
const VIRTUAL_PREFIX = '\0@shared/static/';
|
|
53
|
+
const SCRIPT_EXTENSIONS = ['.ts', '.tsx', '.js', '.jsx', '.mts', '.cts', '.mjs', '.cjs'];
|
|
54
|
+
const MIME = {
|
|
55
|
+
'.json': 'application/json',
|
|
56
|
+
'.png': 'image/png',
|
|
57
|
+
'.jpg': 'image/jpeg',
|
|
58
|
+
'.jpeg': 'image/jpeg',
|
|
59
|
+
'.gif': 'image/gif',
|
|
60
|
+
'.svg': 'image/svg+xml',
|
|
61
|
+
'.webp': 'image/webp',
|
|
62
|
+
'.ico': 'image/x-icon',
|
|
63
|
+
'.woff': 'font/woff',
|
|
64
|
+
'.woff2': 'font/woff2',
|
|
65
|
+
'.ttf': 'font/ttf',
|
|
66
|
+
'.eot': 'application/vnd.ms-fontobject',
|
|
67
|
+
'.otf': 'font/otf',
|
|
68
|
+
'.css': 'text/css',
|
|
69
|
+
'.js': 'application/javascript',
|
|
70
|
+
'.txt': 'text/plain',
|
|
71
|
+
'.html': 'text/html',
|
|
72
|
+
'.xml': 'application/xml',
|
|
73
|
+
'.pdf': 'application/pdf',
|
|
74
|
+
'.mp3': 'audio/mpeg',
|
|
75
|
+
'.mp4': 'video/mp4',
|
|
76
|
+
'.webm': 'video/webm',
|
|
77
|
+
};
|
|
78
|
+
function splitQuery(rel) {
|
|
79
|
+
const i = rel.indexOf('?');
|
|
80
|
+
return i === -1 ? [rel, ''] : [rel.slice(0, i), rel.slice(i)];
|
|
81
|
+
}
|
|
82
|
+
function resolveScriptFile(staticDir, cleanPath) {
|
|
83
|
+
const ext = path.extname(cleanPath).toLowerCase();
|
|
84
|
+
if (ext && SCRIPT_EXTENSIONS.includes(ext)) {
|
|
85
|
+
return path.join(staticDir, cleanPath);
|
|
86
|
+
}
|
|
87
|
+
if (!ext) {
|
|
88
|
+
for (const e of SCRIPT_EXTENSIONS) {
|
|
89
|
+
const p = path.join(staticDir, cleanPath + e);
|
|
90
|
+
if (fs.existsSync(p))
|
|
91
|
+
return p;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
return null;
|
|
95
|
+
}
|
|
96
|
+
function walkJson(dir, out, prefix = '') {
|
|
97
|
+
if (!fs.existsSync(dir))
|
|
98
|
+
return;
|
|
99
|
+
for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
|
|
100
|
+
const full = path.join(dir, entry.name);
|
|
101
|
+
const rel = prefix ? `${prefix}/${entry.name}` : entry.name;
|
|
102
|
+
if (entry.isDirectory()) {
|
|
103
|
+
walkJson(full, out, rel);
|
|
104
|
+
}
|
|
105
|
+
else if (entry.isFile() && entry.name.endsWith('.json')) {
|
|
106
|
+
try {
|
|
107
|
+
const key = rel.replace(/\.json$/, '');
|
|
108
|
+
out[key] = JSON.parse(fs.readFileSync(full, 'utf-8'));
|
|
109
|
+
}
|
|
110
|
+
catch (e) {
|
|
111
|
+
console.warn(`[miaoda-static-assets] skip invalid json: ${rel}: ${e instanceof Error ? e.message : String(e)}`);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
function staticAssetsPlugin(options = {}) {
|
|
117
|
+
const { clientBasePath = '', rootDir = process.cwd() } = options;
|
|
118
|
+
const staticDir = path.resolve(rootDir, 'shared/static');
|
|
119
|
+
let isDev = true;
|
|
120
|
+
let jsonCache = null;
|
|
121
|
+
function getJson() {
|
|
122
|
+
if (!isDev && jsonCache)
|
|
123
|
+
return jsonCache;
|
|
124
|
+
const data = {};
|
|
125
|
+
walkJson(staticDir, data);
|
|
126
|
+
if (!isDev)
|
|
127
|
+
jsonCache = data;
|
|
128
|
+
return data;
|
|
129
|
+
}
|
|
130
|
+
return {
|
|
131
|
+
name: 'miaoda-static-assets',
|
|
132
|
+
// 必须 enforce:'pre':早于 tsconfig paths 和 vite:json transform
|
|
133
|
+
enforce: 'pre',
|
|
134
|
+
config(_config, { command }) {
|
|
135
|
+
isDev = command === 'serve';
|
|
136
|
+
},
|
|
137
|
+
// 不能用 rolldown `filter` 限制 id,否则用户在 vite.config / tsconfig
|
|
138
|
+
// 声明的 `@shared` alias 会更早把 spec resolve 成绝对路径,filter 直接 miss。
|
|
139
|
+
// 我们手动 handler 两种 id:原始 spec `@shared/static/foo.jpg` 与已被 alias
|
|
140
|
+
// resolve 的绝对路径 `<staticDir>/foo.jpg`。
|
|
141
|
+
resolveId(id) {
|
|
142
|
+
let rel;
|
|
143
|
+
if (id.startsWith(PREFIX)) {
|
|
144
|
+
rel = id.slice(PREFIX.length);
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
// 已被 alias resolve 的绝对路径
|
|
148
|
+
const normalized = id.split('?')[0];
|
|
149
|
+
if (!normalized.startsWith(staticDir + path.sep) && normalized !== staticDir)
|
|
150
|
+
return null;
|
|
151
|
+
const query = id.slice(normalized.length);
|
|
152
|
+
rel = path.relative(staticDir, normalized).split(path.sep).join('/') + query;
|
|
153
|
+
}
|
|
154
|
+
const [cleanPath, query] = splitQuery(rel);
|
|
155
|
+
// ?raw / ?url 等:返回真实路径 + query,交给 Vite 内置处理
|
|
156
|
+
if (query)
|
|
157
|
+
return path.join(staticDir, cleanPath) + query;
|
|
158
|
+
// 脚本:解析到真实文件,让 vite 当普通模块打
|
|
159
|
+
const scriptPath = resolveScriptFile(staticDir, cleanPath);
|
|
160
|
+
if (scriptPath)
|
|
161
|
+
return scriptPath;
|
|
162
|
+
const virtualId = VIRTUAL_PREFIX + cleanPath;
|
|
163
|
+
// 后缀 `.js` 避免 vite:json 把 .json 虚拟模块当 JSON 文件 transform
|
|
164
|
+
return cleanPath.endsWith('.json') ? virtualId + '.js' : virtualId;
|
|
165
|
+
},
|
|
166
|
+
load(id) {
|
|
167
|
+
if (!id.startsWith(VIRTUAL_PREFIX))
|
|
168
|
+
return null;
|
|
169
|
+
let rel = id.slice(VIRTUAL_PREFIX.length);
|
|
170
|
+
if (rel.endsWith('.json.js'))
|
|
171
|
+
rel = rel.slice(0, -3); // strip 上面加的 .js
|
|
172
|
+
const isJson = rel.endsWith('.json');
|
|
173
|
+
if (isJson) {
|
|
174
|
+
if (isDev) {
|
|
175
|
+
// dev:直接内联 JSON 内容,避免依赖 window.__STATIC_JSON__
|
|
176
|
+
const full = path.join(staticDir, rel);
|
|
177
|
+
try {
|
|
178
|
+
const content = fs.readFileSync(full, 'utf-8');
|
|
179
|
+
return `export default ${content};`;
|
|
180
|
+
}
|
|
181
|
+
catch (e) {
|
|
182
|
+
console.warn(`[miaoda-static-assets] read json failed: ${rel}`, e);
|
|
183
|
+
return `export default undefined;`;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
// prod:从 transformIndexHtml 注入的 window.__STATIC_JSON__ 取
|
|
187
|
+
const key = rel.replace(/\.json$/, '');
|
|
188
|
+
return `export default window.__STATIC_JSON__[${JSON.stringify(key)}];`;
|
|
189
|
+
}
|
|
190
|
+
// 非 JSON:返回 URL 字符串
|
|
191
|
+
// - dev:走 `${clientBasePath}/static/${rel}`,由本插件挂的 middleware 服务真实文件
|
|
192
|
+
// - prod:走 `${STATIC_ASSETS_BASE_URL}/${rel}`(build.sh 从 MIAODA_STATIC_CDN_PREFIX 映射,
|
|
193
|
+
// 最终来自 TOS preUploadStatic.downloadURLPrefix)。未设置时空字符串退化为相对路径——
|
|
194
|
+
// 线上 build 缺这个环境变量基本是 deploy 配置漏了,warn 一下方便排查。
|
|
195
|
+
let url;
|
|
196
|
+
if (isDev) {
|
|
197
|
+
url = `${clientBasePath}/static/${rel}`;
|
|
198
|
+
}
|
|
199
|
+
else {
|
|
200
|
+
const cdnPrefix = (process.env.STATIC_ASSETS_BASE_URL ?? '').replace(/\/+$/, '');
|
|
201
|
+
if (!cdnPrefix) {
|
|
202
|
+
console.warn(`[miaoda-static-assets] STATIC_ASSETS_BASE_URL is not set; "${rel}" will resolve to a relative URL. ` +
|
|
203
|
+
`Did you forget to inject MIAODA_STATIC_CDN_PREFIX in build.sh?`);
|
|
204
|
+
}
|
|
205
|
+
url = cdnPrefix ? `${cdnPrefix}/${rel}` : `/${rel}`;
|
|
206
|
+
}
|
|
207
|
+
return `export default ${JSON.stringify(url)};`;
|
|
208
|
+
},
|
|
209
|
+
transformIndexHtml() {
|
|
210
|
+
if (isDev)
|
|
211
|
+
return; // dev 直接内联,不需要 window.__STATIC_JSON__
|
|
212
|
+
const data = getJson();
|
|
213
|
+
if (Object.keys(data).length === 0)
|
|
214
|
+
return;
|
|
215
|
+
const tags = [
|
|
216
|
+
{
|
|
217
|
+
tag: 'script',
|
|
218
|
+
children: `window.__STATIC_JSON__ = ${JSON.stringify(data)};`,
|
|
219
|
+
injectTo: 'head-prepend',
|
|
220
|
+
},
|
|
221
|
+
];
|
|
222
|
+
return { html: '', tags };
|
|
223
|
+
},
|
|
224
|
+
configureServer(server) {
|
|
225
|
+
if (!fs.existsSync(staticDir))
|
|
226
|
+
return;
|
|
227
|
+
const watcher = server.watcher;
|
|
228
|
+
watcher.add(staticDir);
|
|
229
|
+
const handleChange = (changedPath) => {
|
|
230
|
+
if (!changedPath.startsWith(staticDir))
|
|
231
|
+
return;
|
|
232
|
+
const rel = path.relative(staticDir, changedPath);
|
|
233
|
+
if (rel.endsWith('.json')) {
|
|
234
|
+
// JSON 变了:invalidate 虚拟模块 + full-reload
|
|
235
|
+
const moduleId = VIRTUAL_PREFIX + rel;
|
|
236
|
+
const mod = server.environments.client.moduleGraph.getModuleById(moduleId);
|
|
237
|
+
if (mod)
|
|
238
|
+
server.environments.client.moduleGraph.invalidateModule(mod);
|
|
239
|
+
server.hot.send({ type: 'custom', event: 'static-json-update', data: { path: rel } });
|
|
240
|
+
server.hot.send({ type: 'full-reload', path: '*' });
|
|
241
|
+
}
|
|
242
|
+
else {
|
|
243
|
+
server.hot.send({ type: 'custom', event: 'static-asset-update', data: { path: rel } });
|
|
244
|
+
}
|
|
245
|
+
};
|
|
246
|
+
watcher.on('change', handleChange);
|
|
247
|
+
watcher.on('add', handleChange);
|
|
248
|
+
watcher.on('unlink', (changedPath) => {
|
|
249
|
+
if (!changedPath.startsWith(staticDir))
|
|
250
|
+
return;
|
|
251
|
+
if (changedPath.endsWith('.json')) {
|
|
252
|
+
const rel = path.relative(staticDir, changedPath);
|
|
253
|
+
const moduleId = VIRTUAL_PREFIX + rel;
|
|
254
|
+
const mod = server.environments.client.moduleGraph.getModuleById(moduleId);
|
|
255
|
+
if (mod)
|
|
256
|
+
server.environments.client.moduleGraph.invalidateModule(mod);
|
|
257
|
+
}
|
|
258
|
+
server.hot.send({ type: 'full-reload', path: '*' });
|
|
259
|
+
});
|
|
260
|
+
// dev 下直接 serve `${clientBasePath}/static/...` 路径
|
|
261
|
+
server.middlewares.use((req, res, next) => {
|
|
262
|
+
const staticPrefix = `${clientBasePath}/static/`;
|
|
263
|
+
const url = req.url || '';
|
|
264
|
+
if (!url.startsWith(staticPrefix))
|
|
265
|
+
return next();
|
|
266
|
+
const rawRel = url.slice(staticPrefix.length).split('?')[0];
|
|
267
|
+
let rel;
|
|
268
|
+
try {
|
|
269
|
+
rel = decodeURIComponent(rawRel);
|
|
270
|
+
}
|
|
271
|
+
catch {
|
|
272
|
+
res.statusCode = 400;
|
|
273
|
+
res.end('Bad Request');
|
|
274
|
+
return;
|
|
275
|
+
}
|
|
276
|
+
const filePath = path.join(staticDir, rel);
|
|
277
|
+
// 防 path traversal
|
|
278
|
+
const normalized = path.normalize(filePath);
|
|
279
|
+
if (!normalized.startsWith(staticDir)) {
|
|
280
|
+
res.statusCode = 403;
|
|
281
|
+
res.end('Forbidden');
|
|
282
|
+
return;
|
|
283
|
+
}
|
|
284
|
+
if (!fs.existsSync(filePath)) {
|
|
285
|
+
res.statusCode = 404;
|
|
286
|
+
res.end('Not Found');
|
|
287
|
+
return;
|
|
288
|
+
}
|
|
289
|
+
const stat = fs.statSync(filePath);
|
|
290
|
+
if (stat.isDirectory()) {
|
|
291
|
+
res.statusCode = 403;
|
|
292
|
+
res.end('Forbidden');
|
|
293
|
+
return;
|
|
294
|
+
}
|
|
295
|
+
const ext = path.extname(filePath).toLowerCase();
|
|
296
|
+
res.setHeader('Content-Type', MIME[ext] || 'application/octet-stream');
|
|
297
|
+
res.setHeader('Cache-Control', 'no-cache');
|
|
298
|
+
fs.createReadStream(filePath).pipe(res);
|
|
299
|
+
});
|
|
300
|
+
},
|
|
301
|
+
// closeBundle 拷贝 shared/static 的逻辑已删除——build.sh 用 rsync 直接拷到
|
|
302
|
+
// dist/output_static/(部署侧识别的目录),plugin 之前拷到 dist/shared/static
|
|
303
|
+
// 是死代码、没人读,而且没排除 .ts/.tsx 还可能误传脚本文件。
|
|
304
|
+
};
|
|
305
|
+
}
|
|
306
|
+
exports.default = staticAssetsPlugin;
|
|
307
|
+
//# sourceMappingURL=static-assets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"static-assets.js","sourceRoot":"","sources":["../../src/plugins/static-assets.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { IncomingMessage } from 'node:http';
|
|
2
|
+
import type { Plugin } from 'vite';
|
|
3
|
+
interface RequestRenderContext {
|
|
4
|
+
userId: string;
|
|
5
|
+
tenantId: number | string;
|
|
6
|
+
userName: string;
|
|
7
|
+
csrfToken: string;
|
|
8
|
+
environment: string;
|
|
9
|
+
}
|
|
10
|
+
/** 从 incoming request 抽出全部 server 端能拿到的 view-context 字段 */
|
|
11
|
+
export declare function buildRenderContext(req: IncomingMessage): RequestRenderContext;
|
|
12
|
+
export interface ViewContextPluginOptions {
|
|
13
|
+
/**
|
|
14
|
+
* 显式传入的 appId override。preset 已经从 `CLIENT_BASE_PATH=/app/<appId>`
|
|
15
|
+
* 提取,设置后 inline script 直接拼真值字面量。未设置则走 IIFE 从 URL
|
|
16
|
+
* 解析(prod / 部分本地 dev URL 没 base path 时用)。
|
|
17
|
+
*/
|
|
18
|
+
appId?: string;
|
|
19
|
+
}
|
|
20
|
+
export declare function viewContextPlugin(options?: ViewContextPluginOptions): Plugin;
|
|
21
|
+
export default viewContextPlugin;
|
|
22
|
+
//# sourceMappingURL=view-context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"view-context.d.ts","sourceRoot":"","sources":["../../src/plugins/view-context.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,KAAK,EAAqB,MAAM,EAAE,MAAM,MAAM,CAAC;AAkCtD,UAAU,oBAAoB;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAGlB,WAAW,EAAE,MAAM,CAAC;CACrB;AA+BD,2DAA2D;AAC3D,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,eAAe,GAAG,oBAAoB,CAS7E;AAID,MAAM,WAAW,wBAAwB;IACvC;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAkED,wBAAgB,iBAAiB,CAAC,OAAO,GAAE,wBAA6B,GAAG,MAAM,CAyChF;AAED,eAAe,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.buildRenderContext = buildRenderContext;
|
|
4
|
+
exports.viewContextPlugin = viewContextPlugin;
|
|
5
|
+
const node_async_hooks_1 = require("node:async_hooks");
|
|
6
|
+
/**
|
|
7
|
+
* 在 HTML head 注入 inline script,把启动期上下文挂到 `window`。
|
|
8
|
+
*
|
|
9
|
+
* 三条路径:
|
|
10
|
+
*
|
|
11
|
+
* 1. **prod build**:emit `{{userId}}` / `{{tenantId}}` / `{{appId}}` 等 HBS 占位符,
|
|
12
|
+
* 线上 vefaas 渲染时把它们替换为真值。html-minify 已经保护占位符。
|
|
13
|
+
*
|
|
14
|
+
* 2. **dev 有 request ctx**:在 `configureServer` 中间件里解析 incoming request 的
|
|
15
|
+
* cookie / host / `x-larkgw-suda-webuser` header,用 `AsyncLocalStorage` 绑到当前
|
|
16
|
+
* 异步链;`transformIndexHtml` 钩子读出后拼成**字面量真值**注入。沙箱网关把
|
|
17
|
+
* `x-larkgw-suda-webuser` 透传给 devserver,于是 server 端有完整 user 上下文。
|
|
18
|
+
*
|
|
19
|
+
* 3. **dev 无 request ctx**(极少触发,例如 vite 内部预渲染没经过 middleware 链):
|
|
20
|
+
* 退化为 IIFE fallback——`csrfToken` 从 `document.cookie` 读、id 类全空;
|
|
21
|
+
* `ENVIRONMENT` 同 dev-with-ctx 一样从 `process.env.FORCE_FRAMEWORK_ENVIRONMENT` 取,
|
|
22
|
+
* 未设置时兜底 'online'。
|
|
23
|
+
*
|
|
24
|
+
* environment 来源约定:dev 永远读 env var(不感知域名),build 走 HBS 占位符
|
|
25
|
+
* 让 vefaas 渲染。技术栈不依赖 host 推断部署环境。
|
|
26
|
+
*/
|
|
27
|
+
const SUDA_HEADER = 'x-larkgw-suda-webuser';
|
|
28
|
+
const requestContext = new node_async_hooks_1.AsyncLocalStorage();
|
|
29
|
+
// ───────────── header / cookie / host 解析 helpers ─────────────
|
|
30
|
+
function parseSudaWebUser(header) {
|
|
31
|
+
if (typeof header !== 'string' || !header)
|
|
32
|
+
return null;
|
|
33
|
+
try {
|
|
34
|
+
return JSON.parse(decodeURIComponent(header));
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
return null;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
function parseCsrfToken(cookieHeader) {
|
|
41
|
+
if (!cookieHeader)
|
|
42
|
+
return '';
|
|
43
|
+
const m = cookieHeader.match(/(?:^|;\s*)suda-csrf-token=([^;]+)/);
|
|
44
|
+
return m ? decodeURIComponent(m[1]) : '';
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* dev 期 environment 来源:`process.env.FORCE_FRAMEWORK_ENVIRONMENT`。
|
|
48
|
+
* 业务侧或 dev-server 启动脚本可注入这个 env 显式指定环境;未设置时兜底 'online'。
|
|
49
|
+
* 不感知域名信息——技术栈不应依赖 host 推断部署环境。
|
|
50
|
+
*/
|
|
51
|
+
function readDevEnvironment() {
|
|
52
|
+
const v = process.env.FORCE_FRAMEWORK_ENVIRONMENT;
|
|
53
|
+
return v && v.trim() ? v.trim() : 'online';
|
|
54
|
+
}
|
|
55
|
+
/** 从 incoming request 抽出全部 server 端能拿到的 view-context 字段 */
|
|
56
|
+
function buildRenderContext(req) {
|
|
57
|
+
const user = parseSudaWebUser(req.headers[SUDA_HEADER]);
|
|
58
|
+
return {
|
|
59
|
+
userId: user?.user_id ?? '',
|
|
60
|
+
tenantId: user?.tenant_id ?? '',
|
|
61
|
+
userName: user?.user_name?.zh_cn ?? '',
|
|
62
|
+
csrfToken: parseCsrfToken(req.headers.cookie),
|
|
63
|
+
environment: readDevEnvironment(),
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
function appIdExpr(appId) {
|
|
67
|
+
if (appId)
|
|
68
|
+
return JSON.stringify(appId);
|
|
69
|
+
return `(function () {
|
|
70
|
+
var p = location.pathname.match(/\\/app\\/(app_[a-z0-9]+)/i);
|
|
71
|
+
if (p) return p[1];
|
|
72
|
+
var h = location.hostname.match(/app_[a-z0-9]+/i);
|
|
73
|
+
return h ? h[0] : '';
|
|
74
|
+
})()`;
|
|
75
|
+
}
|
|
76
|
+
/** 有 request context(dev 沙箱 / dev 本地):全字面量真值 */
|
|
77
|
+
function buildScriptFromRequest(options, ctx) {
|
|
78
|
+
return `
|
|
79
|
+
window.appId = ${appIdExpr(options.appId)};
|
|
80
|
+
window.userId = ${JSON.stringify(ctx.userId)};
|
|
81
|
+
window.tenantId = ${JSON.stringify(ctx.tenantId)};
|
|
82
|
+
window.userName = ${JSON.stringify(ctx.userName)};
|
|
83
|
+
window.csrfToken = ${JSON.stringify(ctx.csrfToken)};
|
|
84
|
+
window.ENVIRONMENT = ${JSON.stringify(ctx.environment)};
|
|
85
|
+
`;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Prod build:emit HBS 占位符,由部署运行时 (vefaas) 替换为真值。
|
|
89
|
+
* 三花括号 `{{{appAvatar}}}` 表示不做 HTML escape——头像地址不能转义。
|
|
90
|
+
* 与上游 `coding-vite-preset/view-context-plugin` 占位符约定保持一致。
|
|
91
|
+
*/
|
|
92
|
+
function buildScriptBuildPlaceholders() {
|
|
93
|
+
return `
|
|
94
|
+
window.appId = "{{appId}}";
|
|
95
|
+
window.userId = "{{userId}}";
|
|
96
|
+
window.tenantId = "{{tenantId}}";
|
|
97
|
+
window.userName = "{{userName}}";
|
|
98
|
+
window.csrfToken = "{{csrfToken}}";
|
|
99
|
+
window.ENVIRONMENT = "{{environment}}";
|
|
100
|
+
const appInfo = {
|
|
101
|
+
name: "{{appName}}",
|
|
102
|
+
avatar: "{{{appAvatar}}}",
|
|
103
|
+
description: "{{appDescription}}",
|
|
104
|
+
};
|
|
105
|
+
if (appInfo.name) {
|
|
106
|
+
window._appInfo = appInfo;
|
|
107
|
+
}
|
|
108
|
+
`;
|
|
109
|
+
}
|
|
110
|
+
/** dev 无 request context(极少触发):IIFE fallback */
|
|
111
|
+
function buildScriptDevNoCtxFallback(options) {
|
|
112
|
+
return `
|
|
113
|
+
window.appId = ${appIdExpr(options.appId)};
|
|
114
|
+
window.userId = '';
|
|
115
|
+
window.tenantId = '';
|
|
116
|
+
window.userName = '';
|
|
117
|
+
window.csrfToken = (function () {
|
|
118
|
+
var m = document.cookie.match(/(?:^|;\\s*)suda-csrf-token=([^;]+)/);
|
|
119
|
+
return m ? decodeURIComponent(m[1]) : '';
|
|
120
|
+
})();
|
|
121
|
+
window.ENVIRONMENT = ${JSON.stringify(readDevEnvironment())};
|
|
122
|
+
`;
|
|
123
|
+
}
|
|
124
|
+
function viewContextPlugin(options = {}) {
|
|
125
|
+
let isBuild = false;
|
|
126
|
+
return {
|
|
127
|
+
name: 'miaoda-view-context',
|
|
128
|
+
config(_config, { command }) {
|
|
129
|
+
isBuild = command === 'build';
|
|
130
|
+
},
|
|
131
|
+
/**
|
|
132
|
+
* dev 期前置 middleware:每个请求都把 render context 绑到 ALS。
|
|
133
|
+
* 后续 `transformIndexHtml` 在同一异步链里 `getStore()` 读出。
|
|
134
|
+
*/
|
|
135
|
+
configureServer(server) {
|
|
136
|
+
server.middlewares.use((req, _res, next) => {
|
|
137
|
+
const ctx = buildRenderContext(req);
|
|
138
|
+
requestContext.run(ctx, () => next());
|
|
139
|
+
});
|
|
140
|
+
},
|
|
141
|
+
transformIndexHtml() {
|
|
142
|
+
let children;
|
|
143
|
+
if (isBuild) {
|
|
144
|
+
children = buildScriptBuildPlaceholders();
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
const ctx = requestContext.getStore();
|
|
148
|
+
children = ctx
|
|
149
|
+
? buildScriptFromRequest(options, ctx)
|
|
150
|
+
: buildScriptDevNoCtxFallback(options);
|
|
151
|
+
}
|
|
152
|
+
const tags = [
|
|
153
|
+
{
|
|
154
|
+
tag: 'script',
|
|
155
|
+
children,
|
|
156
|
+
// head-prepend:必须在业务代码 / runtime 之前注入,保证业务可同步读 window 全局
|
|
157
|
+
injectTo: 'head-prepend',
|
|
158
|
+
},
|
|
159
|
+
];
|
|
160
|
+
return tags;
|
|
161
|
+
},
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
exports.default = viewContextPlugin;
|
|
165
|
+
//# sourceMappingURL=view-context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"view-context.js","sourceRoot":"","sources":["../../src/plugins/view-context.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vite-client-patch.d.ts","sourceRoot":"","sources":["../../src/plugins/vite-client-patch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAkBnC,wBAAgB,qBAAqB,IAAI,MAAM,CAqB9C;AAED,eAAe,qBAAqB,CAAC"}
|