13.16.0 • Published 5 years ago

@unction/treeify v13.16.0

Weekly downloads
9
License
SEE LICENSE IN LI...
Repository
github
Last release
5 years ago

@unction/treeify

Tests Stability Dependencies

Array<FoldFunctionType<A, B>> => Array => TreeType

This takes a list of functions (the folders) and an array of objects or an object of objects (the collection) to create a tree. Each function in the list of folders will in some way return a new object. All of the objects produced are then turned into a final tree.

const collection = [
  {
    id: "a1",
    type: "resources",
    attributes: {
      version: "v1",
      namespace: "accounts",
    }
  },
  {
    id: "a2",
    type: "resources",
    attributes: {
      version: "v1",
      namespace: "accounts",
    }
  },
  {
    id: "b1",
    type: "resources",
    attributes: {
      version: "v1",
      namespace: "profiles",
    }
  },
  {
    id: "b1",
    type: "resources",
    attributes: {
      version: "v2",
      namespace: "profiles",
    }
  }
]

The order goes from outer layer to deeper layer, so in this case the outer level properties will be based on key("type"), and the deepest layer properties will be based on key("id").

const functions =

treeify(
  [
    groupBy(key("type")),
    groupBy(keyChain(["attributes", "namespace"])),
    groupBy(keyChain(["attributes", "version"])),
    indexBy(key("id")),
  ]
)(
  collection
)

The resulting object looks like this:

{
  resources: {
    accounts: {
      v1: {
        a1: {
          id: "a1",
          type: "resources",
          attributes: {
            version: "v1",
            namespace: "accounts",
          }
        },
        a2: {
          id: "a2",
          type: "resources",
          attributes: {
            version: "v1",
            namespace: "accounts",
          }
        }
      }
    },
    profiles: {
      v1: {
        b1: {
          id: "b1",
          type: "resources",
          attributes: {
            version: "v1",
            namespace: "profiles",
          }
        }
      },
      v2: {
        b1: {
          id: "b1",
          type: "resources",
          attributes: {
            version: "v2",
            namespace: "profiles",
          }
        }
      }
    }
  }
}
13.16.0

5 years ago

13.15.0

5 years ago

13.14.0

5 years ago

13.13.0

5 years ago

13.12.1

6 years ago

13.12.0

6 years ago

13.11.1

6 years ago

13.11.0

6 years ago

13.10.0

6 years ago

13.9.1

6 years ago

13.9.0

6 years ago

13.8.0

6 years ago

13.7.1

6 years ago

13.7.0

6 years ago

13.6.0

6 years ago

13.5.0

6 years ago

13.4.1

6 years ago

13.4.0

6 years ago

13.3.0

6 years ago

13.2.0

6 years ago

13.1.0

6 years ago

13.0.0

6 years ago

12.0.0

7 years ago

11.0.0

7 years ago

10.0.0

7 years ago

9.0.0

7 years ago

8.0.0

7 years ago

7.0.0

7 years ago

6.0.0

7 years ago

5.0.0

7 years ago

4.0.0

7 years ago

3.66.0

8 years ago

3.65.0

8 years ago

3.64.0

8 years ago

3.63.0

8 years ago

3.62.0

8 years ago

3.61.0

8 years ago

3.60.0

8 years ago

3.59.0

8 years ago

3.58.0

8 years ago

3.57.0

8 years ago

3.56.0

8 years ago

3.55.0

8 years ago

3.54.0

8 years ago

3.53.0

8 years ago

3.52.0

8 years ago

3.51.0

8 years ago

3.50.0

8 years ago

3.49.0

8 years ago

3.48.0

8 years ago

3.47.0

8 years ago

3.46.0

8 years ago

3.45.0

8 years ago

3.44.0

8 years ago

3.43.0

8 years ago

3.42.0

8 years ago

3.41.0

8 years ago

3.40.0

8 years ago

3.39.0

8 years ago

3.38.0

8 years ago

3.37.0

8 years ago

3.36.0

8 years ago

3.35.0

8 years ago

3.34.0

8 years ago

3.33.0

8 years ago

3.32.0

8 years ago

3.31.0

8 years ago

3.30.0

8 years ago

3.29.0

8 years ago

3.28.0

8 years ago

3.27.0

8 years ago

3.26.0

8 years ago

3.25.0

8 years ago

3.24.0

8 years ago

3.23.0

8 years ago

3.22.0

8 years ago

3.21.0

8 years ago

3.20.0

8 years ago

3.19.0

8 years ago

3.18.0

8 years ago

3.17.0

8 years ago

3.16.0

8 years ago

3.15.0

8 years ago

3.14.0

8 years ago

3.13.0

8 years ago

3.12.0

8 years ago

3.11.0

8 years ago

3.10.0

8 years ago

3.9.0

8 years ago

3.8.0

8 years ago

3.7.0

8 years ago

3.6.0

8 years ago

3.5.0

8 years ago

3.3.0

8 years ago

3.1.0

8 years ago

3.0.0

8 years ago

2.0.1

8 years ago

2.0.0

8 years ago

1.1.2

8 years ago

1.1.1

8 years ago

1.1.0

8 years ago

1.0.9

8 years ago

1.0.8

8 years ago

1.0.7

8 years ago

1.0.6

8 years ago

1.0.5

8 years ago

1.0.3

8 years ago

1.0.2

8 years ago

1.0.1

8 years ago

1.0.0

8 years ago