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
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
5458
5164964