@amboras-dev/money-gate
钱门:一个找到手写钱码的dev-time检查器 @amboras-dev/money 替换.
每找到要使用的软件包函数的名称 .
一个运行中的依赖, @amboras-dev/money (其货币登记); 节点 .
pnpm add -D @amboras-dev/money-gate
npx money-gate baseline # once, when a repo adopts the gate
npx money-gate check --ratchet # in CI
src/checkout.ts:4:30 MG002 hand-rolled x100 / x1000 money scaling -> fromMajor / toMajorDecimal / percentOf
src/checkout.ts MG002: 2 found, baseline allows 1
money-gate: 1 count(s) above the baseline, 0 below it
规则
| 编号 | 查找 | 改为使用 |
|---|---|---|
| MG001号文件 | 10 **, (中文(简体) ), Math.pow(10,, (中文(简体) ), 1e2, (中文(简体) ), 1e3, (中文(简体) ), 1e7,以及 10_000_000 以比率(如果是上限)相邻 | storageScale, (中文(简体) ), fromMajor, (中文(简体) ), toMajorDecimal, (中文(简体) ), RATE_REF |
| MG002 (选入) | * 100, (中文(简体) ), / 100, (中文(简体) ), * 1000, (中文(简体) ), / 1000 包括货币操作(金额、价格、总额、成本、费用、小计、余额、小数、分数、主要、储存、价值),而不是一次 | fromMajor, (中文(简体) ), toMajorDecimal, (中文(简体) ), percentOf |
| MG003(选入) | toFixed( 打开,和 parseFloat( 编号 : Number( 货币价值 | toMajorDecimal, (中文(简体) ), readStored, (中文(简体) ), parseImportAmount |
| MG004 导弹 | Intl.NumberFormat 与 style: 'currency' 或者说 currencyDisplay, (中文(简体) ), toLocaleString 有货币 | formatMoney |
| MG005导弹 | 数组、 设置或对象字面上持有 3 个或更多货币代码 | 登记册, pspCurrencies |
| MG006 导弹 | ?? 'USD', (中文(简体) ), || 'EUR', (中文(简体) ), currency = 'usd' 默认, SQL COALESCE(currency_code, 'usd') | firstCurrency |
| MG007号 | SQL : (英语) decimal_digits, (中文(简体) ), THEN 1000 ELSE 100, (中文(简体) ), POWER(10, ...), (中文(简体) ), 10 ^ ..., (中文(简体) ), jsonb_build_object('value',计算 rate_numerator 编号 : rate_denominator, (中文(简体) ), ROUND(..., 2) 钱 | @amboras-dev/money/sql 建设者 |
| MG008 导弹 | 退休援助人员进口(下表),当地 formatMoney 编号 : formatCurrency大数 toNumber 编号 : toNum外头的遗赠货币 legacyShimAllow | 每个查找名称的函数 |
| MG009 导弹 | minor units, (中文(简体) ), in cents, (中文(简体) ), divide by 100, (中文(简体) ), (cents) 在字符串中,外部装饰器调用(文本禁止单位使用时不使用:"Never mess 或 small unit") | MONEY_UNIT_SENTENCE, (中文(简体) ), STORAGE_UNIT_SENTENCE |
| 千兆马赫 | 豁免,无规则编号或理由 | 完全豁免 |
代码规则只读代码:注释,字符串字元和正格克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克.
JSX 关闭标签(</p>, (中文(简体) ), </>, (中文(简体) ), <a href={x} />)不作regex字读取.
字符串规则读取字符串和模板文字; SQL 规则读取字符串文字和 .sql 文档.
MG002和MG003默认关闭:它们自行标出百分比,点名 total 和DOM系统 .value 阅读太频繁.
打开每回波 "rules": { "MG002": "on", "MG003": "on" } 在配置中.
货币代码(MG005,MG006):一个大写代码总是算数.
小写代码,或同为常用词或缩略语的代码(ALL, (中文(简体) ), TOP, (中文(简体) ), TRY, (中文(简体) ), PHP, (中文(简体) ), CAD, (中文(简体) ), AMD, (中文(简体) ), BTN 和其余部分 WORD_COLLISIONS 内 src/currencies.ts),只计算货币背景.
在代码中,表示其前方的语句取出货币名称(currency, (中文(简体) ), currencies, (中文(简体) ), ZERO_DECIMAL. ) (中文(简体) ) store.currency ?? 'usd' 财务报告和审定财务报表 const zeroDecimalCurrencies = ['jpy', ...] 计数, filter ?? 'all' 财务报告和审定财务报表 ['all', 'top', 'try'] 别.
一个街区里的第一个声明 也读了街区的头条,所以 function normalizeCurrency(code) { return code ?? 'usd' } 计数.
在模板本身的文本中读取模板文字中的倒置(以文本形式生成的存储前置代码).
在 SQL 中 COALESCE,第一个参数必须提及货币或代码栏.
MG009在装饰器调用参数中跳过字符串(@ApiProperty({ description: 'Amount in cents' }),任意 @Name(...):这些文档是Swagger/OpenAPI的电线字段,而不是模型的措辞.
工具计划中的字符串( T)z.number().describe('...'))和提示仍在检查中.
退休人员(MG008)
| 帮助 | 改为使用 |
|---|---|
divisorFor | storageScale(code) |
storageDivisorForDigits | storageScale(code) (按代码键,不是数字;在SQL中 @amboras-dev/money/sql 建设者 |
fractionDigitsFor | storageDigits(code) 因为它是如何储存的, displayDigits(code) 为了显示什么 |
isoFractionDigits | pspWireDigits(psp, code) 从 @amboras-dev/money/wire |
toMinorUnits | fromMajor(major, code) |
toMajorUnits | toMajorDecimal(roundToUnit(readStoredDecimal(raw), code)): Medusa的总数可以是分数(sevDesk, GA4,发票)和 readStored 投出分数 |
readAmountNumber大数 toNumber 编号 : toNum | readStoredDecimal(raw) (保留分数),或 readStored(raw, code) 全部储存量 |
a 当地 formatMoney 编号 : formatCurrency | formatMoney(m) 从 @amboras-dev/money |
| 留下的货币 shim | currencyCode(value) 或者说 firstCurrency(...) |
toStorageAmount (单位:千美元)@amboras-dev/capability-kit(中文(简体) ) | fromMajor(major, code).amount |
fromStorageAmount (单位:千美元)@amboras-dev/capability-kit(中文(简体) ) | toMajorDecimal(readStored(stored, code)),或 toMajorNumber 对于浮点 |
storageScale (单位:千美元)@amboras-dev/capability-kit(中文(简体) ) | storageScale(code) 从 @amboras-dev/money |
fractionDigits (单位:千美元)@amboras-dev/capability-kit(中文(简体) ) | storageDigits(code) |
moneyView (单位:千美元)@amboras-dev/capability-kit(中文(简体) ) | moneyView(readStored(stored, code)) 从 @amboras-dev/money/ai |
只有在从 @amboras-dev/capability-kit; 软件包本身 storageScale 财务报告和审定财务报表 moneyView 是替换.
豁免
// money-gate-exempt: MG001 the one legacy scale kept until the wire migration
const LEGACY_SCALE = 10 ** 2;
标记覆盖了自己的行和下方的两行,仅用于被命名的规则.
它只算在评论中//, (中文(简体) ), /* */,或 -- 在 SQL 中);字符串正文中相同的文字是数据,不免除任何内容.
规则ID和理由是强制性的;没有它们,标记就是MG000违章行为,并免除了任何东西.
旧的 money-scale-exempt: <reason> 标记计为迁移期间的MG001豁免.
基线
money-gate.baseline.json 将违规案件立案 并按档案和规则计算.
check (一) 任何超过基线的计数都未能实现(新的违规行为); check --ratchet 在基准降低之前,低于基准的计数也会失败,因此基准只缩小.
baseline 写入当前计数并拒绝提高任何计数,除非 --force (在评论中出现).
基线(第2版)还存储了每个文件和规则的指纹:每条违法行的出处文本,被修剪,排序和散列(SHA-256,前16个正数). 当行在文件内移动或文件被更名时,它不会改变;当任何违反的行被添加,去除或编辑时,它也会改变.
纯粹的重命名或移动会保留它的计数.
基准文件不会继承基准文件的条目,而基准文件只有在对每项规则来说,计数和指纹都相等时才不再扫描.
礛 check 通过并打印重命名,以及 baseline 重写新路径的条目, 不 --force。 。 。 .
check --ratchet 失败直到基线被刷新, 因此一个 stale 路径不能在以后被再使用 .
删除一个基线文件, 并添加一个与此相同的不相关的文件, 不是一个重命名( 线条不同) , 因此其违反失败 check 作为新的.
添加、删除或编辑违法行的重命名不包含: 修正违法行,或 baseline --force。 。 。 .
第1版基线(仅计数)仍然被读取,但没有任何内容被取出; money-gate baseline 升级它.
配置
money-gate.config.json 在 repo 根( 所有键可选) :
{
"include": ["src/**/*.ts", "scripts/**/*.ts"],
"sql": ["src/migrations/**/*.sql"],
"exclude": ["src/generated/**"],
"legacyShimAllow": ["src/modules/payments/stripe/**"],
"baseline": "money-gate.baseline.json",
"rules": { "MG002": "on", "MG003": "on" }
}
include 默认为 src/**/*.{ts,tsx,js,jsx,mjs,cjs}。 。 。 .
完全不选择文件的配置是一个配置错误( exit 2) , 命名了 globs 和 root, 绝不是 “ ok ” : 代码不下的一个 repo src/ 必须设置 include。 。 。 .
rules 开关 MG001-MG009 "on" 或者说 "off" 从其默认值(MG002和MG003启动)起.
从未扫描 : node_modules, (中文(简体) ), dist, (中文(简体) ), *.generated.ts 和测试文件*.spec.*, (中文(简体) ), *.test.*),可建立固定装置.
球状支持 **, (中文(简体) ), *, (中文(简体) ), ? 财务报告和审定财务报表 {a,b}。 。 。 .
疏 漏 (!pattern)不支持,并且是一个配置错误,而不是一个沉默的不开放:在下方列出模式 exclude。 。 。 .
收 养
- 添加一个
money-gate.config.json谁include(和sql)选择repo的代码;门拒绝在空选择上运行. npx money-gate baseline一次,输入基线,然后运行npx money-gate check --ratchet在中央情报局.- 退去Repo的自已的钱卫 作为他们的规则土地在这里.
美杜萨:
src/common/utils/money-conversion-sites.spec.ts要求CASE WHEN ... decimal_digits ... THEN 1000 ELSE 100 END存储divisor 在analytics.service.ts,MG007的禁令. 它的通过 PR 重写了要断言@amboras-dev/money/sql代之以建造者,并放弃其10次检查,即MG001(代码)和MG007(POWER(10, ...), (中文(简体) ),10 ^ ...现在的封面.
图标
money-gate check [--ratchet] [--json] [--root <dir>] [--config <file>]: 出 0 清, 1 违反, 2 使用或配置出错 .money-gate baseline [--force] [--root <dir>] [--config <file>]。 。 。 .- 图书馆输出相同的部件(
run, (中文(简体) ),scanSource, (中文(简体) ),scanRepo, (中文(简体) ),RULES, (中文(简体) ),loadConfig,基线帮助者).