Closed esb closed 3 months ago
irb(main):001> require 'sass-embedded'
=> true
irb(main):002> puts Sass.info
sass-embedded 1.77.0 (Embedded Host) [Ruby]
dart-sass 1.77.0 (Sass Compiler) [Dart]
=> nil
irb(main):003> puts Sass.compile_string('$white: #fff !default;').css
=> nil
I cannot reproduce your concern. Can you please provide more details on how you're running sass, and if you have more sass files?
Null check operator used on a null value
is indeed an error on Dart side, and the only code path changed between 1.75 and 1.77 where I see a null check operator is here:
This code path is used for importer caching. So for us to help you we really need to know how you're invoking Sass. Are you using dartsass-rails
or dartsass-sprockets
and how do you run sass?
This is part of a massive Rails build using Sprockets and sassc.
The gems being used are
dartsass-sprockets (3.1.0) sass-embedded (1.76.0 x86_64-linux-gnu) sassc (2.4.0) sassc-embedded (1.76.0)
The sass code that's throwing the crash comes from @uppy, so I have the following import statement which causes the crash. This file imports another file with a bunch of variable initializations using the !default syntax.
@import '@uppy/core/src/style.scss';
I'm not sure how to break it down more than that. Everything works at 1.75.0 and then breaks with 1.76.0 and 1.77.0.
Error: Null check operator used on a null value
╷
1 │ @import '@uppy/core/src/_variables.scss';
│ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
╵
/vagrant/node_modules/@uppy/core/src/_utils.scss 1:9 @import
/vagrant/node_modules/@uppy/dashboard/src/style.scss 1:9 @import
/vagrant/app/assets/stylesheets/toolbox.scss.erb 82:9 root stylesheet
Here is a bare minimum reproduction with embedded-host-node:
npm i sass-embedded @uppy/core
const sass = require('sass-embedded')
const input = `
@import '@uppy/core/src/style';
@import '@uppy/core/src/style';
`;
sass.compileString(input, {
importers: [
{
findFileUrl () {
return null
}
}
],
loadPaths: ['does_not_resolve', 'node_modules']
})
Very same reproduction for embedded-host-ruby:
require 'sass-embedded'
input = <<~SCSS
@import '@uppy/core/src/style';
@import '@uppy/core/src/style';
SCSS
begin
Sass.compile_string(
input,
importers: [
{ find_file_url: ->(*) {} }
],
load_paths: ['does_not_resolve', 'node_modules']
)
rescue Sass::CompileError => e
puts e.full_message
end
@nex3 Actually the bug is more than just this... In summary the condition is that:
In the ruby host we crash in the test case above because I delayed the implementation of tracking access of containing_url, and the first condition met. However, in embedded-host-node, it met the first condition because I forget to setting containingUrlUnused
on this line: https://github.com/sass/embedded-host-node/blob/bce32f3e8f29494c0a64dd2b4c23cfdc48ec7880/lib/src/importer-registry.ts#L212
Preparing a PR right now.
@esb https://rubygems.org/gems/sass-embedded/versions/1.77.1 has been released. Please give it a try.
I have tested 1.77.1 in my environment and can report that the issue appears to have been resolved.
The SASS default handling now throws an exception since release 1.76.0
This code causes the error
This is from the Ruby gem sass-embedded. Reverting to release 1.75.0 solves the problem.