feat: integrate Stripe payment with subscription plans
Add Stripe payment integration across the project: - Add @stripe/stripe-js dependency - Configure Stripe environment variables (secret key, publishable key, webhook secret) for dev, local, and production environments - Add Product/Price IDs for monthly, quarterly, and annual subscription tiers - Extend subscription plan data with voiceMinutesPerDay quotas (30/45/60 minutes per tier) - Update .gitignore to exclude implementation_plan.md
This commit is contained in:
@@ -0,0 +1,97 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
批量清理 TypeScript / TSX 文件中注释里的加粗样式 `**...**`
|
||||
|
||||
策略:
|
||||
1. 维护一个状态机:normal / line_comment / block_comment
|
||||
2. 遇到 `//` → 进入 line_comment
|
||||
3. 遇到 `/*` → 进入 block_comment
|
||||
4. 遇到 `*/` → 退出 block_comment
|
||||
5. 遇到换行 → 退出 line_comment
|
||||
6. 在 comment 状态下,删除所有孤立的 `**` 标记(成对出现或单数都处理)
|
||||
|
||||
注意事项:
|
||||
- 字符串字面量("..." / '...' / `...`)不会被识别 —— 不会误删代码里的 `**`
|
||||
- 模板字符串(`...`)也不识别 —— 同样安全
|
||||
- 只在 comment 状态下删除 `**`
|
||||
"""
|
||||
import re
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
def strip_bold_from_comments(text: str) -> str:
|
||||
"""状态机:只在 comment 状态删除 `**`"""
|
||||
out: list[str] = []
|
||||
i = 0
|
||||
n = len(text)
|
||||
state = "normal" # normal | line_comment | block_comment
|
||||
|
||||
while i < n:
|
||||
c = text[i]
|
||||
c2 = text[i + 1] if i + 1 < n else ""
|
||||
|
||||
if state == "normal":
|
||||
if c == "/" and c2 == "/":
|
||||
out.append(c)
|
||||
out.append(c2)
|
||||
i += 2
|
||||
state = "line_comment"
|
||||
continue
|
||||
if c == "/" and c2 == "*":
|
||||
out.append(c)
|
||||
out.append(c2)
|
||||
i += 2
|
||||
state = "block_comment"
|
||||
continue
|
||||
out.append(c)
|
||||
i += 1
|
||||
elif state == "line_comment":
|
||||
if c == "\n":
|
||||
out.append(c)
|
||||
i += 1
|
||||
state = "normal"
|
||||
continue
|
||||
# 在 line_comment 状态下:跳过 `**`
|
||||
if c == "*" and c2 == "*":
|
||||
i += 2
|
||||
continue
|
||||
out.append(c)
|
||||
i += 1
|
||||
elif state == "block_comment":
|
||||
if c == "*" and c2 == "/":
|
||||
out.append(c)
|
||||
out.append(c2)
|
||||
i += 2
|
||||
state = "normal"
|
||||
continue
|
||||
# 在 block_comment 状态下:跳过 `**`
|
||||
if c == "*" and c2 == "*":
|
||||
i += 2
|
||||
continue
|
||||
out.append(c)
|
||||
i += 1
|
||||
|
||||
return "".join(out)
|
||||
|
||||
|
||||
def main():
|
||||
if len(sys.argv) < 2:
|
||||
print("Usage: strip-bold-from-comments.py <file> [file...]")
|
||||
sys.exit(1)
|
||||
|
||||
for path_str in sys.argv[1:]:
|
||||
path = Path(path_str)
|
||||
text = path.read_text(encoding="utf-8")
|
||||
original = text
|
||||
cleaned = strip_bold_from_comments(text)
|
||||
if cleaned != original:
|
||||
path.write_text(cleaned, encoding="utf-8")
|
||||
removed = original.count("**") - cleaned.count("**")
|
||||
print(f" {path_str}: removed {removed} `**` markers")
|
||||
else:
|
||||
print(f" {path_str}: no changes")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user