docs: define键改点链形式(esbuild成员表达式替换实测约束)+spec同步slug安全线32口径
Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
@@ -80,8 +80,8 @@ Expected: FAIL(`SANITIZE_RULE_VERSION` 不存在 / userinfo 未剥离)
|
||||
|
||||
```python
|
||||
SANITIZE_RULE_VERSION = "v2"
|
||||
# 三轨制(spec §2.4):①参数名黑名单整键删;②归因白名单提取保留;
|
||||
# ③其余参数按值判别:安全模式(纯数字≤10位 / slug≤64)保留,其余删。
|
||||
# 三轨制(spec §2.4,slug 安全线以本计划为准=32):①参数名黑名单整键删;
|
||||
# ②归因白名单提取保留;③其余按值判别:纯数字≤10位或 slug≤32 保留,其余删。
|
||||
URL_PARAM_DROP_PATTERNS = ("email", "phone", "mobile", "tel", "name", "user",
|
||||
"token", "key", "password", "verif", "passwd", "idcard")
|
||||
ATTRIBUTION_PARAM_WHITELIST = {"gclid", "gbraid", "wbraid", "fbclid", "msclkid",
|
||||
@@ -363,16 +363,18 @@ import { execSync } from "node:child_process";
|
||||
const buildId = execSync("git log -1 --format=%h-%cd --date=format:%Y%m%d%H%M").toString().trim();
|
||||
await build({ entryPoints: ["src/index.ts"], bundle: true, minify: true, format: "iife",
|
||||
outfile: "dist/v1.js", target: ["es2020"],
|
||||
define: { __BUILD_ID__: JSON.stringify(buildId) } });
|
||||
// define 键必须用点链:esbuild 只做精确表达式匹配,裸键 __BUILD_ID__
|
||||
// 不会替换 globalThis.__BUILD_ID__ 成员访问(实测 0.24.2),build_id 将恒为 "unknown"
|
||||
define: { "globalThis.__BUILD_ID__": JSON.stringify(buildId) } });
|
||||
```
|
||||
|
||||
(fallback:git 失败时用 `"dev-" + Date.now()`,try/catch 包裹——构建环境无 git 不得挂。)
|
||||
|
||||
vitest.config.ts 同步注入(否则 index.ts 引用 BUILD_ID 在测试环境 undefined——有 ?? 兜底不炸,但注入后可断言真实值):
|
||||
vitest.config.ts 同步注入(键同样用点链):
|
||||
|
||||
```ts
|
||||
export default defineConfig({
|
||||
define: { __BUILD_ID__: JSON.stringify("vitest") },
|
||||
define: { "globalThis.__BUILD_ID__": JSON.stringify("vitest") },
|
||||
test: { environment: "happy-dom" },
|
||||
});
|
||||
```
|
||||
@@ -504,7 +506,7 @@ test("v1 兼容形态不再产生(新 SDK 恒 schema_version:2 信封 + 事件
|
||||
|
||||
```ts
|
||||
import vectors from "../../server/tracker/tests/fixtures/sanitize_vectors.json";
|
||||
test.each(vectors.vectors)("sanitizeUrl($input) → $expected", (v) => {
|
||||
test.each(vectors.vectors)("sanitizeUrl vector", (v) => {
|
||||
expect(sanitizeUrl(v.in)).toBe(v.out);
|
||||
});
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user