next-ws 1.2.0 → 2.0.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/README.md +100 -0
- package/dist/chunk-3RG5ZIWI.js +10 -0
- package/dist/cli.cjs +33 -0
- package/dist/client/index.cjs +64 -26
- package/dist/client/index.js +26 -17
- package/dist/server/index.cjs +157 -106
- package/dist/server/index.d.cts +2 -8
- package/dist/server/index.d.ts +2 -8
- package/dist/server/index.js +120 -78
- package/package.json +38 -15
- package/dist/chunk-PFW3KWBF.cjs +0 -14
- package/dist/chunk-PFW3KWBF.cjs.map +0 -1
- package/dist/chunk-WO25ABG2.js +0 -11
- package/dist/chunk-WO25ABG2.js.map +0 -1
- package/dist/client/index.cjs.map +0 -1
- package/dist/client/index.js.map +0 -1
- package/dist/server/index.cjs.map +0 -1
- package/dist/server/index.js.map +0 -1
- package/readme.md +0 -246
package/README.md
ADDED
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
<div align='center'>
|
|
2
|
+
<h1><strong>Next WS</strong></h1>
|
|
3
|
+
<i>Add support for WebSockets in Next.js app directory</i><br>
|
|
4
|
+
<code>npm install next-ws ws</code>
|
|
5
|
+
</div>
|
|
6
|
+
|
|
7
|
+
<div align='center'>
|
|
8
|
+
<img alt='package version' src='https://img.shields.io/npm/v/next-ws?label=version'>
|
|
9
|
+
<img alt='total downloads' src='https://img.shields.io/npm/dt/next-ws'>
|
|
10
|
+
<br>
|
|
11
|
+
<a href='https://github.com/apteryxxyz/next-ws'><img alt='next-ws repo stars' src='https://img.shields.io/github/stars/apteryxxyz/next-ws?style=social'></a>
|
|
12
|
+
<a href='https://github.com/apteryxxyz'><img alt='apteryxxyz followers' src='https://img.shields.io/github/followers/apteryxxyz?style=social'></a>
|
|
13
|
+
<a href='https://discord.gg/B2rEQ9g2vf'><img src='https://discordapp.com/api/guilds/829836158007115806/widget.png?style=shield' alt='discord shield'/></a>
|
|
14
|
+
</div>
|
|
15
|
+
|
|
16
|
+
## 🤔 About
|
|
17
|
+
|
|
18
|
+
`next-ws` is a simple package that adds WebSocket support to your Next.js app directory. With `next-ws`, you no longer need to create a separate WebSocket server to handle WebSocket connections. Instead, you can handle WebSocket connections directly in your Next.js API routes.
|
|
19
|
+
|
|
20
|
+
> [!IMPORTANT]
|
|
21
|
+
> Next WS is designed for use in server-based environments. It is not suitable for serverless platforms like Vercel, where WebSocket servers are not supported. Furthermore, this plugin is built for the app directory and does not support the older pages directory.
|
|
22
|
+
|
|
23
|
+
## 🏓 Table of Contents
|
|
24
|
+
|
|
25
|
+
- [📦 Installation](#-installation)
|
|
26
|
+
- [🚀 Usage](#-usage)
|
|
27
|
+
- [🌀 Examples](#-examples)
|
|
28
|
+
|
|
29
|
+
## 📦 Installation
|
|
30
|
+
|
|
31
|
+
To set up a WebSocket server with `next-ws`, you need to patch your local Next.js installation. `next-ws` simplifies this process by providing a CLI command that handles the patching for you. Follow these steps to get started:
|
|
32
|
+
|
|
33
|
+
1. **Install Dependencies**: Use your preferred package manager to install `next-ws` and its peer dependency `ws`:
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
npm install next-ws ws
|
|
37
|
+
pnpm add next-ws ws
|
|
38
|
+
yarn add next-ws ws
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
2. **Add Prepare Script**: Add the following `prepare` script to your `package.json`. The `prepare` script is a lifecycle script that runs automatically when you run `npm install`, ensuring that your Next.js installation is patched with `next-ws` every time you install it:
|
|
42
|
+
|
|
43
|
+
```json
|
|
44
|
+
{
|
|
45
|
+
"scripts": {
|
|
46
|
+
"prepare": "next-ws patch"
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
## 🚀 Usage
|
|
52
|
+
|
|
53
|
+
Using WebSocket connections in your Next.js app directory is simple with `next-ws`. You can handle WebSocket connections directly in your API routes via exported `SOCKET` functions. Here's an example of a simple WebSocket echo server:
|
|
54
|
+
|
|
55
|
+
```js
|
|
56
|
+
export function SOCKET(
|
|
57
|
+
client: import('ws').WebSocket,
|
|
58
|
+
request: import('http').IncomingMessage,
|
|
59
|
+
server: import('ws').WebSocketServer,
|
|
60
|
+
context: { params: Record<string, string | string[]> },
|
|
61
|
+
) {
|
|
62
|
+
// ...
|
|
63
|
+
}
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
## 🌀 Examples
|
|
67
|
+
|
|
68
|
+
> [!TIP]
|
|
69
|
+
> For more detailed examples, refer the [`examples` directory](https://github.com/apteryxxyz/next-ws/tree/main/examples).
|
|
70
|
+
|
|
71
|
+
### Echo Server
|
|
72
|
+
|
|
73
|
+
This example demonstrates a simple WebSocket echo server that sends back any message it receives. Create a new API route file anywhere in your app directory and export a `SOCKET` function to handle WebSocket connections:
|
|
74
|
+
|
|
75
|
+
```ts
|
|
76
|
+
// app/api/ws/route.ts (can be any route file in the app directory)
|
|
77
|
+
|
|
78
|
+
export function SOCKET(
|
|
79
|
+
client: import("ws").WebSocket,
|
|
80
|
+
request: import("http").IncomingMessage,
|
|
81
|
+
server: import("ws").WebSocketServer
|
|
82
|
+
) {
|
|
83
|
+
console.log("A client connected");
|
|
84
|
+
|
|
85
|
+
client.on("message", (message) => {
|
|
86
|
+
console.log("Received message:", message);
|
|
87
|
+
client.send(message);
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
client.on("close", () => {
|
|
91
|
+
console.log("A client disconnected");
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
You can now connect to your WebSocket server, send it a message and receive the same message back.
|
|
97
|
+
|
|
98
|
+
### Chat Room
|
|
99
|
+
|
|
100
|
+
See the [chat room example](https://github.com/apteryxxyz/next-ws/tree/main/examples/chat-room).
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
|
|
2
|
+
get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
|
|
3
|
+
}) : x)(function(x) {
|
|
4
|
+
if (typeof require !== "undefined") return require.apply(this, arguments);
|
|
5
|
+
throw Error('Dynamic require of "' + x + '" is not supported');
|
|
6
|
+
});
|
|
7
|
+
|
|
8
|
+
export {
|
|
9
|
+
__require
|
|
10
|
+
};
|
package/dist/cli.cjs
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";var wr=Object.create;var Ke=Object.defineProperty;var vr=Object.getOwnPropertyDescriptor;var Ar=Object.getOwnPropertyNames;var Sr=Object.getPrototypeOf,Lr=Object.prototype.hasOwnProperty;var x=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports);var Cr=(r,e,t,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of Ar(e))!Lr.call(r,n)&&n!==t&&Ke(r,n,{get:()=>e[n],enumerable:!(s=vr(e,n))||s.enumerable});return r};var S=(r,e,t)=>(t=r!=null?wr(Sr(r)):{},Cr(e||!r||!r.__esModule?Ke(t,"default",{value:r,enumerable:!0}):t,r));var et=x((bn,Qe)=>{"use strict";function yr(r,e){var t=r;e.slice(0,-1).forEach(function(n){t=t[n]||{}});var s=e[e.length-1];return s in t}function Ze(r){return typeof r=="number"||/^0x[0-9a-f]+$/i.test(r)?!0:/^[-+]?(?:\d+(?:\.\d*)?|\.\d+)(e[-+]?\d+)?$/.test(r)}function Je(r,e){return e==="constructor"&&typeof r[e]=="function"||e==="__proto__"}Qe.exports=function(r,e){e||(e={});var t={bools:{},strings:{},unknownFn:null};typeof e.unknown=="function"&&(t.unknownFn=e.unknown),typeof e.boolean=="boolean"&&e.boolean?t.allBools=!0:[].concat(e.boolean).filter(Boolean).forEach(function(d){t.bools[d]=!0});var s={};function n(d){return s[d].some(function(I){return t.bools[I]})}Object.keys(e.alias||{}).forEach(function(d){s[d]=[].concat(e.alias[d]),s[d].forEach(function(I){s[I]=[d].concat(s[d].filter(function(F){return I!==F}))})}),[].concat(e.string).filter(Boolean).forEach(function(d){t.strings[d]=!0,s[d]&&[].concat(s[d]).forEach(function(I){t.strings[I]=!0})});var o=e.default||{},i={_:[]};function l(d,I){return t.allBools&&/^--[^=]+$/.test(I)||t.strings[d]||t.bools[d]||s[d]}function u(d,I,F){for(var $=d,z=0;z<I.length-1;z++){var P=I[z];if(Je($,P))return;$[P]===void 0&&($[P]={}),($[P]===Object.prototype||$[P]===Number.prototype||$[P]===String.prototype)&&($[P]={}),$[P]===Array.prototype&&($[P]=[]),$=$[P]}var G=I[I.length-1];Je($,G)||(($===Object.prototype||$===Number.prototype||$===String.prototype)&&($={}),$===Array.prototype&&($=[]),$[G]===void 0||t.bools[G]||typeof $[G]=="boolean"?$[G]=F:Array.isArray($[G])?$[G].push(F):$[G]=[$[G],F])}function m(d,I,F){if(!(F&&t.unknownFn&&!l(d,F)&&t.unknownFn(F)===!1)){var $=!t.strings[d]&&Ze(I)?Number(I):I;u(i,d.split("."),$),(s[d]||[]).forEach(function(z){u(i,z.split("."),$)})}}Object.keys(t.bools).forEach(function(d){m(d,o[d]===void 0?!1:o[d])});var g=[];r.indexOf("--")!==-1&&(g=r.slice(r.indexOf("--")+1),r=r.slice(0,r.indexOf("--")));for(var p=0;p<r.length;p++){var f=r[p],E,A;if(/^--.+=/.test(f)){var ze=f.match(/^--([^=]+)=([\s\S]*)$/);E=ze[1];var xe=ze[2];t.bools[E]&&(xe=xe!=="false"),m(E,xe,f)}else if(/^--no-.+/.test(f))E=f.match(/^--no-(.+)/)[1],m(E,!1,f);else if(/^--.+/.test(f))E=f.match(/^--(.+)/)[1],A=r[p+1],A!==void 0&&!/^(-|--)[^-]/.test(A)&&!t.bools[E]&&!t.allBools&&(!s[E]||!n(E))?(m(E,A,f),p+=1):/^(true|false)$/.test(A)?(m(E,A==="true",f),p+=1):m(E,t.strings[E]?"":!0,f);else if(/^-[^-]+/.test(f)){for(var C=f.slice(1,-1).split(""),ne=!1,w=0;w<C.length;w++){if(A=f.slice(w+2),A==="-"){m(C[w],A,f);continue}if(/[A-Za-z]/.test(C[w])&&A[0]==="="){m(C[w],A.slice(1),f),ne=!0;break}if(/[A-Za-z]/.test(C[w])&&/-?\d+(\.\d*)?(e-?\d+)?$/.test(A)){m(C[w],A,f),ne=!0;break}if(C[w+1]&&C[w+1].match(/\W/)){m(C[w],f.slice(w+2),f),ne=!0;break}else m(C[w],t.strings[C[w]]?"":!0,f)}E=f.slice(-1)[0],!ne&&E!=="-"&&(r[p+1]&&!/^(-|--)[^-]/.test(r[p+1])&&!t.bools[E]&&(!s[E]||!n(E))?(m(E,r[p+1],f),p+=1):r[p+1]&&/^(true|false)$/.test(r[p+1])?(m(E,r[p+1]==="true",f),p+=1):m(E,t.strings[E]?"":!0,f))}else if((!t.unknownFn||t.unknownFn(f)!==!1)&&i._.push(t.strings._||!Ze(f)?f:Number(f)),e.stopEarly){i._.push.apply(i._,r.slice(p+1));break}}return Object.keys(o).forEach(function(d){yr(i,d.split("."))||(u(i,d.split("."),o[d]),(s[d]||[]).forEach(function(I){u(i,I.split("."),o[d])}))}),e["--"]?i["--"]=g.slice():g.forEach(function(d){i._.push(d)}),i}});var vt=x((Jn,wt)=>{"use strict";var Se=class{constructor(){this.max=1e3,this.map=new Map}get(e){let t=this.map.get(e);if(t!==void 0)return this.map.delete(e),this.map.set(e,t),t}delete(e){return this.map.delete(e)}set(e,t){if(!this.delete(e)&&t!==void 0){if(this.map.size>=this.max){let n=this.map.keys().next().value;this.delete(n)}this.map.set(e,t)}return this}};wt.exports=Se});var he=x((Qn,At)=>{"use strict";var es=Object.freeze({loose:!0}),ts=Object.freeze({}),rs=r=>r?typeof r!="object"?es:r:ts;At.exports=rs});var me=x((eo,St)=>{"use strict";var ss="2.0.0",ns=Number.MAX_SAFE_INTEGER||9007199254740991,os=16,is=250,as=["major","premajor","minor","preminor","patch","prepatch","prerelease"];St.exports={MAX_LENGTH:256,MAX_SAFE_COMPONENT_LENGTH:os,MAX_SAFE_BUILD_LENGTH:is,MAX_SAFE_INTEGER:ns,RELEASE_TYPES:as,SEMVER_SPEC_VERSION:ss,FLAG_INCLUDE_PRERELEASE:1,FLAG_LOOSE:2}});var te=x((to,Lt)=>{"use strict";var cs=typeof process=="object"&&process.env&&process.env.NODE_DEBUG&&/\bsemver\b/i.test(process.env.NODE_DEBUG)?(...r)=>console.error("SEMVER",...r):()=>{};Lt.exports=cs});var de=x((D,Ct)=>{"use strict";var{MAX_SAFE_COMPONENT_LENGTH:Le,MAX_SAFE_BUILD_LENGTH:ls,MAX_LENGTH:us}=me(),fs=te();D=Ct.exports={};var ps=D.re=[],hs=D.safeRe=[],a=D.src=[],ms=D.safeSrc=[],c=D.t={},ds=0,Ce="[a-zA-Z0-9-]",Es=[["\\s",1],["\\d",us],[Ce,ls]],$s=r=>{for(let[e,t]of Es)r=r.split(`${e}*`).join(`${e}{0,${t}}`).split(`${e}+`).join(`${e}{1,${t}}`);return r},h=(r,e,t)=>{let s=$s(e),n=ds++;fs(r,n,e),c[r]=n,a[n]=e,ms[n]=s,ps[n]=new RegExp(e,t?"g":void 0),hs[n]=new RegExp(s,t?"g":void 0)};h("NUMERICIDENTIFIER","0|[1-9]\\d*");h("NUMERICIDENTIFIERLOOSE","\\d+");h("NONNUMERICIDENTIFIER",`\\d*[a-zA-Z-]${Ce}*`);h("MAINVERSION",`(${a[c.NUMERICIDENTIFIER]})\\.(${a[c.NUMERICIDENTIFIER]})\\.(${a[c.NUMERICIDENTIFIER]})`);h("MAINVERSIONLOOSE",`(${a[c.NUMERICIDENTIFIERLOOSE]})\\.(${a[c.NUMERICIDENTIFIERLOOSE]})\\.(${a[c.NUMERICIDENTIFIERLOOSE]})`);h("PRERELEASEIDENTIFIER",`(?:${a[c.NUMERICIDENTIFIER]}|${a[c.NONNUMERICIDENTIFIER]})`);h("PRERELEASEIDENTIFIERLOOSE",`(?:${a[c.NUMERICIDENTIFIERLOOSE]}|${a[c.NONNUMERICIDENTIFIER]})`);h("PRERELEASE",`(?:-(${a[c.PRERELEASEIDENTIFIER]}(?:\\.${a[c.PRERELEASEIDENTIFIER]})*))`);h("PRERELEASELOOSE",`(?:-?(${a[c.PRERELEASEIDENTIFIERLOOSE]}(?:\\.${a[c.PRERELEASEIDENTIFIERLOOSE]})*))`);h("BUILDIDENTIFIER",`${Ce}+`);h("BUILD",`(?:\\+(${a[c.BUILDIDENTIFIER]}(?:\\.${a[c.BUILDIDENTIFIER]})*))`);h("FULLPLAIN",`v?${a[c.MAINVERSION]}${a[c.PRERELEASE]}?${a[c.BUILD]}?`);h("FULL",`^${a[c.FULLPLAIN]}$`);h("LOOSEPLAIN",`[v=\\s]*${a[c.MAINVERSIONLOOSE]}${a[c.PRERELEASELOOSE]}?${a[c.BUILD]}?`);h("LOOSE",`^${a[c.LOOSEPLAIN]}$`);h("GTLT","((?:<|>)?=?)");h("XRANGEIDENTIFIERLOOSE",`${a[c.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`);h("XRANGEIDENTIFIER",`${a[c.NUMERICIDENTIFIER]}|x|X|\\*`);h("XRANGEPLAIN",`[v=\\s]*(${a[c.XRANGEIDENTIFIER]})(?:\\.(${a[c.XRANGEIDENTIFIER]})(?:\\.(${a[c.XRANGEIDENTIFIER]})(?:${a[c.PRERELEASE]})?${a[c.BUILD]}?)?)?`);h("XRANGEPLAINLOOSE",`[v=\\s]*(${a[c.XRANGEIDENTIFIERLOOSE]})(?:\\.(${a[c.XRANGEIDENTIFIERLOOSE]})(?:\\.(${a[c.XRANGEIDENTIFIERLOOSE]})(?:${a[c.PRERELEASELOOSE]})?${a[c.BUILD]}?)?)?`);h("XRANGE",`^${a[c.GTLT]}\\s*${a[c.XRANGEPLAIN]}$`);h("XRANGELOOSE",`^${a[c.GTLT]}\\s*${a[c.XRANGEPLAINLOOSE]}$`);h("COERCEPLAIN",`(^|[^\\d])(\\d{1,${Le}})(?:\\.(\\d{1,${Le}}))?(?:\\.(\\d{1,${Le}}))?`);h("COERCE",`${a[c.COERCEPLAIN]}(?:$|[^\\d])`);h("COERCEFULL",a[c.COERCEPLAIN]+`(?:${a[c.PRERELEASE]})?(?:${a[c.BUILD]})?(?:$|[^\\d])`);h("COERCERTL",a[c.COERCE],!0);h("COERCERTLFULL",a[c.COERCEFULL],!0);h("LONETILDE","(?:~>?)");h("TILDETRIM",`(\\s*)${a[c.LONETILDE]}\\s+`,!0);D.tildeTrimReplace="$1~";h("TILDE",`^${a[c.LONETILDE]}${a[c.XRANGEPLAIN]}$`);h("TILDELOOSE",`^${a[c.LONETILDE]}${a[c.XRANGEPLAINLOOSE]}$`);h("LONECARET","(?:\\^)");h("CARETTRIM",`(\\s*)${a[c.LONECARET]}\\s+`,!0);D.caretTrimReplace="$1^";h("CARET",`^${a[c.LONECARET]}${a[c.XRANGEPLAIN]}$`);h("CARETLOOSE",`^${a[c.LONECARET]}${a[c.XRANGEPLAINLOOSE]}$`);h("COMPARATORLOOSE",`^${a[c.GTLT]}\\s*(${a[c.LOOSEPLAIN]})$|^$`);h("COMPARATOR",`^${a[c.GTLT]}\\s*(${a[c.FULLPLAIN]})$|^$`);h("COMPARATORTRIM",`(\\s*)${a[c.GTLT]}\\s*(${a[c.LOOSEPLAIN]}|${a[c.XRANGEPLAIN]})`,!0);D.comparatorTrimReplace="$1$2$3";h("HYPHENRANGE",`^\\s*(${a[c.XRANGEPLAIN]})\\s+-\\s+(${a[c.XRANGEPLAIN]})\\s*$`);h("HYPHENRANGELOOSE",`^\\s*(${a[c.XRANGEPLAINLOOSE]})\\s+-\\s+(${a[c.XRANGEPLAINLOOSE]})\\s*$`);h("STAR","(<|>)?=?\\s*\\*");h("GTE0","^\\s*>=\\s*0\\.0\\.0\\s*$");h("GTE0PRE","^\\s*>=\\s*0\\.0\\.0-0\\s*$")});var Ft=x((ro,Dt)=>{"use strict";var yt=/^[0-9]+$/,Pt=(r,e)=>{let t=yt.test(r),s=yt.test(e);return t&&s&&(r=+r,e=+e),r===e?0:t&&!s?-1:s&&!t?1:r<e?-1:1},Rs=(r,e)=>Pt(e,r);Dt.exports={compareIdentifiers:Pt,rcompareIdentifiers:Rs}});var M=x((so,_t)=>{"use strict";var Ee=te(),{MAX_LENGTH:Gt,MAX_SAFE_INTEGER:$e}=me(),{safeRe:jt,safeSrc:qt,t:Re}=de(),Os=he(),{compareIdentifiers:Y}=Ft(),ye=class r{constructor(e,t){if(t=Os(t),e instanceof r){if(e.loose===!!t.loose&&e.includePrerelease===!!t.includePrerelease)return e;e=e.version}else if(typeof e!="string")throw new TypeError(`Invalid version. Must be a string. Got type "${typeof e}".`);if(e.length>Gt)throw new TypeError(`version is longer than ${Gt} characters`);Ee("SemVer",e,t),this.options=t,this.loose=!!t.loose,this.includePrerelease=!!t.includePrerelease;let s=e.trim().match(t.loose?jt[Re.LOOSE]:jt[Re.FULL]);if(!s)throw new TypeError(`Invalid Version: ${e}`);if(this.raw=e,this.major=+s[1],this.minor=+s[2],this.patch=+s[3],this.major>$e||this.major<0)throw new TypeError("Invalid major version");if(this.minor>$e||this.minor<0)throw new TypeError("Invalid minor version");if(this.patch>$e||this.patch<0)throw new TypeError("Invalid patch version");s[4]?this.prerelease=s[4].split(".").map(n=>{if(/^[0-9]+$/.test(n)){let o=+n;if(o>=0&&o<$e)return o}return n}):this.prerelease=[],this.build=s[5]?s[5].split("."):[],this.format()}format(){return this.version=`${this.major}.${this.minor}.${this.patch}`,this.prerelease.length&&(this.version+=`-${this.prerelease.join(".")}`),this.version}toString(){return this.version}compare(e){if(Ee("SemVer.compare",this.version,this.options,e),!(e instanceof r)){if(typeof e=="string"&&e===this.version)return 0;e=new r(e,this.options)}return e.version===this.version?0:this.compareMain(e)||this.comparePre(e)}compareMain(e){return e instanceof r||(e=new r(e,this.options)),Y(this.major,e.major)||Y(this.minor,e.minor)||Y(this.patch,e.patch)}comparePre(e){if(e instanceof r||(e=new r(e,this.options)),this.prerelease.length&&!e.prerelease.length)return-1;if(!this.prerelease.length&&e.prerelease.length)return 1;if(!this.prerelease.length&&!e.prerelease.length)return 0;let t=0;do{let s=this.prerelease[t],n=e.prerelease[t];if(Ee("prerelease compare",t,s,n),s===void 0&&n===void 0)return 0;if(n===void 0)return 1;if(s===void 0)return-1;if(s===n)continue;return Y(s,n)}while(++t)}compareBuild(e){e instanceof r||(e=new r(e,this.options));let t=0;do{let s=this.build[t],n=e.build[t];if(Ee("build compare",t,s,n),s===void 0&&n===void 0)return 0;if(n===void 0)return 1;if(s===void 0)return-1;if(s===n)continue;return Y(s,n)}while(++t)}inc(e,t,s){if(e.startsWith("pre")){if(!t&&s===!1)throw new Error("invalid increment argument: identifier is empty");if(t){let n=new RegExp(`^${this.options.loose?qt[Re.PRERELEASELOOSE]:qt[Re.PRERELEASE]}$`),o=`-${t}`.match(n);if(!o||o[1]!==t)throw new Error(`invalid identifier: ${t}`)}}switch(e){case"premajor":this.prerelease.length=0,this.patch=0,this.minor=0,this.major++,this.inc("pre",t,s);break;case"preminor":this.prerelease.length=0,this.patch=0,this.minor++,this.inc("pre",t,s);break;case"prepatch":this.prerelease.length=0,this.inc("patch",t,s),this.inc("pre",t,s);break;case"prerelease":this.prerelease.length===0&&this.inc("patch",t,s),this.inc("pre",t,s);break;case"release":if(this.prerelease.length===0)throw new Error(`version ${this.raw} is not a prerelease`);this.prerelease.length=0;break;case"major":(this.minor!==0||this.patch!==0||this.prerelease.length===0)&&this.major++,this.minor=0,this.patch=0,this.prerelease=[];break;case"minor":(this.patch!==0||this.prerelease.length===0)&&this.minor++,this.patch=0,this.prerelease=[];break;case"patch":this.prerelease.length===0&&this.patch++,this.prerelease=[];break;case"pre":{let n=Number(s)?1:0;if(this.prerelease.length===0)this.prerelease=[n];else{let o=this.prerelease.length;for(;--o>=0;)typeof this.prerelease[o]=="number"&&(this.prerelease[o]++,o=-2);if(o===-1){if(t===this.prerelease.join(".")&&s===!1)throw new Error("invalid increment argument: identifier already exists");this.prerelease.push(n)}}if(t){let o=[t,n];s===!1&&(o=[t]),Y(this.prerelease[0],t)===0?isNaN(this.prerelease[1])&&(this.prerelease=o):this.prerelease=o}break}default:throw new Error(`invalid increment argument: ${e}`)}return this.raw=this.format(),this.build.length&&(this.raw+=`+${this.build.join(".")}`),this}};_t.exports=ye});var X=x((no,Ut)=>{"use strict";var Bt=M(),xs=(r,e,t)=>new Bt(r,t).compare(new Bt(e,t));Ut.exports=xs});var Xt=x((oo,Mt)=>{"use strict";var Ns=X(),gs=(r,e,t)=>Ns(r,e,t)===0;Mt.exports=gs});var Vt=x((io,kt)=>{"use strict";var Is=X(),Ts=(r,e,t)=>Is(r,e,t)!==0;kt.exports=Ts});var re=x((ao,Wt)=>{"use strict";var bs=X(),ws=(r,e,t)=>bs(r,e,t)>0;Wt.exports=ws});var Pe=x((co,Yt)=>{"use strict";var vs=X(),As=(r,e,t)=>vs(r,e,t)>=0;Yt.exports=As});var De=x((lo,Ht)=>{"use strict";var Ss=X(),Ls=(r,e,t)=>Ss(r,e,t)<0;Ht.exports=Ls});var Fe=x((uo,zt)=>{"use strict";var Cs=X(),ys=(r,e,t)=>Cs(r,e,t)<=0;zt.exports=ys});var Zt=x((fo,Kt)=>{"use strict";var Ps=Xt(),Ds=Vt(),Fs=re(),Gs=Pe(),js=De(),qs=Fe(),_s=(r,e,t,s)=>{switch(e){case"===":return typeof r=="object"&&(r=r.version),typeof t=="object"&&(t=t.version),r===t;case"!==":return typeof r=="object"&&(r=r.version),typeof t=="object"&&(t=t.version),r!==t;case"":case"=":case"==":return Ps(r,t,s);case"!=":return Ds(r,t,s);case">":return Fs(r,t,s);case">=":return Gs(r,t,s);case"<":return js(r,t,s);case"<=":return qs(r,t,s);default:throw new TypeError(`Invalid operator: ${e}`)}};Kt.exports=_s});var _e=x((po,sr)=>{"use strict";var se=Symbol("SemVer ANY"),qe=class r{static get ANY(){return se}constructor(e,t){if(t=Jt(t),e instanceof r){if(e.loose===!!t.loose)return e;e=e.value}e=e.trim().split(/\s+/).join(" "),je("comparator",e,t),this.options=t,this.loose=!!t.loose,this.parse(e),this.semver===se?this.value="":this.value=this.operator+this.semver.version,je("comp",this)}parse(e){let t=this.options.loose?Qt[er.COMPARATORLOOSE]:Qt[er.COMPARATOR],s=e.match(t);if(!s)throw new TypeError(`Invalid comparator: ${e}`);this.operator=s[1]!==void 0?s[1]:"",this.operator==="="&&(this.operator=""),s[2]?this.semver=new tr(s[2],this.options.loose):this.semver=se}toString(){return this.value}test(e){if(je("Comparator.test",e,this.options.loose),this.semver===se||e===se)return!0;if(typeof e=="string")try{e=new tr(e,this.options)}catch{return!1}return Ge(e,this.operator,this.semver,this.options)}intersects(e,t){if(!(e instanceof r))throw new TypeError("a Comparator is required");return this.operator===""?this.value===""?!0:new rr(e.value,t).test(this.value):e.operator===""?e.value===""?!0:new rr(this.value,t).test(e.semver):(t=Jt(t),t.includePrerelease&&(this.value==="<0.0.0-0"||e.value==="<0.0.0-0")||!t.includePrerelease&&(this.value.startsWith("<0.0.0")||e.value.startsWith("<0.0.0"))?!1:!!(this.operator.startsWith(">")&&e.operator.startsWith(">")||this.operator.startsWith("<")&&e.operator.startsWith("<")||this.semver.version===e.semver.version&&this.operator.includes("=")&&e.operator.includes("=")||Ge(this.semver,"<",e.semver,t)&&this.operator.startsWith(">")&&e.operator.startsWith("<")||Ge(this.semver,">",e.semver,t)&&this.operator.startsWith("<")&&e.operator.startsWith(">")))}};sr.exports=qe;var Jt=he(),{safeRe:Qt,t:er}=de(),Ge=Zt(),je=te(),tr=M(),rr=H()});var H=x((ho,ar)=>{"use strict";var Bs=/\s+/g,Be=class r{constructor(e,t){if(t=Ms(t),e instanceof r)return e.loose===!!t.loose&&e.includePrerelease===!!t.includePrerelease?e:new r(e.raw,t);if(e instanceof Ue)return this.raw=e.value,this.set=[[e]],this.formatted=void 0,this;if(this.options=t,this.loose=!!t.loose,this.includePrerelease=!!t.includePrerelease,this.raw=e.trim().replace(Bs," "),this.set=this.raw.split("||").map(s=>this.parseRange(s.trim())).filter(s=>s.length),!this.set.length)throw new TypeError(`Invalid SemVer Range: ${this.raw}`);if(this.set.length>1){let s=this.set[0];if(this.set=this.set.filter(n=>!or(n[0])),this.set.length===0)this.set=[s];else if(this.set.length>1){for(let n of this.set)if(n.length===1&&zs(n[0])){this.set=[n];break}}}this.formatted=void 0}get range(){if(this.formatted===void 0){this.formatted="";for(let e=0;e<this.set.length;e++){e>0&&(this.formatted+="||");let t=this.set[e];for(let s=0;s<t.length;s++)s>0&&(this.formatted+=" "),this.formatted+=t[s].toString().trim()}}return this.formatted}format(){return this.range}toString(){return this.range}parseRange(e){let s=((this.options.includePrerelease&&Ys)|(this.options.loose&&Hs))+":"+e,n=nr.get(s);if(n)return n;let o=this.options.loose,i=o?v[T.HYPHENRANGELOOSE]:v[T.HYPHENRANGE];e=e.replace(i,on(this.options.includePrerelease)),R("hyphen replace",e),e=e.replace(v[T.COMPARATORTRIM],ks),R("comparator trim",e),e=e.replace(v[T.TILDETRIM],Vs),R("tilde trim",e),e=e.replace(v[T.CARETTRIM],Ws),R("caret trim",e);let l=e.split(" ").map(p=>Ks(p,this.options)).join(" ").split(/\s+/).map(p=>nn(p,this.options));o&&(l=l.filter(p=>(R("loose invalid filter",p,this.options),!!p.match(v[T.COMPARATORLOOSE])))),R("range list",l);let u=new Map,m=l.map(p=>new Ue(p,this.options));for(let p of m){if(or(p))return[p];u.set(p.value,p)}u.size>1&&u.has("")&&u.delete("");let g=[...u.values()];return nr.set(s,g),g}intersects(e,t){if(!(e instanceof r))throw new TypeError("a Range is required");return this.set.some(s=>ir(s,t)&&e.set.some(n=>ir(n,t)&&s.every(o=>n.every(i=>o.intersects(i,t)))))}test(e){if(!e)return!1;if(typeof e=="string")try{e=new Xs(e,this.options)}catch{return!1}for(let t=0;t<this.set.length;t++)if(an(this.set[t],e,this.options))return!0;return!1}};ar.exports=Be;var Us=vt(),nr=new Us,Ms=he(),Ue=_e(),R=te(),Xs=M(),{safeRe:v,t:T,comparatorTrimReplace:ks,tildeTrimReplace:Vs,caretTrimReplace:Ws}=de(),{FLAG_INCLUDE_PRERELEASE:Ys,FLAG_LOOSE:Hs}=me(),or=r=>r.value==="<0.0.0-0",zs=r=>r.value==="",ir=(r,e)=>{let t=!0,s=r.slice(),n=s.pop();for(;t&&s.length;)t=s.every(o=>n.intersects(o,e)),n=s.pop();return t},Ks=(r,e)=>(R("comp",r,e),r=Qs(r,e),R("caret",r),r=Zs(r,e),R("tildes",r),r=tn(r,e),R("xrange",r),r=sn(r,e),R("stars",r),r),b=r=>!r||r.toLowerCase()==="x"||r==="*",Zs=(r,e)=>r.trim().split(/\s+/).map(t=>Js(t,e)).join(" "),Js=(r,e)=>{let t=e.loose?v[T.TILDELOOSE]:v[T.TILDE];return r.replace(t,(s,n,o,i,l)=>{R("tilde",r,s,n,o,i,l);let u;return b(n)?u="":b(o)?u=`>=${n}.0.0 <${+n+1}.0.0-0`:b(i)?u=`>=${n}.${o}.0 <${n}.${+o+1}.0-0`:l?(R("replaceTilde pr",l),u=`>=${n}.${o}.${i}-${l} <${n}.${+o+1}.0-0`):u=`>=${n}.${o}.${i} <${n}.${+o+1}.0-0`,R("tilde return",u),u})},Qs=(r,e)=>r.trim().split(/\s+/).map(t=>en(t,e)).join(" "),en=(r,e)=>{R("caret",r,e);let t=e.loose?v[T.CARETLOOSE]:v[T.CARET],s=e.includePrerelease?"-0":"";return r.replace(t,(n,o,i,l,u)=>{R("caret",r,n,o,i,l,u);let m;return b(o)?m="":b(i)?m=`>=${o}.0.0${s} <${+o+1}.0.0-0`:b(l)?o==="0"?m=`>=${o}.${i}.0${s} <${o}.${+i+1}.0-0`:m=`>=${o}.${i}.0${s} <${+o+1}.0.0-0`:u?(R("replaceCaret pr",u),o==="0"?i==="0"?m=`>=${o}.${i}.${l}-${u} <${o}.${i}.${+l+1}-0`:m=`>=${o}.${i}.${l}-${u} <${o}.${+i+1}.0-0`:m=`>=${o}.${i}.${l}-${u} <${+o+1}.0.0-0`):(R("no pr"),o==="0"?i==="0"?m=`>=${o}.${i}.${l}${s} <${o}.${i}.${+l+1}-0`:m=`>=${o}.${i}.${l}${s} <${o}.${+i+1}.0-0`:m=`>=${o}.${i}.${l} <${+o+1}.0.0-0`),R("caret return",m),m})},tn=(r,e)=>(R("replaceXRanges",r,e),r.split(/\s+/).map(t=>rn(t,e)).join(" ")),rn=(r,e)=>{r=r.trim();let t=e.loose?v[T.XRANGELOOSE]:v[T.XRANGE];return r.replace(t,(s,n,o,i,l,u)=>{R("xRange",r,s,n,o,i,l,u);let m=b(o),g=m||b(i),p=g||b(l),f=p;return n==="="&&f&&(n=""),u=e.includePrerelease?"-0":"",m?n===">"||n==="<"?s="<0.0.0-0":s="*":n&&f?(g&&(i=0),l=0,n===">"?(n=">=",g?(o=+o+1,i=0,l=0):(i=+i+1,l=0)):n==="<="&&(n="<",g?o=+o+1:i=+i+1),n==="<"&&(u="-0"),s=`${n+o}.${i}.${l}${u}`):g?s=`>=${o}.0.0${u} <${+o+1}.0.0-0`:p&&(s=`>=${o}.${i}.0${u} <${o}.${+i+1}.0-0`),R("xRange return",s),s})},sn=(r,e)=>(R("replaceStars",r,e),r.trim().replace(v[T.STAR],"")),nn=(r,e)=>(R("replaceGTE0",r,e),r.trim().replace(v[e.includePrerelease?T.GTE0PRE:T.GTE0],"")),on=r=>(e,t,s,n,o,i,l,u,m,g,p,f)=>(b(s)?t="":b(n)?t=`>=${s}.0.0${r?"-0":""}`:b(o)?t=`>=${s}.${n}.0${r?"-0":""}`:i?t=`>=${t}`:t=`>=${t}${r?"-0":""}`,b(m)?u="":b(g)?u=`<${+m+1}.0.0-0`:b(p)?u=`<${m}.${+g+1}.0-0`:f?u=`<=${m}.${g}.${p}-${f}`:r?u=`<${m}.${g}.${+p+1}-0`:u=`<=${u}`,`${t} ${u}`.trim()),an=(r,e,t)=>{for(let s=0;s<r.length;s++)if(!r[s].test(e))return!1;if(e.prerelease.length&&!t.includePrerelease){for(let s=0;s<r.length;s++)if(R(r[s].semver),r[s].semver!==Ue.ANY&&r[s].semver.prerelease.length>0){let n=r[s].semver;if(n.major===e.major&&n.minor===e.minor&&n.patch===e.patch)return!0}return!1}return!0}});var ur=x((mo,lr)=>{"use strict";var Me=M(),cn=H(),cr=re(),ln=(r,e)=>{r=new cn(r,e);let t=new Me("0.0.0");if(r.test(t)||(t=new Me("0.0.0-0"),r.test(t)))return t;t=null;for(let s=0;s<r.set.length;++s){let n=r.set[s],o=null;n.forEach(i=>{let l=new Me(i.semver.version);switch(i.operator){case">":l.prerelease.length===0?l.patch++:l.prerelease.push(0),l.raw=l.format();case"":case">=":(!o||cr(l,o))&&(o=l);break;case"<":case"<=":break;default:throw new Error(`Unexpected operation: ${i.operator}`)}}),o&&(!t||cr(t,o))&&(t=o)}return t&&r.test(t)?t:null};lr.exports=ln});var Xe=x((Eo,fr)=>{"use strict";var un=H(),fn=(r,e,t)=>{try{e=new un(e,t)}catch{return!1}return e.test(r)};fr.exports=fn});var ke=x(($o,dr)=>{"use strict";var pn=M(),mr=_e(),{ANY:hn}=mr,mn=H(),dn=Xe(),pr=re(),hr=De(),En=Fe(),$n=Pe(),Rn=(r,e,t,s)=>{r=new pn(r,s),e=new mn(e,s);let n,o,i,l,u;switch(t){case">":n=pr,o=En,i=hr,l=">",u=">=";break;case"<":n=hr,o=$n,i=pr,l="<",u="<=";break;default:throw new TypeError('Must provide a hilo val of "<" or ">"')}if(dn(r,e,s))return!1;for(let m=0;m<e.set.length;++m){let g=e.set[m],p=null,f=null;if(g.forEach(E=>{E.semver===hn&&(E=new mr(">=0.0.0")),p=p||E,f=f||E,n(E.semver,p.semver,s)?p=E:i(E.semver,f.semver,s)&&(f=E)}),p.operator===l||p.operator===u||(!f.operator||f.operator===l)&&o(r,f.semver))return!1;if(f.operator===u&&i(r,f.semver))return!1}return!0};dr.exports=Rn});var $r=x((Ro,Er)=>{"use strict";var On=ke(),xn=(r,e,t)=>On(r,e,"<",t);Er.exports=xn});var Or=x((Oo,Rr)=>{"use strict";var Nn=ke(),gn=(r,e,t)=>Nn(r,e,">",t);Rr.exports=gn});var Ne=S(et(),1);var tt="2.0.1";function st(r){return{...r,parse(e,t){let s=(0,Ne.default)(t);for(let n of this.children)if(s._[0]===n.name)return void n.parse(e.concat(this),t.slice(1));return s.help?void console.log(rt(e,this)):s.v||s.version?void console.log(tt):void console.log(rt(e,this))}}}function rt(r,e){return`Usage: ${[...r,e].map(t=>t.name).join(" ")} [command] [options]
|
|
3
|
+
|
|
4
|
+
${e.description}
|
|
5
|
+
|
|
6
|
+
Commands:
|
|
7
|
+
${e.children.map(t=>`${t.name} | ${t.description}`).join(`
|
|
8
|
+
`)}
|
|
9
|
+
|
|
10
|
+
Options:
|
|
11
|
+
--help | Show this help message and exit.
|
|
12
|
+
--version | Show the version number and exit.
|
|
13
|
+
`}function oe(r){return{...r,parse(e,t){let s=(0,Ne.default)(t);return s.help?void console.log(Dr(e,this)):this.action(s)}}}function Dr(r,e){return`Usage: ${[...r,e].map(t=>t.name).join(" ")} [options]
|
|
14
|
+
|
|
15
|
+
${e.description}
|
|
16
|
+
|
|
17
|
+
Options:
|
|
18
|
+
--help | Show this help message and exit.
|
|
19
|
+
${e.options.map(t=>`--${t.name} | ${t.description}`).join(`
|
|
20
|
+
`)}
|
|
21
|
+
`}var fe=require("fs/promises"),It=require("path");var q=S(require("readline"),1),dt=require("util");var nt=(r=0)=>e=>`\x1B[${e+r}m`,ot=(r=0)=>e=>`\x1B[${38+r};5;${e}m`,it=(r=0)=>(e,t,s)=>`\x1B[${38+r};2;${e};${t};${s}m`,O={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],overline:[53,55],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],gray:[90,39],grey:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgGray:[100,49],bgGrey:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}},Sn=Object.keys(O.modifier),Fr=Object.keys(O.color),Gr=Object.keys(O.bgColor),Ln=[...Fr,...Gr];function jr(){let r=new Map;for(let[e,t]of Object.entries(O)){for(let[s,n]of Object.entries(t))O[s]={open:`\x1B[${n[0]}m`,close:`\x1B[${n[1]}m`},t[s]=O[s],r.set(n[0],n[1]);Object.defineProperty(O,e,{value:t,enumerable:!1})}return Object.defineProperty(O,"codes",{value:r,enumerable:!1}),O.color.close="\x1B[39m",O.bgColor.close="\x1B[49m",O.color.ansi=nt(),O.color.ansi256=ot(),O.color.ansi16m=it(),O.bgColor.ansi=nt(10),O.bgColor.ansi256=ot(10),O.bgColor.ansi16m=it(10),Object.defineProperties(O,{rgbToAnsi256:{value(e,t,s){return e===t&&t===s?e<8?16:e>248?231:Math.round((e-8)/247*24)+232:16+36*Math.round(e/255*5)+6*Math.round(t/255*5)+Math.round(s/255*5)},enumerable:!1},hexToRgb:{value(e){let t=/[a-f\d]{6}|[a-f\d]{3}/i.exec(e.toString(16));if(!t)return[0,0,0];let[s]=t;s.length===3&&(s=[...s].map(o=>o+o).join(""));let n=Number.parseInt(s,16);return[n>>16&255,n>>8&255,n&255]},enumerable:!1},hexToAnsi256:{value:e=>O.rgbToAnsi256(...O.hexToRgb(e)),enumerable:!1},ansi256ToAnsi:{value(e){if(e<8)return 30+e;if(e<16)return 90+(e-8);let t,s,n;if(e>=232)t=((e-232)*10+8)/255,s=t,n=t;else{e-=16;let l=e%36;t=Math.floor(e/36)/5,s=Math.floor(l/6)/5,n=l%6/5}let o=Math.max(t,s,n)*2;if(o===0)return 30;let i=30+(Math.round(n)<<2|Math.round(s)<<1|Math.round(t));return o===2&&(i+=60),i},enumerable:!1},rgbToAnsi:{value:(e,t,s)=>O.ansi256ToAnsi(O.rgbToAnsi256(e,t,s)),enumerable:!1},hexToAnsi:{value:e=>O.ansi256ToAnsi(O.hexToAnsi256(e)),enumerable:!1}}),O}var qr=jr(),y=qr;var ae=S(require("process"),1),ct=S(require("os"),1),ge=S(require("tty"),1);function L(r,e=globalThis.Deno?globalThis.Deno.args:ae.default.argv){let t=r.startsWith("-")?"":r.length===1?"-":"--",s=e.indexOf(t+r),n=e.indexOf("--");return s!==-1&&(n===-1||s<n)}var{env:N}=ae.default,ie;L("no-color")||L("no-colors")||L("color=false")||L("color=never")?ie=0:(L("color")||L("colors")||L("color=true")||L("color=always"))&&(ie=1);function _r(){if("FORCE_COLOR"in N)return N.FORCE_COLOR==="true"?1:N.FORCE_COLOR==="false"?0:N.FORCE_COLOR.length===0?1:Math.min(Number.parseInt(N.FORCE_COLOR,10),3)}function Br(r){return r===0?!1:{level:r,hasBasic:!0,has256:r>=2,has16m:r>=3}}function Ur(r,{streamIsTTY:e,sniffFlags:t=!0}={}){let s=_r();s!==void 0&&(ie=s);let n=t?ie:s;if(n===0)return 0;if(t){if(L("color=16m")||L("color=full")||L("color=truecolor"))return 3;if(L("color=256"))return 2}if("TF_BUILD"in N&&"AGENT_NAME"in N)return 1;if(r&&!e&&n===void 0)return 0;let o=n||0;if(N.TERM==="dumb")return o;if(ae.default.platform==="win32"){let i=ct.default.release().split(".");return Number(i[0])>=10&&Number(i[2])>=10586?Number(i[2])>=14931?3:2:1}if("CI"in N)return["GITHUB_ACTIONS","GITEA_ACTIONS","CIRCLECI"].some(i=>i in N)?3:["TRAVIS","APPVEYOR","GITLAB_CI","BUILDKITE","DRONE"].some(i=>i in N)||N.CI_NAME==="codeship"?1:o;if("TEAMCITY_VERSION"in N)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(N.TEAMCITY_VERSION)?1:0;if(N.COLORTERM==="truecolor"||N.TERM==="xterm-kitty")return 3;if("TERM_PROGRAM"in N){let i=Number.parseInt((N.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(N.TERM_PROGRAM){case"iTerm.app":return i>=3?3:2;case"Apple_Terminal":return 2}}return/-256(color)?$/i.test(N.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(N.TERM)||"COLORTERM"in N?1:o}function at(r,e={}){let t=Ur(r,{streamIsTTY:r&&r.isTTY,...e});return Br(t)}var Mr={stdout:at({isTTY:ge.default.isatty(1)}),stderr:at({isTTY:ge.default.isatty(2)})},lt=Mr;function ut(r,e,t){let s=r.indexOf(e);if(s===-1)return r;let n=e.length,o=0,i="";do i+=r.slice(o,s)+e+t,o=s+n,s=r.indexOf(e,o);while(s!==-1);return i+=r.slice(o),i}function ft(r,e,t,s){let n=0,o="";do{let i=r[s-1]==="\r";o+=r.slice(n,i?s-1:s)+e+(i?`\r
|
|
22
|
+
`:`
|
|
23
|
+
`)+t,n=s+1,s=r.indexOf(`
|
|
24
|
+
`,n)}while(s!==-1);return o+=r.slice(n),o}var{stdout:pt,stderr:ht}=lt,Ie=Symbol("GENERATOR"),k=Symbol("STYLER"),K=Symbol("IS_EMPTY"),mt=["ansi","ansi","ansi256","ansi16m"],V=Object.create(null),Xr=(r,e={})=>{if(e.level&&!(Number.isInteger(e.level)&&e.level>=0&&e.level<=3))throw new Error("The `level` option should be an integer from 0 to 3");let t=pt?pt.level:0;r.level=e.level===void 0?t:e.level};var kr=r=>{let e=(...t)=>t.join(" ");return Xr(e,r),Object.setPrototypeOf(e,Z.prototype),e};function Z(r){return kr(r)}Object.setPrototypeOf(Z.prototype,Function.prototype);for(let[r,e]of Object.entries(y))V[r]={get(){let t=ce(this,be(e.open,e.close,this[k]),this[K]);return Object.defineProperty(this,r,{value:t}),t}};V.visible={get(){let r=ce(this,this[k],!0);return Object.defineProperty(this,"visible",{value:r}),r}};var Te=(r,e,t,...s)=>r==="rgb"?e==="ansi16m"?y[t].ansi16m(...s):e==="ansi256"?y[t].ansi256(y.rgbToAnsi256(...s)):y[t].ansi(y.rgbToAnsi(...s)):r==="hex"?Te("rgb",e,t,...y.hexToRgb(...s)):y[t][r](...s),Vr=["rgb","hex","ansi256"];for(let r of Vr){V[r]={get(){let{level:t}=this;return function(...s){let n=be(Te(r,mt[t],"color",...s),y.color.close,this[k]);return ce(this,n,this[K])}}};let e="bg"+r[0].toUpperCase()+r.slice(1);V[e]={get(){let{level:t}=this;return function(...s){let n=be(Te(r,mt[t],"bgColor",...s),y.bgColor.close,this[k]);return ce(this,n,this[K])}}}}var Wr=Object.defineProperties(()=>{},{...V,level:{enumerable:!0,get(){return this[Ie].level},set(r){this[Ie].level=r}}}),be=(r,e,t)=>{let s,n;return t===void 0?(s=r,n=e):(s=t.openAll+r,n=e+t.closeAll),{open:r,close:e,openAll:s,closeAll:n,parent:t}},ce=(r,e,t)=>{let s=(...n)=>Yr(s,n.length===1?""+n[0]:n.join(" "));return Object.setPrototypeOf(s,Wr),s[Ie]=r,s[k]=e,s[K]=t,s},Yr=(r,e)=>{if(r.level<=0||!e)return r[K]?"":e;let t=r[k];if(t===void 0)return e;let{openAll:s,closeAll:n}=t;if(e.includes("\x1B"))for(;t!==void 0;)e=ut(e,t.close,t.open),t=t.parent;let o=e.indexOf(`
|
|
25
|
+
`);return o!==-1&&(e=ft(e,n,s,o)),s+e+n};Object.defineProperties(Z.prototype,V);var Hr=Z(),jn=Z({level:ht?ht.level:0});var j=Hr;function Et(...r){console.log("[next-ws]",...r)}function _(...r){console.log(j.blue("[next-ws]"),...r)}function le(...r){console.log(j.yellow("[next-ws]"),...r)}function B(...r){console.log(j.red("[next-ws]"),...r)}var $t=(0,dt.debuglog)("next-ws");function zr(...r){console.log(j.green("[next-ws]","\u2714"),...r)}function Kr(...r){console.log(j.red("[next-ws]","\u2716"),...r)}async function Rt(...r){let e=q.default.createInterface({input:process.stdin,output:process.stdout});return new Promise(t=>{let s=j.yellow("[next-ws]",...r),n=j.cyan("[y/N]");e.question(`${s} ${n}`,o=>{let i=o.trim().toLowerCase();t(i==="y"),e.close()})})}async function Ot(r,...e){process.stdout.write("\x1B[?25l");let t=["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827"],s=0,n=setInterval(()=>{q.default.cursorTo(process.stdout,0);let o=t[s++%t.length];process.stdout.write(j.cyan("[next-ws]",o,...e))},100);return r.then(o=>(clearInterval(n),q.default.cursorTo(process.stdout,0),q.default.clearLine(process.stdout,0),zr(...e),o)).catch(o=>{throw clearInterval(n),q.default.cursorTo(process.stdout,0),q.default.clearLine(process.stdout,0),Kr(...e),o}).finally(()=>{process.stdout.write("\x1B[?25h")})}var J=require("fs/promises"),U=require("path");function xt(){let r={paths:[process.cwd()]},e=require.resolve("next-ws/package.json",r);return`${(0,U.dirname)(e).replaceAll("\\","/")}/dist`}async function Q(){let r={paths:[process.cwd()]},e=require.resolve("next/package.json",r);return(0,U.dirname)(e)}async function ue(){let r=await Q(),e=(0,U.join)(r,"package.json"),t=await(0,J.readFile)(e,"utf-8").then(JSON.parse);return String(t.version.split("-")[0])}async function Nt(){let r=await Q(),e=(0,U.join)(r,".next-ws-trace.json");return(0,J.readFile)(e,"utf-8").then(JSON.parse).catch(()=>null)}async function gt(r){let e=await Q(),t=(0,U.join)(e,".next-ws-trace.json");await(0,J.writeFile)(t,JSON.stringify(r,null,2))}function pe(r){return{...r,async execute(){let e=[];for(let t of this.steps)await Ot(t.execute(),t.title).then(s=>e.push(s));return e.every(t=>t)}}}function W(r){return{...r,async execute(){let e=await Zr(this.path);$t("Applying",`"${this.title}"`,"to",`"${e}"`);let t=await(0,fe.readFile)(e,"utf-8");if(this.ignore&&t.includes(this.ignore))return!1;let s=await this.modify(t);return await(0,fe.writeFile)(e,s),!0}}}async function Zr(r){switch(r.split(":")[0]){case"next":{let e=await Q(),t=r.slice(5);return(0,It.resolve)(e,t)}default:return r}}var ve=W({title:"Add WebSocket server setup script to NextNodeServer constructor.",path:"next:dist/server/next-server.js",ignore:"setupWebSocketServer(this)",async modify(r){let e=r.split(`
|
|
26
|
+
`),t=!1,s=-1,n=0;for(let l=0;l<e.length;l++){let u=e[l]??"";if(!t&&u.includes("constructor(")&&(t=!0,n=0),t&&(n+=(u.match(/{/g)||[]).length,n-=(u.match(/}/g)||[]).length,n===0)){s=l;break}}if(s===-1)throw new Error("Could not find constructor end index.");let o=`;{
|
|
27
|
+
let nextWs;
|
|
28
|
+
try { nextWs = require('next-ws/server') } catch {
|
|
29
|
+
try { nextWs = require('${xt()}/server/index.cjs') } catch {
|
|
30
|
+
/* don't let this crash apps that don't use next-ws */ }}
|
|
31
|
+
nextWs?.setupWebSocketServer(this);
|
|
32
|
+
};`;return e.splice(s,0,o),e.join(`
|
|
33
|
+
`)}}),Ae=W({title:"Add SOCKET type to Next types",path:"next:dist/build/webpack/plugins/next-types-plugin.js",ignore:"SOCKET?: Function;",async modify(r){let e=/\.map\(\(method\)=>`\${method}\?: Function`\).join\(['"]\\n +['"]\)/g;return r.replace(e,s=>`${s} + "; SOCKET?: Function;"`)}}),Tt=pe({name:"patch-1",versions:">=13.2.0 <=13.4.8",steps:[ve,Ae]});var Jr=W({...Ae,path:"next:dist/build/webpack/plugins/next-types-plugin/index.js"}),Qr=W({title:"Prevent Next.js from immediately closing WebSocket connections",path:"next:dist/server/lib/router-server.js",async modify(r){return r.replaceAll("return socket.end();","").replaceAll(/(\/\/ [a-zA-Z .]+\s+)socket\.end\(\);/g,"")}}),bt=pe({name:"patch-2",versions:">=13.5.1 <=15.1.7",steps:[ve,Qr,Jr]});var ee=[Tt,bt];var xr=S(H(),1),Nr=S(M(),1),gr=S(re(),1),Ve=S(ur(),1),We=S($r(),1),Ye=S(Or(),1),He=S(Xe(),1);function Ir(r,e){r=new xr.default(r,e);let t=null;for(let s of r.set)for(let{operator:n,semver:{version:o}}of s){if(n===">"||n===">=")continue;let i=new Nr.default(o);n==="<"&&(i.patch--,i.raw=i.format()),(!t||(0,gr.default)(i,t))&&(t=i)}return t}var Oe=oe({name:"patch",description:"Patch the local Next.js installation to support WebSockets",options:[{name:"yes",description:"Skip confirmation prompt for unsupported versions",alias:"y"}],async action(r){let e=ee.map(i=>i.versions).join(" || "),t=Ve.default(e)?.version??e,s=Ir(e)?.version??e,n=await ue();We.default(n,t)&&(B(`Next.js v${n} is not supported, a minimum of v${t} is required`),process.exit(1));let o=ee.find(i=>He.default(n,i.versions));Ye.default(n,s)&&(le(`Next.js v${n} is not officially supported, a maximum of v${s} is recommended.`),r.yes||await Rt("Are you sure you want to proceed?")?(o=ee[ee.length-1],_("Proceeding with the latest patch"),Et("If you encounter any issues please report them at https://github.com/apteryxxyz/next-ws/issues")):(B("Aborted"),process.exit(1))),o||(B(`Next.js v${n} is not supported, please upgrade to a version within the range '${e}'`),process.exit(1)),_(`Patching Next.js v${n} with '${o.versions}'`),await o.execute(),_("Saving patch trace file..."),await gt({patch:o.versions,version:n}),_("All done!")}});var Tr=oe({name:"verify",description:"Verify that the local Next.js installation has been patched",options:[{name:"ensure",description:"If not patched, then run the patch command",alias:"e"}],async action(r){let e=await Nt();if(!e){if(r.ensure)return le("Next.js has not been patched, running the patch command"),Oe.action({yes:!0});B("Next.js has not been patched, you'll need to run the patch command"),process.exit(1)}await ue()!==e.version&&(B("Next.js has been patched with a different version, you'll need to run the patch command"),process.exit(1)),_("Next.js has been patched!")}});var br=st({name:"next-ws",description:"Patch the local Next.js installation to support WebSockets",children:[Oe,Tr]});br.parse([],process.argv.slice(2));
|
package/dist/client/index.cjs
CHANGED
|
@@ -1,38 +1,76 @@
|
|
|
1
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
28
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
2
29
|
|
|
3
|
-
|
|
4
|
-
var
|
|
30
|
+
// src/client/index.ts
|
|
31
|
+
var client_exports = {};
|
|
32
|
+
__export(client_exports, {
|
|
33
|
+
WebSocketConsumer: () => WebSocketConsumer,
|
|
34
|
+
WebSocketContext: () => WebSocketContext,
|
|
35
|
+
WebSocketProvider: () => WebSocketProvider,
|
|
36
|
+
useWebSocket: () => useWebSocket
|
|
37
|
+
});
|
|
38
|
+
module.exports = __toCommonJS(client_exports);
|
|
5
39
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
var
|
|
9
|
-
|
|
10
|
-
var WebSocketContext = React.createContext(null);
|
|
40
|
+
// src/client/context.tsx
|
|
41
|
+
var import_react = __toESM(require("react"), 1);
|
|
42
|
+
var import_react2 = require("react");
|
|
43
|
+
var WebSocketContext = (0, import_react2.createContext)(null);
|
|
11
44
|
WebSocketContext.displayName = "WebSocketContext";
|
|
12
45
|
var WebSocketConsumer = WebSocketContext.Consumer;
|
|
13
46
|
function WebSocketProvider(p) {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
47
|
+
const clientRef = (0, import_react.useRef)(null);
|
|
48
|
+
(0, import_react2.useEffect)(() => {
|
|
49
|
+
if (typeof window === "undefined") return;
|
|
50
|
+
if (clientRef.current) {
|
|
51
|
+
clientRef.current.close();
|
|
52
|
+
clientRef.current = null;
|
|
53
|
+
}
|
|
54
|
+
const client = new WebSocket(p.url, p.protocols);
|
|
55
|
+
if (p.binaryType) client.binaryType = p.binaryType;
|
|
56
|
+
clientRef.current = client;
|
|
57
|
+
return () => {
|
|
58
|
+
client.close();
|
|
59
|
+
clientRef.current = null;
|
|
60
|
+
};
|
|
18
61
|
}, [p.url, p.protocols, p.binaryType]);
|
|
19
|
-
return
|
|
20
|
-
if (client?.readyState === WebSocket.OPEN)
|
|
21
|
-
return () => client.close();
|
|
22
|
-
}, [client]), /* @__PURE__ */ React__default.default.createElement(WebSocketContext.Provider, { value: client }, p.children);
|
|
62
|
+
return /* @__PURE__ */ import_react.default.createElement(WebSocketContext.Provider, { value: clientRef.current }, p.children);
|
|
23
63
|
}
|
|
24
|
-
chunkPFW3KWBF_cjs.__name(WebSocketProvider, "WebSocketProvider");
|
|
25
64
|
function useWebSocket() {
|
|
26
|
-
|
|
65
|
+
const context = (0, import_react2.useContext)(WebSocketContext);
|
|
27
66
|
if (context === void 0)
|
|
28
67
|
throw new Error("useWebSocket must be used within a WebSocketProvider");
|
|
29
68
|
return context;
|
|
30
69
|
}
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
//# sourceMappingURL=index.cjs.map
|
|
70
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
71
|
+
0 && (module.exports = {
|
|
72
|
+
WebSocketConsumer,
|
|
73
|
+
WebSocketContext,
|
|
74
|
+
WebSocketProvider,
|
|
75
|
+
useWebSocket
|
|
76
|
+
});
|
package/dist/client/index.js
CHANGED
|
@@ -1,29 +1,38 @@
|
|
|
1
|
-
import
|
|
2
|
-
import React, { createContext, useMemo, useEffect, useContext } from 'react';
|
|
1
|
+
import "../chunk-3RG5ZIWI.js";
|
|
3
2
|
|
|
3
|
+
// src/client/context.tsx
|
|
4
|
+
import React, { useRef } from "react";
|
|
5
|
+
import { createContext, useContext, useEffect } from "react";
|
|
4
6
|
var WebSocketContext = createContext(null);
|
|
5
7
|
WebSocketContext.displayName = "WebSocketContext";
|
|
6
8
|
var WebSocketConsumer = WebSocketContext.Consumer;
|
|
7
9
|
function WebSocketProvider(p) {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
const clientRef = useRef(null);
|
|
11
|
+
useEffect(() => {
|
|
12
|
+
if (typeof window === "undefined") return;
|
|
13
|
+
if (clientRef.current) {
|
|
14
|
+
clientRef.current.close();
|
|
15
|
+
clientRef.current = null;
|
|
16
|
+
}
|
|
17
|
+
const client = new WebSocket(p.url, p.protocols);
|
|
18
|
+
if (p.binaryType) client.binaryType = p.binaryType;
|
|
19
|
+
clientRef.current = client;
|
|
20
|
+
return () => {
|
|
21
|
+
client.close();
|
|
22
|
+
clientRef.current = null;
|
|
23
|
+
};
|
|
12
24
|
}, [p.url, p.protocols, p.binaryType]);
|
|
13
|
-
return
|
|
14
|
-
if (client?.readyState === WebSocket.OPEN)
|
|
15
|
-
return () => client.close();
|
|
16
|
-
}, [client]), /* @__PURE__ */ React.createElement(WebSocketContext.Provider, { value: client }, p.children);
|
|
25
|
+
return /* @__PURE__ */ React.createElement(WebSocketContext.Provider, { value: clientRef.current }, p.children);
|
|
17
26
|
}
|
|
18
|
-
__name(WebSocketProvider, "WebSocketProvider");
|
|
19
27
|
function useWebSocket() {
|
|
20
|
-
|
|
28
|
+
const context = useContext(WebSocketContext);
|
|
21
29
|
if (context === void 0)
|
|
22
30
|
throw new Error("useWebSocket must be used within a WebSocketProvider");
|
|
23
31
|
return context;
|
|
24
32
|
}
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
33
|
+
export {
|
|
34
|
+
WebSocketConsumer,
|
|
35
|
+
WebSocketContext,
|
|
36
|
+
WebSocketProvider,
|
|
37
|
+
useWebSocket
|
|
38
|
+
};
|