Skip to content

Commit 0eeaa2d

Browse files
authored
[native_assets_cli] Fix snake casing in JSON (#2128)
Closes: #2037 Closes: #2038 Fixes spelling in the JSON format: * `prefer-dynamic` -> `prefer_dynamic` * `prefer-static` -> `prefer_static` * `assetsForLinking` -> `assets_for_linking` ### PR changes * `pkgs/hook`, `pkgs/code_assets`, and `pkgs/data_assets` * Introduces new schemas in the non-generated `.schema.json` files * Updates the generated schemas to pick up on the new spelling for `assets_for_linking`. * Adds test data for the new spelling. * Added JSON schema tests for the new spelling. * `package:native_assets_cli` * Generated the syntax classes * Deal with version skew in the mapping between syntax classes and semantic API ### Version skew between hooks and SDKs * For #2037 * Backwards compatibility older SDKs: Also still emit `assetsForLinking`, instead of only `assets_for_linking`. * Backwards compatibility older hooks: Also still read `assetsForLinking`, instead of only `assets_for_linking`. * For #2038 * Backwards compatibility older SDKs: Still read the casing with dashes. * Backwards compatibility older hooks: Irrelevant. Both Flutter and Dart only use `dynamic`.
1 parent 4073532 commit 0eeaa2d

21 files changed

+228
-38
lines changed

pkgs/code_assets/doc/schema/shared/shared_definitions.generated.schema.json

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,15 @@
3131
"$ref": "shared_definitions.schema.json#/definitions/Asset"
3232
}
3333
}
34+
},
35+
"assets_for_linking": {
36+
"type": "object",
37+
"additionalProperties": {
38+
"type": "array",
39+
"items": {
40+
"$ref": "shared_definitions.schema.json#/definitions/Asset"
41+
}
42+
}
3443
}
3544
}
3645
}

pkgs/code_assets/doc/schema/shared/shared_definitions.schema.json

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -335,6 +335,12 @@
335335
{
336336
"const": "dynamic"
337337
},
338+
{
339+
"const": "prefer_dynamic"
340+
},
341+
{
342+
"const": "prefer_static"
343+
},
338344
{
339345
"const": "prefer-dynamic"
340346
},

pkgs/code_assets/test/data/build_output_macos.json

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,20 @@
6464
}
6565
]
6666
},
67+
"assets_for_linking": {
68+
"package_with_linker": [
69+
{
70+
"architecture": "arm64",
71+
"file": "/private/var/folders/2y/mngq9h194yzglt4kzttzfq6800klzg/T/iv6i0d/native_add/.dart_tool/native_assets_builder/native_add/c6b312c90c95d2d98ffb6760a738fb36/out/libnative_add.a",
72+
"id": "package:native_add/src/native_add_bindings_generated.dart",
73+
"link_mode": {
74+
"type": "static"
75+
},
76+
"os": "macos",
77+
"type": "native_code"
78+
}
79+
]
80+
},
6781
"dependencies": [
6882
"/private/var/folders/2y/mngq9h194yzglt4kzttzfq6800klzg/T/ZnD2I3/native_add/src/native_add.c"
6983
],

pkgs/code_assets/test/schema/schema_test.dart

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -116,10 +116,14 @@ FieldsFunction _codeFields(AllTestData allTestData) {
116116
(['assets', 0, ...field], expectRequiredFieldMissing),
117117
if (hook == Hook.build) ...[
118118
for (final field in requiredCodeAssetFields)
119-
(
120-
['assetsForLinking', 'package_with_linker', 0, ...field],
121-
expectRequiredFieldMissing,
122-
),
119+
for (final assetsForLinking in [
120+
'assetsForLinking',
121+
'assets_for_linking',
122+
])
123+
(
124+
[assetsForLinking, 'package_with_linker', 0, ...field],
125+
expectRequiredFieldMissing,
126+
),
123127
],
124128
(['assets', staticIndex, 'file'], expectRequiredFieldMissing),
125129
(

pkgs/data_assets/doc/schema/shared/shared_definitions.generated.schema.json

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,15 @@
3131
"$ref": "shared_definitions.schema.json#/definitions/Asset"
3232
}
3333
}
34+
},
35+
"assets_for_linking": {
36+
"type": "object",
37+
"additionalProperties": {
38+
"type": "array",
39+
"items": {
40+
"$ref": "shared_definitions.schema.json#/definitions/Asset"
41+
}
42+
}
3443
}
3544
}
3645
}

