From e06ec920f7a5d784e674c4c4b4e6d1da3dc7391d Mon Sep 17 00:00:00 2001 From: Piotr Russ Date: Mon, 16 Nov 2020 00:10:28 +0100 Subject: api, login, auth --- node_modules/postcss-modules-scope/README.md | 100 +++++++++++++ node_modules/postcss-modules-scope/lib/index.js | 183 ++++++++++++++++++++++++ node_modules/postcss-modules-scope/package.json | 79 ++++++++++ 3 files changed, 362 insertions(+) create mode 100644 node_modules/postcss-modules-scope/README.md create mode 100644 node_modules/postcss-modules-scope/lib/index.js create mode 100644 node_modules/postcss-modules-scope/package.json (limited to 'node_modules/postcss-modules-scope') diff --git a/node_modules/postcss-modules-scope/README.md b/node_modules/postcss-modules-scope/README.md new file mode 100644 index 0000000..7abe23b --- /dev/null +++ b/node_modules/postcss-modules-scope/README.md @@ -0,0 +1,100 @@ +# CSS Modules: Scope Locals & Extend + +[![Build Status](https://travis-ci.org/css-modules/postcss-modules-scope.svg?branch=master)](https://travis-ci.org/css-modules/postcss-modules-scope) + +Transforms: + +```css +:local(.continueButton) { + color: green; +} +``` + +into: + +```css +:export { + continueButton: __buttons_continueButton_djd347adcxz9; +} +.__buttons_continueButton_djd347adcxz9 { + color: green; +} +``` + +so it doesn't pollute CSS global scope and can be simply used in JS like so: + +```js +import styles from './buttons.css' +elem.innerHTML = `` +``` + +## Composition + +Since we're exporting class names, there's no reason to export only one. This can give us some really useful reuse of styles: + +```css +.globalButtonStyle { + background: white; + border: 1px solid; + border-radius: 0.25rem; +} +.globalButtonStyle:hover { + box-shadow: 0 0 4px -2px; +} +:local(.continueButton) { + compose-with: globalButtonStyle; + color: green; +} +``` + +becomes: + +``` +.globalButtonStyle { + background: white; + border: 1px solid; + border-radius: 0.25rem; +} +.globalButtonStyle:hover { + box-shadow: 0 0 4px -2px; +} +:local(.continueButton) { + compose-with: globalButtonStyle; + color: green; +} +``` + +**Note:** you can also use `composes` as a shorthand for `compose-with` + +## Local-by-default & reuse across files + +You're looking for [CSS Modules](https://github.com/css-modules/css-modules). It uses this plugin as well as a few others, and it's amazing. + +## Building + +``` +npm install +npm test +``` + +[![Build Status](https://travis-ci.org/css-modules/postcss-modules-scope.svg?branch=master)](https://travis-ci.org/css-modules/postcss-modules-scope) + +* Lines: [![Coverage Status](https://coveralls.io/repos/css-modules/postcss-modules-scope/badge.svg?branch=master)](https://coveralls.io/r/css-modules/postcss-modules-scope?branch=master) +* Statements: [![codecov.io](http://codecov.io/github/css-modules/postcss-modules-scope/coverage.svg?branch=master)](http://codecov.io/github/css-modules/postcss-modules-scope?branch=master) + +## Development + +- `npm autotest` will watch `src` and `test` for changes and run the tests, and transpile the ES6 to ES5 on success + +## License + +ISC + +## With thanks + +- Mark Dalgleish +- Tobias Koppers +- Guy Bedford + +--- +Glen Maddern, 2015. diff --git a/node_modules/postcss-modules-scope/lib/index.js b/node_modules/postcss-modules-scope/lib/index.js new file mode 100644 index 0000000..e060712 --- /dev/null +++ b/node_modules/postcss-modules-scope/lib/index.js @@ -0,0 +1,183 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + +var _postcss = require('postcss'); + +var _postcss2 = _interopRequireDefault(_postcss); + +var _cssSelectorTokenizer = require('css-selector-tokenizer'); + +var _cssSelectorTokenizer2 = _interopRequireDefault(_cssSelectorTokenizer); + +var hasOwnProperty = Object.prototype.hasOwnProperty; + +function getSingleLocalNamesForComposes(selectors) { + return selectors.nodes.map(function (node) { + if (node.type !== 'selector' || node.nodes.length !== 1) { + throw new Error('composition is only allowed when selector is single :local class name not in "' + _cssSelectorTokenizer2['default'].stringify(selectors) + '"'); + } + node = node.nodes[0]; + if (node.type !== 'nested-pseudo-class' || node.name !== 'local' || node.nodes.length !== 1) { + throw new Error('composition is only allowed when selector is single :local class name not in "' + _cssSelectorTokenizer2['default'].stringify(selectors) + '", "' + _cssSelectorTokenizer2['default'].stringify(node) + '" is weird'); + } + node = node.nodes[0]; + if (node.type !== 'selector' || node.nodes.length !== 1) { + throw new Error('composition is only allowed when selector is single :local class name not in "' + _cssSelectorTokenizer2['default'].stringify(selectors) + '", "' + _cssSelectorTokenizer2['default'].stringify(node) + '" is weird'); + } + node = node.nodes[0]; + if (node.type !== 'class') { + // 'id' is not possible, because you can't compose ids + throw new Error('composition is only allowed when selector is single :local class name not in "' + _cssSelectorTokenizer2['default'].stringify(selectors) + '", "' + _cssSelectorTokenizer2['default'].stringify(node) + '" is weird'); + } + return node.name; + }); +} + +var processor = _postcss2['default'].plugin('postcss-modules-scope', function (options) { + return function (css) { + var generateScopedName = options && options.generateScopedName || processor.generateScopedName; + + var exports = {}; + + function exportScopedName(name) { + var scopedName = generateScopedName(name, css.source.input.from, css.source.input.css); + exports[name] = exports[name] || []; + if (exports[name].indexOf(scopedName) < 0) { + exports[name].push(scopedName); + } + return scopedName; + } + + function localizeNode(node) { + var newNode = Object.create(node); + switch (node.type) { + case 'selector': + newNode.nodes = node.nodes.map(localizeNode); + return newNode; + case 'class': + case 'id': + var scopedName = exportScopedName(node.name); + newNode.name = scopedName; + return newNode; + } + throw new Error(node.type + ' ("' + _cssSelectorTokenizer2['default'].stringify(node) + '") is not allowed in a :local block'); + } + + function traverseNode(node) { + switch (node.type) { + case 'nested-pseudo-class': + if (node.name === 'local') { + if (node.nodes.length !== 1) { + throw new Error('Unexpected comma (",") in :local block'); + } + return localizeNode(node.nodes[0]); + } + /* falls through */ + case 'selectors': + case 'selector': + var newNode = Object.create(node); + newNode.nodes = node.nodes.map(traverseNode); + return newNode; + } + return node; + } + + // Find any :import and remember imported names + var importedNames = {}; + css.walkRules(function (rule) { + if (/^:import\(.+\)$/.test(rule.selector)) { + rule.walkDecls(function (decl) { + importedNames[decl.prop] = true; + }); + } + }); + + // Find any :local classes + css.walkRules(function (rule) { + var selector = _cssSelectorTokenizer2['default'].parse(rule.selector); + var newSelector = traverseNode(selector); + rule.selector = _cssSelectorTokenizer2['default'].stringify(newSelector); + rule.walkDecls(/composes|compose-with/, function (decl) { + var localNames = getSingleLocalNamesForComposes(selector); + var classes = decl.value.split(/\s+/); + classes.forEach(function (className) { + var global = /^global\(([^\)]+)\)$/.exec(className); + if (global) { + localNames.forEach(function (exportedName) { + exports[exportedName].push(global[1]); + }); + } else if (hasOwnProperty.call(importedNames, className)) { + localNames.forEach(function (exportedName) { + exports[exportedName].push(className); + }); + } else if (hasOwnProperty.call(exports, className)) { + localNames.forEach(function (exportedName) { + exports[className].forEach(function (item) { + exports[exportedName].push(item); + }); + }); + } else { + throw decl.error('referenced class name "' + className + '" in ' + decl.prop + ' not found'); + } + }); + decl.remove(); + }); + + rule.walkDecls(function (decl) { + var tokens = decl.value.split(/(,|'[^']*'|"[^"]*")/); + tokens = tokens.map(function (token, idx) { + if (idx === 0 || tokens[idx - 1] === ',') { + var localMatch = /^(\s*):local\s*\((.+?)\)/.exec(token); + if (localMatch) { + return localMatch[1] + exportScopedName(localMatch[2]) + token.substr(localMatch[0].length); + } else { + return token; + } + } else { + return token; + } + }); + decl.value = tokens.join(''); + }); + }); + + // Find any :local keyframes + css.walkAtRules(function (atrule) { + if (/keyframes$/.test(atrule.name)) { + var localMatch = /^\s*:local\s*\((.+?)\)\s*$/.exec(atrule.params); + if (localMatch) { + atrule.params = exportScopedName(localMatch[1]); + } + } + }); + + // If we found any :locals, insert an :export rule + var exportedNames = Object.keys(exports); + if (exportedNames.length > 0) { + (function () { + var exportRule = _postcss2['default'].rule({ selector: ':export' }); + exportedNames.forEach(function (exportedName) { + return exportRule.append({ + prop: exportedName, + value: exports[exportedName].join(' '), + raws: { before: '\n ' } + }); + }); + css.append(exportRule); + })(); + } + }; +}); + +processor.generateScopedName = function (exportedName, path) { + var sanitisedPath = path.replace(/\.[^\.\/\\]+$/, '').replace(/[\W_]+/g, '_').replace(/^_|_$/g, ''); + return '_' + sanitisedPath + '__' + exportedName; +}; + +exports['default'] = processor; +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/postcss-modules-scope/package.json b/node_modules/postcss-modules-scope/package.json new file mode 100644 index 0000000..3f510d0 --- /dev/null +++ b/node_modules/postcss-modules-scope/package.json @@ -0,0 +1,79 @@ +{ + "_from": "postcss-modules-scope@^1.1.0", + "_id": "postcss-modules-scope@1.1.0", + "_inBundle": false, + "_integrity": "sha1-1upkmUx5+XtipytCb75gVqGUu5A=", + "_location": "/postcss-modules-scope", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "postcss-modules-scope@^1.1.0", + "name": "postcss-modules-scope", + "escapedName": "postcss-modules-scope", + "rawSpec": "^1.1.0", + "saveSpec": null, + "fetchSpec": "^1.1.0" + }, + "_requiredBy": [ + "/css-loader" + ], + "_resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz", + "_shasum": "d6ea64994c79f97b62a72b426fbe6056a194bb90", + "_spec": "postcss-modules-scope@^1.1.0", + "_where": "/home/pruss/Dev/3-minute-website/node_modules/css-loader", + "author": { + "name": "Glen Maddern" + }, + "bugs": { + "url": "https://github.com/css-modules/postcss-modules-scope/issues" + }, + "bundleDependencies": false, + "dependencies": { + "css-selector-tokenizer": "^0.7.0", + "postcss": "^6.0.1" + }, + "deprecated": false, + "description": "A CSS Modules transform to extract export statements from local-scope classes", + "devDependencies": { + "babel": "^5.4.7", + "babel-eslint": "^6.1.2", + "babel-istanbul": "^0.4.0", + "babelify": "^7.1.0", + "chokidar-cli": "^1.0.1", + "codecov.io": "^0.1.2", + "coveralls": "^2.11.2", + "css-selector-parser": "^1.0.4", + "eslint": "^1.5.0", + "mocha": "^3.0.1" + }, + "files": [ + "lib" + ], + "homepage": "https://github.com/css-modules/postcss-modules-scope", + "keywords": [ + "css-modules", + "postcss", + "plugin" + ], + "license": "ISC", + "main": "lib/index.js", + "name": "postcss-modules-scope", + "repository": { + "type": "git", + "url": "git+https://github.com/css-modules/postcss-modules-scope.git" + }, + "scripts": { + "autotest": "chokidar src test -c 'npm test'", + "build": "babel --out-dir lib src", + "cover": "babel-istanbul cover node_modules/.bin/_mocha", + "lint": "eslint src", + "posttest": "npm run lint && npm run build", + "precover": "npm run lint && npm run build", + "prepublish": "npm run build", + "test": "mocha --compilers js:babel/register", + "travis": "npm run cover -- --report lcovonly", + "watch": "chokidar src -c 'npm run build'" + }, + "version": "1.1.0" +} -- cgit v1.2.3