@platformos/prettier-plugin-liquid 0.0.2

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.
Files changed (52) hide show
  1. package/README.md +158 -0
  2. package/ThirdPartyNotices.txt +17 -0
  3. package/dist/constants.evaluate.d.ts +7 -0
  4. package/dist/constants.evaluate.js +78 -0
  5. package/dist/index.d.ts +2 -0
  6. package/dist/index.js +7 -0
  7. package/dist/parser.d.ts +19 -0
  8. package/dist/parser.js +21 -0
  9. package/dist/plugin.d.ts +7 -0
  10. package/dist/plugin.js +88 -0
  11. package/dist/printer/embed.d.ts +9 -0
  12. package/dist/printer/embed.js +82 -0
  13. package/dist/printer/index.d.ts +14 -0
  14. package/dist/printer/index.js +12 -0
  15. package/dist/printer/preprocess/augment-with-css-properties.d.ts +2 -0
  16. package/dist/printer/preprocess/augment-with-css-properties.js +240 -0
  17. package/dist/printer/preprocess/augment-with-family.d.ts +2 -0
  18. package/dist/printer/preprocess/augment-with-family.js +13 -0
  19. package/dist/printer/preprocess/augment-with-parent.d.ts +2 -0
  20. package/dist/printer/preprocess/augment-with-parent.js +18 -0
  21. package/dist/printer/preprocess/augment-with-siblings.d.ts +1902 -0
  22. package/dist/printer/preprocess/augment-with-siblings.js +45 -0
  23. package/dist/printer/preprocess/augment-with-whitespace-helpers.d.ts +23 -0
  24. package/dist/printer/preprocess/augment-with-whitespace-helpers.js +460 -0
  25. package/dist/printer/preprocess/index.d.ts +1 -0
  26. package/dist/printer/preprocess/index.js +16 -0
  27. package/dist/printer/print/children.d.ts +6 -0
  28. package/dist/printer/print/children.js +283 -0
  29. package/dist/printer/print/element.d.ts +4 -0
  30. package/dist/printer/print/element.js +114 -0
  31. package/dist/printer/print/liquid.d.ts +14 -0
  32. package/dist/printer/print/liquid.js +637 -0
  33. package/dist/printer/print/tag.d.ts +23 -0
  34. package/dist/printer/print/tag.js +358 -0
  35. package/dist/printer/print-preprocess.d.ts +3 -0
  36. package/dist/printer/print-preprocess.js +48 -0
  37. package/dist/printer/printer-liquid-html.d.ts +13 -0
  38. package/dist/printer/printer-liquid-html.js +545 -0
  39. package/dist/printer/utils/array.d.ts +4 -0
  40. package/dist/printer/utils/array.js +19 -0
  41. package/dist/printer/utils/index.d.ts +14 -0
  42. package/dist/printer/utils/index.js +59 -0
  43. package/dist/printer/utils/node.d.ts +44 -0
  44. package/dist/printer/utils/node.js +270 -0
  45. package/dist/printer/utils/string.d.ts +15 -0
  46. package/dist/printer/utils/string.js +55 -0
  47. package/dist/types.d.ts +85 -0
  48. package/dist/types.js +53 -0
  49. package/dist/utils.d.ts +6 -0
  50. package/dist/utils.js +35 -0
  51. package/package.json +65 -0
  52. package/standalone.js +19503 -0
