@aicqtools/guardrail 1.0.0-beta.1 → 1.0.0-beta.2

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.
@@ -1,3 +1,12 @@
1
+ /**
2
+ * Test/spec files often contain DI-style lookups like NestJS `TestingModule.get(token)`,
3
+ * which collide with the `app.get(...)` / `router.get(...)` route-registration shape that
4
+ * this rule scans for. Defaulting these paths to skip removes the noise; users who really
5
+ * register routes from spec files can opt out via `skipBuiltinSkips: true` or `overrides`.
6
+ *
7
+ * Surfaced by the Nest.js `typescript-starter` external dogfood (beta.1, 2026-05-21).
8
+ */
9
+ export declare const SKIP_FILE_RE: RegExp;
1
10
  declare const _default: import("@aicqtools/rule-sdk").FunctionRule;
2
11
  export default _default;
3
12
  //# sourceMappingURL=route-needs-rate-limit.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"route-needs-rate-limit.d.ts","sourceRoot":"","sources":["../../src/rules-default/route-needs-rate-limit.ts"],"names":[],"mappings":";AAqBA,wBAuBG"}
1
+ {"version":3,"file":"route-needs-rate-limit.d.ts","sourceRoot":"","sources":["../../src/rules-default/route-needs-rate-limit.ts"],"names":[],"mappings":"AAMA;;;;;;;GAOG;AACH,eAAO,MAAM,YAAY,QAA2C,CAAC;;AAiBrE,wBAyBG"}
@@ -1,6 +1,15 @@
1
1
  import { defineRule } from '@aicqtools/rule-sdk';
2
2
  const ROUTER_METHODS = new Set(['get', 'post', 'put', 'patch', 'delete']);
3
3
  const RATE_LIMIT_PATTERN = /rate.?limit/i;
