Skip to content

Commit

Permalink
test(lib/data): ReplacementsSchema (#31714)
Browse files Browse the repository at this point in the history
Co-authored-by: HonkingGoose <[email protected]>
  • Loading branch information
RahulGautamSingh and HonkingGoose authored Oct 16, 2024
1 parent f9ab074 commit 88e1f18
Show file tree
Hide file tree
Showing 5 changed files with 109 additions and 5 deletions.
6 changes: 4 additions & 2 deletions lib/config/presets/internal/replacements.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
import replacementGroups from '../../../data/replacements.json';
import replacementGroupsJson from '../../../data/replacements.json';
import type { Preset } from '../types';
import type { PresetTemplate, Replacement } from './auto-generate-replacements';
import { addPresets } from './auto-generate-replacements';

const { $schema, ...replacementPresets } = replacementGroupsJson;

/* eslint sort-keys: ["error", "asc", {"caseSensitive": false, "natural": true}] */
export const presets: Record<string, Preset> = replacementGroups;
export const presets: Record<string, Preset> = replacementPresets;

const muiReplacement: Replacement[] = [
[['@material-ui/codemod'], '@mui/codemod'],
Expand Down
1 change: 1 addition & 0 deletions lib/data/replacements.json
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
{
"$schema": "../../tools/schemas/replacements-schema.json",
"all": {
"description": "Apply crowd-sourced package replacement rules.",
"extends": [
Expand Down
2 changes: 1 addition & 1 deletion tools/schemas/monorepo-schema.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"$schema": "http://json-schema.org/draft-04/schema#",
"$schema": "https://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"repoGroups": {
Expand Down
61 changes: 61 additions & 0 deletions tools/schemas/replacements-schema.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
{
"$schema": "https://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"all": {
"type": "object",
"properties": {
"description": { "type": "string" },
"extends": {
"type": "array",
"items": { "type": "string" }
},
"ignoreDeps": {
"type": "array",
"items": { "type": "string" }
}
},
"required": ["description", "extends"]
}
},
"patternProperties": {
"^[a-zA-Z0-9-]+$": {
"type": "object",
"properties": {
"description": { "type": "string" },
"packageRules": {
"type": "array",
"items": {
"type": "object",
"properties": {
"matchCurrentVersion": { "type": "string" },
"matchDatasources": {
"type": "array",
"items": { "type": "string" }
},
"matchPackageNames": {
"type": "array",
"items": { "type": "string" }
},
"replacementName": { "type": "string" },
"replacementVersion": { "type": "string" },
"description": { "type": "string" },
"replacementNameTemplate": { "type": "string" }
},
"required": ["matchDatasources", "matchPackageNames"]
},
"contains": {
"type": "object",
"oneOf": [
{ "required": ["replacementName"] },
{ "required": ["replacementNameTemplate"] }
]
},
"minItems": 1
}
},
"required": ["description", "packageRules"]
}
},
"additionalProperties": false
}
44 changes: 42 additions & 2 deletions tools/schemas/schema.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,50 @@ const UrlSchema = z.record(
z.union([z.string(), z.array(z.string())]),
);

const MonorepoSchema = z.object({
export const MonorepoSchema = z.object({
repoGroups: UrlSchema,
orgGroups: UrlSchema,
patternGroups: UrlSchema,
});

export { MonorepoSchema };
const PackageRuleSchema = z.object({
matchCurrentVersion: z.string().optional(),
matchDatasources: z.array(z.string()),
matchPackageNames: z.array(z.string()),
replacementName: z.string().optional(),
replacementVersion: z.string().optional(),
description: z.string().optional(),
replacementNameTemplate: z.string().optional(),
});

const RuleSetSchema = z.object({
description: z.string(),
packageRules: z
.array(PackageRuleSchema)
.min(1)
.refine(
(rules) =>
rules.some(
(rule) =>
rule.replacementName !== undefined ||
rule.replacementNameTemplate !== undefined,
),
{
message:
'At least one package rule must use either the replacementName config option, or the replacementNameTemplate config option',
},
),
});

const AllSchema = z.object({
description: z.string(),
extends: z.array(z.string()),
ignoreDeps: z.array(z.string()).optional(),
});

export const ReplacementsSchema = z
.object({
$schema: z.string(),
all: AllSchema,
})
.catchall(RuleSetSchema);

0 comments on commit 88e1f18

Please sign in to comment.