@actions/expressions 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +95 -0
- package/dist/ast.d.ts +66 -0
- package/dist/ast.d.ts.map +1 -0
- package/dist/ast.js +87 -0
- package/dist/ast.js.map +1 -0
- package/dist/completion/descriptionDictionary.d.ts +15 -0
- package/dist/completion/descriptionDictionary.d.ts.map +1 -0
- package/dist/completion/descriptionDictionary.js +33 -0
- package/dist/completion/descriptionDictionary.js.map +1 -0
- package/dist/completion.d.ts +26 -0
- package/dist/completion.d.ts.map +1 -0
- package/dist/completion.js +124 -0
- package/dist/completion.js.map +1 -0
- package/dist/data/array.d.ts +13 -0
- package/dist/data/array.d.ts.map +1 -0
- package/dist/data/array.js +27 -0
- package/dist/data/array.js.map +1 -0
- package/dist/data/boolean.d.ts +10 -0
- package/dist/data/boolean.d.ts.map +1 -0
- package/dist/data/boolean.js +21 -0
- package/dist/data/boolean.js.map +1 -0
- package/dist/data/dictionary.d.ts +17 -0
- package/dist/data/dictionary.d.ts.map +1 -0
- package/dist/data/dictionary.js +48 -0
- package/dist/data/dictionary.js.map +1 -0
- package/dist/data/expressiondata.d.ts +28 -0
- package/dist/data/expressiondata.d.ts.map +1 -0
- package/dist/data/expressiondata.js +28 -0
- package/dist/data/expressiondata.js.map +1 -0
- package/dist/data/index.d.ts +10 -0
- package/dist/data/index.d.ts.map +1 -0
- package/dist/data/index.js +10 -0
- package/dist/data/index.js.map +1 -0
- package/dist/data/null.d.ts +8 -0
- package/dist/data/null.d.ts.map +1 -0
- package/dist/data/null.js +14 -0
- package/dist/data/null.js.map +1 -0
- package/dist/data/number.d.ts +10 -0
- package/dist/data/number.d.ts.map +1 -0
- package/dist/data/number.js +20 -0
- package/dist/data/number.js.map +1 -0
- package/dist/data/replacer.d.ts +7 -0
- package/dist/data/replacer.d.ts.map +1 -0
- package/dist/data/replacer.js +38 -0
- package/dist/data/replacer.js.map +1 -0
- package/dist/data/reviver.d.ts +8 -0
- package/dist/data/reviver.d.ts.map +1 -0
- package/dist/data/reviver.js +37 -0
- package/dist/data/reviver.js.map +1 -0
- package/dist/data/string.d.ts +10 -0
- package/dist/data/string.d.ts.map +1 -0
- package/dist/data/string.js +15 -0
- package/dist/data/string.js.map +1 -0
- package/dist/errors.d.ts +23 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +50 -0
- package/dist/errors.js.map +1 -0
- package/dist/evaluator.d.ts +26 -0
- package/dist/evaluator.d.ts.map +1 -0
- package/dist/evaluator.js +191 -0
- package/dist/evaluator.js.map +1 -0
- package/dist/filtered_array.d.ts +4 -0
- package/dist/filtered_array.d.ts.map +1 -0
- package/dist/filtered_array.js +4 -0
- package/dist/filtered_array.js.map +1 -0
- package/dist/funcs/contains.d.ts +3 -0
- package/dist/funcs/contains.d.ts.map +1 -0
- package/dist/funcs/contains.js +32 -0
- package/dist/funcs/contains.js.map +1 -0
- package/dist/funcs/endswith.d.ts +3 -0
- package/dist/funcs/endswith.d.ts.map +1 -0
- package/dist/funcs/endswith.js +22 -0
- package/dist/funcs/endswith.js.map +1 -0
- package/dist/funcs/format.d.ts +3 -0
- package/dist/funcs/format.d.ts.map +1 -0
- package/dist/funcs/format.js +95 -0
- package/dist/funcs/format.js.map +1 -0
- package/dist/funcs/fromjson.d.ts +3 -0
- package/dist/funcs/fromjson.d.ts.map +1 -0
- package/dist/funcs/fromjson.js +22 -0
- package/dist/funcs/fromjson.js.map +1 -0
- package/dist/funcs/info.d.ts +11 -0
- package/dist/funcs/info.d.ts.map +1 -0
- package/dist/funcs/info.js +2 -0
- package/dist/funcs/info.js.map +1 -0
- package/dist/funcs/join.d.ts +3 -0
- package/dist/funcs/join.d.ts.map +1 -0
- package/dist/funcs/join.js +28 -0
- package/dist/funcs/join.js.map +1 -0
- package/dist/funcs/startswith.d.ts +3 -0
- package/dist/funcs/startswith.d.ts.map +1 -0
- package/dist/funcs/startswith.js +22 -0
- package/dist/funcs/startswith.js.map +1 -0
- package/dist/funcs/tojson.d.ts +3 -0
- package/dist/funcs/tojson.d.ts.map +1 -0
- package/dist/funcs/tojson.js +12 -0
- package/dist/funcs/tojson.js.map +1 -0
- package/dist/funcs.d.ts +12 -0
- package/dist/funcs.d.ts.map +1 -0
- package/dist/funcs.js +43 -0
- package/dist/funcs.js.map +1 -0
- package/dist/idxHelper.d.ts +8 -0
- package/dist/idxHelper.d.ts.map +1 -0
- package/dist/idxHelper.js +19 -0
- package/dist/idxHelper.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -0
- package/dist/lexer.d.ts +68 -0
- package/dist/lexer.d.ts.map +1 -0
- package/dist/lexer.js +324 -0
- package/dist/lexer.js.map +1 -0
- package/dist/parser.d.ts +40 -0
- package/dist/parser.d.ts.map +1 -0
- package/dist/parser.js +284 -0
- package/dist/parser.js.map +1 -0
- package/dist/result.d.ts +9 -0
- package/dist/result.d.ts.map +1 -0
- package/dist/result.js +190 -0
- package/dist/result.js.map +1 -0
- package/package.json +64 -0
package/dist/parser.js
ADDED
|
@@ -0,0 +1,284 @@
|
|
|
1
|
+
import { Binary, ContextAccess, FunctionCall, Grouping, IndexAccess, Literal, Logical, Star, Unary } from "./ast";
|
|
2
|
+
import * as data from "./data";
|
|
3
|
+
import { ErrorType, ExpressionError, MAX_PARSER_DEPTH } from "./errors";
|
|
4
|
+
import { validateFunction } from "./funcs";
|
|
5
|
+
import { TokenType } from "./lexer";
|
|
6
|
+
export class Parser {
|
|
7
|
+
/**
|
|
8
|
+
* Constructs a new parser for the given tokens
|
|
9
|
+
*
|
|
10
|
+
* @param tokens Tokens to build a parse tree from
|
|
11
|
+
* @param extensionContexts Available context names
|
|
12
|
+
* @param extensionFunctions Available functions (beyond the built-in ones)
|
|
13
|
+
*/
|
|
14
|
+
constructor(tokens, extensionContexts, extensionFunctions) {
|
|
15
|
+
this.tokens = tokens;
|
|
16
|
+
this.offset = 0;
|
|
17
|
+
this.depth = 0;
|
|
18
|
+
this.extContexts = new Map();
|
|
19
|
+
this.extFuncs = new Map();
|
|
20
|
+
for (const contextName of extensionContexts) {
|
|
21
|
+
this.extContexts.set(contextName.toLowerCase(), true);
|
|
22
|
+
}
|
|
23
|
+
for (const { name, func } of extensionFunctions.map(x => ({
|
|
24
|
+
name: x.name,
|
|
25
|
+
func: x
|
|
26
|
+
}))) {
|
|
27
|
+
this.extFuncs.set(name.toLowerCase(), func);
|
|
28
|
+
}
|
|
29
|
+
this.context = {
|
|
30
|
+
allowUnknownKeywords: false,
|
|
31
|
+
extensionContexts: this.extContexts,
|
|
32
|
+
extensionFunctions: this.extFuncs
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
parse() {
|
|
36
|
+
// eslint-disable-next-line prefer-const
|
|
37
|
+
let result;
|
|
38
|
+
// No tokens
|
|
39
|
+
if (this.atEnd()) {
|
|
40
|
+
return result;
|
|
41
|
+
}
|
|
42
|
+
result = this.expression();
|
|
43
|
+
if (!this.atEnd()) {
|
|
44
|
+
throw this.buildError(ErrorType.ErrorUnexpectedSymbol, this.peek());
|
|
45
|
+
}
|
|
46
|
+
return result;
|
|
47
|
+
}
|
|
48
|
+
expression() {
|
|
49
|
+
this.incrDepth();
|
|
50
|
+
try {
|
|
51
|
+
return this.logicalOr();
|
|
52
|
+
}
|
|
53
|
+
finally {
|
|
54
|
+
this.decrDepth();
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
logicalOr() {
|
|
58
|
+
// && is higher precedence than ||
|
|
59
|
+
let expr = this.logicalAnd();
|
|
60
|
+
if (this.check(TokenType.OR)) {
|
|
61
|
+
// Track depth
|
|
62
|
+
this.incrDepth();
|
|
63
|
+
try {
|
|
64
|
+
const logical = new Logical(this.peek(), [expr]);
|
|
65
|
+
expr = logical;
|
|
66
|
+
while (this.match(TokenType.OR)) {
|
|
67
|
+
const right = this.logicalAnd();
|
|
68
|
+
logical.args.push(right);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
finally {
|
|
72
|
+
this.decrDepth();
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return expr;
|
|
76
|
+
}
|
|
77
|
+
logicalAnd() {
|
|
78
|
+
// == and != are higher precedence than &&
|
|
79
|
+
let expr = this.equality();
|
|
80
|
+
if (this.check(TokenType.AND)) {
|
|
81
|
+
// Track depth
|
|
82
|
+
this.incrDepth();
|
|
83
|
+
try {
|
|
84
|
+
const logical = new Logical(this.peek(), [expr]);
|
|
85
|
+
expr = logical;
|
|
86
|
+
while (this.match(TokenType.AND)) {
|
|
87
|
+
const right = this.equality();
|
|
88
|
+
logical.args.push(right);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
finally {
|
|
92
|
+
this.decrDepth();
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
return expr;
|
|
96
|
+
}
|
|
97
|
+
equality() {
|
|
98
|
+
// >, >=, <, <= are higher precedence than == and !=
|
|
99
|
+
let expr = this.comparison();
|
|
100
|
+
while (this.match(TokenType.BANG_EQUAL, TokenType.EQUAL_EQUAL)) {
|
|
101
|
+
const operator = this.previous();
|
|
102
|
+
const right = this.comparison();
|
|
103
|
+
expr = new Binary(expr, operator, right);
|
|
104
|
+
}
|
|
105
|
+
return expr;
|
|
106
|
+
}
|
|
107
|
+
comparison() {
|
|
108
|
+
// ! is higher precedence than >, >=, <, <=
|
|
109
|
+
let expr = this.unary();
|
|
110
|
+
while (this.match(TokenType.GREATER, TokenType.GREATER_EQUAL, TokenType.LESS, TokenType.LESS_EQUAL)) {
|
|
111
|
+
const operator = this.previous();
|
|
112
|
+
const right = this.unary();
|
|
113
|
+
expr = new Binary(expr, operator, right);
|
|
114
|
+
}
|
|
115
|
+
return expr;
|
|
116
|
+
}
|
|
117
|
+
unary() {
|
|
118
|
+
if (this.match(TokenType.BANG)) {
|
|
119
|
+
// Track depth
|
|
120
|
+
this.incrDepth();
|
|
121
|
+
const operator = this.previous();
|
|
122
|
+
const unary = this.unary();
|
|
123
|
+
try {
|
|
124
|
+
return new Unary(operator, unary);
|
|
125
|
+
}
|
|
126
|
+
finally {
|
|
127
|
+
this.decrDepth();
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
return this.index();
|
|
131
|
+
}
|
|
132
|
+
index() {
|
|
133
|
+
let expr = this.call();
|
|
134
|
+
let depthIncreased = 0;
|
|
135
|
+
if (expr instanceof Grouping || expr instanceof FunctionCall || expr instanceof ContextAccess) {
|
|
136
|
+
let cont = true;
|
|
137
|
+
while (cont) {
|
|
138
|
+
switch (true) {
|
|
139
|
+
case this.match(TokenType.LEFT_BRACKET): {
|
|
140
|
+
let indexExpr;
|
|
141
|
+
if (this.match(TokenType.STAR)) {
|
|
142
|
+
indexExpr = new Star();
|
|
143
|
+
}
|
|
144
|
+
else {
|
|
145
|
+
indexExpr = this.expression();
|
|
146
|
+
}
|
|
147
|
+
this.consume(TokenType.RIGHT_BRACKET, ErrorType.ErrorUnexpectedSymbol);
|
|
148
|
+
// Track depth
|
|
149
|
+
this.incrDepth();
|
|
150
|
+
depthIncreased++;
|
|
151
|
+
expr = new IndexAccess(expr, indexExpr);
|
|
152
|
+
break;
|
|
153
|
+
}
|
|
154
|
+
case this.match(TokenType.DOT):
|
|
155
|
+
// Track depth
|
|
156
|
+
this.incrDepth();
|
|
157
|
+
depthIncreased++;
|
|
158
|
+
if (this.match(TokenType.IDENTIFIER)) {
|
|
159
|
+
const property = this.previous();
|
|
160
|
+
expr = new IndexAccess(expr, new Literal(new data.StringData(property.lexeme), property));
|
|
161
|
+
}
|
|
162
|
+
else if (this.match(TokenType.STAR)) {
|
|
163
|
+
expr = new IndexAccess(expr, new Star());
|
|
164
|
+
}
|
|
165
|
+
else {
|
|
166
|
+
throw this.buildError(ErrorType.ErrorUnexpectedSymbol, this.peek());
|
|
167
|
+
}
|
|
168
|
+
break;
|
|
169
|
+
default:
|
|
170
|
+
cont = false;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
for (let i = 0; i < depthIncreased; i++) {
|
|
175
|
+
this.decrDepth();
|
|
176
|
+
}
|
|
177
|
+
return expr;
|
|
178
|
+
}
|
|
179
|
+
call() {
|
|
180
|
+
if (!this.check(TokenType.IDENTIFIER)) {
|
|
181
|
+
return this.primary();
|
|
182
|
+
}
|
|
183
|
+
const identifier = this.next();
|
|
184
|
+
if (!this.match(TokenType.LEFT_PAREN)) {
|
|
185
|
+
if (!this.extContexts.has(identifier.lexeme.toLowerCase())) {
|
|
186
|
+
throw this.buildError(ErrorType.ErrorUnrecognizedContext, identifier);
|
|
187
|
+
}
|
|
188
|
+
return new ContextAccess(identifier);
|
|
189
|
+
}
|
|
190
|
+
// Function call
|
|
191
|
+
const args = [];
|
|
192
|
+
// Arguments
|
|
193
|
+
while (!this.match(TokenType.RIGHT_PAREN)) {
|
|
194
|
+
const aexp = this.expression();
|
|
195
|
+
args.push(aexp);
|
|
196
|
+
if (!this.check(TokenType.RIGHT_PAREN)) {
|
|
197
|
+
this.consume(TokenType.COMMA, ErrorType.ErrorUnexpectedSymbol);
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
validateFunction(this.context, identifier, args.length);
|
|
201
|
+
return new FunctionCall(identifier, args);
|
|
202
|
+
}
|
|
203
|
+
primary() {
|
|
204
|
+
switch (true) {
|
|
205
|
+
case this.match(TokenType.FALSE):
|
|
206
|
+
return new Literal(new data.BooleanData(false), this.previous());
|
|
207
|
+
case this.match(TokenType.TRUE):
|
|
208
|
+
return new Literal(new data.BooleanData(true), this.previous());
|
|
209
|
+
case this.match(TokenType.NULL):
|
|
210
|
+
return new Literal(new data.Null(), this.previous());
|
|
211
|
+
case this.match(TokenType.NUMBER):
|
|
212
|
+
return new Literal(new data.NumberData(this.previous().value), this.previous());
|
|
213
|
+
case this.match(TokenType.STRING):
|
|
214
|
+
return new Literal(new data.StringData(this.previous().value), this.previous());
|
|
215
|
+
case this.match(TokenType.LEFT_PAREN): {
|
|
216
|
+
const expr = this.expression();
|
|
217
|
+
if (this.atEnd()) {
|
|
218
|
+
throw this.buildError(ErrorType.ErrorUnexpectedEndOfExpression, this.previous()); // Back up to get the last token before the EOF
|
|
219
|
+
}
|
|
220
|
+
this.consume(TokenType.RIGHT_PAREN, ErrorType.ErrorUnexpectedSymbol);
|
|
221
|
+
return new Grouping(expr);
|
|
222
|
+
}
|
|
223
|
+
case this.atEnd():
|
|
224
|
+
throw this.buildError(ErrorType.ErrorUnexpectedEndOfExpression, this.previous()); // Back up to get the last token before the EOF
|
|
225
|
+
}
|
|
226
|
+
throw this.buildError(ErrorType.ErrorUnexpectedSymbol, this.peek());
|
|
227
|
+
}
|
|
228
|
+
// match consumes the next token if it matches any of the given types
|
|
229
|
+
match(...tokenTypes) {
|
|
230
|
+
for (const tokenType of tokenTypes) {
|
|
231
|
+
if (this.check(tokenType)) {
|
|
232
|
+
this.next();
|
|
233
|
+
return true;
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
return false;
|
|
237
|
+
}
|
|
238
|
+
// check peeks whether the next token is of the given type
|
|
239
|
+
check(tokenType) {
|
|
240
|
+
if (this.atEnd()) {
|
|
241
|
+
return false;
|
|
242
|
+
}
|
|
243
|
+
return this.peek().type == tokenType;
|
|
244
|
+
}
|
|
245
|
+
// atEnd peeks whether the next token is EOF
|
|
246
|
+
atEnd() {
|
|
247
|
+
return this.peek().type == TokenType.EOF;
|
|
248
|
+
}
|
|
249
|
+
next() {
|
|
250
|
+
if (!this.atEnd()) {
|
|
251
|
+
this.offset++;
|
|
252
|
+
}
|
|
253
|
+
return this.previous();
|
|
254
|
+
}
|
|
255
|
+
peek() {
|
|
256
|
+
return this.tokens[this.offset];
|
|
257
|
+
}
|
|
258
|
+
// previous returns the previous token
|
|
259
|
+
previous() {
|
|
260
|
+
return this.tokens[this.offset - 1];
|
|
261
|
+
}
|
|
262
|
+
// consume attempts to consume the next token if it matches the given type. It returns an error of
|
|
263
|
+
// the given ParseErrorKind otherwise.
|
|
264
|
+
consume(tokenType, errorType) {
|
|
265
|
+
if (this.check(tokenType)) {
|
|
266
|
+
this.next();
|
|
267
|
+
return;
|
|
268
|
+
}
|
|
269
|
+
throw this.buildError(errorType, this.peek());
|
|
270
|
+
}
|
|
271
|
+
incrDepth() {
|
|
272
|
+
this.depth++;
|
|
273
|
+
if (this.depth > MAX_PARSER_DEPTH) {
|
|
274
|
+
throw this.buildError(ErrorType.ErrorExceededMaxDepth, this.peek());
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
decrDepth() {
|
|
278
|
+
this.depth--;
|
|
279
|
+
}
|
|
280
|
+
buildError(errType, token) {
|
|
281
|
+
return new ExpressionError(errType, token);
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
//# sourceMappingURL=parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"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"}
|
package/dist/result.d.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import * as data from "./data";
|
|
2
|
+
export declare function falsy(d: data.ExpressionData): boolean;
|
|
3
|
+
export declare function truthy(d: data.ExpressionData): boolean;
|
|
4
|
+
export declare function coerceTypes(li: data.ExpressionData, ri: data.ExpressionData): [data.ExpressionData, data.ExpressionData];
|
|
5
|
+
export declare function equals(lhs: data.ExpressionData, rhs: data.ExpressionData): boolean;
|
|
6
|
+
export declare function greaterThan(lhs: data.ExpressionData, rhs: data.ExpressionData): boolean;
|
|
7
|
+
export declare function lessThan(lhs: data.ExpressionData, rhs: data.ExpressionData): boolean;
|
|
8
|
+
export declare function toUpperSpecial(s: string): string;
|
|
9
|
+
//# sourceMappingURL=result.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"result.d.ts","sourceRoot":"","sources":["../src/result.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,QAAQ,CAAC;AAE/B,wBAAgB,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,cAAc,GAAG,OAAO,CAiBrD;AAED,wBAAgB,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,cAAc,GAAG,OAAO,CAEtD;AAID,wBAAgB,WAAW,CACzB,EAAE,EAAE,IAAI,CAAC,cAAc,EACvB,EAAE,EAAE,IAAI,CAAC,cAAc,GACtB,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,cAAc,CAAC,CA4C5C;AAID,wBAAgB,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,cAAc,EAAE,GAAG,EAAE,IAAI,CAAC,cAAc,GAAG,OAAO,CA6ClF;AAID,wBAAgB,WAAW,CAAC,GAAG,EAAE,IAAI,CAAC,cAAc,EAAE,GAAG,EAAE,IAAI,CAAC,cAAc,GAAG,OAAO,CAqCvF;AAID,wBAAgB,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,cAAc,EAAE,GAAG,EAAE,IAAI,CAAC,cAAc,GAAG,OAAO,CAqCpF;AAGD,wBAAgB,cAAc,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAoBhD"}
|
package/dist/result.js
ADDED
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
import * as data from "./data";
|
|
2
|
+
export function falsy(d) {
|
|
3
|
+
switch (d.kind) {
|
|
4
|
+
case data.Kind.Null:
|
|
5
|
+
return true;
|
|
6
|
+
case data.Kind.Boolean:
|
|
7
|
+
return !d.value;
|
|
8
|
+
case data.Kind.Number: {
|
|
9
|
+
const dv = d.value;
|
|
10
|
+
return dv === 0 || isNaN(dv);
|
|
11
|
+
}
|
|
12
|
+
case data.Kind.String:
|
|
13
|
+
return d.value.length === 0;
|
|
14
|
+
}
|
|
15
|
+
return false;
|
|
16
|
+
}
|
|
17
|
+
export function truthy(d) {
|
|
18
|
+
return !falsy(d);
|
|
19
|
+
}
|
|
20
|
+
// Similar to the Javascript abstract equality comparison algorithm http://www.ecma-international.org/ecma-262/5.1/#sec-11.9.3.
|
|
21
|
+
// Except objects are not coerced to primitives.
|
|
22
|
+
export function coerceTypes(li, ri) {
|
|
23
|
+
let lv = li;
|
|
24
|
+
let rv = ri;
|
|
25
|
+
// Do nothing, same kind
|
|
26
|
+
if (li.kind === ri.kind) {
|
|
27
|
+
return [lv, rv];
|
|
28
|
+
}
|
|
29
|
+
switch (li.kind) {
|
|
30
|
+
// Number, String
|
|
31
|
+
case data.Kind.Number:
|
|
32
|
+
if (ri.kind === data.Kind.String) {
|
|
33
|
+
rv = new data.NumberData(ri.number());
|
|
34
|
+
return [lv, rv];
|
|
35
|
+
}
|
|
36
|
+
break;
|
|
37
|
+
// String, Number
|
|
38
|
+
case data.Kind.String:
|
|
39
|
+
if (ri.kind === data.Kind.Number) {
|
|
40
|
+
lv = new data.NumberData(li.number());
|
|
41
|
+
return [lv, rv];
|
|
42
|
+
}
|
|
43
|
+
break;
|
|
44
|
+
// Boolean|Null, Any
|
|
45
|
+
case data.Kind.Null:
|
|
46
|
+
case data.Kind.Boolean:
|
|
47
|
+
lv = new data.NumberData(li.number());
|
|
48
|
+
return coerceTypes(lv, rv);
|
|
49
|
+
}
|
|
50
|
+
// Any, Boolean|Null
|
|
51
|
+
switch (ri.kind) {
|
|
52
|
+
case data.Kind.Null:
|
|
53
|
+
case data.Kind.Boolean:
|
|
54
|
+
rv = new data.NumberData(ri.number());
|
|
55
|
+
return coerceTypes(lv, rv);
|
|
56
|
+
}
|
|
57
|
+
return [lv, rv];
|
|
58
|
+
}
|
|
59
|
+
// Similar to the Javascript abstract equality comparison algorithm http://www.ecma-international.org/ecma-262/5.1/#sec-11.9.3.
|
|
60
|
+
// Except string comparison is OrdinalIgnoreCase, and objects are not coerced to primitives.
|
|
61
|
+
export function equals(lhs, rhs) {
|
|
62
|
+
const [lv, rv] = coerceTypes(lhs, rhs);
|
|
63
|
+
if (lv.kind != rv.kind) {
|
|
64
|
+
return false;
|
|
65
|
+
}
|
|
66
|
+
switch (lv.kind) {
|
|
67
|
+
// Null, Null
|
|
68
|
+
case data.Kind.Null:
|
|
69
|
+
return true;
|
|
70
|
+
// Number, Number
|
|
71
|
+
case data.Kind.Number: {
|
|
72
|
+
const ld = lv.value;
|
|
73
|
+
const rd = rv.value;
|
|
74
|
+
if (isNaN(ld) || isNaN(rd)) {
|
|
75
|
+
return false;
|
|
76
|
+
}
|
|
77
|
+
return ld == rd;
|
|
78
|
+
}
|
|
79
|
+
// String, String
|
|
80
|
+
case data.Kind.String: {
|
|
81
|
+
const ls = lv.value;
|
|
82
|
+
const rs = rv.value;
|
|
83
|
+
return toUpperSpecial(ls) === toUpperSpecial(rs);
|
|
84
|
+
}
|
|
85
|
+
// Boolean, Boolean
|
|
86
|
+
case data.Kind.Boolean: {
|
|
87
|
+
const lb = lv.value;
|
|
88
|
+
const rb = rv.value;
|
|
89
|
+
return lb == rb;
|
|
90
|
+
}
|
|
91
|
+
// Object, Object
|
|
92
|
+
case data.Kind.Dictionary:
|
|
93
|
+
case data.Kind.Array:
|
|
94
|
+
// Check reference equality
|
|
95
|
+
return lv === rv;
|
|
96
|
+
}
|
|
97
|
+
return false;
|
|
98
|
+
}
|
|
99
|
+
// Similar to the Javascript abstract equality comparison algorithm http://www.ecma-international.org/ecma-262/5.1/#sec-11.9.3.
|
|
100
|
+
// Except string comparison is OrdinalIgnoreCase, and objects are not coerced to primitives.
|
|
101
|
+
export function greaterThan(lhs, rhs) {
|
|
102
|
+
const [lv, rv] = coerceTypes(lhs, rhs);
|
|
103
|
+
if (lv.kind != rv.kind) {
|
|
104
|
+
return false;
|
|
105
|
+
}
|
|
106
|
+
switch (lv.kind) {
|
|
107
|
+
// Number, Number
|
|
108
|
+
case data.Kind.Number: {
|
|
109
|
+
const lf = lv.value;
|
|
110
|
+
const rf = rv.value;
|
|
111
|
+
if (isNaN(lf) || isNaN(rf)) {
|
|
112
|
+
return false;
|
|
113
|
+
}
|
|
114
|
+
return lf > rf;
|
|
115
|
+
}
|
|
116
|
+
// String, String
|
|
117
|
+
case data.Kind.String: {
|
|
118
|
+
let ls = lv.value;
|
|
119
|
+
let rs = rv.value;
|
|
120
|
+
ls = toUpperSpecial(ls);
|
|
121
|
+
rs = toUpperSpecial(rs);
|
|
122
|
+
return ls > rs;
|
|
123
|
+
}
|
|
124
|
+
// Boolean, Boolean
|
|
125
|
+
case data.Kind.Boolean: {
|
|
126
|
+
const lb = lv.value;
|
|
127
|
+
const rb = rv.value;
|
|
128
|
+
return lb && !rb;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
return false;
|
|
132
|
+
}
|
|
133
|
+
// Similar to the Javascript abstract equality comparison algorithm http://www.ecma-international.org/ecma-262/5.1/#sec-11.9.3.
|
|
134
|
+
// Except string comparison is OrdinalIgnoreCase, and objects are not coerced to primitives.
|
|
135
|
+
export function lessThan(lhs, rhs) {
|
|
136
|
+
const [lv, rv] = coerceTypes(lhs, rhs);
|
|
137
|
+
if (lv.kind != rv.kind) {
|
|
138
|
+
return false;
|
|
139
|
+
}
|
|
140
|
+
switch (lv.kind) {
|
|
141
|
+
// Number, Number
|
|
142
|
+
case data.Kind.Number: {
|
|
143
|
+
const lf = lv.value;
|
|
144
|
+
const rf = rv.value;
|
|
145
|
+
if (isNaN(lf) || isNaN(rf)) {
|
|
146
|
+
return false;
|
|
147
|
+
}
|
|
148
|
+
return lf < rf;
|
|
149
|
+
}
|
|
150
|
+
// String, String
|
|
151
|
+
case data.Kind.String: {
|
|
152
|
+
let ls = lv.value;
|
|
153
|
+
let rs = rv.value;
|
|
154
|
+
ls = toUpperSpecial(ls);
|
|
155
|
+
rs = toUpperSpecial(rs);
|
|
156
|
+
return ls < rs;
|
|
157
|
+
}
|
|
158
|
+
// Boolean, Boolean
|
|
159
|
+
case data.Kind.Boolean: {
|
|
160
|
+
const lb = lv.value;
|
|
161
|
+
const rb = rv.value;
|
|
162
|
+
return !lb && rb;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
return false;
|
|
166
|
+
}
|
|
167
|
+
// Do not toUpper the small-dotless-ı
|
|
168
|
+
export function toUpperSpecial(s) {
|
|
169
|
+
const sb = [];
|
|
170
|
+
let i = 0;
|
|
171
|
+
const len = s.length;
|
|
172
|
+
let found = s.indexOf("ı");
|
|
173
|
+
while (i < len) {
|
|
174
|
+
if (i < found) {
|
|
175
|
+
sb.push(s.substring(i, found).toUpperCase()); // Append upper segment
|
|
176
|
+
i = found;
|
|
177
|
+
}
|
|
178
|
+
else if (i == found) {
|
|
179
|
+
sb.push(s.substring(i, i + 1));
|
|
180
|
+
i += 1;
|
|
181
|
+
found = s.indexOf("ı", i);
|
|
182
|
+
}
|
|
183
|
+
else {
|
|
184
|
+
sb.push(s.substring(i).toUpperCase()); // Append upper remaining
|
|
185
|
+
break;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
return sb.join("");
|
|
189
|
+
}
|
|
190
|
+
//# sourceMappingURL=result.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"result.js","sourceRoot":"","sources":["../src/result.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@actions/expressions",
|
|
3
|
+
"version": "0.2.0",
|
|
4
|
+
"license": "MIT",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"source": "./src/index.ts",
|
|
7
|
+
"publishConfig": {
|
|
8
|
+
"access": "public"
|
|
9
|
+
},
|
|
10
|
+
"exports": {
|
|
11
|
+
".": {
|
|
12
|
+
"import": "./dist/index.js"
|
|
13
|
+
},
|
|
14
|
+
"./*": {
|
|
15
|
+
"import": "./dist/*.js"
|
|
16
|
+
}
|
|
17
|
+
},
|
|
18
|
+
"typesVersions": {
|
|
19
|
+
"*": {
|
|
20
|
+
".": [
|
|
21
|
+
"dist/index.d.ts"
|
|
22
|
+
],
|
|
23
|
+
"*": [
|
|
24
|
+
"dist/*.d.ts"
|
|
25
|
+
]
|
|
26
|
+
}
|
|
27
|
+
},
|
|
28
|
+
"repository": {
|
|
29
|
+
"type": "git",
|
|
30
|
+
"url": "https://github.com/actions/languageservices"
|
|
31
|
+
},
|
|
32
|
+
"scripts": {
|
|
33
|
+
"build": "tsc --build tsconfig.build.json",
|
|
34
|
+
"clean": "rimraf dist",
|
|
35
|
+
"format": "prettier --write '**/*.ts'",
|
|
36
|
+
"format-check": "prettier --check '**/*.ts'",
|
|
37
|
+
"lint": "eslint 'src/**/*.ts'",
|
|
38
|
+
"lint-fix": "eslint --fix 'src/**/*.ts'",
|
|
39
|
+
"prepublishOnly": "npm run build && npm run test",
|
|
40
|
+
"test": "NODE_OPTIONS=\"--experimental-vm-modules\" jest",
|
|
41
|
+
"test-watch": "NODE_OPTIONS=\"--experimental-vm-modules\" jest --watch",
|
|
42
|
+
"watch": "tsc --build tsconfig.build.json --watch"
|
|
43
|
+
},
|
|
44
|
+
"engines": {
|
|
45
|
+
"node": ">= 16.15"
|
|
46
|
+
},
|
|
47
|
+
"files": [
|
|
48
|
+
"dist/**/*"
|
|
49
|
+
],
|
|
50
|
+
"devDependencies": {
|
|
51
|
+
"@types/jest": "^29.0.3",
|
|
52
|
+
"@typescript-eslint/eslint-plugin": "^5.56.0",
|
|
53
|
+
"@typescript-eslint/parser": "^5.56.0",
|
|
54
|
+
"eslint": "^8.36.0",
|
|
55
|
+
"eslint-config-prettier": "^8.8.0",
|
|
56
|
+
"eslint-plugin-prettier": "^4.2.1",
|
|
57
|
+
"jest": "^29.0.3",
|
|
58
|
+
"prettier": "^2.8.3",
|
|
59
|
+
"rimraf": "^3.0.2",
|
|
60
|
+
"ts-jest": "^29.0.3",
|
|
61
|
+
"typescript": "^4.7.4"
|
|
62
|
+
},
|
|
63
|
+
"gitHead": "b79d0e8e4706e94ce93ca367f47bc4207c8dedfa"
|
|
64
|
+
}
|