diff --git a/_config.yml b/_config.yml index d2f3e5a..c7cbb3f 100644 --- a/_config.yml +++ b/_config.yml @@ -126,5 +126,8 @@ jsonContent: categories: true tags: true -# 是否同步文章内容以及分词结果 -save_content: false \ No newline at end of file +# hexo-generator-search +search: + path: search.xml + field: post + content: true diff --git a/images/JavaScript/Promise.all时间.png b/images/JavaScript/Promise.all时间.png new file mode 100644 index 0000000..ff04a3e Binary files /dev/null and b/images/JavaScript/Promise.all时间.png differ diff --git a/images/JavaScript/await时间.png b/images/JavaScript/await时间.png new file mode 100644 index 0000000..dcd3b08 Binary files /dev/null and b/images/JavaScript/await时间.png differ diff --git a/package.json b/package.json index 16789eb..6997562 100644 --- a/package.json +++ b/package.json @@ -17,6 +17,7 @@ "hexo-generator-feed": "^1.2.2", "hexo-generator-index": "^0.2.1", "hexo-generator-json-content": "^4.1.3", + "hexo-generator-search": "^2.4.0", "hexo-generator-sitemap": "^1.2.0", "hexo-generator-tag": "^0.2.0", "hexo-renderer-ejs": "^0.3.1", @@ -30,8 +31,6 @@ "gulp-htmlclean": "^2.7.22", "gulp-htmlmin": "^5.0.1", "gulp-plumber": "^1.2.1", - "mongoose": "^5.6.2", - "optimist": "^0.6.1", - "segment": "^0.1.3" + "optimist": "^0.6.1" } } diff --git a/scripts/filter.js b/scripts/filter.js index afb26c8..88f4cc3 100644 --- a/scripts/filter.js +++ b/scripts/filter.js @@ -1,47 +1,6 @@ -const crypto = require('crypto') -/** - * 创建mongodb数据库连接, 返回Model - */ -function createModel(dbUrl) { - const Segment = require('segment') - const segment = new Segment() // 创建实例 - segment.useDefault() // 使用默认的识别模块及字典 - - const mongoose = require('mongoose') - mongoose.connect(dbUrl, {useNewUrlParser: true}) - const articleSchema = new mongoose.Schema({ - title: String, - path: String, - create_date: Date, - content: String, - content_hash: String - }, { - collection: 'article', - versionKey: false, - }) - - const articleKeysSchema = new mongoose.Schema({ - article_id: mongoose.Types.ObjectId, - keys: Array - }, { - collection: 'article_keys', - versionKey: false, - }) - return { - articleModel: mongoose.model('Article', articleSchema), - articleKeysModel: mongoose.model('ArticleKeys', articleKeysSchema) - } -} - -var mongooseModels = undefined -if(hexo.config.save_content) { - mongooseModels = createModel('mongodb://127.0.0.1:27017/common_api') -} - // 替换markdown中图片路径的正则 const mdImageRegex = /\]\s*\((?=(?!http).*?\))/gi // 替换所有HTML标签的正则 -const tagRegex = /<[^>]*>/g hexo.extend.filter.register('before_post_render', function(article){ // article.raw 是原始的文件内容 // article.content 是处理过代码块语法高亮的内容 @@ -49,32 +8,4 @@ hexo.extend.filter.register('before_post_render', function(article){ article.content = article.content.replace(mdImageRegex, `](${hexo.config.picture_cdn}`) } return article -}) - -hexo.extend.filter.register('after_post_render', function(article){ - if(!mongooseModels || article.pageid) return article - let textContent = article.content.replace(tagRegex, '') - const contentHash = crypto.createHash('sha1') - .update(textContent) - .digest('hex') - let articleKeys = segment.doSegment(textContent, { - simple: true, // 不返回词性 - stripPunctuation: true // 去除标点符号 - }) - const articleEntity = new mongooseModels.articleModel({ - title: article.title, - path: article.path, - create_date: article.date._i, - content: textContent, - content_hash: contentHash - }) - articleEntity.save(function(err, savedArticle){ - if(err) console.error(err) - const articleKeysEntity = new mongooseModels.articleKeysModel({ - article_id: savedArticle._id, - keys: articleKeys, - }) - articleKeysEntity.save() - }) - return article; }) \ No newline at end of file diff --git a/source/_posts/JavaScript/优雅写异步与循环.md b/source/_posts/JavaScript/优雅写异步与循环.md new file mode 100644 index 0000000..0f642ef --- /dev/null +++ b/source/_posts/JavaScript/优雅写异步与循环.md @@ -0,0 +1,82 @@ +--- +title: 优雅写异步与循环 +date: 2019-06-29 23:39:46 +tags: + - JavaScript +categories: + - JavaScript +--- + +JS当中的循环都是非异步的 +包括但不限于 +1. Array.prototype中的`forEach` +2. `for ... in` 语法 +3. `for ... of` 语法 + + +所以如果要在循环内的异步全部完成后做某些事情 +例如 +```javascript +// 这里我只是简单构造了一个异步 +// 实际运用当中譬如数据库查询、文件读写等操作, 通常都是异步的 +function show(num) { + Promise.resolve(num).then(console.log) +} +const arr = [100, 200, 300] + +console.log('start') +arr.forEach(show) +console.log('end') +``` +上面的写法根据事件队列的机制, 显然会先输出end, 再输出数组元素的值 +当然我们可以在Promise的resolve函数当中判断是否到达了数组最后一个元素, 把输出end的操作写进resolve函数里面 +显然这不够优雅, 而且很多时候也不方便这样做 + +实现方式 +#### Promise.all + +```javascript +const arr = [100, 200, 300] + +console.log('start') +console.time('promise all in') +Promise.all(arr.map(show)).then(() => { + console.timeEnd('promise all in') + console.log('end') +}) +``` +为了比较执行性能的差异, 加了一个计时 ( Nodejs环境运行 ) +![Promise.all时间](/images/JavaScript/Promise.all时间.png) + +#### async/await +```javascript +const arr = [100, 200, 300]; + +(async function() { + console.log('start') + console.time('await all in') + for await (let i of arr.map(show)) {} + console.timeEnd('await all in') + console.log('end') +})() +``` +![await时间](/images/JavaScript/await时间.png) +由于await必须用在async修饰的函数当中, 所以包装了一层 +实际执行时间与Promise.all差不多 + +### One by one +这种方式效率最低,有点类似于同步语言中的循环,一个接着一个执行,耗时自然也就是所有异步方法耗时的总和。对资源的消耗最小。 + +```javascript +const arr = [100, 200, 300]; + +(async function() { + console.log('start') + console.time('await one by one') + for (let item of arr) { + await show(item) + } + console.timeEnd('await one by one') + console.log('end') +})() +``` \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 3ca8ba2..7322cef 100644 --- a/yarn.lock +++ b/yarn.lock @@ -258,13 +258,6 @@ async-settle@^1.0.0: dependencies: async-done "^1.2.2" -async@2.6.2: - version "2.6.2" - resolved "https://registry.yarnpkg.com/async/-/async-2.6.2.tgz#18330ea7e6e313887f5d2f2a904bac6fe4dd5381" - integrity sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg== - dependencies: - lodash "^4.17.11" - async@~0.2.6: version "0.2.10" resolved "https://registry.yarnpkg.com/async/-/async-0.2.10.tgz#b6bbe0b0674b9d719708ca38de8c237cb526c3d1" @@ -314,11 +307,6 @@ binary-extensions@^1.0.0: version "1.13.1" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" -bluebird@3.5.1: - version "3.5.1" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.1.tgz#d9551f9de98f1fcda1e683d17ee91a0602ee2eb9" - integrity sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA== - bluebird@^3.2.2, bluebird@^3.4.0, bluebird@^3.5.1: version "3.5.4" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.4.tgz#d6cc661595de30d5b3af5fcedd3c0b3ef6ec5714" @@ -361,11 +349,6 @@ browser-fingerprint@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/browser-fingerprint/-/browser-fingerprint-0.0.1.tgz#8df3cdca25bf7d5b3542d61545d730053fce604a" -bson@^1.1.1, bson@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/bson/-/bson-1.1.1.tgz#4330f5e99104c4e751e7351859e2d408279f2f13" - integrity sha512-jCGVYLoYMHDkOsbwJZBCqwMHyH4c+wzgI9hG7Z6SZJRXWr+x58pdIbm2i9a/jFGCkRJqRUr8eoI7lDWa0hTkxg== - buffer-equal@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/buffer-equal/-/buffer-equal-1.0.0.tgz#59616b498304d556abd466966b22eeda3eca5fbe" @@ -741,13 +724,6 @@ debug@2.6.9, debug@^2.2.0, debug@^2.3.3: dependencies: ms "2.0.0" -debug@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" - integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== - dependencies: - ms "2.0.0" - debug@^4.1.0: version "4.1.1" resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" @@ -1538,6 +1514,14 @@ hexo-generator-json-content@^4.1.3: keyword-extractor latest moment latest +hexo-generator-search@^2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/hexo-generator-search/-/hexo-generator-search-2.4.0.tgz#f5abbbbbe35299f52c2554bb89845d0a4fab6c9b" + integrity sha512-470q6Cpu6xHIPMXN+rQjCQkn/ii4e8XJRBXCmKs+B1jGQNrT7K3geqfyd5pqGiGi6bh5yY+mNqwGw5r2sZZtzA== + dependencies: + nunjucks "^3.0.1" + utils-merge "^1.0.0" + hexo-generator-sitemap@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/hexo-generator-sitemap/-/hexo-generator-sitemap-1.2.0.tgz#3018f8d7d1e2e42b3f71a65a7316ffcf583bc3f3" @@ -1978,11 +1962,6 @@ just-debounce@^1.0.0: resolved "https://registry.yarnpkg.com/just-debounce/-/just-debounce-1.0.0.tgz#87fccfaeffc0b68cd19d55f6722943f929ea35ea" integrity sha1-h/zPrv/AtozRnVX2cilD+SnqNeo= -kareem@2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/kareem/-/kareem-2.3.0.tgz#ef33c42e9024dce511eeaf440cd684f3af1fc769" - integrity sha512-6hHxsp9e6zQU8nXsP+02HGWXwTkOEw6IROhF2ZA28cYbUk4eJ6QbtZvdqZOdD9YPKghG3apk5eOCvs+tLl3lRg== - keyword-extractor@latest: version "0.0.16" resolved "https://registry.yarnpkg.com/keyword-extractor/-/keyword-extractor-0.0.16.tgz#225342f85de31ef3087fd58f951d655d59e1d492" @@ -2187,11 +2166,6 @@ math-random@^1.0.1: version "1.0.4" resolved "https://registry.yarnpkg.com/math-random/-/math-random-1.0.4.tgz#5dd6943c938548267016d4e34f057583080c514c" -memory-pager@^1.0.2: - version "1.5.0" - resolved "https://registry.yarnpkg.com/memory-pager/-/memory-pager-1.5.0.tgz#d8751655d22d384682741c972f2c3d6dfa3e66b5" - integrity sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg== - micromatch@^2.1.5: version "2.3.11" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" @@ -2309,49 +2283,6 @@ moment-timezone@^0.5.14: version "2.24.0" resolved "https://registry.yarnpkg.com/moment/-/moment-2.24.0.tgz#0d055d53f5052aa653c9f6eb68bb5d12bf5c2b5b" -mongodb-core@3.2.7: - version "3.2.7" - resolved "https://registry.yarnpkg.com/mongodb-core/-/mongodb-core-3.2.7.tgz#a8ef1fe764a192c979252dacbc600dc88d77e28f" - integrity sha512-WypKdLxFNPOH/Jy6i9z47IjG2wIldA54iDZBmHMINcgKOUcWJh8og+Wix76oGd7EyYkHJKssQ2FAOw5Su/n4XQ== - dependencies: - bson "^1.1.1" - require_optional "^1.0.1" - safe-buffer "^5.1.2" - optionalDependencies: - saslprep "^1.0.0" - -mongodb@3.2.7: - version "3.2.7" - resolved "https://registry.yarnpkg.com/mongodb/-/mongodb-3.2.7.tgz#8ba149e4be708257cad0dea72aebb2bbb311a7ac" - integrity sha512-2YdWrdf1PJgxcCrT1tWoL6nHuk6hCxhddAAaEh8QJL231ci4+P9FLyqopbTm2Z2sAU6mhCri+wd9r1hOcHdoMw== - dependencies: - mongodb-core "3.2.7" - safe-buffer "^5.1.2" - -mongoose-legacy-pluralize@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/mongoose-legacy-pluralize/-/mongoose-legacy-pluralize-1.0.2.tgz#3ba9f91fa507b5186d399fb40854bff18fb563e4" - integrity sha512-Yo/7qQU4/EyIS8YDFSeenIvXxZN+ld7YdV9LqFVQJzTLye8unujAWPZ4NWKfFA+RNjh+wvTWKY9Z3E5XM6ZZiQ== - -mongoose@^5.6.2: - version "5.6.2" - resolved "https://registry.yarnpkg.com/mongoose/-/mongoose-5.6.2.tgz#71afc80bc27462a5fd12644db490c2c5b053646a" - integrity sha512-s2FQn/XTlM/yeYxqNPGU8khSA1nPhGiESO7iLdFf8Ntn6lEwgO9KKOIGkRKPk5s+peAOwO34ex6NPX8EWtKgFA== - dependencies: - async "2.6.2" - bson "~1.1.1" - kareem "2.3.0" - mongodb "3.2.7" - mongodb-core "3.2.7" - mongoose-legacy-pluralize "1.0.2" - mpath "0.6.0" - mquery "3.2.1" - ms "2.1.2" - regexp-clone "1.0.0" - safe-buffer "5.1.2" - sift "7.0.1" - sliced "1.0.1" - morgan@^1.9.0: version "1.9.1" resolved "https://registry.yarnpkg.com/morgan/-/morgan-1.9.1.tgz#0a8d16734a1d9afbc824b99df87e738e58e2da59" @@ -2362,31 +2293,10 @@ morgan@^1.9.0: on-finished "~2.3.0" on-headers "~1.0.1" -mpath@0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/mpath/-/mpath-0.6.0.tgz#aa922029fca4f0f641f360e74c5c1b6a4c47078e" - integrity sha512-i75qh79MJ5Xo/sbhxrDrPSEG0H/mr1kcZXJ8dH6URU5jD/knFxCVqVC/gVSW7GIXL/9hHWlT9haLbCXWOll3qw== - -mquery@3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/mquery/-/mquery-3.2.1.tgz#8b059a49cdae0a8a9e804284ef64c2f58d3ac05d" - integrity sha512-kY/K8QToZWTTocm0U+r8rqcJCp5PRl6e8tPmoDs5OeSO3DInZE2rAL6AYH+V406JTo8305LdASOQcxRDqHojyw== - dependencies: - bluebird "3.5.1" - debug "3.1.0" - regexp-clone "^1.0.0" - safe-buffer "5.1.2" - sliced "1.0.1" - ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" -ms@2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - ms@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" @@ -2571,7 +2481,7 @@ nunjucks@^2.3.0: chokidar "^1.6.0" yargs "^3.32.0" -nunjucks@^3.0.0, nunjucks@^3.1.2: +nunjucks@^3.0.0, nunjucks@^3.0.1, nunjucks@^3.1.2: version "3.2.0" resolved "https://registry.yarnpkg.com/nunjucks/-/nunjucks-3.2.0.tgz#53e95f43c9555e822e8950008a201b1002d49933" dependencies: @@ -2986,11 +2896,6 @@ regex-not@^1.0.0, regex-not@^1.0.2: extend-shallow "^3.0.2" safe-regex "^1.1.0" -regexp-clone@1.0.0, regexp-clone@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/regexp-clone/-/regexp-clone-1.0.0.tgz#222db967623277056260b992626354a04ce9bf63" - integrity sha512-TuAasHQNamyyJ2hb97IuBEif4qBHGjPHBS64sZwytpLEqtBQ1gPJTnOaQ6qmpET16cK14kkjbazl6+p0RRv0yw== - relateurl@0.2.x: version "0.2.7" resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" @@ -3049,14 +2954,6 @@ require-main-filename@^1.0.1: resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE= -require_optional@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/require_optional/-/require_optional-1.0.1.tgz#4cf35a4247f64ca3df8c2ef208cc494b1ca8fc2e" - integrity sha512-qhM/y57enGWHAe3v/NcwML6a3/vfESLe/sGM2dII+gEO0BpKRUkWZow/tyloNqJyN6kXSl3RyyM8Ll5D/sJP8g== - dependencies: - resolve-from "^2.0.0" - semver "^5.1.0" - resolve-dir@^1.0.0, resolve-dir@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43" @@ -3065,11 +2962,6 @@ resolve-dir@^1.0.0, resolve-dir@^1.0.1: expand-tilde "^2.0.0" global-modules "^1.0.0" -resolve-from@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-2.0.0.tgz#9480ab20e94ffa1d9e80a804c7ea147611966b57" - integrity sha1-lICrIOlP+h2egKgEx+oUdhGWa1c= - resolve-options@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/resolve-options/-/resolve-options-1.1.0.tgz#32bb9e39c06d67338dc9378c0d6d6074566ad131" @@ -3134,22 +3026,10 @@ safe-regex@^1.1.0: version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" -saslprep@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/saslprep/-/saslprep-1.0.3.tgz#4c02f946b56cf54297e347ba1093e7acac4cf226" - integrity sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag== - dependencies: - sparse-bitfield "^3.0.3" - sax@^1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" -segment@^0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/segment/-/segment-0.1.3.tgz#605f80fd6c7131c46e38103a17b1688f09efafa7" - integrity sha1-YF+A/WxxMcRuOBA6F7Fojwnvr6c= - semver-greatest-satisfied-range@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/semver-greatest-satisfied-range/-/semver-greatest-satisfied-range-1.1.0.tgz#13e8c2658ab9691cb0cd71093240280d36f77a5b" @@ -3157,7 +3037,7 @@ semver-greatest-satisfied-range@^1.1.0: dependencies: sver-compat "^1.5.0" -"semver@2 || 3 || 4 || 5", semver@^5.1.0, semver@^5.3.0: +"semver@2 || 3 || 4 || 5", semver@^5.3.0: version "5.7.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.0.tgz#790a7cf6fea5459bac96110b29b60412dc8ff96b" @@ -3214,20 +3094,10 @@ setprototypeof@1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" -sift@7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/sift/-/sift-7.0.1.tgz#47d62c50b159d316f1372f8b53f9c10cd21a4b08" - integrity sha512-oqD7PMJ+uO6jV9EQCl0LrRw1OwsiPsiFQR5AR30heR+4Dl7jBBbDLnNvWiak20tzZlSE1H7RB30SX/1j/YYT7g== - signal-exit@^3.0.0, signal-exit@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" -sliced@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/sliced/-/sliced-1.0.1.tgz#0b3a662b5d04c3177b1926bea82b03f837a2ef41" - integrity sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E= - snapdragon-node@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" @@ -3283,13 +3153,6 @@ sparkles@^1.0.0: resolved "https://registry.yarnpkg.com/sparkles/-/sparkles-1.0.1.tgz#008db65edce6c50eec0c5e228e1945061dd0437c" integrity sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw== -sparse-bitfield@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz#ff4ae6e68656056ba4b3e792ab3334d38273ca11" - integrity sha1-/0rm5oZWBWuks+eSqzM004JzyhE= - dependencies: - memory-pager "^1.0.2" - spdx-correct@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4"