Skip to content

Commit fc5f901

Browse files
authored
fix!: compile double to number in Rules (#187)
* Compile `double` to `number` * Add changeset
1 parent 7502c83 commit fc5f901

5 files changed

Lines changed: 20 additions & 4 deletions

File tree

.changeset/clever-lizards-sin.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"typesync-cli": minor
3+
---
4+
5+
[BREAKING] `double` types now compile to `number` in Security Rules type validators

src/generators/rules/_converters.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@ export function integerTypeToRules(_t: schema.rules.types.Int): rules.Int {
2626
return { type: 'int' };
2727
}
2828

29-
export function doubleTypeToRules(_t: schema.rules.types.Double): rules.Float {
30-
return { type: 'float' };
29+
export function doubleTypeToRules(_t: schema.rules.types.Double): rules.Number {
30+
return { type: 'number' };
3131
}
3232

3333
export function timestampTypeToRules(_t: schema.rules.types.Timestamp): rules.Timestamp {

src/generators/rules/_type-predicates.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,10 @@ export function typePredicateForIntType(t: rules.Int, varName: string): rules.Pr
2121
return { type: 'type-equality', varName, varType: t };
2222
}
2323

24+
export function typePredicateForNumberType(t: rules.Number, varName: string): rules.Predicate {
25+
return { type: 'type-equality', varName, varType: t };
26+
}
27+
2428
export function typePredicateForTimestampType(t: rules.Timestamp, varName: string): rules.Predicate {
2529
return { type: 'type-equality', varName, varType: t };
2630
}
@@ -160,6 +164,8 @@ export function typePredicateForType(t: rules.Type, varName: string, ctx: Contex
160164
return typePredicateForFloatType(t, varName);
161165
case 'int':
162166
return typePredicateForIntType(t, varName);
167+
case 'number':
168+
return typePredicateForNumberType(t, varName);
163169
case 'timestamp':
164170
return typePredicateForTimestampType(t, varName);
165171
case 'literal':

src/platforms/rules/_guards.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ export function isRulesDataType(t: Type): t is RulesDataType {
77
case 'bool':
88
case 'float':
99
case 'int':
10+
case 'number':
1011
case 'timestamp':
1112
case 'list':
1213
case 'map':

src/platforms/rules/_types.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,15 @@ export interface Int {
1818
readonly type: 'int';
1919
}
2020

21+
export interface Number {
22+
readonly type: 'number';
23+
}
24+
2125
export interface Timestamp {
2226
readonly type: 'timestamp';
2327
}
2428

25-
export type Primitive = Any | String | Bool | Float | Int | Timestamp;
29+
export type Primitive = Any | String | Bool | Float | Int | Number | Timestamp;
2630

2731
export interface Literal {
2832
readonly type: 'literal';
@@ -79,4 +83,4 @@ export interface Alias {
7983

8084
export type Type = Primitive | Literal | Enum | Tuple | List | Map | Object | DiscriminatedUnion | SimpleUnion | Alias;
8185

82-
export type RulesDataType = String | Bool | Float | Int | Timestamp | List | Map;
86+
export type RulesDataType = String | Bool | Float | Int | Number | Timestamp | List | Map;

0 commit comments

Comments
 (0)