Skip to content

Commit db36fc9

Browse files
Merge pull request #7 from relogiclabs/develop
Add Support for .NET 6
2 parents f04a968 + 1c8d777 commit db36fc9

File tree

102 files changed

+1448
-1997
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

102 files changed

+1448
-1997
lines changed

JsonSchema/JsonSchema.csproj

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,19 @@
22

33
<PropertyGroup>
44
<PackageId>RelogicLabs.JsonSchema</PackageId>
5-
<Description>A simplified, concise, intuitive, and extensible JSON Schema</Description>
5+
<Description>New JSON Schema prioritizes simplicity, conciseness, readability, and efficiency.
6+
It offers precise JSON document definition through ample functionalities and extensibility
7+
to meet the diverse web service requirements.</Description>
68
<Authors>Relogic Labs</Authors>
79
<Company>Relogic Labs</Company>
8-
<Version>1.5.0</Version>
9-
<PackageVersion>1.5.0</PackageVersion>
10-
<AssemblyVersion>1.5.0</AssemblyVersion>
10+
<Version>1.6.0</Version>
11+
<PackageVersion>1.6.0</PackageVersion>
12+
<AssemblyVersion>1.6.0</AssemblyVersion>
1113
<PackageTags>JsonSchema;Schema;Json;Validation;Assert;Test</PackageTags>
1214
<Copyright>Copyright © Relogic Labs. All rights reserved.</Copyright>
1315
<NeutralLanguage>en</NeutralLanguage>
1416
<AssemblyName>RelogicLabs.JsonSchema</AssemblyName>
15-
<TargetFramework>net7.0</TargetFramework>
17+
<TargetFrameworks>net6.0;net7.0</TargetFrameworks>
1618
<ImplicitUsings>enable</ImplicitUsings>
1719
<Nullable>enable</Nullable>
1820
<RootNamespace>RelogicLabs</RootNamespace>

JsonSchema/RelogicLabs/JsonSchema/Antlr/DateTimeLexer.cs

Lines changed: 23 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -31,13 +31,13 @@ internal partial class DateTimeLexer : Lexer {
3131
protected static DFA[] decisionToDFA;
3232
protected static PredictionContextCache sharedContextCache = new PredictionContextCache();
3333
public const int
34-
ERA=1, YEAR_NUM4=2, YEAR_NUM2=3, MONTH_NAME=4, MONTH_SHORT_NAME=5, MONTH_NUM2=6,
35-
MONTH_NUM=7, WEEKDAY_NAME=8, WEEKDAY_SHORT_NAME=9, DAY_NUM2=10, DAY_NUM=11,
36-
AM_PM=12, HOUR_NUM2=13, HOUR_NUM=14, MINUTE_NUM2=15, MINUTE_NUM=16, SECOND_NUM2=17,
37-
SECOND_NUM=18, FRACTION_NUM06=19, FRACTION_NUM05=20, FRACTION_NUM04=21,
38-
FRACTION_NUM03=22, FRACTION_NUM02=23, FRACTION_NUM01=24, FRACTION_NUM=25,
39-
UTC_OFFSET_TIME2=26, UTC_OFFSET_TIME1=27, UTC_OFFSET_HOUR=28, SYMBOL=29,
40-
WHITESPACE=30, TEXT=31;
34+
ERA=1, YEAR_NUMBER4=2, YEAR_NUMBER2=3, MONTH_NAME=4, MONTH_SHORT_NAME=5,
35+
MONTH_NUMBER2=6, MONTH_NUMBER=7, WEEKDAY_NAME=8, WEEKDAY_SHORT_NAME=9,
36+
DAY_NUMBER2=10, DAY_NUMBER=11, CLOCK_AM_PM=12, HOUR_NUMBER2=13, HOUR_NUMBER=14,
37+
MINUTE_NUMBER2=15, MINUTE_NUMBER=16, SECOND_NUMBER2=17, SECOND_NUMBER=18,
38+
FRACTION_NUMBER6=19, FRACTION_NUMBER5=20, FRACTION_NUMBER4=21, FRACTION_NUMBER3=22,
39+
FRACTION_NUMBER2=23, FRACTION_NUMBER1=24, FRACTION_NUMBER=25, UTC_OFFSET_TIME2=26,
40+
UTC_OFFSET_TIME1=27, UTC_OFFSET_HOUR=28, SYMBOL=29, WHITESPACE=30, TEXT=31;
4141
public static string[] channelNames = {
4242
"DEFAULT_TOKEN_CHANNEL", "HIDDEN"
4343
};
@@ -47,11 +47,12 @@ public const int
4747
};
4848

