UNPKG

renovate

Version:

Automated dependency updates. Flexible so you don't need to be.

111 lines 4.12 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.parse = parse; const tslib_1 = require("tslib"); const good_enough_parser_1 = require("good-enough-parser"); const cpan_1 = require("../../datasource/cpan"); const github_tags_1 = require("../../datasource/github-tags"); const perlVersioning = tslib_1.__importStar(require("../../versioning/perl")); const language_1 = require("./language"); // requires perl, '5.36.1'; // requires 'perl' => 5.036001; const perlVersionMatch = good_enough_parser_1.query .sym('requires') .alt(good_enough_parser_1.query.sym('perl'), good_enough_parser_1.query.str('perl')) .alt(good_enough_parser_1.query.op(','), good_enough_parser_1.query.op('=>')) .alt(good_enough_parser_1.query.num((ctx, { value: perlVersion }) => ({ ...ctx, perlVersion })), good_enough_parser_1.query.str((ctx, { value: perlVersion }) => ({ ...ctx, perlVersion }))) .op(';') .handler((ctx) => { if (ctx.perlVersion) { ctx.deps.push({ depName: 'perl', packageName: 'Perl/perl5', currentValue: ctx.perlVersion, datasource: github_tags_1.GithubTagsDatasource.id, versioning: perlVersioning.id, extractVersion: '^v(?<version>\\S+)', }); } return ctx; }); const requirementMatch = good_enough_parser_1.query.sym(/^(?:requires|recommends|suggests)$/); const phasedRequiresMatch = good_enough_parser_1.query.sym(/^(?:configure|build|test|author)_requires$/, (ctx, { value: phase }) => { ctx.tempPhase = phase.replace(/_requires/, '').replace(/author/, 'develop'); return ctx; }); // requires 'Foo::Bar'; // // requires 'Foo::Bar', '1.23'; // recommends 'Foo::Bar', '1.23'; // suggests 'Foo::Bar', '1.23'; // // configure_requires 'Foo::Bar' => 1.023; // build_requires 'Foo::Bar' => 1.023; // test_requires 'Foo::Bar' => 1.023; // author_requires 'Foo::Bar' => 1.023; const moduleMatch = good_enough_parser_1.query .alt(requirementMatch, phasedRequiresMatch) .str((ctx, { value: depName }) => ({ ...ctx, depName })) .opt(good_enough_parser_1.query.alt(good_enough_parser_1.query.op(','), good_enough_parser_1.query.op('=>')).alt(good_enough_parser_1.query.num((ctx, { value: currentValue }) => ({ ...ctx, currentValue })), good_enough_parser_1.query.str((ctx, { value }) => { const currentValue = value.replace(/^(?:\s*(?:==|>=|>))?\s*v?/, ''); return { ...ctx, currentValue }; }))) .op(';') .handler((ctx) => { const { phase, tempPhase, depName, currentValue } = ctx; delete ctx.tempPhase; delete ctx.depName; delete ctx.currentValue; if (depName) { const dep = { depName, }; if (currentValue) { dep.currentValue = currentValue; } else { dep.skipReason = 'unspecified-version'; } if (phase) { dep.depType = phase; } else if (tempPhase) { dep.depType = tempPhase; } dep.datasource = cpan_1.CpanDatasource.id; ctx.deps.push(dep); } return ctx; }); const phaseRegex = /^(?:configure|build|test|runtime|develop)/; const phaseMatch = good_enough_parser_1.query.alt(good_enough_parser_1.query.sym(phaseRegex, (ctx, { value: phase }) => ({ ...ctx, phase })), good_enough_parser_1.query.str(phaseRegex, (ctx, { value: phase }) => ({ ...ctx, phase }))); // on 'configure' => sub { // on build => sub { // on 'test' => sub { // on runtime => sub { // on 'develop' => sub { const onMatch = good_enough_parser_1.query .sym('on') .join(phaseMatch) .op('=>') .sym('sub') .tree({ type: 'wrapped-tree', maxDepth: 1, search: moduleMatch, }) .handler((ctx) => { delete ctx.phase; return ctx; }); const query = good_enough_parser_1.query.tree({ type: 'root-tree', maxDepth: 4, search: good_enough_parser_1.query.alt(perlVersionMatch, moduleMatch, onMatch), }); function parse(content) { return language_1.cpanfile.query(content, query, { deps: [], }); } //# sourceMappingURL=parser.js.map