@vinicunca/perkakas 0.3.6 → 0.4.0
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.
- package/dist/commonjs/array/index.js +0 -4
- package/dist/commonjs/guard/has-sub-object.js +19 -0
- package/dist/commonjs/guard/index.js +3 -0
- package/dist/commonjs/guard/is-deep-equal.js +55 -0
- package/dist/commonjs/guard/is-included-in.js +11 -0
- package/dist/commonjs/object/from-keys.js +15 -0
- package/dist/commonjs/object/index.js +1 -1
- package/dist/commonjs/object/merge.js +2 -2
- package/dist/commonjs/object/omit-by.js +3 -2
- package/dist/commonjs/object/pick-by.js +3 -2
- package/dist/es/array/index.js +0 -4
- package/dist/es/guard/has-sub-object.js +15 -0
- package/dist/es/guard/index.js +3 -0
- package/dist/es/guard/is-deep-equal.js +51 -0
- package/dist/es/guard/is-included-in.js +7 -0
- package/dist/es/object/from-keys.js +11 -0
- package/dist/es/object/index.js +1 -1
- package/dist/es/object/merge.js +2 -2
- package/dist/es/object/omit-by.js +3 -2
- package/dist/es/object/pick-by.js +3 -2
- package/dist/metadata.json +6976 -6506
- package/dist/types/array/difference-with.d.ts +3 -3
- package/dist/types/array/drop-first-by.d.ts +0 -1
- package/dist/types/array/drop-first-by.d.ts.map +1 -1
- package/dist/types/array/drop-last.d.ts +2 -1
- package/dist/types/array/drop-last.d.ts.map +1 -1
- package/dist/types/array/drop.d.ts +2 -1
- package/dist/types/array/drop.d.ts.map +1 -1
- package/dist/types/array/filter.d.ts +14 -0
- package/dist/types/array/filter.d.ts.map +1 -1
- package/dist/types/array/find-index.d.ts +2 -0
- package/dist/types/array/find-index.d.ts.map +1 -1
- package/dist/types/array/find-last-index.d.ts +2 -0
- package/dist/types/array/find-last-index.d.ts.map +1 -1
- package/dist/types/array/first-by.d.ts +0 -1
- package/dist/types/array/first-by.d.ts.map +1 -1
- package/dist/types/array/flat-map.d.ts +2 -0
- package/dist/types/array/flat-map.d.ts.map +1 -1
- package/dist/types/array/flatten-deep.d.ts +5 -4
- package/dist/types/array/flatten-deep.d.ts.map +1 -1
- package/dist/types/array/flatten.d.ts +7 -6
- package/dist/types/array/flatten.d.ts.map +1 -1
- package/dist/types/array/group-by.d.ts +1 -0
- package/dist/types/array/group-by.d.ts.map +1 -1
- package/dist/types/array/has-at-least.d.ts +0 -1
- package/dist/types/array/has-at-least.d.ts.map +1 -1
- package/dist/types/array/index-by.d.ts +0 -1
- package/dist/types/array/index-by.d.ts.map +1 -1
- package/dist/types/array/index.d.ts +0 -4
- package/dist/types/array/index.d.ts.map +1 -1
- package/dist/types/array/last.d.ts +2 -1
- package/dist/types/array/last.d.ts.map +1 -1
- package/dist/types/array/length.d.ts +1 -0
- package/dist/types/array/length.d.ts.map +1 -1
- package/dist/types/array/nth-by.d.ts +0 -1
- package/dist/types/array/nth-by.d.ts.map +1 -1
- package/dist/types/array/only.d.ts +2 -1
- package/dist/types/array/only.d.ts.map +1 -1
- package/dist/types/array/rank-by.d.ts +0 -1
- package/dist/types/array/rank-by.d.ts.map +1 -1
- package/dist/types/array/reduce.d.ts +2 -0
- package/dist/types/array/reduce.d.ts.map +1 -1
- package/dist/types/array/reverse.d.ts +4 -2
- package/dist/types/array/reverse.d.ts.map +1 -1
- package/dist/types/array/sort-by.d.ts +2 -3
- package/dist/types/array/sort-by.d.ts.map +1 -1
- package/dist/types/array/sorted-index-by.d.ts +0 -1
- package/dist/types/array/sorted-index-by.d.ts.map +1 -1
- package/dist/types/array/sorted-index-with.d.ts +0 -1
- package/dist/types/array/sorted-index-with.d.ts.map +1 -1
- package/dist/types/array/sorted-index.d.ts +0 -1
- package/dist/types/array/sorted-index.d.ts.map +1 -1
- package/dist/types/array/sorted-last-index-by.d.ts +0 -1
- package/dist/types/array/sorted-last-index-by.d.ts.map +1 -1
- package/dist/types/array/sorted-last-index.d.ts +0 -1
- package/dist/types/array/sorted-last-index.d.ts.map +1 -1
- package/dist/types/array/splice.d.ts +2 -1
- package/dist/types/array/splice.d.ts.map +1 -1
- package/dist/types/array/split-at.d.ts +2 -0
- package/dist/types/array/split-at.d.ts.map +1 -1
- package/dist/types/array/take-first-by.d.ts +0 -1
- package/dist/types/array/take-first-by.d.ts.map +1 -1
- package/dist/types/array/uniq-with.d.ts +3 -3
- package/dist/types/function/conditional.d.ts +0 -1
- package/dist/types/function/conditional.d.ts.map +1 -1
- package/dist/types/function/purry.d.ts +1 -0
- package/dist/types/function/purry.d.ts.map +1 -1
- package/dist/types/function/times.d.ts +0 -1
- package/dist/types/function/times.d.ts.map +1 -1
- package/dist/types/guard/has-sub-object.d.ts +35 -0
- package/dist/types/guard/has-sub-object.d.ts.map +1 -0
- package/dist/types/guard/index.d.ts +3 -0
- package/dist/types/guard/index.d.ts.map +1 -1
- package/dist/types/guard/is-deep-equal.d.ts +50 -0
- package/dist/types/guard/is-deep-equal.d.ts.map +1 -0
- package/dist/types/guard/is-included-in.d.ts +54 -0
- package/dist/types/guard/is-included-in.d.ts.map +1 -0
- package/dist/types/number/add.d.ts +0 -1
- package/dist/types/number/add.d.ts.map +1 -1
- package/dist/types/number/ceil.d.ts +2 -1
- package/dist/types/number/ceil.d.ts.map +1 -1
- package/dist/types/number/clamp.d.ts +6 -6
- package/dist/types/number/divide.d.ts +0 -1
- package/dist/types/number/divide.d.ts.map +1 -1
- package/dist/types/number/floor.d.ts +2 -1
- package/dist/types/number/floor.d.ts.map +1 -1
- package/dist/types/number/multiply.d.ts +2 -1
- package/dist/types/number/multiply.d.ts.map +1 -1
- package/dist/types/number/round.d.ts +2 -1
- package/dist/types/number/round.d.ts.map +1 -1
- package/dist/types/number/subtract.d.ts +2 -1
- package/dist/types/number/subtract.d.ts.map +1 -1
- package/dist/types/object/from-keys.d.ts +42 -0
- package/dist/types/object/from-keys.d.ts.map +1 -0
- package/dist/types/object/from-pairs.d.ts +1 -1
- package/dist/types/object/index.d.ts +1 -1
- package/dist/types/object/index.d.ts.map +1 -1
- package/dist/types/object/invert.d.ts +2 -0
- package/dist/types/object/invert.d.ts.map +1 -1
- package/dist/types/object/keys.d.ts +1 -0
- package/dist/types/object/keys.d.ts.map +1 -1
- package/dist/types/object/merge.d.ts +39 -12
- package/dist/types/object/merge.d.ts.map +1 -1
- package/dist/types/object/path-or.d.ts +2 -0
- package/dist/types/object/path-or.d.ts.map +1 -1
- package/dist/types/object/pick-by.d.ts +2 -0
- package/dist/types/object/pick-by.d.ts.map +1 -1
- package/dist/types/object/set-path.d.ts +2 -0
- package/dist/types/object/set-path.d.ts.map +1 -1
- package/dist/types/object/values.d.ts +1 -0
- package/dist/types/object/values.d.ts.map +1 -1
- package/dist/types/string/cases-types.d.ts +13 -13
- package/dist/types/string/cases-types.d.ts.map +1 -1
- package/dist/types/string/cases.d.ts +9 -9
- package/dist/types/string/cases.d.ts.map +1 -1
- package/dist/types/string/random-string.d.ts +1 -0
- package/dist/types/string/random-string.d.ts.map +1 -1
- package/dist/types/utils/purry-order-rules.d.ts +4 -4
- package/dist/types/utils/purry-order-rules.d.ts.map +1 -1
- package/package.json +11 -10
- package/dist/commonjs/array/compact.js +0 -8
- package/dist/commonjs/array/count-by.js +0 -24
- package/dist/commonjs/array/difference.js +0 -22
- package/dist/commonjs/array/intersection.js +0 -22
- package/dist/commonjs/object/equals.js +0 -67
- package/dist/es/array/compact.js +0 -4
- package/dist/es/array/count-by.js +0 -20
- package/dist/es/array/difference.js +0 -18
- package/dist/es/array/intersection.js +0 -18
- package/dist/es/object/equals.js +0 -63
- package/dist/types/array/compact.d.ts +0 -12
- package/dist/types/array/compact.d.ts.map +0 -1
- package/dist/types/array/count-by.d.ts +0 -20
- package/dist/types/array/count-by.d.ts.map +0 -1
- package/dist/types/array/difference.d.ts +0 -35
- package/dist/types/array/difference.d.ts.map +0 -1
- package/dist/types/array/intersection.d.ts +0 -30
- package/dist/types/array/intersection.d.ts.map +0 -1
- package/dist/types/object/equals.d.ts +0 -30
- package/dist/types/object/equals.d.ts.map +0 -1
|
@@ -17,11 +17,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
17
17
|
__exportStar(require("./all-pass"), exports);
|
|
18
18
|
__exportStar(require("./any-pass"), exports);
|
|
19
19
|
__exportStar(require("./chunk"), exports);
|
|
20
|
-
__exportStar(require("./compact"), exports);
|
|
21
20
|
__exportStar(require("./concat"), exports);
|
|
22
|
-
__exportStar(require("./count-by"), exports);
|
|
23
21
|
__exportStar(require("./difference-with"), exports);
|
|
24
|
-
__exportStar(require("./difference"), exports);
|
|
25
22
|
__exportStar(require("./drop-last"), exports);
|
|
26
23
|
__exportStar(require("./drop"), exports);
|
|
27
24
|
__exportStar(require("./drop-first-by"), exports);
|
|
@@ -42,7 +39,6 @@ __exportStar(require("./for-each"), exports);
|
|
|
42
39
|
__exportStar(require("./group-by"), exports);
|
|
43
40
|
__exportStar(require("./has-at-least"), exports);
|
|
44
41
|
__exportStar(require("./index-by"), exports);
|
|
45
|
-
__exportStar(require("./intersection"), exports);
|
|
46
42
|
__exportStar(require("./intersection-with"), exports);
|
|
47
43
|
__exportStar(require("./join"), exports);
|
|
48
44
|
__exportStar(require("./last"), exports);
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.hasSubObject = void 0;
|
|
4
|
+
const purry_1 = require("../function/purry");
|
|
5
|
+
function hasSubObject(...args) {
|
|
6
|
+
return (0, purry_1.purry)(_hasSubObject, args);
|
|
7
|
+
}
|
|
8
|
+
exports.hasSubObject = hasSubObject;
|
|
9
|
+
function _hasSubObject(data, subObject) {
|
|
10
|
+
for (const key of Object.keys(subObject)) {
|
|
11
|
+
if (!Object.prototype.hasOwnProperty.call(data, key)) {
|
|
12
|
+
return false;
|
|
13
|
+
}
|
|
14
|
+
if (!isDeepEqual(subObject[key], data[key])) {
|
|
15
|
+
return false;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
return true;
|
|
19
|
+
}
|
|
@@ -14,13 +14,16 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./has-sub-object"), exports);
|
|
17
18
|
__exportStar(require("./is-array"), exports);
|
|
18
19
|
__exportStar(require("./is-boolean"), exports);
|
|
19
20
|
__exportStar(require("./is-date"), exports);
|
|
21
|
+
__exportStar(require("./is-deep-equal"), exports);
|
|
20
22
|
__exportStar(require("./is-defined"), exports);
|
|
21
23
|
__exportStar(require("./is-empty"), exports);
|
|
22
24
|
__exportStar(require("./is-error"), exports);
|
|
23
25
|
__exportStar(require("./is-function"), exports);
|
|
26
|
+
__exportStar(require("./is-included-in"), exports);
|
|
24
27
|
__exportStar(require("./is-nil"), exports);
|
|
25
28
|
__exportStar(require("./is-non-null"), exports);
|
|
26
29
|
__exportStar(require("./is-not"), exports);
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isDeepEqual = void 0;
|
|
4
|
+
const purry_1 = require("../function/purry");
|
|
5
|
+
function isDeepEqual(...args) {
|
|
6
|
+
return (0, purry_1.purry)(isDeepEqualImplementation, args);
|
|
7
|
+
}
|
|
8
|
+
exports.isDeepEqual = isDeepEqual;
|
|
9
|
+
function isDeepEqualImplementation(data, other) {
|
|
10
|
+
if (data === other) {
|
|
11
|
+
return true;
|
|
12
|
+
}
|
|
13
|
+
if (typeof data === 'number' && typeof other === 'number') {
|
|
14
|
+
return data !== data && other !== other;
|
|
15
|
+
}
|
|
16
|
+
if (typeof data !== 'object' || typeof other !== 'object') {
|
|
17
|
+
return false;
|
|
18
|
+
}
|
|
19
|
+
if (data === null || other === null) {
|
|
20
|
+
return false;
|
|
21
|
+
}
|
|
22
|
+
if (Object.getPrototypeOf(data) !== Object.getPrototypeOf(other)) {
|
|
23
|
+
return false;
|
|
24
|
+
}
|
|
25
|
+
if (Array.isArray(data)) {
|
|
26
|
+
if (data.length !== other.length) {
|
|
27
|
+
return false;
|
|
28
|
+
}
|
|
29
|
+
for (let i = 0; i < data.length; i++) {
|
|
30
|
+
if (!isDeepEqualImplementation(data[i], other[i])) {
|
|
31
|
+
return false;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
return true;
|
|
35
|
+
}
|
|
36
|
+
if (data instanceof Date) {
|
|
37
|
+
return data.getTime() === other.getTime();
|
|
38
|
+
}
|
|
39
|
+
if (data instanceof RegExp) {
|
|
40
|
+
return data.toString() === other.toString();
|
|
41
|
+
}
|
|
42
|
+
const keys = Object.keys(data);
|
|
43
|
+
if (keys.length !== Object.keys(other).length) {
|
|
44
|
+
return false;
|
|
45
|
+
}
|
|
46
|
+
for (const key of keys) {
|
|
47
|
+
if (!Object.prototype.hasOwnProperty.call(other, key)) {
|
|
48
|
+
return false;
|
|
49
|
+
}
|
|
50
|
+
if (!isDeepEqualImplementation(data[key], other[key])) {
|
|
51
|
+
return false;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return true;
|
|
55
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isIncludedIn = void 0;
|
|
4
|
+
function isIncludedIn(dataOrContainer, container) {
|
|
5
|
+
if (container === undefined) {
|
|
6
|
+
const asSet = new Set(dataOrContainer);
|
|
7
|
+
return (data) => asSet.has(data);
|
|
8
|
+
}
|
|
9
|
+
return container.includes(dataOrContainer);
|
|
10
|
+
}
|
|
11
|
+
exports.isIncludedIn = isIncludedIn;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.fromKeys = void 0;
|
|
4
|
+
const purry_1 = require("../function/purry");
|
|
5
|
+
function fromKeys(...args) {
|
|
6
|
+
return (0, purry_1.purry)(fromKeysImplementation, args);
|
|
7
|
+
}
|
|
8
|
+
exports.fromKeys = fromKeys;
|
|
9
|
+
function fromKeysImplementation(data, mapper) {
|
|
10
|
+
const result = {};
|
|
11
|
+
for (const key of data) {
|
|
12
|
+
result[key] = mapper(key);
|
|
13
|
+
}
|
|
14
|
+
return result;
|
|
15
|
+
}
|
|
@@ -16,8 +16,8 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
__exportStar(require("./add-prop"), exports);
|
|
18
18
|
__exportStar(require("./clone"), exports);
|
|
19
|
-
__exportStar(require("./equals"), exports);
|
|
20
19
|
__exportStar(require("./for-each-obj"), exports);
|
|
20
|
+
__exportStar(require("./from-keys"), exports);
|
|
21
21
|
__exportStar(require("./from-pairs"), exports);
|
|
22
22
|
__exportStar(require("./index"), exports);
|
|
23
23
|
__exportStar(require("./invert"), exports);
|
|
@@ -13,8 +13,9 @@ function omitBy_(object, fn) {
|
|
|
13
13
|
}
|
|
14
14
|
const out = {};
|
|
15
15
|
for (const key of keys_1.keys.strict(object)) {
|
|
16
|
-
|
|
17
|
-
|
|
16
|
+
const k = key;
|
|
17
|
+
if (!fn(object[k], k)) {
|
|
18
|
+
out[k] = object[k];
|
|
18
19
|
}
|
|
19
20
|
}
|
|
20
21
|
return out;
|
package/dist/es/array/index.js
CHANGED
|
@@ -1,11 +1,8 @@
|
|
|
1
1
|
export * from './all-pass';
|
|
2
2
|
export * from './any-pass';
|
|
3
3
|
export * from './chunk';
|
|
4
|
-
export * from './compact';
|
|
5
4
|
export * from './concat';
|
|
6
|
-
export * from './count-by';
|
|
7
5
|
export * from './difference-with';
|
|
8
|
-
export * from './difference';
|
|
9
6
|
export * from './drop-last';
|
|
10
7
|
export * from './drop';
|
|
11
8
|
export * from './drop-first-by';
|
|
@@ -26,7 +23,6 @@ export * from './for-each';
|
|
|
26
23
|
export * from './group-by';
|
|
27
24
|
export * from './has-at-least';
|
|
28
25
|
export * from './index-by';
|
|
29
|
-
export * from './intersection';
|
|
30
26
|
export * from './intersection-with';
|
|
31
27
|
export * from './join';
|
|
32
28
|
export * from './last';
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { purry } from '../function/purry';
|
|
2
|
+
export function hasSubObject(...args) {
|
|
3
|
+
return purry(_hasSubObject, args);
|
|
4
|
+
}
|
|
5
|
+
function _hasSubObject(data, subObject) {
|
|
6
|
+
for (const key of Object.keys(subObject)) {
|
|
7
|
+
if (!Object.prototype.hasOwnProperty.call(data, key)) {
|
|
8
|
+
return false;
|
|
9
|
+
}
|
|
10
|
+
if (!isDeepEqual(subObject[key], data[key])) {
|
|
11
|
+
return false;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
return true;
|
|
15
|
+
}
|
package/dist/es/guard/index.js
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
|
+
export * from './has-sub-object';
|
|
1
2
|
export * from './is-array';
|
|
2
3
|
export * from './is-boolean';
|
|
3
4
|
export * from './is-date';
|
|
5
|
+
export * from './is-deep-equal';
|
|
4
6
|
export * from './is-defined';
|
|
5
7
|
export * from './is-empty';
|
|
6
8
|
export * from './is-error';
|
|
7
9
|
export * from './is-function';
|
|
10
|
+
export * from './is-included-in';
|
|
8
11
|
export * from './is-nil';
|
|
9
12
|
export * from './is-non-null';
|
|
10
13
|
export * from './is-not';
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { purry } from '../function/purry';
|
|
2
|
+
export function isDeepEqual(...args) {
|
|
3
|
+
return purry(isDeepEqualImplementation, args);
|
|
4
|
+
}
|
|
5
|
+
function isDeepEqualImplementation(data, other) {
|
|
6
|
+
if (data === other) {
|
|
7
|
+
return true;
|
|
8
|
+
}
|
|
9
|
+
if (typeof data === 'number' && typeof other === 'number') {
|
|
10
|
+
return data !== data && other !== other;
|
|
11
|
+
}
|
|
12
|
+
if (typeof data !== 'object' || typeof other !== 'object') {
|
|
13
|
+
return false;
|
|
14
|
+
}
|
|
15
|
+
if (data === null || other === null) {
|
|
16
|
+
return false;
|
|
17
|
+
}
|
|
18
|
+
if (Object.getPrototypeOf(data) !== Object.getPrototypeOf(other)) {
|
|
19
|
+
return false;
|
|
20
|
+
}
|
|
21
|
+
if (Array.isArray(data)) {
|
|
22
|
+
if (data.length !== other.length) {
|
|
23
|
+
return false;
|
|
24
|
+
}
|
|
25
|
+
for (let i = 0; i < data.length; i++) {
|
|
26
|
+
if (!isDeepEqualImplementation(data[i], other[i])) {
|
|
27
|
+
return false;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
return true;
|
|
31
|
+
}
|
|
32
|
+
if (data instanceof Date) {
|
|
33
|
+
return data.getTime() === other.getTime();
|
|
34
|
+
}
|
|
35
|
+
if (data instanceof RegExp) {
|
|
36
|
+
return data.toString() === other.toString();
|
|
37
|
+
}
|
|
38
|
+
const keys = Object.keys(data);
|
|
39
|
+
if (keys.length !== Object.keys(other).length) {
|
|
40
|
+
return false;
|
|
41
|
+
}
|
|
42
|
+
for (const key of keys) {
|
|
43
|
+
if (!Object.prototype.hasOwnProperty.call(other, key)) {
|
|
44
|
+
return false;
|
|
45
|
+
}
|
|
46
|
+
if (!isDeepEqualImplementation(data[key], other[key])) {
|
|
47
|
+
return false;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return true;
|
|
51
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { purry } from '../function/purry';
|
|
2
|
+
export function fromKeys(...args) {
|
|
3
|
+
return purry(fromKeysImplementation, args);
|
|
4
|
+
}
|
|
5
|
+
function fromKeysImplementation(data, mapper) {
|
|
6
|
+
const result = {};
|
|
7
|
+
for (const key of data) {
|
|
8
|
+
result[key] = mapper(key);
|
|
9
|
+
}
|
|
10
|
+
return result;
|
|
11
|
+
}
|
package/dist/es/object/index.js
CHANGED
package/dist/es/object/merge.js
CHANGED