payload 2.0.0-beta.5 → 2.0.0-beta.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (112) hide show
  1. package/dist/admin/components/forms/field-types/Blocks/BlockRow.js +3 -3
  2. package/dist/admin/components/forms/field-types/Blocks/SectionTitle/index.d.ts +4 -0
  3. package/dist/admin/components/forms/field-types/Blocks/SectionTitle/index.d.ts.map +1 -1
  4. package/dist/admin/components/forms/field-types/Blocks/SectionTitle/index.js +5 -2
  5. package/dist/admin/components/forms/field-types/HiddenInput/index.d.ts.map +1 -1
  6. package/dist/admin/components/forms/field-types/HiddenInput/index.js +5 -2
  7. package/dist/admin/components/modals/LeaveWithoutSaving/index.d.ts +1 -2
  8. package/dist/admin/components/modals/LeaveWithoutSaving/index.d.ts.map +1 -1
  9. package/dist/admin/components/modals/LeaveWithoutSaving/index.js +79 -17
  10. package/dist/admin/components/modals/LeaveWithoutSaving/index.scss +24 -13
  11. package/dist/admin/components/modals/StayLoggedIn/index.d.ts.map +1 -1
  12. package/dist/admin/components/modals/StayLoggedIn/index.js +7 -6
  13. package/dist/admin/components/modals/StayLoggedIn/index.scss +20 -7
  14. package/dist/admin/components/views/Account/Default.d.ts +2 -2
  15. package/dist/admin/components/views/Account/Default.d.ts.map +1 -1
  16. package/dist/admin/components/views/Account/Default.js +98 -101
  17. package/dist/admin/components/views/Global/Default/index.d.ts +2 -2
  18. package/dist/admin/components/views/Global/Default/index.d.ts.map +1 -1
  19. package/dist/admin/components/views/Global/Default/index.js +64 -64
  20. package/dist/admin/components/views/Global/Default.d.ts +2 -2
  21. package/dist/admin/components/views/Global/Default.d.ts.map +1 -1
  22. package/dist/admin/components/views/Global/Default.js +28 -31
  23. package/dist/admin/components/views/Global/Routes/CustomComponent.d.ts +2 -2
  24. package/dist/admin/components/views/Global/Routes/CustomComponent.d.ts.map +1 -1
  25. package/dist/admin/components/views/Global/Routes/CustomComponent.js +14 -17
  26. package/dist/admin/components/views/Global/Routes/index.d.ts +2 -2
  27. package/dist/admin/components/views/Global/Routes/index.d.ts.map +1 -1
  28. package/dist/admin/components/views/Global/Routes/index.js +43 -46
  29. package/dist/admin/components/views/Global/index.d.ts.map +1 -1
  30. package/dist/admin/components/views/Global/index.js +3 -16
  31. package/dist/admin/components/views/LivePreview/Context/collisionDetection.d.ts.map +1 -0
  32. package/dist/admin/components/views/LivePreview/Context/collisionDetection.js +34 -0
  33. package/dist/admin/components/views/LivePreview/{PreviewContext → Context}/context.d.ts +4 -0
  34. package/dist/admin/components/views/LivePreview/Context/context.d.ts.map +1 -0
  35. package/dist/admin/components/views/LivePreview/Context/context.js +49 -0
  36. package/dist/admin/components/views/LivePreview/Context/index.d.ts.map +1 -0
  37. package/dist/admin/components/views/LivePreview/Context/index.js +147 -0
  38. package/dist/admin/components/views/LivePreview/Context/sizeReducer.d.ts.map +1 -0
  39. package/dist/admin/components/views/LivePreview/Context/sizeReducer.js +41 -0
  40. package/dist/admin/components/views/LivePreview/Device/index.d.ts +5 -0
  41. package/dist/admin/components/views/LivePreview/Device/index.d.ts.map +1 -0
  42. package/dist/admin/components/views/LivePreview/Device/index.js +49 -0
  43. package/dist/admin/components/views/LivePreview/DeviceContainer/index.d.ts +5 -0
  44. package/dist/admin/components/views/LivePreview/DeviceContainer/index.d.ts.map +1 -0
  45. package/dist/admin/components/views/LivePreview/DeviceContainer/index.js +44 -0
  46. package/dist/admin/components/views/LivePreview/IFrame/index.d.ts.map +1 -0
  47. package/dist/admin/components/views/LivePreview/{PreviewIFrame → IFrame}/index.js +2 -2
  48. package/dist/admin/components/views/LivePreview/{PreviewWindow → Preview}/index.d.ts +1 -1
  49. package/dist/admin/components/views/LivePreview/Preview/index.d.ts.map +1 -0
  50. package/dist/admin/components/views/LivePreview/Preview/index.js +150 -0
  51. package/dist/admin/components/views/LivePreview/{PreviewWindow → Preview}/index.scss +1 -1
  52. package/dist/admin/components/views/LivePreview/Toolbar/SizeInput/index.d.ts.map +1 -1
  53. package/dist/admin/components/views/LivePreview/Toolbar/SizeInput/index.js +44 -28
  54. package/dist/admin/components/views/LivePreview/Toolbar/SizeInput/index.scss +9 -11
  55. package/dist/admin/components/views/LivePreview/Toolbar/index.d.ts +1 -2
  56. package/dist/admin/components/views/LivePreview/Toolbar/index.d.ts.map +1 -1
  57. package/dist/admin/components/views/LivePreview/Toolbar/index.js +14 -7
  58. package/dist/admin/components/views/LivePreview/index.d.ts.map +1 -1
  59. package/dist/admin/components/views/LivePreview/index.js +12 -6
  60. package/dist/admin/components/views/Version/Version.js +2 -2
  61. package/dist/admin/components/views/collections/Edit/Default/index.d.ts +2 -2
  62. package/dist/admin/components/views/collections/Edit/Default/index.d.ts.map +1 -1
  63. package/dist/admin/components/views/collections/Edit/Default/index.js +72 -74
  64. package/dist/admin/components/views/collections/Edit/Default.d.ts +3 -3
  65. package/dist/admin/components/views/collections/Edit/Default.d.ts.map +1 -1
  66. package/dist/admin/components/views/collections/Edit/Default.js +53 -56
  67. package/dist/admin/components/views/collections/Edit/Routes/CustomComponent.d.ts +2 -2
  68. package/dist/admin/components/views/collections/Edit/Routes/CustomComponent.d.ts.map +1 -1
  69. package/dist/admin/components/views/collections/Edit/Routes/CustomComponent.js +15 -18
  70. package/dist/admin/components/views/collections/Edit/Routes/index.d.ts +2 -2
  71. package/dist/admin/components/views/collections/Edit/Routes/index.d.ts.map +1 -1
  72. package/dist/admin/components/views/collections/Edit/Routes/index.js +50 -52
  73. package/dist/admin/components/views/collections/Edit/SetStepNav.d.ts +3 -0
  74. package/dist/admin/components/views/collections/Edit/SetStepNav.d.ts.map +1 -1
  75. package/dist/admin/components/views/collections/Edit/SetStepNav.js +43 -14
  76. package/dist/admin/components/views/collections/Edit/index.d.ts.map +1 -1
  77. package/dist/admin/components/views/collections/Edit/index.js +1 -1
  78. package/dist/admin/components/views/types.d.ts +6 -3
  79. package/dist/admin/components/views/types.d.ts.map +1 -1
  80. package/dist/admin/hooks/useTitle.d.ts +1 -1
  81. package/dist/admin/hooks/useTitle.d.ts.map +1 -1
  82. package/dist/admin/hooks/useTitle.js +8 -2
  83. package/dist/bin/generateGraphQLSchema.d.ts.map +1 -1
  84. package/dist/bin/generateGraphQLSchema.js +2 -1
  85. package/dist/bin/migrate.d.ts.map +1 -1
  86. package/dist/bin/migrate.js +11 -2
  87. package/dist/config/schema.d.ts.map +1 -1
  88. package/dist/config/schema.js +2 -1
  89. package/dist/config/types.d.ts +9 -2
  90. package/dist/config/types.d.ts.map +1 -1
  91. package/dist/config/types.js +1 -1
  92. package/dist/payload.js +3 -3
  93. package/dist/utilities/logger.d.ts +3 -0
  94. package/dist/utilities/logger.d.ts.map +1 -1
  95. package/dist/utilities/logger.js +27 -9
  96. package/package.json +2 -1
  97. package/dist/admin/components/views/LivePreview/PreviewContext/collisionDetection.d.ts.map +0 -1
  98. package/dist/admin/components/views/LivePreview/PreviewContext/collisionDetection.js +0 -34
  99. package/dist/admin/components/views/LivePreview/PreviewContext/context.d.ts.map +0 -1
  100. package/dist/admin/components/views/LivePreview/PreviewContext/context.js +0 -45
  101. package/dist/admin/components/views/LivePreview/PreviewContext/index.d.ts.map +0 -1
  102. package/dist/admin/components/views/LivePreview/PreviewContext/index.js +0 -149
  103. package/dist/admin/components/views/LivePreview/PreviewContext/sizeReducer.d.ts.map +0 -1
  104. package/dist/admin/components/views/LivePreview/PreviewContext/sizeReducer.js +0 -41
  105. package/dist/admin/components/views/LivePreview/PreviewIFrame/index.d.ts.map +0 -1
  106. package/dist/admin/components/views/LivePreview/PreviewWindow/index.d.ts.map +0 -1
  107. package/dist/admin/components/views/LivePreview/PreviewWindow/index.js +0 -175
  108. /package/dist/admin/components/views/LivePreview/{PreviewContext → Context}/collisionDetection.d.ts +0 -0
  109. /package/dist/admin/components/views/LivePreview/{PreviewContext → Context}/index.d.ts +0 -0
  110. /package/dist/admin/components/views/LivePreview/{PreviewContext → Context}/sizeReducer.d.ts +0 -0
  111. /package/dist/admin/components/views/LivePreview/{PreviewIFrame → IFrame}/index.d.ts +0 -0
  112. /package/dist/admin/components/views/LivePreview/{PreviewIFrame → IFrame}/index.scss +0 -0
@@ -1,175 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(exports, "PreviewWindow", {
6
- enumerable: true,
7
- get: function() {
8
- return PreviewWindow;
9
- }
10
- });
11
- const _react = /*#__PURE__*/ _interop_require_wildcard(require("react"));
12
- const _context = require("../../../forms/Form/context");
13
- const _reduceFieldsToValues = /*#__PURE__*/ _interop_require_default(require("../../../forms/Form/reduceFieldsToValues"));
14
- const _PreviewContext = require("../PreviewContext");
15
- const _context1 = require("../PreviewContext/context");
16
- const _PreviewIFrame = require("../PreviewIFrame");
17
- const _Toolbar = require("../Toolbar");
18
- const _ToolbarArea = require("../ToolbarArea");
19
- require("./index.scss");
20
- function _interop_require_default(obj) {
21
- return obj && obj.__esModule ? obj : {
22
- default: obj
23
- };
24
- }
25
- function _getRequireWildcardCache(nodeInterop) {
26
- if (typeof WeakMap !== "function") return null;
27
- var cacheBabelInterop = new WeakMap();
28
- var cacheNodeInterop = new WeakMap();
29
- return (_getRequireWildcardCache = function(nodeInterop) {
30
- return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
31
- })(nodeInterop);
32
- }
33
- function _interop_require_wildcard(obj, nodeInterop) {
34
- if (!nodeInterop && obj && obj.__esModule) {
35
- return obj;
36
- }
37
- if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
38
- return {
39
- default: obj
40
- };
41
- }
42
- var cache = _getRequireWildcardCache(nodeInterop);
43
- if (cache && cache.has(obj)) {
44
- return cache.get(obj);
45
- }
46
- var newObj = {};
47
- var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
48
- for(var key in obj){
49
- if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
50
- var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
51
- if (desc && (desc.get || desc.set)) {
52
- Object.defineProperty(newObj, key, desc);
53
- } else {
54
- newObj[key] = obj[key];
55
- }
56
- }
57
- }
58
- newObj.default = obj;
59
- if (cache) {
60
- cache.set(obj, newObj);
61
- }
62
- return newObj;
63
- }
64
- const baseClass = 'live-preview-window';
65
- const ResponsiveWindow = (props)=>{
66
- const { children } = props;
67
- const { breakpoint, breakpoints, deviceFrameRef, zoom } = (0, _context1.useLivePreviewContext)();
68
- const foundBreakpoint = breakpoint && breakpoints.find((bp)=>bp.name === breakpoint);
69
- let x = '0';
70
- if (foundBreakpoint && breakpoint !== 'responsive') {
71
- x = '-50%';
72
- if (typeof zoom === 'number' && typeof foundBreakpoint.width === 'number' && typeof foundBreakpoint.height === 'number') {
73
- // keep it centered horizontally
74
- x = `${foundBreakpoint.width / 2}px`;
75
- }
76
- }
77
- return /*#__PURE__*/ _react.default.createElement("div", {
78
- className: `${baseClass}__responsive-window`,
79
- ref: deviceFrameRef,
80
- style: {
81
- height: foundBreakpoint && typeof foundBreakpoint?.height === 'number' ? `${foundBreakpoint?.height / (typeof zoom === 'number' ? zoom : 1)}px` : typeof zoom === 'number' ? `${100 / zoom}%` : '100%',
82
- transform: `translate3d(${x}, 0, 0)`,
83
- width: foundBreakpoint && typeof foundBreakpoint?.width === 'number' ? `${foundBreakpoint?.width / (typeof zoom === 'number' ? zoom : 1)}px` : typeof zoom === 'number' ? `${100 / zoom}%` : '100%'
84
- }
85
- }, children);
86
- };
87
- const Preview = (props)=>{
88
- const { popupState: { isPopupOpen, popupHasLoaded, popupRef }, url } = props;
89
- const { iframeHasLoaded, iframeRef, setIframeHasLoaded } = (0, _context1.useLivePreviewContext)();
90
- const { breakpoint, toolbarPosition } = (0, _context1.useLivePreviewContext)();
91
- const [fields] = (0, _context.useAllFormFields)();
92
- // The preview could either be an iframe embedded on the page
93
- // Or it could be a separate popup window
94
- // We need to transmit data to both accordingly
95
- (0, _react.useEffect)(()=>{
96
- if (fields && window && 'postMessage' in window) {
97
- const values = (0, _reduceFieldsToValues.default)(fields);
98
- const message = JSON.stringify({
99
- data: values,
100
- type: 'livePreview'
101
- });
102
- // external window
103
- if (isPopupOpen) {
104
- setIframeHasLoaded(false);
105
- if (popupHasLoaded && popupRef.current) {
106
- popupRef.current.postMessage(message, url);
107
- }
108
- }
109
- // embedded iframe
110
- if (!isPopupOpen) {
111
- if (iframeHasLoaded && iframeRef.current) {
112
- iframeRef.current.contentWindow?.postMessage(message, url);
113
- }
114
- }
115
- }
116
- }, [
117
- fields,
118
- url,
119
- iframeHasLoaded,
120
- isPopupOpen,
121
- popupRef,
122
- popupHasLoaded,
123
- iframeRef,
124
- setIframeHasLoaded
125
- ]);
126
- if (!isPopupOpen) {
127
- return /*#__PURE__*/ _react.default.createElement("div", {
128
- className: [
129
- baseClass,
130
- isPopupOpen && `${baseClass}--popup-open`,
131
- breakpoint && breakpoint !== 'responsive' && `${baseClass}--has-breakpoint`
132
- ].filter(Boolean).join(' ')
133
- }, /*#__PURE__*/ _react.default.createElement(_ToolbarArea.ToolbarArea, null, /*#__PURE__*/ _react.default.createElement("div", {
134
- className: `${baseClass}__wrapper`
135
- }, /*#__PURE__*/ _react.default.createElement(ResponsiveWindow, null, /*#__PURE__*/ _react.default.createElement(_PreviewIFrame.IFrame, {
136
- ref: iframeRef,
137
- setIframeHasLoaded: setIframeHasLoaded,
138
- url: url
139
- }))), /*#__PURE__*/ _react.default.createElement(_Toolbar.LivePreviewToolbar, {
140
- ...props,
141
- iframeRef: iframeRef,
142
- style: {
143
- left: `${toolbarPosition.x}px`,
144
- top: `${toolbarPosition.y}px`
145
- },
146
- url: url
147
- })));
148
- }
149
- };
150
- const PreviewWindow = (props)=>{
151
- let url;
152
- let breakpoints = [
153
- {
154
- name: 'responsive',
155
- height: '100%',
156
- label: 'Responsive',
157
- width: '100%'
158
- }
159
- ];
160
- if ('collection' in props) {
161
- url = props?.collection.admin.livePreview.url;
162
- breakpoints = breakpoints.concat(props?.collection.admin.livePreview.breakpoints);
163
- }
164
- if ('global' in props) {
165
- url = props?.global.admin.livePreview.url;
166
- breakpoints = breakpoints.concat(props?.global.admin.livePreview.breakpoints);
167
- }
168
- return /*#__PURE__*/ _react.default.createElement(_PreviewContext.LivePreviewProvider, {
169
- ...props,
170
- breakpoints: breakpoints,
171
- url: url
172
- }, /*#__PURE__*/ _react.default.createElement(Preview, props));
173
- };
174
-
175
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hZG1pbi9jb21wb25lbnRzL3ZpZXdzL0xpdmVQcmV2aWV3L1ByZXZpZXdXaW5kb3cvaW5kZXgudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwgeyB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHR5cGUgeyBMaXZlUHJldmlldyB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2V4cG9ydHMvY29uZmlnJ1xuaW1wb3J0IHR5cGUgeyBFZGl0Vmlld1Byb3BzIH0gZnJvbSAnLi4vLi4vdHlwZXMnXG5pbXBvcnQgdHlwZSB7IHVzZVBvcHVwV2luZG93IH0gZnJvbSAnLi4vdXNlUG9wdXBXaW5kb3cnXG5cbmltcG9ydCB7IHVzZUFsbEZvcm1GaWVsZHMgfSBmcm9tICcuLi8uLi8uLi9mb3Jtcy9Gb3JtL2NvbnRleHQnXG5pbXBvcnQgcmVkdWNlRmllbGRzVG9WYWx1ZXMgZnJvbSAnLi4vLi4vLi4vZm9ybXMvRm9ybS9yZWR1Y2VGaWVsZHNUb1ZhbHVlcydcbmltcG9ydCB7IExpdmVQcmV2aWV3UHJvdmlkZXIgfSBmcm9tICcuLi9QcmV2aWV3Q29udGV4dCdcbmltcG9ydCB7IHVzZUxpdmVQcmV2aWV3Q29udGV4dCB9IGZyb20gJy4uL1ByZXZpZXdDb250ZXh0L2NvbnRleHQnXG5pbXBvcnQgeyBJRnJhbWUgfSBmcm9tICcuLi9QcmV2aWV3SUZyYW1lJ1xuaW1wb3J0IHsgTGl2ZVByZXZpZXdUb29sYmFyIH0gZnJvbSAnLi4vVG9vbGJhcidcbmltcG9ydCB7IFRvb2xiYXJBcmVhIH0gZnJvbSAnLi4vVG9vbGJhckFyZWEnXG5pbXBvcnQgJy4vaW5kZXguc2NzcydcblxuY29uc3QgYmFzZUNsYXNzID0gJ2xpdmUtcHJldmlldy13aW5kb3cnXG5cbmNvbnN0IFJlc3BvbnNpdmVXaW5kb3c6IFJlYWN0LkZDPHtcbiAgY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZVxufT4gPSAocHJvcHMpID0+IHtcbiAgY29uc3QgeyBjaGlsZHJlbiB9ID0gcHJvcHNcblxuICBjb25zdCB7IGJyZWFrcG9pbnQsIGJyZWFrcG9pbnRzLCBkZXZpY2VGcmFtZVJlZiwgem9vbSB9ID0gdXNlTGl2ZVByZXZpZXdDb250ZXh0KClcblxuICBjb25zdCBmb3VuZEJyZWFrcG9pbnQgPSBicmVha3BvaW50ICYmIGJyZWFrcG9pbnRzLmZpbmQoKGJwKSA9PiBicC5uYW1lID09PSBicmVha3BvaW50KVxuXG4gIGxldCB4ID0gJzAnXG5cbiAgaWYgKGZvdW5kQnJlYWtwb2ludCAmJiBicmVha3BvaW50ICE9PSAncmVzcG9uc2l2ZScpIHtcbiAgICB4ID0gJy01MCUnXG5cbiAgICBpZiAoXG4gICAgICB0eXBlb2Ygem9vbSA9PT0gJ251bWJlcicgJiZcbiAgICAgIHR5cGVvZiBmb3VuZEJyZWFrcG9pbnQud2lkdGggPT09ICdudW1iZXInICYmXG4gICAgICB0eXBlb2YgZm91bmRCcmVha3BvaW50LmhlaWdodCA9PT0gJ251bWJlcidcbiAgICApIHtcbiAgICAgIC8vIGtlZXAgaXQgY2VudGVyZWQgaG9yaXpvbnRhbGx5XG4gICAgICB4ID0gYCR7Zm91bmRCcmVha3BvaW50LndpZHRoIC8gMn1weGBcbiAgICB9XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fcmVzcG9uc2l2ZS13aW5kb3dgfVxuICAgICAgcmVmPXtkZXZpY2VGcmFtZVJlZn1cbiAgICAgIHN0eWxlPXt7XG4gICAgICAgIGhlaWdodDpcbiAgICAgICAgICBmb3VuZEJyZWFrcG9pbnQgJiYgdHlwZW9mIGZvdW5kQnJlYWtwb2ludD8uaGVpZ2h0ID09PSAnbnVtYmVyJ1xuICAgICAgICAgICAgPyBgJHtmb3VuZEJyZWFrcG9pbnQ/LmhlaWdodCAvICh0eXBlb2Ygem9vbSA9PT0gJ251bWJlcicgPyB6b29tIDogMSl9cHhgXG4gICAgICAgICAgICA6IHR5cGVvZiB6b29tID09PSAnbnVtYmVyJ1xuICAgICAgICAgICAgPyBgJHsxMDAgLyB6b29tfSVgXG4gICAgICAgICAgICA6ICcxMDAlJyxcbiAgICAgICAgdHJhbnNmb3JtOiBgdHJhbnNsYXRlM2QoJHt4fSwgMCwgMClgLFxuICAgICAgICB3aWR0aDpcbiAgICAgICAgICBmb3VuZEJyZWFrcG9pbnQgJiYgdHlwZW9mIGZvdW5kQnJlYWtwb2ludD8ud2lkdGggPT09ICdudW1iZXInXG4gICAgICAgICAgICA/IGAke2ZvdW5kQnJlYWtwb2ludD8ud2lkdGggLyAodHlwZW9mIHpvb20gPT09ICdudW1iZXInID8gem9vbSA6IDEpfXB4YFxuICAgICAgICAgICAgOiB0eXBlb2Ygem9vbSA9PT0gJ251bWJlcidcbiAgICAgICAgICAgID8gYCR7MTAwIC8gem9vbX0lYFxuICAgICAgICAgICAgOiAnMTAwJScsXG4gICAgICB9fVxuICAgID5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2Rpdj5cbiAgKVxufVxuXG5jb25zdCBQcmV2aWV3OiBSZWFjdC5GQzxcbiAgRWRpdFZpZXdQcm9wcyAmIHtcbiAgICBwb3B1cFN0YXRlOiBSZXR1cm5UeXBlPHR5cGVvZiB1c2VQb3B1cFdpbmRvdz5cbiAgICB1cmw/OiBzdHJpbmdcbiAgfVxuPiA9IChwcm9wcykgPT4ge1xuICBjb25zdCB7XG4gICAgcG9wdXBTdGF0ZTogeyBpc1BvcHVwT3BlbiwgcG9wdXBIYXNMb2FkZWQsIHBvcHVwUmVmIH0sXG4gICAgdXJsLFxuICB9ID0gcHJvcHNcblxuICBjb25zdCB7IGlmcmFtZUhhc0xvYWRlZCwgaWZyYW1lUmVmLCBzZXRJZnJhbWVIYXNMb2FkZWQgfSA9IHVzZUxpdmVQcmV2aWV3Q29udGV4dCgpXG5cbiAgY29uc3QgeyBicmVha3BvaW50LCB0b29sYmFyUG9zaXRpb24gfSA9IHVzZUxpdmVQcmV2aWV3Q29udGV4dCgpXG5cbiAgY29uc3QgW2ZpZWxkc10gPSB1c2VBbGxGb3JtRmllbGRzKClcblxuICAvLyBUaGUgcHJldmlldyBjb3VsZCBlaXRoZXIgYmUgYW4gaWZyYW1lIGVtYmVkZGVkIG9uIHRoZSBwYWdlXG4gIC8vIE9yIGl0IGNvdWxkIGJlIGEgc2VwYXJhdGUgcG9wdXAgd2luZG93XG4gIC8vIFdlIG5lZWQgdG8gdHJhbnNtaXQgZGF0YSB0byBib3RoIGFjY29yZGluZ2x5XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGZpZWxkcyAmJiB3aW5kb3cgJiYgJ3Bvc3RNZXNzYWdlJyBpbiB3aW5kb3cpIHtcbiAgICAgIGNvbnN0IHZhbHVlcyA9IHJlZHVjZUZpZWxkc1RvVmFsdWVzKGZpZWxkcylcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBKU09OLnN0cmluZ2lmeSh7IGRhdGE6IHZhbHVlcywgdHlwZTogJ2xpdmVQcmV2aWV3JyB9KVxuXG4gICAgICAvLyBleHRlcm5hbCB3aW5kb3dcbiAgICAgIGlmIChpc1BvcHVwT3Blbikge1xuICAgICAgICBzZXRJZnJhbWVIYXNMb2FkZWQoZmFsc2UpXG5cbiAgICAgICAgaWYgKHBvcHVwSGFzTG9hZGVkICYmIHBvcHVwUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICBwb3B1cFJlZi5jdXJyZW50LnBvc3RNZXNzYWdlKG1lc3NhZ2UsIHVybClcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBlbWJlZGRlZCBpZnJhbWVcbiAgICAgIGlmICghaXNQb3B1cE9wZW4pIHtcbiAgICAgICAgaWYgKGlmcmFtZUhhc0xvYWRlZCAmJiBpZnJhbWVSZWYuY3VycmVudCkge1xuICAgICAgICAgIGlmcmFtZVJlZi5jdXJyZW50LmNvbnRlbnRXaW5kb3c/LnBvc3RNZXNzYWdlKG1lc3NhZ2UsIHVybClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSwgW1xuICAgIGZpZWxkcyxcbiAgICB1cmwsXG4gICAgaWZyYW1lSGFzTG9hZGVkLFxuICAgIGlzUG9wdXBPcGVuLFxuICAgIHBvcHVwUmVmLFxuICAgIHBvcHVwSGFzTG9hZGVkLFxuICAgIGlmcmFtZVJlZixcbiAgICBzZXRJZnJhbWVIYXNMb2FkZWQsXG4gIF0pXG5cbiAgaWYgKCFpc1BvcHVwT3Blbikge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT17W1xuICAgICAgICAgIGJhc2VDbGFzcyxcbiAgICAgICAgICBpc1BvcHVwT3BlbiAmJiBgJHtiYXNlQ2xhc3N9LS1wb3B1cC1vcGVuYCxcbiAgICAgICAgICBicmVha3BvaW50ICYmIGJyZWFrcG9pbnQgIT09ICdyZXNwb25zaXZlJyAmJiBgJHtiYXNlQ2xhc3N9LS1oYXMtYnJlYWtwb2ludGAsXG4gICAgICAgIF1cbiAgICAgICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAgICAgLmpvaW4oJyAnKX1cbiAgICAgID5cbiAgICAgICAgPFRvb2xiYXJBcmVhPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X193cmFwcGVyYH0+XG4gICAgICAgICAgICA8UmVzcG9uc2l2ZVdpbmRvdz5cbiAgICAgICAgICAgICAgPElGcmFtZSByZWY9e2lmcmFtZVJlZn0gc2V0SWZyYW1lSGFzTG9hZGVkPXtzZXRJZnJhbWVIYXNMb2FkZWR9IHVybD17dXJsfSAvPlxuICAgICAgICAgICAgPC9SZXNwb25zaXZlV2luZG93PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxMaXZlUHJldmlld1Rvb2xiYXJcbiAgICAgICAgICAgIHsuLi5wcm9wc31cbiAgICAgICAgICAgIGlmcmFtZVJlZj17aWZyYW1lUmVmfVxuICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgbGVmdDogYCR7dG9vbGJhclBvc2l0aW9uLnh9cHhgLFxuICAgICAgICAgICAgICB0b3A6IGAke3Rvb2xiYXJQb3NpdGlvbi55fXB4YCxcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICB1cmw9e3VybH1cbiAgICAgICAgICAvPlxuICAgICAgICA8L1Rvb2xiYXJBcmVhPlxuICAgICAgPC9kaXY+XG4gICAgKVxuICB9XG59XG5cbmV4cG9ydCBjb25zdCBQcmV2aWV3V2luZG93OiBSZWFjdC5GQzxcbiAgRWRpdFZpZXdQcm9wcyAmIHtcbiAgICBwb3B1cFN0YXRlOiBSZXR1cm5UeXBlPHR5cGVvZiB1c2VQb3B1cFdpbmRvdz5cbiAgICB1cmw/OiBzdHJpbmdcbiAgfVxuPiA9IChwcm9wcykgPT4ge1xuICBsZXQgdXJsXG5cbiAgbGV0IGJyZWFrcG9pbnRzOiBMaXZlUHJldmlld1snYnJlYWtwb2ludHMnXSA9IFtcbiAgICB7XG4gICAgICBuYW1lOiAncmVzcG9uc2l2ZScsXG4gICAgICBoZWlnaHQ6ICcxMDAlJyxcbiAgICAgIGxhYmVsOiAnUmVzcG9uc2l2ZScsXG4gICAgICB3aWR0aDogJzEwMCUnLFxuICAgIH0sXG4gIF1cblxuICBpZiAoJ2NvbGxlY3Rpb24nIGluIHByb3BzKSB7XG4gICAgdXJsID0gcHJvcHM/LmNvbGxlY3Rpb24uYWRtaW4ubGl2ZVByZXZpZXcudXJsXG4gICAgYnJlYWtwb2ludHMgPSBicmVha3BvaW50cy5jb25jYXQocHJvcHM/LmNvbGxlY3Rpb24uYWRtaW4ubGl2ZVByZXZpZXcuYnJlYWtwb2ludHMpXG4gIH1cblxuICBpZiAoJ2dsb2JhbCcgaW4gcHJvcHMpIHtcbiAgICB1cmwgPSBwcm9wcz8uZ2xvYmFsLmFkbWluLmxpdmVQcmV2aWV3LnVybFxuICAgIGJyZWFrcG9pbnRzID0gYnJlYWtwb2ludHMuY29uY2F0KHByb3BzPy5nbG9iYWwuYWRtaW4ubGl2ZVByZXZpZXcuYnJlYWtwb2ludHMpXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxMaXZlUHJldmlld1Byb3ZpZGVyIHsuLi5wcm9wc30gYnJlYWtwb2ludHM9e2JyZWFrcG9pbnRzfSB1cmw9e3VybH0+XG4gICAgICA8UHJldmlldyB7Li4ucHJvcHN9IC8+XG4gICAgPC9MaXZlUHJldmlld1Byb3ZpZGVyPlxuICApXG59XG4iXSwibmFtZXMiOlsiUHJldmlld1dpbmRvdyIsImJhc2VDbGFzcyIsIlJlc3BvbnNpdmVXaW5kb3ciLCJwcm9wcyIsImNoaWxkcmVuIiwiYnJlYWtwb2ludCIsImJyZWFrcG9pbnRzIiwiZGV2aWNlRnJhbWVSZWYiLCJ6b29tIiwidXNlTGl2ZVByZXZpZXdDb250ZXh0IiwiZm91bmRCcmVha3BvaW50IiwiZmluZCIsImJwIiwibmFtZSIsIngiLCJ3aWR0aCIsImhlaWdodCIsImRpdiIsImNsYXNzTmFtZSIsInJlZiIsInN0eWxlIiwidHJhbnNmb3JtIiwiUHJldmlldyIsInBvcHVwU3RhdGUiLCJpc1BvcHVwT3BlbiIsInBvcHVwSGFzTG9hZGVkIiwicG9wdXBSZWYiLCJ1cmwiLCJpZnJhbWVIYXNMb2FkZWQiLCJpZnJhbWVSZWYiLCJzZXRJZnJhbWVIYXNMb2FkZWQiLCJ0b29sYmFyUG9zaXRpb24iLCJmaWVsZHMiLCJ1c2VBbGxGb3JtRmllbGRzIiwidXNlRWZmZWN0Iiwid2luZG93IiwidmFsdWVzIiwicmVkdWNlRmllbGRzVG9WYWx1ZXMiLCJtZXNzYWdlIiwiSlNPTiIsInN0cmluZ2lmeSIsImRhdGEiLCJ0eXBlIiwiY3VycmVudCIsInBvc3RNZXNzYWdlIiwiY29udGVudFdpbmRvdyIsImZpbHRlciIsIkJvb2xlYW4iLCJqb2luIiwiVG9vbGJhckFyZWEiLCJJRnJhbWUiLCJMaXZlUHJldmlld1Rvb2xiYXIiLCJsZWZ0IiwidG9wIiwieSIsImxhYmVsIiwiY29sbGVjdGlvbiIsImFkbWluIiwibGl2ZVByZXZpZXciLCJjb25jYXQiLCJnbG9iYWwiLCJMaXZlUHJldmlld1Byb3ZpZGVyIl0sIm1hcHBpbmdzIjoiOzs7OytCQXNKYUE7OztlQUFBQTs7OytEQXRKb0I7eUJBTUE7NkVBQ0E7Z0NBQ0c7MEJBQ0U7K0JBQ2Y7eUJBQ1k7NkJBQ1A7UUFDckI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVQLE1BQU1DLFlBQVk7QUFFbEIsTUFBTUMsbUJBRUQsQ0FBQ0M7SUFDSixNQUFNLEVBQUVDLFFBQVEsRUFBRSxHQUFHRDtJQUVyQixNQUFNLEVBQUVFLFVBQVUsRUFBRUMsV0FBVyxFQUFFQyxjQUFjLEVBQUVDLElBQUksRUFBRSxHQUFH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