Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add support for overriding the default extractor #183

Merged
merged 1 commit into from
Apr 20, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
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