{"id":18541895,"url":"https://github.com/extensionsapp/adop","last_synced_at":"2025-08-25T13:20:25.488Z","repository":{"id":57173645,"uuid":"240531487","full_name":"extensionsapp/adop","owner":"extensionsapp","description":"All dot-notation object path from multiple items","archived":false,"fork":false,"pushed_at":"2020-04-10T13:53:59.000Z","size":15,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-23T07:48:29.051Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://www.npmjs.com/package/adop","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/extensionsapp.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-02-14T14:52:12.000Z","updated_at":"2020-07-30T12:44:51.000Z","dependencies_parsed_at":"2022-08-24T13:31:11.025Z","dependency_job_id":null,"html_url":"https://github.com/extensionsapp/adop","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/extensionsapp%2Fadop","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/extensionsapp%2Fadop/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/extensionsapp%2Fadop/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/extensionsapp%2Fadop/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/extensionsapp","download_url":"https://codeload.github.com/extensionsapp/adop/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254270650,"owners_count":22042861,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-06T20:06:38.757Z","updated_at":"2025-05-15T04:11:34.643Z","avatar_url":"https://github.com/extensionsapp.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# [A]ll [D]ot-notation [O]bject [P]ath from multiple items\n\n### Usage\n\n```javascript\nconst adop = require('adop');\n\nlet json = {\n    results: [\n        {\n            id: 1,\n            main_title: \"Title 1\",\n            seasons: [\n                {\n                    season: 1,\n                    series: ['Series 1', 'Series 2', 'Series 3'],\n                    episodes: [\n                        {\n                            SxEx: 'S01E01',\n                            episode: 1,\n                            name: 'Name 1'\n                        }, {\n                            SxEx: 'S01E02',\n                            episode: 2,\n                            name: 'Name 2'\n                        }\n                    ]\n                }, {\n                    season: 2,\n                    series: ['Series 1', 'Series 3'],\n                    episodes: [\n                        {\n                            SxEx: 'S02E01',\n                            episode: 1,\n                            name: 'Name 1'\n                        }\n                    ]\n                }, {\n                    season: 3,\n                    series: ['Series 2'],\n                    episodes: [\n                        {\n                            SxEx: 'S03E01',\n                            episode: 1,\n                            name: 'Name 1'\n                        }, {\n                            SxEx: 'S03E02',\n                            episode: 2,\n                            name: 'Name 2'\n                        }, {\n                            SxEx: 'S03E03',\n                            episode: 3,\n                            name: 'Name 3'\n                        }\n                    ]\n                }\n            ]\n        }, {\n            id: 2,\n            main_title: \"Title 2\",\n            seasons: [\n                {\n                    season: 1,\n                    series: ['Series 3', 'Series 4'],\n                    episodes: [\n                        {\n                            SxEx: 'S01E01',\n                            episode: 1,\n                            name: 'Name 1'\n                        }, {\n                            SxEx: 'S01E02',\n                            episode: 2,\n                            name: 'Name 2'\n                        }\n                    ]\n                }\n            ]\n        }\n    ]\n};\n\nlet obj = [\n    {\n        name: 'id',\n        path: 'results[0].id',\n        type: 'number'\n    }, {\n        name: 'season',\n        path: 'results[0].seasons[0].season',\n    }, {\n        name: 'episode',\n        path: 'results[0].seasons[0].episodes[0].SxEx',\n        type: 'number',\n        regex: /S[0-9]{1,3}E([0-9]{1,3})/\n    }, {\n        name: 'series',\n        path: 'results[0].seasons[0].series[0]',\n        type: 'string'\n    }\n];\n\nlet str = '' +\n    'results[0].id ~' +\n    'results[0].seasons[0].season' +\n    '\u003c\u003e season' +\n    '\u003c\u003e' +\n    '\u003c\u003e' +\n    '\u003c\u003e Season _VALUE_ ~' +\n    'results[0].seasons[0].episodes[0].SxEx' +\n    '\u003c\u003e episode ' +\n    '\u003c\u003e number ' +\n    '\u003c\u003e S[0-9]{1,3}E([0-9]{1,3})';\n\n// From string params: path \u003c\u003e name \u003c\u003e type \u003c\u003e regex \u003c\u003e constructor\nconsole.log(adop(json, str));\n\n/*\n    [\n      { episode: 1, season: 'Season 1', 'results[0].id': 1 },\n      { episode: 2, season: 'Season 1', 'results[0].id': 1 },\n      { episode: 1, season: 'Season 2', 'results[0].id': 1 },\n      { episode: 1, season: 'Season 3', 'results[0].id': 1 },\n      { episode: 2, season: 'Season 3', 'results[0].id': 1 },\n      { episode: 3, season: 'Season 3', 'results[0].id': 1 },\n      { episode: 1, season: 'Season 1', 'results[0].id': 2 },\n      { episode: 2, season: 'Season 1', 'results[0].id': 2 }\n    ]\n*/\n\n// From object params\nconsole.log(adop(json, obj));\n\n/*\n    [\n      { series: 'Series 1', episode: 1, season: 1, id: 1 },\n      { series: 'Series 1', episode: 2, season: 1, id: 1 },\n      { series: 'Series 2', episode: 1, season: 1, id: 1 },\n      { series: 'Series 2', episode: 2, season: 1, id: 1 },\n      { series: 'Series 3', episode: 1, season: 1, id: 1 },\n      { series: 'Series 3', episode: 2, season: 1, id: 1 },\n      { series: 'Series 1', episode: 1, season: 2, id: 1 },\n      { series: 'Series 3', episode: 1, season: 2, id: 1 },\n      { series: 'Series 2', episode: 1, season: 3, id: 1 },\n      { series: 'Series 2', episode: 2, season: 3, id: 1 },\n      { series: 'Series 2', episode: 3, season: 3, id: 1 },\n      { series: 'Series 3', episode: 1, season: 1, id: 2 },\n      { series: 'Series 3', episode: 2, season: 1, id: 2 },\n      { series: 'Series 4', episode: 1, season: 1, id: 2 },\n      { series: 'Series 4', episode: 2, season: 1, id: 2 }\n    ]\n*/\n\n// Group by series\nconsole.log(JSON.stringify(adop(json, obj, 'series'), null, 2));\n\n/*\n    {\n      \"Series 1\": [\n        {\n          \"series\": \"Series 1\",\n          \"episode\": 1,\n          \"season\": 1,\n          \"id\": 1\n        },\n        {\n          \"series\": \"Series 1\",\n          \"episode\": 2,\n          \"season\": 1,\n          \"id\": 1\n        },\n        {\n          \"series\": \"Series 1\",\n          \"episode\": 1,\n          \"season\": 2,\n          \"id\": 1\n        }\n      ],\n      \"Series 2\": [\n        {\n          \"series\": \"Series 2\",\n          \"episode\": 1,\n          \"season\": 1,\n          \"id\": 1\n        },\n        {\n          \"series\": \"Series 2\",\n          \"episode\": 2,\n          \"season\": 1,\n          \"id\": 1\n        },\n        {\n          \"series\": \"Series 2\",\n          \"episode\": 1,\n          \"season\": 3,\n          \"id\": 1\n        },\n        {\n          \"series\": \"Series 2\",\n          \"episode\": 2,\n          \"season\": 3,\n          \"id\": 1\n        },\n        {\n          \"series\": \"Series 2\",\n          \"episode\": 3,\n          \"season\": 3,\n          \"id\": 1\n        }\n      ],\n      \"Series 3\": [\n        {\n          \"series\": \"Series 3\",\n          \"episode\": 1,\n          \"season\": 1,\n          \"id\": 1\n        },\n        {\n          \"series\": \"Series 3\",\n          \"episode\": 2,\n          \"season\": 1,\n          \"id\": 1\n        },\n        {\n          \"series\": \"Series 3\",\n          \"episode\": 1,\n          \"season\": 2,\n          \"id\": 1\n        },\n        {\n          \"series\": \"Series 3\",\n          \"episode\": 1,\n          \"season\": 1,\n          \"id\": 2\n        },\n        {\n          \"series\": \"Series 3\",\n          \"episode\": 2,\n          \"season\": 1,\n          \"id\": 2\n        }\n      ],\n      \"Series 4\": [\n        {\n          \"series\": \"Series 4\",\n          \"episode\": 1,\n          \"season\": 1,\n          \"id\": 2\n        },\n        {\n          \"series\": \"Series 4\",\n          \"episode\": 2,\n          \"season\": 1,\n          \"id\": 2\n        }\n      ]\n    }\n*/\n\n// Group by id.series.season.episode\nconsole.log(JSON.stringify(adop(json, obj, 'id.series.season.episode'), null, 2));\n\n/*\n    {\n      \"1\": {\n        \"Series 1\": {\n          \"1\": {\n            \"1\": [\n              {\n                \"series\": \"Series 1\",\n                \"episode\": 1,\n                \"season\": 1,\n                \"id\": 1\n              }\n            ],\n            \"2\": [\n              {\n                \"series\": \"Series 1\",\n                \"episode\": 2,\n                \"season\": 1,\n                \"id\": 1\n              }\n            ]\n          },\n          \"2\": {\n            \"1\": [\n              {\n                \"series\": \"Series 1\",\n                \"episode\": 1,\n                \"season\": 2,\n                \"id\": 1\n              }\n            ]\n          }\n        },\n        \"Series 2\": {\n          \"1\": {\n            \"1\": [\n              {\n                \"series\": \"Series 2\",\n                \"episode\": 1,\n                \"season\": 1,\n                \"id\": 1\n              }\n            ],\n            \"2\": [\n              {\n                \"series\": \"Series 2\",\n                \"episode\": 2,\n                \"season\": 1,\n                \"id\": 1\n              }\n            ]\n          },\n          \"3\": {\n            \"1\": [\n              {\n                \"series\": \"Series 2\",\n                \"episode\": 1,\n                \"season\": 3,\n                \"id\": 1\n              }\n            ],\n            \"2\": [\n              {\n                \"series\": \"Series 2\",\n                \"episode\": 2,\n                \"season\": 3,\n                \"id\": 1\n              }\n            ],\n            \"3\": [\n              {\n                \"series\": \"Series 2\",\n                \"episode\": 3,\n                \"season\": 3,\n                \"id\": 1\n              }\n            ]\n          }\n        },\n        \"Series 3\": {\n          \"1\": {\n            \"1\": [\n              {\n                \"series\": \"Series 3\",\n                \"episode\": 1,\n                \"season\": 1,\n                \"id\": 1\n              }\n            ],\n            \"2\": [\n              {\n                \"series\": \"Series 3\",\n                \"episode\": 2,\n                \"season\": 1,\n                \"id\": 1\n              }\n            ]\n          },\n          \"2\": {\n            \"1\": [\n              {\n                \"series\": \"Series 3\",\n                \"episode\": 1,\n                \"season\": 2,\n                \"id\": 1\n              }\n            ]\n          }\n        }\n      },\n      \"2\": {\n        \"Series 3\": {\n          \"1\": {\n            \"1\": [\n              {\n                \"series\": \"Series 3\",\n                \"episode\": 1,\n                \"season\": 1,\n                \"id\": 2\n              }\n            ],\n            \"2\": [\n              {\n                \"series\": \"Series 3\",\n                \"episode\": 2,\n                \"season\": 1,\n                \"id\": 2\n              }\n            ]\n          }\n        },\n        \"Series 4\": {\n          \"1\": {\n            \"1\": [\n              {\n                \"series\": \"Series 4\",\n                \"episode\": 1,\n                \"season\": 1,\n                \"id\": 2\n              }\n            ],\n            \"2\": [\n              {\n                \"series\": \"Series 4\",\n                \"episode\": 2,\n                \"season\": 1,\n                \"id\": 2\n              }\n            ]\n          }\n        }\n      }\n    }\n*/\n```\n\n##### 2020 ExtensionsApp","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fextensionsapp%2Fadop","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fextensionsapp%2Fadop","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fextensionsapp%2Fadop/lists"}