@@ -3,10 +3,9 @@ import { FN_NATIVE, NULL, NUM } from '../../interpreter/value.js';
33import { textEncoder } from '../../const.js' ;
44import { SeedRandomWrapper } from './seedrandom.js' ;
55import { ChaCha20 } from './chacha20.js' ;
6- import type { VNativeFn , VNull , Value } from '../../interpreter/value.js' ;
6+ import type { VNativeFn , VNum , VStr } from '../../interpreter/value.js' ;
77
8- export function GenerateLegacyRandom ( seed : Value | undefined ) : VNativeFn | VNull {
9- if ( ! seed || seed . type !== 'num' && seed . type !== 'str' ) return NULL ;
8+ export function GenerateLegacyRandom ( seed : VNum | VStr ) : VNativeFn {
109 const rng = seedrandom ( seed . value . toString ( ) ) ;
1110 return FN_NATIVE ( ( [ min , max ] ) => {
1211 if ( min && min . type === 'num' && max && max . type === 'num' ) {
@@ -16,8 +15,7 @@ export function GenerateLegacyRandom(seed: Value | undefined) : VNativeFn | VNul
1615 } ) ;
1716}
1817
19- export function GenerateRC4Random ( seed : Value | undefined ) : VNativeFn | VNull {
20- if ( ! seed || seed . type !== 'num' && seed . type !== 'str' ) return NULL ;
18+ export function GenerateRC4Random ( seed : VNum | VStr ) : VNativeFn {
2119 const rng = new SeedRandomWrapper ( seed . value ) ;
2220 return FN_NATIVE ( ( [ min , max ] ) => {
2321 if ( min && min . type === 'num' && max && max . type === 'num' ) {
@@ -28,13 +26,12 @@ export function GenerateRC4Random(seed: Value | undefined) : VNativeFn | VNull {
2826 } ) ;
2927}
3028
31- export async function GenerateChaCha20Random ( seed : Value | undefined ) : Promise < VNativeFn | VNull > {
32- if ( ! seed || seed . type !== 'num' && seed . type !== 'str' && seed . type !== 'null' ) return NULL ;
33- let actualSeed : Uint8Array | undefined = undefined ;
29+ export async function GenerateChaCha20Random ( seed : VNum | VStr ) : Promise < VNativeFn > {
30+ let actualSeed : Uint8Array ;
3431 if ( seed . type === 'num' )
3532 {
3633 actualSeed = new Uint8Array ( await crypto . subtle . digest ( 'SHA-384' , new Uint8Array ( new Float64Array ( [ seed . value ] ) ) ) ) ;
37- } else if ( seed . type === 'str' ) {
34+ } else {
3835 actualSeed = new Uint8Array ( await crypto . subtle . digest ( 'SHA-384' , new Uint8Array ( textEncoder . encode ( seed . value ) ) ) ) ;
3936 }
4037 const rng = new ChaCha20 ( actualSeed ) ;
0 commit comments