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';
|
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
|
/// Controllable options to define the behavior of the analyzer and the
|
||||||
/// generator.
|
/// generator.
|
||||||
@JsonSerializable(
|
@JsonSerializable(
|
||||||
|
@ -48,6 +52,9 @@ class MoorOptions {
|
||||||
@JsonKey(name: 'generate_connect_constructor')
|
@JsonKey(name: 'generate_connect_constructor')
|
||||||
final bool generateConnectConstructor;
|
final bool generateConnectConstructor;
|
||||||
|
|
||||||
|
@JsonKey(name: 'sqlite_modules', defaultValue: [])
|
||||||
|
final List<SqlModule> modules;
|
||||||
|
|
||||||
const MoorOptions(
|
const MoorOptions(
|
||||||
{this.generateFromJsonStringConstructor = false,
|
{this.generateFromJsonStringConstructor = false,
|
||||||
this.overrideHashAndEqualsInResultSets = false,
|
this.overrideHashAndEqualsInResultSets = false,
|
||||||
|
@ -55,8 +62,20 @@ class MoorOptions {
|
||||||
this.skipVerificationCode = false,
|
this.skipVerificationCode = false,
|
||||||
this.useDataClassNameForCompanions = false,
|
this.useDataClassNameForCompanions = false,
|
||||||
this.useColumnNameAsJsonKeyWhenDefinedInMoorFile = false,
|
this.useColumnNameAsJsonKeyWhenDefinedInMoorFile = false,
|
||||||
this.generateConnectConstructor = false});
|
this.generateConnectConstructor = false,
|
||||||
|
this.modules = const []});
|
||||||
|
|
||||||
factory MoorOptions.fromJson(Map<String, dynamic> json) =>
|
factory MoorOptions.fromJson(Map<String, dynamic> json) =>
|
||||||
_$MoorOptionsFromJson(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) {
|
MoorOptions _$MoorOptionsFromJson(Map<String, dynamic> json) {
|
||||||
return $checkedNew('MoorOptions', json, () {
|
return $checkedNew('MoorOptions', json, () {
|
||||||
$checkKeys(json, allowedKeys: const [
|
$checkKeys(json, allowedKeys: const [
|
||||||
'generate_from_json_string_constructor',
|
'write_from_json_string_constructor',
|
||||||
'override_hash_and_equals_in_result_sets',
|
'override_hash_and_equals_in_result_sets',
|
||||||
'compact_query_methods',
|
'compact_query_methods',
|
||||||
'skip_verification_code',
|
'skip_verification_code',
|
||||||
'use_data_class_name_for_companions',
|
'use_data_class_name_for_companions',
|
||||||
'use_column_name_as_json_key_when_defined_in_moor_file',
|
'use_column_name_as_json_key_when_defined_in_moor_file',
|
||||||
'generate_connect_constructor'
|
'generate_connect_constructor',
|
||||||
|
'sqlite_modules'
|
||||||
]);
|
]);
|
||||||
final val = MoorOptions(
|
final val = MoorOptions(
|
||||||
generateFromJsonStringConstructor: $checkedConvert(
|
generateFromJsonStringConstructor: $checkedConvert(
|
||||||
json, 'generate_from_json_string_constructor', (v) => v as bool),
|
json, 'write_from_json_string_constructor', (v) => v as bool),
|
||||||
overrideHashAndEqualsInResultSets: $checkedConvert(
|
overrideHashAndEqualsInResultSets: $checkedConvert(
|
||||||
json, 'override_hash_and_equals_in_result_sets', (v) => v as bool),
|
json, 'override_hash_and_equals_in_result_sets', (v) => v as bool),
|
||||||
compactQueryMethods:
|
compactQueryMethods:
|
||||||
|
@ -34,11 +35,17 @@ MoorOptions _$MoorOptionsFromJson(Map<String, dynamic> json) {
|
||||||
(v) => v as bool),
|
(v) => v as bool),
|
||||||
generateConnectConstructor: $checkedConvert(
|
generateConnectConstructor: $checkedConvert(
|
||||||
json, 'generate_connect_constructor', (v) => v as bool),
|
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;
|
return val;
|
||||||
}, fieldKeyMap: const {
|
}, fieldKeyMap: const {
|
||||||
'generateFromJsonStringConstructor':
|
'generateFromJsonStringConstructor': 'write_from_json_string_constructor',
|
||||||
'generate_from_json_string_constructor',
|
|
||||||
'overrideHashAndEqualsInResultSets':
|
'overrideHashAndEqualsInResultSets':
|
||||||
'override_hash_and_equals_in_result_sets',
|
'override_hash_and_equals_in_result_sets',
|
||||||
'compactQueryMethods': 'compact_query_methods',
|
'compactQueryMethods': 'compact_query_methods',
|
||||||
|
@ -46,6 +53,44 @@ MoorOptions _$MoorOptionsFromJson(Map<String, dynamic> json) {
|
||||||
'useDataClassNameForCompanions': 'use_data_class_name_for_companions',
|
'useDataClassNameForCompanions': 'use_data_class_name_for_companions',
|
||||||
'useColumnNameAsJsonKeyWhenDefinedInMoorFile':
|
'useColumnNameAsJsonKeyWhenDefinedInMoorFile':
|
||||||
'use_column_name_as_json_key_when_defined_in_moor_file',
|
'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