mirror of https://github.com/AMT-Cheif/drift.git
Make modules configurable via a build option
This commit is contained in:
parent
9e7e6d0922
commit
8320ddc788
|
@ -2,6 +2,10 @@ import 'package:json_annotation/json_annotation.dart';
|
|||
|
||||
part 'options.g.dart';
|
||||
|
||||
// note when working on this file: If you can't run the builder because
|
||||
// options.g.dart is missing, just re-create it from git. build_runner will
|
||||
// complain about existing outputs, let it delete the part file.
|
||||
|
||||
/// Controllable options to define the behavior of the analyzer and the
|
||||
/// generator.
|
||||
@JsonSerializable(
|
||||
|
@ -48,6 +52,9 @@ class MoorOptions {
|
|||
@JsonKey(name: 'generate_connect_constructor')
|
||||
final bool generateConnectConstructor;
|
||||
|
||||
@JsonKey(name: 'sqlite_modules', defaultValue: [])
|
||||
final List<SqlModule> modules;
|
||||
|
||||
const MoorOptions(
|
||||
{this.generateFromJsonStringConstructor = false,
|
||||
this.overrideHashAndEqualsInResultSets = false,
|
||||
|
@ -55,8 +62,20 @@ class MoorOptions {
|
|||
this.skipVerificationCode = false,
|
||||
this.useDataClassNameForCompanions = false,
|
||||
this.useColumnNameAsJsonKeyWhenDefinedInMoorFile = false,
|
||||
this.generateConnectConstructor = false});
|
||||
this.generateConnectConstructor = false,
|
||||
this.modules = const []});
|
||||
|
||||
factory MoorOptions.fromJson(Map<String, dynamic> json) =>
|
||||
_$MoorOptionsFromJson(json);
|
||||
}
|
||||
|
||||
/// Set of sqlite modules that require special knowledge from the generator.
|
||||
enum SqlModule {
|
||||
/// Enables support for the json1 module and its functions when parsing sql
|
||||
/// queries.
|
||||
json1,
|
||||
|
||||
/// Enables support for the fts5 module and its functions when parsing sql
|
||||
/// queries.
|
||||
fts5,
|
||||
}
|
||||
|
|
|
@ -9,17 +9,18 @@ part of 'options.dart';
|
|||
MoorOptions _$MoorOptionsFromJson(Map<String, dynamic> json) {
|
||||
return $checkedNew('MoorOptions', json, () {
|
||||
$checkKeys(json, allowedKeys: const [
|
||||
'generate_from_json_string_constructor',
|
||||
'write_from_json_string_constructor',
|
||||
'override_hash_and_equals_in_result_sets',
|
||||
'compact_query_methods',
|
||||
'skip_verification_code',
|
||||
'use_data_class_name_for_companions',
|
||||
'use_column_name_as_json_key_when_defined_in_moor_file',
|
||||
'generate_connect_constructor'
|
||||
'generate_connect_constructor',
|
||||
'sqlite_modules'
|
||||
]);
|
||||
final val = MoorOptions(
|
||||
generateFromJsonStringConstructor: $checkedConvert(
|
||||
json, 'generate_from_json_string_constructor', (v) => v as bool),
|
||||
json, 'write_from_json_string_constructor', (v) => v as bool),
|
||||
overrideHashAndEqualsInResultSets: $checkedConvert(
|
||||
json, 'override_hash_and_equals_in_result_sets', (v) => v as bool),
|
||||
compactQueryMethods:
|
||||
|
@ -34,11 +35,17 @@ MoorOptions _$MoorOptionsFromJson(Map<String, dynamic> json) {
|
|||
(v) => v as bool),
|
||||
generateConnectConstructor: $checkedConvert(
|
||||
json, 'generate_connect_constructor', (v) => v as bool),
|
||||
modules: $checkedConvert(
|
||||
json,
|
||||
'sqlite_modules',
|
||||
(v) => (v as List)
|
||||
?.map((e) => _$enumDecodeNullable(_$SqlModuleEnumMap, e))
|
||||
?.toList()) ??
|
||||
[],
|
||||
);
|
||||
return val;
|
||||
}, fieldKeyMap: const {
|
||||
'generateFromJsonStringConstructor':
|
||||
'generate_from_json_string_constructor',
|
||||
'generateFromJsonStringConstructor': 'write_from_json_string_constructor',
|
||||
'overrideHashAndEqualsInResultSets':
|
||||
'override_hash_and_equals_in_result_sets',
|
||||
'compactQueryMethods': 'compact_query_methods',
|
||||
|
@ -46,6 +53,44 @@ MoorOptions _$MoorOptionsFromJson(Map<String, dynamic> json) {
|
|||
'useDataClassNameForCompanions': 'use_data_class_name_for_companions',
|
||||
'useColumnNameAsJsonKeyWhenDefinedInMoorFile':
|
||||
'use_column_name_as_json_key_when_defined_in_moor_file',
|
||||
'generateConnectConstructor': 'generate_connect_constructor'
|
||||
'generateConnectConstructor': 'generate_connect_constructor',
|
||||
'modules': 'sqlite_modules'
|
||||
});
|
||||
}
|
||||
|
||||
T _$enumDecode<T>(
|
||||
Map<T, dynamic> enumValues,
|
||||
dynamic source, {
|
||||
T unknownValue,
|
||||
}) {
|
||||
if (source == null) {
|
||||
throw ArgumentError('A value must be provided. Supported values: '
|
||||
'${enumValues.values.join(', ')}');
|
||||
}
|
||||
|
||||
final value = enumValues.entries
|
||||
.singleWhere((e) => e.value == source, orElse: () => null)
|
||||
?.key;
|
||||
|
||||
if (value == null && unknownValue == null) {
|
||||
throw ArgumentError('`$source` is not one of the supported values: '
|
||||
'${enumValues.values.join(', ')}');
|
||||
}
|
||||
return value ?? unknownValue;
|
||||
}
|
||||
|
||||
T _$enumDecodeNullable<T>(
|
||||
Map<T, dynamic> enumValues,
|
||||
dynamic source, {
|
||||
T unknownValue,
|
||||
}) {
|
||||
if (source == null) {
|
||||
return null;
|
||||
}
|
||||
return _$enumDecode<T>(enumValues, source, unknownValue: unknownValue);
|
||||
}
|
||||
|
||||
const _$SqlModuleEnumMap = {
|
||||
SqlModule.json1: 'json1',
|
||||
SqlModule.fts5: 'fts5',
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue