Skip to content

Commit 72363d7

Browse files
committed
update json lib
1 parent 402a66b commit 72363d7

9 files changed

+168
-50
lines changed

build.bat

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
@echo off
2+
3+
:: create the output directory
4+
mkdir bin
5+
6+
:: build runtime assembly and copy lib
7+
dotnet build -c Release ./tool/Cascadium-Utility.csproj
8+
9+
copy tool\bin\Release\net7.0\Cascadium.Core.dll bin\Cascadium.Core.dll
10+
copy tool\bin\Release\net7.0\LightJson.dll bin\LightJson.dll
11+
12+
mkdir bin\tool
13+
14+
:: build executeables
15+
16+
for %%i in (windows linux) do (
17+
mkdir bin\tool\%%i
18+
19+
call bflat build ^
20+
tool/Compiler.cs ^
21+
tool/CommandLineArguments.cs ^
22+
tool/CommandLineParser.cs ^
23+
tool/JsonCompilerOptions.cs ^
24+
tool/Log.cs ^
25+
tool/PathUtils.cs ^
26+
tool/Program.cs ^
27+
tool/Watcher.cs ^
28+
-r bin/Cascadium.Core.dll ^
29+
-r bin/LightJson.dll ^
30+
-Ot ^
31+
--no-stacktrace-data ^
32+
--no-globalization ^
33+
-m native ^
34+
--os %%i ^
35+
--arch x64 ^
36+
-o bin/tool/%%i/cascadium
37+
)

