├── .nvmrc
├── __tests__
├── next-10
│ ├── .npmrc
│ ├── next.config.js
│ ├── pages
│ │ ├── _app.js
│ │ └── index.js
│ └── package.json
├── next-10-local
│ ├── .npmrc
│ ├── src
│ │ └── components
│ │ │ ├── css-component
│ │ │ ├── styles.css
│ │ │ └── index.js
│ │ │ └── scss-component
│ │ │ ├── styles.scss
│ │ │ └── index.js
│ ├── next.config.js
│ ├── pages
│ │ ├── _app.js
│ │ └── index.js
│ └── package.json
├── next-10-ssr
│ ├── .npmrc
│ ├── pages
│ │ ├── index.js
│ │ ├── _app.js
│ │ └── _document.js
│ ├── next.config.js
│ └── package.json
├── next-12-react-18-local
│ ├── .npmrc
│ ├── src
│ │ └── components
│ │ │ ├── css-component
│ │ │ ├── styles.css
│ │ │ └── index.js
│ │ │ └── scss-component
│ │ │ ├── styles.scss
│ │ │ └── index.js
│ ├── next.config.js
│ ├── pages
│ │ ├── _app.js
│ │ └── index.js
│ └── package.json
├── __fixtures__
│ └── 3d-party-library
│ │ ├── component
│ │ ├── styles.css
│ │ └── index.js
│ │ ├── scss-component
│ │ ├── styles.scss
│ │ └── index.js
│ │ └── package.json
└── index.test.js
├── .npmrc
├── lib
├── constants.js
├── patch-global-require.js
└── index.js
├── .prettierrc
├── .editorconfig
├── .github
└── workflows
│ └── ci.yml
├── package.json
├── license.md
├── readme.md
└── .gitignore
/.nvmrc:
--------------------------------------------------------------------------------
1 | 12.18.1
2 |
--------------------------------------------------------------------------------
/__tests__/next-10/.npmrc:
--------------------------------------------------------------------------------
1 | package-lock=false
2 |
--------------------------------------------------------------------------------
/__tests__/next-10-local/.npmrc:
--------------------------------------------------------------------------------
1 | package-lock=false
2 |
--------------------------------------------------------------------------------
/__tests__/next-10-ssr/.npmrc:
--------------------------------------------------------------------------------
1 | package-lock=false
2 |
--------------------------------------------------------------------------------
/__tests__/next-12-react-18-local/.npmrc:
--------------------------------------------------------------------------------
1 | package-lock=false
2 |
--------------------------------------------------------------------------------
/.npmrc:
--------------------------------------------------------------------------------
1 | tag-version-prefix="v"
2 | message="chore: release %s"
3 |
--------------------------------------------------------------------------------
/__tests__/__fixtures__/3d-party-library/component/styles.css:
--------------------------------------------------------------------------------
1 | .Component {
2 | color: red;
3 | }
4 |
--------------------------------------------------------------------------------
/__tests__/next-10-local/src/components/css-component/styles.css:
--------------------------------------------------------------------------------
1 | .css-button {
2 | color: red;
3 | }
4 |
--------------------------------------------------------------------------------
/__tests__/next-10-local/src/components/scss-component/styles.scss:
--------------------------------------------------------------------------------
1 | .scss-button {
2 | color: red;
3 | }
4 |
--------------------------------------------------------------------------------
/__tests__/__fixtures__/3d-party-library/scss-component/styles.scss:
--------------------------------------------------------------------------------
1 | .scss-Component {
2 | color: red;
3 | }
4 |
--------------------------------------------------------------------------------
/__tests__/next-12-react-18-local/src/components/css-component/styles.css:
--------------------------------------------------------------------------------
1 | .css-button {
2 | color: red;
3 | }
4 |
--------------------------------------------------------------------------------
/__tests__/next-12-react-18-local/src/components/scss-component/styles.scss:
--------------------------------------------------------------------------------
1 | .scss-button {
2 | color: red;
3 | }
4 |
--------------------------------------------------------------------------------
/__tests__/next-10/next.config.js:
--------------------------------------------------------------------------------
1 | const { withGlobalCss } = require('../../lib')
2 |
3 | module.exports = withGlobalCss()()
4 |
--------------------------------------------------------------------------------
/__tests__/next-10-local/next.config.js:
--------------------------------------------------------------------------------
1 | const { withGlobalCss } = require('../../lib')
2 |
3 | module.exports = withGlobalCss()()
4 |
--------------------------------------------------------------------------------
/__tests__/next-12-react-18-local/next.config.js:
--------------------------------------------------------------------------------
1 | const { withGlobalCss } = require('../../lib')
2 |
3 | module.exports = withGlobalCss()()
4 |
--------------------------------------------------------------------------------
/__tests__/next-10-ssr/pages/index.js:
--------------------------------------------------------------------------------
1 | import { Component } from '3d-party-library/component'
2 |
3 | export default function Home() {
4 | return
5 | }
6 |
--------------------------------------------------------------------------------
/__tests__/next-10/pages/_app.js:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 |
3 | export default function MyApp({ Component, pageProps }) {
4 | return
5 | }
6 |
--------------------------------------------------------------------------------
/__tests__/next-10-local/pages/_app.js:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 |
3 | export default function MyApp({ Component, pageProps }) {
4 | return
5 | }
6 |
--------------------------------------------------------------------------------
/__tests__/next-10-ssr/pages/_app.js:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 |
3 | export default function MyApp({ Component, pageProps }) {
4 | return
5 | }
6 |
--------------------------------------------------------------------------------
/__tests__/next-10-ssr/next.config.js:
--------------------------------------------------------------------------------
1 | const { withGlobalCss } = require('../../lib')
2 |
3 | module.exports = withGlobalCss()({
4 | future: {
5 | webpack5: true,
6 | },
7 | })
8 |
--------------------------------------------------------------------------------
/__tests__/next-12-react-18-local/pages/_app.js:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 |
3 | export default function MyApp({ Component, pageProps }) {
4 | return
5 | }
6 |
--------------------------------------------------------------------------------
/__tests__/__fixtures__/3d-party-library/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "3d-party-library",
3 | "version": "0.0.1",
4 | "private": "true",
5 | "dependencies": {
6 | "react": "^17.0.2"
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/__tests__/next-10-local/src/components/css-component/index.js:
--------------------------------------------------------------------------------
1 | import './styles.css'
2 |
3 | export const CssComponent = () => {
4 | return
5 | }
6 |
--------------------------------------------------------------------------------
/__tests__/next-10-local/src/components/scss-component/index.js:
--------------------------------------------------------------------------------
1 | import './styles.scss'
2 |
3 | export const ScssComponent = () => {
4 | return
5 | }
6 |
--------------------------------------------------------------------------------
/__tests__/next-12-react-18-local/src/components/css-component/index.js:
--------------------------------------------------------------------------------
1 | import './styles.css'
2 |
3 | export const CssComponent = () => {
4 | return
5 | }
6 |
--------------------------------------------------------------------------------
/__tests__/next-12-react-18-local/src/components/scss-component/index.js:
--------------------------------------------------------------------------------
1 | import './styles.scss'
2 |
3 | export const ScssComponent = () => {
4 | return
5 | }
6 |
--------------------------------------------------------------------------------
/lib/constants.js:
--------------------------------------------------------------------------------
1 | const globalCssRe = [/(? {
5 | return React.createElement('div', { className: 'Component' }, 'Component!')
6 | }
7 |
--------------------------------------------------------------------------------
/__tests__/__fixtures__/3d-party-library/scss-component/index.js:
--------------------------------------------------------------------------------
1 | const React = require('react')
2 | require('./styles.scss')
3 |
4 | module.exports.ScssComponent = () => {
5 | return React.createElement('div', { className: 'scss-Component' }, 'Component!')
6 | }
7 |
--------------------------------------------------------------------------------
/.editorconfig:
--------------------------------------------------------------------------------
1 | # EditorConfig is awesome: http://EditorConfig.org
2 | root = true
3 |
4 | [*]
5 | charset = utf-8
6 | indent_style = space
7 | indent_size = 2
8 | trim_trailing_whitespace = true
9 | end_of_line = lf
10 | insert_final_newline = true
11 | max_line_length = 100
12 |
--------------------------------------------------------------------------------
/__tests__/next-10/pages/index.js:
--------------------------------------------------------------------------------
1 | import { Component } from '3d-party-library/component'
2 | import { ScssComponent } from '3d-party-library/scss-component'
3 |
4 | export default function Home() {
5 | return (
6 | <>
7 |
8 |
9 | >
10 | )
11 | }
12 |
--------------------------------------------------------------------------------
/lib/patch-global-require.js:
--------------------------------------------------------------------------------
1 | const Module = require('module')
2 |
3 | const { globalCssRe } = require('./constants')
4 |
5 | Module.prototype.require = new Proxy(Module.prototype.require, {
6 | apply(target, thisArg, args) {
7 | if (globalCssRe.some((reg) => reg.test(args[0]))) {
8 | return ''
9 | }
10 | return Reflect.apply(target, thisArg, args)
11 | },
12 | })
13 |
--------------------------------------------------------------------------------
/__tests__/next-10-local/pages/index.js:
--------------------------------------------------------------------------------
1 | import { Component } from '3d-party-library/component'
2 | import { ScssComponent } from '../src/components/scss-component'
3 | import { CssComponent } from '../src/components/css-component'
4 |
5 | export default function Home() {
6 | return (
7 | <>
8 |
9 |
10 |
11 | >
12 | )
13 | }
14 |
--------------------------------------------------------------------------------
/.github/workflows/ci.yml:
--------------------------------------------------------------------------------
1 | name: ci
2 |
3 | on:
4 | push:
5 | branches:
6 | - master
7 | pull_request:
8 | branches:
9 | - master
10 |
11 | jobs:
12 | tests:
13 | runs-on: ubuntu-latest
14 |
15 | steps:
16 | - uses: actions/checkout@v1
17 | - uses: actions/setup-node@v1
18 | with:
19 | node-version: 12
20 |
21 | - name: tests
22 | run: npm run test
23 |
--------------------------------------------------------------------------------
/__tests__/next-12-react-18-local/pages/index.js:
--------------------------------------------------------------------------------
1 | import { Component } from '3d-party-library/component'
2 | import { ScssComponent } from '../src/components/scss-component'
3 | import { CssComponent } from '../src/components/css-component'
4 |
5 | export default function Home() {
6 | return (
7 | <>
8 |
9 |
10 |
11 | >
12 | )
13 | }
14 |
--------------------------------------------------------------------------------
/__tests__/next-10-ssr/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "next-10-ssr",
3 | "version": "0.0.1",
4 | "private": "true",
5 | "scripts": {
6 | "build": "next build",
7 | "dev": "next dev"
8 | },
9 | "dependencies": {
10 | "3d-party-library": "file:../__fixtures__/3d-party-library/3d-party-library-0.0.1.tgz",
11 | "next": "^10.2.0",
12 | "react": "^17.0.2",
13 | "react-dom": "^17.0.2"
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/__tests__/next-10-ssr/pages/_document.js:
--------------------------------------------------------------------------------
1 | import BaseDocument, { Html, Head, Main, NextScript } from 'next/document'
2 | import '3d-party-library/component'
3 |
4 | export default class Document extends BaseDocument {
5 | render() {
6 | return (
7 |
8 |
10 |
11 |
12 |
13 |
14 | )
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/__tests__/next-10/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "next-10",
3 | "version": "0.0.1",
4 | "private": "true",
5 | "scripts": {
6 | "build": "next build",
7 | "dev": "next dev"
8 | },
9 | "dependencies": {
10 | "3d-party-library": "file:../__fixtures__/3d-party-library/3d-party-library-0.0.1.tgz",
11 | "next": "^10.2.0",
12 | "react": "^17.0.2",
13 | "react-dom": "^17.0.2",
14 | "sass": "^1.34.0"
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/__tests__/next-10-local/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "next-10-local",
3 | "version": "0.0.1",
4 | "private": "true",
5 | "scripts": {
6 | "build": "next build",
7 | "dev": "next dev"
8 | },
9 | "dependencies": {
10 | "3d-party-library": "file:../__fixtures__/3d-party-library/3d-party-library-0.0.1.tgz",
11 | "next": "^10.2.0",
12 | "react": "^17.0.2",
13 | "react-dom": "^17.0.2",
14 | "sass": "^1.34.0"
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/__tests__/next-12-react-18-local/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "next-10-local",
3 | "version": "0.0.1",
4 | "private": "true",
5 | "scripts": {
6 | "build": "next build",
7 | "dev": "next dev"
8 | },
9 | "dependencies": {
10 | "3d-party-library": "file:../__fixtures__/3d-party-library/3d-party-library-0.0.1.tgz",
11 | "next": "^12.1.4",
12 | "react": "^18.0.0",
13 | "react-dom": "^18.0.0",
14 | "sass": "^1.34.0"
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/__tests__/index.test.js:
--------------------------------------------------------------------------------
1 | const { resolve } = require('path')
2 | const { execSync } = require('child_process')
3 |
4 | const arg = process.argv[2]
5 | const version = arg.split('=')[1]
6 |
7 | function prepareFixture(version) {
8 | console.log('> Pack 3d-party-library')
9 | execSync('npm pack', { cwd: resolve(__dirname, '__fixtures__/3d-party-library'), stdio: 'ignore' })
10 | console.log(`> Install next-${version} deps`)
11 | execSync('npm i --no-package-lock', { cwd: resolve(__dirname, `next-${version}`), stdio: 'ignore' })
12 | }
13 |
14 | function runBuild(version) {
15 | console.log(`> Run next-${version} build`)
16 | execSync('npm run build', { cwd: resolve(__dirname, `next-${version}`), stdio: 'ignore' })
17 | }
18 |
19 | prepareFixture(version)
20 | runBuild(version)
21 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "next-global-css",
3 | "version": "1.3.1",
4 | "main": "lib/index.js",
5 | "files": [
6 | "lib"
7 | ],
8 | "repository": {
9 | "type": "git",
10 | "url": "git+https://github.com/bem/next-global-css.git"
11 | },
12 | "license": "MIT",
13 | "bugs": {
14 | "url": "https://github.com/bem/next-global-css/issues"
15 | },
16 | "homepage": "https://github.com/bem/next-global-css#readme",
17 | "scripts": {
18 | "test-next-10-local": "node ./__tests__/index.test.js --version=10-local",
19 | "test-next-10-ssr": "node ./__tests__/index.test.js --version=10-ssr",
20 | "test-next-10": "node ./__tests__/index.test.js --version=10",
21 | "test-next-12-react-18-local": "node ./__tests__/index.test.js --version=12-react-18-local",
22 | "test": "npm run test-next-10-local && npm run test-next-10-ssr && npm run test-next-10 && npm run test-next-12-react-18-local"
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/license.md:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2021 Tropin Eugeniy
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, 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,
16 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
18 | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
19 | DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
20 | OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE
21 | OR OTHER DEALINGS IN THE SOFTWARE.
22 |
--------------------------------------------------------------------------------
/lib/index.js:
--------------------------------------------------------------------------------
1 | const { globalCssRe, globalCssModulesRe } = require('./constants')
2 |
3 | function patchServerWebpackConfig(config) {
4 | const originalEntry = config.entry
5 | config.entry = async () => {
6 | const entry = await originalEntry()
7 | const patchPath = require.resolve('./patch-global-require')
8 | // Prepend module with patched `require` for ignore load css files.
9 | if (entry['pages/_app'] && !entry['pages/_app'].includes(patchPath)) {
10 | entry['pages/_app'].unshift(patchPath)
11 | }
12 | if (entry['pages/_document'] && !entry['pages/_document'].includes(patchPath)) {
13 | entry['pages/_document'].unshift(patchPath)
14 | }
15 | return entry
16 | }
17 | }
18 |
19 | function patchCommonWebpackConfig(config) {
20 | for (const rule of config.module.rules) {
21 | if (rule.oneOf) {
22 | for (const oneOfRule of rule.oneOf) {
23 | patchWebpackStyleRules(oneOfRule)
24 | }
25 | } else {
26 | patchWebpackStyleRules(rule)
27 | }
28 | }
29 | }
30 |
31 | function patchWebpackStyleRules(rawRule) {
32 | const rules = Array.isArray(rawRule) ? rawRule : [rawRule]
33 | const cssRe = [...globalCssRe, ...globalCssModulesRe]
34 |
35 | for (const rule of rules) {
36 | if (rule.test && cssRe.some((reg) => reg.source === rule.test.source)) {
37 | // Remove issuer for allow import css from 3d-party libs and locals.
38 | delete rule.issuer
39 | }
40 | }
41 | }
42 |
43 | function patchWebpackConfig(config, { isServer }) {
44 | if (isServer) {
45 | patchServerWebpackConfig(config)
46 | }
47 |
48 | patchCommonWebpackConfig(config)
49 |
50 | return config
51 | }
52 |
53 | function withGlobalCss() {
54 | return (nextConfig) => {
55 | const config = {
56 | webpack: (config, { isServer }) => {
57 | return patchWebpackConfig(config, { isServer })
58 | },
59 | }
60 | return { ...nextConfig, ...config }
61 | }
62 | }
63 |
64 | module.exports = {
65 | withGlobalCss,
66 | patchWebpackConfig,
67 | }
68 |
--------------------------------------------------------------------------------
/readme.md:
--------------------------------------------------------------------------------
1 | # next-global-css
2 |
3 | [][npm] [][nextjs]
4 |
5 | A preset for [nextjs][nextjs] allowing using 3d party libraries with global css.
6 |
7 | > ⚠️ Be careful, this solution can be unstable due to [nextjs][nextjs] updates.
8 |
9 | ## 🏗 Compatible
10 |
11 | Current version works only for 10th version of [nextjs][nextjs] or higher.
12 |
13 | ## ☄️ Install and usage
14 |
15 | **Installation:**
16 |
17 | ```sh
18 | npm i -PE next-global-css
19 | ```
20 |
21 | **Configure:**
22 |
23 | ```js
24 | const { withGlobalCss } = require('next-global-css')
25 |
26 | const withConfig = withGlobalCss()
27 |
28 | module.exports = withConfig({
29 | /* Next.js config options here */
30 | })
31 | ```
32 |
33 | **If your webpack configuration is already customized:**
34 |
35 | ```js
36 | const { patchWebpackConfig } = require('next-global-css')
37 |
38 | const nextConfig = {
39 | /* config options here */
40 | /* your already customized webpack option */
41 | webpack: (config, options) => {
42 | patchWebpackConfig(config, options)
43 | },
44 | }
45 | ```
46 |
47 | **Allow css-modules from node-modules:**
48 |
49 | ```js
50 | const { patchWebpackConfig } = require('next-global-css')
51 | const webpackNodeExternals = require('webpack-node-externals')
52 |
53 | module.exports = {
54 | reactStrictMode: true,
55 | webpack: (config, options) => {
56 | patchWebpackConfig(config, options)
57 |
58 | if (options.isServer) {
59 | config.externals = webpackNodeExternals({
60 | // Uses list to add this modules for server bundle and process.
61 | allowlist: [/design-system/],
62 | })
63 | }
64 |
65 | return config
66 | },
67 | }
68 | ```
69 |
70 | ## 📜 License
71 |
72 | Project is [MIT licensed](https://github.com/yarastqt/next-global-css/blob/master/license.md).
73 |
74 | [nextjs]: https://nextjs.org/
75 | [npm]: https://www.npmjs.com/package/next-global-css
76 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Created by https://www.gitignore.io/api/node,osx,windows,linux
2 |
3 | ### Linux ###
4 | *~
5 |
6 | # temporary files which can be created if a process still has a handle open of a deleted file
7 | .fuse_hidden*
8 |
9 | # KDE directory preferences
10 | .directory
11 |
12 | # Linux trash folder which might appear on any partition or disk
13 | .Trash-*
14 |
15 | # .nfs files are created when an open file is removed but is still being accessed
16 | .nfs*
17 |
18 | ### Node ###
19 | # Logs
20 | logs
21 | *.log
22 | npm-debug.log*
23 | yarn-debug.log*
24 | yarn-error.log*
25 |
26 | # Runtime data
27 | pids
28 | *.pid
29 | *.seed
30 | *.pid.lock
31 |
32 | # Directory for instrumented libs generated by jscoverage/JSCover
33 | lib-cov
34 |
35 | # Coverage directory used by tools like istanbul
36 | coverage
37 |
38 | # nyc test coverage
39 | .nyc_output
40 |
41 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
42 | .grunt
43 |
44 | # Bower dependency directory (https://bower.io/)
45 | bower_components
46 |
47 | # node-waf configuration
48 | .lock-wscript
49 |
50 | # Compiled binary addons (http://nodejs.org/api/addons.html)
51 | build/Release
52 |
53 | # Dependency directories
54 | node_modules/
55 | jspm_packages/
56 |
57 | # Typescript v1 declaration files
58 | typings/
59 |
60 | # Optional npm cache directory
61 | .npm
62 | !.npmrc
63 |
64 | # Optional eslint cache
65 | .eslintcache
66 |
67 | # Optional REPL history
68 | .node_repl_history
69 |
70 | # Output of 'npm pack'
71 | *.tgz
72 |
73 | # Yarn Integrity file
74 | .yarn-integrity
75 |
76 | # Yarn Lock file
77 | yarn.lock
78 |
79 | # dotenv environment variables file
80 | .env
81 |
82 |
83 | ### OSX ###
84 | *.DS_Store
85 | .AppleDouble
86 | .LSOverride
87 |
88 | # Thumbnails
89 | ._*
90 |
91 | # Files that might appear in the root of a volume
92 | .DocumentRevisions-V100
93 | .fseventsd
94 | .Spotlight-V100
95 | .TemporaryItems
96 | .Trashes
97 | .VolumeIcon.icns
98 | .com.apple.timemachine.donotpresent
99 |
100 | # Directories potentially created on remote AFP share
101 | .AppleDB
102 | .AppleDesktop
103 | Network Trash Folder
104 | Temporary Items
105 | .apdisk
106 |
107 | ### Windows ###
108 | # Windows thumbnail cache files
109 | Thumbs.db
110 | ehthumbs.db
111 | ehthumbs_vista.db
112 |
113 | # Folder config file
114 | Desktop.ini
115 |
116 | # Recycle Bin used on file shares
117 | $RECYCLE.BIN/
118 |
119 | # Windows Installer files
120 | *.cab
121 | *.msi
122 | *.msm
123 | *.msp
124 |
125 | # Windows shortcuts
126 | *.lnk
127 |
128 | ### Project ###
129 | # Next
130 | .next
131 |
132 | # End of https://www.gitignore.io/api/node,osx,windows,linux
133 |
--------------------------------------------------------------------------------