pkgs/data_assets/test/data/build_output.json

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,22 @@
3030
}
3131
]
3232
},
33+
"assets_for_linking": {
34+
"package_with_linker": [
35+
{
36+
"file": "/private/var/folders/2y/mngq9h194yzglt4kzttzfq6800klzg/T/0s5bKi/simple_link/assets/data_0.json",
37+
"name": "assets/data_0.json",
38+
"package": "simple_link",
39+
"type": "data"
40+
},
41+
{
42+
"file": "/private/var/folders/2y/mngq9h194yzglt4kzttzfq6800klzg/T/0s5bKi/simple_link/assets/data_1.json",
43+
"name": "assets/data_1.json",
44+
"package": "simple_link",
45+
"type": "data"
46+
}
47+
]
48+
},
3349
"dependencies": [
3450
"/private/var/folders/2y/mngq9h194yzglt4kzttzfq6800klzg/T/0s5bKi/simple_link/assets/data_2.json",
3551
"/private/var/folders/2y/mngq9h194yzglt4kzttzfq6800klzg/T/0s5bKi/simple_link/assets/data_3.json"

pkgs/data_assets/test/schema/schema_test.dart

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -50,10 +50,14 @@ List<(List<Object>, void Function(ValidationResults result))> _dataFields({
5050
(['assets', 0, field], expectRequiredFieldMissing),
5151
if (hook == Hook.build) ...[
5252
for (final field in _dataAssetFields)
53-
(
54-
['assetsForLinking', 'package_with_linker', 0, field],
55-
expectRequiredFieldMissing,
56-
),
53+
for (final assetsForLinking in [
54+
'assetsForLinking',
55+
'assets_for_linking',
56+
])
57+
(
58+
[assetsForLinking, 'package_with_linker', 0, field],
59+
expectRequiredFieldMissing,
60+
),
5761
],
5862
],
5963
];

pkgs/hook/doc/schema/hook/shared_definitions.schema.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,11 @@
55
"BuildInput": {},
66
"BuildOutput": {
77
"$ref": "../shared/shared_definitions.schema.json#/definitions/BuildOutput",
8+
"properties": {
9+
"assets_for_linking": {
10+
"$comment": "Older SDKs will only read 'assetsForLinking', so it must be emitted as well."
11+
}
12+
},
813
"unevaluatedProperties": false
914
},
1015
"HookInput": {

pkgs/hook/doc/schema/sdk/shared_definitions.schema.json

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,16 @@
66
"$ref": "../shared/shared_definitions.schema.json#/definitions/BuildInput",
77
"unevaluatedProperties": false
88
},
9-
"BuildOutput": {},
9+
"BuildOutput": {
10+
"properties": {
11+
"assetsForLinking": {
12+
"deprecated": true
13+
},
14+
"assets_for_linking": {
15+
"$comment": "Older hooks will still emit 'assetsForLinking', so it must be read."
16+
}
17+
}
18+
},
1019
"HookInput": {
1120
"properties": {
1221
"out_file": {

pkgs/hook/doc/schema/shared/shared_definitions.schema.json

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,15 @@
6161
}
6262
}
6363
},
64+
"assets_for_linking": {
65+
"type": "object",
66+
"additionalProperties": {
67+
"type": "array",
68+
"items": {
69+
"$ref": "#/definitions/Asset"
70+
}
71+
}
72+
},
6473
"metadata": {
6574
"type": "object",
6675
"additionalProperties": true

pkgs/hook/test/data/build_output.json

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,18 @@
2222
}
2323
]
2424
},
25+
"assets_for_linking": {
26+
"package_with_linker": [
27+
{
28+
"some_key": "some_value",
29+
"type": "some_asset_type"
30+
},
31+
{
32+
"some_other_key": "some_value",
33+
"type": "some_other_asset_type"
34+
}
35+
]
36+
},
2537
"dependencies": [
2638
"/private/var/folders/2y/mngq9h194yzglt4kzttzfq6800klzg/T/0s5bKi/simple_link/assets/data_2.json",
2739
"/private/var/folders/2y/mngq9h194yzglt4kzttzfq6800klzg/T/0s5bKi/simple_link/assets/data_3.json"

pkgs/hook/test/schema/helpers.dart

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -340,19 +340,23 @@ FieldsReturn _hookFields({
340340
(['assets'], expectOptionalFieldMissing),
341341
(['assets', 0], expectOptionalFieldMissing),
342342
(['assets', 0, 'type'], expectRequiredFieldMissing),
343-
if (hook == Hook.build) ...[
344-
(['metadata'], expectOptionalFieldMissing),
345-
(['assetsForLinking'], expectOptionalFieldMissing),
346-
(
347-
['assetsForLinking', 'package_with_linker', 0],
348-
expectOptionalFieldMissing,
349-
),
350-
(['assetsForLinking'], expectOptionalFieldMissing),
351-
(
352-
['assetsForLinking', 'package_with_linker', 0, 'type'],
353-
expectRequiredFieldMissing,
354-
),
355-
],
343+
if (hook == Hook.build)
344+
for (final assetsForLinking in [
345+
'assetsForLinking',
346+
'assets_for_linking',
347+
]) ...[
348+
(['metadata'], expectOptionalFieldMissing),
349+
([assetsForLinking], expectOptionalFieldMissing),
350+
(
351+
[assetsForLinking, 'package_with_linker', 0],
352+
expectOptionalFieldMissing,
353+
),
354+
([assetsForLinking], expectOptionalFieldMissing),
355+
(
356+
[assetsForLinking, 'package_with_linker', 0, 'type'],
357+
expectRequiredFieldMissing,
358+
),
359+
],
356360
],
357361
];
358362
}