@@ -0,0 +1,240 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.augmentWithCSSProperties = void 0;
4
+ const liquid_html_parser_1 = require("@platformos/liquid-html-parser");
5
+ const constants_evaluate_1 = require("../../constants.evaluate");
6
+ const utils_1 = require("../../utils");
7
+ function getCssDisplayFromComment(body) {
8
+ return body.match(/^\s*display:\s*([a-z]+)\s*$/)?.[1];
9
+ }
10
+ function getCssWhitespaceFromComment(body) {
11
+ return body.match(/^\s*white-?space:\s*([a-z]+)\s*$/)?.[1];
12
+ }
13
+ function getCssDisplay(node, options) {
14
+ if (node.prev && node.prev.type === liquid_html_parser_1.NodeTypes.HtmlComment) {
15
+ // <!-- display: block -->
16
+ const cssDisplay = getCssDisplayFromComment(node.prev.body);
17
+ if (cssDisplay) {
18
+ return cssDisplay;
19
+ }
20
+ }
21
+ if (node.prev && node.prev.type === liquid_html_parser_1.NodeTypes.LiquidTag && node.prev.name === '#') {
22
+ // {% # display: block %}
23
+ const cssDisplay = getCssDisplayFromComment(node.prev.markup);
24
+ if (cssDisplay) {
25
+ return cssDisplay;
26
+ }
27
+ }
28
+ switch (node.type) {
29
+ case liquid_html_parser_1.NodeTypes.HtmlElement:
30
+ case liquid_html_parser_1.NodeTypes.HtmlDanglingMarkerClose:
31
+ case liquid_html_parser_1.NodeTypes.HtmlSelfClosingElement: {
32
+ switch (options.htmlWhitespaceSensitivity) {
33
+ case 'strict':
34
+ return 'inline';
35
+ case 'ignore':
36
+ return 'block';
37
+ default: {
38
+ return ((node.name.length === 1 &&
39
+ node.name[0].type === liquid_html_parser_1.NodeTypes.TextNode &&
40
+ constants_evaluate_1.CSS_DISPLAY_TAGS[node.name[0].value]) ||
41
+ constants_evaluate_1.CSS_DISPLAY_DEFAULT);
42
+ }
43
+ }
44
+ }
45
+ case liquid_html_parser_1.NodeTypes.HtmlVoidElement:
46
+ case liquid_html_parser_1.NodeTypes.HtmlRawNode: {
47
+ switch (options.htmlWhitespaceSensitivity) {
48
+ case 'strict':
49
+ return 'inline';
50
+ case 'ignore':
51
+ return 'block';
52
+ default: {
53
+ return constants_evaluate_1.CSS_DISPLAY_TAGS[node.name] || constants_evaluate_1.CSS_DISPLAY_DEFAULT;
54
+ }
55
+ }
56
+ }
57
+ case liquid_html_parser_1.NodeTypes.RawMarkup:
58
+ case liquid_html_parser_1.NodeTypes.TextNode:
59
+ return 'inline';
60
+ case liquid_html_parser_1.NodeTypes.LiquidTag:
61
+ case liquid_html_parser_1.NodeTypes.LiquidRawTag:
62
+ switch (options.htmlWhitespaceSensitivity) {
63
+ case 'strict':
64
+ return 'inline';
65
+ case 'ignore':
66
+ return 'block';
67
+ default: {
68
+ return constants_evaluate_1.CSS_DISPLAY_LIQUID_TAGS[node.name] || constants_evaluate_1.CSS_DISPLAY_LIQUID_DEFAULT;
69
+ }
70
+ }
71
+ case liquid_html_parser_1.NodeTypes.LiquidBranch:
72
+ case liquid_html_parser_1.NodeTypes.LiquidVariableOutput:
73
+ return 'inline';
74
+ case liquid_html_parser_1.NodeTypes.AttrDoubleQuoted:
75
+ case liquid_html_parser_1.NodeTypes.AttrSingleQuoted:
76
+ case liquid_html_parser_1.NodeTypes.AttrUnquoted:
77
+ case liquid_html_parser_1.NodeTypes.AttrEmpty:
78
+ return 'inline';
79
+ case liquid_html_parser_1.NodeTypes.HtmlDoctype:
80
+ case liquid_html_parser_1.NodeTypes.HtmlComment:
81
+ return 'block';
82
+ case liquid_html_parser_1.NodeTypes.Document:
83
+ return 'block';
84
+ case liquid_html_parser_1.NodeTypes.YAMLFrontmatter:
85
+ return 'block';
86
+ case liquid_html_parser_1.NodeTypes.LiquidVariable:
87
+ case liquid_html_parser_1.NodeTypes.LiquidFilter:
88
+ case liquid_html_parser_1.NodeTypes.NamedArgument:
89
+ case liquid_html_parser_1.NodeTypes.LiquidLiteral:
90
+ case liquid_html_parser_1.NodeTypes.BooleanExpression:
91
+ case liquid_html_parser_1.NodeTypes.String:
92
+ case liquid_html_parser_1.NodeTypes.Number:
93
+ case liquid_html_parser_1.NodeTypes.Range:
94
+ case liquid_html_parser_1.NodeTypes.VariableLookup:
95
+ case liquid_html_parser_1.NodeTypes.AssignMarkup:
96
+ case liquid_html_parser_1.NodeTypes.HashAssignMarkup:
97
+ case liquid_html_parser_1.NodeTypes.CycleMarkup:
98
+ case liquid_html_parser_1.NodeTypes.ContentForMarkup:
99
+ case liquid_html_parser_1.NodeTypes.ForMarkup:
100
+ case liquid_html_parser_1.NodeTypes.PaginateMarkup:
101
+ case liquid_html_parser_1.NodeTypes.RenderMarkup:
102
+ case liquid_html_parser_1.NodeTypes.FunctionMarkup:
103
+ case liquid_html_parser_1.NodeTypes.GraphQLMarkup:
104
+ case liquid_html_parser_1.NodeTypes.GraphQLInlineMarkup:
105
+ case liquid_html_parser_1.NodeTypes.BackgroundMarkup:
106
+ case liquid_html_parser_1.NodeTypes.BackgroundInlineMarkup:
107
+ case liquid_html_parser_1.NodeTypes.CacheMarkup:
108
+ case liquid_html_parser_1.NodeTypes.LogMarkup:
109
+ case liquid_html_parser_1.NodeTypes.SessionMarkup:
110
+ case liquid_html_parser_1.NodeTypes.ExportMarkup:
111
+ case liquid_html_parser_1.NodeTypes.RedirectToMarkup:
112
+ case liquid_html_parser_1.NodeTypes.IncludeFormMarkup:
113
+ case liquid_html_parser_1.NodeTypes.SpamProtectionMarkup:
114
+ case liquid_html_parser_1.NodeTypes.RenderVariableExpression:
115
+ case liquid_html_parser_1.NodeTypes.RenderAliasExpression:
116
+ case liquid_html_parser_1.NodeTypes.LogicalExpression:
117
+ case liquid_html_parser_1.NodeTypes.Comparison:
118
+ case liquid_html_parser_1.NodeTypes.LiquidDocParamNode:
119
+ case liquid_html_parser_1.NodeTypes.LiquidDocExampleNode:
120
+ case liquid_html_parser_1.NodeTypes.LiquidDocDescriptionNode:
121
+ case liquid_html_parser_1.NodeTypes.LiquidDocPromptNode:
122
+ return 'should not be relevant';
123
+ default:
124
+ return (0, utils_1.assertNever)(node);
125
+ }
126
+ }
127
+ function getNodeCssStyleWhiteSpace(node, options) {
128
+ if (node.prev && node.prev.type === liquid_html_parser_1.NodeTypes.HtmlComment) {
129
+ // <!-- white-space: normal -->
130
+ const whitespace = getCssWhitespaceFromComment(node.prev.body);
131
+ if (whitespace) {
132
+ return whitespace;
133
+ }
134
+ }
135
+ if (node.prev && node.prev.type === liquid_html_parser_1.NodeTypes.LiquidTag && node.prev.name === '#') {
136
+ // {% # white-space: normal %}
137
+ const whitespace = getCssWhitespaceFromComment(node.prev.markup);
138
+ if (whitespace) {
139
+ return whitespace;
140
+ }
141
+ }
142
+ switch (node.type) {
143
+ case liquid_html_parser_1.NodeTypes.HtmlElement:
144
+ case liquid_html_parser_1.NodeTypes.HtmlDanglingMarkerClose:
145
+ case liquid_html_parser_1.NodeTypes.HtmlSelfClosingElement: {
146
+ return ((node.name.length === 1 &&
147
+ node.name[0].type === liquid_html_parser_1.NodeTypes.TextNode &&
148
+ constants_evaluate_1.CSS_WHITE_SPACE_TAGS[node.name[0].value]) ||
149
+ constants_evaluate_1.CSS_WHITE_SPACE_DEFAULT);
150
+ }
151
+ case liquid_html_parser_1.NodeTypes.HtmlVoidElement:
152
+ case liquid_html_parser_1.NodeTypes.HtmlRawNode: {
153
+ return constants_evaluate_1.CSS_WHITE_SPACE_TAGS[node.name] || constants_evaluate_1.CSS_WHITE_SPACE_DEFAULT;
154
+ }
155
+ case liquid_html_parser_1.NodeTypes.TextNode:
156
+ return constants_evaluate_1.CSS_WHITE_SPACE_DEFAULT;
157
+ case liquid_html_parser_1.NodeTypes.RawMarkup:
158
+ case liquid_html_parser_1.NodeTypes.YAMLFrontmatter:
159
+ case liquid_html_parser_1.NodeTypes.LiquidRawTag:
160
+ return 'pre';
161
+ case liquid_html_parser_1.NodeTypes.LiquidTag:
162
+ switch (node.name) {
163
+ case 'capture': {
164
+ switch (options.captureWhitespaceSensitivity) {
165
+ case 'strict':
166
+ return 'pre';
167
+ case 'ignore':
168
+ return 'normal';
169
+ default: {
170
+ throw (0, utils_1.assertNever)(options.captureWhitespaceSensitivity);
171
+ }
172
+ }
173
+ }
174
+ default: {
175
+ return constants_evaluate_1.CSS_WHITE_SPACE_LIQUID_TAGS[node.name] || constants_evaluate_1.CSS_WHITE_SPACE_DEFAULT;
176
+ }
177
+ }
178
+ case liquid_html_parser_1.NodeTypes.LiquidBranch:
179
+ case liquid_html_parser_1.NodeTypes.LiquidVariableOutput:
180
+ return constants_evaluate_1.CSS_WHITE_SPACE_DEFAULT;
181
+ case liquid_html_parser_1.NodeTypes.AttrDoubleQuoted:
182
+ case liquid_html_parser_1.NodeTypes.AttrSingleQuoted:
183
+ case liquid_html_parser_1.NodeTypes.AttrUnquoted:
184
+ case liquid_html_parser_1.NodeTypes.AttrEmpty:
185
+ return constants_evaluate_1.CSS_WHITE_SPACE_DEFAULT;
186
+ case liquid_html_parser_1.NodeTypes.HtmlDoctype:
187
+ case liquid_html_parser_1.NodeTypes.HtmlComment:
188
+ return constants_evaluate_1.CSS_WHITE_SPACE_DEFAULT;
189
+ case liquid_html_parser_1.NodeTypes.Document:
190
+ return constants_evaluate_1.CSS_WHITE_SPACE_DEFAULT;
191
+ case liquid_html_parser_1.NodeTypes.LiquidVariable:
192
+ case liquid_html_parser_1.NodeTypes.LiquidFilter:
193
+ case liquid_html_parser_1.NodeTypes.NamedArgument:
194
+ case liquid_html_parser_1.NodeTypes.LiquidLiteral:
195
+ case liquid_html_parser_1.NodeTypes.BooleanExpression:
196
+ case liquid_html_parser_1.NodeTypes.String:
197
+ case liquid_html_parser_1.NodeTypes.Number:
198
+ case liquid_html_parser_1.NodeTypes.Range:
199
+ case liquid_html_parser_1.NodeTypes.VariableLookup:
200
+ case liquid_html_parser_1.NodeTypes.AssignMarkup:
201
+ case liquid_html_parser_1.NodeTypes.HashAssignMarkup:
202
+ case liquid_html_parser_1.NodeTypes.CycleMarkup:
203
+ case liquid_html_parser_1.NodeTypes.ContentForMarkup:
204
+ case liquid_html_parser_1.NodeTypes.ForMarkup:
205
+ case liquid_html_parser_1.NodeTypes.PaginateMarkup:
206
+ case liquid_html_parser_1.NodeTypes.RenderMarkup:
207
+ case liquid_html_parser_1.NodeTypes.FunctionMarkup:
208
+ case liquid_html_parser_1.NodeTypes.GraphQLMarkup:
209
+ case liquid_html_parser_1.NodeTypes.GraphQLInlineMarkup:
210
+ case liquid_html_parser_1.NodeTypes.BackgroundMarkup:
211
+ case liquid_html_parser_1.NodeTypes.BackgroundInlineMarkup:
212
+ case liquid_html_parser_1.NodeTypes.CacheMarkup:
213
+ case liquid_html_parser_1.NodeTypes.LogMarkup:
214
+ case liquid_html_parser_1.NodeTypes.SessionMarkup:
215
+ case liquid_html_parser_1.NodeTypes.ExportMarkup:
216
+ case liquid_html_parser_1.NodeTypes.RedirectToMarkup:
217
+ case liquid_html_parser_1.NodeTypes.IncludeFormMarkup:
218
+ case liquid_html_parser_1.NodeTypes.SpamProtectionMarkup:
219
+ case liquid_html_parser_1.NodeTypes.RenderVariableExpression:
220
+ case liquid_html_parser_1.NodeTypes.RenderAliasExpression:
221
+ case liquid_html_parser_1.NodeTypes.LogicalExpression:
222
+ case liquid_html_parser_1.NodeTypes.Comparison:
223
+ case liquid_html_parser_1.NodeTypes.LiquidDocParamNode:
224
+ case liquid_html_parser_1.NodeTypes.LiquidDocExampleNode:
225
+ case liquid_html_parser_1.NodeTypes.LiquidDocDescriptionNode:
226
+ case liquid_html_parser_1.NodeTypes.LiquidDocPromptNode:
227
+ return 'should not be relevant';
228
+ default:
229
+ return (0, utils_1.assertNever)(node);
230
+ }
231
+ }
232
+ const augmentWithCSSProperties = (options, node) => {
233
+ const augmentations = {
234
+ cssDisplay: getCssDisplay(node, options),
235
+ cssWhitespace: getNodeCssStyleWhiteSpace(node, options),
236
+ };
237
+ Object.assign(node, augmentations);
238
+ };
239
+ exports.augmentWithCSSProperties = augmentWithCSSProperties;
240
+ //# sourceMappingURL=augment-with-css-properties.js.map
@@ -0,0 +1,2 @@
1
+ import { Augment } from '../../types';
2
+ export declare const augmentWithFamily: Augment<{}>;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.augmentWithFamily = void 0;
4
+ const augmentWithFamily = (_options, node) => {
5
+ const children = node.children || [];
6
+ const augmentations = {
7
+ firstChild: children[0],
8
+ lastChild: children[children.length - 1],
9
+ };
10
+ Object.assign(node, augmentations);
11
+ };
12
+ exports.augmentWithFamily = augmentWithFamily;
13
+ //# sourceMappingURL=augment-with-family.js.map
@@ -0,0 +1,2 @@
1
+ import { Augment } from '../../types';
2
+ export declare const augmentWithParent: Augment<{}>;
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.augmentWithParent = void 0;
4
+ const augmentWithParent = (_options, node, parentNode) => {
5
+ const augmentations = {
6
+ parentNode: parentNode,
7
+ };
8
+ Object.assign(node, augmentations);
9
+ // Adding lazy property for debugging. Not added to the
10
+ // types so that we don't use it officially.
11
+ Object.defineProperty(node, '_rawSource', {
12
+ get() {
13
+ return this.source.slice(this.position.start, this.position.end);
14
+ },
15
+ });
16
+ };
17
+ exports.augmentWithParent = augmentWithParent;
18
+ //# sourceMappingURL=augment-with-parent.js.map