mirror of
https://github.com/tenrok/BBob.git
synced 2026-06-20 20:00:33 +03:00
feat: support for vue2 (#88)
* chore: initial setup for vue2 packages * feat: basic Vue 2 Component * feat(vue2): add more test cases * test(preset): add more cases to test in preset * test(preset-vue2): add more cases to test tags processing * fix(preset): tag node checking * test(preset-vue): more coverage for vue preset * refactor(vue2): move default export to plugin install func * feat(example-vue2): add vue2 example to examples folder * chore(example-vue2): remove unused npm scripts * chore: add vue 2 example in main README * chore: update package.json descriptions
This commit is contained in:
committed by
GitHub
parent
64b4778cfb
commit
cbccbaf896
@@ -29,25 +29,42 @@ written in pure javascript, no dependencies
|
|||||||
| @bbob/core | [![@bbob/core-status]][@bbob/core-package] | ![@bbob/core-size] | Core package |
|
| @bbob/core | [![@bbob/core-status]][@bbob/core-package] | ![@bbob/core-size] | Core package |
|
||||||
| @bbob/react | [![@bbob/react-status]][@bbob/react-package] | ![@bbob/react-size] | React renderer |
|
| @bbob/react | [![@bbob/react-status]][@bbob/react-package] | ![@bbob/react-size] | React renderer |
|
||||||
| @bbob/preset-react | [![@bbob/preset-react-status]][@bbob/preset-react-package] | ![@bbob/preset-react-size] | React default tags preset |
|
| @bbob/preset-react | [![@bbob/preset-react-status]][@bbob/preset-react-package] | ![@bbob/preset-react-size] | React default tags preset |
|
||||||
|
| @bbob/vue2 | [![@bbob/vue2-status]][@bbob/vue2-package] | ![@bbob/vue2-size] | Vue 2 renderer |
|
||||||
|
| @bbob/preset-vue | [![@bbob/preset-vue-status]][@bbob/preset-vue-package] | ![@bbob/preset-react-size] | Vue default tags preset |
|
||||||
| @bbob/html | [![@bbob/html-status]][@bbob/html-package] | ![@bbob/html-size] | HTML renderer |
|
| @bbob/html | [![@bbob/html-status]][@bbob/html-package] | ![@bbob/html-size] | HTML renderer |
|
||||||
| @bbob/preset-html5 | [![@bbob/preset-html5-status]][@bbob/preset-html5-package] | ![@bbob/preset-html5-size] | HTML5 default tags preset |
|
| @bbob/preset-html5 | [![@bbob/preset-html5-status]][@bbob/preset-html5-package] | ![@bbob/preset-html5-size] | HTML5 default tags preset |
|
||||||
|
|
||||||
[@bbob/core-status]: https://img.shields.io/npm/v/@bbob/core.svg
|
[@bbob/core-status]: https://img.shields.io/npm/v/@bbob/core.svg
|
||||||
|
|
||||||
[@bbob/react-status]: https://img.shields.io/npm/v/@bbob/react.svg
|
[@bbob/react-status]: https://img.shields.io/npm/v/@bbob/react.svg
|
||||||
[@bbob/preset-react-status]: https://img.shields.io/npm/v/@bbob/preset-react.svg
|
[@bbob/preset-react-status]: https://img.shields.io/npm/v/@bbob/preset-react.svg
|
||||||
|
|
||||||
|
[@bbob/vue2-status]: https://img.shields.io/npm/v/@bbob/vue2.svg
|
||||||
|
[@bbob/preset-vue-status]: https://img.shields.io/npm/v/@bbob/preset-vue.svg
|
||||||
|
|
||||||
[@bbob/html-status]: https://img.shields.io/npm/v/@bbob/html.svg
|
[@bbob/html-status]: https://img.shields.io/npm/v/@bbob/html.svg
|
||||||
[@bbob/preset-html5-status]: https://img.shields.io/npm/v/@bbob/preset-html5.svg
|
[@bbob/preset-html5-status]: https://img.shields.io/npm/v/@bbob/preset-html5.svg
|
||||||
|
|
||||||
[@bbob/core-size]: https://badgen.net/bundlephobia/minzip/@bbob/core
|
[@bbob/core-size]: https://badgen.net/bundlephobia/minzip/@bbob/core
|
||||||
|
|
||||||
[@bbob/react-size]: https://badgen.net/bundlephobia/minzip/@bbob/react
|
[@bbob/react-size]: https://badgen.net/bundlephobia/minzip/@bbob/react
|
||||||
[@bbob/preset-react-size]: https://badgen.net/bundlephobia/minzip/@bbob/preset-react
|
[@bbob/preset-react-size]: https://badgen.net/bundlephobia/minzip/@bbob/preset-react
|
||||||
|
|
||||||
|
[@bbob/vue2-size]: https://badgen.net/bundlephobia/minzip/@bbob/vue2
|
||||||
|
[@bbob/preset-vue-size]: https://badgen.net/bundlephobia/minzip/@bbob/preset-vue
|
||||||
|
|
||||||
[@bbob/html-size]: https://badgen.net/bundlephobia/minzip/@bbob/html
|
[@bbob/html-size]: https://badgen.net/bundlephobia/minzip/@bbob/html
|
||||||
[@bbob/preset-html5-size]: https://badgen.net/bundlephobia/minzip/@bbob/preset-html5
|
[@bbob/preset-html5-size]: https://badgen.net/bundlephobia/minzip/@bbob/preset-html5
|
||||||
|
|
||||||
|
|
||||||
[@bbob/core-package]: https://npmjs.com/package/@bbob/core
|
[@bbob/core-package]: https://npmjs.com/package/@bbob/core
|
||||||
|
|
||||||
[@bbob/react-package]: https://npmjs.com/package/@bbob/react
|
[@bbob/react-package]: https://npmjs.com/package/@bbob/react
|
||||||
[@bbob/preset-react-package]: https://npmjs.com/package/@bbob/preset-react
|
[@bbob/preset-react-package]: https://npmjs.com/package/@bbob/preset-react
|
||||||
|
|
||||||
|
[@bbob/vue2-package]: https://npmjs.com/package/@bbob/vue2
|
||||||
|
[@bbob/preset-vue-package]: https://npmjs.com/package/@bbob/preset-vue
|
||||||
|
|
||||||
[@bbob/html-package]: https://npmjs.com/package/@bbob/html
|
[@bbob/html-package]: https://npmjs.com/package/@bbob/html
|
||||||
[@bbob/preset-html5-package]: https://npmjs.com/package/@bbob/preset-html5
|
[@bbob/preset-html5-package]: https://npmjs.com/package/@bbob/preset-html5
|
||||||
|
|
||||||
@@ -57,6 +74,7 @@ written in pure javascript, no dependencies
|
|||||||
* [Usage](#usage)
|
* [Usage](#usage)
|
||||||
* [Basic usage](#basic-usage)
|
* [Basic usage](#basic-usage)
|
||||||
* [React usage](#react-usage)
|
* [React usage](#react-usage)
|
||||||
|
* [Vue 2 usage](#vue2-usage)
|
||||||
* [Presets](#presets)
|
* [Presets](#presets)
|
||||||
* [Create your own preset](#create-preset)
|
* [Create your own preset](#create-preset)
|
||||||
* [HTML Preset](#html-preset)
|
* [HTML Preset](#html-preset)
|
||||||
@@ -95,9 +113,52 @@ import {render} from 'react-dom'
|
|||||||
import bbobReactRender from '@bbob/react/es/render'
|
import bbobReactRender from '@bbob/react/es/render'
|
||||||
import presetReact from '@bbob/preset-react'
|
import presetReact from '@bbob/preset-react'
|
||||||
|
|
||||||
console.log(render(<span>{bbobReactRender(`[i]Text[/i]`, presetReact(), { onlyAllowTags: ['i'], enableEscapeTags: true })}</span>)); // <span><span style="font-style: italic;">Text</span></span>
|
const options = { onlyAllowTags: ['i'], enableEscapeTags: true }
|
||||||
|
const content = bbobReactRender(`[i]Text[/i]`, presetReact(), options)
|
||||||
|
|
||||||
|
console.log(render(<span>{content}</span>)); // <span><span style="font-style: italic;">Text</span></span>
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Vue 2 usage <a name="vue2-usage"></a>
|
||||||
|
|
||||||
|
```shell
|
||||||
|
npm i @bbob/vue2 @bbob/preset-vue
|
||||||
|
```
|
||||||
|
|
||||||
|
```js
|
||||||
|
import Vue from 'vue'
|
||||||
|
import VueBbob from '@bbob/vue2';
|
||||||
|
|
||||||
|
Vue.use(VueBbob);
|
||||||
|
```
|
||||||
|
|
||||||
|
```html
|
||||||
|
<template>
|
||||||
|
<div class="html">
|
||||||
|
<h2>Generated HTML here</h2>
|
||||||
|
<bbob-bbcode container="div" :plugins="plugins">{{ bbcode }}</bbob-bbcode>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<script>
|
||||||
|
import Vue from 'vue'
|
||||||
|
import preset from '@bbob/preset-vue'
|
||||||
|
|
||||||
|
export default Vue.extend({
|
||||||
|
name: 'App',
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
bbcode: 'Text [b]bolded[/b] and [i]Some Name[/i]',
|
||||||
|
plugins: [
|
||||||
|
preset()
|
||||||
|
],
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
```
|
||||||
|
More examples available in <a href="https://github.com/JiLiZART/BBob/tree/master/examples">examples folder</a>
|
||||||
|
|
||||||
|
|
||||||
### Presets <a name="basic"></a>
|
### Presets <a name="basic"></a>
|
||||||
|
|
||||||
Its a way to transform parsed BBCode AST tree to another tree by rules in preset
|
Its a way to transform parsed BBCode AST tree to another tree by rules in preset
|
||||||
|
|||||||
@@ -0,0 +1,23 @@
|
|||||||
|
.DS_Store
|
||||||
|
node_modules
|
||||||
|
/dist
|
||||||
|
|
||||||
|
|
||||||
|
# local env files
|
||||||
|
.env.local
|
||||||
|
.env.*.local
|
||||||
|
|
||||||
|
# Log files
|
||||||
|
npm-debug.log*
|
||||||
|
yarn-debug.log*
|
||||||
|
yarn-error.log*
|
||||||
|
pnpm-debug.log*
|
||||||
|
|
||||||
|
# Editor directories and files
|
||||||
|
.idea
|
||||||
|
.vscode
|
||||||
|
*.suo
|
||||||
|
*.ntvs*
|
||||||
|
*.njsproj
|
||||||
|
*.sln
|
||||||
|
*.sw?
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
# vue2-example
|
||||||
|
|
||||||
|
## Project setup
|
||||||
|
```
|
||||||
|
npm install
|
||||||
|
```
|
||||||
|
|
||||||
|
### Compiles and hot-reloads for development
|
||||||
|
```
|
||||||
|
npm run serve
|
||||||
|
```
|
||||||
|
|
||||||
|
### Compiles and minifies for production
|
||||||
|
```
|
||||||
|
npm run build
|
||||||
|
```
|
||||||
|
|
||||||
|
### Lints and fixes files
|
||||||
|
```
|
||||||
|
npm run lint
|
||||||
|
```
|
||||||
|
|
||||||
|
### Customize configuration
|
||||||
|
See [Configuration Reference](https://cli.vuejs.org/config/).
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
module.exports = {
|
||||||
|
presets: [
|
||||||
|
'@vue/cli-plugin-babel/preset'
|
||||||
|
]
|
||||||
|
}
|
||||||
Generated
+12082
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,25 @@
|
|||||||
|
{
|
||||||
|
"name": "vue2-example",
|
||||||
|
"version": "0.1.0",
|
||||||
|
"private": true,
|
||||||
|
"scripts": {
|
||||||
|
"start": "vue-cli-service serve",
|
||||||
|
"generate": "vue-cli-service build"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"core-js": "^3.6.5",
|
||||||
|
"vue": "^2.6.11",
|
||||||
|
"@bbob/vue2": "^2.6.2",
|
||||||
|
"@bbob/preset-vue": "^2.6.2"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@vue/cli-plugin-babel": "~4.5.0",
|
||||||
|
"@vue/cli-service": "~4.5.0",
|
||||||
|
"vue-template-compiler": "^2.6.11"
|
||||||
|
},
|
||||||
|
"browserslist": [
|
||||||
|
"> 1%",
|
||||||
|
"last 2 versions",
|
||||||
|
"not dead"
|
||||||
|
]
|
||||||
|
}
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 4.2 KiB |
@@ -0,0 +1,17 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
|
<meta name="viewport" content="width=device-width,initial-scale=1.0">
|
||||||
|
<link rel="icon" href="<%= BASE_URL %>favicon.ico">
|
||||||
|
<title><%= htmlWebpackPlugin.options.title %></title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<noscript>
|
||||||
|
<strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
|
||||||
|
</noscript>
|
||||||
|
<div id="app"></div>
|
||||||
|
<!-- built files will be auto injected -->
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@@ -0,0 +1,68 @@
|
|||||||
|
<template>
|
||||||
|
<div id="app">
|
||||||
|
<img alt="Vue logo" src="./assets/logo.png">
|
||||||
|
<div class="data">
|
||||||
|
<div class="bbcode">
|
||||||
|
<h2>Raw BB Code here</h2>
|
||||||
|
<textarea name="bbcode" id="bbcode" cols="30" rows="10" v-model="bbcode"></textarea>
|
||||||
|
</div>
|
||||||
|
<div class="html">
|
||||||
|
<h2>Generated HTML here</h2>
|
||||||
|
<bbob-bbcode container="div" :plugins="plugins">{{ bbcode }}</bbob-bbcode>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<pre class="code"></pre>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import Vue from 'vue'
|
||||||
|
import preset from '@bbob/preset-vue'
|
||||||
|
import MyTag from './MyTagComponent'
|
||||||
|
|
||||||
|
const myPreset = preset.extend(defTags => ({
|
||||||
|
...defTags,
|
||||||
|
// bbcode tags always lowercased
|
||||||
|
mytag: (node) => ({
|
||||||
|
...node,
|
||||||
|
tag: MyTag,
|
||||||
|
})
|
||||||
|
}))
|
||||||
|
|
||||||
|
export default Vue.extend({
|
||||||
|
name: 'App',
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
bbcode: 'Text [b]bolded[/b] and [myTag]Some Name[/myTag]',
|
||||||
|
plugins: [
|
||||||
|
myPreset()
|
||||||
|
],
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
#app {
|
||||||
|
font-family: Avenir, Helvetica, Arial, sans-serif;
|
||||||
|
-webkit-font-smoothing: antialiased;
|
||||||
|
-moz-osx-font-smoothing: grayscale;
|
||||||
|
text-align: center;
|
||||||
|
color: #2c3e50;
|
||||||
|
|
||||||
|
width: 700px;
|
||||||
|
margin: 60px auto 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.data {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bbcode,
|
||||||
|
.html {
|
||||||
|
border: 1px solid #ccc;
|
||||||
|
width: 300px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
<template>
|
||||||
|
<span class="my-tag"><span class="avatar"/> <slot></slot></span>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
name: "MyTag"
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
.my-tag {
|
||||||
|
display: inline-flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
color: black;
|
||||||
|
background: #ccc;
|
||||||
|
border-radius: 6px;
|
||||||
|
padding: 2px 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.avatar {
|
||||||
|
margin-right: 8px;
|
||||||
|
display: inline-block;
|
||||||
|
width: 24px;
|
||||||
|
height: 24px;
|
||||||
|
border-radius: 50%;
|
||||||
|
background: teal;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 6.7 KiB |
@@ -0,0 +1,11 @@
|
|||||||
|
import Vue from 'vue';
|
||||||
|
import VueBbob from '@bbob/vue2';
|
||||||
|
import App from './App.vue';
|
||||||
|
|
||||||
|
Vue.config.productionTip = false;
|
||||||
|
|
||||||
|
Vue.use(VueBbob);
|
||||||
|
|
||||||
|
new Vue({
|
||||||
|
render: (h) => h(App),
|
||||||
|
}).$mount('#app');
|
||||||
+4
-1
@@ -10,7 +10,10 @@
|
|||||||
"packages/bbob-preset",
|
"packages/bbob-preset",
|
||||||
"packages/bbob-preset-html5",
|
"packages/bbob-preset-html5",
|
||||||
"packages/bbob-preset-react",
|
"packages/bbob-preset-react",
|
||||||
"packages/bbob-react"
|
"packages/bbob-react",
|
||||||
|
"packages/bbob-preset-vue",
|
||||||
|
"packages/bbob-vue2",
|
||||||
|
"examples/*"
|
||||||
],
|
],
|
||||||
"publishConfig": {
|
"publishConfig": {
|
||||||
"access": "public",
|
"access": "public",
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "@bbob/core",
|
"name": "@bbob/core",
|
||||||
"version": "2.6.2",
|
"version": "2.6.2",
|
||||||
"description": "⚡️Blazing fast BBCode transforming and parsing tool in pure javascript, no dependencies ",
|
"description": "⚡️Blazing-fast js-bbcode-parser, bbcode js, that transforms and parses to AST with plugin support in pure javascript, no dependencies",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"bbcode",
|
"bbcode",
|
||||||
"fast",
|
"fast",
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "@bbob/parser",
|
"name": "@bbob/parser",
|
||||||
"version": "2.6.2",
|
"version": "2.6.2",
|
||||||
"description": "Just parses BBcode to AST array. Part of @bbob bbcode parser",
|
"description": "Just parses BBcode to AST array. Part of @bbob bbcode-parser",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"bbcode",
|
"bbcode",
|
||||||
"parser",
|
"parser",
|
||||||
|
|||||||
@@ -0,0 +1,4 @@
|
|||||||
|
dist
|
||||||
|
es
|
||||||
|
lib
|
||||||
|
test
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
coverage
|
||||||
|
dist
|
||||||
|
lib
|
||||||
|
es
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
package-lock.json
|
||||||
|
coverage
|
||||||
|
src
|
||||||
|
!dist
|
||||||
|
!lib
|
||||||
|
!es
|
||||||
|
*.test.js
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
Preset to render BBCode to HTML tags
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
module.exports = require('../../babel.config');
|
||||||
@@ -0,0 +1,62 @@
|
|||||||
|
{
|
||||||
|
"name": "@bbob/preset-vue",
|
||||||
|
"version": "2.6.2",
|
||||||
|
"description": "Vue preset to transform BBCode to Vue for @bbob/vue*",
|
||||||
|
"keywords": [
|
||||||
|
"bbob",
|
||||||
|
"preset",
|
||||||
|
"vue"
|
||||||
|
],
|
||||||
|
"dependencies": {
|
||||||
|
"@bbob/preset-html5": "^2.6.2"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@bbob/core": "^2.6.2"
|
||||||
|
},
|
||||||
|
"main": "lib/index.js",
|
||||||
|
"module": "es/index.js",
|
||||||
|
"jsnext:main": "es/index.js",
|
||||||
|
"browser": "dist/index.js",
|
||||||
|
"browserName": "BbobPresetVue",
|
||||||
|
"homepage": "https://github.com/JiLiZART/bbob",
|
||||||
|
"author": "Nikolay Kostyurin <jilizart@gmail.com>",
|
||||||
|
"license": "MIT",
|
||||||
|
"bugs": {
|
||||||
|
"url": "https://github.com/JiLiZART/bbob/issues"
|
||||||
|
},
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "git://github.com/JiLiZART/bbob.git"
|
||||||
|
},
|
||||||
|
"scripts": {
|
||||||
|
"build:commonjs": "../../node_modules/.bin/cross-env BABEL_ENV=commonjs NODE_ENV=production ../../node_modules/.bin/babel src --out-dir lib",
|
||||||
|
"build:es": "../../node_modules/.bin/cross-env BABEL_ENV=es NODE_ENV=production ../../node_modules/.bin/babel src --out-dir es",
|
||||||
|
"build:umd": "../../node_modules/.bin/cross-env BABEL_ENV=rollup NODE_ENV=production ../../node_modules/.bin/rollup --config ../../rollup.config.js",
|
||||||
|
"build": "npm run build:commonjs && npm run build:es && npm run build:umd",
|
||||||
|
"test": "../../node_modules/.bin/jest --",
|
||||||
|
"cover": "../../node_modules/.bin/jest --coverage",
|
||||||
|
"lint": "../../node_modules/.bin/eslint .",
|
||||||
|
"size": "../../node_modules/.bin/cross-env NODE_ENV=production ../../node_modules/.bin/size-limit",
|
||||||
|
"bundlesize": "../../node_modules/.bin/cross-env NODE_ENV=production ../../node_modules/.bin/bundlesize"
|
||||||
|
},
|
||||||
|
"size-limit": [
|
||||||
|
{
|
||||||
|
"path": "lib/index.js"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"bundlesize": [
|
||||||
|
{
|
||||||
|
"path": "./dist/index.min.js",
|
||||||
|
"maxSize": "2 KB"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"publishConfig": {
|
||||||
|
"registry": "https://registry.npmjs.org/"
|
||||||
|
},
|
||||||
|
"files": [
|
||||||
|
"dist",
|
||||||
|
"lib",
|
||||||
|
"src",
|
||||||
|
"es"
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
import presetHTML5 from '@bbob/preset-html5';
|
||||||
|
|
||||||
|
export const tagAttr = (style) => ({
|
||||||
|
attrs: {
|
||||||
|
style,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
export const createTags = (tags) => ({
|
||||||
|
b: (...args) => ({
|
||||||
|
...tags.b(...args),
|
||||||
|
...tagAttr({ fontWeight: 'bold' }),
|
||||||
|
}),
|
||||||
|
|
||||||
|
i: (...args) => ({
|
||||||
|
...tags.i(...args),
|
||||||
|
...tagAttr({ fontStyle: 'italic' }),
|
||||||
|
}),
|
||||||
|
|
||||||
|
u: (...args) => ({
|
||||||
|
...tags.u(...args),
|
||||||
|
...tagAttr({ textDecoration: 'underline' }),
|
||||||
|
}),
|
||||||
|
|
||||||
|
s: (...args) => ({
|
||||||
|
...tags.s(...args),
|
||||||
|
...tagAttr({ textDecoration: 'line-through' }),
|
||||||
|
}),
|
||||||
|
});
|
||||||
|
|
||||||
|
export default presetHTML5.extend((tags) => ({
|
||||||
|
...tags,
|
||||||
|
...createTags(tags),
|
||||||
|
}));
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
import preset, { createTags, tagAttr } from '../src'
|
||||||
|
|
||||||
|
describe('@bbob/preset-vue', () => {
|
||||||
|
test('is a function', () => {
|
||||||
|
expect(preset).toBeInstanceOf(Function)
|
||||||
|
})
|
||||||
|
|
||||||
|
test('createTags', () => {
|
||||||
|
const defFn = jest.fn(() => ({}))
|
||||||
|
const defTags = {
|
||||||
|
b: defFn,
|
||||||
|
i: defFn,
|
||||||
|
u: defFn,
|
||||||
|
s: defFn,
|
||||||
|
}
|
||||||
|
const tags = createTags(defTags)
|
||||||
|
|
||||||
|
expect(tags.b()).toEqual(tagAttr({ fontWeight: 'bold' }))
|
||||||
|
expect(tags.i()).toEqual(tagAttr({ fontStyle: 'italic' }))
|
||||||
|
expect(tags.u()).toEqual(tagAttr({ textDecoration: 'underline' }))
|
||||||
|
expect(tags.s()).toEqual(tagAttr({ textDecoration: 'line-through' }))
|
||||||
|
})
|
||||||
|
});
|
||||||
Generated
+1
-7
@@ -1,11 +1,5 @@
|
|||||||
{
|
{
|
||||||
"name": "@bbob/preset",
|
"name": "@bbob/preset",
|
||||||
"version": "2.6.2",
|
"version": "2.6.2",
|
||||||
"lockfileVersion": 1,
|
"lockfileVersion": 1
|
||||||
"requires": true,
|
|
||||||
"dependencies": {
|
|
||||||
"@bbob/plugin-helper": {
|
|
||||||
"version": "2.5.4"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,9 +7,7 @@
|
|||||||
"base",
|
"base",
|
||||||
"bbob"
|
"bbob"
|
||||||
],
|
],
|
||||||
"dependencies": {
|
"dependencies": {},
|
||||||
"@bbob/plugin-helper": "^2.6.2"
|
|
||||||
},
|
|
||||||
"main": "lib/index.js",
|
"main": "lib/index.js",
|
||||||
"module": "es/index.js",
|
"module": "es/index.js",
|
||||||
"jsnext:main": "es/index.js",
|
"jsnext:main": "es/index.js",
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
/* eslint-disable indent */
|
/* eslint-disable indent */
|
||||||
import { isTagNode } from '@bbob/plugin-helper/lib/index';
|
|
||||||
|
const isTagNode = (el) => typeof el === 'object' && !!el.tag;
|
||||||
|
|
||||||
function process(tags, tree, core, options) {
|
function process(tags, tree, core, options) {
|
||||||
tree.walk((node) => (isTagNode(node) && tags[node.tag]
|
tree.walk((node) => (isTagNode(node) && tags[node.tag]
|
||||||
@@ -8,23 +9,28 @@ function process(tags, tree, core, options) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param defTags
|
* Creates preset for @bbob/core
|
||||||
* @return {function(*=, *=)}
|
* @param defTags {Object}
|
||||||
|
* @param processor {Function} a processor function of tree
|
||||||
|
* @returns {function(*=): function(*=, *=): void}
|
||||||
*/
|
*/
|
||||||
function createPreset(defTags) {
|
function createPreset(defTags, processor = process) {
|
||||||
const instance = (opts = {}) => {
|
const presetFactory = (opts = {}) => {
|
||||||
instance.options = Object.assign(instance.options || {}, opts);
|
presetFactory.options = Object.assign(presetFactory.options || {}, opts);
|
||||||
|
|
||||||
const creator = (tree, core) => process(defTags, tree, core, instance.options);
|
const presetExecutor = (tree, core) => processor(defTags, tree, core, presetFactory.options);
|
||||||
|
|
||||||
creator.options = instance.options;
|
presetExecutor.options = presetFactory.options;
|
||||||
|
|
||||||
return creator;
|
return presetExecutor;
|
||||||
};
|
};
|
||||||
|
|
||||||
instance.extend = (callback) => createPreset(callback(defTags, instance.options));
|
presetFactory.extend = (callback) => createPreset(
|
||||||
|
callback(defTags, presetFactory.options),
|
||||||
|
processor,
|
||||||
|
);
|
||||||
|
|
||||||
return instance;
|
return presetFactory;
|
||||||
}
|
}
|
||||||
|
|
||||||
export { createPreset };
|
export { createPreset };
|
||||||
|
|||||||
@@ -1,26 +1,47 @@
|
|||||||
import { createPreset } from '../src/index';
|
import { createPreset } from '../src/index';
|
||||||
|
|
||||||
describe('@bbob/preset', () => {
|
describe('@bbob/preset', () => {
|
||||||
|
const presetFactory = (defTags) => {
|
||||||
|
const processor = jest.fn((tags, tree, core, options) => tags)
|
||||||
|
|
||||||
|
return [createPreset(defTags, processor), processor];
|
||||||
|
}
|
||||||
|
|
||||||
test('create', () => {
|
test('create', () => {
|
||||||
const preset = createPreset({ test: true });
|
const defTags = { test: true }
|
||||||
|
const options = { foo: 'bar' }
|
||||||
|
const tree = []
|
||||||
|
const [preset, processor] = presetFactory(defTags);
|
||||||
|
|
||||||
expect(preset.extend)
|
expect(preset.extend)
|
||||||
.toBeDefined();
|
.toBeDefined();
|
||||||
expect(preset)
|
expect(preset)
|
||||||
.toBeInstanceOf(Function);
|
.toBeInstanceOf(Function);
|
||||||
|
|
||||||
|
expect(preset(options)(tree)).toEqual(defTags);
|
||||||
|
|
||||||
|
expect(processor.mock.calls.length).toBe(1);
|
||||||
});
|
});
|
||||||
test('extend', () => {
|
test('extend', () => {
|
||||||
const preset = createPreset({ foo: true });
|
const defTags = { foo: true }
|
||||||
const newPreset = preset.extend(props => ({ bar: true }));
|
const extendedTags = { bar: true }
|
||||||
|
const options = { foo: 'bar' }
|
||||||
|
const tree = []
|
||||||
|
const [preset, processor] = presetFactory(defTags);
|
||||||
|
const newPreset = preset.extend(tags => ({ ...tags, ...extendedTags }));
|
||||||
|
|
||||||
expect(preset)
|
expect(preset)
|
||||||
.toBeInstanceOf(Function);
|
.toBeInstanceOf(Function);
|
||||||
expect(newPreset)
|
expect(newPreset)
|
||||||
.toBeInstanceOf(Function);
|
.toBeInstanceOf(Function);
|
||||||
|
|
||||||
|
expect(newPreset(options)(tree)).toEqual({...defTags, ...extendedTags});
|
||||||
|
|
||||||
|
expect(processor.mock.calls.length).toBe(1);
|
||||||
});
|
});
|
||||||
test('pass options', () => {
|
test('pass options', () => {
|
||||||
const preset = createPreset({ test: true });
|
const [preset, processor] = presetFactory({ test: true });
|
||||||
const newPreset = preset.extend((props, options) => ({ bar: true }));
|
const newPreset = preset.extend((tags, options) => ({ bar: true }));
|
||||||
|
|
||||||
const instance = preset({ foo: 'bar' });
|
const instance = preset({ foo: 'bar' });
|
||||||
const instance2 = newPreset({ some: true });
|
const instance2 = newPreset({ some: true });
|
||||||
|
|||||||
@@ -0,0 +1,4 @@
|
|||||||
|
dist
|
||||||
|
es
|
||||||
|
lib
|
||||||
|
test
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
coverage
|
||||||
|
dist
|
||||||
|
lib
|
||||||
|
es
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
package-lock.json
|
||||||
|
coverage
|
||||||
|
src
|
||||||
|
!dist
|
||||||
|
!lib
|
||||||
|
!es
|
||||||
|
*.test.js
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
# @bbob/vue2
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
module.exports = require('../../babel.config');
|
||||||
Generated
+648
@@ -0,0 +1,648 @@
|
|||||||
|
{
|
||||||
|
"name": "@bbob/vue2",
|
||||||
|
"version": "2.6.2",
|
||||||
|
"lockfileVersion": 1,
|
||||||
|
"requires": true,
|
||||||
|
"dependencies": {
|
||||||
|
"@babel/code-frame": {
|
||||||
|
"version": "7.12.13",
|
||||||
|
"resolved": "https://nexus.wsmgroup.ru/repository/npm-wsm-stable-group/@babel/code-frame/-/code-frame-7.12.13.tgz",
|
||||||
|
"integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"@babel/highlight": "^7.12.13"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"@babel/helper-validator-identifier": {
|
||||||
|
"version": "7.12.11",
|
||||||
|
"resolved": "https://nexus.wsmgroup.ru/repository/npm-wsm-stable-group/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz",
|
||||||
|
"integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"@babel/highlight": {
|
||||||
|
"version": "7.13.10",
|
||||||
|
"resolved": "https://nexus.wsmgroup.ru/repository/npm-wsm-stable-group/@babel/highlight/-/highlight-7.13.10.tgz",
|
||||||
|
"integrity": "sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"@babel/helper-validator-identifier": "^7.12.11",
|
||||||
|
"chalk": "^2.0.0",
|
||||||
|
"js-tokens": "^4.0.0"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"chalk": {
|
||||||
|
"version": "2.4.2",
|
||||||
|
"resolved": "https://nexus.wsmgroup.ru/repository/npm-wsm-stable-group/chalk/-/chalk-2.4.2.tgz",
|
||||||
|
"integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"ansi-styles": "^3.2.1",
|
||||||
|
"escape-string-regexp": "^1.0.5",
|
||||||
|
"supports-color": "^5.3.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"@babel/runtime": {
|
||||||
|
"version": "7.13.10",
|
||||||
|
"resolved": "https://nexus.wsmgroup.ru/repository/npm-wsm-stable-group/@babel/runtime/-/runtime-7.13.10.tgz",
|
||||||
|
"integrity": "sha512-4QPkjJq6Ns3V/RgpEahRk+AGfL0eO6RHHtTWoNNr5mO49G6B5+X6d6THgWEAvTrznU5xYpbAlVKRYcsCgh/Akw==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"regenerator-runtime": "^0.13.4"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"@babel/runtime-corejs3": {
|
||||||
|
"version": "7.13.10",
|
||||||
|
"resolved": "https://nexus.wsmgroup.ru/repository/npm-wsm-stable-group/@babel/runtime-corejs3/-/runtime-corejs3-7.13.10.tgz",
|
||||||
|
"integrity": "sha512-x/XYVQ1h684pp1mJwOV4CyvqZXqbc8CMsMGUnAbuc82ZCdv1U63w5RSUzgDSXQHG5Rps/kiksH6g2D5BuaKyXg==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"core-js-pure": "^3.0.0",
|
||||||
|
"regenerator-runtime": "^0.13.4"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"@jest/types": {
|
||||||
|
"version": "26.6.2",
|
||||||
|
"resolved": "https://nexus.wsmgroup.ru/repository/npm-wsm-stable-group/@jest/types/-/types-26.6.2.tgz",
|
||||||
|
"integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"@types/istanbul-lib-coverage": "^2.0.0",
|
||||||
|
"@types/istanbul-reports": "^3.0.0",
|
||||||
|
"@types/node": "*",
|
||||||
|
"@types/yargs": "^15.0.0",
|
||||||
|
"chalk": "^4.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"@testing-library/dom": {
|
||||||
|
"version": "7.30.3",
|
||||||
|
"resolved": "https://nexus.wsmgroup.ru/repository/npm-wsm-stable-group/@testing-library/dom/-/dom-7.30.3.tgz",
|
||||||
|
"integrity": "sha512-7JhIg2MW6WPwyikH2iL3o7z+FTVgSOd2jqCwTAHqK7Qal2gRRYiUQyURAxtbK9VXm/UTyG9bRihv8C5Tznr2zw==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"@babel/code-frame": "^7.10.4",
|
||||||
|
"@babel/runtime": "^7.12.5",
|
||||||
|
"@types/aria-query": "^4.2.0",
|
||||||
|
"aria-query": "^4.2.2",
|
||||||
|
"chalk": "^4.1.0",
|
||||||
|
"dom-accessibility-api": "^0.5.4",
|
||||||
|
"lz-string": "^1.4.4",
|
||||||
|
"pretty-format": "^26.6.2"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"@testing-library/vue": {
|
||||||
|
"version": "5.6.2",
|
||||||
|
"resolved": "https://nexus.wsmgroup.ru/repository/npm-wsm-stable-group/@testing-library/vue/-/vue-5.6.2.tgz",
|
||||||
|
"integrity": "sha512-GcbKYmID7NMcpQllMRw+op/oUFA6dp4zzaYOz7fsv+lNKC1G4RQCjkBWo9vYRQyt40imbFSNYb7JgEZnPYvrXg==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"@babel/runtime": "^7.12.5",
|
||||||
|
"@testing-library/dom": "^7.26.6",
|
||||||
|
"@vue/test-utils": "^1.1.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"@types/aria-query": {
|
||||||
|
"version": "4.2.1",
|
||||||
|
"resolved": "https://nexus.wsmgroup.ru/repository/npm-wsm-stable-group/@types/aria-query/-/aria-query-4.2.1.tgz",
|
||||||
|
"integrity": "sha512-S6oPal772qJZHoRZLFc/XoZW2gFvwXusYUmXPXkgxJLuEk2vOt7jc4Yo6z/vtI0EBkbPBVrJJ0B+prLIKiWqHg==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"@types/istanbul-lib-coverage": {
|
||||||
|
"version": "2.0.3",
|
||||||
|
"resolved": "https://nexus.wsmgroup.ru/repository/npm-wsm-stable-group/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz",
|
||||||
|
"integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"@types/istanbul-lib-report": {
|
||||||
|
"version": "3.0.0",
|
||||||
|
"resolved": "https://nexus.wsmgroup.ru/repository/npm-wsm-stable-group/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz",
|
||||||
|
"integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"@types/istanbul-lib-coverage": "*"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"@types/istanbul-reports": {
|
||||||
|
"version": "3.0.0",
|
||||||
|
"resolved": "https://nexus.wsmgroup.ru/repository/npm-wsm-stable-group/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz",
|
||||||
|
"integrity": "sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"@types/istanbul-lib-report": "*"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"@types/node": {
|
||||||
|
"version": "14.14.41",
|
||||||
|
"resolved": "https://nexus.wsmgroup.ru/repository/npm-wsm-stable-group/@types/node/-/node-14.14.41.tgz",
|
||||||
|
"integrity": "sha512-dueRKfaJL4RTtSa7bWeTK1M+VH+Gns73oCgzvYfHZywRCoPSd8EkXBL0mZ9unPTveBn+D9phZBaxuzpwjWkW0g==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"@types/yargs": {
|
||||||
|
"version": "15.0.13",
|
||||||
|
"resolved": "https://nexus.wsmgroup.ru/repository/npm-wsm-stable-group/@types/yargs/-/yargs-15.0.13.tgz",
|
||||||
|
"integrity": "sha512-kQ5JNTrbDv3Rp5X2n/iUu37IJBDU2gsZ5R/g1/KHOOEc5IKfUFjXT6DENPGduh08I/pamwtEq4oul7gUqKTQDQ==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"@types/yargs-parser": "*"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"@types/yargs-parser": {
|
||||||
|
"version": "20.2.0",
|
||||||
|
"resolved": "https://nexus.wsmgroup.ru/repository/npm-wsm-stable-group/@types/yargs-parser/-/yargs-parser-20.2.0.tgz",
|
||||||
|
"integrity": "sha512-37RSHht+gzzgYeobbG+KWryeAW8J33Nhr69cjTqSYymXVZEN9NbRYWoYlRtDhHKPVT1FyNKwaTPC1NynKZpzRA==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"@vue/test-utils": {
|
||||||
|
"version": "1.1.4",
|
||||||
|
"resolved": "https://nexus.wsmgroup.ru/repository/npm-wsm-stable-group/@vue/test-utils/-/test-utils-1.1.4.tgz",
|
||||||
|
"integrity": "sha512-9BeL8IqGvJKy553lq/07rhYURQkpS/k+j19rJ/4eDpGJk7z872M0YrBWFhjS14yMKlvYVYOCfWnVIXyrAx0xNw==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"dom-event-types": "^1.0.0",
|
||||||
|
"lodash": "^4.17.15",
|
||||||
|
"pretty": "^2.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"abbrev": {
|
||||||
|
"version": "1.1.1",
|
||||||
|
"resolved": "https://nexus.wsmgroup.ru/repository/npm-wsm-stable-group/abbrev/-/abbrev-1.1.1.tgz",
|
||||||
|
"integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"ansi-regex": {
|
||||||
|
"version": "5.0.0",
|
||||||
|
"resolved": "https://nexus.wsmgroup.ru/repository/npm-wsm-stable-group/ansi-regex/-/ansi-regex-5.0.0.tgz",
|
||||||
|
"integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"ansi-styles": {
|
||||||
|
"version": "3.2.1",
|
||||||
|
"resolved": "https://nexus.wsmgroup.ru/repository/npm-wsm-stable-group/ansi-styles/-/ansi-styles-3.2.1.tgz",
|
||||||
|
"integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"color-convert": "^1.9.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"aria-query": {
|
||||||
|
"version": "4.2.2",
|
||||||
|
"resolved": "https://nexus.wsmgroup.ru/repository/npm-wsm-stable-group/aria-query/-/aria-query-4.2.2.tgz",
|
||||||
|
"integrity": "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"@babel/runtime": "^7.10.2",
|
||||||
|
"@babel/runtime-corejs3": "^7.10.2"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"balanced-match": {
|
||||||
|
"version": "1.0.2",
|
||||||
|
"resolved": "https://nexus.wsmgroup.ru/repository/npm-wsm-stable-group/balanced-match/-/balanced-match-1.0.2.tgz",
|
||||||
|
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"brace-expansion": {
|
||||||
|
"version": "1.1.11",
|
||||||
|
"resolved": "https://nexus.wsmgroup.ru/repository/npm-wsm-stable-group/brace-expansion/-/brace-expansion-1.1.11.tgz",
|
||||||
|
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"balanced-match": "^1.0.0",
|
||||||
|
"concat-map": "0.0.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"chalk": {
|
||||||
|
"version": "4.1.0",
|
||||||
|
"resolved": "https://nexus.wsmgroup.ru/repository/npm-wsm-stable-group/chalk/-/chalk-4.1.0.tgz",
|
||||||
|
"integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"ansi-styles": "^4.1.0",
|
||||||
|
"supports-color": "^7.1.0"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"ansi-styles": {
|
||||||
|
"version": "4.3.0",
|
||||||
|
"resolved": "https://nexus.wsmgroup.ru/repository/npm-wsm-stable-group/ansi-styles/-/ansi-styles-4.3.0.tgz",
|
||||||
|
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"color-convert": "^2.0.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"color-convert": {
|
||||||
|
"version": "2.0.1",
|
||||||
|
"resolved": "https://nexus.wsmgroup.ru/repository/npm-wsm-stable-group/color-convert/-/color-convert-2.0.1.tgz",
|
||||||
|
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"color-name": "~1.1.4"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"color-name": {
|
||||||
|
"version": "1.1.4",
|
||||||
|
"resolved": "https://nexus.wsmgroup.ru/repository/npm-wsm-stable-group/color-name/-/color-name-1.1.4.tgz",
|
||||||
|
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"has-flag": {
|
||||||
|
"version": "4.0.0",
|
||||||
|
"resolved": "https://nexus.wsmgroup.ru/repository/npm-wsm-stable-group/has-flag/-/has-flag-4.0.0.tgz",
|
||||||
|
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"supports-color": {
|
||||||
|
"version": "7.2.0",
|
||||||
|
"resolved": "https://nexus.wsmgroup.ru/repository/npm-wsm-stable-group/supports-color/-/supports-color-7.2.0.tgz",
|
||||||
|
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"has-flag": "^4.0.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"color-convert": {
|
||||||
|
"version": "1.9.3",
|
||||||
|
"resolved": "https://nexus.wsmgroup.ru/repository/npm-wsm-stable-group/color-convert/-/color-convert-1.9.3.tgz",
|
||||||
|
"integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"color-name": "1.1.3"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"color-name": {
|
||||||
|
"version": "1.1.3",
|
||||||
|
"resolved": "https://nexus.wsmgroup.ru/repository/npm-wsm-stable-group/color-name/-/color-name-1.1.3.tgz",
|
||||||
|
"integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"commander": {
|
||||||
|
"version": "2.20.3",
|
||||||
|
"resolved": "https://nexus.wsmgroup.ru/repository/npm-wsm-stable-group/commander/-/commander-2.20.3.tgz",
|
||||||
|
"integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"concat-map": {
|
||||||
|
"version": "0.0.1",
|
||||||
|
"resolved": "https://nexus.wsmgroup.ru/repository/npm-wsm-stable-group/concat-map/-/concat-map-0.0.1.tgz",
|
||||||
|
"integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"condense-newlines": {
|
||||||
|
"version": "0.2.1",
|
||||||
|
"resolved": "https://nexus.wsmgroup.ru/repository/npm-wsm-stable-group/condense-newlines/-/condense-newlines-0.2.1.tgz",
|
||||||
|
"integrity": "sha1-PemFVTE5R10yUCyDsC9gaE0kxV8=",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"extend-shallow": "^2.0.1",
|
||||||
|
"is-whitespace": "^0.3.0",
|
||||||
|
"kind-of": "^3.0.2"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"config-chain": {
|
||||||
|
"version": "1.1.12",
|
||||||
|
"resolved": "https://nexus.wsmgroup.ru/repository/npm-wsm-stable-group/config-chain/-/config-chain-1.1.12.tgz",
|
||||||
|
"integrity": "sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"ini": "^1.3.4",
|
||||||
|
"proto-list": "~1.2.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"core-js-pure": {
|
||||||
|
"version": "3.10.1",
|
||||||
|
"resolved": "https://nexus.wsmgroup.ru/repository/npm-wsm-stable-group/core-js-pure/-/core-js-pure-3.10.1.tgz",
|
||||||
|
"integrity": "sha512-PeyJH2SE0KuxY5eCGNWA+W+CeDpB6M1PN3S7Am7jSv/Ttuxz2SnWbIiVQOn/TDaGaGtxo8CRWHkXwJscbUHtVw==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"de-indent": {
|
||||||
|
"version": "1.0.2",
|
||||||
|
"resolved": "https://nexus.wsmgroup.ru/repository/npm-wsm-stable-group/de-indent/-/de-indent-1.0.2.tgz",
|
||||||
|
"integrity": "sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"dom-accessibility-api": {
|
||||||
|
"version": "0.5.4",
|
||||||
|
"resolved": "https://nexus.wsmgroup.ru/repository/npm-wsm-stable-group/dom-accessibility-api/-/dom-accessibility-api-0.5.4.tgz",
|
||||||
|
"integrity": "sha512-TvrjBckDy2c6v6RLxPv5QXOnU+SmF9nBII5621Ve5fu6Z/BDrENurBEvlC1f44lKEUVqOpK4w9E5Idc5/EgkLQ==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"dom-event-types": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"resolved": "https://nexus.wsmgroup.ru/repository/npm-wsm-stable-group/dom-event-types/-/dom-event-types-1.0.0.tgz",
|
||||||
|
"integrity": "sha512-2G2Vwi2zXTHBGqXHsJ4+ak/iP0N8Ar+G8a7LiD2oup5o4sQWytwqqrZu/O6hIMV0KMID2PL69OhpshLO0n7UJQ==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"editorconfig": {
|
||||||
|
"version": "0.15.3",
|
||||||
|
"resolved": "https://nexus.wsmgroup.ru/repository/npm-wsm-stable-group/editorconfig/-/editorconfig-0.15.3.tgz",
|
||||||
|
"integrity": "sha512-M9wIMFx96vq0R4F+gRpY3o2exzb8hEj/n9S8unZtHSvYjibBp/iMufSzvmOcV/laG0ZtuTVGtiJggPOSW2r93g==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"commander": "^2.19.0",
|
||||||
|
"lru-cache": "^4.1.5",
|
||||||
|
"semver": "^5.6.0",
|
||||||
|
"sigmund": "^1.0.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"escape-string-regexp": {
|
||||||
|
"version": "1.0.5",
|
||||||
|
"resolved": "https://nexus.wsmgroup.ru/repository/npm-wsm-stable-group/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
|
||||||
|
"integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"extend-shallow": {
|
||||||
|
"version": "2.0.1",
|
||||||
|
"resolved": "https://nexus.wsmgroup.ru/repository/npm-wsm-stable-group/extend-shallow/-/extend-shallow-2.0.1.tgz",
|
||||||
|
"integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"is-extendable": "^0.1.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"fs.realpath": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"resolved": "https://nexus.wsmgroup.ru/repository/npm-wsm-stable-group/fs.realpath/-/fs.realpath-1.0.0.tgz",
|
||||||
|
"integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"glob": {
|
||||||
|
"version": "7.1.6",
|
||||||
|
"resolved": "https://nexus.wsmgroup.ru/repository/npm-wsm-stable-group/glob/-/glob-7.1.6.tgz",
|
||||||
|
"integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"fs.realpath": "^1.0.0",
|
||||||
|
"inflight": "^1.0.4",
|
||||||
|
"inherits": "2",
|
||||||
|
"minimatch": "^3.0.4",
|
||||||
|
"once": "^1.3.0",
|
||||||
|
"path-is-absolute": "^1.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"has-flag": {
|
||||||
|
"version": "3.0.0",
|
||||||
|
"resolved": "https://nexus.wsmgroup.ru/repository/npm-wsm-stable-group/has-flag/-/has-flag-3.0.0.tgz",
|
||||||
|
"integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"he": {
|
||||||
|
"version": "1.2.0",
|
||||||
|
"resolved": "https://nexus.wsmgroup.ru/repository/npm-wsm-stable-group/he/-/he-1.2.0.tgz",
|
||||||
|
"integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"inflight": {
|
||||||
|
"version": "1.0.6",
|
||||||
|
"resolved": "https://nexus.wsmgroup.ru/repository/npm-wsm-stable-group/inflight/-/inflight-1.0.6.tgz",
|
||||||
|
"integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"once": "^1.3.0",
|
||||||
|
"wrappy": "1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"inherits": {
|
||||||
|
"version": "2.0.4",
|
||||||
|
"resolved": "https://nexus.wsmgroup.ru/repository/npm-wsm-stable-group/inherits/-/inherits-2.0.4.tgz",
|
||||||
|
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"ini": {
|
||||||
|
"version": "1.3.8",
|
||||||
|
"resolved": "https://nexus.wsmgroup.ru/repository/npm-wsm-stable-group/ini/-/ini-1.3.8.tgz",
|
||||||
|
"integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"is-buffer": {
|
||||||
|
"version": "1.1.6",
|
||||||
|
"resolved": "https://nexus.wsmgroup.ru/repository/npm-wsm-stable-group/is-buffer/-/is-buffer-1.1.6.tgz",
|
||||||
|
"integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"is-extendable": {
|
||||||
|
"version": "0.1.1",
|
||||||
|
"resolved": "https://nexus.wsmgroup.ru/repository/npm-wsm-stable-group/is-extendable/-/is-extendable-0.1.1.tgz",
|
||||||
|
"integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"is-whitespace": {
|
||||||
|
"version": "0.3.0",
|
||||||
|
"resolved": "https://nexus.wsmgroup.ru/repository/npm-wsm-stable-group/is-whitespace/-/is-whitespace-0.3.0.tgz",
|
||||||
|
"integrity": "sha1-Fjnssb4DauxppUy7QBz77XEUq38=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"js-beautify": {
|
||||||
|
"version": "1.13.13",
|
||||||
|
"resolved": "https://nexus.wsmgroup.ru/repository/npm-wsm-stable-group/js-beautify/-/js-beautify-1.13.13.tgz",
|
||||||
|
"integrity": "sha512-oH+nc0U5mOAqX8M5JO1J0Pw/7Q35sAdOsM5W3i87pir9Ntx6P/5Gx1xLNoK+MGyvHk4rqqRCE4Oq58H6xl2W7A==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"config-chain": "^1.1.12",
|
||||||
|
"editorconfig": "^0.15.3",
|
||||||
|
"glob": "^7.1.3",
|
||||||
|
"mkdirp": "^1.0.4",
|
||||||
|
"nopt": "^5.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"js-tokens": {
|
||||||
|
"version": "4.0.0",
|
||||||
|
"resolved": "https://nexus.wsmgroup.ru/repository/npm-wsm-stable-group/js-tokens/-/js-tokens-4.0.0.tgz",
|
||||||
|
"integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"kind-of": {
|
||||||
|
"version": "3.2.2",
|
||||||
|
"resolved": "https://nexus.wsmgroup.ru/repository/npm-wsm-stable-group/kind-of/-/kind-of-3.2.2.tgz",
|
||||||
|
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"is-buffer": "^1.1.5"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"lodash": {
|
||||||
|
"version": "4.17.21",
|
||||||
|
"resolved": "https://nexus.wsmgroup.ru/repository/npm-wsm-stable-group/lodash/-/lodash-4.17.21.tgz",
|
||||||
|
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"lru-cache": {
|
||||||
|
"version": "4.1.5",
|
||||||
|
"resolved": "https://nexus.wsmgroup.ru/repository/npm-wsm-stable-group/lru-cache/-/lru-cache-4.1.5.tgz",
|
||||||
|
"integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"pseudomap": "^1.0.2",
|
||||||
|
"yallist": "^2.1.2"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"lz-string": {
|
||||||
|
"version": "1.4.4",
|
||||||
|
"resolved": "https://nexus.wsmgroup.ru/repository/npm-wsm-stable-group/lz-string/-/lz-string-1.4.4.tgz",
|
||||||
|
"integrity": "sha1-wNjq82BZ9wV5bh40SBHPTEmNOiY=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"minimatch": {
|
||||||
|
"version": "3.0.4",
|
||||||
|
"resolved": "https://nexus.wsmgroup.ru/repository/npm-wsm-stable-group/minimatch/-/minimatch-3.0.4.tgz",
|
||||||
|
"integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"brace-expansion": "^1.1.7"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"mkdirp": {
|
||||||
|
"version": "1.0.4",
|
||||||
|
"resolved": "https://nexus.wsmgroup.ru/repository/npm-wsm-stable-group/mkdirp/-/mkdirp-1.0.4.tgz",
|
||||||
|
"integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"nopt": {
|
||||||
|
"version": "5.0.0",
|
||||||
|
"resolved": "https://nexus.wsmgroup.ru/repository/npm-wsm-stable-group/nopt/-/nopt-5.0.0.tgz",
|
||||||
|
"integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"abbrev": "1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"once": {
|
||||||
|
"version": "1.4.0",
|
||||||
|
"resolved": "https://nexus.wsmgroup.ru/repository/npm-wsm-stable-group/once/-/once-1.4.0.tgz",
|
||||||
|
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"wrappy": "1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"path-is-absolute": {
|
||||||
|
"version": "1.0.1",
|
||||||
|
"resolved": "https://nexus.wsmgroup.ru/repository/npm-wsm-stable-group/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
|
||||||
|
"integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"pretty": {
|
||||||
|
"version": "2.0.0",
|
||||||
|
"resolved": "https://nexus.wsmgroup.ru/repository/npm-wsm-stable-group/pretty/-/pretty-2.0.0.tgz",
|
||||||
|
"integrity": "sha1-rbx5YLe7/iiaVX3F9zdhmiINBqU=",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"condense-newlines": "^0.2.1",
|
||||||
|
"extend-shallow": "^2.0.1",
|
||||||
|
"js-beautify": "^1.6.12"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"pretty-format": {
|
||||||
|
"version": "26.6.2",
|
||||||
|
"resolved": "https://nexus.wsmgroup.ru/repository/npm-wsm-stable-group/pretty-format/-/pretty-format-26.6.2.tgz",
|
||||||
|
"integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"@jest/types": "^26.6.2",
|
||||||
|
"ansi-regex": "^5.0.0",
|
||||||
|
"ansi-styles": "^4.0.0",
|
||||||
|
"react-is": "^17.0.1"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"ansi-styles": {
|
||||||
|
"version": "4.3.0",
|
||||||
|
"resolved": "https://nexus.wsmgroup.ru/repository/npm-wsm-stable-group/ansi-styles/-/ansi-styles-4.3.0.tgz",
|
||||||
|
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"color-convert": "^2.0.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"color-convert": {
|
||||||
|
"version": "2.0.1",
|
||||||
|
"resolved": "https://nexus.wsmgroup.ru/repository/npm-wsm-stable-group/color-convert/-/color-convert-2.0.1.tgz",
|
||||||
|
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"color-name": "~1.1.4"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"color-name": {
|
||||||
|
"version": "1.1.4",
|
||||||
|
"resolved": "https://nexus.wsmgroup.ru/repository/npm-wsm-stable-group/color-name/-/color-name-1.1.4.tgz",
|
||||||
|
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
|
||||||
|
"dev": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"proto-list": {
|
||||||
|
"version": "1.2.4",
|
||||||
|
"resolved": "https://nexus.wsmgroup.ru/repository/npm-wsm-stable-group/proto-list/-/proto-list-1.2.4.tgz",
|
||||||
|
"integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"pseudomap": {
|
||||||
|
"version": "1.0.2",
|
||||||
|
"resolved": "https://nexus.wsmgroup.ru/repository/npm-wsm-stable-group/pseudomap/-/pseudomap-1.0.2.tgz",
|
||||||
|
"integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"react-is": {
|
||||||
|
"version": "17.0.2",
|
||||||
|
"resolved": "https://nexus.wsmgroup.ru/repository/npm-wsm-stable-group/react-is/-/react-is-17.0.2.tgz",
|
||||||
|
"integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"regenerator-runtime": {
|
||||||
|
"version": "0.13.7",
|
||||||
|
"resolved": "https://nexus.wsmgroup.ru/repository/npm-wsm-stable-group/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz",
|
||||||
|
"integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"semver": {
|
||||||
|
"version": "5.7.1",
|
||||||
|
"resolved": "https://nexus.wsmgroup.ru/repository/npm-wsm-stable-group/semver/-/semver-5.7.1.tgz",
|
||||||
|
"integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"sigmund": {
|
||||||
|
"version": "1.0.1",
|
||||||
|
"resolved": "https://nexus.wsmgroup.ru/repository/npm-wsm-stable-group/sigmund/-/sigmund-1.0.1.tgz",
|
||||||
|
"integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"supports-color": {
|
||||||
|
"version": "5.5.0",
|
||||||
|
"resolved": "https://nexus.wsmgroup.ru/repository/npm-wsm-stable-group/supports-color/-/supports-color-5.5.0.tgz",
|
||||||
|
"integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"has-flag": "^3.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"vue": {
|
||||||
|
"version": "2.6.12",
|
||||||
|
"resolved": "https://nexus.wsmgroup.ru/repository/npm-wsm-stable-group/vue/-/vue-2.6.12.tgz",
|
||||||
|
"integrity": "sha512-uhmLFETqPPNyuLLbsKz6ioJ4q7AZHzD8ZVFNATNyICSZouqP2Sz0rotWQC8UNBF6VGSCs5abnKJoStA6JbCbfg==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"vue-template-compiler": {
|
||||||
|
"version": "2.6.12",
|
||||||
|
"resolved": "https://nexus.wsmgroup.ru/repository/npm-wsm-stable-group/vue-template-compiler/-/vue-template-compiler-2.6.12.tgz",
|
||||||
|
"integrity": "sha512-OzzZ52zS41YUbkCBfdXShQTe69j1gQDZ9HIX8miuC9C3rBCk9wIRjLiZZLrmX9V+Ftq/YEyv1JaVr5Y/hNtByg==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"de-indent": "^1.0.2",
|
||||||
|
"he": "^1.1.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"wrappy": {
|
||||||
|
"version": "1.0.2",
|
||||||
|
"resolved": "https://nexus.wsmgroup.ru/repository/npm-wsm-stable-group/wrappy/-/wrappy-1.0.2.tgz",
|
||||||
|
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"yallist": {
|
||||||
|
"version": "2.1.2",
|
||||||
|
"resolved": "https://nexus.wsmgroup.ru/repository/npm-wsm-stable-group/yallist/-/yallist-2.1.2.tgz",
|
||||||
|
"integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
|
||||||
|
"dev": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,71 @@
|
|||||||
|
{
|
||||||
|
"name": "@bbob/vue2",
|
||||||
|
"version": "2.6.2",
|
||||||
|
"description": "Render BBCode to Vue using @bbob/parser",
|
||||||
|
"keywords": [
|
||||||
|
"vue",
|
||||||
|
"bbcode",
|
||||||
|
"parser",
|
||||||
|
"bbob"
|
||||||
|
],
|
||||||
|
"dependencies": {
|
||||||
|
"@bbob/core": "^2.6.2",
|
||||||
|
"@bbob/html": "^2.6.2",
|
||||||
|
"@bbob/plugin-helper": "^2.6.2"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"vue": "2.x"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@bbob/preset-vue": "^2.6.2",
|
||||||
|
"@testing-library/vue": "^5.6.2",
|
||||||
|
"vue": "2.6.12",
|
||||||
|
"vue-template-compiler": "^2.6.12"
|
||||||
|
},
|
||||||
|
"main": "lib/index.js",
|
||||||
|
"module": "es/index.js",
|
||||||
|
"jsnext:main": "es/index.js",
|
||||||
|
"browser": "dist/index.js",
|
||||||
|
"browserName": "BbobVue",
|
||||||
|
"homepage": "https://github.com/JiLiZART/bbob",
|
||||||
|
"author": "Nikolay Kostyurin <jilizart@gmail.com>",
|
||||||
|
"license": "MIT",
|
||||||
|
"bugs": {
|
||||||
|
"url": "https://github.com/JiLiZART/bbob/issues"
|
||||||
|
},
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "git://github.com/JiLiZART/bbob.git"
|
||||||
|
},
|
||||||
|
"scripts": {
|
||||||
|
"build:commonjs": "../../node_modules/.bin/cross-env BABEL_ENV=commonjs NODE_ENV=production ../../node_modules/.bin/babel src --out-dir lib",
|
||||||
|
"build:es": "../../node_modules/.bin/cross-env BABEL_ENV=es NODE_ENV=production ../../node_modules/.bin/babel src --out-dir es",
|
||||||
|
"build:umd": "../../node_modules/.bin/cross-env BABEL_ENV=rollup ../../node_modules/.bin/rollup --config ../../rollup.config.js",
|
||||||
|
"build": "npm run build:commonjs && npm run build:es && npm run build:umd",
|
||||||
|
"test": "../../node_modules/.bin/jest --",
|
||||||
|
"cover": "../../node_modules/.bin/jest --coverage",
|
||||||
|
"lint": "../../node_modules/.bin/eslint .",
|
||||||
|
"size": "../../node_modules/.bin/cross-env NODE_ENV=production ../../node_modules/.bin/size-limit",
|
||||||
|
"bundlesize": "../../node_modules/.bin/cross-env NODE_ENV=production ../../node_modules/.bin/bundlesize"
|
||||||
|
},
|
||||||
|
"size-limit": [
|
||||||
|
{
|
||||||
|
"path": "lib/index.js"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"bundlesize": [
|
||||||
|
{
|
||||||
|
"path": "./dist/index.min.js",
|
||||||
|
"maxSize": "8 KB"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"publishConfig": {
|
||||||
|
"registry": "https://registry.npmjs.org/"
|
||||||
|
},
|
||||||
|
"files": [
|
||||||
|
"dist",
|
||||||
|
"lib",
|
||||||
|
"src",
|
||||||
|
"es"
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
import Vue from 'vue';
|
||||||
|
|
||||||
|
import { render } from './render';
|
||||||
|
|
||||||
|
const Component = Vue.extend({
|
||||||
|
props: {
|
||||||
|
container: {
|
||||||
|
type: String,
|
||||||
|
default: 'span',
|
||||||
|
},
|
||||||
|
plugins: {
|
||||||
|
type: Array,
|
||||||
|
},
|
||||||
|
options: {
|
||||||
|
type: Object,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
render(createElement) {
|
||||||
|
if (this.$slots.default) {
|
||||||
|
const source = this.$slots.default.reduce((acc, vnode) => acc + vnode.text, '');
|
||||||
|
|
||||||
|
return createElement(
|
||||||
|
this.container,
|
||||||
|
render(createElement, source, this.plugins, this.options),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
export default Component;
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
import Component from './Component';
|
||||||
|
|
||||||
|
export { render } from './render';
|
||||||
|
export { Component };
|
||||||
|
|
||||||
|
function install(Vue) {
|
||||||
|
Vue.component('bbob-bbcode', Component);
|
||||||
|
}
|
||||||
|
|
||||||
|
export default install;
|
||||||
@@ -0,0 +1,52 @@
|
|||||||
|
/* eslint-disable no-use-before-define,import/prefer-default-export */
|
||||||
|
import core from '@bbob/core';
|
||||||
|
import * as html from '@bbob/html';
|
||||||
|
|
||||||
|
import { isStringNode, isTagNode } from '@bbob/plugin-helper';
|
||||||
|
|
||||||
|
const toAST = (source, plugins = [], options = {}) => core(plugins)
|
||||||
|
.process(source, {
|
||||||
|
...options,
|
||||||
|
render: (input) => html.render(input, { stripTags: true }),
|
||||||
|
}).tree;
|
||||||
|
|
||||||
|
const isContentEmpty = (content) => (!content || content.length === 0);
|
||||||
|
|
||||||
|
function tagToVueNode(createElement, node, index) {
|
||||||
|
const { class: className, style, ...domProps } = node.attrs || {};
|
||||||
|
|
||||||
|
return createElement(
|
||||||
|
node.tag,
|
||||||
|
{
|
||||||
|
key: index,
|
||||||
|
class: className,
|
||||||
|
style,
|
||||||
|
domProps,
|
||||||
|
},
|
||||||
|
isContentEmpty(node.content) ? null : renderToVueNodes(createElement, node.content),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
function renderToVueNodes(createElement, nodes) {
|
||||||
|
return [].concat(nodes).reduce((arr, node, index) => {
|
||||||
|
if (isTagNode(node)) {
|
||||||
|
arr.push(tagToVueNode(createElement, node, index));
|
||||||
|
} else if (isStringNode(node)) {
|
||||||
|
arr.push(node);
|
||||||
|
}
|
||||||
|
|
||||||
|
return arr;
|
||||||
|
}, []);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Converts string to Vue 2 VNodes
|
||||||
|
* @param createElement {CreateElement}
|
||||||
|
* @param source {String}
|
||||||
|
* @param plugins {Array<Function>}
|
||||||
|
* @param options {Object}
|
||||||
|
* @returns {Array<VNode>}
|
||||||
|
*/
|
||||||
|
export function render(createElement, source, plugins, options) {
|
||||||
|
return renderToVueNodes(createElement, toAST(source, plugins, options));
|
||||||
|
}
|
||||||
@@ -0,0 +1,74 @@
|
|||||||
|
import preset from '@bbob/preset-vue';
|
||||||
|
import { render, fireEvent } from '@testing-library/vue'
|
||||||
|
import Component from '../src/Component'
|
||||||
|
|
||||||
|
const renderBBCode = (input, options) => {
|
||||||
|
const { html } = render(Component, {
|
||||||
|
props: {
|
||||||
|
plugins: [preset()],
|
||||||
|
options,
|
||||||
|
},
|
||||||
|
slots: {
|
||||||
|
default: input
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
return html()
|
||||||
|
}
|
||||||
|
|
||||||
|
describe('@bbob/vue2', () => {
|
||||||
|
test('[b]bolded text[/b]', () => {
|
||||||
|
const html = renderBBCode('[b]bolded text[/b]');
|
||||||
|
|
||||||
|
expect(html).toBe('<span><span style="font-weight: bold;">bolded text</span></span>')
|
||||||
|
});
|
||||||
|
|
||||||
|
test('[i]italicized text[/i]', () => {
|
||||||
|
const html = renderBBCode('[i]italicized text[/i]');
|
||||||
|
|
||||||
|
expect(html).toBe('<span><span style="font-style: italic;">italicized text</span></span>')
|
||||||
|
});
|
||||||
|
|
||||||
|
test('[u]underlined text[/u]', () => {
|
||||||
|
const html = renderBBCode('[u]underlined text[/u]');
|
||||||
|
|
||||||
|
expect(html).toBe('<span><span style="text-decoration: underline;">underlined text</span></span>')
|
||||||
|
});
|
||||||
|
|
||||||
|
test('[s]strikethrough text[/s]', () => {
|
||||||
|
const html = renderBBCode('[s]strikethrough text[/s]');
|
||||||
|
|
||||||
|
expect(html).toBe('<span><span style="text-decoration: line-through;">strikethrough text</span></span>')
|
||||||
|
});
|
||||||
|
|
||||||
|
test('[url]https://en.wikipedia.org[/url]', () => {
|
||||||
|
const html = renderBBCode('[url]https://en.wikipedia.org[/url]');
|
||||||
|
|
||||||
|
expect(html).toBe('<span><a href="https://en.wikipedia.org">https://en.wikipedia.org</a></span>')
|
||||||
|
});
|
||||||
|
|
||||||
|
test('[b]Testing[/b][hr]', () => {
|
||||||
|
const html = renderBBCode('[b]Testing[/b][hr]');
|
||||||
|
|
||||||
|
expect(html).toBe(`<span><span style="font-weight: bold;">Testing</span>
|
||||||
|
<hr></span>`)
|
||||||
|
});
|
||||||
|
|
||||||
|
test('render empty <slot></slot>', () => {
|
||||||
|
const { html } = render(Component, {
|
||||||
|
props: {
|
||||||
|
plugins: [preset()],
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
expect(html()).toBe('')
|
||||||
|
})
|
||||||
|
|
||||||
|
describe('options.onlyAllowTags', () => {
|
||||||
|
test('render "[Super Feature] and [i]super[/i]" when only [i] allowed', () => {
|
||||||
|
const html = renderBBCode('[Super Feature] and [i]super[/i]', { onlyAllowTags: ['i'] });
|
||||||
|
|
||||||
|
expect(html).toBe('<span>[Super Feature] and <span style="font-style: italic;">super</span></span>')
|
||||||
|
});
|
||||||
|
});
|
||||||
|
})
|
||||||
Reference in New Issue
Block a user