{"id":13992096,"url":"https://github.com/js-kyle/mincer","last_synced_at":"2025-12-16T17:59:04.104Z","repository":{"id":3057735,"uuid":"4079740","full_name":"js-kyle/mincer","owner":"js-kyle","description":"Sprockets inspired web assets compiler for Node.js","archived":false,"fork":false,"pushed_at":"2021-03-31T05:56:17.000Z","size":1463,"stargazers_count":627,"open_issues_count":7,"forks_count":84,"subscribers_count":12,"default_branch":"master","last_synced_at":"2025-08-22T02:47:25.851Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"http://js-kyle.github.io/mincer/","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/js-kyle.png","metadata":{"files":{"readme":"README.md","changelog":"HISTORY.md","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":"2012-04-19T20:13:14.000Z","updated_at":"2025-06-27T15:14:59.000Z","dependencies_parsed_at":"2022-08-27T03:40:15.582Z","dependency_job_id":null,"html_url":"https://github.com/js-kyle/mincer","commit_stats":null,"previous_names":["nodeca/mincer"],"tags_count":60,"template":false,"template_full_name":null,"purl":"pkg:github/js-kyle/mincer","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/js-kyle%2Fmincer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/js-kyle%2Fmincer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/js-kyle%2Fmincer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/js-kyle%2Fmincer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/js-kyle","download_url":"https://codeload.github.com/js-kyle/mincer/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/js-kyle%2Fmincer/sbom","scorecard":{"id":537326,"data":{"date":"2025-08-11","repo":{"name":"github.com/js-kyle/mincer","commit":"c7791df2605fbca423fd24684d5f421e0da8e8fc"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.3,"checks":[{"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":"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":"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":"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":"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":"Code-Review","score":2,"reason":"Found 5/25 approved changesets -- score normalized to 2","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":"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":"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":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"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":"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":"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"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 12 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-20T07:19:05.669Z","repository_id":3057735,"created_at":"2025-08-20T07:19:05.669Z","updated_at":"2025-08-20T07:19:05.669Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":27769103,"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","status":"online","status_checked_at":"2025-12-16T02:00:10.477Z","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-08-09T14:01:47.292Z","updated_at":"2025-12-16T17:59:04.072Z","avatar_url":"https://github.com/js-kyle.png","language":"JavaScript","readme":"Mincer - assets processor\n=========================\n\n[![Build Status](https://travis-ci.org/js-kyle/mincer.svg?branch=master)](https://travis-ci.org/js-kyle/mincer)\n[![NPM version](https://img.shields.io/npm/v/mincer.svg)](https://www.npmjs.org/package/mincer)\n\n**NOTE: This project is now under limited maintenance.**\n\nJavaScript port of Sprockets (v2.10.0). It features same declarative dependency\nmanagement (with exactly same language) for CSS and JavaScript and preprocessor\npipeline. Mincer allows you to write assets in the languages like: CoffeeScript,\nLESS, Stylus and others. Moreover mincer has advanced built-in features, not\navailable in sprockets:\n\n- sourcemaps support\n- macros support (nice alternative to EJS)\n\nSee [Sprockets](https://github.com/sstephenson/sprockets),\n[Mincer API Documentation](http://js-kyle.github.io/mincer/) and\n[Mincer examples](https://github.com/js-kyle/mincer/tree/master/examples)\nfor more details.\n\nSupported engines are described in [Wiki](https://github.com/js-kyle/mincer/wiki).\nIf you wish to add new engine support - read\n[tutorial](https://github.com/js-kyle/mincer/wiki/How-to-create-addon). Also\nyou can [search existing extensions](https://www.npmjs.org/browse/keyword/mincer-contrib)\nin npm.\n\n\n## Notice on upgrade to 1.4.x\n\nIf your project is using `autoprefixer` or `csswring` processors:\n\n- upgrade `csswring` to \u003e=4.x and `autoprefixer` to \u003e= 6.x\n  - if you used legacy `autoprefixer-core` package, replace it with `autoprefixer`\n- include `postcss` \u003e= 4.1\n\n\n## Installation\n\nInstall Mincer from npm registry:\n\n    $ npm install mincer\n\n\n## Using Mincer from CLI\n\nTo use Mincer from CLI, you will need to install it globally:\n\n    $ npm install mincer -g\n\nUsage is really simple (see `mincer -h` for details):\n\n    $ mincer --include assets/javascripts \\\n             --include assets/stylesheets \\\n             --output public/assets \\\n             application.js application.css\n\nIf you are using mincer CLI often, you would probably want to \"preset\" some of\nthe options/arguments for your project. Just create `.mincerrc` file and put\nargument you want in it. For example:\n\n    --include assets/javascripts --include assets/stylesheets --output public/assets\n\n\n## Understanding the Mincer Environment\n\nYou'll need an instance of the `Mincer.Environment` class to\naccess and serve assets from your application.\n\nThe `Environment` has methods for retrieving and serving assets, manipulating\nthe load path, and registering processors. It is also used by `Mincer.Server`\nwhich can be mounted directly as `request` event handler of `http.Server` or\nas `connect` middleware.\n\n\n### The Load Path\n\nThe *load paths* is an ordered list of directories that Mincer uses to search\nfor assets.\n\nIn the simplest case, a Mincers environment's load path will consist\nof a single directory containing your application's asset source\nfiles. When mounted, server will serve assets from this directory as if\nthey were static files in your public root.\n\nThe power of the load path is that it lets you organize your source\nfiles into multiple directories -- even directories that live outside\nyour application -- and combine those directories into a single\nvirtual filesystem. That means you can easily bundle JavaScript, CSS\nand images into a library and import them into your application.\n\n\n#### Manipulating the Load Path\n\nTo add a directory to your environment's load path, use the `appendPath` and\n`prependPath` methods. Directories at the beginning of the load path have\nprecedence over subsequent directories.\n\n``` javascript\nenvironment = new Mincer.Environment();\nenvironment.appendPath('app/assets/javascripts');\nenvironment.appendPath('lib/assets/javascripts');\nenvironment.appendPath('vendor/assets/jquery');\n```\n\nIn general, you should append to the path by default and reserve\nprepending for cases where you need to override existing assets.\n\n\n### Accessing Assets\n\nOnce you've set up your environment's load path, you can mount the\nenvironment as a server and request assets via HTTP. You can also\naccess assets programmatically from within your application.\n\n\n#### Logical Paths\n\nAssets in Mincer are always referenced by their *logical path*.\n\nThe logical path is the path of the asset source file relative to its\ncontaining directory in the load path. For example, if your load path\ncontains the directory `app/assets/javascripts`:\n\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003cth\u003eAsset source file\u003c/th\u003e\n    \u003cth\u003eLogical path\u003c/th\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eapp/assets/javascripts/application.js\u003c/td\u003e\n    \u003ctd\u003eapplication.js\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eapp/assets/javascripts/models/project.js\u003c/td\u003e\n    \u003ctd\u003emodels/project.js\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\nIn this way, all directories in the load path are merged to create a\nvirtual filesystem whose entries are logical paths.\n\n\n#### Serving Assets Over HTTP\n\nWhen you mount an environment, all of its assets are accessible as\nlogical paths underneath the *mount point*. For example, if you mount\nyour environment at `/assets` and request the URL `/assets/application.js`,\nMincer will search your load path for the file named `application.js`\nand serve it.\n\n``` javascript\nvar connect = require('connect');\nvar Mincer  = require('mincer');\n\nvar environment = new Mincer.Environment();\nenvironment.appendPath('app/assets/javascripts');\nenvironment.appendPath('app/assets/stylesheets');\n\nvar app = connect();\napp.use('/assets', Mincer.createServer(environment));\napp.use(function (req, res) {\n  // your application here...\n});\n```\n\n\n#### Accessing Assets Programmatically\n\nYou can use the `findAsset` method to retrieve an asset from a Mincers\nenvironment. Pass it a logical path and you'll get a `BundledAsset`\ninstance back.\n\nCall `toString` on the resulting asset to access its contents, `length` to\nget its length in bytes, `mtime` to query its last-modified time, and\n`pathname` to get its full path on the filesystem.\n\n``` javascript\nvar asset = environment.findAsset('application.js');\n\nasset.toString(); // resulting contents\nasset.length;     // length in bytes\nasset.mtime;      // last modified time\nasset.pathname;   // full path on the filesystem\n```\n\n\n## Using Engines\n\nAsset source files can be written in another language, like Stylus or\nCoffeeScript, and automatically compiled to CSS or JavaScript by\nMincer. Compilers for these languages are called *engines*.\n\nEngines are specified by additional extensions on the asset source\nfilename. For example, a CSS file written in Stylus might have the name\n`layout.css.styl`, while a JavaScript file written in CoffeeScript\nmight have the name `dialog.js.coffee`.\n\n\n### Styling with Stylus\n\n[Stylus](http://learnboost.github.com/stylus/) is a revolutionary new language,\nproviding an efficient, dynamic, and expressive way to generate CSS. Supporting\nboth an indented syntax and regular CSS style.\n\nIf the `stylus` Node module is available to your application, you can use Stylus\nto write CSS assets in Mincer. Use the extension `.css.styl`.\n\n\n### Styling with LESS\n\n[LESS](http://lesscss.org/) extends CSS with dynamic behavior such as\nvariables, mixins, operations and functions.\n\nIf the `less` Node module is available to your application, you can use LESS\nto write CSS assets in Mincer. Use the extension `.css.less`.\n\n\n### Styling with Sass\n\n[Sass](http://sass-lang.com/) is an extension of CSS3, adding nested rules,\nvariables, mixins, selector inheritance, and more.\n\nIf the `node-sass` Node module is available to your application, you can use Sass\nto write CSS assets in Mincer. Use the extension `.css.sass` or `.css.scss`.\n\n\n### Scripting with CoffeeScript\n\n[CoffeeScript](http://jashkenas.github.com/coffee-script/) is a\nlanguage that compiles to the \"good parts\" of JavaScript, featuring a\ncleaner syntax with array comprehensions, classes, and function\nbinding.\n\nIf the `coffee-script` Node module is available to your application, you can use\nCoffeeScript to write JavaScript assets in Mincer.\nUse the extension `.js.coffee`.\n\n\n### JavaScript Templating with Jade\n\nMincer supports JavaScript templates for client-side rendering of strings or\nmarkup. JavaScript templates have the special format extension `.jst` and are\ncompiled to JavaScript functions.\n\nWhen loaded, a JavaScript template function can be accessed by its logical path\nas a property on the global `JST` object. Invoke a template function to render\nthe template as a string. The resulting string can then be inserted into the DOM.\n\n```\n// templates/hello.jst.jade\ndiv Hello, #{ name }!\n```\n\n``` javascript\n// application.js\n//= require templates/hello\n$(\"#hello\").html(JST[\"templates/hello\"]({ name: \"Sam\" }));\n```\n\nMincer supports one template languages: [Jade][jade].\n\nIf `jade` Node module is available to your application, you can use _Jade_\ntemplates in Mincer. Jade templates have the extension `.jst.jade`. To use\ncompiled templates you will need to require Jade [runtime][jade-runtime] before\ncalling renderer functions.\n\n[jade]:          https://github.com/visionmedia/jade\n[jade-runtime]:  https://github.com/visionmedia/jade/blob/master/runtime.js\n\n\n### Invoking JavaScript with EJS\n\n**Note** see macros description for more convenient alternative.\n\nMincer provides an EJS engine for preprocessing assets using\nembedded JavaScript code. Append `.ejs` to a CSS or JavaScript asset's\nfilename to enable the EJS engine.\n\nYou will need `ejs` Node module available to your application.\n\n**Note**: Mincer processes multiple engine extensions in order from\n  right to left, so you can use multiple engines with a single\n  asset. For example, to have a CoffeeScript asset that is first\n  preprocessed with EJS, use the extension `.js.coffee.ejs`.\n\nJavaScript code embedded in an asset is evaluated in the context of a\n`Mincer.Context` instance for the given asset. Common uses for EJS include:\n\n- embedding another asset as a Base64-encoded `data:` URI with the\n  `asset_data_uri` helper\n- inserting the URL to another asset, such as with the `asset_path`\n  helper (you must register your own helper for this purpose, but\n  it's dead simple).\n- embedding other application resources, such as a localized string\n  database, in a JavaScript asset via JSON\n- embedding version constants loaded from another file\n\n\n### Using helpers\n\nMincer provides an easy way to add your own helpers for engines:\n\n``` javascript\nenvironment.registerHelper('version', function () {\n  var path = require('path');\n  return require( path.join(__dirname, '/package.json') ).version;\n});\n```\n\nNow, you can call that helper with EJS like this:\n\n``` javascript\nvar APP = window.APP = {version: '\u003c%= version() %\u003e'};\n```\n\n**NOTICE** Helpers currently work for EJS and Stylus only. So to use them with\nLess you will need to add EJS engine as well:\n\n``` css\n// file: foobar.less.ejs\n.btn {\n  background: url('\u003c%= asset_path('bg.png') %\u003e');\n}\n```\n\n### Macros\n\nThis feature is designed as simple alternative to EJS, that does not requires\nadditional extention and does not break language syntax. When enabled, any\n`'$$ expression $$'` or `\"$$ expression $$\"` pattern will be replaced with\nevaluated expression value. In expression you can write JS code and use\nregistered helpers. Macros are off by default. You should enable those for\nparticular extensions:\n\n```javascript\nMincer.MacroProcessor.configure(['.js', '.css']);\n```\n\n\n## Managing and Bundling Dependencies\n\nYou can create *asset bundles* -- ordered concatenations of asset\nsource files -- by specifying dependencies in a special comment syntax\nat the top of each source file.\n\nMincer reads these comments, called *directives*, and processes\nthem to recursively build a dependency graph. When you request an\nasset with dependencies, the dependencies will be included in order at\nthe top of the file.\n\n\n### The Directive Processor\n\nMincer runs the *directive processor* on each CSS and JavaScript\nsource file. The directive processor scans for comment lines beginning\nwith `=` in comment blocks at the top of the file.\n\n    //= require jquery\n    //= require jquery-ui\n    //= require backbone\n    //= require_tree .\n\nThe first word immediately following `=` specifies the directive\nname. Any words following the directive name are treated as\narguments. Arguments may be placed in single or double quotes if they\ncontain spaces, similar to commands in the Unix shell.\n\n**Note**: Non-directive comment lines will be preserved in the final\n  asset, but directive comments are stripped after\n  processing. Mincer will not look for directives in comment blocks\n  that occur after the first line of code.\n\n\n#### Supported Comment Types\n\nThe directive processor understands comment blocks in three formats:\n\n    /* Multi-line comment blocks (CSS, Stylus, JavaScript)\n     *= require foo\n     */\n\n    // Single-line comment blocks (Stylus, JavaScript)\n    //= require foo\n\n    # Single-line comment blocks (CoffeeScript)\n    #= require foo\n\n\n### Mincer Directives\n\nYou can use the following directives to declare dependencies in asset\nsource files.\n\nFor directives that take a *path* argument, you may specify either a\nlogical path or a relative path. Relative paths begin with `./` and\nreference files relative to the location of the current file.\n\n\n#### The `require` Directive ###\n\n`require` *path* inserts the contents of the asset source file\nspecified by *path*. If the file is required multiple times, it will\nappear in the bundle only once.\n\n\n#### The `include` Directive ###\n\n`include` *path* works like `require`, but inserts the contents of the\nspecified source file even if it has already been included or\nrequired.\n\n\n#### The `require_directory` Directive ###\n\n`require_directory` *path* requires all source files of the same\nformat in the directory specified by *path*. Files are required in\nalphabetical order.\n\n\n#### The `require_tree` Directive ###\n\n`require_tree` *path* works like `require_directory`, but operates\nrecursively to require all files in all subdirectories of the\ndirectory specified by *path*.\n\n\n#### The `require_self` Directive ###\n\n`require_self` tells Mincer to insert the body of the current\nsource file before any subsequent `require` or `include` directives.\n\n\n#### The `depend_on` Directive ###\n\n`depend_on` *path* declares a dependency on the given *path* without\nincluding it in the bundle. This is useful when you need to expire an\nasset's cache in response to a change in another file.\n\n\n#### The `stub` Directive ###\n\n`stub` *path* allows dependency to be excluded from the asset bundle.\nThe *path* must be a valid asset and may or may not already be part\nof the bundle. Once stubbed, it is blacklisted and can't be brought\nback by any other `require`.\n\n\n## Credits\n\nGreat thanks to [Sam Stephenson][sam] and [Joshua Peek][josh] for the Sprockets,\nthe most awesome and powerfull web assets processor I ever used, and which\nbecame a great source of inspiration (and model of almost all logic behind\nMincer). Special thanks to Joshua for his assistance in hacking into Sprockets\nsources.\n\n[sam]:  https://github.com/sstephenson\n[josh]: https://github.com/josh\n\n\n## Author\n\n[Aleksey V Zapparov][github] (follow [@zapparov][twitter] on twitter).\n\n[github]:   https://github.com/ixti\n[twitter]:  https://twitter.com/zapparov\n\n\n## License\n\nCopyright (c) 2012 [Vitaly Puzrin](https://github.com/puzrin)\n\nReleased under the MIT license. See [LICENSE][license] for details.\n\n[license]:  https://raw.github.com/js-kyle/mincer/master/LICENSE\n","funding_links":[],"categories":["JavaScript"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjs-kyle%2Fmincer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjs-kyle%2Fmincer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjs-kyle%2Fmincer/lists"}