{"id":19560624,"url":"https://github.com/zoubin/deps-iterator","last_synced_at":"2026-06-11T18:31:03.801Z","repository":{"id":31374043,"uuid":"34937059","full_name":"zoubin/deps-iterator","owner":"zoubin","description":"Iterator for walking dependency graph","archived":false,"fork":false,"pushed_at":"2015-05-12T03:15:40.000Z","size":156,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-10-19T20:05:43.112Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"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/zoubin.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":"2015-05-02T05:42:47.000Z","updated_at":"2021-09-22T02:41:09.000Z","dependencies_parsed_at":"2022-09-09T10:20:20.302Z","dependency_job_id":null,"html_url":"https://github.com/zoubin/deps-iterator","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/zoubin/deps-iterator","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zoubin%2Fdeps-iterator","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zoubin%2Fdeps-iterator/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zoubin%2Fdeps-iterator/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zoubin%2Fdeps-iterator/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/zoubin","download_url":"https://codeload.github.com/zoubin/deps-iterator/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zoubin%2Fdeps-iterator/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34213180,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-11T02:00:06.485Z","response_time":57,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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-11T05:08:17.628Z","updated_at":"2026-06-11T18:31:03.768Z","avatar_url":"https://github.com/zoubin.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# deps-iterator\nIterator for walking dependency graph. Cycles will be detected.\n\n## Usage\n\n```\nvar Deps = require('deps-iterator');\nvar iter = Deps(records, opts);\n\n```\n\n* `records`: *Array*. Each element contains a node and its dependencies.\n* `opts`: *Object*. Optional.\n\n    * `key`: *String*. way to get the key. ('id')\n    * `deps`: *String* | *Function*. way to get the deps. ('deps')\n    * `keepDepsOrder`: *Boolean*. If `true`, the order of `deps` matters.(true)\n\n* `iter`: `Iterable` used to walk the dependency graph\n\n### for (var node of iter)\n\n### iter.on('cycle', cb)\nSee example below.\n\n## Examples\n\n**for..of keepDepsOrder:false**\n\n```javascript\nvar Deps = require('deps-iterator');\nvar records = [\n    { id: 0, deps: [1, 2] },\n    { id: 1, deps: [] },\n    { id: 2, deps: [3] },\n    { id: 3, deps: [] },\n    { id: 4, deps: [5, 3] },\n    { id: 5, deps: [3] }\n];\nvar iter = Deps(records, { keepDepsOrder: false });\nvar ordered = [];\nfor (var node of iter) {\n    ordered.push(node);\n}\nconsole.log('ordered:');\nconsole.log(ordered);\n\n```\n\noutput:\n\n```\n⌘ node examples/no-cycle.js\nordered:\n[ { id: 1, deps: [] },\n  { id: 3, deps: [] },\n  { id: 2, deps: [ 3 ] },\n  { id: 0, deps: [ 1, 2 ] },\n  { id: 5, deps: [ 3 ] },\n  { id: 4, deps: [ 5, 3 ] } ]\n\n```\n\n**for..of keepDepsOrder:true**\n\n```javascript\nvar Deps = require('deps-iterator');\nvar records = [\n    { id: 0, deps: [1, 2] },\n    { id: 1, deps: [] },\n    { id: 2, deps: [3] },\n    { id: 3, deps: [] },\n    { id: 4, deps: [5, 3] },\n    { id: 5, deps: [3] }\n];\nvar iter = Deps(records);\nvar ordered = [];\nfor (var node of iter) {\n    ordered.push(node);\n}\nconsole.log('ordered:');\nconsole.log(ordered);\n\n```\n\noutput:\n\n```\n⌘ node examples/keepDepsOrder.js\nordered:\n[ { id: 1, deps: [] },\n  { id: 5, deps: [ 3 ] },\n  { id: 3, deps: [] },\n  { id: 2, deps: [ 3 ] },\n  { id: 0, deps: [ 1, 2 ] },\n  { id: 4, deps: [ 5, 3 ] } ]\n\n```\n\n**.on('cycle', cb)**\n\n```javascript\nvar Deps = require('deps-iterator');\nvar records = [\n    { id: 0, deps: [1] },\n    { id: 1, deps: [2] },\n    { id: 2, deps: [0, 3] },\n    { id: 3, deps: [4] },\n    { id: 4, deps: [2] },\n    { id: 5, deps: [3] }\n];\nvar iter = Deps(records, { keepDepsOrder: false });\niter.on('cycle', function (cycle) {\n    console.log('cycle:', cycle);\n});\nvar ordered = [];\nfor (var node of iter) {\n    ordered.push(node);\n}\nconsole.log('ordered:');\nconsole.log(ordered);\n\n```\n\noutput:\n\n```\n⌘ node examples/cycle.js\nordered:\n[ { id: 4, deps: [ 2 ] },\n  { id: 3, deps: [ 4 ] },\n  { id: 2, deps: [ 0, 3 ] },\n  { id: 1, deps: [ 2 ] },\n  { id: 0, deps: [ 1 ] },\n  { id: 5, deps: [ 3 ] } ]\ncycle: [ '0', '1', '2', '0' ]\ncycle: [ '2', '3', '4', '2' ]\n\n```\n\n**various deps**\n\n```javascript\nvar JSONStream = require('JSONStream');\nvar rs = require('stream').Readable({ objectMode: true });\n\nvar Deps = require('..');\nvar records = [\n    {\n        id: './entry.css',\n        deps: {\n            './deps/a.css': '/Users/zoubin/example/deps/a.css',\n            './deps/b.css': '/Users/zoubin/example/deps/b.css'\n        }\n    },\n    { id: '/Users/zoubin/example/deps/b.css', deps: {} },\n    { id: '/Users/zoubin/example/deps/a.css', deps: {} }\n];\nvar iter = Deps(records, {\n    deps: function (rec) {\n        return Object.keys(rec.deps).map(function (d) { return rec.deps[d]; });\n    }\n});\n\nfor (var node of iter) {\n    rs.push(node);\n}\nrs.push(null);\nrs.pipe(JSONStream.stringify()).pipe(process.stdout);\n\n```\n\noutput:\n\n```\n⌘ node examples/deps.js\n[\n{\"id\":\"/Users/zoubin/example/deps/a.css\",\"deps\":{}}\n,\n{\"id\":\"/Users/zoubin/example/deps/b.css\",\"deps\":{}}\n,\n{\"id\":\"./entry.css\",\"deps\":{\"./deps/a.css\":\"/Users/zoubin/example/deps/a.css\",\"./deps/b.css\":\"/Users/zoubin/example/deps/b.css\"}}\n]\n\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzoubin%2Fdeps-iterator","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzoubin%2Fdeps-iterator","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzoubin%2Fdeps-iterator/lists"}