@discordeno/utils 19.0.0-next.ca3defa → 19.0.0-next.ceb3d4d

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.
Files changed (52) hide show
  1. package/README.md +6 -10
  2. package/dist/Collection.js +113 -2
  3. package/dist/Collection.js.map +1 -0
  4. package/dist/base64.js +262 -2
  5. package/dist/base64.js.map +1 -0
  6. package/dist/bucket.d.ts +36 -48
  7. package/dist/bucket.d.ts.map +1 -1
  8. package/dist/bucket.js +76 -2
  9. package/dist/bucket.js.map +1 -0
  10. package/dist/casing.d.ts +2 -2
  11. package/dist/casing.d.ts.map +1 -1
  12. package/dist/casing.js +51 -2
  13. package/dist/casing.js.map +1 -0
  14. package/dist/colors.d.ts +6 -2
  15. package/dist/colors.d.ts.map +1 -1
  16. package/dist/colors.js +467 -2
  17. package/dist/colors.js.map +1 -0
  18. package/dist/hash.d.ts.map +1 -1
  19. package/dist/hash.js +19 -2
  20. package/dist/hash.js.map +1 -0
  21. package/dist/images.d.ts.map +1 -1
  22. package/dist/images.js +66 -2
  23. package/dist/images.js.map +1 -0
  24. package/dist/index.d.ts +0 -1
  25. package/dist/index.d.ts.map +1 -1
  26. package/dist/index.js +16 -2
  27. package/dist/index.js.map +1 -0
  28. package/dist/interactions.d.ts +3 -0
  29. package/dist/interactions.d.ts.map +1 -0
  30. package/dist/interactions.js +41 -0
  31. package/dist/interactions.js.map +1 -0
  32. package/dist/logger.d.ts.map +1 -1
  33. package/dist/logger.js +130 -2
  34. package/dist/logger.js.map +1 -0
  35. package/dist/permissions.js +17 -2
  36. package/dist/permissions.js.map +1 -0
  37. package/dist/reactions.js +11 -2
  38. package/dist/reactions.js.map +1 -0
  39. package/dist/token.d.ts.map +1 -1
  40. package/dist/token.js +16 -2
  41. package/dist/token.js.map +1 -0
  42. package/dist/typeguards.js +15 -2
  43. package/dist/typeguards.js.map +1 -0
  44. package/dist/urlToBase64.js +9 -2
  45. package/dist/urlToBase64.js.map +1 -0
  46. package/dist/utils.d.ts.map +1 -1
  47. package/dist/utils.js +15 -2
  48. package/dist/utils.js.map +1 -0
  49. package/package.json +12 -12
  50. package/dist/files.d.ts +0 -4
  51. package/dist/files.d.ts.map +0 -1
  52. package/dist/files.js +0 -2
