1
- import { system } from "@minecraft/server" ;
1
+ import { system } from "@minecraft/server" ;
2
+ const symbolError = Symbol ( "RunError" ) ;
2
3
const AsyncFunctionConstructor = ( async function ( ) { } ) . constructor ;
3
4
const GeneratorFunctionConstructor = ( function * ( ) { } ) . constructor ;
4
5
const AsyncGeneratorFunctionConstructor = ( async function * ( ) { } ) . constructor ;
@@ -25,13 +26,13 @@ const MinecraftModules = [
25
26
{ module_name : "@minecraft/server-editor" , tag : "editor" } ,
26
27
{ module_name : "@minecraft/server-editor-bindings" , tag : "bindings" }
27
28
] ;
28
- var OutputType ;
29
+ export var OutputType ;
29
30
( function ( OutputType ) {
30
31
OutputType [ OutputType [ "SyntaxError" ] = 0 ] = "SyntaxError" ;
31
32
OutputType [ OutputType [ "Error" ] = 1 ] = "Error" ;
32
33
OutputType [ OutputType [ "Successfull" ] = 2 ] = "Successfull" ;
33
34
} ) ( OutputType || ( OutputType = { } ) ) ;
34
- var LogTypes ;
35
+ export var LogTypes ;
35
36
( function ( LogTypes ) {
36
37
LogTypes [ LogTypes [ "log" ] = 0 ] = "log" ;
37
38
LogTypes [ LogTypes [ "error" ] = 1 ] = "error" ;
@@ -45,19 +46,15 @@ function consoleLike(type, ...texts) {
45
46
function formatView ( type , object ) {
46
47
return getView [ typeof object ] ( ViewStyle . Full , object ) ;
47
48
}
48
- export async function TerminalInput ( source , message , o = consoleLike ) {
49
- const a = await RunCode ( message , true , { console : { log : o . bind ( source , LogTypes . log ) , warn : o . bind ( source , LogTypes . warn ) , error : o . bind ( source , LogTypes . error ) } , print : o . bind ( source , LogTypes . log ) , self : source , setTimeout, setInterval, clearInterval : clearRun , clearTimeout : clearRun } ) ;
50
- const multicommand = a . multicommand ;
49
+ export async function TerminalInput ( source , message , scope = [ ] , o = consoleLike ) {
50
+ const a = await RunCode ( message , true , { console : { log : o . bind ( source , LogTypes . log ) , Map , Set , warn : o . bind ( source , LogTypes . warn ) , error : o . bind ( source , LogTypes . error ) } , print : o . bind ( source , LogTypes . log ) , self : source , setTimeout, setInterval, clearInterval : clearRun , clearTimeout : clearRun } , ... scope ) ;
51
+ const { multicommand, startTime } = a ;
51
52
if ( a . syntaxError )
52
- return { type : OutputType . SyntaxError , value : a . syntaxError , formatView : formatView ( OutputType . SyntaxError , a . syntaxError ) , multicommand } ;
53
- try {
54
- const output = await a . promise ;
55
- return { type : OutputType . Successfull , value : output , formatView : formatView ( OutputType . Successfull , output ) , multicommand } ;
56
- }
57
- catch ( error ) {
58
- console . warn ( "It was handled xd, but after the promise returns" ) ;
59
- return { type : OutputType . Error , value : error , formatView : formatView ( OutputType . Error , error ) , multicommand } ;
60
- }
53
+ return { type : OutputType . SyntaxError , value : a . syntaxError , formatView : formatView ( OutputType . SyntaxError , a . syntaxError ) , multicommand, startTime } ;
54
+ const output = await a . promise ;
55
+ if ( typeof output === "object" && output !== null && symbolError in output )
56
+ return { type : OutputType . Error , value : output [ symbolError ] , formatView : formatView ( OutputType . Error , output [ symbolError ] ) , multicommand, startTime } ;
57
+ return { type : OutputType . Successfull , value : output , formatView : formatView ( OutputType . Successfull , output ) , multicommand, startTime } ;
61
58
}
62
59
async function RunCode ( code , useModules = true , ...scopes ) {
63
60
let func , output = { syntaxError : undefined , promise : undefined , multicommand : false } ;
@@ -71,12 +68,13 @@ async function RunCode(code, useModules = true, ...scopes) {
71
68
return output ;
72
69
}
73
70
output . multicommand = func . multicommand ?? false ;
74
- output . promise = func ( ) ;
71
+ output . startTime = Date . now ( ) ;
72
+ output . promise = Promise . resolve ( func ( ) ) . catch ( er => ( { [ symbolError ] : er } ) ) ;
75
73
return output ;
76
74
}
77
75
async function BuildAPIScope ( ...modules ) {
78
76
let promises = [ ] ;
79
- modules . forEach ( m => promises . push ( import ( m . module_name ) . catch ( ( ) => ( { } ) ) ) ) ;
77
+ modules . forEach ( m => promises . push ( import ( m . module_name ) . catch ( ( ) => null ) ) ) ;
80
78
const dlls = await Promise . all ( promises ) ;
81
79
return dlls . map ( ( m , i ) => ( { [ modules [ i ] . tag ] : m } ) ) ;
82
80
}
@@ -115,7 +113,22 @@ const getView = {
115
113
else if ( style === ViewStyle . Short ) {
116
114
const names = Object . getOwnPropertyNames ( any ) , symbols = Object . getOwnPropertySymbols ( any ) ;
117
115
//@ts -ignore
118
- const keys = names . map ( k => `§7${ k } §r§7: ${ getView [ typeof any [ k ] ] ( ViewStyle . Primitive , any [ k ] ) } §r` ) . concat ( symbols . map ( s => `§r${ getView [ "symbol" ] ( ViewStyle . Primitive , s ) } §r§7: ${ getView [ typeof any [ s ] ] ( ViewStyle . Primitive , any [ s ] ) } ` ) ) ;
116
+ const keys = names . map ( k => {
117
+ try {
118
+ return `§7${ k } §r§7: ${ getView [ typeof any [ k ] ] ( ViewStyle . Primitive , any [ k ] ) } §r` ;
119
+ }
120
+ catch ( error ) {
121
+ return `§7${ k } §r§7: §o(...)§r` ;
122
+ }
123
+ } ) . concat ( symbols . map ( s => {
124
+ try {
125
+ return `§r${ getView [ "symbol" ] ( ViewStyle . Primitive , s ) } §r§7: ${ getView [ typeof any [ s ] ] ( ViewStyle . Primitive , any [ s ] ) } ` ;
126
+ }
127
+ catch ( error ) {
128
+ return `§r${ getView [ "symbol" ] ( ViewStyle . Primitive , s ) } §r§7: §o(...)§r` ;
129
+ }
130
+ } ) ) ;
131
+ Object . getOwnPropertyDescriptor ;
119
132
const realKeys = keys . slice ( 0 , 5 ) , typeOf = getTypeOfObject ( any ) ;
120
133
return `§7${ ( typeOf == "Object" || typeOf == '' ) ? "" : typeOf + " " } {${ realKeys . join ( "§7, " ) } ${ keys . length > 5 ? "§r§7, ..." : "§r§7" } }` ;
121
134
}
@@ -165,11 +178,17 @@ function buildCompoudView(array, base, object, offSet = " ", func = false, deep
165
178
}
166
179
else {
167
180
if ( get != undefined ) {
168
- const v = get . call ( base ) ;
169
- array . push ( `${ off } §r§7get§r ${ typeof key == "string" ? key : getView [ "symbol" ] ( ViewStyle . Primitive , key ) } §7: §r${ getView [ typeof v ] ( ViewStyle . Short , v ) } §r` ) ;
181
+ let v ;
182
+ try {
183
+ v = get . call ( base ) ;
184
+ array . push ( `${ off } §r§7get§r ${ typeof key == "string" ? key : getView [ "symbol" ] ( ViewStyle . Primitive , key ) } §7: §r${ getView [ typeof v ] ( ViewStyle . Short , v ) } §r` ) ;
185
+ }
186
+ catch ( error ) {
187
+ array . push ( `${ off } §r§7get§r ${ typeof key == "string" ? key : getView [ "symbol" ] ( ViewStyle . Primitive , key ) } §7: §o(...)§r` ) ;
188
+ }
170
189
}
171
190
if ( set != undefined )
172
- array . push ( `${ off } §r§7set§r ${ typeof key == "string" ? key : getView [ "symbol" ] ( ViewStyle . Primitive , key ) } §7: (...)§r` ) ;
191
+ array . push ( `${ off } §r§7set§r ${ typeof key == "string" ? key : getView [ "symbol" ] ( ViewStyle . Primitive , key ) } §7: §o (...)§r` ) ;
173
192
}
174
193
}
175
194
if ( func )
@@ -182,6 +201,87 @@ function buildCompoudView(array, base, object, offSet = " ", func = false, deep
182
201
buildCompoudView ( array , base , prototype , offSet , typeof prototype === 'function' , deepth + 1 ) ;
183
202
return array ;
184
203
}
204
+ /*
205
+ export function toStringPrimitiveFull(any){
206
+ switch (typeof any) {
207
+ case 'object':
208
+ if(any === null){
209
+ return "§7§onull";
210
+ }else if (any instanceof Error) {
211
+ return `§6${any}\n${any.stack}`;
212
+ }else{
213
+ const base = any, names = Object.getOwnPropertyNames(base), symbols = Object.getOwnPropertySymbols(base);
214
+ const keys = names.filter(a=>(base.__lookupGetter__?.(a) == undefined && base.__lookupSetter__?.(a) == undefined)).map(k=>`§7${k}§r§7: ${toStringPrimitiveShort(base[k])}§r`).concat(symbols.map(s=>`§r${toStringPrimitiveShort(s)}§r§7: ${toStringPrimitiveShort(base[s])}`));
215
+ const realKeys = keys.slice(0,5), typeOf = getTypeOfObject(base);
216
+ let output = `§7${(typeOf == "Object" || typeOf == '')?"":typeOf + " "}{${realKeys.join("§7, ")}${keys.length>5?"§r§7, ...":"§r§7"}}§r`;
217
+ function buildLines(base, offSet = " "){
218
+ const prototype = Object.getPrototypeOf(base);
219
+ for (const keyName of Object.getOwnPropertyNames(base)) {
220
+ let getter = base.__lookupGetter__?.(keyName);
221
+ let setter = base.__lookupSetter__?.(keyName);
222
+ if(getter == undefined&&setter == undefined){
223
+ output += `\n${offSet}§r${keyName}§7: §r${toStringPrimitive(base[keyName])}`;
224
+ } else {
225
+ if(getter != undefined) output += `\n${offSet}§7get§r ${keyName}§7: (...)`;
226
+ if(setter != undefined) output += `\n${offSet}§7set§r ${keyName}§7: (...)`;
227
+ }
228
+ }
229
+ for (const keySymbol of Object.getOwnPropertySymbols(base)){
230
+ let getter = base.__lookupGetter__?.(keySymbol);
231
+ let setter = base.__lookupSetter__?.(keySymbol);
232
+ if(getter == undefined&&setter == undefined){
233
+ output += `\n${offSet}§r${toStringPrimitiveShort(keySymbol)}§7: §r${toStringPrimitive(base[keySymbol])}`;
234
+ } else {
235
+ if(getter != undefined) output += `\n${offSet}§7get§r ${toStringPrimitiveShort(keySymbol)}§7: (...)`;
236
+ if(setter != undefined) output += `\n${offSet}§7set§r ${toStringPrimitiveShort(keySymbol)}§7: (...)`;
237
+ }
238
+ }
239
+ if(prototype != null){
240
+ const typOf = getTypeOfObject(prototype);
241
+ output += `\n${offSet}§r[[Prototype]]§r§7: ` + (typOf==""?"Object":typOf)
242
+ if(prototype != Object.prototype && prototype != Array.prototype && prototype != Map.prototype){
243
+ buildLines(prototype, offSet + " ");
244
+ }
245
+ }
246
+ }
247
+ buildLines(base);
248
+ return output;
249
+ }
250
+ case 'function': return any.toString();
251
+ case 'symbol': return `§7Symbol(${any.description})`;
252
+ case 'bigint':
253
+ case 'number':
254
+ case 'boolean': return `§3${any.toString()}§r`;
255
+ case 'undefined': return "§7§oundefined";
256
+ case 'string': return `§3"${any}"§r`;
257
+ default:
258
+ break;
259
+ }
260
+ }
261
+ export function toStringPrimitive(any: any){
262
+ switch (typeof any) {
263
+ case 'object':
264
+ if(any === null){
265
+ return "§7§onull§r";
266
+ }else if (any instanceof Error) {
267
+ return `§6${any}§r`;
268
+ }else{
269
+ const base = any, names = Object.getOwnPropertyNames(base), symbols = Object.getOwnPropertySymbols(base);
270
+ const keys = names.map(k=>`§7${k}§r§7: ${toStringPrimitiveShort(base[k])}§r`).concat(symbols.map(s=>`§r${toStringPrimitiveShort(s)}§r§7: ${toStringPrimitiveShort(base[s])}`));
271
+ const realKeys = keys.slice(0,5), typeOf = getTypeOfObject(base);
272
+ return `§7${(typeOf == "Object" || typeOf == '')?"":typeOf + " "}{${realKeys.join("§7, ")}${keys.length>5?"§r§7, ...":"§r§7"}}`;
273
+ }
274
+ case 'function': return toFunctionString(any);
275
+ case 'symbol': return `Symbol(${any.description})`;
276
+ case 'bigint':
277
+ case 'number':
278
+ case 'boolean': return `§3${any.toString()}§r`;
279
+ case 'undefined': return "§7§oundefined";
280
+ case 'string': return `§6"${any}"§r`;
281
+ default:
282
+ break;
283
+ }
284
+ }*/
185
285
function getTypeOfObject ( obj ) { return ( obj [ Symbol . toStringTag ] ?? ( ( typeof obj === "function" ? obj . name : undefined ) ?? ( ( obj . constructor ?. prototype == obj ? obj . constructor ?. name : obj . __proto__ ?. constructor ?. name ) ?? "" ) ) ) ; }
186
286
//@ts -ignore
187
287
globalThis [ Symbol . toStringTag ] = 'GlobalThis' ;
0 commit comments