sass
Advanced tools
Comparing version 1.70.0 to 1.71.0
@@ -1,1 +0,1 @@ | ||
{"name":"sass","description":"A pure JavaScript implementation of Sass.","license":"MIT","bugs":"https://github.com/sass/dart-sass/issues","homepage":"https://github.com/sass/dart-sass","repository":{"type":"git","url":"https://github.com/sass/dart-sass"},"author":{"name":"Natalie Weizenbaum","email":"nweiz@google.com","url":"https://github.com/nex3"},"engines":{"node":">=14.0.0"},"dependencies":{"chokidar":">=3.0.0 <4.0.0","immutable":"^4.0.0","source-map-js":">=0.6.2 <2.0.0"},"keywords":["style","scss","sass","preprocessor","css"],"types":"types/index.d.ts","exports":{"types":"./types/index.d.ts","node":{"require":"./sass.node.js","default":"./sass.node.mjs"},"default":{"require":"./sass.default.cjs","default":"./sass.default.js"}},"version":"1.70.0","bin":{"sass":"sass.js"},"main":"sass.node.js"} | ||
{"name":"sass","description":"A pure JavaScript implementation of Sass.","license":"MIT","bugs":"https://github.com/sass/dart-sass/issues","homepage":"https://github.com/sass/dart-sass","repository":{"type":"git","url":"https://github.com/sass/dart-sass"},"author":{"name":"Natalie Weizenbaum","email":"nweiz@google.com","url":"https://github.com/nex3"},"engines":{"node":">=14.0.0"},"dependencies":{"chokidar":">=3.0.0 <4.0.0","immutable":"^4.0.0","source-map-js":">=0.6.2 <2.0.0"},"keywords":["style","scss","sass","preprocessor","css"],"types":"types/index.d.ts","exports":{"types":"./types/index.d.ts","node":{"require":"./sass.node.js","default":"./sass.node.mjs"},"default":{"require":"./sass.default.cjs","default":"./sass.default.js"}},"version":"1.71.0","bin":{"sass":"sass.js"},"main":"sass.node.js"} |
@@ -311,3 +311,136 @@ import {Syntax} from './options'; | ||
declare const nodePackageImporterKey: unique symbol; | ||
/** | ||
* The built-in Node.js package importer. This loads pkg: URLs from node_modules | ||
* according to the standard Node.js resolution algorithm. | ||
* | ||
* A Node.js package importer is exposed as a class that can be added to the | ||
* `importers` option. | ||
* | ||
*```js | ||
* const sass = require('sass'); | ||
* sass.compileString('@use "pkg:vuetify', { | ||
* importers: [new sass.NodePackageImporter()] | ||
* }); | ||
*``` | ||
* | ||
* ## Writing Sass packages | ||
* | ||
* Package authors can control what is exposed to their users through their | ||
* `package.json` manifest. The recommended method is to add a `sass` | ||
* conditional export to `package.json`. | ||
* | ||
* ```json | ||
* // node_modules/uicomponents/package.json | ||
* { | ||
* "exports": { | ||
* ".": { | ||
* "sass": "./src/scss/index.scss", | ||
* "import": "./dist/js/index.mjs", | ||
* "default": "./dist/js/index.js" | ||
* } | ||
* } | ||
* } | ||
* ``` | ||
* | ||
* This allows a package user to write `@use "pkg:uicomponents"` to load the | ||
* file at `node_modules/uicomponents/src/scss/index.scss`. | ||
* | ||
* The Node.js package importer supports the variety of formats supported by | ||
* Node.js [package entry points], allowing authors to expose multiple subpaths. | ||
* | ||
* [package entry points]: | ||
* https://nodejs.org/api/packages.html#package-entry-points | ||
* | ||
* ```json | ||
* // node_modules/uicomponents/package.json | ||
* { | ||
* "exports": { | ||
* ".": { | ||
* "sass": "./src/scss/index.scss", | ||
* }, | ||
* "./colors": { | ||
* "sass": "./src/scss/_colors.scss", | ||
* }, | ||
* "./theme/*": { | ||
* "sass": "./src/scss/theme/*.scss", | ||
* }, | ||
* } | ||
* } | ||
* ``` | ||
* | ||
* This allows a package user to write: | ||
* | ||
* - `@use "pkg:uicomponents";` to import the root export. | ||
* - `@use "pkg:uicomponents/colors";` to import the colors partial. | ||
* - `@use "pkg:uicomponents/theme/purple";` to import a purple theme. | ||
* | ||
* Note that while library users can rely on the importer to resolve | ||
* [partials](https://sass-lang.com/documentation/at-rules/use#partials), [index | ||
* files](https://sass-lang.com/documentation/at-rules/use#index-files), and | ||
* extensions, library authors must specify the entire file path in `exports`. | ||
* | ||
* In addition to the `sass` condition, the `style` condition is also | ||
* acceptable. Sass will match the `default` condition if it's a relevant file | ||
* type, but authors are discouraged from relying on this. Notably, the key | ||
* order matters, and the importer will resolve to the first value with a key | ||
* that is `sass`, `style`, or `default`, so you should always put `default` | ||
* last. | ||
* | ||
* To help package authors who haven't transitioned to package entry points | ||
* using the `exports` field, the Node.js package importer provides several | ||
* fallback options. If the `pkg:` URL does not have a subpath, the Node.js | ||
* package importer will look for a `sass` or `style` key at the root of | ||
* `package.json`. | ||
* | ||
* ```json | ||
* // node_modules/uicomponents/package.json | ||
* { | ||
* "sass": "./src/scss/index.scss", | ||
* } | ||
* ``` | ||
* | ||
* This allows a user to write `@use "pkg:uicomponents";` to import the | ||
* `index.scss` file. | ||
* | ||
* Finally, the Node.js package importer will look for an `index` file at the | ||
* package root, resolving partials and extensions. For example, if the file | ||
* `_index.scss` exists in the package root of `uicomponents`, a user can import | ||
* that with `@use "pkg:uicomponents";`. | ||
* | ||
* If a `pkg:` URL includes a subpath that doesn't have a match in package entry | ||
* points, the Node.js importer will attempt to find that file relative to the | ||
* package root, resolving for file extensions, partials and index files. For | ||
* example, if the file `src/sass/_colors.scss` exists in the `uicomponents` | ||
* package, a user can import that file using `@use | ||
* "pkg:uicomponents/src/sass/colors";`. | ||
* | ||
* @compatibility dart: "2.0", node: false | ||
* @category Importer | ||
*/ | ||
export class NodePackageImporter { | ||
/** Used to distinguish this type from any arbitrary object. */ | ||
private readonly [nodePackageImporterKey]: true; | ||
/** | ||
* The NodePackageImporter has an optional `entryPointDirectory` option, which | ||
* is the directory where the Node Package Importer should start when | ||
* resolving `pkg:` URLs in sources other than files on disk. This will be | ||
* used as the `parentURL` in the [Node Module | ||
* Resolution](https://nodejs.org/api/esm.html#resolution-algorithm-specification) | ||
* algorithm. | ||
* | ||
* In order to be found by the Node Package Importer, a package will need to | ||
* be inside a node_modules folder located in the `entryPointDirectory`, or | ||
* one of its parent directories, up to the filesystem root. | ||
* | ||
* Relative paths will be resolved relative to the current working directory. | ||
* If a path is not provided, the default value of `require.main.filename` | ||
* will be used. | ||
*/ | ||
constructor(entryPointDirectory?: string); | ||
} | ||
/** | ||
* The result of successfully loading a stylesheet with an {@link Importer}. | ||
@@ -314,0 +447,0 @@ * |
@@ -22,2 +22,3 @@ // This is a mirror of the JS API definitions in `spec/js-api`, but with comments | ||
ImporterResult, | ||
NodePackageImporter, | ||
} from './importer'; | ||
@@ -24,0 +25,0 @@ export {Logger, SourceSpan, SourceLocation} from './logger'; |
import {Logger} from '../logger'; | ||
import {LegacyImporter} from './importer'; | ||
import {LegacyFunction} from './function'; | ||
import {NodePackageImporter} from '../importer'; | ||
@@ -511,2 +512,20 @@ /** | ||
logger?: Logger; | ||
/** | ||
* If this option is set to an instance of `NodePackageImporter`, Sass will | ||
* use the built-in Node.js package importer to resolve Sass files with a | ||
* `pkg:` URL scheme. Details for library authors and users can be found in | ||
* the {@link NodePackageImporter} documentation. | ||
* | ||
* @example | ||
* ```js | ||
* sass.renderSync({ | ||
* data: '@use "pkg:vuetify";', | ||
* pkgImporter: new sass.NodePackageImporter() | ||
* }); | ||
* ``` | ||
* @category Plugins | ||
* @compatibility dart: "2.0", node: false | ||
*/ | ||
pkgImporter?: NodePackageImporter; | ||
} | ||
@@ -513,0 +532,0 @@ |
@@ -1,2 +0,2 @@ | ||
import {FileImporter, Importer} from './importer'; | ||
import {FileImporter, Importer, NodePackageImporter} from './importer'; | ||
import {Logger} from './logger'; | ||
@@ -211,4 +211,4 @@ import {Value} from './value'; | ||
* | ||
* - Each {@link Importer} or {@link FileImporter} in {@link importers}, in | ||
* order. | ||
* - Each {@link Importer}, {@link FileImporter}, or | ||
* {@link NodePackageImporter} in {@link importers}, in order. | ||
* | ||
@@ -222,3 +222,3 @@ * - Each load path in {@link loadPaths}, in order. | ||
*/ | ||
importers?: (Importer<sync> | FileImporter<sync>)[]; | ||
importers?: (Importer<sync> | FileImporter<sync> | NodePackageImporter)[]; | ||
@@ -225,0 +225,0 @@ /** |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is too big to display
5458
5164964