From 2fbb2ebbcb931147df3dd6f402cb3efcaa52d3ad Mon Sep 17 00:00:00 2001 From: Ate Poorthuis Date: Wed, 29 Jan 2020 17:54:32 +0800 Subject: [PATCH 01/35] feat: async extractors --- packages/postcss-purgecss/src/index.ts | 2 +- packages/purgecss/src/index.ts | 16 ++++++++-------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/packages/postcss-purgecss/src/index.ts b/packages/postcss-purgecss/src/index.ts index cc30b59e..dd104762 100644 --- a/packages/postcss-purgecss/src/index.ts +++ b/packages/postcss-purgecss/src/index.ts @@ -27,7 +27,7 @@ const purgeCSSPlugin = postcss.plugin>( fileFormatContents, extractors ); - const cssRawSelectors = purgeCSS.extractSelectorsFromString( + const cssRawSelectors = await purgeCSS.extractSelectorsFromString( rawFormatContents, extractors ); diff --git a/packages/purgecss/src/index.ts b/packages/purgecss/src/index.ts index 37965ad8..87927b7e 100644 --- a/packages/purgecss/src/index.ts +++ b/packages/purgecss/src/index.ts @@ -63,11 +63,11 @@ export async function setOptions( * @param content content (e.g. html file) * @param extractor PurgeCSS extractor used to extract the selectors */ -function extractSelectors( +async function extractSelectors( content: string, extractor: ExtractorFunction -): ExtractorResultDetailed { - const selectors = extractor(content); +): Promise { + const selectors = await extractor(content); return Array.isArray(selectors) ? { attributes: { @@ -409,7 +409,7 @@ class PurgeCSS { for (const file of filesNames) { const content = await asyncFs.readFile(file, "utf-8"); const extractor = this.getFileExtractor(file, extractors); - const extractedSelectors = extractSelectors(content, extractor); + const extractedSelectors = await extractSelectors(content, extractor); selectors = mergeExtractorSelectors(selectors, extractedSelectors); } } @@ -421,10 +421,10 @@ class PurgeCSS { * @param content Array of content * @param extractors Array of extractors */ - public extractSelectorsFromString( + public async extractSelectorsFromString( content: RawContent[], extractors: Extractors[] - ): ExtractorResultDetailed { + ): Promise { let selectors: ExtractorResultDetailed = { attributes: { names: [], @@ -438,7 +438,7 @@ class PurgeCSS { for (const { raw, extension } of content) { const extractor = this.getFileExtractor(`.${extension}`, extractors); - const extractedSelectors = extractSelectors(raw, extractor); + const extractedSelectors = await extractSelectors(raw, extractor); selectors = mergeExtractorSelectors(selectors, extractedSelectors); } return selectors; @@ -652,7 +652,7 @@ class PurgeCSS { fileFormatContents, extractors ); - const cssRawSelectors = this.extractSelectorsFromString( + const cssRawSelectors = await this.extractSelectorsFromString( rawFormatContents, extractors ); From e066817552b7a1cdb082b657a9790449b9ea2278 Mon Sep 17 00:00:00 2001 From: Alexander von Weiss Date: Tue, 4 Feb 2020 14:32:43 +0100 Subject: [PATCH 02/35] feat(content-options): add option contentFunction to be able to declare content glob based on current input source css file --- packages/postcss-purgecss/README.md | 20 +++++++++-- .../postcss-purgecss/__tests__/index.test.ts | 34 ++++++++++++++++++- packages/postcss-purgecss/src/index.ts | 7 ++++ packages/postcss-purgecss/src/types/index.ts | 3 +- 4 files changed, 60 insertions(+), 4 deletions(-) diff --git a/packages/postcss-purgecss/README.md b/packages/postcss-purgecss/README.md index 99c176fd..aa4e0aba 100644 --- a/packages/postcss-purgecss/README.md +++ b/packages/postcss-purgecss/README.md @@ -33,11 +33,27 @@ See [PostCSS] docs for examples for your environment. All of the options of purgecss are available to use with the plugins. You will find below the main options available. For the complete list, go to the [purgecss documentation website](https://www.purgecss.com/configuration.html#options). -### `content` (**required**) -Type: `string | Object` +### `content` (**required** or use `contentFunction` instead) +Type: `Array` You can specify content that should be analyzed by Purgecss with an array of filenames or globs. The files can be HTML, Pug, Blade, etc. +### `contentFunction` (as alternative to `content`) +Type: `(sourceInputFile: string) => Array` + +The function receives the current source input file. With this you may provide a specific array of globs for each input. E.g. for +an angular application only scan the components template counterpart for every component scss file: + +```js +purgecss({ + contentFunction: (source: string) => { + (/component\.scss$/.test(source)) + ? [sourceInputFile.replace(/scss$/, 'html')] + : ['./src/**/*.html'] + }, +}) +``` + ### `extractors` Type: `Array` diff --git a/packages/postcss-purgecss/__tests__/index.test.ts b/packages/postcss-purgecss/__tests__/index.test.ts index cf44f9aa..c81821d0 100644 --- a/packages/postcss-purgecss/__tests__/index.test.ts +++ b/packages/postcss-purgecss/__tests__/index.test.ts @@ -7,7 +7,7 @@ describe("Purgecss postcss plugin", () => { const files = ["simple", "font-keyframes"]; for (const file of files) { - it(`remove unused css successfully: ${file}`, done => { + it(`remove unused css with content option successfully: ${file}`, done => { const input = fs .readFileSync(`${__dirname}/fixtures/src/${file}/${file}.css`) .toString(); @@ -30,6 +30,38 @@ describe("Purgecss postcss plugin", () => { }); } + for (const file of files) { + it(`remove unused css with contentFunction option successfully: ${file}`, done => { + const input = fs + .readFileSync(`${__dirname}/fixtures/src/${file}/${file}.css`) + .toString(); + const expected = fs + .readFileSync(`${__dirname}/fixtures/expected/${file}.css`) + .toString(); + + const sourceFileName = `src/${file}/${file}.css`; + const contentFunction = jest + .fn() + .mockReturnValue([`${__dirname}/fixtures/src/${file}/${file}.html`]); + + postcss([ + purgeCSSPlugin({ + contentFunction, + fontFace: true, + keyframes: true + }) + ]) + .process(input, { from: sourceFileName }) + .then((result: any) => { + expect(result.css).toBe(expected); + expect(result.warnings().length).toBe(0); + expect(contentFunction).toHaveBeenCalledTimes(1); + expect(contentFunction.mock.calls[0][0]).toContain(sourceFileName); + done(); + }); + }); + } + for (const file of ["simple"]) { it(`queues messages when using reject flag: ${file}`, done => { const input = fs diff --git a/packages/postcss-purgecss/src/index.ts b/packages/postcss-purgecss/src/index.ts index cc30b59e..eff82ec0 100644 --- a/packages/postcss-purgecss/src/index.ts +++ b/packages/postcss-purgecss/src/index.ts @@ -12,6 +12,13 @@ const purgeCSSPlugin = postcss.plugin>( ...defaultOptions, ...opts }; + + if (opts && typeof opts.contentFunction === "function") { + options.content = opts.contentFunction( + (root.source && root.source.input.file) || "" + ); + } + purgeCSS.options = options; const { content, extractors } = options; diff --git a/packages/postcss-purgecss/src/types/index.ts b/packages/postcss-purgecss/src/types/index.ts index ca03b6d2..b96ffca6 100644 --- a/packages/postcss-purgecss/src/types/index.ts +++ b/packages/postcss-purgecss/src/types/index.ts @@ -11,7 +11,8 @@ export interface Extractors { extractor: ExtractorFunction; } export interface UserDefinedOptions { - content: Array; + content?: Array; + contentFunction?: (sourceFile: string) => Array; css: Array; defaultExtractor?: ExtractorFunction; extractors?: Array; From 290b5ec82e156e06440bd71e4381574dacade1e8 Mon Sep 17 00:00:00 2001 From: charlie Date: Sat, 8 Feb 2020 22:37:58 -0600 Subject: [PATCH 03/35] Update react.md Update the webpack configuration --- docs/guides/react.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/guides/react.md b/docs/guides/react.md index ed234d5e..f677e8a2 100644 --- a/docs/guides/react.md +++ b/docs/guides/react.md @@ -77,6 +77,6 @@ const glob = require('glob-all') // for more information about PurgeCSS. // Specify the path of the html files and source files new PurgecssPlugin({ - paths: [paths.appHtml, ...glob.sync(`${paths.appSrc}/*`)] + paths: [paths.appHtml, ...glob.sync(`${paths.appSrc}/**/*`, { nodir: true })] }), ``` From 18cc8b27d82048dbe287af3be777fa378e0f2930 Mon Sep 17 00:00:00 2001 From: Ffloriel Date: Mon, 17 Feb 2020 23:08:40 +0000 Subject: [PATCH 04/35] feat(vue-cli-plugin): add vue-cli-plugin-purgecss create vue-cli-plugin for PurgeCSS containing sensible default for vuejs --- packages/vue-cli-plugin-purgecss/README.md | 53 ++++++++++++++++++ .../generator/index.js | 8 +++ .../generator/templates/postcss.config.js | 15 +++++ packages/vue-cli-plugin-purgecss/logo.png | Bin 0 -> 5367 bytes packages/vue-cli-plugin-purgecss/package.json | 28 +++++++++ 5 files changed, 104 insertions(+) create mode 100644 packages/vue-cli-plugin-purgecss/README.md create mode 100644 packages/vue-cli-plugin-purgecss/generator/index.js create mode 100644 packages/vue-cli-plugin-purgecss/generator/templates/postcss.config.js create mode 100644 packages/vue-cli-plugin-purgecss/logo.png create mode 100644 packages/vue-cli-plugin-purgecss/package.json diff --git a/packages/vue-cli-plugin-purgecss/README.md b/packages/vue-cli-plugin-purgecss/README.md new file mode 100644 index 00000000..a0713ab9 --- /dev/null +++ b/packages/vue-cli-plugin-purgecss/README.md @@ -0,0 +1,53 @@ +# vue-cli-plugin-purgecss + +> A [Vue CLI 3 Plugin](https://github.com/vuejs/vue-cli) for installing PurgeCSS + +## Install + +If you haven't yet installed vue-cli 3, first follow the install instructions here: https://github.com/vuejs/vue-cli + +Generate a project using vue-cli 3.0: + +```bash +vue create my-app +``` + +Before installing the PurgeCSS plugin, make sure to commit or stash your changes in case you need to revert the changes. + +To install the PurgeCSS plugin simply navigate to your application folder and add PurgeCSS. + +```bash +cd my-app + +vue add purgecss +``` + +### Usage + +Below are the PurgeCSS options set by this plugin: + +```js +{ + content: [ `./public/**/*.html`, `./src/**/*.vue` ], + defaultExtractor (content) { + const contentWithoutStyleBlocks = content.replace(//gi, '') + return contentWithoutStyleBlocks.match(/[A-Za-z0-9-_/:]*[A-Za-z0-9-_/]+/g) || [] + }, + whitelist: [], + whitelistPatterns: [ /-(leave|enter|appear)(|-(to|from|active))$/, /^(?!(|.*?:)cursor-move).+-move$/, /^router-link(|-exact)-active$/, /data-v-.*/ ], +} +``` + +## Contributing + +Please read [CONTRIBUTING.md](./../../CONTRIBUTING.md) for details on our code of +conduct, and the process for submitting pull requests to us. + +## Versioning + +PurgeCSS use [SemVer](http://semver.org/) for versioning. + +## License + +This project is licensed under the MIT License - see the [LICENSE](./../../LICENSE) file +for details. diff --git a/packages/vue-cli-plugin-purgecss/generator/index.js b/packages/vue-cli-plugin-purgecss/generator/index.js new file mode 100644 index 00000000..8daedbdd --- /dev/null +++ b/packages/vue-cli-plugin-purgecss/generator/index.js @@ -0,0 +1,8 @@ +module.exports = (api, options) => { + api.extendPackage({ + devDependencies: { + '@fullhuman/postcss-purgecss': '^2.1.0' + } + }) + api.render('./templates', options) +} \ No newline at end of file diff --git a/packages/vue-cli-plugin-purgecss/generator/templates/postcss.config.js b/packages/vue-cli-plugin-purgecss/generator/templates/postcss.config.js new file mode 100644 index 00000000..1353779a --- /dev/null +++ b/packages/vue-cli-plugin-purgecss/generator/templates/postcss.config.js @@ -0,0 +1,15 @@ +const IN_PRODUCTION = process.env.NODE_ENV === 'production' + +module.exports = { + plugins: [ + IN_PRODUCTION && require('@fullhuman/postcss-purgecss')({ + content: [ `./public/**/*.html`, `./src/**/*.vue` ], + defaultExtractor (content) { + const contentWithoutStyleBlocks = content.replace(//gi, '') + return contentWithoutStyleBlocks.match(/[A-Za-z0-9-_/:]*[A-Za-z0-9-_/]+/g) || [] + }, + whitelist: [], + whitelistPatterns: [ /-(leave|enter|appear)(|-(to|from|active))$/, /^(?!(|.*?:)cursor-move).+-move$/, /^router-link(|-exact)-active$/, /data-v-.*/ ], + }) + ], +} \ No newline at end of file diff --git a/packages/vue-cli-plugin-purgecss/logo.png b/packages/vue-cli-plugin-purgecss/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..2417a4b9a1e3e01f6a12a2367151442f9b727d93 GIT binary patch literal 5367 zcmV_^2z_RL=6RmpxBlDPr*qET=iGD7J@?-C zUajBny>srK*Is+Cz4qE`ucIn0@Yi2|RrcxKyK>02*IHsLD_0^^RY8kA_E6t^^NsoG zc`jJANUgf+syZxVVj6D0y(h!VufFOeBF!#4@2n~+DwbuU20skD;RZGK;fK|dx88E1 zo}WHlzw4TUnsoSKhdCL{3oXk0{rBJIxApn;*I(y^XZl`rQBI%<*kX$*QDE^KZ!F8i8yVMJb4_dBXM_v63-&NeTMmdHg_fg6k5knr z^>$z>zKBkpJF5YgUFHe(kd_LZ%vh zpgXIWO3;w%BAD&I>#jOimj7`osj5pqt{FU7y*zuiy7l(k-NBxBVN7c5*s&_}^t5T7 zh&Vr1Uww65$#1{?7MiVJ-@YpQ(1Q<#CbC67I$?s^VTT=bRP&}y)%V|jZ%gJ0%U*Z= z^{UBkyLkfh{pfJ`;rWu}#Anu8YptBXv;$sWvg99j=bpi7R|1E~WHQV6DwTCS`sh^a zq0G%T+f0|~%p-mcyy6Ny5n(4u0WNBr%z7UA3x#L7yYrDp9#ITY8?XpG$UKqm2?Hyy zvt?l7jTkXPEtT%rXrql(`-2WrEnBu!E3LGWEqP8@Xhlyx`K0Q3_Srd^`~mB%vyOV@ zwb%T?p5NArn1D>gxUl7xTdJu~KW)vHQ_-oXoT6sD@PajQ)Ic|VO&(80M~K+HL?)LF zX1w^KUQNIH>MM2It+%SN4?Sc{=7jkxbA}2dE2t83vt;uJZ@hfqKs_oex_5U9_P_X7 z1P3F3gg+xvA{CL2p$uCA2K4W*?!WIoe{%i1p)lU@!hivd(at;WsDDKLhp1*6cBxbp z1WT%<8RB(CfByMrP}xC&aAfDY7vtrOE&%a=XFLsyzebQ7|B=tCYx-s ztfFQi8>oB*g~b~VPa0>!`WLFO0;0tAz4&5}WaLyt=Cmq1?)c-?2`8TDX;03CrLr9w zG*B)*peIAVA5*4IRkmfrgOMo&W;t=vB=a-U6U7^iv{j-Du#u6)b=PUZC5o!RT@1n}8}J@yoZ(Tk zy3@pYPlV9q#~)W0oPWMvCE`>TH7!c!JMX$nC7Irl5kkDYs864$ZAvX2YxrFv)wF2Q zB2t-o5jyP9L)BX{IjRG+YTa7hdfRQGO$kJ(kgbc6(WzM`x$>(QKK$@QbySBAk(3~| z)*mZ;^pZ<1u|=sIgpzLb+@-q_8hH8T`cz=U4L4LQw1^IFcw+Ko)vISucTl8vh9YMJ z{_;G0o5`MJ*BYe-Uw-+eVq=7$hRV>uK_Y~~@6BnG3D5Tw#;wbH!?h_QkAo0`@wvTv z`!cXf|jSx|b^zNkbD zjJoF@^BVj4&O7fY5ua2R#apR?ZOdzO=Xy94%f#=$|6Wj2CW!!=eY=Ei$Oq9K^DMYW1b`@X%8a+1-xe4 z=Ohq4l2lsEJcF;fMi;LUVso|by6YCRzM_`hK=$&7n03h1H2alTV#`w|Z#kdr{U=PE z=rlo7$o#@2X$v_XsVT7c-g~PTed=hhEH9W$le3-|XU?N2Z($fRg z4N#JWsh2!M&foYu@4j1S?sDw0{-~1wMx_WM{Q`EXra_?ynM9mAQP`r_Usv19KBiQ_ z2tff$-G0?&P#bdQP*6g`+3r5((m*aR*P?KEW$ox<`)iG%%OK4MhWQS$iH*9R0@7x`01h%LbT@4v5R3a9+wgAWwv&EJaU zDv0p6%{JSpy~Q>Fvk7b&(}Y;V%~mmriWxIzsNutgsl~E}#gUw$P7^UBIQP8sRO1j+ zLtDMJu*8(Xa;b+LxX+q3EAi2RyFna09w-(aSBnW&Qi{b!hRqiWjm0r+WZjL9@{Sqp zEn*7c-#6vU8;MPuLPm%kYoncZDk>t>^@1oM(b?s*>oDyy&q$PE6V|46>&VB#rtmbL zta0NXd(3kt7gTOuWIp}$Q`J@wVUJ%ffKgzMA7tBV+7&v?7RegXTE=fV5uu@sjHa?x z|Ln8ROuMbmK+3!;daQ#EJkXjcERd6g7i5hw0PB8J&M@DSzuV=gqY$Y9?I|VzL7Po0 zGT(mttwK{uL*fF+pic_|${ZxNJ)=jBN>n}^Zr*|gR`#7U%&2T%S)r34;zxiocHLzc z_2Z8}I#Kj)UolOjL2*wKD1=3MA8DTra*#Pz#Q#FIlJ1I7?la!U$+Z|apb-V3e3ROp z$GjsR+3vV_kiq0`ZXWYSQ()XDm3Qvc$&-y$AKe7cxIpJH9o*n4<(Q5g-EpbE&y%?X zmE7_hqRS9D-cJJU4>-V+%|Qk&Xqv;zQ;X{d^9O|7?4Hv&tkvVfcS0GrSmhwoPqwM0 z0*+u{GHy6Ip<<=$NhdkQXk=cOt#K)+;?ycHoSEL^I?q8_nFKhbHdg{PGJP(%AW1m| z=ehdIE1fcuiv1KYpz3%f!&*=-g9zr0InRNku?8i9C*;%}$gs67C%E@4Nf&B5h4m~m zQgmhIf_nApIcrRzXFaStnJIE#pj^PM3Inf-h+hbBi76Ass<@C!g7UK0cT2x=NjWHK zr0}`2AZN@3jFcm#M5ta5KjH|dG?s;hBBvDslu@v%DQ*KW-@=T`4acRR+lC303>n0I zET#N6wnvKLU7=K=W8j2((RBAxG2Zu(jUGlrenil|Tvfm&41ZgTPMKk%o;tuM-6Az} z<7%qd52pnzxJ5;V3fzbwF{689ZA-d91|g3Gk!36wOUR_bi2HC%7Dcz%AJnL%;p|+q zY+H+k3=PBfvlP%==4Iv>-&VF16&It9_M#T6HOS}-Jb3F!DtZ^Ahm(|v&(vL zMx`c$nJOBYAw!4OWL#A5s%rxpnXR_kDv@@vI`qKC8*l7rb{uhLcp2WWzSxkq+a6Os zPnb@(Zr${SyWM5W9S5v-08t8HPmgm&+-JGZDBX4d=m5C=9R-+|JQv@YPqVsZTwn*`_gS$cGFQ8Y-V5NThLHCKY7dh@pXT_w02;hUjZ#G`5bI zHEy@vc8bj)qDb27Sn9~Q5liw8HPIGfO@(HEzHl-w8+{;lpB(Hmy!j(tRG@QVC>dFF z*ZtSOR6Vg1r9*cSQ%dF~rxE2|er&jul{gRqGihDCmX^{AtcQm34HYC)G6^3_9p>cn9!V2!w3oF*)g^};Ro zL}^e>N(0N=Uk=qS=-pdwy6L8=H$64tV5El}iraviz^>BnN!<2y@6kh@D6W{&VtoY@ z2aD(nMU{=~gE$gY+MQEf%0vCqzI}UjN&o(8z4g{Bs9A}LgT4KEaS8!VKk`Lm@jRTyn*+N_zju;ut73B)E2`wt8i+^$@bR2(M{gyG&n97Asi zgx`@lqJx_yicZ{Id?`ESQqOMoSO<&m27Hj@Q=$3$Br_ze>G$B4loUP=fe4jp}i zxX|8FE@H7a3DW4AwlcG{^e6@-&xrI`N?`>hZ67hn?;;|(TjOBbW_v~=4mRJXi-IVs zZ%=L#8-d|(5Fn+Y4C0~*Sw6!NK37;NLk2LBq-IpOrQRKO+|i#%L^<%3X_ zCo=>yC2mBNi!k{RF!8i?w)o)3>lF@i`d@mfvVE|{q(=cl&|{8vB$n;?lh3 zKKrCqb!a(;D_wNqg<6qoOPoU-?wxm&k>tKxWXo97!oZ95iSKVbCcfisQX88`j^0W& zgXqKYk3Om{lds0u291X}Og9_?psKH}z&#dx-ySKp{x(5?bD8u0``^@d`BD1uAvqfz zEEg&KEY2YgBk7h~Zqc3^q7+!u)1d$BB&U2fp`od`&WP%JH?4jcBN8XBN8R8M2R|Tp zh=^yK?(Ph=>HR&?Zr}pjKVp&O>X*>h5Pgbhf0^7J{N$5QoG#YHft?{a@Lb;Db8)j^ zEfI}rFO?IYeY@ycj0PJJ%8{18sIR~vLFNt5Va^4t+4%nIT5z8$1@XNtl zOF0;@Tt8pDK)}MnG}nA@ptqzew_t?i_U^mysw}?$Y9p}NW0!_&iw2^l4g=O0jzjp4 zf{~QM(ic09Hn9K7;&rGt0jl_3=bo!?`{%PcqZ2sSVYd9_a!pko`a^%aZM`D9j4uVE z*p}faw)^R)N4k82o{f(gjFe9dm79eH^^bPLTBkrGgrLGp5zeB{EV;N}ztHMfQ_)V3 z60P(EQ8eO+q&ly&uw?A8v+!enR0m!g+QR{n5Qy9I@Mxr*uf(qu>nK`vypI!BU1vuC zO4_a)1NkieanZzbhEvmk(T~+X$JDh6xa^6ceWspVK#Y3>rZ#m%b;N}OKPF5Dy%O?& zKFOv!B2gRLg!vTTCxBgR#V2>w8e3EuwGsL1juR6F{||sB4r+})q6DmIE(fZ6N5^en z-MV%46+Z+t;Gh5U(n!pS*e3+(oOJ3H|BBWFOpq(Y;ivoVr9&KQtq}Wxq#qP4TC10X zf|(H9>}~1umFpo6N=Fq*M9I2he)Q^ZSv_EgoG7P{2u5k zo}|wf14FaUxNFQI4v`QDCoxD4E7l-)ccu5v)@6X){ySf8#n}i$O;+L%LFR#?Mjv$5 zRVB6IqVC!b80L=}Jz8}VzlmXkKae=4gF48Uym2hG?Y7&RpcT&odH^pmGv%~3idH5s zacIYu@=eA`oD$0Q!WEi?WR&6J*Ue(IiPxK``^iYep*iryuHub`ug@GHcOHZIWU{8$ z-dqf3oTu?!r8aHb#zHhQaZIV4#}6AmTuqY`#3piCDU4^DJj>&gZOIX`B;W)HH+@Ms zPHf_sj^_Jq#Lj%hqrHu%Zyh zT?ya8#WxIp7|SgZgZVMC0h|8pv-(SU)!EPjVF%OQBgGLB+7i~;Qm(BFtz z0f>Wu@y`GLrxuDE7rqi2mzPtv`6Dj_gTpKqZZ_38me@`1hr)tcFH1Qi44(O({|Bu& V_~AM7JwN~e002ovPDHLkV1g+JVut_# literal 0 HcmV?d00001 diff --git a/packages/vue-cli-plugin-purgecss/package.json b/packages/vue-cli-plugin-purgecss/package.json new file mode 100644 index 00000000..6a4feb58 --- /dev/null +++ b/packages/vue-cli-plugin-purgecss/package.json @@ -0,0 +1,28 @@ +{ + "name": "@fullhuman/vue-cli-plugin-purgecss", + "version": "1.0.0", + "description": "vue-cli plugin to add PurgeCSS", + "author": "Ffloriel ", + "homepage": "https://purgecss.com", + "keywords": [ + "vue-cli", + "vue-cli-3", + "purgecss", + "plugin", + "remove", + "unused", + "css", + "optimization" + ], + "license": "MIT", + "publishConfig": { + "access": "public" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/FullHuman/purgecss.git" + }, + "bugs": { + "url": "https://github.com/FullHuman/purgecss/issues" + } +} From ef6f652bfca520269909ac035ef45bc99014942a Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Tue, 18 Feb 2020 06:55:34 +0000 Subject: [PATCH 05/35] build(deps): bump postcss from 7.0.26 to 7.0.27 Bumps [postcss](https://github.com/postcss/postcss) from 7.0.26 to 7.0.27. - [Release notes](https://github.com/postcss/postcss/releases) - [Changelog](https://github.com/postcss/postcss/blob/master/CHANGELOG.md) - [Commits](https://github.com/postcss/postcss/compare/7.0.26...7.0.27) Signed-off-by: dependabot-preview[bot] --- packages/postcss-purgecss/package.json | 2 +- packages/purgecss/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/postcss-purgecss/package.json b/packages/postcss-purgecss/package.json index ae154109..baa13653 100644 --- a/packages/postcss-purgecss/package.json +++ b/packages/postcss-purgecss/package.json @@ -26,7 +26,7 @@ "url": "https://github.com/FullHuman/purgecss/issues" }, "dependencies": { - "postcss": "7.0.26", + "postcss": "7.0.27", "purgecss": "^2.0.6" } } diff --git a/packages/purgecss/package.json b/packages/purgecss/package.json index 444ebbb8..c1f58f1a 100644 --- a/packages/purgecss/package.json +++ b/packages/purgecss/package.json @@ -41,7 +41,7 @@ "dependencies": { "commander": "^4.0.0", "glob": "^7.0.0", - "postcss": "7.0.26", + "postcss": "7.0.27", "postcss-selector-parser": "^6.0.2" }, "devDependencies": { From 12490a11df30d286578383538a4564f41acf0aee Mon Sep 17 00:00:00 2001 From: Ffloriel Date: Mon, 29 Jan 2018 22:59:26 +0000 Subject: [PATCH 06/35] Initial commit --- packages/grunt-purgecss/.gitignore | 59 ++++++++++++++++++++++++++++++ packages/grunt-purgecss/LICENSE | 21 +++++++++++ packages/grunt-purgecss/README.md | 2 + 3 files changed, 82 insertions(+) create mode 100644 packages/grunt-purgecss/.gitignore create mode 100644 packages/grunt-purgecss/LICENSE create mode 100644 packages/grunt-purgecss/README.md diff --git a/packages/grunt-purgecss/.gitignore b/packages/grunt-purgecss/.gitignore new file mode 100644 index 00000000..00cbbdf5 --- /dev/null +++ b/packages/grunt-purgecss/.gitignore @@ -0,0 +1,59 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# Typescript v1 declaration files +typings/ + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variables file +.env + diff --git a/packages/grunt-purgecss/LICENSE b/packages/grunt-purgecss/LICENSE new file mode 100644 index 00000000..07b13efd --- /dev/null +++ b/packages/grunt-purgecss/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2018 Full Human + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/packages/grunt-purgecss/README.md b/packages/grunt-purgecss/README.md new file mode 100644 index 00000000..26fbe3f0 --- /dev/null +++ b/packages/grunt-purgecss/README.md @@ -0,0 +1,2 @@ +# grunt-purgecss +Grunt plugin for purgecss From 5a2abe29e58aa3857cf36dc0a9b03cbf50cdf298 Mon Sep 17 00:00:00 2001 From: Ffloriel Date: Mon, 29 Jan 2018 23:08:45 +0000 Subject: [PATCH 07/35] Initial commit generated with grunt --- packages/grunt-purgecss/.gitignore | 2 + packages/grunt-purgecss/.jshintrc | 13 + packages/grunt-purgecss/Gruntfile.js | 65 + packages/grunt-purgecss/README.md | 89 +- packages/grunt-purgecss/package-lock.json | 3644 +++++++++++++++++ packages/grunt-purgecss/package.json | 41 + packages/grunt-purgecss/tasks/purgecss.js | 44 + .../test/expected/custom_options | 1 + .../test/expected/default_options | 1 + packages/grunt-purgecss/test/fixtures/123 | 1 + packages/grunt-purgecss/test/fixtures/testing | 1 + packages/grunt-purgecss/test/purgecss_test.js | 48 + 12 files changed, 3949 insertions(+), 1 deletion(-) create mode 100644 packages/grunt-purgecss/.jshintrc create mode 100644 packages/grunt-purgecss/Gruntfile.js create mode 100644 packages/grunt-purgecss/package-lock.json create mode 100644 packages/grunt-purgecss/package.json create mode 100644 packages/grunt-purgecss/tasks/purgecss.js create mode 100644 packages/grunt-purgecss/test/expected/custom_options create mode 100644 packages/grunt-purgecss/test/expected/default_options create mode 100644 packages/grunt-purgecss/test/fixtures/123 create mode 100644 packages/grunt-purgecss/test/fixtures/testing create mode 100644 packages/grunt-purgecss/test/purgecss_test.js diff --git a/packages/grunt-purgecss/.gitignore b/packages/grunt-purgecss/.gitignore index 00cbbdf5..0d3c8d52 100644 --- a/packages/grunt-purgecss/.gitignore +++ b/packages/grunt-purgecss/.gitignore @@ -1,3 +1,5 @@ +tmp + # Logs logs *.log diff --git a/packages/grunt-purgecss/.jshintrc b/packages/grunt-purgecss/.jshintrc new file mode 100644 index 00000000..f57a8ff4 --- /dev/null +++ b/packages/grunt-purgecss/.jshintrc @@ -0,0 +1,13 @@ +{ + "curly": true, + "eqeqeq": true, + "immed": true, + "latedef": true, + "newcap": true, + "noarg": true, + "sub": true, + "undef": true, + "boss": true, + "eqnull": true, + "node": true +} diff --git a/packages/grunt-purgecss/Gruntfile.js b/packages/grunt-purgecss/Gruntfile.js new file mode 100644 index 00000000..2c73b470 --- /dev/null +++ b/packages/grunt-purgecss/Gruntfile.js @@ -0,0 +1,65 @@ +'use strict'; + +module.exports = function(grunt) { + + // Project configuration. + grunt.initConfig({ + jshint: { + all: [ + 'Gruntfile.js', + 'tasks/*.js', + '<%= nodeunit.tests %>' + ], + options: { + jshintrc: '.jshintrc' + } + }, + + // Before generating any new files, remove any previously-created files. + clean: { + tests: ['tmp'] + }, + + // Configuration to be run (and then tested). + purgecss: { + default_options: { + options: { + }, + files: { + 'tmp/default_options': ['test/fixtures/testing', 'test/fixtures/123'] + } + }, + custom_options: { + options: { + separator: ': ', + punctuation: ' !!!' + }, + files: { + 'tmp/custom_options': ['test/fixtures/testing', 'test/fixtures/123'] + } + } + }, + + // Unit tests. + nodeunit: { + tests: ['test/*_test.js'] + } + + }); + + // Actually load this plugin's task(s). + grunt.loadTasks('tasks'); + + // These plugins provide necessary tasks. + grunt.loadNpmTasks('grunt-contrib-jshint'); + grunt.loadNpmTasks('grunt-contrib-clean'); + grunt.loadNpmTasks('grunt-contrib-nodeunit'); + + // Whenever the "test" task is run, first clean the "tmp" dir, then run this + // plugin's task(s), then test the result. + grunt.registerTask('test', ['clean', 'purgecss', 'nodeunit']); + + // By default, lint and run all tests. + grunt.registerTask('default', ['jshint', 'test']); + +}; diff --git a/packages/grunt-purgecss/README.md b/packages/grunt-purgecss/README.md index 26fbe3f0..f87c6ba3 100644 --- a/packages/grunt-purgecss/README.md +++ b/packages/grunt-purgecss/README.md @@ -1,2 +1,89 @@ # grunt-purgecss -Grunt plugin for purgecss + +> The best Grunt plugin ever. + +## Getting Started +This plugin requires Grunt `~0.4.5` + +If you haven't used [Grunt](http://gruntjs.com/) before, be sure to check out the [Getting Started](http://gruntjs.com/getting-started) guide, as it explains how to create a [Gruntfile](http://gruntjs.com/sample-gruntfile) as well as install and use Grunt plugins. Once you're familiar with that process, you may install this plugin with this command: + +```shell +npm install grunt-purgecss --save-dev +``` + +Once the plugin has been installed, it may be enabled inside your Gruntfile with this line of JavaScript: + +```js +grunt.loadNpmTasks('grunt-purgecss'); +``` + +## The "purgecss" task + +### Overview +In your project's Gruntfile, add a section named `purgecss` to the data object passed into `grunt.initConfig()`. + +```js +grunt.initConfig({ + purgecss: { + options: { + // Task-specific options go here. + }, + your_target: { + // Target-specific file lists and/or options go here. + }, + }, +}); +``` + +### Options + +#### options.separator +Type: `String` +Default value: `', '` + +A string value that is used to do something with whatever. + +#### options.punctuation +Type: `String` +Default value: `'.'` + +A string value that is used to do something else with whatever else. + +### Usage Examples + +#### Default Options +In this example, the default options are used to do something with whatever. So if the `testing` file has the content `Testing` and the `123` file had the content `1 2 3`, the generated result would be `Testing, 1 2 3.` + +```js +grunt.initConfig({ + purgecss: { + options: {}, + files: { + 'dest/default_options': ['src/testing', 'src/123'], + }, + }, +}); +``` + +#### Custom Options +In this example, custom options are used to do something else with whatever else. So if the `testing` file has the content `Testing` and the `123` file had the content `1 2 3`, the generated result in this case would be `Testing: 1 2 3 !!!` + +```js +grunt.initConfig({ + purgecss: { + options: { + separator: ': ', + punctuation: ' !!!', + }, + files: { + 'dest/default_options': ['src/testing', 'src/123'], + }, + }, +}); +``` + +## Contributing +In lieu of a formal styleguide, take care to maintain the existing coding style. Add unit tests for any new or changed functionality. Lint and test your code using [Grunt](http://gruntjs.com/). + +## Release History +_(Nothing yet)_ diff --git a/packages/grunt-purgecss/package-lock.json b/packages/grunt-purgecss/package-lock.json new file mode 100644 index 00000000..902f740d --- /dev/null +++ b/packages/grunt-purgecss/package-lock.json @@ -0,0 +1,3644 @@ +{ + "name": "grunt-purgecss", + "version": "0.19.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "argparse": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", + "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=", + "dev": true, + "requires": { + "sprintf-js": "1.0.3" + } + }, + "array-find-index": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", + "dev": true + }, + "asn1": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", + "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=", + "dev": true + }, + "assert-plus": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", + "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=", + "dev": true + }, + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "dev": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, + "aws-sign2": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", + "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=", + "dev": true + }, + "aws4": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", + "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=", + "dev": true + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "bcrypt-pbkdf": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", + "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", + "dev": true, + "optional": true, + "requires": { + "tweetnacl": "0.14.5" + } + }, + "bluebird": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", + "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==", + "dev": true + }, + "boom": { + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", + "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", + "dev": true, + "requires": { + "hoek": "2.16.3" + } + }, + "brace-expansion": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", + "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", + "requires": { + "balanced-match": "1.0.0", + "concat-map": "0.0.1" + } + }, + "builtin-modules": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", + "dev": true + }, + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=" + }, + "camelcase-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", + "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", + "dev": true, + "requires": { + "camelcase": "2.1.1", + "map-obj": "1.0.1" + }, + "dependencies": { + "camelcase": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", + "dev": true + } + } + }, + "caseless": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz", + "integrity": "sha1-cVuW6phBWTzDMGeSP17GDr2k99c=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } + }, + "clean-yaml-object": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/clean-yaml-object/-/clean-yaml-object-0.1.0.tgz", + "integrity": "sha1-Y/sRDcLOGoTcIfbZM0h20BCui2g=", + "dev": true + }, + "cli": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cli/-/cli-1.0.1.tgz", + "integrity": "sha1-IoF1NPJL+klQw01TLUjsvGIbjBQ=", + "dev": true, + "requires": { + "exit": "0.1.2", + "glob": "7.1.2" + }, + "dependencies": { + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "dev": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + } + } + }, + "cliui": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.0.0.tgz", + "integrity": "sha512-nY3W5Gu2racvdDk//ELReY+dHjb9PlIcVDFXP72nVIhq2Gy3LuVXYwJoPVudwQnv1shtohpgkdCKT2YaKY0CKw==", + "requires": { + "string-width": "2.1.1", + "strip-ansi": "4.0.0", + "wrap-ansi": "2.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "requires": { + "ansi-regex": "3.0.0" + } + } + } + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" + }, + "coffee-script": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.10.0.tgz", + "integrity": "sha1-EpOLz5vhlI+gBvkuDEyegXBRCMA=", + "dev": true + }, + "color-convert": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz", + "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "dev": true + }, + "colors": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", + "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", + "dev": true + }, + "combined-stream": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", + "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", + "dev": true, + "requires": { + "delayed-stream": "1.0.0" + } + }, + "commander": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.13.0.tgz", + "integrity": "sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA==", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "console-browserify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", + "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", + "dev": true, + "requires": { + "date-now": "0.1.4" + } + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "coveralls": { + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/coveralls/-/coveralls-2.13.3.tgz", + "integrity": "sha512-iiAmn+l1XqRwNLXhW8Rs5qHZRFMYp9ZIPjEOVRpC/c4so6Y/f4/lFi0FfR5B9cCqgyhkJ5cZmbvcVRfP8MHchw==", + "dev": true, + "requires": { + "js-yaml": "3.6.1", + "lcov-parse": "0.0.10", + "log-driver": "1.2.5", + "minimist": "1.2.0", + "request": "2.79.0" + }, + "dependencies": { + "js-yaml": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.6.1.tgz", + "integrity": "sha1-bl/mfYsgXOTSL60Ft3geja3MSzA=", + "dev": true, + "requires": { + "argparse": "1.0.9", + "esprima": "2.7.3" + } + } + } + }, + "cross-spawn": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-4.0.2.tgz", + "integrity": "sha1-e5JHYhwjrf3ThWAEqCPL45dCTUE=", + "dev": true, + "requires": { + "lru-cache": "4.1.1", + "which": "1.2.14" + } + }, + "cryptiles": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", + "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", + "dev": true, + "requires": { + "boom": "2.10.1" + } + }, + "currently-unhandled": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", + "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", + "dev": true, + "requires": { + "array-find-index": "1.0.2" + } + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, + "requires": { + "assert-plus": "1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + } + } + }, + "date-now": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", + "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", + "dev": true + }, + "dateformat": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz", + "integrity": "sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk=", + "dev": true, + "requires": { + "get-stdin": "4.0.1", + "meow": "3.7.0" + } + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" + }, + "deeper": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/deeper/-/deeper-2.1.0.tgz", + "integrity": "sha1-vFZOX3MXT98gHgiwADDooU2nQ2g=", + "dev": true + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true + }, + "diff": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-1.4.0.tgz", + "integrity": "sha1-fyjS657nsVqX79ic5j3P2qPMur8=", + "dev": true + }, + "dom-serializer": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", + "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", + "dev": true, + "requires": { + "domelementtype": "1.1.3", + "entities": "1.1.1" + }, + "dependencies": { + "domelementtype": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", + "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=", + "dev": true + }, + "entities": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz", + "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=", + "dev": true + } + } + }, + "domelementtype": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz", + "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=", + "dev": true + }, + "domhandler": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.3.0.tgz", + "integrity": "sha1-LeWaCCLVAn+r/28DLCsloqir5zg=", + "dev": true, + "requires": { + "domelementtype": "1.3.0" + } + }, + "domutils": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", + "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", + "dev": true, + "requires": { + "dom-serializer": "0.1.0", + "domelementtype": "1.3.0" + } + }, + "dot-prop": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", + "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==", + "requires": { + "is-obj": "1.0.1" + } + }, + "ecc-jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", + "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", + "dev": true, + "optional": true, + "requires": { + "jsbn": "0.1.1" + } + }, + "entities": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz", + "integrity": "sha1-sph6o4ITR/zeZCsk/fyeT7cSvyY=", + "dev": true + }, + "error-ex": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", + "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", + "dev": true, + "requires": { + "is-arrayish": "0.2.1" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "esprima": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", + "dev": true + }, + "eventemitter2": { + "version": "0.4.14", + "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz", + "integrity": "sha1-j2G3XN4BKy6esoTUVFWDtWQ7Yas=", + "dev": true + }, + "events-to-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/events-to-array/-/events-to-array-1.1.2.tgz", + "integrity": "sha1-LUH1Y+H+QA7Uli/hpNXGp1Od9/Y=", + "dev": true + }, + "execa": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", + "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "requires": { + "cross-spawn": "5.1.0", + "get-stream": "3.0.0", + "is-stream": "1.1.0", + "npm-run-path": "2.0.2", + "p-finally": "1.0.0", + "signal-exit": "3.0.2", + "strip-eof": "1.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "requires": { + "lru-cache": "4.1.1", + "shebang-command": "1.2.0", + "which": "1.3.0" + } + }, + "lru-cache": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz", + "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==", + "requires": { + "pseudomap": "1.0.2", + "yallist": "2.1.2" + } + }, + "which": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", + "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", + "requires": { + "isexe": "2.0.0" + } + } + } + }, + "exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", + "dev": true + }, + "extend": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", + "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=", + "dev": true + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "requires": { + "locate-path": "2.0.0" + } + }, + "findup-sync": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.3.0.tgz", + "integrity": "sha1-N5MKpdgWt3fANEXhlmzGeQpMCxY=", + "dev": true, + "requires": { + "glob": "5.0.15" + }, + "dependencies": { + "glob": { + "version": "5.0.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", + "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", + "dev": true, + "requires": { + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + } + } + }, + "foreground-child": { + "version": "1.5.6", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-1.5.6.tgz", + "integrity": "sha1-T9ca0t/elnibmApcCilZN8svXOk=", + "dev": true, + "requires": { + "cross-spawn": "4.0.2", + "signal-exit": "3.0.2" + } + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true + }, + "form-data": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", + "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", + "dev": true, + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.5", + "mime-types": "2.1.17" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "generate-function": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz", + "integrity": "sha1-aFj+fAlpt9TpCTM3ZHrHn2DfvnQ=", + "dev": true + }, + "generate-object-property": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", + "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=", + "dev": true, + "requires": { + "is-property": "1.0.2" + } + }, + "get-caller-file": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz", + "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=" + }, + "get-stdin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", + "dev": true + }, + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" + }, + "getobject": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/getobject/-/getobject-0.1.0.tgz", + "integrity": "sha1-BHpEl4n6Fg0Bj1SG7ZEyC27HiFw=", + "dev": true + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "requires": { + "assert-plus": "1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + } + } + }, + "glob": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.0.6.tgz", + "integrity": "sha1-IRuvr0nlJbjNkyYNFKsTYVKz9Xo=", + "dev": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true + }, + "grunt": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/grunt/-/grunt-1.0.1.tgz", + "integrity": "sha1-6HeHZOlEsY8yuw8QuQeEdcnftWs=", + "dev": true, + "requires": { + "coffee-script": "1.10.0", + "dateformat": "1.0.12", + "eventemitter2": "0.4.14", + "exit": "0.1.2", + "findup-sync": "0.3.0", + "glob": "7.0.6", + "grunt-cli": "1.2.0", + "grunt-known-options": "1.1.0", + "grunt-legacy-log": "1.0.0", + "grunt-legacy-util": "1.0.0", + "iconv-lite": "0.4.19", + "js-yaml": "3.5.5", + "minimatch": "3.0.4", + "nopt": "3.0.6", + "path-is-absolute": "1.0.1", + "rimraf": "2.2.8" + }, + "dependencies": { + "grunt-cli": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/grunt-cli/-/grunt-cli-1.2.0.tgz", + "integrity": "sha1-VisRnrsGndtGSs4oRVAb6Xs1tqg=", + "dev": true, + "requires": { + "findup-sync": "0.3.0", + "grunt-known-options": "1.1.0", + "nopt": "3.0.6", + "resolve": "1.1.7" + } + } + } + }, + "grunt-contrib-clean": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/grunt-contrib-clean/-/grunt-contrib-clean-1.1.0.tgz", + "integrity": "sha1-Vkq/LQN4qYOhW54/MO51tzjEBjg=", + "dev": true, + "requires": { + "async": "1.5.2", + "rimraf": "2.6.2" + }, + "dependencies": { + "rimraf": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", + "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", + "dev": true, + "requires": { + "glob": "7.0.6" + } + } + } + }, + "grunt-contrib-jshint": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/grunt-contrib-jshint/-/grunt-contrib-jshint-1.1.0.tgz", + "integrity": "sha1-Np2QmyWTxA6L55lAshNAhQx5Oaw=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "hooker": "0.2.3", + "jshint": "2.9.5" + } + }, + "grunt-contrib-nodeunit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/grunt-contrib-nodeunit/-/grunt-contrib-nodeunit-1.0.0.tgz", + "integrity": "sha1-b0iFVe2cDIR4hUEDxx7bH8RoXwU=", + "dev": true, + "requires": { + "nodeunit": "0.9.5" + } + }, + "grunt-known-options": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/grunt-known-options/-/grunt-known-options-1.1.0.tgz", + "integrity": "sha1-pCdO6zL6dl2lp6OxcSYXzjsUQUk=", + "dev": true + }, + "grunt-legacy-log": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-1.0.0.tgz", + "integrity": "sha1-+4bxgJhHvAfcR4Q/ns1srLYt8tU=", + "dev": true, + "requires": { + "colors": "1.1.2", + "grunt-legacy-log-utils": "1.0.0", + "hooker": "0.2.3", + "lodash": "3.10.1", + "underscore.string": "3.2.3" + } + }, + "grunt-legacy-log-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/grunt-legacy-log-utils/-/grunt-legacy-log-utils-1.0.0.tgz", + "integrity": "sha1-p7ji0Ps1taUPSvmG/BEnSevJbz0=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "lodash": "4.3.0" + }, + "dependencies": { + "lodash": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.3.0.tgz", + "integrity": "sha1-79nEpuxT87BUEkKZFcPkgk5NJaQ=", + "dev": true + } + } + }, + "grunt-legacy-util": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-1.0.0.tgz", + "integrity": "sha1-OGqnjcbtUJhsKxiVcmWxtIq7m4Y=", + "dev": true, + "requires": { + "async": "1.5.2", + "exit": "0.1.2", + "getobject": "0.1.0", + "hooker": "0.2.3", + "lodash": "4.3.0", + "underscore.string": "3.2.3", + "which": "1.2.14" + }, + "dependencies": { + "lodash": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.3.0.tgz", + "integrity": "sha1-79nEpuxT87BUEkKZFcPkgk5NJaQ=", + "dev": true + } + } + }, + "har-validator": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz", + "integrity": "sha1-zcvAgYgmWtEZtqWnyKtw7s+10n0=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "commander": "2.13.0", + "is-my-json-valid": "2.17.1", + "pinkie-promise": "2.0.1" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "has-flag": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=" + }, + "hawk": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", + "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", + "dev": true, + "requires": { + "boom": "2.10.1", + "cryptiles": "2.0.5", + "hoek": "2.16.3", + "sntp": "1.0.9" + } + }, + "hoek": { + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", + "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", + "dev": true + }, + "hooker": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz", + "integrity": "sha1-uDT3I8xKJCqmWWNFnfbZhMXT2Vk=", + "dev": true + }, + "hosted-git-info": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.5.0.tgz", + "integrity": "sha512-pNgbURSuab90KbTqvRPsseaTxOJCZBD0a7t+haSN33piP9cCM4l0CqdzAif2hUqm716UovKB2ROmiabGAKVXyg==", + "dev": true + }, + "htmlparser2": { + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz", + "integrity": "sha1-mWwosZFRaovoZQGn15dX5ccMEGg=", + "dev": true, + "requires": { + "domelementtype": "1.3.0", + "domhandler": "2.3.0", + "domutils": "1.5.1", + "entities": "1.0.0", + "readable-stream": "1.1.14" + } + }, + "http-signature": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", + "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", + "dev": true, + "requires": { + "assert-plus": "0.2.0", + "jsprim": "1.4.1", + "sshpk": "1.13.1" + } + }, + "iconv-lite": { + "version": "0.4.19", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", + "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==", + "dev": true + }, + "indent-string": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", + "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", + "dev": true, + "requires": { + "repeating": "2.0.1" + } + }, + "indexes-of": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", + "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=" + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "invert-kv": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=" + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-builtin-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", + "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", + "dev": true, + "requires": { + "builtin-modules": "1.1.1" + } + }, + "is-finite": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", + "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + }, + "is-my-json-valid": { + "version": "2.17.1", + "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.17.1.tgz", + "integrity": "sha512-Q2khNw+oBlWuaYvEEHtKSw/pCxD2L5Rc1C+UQme9X6JdRDh7m5D7HkozA0qa3DUkQ6VzCnEm8mVIQPyIRkI5sQ==", + "dev": true, + "requires": { + "generate-function": "2.0.0", + "generate-object-property": "1.2.0", + "jsonpointer": "4.0.1", + "xtend": "4.0.1" + } + }, + "is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=" + }, + "is-property": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", + "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=", + "dev": true + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "dev": true + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true + }, + "js-yaml": { + "version": "3.5.5", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.5.5.tgz", + "integrity": "sha1-A3fDgBfKvHMisNH7zSWkkWQfL74=", + "dev": true, + "requires": { + "argparse": "1.0.9", + "esprima": "2.7.3" + } + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true, + "optional": true + }, + "jshint": { + "version": "2.9.5", + "resolved": "https://registry.npmjs.org/jshint/-/jshint-2.9.5.tgz", + "integrity": "sha1-HnJSkVzmgbQIJ+4UJIxG006apiw=", + "dev": true, + "requires": { + "cli": "1.0.1", + "console-browserify": "1.1.0", + "exit": "0.1.2", + "htmlparser2": "3.8.3", + "lodash": "3.7.0", + "minimatch": "3.0.4", + "shelljs": "0.3.0", + "strip-json-comments": "1.0.4" + }, + "dependencies": { + "lodash": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.7.0.tgz", + "integrity": "sha1-Nni9irmVBXwHreg27S7wh9qBHUU=", + "dev": true + } + } + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "dev": true + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true + }, + "jsonpointer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz", + "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk=", + "dev": true + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + } + } + }, + "lcid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "requires": { + "invert-kv": "1.0.0" + } + }, + "lcov-parse": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/lcov-parse/-/lcov-parse-0.0.10.tgz", + "integrity": "sha1-GwuP+ayceIklBYK3C3ExXZ2m2aM=", + "dev": true + }, + "load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "parse-json": "2.2.0", + "pify": "2.3.0", + "pinkie-promise": "2.0.1", + "strip-bom": "2.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "requires": { + "p-locate": "2.0.0", + "path-exists": "3.0.0" + } + }, + "lodash": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", + "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", + "dev": true + }, + "log-driver": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/log-driver/-/log-driver-1.2.5.tgz", + "integrity": "sha1-euTsJXMC/XkNVXyxDJcQDYV7AFY=", + "dev": true + }, + "loud-rejection": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", + "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", + "dev": true, + "requires": { + "currently-unhandled": "0.4.1", + "signal-exit": "3.0.2" + } + }, + "lru-cache": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz", + "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==", + "dev": true, + "requires": { + "pseudomap": "1.0.2", + "yallist": "2.1.2" + } + }, + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "dev": true + }, + "mem": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", + "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", + "requires": { + "mimic-fn": "1.1.0" + } + }, + "meow": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", + "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", + "dev": true, + "requires": { + "camelcase-keys": "2.1.0", + "decamelize": "1.2.0", + "loud-rejection": "1.6.0", + "map-obj": "1.0.1", + "minimist": "1.2.0", + "normalize-package-data": "2.4.0", + "object-assign": "4.1.1", + "read-pkg-up": "1.0.1", + "redent": "1.0.0", + "trim-newlines": "1.0.0" + } + }, + "mime-db": { + "version": "1.30.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz", + "integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE=", + "dev": true + }, + "mime-types": { + "version": "2.1.17", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz", + "integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=", + "dev": true, + "requires": { + "mime-db": "1.30.0" + } + }, + "mimic-fn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.1.0.tgz", + "integrity": "sha1-5md4PZLonb00KBi1IwudYqZyrRg=" + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "1.1.8" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "nodeunit": { + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/nodeunit/-/nodeunit-0.9.5.tgz", + "integrity": "sha1-C2MjaAB9lGUczwoYmZgHmC8HOGY=", + "dev": true, + "requires": { + "tap": "7.1.2" + } + }, + "nopt": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", + "dev": true, + "requires": { + "abbrev": "1.1.1" + } + }, + "normalize-package-data": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", + "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", + "dev": true, + "requires": { + "hosted-git-info": "2.5.0", + "is-builtin-module": "1.0.0", + "semver": "5.5.0", + "validate-npm-package-license": "3.0.1" + } + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "requires": { + "path-key": "2.0.1" + } + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" + }, + "nyc": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/nyc/-/nyc-7.1.0.tgz", + "integrity": "sha1-jhSXHzoV0au+x6xhDvVMuInp/7Q=", + "dev": true, + "requires": { + "arrify": "1.0.1", + "caching-transform": "1.0.1", + "convert-source-map": "1.3.0", + "default-require-extensions": "1.0.0", + "find-cache-dir": "0.1.1", + "find-up": "1.1.2", + "foreground-child": "1.5.3", + "glob": "7.0.5", + "istanbul-lib-coverage": "1.0.0-alpha.4", + "istanbul-lib-hook": "1.0.0-alpha.4", + "istanbul-lib-instrument": "1.1.0-alpha.4", + "istanbul-lib-report": "1.0.0-alpha.3", + "istanbul-lib-source-maps": "1.0.0-alpha.10", + "istanbul-reports": "1.0.0-alpha.8", + "md5-hex": "1.3.0", + "micromatch": "2.3.11", + "mkdirp": "0.5.1", + "pkg-up": "1.0.0", + "resolve-from": "2.0.0", + "rimraf": "2.5.4", + "signal-exit": "3.0.0", + "spawn-wrap": "1.2.4", + "test-exclude": "1.1.0", + "yargs": "4.8.1", + "yargs-parser": "2.4.1" + }, + "dependencies": { + "align-text": { + "version": "0.1.4", + "bundled": true, + "dev": true, + "requires": { + "kind-of": "3.0.3", + "longest": "1.0.1", + "repeat-string": "1.5.4" + } + }, + "amdefine": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "ansi-regex": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "bundled": true, + "dev": true + }, + "append-transform": { + "version": "0.3.0", + "bundled": true, + "dev": true + }, + "arr-diff": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "requires": { + "arr-flatten": "1.0.1" + } + }, + "arr-flatten": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "array-unique": { + "version": "0.2.1", + "bundled": true, + "dev": true + }, + "arrify": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "async": { + "version": "1.5.2", + "bundled": true, + "dev": true + }, + "babel-code-frame": { + "version": "6.11.0", + "bundled": true, + "dev": true, + "requires": { + "babel-runtime": "6.9.2", + "chalk": "1.1.3", + "esutils": "2.0.2", + "js-tokens": "2.0.0" + } + }, + "babel-generator": { + "version": "6.11.4", + "bundled": true, + "dev": true, + "requires": { + "babel-messages": "6.8.0", + "babel-runtime": "6.9.2", + "babel-types": "6.11.1", + "detect-indent": "3.0.1", + "lodash": "4.13.1", + "source-map": "0.5.6" + } + }, + "babel-messages": { + "version": "6.8.0", + "bundled": true, + "dev": true, + "requires": { + "babel-runtime": "6.9.2" + } + }, + "babel-runtime": { + "version": "6.9.2", + "bundled": true, + "dev": true, + "requires": { + "core-js": "2.4.1", + "regenerator-runtime": "0.9.5" + } + }, + "babel-template": { + "version": "6.9.0", + "bundled": true, + "dev": true, + "requires": { + "babel-runtime": "6.9.2", + "babel-traverse": "6.11.4", + "babel-types": "6.11.1", + "babylon": "6.8.4", + "lodash": "4.13.1" + } + }, + "babel-traverse": { + "version": "6.11.4", + "bundled": true, + "dev": true, + "requires": { + "babel-code-frame": "6.11.0", + "babel-messages": "6.8.0", + "babel-runtime": "6.9.2", + "babel-types": "6.11.1", + "babylon": "6.8.4", + "debug": "2.2.0", + "globals": "8.18.0", + "invariant": "2.2.1", + "lodash": "4.13.1" + } + }, + "babel-types": { + "version": "6.11.1", + "bundled": true, + "dev": true, + "requires": { + "babel-runtime": "6.9.2", + "babel-traverse": "6.11.4", + "esutils": "2.0.2", + "lodash": "4.13.1", + "to-fast-properties": "1.0.2" + } + }, + "babylon": { + "version": "6.8.4", + "bundled": true, + "dev": true, + "requires": { + "babel-runtime": "6.9.2" + } + }, + "balanced-match": { + "version": "0.4.2", + "bundled": true, + "dev": true + }, + "brace-expansion": { + "version": "1.1.6", + "bundled": true, + "dev": true, + "requires": { + "balanced-match": "0.4.2", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "1.8.5", + "bundled": true, + "dev": true, + "requires": { + "expand-range": "1.8.2", + "preserve": "0.2.0", + "repeat-element": "1.1.2" + } + }, + "builtin-modules": { + "version": "1.1.1", + "bundled": true, + "dev": true + }, + "caching-transform": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "requires": { + "md5-hex": "1.3.0", + "mkdirp": "0.5.1", + "write-file-atomic": "1.1.4" + } + }, + "camelcase": { + "version": "1.2.1", + "bundled": true, + "dev": true, + "optional": true + }, + "center-align": { + "version": "0.1.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "align-text": "0.1.4", + "lazy-cache": "1.0.4" + } + }, + "chalk": { + "version": "1.1.3", + "bundled": true, + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } + }, + "cliui": { + "version": "2.1.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "center-align": "0.1.3", + "right-align": "0.1.3", + "wordwrap": "0.0.2" + }, + "dependencies": { + "wordwrap": { + "version": "0.0.2", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "code-point-at": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "number-is-nan": "1.0.0" + } + }, + "commondir": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true, + "dev": true + }, + "convert-source-map": { + "version": "1.3.0", + "bundled": true, + "dev": true + }, + "core-js": { + "version": "2.4.1", + "bundled": true, + "dev": true + }, + "cross-spawn": { + "version": "4.0.0", + "bundled": true, + "dev": true, + "requires": { + "lru-cache": "4.0.1", + "which": "1.2.10" + } + }, + "debug": { + "version": "2.2.0", + "bundled": true, + "dev": true, + "requires": { + "ms": "0.7.1" + } + }, + "decamelize": { + "version": "1.2.0", + "bundled": true, + "dev": true + }, + "default-require-extensions": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "strip-bom": "2.0.0" + } + }, + "detect-indent": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "requires": { + "get-stdin": "4.0.1", + "minimist": "1.2.0", + "repeating": "1.1.3" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "bundled": true, + "dev": true + } + } + }, + "error-ex": { + "version": "1.3.0", + "bundled": true, + "dev": true, + "requires": { + "is-arrayish": "0.2.1" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "bundled": true, + "dev": true + }, + "esutils": { + "version": "2.0.2", + "bundled": true, + "dev": true + }, + "expand-brackets": { + "version": "0.1.5", + "bundled": true, + "dev": true, + "requires": { + "is-posix-bracket": "0.1.1" + } + }, + "expand-range": { + "version": "1.8.2", + "bundled": true, + "dev": true, + "requires": { + "fill-range": "2.2.3" + } + }, + "extglob": { + "version": "0.3.2", + "bundled": true, + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } + }, + "filename-regex": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "fill-range": { + "version": "2.2.3", + "bundled": true, + "dev": true, + "requires": { + "is-number": "2.1.0", + "isobject": "2.1.0", + "randomatic": "1.1.5", + "repeat-element": "1.1.2", + "repeat-string": "1.5.4" + } + }, + "find-cache-dir": { + "version": "0.1.1", + "bundled": true, + "dev": true, + "requires": { + "commondir": "1.0.1", + "mkdirp": "0.5.1", + "pkg-dir": "1.0.0" + } + }, + "find-up": { + "version": "1.1.2", + "bundled": true, + "dev": true, + "requires": { + "path-exists": "2.1.0", + "pinkie-promise": "2.0.1" + } + }, + "for-in": { + "version": "0.1.5", + "bundled": true, + "dev": true + }, + "for-own": { + "version": "0.1.4", + "bundled": true, + "dev": true, + "requires": { + "for-in": "0.1.5" + } + }, + "foreground-child": { + "version": "1.5.3", + "bundled": true, + "dev": true, + "requires": { + "cross-spawn": "4.0.0", + "signal-exit": "3.0.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "get-caller-file": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "get-stdin": { + "version": "4.0.1", + "bundled": true, + "dev": true + }, + "glob": { + "version": "7.0.5", + "bundled": true, + "dev": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.5", + "inherits": "2.0.1", + "minimatch": "3.0.2", + "once": "1.3.3", + "path-is-absolute": "1.0.0" + } + }, + "glob-base": { + "version": "0.3.0", + "bundled": true, + "dev": true, + "requires": { + "glob-parent": "2.0.0", + "is-glob": "2.0.1" + } + }, + "glob-parent": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "requires": { + "is-glob": "2.0.1" + } + }, + "globals": { + "version": "8.18.0", + "bundled": true, + "dev": true + }, + "graceful-fs": { + "version": "4.1.4", + "bundled": true, + "dev": true + }, + "handlebars": { + "version": "4.0.5", + "bundled": true, + "dev": true, + "requires": { + "async": "1.5.2", + "optimist": "0.6.1", + "source-map": "0.4.4", + "uglify-js": "2.7.0" + }, + "dependencies": { + "source-map": { + "version": "0.4.4", + "bundled": true, + "dev": true, + "requires": { + "amdefine": "1.0.0" + } + } + } + }, + "has-ansi": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "requires": { + "ansi-regex": "2.0.0" + } + }, + "has-flag": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "hosted-git-info": { + "version": "2.1.5", + "bundled": true, + "dev": true + }, + "imurmurhash": { + "version": "0.1.4", + "bundled": true, + "dev": true + }, + "inflight": { + "version": "1.0.5", + "bundled": true, + "dev": true, + "requires": { + "once": "1.3.3", + "wrappy": "1.0.2" + } + }, + "inherits": { + "version": "2.0.1", + "bundled": true, + "dev": true + }, + "invariant": { + "version": "2.2.1", + "bundled": true, + "dev": true, + "requires": { + "loose-envify": "1.2.0" + } + }, + "invert-kv": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "is-arrayish": { + "version": "0.2.1", + "bundled": true, + "dev": true + }, + "is-buffer": { + "version": "1.1.3", + "bundled": true, + "dev": true + }, + "is-builtin-module": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "builtin-modules": "1.1.1" + } + }, + "is-dotfile": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "is-equal-shallow": { + "version": "0.1.3", + "bundled": true, + "dev": true, + "requires": { + "is-primitive": "2.0.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "bundled": true, + "dev": true + }, + "is-extglob": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "is-finite": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "requires": { + "number-is-nan": "1.0.0" + } + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "number-is-nan": "1.0.0" + } + }, + "is-glob": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } + }, + "is-number": { + "version": "2.1.0", + "bundled": true, + "dev": true, + "requires": { + "kind-of": "3.0.3" + } + }, + "is-posix-bracket": { + "version": "0.1.1", + "bundled": true, + "dev": true + }, + "is-primitive": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "is-utf8": { + "version": "0.2.1", + "bundled": true, + "dev": true + }, + "isarray": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "isexe": { + "version": "1.1.2", + "bundled": true, + "dev": true + }, + "isobject": { + "version": "2.1.0", + "bundled": true, + "dev": true, + "requires": { + "isarray": "1.0.0" + } + }, + "istanbul-lib-coverage": { + "version": "1.0.0-alpha.4", + "bundled": true, + "dev": true + }, + "istanbul-lib-hook": { + "version": "1.0.0-alpha.4", + "bundled": true, + "dev": true, + "requires": { + "append-transform": "0.3.0" + } + }, + "istanbul-lib-instrument": { + "version": "1.1.0-alpha.4", + "bundled": true, + "dev": true, + "requires": { + "babel-generator": "6.11.4", + "babel-template": "6.9.0", + "babel-traverse": "6.11.4", + "babel-types": "6.11.1", + "babylon": "6.8.4", + "istanbul-lib-coverage": "1.0.0-alpha.4" + } + }, + "istanbul-lib-report": { + "version": "1.0.0-alpha.3", + "bundled": true, + "dev": true, + "requires": { + "async": "1.5.2", + "istanbul-lib-coverage": "1.0.0-alpha.4", + "mkdirp": "0.5.1", + "path-parse": "1.0.5", + "rimraf": "2.5.4", + "supports-color": "3.1.2" + }, + "dependencies": { + "supports-color": { + "version": "3.1.2", + "bundled": true, + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "istanbul-lib-source-maps": { + "version": "1.0.0-alpha.10", + "bundled": true, + "dev": true, + "requires": { + "istanbul-lib-coverage": "1.0.0-alpha.4", + "mkdirp": "0.5.1", + "rimraf": "2.5.4", + "source-map": "0.5.6" + } + }, + "istanbul-reports": { + "version": "1.0.0-alpha.8", + "bundled": true, + "dev": true, + "requires": { + "handlebars": "4.0.5" + } + }, + "js-tokens": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "kind-of": { + "version": "3.0.3", + "bundled": true, + "dev": true, + "requires": { + "is-buffer": "1.1.3" + } + }, + "lazy-cache": { + "version": "1.0.4", + "bundled": true, + "dev": true, + "optional": true + }, + "lcid": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "invert-kv": "1.0.0" + } + }, + "load-json-file": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "requires": { + "graceful-fs": "4.1.4", + "parse-json": "2.2.0", + "pify": "2.3.0", + "pinkie-promise": "2.0.1", + "strip-bom": "2.0.0" + } + }, + "lodash": { + "version": "4.13.1", + "bundled": true, + "dev": true + }, + "lodash.assign": { + "version": "4.0.9", + "bundled": true, + "dev": true, + "requires": { + "lodash.keys": "4.0.7", + "lodash.rest": "4.0.3" + } + }, + "lodash.keys": { + "version": "4.0.7", + "bundled": true, + "dev": true + }, + "lodash.rest": { + "version": "4.0.3", + "bundled": true, + "dev": true + }, + "longest": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "loose-envify": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "requires": { + "js-tokens": "1.0.3" + }, + "dependencies": { + "js-tokens": { + "version": "1.0.3", + "bundled": true, + "dev": true + } + } + }, + "lru-cache": { + "version": "4.0.1", + "bundled": true, + "dev": true, + "requires": { + "pseudomap": "1.0.2", + "yallist": "2.0.0" + } + }, + "md5-hex": { + "version": "1.3.0", + "bundled": true, + "dev": true, + "requires": { + "md5-o-matic": "0.1.1" + } + }, + "md5-o-matic": { + "version": "0.1.1", + "bundled": true, + "dev": true + }, + "micromatch": { + "version": "2.3.11", + "bundled": true, + "dev": true, + "requires": { + "arr-diff": "2.0.0", + "array-unique": "0.2.1", + "braces": "1.8.5", + "expand-brackets": "0.1.5", + "extglob": "0.3.2", + "filename-regex": "2.0.0", + "is-extglob": "1.0.0", + "is-glob": "2.0.1", + "kind-of": "3.0.3", + "normalize-path": "2.0.1", + "object.omit": "2.0.0", + "parse-glob": "3.0.4", + "regex-cache": "0.4.3" + } + }, + "minimatch": { + "version": "3.0.2", + "bundled": true, + "dev": true, + "requires": { + "brace-expansion": "1.1.6" + } + }, + "minimist": { + "version": "0.0.8", + "bundled": true, + "dev": true + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "0.7.1", + "bundled": true, + "dev": true + }, + "normalize-package-data": { + "version": "2.3.5", + "bundled": true, + "dev": true, + "requires": { + "hosted-git-info": "2.1.5", + "is-builtin-module": "1.0.0", + "semver": "5.3.0", + "validate-npm-package-license": "3.0.1" + } + }, + "normalize-path": { + "version": "2.0.1", + "bundled": true, + "dev": true + }, + "number-is-nan": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "object.omit": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "requires": { + "for-own": "0.1.4", + "is-extendable": "0.1.1" + } + }, + "once": { + "version": "1.3.3", + "bundled": true, + "dev": true, + "requires": { + "wrappy": "1.0.2" + } + }, + "optimist": { + "version": "0.6.1", + "bundled": true, + "dev": true, + "requires": { + "minimist": "0.0.8", + "wordwrap": "0.0.3" + } + }, + "os-homedir": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "os-locale": { + "version": "1.4.0", + "bundled": true, + "dev": true, + "requires": { + "lcid": "1.0.0" + } + }, + "parse-glob": { + "version": "3.0.4", + "bundled": true, + "dev": true, + "requires": { + "glob-base": "0.3.0", + "is-dotfile": "1.0.2", + "is-extglob": "1.0.0", + "is-glob": "2.0.1" + } + }, + "parse-json": { + "version": "2.2.0", + "bundled": true, + "dev": true, + "requires": { + "error-ex": "1.3.0" + } + }, + "path-exists": { + "version": "2.1.0", + "bundled": true, + "dev": true, + "requires": { + "pinkie-promise": "2.0.1" + } + }, + "path-is-absolute": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "path-parse": { + "version": "1.0.5", + "bundled": true, + "dev": true + }, + "path-type": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "requires": { + "graceful-fs": "4.1.4", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" + } + }, + "pify": { + "version": "2.3.0", + "bundled": true, + "dev": true + }, + "pinkie": { + "version": "2.0.4", + "bundled": true, + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "requires": { + "pinkie": "2.0.4" + } + }, + "pkg-dir": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "find-up": "1.1.2" + } + }, + "pkg-up": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "find-up": "1.1.2" + } + }, + "preserve": { + "version": "0.2.0", + "bundled": true, + "dev": true + }, + "pseudomap": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "randomatic": { + "version": "1.1.5", + "bundled": true, + "dev": true, + "requires": { + "is-number": "2.1.0", + "kind-of": "3.0.3" + } + }, + "read-pkg": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "requires": { + "load-json-file": "1.1.0", + "normalize-package-data": "2.3.5", + "path-type": "1.1.0" + } + }, + "read-pkg-up": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "requires": { + "find-up": "1.1.2", + "read-pkg": "1.1.0" + } + }, + "regenerator-runtime": { + "version": "0.9.5", + "bundled": true, + "dev": true + }, + "regex-cache": { + "version": "0.4.3", + "bundled": true, + "dev": true, + "requires": { + "is-equal-shallow": "0.1.3", + "is-primitive": "2.0.0" + } + }, + "repeat-element": { + "version": "1.1.2", + "bundled": true, + "dev": true + }, + "repeat-string": { + "version": "1.5.4", + "bundled": true, + "dev": true + }, + "repeating": { + "version": "1.1.3", + "bundled": true, + "dev": true, + "requires": { + "is-finite": "1.0.1" + } + }, + "require-directory": { + "version": "2.1.1", + "bundled": true, + "dev": true + }, + "require-main-filename": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "resolve-from": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "right-align": { + "version": "0.1.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "align-text": "0.1.4" + } + }, + "rimraf": { + "version": "2.5.4", + "bundled": true, + "dev": true, + "requires": { + "glob": "7.0.5" + } + }, + "semver": { + "version": "5.3.0", + "bundled": true, + "dev": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "signal-exit": { + "version": "3.0.0", + "bundled": true, + "dev": true + }, + "slide": { + "version": "1.1.6", + "bundled": true, + "dev": true + }, + "source-map": { + "version": "0.5.6", + "bundled": true, + "dev": true + }, + "spawn-wrap": { + "version": "1.2.4", + "bundled": true, + "dev": true, + "requires": { + "foreground-child": "1.5.3", + "mkdirp": "0.5.1", + "os-homedir": "1.0.1", + "rimraf": "2.5.4", + "signal-exit": "2.1.2", + "which": "1.2.10" + }, + "dependencies": { + "signal-exit": { + "version": "2.1.2", + "bundled": true, + "dev": true + } + } + }, + "spdx-correct": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "requires": { + "spdx-license-ids": "1.2.1" + } + }, + "spdx-exceptions": { + "version": "1.0.5", + "bundled": true, + "dev": true + }, + "spdx-expression-parse": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "requires": { + "spdx-exceptions": "1.0.5", + "spdx-license-ids": "1.2.1" + } + }, + "spdx-license-ids": { + "version": "1.2.1", + "bundled": true, + "dev": true + }, + "string-width": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "requires": { + "code-point-at": "1.0.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "requires": { + "ansi-regex": "2.0.0" + } + }, + "strip-bom": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "requires": { + "is-utf8": "0.2.1" + } + }, + "supports-color": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "test-exclude": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "requires": { + "arrify": "1.0.1", + "lodash.assign": "4.0.9", + "micromatch": "2.3.11", + "read-pkg-up": "1.0.1", + "require-main-filename": "1.0.1" + } + }, + "to-fast-properties": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "uglify-js": { + "version": "2.7.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "async": "0.2.10", + "source-map": "0.5.6", + "uglify-to-browserify": "1.0.2", + "yargs": "3.10.0" + }, + "dependencies": { + "async": { + "version": "0.2.10", + "bundled": true, + "dev": true, + "optional": true + }, + "yargs": { + "version": "3.10.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "camelcase": "1.2.1", + "cliui": "2.1.0", + "decamelize": "1.2.0", + "window-size": "0.1.0" + } + } + } + }, + "uglify-to-browserify": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "validate-npm-package-license": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "requires": { + "spdx-correct": "1.0.2", + "spdx-expression-parse": "1.0.2" + } + }, + "which": { + "version": "1.2.10", + "bundled": true, + "dev": true, + "requires": { + "isexe": "1.1.2" + } + }, + "which-module": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "window-size": { + "version": "0.1.0", + "bundled": true, + "dev": true, + "optional": true + }, + "wordwrap": { + "version": "0.0.3", + "bundled": true, + "dev": true + }, + "wrap-ansi": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "requires": { + "string-width": "1.0.1" + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "write-file-atomic": { + "version": "1.1.4", + "bundled": true, + "dev": true, + "requires": { + "graceful-fs": "4.1.4", + "imurmurhash": "0.1.4", + "slide": "1.1.6" + } + }, + "y18n": { + "version": "3.2.1", + "bundled": true, + "dev": true + }, + "yallist": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "yargs": { + "version": "4.8.1", + "bundled": true, + "dev": true, + "requires": { + "cliui": "3.2.0", + "decamelize": "1.2.0", + "get-caller-file": "1.0.1", + "lodash.assign": "4.0.9", + "os-locale": "1.4.0", + "read-pkg-up": "1.0.1", + "require-directory": "2.1.1", + "require-main-filename": "1.0.1", + "set-blocking": "2.0.0", + "string-width": "1.0.1", + "which-module": "1.0.0", + "window-size": "0.2.0", + "y18n": "3.2.1", + "yargs-parser": "2.4.1" + }, + "dependencies": { + "cliui": { + "version": "3.2.0", + "bundled": true, + "dev": true, + "requires": { + "string-width": "1.0.1", + "strip-ansi": "3.0.1", + "wrap-ansi": "2.0.0" + } + }, + "window-size": { + "version": "0.2.0", + "bundled": true, + "dev": true + } + } + }, + "yargs-parser": { + "version": "2.4.1", + "bundled": true, + "dev": true, + "requires": { + "camelcase": "3.0.0", + "lodash.assign": "4.0.9" + }, + "dependencies": { + "camelcase": { + "version": "3.0.0", + "bundled": true, + "dev": true + } + } + } + } + }, + "oauth-sign": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", + "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1.0.2" + } + }, + "only-shallow": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/only-shallow/-/only-shallow-1.2.0.tgz", + "integrity": "sha1-cc7O26kyS8BRiu8Q7AgNMkncJGU=", + "dev": true + }, + "opener": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.4.3.tgz", + "integrity": "sha1-XG2ixdflgx6P+jlklQ+NZnSskLg=", + "dev": true + }, + "os-homedir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.1.tgz", + "integrity": "sha1-DWK99EuRb9O73PLKsZGUj7CU8Ac=", + "dev": true + }, + "os-locale": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", + "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", + "requires": { + "execa": "0.7.0", + "lcid": "1.0.0", + "mem": "1.1.0" + } + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" + }, + "p-limit": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.2.0.tgz", + "integrity": "sha512-Y/OtIaXtUPr4/YpMv1pCL5L5ed0rumAaAeBSj12F+bSlMdys7i8oQF/GUJmfpTS/QoaRrS/k6pma29haJpsMng==", + "requires": { + "p-try": "1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "requires": { + "p-limit": "1.2.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=" + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "1.3.1" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" + }, + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "requires": { + "pinkie": "2.0.4" + } + }, + "postcss": { + "version": "6.0.16", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.16.tgz", + "integrity": "sha512-m758RWPmSjFH/2MyyG3UOW1fgYbR9rtdzz5UNJnlm7OLtu4B2h9C6gi+bE4qFKghsBRFfZT8NzoQBs6JhLotoA==", + "requires": { + "chalk": "2.3.0", + "source-map": "0.6.1", + "supports-color": "5.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", + "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "requires": { + "color-convert": "1.9.1" + } + }, + "chalk": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", + "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", + "requires": { + "ansi-styles": "3.2.0", + "escape-string-regexp": "1.0.5", + "supports-color": "4.5.0" + }, + "dependencies": { + "supports-color": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", + "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", + "requires": { + "has-flag": "2.0.0" + } + } + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.1.0.tgz", + "integrity": "sha512-Ry0AwkoKjDpVKK4sV4h6o3UJmNRbjYm2uXhwfj3J56lMVdvnUNqzQVRztOOMGQ++w1K/TjNDFvpJk0F/LoeBCQ==", + "requires": { + "has-flag": "2.0.0" + } + } + } + }, + "postcss-selector-parser": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz", + "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=", + "requires": { + "dot-prop": "4.2.0", + "indexes-of": "1.0.1", + "uniq": "1.0.1" + } + }, + "process-nextick-args": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", + "dev": true + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" + }, + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + }, + "purgecss": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/purgecss/-/purgecss-0.19.0.tgz", + "integrity": "sha512-qCyQw40yfJStLRYa3Gt82Aml8NOg2iRKTr4FBCpD4CWWz0DTgqm/MFb/B710tCrKvfM+Np6ohWp7kscXU+lmAg==", + "requires": { + "glob": "7.1.2", + "postcss": "6.0.16", + "postcss-selector-parser": "3.1.1", + "yargs": "10.1.2" + }, + "dependencies": { + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "1.1.8" + } + } + } + }, + "qs": { + "version": "6.3.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.3.2.tgz", + "integrity": "sha1-51vV9uJoEioqDgvaYwslUMFmUCw=", + "dev": true + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "dev": true, + "requires": { + "load-json-file": "1.1.0", + "normalize-package-data": "2.4.0", + "path-type": "1.1.0" + } + }, + "read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "dev": true, + "requires": { + "find-up": "1.1.2", + "read-pkg": "1.1.0" + }, + "dependencies": { + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "2.1.0", + "pinkie-promise": "2.0.1" + } + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "2.0.1" + } + } + } + }, + "readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } + }, + "redent": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", + "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", + "dev": true, + "requires": { + "indent-string": "2.1.0", + "strip-indent": "1.0.1" + } + }, + "repeating": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", + "dev": true, + "requires": { + "is-finite": "1.0.2" + } + }, + "request": { + "version": "2.79.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.79.0.tgz", + "integrity": "sha1-Tf5b9r6LjNw3/Pk+BLZVd3InEN4=", + "dev": true, + "requires": { + "aws-sign2": "0.6.0", + "aws4": "1.6.0", + "caseless": "0.11.0", + "combined-stream": "1.0.5", + "extend": "3.0.1", + "forever-agent": "0.6.1", + "form-data": "2.1.4", + "har-validator": "2.0.6", + "hawk": "3.1.3", + "http-signature": "1.1.1", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.17", + "oauth-sign": "0.8.2", + "qs": "6.3.2", + "stringstream": "0.0.5", + "tough-cookie": "2.3.3", + "tunnel-agent": "0.4.3", + "uuid": "3.2.1" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" + }, + "require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=" + }, + "resolve": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", + "dev": true + }, + "rimraf": { + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz", + "integrity": "sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI=", + "dev": true + }, + "safe-buffer": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", + "dev": true + }, + "semver": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", + "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", + "dev": true + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "requires": { + "shebang-regex": "1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" + }, + "shelljs": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.3.0.tgz", + "integrity": "sha1-NZbmMHp4FUT1kfN9phg2DzHbV7E=", + "dev": true + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" + }, + "sntp": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", + "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", + "dev": true, + "requires": { + "hoek": "2.16.3" + } + }, + "spdx-correct": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", + "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=", + "dev": true, + "requires": { + "spdx-license-ids": "1.2.2" + } + }, + "spdx-expression-parse": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz", + "integrity": "sha1-m98vIOH0DtRH++JzJmGR/O1RYmw=", + "dev": true + }, + "spdx-license-ids": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz", + "integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=", + "dev": true + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "sshpk": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz", + "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=", + "dev": true, + "requires": { + "asn1": "0.2.3", + "assert-plus": "1.0.0", + "bcrypt-pbkdf": "1.0.1", + "dashdash": "1.14.1", + "ecc-jsbn": "0.1.1", + "getpass": "0.1.7", + "jsbn": "0.1.1", + "tweetnacl": "0.14.5" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + } + } + }, + "stack-utils": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-0.4.0.tgz", + "integrity": "sha1-lAy4L8z6hOj/Lz/fKT/ngBa+zNE=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "requires": { + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "requires": { + "ansi-regex": "3.0.0" + } + } + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + }, + "stringstream": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", + "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=", + "dev": true + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "2.1.1" + } + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "requires": { + "is-utf8": "0.2.1" + } + }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" + }, + "strip-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", + "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", + "dev": true, + "requires": { + "get-stdin": "4.0.1" + } + }, + "strip-json-comments": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz", + "integrity": "sha1-HhX7ysl9Pumb8tc7TGVrCCu6+5E=", + "dev": true + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + }, + "tap": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/tap/-/tap-7.1.2.tgz", + "integrity": "sha1-36w+zxSshUe7rSW70Wzyw3Q/Zc8=", + "dev": true, + "requires": { + "bluebird": "3.5.1", + "clean-yaml-object": "0.1.0", + "color-support": "1.1.3", + "coveralls": "2.13.3", + "deeper": "2.1.0", + "foreground-child": "1.5.6", + "glob": "7.0.6", + "isexe": "1.1.2", + "js-yaml": "3.5.5", + "nyc": "7.1.0", + "only-shallow": "1.2.0", + "opener": "1.4.3", + "os-homedir": "1.0.1", + "readable-stream": "2.3.3", + "signal-exit": "3.0.2", + "stack-utils": "0.4.0", + "tap-mocha-reporter": "2.0.1", + "tap-parser": "2.2.3", + "tmatch": "2.0.1" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isexe": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-1.1.2.tgz", + "integrity": "sha1-NvPiLmB1CSD15yQaR2qMakInWtA=", + "dev": true + }, + "readable-stream": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", + "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "safe-buffer": "5.1.1", + "string_decoder": "1.0.3", + "util-deprecate": "1.0.2" + } + }, + "string_decoder": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "dev": true, + "requires": { + "safe-buffer": "5.1.1" + } + } + } + }, + "tap-mocha-reporter": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/tap-mocha-reporter/-/tap-mocha-reporter-2.0.1.tgz", + "integrity": "sha1-xwMWFz1uOhbFjhupLV1s2N5YoS4=", + "dev": true, + "requires": { + "color-support": "1.1.3", + "debug": "2.6.9", + "diff": "1.4.0", + "escape-string-regexp": "1.0.5", + "glob": "7.0.6", + "js-yaml": "3.5.5", + "readable-stream": "2.3.3", + "tap-parser": "2.2.3", + "unicode-length": "1.0.3" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true, + "optional": true + }, + "readable-stream": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", + "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", + "dev": true, + "optional": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "safe-buffer": "5.1.1", + "string_decoder": "1.0.3", + "util-deprecate": "1.0.2" + } + }, + "string_decoder": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "5.1.1" + } + } + } + }, + "tap-parser": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/tap-parser/-/tap-parser-2.2.3.tgz", + "integrity": "sha1-rebpbje/04zg8WLaBn80A08GiwE=", + "dev": true, + "requires": { + "events-to-array": "1.1.2", + "js-yaml": "3.5.5", + "readable-stream": "2.3.3" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true, + "optional": true + }, + "readable-stream": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", + "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", + "dev": true, + "optional": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "safe-buffer": "5.1.1", + "string_decoder": "1.0.3", + "util-deprecate": "1.0.2" + } + }, + "string_decoder": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "5.1.1" + } + } + } + }, + "tmatch": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/tmatch/-/tmatch-2.0.1.tgz", + "integrity": "sha1-DFYkbzPzDaG409colauvFmYPOM8=", + "dev": true + }, + "tough-cookie": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.3.tgz", + "integrity": "sha1-C2GKVWW23qkL80JdBNVe3EdadWE=", + "dev": true, + "requires": { + "punycode": "1.4.1" + } + }, + "trim-newlines": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", + "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", + "dev": true + }, + "tunnel-agent": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz", + "integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=", + "dev": true + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true, + "optional": true + }, + "underscore.string": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.2.3.tgz", + "integrity": "sha1-gGmSYzZl1eX8tNsfs6hi62jp5to=", + "dev": true + }, + "unicode-length": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/unicode-length/-/unicode-length-1.0.3.tgz", + "integrity": "sha1-Wtp6f+1RhBpBijKM8UlHisg1irs=", + "dev": true, + "requires": { + "punycode": "1.4.1", + "strip-ansi": "3.0.1" + } + }, + "uniq": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", + "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=" + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "uuid": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz", + "integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA==", + "dev": true + }, + "validate-npm-package-license": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz", + "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=", + "dev": true, + "requires": { + "spdx-correct": "1.0.2", + "spdx-expression-parse": "1.0.4" + } + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "1.3.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + } + } + }, + "which": { + "version": "1.2.14", + "resolved": "https://registry.npmjs.org/which/-/which-1.2.14.tgz", + "integrity": "sha1-mofEN48D6CfOyvGs31bHNsAcFOU=", + "dev": true, + "requires": { + "isexe": "2.0.0" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" + }, + "wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "requires": { + "string-width": "1.0.2", + "strip-ansi": "3.0.1" + }, + "dependencies": { + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "requires": { + "number-is-nan": "1.0.1" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "xtend": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", + "dev": true + }, + "y18n": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=" + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" + }, + "yargs": { + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-10.1.2.tgz", + "integrity": "sha512-ivSoxqBGYOqQVruxD35+EyCFDYNEFL/Uo6FcOnz+9xZdZzK0Zzw4r4KhbrME1Oo2gOggwJod2MnsdamSG7H9ig==", + "requires": { + "cliui": "4.0.0", + "decamelize": "1.2.0", + "find-up": "2.1.0", + "get-caller-file": "1.0.2", + "os-locale": "2.1.0", + "require-directory": "2.1.1", + "require-main-filename": "1.0.1", + "set-blocking": "2.0.0", + "string-width": "2.1.1", + "which-module": "2.0.0", + "y18n": "3.2.1", + "yargs-parser": "8.1.0" + } + }, + "yargs-parser": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-8.1.0.tgz", + "integrity": "sha512-yP+6QqN8BmrgW2ggLtTbdrOyBNSI7zBa4IykmiV5R1wl1JWNxQvWhMfMdmzIYtKU7oP3OOInY/tl2ov3BDjnJQ==", + "requires": { + "camelcase": "4.1.0" + } + } + } +} diff --git a/packages/grunt-purgecss/package.json b/packages/grunt-purgecss/package.json new file mode 100644 index 00000000..ba02b024 --- /dev/null +++ b/packages/grunt-purgecss/package.json @@ -0,0 +1,41 @@ +{ + "name": "grunt-purgecss", + "description": "Grunt plugin for purgecss", + "version": "0.19.0", + "homepage": "https://github.com/ffloriel/grunt-purgecss", + "author": { + "name": "Ffloriel", + "email": "florielfedry@gmail.com" + }, + "repository": { + "type": "git", + "url": "git://github.com/ffloriel/grunt-purgecss.git" + }, + "bugs": { + "url": "https://github.com/ffloriel/grunt-purgecss/issues" + }, + "licenses": [ + { + "type": "MIT", + "url": "https://github.com/ffloriel/grunt-purgecss/blob/master/LICENSE-MIT" + } + ], + "engines": { + "node": ">= 0.8.0" + }, + "scripts": { + "test": "grunt test" + }, + "devDependencies": { + "grunt-contrib-jshint": "^1.1.0", + "grunt-contrib-clean": "^1.1.0", + "grunt-contrib-nodeunit": "^1.0.0", + "grunt": "~1.0.1" + }, + "keywords": [ + "gruntplugin" + ], + "dependencies": { + "purgecss": "^0.19.0" + } +} diff --git a/packages/grunt-purgecss/tasks/purgecss.js b/packages/grunt-purgecss/tasks/purgecss.js new file mode 100644 index 00000000..ca083c3d --- /dev/null +++ b/packages/grunt-purgecss/tasks/purgecss.js @@ -0,0 +1,44 @@ +'use strict'; + +module.exports = function(grunt) { + + // Please see the Grunt documentation for more information regarding task + // creation: http://gruntjs.com/creating-tasks + + grunt.registerMultiTask('purgecss', 'The best Grunt plugin ever.', function() { + // Merge task-specific and/or target-specific options with these defaults. + var options = this.options({ + punctuation: '.', + separator: ', ' + }); + + // Iterate over all specified file groups. + this.files.forEach(function(f) { + // Concat specified files. + var src = f.src.filter(function(filepath) { + // Warn on and remove invalid source files (if nonull was set). + if (!grunt.file.exists(filepath)) { + grunt.log.warn('Source file "' + filepath + '" not found.'); + return false; + } else { + return true; + } + }).map(function(filepath) { + // Read file source. + return grunt.file.read(filepath); + }).join(grunt.util.normalizelf(options.separator)); + + // Handle options. + src += options.punctuation; + + // + + // Write the destination file. + grunt.file.write(f.dest, src); + + // Print a success message. + grunt.log.writeln('File "' + f.dest + '" created.'); + }); + }); + +}; diff --git a/packages/grunt-purgecss/test/expected/custom_options b/packages/grunt-purgecss/test/expected/custom_options new file mode 100644 index 00000000..e5971282 --- /dev/null +++ b/packages/grunt-purgecss/test/expected/custom_options @@ -0,0 +1 @@ +Testing: 1 2 3 !!! \ No newline at end of file diff --git a/packages/grunt-purgecss/test/expected/default_options b/packages/grunt-purgecss/test/expected/default_options new file mode 100644 index 00000000..5f8b72fd --- /dev/null +++ b/packages/grunt-purgecss/test/expected/default_options @@ -0,0 +1 @@ +Testing, 1 2 3. \ No newline at end of file diff --git a/packages/grunt-purgecss/test/fixtures/123 b/packages/grunt-purgecss/test/fixtures/123 new file mode 100644 index 00000000..703ca85b --- /dev/null +++ b/packages/grunt-purgecss/test/fixtures/123 @@ -0,0 +1 @@ +1 2 3 \ No newline at end of file diff --git a/packages/grunt-purgecss/test/fixtures/testing b/packages/grunt-purgecss/test/fixtures/testing new file mode 100644 index 00000000..0a901256 --- /dev/null +++ b/packages/grunt-purgecss/test/fixtures/testing @@ -0,0 +1 @@ +Testing \ No newline at end of file diff --git a/packages/grunt-purgecss/test/purgecss_test.js b/packages/grunt-purgecss/test/purgecss_test.js new file mode 100644 index 00000000..cae4fa94 --- /dev/null +++ b/packages/grunt-purgecss/test/purgecss_test.js @@ -0,0 +1,48 @@ +'use strict'; + +var grunt = require('grunt'); + +/* + ======== A Handy Little Nodeunit Reference ======== + https://github.com/caolan/nodeunit + + Test methods: + test.expect(numAssertions) + test.done() + Test assertions: + test.ok(value, [message]) + test.equal(actual, expected, [message]) + test.notEqual(actual, expected, [message]) + test.deepEqual(actual, expected, [message]) + test.notDeepEqual(actual, expected, [message]) + test.strictEqual(actual, expected, [message]) + test.notStrictEqual(actual, expected, [message]) + test.throws(block, [error], [message]) + test.doesNotThrow(block, [error], [message]) + test.ifError(value) +*/ + +exports.purgecss = { + setUp: function(done) { + // setup here if necessary + done(); + }, + default_options: function(test) { + test.expect(1); + + var actual = grunt.file.read('tmp/default_options'); + var expected = grunt.file.read('test/expected/default_options'); + test.equal(actual, expected, 'should describe what the default behavior is.'); + + test.done(); + }, + custom_options: function(test) { + test.expect(1); + + var actual = grunt.file.read('tmp/custom_options'); + var expected = grunt.file.read('test/expected/custom_options'); + test.equal(actual, expected, 'should describe what the custom option(s) behavior is.'); + + test.done(); + }, +}; From 8aed07813c56d1e995bd274dfcf2aa2d93ce7adb Mon Sep 17 00:00:00 2001 From: Ffloriel Date: Wed, 31 Jan 2018 00:17:27 +0000 Subject: [PATCH 08/35] purgecss task - update Readme - create basic task for purgecss - modify package.json - remove default files --- packages/grunt-purgecss/Gruntfile.js | 12 +--- packages/grunt-purgecss/README.md | 18 ++++-- packages/grunt-purgecss/package-lock.json | 64 ++++++------------- packages/grunt-purgecss/package.json | 51 +++++++-------- packages/grunt-purgecss/tasks/purgecss.js | 25 ++++---- .../test/expected/custom_options | 1 - .../test/expected/default_options | 4 +- packages/grunt-purgecss/test/fixtures/123 | 1 - .../grunt-purgecss/test/fixtures/simple.css | 11 ++++ .../grunt-purgecss/test/fixtures/simple.html | 8 +++ packages/grunt-purgecss/test/fixtures/testing | 1 - packages/grunt-purgecss/test/purgecss_test.js | 11 +--- 12 files changed, 89 insertions(+), 118 deletions(-) delete mode 100644 packages/grunt-purgecss/test/expected/custom_options delete mode 100644 packages/grunt-purgecss/test/fixtures/123 create mode 100644 packages/grunt-purgecss/test/fixtures/simple.css create mode 100644 packages/grunt-purgecss/test/fixtures/simple.html delete mode 100644 packages/grunt-purgecss/test/fixtures/testing diff --git a/packages/grunt-purgecss/Gruntfile.js b/packages/grunt-purgecss/Gruntfile.js index 2c73b470..bb5b97f2 100644 --- a/packages/grunt-purgecss/Gruntfile.js +++ b/packages/grunt-purgecss/Gruntfile.js @@ -24,20 +24,12 @@ module.exports = function(grunt) { purgecss: { default_options: { options: { + content: ['test/fixtures/simple.html'], }, files: { - 'tmp/default_options': ['test/fixtures/testing', 'test/fixtures/123'] + 'tmp/default_options': ['test/fixtures/simple.css'], } }, - custom_options: { - options: { - separator: ': ', - punctuation: ' !!!' - }, - files: { - 'tmp/custom_options': ['test/fixtures/testing', 'test/fixtures/123'] - } - } }, // Unit tests. diff --git a/packages/grunt-purgecss/README.md b/packages/grunt-purgecss/README.md index f87c6ba3..dd7aa494 100644 --- a/packages/grunt-purgecss/README.md +++ b/packages/grunt-purgecss/README.md @@ -51,21 +51,23 @@ A string value that is used to do something else with whatever else. ### Usage Examples -#### Default Options -In this example, the default options are used to do something with whatever. So if the `testing` file has the content `Testing` and the `123` file had the content `1 2 3`, the generated result would be `Testing, 1 2 3.` +#### Options + ```js grunt.initConfig({ purgecss: { - options: {}, + options: { + content: ['src/**/*.html'], + }, files: { - 'dest/default_options': ['src/testing', 'src/123'], + 'dist/main.css': ['src/**/*.css'], }, }, }); ``` -#### Custom Options + ## Contributing In lieu of a formal styleguide, take care to maintain the existing coding style. Add unit tests for any new or changed functionality. Lint and test your code using [Grunt](http://gruntjs.com/). diff --git a/packages/grunt-purgecss/package-lock.json b/packages/grunt-purgecss/package-lock.json index 902f740d..65049557 100644 --- a/packages/grunt-purgecss/package-lock.json +++ b/packages/grunt-purgecss/package-lock.json @@ -1,6 +1,6 @@ { "name": "grunt-purgecss", - "version": "0.19.0", + "version": "0.20.0", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -531,24 +531,7 @@ "requires": { "lru-cache": "4.1.1", "shebang-command": "1.2.0", - "which": "1.3.0" - } - }, - "lru-cache": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz", - "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==", - "requires": { - "pseudomap": "1.0.2", - "yallist": "2.1.2" - } - }, - "which": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", - "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", - "requires": { - "isexe": "2.0.0" + "which": "1.2.14" } } } @@ -1194,7 +1177,6 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz", "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==", - "dev": true, "requires": { "pseudomap": "1.0.2", "yallist": "2.1.2" @@ -1256,7 +1238,6 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, "requires": { "brace-expansion": "1.1.8" } @@ -2899,11 +2880,6 @@ } } }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, "supports-color": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.1.0.tgz", @@ -2942,14 +2918,14 @@ "dev": true }, "purgecss": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/purgecss/-/purgecss-0.19.0.tgz", - "integrity": "sha512-qCyQw40yfJStLRYa3Gt82Aml8NOg2iRKTr4FBCpD4CWWz0DTgqm/MFb/B710tCrKvfM+Np6ohWp7kscXU+lmAg==", + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/purgecss/-/purgecss-0.20.0.tgz", + "integrity": "sha512-YBO44jr8gGgMQe6EWXoFI+70pYdVnK+QPxMLVFWE7lSeq6ttVes8RbFD6Qmx6dYUMCKAjvXW9QhjpeSEMGZavg==", "requires": { "glob": "7.1.2", "postcss": "6.0.16", "postcss-selector-parser": "3.1.1", - "yargs": "10.1.2" + "yargs": "11.0.0" }, "dependencies": { "glob": { @@ -2964,14 +2940,6 @@ "once": "1.4.0", "path-is-absolute": "1.0.1" } - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "requires": { - "brace-expansion": "1.1.8" - } } } }, @@ -3154,6 +3122,11 @@ "hoek": "2.16.3" } }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, "spdx-correct": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", @@ -3553,7 +3526,6 @@ "version": "1.2.14", "resolved": "https://registry.npmjs.org/which/-/which-1.2.14.tgz", "integrity": "sha1-mofEN48D6CfOyvGs31bHNsAcFOU=", - "dev": true, "requires": { "isexe": "2.0.0" } @@ -3614,9 +3586,9 @@ "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" }, "yargs": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-10.1.2.tgz", - "integrity": "sha512-ivSoxqBGYOqQVruxD35+EyCFDYNEFL/Uo6FcOnz+9xZdZzK0Zzw4r4KhbrME1Oo2gOggwJod2MnsdamSG7H9ig==", + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-11.0.0.tgz", + "integrity": "sha512-Rjp+lMYQOWtgqojx1dEWorjCofi1YN7AoFvYV7b1gx/7dAAeuI4kN5SZiEvr0ZmsZTOpDRcCqrpI10L31tFkBw==", "requires": { "cliui": "4.0.0", "decamelize": "1.2.0", @@ -3629,13 +3601,13 @@ "string-width": "2.1.1", "which-module": "2.0.0", "y18n": "3.2.1", - "yargs-parser": "8.1.0" + "yargs-parser": "9.0.2" } }, "yargs-parser": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-8.1.0.tgz", - "integrity": "sha512-yP+6QqN8BmrgW2ggLtTbdrOyBNSI7zBa4IykmiV5R1wl1JWNxQvWhMfMdmzIYtKU7oP3OOInY/tl2ov3BDjnJQ==", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-9.0.2.tgz", + "integrity": "sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc=", "requires": { "camelcase": "4.1.0" } diff --git a/packages/grunt-purgecss/package.json b/packages/grunt-purgecss/package.json index ba02b024..d0a8b3dd 100644 --- a/packages/grunt-purgecss/package.json +++ b/packages/grunt-purgecss/package.json @@ -1,30 +1,13 @@ { "name": "grunt-purgecss", + "version": "0.20.0", "description": "Grunt plugin for purgecss", - "version": "0.19.0", - "homepage": "https://github.com/ffloriel/grunt-purgecss", - "author": { - "name": "Ffloriel", - "email": "florielfedry@gmail.com" + "main": "Gruntfile.js", + "directories": { + "test": "test" }, - "repository": { - "type": "git", - "url": "git://github.com/ffloriel/grunt-purgecss.git" - }, - "bugs": { - "url": "https://github.com/ffloriel/grunt-purgecss/issues" - }, - "licenses": [ - { - "type": "MIT", - "url": "https://github.com/ffloriel/grunt-purgecss/blob/master/LICENSE-MIT" - } - ], - "engines": { - "node": ">= 0.8.0" - }, - "scripts": { - "test": "grunt test" + "dependencies": { + "purgecss": "^0.20.0" }, "devDependencies": { "grunt-contrib-jshint": "^1.1.0", @@ -32,10 +15,24 @@ "grunt-contrib-nodeunit": "^1.0.0", "grunt": "~1.0.1" }, + "scripts": { + "test": "grunt test" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/FullHuman/grunt-purgecss.git" + }, "keywords": [ - "gruntplugin" + "gruntplugin", + "remove", + "unused", + "css", + "purgecss" ], - "dependencies": { - "purgecss": "^0.19.0" - } + "author": "Ffloriel", + "license": "MIT", + "bugs": { + "url": "https://github.com/FullHuman/grunt-purgecss/issues" + }, + "homepage": "https://github.com/FullHuman/grunt-purgecss#readme" } diff --git a/packages/grunt-purgecss/tasks/purgecss.js b/packages/grunt-purgecss/tasks/purgecss.js index ca083c3d..6740ec85 100644 --- a/packages/grunt-purgecss/tasks/purgecss.js +++ b/packages/grunt-purgecss/tasks/purgecss.js @@ -1,16 +1,15 @@ 'use strict'; +var Purgecss = require('purgecss') module.exports = function(grunt) { // Please see the Grunt documentation for more information regarding task // creation: http://gruntjs.com/creating-tasks - grunt.registerMultiTask('purgecss', 'The best Grunt plugin ever.', function() { + grunt.registerMultiTask('purgecss', 'Grunt plugin for purgecss', function() { // Merge task-specific and/or target-specific options with these defaults. - var options = this.options({ - punctuation: '.', - separator: ', ' - }); + var options = this.options({}); + // Iterate over all specified file groups. this.files.forEach(function(f) { @@ -23,18 +22,16 @@ module.exports = function(grunt) { } else { return true; } - }).map(function(filepath) { - // Read file source. - return grunt.file.read(filepath); - }).join(grunt.util.normalizelf(options.separator)); - - // Handle options. - src += options.punctuation; + }) - // + // purgecss + var purgecssResult = new Purgecss({ + content: options.content, + css: f.src + }).purge()[0].css // Write the destination file. - grunt.file.write(f.dest, src); + grunt.file.write(f.dest, purgecssResult); // Print a success message. grunt.log.writeln('File "' + f.dest + '" created.'); diff --git a/packages/grunt-purgecss/test/expected/custom_options b/packages/grunt-purgecss/test/expected/custom_options deleted file mode 100644 index e5971282..00000000 --- a/packages/grunt-purgecss/test/expected/custom_options +++ /dev/null @@ -1 +0,0 @@ -Testing: 1 2 3 !!! \ No newline at end of file diff --git a/packages/grunt-purgecss/test/expected/default_options b/packages/grunt-purgecss/test/expected/default_options index 5f8b72fd..d0212ee2 100644 --- a/packages/grunt-purgecss/test/expected/default_options +++ b/packages/grunt-purgecss/test/expected/default_options @@ -1 +1,3 @@ -Testing, 1 2 3. \ No newline at end of file +.used-class { + color: black; +} diff --git a/packages/grunt-purgecss/test/fixtures/123 b/packages/grunt-purgecss/test/fixtures/123 deleted file mode 100644 index 703ca85b..00000000 --- a/packages/grunt-purgecss/test/fixtures/123 +++ /dev/null @@ -1 +0,0 @@ -1 2 3 \ No newline at end of file diff --git a/packages/grunt-purgecss/test/fixtures/simple.css b/packages/grunt-purgecss/test/fixtures/simple.css new file mode 100644 index 00000000..a213a749 --- /dev/null +++ b/packages/grunt-purgecss/test/fixtures/simple.css @@ -0,0 +1,11 @@ +.used-class { + color: black; +} + +.unused-class { + color: black; +} + +.another-one-not-found { + color: black; +} diff --git a/packages/grunt-purgecss/test/fixtures/simple.html b/packages/grunt-purgecss/test/fixtures/simple.html new file mode 100644 index 00000000..56954e7a --- /dev/null +++ b/packages/grunt-purgecss/test/fixtures/simple.html @@ -0,0 +1,8 @@ + + + + +
+ + + \ No newline at end of file diff --git a/packages/grunt-purgecss/test/fixtures/testing b/packages/grunt-purgecss/test/fixtures/testing deleted file mode 100644 index 0a901256..00000000 --- a/packages/grunt-purgecss/test/fixtures/testing +++ /dev/null @@ -1 +0,0 @@ -Testing \ No newline at end of file diff --git a/packages/grunt-purgecss/test/purgecss_test.js b/packages/grunt-purgecss/test/purgecss_test.js index cae4fa94..4fa7ca7e 100644 --- a/packages/grunt-purgecss/test/purgecss_test.js +++ b/packages/grunt-purgecss/test/purgecss_test.js @@ -35,14 +35,5 @@ exports.purgecss = { test.equal(actual, expected, 'should describe what the default behavior is.'); test.done(); - }, - custom_options: function(test) { - test.expect(1); - - var actual = grunt.file.read('tmp/custom_options'); - var expected = grunt.file.read('test/expected/custom_options'); - test.equal(actual, expected, 'should describe what the custom option(s) behavior is.'); - - test.done(); - }, + } }; From 600a52ddb2e16ec0851cd8c536fcb30b0ff2b01e Mon Sep 17 00:00:00 2001 From: Ffloriel Date: Wed, 31 Jan 2018 00:19:29 +0000 Subject: [PATCH 09/35] update Readme --- packages/grunt-purgecss/README.md | 6 +++--- packages/grunt-purgecss/package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/grunt-purgecss/README.md b/packages/grunt-purgecss/README.md index dd7aa494..9b4d72f6 100644 --- a/packages/grunt-purgecss/README.md +++ b/packages/grunt-purgecss/README.md @@ -1,6 +1,6 @@ # grunt-purgecss -> The best Grunt plugin ever. +> Grunt plugin for purgecss. ## Getting Started This plugin requires Grunt `~0.4.5` @@ -35,7 +35,7 @@ grunt.initConfig({ }); ``` -### Options + ### Usage Examples diff --git a/packages/grunt-purgecss/package.json b/packages/grunt-purgecss/package.json index d0a8b3dd..a5942b7d 100644 --- a/packages/grunt-purgecss/package.json +++ b/packages/grunt-purgecss/package.json @@ -1,6 +1,6 @@ { "name": "grunt-purgecss", - "version": "0.20.0", + "version": "0.20.1", "description": "Grunt plugin for purgecss", "main": "Gruntfile.js", "directories": { From f8c1c6f2ba098383b877423f8a512f58cffb8bcf Mon Sep 17 00:00:00 2001 From: Ffloriel Date: Sun, 25 Mar 2018 03:03:06 +0100 Subject: [PATCH 10/35] Merge pull request #2 from FullHuman/modern Update grunt purgecss plugin --- packages/grunt-purgecss/.babelrc | 26 + packages/grunt-purgecss/.circleci/config.yml | 16 + packages/grunt-purgecss/.eslintrc | 14 + packages/grunt-purgecss/.npmrc | 1 + packages/grunt-purgecss/Gruntfile.js | 47 +- packages/grunt-purgecss/README.md | 60 +- .../fixtures/expected/simple.css} | 0 .../fixtures/src/simple}/simple.css | 0 .../fixtures/src/simple}/simple.html | 0 .../grunt-purgecss/__tests__/index.test.js | 12 + .../examples/simple/Gruntfile.js | 19 + .../examples/simple/app.purged.css | 3 + packages/grunt-purgecss/examples/simple/files | 3 + .../examples/simple/src/app.css | 11 + .../examples/simple/src/index.html | 8 + packages/grunt-purgecss/lib/grunt-purgecss.js | 1 + packages/grunt-purgecss/package-lock.json | 3616 ----------------- packages/grunt-purgecss/package.json | 30 +- packages/grunt-purgecss/rollup.config.js | 16 + packages/grunt-purgecss/src/index.js | 27 + packages/grunt-purgecss/src/utils.js | 9 + packages/grunt-purgecss/test/purgecss_test.js | 39 - 22 files changed, 207 insertions(+), 3751 deletions(-) create mode 100644 packages/grunt-purgecss/.babelrc create mode 100644 packages/grunt-purgecss/.circleci/config.yml create mode 100644 packages/grunt-purgecss/.eslintrc create mode 100644 packages/grunt-purgecss/.npmrc rename packages/grunt-purgecss/{test/expected/default_options => __tests__/fixtures/expected/simple.css} (100%) rename packages/grunt-purgecss/{test/fixtures => __tests__/fixtures/src/simple}/simple.css (100%) rename packages/grunt-purgecss/{test/fixtures => __tests__/fixtures/src/simple}/simple.html (100%) create mode 100644 packages/grunt-purgecss/__tests__/index.test.js create mode 100644 packages/grunt-purgecss/examples/simple/Gruntfile.js create mode 100644 packages/grunt-purgecss/examples/simple/app.purged.css create mode 100644 packages/grunt-purgecss/examples/simple/files create mode 100644 packages/grunt-purgecss/examples/simple/src/app.css create mode 100644 packages/grunt-purgecss/examples/simple/src/index.html create mode 100644 packages/grunt-purgecss/lib/grunt-purgecss.js delete mode 100644 packages/grunt-purgecss/package-lock.json create mode 100644 packages/grunt-purgecss/rollup.config.js create mode 100644 packages/grunt-purgecss/src/index.js create mode 100644 packages/grunt-purgecss/src/utils.js delete mode 100644 packages/grunt-purgecss/test/purgecss_test.js diff --git a/packages/grunt-purgecss/.babelrc b/packages/grunt-purgecss/.babelrc new file mode 100644 index 00000000..898719d9 --- /dev/null +++ b/packages/grunt-purgecss/.babelrc @@ -0,0 +1,26 @@ +{ + "env": { + "test": { + "presets": ["env"], + "plugins": ["syntax-object-rest-spread", "transform-object-rest-spread"] + }, + "development": { + "presets": [ + [ + "env", + { + "targets": { + "browsers": ["last 2 versions"] + }, + "modules": false + } + ] + ], + "plugins": [ + "external-helpers", + "syntax-object-rest-spread", + "transform-object-rest-spread" + ] + } + } +} diff --git a/packages/grunt-purgecss/.circleci/config.yml b/packages/grunt-purgecss/.circleci/config.yml new file mode 100644 index 00000000..5945b71a --- /dev/null +++ b/packages/grunt-purgecss/.circleci/config.yml @@ -0,0 +1,16 @@ +version: 2 +jobs: + build: + docker: + - image: circleci/node:8.9.1 + steps: + - checkout + - run: + name: install + command: npm i + - run: + name: lint + command: npm run lint + - run: + name: test + command: npm test \ No newline at end of file diff --git a/packages/grunt-purgecss/.eslintrc b/packages/grunt-purgecss/.eslintrc new file mode 100644 index 00000000..673a84a4 --- /dev/null +++ b/packages/grunt-purgecss/.eslintrc @@ -0,0 +1,14 @@ +{ + "extends": "eslint:recommended", + "parserOptions": { + "ecmaVersion": 6, + "sourceType": "module" + }, + "env": { + "browser": true, + "commonjs": true, + "node": true, + "es6": true + }, + "parser": "babel-eslint" +} diff --git a/packages/grunt-purgecss/.npmrc b/packages/grunt-purgecss/.npmrc new file mode 100644 index 00000000..9cf94950 --- /dev/null +++ b/packages/grunt-purgecss/.npmrc @@ -0,0 +1 @@ +package-lock=false \ No newline at end of file diff --git a/packages/grunt-purgecss/Gruntfile.js b/packages/grunt-purgecss/Gruntfile.js index bb5b97f2..4c284074 100644 --- a/packages/grunt-purgecss/Gruntfile.js +++ b/packages/grunt-purgecss/Gruntfile.js @@ -1,57 +1,24 @@ -'use strict'; - -module.exports = function(grunt) { +module.exports = grunt => { // Project configuration. grunt.initConfig({ - jshint: { - all: [ - 'Gruntfile.js', - 'tasks/*.js', - '<%= nodeunit.tests %>' - ], - options: { - jshintrc: '.jshintrc' - } - }, - - // Before generating any new files, remove any previously-created files. - clean: { - tests: ['tmp'] - }, - // Configuration to be run (and then tested). purgecss: { - default_options: { + simple: { options: { - content: ['test/fixtures/simple.html'], + content: ['./__tests__/fixtures/src/simple/**/*.html'] }, files: { - 'tmp/default_options': ['test/fixtures/simple.css'], + '__tests__/tmp/simple.css': ['__tests__/fixtures/src/simple/simple.css'] } - }, - }, - - // Unit tests. - nodeunit: { - tests: ['test/*_test.js'] + } } - }); // Actually load this plugin's task(s). grunt.loadTasks('tasks'); - // These plugins provide necessary tasks. - grunt.loadNpmTasks('grunt-contrib-jshint'); - grunt.loadNpmTasks('grunt-contrib-clean'); - grunt.loadNpmTasks('grunt-contrib-nodeunit'); - - // Whenever the "test" task is run, first clean the "tmp" dir, then run this - // plugin's task(s), then test the result. - grunt.registerTask('test', ['clean', 'purgecss', 'nodeunit']); - // By default, lint and run all tests. - grunt.registerTask('default', ['jshint', 'test']); + grunt.registerTask('default', ['purgecss']); -}; +}; \ No newline at end of file diff --git a/packages/grunt-purgecss/README.md b/packages/grunt-purgecss/README.md index 9b4d72f6..3fd72e85 100644 --- a/packages/grunt-purgecss/README.md +++ b/packages/grunt-purgecss/README.md @@ -24,35 +24,23 @@ In your project's Gruntfile, add a section named `purgecss` to the data object p ```js grunt.initConfig({ - purgecss: { - options: { - // Task-specific options go here. - }, - your_target: { - // Target-specific file lists and/or options go here. - }, - }, -}); + // Configuration to be run (and then tested). + purgecss: { + my_target: { + options: { + content: ['./src/**/*.html'] + }, + files: { + 'dist/app.css': ['src/css/app.css'] + } + } + } + }); ``` - - ### Usage Examples #### Options - ```js grunt.initConfig({ @@ -67,27 +55,3 @@ grunt.initConfig({ }); ``` - - -## Contributing -In lieu of a formal styleguide, take care to maintain the existing coding style. Add unit tests for any new or changed functionality. Lint and test your code using [Grunt](http://gruntjs.com/). - -## Release History -_(Nothing yet)_ diff --git a/packages/grunt-purgecss/test/expected/default_options b/packages/grunt-purgecss/__tests__/fixtures/expected/simple.css similarity index 100% rename from packages/grunt-purgecss/test/expected/default_options rename to packages/grunt-purgecss/__tests__/fixtures/expected/simple.css diff --git a/packages/grunt-purgecss/test/fixtures/simple.css b/packages/grunt-purgecss/__tests__/fixtures/src/simple/simple.css similarity index 100% rename from packages/grunt-purgecss/test/fixtures/simple.css rename to packages/grunt-purgecss/__tests__/fixtures/src/simple/simple.css diff --git a/packages/grunt-purgecss/test/fixtures/simple.html b/packages/grunt-purgecss/__tests__/fixtures/src/simple/simple.html similarity index 100% rename from packages/grunt-purgecss/test/fixtures/simple.html rename to packages/grunt-purgecss/__tests__/fixtures/src/simple/simple.html diff --git a/packages/grunt-purgecss/__tests__/index.test.js b/packages/grunt-purgecss/__tests__/index.test.js new file mode 100644 index 00000000..3cd8e85c --- /dev/null +++ b/packages/grunt-purgecss/__tests__/index.test.js @@ -0,0 +1,12 @@ +const fs = require('fs') + +describe('Purgecss grunt plugin', () => { + const files = ['simple.css'] + for (const file of files) { + it(`remove unused css successfully: ${file}`, () => { + const actual = fs.readFileSync(`${__dirname}/tmp/${file}`).toString() + const expected = fs.readFileSync(`${__dirname}/fixtures/expected/${file}`).toString() + expect(actual).toBe(expected) + }) + } +}) diff --git a/packages/grunt-purgecss/examples/simple/Gruntfile.js b/packages/grunt-purgecss/examples/simple/Gruntfile.js new file mode 100644 index 00000000..2e1bcbd5 --- /dev/null +++ b/packages/grunt-purgecss/examples/simple/Gruntfile.js @@ -0,0 +1,19 @@ +module.exports = grunt => { + + grunt.initConfig({ + purgecss: { + options: { + content: ['./src/**/*.html'] + }, + my_target: { + files: { + './app.purged.css': './src/app.css' + } + } + } + }) + + grunt.loadTasks('./../../lib') + grunt.registerTask('default', ['purgecss']); + +} \ No newline at end of file diff --git a/packages/grunt-purgecss/examples/simple/app.purged.css b/packages/grunt-purgecss/examples/simple/app.purged.css new file mode 100644 index 00000000..d0212ee2 --- /dev/null +++ b/packages/grunt-purgecss/examples/simple/app.purged.css @@ -0,0 +1,3 @@ +.used-class { + color: black; +} diff --git a/packages/grunt-purgecss/examples/simple/files b/packages/grunt-purgecss/examples/simple/files new file mode 100644 index 00000000..d0212ee2 --- /dev/null +++ b/packages/grunt-purgecss/examples/simple/files @@ -0,0 +1,3 @@ +.used-class { + color: black; +} diff --git a/packages/grunt-purgecss/examples/simple/src/app.css b/packages/grunt-purgecss/examples/simple/src/app.css new file mode 100644 index 00000000..a213a749 --- /dev/null +++ b/packages/grunt-purgecss/examples/simple/src/app.css @@ -0,0 +1,11 @@ +.used-class { + color: black; +} + +.unused-class { + color: black; +} + +.another-one-not-found { + color: black; +} diff --git a/packages/grunt-purgecss/examples/simple/src/index.html b/packages/grunt-purgecss/examples/simple/src/index.html new file mode 100644 index 00000000..56954e7a --- /dev/null +++ b/packages/grunt-purgecss/examples/simple/src/index.html @@ -0,0 +1,8 @@ + + + + +
+ + + \ No newline at end of file diff --git a/packages/grunt-purgecss/lib/grunt-purgecss.js b/packages/grunt-purgecss/lib/grunt-purgecss.js new file mode 100644 index 00000000..63d81354 --- /dev/null +++ b/packages/grunt-purgecss/lib/grunt-purgecss.js @@ -0,0 +1 @@ +"use strict";function _interopDefault(e){return e&&"object"==typeof e&&"default"in e?e.default:e}var Purgecss=_interopDefault(require("purgecss")),getAvailableFiles=function(e,t){return t.filter(function(t){return!!e.file.exists(t)||(e.log.warn('Source file "'+t+'" not found.'),!1)})},_extends=Object.assign||function(e){for(var t=1;t { + grunt.registerMultiTask('purgecss', 'Grunt plugin for purgecss', function() { + // Merge task-specific and/or target-specific options with these defaults. + var options = this.options({}) + + // Iterate over all specified file groups. + this.files.forEach(f => { + const src = getAvailableFiles(grunt, f.src) + // purgecss content + const purgecssResult = new Purgecss({ + ...options, + css: src + }).purge()[0].css + + // Write the destination file. + grunt.file.write(f.dest, purgecssResult) + + // Print a success message + grunt.log.writeln(`File "${f.dest}" created.`) + }) + }) +} + +export default gruntPurgecss diff --git a/packages/grunt-purgecss/src/utils.js b/packages/grunt-purgecss/src/utils.js new file mode 100644 index 00000000..bfdbccd4 --- /dev/null +++ b/packages/grunt-purgecss/src/utils.js @@ -0,0 +1,9 @@ +export const getAvailableFiles = (grunt, files) => + files.filter(filepath => { + // Warn on and remove invalid source files (if nonull was set). + if (!grunt.file.exists(filepath)) { + grunt.log.warn(`Source file "${filepath}" not found.`) + return false + } + return true + }) diff --git a/packages/grunt-purgecss/test/purgecss_test.js b/packages/grunt-purgecss/test/purgecss_test.js deleted file mode 100644 index 4fa7ca7e..00000000 --- a/packages/grunt-purgecss/test/purgecss_test.js +++ /dev/null @@ -1,39 +0,0 @@ -'use strict'; - -var grunt = require('grunt'); - -/* - ======== A Handy Little Nodeunit Reference ======== - https://github.com/caolan/nodeunit - - Test methods: - test.expect(numAssertions) - test.done() - Test assertions: - test.ok(value, [message]) - test.equal(actual, expected, [message]) - test.notEqual(actual, expected, [message]) - test.deepEqual(actual, expected, [message]) - test.notDeepEqual(actual, expected, [message]) - test.strictEqual(actual, expected, [message]) - test.notStrictEqual(actual, expected, [message]) - test.throws(block, [error], [message]) - test.doesNotThrow(block, [error], [message]) - test.ifError(value) -*/ - -exports.purgecss = { - setUp: function(done) { - // setup here if necessary - done(); - }, - default_options: function(test) { - test.expect(1); - - var actual = grunt.file.read('tmp/default_options'); - var expected = grunt.file.read('test/expected/default_options'); - test.equal(actual, expected, 'should describe what the default behavior is.'); - - test.done(); - } -}; From 38efdda048615d256d35aba6b5906b362fbdee57 Mon Sep 17 00:00:00 2001 From: Ffloriel Date: Wed, 28 Mar 2018 08:08:04 +0100 Subject: [PATCH 11/35] update README - update README with options and correct usage example --- packages/grunt-purgecss/README.md | 73 ++++++++++++++++++++++++++----- 1 file changed, 63 insertions(+), 10 deletions(-) diff --git a/packages/grunt-purgecss/README.md b/packages/grunt-purgecss/README.md index 3fd72e85..2d16ed96 100644 --- a/packages/grunt-purgecss/README.md +++ b/packages/grunt-purgecss/README.md @@ -38,20 +38,73 @@ grunt.initConfig({ }); ``` +### Options + +All of the options of purgecss are available to use with the plugins. +You will find below the main options available. For the complete list, go to the [purgecss documentation website](https://www.purgecss.com/configuration.html#options) + +#### options.content +Type: `string | Object` + +You can specify content that should be analyzed by Purgecss with an array of filenames or globs. The files can be HTML, Pug, Blade, etc. + +#### options.extractors +Type: `Array` + +Purgecss can be adapted to suit your needs. If you notice a lot of unused CSS is not being removed, you might want to use a custom extractor. +More information about extractors [here](https://www.purgecss.com/extractors.html). + +#### options.whitelist +Type: `Array` + +You can whitelist selectors to stop Purgecss from removing them from your CSS. This can be accomplished with the options whitelist and whitelistPatterns. + +#### options.whitelistPatterns +Type: `Array` + +You can whitelist selectors based on a regular expression with whitelistPatterns. + +#### options.keyframes +Type: `boolean` +Default value: `false` + +If you are using a CSS animation library such as animate.css, you can remove unused keyframes by setting the keyframes option to true. + +#### options.fontFace +Type: `boolean` +Default value: `false` + +If there are any unused @font-face rules in your css, you can remove them by setting the fontFace option to true. + ### Usage Examples -#### Options +The example below is using all of the main options available. ```js grunt.initConfig({ - purgecss: { - options: { - content: ['src/**/*.html'], - }, - files: { - 'dist/main.css': ['src/**/*.css'], - }, - }, -}); + // Configuration to be run (and then tested). + purgecss: { + my_target: { + options: { + content: ['./src/**/*.html', `src/**/*.js`, 'src/**/*.blade', 'src/**/*.vue'], + extractors: { + extractor: class { + static extract(content) { + content.match(/a-Z/) || [] + } + }, + extension: ['html', 'blade'] + }, + whitelist: ['random', 'yep', 'button'], + whitelistPatterns: [/red$/], + keyframes: true, + fontFace: true + }, + files: { + 'dist/app.css': ['src/css/app.css'] + } + } + } + }); ``` From 0abed69d5b8057404dd5672ab929a0c022292fd8 Mon Sep 17 00:00:00 2001 From: Ffloriel Date: Sat, 31 Mar 2018 17:11:18 +0100 Subject: [PATCH 12/35] add travis config --- packages/grunt-purgecss/.travis.yml | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 packages/grunt-purgecss/.travis.yml diff --git a/packages/grunt-purgecss/.travis.yml b/packages/grunt-purgecss/.travis.yml new file mode 100644 index 00000000..98c86f74 --- /dev/null +++ b/packages/grunt-purgecss/.travis.yml @@ -0,0 +1,3 @@ +language: node_js +node_js: + - "8" \ No newline at end of file From 28dd03c378419fc5ec21ef0a3c66d38879701407 Mon Sep 17 00:00:00 2001 From: Ffloriel Date: Sat, 31 Mar 2018 17:11:25 +0100 Subject: [PATCH 13/35] update example --- .../grunt-purgecss/examples/simple/Gruntfile.js | 4 ++-- .../examples/simple/{ => dist}/app.purged.css | 0 packages/grunt-purgecss/examples/simple/files | 3 --- .../grunt-purgecss/examples/simple/package.json | 14 ++++++++++++++ 4 files changed, 16 insertions(+), 5 deletions(-) rename packages/grunt-purgecss/examples/simple/{ => dist}/app.purged.css (100%) delete mode 100644 packages/grunt-purgecss/examples/simple/files create mode 100644 packages/grunt-purgecss/examples/simple/package.json diff --git a/packages/grunt-purgecss/examples/simple/Gruntfile.js b/packages/grunt-purgecss/examples/simple/Gruntfile.js index 2e1bcbd5..0732d426 100644 --- a/packages/grunt-purgecss/examples/simple/Gruntfile.js +++ b/packages/grunt-purgecss/examples/simple/Gruntfile.js @@ -7,13 +7,13 @@ module.exports = grunt => { }, my_target: { files: { - './app.purged.css': './src/app.css' + './dist/app.purged.css': './src/app.css' } } } }) - grunt.loadTasks('./../../lib') + grunt.loadNpmTasks('grunt-purgecss') grunt.registerTask('default', ['purgecss']); } \ No newline at end of file diff --git a/packages/grunt-purgecss/examples/simple/app.purged.css b/packages/grunt-purgecss/examples/simple/dist/app.purged.css similarity index 100% rename from packages/grunt-purgecss/examples/simple/app.purged.css rename to packages/grunt-purgecss/examples/simple/dist/app.purged.css diff --git a/packages/grunt-purgecss/examples/simple/files b/packages/grunt-purgecss/examples/simple/files deleted file mode 100644 index d0212ee2..00000000 --- a/packages/grunt-purgecss/examples/simple/files +++ /dev/null @@ -1,3 +0,0 @@ -.used-class { - color: black; -} diff --git a/packages/grunt-purgecss/examples/simple/package.json b/packages/grunt-purgecss/examples/simple/package.json new file mode 100644 index 00000000..4aa214da --- /dev/null +++ b/packages/grunt-purgecss/examples/simple/package.json @@ -0,0 +1,14 @@ +{ + "name": "simple", + "version": "1.0.0", + "description": "", + "main": "Gruntfile.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "", + "license": "ISC", + "dependencies": { + "grunt-purgecss": "^0.21.0" + } +} From c0c563e1927d1de208af3c99c2dc6206cfbacce5 Mon Sep 17 00:00:00 2001 From: Ffloriel Date: Sat, 31 Mar 2018 17:22:38 +0100 Subject: [PATCH 14/35] jest eslintrc --- packages/grunt-purgecss/__tests__/.eslintrc | 5 +++++ packages/grunt-purgecss/package.json | 1 - 2 files changed, 5 insertions(+), 1 deletion(-) create mode 100644 packages/grunt-purgecss/__tests__/.eslintrc diff --git a/packages/grunt-purgecss/__tests__/.eslintrc b/packages/grunt-purgecss/__tests__/.eslintrc new file mode 100644 index 00000000..7bc296da --- /dev/null +++ b/packages/grunt-purgecss/__tests__/.eslintrc @@ -0,0 +1,5 @@ +{ + "env": { + "jest": true + } +} \ No newline at end of file diff --git a/packages/grunt-purgecss/package.json b/packages/grunt-purgecss/package.json index f3f9a94d..9e717655 100644 --- a/packages/grunt-purgecss/package.json +++ b/packages/grunt-purgecss/package.json @@ -28,7 +28,6 @@ "test": "grunt && npx jest __tests__/.+.test.js", "dev": "rollup -c rollup.config.js -w", "build": "rollup -c rollup.config.js", - "flow": "npx flow", "lint": "npx eslint -c .eslintrc src/", "prettier": "npx prettier --write --print-width 100 --tab-width 4 --no-semi --single-quote '{src,__{tests,mocks}__}/**/*.js'" }, From af1d49db6fe09beb660fad4ecfe03737a48aa5e5 Mon Sep 17 00:00:00 2001 From: Ffloriel Date: Sat, 31 Mar 2018 17:29:37 +0100 Subject: [PATCH 15/35] update README - add badges --- packages/grunt-purgecss/README.md | 9 +++++ packages/grunt-purgecss/tasks/purgecss.js | 41 ----------------------- 2 files changed, 9 insertions(+), 41 deletions(-) delete mode 100644 packages/grunt-purgecss/tasks/purgecss.js diff --git a/packages/grunt-purgecss/README.md b/packages/grunt-purgecss/README.md index 2d16ed96..7a68cf40 100644 --- a/packages/grunt-purgecss/README.md +++ b/packages/grunt-purgecss/README.md @@ -1,5 +1,14 @@ # grunt-purgecss +[![Build Status](https://travis-ci.org/FullHuman/grunt-purgecss.svg?branch=master)](https://travis-ci.org/FullHuman/purgecss) +[![CircleCi](https://circleci.com/gh/FullHuman/grunt-purgecss/tree/master.svg?style=shield)]() +[![dependencies Status](https://david-dm.org/fullhuman/grunt-purgecss/status.svg)](https://david-dm.org/fullhuman/grunt-purgecss) +[![devDependencies Status](https://david-dm.org/fullhuman/grunt-purgecss/dev-status.svg)](https://david-dm.org/fullhuman/grunt-purgecss?type=dev) +[![Codacy Badge](https://api.codacy.com/project/badge/Grade/7710684c644d4f7cb725dc10a2a5953f)](https://www.codacy.com/app/FullHuman/grunt-purgecss?utm_source=github.com&utm_medium=referral&utm_content=FullHuman/grunt-purgecss&utm_campaign=Badge_Grade) +[![styled with prettier](https://img.shields.io/badge/styled_with-prettier-ff69b4.svg)](https://github.com/prettier/prettier) +[![npm](https://img.shields.io/npm/v/grunt-purgecss.svg)](https://www.npmjs.com/package/grunt-purgecss) +[![license](https://img.shields.io/github/license/fullhuman/grunt-purgecss.svg)]() + > Grunt plugin for purgecss. ## Getting Started diff --git a/packages/grunt-purgecss/tasks/purgecss.js b/packages/grunt-purgecss/tasks/purgecss.js deleted file mode 100644 index 6740ec85..00000000 --- a/packages/grunt-purgecss/tasks/purgecss.js +++ /dev/null @@ -1,41 +0,0 @@ -'use strict'; -var Purgecss = require('purgecss') - -module.exports = function(grunt) { - - // Please see the Grunt documentation for more information regarding task - // creation: http://gruntjs.com/creating-tasks - - grunt.registerMultiTask('purgecss', 'Grunt plugin for purgecss', function() { - // Merge task-specific and/or target-specific options with these defaults. - var options = this.options({}); - - - // Iterate over all specified file groups. - this.files.forEach(function(f) { - // Concat specified files. - var src = f.src.filter(function(filepath) { - // Warn on and remove invalid source files (if nonull was set). - if (!grunt.file.exists(filepath)) { - grunt.log.warn('Source file "' + filepath + '" not found.'); - return false; - } else { - return true; - } - }) - - // purgecss - var purgecssResult = new Purgecss({ - content: options.content, - css: f.src - }).purge()[0].css - - // Write the destination file. - grunt.file.write(f.dest, purgecssResult); - - // Print a success message. - grunt.log.writeln('File "' + f.dest + '" created.'); - }); - }); - -}; From 4b7b1a63c577af2b312c3fc973f58d48baeeea27 Mon Sep 17 00:00:00 2001 From: Ffloriel Date: Sat, 31 Mar 2018 17:31:13 +0100 Subject: [PATCH 16/35] 0.21.1 --- packages/grunt-purgecss/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/grunt-purgecss/package.json b/packages/grunt-purgecss/package.json index 9e717655..65fc239b 100644 --- a/packages/grunt-purgecss/package.json +++ b/packages/grunt-purgecss/package.json @@ -1,6 +1,6 @@ { "name": "grunt-purgecss", - "version": "0.21.0", + "version": "0.21.1", "description": "Grunt plugin for purgecss", "main": "./lib/grunt-purgecss.js", "directories": { From 425d004e009524c3861cd4f83773048c547a753b Mon Sep 17 00:00:00 2001 From: Ffloriel Date: Sat, 31 Mar 2018 18:01:02 +0100 Subject: [PATCH 17/35] fix missing tasks - add tasks purgecss - remove jshint config --- packages/grunt-purgecss/.jshintrc | 13 ------------- packages/grunt-purgecss/package.json | 2 +- 2 files changed, 1 insertion(+), 14 deletions(-) delete mode 100644 packages/grunt-purgecss/.jshintrc diff --git a/packages/grunt-purgecss/.jshintrc b/packages/grunt-purgecss/.jshintrc deleted file mode 100644 index f57a8ff4..00000000 --- a/packages/grunt-purgecss/.jshintrc +++ /dev/null @@ -1,13 +0,0 @@ -{ - "curly": true, - "eqeqeq": true, - "immed": true, - "latedef": true, - "newcap": true, - "noarg": true, - "sub": true, - "undef": true, - "boss": true, - "eqnull": true, - "node": true -} diff --git a/packages/grunt-purgecss/package.json b/packages/grunt-purgecss/package.json index 65fc239b..282d5a43 100644 --- a/packages/grunt-purgecss/package.json +++ b/packages/grunt-purgecss/package.json @@ -1,6 +1,6 @@ { "name": "grunt-purgecss", - "version": "0.21.1", + "version": "0.21.2", "description": "Grunt plugin for purgecss", "main": "./lib/grunt-purgecss.js", "directories": { From c80068915e506ecbf89c6a4fbc1cc85c9d239fe5 Mon Sep 17 00:00:00 2001 From: Ffloriel Date: Sat, 31 Mar 2018 18:08:47 +0100 Subject: [PATCH 18/35] add tasks --- packages/grunt-purgecss/tasks/purgecss.js | 41 +++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 packages/grunt-purgecss/tasks/purgecss.js diff --git a/packages/grunt-purgecss/tasks/purgecss.js b/packages/grunt-purgecss/tasks/purgecss.js new file mode 100644 index 00000000..8eee9083 --- /dev/null +++ b/packages/grunt-purgecss/tasks/purgecss.js @@ -0,0 +1,41 @@ +'use strict'; +var Purgecss = require('purgecss') + +module.exports = function(grunt) { + + // Please see the Grunt documentation for more information regarding task + // creation: http://gruntjs.com/creating-tasks + + grunt.registerMultiTask('purgecss', 'Grunt plugin for purgecss', function() { + // Merge task-specific and/or target-specific options with these defaults. + var options = this.options({}); + + + // Iterate over all specified file groups. + this.files.forEach(function(f) { + // Concat specified files. + var src = f.src.filter(function(filepath) { + // Warn on and remove invalid source files (if nonull was set). + if (!grunt.file.exists(filepath)) { + grunt.log.warn('Source file "' + filepath + '" not found.'); + return false; + } else { + return true; + } + }) + + // purgecss + var purgecssResult = new Purgecss({ + content: options.content, + css: src + }).purge()[0].css + + // Write the destination file. + grunt.file.write(f.dest, purgecssResult); + + // Print a success message. + grunt.log.writeln('File "' + f.dest + '" created.'); + }); + }); + +}; \ No newline at end of file From 2856e71e37b6f097e986981ff5afd54614f75309 Mon Sep 17 00:00:00 2001 From: Ffloriel Date: Tue, 5 Jun 2018 23:08:48 +0100 Subject: [PATCH 19/35] update to purgecss 1.0 --- .../examples/simple/Gruntfile.js | 2 +- .../examples/simple/package.json | 5 +- packages/grunt-purgecss/lib/grunt-purgecss.js | 55 ++++++++++++++++++- packages/grunt-purgecss/package.json | 17 +++--- packages/grunt-purgecss/rollup.config.js | 3 +- 5 files changed, 67 insertions(+), 15 deletions(-) diff --git a/packages/grunt-purgecss/examples/simple/Gruntfile.js b/packages/grunt-purgecss/examples/simple/Gruntfile.js index 0732d426..be264330 100644 --- a/packages/grunt-purgecss/examples/simple/Gruntfile.js +++ b/packages/grunt-purgecss/examples/simple/Gruntfile.js @@ -7,7 +7,7 @@ module.exports = grunt => { }, my_target: { files: { - './dist/app.purged.css': './src/app.css' + './dist/app.purged.css': ['./src/app.css'] } } } diff --git a/packages/grunt-purgecss/examples/simple/package.json b/packages/grunt-purgecss/examples/simple/package.json index 4aa214da..ba216512 100644 --- a/packages/grunt-purgecss/examples/simple/package.json +++ b/packages/grunt-purgecss/examples/simple/package.json @@ -8,7 +8,8 @@ }, "author": "", "license": "ISC", - "dependencies": { - "grunt-purgecss": "^0.21.0" + "dependencies": {}, + "devDependencies": { + "grunt-purgecss": "^1.0.0" } } diff --git a/packages/grunt-purgecss/lib/grunt-purgecss.js b/packages/grunt-purgecss/lib/grunt-purgecss.js index 63d81354..2bca2f19 100644 --- a/packages/grunt-purgecss/lib/grunt-purgecss.js +++ b/packages/grunt-purgecss/lib/grunt-purgecss.js @@ -1 +1,54 @@ -"use strict";function _interopDefault(e){return e&&"object"==typeof e&&"default"in e?e.default:e}var Purgecss=_interopDefault(require("purgecss")),getAvailableFiles=function(e,t){return t.filter(function(t){return!!e.file.exists(t)||(e.log.warn('Source file "'+t+'" not found.'),!1)})},_extends=Object.assign||function(e){for(var t=1;t Date: Tue, 8 Oct 2019 00:03:34 +0200 Subject: [PATCH 20/35] Merge pull request #12 from peiche/patch-1 Pass all options from Grunt plugin to PurgeCSS. --- packages/grunt-purgecss/tasks/purgecss.js | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/packages/grunt-purgecss/tasks/purgecss.js b/packages/grunt-purgecss/tasks/purgecss.js index 8eee9083..a47defc8 100644 --- a/packages/grunt-purgecss/tasks/purgecss.js +++ b/packages/grunt-purgecss/tasks/purgecss.js @@ -22,13 +22,11 @@ module.exports = function(grunt) { } else { return true; } - }) + }); + options.css = src; // purgecss - var purgecssResult = new Purgecss({ - content: options.content, - css: src - }).purge()[0].css + var purgecssResult = new Purgecss(options).purge()[0].css; // Write the destination file. grunt.file.write(f.dest, purgecssResult); @@ -38,4 +36,4 @@ module.exports = function(grunt) { }); }); -}; \ No newline at end of file +}; From de88e557da4d8deaae8586bab8887edd3b4da722 Mon Sep 17 00:00:00 2001 From: Floriel Date: Tue, 8 Oct 2019 00:04:54 +0200 Subject: [PATCH 21/35] Merge pull request #6 from Calinou/improve-readme Improve formatting in README --- packages/grunt-purgecss/README.md | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/packages/grunt-purgecss/README.md b/packages/grunt-purgecss/README.md index 7a68cf40..489fea7c 100644 --- a/packages/grunt-purgecss/README.md +++ b/packages/grunt-purgecss/README.md @@ -9,10 +9,11 @@ [![npm](https://img.shields.io/npm/v/grunt-purgecss.svg)](https://www.npmjs.com/package/grunt-purgecss) [![license](https://img.shields.io/github/license/fullhuman/grunt-purgecss.svg)]() -> Grunt plugin for purgecss. +> Grunt plugin for Purgecss. ## Getting Started -This plugin requires Grunt `~0.4.5` + +This plugin requires Grunt `~0.4.5`. If you haven't used [Grunt](http://gruntjs.com/) before, be sure to check out the [Getting Started](http://gruntjs.com/getting-started) guide, as it explains how to create a [Gruntfile](http://gruntjs.com/sample-gruntfile) as well as install and use Grunt plugins. Once you're familiar with that process, you may install this plugin with this command: @@ -29,6 +30,7 @@ grunt.loadNpmTasks('grunt-purgecss'); ## The "purgecss" task ### Overview + In your project's Gruntfile, add a section named `purgecss` to the data object passed into `grunt.initConfig()`. ```js @@ -50,40 +52,46 @@ grunt.initConfig({ ### Options All of the options of purgecss are available to use with the plugins. -You will find below the main options available. For the complete list, go to the [purgecss documentation website](https://www.purgecss.com/configuration.html#options) +You will find below the main options available. For the complete list, go to the [Purgecss documentation website](https://www.purgecss.com/configuration.html#options). #### options.content + Type: `string | Object` You can specify content that should be analyzed by Purgecss with an array of filenames or globs. The files can be HTML, Pug, Blade, etc. #### options.extractors + Type: `Array` Purgecss can be adapted to suit your needs. If you notice a lot of unused CSS is not being removed, you might want to use a custom extractor. More information about extractors [here](https://www.purgecss.com/extractors.html). #### options.whitelist + Type: `Array` -You can whitelist selectors to stop Purgecss from removing them from your CSS. This can be accomplished with the options whitelist and whitelistPatterns. +You can whitelist selectors to stop Purgecss from removing them from your CSS. This can be accomplished with the options `whitelist` and `whitelistPatterns`. #### options.whitelistPatterns + Type: `Array` -You can whitelist selectors based on a regular expression with whitelistPatterns. +You can whitelist selectors based on a regular expression with `whitelistPatterns`. #### options.keyframes + Type: `boolean` Default value: `false` -If you are using a CSS animation library such as animate.css, you can remove unused keyframes by setting the keyframes option to true. +If you are using a CSS animation library such as animate.css, you can remove unused keyframes by setting the `keyframes` option to true. #### options.fontFace + Type: `boolean` Default value: `false` -If there are any unused @font-face rules in your css, you can remove them by setting the fontFace option to true. +If there are any unused `@font-face` rules in your CSS, you can remove them by setting the `fontFace` option to true. ### Usage Examples @@ -116,4 +124,3 @@ grunt.initConfig({ } }); ``` - From 910527cfee2ede5873e00e9162283f2eec45b83c Mon Sep 17 00:00:00 2001 From: Ffloriel Date: Wed, 19 Feb 2020 22:24:42 +0000 Subject: [PATCH 22/35] refactor(grunt-purgecss): add to monorepo - add grunt-purgecss to monorepo - use typescript with grunt-purgecss - update grunt-purgecss to use the last version of purgecss --- .gitignore | 3 + packages/grunt-purgecss/.babelrc | 26 ------- packages/grunt-purgecss/.circleci/config.yml | 16 ---- packages/grunt-purgecss/.eslintrc | 14 ---- packages/grunt-purgecss/.gitignore | 61 --------------- packages/grunt-purgecss/.npmrc | 1 - packages/grunt-purgecss/.travis.yml | 3 - packages/grunt-purgecss/LICENSE | 21 ------ packages/grunt-purgecss/__tests__/.eslintrc | 5 -- .../{index.test.js => index.test.ts} | 15 +++- .../examples/simple/Gruntfile.js | 19 ----- .../examples/simple/dist/app.purged.css | 3 - .../examples/simple/package.json | 15 ---- .../examples/simple/src/app.css | 11 --- .../examples/simple/src/index.html | 8 -- packages/grunt-purgecss/lib/grunt-purgecss.js | 54 ------------- packages/grunt-purgecss/package.json | 75 +++++++++---------- packages/grunt-purgecss/rollup.config.js | 15 ---- packages/grunt-purgecss/src/index.js | 27 ------- packages/grunt-purgecss/src/index.ts | 37 +++++++++ packages/grunt-purgecss/src/types/index.d.ts | 1 + packages/grunt-purgecss/src/utils.js | 9 --- packages/grunt-purgecss/tasks/purgecss.d.ts | 2 + packages/grunt-purgecss/tasks/purgecss.js | 40 +--------- packages/purgecss-webpack-plugin/.gitignore | 61 --------------- scripts/build.ts | 11 +++ 26 files changed, 105 insertions(+), 448 deletions(-) delete mode 100644 packages/grunt-purgecss/.babelrc delete mode 100644 packages/grunt-purgecss/.circleci/config.yml delete mode 100644 packages/grunt-purgecss/.eslintrc delete mode 100644 packages/grunt-purgecss/.gitignore delete mode 100644 packages/grunt-purgecss/.npmrc delete mode 100644 packages/grunt-purgecss/.travis.yml delete mode 100644 packages/grunt-purgecss/LICENSE delete mode 100644 packages/grunt-purgecss/__tests__/.eslintrc rename packages/grunt-purgecss/__tests__/{index.test.js => index.test.ts} (62%) delete mode 100644 packages/grunt-purgecss/examples/simple/Gruntfile.js delete mode 100644 packages/grunt-purgecss/examples/simple/dist/app.purged.css delete mode 100644 packages/grunt-purgecss/examples/simple/package.json delete mode 100644 packages/grunt-purgecss/examples/simple/src/app.css delete mode 100644 packages/grunt-purgecss/examples/simple/src/index.html delete mode 100644 packages/grunt-purgecss/lib/grunt-purgecss.js delete mode 100644 packages/grunt-purgecss/rollup.config.js delete mode 100644 packages/grunt-purgecss/src/index.js create mode 100644 packages/grunt-purgecss/src/index.ts create mode 100644 packages/grunt-purgecss/src/types/index.d.ts delete mode 100644 packages/grunt-purgecss/src/utils.js create mode 100644 packages/grunt-purgecss/tasks/purgecss.d.ts delete mode 100644 packages/purgecss-webpack-plugin/.gitignore diff --git a/.gitignore b/.gitignore index 318ef1b3..6e0cde55 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,9 @@ docs/.vuepress/dist/ .firebase/ .firebaserc +packages/purgecss-webpack-plugin/__tests__/js +packages/grunt-purgecss/__tests__/tmp + package-lock.json npm-shrinkwrap.json yarn.lock diff --git a/packages/grunt-purgecss/.babelrc b/packages/grunt-purgecss/.babelrc deleted file mode 100644 index 898719d9..00000000 --- a/packages/grunt-purgecss/.babelrc +++ /dev/null @@ -1,26 +0,0 @@ -{ - "env": { - "test": { - "presets": ["env"], - "plugins": ["syntax-object-rest-spread", "transform-object-rest-spread"] - }, - "development": { - "presets": [ - [ - "env", - { - "targets": { - "browsers": ["last 2 versions"] - }, - "modules": false - } - ] - ], - "plugins": [ - "external-helpers", - "syntax-object-rest-spread", - "transform-object-rest-spread" - ] - } - } -} diff --git a/packages/grunt-purgecss/.circleci/config.yml b/packages/grunt-purgecss/.circleci/config.yml deleted file mode 100644 index 5945b71a..00000000 --- a/packages/grunt-purgecss/.circleci/config.yml +++ /dev/null @@ -1,16 +0,0 @@ -version: 2 -jobs: - build: - docker: - - image: circleci/node:8.9.1 - steps: - - checkout - - run: - name: install - command: npm i - - run: - name: lint - command: npm run lint - - run: - name: test - command: npm test \ No newline at end of file diff --git a/packages/grunt-purgecss/.eslintrc b/packages/grunt-purgecss/.eslintrc deleted file mode 100644 index 673a84a4..00000000 --- a/packages/grunt-purgecss/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "extends": "eslint:recommended", - "parserOptions": { - "ecmaVersion": 6, - "sourceType": "module" - }, - "env": { - "browser": true, - "commonjs": true, - "node": true, - "es6": true - }, - "parser": "babel-eslint" -} diff --git a/packages/grunt-purgecss/.gitignore b/packages/grunt-purgecss/.gitignore deleted file mode 100644 index 0d3c8d52..00000000 --- a/packages/grunt-purgecss/.gitignore +++ /dev/null @@ -1,61 +0,0 @@ -tmp - -# Logs -logs -*.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* - -# Runtime data -pids -*.pid -*.seed -*.pid.lock - -# Directory for instrumented libs generated by jscoverage/JSCover -lib-cov - -# Coverage directory used by tools like istanbul -coverage - -# nyc test coverage -.nyc_output - -# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) -.grunt - -# Bower dependency directory (https://bower.io/) -bower_components - -# node-waf configuration -.lock-wscript - -# Compiled binary addons (http://nodejs.org/api/addons.html) -build/Release - -# Dependency directories -node_modules/ -jspm_packages/ - -# Typescript v1 declaration files -typings/ - -# Optional npm cache directory -.npm - -# Optional eslint cache -.eslintcache - -# Optional REPL history -.node_repl_history - -# Output of 'npm pack' -*.tgz - -# Yarn Integrity file -.yarn-integrity - -# dotenv environment variables file -.env - diff --git a/packages/grunt-purgecss/.npmrc b/packages/grunt-purgecss/.npmrc deleted file mode 100644 index 9cf94950..00000000 --- a/packages/grunt-purgecss/.npmrc +++ /dev/null @@ -1 +0,0 @@ -package-lock=false \ No newline at end of file diff --git a/packages/grunt-purgecss/.travis.yml b/packages/grunt-purgecss/.travis.yml deleted file mode 100644 index 98c86f74..00000000 --- a/packages/grunt-purgecss/.travis.yml +++ /dev/null @@ -1,3 +0,0 @@ -language: node_js -node_js: - - "8" \ No newline at end of file diff --git a/packages/grunt-purgecss/LICENSE b/packages/grunt-purgecss/LICENSE deleted file mode 100644 index 07b13efd..00000000 --- a/packages/grunt-purgecss/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2018 Full Human - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/packages/grunt-purgecss/__tests__/.eslintrc b/packages/grunt-purgecss/__tests__/.eslintrc deleted file mode 100644 index 7bc296da..00000000 --- a/packages/grunt-purgecss/__tests__/.eslintrc +++ /dev/null @@ -1,5 +0,0 @@ -{ - "env": { - "jest": true - } -} \ No newline at end of file diff --git a/packages/grunt-purgecss/__tests__/index.test.js b/packages/grunt-purgecss/__tests__/index.test.ts similarity index 62% rename from packages/grunt-purgecss/__tests__/index.test.js rename to packages/grunt-purgecss/__tests__/index.test.ts index 3cd8e85c..f66f35be 100644 --- a/packages/grunt-purgecss/__tests__/index.test.js +++ b/packages/grunt-purgecss/__tests__/index.test.ts @@ -1,6 +1,19 @@ -const fs = require('fs') +import { execSync } from 'child_process' +import fs from 'fs' describe('Purgecss grunt plugin', () => { + + const cwd = process.cwd() + + beforeAll(() => { + process.chdir(__dirname) + execSync('npx grunt') + }) + + afterAll(() => { + process.chdir(cwd) + }) + const files = ['simple.css'] for (const file of files) { it(`remove unused css successfully: ${file}`, () => { diff --git a/packages/grunt-purgecss/examples/simple/Gruntfile.js b/packages/grunt-purgecss/examples/simple/Gruntfile.js deleted file mode 100644 index be264330..00000000 --- a/packages/grunt-purgecss/examples/simple/Gruntfile.js +++ /dev/null @@ -1,19 +0,0 @@ -module.exports = grunt => { - - grunt.initConfig({ - purgecss: { - options: { - content: ['./src/**/*.html'] - }, - my_target: { - files: { - './dist/app.purged.css': ['./src/app.css'] - } - } - } - }) - - grunt.loadNpmTasks('grunt-purgecss') - grunt.registerTask('default', ['purgecss']); - -} \ No newline at end of file diff --git a/packages/grunt-purgecss/examples/simple/dist/app.purged.css b/packages/grunt-purgecss/examples/simple/dist/app.purged.css deleted file mode 100644 index d0212ee2..00000000 --- a/packages/grunt-purgecss/examples/simple/dist/app.purged.css +++ /dev/null @@ -1,3 +0,0 @@ -.used-class { - color: black; -} diff --git a/packages/grunt-purgecss/examples/simple/package.json b/packages/grunt-purgecss/examples/simple/package.json deleted file mode 100644 index ba216512..00000000 --- a/packages/grunt-purgecss/examples/simple/package.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "simple", - "version": "1.0.0", - "description": "", - "main": "Gruntfile.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "author": "", - "license": "ISC", - "dependencies": {}, - "devDependencies": { - "grunt-purgecss": "^1.0.0" - } -} diff --git a/packages/grunt-purgecss/examples/simple/src/app.css b/packages/grunt-purgecss/examples/simple/src/app.css deleted file mode 100644 index a213a749..00000000 --- a/packages/grunt-purgecss/examples/simple/src/app.css +++ /dev/null @@ -1,11 +0,0 @@ -.used-class { - color: black; -} - -.unused-class { - color: black; -} - -.another-one-not-found { - color: black; -} diff --git a/packages/grunt-purgecss/examples/simple/src/index.html b/packages/grunt-purgecss/examples/simple/src/index.html deleted file mode 100644 index 56954e7a..00000000 --- a/packages/grunt-purgecss/examples/simple/src/index.html +++ /dev/null @@ -1,8 +0,0 @@ - - - - -
- - - \ No newline at end of file diff --git a/packages/grunt-purgecss/lib/grunt-purgecss.js b/packages/grunt-purgecss/lib/grunt-purgecss.js deleted file mode 100644 index 2bca2f19..00000000 --- a/packages/grunt-purgecss/lib/grunt-purgecss.js +++ /dev/null @@ -1,54 +0,0 @@ -'use strict'; - -function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; } - -var Purgecss = _interopDefault(require('purgecss')); - -var getAvailableFiles = function getAvailableFiles(grunt, files) { - return files.filter(function (filepath) { - // Warn on and remove invalid source files (if nonull was set). - if (!grunt.file.exists(filepath)) { - grunt.log.warn("Source file \"" + filepath + "\" not found."); - return false; - } - return true; - }); -}; - -var _extends = Object.assign || function (target) { - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i]; - - for (var key in source) { - if (Object.prototype.hasOwnProperty.call(source, key)) { - target[key] = source[key]; - } - } - } - - return target; -}; - -var gruntPurgecss = function gruntPurgecss(grunt) { - grunt.registerMultiTask('purgecss', 'Grunt plugin for purgecss', function () { - // Merge task-specific and/or target-specific options with these defaults. - var options = this.options({}); - - // Iterate over all specified file groups. - this.files.forEach(function (f) { - var src = getAvailableFiles(grunt, f.src); - // purgecss content - var purgecssResult = new Purgecss(_extends({}, options, { - css: src - })).purge()[0].css; - - // Write the destination file. - grunt.file.write(f.dest, purgecssResult); - - // Print a success message - grunt.log.writeln('File "' + f.dest + '" created.'); - }); - }); -}; - -module.exports = gruntPurgecss; diff --git a/packages/grunt-purgecss/package.json b/packages/grunt-purgecss/package.json index c8cd7db9..902b3b03 100644 --- a/packages/grunt-purgecss/package.json +++ b/packages/grunt-purgecss/package.json @@ -1,50 +1,47 @@ { "name": "grunt-purgecss", - "version": "1.0.0", - "description": "Grunt plugin for purgecss", - "main": "./lib/grunt-purgecss.js", + "version": "2.0.6", + "description": "Grunt plugin for PurgeCSS", + "author": "Ffloriel ", + "homepage": "https://purgecss.com", + "keywords": [ + "optimize", + "optimization", + "remove", + "unused", + "css", + "html", + "rules", + "purge", + "uncss", + "purify" + ], + "license": "MIT", + "main": "lib/grunt-purgecss.js", + "module": "./lib/grunt-purgecss.esm.js", + "types": "./lib/grunt-purgecss.d.ts", "directories": { + "lib": "lib", "test": "__tests__" }, - "dependencies": { - "purgecss": "^1.0.0" - }, - "devDependencies": { - "babel-eslint": "^8.2.2", - "babel-plugin-external-helpers": "^6.22.0", - "babel-plugin-syntax-object-rest-spread": "^6.13.0", - "babel-plugin-transform-object-rest-spread": "^6.26.0", - "babel-preset-env": "^1.7.0", - "eslint": "^4.19.0", - "grunt": "~1.0.3", - "jest": "^23.1.0", - "rollup": "^0.59.4", - "rollup-plugin-babel": "^3.0.3", - "rollup-plugin-node-builtins": "^2.1.2", - "rollup-plugin-node-resolve": "^3.3.0" + "files": [ + "lib" + ], + "repository": { + "type": "git", + "url": "git+https://github.com/FullHuman/purgecss.git" }, "scripts": { - "test": "grunt && npx jest __tests__/.+.test.js", - "dev": "rollup -c rollup.config.js -w", - "build": "rollup -c rollup.config.js", - "lint": "npx eslint -c .eslintrc src/", - "prettier": "npx prettier --write --print-width 100 --tab-width 4 --no-semi --single-quote '{src,__{tests,mocks}__}/**/*.js'" + "test": "echo \"Error: run tests from root\" && exit 1" }, - "repository": { - "type": "git", - "url": "git+https://github.com/FullHuman/grunt-purgecss.git" + "dependencies": { + "@types/grunt": "^0.4.25", + "purgecss": "^2.0.6" }, - "keywords": [ - "gruntplugin", - "remove", - "unused", - "css", - "purgecss" - ], - "author": "Ffloriel", - "license": "MIT", - "bugs": { - "url": "https://github.com/FullHuman/grunt-purgecss/issues" + "devDependencies": { + "grunt": "~1.0.3" }, - "homepage": "https://github.com/FullHuman/grunt-purgecss#readme" + "bugs": { + "url": "https://github.com/FullHuman/purgecss/issues" + } } diff --git a/packages/grunt-purgecss/rollup.config.js b/packages/grunt-purgecss/rollup.config.js deleted file mode 100644 index da5370a0..00000000 --- a/packages/grunt-purgecss/rollup.config.js +++ /dev/null @@ -1,15 +0,0 @@ -import babel from "rollup-plugin-babel" -import builtins from "rollup-plugin-node-builtins" -import resolve from "rollup-plugin-node-resolve" - -export default { - input: "src/index.js", - output: [ - { - file: "lib/grunt-purgecss.js", - format: "cjs" - } - ], - plugins: [builtins(), resolve(), babel()], - external: ['purgecss'] -} diff --git a/packages/grunt-purgecss/src/index.js b/packages/grunt-purgecss/src/index.js deleted file mode 100644 index 4f28e3a7..00000000 --- a/packages/grunt-purgecss/src/index.js +++ /dev/null @@ -1,27 +0,0 @@ -import Purgecss from 'purgecss' -import { getAvailableFiles } from './utils' - -const gruntPurgecss = grunt => { - grunt.registerMultiTask('purgecss', 'Grunt plugin for purgecss', function() { - // Merge task-specific and/or target-specific options with these defaults. - var options = this.options({}) - - // Iterate over all specified file groups. - this.files.forEach(f => { - const src = getAvailableFiles(grunt, f.src) - // purgecss content - const purgecssResult = new Purgecss({ - ...options, - css: src - }).purge()[0].css - - // Write the destination file. - grunt.file.write(f.dest, purgecssResult) - - // Print a success message - grunt.log.writeln(`File "${f.dest}" created.`) - }) - }) -} - -export default gruntPurgecss diff --git a/packages/grunt-purgecss/src/index.ts b/packages/grunt-purgecss/src/index.ts new file mode 100644 index 00000000..6620ee41 --- /dev/null +++ b/packages/grunt-purgecss/src/index.ts @@ -0,0 +1,37 @@ +import PurgeCSS, { defaultOptions } from 'purgecss' +import { UserDefinedOptions } from 'purgecss/src/types' + +function getAvailableFiles(grunt: IGrunt, files: string[] | undefined = []) { + return files.filter(filepath => { + // Warn on and remove invalid source files (if nonull was set). + if (!grunt.file.exists(filepath)) { + grunt.log.warn(`Source file "${filepath}" not found.`) + return false + } + return true + }) +} + +function gruntPurgeCSS(grunt: IGrunt) { + grunt.registerMultiTask('purgecss', 'Grunt plugin for PurgeCSS', function() { + const done = this.async(); + const options = this.options(defaultOptions) + for (const file of this.files) { + const source = getAvailableFiles(grunt, file.src) + new PurgeCSS() + .purge({ + ...options, + css: source + }) + .then(purgeCSSResults => { + grunt.file.write(file.dest!, purgeCSSResults[0].css) + // Print a success message + grunt.log.writeln(`File "${file.dest}" created.`) + done() + }) + .catch(() => { done(false) }) + } + }) +} + +export default gruntPurgeCSS diff --git a/packages/grunt-purgecss/src/types/index.d.ts b/packages/grunt-purgecss/src/types/index.d.ts new file mode 100644 index 00000000..0670bb85 --- /dev/null +++ b/packages/grunt-purgecss/src/types/index.d.ts @@ -0,0 +1 @@ +import 'grunt' diff --git a/packages/grunt-purgecss/src/utils.js b/packages/grunt-purgecss/src/utils.js deleted file mode 100644 index bfdbccd4..00000000 --- a/packages/grunt-purgecss/src/utils.js +++ /dev/null @@ -1,9 +0,0 @@ -export const getAvailableFiles = (grunt, files) => - files.filter(filepath => { - // Warn on and remove invalid source files (if nonull was set). - if (!grunt.file.exists(filepath)) { - grunt.log.warn(`Source file "${filepath}" not found.`) - return false - } - return true - }) diff --git a/packages/grunt-purgecss/tasks/purgecss.d.ts b/packages/grunt-purgecss/tasks/purgecss.d.ts new file mode 100644 index 00000000..0c090b5e --- /dev/null +++ b/packages/grunt-purgecss/tasks/purgecss.d.ts @@ -0,0 +1,2 @@ +declare function gruntPurgeCSS(grunt: IGrunt): void; +export { gruntPurgeCSS as default }; diff --git a/packages/grunt-purgecss/tasks/purgecss.js b/packages/grunt-purgecss/tasks/purgecss.js index a47defc8..fdf014c9 100644 --- a/packages/grunt-purgecss/tasks/purgecss.js +++ b/packages/grunt-purgecss/tasks/purgecss.js @@ -1,39 +1 @@ -'use strict'; -var Purgecss = require('purgecss') - -module.exports = function(grunt) { - - // Please see the Grunt documentation for more information regarding task - // creation: http://gruntjs.com/creating-tasks - - grunt.registerMultiTask('purgecss', 'Grunt plugin for purgecss', function() { - // Merge task-specific and/or target-specific options with these defaults. - var options = this.options({}); - - - // Iterate over all specified file groups. - this.files.forEach(function(f) { - // Concat specified files. - var src = f.src.filter(function(filepath) { - // Warn on and remove invalid source files (if nonull was set). - if (!grunt.file.exists(filepath)) { - grunt.log.warn('Source file "' + filepath + '" not found.'); - return false; - } else { - return true; - } - }); - options.css = src; - - // purgecss - var purgecssResult = new Purgecss(options).purge()[0].css; - - // Write the destination file. - grunt.file.write(f.dest, purgecssResult); - - // Print a success message. - grunt.log.writeln('File "' + f.dest + '" created.'); - }); - }); - -}; +"use strict";function _interopDefault(e){return e&&"object"==typeof e&&"default"in e?e.default:e}var PurgeCSS=require("purgecss"),PurgeCSS__default=_interopDefault(PurgeCSS);function getAvailableFiles(e,t=[]){return t.filter(t=>!!e.file.exists(t)||(e.log.warn(`Source file "${t}" not found.`),!1))}function gruntPurgeCSS(e){e.registerMultiTask("purgecss","Grunt plugin for PurgeCSS",(function(){const t=this.async(),r=this.options(PurgeCSS.defaultOptions);for(const u of this.files){const i=getAvailableFiles(e,u.src);(new PurgeCSS__default).purge({...r,css:i}).then(r=>{e.file.write(u.dest,r[0].css),e.log.writeln(`File "${u.dest}" created.`),t()}).catch(()=>{t(!1)})}}))}module.exports=gruntPurgeCSS; diff --git a/packages/purgecss-webpack-plugin/.gitignore b/packages/purgecss-webpack-plugin/.gitignore deleted file mode 100644 index 3d465abb..00000000 --- a/packages/purgecss-webpack-plugin/.gitignore +++ /dev/null @@ -1,61 +0,0 @@ -/__tests__/js - -# Logs -logs -*.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* - -# Runtime data -pids -*.pid -*.seed -*.pid.lock - -# Directory for instrumented libs generated by jscoverage/JSCover -lib-cov - -# Coverage directory used by tools like istanbul -coverage - -# nyc test coverage -.nyc_output - -# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) -.grunt - -# Bower dependency directory (https://bower.io/) -bower_components - -# node-waf configuration -.lock-wscript - -# Compiled binary addons (http://nodejs.org/api/addons.html) -build/Release - -# Dependency directories -node_modules/ -jspm_packages/ - -# Typescript v1 declaration files -typings/ - -# Optional npm cache directory -.npm - -# Optional eslint cache -.eslintcache - -# Optional REPL history -.node_repl_history - -# Output of 'npm pack' -*.tgz - -# Yarn Integrity file -.yarn-integrity - -# dotenv environment variables file -.env - diff --git a/scripts/build.ts b/scripts/build.ts index 75b78c95..5332d4b8 100644 --- a/scripts/build.ts +++ b/scripts/build.ts @@ -61,6 +61,17 @@ async function build() { format: 'cjs' }) } + + // grunt plugin + const gruntBundle = await rollup.rollup({ + input: path.resolve(packagesDirectory, './grunt-purgecss/src/index.ts'), + plugins: [typescript({}), terser()], + external: ['purgecss'] + }) + await gruntBundle.write({ + file: path.resolve(packagesDirectory, 'grunt-purgecss', './tasks/purgecss.js'), + format: 'cjs' + }) } ;(async () => { From 6d681d66ae55a41aee36fb1005cd2ab51d6d89de Mon Sep 17 00:00:00 2001 From: Hibiki Kudo Date: Thu, 20 Feb 2020 12:53:10 +0900 Subject: [PATCH 23/35] Update README.md minor syntax error --- packages/gulp-purgecss/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/gulp-purgecss/README.md b/packages/gulp-purgecss/README.md index 0370a3ac..e91520a3 100644 --- a/packages/gulp-purgecss/README.md +++ b/packages/gulp-purgecss/README.md @@ -51,7 +51,7 @@ gulp.task('purgecss-rejected', () => { return gulp.src('src/**/*.css') .pipe(rename({ suffix: '.rejected' - }) + })) .pipe(purgecss({ content: ['src/**/*.html'], rejected: true From 3c7c2e270af6457a43428cdf1e1a9490be659e31 Mon Sep 17 00:00:00 2001 From: n1kk Date: Thu, 20 Feb 2020 16:47:22 +0100 Subject: [PATCH 24/35] Fixed contentFunction code example in postcss-purgecss plugin readme --- packages/postcss-purgecss/README.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/packages/postcss-purgecss/README.md b/packages/postcss-purgecss/README.md index aa4e0aba..8a4a8ec7 100644 --- a/packages/postcss-purgecss/README.md +++ b/packages/postcss-purgecss/README.md @@ -46,10 +46,11 @@ an angular application only scan the components template counterpart for every c ```js purgecss({ - contentFunction: (source: string) => { - (/component\.scss$/.test(source)) - ? [sourceInputFile.replace(/scss$/, 'html')] - : ['./src/**/*.html'] + contentFunction: (sourceInputFileName: string) => { + if (/component\.scss$/.test(sourceInputFileName)) + return [sourceInputFileName.replace(/scss$/, 'html')] + else + return ['./src/**/*.html'] }, }) ``` From 3218f3f074b125d4a6bef0a7dc7b8624786ee396 Mon Sep 17 00:00:00 2001 From: Ffloriel Date: Sun, 11 Feb 2018 11:10:24 +0000 Subject: [PATCH 25/35] Initial commit --- packages/purgecss-with-wordpress/.gitignore | 59 +++++++++++++++++++++ packages/purgecss-with-wordpress/LICENSE | 21 ++++++++ packages/purgecss-with-wordpress/README.md | 2 + 3 files changed, 82 insertions(+) create mode 100644 packages/purgecss-with-wordpress/.gitignore create mode 100644 packages/purgecss-with-wordpress/LICENSE create mode 100644 packages/purgecss-with-wordpress/README.md diff --git a/packages/purgecss-with-wordpress/.gitignore b/packages/purgecss-with-wordpress/.gitignore new file mode 100644 index 00000000..00cbbdf5 --- /dev/null +++ b/packages/purgecss-with-wordpress/.gitignore @@ -0,0 +1,59 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# Typescript v1 declaration files +typings/ + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variables file +.env + diff --git a/packages/purgecss-with-wordpress/LICENSE b/packages/purgecss-with-wordpress/LICENSE new file mode 100644 index 00000000..07b13efd --- /dev/null +++ b/packages/purgecss-with-wordpress/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2018 Full Human + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/packages/purgecss-with-wordpress/README.md b/packages/purgecss-with-wordpress/README.md new file mode 100644 index 00000000..2fa70e24 --- /dev/null +++ b/packages/purgecss-with-wordpress/README.md @@ -0,0 +1,2 @@ +# purgecss-with-wordpress +Purgecss with wordpress From 8572fc8577bf0ca217eed771c0540366677d9884 Mon Sep 17 00:00:00 2001 From: Ffloriel Date: Sat, 24 Feb 2018 17:20:42 +0000 Subject: [PATCH 26/35] initial commit --- packages/purgecss-with-wordpress/README.md | 47 ++++++++++++++++++- packages/purgecss-with-wordpress/index.js | 31 ++++++++++++ packages/purgecss-with-wordpress/package.json | 26 ++++++++++ 3 files changed, 102 insertions(+), 2 deletions(-) create mode 100644 packages/purgecss-with-wordpress/index.js create mode 100644 packages/purgecss-with-wordpress/package.json diff --git a/packages/purgecss-with-wordpress/README.md b/packages/purgecss-with-wordpress/README.md index 2fa70e24..d54ceb43 100644 --- a/packages/purgecss-with-wordpress/README.md +++ b/packages/purgecss-with-wordpress/README.md @@ -1,2 +1,45 @@ -# purgecss-with-wordpress -Purgecss with wordpress +# Purgecss with Wordpress + + +Based on the [gist](https://gist.github.com/frnwtr/5647673bb15ca8893642469d3b400cba) made by @frnwtr, `purgecss-with-wordpress` is a set of templates for +Wordpress CMS. + +## Getting Started + +#### Installation + +You need to install [purgecss](https://github.com/FullHuman/purgecss) first. + +Install `purgecss-with-wordpress`: +```sh +npm i --save-dev purgecss-with-wordpress +``` + +## Usage + +```js + +import Purgecss from 'purgecss' +import purgecssWordpress from 'purgecss-with-worpress' + +const purgeCss = new Purgecss({ + content: ['**/*.html'], + css: ['**/*.css'], + whitelist: purgecssWorpress.whitelist, + whitelistPatterns: purgecssWordpress.whitelistPatterns +}) +const result = purgecss.purge() +``` + +## Versioning + +Purgecss-with-wordpress use [SemVer](http://semver.org/) for versioning. + +## Acknowledgment + +Purgecss-with-wordpress is based on the [gist](https://gist.github.com/frnwtr/5647673bb15ca8893642469d3b400cba) made by @frnwtr + +## License + +This project is licensed under the MIT License - see the [LICENSE](LICENSE) file +for details. \ No newline at end of file diff --git a/packages/purgecss-with-wordpress/index.js b/packages/purgecss-with-wordpress/index.js new file mode 100644 index 00000000..b826901e --- /dev/null +++ b/packages/purgecss-with-wordpress/index.js @@ -0,0 +1,31 @@ +module.exports = { + whitelist: [ + "rtl", + "home", + "blog", + "archive", + "date", + "error404", + "logged-in", + "admin-bar", + "no-customize-support", + "custom-background", + "wp-custom-logo" + ], + whitelistPatterns: [ + /^search(-.*)?$/, + /^(.*)-template(-.*)?$/, + /^(.*)?-?single(-.*)?$/, + /^postid-(.*)?$/, + /^attachmentid-(.*)?$/, + /^attachment(-.*)?$/, + /^page(-.*)?$/, + /^(post-type-)?archive(-.*)?$/, + /^author(-.*)?$/, + /^category(-.*)?$/, + /^tag(-.*)?$/, + /^tax-(.*)?$/, + /^term-(.*)?$/, + /^(.*)?-?paged(-.*)?$/ + ] +} \ No newline at end of file diff --git a/packages/purgecss-with-wordpress/package.json b/packages/purgecss-with-wordpress/package.json new file mode 100644 index 00000000..07171971 --- /dev/null +++ b/packages/purgecss-with-wordpress/package.json @@ -0,0 +1,26 @@ +{ + "name": "purgecss-with-wordpress", + "version": "1.0.0", + "description": "purgecss with wordpress", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/FullHuman/purgecss-with-wordpress.git" + }, + "keywords": [ + "purgecss", + "wordpress", + "remove", + "unused", + "css" + ], + "author": "Ffloriel", + "license": "MIT", + "bugs": { + "url": "https://github.com/FullHuman/purgecss-with-wordpress/issues" + }, + "homepage": "https://github.com/FullHuman/purgecss-with-wordpress#readme" +} From 052e40ed70e4054ed4d6e14f817c20ec9dfb3916 Mon Sep 17 00:00:00 2001 From: Ffloriel Date: Fri, 20 Apr 2018 07:07:29 +0100 Subject: [PATCH 27/35] Merge pull request #1 from davidroyer/patch-1 Fix typo in README example --- packages/purgecss-with-wordpress/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/purgecss-with-wordpress/README.md b/packages/purgecss-with-wordpress/README.md index d54ceb43..5c248210 100644 --- a/packages/purgecss-with-wordpress/README.md +++ b/packages/purgecss-with-wordpress/README.md @@ -25,7 +25,7 @@ import purgecssWordpress from 'purgecss-with-worpress' const purgeCss = new Purgecss({ content: ['**/*.html'], css: ['**/*.css'], - whitelist: purgecssWorpress.whitelist, + whitelist: purgecssWordpress.whitelist, whitelistPatterns: purgecssWordpress.whitelistPatterns }) const result = purgecss.purge() @@ -42,4 +42,4 @@ Purgecss-with-wordpress is based on the [gist](https://gist.github.com/frnwtr/56 ## License This project is licensed under the MIT License - see the [LICENSE](LICENSE) file -for details. \ No newline at end of file +for details. From a63071b3600669389ac8900139f3726b34658961 Mon Sep 17 00:00:00 2001 From: Floriel Date: Tue, 22 Oct 2019 20:56:32 +0100 Subject: [PATCH 28/35] Merge pull request #2 from knowler/more-wp-generated-classes Add more WordPress generated classes --- packages/purgecss-with-wordpress/index.js | 61 +++++++++++++---------- 1 file changed, 34 insertions(+), 27 deletions(-) diff --git a/packages/purgecss-with-wordpress/index.js b/packages/purgecss-with-wordpress/index.js index b826901e..790938aa 100644 --- a/packages/purgecss-with-wordpress/index.js +++ b/packages/purgecss-with-wordpress/index.js @@ -1,31 +1,38 @@ module.exports = { whitelist: [ - "rtl", - "home", - "blog", - "archive", - "date", - "error404", - "logged-in", - "admin-bar", - "no-customize-support", - "custom-background", - "wp-custom-logo" + 'rtl', + 'home', + 'blog', + 'archive', + 'date', + 'error404', + 'logged-in', + 'admin-bar', + 'no-customize-support', + 'custom-background', + 'wp-custom-logo', + 'alignnone', + 'alignright', + 'alignleft', + 'wp-caption', + 'wp-caption-text', + 'screen-reader-text', + 'comment-list', ], whitelistPatterns: [ - /^search(-.*)?$/, - /^(.*)-template(-.*)?$/, - /^(.*)?-?single(-.*)?$/, - /^postid-(.*)?$/, - /^attachmentid-(.*)?$/, - /^attachment(-.*)?$/, - /^page(-.*)?$/, - /^(post-type-)?archive(-.*)?$/, - /^author(-.*)?$/, - /^category(-.*)?$/, - /^tag(-.*)?$/, - /^tax-(.*)?$/, - /^term-(.*)?$/, - /^(.*)?-?paged(-.*)?$/ - ] -} \ No newline at end of file + /^search(-.*)?$/, + /^(.*)-template(-.*)?$/, + /^(.*)?-?single(-.*)?$/, + /^postid-(.*)?$/, + /^attachmentid-(.*)?$/, + /^attachment(-.*)?$/, + /^page(-.*)?$/, + /^(post-type-)?archive(-.*)?$/, + /^author(-.*)?$/, + /^category(-.*)?$/, + /^tag(-.*)?$/, + /^tax-(.*)?$/, + /^term-(.*)?$/, + /^(.*)?-?paged(-.*)?$/, + ], +}; From aa8ff3cf88278e1f6fad254353e1ef3d487eec5d Mon Sep 17 00:00:00 2001 From: Floriel Date: Tue, 22 Oct 2019 20:56:59 +0100 Subject: [PATCH 29/35] Merge pull request #5 from peiche/readme-additions Update README.md --- packages/purgecss-with-wordpress/README.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/packages/purgecss-with-wordpress/README.md b/packages/purgecss-with-wordpress/README.md index 5c248210..6a9b7363 100644 --- a/packages/purgecss-with-wordpress/README.md +++ b/packages/purgecss-with-wordpress/README.md @@ -31,6 +31,21 @@ const purgeCss = new Purgecss({ const result = purgecss.purge() ``` +If you have additional classes you want to include in either of the `whitelist` or `whitelistPatterns`, you can include them using the spread operator: + +``` +whitelist: [ + ...purgecssWordpress.whitelist, + 'red', + 'blue', +], +whitelistPatterns: [ + ...purgecssWordpress.whitelistPatterns, + /^red/, + /blue$/, +] +``` + ## Versioning Purgecss-with-wordpress use [SemVer](http://semver.org/) for versioning. From 562a46f87c795a5684bb3fd4b0f231de83a8d935 Mon Sep 17 00:00:00 2001 From: Floriel Date: Tue, 22 Oct 2019 20:57:51 +0100 Subject: [PATCH 30/35] Merge pull request #4 from uu1t/patch-1 Fix typo in README --- packages/purgecss-with-wordpress/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/purgecss-with-wordpress/README.md b/packages/purgecss-with-wordpress/README.md index 6a9b7363..1ece8cae 100644 --- a/packages/purgecss-with-wordpress/README.md +++ b/packages/purgecss-with-wordpress/README.md @@ -20,7 +20,7 @@ npm i --save-dev purgecss-with-wordpress ```js import Purgecss from 'purgecss' -import purgecssWordpress from 'purgecss-with-worpress' +import purgecssWordpress from 'purgecss-with-wordpress' const purgeCss = new Purgecss({ content: ['**/*.html'], From 331bf0e58c619b5d700124a5323da12d38d5790c Mon Sep 17 00:00:00 2001 From: Floriel Date: Tue, 22 Oct 2019 20:59:50 +0100 Subject: [PATCH 31/35] Update README.md --- packages/purgecss-with-wordpress/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/purgecss-with-wordpress/README.md b/packages/purgecss-with-wordpress/README.md index 1ece8cae..8c4c5f96 100644 --- a/packages/purgecss-with-wordpress/README.md +++ b/packages/purgecss-with-wordpress/README.md @@ -33,7 +33,7 @@ const result = purgecss.purge() If you have additional classes you want to include in either of the `whitelist` or `whitelistPatterns`, you can include them using the spread operator: -``` +```js whitelist: [ ...purgecssWordpress.whitelist, 'red', From 0e26051de9b33e765992f7c494c3696187d778a5 Mon Sep 17 00:00:00 2001 From: Ffloriel Date: Tue, 22 Oct 2019 21:30:09 +0100 Subject: [PATCH 32/35] 1.1.0 --- packages/purgecss-with-wordpress/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/purgecss-with-wordpress/package.json b/packages/purgecss-with-wordpress/package.json index 07171971..d2322b05 100644 --- a/packages/purgecss-with-wordpress/package.json +++ b/packages/purgecss-with-wordpress/package.json @@ -1,6 +1,6 @@ { "name": "purgecss-with-wordpress", - "version": "1.0.0", + "version": "1.1.0", "description": "purgecss with wordpress", "main": "index.js", "scripts": { From 08f2416f14a960aa7af8ddf0cee8eda440b83c86 Mon Sep 17 00:00:00 2001 From: Ffloriel Date: Thu, 20 Feb 2020 23:58:01 +0000 Subject: [PATCH 33/35] refactor(purgecss-with-wordpress): add to monorepo --- packages/purgecss-with-wordpress/.gitignore | 59 ------------------- packages/purgecss-with-wordpress/README.md | 10 ++-- packages/purgecss-with-wordpress/package.json | 38 +++++++----- 3 files changed, 26 insertions(+), 81 deletions(-) delete mode 100644 packages/purgecss-with-wordpress/.gitignore diff --git a/packages/purgecss-with-wordpress/.gitignore b/packages/purgecss-with-wordpress/.gitignore deleted file mode 100644 index 00cbbdf5..00000000 --- a/packages/purgecss-with-wordpress/.gitignore +++ /dev/null @@ -1,59 +0,0 @@ -# Logs -logs -*.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* - -# Runtime data -pids -*.pid -*.seed -*.pid.lock - -# Directory for instrumented libs generated by jscoverage/JSCover -lib-cov - -# Coverage directory used by tools like istanbul -coverage - -# nyc test coverage -.nyc_output - -# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) -.grunt - -# Bower dependency directory (https://bower.io/) -bower_components - -# node-waf configuration -.lock-wscript - -# Compiled binary addons (http://nodejs.org/api/addons.html) -build/Release - -# Dependency directories -node_modules/ -jspm_packages/ - -# Typescript v1 declaration files -typings/ - -# Optional npm cache directory -.npm - -# Optional eslint cache -.eslintcache - -# Optional REPL history -.node_repl_history - -# Output of 'npm pack' -*.tgz - -# Yarn Integrity file -.yarn-integrity - -# dotenv environment variables file -.env - diff --git a/packages/purgecss-with-wordpress/README.md b/packages/purgecss-with-wordpress/README.md index 8c4c5f96..fc9d9109 100644 --- a/packages/purgecss-with-wordpress/README.md +++ b/packages/purgecss-with-wordpress/README.md @@ -1,5 +1,4 @@ -# Purgecss with Wordpress - +# PurgeCSS with Wordpress Based on the [gist](https://gist.github.com/frnwtr/5647673bb15ca8893642469d3b400cba) made by @frnwtr, `purgecss-with-wordpress` is a set of templates for Wordpress CMS. @@ -8,7 +7,7 @@ Wordpress CMS. #### Installation -You need to install [purgecss](https://github.com/FullHuman/purgecss) first. +You need to install [PurgeCSS](https://github.com/FullHuman/purgecss) first. Install `purgecss-with-wordpress`: ```sh @@ -19,16 +18,15 @@ npm i --save-dev purgecss-with-wordpress ```js -import Purgecss from 'purgecss' +import PurgeCSS from 'purgecss' import purgecssWordpress from 'purgecss-with-wordpress' -const purgeCss = new Purgecss({ +const purgeCSSResults = await new PurgeCSS().purge({ content: ['**/*.html'], css: ['**/*.css'], whitelist: purgecssWordpress.whitelist, whitelistPatterns: purgecssWordpress.whitelistPatterns }) -const result = purgecss.purge() ``` If you have additional classes you want to include in either of the `whitelist` or `whitelistPatterns`, you can include them using the spread operator: diff --git a/packages/purgecss-with-wordpress/package.json b/packages/purgecss-with-wordpress/package.json index d2322b05..077881bf 100644 --- a/packages/purgecss-with-wordpress/package.json +++ b/packages/purgecss-with-wordpress/package.json @@ -1,26 +1,32 @@ { "name": "purgecss-with-wordpress", - "version": "1.1.0", - "description": "purgecss with wordpress", - "main": "index.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/FullHuman/purgecss-with-wordpress.git" - }, + "version": "2.0.6", + "description": "PurgeCSS with wordpress", + "author": "Ffloriel ", + "homepage": "https://purgecss.com", "keywords": [ - "purgecss", "wordpress", + "optimize", + "optimization", "remove", "unused", - "css" + "css", + "html", + "rules", + "purge", + "uncss", + "purify" ], - "author": "Ffloriel", "license": "MIT", - "bugs": { - "url": "https://github.com/FullHuman/purgecss-with-wordpress/issues" + "main": "index.js", + "repository": { + "type": "git", + "url": "git+https://github.com/FullHuman/purgecss.git" }, - "homepage": "https://github.com/FullHuman/purgecss-with-wordpress#readme" + "scripts": { + "test": "echo \"Error: run tests from root\" && exit 1" + }, + "bugs": { + "url": "https://github.com/FullHuman/purgecss/issues" + } } From e1e11095123e81670902a68d137604a4740f4880 Mon Sep 17 00:00:00 2001 From: Ffloriel Date: Fri, 21 Feb 2020 00:01:50 +0000 Subject: [PATCH 34/35] chore: for privacy --- packages/grunt-purgecss/package.json | 2 +- packages/gulp-purgecss/package.json | 2 +- packages/purgecss-from-html/package.json | 2 +- packages/purgecss-from-pug/package.json | 2 +- packages/purgecss-from-twig/package.json | 2 +- packages/purgecss-webpack-plugin/package.json | 2 +- packages/purgecss-with-wordpress/package.json | 2 +- packages/purgecss/package.json | 2 +- packages/vue-cli-plugin-purgecss/package.json | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/packages/grunt-purgecss/package.json b/packages/grunt-purgecss/package.json index 902b3b03..b59b48c1 100644 --- a/packages/grunt-purgecss/package.json +++ b/packages/grunt-purgecss/package.json @@ -2,7 +2,7 @@ "name": "grunt-purgecss", "version": "2.0.6", "description": "Grunt plugin for PurgeCSS", - "author": "Ffloriel ", + "author": "Ffloriel", "homepage": "https://purgecss.com", "keywords": [ "optimize", diff --git a/packages/gulp-purgecss/package.json b/packages/gulp-purgecss/package.json index ef5d772f..4215ee6a 100644 --- a/packages/gulp-purgecss/package.json +++ b/packages/gulp-purgecss/package.json @@ -2,7 +2,7 @@ "name": "gulp-purgecss", "version": "2.0.6", "description": "Gulp plugin for purgecss", - "author": "Ffloriel ", + "author": "Ffloriel", "homepage": "https://purgecss.com", "keywords": [ "optimize", diff --git a/packages/purgecss-from-html/package.json b/packages/purgecss-from-html/package.json index d6e90710..c7cfbff0 100644 --- a/packages/purgecss-from-html/package.json +++ b/packages/purgecss-from-html/package.json @@ -2,7 +2,7 @@ "name": "purgecss-from-html", "version": "2.0.3", "description": "HTML extractor for PurgeCSS", - "author": "Ffloriel ", + "author": "Ffloriel", "homepage": "https://github.com/FullHuman/purgecss#readme", "license": "ISC", "main": "lib/purgecss-from-html.js", diff --git a/packages/purgecss-from-pug/package.json b/packages/purgecss-from-pug/package.json index c80a12ee..8736760c 100644 --- a/packages/purgecss-from-pug/package.json +++ b/packages/purgecss-from-pug/package.json @@ -2,7 +2,7 @@ "name": "purgecss-from-pug", "version": "2.0.3", "description": "Pug extractor for PurgeCSS", - "author": "Ffloriel ", + "author": "Ffloriel", "homepage": "https://github.com/FullHuman/purgecss#readme", "license": "ISC", "main": "lib/purgecss-from-pug.js", diff --git a/packages/purgecss-from-twig/package.json b/packages/purgecss-from-twig/package.json index 4019c809..557b2f49 100644 --- a/packages/purgecss-from-twig/package.json +++ b/packages/purgecss-from-twig/package.json @@ -2,7 +2,7 @@ "name": "purgecss-from-twig", "version": "2.0.3", "description": "Twig extractor for PurgeCSS", - "author": "Ffloriel ", + "author": "Ffloriel", "homepage": "https://github.com/FullHuman/purgecss#readme", "license": "ISC", "main": "lib/purgecss-from-twig.js", diff --git a/packages/purgecss-webpack-plugin/package.json b/packages/purgecss-webpack-plugin/package.json index 7c1e2d4e..4dc322c4 100644 --- a/packages/purgecss-webpack-plugin/package.json +++ b/packages/purgecss-webpack-plugin/package.json @@ -2,7 +2,7 @@ "name": "purgecss-webpack-plugin", "version": "2.0.6", "description": "PurgeCSS plugin for webpack - Remove unused css", - "author": "Ffloriel ", + "author": "Ffloriel", "homepage": "https://purgecss.com", "keywords": [ "webpack-plugin", diff --git a/packages/purgecss-with-wordpress/package.json b/packages/purgecss-with-wordpress/package.json index 077881bf..df043279 100644 --- a/packages/purgecss-with-wordpress/package.json +++ b/packages/purgecss-with-wordpress/package.json @@ -2,7 +2,7 @@ "name": "purgecss-with-wordpress", "version": "2.0.6", "description": "PurgeCSS with wordpress", - "author": "Ffloriel ", + "author": "Ffloriel", "homepage": "https://purgecss.com", "keywords": [ "wordpress", diff --git a/packages/purgecss/package.json b/packages/purgecss/package.json index c1f58f1a..e1e8786c 100644 --- a/packages/purgecss/package.json +++ b/packages/purgecss/package.json @@ -2,7 +2,7 @@ "name": "purgecss", "version": "2.0.6", "description": "Remove unused css selectors", - "author": "Ffloriel ", + "author": "Ffloriel", "homepage": "https://purgecss.com", "keywords": [ "optimize", diff --git a/packages/vue-cli-plugin-purgecss/package.json b/packages/vue-cli-plugin-purgecss/package.json index 6a4feb58..34309c90 100644 --- a/packages/vue-cli-plugin-purgecss/package.json +++ b/packages/vue-cli-plugin-purgecss/package.json @@ -2,7 +2,7 @@ "name": "@fullhuman/vue-cli-plugin-purgecss", "version": "1.0.0", "description": "vue-cli plugin to add PurgeCSS", - "author": "Ffloriel ", + "author": "Ffloriel", "homepage": "https://purgecss.com", "keywords": [ "vue-cli", From 0ce7486ad5fa949e33b7162ab4aef02ff237c297 Mon Sep 17 00:00:00 2001 From: Ffloriel Date: Tue, 25 Feb 2020 22:32:54 +0000 Subject: [PATCH 35/35] build: v2.1.0 --- lerna.json | 2 +- packages/grunt-purgecss/package.json | 4 ++-- packages/gulp-purgecss/package.json | 4 ++-- packages/postcss-purgecss/package.json | 4 ++-- packages/purgecss-from-html/package.json | 2 +- packages/purgecss-from-pug/package.json | 2 +- packages/purgecss-from-twig/package.json | 2 +- packages/purgecss-webpack-plugin/package.json | 4 ++-- packages/purgecss-with-wordpress/package.json | 2 +- packages/purgecss/package.json | 2 +- packages/vue-cli-plugin-purgecss/package.json | 2 +- 11 files changed, 15 insertions(+), 15 deletions(-) diff --git a/lerna.json b/lerna.json index 81870df9..0db84b17 100644 --- a/lerna.json +++ b/lerna.json @@ -2,5 +2,5 @@ "packages": [ "packages/*" ], - "version": "2.0.6" + "version": "2.1.0" } diff --git a/packages/grunt-purgecss/package.json b/packages/grunt-purgecss/package.json index b59b48c1..53a8c67a 100644 --- a/packages/grunt-purgecss/package.json +++ b/packages/grunt-purgecss/package.json @@ -1,6 +1,6 @@ { "name": "grunt-purgecss", - "version": "2.0.6", + "version": "2.1.0", "description": "Grunt plugin for PurgeCSS", "author": "Ffloriel", "homepage": "https://purgecss.com", @@ -36,7 +36,7 @@ }, "dependencies": { "@types/grunt": "^0.4.25", - "purgecss": "^2.0.6" + "purgecss": "^2.1.0" }, "devDependencies": { "grunt": "~1.0.3" diff --git a/packages/gulp-purgecss/package.json b/packages/gulp-purgecss/package.json index 4215ee6a..2d190791 100644 --- a/packages/gulp-purgecss/package.json +++ b/packages/gulp-purgecss/package.json @@ -1,6 +1,6 @@ { "name": "gulp-purgecss", - "version": "2.0.6", + "version": "2.1.0", "description": "Gulp plugin for purgecss", "author": "Ffloriel", "homepage": "https://purgecss.com", @@ -37,7 +37,7 @@ "dependencies": { "glob": "^7.1.6", "plugin-error": "^1.0.1", - "purgecss": "^2.0.6", + "purgecss": "^2.1.0", "through2": "^3.0.1" }, "devDependencies": { diff --git a/packages/postcss-purgecss/package.json b/packages/postcss-purgecss/package.json index baa13653..efed3f0b 100644 --- a/packages/postcss-purgecss/package.json +++ b/packages/postcss-purgecss/package.json @@ -1,6 +1,6 @@ { "name": "@fullhuman/postcss-purgecss", - "version": "2.0.6", + "version": "2.1.0", "description": "PostCSS plugin for PurgeCSS", "author": "FoundrySH ", "homepage": "https://github.com/FullHuman/purgecss#readme", @@ -27,6 +27,6 @@ }, "dependencies": { "postcss": "7.0.27", - "purgecss": "^2.0.6" + "purgecss": "^2.1.0" } } diff --git a/packages/purgecss-from-html/package.json b/packages/purgecss-from-html/package.json index c7cfbff0..106e0056 100644 --- a/packages/purgecss-from-html/package.json +++ b/packages/purgecss-from-html/package.json @@ -1,6 +1,6 @@ { "name": "purgecss-from-html", - "version": "2.0.3", + "version": "2.1.0", "description": "HTML extractor for PurgeCSS", "author": "Ffloriel", "homepage": "https://github.com/FullHuman/purgecss#readme", diff --git a/packages/purgecss-from-pug/package.json b/packages/purgecss-from-pug/package.json index 8736760c..efae4b1e 100644 --- a/packages/purgecss-from-pug/package.json +++ b/packages/purgecss-from-pug/package.json @@ -1,6 +1,6 @@ { "name": "purgecss-from-pug", - "version": "2.0.3", + "version": "2.1.0", "description": "Pug extractor for PurgeCSS", "author": "Ffloriel", "homepage": "https://github.com/FullHuman/purgecss#readme", diff --git a/packages/purgecss-from-twig/package.json b/packages/purgecss-from-twig/package.json index 557b2f49..a660da50 100644 --- a/packages/purgecss-from-twig/package.json +++ b/packages/purgecss-from-twig/package.json @@ -1,6 +1,6 @@ { "name": "purgecss-from-twig", - "version": "2.0.3", + "version": "2.1.0", "description": "Twig extractor for PurgeCSS", "author": "Ffloriel", "homepage": "https://github.com/FullHuman/purgecss#readme", diff --git a/packages/purgecss-webpack-plugin/package.json b/packages/purgecss-webpack-plugin/package.json index 4dc322c4..06a6341f 100644 --- a/packages/purgecss-webpack-plugin/package.json +++ b/packages/purgecss-webpack-plugin/package.json @@ -1,6 +1,6 @@ { "name": "purgecss-webpack-plugin", - "version": "2.0.6", + "version": "2.1.0", "description": "PurgeCSS plugin for webpack - Remove unused css", "author": "Ffloriel", "homepage": "https://purgecss.com", @@ -36,7 +36,7 @@ "test": "echo \"Error: run tests from root\" && exit 1" }, "dependencies": { - "purgecss": "^2.0.6", + "purgecss": "^2.1.0", "webpack": "^4.41.2", "webpack-sources": "^1.4.3" }, diff --git a/packages/purgecss-with-wordpress/package.json b/packages/purgecss-with-wordpress/package.json index df043279..83648a4e 100644 --- a/packages/purgecss-with-wordpress/package.json +++ b/packages/purgecss-with-wordpress/package.json @@ -1,6 +1,6 @@ { "name": "purgecss-with-wordpress", - "version": "2.0.6", + "version": "2.1.0", "description": "PurgeCSS with wordpress", "author": "Ffloriel", "homepage": "https://purgecss.com", diff --git a/packages/purgecss/package.json b/packages/purgecss/package.json index e1e8786c..cc898f9a 100644 --- a/packages/purgecss/package.json +++ b/packages/purgecss/package.json @@ -1,6 +1,6 @@ { "name": "purgecss", - "version": "2.0.6", + "version": "2.1.0", "description": "Remove unused css selectors", "author": "Ffloriel", "homepage": "https://purgecss.com", diff --git a/packages/vue-cli-plugin-purgecss/package.json b/packages/vue-cli-plugin-purgecss/package.json index 34309c90..bbb3ad39 100644 --- a/packages/vue-cli-plugin-purgecss/package.json +++ b/packages/vue-cli-plugin-purgecss/package.json @@ -1,6 +1,6 @@ { "name": "@fullhuman/vue-cli-plugin-purgecss", - "version": "1.0.0", + "version": "2.1.0", "description": "vue-cli plugin to add PurgeCSS", "author": "Ffloriel", "homepage": "https://purgecss.com",