(parser)
| 105 | } |
| 106 | |
| 107 | static parse(parser) { |
| 108 | if (!parser.matchToken("eventsource")) return; |
| 109 | |
| 110 | var urlElement; |
| 111 | var withCredentials = false; |
| 112 | var method = 'GET'; |
| 113 | var headers = null; |
| 114 | |
| 115 | var name = parser.requireElement("dotOrColonPath"); |
| 116 | var qualifiedName = name.evalStatically(); |
| 117 | var nameSpace = qualifiedName.split("."); |
| 118 | var eventSourceName = nameSpace.pop(); |
| 119 | |
| 120 | if (parser.matchToken("from")) { |
| 121 | urlElement = parser.parseURLOrExpression(); |
| 122 | } |
| 123 | |
| 124 | // Parse options: with credentials, with method, with headers (in any order) |
| 125 | while (parser.matchToken("with")) { |
| 126 | if (parser.matchToken("credentials")) { |
| 127 | withCredentials = true; |
| 128 | } else if (parser.matchToken("method")) { |
| 129 | method = parser.requireElement("stringLike").evalStatically().toUpperCase(); |
| 130 | } else if (parser.matchToken("headers")) { |
| 131 | headers = parser.requireElement("objectLiteral"); |
| 132 | } else { |
| 133 | parser.raiseExpected("credentials", "method", "headers"); |
| 134 | } |
| 135 | } |
| 136 | |
| 137 | // Evaluate headers at parse time - keys and values must be static literals |
| 138 | var staticHeaders = null; |
| 139 | if (headers) { |
| 140 | staticHeaders = {}; |
| 141 | for (var i = 0; i < headers.keyExpressions.length; i++) { |
| 142 | var key = headers.keyExpressions[i].evalStatically(); |
| 143 | var val = headers.valueExpressions[i].evalStatically(); |
| 144 | staticHeaders[key] = val; |
| 145 | } |
| 146 | } |
| 147 | |
| 148 | var stub = createStub(withCredentials, method, staticHeaders); |
| 149 | var feature = new EventSourceFeature(eventSourceName, nameSpace, stub); |
| 150 | |
| 151 | while (parser.matchToken("on")) { |
| 152 | var eventName = parser.requireElement("stringLike").evalStatically(); |
| 153 | |
| 154 | var encoding = ""; |
| 155 | if (parser.matchToken("as")) { |
| 156 | encoding = parser.requireElement("stringLike").evalStatically(); |
| 157 | } |
| 158 | |
| 159 | var commandList = parser.requireElement("commandList"); |
| 160 | parser.ensureTerminated(commandList); |
| 161 | parser.requireToken("end"); |
| 162 | |
| 163 | stub.listeners.push({ |
| 164 | type: eventName, |
no test coverage detected