dry-ux 1.12.0 → 1.13.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.
@@ -0,0 +1,15 @@
1
+ declare type FlattenOptions = {
2
+ delimiter?: string;
3
+ maxDepth?: number;
4
+ transformKey?: (key: any) => any;
5
+ safe?: boolean;
6
+ };
7
+ export declare function flatten(target: any, opts?: FlattenOptions): {
8
+ [key: string]: any;
9
+ };
10
+ declare type UnflattenOptions = Pick<FlattenOptions, "delimiter" | "transformKey"> & {
11
+ overwrite?: boolean;
12
+ object?: boolean;
13
+ };
14
+ export declare function unflatten(target: any, opts?: UnflattenOptions): any;
15
+ export {};
@@ -0,0 +1,115 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.unflatten = exports.flatten = void 0;
4
+ function isBuffer(obj) {
5
+ return obj && obj.constructor && typeof obj.constructor.isBuffer === "function" && obj.constructor.isBuffer(obj);
6
+ }
7
+ function keyIdentity(key) {
8
+ return key;
9
+ }
10
+ function flatten(target, opts) {
11
+ opts = opts || {};
12
+ const delimiter = opts.delimiter || ".";
13
+ const maxDepth = opts.maxDepth;
14
+ const transformKey = opts.transformKey || keyIdentity;
15
+ const output = {};
16
+ function step(object, prev, currentDepth) {
17
+ currentDepth = currentDepth || 1;
18
+ Object.keys(object).forEach(function (key) {
19
+ const value = object[key];
20
+ const isarray = opts.safe && Array.isArray(value);
21
+ const type = Object.prototype.toString.call(value);
22
+ const isbuffer = isBuffer(value);
23
+ const isobject = type === "[object Object]" || type === "[object Array]";
24
+ const newKey = prev ? prev + delimiter + transformKey(key) : transformKey(key);
25
+ if (!isarray &&
26
+ !isbuffer &&
27
+ isobject &&
28
+ Object.keys(value).length &&
29
+ (!opts.maxDepth || currentDepth < maxDepth)) {
30
+ return step(value, newKey, currentDepth + 1);
31
+ }
32
+ output[newKey] = value;
33
+ });
34
+ }
35
+ step(target, null, null);
36
+ return output;
37
+ }
38
+ exports.flatten = flatten;
39
+ function unflatten(target, opts) {
40
+ opts = opts || {};
41
+ const delimiter = opts.delimiter || ".";
42
+ const overwrite = opts.overwrite || false;
43
+ const transformKey = opts.transformKey || keyIdentity;
44
+ const result = {};
45
+ const isbuffer = isBuffer(target);
46
+ if (isbuffer || Object.prototype.toString.call(target) !== "[object Object]") {
47
+ return target;
48
+ }
49
+ // safely ensure that the key is
50
+ // an integer.
51
+ function getkey(key) {
52
+ const parsedKey = Number(key);
53
+ return isNaN(parsedKey) || key.indexOf(".") !== -1 || opts.object ? key : parsedKey;
54
+ }
55
+ function addKeys(keyPrefix, recipient, target) {
56
+ return Object.keys(target).reduce(function (result, key) {
57
+ result[keyPrefix + delimiter + key] = target[key];
58
+ return result;
59
+ }, recipient);
60
+ }
61
+ function isEmpty(val) {
62
+ const type = Object.prototype.toString.call(val);
63
+ const isArray = type === "[object Array]";
64
+ const isObject = type === "[object Object]";
65
+ if (!val) {
66
+ return true;
67
+ }
68
+ else if (isArray) {
69
+ return !val.length;
70
+ }
71
+ else if (isObject) {
72
+ return !Object.keys(val).length;
73
+ }
74
+ }
75
+ target = Object.keys(target).reduce(function (result, key) {
76
+ const type = Object.prototype.toString.call(target[key]);
77
+ const isObject = type === "[object Object]" || type === "[object Array]";
78
+ if (!isObject || isEmpty(target[key])) {
79
+ result[key] = target[key];
80
+ return result;
81
+ }
82
+ else {
83
+ return addKeys(key, result, flatten(target[key], opts));
84
+ }
85
+ }, {});
86
+ Object.keys(target).forEach(function (key) {
87
+ const split = key.split(delimiter).map(transformKey);
88
+ let key1 = getkey(split.shift());
89
+ let key2 = getkey(split[0]);
90
+ let recipient = result;
91
+ while (key2 !== undefined) {
92
+ if (key1 === "__proto__") {
93
+ return;
94
+ }
95
+ const type = Object.prototype.toString.call(recipient[key1]);
96
+ const isobject = type === "[object Object]" || type === "[object Array]";
97
+ // do not write over falsey, non-undefined values if overwrite is false
98
+ if (!overwrite && !isobject && typeof recipient[key1] !== "undefined") {
99
+ return;
100
+ }
101
+ if ((overwrite && !isobject) || (!overwrite && recipient[key1] == null)) {
102
+ recipient[key1] = typeof key2 === "number" && !opts.object ? [] : {};
103
+ }
104
+ recipient = recipient[key1];
105
+ if (split.length > 0) {
106
+ key1 = getkey(split.shift());
107
+ key2 = getkey(split[0]);
108
+ }
109
+ }
110
+ // unflatten again for 'messy objects'
111
+ recipient[key1] = unflatten(target[key], opts);
112
+ });
113
+ return result;
114
+ }
115
+ exports.unflatten = unflatten;
package/dist/index.d.ts CHANGED
@@ -4,3 +4,4 @@ export * from "./ui-utils/uiUtil.interface";
4
4
  export { DryUXProvider } from "./provider";
5
5
  export * from "./helpers/utilities";
6
6
  export { classSet } from "./helpers/classSet";
7
+ export { flatten, unflatten } from "./helpers/flat";
package/dist/index.js CHANGED
@@ -14,7 +14,7 @@ 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
- exports.classSet = exports.DryUXProvider = exports.DryUXRenderer = exports.DryUXContext = exports.useDryUxContext = void 0;
17
+ exports.unflatten = exports.flatten = exports.classSet = exports.DryUXProvider = exports.DryUXRenderer = exports.DryUXContext = exports.useDryUxContext = void 0;
18
18
  var UIUtilProvider_1 = require("./ui-utils/UIUtilProvider");
19
19
  Object.defineProperty(exports, "useDryUxContext", { enumerable: true, get: function () { return UIUtilProvider_1.useUIUtilContext; } });
20
20
  Object.defineProperty(exports, "DryUXContext", { enumerable: true, get: function () { return UIUtilProvider_1.UIUtilContext; } });
@@ -26,3 +26,6 @@ Object.defineProperty(exports, "DryUXProvider", { enumerable: true, get: functio
26
26
  __exportStar(require("./helpers/utilities"), exports);
27
27
  var classSet_1 = require("./helpers/classSet");
28
28
  Object.defineProperty(exports, "classSet", { enumerable: true, get: function () { return classSet_1.classSet; } });
29
+ var flat_1 = require("./helpers/flat");
30
+ Object.defineProperty(exports, "flatten", { enumerable: true, get: function () { return flat_1.flatten; } });
31
+ Object.defineProperty(exports, "unflatten", { enumerable: true, get: function () { return flat_1.unflatten; } });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dry-ux",
3
- "version": "1.12.0",
3
+ "version": "1.13.0",
4
4
  "description": "",
5
5
  "main": "dist/index",
6
6
  "scripts": {