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

feat: support sass-embedded #1011

Closed
wants to merge 5 commits into from
Closed
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
418 changes: 418 additions & 0 deletions package-lock.json

Large diffs are not rendered by default.

5 changes: 5 additions & 0 deletions package.json
Expand Up @@ -41,6 +41,7 @@
"fibers": ">= 3.1.0",
"node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0",
"sass": "^1.3.0",
"sass-embedded": "*",
"webpack": "^5.0.0"
},
"peerDependenciesMeta": {
Expand All @@ -50,6 +51,9 @@
"sass": {
"optional": true
},
"sass-embedded": {
"optional": true
},
"fibers": {
"optional": true
}
Expand Down Expand Up @@ -90,6 +94,7 @@
"npm-run-all": "^4.1.5",
"prettier": "^2.3.2",
"sass": "^1.45.2",
"sass-embedded": "^1.0.0-beta.8",
"semver": "^7.3.5",
"standard-version": "^9.3.1",
"style-loader": "^3.2.1",
Expand Down
9 changes: 7 additions & 2 deletions src/utils.js
Expand Up @@ -78,6 +78,9 @@ function getSassImplementation(loaderContext, implementation) {
} else if (implementationName === "node-sass") {
// eslint-disable-next-line consistent-return
return resolvedImplementation;
} else if (implementationName === "sass-embedded") {
// eslint-disable-next-line consistent-return
return resolvedImplementation;
}

loaderContext.emitError(
Expand Down Expand Up @@ -626,9 +629,11 @@ let nodeSassJobQueue = null;
* @returns {Function}
*/
function getRenderFunctionFromSassImplementation(implementation) {
const isDartSass = implementation.info.includes("dart-sass");
const isNewSass =
implementation.info.includes("dart-sass") ||
implementation.info.includes("sass-embedded");

if (isDartSass) {
if (isNewSass) {
return implementation.render.bind(implementation);
}

Expand Down
88 changes: 88 additions & 0 deletions test/__snapshots__/additionalData-option.test.js.snap
Expand Up @@ -54,6 +54,34 @@ exports[`additionalData option should use same EOL on all os (node-sass) (scss):

exports[`additionalData option should use same EOL on all os (node-sass) (scss): warnings 1`] = `Array []`;

exports[`additionalData option should use same EOL on all os (sass-embedded) (sass): css 1`] = `
"a {
color: hotpink;
}

body {
color: hotpink;
}"
`;

exports[`additionalData option should use same EOL on all os (sass-embedded) (sass): errors 1`] = `Array []`;

exports[`additionalData option should use same EOL on all os (sass-embedded) (sass): warnings 1`] = `Array []`;

exports[`additionalData option should use same EOL on all os (sass-embedded) (scss): css 1`] = `
"a {
color: red;
}

body {
color: hotpink;
}"
`;

exports[`additionalData option should use same EOL on all os (sass-embedded) (scss): errors 1`] = `Array []`;

exports[`additionalData option should use same EOL on all os (sass-embedded) (scss): warnings 1`] = `Array []`;

exports[`additionalData option should work as a function (dart-sass) (sass): css 1`] = `
"body {
color: hotpink;
Expand Down Expand Up @@ -94,6 +122,26 @@ exports[`additionalData option should work as a function (node-sass) (scss): err

exports[`additionalData option should work as a function (node-sass) (scss): warnings 1`] = `Array []`;

exports[`additionalData option should work as a function (sass-embedded) (sass): css 1`] = `
"body {
color: hotpink;
}"
`;

exports[`additionalData option should work as a function (sass-embedded) (sass): errors 1`] = `Array []`;

exports[`additionalData option should work as a function (sass-embedded) (sass): warnings 1`] = `Array []`;

exports[`additionalData option should work as a function (sass-embedded) (scss): css 1`] = `
"body {
color: hotpink;
}"
`;

exports[`additionalData option should work as a function (sass-embedded) (scss): errors 1`] = `Array []`;

exports[`additionalData option should work as a function (sass-embedded) (scss): warnings 1`] = `Array []`;

exports[`additionalData option should work as a string (dart-sass) (sass): css 1`] = `
"body {
color: hotpink;
Expand Down Expand Up @@ -134,6 +182,26 @@ exports[`additionalData option should work as a string (node-sass) (scss): error

exports[`additionalData option should work as a string (node-sass) (scss): warnings 1`] = `Array []`;

exports[`additionalData option should work as a string (sass-embedded) (sass): css 1`] = `
"body {
color: hotpink;
}"
`;

exports[`additionalData option should work as a string (sass-embedded) (sass): errors 1`] = `Array []`;

exports[`additionalData option should work as a string (sass-embedded) (sass): warnings 1`] = `Array []`;

exports[`additionalData option should work as a string (sass-embedded) (scss): css 1`] = `
"body {
color: hotpink;
}"
`;

exports[`additionalData option should work as a string (sass-embedded) (scss): errors 1`] = `Array []`;

exports[`additionalData option should work as a string (sass-embedded) (scss): warnings 1`] = `Array []`;

exports[`additionalData option should work as an async function (dart-sass) (sass): css 1`] = `
"body {
color: hotpink;
Expand Down Expand Up @@ -173,3 +241,23 @@ exports[`additionalData option should work as an async function (node-sass) (scs
exports[`additionalData option should work as an async function (node-sass) (scss): errors 1`] = `Array []`;

exports[`additionalData option should work as an async function (node-sass) (scss): warnings 1`] = `Array []`;

exports[`additionalData option should work as an async function (sass-embedded) (sass): css 1`] = `
"body {
color: hotpink;
}"
`;

exports[`additionalData option should work as an async function (sass-embedded) (sass): errors 1`] = `Array []`;

exports[`additionalData option should work as an async function (sass-embedded) (sass): warnings 1`] = `Array []`;

exports[`additionalData option should work as an async function (sass-embedded) (scss): css 1`] = `
"body {
color: hotpink;
}"
`;

exports[`additionalData option should work as an async function (sass-embedded) (scss): errors 1`] = `Array []`;

exports[`additionalData option should work as an async function (sass-embedded) (scss): warnings 1`] = `Array []`;
4 changes: 4 additions & 0 deletions test/__snapshots__/implementation-option.test.js.snap
Expand Up @@ -16,6 +16,10 @@ exports[`implementation option sass_string: errors 1`] = `Array []`;

exports[`implementation option sass_string: warnings 1`] = `Array []`;

exports[`implementation option sass-embedded: errors 1`] = `Array []`;

exports[`implementation option sass-embedded: warnings 1`] = `Array []`;

exports[`implementation option should not swallow an error when trying to load a sass implementation: errors 1`] = `
Array [
"ModuleError: Module Error (from ../src/cjs.js):
Expand Down