@alimaandev/ripple 0.7.0 → 0.7.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.
- package/README.md +52 -46
- package/dist/bin.d.ts +1 -1
- package/dist/bin.js +390 -189
- package/dist/bin.js.map +1 -1
- package/dist/{chunk-CFH4UW2E.js → chunk-VSLCAPAH.js} +3 -3
- package/dist/chunk-VSLCAPAH.js.map +1 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.js +1 -1
- package/package.json +3 -2
- package/ripple.schema.json +2 -2
- package/dist/chunk-CFH4UW2E.js.map +0 -1
|
@@ -4,7 +4,7 @@ import { z } from 'zod';
|
|
|
4
4
|
// src/config/defaults.ts
|
|
5
5
|
var DEFAULT_CONFIG = {
|
|
6
6
|
$schema: void 0,
|
|
7
|
-
include: ["**/*.{ts,tsx,js,jsx}"],
|
|
7
|
+
include: ["**/*.{ts,tsx,js,jsx,mts,cts,mjs,cjs}"],
|
|
8
8
|
ignore: ["node_modules", "dist", "build", "coverage", ".next", "out", ".git"],
|
|
9
9
|
aliases: {},
|
|
10
10
|
tsconfigPath: "tsconfig.json",
|
|
@@ -75,5 +75,5 @@ function formatSchemaIssues(error) {
|
|
|
75
75
|
}
|
|
76
76
|
|
|
77
77
|
export { DEFAULT_CONFIG, formatSchemaIssues, rippleConfigSchema };
|
|
78
|
-
//# sourceMappingURL=chunk-
|
|
79
|
-
//# sourceMappingURL=chunk-
|
|
78
|
+
//# sourceMappingURL=chunk-VSLCAPAH.js.map
|
|
79
|
+
//# sourceMappingURL=chunk-VSLCAPAH.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/config/defaults.ts","../src/config/schema.ts"],"names":[],"mappings":"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","file":"chunk-VSLCAPAH.js","sourcesContent":["import type { RippleConfig } from \"../types/config.js\";\n\n/**\n * Built-in defaults. A user config only overrides fields it sets; anything\n * else keeps these values.\n */\nexport const DEFAULT_CONFIG: RippleConfig = {\n $schema: undefined,\n include: [\"**/*.{ts,tsx,js,jsx,mts,cts,mjs,cjs}\"],\n ignore: [\"node_modules\", \"dist\", \"build\", \"coverage\", \".next\", \"out\", \".git\"],\n aliases: {},\n tsconfigPath: \"tsconfig.json\",\n risk: {\n weights: {\n affectedFiles: 0.3,\n entryPoint: 0.15,\n sharedUtility: 0.15,\n publicExports: 0.1,\n tests: 0.1,\n routes: 0.1,\n cycleMembership: 0.1,\n },\n thresholds: {\n medium: 30,\n high: 55,\n critical: 80,\n },\n },\n diff: {\n base: undefined,\n gate: \"high\",\n allow: [],\n },\n};\n","import { z } from \"zod\";\nimport type { RippleConfig } from \"../types/config.js\";\nimport { DEFAULT_CONFIG } from \"./defaults.js\";\n\n/**\n * Zod schema for `ripple.config.ts`. Every field has a default, so parsing a\n * partial user config yields a complete validated `RippleConfig`.\n *\n * Note: outer objects default to their *full* default object. `.default({})`\n * would skip inner field defaults, since zod uses the default value as-is\n * without re-parsing it.\n */\n\nconst fraction = z.number().min(0).max(1);\nconst score = z.number().min(0).max(100);\n\nconst riskWeightsSchema = z\n .object({\n affectedFiles: fraction.default(DEFAULT_CONFIG.risk.weights.affectedFiles),\n entryPoint: fraction.default(DEFAULT_CONFIG.risk.weights.entryPoint),\n sharedUtility: fraction.default(DEFAULT_CONFIG.risk.weights.sharedUtility),\n publicExports: fraction.default(DEFAULT_CONFIG.risk.weights.publicExports),\n tests: fraction.default(DEFAULT_CONFIG.risk.weights.tests),\n routes: fraction.default(DEFAULT_CONFIG.risk.weights.routes),\n cycleMembership: fraction.default(DEFAULT_CONFIG.risk.weights.cycleMembership),\n })\n .strict();\n\nconst riskThresholdsSchema = z\n .object({\n medium: score.default(DEFAULT_CONFIG.risk.thresholds.medium),\n high: score.default(DEFAULT_CONFIG.risk.thresholds.high),\n critical: score.default(DEFAULT_CONFIG.risk.thresholds.critical),\n })\n .strict();\n\nconst riskConfigSchema = z\n .object({\n weights: riskWeightsSchema.default(DEFAULT_CONFIG.risk.weights),\n thresholds: riskThresholdsSchema.default(DEFAULT_CONFIG.risk.thresholds),\n })\n .strict();\n\nconst diffConfigSchema = z\n .object({\n base: z.string().min(1).optional(),\n gate: z.enum([\"medium\", \"high\", \"critical\"]).default(DEFAULT_CONFIG.diff.gate),\n allow: z.array(z.string()).default(DEFAULT_CONFIG.diff.allow),\n })\n .strict();\n\nexport const rippleConfigSchema: z.ZodType<RippleConfig> = z\n .object({\n $schema: z.string().min(1).optional(),\n include: z.array(z.string().min(1)).min(1).default(DEFAULT_CONFIG.include),\n ignore: z.array(z.string()).default(DEFAULT_CONFIG.ignore),\n aliases: z.record(z.string(), z.string()).default(DEFAULT_CONFIG.aliases),\n tsconfigPath: z.string().min(1).default(DEFAULT_CONFIG.tsconfigPath),\n risk: riskConfigSchema.default(DEFAULT_CONFIG.risk),\n diff: diffConfigSchema.default(DEFAULT_CONFIG.diff),\n })\n .strict();\n\n/** Human-readable list of validation problems, for friendly error output. */\nexport function formatSchemaIssues(error: z.ZodError): string[] {\n return error.issues.map((issue) => {\n const path = issue.path.join(\".\");\n const location = path === \"\" ? \"config\" : `config.${path}`;\n return `${location}: ${issue.message}`;\n });\n}\n"]}
|
package/dist/index.d.ts
CHANGED
|
@@ -144,4 +144,5 @@ declare const rippleConfigSchema: z.ZodType<RippleConfig>;
|
|
|
144
144
|
/** Human-readable list of validation problems, for friendly error output. */
|
|
145
145
|
declare function formatSchemaIssues(error: z.ZodError): string[];
|
|
146
146
|
|
|
147
|
-
export {
|
|
147
|
+
export { formatSchemaIssues, rippleConfigSchema };
|
|
148
|
+
export type { AliasMap, DiffConfig, ProjectContext, RippleConfig, RiskFactor, RiskLevel, RiskResult, TsconfigInfo };
|
package/dist/index.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@alimaandev/ripple",
|
|
3
|
-
"version": "0.7.
|
|
3
|
+
"version": "0.7.1",
|
|
4
4
|
"description": "Dependency impact analysis for TypeScript and JavaScript. Know the blast radius of any change — before you commit.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"cli",
|
|
@@ -61,6 +61,7 @@
|
|
|
61
61
|
"lint:fix": "eslint . --fix",
|
|
62
62
|
"format": "prettier --write .",
|
|
63
63
|
"format:check": "prettier --check .",
|
|
64
|
+
"metrics": "node scripts/metrics.mjs",
|
|
64
65
|
"prepublishOnly": "pnpm run typecheck && pnpm run lint && pnpm run test && pnpm run build"
|
|
65
66
|
},
|
|
66
67
|
"dependencies": {
|
|
@@ -86,7 +87,7 @@
|
|
|
86
87
|
"eslint": "^10.8.0",
|
|
87
88
|
"eslint-config-prettier": "^10.1.8",
|
|
88
89
|
"prettier": "^3.9.6",
|
|
89
|
-
"tsup": "^
|
|
90
|
+
"tsup": "^9.0.0",
|
|
90
91
|
"typescript": "^5.9.3",
|
|
91
92
|
"typescript-eslint": "^8.66.0",
|
|
92
93
|
"vitest": "^4.1.10"
|
package/ripple.schema.json
CHANGED
|
@@ -106,7 +106,7 @@
|
|
|
106
106
|
"base": {
|
|
107
107
|
"type": "string",
|
|
108
108
|
"minLength": 1,
|
|
109
|
-
"description": "Git ref used as the change-set base when no `--base` is given."
|
|
109
|
+
"description": "Git ref used as the change-set base when no `--base` is given. Defaults to the GitHub PR base, then `origin/HEAD`, `origin/main`, `origin/master`, `main`, or `master`."
|
|
110
110
|
},
|
|
111
111
|
"gate": {
|
|
112
112
|
"enum": ["medium", "high", "critical"],
|
|
@@ -115,7 +115,7 @@
|
|
|
115
115
|
"allow": {
|
|
116
116
|
"type": "array",
|
|
117
117
|
"items": { "type": "string" },
|
|
118
|
-
"description": "Glob patterns of changed files that are analyzed and reported but never block the gate."
|
|
118
|
+
"description": "Glob patterns of changed files (relative to the project root) that are analyzed and reported but never block the gate."
|
|
119
119
|
}
|
|
120
120
|
}
|
|
121
121
|
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/config/defaults.ts","../src/config/schema.ts"],"names":[],"mappings":";;;;AAMO,IAAM,cAAA,GAA+B;AAAA,EAC1C,OAAA,EAAS,MAAA;AAAA,EACT,OAAA,EAAS,CAAC,sBAAsB,CAAA;AAAA,EAChC,MAAA,EAAQ,CAAC,cAAA,EAAgB,MAAA,EAAQ,SAAS,UAAA,EAAY,OAAA,EAAS,OAAO,MAAM,CAAA;AAAA,EAC5E,SAAS,EAAC;AAAA,EACV,YAAA,EAAc,eAAA;AAAA,EACd,IAAA,EAAM;AAAA,IACJ,OAAA,EAAS;AAAA,MACP,aAAA,EAAe,GAAA;AAAA,MACf,UAAA,EAAY,IAAA;AAAA,MACZ,aAAA,EAAe,IAAA;AAAA,MACf,aAAA,EAAe,GAAA;AAAA,MACf,KAAA,EAAO,GAAA;AAAA,MACP,MAAA,EAAQ,GAAA;AAAA,MACR,eAAA,EAAiB;AAAA,KACnB;AAAA,IACA,UAAA,EAAY;AAAA,MACV,MAAA,EAAQ,EAAA;AAAA,MACR,IAAA,EAAM,EAAA;AAAA,MACN,QAAA,EAAU;AAAA;AACZ,GACF;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,IAAA,EAAM,MAAA;AAAA,IACN,IAAA,EAAM,MAAA;AAAA,IACN,OAAO;AAAC;AAEZ;;;ACpBA,IAAM,QAAA,GAAW,EAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA,CAAE,IAAI,CAAC,CAAA;AACxC,IAAM,KAAA,GAAQ,EAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA,CAAE,IAAI,GAAG,CAAA;AAEvC,IAAM,iBAAA,GAAoB,EACvB,MAAA,CAAO;AAAA,EACN,eAAe,QAAA,CAAS,OAAA,CAAQ,cAAA,CAAe,IAAA,CAAK,QAAQ,aAAa,CAAA;AAAA,EACzE,YAAY,QAAA,CAAS,OAAA,CAAQ,cAAA,CAAe,IAAA,CAAK,QAAQ,UAAU,CAAA;AAAA,EACnE,eAAe,QAAA,CAAS,OAAA,CAAQ,cAAA,CAAe,IAAA,CAAK,QAAQ,aAAa,CAAA;AAAA,EACzE,eAAe,QAAA,CAAS,OAAA,CAAQ,cAAA,CAAe,IAAA,CAAK,QAAQ,aAAa,CAAA;AAAA,EACzE,OAAO,QAAA,CAAS,OAAA,CAAQ,cAAA,CAAe,IAAA,CAAK,QAAQ,KAAK,CAAA;AAAA,EACzD,QAAQ,QAAA,CAAS,OAAA,CAAQ,cAAA,CAAe,IAAA,CAAK,QAAQ,MAAM,CAAA;AAAA,EAC3D,iBAAiB,QAAA,CAAS,OAAA,CAAQ,cAAA,CAAe,IAAA,CAAK,QAAQ,eAAe;AAC/E,CAAC,EACA,MAAA,EAAO;AAEV,IAAM,oBAAA,GAAuB,EAC1B,MAAA,CAAO;AAAA,EACN,QAAQ,KAAA,CAAM,OAAA,CAAQ,cAAA,CAAe,IAAA,CAAK,WAAW,MAAM,CAAA;AAAA,EAC3D,MAAM,KAAA,CAAM,OAAA,CAAQ,cAAA,CAAe,IAAA,CAAK,WAAW,IAAI,CAAA;AAAA,EACvD,UAAU,KAAA,CAAM,OAAA,CAAQ,cAAA,CAAe,IAAA,CAAK,WAAW,QAAQ;AACjE,CAAC,EACA,MAAA,EAAO;AAEV,IAAM,gBAAA,GAAmB,EACtB,MAAA,CAAO;AAAA,EACN,OAAA,EAAS,iBAAA,CAAkB,OAAA,CAAQ,cAAA,CAAe,KAAK,OAAO,CAAA;AAAA,EAC9D,UAAA,EAAY,oBAAA,CAAqB,OAAA,CAAQ,cAAA,CAAe,KAAK,UAAU;AACzE,CAAC,EACA,MAAA,EAAO;AAEV,IAAM,gBAAA,GAAmB,EACtB,MAAA,CAAO;AAAA,EACN,MAAM,CAAA,CAAE,MAAA,GAAS,GAAA,CAAI,CAAC,EAAE,QAAA,EAAS;AAAA,EACjC,IAAA,EAAM,CAAA,CAAE,IAAA,CAAK,CAAC,QAAA,EAAU,MAAA,EAAQ,UAAU,CAAC,CAAA,CAAE,OAAA,CAAQ,cAAA,CAAe,IAAA,CAAK,IAAI,CAAA;AAAA,EAC7E,KAAA,EAAO,CAAA,CAAE,KAAA,CAAM,CAAA,CAAE,MAAA,EAAQ,CAAA,CAAE,OAAA,CAAQ,cAAA,CAAe,IAAA,CAAK,KAAK;AAC9D,CAAC,EACA,MAAA,EAAO;AAEH,IAAM,kBAAA,GAA8C,EACxD,MAAA,CAAO;AAAA,EACN,SAAS,CAAA,CAAE,MAAA,GAAS,GAAA,CAAI,CAAC,EAAE,QAAA,EAAS;AAAA,EACpC,OAAA,EAAS,CAAA,CAAE,KAAA,CAAM,CAAA,CAAE,QAAO,CAAE,GAAA,CAAI,CAAC,CAAC,EAAE,GAAA,CAAI,CAAC,CAAA,CAAE,OAAA,CAAQ,eAAe,OAAO,CAAA;AAAA,EACzE,MAAA,EAAQ,EAAE,KAAA,CAAM,CAAA,CAAE,QAAQ,CAAA,CAAE,OAAA,CAAQ,cAAA,CAAe,MAAM,CAAA;AAAA,EACzD,OAAA,EAAS,CAAA,CAAE,MAAA,CAAO,CAAA,CAAE,MAAA,EAAO,EAAG,CAAA,CAAE,MAAA,EAAQ,CAAA,CAAE,OAAA,CAAQ,cAAA,CAAe,OAAO,CAAA;AAAA,EACxE,YAAA,EAAc,EAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA,CAAE,OAAA,CAAQ,cAAA,CAAe,YAAY,CAAA;AAAA,EACnE,IAAA,EAAM,gBAAA,CAAiB,OAAA,CAAQ,cAAA,CAAe,IAAI,CAAA;AAAA,EAClD,IAAA,EAAM,gBAAA,CAAiB,OAAA,CAAQ,cAAA,CAAe,IAAI;AACpD,CAAC,EACA,MAAA;AAGI,SAAS,mBAAmB,KAAA,EAA6B;AAC9D,EAAA,OAAO,KAAA,CAAM,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,KAAU;AACjC,IAAA,MAAM,IAAA,GAAO,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,GAAG,CAAA;AAChC,IAAA,MAAM,QAAA,GAAW,IAAA,KAAS,EAAA,GAAK,QAAA,GAAW,UAAU,IAAI,CAAA,CAAA;AACxD,IAAA,OAAO,CAAA,EAAG,QAAQ,CAAA,EAAA,EAAK,KAAA,CAAM,OAAO,CAAA,CAAA;AAAA,EACtC,CAAC,CAAA;AACH","file":"chunk-CFH4UW2E.js","sourcesContent":["import type { RippleConfig } from \"../types/config.js\";\n\n/**\n * Built-in defaults. A user config only overrides fields it sets; anything\n * else keeps these values.\n */\nexport const DEFAULT_CONFIG: RippleConfig = {\n $schema: undefined,\n include: [\"**/*.{ts,tsx,js,jsx}\"],\n ignore: [\"node_modules\", \"dist\", \"build\", \"coverage\", \".next\", \"out\", \".git\"],\n aliases: {},\n tsconfigPath: \"tsconfig.json\",\n risk: {\n weights: {\n affectedFiles: 0.3,\n entryPoint: 0.15,\n sharedUtility: 0.15,\n publicExports: 0.1,\n tests: 0.1,\n routes: 0.1,\n cycleMembership: 0.1,\n },\n thresholds: {\n medium: 30,\n high: 55,\n critical: 80,\n },\n },\n diff: {\n base: undefined,\n gate: \"high\",\n allow: [],\n },\n};\n","import { z } from \"zod\";\nimport type { RippleConfig } from \"../types/config.js\";\nimport { DEFAULT_CONFIG } from \"./defaults.js\";\n\n/**\n * Zod schema for `ripple.config.ts`. Every field has a default, so parsing a\n * partial user config yields a complete validated `RippleConfig`.\n *\n * Note: outer objects default to their *full* default object. `.default({})`\n * would skip inner field defaults, since zod uses the default value as-is\n * without re-parsing it.\n */\n\nconst fraction = z.number().min(0).max(1);\nconst score = z.number().min(0).max(100);\n\nconst riskWeightsSchema = z\n .object({\n affectedFiles: fraction.default(DEFAULT_CONFIG.risk.weights.affectedFiles),\n entryPoint: fraction.default(DEFAULT_CONFIG.risk.weights.entryPoint),\n sharedUtility: fraction.default(DEFAULT_CONFIG.risk.weights.sharedUtility),\n publicExports: fraction.default(DEFAULT_CONFIG.risk.weights.publicExports),\n tests: fraction.default(DEFAULT_CONFIG.risk.weights.tests),\n routes: fraction.default(DEFAULT_CONFIG.risk.weights.routes),\n cycleMembership: fraction.default(DEFAULT_CONFIG.risk.weights.cycleMembership),\n })\n .strict();\n\nconst riskThresholdsSchema = z\n .object({\n medium: score.default(DEFAULT_CONFIG.risk.thresholds.medium),\n high: score.default(DEFAULT_CONFIG.risk.thresholds.high),\n critical: score.default(DEFAULT_CONFIG.risk.thresholds.critical),\n })\n .strict();\n\nconst riskConfigSchema = z\n .object({\n weights: riskWeightsSchema.default(DEFAULT_CONFIG.risk.weights),\n thresholds: riskThresholdsSchema.default(DEFAULT_CONFIG.risk.thresholds),\n })\n .strict();\n\nconst diffConfigSchema = z\n .object({\n base: z.string().min(1).optional(),\n gate: z.enum([\"medium\", \"high\", \"critical\"]).default(DEFAULT_CONFIG.diff.gate),\n allow: z.array(z.string()).default(DEFAULT_CONFIG.diff.allow),\n })\n .strict();\n\nexport const rippleConfigSchema: z.ZodType<RippleConfig> = z\n .object({\n $schema: z.string().min(1).optional(),\n include: z.array(z.string().min(1)).min(1).default(DEFAULT_CONFIG.include),\n ignore: z.array(z.string()).default(DEFAULT_CONFIG.ignore),\n aliases: z.record(z.string(), z.string()).default(DEFAULT_CONFIG.aliases),\n tsconfigPath: z.string().min(1).default(DEFAULT_CONFIG.tsconfigPath),\n risk: riskConfigSchema.default(DEFAULT_CONFIG.risk),\n diff: diffConfigSchema.default(DEFAULT_CONFIG.diff),\n })\n .strict();\n\n/** Human-readable list of validation problems, for friendly error output. */\nexport function formatSchemaIssues(error: z.ZodError): string[] {\n return error.issues.map((issue) => {\n const path = issue.path.join(\".\");\n const location = path === \"\" ? \"config\" : `config.${path}`;\n return `${location}: ${issue.message}`;\n });\n}\n"]}
|