1.0.1 • Published 7 years ago

extreme.js v1.0.1

Weekly downloads
6
License
-
Repository
-
Last release
7 years ago

EXTREME.js

JavaScript의 한계를 넘을 수 있는 방법들을 시도하는 프로젝트입니다.

EXTREME.js는 UPPERCASE-CORE를 기반으로 만들어졌습니다.

사용 방법

Node.js 환경

npm install -s extreme.js
require('extreme.js');

웹 브라우저 환경

<script src="UPPERCASE-CORE/BROWSER.js"></script>
<script src="OVERLOAD.js"></script>
<script src="ANNOTATION.js"></script>
<script src="USON.js"></script>

OVERLOAD

JavaScript에서 함수를 파라미터 개수에 따라 다르게 호출할 수 있는 기능입니다.

let overloadFunc = OVERLOAD([

() => {
	return 'first';
},

(a) => {
	return a;
},

(a, b) => {
	return a + b;
},

(a, b, c) => {
	return a + b + c;
}]);

console.log(overloadFunc());
console.log(overloadFunc(1));
console.log(overloadFunc(2, 3));
console.log(overloadFunc(3, 4, 5));

ANNOTATION

JavaScript에서 어노테이션 주석을 인식할 수 있게 하는 기능입니다.

let setColor = (color) => {
    console.log('setColor: ' + color);
};

let setColorNotEmpty = (color) => {
    //@notEmpty
	
    console.log('setColor(not empty): ' + color);
};

let run = (func, color) => {

    let ann = ANNOTATION(func);
	
    if (color === undefined && ann.check('notEmpty')) {
        // ignore.
    } else {
        func(color);
    }
};

run(setColor, 'green');
run(setColorNotEmpty, 'green');
run(setColor, undefined);
run(setColorNotEmpty, undefined);

ANNOTATION & OVERLOAD

어노테이션 주석을 이용하여 OVERLOAD 기능을 확장할 수 있습니다. 파라미터 type 검사는 JavaScript의 기본 type들과 array, Date 형을 지원합니다.

let add = OVERLOAD([

(
//@number
a,

//@number
b) => {
	return a + b;
},

(
//@array
a,

//@array
b) => {

	let ret = [];
	
	EACH(a, (v) => {
		ret.push(v);
	});

	EACH(b, (v) => {
		ret.push(v);
	});

	return ret;
},

(
//@date
a,

//@date
b) => {
	return new Date(a.getTime() + b.getTime());
},

(a, b) => {
	return a + b;
}]);

console.log(add(1, 2));
console.log(add([1, 2], [3, 4]));
console.log(add('A', 'B'));

USON

JSON을 확장한 것으로, 아래와 같이 다양한 종류의 타입을 처리할 수 있습니다.

  • boolean
  • number
  • string
  • array
  • Date
  • function
  • prototype
let data = {
    msg : 'test',
    date : new Date(),
    func : () => {
        console.log('ok!');
    }
};

// where are date and func?
console.log(JSON.parse(JSON.stringify(data)));

// work correct.
console.log(USON.parse(USON.stringify(data)));

// ok!
USON.parse(USON.stringify(data)).func();

let Person = function(firstName, lastName) {
	this.firstName = firstName;
	this.lastName = lastName;
};

Person.prototype.getName = function() {
	return this.firstName + ' ' + this.lastName;
};

let originData = {
	Person : Person,
	person : new Person('Young Jae', 'Sim')
};

let newData = USON.parse(USON.stringify(originData));

console.log(new newData.Person('Young Jae', 'Sim').getName());
console.log(newData.person.getName());

라이센스

MIT

작성자

Young Jae Sim

1.0.1

7 years ago

1.0.0

7 years ago