@@ -13,61 +13,69 @@ const IPv4Reg = new RegExp(`^${v4Str}$`)
1313const v6Seg = '(?:[0-9a-fA-F]{1,4})'
1414const IPv6Reg = new RegExp (
1515 '^(' +
16- `(?:${ v6Seg } :){7}(?:${ v6Seg } |:)|` +
17- `(?:${ v6Seg } :){6}(?:${ v4Str } |:${ v6Seg } |:)|` +
18- `(?:${ v6Seg } :){5}(?::${ v4Str } |(:${ v6Seg } ){1,2}|:)|` +
19- `(?:${ v6Seg } :){4}(?:(:${ v6Seg } ){0,1}:${ v4Str } |(:${ v6Seg } ){1,3}|:)|` +
20- `(?:${ v6Seg } :){3}(?:(:${ v6Seg } ){0,2}:${ v4Str } |(:${ v6Seg } ){1,4}|:)|` +
21- `(?:${ v6Seg } :){2}(?:(:${ v6Seg } ){0,3}:${ v4Str } |(:${ v6Seg } ){1,5}|:)|` +
22- `(?:${ v6Seg } :){1}(?:(:${ v6Seg } ){0,4}:${ v4Str } |(:${ v6Seg } ){1,6}|:)|` +
23- `(?::((?::${ v6Seg } ){0,5}:${ v4Str } |(?::${ v6Seg } ){1,7}|:))` +
24- ')(%[0-9a-zA-Z-.:]{1,})?$'
16+ `(?:${ v6Seg } :){7}(?:${ v6Seg } |:)|` +
17+ `(?:${ v6Seg } :){6}(?:${ v4Str } |:${ v6Seg } |:)|` +
18+ `(?:${ v6Seg } :){5}(?::${ v4Str } |(:${ v6Seg } ){1,2}|:)|` +
19+ `(?:${ v6Seg } :){4}(?:(:${ v6Seg } ){0,1}:${ v4Str } |(:${ v6Seg } ){1,3}|:)|` +
20+ `(?:${ v6Seg } :){3}(?:(:${ v6Seg } ){0,2}:${ v4Str } |(:${ v6Seg } ){1,4}|:)|` +
21+ `(?:${ v6Seg } :){2}(?:(:${ v6Seg } ){0,3}:${ v4Str } |(:${ v6Seg } ){1,5}|:)|` +
22+ `(?:${ v6Seg } :){1}(?:(:${ v6Seg } ){0,4}:${ v4Str } |(:${ v6Seg } ){1,6}|:)|` +
23+ `(?::((?::${ v6Seg } ){0,5}:${ v4Str } |(?::${ v6Seg } ){1,7}|:))` +
24+ ')(%[0-9a-zA-Z-.:]{1,})?$'
2525)
2626
2727const textEncoder = new TextEncoder ( )
2828export const crypto = {
29- randomBytes : l => Crypto . getRandomValues ( Buffer . alloc ( l ) ) ,
30- pbkdf2Sync : async ( password , salt , iterations , keylen ) => Crypto . subtle . deriveBits (
31- {
32- name : 'PBKDF2' ,
33- hash : 'SHA-256' ,
34- salt,
35- iterations
36- } ,
37- await Crypto . subtle . importKey (
38- 'raw' ,
39- textEncoder . encode ( password ) ,
40- 'PBKDF2' ,
41- false ,
29+ randomBytes : ( l ) => Crypto . getRandomValues ( Buffer . alloc ( l ) ) ,
30+ pbkdf2Sync : async ( password , salt , iterations , keylen ) =>
31+ Crypto . subtle . deriveBits (
32+ {
33+ name : 'PBKDF2' ,
34+ hash : 'SHA-256' ,
35+ salt,
36+ iterations
37+ } ,
38+ await Crypto . subtle . importKey (
39+ 'raw' ,
40+ textEncoder . encode ( password ) ,
41+ 'PBKDF2' ,
42+ false ,
43+ [ 'deriveBits' ]
44+ ) ,
45+ keylen * 8 ,
4246 [ 'deriveBits' ]
4347 ) ,
44- keylen * 8 ,
45- [ 'deriveBits' ]
46- ) ,
4748 createHash : ( type ) => ( {
4849 update : ( x ) => ( {
4950 digest : ( ) => {
50- return type === 'sha256'
51- ? Crypto . subtle . digest ( 'SHA-256' , x )
52- : Crypto . subtle . digest ( 'MD5' , x )
51+ if ( type !== 'sha256' )
52+ throw Error ( 'createHash only supports sha256 on cloudflare.' )
53+ if ( ! ( x instanceof Uint8Array ) )
54+ x = textEncoder . encode ( x )
55+ return Crypto . subtle . digest ( 'SHA-256' , x )
5356 }
5457 } )
5558 } ) ,
5659 createHmac : ( type , key ) => ( {
57- update : x => ( {
58- digest : async ( ) => Buffer . from ( await Crypto . subtle . sign (
59- 'HMAC' ,
60- await Crypto . subtle . importKey ( 'raw' , key , { name : 'HMAC' , hash : 'SHA-256' } , false , [ 'sign' ] ) ,
61- textEncoder . encode ( x )
62- ) )
60+ update : ( x ) => ( {
61+ digest : async ( ) =>
62+ Buffer . from (
63+ await Crypto . subtle . sign (
64+ 'HMAC' ,
65+ await Crypto . subtle . importKey (
66+ 'raw' ,
67+ key ,
68+ { name : 'HMAC' , hash : 'SHA-256' } ,
69+ false ,
70+ [ 'sign' ]
71+ ) ,
72+ textEncoder . encode ( x )
73+ )
74+ )
6375 } )
6476 } )
6577}
6678
67- export const process = {
68- env : { }
69- }
70-
7179export const os = {
7280 userInfo ( ) {
7381 return { username : 'postgres' }
@@ -81,19 +89,23 @@ export const fs = {
8189}
8290
8391export const net = {
84- isIP : x => RegExp . prototype . test . call ( IPv4Reg , x ) ? 4 : RegExp . prototype . test . call ( IPv6Reg , x ) ? 6 : 0 ,
92+ isIP : ( x ) =>
93+ RegExp . prototype . test . call ( IPv4Reg , x )
94+ ? 4
95+ : RegExp . prototype . test . call ( IPv6Reg , x )
96+ ? 6
97+ : 0 ,
8598 Socket
8699}
87100
88101export { setImmediate , clearImmediate }
89102
90103export const tls = {
91- connect ( x ) {
92- const tcp = x . socket
104+ connect ( { socket : tcp , servername } ) {
93105 tcp . writer . releaseLock ( )
94106 tcp . reader . releaseLock ( )
95107 tcp . readyState = 'upgrading'
96- tcp . raw = tcp . raw . startTls ( { servername : x . servername } )
108+ tcp . raw = tcp . raw . startTls ( { servername } )
97109 tcp . raw . closed . then (
98110 ( ) => tcp . emit ( 'close' ) ,
99111 ( e ) => tcp . emit ( 'error' , e )
@@ -133,7 +145,7 @@ function Socket() {
133145 ( ) => {
134146 tcp . readyState !== 'upgrade'
135147 ? close ( )
136- : ( tcp . readyState = 'open' , tcp . emit ( 'secureConnect' ) )
148+ : ( ( tcp . readyState = 'open' ) , tcp . emit ( 'secureConnect' ) )
137149 } ,
138150 ( e ) => tcp . emit ( 'error' , e )
139151 )
@@ -151,8 +163,7 @@ function Socket() {
151163 }
152164
153165 function close ( ) {
154- if ( tcp . readyState === 'closed' )
155- return
166+ if ( tcp . readyState === 'closed' ) return
156167
157168 tcp . readyState = 'closed'
158169 tcp . emit ( 'close' )
@@ -164,9 +175,7 @@ function Socket() {
164175 }
165176
166177 function end ( data ) {
167- return data
168- ? tcp . write ( data , ( ) => tcp . raw . close ( ) )
169- : tcp . raw . close ( )
178+ return data ? tcp . write ( data , ( ) => tcp . raw . close ( ) ) : tcp . raw . close ( )
170179 }
171180
172181 function destroy ( ) {
@@ -178,7 +187,7 @@ function Socket() {
178187 try {
179188 let done
180189 , value
181- while ( ( { done, value } = await tcp . reader . read ( ) , ! done ) )
190+ while ( ( ( { done, value } = await tcp . reader . read ( ) ) , ! done ) )
182191 tcp . emit ( 'data' , Buffer . from ( value ) )
183192 } catch ( err ) {
184193 error ( err )
@@ -211,3 +220,31 @@ function setImmediate(fn) {
211220function clearImmediate ( id ) {
212221 tasks . delete ( id )
213222}
223+
224+ const nowOffset = Date . now ( )
225+ const now = ( ) => Date . now ( ) - nowOffset
226+ const hrtime = ( previousTimestamp ) => {
227+ const baseNow = Math . floor ( ( Date . now ( ) - now ( ) ) * 1e-3 )
228+ const clocktime = now ( ) * 1e-3
229+ let seconds = Math . floor ( clocktime ) + baseNow
230+ let nanoseconds = Math . floor ( ( clocktime % 1 ) * 1e9 )
231+
232+ if ( previousTimestamp ) {
233+ seconds = seconds - previousTimestamp [ 0 ]
234+ nanoseconds = nanoseconds - previousTimestamp [ 1 ]
235+ if ( nanoseconds < 0 ) {
236+ seconds --
237+ nanoseconds += 1e9
238+ }
239+ }
240+ return [ seconds , nanoseconds ]
241+ }
242+ hrtime . bigint = ( ) => {
243+ const time = hrtime ( )
244+ return BigInt ( `${ time [ 0 ] } ${ time [ 1 ] } ` )
245+ }
246+
247+ export const process = {
248+ env : { } ,
249+ hrtime
250+ }
0 commit comments