diff --git a/.yarn/install-state.gz b/.yarn/install-state.gz index aa3f0cd..ad21181 100644 Binary files a/.yarn/install-state.gz and b/.yarn/install-state.gz differ diff --git a/data/webmentions-since.json b/data/webmentions-since.json new file mode 100644 index 0000000..6ba0172 --- /dev/null +++ b/data/webmentions-since.json @@ -0,0 +1,3 @@ +{ + "since": "2021-03-19T20:08:40.327Z" +} \ No newline at end of file diff --git a/data/webmentions.json b/data/webmentions.json new file mode 100644 index 0000000..388a0fe --- /dev/null +++ b/data/webmentions.json @@ -0,0 +1,137 @@ +[ + { + "author": { + "name": "Wouter Groeneveld", + "picture": "https://brainbaking.com/img/avatar.jpg" + }, + "name": "The insanity of collecting retro games", + "content": "Is a physical collection really worth it?", + "published": "2021-02-21", + "type": "mention", + "url": "https://brainbaking.com/post/2021/02/the-insanity-of-retro-game-collecting/", + "source": "https://brainbaking.com/post/2021/02/the-insanity-of-retro-game-collecting/", + "target": "https://jefklakscodex.com/articles/features/super-mario-64-aged-badly/", + "publishedFromNow": "a month ago", + "relativeTarget": "/articles/features/super-mario-64-aged-badly/" + }, + { + "author": { + "name": "Wouter Groeneveld", + "picture": "https://brainbaking.com/img/avatar.jpg" + }, + "name": "The insanity of collecting retro games", + "content": "Is a physical collection really worth it?", + "published": "2021-02-21", + "type": "mention", + "url": "https://brainbaking.com/post/2021/02/the-insanity-of-retro-game-collecting/", + "source": "https://brainbaking.com/post/2021/02/the-insanity-of-retro-game-collecting/", + "target": "https://jefklakscodex.com/articles/features/gaming-setup-2007-flashback/", + "publishedFromNow": "a month ago", + "relativeTarget": "/articles/features/gaming-setup-2007-flashback/" + }, + { + "author": { + "name": "Wouter Groeneveld", + "picture": "https://brainbaking.com/img/avatar.jpg" + }, + "name": "Win98 Upgrade: GeForce 3 Ti200 vs Riva TNT2", + "content": "Get more out of that AGPx4 slot!", + "published": "2021-01-28", + "type": "mention", + "url": "https://brainbaking.com/post/2021/01/win98-upgrade-geforce3/", + "source": "https://brainbaking.com/post/2021/01/win98-upgrade-geforce3/", + "target": "https://jefklakscodex.com/articles/features/the-best-and-worst-retro-hack-and-slash-games/", + "publishedFromNow": "2 months ago", + "relativeTarget": "/articles/features/the-best-and-worst-retro-hack-and-slash-games/" + }, + { + "author": { + "name": "Wouter Groeneveld", + "picture": "https://brainbaking.com/img/avatar.jpg" + }, + "name": "Win98 Upgrade: GeForce 3 Ti200 vs Riva TNT2", + "content": "Get more out of that AGPx4 slot!", + "published": "2021-01-28", + "type": "mention", + "url": "https://brainbaking.com/post/2021/01/win98-upgrade-geforce3/", + "source": "https://brainbaking.com/post/2021/01/win98-upgrade-geforce3/", + "target": "https://jefklakscodex.com/tags/wizardry8/", + "publishedFromNow": "2 months ago", + "relativeTarget": "/tags/wizardry8/" + }, + { + "author": { + "name": "Wouter Groeneveld", + "picture": "https://brainbaking.com/img/avatar.jpg" + }, + "name": "Win98 Upgrade: GeForce 3 Ti200 vs Riva TNT2", + "content": "Get more out of that AGPx4 slot!", + "published": "2021-01-28", + "type": "mention", + "url": "https://brainbaking.com/post/2021/01/win98-upgrade-geforce3/", + "source": "https://brainbaking.com/post/2021/01/win98-upgrade-geforce3/", + "target": "https://jefklakscodex.com/articles/reviews/dungeon-siege/", + "publishedFromNow": "2 months ago", + "relativeTarget": "/articles/reviews/dungeon-siege/" + }, + { + "author": { + "name": "Wouter Groeneveld", + "picture": "https://brainbaking.com/img/avatar.jpg" + }, + "name": "The Internet Killed Secrets in Games", + "content": "What's the 'secret' of the secret cow level in Diablo II?", + "published": "2020-11-19", + "type": "mention", + "url": "https://brainbaking.com/post/2020/11/the-internet-killed-secrets-in-games/", + "source": "https://brainbaking.com/post/2020/11/the-internet-killed-secrets-in-games/", + "target": "https://jefklakscodex.com/articles/reviews/gobliins2/", + "publishedFromNow": "4 months ago", + "relativeTarget": "/articles/reviews/gobliins2/" + }, + { + "author": { + "name": "Wouter Groeneveld", + "picture": "https://brainbaking.com/img/avatar.jpg" + }, + "name": "The Internet Killed Secrets in Games", + "content": "What's the 'secret' of the secret cow level in Diablo II?", + "published": "2020-11-19", + "type": "mention", + "url": "https://brainbaking.com/post/2020/11/the-internet-killed-secrets-in-games/", + "source": "https://brainbaking.com/post/2020/11/the-internet-killed-secrets-in-games/", + "target": "https://jefklakscodex.com/articles/reviews/sacred/", + "publishedFromNow": "4 months ago", + "relativeTarget": "/articles/reviews/sacred/" + }, + { + "author": { + "name": "Wouter Groeneveld", + "picture": "https://brainbaking.com/img/avatar.jpg" + }, + "name": "Building an Athlon Windows 98 Retro PC", + "content": "Gaming from Quake to Quake III: Arena!", + "published": "2020-10-17", + "type": "mention", + "url": "https://brainbaking.com/post/2020/10/building-an-athlon-win98-retro-pc/", + "source": "https://brainbaking.com/post/2020/10/building-an-athlon-win98-retro-pc/", + "target": "https://jefklakscodex.com/tags/wizardry8/", + "publishedFromNow": "5 months ago", + "relativeTarget": "/tags/wizardry8/" + }, + { + "author": { + "name": "Wouter Groeneveld", + "picture": "https://brainbaking.com/img/avatar.jpg" + }, + "name": "A journey through the history of webdesign", + "content": "Using personal websites and the Internet Archive", + "published": "2020-10-04", + "type": "mention", + "url": "https://brainbaking.com/post/2020/10/a-personal-journey-through-the-history-of-webdesign/", + "source": "https://brainbaking.com/post/2020/10/a-personal-journey-through-the-history-of-webdesign/", + "target": "https://jefklakscodex.com/tags/baldurs-gate-2/", + "publishedFromNow": "6 months ago", + "relativeTarget": "/tags/baldurs-gate-2/" + } +] \ No newline at end of file diff --git a/jamstack-init.js b/jamstack-init.js index a09adeb..b3579bb 100644 --- a/jamstack-init.js +++ b/jamstack-init.js @@ -1,5 +1,5 @@ -const { howlongtobeat } = require('jam-my-stack'); +const { howlongtobeat, webmention } = require('jam-my-stack'); const fsp = require('fs').promises; @@ -7,5 +7,15 @@ const fsp = require('fs').promises; console.log("1. adding Howlongtobeat info...") await howlongtobeat.howlong(`${__dirname}/content/articles`) + // 4. get webmentions + console.log("2. Fetching webmentions...") + const mentions = await webmention.getWebmentions("jefklakscodex.com") + const json = JSON.stringify(mentions, null, 4) + await fsp.writeFile(`${__dirname}/data/webmentions.json`, json, 'utf-8') + + // 5. send webmentions + console.log("3. Sending webmentions...") + await webmention.send("jefklakscodex.com", `${__dirname}/data/webmentions-since.json`) + console.log("-- all done!") })() diff --git a/package.json b/package.json index d02d2b7..24880a7 100644 --- a/package.json +++ b/package.json @@ -20,6 +20,6 @@ }, "homepage": "https://jefklakscodex.com", "dependencies": { - "jam-my-stack": "^1.0.4" + "jam-my-stack": "^1.0.13" } } diff --git a/themes/jefklak-creative-portfolio/assets/sass/_toot.sass b/themes/jefklak-creative-portfolio/assets/sass/_toot.sass new file mode 100644 index 0000000..3d5a4ba --- /dev/null +++ b/themes/jefklak-creative-portfolio/assets/sass/_toot.sass @@ -0,0 +1,40 @@ + +.toot + background: scale-color($bglight, $lightness: +40%) + border: 1px solid #cccccc + padding: 0.5em + border-radius: 5px + box-shadow: rgba(100, 100, 111, 0.2) 0px 7px 29px 0px + + &:hover + border-color: var(--accent) + box-shadow: rgba(100, 100, 111, 0.2) 5px 17px 29px 5px + +.notes + .u-photo + border-radius: 50% + margin-top: 0 + +.u-comment .avatar + margin-top: -55px + + img + width: 60px + height: 60px + +.tootlist + + h1, h2, h3 + text-align: left + + h3 + margin-left: 3rem + + .toot + cursor: pointer + margin-bottom: 3rem !important + margin-top: 2rem !important + + .meta + border-top: 1px solid #eeeeee + padding-top: 0.5rem \ No newline at end of file diff --git a/themes/jefklak-creative-portfolio/assets/sass/_variables.sass b/themes/jefklak-creative-portfolio/assets/sass/_variables.sass index 42b9e03..2060c6a 100644 --- a/themes/jefklak-creative-portfolio/assets/sass/_variables.sass +++ b/themes/jefklak-creative-portfolio/assets/sass/_variables.sass @@ -1,3 +1,6 @@ +// can't mix both, but want to "lighten" this one dynamically +$bglight: #f1f4dd + html --accent: #a6a57c --bglight: #f1f4dd diff --git a/themes/jefklak-creative-portfolio/assets/sass/main.sass b/themes/jefklak-creative-portfolio/assets/sass/main.sass index ed45d16..b6e833b 100644 --- a/themes/jefklak-creative-portfolio/assets/sass/main.sass +++ b/themes/jefklak-creative-portfolio/assets/sass/main.sass @@ -2,3 +2,4 @@ @import 'fonts' @import 'codex' @import 'sidebar' +@import 'toot' \ No newline at end of file diff --git a/themes/jefklak-creative-portfolio/layouts/_default/rss.xml b/themes/jefklak-creative-portfolio/layouts/_default/rss.xml index c05384f..2b6dcaf 100644 --- a/themes/jefklak-creative-portfolio/layouts/_default/rss.xml +++ b/themes/jefklak-creative-portfolio/layouts/_default/rss.xml @@ -1,3 +1,4 @@ +{{- $allowedRssSections := (slice "articles") -}} {{- $baseurl := .Site.BaseURL -}} {{- $pctx := . -}} {{- if .IsHome -}}{{ $pctx = .Site }}{{- end -}} @@ -27,6 +28,7 @@ {{ printf "" .Permalink .MediaType | safeHTML }} {{ end }} {{ range $pages }} + {{ if in $allowedRssSections .Section }} {{ .Title }} {{ .Permalink }} @@ -65,5 +67,6 @@ {{ end }} + {{ end }} \ No newline at end of file diff --git a/themes/jefklak-creative-portfolio/layouts/_default/single.html b/themes/jefklak-creative-portfolio/layouts/_default/single.html index 874698f..89ecd23 100644 --- a/themes/jefklak-creative-portfolio/layouts/_default/single.html +++ b/themes/jefklak-creative-portfolio/layouts/_default/single.html @@ -45,13 +45,15 @@
Categorized under: {{ range .Params.tags }} - {{ . }} + {{ . }} {{ end }} {{ end }}
{{ partial "single-comments" . }} + {{ partial "single-mentions" . }} +
diff --git a/themes/jefklak-creative-portfolio/layouts/partials/single-comments.html b/themes/jefklak-creative-portfolio/layouts/partials/single-comments.html index 5b995f5..d655a5b 100644 --- a/themes/jefklak-creative-portfolio/layouts/partials/single-comments.html +++ b/themes/jefklak-creative-portfolio/layouts/partials/single-comments.html @@ -1,6 +1,6 @@ {{ if (not .Params.disableComments) }}
- diff --git a/themes/jefklak-creative-portfolio/layouts/partials/single-mentions.html b/themes/jefklak-creative-portfolio/layouts/partials/single-mentions.html new file mode 100644 index 0000000..3b2cc55 --- /dev/null +++ b/themes/jefklak-creative-portfolio/layouts/partials/single-mentions.html @@ -0,0 +1,44 @@ +{{ if (not .Params.disableComments) }} +
+ {{ $mentions := (where .Site.Data.webmentions "relativeTarget" "==" $.RelPermalink) }} + + {{ if $mentions }} + + +
+ {{ range $mentions }} + + {{ end }} +
+
+ {{ end }} +{{ end }} diff --git a/themes/jefklak-creative-portfolio/static/js/codex.js b/themes/jefklak-creative-portfolio/static/js/codex.js index de3eb3a..2e0ccdb 100644 --- a/themes/jefklak-creative-portfolio/static/js/codex.js +++ b/themes/jefklak-creative-portfolio/static/js/codex.js @@ -101,6 +101,17 @@ $(function() { $('.sidebar').mouseenter(animate).mouseleave(inanimate); }; + (function makeTootClickable() { + [...document.querySelectorAll('.toot')].forEach(toot => { + toot.addEventListener('click', function() { + const permalink = this.querySelector('.permalink')?.href + if(permalink) { + window.location.href = permalink + } + }) + }) + })(); + animateActiveGameImagesIfFound(); setSideBarPlatformHeight(); addRandomImageToSideBarMenus(); diff --git a/yarn.lock b/yarn.lock index 4451b08..694aa71 100644 --- a/yarn.lock +++ b/yarn.lock @@ -77,6 +77,15 @@ __metadata: languageName: node linkType: hard +"ansi-styles@npm:^3.2.1": + version: 3.2.1 + resolution: "ansi-styles@npm:3.2.1" + dependencies: + color-convert: ^1.9.0 + checksum: 456e1c23d9277512a47718da75e7fbb0a5ee215ef893c2f76d6b3efe8fceabc861121b80b0362146f5f995d21a1633f05a19bbf6283ae66ac11dc3b9c0bed779 + languageName: node + linkType: hard + "argparse@npm:^1.0.7": version: 1.0.10 resolution: "argparse@npm:1.0.10" @@ -102,6 +111,13 @@ __metadata: languageName: node linkType: hard +"async@npm:0.9.x": + version: 0.9.2 + resolution: "async@npm:0.9.2" + checksum: 78c0aad8add0b84ccf9bde90d20a9cd20146e3734a4c9ac9bfb3a30d1b7df12b7d95c13119af825a89480210c02f7ffee38ac07c13ac43abd6636691b982b591 + languageName: node + linkType: hard + "asynckit@npm:^0.4.0": version: 0.4.0 resolution: "asynckit@npm:0.4.0" @@ -123,6 +139,13 @@ __metadata: languageName: node linkType: hard +"balanced-match@npm:^1.0.0": + version: 1.0.0 + resolution: "balanced-match@npm:1.0.0" + checksum: f515a605fe1b59f476f7477c5e1d53ad55b4f42982fca1d57b6701906f4ad1f1ac90fd6587d92cc1af2edb43eecf979214dd847ee410a6de9db4ebf0dd128d62 + languageName: node + linkType: hard + "bcrypt-pbkdf@npm:^1.0.0": version: 1.0.2 resolution: "bcrypt-pbkdf@npm:1.0.2" @@ -139,6 +162,16 @@ __metadata: languageName: node linkType: hard +"brace-expansion@npm:^1.1.7": + version: 1.1.11 + resolution: "brace-expansion@npm:1.1.11" + dependencies: + balanced-match: ^1.0.0 + concat-map: 0.0.1 + checksum: 4c878e25e4858baf801945dfd63eb68feab2e502cf1122f25f3915c0e3bf397af3a93ff6bef0798db41c0d81ef28c08e55daac38058710f749a3b96eee6b8f40 + languageName: node + linkType: hard + "cacheable-lookup@npm:^5.0.3": version: 5.0.4 resolution: "cacheable-lookup@npm:5.0.4" @@ -168,6 +201,17 @@ __metadata: languageName: node linkType: hard +"chalk@npm:^2.4.2": + version: 2.4.2 + resolution: "chalk@npm:2.4.2" + dependencies: + ansi-styles: ^3.2.1 + escape-string-regexp: ^1.0.5 + supports-color: ^5.3.0 + checksum: 22c7b7b5bc761c882bb6516454a1a671923f1c53ff972860065aa0b28a195f230163c1d46ee88bcc7a03e5539177d896457d8bc727de7f244c6e87032743038e + languageName: node + linkType: hard + "cheerio-select-tmp@npm:^0.1.0": version: 0.1.1 resolution: "cheerio-select-tmp@npm:0.1.1" @@ -205,6 +249,22 @@ __metadata: languageName: node linkType: hard +"color-convert@npm:^1.9.0": + version: 1.9.3 + resolution: "color-convert@npm:1.9.3" + dependencies: + color-name: 1.1.3 + checksum: 5f244daa3d1fe1f216d48878c550465067d15268688308554e613b7640a068f96588096d51f0b98b68f15d6ff6bb8ad24e172582ac8c0ad43fa4d3da60fd1b79 + languageName: node + linkType: hard + +"color-name@npm:1.1.3": + version: 1.1.3 + resolution: "color-name@npm:1.1.3" + checksum: d8b91bb90aefc05b6ff568cf8889566dcc6269824df6f3c9b8ca842b18d7f4d089c07dc166808d33f22092d4a79167aa56a96a5ff0d21efab548bf44614db43b + languageName: node + linkType: hard + "combined-stream@npm:^1.0.6, combined-stream@npm:~1.0.6": version: 1.0.8 resolution: "combined-stream@npm:1.0.8" @@ -214,6 +274,13 @@ __metadata: languageName: node linkType: hard +"concat-map@npm:0.0.1": + version: 0.0.1 + resolution: "concat-map@npm:0.0.1" + checksum: 554e28d9ee5aa6e061795473ee092cb3d3a2cbdb76c35416e0bb6e03f136d7d07676da387b2ed0ec4106cedbb6534080d9abc48ecc4a92b76406cf2d0c3c0c4b + languageName: node + linkType: hard + "core-util-is@npm:1.0.2": version: 1.0.2 resolution: "core-util-is@npm:1.0.2" @@ -250,6 +317,13 @@ __metadata: languageName: node linkType: hard +"dayjs@npm:^1.10.4": + version: 1.10.4 + resolution: "dayjs@npm:1.10.4" + checksum: 3b7bb2232fff808209870bc72d4b2000941a1aa45f0226e2907f9dd1dda306d4b3a1eb9058450fd2c324b01a007a37809ac6f9b525806a86902c55e2934cd5d5 + languageName: node + linkType: hard + "decompress-response@npm:^6.0.0": version: 6.0.0 resolution: "decompress-response@npm:6.0.0" @@ -348,6 +422,17 @@ __metadata: languageName: node linkType: hard +"ejs@npm:^3.1.6": + version: 3.1.6 + resolution: "ejs@npm:3.1.6" + dependencies: + jake: ^10.6.1 + bin: + ejs: ./bin/cli.js + checksum: cb77a9368e50c7b11cb8d64c911397a7bf8f9f6d155474bc64154fd1d0ccf896de28a01d5e6ce135470ede038ca7dc02a83b8c0a904277eaef605cce4ab46dfb + languageName: node + linkType: hard + "end-of-stream@npm:^1.1.0": version: 1.4.4 resolution: "end-of-stream@npm:1.4.4" @@ -378,6 +463,13 @@ __metadata: languageName: node linkType: hard +"escape-string-regexp@npm:^1.0.5": + version: 1.0.5 + resolution: "escape-string-regexp@npm:1.0.5" + checksum: f9484b8b4c8827d816e0fd905c25ed4b561376a9c220e1430403ea84619bf680c76a883a48cff8b8e091daf55d6a497e37479f9787b9f15f3c421b6054289744 + languageName: node + linkType: hard + "esprima@npm:^4.0.0": version: 4.0.1 resolution: "esprima@npm:4.0.1" @@ -458,6 +550,15 @@ __metadata: languageName: node linkType: hard +"filelist@npm:^1.0.1": + version: 1.0.2 + resolution: "filelist@npm:1.0.2" + dependencies: + minimatch: ^3.0.4 + checksum: f8bf29d31779dd04ee9e5d225e5a669920d5443f40b38fb5ecc8442ac29848a6f8bc3c937cb8ba78f5ae0d819dad52f4750d23c4dd1b2a51370aa67027d95c0c + languageName: node + linkType: hard + "for-in@npm:^1.0.2": version: 1.0.2 resolution: "for-in@npm:1.0.2" @@ -549,6 +650,13 @@ __metadata: languageName: node linkType: hard +"has-flag@npm:^3.0.0": + version: 3.0.0 + resolution: "has-flag@npm:3.0.0" + checksum: 63aade480d27aeedb3b5b63a2e069d47d0006bf182338d662e7941cdc024e68a28418e0efa8dc5df30db9c4ee2407f39e6ea3f16cfbc6b83848b450826a28aa0 + languageName: node + linkType: hard + "howlongtobeat@npm:^1.3.1": version: 1.3.1 resolution: "howlongtobeat@npm:1.3.1" @@ -670,18 +778,33 @@ __metadata: languageName: node linkType: hard -"jam-my-stack@npm:^1.0.4": - version: 1.0.4 - resolution: "jam-my-stack@npm:1.0.4" +"jake@npm:^10.6.1": + version: 10.8.2 + resolution: "jake@npm:10.8.2" dependencies: + async: 0.9.x + chalk: ^2.4.2 + filelist: ^1.0.1 + minimatch: ^3.0.4 + bin: + jake: ./bin/cli.js + checksum: c60d3f491ce59bba09b8a2ee351122eb6dd19a6826347de5ec4e94ddee5c5e70e14120c14ce6fc2efa360d0db12d7a28a1044d7aa084414dd695ce154fb87d9e + languageName: node + linkType: hard + +"jam-my-stack@npm:^1.0.13": + version: 1.0.13 + resolution: "jam-my-stack@npm:1.0.13" + dependencies: + dayjs: ^1.10.4 + ejs: ^3.1.6 ent: ^2.2.0 fast-xml-parser: ^3.18.0 got: ^11.8.2 howlongtobeat: ^1.3.1 lunr: ^2.3.9 - moment: ^2.29.1 parser-front-matter: ^1.6.4 - checksum: 9962c87f145ff83aa85b11e9b0072c0f6541049039783bd4e3a363e86083430e25a6acf027a61579a05375db10beafd2f1cb27eef47bbaa4d7b504b24dd5901f + checksum: 27a2e3f004672b243a756ecc3bcfb358f942629be9a13614350ca6a9e6e4fcafba76174c84643305d60d5df02392dac348d4e958b1b7a27c642530e76917949b languageName: node linkType: hard @@ -689,7 +812,7 @@ __metadata: version: 0.0.0-use.local resolution: "jefklakscodex@workspace:." dependencies: - jam-my-stack: ^1.0.4 + jam-my-stack: ^1.0.13 languageName: unknown linkType: soft @@ -837,6 +960,15 @@ __metadata: languageName: node linkType: hard +"minimatch@npm:^3.0.4": + version: 3.0.4 + resolution: "minimatch@npm:3.0.4" + dependencies: + brace-expansion: ^1.1.7 + checksum: 47eab9263962cacd5733e274ecad2d8e54b0f8e124ba35ae69189e296058f634a4967b87a98954f86fa5c830ff177caf827ce0136d28717ed3232951fb4fae62 + languageName: node + linkType: hard + "mixin-deep@npm:^1.2.0": version: 1.3.2 resolution: "mixin-deep@npm:1.3.2" @@ -847,13 +979,6 @@ __metadata: languageName: node linkType: hard -"moment@npm:^2.29.1": - version: 2.29.1 - resolution: "moment@npm:2.29.1" - checksum: 86729013febf7160de5b93da69273dd304d674b0224f9544b3abd09a87671ddd2cdd57598261ce57588910d63747ffd5590965e83c790d8bf327083c0e0a06e0 - languageName: node - linkType: hard - "normalize-url@npm:^4.1.0": version: 4.5.0 resolution: "normalize-url@npm:4.5.0" @@ -1071,6 +1196,15 @@ __metadata: languageName: node linkType: hard +"supports-color@npm:^5.3.0": + version: 5.5.0 + resolution: "supports-color@npm:5.5.0" + dependencies: + has-flag: ^3.0.0 + checksum: edacee6425498440744c418be94b0660181aad2a1828bcf2be85c42bd385da2fd8b2b358d9b62b0c5b03ff5cd3e992458d7b8f879d9fb42f2201fe05a4848a29 + languageName: node + linkType: hard + "to-object-path@npm:^0.3.0": version: 0.3.0 resolution: "to-object-path@npm:0.3.0"