simple-css-nesting.sln

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
2+
Microsoft Visual Studio Solution File, Format Version 12.00
3+
# Visual Studio Version 17
4+
VisualStudioVersion = 17.5.002.0
5+
MinimumVisualStudioVersion = 10.0.40219.1
6+
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Cascadium", "src\Cascadium.csproj", "{ACD2DBA9-BF07-4F18-95ED-BC69DCC59A3C}"
7+
EndProject
8+
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Cascadium-Utility", "tool\Cascadium-Utility.csproj", "{CB7E8644-3094-44DB-94C9-068CB12C4993}"
9+
EndProject
10+
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tests", "tests", "{650184C6-E955-4D15-B478-15BB312B79AF}"
11+
EndProject
12+
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "build", "build", "{EF0FD356-832B-41B6-A3A9-32C5F53D4E62}"
13+
EndProject
14+
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CssTests", "tests\build\CssTests\CssTests.csproj", "{9C391FB9-77C4-420D-88DC-2863B759AA64}"
15+
EndProject
16+
Global
17+
GlobalSection(SolutionConfigurationPlatforms) = preSolution
18+
Debug|Any CPU = Debug|Any CPU
19+
Release|Any CPU = Release|Any CPU
20+
EndGlobalSection
21+
GlobalSection(ProjectConfigurationPlatforms) = postSolution
22+
{ACD2DBA9-BF07-4F18-95ED-BC69DCC59A3C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
23+
{ACD2DBA9-BF07-4F18-95ED-BC69DCC59A3C}.Debug|Any CPU.Build.0 = Debug|Any CPU
24+
{ACD2DBA9-BF07-4F18-95ED-BC69DCC59A3C}.Release|Any CPU.ActiveCfg = Release|Any CPU
25+
{ACD2DBA9-BF07-4F18-95ED-BC69DCC59A3C}.Release|Any CPU.Build.0 = Release|Any CPU
26+
{CB7E8644-3094-44DB-94C9-068CB12C4993}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
27+
{CB7E8644-3094-44DB-94C9-068CB12C4993}.Debug|Any CPU.Build.0 = Debug|Any CPU
28+
{CB7E8644-3094-44DB-94C9-068CB12C4993}.Release|Any CPU.ActiveCfg = Release|Any CPU
29+
{CB7E8644-3094-44DB-94C9-068CB12C4993}.Release|Any CPU.Build.0 = Release|Any CPU
30+
{9C391FB9-77C4-420D-88DC-2863B759AA64}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
31+
{9C391FB9-77C4-420D-88DC-2863B759AA64}.Debug|Any CPU.Build.0 = Debug|Any CPU
32+
{9C391FB9-77C4-420D-88DC-2863B759AA64}.Release|Any CPU.ActiveCfg = Release|Any CPU
33+
{9C391FB9-77C4-420D-88DC-2863B759AA64}.Release|Any CPU.Build.0 = Release|Any CPU
34+
EndGlobalSection
35+
GlobalSection(SolutionProperties) = preSolution
36+
HideSolutionNode = FALSE
37+
EndGlobalSection
38+
GlobalSection(NestedProjects) = preSolution
39+
{EF0FD356-832B-41B6-A3A9-32C5F53D4E62} = {650184C6-E955-4D15-B478-15BB312B79AF}
40+
{9C391FB9-77C4-420D-88DC-2863B759AA64} = {EF0FD356-832B-41B6-A3A9-32C5F53D4E62}
41+
EndGlobalSection
42+
GlobalSection(ExtensibilityGlobals) = postSolution
43+
SolutionGuid = {F00BA270-BFEE-4F42-A17D-A0821FA637AF}
44+
EndGlobalSection
45+
EndGlobal

src/Cascadium.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<TargetFramework>net6.0</TargetFramework>
55
<RootNamespace>Cascadium</RootNamespace>
66
<AssemblyName>Cascadium.Core</AssemblyName>
7-
<ImplicitUsings>enable</ImplicitUsings>
7+
<ImplicitUsings>disable</ImplicitUsings>
88
<Nullable>enable</Nullable>
99
<GenerateDocumentationFile>True</GenerateDocumentationFile>
1010
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>

src/CascadiumCompiler.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using System.Text;
1+
using System;
2+
using System.Text;
23

34
namespace Cascadium;
45

src/CascadiumOptions.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
using Cascadium.Converters;
2+
using System;
3+
using System.Collections.Generic;
24
using System.Collections.Specialized;
35

46
namespace Cascadium;

src/Rule.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1-
namespace Cascadium;
1+
using System;
2+
using System.Collections.Generic;
3+
4+
namespace Cascadium;
25

36
internal class Rule
47
{

tool/Cascadium-Utility.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
</PropertyGroup>
1616

1717
<ItemGroup>
18+
<ProjectReference Include="..\..\..\LightJson\Sources\LightJson\LightJson.csproj" />
1819
<ProjectReference Include="..\src\Cascadium.csproj" />
1920
</ItemGroup>
2021

tool/JsonCompilerOptions.cs

Lines changed: 76 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -9,19 +9,11 @@
99
using System.Text.Json;
1010
using System.IO;
1111
using System.Diagnostics.CodeAnalysis;
12+
using LightJson;
13+
using System.Collections;
1214

1315
namespace cascadiumtool;
1416

15-
[JsonSerializable(typeof(ICollection<string>))]
16-
[JsonSerializable(typeof(string))]
17-
[JsonSerializable(typeof(bool))]
18-
[JsonSerializable(typeof(StaticCSSConverter))]
19-
[JsonSerializable(typeof(Dictionary<string, string>))]
20-
[JsonSerializable(typeof(JsonCssCompilerOptions))]
21-
internal partial class JsonCssCompilerOptionsSerializerContext : JsonSerializerContext
22-
{
23-
}
24-
2517
internal class JsonCssCompilerOptions
2618
{
2719
public ICollection<string> InputFiles { get; set; } = Array.Empty<string>();
@@ -34,9 +26,9 @@ internal class JsonCssCompilerOptions
3426
public string? MergeOrderPriority { get; set; }
3527

3628
public IEnumerable<StaticCSSConverter> Converters { get; set; } = Array.Empty<StaticCSSConverter>();
37-
public Dictionary<string, string> AtRulesRewrites { get; set; } = new Dictionary<string, string>();
29+
public IDictionary<string, string> AtRulesRewrites { get; set; } = new Dictionary<string, string>();
3830
public IEnumerable<string> Extensions { get; set; } = Array.Empty<string>();
39-
public ICollection<string> ExcludePatterns { get; set; } = Array.Empty<string>();
31+
public IEnumerable<string> ExcludePatterns { get; set; } = Array.Empty<string>();
4032

4133
public static JsonCssCompilerOptions Create(string configFile)
4234
{
@@ -49,16 +41,28 @@ public static JsonCssCompilerOptions Create(string configFile)
4941

5042
string contents = File.ReadAllText(pathToConfigFile);
5143

52-
JsonCssCompilerOptions? jsonConfig = JsonSerializer.Deserialize(
53-
contents,
54-
typeof(JsonCssCompilerOptions),
55-
new JsonCssCompilerOptionsSerializerContext(new JsonSerializerOptions()
56-
{
57-
PropertyNameCaseInsensitive = true,
58-
ReadCommentHandling = JsonCommentHandling.Skip
59-
})) as JsonCssCompilerOptions;
44+
JsonOptions.ThrowOnInvalidCast = true;
45+
JsonOptions.PropertyNameCaseInsensitive = true;
46+
JsonOptions.Mappers.Add(new StaticCSSConverterMapper());
47+
JsonOptions.Mappers.Add(new DictionaryMapper());
48+
49+
JsonObject jsonObj = JsonValue.Parse(contents).AsJsonObject!;
50+
JsonCssCompilerOptions compilerConfig = new JsonCssCompilerOptions();
6051

61-
return jsonConfig!;
52+
compilerConfig.InputFiles = new List<string>(jsonObj["InputFiles"].MaybeNull()?.AsJsonArray!.Select(i => i.AsString!) ?? Array.Empty<string>());
53+
compilerConfig.InputDirectories = new List<string>(jsonObj["InputDirectories"].MaybeNull()?.AsJsonArray!.Select(i => i.AsString!) ?? Array.Empty<string>());
54+
compilerConfig.OutputFile = jsonObj["OutputFile"].MaybeNull()?.AsString;
55+
compilerConfig.KeepNestingSpace = jsonObj["KeepNestingSpace"].MaybeNull()?.AsBoolean;
56+
compilerConfig.Pretty = jsonObj["pretty"].MaybeNull()?.AsBoolean;
57+
compilerConfig.UseVarShortcut = jsonObj["useVarShortcut"].MaybeNull()?.AsBoolean;
58+
compilerConfig.Merge = jsonObj["merge"].MaybeNull()?.AsString;
59+
compilerConfig.MergeOrderPriority = jsonObj["MergeOrderPriority"].MaybeNull()?.AsString;
60+
compilerConfig.Converters = jsonObj["Converters"].MaybeNull()?.AsJsonArray!.EveryAs<StaticCSSConverter>() ?? Array.Empty<StaticCSSConverter>();
61+
compilerConfig.AtRulesRewrites = jsonObj["AtRulesRewrites"].MaybeNull()?.As<IDictionary<string, string>>() ?? new Dictionary<string, string>();
62+
compilerConfig.Extensions = jsonObj["Extensions"].MaybeNull()?.AsJsonArray!.Select(s => s.AsString!) ?? Array.Empty<string>();
63+
compilerConfig.ExcludePatterns = jsonObj["ExcludePatterns"].MaybeNull()?.AsJsonArray!.Select(s => s.AsString!) ?? Array.Empty<string>();
64+
65+
return compilerConfig;
6266
}
6367

6468
[DynamicDependency("MergeOption")]
@@ -80,3 +84,54 @@ public void ApplyConfiguration(CascadiumOptions compilerOptions)
8084
}
8185
}
8286
}
87+
88+
public class DictionaryMapper : JsonSerializerMapper
89+
{
90+
public override Boolean CanSerialize(Type obj)
91+
{
92+
return obj == typeof(IDictionary<string, string>);
93+
}
94+
95+
public override Object Deserialize(JsonValue value)
96+
{
97+
var dict = new Dictionary<string, string>();
98+
99+
value.EnsureType(JsonValueType.Object);
100+
var obj = value.AsJsonObject!;
101+
102+
foreach (var kvp in obj.Properties)
103+
{
104+
dict.Add(kvp.Key, kvp.Value.AsString!);
105+
}
106+
107+
return dict;
108+
}
109+
110+
public override JsonValue Serialize(Object value)
111+
{
112+
throw new NotImplementedException();
113+
}
114+
}
115+
116+
public class StaticCSSConverterMapper : JsonSerializerMapper
117+
{
118+
public override Boolean CanSerialize(Type obj)
119+
{
120+
return obj == typeof(StaticCSSConverter);
121+
}
122+
123+
public override Object Deserialize(JsonValue value)
124+
{
125+
return new StaticCSSConverter()
126+
{
127+
ArgumentCount = (int)value["ArgumentCount"].AsNumber,
128+
MatchProperty = value["MatchProperty"].AsString,
129+
Output = value["Output"].As<IDictionary<string, string>>()
130+
};
131+
}
132+
133+
public override JsonValue Serialize(Object value)
134+
{
135+
throw new NotImplementedException();
136+
}
137+
}

tool/xcss.csproj

Lines changed: 0 additions & 26 deletions
This file was deleted.

0 commit comments

Comments
 (0)