@builder.io/mitosis 0.0.56-98 → 0.0.57
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/dist/src/__tests__/data/blocks/content-slot-jsx.raw.jsx +4 -1
- package/dist/src/__tests__/data/blocks/form.raw.jsx +5 -5
- package/dist/src/__tests__/data/blocks/onUpdateWithDeps.raw.d.ts +5 -1
- package/dist/src/__tests__/data/blocks/onUpdateWithDeps.raw.jsx +3 -3
- package/dist/src/__tests__/data/jsx-json.spec.d.ts +2 -0
- package/dist/src/__tests__/data/jsx-json.spec.js +10226 -0
- package/dist/src/__tests__/shared.d.ts +7 -2
- package/dist/src/__tests__/shared.js +66 -9
- package/dist/src/constants/method-literal-prefix.d.ts +0 -1
- package/dist/src/constants/method-literal-prefix.js +0 -3
- package/dist/src/generators/angular.d.ts +2 -2
- package/dist/src/generators/angular.js +5 -3
- package/dist/src/generators/builder.d.ts +4 -11
- package/dist/src/generators/builder.js +3 -2
- package/dist/src/generators/context/svelte.d.ts +3 -0
- package/dist/src/generators/context/svelte.js +3 -0
- package/dist/src/generators/helpers/functions.d.ts +2 -0
- package/dist/src/generators/helpers/functions.js +28 -0
- package/dist/src/generators/html.d.ts +3 -3
- package/dist/src/generators/html.js +9 -7
- package/dist/src/generators/liquid.d.ts +2 -2
- package/dist/src/generators/liquid.js +4 -4
- package/dist/src/generators/lit/generate.d.ts +2 -2
- package/dist/src/generators/lit/generate.js +14 -6
- package/dist/src/generators/marko/generate.d.ts +2 -2
- package/dist/src/generators/marko/generate.js +10 -8
- package/dist/src/generators/mitosis.d.ts +3 -4
- package/dist/src/generators/mitosis.js +3 -2
- package/dist/src/generators/qwik/component-generator.d.ts +2 -2
- package/dist/src/generators/qwik/component-generator.js +49 -55
- package/dist/src/generators/qwik/component.d.ts +0 -1
- package/dist/src/generators/qwik/component.js +22 -19
- package/dist/src/generators/qwik/directives.d.ts +1 -0
- package/dist/src/generators/qwik/directives.js +11 -14
- package/dist/src/generators/qwik/jsx.d.ts +1 -1
- package/dist/src/generators/qwik/jsx.js +9 -5
- package/dist/src/generators/qwik/src-generator.js +9 -3
- package/dist/src/generators/qwik/stable-serialize.d.ts +6 -0
- package/dist/src/generators/qwik/stable-serialize.js +51 -0
- package/dist/src/generators/react/generator.d.ts +6 -0
- package/dist/src/generators/{react.js → react/generator.js} +58 -150
- package/dist/src/generators/react/helpers.d.ts +2 -0
- package/dist/src/generators/react/helpers.js +14 -0
- package/dist/src/generators/react/index.d.ts +2 -0
- package/dist/src/generators/react/index.js +18 -0
- package/dist/src/generators/react/state.d.ts +9 -0
- package/dist/src/generators/react/state.js +107 -0
- package/dist/src/generators/react/types.d.ts +10 -0
- package/dist/src/{types/string-map.js → generators/react/types.js} +0 -0
- package/dist/src/generators/react-native.d.ts +2 -2
- package/dist/src/generators/solid/index.d.ts +3 -0
- package/dist/src/generators/{solid.js → solid/index.js} +80 -40
- package/dist/src/generators/solid/state.d.ts +19 -0
- package/dist/src/generators/solid/state.js +144 -0
- package/dist/src/generators/solid/types.d.ts +6 -0
- package/dist/src/generators/solid/types.js +2 -0
- package/dist/src/generators/stencil/generate.d.ts +2 -2
- package/dist/src/generators/stencil/generate.js +5 -2
- package/dist/src/generators/svelte.d.ts +6 -7
- package/dist/src/generators/svelte.js +43 -40
- package/dist/src/generators/swift-ui.d.ts +3 -5
- package/dist/src/generators/swift-ui.js +3 -2
- package/dist/src/generators/template.d.ts +2 -2
- package/dist/src/generators/template.js +3 -2
- package/dist/src/generators/vue.d.ts +5 -3
- package/dist/src/generators/vue.js +256 -113
- package/dist/src/helpers/babel-transform.d.ts +3 -1
- package/dist/src/helpers/babel-transform.js +52 -56
- package/dist/src/helpers/get-bindings.js +3 -5
- package/dist/src/helpers/get-props.js +14 -1
- package/dist/src/helpers/get-state-object-string.js +24 -21
- package/dist/src/helpers/getters-to-functions.js +1 -11
- package/dist/src/helpers/map-refs.js +25 -25
- package/dist/src/helpers/nodes/for.d.ts +4 -0
- package/dist/src/helpers/nodes/for.js +13 -0
- package/dist/src/helpers/nullable.d.ts +2 -0
- package/dist/src/helpers/nullable.js +7 -0
- package/dist/src/helpers/patterns.d.ts +2 -0
- package/dist/src/helpers/patterns.js +5 -1
- package/dist/src/helpers/render-imports.js +3 -3
- package/dist/src/helpers/replace-identifiers.d.ts +5 -0
- package/dist/src/helpers/{replace-idenifiers.js → replace-identifiers.js} +2 -1
- package/dist/src/helpers/slots.d.ts +2 -0
- package/dist/src/helpers/slots.js +15 -1
- package/dist/src/helpers/state.d.ts +0 -2
- package/dist/src/helpers/state.js +1 -10
- package/dist/src/helpers/strip-state-and-props-refs.d.ts +1 -1
- package/dist/src/helpers/strip-state-and-props-refs.js +43 -31
- package/dist/src/helpers/styles/helpers.d.ts +1 -0
- package/dist/src/index.d.ts +0 -2
- package/dist/src/index.js +0 -2
- package/dist/src/parsers/angular.js +2 -2
- package/dist/src/parsers/builder.d.ts +2 -2
- package/dist/src/parsers/builder.js +61 -43
- package/dist/src/parsers/constants/outdated-prefixes.d.ts +10 -0
- package/dist/src/parsers/constants/outdated-prefixes.js +13 -0
- package/dist/src/parsers/context.js +2 -2
- package/dist/src/parsers/helpers/state.d.ts +3 -0
- package/dist/src/parsers/helpers/state.js +30 -0
- package/dist/src/parsers/jsx/component-types.d.ts +1 -1
- package/dist/src/parsers/jsx/component-types.js +15 -2
- package/dist/src/parsers/jsx/context.js +1 -1
- package/dist/src/parsers/jsx/element-parser.d.ts +6 -0
- package/dist/src/parsers/jsx/element-parser.js +243 -0
- package/dist/src/parsers/jsx/exports.d.ts +3 -0
- package/dist/src/parsers/jsx/exports.js +78 -0
- package/dist/src/parsers/jsx/function-parser.d.ts +7 -0
- package/dist/src/parsers/jsx/function-parser.js +291 -0
- package/dist/src/parsers/jsx/helpers.d.ts +2 -0
- package/dist/src/parsers/jsx/helpers.js +30 -1
- package/dist/src/parsers/jsx/imports.d.ts +7 -0
- package/dist/src/parsers/jsx/imports.js +65 -0
- package/dist/src/parsers/jsx/index.d.ts +1 -1
- package/dist/src/parsers/jsx/index.js +1 -2
- package/dist/src/parsers/jsx/jsx.js +29 -516
- package/dist/src/parsers/jsx/state.d.ts +2 -3
- package/dist/src/parsers/jsx/state.js +15 -22
- package/dist/src/plugins/compile-away-builder-components.js +6 -0
- package/dist/src/symbols/symbol-processor.js +3 -0
- package/dist/src/targets.d.ts +21 -28
- package/dist/src/targets.js +2 -2
- package/dist/src/types/config.d.ts +11 -1
- package/dist/src/types/mitosis-component.d.ts +12 -6
- package/dist/src/types/mitosis-component.js +11 -0
- package/dist/src/types/mitosis-context.d.ts +2 -2
- package/dist/src/types/mitosis-node.d.ts +14 -5
- package/dist/src/types/mitosis-node.js +3 -0
- package/dist/src/types/transpiler.d.ts +6 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +9 -9
- package/dist/src/__tests__/angular.test.d.ts +0 -1
- package/dist/src/__tests__/angular.test.js +0 -10
- package/dist/src/__tests__/builder.test.d.ts +0 -1
- package/dist/src/__tests__/builder.test.js +0 -235
- package/dist/src/__tests__/context.test.d.ts +0 -1
- package/dist/src/__tests__/context.test.js +0 -35
- package/dist/src/__tests__/data/blocks/builder-render-block.raw.d.ts +0 -6
- package/dist/src/__tests__/data/blocks/builder-render-block.raw.jsx +0 -90
- package/dist/src/__tests__/data/blocks/builder-render-content.raw.d.ts +0 -10
- package/dist/src/__tests__/data/blocks/builder-render-content.raw.jsx +0 -69
- package/dist/src/__tests__/hash-code.test.d.ts +0 -1
- package/dist/src/__tests__/hash-code.test.js +0 -11
- package/dist/src/__tests__/html.test.d.ts +0 -1
- package/dist/src/__tests__/html.test.js +0 -7
- package/dist/src/__tests__/liquid.test.d.ts +0 -1
- package/dist/src/__tests__/liquid.test.js +0 -7
- package/dist/src/__tests__/lit.test.d.ts +0 -1
- package/dist/src/__tests__/lit.test.js +0 -7
- package/dist/src/__tests__/marko.test.d.ts +0 -1
- package/dist/src/__tests__/marko.test.js +0 -14
- package/dist/src/__tests__/parse-jsx.test.d.ts +0 -1
- package/dist/src/__tests__/parse-jsx.test.js +0 -37
- package/dist/src/__tests__/qwik/convert-method-to-function.test.d.ts +0 -1
- package/dist/src/__tests__/qwik/convert-method-to-function.test.js +0 -37
- package/dist/src/__tests__/qwik/src-generator.test.d.ts +0 -1
- package/dist/src/__tests__/qwik/src-generator.test.js +0 -65
- package/dist/src/__tests__/qwik.directive.test.d.ts +0 -1
- package/dist/src/__tests__/qwik.directive.test.js +0 -108
- package/dist/src/__tests__/qwik.test.d.ts +0 -1
- package/dist/src/__tests__/qwik.test.js +0 -465
- package/dist/src/__tests__/react-native.test.d.ts +0 -1
- package/dist/src/__tests__/react-native.test.js +0 -7
- package/dist/src/__tests__/react.test.d.ts +0 -1
- package/dist/src/__tests__/react.test.js +0 -20
- package/dist/src/__tests__/solid.test.d.ts +0 -1
- package/dist/src/__tests__/solid.test.js +0 -10
- package/dist/src/__tests__/stencil.test.d.ts +0 -1
- package/dist/src/__tests__/stencil.test.js +0 -7
- package/dist/src/__tests__/styles.test.d.ts +0 -1
- package/dist/src/__tests__/styles.test.js +0 -23
- package/dist/src/__tests__/svelte.test.d.ts +0 -1
- package/dist/src/__tests__/svelte.test.js +0 -7
- package/dist/src/__tests__/vue.test.d.ts +0 -1
- package/dist/src/__tests__/vue.test.js +0 -7
- package/dist/src/__tests__/webcomponent.test.d.ts +0 -1
- package/dist/src/__tests__/webcomponent.test.js +0 -15
- package/dist/src/constants/function-literal-prefix.d.ts +0 -1
- package/dist/src/constants/function-literal-prefix.js +0 -4
- package/dist/src/generators/qwik/convertMethodToFunction.d.ts +0 -1
- package/dist/src/generators/qwik/convertMethodToFunction.js +0 -161
- package/dist/src/generators/react.d.ts +0 -14
- package/dist/src/generators/solid.d.ts +0 -5
- package/dist/src/helpers/babel-transform.test.d.ts +0 -1
- package/dist/src/helpers/babel-transform.test.js +0 -7
- package/dist/src/helpers/generic-format.test.d.ts +0 -1
- package/dist/src/helpers/generic-format.test.js +0 -8
- package/dist/src/helpers/map-to-attributes.d.ts +0 -2
- package/dist/src/helpers/map-to-attributes.js +0 -19
- package/dist/src/helpers/map-to-css.d.ts +0 -2
- package/dist/src/helpers/map-to-css.js +0 -16
- package/dist/src/helpers/parse-reactive-script.d.ts +0 -7
- package/dist/src/helpers/parse-reactive-script.js +0 -87
- package/dist/src/helpers/remove-surrounding-block.test.d.ts +0 -1
- package/dist/src/helpers/remove-surrounding-block.test.js +0 -9
- package/dist/src/helpers/render-imports.test.d.ts +0 -1
- package/dist/src/helpers/render-imports.test.js +0 -33
- package/dist/src/helpers/replace-idenifiers.d.ts +0 -1
- package/dist/src/helpers/styles/collect-css.test.d.ts +0 -1
- package/dist/src/helpers/styles/collect-css.test.js +0 -18
- package/dist/src/parsers/html.d.ts +0 -0
- package/dist/src/parsers/html.js +0 -2
- package/dist/src/parsers/liquid.d.ts +0 -70
- package/dist/src/parsers/liquid.js +0 -2538
- package/dist/src/types/string-map.d.ts +0 -3
- package/dist/test/qwik/Accordion/high.jsx +0 -0
- package/dist/test/qwik/Accordion/low.jsx +0 -240
- package/dist/test/qwik/Accordion/med.jsx +0 -4
- package/dist/test/qwik/For/high.jsx +0 -0
- package/dist/test/qwik/For/low.jsx +0 -52
- package/dist/test/qwik/For/med.jsx +0 -4
- package/dist/test/qwik/Image/high.js +0 -9
- package/dist/test/qwik/Image/low.js +0 -0
- package/dist/test/qwik/Image/med.js +0 -155
- package/dist/test/qwik/Image.slow/high.js +0 -9
- package/dist/test/qwik/Image.slow/low.js +0 -0
- package/dist/test/qwik/Image.slow/med.js +0 -155
- package/dist/test/qwik/bindings/high.cjs +0 -0
- package/dist/test/qwik/bindings/low.cjs +0 -45
- package/dist/test/qwik/bindings/med.cjs +0 -3
- package/dist/test/qwik/button/high.js +0 -3
- package/dist/test/qwik/button/low.js +0 -25
- package/dist/test/qwik/button/med.js +0 -31
- package/dist/test/qwik/component/bindings/high.jsx +0 -0
- package/dist/test/qwik/component/bindings/low.jsx +0 -104
- package/dist/test/qwik/component/bindings/med.jsx +0 -7
- package/dist/test/qwik/component/component/inputs/high.cjsx +0 -9
- package/dist/test/qwik/component/component/inputs/low.cjsx +0 -0
- package/dist/test/qwik/component/component/inputs/med.cjsx +0 -68
- package/dist/test/qwik/for-loop.bindings/high.cjs +0 -0
- package/dist/test/qwik/for-loop.bindings/low.cjs +0 -56
- package/dist/test/qwik/for-loop.bindings/med.cjs +0 -5
- package/dist/test/qwik/hello_world/stylesheet/high.jsx +0 -0
- package/dist/test/qwik/hello_world/stylesheet/low.jsx +0 -26
- package/dist/test/qwik/hello_world/stylesheet/med.jsx +0 -4
- package/dist/test/qwik/mount/high.cjs +0 -0
- package/dist/test/qwik/mount/low.cjs +0 -47
- package/dist/test/qwik/mount/med.cjs +0 -3
- package/dist/test/qwik/page-with-symbol/high.js +0 -0
- package/dist/test/qwik/page-with-symbol/low.js +0 -33
- package/dist/test/qwik/page-with-symbol/med.js +0 -4
- package/dist/test/qwik/show-hide/high.jsx +0 -9
- package/dist/test/qwik/show-hide/low.jsx +0 -0
- package/dist/test/qwik/show-hide/med.jsx +0 -181
- package/dist/test/qwik/svg/high.js +0 -0
- package/dist/test/qwik/svg/low.js +0 -30
- package/dist/test/qwik/svg/med.js +0 -4
- package/dist/test/qwik/todo/Todo.cjs/high.cjs +0 -19
- package/dist/test/qwik/todo/Todo.cjs/low.cjs +0 -0
- package/dist/test/qwik/todo/Todo.cjs/med.cjs +0 -51
- package/dist/test/qwik/todo/Todo.js/high.js +0 -19
- package/dist/test/qwik/todo/Todo.js/low.js +0 -0
- package/dist/test/qwik/todo/Todo.js/med.js +0 -47
- package/dist/test/qwik/todo/Todo.tsx/high.tsx +0 -19
- package/dist/test/qwik/todo/Todo.tsx/low.tsx +0 -0
- package/dist/test/qwik/todo/Todo.tsx/med.tsx +0 -43
- package/dist/test/qwik/todos/Todo.tsx/high.tsx +0 -7
- package/dist/test/qwik/todos/Todo.tsx/low.tsx +0 -32
- package/dist/test/qwik/todos/Todo.tsx/med.tsx +0 -4
- package/dist/tsconfig.tsbuildinfo +0 -1
|
@@ -1,2538 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __assign = (this && this.__assign) || function () {
|
|
3
|
-
__assign = Object.assign || function(t) {
|
|
4
|
-
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
5
|
-
s = arguments[i];
|
|
6
|
-
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
7
|
-
t[p] = s[p];
|
|
8
|
-
}
|
|
9
|
-
return t;
|
|
10
|
-
};
|
|
11
|
-
return __assign.apply(this, arguments);
|
|
12
|
-
};
|
|
13
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
14
|
-
if (k2 === undefined) k2 = k;
|
|
15
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
16
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
17
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
18
|
-
}
|
|
19
|
-
Object.defineProperty(o, k2, desc);
|
|
20
|
-
}) : (function(o, m, k, k2) {
|
|
21
|
-
if (k2 === undefined) k2 = k;
|
|
22
|
-
o[k2] = m[k];
|
|
23
|
-
}));
|
|
24
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
25
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
26
|
-
}) : function(o, v) {
|
|
27
|
-
o["default"] = v;
|
|
28
|
-
});
|
|
29
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
30
|
-
if (mod && mod.__esModule) return mod;
|
|
31
|
-
var result = {};
|
|
32
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
33
|
-
__setModuleDefault(result, mod);
|
|
34
|
-
return result;
|
|
35
|
-
};
|
|
36
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
37
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
38
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
39
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
40
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
41
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
42
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
43
|
-
});
|
|
44
|
-
};
|
|
45
|
-
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
46
|
-
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
47
|
-
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
48
|
-
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
49
|
-
function step(op) {
|
|
50
|
-
if (f) throw new TypeError("Generator is already executing.");
|
|
51
|
-
while (_) try {
|
|
52
|
-
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
53
|
-
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
54
|
-
switch (op[0]) {
|
|
55
|
-
case 0: case 1: t = op; break;
|
|
56
|
-
case 4: _.label++; return { value: op[1], done: false };
|
|
57
|
-
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
58
|
-
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
59
|
-
default:
|
|
60
|
-
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
61
|
-
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
62
|
-
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
63
|
-
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
64
|
-
if (t[2]) _.ops.pop();
|
|
65
|
-
_.trys.pop(); continue;
|
|
66
|
-
}
|
|
67
|
-
op = body.call(thisArg, _);
|
|
68
|
-
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
69
|
-
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
70
|
-
}
|
|
71
|
-
};
|
|
72
|
-
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
73
|
-
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
74
|
-
if (ar || !(i in from)) {
|
|
75
|
-
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
76
|
-
ar[i] = from[i];
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
return to.concat(ar || Array.prototype.slice.call(from));
|
|
80
|
-
};
|
|
81
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
82
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
83
|
-
};
|
|
84
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
85
|
-
exports.bindingsFromAttrs = exports.htmlToBuilder = exports.liquidToBuilder = exports.preprocessLiquid = exports.tryFormat = exports.htmlDebugString = exports.processedAstToBuilder = exports.htmlAstToBuilder = exports.postProcessBuilderTree = exports.postProcessHtmlAstNodes = exports.separateTagsAndText = exports.htmlToAst = exports.liquidToAst = exports.htmlNodeToBuilder = exports.parsedLiquidToHtml = exports.humanCase = exports.blockToLiquid = exports.getLiquidConditionExpresion = void 0;
|
|
86
|
-
var axios_1 = __importDefault(require("axios"));
|
|
87
|
-
var liquidjs_1 = require("liquidjs");
|
|
88
|
-
var lodash_1 = require("lodash");
|
|
89
|
-
var object_hash_1 = __importDefault(require("object-hash"));
|
|
90
|
-
var htmlParser = __importStar(require("prettier/parser-html"));
|
|
91
|
-
var standalone_1 = require("prettier/standalone");
|
|
92
|
-
var traverse_1 = __importDefault(require("traverse"));
|
|
93
|
-
var compiler = __importStar(require("vue-template-compiler"));
|
|
94
|
-
var fast_clone_1 = require("../helpers/fast-clone");
|
|
95
|
-
var liquid_1 = require("../generators/liquid");
|
|
96
|
-
var map_to_attributes_1 = require("../helpers/map-to-attributes");
|
|
97
|
-
var map_to_css_1 = require("../helpers/map-to-css");
|
|
98
|
-
var __1 = require("..");
|
|
99
|
-
var voidElements = new Set([
|
|
100
|
-
'area',
|
|
101
|
-
'base',
|
|
102
|
-
'br',
|
|
103
|
-
'col',
|
|
104
|
-
'embed',
|
|
105
|
-
'hr',
|
|
106
|
-
'img',
|
|
107
|
-
'input',
|
|
108
|
-
'link',
|
|
109
|
-
'meta',
|
|
110
|
-
'param',
|
|
111
|
-
'source',
|
|
112
|
-
'track',
|
|
113
|
-
'wbr',
|
|
114
|
-
]);
|
|
115
|
-
var sizeNames = ['xsmall', 'small', 'medium', 'large'];
|
|
116
|
-
var sizes = {
|
|
117
|
-
xsmall: {
|
|
118
|
-
min: 0,
|
|
119
|
-
default: 0,
|
|
120
|
-
max: 0,
|
|
121
|
-
},
|
|
122
|
-
small: {
|
|
123
|
-
min: 320,
|
|
124
|
-
default: 321,
|
|
125
|
-
max: 640,
|
|
126
|
-
},
|
|
127
|
-
medium: {
|
|
128
|
-
min: 641,
|
|
129
|
-
default: 642,
|
|
130
|
-
max: 991,
|
|
131
|
-
},
|
|
132
|
-
large: {
|
|
133
|
-
min: 990,
|
|
134
|
-
default: 991,
|
|
135
|
-
max: 1200,
|
|
136
|
-
},
|
|
137
|
-
getWidthForSize: function (size) {
|
|
138
|
-
return this[size].default;
|
|
139
|
-
},
|
|
140
|
-
getSizeForWidth: function (width) {
|
|
141
|
-
for (var _i = 0, sizeNames_1 = sizeNames; _i < sizeNames_1.length; _i++) {
|
|
142
|
-
var size_1 = sizeNames_1[_i];
|
|
143
|
-
var value = this[size_1];
|
|
144
|
-
if (width <= value.max) {
|
|
145
|
-
return size_1;
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
return 'large';
|
|
149
|
-
},
|
|
150
|
-
};
|
|
151
|
-
var isLiquidRender = function (binding) {
|
|
152
|
-
return binding.replace(/\s/g, '').match('.liquid.render');
|
|
153
|
-
};
|
|
154
|
-
var isLiquidConditional = function (binding) {
|
|
155
|
-
return binding.replace(/\s/g, '').match('.liquid.condition');
|
|
156
|
-
};
|
|
157
|
-
var getConditionalAttr = function (value, noEnd) {
|
|
158
|
-
if (noEnd === void 0) { noEnd = false; }
|
|
159
|
-
var closingTag = noEnd ? '' : '{% endif %}';
|
|
160
|
-
return (value
|
|
161
|
-
.split('/*start*/')
|
|
162
|
-
.reverse()
|
|
163
|
-
.filter(function (st) { return st.includes('liquid'); })
|
|
164
|
-
.map(function (statement) { return statement.replace(/`/g, '"'); })
|
|
165
|
-
.map(function (statement) {
|
|
166
|
-
var _a;
|
|
167
|
-
var expression = statement.startsWith('!')
|
|
168
|
-
? 'else'
|
|
169
|
-
: !statement.includes('!')
|
|
170
|
-
? 'if'
|
|
171
|
-
: '';
|
|
172
|
-
var condition = expression === 'if'
|
|
173
|
-
? (_a = statement.match(/context\.(shopify\.)?liquid\.condition\("([^"]*)"/)) === null || _a === void 0 ? void 0 : _a[2]
|
|
174
|
-
: '';
|
|
175
|
-
var index = statement.indexOf('&&');
|
|
176
|
-
var branchValue = index > -1 ? getConditionalAttr(statement.substr(index + 2), true) : getValue(statement);
|
|
177
|
-
if (expression) {
|
|
178
|
-
return "{% ".concat(expression, " ").concat(condition, " %} ").concat(branchValue);
|
|
179
|
-
}
|
|
180
|
-
return branchValue + '{% endif %}';
|
|
181
|
-
})
|
|
182
|
-
.join('') + closingTag);
|
|
183
|
-
};
|
|
184
|
-
var removeShopifyContext = function (str) {
|
|
185
|
-
var usesSingleQuotes = Boolean(str.match(/\.\s*(get|render)\('/));
|
|
186
|
-
if (usesSingleQuotes) {
|
|
187
|
-
return str.replace(/(context|state)\s*\.\s*(shopify\s*\.)?\s*liquid\s*\.\s*(get|render)\s*\(\s*(\\'|')([^']+)(\\'|')\s*.*\)/g, '$5');
|
|
188
|
-
}
|
|
189
|
-
return str.replace(/(context|state)\s*\.\s*(shopify\s*\.)?\s*liquid\s*\.\s*(get|render)\s*\(\s*(\\"|")([^"]+)(\\"|")\s*.*\)/g, '$5');
|
|
190
|
-
};
|
|
191
|
-
var getValue = function (condition) {
|
|
192
|
-
var _a;
|
|
193
|
-
var value = (_a = condition.match(/\? (.*) :/)) === null || _a === void 0 ? void 0 : _a[1];
|
|
194
|
-
if (value) {
|
|
195
|
-
return removeShopifyContext(value.replace(/{{'(.*?)'}}/g, '$1').replace(/'/g, ''));
|
|
196
|
-
}
|
|
197
|
-
};
|
|
198
|
-
/**
|
|
199
|
-
* Extract a liquid expression from our JS structure - i.e. transform
|
|
200
|
-
* "context.shopify.liquid.condition('some | liquid')" to "some | liquid"
|
|
201
|
-
*/
|
|
202
|
-
var getLiquidConditionExpresion = function (expression) {
|
|
203
|
-
var _a;
|
|
204
|
-
var matched = (_a = expression.match(/context\s*\.\s*(shopify\s*\.)?\s*liquid\s*\.\s*condition\s*\(\s*['"]([\s\S]*?)['"]\s*,\s*state\s*\)\s*/i)) === null || _a === void 0 ? void 0 : _a[2];
|
|
205
|
-
return matched || 'null';
|
|
206
|
-
};
|
|
207
|
-
exports.getLiquidConditionExpresion = getLiquidConditionExpresion;
|
|
208
|
-
// TODO: move most or all of this to transformers and functions
|
|
209
|
-
var convertBinding = function (binding, options) {
|
|
210
|
-
var value = binding;
|
|
211
|
-
var isShopifyContext = value.replace(/\s/g, '').includes('.liquid');
|
|
212
|
-
if (!(0, liquid_1.isValidLiquidBinding)(binding)) {
|
|
213
|
-
return '';
|
|
214
|
-
}
|
|
215
|
-
if (isLiquidConditional(value)) {
|
|
216
|
-
value = getConditionalAttr(value);
|
|
217
|
-
}
|
|
218
|
-
else if (isShopifyContext) {
|
|
219
|
-
value = removeShopifyContext(value);
|
|
220
|
-
}
|
|
221
|
-
if (options.looseBindings) {
|
|
222
|
-
// We use state, Shopify uses global vars, so convert
|
|
223
|
-
// state.product.title to {{ product.title}}, etc
|
|
224
|
-
if (value.includes('state.')) {
|
|
225
|
-
value = value.replace(/state\./g, '');
|
|
226
|
-
}
|
|
227
|
-
if (value.includes('context.')) {
|
|
228
|
-
value = value.replace(/context\./g, '');
|
|
229
|
-
}
|
|
230
|
-
}
|
|
231
|
-
return value;
|
|
232
|
-
};
|
|
233
|
-
function blockToLiquid(json, options) {
|
|
234
|
-
var _a, _b, _c, _d;
|
|
235
|
-
if (options === void 0) { options = {}; }
|
|
236
|
-
var block = (0, fast_clone_1.fastClone)(json);
|
|
237
|
-
var bindings = __assign(__assign({}, block.bindings), (_a = block.code) === null || _a === void 0 ? void 0 : _a.bindings);
|
|
238
|
-
var hasInvalidHide = bindings.hide && !(0, liquid_1.isValidLiquidBinding)(bindings.hide);
|
|
239
|
-
var hasInvalidShow = bindings.show && !(0, liquid_1.isValidLiquidBinding)(bindings.show);
|
|
240
|
-
var hasInvalidRepeat = block.repeat && block.repeat.collection && !(0, liquid_1.isValidLiquidBinding)(block.repeat.collection);
|
|
241
|
-
if (hasInvalidHide || hasInvalidShow || hasInvalidRepeat) {
|
|
242
|
-
return '';
|
|
243
|
-
}
|
|
244
|
-
var styles = {};
|
|
245
|
-
if (bindings && !options.static) {
|
|
246
|
-
for (var key in bindings) {
|
|
247
|
-
var binding = bindings[key];
|
|
248
|
-
if (!key || !binding || key === 'hide') {
|
|
249
|
-
continue;
|
|
250
|
-
}
|
|
251
|
-
var value = convertBinding(binding, options);
|
|
252
|
-
var valueString = void 0;
|
|
253
|
-
if (!value) {
|
|
254
|
-
valueString = '';
|
|
255
|
-
}
|
|
256
|
-
else if (isLiquidRender(binding) || isLiquidConditional(binding)) {
|
|
257
|
-
valueString = value;
|
|
258
|
-
}
|
|
259
|
-
else {
|
|
260
|
-
valueString = "{{ ".concat(value, " }}");
|
|
261
|
-
}
|
|
262
|
-
// Preserve default styles for those bound
|
|
263
|
-
if (!value && key.startsWith('style')) {
|
|
264
|
-
continue;
|
|
265
|
-
}
|
|
266
|
-
if (key.startsWith('properties.') || !key.includes('.')) {
|
|
267
|
-
if (!block.properties) {
|
|
268
|
-
block.properties = {};
|
|
269
|
-
}
|
|
270
|
-
var name_1 = key.startsWith('properties.') ? key.replace(/^\s*properties\s*\./, '') : key;
|
|
271
|
-
(0, lodash_1.set)(block.properties, name_1, valueString);
|
|
272
|
-
}
|
|
273
|
-
else if (key.startsWith('component.options.') || key.startsWith('options.')) {
|
|
274
|
-
var name_2 = key.replace(/^.*?options\./, '');
|
|
275
|
-
if (!block.component) {
|
|
276
|
-
continue;
|
|
277
|
-
}
|
|
278
|
-
if (!block.component.options) {
|
|
279
|
-
block.component.options = {};
|
|
280
|
-
}
|
|
281
|
-
(0, lodash_1.set)(block.component.options, name_2, valueString);
|
|
282
|
-
}
|
|
283
|
-
else if (key.startsWith('style.')) {
|
|
284
|
-
var name_3 = key.replace('style.', '');
|
|
285
|
-
(0, lodash_1.set)(styles, name_3, valueString);
|
|
286
|
-
}
|
|
287
|
-
else if (key === 'attr.style') {
|
|
288
|
-
if (!block.properties) {
|
|
289
|
-
block.properties = {};
|
|
290
|
-
}
|
|
291
|
-
(0, lodash_1.set)(block.properties, 'style', valueString);
|
|
292
|
-
}
|
|
293
|
-
}
|
|
294
|
-
}
|
|
295
|
-
// TODO: bindings with {{}} as values
|
|
296
|
-
var css = blockCss(block, options);
|
|
297
|
-
var stylesList = [];
|
|
298
|
-
if ((0, lodash_1.size)(styles)) {
|
|
299
|
-
stylesList.push((0, map_to_css_1.mapToCss)(styles, 0));
|
|
300
|
-
}
|
|
301
|
-
if ((_b = block.properties) === null || _b === void 0 ? void 0 : _b.style) {
|
|
302
|
-
stylesList.push(block.properties.style);
|
|
303
|
-
}
|
|
304
|
-
var bindingClass = ((_c = block.bindings) === null || _c === void 0 ? void 0 : _c.class) && convertBinding(block.bindings.class, options);
|
|
305
|
-
var classes = (0, lodash_1.uniq)([
|
|
306
|
-
// 'builder-block',
|
|
307
|
-
block.id,
|
|
308
|
-
block.class,
|
|
309
|
-
bindingClass,
|
|
310
|
-
(_d = block.properties) === null || _d === void 0 ? void 0 : _d.class,
|
|
311
|
-
]).filter(lodash_1.identity);
|
|
312
|
-
var componentInfo = null;
|
|
313
|
-
var attributes = (0, map_to_attributes_1.mapToAttributes)(__assign(__assign(__assign({}, block.properties), {
|
|
314
|
-
// ['builder-id']: block.id,
|
|
315
|
-
class: classes.join(' ') }), ((0, lodash_1.size)(stylesList) && {
|
|
316
|
-
style: stylesList.join(';'),
|
|
317
|
-
})));
|
|
318
|
-
var tag = block.tagName || (block.properties && block.properties.href ? 'a' : 'div');
|
|
319
|
-
if (options.openingTagOnly) {
|
|
320
|
-
return "<".concat(tag).concat(attributes ? ' ' + attributes : '', ">");
|
|
321
|
-
}
|
|
322
|
-
if (block.component && !componentInfo) {
|
|
323
|
-
console.warn("Could not find component: ".concat(block.component.name));
|
|
324
|
-
}
|
|
325
|
-
var collectionName = block.repeat && (0, lodash_1.last)((block.repeat.collection || '').trim().split('(')[0].trim().split('.'));
|
|
326
|
-
if (collectionName) {
|
|
327
|
-
collectionName = convertBinding(collectionName, options);
|
|
328
|
-
}
|
|
329
|
-
return "\n ".concat(css.trim() ? "<style>".concat(css, "</style>") : '', "\n ").concat(!options.static &&
|
|
330
|
-
block.repeat &&
|
|
331
|
-
block.repeat.collection &&
|
|
332
|
-
(0, liquid_1.isValidLiquidBinding)(block.repeat.collection)
|
|
333
|
-
? "{% for ".concat(block.repeat.itemName || collectionName + '_item', " in ").concat(convertBinding(block.repeat.collection, options), " %}")
|
|
334
|
-
: '', "\n ").concat(!options.static && bindings.hide
|
|
335
|
-
? "{% unless ".concat(!(0, liquid_1.isValidLiquidBinding)(bindings.hide) ? 'false' : convertBinding(bindings.hide, options), " %}")
|
|
336
|
-
: '', "\n ").concat(!options.static && bindings.show
|
|
337
|
-
? "{% if ".concat(!(0, liquid_1.isValidLiquidBinding)(bindings.show) ? 'false' : convertBinding(bindings.show, options), " %}")
|
|
338
|
-
: '', "\n ").concat(!options.static && bindings.hide ? '{% endunless %}' : '', "\n ").concat(!options.static && bindings.show ? '{% endif %}' : '', "\n ").concat(!options.static && block.repeat && block.repeat.collection ? '{% endfor %}' : '', "\n ");
|
|
339
|
-
}
|
|
340
|
-
exports.blockToLiquid = blockToLiquid;
|
|
341
|
-
// TODO: make these core functions and share with react, vue, etc
|
|
342
|
-
// TODO: apply style bindings and default animation
|
|
343
|
-
function blockCss(block, options) {
|
|
344
|
-
if (options === void 0) { options = {}; }
|
|
345
|
-
// TODO: handle style bindings
|
|
346
|
-
var self = block;
|
|
347
|
-
var baseStyles = __assign({}, (self.responsiveStyles && self.responsiveStyles.large));
|
|
348
|
-
var css = options.emailMode
|
|
349
|
-
? ''
|
|
350
|
-
: ".builder-block.".concat(self.id, " {").concat((0, map_to_css_1.mapToCss)(baseStyles), "}");
|
|
351
|
-
var reversedNames = sizeNames.slice().reverse();
|
|
352
|
-
if (self.responsiveStyles) {
|
|
353
|
-
for (var _i = 0, reversedNames_1 = reversedNames; _i < reversedNames_1.length; _i++) {
|
|
354
|
-
var size_2 = reversedNames_1[_i];
|
|
355
|
-
if (options.emailMode && size_2 === 'large') {
|
|
356
|
-
continue;
|
|
357
|
-
}
|
|
358
|
-
if (size_2 !== 'large' &&
|
|
359
|
-
size_2 !== 'xsmall' &&
|
|
360
|
-
self.responsiveStyles[size_2] &&
|
|
361
|
-
Object.keys(self.responsiveStyles[size_2]).length) {
|
|
362
|
-
// TODO: this will not work as expected for a couple things that are handled specially,
|
|
363
|
-
// e.g. width
|
|
364
|
-
css += "\n@media only screen and (max-width: ".concat(sizes[size_2].max, "px) { \n").concat(options.emailMode ? '.' : '.builder-block.').concat(self.id + (options.emailMode ? '-subject' : ''), " {").concat((0, map_to_css_1.mapToCss)(self.responsiveStyles[size_2], 4, options.emailMode), " } }");
|
|
365
|
-
}
|
|
366
|
-
}
|
|
367
|
-
}
|
|
368
|
-
return css;
|
|
369
|
-
}
|
|
370
|
-
function humanCase(str) {
|
|
371
|
-
return (0, lodash_1.capitalize)((0, lodash_1.kebabCase)(str).replace(/[- ]+/g, ' ').trim());
|
|
372
|
-
}
|
|
373
|
-
exports.humanCase = humanCase;
|
|
374
|
-
var setupCache = require('axios-cache-adapter/dist/cache.node.js').setupCache;
|
|
375
|
-
var axiosCache = setupCache({
|
|
376
|
-
exclude: { query: false },
|
|
377
|
-
});
|
|
378
|
-
// Webpack workaround to conditionally require certain external modules
|
|
379
|
-
// only on the server and not bundle them on the client
|
|
380
|
-
var serverOnlyRequire;
|
|
381
|
-
try {
|
|
382
|
-
// tslint:disable-next-line:no-eval
|
|
383
|
-
serverOnlyRequire = eval('require');
|
|
384
|
-
}
|
|
385
|
-
catch (err) {
|
|
386
|
-
// all good
|
|
387
|
-
serverOnlyRequire = (function () { return null; });
|
|
388
|
-
}
|
|
389
|
-
var http = serverOnlyRequire('http');
|
|
390
|
-
var https = serverOnlyRequire('https');
|
|
391
|
-
var httpAgent = (http && new http.Agent({ keepAlive: true })) || undefined;
|
|
392
|
-
var httpsAgent = (https && new https.Agent({ keepAlive: true })) || undefined;
|
|
393
|
-
var serializedBlockTagName = 'builder-serialized-block';
|
|
394
|
-
var serializedBlockCloseTag = "</".concat(serializedBlockTagName, ">");
|
|
395
|
-
var serializeBlock = function (el, close) {
|
|
396
|
-
if (close === void 0) { close = true; }
|
|
397
|
-
var str = "<".concat(serializedBlockTagName, " block='").concat(htmlEncode(JSON.stringify(el)), "'>");
|
|
398
|
-
if (close) {
|
|
399
|
-
str += serializedBlockCloseTag;
|
|
400
|
-
}
|
|
401
|
-
return str;
|
|
402
|
-
};
|
|
403
|
-
// returns a new object from soource with a new array for each key (e.g blocks) that has key_order (e.g block_order)
|
|
404
|
-
var mapArrays = function (source) {
|
|
405
|
-
if (!source) {
|
|
406
|
-
return source;
|
|
407
|
-
}
|
|
408
|
-
var newArrays = Object.keys(source).reduce(function (acc, key) {
|
|
409
|
-
var _a;
|
|
410
|
-
var orderKey = "".concat(key.slice(0, -1), "_order");
|
|
411
|
-
if (source[orderKey]) {
|
|
412
|
-
return __assign((_a = {}, _a[key] = source[orderKey].map(function (id) { return source[key][id]; }), _a), acc);
|
|
413
|
-
}
|
|
414
|
-
return acc;
|
|
415
|
-
}, {});
|
|
416
|
-
return __assign(__assign({}, source), newArrays);
|
|
417
|
-
};
|
|
418
|
-
// Create `axios` instance passing the newly created `cache.adapter`
|
|
419
|
-
var axios = axios_1.default.create({
|
|
420
|
-
httpAgent: httpAgent,
|
|
421
|
-
httpsAgent: httpsAgent,
|
|
422
|
-
timeout: 30000,
|
|
423
|
-
adapter: axiosCache.adapter,
|
|
424
|
-
});
|
|
425
|
-
var isSerializedBlock = function (str) {
|
|
426
|
-
return str.includes("<".concat(serializedBlockTagName));
|
|
427
|
-
};
|
|
428
|
-
var deserializeBlock = function (str) {
|
|
429
|
-
var parts = [];
|
|
430
|
-
var attribute = str;
|
|
431
|
-
var matches = str.match(/<builder-serialized-block block='([^']*)'/);
|
|
432
|
-
while (matches === null || matches === void 0 ? void 0 : matches[1]) {
|
|
433
|
-
parts.push(attribute.substring(0, matches.index));
|
|
434
|
-
parts.push(blockToLiquid(JSON.parse(htmlDecode(matches[1])), {
|
|
435
|
-
componentOnly: true,
|
|
436
|
-
}));
|
|
437
|
-
attribute = attribute.substring(matches.index + matches[0].length + serializedBlockCloseTag.length + 1);
|
|
438
|
-
matches = attribute.match(/<builder-serialized-block block='([^']*)'/);
|
|
439
|
-
}
|
|
440
|
-
return parts.join('');
|
|
441
|
-
};
|
|
442
|
-
var stringWithBindingsToLiquid = function (str) {
|
|
443
|
-
var separated = (0, exports.separateTagsAndText)(str).map(function (item) { return item.text; });
|
|
444
|
-
var liquidStr = '';
|
|
445
|
-
var _loop_1 = function (item) {
|
|
446
|
-
var tag = parseTag(item);
|
|
447
|
-
if (tag && tag.value) {
|
|
448
|
-
try {
|
|
449
|
-
var parsedValue = JSON.parse(tag.value);
|
|
450
|
-
if (parsedValue.fullRaw) {
|
|
451
|
-
liquidStr += parsedValue.fullRaw;
|
|
452
|
-
}
|
|
453
|
-
else {
|
|
454
|
-
console.warn('Tag missing fullRaw', tag);
|
|
455
|
-
}
|
|
456
|
-
}
|
|
457
|
-
catch (err) {
|
|
458
|
-
console.error('Could not parse tag value', tag, err);
|
|
459
|
-
}
|
|
460
|
-
}
|
|
461
|
-
else if (isSerializedBlock(item)) {
|
|
462
|
-
var block = (0, lodash_1.attempt)(function () { return deserializeBlock(item); });
|
|
463
|
-
if (!(0, lodash_1.isError)(block)) {
|
|
464
|
-
liquidStr += block;
|
|
465
|
-
}
|
|
466
|
-
else {
|
|
467
|
-
console.warn('Error deserializing binding to liquid ', block);
|
|
468
|
-
}
|
|
469
|
-
}
|
|
470
|
-
else {
|
|
471
|
-
liquidStr += item;
|
|
472
|
-
}
|
|
473
|
-
};
|
|
474
|
-
for (var _i = 0, separated_1 = separated; _i < separated_1.length; _i++) {
|
|
475
|
-
var item = separated_1[_i];
|
|
476
|
-
_loop_1(item);
|
|
477
|
-
}
|
|
478
|
-
return liquidStr;
|
|
479
|
-
};
|
|
480
|
-
var isSimpleLiquidBinding = function (str) {
|
|
481
|
-
if (str === void 0) { str = ''; }
|
|
482
|
-
return Boolean(str.match(/^[a-z0-9_\.\s]+$/i));
|
|
483
|
-
};
|
|
484
|
-
var liquidBindingTemplate = function (str) {
|
|
485
|
-
return isSimpleLiquidBinding(str)
|
|
486
|
-
? str
|
|
487
|
-
: "liquid.get(\"".concat(str.replace(/\n+/g, ' ').replace(/"/g, '\\"'), "\")");
|
|
488
|
-
};
|
|
489
|
-
var liquidRenderTemplate = function (str) {
|
|
490
|
-
return isSimpleLiquidBinding(str) ? str : "liquid(\"".concat(str.replace(/\n+/g, ' ').replace(/"/g, '\\"'), "\")");
|
|
491
|
-
};
|
|
492
|
-
var liquidConditionTemplate = function (str) {
|
|
493
|
-
return isSimpleLiquidBinding(str) ? str : "liquid(\"".concat(str.replace(/\n+/g, ' ').replace(/"/g, '\\"'), "\")");
|
|
494
|
-
};
|
|
495
|
-
var isIfTemplate = function (template) {
|
|
496
|
-
return template.token.type === 'tag' && template.token.name === 'if';
|
|
497
|
-
};
|
|
498
|
-
var isUnlessTemplate = function (template) {
|
|
499
|
-
return template.token.type === 'tag' && template.token.name === 'unless';
|
|
500
|
-
};
|
|
501
|
-
var isForTemplate = function (template) {
|
|
502
|
-
return template.token.type === 'tag' && template.token.name === 'for';
|
|
503
|
-
};
|
|
504
|
-
var isBlockTemplate = function (template) {
|
|
505
|
-
return template.token.type === 'tag' && template.token.name === 'for';
|
|
506
|
-
};
|
|
507
|
-
var isHtmlTemplate = function (template) {
|
|
508
|
-
return template.token.type === 'html';
|
|
509
|
-
};
|
|
510
|
-
var isCaseTemplate = function (template) {
|
|
511
|
-
return template.token.type === 'tag' && template.token.name === 'case';
|
|
512
|
-
};
|
|
513
|
-
var isOutputTemplate = function (template) {
|
|
514
|
-
return template.token.type === 'output';
|
|
515
|
-
};
|
|
516
|
-
var isElement = function (node) { return node.type === 1; };
|
|
517
|
-
var isTextNode = function (node) {
|
|
518
|
-
return node.type === 3 || node.type === 2;
|
|
519
|
-
};
|
|
520
|
-
// Custom common HTML symbol encoding so not to confuse with actual encoded HTML
|
|
521
|
-
var htmlEncode = function (html) { return html.replace(/'/g, '_APOS_').replace(/"/g, '_QUOT_'); };
|
|
522
|
-
var htmlDecode = function (html) { return html.replace(/_APOS_/g, "'").replace(/_QUOT_/g, '"'); };
|
|
523
|
-
var createHtmlAttribute = function (attribute, attributeValue) {
|
|
524
|
-
if (attributeValue === void 0) { attributeValue = null; }
|
|
525
|
-
var encodedValue = '';
|
|
526
|
-
if (attributeValue) {
|
|
527
|
-
encodedValue = "='".concat(htmlEncode(JSON.stringify(attributeValue)), "'");
|
|
528
|
-
}
|
|
529
|
-
return "[".concat(attribute, "]").concat(encodedValue);
|
|
530
|
-
};
|
|
531
|
-
var COMMA_TOKEN = '__bldr_comma__';
|
|
532
|
-
var parseArgList = function (args) {
|
|
533
|
-
return args
|
|
534
|
-
// find all the string arguments (wrapped with ' or "), then replace any commas
|
|
535
|
-
// this allows us to split the args on "," without worrying about breaking any strings
|
|
536
|
-
.replace(/('[^']*'|"[^"]*")/g, function (str) { return str.replace(/,/g, COMMA_TOKEN); })
|
|
537
|
-
.split(',')
|
|
538
|
-
// now that we the arg list is broken up, we can re-add the escaped commas to each item
|
|
539
|
-
.map(function (item) { return item.replace(new RegExp(COMMA_TOKEN, 'g'), ',').trim(); });
|
|
540
|
-
};
|
|
541
|
-
var errorLinesRe = /\((\d*):(\d*)\)/;
|
|
542
|
-
var getErrorInfo = function (message) {
|
|
543
|
-
var matched = message.match(errorLinesRe);
|
|
544
|
-
return (matched && {
|
|
545
|
-
line: matched[1],
|
|
546
|
-
col: matched[2],
|
|
547
|
-
});
|
|
548
|
-
};
|
|
549
|
-
var getSubstringTill = function (col, line, str) {
|
|
550
|
-
var lines = str.split('\n');
|
|
551
|
-
return lines.slice(0, line - 1).join('\n') + lines[line - 1].substring(0, col - 1);
|
|
552
|
-
};
|
|
553
|
-
var transpileUnlessToIf = function (unlessTemplate) {
|
|
554
|
-
var cond = unlessTemplate.impl.cond;
|
|
555
|
-
var value = "if ".concat(cond);
|
|
556
|
-
var raw = "{% ".concat(value, " %}");
|
|
557
|
-
return __assign(__assign({}, unlessTemplate), { impl: {
|
|
558
|
-
branches: [
|
|
559
|
-
{
|
|
560
|
-
negate: true,
|
|
561
|
-
cond: cond,
|
|
562
|
-
templates: unlessTemplate.impl.templates,
|
|
563
|
-
},
|
|
564
|
-
],
|
|
565
|
-
elseTemplates: unlessTemplate.impl.elseTemplates,
|
|
566
|
-
}, token: __assign(__assign({}, unlessTemplate.token), { raw: raw, value: value }) });
|
|
567
|
-
};
|
|
568
|
-
var parsedLiquidToHtml = function (templates, options) { return __awaiter(void 0, void 0, void 0, function () {
|
|
569
|
-
function processTemplate(template, priorConditions) {
|
|
570
|
-
var _a;
|
|
571
|
-
if (priorConditions === void 0) { priorConditions = []; }
|
|
572
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
573
|
-
var psuedoTemplate, currentConditions, isInsideAttribute, index, item, _i, _b, tpl, _c, _d, _e, tpl, _f, firstCond, index, item, condition, _g, _h, tpl, _j, _k, tpl, _l, _m, tpl, _o, _p, tpl, name_4, args, _q, _r, tpl, block, rawExpression, _s, _t, templateToken, _u, _v, rawToken, block, parsedSchema, liquidTagStringPieces, wrappedLiquidTags, _w, _x, _y, matched, path, currentAsset, schemaObject, schemaDefault, defaultSchemaObject_1, rawSchemaObject, sectionSettingsState, _z, _0, _1, name_5, path, directory, keyValsRe, assigns_1, assignString, key, auth, themeId, publicKey, token, currentAsset, value, _2, _3, _4, _5, _6, tpl, args_1, cycleGroup, argList, newHtml, i, _7, _8, _9;
|
|
574
|
-
return __generator(this, function (_10) {
|
|
575
|
-
switch (_10.label) {
|
|
576
|
-
case 0:
|
|
577
|
-
if (!isHtmlTemplate(template)) return [3 /*break*/, 1];
|
|
578
|
-
html += template.str;
|
|
579
|
-
return [3 /*break*/, 84];
|
|
580
|
-
case 1:
|
|
581
|
-
if (!(isIfTemplate(template) || isUnlessTemplate(template))) return [3 /*break*/, 18];
|
|
582
|
-
psuedoTemplate = isIfTemplate(template)
|
|
583
|
-
? template
|
|
584
|
-
: transpileUnlessToIf(template);
|
|
585
|
-
currentConditions = priorConditions.concat({
|
|
586
|
-
expression: psuedoTemplate.token.raw,
|
|
587
|
-
negate: isUnlessTemplate(template),
|
|
588
|
-
});
|
|
589
|
-
isInsideAttribute = new RegExp("<[^>]*".concat(template.token.value)).test(template.token.input);
|
|
590
|
-
index = 0;
|
|
591
|
-
_10.label = 2;
|
|
592
|
-
case 2:
|
|
593
|
-
if (!(index < psuedoTemplate.impl.branches.length)) return [3 /*break*/, 10];
|
|
594
|
-
item = psuedoTemplate.impl.branches[index];
|
|
595
|
-
if (index === 0) {
|
|
596
|
-
html += createHtmlAttribute('if', __assign(__assign({ fullRaw: psuedoTemplate.token.raw, cond: item.cond }, (item.negate && { negate: true })), { hash: (0, object_hash_1.default)(currentConditions) }));
|
|
597
|
-
}
|
|
598
|
-
else {
|
|
599
|
-
html += createHtmlAttribute('elsif', {
|
|
600
|
-
fullRaw: "{% elsif ".concat(item.cond, " %}"),
|
|
601
|
-
cond: item.cond,
|
|
602
|
-
hash: (0, object_hash_1.default)(currentConditions),
|
|
603
|
-
});
|
|
604
|
-
}
|
|
605
|
-
if (!isInsideAttribute) return [3 /*break*/, 7];
|
|
606
|
-
_i = 0, _b = item.templates;
|
|
607
|
-
_10.label = 3;
|
|
608
|
-
case 3:
|
|
609
|
-
if (!(_i < _b.length)) return [3 /*break*/, 6];
|
|
610
|
-
tpl = _b[_i];
|
|
611
|
-
return [4 /*yield*/, processTemplate(tpl, currentConditions)];
|
|
612
|
-
case 4:
|
|
613
|
-
_10.sent();
|
|
614
|
-
_10.label = 5;
|
|
615
|
-
case 5:
|
|
616
|
-
_i++;
|
|
617
|
-
return [3 /*break*/, 3];
|
|
618
|
-
case 6: return [3 /*break*/, 9];
|
|
619
|
-
case 7:
|
|
620
|
-
_c = html;
|
|
621
|
-
return [4 /*yield*/, processInnerTemplates(item.templates, options, currentConditions)];
|
|
622
|
-
case 8:
|
|
623
|
-
html = _c + _10.sent();
|
|
624
|
-
_10.label = 9;
|
|
625
|
-
case 9:
|
|
626
|
-
index++;
|
|
627
|
-
return [3 /*break*/, 2];
|
|
628
|
-
case 10:
|
|
629
|
-
if (!(psuedoTemplate.impl.elseTemplates && psuedoTemplate.impl.elseTemplates.length)) return [3 /*break*/, 17];
|
|
630
|
-
html += createHtmlAttribute('else', {
|
|
631
|
-
fullRaw: '{% else %}',
|
|
632
|
-
});
|
|
633
|
-
if (!isInsideAttribute) return [3 /*break*/, 15];
|
|
634
|
-
_d = 0, _e = psuedoTemplate.impl.elseTemplates;
|
|
635
|
-
_10.label = 11;
|
|
636
|
-
case 11:
|
|
637
|
-
if (!(_d < _e.length)) return [3 /*break*/, 14];
|
|
638
|
-
tpl = _e[_d];
|
|
639
|
-
return [4 /*yield*/, processTemplate(tpl)];
|
|
640
|
-
case 12:
|
|
641
|
-
_10.sent();
|
|
642
|
-
_10.label = 13;
|
|
643
|
-
case 13:
|
|
644
|
-
_d++;
|
|
645
|
-
return [3 /*break*/, 11];
|
|
646
|
-
case 14: return [3 /*break*/, 17];
|
|
647
|
-
case 15:
|
|
648
|
-
_f = html;
|
|
649
|
-
return [4 /*yield*/, processInnerTemplates(psuedoTemplate.impl.elseTemplates, options, priorConditions.concat({
|
|
650
|
-
expression: psuedoTemplate.token.raw,
|
|
651
|
-
negate: !isUnlessTemplate(template),
|
|
652
|
-
}), (0, object_hash_1.default)(currentConditions))];
|
|
653
|
-
case 16:
|
|
654
|
-
html = _f + _10.sent();
|
|
655
|
-
_10.label = 17;
|
|
656
|
-
case 17:
|
|
657
|
-
html += createHtmlAttribute('endif', {
|
|
658
|
-
fullRaw: "{% endif %}",
|
|
659
|
-
});
|
|
660
|
-
return [3 /*break*/, 84];
|
|
661
|
-
case 18:
|
|
662
|
-
if (!isCaseTemplate(template)) return [3 /*break*/, 34];
|
|
663
|
-
firstCond = '';
|
|
664
|
-
index = 0;
|
|
665
|
-
_10.label = 19;
|
|
666
|
-
case 19:
|
|
667
|
-
if (!(index < template.impl.cases.length)) return [3 /*break*/, 29];
|
|
668
|
-
item = template.impl.cases[index];
|
|
669
|
-
condition = "".concat(template.impl.cond, " == ").concat(item.val);
|
|
670
|
-
if (!(index === 0)) return [3 /*break*/, 24];
|
|
671
|
-
firstCond = condition;
|
|
672
|
-
html += createHtmlAttribute('if', {
|
|
673
|
-
fullRaw: "{% if ".concat(condition, " %}"),
|
|
674
|
-
cond: condition,
|
|
675
|
-
hash: (0, object_hash_1.default)(condition),
|
|
676
|
-
});
|
|
677
|
-
_g = 0, _h = item.templates;
|
|
678
|
-
_10.label = 20;
|
|
679
|
-
case 20:
|
|
680
|
-
if (!(_g < _h.length)) return [3 /*break*/, 23];
|
|
681
|
-
tpl = _h[_g];
|
|
682
|
-
return [4 /*yield*/, processTemplate(tpl)];
|
|
683
|
-
case 21:
|
|
684
|
-
_10.sent();
|
|
685
|
-
_10.label = 22;
|
|
686
|
-
case 22:
|
|
687
|
-
_g++;
|
|
688
|
-
return [3 /*break*/, 20];
|
|
689
|
-
case 23: return [3 /*break*/, 28];
|
|
690
|
-
case 24:
|
|
691
|
-
html += createHtmlAttribute('elsif', {
|
|
692
|
-
fullRaw: "{% elsif ".concat(condition, " %}"),
|
|
693
|
-
cond: condition,
|
|
694
|
-
hash: (0, object_hash_1.default)(firstCond),
|
|
695
|
-
});
|
|
696
|
-
_j = 0, _k = item.templates;
|
|
697
|
-
_10.label = 25;
|
|
698
|
-
case 25:
|
|
699
|
-
if (!(_j < _k.length)) return [3 /*break*/, 28];
|
|
700
|
-
tpl = _k[_j];
|
|
701
|
-
return [4 /*yield*/, processTemplate(tpl)];
|
|
702
|
-
case 26:
|
|
703
|
-
_10.sent();
|
|
704
|
-
_10.label = 27;
|
|
705
|
-
case 27:
|
|
706
|
-
_j++;
|
|
707
|
-
return [3 /*break*/, 25];
|
|
708
|
-
case 28:
|
|
709
|
-
index++;
|
|
710
|
-
return [3 /*break*/, 19];
|
|
711
|
-
case 29:
|
|
712
|
-
if (!(template.impl.elseTemplates && template.impl.elseTemplates.length)) return [3 /*break*/, 33];
|
|
713
|
-
html += createHtmlAttribute('else', {
|
|
714
|
-
fullRaw: '{% else %}',
|
|
715
|
-
hash: (0, object_hash_1.default)(firstCond),
|
|
716
|
-
});
|
|
717
|
-
_l = 0, _m = template.impl.elseTemplates;
|
|
718
|
-
_10.label = 30;
|
|
719
|
-
case 30:
|
|
720
|
-
if (!(_l < _m.length)) return [3 /*break*/, 33];
|
|
721
|
-
tpl = _m[_l];
|
|
722
|
-
return [4 /*yield*/, processTemplate(tpl)];
|
|
723
|
-
case 31:
|
|
724
|
-
_10.sent();
|
|
725
|
-
_10.label = 32;
|
|
726
|
-
case 32:
|
|
727
|
-
_l++;
|
|
728
|
-
return [3 /*break*/, 30];
|
|
729
|
-
case 33:
|
|
730
|
-
html += createHtmlAttribute('endif', {
|
|
731
|
-
fullRaw: "{% endif %}",
|
|
732
|
-
});
|
|
733
|
-
return [3 /*break*/, 84];
|
|
734
|
-
case 34:
|
|
735
|
-
if (!isForTemplate(template)) return [3 /*break*/, 39];
|
|
736
|
-
html += createHtmlAttribute('for', __assign(__assign({}, template.impl), { fullRaw: template.token.raw, templates: undefined, elseTemplates: undefined, liquid: undefined }));
|
|
737
|
-
_o = 0, _p = template.impl.templates;
|
|
738
|
-
_10.label = 35;
|
|
739
|
-
case 35:
|
|
740
|
-
if (!(_o < _p.length)) return [3 /*break*/, 38];
|
|
741
|
-
tpl = _p[_o];
|
|
742
|
-
return [4 /*yield*/, processTemplate(tpl)];
|
|
743
|
-
case 36:
|
|
744
|
-
_10.sent();
|
|
745
|
-
_10.label = 37;
|
|
746
|
-
case 37:
|
|
747
|
-
_o++;
|
|
748
|
-
return [3 /*break*/, 35];
|
|
749
|
-
case 38:
|
|
750
|
-
html += createHtmlAttribute('endfor', {
|
|
751
|
-
fullRaw: "{% endfor %}",
|
|
752
|
-
});
|
|
753
|
-
return [3 /*break*/, 84];
|
|
754
|
-
case 39:
|
|
755
|
-
if (!isOutputTemplate(template)) return [3 /*break*/, 40];
|
|
756
|
-
html += createHtmlAttribute('output', __assign(__assign({}, template.value), { raw: template.token.value, fullRaw: "{{".concat(template.token.value, "}}") }));
|
|
757
|
-
return [3 /*break*/, 84];
|
|
758
|
-
case 40:
|
|
759
|
-
name_4 = template.name || '';
|
|
760
|
-
args = template.token.args || '';
|
|
761
|
-
if (!(name_4 === 'form')) return [3 /*break*/, 45];
|
|
762
|
-
html += createHtmlAttribute('form', __assign(__assign({}, template.impl), { fullRaw: template.token.raw, templates: undefined, elseTemplates: undefined, liquid: undefined }));
|
|
763
|
-
_q = 0, _r = template.impl.templates;
|
|
764
|
-
_10.label = 41;
|
|
765
|
-
case 41:
|
|
766
|
-
if (!(_q < _r.length)) return [3 /*break*/, 44];
|
|
767
|
-
tpl = _r[_q];
|
|
768
|
-
return [4 /*yield*/, processTemplate(tpl)];
|
|
769
|
-
case 42:
|
|
770
|
-
_10.sent();
|
|
771
|
-
_10.label = 43;
|
|
772
|
-
case 43:
|
|
773
|
-
_q++;
|
|
774
|
-
return [3 /*break*/, 41];
|
|
775
|
-
case 44:
|
|
776
|
-
html += createHtmlAttribute('endform', {
|
|
777
|
-
fullRaw: "{% endform %}",
|
|
778
|
-
});
|
|
779
|
-
return [3 /*break*/, 84];
|
|
780
|
-
case 45:
|
|
781
|
-
if (!(name_4 === 'assign')) return [3 /*break*/, 46];
|
|
782
|
-
block = {
|
|
783
|
-
component: {
|
|
784
|
-
name: 'Shopify:Assign',
|
|
785
|
-
options: {
|
|
786
|
-
expression: args || '',
|
|
787
|
-
},
|
|
788
|
-
},
|
|
789
|
-
};
|
|
790
|
-
html += serializeBlock(block);
|
|
791
|
-
return [3 /*break*/, 84];
|
|
792
|
-
case 46:
|
|
793
|
-
if (!(name_4 === 'capture')) return [3 /*break*/, 47];
|
|
794
|
-
rawExpression = '';
|
|
795
|
-
for (_s = 0, _t = template.impl.templates; _s < _t.length; _s++) {
|
|
796
|
-
templateToken = _t[_s];
|
|
797
|
-
if (templateToken.name === 'raw' && ((_a = templateToken.impl) === null || _a === void 0 ? void 0 : _a.tokens)) {
|
|
798
|
-
for (_u = 0, _v = templateToken.impl.tokens; _u < _v.length; _u++) {
|
|
799
|
-
rawToken = _v[_u];
|
|
800
|
-
rawExpression += rawToken.raw;
|
|
801
|
-
}
|
|
802
|
-
}
|
|
803
|
-
else {
|
|
804
|
-
rawExpression += templateToken.token.raw;
|
|
805
|
-
}
|
|
806
|
-
}
|
|
807
|
-
block = {
|
|
808
|
-
component: {
|
|
809
|
-
name: 'Shopify:Capture',
|
|
810
|
-
options: {
|
|
811
|
-
variableName: args,
|
|
812
|
-
expression: rawExpression.trim(),
|
|
813
|
-
},
|
|
814
|
-
},
|
|
815
|
-
};
|
|
816
|
-
html += serializeBlock(block);
|
|
817
|
-
return [3 /*break*/, 84];
|
|
818
|
-
case 47:
|
|
819
|
-
if (!(name_4 === 'schema')) return [3 /*break*/, 48];
|
|
820
|
-
parsedSchema = JSON.parse(template.impl.templates[0].token.value.replace(/\\n/g, ''));
|
|
821
|
-
html += serializeBlock({
|
|
822
|
-
layerName: "Schema",
|
|
823
|
-
component: {
|
|
824
|
-
name: 'Builder:StateProvider',
|
|
825
|
-
options: parsedSchema,
|
|
826
|
-
},
|
|
827
|
-
});
|
|
828
|
-
return [3 /*break*/, 84];
|
|
829
|
-
case 48:
|
|
830
|
-
if (!(name_4 === 'comment')) return [3 /*break*/, 49];
|
|
831
|
-
return [3 /*break*/, 84];
|
|
832
|
-
case 49:
|
|
833
|
-
if (!(name_4 === 'liquid')) return [3 /*break*/, 53];
|
|
834
|
-
liquidTagStringPieces = args
|
|
835
|
-
.trim()
|
|
836
|
-
.replace(/^liquid/gi, '')
|
|
837
|
-
.split('\n');
|
|
838
|
-
wrappedLiquidTags = liquidTagStringPieces
|
|
839
|
-
.map(function (unwrappedTag) {
|
|
840
|
-
var trimmedTag = unwrappedTag.trim();
|
|
841
|
-
if (trimmedTag) {
|
|
842
|
-
return "{% ".concat(trimmedTag, " %}");
|
|
843
|
-
}
|
|
844
|
-
return null;
|
|
845
|
-
})
|
|
846
|
-
.filter(function (liquidTag) { return !!liquidTag; });
|
|
847
|
-
_w = html;
|
|
848
|
-
_x = exports.parsedLiquidToHtml;
|
|
849
|
-
_y = exports.liquidToAst;
|
|
850
|
-
return [4 /*yield*/, (0, exports.preprocessLiquid)(wrappedLiquidTags.join(''))];
|
|
851
|
-
case 50: return [4 /*yield*/, _y.apply(void 0, [_10.sent(), options])];
|
|
852
|
-
case 51: return [4 /*yield*/, _x.apply(void 0, [_10.sent(), options])];
|
|
853
|
-
case 52:
|
|
854
|
-
html = _w + _10.sent();
|
|
855
|
-
return [3 /*break*/, 84];
|
|
856
|
-
case 53:
|
|
857
|
-
if (!(name_4 === 'javascript')) return [3 /*break*/, 54];
|
|
858
|
-
return [3 /*break*/, 84];
|
|
859
|
-
case 54:
|
|
860
|
-
if (!(name_4 === 'stylesheet')) return [3 /*break*/, 55];
|
|
861
|
-
return [3 /*break*/, 84];
|
|
862
|
-
case 55:
|
|
863
|
-
if (!(name_4 === 'section')) return [3 /*break*/, 66];
|
|
864
|
-
matched = args.match(/['"]([^'"]+)['"]/);
|
|
865
|
-
path = matched && matched[1];
|
|
866
|
-
if (!path) return [3 /*break*/, 64];
|
|
867
|
-
return [4 /*yield*/, getShopifyAsset("sections/".concat(path, ".liquid"), options)];
|
|
868
|
-
case 56:
|
|
869
|
-
currentAsset = _10.sent();
|
|
870
|
-
if (!(currentAsset && !(0, lodash_1.isError)(currentAsset) && themeSettings && !(0, lodash_1.isError)(themeSettings))) return [3 /*break*/, 62];
|
|
871
|
-
schemaObject = {};
|
|
872
|
-
schemaDefault = currentAsset.match(/{%-? schema -?%}([\s\S]*?){%-? endschema -?%}/);
|
|
873
|
-
defaultSchemaObject_1 = {};
|
|
874
|
-
if (schemaDefault === null || schemaDefault === void 0 ? void 0 : schemaDefault.length) {
|
|
875
|
-
try {
|
|
876
|
-
rawSchemaObject = JSON.parse(schemaDefault[1].trim());
|
|
877
|
-
schemaObject = rawSchemaObject;
|
|
878
|
-
rawSchemaObject.settings.forEach(function (setting) {
|
|
879
|
-
defaultSchemaObject_1[setting.id] = setting.default;
|
|
880
|
-
});
|
|
881
|
-
}
|
|
882
|
-
catch (e) {
|
|
883
|
-
console.error('Failed to parse schema.', e);
|
|
884
|
-
}
|
|
885
|
-
}
|
|
886
|
-
if (!themeSettings.current.sections[path]) {
|
|
887
|
-
themeSettings.current.sections[path] = {};
|
|
888
|
-
}
|
|
889
|
-
sectionSettingsState = Object.assign({}, defaultSchemaObject_1, themeSettings.current.sections[path].settings);
|
|
890
|
-
themeSettings.current.sections[path].settings = sectionSettingsState;
|
|
891
|
-
if (!(options.importSections === false)) return [3 /*break*/, 57];
|
|
892
|
-
html += serializeBlock(__assign(__assign({ layerName: "".concat(humanCase(path.replace('-template', '')), " section"), component: {
|
|
893
|
-
name: 'Shopify:SectionRef',
|
|
894
|
-
options: {
|
|
895
|
-
section: "sections/".concat(path, ".liquid"),
|
|
896
|
-
},
|
|
897
|
-
} }, ((path === 'product-template' || path === 'product') && {
|
|
898
|
-
properties: {
|
|
899
|
-
'data-slot': 'shopify:productPage',
|
|
900
|
-
},
|
|
901
|
-
})), ((path === 'collection-template' || path === 'collection') && {
|
|
902
|
-
properties: {
|
|
903
|
-
'data-slot': 'shopify:collectionPage',
|
|
904
|
-
},
|
|
905
|
-
})));
|
|
906
|
-
return [3 /*break*/, 61];
|
|
907
|
-
case 57:
|
|
908
|
-
html += serializeBlock({
|
|
909
|
-
layerName: "Section: sections/".concat(path, ".liquid"),
|
|
910
|
-
meta: {
|
|
911
|
-
identifier: 'ShopifySection',
|
|
912
|
-
},
|
|
913
|
-
component: {
|
|
914
|
-
name: 'Shopify:Section',
|
|
915
|
-
options: {
|
|
916
|
-
template: path,
|
|
917
|
-
shopifyMetafields: [
|
|
918
|
-
{
|
|
919
|
-
path: 'state.section',
|
|
920
|
-
as: "_section_".concat((0, lodash_1.snakeCase)(path)),
|
|
921
|
-
},
|
|
922
|
-
],
|
|
923
|
-
state: {
|
|
924
|
-
section: mapArrays(themeSettings.current.sections[path]),
|
|
925
|
-
_sourceFile: "sections/".concat(path, ".liquid"),
|
|
926
|
-
},
|
|
927
|
-
},
|
|
928
|
-
},
|
|
929
|
-
}, false);
|
|
930
|
-
_z = html;
|
|
931
|
-
_0 = exports.parsedLiquidToHtml;
|
|
932
|
-
_1 = exports.liquidToAst;
|
|
933
|
-
return [4 /*yield*/, (0, exports.preprocessLiquid)(currentAsset)];
|
|
934
|
-
case 58: return [4 /*yield*/, _1.apply(void 0, [_10.sent(), options])];
|
|
935
|
-
case 59: return [4 /*yield*/, _0.apply(void 0, [_10.sent(), options])];
|
|
936
|
-
case 60:
|
|
937
|
-
html = _z + _10.sent();
|
|
938
|
-
html += serializedBlockCloseTag;
|
|
939
|
-
_10.label = 61;
|
|
940
|
-
case 61: return [3 /*break*/, 63];
|
|
941
|
-
case 62:
|
|
942
|
-
// maybe should throw and block the importing ?
|
|
943
|
-
console.warn('Could not get section', currentAsset, template);
|
|
944
|
-
_10.label = 63;
|
|
945
|
-
case 63: return [3 /*break*/, 65];
|
|
946
|
-
case 64:
|
|
947
|
-
console.warn('section with no path ', args);
|
|
948
|
-
_10.label = 65;
|
|
949
|
-
case 65: return [3 /*break*/, 84];
|
|
950
|
-
case 66:
|
|
951
|
-
if (!(name_4 === 'include' || name_4 === 'render')) return [3 /*break*/, 74];
|
|
952
|
-
name_5 = args.match(/['"]([^'"]+)['"]/);
|
|
953
|
-
path = name_5 && name_5[1];
|
|
954
|
-
directory = 'snippets';
|
|
955
|
-
if (!(options.importSnippets === false)) return [3 /*break*/, 67];
|
|
956
|
-
html += serializeBlock({
|
|
957
|
-
meta: {
|
|
958
|
-
importedSnippet: args,
|
|
959
|
-
},
|
|
960
|
-
layerName: "".concat(humanCase(path || ''), " block"),
|
|
961
|
-
tagName: 'span',
|
|
962
|
-
component: {
|
|
963
|
-
name: 'Custom Code',
|
|
964
|
-
options: {
|
|
965
|
-
code: template.token.raw,
|
|
966
|
-
replaceNodes: true,
|
|
967
|
-
},
|
|
968
|
-
},
|
|
969
|
-
});
|
|
970
|
-
return [3 /*break*/, 73];
|
|
971
|
-
case 67:
|
|
972
|
-
keyValsRe = /,\s*([^:]+):([^,]+)/g;
|
|
973
|
-
assigns_1 = {};
|
|
974
|
-
args.replace(keyValsRe, function (match, key, value) {
|
|
975
|
-
assigns_1[key] = value;
|
|
976
|
-
return '';
|
|
977
|
-
});
|
|
978
|
-
assignString = '';
|
|
979
|
-
for (key in assigns_1) {
|
|
980
|
-
if (assigns_1.hasOwnProperty(key)) {
|
|
981
|
-
// TODO: use StateProvider for this. With getters?
|
|
982
|
-
assignString += "\n{% assign ".concat(key, " = ").concat(assigns_1[key], " %}");
|
|
983
|
-
}
|
|
984
|
-
}
|
|
985
|
-
auth = options.auth, themeId = options.themeId;
|
|
986
|
-
if (!(auth && path && themeId)) return [3 /*break*/, 73];
|
|
987
|
-
publicKey = auth.publicKey, token = auth.token;
|
|
988
|
-
if (!(publicKey && token)) return [3 /*break*/, 73];
|
|
989
|
-
html += serializeBlock({
|
|
990
|
-
layerName: "Include: ".concat(directory, "/").concat(path, ".liquid"),
|
|
991
|
-
component: {
|
|
992
|
-
name: 'Builder:StateProvider',
|
|
993
|
-
options: {
|
|
994
|
-
state: {
|
|
995
|
-
_sourceFile: "".concat(directory, "/").concat(path, ".liquid"),
|
|
996
|
-
},
|
|
997
|
-
},
|
|
998
|
-
},
|
|
999
|
-
}, false);
|
|
1000
|
-
return [4 /*yield*/, getShopifyAsset("".concat(directory, "/").concat(path, ".liquid"), options)];
|
|
1001
|
-
case 68:
|
|
1002
|
-
currentAsset = _10.sent();
|
|
1003
|
-
if (!currentAsset) return [3 /*break*/, 72];
|
|
1004
|
-
value = assignString + '\n' + (currentAsset || '');
|
|
1005
|
-
_2 = html;
|
|
1006
|
-
_3 = exports.parsedLiquidToHtml;
|
|
1007
|
-
_4 = exports.liquidToAst;
|
|
1008
|
-
return [4 /*yield*/, (0, exports.preprocessLiquid)(value)];
|
|
1009
|
-
case 69: return [4 /*yield*/, _4.apply(void 0, [_10.sent(), options])];
|
|
1010
|
-
case 70: return [4 /*yield*/, _3.apply(void 0, [_10.sent(), options])];
|
|
1011
|
-
case 71:
|
|
1012
|
-
html = _2 + _10.sent();
|
|
1013
|
-
_10.label = 72;
|
|
1014
|
-
case 72:
|
|
1015
|
-
html += serializedBlockCloseTag;
|
|
1016
|
-
_10.label = 73;
|
|
1017
|
-
case 73: return [3 /*break*/, 84];
|
|
1018
|
-
case 74:
|
|
1019
|
-
if (!(name_4 === 'paginate')) return [3 /*break*/, 79];
|
|
1020
|
-
// {% paginate collection.product by section.settings.product_per_page %}
|
|
1021
|
-
// ...
|
|
1022
|
-
// {% endpaginate %}
|
|
1023
|
-
html += createHtmlAttribute('paginate', __assign(__assign({}, template.impl), { fullRaw: template.token.raw, templates: undefined, elseTemplates: undefined, liquid: undefined }));
|
|
1024
|
-
_5 = 0, _6 = template.impl.templates;
|
|
1025
|
-
_10.label = 75;
|
|
1026
|
-
case 75:
|
|
1027
|
-
if (!(_5 < _6.length)) return [3 /*break*/, 78];
|
|
1028
|
-
tpl = _6[_5];
|
|
1029
|
-
return [4 /*yield*/, processTemplate(tpl)];
|
|
1030
|
-
case 76:
|
|
1031
|
-
_10.sent();
|
|
1032
|
-
_10.label = 77;
|
|
1033
|
-
case 77:
|
|
1034
|
-
_5++;
|
|
1035
|
-
return [3 /*break*/, 75];
|
|
1036
|
-
case 78:
|
|
1037
|
-
html += createHtmlAttribute('endpaginate', {
|
|
1038
|
-
fullRaw: "{% endpaginate %}",
|
|
1039
|
-
});
|
|
1040
|
-
return [3 /*break*/, 84];
|
|
1041
|
-
case 79:
|
|
1042
|
-
if (!(name_4 === 'cycle')) return [3 /*break*/, 83];
|
|
1043
|
-
args_1 = template.token.args;
|
|
1044
|
-
cycleGroup = void 0;
|
|
1045
|
-
if (args_1.indexOf(':') > -1) {
|
|
1046
|
-
cycleGroup = args_1.split(':')[0];
|
|
1047
|
-
args_1 = args_1.split(':')[1];
|
|
1048
|
-
}
|
|
1049
|
-
argList = parseArgList(args_1);
|
|
1050
|
-
newHtml = '';
|
|
1051
|
-
for (i = 0; i < argList.length; i++) {
|
|
1052
|
-
// first, check to make sure the cycle index isn't greating than the forloop
|
|
1053
|
-
// then, calculate the check the remainder of current loop index divided by cycle length
|
|
1054
|
-
// if it's equal to the current cycle index, display the cycle value
|
|
1055
|
-
newHtml += "\n {% assign remainder = forloop.index0| modulo:".concat(argList.length, " %}\n {% if forloop.length >= ").concat(i, " and remainder == ").concat(i, " %}\n {{").concat(argList[i], "}}\n {% endif %}");
|
|
1056
|
-
}
|
|
1057
|
-
_7 = html;
|
|
1058
|
-
_8 = exports.parsedLiquidToHtml;
|
|
1059
|
-
_9 = exports.liquidToAst;
|
|
1060
|
-
return [4 /*yield*/, (0, exports.preprocessLiquid)(newHtml)];
|
|
1061
|
-
case 80: return [4 /*yield*/, _9.apply(void 0, [_10.sent(), options])];
|
|
1062
|
-
case 81: return [4 /*yield*/, _8.apply(void 0, [_10.sent(), options])];
|
|
1063
|
-
case 82:
|
|
1064
|
-
html = _7 + _10.sent();
|
|
1065
|
-
return [3 /*break*/, 84];
|
|
1066
|
-
case 83:
|
|
1067
|
-
// TODO: make generic [liquid]="..." or something else
|
|
1068
|
-
console.warn('No match for', name_4, args);
|
|
1069
|
-
_10.label = 84;
|
|
1070
|
-
case 84: return [2 /*return*/];
|
|
1071
|
-
}
|
|
1072
|
-
});
|
|
1073
|
-
});
|
|
1074
|
-
}
|
|
1075
|
-
var html, themeAsset, themeSettings, _i, templates_1, item;
|
|
1076
|
-
return __generator(this, function (_a) {
|
|
1077
|
-
switch (_a.label) {
|
|
1078
|
-
case 0:
|
|
1079
|
-
html = '';
|
|
1080
|
-
return [4 /*yield*/, getShopifyAsset('config/settings_data.json', options)];
|
|
1081
|
-
case 1:
|
|
1082
|
-
themeAsset = _a.sent();
|
|
1083
|
-
themeSettings = typeof themeAsset === 'string' && (0, lodash_1.attempt)(function () { return JSON.parse(themeAsset); });
|
|
1084
|
-
_i = 0, templates_1 = templates;
|
|
1085
|
-
_a.label = 2;
|
|
1086
|
-
case 2:
|
|
1087
|
-
if (!(_i < templates_1.length)) return [3 /*break*/, 5];
|
|
1088
|
-
item = templates_1[_i];
|
|
1089
|
-
return [4 /*yield*/, processTemplate(item)];
|
|
1090
|
-
case 3:
|
|
1091
|
-
_a.sent();
|
|
1092
|
-
_a.label = 4;
|
|
1093
|
-
case 4:
|
|
1094
|
-
_i++;
|
|
1095
|
-
return [3 /*break*/, 2];
|
|
1096
|
-
case 5: return [2 /*return*/, html];
|
|
1097
|
-
}
|
|
1098
|
-
});
|
|
1099
|
-
}); };
|
|
1100
|
-
exports.parsedLiquidToHtml = parsedLiquidToHtml;
|
|
1101
|
-
var flattenExpressions = function (conditionsArray, value) {
|
|
1102
|
-
return (conditionsArray.map(function (c) { return (c.negate ? "".concat(c.expression, " {% else %}") : c.expression); }).join(' ') +
|
|
1103
|
-
value +
|
|
1104
|
-
conditionsArray.map(function () { return "{% endif %}"; }));
|
|
1105
|
-
};
|
|
1106
|
-
function processInnerTemplates(templates, options, priorConditions, overrideHash) {
|
|
1107
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
1108
|
-
var selfCloseTags, html, processHtml;
|
|
1109
|
-
return __generator(this, function (_a) {
|
|
1110
|
-
switch (_a.label) {
|
|
1111
|
-
case 0:
|
|
1112
|
-
selfCloseTags = new Set([
|
|
1113
|
-
'input',
|
|
1114
|
-
'link',
|
|
1115
|
-
'br',
|
|
1116
|
-
'base',
|
|
1117
|
-
'hr',
|
|
1118
|
-
'meta',
|
|
1119
|
-
'img',
|
|
1120
|
-
'area',
|
|
1121
|
-
'col',
|
|
1122
|
-
'embed',
|
|
1123
|
-
'param',
|
|
1124
|
-
'source',
|
|
1125
|
-
'track',
|
|
1126
|
-
'wbr',
|
|
1127
|
-
]);
|
|
1128
|
-
return [4 /*yield*/, (0, exports.parsedLiquidToHtml)(templates, options)];
|
|
1129
|
-
case 1:
|
|
1130
|
-
html = _a.sent();
|
|
1131
|
-
processHtml = function (str) {
|
|
1132
|
-
var _a, _b;
|
|
1133
|
-
var result = '';
|
|
1134
|
-
try {
|
|
1135
|
-
// TODO: remove comments from inside str, it breaks things
|
|
1136
|
-
var parsedHtml = htmlParser.parsers.html.parse(str, htmlParser.parsers, {});
|
|
1137
|
-
for (var _i = 0, _c = parsedHtml.children; _i < _c.length; _i++) {
|
|
1138
|
-
var node = _c[_i];
|
|
1139
|
-
if (node.type === 'text') {
|
|
1140
|
-
result += node.value;
|
|
1141
|
-
}
|
|
1142
|
-
else if ((0, lodash_1.isNull)(node.endSourceSpan) && !selfCloseTags.has(node.name)) {
|
|
1143
|
-
var block = {
|
|
1144
|
-
tagName: node.name,
|
|
1145
|
-
bindings: {},
|
|
1146
|
-
properties: {},
|
|
1147
|
-
// not working
|
|
1148
|
-
noWrap: true,
|
|
1149
|
-
meta: {
|
|
1150
|
-
renderIf: flattenExpressions(priorConditions, 'true'),
|
|
1151
|
-
psuedoNode: {
|
|
1152
|
-
attrsList: (_a = node.attrs) === null || _a === void 0 ? void 0 : _a.map(function (_a) {
|
|
1153
|
-
var name = _a.name, value = _a.value;
|
|
1154
|
-
return ({
|
|
1155
|
-
name: name,
|
|
1156
|
-
value: value,
|
|
1157
|
-
});
|
|
1158
|
-
}),
|
|
1159
|
-
attrsMap: node.attrMap,
|
|
1160
|
-
name: node.name,
|
|
1161
|
-
type: 1,
|
|
1162
|
-
},
|
|
1163
|
-
},
|
|
1164
|
-
component: {
|
|
1165
|
-
name: 'TempTag',
|
|
1166
|
-
options: {
|
|
1167
|
-
name: 'opencondtag',
|
|
1168
|
-
tag: node.name,
|
|
1169
|
-
hash: overrideHash || (0, object_hash_1.default)(priorConditions),
|
|
1170
|
-
},
|
|
1171
|
-
},
|
|
1172
|
-
};
|
|
1173
|
-
result += serializeBlock(block, false);
|
|
1174
|
-
var innerStr = str.substring(node.sourceSpan.end.offset);
|
|
1175
|
-
if (innerStr.replace('\n', '').trim() !== '') {
|
|
1176
|
-
result += processHtml(innerStr);
|
|
1177
|
-
}
|
|
1178
|
-
result += serializedBlockCloseTag;
|
|
1179
|
-
}
|
|
1180
|
-
else {
|
|
1181
|
-
result += str.substring(node.sourceSpan.start.offset, node.sourceSpan.end.offset);
|
|
1182
|
-
}
|
|
1183
|
-
}
|
|
1184
|
-
}
|
|
1185
|
-
catch (error) {
|
|
1186
|
-
if (error instanceof Error && error.message.includes('Unexpected closing tag')) {
|
|
1187
|
-
// template.str have an unclosed tag, extract all valid text and
|
|
1188
|
-
// replace the invlalid endtag with htmlattr
|
|
1189
|
-
var _d = getErrorInfo(error.message), col = _d.col, line = _d.line;
|
|
1190
|
-
var errorTag = (_b = error.message.match(/Unexpected closing tag "(\s*\S*)"/)) === null || _b === void 0 ? void 0 : _b[1];
|
|
1191
|
-
var preErrorTag = getSubstringTill(Number(col), Number(line), str);
|
|
1192
|
-
result += preErrorTag;
|
|
1193
|
-
result += createHtmlAttribute('endopencondtag', {
|
|
1194
|
-
hash: overrideHash || (priorConditions.length > 0 && (0, object_hash_1.default)(priorConditions)),
|
|
1195
|
-
});
|
|
1196
|
-
// 3 is length of </>
|
|
1197
|
-
var leftovers = str.substring(preErrorTag.length + errorTag.length + 4);
|
|
1198
|
-
if (leftovers.replace('\n', '').trim() !== '') {
|
|
1199
|
-
result += processHtml(leftovers);
|
|
1200
|
-
}
|
|
1201
|
-
}
|
|
1202
|
-
}
|
|
1203
|
-
return result;
|
|
1204
|
-
};
|
|
1205
|
-
return [2 /*return*/, processHtml(html)];
|
|
1206
|
-
}
|
|
1207
|
-
});
|
|
1208
|
-
});
|
|
1209
|
-
}
|
|
1210
|
-
var el = function (options) {
|
|
1211
|
-
return (0, __1.createBuilderElement)(__assign({ meta: __assign({ importedFrom: 'liquid' }, options === null || options === void 0 ? void 0 : options.meta) }, options));
|
|
1212
|
-
};
|
|
1213
|
-
var tagRe = /\[([a-z]+)\](='([^']+)')?/;
|
|
1214
|
-
var tagReAll = /\[([^\]]+)\](='([^']+)')?/g;
|
|
1215
|
-
var parseTags = function (tag) {
|
|
1216
|
-
var tags = [];
|
|
1217
|
-
tag.replace(tagReAll, function (match, p1, _p2, p3) {
|
|
1218
|
-
tags.push({
|
|
1219
|
-
name: htmlDecode(p1),
|
|
1220
|
-
value: htmlDecode(p3 || ''),
|
|
1221
|
-
raw: match,
|
|
1222
|
-
});
|
|
1223
|
-
return '';
|
|
1224
|
-
});
|
|
1225
|
-
return tags;
|
|
1226
|
-
};
|
|
1227
|
-
var parseTag = function (tag) {
|
|
1228
|
-
if (tag === void 0) { tag = ''; }
|
|
1229
|
-
var matched = tag.match(tagRe);
|
|
1230
|
-
return (matched && {
|
|
1231
|
-
name: htmlDecode(matched[1]),
|
|
1232
|
-
value: htmlDecode(matched[3] || ''),
|
|
1233
|
-
raw: htmlDecode(matched[0]),
|
|
1234
|
-
});
|
|
1235
|
-
};
|
|
1236
|
-
var hasTag = function (html) { return !!parseTag(html); };
|
|
1237
|
-
var htmlNodeToBuilder = function (node, index, parentArray, options) { return __awaiter(void 0, void 0, void 0, function () {
|
|
1238
|
-
var _a, element, psuedoNode, parsedBlock, children, err_1, _b, properties, bindings, imgStr, text, parsed, parsedOutput, parsedFor, parsedIf, parsedValue, translation, block;
|
|
1239
|
-
var _c, _d, _e;
|
|
1240
|
-
var _f, _g;
|
|
1241
|
-
return __generator(this, function (_h) {
|
|
1242
|
-
switch (_h.label) {
|
|
1243
|
-
case 0:
|
|
1244
|
-
if (!isElement(node)) return [3 /*break*/, 11];
|
|
1245
|
-
if (!(node.tag === 'builder-component')) return [3 /*break*/, 2];
|
|
1246
|
-
_a = el;
|
|
1247
|
-
_c = {};
|
|
1248
|
-
return [4 /*yield*/, (0, exports.htmlAstToBuilder)(node.children, options)];
|
|
1249
|
-
case 1: return [2 /*return*/, _a.apply(void 0, [(_c.children = _h.sent(),
|
|
1250
|
-
_c)])];
|
|
1251
|
-
case 2:
|
|
1252
|
-
element = void 0;
|
|
1253
|
-
psuedoNode = node;
|
|
1254
|
-
if (!(node.tag === serializedBlockTagName)) return [3 /*break*/, 7];
|
|
1255
|
-
_h.label = 3;
|
|
1256
|
-
case 3:
|
|
1257
|
-
_h.trys.push([3, 5, , 6]);
|
|
1258
|
-
parsedBlock = JSON.parse(htmlDecode(node.attrsMap.block.replace(/"/g, '\\"')));
|
|
1259
|
-
return [4 /*yield*/, (0, exports.htmlAstToBuilder)(node.children, options)];
|
|
1260
|
-
case 4:
|
|
1261
|
-
children = _h.sent();
|
|
1262
|
-
element = el(__assign(__assign({}, parsedBlock), (children.length > 0 && { children: children })));
|
|
1263
|
-
if ((_f = parsedBlock.meta) === null || _f === void 0 ? void 0 : _f.psuedoNode) {
|
|
1264
|
-
psuedoNode = (_g = parsedBlock.meta) === null || _g === void 0 ? void 0 : _g.psuedoNode;
|
|
1265
|
-
(element.properties = {}), (element.bindings = {}), delete parsedBlock.meta.psuedoNode;
|
|
1266
|
-
}
|
|
1267
|
-
else {
|
|
1268
|
-
return [2 /*return*/, element];
|
|
1269
|
-
}
|
|
1270
|
-
return [3 /*break*/, 6];
|
|
1271
|
-
case 5:
|
|
1272
|
-
err_1 = _h.sent();
|
|
1273
|
-
console.error('Builder serialized block error', err_1, '\n\nin:', htmlDecode(node.attrsMap.block.replace(/"/g, '\\"')));
|
|
1274
|
-
return [2 /*return*/, el({
|
|
1275
|
-
component: {
|
|
1276
|
-
name: 'Text',
|
|
1277
|
-
options: {
|
|
1278
|
-
text: "Builder serialized block error: ".concat(String(err_1)),
|
|
1279
|
-
},
|
|
1280
|
-
},
|
|
1281
|
-
})];
|
|
1282
|
-
case 6: return [3 /*break*/, 9];
|
|
1283
|
-
case 7:
|
|
1284
|
-
_b = el;
|
|
1285
|
-
_d = {
|
|
1286
|
-
tagName: node.tag,
|
|
1287
|
-
properties: {},
|
|
1288
|
-
bindings: {}
|
|
1289
|
-
};
|
|
1290
|
-
return [4 /*yield*/, (0, exports.htmlAstToBuilder)(node.children, options)];
|
|
1291
|
-
case 8:
|
|
1292
|
-
element = _b.apply(void 0, [(_d.children = _h.sent(),
|
|
1293
|
-
_d)]);
|
|
1294
|
-
_h.label = 9;
|
|
1295
|
-
case 9:
|
|
1296
|
-
properties = element.properties;
|
|
1297
|
-
bindings = element.bindings;
|
|
1298
|
-
if (psuedoNode.tag === 'img') {
|
|
1299
|
-
imgStr = psuedoNode.attrsMap.src || psuedoNode.attrsMap['data-src'];
|
|
1300
|
-
if (imgStr && hasTag(imgStr)) {
|
|
1301
|
-
imgStr = '';
|
|
1302
|
-
}
|
|
1303
|
-
element.tagName = '';
|
|
1304
|
-
element.component = {
|
|
1305
|
-
name: 'Raw:Img',
|
|
1306
|
-
options: {
|
|
1307
|
-
image: imgStr,
|
|
1308
|
-
},
|
|
1309
|
-
};
|
|
1310
|
-
}
|
|
1311
|
-
return [4 /*yield*/, (0, exports.bindingsFromAttrs)(psuedoNode, bindings, properties, options)];
|
|
1312
|
-
case 10:
|
|
1313
|
-
_h.sent();
|
|
1314
|
-
return [2 /*return*/, element];
|
|
1315
|
-
case 11:
|
|
1316
|
-
if (!isTextNode(node)) return [3 /*break*/, 13];
|
|
1317
|
-
text = node.text;
|
|
1318
|
-
if (!text.trim()) {
|
|
1319
|
-
return [2 /*return*/, null];
|
|
1320
|
-
}
|
|
1321
|
-
parsed = null;
|
|
1322
|
-
if (hasTag(text)) {
|
|
1323
|
-
parsed = parseTag(text);
|
|
1324
|
-
text = '';
|
|
1325
|
-
}
|
|
1326
|
-
parsedOutput = parsed && parsed.value && parsed.name === 'output' && JSON.parse(parsed.value);
|
|
1327
|
-
parsedFor = parsed && parsed.value && parsed.name === 'for' && JSON.parse(parsed.value);
|
|
1328
|
-
parsedIf = parsed && parsed.value && parsed.name === 'if' && JSON.parse(parsed.value);
|
|
1329
|
-
parsedValue = parsedOutput;
|
|
1330
|
-
return [4 /*yield*/, getTranslation(parsedValue, options)];
|
|
1331
|
-
case 12:
|
|
1332
|
-
translation = _h.sent();
|
|
1333
|
-
if (translation != null) {
|
|
1334
|
-
text = translation;
|
|
1335
|
-
}
|
|
1336
|
-
if (parsed) {
|
|
1337
|
-
if ([
|
|
1338
|
-
'if',
|
|
1339
|
-
'elsif',
|
|
1340
|
-
'else',
|
|
1341
|
-
'endif',
|
|
1342
|
-
'endunless',
|
|
1343
|
-
'unless',
|
|
1344
|
-
'for',
|
|
1345
|
-
'endfor',
|
|
1346
|
-
'paginate',
|
|
1347
|
-
'endpaginate',
|
|
1348
|
-
'form',
|
|
1349
|
-
'endform',
|
|
1350
|
-
'endopencondtag',
|
|
1351
|
-
].includes(parsed.name)) {
|
|
1352
|
-
return [2 /*return*/, el({
|
|
1353
|
-
component: {
|
|
1354
|
-
name: 'TempNode',
|
|
1355
|
-
options: {
|
|
1356
|
-
name: parsed.name,
|
|
1357
|
-
value: parsed.value,
|
|
1358
|
-
},
|
|
1359
|
-
},
|
|
1360
|
-
})];
|
|
1361
|
-
}
|
|
1362
|
-
if (parsed.name !== 'output') {
|
|
1363
|
-
console.warn('No handler for', parsed.name);
|
|
1364
|
-
}
|
|
1365
|
-
}
|
|
1366
|
-
block = el({
|
|
1367
|
-
// tagName: 'span',
|
|
1368
|
-
bindings: __assign({}, (parsedOutput &&
|
|
1369
|
-
translation == null && (_e = {},
|
|
1370
|
-
_e['component.options.text'] = liquidBindingTemplate(parsedOutput.raw),
|
|
1371
|
-
_e))),
|
|
1372
|
-
component: {
|
|
1373
|
-
name: 'Text',
|
|
1374
|
-
options: { text: text },
|
|
1375
|
-
},
|
|
1376
|
-
});
|
|
1377
|
-
return [2 /*return*/, block];
|
|
1378
|
-
case 13:
|
|
1379
|
-
// TODO: handle comment, etc
|
|
1380
|
-
console.warn('node not matched', node);
|
|
1381
|
-
return [2 /*return*/, null];
|
|
1382
|
-
}
|
|
1383
|
-
});
|
|
1384
|
-
}); };
|
|
1385
|
-
exports.htmlNodeToBuilder = htmlNodeToBuilder;
|
|
1386
|
-
var assets = {};
|
|
1387
|
-
var getShopifyAsset = function (assetKey, options) { return __awaiter(void 0, void 0, void 0, function () {
|
|
1388
|
-
var publicKey, token, themeId, key, shopifyRoot, url;
|
|
1389
|
-
return __generator(this, function (_a) {
|
|
1390
|
-
switch (_a.label) {
|
|
1391
|
-
case 0:
|
|
1392
|
-
publicKey = options && options.auth && options.auth.publicKey;
|
|
1393
|
-
token = options && options.auth && options.auth.token;
|
|
1394
|
-
themeId = options === null || options === void 0 ? void 0 : options.themeId;
|
|
1395
|
-
if (!(publicKey && token && themeId)) return [3 /*break*/, 4];
|
|
1396
|
-
key = assetKey + themeId + publicKey;
|
|
1397
|
-
if (!assets[key]) return [3 /*break*/, 2];
|
|
1398
|
-
return [4 /*yield*/, assets[key]];
|
|
1399
|
-
case 1: return [2 /*return*/, _a.sent()];
|
|
1400
|
-
case 2:
|
|
1401
|
-
shopifyRoot = 'https://cdn.builder.io/api/v1/shopify';
|
|
1402
|
-
url = "".concat(shopifyRoot, "/themes/").concat(themeId, "/assets.json?asset[key]=").concat(assetKey, "&apiKey=").concat(publicKey);
|
|
1403
|
-
if (options.cachebust) {
|
|
1404
|
-
url += '&cachebust=true';
|
|
1405
|
-
}
|
|
1406
|
-
assets[key] = axios
|
|
1407
|
-
.get(url, {
|
|
1408
|
-
headers: {
|
|
1409
|
-
Authorization: "Bearer ".concat(token),
|
|
1410
|
-
},
|
|
1411
|
-
})
|
|
1412
|
-
.then(function (result) { return result.data && result.data.asset && result.data.asset.value; });
|
|
1413
|
-
return [4 /*yield*/, assets[key]];
|
|
1414
|
-
case 3: return [2 /*return*/, _a.sent()];
|
|
1415
|
-
case 4: return [2 /*return*/];
|
|
1416
|
-
}
|
|
1417
|
-
});
|
|
1418
|
-
}); };
|
|
1419
|
-
var getTranslation = function (parsedValue, options) {
|
|
1420
|
-
if (options === void 0) { options = {}; }
|
|
1421
|
-
return __awaiter(void 0, void 0, void 0, function () {
|
|
1422
|
-
var filters, initial, translate, asset_1, _a, parsed, translationValue;
|
|
1423
|
-
return __generator(this, function (_b) {
|
|
1424
|
-
switch (_b.label) {
|
|
1425
|
-
case 0:
|
|
1426
|
-
if (!parsedValue) {
|
|
1427
|
-
return [2 /*return*/, null];
|
|
1428
|
-
}
|
|
1429
|
-
filters = parsedValue.filters, initial = parsedValue.initial;
|
|
1430
|
-
if (!Array.isArray(filters)) return [3 /*break*/, 3];
|
|
1431
|
-
translate = Boolean(filters.find(function (item) { return item.name === 't'; }));
|
|
1432
|
-
if (!translate) return [3 /*break*/, 3];
|
|
1433
|
-
_a = options.translations;
|
|
1434
|
-
if (_a) return [3 /*break*/, 2];
|
|
1435
|
-
return [4 /*yield*/, getShopifyAsset('locales/en.default.json', options)];
|
|
1436
|
-
case 1:
|
|
1437
|
-
_a = (_b.sent());
|
|
1438
|
-
_b.label = 2;
|
|
1439
|
-
case 2:
|
|
1440
|
-
asset_1 = _a;
|
|
1441
|
-
parsed = typeof asset_1 === 'string' ? (0, lodash_1.attempt)(function () { return JSON.parse(asset_1); }) : asset_1;
|
|
1442
|
-
if (parsed && !(0, lodash_1.isError)(parsed)) {
|
|
1443
|
-
translationValue = (0, lodash_1.get)(parsed, initial.replace(/'/g, ''));
|
|
1444
|
-
return [2 /*return*/, translationValue];
|
|
1445
|
-
}
|
|
1446
|
-
else {
|
|
1447
|
-
console.warn('Could not grab translation', options);
|
|
1448
|
-
}
|
|
1449
|
-
_b.label = 3;
|
|
1450
|
-
case 3: return [2 /*return*/, null];
|
|
1451
|
-
}
|
|
1452
|
-
});
|
|
1453
|
-
});
|
|
1454
|
-
};
|
|
1455
|
-
var liquidToAst = function (str, options) {
|
|
1456
|
-
if (options === void 0) { options = {}; }
|
|
1457
|
-
// Look for "<tag ...> {% end"
|
|
1458
|
-
// FIXME: this will also throw on self closing tags like <input> but ideally should be fixed to not
|
|
1459
|
-
var problemMatched = str.match(/<[^\/>]+?>\s*{%[\s\-]*end/gi);
|
|
1460
|
-
if (problemMatched) {
|
|
1461
|
-
console.warn('Found invalid liquid condition around open HTML tag', problemMatched);
|
|
1462
|
-
}
|
|
1463
|
-
// Look for "{% if|unless %}</div>""
|
|
1464
|
-
var closeTagMatch = str.match(/{%[\s\-]*(if|unless)[^}]*%}\s*<\//gi);
|
|
1465
|
-
if (closeTagMatch) {
|
|
1466
|
-
console.warn('Found invalid liquid condition around close HTML tag', closeTagMatch);
|
|
1467
|
-
}
|
|
1468
|
-
var engine = new liquidjs_1.Liquid();
|
|
1469
|
-
// TODO: handle other tags
|
|
1470
|
-
var selfCloseTags = [
|
|
1471
|
-
'section',
|
|
1472
|
-
'render',
|
|
1473
|
-
'include',
|
|
1474
|
-
'echo',
|
|
1475
|
-
'liquid',
|
|
1476
|
-
'layout',
|
|
1477
|
-
'cycle',
|
|
1478
|
-
'break',
|
|
1479
|
-
'continue',
|
|
1480
|
-
];
|
|
1481
|
-
selfCloseTags.forEach(function (tag) {
|
|
1482
|
-
engine.registerTag(tag, {
|
|
1483
|
-
parse: function (token, remainTokens) {
|
|
1484
|
-
this.remainTokens = remainTokens;
|
|
1485
|
-
this.templates = [];
|
|
1486
|
-
this.type = 'block';
|
|
1487
|
-
this.blockType = 'selfClose';
|
|
1488
|
-
this.name = tag;
|
|
1489
|
-
this.args = token.args;
|
|
1490
|
-
},
|
|
1491
|
-
render: function () { return null; },
|
|
1492
|
-
});
|
|
1493
|
-
});
|
|
1494
|
-
var nonLiquidBlockTags = ['style', 'stylesheet', 'javascript', 'schema'];
|
|
1495
|
-
nonLiquidBlockTags.forEach(function (tag) {
|
|
1496
|
-
engine.registerTag(tag, {
|
|
1497
|
-
parse: function (token, remainTokens) {
|
|
1498
|
-
var _this = this;
|
|
1499
|
-
this.remainTokens = remainTokens;
|
|
1500
|
-
this.tokens = [];
|
|
1501
|
-
this.type = 'block';
|
|
1502
|
-
this.blockType = 'nonLiquidBlock';
|
|
1503
|
-
this.name = tag;
|
|
1504
|
-
this.args = token.args;
|
|
1505
|
-
this.tokens = [];
|
|
1506
|
-
var stream = this.liquid.parser.parseStream(remainTokens);
|
|
1507
|
-
stream
|
|
1508
|
-
.on('token', function (token) {
|
|
1509
|
-
if (token.name === 'end' + tag)
|
|
1510
|
-
stream.stop();
|
|
1511
|
-
else
|
|
1512
|
-
_this.tokens.push(token);
|
|
1513
|
-
})
|
|
1514
|
-
.on('end', function () {
|
|
1515
|
-
throw new Error("tag ".concat(token.raw, " not closed"));
|
|
1516
|
-
});
|
|
1517
|
-
stream.start();
|
|
1518
|
-
},
|
|
1519
|
-
render: function () { return null; },
|
|
1520
|
-
});
|
|
1521
|
-
});
|
|
1522
|
-
var blockTags = ['form', 'paginate', 'schema'];
|
|
1523
|
-
blockTags.forEach(function (tag) {
|
|
1524
|
-
engine.registerTag(tag, {
|
|
1525
|
-
parse: function (token, remainTokens) {
|
|
1526
|
-
var _this = this;
|
|
1527
|
-
this.remainTokens = remainTokens;
|
|
1528
|
-
this.templates = [];
|
|
1529
|
-
this.type = 'block';
|
|
1530
|
-
this.name = tag;
|
|
1531
|
-
this.args = token.args;
|
|
1532
|
-
var stream = this.liquid.parser
|
|
1533
|
-
.parseStream(remainTokens)
|
|
1534
|
-
.on('tag:end' + tag, function () { return stream.stop(); })
|
|
1535
|
-
.on('template', function (tpl) { return _this.templates.push(tpl); })
|
|
1536
|
-
.on('end', function () {
|
|
1537
|
-
throw new Error("tag ".concat(token.raw, " not closed"));
|
|
1538
|
-
});
|
|
1539
|
-
stream.start();
|
|
1540
|
-
},
|
|
1541
|
-
render: function () { return null; },
|
|
1542
|
-
});
|
|
1543
|
-
});
|
|
1544
|
-
var parsedTemplateItems = engine.parse(str);
|
|
1545
|
-
return parsedTemplateItems;
|
|
1546
|
-
};
|
|
1547
|
-
exports.liquidToAst = liquidToAst;
|
|
1548
|
-
var bindingsPlaceholder = '__B__';
|
|
1549
|
-
var htmlToAst = function (html) {
|
|
1550
|
-
// https://github.com/vuejs/vue/blob/dev/src/platforms/web/compiler/modules/class.js#L19
|
|
1551
|
-
var ast = compiler.compile("<template>".concat(html.replace(/(class|style)=/g, "".concat(bindingsPlaceholder, "$1=")), "</template>")).ast.children;
|
|
1552
|
-
var processed = (0, exports.postProcessHtmlAstNodes)((0, lodash_1.cloneDeep)(ast));
|
|
1553
|
-
return { htmlNodes: processed, preprocessed: ast };
|
|
1554
|
-
};
|
|
1555
|
-
exports.htmlToAst = htmlToAst;
|
|
1556
|
-
var isBuilderElement = function (el) {
|
|
1557
|
-
return Boolean(el && typeof el === 'object' && el['@type'] === '@builder.io/sdk:Element');
|
|
1558
|
-
};
|
|
1559
|
-
var isBuilderElementArray = function (obj) {
|
|
1560
|
-
return Boolean(obj && Array.isArray(obj) && obj[0] && isBuilderElement(obj[0]));
|
|
1561
|
-
};
|
|
1562
|
-
var getNextBuilderSiblings = function (el, parentArray) {
|
|
1563
|
-
var index = parentArray.indexOf(el);
|
|
1564
|
-
if (index === -1) {
|
|
1565
|
-
console.log('node', el, parentArray);
|
|
1566
|
-
throw new Error('El is not in parentArray');
|
|
1567
|
-
}
|
|
1568
|
-
return parentArray.slice(index + 1);
|
|
1569
|
-
};
|
|
1570
|
-
var tempNodeInfo = function (el) {
|
|
1571
|
-
var component = el.component;
|
|
1572
|
-
if (component) {
|
|
1573
|
-
var componentName = component.name, options = component.options;
|
|
1574
|
-
if (componentName === 'TempNode') {
|
|
1575
|
-
var name_6 = options.name, value = options.value;
|
|
1576
|
-
return { value: value, name: name_6 };
|
|
1577
|
-
}
|
|
1578
|
-
}
|
|
1579
|
-
return { name: null, value: null };
|
|
1580
|
-
};
|
|
1581
|
-
var tempTagInfo = function (el) {
|
|
1582
|
-
var component = el.component;
|
|
1583
|
-
if (component) {
|
|
1584
|
-
var componentName = component.name, options = component.options;
|
|
1585
|
-
if (componentName === 'TempTag') {
|
|
1586
|
-
var name_7 = options.name, value = options.value;
|
|
1587
|
-
return { value: value, name: name_7 };
|
|
1588
|
-
}
|
|
1589
|
-
}
|
|
1590
|
-
return { name: null, value: null };
|
|
1591
|
-
};
|
|
1592
|
-
var getTextNode = function (str) { return ({
|
|
1593
|
-
static: true,
|
|
1594
|
-
type: 3,
|
|
1595
|
-
text: str,
|
|
1596
|
-
}); };
|
|
1597
|
-
var separateTagsAndText = function (text) {
|
|
1598
|
-
var str = (text || '').trim();
|
|
1599
|
-
var textItems = [];
|
|
1600
|
-
var tags = parseTags(str);
|
|
1601
|
-
if (!tags.length) {
|
|
1602
|
-
return [getTextNode(str)];
|
|
1603
|
-
}
|
|
1604
|
-
var result = [];
|
|
1605
|
-
var currentIndex = 0;
|
|
1606
|
-
for (var _i = 0, tags_1 = tags; _i < tags_1.length; _i++) {
|
|
1607
|
-
var tag = tags_1[_i];
|
|
1608
|
-
var index = str.indexOf(tag.raw, currentIndex);
|
|
1609
|
-
textItems.push(str.slice(currentIndex, index));
|
|
1610
|
-
currentIndex = index + tag.raw.length;
|
|
1611
|
-
}
|
|
1612
|
-
var lastRaw = (0, lodash_1.last)(tags).raw;
|
|
1613
|
-
var lastIndex = text.lastIndexOf(lastRaw) + lastRaw.length;
|
|
1614
|
-
textItems.push(str.slice(lastIndex));
|
|
1615
|
-
for (var i = 0; i < tags.length; i++) {
|
|
1616
|
-
if (textItems[i] && textItems[i].trim()) {
|
|
1617
|
-
result.push(getTextNode(textItems[i]));
|
|
1618
|
-
}
|
|
1619
|
-
result.push(getTextNode(tags[i].raw));
|
|
1620
|
-
}
|
|
1621
|
-
if (textItems[tags.length] && textItems[tags.length].trim()) {
|
|
1622
|
-
result.push(getTextNode(textItems[tags.length] || ''));
|
|
1623
|
-
}
|
|
1624
|
-
return result;
|
|
1625
|
-
};
|
|
1626
|
-
exports.separateTagsAndText = separateTagsAndText;
|
|
1627
|
-
var debugLoops = false;
|
|
1628
|
-
var isArrayWithTextNode = function (obj) {
|
|
1629
|
-
return Array.isArray(obj) && obj.find(function (item) { return isTextNode(item); });
|
|
1630
|
-
};
|
|
1631
|
-
var postProcessHtmlAstNodes = function (nodes) {
|
|
1632
|
-
var updated = true;
|
|
1633
|
-
var i = 0;
|
|
1634
|
-
var latest = nodes;
|
|
1635
|
-
while (updated) {
|
|
1636
|
-
if (i++ > (debugLoops ? 3 : 1000)) {
|
|
1637
|
-
console.warn('Too many updates');
|
|
1638
|
-
break;
|
|
1639
|
-
}
|
|
1640
|
-
updated = false;
|
|
1641
|
-
// tslint:disable-next-line:ter-prefer-arrow-callback
|
|
1642
|
-
latest = (0, traverse_1.default)(latest).forEach(function (current) {
|
|
1643
|
-
var _a;
|
|
1644
|
-
if ((current === null || current === void 0 ? void 0 : current.name) && current.name.startsWith(bindingsPlaceholder)) {
|
|
1645
|
-
this.update(__assign(__assign({}, current), { name: current.name.replace(bindingsPlaceholder, '') }));
|
|
1646
|
-
}
|
|
1647
|
-
else if (current) {
|
|
1648
|
-
var prop = Object.keys(current).find(function (key) { return key.startsWith(bindingsPlaceholder); });
|
|
1649
|
-
if (prop) {
|
|
1650
|
-
this.update(__assign(__assign({}, (0, lodash_1.omit)(current, prop)), (_a = {}, _a[prop === null || prop === void 0 ? void 0 : prop.replace(bindingsPlaceholder, '')] = current[prop], _a)));
|
|
1651
|
-
}
|
|
1652
|
-
}
|
|
1653
|
-
if (!isArrayWithTextNode(current)) {
|
|
1654
|
-
return;
|
|
1655
|
-
}
|
|
1656
|
-
for (var _i = 0, current_1 = current; _i < current_1.length; _i++) {
|
|
1657
|
-
var item = current_1[_i];
|
|
1658
|
-
if (!isTextNode(item)) {
|
|
1659
|
-
continue;
|
|
1660
|
-
}
|
|
1661
|
-
var parent_1 = current;
|
|
1662
|
-
var text = item.text;
|
|
1663
|
-
var separated = (0, exports.separateTagsAndText)(text);
|
|
1664
|
-
if (separated.length > 1) {
|
|
1665
|
-
updated = true;
|
|
1666
|
-
this.update(__spreadArray(__spreadArray(__spreadArray([], parent_1.slice(0, parent_1.indexOf(item)), true), separated, true), parent_1.slice(parent_1.indexOf(item) + 1), true), true);
|
|
1667
|
-
break;
|
|
1668
|
-
}
|
|
1669
|
-
}
|
|
1670
|
-
});
|
|
1671
|
-
}
|
|
1672
|
-
return latest;
|
|
1673
|
-
};
|
|
1674
|
-
exports.postProcessHtmlAstNodes = postProcessHtmlAstNodes;
|
|
1675
|
-
var isCondition = function (el) { var _a; return ((_a = el.component) === null || _a === void 0 ? void 0 : _a.name) === 'Shopify:Condition'; };
|
|
1676
|
-
var isOpenConditionalTag = function (el) { var _a; return ((_a = el.component) === null || _a === void 0 ? void 0 : _a.name) === 'Shopify:ConditionalTag'; };
|
|
1677
|
-
var isEndConditionalTag = function (el) { var _a, _b; return ((_b = (_a = el.component) === null || _a === void 0 ? void 0 : _a.options) === null || _b === void 0 ? void 0 : _b.name) === 'endopencondtag'; };
|
|
1678
|
-
var moveCondtionalTagsUp = function (nodes) {
|
|
1679
|
-
var updated = true;
|
|
1680
|
-
var i = 0;
|
|
1681
|
-
while (updated) {
|
|
1682
|
-
if (i++ > (debugLoops ? 4 : 1000)) {
|
|
1683
|
-
console.warn('Too many updates');
|
|
1684
|
-
break;
|
|
1685
|
-
}
|
|
1686
|
-
updated = false;
|
|
1687
|
-
// tslint:disable-next-line:ter-prefer-arrow-callback
|
|
1688
|
-
nodes = (0, traverse_1.default)(nodes).forEach(function (current) {
|
|
1689
|
-
var _a;
|
|
1690
|
-
if (!isBuilderElementArray(current)) {
|
|
1691
|
-
return;
|
|
1692
|
-
}
|
|
1693
|
-
for (var currentIndex = 0; currentIndex < current.length; currentIndex++) {
|
|
1694
|
-
var ejected = null;
|
|
1695
|
-
var condition = current[currentIndex];
|
|
1696
|
-
if (!isCondition(condition)) {
|
|
1697
|
-
return;
|
|
1698
|
-
}
|
|
1699
|
-
var branches = condition.component.options.branches;
|
|
1700
|
-
var branchIndex = -1;
|
|
1701
|
-
for (var _i = 0, branches_1 = branches; _i < branches_1.length; _i++) {
|
|
1702
|
-
var branch = branches_1[_i];
|
|
1703
|
-
branchIndex++;
|
|
1704
|
-
var ejectedIndex = branch.blocks.findIndex(function (block, blockIndex) {
|
|
1705
|
-
var name = tempTagInfo(block).name;
|
|
1706
|
-
return name === 'opencondtag';
|
|
1707
|
-
});
|
|
1708
|
-
if (ejectedIndex > -1) {
|
|
1709
|
-
var oldBlocks = branch.blocks;
|
|
1710
|
-
ejected = (_a = branch.blocks) === null || _a === void 0 ? void 0 : _a[ejectedIndex];
|
|
1711
|
-
var newBlocks = __spreadArray(__spreadArray(__spreadArray([], ((oldBlocks === null || oldBlocks === void 0 ? void 0 : oldBlocks.slice(0, ejectedIndex)) || []), true), (ejected.children || []), true), ((oldBlocks === null || oldBlocks === void 0 ? void 0 : oldBlocks.slice(ejectedIndex + 1)) || []), true);
|
|
1712
|
-
var updatedCondition = __assign(__assign({}, condition), { component: __assign(__assign({}, condition.component), { options: __assign(__assign({}, condition.component.options), { branches: __spreadArray(__spreadArray(__spreadArray([], branches.slice(0, branchIndex), true), [
|
|
1713
|
-
__assign(__assign({}, branch), { blocks: newBlocks })
|
|
1714
|
-
], false), branches.slice(branchIndex + 1), true) }) }) });
|
|
1715
|
-
this.update(__spreadArray(__spreadArray(__spreadArray([], current.slice(0, currentIndex), true), [
|
|
1716
|
-
__assign(__assign({}, ejected), { meta: __assign(__assign({}, ejected.meta), { originalIndex: ejectedIndex, branchIndex: branchIndex }), component: __assign(__assign({}, ejected.component), { name: 'Shopify:ConditionalTag' }), children: [updatedCondition] })
|
|
1717
|
-
], false), current.slice(currentIndex + 1), true), true);
|
|
1718
|
-
break;
|
|
1719
|
-
}
|
|
1720
|
-
}
|
|
1721
|
-
if (ejected) {
|
|
1722
|
-
updated = true;
|
|
1723
|
-
break;
|
|
1724
|
-
}
|
|
1725
|
-
}
|
|
1726
|
-
});
|
|
1727
|
-
}
|
|
1728
|
-
return nodes;
|
|
1729
|
-
};
|
|
1730
|
-
var matchConditionalTagsWithEndings = function (nodes) {
|
|
1731
|
-
var updated = true;
|
|
1732
|
-
var i = 0;
|
|
1733
|
-
while (updated) {
|
|
1734
|
-
if (i++ > (debugLoops ? 4 : 1000)) {
|
|
1735
|
-
console.warn('Too many updates');
|
|
1736
|
-
break;
|
|
1737
|
-
}
|
|
1738
|
-
updated = false;
|
|
1739
|
-
// tslint:disable-next-line:ter-prefer-arrow-callback
|
|
1740
|
-
nodes = (0, traverse_1.default)(nodes).forEach(function (current) {
|
|
1741
|
-
var _a, _b;
|
|
1742
|
-
if (!isBuilderElementArray(current)) {
|
|
1743
|
-
return;
|
|
1744
|
-
}
|
|
1745
|
-
var _loop_2 = function (currentIndex) {
|
|
1746
|
-
var node = current[currentIndex];
|
|
1747
|
-
if (!isOpenConditionalTag(node) || this_1.key === 'conditionalTags') {
|
|
1748
|
-
return { value: void 0 };
|
|
1749
|
-
}
|
|
1750
|
-
var conditionalTags = [(0, lodash_1.omit)(node, 'children')];
|
|
1751
|
-
var tag = node;
|
|
1752
|
-
var originalIndex = node.meta.originalIndex;
|
|
1753
|
-
var branchIndex = node.meta.branchIndex;
|
|
1754
|
-
while (tag.children) {
|
|
1755
|
-
tag = tag.children[0];
|
|
1756
|
-
if (isOpenConditionalTag(tag)) {
|
|
1757
|
-
conditionalTags.push((0, lodash_1.omit)(tag, 'children'));
|
|
1758
|
-
}
|
|
1759
|
-
else {
|
|
1760
|
-
break;
|
|
1761
|
-
}
|
|
1762
|
-
}
|
|
1763
|
-
var endTag = current
|
|
1764
|
-
.slice(currentIndex + 1)
|
|
1765
|
-
.findIndex(function (el) {
|
|
1766
|
-
var _a, _b;
|
|
1767
|
-
return isEndConditionalTag(el) &&
|
|
1768
|
-
((_a = el.component) === null || _a === void 0 ? void 0 : _a.options.hash) === ((_b = node.component) === null || _b === void 0 ? void 0 : _b.options.hash);
|
|
1769
|
-
});
|
|
1770
|
-
if (endTag === -1) {
|
|
1771
|
-
// TODO try to recover by finding the next shopify condition with the same hash
|
|
1772
|
-
endTag =
|
|
1773
|
-
current
|
|
1774
|
-
.slice(currentIndex + 1)
|
|
1775
|
-
.findIndex(function (el) { var _a, _b; return isCondition(el) && ((_a = el.component) === null || _a === void 0 ? void 0 : _a.options.hash) === ((_b = node.component) === null || _b === void 0 ? void 0 : _b.options.hash); }) + 1;
|
|
1776
|
-
if (endTag === 0) {
|
|
1777
|
-
throw Error("no endTag for a conditional ".concat((_a = node.component) === null || _a === void 0 ? void 0 : _a.options.hash));
|
|
1778
|
-
}
|
|
1779
|
-
}
|
|
1780
|
-
// cursor at condition now
|
|
1781
|
-
var condition = tag;
|
|
1782
|
-
var hoistedCondition = null;
|
|
1783
|
-
/* originalIndex is where the open tag was, e.g
|
|
1784
|
-
{% if test %} TEXT<span> in span</span> <div class = '''>
|
|
1785
|
-
it'll be 2,
|
|
1786
|
-
*/
|
|
1787
|
-
if (originalIndex > 0) {
|
|
1788
|
-
var originalBranch = (0, lodash_1.cloneDeep)((_b = condition.component) === null || _b === void 0 ? void 0 : _b.options.branches[branchIndex]);
|
|
1789
|
-
hoistedCondition = (0, lodash_1.mergeWith)({}, condition, {
|
|
1790
|
-
component: {
|
|
1791
|
-
options: {
|
|
1792
|
-
isHoisted: true,
|
|
1793
|
-
branches: [
|
|
1794
|
-
__assign(__assign({}, originalBranch), { blocks: originalBranch.blocks.slice(0, originalIndex) }),
|
|
1795
|
-
],
|
|
1796
|
-
},
|
|
1797
|
-
},
|
|
1798
|
-
}, function (_, dest) {
|
|
1799
|
-
// always prefer arrays from destination, (third arg above)
|
|
1800
|
-
if (Array.isArray(dest)) {
|
|
1801
|
-
return dest;
|
|
1802
|
-
}
|
|
1803
|
-
});
|
|
1804
|
-
condition = (0, lodash_1.mergeWith)({}, condition, {
|
|
1805
|
-
component: {
|
|
1806
|
-
options: {
|
|
1807
|
-
branches: __spreadArray(__spreadArray(__spreadArray([], condition.component.options.branches.slice(0, branchIndex), true), [
|
|
1808
|
-
__assign(__assign({}, originalBranch), { blocks: originalBranch.blocks.slice(originalIndex) })
|
|
1809
|
-
], false), condition.component.options.branches.slice(branchIndex + 1), true),
|
|
1810
|
-
},
|
|
1811
|
-
},
|
|
1812
|
-
}, function (_, dest) {
|
|
1813
|
-
// always prefer arrays from destination, (third arg above)
|
|
1814
|
-
if (Array.isArray(dest)) {
|
|
1815
|
-
return dest;
|
|
1816
|
-
}
|
|
1817
|
-
});
|
|
1818
|
-
}
|
|
1819
|
-
this_1.update(__spreadArray(__spreadArray(__spreadArray(__spreadArray([], current.slice(0, currentIndex), true), (hoistedCondition ? [hoistedCondition] : []), true), [
|
|
1820
|
-
el({
|
|
1821
|
-
// TODO: lookout for tempnodes in condition blocks
|
|
1822
|
-
children: __spreadArray([condition], current.slice(currentIndex + 1, endTag), true),
|
|
1823
|
-
component: {
|
|
1824
|
-
name: 'Shopify:WrapperTag',
|
|
1825
|
-
options: {
|
|
1826
|
-
conditionalTags: conditionalTags,
|
|
1827
|
-
},
|
|
1828
|
-
},
|
|
1829
|
-
})
|
|
1830
|
-
], false), current.slice(currentIndex + endTag + 2), true), true);
|
|
1831
|
-
updated = true;
|
|
1832
|
-
};
|
|
1833
|
-
var this_1 = this;
|
|
1834
|
-
for (var currentIndex = 0; currentIndex < current.length; currentIndex++) {
|
|
1835
|
-
var state_1 = _loop_2(currentIndex);
|
|
1836
|
-
if (typeof state_1 === "object")
|
|
1837
|
-
return state_1.value;
|
|
1838
|
-
}
|
|
1839
|
-
});
|
|
1840
|
-
}
|
|
1841
|
-
return nodes;
|
|
1842
|
-
};
|
|
1843
|
-
var postProcessBuilderTree = function (nodes, options) { return __awaiter(void 0, void 0, void 0, function () {
|
|
1844
|
-
var updated, i, latest;
|
|
1845
|
-
return __generator(this, function (_a) {
|
|
1846
|
-
updated = true;
|
|
1847
|
-
i = 0;
|
|
1848
|
-
latest = nodes;
|
|
1849
|
-
while (updated) {
|
|
1850
|
-
if (i++ > (debugLoops ? 3 : 1000)) {
|
|
1851
|
-
console.warn('Too many updates');
|
|
1852
|
-
break;
|
|
1853
|
-
}
|
|
1854
|
-
updated = false;
|
|
1855
|
-
// tslint:disable-next-line:ter-prefer-arrow-callback
|
|
1856
|
-
latest = (0, traverse_1.default)(latest).forEach(function (current) {
|
|
1857
|
-
var _a, _b, _c, _d, _e, _f;
|
|
1858
|
-
if (!isBuilderElementArray(current)) {
|
|
1859
|
-
return;
|
|
1860
|
-
}
|
|
1861
|
-
var _loop_3 = function (item) {
|
|
1862
|
-
// TODO: add support for {% javascript %} and {% stylesheet %} here as well:
|
|
1863
|
-
// https://shopify.dev/tutorials/develop-theme-use-sections#id
|
|
1864
|
-
if (((_a = item.meta) === null || _a === void 0 ? void 0 : _a.identifier) === 'ShopifySection') {
|
|
1865
|
-
// haven't updated the section layer yet if no schema, try to process
|
|
1866
|
-
var schema = (_b = item.component) === null || _b === void 0 ? void 0 : _b.options.schema;
|
|
1867
|
-
if (!schema) {
|
|
1868
|
-
var schemaBlock = (_c = item.children) === null || _c === void 0 ? void 0 : _c.find(function (child) {
|
|
1869
|
-
return child.layerName === 'Schema';
|
|
1870
|
-
});
|
|
1871
|
-
if (schemaBlock) {
|
|
1872
|
-
item.component.options.schema = (_d = schemaBlock.component) === null || _d === void 0 ? void 0 : _d.options;
|
|
1873
|
-
if (!item.component.options.section) {
|
|
1874
|
-
item.component.options.section = {
|
|
1875
|
-
name: '',
|
|
1876
|
-
settings: {},
|
|
1877
|
-
};
|
|
1878
|
-
}
|
|
1879
|
-
var settings = item.component.options.section.settings;
|
|
1880
|
-
for (var _g = 0, _h = (_e = schemaBlock.component) === null || _e === void 0 ? void 0 : _e.options.settings; _g < _h.length; _g++) {
|
|
1881
|
-
var setting = _h[_g];
|
|
1882
|
-
var name_8 = setting.id;
|
|
1883
|
-
// TODO: sometimes shopify templates are using settings but they don't have a default or a config in the settings_data.json but somehow have a value?
|
|
1884
|
-
if (typeof settings[name_8] === 'undefined' &&
|
|
1885
|
-
typeof setting.default !== 'undefined') {
|
|
1886
|
-
settings[name_8] = setting.default;
|
|
1887
|
-
}
|
|
1888
|
-
}
|
|
1889
|
-
}
|
|
1890
|
-
else {
|
|
1891
|
-
console.warn('This section has no schema!');
|
|
1892
|
-
// Put an object here so we know we tried to process so the above condition doesn't match anymore
|
|
1893
|
-
item.component.options.schema = {};
|
|
1894
|
-
}
|
|
1895
|
-
updated = true;
|
|
1896
|
-
return { value: this_2.stop() };
|
|
1897
|
-
}
|
|
1898
|
-
}
|
|
1899
|
-
var _j = tempNodeInfo(item), name_9 = _j.name, value = _j.value;
|
|
1900
|
-
var parsedValue = value && (0, lodash_1.attempt)(function () { return JSON.parse(value); });
|
|
1901
|
-
if (name_9) {
|
|
1902
|
-
var isBlockStart = ['for', 'if', 'unless', 'paginate', 'form'].includes(name_9);
|
|
1903
|
-
if (isBlockStart) {
|
|
1904
|
-
var parent_2 = current;
|
|
1905
|
-
// Could be fucked.... could have no close tag... or be in wrong palce...
|
|
1906
|
-
// Handle this later.
|
|
1907
|
-
var nextSiblings = getNextBuilderSiblings(item, parent_2);
|
|
1908
|
-
var skip_1 = 0;
|
|
1909
|
-
// TODO: maybe reverse traverse for end tag like compylr...
|
|
1910
|
-
var endTag = nextSiblings.find(function (el) {
|
|
1911
|
-
var siblingName = tempNodeInfo(el).name;
|
|
1912
|
-
if (name_9 === siblingName) {
|
|
1913
|
-
skip_1++;
|
|
1914
|
-
return false;
|
|
1915
|
-
}
|
|
1916
|
-
var matches = siblingName === 'end' + name_9;
|
|
1917
|
-
if (matches) {
|
|
1918
|
-
if (skip_1) {
|
|
1919
|
-
skip_1--;
|
|
1920
|
-
}
|
|
1921
|
-
else {
|
|
1922
|
-
return true;
|
|
1923
|
-
}
|
|
1924
|
-
}
|
|
1925
|
-
return false;
|
|
1926
|
-
});
|
|
1927
|
-
if (!endTag) {
|
|
1928
|
-
console.warn("Did not find end tag for tag: \"".concat(name_9, "\""), item.component.options.value);
|
|
1929
|
-
}
|
|
1930
|
-
else {
|
|
1931
|
-
updated = true;
|
|
1932
|
-
var skip_2 = 0;
|
|
1933
|
-
var midTags = nextSiblings.slice(0, parent_2.indexOf(endTag)).filter(function (el) {
|
|
1934
|
-
var siblingName = tempNodeInfo(el).name;
|
|
1935
|
-
if ('if' === siblingName || siblingName === 'unless') {
|
|
1936
|
-
skip_2++;
|
|
1937
|
-
return false;
|
|
1938
|
-
}
|
|
1939
|
-
var matches = siblingName === 'endunless' || siblingName === 'endif';
|
|
1940
|
-
if (matches) {
|
|
1941
|
-
if (skip_2) {
|
|
1942
|
-
skip_2--;
|
|
1943
|
-
}
|
|
1944
|
-
else {
|
|
1945
|
-
// TODO: short circuit
|
|
1946
|
-
return false;
|
|
1947
|
-
}
|
|
1948
|
-
}
|
|
1949
|
-
if (!skip_2 && ['else', 'elsif'].includes(siblingName)) {
|
|
1950
|
-
return true;
|
|
1951
|
-
}
|
|
1952
|
-
return false;
|
|
1953
|
-
});
|
|
1954
|
-
if (name_9 === 'if') {
|
|
1955
|
-
var allTags = [item].concat(midTags).concat([endTag]);
|
|
1956
|
-
var branches = [];
|
|
1957
|
-
for (var i_1 = 0; i_1 < allTags.length; i_1++) {
|
|
1958
|
-
var tag = allTags[i_1];
|
|
1959
|
-
var info = tempNodeInfo(tag);
|
|
1960
|
-
if (info.name === 'endif') {
|
|
1961
|
-
break;
|
|
1962
|
-
}
|
|
1963
|
-
var nextTag = allTags[i_1 + 1];
|
|
1964
|
-
var parsedValue_1 = info.value && JSON.parse(info.value);
|
|
1965
|
-
branches.push({
|
|
1966
|
-
expression: parsedValue_1.cond
|
|
1967
|
-
? "".concat(parsedValue_1.negate ? '!' : '').concat(liquidConditionTemplate(parsedValue_1.cond))
|
|
1968
|
-
: '',
|
|
1969
|
-
blocks: parent_2.slice(parent_2.indexOf(tag) + 1, parent_2.indexOf(nextTag)),
|
|
1970
|
-
});
|
|
1971
|
-
}
|
|
1972
|
-
this_2.update(__spreadArray(__spreadArray(__spreadArray([], parent_2.slice(0, parent_2.indexOf(item)), true), [
|
|
1973
|
-
el({
|
|
1974
|
-
component: {
|
|
1975
|
-
name: 'Shopify:Condition',
|
|
1976
|
-
options: {
|
|
1977
|
-
hash: parsedValue.hash,
|
|
1978
|
-
branches: branches,
|
|
1979
|
-
},
|
|
1980
|
-
},
|
|
1981
|
-
})
|
|
1982
|
-
], false), parent_2.slice(parent_2.indexOf(endTag) + 1), true), true);
|
|
1983
|
-
}
|
|
1984
|
-
// else if (name === 'unless') {
|
|
1985
|
-
//unless is rewritten as a Shopify:Condition component
|
|
1986
|
-
// }
|
|
1987
|
-
else if (name_9 === 'paginate') {
|
|
1988
|
-
var allTags = [item].concat(midTags).concat([endTag]);
|
|
1989
|
-
var options_1 = {};
|
|
1990
|
-
for (var i_2 = 0; i_2 < allTags.length; i_2++) {
|
|
1991
|
-
var tag = allTags[i_2];
|
|
1992
|
-
var info = tempNodeInfo(tag);
|
|
1993
|
-
if (info.name === 'endpaginate') {
|
|
1994
|
-
break;
|
|
1995
|
-
}
|
|
1996
|
-
var parsedValue_2 = info.value && JSON.parse(info.value);
|
|
1997
|
-
var _k = parsedValue_2.args.split(/\s+by\s*/), expression = _k[0], limit = _k[1];
|
|
1998
|
-
options_1.expression = expression;
|
|
1999
|
-
options_1.limit = limit;
|
|
2000
|
-
}
|
|
2001
|
-
this_2.update(__spreadArray(__spreadArray(__spreadArray([], parent_2.slice(0, parent_2.indexOf(item)), true), [
|
|
2002
|
-
el({
|
|
2003
|
-
component: {
|
|
2004
|
-
options: options_1,
|
|
2005
|
-
name: 'Shopify:Paginate',
|
|
2006
|
-
},
|
|
2007
|
-
children: parent_2.slice(parent_2.indexOf(item) + 1, parent_2.indexOf(endTag)),
|
|
2008
|
-
})
|
|
2009
|
-
], false), parent_2.slice(parent_2.indexOf(endTag) + 1), true), true);
|
|
2010
|
-
}
|
|
2011
|
-
else if (name_9 === 'form') {
|
|
2012
|
-
var allTags = [item].concat(midTags).concat([endTag]);
|
|
2013
|
-
var options_2 = {};
|
|
2014
|
-
for (var i_3 = 0; i_3 < allTags.length; i_3++) {
|
|
2015
|
-
var tag = allTags[i_3];
|
|
2016
|
-
var info = tempNodeInfo(tag);
|
|
2017
|
-
if (info.name === 'endform') {
|
|
2018
|
-
break;
|
|
2019
|
-
}
|
|
2020
|
-
var parsedValue_3 = info.value && JSON.parse(info.value);
|
|
2021
|
-
var args = parseArgList(parsedValue_3.args);
|
|
2022
|
-
options_2.type = (_f = args.shift()) === null || _f === void 0 ? void 0 : _f.replace(/"/g, '').replace(/'/g, '');
|
|
2023
|
-
options_2.parameter = null;
|
|
2024
|
-
options_2.customAttributes = null;
|
|
2025
|
-
if (args.length && !args[0].includes(':')) {
|
|
2026
|
-
options_2.parameter = args.shift();
|
|
2027
|
-
}
|
|
2028
|
-
if (args.length) {
|
|
2029
|
-
options_2.customAttributes = args;
|
|
2030
|
-
}
|
|
2031
|
-
}
|
|
2032
|
-
this_2.update(__spreadArray(__spreadArray(__spreadArray([], parent_2.slice(0, parent_2.indexOf(item)), true), [
|
|
2033
|
-
el({
|
|
2034
|
-
component: {
|
|
2035
|
-
options: options_2,
|
|
2036
|
-
name: 'Shopify:Form',
|
|
2037
|
-
},
|
|
2038
|
-
children: parent_2.slice(parent_2.indexOf(item) + 1, parent_2.indexOf(endTag)),
|
|
2039
|
-
})
|
|
2040
|
-
], false), parent_2.slice(parent_2.indexOf(endTag) + 1), true), true);
|
|
2041
|
-
}
|
|
2042
|
-
else if (name_9 === 'for') {
|
|
2043
|
-
var options_3 = {
|
|
2044
|
-
repeat: {
|
|
2045
|
-
itemName: parsedValue.variable,
|
|
2046
|
-
collection: parsedValue.collection,
|
|
2047
|
-
expression: parsedValue.fullRaw,
|
|
2048
|
-
},
|
|
2049
|
-
};
|
|
2050
|
-
this_2.update(__spreadArray(__spreadArray(__spreadArray([], parent_2.slice(0, parent_2.indexOf(item)), true), [
|
|
2051
|
-
el({
|
|
2052
|
-
component: {
|
|
2053
|
-
options: options_3,
|
|
2054
|
-
name: 'Shopify:For',
|
|
2055
|
-
},
|
|
2056
|
-
children: parent_2.slice(parent_2.indexOf(item) + 1, parent_2.indexOf(endTag)),
|
|
2057
|
-
})
|
|
2058
|
-
], false), parent_2.slice(parent_2.indexOf(endTag) + 1), true), true);
|
|
2059
|
-
}
|
|
2060
|
-
else {
|
|
2061
|
-
this_2.update(__spreadArray(__spreadArray(__spreadArray([], parent_2.slice(0, parent_2.indexOf(item)), true), [
|
|
2062
|
-
el(__assign(__assign({ component: {
|
|
2063
|
-
name: 'Core:Fragment',
|
|
2064
|
-
}, bindings: {} }, (name_9 === 'for' &&
|
|
2065
|
-
!(0, lodash_1.isError)(parsedValue) && {
|
|
2066
|
-
repeat: {
|
|
2067
|
-
itemName: parsedValue.variable,
|
|
2068
|
-
collection: liquidBindingTemplate(parsedValue.collection),
|
|
2069
|
-
},
|
|
2070
|
-
})), { children: parent_2.slice(parent_2.indexOf(item) + 1, parent_2.indexOf(endTag)) }))
|
|
2071
|
-
], false), parent_2.slice(parent_2.indexOf(endTag) + 1), true), true);
|
|
2072
|
-
}
|
|
2073
|
-
return "break";
|
|
2074
|
-
}
|
|
2075
|
-
}
|
|
2076
|
-
}
|
|
2077
|
-
};
|
|
2078
|
-
var this_2 = this;
|
|
2079
|
-
for (var _i = 0, current_2 = current; _i < current_2.length; _i++) {
|
|
2080
|
-
var item = current_2[_i];
|
|
2081
|
-
var state_2 = _loop_3(item);
|
|
2082
|
-
if (typeof state_2 === "object")
|
|
2083
|
-
return state_2.value;
|
|
2084
|
-
if (state_2 === "break")
|
|
2085
|
-
break;
|
|
2086
|
-
}
|
|
2087
|
-
});
|
|
2088
|
-
}
|
|
2089
|
-
latest = moveCondtionalTagsUp(latest);
|
|
2090
|
-
latest = matchConditionalTagsWithEndings(latest);
|
|
2091
|
-
return [2 /*return*/, latest];
|
|
2092
|
-
});
|
|
2093
|
-
}); };
|
|
2094
|
-
exports.postProcessBuilderTree = postProcessBuilderTree;
|
|
2095
|
-
var htmlAstToBuilder = function (nodes, options) { return __awaiter(void 0, void 0, void 0, function () {
|
|
2096
|
-
var els, _a, _b;
|
|
2097
|
-
return __generator(this, function (_c) {
|
|
2098
|
-
switch (_c.label) {
|
|
2099
|
-
case 0:
|
|
2100
|
-
_a = lodash_1.compact;
|
|
2101
|
-
_b = lodash_1.flatten;
|
|
2102
|
-
return [4 /*yield*/, Promise.all(nodes
|
|
2103
|
-
.filter(function (node) { return isTextNode(node) || isElement(node); })
|
|
2104
|
-
.map(function (node, index, nodes) { return (0, exports.htmlNodeToBuilder)(node, index, nodes, options); }))];
|
|
2105
|
-
case 1:
|
|
2106
|
-
els = _a.apply(void 0, [_b.apply(void 0, [_c.sent()])]);
|
|
2107
|
-
return [2 /*return*/, els];
|
|
2108
|
-
}
|
|
2109
|
-
});
|
|
2110
|
-
}); };
|
|
2111
|
-
exports.htmlAstToBuilder = htmlAstToBuilder;
|
|
2112
|
-
var processedAstToBuilder = function (nodes, options) { return __awaiter(void 0, void 0, void 0, function () {
|
|
2113
|
-
var els, processed;
|
|
2114
|
-
return __generator(this, function (_a) {
|
|
2115
|
-
switch (_a.label) {
|
|
2116
|
-
case 0: return [4 /*yield*/, (0, exports.htmlAstToBuilder)(nodes, options)];
|
|
2117
|
-
case 1:
|
|
2118
|
-
els = _a.sent();
|
|
2119
|
-
return [4 /*yield*/, (0, exports.postProcessBuilderTree)((0, fast_clone_1.fastClone)(els), options)];
|
|
2120
|
-
case 2:
|
|
2121
|
-
processed = _a.sent();
|
|
2122
|
-
return [2 /*return*/, { blocks: processed, preprocessed: els }];
|
|
2123
|
-
}
|
|
2124
|
-
});
|
|
2125
|
-
}); };
|
|
2126
|
-
exports.processedAstToBuilder = processedAstToBuilder;
|
|
2127
|
-
var htmlDebugString = function (els) {
|
|
2128
|
-
var str = els.map(function (el) { return htmlDebugNodeString(el); }).join('\n');
|
|
2129
|
-
return (0, exports.tryFormat)(str);
|
|
2130
|
-
};
|
|
2131
|
-
exports.htmlDebugString = htmlDebugString;
|
|
2132
|
-
var tryFormat = function (str) {
|
|
2133
|
-
try {
|
|
2134
|
-
return (0, standalone_1.format)(str, {
|
|
2135
|
-
parser: 'html',
|
|
2136
|
-
htmlWhitespaceSensitivity: 'ignore',
|
|
2137
|
-
plugins: [htmlParser],
|
|
2138
|
-
});
|
|
2139
|
-
}
|
|
2140
|
-
catch (err) {
|
|
2141
|
-
console.warn('Prettier failed', err);
|
|
2142
|
-
return str;
|
|
2143
|
-
}
|
|
2144
|
-
};
|
|
2145
|
-
exports.tryFormat = tryFormat;
|
|
2146
|
-
var htmlDebugNodeString = function (el) {
|
|
2147
|
-
var tagName = (el.component && el.component.name) || el.tagName;
|
|
2148
|
-
var properties = [];
|
|
2149
|
-
for (var property in el.properties) {
|
|
2150
|
-
var value = el.properties[property];
|
|
2151
|
-
if (property !== 'attr') {
|
|
2152
|
-
properties.push([property, value]);
|
|
2153
|
-
}
|
|
2154
|
-
else {
|
|
2155
|
-
for (var attr in value) {
|
|
2156
|
-
properties.push([attr, value[attr]]);
|
|
2157
|
-
}
|
|
2158
|
-
}
|
|
2159
|
-
}
|
|
2160
|
-
for (var binding in el.bindings) {
|
|
2161
|
-
properties.push([':' + binding, el.bindings[binding]]);
|
|
2162
|
-
}
|
|
2163
|
-
if (el.component && el.component.options) {
|
|
2164
|
-
for (var property in el.component.options) {
|
|
2165
|
-
var value = el.component.options[property];
|
|
2166
|
-
if (value && typeof value === 'object') {
|
|
2167
|
-
value = JSON.stringify(value);
|
|
2168
|
-
}
|
|
2169
|
-
properties.push(['@' + property, String(value)]);
|
|
2170
|
-
}
|
|
2171
|
-
}
|
|
2172
|
-
return "<".concat(tagName, " ").concat(properties.reduce(function (memo, tuple) { return memo + " ".concat(tuple[0], "=\"").concat((tuple[1] || '').replace(/"/g, '`'), "\""); }, ''), "\n ").concat(el.children && el.children.length
|
|
2173
|
-
? ">".concat(el.children.map(function (child) { return htmlDebugNodeString(child); }).join('\n'), "</").concat(tagName, ">")
|
|
2174
|
-
: '/>', "\n ");
|
|
2175
|
-
};
|
|
2176
|
-
/**
|
|
2177
|
-
* This function is the first step, before we turn the liquid into an AST.
|
|
2178
|
-
* It is used to make certain changes to the liquid string that are much
|
|
2179
|
-
* easier to do before we process it. Examples of this include rewriting
|
|
2180
|
-
* certain tags to a format we already know how to parse, or fixing common
|
|
2181
|
-
* liquid template errors that cause problems during import.
|
|
2182
|
-
*
|
|
2183
|
-
* Note: there are a lot of regexes in here, and they can be confusing!
|
|
2184
|
-
* If you are trying to debug something that includes a regex, try using
|
|
2185
|
-
* a tool like https://regex101.com/ to break down what is going on.
|
|
2186
|
-
*/
|
|
2187
|
-
var preprocessLiquid = function (liquid, options) {
|
|
2188
|
-
if (options === void 0) { options = {}; }
|
|
2189
|
-
return __awaiter(void 0, void 0, void 0, function () {
|
|
2190
|
-
var processedLiquid, captureGroupRegex, matchedCaptureGroup, allCaptureGroupMatches, match, capturedVariableName, capturedContents, capturedContentsHasLiquid, capturedContentContainsCaptureTag, capturedVariableReplaceRegex, _i, allCaptureGroupMatches_1, captureMatch, captureReplacement, includesWithRegex, includesWithAndValuesRegex, templateContainsRegex, booleanHTMLAttributes, _loop_4, _a, booleanHTMLAttributes_1, booleanAttribute, themeAsset, themeSettings, contentForIndexTemplates, contentForIndexLiquidStrings_1, contentForIndexRegex;
|
|
2191
|
-
var _b, _c, _d;
|
|
2192
|
-
return __generator(this, function (_e) {
|
|
2193
|
-
switch (_e.label) {
|
|
2194
|
-
case 0:
|
|
2195
|
-
processedLiquid = liquid || '';
|
|
2196
|
-
captureGroupRegex = /{%-?\s*capture\s*(.+?)-?%}([\s\S]*?){%-?\s*endcapture\s*-?%}/gi;
|
|
2197
|
-
allCaptureGroupMatches = [];
|
|
2198
|
-
while ((matchedCaptureGroup = captureGroupRegex.exec(processedLiquid)) !== null) {
|
|
2199
|
-
match = matchedCaptureGroup[0], capturedVariableName = matchedCaptureGroup[1], capturedContents = matchedCaptureGroup[2];
|
|
2200
|
-
capturedContentsHasLiquid = capturedContents === null || capturedContents === void 0 ? void 0 : capturedContents.match(/\{%/gim);
|
|
2201
|
-
capturedContentContainsCaptureTag = capturedContents === null || capturedContents === void 0 ? void 0 : capturedContents.match(/{%-?\s*capture/gim);
|
|
2202
|
-
if (capturedVariableName && capturedContentsHasLiquid && !capturedContentContainsCaptureTag) {
|
|
2203
|
-
// We want to find a replace any instances of the captured variable in the template, i.e. {{ my_variable }}
|
|
2204
|
-
allCaptureGroupMatches.push({
|
|
2205
|
-
match: match,
|
|
2206
|
-
capturedVariableName: capturedVariableName,
|
|
2207
|
-
capturedContents: capturedContents,
|
|
2208
|
-
});
|
|
2209
|
-
capturedVariableReplaceRegex = new RegExp("{{-?\\s*".concat(capturedVariableName.trim(), "\\s*-?}}"), 'gi');
|
|
2210
|
-
processedLiquid = processedLiquid.replace(capturedVariableReplaceRegex, capturedContents);
|
|
2211
|
-
}
|
|
2212
|
-
else if (capturedContentContainsCaptureTag) {
|
|
2213
|
-
console.warn('Capture tag preprocess contained nested capture tag', {
|
|
2214
|
-
match: match,
|
|
2215
|
-
capturedVariableName: capturedVariableName,
|
|
2216
|
-
capturedContents: capturedContents,
|
|
2217
|
-
});
|
|
2218
|
-
}
|
|
2219
|
-
}
|
|
2220
|
-
// For any capture tag that we found, we still want to add it to the state
|
|
2221
|
-
// even though we replaced any {{ captured_variable }} tags with the actual contents
|
|
2222
|
-
// of the capture. The reason for this is so that expressions like:
|
|
2223
|
-
//
|
|
2224
|
-
// {% capture headlines%}....{% endcapture %}
|
|
2225
|
-
// {% assign headline_length = headlines | split: '^' | size %}
|
|
2226
|
-
//
|
|
2227
|
-
// will still work
|
|
2228
|
-
if (allCaptureGroupMatches.length) {
|
|
2229
|
-
for (_i = 0, allCaptureGroupMatches_1 = allCaptureGroupMatches; _i < allCaptureGroupMatches_1.length; _i++) {
|
|
2230
|
-
captureMatch = allCaptureGroupMatches_1[_i];
|
|
2231
|
-
captureReplacement = "{% capture ".concat(captureMatch.capturedVariableName, " %}{% raw %}").concat(captureMatch.capturedContents, "{% endraw %}{% endcapture %}");
|
|
2232
|
-
processedLiquid = processedLiquid.replace(captureMatch.match, captureReplacement);
|
|
2233
|
-
}
|
|
2234
|
-
}
|
|
2235
|
-
includesWithRegex = /{%-?\s*include\s*([\S]+?)\s*with\s*([\S]+?)\s*-?%}/gi;
|
|
2236
|
-
processedLiquid = processedLiquid.replace(includesWithRegex, function (fullIncludesMatch, templateName, withMatch) {
|
|
2237
|
-
var templateNameCleaned = templateName.trim().replace(/'/g, '').replace(/"/g, '');
|
|
2238
|
-
return "{% include '".concat(templateNameCleaned, "', ").concat(templateNameCleaned, ": ").concat(withMatch, " %}");
|
|
2239
|
-
});
|
|
2240
|
-
includesWithAndValuesRegex = /{%-?\s*include\s*([\S]+?)\s*with\s*(([\S]+?:\s*[\S]+?,?\s*)+)-?%}/gi;
|
|
2241
|
-
processedLiquid = processedLiquid.replace(includesWithAndValuesRegex, function (fullIncludesMatch, templateName, allKeysAndValues) {
|
|
2242
|
-
var templateNameCleaned = templateName.trim().replace(/'/g, '').replace(/"/g, '');
|
|
2243
|
-
var allKeysAndValuesCleaned = allKeysAndValues.trim().replace(/\s+/g, ' ');
|
|
2244
|
-
return "{% include '".concat(templateNameCleaned, "', ").concat(allKeysAndValuesCleaned, " %}");
|
|
2245
|
-
});
|
|
2246
|
-
templateContainsRegex = /{%-?(.+?)template\s+contains\s+(.+?)-?%}/gi;
|
|
2247
|
-
processedLiquid = processedLiquid.replace(templateContainsRegex, function (fullTemplateMatch, templatePrefixText, templatePostfixText) {
|
|
2248
|
-
return "{% ".concat(templatePrefixText, " template.name contains ").concat(templatePostfixText, " %}");
|
|
2249
|
-
});
|
|
2250
|
-
booleanHTMLAttributes = ['checked', 'disabled', 'selected'];
|
|
2251
|
-
_loop_4 = function (booleanAttribute) {
|
|
2252
|
-
var booleanAttributeRegex = new RegExp("<[\\s\\S]*?(".concat(booleanAttribute, "{%)[\\s\\S]*?>"), 'gi');
|
|
2253
|
-
processedLiquid = processedLiquid.replace(booleanAttributeRegex, function (fullMatch, attributeMatch) {
|
|
2254
|
-
return fullMatch.replace("".concat(attributeMatch), "".concat(booleanAttribute, " {%"));
|
|
2255
|
-
});
|
|
2256
|
-
};
|
|
2257
|
-
for (_a = 0, booleanHTMLAttributes_1 = booleanHTMLAttributes; _a < booleanHTMLAttributes_1.length; _a++) {
|
|
2258
|
-
booleanAttribute = booleanHTMLAttributes_1[_a];
|
|
2259
|
-
_loop_4(booleanAttribute);
|
|
2260
|
-
}
|
|
2261
|
-
return [4 /*yield*/, getShopifyAsset('config/settings_data.json', options)];
|
|
2262
|
-
case 1:
|
|
2263
|
-
themeAsset = _e.sent();
|
|
2264
|
-
themeSettings = typeof themeAsset === 'string' && (0, lodash_1.attempt)(function () { return JSON.parse(themeAsset); });
|
|
2265
|
-
if (themeSettings && !(0, lodash_1.isError)(themeSettings)) {
|
|
2266
|
-
contentForIndexTemplates = ((_b = themeSettings.current) === null || _b === void 0 ? void 0 : _b.content_for_index) || ((_d = (_c = themeSettings.presets) === null || _c === void 0 ? void 0 : _c.Default) === null || _d === void 0 ? void 0 : _d.content_for_index);
|
|
2267
|
-
if (contentForIndexTemplates.length) {
|
|
2268
|
-
contentForIndexLiquidStrings_1 = contentForIndexTemplates.map(function (template) { return "{% section '".concat(template, "' %}"); });
|
|
2269
|
-
contentForIndexRegex = /{{\s*content_for_index\s*}}/gi;
|
|
2270
|
-
processedLiquid = processedLiquid.replace(contentForIndexRegex, function (fullMatch) {
|
|
2271
|
-
return fullMatch.replace(fullMatch, contentForIndexLiquidStrings_1.join(''));
|
|
2272
|
-
});
|
|
2273
|
-
}
|
|
2274
|
-
}
|
|
2275
|
-
return [2 /*return*/, processedLiquid];
|
|
2276
|
-
}
|
|
2277
|
-
});
|
|
2278
|
-
});
|
|
2279
|
-
};
|
|
2280
|
-
exports.preprocessLiquid = preprocessLiquid;
|
|
2281
|
-
var liquidToBuilder = function (liquid, options) {
|
|
2282
|
-
if (options === void 0) { options = {}; }
|
|
2283
|
-
return __awaiter(void 0, void 0, void 0, function () {
|
|
2284
|
-
var preprocessedLiquid, scriptRe, scriptsInLiquid, parsedTemplateItems, html, themeAsset, themeSettings, serialized, htmlNodes, blocks;
|
|
2285
|
-
return __generator(this, function (_a) {
|
|
2286
|
-
switch (_a.label) {
|
|
2287
|
-
case 0:
|
|
2288
|
-
if (options.log) {
|
|
2289
|
-
console.log('liquidToBuilder: liquid', { liquid: liquid });
|
|
2290
|
-
}
|
|
2291
|
-
return [4 /*yield*/, (0, exports.preprocessLiquid)(liquid, options)];
|
|
2292
|
-
case 1:
|
|
2293
|
-
preprocessedLiquid = _a.sent();
|
|
2294
|
-
if (options.log) {
|
|
2295
|
-
console.log('preprocessedLiquid: ', { preprocessedLiquid: preprocessedLiquid });
|
|
2296
|
-
}
|
|
2297
|
-
scriptRe = /<script[\s\S]*?>[\s\S]*?<\/script>/gi;
|
|
2298
|
-
scriptsInLiquid = preprocessedLiquid.match(scriptRe);
|
|
2299
|
-
parsedTemplateItems = (0, exports.liquidToAst)(preprocessedLiquid.replace(scriptRe, ''), options);
|
|
2300
|
-
if (options.log) {
|
|
2301
|
-
console.log('liquidToBuilder: parsed liquid', parsedTemplateItems);
|
|
2302
|
-
}
|
|
2303
|
-
return [4 /*yield*/, (0, exports.parsedLiquidToHtml)(parsedTemplateItems, options)];
|
|
2304
|
-
case 2:
|
|
2305
|
-
html = _a.sent();
|
|
2306
|
-
return [4 /*yield*/, getShopifyAsset('config/settings_data.json', options)];
|
|
2307
|
-
case 3:
|
|
2308
|
-
themeAsset = _a.sent();
|
|
2309
|
-
themeSettings = typeof themeAsset === 'string' && (0, lodash_1.attempt)(function () { return JSON.parse(themeAsset); });
|
|
2310
|
-
if (themeSettings && !(0, lodash_1.isError)(themeSettings) && options.importSections !== false) {
|
|
2311
|
-
serialized = serializeBlock({
|
|
2312
|
-
layerName: "Theme Settings",
|
|
2313
|
-
component: {
|
|
2314
|
-
name: 'Shopify:ThemeProvider',
|
|
2315
|
-
options: {
|
|
2316
|
-
shopifyMetafields: [{ path: 'state.settings', as: '_theme_settings' }],
|
|
2317
|
-
state: {
|
|
2318
|
-
settings: mapArrays((0, lodash_1.omit)(themeSettings.current, 'sections')),
|
|
2319
|
-
},
|
|
2320
|
-
},
|
|
2321
|
-
},
|
|
2322
|
-
}, false);
|
|
2323
|
-
html = "".concat(serialized).concat(html).concat(serializedBlockCloseTag);
|
|
2324
|
-
}
|
|
2325
|
-
if (options.log) {
|
|
2326
|
-
console.log('liquidToBuilder: html', { html: html });
|
|
2327
|
-
}
|
|
2328
|
-
htmlNodes = (0, exports.htmlToAst)(html).htmlNodes;
|
|
2329
|
-
if (options.log) {
|
|
2330
|
-
console.log('liquidToBuilder: parsed html', htmlNodes);
|
|
2331
|
-
}
|
|
2332
|
-
return [4 /*yield*/, (0, exports.processedAstToBuilder)(htmlNodes, options)];
|
|
2333
|
-
case 4:
|
|
2334
|
-
blocks = (_a.sent()).blocks;
|
|
2335
|
-
if (Array.isArray(scriptsInLiquid) && scriptsInLiquid.length > 0) {
|
|
2336
|
-
blocks.push(el({
|
|
2337
|
-
layerName: 'Imported Script',
|
|
2338
|
-
component: {
|
|
2339
|
-
name: 'Custom Code',
|
|
2340
|
-
options: {
|
|
2341
|
-
code: scriptsInLiquid.join(''),
|
|
2342
|
-
replaceNodes: true,
|
|
2343
|
-
},
|
|
2344
|
-
},
|
|
2345
|
-
}));
|
|
2346
|
-
}
|
|
2347
|
-
if (options.importSections !== false) {
|
|
2348
|
-
// TODO: special option for this
|
|
2349
|
-
// blocks.unshift(
|
|
2350
|
-
// el({
|
|
2351
|
-
// layerName: 'BuiltWithBuilder flag',
|
|
2352
|
-
// component: {
|
|
2353
|
-
// name: 'Custom Code',
|
|
2354
|
-
// options: {
|
|
2355
|
-
// code: '<script>window.builtWithBuilder = true</script>',
|
|
2356
|
-
// },
|
|
2357
|
-
// },
|
|
2358
|
-
// }),
|
|
2359
|
-
// );
|
|
2360
|
-
}
|
|
2361
|
-
if (options.log) {
|
|
2362
|
-
console.log('liquidToBuilder: blocks', JSON.stringify(blocks));
|
|
2363
|
-
}
|
|
2364
|
-
return [2 /*return*/, blocks];
|
|
2365
|
-
}
|
|
2366
|
-
});
|
|
2367
|
-
});
|
|
2368
|
-
};
|
|
2369
|
-
exports.liquidToBuilder = liquidToBuilder;
|
|
2370
|
-
var htmlToBuilder = function (html) { return __awaiter(void 0, void 0, void 0, function () {
|
|
2371
|
-
var htmlNodes, blocks;
|
|
2372
|
-
return __generator(this, function (_a) {
|
|
2373
|
-
switch (_a.label) {
|
|
2374
|
-
case 0:
|
|
2375
|
-
htmlNodes = (0, exports.htmlToAst)(html).htmlNodes;
|
|
2376
|
-
console.log('procesed', htmlNodes);
|
|
2377
|
-
return [4 /*yield*/, (0, exports.processedAstToBuilder)(htmlNodes, {})];
|
|
2378
|
-
case 1:
|
|
2379
|
-
blocks = (_a.sent()).blocks;
|
|
2380
|
-
console.log('blocks', blocks);
|
|
2381
|
-
return [2 /*return*/, blocks];
|
|
2382
|
-
}
|
|
2383
|
-
});
|
|
2384
|
-
}); };
|
|
2385
|
-
exports.htmlToBuilder = htmlToBuilder;
|
|
2386
|
-
var bindingsFromAttrs = function (node, bindings, properties, options) { return __awaiter(void 0, void 0, void 0, function () {
|
|
2387
|
-
var getIndexOfClosingTag, getConditionalValue, parseAttrsInRange;
|
|
2388
|
-
return __generator(this, function (_a) {
|
|
2389
|
-
switch (_a.label) {
|
|
2390
|
-
case 0:
|
|
2391
|
-
getIndexOfClosingTag = function (start, closingTags) {
|
|
2392
|
-
var i = start;
|
|
2393
|
-
var cursor = 1;
|
|
2394
|
-
while (i < node.attrsList.length) {
|
|
2395
|
-
var name_10 = node.attrsList[i].name;
|
|
2396
|
-
if (name_10 === '[if]') {
|
|
2397
|
-
if (!closingTags.includes('[else]')) {
|
|
2398
|
-
throw new Error('if after else');
|
|
2399
|
-
}
|
|
2400
|
-
cursor++;
|
|
2401
|
-
}
|
|
2402
|
-
if (closingTags.includes(name_10)) {
|
|
2403
|
-
cursor--;
|
|
2404
|
-
if (cursor === 0) {
|
|
2405
|
-
return i;
|
|
2406
|
-
}
|
|
2407
|
-
}
|
|
2408
|
-
i++;
|
|
2409
|
-
}
|
|
2410
|
-
throw new Error("".concat(cursor, " no matching closing tag"));
|
|
2411
|
-
};
|
|
2412
|
-
getConditionalValue = function (conditions, value, defaultValue) {
|
|
2413
|
-
return conditions.length > 0
|
|
2414
|
-
? "/*start*/".concat(conditions
|
|
2415
|
-
.map(function (c) { return "".concat(c.negate ? '!' : '').concat(liquidConditionTemplate(c.expression)); })
|
|
2416
|
-
.join('&&') + " ? ".concat(value, " : (").concat(defaultValue, ")"), "/*end*/")
|
|
2417
|
-
: value;
|
|
2418
|
-
};
|
|
2419
|
-
parseAttrsInRange = function (start, end, conditions) { return __awaiter(void 0, void 0, void 0, function () {
|
|
2420
|
-
var i, keyForImage, _a, name_11, value, key, jump, stuff, elseConditions, liquidStr, useKey, parsed, parsedValue, translation, useKey;
|
|
2421
|
-
return __generator(this, function (_b) {
|
|
2422
|
-
switch (_b.label) {
|
|
2423
|
-
case 0:
|
|
2424
|
-
i = start;
|
|
2425
|
-
keyForImage = '';
|
|
2426
|
-
_b.label = 1;
|
|
2427
|
-
case 1:
|
|
2428
|
-
if (!(i < end)) return [3 /*break*/, 15];
|
|
2429
|
-
_a = node.attrsList[i], name_11 = _a.name, value = _a.value;
|
|
2430
|
-
key = name_11;
|
|
2431
|
-
jump = 1;
|
|
2432
|
-
if (!hasTag(key)) return [3 /*break*/, 10];
|
|
2433
|
-
stuff = JSON.parse(htmlDecode(value));
|
|
2434
|
-
if (!(key === '[if]')) return [3 /*break*/, 3];
|
|
2435
|
-
jump = getIndexOfClosingTag(i + 1, ['[endif]']);
|
|
2436
|
-
return [4 /*yield*/, parseAttrsInRange(i + 1, jump, conditions.concat([{ expression: stuff.cond, negate: stuff.negate }]))];
|
|
2437
|
-
case 2:
|
|
2438
|
-
_b.sent();
|
|
2439
|
-
return [3 /*break*/, 9];
|
|
2440
|
-
case 3:
|
|
2441
|
-
if (!(key === '[unless]')) return [3 /*break*/, 5];
|
|
2442
|
-
jump = getIndexOfClosingTag(i + 1, ['[endunless]']);
|
|
2443
|
-
return [4 /*yield*/, parseAttrsInRange(i + 1, jump, conditions.concat([{ expression: stuff.cond, negate: true }]))];
|
|
2444
|
-
case 4:
|
|
2445
|
-
_b.sent();
|
|
2446
|
-
return [3 /*break*/, 9];
|
|
2447
|
-
case 5:
|
|
2448
|
-
if (!(key === '[else]')) return [3 /*break*/, 7];
|
|
2449
|
-
jump = getIndexOfClosingTag(i + 1, ['[endif]']);
|
|
2450
|
-
return [4 /*yield*/, parseAttrsInRange(i + 1, jump, conditions.map(function (cond) { return (__assign(__assign({}, cond), { negate: !cond.negate })); }))];
|
|
2451
|
-
case 6:
|
|
2452
|
-
_b.sent();
|
|
2453
|
-
return [3 /*break*/, 9];
|
|
2454
|
-
case 7:
|
|
2455
|
-
if (!(key === '[elsif]')) return [3 /*break*/, 9];
|
|
2456
|
-
jump = getIndexOfClosingTag(i + 1, ['[elsif]', '[endif]']);
|
|
2457
|
-
elseConditions = conditions.map(function (cond) { return (__assign(__assign({}, cond), { negate: !cond.negate })); });
|
|
2458
|
-
return [4 /*yield*/, parseAttrsInRange(i + 1, jump, elseConditions.concat([{ expression: stuff.cond }]))];
|
|
2459
|
-
case 8:
|
|
2460
|
-
_b.sent();
|
|
2461
|
-
_b.label = 9;
|
|
2462
|
-
case 9: return [3 /*break*/, 14];
|
|
2463
|
-
case 10:
|
|
2464
|
-
if (!hasTag(value)) return [3 /*break*/, 13];
|
|
2465
|
-
liquidStr = stringWithBindingsToLiquid(value);
|
|
2466
|
-
// Remove trailing semi-colon because the liquid render function does not know how to handle it
|
|
2467
|
-
liquidStr = liquidStr === null || liquidStr === void 0 ? void 0 : liquidStr.replace(/;$/, '');
|
|
2468
|
-
useKey = key;
|
|
2469
|
-
if ((keyForImage == key || (!keyForImage && (key === 'src' || key === 'data-src'))) &&
|
|
2470
|
-
node.tag === 'img') {
|
|
2471
|
-
useKey = 'component.options.image';
|
|
2472
|
-
keyForImage = key;
|
|
2473
|
-
}
|
|
2474
|
-
if (key === 'data-srcset' && node.tag === 'img') {
|
|
2475
|
-
useKey = 'srcset';
|
|
2476
|
-
}
|
|
2477
|
-
if (useKey === 'style') {
|
|
2478
|
-
useKey = 'attr.style';
|
|
2479
|
-
}
|
|
2480
|
-
bindings[useKey] = getConditionalValue(conditions, liquidRenderTemplate(liquidStr), bindings[useKey]);
|
|
2481
|
-
parsed = parseTag(value);
|
|
2482
|
-
if (!(parsed && parsed.value && parsed.name === 'output')) return [3 /*break*/, 12];
|
|
2483
|
-
parsedValue = JSON.parse(parsed.value);
|
|
2484
|
-
return [4 /*yield*/, getTranslation(parsedValue, options)];
|
|
2485
|
-
case 11:
|
|
2486
|
-
translation = _b.sent();
|
|
2487
|
-
if (translation !== null) {
|
|
2488
|
-
if (conditions.length === 0) {
|
|
2489
|
-
delete bindings[key];
|
|
2490
|
-
properties[key] = translation;
|
|
2491
|
-
}
|
|
2492
|
-
else {
|
|
2493
|
-
bindings[key] = getConditionalValue(conditions, "'".concat(translation, "'"), bindings[key]);
|
|
2494
|
-
}
|
|
2495
|
-
}
|
|
2496
|
-
_b.label = 12;
|
|
2497
|
-
case 12: return [3 /*break*/, 14];
|
|
2498
|
-
case 13:
|
|
2499
|
-
if (key === 'style' && conditions.length === 0) {
|
|
2500
|
-
if (!properties.attr) {
|
|
2501
|
-
// TODO: use another property? hm
|
|
2502
|
-
properties.attr = {};
|
|
2503
|
-
}
|
|
2504
|
-
properties.attr.style = value;
|
|
2505
|
-
console.warn('skipping style', value);
|
|
2506
|
-
}
|
|
2507
|
-
else if (key.includes('[')) {
|
|
2508
|
-
console.warn('Found property key with [', key);
|
|
2509
|
-
}
|
|
2510
|
-
else {
|
|
2511
|
-
if (conditions.length > 0) {
|
|
2512
|
-
useKey = key === 'style' ? 'attr.style' : key;
|
|
2513
|
-
bindings[useKey] = getConditionalValue(conditions, "'".concat(value, "'"), bindings[useKey]);
|
|
2514
|
-
}
|
|
2515
|
-
else {
|
|
2516
|
-
properties[key] = value;
|
|
2517
|
-
}
|
|
2518
|
-
// TEMP HACK FOR LAZY IMAGES
|
|
2519
|
-
if (key === 'data-src') {
|
|
2520
|
-
properties.src = value;
|
|
2521
|
-
}
|
|
2522
|
-
}
|
|
2523
|
-
_b.label = 14;
|
|
2524
|
-
case 14:
|
|
2525
|
-
i += jump;
|
|
2526
|
-
return [3 /*break*/, 1];
|
|
2527
|
-
case 15: return [2 /*return*/];
|
|
2528
|
-
}
|
|
2529
|
-
});
|
|
2530
|
-
}); };
|
|
2531
|
-
return [4 /*yield*/, parseAttrsInRange(0, node.attrsList.length, [])];
|
|
2532
|
-
case 1:
|
|
2533
|
-
_a.sent();
|
|
2534
|
-
return [2 /*return*/];
|
|
2535
|
-
}
|
|
2536
|
-
});
|
|
2537
|
-
}); };
|
|
2538
|
-
exports.bindingsFromAttrs = bindingsFromAttrs;
|