@angular-wave/angular.ts 0.0.59 → 0.0.61
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/README.md +3 -0
- package/dist/angular-ts.esm.js +2 -2
- package/dist/angular-ts.umd.js +2 -2
- package/package.json +5 -1
- package/src/core/parser/lexer.html +18 -0
- package/src/core/parser/lexer.spec.js +300 -0
- package/src/core/parser/parse.js +19 -0
- package/src/core/parser/parser.js +1 -1
- package/src/core/parser/parser.test.js +19 -0
- package/src/core/q/q.js +46 -289
- package/src/core/q/q.md +229 -0
- package/src/core/sanitize/sanitize-uri.js +2 -3
- package/src/core/scope/scope.js +18 -8
- package/src/directive/if/if.js +6 -1
- package/src/filters/limit-to.js +5 -2
- package/src/loader.js +1 -5
- package/src/router/params/param-type.js +2 -1
- package/src/router/state/views.js +3 -0
- package/src/router/transition/reject-factory.js +1 -0
- package/src/router/url/url-rule.js +1 -1
- package/src/router/url/url-service.js +4 -4
- package/src/services/http/http.js +7 -5
- package/src/services/template-request.js +2 -7
- package/src/shared/common.js +1 -1
- package/src/shared/utils.js +1 -1
- package/src/types.js +9 -1
- package/types/core/parser/parse.d.ts +3 -4
- package/types/core/parser/parser.d.ts +1 -1
- package/types/core/q/q.d.ts +2 -2
- package/types/core/sanitize/sanitize-uri.d.ts +4 -5
- package/types/core/scope/scope.d.ts +19 -7
- package/types/loader.d.ts +0 -4
- package/types/router/params/param-type.d.ts +2 -1
- package/types/router/state/views.d.ts +2 -0
- package/types/router/transition/reject-factory.d.ts +1 -0
- package/types/router/url/url-rule.d.ts +0 -1
- package/types/router/url/url-service.d.ts +7 -7
- package/types/services/template-request.d.ts +4 -9
- package/types/types.d.ts +6 -1
- package/src/core/parser/parse.test.js +0 -12
- package/types-back/README.md +0 -2
- package/types-back/angular.d.ts +0 -146
- package/types-back/index.d.ts +0 -2126
- package/types-back/jqlite.d.ts +0 -374
- package/types-back/router/core/common/common.d.ts +0 -416
- package/types-back/router/core/common/coreservices.d.ts +0 -77
- package/types-back/router/core/common/glob.d.ts +0 -60
- package/types-back/router/core/common/hof.d.ts +0 -168
- package/types-back/router/core/common/index.d.ts +0 -8
- package/types-back/router/core/common/predicates.d.ts +0 -25
- package/types-back/router/core/common/queue.d.ts +0 -15
- package/types-back/router/core/common/safeConsole.d.ts +0 -5
- package/types-back/router/core/common/strings.d.ts +0 -66
- package/types-back/router/core/common/trace.d.ts +0 -126
- package/types-back/router/core/globals.d.ts +0 -43
- package/types-back/router/core/hooks/coreResolvables.d.ts +0 -6
- package/types-back/router/core/hooks/ignoredTransition.d.ts +0 -4
- package/types-back/router/core/hooks/invalidTransition.d.ts +0 -4
- package/types-back/router/core/hooks/lazyLoad.d.ts +0 -17
- package/types-back/router/core/hooks/onEnterExitRetain.d.ts +0 -10
- package/types-back/router/core/hooks/redirectTo.d.ts +0 -4
- package/types-back/router/core/hooks/resolve.d.ts +0 -11
- package/types-back/router/core/hooks/updateGlobals.d.ts +0 -4
- package/types-back/router/core/hooks/url.d.ts +0 -4
- package/types-back/router/core/hooks/views.d.ts +0 -7
- package/types-back/router/core/index.d.ts +0 -11
- package/types-back/router/core/interface.d.ts +0 -91
- package/types-back/router/core/params/index.d.ts +0 -12
- package/types-back/router/core/params/interface.d.ts +0 -606
- package/types-back/router/core/params/param.d.ts +0 -77
- package/types-back/router/core/params/paramType.d.ts +0 -65
- package/types-back/router/core/params/paramTypes.d.ts +0 -193
- package/types-back/router/core/params/stateParams.d.ts +0 -15
- package/types-back/router/core/path/index.d.ts +0 -2
- package/types-back/router/core/path/pathNode.d.ts +0 -60
- package/types-back/router/core/path/pathUtils.d.ts +0 -105
- package/types-back/router/core/resolve/index.d.ts +0 -3
- package/types-back/router/core/resolve/interface.d.ts +0 -210
- package/types-back/router/core/resolve/resolvable.d.ts +0 -75
- package/types-back/router/core/resolve/resolveContext.d.ts +0 -97
- package/types-back/router/core/router.d.ts +0 -57
- package/types-back/router/core/state/index.d.ts +0 -28
- package/types-back/router/core/state/interface.d.ts +0 -732
- package/types-back/router/core/state/stateBuilder.d.ts +0 -107
- package/types-back/router/core/state/stateMatcher.d.ts +0 -13
- package/types-back/router/core/state/stateObject.d.ts +0 -170
- package/types-back/router/core/state/stateQueueManager.d.ts +0 -27
- package/types-back/router/core/state/stateRegistry.d.ts +0 -138
- package/types-back/router/core/state/stateService.d.ts +0 -386
- package/types-back/router/core/state/targetState.d.ts +0 -105
- package/types-back/router/core/transition/hookBuilder.d.ts +0 -49
- package/types-back/router/core/transition/hookRegistry.d.ts +0 -115
- package/types-back/router/core/transition/index.d.ts +0 -20
- package/types-back/router/core/transition/interface.d.ts +0 -862
- package/types-back/router/core/transition/rejectFactory.d.ts +0 -103
- package/types-back/router/core/transition/transition.d.ts +0 -575
- package/types-back/router/core/transition/transitionEventType.d.ts +0 -26
- package/types-back/router/core/transition/transitionHook.d.ts +0 -96
- package/types-back/router/core/transition/transitionService.d.ts +0 -253
- package/types-back/router/core/url/index.d.ts +0 -8
- package/types-back/router/core/url/interface.d.ts +0 -169
- package/types-back/router/core/url/urlConfig.d.ts +0 -144
- package/types-back/router/core/url/urlMatcher.d.ts +0 -185
- package/types-back/router/core/url/urlMatcherFactory.d.ts +0 -56
- package/types-back/router/core/url/urlRouter.d.ts +0 -101
- package/types-back/router/core/url/urlRule.d.ts +0 -143
- package/types-back/router/core/url/urlRules.d.ts +0 -251
- package/types-back/router/core/url/urlService.d.ts +0 -205
- package/types-back/router/core/view/index.d.ts +0 -2
- package/types-back/router/core/view/interface.d.ts +0 -46
- package/types-back/router/core/view/view.d.ts +0 -176
- package/types-back/router/directives/viewDirective.d.ts +0 -144
- package/types-back/router/index.d.ts +0 -17
- package/types-back/router/interface.d.ts +0 -500
- package/types-back/router/legacy/resolveService.d.ts +0 -47
- package/types-back/router/legacy/stateEvents.d.ts +0 -124
- package/types-back/router/services.d.ts +0 -15
- package/types-back/router/stateFilters.d.ts +0 -10
- package/types-back/router/stateProvider.d.ts +0 -258
- package/types-back/router/statebuilders/onEnterExitRetain.d.ts +0 -13
- package/types-back/router/statebuilders/views.d.ts +0 -53
- package/types-back/router/templateFactory.d.ts +0 -104
- package/types-back/router/viewScroll.d.ts +0 -9
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@angular-wave/angular.ts",
|
|
3
3
|
"license": "MIT",
|
|
4
|
-
"version": "0.0.
|
|
4
|
+
"version": "0.0.61",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/angular-ts.esm.js",
|
|
7
7
|
"browser": "dist/angular-ts.umd.js",
|
|
@@ -9,6 +9,10 @@
|
|
|
9
9
|
"type": "git",
|
|
10
10
|
"url": "https://github.com/Angular-Wave/angular.ts.git"
|
|
11
11
|
},
|
|
12
|
+
"keywords": [
|
|
13
|
+
"AngularJS",
|
|
14
|
+
"AngularTS"
|
|
15
|
+
],
|
|
12
16
|
"engines": {
|
|
13
17
|
"node": ">=18.18.2"
|
|
14
18
|
},
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html>
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8" />
|
|
5
|
+
<title>AngularTS Test Runner</title>
|
|
6
|
+
|
|
7
|
+
<link rel="shortcut icon" type="image/png" href="/images/favicon.ico" />
|
|
8
|
+
<link rel="stylesheet" href="/jasmine/jasmine-5.1.2/jasmine.css" />
|
|
9
|
+
<script src="/jasmine/jasmine-5.1.2/jasmine.js"></script>
|
|
10
|
+
<script src="/jasmine/jasmine-5.1.2/jasmine-html.js"></script>
|
|
11
|
+
<script src="/jasmine/jasmine-5.1.2/boot0.js"></script>
|
|
12
|
+
<script src="/jasmine/jasmine-5.1.2/boot1.js"></script>
|
|
13
|
+
<script type="module" src="/src/core/parser/lexer.spec.js"></script>
|
|
14
|
+
</head>
|
|
15
|
+
<body>
|
|
16
|
+
<div id="dummy"></div>
|
|
17
|
+
</body>
|
|
18
|
+
</html>
|
|
@@ -0,0 +1,300 @@
|
|
|
1
|
+
import { Lexer } from "./lexer";
|
|
2
|
+
import { publishExternalAPI } from "../../public";
|
|
3
|
+
import { createInjector } from "../../injector";
|
|
4
|
+
|
|
5
|
+
describe("lexer", () => {
|
|
6
|
+
let $rootScope;
|
|
7
|
+
let $parse;
|
|
8
|
+
let logs = [];
|
|
9
|
+
|
|
10
|
+
beforeEach(() => {
|
|
11
|
+
publishExternalAPI().decorator("$exceptionHandler", function () {
|
|
12
|
+
return (exception, cause) => {
|
|
13
|
+
logs.push(exception);
|
|
14
|
+
console.error(exception, cause);
|
|
15
|
+
};
|
|
16
|
+
});
|
|
17
|
+
let injector = createInjector(["ng"]);
|
|
18
|
+
$parse = injector.get("$parse");
|
|
19
|
+
$rootScope = injector.get("$rootScope");
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
describe("lexer", () => {
|
|
23
|
+
let lex;
|
|
24
|
+
|
|
25
|
+
beforeEach(() => {
|
|
26
|
+
lex = function () {
|
|
27
|
+
const lexer = new Lexer({});
|
|
28
|
+
return lexer.lex.apply(lexer, arguments);
|
|
29
|
+
};
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
it("should only match number chars with isNumber", () => {
|
|
33
|
+
expect(Lexer.prototype.isNumber("0")).toBe(true);
|
|
34
|
+
expect(Lexer.prototype.isNumber("")).toBeFalsy();
|
|
35
|
+
expect(Lexer.prototype.isNumber(" ")).toBeFalsy();
|
|
36
|
+
expect(Lexer.prototype.isNumber(0)).toBeFalsy();
|
|
37
|
+
expect(Lexer.prototype.isNumber(false)).toBeFalsy();
|
|
38
|
+
expect(Lexer.prototype.isNumber(true)).toBeFalsy();
|
|
39
|
+
expect(Lexer.prototype.isNumber(undefined)).toBeFalsy();
|
|
40
|
+
expect(Lexer.prototype.isNumber(null)).toBeFalsy();
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
it("should tokenize a string", () => {
|
|
44
|
+
const tokens = lex("a.bc[22]+1.3|f:'a\\'c':\"d\\\"e\"");
|
|
45
|
+
let i = 0;
|
|
46
|
+
expect(tokens[i].index).toEqual(0);
|
|
47
|
+
expect(tokens[i].text).toEqual("a");
|
|
48
|
+
|
|
49
|
+
i++;
|
|
50
|
+
expect(tokens[i].index).toEqual(1);
|
|
51
|
+
expect(tokens[i].text).toEqual(".");
|
|
52
|
+
|
|
53
|
+
i++;
|
|
54
|
+
expect(tokens[i].index).toEqual(2);
|
|
55
|
+
expect(tokens[i].text).toEqual("bc");
|
|
56
|
+
|
|
57
|
+
i++;
|
|
58
|
+
expect(tokens[i].index).toEqual(4);
|
|
59
|
+
expect(tokens[i].text).toEqual("[");
|
|
60
|
+
|
|
61
|
+
i++;
|
|
62
|
+
expect(tokens[i].index).toEqual(5);
|
|
63
|
+
expect(tokens[i].text).toEqual("22");
|
|
64
|
+
expect(tokens[i].value).toEqual(22);
|
|
65
|
+
expect(tokens[i].constant).toEqual(true);
|
|
66
|
+
|
|
67
|
+
i++;
|
|
68
|
+
expect(tokens[i].index).toEqual(7);
|
|
69
|
+
expect(tokens[i].text).toEqual("]");
|
|
70
|
+
|
|
71
|
+
i++;
|
|
72
|
+
expect(tokens[i].index).toEqual(8);
|
|
73
|
+
expect(tokens[i].text).toEqual("+");
|
|
74
|
+
|
|
75
|
+
i++;
|
|
76
|
+
expect(tokens[i].index).toEqual(9);
|
|
77
|
+
expect(tokens[i].text).toEqual("1.3");
|
|
78
|
+
expect(tokens[i].value).toEqual(1.3);
|
|
79
|
+
expect(tokens[i].constant).toEqual(true);
|
|
80
|
+
|
|
81
|
+
i++;
|
|
82
|
+
expect(tokens[i].index).toEqual(12);
|
|
83
|
+
expect(tokens[i].text).toEqual("|");
|
|
84
|
+
|
|
85
|
+
i++;
|
|
86
|
+
expect(tokens[i].index).toEqual(13);
|
|
87
|
+
expect(tokens[i].text).toEqual("f");
|
|
88
|
+
|
|
89
|
+
i++;
|
|
90
|
+
expect(tokens[i].index).toEqual(14);
|
|
91
|
+
expect(tokens[i].text).toEqual(":");
|
|
92
|
+
|
|
93
|
+
i++;
|
|
94
|
+
expect(tokens[i].index).toEqual(15);
|
|
95
|
+
expect(tokens[i].value).toEqual("a'c");
|
|
96
|
+
|
|
97
|
+
i++;
|
|
98
|
+
expect(tokens[i].index).toEqual(21);
|
|
99
|
+
expect(tokens[i].text).toEqual(":");
|
|
100
|
+
|
|
101
|
+
i++;
|
|
102
|
+
expect(tokens[i].index).toEqual(22);
|
|
103
|
+
expect(tokens[i].value).toEqual('d"e');
|
|
104
|
+
});
|
|
105
|
+
|
|
106
|
+
it("should tokenize identifiers with spaces around dots the same as without spaces", () => {
|
|
107
|
+
function getText(t) {
|
|
108
|
+
return t.text;
|
|
109
|
+
}
|
|
110
|
+
const spaces = lex("foo. bar . baz").map(getText);
|
|
111
|
+
const noSpaces = lex("foo.bar.baz").map(getText);
|
|
112
|
+
|
|
113
|
+
expect(spaces).toEqual(noSpaces);
|
|
114
|
+
});
|
|
115
|
+
|
|
116
|
+
it("should use callback functions to know when an identifier is valid", () => {
|
|
117
|
+
function getText(t) {
|
|
118
|
+
return t.text;
|
|
119
|
+
}
|
|
120
|
+
const isIdentifierStart = jasmine.createSpy("start");
|
|
121
|
+
const isIdentifierContinue = jasmine.createSpy("continue");
|
|
122
|
+
isIdentifierStart.and.returnValue(true);
|
|
123
|
+
const lex = new Lexer({
|
|
124
|
+
isIdentifierStart,
|
|
125
|
+
isIdentifierContinue,
|
|
126
|
+
});
|
|
127
|
+
|
|
128
|
+
isIdentifierContinue.and.returnValue(true);
|
|
129
|
+
let tokens = lex.lex("πΣε").map(getText);
|
|
130
|
+
expect(tokens).toEqual(["πΣε"]);
|
|
131
|
+
|
|
132
|
+
isIdentifierContinue.and.returnValue(false);
|
|
133
|
+
tokens = lex.lex("πΣε").map(getText);
|
|
134
|
+
expect(tokens).toEqual(["π", "Σ", "ε"]);
|
|
135
|
+
});
|
|
136
|
+
|
|
137
|
+
it("should send the unicode characters and code points", () => {
|
|
138
|
+
function getText(t) {
|
|
139
|
+
return t.text;
|
|
140
|
+
}
|
|
141
|
+
const isIdentifierStart = jasmine.createSpy("start");
|
|
142
|
+
const isIdentifierContinue = jasmine.createSpy("continue");
|
|
143
|
+
isIdentifierStart.and.returnValue(true);
|
|
144
|
+
isIdentifierContinue.and.returnValue(true);
|
|
145
|
+
const lex = new Lexer({
|
|
146
|
+
isIdentifierStart,
|
|
147
|
+
isIdentifierContinue,
|
|
148
|
+
});
|
|
149
|
+
const tokens = lex.lex("\uD801\uDC37\uD852\uDF62\uDBFF\uDFFF");
|
|
150
|
+
expect(isIdentifierStart).toHaveBeenCalledTimes(1);
|
|
151
|
+
expect(isIdentifierStart.calls.argsFor(0)).toEqual([
|
|
152
|
+
"\uD801\uDC37",
|
|
153
|
+
0x10437,
|
|
154
|
+
]);
|
|
155
|
+
expect(isIdentifierContinue).toHaveBeenCalledTimes(2);
|
|
156
|
+
expect(isIdentifierContinue.calls.argsFor(0)).toEqual([
|
|
157
|
+
"\uD852\uDF62",
|
|
158
|
+
0x24b62,
|
|
159
|
+
]);
|
|
160
|
+
expect(isIdentifierContinue.calls.argsFor(1)).toEqual([
|
|
161
|
+
"\uDBFF\uDFFF",
|
|
162
|
+
0x10ffff,
|
|
163
|
+
]);
|
|
164
|
+
});
|
|
165
|
+
|
|
166
|
+
it("should tokenize undefined", () => {
|
|
167
|
+
const tokens = lex("undefined");
|
|
168
|
+
const i = 0;
|
|
169
|
+
expect(tokens[i].index).toEqual(0);
|
|
170
|
+
expect(tokens[i].text).toEqual("undefined");
|
|
171
|
+
});
|
|
172
|
+
|
|
173
|
+
it("should tokenize quoted string", () => {
|
|
174
|
+
const str = "['\\'', \"\\\"\"]";
|
|
175
|
+
const tokens = lex(str);
|
|
176
|
+
|
|
177
|
+
expect(tokens[1].index).toEqual(1);
|
|
178
|
+
expect(tokens[1].value).toEqual("'");
|
|
179
|
+
|
|
180
|
+
expect(tokens[3].index).toEqual(7);
|
|
181
|
+
expect(tokens[3].value).toEqual('"');
|
|
182
|
+
});
|
|
183
|
+
|
|
184
|
+
it("should tokenize escaped quoted string", () => {
|
|
185
|
+
const str = '"\\"\\n\\f\\r\\t\\v\\u00A0"';
|
|
186
|
+
const tokens = lex(str);
|
|
187
|
+
|
|
188
|
+
expect(tokens[0].value).toEqual('"\n\f\r\t\v\u00A0');
|
|
189
|
+
});
|
|
190
|
+
|
|
191
|
+
it("should tokenize unicode", () => {
|
|
192
|
+
const tokens = lex('"\\u00A0"');
|
|
193
|
+
expect(tokens.length).toEqual(1);
|
|
194
|
+
expect(tokens[0].value).toEqual("\u00a0");
|
|
195
|
+
});
|
|
196
|
+
|
|
197
|
+
it("should ignore whitespace", () => {
|
|
198
|
+
const tokens = lex("a \t \n \r b");
|
|
199
|
+
expect(tokens[0].text).toEqual("a");
|
|
200
|
+
expect(tokens[1].text).toEqual("b");
|
|
201
|
+
});
|
|
202
|
+
|
|
203
|
+
it("should tokenize relation and equality", () => {
|
|
204
|
+
const tokens = lex("! == != < > <= >= === !==");
|
|
205
|
+
expect(tokens[0].text).toEqual("!");
|
|
206
|
+
expect(tokens[1].text).toEqual("==");
|
|
207
|
+
expect(tokens[2].text).toEqual("!=");
|
|
208
|
+
expect(tokens[3].text).toEqual("<");
|
|
209
|
+
expect(tokens[4].text).toEqual(">");
|
|
210
|
+
expect(tokens[5].text).toEqual("<=");
|
|
211
|
+
expect(tokens[6].text).toEqual(">=");
|
|
212
|
+
expect(tokens[7].text).toEqual("===");
|
|
213
|
+
expect(tokens[8].text).toEqual("!==");
|
|
214
|
+
});
|
|
215
|
+
|
|
216
|
+
it("should tokenize logical and ternary", () => {
|
|
217
|
+
const tokens = lex("&& || ? :");
|
|
218
|
+
expect(tokens[0].text).toEqual("&&");
|
|
219
|
+
expect(tokens[1].text).toEqual("||");
|
|
220
|
+
expect(tokens[2].text).toEqual("?");
|
|
221
|
+
expect(tokens[3].text).toEqual(":");
|
|
222
|
+
});
|
|
223
|
+
|
|
224
|
+
it("should tokenize statements", () => {
|
|
225
|
+
const tokens = lex("a;b;");
|
|
226
|
+
expect(tokens[0].text).toEqual("a");
|
|
227
|
+
expect(tokens[1].text).toEqual(";");
|
|
228
|
+
expect(tokens[2].text).toEqual("b");
|
|
229
|
+
expect(tokens[3].text).toEqual(";");
|
|
230
|
+
});
|
|
231
|
+
|
|
232
|
+
it("should tokenize function invocation", () => {
|
|
233
|
+
const tokens = lex("a()");
|
|
234
|
+
expect(tokens.map((t) => t.text)).toEqual(["a", "(", ")"]);
|
|
235
|
+
});
|
|
236
|
+
|
|
237
|
+
it("should tokenize method invocation", () => {
|
|
238
|
+
const tokens = lex("a.b.c (d) - e.f()");
|
|
239
|
+
expect(tokens.map((t) => t.text)).toEqual([
|
|
240
|
+
"a",
|
|
241
|
+
".",
|
|
242
|
+
"b",
|
|
243
|
+
".",
|
|
244
|
+
"c",
|
|
245
|
+
"(",
|
|
246
|
+
"d",
|
|
247
|
+
")",
|
|
248
|
+
"-",
|
|
249
|
+
"e",
|
|
250
|
+
".",
|
|
251
|
+
"f",
|
|
252
|
+
"(",
|
|
253
|
+
")",
|
|
254
|
+
]);
|
|
255
|
+
});
|
|
256
|
+
|
|
257
|
+
it("should tokenize number", () => {
|
|
258
|
+
const tokens = lex("0.5");
|
|
259
|
+
expect(tokens[0].value).toEqual(0.5);
|
|
260
|
+
});
|
|
261
|
+
|
|
262
|
+
it("should tokenize negative number", () => {
|
|
263
|
+
let value = $rootScope.$eval("-0.5");
|
|
264
|
+
expect(value).toEqual(-0.5);
|
|
265
|
+
|
|
266
|
+
value = $rootScope.$eval("{a:-0.5}");
|
|
267
|
+
expect(value).toEqual({ a: -0.5 });
|
|
268
|
+
});
|
|
269
|
+
|
|
270
|
+
it("should tokenize number with exponent", () => {
|
|
271
|
+
let tokens = lex("0.5E-10");
|
|
272
|
+
expect(tokens[0].value).toEqual(0.5e-10);
|
|
273
|
+
expect($rootScope.$eval("0.5E-10")).toEqual(0.5e-10);
|
|
274
|
+
|
|
275
|
+
tokens = lex("0.5E+10");
|
|
276
|
+
expect(tokens[0].value).toEqual(0.5e10);
|
|
277
|
+
});
|
|
278
|
+
|
|
279
|
+
it("should throws exception for invalid exponent", () => {
|
|
280
|
+
expect(() => {
|
|
281
|
+
lex("0.5E-");
|
|
282
|
+
}).toThrowError(/lexerr/);
|
|
283
|
+
|
|
284
|
+
expect(() => {
|
|
285
|
+
lex("0.5E-A");
|
|
286
|
+
}).toThrowError(/lexerr/);
|
|
287
|
+
});
|
|
288
|
+
|
|
289
|
+
it("should tokenize number starting with a dot", () => {
|
|
290
|
+
const tokens = lex(".5");
|
|
291
|
+
expect(tokens[0].value).toEqual(0.5);
|
|
292
|
+
});
|
|
293
|
+
|
|
294
|
+
it("should throw error on invalid unicode", () => {
|
|
295
|
+
expect(() => {
|
|
296
|
+
lex("'\\u1''bla'");
|
|
297
|
+
}).toThrowError(/lexerr/);
|
|
298
|
+
});
|
|
299
|
+
});
|
|
300
|
+
});
|
package/src/core/parser/parse.js
CHANGED
|
@@ -9,6 +9,7 @@ import { Parser } from "./parser";
|
|
|
9
9
|
* @property {boolean} constant - Indicates if the expression is constant.
|
|
10
10
|
* @property {boolean} isPure
|
|
11
11
|
* @property {boolean} oneTime
|
|
12
|
+
* @property {function(import('../scope/scope').Scope, import('../scope/scope').WatchListener, boolean, CompiledExpression, string | ((scope: import('../scope/scope').Scope) => any)): any} $$watchDelegate
|
|
12
13
|
* @property {any[]} inputs
|
|
13
14
|
* @property {function(any, any): any} assign - Assigns a value to a context. If value is not provided,
|
|
14
15
|
*/
|
|
@@ -69,6 +70,11 @@ export function $ParseProvider() {
|
|
|
69
70
|
|
|
70
71
|
this.$get = [
|
|
71
72
|
"$filter",
|
|
73
|
+
/**
|
|
74
|
+
*
|
|
75
|
+
* @param {(any) => any} $filter
|
|
76
|
+
* @returns {ParseService}
|
|
77
|
+
*/
|
|
72
78
|
function ($filter) {
|
|
73
79
|
/** @type {import("./lexer").LexerOptions} */
|
|
74
80
|
var $lexerOptions = {
|
|
@@ -193,6 +199,11 @@ export function constantWatchDelegate(
|
|
|
193
199
|
return unwatch;
|
|
194
200
|
}
|
|
195
201
|
|
|
202
|
+
/**
|
|
203
|
+
*
|
|
204
|
+
* @param {CompiledExpression} parsedExpression
|
|
205
|
+
* @returns {CompiledExpression}
|
|
206
|
+
*/
|
|
196
207
|
function addWatchDelegate(parsedExpression) {
|
|
197
208
|
if (parsedExpression.constant) {
|
|
198
209
|
parsedExpression.$$watchDelegate = constantWatchDelegate;
|
|
@@ -205,6 +216,14 @@ function addWatchDelegate(parsedExpression) {
|
|
|
205
216
|
return parsedExpression;
|
|
206
217
|
}
|
|
207
218
|
|
|
219
|
+
/**
|
|
220
|
+
*
|
|
221
|
+
* @param {import('../scope/scope').Scope} scope
|
|
222
|
+
* @param {import('../scope/scope').WatchListener} listener
|
|
223
|
+
* @param {*} objectEquality
|
|
224
|
+
* @param {CompiledExpression} parsedExpression
|
|
225
|
+
* @returns
|
|
226
|
+
*/
|
|
208
227
|
function inputsWatchDelegate(
|
|
209
228
|
scope,
|
|
210
229
|
listener,
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { test, expect } from "@playwright/test";
|
|
2
|
+
|
|
3
|
+
test("lexer unit tests contain no errors", async ({ page }) => {
|
|
4
|
+
await page.goto("src/core/parser/lexer.html");
|
|
5
|
+
await page.content();
|
|
6
|
+
await page.waitForTimeout(100);
|
|
7
|
+
await expect(page.locator(".jasmine-overall-result")).toHaveText(
|
|
8
|
+
/0 failures/,
|
|
9
|
+
);
|
|
10
|
+
});
|
|
11
|
+
|
|
12
|
+
test("parser unit tests contain no errors", async ({ page }) => {
|
|
13
|
+
await page.goto("src/core/parser/parse.html");
|
|
14
|
+
await page.content();
|
|
15
|
+
await page.waitForTimeout(100);
|
|
16
|
+
await expect(page.locator(".jasmine-overall-result")).toHaveText(
|
|
17
|
+
/0 failures/,
|
|
18
|
+
);
|
|
19
|
+
});
|