From f596e23580d900764e1bfd702d0d839645d227c9 Mon Sep 17 00:00:00 2001 From: hb432 Date: Mon, 15 Jun 2020 12:13:44 -0400 Subject: [PATCH] accessors have moved bro, outta here --- README.md | 18 +------------- index.js | 70 +--------------------------------------------------- index.min.js | 2 +- 3 files changed, 3 insertions(+), 87 deletions(-) diff --git a/README.md b/README.md index 59edbab..592b080 100644 --- a/README.md +++ b/README.md @@ -15,20 +15,7 @@ const framework = core.import('grakkit/framework'); ``` # Documentation -### `framework.array(object)` -Converts an array-like `object` into a fully qualified array. Array-like objects can be one of the following: -- an object with a length property and numeric keys -- an object with a `.forEach` iterator method -- an object with a `.forEachRemaining` iterator method - -These criteria cover the following common data types: -- JS Set -- JS String -- JS Array -- [Java Iterator](https://docs.oracle.com/javase/10/docs/api/java/util/Iterator.html) -- [Java Set](https://docs.oracle.com/javase/10/docs/api/java/util/Set.html) -- [Java ArrayList](https://docs.oracle.com/javase/10/docs/api/java/util/ArrayList.html) -- [Java Map](https://docs.oracle.com/javase/10/docs/api/java/util/Map.html) (returns an array of its entries) + ### `framework.base.encode(string)` Encodes a `string` to base64 format. @@ -144,9 +131,6 @@ Converts the input `string` into a [UUID](https://docs.oracle.com/javase/10/docs ### `framework.values(object)` An alias for `Object.values(object)`. -### `framework.wrapper(object)` -Adds nashorn-style accessors to the input `object`. These accessors themselves implement `framework.wrapper`, meaning any accessed property will also have accessors, and so on. - # Polyfills ### `atob(), btoa()` ```javascript diff --git a/index.js b/index.js index 82159bf..b0c5d58 100644 --- a/index.js +++ b/index.js @@ -1,26 +1,6 @@ (function () { const tasks = []; const framework = { - array: (object) => { - const output = []; - if (typeof object.length === 'number') { - if (object.length > 0) { - let index = 0; - while (output.length < object.length) { - output.push(object[index++]); - } - } - } else if (typeof object.forEach === 'function') { - object.forEach((entry) => { - output.push(entry); - }); - } else if (typeof object.forEachRemaining === 'function') { - object.forEachRemaining((entry) => { - output.push(entry); - }); - } - return output; - }, base: { characters: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=', encode: (string) => { @@ -190,7 +170,7 @@ (consumer = (entry, index) => { return { [entry.key || index]: entry.value || entry }; }); - return framework.extend({}, ...framework.flat(framework.array(array).map(consumer))); + return framework.extend({}, ...framework.flat(array.map(consumer))); }, pascal: (string, separator) => { return string @@ -260,54 +240,6 @@ }, values: (object) => { return Object.values(object); - }, - wrapper: (object) => { - if (object === null || typeof object !== 'object') { - return object; - } else { - const output = { instance: object }; - framework.entries(object).forEach((entry) => { - let index = undefined; - entry.key.startsWith('is') && entry.key[2] && (index = 2); - entry.key.startsWith('get') && entry.key[3] && (index = 3); - if (index) { - let key = entry.key.slice(index); - if (key.length) { - let camel = framework.lower(key[0]) + key.slice(1); - if (!framework.keys(object).includes(camel)) { - try { - entry.value(); - Object.defineProperty(output, camel, { - get () { - return framework.wrapper(entry.value()); - }, - set (value) { - return object[`set${key}`] && object[`set${key}`](value); - } - }); - } catch (error) {} - } - } - } else { - Object.defineProperty(output, entry.key, { - get () { - return framework.wrapper(entry.value); - } - }); - } - }); - const array = framework.array(object); - framework.keys(array).forEach((index) => { - if (!framework.keys(output).includes(index)) { - Object.defineProperty(output, index, { - get () { - return framework.wrapper(array[index]); - } - }); - } - }); - return output; - } } }; diff --git a/index.min.js b/index.min.js index 897a69f..70c42a6 100644 --- a/index.min.js +++ b/index.min.js @@ -1 +1 @@ -!function(){const tasks=[],framework={array:object=>{const output=[];if("number"==typeof object.length){if(object.length>0){let index=0;for(;output.length{output.push(entry)}):"function"==typeof object.forEachRemaining&&object.forEachRemaining(entry=>{output.push(entry)});return output},base:{characters:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",encode:string=>{let index=0,result="";for(;index>6&3,e=63&c;b?c||(e=64):d=e=64,result+=framework.base.characters.charAt(a>>2&63),result+=framework.base.characters.charAt((3&a)<<4|b>>4&15),result+=framework.base.characters.charAt(d),result+=framework.base.characters.charAt(e)}return result},decode:string=>{let index=0,result="";for(;index>2&15,f=(3&c)<<6|63&framework.base.characters.indexOf(string.charAt(index++));result+=String.fromCharCode((63&a)<<2|b>>4&3),result+=e?String.fromCharCode(e):"",result+=f?String.fromCharCode(f):""}return result}},camel:(string,separator)=>{const pascal=framework.pascal(string,separator);return framework.lower(pascal[0])+pascal.slice(1)},clamp:(number,min,max)=>numbermax?max:number,collect:(...array)=>{const output=new java.util.ArrayList;return array.forEach(entry=>{output.add(entry)}),output},define:(object,consumer)=>{consumer||(consumer=entry=>({get:()=>entry.value,set:value=>{entry.value=value}}));const output={};return framework.entries(object).forEach(entry=>{const info=consumer(entry);info&&Object.defineProperty(output,entry.key,{get(){if(info.get)return info.get()},set(value){info.set&&info.set(value)}})}),output},entries:object=>framework.keys(object).map(key=>({key:key,value:object[key]})),extend:(object,...objects)=>Object.assign(object,...objects),flat:array=>array.filter(entry=>entry),interval:(script,period)=>{const state={iteration:null},loop=()=>{try{script()}catch(error){console.error(error)}state.iteration=framework.timeout(loop,period)};state.iteration=framework.timeout(loop,period);const output={cancel:()=>state.iteration.cancel()};return tasks.push(output),output},key:(object,value)=>framework.keys(object)[framework.values(object).indexOf(value)],keys:object=>Object.keys(object),lower:string=>string.toLowerCase(),match:(object,filter)=>{switch(typeof filter){case"undefined":return!0;case"function":return filter(object);case"object":switch(framework.type(filter)){case"Array":return filter.map(entry=>framework.match(object,entry)).includes(!0);case"Object":return!framework.keys(filter).map(key=>framework.match(object[key],filter[key])).includes(!1);default:return object===filter}default:return object===filter}},mirror:options=>{options||(options={});const mirror=framework.extend(options.array||[],{add:options.add||(()=>{}),remove:options.remove||(()=>{}),clear:options.clear||(()=>{})});return{get:()=>mirror,set:value=>{mirror.clear(),value.forEach(mirror.add)}}},object:(array,consumer)=>(consumer||(consumer=(entry,index)=>({[entry.key||index]:entry.value||entry})),framework.extend({},...framework.flat(framework.array(array).map(consumer)))),pascal:(string,separator)=>string.split(separator).map(chunk=>framework.upper(chunk[0])+framework.lower(chunk.slice(1))).join(""),simplify:(...context)=>{let output=null;const object=context[0];switch(framework.type(object)){case"Array":output=[];for(let entry of object)context.includes(entry)||output.push(framework.simplify(entry,...context));output=framework.flat(output),output.length||(output=null);break;case"Object":output={};for(let key of framework.keys(object))context.includes(object[key])||(output[key]=framework.simplify(object[key],...context));output=framework.strain(output),framework.keys(output).length||(output=null);break;default:output=object}return output},splice:(string,separator,...index)=>string.split(separator).slice(...index).join(separator),strain:(object,consumer)=>(consumer||(consumer=entry=>entry.value),framework.object(framework.entries(object).filter(consumer))),timeout:(script,period)=>{const state={cancel:!1},unit=java.util.concurrent.TimeUnit.MILLISECONDS,runnable=new(Java.extend(Java.type("java.lang.Runnable")))({run:()=>state.cancel||script()});java.util.concurrent.CompletableFuture.delayedExecutor(period,unit).execute(runnable);const output={cancel:()=>state.cancel=!0};return tasks.push(output),output},type:object=>{const type=toString.apply(object).split(" ")[1].slice(0,-1);return"Object"===type?object.constructor.name:type},upper:string=>string.toUpperCase(),uuid:string=>string?java.util.UUID.fromString(string):java.util.UUID.randomUUID(),values:object=>Object.values(object),wrapper:object=>{if(null===object||"object"!=typeof object)return object;{const output={instance:object};framework.entries(object).forEach(entry=>{let index=void 0;if(entry.key.startsWith("is")&&entry.key[2]&&(index=2),entry.key.startsWith("get")&&entry.key[3]&&(index=3),index){let key=entry.key.slice(index);if(key.length){let camel=framework.lower(key[0])+key.slice(1);if(!framework.keys(object).includes(camel))try{entry.value(),Object.defineProperty(output,camel,{get:()=>framework.wrapper(entry.value()),set:value=>object[`set${key}`]&&object[`set${key}`](value)})}catch(error){}}}else Object.defineProperty(output,entry.key,{get:()=>framework.wrapper(entry.value)})});const array=framework.array(object);return framework.keys(array).forEach(index=>{framework.keys(output).includes(index)||Object.defineProperty(output,index,{get:()=>framework.wrapper(array[index])})}),output}}};core.event("org.bukkit.event.server.PluginDisableEvent",event=>{event.getPlugin()===core.plugin&&tasks.forEach(task=>task.cancel())}),core.export(framework)}(); \ No newline at end of file +!function(){const tasks=[],framework={array:object=>{const output=[];if("number"==typeof object.length){if(object.length>0){let index=0;for(;output.length{output.push(entry)}):"function"==typeof object.forEachRemaining&&object.forEachRemaining(entry=>{output.push(entry)});return output},base:{characters:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",encode:string=>{let index=0,result="";for(;index>6&3,e=63&c;b?c||(e=64):d=e=64,result+=framework.base.characters.charAt(a>>2&63),result+=framework.base.characters.charAt((3&a)<<4|b>>4&15),result+=framework.base.characters.charAt(d),result+=framework.base.characters.charAt(e)}return result},decode:string=>{let index=0,result="";for(;index>2&15,f=(3&c)<<6|63&framework.base.characters.indexOf(string.charAt(index++));result+=String.fromCharCode((63&a)<<2|b>>4&3),result+=e?String.fromCharCode(e):"",result+=f?String.fromCharCode(f):""}return result}},camel:(string,separator)=>{const pascal=framework.pascal(string,separator);return framework.lower(pascal[0])+pascal.slice(1)},clamp:(number,min,max)=>numbermax?max:number,collect:(...array)=>{const output=new java.util.ArrayList;return array.forEach(entry=>{output.add(entry)}),output},define:(object,consumer)=>{consumer||(consumer=entry=>({get:()=>entry.value,set:value=>{entry.value=value}}));const output={};return framework.entries(object).forEach(entry=>{const info=consumer(entry);info&&Object.defineProperty(output,entry.key,{get(){if(info.get)return info.get()},set(value){info.set&&info.set(value)}})}),output},entries:object=>framework.keys(object).map(key=>({key:key,value:object[key]})),extend:(object,...objects)=>Object.assign(object,...objects),flat:array=>array.filter(entry=>entry),interval:(script,period)=>{const state={iteration:null},loop=()=>{try{script()}catch(error){console.error(error)}state.iteration=framework.timeout(loop,period)};state.iteration=framework.timeout(loop,period);const output={cancel:()=>state.iteration.cancel()};return tasks.push(output),output},key:(object,value)=>framework.keys(object)[framework.values(object).indexOf(value)],keys:object=>Object.keys(object),lower:string=>string.toLowerCase(),match:(object,filter)=>{switch(typeof filter){case"undefined":return!0;case"function":return filter(object);case"object":switch(framework.type(filter)){case"Array":return filter.map(entry=>framework.match(object,entry)).includes(!0);case"Object":return!framework.keys(filter).map(key=>framework.match(object[key],filter[key])).includes(!1);default:return object===filter}default:return object===filter}},mirror:options=>{options||(options={});const mirror=framework.extend(options.array||[],{add:options.add||(()=>{}),remove:options.remove||(()=>{}),clear:options.clear||(()=>{})});return{get:()=>mirror,set:value=>{mirror.clear(),value.forEach(mirror.add)}}},object:(array,consumer)=>(consumer||(consumer=(entry,index)=>({[entry.key||index]:entry.value||entry})),framework.extend({},...framework.flat(framework.array(array).map(consumer)))),pascal:(string,separator)=>string.split(separator).map(chunk=>framework.upper(chunk[0])+framework.lower(chunk.slice(1))).join(""),simplify:(...context)=>{let output=null;const object=context[0];switch(framework.type(object)){case"Array":output=[];for(let entry of object)context.includes(entry)||output.push(framework.simplify(entry,...context));output=framework.flat(output),output.length||(output=null);break;case"Object":output={};for(let key of framework.keys(object))context.includes(object[key])||(output[key]=framework.simplify(object[key],...context));output=framework.strain(output),framework.keys(output).length||(output=null);break;default:output=object}return output},splice:(string,separator,...index)=>string.split(separator).slice(...index).join(separator),strain:(object,consumer)=>(consumer||(consumer=entry=>entry.value),framework.object(framework.entries(object).filter(consumer))),timeout:(script,period)=>{const state={cancel:!1},unit=java.util.concurrent.TimeUnit.MILLISECONDS,runnable=new(Java.extend(Java.type("java.lang.Runnable")))({run:()=>state.cancel||script()});java.util.concurrent.CompletableFuture.delayedExecutor(period,unit).execute(runnable);const output={cancel:()=>state.cancel=!0};return tasks.push(output),output},type:object=>{const type=toString.apply(object).split(" ")[1].slice(0,-1);return"Object"===type?object.constructor.name:type},upper:string=>string.toUpperCase(),uuid:string=>string?java.util.UUID.fromString(string):java.util.UUID.randomUUID(),values:object=>Object.values(object)};core.event("org.bukkit.event.server.PluginDisableEvent",event=>{event.getPlugin()===core.plugin&&tasks.forEach(task=>task.cancel())}),core.export(framework)}(); \ No newline at end of file