Skip to content
Merged
1 change: 1 addition & 0 deletions lib/config/presets/common.ts
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ export const removedPresets: Record<string, string | null> = {
'customManagers:helmChartYamlAppVersions',
'regexManagers:mavenPropertyVersions': 'customManagers:mavenPropertyVersions',
'regexManagers:tfvarsVersions': 'customManagers:tfvarsVersions',
'regexManagers:tsconfigNodeVersions': 'customManagers:tsconfigNodeVersions',
'workarounds:reduceRepologyServerLoad': null,
};

Expand Down
41 changes: 41 additions & 0 deletions lib/config/presets/internal/custom-managers.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -805,4 +805,45 @@ describe('config/presets/internal/custom-managers', () => {
]);
});
});

describe('Update `tsconfig/node` version in tsconfig.json', () => {
const customManager = presets.tsconfigNodeVersions.customManagers?.[0];

it(`find dependencies in file`, async () => {
const fileContent = codeBlock`
{
"extends": "@tsconfig/node20/tsconfig.json",
"include": ["src/**/*"]
}
`;

const res = await extractPackageFile(
'regex',
fileContent,
'tsconfig.json',
customManager!,
);

expect(res?.deps).toMatchObject([
{
currentValue: '20',
datasource: 'npm',
depName: '@tsconfig/node20',
},
]);
});

describe('matches regexes patterns', () => {
it.each`
path | expected
${'tsconfig.json'} | ${true}
${'foo/tsconfig.json'} | ${true}
${'tsconfig.yml'} | ${false}
`('$path', ({ path, expected }) => {
expect(
matchRegexOrGlobList(path, customManager!.managerFilePatterns),
).toBe(expected);
});
});
});
});
16 changes: 16 additions & 0 deletions lib/config/presets/internal/custom-managers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -147,4 +147,20 @@ export const presets: Record<string, Preset> = {
],
description: 'Update `*_version` variables in `.tfvars` files.',
},
tsconfigNodeVersions: {
customManagers: [
{
autoReplaceStringTemplate:
'"extends": "@tsconfig/node{{{major}}}/tsconfig.json"',
currentValueTemplate: '{{{major}}}',
customType: 'regex',
datasourceTemplate: 'npm',
managerFilePatterns: ['**/tsconfig.json'],
matchStrings: [
'"extends":\\s*"(?<depName>@tsconfig/node(?<major>\\d+))/tsconfig\\.json"',
],
},
],
description: 'Update `@tsconfig/node` extends in `tsconfig.json` files.',
},
};
53 changes: 53 additions & 0 deletions lib/data/replacements.json
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@
"replacements:semantic-release-replace-plugin-to-unscoped",
"replacements:spectre-cli-to-spectre-console-cli",
"replacements:standard-version-to-commit-and-tag",
"replacements:tsconfig-bases-node",
"replacements:typeorm-seeding-to-scoped",
"replacements:vso-task-lib-to-azure-pipelines-task-lib",
"replacements:vsts-task-lib-to-azure-pipelines-task-lib",
Expand Down Expand Up @@ -1009,6 +1010,58 @@
}
]
},
"tsconfig-bases-node": {
"description": "`@tsconfig-bases` node updates.",
"packageRules": [
{
"matchDatasources": ["npm"],
"matchPackageNames": ["@tsconfig/node**"],
"commitMessageExtra": "{{#if isReplacement}}with {{{newName}}}{{else}}to {{{prettyNewVersion}}}{{/if}}"
},
{
"matchDatasources": ["npm"],
"matchPackageNames": ["@tsconfig/node10"],
"replacementName": "@tsconfig/node12",
"replacementVersion": "12.0.0"
},
{
"matchDatasources": ["npm"],
"matchPackageNames": ["@tsconfig/node12"],
"replacementName": "@tsconfig/node14",
"replacementVersion": "14.0.0"
},
{
"matchDatasources": ["npm"],
"matchPackageNames": ["@tsconfig/node14"],
"replacementName": "@tsconfig/node16",
"replacementVersion": "16.0.0"
},
{
"matchDatasources": ["npm"],
"matchPackageNames": ["@tsconfig/node16", "@tsconfig/node17"],
"replacementName": "@tsconfig/node18",
"replacementVersion": "18.0.0"
},
{
"matchDatasources": ["npm"],
"matchPackageNames": ["@tsconfig/node18", "@tsconfig/node19"],
"replacementName": "@tsconfig/node20",
"replacementVersion": "20.0.0"
},
{
"matchDatasources": ["npm"],
"matchPackageNames": ["@tsconfig/node20", "@tsconfig/node21"],
"replacementName": "@tsconfig/node22",
"replacementVersion": "22.0.0"
},
{
"matchDatasources": ["npm"],
"matchPackageNames": ["@tsconfig/node22", "@tsconfig/node23"],
"replacementName": "@tsconfig/node24",
"replacementVersion": "24.0.0"
}
]
},
"typeorm-seeding-to-scoped": {
"description": "`typeorm-seeding` is now maintained as scoped package.",
"packageRules": [
Expand Down