From 24b9bc1e553a16abf675c273c69ef94715440d10 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Torkel=20=C3=96degaard?= Date: Mon, 23 Nov 2015 18:20:12 +0100 Subject: [PATCH] fix(missing files): added missing files, oops --- public/app/core/utils/flatten.ts | 39 +++++++++++++++++++++++++ public/test/core/utils/flatten_specs.ts | 24 +++++++++++++++ 2 files changed, 63 insertions(+) create mode 100644 public/app/core/utils/flatten.ts create mode 100644 public/test/core/utils/flatten_specs.ts diff --git a/public/app/core/utils/flatten.ts b/public/app/core/utils/flatten.ts new file mode 100644 index 00000000000..fb4c47d1e3d --- /dev/null +++ b/public/app/core/utils/flatten.ts @@ -0,0 +1,39 @@ +// Copyright (c) 2014, Hugh Kennedy +// Based on code from https://github.com/hughsk/flat/blob/master/index.js +// +function flatten(target, opts): any { + opts = opts || {}; + + var delimiter = opts.delimiter || '.'; + var maxDepth = opts.maxDepth || 3; + var currentDepth = 1; + var output = {}; + + function step(object, prev) { + Object.keys(object).forEach(function(key) { + var value = object[key]; + var isarray = opts.safe && Array.isArray(value); + var type = Object.prototype.toString.call(value); + var isobject = type === "[object Object]"; + + var newKey = prev ? prev + delimiter + key : key; + + if (!opts.maxDepth) { + maxDepth = currentDepth + 1; + } + + if (!isarray && isobject && Object.keys(value).length && currentDepth < maxDepth) { + ++currentDepth; + return step(value, newKey); + } + + output[newKey] = value; + }); + } + + step(target, null); + + return output; +} + +export = flatten; diff --git a/public/test/core/utils/flatten_specs.ts b/public/test/core/utils/flatten_specs.ts new file mode 100644 index 00000000000..01815df8607 --- /dev/null +++ b/public/test/core/utils/flatten_specs.ts @@ -0,0 +1,24 @@ +import {describe, beforeEach, it, sinon, expect} from 'test/lib/common' + +import flatten = require('app/core/utils/flatten') + +describe("flatten", () => { + + it('should return flatten object', () => { + var flattened = flatten({ + level1: 'level1-value', + deeper: { + level2: 'level2-value', + deeper: { + level3: 'level3-value' + } + } + }, null); + + expect(flattened['level1']).to.be('level1-value'); + expect(flattened['deeper.level2']).to.be('level2-value'); + expect(flattened['deeper.deeper.level3']).to.be('level3-value'); + }); + +}); +