{"id":18324640,"url":"https://github.com/arnaudbuchholz/gpf-js","last_synced_at":"2025-04-06T00:31:02.505Z","repository":{"id":8114782,"uuid":"9530894","full_name":"ArnaudBuchholz/gpf-js","owner":"ArnaudBuchholz","description":"A multi-purpose JavaScript library","archived":false,"fork":false,"pushed_at":"2022-12-30T17:17:25.000Z","size":6450,"stargazers_count":11,"open_issues_count":44,"forks_count":2,"subscribers_count":5,"default_branch":"master","last_synced_at":"2024-04-14T12:19:16.946Z","etag":null,"topics":["coverage","grunt","javascript","nodejs","promise","rhino","streams","wscript"],"latest_commit_sha":null,"homepage":"http://gpf-js.blogspot.com/","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ArnaudBuchholz.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2013-04-18T20:18:14.000Z","updated_at":"2023-01-24T14:13:14.000Z","dependencies_parsed_at":"2023-01-13T15:30:53.060Z","dependency_job_id":null,"html_url":"https://github.com/ArnaudBuchholz/gpf-js","commit_stats":null,"previous_names":[],"tags_count":15,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ArnaudBuchholz%2Fgpf-js","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ArnaudBuchholz%2Fgpf-js/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ArnaudBuchholz%2Fgpf-js/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ArnaudBuchholz%2Fgpf-js/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ArnaudBuchholz","download_url":"https://codeload.github.com/ArnaudBuchholz/gpf-js/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247419597,"owners_count":20936009,"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":["coverage","grunt","javascript","nodejs","promise","rhino","streams","wscript"],"created_at":"2024-11-05T18:35:23.887Z","updated_at":"2025-04-06T00:30:59.164Z","avatar_url":"https://github.com/ArnaudBuchholz.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# GPF Library\n\n![GPF Logo](http://arnaudbuchholz.github.io/gpf/gpf_320x200.svg)\n\n[![Travis-CI](https://travis-ci.org/ArnaudBuchholz/gpf-js.svg?branch=master)](https://travis-ci.org/ArnaudBuchholz/gpf-js#)\n[![Coverage Status](https://coveralls.io/repos/github/ArnaudBuchholz/gpf-js/badge.svg?branch=master)](https://coveralls.io/github/ArnaudBuchholz/gpf-js?branch=master)\n[![DeepScan grade](https://deepscan.io/api/projects/1923/branches/8681/badge/grade.svg)](https://deepscan.io/dashboard#view=project\u0026pid=1923\u0026bid=8681)\n[![Maintainability](https://api.codeclimate.com/v1/badges/06d49b2308264f3c5495/maintainability)](https://codeclimate.com/github/ArnaudBuchholz/gpf-js/maintainability)\n[![Codacy Badge](https://api.codacy.com/project/badge/Grade/6c8806b35ecc4e70ba985534fda0681f)](https://www.codacy.com/app/ArnaudBuchholz/gpf-js?utm_source=github.com\u0026amp;utm_medium=referral\u0026amp;utm_content=ArnaudBuchholz/gpf-js\u0026amp;utm_campaign=Badge_Grade)\n[![Package Quality](https://npm.packagequality.com/shield/gpf-js.svg)](https://packagequality.com/#?package=gpf-js)\n[![Known Vulnerabilities](https://snyk.io/test/github/ArnaudBuchholz/gpf-js/badge.svg?targetFile=package.json)](https://snyk.io/test/github/ArnaudBuchholz/gpf-js?targetFile=package.json)\n[![dependencies Status](https://david-dm.org/ArnaudBuchholz/gpf-js/status.svg)](https://david-dm.org/ArnaudBuchholz/gpf-js)\n[![devDependencies Status](https://david-dm.org/ArnaudBuchholz/gpf-js/dev-status.svg)](https://david-dm.org/ArnaudBuchholz/gpf-js?type=dev)\n[![Built with Grunt](https://gruntjs.com/cdn/builtwith.png)](http://gruntjs.com/)\n[![Vanilla JS](http://vanilla-js.com/assets/button.png)](http://vanilla-js.com)\n[![gpf-js](https://badge.fury.io/js/gpf-js.svg)](https://www.npmjs.org/package/gpf-js)\n[![gpf-js](http://img.shields.io/npm/dm/gpf-js.svg)](https://www.npmjs.org/package/gpf-js)\n[![install size](https://packagephobia.now.sh/badge?p=gpf-js)](https://packagephobia.now.sh/result?p=gpf-js)\n[![CDN](https://data.jsdelivr.com/v1/package/npm/gpf-js/badge)](https://www.jsdelivr.com/package/npm/gpf-js)\n[![MIT License](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2FArnaudBuchholz%2Fgpf-js.svg?type=shield)](https://app.fossa.com/projects/git%2Bgithub.com%2FArnaudBuchholz%2Fgpf-js?ref=badge_shield)\n\nA multi-purpose JavaScript library created and maintained by\n[Arnaud Buchholz](http://gpf-js.blogspot.com/).\n\n## Features\n\n* Provides a common scripting layer for several hosts\n([cscript/wscript](http://technet.microsoft.com/en-us/library/bb490887.aspx),\n[NodeJS](http://nodejs.org/),\n[Rhino](https://developer.mozilla.org/en-US/docs/Mozilla/Projects/Rhino),\n[Nashorn](https://en.wikipedia.org/wiki/Nashorn_%28JavaScript_engine%29),\n[PhantomJS](http://phantomjs.org/), most *recent* browsers)\n* Namespace and class system\n* Interface based\n* Asynchronous streams\n* Modularization helper\n* Attributes\n* Almost 100% coverage\n\nThis library is developed in conjunction with a [blog](http://gpf-js.blogspot.com/) where the concepts and algorithms are documented and explained.\n\n## Metrics\n\nThis part is automatically updated upon a successful build:\n* Code coverage is computed by executing [all hosts](https://arnaudbuchholz.github.io/gpf/doc/tutorial-LOADING.html),\nignored parts are [documented](https://arnaudbuchholz.github.io/gpf/doc/tutorial-COVERAGE.html)\n* The [maintainability](https://arnaudbuchholz.github.io/gpf/plato/index.html) is based on\n[plato evaluation](http://blogs.msdn.com/b/codeanalysis/archive/2007/11/20/maintainability-index-range-and-meaning.aspx)\n\n**SME** stands for **s**ource **m**inimal **e**xpectation.\n\nMetric name | average | total | SME | comment\n------ | ----- | ----- | ----- | -----\nStatements coverage|100%||90%|*0.32% ignored*\nBranches coverage|100%||90%|*0.68% ignored*\nFunctions coverage|100%||90%|*0.6% ignored*\nMaintainability|83.64||70|\nNumber of tests||1109||*pending: 0, duration: 879ms*\nNumber of sources||144||\nLines of code|93|13443||\n\n## Setup\n\n* Clone repository\n* install [grunt](https://gruntjs.com/getting-started): `npm install -g grunt-cli`\n* at the root of the cloned repository: `npm install`, then `grunt`\n\n## Testing\n\nSee [Library testing](https://github.com/ArnaudBuchholz/gpf-js/blob/master/doc/tutorials/TESTME.md)\n\n## Documentation\n\nThe [documentation](https://arnaudbuchholz.github.io/gpf/doc/index.html) is extracted from the sources using\n[jsdoc syntax](https://jsdoc.app/) with [grunt-jsdoc](https://github.com/krampstudio/grunt-jsdoc)\nand the template from [ink-docstrap](https://www.npmjs.com/package/ink-docstrap)\n\n## Versions\n\nDate | Version | Label | Release | Debug | Flavors\n------ | ------ | ----- | ----- | ----- | -----\n2019-10-30 | [1.0.0](https://github.com/ArnaudBuchholz/gpf-js/tree/v1.0.0) | [First productive version](https://gpf-js.blogspot.com/p/release-notes-are-coming.html?version=1.0.0) | [lib](https://arnaudbuchholz.github.io/gpf/1.0.0/gpf.js) / [test](https://arnaudbuchholz.github.io/gpf/test.html?release=1.0.0) | [lib](https://arnaudbuchholz.github.io/gpf/1.0.0/gpf-debug.js) / [test](https://arnaudbuchholz.github.io/gpf/test.html?debug=1.0.0) | [node](https://arnaudbuchholz.github.io/gpf/1.0.0/gpf-node.js) / [require](https://arnaudbuchholz.github.io/gpf/1.0.0/gpf-require.js)\n2019-03-12 | [0.2.9](https://github.com/ArnaudBuchholz/gpf-js/tree/v0.2.9) | [ES6 Support](https://gpf-js.blogspot.com/2019/03/release-029-es6-support.html) | [lib](https://arnaudbuchholz.github.io/gpf/0.2.9/gpf.js) / [test](https://arnaudbuchholz.github.io/gpf/test.html?release=0.2.9) | [lib](https://arnaudbuchholz.github.io/gpf/0.2.9/gpf-debug.js) / [test](https://arnaudbuchholz.github.io/gpf/test.html?debug=0.2.9) | [node](https://arnaudbuchholz.github.io/gpf/0.2.9/gpf-node.js) / [require](https://arnaudbuchholz.github.io/gpf/0.2.9/gpf-require.js)\n2018-12-03 | [0.2.8](https://github.com/ArnaudBuchholz/gpf-js/tree/v0.2.8) | [Serialization attributes](https://gpf-js.blogspot.com/2018/12/release-028.html) | [lib](https://arnaudbuchholz.github.io/gpf/0.2.8/gpf.js) / [test](https://arnaudbuchholz.github.io/gpf/test.html?release=0.2.8) | [lib](https://arnaudbuchholz.github.io/gpf/0.2.8/gpf-debug.js) / [test](https://arnaudbuchholz.github.io/gpf/test.html?debug=0.2.8) | [require](https://arnaudbuchholz.github.io/gpf/0.2.8/gpf-require.js)\n2018-08-04 | [0.2.7](https://github.com/ArnaudBuchholz/gpf-js/tree/v0.2.7) | [Quality and XML](https://gpf-js.blogspot.com/2018/08/release-027-quality-and-xml.html) | [lib](https://arnaudbuchholz.github.io/gpf/0.2.7/gpf.js) / [test](https://arnaudbuchholz.github.io/gpf/test.html?release=0.2.7) | [lib](https://arnaudbuchholz.github.io/gpf/0.2.7/gpf-debug.js) / [test](https://arnaudbuchholz.github.io/gpf/test.html?debug=0.2.7) | [require](https://arnaudbuchholz.github.io/gpf/0.2.7/gpf-require.js)\n2018-05-03 | [0.2.6](https://github.com/ArnaudBuchholz/gpf-js/tree/v0.2.6) | [gpf.require.js](https://gpf-js.blogspot.com/2018/05/release-026-gpfrequirejs.html) | [lib](https://arnaudbuchholz.github.io/gpf/0.2.6/gpf.js) / [test](https://arnaudbuchholz.github.io/gpf/test.html?release=0.2.6) | [lib](https://arnaudbuchholz.github.io/gpf/0.2.6/gpf-debug.js) / [test](https://arnaudbuchholz.github.io/gpf/test.html?debug=0.2.6) | [require](https://arnaudbuchholz.github.io/gpf/0.2.6/gpf-require.js)\n2018-04-03 | [0.2.5](https://github.com/ArnaudBuchholz/gpf-js/tree/v0.2.5) | [Flavors](https://gpf-js.blogspot.com/2018/04/release-025-flavors.html) | [lib](https://arnaudbuchholz.github.io/gpf/0.2.5/gpf.js) / [test](https://arnaudbuchholz.github.io/gpf/test.html?release=0.2.5) | [lib](https://arnaudbuchholz.github.io/gpf/0.2.5/gpf-debug.js) / [test](https://arnaudbuchholz.github.io/gpf/test.html?debug=0.2.5) | \n2018-02-28 | [0.2.4](https://github.com/ArnaudBuchholz/gpf-js/tree/v0.2.4) | [Attributes](https://gpf-js.blogspot.com/2018/03/release-024-attributes.html) | [lib](https://arnaudbuchholz.github.io/gpf/0.2.4/gpf.js) / [test](https://arnaudbuchholz.github.io/gpf/test.html?release=0.2.4) | [lib](https://arnaudbuchholz.github.io/gpf/0.2.4/gpf-debug.js) / [test](https://arnaudbuchholz.github.io/gpf/test.html?debug=0.2.4) | \n2017-12-20 | [0.2.3](https://github.com/ArnaudBuchholz/gpf-js/tree/v0.2.3) | [Streams and Pipes](https://gpf-js.blogspot.com/2017/12/release-023-streams-and-pipes.html) | [lib](https://arnaudbuchholz.github.io/gpf/0.2.3/gpf.js) / [test](https://arnaudbuchholz.github.io/gpf/test.html?release=0.2.3) | [lib](https://arnaudbuchholz.github.io/gpf/0.2.3/gpf-debug.js) / [test](https://arnaudbuchholz.github.io/gpf/test.html?debug=0.2.3) | \n2017-11-01 | [0.2.2](https://github.com/ArnaudBuchholz/gpf-js/tree/v0.2.2) | [gpf.require](https://gpf-js.blogspot.com/2017/11/release-022-gpfrequire.html) | [lib](https://arnaudbuchholz.github.io/gpf/0.2.2/gpf.js) / [test](https://arnaudbuchholz.github.io/gpf/test.html?release=0.2.2) | [lib](https://arnaudbuchholz.github.io/gpf/0.2.2/gpf-debug.js) / [test](https://arnaudbuchholz.github.io/gpf/test.html?debug=0.2.2) | \n2017-06-06 | [0.2.1](https://github.com/ArnaudBuchholz/gpf-js/tree/v0.2.1) | [Side project support](https://gpf-js.blogspot.com/2017/06/release-021-side-project-support.html) | [lib](https://arnaudbuchholz.github.io/gpf/0.2.1/gpf.js) / [test](https://arnaudbuchholz.github.io/gpf/test.html?release=0.2.1) | [lib](https://arnaudbuchholz.github.io/gpf/0.2.1/gpf-debug.js) / [test](https://arnaudbuchholz.github.io/gpf/test.html?debug=0.2.1) | \n2017-04-29 | [0.1.9](https://github.com/ArnaudBuchholz/gpf-js/tree/v0.1.9) | [Records files](https://gpf-js.blogspot.com/2017/04/release-019-records-files.html) | [lib](https://arnaudbuchholz.github.io/gpf/0.1.9/gpf.js) / [test](https://arnaudbuchholz.github.io/gpf/test.html?release=0.1.9) | [lib](https://arnaudbuchholz.github.io/gpf/0.1.9/gpf-debug.js) / [test](https://arnaudbuchholz.github.io/gpf/test.html?debug=0.1.9) | \n2017-03-26 | [0.1.8](https://github.com/ArnaudBuchholz/gpf-js/tree/v0.1.8) | [Interfaces](https://gpf-js.blogspot.com/2017/03/release-018.html) | [lib](https://arnaudbuchholz.github.io/gpf/0.1.8/gpf.js) / [test](https://arnaudbuchholz.github.io/gpf/test.html?release=0.1.8) | [lib](https://arnaudbuchholz.github.io/gpf/0.1.8/gpf-debug.js) / [test](https://arnaudbuchholz.github.io/gpf/test.html?debug=0.1.8) | \n2017-03-02 | [0.1.7](https://github.com/ArnaudBuchholz/gpf-js/tree/v0.1.7) | [Securing gpf.define](https://gpf-js.blogspot.com/2017/03/release-017.html) | [lib](https://arnaudbuchholz.github.io/gpf/0.1.7/gpf.js) / [test](https://arnaudbuchholz.github.io/gpf/test.html?release=0.1.7) | [lib](https://arnaudbuchholz.github.io/gpf/0.1.7/gpf-debug.js) / [test](https://arnaudbuchholz.github.io/gpf/test.html?debug=0.1.7) | \n2017-02-05 | [0.1.6](https://github.com/ArnaudBuchholz/gpf-js/tree/v0.1.6) | [gpf.define](https://gpf-js.blogspot.com/2017/02/release-016.html) | [lib](https://arnaudbuchholz.github.io/gpf/0.1.6/gpf.js) / [test](https://arnaudbuchholz.github.io/gpf/test.html?release=0.1.6) | [lib](https://arnaudbuchholz.github.io/gpf/0.1.6/gpf-debug.js) / [test](https://arnaudbuchholz.github.io/gpf/test.html?debug=0.1.6) | \n2016-12-05 | [0.1.5](https://github.com/ArnaudBuchholz/gpf-js/tree/v0.1.5) | [The new core](https://gpf-js.blogspot.com/2016/12/release-015.html) | [lib](https://arnaudbuchholz.github.io/gpf/0.1.5/gpf.js) / [test](https://arnaudbuchholz.github.io/gpf/test.html?release=0.1.5) | [lib](https://arnaudbuchholz.github.io/gpf/0.1.5/gpf-debug.js) / [test](https://arnaudbuchholz.github.io/gpf/test.html?debug=0.1.5) | \n\n## Credits\n\n* Code rewriting based on [esprima](http://esprima.org/) and [escodegen](https://github.com/Constellation/escodegen)\n* Markdown specification inspired from [wikipedia](http://en.wikipedia.org/wiki/Markdown)\n* UTF-8 encode/decode based on [webtoolkit](http://www.webtoolkit.info/)\n* Promise/A+ implementation based on [promise-polyfill](https://github.com/taylorhakes/promise-polyfill)\n* atob/btoa implementation based on [base64-js](https://github.com/MaxArt2501/base64-js)\n* [mocha](http://mochajs.org/) test suite\n* [istanbul](https://github.com/gotwarlost/istanbul) code coverage tool\n* JavaScript task runner: [Grunt](http://gruntjs.com/)\n* Icons from [Hawcons](https://www.iconfinder.com/iconsets/hawcons)\n* WScript simulated environment inspired from excellent [WScript project from Mischa Rodermond](https://github.com/mrpapercut/wscript)\n* Awesome dependency wheel from [Francois Zaninotto](https://github.com/fzaninotto/DependencyWheel)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farnaudbuchholz%2Fgpf-js","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Farnaudbuchholz%2Fgpf-js","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farnaudbuchholz%2Fgpf-js/lists"}