sanity-plugin-dashboard-widget-netlify 1.3.1 → 2.0.0-v3-studio.1
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/CHANGELOG.md +21 -0
- package/README.md +53 -65
- package/lib/esm/index.js +432 -0
- package/lib/esm/index.js.map +1 -0
- package/lib/index.js +456 -0
- package/lib/index.js.map +1 -0
- package/lib/types/index.d.ts +37 -0
- package/lib/types/index.d.ts.map +1 -0
- package/package.json +75 -45
- package/sanity.json +2 -6
- package/dist/3rdparty-typings/sanity.d.js +0 -2
- package/dist/3rdparty-typings/sanity.d.js.map +0 -1
- package/dist/components/NetlifyWidget.js +0 -72
- package/dist/components/NetlifyWidget.js.map +0 -1
- package/dist/components/SiteItem/Links.js +0 -50
- package/dist/components/SiteItem/Links.js.map +0 -1
- package/dist/components/SiteItem/index.js +0 -130
- package/dist/components/SiteItem/index.js.map +0 -1
- package/dist/components/SiteList.js +0 -57
- package/dist/components/SiteList.js.map +0 -1
- package/dist/datastores/deploy.js +0 -26
- package/dist/datastores/deploy.js.map +0 -1
- package/dist/http/jsonRequest.js +0 -51
- package/dist/http/jsonRequest.js.map +0 -1
- package/dist/http/statusCodeRequest.js +0 -51
- package/dist/http/statusCodeRequest.js.map +0 -1
- package/dist/http/utils/createAbortController.js +0 -21
- package/dist/http/utils/createAbortController.js.map +0 -1
- package/dist/index.js +0 -20
- package/dist/index.js.map +0 -1
- package/dist/props.js +0 -87
- package/dist/props.js.map +0 -1
- package/dist/reducers.js +0 -57
- package/dist/reducers.js.map +0 -1
- package/dist/types.js +0 -2
- package/dist/types.js.map +0 -1
- package/dist/widget.js +0 -25
- package/dist/widget.js.map +0 -1
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
<!-- markdownlint-disable --><!-- textlint-disable -->
|
|
2
|
+
|
|
3
|
+
# 📓 Changelog
|
|
4
|
+
|
|
5
|
+
All notable changes to this project will be documented in this file. See
|
|
6
|
+
[Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
7
|
+
|
|
8
|
+
## [2.0.0-v3-studio.1](https://github.com/sanity-io/sanity-plugin-dashboard-widget-netlify/compare/v1.3.0...v2.0.0-v3-studio.1) (2022-09-02)
|
|
9
|
+
|
|
10
|
+
### ⚠ BREAKING CHANGES
|
|
11
|
+
|
|
12
|
+
- initial V3 version
|
|
13
|
+
|
|
14
|
+
### Features
|
|
15
|
+
|
|
16
|
+
- initial V3 version ([9b6dd57](https://github.com/sanity-io/sanity-plugin-dashboard-widget-netlify/commit/9b6dd57bafecc4e0fae2cfeb6ec2f042b21226d8))
|
|
17
|
+
|
|
18
|
+
### Bug Fixes
|
|
19
|
+
|
|
20
|
+
- **ci:** semver automation ([a474e7f](https://github.com/sanity-io/sanity-plugin-dashboard-widget-netlify/commit/a474e7f9ba0e7ea005fa53dd8b2c8e674dc03a39))
|
|
21
|
+
- compile errors ([32b4546](https://github.com/sanity-io/sanity-plugin-dashboard-widget-netlify/commit/32b45460d1f71c74dc4a40ed6af1d8a839b5423f))
|
package/README.md
CHANGED
|
@@ -1,58 +1,65 @@
|
|
|
1
|
-
|
|
1
|
+
> **NOTE**
|
|
2
|
+
>
|
|
3
|
+
> This is the **Sanity Studio v3 version** of sanity-plugin-dashboard-widget-netlify.
|
|
4
|
+
>
|
|
5
|
+
> For the v2 version, please refer to the [v2 version](https://github.com/sanity-io/sanity-plugin-dashboard-widget-netlify/tree/main).
|
|
2
6
|
|
|
3
|
-
Sanity Studio Dashboard Widget for triggering Netlify builds.
|
|
4
7
|
|
|
5
|
-
|
|
8
|
+
# Sanity Dashboard Widget: Netlify
|
|
6
9
|
|
|
7
|
-
|
|
8
|
-
To get dashboard support in Sanity Studio in general:
|
|
10
|
+
Sanity Studio Dashboard Widget for triggering Netlify builds.
|
|
9
11
|
|
|
10
|
-
|
|
12
|
+
## Install
|
|
11
13
|
|
|
12
|
-
|
|
14
|
+
```
|
|
15
|
+
npm install --save sanity-plugin-dashboard-widget-netlify@studio-v3
|
|
16
|
+
```
|
|
13
17
|
|
|
14
|
-
|
|
18
|
+
or
|
|
15
19
|
|
|
16
|
-
|
|
20
|
+
```
|
|
21
|
+
yarn add sanity-plugin-dashboard-widget-netlify@studio-v3
|
|
22
|
+
```
|
|
17
23
|
|
|
18
|
-
|
|
24
|
+
Ensure that you have followed install and usage instructions for [@sanity/dashboard](https://github.com/sanity-io/dashboard).
|
|
19
25
|
|
|
20
|
-
|
|
21
|
-
{
|
|
22
|
-
"implements": "part:@sanity/dashboard/config",
|
|
23
|
-
"path": "src/dashboardConfig.js"
|
|
24
|
-
}
|
|
25
|
-
```
|
|
26
|
+
## Usage
|
|
26
27
|
|
|
27
|
-
|
|
28
|
+
Add it as a widget to @sanity/dashboard plugin in sanity.config.ts (or .js):
|
|
28
29
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
30
|
+
```js
|
|
31
|
+
export default createConfig({
|
|
32
|
+
// ...
|
|
33
|
+
plugins: [
|
|
34
|
+
dashboardTool({
|
|
35
|
+
widgets: [
|
|
32
36
|
{
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
37
|
+
name: 'netlify',
|
|
38
|
+
options: {
|
|
39
|
+
title: 'My Netlify deploys',
|
|
40
|
+
sites: [
|
|
41
|
+
{
|
|
42
|
+
title: 'Sanity Studio',
|
|
43
|
+
apiId: 'xxxxx-yyyy-zzzz-xxxx-yyyyyyyy',
|
|
44
|
+
buildHookId: 'xxxyyyxxxyyyyxxxyyy',
|
|
45
|
+
name: 'sanity-gatsby-blog-20-studio',
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
title: 'Website',
|
|
49
|
+
apiId: 'yyyyy-xxxxx-zzzz-xxxx-yyyyyyyy',
|
|
50
|
+
buildHookId: 'yyyyxxxxxyyyxxdxxx',
|
|
51
|
+
name: 'sanity-gatsby-blog-20-web',
|
|
52
|
+
url: 'https://my-sanity-deployment.com',
|
|
53
|
+
}
|
|
54
|
+
]
|
|
55
|
+
}
|
|
51
56
|
}
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
57
|
+
]
|
|
58
|
+
})
|
|
59
|
+
]
|
|
60
|
+
})
|
|
61
|
+
```
|
|
62
|
+
|
|
56
63
|
### Widget options
|
|
57
64
|
`title` - Override the widget default title
|
|
58
65
|
|
|
@@ -64,31 +71,12 @@ To get dashboard support in Sanity Studio in general:
|
|
|
64
71
|
- `url` - Optionally override site deployment url. By default it is inferred to be `https://netlify-site-name.netlify.app`.
|
|
65
72
|
- `branch` - Optionally pass the name of a branch to deploy
|
|
66
73
|
|
|
67
|
-
## Developing
|
|
68
|
-
|
|
69
|
-
To simulate using your development version as a real module inside a studio, you can do the following:
|
|
70
|
-
|
|
71
|
-
* Run `npm install && npm link` from the root of this repository.
|
|
72
|
-
* Run `npm run watch` to start developing and build the module when changes are made.
|
|
73
|
-
|
|
74
|
-
#### Displaying your development version inside a studio
|
|
75
|
-
|
|
76
|
-
**With the mono-repo's `test-studio`:**
|
|
77
|
-
|
|
78
|
-
* Bootstrap the monorepo: `npm run bootstrap`
|
|
79
|
-
* Add `sanity-plugin-dashboard-widget-netlify` with the current version number to `package.json` in the `test-studio` root folder (but don't run `npm install` afterwards)
|
|
80
|
-
* Run `npm link sanity-plugin-dashboard-widget-netlify` inside the mono-repo's root.
|
|
81
|
-
* Restart the `test-studio`
|
|
82
|
-
|
|
83
|
-
**With a regular Sanity Studio:**
|
|
84
|
-
* Run `npm install`
|
|
85
|
-
* Add `sanity-plugin-dashboard-widget-netlify` with the current version number to `package.json`.
|
|
86
|
-
* Run `npm link sanity-plugin-dashboard-widget-netlify`
|
|
87
|
-
* Start the studio
|
|
74
|
+
## Developing plugin kit
|
|
88
75
|
|
|
89
|
-
|
|
76
|
+
### Test
|
|
90
77
|
|
|
91
|
-
|
|
78
|
+
This plugin uses [@sanity/plugin-kit](https://github.com/sanity-io/plugin-kit)
|
|
79
|
+
with default configuration for build & watch scripts.
|
|
92
80
|
|
|
93
81
|
### Release new version
|
|
94
82
|
|
package/lib/esm/index.js
ADDED
|
@@ -0,0 +1,432 @@
|
|
|
1
|
+
import {jsx as $gGrEF$jsx, jsxs as $gGrEF$jsxs} from "react/jsx-runtime";
|
|
2
|
+
import {useState as $gGrEF$useState, useCallback as $gGrEF$useCallback, useEffect as $gGrEF$useEffect, useRef as $gGrEF$useRef} from "react";
|
|
3
|
+
import {streamingComponent as $gGrEF$streamingComponent, createEventHandler as $gGrEF$createEventHandler} from "react-props-stream";
|
|
4
|
+
import {switchMap as $gGrEF$switchMap, map as $gGrEF$map, catchError as $gGrEF$catchError, startWith as $gGrEF$startWith, scan as $gGrEF$scan} from "rxjs/operators";
|
|
5
|
+
import {of as $gGrEF$of, merge as $gGrEF$merge, Observable as $gGrEF$Observable} from "rxjs";
|
|
6
|
+
import $gGrEF$abortcontroller from "abort-controller";
|
|
7
|
+
import {DashboardWidgetContainer as $gGrEF$DashboardWidgetContainer} from "@sanity/dashboard";
|
|
8
|
+
import $gGrEF$styledcomponents from "styled-components";
|
|
9
|
+
import {Card as $gGrEF$Card, Flex as $gGrEF$Flex, Button as $gGrEF$Button, Box as $gGrEF$Box, Text as $gGrEF$Text, Spinner as $gGrEF$Spinner, Stack as $gGrEF$Stack, Label as $gGrEF$Label} from "@sanity/ui";
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
const $6a52b9b8daafcc0d$export$e7284b1f9bc95d1c = ()=>{
|
|
25
|
+
if (!("AbortController" in window)) return new (0, $gGrEF$abortcontroller)();
|
|
26
|
+
return new AbortController();
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
const $66fba9dd0b7eddcc$export$fbb260ef4c4aaffa = (input, init)=>{
|
|
31
|
+
return new (0, $gGrEF$Observable)((subscriber)=>{
|
|
32
|
+
const controller = (0, $6a52b9b8daafcc0d$export$e7284b1f9bc95d1c)();
|
|
33
|
+
const onResponse = (res)=>{
|
|
34
|
+
subscriber.next(res);
|
|
35
|
+
subscriber.complete();
|
|
36
|
+
};
|
|
37
|
+
const onError = (err)=>{
|
|
38
|
+
if (err.name === "AbortError") subscriber.complete();
|
|
39
|
+
else subscriber.error(err);
|
|
40
|
+
};
|
|
41
|
+
fetch(input, {
|
|
42
|
+
...init,
|
|
43
|
+
signal: controller.signal
|
|
44
|
+
}).then((res)=>{
|
|
45
|
+
if (res.status < 200 || res.status > 299) throw new Error(`HTTP Error ${res.status}: ${res.statusText}`);
|
|
46
|
+
return res.status;
|
|
47
|
+
}).then(onResponse, onError);
|
|
48
|
+
return ()=>{
|
|
49
|
+
controller.abort();
|
|
50
|
+
};
|
|
51
|
+
});
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
function $70568a64fed8d622$export$5800f480eca98093(site) {
|
|
56
|
+
if (!site.buildHookId) return (0, $gGrEF$of)(new Error("Site missing buildHookId"));
|
|
57
|
+
return (0, $66fba9dd0b7eddcc$export$fbb260ef4c4aaffa)(`https://api.netlify.com/build_hooks/${site.buildHookId}`, {
|
|
58
|
+
method: "POST"
|
|
59
|
+
}).pipe((0, $gGrEF$map)((result)=>({
|
|
60
|
+
result: result,
|
|
61
|
+
site: site
|
|
62
|
+
})));
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
const $711f33e30b92e542$export$7092726c6c65f203 = (0, $gGrEF$scan)((state, action)=>{
|
|
68
|
+
switch(action.type){
|
|
69
|
+
case "setSites":
|
|
70
|
+
return {
|
|
71
|
+
...state,
|
|
72
|
+
sites: action.sites || []
|
|
73
|
+
};
|
|
74
|
+
case "deploy/started":
|
|
75
|
+
return {
|
|
76
|
+
...state,
|
|
77
|
+
sites: state.sites.map((site)=>{
|
|
78
|
+
if (action.site && site.id === action.site.id) return {
|
|
79
|
+
...site
|
|
80
|
+
};
|
|
81
|
+
return site;
|
|
82
|
+
})
|
|
83
|
+
};
|
|
84
|
+
case "deploy/failed":
|
|
85
|
+
return {
|
|
86
|
+
...state,
|
|
87
|
+
error: action.error
|
|
88
|
+
};
|
|
89
|
+
case "deploy/completed":
|
|
90
|
+
return {
|
|
91
|
+
...state,
|
|
92
|
+
sites: state.sites.map((site)=>{
|
|
93
|
+
if (action.site && site.id === action.site.id) return {
|
|
94
|
+
...site,
|
|
95
|
+
error: action.error
|
|
96
|
+
};
|
|
97
|
+
return site;
|
|
98
|
+
})
|
|
99
|
+
};
|
|
100
|
+
default:
|
|
101
|
+
return state;
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
const $6c90131b55f2a092$var$noop = ()=>undefined;
|
|
107
|
+
const $6c90131b55f2a092$var$INITIAL_PROPS = {
|
|
108
|
+
title: "Netlify sites",
|
|
109
|
+
sites: [],
|
|
110
|
+
isLoading: true,
|
|
111
|
+
onDeploy: $6c90131b55f2a092$var$noop
|
|
112
|
+
};
|
|
113
|
+
const $6c90131b55f2a092$export$508da169a81283d7 = (options)=>{
|
|
114
|
+
const configuredSites = (options.sites || []).map((site)=>({
|
|
115
|
+
id: site.apiId,
|
|
116
|
+
name: site.name,
|
|
117
|
+
title: site.title,
|
|
118
|
+
buildHookId: site.buildHookId,
|
|
119
|
+
url: site.url || site.branch && `https://${site.branch}--${site.name}.netlify.app/` || site.name && `https://${site.name}.netlify.app/`,
|
|
120
|
+
adminUrl: site.name && `https://app.netlify.com/sites/${site.name}`,
|
|
121
|
+
branch: site.branch
|
|
122
|
+
}));
|
|
123
|
+
const [onDeploy$, onDeploy] = (0, $gGrEF$createEventHandler)();
|
|
124
|
+
const setSitesAction$ = (0, $gGrEF$of)(configuredSites).pipe((0, $gGrEF$map)((sites)=>({
|
|
125
|
+
type: "setSites",
|
|
126
|
+
sites: sites
|
|
127
|
+
})));
|
|
128
|
+
const deployAction$ = onDeploy$.pipe((0, $gGrEF$map)((site)=>({
|
|
129
|
+
type: "deploy/started",
|
|
130
|
+
site: site
|
|
131
|
+
})));
|
|
132
|
+
const deployResult$ = onDeploy$.pipe((0, $gGrEF$switchMap)((site)=>(0, $70568a64fed8d622$export$5800f480eca98093)(site)));
|
|
133
|
+
const deployCompletedAction$ = deployResult$.pipe((0, $gGrEF$map)((result)=>({
|
|
134
|
+
type: "deploy/completed",
|
|
135
|
+
...result
|
|
136
|
+
}), (0, $gGrEF$catchError)((error)=>(0, $gGrEF$of)({
|
|
137
|
+
type: "deploy/failed",
|
|
138
|
+
error: error
|
|
139
|
+
}))));
|
|
140
|
+
(0, $gGrEF$merge)(setSitesAction$, deployAction$, deployCompletedAction$).pipe((0, $711f33e30b92e542$export$7092726c6c65f203)).subscribe();
|
|
141
|
+
return (0, $gGrEF$of)(configuredSites).pipe((0, $gGrEF$map)((sites)=>({
|
|
142
|
+
sites: sites,
|
|
143
|
+
title: options.title || $6c90131b55f2a092$var$INITIAL_PROPS.title,
|
|
144
|
+
description: options.description,
|
|
145
|
+
isLoading: false,
|
|
146
|
+
onDeploy: onDeploy
|
|
147
|
+
})), (0, $gGrEF$startWith)($6c90131b55f2a092$var$INITIAL_PROPS));
|
|
148
|
+
};
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
|
|
152
|
+
|
|
153
|
+
|
|
154
|
+
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
|
|
158
|
+
|
|
159
|
+
|
|
160
|
+
const $1ab91c7747387932$var$Link = (props)=>{
|
|
161
|
+
const { url: url , children: children } = props;
|
|
162
|
+
return /*#__PURE__*/ (0, $gGrEF$jsx)("span", {
|
|
163
|
+
children: /*#__PURE__*/ (0, $gGrEF$jsx)("a", {
|
|
164
|
+
href: url,
|
|
165
|
+
target: "_blank",
|
|
166
|
+
children: children
|
|
167
|
+
})
|
|
168
|
+
});
|
|
169
|
+
};
|
|
170
|
+
const $1ab91c7747387932$var$Links = (props)=>{
|
|
171
|
+
const { url: url , adminUrl: adminUrl } = props;
|
|
172
|
+
if (url && adminUrl) return /*#__PURE__*/ (0, $gGrEF$jsxs)("span", {
|
|
173
|
+
children: [
|
|
174
|
+
"(",
|
|
175
|
+
/*#__PURE__*/ (0, $gGrEF$jsx)($1ab91c7747387932$var$Link, {
|
|
176
|
+
url: url,
|
|
177
|
+
children: "view"
|
|
178
|
+
}),
|
|
179
|
+
", ",
|
|
180
|
+
/*#__PURE__*/ (0, $gGrEF$jsx)($1ab91c7747387932$var$Link, {
|
|
181
|
+
url: adminUrl,
|
|
182
|
+
children: "admin"
|
|
183
|
+
}),
|
|
184
|
+
")"
|
|
185
|
+
]
|
|
186
|
+
});
|
|
187
|
+
if (url) return /*#__PURE__*/ (0, $gGrEF$jsx)($1ab91c7747387932$var$Link, {
|
|
188
|
+
url: url,
|
|
189
|
+
children: "(view)"
|
|
190
|
+
});
|
|
191
|
+
if (adminUrl) return /*#__PURE__*/ (0, $gGrEF$jsx)($1ab91c7747387932$var$Link, {
|
|
192
|
+
url: adminUrl,
|
|
193
|
+
children: "(admin)"
|
|
194
|
+
});
|
|
195
|
+
return null;
|
|
196
|
+
};
|
|
197
|
+
var $1ab91c7747387932$export$2e2bcd8739ae039 = $1ab91c7747387932$var$Links;
|
|
198
|
+
|
|
199
|
+
|
|
200
|
+
const $5f385ff862088843$export$367d0f7a898ff105 = 10000;
|
|
201
|
+
const $5f385ff862088843$var$getImageUrl = (siteId, branchName)=>{
|
|
202
|
+
const baseUrl = `https://api.netlify.com/api/v1/badges/${siteId}/deploy-status`;
|
|
203
|
+
const time = new Date().getTime();
|
|
204
|
+
const branch = `branch=${branchName}`;
|
|
205
|
+
return branchName ? `${baseUrl}?${time}&${branch}` : `${baseUrl}?${time}`;
|
|
206
|
+
};
|
|
207
|
+
const $5f385ff862088843$var$useBadgeImage = (siteId, branchName)=>{
|
|
208
|
+
const [src, setSrc] = (0, $gGrEF$useState)(()=>$5f385ff862088843$var$getImageUrl(siteId, branchName));
|
|
209
|
+
const update = (0, $gGrEF$useCallback)(()=>setSrc($5f385ff862088843$var$getImageUrl(siteId, branchName)), [
|
|
210
|
+
siteId
|
|
211
|
+
]);
|
|
212
|
+
(0, $gGrEF$useEffect)(()=>{
|
|
213
|
+
const interval = window.setInterval(update, $5f385ff862088843$export$367d0f7a898ff105);
|
|
214
|
+
return ()=>window.clearInterval(interval);
|
|
215
|
+
}, [
|
|
216
|
+
update
|
|
217
|
+
]);
|
|
218
|
+
return [
|
|
219
|
+
src,
|
|
220
|
+
update
|
|
221
|
+
];
|
|
222
|
+
};
|
|
223
|
+
const $5f385ff862088843$var$useDeploy = (site, onDeploy, updateBadge)=>{
|
|
224
|
+
const timeoutRef = (0, $gGrEF$useRef)(-1);
|
|
225
|
+
(0, $gGrEF$useEffect)(()=>()=>window.clearTimeout(timeoutRef.current), []);
|
|
226
|
+
return (0, $gGrEF$useCallback)(()=>{
|
|
227
|
+
onDeploy(site);
|
|
228
|
+
timeoutRef.current = window.setTimeout(updateBadge, 1000);
|
|
229
|
+
}, [
|
|
230
|
+
site,
|
|
231
|
+
onDeploy,
|
|
232
|
+
updateBadge
|
|
233
|
+
]);
|
|
234
|
+
};
|
|
235
|
+
const $5f385ff862088843$var$SiteItem = (props)=>{
|
|
236
|
+
const [hasBadgeError, setHasBadgeError] = (0, $gGrEF$useState)(false);
|
|
237
|
+
const { site: site , onDeploy: onDeploy } = props;
|
|
238
|
+
const { id: id , name: name , title: title , url: url , adminUrl: adminUrl , buildHookId: buildHookId , branch: branch } = site;
|
|
239
|
+
const [badge, updateBadge] = $5f385ff862088843$var$useBadgeImage(id, branch);
|
|
240
|
+
const handleDeploy = $5f385ff862088843$var$useDeploy(site, onDeploy, updateBadge);
|
|
241
|
+
const handleBadgeError = ()=>{
|
|
242
|
+
setHasBadgeError(true);
|
|
243
|
+
};
|
|
244
|
+
return /*#__PURE__*/ (0, $gGrEF$jsxs)((0, $gGrEF$Flex), {
|
|
245
|
+
as: "li",
|
|
246
|
+
children: [
|
|
247
|
+
/*#__PURE__*/ (0, $gGrEF$jsx)((0, $gGrEF$Box), {
|
|
248
|
+
flex: 1,
|
|
249
|
+
paddingY: 2,
|
|
250
|
+
paddingX: 3,
|
|
251
|
+
children: /*#__PURE__*/ (0, $gGrEF$jsxs)((0, $gGrEF$Stack), {
|
|
252
|
+
space: 2,
|
|
253
|
+
children: [
|
|
254
|
+
/*#__PURE__*/ (0, $gGrEF$jsxs)((0, $gGrEF$Text), {
|
|
255
|
+
as: "h4",
|
|
256
|
+
children: [
|
|
257
|
+
title || name,
|
|
258
|
+
/*#__PURE__*/ (0, $gGrEF$jsx)((0, $1ab91c7747387932$export$2e2bcd8739ae039), {
|
|
259
|
+
url: url,
|
|
260
|
+
adminUrl: adminUrl
|
|
261
|
+
})
|
|
262
|
+
]
|
|
263
|
+
}),
|
|
264
|
+
/*#__PURE__*/ (0, $gGrEF$jsxs)((0, $gGrEF$Flex), {
|
|
265
|
+
justify: "flex-start",
|
|
266
|
+
children: [
|
|
267
|
+
!hasBadgeError && /*#__PURE__*/ (0, $gGrEF$jsx)("img", {
|
|
268
|
+
src: badge,
|
|
269
|
+
onError: handleBadgeError,
|
|
270
|
+
alt: "Badge"
|
|
271
|
+
}),
|
|
272
|
+
hasBadgeError && /*#__PURE__*/ (0, $gGrEF$jsx)((0, $gGrEF$Card), {
|
|
273
|
+
tone: "critical",
|
|
274
|
+
radius: 2,
|
|
275
|
+
padding: 2,
|
|
276
|
+
children: /*#__PURE__*/ (0, $gGrEF$jsx)((0, $gGrEF$Label), {
|
|
277
|
+
size: 0,
|
|
278
|
+
muted: true,
|
|
279
|
+
children: "Failed to load badge"
|
|
280
|
+
})
|
|
281
|
+
})
|
|
282
|
+
]
|
|
283
|
+
})
|
|
284
|
+
]
|
|
285
|
+
})
|
|
286
|
+
}),
|
|
287
|
+
buildHookId ? /*#__PURE__*/ (0, $gGrEF$jsx)((0, $gGrEF$Box), {
|
|
288
|
+
paddingY: 2,
|
|
289
|
+
paddingX: 3,
|
|
290
|
+
children: /*#__PURE__*/ (0, $gGrEF$jsx)((0, $gGrEF$Button), {
|
|
291
|
+
mode: "ghost",
|
|
292
|
+
onClick: handleDeploy,
|
|
293
|
+
text: "Deploy"
|
|
294
|
+
})
|
|
295
|
+
}) : null
|
|
296
|
+
]
|
|
297
|
+
});
|
|
298
|
+
};
|
|
299
|
+
var $5f385ff862088843$export$2e2bcd8739ae039 = $5f385ff862088843$var$SiteItem;
|
|
300
|
+
|
|
301
|
+
|
|
302
|
+
|
|
303
|
+
function $c51ad6f84c643d08$export$2e2bcd8739ae039(props) {
|
|
304
|
+
const { isLoading: isLoading , onDeploy: onDeploy , sites: sites } = props;
|
|
305
|
+
if (isLoading) return /*#__PURE__*/ (0, $gGrEF$jsx)((0, $gGrEF$Card), {
|
|
306
|
+
padding: 4,
|
|
307
|
+
children: /*#__PURE__*/ (0, $gGrEF$jsxs)((0, $gGrEF$Flex), {
|
|
308
|
+
direction: "column",
|
|
309
|
+
justify: "center",
|
|
310
|
+
align: "center",
|
|
311
|
+
children: [
|
|
312
|
+
/*#__PURE__*/ (0, $gGrEF$jsx)((0, $gGrEF$Spinner), {
|
|
313
|
+
muted: true
|
|
314
|
+
}),
|
|
315
|
+
/*#__PURE__*/ (0, $gGrEF$jsx)((0, $gGrEF$Box), {
|
|
316
|
+
marginTop: 3,
|
|
317
|
+
children: /*#__PURE__*/ (0, $gGrEF$jsx)((0, $gGrEF$Text), {
|
|
318
|
+
muted: true,
|
|
319
|
+
children: "Loading sites…"
|
|
320
|
+
})
|
|
321
|
+
})
|
|
322
|
+
]
|
|
323
|
+
})
|
|
324
|
+
});
|
|
325
|
+
if (!sites || sites && sites.length === 0) return /*#__PURE__*/ (0, $gGrEF$jsx)((0, $gGrEF$Card), {
|
|
326
|
+
tone: "critical",
|
|
327
|
+
padding: 3,
|
|
328
|
+
children: /*#__PURE__*/ (0, $gGrEF$jsx)((0, $gGrEF$Text), {
|
|
329
|
+
children: "No sites are defined in the widget options. Please check your config."
|
|
330
|
+
})
|
|
331
|
+
});
|
|
332
|
+
return /*#__PURE__*/ (0, $gGrEF$jsx)((0, $gGrEF$Box), {
|
|
333
|
+
paddingY: 2,
|
|
334
|
+
children: /*#__PURE__*/ (0, $gGrEF$jsx)((0, $gGrEF$Stack), {
|
|
335
|
+
as: "ul",
|
|
336
|
+
space: 2,
|
|
337
|
+
children: sites.map((site, index)=>{
|
|
338
|
+
return /*#__PURE__*/ (0, $gGrEF$jsx)((0, $5f385ff862088843$export$2e2bcd8739ae039), {
|
|
339
|
+
onDeploy: onDeploy,
|
|
340
|
+
site: site
|
|
341
|
+
}, `site-${index}`);
|
|
342
|
+
})
|
|
343
|
+
})
|
|
344
|
+
});
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
|
|
348
|
+
|
|
349
|
+
|
|
350
|
+
|
|
351
|
+
const $b73b92d6ab5ad468$var$ContentCard = (0, $gGrEF$styledcomponents)((0, $gGrEF$Card))`
|
|
352
|
+
min-height: 66px;
|
|
353
|
+
`;
|
|
354
|
+
function $b73b92d6ab5ad468$export$2e2bcd8739ae039(props) {
|
|
355
|
+
const netlifySitesUrl = "https://app.netlify.com/account/sites";
|
|
356
|
+
const { title: title , description: description , isLoading: isLoading , sites: sites , onDeploy: onDeploy } = props;
|
|
357
|
+
const footer = /*#__PURE__*/ (0, $gGrEF$jsx)((0, $gGrEF$Flex), {
|
|
358
|
+
direction: "column",
|
|
359
|
+
align: "stretch",
|
|
360
|
+
children: /*#__PURE__*/ (0, $gGrEF$jsx)((0, $gGrEF$Button), {
|
|
361
|
+
as: "a",
|
|
362
|
+
href: isLoading ? undefined : netlifySitesUrl,
|
|
363
|
+
disabled: isLoading,
|
|
364
|
+
paddingX: 2,
|
|
365
|
+
paddingY: 4,
|
|
366
|
+
mode: "bleed",
|
|
367
|
+
tone: "primary",
|
|
368
|
+
text: "Manage sites at Netlify",
|
|
369
|
+
loading: isLoading,
|
|
370
|
+
target: "_blank"
|
|
371
|
+
})
|
|
372
|
+
});
|
|
373
|
+
return /*#__PURE__*/ (0, $gGrEF$jsx)((0, $gGrEF$DashboardWidgetContainer), {
|
|
374
|
+
header: title,
|
|
375
|
+
footer: footer,
|
|
376
|
+
children: /*#__PURE__*/ (0, $gGrEF$jsxs)($b73b92d6ab5ad468$var$ContentCard, {
|
|
377
|
+
paddingY: 1,
|
|
378
|
+
children: [
|
|
379
|
+
description && /*#__PURE__*/ (0, $gGrEF$jsx)((0, $gGrEF$Box), {
|
|
380
|
+
paddingY: 3,
|
|
381
|
+
paddingX: 3,
|
|
382
|
+
children: /*#__PURE__*/ (0, $gGrEF$jsx)((0, $gGrEF$Text), {
|
|
383
|
+
as: "p",
|
|
384
|
+
size: 1,
|
|
385
|
+
muted: true,
|
|
386
|
+
children: /*#__PURE__*/ (0, $gGrEF$jsx)("span", {
|
|
387
|
+
dangerouslySetInnerHTML: {
|
|
388
|
+
__html: description
|
|
389
|
+
}
|
|
390
|
+
})
|
|
391
|
+
})
|
|
392
|
+
}),
|
|
393
|
+
/*#__PURE__*/ (0, $gGrEF$jsx)((0, $c51ad6f84c643d08$export$2e2bcd8739ae039), {
|
|
394
|
+
isLoading: isLoading,
|
|
395
|
+
onDeploy: onDeploy,
|
|
396
|
+
sites: sites
|
|
397
|
+
})
|
|
398
|
+
]
|
|
399
|
+
})
|
|
400
|
+
});
|
|
401
|
+
}
|
|
402
|
+
|
|
403
|
+
|
|
404
|
+
var $70ad053647681448$export$2e2bcd8739ae039 = (0, $gGrEF$streamingComponent)((options$)=>options$.pipe((0, $gGrEF$switchMap)((options)=>(0, $6c90131b55f2a092$export$508da169a81283d7)(options).pipe((0, $gGrEF$map)((props)=>{
|
|
405
|
+
return /*#__PURE__*/ (0, $gGrEF$jsx)((0, $b73b92d6ab5ad468$export$2e2bcd8739ae039), {
|
|
406
|
+
...props
|
|
407
|
+
});
|
|
408
|
+
})))));
|
|
409
|
+
|
|
410
|
+
|
|
411
|
+
function $91a08798d183e77b$export$1bbd75f1b90d7c3c(config) {
|
|
412
|
+
return {
|
|
413
|
+
name: "netlify-widget",
|
|
414
|
+
component: ()=>{
|
|
415
|
+
return /*#__PURE__*/ (0, $gGrEF$jsx)((0, $70ad053647681448$export$2e2bcd8739ae039), {
|
|
416
|
+
...config
|
|
417
|
+
});
|
|
418
|
+
},
|
|
419
|
+
layout: config.layout ?? {
|
|
420
|
+
width: "medium"
|
|
421
|
+
}
|
|
422
|
+
};
|
|
423
|
+
}
|
|
424
|
+
|
|
425
|
+
|
|
426
|
+
var $f17097ca2e05ac05$exports = {};
|
|
427
|
+
|
|
428
|
+
|
|
429
|
+
|
|
430
|
+
|
|
431
|
+
export {$91a08798d183e77b$export$1bbd75f1b90d7c3c as netlifyWidget};
|
|
432
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"mappings":"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","sources":["src/index.ts","src/plugin.tsx","src/widget.tsx","src/props.ts","src/datastores/deploy.ts","src/http/statusCodeRequest.ts","src/http/utils/createAbortController.ts","src/reducers.ts","src/components/NetlifyWidget.tsx","src/components/SiteList.tsx","src/components/SiteItem/index.tsx","src/components/SiteItem/Links.tsx","src/types.ts"],"sourcesContent":["/**\n * Plugin widget for @sanity/dashboard\n */\nexport {netlifyWidget} from './plugin'\nexport type {NetlifyWidgetConfig} from './plugin'\n\nexport * from './types'\n","import React from 'react'\nimport Widget from './widget'\nimport {WidgetOptions} from './types'\nimport {DashboardWidget, LayoutConfig} from '@sanity/dashboard'\n\nexport type NetlifyWidgetConfig = WidgetOptions & {layout?: LayoutConfig}\n\nexport function netlifyWidget(config: NetlifyWidgetConfig): DashboardWidget {\n return {\n name: 'netlify-widget',\n component: () => {\n return <Widget {...config} />\n },\n layout: config.layout ?? {width: 'medium'},\n }\n}\n","import React from 'react'\nimport {streamingComponent} from 'react-props-stream'\nimport {map, switchMap} from 'rxjs/operators'\nimport {WidgetOptions} from './types'\nimport {props$} from './props'\nimport NetlifyWidget from './components/NetlifyWidget'\n\nexport default streamingComponent<WidgetOptions>((options$) =>\n options$.pipe(\n switchMap((options) =>\n props$(options).pipe(\n map((props) => {\n return <NetlifyWidget {...props} />\n })\n )\n )\n )\n)\n","import {merge, of} from 'rxjs'\nimport {createEventHandler} from 'react-props-stream'\nimport {catchError, map, startWith, switchMap} from 'rxjs/operators'\nimport {deploy} from './datastores/deploy'\nimport {Site, WidgetOptions} from './types'\nimport {stateReducer$} from './reducers'\n\nconst noop = () => undefined\n\nconst INITIAL_PROPS = {\n title: 'Netlify sites',\n sites: [],\n isLoading: true,\n onDeploy: noop,\n}\n\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport const props$ = (options: WidgetOptions) => {\n const configuredSites = (options.sites || []).map((site) => ({\n id: site.apiId,\n name: site.name,\n title: site.title,\n buildHookId: site.buildHookId,\n url:\n site.url ||\n (site.branch && `https://${site.branch}--${site.name}.netlify.app/`) ||\n (site.name && `https://${site.name}.netlify.app/`),\n adminUrl: site.name && `https://app.netlify.com/sites/${site.name}`,\n branch: site.branch,\n }))\n\n const [onDeploy$, onDeploy] = createEventHandler<Site>()\n const setSitesAction$ = of(configuredSites).pipe(map((sites) => ({type: 'setSites', sites})))\n const deployAction$ = onDeploy$.pipe(map((site) => ({type: 'deploy/started', site})))\n const deployResult$ = onDeploy$.pipe(switchMap((site) => deploy(site)))\n const deployCompletedAction$ = deployResult$.pipe(\n map(\n (result) => ({type: 'deploy/completed', ...result}),\n catchError((error) => of({type: 'deploy/failed', error}))\n )\n )\n\n merge(setSitesAction$, deployAction$, deployCompletedAction$).pipe(stateReducer$).subscribe()\n\n return of(configuredSites).pipe(\n map((sites) => ({\n sites,\n title: options.title || INITIAL_PROPS.title,\n description: options.description,\n isLoading: false,\n onDeploy,\n })),\n startWith(INITIAL_PROPS)\n )\n}\n","import {Observable, of} from 'rxjs'\nimport {map} from 'rxjs/operators'\nimport {statusCodeRequest} from '../http/statusCodeRequest'\nimport {Site} from '../types'\n\nexport function deploy(site: Site): Observable<{result: number; site: Site} | Error> {\n if (!site.buildHookId) {\n return of(new Error('Site missing buildHookId'))\n }\n\n return statusCodeRequest(`https://api.netlify.com/build_hooks/${site.buildHookId}`, {\n method: 'POST',\n }).pipe(map((result) => ({result, site})))\n}\n","import {Observable} from 'rxjs'\nimport {createAbortController} from './utils/createAbortController'\n\n// eslint-disable-next-line no-undef\nexport const statusCodeRequest = (input: RequestInfo, init?: RequestInit): Observable<number> => {\n return new Observable((subscriber) => {\n const controller = createAbortController()\n const onResponse = (res: number) => {\n subscriber.next(res)\n subscriber.complete()\n }\n const onError = (err: Error) => {\n if (err.name === 'AbortError') {\n subscriber.complete()\n } else {\n subscriber.error(err)\n }\n }\n\n fetch(input, {...init, signal: controller.signal})\n .then((res: Response) => {\n if (res.status < 200 || res.status > 299) {\n throw new Error(`HTTP Error ${res.status}: ${res.statusText}`)\n }\n return res.status\n })\n .then(onResponse, onError)\n\n return () => {\n controller.abort()\n }\n })\n}\n","import AbortControllerPolyfill from 'abort-controller'\n\nexport const createAbortController = (): AbortController => {\n if (!('AbortController' in window)) {\n return new AbortControllerPolyfill() as AbortController\n }\n return new AbortController()\n}\n","import {scan} from 'rxjs/operators'\nimport {Site} from './types'\n\ninterface Deployment {\n id: string\n}\n\ninterface Action {\n type: string\n sites?: Site[]\n site?: Site\n error?: Error\n deployments?: Deployment[]\n}\n\ninterface State {\n sites: Site[]\n action: Action\n}\n\nexport const stateReducer$ = scan((state: State, action: Action) => {\n switch (action.type) {\n case 'setSites':\n return {...state, sites: action.sites || []}\n case 'deploy/started':\n return {\n ...state,\n sites: state.sites.map((site: Site) => {\n if (action.site && site.id === action.site.id) {\n return {...site}\n }\n return site\n }),\n }\n case 'deploy/failed':\n return {\n ...state,\n error: action.error,\n }\n case 'deploy/completed':\n return {\n ...state,\n sites: state.sites.map((site: Site) => {\n if (action.site && site.id === action.site.id) {\n return {...site, error: action.error}\n }\n return site\n }),\n }\n default:\n return state\n }\n})\n","import React from 'react'\nimport {NetlifyWidgetProps} from '../types'\nimport SiteList from './SiteList'\nimport {DashboardWidgetContainer} from '@sanity/dashboard'\nimport styled from 'styled-components'\nimport {Button, Flex, Card, Text, Box} from '@sanity/ui'\n\nconst ContentCard = styled(Card)`\n min-height: 66px;\n`\n\nexport default function NetlifyWidget(props: NetlifyWidgetProps) {\n const netlifySitesUrl = 'https://app.netlify.com/account/sites'\n const {title, description, isLoading, sites, onDeploy} = props\n\n const footer = (\n <Flex direction=\"column\" align=\"stretch\">\n <Button\n as=\"a\"\n href={isLoading ? undefined : netlifySitesUrl}\n disabled={isLoading}\n paddingX={2}\n paddingY={4}\n mode=\"bleed\"\n tone=\"primary\"\n text=\"Manage sites at Netlify\"\n loading={isLoading}\n target=\"_blank\"\n />\n </Flex>\n )\n\n return (\n <DashboardWidgetContainer header={title} footer={footer}>\n <ContentCard paddingY={1}>\n {description && (\n <Box paddingY={3} paddingX={3}>\n <Text as=\"p\" size={1} muted>\n <span dangerouslySetInnerHTML={{__html: description}} />\n </Text>\n </Box>\n )}\n <SiteList isLoading={isLoading} onDeploy={onDeploy} sites={sites} />\n </ContentCard>\n </DashboardWidgetContainer>\n )\n}\n","import React from 'react'\nimport {DeployAction, Site} from '../types'\nimport SiteItem from './SiteItem'\nimport {Flex, Box, Card, Text, Spinner, Stack} from '@sanity/ui'\n\ninterface Props {\n isLoading: boolean\n sites?: Site[]\n onDeploy: DeployAction\n}\n\nexport default function SiteList(props: Props) {\n const {isLoading, onDeploy, sites} = props\n if (isLoading) {\n return (\n <Card padding={4}>\n <Flex direction=\"column\" justify=\"center\" align=\"center\">\n <Spinner muted />\n <Box marginTop={3}>\n <Text muted>Loading sites…</Text>\n </Box>\n </Flex>\n </Card>\n )\n }\n if (!sites || (sites && sites.length === 0)) {\n return (\n <Card tone=\"critical\" padding={3}>\n <Text>No sites are defined in the widget options. Please check your config.</Text>\n </Card>\n )\n }\n return (\n <Box paddingY={2}>\n <Stack as=\"ul\" space={2}>\n {sites.map((site, index) => {\n return <SiteItem onDeploy={onDeploy} site={site} key={`site-${index}`} />\n })}\n </Stack>\n </Box>\n )\n}\n","import React, {FunctionComponent, useCallback, useEffect, useRef, useState} from 'react'\nimport {Button, Flex, Box, Card, Text, Stack, Label} from '@sanity/ui'\nimport {DeployAction, Site} from '../../types'\nimport Links from './Links'\n\ninterface Props {\n site: Site\n onDeploy: DeployAction\n}\n\nexport const IMAGE_PULL_INTERVAL = 10000\n\nconst getImageUrl = (siteId: string, branchName?: string) => {\n const baseUrl = `https://api.netlify.com/api/v1/badges/${siteId}/deploy-status`\n const time = new Date().getTime()\n const branch = `branch=${branchName}`\n\n return branchName ? `${baseUrl}?${time}&${branch}` : `${baseUrl}?${time}`\n}\n\nconst useBadgeImage = (siteId: string, branchName?: string ) => {\n const [src, setSrc] = useState(() => getImageUrl(siteId, branchName))\n const update = useCallback(() => setSrc(getImageUrl(siteId, branchName)), [siteId])\n\n useEffect(() => {\n const interval = window.setInterval(update, IMAGE_PULL_INTERVAL)\n return () => window.clearInterval(interval)\n }, [update])\n\n return [src, update] as const\n}\n\nconst useDeploy = (site: Site, onDeploy: DeployAction, updateBadge: () => void) => {\n const timeoutRef = useRef(-1)\n useEffect(() => () => window.clearTimeout(timeoutRef.current), [])\n\n return useCallback(() => {\n onDeploy(site)\n timeoutRef.current = window.setTimeout(updateBadge, 1000)\n }, [site, onDeploy, updateBadge])\n}\n\nconst SiteItem: FunctionComponent<Props> = (props) => {\n const [hasBadgeError, setHasBadgeError] = useState(false)\n const {site, onDeploy} = props\n const {id, name, title, url, adminUrl, buildHookId, branch} = site\n\n const [badge, updateBadge] = useBadgeImage(id, branch)\n const handleDeploy = useDeploy(site, onDeploy, updateBadge)\n const handleBadgeError = () => {\n setHasBadgeError(true)\n }\n\n return (\n <Flex as=\"li\">\n <Box flex={1} paddingY={2} paddingX={3}>\n <Stack space={2}>\n <Text as=\"h4\">\n {title || name}\n <Links url={url} adminUrl={adminUrl} />\n </Text>\n\n <Flex justify=\"flex-start\">\n {!hasBadgeError && <img src={badge} onError={handleBadgeError} alt=\"Badge\" />}\n {hasBadgeError && <Card tone=\"critical\" radius={2} padding={2}><Label size={0} muted>Failed to load badge</Label></Card>}\n </Flex>\n </Stack>\n </Box>\n\n {buildHookId ? (\n <Box paddingY={2} paddingX={3}>\n <Button mode=\"ghost\" onClick={handleDeploy} text=\"Deploy\" />\n </Box>\n ) : null}\n </Flex>\n )\n}\n\nexport default SiteItem\n","import React, {FunctionComponent} from 'react'\n\nconst Link: FunctionComponent<{url: string}> = (props) => {\n const {url, children} = props\n\n return (\n <span>\n <a href={url} target=\"_blank\">{children}</a>\n </span>\n )\n}\n\ntype Props = {\n url?: string\n adminUrl?: string\n}\n\nconst Links: FunctionComponent<Props> = (props) => {\n const {url, adminUrl} = props\n\n if (url && adminUrl) {\n return (\n <span>\n (<Link url={url}>view</Link>, <Link url={adminUrl}>admin</Link>)\n </span>\n )\n }\n\n if (url) {\n return <Link url={url}>(view)</Link>\n }\n if (adminUrl) {\n return <Link url={adminUrl}>(admin)</Link>\n }\n return null\n}\n\nexport default Links\n","export interface SiteWidgetOption {\n apiId: string\n name?: string\n title: string\n buildHookId: string\n url?: string\n branch?: string\n}\nexport interface WidgetOptions {\n title?: string\n description?: string\n sites: SiteWidgetOption[]\n}\n\nexport interface Site {\n title: string\n name?: string\n id: string\n url?: string\n adminUrl?: string\n buildHookId: string\n branch?: string\n}\n\nexport type DeployAction = (site: Site) => void\n\nexport interface NetlifyWidgetProps {\n title?: string\n description?: string\n sites?: Site[]\n isLoading: boolean\n onDeploy: DeployAction\n}\n"],"names":[],"version":3,"file":"index.js.map","sourceRoot":"../../"}
|