{"id":23186083,"url":"https://github.com/termosa/setup-manager","last_synced_at":"2025-08-18T16:32:33.800Z","repository":{"id":57357087,"uuid":"48891390","full_name":"termosa/setup-manager","owner":"termosa","description":"The interface to create JSON configurations within code","archived":false,"fork":false,"pushed_at":"2016-06-08T13:59:30.000Z","size":12,"stargazers_count":4,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2024-12-09T11:44:36.783Z","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/termosa.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":"2016-01-01T22:32:09.000Z","updated_at":"2016-08-25T14:46:26.000Z","dependencies_parsed_at":"2022-09-21T13:52:35.119Z","dependency_job_id":null,"html_url":"https://github.com/termosa/setup-manager","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/termosa%2Fsetup-manager","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/termosa%2Fsetup-manager/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/termosa%2Fsetup-manager/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/termosa%2Fsetup-manager/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/termosa","download_url":"https://codeload.github.com/termosa/setup-manager/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":230252844,"owners_count":18197284,"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-12-18T10:14:26.035Z","updated_at":"2024-12-18T10:14:26.701Z","avatar_url":"https://github.com/termosa.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"Setup Manager — The interface to create JSON configurations within code\n========================================================================\n\n[![NPM version](https://badge.fury.io/js/setup-manager.svg)](http://badge.fury.io/js/setup-manager)\n[![Build Status](https://travis-ci.org/termosa/setup-manager.svg?branch=master)](https://travis-ci.org/termosa/setup-manager)\n[![Join the chat at https://gitter.im/termosa/setup-manager](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/termosa/setup-manager)\n\nSimple API to extend and generate deep nested hash objects in JavaScript.\n\nInstallation\n------------\n\nTo install Setup Manager, simply:\n\n```bash\n$ npm install --save setup-manager\n```\n\nAPI\n---\n\n##### constructor(/\\* object \\*/ source)\n\nConstructor can receive an optional object to clone it and use as a base.\n\n```javascript\nvar constructor = require(\"setup-manager\");\nvar manager = constructor(source);\n```\n\nIt returns an object with the list of functions\n\n##### manager.set(/\\* string | object \\*/ name, value)\n\nIt sets the dot-separated property with passed ```value``` to the result object.\n\nIt has several uncommon features:\n\n* Extends exists object in specified property with value's properties if ```value``` is an object.\n* Concatenates exists array in specified property if ```value``` is an array.\n* Uses ```name``` to extend core object if ```name``` is an object.\n* Returns setter-function if ```value``` is not defined. This function can be called with value to set the property defined in ```set``` method.\n\n```javascript\nconstructor().set(\"name\", \"value\").setup();\n// Returns: { \"name\": \"value\" }\n\nconstructor().set(\"name\", { prop: \"value\" }).setup();\n// Returns: { \"name\": { \"prop\": \"value\" }}\n\nconstructor().set(\"name.prop\", \"value\").setup();\n// Returns: { \"name\": { \"prop\": \"value\" }}\n\nconstructor()\n  .set(\"name.prop1\", \"value1\")\n  .set(\"name.prop2\", \"value2\")\n  .setup();\n// Returns: { \"name\": { \"prop1\": \"value1\", \"prop2\": \"value2\" }}\n\nvar config = constructor();\nvar builder = config.set(\"list\");\nbuilder([ 7, 13 ])([ 42 ]);\nconfig.setup();\n// Returns: { list: [ 7, 13, 42 ] }\n```\n\n##### manager.get(/\\* string \\*/ name)\n\nIt returns the value of specified property\n\n```javascript\nconstructor().set(\"user.name\", \"John\").get(\"user.name\");\n// Returns: \"John\"\n```\n\n##### manager.setup()\n\nIt returns the object with all sets applied to it\n\n```javascript\nconstructor()\n  .set(\"user.name\", \"Alice\")\n  .set(\"user.email\", \"alice@setup-manager.npm\")\n  .setup(); \n// Returns: { \"user\": { \"name\": \"Alice\", \"email\": \"alice@setup-manager.npm\" }}\n```\n\nUsage\n-----\n\nTo create the plain list:\n\n```javascript\nvar session = require(\"setup-manager\")();\n\nsession.set(\"username\", \"John Mora\");\nsession.set(\"email\", \"john.mora@setup-manager.npm\");\n\nmodule.exports = session.setup();\n\n/* Will return:\n * {\n *   \"username\": \"John Mora\",\n *   \"email\":    \"john.mora@setup-manager.npm\"\n * }\n */\n```\n\nTo create the nested object:\n\n```javascript\nvar server = require(\"setup-manager\");\n\nserver.set(\"name\", \"slave-01\");\nserver.set(\"host.domain\", \"localhost\");\nserver.set(\"host.port\", 7364);\n\nmodule.exports = server.setup();\n\n/* Will return:\n * {\n *   \"name\": \"slave-01\",\n *   \"host\": {\n *     \"domain\": \"setup-manager.npm\",\n *     \"port\":   7364\n *   }\n * }\n */\n```\n\nTo extend the object:\n\n```javascript\n// default.config.js\nvar config = require(\"setup-manager\");\n\nconfig.set(\"env\", \"production\");\nconfig.set(\"host\", {\n  protocol: \"https\",\n  domain:   \"setup-manager.npm\",\n  port:     7364\n});\n\nmodule.exports = config.setup();\n```\n\n```javascript\n// local.config.js\nvar base_configuration = require(\"./default.config.js\");\nvar config = require(\"setup-manager\")(base_configuration);\n\nconfig.set(\"env\", \"development\");\nconfig.set(\"host\", {\n  domain: \"localhost\",\n  port:   3080\n});\n\nmodule.exports = config.setup();\n\n/* Will return:\n * {\n *   \"env\": \"development\",\n *   \"host\": {\n *     \"protocol\": \"https\",\n *     \"host\":     \"localhost\",\n *     \"port\":     3080\n *   }\n * }\n */\n```\n\nTo create the complex configuration:\n\n```javascript\nvar SuperPlugin = require(\"SuperPlugin\");\nvar base_configuration = require(\"./default.config.js\");\nvar config = require(\"setup-manager\")(base_configuration);\n\nvar setAlias = config.set(\"resolve.alias\");\nvar setPlugins = config.set(\"plugins\");\n\nfunction addAlias(name, source) {\n  var alias = {};\n  alias[name] = source;\n  setAlias(alias);\n}\n\nfunction addPlugin(plugin) {\n  setPlugins([plugin]);\n}\n\n// set vendor aliases\naddAlias(\"module\", \"./modules\");\naddAlias(\"style\", \"./styles\");\n\n// setup an extra plugin\naddPlugin(new SuperPlugin({ mode: \"unsafe\" }));\naddAlias(\"super\", \"./node_modules/SuperPlugin/vendors\");\n\nmodule.exports = config.setup();\n\n/* Will return:\n * {\n *   \"plugins\": [ SuperPlugin { mode: \"unsafe\" } ],\n *   \"resolve\": {\n *     \"alias\": {\n *       \"modue\": \"./modules\",\n *       \"style\": \"./styles\",\n *       \"super\": \"./node_modules/SuperPlugin/vendors\"\n *     }\n *   }\n */\n```\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftermosa%2Fsetup-manager","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftermosa%2Fsetup-manager","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftermosa%2Fsetup-manager/lists"}