4949
public static readonly string[] ruleNames = {
50-
"ERA", "YEAR_NUM4", "YEAR_NUM2", "MONTH_NAME", "MONTH_SHORT_NAME", "MONTH_NUM2",
51-
"MONTH_NUM", "WEEKDAY_NAME", "WEEKDAY_SHORT_NAME", "DAY_NUM2", "DAY_NUM",
52-
"AM_PM", "HOUR_NUM2", "HOUR_NUM", "MINUTE_NUM2", "MINUTE_NUM", "SECOND_NUM2",
53-
"SECOND_NUM", "FRACTION_NUM06", "FRACTION_NUM05", "FRACTION_NUM04", "FRACTION_NUM03",
54-
"FRACTION_NUM02", "FRACTION_NUM01", "FRACTION_NUM", "UTC_OFFSET_TIME2",
50+
"ERA", "YEAR_NUMBER4", "YEAR_NUMBER2", "MONTH_NAME", "MONTH_SHORT_NAME",
51+
"MONTH_NUMBER2", "MONTH_NUMBER", "WEEKDAY_NAME", "WEEKDAY_SHORT_NAME",
52+
"DAY_NUMBER2", "DAY_NUMBER", "CLOCK_AM_PM", "HOUR_NUMBER2", "HOUR_NUMBER",
53+
"MINUTE_NUMBER2", "MINUTE_NUMBER", "SECOND_NUMBER2", "SECOND_NUMBER",
54+
"FRACTION_NUMBER6", "FRACTION_NUMBER5", "FRACTION_NUMBER4", "FRACTION_NUMBER3",
55+
"FRACTION_NUMBER2", "FRACTION_NUMBER1", "FRACTION_NUMBER", "UTC_OFFSET_TIME2",
5556
"UTC_OFFSET_TIME1", "UTC_OFFSET_HOUR", "SYMBOL", "WHITESPACE", "TEXT"
5657
};
5758

@@ -66,19 +67,19 @@ public DateTimeLexer(ICharStream input, TextWriter output, TextWriter errorOutpu
6667
}
6768

6869
private static readonly string[] _LiteralNames = {
69-
null, "'G'", "'YYYY'", "'YY'", "'MMMM'", "'MMM'", "'MM'", "'M'", "'DDDD'",
70-
"'DDD'", "'DD'", "'D'", "'t'", "'hh'", "'h'", "'mm'", "'m'", "'ss'", "'s'",
71-
"'ffffff'", "'fffff'", "'ffff'", "'fff'", "'ff'", "'f'", "'F'", "'ZZZ'",
70+
null, "'G'", "'YYYY'", "'YY'", "'MMMM'", "'MMM'", "'MM'", "'M'", "'DDDD'",
71+
"'DDD'", "'DD'", "'D'", "'t'", "'hh'", "'h'", "'mm'", "'m'", "'ss'", "'s'",
72+
"'ffffff'", "'fffff'", "'ffff'", "'fff'", "'ff'", "'f'", "'F'", "'ZZZ'",
7273
"'ZZ'", "'Z'"
7374
};
7475
private static readonly string[] _SymbolicNames = {
75-
null, "ERA", "YEAR_NUM4", "YEAR_NUM2", "MONTH_NAME", "MONTH_SHORT_NAME",
76-
"MONTH_NUM2", "MONTH_NUM", "WEEKDAY_NAME", "WEEKDAY_SHORT_NAME", "DAY_NUM2",
77-
"DAY_NUM", "AM_PM", "HOUR_NUM2", "HOUR_NUM", "MINUTE_NUM2", "MINUTE_NUM",
78-
"SECOND_NUM2", "SECOND_NUM", "FRACTION_NUM06", "FRACTION_NUM05", "FRACTION_NUM04",
79-
"FRACTION_NUM03", "FRACTION_NUM02", "FRACTION_NUM01", "FRACTION_NUM",
80-
"UTC_OFFSET_TIME2", "UTC_OFFSET_TIME1", "UTC_OFFSET_HOUR", "SYMBOL", "WHITESPACE",
81-
"TEXT"
76+
null, "ERA", "YEAR_NUMBER4", "YEAR_NUMBER2", "MONTH_NAME", "MONTH_SHORT_NAME",
77+
"MONTH_NUMBER2", "MONTH_NUMBER", "WEEKDAY_NAME", "WEEKDAY_SHORT_NAME",
78+
"DAY_NUMBER2", "DAY_NUMBER", "CLOCK_AM_PM", "HOUR_NUMBER2", "HOUR_NUMBER",
79+
"MINUTE_NUMBER2", "MINUTE_NUMBER", "SECOND_NUMBER2", "SECOND_NUMBER",
80+
"FRACTION_NUMBER6", "FRACTION_NUMBER5", "FRACTION_NUMBER4", "FRACTION_NUMBER3",
81+
"FRACTION_NUMBER2", "FRACTION_NUMBER1", "FRACTION_NUMBER", "UTC_OFFSET_TIME2",
82+
"UTC_OFFSET_TIME1", "UTC_OFFSET_HOUR", "SYMBOL", "WHITESPACE", "TEXT"
8283
};
8384
public static readonly IVocabulary DefaultVocabulary = new Vocabulary(_LiteralNames, _SymbolicNames);
8485

JsonSchema/RelogicLabs/JsonSchema/Antlr/DateTimeLexer.interp

Lines changed: 40 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -35,30 +35,30 @@ null
3535
token symbolic names:
3636
null
3737
ERA
38-
YEAR_NUM4
39-
YEAR_NUM2
38+
YEAR_NUMBER4
39+
YEAR_NUMBER2
4040
MONTH_NAME
4141
MONTH_SHORT_NAME
42-
MONTH_NUM2
43-
MONTH_NUM
42+
MONTH_NUMBER2
43+
MONTH_NUMBER
4444
WEEKDAY_NAME
4545
WEEKDAY_SHORT_NAME
46-
DAY_NUM2
47-
DAY_NUM
48-
AM_PM
49-
HOUR_NUM2
50-
HOUR_NUM
51-
MINUTE_NUM2
52-
MINUTE_NUM
53-
SECOND_NUM2
54-
SECOND_NUM
55-
FRACTION_NUM06
56-
FRACTION_NUM05
57-
FRACTION_NUM04
58-
FRACTION_NUM03
59-
FRACTION_NUM02
60-
FRACTION_NUM01
61-
FRACTION_NUM
46+
DAY_NUMBER2
47+
DAY_NUMBER
48+
CLOCK_AM_PM
49+
HOUR_NUMBER2
50+
HOUR_NUMBER
51+
MINUTE_NUMBER2
52+
MINUTE_NUMBER
53+
SECOND_NUMBER2
54+
SECOND_NUMBER
55+
FRACTION_NUMBER6
56+
FRACTION_NUMBER5
57+
FRACTION_NUMBER4
58+
FRACTION_NUMBER3
59+
FRACTION_NUMBER2
60+
FRACTION_NUMBER1
61+
FRACTION_NUMBER
6262
UTC_OFFSET_TIME2
6363
UTC_OFFSET_TIME1
6464
UTC_OFFSET_HOUR
@@ -68,30 +68,30 @@ TEXT
6868

6969
rule names:
7070
ERA
71-
YEAR_NUM4
72-
YEAR_NUM2
71+
YEAR_NUMBER4
72+
YEAR_NUMBER2
7373
MONTH_NAME
7474
MONTH_SHORT_NAME
75-
MONTH_NUM2
76-
MONTH_NUM
75+
MONTH_NUMBER2
76+
MONTH_NUMBER
7777
WEEKDAY_NAME
7878
WEEKDAY_SHORT_NAME
79-
DAY_NUM2
80-
DAY_NUM
81-
AM_PM
82-
HOUR_NUM2
83-
HOUR_NUM
84-
MINUTE_NUM2
85-
MINUTE_NUM
86-
SECOND_NUM2
87-
SECOND_NUM
88-
FRACTION_NUM06
89-
FRACTION_NUM05
90-
FRACTION_NUM04
91-
FRACTION_NUM03
92-
FRACTION_NUM02
93-
FRACTION_NUM01
94-
FRACTION_NUM
79+
DAY_NUMBER2
80+
DAY_NUMBER
81+
CLOCK_AM_PM
82+
HOUR_NUMBER2
83+
HOUR_NUMBER
84+
MINUTE_NUMBER2
85+
MINUTE_NUMBER
86+
SECOND_NUMBER2
87+
SECOND_NUMBER
88+
FRACTION_NUMBER6
89+
FRACTION_NUMBER5
90+
FRACTION_NUMBER4
91+
FRACTION_NUMBER3
92+
FRACTION_NUMBER2
93+
FRACTION_NUMBER1
94+
FRACTION_NUMBER
9595
UTC_OFFSET_TIME2
9696
UTC_OFFSET_TIME1
9797
UTC_OFFSET_HOUR

