diff --git a/lib/modules/manager/pub/extract.spec.ts b/lib/modules/manager/pub/extract.spec.ts index 03ba9ded02e3ee..ce33cd01f376b6 100644 --- a/lib/modules/manager/pub/extract.spec.ts +++ b/lib/modules/manager/pub/extract.spec.ts @@ -31,7 +31,10 @@ describe('modules/manager/pub/extract', () => { }); it('returns valid dependencies', () => { + const dependenciesDepType = 'dependencies'; + const devDependenciesDepType = 'dev_dependencies'; const dartDatasource = 'dart'; + const skipReason = undefined; const content = codeBlock` environment: sdk: ^3.0.0 @@ -44,10 +47,16 @@ describe('modules/manager/pub/extract', () => { baz: non-sense: true qux: false + path_dep: + path: path1 dev_dependencies: test: ^0.1.0 build: version: 0.0.1 + flutter_test: + sdk: flutter + path_dev_dep: + path: path2 `; const actual = extractPackageFile(content, packageFile); expect(actual).toEqual({ @@ -55,42 +64,63 @@ describe('modules/manager/pub/extract', () => { { currentValue: '1.0.0', depName: 'foo', - depType: 'dependencies', + depType: dependenciesDepType, datasource: dartDatasource, + skipReason, }, { currentValue: '1.1.0', depName: 'bar', - depType: 'dependencies', + depType: dependenciesDepType, datasource: dartDatasource, + skipReason, }, { currentValue: '', depName: 'baz', - depType: 'dependencies', + depType: dependenciesDepType, datasource: dartDatasource, + skipReason, + }, + { + currentValue: '', + depName: 'path_dep', + depType: dependenciesDepType, + datasource: dartDatasource, + skipReason: 'path-dependency', }, { currentValue: '^0.1.0', depName: 'test', - depType: 'dev_dependencies', + depType: devDependenciesDepType, datasource: dartDatasource, + skipReason, }, { currentValue: '0.0.1', depName: 'build', - depType: 'dev_dependencies', + depType: devDependenciesDepType, + datasource: dartDatasource, + skipReason, + }, + { + currentValue: '', + depName: 'path_dev_dep', + depType: devDependenciesDepType, datasource: dartDatasource, + skipReason: 'path-dependency', }, { currentValue: '^3.0.0', depName: 'dart', datasource: 'dart-version', + skipReason, }, { currentValue: '2.0.0', depName: 'flutter', datasource: 'flutter-version', + skipReason, }, ], }); diff --git a/lib/modules/manager/pub/extract.ts b/lib/modules/manager/pub/extract.ts index 4b46cf9e2bdf5d..557706bd329349 100644 --- a/lib/modules/manager/pub/extract.ts +++ b/lib/modules/manager/pub/extract.ts @@ -1,4 +1,5 @@ import is from '@sindresorhus/is'; +import type { SkipReason } from '../../../types'; import { DartDatasource } from '../../datasource/dart'; import { DartVersionDatasource } from '../../datasource/dart-version'; import { FlutterVersionDatasource } from '../../datasource/flutter-version'; @@ -17,15 +18,21 @@ function extractFromSection( const deps: PackageDependency[] = []; for (const depName of Object.keys(sectionContent)) { - if (depName === 'meta') { + if (depName === 'meta' || depName === 'flutter_test') { continue; } let currentValue = sectionContent[depName]; + let skipReason: SkipReason | undefined; + if (!is.string(currentValue)) { const version = currentValue.version; + const path = currentValue.path; if (version) { currentValue = version; + } else if (path) { + currentValue = ''; + skipReason = 'path-dependency'; } else { currentValue = ''; } @@ -36,6 +43,7 @@ function extractFromSection( depType: sectionKey, currentValue, datasource: DartDatasource.id, + skipReason, }); } diff --git a/lib/modules/manager/pub/schema.ts b/lib/modules/manager/pub/schema.ts index 2d106c4addea11..9e9bba91ec46d3 100644 --- a/lib/modules/manager/pub/schema.ts +++ b/lib/modules/manager/pub/schema.ts @@ -3,7 +3,10 @@ import { LooseRecord, Yaml } from '../../../util/schema-utils'; const PubspecDependencySchema = LooseRecord( z.string(), - z.union([z.string(), z.object({ version: z.string().optional() })]) + z.union([ + z.string(), + z.object({ version: z.string().optional(), path: z.string().optional() }), + ]) ); export const PubspecSchema = z.object({