pkgs/hook/tool/generate_schemas.dart

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,15 @@ void generateSharedDefinitions() {
4343
},
4444
},
4545
},
46+
'assets_for_linking': {
47+
'type': 'object',
48+
'additionalProperties': {
49+
'type': 'array',
50+
'items': {
51+
r'$ref': 'shared_definitions.schema.json#/definitions/Asset',
52+
},
53+
},
54+
},
4655
},
4756
};
4857
const linkInputAssetOverride = {

pkgs/hook/tool/generate_syntax.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,9 @@ void main(List<String> args) {
3333
'Ios': 'IOS',
3434
'macos': 'macOS',
3535
'Macos': 'MacOS',
36+
'prefer-dynamic': 'preferDynamicOld',
37+
'prefer-static': 'preferStaticOld',
38+
'assetsForLinking': 'assetsForLinkingOld',
3639
},
3740
publicSetters: [
3841
'BuildOutput',

pkgs/json_syntax_generator/lib/src/parser/schema_analyzer.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -398,7 +398,7 @@ class SchemaAnalyzer {
398398
return '';
399399
}
400400

401-
final parts = string.replaceAll('-', '_').split('_');
401+
final parts = string.split('_');
402402

403403
String remapCapitalization(String input) =>
404404
capitalizationOverrides[input] ?? input;

pkgs/native_assets_cli/lib/src/code_assets/link_mode_preference.dart

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -34,14 +34,14 @@ final class LinkModePreference {
3434
/// Provide native assets as dynamic libraries, if possible.
3535
///
3636
/// Otherwise, build native assets as static libraries
37-
static const preferDynamic = LinkModePreference('prefer-dynamic');
37+
static const preferDynamic = LinkModePreference('prefer_dynamic');
3838

3939
/// Provide native assets as static libraries, if possible.
4040
///
4141
/// Otherwise, build native assets as dynamic libraries. Preferred for AOT
4242
/// compilation, if there are any native assets which can only be provided as
4343
/// dynamic libraries.
44-
static const preferStatic = LinkModePreference('prefer-static');
44+
static const preferStatic = LinkModePreference('prefer_static');
4545

4646
static const values = [dynamic, static, preferDynamic, preferStatic];
4747

@@ -50,13 +50,21 @@ final class LinkModePreference {
5050
}
5151

5252
extension LinkModePreferenceSyntax on LinkModePreference {
53-
static final _toSyntax = {
54-
for (final item in LinkModePreference.values)
55-
item: syntax.LinkModePreference.fromJson(item.name),
53+
static const _toSyntax = {
54+
LinkModePreference.dynamic: syntax.LinkModePreference.dynamic,
55+
LinkModePreference.preferDynamic: syntax.LinkModePreference.preferDynamic,
56+
LinkModePreference.preferStatic: syntax.LinkModePreference.preferStatic,
57+
LinkModePreference.static: syntax.LinkModePreference.static,
5658
};
5759

58-
static final _fromSyntax = {
59-
for (var entry in _toSyntax.entries) entry.value: entry.key,
60+
static const _fromSyntax = {
61+
syntax.LinkModePreference.dynamic: LinkModePreference.dynamic,
62+
syntax.LinkModePreference.preferDynamic: LinkModePreference.preferDynamic,
63+
syntax.LinkModePreference.preferDynamicOld:
64+
LinkModePreference.preferDynamic,
65+
syntax.LinkModePreference.preferStatic: LinkModePreference.preferStatic,
66+
syntax.LinkModePreference.preferStaticOld: LinkModePreference.preferStatic,
67+
syntax.LinkModePreference.static: LinkModePreference.static,
6068
};
6169

6270
syntax.LinkModePreference toSyntax() => _toSyntax[this]!;

pkgs/native_assets_cli/lib/src/code_assets/syntax.g.dart

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -871,14 +871,20 @@ class LinkModePreference {
871871

872872
static const dynamic = LinkModePreference._('dynamic');
873873

874-
static const preferDynamic = LinkModePreference._('prefer-dynamic');
874+
static const preferDynamicOld = LinkModePreference._('prefer-dynamic');
875875

876-
static const preferStatic = LinkModePreference._('prefer-static');
876+
static const preferStaticOld = LinkModePreference._('prefer-static');
877+
878+
static const preferDynamic = LinkModePreference._('prefer_dynamic');
879+
880+
static const preferStatic = LinkModePreference._('prefer_static');
877881

878882
static const static = LinkModePreference._('static');
879883

880884
static const List<LinkModePreference> values = [
881885
dynamic,
886+
preferDynamicOld,
887+
preferStaticOld,
882888
preferDynamic,
883889
preferStatic,
884890
static,

pkgs/native_assets_cli/lib/src/config.dart

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -335,7 +335,8 @@ class BuildOutput extends HookOutput {
335335
/// specified in the key, which can decide if they are bundled or not.
336336
Map<String, List<EncodedAsset>> get _encodedAssetsForLinking => {
337337
for (final MapEntry(:key, :value)
338-
in (_syntax.assetsForLinking ?? {}).entries)
338+
in (_syntax.assetsForLinking ?? _syntax.assetsForLinkingOld ?? {})
339+
.entries)
339340
key: _parseAssets(value),
340341
};
341342

@@ -435,6 +436,7 @@ extension type EncodedAssetBuildOutputBuilder._(BuildOutputBuilder _output) {
435436
syntax.Asset.fromJson(asset.toJson()),
436437
);
437438
_syntax.assetsForLinking = assetsForLinking;
439+
_syntax.assetsForLinkingOld = assetsForLinking;
438440
} else {
439441
final assets = _syntax.assets ?? [];
440442
assets.add(syntax.Asset.fromJson(asset.toJson()));
@@ -465,12 +467,14 @@ extension type EncodedAssetBuildOutputBuilder._(BuildOutputBuilder _output) {
465467
String? linkInPackage,
466468
}) {
467469
if (linkInPackage != null) {
468-
final assetsForLinking = _syntax.assetsForLinking ?? {};
470+
final assetsForLinking =
471+
_syntax.assetsForLinking ?? _syntax.assetsForLinkingOld ?? {};
469472
final list = assetsForLinking[linkInPackage] ??= [];
470473
for (final asset in assets) {
471474
list.add(syntax.Asset.fromJson(asset.toJson()));
472475
}
473476
_syntax.assetsForLinking = assetsForLinking;
477+
_syntax.assetsForLinkingOld = assetsForLinking;
474478
} else {
475479
final list = _syntax.assets ?? [];
476480
for (final asset in assets) {

0 commit comments

Comments
 (0)