New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

selector-parse

Package Overview
Dependencies
Maintainers
1
Versions
6
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

selector-parse - npm Package Compare versions

Comparing version 0.1.1 to 0.2.0

3

CHANGELOG.md

@@ -0,1 +1,4 @@

# 0.2.0
Change output that according to `HTMLElement`
# 0.1.1

@@ -2,0 +5,0 @@ Add `jsnext:main` in pkg

@@ -24,8 +24,11 @@ /*!

selectors.forEach(function (selector) {
var detail = specity(selector);
var detail = specity(selector.trim());
if (detail.attr) {
if (!result[detail.attr]) {
result[detail.attr] = [];
if (result[detail.attr] && detail.attr === 'class') {
result.class.push(detail.val);
} else if (detail.attr === 'class') {
result.class = [detail.val];
} else if (!result[detail.attr]) {
result[detail.attr] = detail.val;
}
result[detail.attr].push(detail.val);
} else {

@@ -36,5 +39,18 @@ result.tag = detail.val;

result.dataSet = Object.keys(result).filter(function (attr) {
return attr.indexOf('data-') === 0;
}).reduce(function (dataSet, attr) {
dataSet[attr.substr(5)] = result[attr];
delete result[attr];
return dataSet;
}, {});
if (!result.tag) {
result.tag = 'div';
}
if (result.class) {
result.className = result.classList = result.class;
result.className = result.className.join(' ');
delete result.class;
}
return result;

@@ -41,0 +57,0 @@ }

2

dist/selector-parse.min.js

@@ -6,2 +6,2 @@ /*!

*/
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):t.selectorParse=e()}(this,function(){"use strict";function t(t){var r=/([#.[]?[^#.\[]+)/g,n=t.match(r);return n?e(n):{}}function e(t){var e={};return t.forEach(function(t){var n=r(t);n.attr?(e[n.attr]||(e[n.attr]=[]),e[n.attr].push(n.val)):e.tag=n.val}),e.tag||(e.tag="div"),e}function r(t){if("#"===t[0])return{attr:"id",val:t.slice(1,t.length)};if("."===t[0])return{attr:"class",val:t.slice(1,t.length)};if("["===t[0]&&"]"===t[t.length-1]){var e=t.slice(1,t.length-1).split("="),r=e[0],n=e[1]||!0;return{attr:r,val:n}}return{attr:null,val:t}}return t});
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):t.selectorParse=e()}(this,function(){"use strict";function t(t){var a=/([#.[]?[^#.\[]+)/g,r=t.match(a);return r?e(r):{}}function e(t){var e={};return t.forEach(function(t){var r=a(t.trim());r.attr?e[r.attr]&&"class"===r.attr?e["class"].push(r.val):"class"===r.attr?e["class"]=[r.val]:e[r.attr]||(e[r.attr]=r.val):e.tag=r.val}),e.dataSet=Object.keys(e).filter(function(t){return 0===t.indexOf("data-")}).reduce(function(t,a){return t[a.substr(5)]=e[a],delete e[a],t},{}),e.tag||(e.tag="div"),e["class"]&&(e.className=e.classList=e["class"],e.className=e.className.join(" "),delete e["class"]),e}function a(t){if("#"===t[0])return{attr:"id",val:t.slice(1,t.length)};if("."===t[0])return{attr:"class",val:t.slice(1,t.length)};if("["===t[0]&&"]"===t[t.length-1]){var e=t.slice(1,t.length-1).split("="),a=e[0],r=e[1]||!0;return{attr:a,val:r}}return{attr:null,val:t}}return t});

@@ -13,8 +13,11 @@ function selectorParse(selector) {

selectors.forEach(selector => {
const detail = specity(selector);
const detail = specity(selector.trim());
if (detail.attr) {
if (!result[detail.attr]) {
result[detail.attr] = [];
if (result[detail.attr] && detail.attr === 'class') {
result.class.push(detail.val);
} else if (detail.attr === 'class') {
result.class = [detail.val];
} else if (!result[detail.attr]) {
result[detail.attr] = detail.val;
}
result[detail.attr].push(detail.val);
} else {

@@ -25,5 +28,18 @@ result.tag = detail.val;

result.dataSet = Object.keys(result)
.filter(attr => attr.indexOf('data-') === 0)
.reduce((dataSet, attr) => {
dataSet[attr.substr(5)] = result[attr];
delete result[attr];
return dataSet;
}, {});
if (!result.tag) {
result.tag = 'div';
}
if (result.class) {
result.className = result.classList = result.class;
result.className = result.className.join(' ');
delete result.class;
}
return result;

@@ -30,0 +46,0 @@ }

{
"name": "selector-parse",
"version": "0.1.1",
"version": "0.2.0",
"description": "Selector parser",

@@ -14,7 +14,7 @@ "main": "dist/selector-parse.js",

"postpublish": "rm -rf es",
"test": "xo && ava"
"test": "xo && ava -v"
},
"repository": {
"type": "git",
"url": "git+https://github.com/totora0155/selector-parse.js.git"
"url": "git+https://github.com/totora0155/selector-parse.git"
},

@@ -29,5 +29,5 @@ "keywords": [

"bugs": {
"url": "https://github.com/totora0155/selector-parse.js/issues"
"url": "https://github.com/totora0155/selector-parse/issues"
},
"homepage": "https://github.com/totora0155/selector-parse.js#readme",
"homepage": "https://github.com/totora0155/selector-parse#readme",
"devDependencies": {

@@ -44,4 +44,7 @@ "ava": "^0.13.0",

"esnext": true,
"space": 2
"space": 2,
"ignores": [
"es/**"
]
}
}

@@ -21,3 +21,2 @@ # Selector Parse

<script src="selector-parse.js"></script>
<!-- <script src="selector-parse.min.js"></script> -->
```

@@ -33,17 +32,18 @@

const selectorParse = require('selector-parse');
const selector = 'a#btn.box__a.icon__link[role=button][data-bool]';
const selector = `input
#name
.default.input__text
[placeholder=John][required]
[data-id=123][data-key=foo]`;
const result = selectorParse(selector);
console.log(result);
```
output
// { tag: 'input',
// id: 'name',
// placeholder: 'John',
// required: true,
// dataSet: { id: '123', key: 'foo' },
// classList: [ 'default', 'input__text' ],
// className: 'default input__text' }
```js
{ tag: 'a',
id: [ 'btn' ],
class: [ 'box__a', 'icon__link' ],
role: [ 'button' ],
'data-bool': [ true ] }
```
export default {
entry: 'lib/selector-parse.js',
dest: 'es/selector-parse.js',
dest: 'es/selector-parse.js'
};
const selectorParse = require('..');
const test = require('ava');
test('a', t => {
const {tag} = selectorParse('a');
t.is(tag, 'a');
});
test('a#id', t => {
const {tag, id} = selectorParse('a#id');
t.is(tag, 'a');
t.is(id, 'id');
});
test('#id', t => {
const result = selectorParse('#id');
t.is(result.tag, 'div', 'Not equal result.tag is \'div\'');
t.same(result.id, ['id'], 'Not equal result.id is [\'id\']');
const {tag, id} = selectorParse('#id');
t.is(tag, 'div');
t.is(id, 'id');
});
test('a.class', t => {
const result = selectorParse('a.class');
t.is(result.tag, 'a', 'Not equal result.tag is \'a\'');
t.same(result.class, ['class'], 'Not equal reuslt.class is [\'class\']');
test('#valid#invalid', t => {
const {id} = selectorParse('#valid#invalid');
t.is(id, 'valid');
});
test('.class', t => {
const {className, classList} = selectorParse('a.class');
t.is(className, 'class');
t.same(classList, ['class']);
});
test('.btn.btn--large[class=icon__link]', t => {
const {className, classList} = selectorParse('.btn.btn--large[class=icon__link]');
t.is(className, 'btn btn--large icon__link');
t.same(classList, ['btn', 'btn--large', 'icon__link']);
});
test('[test]', t => {
const result = selectorParse('[test]');
t.same(result.test, [true], 'Not equal result.test is [true]');
const {test} = selectorParse('[test]');
t.ok(test);
});
test('[test][test=false]', t => {
const {test} = selectorParse('[test]');
t.ok(test);
});
test('[data-id=1][data-lang=js]', t => {
const result = selectorParse('[data-id=1][data-lang=js]');
t.same(result['data-id'], ['1'], 'Not equal result[\'data-id\'] is [\'1\']');
t.same(result['data-lang'], ['js'], 'Not equal result[\'data-lang\'] is [\'js\']');
const {dataSet} = selectorParse('[data-id=1][data-lang=js]');
t.is(Object.keys(dataSet).length, 2);
t.is(dataSet.id, '1');
t.is(dataSet.lang, 'js');
});
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc