@hopecloud/jetstream-player 0.2.6 → 0.2.7
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/docs/.vitepress/config.ts +55 -0
- package/docs/guide/getting-started.md +120 -0
- package/docs/guide/index.md +11 -0
- package/docs/index.md +23 -0
- package/docs/usage/player-events.md +82 -0
- package/docs/usage/player-methods.md +59 -0
- package/docs/usage/using-multiple-iframes.md +106 -0
- package/package.json +8 -4
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { defineConfig } from 'vitepress'
|
|
2
|
+
|
|
3
|
+
export default defineConfig({
|
|
4
|
+
title: "Jetstream player API",
|
|
5
|
+
description: "Documentation of embed jetstream player API",
|
|
6
|
+
themeConfig: {
|
|
7
|
+
nav: [
|
|
8
|
+
{
|
|
9
|
+
text: 'Guide',
|
|
10
|
+
link: '/guide/'
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
text: 'Usage',
|
|
14
|
+
link: '/usage/using-multiple-iframes'
|
|
15
|
+
},
|
|
16
|
+
],
|
|
17
|
+
|
|
18
|
+
sidebar: [
|
|
19
|
+
{
|
|
20
|
+
text: 'Introduction',
|
|
21
|
+
items: [
|
|
22
|
+
{
|
|
23
|
+
text: 'What is Jetstream player API?',
|
|
24
|
+
link: '/guide/',
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
text: 'Getting Started',
|
|
28
|
+
link: '/guide/getting-started',
|
|
29
|
+
},
|
|
30
|
+
]
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
text: 'Examples of use',
|
|
34
|
+
items: [
|
|
35
|
+
{
|
|
36
|
+
text: 'Using multiple iframes',
|
|
37
|
+
link: '/usage/using-multiple-iframes',
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
text: 'Jetstream player API methods',
|
|
41
|
+
link: '/usage/player-methods',
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
text: 'Jetstream player API events',
|
|
45
|
+
link: '/usage/player-events',
|
|
46
|
+
},
|
|
47
|
+
]
|
|
48
|
+
}
|
|
49
|
+
],
|
|
50
|
+
|
|
51
|
+
socialLinks: [
|
|
52
|
+
{ icon: 'github', link: 'https://github.com/deeepvision/hcc-jetstream-player' }
|
|
53
|
+
]
|
|
54
|
+
}
|
|
55
|
+
})
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
# Getting Started
|
|
2
|
+
|
|
3
|
+
## Try It Online
|
|
4
|
+
|
|
5
|
+
You can try Jetstrem player API directly in your browser on [StackBlitz](https://stackblitz.com/edit/hcc-jetstream-player-demo?file=src%2Fcomponents%2FVideoSandbox.vue).
|
|
6
|
+
|
|
7
|
+
## How to use?
|
|
8
|
+
|
|
9
|
+
If you want to use the library in your project, you need to perform the following steps:
|
|
10
|
+
|
|
11
|
+
- Installation
|
|
12
|
+
- Initialization of Player instance and methods
|
|
13
|
+
- Initialization `JetstreamPlayer` with iframe
|
|
14
|
+
|
|
15
|
+
## Installation
|
|
16
|
+
|
|
17
|
+
Jetstrem player API can be installed in an existing project via npm.
|
|
18
|
+
|
|
19
|
+
```
|
|
20
|
+
npm i @hopecloud/jetstream-player
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
Once installed, you will be able to import the required methods or variables from the library into your component
|
|
24
|
+
|
|
25
|
+
```
|
|
26
|
+
import { JetstreamPlayer, onEnded, initPlayerMethods, embedVideosSrc } from '@hopecloud/jetstream-player';
|
|
27
|
+
```
|
|
28
|
+
## Initialization of Player instance and methods
|
|
29
|
+
|
|
30
|
+
In order for the library to be able to interact with all the embedded windows on your component, you need to grab all the iframes from the web page. To do this, you need to import and call a special function `initPlayerMethods`. This function under the hood grabs and sorts all the iframes present on the web page and determines which player exactly you want to interact with. Also inside the library, the function creates the `JetstreamPlayer` class, which we need to initialize our player and call the necessary methods.
|
|
31
|
+
|
|
32
|
+
```
|
|
33
|
+
import { initPlayerMethods, JetstreamPlayer } from '@hopecloud/jetstream-player';
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
### Important ☝️⬇️
|
|
37
|
+
|
|
38
|
+
The `initPlayerMethods` function should be called when all DOM elements are loaded. Therefore, in our [Vue.js example](https://stackblitz.com/edit/hcc-jetstream-player-demo?file=src%2Fcomponents%2FVideoSandbox.vue), we call this function inside the [onMounted](https://vuejs.org/api/composition-api-lifecycle.html#onmounted) lifecycle hook. The function will be executed when the template is fully loaded.
|
|
39
|
+
|
|
40
|
+
```
|
|
41
|
+
onMounted(() => {
|
|
42
|
+
initPlayerMethods();
|
|
43
|
+
});
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## Initialization `JetstreamPlayer` with iframe
|
|
47
|
+
|
|
48
|
+
As mentioned earlier, the library creates a `JetstreamPlayer` class in which we have methods `play`, `pause`, etc.
|
|
49
|
+
|
|
50
|
+
```
|
|
51
|
+
class JetstreamPlayer {
|
|
52
|
+
iframe;
|
|
53
|
+
constructor(selector) {
|
|
54
|
+
this.iframe = document.querySelector(selector);
|
|
55
|
+
}
|
|
56
|
+
play() {
|
|
57
|
+
this.iframe.contentWindow?.postMessage('play', '*');
|
|
58
|
+
}
|
|
59
|
+
pause() {
|
|
60
|
+
this.iframe.contentWindow?.postMessage('pause', '*');
|
|
61
|
+
}
|
|
62
|
+
...
|
|
63
|
+
}
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
### Important ☝️⬇️
|
|
67
|
+
|
|
68
|
+
In order to connect our iframe with `JetstreamPlayer` class, we need to somehow distinguish between embedded windows in our template. Since we can have **_one_** or **_many_** iframes, we **strongly recommend** to assign a separate `id` to each iframe.
|
|
69
|
+
|
|
70
|
+
For example `id="iframe1"`, `id="iframe2"`
|
|
71
|
+
|
|
72
|
+
```
|
|
73
|
+
<div style="display: block; position:relative; max-width: 100%; width: 100%;">
|
|
74
|
+
<div style="padding-top: 56.25%;">
|
|
75
|
+
<iframe
|
|
76
|
+
id="iframe1"
|
|
77
|
+
allow="autoplay; encrypted-media"
|
|
78
|
+
allowfullscreen
|
|
79
|
+
style="position:absolute; top:0; left:0; width:100%; height:100%; border-radius: 20px;"
|
|
80
|
+
src="https://dev.jstre.am/embed/jsv:fEccZ5231KM/jsp:Ov2URVCKycR"
|
|
81
|
+
></iframe>
|
|
82
|
+
</div>
|
|
83
|
+
</div>
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
Since the iframe already has the specified `id`, we can create a variable _(array of variables)_ to bind the `JetstreamPlayer` with our iframe.
|
|
87
|
+
|
|
88
|
+
```
|
|
89
|
+
let player: JetstreamPlayer | null;
|
|
90
|
+
|
|
91
|
+
player = new JetstreamPlayer('#iframe1');
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
After that, we can access the `player` variable and call the methods available in the `JetstreamPlayer` class.
|
|
95
|
+
Please note that for DOM loading purposes, we do the assignment inside the [onMounted](https://vuejs.org/api/composition-api-lifecycle.html#onmounted) lifecycle hook, along with the `initPlayerMethods` function we mentioned earlier.
|
|
96
|
+
|
|
97
|
+
```
|
|
98
|
+
setup() {
|
|
99
|
+
let player: JetstreamPlayer | null;
|
|
100
|
+
|
|
101
|
+
onMounted(() => {
|
|
102
|
+
initPlayerMethods();
|
|
103
|
+
player = new JetstreamPlayer('#iframe1');
|
|
104
|
+
})
|
|
105
|
+
|
|
106
|
+
const playVideo = () => {
|
|
107
|
+
player.play();
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
const pauseVideo = () => {
|
|
111
|
+
player.pause();
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
return {
|
|
115
|
+
playVideo,
|
|
116
|
+
pauseVideo,
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
```
|
|
120
|
+
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# What is Jetstream player API?
|
|
2
|
+
|
|
3
|
+
## Short description
|
|
4
|
+
|
|
5
|
+
**Jetstream player API** is a library that allows you to control an embedded video player from the outside of `iframe` and subscribe to events of that player. As you know, videos are embedded in a website through an `iframe` tag. As a user, you can play and stop the video by clicking a button within the iframe itself. But how about playing/stopping the video programmatically and receiving events directly from the player?
|
|
6
|
+
|
|
7
|
+
Since our embed video player is a separate service that uses the `video.js` under the hood, we cannot do this directly. Modern browsers don't allow this to be done, including due to `CORS` policy. Therefore, in this library, we use `postMessage()` methods that send directly to the player and where these methods are processed. On its side, embed player has its own methods that it also sends and that can be caught where it is used.
|
|
8
|
+
|
|
9
|
+
Thus, we can interact with player and subscribe to the events of the required video or playlist.
|
|
10
|
+
|
|
11
|
+
This library is adapted to work with [Vue.js](https://vuejs.org/) / [React](https://react.dev/) framework components. Just want to try it out? Skip to the [Quickstart](./getting-started).
|
package/docs/index.md
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
---
|
|
2
|
+
# https://github.com/deeepvision/hcc-jetstream-player
|
|
3
|
+
layout: home
|
|
4
|
+
|
|
5
|
+
hero:
|
|
6
|
+
name: "Jetstrem player API"
|
|
7
|
+
text: "Documentation of embed jetstream player"
|
|
8
|
+
tagline:
|
|
9
|
+
actions:
|
|
10
|
+
- theme: brand
|
|
11
|
+
text: Get started
|
|
12
|
+
link: /guide/index
|
|
13
|
+
- theme: alt
|
|
14
|
+
text: View on GitHub
|
|
15
|
+
link: https://github.com/deeepvision/hcc-jetstream-player
|
|
16
|
+
|
|
17
|
+
features:
|
|
18
|
+
- title: Convenience
|
|
19
|
+
details: No need to write special methods in the component. All the necessary methods are in the library
|
|
20
|
+
- title: Ease of use
|
|
21
|
+
details: All you need is to import the library
|
|
22
|
+
---
|
|
23
|
+
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
# Jetstrem player API events
|
|
2
|
+
|
|
3
|
+
## `Embed player` available events
|
|
4
|
+
|
|
5
|
+
### Next events are available in this version of the library:
|
|
6
|
+
|
|
7
|
+
- `onEnded()`
|
|
8
|
+
- `playVideo()`
|
|
9
|
+
- `pauseVideo()`
|
|
10
|
+
|
|
11
|
+
This list is not exhaustive. New events can be added as needed.
|
|
12
|
+
|
|
13
|
+
In order to use these events, it is enough to import them from library.
|
|
14
|
+
|
|
15
|
+
```
|
|
16
|
+
import { onEnded, playVideo, pauseVideo } from '@hopecloud/jetstream-player';
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
These events are `callbacks` that act as **listeners**. That is, if a certain video or video in the **playlist** ends, the event `onEnded` will fire and transmit the **index** of the embedded window. Let's consider each event separately.
|
|
20
|
+
|
|
21
|
+
## `onEnded()` event
|
|
22
|
+
|
|
23
|
+
This event is called when a video or a video in a playlist ends. For example, if your component has two iframes, the first is a video and the second is a playlist. If some video ends in the playlist, `onEnded()` event will be triggered, and we will get index `1` _(the playlist is the second iframe in our component)_.
|
|
24
|
+
|
|
25
|
+
### Example of use:
|
|
26
|
+
|
|
27
|
+
```
|
|
28
|
+
import { JetstreamPlayer, initPlayerMethods, onEnded } from '@hopecloud/jetstream-player';
|
|
29
|
+
|
|
30
|
+
setup() {
|
|
31
|
+
onMounted(() => {
|
|
32
|
+
initPlayerMethods();
|
|
33
|
+
})
|
|
34
|
+
|
|
35
|
+
onEnded((index) => {
|
|
36
|
+
console.log(`VIDEO ${index} ENDED`);
|
|
37
|
+
// Will console 'VIDEO 1 ENDED'
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## `playVideo()` event
|
|
43
|
+
|
|
44
|
+
This event is a listener that fires when any video or playlist on your page starts playing. If your page has one or more embedded iframes and a video starts playing in the first window, event will be triggered and we will get index `0`.
|
|
45
|
+
|
|
46
|
+
### Example of use:
|
|
47
|
+
|
|
48
|
+
```
|
|
49
|
+
import { initPlayerMethods, playVideo } from '@hopecloud/jetstream-player';
|
|
50
|
+
|
|
51
|
+
setup() {
|
|
52
|
+
onMounted(() => {
|
|
53
|
+
initPlayerMethods();
|
|
54
|
+
})
|
|
55
|
+
|
|
56
|
+
playVideo((index) => {
|
|
57
|
+
console.log(`VIDEO ${index} IS PLAYING`);
|
|
58
|
+
// Will console 'VIDEO 0 IS PLAYING'
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
## `pauseVideo()` event
|
|
64
|
+
|
|
65
|
+
This event is a listener that fires when any video or playlist on your page paused. If your page has one or more embedded iframes and a video paused in the second window, event will be triggered, and we will get index `1`.
|
|
66
|
+
|
|
67
|
+
### Example of use:
|
|
68
|
+
|
|
69
|
+
```
|
|
70
|
+
import { initPlayerMethods, pauseVideo } from '@hopecloud/jetstream-player';
|
|
71
|
+
|
|
72
|
+
setup() {
|
|
73
|
+
onMounted(() => {
|
|
74
|
+
initPlayerMethods();
|
|
75
|
+
})
|
|
76
|
+
|
|
77
|
+
pauseVideo((index) => {
|
|
78
|
+
console.log(`VIDEO ${index} PAUSED`);
|
|
79
|
+
// Will console 'VIDEO 1 PAUSED'
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
```
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# Jetstrem player API methods
|
|
2
|
+
|
|
3
|
+
## `JetstreamPlayer` class available methods
|
|
4
|
+
|
|
5
|
+
### Next methods are available in this version of the library:
|
|
6
|
+
|
|
7
|
+
- `play()`
|
|
8
|
+
- `pause()`
|
|
9
|
+
- `playNext()`
|
|
10
|
+
- `playPrevious()`
|
|
11
|
+
|
|
12
|
+
This list is not exhaustive. New methods can be added to the library as needed.
|
|
13
|
+
|
|
14
|
+
In order to use these methods, it is enough to import the `JetstreamPlayer` class and call them as described in the previous section.
|
|
15
|
+
|
|
16
|
+
```
|
|
17
|
+
import { JetstreamPlayer } from '@hopecloud/jetstream-player';
|
|
18
|
+
|
|
19
|
+
setup() {
|
|
20
|
+
let player: JetstreamPlayer | null;
|
|
21
|
+
|
|
22
|
+
onMounted(() => {
|
|
23
|
+
initPlayerMethods();
|
|
24
|
+
player = new JetstreamPlayer('#iframe1');
|
|
25
|
+
})
|
|
26
|
+
|
|
27
|
+
const playVideo = () => {
|
|
28
|
+
player.play();
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
const pauseVideo = () => {
|
|
32
|
+
player.pause();
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
return {
|
|
36
|
+
playVideo,
|
|
37
|
+
pauseVideo,
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## `play()` `pause()` methods
|
|
43
|
+
|
|
44
|
+
The `play` or `pause` method can be called for a video as well as for a playlist. We are able to interact with our videos or playlists programmatically in the same way as pressing pause or play within the iframe itself.
|
|
45
|
+
|
|
46
|
+
### Important ☝️⬇️
|
|
47
|
+
|
|
48
|
+
When the web page with our embedded windows is just loaded and there has been no user action _(click, play)_ and video has the `sound settings on`, the programmatic `play()` function **will not execute**!
|
|
49
|
+
|
|
50
|
+
The `play()` function will not work due to [Autoplay policy in Chrome](https://developer.chrome.com/blog/autoplay/). The same behavior occurs with services YouTube, Facebook, etc.
|
|
51
|
+
|
|
52
|
+
Modern browsers don't provide an opportunity to avoid this setting. Therefore, for the first time, an action on the user side is necessary _(click in the iframe window)_. After this action, all methods will work clearly.
|
|
53
|
+
|
|
54
|
+
If the video or playlist has **sound settings off** `(muted)`, then all methods work in normal mode.
|
|
55
|
+
|
|
56
|
+
## `playNext()` `playPrevious()` methods
|
|
57
|
+
|
|
58
|
+
The `playNext` or `playPrevious` method can be called only for a **playlist**. Calling these methods for a simple video will do nothing.
|
|
59
|
+
We are able to interact with playlist programmatically in the same way as pressing `playNext` or `playPrevious` within the playlist itself.
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
# Using multiple iframes
|
|
2
|
+
|
|
3
|
+
## Two ways to use and assign a player for an iframe.
|
|
4
|
+
|
|
5
|
+
We can embed one or more windows with our player on web page. If the iframe is one, then the use is very simple. As shown in the previous chapter, this can be done as follows
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
import { JetstreamPlayer } from '@hopecloud/jetstream-player';
|
|
9
|
+
|
|
10
|
+
setup() {
|
|
11
|
+
let player: JetstreamPlayer | null;
|
|
12
|
+
|
|
13
|
+
onMounted(() => {
|
|
14
|
+
initPlayerMethods();
|
|
15
|
+
player = new JetstreamPlayer('#iframe1');
|
|
16
|
+
})
|
|
17
|
+
|
|
18
|
+
const playVideo = () => {
|
|
19
|
+
player.play();
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
const pauseVideo = () => {
|
|
23
|
+
player.pause();
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
return {
|
|
27
|
+
playVideo,
|
|
28
|
+
pauseVideo,
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
If we have many iframes, there is no need to create a separate variable for each player.
|
|
34
|
+
#### Example of non-recommended use ⬇️
|
|
35
|
+
|
|
36
|
+
```
|
|
37
|
+
import { JetstreamPlayer } from '@hopecloud/jetstream-player';
|
|
38
|
+
|
|
39
|
+
setup() {
|
|
40
|
+
let firstPlayer: JetstreamPlayer | null;
|
|
41
|
+
let secondPlayer: JetstreamPlayer | null;
|
|
42
|
+
|
|
43
|
+
onMounted(() => {
|
|
44
|
+
initPlayerMethods();
|
|
45
|
+
firstPlayer = new JetstreamPlayer('#iframe1');
|
|
46
|
+
secondPlayer = new JetstreamPlayer('#iframe2');
|
|
47
|
+
})
|
|
48
|
+
|
|
49
|
+
const playVideo = () => {
|
|
50
|
+
firstPlayer.play();
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
const pauseVideo = () => {
|
|
54
|
+
secondPlayer.pause();
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
return {
|
|
58
|
+
playVideo,
|
|
59
|
+
pauseVideo,
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
### Recommended method
|
|
65
|
+
|
|
66
|
+
Instead, we can use a simpler method. We can grab all players into an `array`. To do this, we need to import the `embedVideosSrc` variable from the library. This variable is an array that contains all `src` of iframes from our page. This variable will help us create our array of players
|
|
67
|
+
|
|
68
|
+
```
|
|
69
|
+
import { embedVideosSrc } from '@hopecloud/jetstream-player';
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
All we need is to create an empty array `const players = [];` and push each player there.
|
|
73
|
+
|
|
74
|
+
### Example
|
|
75
|
+
|
|
76
|
+
```
|
|
77
|
+
import { JetstreamPlayer, initPlayerMethods, embedVideosSrc } from '@hopecloud/jetstream-player';
|
|
78
|
+
|
|
79
|
+
setup() {
|
|
80
|
+
const players = [];
|
|
81
|
+
|
|
82
|
+
onMounted(() => {
|
|
83
|
+
initPlayerMethods();
|
|
84
|
+
embedVideosSrc.forEach((src, index) => {
|
|
85
|
+
players.push(new JetstreamPlayer(`#iframe${index + 1}`));
|
|
86
|
+
});
|
|
87
|
+
});
|
|
88
|
+
|
|
89
|
+
const playEmbedVideo = (index) => {
|
|
90
|
+
players[index]?.play();
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
const pauseEmbedVideo = (index) => {
|
|
94
|
+
players[index]?.pause();
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
return {
|
|
98
|
+
playEmbedVideo,
|
|
99
|
+
pauseEmbedVideo,
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
Now we can `play` and `stop` a video or playlist from an array by specifying an `index`.
|
|
105
|
+
|
|
106
|
+
We used the same method in the [Stackblitz](https://stackblitz.com/edit/hcc-jetstream-player-demo?file=src%2Fcomponents%2FVideoSandbox.vue) sandbox.
|
package/package.json
CHANGED
|
@@ -1,12 +1,16 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hopecloud/jetstream-player",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.7",
|
|
4
4
|
"description": "Embeddable player for Jetstream videos",
|
|
5
5
|
"scripts": {
|
|
6
|
-
"build": "tsc"
|
|
6
|
+
"build": "tsc",
|
|
7
|
+
"docs:dev": "vitepress dev docs",
|
|
8
|
+
"docs:build": "vitepress build docs",
|
|
9
|
+
"docs:preview": "vitepress preview docs"
|
|
7
10
|
},
|
|
8
11
|
"main": "dist/index.js",
|
|
9
12
|
"devDependencies": {
|
|
10
|
-
"typescript": "^5.0.2"
|
|
13
|
+
"typescript": "^5.0.2",
|
|
14
|
+
"vitepress": "^1.0.0-alpha.65"
|
|
11
15
|
}
|
|
12
|
-
}
|
|
16
|
+
}
|