{"analyzedAt":"2022-07-13T01:55:44.683Z","collected":{"metadata":{"name":"@fmented/scp","scope":"fmented","version":"0.2.2","description":"A simple svelte component parser to get necessary info for documentation","keywords":["scp","svelte","parser","documentation","utility","cli-tool"],"date":"2022-03-07T00:43:12.991Z","author":{"name":"fauky"},"publisher":{"username":"fmented","email":"fmented@gmail.com"},"maintainers":[{"username":"fmented","email":"fmented@gmail.com"}],"repository":{"type":"git","url":"git+https://github.com/fmented/scp.git"},"links":{"npm":"https://www.npmjs.com/package/%40fmented%2Fscp","homepage":"https://github.com/fmented/scp/","repository":"https://github.com/fmented/scp","bugs":"https://github.com/fmented/scp/issues"},"license":"MIT","dependencies":{"watch":"^1.0.2"},"devDependencies":{"@types/estree":"^0.0.51","husky":"^7.0.4","svelte":"^3.46.4","tsdx":"^0.14.1","tslib":"^2.3.1","typescript":"^3.9.10"},"optionalDependencies":{"watch":"^1.0.2"},"releases":[{"from":"2022-06-13T00:00:00.000Z","to":"2022-07-13T00:00:00.000Z","count":0},{"from":"2022-04-14T00:00:00.000Z","to":"2022-07-13T00:00:00.000Z","count":0},{"from":"2022-01-14T00:00:00.000Z","to":"2022-07-13T00:00:00.000Z","count":12},{"from":"2021-07-13T00:00:00.000Z","to":"2022-07-13T00:00:00.000Z","count":12},{"from":"2020-07-13T00:00:00.000Z","to":"2022-07-13T00:00:00.000Z","count":12}],"hasTestScript":true,"readme":"# Intro\nscp stands for ~~Secure Contain Protect~~ Svelte Component Parser\nit can analyze .svelte file and give necessary information for documentation such as\n- props\n- slots\n- events\n- component methods\n- module methods\n- component exports\n- module exports\n\n<br> \n\n# Instalation\n\n```bash\nnpm i -D @fmented/scp\n```\n\nto install it globally \n\n```bash\nnpm i @fmented/scp -g\n```\n\n<br>\n\n# CLI\n\ncreate <mark>scp.config.js</mark> in your project root \n\n```javascript\n/** @type {import('@fmented/scp/types').Config} */\n    const config = {\n        //directory to scan. relative to project root\n        source: 'src/lib',\n\n        //this is pretty self-explanatory. relative to project root\n        output: 'src/docs/components.json',\n\n        //if you want to skip specific file\n        ignore: (file)=>file=='ThisComponent.svelte',\n\n        //if you need S̶p̶e̶c̶i̶a̶l̶ ̶C̶o̶n̶t̶a̶i̶n̶m̶e̶n̶t̶ ̶P̶r̶o̶c̶e̶d̶u̶r̶e̶s̶  specific formatting \n        format: (info)=>({slots:info.slots})\n    }   \n\n    exports.config = config\n    //this config is optional\n```\n\nif the setup is done run\n\n```bash\nscpd\n```\n\nor to watch every changes, run\n\n```bash\nscpd --watch\n```\n\n> __⚠ you need to have watch package to be installed__\n\n> __⚠ be aware, when you do this, scp will ignore any error that occurs during parsing__\n\n<br>\n\n# Javascipt \n\n```javascript\nimport scp from '@fmented/scp'\n\nscp('src/components', {output:'output.json'})\n```\n\nif you need to get the info as array of object\n\n```javascript\nimport scp from '@fmented/scp'\n\n//await must run inside async function\nconst data = await scp('src/components', {return:true})\n\n//or \nscp('src/components', {return:true}).then(arr=>{\n    arr.forEach(data=>{\n        console.log(data)\n    })\n})\n\n//output and format will be ignored if return is set to true\nconst data = await scp('src/components', {\n  return:true,\n\n  //will be ignored\n  format:data=>({slots:data.slots}),\n  output:'out.json'\n  })\n\n```\n\n<br>\n\n# TODO\n- [ ] better type system\n- [ ] better error handling\n- [ ] better way to parse events\n- [ ] ability to parse component that uses preprocessor, eg. pub\n\n<br>\n\n### Output Example With Default Formatting\n<hr/>\n\n```json\n[\n   {\n    \"name\": \"Steps\",\n    \"path\": \"D:\\\\scp\\\\local\\\\test\\\\Steps.svelte\",\n    \"props\": [\n      {\n        \"name\": \"height\",\n        \"type\": \"string\",\n        \"default\": \"max-content\"\n      },\n      {\n        \"name\": \"grow\",\n        \"type\": \"boolean\",\n        \"default\": true\n      },\n      {\n        \"name\": \"active\",\n        \"type\": \"number\",\n        \"default\": \"0\"\n      }\n    ],\n    \"slots\": [\n      {\n        \"name\": \"menu\",\n        \"data\": [\n          \"active\",\n          \"display\"\n        ]\n      },\n      {\n        \"name\": \"default\",\n        \"data\": [\n          \"Step\",\n          \"index\",\n          \"lastStep\"\n        ]\n      },\n      {\n        \"name\": \"action\",\n        \"data\": [\n          \"next\",\n          \"prev\"\n        ]\n      }\n    ],\n    \"events\": [\n      \"finished\"\n    ],\n    \"componentMethods\": [\n      {\n        \"name\": \"nextStep\",\n        \"params\": []\n      },\n      {\n        \"name\": \"prevStep\",\n        \"params\": []\n      },\n      {\n        \"name\": \"next\",\n        \"params\": []\n      },\n      {\n        \"name\": \"prev\",\n        \"params\": []\n      }\n    ],\n    \"componentExports\": [\n      \"index\",\n      \"lastStep\"\n    ],\n    \"moduleMethods\": [],\n    \"moduleExports\": []\n  },\n  {\n    \"name\": \"ThemeManager\",\n    \"path\": \"D:\\\\scp\\\\local\\\\test\\\\ThemeManager.svelte\",\n    \"props\": [\n      {\n        \"name\": \"themes\",\n        \"type\": \"Themes\"\n      },\n      {\n        \"name\": \"sizes\",\n        \"type\": \"Size\"\n      },\n      {\n        \"name\": \"lightRatio\",\n        \"type\": \"any\",\n        \"default\": \"5\"\n      }\n    ],\n    \"slots\": [\n      {\n        \"name\": \"default\",\n        \"data\": []\n      }\n    ],\n    \"events\": [],\n    \"componentMethods\": [],\n    \"componentExports\": [],\n    \"moduleMethods\": [\n      {\n        \"name\": \"setTheme\",\n        \"params\": [\n          {\n            \"name\": \"th\",\n            \"type\": \"string\"\n          }\n        ]\n      },\n      {\n        \"name\": \"switchTheme\",\n        \"params\": []\n      }\n    ],\n    \"moduleExports\": []\n  }\n]\n```"},"npm":{"downloads":[{"from":"2022-07-12T00:00:00.000Z","to":"2022-07-13T00:00:00.000Z","count":0},{"from":"2022-07-06T00:00:00.000Z","to":"2022-07-13T00:00:00.000Z","count":0},{"from":"2022-06-13T00:00:00.000Z","to":"2022-07-13T00:00:00.000Z","count":5},{"from":"2022-04-14T00:00:00.000Z","to":"2022-07-13T00:00:00.000Z","count":32},{"from":"2022-01-14T00:00:00.000Z","to":"2022-07-13T00:00:00.000Z","count":611},{"from":"2021-07-13T00:00:00.000Z","to":"2022-07-13T00:00:00.000Z","count":611}],"starsCount":0},"github":{"starsCount":0,"forksCount":0,"subscribersCount":1,"issues":{"count":0,"openCount":0,"distribution":{"3600":0,"10800":0,"32400":0,"97200":0,"291600":0,"874800":0,"2624400":0,"7873200":0,"23619600":0,"70858800":0,"212576400":0},"isDisabled":false},"contributors":[{"username":"fmented","commitsCount":14}],"commits":[{"from":"2022-07-06T00:00:00.000Z","to":"2022-07-13T00:00:00.000Z","count":0},{"from":"2022-06-13T00:00:00.000Z","to":"2022-07-13T00:00:00.000Z","count":0},{"from":"2022-04-14T00:00:00.000Z","to":"2022-07-13T00:00:00.000Z","count":0},{"from":"2022-01-14T00:00:00.000Z","to":"2022-07-13T00:00:00.000Z","count":14},{"from":"2021-07-13T00:00:00.000Z","to":"2022-07-13T00:00:00.000Z","count":14}]},"source":{"files":{"readmeSize":4168,"testsSize":1990,"hasNpmIgnore":true},"linters":["prettier"]}},"evaluation":{"quality":{"carefulness":0.45999999999999996,"tests":0.6,"health":1,"branding":0},"popularity":{"communityInterest":2,"downloadsCount":10.666666666666666,"downloadsAcceleration":0.05329147640791476,"dependentsCount":0},"maintenance":{"releasesFrequency":1,"commitsFrequency":0.7140068493150684,"openIssues":0.7,"issuesDistribution":0.7}},"score":{"final":0.5858358870206883,"detail":{"quality":0.7529586381780047,"popularity":0.03125412844237062,"maintenance":0.9971695731784493}}}