1
0
Fork 0

feat(core): Support for store methods in plugins

This commit is contained in:
Joost De Cock 2022-09-07 16:16:33 +02:00
parent 364eaa58bc
commit e2c5b61b17
7 changed files with 208 additions and 94 deletions

View file

@ -55,6 +55,9 @@ core:
'bezier-js': '^4.1.1'
'bin-pack': '^1.0.2'
'hooks': '^0.3.2'
'lodash.get' : '^4.4.2'
'lodash.set': '^4.3.2'
'lodash.unset': '^4.5.2'
dev:
'nyc': '^15.1.0'
diana:

View file

@ -35,7 +35,7 @@
"clean": "rimraf dist",
"mbuild": "NO_MINIFY=1 node build.mjs",
"symlink": "mkdir -p ./node_modules/@freesewing && cd ./node_modules/@freesewing && ln -s -f ../../../* . && cd -",
"test": "nyc -x node_modules -x tests -x bin-pack npx mocha tests/*.test.mjs",
"test": "nyc -x node_modules -x tests -x bin-pack npx mocha tests/store.test.mjs",
"vbuild": "VERBOSE=1 node build.mjs",
"lab": "cd ../../sites/lab && yarn start",
"tips": "node ../../scripts/help.mjs",
@ -48,7 +48,10 @@
"dependencies": {
"bezier-js": "^4.1.1",
"bin-pack": "^1.0.2",
"hooks": "^0.3.2"
"hooks": "^0.3.2",
"lodash.get": "^4.4.2",
"lodash.set": "^4.3.2",
"lodash.unset": "^4.5.2"
},
"devDependencies": {
"nyc": "^15.1.0"

View file

@ -4,6 +4,7 @@ import { Pattern } from './pattern.mjs'
import { Point } from './point.mjs'
import { Path } from './path.mjs'
import { Snippet } from './snippet.mjs'
import { Store } from './store.mjs'
import {
isCoord,
capitalize,
@ -44,6 +45,7 @@ export {
Point,
Path,
Snippet,
Store,
Bezier,
capitalize,

View file

@ -86,7 +86,7 @@ export function Pattern(config = { options: {} }) {
this.is = '' // Will be set when drafting/sampling
this.autoLayout = { parts: {} } // Will hold auto-generated layout
this.cutList = {} // Will hold the cutlist
this.store = new Store(this.raise) // Store for sharing data across parts
this.store = new Store([[ 'emit', this.raise]]) // Store for sharing data across parts
this.parts = {} // Parts container
this.hooks = new Hooks() // Hooks container
this.Point = Point // Point constructor
@ -549,6 +549,7 @@ Pattern.prototype.loadPlugin = function (plugin, data, explicit=false) {
this.plugins[plugin.name] = plugin
if (plugin.hooks) this.loadPluginHooks(plugin, data)
if (plugin.macros) this.loadPluginMacros(plugin)
if (plugin.store) this.loadPluginStoreMethods(plugin)
this.raise.info(`Loaded plugin \`${plugin.name}:${plugin.version}\``)
return this
@ -611,6 +612,11 @@ Pattern.prototype.loadPluginMacros = function (plugin) {
}
}
Pattern.prototype.loadPluginStoreMethods = function (plugin) {
if (Array.isArray(plugin.store)) this.store = this.store.extend(...plugin.store)
else this.raise.warning(`Plugin store methods should be an Array`)
}
Pattern.prototype.macro = function (key, method) {
this.macros[key] = method
}

View file

@ -1,22 +1,71 @@
export function Store(raise) {
this.data = new Map()
this.raise = raise
import set from 'lodash.set'
import unset from 'lodash.unset'
import get from 'lodash.get'
const avoid = ['set', 'setIfUnset', 'push', 'unset', 'get', 'extend']
export function Store(methods=[]) {
for (const method of methods) {
if (avoid.indexOf(method[0]) !== -1) {
console.log(`WARNING: You can't squat ${method[0]}in the store`)
} else set(this, ...method)
}
return this
}
/** Sets a value under index key */
Store.prototype.set = function (key, value) {
this.data.set(key, value)
/** Extends the store with additional methods */
Store.prototype.extend = function (...methods) {
for (const [path, method] of methods) {
if (avoid.indexOf(method[0]) !== -1) {
console.log(`WARNING: You can't squat ${method[0]}in the store`)
} else set(this, path, (...args) => method(this, ...args))
}
return this
}
/** Sets a value under index key */
Store.prototype.setIfUnset = function (key, value) {
if (!this.data.has(key)) this.data.set(key, value)
/** Set key at path to value */
Store.prototype.set = function (path, value) {
set(this, path, value)
return this
}
/** Gets a value under index key */
Store.prototype.get = function (key) {
if (!this.data.has(key))
this.raise.warning(`Tried to access \`${key}\` in the \`store\` but it is not set`)
return this.data.get(key)
/** Set key at path to value, but only if it's not currently set */
Store.prototype.setIfUnset = function (path, value) {
if (typeof get(this, path) === 'undefined') {
return set(this, path, value)
}
return this
}
/** Adds a value to an array stored under path */
Store.prototype.push = function (path, ...values) {
const arr = get(this, path)
if (Array.isArray(arr)) {
return this.set(path, [...arr, ...values])
}
return this
}
/** Remove the key at path */
Store.prototype.unset = function (path) {
unset(this, path)
return this
}
/** Retrieve a key */
Store.prototype.get = function (path) {
const val = get(this, path)
if (typeof val === 'undefined') {
const msg = `Tried to access \`${path}\` in the \`store\` but it is not set`
if (typeof this.emit?.warning === 'function') this.emit.warning(msg)
else console.log(msg)
}
return val
}

View file

@ -1,31 +1,70 @@
import chai from "chai"
import { Pattern } from "./dist/index.mjs"
import { Design, Store } from "./dist/index.mjs"
const expect = chai.expect
const pattern = new Pattern();
const store = pattern.store;
const store = new Store()
describe('Store', () => {
it("Store should be a Map", () => {
expect(store.data.toString()).to.equal("[object Map]");
});
it("Should set/get a store value", () => {
it("Should set/get a top-level store value", () => {
store.set("foo", "bar");
expect(store.get("foo")).to.equal("bar");
});
it("Should set a store value only if unset", () => {
store.setIfUnset("few", "baz");
store.setIfUnset("few", "schmoo");
expect(store.get("few")).to.equal("baz");
it("Should set/get a nested store value", () => {
store.set("some.nested.key.foo", "bar");
expect(store.get("some.nested.key").foo).to.equal("bar");
});
it("Should raise a warning when retrieving a invalid key", () => {
it("Should set a store value only if unset", () => {
store.setIfUnset("dew.few", "baz");
store.setIfUnset("dew.few", "schmoo");
expect(store.get("dew").few).to.equal("baz");
});
it("Should push to an array value in the store", () => {
store.set("dew.few", ["baz", "bar"]);
// store.push is variadic
store.push("dew.few", "boz", "bor");
expect(store.get("dew").few.length).to.equal(4);
});
it("Should emit a warning when retrieving a invalid key", () => {
const events = []
const warning = msg => events.push(msg)
const store = new Store([[ "emit.warning", warning]])
store.get('nope')
expect(pattern.events.warning.length).to.equal(1)
expect(pattern.events.warning[0]).to.equal('Tried to access `nope` in the `store` but it is not set')
expect(events.length).to.equal(1)
expect(events[0]).to.equal('Tried to access `nope` in the `store` but it is not set')
});
it("Should add methods to the store from a plugin", () => {
const plugin = {
name: 'test',
version: 1,
store: [
['test.example.warning', function(store, msg) {
store.set('test.message.warning', msg)
}],
['test.example.info', function(store, msg) {
store.set('test.message.info', msg)
}],
]
}
const part = {
name: 'example.part',
draft: part => {
const { store } = part.shorthand()
store.test.example.warning('hello warning')
store.test.example.info('hello info')
}
}
const Test = new Design({plugins: [plugin], parts: [ part ]})
const pattern = new Test()
pattern.draft()
expect(pattern.store.get("test.message.warning")).to.equal("hello warning")
expect(pattern.store.get("test.message.info")).to.equal("hello info")
});
});

138
yarn.lock
View file

@ -2749,6 +2749,20 @@
treeverse "^2.0.0"
walk-up-path "^1.0.0"
"@npmcli/config@^4.0.0":
version "4.2.2"
resolved "https://registry.yarnpkg.com/@npmcli/config/-/config-4.2.2.tgz#2e3334dda84f48d059309c53d152e66b05ca24b7"
integrity sha512-5GNcLd+0c4bYBnFop53+26CO5GQP0R9YcxlernohpHDWdIgzUg9I0+GEMk3sNHnLntATVU39d283A4OO+W402w==
dependencies:
"@npmcli/map-workspaces" "^2.0.2"
ini "^3.0.0"
mkdirp-infer-owner "^2.0.0"
nopt "^6.0.0"
proc-log "^2.0.0"
read-package-json-fast "^2.0.3"
semver "^7.3.5"
walk-up-path "^1.0.0"
"@npmcli/fs@^2.1.0":
version "2.1.1"
resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-2.1.1.tgz#c0c480b03450d8b9fc086816a50cb682668a48bf"
@ -2780,6 +2794,16 @@
npm-bundled "^1.1.1"
npm-normalize-package-bin "^1.0.1"
"@npmcli/map-workspaces@^2.0.2":
version "2.0.4"
resolved "https://registry.yarnpkg.com/@npmcli/map-workspaces/-/map-workspaces-2.0.4.tgz#9e5e8ab655215a262aefabf139782b894e0504fc"
integrity sha512-bMo0aAfwhVwqoVM5UzX1DJnlvVvzDCHae821jv48L1EsrYwfOZChlqWYXEtto/+BkBXetPbEWgau++/brh4oVg==
dependencies:
"@npmcli/name-from-folder" "^1.0.1"
glob "^8.0.1"
minimatch "^5.0.1"
read-package-json-fast "^2.0.3"
"@npmcli/map-workspaces@^2.0.3":
version "2.0.3"
resolved "https://registry.yarnpkg.com/@npmcli/map-workspaces/-/map-workspaces-2.0.3.tgz#2d3c75119ee53246e9aa75bc469a55281cd5f08f"
@ -3381,11 +3405,6 @@
dependencies:
"@types/istanbul-lib-report" "*"
"@types/js-yaml@^4.0.0":
version "4.0.5"
resolved "https://registry.yarnpkg.com/@types/js-yaml/-/js-yaml-4.0.5.tgz#738dd390a6ecc5442f35e7f03fa1431353f7e138"
integrity sha512-FhpRzf927MNQdRZP0J5DLIdTXhjLYzeUTmLAu69mnVksLH9CJY3IuSeEgbKUki7GQZm0WqDkGzyxju2EZGD2wA==
"@types/json-buffer@~3.0.0":
version "3.0.0"
resolved "https://registry.yarnpkg.com/@types/json-buffer/-/json-buffer-3.0.0.tgz#85c1ff0f0948fc159810d4b5be35bf8c20875f64"
@ -3475,11 +3494,6 @@
resolved "https://registry.yarnpkg.com/@types/node/-/node-16.11.45.tgz#155b13a33c665ef2b136f7f245fa525da419e810"
integrity sha512-3rKg/L5x0rofKuuUt5zlXzOnKyIHXmIu5R8A0TuNDMF2062/AOIDBciFIjToLEJ/9F9DzkHNot+BpNsMI1OLdQ==
"@types/node@^17.0.0":
version "17.0.45"
resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.45.tgz#2c0fafd78705e7a18b7906b5201a522719dc5190"
integrity sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==
"@types/normalize-package-data@^2.4.0", "@types/normalize-package-data@^2.4.1":
version "2.4.1"
resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz#d3357479a0fdfdd5907fe67e17e0a85c906e1301"
@ -3838,7 +3852,7 @@ JSONStream@^1.0.4:
jsonparse "^1.2.0"
through ">=2.2.7 <3"
abbrev@1:
abbrev@1, abbrev@^1.0.0:
version "1.1.1"
resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8"
integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==
@ -5143,13 +5157,6 @@ builtins@^1.0.3:
resolved "https://registry.yarnpkg.com/builtins/-/builtins-1.0.3.tgz#cb94faeb61c8696451db36534e1422f94f0aee88"
integrity sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ==
builtins@^4.0.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/builtins/-/builtins-4.1.0.tgz#1edd016dd91ce771a1ed6fc3b2b71fb918953250"
integrity sha512-1bPRZQtmKaO6h7qV1YHXNtr6nCK28k0Zo95KM4dXfILcZZwoHJBN1m3lfLv9LPkcOZlrSr+J1bzMaZFO98Yq0w==
dependencies:
semver "^7.0.0"
builtins@^5.0.0, builtins@^5.0.1:
version "5.0.1"
resolved "https://registry.yarnpkg.com/builtins/-/builtins-5.0.1.tgz#87f6db9ab0458be728564fa81d876d8d74552fa9"
@ -5351,6 +5358,11 @@ camelcase@^6.0.0, camelcase@^6.2.0, camelcase@^6.3.0:
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a"
integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==
camelcase@^7.0.0:
version "7.0.0"
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-7.0.0.tgz#fd112621b212126741f998d614cbc2a8623fd174"
integrity sha512-JToIvOmz6nhGsUhAYScbo2d6Py5wojjNfoxoc2mEVLUdJ70gJK2gnd+ABY1Tc3sVMyK7QDPtN0T/XdlCQWITyQ==
caniuse-lite@^1.0.30001332, caniuse-lite@^1.0.30001370, caniuse-lite@^1.0.30001373:
version "1.0.30001373"
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001373.tgz#2dc3bc3bfcb5d5a929bec11300883040d7b4b4be"
@ -9105,7 +9117,7 @@ glob@7.2.0:
once "^1.3.0"
path-is-absolute "^1.0.0"
glob@^7.0.0, glob@^7.0.5, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@^7.2.0:
glob@^7.0.5, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@^7.2.0:
version "7.2.3"
resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b"
integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==
@ -9117,7 +9129,7 @@ glob@^7.0.0, glob@^7.0.5, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@^7.2.0:
once "^1.3.0"
path-is-absolute "^1.0.0"
glob@^8.0.1, glob@^8.0.3:
glob@^8.0.0, glob@^8.0.1, glob@^8.0.3:
version "8.0.3"
resolved "https://registry.yarnpkg.com/glob/-/glob-8.0.3.tgz#415c6eb2deed9e502c68fa44a272e6da6eeca42e"
integrity sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==
@ -9952,12 +9964,10 @@ import-local@^3.0.2:
pkg-dir "^4.2.0"
resolve-cwd "^3.0.0"
import-meta-resolve@^1.0.0:
version "1.1.1"
resolved "https://registry.yarnpkg.com/import-meta-resolve/-/import-meta-resolve-1.1.1.tgz#244fd542fd1fae73550d4f8b3cde3bba1d7b2b18"
integrity sha512-JiTuIvVyPaUg11eTrNDx5bgQ/yMKMZffc7YSjvQeSMXy58DO2SQ8BtAf3xteZvmzvjYh14wnqNjL8XVeDy2o9A==
dependencies:
builtins "^4.0.0"
import-meta-resolve@^2.0.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/import-meta-resolve/-/import-meta-resolve-2.1.0.tgz#c8952d331ed6e9bb6ad524a7549deb3d34af41ce"
integrity sha512-yG9pxkWJVTy4cmRsNWE3ztFdtFuYIV8G4N+cbCkO8b+qngkLyIUhxQFuZ0qJm67+0nUOxjMPT7nfksPKza1v2g==
imurmurhash@^0.1.4:
version "0.1.4"
@ -10012,11 +10022,16 @@ ini@2.0.0:
resolved "https://registry.yarnpkg.com/ini/-/ini-2.0.0.tgz#e5fd556ecdd5726be978fa1001862eacb0a94bc5"
integrity sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==
ini@^1.3.2, ini@^1.3.4, ini@^1.3.5, ini@~1.3.0:
ini@^1.3.2, ini@^1.3.4, ini@~1.3.0:
version "1.3.8"
resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c"
integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==
ini@^3.0.0:
version "3.0.1"
resolved "https://registry.yarnpkg.com/ini/-/ini-3.0.1.tgz#c76ec81007875bc44d544ff7a11a55d12294102d"
integrity sha512-it4HyVAUTKBc6m8e1iXWvXSTdndF7HbdN713+kvLrymxTaU4AUBWrJ4vEooP+V7fexnVD3LKcBshjGGPefSMUQ==
init-package-json@^3.0.2:
version "3.0.2"
resolved "https://registry.yarnpkg.com/init-package-json/-/init-package-json-3.0.2.tgz#f5bc9bac93f2bdc005778bc2271be642fecfcd69"
@ -11277,15 +11292,6 @@ libnpmaccess@^6.0.3:
npm-package-arg "^9.0.1"
npm-registry-fetch "^13.0.0"
libnpmconfig@^1.0.0:
version "1.2.1"
resolved "https://registry.yarnpkg.com/libnpmconfig/-/libnpmconfig-1.2.1.tgz#c0c2f793a74e67d4825e5039e7a02a0044dfcbc0"
integrity sha512-9esX8rTQAHqarx6qeZqmGQKBNZR5OIbl/Ayr0qQDy3oXja2iFVQQI81R6GZ2a02bSNZ9p3YOGX1O6HHCb1X7kA==
dependencies:
figgy-pudding "^3.5.1"
find-up "^3.0.0"
ini "^1.3.5"
libnpmpublish@^6.0.4:
version "6.0.4"
resolved "https://registry.yarnpkg.com/libnpmpublish/-/libnpmpublish-6.0.4.tgz#adb41ec6b0c307d6f603746a4d929dcefb8f1a0b"
@ -11407,13 +11413,13 @@ load-json-file@^7.0.0:
resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-7.0.1.tgz#a3c9fde6beffb6bedb5acf104fad6bb1604e1b00"
integrity sha512-Gnxj3ev3mB5TkVBGad0JM6dmLiQL+o0t23JPBZ9sd+yvSLk05mFoqKBw5N8gbbkU4TNXyqCgIrl/VM17OgUIgQ==
load-plugin@^4.0.0:
version "4.0.1"
resolved "https://registry.yarnpkg.com/load-plugin/-/load-plugin-4.0.1.tgz#9a239b0337064c9b8aac82b0c9f89b067db487c5"
integrity sha512-4kMi+mOSn/TR51pDo4tgxROHfBHXsrcyEYSGHcJ1o6TtRaP2PsRM5EwmYbj1uiLDvbfA/ohwuSWZJzqGiai8Dw==
load-plugin@^5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/load-plugin/-/load-plugin-5.0.0.tgz#e24f6a69ed905e6b31d4555b1a46603c11e9c1f0"
integrity sha512-jTz8tvC0BTMtof27lTSV5SAOnCRT0Z++k+S3QeQ5CrF8ZAS5L2nhi3euf4ZhJyDkds+nOQGyPcFqdQZ9s8ELkg==
dependencies:
import-meta-resolve "^1.0.0"
libnpmconfig "^1.0.0"
"@npmcli/config" "^4.0.0"
import-meta-resolve "^2.0.0"
loader-runner@^2.4.0:
version "2.4.0"
@ -13779,6 +13785,13 @@ nopt@^5.0.0:
dependencies:
abbrev "1"
nopt@^6.0.0:
version "6.0.0"
resolved "https://registry.yarnpkg.com/nopt/-/nopt-6.0.0.tgz#245801d8ebf409c6df22ab9d95b65e1309cdb16d"
integrity sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==
dependencies:
abbrev "^1.0.0"
nopt@~1.0.10:
version "1.0.10"
resolved "https://registry.yarnpkg.com/nopt/-/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee"
@ -16061,13 +16074,13 @@ release-zalgo@^1.0.0:
dependencies:
es6-error "^4.0.1"
remark-cli@^10.0.1:
version "10.0.1"
resolved "https://registry.yarnpkg.com/remark-cli/-/remark-cli-10.0.1.tgz#0a38166b8bb1a1720f5ed8a324715563f63dbcba"
integrity sha512-+eln31zLE69JwBMoa8nd2sPC0DFZyiWgBrshL8aKb3L2XXTRMuEKWE/IAtNPYEtcktceAQw+OpmqVy8pAmGOwQ==
remark-cli@^11.0.0:
version "11.0.0"
resolved "https://registry.yarnpkg.com/remark-cli/-/remark-cli-11.0.0.tgz#302c15c5e73c0b422a6709f65adb74cac3b5eb53"
integrity sha512-8JEWwArXquRq1/In4Ftz7gSG9Scwb1ijT2/dEuBETW9omqhmMRxcfjZ3iKqrak3BnCJeZSXCdWEmPhFKC8+RUQ==
dependencies:
remark "^14.0.0"
unified-args "^9.0.0"
unified-args "^10.0.0"
"remark-copy-linked-files@https://github.com/joostdecock/remark-copy-linked-files":
version "1.5.0"
@ -18577,42 +18590,40 @@ unicode-trie@^2.0.0:
pako "^0.2.5"
tiny-inflate "^1.0.0"
unified-args@^9.0.0:
version "9.0.2"
resolved "https://registry.yarnpkg.com/unified-args/-/unified-args-9.0.2.tgz#0c14f555e73ee29c23f9a567942e29069f56e5a2"
integrity sha512-qSqryjoqfJSII4E4Z2Jx7MhXX2MuUIn6DsrlmL8UnWFdGtrWvEtvm7Rx5fKT5TPUz7q/Fb4oxwIHLCttvAuRLQ==
unified-args@^10.0.0:
version "10.0.0"
resolved "https://registry.yarnpkg.com/unified-args/-/unified-args-10.0.0.tgz#95994c5558fea83ff07006cb560fd88cdcf31134"
integrity sha512-PqsqxwkXpGSLiMkbjNnKU33Ffm6gso6rAvz1TlBGzMBx3gpx7ewIhViBX8HEWmy0v7pebA5PM6RkRWWaYmtfYw==
dependencies:
"@types/text-table" "^0.2.0"
camelcase "^6.0.0"
chalk "^4.0.0"
camelcase "^7.0.0"
chalk "^5.0.0"
chokidar "^3.0.0"
fault "^2.0.0"
json5 "^2.0.0"
minimist "^1.0.0"
text-table "^0.2.0"
unified-engine "^9.0.0"
unified-engine "^10.0.0"
unified-engine@^9.0.0:
version "9.1.1"
resolved "https://registry.yarnpkg.com/unified-engine/-/unified-engine-9.1.1.tgz#f8c7ecc76fc0925db3932dee25ee03696be84408"
integrity sha512-yfXfc9zkoCileXE2lyj58AKQr6JK2HeBE8PxEG1U+P6opNSN4lAPPXEyBxL+ITyOQo0ZRDQmXQD04RwdwMovVg==
unified-engine@^10.0.0:
version "10.0.1"
resolved "https://registry.yarnpkg.com/unified-engine/-/unified-engine-10.0.1.tgz#94f27f1f88660d9b5910595095e4b463ca18e389"
integrity sha512-lsj7VC8kNWhK87rGBhidklk4llgrEdJoOZHoQFbTZQ/fA22JqowUPM10bEf05eSZOR6UnUSrZ/mPWHrQsHGm7g==
dependencies:
"@types/concat-stream" "^2.0.0"
"@types/debug" "^4.0.0"
"@types/is-empty" "^1.0.0"
"@types/js-yaml" "^4.0.0"
"@types/node" "^17.0.0"
"@types/node" "^18.0.0"
"@types/unist" "^2.0.0"
concat-stream "^2.0.0"
debug "^4.0.0"
fault "^2.0.0"
glob "^7.0.0"
glob "^8.0.0"
ignore "^5.0.0"
is-buffer "^2.0.0"
is-empty "^1.0.0"
is-plain-obj "^4.0.0"
js-yaml "^4.0.0"
load-plugin "^4.0.0"
load-plugin "^5.0.0"
parse-json "^6.0.0"
to-vfile "^7.0.0"
trough "^2.0.0"
@ -18620,6 +18631,7 @@ unified-engine@^9.0.0:
vfile-message "^3.0.0"
vfile-reporter "^7.0.0"
vfile-statistics "^2.0.0"
yaml "^2.0.0"
unified-lint-rule@^2.0.0:
version "2.1.1"