package/dist/bucket.js CHANGED
@@ -1,2 +1,76 @@
1
- import{delay as e}from"./utils.js";export function createLeakyBucket({max:e,refillInterval:t,refillAmount:n,tokens:i,waiting:l,...a}){return{max:e,refillInterval:t,refillAmount:n>e?e:n,lastRefill:performance.now(),allowAcquire:!0,nextRefill:function(){return nextRefill(this)},tokens:function(){return updateTokens(this)},acquire:async function(e,t){return await acquire(this,e,t)},tokensState:i??e,waiting:l??[],...a}}export function updateTokens(e){let t=performance.now()-e.lastRefill,n=Math.floor(t/e.refillInterval);return e.tokensState=Math.min(e.tokensState+e.refillAmount*n,e.max),e.lastRefill+=e.refillInterval*n,e.tokensState}export function nextRefill(e){return updateTokens(e),performance.now()-e.lastRefill+e.refillInterval}export async function acquire(t,n,i=!1){if(!t.allowAcquire&&(await new Promise(e=>{i?t.waiting.unshift(e):t.waiting.push(e)}),!t.allowAcquire))return await acquire(t,n);t.allowAcquire=!1;let l=updateTokens(t);if(l<n){let a=Math.ceil((n-l)/t.refillAmount),r=t.refillInterval*a;await e(r),updateTokens(t)}let o=(n%t.refillAmount)??n;t.tokensState-=o,t.allowAcquire=!0,t.waiting.shift()?.()}
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9idWNrZXQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBQaWNrUGFydGlhbCB9IGZyb20gJ0BkaXNjb3JkZW5vL3R5cGVzJ1xuaW1wb3J0IHsgZGVsYXkgfSBmcm9tICcuL3V0aWxzLmpzJ1xuXG4vKiogQSBMZWFreSBCdWNrZXQuXG4gKiBVc2VmdWwgZm9yIHJhdGUgbGltaXRpbmcgcHVycG9zZXMuXG4gKiBUaGlzIHVzZXMgYHBlcmZvcm1hbmNlLm5vdygpYCBpbnN0ZWFkIG9mIGBEYXRlLm5vdygpYCBmb3IgaGlnaGVyIGFjY3VyYWN5LlxuICpcbiAqIE5PVEU6IFRoaXMgYnVja2V0IGlzIGxhenksIG1lYW5zIGl0IG9ubHkgdXBkYXRlcyB3aGVuIGEgcmVsYXRlZCBtZXRob2QgaXMgY2FsbGVkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExlYWt5QnVja2V0IHtcbiAgLyoqIEhvdyBtYW55IHRva2VucyB0aGlzIGJ1Y2tldCBjYW4gaG9sZC4gKi9cbiAgbWF4OiBudW1iZXJcbiAgLyoqIEFtb3VudCBvZiB0b2tlbnMgZ2FpbmVkIHBlciBpbnRlcnZhbC5cbiAgICogSWYgYmlnZ2VyIHRoYW4gYG1heGAgaXQgd2lsbCBiZSBwcmVzc2VkIHRvIGBtYXhgLlxuICAgKi9cbiAgcmVmaWxsQW1vdW50OiBudW1iZXJcbiAgLyoqIEludGVydmFsIGF0IHdoaWNoIHRoZSBidWNrZXQgZ2FpbnMgdG9rZW5zLiAqL1xuICByZWZpbGxJbnRlcnZhbDogbnVtYmVyXG5cbiAgLyoqIEFjcXVpcmUgdG9rZW5zIGZyb20gdGhlIGJ1Y2tldC5cbiAgICogUmVzb2x2ZXMgd2hlbiB0aGUgdG9rZW5zIGFyZSBhY3F1aXJlZCBhbmQgYXZhaWxhYmxlLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtoaWdoUHJpb3JpdHk9ZmFsc2VdIFdoZXRoZXIgdGhpcyBhY3F1aXJlIGlzIHNob3VsZCBiZSBkb25lIGFzYXAuXG4gICAqL1xuICBhY3F1aXJlOiAoYW1vdW50OiBudW1iZXIsIGhpZ2hQcmlvcml0eT86IGJvb2xlYW4pID0+IFByb21pc2U8dm9pZD5cblxuICAvKiogUmV0dXJucyB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB1bnRpbCB0aGUgbmV4dCByZWZpbGwuICovXG4gIG5leHRSZWZpbGw6ICgpID0+IG51bWJlclxuXG4gIC8qKiBDdXJyZW50IHRva2VucyBpbiB0aGUgYnVja2V0LiAqL1xuICB0b2tlbnM6ICgpID0+IG51bWJlclxuXG4gIC8qKiBAcHJpdmF0ZSBJbnRlcm5hbCB0cmFjayBvZiB3aGVuIHRoZSBsYXN0IHJlZmlsbCBvZiB0b2tlbnMgd2FzLlxuICAgKiBETyBOT1QgVE9VQ0ggVEhJUyEgVW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZyBvZmMgOlBcbiAgICovXG4gIGxhc3RSZWZpbGw6IG51bWJlclxuXG4gIC8qKiBAcHJpdmF0ZSBJbnRlcm5hbCBzdGF0ZSBvZiB3aGV0aGVyIGN1cnJlbnRseSBpdCBpcyBhbGxvd2VkIHRvIGFjcXVpcmUgdG9rZW5zLlxuICAgKiBETyBOT1QgVE9VQ0ggVEhJUyEgVW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZyBvZmMgOlBcbiAgICovXG4gIGFsbG93QWNxdWlyZTogYm9vbGVhblxuXG4gIC8qKiBAcHJpdmF0ZSBJbnRlcm5hbCBudW1iZXIgb2YgY3VycmVudGx5IGF2YWlsYWJsZSB0b2tlbnMuXG4gICAqIERPIE5PVCBUT1VDSCBUSElTISBVbmxlc3MgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nIG9mYyA6UFxuICAgKi9cbiAgdG9rZW5zU3RhdGU6IG51bWJlclxuXG4gIC8qKiBAcHJpdmF0ZSBJbnRlcm5hbCBhcnJheSBvZiBwcm9taXNlcyBuZWNlc3NhcnkgdG8gZ3VhcmFudGVlIG5vIHJhY2UgY29uZGl0aW9ucy5cbiAgICogRE8gTk9UIFRPVUNIIFRISVMhIFVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcgb2ZjIDpQXG4gICAqL1xuICB3YWl0aW5nOiBBcnJheTwoXz86IHVua25vd24pID0+IHZvaWQ+XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVMZWFreUJ1Y2tldCh7XG4gIG1heCxcbiAgcmVmaWxsSW50ZXJ2YWwsXG4gIHJlZmlsbEFtb3VudCxcbiAgdG9rZW5zLFxuICB3YWl0aW5nLFxuICAuLi5yZXN0XG59OiBPbWl0PFBpY2tQYXJ0aWFsPExlYWt5QnVja2V0LCAnbWF4JyB8ICdyZWZpbGxJbnRlcnZhbCcgfCAncmVmaWxsQW1vdW50Jz4sICd0b2tlbnMnPiAmIHtcbiAgLyoqIEN1cnJlbnQgdG9rZW5zIGluIHRoZSBidWNrZXQuXG4gICAqIEBkZWZhdWx0IG1heFxuICAgKi9cbiAgdG9rZW5zPzogbnVtYmVyXG59KTogTGVha3lCdWNrZXQge1xuICByZXR1cm4ge1xuICAgIG1heCxcbiAgICByZWZpbGxJbnRlcnZhbCxcbiAgICByZWZpbGxBbW91bnQ6IHJlZmlsbEFtb3VudCA+IG1heCA/IG1heCA6IHJlZmlsbEFtb3VudCxcbiAgICBsYXN0UmVmaWxsOiBwZXJmb3JtYW5jZS5ub3coKSxcbiAgICBhbGxvd0FjcXVpcmU6IHRydWUsXG5cbiAgICBuZXh0UmVmaWxsOiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gbmV4dFJlZmlsbCh0aGlzKVxuICAgIH0sXG5cbiAgICB0b2tlbnM6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB1cGRhdGVUb2tlbnModGhpcylcbiAgICB9LFxuXG4gICAgYWNxdWlyZTogYXN5bmMgZnVuY3Rpb24gKGFtb3VudCwgaGlnaFByaW9yaXR5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgYWNxdWlyZSh0aGlzLCBhbW91bnQsIGhpZ2hQcmlvcml0eSlcbiAgICB9LFxuXG4gICAgdG9rZW5zU3RhdGU6IHRva2VucyA/PyBtYXgsXG4gICAgd2FpdGluZzogd2FpdGluZyA/PyBbXSxcblxuICAgIC4uLnJlc3QsXG4gIH1cbn1cblxuLyoqIFVwZGF0ZSB0aGUgdG9rZW5zIG9mIHRoYXQgYnVja2V0LlxuICogQHJldHVybnMge251bWJlcn0gVGhlIGFtb3VudCBvZiBjdXJyZW50IGF2YWlsYWJsZSB0b2tlbnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVUb2tlbnMoYnVja2V0OiBMZWFreUJ1Y2tldCk6IG51bWJlciB7XG4gIGNvbnN0IHRpbWVQYXNzZWQgPSBwZXJmb3JtYW5jZS5ub3coKSAtIGJ1Y2tldC5sYXN0UmVmaWxsXG4gIGNvbnN0IG1pc3NlZFJlZmlsbHMgPSBNYXRoLmZsb29yKHRpbWVQYXNzZWQgLyBidWNrZXQucmVmaWxsSW50ZXJ2YWwpXG5cbiAgLy8gVGhlIHJlZmlsbCBzaGFsbCBub3QgZXhjZWVkIHRoZSBtYXggYW1vdW50IG9mIHRva2Vucy5cbiAgYnVja2V0LnRva2Vuc1N0YXRlID0gTWF0aC5taW4oYnVja2V0LnRva2Vuc1N0YXRlICsgYnVja2V0LnJlZmlsbEFtb3VudCAqIG1pc3NlZFJlZmlsbHMsIGJ1Y2tldC5tYXgpXG4gIGJ1Y2tldC5sYXN0UmVmaWxsICs9IGJ1Y2tldC5yZWZpbGxJbnRlcnZhbCAqIG1pc3NlZFJlZmlsbHNcblxuICByZXR1cm4gYnVja2V0LnRva2Vuc1N0YXRlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuZXh0UmVmaWxsKGJ1Y2tldDogTGVha3lCdWNrZXQpOiBudW1iZXIge1xuICAvLyBTaW5jZSB0aGlzIGJ1Y2tldCBpcyBsYXp5IHVwZGF0ZSB0aGUgdG9rZW5zIGJlZm9yZSBjYWxjdWxhdGluZyB0aGUgbmV4dCByZWZpbGwuXG4gIHVwZGF0ZVRva2VucyhidWNrZXQpXG5cbiAgcmV0dXJuIHBlcmZvcm1hbmNlLm5vdygpIC0gYnVja2V0Lmxhc3RSZWZpbGwgKyBidWNrZXQucmVmaWxsSW50ZXJ2YWxcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFjcXVpcmUoYnVja2V0OiBMZWFreUJ1Y2tldCwgYW1vdW50OiBudW1iZXIsIGhpZ2hQcmlvcml0eSA9IGZhbHNlKTogUHJvbWlzZTx2b2lkPiB7XG4gIC8vIFRvIHByZXZlbnQgdGhlIHJhY2UgY29uZGl0aW9uIG9mIDIgYWNxdWlyZXMgaGFwcGVuaW5nIGF0IG9uY2UsXG4gIC8vIGNoZWNrIHdoZXRoZXIgaXRzIGN1cnJlbnRseSBhbGxvd2VkIHRvIGFjcXVpcmUuXG4gIGlmICghYnVja2V0LmFsbG93QWNxdWlyZSkge1xuICAgIC8vIGNyZWF0ZSwgcHVzaCwgYW5kIHdhaXQgdW50aWwgdGhlIGN1cnJlbnQgcnVubmluZyBhY3F1aXJpbmcgaXMgZmluaXNoZWQuXG4gICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIGlmIChoaWdoUHJpb3JpdHkpIHtcbiAgICAgICAgYnVja2V0LndhaXRpbmcudW5zaGlmdChyZXNvbHZlKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYnVja2V0LndhaXRpbmcucHVzaChyZXNvbHZlKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICAvLyBTb21laG93IGFub3RoZXIgYWNxdWlyZSBoYXMgc3RhcnRlZCxcbiAgICAvLyBzbyBuZWVkIHRvIHdhaXQgYWdhaW4uXG4gICAgaWYgKCFidWNrZXQuYWxsb3dBY3F1aXJlKSB7XG4gICAgICByZXR1cm4gYXdhaXQgYWNxdWlyZShidWNrZXQsIGFtb3VudClcbiAgICB9XG4gIH1cblxuICBidWNrZXQuYWxsb3dBY3F1aXJlID0gZmFsc2VcbiAgLy8gU2luY2UgdGhlIGJ1Y2tldCBpcyBsYXp5IHVwZGF0ZSB0aGUgdG9rZW5zIG5vdyxcbiAgLy8gYW5kIGFsc28gZ2V0IHRoZSBjdXJyZW50IGFtb3VudCBvZiBhdmFpbGFibGUgdG9rZW5zXG4gIGNvbnN0IGN1cnJlbnRUb2tlbnMgPSB1cGRhdGVUb2tlbnMoYnVja2V0KVxuXG4gIC8vIEl0J3MgcG9zc2libGUgdGhhdCBtb3JlIHRoYW4gYXZhaWxhYmxlIHRva2VucyBoYXZlIGJlZW4gYWNxdWlyZWQsXG4gIC8vIHNvIGNhbGN1bGF0ZSB0aGUgYW1vdW50IG9mIG1pbGxpc2Vjb25kcyB0byB3YWl0IHVudGlsIHRoaXMgYWNxdWlyZSBpcyBnb29kIHRvIGdvLlxuICBpZiAoY3VycmVudFRva2VucyA8IGFtb3VudCkge1xuICAgIGNvbnN0IHRva2Vuc05lZWRlZCA9IGFtb3VudCAtIGN1cnJlbnRUb2tlbnNcbiAgICBjb25zdCByZWZpbGxzTmVlZGVkID0gTWF0aC5jZWlsKHRva2Vuc05lZWRlZCAvIGJ1Y2tldC5yZWZpbGxBbW91bnQpXG5cbiAgICBjb25zdCB3YWl0VGltZSA9IGJ1Y2tldC5yZWZpbGxJbnRlcnZhbCAqIHJlZmlsbHNOZWVkZWRcbiAgICBhd2FpdCBkZWxheSh3YWl0VGltZSlcblxuICAgIC8vIFVwZGF0ZSB0aGUgdG9rZW5zIGFnYWluIHRvIGVuc3VyZSBub3RoaW5nIGhhcyBiZWVuIG1pc3NlZC5cbiAgICB1cGRhdGVUb2tlbnMoYnVja2V0KVxuICB9XG5cbiAgLy8gSW4gb3JkZXIgdG8gbm90IHN1YnRyYWN0IHRvbyBtdWNoIGZyb20gdGhlIHRva2VucyxcbiAgLy8gY2FsY3VsYXRlIHdoYXQgaXMgYWN0dWFsbHkgbmVlZGVkIHRvIHN1YnRyYWN0LlxuICBjb25zdCB0b1N1YnRyYWN0ID0gYW1vdW50ICUgYnVja2V0LnJlZmlsbEFtb3VudCA/PyBhbW91bnRcbiAgYnVja2V0LnRva2Vuc1N0YXRlIC09IHRvU3VidHJhY3RcblxuICAvLyBBbGxvdyB0aGUgbmV4dCBhY3F1aXJlIHRvIGhhcHBlbi5cbiAgYnVja2V0LmFsbG93QWNxdWlyZSA9IHRydWVcbiAgLy8gSWYgdGhlcmUgaXMgYW4gYWNxdWlyZSB3YWl0aW5nLCBsZXQgaXQgY29udGludWUuXG4gIGJ1Y2tldC53YWl0aW5nLnNoaWZ0KCk/LigpXG59XG4iXSwibmFtZXMiOlsiZGVsYXkiLCJjcmVhdGVMZWFreUJ1Y2tldCIsIm1heCIsInJlZmlsbEludGVydmFsIiwicmVmaWxsQW1vdW50IiwidG9rZW5zIiwid2FpdGluZyIsInJlc3QiLCJsYXN0UmVmaWxsIiwicGVyZm9ybWFuY2UiLCJub3ciLCJhbGxvd0FjcXVpcmUiLCJuZXh0UmVmaWxsIiwidXBkYXRlVG9rZW5zIiwiYWNxdWlyZSIsImFtb3VudCIsImhpZ2hQcmlvcml0eSIsInRva2Vuc1N0YXRlIiwiYnVja2V0IiwidGltZVBhc3NlZCIsIm1pc3NlZFJlZmlsbHMiLCJNYXRoIiwiZmxvb3IiLCJtaW4iLCJQcm9taXNlIiwicmVzb2x2ZSIsInVuc2hpZnQiLCJwdXNoIiwiY3VycmVudFRva2VucyIsInJlZmlsbHNOZWVkZWQiLCJjZWlsIiwidG9rZW5zTmVlZGVkIiwid2FpdFRpbWUiLCJ0b1N1YnRyYWN0Iiwic2hpZnQiXSwibWFwcGluZ3MiOiJBQUNBLE9BQVNBLFNBQUFBLENBQUssS0FBUSxZQUFZLEFBbURsQyxRQUFPLFNBQVNDLGtCQUFrQixDQUNoQ0MsSUFBQUEsQ0FBRyxDQUNIQyxlQUFBQSxDQUFjLENBQ2RDLGFBQUFBLENBQVksQ0FDWkMsT0FBQUEsQ0FBTSxDQUNOQyxRQUFBQSxDQUFPLENBQ1AsR0FBR0MsRUFNSixDQUFlLENBQ2QsTUFBTyxDQUNMTCxJQUFBQSxFQUNBQyxlQUFBQSxFQUNBQyxhQUFjQSxFQUFlRixFQUFNQSxFQUFNRSxDQUFZLENBQ3JESSxXQUFZQyxZQUFZQyxHQUFHLEdBQzNCQyxhQUFjLENBQUEsRUFFZEMsV0FBWSxVQUFZLENBQ3RCLE9BQU9BLFdBQVcsSUFBSSxDQUN4QixFQUVBUCxPQUFRLFVBQVksQ0FDbEIsT0FBT1EsYUFBYSxJQUFJLENBQzFCLEVBRUFDLFFBQVMsZUFBZ0JDLENBQU0sQ0FBRUMsQ0FBWSxDQUFFLENBQzdDLE9BQU8sTUFBTUYsUUFBUSxJQUFJLENBQUVDLEVBQVFDLEVBQ3JDLEVBRUFDLFlBQWFaLEdBQVVILEVBQ3ZCSSxRQUFTQSxHQUFXLEVBQUUsQ0FFdEIsR0FBR0MsQ0FBSSxBQUNULENBQ0YsQ0FBQyxBQUtELE9BQU8sU0FBU00sYUFBYUssQ0FBbUIsQ0FBVSxDQUN4RCxJQUFNQyxFQUFhVixZQUFZQyxHQUFHLEdBQUtRLEVBQU9WLFVBQVUsQ0FDbERZLEVBQWdCQyxLQUFLQyxLQUFLLENBQUNILEVBQWFELEVBQU9mLGNBQWMsRUFNbkUsT0FIQWUsRUFBT0QsV0FBVyxDQUFHSSxLQUFLRSxHQUFHLENBQUNMLEVBQU9ELFdBQVcsQ0FBR0MsRUFBT2QsWUFBWSxDQUFHZ0IsRUFBZUYsRUFBT2hCLEdBQUcsRUFDbEdnQixFQUFPVixVQUFVLEVBQUlVLEVBQU9mLGNBQWMsQ0FBR2lCLEVBRXRDRixFQUFPRCxXQUFXLEFBQzNCLENBQUMsQUFFRCxPQUFPLFNBQVNMLFdBQVdNLENBQW1CLENBQVUsQ0FJdEQsT0FGQUwsYUFBYUssR0FFTlQsWUFBWUMsR0FBRyxHQUFLUSxFQUFPVixVQUFVLENBQUdVLEVBQU9mLGNBQWMsQUFDdEUsQ0FBQyxBQUVELE9BQU8sZUFBZVcsUUFBUUksQ0FBbUIsQ0FBRUgsQ0FBYyxDQUFFQyxFQUFlLENBQUEsQ0FBSyxDQUFpQixDQUd0RyxHQUFJLENBQUNFLEVBQU9QLFlBQVksR0FFdEIsTUFBTSxJQUFJYSxRQUFRLEFBQUNDLEdBQVksQ0FDekJULEVBQ0ZFLEVBQU9aLE9BQU8sQ0FBQ29CLE9BQU8sQ0FBQ0QsR0FFdkJQLEVBQU9aLE9BQU8sQ0FBQ3FCLElBQUksQ0FBQ0YsRUFFeEIsR0FJSSxDQUFDUCxFQUFPUCxZQUFZLEVBQ3RCLE9BQU8sTUFBTUcsUUFBUUksRUFBUUgsRUFFaEMsQUFFREcsQ0FBQUEsRUFBT1AsWUFBWSxDQUFHLENBQUEsRUFHdEIsSUFBTWlCLEVBQWdCZixhQUFhSyxHQUluQyxHQUFJVSxFQUFnQmIsRUFBUSxDQUUxQixJQUFNYyxFQUFnQlIsS0FBS1MsSUFBSSxDQUFDQyxBQURYaEIsQ0FBQUEsRUFBU2EsQ0FBWSxFQUNLVixFQUFPZCxZQUFZLEVBRTVENEIsRUFBV2QsRUFBT2YsY0FBYyxDQUFHMEIsQ0FDekMsT0FBTTdCLEVBQU1nQyxHQUdabkIsYUFBYUssRUFDZixDQUFDLEFBSUQsSUFBTWUsRUFBYWxCLENBQUFBLEVBQVNHLEVBQU9kLFlBQVksQUFBRCxHQUFLVyxDQUNuREcsQ0FBQUEsRUFBT0QsV0FBVyxFQUFJZ0IsRUFHdEJmLEVBQU9QLFlBQVksQ0FBRyxDQUFBLEVBRXRCTyxFQUFPWixPQUFPLENBQUM0QixLQUFLLE1BQ3RCLENBQUMifQ==
1
+ import logger from './logger.js';
2
+ import { delay } from './utils.js';
3
+ export class LeakyBucket {
4
+ constructor(options){
5
+ /** The amount of requests that have been used up already. */ this.used = 0;
6
+ /** The queue of requests to acquire an available request. Mapped by <shardId, resolve()> */ this.queue = [];
7
+ /** Whether or not the queue is already processing. */ this.processing = false;
8
+ this.max = options?.max ?? 1;
9
+ this.refillAmount = options?.refillAmount ? options.refillAmount > this.max ? this.max : options.refillAmount : 1;
10
+ this.refillInterval = options?.refillInterval ?? 5000;
11
+ }
12
+ /** The amount of requests that still remain. */ get remaining() {
13
+ return this.max < this.used ? 0 : this.max - this.used;
14
+ }
15
+ /** Refills the bucket as needed. */ refillBucket() {
16
+ logger.debug(`[LeakyBucket] Timeout for leaky bucket requests executed. Refilling bucket.`);
17
+ // Lower the used amount by the refill amount
18
+ this.used = this.refillAmount > this.used ? 0 : this.used - this.refillAmount;
19
+ // Reset the refillsAt timestamp since it just got refilled
20
+ this.refillsAt = undefined;
21
+ // Reset the timeoutId
22
+ clearTimeout(this.timeoutId);
23
+ this.timeoutId = undefined;
24
+ if (this.used > 0) {
25
+ this.timeoutId = setTimeout(()=>{
26
+ this.refillBucket();
27
+ }, this.refillInterval);
28
+ this.refillsAt = Date.now() + this.refillInterval;
29
+ }
30
+ }
31
+ /** Begin processing the queue. */ async processQueue() {
32
+ logger.debug('[Gateway] Processing queue');
33
+ // There is already a queue that is processing
34
+ if (this.processing) return logger.debug('[Gateway] Queue is already processing.');
35
+ // Begin going through the queue.
36
+ while(this.queue.length){
37
+ if (this.remaining) {
38
+ logger.debug(`[LeakyBucket] Processing queue. Remaining: ${this.remaining} Length: ${this.queue.length}`);
39
+ // Resolves the promise allowing the paused execution of this request to resolve and continue.
40
+ this.queue.shift()?.();
41
+ // A request can be made
42
+ this.used++;
43
+ // Create a new timeout for this request if none exists.
44
+ if (!this.timeoutId) {
45
+ logger.debug(`[LeakyBucket] Creating new timeout for leaky bucket requests.`);
46
+ this.timeoutId = setTimeout(()=>{
47
+ this.refillBucket();
48
+ }, this.refillInterval);
49
+ // Set the time for when this refill will occur.
50
+ this.refillsAt = Date.now() + this.refillInterval;
51
+ }
52
+ } else if (this.refillsAt) {
53
+ const now = Date.now();
54
+ // If there is time left until next refill, just delay execution.
55
+ if (this.refillsAt > now) {
56
+ logger.debug(`[LeakyBucket] Delaying execution of leaky bucket requests for ${this.refillsAt - now}ms`);
57
+ await delay(this.refillsAt - now);
58
+ logger.debug(`[LeakyBucket] Resuming execution`);
59
+ }
60
+ }
61
+ }
62
+ // Loop has ended mark false so it can restart later when needed
63
+ this.processing = false;
64
+ }
65
+ /** Pauses the execution until the request is available to be made. */ async acquire(highPriority) {
66
+ return await new Promise((resolve)=>{
67
+ // High priority requests get added to the start of the queue
68
+ if (highPriority) this.queue.unshift(resolve);
69
+ else this.queue.push(resolve);
70
+ // Each request should trigger the queue to be processesd.
71
+ void this.processQueue();
72
+ });
73
+ }
74
+ }
75
+
76
+ //# sourceMappingURL=bucket.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/bucket.ts"],"sourcesContent":["import logger from './logger.js'\nimport { delay } from './utils.js'\n\nexport class LeakyBucket implements LeakyBucketOptions {\n max: number\n refillInterval: number\n refillAmount: number\n\n /** The amount of requests that have been used up already. */\n used: number = 0\n /** The queue of requests to acquire an available request. Mapped by <shardId, resolve()> */\n queue: Array<(value: void | PromiseLike<void>) => void> = []\n /** Whether or not the queue is already processing. */\n processing: boolean = false\n /** The timeout id for the timer to reduce the used amount by the refill amount. */\n timeoutId?: NodeJS.Timeout\n /** The timestamp in milliseconds when the next refill is scheduled. */\n refillsAt?: number\n\n constructor(options?: LeakyBucketOptions) {\n this.max = options?.max ?? 1\n this.refillAmount = options?.refillAmount ? (options.refillAmount > this.max ? this.max : options.refillAmount) : 1\n this.refillInterval = options?.refillInterval ?? 5000\n }\n\n /** The amount of requests that still remain. */\n get remaining(): number {\n return this.max < this.used ? 0 : this.max - this.used\n }\n\n /** Refills the bucket as needed. */\n refillBucket(): void {\n logger.debug(`[LeakyBucket] Timeout for leaky bucket requests executed. Refilling bucket.`)\n // Lower the used amount by the refill amount\n this.used = this.refillAmount > this.used ? 0 : this.used - this.refillAmount\n // Reset the refillsAt timestamp since it just got refilled\n this.refillsAt = undefined\n // Reset the timeoutId\n clearTimeout(this.timeoutId)\n this.timeoutId = undefined;\n\n if (this.used > 0) {\n this.timeoutId = setTimeout(() => {\n this.refillBucket()\n }, this.refillInterval)\n this.refillsAt = Date.now() + this.refillInterval\n }\n }\n\n /** Begin processing the queue. */\n async processQueue(): Promise<void> {\n logger.debug('[Gateway] Processing queue')\n // There is already a queue that is processing\n if (this.processing) return logger.debug('[Gateway] Queue is already processing.')\n\n // Begin going through the queue.\n while (this.queue.length) {\n if (this.remaining) {\n logger.debug(`[LeakyBucket] Processing queue. Remaining: ${this.remaining} Length: ${this.queue.length}`)\n // Resolves the promise allowing the paused execution of this request to resolve and continue.\n this.queue.shift()?.()\n // A request can be made\n this.used++\n\n // Create a new timeout for this request if none exists.\n if (!this.timeoutId) {\n logger.debug(`[LeakyBucket] Creating new timeout for leaky bucket requests.`)\n\n this.timeoutId = setTimeout(() => {\n this.refillBucket()\n }, this.refillInterval)\n // Set the time for when this refill will occur.\n this.refillsAt = Date.now() + this.refillInterval\n }\n }\n\n // Check if a refill is scheduled, since we have used up all available requests\n else if (this.refillsAt) {\n const now = Date.now()\n // If there is time left until next refill, just delay execution.\n if (this.refillsAt > now) {\n logger.debug(`[LeakyBucket] Delaying execution of leaky bucket requests for ${this.refillsAt - now}ms`)\n await delay(this.refillsAt - now)\n logger.debug(`[LeakyBucket] Resuming execution`)\n }\n }\n }\n\n // Loop has ended mark false so it can restart later when needed\n this.processing = false\n }\n\n /** Pauses the execution until the request is available to be made. */\n async acquire(highPriority?: boolean): Promise<void> {\n return await new Promise((resolve) => {\n // High priority requests get added to the start of the queue\n if (highPriority) this.queue.unshift(resolve)\n // All other requests get pushed to the end.\n else this.queue.push(resolve)\n\n // Each request should trigger the queue to be processesd.\n void this.processQueue()\n })\n }\n}\n\nexport interface LeakyBucketOptions {\n /**\n * Max requests allowed at once.\n * @default 1\n */\n max?: number\n /**\n * Interval in milliseconds between refills.\n * @default 5000\n */\n refillInterval?: number\n /**\n * Amount of requests to refill at each interval.\n * @default 1\n */\n refillAmount?: number\n}\n"],"names":["logger","delay","LeakyBucket","constructor","options","used","queue","processing","max","refillAmount","refillInterval","remaining","refillBucket","debug","refillsAt","undefined","clearTimeout","timeoutId","setTimeout","Date","now","processQueue","length","shift","acquire","highPriority","Promise","resolve","unshift","push"],"mappings":"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"}
package/dist/casing.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import type { Camelize, Snakelize } from '@discordeno/types';
2
- export declare const camelize: <T>(object: T) => Camelize<T>;
3
- export declare const snakelize: <T>(object: T) => Snakelize<T>;
2
+ export declare function camelize<T>(object: T): Camelize<T>;
3
+ export declare function snakelize<T>(object: T): Snakelize<T>;
4
4
  export declare function snakeToCamelCase(str: string): string;
