cssAst.js 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329
  1. "use strict";
  2. var __extends = (this && this.__extends) || (function () {
  3. var extendStatics = function (d, b) {
  4. extendStatics = Object.setPrototypeOf ||
  5. ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
  6. function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
  7. return extendStatics(d, b);
  8. };
  9. return function (d, b) {
  10. extendStatics(d, b);
  11. function __() { this.constructor = d; }
  12. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  13. };
  14. })();
  15. Object.defineProperty(exports, "__esModule", { value: true });
  16. var cssLexer_1 = require("./cssLexer");
  17. var BlockType;
  18. (function (BlockType) {
  19. BlockType[BlockType["Import"] = 0] = "Import";
  20. BlockType[BlockType["Charset"] = 1] = "Charset";
  21. BlockType[BlockType["Namespace"] = 2] = "Namespace";
  22. BlockType[BlockType["Supports"] = 3] = "Supports";
  23. BlockType[BlockType["Keyframes"] = 4] = "Keyframes";
  24. BlockType[BlockType["MediaQuery"] = 5] = "MediaQuery";
  25. BlockType[BlockType["Selector"] = 6] = "Selector";
  26. BlockType[BlockType["FontFace"] = 7] = "FontFace";
  27. BlockType[BlockType["Page"] = 8] = "Page";
  28. BlockType[BlockType["Document"] = 9] = "Document";
  29. BlockType[BlockType["Viewport"] = 10] = "Viewport";
  30. BlockType[BlockType["Unsupported"] = 11] = "Unsupported";
  31. })(BlockType = exports.BlockType || (exports.BlockType = {}));
  32. var CssAst = (function () {
  33. function CssAst(location) {
  34. this.location = location;
  35. }
  36. Object.defineProperty(CssAst.prototype, "start", {
  37. get: function () {
  38. return this.location.start;
  39. },
  40. enumerable: true,
  41. configurable: true
  42. });
  43. Object.defineProperty(CssAst.prototype, "end", {
  44. get: function () {
  45. return this.location.end;
  46. },
  47. enumerable: true,
  48. configurable: true
  49. });
  50. return CssAst;
  51. }());
  52. exports.CssAst = CssAst;
  53. var CssStyleValueAst = (function (_super) {
  54. __extends(CssStyleValueAst, _super);
  55. function CssStyleValueAst(location, tokens, strValue) {
  56. var _this = _super.call(this, location) || this;
  57. _this.tokens = tokens;
  58. _this.strValue = strValue;
  59. return _this;
  60. }
  61. CssStyleValueAst.prototype.visit = function (visitor, context) {
  62. return visitor.visitCssValue(this);
  63. };
  64. return CssStyleValueAst;
  65. }(CssAst));
  66. exports.CssStyleValueAst = CssStyleValueAst;
  67. var CssRuleAst = (function (_super) {
  68. __extends(CssRuleAst, _super);
  69. function CssRuleAst(location) {
  70. return _super.call(this, location) || this;
  71. }
  72. return CssRuleAst;
  73. }(CssAst));
  74. exports.CssRuleAst = CssRuleAst;
  75. var CssBlockRuleAst = (function (_super) {
  76. __extends(CssBlockRuleAst, _super);
  77. function CssBlockRuleAst(location, type, block, name) {
  78. if (name === void 0) { name = null; }
  79. var _this = _super.call(this, location) || this;
  80. _this.location = location;
  81. _this.type = type;
  82. _this.block = block;
  83. _this.name = name;
  84. return _this;
  85. }
  86. CssBlockRuleAst.prototype.visit = function (visitor, context) {
  87. return visitor.visitCssBlock(this.block, context);
  88. };
  89. return CssBlockRuleAst;
  90. }(CssRuleAst));
  91. exports.CssBlockRuleAst = CssBlockRuleAst;
  92. var CssKeyframeRuleAst = (function (_super) {
  93. __extends(CssKeyframeRuleAst, _super);
  94. function CssKeyframeRuleAst(location, name, block) {
  95. return _super.call(this, location, BlockType.Keyframes, block, name) || this;
  96. }
  97. CssKeyframeRuleAst.prototype.visit = function (visitor, context) {
  98. return visitor.visitCssKeyframeRule(this, context);
  99. };
  100. return CssKeyframeRuleAst;
  101. }(CssBlockRuleAst));
  102. exports.CssKeyframeRuleAst = CssKeyframeRuleAst;
  103. var CssKeyframeDefinitionAst = (function (_super) {
  104. __extends(CssKeyframeDefinitionAst, _super);
  105. function CssKeyframeDefinitionAst(location, steps, block) {
  106. var _this = _super.call(this, location, BlockType.Keyframes, block, mergeTokens(steps, ',')) || this;
  107. _this.steps = steps;
  108. return _this;
  109. }
  110. CssKeyframeDefinitionAst.prototype.visit = function (visitor, context) {
  111. return visitor.visitCssKeyframeDefinition(this, context);
  112. };
  113. return CssKeyframeDefinitionAst;
  114. }(CssBlockRuleAst));
  115. exports.CssKeyframeDefinitionAst = CssKeyframeDefinitionAst;
  116. var CssBlockDefinitionRuleAst = (function (_super) {
  117. __extends(CssBlockDefinitionRuleAst, _super);
  118. function CssBlockDefinitionRuleAst(location, strValue, type, query, block) {
  119. var _this = _super.call(this, location, type, block) || this;
  120. _this.strValue = strValue;
  121. _this.query = query;
  122. var firstCssToken = query.tokens[0];
  123. _this.name = new cssLexer_1.CssToken(firstCssToken.index, firstCssToken.column, firstCssToken.line, cssLexer_1.CssTokenType.Identifier, _this.strValue);
  124. return _this;
  125. }
  126. CssBlockDefinitionRuleAst.prototype.visit = function (visitor, context) {
  127. return visitor.visitCssBlock(this.block, context);
  128. };
  129. return CssBlockDefinitionRuleAst;
  130. }(CssBlockRuleAst));
  131. exports.CssBlockDefinitionRuleAst = CssBlockDefinitionRuleAst;
  132. var CssMediaQueryRuleAst = (function (_super) {
  133. __extends(CssMediaQueryRuleAst, _super);
  134. function CssMediaQueryRuleAst(location, strValue, query, block) {
  135. return _super.call(this, location, strValue, BlockType.MediaQuery, query, block) || this;
  136. }
  137. CssMediaQueryRuleAst.prototype.visit = function (visitor, context) {
  138. return visitor.visitCssMediaQueryRule(this, context);
  139. };
  140. return CssMediaQueryRuleAst;
  141. }(CssBlockDefinitionRuleAst));
  142. exports.CssMediaQueryRuleAst = CssMediaQueryRuleAst;
  143. var CssAtRulePredicateAst = (function (_super) {
  144. __extends(CssAtRulePredicateAst, _super);
  145. function CssAtRulePredicateAst(location, strValue, tokens) {
  146. var _this = _super.call(this, location) || this;
  147. _this.strValue = strValue;
  148. _this.tokens = tokens;
  149. return _this;
  150. }
  151. CssAtRulePredicateAst.prototype.visit = function (visitor, context) {
  152. return visitor.visitCssAtRulePredicate(this, context);
  153. };
  154. return CssAtRulePredicateAst;
  155. }(CssAst));
  156. exports.CssAtRulePredicateAst = CssAtRulePredicateAst;
  157. var CssInlineRuleAst = (function (_super) {
  158. __extends(CssInlineRuleAst, _super);
  159. function CssInlineRuleAst(location, type, value) {
  160. var _this = _super.call(this, location) || this;
  161. _this.type = type;
  162. _this.value = value;
  163. return _this;
  164. }
  165. CssInlineRuleAst.prototype.visit = function (visitor, context) {
  166. return visitor.visitCssInlineRule(this, context);
  167. };
  168. return CssInlineRuleAst;
  169. }(CssRuleAst));
  170. exports.CssInlineRuleAst = CssInlineRuleAst;
  171. var CssSelectorRuleAst = (function (_super) {
  172. __extends(CssSelectorRuleAst, _super);
  173. function CssSelectorRuleAst(location, selectors, block) {
  174. var _this = _super.call(this, location, BlockType.Selector, block) || this;
  175. _this.selectors = selectors;
  176. _this.strValue = selectors.map(function (selector) { return selector.strValue; }).join(',');
  177. return _this;
  178. }
  179. CssSelectorRuleAst.prototype.visit = function (visitor, context) {
  180. return visitor.visitCssSelectorRule(this, context);
  181. };
  182. return CssSelectorRuleAst;
  183. }(CssBlockRuleAst));
  184. exports.CssSelectorRuleAst = CssSelectorRuleAst;
  185. var CssDefinitionAst = (function (_super) {
  186. __extends(CssDefinitionAst, _super);
  187. function CssDefinitionAst(location, property, value) {
  188. var _this = _super.call(this, location) || this;
  189. _this.property = property;
  190. _this.value = value;
  191. return _this;
  192. }
  193. CssDefinitionAst.prototype.visit = function (visitor, context) {
  194. return visitor.visitCssDefinition(this, context);
  195. };
  196. return CssDefinitionAst;
  197. }(CssAst));
  198. exports.CssDefinitionAst = CssDefinitionAst;
  199. var CssSelectorPartAst = (function (_super) {
  200. __extends(CssSelectorPartAst, _super);
  201. function CssSelectorPartAst(location) {
  202. return _super.call(this, location) || this;
  203. }
  204. return CssSelectorPartAst;
  205. }(CssAst));
  206. exports.CssSelectorPartAst = CssSelectorPartAst;
  207. var CssSelectorAst = (function (_super) {
  208. __extends(CssSelectorAst, _super);
  209. function CssSelectorAst(location, selectorParts) {
  210. var _this = _super.call(this, location) || this;
  211. _this.selectorParts = selectorParts;
  212. _this.strValue = selectorParts.map(function (part) { return part.strValue; }).join('');
  213. return _this;
  214. }
  215. CssSelectorAst.prototype.visit = function (visitor, context) {
  216. return visitor.visitCssSelector(this, context);
  217. };
  218. return CssSelectorAst;
  219. }(CssSelectorPartAst));
  220. exports.CssSelectorAst = CssSelectorAst;
  221. var CssSimpleSelectorAst = (function (_super) {
  222. __extends(CssSimpleSelectorAst, _super);
  223. function CssSimpleSelectorAst(location, tokens, strValue, pseudoSelectors, operator) {
  224. var _this = _super.call(this, location) || this;
  225. _this.tokens = tokens;
  226. _this.strValue = strValue;
  227. _this.pseudoSelectors = pseudoSelectors;
  228. _this.operator = operator;
  229. return _this;
  230. }
  231. CssSimpleSelectorAst.prototype.visit = function (visitor, context) {
  232. return visitor.visitCssSimpleSelector(this, context);
  233. };
  234. return CssSimpleSelectorAst;
  235. }(CssSelectorPartAst));
  236. exports.CssSimpleSelectorAst = CssSimpleSelectorAst;
  237. var CssPseudoSelectorAst = (function (_super) {
  238. __extends(CssPseudoSelectorAst, _super);
  239. function CssPseudoSelectorAst(location, strValue, name, tokens, innerSelectors) {
  240. var _this = _super.call(this, location) || this;
  241. _this.strValue = strValue;
  242. _this.name = name;
  243. _this.tokens = tokens;
  244. _this.innerSelectors = innerSelectors;
  245. return _this;
  246. }
  247. CssPseudoSelectorAst.prototype.visit = function (visitor, context) {
  248. return visitor.visitCssPseudoSelector(this, context);
  249. };
  250. return CssPseudoSelectorAst;
  251. }(CssSelectorPartAst));
  252. exports.CssPseudoSelectorAst = CssPseudoSelectorAst;
  253. var CssBlockAst = (function (_super) {
  254. __extends(CssBlockAst, _super);
  255. function CssBlockAst(location, entries) {
  256. var _this = _super.call(this, location) || this;
  257. _this.entries = entries;
  258. return _this;
  259. }
  260. CssBlockAst.prototype.visit = function (visitor, context) {
  261. return visitor.visitCssBlock(this, context);
  262. };
  263. return CssBlockAst;
  264. }(CssAst));
  265. exports.CssBlockAst = CssBlockAst;
  266. var CssStylesBlockAst = (function (_super) {
  267. __extends(CssStylesBlockAst, _super);
  268. function CssStylesBlockAst(location, definitions) {
  269. var _this = _super.call(this, location, definitions) || this;
  270. _this.definitions = definitions;
  271. return _this;
  272. }
  273. CssStylesBlockAst.prototype.visit = function (visitor, context) {
  274. return visitor.visitCssStylesBlock(this, context);
  275. };
  276. return CssStylesBlockAst;
  277. }(CssBlockAst));
  278. exports.CssStylesBlockAst = CssStylesBlockAst;
  279. var CssStyleSheetAst = (function (_super) {
  280. __extends(CssStyleSheetAst, _super);
  281. function CssStyleSheetAst(location, rules) {
  282. var _this = _super.call(this, location) || this;
  283. _this.rules = rules;
  284. return _this;
  285. }
  286. CssStyleSheetAst.prototype.visit = function (visitor, context) {
  287. return visitor.visitCssStyleSheet(this, context);
  288. };
  289. return CssStyleSheetAst;
  290. }(CssAst));
  291. exports.CssStyleSheetAst = CssStyleSheetAst;
  292. var CssUnknownRuleAst = (function (_super) {
  293. __extends(CssUnknownRuleAst, _super);
  294. function CssUnknownRuleAst(location, ruleName, tokens) {
  295. var _this = _super.call(this, location) || this;
  296. _this.ruleName = ruleName;
  297. _this.tokens = tokens;
  298. return _this;
  299. }
  300. CssUnknownRuleAst.prototype.visit = function (visitor, context) {
  301. return visitor.visitCssUnknownRule(this, context);
  302. };
  303. return CssUnknownRuleAst;
  304. }(CssRuleAst));
  305. exports.CssUnknownRuleAst = CssUnknownRuleAst;
  306. var CssUnknownTokenListAst = (function (_super) {
  307. __extends(CssUnknownTokenListAst, _super);
  308. function CssUnknownTokenListAst(location, name, tokens) {
  309. var _this = _super.call(this, location) || this;
  310. _this.name = name;
  311. _this.tokens = tokens;
  312. return _this;
  313. }
  314. CssUnknownTokenListAst.prototype.visit = function (visitor, context) {
  315. return visitor.visitCssUnknownTokenList(this, context);
  316. };
  317. return CssUnknownTokenListAst;
  318. }(CssRuleAst));
  319. exports.CssUnknownTokenListAst = CssUnknownTokenListAst;
  320. function mergeTokens(tokens, separator) {
  321. if (separator === void 0) { separator = ''; }
  322. var mainToken = tokens[0];
  323. var str = mainToken.strValue;
  324. for (var i = 1; i < tokens.length; i++) {
  325. str += separator + tokens[i].strValue;
  326. }
  327. return new cssLexer_1.CssToken(mainToken.index, mainToken.column, mainToken.line, mainToken.type, str);
  328. }
  329. exports.mergeTokens = mergeTokens;