From 2c29e389777cb10534252334545d279a1663baa4 Mon Sep 17 00:00:00 2001 From: Paulo Cesar Date: Sun, 30 Aug 2015 00:10:39 -0300 Subject: [PATCH] add better-curry --- better-curry/better-curry-tests.ts | 25 +++++++++++++++ better-curry/better-curry.d.ts | 50 ++++++++++++++++++++++++++++++ 2 files changed, 75 insertions(+) create mode 100644 better-curry/better-curry-tests.ts create mode 100644 better-curry/better-curry.d.ts diff --git a/better-curry/better-curry-tests.ts b/better-curry/better-curry-tests.ts new file mode 100644 index 0000000000..15213d58b6 --- /dev/null +++ b/better-curry/better-curry-tests.ts @@ -0,0 +1,25 @@ +/// + +import bc = require('better-curry'); +bc.flatten([1,2,3,[1,2],['a']]) === []; +bc.MAX_OPTIMIZED = 5; + +function fn(...args: number[]): number[] { + return [].concat([1]); +} + +function fn2(arg1: string, arg2: any): number { + return parseInt(arg1 + String(arg2)) + 1; +} + +bc.predefine(fn, [1,2])() === []; +bc.predefine(fn, [1,2]).__length === 3; + +var f = bc.wrap(fn2, {}, 10, true); +f('1', 2) === 3; + +var delegate = bc.delegate({}, 'ok'); +delegate.access('ok') === delegate; +delegate.getter('getter').setter('setter') === delegate; +delegate.all(['1','2']); +delegate.revoke('adsf').access('asdf'); \ No newline at end of file diff --git a/better-curry/better-curry.d.ts b/better-curry/better-curry.d.ts new file mode 100644 index 0000000000..59ebe0a37c --- /dev/null +++ b/better-curry/better-curry.d.ts @@ -0,0 +1,50 @@ +// Type definitions for better-curry +// Project: https://github.com/pocesar/js-bettercurry +// Definitions by: Paulo Cesar +// Definitions: https://github.com/borisyankov/DefinitelyTyped + +declare var BetterCurry: BetterCurryModule.BetterCurry; + +declare module BetterCurryModule { + + export interface DelegateOptions { + as?: string; + len?: number; + args?: any[]; + name?: string; + } + + export class Delegate { + proto: T; + target: string; + methods: any[]; + getters: any[]; + setters: any[]; + all: (skip?: string[]) => void; + method: (name: string|DelegateOptions) => Delegate; + getter: (name: string|DelegateOptions) => Delegate; + setter: (name: string|DelegateOptions) => Delegate; + access: (name: string|DelegateOptions) => Delegate; + revoke: (name: string) => Delegate; + constructor(proto: T, target: string); + } + + export interface OriginalFunctionReminder extends Function { + __length: number; + } + + export interface BetterCurry { + predefine: (fn: T, args: any[], context?: Object, len?: number, checkArguments?: boolean) => OriginalFunctionReminder; + wrap: (fn: T, context?: Object, len?: number, checkArguments?: boolean) => OriginalFunctionReminder; + flatten: (...args: Array|any>) => any[]; + delegate: (proto: T, target: string) => Delegate; + MAX_OPTIMIZED: number; + } + +} + +declare module 'better-curry' { + var bc: BetterCurryModule.BetterCurry; + + export = bc; +} \ No newline at end of file