4
+ /**
5
+ * Test/spec files often contain DI-style lookups like NestJS `TestingModule.get(token)`,
6
+ * which collide with the `app.get(...)` / `router.get(...)` route-registration shape that
7
+ * this rule scans for. Defaulting these paths to skip removes the noise; users who really
8
+ * register routes from spec files can opt out via `skipBuiltinSkips: true` or `overrides`.
9
+ *
10
+ * Surfaced by the Nest.js `typescript-starter` external dogfood (beta.1, 2026-05-21).
11
+ */
12
+ export const SKIP_FILE_RE = /(\.test\.|\.spec\.|__tests__|e2e-spec)/;
4
13
  function isRouterCall(callee, textOf) {
5
14
  if (callee.type !== 'member_expression')
6
15
  return false;
@@ -23,8 +32,11 @@ export default defineRule({
23
32
  severity: 'error',
24
33
  message: 'New route is missing a rate-limit middleware.',
25
34
  messageKo: '새 라우트에 rate-limit 미들웨어가 빠졌습니다.',
35
+ skipPatterns: [SKIP_FILE_RE],
26
36
  visitors: {
27
37
  call_expression(node, ctx) {
38
+ if (!ctx.skipBuiltinSkips && SKIP_FILE_RE.test(ctx.filePath))
39
+ return;
28
40
  const callee = node.childForFieldName('function');
29
41
  if (!callee || !isRouterCall(callee, ctx.textOf))
30
42
  return;
@@ -1 +1 @@
1
- {"version":3,"file":"route-needs-rate-limit.js","sourceRoot":"","sources":["../../src/rules-default/route-needs-rate-limit.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEjD,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;AAC1E,MAAM,kBAAkB,GAAG,cAAc,CAAC;AAE1C,SAAS,YAAY,CAAC,MAAyB,EAAE,MAAwC;IACvF,IAAI,MAAM,CAAC,IAAI,KAAK,mBAAmB;QAAE,OAAO,KAAK,CAAC;IACtD,MAAM,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAC/C,MAAM,IAAI,GAAG,MAAM,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;IAClD,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI;QAAE,OAAO,KAAK,CAAC;IAChC,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IAC5B,IAAI,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK;QAAE,OAAO,KAAK,CAAC;IAC5D,OAAO,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;AAC1C,CAAC;AAED,SAAS,eAAe,CAAC,GAAsB,EAAE,MAAwC;IACvF,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IACzB,OAAO,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACvC,CAAC;AAED,eAAe,UAAU,CAAC;IACxB,EAAE,EAAE,wBAAwB;IAC5B,QAAQ,EAAE,CAAC,YAAY,EAAE,YAAY,EAAE,KAAK,CAAC;IAC7C,QAAQ,EAAE,OAAO;IACjB,OAAO,EAAE,+CAA+C;IACxD,SAAS,EAAE,gCAAgC;IAC3C,QAAQ,EAAE;QACR,eAAe,CAAC,IAAI,EAAE,GAAG;YACvB,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;YAClD,IAAI,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC;gBAAE,OAAO;YACzD,MAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;YACjD,IAAI,CAAC,IAAI;gBAAE,OAAO;YAClB,IAAI,YAAY,GAAG,KAAK,CAAC;YACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC9C,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;gBAC/B,IAAI,GAAG,IAAI,eAAe,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;oBAC5C,YAAY,GAAG,IAAI,CAAC;oBACpB,MAAM;gBACR,CAAC;YACH,CAAC;YACD,IAAI,CAAC,YAAY;gBAAE,GAAG,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1C,CAAC;KACF;CACF,CAAC,CAAC"}
1
+ {"version":3,"file":"route-needs-rate-limit.js","sourceRoot":"","sources":["../../src/rules-default/route-needs-rate-limit.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEjD,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;AAC1E,MAAM,kBAAkB,GAAG,cAAc,CAAC;AAE1C;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,wCAAwC,CAAC;AAErE,SAAS,YAAY,CAAC,MAAyB,EAAE,MAAwC;IACvF,IAAI,MAAM,CAAC,IAAI,KAAK,mBAAmB;QAAE,OAAO,KAAK,CAAC;IACtD,MAAM,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAC/C,MAAM,IAAI,GAAG,MAAM,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;IAClD,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI;QAAE,OAAO,KAAK,CAAC;IAChC,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IAC5B,IAAI,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK;QAAE,OAAO,KAAK,CAAC;IAC5D,OAAO,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;AAC1C,CAAC;AAED,SAAS,eAAe,CAAC,GAAsB,EAAE,MAAwC;IACvF,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IACzB,OAAO,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACvC,CAAC;AAED,eAAe,UAAU,CAAC;IACxB,EAAE,EAAE,wBAAwB;IAC5B,QAAQ,EAAE,CAAC,YAAY,EAAE,YAAY,EAAE,KAAK,CAAC;IAC7C,QAAQ,EAAE,OAAO;IACjB,OAAO,EAAE,+CAA+C;IACxD,SAAS,EAAE,gCAAgC;IAC3C,YAAY,EAAE,CAAC,YAAY,CAAC;IAC5B,QAAQ,EAAE;QACR,eAAe,CAAC,IAAI,EAAE,GAAG;YACvB,IAAI,CAAC,GAAG,CAAC,gBAAgB,IAAI,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;gBAAE,OAAO;YACrE,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;YAClD,IAAI,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC;gBAAE,OAAO;YACzD,MAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;YACjD,IAAI,CAAC,IAAI;gBAAE,OAAO;YAClB,IAAI,YAAY,GAAG,KAAK,CAAC;YACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC9C,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;gBAC/B,IAAI,GAAG,IAAI,eAAe,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;oBAC5C,YAAY,GAAG,IAAI,CAAC;oBACpB,MAAM;gBACR,CAAC;YACH,CAAC;YACD,IAAI,CAAC,YAAY;gBAAE,GAAG,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1C,CAAC;KACF;CACF,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aicqtools/guardrail",
3
- "version": "1.0.0-beta.1",
3
+ "version": "1.0.0-beta.2",
4
4
  "type": "module",
5
5
  "description": "Deterministic AI code guardrail engine — 37 built-in rules, hybrid YAML/function DSL, MCP server, .cursorrules sync, sqlite cache.",
6
6
  "keywords": [
@@ -45,8 +45,8 @@
45
45
  "micromatch": "^4.0.8",
46
46
  "yaml": "^2.6.1",
47
47
  "zod": "^3.23.8",
48
- "@aicqtools/core": "1.0.0-beta.1",
49
- "@aicqtools/rule-sdk": "1.0.0-beta.1"
48
+ "@aicqtools/rule-sdk": "1.0.0-beta.2",
49
+ "@aicqtools/core": "1.0.0-beta.2"
50
50
  },
51
51
  "peerDependencies": {
52
52
  "tree-sitter": "~0.22.4"