@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.
Files changed (85) hide show
  1. package/LICENSE +13 -0
  2. package/lib/index.d.ts +52 -0
  3. package/lib/index.d.ts.map +1 -0
  4. package/lib/index.js +410 -0
  5. package/lib/index.js.map +1 -0
  6. package/lib/plugins/capabilities.d.ts +23 -0
  7. package/lib/plugins/capabilities.d.ts.map +1 -0
  8. package/lib/plugins/capabilities.js +151 -0
  9. package/lib/plugins/capabilities.js.map +1 -0
  10. package/lib/plugins/dev-logs.d.ts +44 -0
  11. package/lib/plugins/dev-logs.d.ts.map +1 -0
  12. package/lib/plugins/dev-logs.js +544 -0
  13. package/lib/plugins/dev-logs.js.map +1 -0
  14. package/lib/plugins/error-overlay.d.ts +19 -0
  15. package/lib/plugins/error-overlay.d.ts.map +1 -0
  16. package/lib/plugins/error-overlay.js +136 -0
  17. package/lib/plugins/error-overlay.js.map +1 -0
  18. package/lib/plugins/fonts-mirror.d.ts +14 -0
  19. package/lib/plugins/fonts-mirror.d.ts.map +1 -0
  20. package/lib/plugins/fonts-mirror.js +70 -0
  21. package/lib/plugins/fonts-mirror.js.map +1 -0
  22. package/lib/plugins/health.d.ts +19 -0
  23. package/lib/plugins/health.d.ts.map +1 -0
  24. package/lib/plugins/health.js +36 -0
  25. package/lib/plugins/health.js.map +1 -0
  26. package/lib/plugins/hmr-timing.d.ts +13 -0
  27. package/lib/plugins/hmr-timing.d.ts.map +1 -0
  28. package/lib/plugins/hmr-timing.js +93 -0
  29. package/lib/plugins/hmr-timing.js.map +1 -0
  30. package/lib/plugins/html-minify.d.ts +18 -0
  31. package/lib/plugins/html-minify.d.ts.map +1 -0
  32. package/lib/plugins/html-minify.js +100 -0
  33. package/lib/plugins/html-minify.js.map +1 -0
  34. package/lib/plugins/module-alias.d.ts +12 -0
  35. package/lib/plugins/module-alias.d.ts.map +1 -0
  36. package/lib/plugins/module-alias.js +78 -0
  37. package/lib/plugins/module-alias.js.map +1 -0
  38. package/lib/plugins/og-meta.d.ts +21 -0
  39. package/lib/plugins/og-meta.d.ts.map +1 -0
  40. package/lib/plugins/og-meta.js +60 -0
  41. package/lib/plugins/og-meta.js.map +1 -0
  42. package/lib/plugins/polyfill.d.ts +11 -0
  43. package/lib/plugins/polyfill.d.ts.map +1 -0
  44. package/lib/plugins/polyfill.js +140 -0
  45. package/lib/plugins/polyfill.js.map +1 -0
  46. package/lib/plugins/routes.d.ts +26 -0
  47. package/lib/plugins/routes.d.ts.map +1 -0
  48. package/lib/plugins/routes.js +265 -0
  49. package/lib/plugins/routes.js.map +1 -0
  50. package/lib/plugins/slardar.d.ts +24 -0
  51. package/lib/plugins/slardar.d.ts.map +1 -0
  52. package/lib/plugins/slardar.js +74 -0
  53. package/lib/plugins/slardar.js.map +1 -0
  54. package/lib/plugins/static-assets.d.ts +10 -0
  55. package/lib/plugins/static-assets.d.ts.map +1 -0
  56. package/lib/plugins/static-assets.js +307 -0
  57. package/lib/plugins/static-assets.js.map +1 -0
  58. package/lib/plugins/view-context.d.ts +22 -0
  59. package/lib/plugins/view-context.d.ts.map +1 -0
  60. package/lib/plugins/view-context.js +165 -0
  61. package/lib/plugins/view-context.js.map +1 -0
  62. package/lib/plugins/vite-client-patch.d.ts +4 -0
  63. package/lib/plugins/vite-client-patch.d.ts.map +1 -0
  64. package/lib/plugins/vite-client-patch.js +37 -0
  65. package/lib/plugins/vite-client-patch.js.map +1 -0
  66. package/lib/plugins/ws-watchdog.d.ts +22 -0
  67. package/lib/plugins/ws-watchdog.d.ts.map +1 -0
  68. package/lib/plugins/ws-watchdog.js +103 -0
  69. package/lib/plugins/ws-watchdog.js.map +1 -0
  70. package/lib/polyfills/index.d.ts +15 -0
  71. package/lib/polyfills/index.d.ts.map +1 -0
  72. package/lib/polyfills/index.js +36 -0
  73. package/lib/polyfills/index.js.map +1 -0
  74. package/lib/utils/normalize-base-path.d.ts +37 -0
  75. package/lib/utils/normalize-base-path.d.ts.map +1 -0
  76. package/lib/utils/normalize-base-path.js +57 -0
  77. package/lib/utils/normalize-base-path.js.map +1 -0
  78. package/lib/utils/snapdom-proxy.d.ts +12 -0
  79. package/lib/utils/snapdom-proxy.d.ts.map +1 -0
  80. package/lib/utils/snapdom-proxy.js +75 -0
  81. package/lib/utils/snapdom-proxy.js.map +1 -0
  82. package/package.json +9 -15
  83. package/dist/index.d.ts +0 -320
  84. package/dist/index.js +0 -1941
  85. package/dist/index.js.map +0 -1
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.viteClientPatchPlugin = viteClientPatchPlugin;
4
+ /**
5
+ * 抑制 `@vite/client` 在 HMR WS 重连成功后的 `location.reload()`。
6
+ *
7
+ * 背景(沙箱反向代理场景):电脑休眠唤醒后 WS 断连重连。Vite 客户端走
8
+ * `waitForSuccessfulPing()` 用新 TCP 连接握手成功,立刻发 `location.reload()`;
9
+ * 但 reload 用的是浏览器 HTTP/2 连接池里复用的休眠前死连接,
10
+ * 导致 ~18s `ERR_CONNECTION_TIMED_OUT` 白屏。
11
+ *
12
+ * 解:transform 拦截 `vite/dist/client/client.mjs`,直接删掉 reload 那一行。
13
+ * 用户需要新代码时手动刷新。
14
+ *
15
+ * 仅 dev(`apply: 'serve'`)。
16
+ */
17
+ const RECONNECT_RELOAD_PATTERN = /(await waitForSuccessfulPing\(url\.href\);)\r?\n(\s*)location\.reload\(\);/;
18
+ function viteClientPatchPlugin() {
19
+ return {
20
+ name: 'miaoda-vite-client-patch',
21
+ enforce: 'post',
22
+ apply: 'serve',
23
+ transform(code, id) {
24
+ if (!id.includes('vite/dist/client/client.mjs'))
25
+ return;
26
+ if (!RECONNECT_RELOAD_PATTERN.test(code)) {
27
+ console.warn('[miaoda-vite-client-patch] reconnect-reload pattern not found in @vite/client. ' +
28
+ 'patch NOT applied — Vite client.mjs may have changed.');
29
+ return;
30
+ }
31
+ const patched = code.replace(RECONNECT_RELOAD_PATTERN, (_, pingLine) => pingLine);
32
+ return { code: patched };
33
+ },
34
+ };
35
+ }
36
+ exports.default = viteClientPatchPlugin;
37
+ //# sourceMappingURL=vite-client-patch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vite-client-patch.js","sourceRoot":"","sources":["../../src/plugins/vite-client-patch.ts"],"names":[],"mappings":";;AAkBA,sDAqBC;AArCD;;;;;;;;;;;;GAYG;AACH,MAAM,wBAAwB,GAC5B,4EAA4E,CAAC;AAE/E,SAAgB,qBAAqB;IACnC,OAAO;QACL,IAAI,EAAE,0BAA0B;QAChC,OAAO,EAAE,MAAM;QACf,KAAK,EAAE,OAAO;QAEd,SAAS,CAAC,IAAI,EAAE,EAAE;YAChB,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;gBAAE,OAAO;YAExD,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBACzC,OAAO,CAAC,IAAI,CACV,iFAAiF;oBAC/E,uDAAuD,CAC1D,CAAC;gBACF,OAAO;YACT,CAAC;YAED,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,wBAAwB,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC;YAClF,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;QAC3B,CAAC;KACF,CAAC;AACJ,CAAC;AAED,kBAAe,qBAAqB,CAAC"}
@@ -0,0 +1,22 @@
1
+ import type { Plugin } from 'vite';
2
+ /**
3
+ * 检测沙箱代理链路下的 WebSocket 僵尸连接。
4
+ *
5
+ * 客户端 5s ping 一次(通过 vite hot.send),连续 2 次拿不到 pong 判死,
6
+ * 向 parent window 发 `postMessage({ type: 'disconnected' })` 通知沙箱外壳。
7
+ *
8
+ * 仅 dev 期生效(`apply: 'serve'`);本地裸 dev 也开,不会有副作用——
9
+ * parent 不是沙箱时 postMessage 无消费者,自然丢弃。
10
+ */
11
+ export interface WsWatchdogPluginOptions {
12
+ pingEvent?: string;
13
+ pongEvent?: string;
14
+ /**
15
+ * 客户端 base path(如 `/app/app_xxx`)。沙箱网关把完整路径透传给 Vite,
16
+ * middleware 匹配和注入的 `<script src>` 都必须带 base;空串退化到裸路径。
17
+ */
18
+ clientBasePath?: string;
19
+ }
20
+ export declare function wsWatchdogPlugin(options?: WsWatchdogPluginOptions): Plugin;
21
+ export default wsWatchdogPlugin;
22
+ //# sourceMappingURL=ws-watchdog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ws-watchdog.d.ts","sourceRoot":"","sources":["../../src/plugins/ws-watchdog.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAqB,MAAM,MAAM,CAAC;AAItD;;;;;;;;GAQG;AACH,MAAM,WAAW,uBAAuB;IACtC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAUD,wBAAgB,gBAAgB,CAAC,OAAO,GAAE,uBAA4B,GAAG,MAAM,CA6D9E;AAED,eAAe,gBAAgB,CAAC"}
@@ -0,0 +1,103 @@
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.wsWatchdogPlugin = wsWatchdogPlugin;
37
+ const fs = __importStar(require("node:fs"));
38
+ const path = __importStar(require("node:path"));
39
+ const CLIENT_RUNTIME_PATH = '/@ws-watchdog.js';
40
+ function resolveClientRuntimePath() {
41
+ const candidates = [
42
+ path.resolve(__dirname, '../../src/runtime/ws-watchdog-client.mjs'), // lib/plugins → src/runtime
43
+ path.resolve(__dirname, '../runtime/ws-watchdog-client.mjs'), // src/plugins → src/runtime
44
+ ];
45
+ return candidates.find((p) => fs.existsSync(p)) ?? null;
46
+ }
47
+ function wsWatchdogPlugin(options = {}) {
48
+ const { pingEvent = 'ws-watchdog:ping', pongEvent = 'ws-watchdog:pong', clientBasePath = '', } = options;
49
+ const watchdogPath = clientBasePath + CLIENT_RUNTIME_PATH;
50
+ return {
51
+ name: 'miaoda-ws-watchdog',
52
+ apply: 'serve',
53
+ configureServer(server) {
54
+ server.ws.on(pingEvent, (data, client) => {
55
+ if (typeof data?.t !== 'number')
56
+ return;
57
+ client.send(pongEvent, { echo: data.t });
58
+ });
59
+ // 直出 plain .mjs,跳过 server.transformRequest;no-cache 让升降级即时生效
60
+ server.middlewares.use((req, res, next) => {
61
+ if (req.url !== watchdogPath)
62
+ return next();
63
+ const clientPath = resolveClientRuntimePath();
64
+ if (!clientPath) {
65
+ res.statusCode = 500;
66
+ res.end('// ws-watchdog client not found');
67
+ return;
68
+ }
69
+ try {
70
+ let code = fs.readFileSync(clientPath, 'utf-8');
71
+ const env = {
72
+ 'process.env.FORCE_FRAMEWORK_DOMAIN_MAIN': JSON.stringify(process.env.FORCE_FRAMEWORK_DOMAIN_MAIN ?? ''),
73
+ 'process.env.CLIENT_BASE_PATH': JSON.stringify(clientBasePath),
74
+ };
75
+ for (const [k, v] of Object.entries(env)) {
76
+ code = code.replace(new RegExp(k.replace(/\./g, '\\.'), 'g'), v);
77
+ }
78
+ res.setHeader('Content-Type', 'application/javascript');
79
+ res.setHeader('Cache-Control', 'no-cache');
80
+ res.end(code);
81
+ }
82
+ catch (e) {
83
+ console.error('[miaoda-ws-watchdog] serve failed:', e);
84
+ res.statusCode = 500;
85
+ res.end(`// error: ${e instanceof Error ? e.message : String(e)}`);
86
+ }
87
+ });
88
+ },
89
+ transformIndexHtml() {
90
+ const tags = [
91
+ {
92
+ tag: 'script',
93
+ attrs: { type: 'module', src: watchdogPath },
94
+ // head-prepend:尽早注入,避免业务代码先和外壳完成握手才出 watchdog
95
+ injectTo: 'head-prepend',
96
+ },
97
+ ];
98
+ return tags;
99
+ },
100
+ };
101
+ }
102
+ exports.default = wsWatchdogPlugin;
103
+ //# sourceMappingURL=ws-watchdog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ws-watchdog.js","sourceRoot":"","sources":["../../src/plugins/ws-watchdog.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * iOS 兼容性 Polyfills
3
+ *
4
+ * 使用 core-js 提供 iOS 15.4 以下版本需要的 polyfill
5
+ * 此文件会被单独打包成 polyfills.js,按需加载
6
+ */
7
+ import 'core-js/actual/array/at';
8
+ import 'core-js/actual/string/at';
9
+ import 'core-js/actual/array/find-last';
10
+ import 'core-js/actual/array/find-last-index';
11
+ import 'core-js/actual/object/has-own';
12
+ import 'core-js/actual/promise/any';
13
+ import 'core-js/actual/aggregate-error';
14
+ import 'core-js/actual/structured-clone';
15
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/polyfills/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,yBAAyB,CAAC;AACjC,OAAO,0BAA0B,CAAC;AAClC,OAAO,gCAAgC,CAAC;AACxC,OAAO,sCAAsC,CAAC;AAC9C,OAAO,+BAA+B,CAAC;AACvC,OAAO,4BAA4B,CAAC;AACpC,OAAO,gCAAgC,CAAC;AACxC,OAAO,iCAAiC,CAAC"}
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ /**
3
+ * iOS 兼容性 Polyfills
4
+ *
5
+ * 使用 core-js 提供 iOS 15.4 以下版本需要的 polyfill
6
+ * 此文件会被单独打包成 polyfills.js,按需加载
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ // ECMAScript polyfills (core-js)
10
+ require("core-js/actual/array/at");
11
+ require("core-js/actual/string/at");
12
+ require("core-js/actual/array/find-last");
13
+ require("core-js/actual/array/find-last-index");
14
+ require("core-js/actual/object/has-own");
15
+ require("core-js/actual/promise/any");
16
+ require("core-js/actual/aggregate-error");
17
+ require("core-js/actual/structured-clone");
18
+ // Web Crypto API polyfill (不在 core-js 范围内)
19
+ if (typeof crypto !== 'undefined' && typeof crypto.randomUUID !== 'function') {
20
+ Object.defineProperty(crypto, 'randomUUID', {
21
+ value: function randomUUID() {
22
+ const bytes = new Uint8Array(16);
23
+ crypto.getRandomValues(bytes);
24
+ bytes[6] = (bytes[6] & 0x0f) | 0x40;
25
+ bytes[8] = (bytes[8] & 0x3f) | 0x80;
26
+ let hex = '';
27
+ for (let i = 0; i < 16; i++) {
28
+ hex += (bytes[i] < 16 ? '0' : '') + bytes[i].toString(16);
29
+ }
30
+ return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`;
31
+ },
32
+ writable: true,
33
+ configurable: true,
34
+ });
35
+ }
36
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/polyfills/index.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;AAEH,iCAAiC;AACjC,mCAAiC;AACjC,oCAAkC;AAClC,0CAAwC;AACxC,gDAA8C;AAC9C,yCAAuC;AACvC,sCAAoC;AACpC,0CAAwC;AACxC,2CAAyC;AAEzC,2CAA2C;AAC3C,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,MAAM,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;IAC7E,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,YAAY,EAAE;QAC1C,KAAK,EAAE,SAAS,UAAU;YACxB,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC;YACjC,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;YAC9B,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;YACpC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;YACpC,IAAI,GAAG,GAAG,EAAE,CAAC;YACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC5B,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;YAC5D,CAAC;YACD,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;QAC7G,CAAC;QACD,QAAQ,EAAE,IAAI;QACd,YAAY,EAAE,IAAI;KACnB,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * 标准化 base path(**路径语义**,强制 `/` 前缀):
3
+ * - 空 / undefined → 空字符串
4
+ * - 前面强制加 `/`
5
+ * - 去掉尾部 `/`
6
+ *
7
+ * 适用:`CLIENT_BASE_PATH` 这种部署路径(一定以 `/` 开头)。
8
+ * **不要**用在 `ASSETS_CDN_PATH` 上 —— CDN 是完整 URL,强加 `/` 会变成
9
+ * `/https://cdn.foo.com/...` 直接破掉。URL 场景用 `normalizeBasePathWithoutTrailingSlash`。
10
+ *
11
+ * 例:
12
+ * normalizeBasePath('') === ''
13
+ * normalizeBasePath('/') === ''
14
+ * normalizeBasePath('foo') === '/foo'
15
+ * normalizeBasePath('/foo/') === '/foo'
16
+ * normalizeBasePath('/app/x/') === '/app/x'
17
+ */
18
+ export declare function normalizeBasePath(input: string | undefined): string;
19
+ /**
20
+ * 标准化 base path(**URL-safe**,只去尾斜杠不加首斜杠):
21
+ * - 空 / undefined / 单独 `/` → 空字符串
22
+ * - 去掉尾部 `/`
23
+ * - 完整 URL(含 scheme)原样保留
24
+ * - 相对路径不强加 `/` 前缀
25
+ *
26
+ * 适用:`ASSETS_CDN_PATH` 这种可能是完整 URL(`https://cdn.foo.com/x`)
27
+ * 也可能是路径(`/app/x`)的字段。
28
+ *
29
+ * 例:
30
+ * normalizeBasePathWithoutTrailingSlash('') === ''
31
+ * normalizeBasePathWithoutTrailingSlash('/') === ''
32
+ * normalizeBasePathWithoutTrailingSlash('/app/x/') === '/app/x'
33
+ * normalizeBasePathWithoutTrailingSlash('https://cdn.foo.com/x/') === 'https://cdn.foo.com/x'
34
+ * normalizeBasePathWithoutTrailingSlash('https://cdn.foo.com/x') === 'https://cdn.foo.com/x'
35
+ */
36
+ export declare function normalizeBasePathWithoutTrailingSlash(input: string | undefined): string;
37
+ //# sourceMappingURL=normalize-base-path.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalize-base-path.d.ts","sourceRoot":"","sources":["../../src/utils/normalize-base-path.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAMnE;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,qCAAqC,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAKvF"}
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.normalizeBasePath = normalizeBasePath;
4
+ exports.normalizeBasePathWithoutTrailingSlash = normalizeBasePathWithoutTrailingSlash;
5
+ /**
6
+ * 标准化 base path(**路径语义**,强制 `/` 前缀):
7
+ * - 空 / undefined → 空字符串
8
+ * - 前面强制加 `/`
9
+ * - 去掉尾部 `/`
10
+ *
11
+ * 适用:`CLIENT_BASE_PATH` 这种部署路径(一定以 `/` 开头)。
12
+ * **不要**用在 `ASSETS_CDN_PATH` 上 —— CDN 是完整 URL,强加 `/` 会变成
13
+ * `/https://cdn.foo.com/...` 直接破掉。URL 场景用 `normalizeBasePathWithoutTrailingSlash`。
14
+ *
15
+ * 例:
16
+ * normalizeBasePath('') === ''
17
+ * normalizeBasePath('/') === ''
18
+ * normalizeBasePath('foo') === '/foo'
19
+ * normalizeBasePath('/foo/') === '/foo'
20
+ * normalizeBasePath('/app/x/') === '/app/x'
21
+ */
22
+ function normalizeBasePath(input) {
23
+ if (!input)
24
+ return '';
25
+ let p = input.trim();
26
+ if (!p || p === '/')
27
+ return '';
28
+ if (!p.startsWith('/'))
29
+ p = '/' + p;
30
+ return p.replace(/\/+$/, '');
31
+ }
32
+ /**
33
+ * 标准化 base path(**URL-safe**,只去尾斜杠不加首斜杠):
34
+ * - 空 / undefined / 单独 `/` → 空字符串
35
+ * - 去掉尾部 `/`
36
+ * - 完整 URL(含 scheme)原样保留
37
+ * - 相对路径不强加 `/` 前缀
38
+ *
39
+ * 适用:`ASSETS_CDN_PATH` 这种可能是完整 URL(`https://cdn.foo.com/x`)
40
+ * 也可能是路径(`/app/x`)的字段。
41
+ *
42
+ * 例:
43
+ * normalizeBasePathWithoutTrailingSlash('') === ''
44
+ * normalizeBasePathWithoutTrailingSlash('/') === ''
45
+ * normalizeBasePathWithoutTrailingSlash('/app/x/') === '/app/x'
46
+ * normalizeBasePathWithoutTrailingSlash('https://cdn.foo.com/x/') === 'https://cdn.foo.com/x'
47
+ * normalizeBasePathWithoutTrailingSlash('https://cdn.foo.com/x') === 'https://cdn.foo.com/x'
48
+ */
49
+ function normalizeBasePathWithoutTrailingSlash(input) {
50
+ if (!input)
51
+ return '';
52
+ const p = input.trim();
53
+ if (!p || p === '/')
54
+ return '';
55
+ return p.replace(/\/+$/, '');
56
+ }
57
+ //# sourceMappingURL=normalize-base-path.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalize-base-path.js","sourceRoot":"","sources":["../../src/utils/normalize-base-path.ts"],"names":[],"mappings":";;AAiBA,8CAMC;AAmBD,sFAKC;AA/CD;;;;;;;;;;;;;;;;GAgBG;AACH,SAAgB,iBAAiB,CAAC,KAAyB;IACzD,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,CAAC;IACtB,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IACrB,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG;QAAE,OAAO,EAAE,CAAC;IAC/B,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;IACpC,OAAO,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AAC/B,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,SAAgB,qCAAqC,CAAC,KAAyB;IAC7E,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,CAAC;IACtB,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IACvB,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG;QAAE,OAAO,EAAE,CAAC;IAC/B,OAAO,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AAC/B,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { Connect } from 'vite';
2
+ /**
3
+ * `/dev/snapdom-proxy?url=<encoded>` 转发到目标 URL,带上 request cookie。
4
+ * 给客户端截图(snapdom)库做跨域兜底用。仅 dev。
5
+ */
6
+ export interface SnapDomMiddlewareOptions {
7
+ proxyUrl?: string;
8
+ baseUrl?: string;
9
+ }
10
+ export declare function registerSnapDomProxyMiddleware(middlewares: Connect.Server, options?: SnapDomMiddlewareOptions): void;
11
+ export default registerSnapDomProxyMiddleware;
12
+ //# sourceMappingURL=snapdom-proxy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snapdom-proxy.d.ts","sourceRoot":"","sources":["../../src/utils/snapdom-proxy.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAEpC;;;GAGG;AACH,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,8BAA8B,CAC5C,WAAW,EAAE,OAAO,CAAC,MAAM,EAC3B,OAAO,GAAE,wBAA6B,GACrC,IAAI,CAsCN;AAED,eAAe,8BAA8B,CAAC"}
@@ -0,0 +1,75 @@
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.registerSnapDomProxyMiddleware = registerSnapDomProxyMiddleware;
37
+ const path = __importStar(require("node:path"));
38
+ function registerSnapDomProxyMiddleware(middlewares, options = {}) {
39
+ const { proxyUrl = '/dev/snapdom-proxy', baseUrl = '/' } = options;
40
+ const targetUrl = path.join(baseUrl, proxyUrl);
41
+ middlewares.use(async (req, res, next) => {
42
+ if (req.method !== 'GET' || !req.url?.startsWith(targetUrl)) {
43
+ return next();
44
+ }
45
+ try {
46
+ const url = new URL(req.url, `http://${req.headers.host}`);
47
+ let targetParam = url.searchParams.get('url');
48
+ if (!targetParam) {
49
+ res.statusCode = 400;
50
+ res.setHeader('Content-Type', 'application/json');
51
+ res.end(JSON.stringify({ error: 'Missing url parameter' }));
52
+ return;
53
+ }
54
+ targetParam = decodeURIComponent(targetParam);
55
+ const response = await fetch(targetParam, {
56
+ headers: { cookie: req.headers.cookie || '' },
57
+ });
58
+ const contentType = response.headers.get('content-type');
59
+ if (contentType)
60
+ res.setHeader('Content-Type', contentType);
61
+ const buffer = await response.arrayBuffer();
62
+ res.end(Buffer.from(buffer));
63
+ }
64
+ catch (error) {
65
+ res.statusCode = 500;
66
+ res.setHeader('Content-Type', 'application/json');
67
+ res.end(JSON.stringify({
68
+ error: 'Proxy request failed',
69
+ message: error.message,
70
+ }));
71
+ }
72
+ });
73
+ }
74
+ exports.default = registerSnapDomProxyMiddleware;
75
+ //# sourceMappingURL=snapdom-proxy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snapdom-proxy.js","sourceRoot":"","sources":["../../src/utils/snapdom-proxy.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAYA,wEAyCC;AArDD,gDAAkC;AAYlC,SAAgB,8BAA8B,CAC5C,WAA2B,EAC3B,UAAoC,EAAE;IAEtC,MAAM,EAAE,QAAQ,GAAG,oBAAoB,EAAE,OAAO,GAAG,GAAG,EAAE,GAAG,OAAO,CAAC;IACnE,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAE/C,WAAW,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QACvC,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC5D,OAAO,IAAI,EAAE,CAAC;QAChB,CAAC;QACD,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,UAAU,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;YAC3D,IAAI,WAAW,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAC9C,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC;gBACrB,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC;gBAClD,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,uBAAuB,EAAE,CAAC,CAAC,CAAC;gBAC5D,OAAO;YACT,CAAC;YACD,WAAW,GAAG,kBAAkB,CAAC,WAAW,CAAC,CAAC;YAC9C,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,WAAW,EAAE;gBACxC,OAAO,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,EAAE;aAC9C,CAAC,CAAC;YAEH,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;YACzD,IAAI,WAAW;gBAAE,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;YAE5D,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAC;YAC5C,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QAC/B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC;YACrB,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC;YAClD,GAAG,CAAC,GAAG,CACL,IAAI,CAAC,SAAS,CAAC;gBACb,KAAK,EAAE,sBAAsB;gBAC7B,OAAO,EAAG,KAAe,CAAC,OAAO;aAClC,CAAC,CACH,CAAC;QACJ,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED,kBAAe,8BAA8B,CAAC"}
package/package.json CHANGED
@@ -1,19 +1,11 @@
1
1
  {
2
2
  "name": "@lark-apaas/coding-preset-vite-react",
3
- "version": "0.1.1-alpha.0",
3
+ "version": "0.1.1",
4
4
  "description": "Vite 8 preset for miaoda-coding vite-react (jsPage) templates — pure frontend, no fullstack baggage",
5
- "type": "module",
6
- "module": "./dist/index.js",
7
- "types": "./dist/index.d.ts",
8
- "exports": {
9
- ".": {
10
- "types": "./dist/index.d.ts",
11
- "import": "./dist/index.js"
12
- },
13
- "./package.json": "./package.json"
14
- },
5
+ "main": "./lib/index.js",
6
+ "types": "./lib/index.d.ts",
15
7
  "files": [
16
- "dist",
8
+ "lib",
17
9
  "src/empty.css",
18
10
  "src/inspector-stub.js",
19
11
  "src/module-alias",
@@ -22,9 +14,12 @@
22
14
  "src/runtime"
23
15
  ],
24
16
  "scripts": {
25
- "build": "tsup",
17
+ "build": "tsc || true",
18
+ "watch": "tsc --watch",
26
19
  "typecheck": "tsc --noEmit",
27
- "test": "vitest run"
20
+ "test": "vitest run",
21
+ "test:watch": "vitest",
22
+ "prepublishOnly": "npm run build"
28
23
  },
29
24
  "dependencies": {
30
25
  "@babel/parser": "^7.28.0",
@@ -49,7 +44,6 @@
49
44
  "@types/babel__traverse": "^7.20.0",
50
45
  "@types/html-minifier-terser": "^7.0.2",
51
46
  "@types/node": "^22.0.0",
52
- "tsup": "^8.0.0",
53
47
  "typescript": "^5.6.0",
54
48
  "vite": "^8.0.0",
55
49
  "vitest": "^3.0.0"