UNPKG

2.4 kBJavaScriptView Raw
1var __extends = (this && this.__extends) || function (d, b) {
2 for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
3 function __() { this.constructor = d; }
4 __.prototype = b.prototype;
5 d.prototype = new __();
6};
7var ErrorTolerantWalker = require('./utils/ErrorTolerantWalker');
8var Rule = (function (_super) {
9 __extends(Rule, _super);
10 function Rule() {
11 _super.apply(this, arguments);
12 }
13 Rule.prototype.apply = function (sourceFile) {
14 var documentRegistry = ts.createDocumentRegistry();
15 var languageServiceHost = Lint.createLanguageServiceHost('file.ts', sourceFile.getFullText());
16 var languageService = ts.createLanguageService(languageServiceHost, documentRegistry);
17 return this.applyWithWalker(new NoCookiesWalker(sourceFile, this.getOptions(), languageService));
18 };
19 Rule.FAILURE_STRING = 'Forbidden call to document.cookie';
20 return Rule;
21})(Lint.Rules.AbstractRule);
22exports.Rule = Rule;
23var NoCookiesWalker = (function (_super) {
24 __extends(NoCookiesWalker, _super);
25 function NoCookiesWalker(sourceFile, options, languageService) {
26 _super.call(this, sourceFile, options);
27 this.languageService = languageService;
28 this.typeChecker = languageService.getProgram().getTypeChecker();
29 }
30 NoCookiesWalker.prototype.visitPropertyAccessExpression = function (node) {
31 var propertyName = node.name.text;
32 if (propertyName === 'cookie') {
33 var leftSide = node.expression;
34 try {
35 var leftSideType = this.typeChecker.getTypeAtLocation(leftSide);
36 var typeAsString = this.typeChecker.typeToString(leftSideType);
37 if (leftSideType.flags === 1 || typeAsString === 'Document') {
38 this.addFailure(this.createFailure(leftSide.getStart(), leftSide.getWidth(), Rule.FAILURE_STRING));
39 }
40 }
41 catch (e) {
42 if (leftSide.getFullText().trim() === 'document') {
43 this.addFailure(this.createFailure(leftSide.getStart(), leftSide.getWidth(), Rule.FAILURE_STRING));
44 }
45 }
46 }
47 _super.prototype.visitPropertyAccessExpression.call(this, node);
48 };
49 return NoCookiesWalker;
50})(ErrorTolerantWalker);
51//# sourceMappingURL=noCookiesRule.js.map
\No newline at end of file