{"id":20671160,"url":"https://github.com/allnulled/nodelive","last_synced_at":"2026-04-21T01:32:42.513Z","repository":{"id":98546901,"uuid":"249013882","full_name":"allnulled/nodelive","owner":"allnulled","description":"Dynamic interaction within your nodejs programs.","archived":false,"fork":false,"pushed_at":"2020-03-21T22:38:02.000Z","size":273,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-10-15T05:59:53.943Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://www.npmjs.com/package/nodelive","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/allnulled.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,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-03-21T16:18:53.000Z","updated_at":"2021-10-14T17:36:12.000Z","dependencies_parsed_at":null,"dependency_job_id":"1217f4e0-63c3-4ffc-b482-44b1223f68b7","html_url":"https://github.com/allnulled/nodelive","commit_stats":{"total_commits":17,"total_committers":1,"mean_commits":17.0,"dds":0.0,"last_synced_commit":"a77ebccde02053e745e636d0ed2683daa5a015bc"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/allnulled/nodelive","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/allnulled%2Fnodelive","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/allnulled%2Fnodelive/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/allnulled%2Fnodelive/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/allnulled%2Fnodelive/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/allnulled","download_url":"https://codeload.github.com/allnulled/nodelive/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/allnulled%2Fnodelive/sbom","scorecard":{"id":185831,"data":{"date":"2025-08-11","repo":{"name":"github.com/allnulled/nodelive","commit":"a77ebccde02053e745e636d0ed2683daa5a015bc"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":2.6,"checks":[{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Code-Review","score":0,"reason":"Found 0/17 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"SAST","score":0,"reason":"no SAST tool detected","details":["Warn: no pull requests merged into dev branch"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":0,"reason":"license file not detected","details":["Warn: project does not have a license file"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}}]},"last_synced_at":"2025-08-16T19:47:05.497Z","repository_id":98546901,"created_at":"2025-08-16T19:47:05.497Z","updated_at":"2025-08-16T19:47:05.497Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32072953,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-20T21:26:33.338Z","status":"ssl_error","status_checked_at":"2026-04-20T21:26:22.081Z","response_time":94,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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-16T20:25:33.578Z","updated_at":"2026-04-21T01:32:42.485Z","avatar_url":"https://github.com/allnulled.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# nodelive\n\nDynamic interaction within nodejs programs.\n\n## Install\n\n`$ npm i -D nodelive`\n\n## Why?\n\nTo inject code in live node executions.\n\nTo not have to open Chrome to debug nodejs.\n\nTo debug, in live, from the inside, with some tools already.\n\nTo hack other programs easily too, why not.\n\n## Features\n\n - [✔] Live code injection and exploration.\n - [✔] Memory usage printing.\n - [✔] Advanced printing for debugging.\n    - [✔] Functions source code.\n    - [✔] Circular JSON structures.\n - [✔] Easy command line interface input for:\n    - [✔] Text\n    - [✔] Confirm\n    - [✔] Options\n\n## Get started\n\nThis package consists in 1 unique object that exposes the whole API.\n\nTo import it:\n\n```js\nconst nodelive = require(\"nodelive\");\n```\n\n## Demo\n\nYou will find examples of the usable API for the next topics:\n\n   - [✔] For general help\n   - [✔] For console\n   - [✔] For editor\n\n----\n\n### For general help\n\n#### *Store and retrieve values from nodelive (a simple helper storage).*\n\n```js\nnodelive.set(\"a\", \"a\").put({b:\"b\",c:\"c\"});\nnodelive.get(\"b\");   // \u003e\u003e \"b\"\nnodelive.get();      // \u003e\u003e {a:\"a\",b:\"b\",c:\"c\"}\n```\n\n#### *Stringify (supports circular JSON).*\n\n```js\nnodelive.stringify({some:\"object\"}, null, 2);\n```\n\n#### *Print message.*\n\n```js\nnodelive.print(\"Some message\");\n```\n\n#### *Explore any type of data.*\n\n```js\nnodelive.explore(data =\u003e 500);\n```\n\n#### *List all properties of an object.*\n\n```js\nnodelive.description(global);\n```\n\n#### *Print the description of an object.*\n\n```js\nnodelive.describe(global);\n```\n\n#### *Stringify and print data.*\n\n```js\nnodelive.view({a:\"a\",b:\"b\"});\n```\n\n#### *Show memory usage.*\n\n```js\nnodelive.memory();\n```\n\n----\n\n### For console\n\n#### *Execute command for the native console synchronously*\n\n```js\nnodelive.cmd(\"npm run test\")\n```\n\n#### *Ask for user input (as string).*\n\n```js\nconst name = await nodelive.ask(\"What is your name?\");\n```\n\n#### *Ask for user input (as boolean).*\n\n```js\nconst isBusy = await nodelive.askif(\"Are you very busy right now?\");\n```\n\n#### *Ask for user input, as options election (of strings).*\n\n```js\nconst optionSelected = await nodelive.askone([\"option a\", \"option b\", \"option c\"], \"Choose an option:\");\n```\n\n#### *Enter into a command-line loop to inject code!*\n\n```js\nawait nodelive.code()\n```\n\n#### *Evaluate specific expression from console!*\n\n```js\nawait nodelive.evaluate()\n```\n\n----\n\n### For editors\n\n#### *Open editor and inject code in live!*\n\n```js\nconst parameterNames = [\"name\", \"age\"];\nconst parameters = [\"Carlos\", \"50\"];\n\nnodelive.PREFERRED_EDITOR = \"brackets\"; // By default it is \"subl\" of Sublime Text!\n\nawait nodelive.editor(parameterNames, parameters);\n```\n\nTo see some more examples, please go to the [tests folder of the project at Github](https://github.com/allnulled/nodelive/tree/master/test).\n\n----\n\n## API\n\nHere you can have an overview of the whole API.\n\n*Note: all the code injections support `await` expressions by default.*\n\n\n\n### `nodelive.get(name:String)`\n\nGets a value from the nodelive internal memory.\n\n\n\n\n### `nodelive.set(name:String, value:any)`\n\nSaves a value in the nodelive internal memory.\n\nChainable method.\n\n\n\n\n### `nodelive.put(Object:values)`\n\nSaves a set of key-value pairs in the nodelive internal memory.\n\nChainable method.\n\n\n\n\n### `nodelive.stringify(...args)`\n\nReturns a JSON representation, no matter about circular JSON or functions.\n\n\n\n\n### `nodelive.print(...data)`\n\nPrints the data by console.\n\nChainable method.\n\n\n\n\n### `nodelive.explore(...data)`\n\nA more exhaustive printing of objects, functions, etc.\n\nChainable method.\n\n\n\n\n### `nodelive.description(data:any)`\n\nReturns a deep description of all the properties of an object. The description contains the\nindex (sorted alphabetically), the type of property and the property name.\n\n\n\n\n### `nodelive.describe(data:any)`\n\nPrints the description extracted of the passed object.\n\nChainable method.\n\n\n\n\n### `nodelive.view(data:any)`\n\nStringifies and prints any data.\n\nChainable method.\n\n\n\n\n### `nodelive.memory()`\n\nPrints a memory usage summary.\n\nChainable method.\n\n\n\n\n### `nodelive.cmd(command:String, options:Object)`\n\nSynchronous. Execute command-line commands in a nut.\n\n\n\n\n### `nodelive.ask(message:String): Promise\u003cString\u003e`\n\nAsynchronous. Prints a question. Returns an answer as string.\n\n\n\n\n### `nodelive.askif(message:String, defaultValue:boolean): Promise\u003cBoolean\u003e`\n\nAsynchronous. Prints a question. Returns an answer as boolean. By default, the answer is false.\n\n\n\n\n### `nodelive.askone(options:Array\u003cString\u003e, message:String): Promise\u003cString\u003e`\n\nAsynchronous. Prints a question and a numbered list. Returns the value selected from the list as string.\n\n\n\n\n### `nodelive.code(message:String): Promise`\n\nAsynchronous. Inject (multiline) code in live.\n\nTo get out, you must enter an empty line.\n\n\n\n\n### `nodelive.evaluate(message:String): Promise`\n\nAsynchronous. Evaluate js expressions (one line, something) of code in live.\n\n\n\n\n### `nodelive.live(message:String): Promise`\n\nAsynchronous. Inject (multiline) code in loop (so, a simple REPL) until you return \"exit\" (as a string).\n\nTo get out, you must `return 'exit'`.\n\n\n\n\n### `nodelive.inspect(message:String): Promise`\n\nAsynchronous. Explore the data that `nodelive` has saved in memory (from selector).\n\n\n\n\n### `nodelive.executeCode(code:String, isMultiline:Boolean, ok:Function, fail:Function)`\n\nAsynchronous callback. Executes `js` code, embeded in `async` environment already.\n\nUnder the hood, `code`, `evaluate`, `live` and `editor` functions use this method to inject code\nand output a standard response.\n\n\n\n\n### `nodelive.editor(argsNames:Array\u003cString\u003e, args:Array\u003cany\u003e): Promise`\n\nAsynchronous. Opens a file on your preferred editor (set it at `nodelive.PREFERRED_EDITOR`)\nthat when saved, it is injected.\n\nIt has the ability to pass parameters and rename them, for your code to receive them.\n\nTo get out, save an empty text.\n\n### `nodelive.editor(args:Object): Promise`\n\nAsynchronous. Same as the one before, but accepting a key-value pairs object for arguments injection.\n\n\n\n\n### `nodelive.$require(...args)`\n\nAllows to `require` files.\n\n\n\n\n### `nodelive.$import(...args)`\n\nAllows to `importFresh` (like a `require` but without cache) files.\n\n\n\n\n### `nodelive.$resolve(...args)`\n\nAllows to `path.resolve` files.\n\n\n\n\n\n## Additionals\n\nWhen interaction in live inside your programs, you have a global API automatically injected to `global` object.\n\n  - `$hasnodelive`: `boolean` indicating if the library was loaded.\n  - `$nodelive`: master `object` of the API.\n  - `$dirname`: same as `process.cwd()`.\n  - `$require`: same as using `require` but from `process.cwd()`.\n  - `$import`: same as using uncached `require` but from `process.cwd()`\n  - `$resolve`: same as using `path.resolve` but from `process.cwd()`\n\n\n## License\n\nThis project is under [WTFPL or What The Fuck Public License](http://www.wtfpl.net), which means 'do what you want'.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fallnulled%2Fnodelive","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fallnulled%2Fnodelive","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fallnulled%2Fnodelive/lists"}