JsonSchema/RelogicLabs/JsonSchema/Antlr/DateTimeLexer.tokens

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,28 @@
11
ERA=1
2-
YEAR_NUM4=2
3-
YEAR_NUM2=3
2+
YEAR_NUMBER4=2
3+
YEAR_NUMBER2=3
44
MONTH_NAME=4
55
MONTH_SHORT_NAME=5
6-
MONTH_NUM2=6
7-
MONTH_NUM=7
6+
MONTH_NUMBER2=6
7+
MONTH_NUMBER=7
88
WEEKDAY_NAME=8
99
WEEKDAY_SHORT_NAME=9
10-
DAY_NUM2=10
11-
DAY_NUM=11
12-
AM_PM=12
13-
HOUR_NUM2=13
14-
HOUR_NUM=14
15-
MINUTE_NUM2=15
16-
MINUTE_NUM=16
17-
SECOND_NUM2=17
18-
SECOND_NUM=18
19-
FRACTION_NUM06=19
20-
FRACTION_NUM05=20
21-
FRACTION_NUM04=21
22-
FRACTION_NUM03=22
23-
FRACTION_NUM02=23
24-
FRACTION_NUM01=24
25-
FRACTION_NUM=25
10+
DAY_NUMBER2=10
11+
DAY_NUMBER=11
12+
CLOCK_AM_PM=12
13+
HOUR_NUMBER2=13
14+
HOUR_NUMBER=14
15+
MINUTE_NUMBER2=15
16+
MINUTE_NUMBER=16
17+
SECOND_NUMBER2=17
18+
SECOND_NUMBER=18
19+
FRACTION_NUMBER6=19
20+
FRACTION_NUMBER5=20
21+
FRACTION_NUMBER4=21
22+
FRACTION_NUMBER3=22
23+
FRACTION_NUMBER2=23
24+
FRACTION_NUMBER1=24
25+
FRACTION_NUMBER=25
2626
UTC_OFFSET_TIME2=26
2727
UTC_OFFSET_TIME1=27
2828
UTC_OFFSET_HOUR=28

JsonSchema/RelogicLabs/JsonSchema/Collections/IIndexMap.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,5 @@ public interface IIndexMap<TK, TV> : IList<TV>
77
IEnumerable<TK> Keys { get; }
88
IEnumerable<TV> Values { get; }
99
bool TryGetValue(TK key, out TV? value);
10-
void MakeReadOnly();
10+
IIndexMap<TK, TV> AsReadOnly();
1111
}

JsonSchema/RelogicLabs/JsonSchema/Collections/IndexHashMap.cs

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System.Collections;
2+
using System.Collections.ObjectModel;
23

34
namespace RelogicLabs.JsonSchema.Collections;
45

@@ -10,8 +11,8 @@ public class IndexHashMap<TK, TV> : IIndexMap<TK, TV>
1011

1112
public IndexHashMap(IEnumerable<TV> source)
1213
{
13-
_list = source.ToList().AsReadOnly();
14-
_dictionary = _list.ToDictionary(e => e.GetKey(), e => e).AsReadOnly();
14+
_list = source.ToList();
15+
_dictionary = _list.ToDictionary(e => e.GetKey(), e => e);
1516
}
1617

1718
public IEnumerator<TV> GetEnumerator() => _list.GetEnumerator();
@@ -68,9 +69,10 @@ public TV this[int index]
6869
public bool TryGetValue(TK key, out TV? value)
6970
=> _dictionary.TryGetValue(key, out value);
7071

