@merkur/preact 0.38.0 → 0.40.0

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/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  <p align="center">
2
2
  <a href="https://merkur.js.org/docs/getting-started" title="Getting started">
3
- <img src="https://raw.githubusercontent.com/mjancarik/merkur/master/images/merkur-illustration.png" width="100px" height="100px" alt="Merkur illustration"/>
3
+ <img src="https://raw.githubusercontent.com/mjancarik/merkur/master/images/merkur-logo.png" width="100px" height="100px" alt="Merkur illustration"/>
4
4
  </a>
5
5
  </p>
6
6
 
@@ -7,59 +7,77 @@ var helpers = require('@merkur/plugin-component/helpers');
7
7
  /**
8
8
  * Client Factory for creating merkur widgets with preact renderer.
9
9
  */
10
- function createPreactWidget({ name, version, $dependencies, viewFactory, ...restProps }) {
11
- const widgetFactory = async (widgetParams) => core.createMerkurWidget({
12
- ...restProps,
13
- ...widgetParams,
14
- $dependencies: {
15
- ...$dependencies,
16
- render: preact.render,
17
- hydrate: preact.hydrate,
18
- },
19
- shouldHydrate(widget, { container, isSlot }) {
20
- return Boolean(container?.children?.length && !isSlot);
21
- },
22
- async mount(widget) {
23
- await helpers.mapViews(widget, viewFactory, ({ View, ErrorView, container, ...rest }) => {
24
- if (!container) {
25
- return;
26
- }
27
- const { render, hydrate } = widget.$dependencies;
28
- const renderView = widget.shouldHydrate({
29
- View,
30
- ErrorView,
31
- container,
32
- ...rest,
33
- })
34
- ? hydrate
35
- : render;
36
- // @ts-expect-error the @merkur/plugin-error is optional
37
- if (widget?.error?.status) {
38
- return ErrorView
39
- ? renderView(ErrorView(widget), container)
40
- : render(null, container);
41
- }
42
- return renderView(View(widget), container);
43
- });
44
- },
45
- async update(widget) {
46
- await helpers.mapViews(widget, viewFactory, ({ View, container }) => container && widget.$dependencies.render(View(widget), container));
47
- },
48
- async unmount(widget) {
49
- await helpers.mapViews(widget, viewFactory, ({ container }) => {
50
- if (container) {
51
- widget.$dependencies.render(null, container);
52
- }
53
- });
54
- },
55
- });
56
- // Register widget factory on client
57
- core.createMerkur().register({
58
- name,
59
- version,
60
- createWidget: widgetFactory,
61
- });
62
- return widgetFactory;
10
+ function createPreactWidget({
11
+ name,
12
+ version,
13
+ $dependencies,
14
+ viewFactory,
15
+ ...restProps
16
+ }) {
17
+ const widgetFactory = async widgetParams => core.createMerkurWidget({
18
+ ...restProps,
19
+ ...widgetParams,
20
+ $dependencies: {
21
+ ...$dependencies,
22
+ render: preact.render,
23
+ hydrate: preact.hydrate
24
+ },
25
+ shouldHydrate(widget, {
26
+ container,
27
+ isSlot
28
+ }) {
29
+ return Boolean(container?.children?.length && !isSlot);
30
+ },
31
+ async mount(widget) {
32
+ await helpers.mapViews(widget, viewFactory, ({
33
+ View,
34
+ ErrorView,
35
+ container,
36
+ ...rest
37
+ }) => {
38
+ if (!container) {
39
+ return;
40
+ }
41
+ const {
42
+ render,
43
+ hydrate
44
+ } = widget.$dependencies;
45
+ const renderView = widget.shouldHydrate({
46
+ View,
47
+ ErrorView,
48
+ container,
49
+ ...rest
50
+ }) ? hydrate : render;
51
+ // @ts-expect-error the @merkur/plugin-error is optional
52
+ if (widget?.error?.status) {
53
+ return ErrorView ? renderView(ErrorView(widget), container) : render(null, container);
54
+ }
55
+ return renderView(View(widget), container);
56
+ });
57
+ },
58
+ async update(widget) {
59
+ await helpers.mapViews(widget, viewFactory, ({
60
+ View,
61
+ container
62
+ }) => container && widget.$dependencies.render(View(widget), container));
63
+ },
64
+ async unmount(widget) {
65
+ await helpers.mapViews(widget, viewFactory, ({
66
+ container
67
+ }) => {
68
+ if (container) {
69
+ widget.$dependencies.render(null, container);
70
+ }
71
+ });
72
+ }
73
+ });
74
+ // Register widget factory on client
75
+ core.createMerkur().register({
76
+ name,
77
+ version,
78
+ createWidget: widgetFactory
79
+ });
80
+ return widgetFactory;
63
81
  }
64
82
 
65
83
  exports.createPreactWidget = createPreactWidget;
@@ -7,59 +7,77 @@ var helpers = require('@merkur/plugin-component/helpers');
7
7
  /**
8
8
  * Client Factory for creating merkur widgets with preact renderer.
9
9
  */
10
- function createPreactWidget({ name, version, $dependencies, viewFactory, ...restProps }) {
11
- const widgetFactory = async (widgetParams) => core.createMerkurWidget({
12
- ...restProps,
13
- ...widgetParams,
14
- $dependencies: {
15
- ...$dependencies,
16
- render: preact.render,
17
- hydrate: preact.hydrate,
18
- },
19
- shouldHydrate(widget, { container, isSlot }) {
20
- return Boolean(container?.children?.length && !isSlot);
21
- },
22
- async mount(widget) {
23
- await helpers.mapViews(widget, viewFactory, ({ View, ErrorView, container, ...rest }) => {
24
- if (!container) {
25
- return;
26
- }
27
- const { render, hydrate } = widget.$dependencies;
28
- const renderView = widget.shouldHydrate({
29
- View,
30
- ErrorView,
31
- container,
32
- ...rest,
33
- })
34
- ? hydrate
35
- : render;
36
- // @ts-expect-error the @merkur/plugin-error is optional
37
- if (widget?.error?.status) {
38
- return ErrorView
39
- ? renderView(ErrorView(widget), container)
40
- : render(null, container);
41
- }
42
- return renderView(View(widget), container);
43
- });
44
- },
45
- async update(widget) {
46
- await helpers.mapViews(widget, viewFactory, ({ View, container }) => container && widget.$dependencies.render(View(widget), container));
47
- },
48
- async unmount(widget) {
49
- await helpers.mapViews(widget, viewFactory, ({ container }) => {
50
- if (container) {
51
- widget.$dependencies.render(null, container);
52
- }
53
- });
54
- },
55
- });
56
- // Register widget factory on client
57
- core.createMerkur().register({
58
- name,
59
- version,
60
- createWidget: widgetFactory,
61
- });
62
- return widgetFactory;
10
+ function createPreactWidget({
11
+ name,
12
+ version,
13
+ $dependencies,
14
+ viewFactory,
15
+ ...restProps
16
+ }) {
17
+ const widgetFactory = async widgetParams => core.createMerkurWidget({
18
+ ...restProps,
19
+ ...widgetParams,
20
+ $dependencies: {
21
+ ...$dependencies,
22
+ render: preact.render,
23
+ hydrate: preact.hydrate
24
+ },
25
+ shouldHydrate(widget, {
26
+ container,
27
+ isSlot
28
+ }) {
29
+ return Boolean(container?.children?.length && !isSlot);
30
+ },
31
+ async mount(widget) {
32
+ await helpers.mapViews(widget, viewFactory, ({
33
+ View,
34
+ ErrorView,
35
+ container,
36
+ ...rest
37
+ }) => {
38
+ if (!container) {
39
+ return;
40
+ }
41
+ const {
42
+ render,
43
+ hydrate
44
+ } = widget.$dependencies;
45
+ const renderView = widget.shouldHydrate({
46
+ View,
47
+ ErrorView,
48
+ container,
49
+ ...rest
50
+ }) ? hydrate : render;
51
+ // @ts-expect-error the @merkur/plugin-error is optional
52
+ if (widget?.error?.status) {
53
+ return ErrorView ? renderView(ErrorView(widget), container) : render(null, container);
54
+ }
55
+ return renderView(View(widget), container);
56
+ });
57
+ },
58
+ async update(widget) {
59
+ await helpers.mapViews(widget, viewFactory, ({
60
+ View,
61
+ container
62
+ }) => container && widget.$dependencies.render(View(widget), container));
63
+ },
64
+ async unmount(widget) {
65
+ await helpers.mapViews(widget, viewFactory, ({
66
+ container
67
+ }) => {
68
+ if (container) {
69
+ widget.$dependencies.render(null, container);
70
+ }
71
+ });
72
+ }
73
+ });
74
+ // Register widget factory on client
75
+ core.createMerkur().register({
76
+ name,
77
+ version,
78
+ createWidget: widgetFactory
79
+ });
80
+ return widgetFactory;
63
81
  }
64
82
 
65
83
  exports.createPreactWidget = createPreactWidget;
@@ -5,59 +5,77 @@ import { mapViews } from '@merkur/plugin-component/helpers';
5
5
  /**
6
6
  * Client Factory for creating merkur widgets with preact renderer.
7
7
  */
8
- function createPreactWidget({ name, version, $dependencies, viewFactory, ...restProps }) {
9
- const widgetFactory = async (widgetParams) => createMerkurWidget({
10
- ...restProps,
11
- ...widgetParams,
12
- $dependencies: {
13
- ...$dependencies,
14
- render,
15
- hydrate,
16
- },
17
- shouldHydrate(widget, { container, isSlot }) {
18
- return Boolean(container?.children?.length && !isSlot);
19
- },
20
- async mount(widget) {
21
- await mapViews(widget, viewFactory, ({ View, ErrorView, container, ...rest }) => {
22
- if (!container) {
23
- return;
24
- }
25
- const { render, hydrate } = widget.$dependencies;
26
- const renderView = widget.shouldHydrate({
27
- View,
28
- ErrorView,
29
- container,
30
- ...rest,
31
- })
32
- ? hydrate
33
- : render;
34
- // @ts-expect-error the @merkur/plugin-error is optional
35
- if (widget?.error?.status) {
36
- return ErrorView
37
- ? renderView(ErrorView(widget), container)
38
- : render(null, container);
39
- }
40
- return renderView(View(widget), container);
41
- });
42
- },
43
- async update(widget) {
44
- await mapViews(widget, viewFactory, ({ View, container }) => container && widget.$dependencies.render(View(widget), container));
45
- },
46
- async unmount(widget) {
47
- await mapViews(widget, viewFactory, ({ container }) => {
48
- if (container) {
49
- widget.$dependencies.render(null, container);
50
- }
51
- });
52
- },
53
- });
54
- // Register widget factory on client
55
- createMerkur().register({
56
- name,
57
- version,
58
- createWidget: widgetFactory,
59
- });
60
- return widgetFactory;
8
+ function createPreactWidget({
9
+ name,
10
+ version,
11
+ $dependencies,
12
+ viewFactory,
13
+ ...restProps
14
+ }) {
15
+ const widgetFactory = async widgetParams => createMerkurWidget({
16
+ ...restProps,
17
+ ...widgetParams,
18
+ $dependencies: {
19
+ ...$dependencies,
20
+ render,
21
+ hydrate
22
+ },
23
+ shouldHydrate(widget, {
24
+ container,
25
+ isSlot
26
+ }) {
27
+ return Boolean(container?.children?.length && !isSlot);
28
+ },
29
+ async mount(widget) {
30
+ await mapViews(widget, viewFactory, ({
31
+ View,
32
+ ErrorView,
33
+ container,
34
+ ...rest
35
+ }) => {
36
+ if (!container) {
37
+ return;
38
+ }
39
+ const {
40
+ render,
41
+ hydrate
42
+ } = widget.$dependencies;
43
+ const renderView = widget.shouldHydrate({
44
+ View,
45
+ ErrorView,
46
+ container,
47
+ ...rest
48
+ }) ? hydrate : render;
49
+ // @ts-expect-error the @merkur/plugin-error is optional
50
+ if (widget?.error?.status) {
51
+ return ErrorView ? renderView(ErrorView(widget), container) : render(null, container);
52
+ }
53
+ return renderView(View(widget), container);
54
+ });
55
+ },
56
+ async update(widget) {
57
+ await mapViews(widget, viewFactory, ({
58
+ View,
59
+ container
60
+ }) => container && widget.$dependencies.render(View(widget), container));
61
+ },
62
+ async unmount(widget) {
63
+ await mapViews(widget, viewFactory, ({
64
+ container
65
+ }) => {
66
+ if (container) {
67
+ widget.$dependencies.render(null, container);
68
+ }
69
+ });
70
+ }
71
+ });
72
+ // Register widget factory on client
73
+ createMerkur().register({
74
+ name,
75
+ version,
76
+ createWidget: widgetFactory
77
+ });
78
+ return widgetFactory;
61
79
  }
62
80
 
63
81
  export { createPreactWidget };
@@ -6,49 +6,59 @@ var core = require('@merkur/core');
6
6
  /**
7
7
  * Server Factory for creating merkur widgets with preact renderer.
8
8
  */
9
- function createPreactWidget({ viewFactory, $dependencies, ...restProps }) {
10
- return (widgetParams) => core.createMerkurWidget({
11
- ...restProps,
12
- ...widgetParams,
13
- $dependencies: {
14
- ...$dependencies,
15
- // @ts-expect-error conflict with client types
16
- render,
17
- },
18
- async mount(widget) {
19
- const { render } = widget.$dependencies;
20
- const { View: MainView, ErrorView, slot = {}, } = await viewFactory(widget);
21
- /**
22
- * Wrapper around $dependencies.render function which
23
- * handles connection to ErrorView and error plugin when defined.
24
- */
25
- const renderView = (View) => {
26
- // @ts-expect-error the @merkur/plugin-error is optional
27
- if (widget?.error?.status && ErrorView) {
28
- // @ts-expect-error conflict with client types
29
- return render(ErrorView(widget));
30
- }
31
- // @ts-expect-error the @merkur/plugin-error is optional
32
- if (widget?.error?.status) {
33
- // @ts-expect-error conflict with client types
34
- return render(null);
35
- }
36
- // @ts-expect-error conflict with client types
37
- return render(View(widget));
38
- };
39
- return {
40
- html: renderView(MainView),
41
- slot: Object.keys(slot).reduce((acc, cur) => {
42
- acc[cur] = {
43
- name: slot[cur].name,
44
- containerSelector: slot[cur].containerSelector,
45
- html: renderView(slot[cur].View),
46
- };
47
- return acc;
48
- }, {}),
49
- };
50
- },
51
- });
9
+ function createPreactWidget({
10
+ viewFactory,
11
+ $dependencies,
12
+ ...restProps
13
+ }) {
14
+ return widgetParams => core.createMerkurWidget({
15
+ ...restProps,
16
+ ...widgetParams,
17
+ $dependencies: {
18
+ ...$dependencies,
19
+ // @ts-expect-error conflict with client types
20
+ render
21
+ },
22
+ async mount(widget) {
23
+ const {
24
+ render
25
+ } = widget.$dependencies;
26
+ const {
27
+ View: MainView,
28
+ ErrorView,
29
+ slot = {}
30
+ } = await viewFactory(widget);
31
+ /**
32
+ * Wrapper around $dependencies.render function which
33
+ * handles connection to ErrorView and error plugin when defined.
34
+ */
35
+ const renderView = View => {
36
+ // @ts-expect-error the @merkur/plugin-error is optional
37
+ if (widget?.error?.status && ErrorView) {
38
+ // @ts-expect-error conflict with client types
39
+ return render(ErrorView(widget));
40
+ }
41
+ // @ts-expect-error the @merkur/plugin-error is optional
42
+ if (widget?.error?.status) {
43
+ // @ts-expect-error conflict with client types
44
+ return render(null);
45
+ }
46
+ // @ts-expect-error conflict with client types
47
+ return render(View(widget));
48
+ };
49
+ return {
50
+ html: renderView(MainView),
51
+ slot: Object.keys(slot).reduce((acc, cur) => {
52
+ acc[cur] = {
53
+ name: slot[cur].name,
54
+ containerSelector: slot[cur].containerSelector,
55
+ html: renderView(slot[cur].View)
56
+ };
57
+ return acc;
58
+ }, {})
59
+ };
60
+ }
61
+ });
52
62
  }
53
63
 
54
64
  exports.createPreactWidget = createPreactWidget;
@@ -6,49 +6,59 @@ var core = require('@merkur/core');
6
6
  /**
7
7
  * Server Factory for creating merkur widgets with preact renderer.
8
8
  */
9
- function createPreactWidget({ viewFactory, $dependencies, ...restProps }) {
10
- return (widgetParams) => core.createMerkurWidget({
11
- ...restProps,
12
- ...widgetParams,
13
- $dependencies: {
14
- ...$dependencies,
15
- // @ts-expect-error conflict with client types
16
- render,
17
- },
18
- async mount(widget) {
19
- const { render } = widget.$dependencies;
20
- const { View: MainView, ErrorView, slot = {}, } = await viewFactory(widget);
21
- /**
22
- * Wrapper around $dependencies.render function which
23
- * handles connection to ErrorView and error plugin when defined.
24
- */
25
- const renderView = (View) => {
26
- // @ts-expect-error the @merkur/plugin-error is optional
27
- if (widget?.error?.status && ErrorView) {
28
- // @ts-expect-error conflict with client types
29
- return render(ErrorView(widget));
30
- }
31
- // @ts-expect-error the @merkur/plugin-error is optional
32
- if (widget?.error?.status) {
33
- // @ts-expect-error conflict with client types
34
- return render(null);
35
- }
36
- // @ts-expect-error conflict with client types
37
- return render(View(widget));
38
- };
39
- return {
40
- html: renderView(MainView),
41
- slot: Object.keys(slot).reduce((acc, cur) => {
42
- acc[cur] = {
43
- name: slot[cur].name,
44
- containerSelector: slot[cur].containerSelector,
45
- html: renderView(slot[cur].View),
46
- };
47
- return acc;
48
- }, {}),
49
- };
50
- },
51
- });
9
+ function createPreactWidget({
10
+ viewFactory,
11
+ $dependencies,
12
+ ...restProps
13
+ }) {
14
+ return widgetParams => core.createMerkurWidget({
15
+ ...restProps,
16
+ ...widgetParams,
17
+ $dependencies: {
18
+ ...$dependencies,
19
+ // @ts-expect-error conflict with client types
20
+ render
21
+ },
22
+ async mount(widget) {
23
+ const {
24
+ render
25
+ } = widget.$dependencies;
26
+ const {
27
+ View: MainView,
28
+ ErrorView,
29
+ slot = {}
30
+ } = await viewFactory(widget);
31
+ /**
32
+ * Wrapper around $dependencies.render function which
33
+ * handles connection to ErrorView and error plugin when defined.
34
+ */
35
+ const renderView = View => {
36
+ // @ts-expect-error the @merkur/plugin-error is optional
37
+ if (widget?.error?.status && ErrorView) {
38
+ // @ts-expect-error conflict with client types
39
+ return render(ErrorView(widget));
40
+ }
41
+ // @ts-expect-error the @merkur/plugin-error is optional
42
+ if (widget?.error?.status) {
43
+ // @ts-expect-error conflict with client types
44
+ return render(null);
45
+ }
46
+ // @ts-expect-error conflict with client types
47
+ return render(View(widget));
48
+ };
49
+ return {
50
+ html: renderView(MainView),
51
+ slot: Object.keys(slot).reduce((acc, cur) => {
52
+ acc[cur] = {
53
+ name: slot[cur].name,
54
+ containerSelector: slot[cur].containerSelector,
55
+ html: renderView(slot[cur].View)
56
+ };
57
+ return acc;
58
+ }, {})
59
+ };
60
+ }
61
+ });
52
62
  }
53
63
 
54
64
  exports.createPreactWidget = createPreactWidget;
@@ -4,49 +4,59 @@ import { createMerkurWidget } from '@merkur/core';
4
4
  /**
5
5
  * Server Factory for creating merkur widgets with preact renderer.
6
6
  */
7
- function createPreactWidget({ viewFactory, $dependencies, ...restProps }) {
8
- return (widgetParams) => createMerkurWidget({
9
- ...restProps,
10
- ...widgetParams,
11
- $dependencies: {
12
- ...$dependencies,
13
- // @ts-expect-error conflict with client types
14
- render,
15
- },
16
- async mount(widget) {
17
- const { render } = widget.$dependencies;
18
- const { View: MainView, ErrorView, slot = {}, } = await viewFactory(widget);
19
- /**
20
- * Wrapper around $dependencies.render function which
21
- * handles connection to ErrorView and error plugin when defined.
22
- */
23
- const renderView = (View) => {
24
- // @ts-expect-error the @merkur/plugin-error is optional
25
- if (widget?.error?.status && ErrorView) {
26
- // @ts-expect-error conflict with client types
27
- return render(ErrorView(widget));
28
- }
29
- // @ts-expect-error the @merkur/plugin-error is optional
30
- if (widget?.error?.status) {
31
- // @ts-expect-error conflict with client types
32
- return render(null);
33
- }
34
- // @ts-expect-error conflict with client types
35
- return render(View(widget));
36
- };
37
- return {
38
- html: renderView(MainView),
39
- slot: Object.keys(slot).reduce((acc, cur) => {
40
- acc[cur] = {
41
- name: slot[cur].name,
42
- containerSelector: slot[cur].containerSelector,
43
- html: renderView(slot[cur].View),
44
- };
45
- return acc;
46
- }, {}),
47
- };
48
- },
49
- });
7
+ function createPreactWidget({
8
+ viewFactory,
9
+ $dependencies,
10
+ ...restProps
11
+ }) {
12
+ return widgetParams => createMerkurWidget({
13
+ ...restProps,
14
+ ...widgetParams,
15
+ $dependencies: {
16
+ ...$dependencies,
17
+ // @ts-expect-error conflict with client types
18
+ render
19
+ },
20
+ async mount(widget) {
21
+ const {
22
+ render
23
+ } = widget.$dependencies;
24
+ const {
25
+ View: MainView,
26
+ ErrorView,
27
+ slot = {}
28
+ } = await viewFactory(widget);
29
+ /**
30
+ * Wrapper around $dependencies.render function which
31
+ * handles connection to ErrorView and error plugin when defined.
32
+ */
33
+ const renderView = View => {
34
+ // @ts-expect-error the @merkur/plugin-error is optional
35
+ if (widget?.error?.status && ErrorView) {
36
+ // @ts-expect-error conflict with client types
37
+ return render(ErrorView(widget));
38
+ }
39
+ // @ts-expect-error the @merkur/plugin-error is optional
40
+ if (widget?.error?.status) {
41
+ // @ts-expect-error conflict with client types
42
+ return render(null);
43
+ }
44
+ // @ts-expect-error conflict with client types
45
+ return render(View(widget));
46
+ };
47
+ return {
48
+ html: renderView(MainView),
49
+ slot: Object.keys(slot).reduce((acc, cur) => {
50
+ acc[cur] = {
51
+ name: slot[cur].name,
52
+ containerSelector: slot[cur].containerSelector,
53
+ html: renderView(slot[cur].View)
54
+ };
55
+ return acc;
56
+ }, {})
57
+ };
58
+ }
59
+ });
50
60
  }
51
61
 
52
62
  export { createPreactWidget };
package/package.json CHANGED
@@ -1,12 +1,11 @@
1
1
  {
2
2
  "name": "@merkur/preact",
3
- "version": "0.38.0",
3
+ "version": "0.40.0",
4
4
  "description": "Collection of helpers to aid with Preact integration to @merkur",
5
5
  "scripts": {
6
6
  "test": "echo 'Tests pass.'",
7
7
  "test:es:version": "echo 'Tests pass.'",
8
8
  "build": "rollup -c rollup.config.mjs",
9
- "prepare": "npm run build",
10
9
  "dev": "rollup -c rollup.config.mjs -w"
11
10
  },
12
11
  "exports": {
@@ -45,9 +44,9 @@
45
44
  "access": "public"
46
45
  },
47
46
  "dependencies": {
48
- "@babel/preset-react": "^7.24.1",
49
- "preact": "^10.20.1",
50
- "preact-render-to-string": "^6.4.1"
47
+ "@babel/preset-react": "^7.28.5",
48
+ "preact": "^10.27.2",
49
+ "preact-render-to-string": "^6.6.3"
51
50
  },
52
51
  "peerDependencies": {
53
52
  "@merkur/core": ">=0.34",
@@ -55,5 +54,5 @@
55
54
  "@merkur/tool-webpack": ">=0.28",
56
55
  "babel-loader": ">=9"
57
56
  },
58
- "gitHead": "a6e379c0cb887898e34465dc3db9231feb68e6a5"
57
+ "gitHead": "a7bf45d46a5c0fca7130ae6a86e1cd94e5894ca2"
59
58
  }