5
5
  export declare function camelToSnakeCase(str: string): string;
6
6
  //# sourceMappingURL=casing.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"casing.d.ts","sourceRoot":"","sources":["../src/casing.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAE7D,eAAO,MAAM,QAAQ,+BAcpB,CAAA;AAGD,eAAO,MAAM,SAAS,gCAerB,CAAA;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAepD;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAapD"}
1
+ {"version":3,"file":"casing.d.ts","sourceRoot":"","sources":["../src/casing.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAE5D,wBAAgB,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAclD;AAED,wBAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAcpD;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAepD;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAapD"}
package/dist/casing.js CHANGED
@@ -1,2 +1,51 @@
1
- export const camelize=e=>{if(Array.isArray(e))return e.map(e=>camelize(e));if("object"==typeof e&&null!==e){let t={};return Object.keys(e).forEach(r=>{t["string"==typeof r?snakeToCamelCase(r):r]=camelize(e[r])}),t}return e};export const snakelize=e=>{if(Array.isArray(e))return e.map(e=>snakelize(e));if("object"==typeof e&&null!==e){let t={};return Object.keys(e).forEach(r=>{t["string"==typeof r?camelToSnakeCase(r):r]=snakelize(e[r])}),t}return e};export function snakeToCamelCase(e){if(!e.includes("_"))return e;let t="";for(let r=0,n=e.length;r<n;++r){if("_"===e[r]){t+=e[++r].toUpperCase();continue}t+=e[r]}return t}export function camelToSnakeCase(e){let t="";for(let r=0,n=e.length;r<n;++r){if(e[r]>="A"&&e[r]<="Z"){t+=`_${e[r].toLowerCase()}`;continue}t+=e[r]}return t}
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9jYXNpbmcudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBDYW1lbGl6ZSwgU25ha2VsaXplIH0gZnJvbSAnQGRpc2NvcmRlbm8vdHlwZXMnO1xuXG5leHBvcnQgY29uc3QgY2FtZWxpemUgPSA8VD4ob2JqZWN0OiBUKTogQ2FtZWxpemU8VD4gPT4ge1xuICBpZiAoQXJyYXkuaXNBcnJheShvYmplY3QpKSB7XG4gICAgcmV0dXJuIG9iamVjdC5tYXAoKGVsZW1lbnQpID0+IGNhbWVsaXplKGVsZW1lbnQpKSBhcyBDYW1lbGl6ZTxUPlxuICB9XG5cbiAgaWYgKHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmIG9iamVjdCAhPT0gbnVsbCkge1xuICAgIGNvbnN0IG9iaiA9IHt9IGFzIENhbWVsaXplPFQ+XG4gICAgOyhPYmplY3Qua2V5cyhvYmplY3QpIGFzIEFycmF5PGtleW9mIFQ+KS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IganMgaGFja1xuICAgICAgOyhvYmpbdHlwZW9mIGtleSA9PT0gJ3N0cmluZycgPyBzbmFrZVRvQ2FtZWxDYXNlKGtleSkgOiBrZXldIGFzIENhbWVsaXplPChUICYgb2JqZWN0KVtrZXlvZiBUXT4pID0gY2FtZWxpemUob2JqZWN0W2tleV0pXG4gICAgfSlcbiAgICByZXR1cm4gb2JqXG4gIH1cbiAgcmV0dXJuIG9iamVjdCBhcyBDYW1lbGl6ZTxUPlxufVxuXG5cbmV4cG9ydCBjb25zdCBzbmFrZWxpemUgPSA8VD4ob2JqZWN0OiBUKTogU25ha2VsaXplPFQ+ID0+IHtcbiAgaWYgKEFycmF5LmlzQXJyYXkob2JqZWN0KSkge1xuICAgIHJldHVybiBvYmplY3QubWFwKChlbGVtZW50KSA9PiBzbmFrZWxpemUoZWxlbWVudCkpIGFzIFNuYWtlbGl6ZTxUPlxuICB9XG5cbiAgaWYgKHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmIG9iamVjdCAhPT0gbnVsbCkge1xuICAgIGNvbnN0IG9iaiA9IHt9IGFzIFNuYWtlbGl6ZTxUPlxuICAgIDsoT2JqZWN0LmtleXMob2JqZWN0KSBhcyBBcnJheTxrZXlvZiBUPikuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGpzIGhhY2tcblxuICAgICAgOyhvYmpbdHlwZW9mIGtleSA9PT0gJ3N0cmluZycgPyBjYW1lbFRvU25ha2VDYXNlKGtleSkgOiBrZXldIGFzIFNuYWtlbGl6ZTwoVCAmIG9iamVjdClba2V5b2YgVF0+KSA9IHNuYWtlbGl6ZShvYmplY3Rba2V5XSlcbiAgICB9KVxuICAgIHJldHVybiBvYmpcbiAgfVxuICByZXR1cm4gb2JqZWN0IGFzIFNuYWtlbGl6ZTxUPlxufVxuXG5leHBvcnQgZnVuY3Rpb24gc25ha2VUb0NhbWVsQ2FzZShzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmICghc3RyLmluY2x1ZGVzKCdfJykpIHJldHVybiBzdHJcblxuICBsZXQgcmVzdWx0ID0gJydcbiAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHN0ci5sZW5ndGg7IGkgPCBsZW47ICsraSkge1xuICAgIGlmIChzdHJbaV0gPT09ICdfJykge1xuICAgICAgcmVzdWx0ICs9IHN0clsrK2ldLnRvVXBwZXJDYXNlKClcblxuICAgICAgY29udGludWVcbiAgICB9XG5cbiAgICByZXN1bHQgKz0gc3RyW2ldXG4gIH1cblxuICByZXR1cm4gcmVzdWx0XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjYW1lbFRvU25ha2VDYXNlKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgbGV0IHJlc3VsdCA9IFwiXCI7XG4gIGZvciAobGV0IGkgPSAwLCBsZW4gPSBzdHIubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHtcbiAgICAgIGlmIChzdHJbaV0gPj0gXCJBXCIgJiYgc3RyW2ldIDw9IFwiWlwiKSB7XG4gICAgICAgICAgcmVzdWx0ICs9IGBfJHtzdHJbaV0udG9Mb3dlckNhc2UoKX1gO1xuXG4gICAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHJlc3VsdCArPSBzdHJbaV07XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuIl0sIm5hbWVzIjpbImNhbWVsaXplIiwib2JqZWN0IiwiQXJyYXkiLCJpc0FycmF5IiwibWFwIiwiZWxlbWVudCIsIm9iaiIsIk9iamVjdCIsImtleXMiLCJmb3JFYWNoIiwia2V5Iiwic25ha2VUb0NhbWVsQ2FzZSIsInNuYWtlbGl6ZSIsImNhbWVsVG9TbmFrZUNhc2UiLCJzdHIiLCJpbmNsdWRlcyIsInJlc3VsdCIsImkiLCJsZW4iLCJsZW5ndGgiLCJ0b1VwcGVyQ2FzZSIsInRvTG93ZXJDYXNlIl0sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLE1BQU1BLFNBQVcsQUFBSUMsR0FBMkIsQ0FDckQsR0FBSUMsTUFBTUMsT0FBTyxDQUFDRixHQUNoQixPQUFPQSxFQUFPRyxHQUFHLENBQUMsQUFBQ0MsR0FBWUwsU0FBU0ssR0FDekMsQ0FFRCxHQUFJLEFBQWtCLFVBQWxCLE9BQU9KLEdBQXVCQSxBQUFXLElBQUksR0FBZkEsRUFBaUIsQ0FDakQsSUFBTUssRUFBTSxDQUFDLEVBS2IsT0FKQyxBQUFDQyxPQUFPQyxJQUFJLENBQUNQLEdBQTJCUSxPQUFPLENBQUMsQUFBQ0MsR0FBUSxDQUV0REosQ0FBRyxDQUFDLEFBQWUsVUFBZixPQUFPSSxFQUFtQkMsaUJBQWlCRCxHQUFPQSxDQUFHLENBQUMsQ0FBdUNWLFNBQVNDLENBQU0sQ0FBQ1MsRUFBSSxDQUN6SCxHQUNPSixDQUNULENBQUMsQUFDRCxPQUFPTCxDQUNULENBQUMsQUFHRCxRQUFPLE1BQU1XLFVBQVksQUFBSVgsR0FBNEIsQ0FDdkQsR0FBSUMsTUFBTUMsT0FBTyxDQUFDRixHQUNoQixPQUFPQSxFQUFPRyxHQUFHLENBQUMsQUFBQ0MsR0FBWU8sVUFBVVAsR0FDMUMsQ0FFRCxHQUFJLEFBQWtCLFVBQWxCLE9BQU9KLEdBQXVCQSxBQUFXLElBQUksR0FBZkEsRUFBaUIsQ0FDakQsSUFBTUssRUFBTSxDQUFDLEVBTWIsT0FMQyxBQUFDQyxPQUFPQyxJQUFJLENBQUNQLEdBQTJCUSxPQUFPLENBQUMsQUFBQ0MsR0FBUSxDQUd0REosQ0FBRyxDQUFDLEFBQWUsVUFBZixPQUFPSSxFQUFtQkcsaUJBQWlCSCxHQUFPQSxDQUFHLENBQUMsQ0FBd0NFLFVBQVVYLENBQU0sQ0FBQ1MsRUFBSSxDQUMzSCxHQUNPSixDQUNULENBQUMsQUFDRCxPQUFPTCxDQUNULENBQUMsQUFFRCxRQUFPLFNBQVNVLGlCQUFpQkcsQ0FBVyxDQUFVLENBQ3BELEdBQUksQ0FBQ0EsRUFBSUMsUUFBUSxDQUFDLEtBQU0sT0FBT0QsQ0FBRyxDQUVsQyxJQUFJRSxFQUFTLEdBQ2IsSUFBSyxJQUFJQyxFQUFJLEVBQUdDLEVBQU1KLEVBQUlLLE1BQU0sQ0FBRUYsRUFBSUMsRUFBSyxFQUFFRCxFQUFHLENBQzlDLEdBQUlILEFBQVcsTUFBWEEsQ0FBRyxDQUFDRyxFQUFFLENBQVUsQ0FDbEJELEdBQVVGLENBQUcsQ0FBQyxFQUFFRyxFQUFFLENBQUNHLFdBQVcsR0FFOUIsUUFBUSxBQUNWLENBQUMsQUFFREosR0FBVUYsQ0FBRyxDQUFDRyxFQUFFLEFBQ2xCLENBRUEsT0FBT0QsQ0FDVCxDQUFDLEFBRUQsT0FBTyxTQUFTSCxpQkFBaUJDLENBQVcsQ0FBVSxDQUNwRCxJQUFJRSxFQUFTLEdBQ2IsSUFBSyxJQUFJQyxFQUFJLEVBQUdDLEVBQU1KLEVBQUlLLE1BQU0sQ0FBRUYsRUFBSUMsRUFBSyxFQUFFRCxFQUFHLENBQzVDLEdBQUlILENBQUcsQ0FBQ0csRUFBRSxFQUFJLEtBQU9ILENBQUcsQ0FBQ0csRUFBRSxFQUFJLElBQUssQ0FDaENELEdBQVUsQ0FBQyxDQUFDLEVBQUVGLENBQUcsQ0FBQ0csRUFBRSxDQUFDSSxXQUFXLEdBQUcsQ0FBQyxDQUVwQyxRQUFTLEFBQ2IsQ0FBQyxBQUVETCxHQUFVRixDQUFHLENBQUNHLEVBQUUsQUFDcEIsQ0FFQSxPQUFPRCxDQUNULENBQUMifQ==
1
+ export function camelize(object) {
2
+ if (Array.isArray(object)) {
3
+ return object.map((element)=>camelize(element));
4
+ }
5
+ if (typeof object === 'object' && object !== null) {
6
+ const obj = {};
7
+ Object.keys(object).forEach((key)=>{
8
+ obj[snakeToCamelCase(key)] = camelize(object[key]);
9
+ });
10
+ return obj;
11
+ }
12
+ return object;
13
+ }
14
+ export function snakelize(object) {
15
+ if (Array.isArray(object)) {
16
+ return object.map((element)=>snakelize(element));
17
+ }
18
+ if (typeof object === 'object' && object !== null) {
19
+ const obj = {};
20
+ Object.keys(object).forEach((key)=>{
21
+ obj[camelToSnakeCase(key)] = snakelize(object[key]);
22
+ });
23
+ return obj;
24
+ }
25
+ return object;
26
+ }
27
+ export function snakeToCamelCase(str) {
28
+ if (!str.includes('_')) return str;
29
+ let result = '';
30
+ for(let i = 0, len = str.length; i < len; ++i){
31
+ if (str[i] === '_') {
32
+ result += str[++i].toUpperCase();
33
+ continue;
34
+ }
35
+ result += str[i];
36
+ }
37
+ return result;
38
+ }
39
+ export function camelToSnakeCase(str) {
40
+ let result = '';
41
+ for(let i = 0, len = str.length; i < len; ++i){
42
+ if (str[i] >= 'A' && str[i] <= 'Z') {
43
+ result += `_${str[i].toLowerCase()}`;
44
+ continue;
45
+ }
46
+ result += str[i];
47
+ }
48
+ return result;
49
+ }
50
+
51
+ //# sourceMappingURL=casing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/casing.ts"],"sourcesContent":["import type { Camelize, Snakelize } from '@discordeno/types'\n\nexport function camelize<T>(object: T): Camelize<T> {\n if (Array.isArray(object)) {\n return object.map((element) => camelize(element)) as Camelize<T>\n }\n\n if (typeof object === 'object' && object !== null) {\n const obj = {} as Camelize<T>\n ;(Object.keys(object) as Array<keyof T>).forEach((key) => {\n // @ts-expect-error js hack\n ;(obj[snakeToCamelCase(key)] as Camelize<(T & object)[keyof T]>) = camelize(object[key])\n })\n return obj\n }\n return object as Camelize<T>\n}\n\nexport function snakelize<T>(object: T): Snakelize<T> {\n if (Array.isArray(object)) {\n return object.map((element) => snakelize(element)) as Snakelize<T>\n }\n\n if (typeof object === 'object' && object !== null) {\n const obj = {} as Snakelize<T>\n ;(Object.keys(object) as Array<keyof T>).forEach((key) => {\n // @ts-expect-error js hack\n ;(obj[camelToSnakeCase(key)] as Snakelize<(T & object)[keyof T]>) = snakelize(object[key])\n })\n return obj\n }\n return object as Snakelize<T>\n}\n\nexport function snakeToCamelCase(str: string): string {\n if (!str.includes('_')) return str\n\n let result = ''\n for (let i = 0, len = str.length; i < len; ++i) {\n if (str[i] === '_') {\n result += str[++i].toUpperCase()\n\n continue\n }\n\n result += str[i]\n }\n\n return result\n}\n\nexport function camelToSnakeCase(str: string): string {\n let result = ''\n for (let i = 0, len = str.length; i < len; ++i) {\n if (str[i] >= 'A' && str[i] <= 'Z') {\n result += `_${str[i].toLowerCase()}`\n\n continue\n }\n\n result += str[i]\n }\n\n return result\n}\n"],"names":["camelize","object","Array","isArray","map","element","obj","Object","keys","forEach","key","snakeToCamelCase","snakelize","camelToSnakeCase","str","includes","result","i","len","length","toUpperCase","toLowerCase"],"mappings":"AAEA,OAAO,SAASA,SAAYC,MAAS,EAAe;IAClD,IAAIC,MAAMC,OAAO,CAACF,SAAS;QACzB,OAAOA,OAAOG,GAAG,CAAC,CAACC,UAAYL,SAASK;IAC1C,CAAC;IAED,IAAI,OAAOJ,WAAW,YAAYA,WAAW,IAAI,EAAE;QACjD,MAAMK,MAAM,CAAC;QACXC,OAAOC,IAAI,CAACP,QAA2BQ,OAAO,CAAC,CAACC,MAAQ;YAEtDJ,GAAG,CAACK,iBAAiBD,KAAK,GAAuCV,SAASC,MAAM,CAACS,IAAI;QACzF;QACA,OAAOJ;IACT,CAAC;IACD,OAAOL;AACT,CAAC;AAED,OAAO,SAASW,UAAaX,MAAS,EAAgB;IACpD,IAAIC,MAAMC,OAAO,CAACF,SAAS;QACzB,OAAOA,OAAOG,GAAG,CAAC,CAACC,UAAYO,UAAUP;IAC3C,CAAC;IAED,IAAI,OAAOJ,WAAW,YAAYA,WAAW,IAAI,EAAE;QACjD,MAAMK,MAAM,CAAC;QACXC,OAAOC,IAAI,CAACP,QAA2BQ,OAAO,CAAC,CAACC,MAAQ;YAEtDJ,GAAG,CAACO,iBAAiBH,KAAK,GAAwCE,UAAUX,MAAM,CAACS,IAAI;QAC3F;QACA,OAAOJ;IACT,CAAC;IACD,OAAOL;AACT,CAAC;AAED,OAAO,SAASU,iBAAiBG,GAAW,EAAU;IACpD,IAAI,CAACA,IAAIC,QAAQ,CAAC,MAAM,OAAOD;IAE/B,IAAIE,SAAS;IACb,IAAK,IAAIC,IAAI,GAAGC,MAAMJ,IAAIK,MAAM,EAAEF,IAAIC,KAAK,EAAED,EAAG;QAC9C,IAAIH,GAAG,CAACG,EAAE,KAAK,KAAK;YAClBD,UAAUF,GAAG,CAAC,EAAEG,EAAE,CAACG,WAAW;YAE9B,QAAQ;QACV,CAAC;QAEDJ,UAAUF,GAAG,CAACG,EAAE;IAClB;IAEA,OAAOD;AACT,CAAC;AAED,OAAO,SAASH,iBAAiBC,GAAW,EAAU;IACpD,IAAIE,SAAS;IACb,IAAK,IAAIC,IAAI,GAAGC,MAAMJ,IAAIK,MAAM,EAAEF,IAAIC,KAAK,EAAED,EAAG;QAC9C,IAAIH,GAAG,CAACG,EAAE,IAAI,OAAOH,GAAG,CAACG,EAAE,IAAI,KAAK;YAClCD,UAAU,CAAC,CAAC,EAAEF,GAAG,CAACG,EAAE,CAACI,WAAW,GAAG,CAAC;YAEpC,QAAQ;QACV,CAAC;QAEDL,UAAUF,GAAG,CAACG,EAAE;IAClB;IAEA,OAAOD;AACT,CAAC"}
package/dist/colors.d.ts CHANGED
@@ -1,5 +1,10 @@
1
+ export interface Code {
2
+ open: string;
3
+ close: string;
4
+ regexp: RegExp;
5
+ }
1
6
  /** RGB 8-bits per channel. Each in range `0->255` or `0x00->0xff` */
2
- interface Rgb {
7
+ export interface Rgb {
3
8
  r: number;
4
9
  g: number;
5
10
  b: number;
@@ -267,5 +272,4 @@ export declare function bgRgb24(str: string, color: number | Rgb): string;
267
272
  * @param string to remove ANSI escape codes from
268
273
  */
269
274
  export declare function stripColor(string: string): string;
270
- export {};
271
275
  //# sourceMappingURL=colors.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"colors.d.ts","sourceRoot":"","sources":["../src/colors.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"colors.d.ts","sourceRoot":"","sources":["../src/colors.ts"],"names":[],"mappings":"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"}