71-
public void MakeReadOnly()
72+
public IIndexMap<TK, TV> AsReadOnly()
7273
{
73-
_list = _list.AsReadOnly();
74-
_dictionary = _dictionary.AsReadOnly();
74+
_list = new ReadOnlyCollection<TV>(_list);
75+
_dictionary = new ReadOnlyDictionary<TK, TV>(_dictionary);
76+
return this;
7577
}
7678
}

JsonSchema/RelogicLabs/JsonSchema/Functions/CoreFunctions3.cs

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,13 @@ namespace RelogicLabs.JsonSchema.Functions;
1010

1111
public partial class CoreFunctions
1212
{
13+
// Based on SMTP protocol RFC 5322
14+
private static readonly Regex EmailRegex = new(
15+
"^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$", RegexOptions.Compiled);
16+
17+
// Based on ITU-T E.163 and E.164 (extended)
18+
private static readonly Regex PhoneRegex = new(@"^\+?[0-9\s-()]+$", RegexOptions.Compiled);
19+
1320
public bool Elements(JArray target, params JNode[] items)
1421
{
1522
return items.Where(n => !target.Elements.Contains(n))
@@ -65,7 +72,7 @@ public bool Regex(JString target, JString pattern)
6572

6673
public bool Email(JString target)
6774
{
68-
var result = EmailRegex().IsMatch(target);
75+
var result = EmailRegex.IsMatch(target);
6976
if(!result) return FailWith(new JsonSchemaException(
7077
new ErrorDetail(EMAL01, "Invalid email address"),
7178
new ExpectedDetail(Function, "a valid email address"),
@@ -85,8 +92,8 @@ public bool Url(JString target)
8592
if(!result) return FailWith(new JsonSchemaException(
8693
new ErrorDetail(URLA02, "Invalid url address scheme"),
8794
new ExpectedDetail(Function, "HTTP or HTTPS scheme"),
88-
new ActualDetail(target, $"found {uriResult.Scheme.Quote()} from {
89-
target} that has invalid scheme")));
95+
new ActualDetail(target, $"found {uriResult.Scheme.Quote()} from {target} " +
96+
$"that has invalid scheme")));
9097
return true;
9198
}
9299

@@ -101,14 +108,14 @@ public bool Url(JString target, JString scheme)
101108
if(!result) return FailWith(new JsonSchemaException(
102109
new ErrorDetail(URLA04, "Mismatch url address scheme"),
103110
new ExpectedDetail(Function, $"scheme {scheme} for url address"),
104-
new ActualDetail(target, $"found {uriResult.Scheme.Quote()} from {
105-
target} that does not matched")));
111+
new ActualDetail(target, $"found {uriResult.Scheme.Quote()} from {target} " +
112+
$"that does not matched")));
106113
return true;
107114
}
108115

109116
public bool Phone(JString target)
110117
{
111-
bool result = PhoneRegex().IsMatch(target);
118+
bool result = PhoneRegex.IsMatch(target);
112119
if(!result) return FailWith(new JsonSchemaException(
113120
new ErrorDetail(PHON01, "Invalid phone number format"),
114121
new ExpectedDetail(Function, "a valid phone number"),
@@ -149,12 +156,4 @@ private bool DateTime(JString target, JString pattern, DateTimeType type)
149156
ex));
150157
}
151158
}
152-
153-
// Based on SMTP protocol RFC 5322
154-
[GeneratedRegex("^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$", RegexOptions.Compiled)]
155-
private static partial Regex EmailRegex();
156-
157-
// Based on ITU-T E.163 and E.164 (extended)
158-
[GeneratedRegex(@"^\+?[0-9\s-()]+$", RegexOptions.Compiled)]
159-
private static partial Regex PhoneRegex();
160159
}

JsonSchema/RelogicLabs/JsonSchema/Functions/FunctionBase.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,11 @@ namespace RelogicLabs.JsonSchema.Functions;
66

77
public abstract class FunctionBase
88
{
9-
public required RuntimeContext Runtime { get; init; }
9+
public RuntimeContext Runtime { get; }
1010
public JFunction Function { get; set; } = null!;
11-
11+
1212
protected FunctionBase(RuntimeContext runtime) => Runtime = runtime;
13-
13+
1414
protected bool FailWith(JsonSchemaException exception)
1515
=> Runtime.FailWith(exception);
1616
}

0 commit comments

Comments
 (0)