First Commit
This commit is contained in:
20
node_modules/postcss-load-config/LICENSE
generated
vendored
Normal file
20
node_modules/postcss-load-config/LICENSE
generated
vendored
Normal file
@@ -0,0 +1,20 @@
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright Michael Ciniawsky <michael.ciniawsky@gmail.com>
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
this software and associated documentation files (the "Software"), to deal in
|
||||
the Software without restriction, including without limitation the rights to
|
||||
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||||
the Software, and to permit persons to whom the Software is furnished to do so,
|
||||
subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
466
node_modules/postcss-load-config/README.md
generated
vendored
Normal file
466
node_modules/postcss-load-config/README.md
generated
vendored
Normal file
@@ -0,0 +1,466 @@
|
||||
|
||||
|
||||
<div align="center">
|
||||
<img width="100" height="100" title="Load Options" src="http://michael-ciniawsky.github.io/postcss-load-options/logo.svg">
|
||||
<a href="https://github.com/postcss/postcss">
|
||||
<img width="110" height="110" title="PostCSS" src="http://postcss.github.io/postcss/logo.svg" hspace="10">
|
||||
</a>
|
||||
<img width="100" height="100" title="Load Plugins" src="http://michael-ciniawsky.github.io/postcss-load-plugins/logo.svg">
|
||||
<h1>Load Config</h1>
|
||||
</div>
|
||||
|
||||
<h2 align="center">Install</h2>
|
||||
|
||||
```bash
|
||||
npm i -D postcss-load-config
|
||||
```
|
||||
|
||||
<h2 align="center">Usage</h2>
|
||||
|
||||
```bash
|
||||
npm i -S|-D postcss-plugin
|
||||
```
|
||||
|
||||
Install all required PostCSS plugins and save them to your **package.json** `dependencies`/`devDependencies`
|
||||
|
||||
Then create a PostCSS config file by choosing one of the following formats
|
||||
|
||||
### `package.json`
|
||||
|
||||
Create a **`postcss`** section in your project's **`package.json`**
|
||||
|
||||
```
|
||||
Project (Root)
|
||||
|– client
|
||||
|– public
|
||||
|
|
||||
|- package.json
|
||||
```
|
||||
|
||||
```json
|
||||
{
|
||||
"postcss": {
|
||||
"parser": "sugarss",
|
||||
"map": false,
|
||||
"plugins": {
|
||||
"postcss-plugin": {}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### `.postcssrc`
|
||||
|
||||
Create a **`.postcssrc`** file in JSON or YAML format
|
||||
|
||||
> ℹ️ It's recommended to use an extension (e.g **`.postcssrc.json`** or **`.postcssrc.yml`**) instead of `.postcssrc`
|
||||
|
||||
```
|
||||
Project (Root)
|
||||
|– client
|
||||
|– public
|
||||
|
|
||||
|- (.postcssrc|.postcssrc.json|.postcssrc.yml)
|
||||
|- package.json
|
||||
```
|
||||
|
||||
**`.postcssrc.json`**
|
||||
```json
|
||||
{
|
||||
"parser": "sugarss",
|
||||
"map": false,
|
||||
"plugins": {
|
||||
"postcss-plugin": {}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**`.postcssrc.yml`**
|
||||
```yaml
|
||||
parser: sugarss
|
||||
map: false
|
||||
plugins:
|
||||
postcss-plugin: {}
|
||||
```
|
||||
|
||||
### `.postcssrc.js` or `postcss.config.js`
|
||||
|
||||
You may need some logic within your config.
|
||||
In this case create JS file named:
|
||||
- `.postcssrc.js`
|
||||
- `.postcssrc.mjs`
|
||||
- `.postcssrc.cjs`
|
||||
- `.postcssrc.ts`
|
||||
- `.postcssrc.cts`
|
||||
- `postcss.config.js`
|
||||
- `postcss.config.mjs`
|
||||
- `postcss.config.cjs`
|
||||
- `postcss.config.ts`
|
||||
- `postcss.config.cts`
|
||||
|
||||
```
|
||||
Project (Root)
|
||||
|– client
|
||||
|– public
|
||||
|- (.postcssrc|postcss.config).(js|mjs|cjs|ts|cts)
|
||||
|- package.json
|
||||
```
|
||||
|
||||
You can export the config as an `{Object}`
|
||||
|
||||
**.postcssrc.js**
|
||||
```js
|
||||
module.exports = {
|
||||
parser: 'sugarss',
|
||||
map: false,
|
||||
plugins: {
|
||||
'postcss-plugin': {}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Or export a `{Function}` that returns the config (more about the `ctx` param below)
|
||||
|
||||
**.postcssrc.js**
|
||||
```js
|
||||
module.exports = (ctx) => ({
|
||||
parser: ctx.parser ? 'sugarss' : false,
|
||||
map: ctx.env === 'development' ? ctx.map : false,
|
||||
plugins: {
|
||||
'postcss-plugin': ctx.options.plugin
|
||||
}
|
||||
})
|
||||
```
|
||||
|
||||
Plugins can be loaded either using an `{Object}` or an `{Array}`
|
||||
|
||||
#### `{Object}`
|
||||
|
||||
**.postcssrc.js**
|
||||
```js
|
||||
module.exports = ({ env }) => ({
|
||||
...options,
|
||||
plugins: {
|
||||
'postcss-plugin': env === 'production' ? {} : false
|
||||
}
|
||||
})
|
||||
```
|
||||
|
||||
> ℹ️ When using an `{Object}`, the key can be a Node.js module name, a path to a JavaScript file that is relative to the directory of the PostCSS config file, or an absolute path to a JavaScript file.
|
||||
|
||||
#### `{Array}`
|
||||
|
||||
**.postcssrc.js**
|
||||
```js
|
||||
module.exports = ({ env }) => ({
|
||||
...options,
|
||||
plugins: [
|
||||
env === 'production' ? require('postcss-plugin')() : false
|
||||
]
|
||||
})
|
||||
```
|
||||
> :warning: When using an `{Array}`, make sure to `require()` each plugin
|
||||
|
||||
<h2 align="center">Options</h2>
|
||||
|
||||
|Name|Type|Default|Description|
|
||||
|:--:|:--:|:-----:|:----------|
|
||||
|[**`to`**](#to)|`{String}`|`undefined`|Destination File Path|
|
||||
|[**`map`**](#map)|`{String\|Object}`|`false`|Enable/Disable Source Maps|
|
||||
|[**`from`**](#from)|`{String}`|`undefined`|Source File Path|
|
||||
|[**`parser`**](#parser)|`{String\|Function}`|`false`|Custom PostCSS Parser|
|
||||
|[**`syntax`**](#syntax)|`{String\|Function}`|`false`|Custom PostCSS Syntax|
|
||||
|[**`stringifier`**](#stringifier)|`{String\|Function}`|`false`|Custom PostCSS Stringifier|
|
||||
|
||||
### `parser`
|
||||
|
||||
**.postcssrc.js**
|
||||
```js
|
||||
module.exports = {
|
||||
parser: 'sugarss'
|
||||
}
|
||||
```
|
||||
|
||||
### `syntax`
|
||||
|
||||
**.postcssrc.js**
|
||||
```js
|
||||
module.exports = {
|
||||
syntax: 'postcss-scss'
|
||||
}
|
||||
```
|
||||
|
||||
### `stringifier`
|
||||
|
||||
**.postcssrc.js**
|
||||
```js
|
||||
module.exports = {
|
||||
stringifier: 'midas'
|
||||
}
|
||||
```
|
||||
|
||||
### [**`map`**](https://github.com/postcss/postcss/blob/master/docs/source-maps.md)
|
||||
|
||||
**.postcssrc.js**
|
||||
```js
|
||||
module.exports = {
|
||||
map: 'inline'
|
||||
}
|
||||
```
|
||||
|
||||
> :warning: In most cases `options.from` && `options.to` are set by the third-party which integrates this package (CLI, gulp, webpack). It's unlikely one needs to set/use `options.from` && `options.to` within a config file. Unless you're a third-party plugin author using this module and its Node API directly **dont't set `options.from` && `options.to` yourself**
|
||||
|
||||
### `to`
|
||||
|
||||
```js
|
||||
module.exports = {
|
||||
to: 'path/to/dest.css'
|
||||
}
|
||||
```
|
||||
|
||||
### `from`
|
||||
|
||||
```js
|
||||
module.exports = {
|
||||
from: 'path/to/src.css'
|
||||
}
|
||||
```
|
||||
|
||||
<h2 align="center">Plugins</h2>
|
||||
|
||||
### `{} || null`
|
||||
|
||||
The plugin will be loaded with defaults
|
||||
|
||||
```js
|
||||
'postcss-plugin': {} || null
|
||||
```
|
||||
|
||||
**.postcssrc.js**
|
||||
```js
|
||||
module.exports = {
|
||||
plugins: {
|
||||
'postcss-plugin': {} || null
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
> :warning: `{}` must be an **empty** `{Object}` literal
|
||||
|
||||
### `{Object}`
|
||||
|
||||
The plugin will be loaded with given options
|
||||
|
||||
```js
|
||||
'postcss-plugin': { option: '', option: '' }
|
||||
```
|
||||
|
||||
**.postcssrc.js**
|
||||
```js
|
||||
module.exports = {
|
||||
plugins: {
|
||||
'postcss-plugin': { option: '', option: '' }
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### `false`
|
||||
|
||||
The plugin will not be loaded
|
||||
|
||||
```js
|
||||
'postcss-plugin': false
|
||||
```
|
||||
|
||||
**.postcssrc.js**
|
||||
```js
|
||||
module.exports = {
|
||||
plugins: {
|
||||
'postcss-plugin': false
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### `Ordering`
|
||||
|
||||
Plugin **execution order** is determined by declaration in the plugins section (**top-down**)
|
||||
|
||||
```js
|
||||
{
|
||||
plugins: {
|
||||
'postcss-plugin': {}, // [0]
|
||||
'postcss-plugin': {}, // [1]
|
||||
'postcss-plugin': {} // [2]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
<h2 align="center">Context</h2>
|
||||
|
||||
When using a `{Function}` (`postcss.config.js` or `.postcssrc.js`), it's possible to pass context to `postcss-load-config`, which will be evaluated while loading your config. By default `ctx.env (process.env.NODE_ENV)` and `ctx.cwd (process.cwd())` are available on the `ctx` `{Object}`
|
||||
|
||||
> ℹ️ Most third-party integrations add additional properties to the `ctx` (e.g `postcss-loader`). Check the specific module's README for more information about what is available on the respective `ctx`
|
||||
|
||||
<h2 align="center">Examples</h2>
|
||||
|
||||
**postcss.config.js**
|
||||
|
||||
```js
|
||||
module.exports = (ctx) => ({
|
||||
parser: ctx.parser ? 'sugarss' : false,
|
||||
map: ctx.env === 'development' ? ctx.map : false,
|
||||
plugins: {
|
||||
'postcss-import': {},
|
||||
'postcss-nested': {},
|
||||
cssnano: ctx.env === 'production' ? {} : false
|
||||
}
|
||||
})
|
||||
```
|
||||
|
||||
<div align="center">
|
||||
<img width="80" height="80" src="https://worldvectorlogo.com/logos/nodejs-icon.svg">
|
||||
</div>
|
||||
|
||||
```json
|
||||
"scripts": {
|
||||
"build": "NODE_ENV=production node postcss",
|
||||
"start": "NODE_ENV=development node postcss"
|
||||
}
|
||||
```
|
||||
|
||||
```js
|
||||
const { readFileSync } = require('fs')
|
||||
|
||||
const postcss = require('postcss')
|
||||
const postcssrc = require('postcss-load-config')
|
||||
|
||||
const css = readFileSync('index.sss', 'utf8')
|
||||
|
||||
const ctx = { parser: true, map: 'inline' }
|
||||
|
||||
postcssrc(ctx).then(({ plugins, options }) => {
|
||||
postcss(plugins)
|
||||
.process(css, options)
|
||||
.then((result) => console.log(result.css))
|
||||
})
|
||||
```
|
||||
|
||||
<div align="center">
|
||||
<img width="80" height="80" halign="10" src="https://worldvectorlogo.com/logos/gulp.svg">
|
||||
</div>
|
||||
|
||||
```json
|
||||
"scripts": {
|
||||
"build": "NODE_ENV=production gulp",
|
||||
"start": "NODE_ENV=development gulp"
|
||||
}
|
||||
```
|
||||
|
||||
```js
|
||||
const { task, src, dest, series, watch } = require('gulp')
|
||||
|
||||
const postcss = require('gulp-postcssrc')
|
||||
|
||||
const css = () => {
|
||||
src('src/*.css')
|
||||
.pipe(postcss())
|
||||
.pipe(dest('dest'))
|
||||
})
|
||||
|
||||
task('watch', () => {
|
||||
watch(['src/*.css', 'postcss.config.js'], css)
|
||||
})
|
||||
|
||||
task('default', series(css, 'watch'))
|
||||
```
|
||||
|
||||
<div align="center">
|
||||
<img width="80" height="80" src="https://cdn.rawgit.com/webpack/media/e7485eb2/logo/icon.svg">
|
||||
</div>
|
||||
|
||||
```json
|
||||
"scripts": {
|
||||
"build": "NODE_ENV=production webpack",
|
||||
"start": "NODE_ENV=development webpack-dev-server"
|
||||
}
|
||||
```
|
||||
|
||||
**webpack.config.js**
|
||||
```js
|
||||
module.exports = (env) => ({
|
||||
module: {
|
||||
rules: [
|
||||
{
|
||||
test: /\.css$/,
|
||||
use: [
|
||||
'style-loader',
|
||||
'css-loader',
|
||||
'postcss-loader'
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
})
|
||||
```
|
||||
|
||||
<h2 align="center">Maintainers</h2>
|
||||
|
||||
<table>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td align="center">
|
||||
<img width="150" height="150"
|
||||
src="https://github.com/michael-ciniawsky.png?v=3&s=150">
|
||||
<br />
|
||||
<a href="https://github.com/michael-ciniawsky">Michael Ciniawsky</a>
|
||||
</td>
|
||||
<td align="center">
|
||||
<img width="150" height="150"
|
||||
src="https://github.com/ertrzyiks.png?v=3&s=150">
|
||||
<br />
|
||||
<a href="https://github.com/ertrzyiks">Mateusz Derks</a>
|
||||
</td>
|
||||
</tr>
|
||||
<tbody>
|
||||
</table>
|
||||
|
||||
<h2 align="center">Contributors</h2>
|
||||
|
||||
<table>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td align="center">
|
||||
<img width="150" height="150"
|
||||
src="https://github.com/sparty02.png?v=3&s=150">
|
||||
<br />
|
||||
<a href="https://github.com/sparty02">Ryan Dunckel</a>
|
||||
</td>
|
||||
<td align="center">
|
||||
<img width="150" height="150"
|
||||
src="https://github.com/pcgilday.png?v=3&s=150">
|
||||
<br />
|
||||
<a href="https://github.com/pcgilday">Patrick Gilday</a>
|
||||
</td>
|
||||
<td align="center">
|
||||
<img width="150" height="150"
|
||||
src="https://github.com/daltones.png?v=3&s=150">
|
||||
<br />
|
||||
<a href="https://github.com/daltones">Dalton Santos</a>
|
||||
</td>
|
||||
<td align="center">
|
||||
<img width="150" height="150"
|
||||
src="https://github.com/fwouts.png?v=3&s=150">
|
||||
<br />
|
||||
<a href="https://github.com/fwouts">François Wouts</a>
|
||||
</td>
|
||||
</tr>
|
||||
<tbody>
|
||||
</table
|
||||
|
||||
|
||||
## Security Contact
|
||||
|
||||
To report a security vulnerability, please use the [Tidelift security contact].
|
||||
Tidelift will coordinate the fix and disclosure.
|
||||
|
||||
[Tidelift security contact]: https://tidelift.com/security
|
1
node_modules/postcss-load-config/node_modules/.bin/yaml
generated
vendored
Symbolic link
1
node_modules/postcss-load-config/node_modules/.bin/yaml
generated
vendored
Symbolic link
@@ -0,0 +1 @@
|
||||
../../../yaml/bin.mjs
|
21
node_modules/postcss-load-config/node_modules/lilconfig/LICENSE
generated
vendored
Normal file
21
node_modules/postcss-load-config/node_modules/lilconfig/LICENSE
generated
vendored
Normal file
@@ -0,0 +1,21 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2022 Anton Kastritskiy
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
42
node_modules/postcss-load-config/node_modules/lilconfig/package.json
generated
vendored
Normal file
42
node_modules/postcss-load-config/node_modules/lilconfig/package.json
generated
vendored
Normal file
@@ -0,0 +1,42 @@
|
||||
{
|
||||
"name": "lilconfig",
|
||||
"version": "3.1.2",
|
||||
"description": "A zero-dependency alternative to cosmiconfig",
|
||||
"main": "src/index.js",
|
||||
"types": "src/index.d.ts",
|
||||
"scripts": {
|
||||
"test": "NODE_OPTIONS=--experimental-vm-modules ./node_modules/.bin/jest --coverage",
|
||||
"lint": "biome ci ./src",
|
||||
"types": "tsc"
|
||||
},
|
||||
"keywords": [
|
||||
"cosmiconfig",
|
||||
"config",
|
||||
"configuration",
|
||||
"search"
|
||||
],
|
||||
"files": [
|
||||
"src/index.*"
|
||||
],
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/antonk52/lilconfig"
|
||||
},
|
||||
"bugs": "https://github.com/antonk52/lilconfig/issues",
|
||||
"author": "antonk52",
|
||||
"license": "MIT",
|
||||
"devDependencies": {
|
||||
"@biomejs/biome": "^1.6.0",
|
||||
"@types/jest": "^29.5.12",
|
||||
"@types/node": "^14.18.63",
|
||||
"@types/webpack-env": "^1.18.5",
|
||||
"cosmiconfig": "^8.3.6",
|
||||
"jest": "^29.7.0",
|
||||
"typescript": "^5.3.3",
|
||||
"uvu": "^0.5.6"
|
||||
},
|
||||
"funding": "https://github.com/sponsors/antonk52",
|
||||
"engines": {
|
||||
"node": ">=14"
|
||||
}
|
||||
}
|
98
node_modules/postcss-load-config/node_modules/lilconfig/readme.md
generated
vendored
Normal file
98
node_modules/postcss-load-config/node_modules/lilconfig/readme.md
generated
vendored
Normal file
@@ -0,0 +1,98 @@
|
||||
# Lilconfig ⚙️
|
||||
[](https://badge.fury.io/js/lilconfig)
|
||||
[](https://packagephobia.now.sh/result?p=lilconfig)
|
||||
[](https://coveralls.io/github/antonk52/lilconfig)
|
||||
|
||||
A zero-dependency alternative to [cosmiconfig](https://www.npmjs.com/package/cosmiconfig) with the same API.
|
||||
|
||||
## Installation
|
||||
|
||||
```sh
|
||||
npm install lilconfig
|
||||
```
|
||||
|
||||
## Usage
|
||||
|
||||
```js
|
||||
import {lilconfig, lilconfigSync} from 'lilconfig';
|
||||
|
||||
// all keys are optional
|
||||
const options = {
|
||||
stopDir: '/Users/you/some/dir',
|
||||
searchPlaces: ['package.json', 'myapp.conf.js'],
|
||||
ignoreEmptySearchPlaces: false
|
||||
}
|
||||
|
||||
lilconfig(
|
||||
'myapp',
|
||||
options // optional
|
||||
).search() // Promise<LilconfigResult>
|
||||
|
||||
lilconfigSync(
|
||||
'myapp',
|
||||
options // optional
|
||||
).load(pathToConfig) // LilconfigResult
|
||||
|
||||
/**
|
||||
* LilconfigResult
|
||||
* {
|
||||
* config: any; // your config
|
||||
* filepath: string;
|
||||
* }
|
||||
*/
|
||||
```
|
||||
|
||||
## ESM
|
||||
|
||||
ESM configs can be loaded with **async API only**. Specifically `js` files in projects with `"type": "module"` in `package.json` or `mjs` files.
|
||||
|
||||
## Difference to `cosmiconfig`
|
||||
Lilconfig does not intend to be 100% compatible with `cosmiconfig` but tries to mimic it where possible. The key difference is **no** support for yaml files out of the box(`lilconfig` attempts to parse files with no extension as JSON instead of YAML). You can still add the support for YAML files by providing a loader, see an [example](#yaml-loader) below.
|
||||
|
||||
### Options difference between the two.
|
||||
|
||||
|cosmiconfig option | lilconfig |
|
||||
|------------------------|-----------|
|
||||
|cache | ✅ |
|
||||
|loaders | ✅ |
|
||||
|ignoreEmptySearchPlaces | ✅ |
|
||||
|packageProp | ✅ |
|
||||
|searchPlaces | ✅ |
|
||||
|stopDir | ✅ |
|
||||
|transform | ✅ |
|
||||
|
||||
## Loaders examples
|
||||
|
||||
### Yaml loader
|
||||
|
||||
If you need the YAML support you can provide your own loader
|
||||
|
||||
```js
|
||||
import {lilconfig} from 'lilconfig';
|
||||
import yaml from 'yaml';
|
||||
|
||||
function loadYaml(filepath, content) {
|
||||
return yaml.parse(content);
|
||||
}
|
||||
|
||||
const options = {
|
||||
loaders: {
|
||||
'.yaml': loadYaml,
|
||||
'.yml': loadYaml,
|
||||
// loader for files with no extension
|
||||
noExt: loadYaml
|
||||
}
|
||||
};
|
||||
|
||||
lilconfig('myapp', options)
|
||||
.search()
|
||||
.then(result => {
|
||||
result // {config, filepath}
|
||||
});
|
||||
```
|
||||
|
||||
## Version correlation
|
||||
|
||||
- lilconig v1 → cosmiconfig v6
|
||||
- lilconig v2 → cosmiconfig v7
|
||||
- lilconig v3 → cosmiconfig v8
|
54
node_modules/postcss-load-config/node_modules/lilconfig/src/index.d.ts
generated
vendored
Normal file
54
node_modules/postcss-load-config/node_modules/lilconfig/src/index.d.ts
generated
vendored
Normal file
@@ -0,0 +1,54 @@
|
||||
export type LilconfigResult = null | {
|
||||
filepath: string;
|
||||
config: any;
|
||||
isEmpty?: boolean;
|
||||
};
|
||||
interface OptionsBase {
|
||||
cache?: boolean;
|
||||
stopDir?: string;
|
||||
searchPlaces?: string[];
|
||||
ignoreEmptySearchPlaces?: boolean;
|
||||
packageProp?: string | string[];
|
||||
}
|
||||
export type Transform =
|
||||
| TransformSync
|
||||
| ((result: LilconfigResult) => Promise<LilconfigResult>);
|
||||
export type TransformSync = (result: LilconfigResult) => LilconfigResult;
|
||||
type LoaderResult = any;
|
||||
export type LoaderSync = (filepath: string, content: string) => LoaderResult;
|
||||
export type Loader =
|
||||
| LoaderSync
|
||||
| ((filepath: string, content: string) => Promise<LoaderResult>);
|
||||
export type Loaders = Record<string, Loader>;
|
||||
export type LoadersSync = Record<string, LoaderSync>;
|
||||
export interface Options extends OptionsBase {
|
||||
loaders?: Loaders;
|
||||
transform?: Transform;
|
||||
}
|
||||
export interface OptionsSync extends OptionsBase {
|
||||
loaders?: LoadersSync;
|
||||
transform?: TransformSync;
|
||||
}
|
||||
export declare const defaultLoadersSync: LoadersSync;
|
||||
export declare const defaultLoaders: Loaders;
|
||||
type ClearCaches = {
|
||||
clearLoadCache: () => void;
|
||||
clearSearchCache: () => void;
|
||||
clearCaches: () => void;
|
||||
};
|
||||
type AsyncSearcher = {
|
||||
search(searchFrom?: string): Promise<LilconfigResult>;
|
||||
load(filepath: string): Promise<LilconfigResult>;
|
||||
} & ClearCaches;
|
||||
export declare function lilconfig(
|
||||
name: string,
|
||||
options?: Partial<Options>,
|
||||
): AsyncSearcher;
|
||||
type SyncSearcher = {
|
||||
search(searchFrom?: string): LilconfigResult;
|
||||
load(filepath: string): LilconfigResult;
|
||||
} & ClearCaches;
|
||||
export declare function lilconfigSync(
|
||||
name: string,
|
||||
options?: OptionsSync,
|
||||
): SyncSearcher;
|
457
node_modules/postcss-load-config/node_modules/lilconfig/src/index.js
generated
vendored
Normal file
457
node_modules/postcss-load-config/node_modules/lilconfig/src/index.js
generated
vendored
Normal file
@@ -0,0 +1,457 @@
|
||||
// @ts-check
|
||||
const path = require('path');
|
||||
const fs = require('fs');
|
||||
const os = require('os');
|
||||
|
||||
const fsReadFileAsync = fs.promises.readFile;
|
||||
|
||||
/** @type {(name: string, sync: boolean) => string[]} */
|
||||
function getDefaultSearchPlaces(name, sync) {
|
||||
return [
|
||||
'package.json',
|
||||
`.${name}rc.json`,
|
||||
`.${name}rc.js`,
|
||||
`.${name}rc.cjs`,
|
||||
...(sync ? [] : [`.${name}rc.mjs`]),
|
||||
`.config/${name}rc`,
|
||||
`.config/${name}rc.json`,
|
||||
`.config/${name}rc.js`,
|
||||
`.config/${name}rc.cjs`,
|
||||
...(sync ? [] : [`.config/${name}rc.mjs`]),
|
||||
`${name}.config.js`,
|
||||
`${name}.config.cjs`,
|
||||
...(sync ? [] : [`${name}.config.mjs`]),
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @type {(p: string) => string}
|
||||
*
|
||||
* see #17
|
||||
* On *nix, if cwd is not under homedir,
|
||||
* the last path will be '', ('/build' -> '')
|
||||
* but it should be '/' actually.
|
||||
* And on Windows, this will never happen. ('C:\build' -> 'C:')
|
||||
*/
|
||||
function parentDir(p) {
|
||||
return path.dirname(p) || path.sep;
|
||||
}
|
||||
|
||||
/** @type {import('./index').LoaderSync} */
|
||||
const jsonLoader = (_, content) => JSON.parse(content);
|
||||
// Use plain require in webpack context for dynamic import
|
||||
const requireFunc = typeof __webpack_require__ === "function" ? __non_webpack_require__ : require;
|
||||
/** @type {import('./index').LoadersSync} */
|
||||
const defaultLoadersSync = Object.freeze({
|
||||
'.js': requireFunc,
|
||||
'.json': requireFunc,
|
||||
'.cjs': requireFunc,
|
||||
noExt: jsonLoader,
|
||||
});
|
||||
module.exports.defaultLoadersSync = defaultLoadersSync;
|
||||
|
||||
/** @type {import('./index').Loader} */
|
||||
const dynamicImport = async id => {
|
||||
try {
|
||||
const mod = await import(/* webpackIgnore: true */ id);
|
||||
|
||||
return mod.default;
|
||||
} catch (e) {
|
||||
try {
|
||||
return requireFunc(id);
|
||||
} catch (/** @type {any} */ requireE) {
|
||||
if (
|
||||
requireE.code === 'ERR_REQUIRE_ESM' ||
|
||||
(requireE instanceof SyntaxError &&
|
||||
requireE
|
||||
.toString()
|
||||
.includes('Cannot use import statement outside a module'))
|
||||
) {
|
||||
throw e;
|
||||
}
|
||||
throw requireE;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
/** @type {import('./index').Loaders} */
|
||||
const defaultLoaders = Object.freeze({
|
||||
'.js': dynamicImport,
|
||||
'.mjs': dynamicImport,
|
||||
'.cjs': dynamicImport,
|
||||
'.json': jsonLoader,
|
||||
noExt: jsonLoader,
|
||||
});
|
||||
module.exports.defaultLoaders = defaultLoaders;
|
||||
|
||||
/**
|
||||
* @param {string} name
|
||||
* @param {import('./index').Options | import('./index').OptionsSync} options
|
||||
* @param {boolean} sync
|
||||
* @returns {Required<import('./index').Options | import('./index').OptionsSync>}
|
||||
*/
|
||||
function getOptions(name, options, sync) {
|
||||
/** @type {Required<import('./index').Options>} */
|
||||
const conf = {
|
||||
stopDir: os.homedir(),
|
||||
searchPlaces: getDefaultSearchPlaces(name, sync),
|
||||
ignoreEmptySearchPlaces: true,
|
||||
cache: true,
|
||||
transform: x => x,
|
||||
packageProp: [name],
|
||||
...options,
|
||||
loaders: {
|
||||
...(sync ? defaultLoadersSync : defaultLoaders),
|
||||
...options.loaders,
|
||||
},
|
||||
};
|
||||
conf.searchPlaces.forEach(place => {
|
||||
const key = path.extname(place) || 'noExt';
|
||||
const loader = conf.loaders[key];
|
||||
if (!loader) {
|
||||
throw new Error(`Missing loader for extension "${place}"`);
|
||||
}
|
||||
|
||||
if (typeof loader !== 'function') {
|
||||
throw new Error(
|
||||
`Loader for extension "${place}" is not a function: Received ${typeof loader}.`,
|
||||
);
|
||||
}
|
||||
});
|
||||
|
||||
return conf;
|
||||
}
|
||||
|
||||
/** @type {(props: string | string[], obj: Record<string, any>) => unknown} */
|
||||
function getPackageProp(props, obj) {
|
||||
if (typeof props === 'string' && props in obj) return obj[props];
|
||||
return (
|
||||
(Array.isArray(props) ? props : props.split('.')).reduce(
|
||||
(acc, prop) => (acc === undefined ? acc : acc[prop]),
|
||||
obj,
|
||||
) || null
|
||||
);
|
||||
}
|
||||
|
||||
/** @param {string} filepath */
|
||||
function validateFilePath(filepath) {
|
||||
if (!filepath) throw new Error('load must pass a non-empty string');
|
||||
}
|
||||
|
||||
/** @type {(loader: import('./index').Loader, ext: string) => void} */
|
||||
function validateLoader(loader, ext) {
|
||||
if (!loader) throw new Error(`No loader specified for extension "${ext}"`);
|
||||
if (typeof loader !== 'function') throw new Error('loader is not a function');
|
||||
}
|
||||
|
||||
/** @type {(enableCache: boolean) => <T>(c: Map<string, T>, filepath: string, res: T) => T} */
|
||||
const makeEmplace = enableCache => (c, filepath, res) => {
|
||||
if (enableCache) c.set(filepath, res);
|
||||
return res;
|
||||
};
|
||||
|
||||
/** @type {import('./index').lilconfig} */
|
||||
module.exports.lilconfig = function lilconfig(name, options) {
|
||||
const {
|
||||
ignoreEmptySearchPlaces,
|
||||
loaders,
|
||||
packageProp,
|
||||
searchPlaces,
|
||||
stopDir,
|
||||
transform,
|
||||
cache,
|
||||
} = getOptions(name, options ?? {}, false);
|
||||
const searchCache = new Map();
|
||||
const loadCache = new Map();
|
||||
const emplace = makeEmplace(cache);
|
||||
|
||||
return {
|
||||
async search(searchFrom = process.cwd()) {
|
||||
/** @type {import('./index').LilconfigResult} */
|
||||
const result = {
|
||||
config: null,
|
||||
filepath: '',
|
||||
};
|
||||
|
||||
/** @type {Set<string>} */
|
||||
const visited = new Set();
|
||||
let dir = searchFrom;
|
||||
dirLoop: while (true) {
|
||||
if (cache) {
|
||||
const r = searchCache.get(dir);
|
||||
if (r !== undefined) {
|
||||
for (const p of visited) searchCache.set(p, r);
|
||||
return r;
|
||||
}
|
||||
visited.add(dir);
|
||||
}
|
||||
|
||||
for (const searchPlace of searchPlaces) {
|
||||
const filepath = path.join(dir, searchPlace);
|
||||
try {
|
||||
await fs.promises.access(filepath);
|
||||
} catch {
|
||||
continue;
|
||||
}
|
||||
const content = String(await fsReadFileAsync(filepath));
|
||||
const loaderKey = path.extname(searchPlace) || 'noExt';
|
||||
const loader = loaders[loaderKey];
|
||||
|
||||
// handle package.json
|
||||
if (searchPlace === 'package.json') {
|
||||
const pkg = await loader(filepath, content);
|
||||
const maybeConfig = getPackageProp(packageProp, pkg);
|
||||
if (maybeConfig != null) {
|
||||
result.config = maybeConfig;
|
||||
result.filepath = filepath;
|
||||
break dirLoop;
|
||||
}
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
// handle other type of configs
|
||||
const isEmpty = content.trim() === '';
|
||||
if (isEmpty && ignoreEmptySearchPlaces) continue;
|
||||
|
||||
if (isEmpty) {
|
||||
result.isEmpty = true;
|
||||
result.config = undefined;
|
||||
} else {
|
||||
validateLoader(loader, loaderKey);
|
||||
result.config = await loader(filepath, content);
|
||||
}
|
||||
result.filepath = filepath;
|
||||
break dirLoop;
|
||||
}
|
||||
if (dir === stopDir || dir === parentDir(dir)) break dirLoop;
|
||||
dir = parentDir(dir);
|
||||
}
|
||||
|
||||
const transformed =
|
||||
// not found
|
||||
result.filepath === '' && result.config === null
|
||||
? transform(null)
|
||||
: transform(result);
|
||||
|
||||
if (cache) {
|
||||
for (const p of visited) searchCache.set(p, transformed);
|
||||
}
|
||||
|
||||
return transformed;
|
||||
},
|
||||
async load(filepath) {
|
||||
validateFilePath(filepath);
|
||||
const absPath = path.resolve(process.cwd(), filepath);
|
||||
if (cache && loadCache.has(absPath)) {
|
||||
return loadCache.get(absPath);
|
||||
}
|
||||
const {base, ext} = path.parse(absPath);
|
||||
const loaderKey = ext || 'noExt';
|
||||
const loader = loaders[loaderKey];
|
||||
validateLoader(loader, loaderKey);
|
||||
const content = String(await fsReadFileAsync(absPath));
|
||||
|
||||
if (base === 'package.json') {
|
||||
const pkg = await loader(absPath, content);
|
||||
return emplace(
|
||||
loadCache,
|
||||
absPath,
|
||||
transform({
|
||||
config: getPackageProp(packageProp, pkg),
|
||||
filepath: absPath,
|
||||
}),
|
||||
);
|
||||
}
|
||||
/** @type {import('./index').LilconfigResult} */
|
||||
const result = {
|
||||
config: null,
|
||||
filepath: absPath,
|
||||
};
|
||||
// handle other type of configs
|
||||
const isEmpty = content.trim() === '';
|
||||
if (isEmpty && ignoreEmptySearchPlaces)
|
||||
return emplace(
|
||||
loadCache,
|
||||
absPath,
|
||||
transform({
|
||||
config: undefined,
|
||||
filepath: absPath,
|
||||
isEmpty: true,
|
||||
}),
|
||||
);
|
||||
|
||||
// cosmiconfig returns undefined for empty files
|
||||
result.config = isEmpty ? undefined : await loader(absPath, content);
|
||||
|
||||
return emplace(
|
||||
loadCache,
|
||||
absPath,
|
||||
transform(isEmpty ? {...result, isEmpty, config: undefined} : result),
|
||||
);
|
||||
},
|
||||
clearLoadCache() {
|
||||
if (cache) loadCache.clear();
|
||||
},
|
||||
clearSearchCache() {
|
||||
if (cache) searchCache.clear();
|
||||
},
|
||||
clearCaches() {
|
||||
if (cache) {
|
||||
loadCache.clear();
|
||||
searchCache.clear();
|
||||
}
|
||||
},
|
||||
};
|
||||
};
|
||||
|
||||
/** @type {import('./index').lilconfigSync} */
|
||||
module.exports.lilconfigSync = function lilconfigSync(name, options) {
|
||||
const {
|
||||
ignoreEmptySearchPlaces,
|
||||
loaders,
|
||||
packageProp,
|
||||
searchPlaces,
|
||||
stopDir,
|
||||
transform,
|
||||
cache,
|
||||
} = getOptions(name, options ?? {}, true);
|
||||
const searchCache = new Map();
|
||||
const loadCache = new Map();
|
||||
const emplace = makeEmplace(cache);
|
||||
|
||||
return {
|
||||
search(searchFrom = process.cwd()) {
|
||||
/** @type {import('./index').LilconfigResult} */
|
||||
const result = {
|
||||
config: null,
|
||||
filepath: '',
|
||||
};
|
||||
|
||||
/** @type {Set<string>} */
|
||||
const visited = new Set();
|
||||
let dir = searchFrom;
|
||||
dirLoop: while (true) {
|
||||
if (cache) {
|
||||
const r = searchCache.get(dir);
|
||||
if (r !== undefined) {
|
||||
for (const p of visited) searchCache.set(p, r);
|
||||
return r;
|
||||
}
|
||||
visited.add(dir);
|
||||
}
|
||||
|
||||
for (const searchPlace of searchPlaces) {
|
||||
const filepath = path.join(dir, searchPlace);
|
||||
try {
|
||||
fs.accessSync(filepath);
|
||||
} catch {
|
||||
continue;
|
||||
}
|
||||
const loaderKey = path.extname(searchPlace) || 'noExt';
|
||||
const loader = loaders[loaderKey];
|
||||
const content = String(fs.readFileSync(filepath));
|
||||
|
||||
// handle package.json
|
||||
if (searchPlace === 'package.json') {
|
||||
const pkg = loader(filepath, content);
|
||||
const maybeConfig = getPackageProp(packageProp, pkg);
|
||||
if (maybeConfig != null) {
|
||||
result.config = maybeConfig;
|
||||
result.filepath = filepath;
|
||||
break dirLoop;
|
||||
}
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
// handle other type of configs
|
||||
const isEmpty = content.trim() === '';
|
||||
if (isEmpty && ignoreEmptySearchPlaces) continue;
|
||||
|
||||
if (isEmpty) {
|
||||
result.isEmpty = true;
|
||||
result.config = undefined;
|
||||
} else {
|
||||
validateLoader(loader, loaderKey);
|
||||
result.config = loader(filepath, content);
|
||||
}
|
||||
result.filepath = filepath;
|
||||
break dirLoop;
|
||||
}
|
||||
if (dir === stopDir || dir === parentDir(dir)) break dirLoop;
|
||||
dir = parentDir(dir);
|
||||
}
|
||||
|
||||
const transformed =
|
||||
// not found
|
||||
result.filepath === '' && result.config === null
|
||||
? transform(null)
|
||||
: transform(result);
|
||||
|
||||
if (cache) {
|
||||
for (const p of visited) searchCache.set(p, transformed);
|
||||
}
|
||||
|
||||
return transformed;
|
||||
},
|
||||
load(filepath) {
|
||||
validateFilePath(filepath);
|
||||
const absPath = path.resolve(process.cwd(), filepath);
|
||||
if (cache && loadCache.has(absPath)) {
|
||||
return loadCache.get(absPath);
|
||||
}
|
||||
const {base, ext} = path.parse(absPath);
|
||||
const loaderKey = ext || 'noExt';
|
||||
const loader = loaders[loaderKey];
|
||||
validateLoader(loader, loaderKey);
|
||||
|
||||
const content = String(fs.readFileSync(absPath));
|
||||
|
||||
if (base === 'package.json') {
|
||||
const pkg = loader(absPath, content);
|
||||
return transform({
|
||||
config: getPackageProp(packageProp, pkg),
|
||||
filepath: absPath,
|
||||
});
|
||||
}
|
||||
const result = {
|
||||
config: null,
|
||||
filepath: absPath,
|
||||
};
|
||||
// handle other type of configs
|
||||
const isEmpty = content.trim() === '';
|
||||
if (isEmpty && ignoreEmptySearchPlaces)
|
||||
return emplace(
|
||||
loadCache,
|
||||
absPath,
|
||||
transform({
|
||||
filepath: absPath,
|
||||
config: undefined,
|
||||
isEmpty: true,
|
||||
}),
|
||||
);
|
||||
|
||||
// cosmiconfig returns undefined for empty files
|
||||
result.config = isEmpty ? undefined : loader(absPath, content);
|
||||
|
||||
return emplace(
|
||||
loadCache,
|
||||
absPath,
|
||||
transform(isEmpty ? {...result, isEmpty, config: undefined} : result),
|
||||
);
|
||||
},
|
||||
clearLoadCache() {
|
||||
if (cache) loadCache.clear();
|
||||
},
|
||||
clearSearchCache() {
|
||||
if (cache) searchCache.clear();
|
||||
},
|
||||
clearCaches() {
|
||||
if (cache) {
|
||||
loadCache.clear();
|
||||
searchCache.clear();
|
||||
}
|
||||
},
|
||||
};
|
||||
};
|
54
node_modules/postcss-load-config/package.json
generated
vendored
Normal file
54
node_modules/postcss-load-config/package.json
generated
vendored
Normal file
@@ -0,0 +1,54 @@
|
||||
{
|
||||
"name": "postcss-load-config",
|
||||
"version": "4.0.2",
|
||||
"description": "Autoload Config for PostCSS",
|
||||
"main": "src/index.js",
|
||||
"types": "src/index.d.ts",
|
||||
"files": [
|
||||
"src"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">= 14"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
"type": "opencollective",
|
||||
"url": "https://opencollective.com/postcss/"
|
||||
},
|
||||
{
|
||||
"type": "github",
|
||||
"url": "https://github.com/sponsors/ai"
|
||||
}
|
||||
],
|
||||
"dependencies": {
|
||||
"lilconfig": "^3.0.0",
|
||||
"yaml": "^2.3.4"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"postcss": ">=8.0.9",
|
||||
"ts-node": ">=9.0.0"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"ts-node": {
|
||||
"optional": true
|
||||
},
|
||||
"postcss": {
|
||||
"optional": true
|
||||
}
|
||||
},
|
||||
"keywords": [
|
||||
"postcss",
|
||||
"postcssrc",
|
||||
"postcss.config.js"
|
||||
],
|
||||
"author": "Michael Ciniawky <michael.ciniawsky@gmail.com>",
|
||||
"contributors": [
|
||||
"Ryan Dunckel",
|
||||
"Mateusz Derks",
|
||||
"Dalton Santos",
|
||||
"Patrick Gilday",
|
||||
"François Wouts"
|
||||
],
|
||||
"repository": "postcss/postcss-load-config",
|
||||
"license": "MIT"
|
||||
}
|
65
node_modules/postcss-load-config/src/index.d.ts
generated
vendored
Normal file
65
node_modules/postcss-load-config/src/index.d.ts
generated
vendored
Normal file
@@ -0,0 +1,65 @@
|
||||
// based on @types/postcss-load-config@2.0.1
|
||||
// Type definitions for postcss-load-config 2.1
|
||||
import Processor from 'postcss/lib/processor';
|
||||
import { Plugin, ProcessOptions, Transformer } from 'postcss';
|
||||
import { Options as ConfigOptions } from "lilconfig";
|
||||
|
||||
declare function postcssrc(
|
||||
ctx?: postcssrc.ConfigContext,
|
||||
path?: string,
|
||||
options?: ConfigOptions
|
||||
): Promise<postcssrc.Result>;
|
||||
|
||||
declare namespace postcssrc {
|
||||
// In the ConfigContext, these three options can be instances of the
|
||||
// appropriate class, or strings. If they are strings, postcss-load-config will
|
||||
// require() them and pass the instances along.
|
||||
export interface ProcessOptionsPreload {
|
||||
parser?: string | ProcessOptions['parser'];
|
||||
stringifier?: string | ProcessOptions['stringifier'];
|
||||
syntax?: string | ProcessOptions['syntax'];
|
||||
}
|
||||
|
||||
// The remaining ProcessOptions, sans the three above.
|
||||
export type RemainingProcessOptions = Pick<
|
||||
ProcessOptions,
|
||||
Exclude<keyof ProcessOptions, keyof ProcessOptionsPreload>
|
||||
>;
|
||||
|
||||
// Additional context options that postcss-load-config understands.
|
||||
export interface Context {
|
||||
cwd?: string;
|
||||
env?: string;
|
||||
}
|
||||
|
||||
// The full shape of the ConfigContext.
|
||||
export type ConfigContext = Context &
|
||||
ProcessOptionsPreload &
|
||||
RemainingProcessOptions;
|
||||
|
||||
// Result of postcssrc is a Promise containing the filename plus the options
|
||||
// and plugins that are ready to pass on to postcss.
|
||||
export type ResultPlugin = Plugin | Transformer | Processor;
|
||||
|
||||
export interface Result {
|
||||
file: string;
|
||||
options: ProcessOptions;
|
||||
plugins: ResultPlugin[];
|
||||
}
|
||||
|
||||
export type ConfigPlugin = Transformer | Plugin | Processor;
|
||||
|
||||
export interface Config {
|
||||
parser?: string | ProcessOptions['parser'] | false;
|
||||
stringifier?: string | ProcessOptions['stringifier'] | false;
|
||||
syntax?: string | ProcessOptions['syntax'] | false;
|
||||
map?: string | false;
|
||||
from?: string;
|
||||
to?: string;
|
||||
plugins?: Array<ConfigPlugin | false> | Record<string, object | false>;
|
||||
}
|
||||
|
||||
export type ConfigFn = (ctx: ConfigContext) => Config | Promise<Config>;
|
||||
}
|
||||
|
||||
export = postcssrc;
|
185
node_modules/postcss-load-config/src/index.js
generated
vendored
Normal file
185
node_modules/postcss-load-config/src/index.js
generated
vendored
Normal file
@@ -0,0 +1,185 @@
|
||||
'use strict'
|
||||
|
||||
const resolve = require('path').resolve
|
||||
const url = require('url')
|
||||
|
||||
const config = require('lilconfig')
|
||||
const yaml = require('yaml')
|
||||
|
||||
const loadOptions = require('./options.js')
|
||||
const loadPlugins = require('./plugins.js')
|
||||
|
||||
/* istanbul ignore next */
|
||||
const interopRequireDefault = (obj) => obj && obj.__esModule ? obj : { default: obj }
|
||||
|
||||
/**
|
||||
* Process the result from cosmiconfig
|
||||
*
|
||||
* @param {Object} ctx Config Context
|
||||
* @param {Object} result Cosmiconfig result
|
||||
*
|
||||
* @return {Object} PostCSS Config
|
||||
*/
|
||||
const processResult = (ctx, result) => {
|
||||
const file = result.filepath || ''
|
||||
let config = interopRequireDefault(result.config).default || {}
|
||||
|
||||
if (typeof config === 'function') {
|
||||
config = config(ctx)
|
||||
} else {
|
||||
config = Object.assign({}, config, ctx)
|
||||
}
|
||||
|
||||
if (!config.plugins) {
|
||||
config.plugins = []
|
||||
}
|
||||
|
||||
return {
|
||||
plugins: loadPlugins(config, file),
|
||||
options: loadOptions(config, file),
|
||||
file
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Builds the Config Context
|
||||
*
|
||||
* @param {Object} ctx Config Context
|
||||
*
|
||||
* @return {Object} Config Context
|
||||
*/
|
||||
const createContext = (ctx) => {
|
||||
/**
|
||||
* @type {Object}
|
||||
*
|
||||
* @prop {String} cwd=process.cwd() Config search start location
|
||||
* @prop {String} env=process.env.NODE_ENV Config Enviroment, will be set to `development` by `postcss-load-config` if `process.env.NODE_ENV` is `undefined`
|
||||
*/
|
||||
ctx = Object.assign({
|
||||
cwd: process.cwd(),
|
||||
env: process.env.NODE_ENV
|
||||
}, ctx)
|
||||
|
||||
if (!ctx.env) {
|
||||
process.env.NODE_ENV = 'development'
|
||||
}
|
||||
|
||||
return ctx
|
||||
}
|
||||
|
||||
const importDefault = async filepath => {
|
||||
const module = await import(url.pathToFileURL(filepath).href)
|
||||
return module.default
|
||||
}
|
||||
|
||||
const addTypeScriptLoader = (options = {}, loader) => {
|
||||
const moduleName = 'postcss'
|
||||
|
||||
return {
|
||||
...options,
|
||||
searchPlaces: [
|
||||
...(options.searchPlaces || []),
|
||||
'package.json',
|
||||
`.${moduleName}rc`,
|
||||
`.${moduleName}rc.json`,
|
||||
`.${moduleName}rc.yaml`,
|
||||
`.${moduleName}rc.yml`,
|
||||
`.${moduleName}rc.ts`,
|
||||
`.${moduleName}rc.cts`,
|
||||
`.${moduleName}rc.js`,
|
||||
`.${moduleName}rc.cjs`,
|
||||
`.${moduleName}rc.mjs`,
|
||||
`${moduleName}.config.ts`,
|
||||
`${moduleName}.config.cts`,
|
||||
`${moduleName}.config.js`,
|
||||
`${moduleName}.config.cjs`,
|
||||
`${moduleName}.config.mjs`
|
||||
],
|
||||
loaders: {
|
||||
...options.loaders,
|
||||
'.yaml': (filepath, content) => yaml.parse(content),
|
||||
'.yml': (filepath, content) => yaml.parse(content),
|
||||
'.js': importDefault,
|
||||
'.cjs': importDefault,
|
||||
'.mjs': importDefault,
|
||||
'.ts': loader,
|
||||
'.cts': loader
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const withTypeScriptLoader = (rcFunc) => {
|
||||
return (ctx, path, options) => {
|
||||
return rcFunc(ctx, path, addTypeScriptLoader(options, (configFile) => {
|
||||
let registerer = { enabled () {} }
|
||||
|
||||
try {
|
||||
// Register TypeScript compiler instance
|
||||
registerer = require('ts-node').register({
|
||||
// transpile to cjs even if compilerOptions.module in tsconfig is not Node16/NodeNext.
|
||||
moduleTypes: { '**/*.cts': 'cjs' }
|
||||
})
|
||||
|
||||
return require(configFile)
|
||||
} catch (err) {
|
||||
if (err.code === 'MODULE_NOT_FOUND') {
|
||||
throw new Error(
|
||||
`'ts-node' is required for the TypeScript configuration files. Make sure it is installed\nError: ${err.message}`
|
||||
)
|
||||
}
|
||||
|
||||
throw err
|
||||
} finally {
|
||||
registerer.enabled(false)
|
||||
}
|
||||
}))
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Load Config
|
||||
*
|
||||
* @method rc
|
||||
*
|
||||
* @param {Object} ctx Config Context
|
||||
* @param {String} path Config Path
|
||||
* @param {Object} options Config Options
|
||||
*
|
||||
* @return {Promise} config PostCSS Config
|
||||
*/
|
||||
const rc = withTypeScriptLoader((ctx, path, options) => {
|
||||
/**
|
||||
* @type {Object} The full Config Context
|
||||
*/
|
||||
ctx = createContext(ctx)
|
||||
|
||||
/**
|
||||
* @type {String} `process.cwd()`
|
||||
*/
|
||||
path = path ? resolve(path) : process.cwd()
|
||||
|
||||
return config.lilconfig('postcss', options)
|
||||
.search(path)
|
||||
.then((result) => {
|
||||
if (!result) {
|
||||
throw new Error(`No PostCSS Config found in: ${path}`)
|
||||
}
|
||||
|
||||
return processResult(ctx, result)
|
||||
})
|
||||
})
|
||||
|
||||
/**
|
||||
* Autoload Config for PostCSS
|
||||
*
|
||||
* @author Michael Ciniawsky @michael-ciniawsky <michael.ciniawsky@gmail.com>
|
||||
* @license MIT
|
||||
*
|
||||
* @module postcss-load-config
|
||||
* @version 2.1.0
|
||||
*
|
||||
* @requires comsiconfig
|
||||
* @requires ./options
|
||||
* @requires ./plugins
|
||||
*/
|
||||
module.exports = rc
|
47
node_modules/postcss-load-config/src/options.js
generated
vendored
Normal file
47
node_modules/postcss-load-config/src/options.js
generated
vendored
Normal file
@@ -0,0 +1,47 @@
|
||||
'use strict'
|
||||
|
||||
const req = require('./req.js')
|
||||
|
||||
/**
|
||||
* Load Options
|
||||
*
|
||||
* @private
|
||||
* @method options
|
||||
*
|
||||
* @param {Object} config PostCSS Config
|
||||
*
|
||||
* @return {Object} options PostCSS Options
|
||||
*/
|
||||
const options = (config, file) => {
|
||||
if (config.parser && typeof config.parser === 'string') {
|
||||
try {
|
||||
config.parser = req(config.parser, file)
|
||||
} catch (err) {
|
||||
throw new Error(`Loading PostCSS Parser failed: ${err.message}\n\n(@${file})`)
|
||||
}
|
||||
}
|
||||
|
||||
if (config.syntax && typeof config.syntax === 'string') {
|
||||
try {
|
||||
config.syntax = req(config.syntax, file)
|
||||
} catch (err) {
|
||||
throw new Error(`Loading PostCSS Syntax failed: ${err.message}\n\n(@${file})`)
|
||||
}
|
||||
}
|
||||
|
||||
if (config.stringifier && typeof config.stringifier === 'string') {
|
||||
try {
|
||||
config.stringifier = req(config.stringifier, file)
|
||||
} catch (err) {
|
||||
throw new Error(`Loading PostCSS Stringifier failed: ${err.message}\n\n(@${file})`)
|
||||
}
|
||||
}
|
||||
|
||||
if (config.plugins) {
|
||||
delete config.plugins
|
||||
}
|
||||
|
||||
return config
|
||||
}
|
||||
|
||||
module.exports = options
|
85
node_modules/postcss-load-config/src/plugins.js
generated
vendored
Normal file
85
node_modules/postcss-load-config/src/plugins.js
generated
vendored
Normal file
@@ -0,0 +1,85 @@
|
||||
'use strict'
|
||||
|
||||
const req = require('./req.js')
|
||||
|
||||
/**
|
||||
* Plugin Loader
|
||||
*
|
||||
* @private
|
||||
* @method load
|
||||
*
|
||||
* @param {String} plugin PostCSS Plugin Name
|
||||
* @param {Object} options PostCSS Plugin Options
|
||||
*
|
||||
* @return {Function} PostCSS Plugin
|
||||
*/
|
||||
const load = (plugin, options, file) => {
|
||||
try {
|
||||
if (
|
||||
options === null ||
|
||||
options === undefined ||
|
||||
Object.keys(options).length === 0
|
||||
) {
|
||||
return req(plugin, file)
|
||||
} else {
|
||||
return req(plugin, file)(options)
|
||||
}
|
||||
} catch (err) {
|
||||
throw new Error(`Loading PostCSS Plugin failed: ${err.message}\n\n(@${file})`)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Load Plugins
|
||||
*
|
||||
* @private
|
||||
* @method plugins
|
||||
*
|
||||
* @param {Object} config PostCSS Config Plugins
|
||||
*
|
||||
* @return {Array} plugins PostCSS Plugins
|
||||
*/
|
||||
const plugins = (config, file) => {
|
||||
let plugins = []
|
||||
|
||||
if (Array.isArray(config.plugins)) {
|
||||
plugins = config.plugins.filter(Boolean)
|
||||
} else {
|
||||
plugins = Object.keys(config.plugins)
|
||||
.filter((plugin) => {
|
||||
return config.plugins[plugin] !== false ? plugin : ''
|
||||
})
|
||||
.map((plugin) => {
|
||||
return load(plugin, config.plugins[plugin], file)
|
||||
})
|
||||
}
|
||||
|
||||
if (plugins.length && plugins.length > 0) {
|
||||
plugins.forEach((plugin, i) => {
|
||||
if (plugin.default) {
|
||||
plugin = plugin.default
|
||||
}
|
||||
|
||||
if (plugin.postcss === true) {
|
||||
plugin = plugin()
|
||||
} else if (plugin.postcss) {
|
||||
plugin = plugin.postcss
|
||||
}
|
||||
|
||||
if (
|
||||
// eslint-disable-next-line
|
||||
!(
|
||||
(typeof plugin === 'object' && Array.isArray(plugin.plugins)) ||
|
||||
(typeof plugin === 'object' && plugin.postcssPlugin) ||
|
||||
(typeof plugin === 'function')
|
||||
)
|
||||
) {
|
||||
throw new TypeError(`Invalid PostCSS Plugin found at: plugins[${i}]\n\n(@${file})`)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
return plugins
|
||||
}
|
||||
|
||||
module.exports = plugins
|
10
node_modules/postcss-load-config/src/req.js
generated
vendored
Normal file
10
node_modules/postcss-load-config/src/req.js
generated
vendored
Normal file
@@ -0,0 +1,10 @@
|
||||
// eslint-disable-next-line n/no-deprecated-api
|
||||
const { createRequire, createRequireFromPath } = require('module')
|
||||
|
||||
function req (name, rootFile) {
|
||||
const create = createRequire || createRequireFromPath
|
||||
const require = create(rootFile)
|
||||
return require(name)
|
||||
}
|
||||
|
||||
module.exports = req
|
Reference in New Issue
Block a user