-
Notifications
You must be signed in to change notification settings - Fork 646
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Discussion: jamstack word treatment #279
Comments
I believe JAMstack is most correct since it's an acronym just like MERN stack or LAMP stack vs. Mern and Lamp. |
That's true @jakeherp. That was its inception. Any thoughts on when you use this architecture but you are not using APIs or JavaScript? That's where some confusion creeps in. Ajax started as an acronym too, but the meaning became refined. |
@philhawksworth is it truly a Jamstack site if it isn't using APIs or JS? Just like a React site without Express and MongoDB wouldn't be a MERN site, but simply a React site. |
Did |
Yes it absolutely is. This is one of the main pieces of confusion that I'm trying to address. Many people are pushing back on jamstack because they believe that it dictates that they MUST use client-side rendering and call out to APIs. That is a powerful option, and often useful and appropriate. But certainly not a requirement. And often not needed. The strap-line on jamstack.org is:
And the way I personally elaborate on that is as I did above:
|
@jakeherp I've always understood the "JavaScript" in JAM to be frontend JS, not the tech the static site generator is built with (given you can have SSGs in Go, Python, Java, Bash etc.) |
Psefstack's got a nice ring to it! 🤡 |
I'm honestly not sure. But we didn't change the Acronym to AJAJ so much as shift towards accepting the term as a description of the model rather than as a strict acronym. |
I think one umbrella term for "using a site generator and not worrying about the backend too much" (or Phil's more sophisticated definitions!) is useful. I agree JAMStack feels "more correct", and jamstack gets on my tech-writery nerves, but I can see why having to explain "oh it stands for this, but you don't HAVE to use JS or APIs" gets tedious and confusing. With regard to the AJAX example: while I'd probably write ajax casually, when writing an article/tutorial, or proofreading, I would still correct it to AJAX, as it's an acronym. So perhaps we need to think about what we're deciding on here. Are we discussing how we're going to use the term casually, as a community (in which case, jamstack is inevitable - that shift key is hard to reach!), or if we're going to try and govern a "proper" brand name. On which note - is it an official brand name at all? I'd suggest that whatever happens, we're stuck with some variation on jam. The term is so widely used. That said, if it ever changes completely, switching to "Marmalade" would be my vote. |
LOLOL! starts designing a logo containing Paddington Bear |
Just in case there is any confusion or is this was your meaning, I'm advocating for "Jamstack", not "jamstack" Good points, @StarfallProjects. My hope here is mostly to help us reach agreement on what how we might reasonably expect to see term written consistently on the jamstac.org site, and what conventions we might like to adopt in our wider usage. jamstack.org is the natural place for people to come to learn "what is this thing?" so at the very least I'd like to have consistent and non-distracting usage here. And like many (I expect) I'd personally adopt what we settle on in my own writings and materials, for the sake of consistency. |
As @StarfallProjects points out: an English, non-technical reader will interpret a sequence of capital letters as an acronym. Acronyms are useful because:
In contrast, we tend to read words starting with one capital letter as proper nouns e.g. "Netlify", "War and Peace" or "Buckingham Palace". Proper nouns are frequently unambiguous in their definition: a legal entity (company), a book with an ISBN or a specific building in London. JAM stack seems most aligned to non-technical English writing in my opinion. |
i think its a compelling argument that other stacks separate out the word stack from the name, regardless of capitalization. i'm on the JAM camp, but I understand the reasonings here @philhawksworth do you have any observations from the experiment yet? any "results" i guess? I'm personally under the impression that you're going to be led to explaining the situation regardless because people are generally curious. "what's jamstack? oh how did you come up with that?" |
would the logo conform to this? the updated version has a lowercase j 🤔 |
I'm on team JAMstack, even for websites that aren't all made with 'jam'. |
This is a valuable point, @michrome!
Yeah, I think that's true @colbyfayock. Although I currently find myself including 2 extras steps of saying, "It stands for JavaScript, APIs, and Markup"... quickly followed by, "but you don't need to use all 3 of those!" I've found that adds a little confusion. And to @michrome's point, if it is an acronym, them making that plain to people without (or with!) English as a first language is useful... as long as the acronym doesn't lead us away from true meaning. These are all great points, and food for thought! |
Only anecdotal. And not at all scientific. I've not been pushing it hard in public channels as I rather wanted to have this conversation first. but it seems to land well when I've gone straight to the architectural model, and not put the J, A and M up front. I suppose a better test is in how people comprehend it when reading about it, rather than being walked through an explanation. |
I am for keeping it JAMstack for now for several reasons.
While I agree that the acronym can cause confusion at times, I think we just need to do a better job of clarifying what the acronym is about. I see too many people confused into thinking the J for JavaScript is about JavaScript frameworks - I don't think it is beneficial for the ecosystem for folks to think it requires using React. I see too many people think M is for Markdown rather than markup. Despite these issues, I still find the acronym useful in explaining what the concept is. It adds tangible tools and technologies to an otherwise amorphous concept. |
I kinda prefer "Jamstack", as this make a lot of sense to me:
Absolutely non-scientifically, I bet some double-digit % of people think the M stands for Markdown. J and A are like the same thing to me, and I don't really need some architectures permission to use JavaScript to hit an API on my website. I just don't think the acronym is all that meaningful and it's more interesting to wonder what is that? and find out. |
While this statement seems pretty accurate seeing as jamstack doesn't need JavaScript or APIs, I do feel that there is some benefit in emphasizing the acronym. One such benefit is the implication that JavaScript and APIs are key technologies for the stack that should be used (when applicable). If we are instead reducing their importance in the stack, it seems something like "Flatstack" would be a much more appropriate name. Worse still would be going the MV* route and winding up with **Mstack. 😅 All that said, I am mostly playing devil's advocate here, and I kind of like "Jamstack" just for the sake of helping people remain consistent and the ease of typing it out on mobile devices... but I do wonder if it should officially remain "JAMstack" and allow natural progression through usage. |
Lots of excellent points in this thread! Some which resonate with me more than others, but all very well stated. Thanks everyone! It looks to me like there is a little more leaning from this group towards "JAMstack" than to "Jamstack" at this point. I'll leave this discussion open for a while longer and will take all these things into consideration as we work on an iteration to the jamstack.org site. |
I'll weigh in here. I'm pretty aligned with @chriscoyier on this front:
This gets at the core of my issue with "JAM" as an acronym: it’s a meaningless acronym. MEAN and MERN apps are also using JavaScript, APIs, and Markup — are they Jamstack sites? A PHP site that calls an API and renders markup that includes JavaScript — is that Jamstack? If we're calling JAM an actual tech stack, these examples use the "stack". but they're definitely not what we mean when we say "Jamstack". The Jamstack is not a stack; it's a software architecture (like microservices). It's unfortunate that it's phrased as one, but I think we're only making our lives harder if we treat "Jamstack" the same way we treat MEAN or MERN or LAMP, which are actual, opinionated stacks. I think it's impractical to completely rebrand, but I think moving away from an ambiguous acronym and toward a general label that describes an architecture would be a Good Thing™. 💜 |
That's my personal leaning too, @jlengstorf. But I think currently the majority of voices are tending the other way. We'll keep this thread going a little while longer before we formalise our language on the v2 of the site. Ultimately, the wider community will do what the wider community does, but we'll at least try to be consistent here :) |
Just wanted to drop by and +1 the My head canon is that we started with JAMstack referring to things with JAM; an actual stack, and now we have the Jamstack which has outgrown having JAM as a constraint. We could just collectively agree all JAMstacks are Jamstacks but not all Jamstacks are JAMstacks. |
if this is the case then it probably should not include
The problem here is that changing from JAM to Jam only serves to introduce further confusion.
This is some galaxy-brain level indirection that amplifies confusion and introduces a further need for explanation of an already confusing concept, which ends up pushing people away rather than bringing them in. Additionally, any jam (as in the thing you put on bread) branding becomes relatively meaningless since it's just a mush of letters rather than the JAM being a separate entity. |
For context, how would y'all describe the architecture in 1-3 sentences? I see the bullets in the OP but curious how you'd explain it simply to a human. As an example, I would say this is a pretty good way of explaining Microservices:
|
Yeah you highlight some clear challenges with the name, @bnb. But we're not talking about changing that name. Especially now, as 5 years after being coined, it is starting to get some real purchase. Naming stuff is hard. But this is the label we've been using. On the site try to summarise concisely with:
|
I definitely understand this and where you're coming from, despite fundamentally disagreeing with it ❤️ |
Ok... this discussion has been open for 3 weeks now, and there has been some really helpful conversation. Thanks to all for weighing in! It was probably a little optimistic to hope that we would all arrive at the exact same conclusion and be 100% decisive and aligned. As different perspectives joined I've personally swayed in both directions. 🙂 But let's wrap this up. It looks like just a little more support for those advocating for "Jamstack". So, this is the path we will take on the jamstack.org site. And we'll work to do that consistently in the content we add, and in the design. My hope is, that even if some opinions differ, the site will be consistent and clear, and all the people arriving fresh to the term and the concept, will have a less confused experience. And that it feels more natural to people when writing the word in materials. Many thanks again. |
Great read! it was interesting to see a variety of perspective. 🍻 👍 |
Good call. Jamstack is the way going forward to bring a wide audience and make it easy to fit into any style guide. JAMstack is our roots. JAMStack (s capitalized) and JamStack are incorrect. |
See jamstack/jamstack.org#279 for reference
See jamstack/jamstack.org#279 for reference
diff --git a/.cache/kvs-node-localstorage/proofdict b/.cache/kvs-node-localstorage/proofdict index 8623550..80fecc7 100644 --- a/.cache/kvs-node-localstorage/proofdict +++ b/.cache/kvs-node-localstorage/proofdict @@ -1 +1 @@ -[{"id":"01BQ92YWWJ1XF356X492WM4GB3","description":"漢字で書かず、ひらがなで書くと読みやすくなります","expected":"かかわらず","patterns":["/関わ?らず/"],"specs":[{"from":"関わらず","to":"かかわらず"},{"from":"関らず","to":"かかわらず"}],"tags":["opinion","表記統一"]},{"id":"01BQ92YYBJK6WW9Y09W7TF1YTT","description":"See http://todomvc.com/","expected":"TodoMVC","patterns":["/todomvc/i"],"specs":[{"from":"todomvc is todo app.","to":"TodoMVC is todo app."}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YWWT86VKCFD2GCM3KWV4","description":"(動詞の場合)漢字を使う","expected":"$1付く","patterns":["/(気が|利子が)つく/"],"specs":[{"from":"気がつく。","to":"気が付く。"},{"from":"利子がつく。","to":"利子が付く。"}],"tags":["opinion","表記統一"]},{"id":"01BQ92YXWR8T1QBP2JSKFH74RK","description":"","expected":"CoffeeScript","patterns":["CoffeScript"],"specs":[{"from":"CoffeScriptからES6","to":"CoffeeScriptからES6"}],"tags":["typo"]},{"id":"01BQ92YW70P4BSGE4ZBMKECATV","description":"","expected":"PostCSS","patterns":["/PostCSS/i"],"specs":[{"from":"postcss","to":"PostCSS"}],"tags":["noun","CSS"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YXWVJ7HG4TDWA45RH297","description":"","expected":"webpack","patterns":["/\\bwebpac(?!k)\\b/"],"specs":[{"from":"webpacのビルド速度改善についてのスライド","to":"webpackのビルド速度改善についてのスライド"}],"tags":["typo"]},{"id":"01BQ92YYSHMN57CX27SAJQT2W0","description":"","expected":"Sauce Labs","patterns":["SauceLabs"],"specs":[],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YXWQ02R8SE1ZZHCG89P5","description":"","expected":"Property","patterns":["/propety/i"],"specs":[{"from":"propety","to":"Property"}],"tags":["typo"]},{"id":"01BQ92YW6Y5KA9YRC4HRPWZTVV","description":"","expected":"Flexbox","patterns":["Fluxbox"],"specs":[{"from":"CSS Fluxboxでは","to":"CSS Flexboxでは"}],"tags":["noun","CSS"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01EKP3RFQ18K47EYH1ZKB5E4R5","description":"https://github.com/GoogleChrome/lighthouse","expected":"Lighthouse","patterns":["/\\bLighthouse\\b/i"],"allows":["{{COMBINATION_WORD}}"],"specs":[{"from":" lighthouse","to":" Lighthouse"},{"from":"lighthouse-cli","to":"lighthouse-cli"},{"from":"Lighthouse analyzes web apps","to":"Lighthouse analyzes web apps"}],"tags":["noun"]},{"id":"01BQ92YYBHGYFTTDANV4RNC3CJ","description":"Should have a space between words. Reference https://github.com/w3c/ServiceWorker","expected":"$1 $2","patterns":["/(service)(worker)/i"],"specs":[{"from":"This is serviceworker?","to":"This is service worker?"},{"from":"ServiceWorker","to":"Service Worker"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01CF6NR1Q7XWC035B9XJXNB852","description":"typo","expected":"$1nimation","patterns":["/(a)nimation/i"],"specs":[{"from":"Animation","to":"Animation"},{"from":"CSS Animation","to":"CSS Animation"},{"from":"CSS animations","to":"CSS animations"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBJENZB6M480KCJ0J99","description":"Reference http://jquery.com/","expected":"jQuery","patterns":["/jquery/i"],"specs":[{"from":"Jquery","to":"jQuery"},{"from":"jquery","to":"jQuery"},{"from":"jquery-ui","to":"jquery-ui"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YZ6Q0Y22BVKAVFC4VV1N","description":"Reference http://ocaml.org/","expected":"OCaml","patterns":["/OCaml/i"],"specs":[{"from":"ocaml","to":"OCaml"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YWWH8TVT2N8FT61TTDNH","description":"ひらがなで書かず、漢字で書くと読みやすくなります","expected":"$1中","patterns":["/(その)なか/","/(世界|日)じゅう/"],"specs":[],"tags":["opinion","表記統一"]},{"id":"01BQ92YWJG32Z679PF9CHJJD5R","description":"","expected":"$1デフォルトで有効$2","patterns":["/(?:(が)デフォルト有効)|(?:デフォルト有効(に))/"],"specs":[],"tags":["opinion","jser.info"]},{"id":"01BQ92YYSD9K713DCXTFGNDENS","description":"Reference https://leanpub.com/","expected":"Leanpub","patterns":["/leanpub/i"],"specs":[{"from":"leanpub","to":"Leanpub"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01DSDJ2ZNSB644ZB0SD53C62X5","description":"","expected":"Archive","patterns":["Archieve"],"allows":[],"specs":[{"from":"HTTP Archieve","to":"HTTP Archive"}],"tags":["noun"]},{"id":"01BQ92YYBJXRCA80R6BCA4SS7K","description":"Angular(2.0~)","expected":"Angular","patterns":["/angular/i"],"specs":[{"from":"angular","to":"Angular"},{"from":"angulardart","to":"angulardart"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YXWVY5EFQNE4ZV8K0HS5","description":"","expected":"package.json","patterns":["packge.json"],"specs":[],"tags":["typo"]},{"id":"01EKJAAAXCZR005PDSTRVT24QZ","description":"Jamstackに統一された https://github.com/jamstack/jamstack.org/issues/279","expected":"Jamstack","patterns":["/\\bJAMStack\\b/i"],"allows":[],"specs":[{"from":"Jamstack","to":"Jamstack"},{"from":"JAMStack is old word","to":"Jamstack is old word"},{"from":"jamjasmstack","to":"jamjasmstack"}],"tags":["noun"]},{"id":"01BQ92YYSHHTGFD78FF7NB4RX9","description":"","expected":"HTML5 Rocks","patterns":["/HTML5Rocks/i","/HTML5Rock/i"],"specs":[{"from":"HTML5Rockに現在公開されている翻訳記事のまとめ","to":"HTML5 Rocksに現在公開されている翻訳記事のまとめ"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYSHHRNMZPY2VG4991B7","description":"","expected":"Travis CI","patterns":["/TravisCI/i"],"specs":[{"from":"TravisCI is a service","to":"Travis CI is a service"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBGZPBHMB3DMMXMJ0CJ","description":"","expected":"ES.next","patterns":["ES next"],"specs":[{"from":"ES nextでは","to":"ES.nextでは"}],"tags":["JavaScript"]},{"id":"01BQ92YYBGWJZC59XKSNA53X2C","description":"Reference https://www.w3.org/TR/webstorage/","expected":"localStorage","patterns":["localstorage","local storage"],"specs":[{"from":"localstorage is a parts of webstorage","to":"localStorage is a parts of webstorage"},{"from":"local storage is a parts of webstorage","to":"localStorage is a parts of webstorage"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBEFBXEHH8T8HC8RCRD","description":"Reference https://www.ecma-international.org/publications/standards/Ecma-262.htm","expected":"ECMAScript $1","patterns":["/ECMAScript([0-9]+)/i","/ECMA Script([0-9]+)/i"],"specs":[{"from":"ECMASCRIPT5","to":"ECMAScript 5"},{"from":"ecmascript2015","to":"ECMAScript 2015"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BSADQQDT7DEBJT25555YCQ14","description":"Reference https://www.mysql.com/","expected":"MySQL","patterns":["/mysql/i"],"specs":[{"from":"mysql is a database.","to":"MySQL is a database."},{"from":"Oracle mysql","to":"Oracle MySQL"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BW0P1BD0VKQQMZ4E947WVMJ1","description":"See https://developer.mozilla.org/en-US/Add-ons/WebExtensions/What_are_WebExtensions","expected":"WebExtension$1","patterns":["/Web Extension(s)?/"],"specs":[{"from":"Web Extension","to":"WebExtension"},{"from":"Extensions for Firefox are built using WebExtensions APIs","to":"Extensions for Firefox are built using WebExtensions APIs"},{"from":"WebExtension APIs are designed to be compatible with Chrome and Opera extensions","to":"WebExtension APIs are designed to be compatible with Chrome and Opera extensions"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBGNAKFHY1TFA9Z3KTC","description":"Reference https://w3c.github.io/webcomponents/explainer/","expected":"Web Components","patterns":["/WebComponents/i","/web components/i"],"specs":[{"from":"WebComponentsについてのWeeklyメールマガジン","to":"Web ComponentsについてのWeeklyメールマガジン"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YXWVMAMKQ3VK2DNYNCCP","description":"Customのtypoです","expected":"Custom","patterns":["/Custome\\b/i"],"specs":[{"from":"WebVRをCustome Elementのタグで書く","to":"WebVRをCustom Elementのタグで書く"}],"tags":["typo"]},{"id":"01BQ92YZ6QD58PVYY3FE7QD2S5","description":"Reference http://www.seleniumhq.org/projects/webdriver/","expected":"WebDriver","patterns":["/WebDriver/i","/Web Driver/i"],"specs":[{"from":"Web Driver is designed in a simpler and more concise programming interface","to":"WebDriver is designed in a simpler and more concise programming interface"},{"from":"webdriver is designed in a simpler and more concise programming interface","to":"WebDriver is designed in a simpler and more concise programming interface"},{"from":"WebdriverIO is OK.","to":"WebdriverIO is OK."}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01C1VCJNDQW7RN25S24KNP9V4M","description":"A typo Chromium","expected":"$1hromium","patterns":["/(C)hronium/i"],"specs":[{"from":"Chrome is Chronium","to":"Chrome is Chromium"},{"from":"Chrome is chronium","to":"Chrome is chromium"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBH2EZP1E4KVNDMXYV9","description":"Pointer Eventsに統一","expected":"Pointer Events","patterns":["/pointer event/i","/pointer events/i"],"specs":[{"from":"Pointer Events","to":"Pointer Events"},{"from":"MSEdgeの対応、pointer eventsなど対応、","to":"MSEdgeの対応、Pointer Eventsなど対応、"},{"from":"MSEdgeの対応、pointer eventなど対応、","to":"MSEdgeの対応、Pointer Eventsなど対応、"},{"from":"pointer-events","to":"pointer-events"}],"tags":["JavaScript","noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YXWTV260J4A7W8TSWEXH","description":"","expected":"Workaround","patterns":["Workaound"],"specs":[{"from":"iOS7と8のquerySelectorバグの対処(Workaound)","to":"iOS7と8のquerySelectorバグの対処(Workaround)"}],"tags":["typo"]},{"id":"01BQ92YYBGSXM66TN1ZSJH177M","description":"","expected":"ES6 Classes","patterns":["/\\bES6 classes\\b/i"],"specs":[{"from":"ES6 classes","to":"ES6 Classes"}],"tags":["JavaScript"]},{"id":"01DTET96387SQ3VYTXHYSX5BYS","description":"WebAssembly (abbreviated Wasm) https://webassembly.org/","expected":"Wasm","patterns":["/wasm/i"],"allows":[],"specs":[{"from":"wasm","to":"Wasm"},{"from":"WAsm","to":"Wasm"},{"from":"WebAssembly (abbreviated Wasm) ","to":"WebAssembly (abbreviated Wasm) "}],"tags":["noun"]},{"id":"01BQ92YYSF66CHGRP4MX5X6P0Q","description":"O'reilly is OK. But oreilly is not OK","expected":"Oreilly","patterns":["/Oreilly/i"],"specs":[{"from":"oreilly","to":"Oreilly"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YXWQDKGCA9W74SKW7VST","description":"","expected":"Arrow Function","patterns":["Array Function"],"specs":[],"tags":["typo"]},{"id":"01BQ92YYBJBBNRPR2WYHMDYPPG","description":"Reference http://source-map.github.io/","expected":"Source Map","patterns":["/Source Map/i","/SourceMap/i"],"specs":[{"from":"多段SourceMapに対応","to":"多段Source Mapに対応"},{"from":"SourceMap","to":"Source Map"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBGNT2ZA7SCBGZP4XW8","description":"Reference https://www.w3.org/TR/webstorage/","expected":"sessionStorage","patterns":["sessionstorage","session storage"],"specs":[{"from":"sessionstorage is a parts of webstorage","to":"sessionStorage is a parts of webstorage"},{"from":"session storage is a parts of webstorage","to":"sessionStorage is a parts of webstorage"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01EF8QSDGRB63DFJ54B68AKN7J","description":"webpack is lower-case https://webpack.js.org/","expected":"webpack","patterns":["/\\bwebpack\\b/i"],"allows":[],"specs":[{"from":"webpack","to":"webpack"},{"from":"WebPack","to":"webpack"},{"from":"BuildWebPack is OK","to":"BuildWebPack is OK"}],"tags":["noun"]},{"id":"01D1SNYB7AA69NTAEBT1X651RB","description":"Brotliはbr","expected":"$1rotli","patterns":["/\\b(b)rottli\\b/i"],"allows":[],"specs":[{"from":"brottli compression","to":"brotli compression"},{"from":"brottli圧縮","to":"brotli圧縮"},{"from":"BrotliはbrotliでOK","to":"BrotliはbrotliでOK"}],"tags":["noun"]},{"id":"01BQ92YXWVT5PGRGQCH1ZZ6S7V","description":"","expected":"operator","patterns":["oeprator"],"specs":[],"tags":["typo"]},{"id":"01BQ92YZ6NT1NACB4X0DC8XHFH","description":"","expected":"$1 EAP","patterns":["/([0-9\\.]+)EAP/"],"specs":[],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBHB83ZNFWK5WBA58B7","description":"JavaScript is not Java Script","expected":"JavaScript","patterns":["/javascript/i","/Java Script/i"],"specs":[{"from":"javascript","to":"JavaScript"},{"from":"java script","to":"JavaScript"},{"from":"Java script","to":"JavaScript"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBHA4FM6A82V2ZT0V91","description":"Reference https://www.w3.org/TR/html-imports/","expected":"HTML Imports","patterns":["/HTML Import/i"],"specs":[{"from":"HTML import","to":"HTML Imports"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBJDYYAR7DFH7M57G1P","description":"AngularJS(1.x)はJSを付けます","expected":"AngularJS","patterns":["/Angular\\.js/i","/angularjs/i"],"specs":[{"from":"Angular.js","to":"AngularJS"}],"tags":["JavaScript"]},{"id":"01BQ92YYBGQBRYXEZK5ZRRK1WW","description":"","expected":"Ecma標準","patterns":["ECMA標準"],"specs":[],"tags":["JavaScript"]},{"id":"01BQ92YYBH2H42AT29Y4BP84FA","description":"Reference https://www.w3.org/TR/touch-events/","expected":"Touch Events","patterns":["/Touch Event/i","/Touch Events/i"],"specs":[{"from":"Touch Event、Fullscreen APIなどのサポートなど","to":"Touch Events、Fullscreen APIなどのサポートなど"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBJCY50GECA6CQH874F","description":"Reference https://www.emberjs.com/","expected":"Ember.js","patterns":["/Ember\\.js/i"],"specs":[{"from":"ember.js","to":"Ember.js"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YZ6R35HCYAZGN18RB35E","description":"Reference https://www.microsoft.com/windows","expected":"Windows $1","patterns":["/Windows (\\d+)/i"],"specs":[{"from":"OK windows","to":"OK windows"},{"from":"windows 10","to":"Windows 10"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YZ6QR8RJKA5Y8W2F9NMY","description":"Reference https://webkit.org/","expected":"WebKit","patterns":["/webkit/i"],"specs":[{"from":"これはwebkitです","to":"これはWebKitです"},{"from":"XXXwebkit","to":"XXXwebkit"},{"from":"node-webkit","to":"node-webkit"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBJP9EDR7KS993CMQAR","description":"","expected":"Virtual DOM","patterns":["/VirtualDOM/i"],"specs":[{"from":"VirtualDOM is virtual dom object","to":"Virtual DOM is virtual dom object"}],"tags":["noun","opinion","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YXWFVPNRGMBZ3RZNN1RD","description":"","expected":"Foundation","patterns":["Fundation"],"specs":[{"from":"Fundation","to":"Foundation"}],"tags":["typo"]},{"id":"01BQ92YZ6QCTPXGPWWJ5NWT6NC","description":"","expected":"Virtual Machine","patterns":["Virtual machine"],"specs":[{"from":"MSEdgeが使えるWindows 10のVirtual machine(VM)が公開された","to":"MSEdgeが使えるWindows 10のVirtual Machine(VM)が公開された"}],"tags":["noun","opinion"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQMSTDZCWH8P81E7PBG9BMQS","description":"importのtypoです","expected":"Import","patterns":["Impport"],"specs":[{"from":"Dynamic Impport","to":"Dynamic Import"},{"from":"Impporter","to":"Importer"}],"tags":["typo"]},{"id":"01BQ92YXWTM3A3CG10MT3FCD55","description":"","expected":"Performance","patterns":["/peformance/i"],"specs":[{"from":"ブラウザ上でどうやって計測するかやPeformance Timelineなどの仕様について","to":"ブラウザ上でどうやって計測するかやPerformance Timelineなどの仕様について"}],"tags":["typo"]},{"id":"01BQ92YYBH4NNWB305Y1TD7B6N","description":"Reference https://www.w3.org/TR/webaudio/","expected":"Web Audio API","patterns":["/WebAudio API/i","/Web AudioAPI/i","/Web Audio API/i"],"specs":[{"from":"All scheduled times in the WebAudio API are relative to the value of currentTime.","to":"All scheduled times in the Web Audio API are relative to the value of currentTime."}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBJTDA6WF56ZE9PKP8F","description":"Reference http://underscorejs.org/","expected":"Underscore.js","patterns":["/underscore.js/i"],"specs":[],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]}] \ No newline at end of file +[{"id":"01EF8QSDGRB63DFJ54B68AKN7J","description":"webpack is lower-case https://webpack.js.org/","expected":"webpack","patterns":["/\\bwebpack\\b/i"],"allows":[],"specs":[{"from":"webpack","to":"webpack"},{"from":"WebPack","to":"webpack"},{"from":"BuildWebPack is OK","to":"BuildWebPack is OK"}],"tags":["noun"]},{"id":"01BQ92YWWKN8RQSJ5QS25W0VGE","description":"","expected":"およそ","patterns":["凡そ"],"specs":[],"tags":["opinion","表記統一"]},{"id":"01BQ92YYBHA4FM6A82V2ZT0V91","description":"Reference https://www.w3.org/TR/html-imports/","expected":"HTML Imports","patterns":["/HTML Import/i"],"specs":[{"from":"HTML import","to":"HTML Imports"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YWWJW5M546Z0VEDHG0RZ","description":"漢字で書かず、ひらがなで書くと読みやすくなります","expected":"$1あとで","patterns":["/(して|した|、)後で/"],"specs":[{"from":"して後で","to":"してあとで"}],"tags":["opinion","表記統一"]},{"id":"01BQ92YWWH8TVT2N8FT61TTDNH","description":"ひらがなで書かず、漢字で書くと読みやすくなります","expected":"$1中","patterns":["/(その)なか/","/(世界|日)じゅう/"],"specs":[],"tags":["opinion","表記統一"]},{"id":"01BQ92YYBGSXM66TN1ZSJH177M","description":"","expected":"ES6 Classes","patterns":["/\\bES6 classes\\b/i"],"specs":[{"from":"ES6 classes","to":"ES6 Classes"}],"tags":["JavaScript"]},{"id":"01BQ92YXWQ02R8SE1ZZHCG89P5","description":"","expected":"Property","patterns":["/propety/i"],"specs":[{"from":"propety","to":"Property"}],"tags":["typo"]},{"id":"01BQ92YXWQDKGCA9W74SKW7VST","description":"","expected":"Arrow Function","patterns":["Array Function"],"specs":[],"tags":["typo"]},{"id":"01BQ92YYBGWJZC59XKSNA53X2C","description":"Reference https://www.w3.org/TR/webstorage/","expected":"localStorage","patterns":["localstorage","local storage"],"specs":[{"from":"localstorage is a parts of webstorage","to":"localStorage is a parts of webstorage"},{"from":"local storage is a parts of webstorage","to":"localStorage is a parts of webstorage"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBEFBXEHH8T8HC8RCRD","description":"Reference https://www.ecma-international.org/publications/standards/Ecma-262.htm","expected":"ECMAScript $1","patterns":["/ECMAScript([0-9]+)/i","/ECMA Script([0-9]+)/i"],"specs":[{"from":"ECMASCRIPT5","to":"ECMAScript 5"},{"from":"ecmascript2015","to":"ECMAScript 2015"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYSHMN57CX27SAJQT2W0","description":"","expected":"Sauce Labs","patterns":["SauceLabs"],"specs":[],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YXWVY5EFQNE4ZV8K0HS5","description":"","expected":"package.json","patterns":["packge.json"],"specs":[],"tags":["typo"]},{"id":"01BQ92YYBGNAKFHY1TFA9Z3KTC","description":"Reference https://w3c.github.io/webcomponents/explainer/","expected":"Web Components","patterns":["/WebComponents/i","/web components/i"],"specs":[{"from":"WebComponentsについてのWeeklyメールマガジン","to":"Web ComponentsについてのWeeklyメールマガジン"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YZ6Q0Y22BVKAVFC4VV1N","description":"Reference http://ocaml.org/","expected":"OCaml","patterns":["/OCaml/i"],"specs":[{"from":"ocaml","to":"OCaml"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YZ6QD58PVYY3FE7QD2S5","description":"Reference http://www.seleniumhq.org/projects/webdriver/","expected":"WebDriver","patterns":["/WebDriver/i","/Web Driver/i"],"specs":[{"from":"Web Driver is designed in a simpler and more concise programming interface","to":"WebDriver is designed in a simpler and more concise programming interface"},{"from":"webdriver is designed in a simpler and more concise programming interface","to":"WebDriver is designed in a simpler and more concise programming interface"},{"from":"WebdriverIO is OK.","to":"WebdriverIO is OK."}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYSHHRNMZPY2VG4991B7","description":"","expected":"Travis CI","patterns":["/TravisCI/i"],"specs":[{"from":"TravisCI is a service","to":"Travis CI is a service"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBHGYFTTDANV4RNC3CJ","description":"Should have a space between words. Reference https://github.com/w3c/ServiceWorker","expected":"$1 $2","patterns":["/(service)(worker)/i"],"specs":[{"from":"This is serviceworker?","to":"This is service worker?"},{"from":"ServiceWorker","to":"Service Worker"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBHB83ZNFWK5WBA58B7","description":"JavaScript is not Java Script","expected":"JavaScript","patterns":["/javascript/i","/Java Script/i"],"specs":[{"from":"javascript","to":"JavaScript"},{"from":"java script","to":"JavaScript"},{"from":"Java script","to":"JavaScript"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBJK6WW9Y09W7TF1YTT","description":"See http://todomvc.com/","expected":"TodoMVC","patterns":["/todomvc/i"],"specs":[{"from":"todomvc is todo app.","to":"TodoMVC is todo app."}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQMSTDZCWH8P81E7PBG9BMQS","description":"importのtypoです","expected":"Import","patterns":["Impport"],"specs":[{"from":"Dynamic Impport","to":"Dynamic Import"},{"from":"Impporter","to":"Importer"}],"tags":["typo"]},{"id":"01BQ92YW6Y5KA9YRC4HRPWZTVV","description":"","expected":"Flexbox","patterns":["Fluxbox"],"specs":[{"from":"CSS Fluxboxでは","to":"CSS Flexboxでは"}],"tags":["noun","CSS"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01EKP3RFQ18K47EYH1ZKB5E4R5","description":"https://github.com/GoogleChrome/lighthouse","expected":"Lighthouse","patterns":["/\\bLighthouse\\b/i"],"allows":["{{COMBINATION_WORD}}"],"specs":[{"from":" lighthouse","to":" Lighthouse"},{"from":"lighthouse-cli","to":"lighthouse-cli"},{"from":"Lighthouse analyzes web apps","to":"Lighthouse analyzes web apps"}],"tags":["noun"]},{"id":"01BW0P1BD0VKQQMZ4E947WVMJ1","description":"See https://developer.mozilla.org/en-US/Add-ons/WebExtensions/What_are_WebExtensions","expected":"WebExtension$1","patterns":["/Web Extension(s)?/"],"specs":[{"from":"Web Extension","to":"WebExtension"},{"from":"Extensions for Firefox are built using WebExtensions APIs","to":"Extensions for Firefox are built using WebExtensions APIs"},{"from":"WebExtension APIs are designed to be compatible with Chrome and Opera extensions","to":"WebExtension APIs are designed to be compatible with Chrome and Opera extensions"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01CF6NR1Q7XWC035B9XJXNB852","description":"typo","expected":"$1nimation","patterns":["/(a)nimation/i"],"specs":[{"from":"Animation","to":"Animation"},{"from":"CSS Animation","to":"CSS Animation"},{"from":"CSS animations","to":"CSS animations"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBJP9EDR7KS993CMQAR","description":"","expected":"Virtual DOM","patterns":["/VirtualDOM/i"],"specs":[{"from":"VirtualDOM is virtual dom object","to":"Virtual DOM is virtual dom object"}],"tags":["noun","opinion","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YXWVJ7HG4TDWA45RH297","description":"","expected":"webpack","patterns":["/\\bwebpac(?!k)\\b/"],"specs":[{"from":"webpacのビルド速度改善についてのスライド","to":"webpackのビルド速度改善についてのスライド"}],"tags":["typo"]},{"id":"01BQ92YYBJENZB6M480KCJ0J99","description":"Reference http://jquery.com/","expected":"jQuery","patterns":["/jquery/i"],"specs":[{"from":"Jquery","to":"jQuery"},{"from":"jquery","to":"jQuery"},{"from":"jquery-ui","to":"jquery-ui"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YXWVT5PGRGQCH1ZZ6S7V","description":"","expected":"operator","patterns":["oeprator"],"specs":[],"tags":["typo"]},{"id":"01BQ92YYBH2H42AT29Y4BP84FA","description":"Reference https://www.w3.org/TR/touch-events/","expected":"Touch Events","patterns":["/Touch Event/i","/Touch Events/i"],"specs":[{"from":"Touch Event、Fullscreen APIなどのサポートなど","to":"Touch Events、Fullscreen APIなどのサポートなど"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYSHHTGFD78FF7NB4RX9","description":"","expected":"HTML5 Rocks","patterns":["/HTML5Rocks/i","/HTML5Rock/i"],"specs":[{"from":"HTML5Rockに現在公開されている翻訳記事のまとめ","to":"HTML5 Rocksに現在公開されている翻訳記事のまとめ"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YZ6NT1NACB4X0DC8XHFH","description":"","expected":"$1 EAP","patterns":["/([0-9\\.]+)EAP/"],"specs":[],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YXWVMAMKQ3VK2DNYNCCP","description":"Customのtypoです","expected":"Custom","patterns":["/Custome\\b/i"],"specs":[{"from":"WebVRをCustome Elementのタグで書く","to":"WebVRをCustom Elementのタグで書く"}],"tags":["typo"]},{"id":"01EKJAAAXCZR005PDSTRVT24QZ","description":"Jamstackに統一された https://github.com/jamstack/jamstack.org/issues/279","expected":"Jamstack","patterns":["/\\bJAMStack\\b/i"],"allows":[],"specs":[{"from":"Jamstack","to":"Jamstack"},{"from":"JAMStack is old word","to":"Jamstack is old word"},{"from":"jamjasmstack","to":"jamjasmstack"}],"tags":["noun"]},{"id":"01BQ92YYBGNT2ZA7SCBGZP4XW8","description":"Reference https://www.w3.org/TR/webstorage/","expected":"sessionStorage","patterns":["sessionstorage","session storage"],"specs":[{"from":"sessionstorage is a parts of webstorage","to":"sessionStorage is a parts of webstorage"},{"from":"session storage is a parts of webstorage","to":"sessionStorage is a parts of webstorage"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YXWR8T1QBP2JSKFH74RK","description":"","expected":"CoffeeScript","patterns":["CoffeScript"],"specs":[{"from":"CoffeScriptからES6","to":"CoffeeScriptからES6"}],"tags":["typo"]},{"id":"01BQ92YZ6QR8RJKA5Y8W2F9NMY","description":"Reference https://webkit.org/","expected":"WebKit","patterns":["/webkit/i"],"specs":[{"from":"これはwebkitです","to":"これはWebKitです"},{"from":"XXXwebkit","to":"XXXwebkit"},{"from":"node-webkit","to":"node-webkit"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBJCY50GECA6CQH874F","description":"Reference https://www.emberjs.com/","expected":"Ember.js","patterns":["/Ember\\.js/i"],"specs":[{"from":"ember.js","to":"Ember.js"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBGQBRYXEZK5ZRRK1WW","description":"","expected":"Ecma標準","patterns":["ECMA標準"],"specs":[],"tags":["JavaScript"]},{"id":"01D1SNYB7AA69NTAEBT1X651RB","description":"Brotliはbr","expected":"$1rotli","patterns":["/\\b(b)rottli\\b/i"],"allows":[],"specs":[{"from":"brottli compression","to":"brotli compression"},{"from":"brottli圧縮","to":"brotli圧縮"},{"from":"BrotliはbrotliでOK","to":"BrotliはbrotliでOK"}],"tags":["noun"]},{"id":"01C1VCJNDQW7RN25S24KNP9V4M","description":"A typo Chromium","expected":"$1hromium","patterns":["/(C)hronium/i"],"specs":[{"from":"Chrome is Chronium","to":"Chrome is Chromium"},{"from":"Chrome is chronium","to":"Chrome is chromium"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYSD9K713DCXTFGNDENS","description":"Reference https://leanpub.com/","expected":"Leanpub","patterns":["/leanpub/i"],"specs":[{"from":"leanpub","to":"Leanpub"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YWJG32Z679PF9CHJJD5R","description":"","expected":"$1デフォルトで有効$2","patterns":["/(?:(が)デフォルト有効)|(?:デフォルト有効(に))/"],"specs":[],"tags":["opinion","jser.info"]},{"id":"01BQ92YZ6QCTPXGPWWJ5NWT6NC","description":"","expected":"Virtual Machine","patterns":["Virtual machine"],"specs":[{"from":"MSEdgeが使えるWindows 10のVirtual machine(VM)が公開された","to":"MSEdgeが使えるWindows 10のVirtual Machine(VM)が公開された"}],"tags":["noun","opinion"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YZ6R35HCYAZGN18RB35E","description":"Reference https://www.microsoft.com/windows","expected":"Windows $1","patterns":["/Windows (\\d+)/i"],"specs":[{"from":"OK windows","to":"OK windows"},{"from":"windows 10","to":"Windows 10"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YXWFVPNRGMBZ3RZNN1RD","description":"","expected":"Foundation","patterns":["Fundation"],"specs":[{"from":"Fundation","to":"Foundation"}],"tags":["typo"]},{"id":"01F0W5YS57VWFW3DAP3EC92D6Y","description":"https://github.com/sveltejs/kit","expected":"SvelteKit","patterns":["/SveleteKit/i"],"allows":[],"specs":[{"from":"SveleteKit","to":"SvelteKit"},{"from":"SvelteKit","to":"SvelteKit"}],"tags":["noun"]},{"id":"01DSDJ2ZNSB644ZB0SD53C62X5","description":"","expected":"Archive","patterns":["Archieve"],"allows":[],"specs":[{"from":"HTTP Archieve","to":"HTTP Archive"}],"tags":["noun"]},{"id":"01BQ92YYBJBBNRPR2WYHMDYPPG","description":"Reference http://source-map.github.io/","expected":"Source Map","patterns":["/Source Map/i","/SourceMap/i"],"specs":[{"from":"多段SourceMapに対応","to":"多段Source Mapに対応"},{"from":"SourceMap","to":"Source Map"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBJDYYAR7DFH7M57G1P","description":"AngularJS(1.x)はJSを付けます","expected":"AngularJS","patterns":["/Angular\\.js/i","/angularjs/i"],"specs":[{"from":"Angular.js","to":"AngularJS"}],"tags":["JavaScript"]},{"id":"01BQ92YYBH2EZP1E4KVNDMXYV9","description":"Pointer Eventsに統一","expected":"Pointer Events","patterns":["/pointer event/i","/pointer events/i"],"specs":[{"from":"Pointer Events","to":"Pointer Events"},{"from":"MSEdgeの対応、pointer eventsなど対応、","to":"MSEdgeの対応、Pointer Eventsなど対応、"},{"from":"MSEdgeの対応、pointer eventなど対応、","to":"MSEdgeの対応、Pointer Eventsなど対応、"},{"from":"pointer-events","to":"pointer-events"}],"tags":["JavaScript","noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YXWTM3A3CG10MT3FCD55","description":"","expected":"Performance","patterns":["/peformance/i"],"specs":[{"from":"ブラウザ上でどうやって計測するかやPeformance Timelineなどの仕様について","to":"ブラウザ上でどうやって計測するかやPerformance Timelineなどの仕様について"}],"tags":["typo"]},{"id":"01BQ92YYBJTDA6WF56ZE9PKP8F","description":"Reference http://underscorejs.org/","expected":"Underscore.js","patterns":["/underscore.js/i"],"specs":[],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01F0W5YS57VWFW3DAP3EC92D6Z","description":"https://github.com/sveltejs","expected":"$1velte","patterns":["/(s)velete/i"],"allows":[],"specs":[{"from":"svelete","to":"svelte"},{"from":"Svelete","to":"Svelte"}],"tags":["noun"]},{"id":"01BQ92YXWTV260J4A7W8TSWEXH","description":"","expected":"Workaround","patterns":["Workaound"],"specs":[{"from":"iOS7と8のquerySelectorバグの対処(Workaound)","to":"iOS7と8のquerySelectorバグの対処(Workaround)"}],"tags":["typo"]},{"id":"01BQ92YYBH4NNWB305Y1TD7B6N","description":"Reference https://www.w3.org/TR/webaudio/","expected":"Web Audio API","patterns":["/WebAudio API/i","/Web AudioAPI/i","/Web Audio API/i"],"specs":[{"from":"All scheduled times in the WebAudio API are relative to the value of currentTime.","to":"All scheduled times in the Web Audio API are relative to the value of currentTime."}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01DTET96387SQ3VYTXHYSX5BYS","description":"WebAssembly (abbreviated Wasm) https://webassembly.org/","expected":"Wasm","patterns":["/wasm/i"],"allows":[],"specs":[{"from":"wasm","to":"Wasm"},{"from":"WAsm","to":"Wasm"},{"from":"WebAssembly (abbreviated Wasm) ","to":"WebAssembly (abbreviated Wasm) "}],"tags":["noun"]},{"id":"01BQ92YYSF66CHGRP4MX5X6P0Q","description":"O'reilly is OK. But oreilly is not OK","expected":"Oreilly","patterns":["/Oreilly/i"],"specs":[{"from":"oreilly","to":"Oreilly"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBJXRCA80R6BCA4SS7K","description":"Angular(2.0~)","expected":"Angular","patterns":["/angular/i"],"specs":[{"from":"angular","to":"Angular"},{"from":"angulardart","to":"angulardart"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YW70P4BSGE4ZBMKECATV","description":"","expected":"PostCSS","patterns":["/PostCSS/i"],"specs":[{"from":"postcss","to":"PostCSS"}],"tags":["noun","CSS"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBGZPBHMB3DMMXMJ0CJ","description":"","expected":"ES.next","patterns":["ES next"],"specs":[{"from":"ES nextでは","to":"ES.nextでは"}],"tags":["JavaScript"]},{"id":"01BSADQQDT7DEBJT25555YCQ14","description":"Reference https://www.mysql.com/","expected":"MySQL","patterns":["/mysql/i"],"specs":[{"from":"mysql is a database.","to":"MySQL is a database."},{"from":"Oracle mysql","to":"Oracle MySQL"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]}] \ No newline at end of file diff --git a/.cache/kvs-node-localstorage/proofdict-lastUpdated b/.cache/kvs-node-localstorage/proofdict-lastUpdated index 9f14393..7bf3569 100644 --- a/.cache/kvs-node-localstorage/proofdict-lastUpdated +++ b/.cache/kvs-node-localstorage/proofdict-lastUpdated @@ -1 +1 @@ -1615464514507 \ No newline at end of file +1616276741870 \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index bc775b2..acfdb6e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -22,18 +22,31 @@ long "^4.0.0" "@apollographql/apollo-tools@^0.4.3": - version "0.4.8" - resolved "https://registry.yarnpkg.com/@apollographql/apollo-tools/-/apollo-tools-0.4.8.tgz#d81da89ee880c2345eb86bddb92b35291f6135ed" - integrity sha512-W2+HB8Y7ifowcf3YyPHgDI05izyRtOeZ4MqIr7LbTArtmJ0ZHULWpn84SGMW7NAvTV1tFExpHlveHhnXuJfuGA== + version "0.4.9" + resolved "https://registry.yarnpkg.com/@apollographql/apollo-tools/-/apollo-tools-0.4.9.tgz#6abeef4c4586aec8208f71254b329e48ab50c07e" + integrity sha512-M50pk8oo3CGTu4waGOklIX3YtTZoPfWG9K/G9WB8NpyQGA1OwYTiBFv94XqUtKElTDoFwoMXpMQd3Wy5dINvxA== dependencies: - apollo-env "^0.6.5" + apollo-env "^0.6.6" -"@apollographql/[email protected]": - version "1.6.26" - resolved "https://registry.yarnpkg.com/@apollographql/graphql-playground-html/-/graphql-playground-html-1.6.26.tgz#2f7b610392e2a872722912fc342b43cf8d641cb3" - integrity sha512-XAwXOIab51QyhBxnxySdK3nuMEUohhDsHQ5Rbco/V1vjlP75zZ0ZLHD9dTpXTN8uxKxopb2lUvJTq+M4g2Q0HQ== +"@apollographql/[email protected]": + version "1.6.27" + resolved "https://registry.yarnpkg.com/@apollographql/graphql-playground-html/-/graphql-playground-html-1.6.27.tgz#bc9ab60e9445aa2a8813b4e94f152fa72b756335" + integrity sha512-tea2LweZvn6y6xFV11K0KC8ETjmm52mQrW+ezgB2O/aTQf8JGyFmMcRPFgUaQZeHbWdm8iisDC6EjOKsXu0nfw== dependencies: - xss "^1.0.6" + xss "^1.0.8" + +"@apollographql/graphql-upload-8-fork@^8.1.3": + version "8.1.3" + resolved "https://registry.yarnpkg.com/@apollographql/graphql-upload-8-fork/-/graphql-upload-8-fork-8.1.3.tgz#a0d4e0d5cec8e126d78bd915c264d6b90f5784bc" + integrity sha512-ssOPUT7euLqDXcdVv3Qs4LoL4BPtfermW1IOouaqEmj36TpHYDmYDIbKoSQxikd9vtMumFnP87OybH7sC9fJ6g== + dependencies: + "@types/express" "*" + "@types/fs-capacitor" "*" + "@types/koa" "*" + busboy "^0.3.1" + fs-capacitor "^2.0.4" + http-errors "^1.7.3" + object-path "^0.11.4" "@azu/format-text@^1.0.1": version "1.0.1" @@ -48,9 +61,9 @@ "@azu/format-text" "^1.0.1" "@babel/parser@^7.7.5": - version "7.12.5" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.12.5.tgz#b4af32ddd473c0bfa643bd7ff0728b8e71b81ea0" - integrity sha512-FVM6RZQ0mn2KCf1VUED7KepYeUWoVShczewOCfm3nzoBybaih51h+sYVVGthW9M6lPByEPTQf+xm27PBdlpwmQ== + version "7.13.10" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.13.10.tgz#8f8f9bf7b3afa3eabd061f7a5bcdf4fec3c48409" + integrity sha512-0s7Mlrw9uTWkYua7xWr99Wpk2bnGa0ANleKfksYAES8LpWH4gW1OUr42vqKNf0us5UQNfru2wPqMqRITzq/SIQ== "@bahmutov/[email protected]": version "1.0.0" @@ -201,13 +214,13 @@ integrity sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA= "@textlint-ja/textlint-rule-no-insert-dropping-sa@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@textlint-ja/textlint-rule-no-insert-dropping-sa/-/textlint-rule-no-insert-dropping-sa-1.0.1.tgz#ef36819be8301998a764a87bd8ecca2a8e004849" - integrity sha1-7zaBm+gwGZinZKh72OzKKo4ASEk= + version "1.0.2" + resolved "https://registry.yarnpkg.com/@textlint-ja/textlint-rule-no-insert-dropping-sa/-/textlint-rule-no-insert-dropping-sa-1.0.2.tgz#8bfa0407b65dbfb04d2f47544407358aa2dc9feb" + integrity sha512-znlllxSyAeBWhyNBCJaZLvVDyQgFQp159LKU0EKN69qMxLiXy8ZDEjOEAWqPV36a9JXgL6msg5D87110k5PKGg== dependencies: array-find-index "^1.0.2" - kuromojin "^1.3.2" - morpheme-match-all "^1.1.0" + kuromojin "^2.1.1" + morpheme-match-all "^2.0.5" "@textlint-rule/textlint-rule-no-invalid-control-character@^1.2.0": version "1.2.0" @@ -216,44 +229,44 @@ dependencies: execall "^1.0.0" -"@textlint/ast-node-types@^4.0.2", "@textlint/ast-node-types@^4.2.1", "@textlint/ast-node-types@^4.2.4", "@textlint/ast-node-types@^4.2.5", "@textlint/ast-node-types@^4.3.4": - version "4.3.4" - resolved "https://registry.yarnpkg.com/@textlint/ast-node-types/-/ast-node-types-4.3.4.tgz#f6596c45c32c85dc06915c3077bb7686033efd32" - integrity sha512-Grq+vJuNH7HCa278eFeiqJvowrD+onMCoG2ctLyoN+fXYIQGIr1/8fo8AcIg+VM16Kga+N6Y1UWNOWPd8j1nFg== +"@textlint/ast-node-types@^4.0.2", "@textlint/ast-node-types@^4.2.1", "@textlint/ast-node-types@^4.2.4", "@textlint/ast-node-types@^4.2.5", "@textlint/ast-node-types@^4.4.1": + version "4.4.1" + resolved "https://registry.yarnpkg.com/@textlint/ast-node-types/-/ast-node-types-4.4.1.tgz#715dd42b3ec7ff02729fa81cdc9557fe2cdd4f10" + integrity sha512-2QBwlqi2SU83vTHibfdTxGiLdIqR0btNyMGfVl0bwA6FI85HnSYoGFLrdCnq2V0nxpbhuvwzcm2Ja81w0VkMGA== -"@textlint/ast-tester@^2.2.4": - version "2.2.4" - resolved "https://registry.yarnpkg.com/@textlint/ast-tester/-/ast-tester-2.2.4.tgz#f6700b151026eb4d4fa8f00ac76f27c876207639" - integrity sha512-676xpY3/+Xa+tPaiUPaD4sl//+p3xsnSPYLrQjSmHWXX78F3MwAWd/Lek+SCn4wwvf1tCIx0SPtjfOCa6ru8qw== +"@textlint/ast-tester@^2.3.2": + version "2.3.2" + resolved "https://registry.yarnpkg.com/@textlint/ast-tester/-/ast-tester-2.3.2.tgz#f0a951956db0d5a0d444210bcabc8fb334684438" + integrity sha512-4e1kyqsHks5POcQmuh7ITVrU/dbYyRUfQarQbeVRPP271n2HnlgnoYyZ10yV2Sb/Ksw+lQf7DPSnwNewXdCWww== dependencies: - "@textlint/ast-node-types" "^4.3.4" + "@textlint/ast-node-types" "^4.4.1" -"@textlint/ast-traverse@^2.2.5": - version "2.2.5" - resolved "https://registry.yarnpkg.com/@textlint/ast-traverse/-/ast-traverse-2.2.5.tgz#2e4b8e7cfa2d7adfc190f9adc29e7337f893a21e" - integrity sha512-YduGVn7iaUYOfo7TwHO4b0K/qQpj61Ol/M884ck3vetNd0zBxpHO3GpQKW87SZGGtlsBa9v5Suz/yypnlPo3Og== +"@textlint/ast-traverse@^2.3.2": + version "2.3.2" + resolved "https://registry.yarnpkg.com/@textlint/ast-traverse/-/ast-traverse-2.3.2.tgz#733bd6b8527c5254d3eae672076d3869e18bd31f" + integrity sha512-Dt1s/6x0XWhUNFH2rAa9gL6ODtq232BZuBHuHiOg+SrVwzl+VjOfa3fMQ0LoYixGSyDtwqAlksWcC0KyLz0eSw== dependencies: - "@textlint/ast-node-types" "^4.3.4" + "@textlint/ast-node-types" "^4.4.1" -"@textlint/feature-flag@^3.2.4": - version "3.2.4" - resolved "https://registry.yarnpkg.com/@textlint/feature-flag/-/feature-flag-3.2.4.tgz#e1e5bc1077ebae6637d95ee9bba153a4ed889eeb" - integrity sha512-ABhbZ5rfkwa/kTBFxVmeMzE1flcnUjLJ5LTZvOaxH/pElfLLN1J4FEmAZTRCvXGAB498II6nkM2CqcikbKzh6A== +"@textlint/feature-flag@^3.3.2": + version "3.3.2" + resolved "https://registry.yarnpkg.com/@textlint/feature-flag/-/feature-flag-3.3.2.tgz#b6dfe7229249e6684c0b99efecbe44becdab3d43" + integrity sha512-7ErQ/UF0IBAd+PkQNBD7yYCDqL2o6leErMDENSWAgUHWLy5TcHr3Orn7qswtBMW5gIyXW9lh+EpllwLJ5qv35w== dependencies: map-like "^2.0.0" -"@textlint/fixer-formatter@^3.2.5": - version "3.2.5" - resolved "https://registry.yarnpkg.com/@textlint/fixer-formatter/-/fixer-formatter-3.2.5.tgz#32afce76ae53ffcf6ec83ea4a8b2bfc7b94212dd" - integrity sha512-fh6XiLbX9WF8+79g20qb1I85k/Yc9+h7LRccmaLzTBjVQDNYxX5BtfvGsY0Vf5tBZKT2xFZH4eSLH/EWoL3weg== +"@textlint/fixer-formatter@^3.3.2": + version "3.3.2" + resolved "https://registry.yarnpkg.com/@textlint/fixer-formatter/-/fixer-formatter-3.3.2.tgz#3d85b4b64d8d124485b42cee54aa2f9c84ccaa90" + integrity sha512-aTEyH/rHSzxRLrluSjNhDnMSgIYK60J5AAgprKJCkb9h3dDRuNoiJ+BXh5FXVSSm1tGF0d8pu+Ph8OFBgQOchQ== dependencies: - "@textlint/module-interop" "^1.1.4" - "@textlint/types" "^1.4.5" + "@textlint/module-interop" "^1.2.2" + "@textlint/types" "^1.5.2" chalk "^1.1.3" - debug "^4.1.1" - diff "^4.0.1" + debug "^4.3.1" + diff "^4.0.2" is-file "^1.0.0" - string-width "^1.0.1" + string-width "^1.0.2" strip-ansi "^6.0.0" text-table "^0.2.0" try-resolve "^1.0.1" @@ -263,62 +276,63 @@ resolved "https://registry.yarnpkg.com/@textlint/get-config-base-dir/-/get-config-base-dir-2.0.0.tgz#3d0e862e1dd67cf8286ca52f8bd911e10dca2941" integrity sha512-J3cG1pl2llYD4ZaZMe0qVgVaHT8RvT+/SW1FHQ8HRceNalMM9O0Y8iIgtl4GGOx4vMghoIPKFVLASw8P8bJ3ZA== -"@textlint/kernel@^3.3.6": - version "3.3.6" - resolved "https://registry.yarnpkg.com/@textlint/kernel/-/kernel-3.3.6.tgz#aeebf70862bf3369a9d7e62e8956c73717f4f587" - integrity sha512-M2ciQDAo5W6rpRADzGnMXyxhvJ+lnqYG9iHrqmfDQ2MA0VcolWuA37H67/UstqTs3NYaGC7RZkq9FAV//pl30w== - dependencies: - "@textlint/ast-node-types" "^4.3.4" - "@textlint/ast-tester" "^2.2.4" - "@textlint/ast-traverse" "^2.2.5" - "@textlint/feature-flag" "^3.2.4" - "@textlint/types" "^1.4.5" - "@textlint/utils" "^1.1.4" - debug "^4.1.1" +"@textlint/kernel@^3.3.6", "@textlint/kernel@^3.4.2": + version "3.4.2" + resolved "https://registry.yarnpkg.com/@textlint/kernel/-/kernel-3.4.2.tgz#2d2ad545548594c1adeab30d1e410e8116e5fdd9" + integrity sha512-PpxAtvLGI9ewn+Dbt4j0KMfmMM39/AY3cikmZffu59nyTdIymXMeVMEVkpVZTEUk5OlL27RAON9FF+2u+0fshg== + dependencies: + "@textlint/ast-node-types" "^4.4.1" + "@textlint/ast-tester" "^2.3.2" + "@textlint/ast-traverse" "^2.3.2" + "@textlint/feature-flag" "^3.3.2" + "@textlint/source-code-fixer" "^3.4.2" + "@textlint/types" "^1.5.2" + "@textlint/utils" "^1.2.2" + debug "^4.3.1" deep-equal "^1.1.1" map-like "^2.0.0" structured-source "^3.0.2" -"@textlint/linter-formatter@^3.2.5": - version "3.2.5" - resolved "https://registry.yarnpkg.com/@textlint/linter-formatter/-/linter-formatter-3.2.5.tgz#0af6da2e75334d0d6a78e03ea6c06c074faf0fd2" - integrity sha512-oy5RcBWrC2d7r0Mjw/FBH8cvQuOaCB5PeOPG0Pp44Yr5JbIGLXfh84umHQOTCmxfRxw3ccnUfA9wjbxuL8rWOQ== +"@textlint/linter-formatter@^3.3.2": + version "3.3.2" + resolved "https://registry.yarnpkg.com/@textlint/linter-formatter/-/linter-formatter-3.3.2.tgz#b296b095a5026c1bba5da47530a0034c61e7a22c" + integrity sha512-MRa8D1/x6pWycKTwb1QLjtY7GyjgcsYRfV0Gu0Aze5szCa3UDwZSewHycpcAGlIqr8AkqPRfyXi653M47eJ0rA== dependencies: "@azu/format-text" "^1.0.1" "@azu/style-format" "^1.0.0" - "@textlint/module-interop" "^1.1.4" - "@textlint/types" "^1.4.5" - chalk "^1.0.0" - concat-stream "^1.5.1" - debug "^4.1.1" + "@textlint/module-interop" "^1.2.2" + "@textlint/types" "^1.5.2" + chalk "^1.1.3" + concat-stream "^1.6.2" + debug "^4.3.1" is-file "^1.0.0" - js-yaml "^3.2.4" - optionator "^0.8.1" + js-yaml "^3.14.1" + optionator "^0.9.1" pluralize "^2.0.0" - string-width "^1.0.1" + string-width "^1.0.2" strip-ansi "^6.0.0" - table "^3.7.8" + table "^3.8.3" text-table "^0.2.0" try-resolve "^1.0.1" - xml-escape "^1.0.0" + xml-escape "^1.1.0" -"@textlint/markdown-to-ast@^6.2.5": - version "6.2.5" - resolved "https://registry.yarnpkg.com/@textlint/markdown-to-ast/-/markdown-to-ast-6.2.5.tgz#b39d806520ff6507440c3e1d4242b9ec2a6086d0" - integrity sha512-9vlQbylGjnnRGev3yt9ntNy6I9FQH3p+MkbijybKnwobK/msoAX9sThDHOMbGM24PsUHxcDjktDlj2vHN/pwDA== +"@textlint/markdown-to-ast@^6.3.2": + version "6.3.2" + resolved "https://registry.yarnpkg.com/@textlint/markdown-to-ast/-/markdown-to-ast-6.3.2.tgz#ae69c8475073eb2631958b108497d4fea4e0255a" + integrity sha512-uwndF3PRJ48wTVAEDSy0IAEVJg/scxpdZ1r+QKeGuFfdtaGSrtcgROI6qiVU1g/WNyNfQw+DAA7F8HfM+pmleg== dependencies: - "@textlint/ast-node-types" "^4.3.4" - debug "^4.1.1" - remark-frontmatter "^1.2.0" + "@textlint/ast-node-types" "^4.4.1" + debug "^4.3.1" + remark-frontmatter "^1.3.3" remark-parse "^5.0.0" structured-source "^3.0.2" traverse "^0.6.6" - unified "^6.1.6" + unified "^6.2.0" -"@textlint/module-interop@^1.0.1", "@textlint/module-interop@^1.1.4": - version "1.1.4" - resolved "https://registry.yarnpkg.com/@textlint/module-interop/-/module-interop-1.1.4.tgz#d8cb10e5bd1d4d31998c95fb0a52ad8100d6e18a" - integrity sha512-9M3kYG5nBoD2lhp05sqi6fieNU6rBcf+A8Trp+4d8o5uJ4RRsWeRtAQMWM7Tv15onqIITRq7fm3la7xovVB9KA== +"@textlint/module-interop@^1.0.1", "@textlint/module-interop@^1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@textlint/module-interop/-/module-interop-1.2.2.tgz#4f550c592439ec548eed1f90f127005ad339e5ad" + integrity sha512-B8HPS129lOqzEpRcafYl/OJ2TDxfBw1jGfEhebzwt3kGoMd5pQVih+hUIOl+SfAmLWqCDEniaKn0gw1s+hjSXA== "@textlint/regexp-string-matcher@^1.0.2", "@textlint/regexp-string-matcher@^1.1.0": version "1.1.0" @@ -332,38 +346,46 @@ lodash.uniqwith "^4.5.0" to-regex "^3.0.2" -"@textlint/text-to-ast@^3.2.4": - version "3.2.4" - resolved "https://registry.yarnpkg.com/@textlint/text-to-ast/-/text-to-ast-3.2.4.tgz#a1ccb1ad2a561d93291c9f73d9c2376ddb701a5b" - integrity sha512-uIiNg52OdQ3Fn8aOYaV7BLW2QakNsmf4doypIwrW4q+gHYQ3jxdPHHkq6RxuYoO112vO40M3zmAoEZmM1qmPhw== +"@textlint/source-code-fixer@^3.4.2": + version "3.4.2" + resolved "https://registry.yarnpkg.com/@textlint/source-code-fixer/-/source-code-fixer-3.4.2.tgz#ff6cb8fe616a51aa16c302bad1fe515a50289738" + integrity sha512-mSGQNO8is21KcHgDh4S8Cx88r7uU+7xpzHLuEuzhgEZfgwz3+tnpk22TrEjNYe1V1+aseU9iCQegVQQr1wroKQ== dependencies: - "@textlint/ast-node-types" "^4.3.4" + "@textlint/types" "^1.5.2" + debug "^4.3.1" -"@textlint/textlint-plugin-markdown@^5.2.6": - version "5.2.6" - resolved "https://registry.yarnpkg.com/@textlint/textlint-plugin-markdown/-/textlint-plugin-markdown-5.2.6.tgz#93ffc86ee85aa4a48e9f5029bb193a9d1142c231" - integrity sha512-S65wy2npaBLT7pwPPlrN9Pw40hOJsxiW+T6peMJOFEMLRem5qlCIlT+02Wlf0Rrtr6/gKDckpphTUiZT1+xRnQ== +"@textlint/text-to-ast@^3.3.2": + version "3.3.2" + resolved "https://registry.yarnpkg.com/@textlint/text-to-ast/-/text-to-ast-3.3.2.tgz#7e511620e46a41097bbd0b2b7c4954b3cf8175e5" + integrity sha512-+DKAP62ho21KID8IcKy1kP6K+kUZk+Z0MwvS9u2l39J0cK+vX523KI+sA6AXxEhOMDA8zhdIsBf3onGvrAtyhA== dependencies: - "@textlint/markdown-to-ast" "^6.2.5" + "@textlint/ast-node-types" "^4.4.1" -"@textlint/textlint-plugin-text@^4.2.6": - version "4.2.6" - resolved "https://registry.yarnpkg.com/@textlint/textlint-plugin-text/-/textlint-plugin-text-4.2.6.tgz#4c4679e756d120bb30526f0fcdb8248b9a9989b0" - integrity sha512-KCgb5GVjoEDIi37UpQN6kFciiouyATNYrj/JufCeLNJEcVcxSm12EoFRKjpXpXmTOVqZUyGnIDU797z1usAZDw== +"@textlint/textlint-plugin-markdown@^5.3.2": + version "5.3.2" + resolved "https://registry.yarnpkg.com/@textlint/textlint-plugin-markdown/-/textlint-plugin-markdown-5.3.2.tgz#d94a8f339bb2cf00e024f526c39d04d9e25f18bc" + integrity sha512-6Ph7ESKR48tEz5Pnog3PpvF84LU3jkADvr4iBkkVz9vLQt3KbqGnmk8EV94Y0hLEX+UrZKWmH3cJfh6O1Zy/eA== dependencies: - "@textlint/text-to-ast" "^3.2.4" + "@textlint/markdown-to-ast" "^6.3.2" -"@textlint/types@^1.1.2", "@textlint/types@^1.4.5": - version "1.4.5" - resolved "https://registry.yarnpkg.com/@textlint/types/-/types-1.4.5.tgz#11c8e0140256e0ead8014a701a05f267d1132d4e" - integrity sha512-7pA1rdiw1jsDNGwxupMC6fPlRNAHY6fKZ3s+jAY53o6RroOSR+5qO0sAjJ26lsSOhveH8imZzyyD08dk58IVJQ== +"@textlint/textlint-plugin-text@^4.3.2": + version "4.3.2" + resolved "https://registry.yarnpkg.com/@textlint/textlint-plugin-text/-/textlint-plugin-text-4.3.2.tgz#eee6c24f3671167dba7d526ff1f95bfc3255f4b0" + integrity sha512-xnjad0bXaM6ZtgffuFKogHYkzXymUK3VTLP5MGA00kLitADlNUtwXQk82TebkXFcSPRhePU9+2XFipXNQDsg7g== dependencies: - "@textlint/ast-node-types" "^4.3.4" + "@textlint/text-to-ast" "^3.3.2" -"@textlint/utils@^1.1.4": - version "1.1.4" - resolved "https://registry.yarnpkg.com/@textlint/utils/-/utils-1.1.4.tgz#c91fbac2fb302f31b4b8a97f3277e818f219d6a2" - integrity sha512-KmU+kGi7vG5toUhNdLHHPxyVN1mNGcjMVe1tNDEXT1wU/3oqA96bunElrROWHYw5iNt1QVRaIAtNeMVyzyAdVA== +"@textlint/types@^1.1.2", "@textlint/types@^1.4.5", "@textlint/types@^1.5.2": + version "1.5.2" + resolved "https://registry.yarnpkg.com/@textlint/types/-/types-1.5.2.tgz#957f7d8e890b5401cf35e6784c9e331990c20d7c" + integrity sha512-IdS0h2MCzdY+wjM0+qvl8IW/IxhmVFAVrGu5TmIBpJkihIV7WMa3ITFXIVb0oqwnePUmyLBRIVsCtC66E3QbfQ== + dependencies: + "@textlint/ast-node-types" "^4.4.1" + +"@textlint/utils@^1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@textlint/utils/-/utils-1.2.2.tgz#c2166c2433542aa299bb76a6da1a8b21e6a3a7a6" + integrity sha512-7Mqcl9G9YYrPBv5d/tZ2NlWC66hTUpQEQxZEHDMTdF3gPmQUSNRNGjqUR9mhw00Wy8Wo6i3LUWuxwMT6heHNBQ== "@types/accepts@*": version "1.3.5" @@ -441,16 +463,6 @@ "@types/minimatch" "*" "@types/node" "*" -"@types/graphql-upload@^8.0.0": - version "8.0.4" - resolved "https://registry.yarnpkg.com/@types/graphql-upload/-/graphql-upload-8.0.4.tgz#23a8ffb3d2fe6e0ee07e6f16ee9d9d5e995a2f4f" - integrity sha512-0TRyJD2o8vbkmJF8InppFcPVcXKk+Rvlg/xvpHBIndSJYpmDWfmtx/ZAtl4f3jR2vfarpTqYgj8MZuJssSoU7Q== - dependencies: - "@types/express" "*" - "@types/fs-capacitor" "*" - "@types/koa" "*" - graphql "^15.3.0" - "@types/http-assert@*": version "1.5.1" resolved "https://registry.yarnpkg.com/@types/http-assert/-/http-assert-1.5.1.tgz#d775e93630c2469c2f980fc27e3143240335db3b" @@ -474,9 +486,9 @@ "@types/koa" "*" "@types/koa@*": - version "2.11.7" - resolved "https://registry.yarnpkg.com/@types/koa/-/koa-2.11.7.tgz#3b38f3b9faa66315a84890a771d166fb36463100" - integrity sha512-1iXJZZWCePoMe9LGSIPWsu5k5RI4ooXijW78c+nljMn3YbUts8PXoEESu1OeFmrazLPl1l97vTxzwvmH32TWVQ== + version "2.13.1" + resolved "https://registry.yarnpkg.com/@types/koa/-/koa-2.13.1.tgz#e29877a6b5ad3744ab1024f6ec75b8cbf6ec45db" + integrity sha512-Qbno7FWom9nNqu0yHZ6A0+RWt4mrYBhw3wpBAQ3+IuzGcLlfeYkzZrnMq5wsxulN2np8M4KKeUpTodsOsSad5Q== dependencies: "@types/accepts" "*" "@types/content-disposition" "*" @@ -511,19 +523,19 @@ form-data "^3.0.0" "@types/node@*": - version "14.14.22" - resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.22.tgz#0d29f382472c4ccf3bd96ff0ce47daf5b7b84b18" - integrity sha512-g+f/qj/cNcqKkc3tFqlXOYjrmZA+jNBiDzbP3kH+B+otKFqAdPgVTGP1IeKRdMml/aE69as5S4FqtxAbl+LaMw== + version "14.14.33" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.33.tgz#9e4f8c64345522e4e8ce77b334a8aaa64e2b6c78" + integrity sha512-oJqcTrgPUF29oUP8AsUqbXGJNuPutsetaa9kTQAQce5Lx5dTYWV02ScBiT/k1BX/Z7pKeqedmvp39Wu4zR7N7g== "@types/node@^10.1.0": - version "10.17.51" - resolved "https://registry.yarnpkg.com/@types/node/-/node-10.17.51.tgz#639538575befbcf3d3861f95c41de8e47124d674" - integrity sha512-KANw+MkL626tq90l++hGelbl67irOJzGhUJk6a1Bt8QHOeh9tztJx+L0AqttraWKinmZn7Qi5lJZJzx45Gq0dg== + version "10.17.55" + resolved "https://registry.yarnpkg.com/@types/node/-/node-10.17.55.tgz#a147f282edec679b894d4694edb5abeb595fecbd" + integrity sha512-koZJ89uLZufDvToeWO5BrC4CR4OUfHnUz2qoPs/daQH6qq3IN62QFxCTZ+bKaCE0xaoCAJYE4AXre8AbghCrhg== "@types/qs@*": - version "6.9.5" - resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.5.tgz#434711bdd49eb5ee69d90c1d67c354a9a8ecb18b" - integrity sha512-/JHkVHtx/REVG0VVToGRGH2+23hsYLHdyG+GrvoUGlGAd0ErauXDyvHtRI/7H7mzLm+tBCKA7pfcpkQ1lf58iQ== + version "6.9.6" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.6.tgz#df9c3c8b31a247ec315e6996566be3171df4b3b1" + integrity sha512-0/HnwIfW4ki2D8L8c9GVcG5I72s9jP5GSLVF0VIXDW00kmIpA6O33G7a8n59Tmh7Nz0WUC3rSb7PTY/sdW2JzA== "@types/range-parser@*": version "1.2.3" @@ -651,16 +663,28 @@ ansi-regex@^3.0.0: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= +ansi-regex@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" + integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== + ansi-regex@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== -ansi-styles@^2.0.1, ansi-styles@^2.2.1: +ansi-styles@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= +ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + apollo-cache-control@^0.11.6: version "0.11.6" resolved "https://registry.yarnpkg.com/apollo-cache-control/-/apollo-cache-control-0.11.6.tgz#f7bdf924272af47ac474cf3f3f35cfc038cc9485" @@ -677,10 +701,10 @@ apollo-datasource@^0.7.3: apollo-server-caching "^0.5.3" apollo-server-env "^3.0.0" -apollo-env@^0.6.5: - version "0.6.5" - resolved "https://registry.yarnpkg.com/apollo-env/-/apollo-env-0.6.5.tgz#5a36e699d39e2356381f7203493187260fded9f3" - integrity sha512-jeBUVsGymeTHYWp3me0R2CZRZrFeuSZeICZHCeRflHTfnQtlmbSXdy5E0pOyRM9CU4JfQkKDC98S1YglQj7Bzg== +apollo-env@^0.6.6: + version "0.6.6" + resolved "https://registry.yarnpkg.com/apollo-env/-/apollo-env-0.6.6.tgz#d7880805c4e96ee3d4142900a405176a04779438" + integrity sha512-hXI9PjJtzmD34XviBU+4sPMOxnifYrHVmxpjykqI/dUD2G3yTiuRaiQqwRwB2RCdwC1Ug/jBfoQ/NHDTnnjndQ== dependencies: "@types/node-fetch" "2.5.7" core-js "^3.0.1" @@ -688,11 +712,11 @@ apollo-env@^0.6.5: sha.js "^2.4.11" apollo-graphql@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/apollo-graphql/-/apollo-graphql-0.6.0.tgz#37bee7dc853213269137f4c60bfdf2ee28658669" - integrity sha512-BxTf5LOQe649e9BNTPdyCGItVv4Ll8wZ2BKnmiYpRAocYEXAVrQPWuSr3dO4iipqAU8X0gvle/Xu9mSqg5b7Qg== + version "0.6.1" + resolved "https://registry.yarnpkg.com/apollo-graphql/-/apollo-graphql-0.6.1.tgz#d0bf0aff76f445de3da10e08f6974f1bf65f5753" + integrity sha512-ZRXAV+k+hboCVS+FW86FW/QgnDR7gm/xMUwJPGXEbV53OLGuQQdIT0NCYK7AzzVkCfsbb7NJ3mmEclkZY9uuxQ== dependencies: - apollo-env "^0.6.5" + apollo-env "^0.6.6" lodash.sortby "^4.7.0" apollo-link@^1.2.14: @@ -719,14 +743,14 @@ apollo-server-caching@^0.5.3: dependencies: lru-cache "^6.0.0" -apollo-server-core@^2.19.2: - version "2.19.2" - resolved "https://registry.yarnpkg.com/apollo-server-core/-/apollo-server-core-2.19.2.tgz#9a5651be233aceab6b062e82eef4c8072f6ac230" - integrity sha512-liLgLhTIGWZtdQbxuxo3/Yv8j+faKQcI60kOL+uwfByGhoKLZEQp5nqi2IdMK6JXt1VuyKwKu7lTzj02a9S3jA== +apollo-server-core@^2.21.1: + version "2.21.1" + resolved "https://registry.yarnpkg.com/apollo-server-core/-/apollo-server-core-2.21.1.tgz#5494e558e51a64cdd63b00a762ed600c4c73ee10" + integrity sha512-aI+soLaqKMkWxH6l9xvPP1fCuZgD053SK09D79LQfMbJAHHvs3MI90UpydiY/W61K5l8ELl0YsKdqkQg8262nw== dependencies: "@apollographql/apollo-tools" "^0.4.3" - "@apollographql/graphql-playground-html" "1.6.26" - "@types/graphql-upload" "^8.0.0" + "@apollographql/graphql-playground-html" "1.6.27" + "@apollographql/graphql-upload-8-fork" "^8.1.3" "@types/ws" "^7.0.0" apollo-cache-control "^0.11.6" apollo-datasource "^0.7.3" @@ -742,8 +766,7 @@ apollo-server-core@^2.19.2: fast-json-stable-stringify "^2.0.0" graphql-extensions "^0.12.8" graphql-tag "^2.11.0" - graphql-tools "^4.0.0" - graphql-upload "^8.0.2" + graphql-tools "^4.0.8" loglevel "^1.6.7" lru-cache "^6.0.0" sha.js "^2.4.11" @@ -765,13 +788,13 @@ apollo-server-errors@^2.4.2: integrity sha512-FeGxW3Batn6sUtX3OVVUm7o56EgjxDlmgpTLNyWcLb0j6P8mw9oLNyAm3B+deHA4KNdNHO5BmHS2g1SJYjqPCQ== apollo-server-micro@^2.19.2: - version "2.19.2" - resolved "https://registry.yarnpkg.com/apollo-server-micro/-/apollo-server-micro-2.19.2.tgz#3c47eb3199d55977d88746fa075ff248247bedf8" - integrity sha512-tLFdqonWtgLJLa/KCOYvST7ktOVHMhhkmPQ2PLUROxBzvLjY4rF56bwOMkQLGZCljnUagAKYGtMFw6bpgHFRhQ== + version "2.21.1" + resolved "https://registry.yarnpkg.com/apollo-server-micro/-/apollo-server-micro-2.21.1.tgz#1ff4e5e6634f3101c6c1b9ecef3acd6ccf6ba770" + integrity sha512-qLeMjf1hZOpAFRtycRyMUlMsOI9ykZo0Awno693SHlfFYIXCxxcX4e4EtQUrXKJ5P45IxyWs7swue7wSRS5gOA== dependencies: - "@apollographql/graphql-playground-html" "1.6.26" + "@apollographql/graphql-playground-html" "1.6.27" accept "^3.0.2" - apollo-server-core "^2.19.2" + apollo-server-core "^2.21.1" apollo-server-types "^0.6.3" micro "^9.3.2" @@ -819,6 +842,11 @@ [email protected]: resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.0.tgz#583c518199419e0037abb74062c37f8519e575f0" integrity sha512-ZWc51jO3qegGkVh8Hwpv636EkbesNV5ZNQPCtRa+0qytRYPEs9IYT9qITY9buezqUH5uqyzlWLcufrzU2rffdg== [email protected]: + version "4.1.3" + resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" + integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== + argparse@^1.0.7: version "1.0.10" resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" @@ -878,14 +906,6 @@ asynckit@^0.4.0: resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= -babel-runtime@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" - integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4= - dependencies: - core-js "^2.4.0" - regenerator-runtime "^0.11.0" - backo2@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947" @@ -945,13 +965,13 @@ [email protected]: resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg= -call-bind@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.0.tgz#24127054bb3f9bdcb4b1fb82418186072f77b8ce" - integrity sha512-AEXsYIyyDY3MCzbwdhzG3Jx1R0J2wetQyUynn6dYHAO+bg8l1k7jwZtRv4ryryFs7EP+NDlikJlVe59jr0cM2w== +call-bind@^1.0.0, call-bind@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" + integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== dependencies: function-bind "^1.1.1" - get-intrinsic "^1.0.0" + get-intrinsic "^1.0.2" ccount@^1.0.3: version "1.1.0" @@ -1003,10 +1023,10 @@ [email protected]: resolved "https://registry.yarnpkg.com/check-more-types/-/check-more-types-2.24.0.tgz#1420ffb10fd444dcfc79b43891bbfffd32a84600" integrity sha1-FCD/sQ/URNz8ebQ4kbv//TKoRgA= -ci-info@^1.0.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.6.0.tgz#2ca20dbb9ceb32d4524a683303313f0304b1e497" - integrity sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A== +ci-info@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" + integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== clone-regexp@^1.0.0: version "1.0.1" @@ -1036,6 +1056,18 @@ collapse-white-space@^1.0.2: resolved "https://registry.yarnpkg.com/collapse-white-space/-/collapse-white-space-1.0.6.tgz#e63629c0016665792060dbbeb79c42239d2c5287" integrity sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ== +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + combined-stream@^1.0.8: version "1.0.8" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" @@ -1058,19 +1090,17 @@ commandpost@^1.0.1, commandpost@^1.2.1: resolved "https://registry.yarnpkg.com/commandpost/-/commandpost-1.4.0.tgz#89218012089dfc9b67a337ba162f15c88e0f1048" integrity sha512-aE2Y4MTFJ870NuB/+2z1cXBhSBBzRydVVjzhFC4gtenEhpnj15yu0qptWGJsO9YGrcPZ3ezX8AWb1VA391MKpQ== [email protected]: - version "1.7.2" - resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.7.2.tgz#24d9768c63d253a56ecff93845b44b4df1d52771" - integrity sha512-joj9ZlUOjCrwdbmiLqafeUSgkUM74NqhLsZtSqDmhKudaIY197zTrb8JMl31fMnCUuxwFT23eC/oWvrZzDLRJQ== - dependencies: - babel-runtime "^6.26.0" [email protected]: + version "1.8.0" + resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.0.tgz#8e3153e542d4a39e9b10554434afaaf98956a937" + integrity sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw== [email protected]: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= -concat-stream@^1.5.1, concat-stream@^1.5.2: +concat-stream@^1.5.2, concat-stream@^1.6.2: version "1.6.2" resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== @@ -1095,15 +1125,10 @@ [email protected]: resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== -core-js@^2.4.0: - version "2.6.11" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.11.tgz#38831469f9922bded8ee21c9dc46985e0399308c" - integrity sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg== - core-js@^3.0.1: - version "3.8.3" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.8.3.tgz#c21906e1f14f3689f93abcc6e26883550dd92dd0" - integrity sha512-KPYXeVZYemC2TkNEkX/01I+7yd+nX3KddKwZ1Ww7SKWdI2wQprSgLmrTddT8nw92AjEklTsPBoSdQBhbI1bQ6Q== + version "3.9.1" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.9.1.tgz#cec8de593db8eb2a85ffb0dbdeb312cb6e5460ae" + integrity sha512-gSjRvzkxQc1zjM/5paAmL4idJBFzuJoo+jDjF1tStYFMV2ERfD02HhahhCGXUyHxQRG4yFKVSdO6g62eoRMcDg== core-util-is@~1.0.0: version "1.0.2" @@ -1120,28 +1145,28 @@ [email protected]: resolved "https://registry.yarnpkg.com/cssfilter/-/cssfilter-0.0.10.tgz#c6d2672632a2e5c83e013e6864a42ce8defd20ae" integrity sha1-xtJnJjKi5cg+AT5oZKQs6N79IK4= [email protected]: - 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@^3.1.0: - version "3.2.6" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" - integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== [email protected]: + version "4.1.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" + integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== dependencies: ms "^2.1.1" -debug@^4.1.1: - version "4.2.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.2.0.tgz#7f150f93920e94c58f5574c2fd01a3110effe7f1" - integrity sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg== [email protected], debug@^4.1.1, debug@^4.3.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" + integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== dependencies: ms "2.1.2" -deep-equal@^1.1.0, deep-equal@^1.1.1: +debug@^3.1.0: + version "3.2.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + integrity sha512-CFjz…
diff --git a/.cache/kvs-node-localstorage/proofdict b/.cache/kvs-node-localstorage/proofdict index 80fecc7..f97aa1f 100644 --- a/.cache/kvs-node-localstorage/proofdict +++ b/.cache/kvs-node-localstorage/proofdict @@ -1 +1 @@ -[{"id":"01EF8QSDGRB63DFJ54B68AKN7J","description":"webpack is lower-case https://webpack.js.org/","expected":"webpack","patterns":["/\\bwebpack\\b/i"],"allows":[],"specs":[{"from":"webpack","to":"webpack"},{"from":"WebPack","to":"webpack"},{"from":"BuildWebPack is OK","to":"BuildWebPack is OK"}],"tags":["noun"]},{"id":"01BQ92YWWKN8RQSJ5QS25W0VGE","description":"","expected":"およそ","patterns":["凡そ"],"specs":[],"tags":["opinion","表記統一"]},{"id":"01BQ92YYBHA4FM6A82V2ZT0V91","description":"Reference https://www.w3.org/TR/html-imports/","expected":"HTML Imports","patterns":["/HTML Import/i"],"specs":[{"from":"HTML import","to":"HTML Imports"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YWWJW5M546Z0VEDHG0RZ","description":"漢字で書かず、ひらがなで書くと読みやすくなります","expected":"$1あとで","patterns":["/(して|した|、)後で/"],"specs":[{"from":"して後で","to":"してあとで"}],"tags":["opinion","表記統一"]},{"id":"01BQ92YWWH8TVT2N8FT61TTDNH","description":"ひらがなで書かず、漢字で書くと読みやすくなります","expected":"$1中","patterns":["/(その)なか/","/(世界|日)じゅう/"],"specs":[],"tags":["opinion","表記統一"]},{"id":"01BQ92YYBGSXM66TN1ZSJH177M","description":"","expected":"ES6 Classes","patterns":["/\\bES6 classes\\b/i"],"specs":[{"from":"ES6 classes","to":"ES6 Classes"}],"tags":["JavaScript"]},{"id":"01BQ92YXWQ02R8SE1ZZHCG89P5","description":"","expected":"Property","patterns":["/propety/i"],"specs":[{"from":"propety","to":"Property"}],"tags":["typo"]},{"id":"01BQ92YXWQDKGCA9W74SKW7VST","description":"","expected":"Arrow Function","patterns":["Array Function"],"specs":[],"tags":["typo"]},{"id":"01BQ92YYBGWJZC59XKSNA53X2C","description":"Reference https://www.w3.org/TR/webstorage/","expected":"localStorage","patterns":["localstorage","local storage"],"specs":[{"from":"localstorage is a parts of webstorage","to":"localStorage is a parts of webstorage"},{"from":"local storage is a parts of webstorage","to":"localStorage is a parts of webstorage"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBEFBXEHH8T8HC8RCRD","description":"Reference https://www.ecma-international.org/publications/standards/Ecma-262.htm","expected":"ECMAScript $1","patterns":["/ECMAScript([0-9]+)/i","/ECMA Script([0-9]+)/i"],"specs":[{"from":"ECMASCRIPT5","to":"ECMAScript 5"},{"from":"ecmascript2015","to":"ECMAScript 2015"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYSHMN57CX27SAJQT2W0","description":"","expected":"Sauce Labs","patterns":["SauceLabs"],"specs":[],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YXWVY5EFQNE4ZV8K0HS5","description":"","expected":"package.json","patterns":["packge.json"],"specs":[],"tags":["typo"]},{"id":"01BQ92YYBGNAKFHY1TFA9Z3KTC","description":"Reference https://w3c.github.io/webcomponents/explainer/","expected":"Web Components","patterns":["/WebComponents/i","/web components/i"],"specs":[{"from":"WebComponentsについてのWeeklyメールマガジン","to":"Web ComponentsについてのWeeklyメールマガジン"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YZ6Q0Y22BVKAVFC4VV1N","description":"Reference http://ocaml.org/","expected":"OCaml","patterns":["/OCaml/i"],"specs":[{"from":"ocaml","to":"OCaml"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YZ6QD58PVYY3FE7QD2S5","description":"Reference http://www.seleniumhq.org/projects/webdriver/","expected":"WebDriver","patterns":["/WebDriver/i","/Web Driver/i"],"specs":[{"from":"Web Driver is designed in a simpler and more concise programming interface","to":"WebDriver is designed in a simpler and more concise programming interface"},{"from":"webdriver is designed in a simpler and more concise programming interface","to":"WebDriver is designed in a simpler and more concise programming interface"},{"from":"WebdriverIO is OK.","to":"WebdriverIO is OK."}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYSHHRNMZPY2VG4991B7","description":"","expected":"Travis CI","patterns":["/TravisCI/i"],"specs":[{"from":"TravisCI is a service","to":"Travis CI is a service"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBHGYFTTDANV4RNC3CJ","description":"Should have a space between words. Reference https://github.com/w3c/ServiceWorker","expected":"$1 $2","patterns":["/(service)(worker)/i"],"specs":[{"from":"This is serviceworker?","to":"This is service worker?"},{"from":"ServiceWorker","to":"Service Worker"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBHB83ZNFWK5WBA58B7","description":"JavaScript is not Java Script","expected":"JavaScript","patterns":["/javascript/i","/Java Script/i"],"specs":[{"from":"javascript","to":"JavaScript"},{"from":"java script","to":"JavaScript"},{"from":"Java script","to":"JavaScript"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBJK6WW9Y09W7TF1YTT","description":"See http://todomvc.com/","expected":"TodoMVC","patterns":["/todomvc/i"],"specs":[{"from":"todomvc is todo app.","to":"TodoMVC is todo app."}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQMSTDZCWH8P81E7PBG9BMQS","description":"importのtypoです","expected":"Import","patterns":["Impport"],"specs":[{"from":"Dynamic Impport","to":"Dynamic Import"},{"from":"Impporter","to":"Importer"}],"tags":["typo"]},{"id":"01BQ92YW6Y5KA9YRC4HRPWZTVV","description":"","expected":"Flexbox","patterns":["Fluxbox"],"specs":[{"from":"CSS Fluxboxでは","to":"CSS Flexboxでは"}],"tags":["noun","CSS"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01EKP3RFQ18K47EYH1ZKB5E4R5","description":"https://github.com/GoogleChrome/lighthouse","expected":"Lighthouse","patterns":["/\\bLighthouse\\b/i"],"allows":["{{COMBINATION_WORD}}"],"specs":[{"from":" lighthouse","to":" Lighthouse"},{"from":"lighthouse-cli","to":"lighthouse-cli"},{"from":"Lighthouse analyzes web apps","to":"Lighthouse analyzes web apps"}],"tags":["noun"]},{"id":"01BW0P1BD0VKQQMZ4E947WVMJ1","description":"See https://developer.mozilla.org/en-US/Add-ons/WebExtensions/What_are_WebExtensions","expected":"WebExtension$1","patterns":["/Web Extension(s)?/"],"specs":[{"from":"Web Extension","to":"WebExtension"},{"from":"Extensions for Firefox are built using WebExtensions APIs","to":"Extensions for Firefox are built using WebExtensions APIs"},{"from":"WebExtension APIs are designed to be compatible with Chrome and Opera extensions","to":"WebExtension APIs are designed to be compatible with Chrome and Opera extensions"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01CF6NR1Q7XWC035B9XJXNB852","description":"typo","expected":"$1nimation","patterns":["/(a)nimation/i"],"specs":[{"from":"Animation","to":"Animation"},{"from":"CSS Animation","to":"CSS Animation"},{"from":"CSS animations","to":"CSS animations"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBJP9EDR7KS993CMQAR","description":"","expected":"Virtual DOM","patterns":["/VirtualDOM/i"],"specs":[{"from":"VirtualDOM is virtual dom object","to":"Virtual DOM is virtual dom object"}],"tags":["noun","opinion","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YXWVJ7HG4TDWA45RH297","description":"","expected":"webpack","patterns":["/\\bwebpac(?!k)\\b/"],"specs":[{"from":"webpacのビルド速度改善についてのスライド","to":"webpackのビルド速度改善についてのスライド"}],"tags":["typo"]},{"id":"01BQ92YYBJENZB6M480KCJ0J99","description":"Reference http://jquery.com/","expected":"jQuery","patterns":["/jquery/i"],"specs":[{"from":"Jquery","to":"jQuery"},{"from":"jquery","to":"jQuery"},{"from":"jquery-ui","to":"jquery-ui"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YXWVT5PGRGQCH1ZZ6S7V","description":"","expected":"operator","patterns":["oeprator"],"specs":[],"tags":["typo"]},{"id":"01BQ92YYBH2H42AT29Y4BP84FA","description":"Reference https://www.w3.org/TR/touch-events/","expected":"Touch Events","patterns":["/Touch Event/i","/Touch Events/i"],"specs":[{"from":"Touch Event、Fullscreen APIなどのサポートなど","to":"Touch Events、Fullscreen APIなどのサポートなど"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYSHHTGFD78FF7NB4RX9","description":"","expected":"HTML5 Rocks","patterns":["/HTML5Rocks/i","/HTML5Rock/i"],"specs":[{"from":"HTML5Rockに現在公開されている翻訳記事のまとめ","to":"HTML5 Rocksに現在公開されている翻訳記事のまとめ"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YZ6NT1NACB4X0DC8XHFH","description":"","expected":"$1 EAP","patterns":["/([0-9\\.]+)EAP/"],"specs":[],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YXWVMAMKQ3VK2DNYNCCP","description":"Customのtypoです","expected":"Custom","patterns":["/Custome\\b/i"],"specs":[{"from":"WebVRをCustome Elementのタグで書く","to":"WebVRをCustom Elementのタグで書く"}],"tags":["typo"]},{"id":"01EKJAAAXCZR005PDSTRVT24QZ","description":"Jamstackに統一された https://github.com/jamstack/jamstack.org/issues/279","expected":"Jamstack","patterns":["/\\bJAMStack\\b/i"],"allows":[],"specs":[{"from":"Jamstack","to":"Jamstack"},{"from":"JAMStack is old word","to":"Jamstack is old word"},{"from":"jamjasmstack","to":"jamjasmstack"}],"tags":["noun"]},{"id":"01BQ92YYBGNT2ZA7SCBGZP4XW8","description":"Reference https://www.w3.org/TR/webstorage/","expected":"sessionStorage","patterns":["sessionstorage","session storage"],"specs":[{"from":"sessionstorage is a parts of webstorage","to":"sessionStorage is a parts of webstorage"},{"from":"session storage is a parts of webstorage","to":"sessionStorage is a parts of webstorage"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YXWR8T1QBP2JSKFH74RK","description":"","expected":"CoffeeScript","patterns":["CoffeScript"],"specs":[{"from":"CoffeScriptからES6","to":"CoffeeScriptからES6"}],"tags":["typo"]},{"id":"01BQ92YZ6QR8RJKA5Y8W2F9NMY","description":"Reference https://webkit.org/","expected":"WebKit","patterns":["/webkit/i"],"specs":[{"from":"これはwebkitです","to":"これはWebKitです"},{"from":"XXXwebkit","to":"XXXwebkit"},{"from":"node-webkit","to":"node-webkit"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBJCY50GECA6CQH874F","description":"Reference https://www.emberjs.com/","expected":"Ember.js","patterns":["/Ember\\.js/i"],"specs":[{"from":"ember.js","to":"Ember.js"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBGQBRYXEZK5ZRRK1WW","description":"","expected":"Ecma標準","patterns":["ECMA標準"],"specs":[],"tags":["JavaScript"]},{"id":"01D1SNYB7AA69NTAEBT1X651RB","description":"Brotliはbr","expected":"$1rotli","patterns":["/\\b(b)rottli\\b/i"],"allows":[],"specs":[{"from":"brottli compression","to":"brotli compression"},{"from":"brottli圧縮","to":"brotli圧縮"},{"from":"BrotliはbrotliでOK","to":"BrotliはbrotliでOK"}],"tags":["noun"]},{"id":"01C1VCJNDQW7RN25S24KNP9V4M","description":"A typo Chromium","expected":"$1hromium","patterns":["/(C)hronium/i"],"specs":[{"from":"Chrome is Chronium","to":"Chrome is Chromium"},{"from":"Chrome is chronium","to":"Chrome is chromium"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYSD9K713DCXTFGNDENS","description":"Reference https://leanpub.com/","expected":"Leanpub","patterns":["/leanpub/i"],"specs":[{"from":"leanpub","to":"Leanpub"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YWJG32Z679PF9CHJJD5R","description":"","expected":"$1デフォルトで有効$2","patterns":["/(?:(が)デフォルト有効)|(?:デフォルト有効(に))/"],"specs":[],"tags":["opinion","jser.info"]},{"id":"01BQ92YZ6QCTPXGPWWJ5NWT6NC","description":"","expected":"Virtual Machine","patterns":["Virtual machine"],"specs":[{"from":"MSEdgeが使えるWindows 10のVirtual machine(VM)が公開された","to":"MSEdgeが使えるWindows 10のVirtual Machine(VM)が公開された"}],"tags":["noun","opinion"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YZ6R35HCYAZGN18RB35E","description":"Reference https://www.microsoft.com/windows","expected":"Windows $1","patterns":["/Windows (\\d+)/i"],"specs":[{"from":"OK windows","to":"OK windows"},{"from":"windows 10","to":"Windows 10"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YXWFVPNRGMBZ3RZNN1RD","description":"","expected":"Foundation","patterns":["Fundation"],"specs":[{"from":"Fundation","to":"Foundation"}],"tags":["typo"]},{"id":"01F0W5YS57VWFW3DAP3EC92D6Y","description":"https://github.com/sveltejs/kit","expected":"SvelteKit","patterns":["/SveleteKit/i"],"allows":[],"specs":[{"from":"SveleteKit","to":"SvelteKit"},{"from":"SvelteKit","to":"SvelteKit"}],"tags":["noun"]},{"id":"01DSDJ2ZNSB644ZB0SD53C62X5","description":"","expected":"Archive","patterns":["Archieve"],"allows":[],"specs":[{"from":"HTTP Archieve","to":"HTTP Archive"}],"tags":["noun"]},{"id":"01BQ92YYBJBBNRPR2WYHMDYPPG","description":"Reference http://source-map.github.io/","expected":"Source Map","patterns":["/Source Map/i","/SourceMap/i"],"specs":[{"from":"多段SourceMapに対応","to":"多段Source Mapに対応"},{"from":"SourceMap","to":"Source Map"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBJDYYAR7DFH7M57G1P","description":"AngularJS(1.x)はJSを付けます","expected":"AngularJS","patterns":["/Angular\\.js/i","/angularjs/i"],"specs":[{"from":"Angular.js","to":"AngularJS"}],"tags":["JavaScript"]},{"id":"01BQ92YYBH2EZP1E4KVNDMXYV9","description":"Pointer Eventsに統一","expected":"Pointer Events","patterns":["/pointer event/i","/pointer events/i"],"specs":[{"from":"Pointer Events","to":"Pointer Events"},{"from":"MSEdgeの対応、pointer eventsなど対応、","to":"MSEdgeの対応、Pointer Eventsなど対応、"},{"from":"MSEdgeの対応、pointer eventなど対応、","to":"MSEdgeの対応、Pointer Eventsなど対応、"},{"from":"pointer-events","to":"pointer-events"}],"tags":["JavaScript","noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YXWTM3A3CG10MT3FCD55","description":"","expected":"Performance","patterns":["/peformance/i"],"specs":[{"from":"ブラウザ上でどうやって計測するかやPeformance Timelineなどの仕様について","to":"ブラウザ上でどうやって計測するかやPerformance Timelineなどの仕様について"}],"tags":["typo"]},{"id":"01BQ92YYBJTDA6WF56ZE9PKP8F","description":"Reference http://underscorejs.org/","expected":"Underscore.js","patterns":["/underscore.js/i"],"specs":[],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01F0W5YS57VWFW3DAP3EC92D6Z","description":"https://github.com/sveltejs","expected":"$1velte","patterns":["/(s)velete/i"],"allows":[],"specs":[{"from":"svelete","to":"svelte"},{"from":"Svelete","to":"Svelte"}],"tags":["noun"]},{"id":"01BQ92YXWTV260J4A7W8TSWEXH","description":"","expected":"Workaround","patterns":["Workaound"],"specs":[{"from":"iOS7と8のquerySelectorバグの対処(Workaound)","to":"iOS7と8のquerySelectorバグの対処(Workaround)"}],"tags":["typo"]},{"id":"01BQ92YYBH4NNWB305Y1TD7B6N","description":"Reference https://www.w3.org/TR/webaudio/","expected":"Web Audio API","patterns":["/WebAudio API/i","/Web AudioAPI/i","/Web Audio API/i"],"specs":[{"from":"All scheduled times in the WebAudio API are relative to the value of currentTime.","to":"All scheduled times in the Web Audio API are relative to the value of currentTime."}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01DTET96387SQ3VYTXHYSX5BYS","description":"WebAssembly (abbreviated Wasm) https://webassembly.org/","expected":"Wasm","patterns":["/wasm/i"],"allows":[],"specs":[{"from":"wasm","to":"Wasm"},{"from":"WAsm","to":"Wasm"},{"from":"WebAssembly (abbreviated Wasm) ","to":"WebAssembly (abbreviated Wasm) "}],"tags":["noun"]},{"id":"01BQ92YYSF66CHGRP4MX5X6P0Q","description":"O'reilly is OK. But oreilly is not OK","expected":"Oreilly","patterns":["/Oreilly/i"],"specs":[{"from":"oreilly","to":"Oreilly"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBJXRCA80R6BCA4SS7K","description":"Angular(2.0~)","expected":"Angular","patterns":["/angular/i"],"specs":[{"from":"angular","to":"Angular"},{"from":"angulardart","to":"angulardart"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YW70P4BSGE4ZBMKECATV","description":"","expected":"PostCSS","patterns":["/PostCSS/i"],"specs":[{"from":"postcss","to":"PostCSS"}],"tags":["noun","CSS"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBGZPBHMB3DMMXMJ0CJ","description":"","expected":"ES.next","patterns":["ES next"],"specs":[{"from":"ES nextでは","to":"ES.nextでは"}],"tags":["JavaScript"]},{"id":"01BSADQQDT7DEBJT25555YCQ14","description":"Reference https://www.mysql.com/","expected":"MySQL","patterns":["/mysql/i"],"specs":[{"from":"mysql is a database.","to":"MySQL is a database."},{"from":"Oracle mysql","to":"Oracle MySQL"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]}] \ No newline at end of file +[{"id":"01BQ92YWWMY2YZNGG7Q70EZTFE","description":"","expected":"たびたび","patterns":["度々"],"specs":[],"tags":["opinion","表記統一"]},{"id":"01BQ92YYSHHRNMZPY2VG4991B7","description":"","expected":"Travis CI","patterns":["/TravisCI/i"],"specs":[{"from":"TravisCI is a service","to":"Travis CI is a service"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01EKJAAAXCZR005PDSTRVT24QZ","description":"Jamstackに統一された https://github.com/jamstack/jamstack.org/issues/279","expected":"Jamstack","patterns":["/\\bJAMStack\\b/i"],"allows":[],"specs":[{"from":"Jamstack","to":"Jamstack"},{"from":"JAMStack is old word","to":"Jamstack is old word"},{"from":"jamjasmstack","to":"jamjasmstack"}],"tags":["noun"]},{"id":"01BQ92YWJF8WXN0M9FE0S4QYW5","description":"","expected":"$1発売","patterns":["/(\\d+年\\d+月\\d+日)\\s発売/"],"specs":[],"tags":["opinion","jser.info"]},{"id":"01BQ92YXWVT5PGRGQCH1ZZ6S7V","description":"","expected":"operator","patterns":["oeprator"],"specs":[],"tags":["typo"]},{"id":"01BQ92YYBGNT2ZA7SCBGZP4XW8","description":"Reference https://www.w3.org/TR/webstorage/","expected":"sessionStorage","patterns":["sessionstorage","session storage"],"specs":[{"from":"sessionstorage is a parts of webstorage","to":"sessionStorage is a parts of webstorage"},{"from":"session storage is a parts of webstorage","to":"sessionStorage is a parts of webstorage"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YZ6QD58PVYY3FE7QD2S5","description":"Reference http://www.seleniumhq.org/projects/webdriver/","expected":"WebDriver","patterns":["/WebDriver/i","/Web Driver/i"],"specs":[{"from":"Web Driver is designed in a simpler and more concise programming interface","to":"WebDriver is designed in a simpler and more concise programming interface"},{"from":"webdriver is designed in a simpler and more concise programming interface","to":"WebDriver is designed in a simpler and more concise programming interface"},{"from":"WebdriverIO is OK.","to":"WebdriverIO is OK."}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BW0P1BD0VKQQMZ4E947WVMJ1","description":"See https://developer.mozilla.org/en-US/Add-ons/WebExtensions/What_are_WebExtensions","expected":"WebExtension$1","patterns":["/Web Extension(s)?/"],"specs":[{"from":"Web Extension","to":"WebExtension"},{"from":"Extensions for Firefox are built using WebExtensions APIs","to":"Extensions for Firefox are built using WebExtensions APIs"},{"from":"WebExtension APIs are designed to be compatible with Chrome and Opera extensions","to":"WebExtension APIs are designed to be compatible with Chrome and Opera extensions"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBJTDA6WF56ZE9PKP8F","description":"Reference http://underscorejs.org/","expected":"Underscore.js","patterns":["/underscore.js/i"],"specs":[],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YXWVJ7HG4TDWA45RH297","description":"","expected":"webpack","patterns":["/\\bwebpac(?!k)\\b/"],"specs":[{"from":"webpacのビルド速度改善についてのスライド","to":"webpackのビルド速度改善についてのスライド"}],"tags":["typo"]},{"id":"01BQ92YYBH2EZP1E4KVNDMXYV9","description":"Pointer Eventsに統一","expected":"Pointer Events","patterns":["/pointer event/i","/pointer events/i"],"specs":[{"from":"Pointer Events","to":"Pointer Events"},{"from":"MSEdgeの対応、pointer eventsなど対応、","to":"MSEdgeの対応、Pointer Eventsなど対応、"},{"from":"MSEdgeの対応、pointer eventなど対応、","to":"MSEdgeの対応、Pointer Eventsなど対応、"},{"from":"pointer-events","to":"pointer-events"}],"tags":["JavaScript","noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBHGYFTTDANV4RNC3CJ","description":"Should have a space between words. Reference https://github.com/w3c/ServiceWorker","expected":"$1 $2","patterns":["/(service)(worker)/i"],"specs":[{"from":"This is serviceworker?","to":"This is service worker?"},{"from":"ServiceWorker","to":"Service Worker"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBGWJZC59XKSNA53X2C","description":"Reference https://www.w3.org/TR/webstorage/","expected":"localStorage","patterns":["localstorage","local storage"],"specs":[{"from":"localstorage is a parts of webstorage","to":"localStorage is a parts of webstorage"},{"from":"local storage is a parts of webstorage","to":"localStorage is a parts of webstorage"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBJCY50GECA6CQH874F","description":"Reference https://www.emberjs.com/","expected":"Ember.js","patterns":["/Ember\\.js/i"],"specs":[{"from":"ember.js","to":"Ember.js"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YXWQDKGCA9W74SKW7VST","description":"","expected":"Arrow Function","patterns":["Array Function"],"specs":[],"tags":["typo"]},{"id":"01BQ92YYBEFBXEHH8T8HC8RCRD","description":"Reference https://www.ecma-international.org/publications/standards/Ecma-262.htm","expected":"ECMAScript $1","patterns":["/ECMAScript([0-9]+)/i","/ECMA Script([0-9]+)/i"],"specs":[{"from":"ECMASCRIPT5","to":"ECMAScript 5"},{"from":"ecmascript2015","to":"ECMAScript 2015"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBGQBRYXEZK5ZRRK1WW","description":"","expected":"Ecma標準","patterns":["ECMA標準"],"specs":[],"tags":["JavaScript"]},{"id":"01BQ92YYBGSXM66TN1ZSJH177M","description":"","expected":"ES6 Classes","patterns":["/\\bES6 classes\\b/i"],"specs":[{"from":"ES6 classes","to":"ES6 Classes"}],"tags":["JavaScript"]},{"id":"01BQ92YXWVMAMKQ3VK2DNYNCCP","description":"Customのtypoです","expected":"Custom","patterns":["/Custome\\b/i"],"specs":[{"from":"WebVRをCustome Elementのタグで書く","to":"WebVRをCustom Elementのタグで書く"}],"tags":["typo"]},{"id":"01BQ92YYBH4NNWB305Y1TD7B6N","description":"Reference https://www.w3.org/TR/webaudio/","expected":"Web Audio API","patterns":["/WebAudio API/i","/Web AudioAPI/i","/Web Audio API/i"],"specs":[{"from":"All scheduled times in the WebAudio API are relative to the value of currentTime.","to":"All scheduled times in the Web Audio API are relative to the value of currentTime."}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBJK6WW9Y09W7TF1YTT","description":"See http://todomvc.com/","expected":"TodoMVC","patterns":["/todomvc/i"],"specs":[{"from":"todomvc is todo app.","to":"TodoMVC is todo app."}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQMSTDZCWH8P81E7PBG9BMQS","description":"importのtypoです","expected":"Import","patterns":["Impport"],"specs":[{"from":"Dynamic Impport","to":"Dynamic Import"},{"from":"Impporter","to":"Importer"}],"tags":["typo"]},{"id":"01F4VMKJAEKHMANZVFFR9D6DJA","description":"AWS CloudFront https://aws.amazon.com/jp/cloudfront/","expected":"CloudFront","patterns":["/\\bCloudFront\\b/i"],"allows":["{{COMBINATION_WORD}}"],"specs":[{"from":"Cloudront","to":"Cloudront"},{"from":"Cloudfront","to":"CloudFront"},{"from":"awscloudfront","to":"awscloudfront"}],"tags":["noun"]},{"id":"01CF6NR1Q7XWC035B9XJXNB852","description":"typo","expected":"$1nimation","patterns":["/(a)nimation/i"],"specs":[{"from":"Animation","to":"Animation"},{"from":"CSS Animation","to":"CSS Animation"},{"from":"CSS animations","to":"CSS animations"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01DSDJ2ZNSB644ZB0SD53C62X5","description":"","expected":"Archive","patterns":["Archieve"],"allows":[],"specs":[{"from":"HTTP Archieve","to":"HTTP Archive"}],"tags":["noun"]},{"id":"01BQ92YYBJXRCA80R6BCA4SS7K","description":"Angular(2.0~)","expected":"Angular","patterns":["/angular/i"],"specs":[{"from":"angular","to":"Angular"},{"from":"angulardart","to":"angulardart"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YWWH8TVT2N8FT61TTDNH","description":"ひらがなで書かず、漢字で書くと読みやすくなります","expected":"$1中","patterns":["/(その)なか/","/(世界|日)じゅう/"],"specs":[],"tags":["opinion","表記統一"]},{"id":"01BQ92YYBHA4FM6A82V2ZT0V91","description":"Reference https://www.w3.org/TR/html-imports/","expected":"HTML Imports","patterns":["/HTML Import/i"],"specs":[{"from":"HTML import","to":"HTML Imports"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01EKP3RFQ18K47EYH1ZKB5E4R5","description":"https://github.com/GoogleChrome/lighthouse","expected":"Lighthouse","patterns":["/\\bLighthouse\\b/i"],"allows":["{{COMBINATION_WORD}}"],"specs":[{"from":" lighthouse","to":" Lighthouse"},{"from":"lighthouse-cli","to":"lighthouse-cli"},{"from":"Lighthouse analyzes web apps","to":"Lighthouse analyzes web apps"}],"tags":["noun"]},{"id":"01C1VCJNDQW7RN25S24KNP9V4M","description":"A typo Chromium","expected":"$1hromium","patterns":["/(C)hronium/i"],"specs":[{"from":"Chrome is Chronium","to":"Chrome is Chromium"},{"from":"Chrome is chronium","to":"Chrome is chromium"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBJP9EDR7KS993CMQAR","description":"","expected":"Virtual DOM","patterns":["/VirtualDOM/i"],"specs":[{"from":"VirtualDOM is virtual dom object","to":"Virtual DOM is virtual dom object"}],"tags":["noun","opinion","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBGZPBHMB3DMMXMJ0CJ","description":"","expected":"ES.next","patterns":["ES next"],"specs":[{"from":"ES nextでは","to":"ES.nextでは"}],"tags":["JavaScript"]},{"id":"01BQ92YW70P4BSGE4ZBMKECATV","description":"","expected":"PostCSS","patterns":["/PostCSS/i"],"specs":[{"from":"postcss","to":"PostCSS"}],"tags":["noun","CSS"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YZ6QCTPXGPWWJ5NWT6NC","description":"","expected":"Virtual Machine","patterns":["Virtual machine"],"specs":[{"from":"MSEdgeが使えるWindows 10のVirtual machine(VM)が公開された","to":"MSEdgeが使えるWindows 10のVirtual Machine(VM)が公開された"}],"tags":["noun","opinion"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYSHHTGFD78FF7NB4RX9","description":"","expected":"HTML5 Rocks","patterns":["/HTML5Rocks/i","/HTML5Rock/i"],"specs":[{"from":"HTML5Rockに現在公開されている翻訳記事のまとめ","to":"HTML5 Rocksに現在公開されている翻訳記事のまとめ"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01DTET96387SQ3VYTXHYSX5BYS","description":"WebAssembly (abbreviated Wasm) https://webassembly.org/","expected":"Wasm","patterns":["/wasm/i"],"allows":[],"specs":[{"from":"wasm","to":"Wasm"},{"from":"WAsm","to":"Wasm"},{"from":"WebAssembly (abbreviated Wasm) ","to":"WebAssembly (abbreviated Wasm) "}],"tags":["noun"]},{"id":"01BQ92YYSD9K713DCXTFGNDENS","description":"Reference https://leanpub.com/","expected":"Leanpub","patterns":["/leanpub/i"],"specs":[{"from":"leanpub","to":"Leanpub"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YZ6QR8RJKA5Y8W2F9NMY","description":"Reference https://webkit.org/","expected":"WebKit","patterns":["/webkit/i"],"specs":[{"from":"これはwebkitです","to":"これはWebKitです"},{"from":"XXXwebkit","to":"XXXwebkit"},{"from":"node-webkit","to":"node-webkit"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YXWVY5EFQNE4ZV8K0HS5","description":"","expected":"package.json","patterns":["packge.json"],"specs":[],"tags":["typo"]},{"id":"01EF8QSDGRB63DFJ54B68AKN7J","description":"webpack is lower-case https://webpack.js.org/","expected":"webpack","patterns":["/\\bwebpack\\b/i"],"allows":[],"specs":[{"from":"webpack","to":"webpack"},{"from":"WebPack","to":"webpack"},{"from":"BuildWebPack is OK","to":"BuildWebPack is OK"}],"tags":["noun"]},{"id":"01BQ92YZ6R35HCYAZGN18RB35E","description":"Reference https://www.microsoft.com/windows","expected":"Windows $1","patterns":["/Windows (\\d+)/i"],"specs":[{"from":"OK windows","to":"OK windows"},{"from":"windows 10","to":"Windows 10"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBGNAKFHY1TFA9Z3KTC","description":"Reference https://w3c.github.io/webcomponents/explainer/","expected":"Web Components","patterns":["/WebComponents/i","/web components/i"],"specs":[{"from":"WebComponentsについてのWeeklyメールマガジン","to":"Web ComponentsについてのWeeklyメールマガジン"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01D1SNYB7AA69NTAEBT1X651RB","description":"Brotliはbr","expected":"$1rotli","patterns":["/\\b(b)rottli\\b/i"],"allows":[],"specs":[{"from":"brottli compression","to":"brotli compression"},{"from":"brottli圧縮","to":"brotli圧縮"},{"from":"BrotliはbrotliでOK","to":"BrotliはbrotliでOK"}],"tags":["noun"]},{"id":"01BQ92YXWFVPNRGMBZ3RZNN1RD","description":"","expected":"Foundation","patterns":["Fundation"],"specs":[{"from":"Fundation","to":"Foundation"}],"tags":["typo"]},{"id":"01BQ92YXWTV260J4A7W8TSWEXH","description":"","expected":"Workaround","patterns":["Workaound"],"specs":[{"from":"iOS7と8のquerySelectorバグの対処(Workaound)","to":"iOS7と8のquerySelectorバグの対処(Workaround)"}],"tags":["typo"]},{"id":"01BQ92YYBJBBNRPR2WYHMDYPPG","description":"Reference http://source-map.github.io/","expected":"Source Map","patterns":["/Source Map/i","/SourceMap/i"],"specs":[{"from":"多段SourceMapに対応","to":"多段Source Mapに対応"},{"from":"SourceMap","to":"Source Map"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YXWQ02R8SE1ZZHCG89P5","description":"","expected":"Property","patterns":["/propety/i"],"specs":[{"from":"propety","to":"Property"}],"tags":["typo"]},{"id":"01F0W5YS57VWFW3DAP3EC92D6Y","description":"https://github.com/sveltejs/kit","expected":"SvelteKit","patterns":["/SveleteKit/i"],"allows":[],"specs":[{"from":"SveleteKit","to":"SvelteKit"},{"from":"SvelteKit","to":"SvelteKit"}],"tags":["noun"]},{"id":"01BQ92YXWR8T1QBP2JSKFH74RK","description":"","expected":"CoffeeScript","patterns":["CoffeScript"],"specs":[{"from":"CoffeScriptからES6","to":"CoffeeScriptからES6"}],"tags":["typo"]},{"id":"01BQ92YYSHMN57CX27SAJQT2W0","description":"","expected":"Sauce Labs","patterns":["SauceLabs"],"specs":[],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBJENZB6M480KCJ0J99","description":"Reference http://jquery.com/","expected":"jQuery","patterns":["/jquery/i"],"specs":[{"from":"Jquery","to":"jQuery"},{"from":"jquery","to":"jQuery"},{"from":"jquery-ui","to":"jquery-ui"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YW6Y5KA9YRC4HRPWZTVV","description":"","expected":"Flexbox","patterns":["Fluxbox"],"specs":[{"from":"CSS Fluxboxでは","to":"CSS Flexboxでは"}],"tags":["noun","CSS"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YWJG32Z679PF9CHJJD5R","description":"","expected":"$1デフォルトで有効$2","patterns":["/(?:(が)デフォルト有効)|(?:デフォルト有効(に))/"],"specs":[],"tags":["opinion","jser.info"]},{"id":"01BQ92YXWTM3A3CG10MT3FCD55","description":"","expected":"Performance","patterns":["/peformance/i"],"specs":[{"from":"ブラウザ上でどうやって計測するかやPeformance Timelineなどの仕様について","to":"ブラウザ上でどうやって計測するかやPerformance Timelineなどの仕様について"}],"tags":["typo"]},{"id":"01BQ92YYBHB83ZNFWK5WBA58B7","description":"JavaScript is not Java Script","expected":"JavaScript","patterns":["/javascript/i","/Java Script/i"],"specs":[{"from":"javascript","to":"JavaScript"},{"from":"java script","to":"JavaScript"},{"from":"Java script","to":"JavaScript"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBJDYYAR7DFH7M57G1P","description":"AngularJS(1.x)はJSを付けます","expected":"AngularJS","patterns":["/Angular\\.js/i","/angularjs/i"],"specs":[{"from":"Angular.js","to":"AngularJS"}],"tags":["JavaScript"]},{"id":"01F0W5YS57VWFW3DAP3EC92D6Z","description":"https://github.com/sveltejs","expected":"$1velte","patterns":["/(s)velete/i"],"allows":[],"specs":[{"from":"svelete","to":"svelte"},{"from":"Svelete","to":"Svelte"}],"tags":["noun"]},{"id":"01BQ92YYBH2H42AT29Y4BP84FA","description":"Reference https://www.w3.org/TR/touch-events/","expected":"Touch Events","patterns":["/Touch Event/i","/Touch Events/i"],"specs":[{"from":"Touch Event、Fullscreen APIなどのサポートなど","to":"Touch Events、Fullscreen APIなどのサポートなど"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YZ6Q0Y22BVKAVFC4VV1N","description":"Reference http://ocaml.org/","expected":"OCaml","patterns":["/OCaml/i"],"specs":[{"from":"ocaml","to":"OCaml"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YZ6NT1NACB4X0DC8XHFH","description":"","expected":"$1 EAP","patterns":["/([0-9\\.]+)EAP/"],"specs":[],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BSADQQDT7DEBJT25555YCQ14","description":"Reference https://www.mysql.com/","expected":"MySQL","patterns":["/mysql/i"],"specs":[{"from":"mysql is a database.","to":"MySQL is a database."},{"from":"Oracle mysql","to":"Oracle MySQL"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYSF66CHGRP4MX5X6P0Q","description":"O'reilly is OK. But oreilly is not OK","expected":"Oreilly","patterns":["/Oreilly/i"],"specs":[{"from":"oreilly","to":"Oreilly"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]}] \ No newline at end of file diff --git a/.cache/kvs-node-localstorage/proofdict-lastUpdated b/.cache/kvs-node-localstorage/proofdict-lastUpdated index 8f44b28..cbcfcae 100644 --- a/.cache/kvs-node-localstorage/proofdict-lastUpdated +++ b/.cache/kvs-node-localstorage/proofdict-lastUpdated @@ -1 +1 @@ -1620083148275 \ No newline at end of file +1620218342649 \ No newline at end of file
diff --git a/.cache/kvs-node-localstorage/proofdict b/.cache/kvs-node-localstorage/proofdict index f97aa1f..e0a1b0f 100644 --- a/.cache/kvs-node-localstorage/proofdict +++ b/.cache/kvs-node-localstorage/proofdict @@ -1 +1 @@ -[{"id":"01BQ92YWWMY2YZNGG7Q70EZTFE","description":"","expected":"たびたび","patterns":["度々"],"specs":[],"tags":["opinion","表記統一"]},{"id":"01BQ92YYSHHRNMZPY2VG4991B7","description":"","expected":"Travis CI","patterns":["/TravisCI/i"],"specs":[{"from":"TravisCI is a service","to":"Travis CI is a service"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01EKJAAAXCZR005PDSTRVT24QZ","description":"Jamstackに統一された https://github.com/jamstack/jamstack.org/issues/279","expected":"Jamstack","patterns":["/\\bJAMStack\\b/i"],"allows":[],"specs":[{"from":"Jamstack","to":"Jamstack"},{"from":"JAMStack is old word","to":"Jamstack is old word"},{"from":"jamjasmstack","to":"jamjasmstack"}],"tags":["noun"]},{"id":"01BQ92YWJF8WXN0M9FE0S4QYW5","description":"","expected":"$1発売","patterns":["/(\\d+年\\d+月\\d+日)\\s発売/"],"specs":[],"tags":["opinion","jser.info"]},{"id":"01BQ92YXWVT5PGRGQCH1ZZ6S7V","description":"","expected":"operator","patterns":["oeprator"],"specs":[],"tags":["typo"]},{"id":"01BQ92YYBGNT2ZA7SCBGZP4XW8","description":"Reference https://www.w3.org/TR/webstorage/","expected":"sessionStorage","patterns":["sessionstorage","session storage"],"specs":[{"from":"sessionstorage is a parts of webstorage","to":"sessionStorage is a parts of webstorage"},{"from":"session storage is a parts of webstorage","to":"sessionStorage is a parts of webstorage"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YZ6QD58PVYY3FE7QD2S5","description":"Reference http://www.seleniumhq.org/projects/webdriver/","expected":"WebDriver","patterns":["/WebDriver/i","/Web Driver/i"],"specs":[{"from":"Web Driver is designed in a simpler and more concise programming interface","to":"WebDriver is designed in a simpler and more concise programming interface"},{"from":"webdriver is designed in a simpler and more concise programming interface","to":"WebDriver is designed in a simpler and more concise programming interface"},{"from":"WebdriverIO is OK.","to":"WebdriverIO is OK."}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BW0P1BD0VKQQMZ4E947WVMJ1","description":"See https://developer.mozilla.org/en-US/Add-ons/WebExtensions/What_are_WebExtensions","expected":"WebExtension$1","patterns":["/Web Extension(s)?/"],"specs":[{"from":"Web Extension","to":"WebExtension"},{"from":"Extensions for Firefox are built using WebExtensions APIs","to":"Extensions for Firefox are built using WebExtensions APIs"},{"from":"WebExtension APIs are designed to be compatible with Chrome and Opera extensions","to":"WebExtension APIs are designed to be compatible with Chrome and Opera extensions"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBJTDA6WF56ZE9PKP8F","description":"Reference http://underscorejs.org/","expected":"Underscore.js","patterns":["/underscore.js/i"],"specs":[],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YXWVJ7HG4TDWA45RH297","description":"","expected":"webpack","patterns":["/\\bwebpac(?!k)\\b/"],"specs":[{"from":"webpacのビルド速度改善についてのスライド","to":"webpackのビルド速度改善についてのスライド"}],"tags":["typo"]},{"id":"01BQ92YYBH2EZP1E4KVNDMXYV9","description":"Pointer Eventsに統一","expected":"Pointer Events","patterns":["/pointer event/i","/pointer events/i"],"specs":[{"from":"Pointer Events","to":"Pointer Events"},{"from":"MSEdgeの対応、pointer eventsなど対応、","to":"MSEdgeの対応、Pointer Eventsなど対応、"},{"from":"MSEdgeの対応、pointer eventなど対応、","to":"MSEdgeの対応、Pointer Eventsなど対応、"},{"from":"pointer-events","to":"pointer-events"}],"tags":["JavaScript","noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBHGYFTTDANV4RNC3CJ","description":"Should have a space between words. Reference https://github.com/w3c/ServiceWorker","expected":"$1 $2","patterns":["/(service)(worker)/i"],"specs":[{"from":"This is serviceworker?","to":"This is service worker?"},{"from":"ServiceWorker","to":"Service Worker"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBGWJZC59XKSNA53X2C","description":"Reference https://www.w3.org/TR/webstorage/","expected":"localStorage","patterns":["localstorage","local storage"],"specs":[{"from":"localstorage is a parts of webstorage","to":"localStorage is a parts of webstorage"},{"from":"local storage is a parts of webstorage","to":"localStorage is a parts of webstorage"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBJCY50GECA6CQH874F","description":"Reference https://www.emberjs.com/","expected":"Ember.js","patterns":["/Ember\\.js/i"],"specs":[{"from":"ember.js","to":"Ember.js"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YXWQDKGCA9W74SKW7VST","description":"","expected":"Arrow Function","patterns":["Array Function"],"specs":[],"tags":["typo"]},{"id":"01BQ92YYBEFBXEHH8T8HC8RCRD","description":"Reference https://www.ecma-international.org/publications/standards/Ecma-262.htm","expected":"ECMAScript $1","patterns":["/ECMAScript([0-9]+)/i","/ECMA Script([0-9]+)/i"],"specs":[{"from":"ECMASCRIPT5","to":"ECMAScript 5"},{"from":"ecmascript2015","to":"ECMAScript 2015"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBGQBRYXEZK5ZRRK1WW","description":"","expected":"Ecma標準","patterns":["ECMA標準"],"specs":[],"tags":["JavaScript"]},{"id":"01BQ92YYBGSXM66TN1ZSJH177M","description":"","expected":"ES6 Classes","patterns":["/\\bES6 classes\\b/i"],"specs":[{"from":"ES6 classes","to":"ES6 Classes"}],"tags":["JavaScript"]},{"id":"01BQ92YXWVMAMKQ3VK2DNYNCCP","description":"Customのtypoです","expected":"Custom","patterns":["/Custome\\b/i"],"specs":[{"from":"WebVRをCustome Elementのタグで書く","to":"WebVRをCustom Elementのタグで書く"}],"tags":["typo"]},{"id":"01BQ92YYBH4NNWB305Y1TD7B6N","description":"Reference https://www.w3.org/TR/webaudio/","expected":"Web Audio API","patterns":["/WebAudio API/i","/Web AudioAPI/i","/Web Audio API/i"],"specs":[{"from":"All scheduled times in the WebAudio API are relative to the value of currentTime.","to":"All scheduled times in the Web Audio API are relative to the value of currentTime."}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBJK6WW9Y09W7TF1YTT","description":"See http://todomvc.com/","expected":"TodoMVC","patterns":["/todomvc/i"],"specs":[{"from":"todomvc is todo app.","to":"TodoMVC is todo app."}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQMSTDZCWH8P81E7PBG9BMQS","description":"importのtypoです","expected":"Import","patterns":["Impport"],"specs":[{"from":"Dynamic Impport","to":"Dynamic Import"},{"from":"Impporter","to":"Importer"}],"tags":["typo"]},{"id":"01F4VMKJAEKHMANZVFFR9D6DJA","description":"AWS CloudFront https://aws.amazon.com/jp/cloudfront/","expected":"CloudFront","patterns":["/\\bCloudFront\\b/i"],"allows":["{{COMBINATION_WORD}}"],"specs":[{"from":"Cloudront","to":"Cloudront"},{"from":"Cloudfront","to":"CloudFront"},{"from":"awscloudfront","to":"awscloudfront"}],"tags":["noun"]},{"id":"01CF6NR1Q7XWC035B9XJXNB852","description":"typo","expected":"$1nimation","patterns":["/(a)nimation/i"],"specs":[{"from":"Animation","to":"Animation"},{"from":"CSS Animation","to":"CSS Animation"},{"from":"CSS animations","to":"CSS animations"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01DSDJ2ZNSB644ZB0SD53C62X5","description":"","expected":"Archive","patterns":["Archieve"],"allows":[],"specs":[{"from":"HTTP Archieve","to":"HTTP Archive"}],"tags":["noun"]},{"id":"01BQ92YYBJXRCA80R6BCA4SS7K","description":"Angular(2.0~)","expected":"Angular","patterns":["/angular/i"],"specs":[{"from":"angular","to":"Angular"},{"from":"angulardart","to":"angulardart"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YWWH8TVT2N8FT61TTDNH","description":"ひらがなで書かず、漢字で書くと読みやすくなります","expected":"$1中","patterns":["/(その)なか/","/(世界|日)じゅう/"],"specs":[],"tags":["opinion","表記統一"]},{"id":"01BQ92YYBHA4FM6A82V2ZT0V91","description":"Reference https://www.w3.org/TR/html-imports/","expected":"HTML Imports","patterns":["/HTML Import/i"],"specs":[{"from":"HTML import","to":"HTML Imports"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01EKP3RFQ18K47EYH1ZKB5E4R5","description":"https://github.com/GoogleChrome/lighthouse","expected":"Lighthouse","patterns":["/\\bLighthouse\\b/i"],"allows":["{{COMBINATION_WORD}}"],"specs":[{"from":" lighthouse","to":" Lighthouse"},{"from":"lighthouse-cli","to":"lighthouse-cli"},{"from":"Lighthouse analyzes web apps","to":"Lighthouse analyzes web apps"}],"tags":["noun"]},{"id":"01C1VCJNDQW7RN25S24KNP9V4M","description":"A typo Chromium","expected":"$1hromium","patterns":["/(C)hronium/i"],"specs":[{"from":"Chrome is Chronium","to":"Chrome is Chromium"},{"from":"Chrome is chronium","to":"Chrome is chromium"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBJP9EDR7KS993CMQAR","description":"","expected":"Virtual DOM","patterns":["/VirtualDOM/i"],"specs":[{"from":"VirtualDOM is virtual dom object","to":"Virtual DOM is virtual dom object"}],"tags":["noun","opinion","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBGZPBHMB3DMMXMJ0CJ","description":"","expected":"ES.next","patterns":["ES next"],"specs":[{"from":"ES nextでは","to":"ES.nextでは"}],"tags":["JavaScript"]},{"id":"01BQ92YW70P4BSGE4ZBMKECATV","description":"","expected":"PostCSS","patterns":["/PostCSS/i"],"specs":[{"from":"postcss","to":"PostCSS"}],"tags":["noun","CSS"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YZ6QCTPXGPWWJ5NWT6NC","description":"","expected":"Virtual Machine","patterns":["Virtual machine"],"specs":[{"from":"MSEdgeが使えるWindows 10のVirtual machine(VM)が公開された","to":"MSEdgeが使えるWindows 10のVirtual Machine(VM)が公開された"}],"tags":["noun","opinion"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYSHHTGFD78FF7NB4RX9","description":"","expected":"HTML5 Rocks","patterns":["/HTML5Rocks/i","/HTML5Rock/i"],"specs":[{"from":"HTML5Rockに現在公開されている翻訳記事のまとめ","to":"HTML5 Rocksに現在公開されている翻訳記事のまとめ"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01DTET96387SQ3VYTXHYSX5BYS","description":"WebAssembly (abbreviated Wasm) https://webassembly.org/","expected":"Wasm","patterns":["/wasm/i"],"allows":[],"specs":[{"from":"wasm","to":"Wasm"},{"from":"WAsm","to":"Wasm"},{"from":"WebAssembly (abbreviated Wasm) ","to":"WebAssembly (abbreviated Wasm) "}],"tags":["noun"]},{"id":"01BQ92YYSD9K713DCXTFGNDENS","description":"Reference https://leanpub.com/","expected":"Leanpub","patterns":["/leanpub/i"],"specs":[{"from":"leanpub","to":"Leanpub"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YZ6QR8RJKA5Y8W2F9NMY","description":"Reference https://webkit.org/","expected":"WebKit","patterns":["/webkit/i"],"specs":[{"from":"これはwebkitです","to":"これはWebKitです"},{"from":"XXXwebkit","to":"XXXwebkit"},{"from":"node-webkit","to":"node-webkit"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YXWVY5EFQNE4ZV8K0HS5","description":"","expected":"package.json","patterns":["packge.json"],"specs":[],"tags":["typo"]},{"id":"01EF8QSDGRB63DFJ54B68AKN7J","description":"webpack is lower-case https://webpack.js.org/","expected":"webpack","patterns":["/\\bwebpack\\b/i"],"allows":[],"specs":[{"from":"webpack","to":"webpack"},{"from":"WebPack","to":"webpack"},{"from":"BuildWebPack is OK","to":"BuildWebPack is OK"}],"tags":["noun"]},{"id":"01BQ92YZ6R35HCYAZGN18RB35E","description":"Reference https://www.microsoft.com/windows","expected":"Windows $1","patterns":["/Windows (\\d+)/i"],"specs":[{"from":"OK windows","to":"OK windows"},{"from":"windows 10","to":"Windows 10"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBGNAKFHY1TFA9Z3KTC","description":"Reference https://w3c.github.io/webcomponents/explainer/","expected":"Web Components","patterns":["/WebComponents/i","/web components/i"],"specs":[{"from":"WebComponentsについてのWeeklyメールマガジン","to":"Web ComponentsについてのWeeklyメールマガジン"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01D1SNYB7AA69NTAEBT1X651RB","description":"Brotliはbr","expected":"$1rotli","patterns":["/\\b(b)rottli\\b/i"],"allows":[],"specs":[{"from":"brottli compression","to":"brotli compression"},{"from":"brottli圧縮","to":"brotli圧縮"},{"from":"BrotliはbrotliでOK","to":"BrotliはbrotliでOK"}],"tags":["noun"]},{"id":"01BQ92YXWFVPNRGMBZ3RZNN1RD","description":"","expected":"Foundation","patterns":["Fundation"],"specs":[{"from":"Fundation","to":"Foundation"}],"tags":["typo"]},{"id":"01BQ92YXWTV260J4A7W8TSWEXH","description":"","expected":"Workaround","patterns":["Workaound"],"specs":[{"from":"iOS7と8のquerySelectorバグの対処(Workaound)","to":"iOS7と8のquerySelectorバグの対処(Workaround)"}],"tags":["typo"]},{"id":"01BQ92YYBJBBNRPR2WYHMDYPPG","description":"Reference http://source-map.github.io/","expected":"Source Map","patterns":["/Source Map/i","/SourceMap/i"],"specs":[{"from":"多段SourceMapに対応","to":"多段Source Mapに対応"},{"from":"SourceMap","to":"Source Map"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YXWQ02R8SE1ZZHCG89P5","description":"","expected":"Property","patterns":["/propety/i"],"specs":[{"from":"propety","to":"Property"}],"tags":["typo"]},{"id":"01F0W5YS57VWFW3DAP3EC92D6Y","description":"https://github.com/sveltejs/kit","expected":"SvelteKit","patterns":["/SveleteKit/i"],"allows":[],"specs":[{"from":"SveleteKit","to":"SvelteKit"},{"from":"SvelteKit","to":"SvelteKit"}],"tags":["noun"]},{"id":"01BQ92YXWR8T1QBP2JSKFH74RK","description":"","expected":"CoffeeScript","patterns":["CoffeScript"],"specs":[{"from":"CoffeScriptからES6","to":"CoffeeScriptからES6"}],"tags":["typo"]},{"id":"01BQ92YYSHMN57CX27SAJQT2W0","description":"","expected":"Sauce Labs","patterns":["SauceLabs"],"specs":[],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBJENZB6M480KCJ0J99","description":"Reference http://jquery.com/","expected":"jQuery","patterns":["/jquery/i"],"specs":[{"from":"Jquery","to":"jQuery"},{"from":"jquery","to":"jQuery"},{"from":"jquery-ui","to":"jquery-ui"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YW6Y5KA9YRC4HRPWZTVV","description":"","expected":"Flexbox","patterns":["Fluxbox"],"specs":[{"from":"CSS Fluxboxでは","to":"CSS Flexboxでは"}],"tags":["noun","CSS"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YWJG32Z679PF9CHJJD5R","description":"","expected":"$1デフォルトで有効$2","patterns":["/(?:(が)デフォルト有効)|(?:デフォルト有効(に))/"],"specs":[],"tags":["opinion","jser.info"]},{"id":"01BQ92YXWTM3A3CG10MT3FCD55","description":"","expected":"Performance","patterns":["/peformance/i"],"specs":[{"from":"ブラウザ上でどうやって計測するかやPeformance Timelineなどの仕様について","to":"ブラウザ上でどうやって計測するかやPerformance Timelineなどの仕様について"}],"tags":["typo"]},{"id":"01BQ92YYBHB83ZNFWK5WBA58B7","description":"JavaScript is not Java Script","expected":"JavaScript","patterns":["/javascript/i","/Java Script/i"],"specs":[{"from":"javascript","to":"JavaScript"},{"from":"java script","to":"JavaScript"},{"from":"Java script","to":"JavaScript"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBJDYYAR7DFH7M57G1P","description":"AngularJS(1.x)はJSを付けます","expected":"AngularJS","patterns":["/Angular\\.js/i","/angularjs/i"],"specs":[{"from":"Angular.js","to":"AngularJS"}],"tags":["JavaScript"]},{"id":"01F0W5YS57VWFW3DAP3EC92D6Z","description":"https://github.com/sveltejs","expected":"$1velte","patterns":["/(s)velete/i"],"allows":[],"specs":[{"from":"svelete","to":"svelte"},{"from":"Svelete","to":"Svelte"}],"tags":["noun"]},{"id":"01BQ92YYBH2H42AT29Y4BP84FA","description":"Reference https://www.w3.org/TR/touch-events/","expected":"Touch Events","patterns":["/Touch Event/i","/Touch Events/i"],"specs":[{"from":"Touch Event、Fullscreen APIなどのサポートなど","to":"Touch Events、Fullscreen APIなどのサポートなど"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YZ6Q0Y22BVKAVFC4VV1N","description":"Reference http://ocaml.org/","expected":"OCaml","patterns":["/OCaml/i"],"specs":[{"from":"ocaml","to":"OCaml"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YZ6NT1NACB4X0DC8XHFH","description":"","expected":"$1 EAP","patterns":["/([0-9\\.]+)EAP/"],"specs":[],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BSADQQDT7DEBJT25555YCQ14","description":"Reference https://www.mysql.com/","expected":"MySQL","patterns":["/mysql/i"],"specs":[{"from":"mysql is a database.","to":"MySQL is a database."},{"from":"Oracle mysql","to":"Oracle MySQL"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYSF66CHGRP4MX5X6P0Q","description":"O'reilly is OK. But oreilly is not OK","expected":"Oreilly","patterns":["/Oreilly/i"],"specs":[{"from":"oreilly","to":"Oreilly"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]}] \ No newline at end of file +[{"id":"01BQ92YXWTV260J4A7W8TSWEXH","description":"","expected":"Workaround","patterns":["Workaound"],"specs":[{"from":"iOS7と8のquerySelectorバグの対処(Workaound)","to":"iOS7と8のquerySelectorバグの対処(Workaround)"}],"tags":["typo"]},{"id":"01BQ92YWJHZ5T3JBSQCTZHPV86","description":"","expected":"などが追加","patterns":["など追加"],"specs":[{"from":"Class expressionやGeneratorのサポートなど追加されています。","to":"Class expressionやGeneratorのサポートなどが追加されています。"}],"tags":["opinion","jser.info"]},{"id":"01BQ92YXWQ02R8SE1ZZHCG89P5","description":"","expected":"Property","patterns":["/propety/i"],"specs":[{"from":"propety","to":"Property"}],"tags":["typo"]},{"id":"01F0W5YS57VWFW3DAP3EC92D6Z","description":"https://github.com/sveltejs","expected":"$1velte","patterns":["/(s)velete/i"],"allows":[],"specs":[{"from":"svelete","to":"svelte"},{"from":"Svelete","to":"Svelte"}],"tags":["noun"]},{"id":"01BQ92YWWJ9EM0EEGVP0CRKC73","description":"漢字で書かず、ひらがなで書くと読みやすくなります","expected":"$1とき","patterns":["/(の)時(?!点|代|々|間|期)/"],"specs":[{"from":"その時","to":"そのとき"},{"from":"その時点","to":"その時点"},{"from":"その時代","to":"その時代"},{"from":"それまでの時間","to":"それまでの時間"},{"from":"同時","to":"同時"},{"from":"実行時","to":"実行時"},{"from":"利用時","to":"利用時"},{"from":"開発時","to":"開発時"},{"from":"執筆時","to":"執筆時"},{"from":"時点","to":"時点"},{"from":"時代","to":"時代"},{"from":"時間","to":"時間"}],"tags":["opinion","表記統一"]},{"id":"01DTET96387SQ3VYTXHYSX5BYS","description":"WebAssembly (abbreviated Wasm) https://webassembly.org/","expected":"Wasm","patterns":["/wasm/i"],"allows":[],"specs":[{"from":"wasm","to":"Wasm"},{"from":"WAsm","to":"Wasm"},{"from":"WebAssembly (abbreviated Wasm) ","to":"WebAssembly (abbreviated Wasm) "}],"tags":["noun"]},{"id":"01C1VCJNDQW7RN25S24KNP9V4M","description":"A typo Chromium","expected":"$1hromium","patterns":["/(C)hronium/i"],"specs":[{"from":"Chrome is Chronium","to":"Chrome is Chromium"},{"from":"Chrome is chronium","to":"Chrome is chromium"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YWWH8TVT2N8FT61TTDNH","description":"ひらがなで書かず、漢字で書くと読みやすくなります","expected":"$1中","patterns":["/(その)なか/","/(世界|日)じゅう/"],"specs":[],"tags":["opinion","表記統一"]},{"id":"01BQ92YYBHGYFTTDANV4RNC3CJ","description":"Should have a space between words. Reference https://github.com/w3c/ServiceWorker","expected":"$1 $2","patterns":["/(service)(worker)/i"],"specs":[{"from":"This is serviceworker?","to":"This is service worker?"},{"from":"ServiceWorker","to":"Service Worker"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYSD9K713DCXTFGNDENS","description":"Reference https://leanpub.com/","expected":"Leanpub","patterns":["/leanpub/i"],"specs":[{"from":"leanpub","to":"Leanpub"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01F0W5YS57VWFW3DAP3EC92D6Y","description":"https://github.com/sveltejs/kit","expected":"SvelteKit","patterns":["/SveleteKit/i"],"allows":[],"specs":[{"from":"SveleteKit","to":"SvelteKit"},{"from":"SvelteKit","to":"SvelteKit"}],"tags":["noun"]},{"id":"01BW0P1BD0VKQQMZ4E947WVMJ1","description":"See https://developer.mozilla.org/en-US/Add-ons/WebExtensions/What_are_WebExtensions","expected":"WebExtension$1","patterns":["/Web Extension(s)?/"],"specs":[{"from":"Web Extension","to":"WebExtension"},{"from":"Extensions for Firefox are built using WebExtensions APIs","to":"Extensions for Firefox are built using WebExtensions APIs"},{"from":"WebExtension APIs are designed to be compatible with Chrome and Opera extensions","to":"WebExtension APIs are designed to be compatible with Chrome and Opera extensions"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBGWJZC59XKSNA53X2C","description":"Reference https://www.w3.org/TR/webstorage/","expected":"localStorage","patterns":["localstorage","local storage"],"specs":[{"from":"localstorage is a parts of webstorage","to":"localStorage is a parts of webstorage"},{"from":"local storage is a parts of webstorage","to":"localStorage is a parts of webstorage"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YXWQDKGCA9W74SKW7VST","description":"","expected":"Arrow Function","patterns":["Array Function"],"specs":[],"tags":["typo"]},{"id":"01BQ92YYBJCY50GECA6CQH874F","description":"Reference https://www.emberjs.com/","expected":"Ember.js","patterns":["/Ember\\.js/i"],"specs":[{"from":"ember.js","to":"Ember.js"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBJDYYAR7DFH7M57G1P","description":"AngularJS(1.x)はJSを付けます","expected":"AngularJS","patterns":["/Angular\\.js/i","/angularjs/i"],"specs":[{"from":"Angular.js","to":"AngularJS"}],"tags":["JavaScript"]},{"id":"01BQ92YW70P4BSGE4ZBMKECATV","description":"","expected":"PostCSS","patterns":["/PostCSS/i"],"specs":[{"from":"postcss","to":"PostCSS"}],"tags":["noun","CSS"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YZ6Q0Y22BVKAVFC4VV1N","description":"Reference http://ocaml.org/","expected":"OCaml","patterns":["/OCaml/i"],"specs":[{"from":"ocaml","to":"OCaml"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYSHHTGFD78FF7NB4RX9","description":"","expected":"HTML5 Rocks","patterns":["/HTML5Rocks/i","/HTML5Rock/i"],"specs":[{"from":"HTML5Rockに現在公開されている翻訳記事のまとめ","to":"HTML5 Rocksに現在公開されている翻訳記事のまとめ"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBJK6WW9Y09W7TF1YTT","description":"See http://todomvc.com/","expected":"TodoMVC","patterns":["/todomvc/i"],"specs":[{"from":"todomvc is todo app.","to":"TodoMVC is todo app."}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YW6Y5KA9YRC4HRPWZTVV","description":"","expected":"Flexbox","patterns":["Fluxbox"],"specs":[{"from":"CSS Fluxboxでは","to":"CSS Flexboxでは"}],"tags":["noun","CSS"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBH4NNWB305Y1TD7B6N","description":"Reference https://www.w3.org/TR/webaudio/","expected":"Web Audio API","patterns":["/WebAudio API/i","/Web AudioAPI/i","/Web Audio API/i"],"specs":[{"from":"All scheduled times in the WebAudio API are relative to the value of currentTime.","to":"All scheduled times in the Web Audio API are relative to the value of currentTime."}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBH2EZP1E4KVNDMXYV9","description":"Pointer Eventsに統一","expected":"Pointer Events","patterns":["/pointer event/i","/pointer events/i"],"specs":[{"from":"Pointer Events","to":"Pointer Events"},{"from":"MSEdgeの対応、pointer eventsなど対応、","to":"MSEdgeの対応、Pointer Eventsなど対応、"},{"from":"MSEdgeの対応、pointer eventなど対応、","to":"MSEdgeの対応、Pointer Eventsなど対応、"},{"from":"pointer-events","to":"pointer-events"}],"tags":["JavaScript","noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YZ6NT1NACB4X0DC8XHFH","description":"","expected":"$1 EAP","patterns":["/([0-9\\.]+)EAP/"],"specs":[],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBJTDA6WF56ZE9PKP8F","description":"Reference http://underscorejs.org/","expected":"Underscore.js","patterns":["/underscore.js/i"],"specs":[],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBJXRCA80R6BCA4SS7K","description":"Angular(2.0~)","expected":"Angular","patterns":["/angular/i"],"specs":[{"from":"angular","to":"Angular"},{"from":"angulardart","to":"angulardart"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBHB83ZNFWK5WBA58B7","description":"JavaScript is not Java Script","expected":"JavaScript","patterns":["/javascript/i","/Java Script/i"],"specs":[{"from":"javascript","to":"JavaScript"},{"from":"java script","to":"JavaScript"},{"from":"Java script","to":"JavaScript"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBGSXM66TN1ZSJH177M","description":"","expected":"ES6 Classes","patterns":["/\\bES6 classes\\b/i"],"specs":[{"from":"ES6 classes","to":"ES6 Classes"}],"tags":["JavaScript"]},{"id":"01BQ92YYBJP9EDR7KS993CMQAR","description":"","expected":"Virtual DOM","patterns":["/VirtualDOM/i"],"specs":[{"from":"VirtualDOM is virtual dom object","to":"Virtual DOM is virtual dom object"}],"tags":["noun","opinion","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YXWVJ7HG4TDWA45RH297","description":"","expected":"webpack","patterns":["/\\bwebpac(?!k)\\b/"],"specs":[{"from":"webpacのビルド速度改善についてのスライド","to":"webpackのビルド速度改善についてのスライド"}],"tags":["typo"]},{"id":"01D1SNYB7AA69NTAEBT1X651RB","description":"Brotliはbr","expected":"$1rotli","patterns":["/\\b(b)rottli\\b/i"],"allows":[],"specs":[{"from":"brottli compression","to":"brotli compression"},{"from":"brottli圧縮","to":"brotli圧縮"},{"from":"BrotliはbrotliでOK","to":"BrotliはbrotliでOK"}],"tags":["noun"]},{"id":"01BQ92YYBJBBNRPR2WYHMDYPPG","description":"Reference http://source-map.github.io/","expected":"Source Map","patterns":["/Source Map/i","/SourceMap/i"],"specs":[{"from":"多段SourceMapに対応","to":"多段Source Mapに対応"},{"from":"SourceMap","to":"Source Map"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01EKJAAAXCZR005PDSTRVT24QZ","description":"Jamstackに統一された https://github.com/jamstack/jamstack.org/issues/279","expected":"Jamstack","patterns":["/\\bJAMStack\\b/i"],"allows":[],"specs":[{"from":"Jamstack","to":"Jamstack"},{"from":"JAMStack is old word","to":"Jamstack is old word"},{"from":"jamjasmstack","to":"jamjasmstack"}],"tags":["noun"]},{"id":"01BQ92YXWR8T1QBP2JSKFH74RK","description":"","expected":"CoffeeScript","patterns":["CoffeScript"],"specs":[{"from":"CoffeScriptからES6","to":"CoffeeScriptからES6"}],"tags":["typo"]},{"id":"01BQ92YYBJENZB6M480KCJ0J99","description":"Reference http://jquery.com/","expected":"jQuery","patterns":["/jquery/i"],"specs":[{"from":"Jquery","to":"jQuery"},{"from":"jquery","to":"jQuery"},{"from":"jquery-ui","to":"jquery-ui"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YXWVMAMKQ3VK2DNYNCCP","description":"Customのtypoです","expected":"Custom","patterns":["/Custome\\b/i"],"specs":[{"from":"WebVRをCustome Elementのタグで書く","to":"WebVRをCustom Elementのタグで書く"}],"tags":["typo"]},{"id":"01BQ92YZ6R35HCYAZGN18RB35E","description":"Reference https://www.microsoft.com/windows","expected":"Windows $1","patterns":["/Windows (\\d+)/i"],"specs":[{"from":"OK windows","to":"OK windows"},{"from":"windows 10","to":"Windows 10"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01CF6NR1Q7XWC035B9XJXNB852","description":"typo","expected":"$1nimation","patterns":["/(a)nimation/i"],"specs":[{"from":"Animation","to":"Animation"},{"from":"CSS Animation","to":"CSS Animation"},{"from":"CSS animations","to":"CSS animations"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01EKP3RFQ18K47EYH1ZKB5E4R5","description":"https://github.com/GoogleChrome/lighthouse","expected":"Lighthouse","patterns":["/\\bLighthouse\\b/i"],"allows":["{{COMBINATION_WORD}}"],"specs":[{"from":" lighthouse","to":" Lighthouse"},{"from":"lighthouse-cli","to":"lighthouse-cli"},{"from":"Lighthouse analyzes web apps","to":"Lighthouse analyzes web apps"}],"tags":["noun"]},{"id":"01BQ92YYBGZPBHMB3DMMXMJ0CJ","description":"","expected":"ES.next","patterns":["ES next"],"specs":[{"from":"ES nextでは","to":"ES.nextでは"}],"tags":["JavaScript"]},{"id":"01BQ92YYSHHRNMZPY2VG4991B7","description":"","expected":"Travis CI","patterns":["/TravisCI/i"],"specs":[{"from":"TravisCI is a service","to":"Travis CI is a service"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YXWVY5EFQNE4ZV8K0HS5","description":"","expected":"package.json","patterns":["packge.json"],"specs":[],"tags":["typo"]},{"id":"01BQ92YZ6QR8RJKA5Y8W2F9NMY","description":"Reference https://webkit.org/","expected":"WebKit","patterns":["/webkit/i"],"specs":[{"from":"これはwebkitです","to":"これはWebKitです"},{"from":"XXXwebkit","to":"XXXwebkit"},{"from":"node-webkit","to":"node-webkit"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01EF8QSDGRB63DFJ54B68AKN7J","description":"webpack is lower-case https://webpack.js.org/","expected":"webpack","patterns":["/\\bwebpack\\b/i"],"allows":[],"specs":[{"from":"webpack","to":"webpack"},{"from":"WebPack","to":"webpack"},{"from":"BuildWebPack is OK","to":"BuildWebPack is OK"}],"tags":["noun"]},{"id":"01BQ92YXWVT5PGRGQCH1ZZ6S7V","description":"","expected":"operator","patterns":["oeprator"],"specs":[],"tags":["typo"]},{"id":"01BQ92YYBEFBXEHH8T8HC8RCRD","description":"Reference https://www.ecma-international.org/publications/standards/Ecma-262.htm","expected":"ECMAScript $1","patterns":["/ECMAScript([0-9]+)/i","/ECMA Script([0-9]+)/i"],"specs":[{"from":"ECMASCRIPT5","to":"ECMAScript 5"},{"from":"ecmascript2015","to":"ECMAScript 2015"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBGNT2ZA7SCBGZP4XW8","description":"Reference https://www.w3.org/TR/webstorage/","expected":"sessionStorage","patterns":["sessionstorage","session storage"],"specs":[{"from":"sessionstorage is a parts of webstorage","to":"sessionStorage is a parts of webstorage"},{"from":"session storage is a parts of webstorage","to":"sessionStorage is a parts of webstorage"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQMSTDZCWH8P81E7PBG9BMQS","description":"importのtypoです","expected":"Import","patterns":["Impport"],"specs":[{"from":"Dynamic Impport","to":"Dynamic Import"},{"from":"Impporter","to":"Importer"}],"tags":["typo"]},{"id":"01BQ92YXWTM3A3CG10MT3FCD55","description":"","expected":"Performance","patterns":["/peformance/i"],"specs":[{"from":"ブラウザ上でどうやって計測するかやPeformance Timelineなどの仕様について","to":"ブラウザ上でどうやって計測するかやPerformance Timelineなどの仕様について"}],"tags":["typo"]},{"id":"01BQ92YYBHA4FM6A82V2ZT0V91","description":"Reference https://www.w3.org/TR/html-imports/","expected":"HTML Imports","patterns":["/HTML Import/i"],"specs":[{"from":"HTML import","to":"HTML Imports"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYSF66CHGRP4MX5X6P0Q","description":"O'reilly is OK. But oreilly is not OK","expected":"Oreilly","patterns":["/Oreilly/i"],"specs":[{"from":"oreilly","to":"Oreilly"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YXWFVPNRGMBZ3RZNN1RD","description":"","expected":"Foundation","patterns":["Fundation"],"specs":[{"from":"Fundation","to":"Foundation"}],"tags":["typo"]},{"id":"01BQ92YWJG32Z679PF9CHJJD5R","description":"","expected":"$1デフォルトで有効$2","patterns":["/(?:(が)デフォルト有効)|(?:デフォルト有効(に))/"],"specs":[],"tags":["opinion","jser.info"]},{"id":"01BQ92YYSHMN57CX27SAJQT2W0","description":"","expected":"Sauce Labs","patterns":["SauceLabs"],"specs":[],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01FB0ZGJEK2GEKX4AM7KCT1E8Y","description":"WHAWG typo","expected":"WHATWG","patterns":["/\\bWHAWG\\b/","/\\bWHATWGT\\b/"],"allows":[],"specs":[{"from":"WHATWG","to":"WHATWG"},{"from":"WHAWG","to":"WHATWG"},{"from":"WHATWG","to":"WHATWG"}],"tags":["noun"]},{"id":"01BQ92YZ6QCTPXGPWWJ5NWT6NC","description":"","expected":"Virtual Machine","patterns":["Virtual machine"],"specs":[{"from":"MSEdgeが使えるWindows 10のVirtual machine(VM)が公開された","to":"MSEdgeが使えるWindows 10のVirtual Machine(VM)が公開された"}],"tags":["noun","opinion"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBH2H42AT29Y4BP84FA","description":"Reference https://www.w3.org/TR/touch-events/","expected":"Touch Events","patterns":["/Touch Event/i","/Touch Events/i"],"specs":[{"from":"Touch Event、Fullscreen APIなどのサポートなど","to":"Touch Events、Fullscreen APIなどのサポートなど"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBGQBRYXEZK5ZRRK1WW","description":"","expected":"Ecma標準","patterns":["ECMA標準"],"specs":[],"tags":["JavaScript"]},{"id":"01BQ92YZ6QD58PVYY3FE7QD2S5","description":"Reference http://www.seleniumhq.org/projects/webdriver/","expected":"WebDriver","patterns":["/WebDriver/i","/Web Driver/i"],"specs":[{"from":"Web Driver is designed in a simpler and more concise programming interface","to":"WebDriver is designed in a simpler and more concise programming interface"},{"from":"webdriver is designed in a simpler and more concise programming interface","to":"WebDriver is designed in a simpler and more concise programming interface"},{"from":"WebdriverIO is OK.","to":"WebdriverIO is OK."}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BSADQQDT7DEBJT25555YCQ14","description":"Reference https://www.mysql.com/","expected":"MySQL","patterns":["/mysql/i"],"specs":[{"from":"mysql is a database.","to":"MySQL is a database."},{"from":"Oracle mysql","to":"Oracle MySQL"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01DSDJ2ZNSB644ZB0SD53C62X5","description":"","expected":"Archive","patterns":["Archieve"],"allows":[],"specs":[{"from":"HTTP Archieve","to":"HTTP Archive"}],"tags":["noun"]},{"id":"01F4VMKJAEKHMANZVFFR9D6DJA","description":"AWS CloudFront https://aws.amazon.com/jp/cloudfront/","expected":"CloudFront","patterns":["/\\bCloudFront\\b/i"],"allows":["{{COMBINATION_WORD}}"],"specs":[{"from":"Cloudront","to":"Cloudront"},{"from":"Cloudfront","to":"CloudFront"},{"from":"awscloudfront","to":"awscloudfront"}],"tags":["noun"]},{"id":"01BQ92YYBGNAKFHY1TFA9Z3KTC","description":"Reference https://w3c.github.io/webcomponents/explainer/","expected":"Web Components","patterns":["/WebComponents/i","/web components/i"],"specs":[{"from":"WebComponentsについてのWeeklyメールマガジン","to":"Web ComponentsについてのWeeklyメールマガジン"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]}] \ No newline at end of file diff --git a/.cache/kvs-node-localstorage/proofdict-lastUpdated b/.cache/kvs-node-localstorage/proofdict-lastUpdated index eb46ae7..b4e361f 100644 --- a/.cache/kvs-node-localstorage/proofdict-lastUpdated +++ b/.cache/kvs-node-localstorage/proofdict-lastUpdated @@ -1 +1 @@ -1626641939288 \ No newline at end of file +1627016035046 \ No newline at end of file diff --git a/articles/4bf52f97165058.md b/articles/4bf52f97165058.md index 067fff1..59fc510 100644 --- a/articles/4bf52f97165058.md +++ b/articles/4bf52f97165058.md @@ -14,8 +14,6 @@ esa を CMS に VuePress v2 でドキュメントサイトを作る機会があ 社内のドキュメント管理ツールとして esa を使っていて、esa に社内文書がまとまっていた & ドキュメント執筆のメインとなるビジネスサイドのメンバーが esa での MarkDown 執筆に慣れていたからです。 -また、esa の GitHub Webhook 機能がとても便利で、下書き - # 基本構成 # 工夫ポイント
diff --git a/.cache/kvs-node-localstorage/proofdict b/.cache/kvs-node-localstorage/proofdict index e0a1b0f..efec0d7 100644 --- a/.cache/kvs-node-localstorage/proofdict +++ b/.cache/kvs-node-localstorage/proofdict @@ -1 +1 @@ -[{"id":"01BQ92YXWTV260J4A7W8TSWEXH","description":"","expected":"Workaround","patterns":["Workaound"],"specs":[{"from":"iOS7と8のquerySelectorバグの対処(Workaound)","to":"iOS7と8のquerySelectorバグの対処(Workaround)"}],"tags":["typo"]},{"id":"01BQ92YWJHZ5T3JBSQCTZHPV86","description":"","expected":"などが追加","patterns":["など追加"],"specs":[{"from":"Class expressionやGeneratorのサポートなど追加されています。","to":"Class expressionやGeneratorのサポートなどが追加されています。"}],"tags":["opinion","jser.info"]},{"id":"01BQ92YXWQ02R8SE1ZZHCG89P5","description":"","expected":"Property","patterns":["/propety/i"],"specs":[{"from":"propety","to":"Property"}],"tags":["typo"]},{"id":"01F0W5YS57VWFW3DAP3EC92D6Z","description":"https://github.com/sveltejs","expected":"$1velte","patterns":["/(s)velete/i"],"allows":[],"specs":[{"from":"svelete","to":"svelte"},{"from":"Svelete","to":"Svelte"}],"tags":["noun"]},{"id":"01BQ92YWWJ9EM0EEGVP0CRKC73","description":"漢字で書かず、ひらがなで書くと読みやすくなります","expected":"$1とき","patterns":["/(の)時(?!点|代|々|間|期)/"],"specs":[{"from":"その時","to":"そのとき"},{"from":"その時点","to":"その時点"},{"from":"その時代","to":"その時代"},{"from":"それまでの時間","to":"それまでの時間"},{"from":"同時","to":"同時"},{"from":"実行時","to":"実行時"},{"from":"利用時","to":"利用時"},{"from":"開発時","to":"開発時"},{"from":"執筆時","to":"執筆時"},{"from":"時点","to":"時点"},{"from":"時代","to":"時代"},{"from":"時間","to":"時間"}],"tags":["opinion","表記統一"]},{"id":"01DTET96387SQ3VYTXHYSX5BYS","description":"WebAssembly (abbreviated Wasm) https://webassembly.org/","expected":"Wasm","patterns":["/wasm/i"],"allows":[],"specs":[{"from":"wasm","to":"Wasm"},{"from":"WAsm","to":"Wasm"},{"from":"WebAssembly (abbreviated Wasm) ","to":"WebAssembly (abbreviated Wasm) "}],"tags":["noun"]},{"id":"01C1VCJNDQW7RN25S24KNP9V4M","description":"A typo Chromium","expected":"$1hromium","patterns":["/(C)hronium/i"],"specs":[{"from":"Chrome is Chronium","to":"Chrome is Chromium"},{"from":"Chrome is chronium","to":"Chrome is chromium"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YWWH8TVT2N8FT61TTDNH","description":"ひらがなで書かず、漢字で書くと読みやすくなります","expected":"$1中","patterns":["/(その)なか/","/(世界|日)じゅう/"],"specs":[],"tags":["opinion","表記統一"]},{"id":"01BQ92YYBHGYFTTDANV4RNC3CJ","description":"Should have a space between words. Reference https://github.com/w3c/ServiceWorker","expected":"$1 $2","patterns":["/(service)(worker)/i"],"specs":[{"from":"This is serviceworker?","to":"This is service worker?"},{"from":"ServiceWorker","to":"Service Worker"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYSD9K713DCXTFGNDENS","description":"Reference https://leanpub.com/","expected":"Leanpub","patterns":["/leanpub/i"],"specs":[{"from":"leanpub","to":"Leanpub"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01F0W5YS57VWFW3DAP3EC92D6Y","description":"https://github.com/sveltejs/kit","expected":"SvelteKit","patterns":["/SveleteKit/i"],"allows":[],"specs":[{"from":"SveleteKit","to":"SvelteKit"},{"from":"SvelteKit","to":"SvelteKit"}],"tags":["noun"]},{"id":"01BW0P1BD0VKQQMZ4E947WVMJ1","description":"See https://developer.mozilla.org/en-US/Add-ons/WebExtensions/What_are_WebExtensions","expected":"WebExtension$1","patterns":["/Web Extension(s)?/"],"specs":[{"from":"Web Extension","to":"WebExtension"},{"from":"Extensions for Firefox are built using WebExtensions APIs","to":"Extensions for Firefox are built using WebExtensions APIs"},{"from":"WebExtension APIs are designed to be compatible with Chrome and Opera extensions","to":"WebExtension APIs are designed to be compatible with Chrome and Opera extensions"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBGWJZC59XKSNA53X2C","description":"Reference https://www.w3.org/TR/webstorage/","expected":"localStorage","patterns":["localstorage","local storage"],"specs":[{"from":"localstorage is a parts of webstorage","to":"localStorage is a parts of webstorage"},{"from":"local storage is a parts of webstorage","to":"localStorage is a parts of webstorage"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YXWQDKGCA9W74SKW7VST","description":"","expected":"Arrow Function","patterns":["Array Function"],"specs":[],"tags":["typo"]},{"id":"01BQ92YYBJCY50GECA6CQH874F","description":"Reference https://www.emberjs.com/","expected":"Ember.js","patterns":["/Ember\\.js/i"],"specs":[{"from":"ember.js","to":"Ember.js"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBJDYYAR7DFH7M57G1P","description":"AngularJS(1.x)はJSを付けます","expected":"AngularJS","patterns":["/Angular\\.js/i","/angularjs/i"],"specs":[{"from":"Angular.js","to":"AngularJS"}],"tags":["JavaScript"]},{"id":"01BQ92YW70P4BSGE4ZBMKECATV","description":"","expected":"PostCSS","patterns":["/PostCSS/i"],"specs":[{"from":"postcss","to":"PostCSS"}],"tags":["noun","CSS"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YZ6Q0Y22BVKAVFC4VV1N","description":"Reference http://ocaml.org/","expected":"OCaml","patterns":["/OCaml/i"],"specs":[{"from":"ocaml","to":"OCaml"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYSHHTGFD78FF7NB4RX9","description":"","expected":"HTML5 Rocks","patterns":["/HTML5Rocks/i","/HTML5Rock/i"],"specs":[{"from":"HTML5Rockに現在公開されている翻訳記事のまとめ","to":"HTML5 Rocksに現在公開されている翻訳記事のまとめ"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBJK6WW9Y09W7TF1YTT","description":"See http://todomvc.com/","expected":"TodoMVC","patterns":["/todomvc/i"],"specs":[{"from":"todomvc is todo app.","to":"TodoMVC is todo app."}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YW6Y5KA9YRC4HRPWZTVV","description":"","expected":"Flexbox","patterns":["Fluxbox"],"specs":[{"from":"CSS Fluxboxでは","to":"CSS Flexboxでは"}],"tags":["noun","CSS"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBH4NNWB305Y1TD7B6N","description":"Reference https://www.w3.org/TR/webaudio/","expected":"Web Audio API","patterns":["/WebAudio API/i","/Web AudioAPI/i","/Web Audio API/i"],"specs":[{"from":"All scheduled times in the WebAudio API are relative to the value of currentTime.","to":"All scheduled times in the Web Audio API are relative to the value of currentTime."}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBH2EZP1E4KVNDMXYV9","description":"Pointer Eventsに統一","expected":"Pointer Events","patterns":["/pointer event/i","/pointer events/i"],"specs":[{"from":"Pointer Events","to":"Pointer Events"},{"from":"MSEdgeの対応、pointer eventsなど対応、","to":"MSEdgeの対応、Pointer Eventsなど対応、"},{"from":"MSEdgeの対応、pointer eventなど対応、","to":"MSEdgeの対応、Pointer Eventsなど対応、"},{"from":"pointer-events","to":"pointer-events"}],"tags":["JavaScript","noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YZ6NT1NACB4X0DC8XHFH","description":"","expected":"$1 EAP","patterns":["/([0-9\\.]+)EAP/"],"specs":[],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBJTDA6WF56ZE9PKP8F","description":"Reference http://underscorejs.org/","expected":"Underscore.js","patterns":["/underscore.js/i"],"specs":[],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBJXRCA80R6BCA4SS7K","description":"Angular(2.0~)","expected":"Angular","patterns":["/angular/i"],"specs":[{"from":"angular","to":"Angular"},{"from":"angulardart","to":"angulardart"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBHB83ZNFWK5WBA58B7","description":"JavaScript is not Java Script","expected":"JavaScript","patterns":["/javascript/i","/Java Script/i"],"specs":[{"from":"javascript","to":"JavaScript"},{"from":"java script","to":"JavaScript"},{"from":"Java script","to":"JavaScript"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBGSXM66TN1ZSJH177M","description":"","expected":"ES6 Classes","patterns":["/\\bES6 classes\\b/i"],"specs":[{"from":"ES6 classes","to":"ES6 Classes"}],"tags":["JavaScript"]},{"id":"01BQ92YYBJP9EDR7KS993CMQAR","description":"","expected":"Virtual DOM","patterns":["/VirtualDOM/i"],"specs":[{"from":"VirtualDOM is virtual dom object","to":"Virtual DOM is virtual dom object"}],"tags":["noun","opinion","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YXWVJ7HG4TDWA45RH297","description":"","expected":"webpack","patterns":["/\\bwebpac(?!k)\\b/"],"specs":[{"from":"webpacのビルド速度改善についてのスライド","to":"webpackのビルド速度改善についてのスライド"}],"tags":["typo"]},{"id":"01D1SNYB7AA69NTAEBT1X651RB","description":"Brotliはbr","expected":"$1rotli","patterns":["/\\b(b)rottli\\b/i"],"allows":[],"specs":[{"from":"brottli compression","to":"brotli compression"},{"from":"brottli圧縮","to":"brotli圧縮"},{"from":"BrotliはbrotliでOK","to":"BrotliはbrotliでOK"}],"tags":["noun"]},{"id":"01BQ92YYBJBBNRPR2WYHMDYPPG","description":"Reference http://source-map.github.io/","expected":"Source Map","patterns":["/Source Map/i","/SourceMap/i"],"specs":[{"from":"多段SourceMapに対応","to":"多段Source Mapに対応"},{"from":"SourceMap","to":"Source Map"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01EKJAAAXCZR005PDSTRVT24QZ","description":"Jamstackに統一された https://github.com/jamstack/jamstack.org/issues/279","expected":"Jamstack","patterns":["/\\bJAMStack\\b/i"],"allows":[],"specs":[{"from":"Jamstack","to":"Jamstack"},{"from":"JAMStack is old word","to":"Jamstack is old word"},{"from":"jamjasmstack","to":"jamjasmstack"}],"tags":["noun"]},{"id":"01BQ92YXWR8T1QBP2JSKFH74RK","description":"","expected":"CoffeeScript","patterns":["CoffeScript"],"specs":[{"from":"CoffeScriptからES6","to":"CoffeeScriptからES6"}],"tags":["typo"]},{"id":"01BQ92YYBJENZB6M480KCJ0J99","description":"Reference http://jquery.com/","expected":"jQuery","patterns":["/jquery/i"],"specs":[{"from":"Jquery","to":"jQuery"},{"from":"jquery","to":"jQuery"},{"from":"jquery-ui","to":"jquery-ui"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YXWVMAMKQ3VK2DNYNCCP","description":"Customのtypoです","expected":"Custom","patterns":["/Custome\\b/i"],"specs":[{"from":"WebVRをCustome Elementのタグで書く","to":"WebVRをCustom Elementのタグで書く"}],"tags":["typo"]},{"id":"01BQ92YZ6R35HCYAZGN18RB35E","description":"Reference https://www.microsoft.com/windows","expected":"Windows $1","patterns":["/Windows (\\d+)/i"],"specs":[{"from":"OK windows","to":"OK windows"},{"from":"windows 10","to":"Windows 10"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01CF6NR1Q7XWC035B9XJXNB852","description":"typo","expected":"$1nimation","patterns":["/(a)nimation/i"],"specs":[{"from":"Animation","to":"Animation"},{"from":"CSS Animation","to":"CSS Animation"},{"from":"CSS animations","to":"CSS animations"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01EKP3RFQ18K47EYH1ZKB5E4R5","description":"https://github.com/GoogleChrome/lighthouse","expected":"Lighthouse","patterns":["/\\bLighthouse\\b/i"],"allows":["{{COMBINATION_WORD}}"],"specs":[{"from":" lighthouse","to":" Lighthouse"},{"from":"lighthouse-cli","to":"lighthouse-cli"},{"from":"Lighthouse analyzes web apps","to":"Lighthouse analyzes web apps"}],"tags":["noun"]},{"id":"01BQ92YYBGZPBHMB3DMMXMJ0CJ","description":"","expected":"ES.next","patterns":["ES next"],"specs":[{"from":"ES nextでは","to":"ES.nextでは"}],"tags":["JavaScript"]},{"id":"01BQ92YYSHHRNMZPY2VG4991B7","description":"","expected":"Travis CI","patterns":["/TravisCI/i"],"specs":[{"from":"TravisCI is a service","to":"Travis CI is a service"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YXWVY5EFQNE4ZV8K0HS5","description":"","expected":"package.json","patterns":["packge.json"],"specs":[],"tags":["typo"]},{"id":"01BQ92YZ6QR8RJKA5Y8W2F9NMY","description":"Reference https://webkit.org/","expected":"WebKit","patterns":["/webkit/i"],"specs":[{"from":"これはwebkitです","to":"これはWebKitです"},{"from":"XXXwebkit","to":"XXXwebkit"},{"from":"node-webkit","to":"node-webkit"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01EF8QSDGRB63DFJ54B68AKN7J","description":"webpack is lower-case https://webpack.js.org/","expected":"webpack","patterns":["/\\bwebpack\\b/i"],"allows":[],"specs":[{"from":"webpack","to":"webpack"},{"from":"WebPack","to":"webpack"},{"from":"BuildWebPack is OK","to":"BuildWebPack is OK"}],"tags":["noun"]},{"id":"01BQ92YXWVT5PGRGQCH1ZZ6S7V","description":"","expected":"operator","patterns":["oeprator"],"specs":[],"tags":["typo"]},{"id":"01BQ92YYBEFBXEHH8T8HC8RCRD","description":"Reference https://www.ecma-international.org/publications/standards/Ecma-262.htm","expected":"ECMAScript $1","patterns":["/ECMAScript([0-9]+)/i","/ECMA Script([0-9]+)/i"],"specs":[{"from":"ECMASCRIPT5","to":"ECMAScript 5"},{"from":"ecmascript2015","to":"ECMAScript 2015"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBGNT2ZA7SCBGZP4XW8","description":"Reference https://www.w3.org/TR/webstorage/","expected":"sessionStorage","patterns":["sessionstorage","session storage"],"specs":[{"from":"sessionstorage is a parts of webstorage","to":"sessionStorage is a parts of webstorage"},{"from":"session storage is a parts of webstorage","to":"sessionStorage is a parts of webstorage"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQMSTDZCWH8P81E7PBG9BMQS","description":"importのtypoです","expected":"Import","patterns":["Impport"],"specs":[{"from":"Dynamic Impport","to":"Dynamic Import"},{"from":"Impporter","to":"Importer"}],"tags":["typo"]},{"id":"01BQ92YXWTM3A3CG10MT3FCD55","description":"","expected":"Performance","patterns":["/peformance/i"],"specs":[{"from":"ブラウザ上でどうやって計測するかやPeformance Timelineなどの仕様について","to":"ブラウザ上でどうやって計測するかやPerformance Timelineなどの仕様について"}],"tags":["typo"]},{"id":"01BQ92YYBHA4FM6A82V2ZT0V91","description":"Reference https://www.w3.org/TR/html-imports/","expected":"HTML Imports","patterns":["/HTML Import/i"],"specs":[{"from":"HTML import","to":"HTML Imports"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYSF66CHGRP4MX5X6P0Q","description":"O'reilly is OK. But oreilly is not OK","expected":"Oreilly","patterns":["/Oreilly/i"],"specs":[{"from":"oreilly","to":"Oreilly"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YXWFVPNRGMBZ3RZNN1RD","description":"","expected":"Foundation","patterns":["Fundation"],"specs":[{"from":"Fundation","to":"Foundation"}],"tags":["typo"]},{"id":"01BQ92YWJG32Z679PF9CHJJD5R","description":"","expected":"$1デフォルトで有効$2","patterns":["/(?:(が)デフォルト有効)|(?:デフォルト有効(に))/"],"specs":[],"tags":["opinion","jser.info"]},{"id":"01BQ92YYSHMN57CX27SAJQT2W0","description":"","expected":"Sauce Labs","patterns":["SauceLabs"],"specs":[],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01FB0ZGJEK2GEKX4AM7KCT1E8Y","description":"WHAWG typo","expected":"WHATWG","patterns":["/\\bWHAWG\\b/","/\\bWHATWGT\\b/"],"allows":[],"specs":[{"from":"WHATWG","to":"WHATWG"},{"from":"WHAWG","to":"WHATWG"},{"from":"WHATWG","to":"WHATWG"}],"tags":["noun"]},{"id":"01BQ92YZ6QCTPXGPWWJ5NWT6NC","description":"","expected":"Virtual Machine","patterns":["Virtual machine"],"specs":[{"from":"MSEdgeが使えるWindows 10のVirtual machine(VM)が公開された","to":"MSEdgeが使えるWindows 10のVirtual Machine(VM)が公開された"}],"tags":["noun","opinion"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBH2H42AT29Y4BP84FA","description":"Reference https://www.w3.org/TR/touch-events/","expected":"Touch Events","patterns":["/Touch Event/i","/Touch Events/i"],"specs":[{"from":"Touch Event、Fullscreen APIなどのサポートなど","to":"Touch Events、Fullscreen APIなどのサポートなど"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBGQBRYXEZK5ZRRK1WW","description":"","expected":"Ecma標準","patterns":["ECMA標準"],"specs":[],"tags":["JavaScript"]},{"id":"01BQ92YZ6QD58PVYY3FE7QD2S5","description":"Reference http://www.seleniumhq.org/projects/webdriver/","expected":"WebDriver","patterns":["/WebDriver/i","/Web Driver/i"],"specs":[{"from":"Web Driver is designed in a simpler and more concise programming interface","to":"WebDriver is designed in a simpler and more concise programming interface"},{"from":"webdriver is designed in a simpler and more concise programming interface","to":"WebDriver is designed in a simpler and more concise programming interface"},{"from":"WebdriverIO is OK.","to":"WebdriverIO is OK."}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BSADQQDT7DEBJT25555YCQ14","description":"Reference https://www.mysql.com/","expected":"MySQL","patterns":["/mysql/i"],"specs":[{"from":"mysql is a database.","to":"MySQL is a database."},{"from":"Oracle mysql","to":"Oracle MySQL"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01DSDJ2ZNSB644ZB0SD53C62X5","description":"","expected":"Archive","patterns":["Archieve"],"allows":[],"specs":[{"from":"HTTP Archieve","to":"HTTP Archive"}],"tags":["noun"]},{"id":"01F4VMKJAEKHMANZVFFR9D6DJA","description":"AWS CloudFront https://aws.amazon.com/jp/cloudfront/","expected":"CloudFront","patterns":["/\\bCloudFront\\b/i"],"allows":["{{COMBINATION_WORD}}"],"specs":[{"from":"Cloudront","to":"Cloudront"},{"from":"Cloudfront","to":"CloudFront"},{"from":"awscloudfront","to":"awscloudfront"}],"tags":["noun"]},{"id":"01BQ92YYBGNAKFHY1TFA9Z3KTC","description":"Reference https://w3c.github.io/webcomponents/explainer/","expected":"Web Components","patterns":["/WebComponents/i","/web components/i"],"specs":[{"from":"WebComponentsについてのWeeklyメールマガジン","to":"Web ComponentsについてのWeeklyメールマガジン"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]}] \ No newline at end of file +[{"id":"01BQ92YWWKFGQT7012C26Z9PDK","description":"","expected":"かもしれない","patterns":["かも知れない"],"specs":[],"tags":["opinion","表記統一"]},{"id":"01BQ92YYBGZPBHMB3DMMXMJ0CJ","description":"","expected":"ES.next","patterns":["ES next"],"specs":[{"from":"ES nextでは","to":"ES.nextでは"}],"tags":["JavaScript"]},{"id":"01D1SNYB7AA69NTAEBT1X651RB","description":"Brotliはbr","expected":"$1rotli","patterns":["/\\b(b)rottli\\b/i"],"allows":[],"specs":[{"from":"brottli compression","to":"brotli compression"},{"from":"brottli圧縮","to":"brotli圧縮"},{"from":"BrotliはbrotliでOK","to":"BrotliはbrotliでOK"}],"tags":["noun"]},{"id":"01BQ92YZ6QCTPXGPWWJ5NWT6NC","description":"","expected":"Virtual Machine","patterns":["Virtual machine"],"specs":[{"from":"MSEdgeが使えるWindows 10のVirtual machine(VM)が公開された","to":"MSEdgeが使えるWindows 10のVirtual Machine(VM)が公開された"}],"tags":["noun","opinion"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YXWFVPNRGMBZ3RZNN1RD","description":"","expected":"Foundation","patterns":["Fundation"],"specs":[{"from":"Fundation","to":"Foundation"}],"tags":["typo"]},{"id":"01EKP3RFQ18K47EYH1ZKB5E4R5","description":"https://github.com/GoogleChrome/lighthouse","expected":"Lighthouse","patterns":["/\\bLighthouse\\b/i"],"allows":["{{COMBINATION_WORD}}"],"specs":[{"from":" lighthouse","to":" Lighthouse"},{"from":"lighthouse-cli","to":"lighthouse-cli"},{"from":"Lighthouse analyzes web apps","to":"Lighthouse analyzes web apps"}],"tags":["noun"]},{"id":"01BQ92YXWVT5PGRGQCH1ZZ6S7V","description":"","expected":"operator","patterns":["oeprator"],"specs":[],"tags":["typo"]},{"id":"01F4VMKJAEKHMANZVFFR9D6DJA","description":"AWS CloudFront https://aws.amazon.com/jp/cloudfront/","expected":"CloudFront","patterns":["/\\bCloudFront\\b/i"],"allows":["{{COMBINATION_WORD}}"],"specs":[{"from":"Cloudront","to":"Cloudront"},{"from":"Cloudfront","to":"CloudFront"},{"from":"awscloudfront","to":"awscloudfront"}],"tags":["noun"]},{"id":"01BQ92YYSF66CHGRP4MX5X6P0Q","description":"O'reilly is OK. But oreilly is not OK","expected":"Oreilly","patterns":["/Oreilly/i"],"specs":[{"from":"oreilly","to":"Oreilly"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YWWV1AKBHZDQ6D9GA3ZQ","description":"(数詞に付く場合)は漢字を使う","expected":"$1通り","patterns":["/(\\d)とおり/"],"specs":[{"from":"(例)2とおりの方法","to":"(例)2通りの方法"}],"tags":["opinion","表記統一"]},{"id":"01BQ92YYBHA4FM6A82V2ZT0V91","description":"Reference https://www.w3.org/TR/html-imports/","expected":"HTML Imports","patterns":["/HTML Import/i"],"specs":[{"from":"HTML import","to":"HTML Imports"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBEFBXEHH8T8HC8RCRD","description":"Reference https://www.ecma-international.org/publications/standards/Ecma-262.htm","expected":"ECMAScript $1","patterns":["/ECMAScript([0-9]+)/i","/ECMA Script([0-9]+)/i"],"specs":[{"from":"ECMASCRIPT5","to":"ECMAScript 5"},{"from":"ecmascript2015","to":"ECMAScript 2015"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BW0P1BD0VKQQMZ4E947WVMJ1","description":"See https://developer.mozilla.org/en-US/Add-ons/WebExtensions/What_are_WebExtensions","expected":"WebExtension$1","patterns":["/Web Extension(s)?/"],"specs":[{"from":"Web Extension","to":"WebExtension"},{"from":"Extensions for Firefox are built using WebExtensions APIs","to":"Extensions for Firefox are built using WebExtensions APIs"},{"from":"WebExtension APIs are designed to be compatible with Chrome and Opera extensions","to":"WebExtension APIs are designed to be compatible with Chrome and Opera extensions"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBJP9EDR7KS993CMQAR","description":"","expected":"Virtual DOM","patterns":["/VirtualDOM/i"],"specs":[{"from":"VirtualDOM is virtual dom object","to":"Virtual DOM is virtual dom object"}],"tags":["noun","opinion","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYSHMN57CX27SAJQT2W0","description":"","expected":"Sauce Labs","patterns":["SauceLabs"],"specs":[],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBHGYFTTDANV4RNC3CJ","description":"Should have a space between words. Reference https://github.com/w3c/ServiceWorker","expected":"$1 $2","patterns":["/(service)(worker)/i"],"specs":[{"from":"This is serviceworker?","to":"This is service worker?"},{"from":"ServiceWorker","to":"Service Worker"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBGQBRYXEZK5ZRRK1WW","description":"","expected":"Ecma標準","patterns":["ECMA標準"],"specs":[],"tags":["JavaScript"]},{"id":"01BQ92YYSD9K713DCXTFGNDENS","description":"Reference https://leanpub.com/","expected":"Leanpub","patterns":["/leanpub/i"],"specs":[{"from":"leanpub","to":"Leanpub"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQMSTDZCWH8P81E7PBG9BMQS","description":"importのtypoです","expected":"Import","patterns":["Impport"],"specs":[{"from":"Dynamic Impport","to":"Dynamic Import"},{"from":"Impporter","to":"Importer"}],"tags":["typo"]},{"id":"01BQ92YYBH2EZP1E4KVNDMXYV9","description":"Pointer Eventsに統一","expected":"Pointer Events","patterns":["/pointer event/i","/pointer events/i"],"specs":[{"from":"Pointer Events","to":"Pointer Events"},{"from":"MSEdgeの対応、pointer eventsなど対応、","to":"MSEdgeの対応、Pointer Eventsなど対応、"},{"from":"MSEdgeの対応、pointer eventなど対応、","to":"MSEdgeの対応、Pointer Eventsなど対応、"},{"from":"pointer-events","to":"pointer-events"}],"tags":["JavaScript","noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YXWVJ7HG4TDWA45RH297","description":"","expected":"webpack","patterns":["/\\bwebpac(?!k)\\b/"],"specs":[{"from":"webpacのビルド速度改善についてのスライド","to":"webpackのビルド速度改善についてのスライド"}],"tags":["typo"]},{"id":"01BQ92YYBJTDA6WF56ZE9PKP8F","description":"Reference http://underscorejs.org/","expected":"Underscore.js","patterns":["/underscore.js/i"],"specs":[],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YXWVY5EFQNE4ZV8K0HS5","description":"","expected":"package.json","patterns":["packge.json"],"specs":[],"tags":["typo"]},{"id":"01DTET96387SQ3VYTXHYSX5BYS","description":"WebAssembly (abbreviated Wasm) https://webassembly.org/","expected":"Wasm","patterns":["/wasm/i"],"allows":[],"specs":[{"from":"wasm","to":"Wasm"},{"from":"WAsm","to":"Wasm"},{"from":"WebAssembly (abbreviated Wasm) ","to":"WebAssembly (abbreviated Wasm) "}],"tags":["noun"]},{"id":"01BQ92YXWQDKGCA9W74SKW7VST","description":"","expected":"Arrow Function","patterns":["Array Function"],"specs":[],"tags":["typo"]},{"id":"01BQ92YXWTV260J4A7W8TSWEXH","description":"","expected":"Workaround","patterns":["Workaound"],"specs":[{"from":"iOS7と8のquerySelectorバグの対処(Workaound)","to":"iOS7と8のquerySelectorバグの対処(Workaround)"}],"tags":["typo"]},{"id":"01BQ92YZ6R35HCYAZGN18RB35E","description":"Reference https://www.microsoft.com/windows","expected":"Windows $1","patterns":["/Windows (\\d+)/i"],"specs":[{"from":"OK windows","to":"OK windows"},{"from":"windows 10","to":"Windows 10"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01C1VCJNDQW7RN25S24KNP9V4M","description":"A typo Chromium","expected":"$1hromium","patterns":["/(C)hronium/i"],"specs":[{"from":"Chrome is Chronium","to":"Chrome is Chromium"},{"from":"Chrome is chronium","to":"Chrome is chromium"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01EKJAAAXCZR005PDSTRVT24QZ","description":"Jamstackに統一された https://github.com/jamstack/jamstack.org/issues/279","expected":"Jamstack","patterns":["/\\bJAMStack\\b/i"],"allows":[],"specs":[{"from":"Jamstack","to":"Jamstack"},{"from":"JAMStack is old word","to":"Jamstack is old word"},{"from":"jamjasmstack","to":"jamjasmstack"}],"tags":["noun"]},{"id":"01BQ92YW70P4BSGE4ZBMKECATV","description":"","expected":"PostCSS","patterns":["/PostCSS/i"],"specs":[{"from":"postcss","to":"PostCSS"}],"tags":["noun","CSS"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBGSXM66TN1ZSJH177M","description":"","expected":"ES6 Classes","patterns":["/\\bES6 classes\\b/i"],"specs":[{"from":"ES6 classes","to":"ES6 Classes"}],"tags":["JavaScript"]},{"id":"01BQ92YW6Y5KA9YRC4HRPWZTVV","description":"","expected":"Flexbox","patterns":["Fluxbox"],"specs":[{"from":"CSS Fluxboxでは","to":"CSS Flexboxでは"}],"tags":["noun","CSS"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YZ6QR8RJKA5Y8W2F9NMY","description":"Reference https://webkit.org/","expected":"WebKit","patterns":["/webkit/i"],"specs":[{"from":"これはwebkitです","to":"これはWebKitです"},{"from":"XXXwebkit","to":"XXXwebkit"},{"from":"node-webkit","to":"node-webkit"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBJENZB6M480KCJ0J99","description":"Reference http://jquery.com/","expected":"jQuery","patterns":["/jquery/i"],"specs":[{"from":"Jquery","to":"jQuery"},{"from":"jquery","to":"jQuery"},{"from":"jquery-ui","to":"jquery-ui"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01CF6NR1Q7XWC035B9XJXNB852","description":"typo","expected":"$1nimation","patterns":["/(a)nimation/i"],"specs":[{"from":"Animation","to":"Animation"},{"from":"CSS Animation","to":"CSS Animation"},{"from":"CSS animations","to":"CSS animations"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YWJG32Z679PF9CHJJD5R","description":"","expected":"$1デフォルトで有効$2","patterns":["/(?:(が)デフォルト有効)|(?:デフォルト有効(に))/"],"specs":[],"tags":["opinion","jser.info"]},{"id":"01EF8QSDGRB63DFJ54B68AKN7J","description":"webpack is lower-case https://webpack.js.org/","expected":"webpack","patterns":["/\\bwebpack\\b/i"],"allows":[],"specs":[{"from":"webpack","to":"webpack"},{"from":"WebPack","to":"webpack"},{"from":"BuildWebPack is OK","to":"BuildWebPack is OK"}],"tags":["noun"]},{"id":"01BQ92YYBJDYYAR7DFH7M57G1P","description":"AngularJS(1.x)はJSを付けます","expected":"AngularJS","patterns":["/Angular\\.js/i","/angularjs/i"],"specs":[{"from":"Angular.js","to":"AngularJS"}],"tags":["JavaScript"]},{"id":"01DSDJ2ZNSB644ZB0SD53C62X5","description":"","expected":"Archive","patterns":["Archieve"],"allows":[],"specs":[{"from":"HTTP Archieve","to":"HTTP Archive"}],"tags":["noun"]},{"id":"01BQ92YYBGWJZC59XKSNA53X2C","description":"Reference https://www.w3.org/TR/webstorage/","expected":"localStorage","patterns":["localstorage","local storage"],"specs":[{"from":"localstorage is a parts of webstorage","to":"localStorage is a parts of webstorage"},{"from":"local storage is a parts of webstorage","to":"localStorage is a parts of webstorage"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YXWTM3A3CG10MT3FCD55","description":"","expected":"Performance","patterns":["/peformance/i"],"specs":[{"from":"ブラウザ上でどうやって計測するかやPeformance Timelineなどの仕様について","to":"ブラウザ上でどうやって計測するかやPerformance Timelineなどの仕様について"}],"tags":["typo"]},{"id":"01BQ92YZ6QD58PVYY3FE7QD2S5","description":"Reference http://www.seleniumhq.org/projects/webdriver/","expected":"WebDriver","patterns":["/WebDriver/i","/Web Driver/i"],"specs":[{"from":"Web Driver is designed in a simpler and more concise programming interface","to":"WebDriver is designed in a simpler and more concise programming interface"},{"from":"webdriver is designed in a simpler and more concise programming interface","to":"WebDriver is designed in a simpler and more concise programming interface"},{"from":"WebdriverIO is OK.","to":"WebdriverIO is OK."}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBJXRCA80R6BCA4SS7K","description":"Angular(2.0~)","expected":"Angular","patterns":["/angular/i"],"specs":[{"from":"angular","to":"Angular"},{"from":"angulardart","to":"angulardart"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YZ6Q0Y22BVKAVFC4VV1N","description":"Reference http://ocaml.org/","expected":"OCaml","patterns":["/OCaml/i"],"specs":[{"from":"ocaml","to":"OCaml"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YWWH8TVT2N8FT61TTDNH","description":"ひらがなで書かず、漢字で書くと読みやすくなります","expected":"$1中","patterns":["/(その)なか/","/(世界|日)じゅう/"],"specs":[],"tags":["opinion","表記統一"]},{"id":"01BQ92YZ6NT1NACB4X0DC8XHFH","description":"","expected":"$1 EAP","patterns":["/([0-9\\.]+)EAP/"],"specs":[],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBJK6WW9Y09W7TF1YTT","description":"See http://todomvc.com/","expected":"TodoMVC","patterns":["/todomvc/i"],"specs":[{"from":"todomvc is todo app.","to":"TodoMVC is todo app."}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYSHHRNMZPY2VG4991B7","description":"","expected":"Travis CI","patterns":["/TravisCI/i"],"specs":[{"from":"TravisCI is a service","to":"Travis CI is a service"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01F0W5YS57VWFW3DAP3EC92D6Z","description":"https://github.com/sveltejs","expected":"$1velte","patterns":["/(s)velete/i"],"allows":[],"specs":[{"from":"svelete","to":"svelte"},{"from":"Svelete","to":"Svelte"}],"tags":["noun"]},{"id":"01BQ92YYBGNT2ZA7SCBGZP4XW8","description":"Reference https://www.w3.org/TR/webstorage/","expected":"sessionStorage","patterns":["sessionstorage","session storage"],"specs":[{"from":"sessionstorage is a parts of webstorage","to":"sessionStorage is a parts of webstorage"},{"from":"session storage is a parts of webstorage","to":"sessionStorage is a parts of webstorage"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBHB83ZNFWK5WBA58B7","description":"JavaScript is not Java Script","expected":"JavaScript","patterns":["/javascript/i","/Java Script/i"],"specs":[{"from":"javascript","to":"JavaScript"},{"from":"java script","to":"JavaScript"},{"from":"Java script","to":"JavaScript"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBH2H42AT29Y4BP84FA","description":"Reference https://www.w3.org/TR/touch-events/","expected":"Touch Events","patterns":["/Touch Event/i","/Touch Events/i"],"specs":[{"from":"Touch Event、Fullscreen APIなどのサポートなど","to":"Touch Events、Fullscreen APIなどのサポートなど"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBH4NNWB305Y1TD7B6N","description":"Reference https://www.w3.org/TR/webaudio/","expected":"Web Audio API","patterns":["/WebAudio API/i","/Web AudioAPI/i","/Web Audio API/i"],"specs":[{"from":"All scheduled times in the WebAudio API are relative to the value of currentTime.","to":"All scheduled times in the Web Audio API are relative to the value of currentTime."}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBGNAKFHY1TFA9Z3KTC","description":"Reference https://w3c.github.io/webcomponents/explainer/","expected":"Web Components","patterns":["/WebComponents/i","/web components/i"],"specs":[{"from":"WebComponentsについてのWeeklyメールマガジン","to":"Web ComponentsについてのWeeklyメールマガジン"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BSADQQDT7DEBJT25555YCQ14","description":"Reference https://www.mysql.com/","expected":"MySQL","patterns":["/mysql/i"],"specs":[{"from":"mysql is a database.","to":"MySQL is a database."},{"from":"Oracle mysql","to":"Oracle MySQL"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01F0W5YS57VWFW3DAP3EC92D6Y","description":"https://github.com/sveltejs/kit","expected":"SvelteKit","patterns":["/SveleteKit/i"],"allows":[],"specs":[{"from":"SveleteKit","to":"SvelteKit"},{"from":"SvelteKit","to":"SvelteKit"}],"tags":["noun"]},{"id":"01BQ92YYSHHTGFD78FF7NB4RX9","description":"","expected":"HTML5 Rocks","patterns":["/HTML5Rocks/i","/HTML5Rock/i"],"specs":[{"from":"HTML5Rockに現在公開されている翻訳記事のまとめ","to":"HTML5 Rocksに現在公開されている翻訳記事のまとめ"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBJCY50GECA6CQH874F","description":"Reference https://www.emberjs.com/","expected":"Ember.js","patterns":["/Ember\\.js/i"],"specs":[{"from":"ember.js","to":"Ember.js"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YXWR8T1QBP2JSKFH74RK","description":"","expected":"CoffeeScript","patterns":["CoffeScript"],"specs":[{"from":"CoffeScriptからES6","to":"CoffeeScriptからES6"}],"tags":["typo"]},{"id":"01BQ92YXWVMAMKQ3VK2DNYNCCP","description":"Customのtypoです","expected":"Custom","patterns":["/Custome\\b/i"],"specs":[{"from":"WebVRをCustome Elementのタグで書く","to":"WebVRをCustom Elementのタグで書く"}],"tags":["typo"]},{"id":"01FB0ZGJEK2GEKX4AM7KCT1E8Y","description":"WHAWG typo","expected":"WHATWG","patterns":["/\\bWHAWG\\b/","/\\bWHATWGT\\b/"],"allows":[],"specs":[{"from":"WHATWG","to":"WHATWG"},{"from":"WHAWG","to":"WHATWG"},{"from":"WHATWG","to":"WHATWG"}],"tags":["noun"]},{"id":"01BQ92YXWQ02R8SE1ZZHCG89P5","description":"","expected":"Property","patterns":["/propety/i"],"specs":[{"from":"propety","to":"Property"}],"tags":["typo"]},{"id":"01BQ92YYBJBBNRPR2WYHMDYPPG","description":"Reference http://source-map.github.io/","expected":"Source Map","patterns":["/Source Map/i","/SourceMap/i"],"specs":[{"from":"多段SourceMapに対応","to":"多段Source Mapに対応"},{"from":"SourceMap","to":"Source Map"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]}] \ No newline at end of file diff --git a/.cache/kvs-node-localstorage/proofdict-lastUpdated b/.cache/kvs-node-localstorage/proofdict-lastUpdated index 6a7341f..c5cba75 100644 --- a/.cache/kvs-node-localstorage/proofdict-lastUpdated +++ b/.cache/kvs-node-localstorage/proofdict-lastUpdated @@ -1 +1 @@ -1627271542737 \ No newline at end of file +1628843702837 \ No newline at end of file diff --git a/articles/38f7a866799414.md b/articles/38f7a866799414.md new file mode 100644 index 0000000..d559339 --- /dev/null +++ b/articles/38f7a866799414.md @@ -0,0 +1,197 @@ +--- +title: "[個人開発] Vue3 で「動く」Slack絵文字ジェネレーターを作った話" +emoji: "👨🎨" +type: "tech" # tech: 技術記事 / idea: アイデア +topics: ["個人開発", "Vue3", "TypeScript", "Vercel", "Slack"] +published: true +--- + +先日リリースした個人開発のアプリについて感想や技術スタックなど色々書きます。 + +# どんなアプリを公開した? +以下ツイートで紹介している、 Slack の絵文字スタンプ用のアニ GIF を簡単につくれるアプリを公開しました。 + +https://twitter.com/KawamataRyo/status/1425292135356682248 + +タイミングが良かったのか数多く Retweet してもらえ、 Twitter を初めて初のバズの波動を感じました。アプリ自体はこちらです。とても簡単に試せるのでぜひ使ってもらえると嬉しいです。 + +https://www.animated-emoji-gen.com/ + + +# 技術スタック + +- 言語: TypeScript +- フレームワーク: Vue.js 3 +- ビルドツール: Vite +- インフラ: Vercel + + +Vue3 の SPA を Vite でビルドし、Vercel にデプロイしています。そして絵文字の描画・アニメーション部分は SVG を利用。サーバーは持たず、SVG から GIF の変換も全てフロントエンドで行っています。 + +あまり見せられたものでは無いですが、コードは全て GitHub に公開しています。 + +https://github.com/kawamataryo/animated-emoji-gen + +# 開発いろいろ + +## 開発期間 +[Wakka Time](https://wakatime.com/)をエディタに導入していたので、開発期間のデータが取れました。 + + + +:::message +プロジェクト名が svg-sample になっているのは当初「SVG の練習でもするかー」と軽い気持ちで始めた名残です。 +::: + +8 月 7 日に開発をスタートして、11 日のリリース日までで合計約 39 時間コードを書いていたようです。 + +3 連休で外出出来ないことを良いことに 1 日 10 時間書いている日もあります。 3 連休最終日に妻に「PC やりすぎ💢」とめちゃ怒られたのも納得です。。 + +SVG 操作を初めて触るところから開発をスタートしていることを考慮すると、割と早く形になったのかなと思います。個人開発は勢いが大事だと実感しました。 + + +## 運用費用 + +Vercel の無料プランでホストしているので今のところサーバー代は 0 円です。サーバー実装を持たず、SVG から GIF の変換もフロント側で全て完結したことが維持費用にも貢献しました。 +ただ、一応 [animated-emoji-gen.com](https://www.animated-emoji-gen.com/) のドメインを取得したので、その料金(年間 900 円程)が別途かかっています。 + +## アクセス数の推移 + +初日に公開ツイートがバズったおかげで 1300 ユーザーとかなりのアクセスがありました。しかし、その後は劇的な低下具合・・。 +まだオーガニック検索での流入は期待できないのでしょうがないかなとは思いますが、今後検索からも使ってもらえるようにしていきたいです。 + +また、後述する vue-i18n-next を使って多言語対応したおかげか、海外からのアクセスも数件あります。需要あるのかまだ分からないのですが、今後に期待。 + + + + +# 技術的なポイント +実装するうえでの技術的なポイントを簡単に紹介します。 + +## テキストのSVG Pathへの変換 +絵文字の要素としてテキストを柔軟に扱うために、SVG の`<text>`タグは利用せず、テキストを一度 SVG Path に変換しています。 + +変換には ttf ファイルや otf ファイルを Parse して SVG Path を出力できる [opentype.js](https://github.com/opentypejs)を利用しています。 + +https://github.com/opentypejs/opentype.js + +以下のように Font ファイルをロードして、任意の文字列を渡すことで SVG Path Data を取得できます。 + +```ts +import { load } from "opentype.js"; + +const textToPathData = async (text: string): string => { + const font = await load('使用したいFontファイルへのPath') + return font.getPath(text, 0, 0, 128).toPathData(2) +} +``` + +実際のコードでは、アプリ初期化時と言語変更時に、Noto フォントの各言語ファイルをロードして利用しています。 + +https://github.com/kawamataryo/animated-emoji-gen/blob/main/src/composables/useGenerateFontPath.ts#L95-L116 + + +## SVG PathのViewBoxへのフィット + +128×128 の枠内を GIF として出力する都合上、どのような文字数・改行でも 128×128 の SVG の ViewBox の枠にフィットさせる必要があります。 + + + +このフィットは自動では出来ないので、SVG Path の transform scale のを使って、枠サイズに合わせて文字列の SVG Path を拡大縮小することで対応しています。 + +実装箇所はこちらです。 + +https://github.com/kawamataryo/animated-emoji-gen/blob/main/src/composables/useGenerateFontPath.ts#L64-L91 + +```ts + const textSize = computed(() => { + return rows.value.map((t) => { + if (!font.value) { + return { + height: 0, + width: 0, + }; + } + const { x1, y1, x2, y2 } = font!.value + .getPath(t, 0, 0, viewSize) + .getBoundingBox(); + return { + width: x2 - x1 + 20.8, + height: y2 - y1 + 20.8, + }; + }); + }); + + const transforms = computed(() => { + if (!font.value || !text.value.length) { + return ["scale(1,1)"]; + } + return rows.value.map((t, i) => { + const xScale = viewSize / (textSize.value[i].width + 8); + const yScale = viewSize / textSize.value[i].height / rows.value.length; + return `scale(${xScale}, ${yScale})`; + }); + }); +``` + +opentype.js の`getBoundingBox`を使って描画前に文字のサイズを取得して、それをviewBox の大きさから割ることで、拡大率を出しています。そしてそれを SVG タグの transform にわたすことで、文字数・行に応じてリアクティブにサイズを変更しています。 + +:::message +`+ 8`とか`+ 20.8`などのマジックWordは、良い感じに Fit させるための微調整です。おそらくもっと良い計算方法があるはずですが、思いつかなかった。。 +::: + +## SVG Filter +文字の動き・加工は、SVG Filter に SVG の`<animate>`タグでアニメーションを設定することで実現しています。 + +Filter 自体のコーディングは、[SVG Filters](https://yoksel.github.io/svg-filters/#/)という SVG Filter を GUI で生成できるサイトで作ったものの流用です。とても便利。 + +https://yoksel.github.io/svg-filters/#/ + +## SVGのGIFへの変換 + +ブラウザ上での SVG から GIF への変換は、一番苦労したところです。当初、SVG を Canvas に変換し、そこから GIF にするなど色々試したのですが全く上手くいきませんでした。 + +結局[@yueco](https://twitter.com/yuneco)さんの神記事で紹介されていた方法で対応しました。詳細は記事をご欄ください。 + +https://qiita.com/yuneco/items/e9c21cbb0cf767368b27 + +一部 UI の都合上で処理を調整しているのですが、ほぼほぼ記事で掲載されている`svg2gif.ts`の実装をそのまま利用しています。感謝🙏 + +https://github.com/kawamataryo/animated-emoji-gen/blob/main/src/core/svg2gif.ts + + +## 他言語対応 + +利用ユーザーを増やすため英語圏のユーザーにもアクセスしてもらいたいと思い、[vue-i18n-next](https://github.com/intlify/vue-i18n-next)を使い多言語対応を実装しました。vue-i18n-next はとても直感的な API で多言語化を実現できるのでとてもおすすめです。 + +https://github.com/intlify/vue-i18n-next + +他、今回 vue-i18n-next の開発者である[kazupon](https://twitter.com/kazu_pon?ref_src=twsrc%5Egoogle%7Ctwcamp%5Eserp%7Ctwgr%5Eauthor)さんにもツイートを拾っていただき、性能改善 PR を送ってもらうという奇跡も起こりました。 + +https://github.com/kawamataryo/animated-emoji-gen/pull/2 + +GA 上でも海外からのアクセスが数件確認できているので、多言語対応の意味はあったのかなと思います。今後伸ばしていきたいです。 + +## デザイン + +デザインは CSS フレームワークの[bulma](https://bulma.io/)を利用しています。直感的な class 名でスタイルを調整できるのが好きです。 + +https://bulma.io/ + +他、サイドバーに入力フォーム、中央にタイル状にフォントを描画するというレイアウトについては[@corocon](https://twitter.com/corocn)さんの[Slack Emoji Generator](https://slackemojigen.com/)の神がかったレイアウトをまるっと参考にさせていただきました 🙏 + +自分自身、今までずっとこちらのアプリで絵文字を作っていました。シンプルな UI でとても使いやすいです。 + +https://slackemojigen.com/ + +その他 OG Image や全体のカラーテイストは愚直に Figma と CSS を色々いじりながら、調整しました。結果的に自分なりにはシンプルで見やすい感じになって良かったかなと思います。 + + +# おわりに + +初めて皆に使ってもらえるアプリを個人開発で作ったのですが、様々な方に感想をもらえてとても嬉しかったです。 +また、初日の一時ですが、個人開発アプリの GA を眺めながらニヤニヤするという自分には縁のないと思っていたら楽しみも体験できました。開発自体とても楽しかったので今後も animated-emoji-gen.com を継続して維持・改善していきたいです。 + +他、性能改善やFilter追加のプルリクエストはいつでも歓迎なので気軽に送ってください。 + +https://github.com/kawamataryo/animated-emoji-gen \ No newline at end of file diff --git a/articles/b6f679bfe11261.md b/articles/b6f679bfe11261.md new file mode 100644 index 0000000..1ab398c --- /dev/null +++ b/articles/b6f679bfe11261.md @@ -0,0 +1,93 @@ +--- +title: "真面目にOSSを公開する際にやってみたこと・意識したこと" +emoji: "📦" +type: "tech" # tech: 技術記事 / idea: アイデア +topics: ["vue", "github", "githubActions", "oss"] +published: false +--- +初めて真面目に自分のコードを OSS として公開するうえで、色々試行錯誤したことを書きます。 + +:::message +「真面目に」の基準は過去の自分が公開したリポジトリに比べてです 🙏 まだまだ至らないところ多いと思うので、気軽にコメント頂けると嬉しいです。 +::: + +# 何を公開した? +[Vue Word Highlighter](https://github.com/kawamataryo/vue-word-highlighter) という Vue.js のコンポーネントライブラリを公開しました。 +機能はとても単純で、文字列と検索クエリを渡すと、検索クエリに合致した文字列の一部をハイライト(`<mark>`タグ又は任意のタグ囲む)するというものです。 + +https://github.com/kawamataryo/vue-word-highlighter + +業務で検索ハイライトの実装を試していた際に良さそうな実装方法を見つけ、せっかくだから汎用的な機能にして OSS として公開してみようと思い立ちました。 +そして公開するなら真面目に環境整備して皆に使ってもらえるものにしたいと思いました。 + + +# 公開までにやってみたこと + +公開までにやってみたことを書きます。 + +## READMEをちゃんと書く +人は見た目が 9 割ではないですが、OSS の顔と言ったら README なので、ひと目でちゃんとしてそうな OSS 感を出すために README は自分なりに色々工夫してみました。 + +### ロゴを作る +使われている OSS にはほぼロゴがある気がします。なので、Google Font で良さそうな書体を適当に探しハイライトしただけの単純なものですが、ロゴを作成しました。ロゴの完成度はともかく、あるのとないのでは大分印象が変わると思います。 + + + +### Shields.ioでバッジを作る +Shields.io の API で CI の状況や npm の download 数などのバッジを作りました。最新バージョンがなんなのか、どれくらい利用者がいるのかひと目で分かって良いです。 + + + +https://shields.io/ + + +### サンプルコードを多めに丁寧に使い方を書く +当たり前ですが、初めて見た人が使いやすいように、Install から簡単な使い方、オプショナルな設定まで自分なりに丁寧に書いてみました。英語は、DeepL 翻訳全開なので、あまりあっているか自信がないですが、サンプルコードを多めに書くことで、なんとか雰囲気は伝わるのではと思います。 + + +## CI環境を整備する +- テストの話 +- ESLint の話 +- husky +- GitHub Actions の話 + +## CD環境を整備する +- commit-lint +- Semantic-release の話 +- GitHub Actions の話 + + +## すぐ使えるデモサイトを作る +何か機能を試す際にいちいちローカルに落とす必要なくサクッと試せると便利です。 +なので今回の vue-word-highlighter でも機能をライトに試せるデモサイトをしっかり目に作りました。 + +https://kawamataryo.github.io/vue-word-highlighter/ + +デモサイト自体も同リポジトリで管理して、GitHub Actions で GitHub Pages にデプロイしているので低コストです。 + +また、デモサイト以外にも実際にコードを書き換えながら試せる場所があると便利かなと思い Code Sandbox も用意しました。 + +@[codesandbox](https://codesandbox.io/embed/vue3-word-highlighter-example-u2bhe?autoresize=1&fontsize=14&hidenavigation=1&module=%2Fsrc%2FApp.vue&theme=dark) + +## 既存OSSとの差別化を考える +機能はとても単純で、割とよくある UI で使われるものなので類似ライブラリは色々ありました。それらと同じものを公開しても、使ってもらえる可能性は少ないと思います。 +なので今回の差別化として、Vue3 でも Vu2 でも使えるというのを差別化ポイントにしました。 +おそらく今は Vue2 から Vue3 への移行期で、新規に追加する Plugin については移行時に障害にならないかを検討するのかなと思い、その際に障害にならないものがよいと考えたのがきっかけです。 + +機能的には Vue2、Vue3 両方に対応したライブラリを作れる [Vue-demi](https://github.com/vueuse/vue-demi) を内部的に使って実現しています。 + +https://github.com/vueuse/vue-demi + + +## ディレクトリ構成をきれいにする +- mono レポにした話 + + +## 依存モジュールの更新環境 +- renovate の導入 + +## 広報を頑張る +- Twitter での告知、英語での告知、&この記事 +- madewith vue への登録 + +# 終わりに \ No newline at end of file diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..6c8088d --- /dev/null +++ b/package-lock.json @@ -0,0 +1,12739 @@ +{ + "name": "zen-articles", + "version": "1.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "@proofdict/textlint-rule-proofdict": "^3.1.1", + "@textlint-ja/textlint-rule-no-insert-dropping-sa": "^1.0.1", + "apollo-server-micro": "^2.19.2", + "textlint": "^11.6.3", + "textlint-filter-rule-comments": "^1.2.2", + "textlint-filter-rule-whitelist": "^2.0.0", + "textlint-rule-abbr-within-parentheses": "^1.0.2", + "textlint-rule-footnote-order": "^1.0.3", + "textlint-rule-general-novel-style-ja": "^1.3.0", + "textlint-rule-ja-hiragana-fukushi": "^1.2.0", + "textlint-rule-ja-hiragana-hojodoushi": "^1.0.4", + "textlint-rule-ja-hiragana-keishikimeishi": "^1.0.2", + "textlint-rule-ja-unnatural-alphabet": "^2.0.1", + "textlint-rule-ng-word": "^1.0.0", + "textlint-rule-no-mixed-zenkaku-and-hankaku-alphabet": "^1.0.1", + "textlint-rule-period-in-list-item": "^0.3.2", + "textlint-rule-prefer-tari-tari": "^1.0.3", + "textlint-rule-preset-ja-spacing": "^2.0.2", + "textlint-rule-preset-ja-technical-writing": "^3.1.3", + "textlint-rule-preset-jtf-style": "^2.3.4", + "textlint-rule-prh": "^5.3.0", + "textlint-rule-spellcheck-tech-word": "^5.0.0", + "zenn-cli": "^0.1.93" + } + }, + "node_modules/@apollo/protobufjs": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@apollo/protobufjs/-/protobufjs-1.0.5.tgz", + "integrity": "sha512-ZtyaBH1icCgqwIGb3zrtopV2D5Q8yxibkJzlaViM08eOhTQc7rACdYu0pfORFfhllvdMZ3aq69vifYHszY4gNA==", + "hasInstallScript": true, + "license": "BSD-3-Clause", + "dependencies": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/long": "^4.0.0", + "@types/node": "^10.1.0", + "long": "^4.0.0" + }, + "bin": { + "apollo-pbjs": "bin/pbjs", + "apollo-pbts": "bin/pbts" + } + }, + "node_modules/@apollo/protobufjs/node_modules/@types/node": { + "version": "10.17.55", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.55.tgz", + "integrity": "sha512-koZJ89uLZufDvToeWO5BrC4CR4OUfHnUz2qoPs/daQH6qq3IN62QFxCTZ+bKaCE0xaoCAJYE4AXre8AbghCrhg==", + "license": "MIT" + }, + "node_modules/@apollographql/apollo-tools": { + "version": "0.4.9", + "resolved": "https://registry.npmjs.org/@apollographql/apollo-tools/-/apollo-tools-0.4.9.tgz", + "integrity": "sha512-M50pk8oo3CGTu4waGOklIX3YtTZoPfWG9K/G9WB8NpyQGA1OwYTiBFv94XqUtKElTDoFwoMXpMQd3Wy5dINvxA==", + "license": "MIT", + "dependencies": { + "apollo-env": "^0.6.6" + }, + "engines": { + "node": ">=8", + "npm": ">=6" + } + }, + "node_modules/@apollographql/graphql-playground-html": { + "version": "1.6.27", + "resolved": "https://registry.npmjs.org/@apollographql/graphql-playground-html/-/graphql-playground-html-1.6.27.tgz", + "integrity": "sha512-tea2LweZvn6y6xFV11K0KC8ETjmm52mQrW+ezgB2O/aTQf8JGyFmMcRPFgUaQZeHbWdm8iisDC6EjOKsXu0nfw==", + "license": "MIT", + "dependencies": { + "xss": "^1.0.8" + } + }, + "node_modules/@apollographql/graphql-upload-8-fork": { + "version": "8.1.3", + "resolved": "https://registry.npmjs.org/@apollographql/graphql-upload-8-fork/-/graphql-upload-8-fork-8.1.3.tgz", + "integrity": "sha512-ssOPUT7euLqDXcdVv3Qs4LoL4BPtfermW1IOouaqEmj36TpHYDmYDIbKoSQxikd9vtMumFnP87OybH7sC9fJ6g==", + "license": "MIT", + "dependencies": { + "@types/express": "*", + "@types/fs-capacitor": "*", + "@types/koa": "*", + "busboy": "^0.3.1", + "fs-capacitor": "^2.0.4", + "http-errors": "^1.7.3", + "object-path": "^0.11.4" + }, + "engines": { + "node": ">=8.5" + }, + "peerDependencies": { + "graphql": "0.13.1 - 15" + } + }, + "node_modules/@apollographql/graphql-upload-8-fork/node_modules/http-errors": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.0.tgz", + "integrity": "sha512-4I8r0C5JDhT5VkvI47QktDW75rNlGVsUf/8hzjCC/wkWI/jdTRmBb9aI7erSG82r1bjKY3F6k28WnsVxB1C73A==", + "license": "MIT", + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@apollographql/graphql-upload-8-fork/node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "license": "ISC" + }, + "node_modules/@azu/format-text": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@azu/format-text/-/format-text-1.0.1.tgz", + "integrity": "sha1-aWc1CpRkD2sChVFpvYl85U1s6+I=", + "license": "BSD-3-Clause" + }, + "node_modules/@azu/style-format": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@azu/style-format/-/style-format-1.0.0.tgz", + "integrity": "sha1-5wGH+Khi4ZGxvObAJo8TrNOlayA=", + "license": "WTFPL", + "dependencies": { + "@azu/format-text": "^1.0.1" + } + }, + "node_modules/@babel/runtime": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.8.tgz", + "integrity": "sha512-twj3L8Og5SaCRCErB4x4ajbvBIVV77CGeFglHpeg5WC5FF8TZzBWXtTJ4MqaD9QszLYTtr+IsaAL2rEUevb+eg==", + "dependencies": { + "regenerator-runtime": "^0.13.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bahmutov/data-driven": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@bahmutov/data-driven/-/data-driven-1.0.0.tgz", + "integrity": "sha512-YqW3hPS0RXriqjcCrLOTJj+LWe3c8JpwlL83k1ka1Q8U05ZjAKbGQZYeTzUd0NFEnnfPtsUiKGpFEBJG6kFuvg==", + "license": "MIT", + "dependencies": { + "check-more-types": "2.24.0", + "lazy-ass": "1.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@kvs/env": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@kvs/env/-/env-0.2.1.tgz", + "integrity": "sha512-6dZlDtRjSRX3ubC+Rt5BdX+z3XTe92IgSG7wPu5a+qFPgKLqjlf+quY+J5JfY3WO8qZEdsMGk3PYTawJUnfrOQ==", + "license": "MIT", + "dependencies": { + "@kvs/indexeddb": "^0.2.1", + "@kvs/node-localstorage": "^0.2.1" + } + }, + "node_modules/@kvs/indexeddb": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@kvs/indexeddb/-/indexeddb-0.2.1.tgz", + "integrity": "sha512-kRFlWxSVS8HDReInHErYho7QfVttSaSD0eeeeQvvFFfC2U9YSR95L70ielgWd6hfUXNa7uzVwAzF8xvgyCCYLQ==", + "license": "MIT", + "dependencies": { + "@kvs/types": "^0.2.1" + } + }, + "node_modules/@kvs/node-localstorage": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@kvs/node-localstorage/-/node-localstorage-0.2.1.tgz", + "integrity": "sha512-10HDKOb/Oi2dGt7CV4UmIeTHQRFMErMjK3q/v/+s0d5YZukr7Er+SqaEJ9e5VFfJxEpaJ8pxRrkT+OLLX67jyw==", + "license": "MIT", + "dependencies": { + "@kvs/storage": "^0.2.1", + "app-root-path": "^3.0.0", + "mkdirp": "^1.0.4", + "node-localstorage": "^2.1.6" + } + }, + "node_modules/@kvs/node-localstorage/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@kvs/storage": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@kvs/storage/-/storage-0.2.1.tgz", + "integrity": "sha512-Grepnd44Dr2RC+UxdcCe1SdRgIJBTeVihSdX6eRaMKCA2vHr5H63AftakG2rK1wo9pPItBsxFY5YQb64+j+LkQ==", + "license": "MIT", + "dependencies": { + "@kvs/types": "^0.2.1" + } + }, + "node_modules/@kvs/types": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@kvs/types/-/types-0.2.1.tgz", + "integrity": "sha512-tBJjUVCHOR8kk7ez9S4XTI+Qil0xgsRfdW3tAH3DfdoEsLDxANfsM9ZWhj2FWzvBMlQQAvbrENyggMTlw6IHfg==", + "license": "MIT" + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz", + "integrity": "sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.4", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz", + "integrity": "sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz", + "integrity": "sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.4", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@proofdict/tester": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@proofdict/tester/-/tester-3.1.0.tgz", + "integrity": "sha512-qzeYjOfNwpt4WF6rN9YHLUsGF3OEGD+Zt3ZfJ1KDw2tKH8e2lr9bVsEIbq7v3KBgoGo43zgx3bNsPM/CuE027w==", + "license": "MIT", + "dependencies": { + "@proofdict/types": "^3.1.0", + "prh": "5.4.4" + } + }, + "node_modules/@proofdict/textlint-rule-proofdict": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@proofdict/textlint-rule-proofdict/-/textlint-rule-proofdict-3.1.1.tgz", + "integrity": "sha512-e3ZCbCVSuwrczNOuTvQPiHn9xOYIwMDJuWZH5tnHMXuh78JGzm2XtSvPuvrMZ0s8kPmK02HNDVo5aTQ8AnvLJw==", + "license": "MIT", + "dependencies": { + "@kvs/env": "^0.2.0", + "@proofdict/tester": "^3.1.0", + "@textlint/kernel": "^3.3.6", + "@textlint/types": "^1.4.5", + "debug": "^4.1.1", + "fetch-ponyfill": "^6.1.0", + "globby": "^10.0.1", + "js-yaml": "^3.13.1", + "textlint-rule-helper": "^2.1.1", + "url-join": "^4.0.1" + } + }, + "node_modules/@proofdict/types": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@proofdict/types/-/types-3.1.0.tgz", + "integrity": "sha512-f8cxZ35ylr4n8TW/eUJ9KynEc484Tiocgl4a/ZZNS1dAH5G4vkJ+1AFw2ob/4dCiafy5tcue6TiZuWBFAmsS5g==", + "license": "MIT" + }, + "node_modules/@protobufjs/aspromise": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha1-m4sMxmPWaafY9vXQiToU00jzD78=", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/codegen": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", + "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/eventemitter": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", + "integrity": "sha1-NVy8mLr61ZePntCV85diHx0Ga3A=", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/fetch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", + "integrity": "sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=", + "license": "BSD-3-Clause", + "dependencies": { + "@protobufjs/aspromise": "^1.1.1", + "@protobufjs/inquire": "^1.1.0" + } + }, + "node_modules/@protobufjs/float": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E=", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/inquire": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", + "integrity": "sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik=", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/path": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha1-bMKyDFya1q0NzP0hynZz2Nf79o0=", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/pool": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q=", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/utf8": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", + "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=", + "license": "BSD-3-Clause" + }, + "node_modules/@steelydylan/markdown-it-imsize": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@steelydylan/markdown-it-imsize/-/markdown-it-imsize-1.0.2.tgz", + "integrity": "sha512-3tfhRLlv8w3GSNzjEx3y1JIyHpCuBhqXN6tILRTR4IhZcrJb6WJJo12jZ/lKiT9VITg9kHHHg6yVsDwO5nnZqw==" + }, + "node_modules/@steelydylan/prism-diff-highlight": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@steelydylan/prism-diff-highlight/-/prism-diff-highlight-1.0.4.tgz", + "integrity": "sha512-1M16pY3PvWVScLrYj9nENZm1yQ+V/w2YoB6NMZkv+/O/nAHoRg6qS1BX8FNnCKSbIk52QIwj+NUi/sUK2EMuew==" + }, + "node_modules/@textlint-ja/textlint-rule-no-insert-dropping-sa": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@textlint-ja/textlint-rule-no-insert-dropping-sa/-/textlint-rule-no-insert-dropping-sa-1.0.2.tgz", + "integrity": "sha512-znlllxSyAeBWhyNBCJaZLvVDyQgFQp159LKU0EKN69qMxLiXy8ZDEjOEAWqPV36a9JXgL6msg5D87110k5PKGg==", + "license": "MIT", + "dependencies": { + "array-find-index": "^1.0.2", + "kuromojin": "^2.1.1", + "morpheme-match-all": "^2.0.5" + } + }, + "node_modules/@textlint-ja/textlint-rule-no-insert-dropping-sa/node_modules/morpheme-match": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/morpheme-match/-/morpheme-match-2.0.4.tgz", + "integrity": "sha512-C3U5g2h47dpztGVePLA8w2O1aQEvuJORwIcahWaCG91YPrq+0u7qcPsF9Nqqe8noFvHwgO7b2EEk3iPnYuGTew==", + "license": "MIT" + }, + "node_modules/@textlint-ja/textlint-rule-no-insert-dropping-sa/node_modules/morpheme-match-all": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/morpheme-match-all/-/morpheme-match-all-2.0.5.tgz", + "integrity": "sha512-a6B6Nh4AhjMoEzVz8NOT5M9f3XwFVPM395gqnFNUXG/KTqQFTb9qM5JJFHJe+SvWfRVXTZSejyXNt+h+jmHUuQ==", + "license": "MIT", + "dependencies": { + "morpheme-match": "^2.0.4" + } + }, + "node_modules/@textlint-rule/textlint-rule-no-invalid-control-character": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@textlint-rule/textlint-rule-no-invalid-control-character/-/textlint-rule-no-invalid-control-character-1.2.0.tgz", + "integrity": "sha512-FgkOQr14H8D/LQVAEOR2cGWhzItb9MXCAvaBwKkysIfP9Ngwam+8NRmbphQ/GrAm3PXV63QmK1xwAKM1DntwmQ==", + "license": "MIT", + "dependencies": { + "execall": "^1.0.0" + } + }, + "node_modules/@textlint/ast-node-types": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-4.4.1.tgz", + "integrity": "sha512-2QBwlqi2SU83vTHibfdTxGiLdIqR0btNyMGfVl0bwA6FI85HnSYoGFLrdCnq2V0nxpbhuvwzcm2Ja81w0VkMGA==", + "license": "MIT" + }, + "node_modules/@textlint/ast-tester": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@textlint/ast-tester/-/ast-tester-2.3.2.tgz", + "integrity": "sha512-4e1kyqsHks5POcQmuh7ITVrU/dbYyRUfQarQbeVRPP271n2HnlgnoYyZ10yV2Sb/Ksw+lQf7DPSnwNewXdCWww==", + "license": "MIT", + "dependencies": { + "@textlint/ast-node-types": "^4.4.1" + } + }, + "node_modules/@textlint/ast-traverse": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@textlint/ast-traverse/-/ast-traverse-2.3.2.tgz", + "integrity": "sha512-Dt1s/6x0XWhUNFH2rAa9gL6ODtq232BZuBHuHiOg+SrVwzl+VjOfa3fMQ0LoYixGSyDtwqAlksWcC0KyLz0eSw==", + "license": "MIT", + "dependencies": { + "@textlint/ast-node-types": "^4.4.1" + } + }, + "node_modules/@textlint/feature-flag": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/@textlint/feature-flag/-/feature-flag-3.3.2.tgz", + "integrity": "sha512-7ErQ/UF0IBAd+PkQNBD7yYCDqL2o6leErMDENSWAgUHWLy5TcHr3Orn7qswtBMW5gIyXW9lh+EpllwLJ5qv35w==", + "license": "MIT", + "dependencies": { + "map-like": "^2.0.0" + } + }, + "node_modules/@textlint/fixer-formatter": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/@textlint/fixer-formatter/-/fixer-formatter-3.3.2.tgz", + "integrity": "sha512-aTEyH/rHSzxRLrluSjNhDnMSgIYK60J5AAgprKJCkb9h3dDRuNoiJ+BXh5FXVSSm1tGF0d8pu+Ph8OFBgQOchQ==", + "license": "MIT", + "dependencies": { + "@textlint/module-interop": "^1.2.2", + "@textlint/types": "^1.5.2", + "chalk": "^1.1.3", + "debug": "^4.3.1", + "diff": "^4.0.2", + "is-file": "^1.0.0", + "string-width": "^1.0.2", + "strip-ansi": "^6.0.0", + "text-table": "^0.2.0", + "try-resolve": "^1.0.1" + } + }, + "node_modules/@textlint/fixer-formatter/node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@textlint/fixer-formatter/node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@textlint/get-config-base-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@textlint/get-config-base-dir/-/get-config-base-dir-2.0.0.tgz", + "integrity": "sha512-J3cG1pl2llYD4ZaZMe0qVgVaHT8RvT+/SW1FHQ8HRceNalMM9O0Y8iIgtl4GGOx4vMghoIPKFVLASw8P8bJ3ZA==", + "license": "MIT" + }, + "node_modules/@textlint/kernel": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/@textlint/kernel/-/kernel-3.4.2.tgz", + "integrity": "sha512-PpxAtvLGI9ewn+Dbt4j0KMfmMM39/AY3cikmZffu59nyTdIymXMeVMEVkpVZTEUk5OlL27RAON9FF+2u+0fshg==", + "license": "MIT", + "dependencies": { + "@textlint/ast-node-types": "^4.4.1", + "@textlint/ast-tester": "^2.3.2", + "@textlint/ast-traverse": "^2.3.2", + "@textlint/feature-flag": "^3.3.2", + "@textlint/source-code-fixer": "^3.4.2", + "@textlint/types": "^1.5.2", + "@textlint/utils": "^1.2.2", + "debug": "^4.3.1", + "deep-equal": "^1.1.1", + "map-like": "^2.0.0", + "structured-source": "^3.0.2" + } + }, + "node_modules/@textlint/linter-formatter": { + "v…
diff --git a/.cache/kvs-node-localstorage/proofdict b/.cache/kvs-node-localstorage/proofdict index efec0d7..277aaf0 100644 --- a/.cache/kvs-node-localstorage/proofdict +++ b/.cache/kvs-node-localstorage/proofdict @@ -1 +1 @@ -[{"id":"01BQ92YWWKFGQT7012C26Z9PDK","description":"","expected":"かもしれない","patterns":["かも知れない"],"specs":[],"tags":["opinion","表記統一"]},{"id":"01BQ92YYBGZPBHMB3DMMXMJ0CJ","description":"","expected":"ES.next","patterns":["ES next"],"specs":[{"from":"ES nextでは","to":"ES.nextでは"}],"tags":["JavaScript"]},{"id":"01D1SNYB7AA69NTAEBT1X651RB","description":"Brotliはbr","expected":"$1rotli","patterns":["/\\b(b)rottli\\b/i"],"allows":[],"specs":[{"from":"brottli compression","to":"brotli compression"},{"from":"brottli圧縮","to":"brotli圧縮"},{"from":"BrotliはbrotliでOK","to":"BrotliはbrotliでOK"}],"tags":["noun"]},{"id":"01BQ92YZ6QCTPXGPWWJ5NWT6NC","description":"","expected":"Virtual Machine","patterns":["Virtual machine"],"specs":[{"from":"MSEdgeが使えるWindows 10のVirtual machine(VM)が公開された","to":"MSEdgeが使えるWindows 10のVirtual Machine(VM)が公開された"}],"tags":["noun","opinion"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YXWFVPNRGMBZ3RZNN1RD","description":"","expected":"Foundation","patterns":["Fundation"],"specs":[{"from":"Fundation","to":"Foundation"}],"tags":["typo"]},{"id":"01EKP3RFQ18K47EYH1ZKB5E4R5","description":"https://github.com/GoogleChrome/lighthouse","expected":"Lighthouse","patterns":["/\\bLighthouse\\b/i"],"allows":["{{COMBINATION_WORD}}"],"specs":[{"from":" lighthouse","to":" Lighthouse"},{"from":"lighthouse-cli","to":"lighthouse-cli"},{"from":"Lighthouse analyzes web apps","to":"Lighthouse analyzes web apps"}],"tags":["noun"]},{"id":"01BQ92YXWVT5PGRGQCH1ZZ6S7V","description":"","expected":"operator","patterns":["oeprator"],"specs":[],"tags":["typo"]},{"id":"01F4VMKJAEKHMANZVFFR9D6DJA","description":"AWS CloudFront https://aws.amazon.com/jp/cloudfront/","expected":"CloudFront","patterns":["/\\bCloudFront\\b/i"],"allows":["{{COMBINATION_WORD}}"],"specs":[{"from":"Cloudront","to":"Cloudront"},{"from":"Cloudfront","to":"CloudFront"},{"from":"awscloudfront","to":"awscloudfront"}],"tags":["noun"]},{"id":"01BQ92YYSF66CHGRP4MX5X6P0Q","description":"O'reilly is OK. But oreilly is not OK","expected":"Oreilly","patterns":["/Oreilly/i"],"specs":[{"from":"oreilly","to":"Oreilly"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YWWV1AKBHZDQ6D9GA3ZQ","description":"(数詞に付く場合)は漢字を使う","expected":"$1通り","patterns":["/(\\d)とおり/"],"specs":[{"from":"(例)2とおりの方法","to":"(例)2通りの方法"}],"tags":["opinion","表記統一"]},{"id":"01BQ92YYBHA4FM6A82V2ZT0V91","description":"Reference https://www.w3.org/TR/html-imports/","expected":"HTML Imports","patterns":["/HTML Import/i"],"specs":[{"from":"HTML import","to":"HTML Imports"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBEFBXEHH8T8HC8RCRD","description":"Reference https://www.ecma-international.org/publications/standards/Ecma-262.htm","expected":"ECMAScript $1","patterns":["/ECMAScript([0-9]+)/i","/ECMA Script([0-9]+)/i"],"specs":[{"from":"ECMASCRIPT5","to":"ECMAScript 5"},{"from":"ecmascript2015","to":"ECMAScript 2015"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BW0P1BD0VKQQMZ4E947WVMJ1","description":"See https://developer.mozilla.org/en-US/Add-ons/WebExtensions/What_are_WebExtensions","expected":"WebExtension$1","patterns":["/Web Extension(s)?/"],"specs":[{"from":"Web Extension","to":"WebExtension"},{"from":"Extensions for Firefox are built using WebExtensions APIs","to":"Extensions for Firefox are built using WebExtensions APIs"},{"from":"WebExtension APIs are designed to be compatible with Chrome and Opera extensions","to":"WebExtension APIs are designed to be compatible with Chrome and Opera extensions"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBJP9EDR7KS993CMQAR","description":"","expected":"Virtual DOM","patterns":["/VirtualDOM/i"],"specs":[{"from":"VirtualDOM is virtual dom object","to":"Virtual DOM is virtual dom object"}],"tags":["noun","opinion","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYSHMN57CX27SAJQT2W0","description":"","expected":"Sauce Labs","patterns":["SauceLabs"],"specs":[],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBHGYFTTDANV4RNC3CJ","description":"Should have a space between words. Reference https://github.com/w3c/ServiceWorker","expected":"$1 $2","patterns":["/(service)(worker)/i"],"specs":[{"from":"This is serviceworker?","to":"This is service worker?"},{"from":"ServiceWorker","to":"Service Worker"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBGQBRYXEZK5ZRRK1WW","description":"","expected":"Ecma標準","patterns":["ECMA標準"],"specs":[],"tags":["JavaScript"]},{"id":"01BQ92YYSD9K713DCXTFGNDENS","description":"Reference https://leanpub.com/","expected":"Leanpub","patterns":["/leanpub/i"],"specs":[{"from":"leanpub","to":"Leanpub"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQMSTDZCWH8P81E7PBG9BMQS","description":"importのtypoです","expected":"Import","patterns":["Impport"],"specs":[{"from":"Dynamic Impport","to":"Dynamic Import"},{"from":"Impporter","to":"Importer"}],"tags":["typo"]},{"id":"01BQ92YYBH2EZP1E4KVNDMXYV9","description":"Pointer Eventsに統一","expected":"Pointer Events","patterns":["/pointer event/i","/pointer events/i"],"specs":[{"from":"Pointer Events","to":"Pointer Events"},{"from":"MSEdgeの対応、pointer eventsなど対応、","to":"MSEdgeの対応、Pointer Eventsなど対応、"},{"from":"MSEdgeの対応、pointer eventなど対応、","to":"MSEdgeの対応、Pointer Eventsなど対応、"},{"from":"pointer-events","to":"pointer-events"}],"tags":["JavaScript","noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YXWVJ7HG4TDWA45RH297","description":"","expected":"webpack","patterns":["/\\bwebpac(?!k)\\b/"],"specs":[{"from":"webpacのビルド速度改善についてのスライド","to":"webpackのビルド速度改善についてのスライド"}],"tags":["typo"]},{"id":"01BQ92YYBJTDA6WF56ZE9PKP8F","description":"Reference http://underscorejs.org/","expected":"Underscore.js","patterns":["/underscore.js/i"],"specs":[],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YXWVY5EFQNE4ZV8K0HS5","description":"","expected":"package.json","patterns":["packge.json"],"specs":[],"tags":["typo"]},{"id":"01DTET96387SQ3VYTXHYSX5BYS","description":"WebAssembly (abbreviated Wasm) https://webassembly.org/","expected":"Wasm","patterns":["/wasm/i"],"allows":[],"specs":[{"from":"wasm","to":"Wasm"},{"from":"WAsm","to":"Wasm"},{"from":"WebAssembly (abbreviated Wasm) ","to":"WebAssembly (abbreviated Wasm) "}],"tags":["noun"]},{"id":"01BQ92YXWQDKGCA9W74SKW7VST","description":"","expected":"Arrow Function","patterns":["Array Function"],"specs":[],"tags":["typo"]},{"id":"01BQ92YXWTV260J4A7W8TSWEXH","description":"","expected":"Workaround","patterns":["Workaound"],"specs":[{"from":"iOS7と8のquerySelectorバグの対処(Workaound)","to":"iOS7と8のquerySelectorバグの対処(Workaround)"}],"tags":["typo"]},{"id":"01BQ92YZ6R35HCYAZGN18RB35E","description":"Reference https://www.microsoft.com/windows","expected":"Windows $1","patterns":["/Windows (\\d+)/i"],"specs":[{"from":"OK windows","to":"OK windows"},{"from":"windows 10","to":"Windows 10"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01C1VCJNDQW7RN25S24KNP9V4M","description":"A typo Chromium","expected":"$1hromium","patterns":["/(C)hronium/i"],"specs":[{"from":"Chrome is Chronium","to":"Chrome is Chromium"},{"from":"Chrome is chronium","to":"Chrome is chromium"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01EKJAAAXCZR005PDSTRVT24QZ","description":"Jamstackに統一された https://github.com/jamstack/jamstack.org/issues/279","expected":"Jamstack","patterns":["/\\bJAMStack\\b/i"],"allows":[],"specs":[{"from":"Jamstack","to":"Jamstack"},{"from":"JAMStack is old word","to":"Jamstack is old word"},{"from":"jamjasmstack","to":"jamjasmstack"}],"tags":["noun"]},{"id":"01BQ92YW70P4BSGE4ZBMKECATV","description":"","expected":"PostCSS","patterns":["/PostCSS/i"],"specs":[{"from":"postcss","to":"PostCSS"}],"tags":["noun","CSS"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBGSXM66TN1ZSJH177M","description":"","expected":"ES6 Classes","patterns":["/\\bES6 classes\\b/i"],"specs":[{"from":"ES6 classes","to":"ES6 Classes"}],"tags":["JavaScript"]},{"id":"01BQ92YW6Y5KA9YRC4HRPWZTVV","description":"","expected":"Flexbox","patterns":["Fluxbox"],"specs":[{"from":"CSS Fluxboxでは","to":"CSS Flexboxでは"}],"tags":["noun","CSS"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YZ6QR8RJKA5Y8W2F9NMY","description":"Reference https://webkit.org/","expected":"WebKit","patterns":["/webkit/i"],"specs":[{"from":"これはwebkitです","to":"これはWebKitです"},{"from":"XXXwebkit","to":"XXXwebkit"},{"from":"node-webkit","to":"node-webkit"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBJENZB6M480KCJ0J99","description":"Reference http://jquery.com/","expected":"jQuery","patterns":["/jquery/i"],"specs":[{"from":"Jquery","to":"jQuery"},{"from":"jquery","to":"jQuery"},{"from":"jquery-ui","to":"jquery-ui"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01CF6NR1Q7XWC035B9XJXNB852","description":"typo","expected":"$1nimation","patterns":["/(a)nimation/i"],"specs":[{"from":"Animation","to":"Animation"},{"from":"CSS Animation","to":"CSS Animation"},{"from":"CSS animations","to":"CSS animations"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YWJG32Z679PF9CHJJD5R","description":"","expected":"$1デフォルトで有効$2","patterns":["/(?:(が)デフォルト有効)|(?:デフォルト有効(に))/"],"specs":[],"tags":["opinion","jser.info"]},{"id":"01EF8QSDGRB63DFJ54B68AKN7J","description":"webpack is lower-case https://webpack.js.org/","expected":"webpack","patterns":["/\\bwebpack\\b/i"],"allows":[],"specs":[{"from":"webpack","to":"webpack"},{"from":"WebPack","to":"webpack"},{"from":"BuildWebPack is OK","to":"BuildWebPack is OK"}],"tags":["noun"]},{"id":"01BQ92YYBJDYYAR7DFH7M57G1P","description":"AngularJS(1.x)はJSを付けます","expected":"AngularJS","patterns":["/Angular\\.js/i","/angularjs/i"],"specs":[{"from":"Angular.js","to":"AngularJS"}],"tags":["JavaScript"]},{"id":"01DSDJ2ZNSB644ZB0SD53C62X5","description":"","expected":"Archive","patterns":["Archieve"],"allows":[],"specs":[{"from":"HTTP Archieve","to":"HTTP Archive"}],"tags":["noun"]},{"id":"01BQ92YYBGWJZC59XKSNA53X2C","description":"Reference https://www.w3.org/TR/webstorage/","expected":"localStorage","patterns":["localstorage","local storage"],"specs":[{"from":"localstorage is a parts of webstorage","to":"localStorage is a parts of webstorage"},{"from":"local storage is a parts of webstorage","to":"localStorage is a parts of webstorage"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YXWTM3A3CG10MT3FCD55","description":"","expected":"Performance","patterns":["/peformance/i"],"specs":[{"from":"ブラウザ上でどうやって計測するかやPeformance Timelineなどの仕様について","to":"ブラウザ上でどうやって計測するかやPerformance Timelineなどの仕様について"}],"tags":["typo"]},{"id":"01BQ92YZ6QD58PVYY3FE7QD2S5","description":"Reference http://www.seleniumhq.org/projects/webdriver/","expected":"WebDriver","patterns":["/WebDriver/i","/Web Driver/i"],"specs":[{"from":"Web Driver is designed in a simpler and more concise programming interface","to":"WebDriver is designed in a simpler and more concise programming interface"},{"from":"webdriver is designed in a simpler and more concise programming interface","to":"WebDriver is designed in a simpler and more concise programming interface"},{"from":"WebdriverIO is OK.","to":"WebdriverIO is OK."}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBJXRCA80R6BCA4SS7K","description":"Angular(2.0~)","expected":"Angular","patterns":["/angular/i"],"specs":[{"from":"angular","to":"Angular"},{"from":"angulardart","to":"angulardart"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YZ6Q0Y22BVKAVFC4VV1N","description":"Reference http://ocaml.org/","expected":"OCaml","patterns":["/OCaml/i"],"specs":[{"from":"ocaml","to":"OCaml"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YWWH8TVT2N8FT61TTDNH","description":"ひらがなで書かず、漢字で書くと読みやすくなります","expected":"$1中","patterns":["/(その)なか/","/(世界|日)じゅう/"],"specs":[],"tags":["opinion","表記統一"]},{"id":"01BQ92YZ6NT1NACB4X0DC8XHFH","description":"","expected":"$1 EAP","patterns":["/([0-9\\.]+)EAP/"],"specs":[],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBJK6WW9Y09W7TF1YTT","description":"See http://todomvc.com/","expected":"TodoMVC","patterns":["/todomvc/i"],"specs":[{"from":"todomvc is todo app.","to":"TodoMVC is todo app."}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYSHHRNMZPY2VG4991B7","description":"","expected":"Travis CI","patterns":["/TravisCI/i"],"specs":[{"from":"TravisCI is a service","to":"Travis CI is a service"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01F0W5YS57VWFW3DAP3EC92D6Z","description":"https://github.com/sveltejs","expected":"$1velte","patterns":["/(s)velete/i"],"allows":[],"specs":[{"from":"svelete","to":"svelte"},{"from":"Svelete","to":"Svelte"}],"tags":["noun"]},{"id":"01BQ92YYBGNT2ZA7SCBGZP4XW8","description":"Reference https://www.w3.org/TR/webstorage/","expected":"sessionStorage","patterns":["sessionstorage","session storage"],"specs":[{"from":"sessionstorage is a parts of webstorage","to":"sessionStorage is a parts of webstorage"},{"from":"session storage is a parts of webstorage","to":"sessionStorage is a parts of webstorage"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBHB83ZNFWK5WBA58B7","description":"JavaScript is not Java Script","expected":"JavaScript","patterns":["/javascript/i","/Java Script/i"],"specs":[{"from":"javascript","to":"JavaScript"},{"from":"java script","to":"JavaScript"},{"from":"Java script","to":"JavaScript"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBH2H42AT29Y4BP84FA","description":"Reference https://www.w3.org/TR/touch-events/","expected":"Touch Events","patterns":["/Touch Event/i","/Touch Events/i"],"specs":[{"from":"Touch Event、Fullscreen APIなどのサポートなど","to":"Touch Events、Fullscreen APIなどのサポートなど"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBH4NNWB305Y1TD7B6N","description":"Reference https://www.w3.org/TR/webaudio/","expected":"Web Audio API","patterns":["/WebAudio API/i","/Web AudioAPI/i","/Web Audio API/i"],"specs":[{"from":"All scheduled times in the WebAudio API are relative to the value of currentTime.","to":"All scheduled times in the Web Audio API are relative to the value of currentTime."}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBGNAKFHY1TFA9Z3KTC","description":"Reference https://w3c.github.io/webcomponents/explainer/","expected":"Web Components","patterns":["/WebComponents/i","/web components/i"],"specs":[{"from":"WebComponentsについてのWeeklyメールマガジン","to":"Web ComponentsについてのWeeklyメールマガジン"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BSADQQDT7DEBJT25555YCQ14","description":"Reference https://www.mysql.com/","expected":"MySQL","patterns":["/mysql/i"],"specs":[{"from":"mysql is a database.","to":"MySQL is a database."},{"from":"Oracle mysql","to":"Oracle MySQL"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01F0W5YS57VWFW3DAP3EC92D6Y","description":"https://github.com/sveltejs/kit","expected":"SvelteKit","patterns":["/SveleteKit/i"],"allows":[],"specs":[{"from":"SveleteKit","to":"SvelteKit"},{"from":"SvelteKit","to":"SvelteKit"}],"tags":["noun"]},{"id":"01BQ92YYSHHTGFD78FF7NB4RX9","description":"","expected":"HTML5 Rocks","patterns":["/HTML5Rocks/i","/HTML5Rock/i"],"specs":[{"from":"HTML5Rockに現在公開されている翻訳記事のまとめ","to":"HTML5 Rocksに現在公開されている翻訳記事のまとめ"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBJCY50GECA6CQH874F","description":"Reference https://www.emberjs.com/","expected":"Ember.js","patterns":["/Ember\\.js/i"],"specs":[{"from":"ember.js","to":"Ember.js"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YXWR8T1QBP2JSKFH74RK","description":"","expected":"CoffeeScript","patterns":["CoffeScript"],"specs":[{"from":"CoffeScriptからES6","to":"CoffeeScriptからES6"}],"tags":["typo"]},{"id":"01BQ92YXWVMAMKQ3VK2DNYNCCP","description":"Customのtypoです","expected":"Custom","patterns":["/Custome\\b/i"],"specs":[{"from":"WebVRをCustome Elementのタグで書く","to":"WebVRをCustom Elementのタグで書く"}],"tags":["typo"]},{"id":"01FB0ZGJEK2GEKX4AM7KCT1E8Y","description":"WHAWG typo","expected":"WHATWG","patterns":["/\\bWHAWG\\b/","/\\bWHATWGT\\b/"],"allows":[],"specs":[{"from":"WHATWG","to":"WHATWG"},{"from":"WHAWG","to":"WHATWG"},{"from":"WHATWG","to":"WHATWG"}],"tags":["noun"]},{"id":"01BQ92YXWQ02R8SE1ZZHCG89P5","description":"","expected":"Property","patterns":["/propety/i"],"specs":[{"from":"propety","to":"Property"}],"tags":["typo"]},{"id":"01BQ92YYBJBBNRPR2WYHMDYPPG","description":"Reference http://source-map.github.io/","expected":"Source Map","patterns":["/Source Map/i","/SourceMap/i"],"specs":[{"from":"多段SourceMapに対応","to":"多段Source Mapに対応"},{"from":"SourceMap","to":"Source Map"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]}] \ No newline at end of file +[{"id":"01BQ92YWWMY2YZNGG7Q70EZTFE","description":"","expected":"たびたび","patterns":["度々"],"specs":[],"tags":["opinion","表記統一"]},{"id":"01BQ92YYSHHRNMZPY2VG4991B7","description":"","expected":"Travis CI","patterns":["/TravisCI/i"],"specs":[{"from":"TravisCI is a service","to":"Travis CI is a service"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01EKJAAAXCZR005PDSTRVT24QZ","description":"Jamstackに統一された https://github.com/jamstack/jamstack.org/issues/279","expected":"Jamstack","patterns":["/\\bJAMStack\\b/i"],"allows":[],"specs":[{"from":"Jamstack","to":"Jamstack"},{"from":"JAMStack is old word","to":"Jamstack is old word"},{"from":"jamjasmstack","to":"jamjasmstack"}],"tags":["noun"]},{"id":"01BQ92YWJF8WXN0M9FE0S4QYW5","description":"","expected":"$1発売","patterns":["/(\\d+年\\d+月\\d+日)\\s発売/"],"specs":[],"tags":["opinion","jser.info"]},{"id":"01BQ92YXWVT5PGRGQCH1ZZ6S7V","description":"","expected":"operator","patterns":["oeprator"],"specs":[],"tags":["typo"]},{"id":"01BQ92YYBGNT2ZA7SCBGZP4XW8","description":"Reference https://www.w3.org/TR/webstorage/","expected":"sessionStorage","patterns":["sessionstorage","session storage"],"specs":[{"from":"sessionstorage is a parts of webstorage","to":"sessionStorage is a parts of webstorage"},{"from":"session storage is a parts of webstorage","to":"sessionStorage is a parts of webstorage"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YZ6QD58PVYY3FE7QD2S5","description":"Reference http://www.seleniumhq.org/projects/webdriver/","expected":"WebDriver","patterns":["/WebDriver/i","/Web Driver/i"],"specs":[{"from":"Web Driver is designed in a simpler and more concise programming interface","to":"WebDriver is designed in a simpler and more concise programming interface"},{"from":"webdriver is designed in a simpler and more concise programming interface","to":"WebDriver is designed in a simpler and more concise programming interface"},{"from":"WebdriverIO is OK.","to":"WebdriverIO is OK."}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BW0P1BD0VKQQMZ4E947WVMJ1","description":"See https://developer.mozilla.org/en-US/Add-ons/WebExtensions/What_are_WebExtensions","expected":"WebExtension$1","patterns":["/Web Extension(s)?/"],"specs":[{"from":"Web Extension","to":"WebExtension"},{"from":"Extensions for Firefox are built using WebExtensions APIs","to":"Extensions for Firefox are built using WebExtensions APIs"},{"from":"WebExtension APIs are designed to be compatible with Chrome and Opera extensions","to":"WebExtension APIs are designed to be compatible with Chrome and Opera extensions"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBJTDA6WF56ZE9PKP8F","description":"Reference http://underscorejs.org/","expected":"Underscore.js","patterns":["/underscore.js/i"],"specs":[],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YXWVJ7HG4TDWA45RH297","description":"","expected":"webpack","patterns":["/\\bwebpac(?!k)\\b/"],"specs":[{"from":"webpacのビルド速度改善についてのスライド","to":"webpackのビルド速度改善についてのスライド"}],"tags":["typo"]},{"id":"01BQ92YYBH2EZP1E4KVNDMXYV9","description":"Pointer Eventsに統一","expected":"Pointer Events","patterns":["/pointer event/i","/pointer events/i"],"specs":[{"from":"Pointer Events","to":"Pointer Events"},{"from":"MSEdgeの対応、pointer eventsなど対応、","to":"MSEdgeの対応、Pointer Eventsなど対応、"},{"from":"MSEdgeの対応、pointer eventなど対応、","to":"MSEdgeの対応、Pointer Eventsなど対応、"},{"from":"pointer-events","to":"pointer-events"}],"tags":["JavaScript","noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBHGYFTTDANV4RNC3CJ","description":"Should have a space between words. Reference https://github.com/w3c/ServiceWorker","expected":"$1 $2","patterns":["/(service)(worker)/i"],"specs":[{"from":"This is serviceworker?","to":"This is service worker?"},{"from":"ServiceWorker","to":"Service Worker"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBGWJZC59XKSNA53X2C","description":"Reference https://www.w3.org/TR/webstorage/","expected":"localStorage","patterns":["localstorage","local storage"],"specs":[{"from":"localstorage is a parts of webstorage","to":"localStorage is a parts of webstorage"},{"from":"local storage is a parts of webstorage","to":"localStorage is a parts of webstorage"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBJCY50GECA6CQH874F","description":"Reference https://www.emberjs.com/","expected":"Ember.js","patterns":["/Ember\\.js/i"],"specs":[{"from":"ember.js","to":"Ember.js"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YXWQDKGCA9W74SKW7VST","description":"","expected":"Arrow Function","patterns":["Array Function"],"specs":[],"tags":["typo"]},{"id":"01BQ92YYBEFBXEHH8T8HC8RCRD","description":"Reference https://www.ecma-international.org/publications/standards/Ecma-262.htm","expected":"ECMAScript $1","patterns":["/ECMAScript([0-9]+)/i","/ECMA Script([0-9]+)/i"],"specs":[{"from":"ECMASCRIPT5","to":"ECMAScript 5"},{"from":"ecmascript2015","to":"ECMAScript 2015"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBGQBRYXEZK5ZRRK1WW","description":"","expected":"Ecma標準","patterns":["ECMA標準"],"specs":[],"tags":["JavaScript"]},{"id":"01BQ92YYBGSXM66TN1ZSJH177M","description":"","expected":"ES6 Classes","patterns":["/\\bES6 classes\\b/i"],"specs":[{"from":"ES6 classes","to":"ES6 Classes"}],"tags":["JavaScript"]},{"id":"01BQ92YXWVMAMKQ3VK2DNYNCCP","description":"Customのtypoです","expected":"Custom","patterns":["/Custome\\b/i"],"specs":[{"from":"WebVRをCustome Elementのタグで書く","to":"WebVRをCustom Elementのタグで書く"}],"tags":["typo"]},{"id":"01BQ92YYBH4NNWB305Y1TD7B6N","description":"Reference https://www.w3.org/TR/webaudio/","expected":"Web Audio API","patterns":["/WebAudio API/i","/Web AudioAPI/i","/Web Audio API/i"],"specs":[{"from":"All scheduled times in the WebAudio API are relative to the value of currentTime.","to":"All scheduled times in the Web Audio API are relative to the value of currentTime."}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBJK6WW9Y09W7TF1YTT","description":"See http://todomvc.com/","expected":"TodoMVC","patterns":["/todomvc/i"],"specs":[{"from":"todomvc is todo app.","to":"TodoMVC is todo app."}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQMSTDZCWH8P81E7PBG9BMQS","description":"importのtypoです","expected":"Import","patterns":["Impport"],"specs":[{"from":"Dynamic Impport","to":"Dynamic Import"},{"from":"Impporter","to":"Importer"}],"tags":["typo"]},{"id":"01F4VMKJAEKHMANZVFFR9D6DJA","description":"AWS CloudFront https://aws.amazon.com/jp/cloudfront/","expected":"CloudFront","patterns":["/\\bCloudFront\\b/i"],"allows":["{{COMBINATION_WORD}}"],"specs":[{"from":"Cloudront","to":"Cloudront"},{"from":"Cloudfront","to":"CloudFront"},{"from":"awscloudfront","to":"awscloudfront"}],"tags":["noun"]},{"id":"01CF6NR1Q7XWC035B9XJXNB852","description":"typo","expected":"$1nimation","patterns":["/(a)nimation/i"],"specs":[{"from":"Animation","to":"Animation"},{"from":"CSS Animation","to":"CSS Animation"},{"from":"CSS animations","to":"CSS animations"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01FB0ZGJEK2GEKX4AM7KCT1E8Y","description":"WHAWG typo","expected":"WHATWG","patterns":["/\\bWHAWG\\b/","/\\bWHATWGT\\b/"],"allows":[],"specs":[{"from":"WHATWG","to":"WHATWG"},{"from":"WHAWG","to":"WHATWG"},{"from":"WHATWG","to":"WHATWG"}],"tags":["noun"]},{"id":"01DSDJ2ZNSB644ZB0SD53C62X5","description":"","expected":"Archive","patterns":["Archieve"],"allows":[],"specs":[{"from":"HTTP Archieve","to":"HTTP Archive"}],"tags":["noun"]},{"id":"01BQ92YYBJXRCA80R6BCA4SS7K","description":"Angular(2.0~)","expected":"Angular","patterns":["/angular/i"],"specs":[{"from":"angular","to":"Angular"},{"from":"angulardart","to":"angulardart"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YWWH8TVT2N8FT61TTDNH","description":"ひらがなで書かず、漢字で書くと読みやすくなります","expected":"$1中","patterns":["/(その)なか/","/(世界|日)じゅう/"],"specs":[],"tags":["opinion","表記統一"]},{"id":"01BQ92YYBHA4FM6A82V2ZT0V91","description":"Reference https://www.w3.org/TR/html-imports/","expected":"HTML Imports","patterns":["/HTML Import/i"],"specs":[{"from":"HTML import","to":"HTML Imports"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01EKP3RFQ18K47EYH1ZKB5E4R5","description":"https://github.com/GoogleChrome/lighthouse","expected":"Lighthouse","patterns":["/\\bLighthouse\\b/i"],"allows":["{{COMBINATION_WORD}}"],"specs":[{"from":" lighthouse","to":" Lighthouse"},{"from":"lighthouse-cli","to":"lighthouse-cli"},{"from":"Lighthouse analyzes web apps","to":"Lighthouse analyzes web apps"}],"tags":["noun"]},{"id":"01C1VCJNDQW7RN25S24KNP9V4M","description":"A typo Chromium","expected":"$1hromium","patterns":["/(C)hronium/i"],"specs":[{"from":"Chrome is Chronium","to":"Chrome is Chromium"},{"from":"Chrome is chronium","to":"Chrome is chromium"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBJP9EDR7KS993CMQAR","description":"","expected":"Virtual DOM","patterns":["/VirtualDOM/i"],"specs":[{"from":"VirtualDOM is virtual dom object","to":"Virtual DOM is virtual dom object"}],"tags":["noun","opinion","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBGZPBHMB3DMMXMJ0CJ","description":"","expected":"ES.next","patterns":["ES next"],"specs":[{"from":"ES nextでは","to":"ES.nextでは"}],"tags":["JavaScript"]},{"id":"01BQ92YW70P4BSGE4ZBMKECATV","description":"","expected":"PostCSS","patterns":["/PostCSS/i"],"specs":[{"from":"postcss","to":"PostCSS"}],"tags":["noun","CSS"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YZ6QCTPXGPWWJ5NWT6NC","description":"","expected":"Virtual Machine","patterns":["Virtual machine"],"specs":[{"from":"MSEdgeが使えるWindows 10のVirtual machine(VM)が公開された","to":"MSEdgeが使えるWindows 10のVirtual Machine(VM)が公開された"}],"tags":["noun","opinion"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYSHHTGFD78FF7NB4RX9","description":"","expected":"HTML5 Rocks","patterns":["/HTML5Rocks/i","/HTML5Rock/i"],"specs":[{"from":"HTML5Rockに現在公開されている翻訳記事のまとめ","to":"HTML5 Rocksに現在公開されている翻訳記事のまとめ"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01DTET96387SQ3VYTXHYSX5BYS","description":"WebAssembly (abbreviated Wasm) https://webassembly.org/","expected":"Wasm","patterns":["/wasm/i"],"allows":[],"specs":[{"from":"wasm","to":"Wasm"},{"from":"WAsm","to":"Wasm"},{"from":"WebAssembly (abbreviated Wasm) ","to":"WebAssembly (abbreviated Wasm) "}],"tags":["noun"]},{"id":"01BQ92YYSD9K713DCXTFGNDENS","description":"Reference https://leanpub.com/","expected":"Leanpub","patterns":["/leanpub/i"],"specs":[{"from":"leanpub","to":"Leanpub"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YZ6QR8RJKA5Y8W2F9NMY","description":"Reference https://webkit.org/","expected":"WebKit","patterns":["/webkit/i"],"specs":[{"from":"これはwebkitです","to":"これはWebKitです"},{"from":"XXXwebkit","to":"XXXwebkit"},{"from":"node-webkit","to":"node-webkit"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YXWVY5EFQNE4ZV8K0HS5","description":"","expected":"package.json","patterns":["packge.json"],"specs":[],"tags":["typo"]},{"id":"01EF8QSDGRB63DFJ54B68AKN7J","description":"webpack is lower-case https://webpack.js.org/","expected":"webpack","patterns":["/\\bwebpack\\b/i"],"allows":[],"specs":[{"from":"webpack","to":"webpack"},{"from":"WebPack","to":"webpack"},{"from":"BuildWebPack is OK","to":"BuildWebPack is OK"}],"tags":["noun"]},{"id":"01BQ92YZ6R35HCYAZGN18RB35E","description":"Reference https://www.microsoft.com/windows","expected":"Windows $1","patterns":["/Windows (\\d+)/i"],"specs":[{"from":"OK windows","to":"OK windows"},{"from":"windows 10","to":"Windows 10"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBGNAKFHY1TFA9Z3KTC","description":"Reference https://w3c.github.io/webcomponents/explainer/","expected":"Web Components","patterns":["/WebComponents/i","/web components/i"],"specs":[{"from":"WebComponentsについてのWeeklyメールマガジン","to":"Web ComponentsについてのWeeklyメールマガジン"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01D1SNYB7AA69NTAEBT1X651RB","description":"Brotliはbr","expected":"$1rotli","patterns":["/\\b(b)rottli\\b/i"],"allows":[],"specs":[{"from":"brottli compression","to":"brotli compression"},{"from":"brottli圧縮","to":"brotli圧縮"},{"from":"BrotliはbrotliでOK","to":"BrotliはbrotliでOK"}],"tags":["noun"]},{"id":"01BQ92YXWFVPNRGMBZ3RZNN1RD","description":"","expected":"Foundation","patterns":["Fundation"],"specs":[{"from":"Fundation","to":"Foundation"}],"tags":["typo"]},{"id":"01BQ92YXWTV260J4A7W8TSWEXH","description":"","expected":"Workaround","patterns":["Workaound"],"specs":[{"from":"iOS7と8のquerySelectorバグの対処(Workaound)","to":"iOS7と8のquerySelectorバグの対処(Workaround)"}],"tags":["typo"]},{"id":"01BQ92YYBJBBNRPR2WYHMDYPPG","description":"Reference http://source-map.github.io/","expected":"Source Map","patterns":["/Source Map/i","/SourceMap/i"],"specs":[{"from":"多段SourceMapに対応","to":"多段Source Mapに対応"},{"from":"SourceMap","to":"Source Map"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YXWQ02R8SE1ZZHCG89P5","description":"","expected":"Property","patterns":["/propety/i"],"specs":[{"from":"propety","to":"Property"}],"tags":["typo"]},{"id":"01F0W5YS57VWFW3DAP3EC92D6Y","description":"https://github.com/sveltejs/kit","expected":"SvelteKit","patterns":["/SveleteKit/i"],"allows":[],"specs":[{"from":"SveleteKit","to":"SvelteKit"},{"from":"SvelteKit","to":"SvelteKit"}],"tags":["noun"]},{"id":"01BQ92YXWR8T1QBP2JSKFH74RK","description":"","expected":"CoffeeScript","patterns":["CoffeScript"],"specs":[{"from":"CoffeScriptからES6","to":"CoffeeScriptからES6"}],"tags":["typo"]},{"id":"01BQ92YYSHMN57CX27SAJQT2W0","description":"","expected":"Sauce Labs","patterns":["SauceLabs"],"specs":[],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBJENZB6M480KCJ0J99","description":"Reference http://jquery.com/","expected":"jQuery","patterns":["/jquery/i"],"specs":[{"from":"Jquery","to":"jQuery"},{"from":"jquery","to":"jQuery"},{"from":"jquery-ui","to":"jquery-ui"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YW6Y5KA9YRC4HRPWZTVV","description":"","expected":"Flexbox","patterns":["Fluxbox"],"specs":[{"from":"CSS Fluxboxでは","to":"CSS Flexboxでは"}],"tags":["noun","CSS"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YWJG32Z679PF9CHJJD5R","description":"","expected":"$1デフォルトで有効$2","patterns":["/(?:(が)デフォルト有効)|(?:デフォルト有効(に))/"],"specs":[],"tags":["opinion","jser.info"]},{"id":"01BQ92YXWTM3A3CG10MT3FCD55","description":"","expected":"Performance","patterns":["/peformance/i"],"specs":[{"from":"ブラウザ上でどうやって計測するかやPeformance Timelineなどの仕様について","to":"ブラウザ上でどうやって計測するかやPerformance Timelineなどの仕様について"}],"tags":["typo"]},{"id":"01BQ92YYBHB83ZNFWK5WBA58B7","description":"JavaScript is not Java Script","expected":"JavaScript","patterns":["/javascript/i","/Java Script/i"],"specs":[{"from":"javascript","to":"JavaScript"},{"from":"java script","to":"JavaScript"},{"from":"Java script","to":"JavaScript"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBJDYYAR7DFH7M57G1P","description":"AngularJS(1.x)はJSを付けます","expected":"AngularJS","patterns":["/Angular\\.js/i","/angularjs/i"],"specs":[{"from":"Angular.js","to":"AngularJS"}],"tags":["JavaScript"]},{"id":"01F0W5YS57VWFW3DAP3EC92D6Z","description":"https://github.com/sveltejs","expected":"$1velte","patterns":["/(s)velete/i"],"allows":[],"specs":[{"from":"svelete","to":"svelte"},{"from":"Svelete","to":"Svelte"}],"tags":["noun"]},{"id":"01BQ92YYBH2H42AT29Y4BP84FA","description":"Reference https://www.w3.org/TR/touch-events/","expected":"Touch Events","patterns":["/Touch Event/i","/Touch Events/i"],"specs":[{"from":"Touch Event、Fullscreen APIなどのサポートなど","to":"Touch Events、Fullscreen APIなどのサポートなど"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YZ6Q0Y22BVKAVFC4VV1N","description":"Reference http://ocaml.org/","expected":"OCaml","patterns":["/OCaml/i"],"specs":[{"from":"ocaml","to":"OCaml"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YZ6NT1NACB4X0DC8XHFH","description":"","expected":"$1 EAP","patterns":["/([0-9\\.]+)EAP/"],"specs":[],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BSADQQDT7DEBJT25555YCQ14","description":"Reference https://www.mysql.com/","expected":"MySQL","patterns":["/mysql/i"],"specs":[{"from":"mysql is a database.","to":"MySQL is a database."},{"from":"Oracle mysql","to":"Oracle MySQL"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYSF66CHGRP4MX5X6P0Q","description":"O'reilly is OK. But oreilly is not OK","expected":"Oreilly","patterns":["/Oreilly/i"],"specs":[{"from":"oreilly","to":"Oreilly"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]}] \ No newline at end of file diff --git a/.cache/kvs-node-localstorage/proofdict-lastUpdated b/.cache/kvs-node-localstorage/proofdict-lastUpdated index a967ee7..ce86161 100644 --- a/.cache/kvs-node-localstorage/proofdict-lastUpdated +++ b/.cache/kvs-node-localstorage/proofdict-lastUpdated @@ -1 +1 @@ -1638339018373 \ No newline at end of file +1641797272563 \ No newline at end of file diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index 6c8088d..0000000 --- a/package-lock.json +++ /dev/null @@ -1,12739 +0,0 @@ -{ - "name": "zen-articles", - "version": "1.0.0", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "version": "1.0.0", - "license": "ISC", - "dependencies": { - "@proofdict/textlint-rule-proofdict": "^3.1.1", - "@textlint-ja/textlint-rule-no-insert-dropping-sa": "^1.0.1", - "apollo-server-micro": "^2.19.2", - "textlint": "^11.6.3", - "textlint-filter-rule-comments": "^1.2.2", - "textlint-filter-rule-whitelist": "^2.0.0", - "textlint-rule-abbr-within-parentheses": "^1.0.2", - "textlint-rule-footnote-order": "^1.0.3", - "textlint-rule-general-novel-style-ja": "^1.3.0", - "textlint-rule-ja-hiragana-fukushi": "^1.2.0", - "textlint-rule-ja-hiragana-hojodoushi": "^1.0.4", - "textlint-rule-ja-hiragana-keishikimeishi": "^1.0.2", - "textlint-rule-ja-unnatural-alphabet": "^2.0.1", - "textlint-rule-ng-word": "^1.0.0", - "textlint-rule-no-mixed-zenkaku-and-hankaku-alphabet": "^1.0.1", - "textlint-rule-period-in-list-item": "^0.3.2", - "textlint-rule-prefer-tari-tari": "^1.0.3", - "textlint-rule-preset-ja-spacing": "^2.0.2", - "textlint-rule-preset-ja-technical-writing": "^3.1.3", - "textlint-rule-preset-jtf-style": "^2.3.4", - "textlint-rule-prh": "^5.3.0", - "textlint-rule-spellcheck-tech-word": "^5.0.0", - "zenn-cli": "^0.1.93" - } - }, - "node_modules/@apollo/protobufjs": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@apollo/protobufjs/-/protobufjs-1.0.5.tgz", - "integrity": "sha512-ZtyaBH1icCgqwIGb3zrtopV2D5Q8yxibkJzlaViM08eOhTQc7rACdYu0pfORFfhllvdMZ3aq69vifYHszY4gNA==", - "hasInstallScript": true, - "license": "BSD-3-Clause", - "dependencies": { - "@protobufjs/aspromise": "^1.1.2", - "@protobufjs/base64": "^1.1.2", - "@protobufjs/codegen": "^2.0.4", - "@protobufjs/eventemitter": "^1.1.0", - "@protobufjs/fetch": "^1.1.0", - "@protobufjs/float": "^1.0.2", - "@protobufjs/inquire": "^1.1.0", - "@protobufjs/path": "^1.1.2", - "@protobufjs/pool": "^1.1.0", - "@protobufjs/utf8": "^1.1.0", - "@types/long": "^4.0.0", - "@types/node": "^10.1.0", - "long": "^4.0.0" - }, - "bin": { - "apollo-pbjs": "bin/pbjs", - "apollo-pbts": "bin/pbts" - } - }, - "node_modules/@apollo/protobufjs/node_modules/@types/node": { - "version": "10.17.55", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.55.tgz", - "integrity": "sha512-koZJ89uLZufDvToeWO5BrC4CR4OUfHnUz2qoPs/daQH6qq3IN62QFxCTZ+bKaCE0xaoCAJYE4AXre8AbghCrhg==", - "license": "MIT" - }, - "node_modules/@apollographql/apollo-tools": { - "version": "0.4.9", - "resolved": "https://registry.npmjs.org/@apollographql/apollo-tools/-/apollo-tools-0.4.9.tgz", - "integrity": "sha512-M50pk8oo3CGTu4waGOklIX3YtTZoPfWG9K/G9WB8NpyQGA1OwYTiBFv94XqUtKElTDoFwoMXpMQd3Wy5dINvxA==", - "license": "MIT", - "dependencies": { - "apollo-env": "^0.6.6" - }, - "engines": { - "node": ">=8", - "npm": ">=6" - } - }, - "node_modules/@apollographql/graphql-playground-html": { - "version": "1.6.27", - "resolved": "https://registry.npmjs.org/@apollographql/graphql-playground-html/-/graphql-playground-html-1.6.27.tgz", - "integrity": "sha512-tea2LweZvn6y6xFV11K0KC8ETjmm52mQrW+ezgB2O/aTQf8JGyFmMcRPFgUaQZeHbWdm8iisDC6EjOKsXu0nfw==", - "license": "MIT", - "dependencies": { - "xss": "^1.0.8" - } - }, - "node_modules/@apollographql/graphql-upload-8-fork": { - "version": "8.1.3", - "resolved": "https://registry.npmjs.org/@apollographql/graphql-upload-8-fork/-/graphql-upload-8-fork-8.1.3.tgz", - "integrity": "sha512-ssOPUT7euLqDXcdVv3Qs4LoL4BPtfermW1IOouaqEmj36TpHYDmYDIbKoSQxikd9vtMumFnP87OybH7sC9fJ6g==", - "license": "MIT", - "dependencies": { - "@types/express": "*", - "@types/fs-capacitor": "*", - "@types/koa": "*", - "busboy": "^0.3.1", - "fs-capacitor": "^2.0.4", - "http-errors": "^1.7.3", - "object-path": "^0.11.4" - }, - "engines": { - "node": ">=8.5" - }, - "peerDependencies": { - "graphql": "0.13.1 - 15" - } - }, - "node_modules/@apollographql/graphql-upload-8-fork/node_modules/http-errors": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.0.tgz", - "integrity": "sha512-4I8r0C5JDhT5VkvI47QktDW75rNlGVsUf/8hzjCC/wkWI/jdTRmBb9aI7erSG82r1bjKY3F6k28WnsVxB1C73A==", - "license": "MIT", - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/@apollographql/graphql-upload-8-fork/node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "license": "ISC" - }, - "node_modules/@azu/format-text": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@azu/format-text/-/format-text-1.0.1.tgz", - "integrity": "sha1-aWc1CpRkD2sChVFpvYl85U1s6+I=", - "license": "BSD-3-Clause" - }, - "node_modules/@azu/style-format": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@azu/style-format/-/style-format-1.0.0.tgz", - "integrity": "sha1-5wGH+Khi4ZGxvObAJo8TrNOlayA=", - "license": "WTFPL", - "dependencies": { - "@azu/format-text": "^1.0.1" - } - }, - "node_modules/@babel/runtime": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.8.tgz", - "integrity": "sha512-twj3L8Og5SaCRCErB4x4ajbvBIVV77CGeFglHpeg5WC5FF8TZzBWXtTJ4MqaD9QszLYTtr+IsaAL2rEUevb+eg==", - "dependencies": { - "regenerator-runtime": "^0.13.4" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@bahmutov/data-driven": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@bahmutov/data-driven/-/data-driven-1.0.0.tgz", - "integrity": "sha512-YqW3hPS0RXriqjcCrLOTJj+LWe3c8JpwlL83k1ka1Q8U05ZjAKbGQZYeTzUd0NFEnnfPtsUiKGpFEBJG6kFuvg==", - "license": "MIT", - "dependencies": { - "check-more-types": "2.24.0", - "lazy-ass": "1.6.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@kvs/env": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@kvs/env/-/env-0.2.1.tgz", - "integrity": "sha512-6dZlDtRjSRX3ubC+Rt5BdX+z3XTe92IgSG7wPu5a+qFPgKLqjlf+quY+J5JfY3WO8qZEdsMGk3PYTawJUnfrOQ==", - "license": "MIT", - "dependencies": { - "@kvs/indexeddb": "^0.2.1", - "@kvs/node-localstorage": "^0.2.1" - } - }, - "node_modules/@kvs/indexeddb": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@kvs/indexeddb/-/indexeddb-0.2.1.tgz", - "integrity": "sha512-kRFlWxSVS8HDReInHErYho7QfVttSaSD0eeeeQvvFFfC2U9YSR95L70ielgWd6hfUXNa7uzVwAzF8xvgyCCYLQ==", - "license": "MIT", - "dependencies": { - "@kvs/types": "^0.2.1" - } - }, - "node_modules/@kvs/node-localstorage": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@kvs/node-localstorage/-/node-localstorage-0.2.1.tgz", - "integrity": "sha512-10HDKOb/Oi2dGt7CV4UmIeTHQRFMErMjK3q/v/+s0d5YZukr7Er+SqaEJ9e5VFfJxEpaJ8pxRrkT+OLLX67jyw==", - "license": "MIT", - "dependencies": { - "@kvs/storage": "^0.2.1", - "app-root-path": "^3.0.0", - "mkdirp": "^1.0.4", - "node-localstorage": "^2.1.6" - } - }, - "node_modules/@kvs/node-localstorage/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "license": "MIT", - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@kvs/storage": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@kvs/storage/-/storage-0.2.1.tgz", - "integrity": "sha512-Grepnd44Dr2RC+UxdcCe1SdRgIJBTeVihSdX6eRaMKCA2vHr5H63AftakG2rK1wo9pPItBsxFY5YQb64+j+LkQ==", - "license": "MIT", - "dependencies": { - "@kvs/types": "^0.2.1" - } - }, - "node_modules/@kvs/types": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@kvs/types/-/types-0.2.1.tgz", - "integrity": "sha512-tBJjUVCHOR8kk7ez9S4XTI+Qil0xgsRfdW3tAH3DfdoEsLDxANfsM9ZWhj2FWzvBMlQQAvbrENyggMTlw6IHfg==", - "license": "MIT" - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz", - "integrity": "sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA==", - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "2.0.4", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz", - "integrity": "sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q==", - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz", - "integrity": "sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow==", - "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.4", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@proofdict/tester": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@proofdict/tester/-/tester-3.1.0.tgz", - "integrity": "sha512-qzeYjOfNwpt4WF6rN9YHLUsGF3OEGD+Zt3ZfJ1KDw2tKH8e2lr9bVsEIbq7v3KBgoGo43zgx3bNsPM/CuE027w==", - "license": "MIT", - "dependencies": { - "@proofdict/types": "^3.1.0", - "prh": "5.4.4" - } - }, - "node_modules/@proofdict/textlint-rule-proofdict": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@proofdict/textlint-rule-proofdict/-/textlint-rule-proofdict-3.1.1.tgz", - "integrity": "sha512-e3ZCbCVSuwrczNOuTvQPiHn9xOYIwMDJuWZH5tnHMXuh78JGzm2XtSvPuvrMZ0s8kPmK02HNDVo5aTQ8AnvLJw==", - "license": "MIT", - "dependencies": { - "@kvs/env": "^0.2.0", - "@proofdict/tester": "^3.1.0", - "@textlint/kernel": "^3.3.6", - "@textlint/types": "^1.4.5", - "debug": "^4.1.1", - "fetch-ponyfill": "^6.1.0", - "globby": "^10.0.1", - "js-yaml": "^3.13.1", - "textlint-rule-helper": "^2.1.1", - "url-join": "^4.0.1" - } - }, - "node_modules/@proofdict/types": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@proofdict/types/-/types-3.1.0.tgz", - "integrity": "sha512-f8cxZ35ylr4n8TW/eUJ9KynEc484Tiocgl4a/ZZNS1dAH5G4vkJ+1AFw2ob/4dCiafy5tcue6TiZuWBFAmsS5g==", - "license": "MIT" - }, - "node_modules/@protobufjs/aspromise": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", - "integrity": "sha1-m4sMxmPWaafY9vXQiToU00jzD78=", - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/base64": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", - "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==", - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/codegen": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", - "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==", - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/eventemitter": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", - "integrity": "sha1-NVy8mLr61ZePntCV85diHx0Ga3A=", - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/fetch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", - "integrity": "sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=", - "license": "BSD-3-Clause", - "dependencies": { - "@protobufjs/aspromise": "^1.1.1", - "@protobufjs/inquire": "^1.1.0" - } - }, - "node_modules/@protobufjs/float": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", - "integrity": "sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E=", - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/inquire": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", - "integrity": "sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik=", - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/path": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", - "integrity": "sha1-bMKyDFya1q0NzP0hynZz2Nf79o0=", - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/pool": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", - "integrity": "sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q=", - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/utf8": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", - "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=", - "license": "BSD-3-Clause" - }, - "node_modules/@steelydylan/markdown-it-imsize": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@steelydylan/markdown-it-imsize/-/markdown-it-imsize-1.0.2.tgz", - "integrity": "sha512-3tfhRLlv8w3GSNzjEx3y1JIyHpCuBhqXN6tILRTR4IhZcrJb6WJJo12jZ/lKiT9VITg9kHHHg6yVsDwO5nnZqw==" - }, - "node_modules/@steelydylan/prism-diff-highlight": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@steelydylan/prism-diff-highlight/-/prism-diff-highlight-1.0.4.tgz", - "integrity": "sha512-1M16pY3PvWVScLrYj9nENZm1yQ+V/w2YoB6NMZkv+/O/nAHoRg6qS1BX8FNnCKSbIk52QIwj+NUi/sUK2EMuew==" - }, - "node_modules/@textlint-ja/textlint-rule-no-insert-dropping-sa": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@textlint-ja/textlint-rule-no-insert-dropping-sa/-/textlint-rule-no-insert-dropping-sa-1.0.2.tgz", - "integrity": "sha512-znlllxSyAeBWhyNBCJaZLvVDyQgFQp159LKU0EKN69qMxLiXy8ZDEjOEAWqPV36a9JXgL6msg5D87110k5PKGg==", - "license": "MIT", - "dependencies": { - "array-find-index": "^1.0.2", - "kuromojin": "^2.1.1", - "morpheme-match-all": "^2.0.5" - } - }, - "node_modules/@textlint-ja/textlint-rule-no-insert-dropping-sa/node_modules/morpheme-match": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/morpheme-match/-/morpheme-match-2.0.4.tgz", - "integrity": "sha512-C3U5g2h47dpztGVePLA8w2O1aQEvuJORwIcahWaCG91YPrq+0u7qcPsF9Nqqe8noFvHwgO7b2EEk3iPnYuGTew==", - "license": "MIT" - }, - "node_modules/@textlint-ja/textlint-rule-no-insert-dropping-sa/node_modules/morpheme-match-all": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/morpheme-match-all/-/morpheme-match-all-2.0.5.tgz", - "integrity": "sha512-a6B6Nh4AhjMoEzVz8NOT5M9f3XwFVPM395gqnFNUXG/KTqQFTb9qM5JJFHJe+SvWfRVXTZSejyXNt+h+jmHUuQ==", - "license": "MIT", - "dependencies": { - "morpheme-match": "^2.0.4" - } - }, - "node_modules/@textlint-rule/textlint-rule-no-invalid-control-character": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@textlint-rule/textlint-rule-no-invalid-control-character/-/textlint-rule-no-invalid-control-character-1.2.0.tgz", - "integrity": "sha512-FgkOQr14H8D/LQVAEOR2cGWhzItb9MXCAvaBwKkysIfP9Ngwam+8NRmbphQ/GrAm3PXV63QmK1xwAKM1DntwmQ==", - "license": "MIT", - "dependencies": { - "execall": "^1.0.0" - } - }, - "node_modules/@textlint/ast-node-types": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-4.4.1.tgz", - "integrity": "sha512-2QBwlqi2SU83vTHibfdTxGiLdIqR0btNyMGfVl0bwA6FI85HnSYoGFLrdCnq2V0nxpbhuvwzcm2Ja81w0VkMGA==", - "license": "MIT" - }, - "node_modules/@textlint/ast-tester": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/@textlint/ast-tester/-/ast-tester-2.3.2.tgz", - "integrity": "sha512-4e1kyqsHks5POcQmuh7ITVrU/dbYyRUfQarQbeVRPP271n2HnlgnoYyZ10yV2Sb/Ksw+lQf7DPSnwNewXdCWww==", - "license": "MIT", - "dependencies": { - "@textlint/ast-node-types": "^4.4.1" - } - }, - "node_modules/@textlint/ast-traverse": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/@textlint/ast-traverse/-/ast-traverse-2.3.2.tgz", - "integrity": "sha512-Dt1s/6x0XWhUNFH2rAa9gL6ODtq232BZuBHuHiOg+SrVwzl+VjOfa3fMQ0LoYixGSyDtwqAlksWcC0KyLz0eSw==", - "license": "MIT", - "dependencies": { - "@textlint/ast-node-types": "^4.4.1" - } - }, - "node_modules/@textlint/feature-flag": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/@textlint/feature-flag/-/feature-flag-3.3.2.tgz", - "integrity": "sha512-7ErQ/UF0IBAd+PkQNBD7yYCDqL2o6leErMDENSWAgUHWLy5TcHr3Orn7qswtBMW5gIyXW9lh+EpllwLJ5qv35w==", - "license": "MIT", - "dependencies": { - "map-like": "^2.0.0" - } - }, - "node_modules/@textlint/fixer-formatter": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/@textlint/fixer-formatter/-/fixer-formatter-3.3.2.tgz", - "integrity": "sha512-aTEyH/rHSzxRLrluSjNhDnMSgIYK60J5AAgprKJCkb9h3dDRuNoiJ+BXh5FXVSSm1tGF0d8pu+Ph8OFBgQOchQ==", - "license": "MIT", - "dependencies": { - "@textlint/module-interop": "^1.2.2", - "@textlint/types": "^1.5.2", - "chalk": "^1.1.3", - "debug": "^4.3.1", - "diff": "^4.0.2", - "is-file": "^1.0.0", - "string-width": "^1.0.2", - "strip-ansi": "^6.0.0", - "text-table": "^0.2.0", - "try-resolve": "^1.0.1" - } - }, - "node_modules/@textlint/fixer-formatter/node_modules/ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@textlint/fixer-formatter/node_modules/strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@textlint/get-config-base-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@textlint/get-config-base-dir/-/get-config-base-dir-2.0.0.tgz", - "integrity": "sha512-J3cG1pl2llYD4ZaZMe0qVgVaHT8RvT+/SW1FHQ8HRceNalMM9O0Y8iIgtl4GGOx4vMghoIPKFVLASw8P8bJ3ZA==", - "license": "MIT" - }, - "node_modules/@textlint/kernel": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/@textlint/kernel/-/kernel-3.4.2.tgz", - "integrity": "sha512-PpxAtvLGI9ewn+Dbt4j0KMfmMM39/AY3cikmZffu59nyTdIymXMeVMEVkpVZTEUk5OlL27RAON9FF+2u+0fshg==", - "license": "MIT", - "dependencies": { - "@textlint/ast-node-types": "^4.4.1", - "@textlint/ast-tester": "^2.3.2", - "@textlint/ast-traverse": "^2.3.2", - "@textlint/feature-flag": "^3.3.2", - "@textlint/source-code-fixer": "^3.4.2", - "@textlint/types": "^1.5.2", - "@textlint/utils": "^1.2.2", - "debug": "^4.3.1", - "deep-equal": "^1.1.1", - "map-like": "^2.0.0", - "structured-source": "^3.0.2" - } - }, - "node_modules/@textlint/linter-formatter": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/@textlint/linter-formatter/-/linter-formatter-3.3.2.tgz", - "integrity": "sha512-MRa8D1/x6pWycKTwb1QLjtY7GyjgcsYRfV0Gu0Aze5szCa3UDwZSewHycpcAGlIqr8AkqPRfyXi653M47eJ0rA==", - "license": "MIT", - "dependencies": { - "@azu/format-text": "^1.0.1", - "@azu/style-format": "^1.0.0", - "@textlint/module-interop": "^1.2.2", - "@textlint/types": "^1.5.2", - "chalk": "^1.1.3", - "concat-stream": "^1.6.2", - "debug": "^4.3.1", - "is-file": "^1.0.0", - "js-yaml": "^3.14.1", - "optionator": "^0.9.1", - "pluralize": "^2.0.0", - "string-width": "^1.0.2", - "strip-ansi": "^6.0.0", - "table": "^3.8.3", - "text-table": "^0.2.0", - "try-resolve": "^1.0.1", - "xml-escape": "^1.1.0" - }, - "bin": { - "textlint-formatter": "bin/cmd.js" - } - }, - "node_modules/@textlint/linter-formatter/node_modules/ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@textlint/linter-formatter/node_modules/pluralize": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-2.0.0.tgz", - "integrity": "sha1-crcmqm+sHt7uQiVsfY3CVrM1Z38=", - "license": "MIT" - }, - "node_modules/@textlint/linter-formatter/node_modules/strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@textlint/markdown-to-ast": { - "version": "6.3.2", - "resolved": "https://registry.npmjs.org/@textlint/markdown-to-ast/-/markdown-to-ast-6.3.2.tgz", - "integrity": "sha512-uwndF3PRJ48wTVAEDSy0IAEVJg/scxpdZ1r+QKeGuFfdtaGSrtcgROI6qiVU1g/WNyNfQw+DAA7F8HfM+pmleg==", - "license": "MIT", - "dependencies": { - "@textlint/ast-node-types": "^4.4.1", - "debug": "^4.3.1", - "remark-frontmatter": "^1.3.3", - "remark-parse": "^5.0.0", - "structured-source": "^3.0.2", - "traverse": "^0.6.6", - "unified": "^6.2.0" - } - }, - "node_modules/@textlint/module-interop": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@textlint/module-interop/-/module-interop-1.2.2.tgz", - "integrity": "sha512-B8HPS129lOqzEpRcafYl/OJ2TDxfBw1jGfEhebzwt3kGoMd5pQVih+hUIOl+SfAmLWqCDEniaKn0gw1s+hjSXA==", - "license": "MIT" - }, - "node_modules/@textlint/regexp-string-matcher": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@textlint/regexp-string-matcher/-/regexp-string-matcher-1.1.0.tgz", - "integrity": "sha512-uTPnE1Dw1j+9clXPn61ZUdtg+WyhbgeXHwCTfBev7quHjeCP9PS8NdRkR6wEgmjuLg+xZlI4r/e1r6Bd0xyusQ==", - "license": "MIT", - "dependencies": { - "escape-string-regexp": "^1.0.5", - "execall": "^1.0.0", - "lodash.sortby": "^4.7.0", - "lodash.uniq": "^4.5.0", - "lodash.uniqwith": "^4.5.0", - "to-regex": "^3.0.2" - } - }, - "node_modules/@textlint/source-code-fixer": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/@textlint/source-code-fixer/-/source-code-fixer-3.4.2.tgz", - "integrity": "sha512-mSGQNO8is21KcHgDh4S8Cx88r7uU+7xpzHLuEuzhgEZfgwz3+tnpk22TrEjNYe1V1+aseU9iCQegVQQr1wroKQ==", - "license": "MIT", - "dependencies": { - "@textlint/types": "^1.5.2", - "debug": "^4.3.1" - } - }, - "node_modules/@textlint/text-to-ast": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/@textlint/text-to-ast/-/text-to-ast-3.3.2.tgz", - "integrity": "sha512-+DKAP62ho21KID8IcKy1kP6K+kUZk+Z0MwvS9u2l39J0cK+vX523KI+sA6AXxEhOMDA8zhdIsBf3onGvrAtyhA==", - "license": "MIT", - "dependencies": { - "@textlint/ast-node-types": "^4.4.1" - } - }, - "node_modules/@textlint/textlint-plugin-markdown": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/@textlint/textlint-plugin-markdown/-/textlint-plugin-markdown-5.3.2.tgz", - "integrity": "sha512-6Ph7ESKR48tEz5Pnog3PpvF84LU3jkADvr4iBkkVz9vLQt3KbqGnmk8EV94Y0hLEX+UrZKWmH3cJfh6O1Zy/eA==", - "license": "MIT", - "dependencies": { - "@textlint/markdown-to-ast": "^6.3.2" - } - }, - "node_modules/@textlint/textlint-plugin-text": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/@textlint/textlint-plugin-text/-/textlint-plugin-text-4.3.2.tgz", - "integrity": "sha512-xnjad0bXaM6ZtgffuFKogHYkzXymUK3VTLP5MGA00kLitADlNUtwXQk82TebkXFcSPRhePU9+2XFipXNQDsg7g==", - "license": "MIT", - "dependencies": { - "@textlint/text-to-ast": "^3.3.2" - } - }, - "node_modules/@textlint/types": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/@textlint/types/-/types-1.5.2.tgz", - "integrity": "sha512-IdS0h2MCzdY+wjM0+qvl8IW/IxhmVFAVrGu5TmIBpJkihIV7WMa3ITFXIVb0oqwnePUmyLBRIVsCtC66E3QbfQ==", - "license": "MIT", - "dependencies": { - "@textlint/ast-node-types": "^4.4.1" - } - }, - "node_modules/@textlint/utils": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@textlint/utils/-/utils-1.2.2.tgz", - "integrity": "sha512-7Mqcl9G9YYrPBv5d/tZ2NlWC66hTUpQEQxZEHDMTdF3gPmQUSNRNGjqUR9mhw00Wy8Wo6i3LUWuxwMT6heHNBQ==", - "license": "MIT" - }, - "node_modules/@types/accepts": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/accepts/-/accepts-1.3.5.tgz", - "integrity": "sha512-jOdnI/3qTpHABjM5cx1Hc0sKsPoYCp+DP/GJRGtDlPd7fiV9oXGGIcjW/ZOxLIvjGz8MA+uMZI9metHlgqbgwQ==", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-W98JrE0j2K78swW4ukqMleo8R7h/pFETjM2DQ90MF6XK2i4LO4W3gQ71Lt4w3bfm2EvVSyWHplECvB5sK22yFQ==", - "license": "MIT", - "dependencies": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "node_modules/@types/connect": { - "version": "3.4.34", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.34.tgz", - "integrity": "sha512-ePPA/JuI+X0vb+gSWlPKOY0NdNAie/rPUqX2GUPpbZwiKTkSPhjXWuee47E4MtE54QVzGCQMQkAL6JhV2E1+cQ==", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/content-disposition": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/@types/content-disposition/-/content-disposition-0.5.3.tgz", - "integrity": "sha512-P1bffQfhD3O4LW0ioENXUhZ9OIa0Zn+P7M+pWgkCKaT53wVLSq0mrKksCID/FGHpFhRSxRGhgrQmfhRuzwtKdg==", - "license": "MIT" - }, - "node_modules/@types/cookies": { - "version": "0.7.6", - "resolved": "https://registry.npmjs.org/@types/cookies/-/cookies-0.7.6.tgz", - "integrity": "sha512-FK4U5Qyn7/Sc5ih233OuHO0qAkOpEcD/eG6584yEiLKizTFRny86qHLe/rej3HFQrkBuUjF4whFliAdODbVN/w==", - "license": "MIT", - "dependencies": { - "@types/connect": "*", - "@types/express": "*", - "@types/keygrip": "*", - "@types/node": "*" - } - }, - "node_modules/@types/debug": { - "version": "0.0.30", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-0.0.30.tgz", - "integrity": "sha512-orGL5LXERPYsLov6CWs3Fh6203+dXzJkR7OnddIr2514Hsecwc8xRpzCapshBbKFImCsvS/mk6+FWiN5LyZJAQ==", - "license": "MIT" - }, - "node_modules/@types/express": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.11.tgz", - "integrity": "sha512-no+R6rW60JEc59977wIxreQVsIEOAYwgCqldrA/vkpCnbD7MqTefO97lmoBe4WE0F156bC4uLSP1XHDOySnChg==", - "license": "MIT", - "dependencies": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.18", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "node_modules/@types/express-serve-static-core": { - "version": "4.17.18", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.18.tgz", - "integrity": "sha512-m4JTwx5RUBNZvky/JJ8swEJPKFd8si08pPF2PfizYjGZOKr/svUWPcoUmLow6MmPzhasphB7gSTINY67xn3JNA==", - "license": "MIT", - "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*" - } - }, - "node_modules/@types/fs-capacitor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@types/fs-capacitor/-/fs-capacitor-2.0.0.tgz", - …
diff --git a/.cache/kvs-node-localstorage/proofdict b/.cache/kvs-node-localstorage/proofdict index 277aaf0..867b165 100644 --- a/.cache/kvs-node-localstorage/proofdict +++ b/.cache/kvs-node-localstorage/proofdict @@ -1 +1 @@ -[{"id":"01BQ92YWWMY2YZNGG7Q70EZTFE","description":"","expected":"たびたび","patterns":["度々"],"specs":[],"tags":["opinion","表記統一"]},{"id":"01BQ92YYSHHRNMZPY2VG4991B7","description":"","expected":"Travis CI","patterns":["/TravisCI/i"],"specs":[{"from":"TravisCI is a service","to":"Travis CI is a service"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01EKJAAAXCZR005PDSTRVT24QZ","description":"Jamstackに統一された https://github.com/jamstack/jamstack.org/issues/279","expected":"Jamstack","patterns":["/\\bJAMStack\\b/i"],"allows":[],"specs":[{"from":"Jamstack","to":"Jamstack"},{"from":"JAMStack is old word","to":"Jamstack is old word"},{"from":"jamjasmstack","to":"jamjasmstack"}],"tags":["noun"]},{"id":"01BQ92YWJF8WXN0M9FE0S4QYW5","description":"","expected":"$1発売","patterns":["/(\\d+年\\d+月\\d+日)\\s発売/"],"specs":[],"tags":["opinion","jser.info"]},{"id":"01BQ92YXWVT5PGRGQCH1ZZ6S7V","description":"","expected":"operator","patterns":["oeprator"],"specs":[],"tags":["typo"]},{"id":"01BQ92YYBGNT2ZA7SCBGZP4XW8","description":"Reference https://www.w3.org/TR/webstorage/","expected":"sessionStorage","patterns":["sessionstorage","session storage"],"specs":[{"from":"sessionstorage is a parts of webstorage","to":"sessionStorage is a parts of webstorage"},{"from":"session storage is a parts of webstorage","to":"sessionStorage is a parts of webstorage"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YZ6QD58PVYY3FE7QD2S5","description":"Reference http://www.seleniumhq.org/projects/webdriver/","expected":"WebDriver","patterns":["/WebDriver/i","/Web Driver/i"],"specs":[{"from":"Web Driver is designed in a simpler and more concise programming interface","to":"WebDriver is designed in a simpler and more concise programming interface"},{"from":"webdriver is designed in a simpler and more concise programming interface","to":"WebDriver is designed in a simpler and more concise programming interface"},{"from":"WebdriverIO is OK.","to":"WebdriverIO is OK."}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BW0P1BD0VKQQMZ4E947WVMJ1","description":"See https://developer.mozilla.org/en-US/Add-ons/WebExtensions/What_are_WebExtensions","expected":"WebExtension$1","patterns":["/Web Extension(s)?/"],"specs":[{"from":"Web Extension","to":"WebExtension"},{"from":"Extensions for Firefox are built using WebExtensions APIs","to":"Extensions for Firefox are built using WebExtensions APIs"},{"from":"WebExtension APIs are designed to be compatible with Chrome and Opera extensions","to":"WebExtension APIs are designed to be compatible with Chrome and Opera extensions"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBJTDA6WF56ZE9PKP8F","description":"Reference http://underscorejs.org/","expected":"Underscore.js","patterns":["/underscore.js/i"],"specs":[],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YXWVJ7HG4TDWA45RH297","description":"","expected":"webpack","patterns":["/\\bwebpac(?!k)\\b/"],"specs":[{"from":"webpacのビルド速度改善についてのスライド","to":"webpackのビルド速度改善についてのスライド"}],"tags":["typo"]},{"id":"01BQ92YYBH2EZP1E4KVNDMXYV9","description":"Pointer Eventsに統一","expected":"Pointer Events","patterns":["/pointer event/i","/pointer events/i"],"specs":[{"from":"Pointer Events","to":"Pointer Events"},{"from":"MSEdgeの対応、pointer eventsなど対応、","to":"MSEdgeの対応、Pointer Eventsなど対応、"},{"from":"MSEdgeの対応、pointer eventなど対応、","to":"MSEdgeの対応、Pointer Eventsなど対応、"},{"from":"pointer-events","to":"pointer-events"}],"tags":["JavaScript","noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBHGYFTTDANV4RNC3CJ","description":"Should have a space between words. Reference https://github.com/w3c/ServiceWorker","expected":"$1 $2","patterns":["/(service)(worker)/i"],"specs":[{"from":"This is serviceworker?","to":"This is service worker?"},{"from":"ServiceWorker","to":"Service Worker"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBGWJZC59XKSNA53X2C","description":"Reference https://www.w3.org/TR/webstorage/","expected":"localStorage","patterns":["localstorage","local storage"],"specs":[{"from":"localstorage is a parts of webstorage","to":"localStorage is a parts of webstorage"},{"from":"local storage is a parts of webstorage","to":"localStorage is a parts of webstorage"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBJCY50GECA6CQH874F","description":"Reference https://www.emberjs.com/","expected":"Ember.js","patterns":["/Ember\\.js/i"],"specs":[{"from":"ember.js","to":"Ember.js"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YXWQDKGCA9W74SKW7VST","description":"","expected":"Arrow Function","patterns":["Array Function"],"specs":[],"tags":["typo"]},{"id":"01BQ92YYBEFBXEHH8T8HC8RCRD","description":"Reference https://www.ecma-international.org/publications/standards/Ecma-262.htm","expected":"ECMAScript $1","patterns":["/ECMAScript([0-9]+)/i","/ECMA Script([0-9]+)/i"],"specs":[{"from":"ECMASCRIPT5","to":"ECMAScript 5"},{"from":"ecmascript2015","to":"ECMAScript 2015"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBGQBRYXEZK5ZRRK1WW","description":"","expected":"Ecma標準","patterns":["ECMA標準"],"specs":[],"tags":["JavaScript"]},{"id":"01BQ92YYBGSXM66TN1ZSJH177M","description":"","expected":"ES6 Classes","patterns":["/\\bES6 classes\\b/i"],"specs":[{"from":"ES6 classes","to":"ES6 Classes"}],"tags":["JavaScript"]},{"id":"01BQ92YXWVMAMKQ3VK2DNYNCCP","description":"Customのtypoです","expected":"Custom","patterns":["/Custome\\b/i"],"specs":[{"from":"WebVRをCustome Elementのタグで書く","to":"WebVRをCustom Elementのタグで書く"}],"tags":["typo"]},{"id":"01BQ92YYBH4NNWB305Y1TD7B6N","description":"Reference https://www.w3.org/TR/webaudio/","expected":"Web Audio API","patterns":["/WebAudio API/i","/Web AudioAPI/i","/Web Audio API/i"],"specs":[{"from":"All scheduled times in the WebAudio API are relative to the value of currentTime.","to":"All scheduled times in the Web Audio API are relative to the value of currentTime."}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBJK6WW9Y09W7TF1YTT","description":"See http://todomvc.com/","expected":"TodoMVC","patterns":["/todomvc/i"],"specs":[{"from":"todomvc is todo app.","to":"TodoMVC is todo app."}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQMSTDZCWH8P81E7PBG9BMQS","description":"importのtypoです","expected":"Import","patterns":["Impport"],"specs":[{"from":"Dynamic Impport","to":"Dynamic Import"},{"from":"Impporter","to":"Importer"}],"tags":["typo"]},{"id":"01F4VMKJAEKHMANZVFFR9D6DJA","description":"AWS CloudFront https://aws.amazon.com/jp/cloudfront/","expected":"CloudFront","patterns":["/\\bCloudFront\\b/i"],"allows":["{{COMBINATION_WORD}}"],"specs":[{"from":"Cloudront","to":"Cloudront"},{"from":"Cloudfront","to":"CloudFront"},{"from":"awscloudfront","to":"awscloudfront"}],"tags":["noun"]},{"id":"01CF6NR1Q7XWC035B9XJXNB852","description":"typo","expected":"$1nimation","patterns":["/(a)nimation/i"],"specs":[{"from":"Animation","to":"Animation"},{"from":"CSS Animation","to":"CSS Animation"},{"from":"CSS animations","to":"CSS animations"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01FB0ZGJEK2GEKX4AM7KCT1E8Y","description":"WHAWG typo","expected":"WHATWG","patterns":["/\\bWHAWG\\b/","/\\bWHATWGT\\b/"],"allows":[],"specs":[{"from":"WHATWG","to":"WHATWG"},{"from":"WHAWG","to":"WHATWG"},{"from":"WHATWG","to":"WHATWG"}],"tags":["noun"]},{"id":"01DSDJ2ZNSB644ZB0SD53C62X5","description":"","expected":"Archive","patterns":["Archieve"],"allows":[],"specs":[{"from":"HTTP Archieve","to":"HTTP Archive"}],"tags":["noun"]},{"id":"01BQ92YYBJXRCA80R6BCA4SS7K","description":"Angular(2.0~)","expected":"Angular","patterns":["/angular/i"],"specs":[{"from":"angular","to":"Angular"},{"from":"angulardart","to":"angulardart"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YWWH8TVT2N8FT61TTDNH","description":"ひらがなで書かず、漢字で書くと読みやすくなります","expected":"$1中","patterns":["/(その)なか/","/(世界|日)じゅう/"],"specs":[],"tags":["opinion","表記統一"]},{"id":"01BQ92YYBHA4FM6A82V2ZT0V91","description":"Reference https://www.w3.org/TR/html-imports/","expected":"HTML Imports","patterns":["/HTML Import/i"],"specs":[{"from":"HTML import","to":"HTML Imports"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01EKP3RFQ18K47EYH1ZKB5E4R5","description":"https://github.com/GoogleChrome/lighthouse","expected":"Lighthouse","patterns":["/\\bLighthouse\\b/i"],"allows":["{{COMBINATION_WORD}}"],"specs":[{"from":" lighthouse","to":" Lighthouse"},{"from":"lighthouse-cli","to":"lighthouse-cli"},{"from":"Lighthouse analyzes web apps","to":"Lighthouse analyzes web apps"}],"tags":["noun"]},{"id":"01C1VCJNDQW7RN25S24KNP9V4M","description":"A typo Chromium","expected":"$1hromium","patterns":["/(C)hronium/i"],"specs":[{"from":"Chrome is Chronium","to":"Chrome is Chromium"},{"from":"Chrome is chronium","to":"Chrome is chromium"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBJP9EDR7KS993CMQAR","description":"","expected":"Virtual DOM","patterns":["/VirtualDOM/i"],"specs":[{"from":"VirtualDOM is virtual dom object","to":"Virtual DOM is virtual dom object"}],"tags":["noun","opinion","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBGZPBHMB3DMMXMJ0CJ","description":"","expected":"ES.next","patterns":["ES next"],"specs":[{"from":"ES nextでは","to":"ES.nextでは"}],"tags":["JavaScript"]},{"id":"01BQ92YW70P4BSGE4ZBMKECATV","description":"","expected":"PostCSS","patterns":["/PostCSS/i"],"specs":[{"from":"postcss","to":"PostCSS"}],"tags":["noun","CSS"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YZ6QCTPXGPWWJ5NWT6NC","description":"","expected":"Virtual Machine","patterns":["Virtual machine"],"specs":[{"from":"MSEdgeが使えるWindows 10のVirtual machine(VM)が公開された","to":"MSEdgeが使えるWindows 10のVirtual Machine(VM)が公開された"}],"tags":["noun","opinion"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYSHHTGFD78FF7NB4RX9","description":"","expected":"HTML5 Rocks","patterns":["/HTML5Rocks/i","/HTML5Rock/i"],"specs":[{"from":"HTML5Rockに現在公開されている翻訳記事のまとめ","to":"HTML5 Rocksに現在公開されている翻訳記事のまとめ"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01DTET96387SQ3VYTXHYSX5BYS","description":"WebAssembly (abbreviated Wasm) https://webassembly.org/","expected":"Wasm","patterns":["/wasm/i"],"allows":[],"specs":[{"from":"wasm","to":"Wasm"},{"from":"WAsm","to":"Wasm"},{"from":"WebAssembly (abbreviated Wasm) ","to":"WebAssembly (abbreviated Wasm) "}],"tags":["noun"]},{"id":"01BQ92YYSD9K713DCXTFGNDENS","description":"Reference https://leanpub.com/","expected":"Leanpub","patterns":["/leanpub/i"],"specs":[{"from":"leanpub","to":"Leanpub"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YZ6QR8RJKA5Y8W2F9NMY","description":"Reference https://webkit.org/","expected":"WebKit","patterns":["/webkit/i"],"specs":[{"from":"これはwebkitです","to":"これはWebKitです"},{"from":"XXXwebkit","to":"XXXwebkit"},{"from":"node-webkit","to":"node-webkit"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YXWVY5EFQNE4ZV8K0HS5","description":"","expected":"package.json","patterns":["packge.json"],"specs":[],"tags":["typo"]},{"id":"01EF8QSDGRB63DFJ54B68AKN7J","description":"webpack is lower-case https://webpack.js.org/","expected":"webpack","patterns":["/\\bwebpack\\b/i"],"allows":[],"specs":[{"from":"webpack","to":"webpack"},{"from":"WebPack","to":"webpack"},{"from":"BuildWebPack is OK","to":"BuildWebPack is OK"}],"tags":["noun"]},{"id":"01BQ92YZ6R35HCYAZGN18RB35E","description":"Reference https://www.microsoft.com/windows","expected":"Windows $1","patterns":["/Windows (\\d+)/i"],"specs":[{"from":"OK windows","to":"OK windows"},{"from":"windows 10","to":"Windows 10"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBGNAKFHY1TFA9Z3KTC","description":"Reference https://w3c.github.io/webcomponents/explainer/","expected":"Web Components","patterns":["/WebComponents/i","/web components/i"],"specs":[{"from":"WebComponentsについてのWeeklyメールマガジン","to":"Web ComponentsについてのWeeklyメールマガジン"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01D1SNYB7AA69NTAEBT1X651RB","description":"Brotliはbr","expected":"$1rotli","patterns":["/\\b(b)rottli\\b/i"],"allows":[],"specs":[{"from":"brottli compression","to":"brotli compression"},{"from":"brottli圧縮","to":"brotli圧縮"},{"from":"BrotliはbrotliでOK","to":"BrotliはbrotliでOK"}],"tags":["noun"]},{"id":"01BQ92YXWFVPNRGMBZ3RZNN1RD","description":"","expected":"Foundation","patterns":["Fundation"],"specs":[{"from":"Fundation","to":"Foundation"}],"tags":["typo"]},{"id":"01BQ92YXWTV260J4A7W8TSWEXH","description":"","expected":"Workaround","patterns":["Workaound"],"specs":[{"from":"iOS7と8のquerySelectorバグの対処(Workaound)","to":"iOS7と8のquerySelectorバグの対処(Workaround)"}],"tags":["typo"]},{"id":"01BQ92YYBJBBNRPR2WYHMDYPPG","description":"Reference http://source-map.github.io/","expected":"Source Map","patterns":["/Source Map/i","/SourceMap/i"],"specs":[{"from":"多段SourceMapに対応","to":"多段Source Mapに対応"},{"from":"SourceMap","to":"Source Map"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YXWQ02R8SE1ZZHCG89P5","description":"","expected":"Property","patterns":["/propety/i"],"specs":[{"from":"propety","to":"Property"}],"tags":["typo"]},{"id":"01F0W5YS57VWFW3DAP3EC92D6Y","description":"https://github.com/sveltejs/kit","expected":"SvelteKit","patterns":["/SveleteKit/i"],"allows":[],"specs":[{"from":"SveleteKit","to":"SvelteKit"},{"from":"SvelteKit","to":"SvelteKit"}],"tags":["noun"]},{"id":"01BQ92YXWR8T1QBP2JSKFH74RK","description":"","expected":"CoffeeScript","patterns":["CoffeScript"],"specs":[{"from":"CoffeScriptからES6","to":"CoffeeScriptからES6"}],"tags":["typo"]},{"id":"01BQ92YYSHMN57CX27SAJQT2W0","description":"","expected":"Sauce Labs","patterns":["SauceLabs"],"specs":[],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBJENZB6M480KCJ0J99","description":"Reference http://jquery.com/","expected":"jQuery","patterns":["/jquery/i"],"specs":[{"from":"Jquery","to":"jQuery"},{"from":"jquery","to":"jQuery"},{"from":"jquery-ui","to":"jquery-ui"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YW6Y5KA9YRC4HRPWZTVV","description":"","expected":"Flexbox","patterns":["Fluxbox"],"specs":[{"from":"CSS Fluxboxでは","to":"CSS Flexboxでは"}],"tags":["noun","CSS"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YWJG32Z679PF9CHJJD5R","description":"","expected":"$1デフォルトで有効$2","patterns":["/(?:(が)デフォルト有効)|(?:デフォルト有効(に))/"],"specs":[],"tags":["opinion","jser.info"]},{"id":"01BQ92YXWTM3A3CG10MT3FCD55","description":"","expected":"Performance","patterns":["/peformance/i"],"specs":[{"from":"ブラウザ上でどうやって計測するかやPeformance Timelineなどの仕様について","to":"ブラウザ上でどうやって計測するかやPerformance Timelineなどの仕様について"}],"tags":["typo"]},{"id":"01BQ92YYBHB83ZNFWK5WBA58B7","description":"JavaScript is not Java Script","expected":"JavaScript","patterns":["/javascript/i","/Java Script/i"],"specs":[{"from":"javascript","to":"JavaScript"},{"from":"java script","to":"JavaScript"},{"from":"Java script","to":"JavaScript"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBJDYYAR7DFH7M57G1P","description":"AngularJS(1.x)はJSを付けます","expected":"AngularJS","patterns":["/Angular\\.js/i","/angularjs/i"],"specs":[{"from":"Angular.js","to":"AngularJS"}],"tags":["JavaScript"]},{"id":"01F0W5YS57VWFW3DAP3EC92D6Z","description":"https://github.com/sveltejs","expected":"$1velte","patterns":["/(s)velete/i"],"allows":[],"specs":[{"from":"svelete","to":"svelte"},{"from":"Svelete","to":"Svelte"}],"tags":["noun"]},{"id":"01BQ92YYBH2H42AT29Y4BP84FA","description":"Reference https://www.w3.org/TR/touch-events/","expected":"Touch Events","patterns":["/Touch Event/i","/Touch Events/i"],"specs":[{"from":"Touch Event、Fullscreen APIなどのサポートなど","to":"Touch Events、Fullscreen APIなどのサポートなど"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YZ6Q0Y22BVKAVFC4VV1N","description":"Reference http://ocaml.org/","expected":"OCaml","patterns":["/OCaml/i"],"specs":[{"from":"ocaml","to":"OCaml"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YZ6NT1NACB4X0DC8XHFH","description":"","expected":"$1 EAP","patterns":["/([0-9\\.]+)EAP/"],"specs":[],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BSADQQDT7DEBJT25555YCQ14","description":"Reference https://www.mysql.com/","expected":"MySQL","patterns":["/mysql/i"],"specs":[{"from":"mysql is a database.","to":"MySQL is a database."},{"from":"Oracle mysql","to":"Oracle MySQL"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYSF66CHGRP4MX5X6P0Q","description":"O'reilly is OK. But oreilly is not OK","expected":"Oreilly","patterns":["/Oreilly/i"],"specs":[{"from":"oreilly","to":"Oreilly"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]}] \ No newline at end of file +[{"id":"01BQ92YWWNN391X0F0PW38761G","description":"","expected":"または","patterns":["又は"],"specs":[],"tags":["opinion","表記統一"]},{"id":"01BQ92YYBJTDA6WF56ZE9PKP8F","description":"Reference http://underscorejs.org/","expected":"Underscore.js","patterns":["/underscore.js/i"],"specs":[],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01EKJAAAXCZR005PDSTRVT24QZ","description":"Jamstackに統一された https://github.com/jamstack/jamstack.org/issues/279","expected":"Jamstack","patterns":["/\\bJAMStack\\b/i"],"allows":[],"specs":[{"from":"Jamstack","to":"Jamstack"},{"from":"JAMStack is old word","to":"Jamstack is old word"},{"from":"jamjasmstack","to":"jamjasmstack"}],"tags":["noun"]},{"id":"01BQ92YZ6R35HCYAZGN18RB35E","description":"Reference https://www.microsoft.com/windows","expected":"Windows $1","patterns":["/Windows (\\d+)/i"],"specs":[{"from":"OK windows","to":"OK windows"},{"from":"windows 10","to":"Windows 10"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YXWTM3A3CG10MT3FCD55","description":"","expected":"Performance","patterns":["/peformance/i"],"specs":[{"from":"ブラウザ上でどうやって計測するかやPeformance Timelineなどの仕様について","to":"ブラウザ上でどうやって計測するかやPerformance Timelineなどの仕様について"}],"tags":["typo"]},{"id":"01BQ92YWWRZAQH7M4QN2T8W7Y7","description":"","expected":"$1中","patterns":["/(世界|日)じゅう/"],"specs":[],"tags":["opinion","表記統一"]},{"id":"01BQ92YYBGNAKFHY1TFA9Z3KTC","description":"Reference https://w3c.github.io/webcomponents/explainer/","expected":"Web Components","patterns":["/WebComponents/i","/web components/i"],"specs":[{"from":"WebComponentsについてのWeeklyメールマガジン","to":"Web ComponentsについてのWeeklyメールマガジン"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBGZPBHMB3DMMXMJ0CJ","description":"","expected":"ES.next","patterns":["ES next"],"specs":[{"from":"ES nextでは","to":"ES.nextでは"}],"tags":["JavaScript"]},{"id":"01C1VCJNDQW7RN25S24KNP9V4M","description":"A typo Chromium","expected":"$1hromium","patterns":["/(C)hronium/i"],"specs":[{"from":"Chrome is Chronium","to":"Chrome is Chromium"},{"from":"Chrome is chronium","to":"Chrome is chromium"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YWWV2VVD5WZ1B8TFTBQP","description":"","expected":"$1とおり","patterns":["/(思った|以下の)通り/"],"specs":[],"tags":["opinion","表記統一"]},{"id":"01BQ92YYSD9K713DCXTFGNDENS","description":"Reference https://leanpub.com/","expected":"Leanpub","patterns":["/leanpub/i"],"specs":[{"from":"leanpub","to":"Leanpub"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBEFBXEHH8T8HC8RCRD","description":"Reference https://www.ecma-international.org/publications/standards/Ecma-262.htm","expected":"ECMAScript $1","patterns":["/ECMAScript([0-9]+)/i","/ECMA Script([0-9]+)/i"],"specs":[{"from":"ECMASCRIPT5","to":"ECMAScript 5"},{"from":"ecmascript2015","to":"ECMAScript 2015"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YXWVY5EFQNE4ZV8K0HS5","description":"","expected":"package.json","patterns":["packge.json"],"specs":[],"tags":["typo"]},{"id":"01BQ92YXWVJ7HG4TDWA45RH297","description":"","expected":"webpack","patterns":["/\\bwebpac(?!k)\\b/"],"specs":[{"from":"webpacのビルド速度改善についてのスライド","to":"webpackのビルド速度改善についてのスライド"}],"tags":["typo"]},{"id":"01EKP3RFQ18K47EYH1ZKB5E4R5","description":"https://github.com/GoogleChrome/lighthouse","expected":"Lighthouse","patterns":["/\\bLighthouse\\b/i"],"allows":["{{COMBINATION_WORD}}"],"specs":[{"from":" lighthouse","to":" Lighthouse"},{"from":"lighthouse-cli","to":"lighthouse-cli"},{"from":"Lighthouse analyzes web apps","to":"Lighthouse analyzes web apps"}],"tags":["noun"]},{"id":"01DTET96387SQ3VYTXHYSX5BYS","description":"WebAssembly (abbreviated Wasm) https://webassembly.org/","expected":"Wasm","patterns":["/wasm/i"],"allows":[],"specs":[{"from":"wasm","to":"Wasm"},{"from":"WAsm","to":"Wasm"},{"from":"WebAssembly (abbreviated Wasm) ","to":"WebAssembly (abbreviated Wasm) "}],"tags":["noun"]},{"id":"01F0W5YS57VWFW3DAP3EC92D6Z","description":"https://github.com/sveltejs","expected":"$1velte","patterns":["/(s)velete/i"],"allows":[],"specs":[{"from":"svelete","to":"svelte"},{"from":"Svelete","to":"Svelte"}],"tags":["noun"]},{"id":"01BQ92YYSHHRNMZPY2VG4991B7","description":"","expected":"Travis CI","patterns":["/TravisCI/i"],"specs":[{"from":"TravisCI is a service","to":"Travis CI is a service"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBGNT2ZA7SCBGZP4XW8","description":"Reference https://www.w3.org/TR/webstorage/","expected":"sessionStorage","patterns":["sessionstorage","session storage"],"specs":[{"from":"sessionstorage is a parts of webstorage","to":"sessionStorage is a parts of webstorage"},{"from":"session storage is a parts of webstorage","to":"sessionStorage is a parts of webstorage"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BW0P1BD0VKQQMZ4E947WVMJ1","description":"See https://developer.mozilla.org/en-US/Add-ons/WebExtensions/What_are_WebExtensions","expected":"WebExtension$1","patterns":["/Web Extension(s)?/"],"specs":[{"from":"Web Extension","to":"WebExtension"},{"from":"Extensions for Firefox are built using WebExtensions APIs","to":"Extensions for Firefox are built using WebExtensions APIs"},{"from":"WebExtension APIs are designed to be compatible with Chrome and Opera extensions","to":"WebExtension APIs are designed to be compatible with Chrome and Opera extensions"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YXWQ02R8SE1ZZHCG89P5","description":"","expected":"Property","patterns":["/propety/i"],"specs":[{"from":"propety","to":"Property"}],"tags":["typo"]},{"id":"01FB0ZGJEK2GEKX4AM7KCT1E8Y","description":"WHAWG typo","expected":"WHATWG","patterns":["/\\bWHAWG\\b/","/\\bWHATWGT\\b/"],"allows":[],"specs":[{"from":"WHATWG","to":"WHATWG"},{"from":"WHAWG","to":"WHATWG"},{"from":"WHATWG","to":"WHATWG"}],"tags":["noun"]},{"id":"01BQ92YYBGQBRYXEZK5ZRRK1WW","description":"","expected":"Ecma標準","patterns":["ECMA標準"],"specs":[],"tags":["JavaScript"]},{"id":"01DSDJ2ZNSB644ZB0SD53C62X5","description":"","expected":"Archive","patterns":["Archieve"],"allows":[],"specs":[{"from":"HTTP Archieve","to":"HTTP Archive"}],"tags":["noun"]},{"id":"01BQ92YXWTV260J4A7W8TSWEXH","description":"","expected":"Workaround","patterns":["Workaound"],"specs":[{"from":"iOS7と8のquerySelectorバグの対処(Workaound)","to":"iOS7と8のquerySelectorバグの対処(Workaround)"}],"tags":["typo"]},{"id":"01G8GDRNBSXRWWTB493W353VFV","description":"NestJS https://nestjs.com/","expected":"NestJS","patterns":["/Nest\\.js/i","/Nestjs/i"],"allows":[],"specs":[{"from":"NestJS","to":"NestJS"},{"from":"Nest.js","to":"NestJS"}],"tags":[]},{"id":"01BQ92YWJG32Z679PF9CHJJD5R","description":"","expected":"$1デフォルトで有効$2","patterns":["/(?:(が)デフォルト有効)|(?:デフォルト有効(に))/"],"specs":[],"tags":["opinion","jser.info"]},{"id":"01BQMSTDZCWH8P81E7PBG9BMQS","description":"importのtypoです","expected":"Import","patterns":["Impport"],"specs":[{"from":"Dynamic Impport","to":"Dynamic Import"},{"from":"Impporter","to":"Importer"}],"tags":["typo"]},{"id":"01CF6NR1Q7XWC035B9XJXNB852","description":"typo","expected":"$1nimation","patterns":["/(a)nimation/i"],"specs":[{"from":"Animation","to":"Animation"},{"from":"CSS Animation","to":"CSS Animation"},{"from":"CSS animations","to":"CSS animations"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YZ6QCTPXGPWWJ5NWT6NC","description":"","expected":"Virtual Machine","patterns":["Virtual machine"],"specs":[{"from":"MSEdgeが使えるWindows 10のVirtual machine(VM)が公開された","to":"MSEdgeが使えるWindows 10のVirtual Machine(VM)が公開された"}],"tags":["noun","opinion"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YW70P4BSGE4ZBMKECATV","description":"","expected":"PostCSS","patterns":["/PostCSS/i"],"specs":[{"from":"postcss","to":"PostCSS"}],"tags":["noun","CSS"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YZ6QR8RJKA5Y8W2F9NMY","description":"Reference https://webkit.org/","expected":"WebKit","patterns":["/webkit/i"],"specs":[{"from":"これはwebkitです","to":"これはWebKitです"},{"from":"XXXwebkit","to":"XXXwebkit"},{"from":"node-webkit","to":"node-webkit"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01F4VMKJAEKHMANZVFFR9D6DJA","description":"AWS CloudFront https://aws.amazon.com/jp/cloudfront/","expected":"CloudFront","patterns":["/\\bCloudFront\\b/i"],"allows":["{{COMBINATION_WORD}}"],"specs":[{"from":"Cloudront","to":"Cloudront"},{"from":"Cloudfront","to":"CloudFront"},{"from":"awscloudfront","to":"awscloudfront"}],"tags":["noun"]},{"id":"01BQ92YYSF66CHGRP4MX5X6P0Q","description":"O'reilly is OK. But oreilly is not OK","expected":"Oreilly","patterns":["/Oreilly/i"],"specs":[{"from":"oreilly","to":"Oreilly"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01D1SNYB7AA69NTAEBT1X651RB","description":"Brotliはbr","expected":"$1rotli","patterns":["/\\b(b)rottli\\b/i"],"allows":[],"specs":[{"from":"brottli compression","to":"brotli compression"},{"from":"brottli圧縮","to":"brotli圧縮"},{"from":"BrotliはbrotliでOK","to":"BrotliはbrotliでOK"}],"tags":["noun"]},{"id":"01BQ92YYBH2EZP1E4KVNDMXYV9","description":"Pointer Eventsに統一","expected":"Pointer Events","patterns":["/pointer event/i","/pointer events/i"],"specs":[{"from":"Pointer Events","to":"Pointer Events"},{"from":"MSEdgeの対応、pointer eventsなど対応、","to":"MSEdgeの対応、Pointer Eventsなど対応、"},{"from":"MSEdgeの対応、pointer eventなど対応、","to":"MSEdgeの対応、Pointer Eventsなど対応、"},{"from":"pointer-events","to":"pointer-events"}],"tags":["JavaScript","noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YZ6QD58PVYY3FE7QD2S5","description":"Reference http://www.seleniumhq.org/projects/webdriver/","expected":"WebDriver","patterns":["/WebDriver/i","/Web Driver/i"],"specs":[{"from":"Web Driver is designed in a simpler and more concise programming interface","to":"WebDriver is designed in a simpler and more concise programming interface"},{"from":"webdriver is designed in a simpler and more concise programming interface","to":"WebDriver is designed in a simpler and more concise programming interface"},{"from":"WebdriverIO is OK.","to":"WebdriverIO is OK."}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YXWFVPNRGMBZ3RZNN1RD","description":"","expected":"Foundation","patterns":["Fundation"],"specs":[{"from":"Fundation","to":"Foundation"}],"tags":["typo"]},{"id":"01BQ92YXWQDKGCA9W74SKW7VST","description":"","expected":"Arrow Function","patterns":["Array Function"],"specs":[],"tags":["typo"]},{"id":"01BQ92YYBHB83ZNFWK5WBA58B7","description":"JavaScript is not Java Script","expected":"JavaScript","patterns":["/javascript/i","/Java Script/i"],"specs":[{"from":"javascript","to":"JavaScript"},{"from":"java script","to":"JavaScript"},{"from":"Java script","to":"JavaScript"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBHA4FM6A82V2ZT0V91","description":"Reference https://www.w3.org/TR/html-imports/","expected":"HTML Imports","patterns":["/HTML Import/i"],"specs":[{"from":"HTML import","to":"HTML Imports"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01GJWEJCX5NN3HE149AXN1ZGGS","description":"","expected":"1Password","patterns":["/1\\s?Password/i"],"allows":[],"specs":[{"from":"1Password","to":"1Password"},{"from":"1password","to":"1Password"},{"from":"1 Password","to":"1Password"}],"tags":["noun"]},{"id":"01BQ92YZ6Q0Y22BVKAVFC4VV1N","description":"Reference http://ocaml.org/","expected":"OCaml","patterns":["/OCaml/i"],"specs":[{"from":"ocaml","to":"OCaml"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBGSXM66TN1ZSJH177M","description":"","expected":"ES6 Classes","patterns":["/\\bES6 classes\\b/i"],"specs":[{"from":"ES6 classes","to":"ES6 Classes"}],"tags":["JavaScript"]},{"id":"01BQ92YYBJXRCA80R6BCA4SS7K","description":"Angular(2.0~)","expected":"Angular","patterns":["/angular/i"],"specs":[{"from":"angular","to":"Angular"},{"from":"angulardart","to":"angulardart"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBJCY50GECA6CQH874F","description":"Reference https://www.emberjs.com/","expected":"Ember.js","patterns":["/Ember\\.js/i"],"specs":[{"from":"ember.js","to":"Ember.js"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBJK6WW9Y09W7TF1YTT","description":"See http://todomvc.com/","expected":"TodoMVC","patterns":["/todomvc/i"],"specs":[{"from":"todomvc is todo app.","to":"TodoMVC is todo app."}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBGWJZC59XKSNA53X2C","description":"Reference https://www.w3.org/TR/webstorage/","expected":"localStorage","patterns":["localstorage","local storage"],"specs":[{"from":"localstorage is a parts of webstorage","to":"localStorage is a parts of webstorage"},{"from":"local storage is a parts of webstorage","to":"localStorage is a parts of webstorage"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01FXD5E4MNMPYWCJPV2KG5Y5QZ","description":"typo","expected":"Microsoft","patterns":["/Microsfot/i"],"allows":[],"specs":[{"from":"MicrosfotV","to":"MicrosfotV"},{"from":"MS","to":"MS"},{"from":"MicrosoftVisio","to":"MicrosoftVisio"}],"tags":["noun"]},{"id":"01BQ92YYSHMN57CX27SAJQT2W0","description":"","expected":"Sauce Labs","patterns":["SauceLabs"],"specs":[],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBHGYFTTDANV4RNC3CJ","description":"Should have a space between words. Reference https://github.com/w3c/ServiceWorker","expected":"$1 $2","patterns":["/(service)(worker)/i"],"specs":[{"from":"This is serviceworker?","to":"This is service worker?"},{"from":"ServiceWorker","to":"Service Worker"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YW6Y5KA9YRC4HRPWZTVV","description":"","expected":"Flexbox","patterns":["Fluxbox"],"specs":[{"from":"CSS Fluxboxでは","to":"CSS Flexboxでは"}],"tags":["noun","CSS"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBH2H42AT29Y4BP84FA","description":"Reference https://www.w3.org/TR/touch-events/","expected":"Touch Events","patterns":["/Touch Event/i","/Touch Events/i"],"specs":[{"from":"Touch Event、Fullscreen APIなどのサポートなど","to":"Touch Events、Fullscreen APIなどのサポートなど"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YZ6NT1NACB4X0DC8XHFH","description":"","expected":"$1 EAP","patterns":["/([0-9\\.]+)EAP/"],"specs":[],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01EF8QSDGRB63DFJ54B68AKN7J","description":"webpack is lower-case https://webpack.js.org/","expected":"webpack","patterns":["/\\bwebpack\\b/i"],"allows":[],"specs":[{"from":"webpack","to":"webpack"},{"from":"WebPack","to":"webpack"},{"from":"BuildWebPack is OK","to":"BuildWebPack is OK"}],"tags":["noun"]},{"id":"01BQ92YXWR8T1QBP2JSKFH74RK","description":"","expected":"CoffeeScript","patterns":["CoffeScript"],"specs":[{"from":"CoffeScriptからES6","to":"CoffeeScriptからES6"}],"tags":["typo"]},{"id":"01BSADQQDT7DEBJT25555YCQ14","description":"Reference https://www.mysql.com/","expected":"MySQL","patterns":["/mysql/i"],"specs":[{"from":"mysql is a database.","to":"MySQL is a database."},{"from":"Oracle mysql","to":"Oracle MySQL"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBJP9EDR7KS993CMQAR","description":"","expected":"Virtual DOM","patterns":["/VirtualDOM/i"],"specs":[{"from":"VirtualDOM is virtual dom object","to":"Virtual DOM is virtual dom object"}],"tags":["noun","opinion","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01GN8FN82HBSNH9NJYT0F30Q8B","description":"","expected":"prototype pollution","patterns":["prototype pollusion"],"allows":[],"specs":[{"from":"prototype pollution","to":"prototype pollution"},{"from":"prototype pollusion","to":"prototype pollution"}],"tags":["noun"]},{"id":"01F0W5YS57VWFW3DAP3EC92D6Y","description":"https://github.com/sveltejs/kit","expected":"SvelteKit","patterns":["/SveleteKit/i"],"allows":[],"specs":[{"from":"SveleteKit","to":"SvelteKit"},{"from":"SvelteKit","to":"SvelteKit"}],"tags":["noun"]},{"id":"01BQ92YXWVMAMKQ3VK2DNYNCCP","description":"Customのtypoです","expected":"Custom","patterns":["/Custome\\b/i"],"specs":[{"from":"WebVRをCustome Elementのタグで書く","to":"WebVRをCustom Elementのタグで書く"}],"tags":["typo"]},{"id":"01BQ92YYSHHTGFD78FF7NB4RX9","description":"","expected":"HTML5 Rocks","patterns":["/HTML5Rocks/i","/HTML5Rock/i"],"specs":[{"from":"HTML5Rockに現在公開されている翻訳記事のまとめ","to":"HTML5 Rocksに現在公開されている翻訳記事のまとめ"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YXWVT5PGRGQCH1ZZ6S7V","description":"","expected":"operator","patterns":["oeprator"],"specs":[],"tags":["typo"]},{"id":"01BQ92YYBJBBNRPR2WYHMDYPPG","description":"Reference http://source-map.github.io/","expected":"Source Map","patterns":["/Source Map/i","/SourceMap/i"],"specs":[{"from":"多段SourceMapに対応","to":"多段Source Mapに対応"},{"from":"SourceMap","to":"Source Map"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBJENZB6M480KCJ0J99","description":"Reference http://jquery.com/","expected":"jQuery","patterns":["/jquery/i"],"specs":[{"from":"Jquery","to":"jQuery"},{"from":"jquery","to":"jQuery"},{"from":"jquery-ui","to":"jquery-ui"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBH4NNWB305Y1TD7B6N","description":"Reference https://www.w3.org/TR/webaudio/","expected":"Web Audio API","patterns":["/WebAudio API/i","/Web AudioAPI/i","/Web Audio API/i"],"specs":[{"from":"All scheduled times in the WebAudio API are relative to the value of currentTime.","to":"All scheduled times in the Web Audio API are relative to the value of currentTime."}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBJDYYAR7DFH7M57G1P","description":"AngularJS(1.x)はJSを付けます","expected":"AngularJS","patterns":["/Angular\\.js/i","/angularjs/i"],"specs":[{"from":"Angular.js","to":"AngularJS"}],"tags":["JavaScript"]}] \ No newline at end of file diff --git a/.cache/kvs-node-localstorage/proofdict-lastUpdated b/.cache/kvs-node-localstorage/proofdict-lastUpdated index da0fc5b..928f145 100644 --- a/.cache/kvs-node-localstorage/proofdict-lastUpdated +++ b/.cache/kvs-node-localstorage/proofdict-lastUpdated @@ -1 +1 @@ -1643713193328 \ No newline at end of file +1688438957238 \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json index 8922728..d78d905 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -3,5 +3,6 @@ "editor.formatOnPaste": true, "editor.formatOnSave": true, "markdown.extension.toc.updateOnSave": false, - "ruby.rubocop.onSave": false + "ruby.rubocop.onSave": false, + "japanese-proofreading.textlint.全角文字と半角文字の間": false } diff --git a/articles/9603a3990fcb18.md b/articles/9603a3990fcb18.md index e3f7d01..17390b1 100644 --- a/articles/9603a3990fcb18.md +++ b/articles/9603a3990fcb18.md @@ -1,5 +1,5 @@ --- -title: "LangChainのSummarization ChainでWEBページを要約する時のプラクティス" +title: "LangChainを使ってWEBサイトを要約する時のプラクティス" emoji: "🦜" type: "tech" # tech: 技術記事 / idea: アイデア topics: ["langchain", "openai", "typescript"] @@ -15,7 +15,7 @@ LangChainを使ってWebページを要約しようと思ったら色々詰ま # 🚀 完成コード -最初に完成コードから。LangChainを実行してWebページを要約するコード例です。 +最初に完成コードを。URLを引数で渡すとそのページの要約を出力してくれるスクリプトのコード例です。 ```ts import { OpenAI } from "langchain/llms/openai"; @@ -48,12 +48,16 @@ const summarization = async (url: string) => { }); const docs = await loader.loadAndSplit(); - // 要約の実行 - const model = new OpenAI({ openAIApiKey: process.env.OPEN_AI_API_KEY, temperature: 0, modelName: "gpt-3.5-turbo" }); + // モデルの指定 OpenAI gpt-3.5-turbo + const model = new OpenAI({ openAIApiKey: process.env.OPENAI_API_KEY, temperature: 0, modelName: "gpt-3.5-turbo" }); + + // promptの作成 const prompt = new PromptTemplate({ - template: `以下の文章を要約してください。\n\n---\n"{text}"---\n\n要約:`, + template: `以下の文章を要約してください。\n\n---\n{text}\n---\n\n要約:`, inputVariables: ["text"], }); + + // 要約の実行 const chain = loadSummarizationChain(model, { combineMapPrompt: prompt, combinePrompt: prompt, @@ -84,26 +88,24 @@ https://note.com/ryo_kawamata/n/n4fc0fa900314 消防士から未経験でエンジニアに転職し、1年間働いた後に退職した人物が、自身の経歴や転職の理由、エンジニアとしての経験について語っている。JavaやSpring Bootでの実務経験を通じて、良い設計や型の利点、テストの重要性などを学び、静的型付け言語が好きになった。退職理由は家庭の事情で、リモートワークができる環境を求めた。転職先はクラウド請求管理サービスの会社で、RailsとVue.jsを勉強中。今後は成長し、事業に大きな影響を与える成果を出したいと考えている。 ``` -# 🛠️ ポイント解説 +コードはすべて以下のリポジトリで公開しています。 -## PuppeteerWebBaseLoaderで要約ページのテキスト情報のみを種痘 +https://github.com/kawamataryo/sandbox-summary-by-langhchain + +# 🛠️ ポイント + +## PuppeteerWebBaseLoaderで要約ページのテキスト情報のみを取得する SPAも考慮したWebページのテキスト情報を取得するために、PuppeteerWebBaseLoaderを使っています。ここでのポイントは、`evaluate`で取得したいテキスト情報のみを取得するようにすることです。 PuppeteerWebBaseLoaderのデフォルトでは、ページ情報の取得に`document.body.innerHTML`を使っています。 https://github.com/hwchase17/langchainjs/blob/8ddf206998f323ae2785371a6d0fdfabdf5a7ba2/langchain/src/document_loaders/web/puppeteer.ts#L61-L63 -`innerHTML`での取得だと、要約に不要なタグ情報や、インラインスタイル、スクリプト情報も含まれてしまいます。これがトークンの利用数をムダに増やしてしまう原因になります。 +`innerHTML`でのテキスト取得だと、要約に不要なHTMLのタグやCSS、scriptも含まれてしまいます。これがトークンの利用量をムダに増やしてしまう原因になります。 -`evaluate`をオプションで上書き、スクリプトやスタイル、タグ情報など不要な要素を削除した上で`innerText`で本文を取得することで、不要な情報によって要約結果が歪むことを防ぎ、APIのトークン利用数も節約できます。 +`evaluate`をオプションで上書き、必要な要素のみ`innerText`で本文を取得することで、不要な情報によって要約結果が歪むことを防ぎ、APIのトークン利用数も節約できます。 ```ts -//... - const loader = new PuppeteerWebBaseLoader(url, { - launchOptions: { - headless: "new", - args: ["--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3"], - }, async evaluate(page) { const result = await page.evaluate(() => { // 不要な要素を削除 @@ -119,54 +121,49 @@ https://github.com/hwchase17/langchainjs/blob/8ddf206998f323ae2785371a6d0fdfabdf }) return result; }, - }); -// ... ``` +:::message +もし、要約を実行するWebページが限定されている場合は、それに合わせてevaluateの処理を変更することで、より正確な要約結果を得ることができます。 +::: + ## LoadAndSplitでドキュメントを分割 完成コードではPuppeteerWebBaseLoaderで取得したテキスト情報をOpenAIのAPIに渡す際に、`loadAndSplit`を実行しています。 -PuppeteerWebBaseLoaderのドキュメントには、`Load`の方で記載されているので間違える人がいるかもしれませんが(自分😇)、`loadAndSplit`でドキュメントを分割しなければ、Summarization Chain を利用する旨味がありません。 -loadでdocsを生成すると、ページ情報が以下のようにひとつのドキュメントとして扱われてしまいます。 +https://github.com/kawamataryo/sandbox-summary-by-langhchain/blob/main/index.ts#L29 + +PuppeteerWebBaseLoaderのドキュメントには、`Load`の方で記載されているので間違えた人がいるかもしれません(私😇)。しかし`loadAndSplit`でドキュメントを分割しなければ、Summarization Chain を利用する旨味がありません。 + +`load` でdocsを生成すると、ページ情報が以下のように単一のドキュメントとして扱われてしまいます。 ``` [ - { - Document: { - "pageContent: '消防士からエンジニアへ、そして退職\n...." - }, - metadata: { ... } - } + { Document: { "pageContent: '消防士からエンジニアへ、そして退職して\n...." }, metadata: { ... } } ] ``` -しかし、loadSplitでdocsを生成すると以下のように、よしなにドキュメントを分割してくれます。 +しかし、`loadSplit` でdocsを生成すると以下のように、ドキュメントを分割してくれます。 ``` [ - { - Document: { - "pageContent: '消防士からエンジニアへ、そして退職\n...." - }, - metadata: { ... } - }, - { - Document: { - "pageContent: '前職では... - }, - metadata: { ... } - } - { - Document: { - "pageContent: '筋肉.ktで筋肉を... - }, - metadata: { ... } - }, + { Document: { "pageContent: '消防士からエンジニアへ、そして退職\n...." }, metadata: { ... } } + { Document: { "pageContent: '前職では...'}, metadata: { ... } } + { Document: { "pageContent: '筋肉KTでLTして...'}, metadata: { ... } } .... ] ``` -とくにページの文章量が多い場合は、ドキュメントを分割しないと、最大トークン数を超過してしまい、Summarization Chainの実行時にエラーが発生します。 +Summarization Chainは、分割されたdocumentを要約するChainです。とくにページの文章量が多い場合は、ドキュメントを分割しないと、モデルの最大トークン数を超過してしまい実行時にエラーが発生します。 -```ts +loadAndSplitの引数にsplitterを指定しない場合、documentの分割には[RecursiveCharacterTextSplitter](https://js.langchain.com/docs/modules/indexes/text_splitters/examples/recursive_character)が使用されます。他のsplitterも指定できますが、基本はRecursiveCharacterTextSplitterでよいと思います。 + +https://js.langchain.com/docs/modules/indexes/text_splitters/ + +## Promptの上書き + +Summarization ChainではデフォルトのPromptを上書きすることが可能です。 + +## Mapで要約結果を整形 + +https://docs.langchain.com/docs/components/chains/index_related_chains diff --git a/articles/98b7cc1c67ad0c.md b/articles/98b7cc1c67ad0c.md new file mode 100644 index 0000000..f7a336b --- /dev/null +++ b/articles/98b7cc1c67ad0c.md @@ -0,0 +1,107 @@ +--- +title: "LangChain を使って Hacker News の日本語要約 Bluesky ボットを作ってみた" +emoji: "🪿" +type: "tech" # tech: 技術記事 / idea: アイデア +topics: ["LangChain", "Bluesky", "TypeScript"] +published: true +--- + +便利なので使ってみてくださいー! + +# 🤖 作ったもの + +[Hacker News](https://news.ycombinator.com/) のトップ記事の日本語要約を定期投稿する Bluesky のボットです。 + +https://bsky.app/profile/hacker-news-jp.bsky.social + + + + +以下画像のように、Hacker News の記事のタイトルとリンクを投稿。そして、そのスレッドに記事内容の日本語要約も投稿してくれます。 + + + +コードはすべてこちらで公開しています。 + +https://github.com/kawamataryo/bsky-hacker-news-jp + +# 💘 モチベーション + +Geek な人々が使っている Hacker News から海外の最新情報を得たい!でも英語が絶望的に苦手 & Hacker News のデザインが質素すぎて購読するのがしんどい。という理由から、怠惰に情報を得られる手段として作りました。 + +今のところストレスなく情報を得られているので、作ってよかったなと思っています。 + +:::message +Hacker News に興味を持った理由は、Hacker News からいつも最新の技術記事を紹介してくれる同僚の存在が大きいです。その方の投稿は、LAPRAS Tech News Talk で見られるのでぜひこちらも。.! + +- 📺[Lapras Tech News Talk](https://www.youtube.com/playlist?list=PLKbaztxP2P4jpdF0P5YbJNJwFabB-pksK) +::: + +# 🛠️ 技術的なポイント + +簡単に構成と、詰まったところを紹介します。 + +## 構成図 + +構成は以前記事にした[GitHub Trending Bot](https://zenn.dev/ryo_kawamata/articles/ad4b88908f610b)とほぼ同じです。 + +Firebase Cloud Functions の定期実行をトリガーに、[Hacker NewsのAPI](https://github.com/HackerNews/API) から記事を取得、LangChain で日本語要約を作成し、Bluesky の API を使って投稿しています。重複投稿を防ぐために、投稿履歴は Firestore に保存しています。 + + + +## LangChainでの要約 + +OpenAI の GPT-3.5 を LangChain の[summarization](https://js.langchain.com/docs/modules/chains/other_chains/summarization)経由で使い記事の要約文を生成しています。 + +https://js.langchain.com/docs/modules/chains/other_chains/summarization + +[PuppeteerWebBaseLoader](https://js.langchain.com/docs/modules/indexes/document_loaders/examples/web_loaders/web_puppeteer)を使って、記事の内容から Document を作成、それを summarization に渡すけです。LangChain すごい。 + +https://github.com/kawamataryo/bsky-hacker-news-jp/blob/main/functions/src/clients/openAIClient.ts#L16-L72 + +Web ページのテキストを取得する PuppeteerWebBaseLoader の使い方で 2 つ詰まりどころがありました。 + +1 つ目は取得テキストの指定です。 +当初、PuppeteerWebBaseLoader に何も option を与えず使っていたのですが、そうすると、うまく要約できないことが頻発しました。 + +PuppeteerWebBaseLoader のデフォルトでは、ページ情報の取得に`document.body.innerHTML`を使われるため、要約に関係ないページの HTML タグ含めすべてを要約対象に入っていたことが原因でした。 + +https://github.com/hwchase17/langchainjs/blob/8ddf206998f323ae2785371a6d0fdfabdf5a7ba2/langchain/src/document_loaders/web/puppeteer.ts#L61-L63 + +これではトークンも無駄に消費してしまいお財布に痛いので、`document.body.innerText`を使うように evaluate オプションを指定しました。 + +https://github.com/kawamataryo/bsky-hacker-news-jp/blob/main/functions/src/clients/openAIClient.ts#L46-L67 + +2 つ目は`LoadAndSplit`メソッドの利用です。 +PuppeteerWebBaseLoader のドキュメントには、`Load`の方で記載されているので間違えた人がいるかもしれません(私😇)。しかし`loadAndSplit`でドキュメントを分割しなければ、Summarization Chain を利用する旨味がありません。 + +Summarization Chain は、分割された document を再起的に要約する Chain です。とくにページの文章量が多い場合は、ドキュメントを分割しないと、モデルの最大トークン数を超過してしまい実行時エラーが発生します。トークン制限がきついモデルを使う場合は、必ず`LoadAndSplit`を使いましょう。 + +https://github.com/kawamataryo/bsky-hacker-news-jp/blob/main/functions/src/clients/openAIClient.ts#L70 + +## 記事要約のスレッド投稿 + +LangChain で作成した要約文は、Bluesky の API を使って記事のスレッドに投稿しています。 +実装コードはこちらです。 + +https://github.com/kawamataryo/bsky-hacker-news-jp/blob/main/functions/src/services/bskyService.ts#L173-L192 + +Bluesky の投稿文字数の条件は 300 文字なので、要約文が 300 文字を超える場合は、要約文を分割して投稿しています。自然に読めるよう`。`や`、`の句点を起点に要約文を分割しています。 + + + +https://github.com/kawamataryo/bsky-hacker-news-jp/blob/main/functions/src/services/bskyService.ts#L133-L171 + +分割のコードはほぼすべて ChatGPT に書いてもらいました。最高便利。 + +# おわりに + +Twitter の API 制限等々の影響か、最近 Bluesky が盛り上がってきて楽しいです。Hacker News Bot も便利なのでぜひ使ってみてくださいー! + + +https://bsky.app/profile/hacker-news-jp.bsky.social + +自分のアカウントはこちら。ボットやツールなど色々作ってます。 + +https://bsky.app/profile/kawamataryo.bsky.social diff --git a/articles/image.png b/articles/image.png new file mode 100644 index 0000000..60d6fd6 Binary files /dev/null and b/articles/image.png differ diff --git a/images/98b7cc1c67ad0c/2023-07-04-05-36-27.png b/images/98b7cc1c67ad0c/2023-07-04-05-36-27.png new file mode 100644 index 0000000..8592b8c Binary files /dev/null and b/images/98b7cc1c67ad0c/2023-07-04-05-36-27.png differ diff --git a/images/98b7cc1c67ad0c/2023-07-04-05-38-09.png b/images/98b7cc1c67ad0c/2023-07-04-05-38-09.png new file mode 100644 index 0000000..6d2e612 Binary files /dev/null and b/images/98b7cc1c67ad0c/2023-07-04-05-38-09.png differ diff --git a/images/98b7cc1c67ad0c/2023-07-04-05-38-37.png b/images/98b7cc1c67ad0c/2023-07-04-05-38-37.png new file mode 100644 index 0000000..8dd84ff Binary files /dev/null and b/images/98b7cc1c67ad0c/2023-07-04-05-38-37.png differ diff --git a/images/98b7cc1c67ad0c/2023-07-04-08-18-21.png b/images/98b7cc1c67ad0c/2023-07-04-08-18-21.png new file mode 100644 index 0000000..26e12ed Binary files /dev/null and b/images/98b7cc1c67ad0c/2023-07-04-08-18-21.png differ diff --git a/images/98b7cc1c67ad0c/2023-07-04-09-33-24.png b/images/98b7cc1c67ad0c/2023-07-04-09-33-24.png new file mode 100644 index 0000000..60d6fd6 Binary files /dev/null and b/images/98b7cc1c67ad0c/2023-07-04-09-33-24.png differ
Discussion: jamstack word treatment
Note to the reader:
Goals of this issue
Current challenges and observations
Proposal and justification
My opinion is that we should adopt "Jamstack" as our norm.
Over the last 5 years since the term was coined, the ecosystem which enables the jamstack has evolved and matured so much. The term needs to not divert attention away from that fact, and towards the original acronym. — I believe that jamstack stands for so much more than using JavaScript, APIs and Markup. I think it stands more for:
...but I'm keen on wider perspectives about the word.
For discussion
So... how should we normalise how we write this word?
The text was updated successfully, but these errors were encountered: