Skip to content

Commit

Permalink
Merge pull request #183 from adamwathan/override-default-extractor
Browse files Browse the repository at this point in the history
Add support for overriding the default extractor
  • Loading branch information
Ffloriel committed Apr 20, 2019
2 parents 3f80766 + 292acf5 commit 0dfb5de
Show file tree
Hide file tree
Showing 6 changed files with 83 additions and 43 deletions.
36 changes: 36 additions & 0 deletions __tests__/purgecss.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -339,6 +339,42 @@ describe('special characters, with custom Extractor as a function', () => {
})
})

describe('special characters, overriding the default Extractor', () => {
let purgecssResult
class CustomExtractor {
static extract(content) {
return content.match(/[A-z0-9-:/]+/g)
}
}

beforeAll(() => {
purgecssResult = new Purgecss({
content: [`${root}special_characters/special_characters.js`],
css: [`${root}special_characters/special_characters.css`],
defaultExtractor: CustomExtractor
}).purge()[0].css
})

it('finds tailwind class', () => {
expect(purgecssResult.includes('md\\:w-1\\/3')).toBe(true)
})
})

describe('special characters, overriding the default Extractor with a function', () => {
let purgecssResult
beforeAll(() => {
purgecssResult = new Purgecss({
content: [`${root}special_characters/special_characters.js`],
css: [`${root}special_characters/special_characters.css`],
defaultExtractor: content => content.match(/[A-z0-9-:/]+/g),
}).purge()[0].css
})

it('finds tailwind class', () => {
expect(purgecssResult.includes('md\\:w-1\\/3')).toBe(true)
})
})

describe('nth-child', () => {
let purgecssResult
beforeAll(() => {
Expand Down
3 changes: 2 additions & 1 deletion flow-typed/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ type RawContent = {
declare type Options = {
content: Array<string | RawContent>,
css: Array<string | RawContent>,
defaultExtractor?: Object,
extractors?: Array<ExtractorsObj>,
whitelist?: Array<string>,
whitelistPatterns?: Array<RegExp>,
Expand Down Expand Up @@ -36,4 +37,4 @@ declare type AtRules = {
fontFace: Array<Object>
}

declare type IgnoreType = "next" | "start" | "end"
declare type IgnoreType = "next" | "start" | "end"
39 changes: 20 additions & 19 deletions lib/purgecss.es.js
Original file line number Diff line number Diff line change
Expand Up @@ -303,10 +303,28 @@ var substr = 'ab'.substr(-1) === 'b' ? function (str, start, len) {
return str.substr(start, len);
};

var DefaultExtractor =
/*#__PURE__*/
function () {
function DefaultExtractor() {
_classCallCheck(this, DefaultExtractor);
}

_createClass(DefaultExtractor, null, [{
key: "extract",
value: function extract(content) {
return content.match(/[A-Za-z0-9_-]+/g) || [];
}
}]);

return DefaultExtractor;
}();

//
var defaultOptions = {
css: [],
content: [],
defaultExtractor: DefaultExtractor,
extractors: [],
whitelist: [],
output: undefined,
Expand Down Expand Up @@ -336,23 +354,6 @@ var CSS_WHITELIST = ['*', '::-webkit-scrollbar', '::selection', ':root', '::befo

var SELECTOR_STANDARD_TYPES = ['class', 'id', 'universal', 'pseudo'];

var DefaultExtractor =
/*#__PURE__*/
function () {
function DefaultExtractor() {
_classCallCheck(this, DefaultExtractor);
}

_createClass(DefaultExtractor, null, [{
key: "extract",
value: function extract(content) {
return content.match(/[A-Za-z0-9_-]+/g) || [];
}
}]);

return DefaultExtractor;
}();

var Purgecss =
/*#__PURE__*/
function () {
Expand Down Expand Up @@ -698,13 +699,13 @@ function () {
key: "getFileExtractor",
value: function getFileExtractor(filename) {
var extractors = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
if (!extractors.length) return DefaultExtractor;
if (!extractors.length) return this.options.defaultExtractor;
var extractorObj = extractors.find(function (extractor) {
return extractor.extensions.find(function (ext) {
return filename.endsWith(ext);
});
}) || {
extractor: DefaultExtractor
extractor: this.options.defaultExtractor
};
return extractorObj.extractor;
}
Expand Down
39 changes: 20 additions & 19 deletions lib/purgecss.js
Original file line number Diff line number Diff line change
Expand Up @@ -307,10 +307,28 @@ var substr = 'ab'.substr(-1) === 'b' ? function (str, start, len) {
return str.substr(start, len);
};

var DefaultExtractor =
/*#__PURE__*/
function () {
function DefaultExtractor() {
_classCallCheck(this, DefaultExtractor);
}

_createClass(DefaultExtractor, null, [{
key: "extract",
value: function extract(content) {
return content.match(/[A-Za-z0-9_-]+/g) || [];
}
}]);

return DefaultExtractor;
}();

//
var defaultOptions = {
css: [],
content: [],
defaultExtractor: DefaultExtractor,
extractors: [],
whitelist: [],
output: undefined,
Expand Down Expand Up @@ -340,23 +358,6 @@ var CSS_WHITELIST = ['*', '::-webkit-scrollbar', '::selection', ':root', '::befo

var SELECTOR_STANDARD_TYPES = ['class', 'id', 'universal', 'pseudo'];

var DefaultExtractor =
/*#__PURE__*/
function () {
function DefaultExtractor() {
_classCallCheck(this, DefaultExtractor);
}

_createClass(DefaultExtractor, null, [{
key: "extract",
value: function extract(content) {
return content.match(/[A-Za-z0-9_-]+/g) || [];
}
}]);

return DefaultExtractor;
}();

var Purgecss =
/*#__PURE__*/
function () {
Expand Down Expand Up @@ -702,13 +703,13 @@ function () {
key: "getFileExtractor",
value: function getFileExtractor(filename) {
var extractors = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
if (!extractors.length) return DefaultExtractor;
if (!extractors.length) return this.options.defaultExtractor;
var extractorObj = extractors.find(function (extractor) {
return extractor.extensions.find(function (ext) {
return filename.endsWith(ext);
});
}) || {
extractor: DefaultExtractor
extractor: this.options.defaultExtractor
};
return extractorObj.extractor;
}
Expand Down
3 changes: 3 additions & 0 deletions src/constants/defaultOptions.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
// @flow

import DefaultExtractor from '../Extractors/DefaultExtractor'

const defaultOptions: Options = {
css: [],
content: [],
defaultExtractor: DefaultExtractor,
extractors: [],
whitelist: [],
output: undefined,
Expand Down
6 changes: 2 additions & 4 deletions src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,6 @@ import {
import CSS_WHITELIST from './constants/cssWhitelist'
import SELECTOR_STANDARD_TYPES from './constants/selectorTypes'

import DefaultExtractor from './Extractors/DefaultExtractor'

class Purgecss {
options: Options
root: Object
Expand Down Expand Up @@ -228,11 +226,11 @@ class Purgecss {
* @param {array} extractors Array of extractors definition objects
*/
getFileExtractor(filename: string, extractors: Array<ExtractorsObj> = []) {
if (!extractors.length) return DefaultExtractor
if (!extractors.length) return this.options.defaultExtractor

const extractorObj = extractors.find(extractor =>
extractor.extensions.find(ext => filename.endsWith(ext))
) || { extractor: DefaultExtractor }
) || { extractor: this.options.defaultExtractor }
return extractorObj.extractor
}
Expand Down

0 comments on commit 0dfb5de

Please sign in to comment.