Socket
Socket
Sign inDemoInstall

@netlify/framework-info

Package Overview
Dependencies
Maintainers
12
Versions
93
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@netlify/framework-info - npm Package Compare versions

Comparing version 1.1.2 to 2.0.0

src/dev.js

20

CHANGELOG.md

@@ -10,2 +10,22 @@ # Changelog

## [2.0.0](https://www.github.com/netlify/framework-info/compare/v1.1.2...v2.0.0) (2021-01-07)
### ⚠ BREAKING CHANGES
* rename watch to dev (#96)
* add build command detection (#92)
### Features
* add build command detection ([#92](https://www.github.com/netlify/framework-info/issues/92)) ([4d5c35e](https://www.github.com/netlify/framework-info/commit/4d5c35ee948f5a97a0896cb1907a58a85ca6588b))
### Bug Fixes
* **docs:** update readme ([#98](https://www.github.com/netlify/framework-info/issues/98)) ([8c734df](https://www.github.com/netlify/framework-info/commit/8c734df7bdf30e5cdf7e2bf49860671901edc45b))
* rename watch to dev ([#96](https://www.github.com/netlify/framework-info/issues/96)) ([58aadd5](https://www.github.com/netlify/framework-info/commit/58aadd50f66bf54e43adf6c5fc2c6a0b8ae65965))
* sort preferred scripts ([#99](https://www.github.com/netlify/framework-info/issues/99)) ([d7d9093](https://www.github.com/netlify/framework-info/commit/d7d9093dde7b69a959a14280647b4de0b67f616a))
* **create-react-app:** update build directory ([#94](https://www.github.com/netlify/framework-info/issues/94)) ([54222d5](https://www.github.com/netlify/framework-info/commit/54222d52ed4e18bca3322744277b3ce4d372fd09))
### [1.1.2](https://www.github.com/netlify/framework-info/compare/v1.1.1...v1.1.2) (2020-12-20)

@@ -12,0 +32,0 @@

2

dist/index.js

@@ -1,2 +0,2 @@

!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.frameworkInfo=t():e.frameworkInfo=t()}(globalThis,(function(){return e={806:e=>{"use strict";e.exports=(e,t)=>{const n={},r=Array.isArray(t);for(const[c,s]of Object.entries(e))(r?t.includes(c):t(c,s,e))&&(n[c]=s);return n}},310:e=>{"use strict";e.exports=e=>{if("[object Object]"!==Object.prototype.toString.call(e))return!1;const t=Object.getPrototypeOf(e);return null===t||t===Object.prototype}},115:(e,t,n)=>{"use strict";const r=n(301),c=async(e,t,n)=>(await r(e,((e,n)=>Promise.all([t(e,n),e])),n)).filter((e=>Boolean(e[0]))).map((e=>e[1]));e.exports=c,e.exports.default=c},406:(e,t,n)=>{"use strict";const r=n(161),c=e=>{if(!Number.isInteger(e)&&e!==1/0||!(e>0))return Promise.reject(new TypeError("Expected `concurrency` to be a number from 1 and up"));const t=[];let n=0;const c=()=>{n--,t.length>0&&t.shift()()},s=(e,t,...s)=>{n++;const o=r(e,...s);t(o),o.then(c,c)},o=(r,...c)=>new Promise((o=>((r,c,...o)=>{n<e?s(r,c,...o):t.push(s.bind(null,r,c,...o))})(r,o,...c)));return Object.defineProperties(o,{activeCount:{get:()=>n},pendingCount:{get:()=>t.length},clearQueue:{value:()=>{t.length=0}}}),o};e.exports=c,e.exports.default=c},885:(e,t,n)=>{"use strict";const r=n(406);class c extends Error{constructor(e){super(),this.value=e}}const s=async(e,t)=>t(await e),o=async e=>{const t=await Promise.all(e);if(!0===t[1])throw new c(t[0]);return!1},a=async(e,t,n)=>{n={concurrency:1/0,preserveOrder:!0,...n};const a=r(n.concurrency),i=[...e].map((e=>[e,a(s,e,t)])),p=r(n.preserveOrder?1:1/0);try{await Promise.all(i.map((e=>p(o,e))))}catch(e){if(e instanceof c)return e.value;throw e}};e.exports=a,e.exports.default=a},301:e=>{"use strict";const t=(e,t,n)=>new Promise(((r,c)=>{if(n=Object.assign({concurrency:1/0},n),"function"!=typeof t)throw new TypeError("Mapper function is required");const{concurrency:s}=n;if(!("number"==typeof s&&s>=1))throw new TypeError(`Expected \`concurrency\` to be a number from 1 and up, got \`${s}\` (${typeof s})`);const o=[],a=e[Symbol.iterator]();let i=!1,p=!1,d=0,u=0;const m=()=>{if(i)return;const e=a.next(),n=u;if(u++,e.done)return p=!0,void(0===d&&r(o));d++,Promise.resolve(e.value).then((e=>t(e,n))).then((e=>{o[n]=e,d--,m()}),(e=>{i=!0,c(e)}))};for(let e=0;e<s&&(m(),!p);e++);}));e.exports=t,e.exports.default=t},161:e=>{"use strict";const t=(e,...t)=>new Promise((n=>{n(e(...t))}));e.exports=t,e.exports.default=t},470:e=>{"use strict";function t(e){if("string"!=typeof e)throw new TypeError("Path must be a string. Received "+JSON.stringify(e))}function n(e,t){for(var n,r="",c=0,s=-1,o=0,a=0;a<=e.length;++a){if(a<e.length)n=e.charCodeAt(a);else{if(47===n)break;n=47}if(47===n){if(s===a-1||1===o);else if(s!==a-1&&2===o){if(r.length<2||2!==c||46!==r.charCodeAt(r.length-1)||46!==r.charCodeAt(r.length-2))if(r.length>2){var i=r.lastIndexOf("/");if(i!==r.length-1){-1===i?(r="",c=0):c=(r=r.slice(0,i)).length-1-r.lastIndexOf("/"),s=a,o=0;continue}}else if(2===r.length||1===r.length){r="",c=0,s=a,o=0;continue}t&&(r.length>0?r+="/..":r="..",c=2)}else r.length>0?r+="/"+e.slice(s+1,a):r=e.slice(s+1,a),c=a-s-1;s=a,o=0}else 46===n&&-1!==o?++o:o=-1}return r}var r={resolve:function(){for(var e,r="",c=!1,s=arguments.length-1;s>=-1&&!c;s--){var o;s>=0?o=arguments[s]:(void 0===e&&(e=process.cwd()),o=e),t(o),0!==o.length&&(r=o+"/"+r,c=47===o.charCodeAt(0))}return r=n(r,!c),c?r.length>0?"/"+r:"/":r.length>0?r:"."},normalize:function(e){if(t(e),0===e.length)return".";var r=47===e.charCodeAt(0),c=47===e.charCodeAt(e.length-1);return 0!==(e=n(e,!r)).length||r||(e="."),e.length>0&&c&&(e+="/"),r?"/"+e:e},isAbsolute:function(e){return t(e),e.length>0&&47===e.charCodeAt(0)},join:function(){if(0===arguments.length)return".";for(var e,n=0;n<arguments.length;++n){var c=arguments[n];t(c),c.length>0&&(void 0===e?e=c:e+="/"+c)}return void 0===e?".":r.normalize(e)},relative:function(e,n){if(t(e),t(n),e===n)return"";if((e=r.resolve(e))===(n=r.resolve(n)))return"";for(var c=1;c<e.length&&47===e.charCodeAt(c);++c);for(var s=e.length,o=s-c,a=1;a<n.length&&47===n.charCodeAt(a);++a);for(var i=n.length-a,p=o<i?o:i,d=-1,u=0;u<=p;++u){if(u===p){if(i>p){if(47===n.charCodeAt(a+u))return n.slice(a+u+1);if(0===u)return n.slice(a+u)}else o>p&&(47===e.charCodeAt(c+u)?d=u:0===u&&(d=0));break}var m=e.charCodeAt(c+u);if(m!==n.charCodeAt(a+u))break;47===m&&(d=u)}var l="";for(u=c+d+1;u<=s;++u)u!==s&&47!==e.charCodeAt(u)||(0===l.length?l+="..":l+="/..");return l.length>0?l+n.slice(a+d):(a+=d,47===n.charCodeAt(a)&&++a,n.slice(a))},_makeLong:function(e){return e},dirname:function(e){if(t(e),0===e.length)return".";for(var n=e.charCodeAt(0),r=47===n,c=-1,s=!0,o=e.length-1;o>=1;--o)if(47===(n=e.charCodeAt(o))){if(!s){c=o;break}}else s=!1;return-1===c?r?"/":".":r&&1===c?"//":e.slice(0,c)},basename:function(e,n){if(void 0!==n&&"string"!=typeof n)throw new TypeError('"ext" argument must be a string');t(e);var r,c=0,s=-1,o=!0;if(void 0!==n&&n.length>0&&n.length<=e.length){if(n.length===e.length&&n===e)return"";var a=n.length-1,i=-1;for(r=e.length-1;r>=0;--r){var p=e.charCodeAt(r);if(47===p){if(!o){c=r+1;break}}else-1===i&&(o=!1,i=r+1),a>=0&&(p===n.charCodeAt(a)?-1==--a&&(s=r):(a=-1,s=i))}return c===s?s=i:-1===s&&(s=e.length),e.slice(c,s)}for(r=e.length-1;r>=0;--r)if(47===e.charCodeAt(r)){if(!o){c=r+1;break}}else-1===s&&(o=!1,s=r+1);return-1===s?"":e.slice(c,s)},extname:function(e){t(e);for(var n=-1,r=0,c=-1,s=!0,o=0,a=e.length-1;a>=0;--a){var i=e.charCodeAt(a);if(47!==i)-1===c&&(s=!1,c=a+1),46===i?-1===n?n=a:1!==o&&(o=1):-1!==n&&(o=-1);else if(!s){r=a+1;break}}return-1===n||-1===c||0===o||1===o&&n===c-1&&n===r+1?"":e.slice(n,c)},format:function(e){if(null===e||"object"!=typeof e)throw new TypeError('The "pathObject" argument must be of type Object. Received type '+typeof e);return function(e,t){var n=t.dir||t.root,r=t.base||(t.name||"")+(t.ext||"");return n?n===t.root?n+r:n+"/"+r:r}(0,e)},parse:function(e){t(e);var n={root:"",dir:"",base:"",ext:"",name:""};if(0===e.length)return n;var r,c=e.charCodeAt(0),s=47===c;s?(n.root="/",r=1):r=0;for(var o=-1,a=0,i=-1,p=!0,d=e.length-1,u=0;d>=r;--d)if(47!==(c=e.charCodeAt(d)))-1===i&&(p=!1,i=d+1),46===c?-1===o?o=d:1!==u&&(u=1):-1!==o&&(u=-1);else if(!p){a=d+1;break}return-1===o||-1===i||0===u||1===u&&o===i-1&&o===a+1?-1!==i&&(n.base=n.name=0===a&&s?e.slice(1,i):e.slice(a,i)):(0===a&&s?(n.name=e.slice(1,o),n.base=e.slice(1,i)):(n.name=e.slice(a,o),n.base=e.slice(a,i)),n.ext=e.slice(o,i)),a>0?n.dir=e.slice(0,a-1):s&&(n.dir="/"),n},sep:"/",delimiter:":",win32:null,posix:null};r.posix=r,e.exports=r},895:(e,t,n)=>{const r=n(115),{usesFramework:c}=n(567),{FRAMEWORKS:s}=n(198),{getPackageJsonContent:o}=n(304),{getRunScriptCommand:a}=n(887),{getWatchCommands:i}=n(645),p=e=>{const{pathExists:t,packageJson:n,packageJsonPath:r="."}=e;return{pathExists:t,packageJson:n,packageJsonPath:r}},d=function(e){const t=s.find((({name:t})=>t===e));if(void 0===t){const t=s.map(u).join(", ");throw new Error(`Invalid framework "${e}". It should be one of: ${t}`)}return t},u=function({name:e}){return e},m=async function({pathExists:e,packageJson:t,packageJsonPath:n}){const{npmDependencies:r,scripts:c}=await o({packageJson:t});return{npmDependencies:r,scripts:c,runScriptCommand:await a({pathExists:e,packageJsonPath:n})}},l=function({name:e,category:t,watch:{command:n,directory:r,port:c},env:s},{scripts:o,runScriptCommand:a}){return{name:e,category:t,watch:{commands:i({frameworkWatchCommand:n,scripts:o,runScriptCommand:a}),directory:r,port:c},env:s}};e.exports={listFrameworks:async function(e){const{pathExists:t,packageJson:n,packageJsonPath:o}=p(e),{npmDependencies:a,scripts:i,runScriptCommand:d}=await m({pathExists:t,packageJson:n,packageJsonPath:o});return(await r(s,(e=>c(e,{pathExists:t,npmDependencies:a})))).map((e=>l(e,{scripts:i,runScriptCommand:d})))},hasFramework:async function(e,t){const n=d(e),{pathExists:r,packageJson:s,packageJsonPath:o}=p(t),{npmDependencies:a}=await m({pathExists:r,packageJson:s,packageJsonPath:o});return await c(n,{pathExists:r,npmDependencies:a})},getFramework:async function(e,t){const n=d(e),{pathExists:r,packageJson:c,packageJsonPath:s}=p(t),{scripts:o,runScriptCommand:a}=await m({pathExists:r,packageJson:c,packageJsonPath:s});return l(n,{scripts:o,runScriptCommand:a})}}},567:(e,t,n)=>{const r=n(885);e.exports={usesFramework:async function({detect:{npmDependencies:e,excludedNpmDependencies:t,configFiles:n}},{pathExists:c,npmDependencies:s}){return function(e,t){return 0===e.length||e.some((e=>t.includes(e)))}(e,s)&&function(e,t){return 0===e.length||e.every((e=>!t.includes(e)))}(t,s)&&await async function(e,t){return 0===e.length||await(async(e,t)=>await r(e,(e=>t(e))))(e,t)}(n,c)}}},743:e=>{"use strict";e.exports=JSON.parse('{"name":"angular","category":"frontend_framework","detect":{"npmDependencies":["@angular/cli"],"excludedNpmDependencies":[],"configFiles":["angular.json"]},"watch":{"command":"ng serve","directory":"dist","port":4200},"env":{}}')},777:e=>{"use strict";e.exports=JSON.parse('{"name":"brunch","category":"build_tool","detect":{"npmDependencies":["brunch"],"excludedNpmDependencies":[],"configFiles":["brunch-config.js"]},"watch":{"command":"brunch watch --server","directory":"app/assets","port":3333},"env":{}}')},764:e=>{"use strict";e.exports=JSON.parse('{"name":"create-react-app","category":"frontend_framework","detect":{"npmDependencies":["react-scripts"],"excludedNpmDependencies":[],"configFiles":[]},"watch":{"command":"react-scripts start","directory":"public","port":3000},"env":{"BROWSER":"none","PORT":"3000"}}')},496:e=>{"use strict";e.exports=JSON.parse('{"name":"docusaurus-v2","category":"static_site_generator","detect":{"npmDependencies":["@docusaurus/core"],"excludedNpmDependencies":[],"configFiles":["docusaurus.config.js"]},"watch":{"command":"docusaurus start","directory":"static","port":3000},"env":{"BROWSER":"none"}}')},44:e=>{"use strict";e.exports=JSON.parse('{"name":"docusaurus","category":"static_site_generator","detect":{"npmDependencies":["docusaurus"],"excludedNpmDependencies":[],"configFiles":["siteConfig.js"]},"watch":{"command":"docusaurus-start","directory":"static","port":3000},"env":{"BROWSER":"none"}}')},333:e=>{"use strict";e.exports=JSON.parse('{"name":"eleventy","category":"static_site_generator","detect":{"npmDependencies":["@11ty/eleventy"],"excludedNpmDependencies":[],"configFiles":[".eleventy.js"]},"watch":{"command":"npx @11ty/eleventy --watch","directory":"_site","port":8080},"env":{}}')},789:e=>{"use strict";e.exports=JSON.parse('{"name":"ember","category":"frontend_framework","detect":{"npmDependencies":["ember-cli"],"excludedNpmDependencies":[],"configFiles":["ember-cli-build.js"]},"watch":{"command":"ember serve","directory":"dist","port":4200},"env":{}}')},575:e=>{"use strict";e.exports=JSON.parse('{"name":"expo","category":"frontend_framework","detect":{"npmDependencies":["expo"],"excludedNpmDependencies":[],"configFiles":["app.json"]},"watch":{"command":"expo start --web","directory":"web-build","port":19006},"env":{}}')},473:e=>{"use strict";e.exports=JSON.parse('{"name":"gatsby","category":"static_site_generator","detect":{"npmDependencies":["gatsby"],"excludedNpmDependencies":[],"configFiles":["gatsby-config.js"]},"watch":{"command":"gatsby develop","directory":"public","port":8000},"env":{"GATSBY_LOGGER":"yurnalist"}}')},595:e=>{"use strict";e.exports=JSON.parse('{"name":"gridsome","category":"static_site_generator","detect":{"npmDependencies":["gridsome"],"excludedNpmDependencies":[],"configFiles":["gridsome.config.js"]},"watch":{"command":"gridsome develop","directory":"dist","port":8080},"env":{}}')},173:e=>{"use strict";e.exports=JSON.parse('{"name":"hexo","category":"static_site_generator","detect":{"npmDependencies":["hexo"],"excludedNpmDependencies":[],"configFiles":["_config.yml"]},"watch":{"command":"hexo server","directory":"public","port":4000},"env":{}}')},527:e=>{"use strict";e.exports=JSON.parse('{"name":"hugo","category":"static_site_generator","detect":{"npmDependencies":[],"excludedNpmDependencies":[],"configFiles":["config.toml","config.yaml"]},"watch":{"command":"hugo server -w","directory":"public","port":1313},"env":{}}')},755:e=>{"use strict";e.exports=JSON.parse('{"name":"jekyll","category":"static_site_generator","detect":{"npmDependencies":[],"excludedNpmDependencies":[],"configFiles":["_config.yml"]},"watch":{"command":"bundle exec jekyll serve -w","directory":"_site","port":4000},"env":{}}')},198:(e,t,n)=>{const r=[n(44),n(496),n(333),n(473),n(595),n(173),n(527),n(755),n(436),n(587),n(853),n(481),n(323),n(331),n(454),n(743),n(764),n(789),n(575),n(354),n(25),n(648),n(823),n(920),n(777),n(863)];e.exports={FRAMEWORKS:r}},436:e=>{"use strict";e.exports=JSON.parse('{"name":"middleman","category":"static_site_generator","detect":{"npmDependencies":[],"excludedNpmDependencies":[],"configFiles":["config.rb"]},"watch":{"command":"bundle exec middleman server","directory":"build","port":4567},"env":{}}')},587:e=>{"use strict";e.exports=JSON.parse('{"name":"next","category":"static_site_generator","detect":{"npmDependencies":["next"],"excludedNpmDependencies":[],"configFiles":[]},"watch":{"command":"next","directory":"out","port":3000},"env":{}}')},853:e=>{"use strict";e.exports=JSON.parse('{"name":"nuxt","category":"static_site_generator","detect":{"npmDependencies":["nuxt"],"excludedNpmDependencies":[],"configFiles":[]},"watch":{"command":"nuxt","directory":"dist","port":3000},"env":{}}')},863:e=>{"use strict";e.exports=JSON.parse('{"name":"parcel","category":"build_tool","detect":{"npmDependencies":["parcel-bundler","parcel"],"excludedNpmDependencies":[],"configFiles":[]},"watch":{"command":"parcel","directory":"dist","port":1234},"env":{}}')},481:e=>{"use strict";e.exports=JSON.parse('{"name":"phenomic","category":"static_site_generator","detect":{"npmDependencies":["@phenomic/core"],"excludedNpmDependencies":[],"configFiles":[]},"watch":{"command":"phenomic start","directory":"public","port":3333},"env":{}}')},25:e=>{"use strict";e.exports=JSON.parse('{"name":"quasar-v0.17","category":"frontend_framework","detect":{"npmDependencies":["quasar-cli"],"excludedNpmDependencies":[],"configFiles":[]},"watch":{"command":"quasar dev -p 8080","directory":".quasar","port":8080},"env":{}}')},354:e=>{"use strict";e.exports=JSON.parse('{"name":"quasar","category":"frontend_framework","detect":{"npmDependencies":["@quasar/app"],"excludedNpmDependencies":[],"configFiles":[]},"watch":{"command":"quasar dev -p 8081","directory":".quasar","port":8081},"env":{}}')},323:e=>{"use strict";e.exports=JSON.parse('{"name":"react-static","category":"static_site_generator","detect":{"npmDependencies":["react-static"],"excludedNpmDependencies":[],"configFiles":["static.config.js"]},"watch":{"command":"react-static start","directory":"dist","port":3000},"env":{}}')},648:e=>{"use strict";e.exports=JSON.parse('{"name":"sapper","category":"frontend_framework","detect":{"npmDependencies":["sapper"],"excludedNpmDependencies":[],"configFiles":[]},"watch":{"command":"sapper dev","directory":"static","port":3000},"env":{}}')},331:e=>{"use strict";e.exports=JSON.parse('{"name":"stencil","category":"static_site_generator","detect":{"npmDependencies":["@stencil/core"],"excludedNpmDependencies":[],"configFiles":["stencil.config.ts"]},"watch":{"command":"stencil build --dev --watch --serve","directory":"www","port":3333},"env":{"BROWSER":"none","PORT":"3000"}}')},823:e=>{"use strict";e.exports=JSON.parse('{"name":"svelte","category":"frontend_framework","detect":{"npmDependencies":["svelte"],"excludedNpmDependencies":["sapper"],"configFiles":[]},"watch":{"command":"npm run dev","directory":"public","port":5000},"env":{}}')},920:e=>{"use strict";e.exports=JSON.parse('{"name":"vue","category":"frontend_framework","detect":{"npmDependencies":["@vue/cli-service"],"excludedNpmDependencies":[],"configFiles":[]},"watch":{"command":"vue-cli-service serve","directory":"dist","port":8080},"env":{}}')},454:e=>{"use strict";e.exports=JSON.parse('{"name":"vuepress","category":"static_site_generator","detect":{"npmDependencies":["vuepress"],"excludedNpmDependencies":[],"configFiles":[]},"watch":{"command":"vuepress dev","directory":".vuepress/dist","port":8080},"env":{}}')},304:(e,t,n)=>{const r=n(806),c=n(310),s=function({dependencies:e,devDependencies:t}){return[...o(e),...o(t)]},o=function(e){return c(e)?Object.keys(e):[]},a=function({scripts:e}){return c(e)?r(e,i):{}},i=function(e,t){return"string"==typeof t};e.exports={getPackageJsonContent:function({packageJson:e}){return void 0===e?{npmDependencies:[],scripts:{}}:{npmDependencies:s(e),scripts:a(e)}}}},887:(e,t,n)=>{const{dirname:r}=n(470);e.exports={getRunScriptCommand:async function({pathExists:e,packageJsonPath:t}){return await e(`${r(t)}/yarn.lock`)?"yarn":"npm run"}}},645:e=>{const t=(e,t)=>o.findIndex((t=>s(e,t)))-o.findIndex((e=>s(t,e))),n=function(e,t){return Object.entries(e).filter((([,e])=>e.includes(t))).map(r)},r=function([e]){return e},c=function(e){return o.some((t=>s(e,t)))},s=function(e,t){return e===t||e.endsWith(`:${t}`)},o=["serve","dev","develop","start","run","build","web"];e.exports={getWatchCommands:function({frameworkWatchCommand:e,scripts:r,runScriptCommand:s}){const o=function(e,r){const s=n(e,r);return 0!==s.length?s:Object.keys(e).filter(c).sort(t)}(r,e).map((e=>`${s} ${e}`));return 0!==o.length?o:[e]}}}},t={},function n(r){if(t[r])return t[r].exports;var c=t[r]={exports:{}};return e[r](c,c.exports,n),c.exports}(895);var e,t}));
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.frameworkInfo=t():e.frameworkInfo=t()}(globalThis,(function(){return e={806:e=>{"use strict";e.exports=(e,t)=>{const n={},r=Array.isArray(t);for(const[c,s]of Object.entries(e))(r?t.includes(c):t(c,s,e))&&(n[c]=s);return n}},310:e=>{"use strict";e.exports=e=>{if("[object Object]"!==Object.prototype.toString.call(e))return!1;const t=Object.getPrototypeOf(e);return null===t||t===Object.prototype}},115:(e,t,n)=>{"use strict";const r=n(301),c=async(e,t,n)=>(await r(e,((e,n)=>Promise.all([t(e,n),e])),n)).filter((e=>Boolean(e[0]))).map((e=>e[1]));e.exports=c,e.exports.default=c},406:(e,t,n)=>{"use strict";const r=n(161),c=e=>{if(!Number.isInteger(e)&&e!==1/0||!(e>0))return Promise.reject(new TypeError("Expected `concurrency` to be a number from 1 and up"));const t=[];let n=0;const c=()=>{n--,t.length>0&&t.shift()()},s=(e,t,...s)=>{n++;const o=r(e,...s);t(o),o.then(c,c)},o=(r,...c)=>new Promise((o=>((r,c,...o)=>{n<e?s(r,c,...o):t.push(s.bind(null,r,c,...o))})(r,o,...c)));return Object.defineProperties(o,{activeCount:{get:()=>n},pendingCount:{get:()=>t.length},clearQueue:{value:()=>{t.length=0}}}),o};e.exports=c,e.exports.default=c},885:(e,t,n)=>{"use strict";const r=n(406);class c extends Error{constructor(e){super(),this.value=e}}const s=async(e,t)=>t(await e),o=async e=>{const t=await Promise.all(e);if(!0===t[1])throw new c(t[0]);return!1},i=async(e,t,n)=>{n={concurrency:1/0,preserveOrder:!0,...n};const i=r(n.concurrency),a=[...e].map((e=>[e,i(s,e,t)])),d=r(n.preserveOrder?1:1/0);try{await Promise.all(a.map((e=>d(o,e))))}catch(e){if(e instanceof c)return e.value;throw e}};e.exports=i,e.exports.default=i},301:e=>{"use strict";const t=(e,t,n)=>new Promise(((r,c)=>{if(n=Object.assign({concurrency:1/0},n),"function"!=typeof t)throw new TypeError("Mapper function is required");const{concurrency:s}=n;if(!("number"==typeof s&&s>=1))throw new TypeError(`Expected \`concurrency\` to be a number from 1 and up, got \`${s}\` (${typeof s})`);const o=[],i=e[Symbol.iterator]();let a=!1,d=!1,p=0,u=0;const m=()=>{if(a)return;const e=i.next(),n=u;if(u++,e.done)return d=!0,void(0===p&&r(o));p++,Promise.resolve(e.value).then((e=>t(e,n))).then((e=>{o[n]=e,p--,m()}),(e=>{a=!0,c(e)}))};for(let e=0;e<s&&(m(),!d);e++);}));e.exports=t,e.exports.default=t},161:e=>{"use strict";const t=(e,...t)=>new Promise((n=>{n(e(...t))}));e.exports=t,e.exports.default=t},470:e=>{"use strict";function t(e){if("string"!=typeof e)throw new TypeError("Path must be a string. Received "+JSON.stringify(e))}function n(e,t){for(var n,r="",c=0,s=-1,o=0,i=0;i<=e.length;++i){if(i<e.length)n=e.charCodeAt(i);else{if(47===n)break;n=47}if(47===n){if(s===i-1||1===o);else if(s!==i-1&&2===o){if(r.length<2||2!==c||46!==r.charCodeAt(r.length-1)||46!==r.charCodeAt(r.length-2))if(r.length>2){var a=r.lastIndexOf("/");if(a!==r.length-1){-1===a?(r="",c=0):c=(r=r.slice(0,a)).length-1-r.lastIndexOf("/"),s=i,o=0;continue}}else if(2===r.length||1===r.length){r="",c=0,s=i,o=0;continue}t&&(r.length>0?r+="/..":r="..",c=2)}else r.length>0?r+="/"+e.slice(s+1,i):r=e.slice(s+1,i),c=i-s-1;s=i,o=0}else 46===n&&-1!==o?++o:o=-1}return r}var r={resolve:function(){for(var e,r="",c=!1,s=arguments.length-1;s>=-1&&!c;s--){var o;s>=0?o=arguments[s]:(void 0===e&&(e=process.cwd()),o=e),t(o),0!==o.length&&(r=o+"/"+r,c=47===o.charCodeAt(0))}return r=n(r,!c),c?r.length>0?"/"+r:"/":r.length>0?r:"."},normalize:function(e){if(t(e),0===e.length)return".";var r=47===e.charCodeAt(0),c=47===e.charCodeAt(e.length-1);return 0!==(e=n(e,!r)).length||r||(e="."),e.length>0&&c&&(e+="/"),r?"/"+e:e},isAbsolute:function(e){return t(e),e.length>0&&47===e.charCodeAt(0)},join:function(){if(0===arguments.length)return".";for(var e,n=0;n<arguments.length;++n){var c=arguments[n];t(c),c.length>0&&(void 0===e?e=c:e+="/"+c)}return void 0===e?".":r.normalize(e)},relative:function(e,n){if(t(e),t(n),e===n)return"";if((e=r.resolve(e))===(n=r.resolve(n)))return"";for(var c=1;c<e.length&&47===e.charCodeAt(c);++c);for(var s=e.length,o=s-c,i=1;i<n.length&&47===n.charCodeAt(i);++i);for(var a=n.length-i,d=o<a?o:a,p=-1,u=0;u<=d;++u){if(u===d){if(a>d){if(47===n.charCodeAt(i+u))return n.slice(i+u+1);if(0===u)return n.slice(i+u)}else o>d&&(47===e.charCodeAt(c+u)?p=u:0===u&&(p=0));break}var m=e.charCodeAt(c+u);if(m!==n.charCodeAt(i+u))break;47===m&&(p=u)}var l="";for(u=c+p+1;u<=s;++u)u!==s&&47!==e.charCodeAt(u)||(0===l.length?l+="..":l+="/..");return l.length>0?l+n.slice(i+p):(i+=p,47===n.charCodeAt(i)&&++i,n.slice(i))},_makeLong:function(e){return e},dirname:function(e){if(t(e),0===e.length)return".";for(var n=e.charCodeAt(0),r=47===n,c=-1,s=!0,o=e.length-1;o>=1;--o)if(47===(n=e.charCodeAt(o))){if(!s){c=o;break}}else s=!1;return-1===c?r?"/":".":r&&1===c?"//":e.slice(0,c)},basename:function(e,n){if(void 0!==n&&"string"!=typeof n)throw new TypeError('"ext" argument must be a string');t(e);var r,c=0,s=-1,o=!0;if(void 0!==n&&n.length>0&&n.length<=e.length){if(n.length===e.length&&n===e)return"";var i=n.length-1,a=-1;for(r=e.length-1;r>=0;--r){var d=e.charCodeAt(r);if(47===d){if(!o){c=r+1;break}}else-1===a&&(o=!1,a=r+1),i>=0&&(d===n.charCodeAt(i)?-1==--i&&(s=r):(i=-1,s=a))}return c===s?s=a:-1===s&&(s=e.length),e.slice(c,s)}for(r=e.length-1;r>=0;--r)if(47===e.charCodeAt(r)){if(!o){c=r+1;break}}else-1===s&&(o=!1,s=r+1);return-1===s?"":e.slice(c,s)},extname:function(e){t(e);for(var n=-1,r=0,c=-1,s=!0,o=0,i=e.length-1;i>=0;--i){var a=e.charCodeAt(i);if(47!==a)-1===c&&(s=!1,c=i+1),46===a?-1===n?n=i:1!==o&&(o=1):-1!==n&&(o=-1);else if(!s){r=i+1;break}}return-1===n||-1===c||0===o||1===o&&n===c-1&&n===r+1?"":e.slice(n,c)},format:function(e){if(null===e||"object"!=typeof e)throw new TypeError('The "pathObject" argument must be of type Object. Received type '+typeof e);return function(e,t){var n=t.dir||t.root,r=t.base||(t.name||"")+(t.ext||"");return n?n===t.root?n+r:n+"/"+r:r}(0,e)},parse:function(e){t(e);var n={root:"",dir:"",base:"",ext:"",name:""};if(0===e.length)return n;var r,c=e.charCodeAt(0),s=47===c;s?(n.root="/",r=1):r=0;for(var o=-1,i=0,a=-1,d=!0,p=e.length-1,u=0;p>=r;--p)if(47!==(c=e.charCodeAt(p)))-1===a&&(d=!1,a=p+1),46===c?-1===o?o=p:1!==u&&(u=1):-1!==o&&(u=-1);else if(!d){i=p+1;break}return-1===o||-1===a||0===u||1===u&&o===a-1&&o===i+1?-1!==a&&(n.base=n.name=0===i&&s?e.slice(1,a):e.slice(i,a)):(0===i&&s?(n.name=e.slice(1,o),n.base=e.slice(1,a)):(n.name=e.slice(i,o),n.base=e.slice(i,a)),n.ext=e.slice(o,a)),i>0?n.dir=e.slice(0,i-1):s&&(n.dir="/"),n},sep:"/",delimiter:":",win32:null,posix:null};r.posix=r,e.exports=r},895:(e,t,n)=>{const r=n(115),{usesFramework:c}=n(567),{getDevCommands:s}=n(881),{FRAMEWORKS:o}=n(198),{getPackageJsonContent:i}=n(304),{getRunScriptCommand:a}=n(887),d=e=>{const{pathExists:t,packageJson:n,packageJsonPath:r="."}=e;return{pathExists:t,packageJson:n,packageJsonPath:r}},p=function(e){const t=o.find((({name:t})=>t===e));if(void 0===t){const t=o.map((e=>u(e))).join(", ");throw new Error(`Invalid framework "${e}". It should be one of: ${t}`)}return t},u=function({name:e}){return e},m=async function({pathExists:e,packageJson:t,packageJsonPath:n}){const{npmDependencies:r,scripts:c}=await i({packageJson:t});return{npmDependencies:r,scripts:c,runScriptCommand:await a({pathExists:e,packageJsonPath:n})}},l=function({name:e,category:t,dev:{command:n,port:r},build:{command:c,directory:o},env:i},{scripts:a,runScriptCommand:d}){return{name:e,category:t,dev:{commands:s({frameworkDevCommand:n,scripts:a,runScriptCommand:d}),port:r},build:{commands:[c],directory:o},env:i}};e.exports={listFrameworks:async function(e){const{pathExists:t,packageJson:n,packageJsonPath:s}=d(e),{npmDependencies:i,scripts:a,runScriptCommand:p}=await m({pathExists:t,packageJson:n,packageJsonPath:s});return(await r(o,(e=>c(e,{pathExists:t,npmDependencies:i})))).map((e=>l(e,{scripts:a,runScriptCommand:p})))},hasFramework:async function(e,t){const n=p(e),{pathExists:r,packageJson:s,packageJsonPath:o}=d(t),{npmDependencies:i}=await m({pathExists:r,packageJson:s,packageJsonPath:o});return await c(n,{pathExists:r,npmDependencies:i})},getFramework:async function(e,t){const n=p(e),{pathExists:r,packageJson:c,packageJsonPath:s}=d(t),{scripts:o,runScriptCommand:i}=await m({pathExists:r,packageJson:c,packageJsonPath:s});return l(n,{scripts:o,runScriptCommand:i})}}},567:(e,t,n)=>{const r=n(885);e.exports={usesFramework:async function({detect:{npmDependencies:e,excludedNpmDependencies:t,configFiles:n}},{pathExists:c,npmDependencies:s}){return function(e,t){return 0===e.length||e.some((e=>t.includes(e)))}(e,s)&&function(e,t){return 0===e.length||e.every((e=>!t.includes(e)))}(t,s)&&await async function(e,t){return 0===e.length||await(async(e,t)=>await r(e,(e=>t(e))))(e,t)}(n,c)}}},881:e=>{const t=e=>-1===e?Number.MAX_SAFE_INTEGER:e,n=(e,n)=>{const r=i.findIndex((t=>o(e,t))),c=i.findIndex((e=>o(n,e)));return t(r)-t(c)},r=function(e,t){return Object.entries(e).filter((([,e])=>e.includes(t))).map((e=>c(e))).sort(n)},c=function([e]){return e},s=function(e){return i.some((t=>o(e,t)))},o=function(e,t){return e===t||e.endsWith(`:${t}`)},i=["serve","dev","develop","start","run","build","web"];e.exports={getDevCommands:function({frameworkDevCommand:e,scripts:t,runScriptCommand:c}){if(void 0===e)return[];const o=function(e,t){const c=r(e,t);return 0!==c.length?c:Object.keys(e).filter((e=>s(e))).sort(n)}(t,e).map((e=>`${c} ${e}`));return 0!==o.length?o:[e]}}},743:e=>{"use strict";e.exports=JSON.parse('{"name":"angular","category":"frontend_framework","detect":{"npmDependencies":["@angular/cli"],"excludedNpmDependencies":[],"configFiles":["angular.json"]},"dev":{"command":"ng serve","port":4200},"build":{"command":"ng build","directory":"dist"},"env":{}}')},808:e=>{"use strict";e.exports=JSON.parse('{"name":"assemble","category":"static_site_generator","detect":{"npmDependencies":["assemble"],"excludedNpmDependencies":[],"configFiles":[]},"dev":{},"build":{"command":"grunt build","directory":"dist"},"env":{}}')},777:e=>{"use strict";e.exports=JSON.parse('{"name":"brunch","category":"build_tool","detect":{"npmDependencies":["brunch"],"excludedNpmDependencies":[],"configFiles":["brunch-config.js"]},"dev":{"command":"brunch watch --server","port":3333},"build":{"command":"brunch build","directory":"public"},"env":{}}')},764:e=>{"use strict";e.exports=JSON.parse('{"name":"create-react-app","category":"frontend_framework","detect":{"npmDependencies":["react-scripts"],"excludedNpmDependencies":[],"configFiles":[]},"dev":{"command":"react-scripts start","port":3000},"build":{"command":"react-scripts build","directory":"build"},"env":{"BROWSER":"none","PORT":"3000"}}')},289:e=>{"use strict";e.exports=JSON.parse('{"name":"docpad","category":"static_site_generator","detect":{"npmDependencies":["docpad"],"excludedNpmDependencies":[],"configFiles":[]},"dev":{"command":"docpad run","port":9778},"build":{"command":"docpad generate","directory":"out"},"env":{}}')},496:e=>{"use strict";e.exports=JSON.parse('{"name":"docusaurus-v2","category":"static_site_generator","detect":{"npmDependencies":["@docusaurus/core"],"excludedNpmDependencies":[],"configFiles":["docusaurus.config.js"]},"dev":{"command":"docusaurus start","port":3000},"build":{"command":"docusaurus build","directory":"build"},"env":{"BROWSER":"none"}}')},44:e=>{"use strict";e.exports=JSON.parse('{"name":"docusaurus","category":"static_site_generator","detect":{"npmDependencies":["docusaurus"],"excludedNpmDependencies":[],"configFiles":["siteConfig.js"]},"dev":{"command":"docusaurus-start","port":3000},"build":{"command":"docusaurus-build","directory":"build/<project-name>"},"env":{"BROWSER":"none"}}')},333:e=>{"use strict";e.exports=JSON.parse('{"name":"eleventy","category":"static_site_generator","detect":{"npmDependencies":["@11ty/eleventy"],"excludedNpmDependencies":[],"configFiles":[".eleventy.js"]},"dev":{"command":"eleventy --serve","port":8080},"build":{"command":"eleventy","directory":"_site"},"env":{}}')},789:e=>{"use strict";e.exports=JSON.parse('{"name":"ember","category":"frontend_framework","detect":{"npmDependencies":["ember-cli"],"excludedNpmDependencies":[],"configFiles":["ember-cli-build.js"]},"dev":{"command":"ember serve","port":4200},"build":{"command":"ember build","directory":"dist"},"env":{}}')},575:e=>{"use strict";e.exports=JSON.parse('{"name":"expo","category":"frontend_framework","detect":{"npmDependencies":["expo"],"excludedNpmDependencies":[],"configFiles":["app.json"]},"dev":{"command":"expo start --web","port":19006},"build":{"command":"expo build:web","directory":"web-build"},"env":{}}')},473:e=>{"use strict";e.exports=JSON.parse('{"name":"gatsby","category":"static_site_generator","detect":{"npmDependencies":["gatsby"],"excludedNpmDependencies":[],"configFiles":["gatsby-config.js"]},"dev":{"command":"gatsby develop","port":8000},"build":{"command":"gatsby build","directory":"public"},"env":{"GATSBY_LOGGER":"yurnalist"}}')},595:e=>{"use strict";e.exports=JSON.parse('{"name":"gridsome","category":"static_site_generator","detect":{"npmDependencies":["gridsome"],"excludedNpmDependencies":[],"configFiles":["gridsome.config.js"]},"dev":{"command":"gridsome develop","port":8080},"build":{"command":"gridsome build","directory":"dist"},"env":{}}')},919:e=>{"use strict";e.exports=JSON.parse('{"name":"grunt","category":"build_tool","detect":{"npmDependencies":["grunt"],"excludedNpmDependencies":[],"configFiles":[]},"dev":{},"build":{"command":"grunt build","directory":"dist"},"env":{}}')},978:e=>{"use strict";e.exports=JSON.parse('{"name":"gulp","category":"build_tool","detect":{"npmDependencies":["gulp"],"excludedNpmDependencies":[],"configFiles":[]},"dev":{},"build":{"command":"gulp build","directory":"dist"},"env":{}}')},380:e=>{"use strict";e.exports=JSON.parse('{"name":"harp","category":"static_site_generator","detect":{"npmDependencies":["harp"],"excludedNpmDependencies":[],"configFiles":[]},"dev":{"command":"harp server","port":9000},"build":{"command":"harp compile","directory":"www"},"env":{}}')},173:e=>{"use strict";e.exports=JSON.parse('{"name":"hexo","category":"static_site_generator","detect":{"npmDependencies":["hexo"],"excludedNpmDependencies":[],"configFiles":["_config.yml"]},"dev":{"command":"hexo server","port":4000},"build":{"command":"hexo generate","directory":"public"},"env":{}}')},527:e=>{"use strict";e.exports=JSON.parse('{"name":"hugo","category":"static_site_generator","detect":{"npmDependencies":[],"excludedNpmDependencies":[],"configFiles":["config.toml","config.yaml"]},"dev":{"command":"hugo server -w","port":1313},"build":{"command":"hugo","directory":"public"},"env":{}}')},755:e=>{"use strict";e.exports=JSON.parse('{"name":"jekyll","category":"static_site_generator","detect":{"npmDependencies":[],"excludedNpmDependencies":[],"configFiles":["_config.yml"]},"dev":{"command":"bundle exec jekyll serve -w","port":4000},"build":{"command":"bundle exec jekyll build","directory":"_site"},"env":{}}')},198:(e,t,n)=>{const r=[n(44),n(496),n(333),n(473),n(595),n(173),n(527),n(755),n(436),n(587),n(853),n(481),n(323),n(331),n(454),n(808),n(289),n(380),n(16),n(147),n(529),n(743),n(764),n(789),n(575),n(354),n(25),n(648),n(823),n(920),n(777),n(863),n(919),n(978)];e.exports={FRAMEWORKS:r}},16:e=>{"use strict";e.exports=JSON.parse('{"name":"metalsmith","category":"static_site_generator","detect":{"npmDependencies":["metalsmith"],"excludedNpmDependencies":[],"configFiles":[]},"dev":{},"build":{"command":"metalsmith","directory":"build"},"env":{}}')},436:e=>{"use strict";e.exports=JSON.parse('{"name":"middleman","category":"static_site_generator","detect":{"npmDependencies":[],"excludedNpmDependencies":[],"configFiles":["config.rb"]},"dev":{"command":"bundle exec middleman server","port":4567},"build":{"command":"bundle exec middleman build","directory":"build"},"env":{}}')},587:e=>{"use strict";e.exports=JSON.parse('{"name":"next","category":"static_site_generator","detect":{"npmDependencies":["next"],"excludedNpmDependencies":[],"configFiles":[]},"dev":{"command":"next","port":3000},"build":{"command":"next build","directory":"out"},"env":{}}')},853:e=>{"use strict";e.exports=JSON.parse('{"name":"nuxt","category":"static_site_generator","detect":{"npmDependencies":["nuxt"],"excludedNpmDependencies":[],"configFiles":[]},"dev":{"command":"nuxt","port":3000},"build":{"command":"nuxt generate","directory":"dist"},"env":{}}')},863:e=>{"use strict";e.exports=JSON.parse('{"name":"parcel","category":"build_tool","detect":{"npmDependencies":["parcel-bundler","parcel"],"excludedNpmDependencies":[],"configFiles":[]},"dev":{"command":"parcel","port":1234},"build":{"command":"parcel build","directory":"dist"},"env":{}}')},481:e=>{"use strict";e.exports=JSON.parse('{"name":"phenomic","category":"static_site_generator","detect":{"npmDependencies":["@phenomic/core"],"excludedNpmDependencies":[],"configFiles":[]},"dev":{"command":"phenomic start","port":3333},"build":{"command":"phenomic build","directory":"public"},"env":{}}')},25:e=>{"use strict";e.exports=JSON.parse('{"name":"quasar-v0.17","category":"frontend_framework","detect":{"npmDependencies":["quasar-cli"],"excludedNpmDependencies":[],"configFiles":[]},"dev":{"command":"quasar dev -p 8080","port":8080},"build":{"command":"quasar build","directory":".quasar"},"env":{}}')},354:e=>{"use strict";e.exports=JSON.parse('{"name":"quasar","category":"frontend_framework","detect":{"npmDependencies":["@quasar/app"],"excludedNpmDependencies":[],"configFiles":[]},"dev":{"command":"quasar dev -p 8081","port":8081},"build":{"command":"quasar build","directory":"dist/spa"},"env":{}}')},323:e=>{"use strict";e.exports=JSON.parse('{"name":"react-static","category":"static_site_generator","detect":{"npmDependencies":["react-static"],"excludedNpmDependencies":[],"configFiles":["static.config.js"]},"dev":{"command":"react-static start","port":3000},"build":{"command":"react-static build","directory":"dist"},"env":{}}')},147:e=>{"use strict";e.exports=JSON.parse('{"name":"roots","category":"static_site_generator","detect":{"npmDependencies":["roots"],"excludedNpmDependencies":[],"configFiles":[]},"dev":{"command":"roots watch","port":1111},"build":{"command":"roots compile","directory":"public"},"env":{}}')},648:e=>{"use strict";e.exports=JSON.parse('{"name":"sapper","category":"frontend_framework","detect":{"npmDependencies":["sapper"],"excludedNpmDependencies":[],"configFiles":[]},"dev":{"command":"sapper dev","port":3000},"build":{"command":"sapper export","directory":"__sapper__/export"},"env":{}}')},331:e=>{"use strict";e.exports=JSON.parse('{"name":"stencil","category":"static_site_generator","detect":{"npmDependencies":["@stencil/core"],"excludedNpmDependencies":[],"configFiles":["stencil.config.ts"]},"dev":{"command":"stencil build --dev --watch --serve","port":3333},"build":{"command":"stencil build","directory":"www"},"env":{"BROWSER":"none","PORT":"3000"}}')},823:e=>{"use strict";e.exports=JSON.parse('{"name":"svelte","category":"frontend_framework","detect":{"npmDependencies":["svelte"],"excludedNpmDependencies":["sapper"],"configFiles":[]},"dev":{"command":"npm run dev","port":5000},"build":{"command":"npm run build","directory":"public"},"env":{}}')},920:e=>{"use strict";e.exports=JSON.parse('{"name":"vue","category":"frontend_framework","detect":{"npmDependencies":["@vue/cli-service"],"excludedNpmDependencies":[],"configFiles":[]},"dev":{"command":"vue-cli-service serve","port":8080},"build":{"command":"vue-cli-service build","directory":"dist"},"env":{}}')},454:e=>{"use strict";e.exports=JSON.parse('{"name":"vuepress","category":"static_site_generator","detect":{"npmDependencies":["vuepress"],"excludedNpmDependencies":[],"configFiles":[]},"dev":{"command":"vuepress dev","port":8080},"build":{"command":"vuepress build","directory":".vuepress/dist"},"env":{}}')},529:e=>{"use strict";e.exports=JSON.parse('{"name":"wintersmith","category":"static_site_generator","detect":{"npmDependencies":["wintersmith"],"excludedNpmDependencies":[],"configFiles":["config.json"]},"dev":{"command":"wintersmith preview","port":8080},"build":{"command":"wintersmith build","directory":"build"},"env":{}}')},304:(e,t,n)=>{const r=n(806),c=n(310),s=function({dependencies:e,devDependencies:t}){return[...o(e),...o(t)]},o=function(e){return c(e)?Object.keys(e):[]},i=function({scripts:e}){return c(e)?r(e,a):{}},a=function(e,t){return"string"==typeof t};e.exports={getPackageJsonContent:function({packageJson:e}){return void 0===e?{npmDependencies:[],scripts:{}}:{npmDependencies:s(e),scripts:i(e)}}}},887:(e,t,n)=>{const{dirname:r}=n(470);e.exports={getRunScriptCommand:async function({pathExists:e,packageJsonPath:t}){return await e(`${r(t)}/yarn.lock`)?"yarn":"npm run"}}}},t={},function n(r){if(t[r])return t[r].exports;var c=t[r]={exports:{}};return e[r](c,c.exports,n),c.exports}(895);var e,t}));
//# sourceMappingURL=index.js.map
{
"name": "@netlify/framework-info",
"version": "1.1.2",
"version": "2.0.0",
"description": "Framework detection utility",

@@ -89,3 +89,3 @@ "main": "./src/main.js",

"@netlify/eslint-config-node": "^2.2.2",
"ajv": "^6.12.3",
"ajv": "^7.0.0",
"ava": "^2.4.0",

@@ -92,0 +92,0 @@ "babel-loader": "^8.2.2",

@@ -8,4 +8,4 @@ [![npm version](https://img.shields.io/npm/v/@netlify/framework-info.svg)](https://npmjs.org/package/@netlify/framework-info)

Detects which framework a specific website is using. The framework's build/watch commands, directories and server port
are also returned.
Detects which framework a specific website is using. The framework's build/dev commands, directories and server port are
also returned.

@@ -15,5 +15,5 @@ The following frameworks are detected:

- Static site generators: Gatsby, Hugo, Jekyll, Next.js, Nuxt, Hexo, Gridsome, Docusaurus, Eleventy, Middleman,
Phenomic, React-static, Stencil, Vuepress
Phenomic, React-static, Stencil, Vuepress, Assemble, DocPad, Harp, Metalsmith, Roots, Wintersmith
- Front-end frameworks: create-react-app, Vue, Sapper, Angular, Ember, Svelte, Expo, Quasar
- Build tools: Parcel, Brunch
- Build tools: Parcel, Brunch, Grunt, Gulp

@@ -32,7 +32,10 @@ [Additions and updates are welcome!](#add-or-update-a-framework)

// category: 'static_site_generator',
// watch: {
// dev: {
// commands: ['gatsby develop'],
// directory: 'public',
// port: 8000
// },
// build: {
// commands: ['gatsby build'],
// directory: 'public'
// },
// env: { GATSBY_LOGGER: 'yurnalist' }

@@ -47,7 +50,10 @@ // }

// category: 'frontend_framework',
// watch: {
// dev: {
// commands: ['npm run serve'],
// directory: 'dist',
// port: 8080
// },
// build: {
// commands: ['vue-cli-service build'],
// directory: 'dist'
// },
// env: {}

@@ -64,7 +70,10 @@ // }

// category: 'frontend_framework',
// watch: {
// dev: {
// commands: ['npm run serve'],
// directory: 'dist',
// port: 8080
// },
// build: {
// commands: ['vue-cli-service build'],
// directory: 'dist'
// },
// env: {}

@@ -85,7 +94,10 @@ // }

"category": "frontend_framework",
"watch": {
"dev": {
"commands": ["npm run serve"],
"directory": "dist",
"port": 8080
},
"build": {
"commands": ["vue-cli-service build"],
"directory": "dist"
},
"env": {}

@@ -137,7 +149,7 @@ }

#### watch
#### dev
_Type_: `object`
Information about the build command, in watch mode.
Information about the dev command.

@@ -148,10 +160,4 @@ ##### commands

Build command, in watch mode. There might be several alternatives.
Dev command. There might be several alternatives.
##### directory
_Type_: `string`
Relative path to the directory where files are built, in watch mode.
##### port

@@ -163,2 +169,20 @@

#### build
_Type_: `object`
Information about the build command.
##### commands
_Type_: `string[]`
Build command. There might be several alternatives.
##### directory
_Type_: `string`
Relative path to the directory where files are built.
#### env

@@ -168,3 +192,3 @@

Environment variables that should be set when calling the watch command.
Environment variables that should be set when calling the dev command.

@@ -213,7 +237,10 @@ ## hasFramework(frameworkName, options?)

},
"watch": {
"dev": {
"command": "gatsby develop",
"directory": "public",
"port": 8000
},
"build": {
"command": "gatsby build",
"directory": "public"
},
"env": { "GATSBY_LOGGER": "yurnalist" }

@@ -270,7 +297,7 @@ }

## watch
## dev
_Type_: `object`
Parameters to detect the watch command.
Parameters to detect the dev command.

@@ -281,15 +308,27 @@ ### command

Default watch command.
Default dev command.
### directory
### port
_Type_: `number`
Local dev server port.
## build
_Type_: `object`
Parameters to detect the build command.
### command
_Type_: `string`
Directory where built files are written to, in watch mode.
Default build command.
### port
### directory
_Type_: `number`
_Type_: `string`
Local watch server port.
Directory where built files are written to.

@@ -300,2 +339,2 @@ ## env

Environment variables that should be set when running the watch command.
Environment variables that should be set when running the dev command.

@@ -48,3 +48,3 @@ #!/usr/bin/env node

return frameworks.map(getName).join('\n')
return frameworks.map((framework) => getName(framework)).join('\n')
}

@@ -51,0 +51,0 @@

const pFilter = require('p-filter')
const { usesFramework } = require('./detect.js')
const { getDevCommands } = require('./dev.js')
const { FRAMEWORKS } = require('./frameworks/main.js')
const { getPackageJsonContent } = require('./package.js')
const { getRunScriptCommand } = require('./run_script.js')
const { getWatchCommands } = require('./watch.js')

@@ -30,5 +30,4 @@ const getContext = (context) => {

/**
* @typedef {object} Watch
* @property {string} commands - Build command, in watch mode. There might be several alternatives
* @property {string} directory - Relative path to the directory where files are built, in watch mode
* @typedef {object} Dev
* @property {string} commands - Dev command. There might be several alternatives or empty
* @property {number} port - Server port

@@ -38,7 +37,14 @@ */

/**
* @typedef {object} Build
* @property {string} commands - Build command. There might be several alternatives
* @property {string} directory - Relative path to the directory where files are built
*/
/**
* @typedef {object} Framework
* @property {string} name - Name such as `"gatsby"`
* @property {string} category - Category among `"static_site_generator"`, `"frontend_framework"` and `"build_tool"`
* @property {Watch} watch - Information about the build command, in watch mode.
* @property {object} env - Environment variables that should be set when calling the watch command
* @property {Dev} dev - Information about the dev command
* @property {Build} build - Information about the build command
* @property {object} env - Environment variables that should be set when calling the dev command
*/

@@ -104,3 +110,3 @@

if (framework === undefined) {
const frameworkNames = FRAMEWORKS.map(getFrameworkName).join(', ')
const frameworkNames = FRAMEWORKS.map((knownFramework) => getFrameworkName(knownFramework)).join(', ')
throw new Error(`Invalid framework "${frameworkName}". It should be one of: ${frameworkNames}`)

@@ -124,9 +130,21 @@ }

const getFrameworkInfo = function (
{ name, category, watch: { command: frameworkWatchCommand, directory, port }, env },
{
name,
category,
dev: { command: frameworkDevCommand, port },
build: { command: frameworkBuildCommand, directory },
env,
},
{ scripts, runScriptCommand },
) {
const watchCommands = getWatchCommands({ frameworkWatchCommand, scripts, runScriptCommand })
return { name, category, watch: { commands: watchCommands, directory, port }, env }
const devCommands = getDevCommands({ frameworkDevCommand, scripts, runScriptCommand })
return {
name,
category,
dev: { commands: devCommands, port },
build: { commands: [frameworkBuildCommand], directory },
env,
}
}
module.exports = { listFrameworks, hasFramework, getFramework }

@@ -9,8 +9,11 @@ {

},
"watch": {
"dev": {
"command": "ng serve",
"directory": "dist",
"port": 4200
},
"build": {
"command": "ng build",
"directory": "dist"
},
"env": {}
}

@@ -9,8 +9,11 @@ {

},
"watch": {
"dev": {
"command": "brunch watch --server",
"directory": "app/assets",
"port": 3333
},
"build": {
"command": "brunch build",
"directory": "public"
},
"env": {}
}

@@ -9,8 +9,11 @@ {

},
"watch": {
"dev": {
"command": "react-scripts start",
"directory": "public",
"port": 3000
},
"build": {
"command": "react-scripts build",
"directory": "build"
},
"env": { "BROWSER": "none", "PORT": "3000" }
}

@@ -9,8 +9,11 @@ {

},
"watch": {
"dev": {
"command": "docusaurus start",
"directory": "static",
"port": 3000
},
"build": {
"command": "docusaurus build",
"directory": "build"
},
"env": { "BROWSER": "none" }
}

@@ -9,8 +9,11 @@ {

},
"watch": {
"dev": {
"command": "docusaurus-start",
"directory": "static",
"port": 3000
},
"build": {
"command": "docusaurus-build",
"directory": "build/<project-name>"
},
"env": { "BROWSER": "none" }
}

@@ -9,8 +9,11 @@ {

},
"watch": {
"command": "npx @11ty/eleventy --watch",
"directory": "_site",
"dev": {
"command": "eleventy --serve",
"port": 8080
},
"build": {
"command": "eleventy",
"directory": "_site"
},
"env": {}
}

@@ -9,8 +9,11 @@ {

},
"watch": {
"dev": {
"command": "ember serve",
"directory": "dist",
"port": 4200
},
"build": {
"command": "ember build",
"directory": "dist"
},
"env": {}
}

@@ -9,8 +9,11 @@ {

},
"watch": {
"dev": {
"command": "expo start --web",
"directory": "web-build",
"port": 19006
},
"build": {
"command": "expo build:web",
"directory": "web-build"
},
"env": {}
}

@@ -9,8 +9,11 @@ {

},
"watch": {
"dev": {
"command": "gatsby develop",
"directory": "public",
"port": 8000
},
"build": {
"command": "gatsby build",
"directory": "public"
},
"env": { "GATSBY_LOGGER": "yurnalist" }
}

@@ -9,8 +9,11 @@ {

},
"watch": {
"dev": {
"command": "gridsome develop",
"directory": "dist",
"port": 8080
},
"build": {
"command": "gridsome build",
"directory": "dist"
},
"env": {}
}

@@ -9,8 +9,11 @@ {

},
"watch": {
"dev": {
"command": "hexo server",
"directory": "public",
"port": 4000
},
"build": {
"command": "hexo generate",
"directory": "public"
},
"env": {}
}

@@ -9,8 +9,11 @@ {

},
"watch": {
"dev": {
"command": "hugo server -w",
"directory": "public",
"port": 1313
},
"build": {
"command": "hugo",
"directory": "public"
},
"env": {}
}

@@ -9,8 +9,11 @@ {

},
"watch": {
"dev": {
"command": "bundle exec jekyll serve -w",
"directory": "_site",
"port": 4000
},
"build": {
"command": "bundle exec jekyll build",
"directory": "_site"
},
"env": {}
}

@@ -21,2 +21,8 @@ /* eslint-disable node/global-require,import/order,import/max-dependencies */

require('./vuepress.json'),
require('./assemble.json'),
require('./docpad.json'),
require('./harp.json'),
require('./metalsmith.json'),
require('./roots.json'),
require('./wintersmith.json'),

@@ -37,2 +43,4 @@ // Front-end frameworks

require('./parcel.json'),
require('./grunt.json'),
require('./gulp.json'),
]

@@ -39,0 +47,0 @@

@@ -9,8 +9,11 @@ {

},
"watch": {
"dev": {
"command": "bundle exec middleman server",
"directory": "build",
"port": 4567
},
"build": {
"command": "bundle exec middleman build",
"directory": "build"
},
"env": {}
}

@@ -9,8 +9,11 @@ {

},
"watch": {
"dev": {
"command": "next",
"directory": "out",
"port": 3000
},
"build": {
"command": "next build",
"directory": "out"
},
"env": {}
}

@@ -9,8 +9,11 @@ {

},
"watch": {
"dev": {
"command": "nuxt",
"directory": "dist",
"port": 3000
},
"build": {
"command": "nuxt generate",
"directory": "dist"
},
"env": {}
}

@@ -9,8 +9,11 @@ {

},
"watch": {
"dev": {
"command": "parcel",
"directory": "dist",
"port": 1234
},
"build": {
"command": "parcel build",
"directory": "dist"
},
"env": {}
}

@@ -9,8 +9,11 @@ {

},
"watch": {
"dev": {
"command": "phenomic start",
"directory": "public",
"port": 3333
},
"build": {
"command": "phenomic build",
"directory": "public"
},
"env": {}
}

@@ -9,8 +9,11 @@ {

},
"watch": {
"dev": {
"command": "quasar dev -p 8080",
"directory": ".quasar",
"port": 8080
},
"build": {
"command": "quasar build",
"directory": ".quasar"
},
"env": {}
}

@@ -9,8 +9,11 @@ {

},
"watch": {
"dev": {
"command": "quasar dev -p 8081",
"directory": ".quasar",
"port": 8081
},
"build": {
"command": "quasar build",
"directory": "dist/spa"
},
"env": {}
}

@@ -9,8 +9,11 @@ {

},
"watch": {
"dev": {
"command": "react-static start",
"directory": "dist",
"port": 3000
},
"build": {
"command": "react-static build",
"directory": "dist"
},
"env": {}
}

@@ -9,8 +9,11 @@ {

},
"watch": {
"dev": {
"command": "sapper dev",
"directory": "static",
"port": 3000
},
"build": {
"command": "sapper export",
"directory": "__sapper__/export"
},
"env": {}
}

@@ -9,8 +9,11 @@ {

},
"watch": {
"dev": {
"command": "stencil build --dev --watch --serve",
"directory": "www",
"port": 3333
},
"build": {
"command": "stencil build",
"directory": "www"
},
"env": { "BROWSER": "none", "PORT": "3000" }
}

@@ -9,8 +9,11 @@ {

},
"watch": {
"dev": {
"command": "npm run dev",
"directory": "public",
"port": 5000
},
"build": {
"command": "npm run build",
"directory": "public"
},
"env": {}
}

@@ -9,8 +9,11 @@ {

},
"watch": {
"dev": {
"command": "vue-cli-service serve",
"directory": "dist",
"port": 8080
},
"build": {
"command": "vue-cli-service build",
"directory": "dist"
},
"env": {}
}

@@ -9,8 +9,11 @@ {

},
"watch": {
"dev": {
"command": "vuepress dev",
"directory": ".vuepress/dist",
"port": 8080
},
"build": {
"command": "vuepress build",
"directory": ".vuepress/dist"
},
"env": {}
}

@@ -10,5 +10,4 @@ const { getContext } = require('./context')

/**
* @typedef {object} Watch
* @property {string} commands - Build command, in watch mode. There might be several alternatives
* @property {string} directory - Relative path to the directory where files are built, in watch mode
* @typedef {object} Dev
* @property {string} commands - Dev command. There might be several alternatives or empty
* @property {number} port - Server port

@@ -18,7 +17,14 @@ */

/**
* @typedef {object} Build
* @property {string} commands - Build command. There might be several alternatives
* @property {string} directory - Relative path to the directory where files are built
*/
/**
* @typedef {object} Framework
* @property {string} name - Name such as `"gatsby"`
* @property {string} category - Category among `"static_site_generator"`, `"frontend_framework"` and `"build_tool"`
* @property {Watch} watch - Information about the build command, in watch mode.
* @property {object} env - Environment variables that should be set when calling the watch command
* @property {Dev} dev - Information about the dev command
* @property {Build} build - Information about the build command
* @property {object} env - Environment variables that should be set when calling the dev command
*/

@@ -25,0 +31,0 @@

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc