├── .editorconfig
├── .github
└── workflows
│ └── test.yml
├── .gitignore
├── .gogenrc.js
├── .npmignore
├── CHANGELOG.md
├── README.md
├── cli.js
├── package.json
├── pnpm-lock.yaml
└── template
├── .github
└── workflows
│ └── test.yml
├── .t.editorconfig
├── .t.gitignore
├── .t.npmignore
├── CHANGELOG.md
├── LICENSE.t
├── README.t.md
├── index.t.js
├── index.test.t.js
└── package.t.json
/.editorconfig:
--------------------------------------------------------------------------------
1 | root = true
2 |
3 | [*]
4 | indent_style = space
5 | indent_size = 2
6 | end_of_line = lf
7 | charset = utf-8
8 | trim_trailing_whitespace = true
9 | insert_final_newline = true
10 |
--------------------------------------------------------------------------------
/.github/workflows/test.yml:
--------------------------------------------------------------------------------
1 | name: Test
2 | on:
3 | push:
4 | branches:
5 | - main
6 | pull_request:
7 | permissions:
8 | contents: read
9 | jobs:
10 | test:
11 | name: Test
12 | runs-on: ubuntu-latest
13 | steps:
14 | - name: Checkout the repository
15 | uses: actions/checkout@v4
16 | - name: Install pnpm
17 | uses: pnpm/action-setup@v2
18 | with:
19 | version: 8
20 | - name: Install Node.js
21 | uses: actions/setup-node@v3
22 | with:
23 | node-version: 20
24 | cache: pnpm
25 | - name: Install all dependencies
26 | run: pnpm install --frozen-lockfile --ignore-scripts
27 | - name: Run tests
28 | run: pnpm test
29 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules/
2 |
3 | coverage/
4 |
--------------------------------------------------------------------------------
/.gogenrc.js:
--------------------------------------------------------------------------------
1 | let { Snippet } = require('enquirer')
2 | let { EventEmitter } = require('events')
3 | let { execSync } = require('child_process')
4 |
5 | let isTest = process.env.CI || process.env.NODE_ENV === 'test'
6 | let command = (cmd) => execSync(cmd).toString().trim()
7 | let emitter = new EventEmitter()
8 |
9 | /**
10 | * @type {import('gogen').Generator}
11 | */
12 | module.exports = async (
13 | { src, dest, pipeline, template, install, gitInit },
14 | { name, argv }
15 | ) => {
16 | let pluginPrefix = 'postcss-'
17 | let pluginName = name.startsWith(pluginPrefix) ? name : pluginPrefix + name
18 | let autodetects = {
19 | authorName: isTest ? ':name' : command('git config user.name'),
20 | authorEmail: isTest ? ':email' : command('git config user.email'),
21 | }
22 | let prompt = new Snippet({
23 | name: 'pkg',
24 | message: 'Fill out the fields in package.json',
25 | required: true,
26 | values: {
27 | ...autodetects,
28 | },
29 | fields: [{ name: 'gitHubName', message: 'GitHub login' }],
30 | template: `{
31 | "name": "${pluginName}",
32 | "description": "PostCSS plugin \${description}",
33 | "repository": "\${gitHubName}/${pluginName}",
34 | "author": "\${authorName} <\${authorEmail}>",
35 | }
36 | `,
37 | })
38 | prompt.on('run', () => emitter.emit('prompt:run', prompt))
39 | let { values } = await prompt.run()
40 |
41 | await pipeline(
42 | src('template/**'),
43 | template({
44 | ...values,
45 | pluginName,
46 | currentYear: new Date().getFullYear(),
47 | }),
48 | dest(pluginName)
49 | )
50 | // handle `--no-install`
51 | if (argv.install !== false) {
52 | // handle `--npm`
53 | await install([], { client: argv.npm ? 'npm' : 'auto' })
54 | }
55 | await gitInit()
56 | }
57 |
58 | module.exports.emitter = emitter
59 |
--------------------------------------------------------------------------------
/.npmignore:
--------------------------------------------------------------------------------
1 | pnpm-lock.yaml
2 |
3 | .editorconfig
4 | .github/
5 | coverage/
6 |
--------------------------------------------------------------------------------
/CHANGELOG.md:
--------------------------------------------------------------------------------
1 | # Change Log
2 |
3 | ## 3.0
4 | * Replaced `uvu` to `node --test`.
5 |
6 | ## 2.0.1
7 | * Fixed CI config.
8 |
9 | ## 2.0
10 | * Replaced `jest` to `uvu`.
11 | * Updated Node.js version on CI.
12 | * Updated `node_modules` cache on CI.
13 |
14 | ## 1.0
15 | * Initial release.
16 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # PostCSS Plugin Boilerplate
2 |
3 |
6 |
7 | Сreate new PostCSS plugins in a few steps:
8 |
9 | 1. Execute the wizard script. It will ask you a few questions
10 | and fill all files with your data.
11 |
12 | ```sh
13 | npx postcss-plugin-boilerplate
14 | ```
15 |
16 | Call it with `--npm` argument, if you have [yarn](https://yarnpkg.com/) installed, but prefer to use npm as the package manager
17 | (by default, it will automatically decide whether to use yarn or npm):
18 |
19 | ```sh
20 | node postcss-plugin-boilerplate --npm
21 | ```
22 |
23 | Or use `--no-install` if you want to skip dependencies installation.
24 |
25 | 2. Your plugin repository will now have a clean Git history.
26 | [Create the GitHub repository](https://github.com/new)
27 | and push your project there.
28 |
29 | 3. Add your project to [Travis CI](https://travis-ci.org).
30 |
31 | 4. Write some code to `index.js` and tests to `index.test.js`.
32 |
33 | 5. Execute `npm test` command
34 |
35 | 6. Add input and output CSS examples to `README.md`.
36 |
37 | 7. Add options descriptions if your plugin has them.
38 |
39 | 8. Fill `CHANGELOG.md` with initial version.
40 |
41 | 9. Release by calling `npx clean-publish`
42 | (this tool will remove development configs from `package.json`).
43 |
44 | 10. Fork [PostCSS](https://github.com/postcss/postcss), add your plugin to the
45 | [Plugins list](https://github.com/postcss/postcss/blob/main/docs/plugins.md)
46 | and send a pull request.
47 |
48 | 11. Follow [@PostCSS](https://twitter.com/postcss) to get the latest updates.
49 |
--------------------------------------------------------------------------------
/cli.js:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env node
2 |
3 | let { run } = require('gogen')
4 |
5 | run(
6 | [__dirname, ...process.argv.slice(2)],
7 | 'Usage: npx postcss-plugin-boilerplate ',
8 | { boolean: ['install', 'npm'] }
9 | )
10 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "postcss-plugin-boilerplate",
3 | "description": "PostCSS plugin boilerplate",
4 | "repository": "postcss/postcss-plugin-boilerplate",
5 | "version": "3.0.1",
6 | "license": "MIT",
7 | "bin": "cli.js",
8 | "keywords": [
9 | "postcss",
10 | "boilerplate"
11 | ],
12 | "scripts": {
13 | "test": "eslint ."
14 | },
15 | "dependencies": {
16 | "enquirer": "^2.4.1",
17 | "gogen": "^2.3.0"
18 | },
19 | "devDependencies": {
20 | "clean-publish": "^4.2.0",
21 | "eslint": "^8.55.0"
22 | },
23 | "eslintConfig": {
24 | "parserOptions": {
25 | "ecmaVersion": 2017
26 | },
27 | "env": {
28 | "node": true,
29 | "es6": true
30 | },
31 | "extends": [
32 | "eslint:recommended"
33 | ],
34 | "rules": {
35 | "no-unused-vars": "off"
36 | }
37 | },
38 | "prettier": {
39 | "arrowParens": "avoid",
40 | "jsxSingleQuote": false,
41 | "quoteProps": "consistent",
42 | "semi": false,
43 | "singleQuote": true,
44 | "trailingComma": "none"
45 | }
46 | }
47 |
--------------------------------------------------------------------------------
/pnpm-lock.yaml:
--------------------------------------------------------------------------------
1 | lockfileVersion: '6.0'
2 |
3 | settings:
4 | autoInstallPeers: true
5 | excludeLinksFromLockfile: false
6 |
7 | dependencies:
8 | enquirer:
9 | specifier: ^2.4.1
10 | version: 2.4.1
11 | gogen:
12 | specifier: ^2.3.0
13 | version: 2.3.0
14 |
15 | devDependencies:
16 | clean-publish:
17 | specifier: ^4.2.0
18 | version: 4.2.0
19 | eslint:
20 | specifier: ^8.55.0
21 | version: 8.55.0
22 |
23 | packages:
24 |
25 | /@aashutoshrathi/word-wrap@1.2.6:
26 | resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==}
27 | engines: {node: '>=0.10.0'}
28 | dev: true
29 |
30 | /@eslint-community/eslint-utils@4.4.0(eslint@8.55.0):
31 | resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==}
32 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
33 | peerDependencies:
34 | eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
35 | dependencies:
36 | eslint: 8.55.0
37 | eslint-visitor-keys: 3.4.3
38 | dev: true
39 |
40 | /@eslint-community/regexpp@4.10.0:
41 | resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==}
42 | engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
43 | dev: true
44 |
45 | /@eslint/eslintrc@2.1.4:
46 | resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==}
47 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
48 | dependencies:
49 | ajv: 6.12.6
50 | debug: 4.3.4
51 | espree: 9.6.1
52 | globals: 13.23.0
53 | ignore: 5.3.0
54 | import-fresh: 3.3.0
55 | js-yaml: 4.1.0
56 | minimatch: 3.1.2
57 | strip-json-comments: 3.1.1
58 | transitivePeerDependencies:
59 | - supports-color
60 | dev: true
61 |
62 | /@eslint/js@8.55.0:
63 | resolution: {integrity: sha512-qQfo2mxH5yVom1kacMtZZJFVdW+E70mqHMJvVg6WTLo+VBuQJ4TojZlfWBjK0ve5BdEeNAVxOsl/nvNMpJOaJA==}
64 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
65 | dev: true
66 |
67 | /@humanwhocodes/config-array@0.11.13:
68 | resolution: {integrity: sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==}
69 | engines: {node: '>=10.10.0'}
70 | dependencies:
71 | '@humanwhocodes/object-schema': 2.0.1
72 | debug: 4.3.4
73 | minimatch: 3.1.2
74 | transitivePeerDependencies:
75 | - supports-color
76 | dev: true
77 |
78 | /@humanwhocodes/module-importer@1.0.1:
79 | resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==}
80 | engines: {node: '>=12.22'}
81 | dev: true
82 |
83 | /@humanwhocodes/object-schema@2.0.1:
84 | resolution: {integrity: sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==}
85 | dev: true
86 |
87 | /@nodelib/fs.scandir@2.1.5:
88 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
89 | engines: {node: '>= 8'}
90 | dependencies:
91 | '@nodelib/fs.stat': 2.0.5
92 | run-parallel: 1.2.0
93 | dev: true
94 |
95 | /@nodelib/fs.stat@2.0.5:
96 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
97 | engines: {node: '>= 8'}
98 | dev: true
99 |
100 | /@nodelib/fs.walk@1.2.8:
101 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
102 | engines: {node: '>= 8'}
103 | dependencies:
104 | '@nodelib/fs.scandir': 2.1.5
105 | fastq: 1.15.0
106 | dev: true
107 |
108 | /@ungap/structured-clone@1.2.0:
109 | resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==}
110 | dev: true
111 |
112 | /acorn-jsx@5.3.2(acorn@8.11.2):
113 | resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
114 | peerDependencies:
115 | acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
116 | dependencies:
117 | acorn: 8.11.2
118 | dev: true
119 |
120 | /acorn@8.11.2:
121 | resolution: {integrity: sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==}
122 | engines: {node: '>=0.4.0'}
123 | hasBin: true
124 | dev: true
125 |
126 | /ajv@6.12.6:
127 | resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
128 | dependencies:
129 | fast-deep-equal: 3.1.3
130 | fast-json-stable-stringify: 2.1.0
131 | json-schema-traverse: 0.4.1
132 | uri-js: 4.4.1
133 | dev: true
134 |
135 | /ansi-colors@4.1.3:
136 | resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==}
137 | engines: {node: '>=6'}
138 | dev: false
139 |
140 | /ansi-regex@5.0.1:
141 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
142 | engines: {node: '>=8'}
143 |
144 | /ansi-styles@4.3.0:
145 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
146 | engines: {node: '>=8'}
147 | dependencies:
148 | color-convert: 2.0.1
149 | dev: true
150 |
151 | /argparse@2.0.1:
152 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
153 | dev: true
154 |
155 | /balanced-match@1.0.2:
156 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
157 | dev: true
158 |
159 | /brace-expansion@1.1.11:
160 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
161 | dependencies:
162 | balanced-match: 1.0.2
163 | concat-map: 0.0.1
164 | dev: true
165 |
166 | /braces@3.0.2:
167 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==}
168 | engines: {node: '>=8'}
169 | dependencies:
170 | fill-range: 7.0.1
171 | dev: true
172 |
173 | /callsites@3.1.0:
174 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
175 | engines: {node: '>=6'}
176 | dev: true
177 |
178 | /chalk@4.1.2:
179 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
180 | engines: {node: '>=10'}
181 | dependencies:
182 | ansi-styles: 4.3.0
183 | supports-color: 7.2.0
184 | dev: true
185 |
186 | /clean-publish@4.2.0:
187 | resolution: {integrity: sha512-dqZF5y6KtlkYhbnJoXiOCP4L1TPdI7HtuDysslUrbI8vLPu65ZjVO3pu5xp4qH0X2cWdDN/La04woe6fg4LNSw==}
188 | engines: {node: '>= 16.0.0'}
189 | hasBin: true
190 | dependencies:
191 | cross-spawn: 7.0.3
192 | fast-glob: 3.3.2
193 | lilconfig: 2.1.0
194 | micromatch: 4.0.5
195 | dev: true
196 |
197 | /color-convert@2.0.1:
198 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
199 | engines: {node: '>=7.0.0'}
200 | dependencies:
201 | color-name: 1.1.4
202 | dev: true
203 |
204 | /color-name@1.1.4:
205 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
206 | dev: true
207 |
208 | /concat-map@0.0.1:
209 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
210 | dev: true
211 |
212 | /cross-spawn@7.0.3:
213 | resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==}
214 | engines: {node: '>= 8'}
215 | dependencies:
216 | path-key: 3.1.1
217 | shebang-command: 2.0.0
218 | which: 2.0.2
219 | dev: true
220 |
221 | /debug@4.3.4:
222 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==}
223 | engines: {node: '>=6.0'}
224 | peerDependencies:
225 | supports-color: '*'
226 | peerDependenciesMeta:
227 | supports-color:
228 | optional: true
229 | dependencies:
230 | ms: 2.1.2
231 | dev: true
232 |
233 | /deep-is@0.1.4:
234 | resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
235 | dev: true
236 |
237 | /doctrine@3.0.0:
238 | resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==}
239 | engines: {node: '>=6.0.0'}
240 | dependencies:
241 | esutils: 2.0.3
242 | dev: true
243 |
244 | /enquirer@2.4.1:
245 | resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==}
246 | engines: {node: '>=8.6'}
247 | dependencies:
248 | ansi-colors: 4.1.3
249 | strip-ansi: 6.0.1
250 | dev: false
251 |
252 | /escape-string-regexp@4.0.0:
253 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
254 | engines: {node: '>=10'}
255 | dev: true
256 |
257 | /eslint-scope@7.2.2:
258 | resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==}
259 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
260 | dependencies:
261 | esrecurse: 4.3.0
262 | estraverse: 5.3.0
263 | dev: true
264 |
265 | /eslint-visitor-keys@3.4.3:
266 | resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==}
267 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
268 | dev: true
269 |
270 | /eslint@8.55.0:
271 | resolution: {integrity: sha512-iyUUAM0PCKj5QpwGfmCAG9XXbZCWsqP/eWAWrG/W0umvjuLRBECwSFdt+rCntju0xEH7teIABPwXpahftIaTdA==}
272 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
273 | hasBin: true
274 | dependencies:
275 | '@eslint-community/eslint-utils': 4.4.0(eslint@8.55.0)
276 | '@eslint-community/regexpp': 4.10.0
277 | '@eslint/eslintrc': 2.1.4
278 | '@eslint/js': 8.55.0
279 | '@humanwhocodes/config-array': 0.11.13
280 | '@humanwhocodes/module-importer': 1.0.1
281 | '@nodelib/fs.walk': 1.2.8
282 | '@ungap/structured-clone': 1.2.0
283 | ajv: 6.12.6
284 | chalk: 4.1.2
285 | cross-spawn: 7.0.3
286 | debug: 4.3.4
287 | doctrine: 3.0.0
288 | escape-string-regexp: 4.0.0
289 | eslint-scope: 7.2.2
290 | eslint-visitor-keys: 3.4.3
291 | espree: 9.6.1
292 | esquery: 1.5.0
293 | esutils: 2.0.3
294 | fast-deep-equal: 3.1.3
295 | file-entry-cache: 6.0.1
296 | find-up: 5.0.0
297 | glob-parent: 6.0.2
298 | globals: 13.23.0
299 | graphemer: 1.4.0
300 | ignore: 5.3.0
301 | imurmurhash: 0.1.4
302 | is-glob: 4.0.3
303 | is-path-inside: 3.0.3
304 | js-yaml: 4.1.0
305 | json-stable-stringify-without-jsonify: 1.0.1
306 | levn: 0.4.1
307 | lodash.merge: 4.6.2
308 | minimatch: 3.1.2
309 | natural-compare: 1.4.0
310 | optionator: 0.9.3
311 | strip-ansi: 6.0.1
312 | text-table: 0.2.0
313 | transitivePeerDependencies:
314 | - supports-color
315 | dev: true
316 |
317 | /espree@9.6.1:
318 | resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==}
319 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
320 | dependencies:
321 | acorn: 8.11.2
322 | acorn-jsx: 5.3.2(acorn@8.11.2)
323 | eslint-visitor-keys: 3.4.3
324 | dev: true
325 |
326 | /esquery@1.5.0:
327 | resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==}
328 | engines: {node: '>=0.10'}
329 | dependencies:
330 | estraverse: 5.3.0
331 | dev: true
332 |
333 | /esrecurse@4.3.0:
334 | resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==}
335 | engines: {node: '>=4.0'}
336 | dependencies:
337 | estraverse: 5.3.0
338 | dev: true
339 |
340 | /estraverse@5.3.0:
341 | resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
342 | engines: {node: '>=4.0'}
343 | dev: true
344 |
345 | /esutils@2.0.3:
346 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
347 | engines: {node: '>=0.10.0'}
348 | dev: true
349 |
350 | /fast-deep-equal@3.1.3:
351 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
352 | dev: true
353 |
354 | /fast-glob@3.3.2:
355 | resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==}
356 | engines: {node: '>=8.6.0'}
357 | dependencies:
358 | '@nodelib/fs.stat': 2.0.5
359 | '@nodelib/fs.walk': 1.2.8
360 | glob-parent: 5.1.2
361 | merge2: 1.4.1
362 | micromatch: 4.0.5
363 | dev: true
364 |
365 | /fast-json-stable-stringify@2.1.0:
366 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
367 | dev: true
368 |
369 | /fast-levenshtein@2.0.6:
370 | resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
371 | dev: true
372 |
373 | /fastq@1.15.0:
374 | resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==}
375 | dependencies:
376 | reusify: 1.0.4
377 | dev: true
378 |
379 | /file-entry-cache@6.0.1:
380 | resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==}
381 | engines: {node: ^10.12.0 || >=12.0.0}
382 | dependencies:
383 | flat-cache: 3.2.0
384 | dev: true
385 |
386 | /fill-range@7.0.1:
387 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==}
388 | engines: {node: '>=8'}
389 | dependencies:
390 | to-regex-range: 5.0.1
391 | dev: true
392 |
393 | /find-up@5.0.0:
394 | resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
395 | engines: {node: '>=10'}
396 | dependencies:
397 | locate-path: 6.0.0
398 | path-exists: 4.0.0
399 | dev: true
400 |
401 | /flat-cache@3.2.0:
402 | resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==}
403 | engines: {node: ^10.12.0 || >=12.0.0}
404 | dependencies:
405 | flatted: 3.2.9
406 | keyv: 4.5.4
407 | rimraf: 3.0.2
408 | dev: true
409 |
410 | /flatted@3.2.9:
411 | resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==}
412 | dev: true
413 |
414 | /fs.realpath@1.0.0:
415 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
416 | dev: true
417 |
418 | /glob-parent@5.1.2:
419 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
420 | engines: {node: '>= 6'}
421 | dependencies:
422 | is-glob: 4.0.3
423 | dev: true
424 |
425 | /glob-parent@6.0.2:
426 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
427 | engines: {node: '>=10.13.0'}
428 | dependencies:
429 | is-glob: 4.0.3
430 | dev: true
431 |
432 | /glob@7.2.3:
433 | resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
434 | dependencies:
435 | fs.realpath: 1.0.0
436 | inflight: 1.0.6
437 | inherits: 2.0.4
438 | minimatch: 3.1.2
439 | once: 1.4.0
440 | path-is-absolute: 1.0.1
441 | dev: true
442 |
443 | /globals@13.23.0:
444 | resolution: {integrity: sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==}
445 | engines: {node: '>=8'}
446 | dependencies:
447 | type-fest: 0.20.2
448 | dev: true
449 |
450 | /gogen@2.3.0:
451 | resolution: {integrity: sha512-hivdyxFSGh1pkr5812UxC947+tufj5CkAQD5s9k48Wh0yQ5acngFn1pTX8LF+y+aoiIXL2sijRCOM2Ek2SQkXQ==}
452 | engines: {node: '>= 10.3'}
453 | hasBin: true
454 | dev: false
455 |
456 | /graphemer@1.4.0:
457 | resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==}
458 | dev: true
459 |
460 | /has-flag@4.0.0:
461 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
462 | engines: {node: '>=8'}
463 | dev: true
464 |
465 | /ignore@5.3.0:
466 | resolution: {integrity: sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==}
467 | engines: {node: '>= 4'}
468 | dev: true
469 |
470 | /import-fresh@3.3.0:
471 | resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==}
472 | engines: {node: '>=6'}
473 | dependencies:
474 | parent-module: 1.0.1
475 | resolve-from: 4.0.0
476 | dev: true
477 |
478 | /imurmurhash@0.1.4:
479 | resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
480 | engines: {node: '>=0.8.19'}
481 | dev: true
482 |
483 | /inflight@1.0.6:
484 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
485 | dependencies:
486 | once: 1.4.0
487 | wrappy: 1.0.2
488 | dev: true
489 |
490 | /inherits@2.0.4:
491 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
492 | dev: true
493 |
494 | /is-extglob@2.1.1:
495 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
496 | engines: {node: '>=0.10.0'}
497 | dev: true
498 |
499 | /is-glob@4.0.3:
500 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
501 | engines: {node: '>=0.10.0'}
502 | dependencies:
503 | is-extglob: 2.1.1
504 | dev: true
505 |
506 | /is-number@7.0.0:
507 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
508 | engines: {node: '>=0.12.0'}
509 | dev: true
510 |
511 | /is-path-inside@3.0.3:
512 | resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==}
513 | engines: {node: '>=8'}
514 | dev: true
515 |
516 | /isexe@2.0.0:
517 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
518 | dev: true
519 |
520 | /js-yaml@4.1.0:
521 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
522 | hasBin: true
523 | dependencies:
524 | argparse: 2.0.1
525 | dev: true
526 |
527 | /json-buffer@3.0.1:
528 | resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==}
529 | dev: true
530 |
531 | /json-schema-traverse@0.4.1:
532 | resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
533 | dev: true
534 |
535 | /json-stable-stringify-without-jsonify@1.0.1:
536 | resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
537 | dev: true
538 |
539 | /keyv@4.5.4:
540 | resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
541 | dependencies:
542 | json-buffer: 3.0.1
543 | dev: true
544 |
545 | /levn@0.4.1:
546 | resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
547 | engines: {node: '>= 0.8.0'}
548 | dependencies:
549 | prelude-ls: 1.2.1
550 | type-check: 0.4.0
551 | dev: true
552 |
553 | /lilconfig@2.1.0:
554 | resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==}
555 | engines: {node: '>=10'}
556 | dev: true
557 |
558 | /locate-path@6.0.0:
559 | resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
560 | engines: {node: '>=10'}
561 | dependencies:
562 | p-locate: 5.0.0
563 | dev: true
564 |
565 | /lodash.merge@4.6.2:
566 | resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
567 | dev: true
568 |
569 | /merge2@1.4.1:
570 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
571 | engines: {node: '>= 8'}
572 | dev: true
573 |
574 | /micromatch@4.0.5:
575 | resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==}
576 | engines: {node: '>=8.6'}
577 | dependencies:
578 | braces: 3.0.2
579 | picomatch: 2.3.1
580 | dev: true
581 |
582 | /minimatch@3.1.2:
583 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
584 | dependencies:
585 | brace-expansion: 1.1.11
586 | dev: true
587 |
588 | /ms@2.1.2:
589 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
590 | dev: true
591 |
592 | /natural-compare@1.4.0:
593 | resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
594 | dev: true
595 |
596 | /once@1.4.0:
597 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
598 | dependencies:
599 | wrappy: 1.0.2
600 | dev: true
601 |
602 | /optionator@0.9.3:
603 | resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==}
604 | engines: {node: '>= 0.8.0'}
605 | dependencies:
606 | '@aashutoshrathi/word-wrap': 1.2.6
607 | deep-is: 0.1.4
608 | fast-levenshtein: 2.0.6
609 | levn: 0.4.1
610 | prelude-ls: 1.2.1
611 | type-check: 0.4.0
612 | dev: true
613 |
614 | /p-limit@3.1.0:
615 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
616 | engines: {node: '>=10'}
617 | dependencies:
618 | yocto-queue: 0.1.0
619 | dev: true
620 |
621 | /p-locate@5.0.0:
622 | resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
623 | engines: {node: '>=10'}
624 | dependencies:
625 | p-limit: 3.1.0
626 | dev: true
627 |
628 | /parent-module@1.0.1:
629 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
630 | engines: {node: '>=6'}
631 | dependencies:
632 | callsites: 3.1.0
633 | dev: true
634 |
635 | /path-exists@4.0.0:
636 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
637 | engines: {node: '>=8'}
638 | dev: true
639 |
640 | /path-is-absolute@1.0.1:
641 | resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
642 | engines: {node: '>=0.10.0'}
643 | dev: true
644 |
645 | /path-key@3.1.1:
646 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
647 | engines: {node: '>=8'}
648 | dev: true
649 |
650 | /picomatch@2.3.1:
651 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
652 | engines: {node: '>=8.6'}
653 | dev: true
654 |
655 | /prelude-ls@1.2.1:
656 | resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
657 | engines: {node: '>= 0.8.0'}
658 | dev: true
659 |
660 | /punycode@2.3.1:
661 | resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
662 | engines: {node: '>=6'}
663 | dev: true
664 |
665 | /queue-microtask@1.2.3:
666 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
667 | dev: true
668 |
669 | /resolve-from@4.0.0:
670 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
671 | engines: {node: '>=4'}
672 | dev: true
673 |
674 | /reusify@1.0.4:
675 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
676 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
677 | dev: true
678 |
679 | /rimraf@3.0.2:
680 | resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==}
681 | hasBin: true
682 | dependencies:
683 | glob: 7.2.3
684 | dev: true
685 |
686 | /run-parallel@1.2.0:
687 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
688 | dependencies:
689 | queue-microtask: 1.2.3
690 | dev: true
691 |
692 | /shebang-command@2.0.0:
693 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
694 | engines: {node: '>=8'}
695 | dependencies:
696 | shebang-regex: 3.0.0
697 | dev: true
698 |
699 | /shebang-regex@3.0.0:
700 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
701 | engines: {node: '>=8'}
702 | dev: true
703 |
704 | /strip-ansi@6.0.1:
705 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
706 | engines: {node: '>=8'}
707 | dependencies:
708 | ansi-regex: 5.0.1
709 |
710 | /strip-json-comments@3.1.1:
711 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
712 | engines: {node: '>=8'}
713 | dev: true
714 |
715 | /supports-color@7.2.0:
716 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
717 | engines: {node: '>=8'}
718 | dependencies:
719 | has-flag: 4.0.0
720 | dev: true
721 |
722 | /text-table@0.2.0:
723 | resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==}
724 | dev: true
725 |
726 | /to-regex-range@5.0.1:
727 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
728 | engines: {node: '>=8.0'}
729 | dependencies:
730 | is-number: 7.0.0
731 | dev: true
732 |
733 | /type-check@0.4.0:
734 | resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
735 | engines: {node: '>= 0.8.0'}
736 | dependencies:
737 | prelude-ls: 1.2.1
738 | dev: true
739 |
740 | /type-fest@0.20.2:
741 | resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==}
742 | engines: {node: '>=10'}
743 | dev: true
744 |
745 | /uri-js@4.4.1:
746 | resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
747 | dependencies:
748 | punycode: 2.3.1
749 | dev: true
750 |
751 | /which@2.0.2:
752 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
753 | engines: {node: '>= 8'}
754 | hasBin: true
755 | dependencies:
756 | isexe: 2.0.0
757 | dev: true
758 |
759 | /wrappy@1.0.2:
760 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
761 | dev: true
762 |
763 | /yocto-queue@0.1.0:
764 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
765 | engines: {node: '>=10'}
766 | dev: true
767 |
--------------------------------------------------------------------------------
/template/.github/workflows/test.yml:
--------------------------------------------------------------------------------
1 | name: Test
2 | on:
3 | push:
4 | branches:
5 | - main
6 | pull_request:
7 | permissions:
8 | contents: read
9 | jobs:
10 | full:
11 | name: Node.js Latest Full
12 | runs-on: ubuntu-latest
13 | steps:
14 | - name: Checkout the repository
15 | uses: actions/checkout@v4
16 | - name: Install Node.js
17 | uses: actions/setup-node@v3
18 | with:
19 | node-version: 20
20 | cache: npm
21 | - name: Install dependencies
22 | run: npm ci --ignore-scripts
23 | - name: Run tests
24 | run: yarn test
25 | short:
26 | runs-on: ubuntu-latest
27 | strategy:
28 | matrix:
29 | node-version:
30 | - 18
31 | name: Node.js ${{ matrix.node-version }} Quick
32 | steps:
33 | - name: Checkout the repository
34 | uses: actions/checkout@v3
35 | - name: Install Node.js ${{ matrix.node-version }}
36 | uses: actions/setup-node@v3
37 | with:
38 | node-version: ${{ matrix.node-version }}
39 | cache: npm
40 | - name: Install dependencies
41 | run: npm ci --ignore-scripts
42 | - name: Run unit tests
43 | run: npm run unit
44 |
--------------------------------------------------------------------------------
/template/.t.editorconfig:
--------------------------------------------------------------------------------
1 | root = true
2 |
3 | [*]
4 | indent_style = space
5 | indent_size = 2
6 | end_of_line = lf
7 | charset = utf-8
8 | trim_trailing_whitespace = true
9 | insert_final_newline = true
10 |
--------------------------------------------------------------------------------
/template/.t.gitignore:
--------------------------------------------------------------------------------
1 | node_modules/
2 | npm-debug.log
3 | yarn-error.log
4 |
5 | coverage/
6 |
--------------------------------------------------------------------------------
/template/.t.npmignore:
--------------------------------------------------------------------------------
1 | yarn-error.log
2 | npm-debug.log
3 | package-lock.json
4 | yarn.lock
5 |
6 | *.test.js
7 | .github
8 | .editorconfig
9 | coverage/
10 |
--------------------------------------------------------------------------------
/template/CHANGELOG.md:
--------------------------------------------------------------------------------
1 | # Change Log
2 |
3 | This project adheres to [Semantic Versioning](http://semver.org/).
4 |
--------------------------------------------------------------------------------
/template/LICENSE.t:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright ${currentYear} ${authorName} <${authorEmail}>
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy of
6 | this software and associated documentation files (the "Software"), to deal in
7 | the Software without restriction, including without limitation the rights to
8 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
9 | the Software, and to permit persons to whom the Software is furnished to do so,
10 | subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
17 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
18 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
19 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
20 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21 |
--------------------------------------------------------------------------------
/template/README.t.md:
--------------------------------------------------------------------------------
1 | # ${pluginName}
2 |
3 | [PostCSS] plugin ${description}.
4 |
5 | [PostCSS]: https://github.com/postcss/postcss
6 |
7 | ```css
8 | .foo {
9 | /* Input example */
10 | }
11 | ```
12 |
13 | ```css
14 | .foo {
15 | /* Output example */
16 | }
17 | ```
18 |
19 | ## Usage
20 |
21 | **Step 1:** Install plugin:
22 |
23 | ```sh
24 | npm install --save-dev postcss ${pluginName}
25 | ```
26 |
27 | **Step 2:** Check your project for existing PostCSS config: `postcss.config.js`
28 | in the project root, `"postcss"` section in `package.json`
29 | or `postcss` in bundle config.
30 |
31 | If you do not use PostCSS, add it according to [official docs]
32 | and set this plugin in settings.
33 |
34 | **Step 3:** Add the plugin to plugins list:
35 |
36 | ```diff
37 | module.exports = {
38 | plugins: [
39 | + require('${pluginName}'),
40 | require('autoprefixer')
41 | ]
42 | }
43 | ```
44 |
45 | [official docs]: https://github.com/postcss/postcss#usage
46 |
--------------------------------------------------------------------------------
/template/index.t.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @type {import('postcss').PluginCreator}
3 | */
4 | module.exports = (opts = {}) => {
5 | // Work with options here
6 |
7 | return {
8 | postcssPlugin: '${pluginName}',
9 | /*
10 | Root (root, postcss) {
11 | // Transform CSS AST here
12 | }
13 | */
14 |
15 | /*
16 | Declaration (decl, postcss) {
17 | // The faster way to find Declaration node
18 | }
19 | */
20 |
21 | /*
22 | Declaration: {
23 | color: (decl, postcss) {
24 | // The fastest way find Declaration node if you know property name
25 | }
26 | }
27 | */
28 | }
29 | }
30 |
31 | module.exports.postcss = true
32 |
--------------------------------------------------------------------------------
/template/index.test.t.js:
--------------------------------------------------------------------------------
1 | const postcss = require('postcss')
2 | const { equal } = require('node:assert')
3 | const { test } = require('node:test')
4 |
5 | const plugin = require('./')
6 |
7 | async function run(input, output, opts = {}) {
8 | let result = await postcss([plugin(opts)]).process(input, { from: undefined })
9 | equal(result.css, output)
10 | equal(result.warnings().length, 0)
11 | }
12 |
13 | /* Write tests here
14 |
15 | test('does something', async () => {
16 | await run('a{ }', 'a{ }', { })
17 | })
18 |
19 | */
20 |
--------------------------------------------------------------------------------
/template/package.t.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "${pluginName}",
3 | "version": "0.0.0",
4 | "description": "PostCSS plugin ${description}",
5 | "keywords": ["postcss", "css", "postcss-plugin", "${pluginName}"],
6 | "scripts": {
7 | "unit": "node --test index.test.js",
8 | "test": "npm run unit && eslint ."
9 | },
10 | "author": "${authorName} <${authorEmail}>",
11 | "license": "MIT",
12 | "repository": "${gitHubName}/${pluginName}",
13 | "engines": {
14 | "node": ">=18.0.0"
15 | },
16 | "peerDependencies": {
17 | "postcss": "^8.4.27"
18 | },
19 | "devDependencies": {
20 | "eslint": "^8.47.0",
21 | "postcss": "^8.4.27"
22 | },
23 | "eslintConfig": {
24 | "parserOptions": {
25 | "ecmaVersion": 2017
26 | },
27 | "env": {
28 | "node": true,
29 | "es6": true
30 | },
31 | "extends": ["eslint:recommended"]
32 | }
33 | }
34 |
--------------------------------------------------------------------------------