Browse Source

refactor: remove old files, lazy load images

fix/enable-imgix
Thomas Osmonson 5 years ago
parent
commit
3adde9bbf7
  1. 35
      .github/workflows/deploy.yml
  2. 10
      next.config.js
  3. 6
      package.json
  4. 69
      public/assets/css/main.scss
  5. 9024
      public/assets/js/main.js
  6. 95
      public/assets/navgoco/jquery.cookie.js
  7. 71
      public/assets/navgoco/jquery.navgoco.css
  8. 314
      public/assets/navgoco/jquery.navgoco.js
  9. 5
      public/robots.txt
  10. 0
      src/common/_includes/commandline.md
  11. 18
      src/common/routes/get-routes.js
  12. 30
      src/components/cli-reference.tsx
  13. 1
      src/components/code-block/index.tsx
  14. 4
      src/components/mdx/mdx-components.tsx
  15. 2
      src/pages/android/tutorial.md
  16. 2
      src/pages/common/core_ref.md
  17. 11
      src/pages/core/smart/tutorial.md
  18. 6
      src/pages/develop/cliDocs.md
  19. 2
      src/pages/develop/overview_auth.md
  20. 2
      src/pages/ios/tutorial.md
  21. 2
      src/pages/org/secureref.md
  22. 7
      src/pages/storage/cliDocs.md
  23. 4
      src/pages/storage/gaia-admin.md
  24. 196
      yarn.lock

35
.github/workflows/deploy.yml

@ -1,5 +1,5 @@
name: Deploy preview
on: [push, pull_request]
on: pull_request
jobs:
vercel-deployment:
@ -7,7 +7,7 @@ jobs:
steps:
- uses: actions/checkout@v2
- name: Vercel action
uses: amondnet/vercel-action@v19.0.1+1
uses: amondnet/vercel-action@master
id: vercel-deployment-preview
with:
vercel-token: ${{ secrets.VERCEL_TOKEN }}
@ -21,34 +21,23 @@ jobs:
github-token: ${{ secrets.GITHUB_TOKEN }}
script: |
const firstLine = `The Blockstack docs have been deployed with Vercel using the code from this PR!`;
let comment = undefined;
try {
const comments = await github.paginate(
'GET /repos/:owner/:repo/issues/:issue_number/comments',
{ ...context.repo, issue_number: context.issue.number },
response => response.data.map(issue => issue.body)
);
comment = comments.find((c) =>
c.body.includes(firstLine)
console.log(context);
const { data } = await github.issues.listComments({
...context.repo,
issue_number: context.issue.number,
});
const vercelPreviewURLComment = data.find((comment) =>
comment.body.includes(firstLine)
);
} catch(e) {
console.log('Comment could not be made!', e)
}
const commentId = comment && comment.id || undefined;
const commentId = vercelPreviewURLComment && vercelPreviewURLComment.id || undefined;
const commentBody = `
#### Deploy preview ready!
#### Deploy previews
${firstLine}
- [Click here to view the deploy preview.](${{ steps.vercel-deployment-preview.outputs.preview-url }})
- [Blockstack docs](${{ steps.vercel-deployment-preview.outputs.preview-url }})
Built with commit ${context.sha}.
`;
if(context.issue.number){
if (commentId) {
await github.issues.updateComment({

10
next.config.js

@ -1,20 +1,26 @@
const { includeMarkdown } = require('@hashicorp/remark-plugins');
const withMdxEnhanced = require('next-mdx-enhanced');
const withBundleAnalyzer = require('@next/bundle-analyzer')({
enabled: process.env.ANALYZE === 'true',
});
const remark = require('remark');
const strip = require('strip-markdown');
const path = require('path');
const remarkPlugins = [
[includeMarkdown, { resolveFrom: path.join(__dirname, 'src/common/_includes') }],
require('remark-squeeze-paragraphs'),
require('./src/lib/remark-paragraph-alerts'),
require('remark-external-links'),
require('remark-emoji'),
require('remark-images'),
require('remark-unwrap-images'),
require('remark-normalize-headings'),
require('remark-slug'),
];
const processMdxContent = mdxContent => {
const getHeadings = mdxContent => {
const regex = /\n(#+)(.*)/gm;
const found = mdxContent.match(regex);
const getLevel = string => string.split('#');
@ -45,7 +51,7 @@ module.exports = withBundleAnalyzer(
fileExtensions: ['mdx', 'md'],
remarkPlugins,
extendFrontMatter: {
process: processMdxContent,
process: getHeadings,
},
})({
experimental: {

6
package.json

@ -4,6 +4,7 @@
"dependencies": {
"@blockstack/ui": "^2.9.5",
"@docsearch/react": "^1.0.0-alpha.14",
"@hashicorp/remark-plugins": "^3.0.0",
"@mdx-js/loader": "1.6.6",
"@mdx-js/mdx": "^1.6.6",
"@mdx-js/react": "^1.6.6",
@ -22,6 +23,7 @@
"fathom-client": "^3.0.0",
"front-matter": "^4.0.2",
"fs-extra": "^9.0.1",
"github-slugger": "^1.3.0",
"jsx-to-string": "^1.4.0",
"lodash.debounce": "^4.0.8",
"mdi-react": "7.3.0",
@ -44,13 +46,17 @@
"react-is": "^16.13.1",
"react-live": "^2.2.2",
"react-simple-code-editor": "^0.11.0",
"react-virtualized-auto-sizer": "^1.0.2",
"react-waypoint": "^9.0.3",
"react-window": "^1.8.5",
"remark": "^12.0.0",
"remark-emoji": "2.1.0",
"remark-external-links": "^6.1.0",
"remark-frontmatter": "^2.0.0",
"remark-images": "2.0.0",
"remark-normalize-headings": "^2.0.0",
"remark-slug": "6.0.0",
"remark-squeeze-paragraphs": "^4.0.0",
"remark-unwrap-images": "2.0.0",
"store": "^2.0.12",
"strip-markdown": "^3.1.2",

69
public/assets/css/main.scss

@ -1,69 +0,0 @@
---
# Only the main Sass file needs front matter (the dashes are enough)
---
// System fonts
@import "system-font-css/_system-font";
// Custom variables and variable overwrites.
@import "theme/variables";
// Import default variables and available mixins.
@import "uikit/variables-theme";
@import "uikit/mixins-theme";
// Custom mixin overwrites.
@import "theme/mixins";
// Import UIkit.
@import "theme/uikit";
// Other vendor styles
@import "syntax-highlighting/github";
// Comment forms
@import "comments/forms";
.uk-alert-primary {
background: lighten(mix(white, #32d296, 40%), 25%);
}
/**
* https://www.bryanbraun.com/anchorjs
*/
.anchorjs-link {
display: inline-block;
height: 32px;
margin-top: 4px;
margin-left: -1.4em !important;
}
.anchorjs-link:after {
margin-left: 7px;
margin-top: -4px;
display: block;
}
/**
* Create an invisible pseudo-element and make it the height of the
* sticky navbar so the jump takes you to a location above the link
*/
:target:before {
content: "";
display: block;
margin-top: -80px;
height: 80px;
width: 1px;
}
// END: www.bryanbraun.com/anchorjs
body > div.uk-lightbox.uk-overflow-hidden.uk-lightbox-panel.uk-open > div.uk-lightbox-toolbar.uk-lightbox-caption.uk-position-bottom.uk-text-center.uk-transition-slide-bottom.uk-transition-opaque
.lb-data .lb-details {
text-align: right;
}
.uk-table th {
vertical-align: top !important;
}

9024
public/assets/js/main.js

File diff suppressed because it is too large

95
public/assets/navgoco/jquery.cookie.js

@ -1,95 +0,0 @@
/*!
* jQuery Cookie Plugin v1.3.1
* https://github.com/carhartl/jquery-cookie
*
* Copyright 2013 Klaus Hartl
* Released under the MIT license
*/
(function (factory) {
if (typeof define === 'function' && define.amd) {
// AMD. Register as anonymous module.
define(['jquery'], factory);
} else {
// Browser globals.
factory(jQuery);
}
}(function ($) {
var pluses = /\+/g;
function raw(s) {
return s;
}
function decoded(s) {
return decodeURIComponent(s.replace(pluses, ' '));
}
function converted(s) {
if (s.indexOf('"') === 0) {
// This is a quoted cookie as according to RFC2068, unescape
s = s.slice(1, -1).replace(/\\"/g, '"').replace(/\\\\/g, '\\');
}
try {
return config.json ? JSON.parse(s) : s;
} catch(er) {}
}
var config = $.cookie = function (key, value, options) {
// write
if (value !== undefined) {
options = $.extend({}, config.defaults, options);
if (typeof options.expires === 'number') {
var days = options.expires, t = options.expires = new Date();
t.setDate(t.getDate() + days);
}
value = config.json ? JSON.stringify(value) : String(value);
return (document.cookie = [
config.raw ? key : encodeURIComponent(key),
'=',
config.raw ? value : encodeURIComponent(value),
options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE
options.path ? '; path=' + options.path : '',
options.domain ? '; domain=' + options.domain : '',
options.secure ? '; secure' : ''
].join(''));
}
// read
var decode = config.raw ? raw : decoded;
var cookies = document.cookie.split('; ');
var result = key ? undefined : {};
for (var i = 0, l = cookies.length; i < l; i++) {
var parts = cookies[i].split('=');
var name = decode(parts.shift());
var cookie = decode(parts.join('='));
if (key && key === name) {
result = converted(cookie);
break;
}
if (!key) {
result[name] = converted(cookie);
}
}
return result;
};
config.defaults = {};
$.removeCookie = function (key, options) {
if ($.cookie(key) !== undefined) {
// Must not alter options, thus extending a fresh object...
$.cookie(key, '', $.extend({}, options, { expires: -1 }));
return true;
}
return false;
};
}));

71
public/assets/navgoco/jquery.navgoco.css

@ -1,71 +0,0 @@
.nav, .nav ul, .nav li {
list-style: none;
}
.nav ul {
padding: 0;
margin: 0 0 0 18px;
}
.nav {
padding: 4px;
margin: 0px;
}
.nav > li {
margin: 4px 0;
}
.nav > li li {
margin: 2px 0;
}
.nav a {
color: #333;
display: block;
outline: none;
-webkit-border-radius: 4px;
-moz-border-radius: 4px;
border-radius: 4px;
text-decoration: none;
}
.nav li > a > span {
float: right;
font-size: 19px;
font-weight: bolder;
}
.nav li > a:hover > span {
color: #fff;
}
.nav li > a > span:after {
content: '\25be';
}
.nav li.open > a > span:after {
content: '\25b4';
}
.nav a:hover, .nav li.active > a {
background-color: #726e6e;
color: #f5f5f5;
font-weight: 500;
}
.nav > li.active > a {
background-color: #4D90FE;
}
.nav li a {
font-size: 14px;
line-height: 20px;
padding: 5px 10px;
}
.nav > li > a {
font-size: 16px;
line-height: 1.4;
padding: 5px 10px;
font-weight: 800;
}

314
public/assets/navgoco/jquery.navgoco.js

@ -1,314 +0,0 @@
/*
* jQuery Navgoco Menus Plugin v0.2.1 (2014-04-11)
* https://github.com/tefra/navgoco
*
* Copyright (c) 2014 Chris T (@tefra)
* BSD - https://github.com/tefra/navgoco/blob/master/LICENSE-BSD
*/
(function($) {
"use strict";
/**
* Plugin Constructor. Every menu must have a unique id which will either
* be the actual id attribute or its index in the page.
*
* @param {Element} el
* @param {Object} options
* @param {Integer} idx
* @returns {Object} Plugin Instance
*/
var Plugin = function(el, options, idx) {
this.el = el;
this.$el = $(el);
this.options = options;
this.uuid = this.$el.attr('id') ? this.$el.attr('id') : idx;
this.state = {};
this.init();
return this;
};
/**
* Plugin methods
*/
Plugin.prototype = {
/**
* Load cookie, assign a unique data-index attribute to
* all sub-menus and show|hide them according to cookie
* or based on the parent open class. Find all parent li > a
* links add the carent if it's on and attach the event click
* to them.
*/
init: function() {
var self = this;
self._load();
self.$el.find('ul').each(function(idx) {
var sub = $(this);
sub.attr('data-index', idx);
if (self.options.save && self.state.hasOwnProperty(idx)) {
sub.parent().addClass(self.options.openClass);
sub.show();
} else if (sub.parent().hasClass(self.options.openClass)) {
sub.show();
self.state[idx] = 1;
} else {
sub.hide();
}
});
var caret = $('<span></span>').prepend(self.options.caretHtml);
var links = self.$el.find("li > a");
self._trigger(caret, false);
self._trigger(links, true);
self.$el.find("li:has(ul) > a").prepend(caret);
},
/**
* Add the main event trigger to toggle menu items to the given sources
* @param {Element} sources
* @param {Boolean} isLink
*/
_trigger: function(sources, isLink) {
var self = this;
sources.on('click', function(event) {
event.stopPropagation();
var sub = isLink ? $(this).next() : $(this).parent().next();
var isAnchor = false;
if (isLink) {
var href = $(this).attr('href');
isAnchor = href === undefined || href === '' || href === '#';
}
sub = sub.length > 0 ? sub : false;
self.options.onClickBefore.call(this, event, sub);
if (!isLink || sub && isAnchor) {
event.preventDefault();
self._toggle(sub, sub.is(":hidden"));
self._save();
} else if (self.options.accordion) {
var allowed = self.state = self._parents($(this));
self.$el.find('ul').filter(':visible').each(function() {
var sub = $(this),
idx = sub.attr('data-index');
if (!allowed.hasOwnProperty(idx)) {
self._toggle(sub, false);
}
});
self._save();
}
self.options.onClickAfter.call(this, event, sub);
});
},
/**
* Accepts a JQuery Element and a boolean flag. If flag is false it removes the `open` css
* class from the parent li and slides up the sub-menu. If flag is open it adds the `open`
* css class to the parent li and slides down the menu. If accordion mode is on all
* sub-menus except the direct parent tree will close. Internally an object with the menus
* states is maintained for later save duty.
*
* @param {Element} sub
* @param {Boolean} open
*/
_toggle: function(sub, open) {
var self = this,
idx = sub.attr('data-index'),
parent = sub.parent();
self.options.onToggleBefore.call(this, sub, open);
if (open) {
parent.addClass(self.options.openClass);
sub.slideDown(self.options.slide);
self.state[idx] = 1;
if (self.options.accordion) {
var allowed = self.state = self._parents(sub);
allowed[idx] = self.state[idx] = 1;
self.$el.find('ul').filter(':visible').each(function() {
var sub = $(this),
idx = sub.attr('data-index');
if (!allowed.hasOwnProperty(idx)) {
self._toggle(sub, false);
}
});
}
} else {
parent.removeClass(self.options.openClass);
sub.slideUp(self.options.slide);
self.state[idx] = 0;
}
self.options.onToggleAfter.call(this, sub, open);
},
/**
* Returns all parents of a sub-menu. When obj is true It returns an object with indexes for
* keys and the elements as values, if obj is false the object is filled with the value `1`.
*
* @since v0.1.2
* @param {Element} sub
* @param {Boolean} obj
* @returns {Object}
*/
_parents: function(sub, obj) {
var result = {},
parent = sub.parent(),
parents = parent.parents('ul');
parents.each(function() {
var par = $(this),
idx = par.attr('data-index');
if (!idx) {
return false;
}
result[idx] = obj ? par : 1;
});
return result;
},
/**
* If `save` option is on the internal object that keeps track of the sub-menus states is
* saved with a cookie. For size reasons only the open sub-menus indexes are stored. *
*/
_save: function() {
if (this.options.save) {
var save = {};
for (var key in this.state) {
if (this.state[key] === 1) {
save[key] = 1;
}
}
cookie[this.uuid] = this.state = save;
$.cookie(this.options.cookie.name, JSON.stringify(cookie), this.options.cookie);
}
},
/**
* If `save` option is on it reads the cookie data. The cookie contains data for all
* navgoco menus so the read happens only once and stored in the global `cookie` var.
*/
_load: function() {
if (this.options.save) {
if (cookie === null) {
var data = $.cookie(this.options.cookie.name);
cookie = (data) ? JSON.parse(data) : {};
}
this.state = cookie.hasOwnProperty(this.uuid) ? cookie[this.uuid] : {};
}
},
/**
* Public method toggle to manually show|hide sub-menus. If no indexes are provided all
* items will be toggled. You can pass sub-menus indexes as regular params. eg:
* navgoco('toggle', true, 1, 2, 3, 4, 5);
*
* Since v0.1.2 it will also open parents when providing sub-menu indexes.
*
* @param {Boolean} open
*/
toggle: function(open) {
var self = this,
length = arguments.length;
if (length <= 1) {
self.$el.find('ul').each(function() {
var sub = $(this);
self._toggle(sub, open);
});
} else {
var idx,
list = {},
args = Array.prototype.slice.call(arguments, 1);
length--;
for (var i = 0; i < length; i++) {
idx = args[i];
var sub = self.$el.find('ul[data-index="' + idx + '"]').first();
if (sub) {
list[idx] = sub;
if (open) {
var parents = self._parents(sub, true);
for (var pIdx in parents) {
if (!list.hasOwnProperty(pIdx)) {
list[pIdx] = parents[pIdx];
}
}
}
}
}
for (idx in list) {
self._toggle(list[idx], open);
}
}
self._save();
},
/**
* Removes instance from JQuery data cache and unbinds events.
*/
destroy: function() {
$.removeData(this.$el);
this.$el.find("li:has(ul) > a").unbind('click');
this.$el.find("li:has(ul) > a > span").unbind('click');
}
};
/**
* A JQuery plugin wrapper for navgoco. It prevents from multiple instances and also handles
* public methods calls. If we attempt to call a public method on an element that doesn't have
* a navgoco instance, one will be created for it with the default options.
*
* @param {Object|String} options
*/
$.fn.navgoco = function(options) {
if (typeof options === 'string' && options.charAt(0) !== '_' && options !== 'init') {
var callback = true,
args = Array.prototype.slice.call(arguments, 1);
} else {
options = $.extend({}, $.fn.navgoco.defaults, options || {});
if (!$.cookie) {
options.save = false;
}
}
return this.each(function(idx) {
var $this = $(this),
obj = $this.data('navgoco');
if (!obj) {
obj = new Plugin(this, callback ? $.fn.navgoco.defaults : options, idx);
$this.data('navgoco', obj);
}
if (callback) {
obj[options].apply(obj, args);
}
});
};
/**
* Global var holding all navgoco menus open states
*
* @type {Object}
*/
var cookie = null;
/**
* Default navgoco options
*
* @type {Object}
*/
$.fn.navgoco.defaults = {
caretHtml: '',
accordion: false,
openClass: 'open',
save: true,
cookie: {
name: 'navgoco',
expires: false,
path: '/'
},
slide: {
duration: 400,
easing: 'swing'
},
onClickBefore: $.noop,
onClickAfter: $.noop,
onToggleBefore: $.noop,
onToggleAfter: $.noop
};
})(jQuery);

5
public/robots.txt

@ -1,5 +0,0 @@
# www.robotstxt.org/
# www.google.com/support/webmasters/bin/answer.py?hl=en&answer=156449
User-agent: *
Sitemap: https://docs.blockstack.org/sitemap.xml

0
src/common/_includes/commandline.md

18
src/common/routes/get-routes.js

@ -27,17 +27,7 @@ const sections = [
{ path: 'develop/storage' },
{ path: 'storage/authentication' },
{ path: 'storage/write-to-read' },
// { path: 'storage/hub-choice' },
],
},
{
title: 'Data Indexing',
routes: [
{ path: 'storage/overview' },
{ path: 'develop/storage' },
{ path: 'storage/authentication' },
{ path: 'storage/write-to-read' },
// { path: 'storage/hub-choice' },
// { path: 'storage/hub-choice' }, // TODO: why is this missing? missing from `master` too
],
},
{
@ -127,7 +117,7 @@ const sections = [
{ path: 'common/javascript_ref' },
{ path: 'common/android_ref' },
{ path: 'common/ios_ref' },
{ path: 'develop/cliDocs' },
// { path: 'develop/cliDocs' }, Duplicate
{ path: 'common/core_ref' },
{ path: 'core/wire-format' },
{ path: 'storage/config-schema' },
@ -148,6 +138,7 @@ const getHeadings = mdContent => {
const routes = sections.map(section => {
const _routes = section.routes.map(route => {
try {
const fileContent = fs.readFileSync(path.join('./src/pages/', route.path + '.md'), 'utf8');
const data = fm(fileContent);
const headings = getHeadings(data.body);
@ -156,6 +147,9 @@ const routes = sections.map(section => {
...data.attributes,
headings,
};
} catch (e) {
console.log(e);
}
});
return {
...section,

30
src/components/cli-reference.tsx

@ -1,23 +1,21 @@
import React from 'react';
import { cliReferenceData } from '@common/_data/cliRef';
import { H2, P } from '@components/mdx/mdx-components';
import { Text } from '@components/typography';
import MDX from '@mdx-js/runtime';
import { MDXComponents } from '@components/mdx/mdx-components';
import GithubSlugger from 'github-slugger';
const Item = React.memo(({ entry, index }: any) => {
const slugger = new GithubSlugger();
export const CLIReferenceTable = () => {
return (
<>
{cliReferenceData.map((entry, key) => {
return (
<React.Fragment key={key}>
<H2>{entry.command}</H2>
<P>
<React.Fragment key={index}>
<MDXComponents.h2 id={slugger.slug(entry.command)}>{entry.command}</MDXComponents.h2>
<MDXComponents.p>
<Text fontWeight="bold">Group</Text>: {entry.group}
</P>
</MDXComponents.p>
<MDX components={MDXComponents}>{entry.usage}</MDX>
<MDXComponents.h3>Arguments</MDXComponents.h3>
<MDXComponents.h3 id={slugger.slug(entry.command + ' Arguments')}>Arguments</MDXComponents.h3>
<MDXComponents.table>
<tr>
<MDXComponents.th>Name</MDXComponents.th>
@ -39,7 +37,9 @@ export const CLIReferenceTable = () => {
</MDXComponents.table>
</React.Fragment>
);
})}
</>
);
};
});
export const CLIReferenceTable = () =>
cliReferenceData.map((entry, key) => {
return <Item entry={entry} index={key} />;
});

1
src/components/code-block/index.tsx

@ -6,6 +6,7 @@ import 'prismjs/components/prism-tsx';
import 'prismjs/components/prism-json';
import 'prismjs/components/prism-toml';
import 'prismjs/components/prism-python';
import 'prismjs/components/prism-kotlin';
import { SimpleCodeBlock } from '@components/code-block/components';
import { useForceUpdate } from '@blockstack/ui';

4
src/components/mdx/mdx-components.tsx

@ -105,8 +105,8 @@ export const BlockQuote: React.FC<BoxProps> = ({ children, className, ...rest })
);
};
export const Img: React.FC<BoxProps> = props => (
<Box display="block" mx="auto" as="img" {...props} />
export const Img: React.FC<BoxProps & { loading?: string; src?: string; alt?: string }> = props => (
<Box loading="lazy" display="block" mx="auto" as="img" {...props} />
);
export const MDXComponents = {

2
src/pages/android/tutorial.md

@ -75,7 +75,7 @@ In this section, you build a Blockstack `hello-world` web application that acts
### Generate and launch your hello-blockstack application
{% include scaffolding.md %}
@include "scaffolding.md"
In this section, you build an initial React.js application called
`hello-blockstack`.

2
src/pages/common/core_ref.md

@ -15,4 +15,4 @@ The Stacks Blockchain API was built to maintain pageable materialized views of t
_Note: Using this API requires you to trust the server, but provides a faster onboarding experience. It also addresses performance issues for which querying a node itself would be too slow or difficult._
{% include note.html content="If you are looking for the Stacks 1.0 RPC endpoint references, please follow [this link](https://core.blockstack.org/)." %}
-> If you are looking for the Stacks 1.0 RPC endpoint references, please follow [this link](https://core.blockstack.org/).

11
src/pages/core/smart/tutorial.md

@ -73,7 +73,7 @@ You will see that the program and each statement is enclosed in `()` (parenthese
On the first line, a new public function `say-hi` is declared. Public functions are callable from other smart contracts, enabling developers to break complex tasks into smaller, simpler smart contracts (an exercise in [separating concerns](https://en.wikipedia.org/wiki/Separation_of_concerns)).
{% include note.html content="To create private functions, you would use the <code>define-private</code> keyword. Private functions can only be executed by the current smart contract. Only public functions can be called from other contracts." %}
-> To create private functions, you would use the `define-private` keyword. Private functions can only be executed by the current smart contract. Only public functions can be called from other contracts." %}
The function doesn't take any parameters and simply returns "hello world" using the [`ok`](clarityRef.html#ok) response constructor.
@ -89,7 +89,14 @@ The second function, `echo-number`, is a [read-only function](clarityRef.html#de
## Access the Explorer Sandbox
{% include note.html content="<p>This tutorial uses a developer preview release of the <a href='https://testnet-explorer.blockstack.org/'>Stacks 2.0 Explorer</a>. Please feel free to report issues or request enhancements on the <a href='https://github.com/blockstack/explorer/issues/new'>blockstack/explorer</a> repository. For more details about this release, see the <a href='https://forum.blockstack.org/t/explore-the-stacks-2-0-testnet-with-the-new-explorer-developer-preview/10889'>Explore the Stacks 2.0 Testnet</a> post in the Blockstack forums.</p><p>If you encounter trouble using the Explorer Sandbox, try falling back to <a href='#get-familiar-with-cli-optional'>the CLI instructions at the end of this page</a>.</p>" %}
> This tutorial uses a developer preview release of the [Stacks 2.0 Explorer](https://testnet-explorer.blockstack.org/).
> Please feel free to report issues or request enhancements on the [blockstack/explorer](https://github.com/blockstack/explorer/issues/new)
> repository.
>
> For more details about this release, see the [Explore the Stacks 2.0 Testnet](https://forum.blockstack.org/t/explore-the-stacks-2-0-testnet-with-the-new-explorer-developer-preview/10889)
> post in the Blockstack forums.
>
> If you encounter trouble using the Explorer Sandbox, try falling back to [the CLI instructions at the end of this page](#get-familiar-with-cli-optional).
Open up the [Stacks 2.0 Explorer Sandbox view](https://testnet-explorer.blockstack.org/sandbox). The Explorer Sandbox is a web-enabled view of the Testnet blockchain, and has tools for validating contracts, testing out transactions, and generating Testnet STX tokens. Here, we will run the code from `hello-world` right in the browser and create blockchain transactions right in the browser.

6
src/pages/develop/cliDocs.md

@ -1,6 +0,0 @@
---
---
# Blockstack CLI Reference
{% include commandline.md %}

2
src/pages/develop/overview_auth.md

@ -7,7 +7,7 @@ Blockstack Auth provides single sign on and authentication without third parties
## Authentication flow
{% include sign_in.md %}
@include "sign_in.md"
## Scopes

2
src/pages/ios/tutorial.md

@ -95,7 +95,7 @@ modify the `hello-world` to interact with the iOS app via a redirect.
### Generate and launch your hello-blockstack application
{% include scaffolding.md %}
@include "scaffolding.md"
In this section, you build an initial React.js application called
`hello-blockstack`.

2
src/pages/org/secureref.md

@ -21,4 +21,4 @@ You are responsible for recalling and protecting your keys. Blockstack does not
## Security terminology
{% include keyphrase.md %}
@include "keyphrase.md"

7
src/pages/storage/cliDocs.md

@ -1,7 +0,0 @@
---
description: 'Storing user data with Blockstack'
---
# blockstack_cli reference
{% include commandline.md %}

4
src/pages/storage/gaia-admin.md

@ -8,9 +8,7 @@ A Gaia service can run a simple administrative service co-located with your Gaia
In this section, you learn how to use the Gaia admin service with your Gaia hub.
{% include note.html content="
The examples in this section assume that Gaia and the admin service
were installed through the Configure a hub on Amazon EC2." %}
-> The examples in this section assume that Gaia and the admin service were installed through the Configure a hub on Amazon EC2.
## Understand the configuration files

196
yarn.lock

@ -1105,7 +1105,7 @@
dependencies:
regenerator-runtime "^0.13.4"
"@babel/runtime@^7.3.1", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2":
"@babel/runtime@^7.0.0", "@babel/runtime@^7.3.1", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2":
version "7.10.5"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.10.5.tgz#303d8bd440ecd5a491eae6117fd3367698674c5c"
integrity sha512-otddXKhdNn7d0ptoFRHtMLa8LqDxLYwTjB4nYgM1yy5N6gU/MUf8zqyyLltCH3yAVitBzmwK4us+DD0l/MauAg==
@ -1240,6 +1240,19 @@
resolved "https://registry.yarnpkg.com/@francoischalifour/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.0.0-alpha.22.tgz#2a0c712e63ce4d81e15bcc4ff1f69617b2b1312e"
integrity sha512-CEl7afHU9Jvva5lNvbCcdNhg+x3U+s8wj7PQNEtcIGc3zZ+/vo6YHCKjiyn7xAGa7Hn5jUu9g+5d7aeCEFEo+Q==
"@hashicorp/remark-plugins@^3.0.0":
version "3.0.0"
resolved "https://registry.yarnpkg.com/@hashicorp/remark-plugins/-/remark-plugins-3.0.0.tgz#3fe86655ec05d999613c826c5db07d44cf1fbda5"
integrity sha512-K5gn2kXW8zs2MSduobwnv5hXPANXfuH3bL5Ji42UoExoUmbitbIONtsn5N8ckeUVL+Ykk8dlMsb7gZkFHalLZg==
dependencies:
github-slugger "^1.3.0"
remark "^11.0.2"
to-vfile "^6.1.0"
unist-util-flatmap "^1.0.0"
unist-util-is "^4.0.2"
unist-util-map "^2.0.1"
unist-util-visit "^2.0.2"
"@mdx-js/loader@1.6.6", "@mdx-js/loader@^1.6.1":
version "1.6.6"
resolved "https://registry.yarnpkg.com/@mdx-js/loader/-/loader-1.6.6.tgz#de7438f3b18b097d66380f8698123a91c587a2f9"
@ -4297,7 +4310,7 @@ getpass@^0.1.1:
dependencies:
assert-plus "^1.0.0"
github-slugger@^1.0.0:
github-slugger@^1.0.0, github-slugger@^1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/github-slugger/-/github-slugger-1.3.0.tgz#9bd0a95c5efdfc46005e82a906ef8e2a059124c9"
integrity sha512-gwJScWVNhFYSRDvURk/8yhcFBee6aFjye2a7Lhb2bUyRulpIoek9p0I9Kt7PT67d/nUlZbFu8L9RLiA0woQN8Q==
@ -5431,6 +5444,11 @@ markdown-escapes@^1.0.0:
resolved "https://registry.yarnpkg.com/markdown-escapes/-/markdown-escapes-1.0.4.tgz#c95415ef451499d7602b91095f3c8e8975f78535"
integrity sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg==
markdown-table@^1.1.0:
version "1.1.3"
resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-1.1.3.tgz#9fcb69bcfdb8717bfd0398c6ec2d93036ef8de60"
integrity sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q==
markdown-table@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-2.0.0.tgz#194a90ced26d31fe753d8b9434430214c011865b"
@ -5447,6 +5465,13 @@ md5.js@^1.3.4:
inherits "^2.0.1"
safe-buffer "^5.1.2"
mdast-normalize-headings@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/mdast-normalize-headings/-/mdast-normalize-headings-2.0.0.tgz#378c8161a9f57fcf52a6fd5628507af370c7f8c5"
integrity sha512-PVuunQSsJNYiuZ56QypccTVPy8DowOkj61HtD78PSq1M8I49GwxzhdE2QmOp+j/TwaT1yq/K4b201388/ucV2g==
dependencies:
unist-util-visit "^2.0.0"
mdast-squeeze-paragraphs@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/mdast-squeeze-paragraphs/-/mdast-squeeze-paragraphs-4.0.0.tgz#7c4c114679c3bee27ef10b58e2e015be79f1ef97"
@ -5454,6 +5479,13 @@ mdast-squeeze-paragraphs@^4.0.0:
dependencies:
unist-util-remove "^2.0.0"
mdast-util-compact@^1.0.0:
version "1.0.4"
resolved "https://registry.yarnpkg.com/mdast-util-compact/-/mdast-util-compact-1.0.4.tgz#d531bb7667b5123abf20859be086c4d06c894593"
integrity sha512-3YDMQHI5vRiS2uygEFYaqckibpJtKq5Sj2c8JioeOQBU6INpKbdWzfyLqFFnDwEcEnRFIdMsguzs5pC1Jp4Isg==
dependencies:
unist-util-visit "^1.1.0"
mdast-util-compact@^2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/mdast-util-compact/-/mdast-util-compact-2.0.1.tgz#cabc69a2f43103628326f35b1acf735d55c99490"
@ -5522,6 +5554,11 @@ media-typer@0.3.0:
resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748"
integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=
"memoize-one@>=3.1.1 <6":
version "5.1.1"
resolved "https://registry.yarnpkg.com/memoize-one/-/memoize-one-5.1.1.tgz#047b6e3199b508eaec03504de71229b8eb1d75c0"
integrity sha512-HKeeBpWvqiVJD57ZUAsJNm71eHTykffzcLZVYWiVfQeI1rJtuEaS7hQiEpWfVVk18donPwJEcFKIkCmPJNOhHA==
memory-fs@^0.4.1:
version "0.4.1"
resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552"
@ -6021,7 +6058,7 @@ object-assign@^2.0.0:
resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-2.1.1.tgz#43c36e5d569ff8e4816c4efa8be02d26967c18aa"
integrity sha1-Q8NuXVaf+OSBbE76i+AtJpZ8GKo=
object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1:
object-assign@^4.0.0, object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1:
version "4.1.1"
resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=
@ -6211,6 +6248,18 @@ parse-asn1@^5.0.0, parse-asn1@^5.1.5:
pbkdf2 "^3.0.3"
safe-buffer "^5.1.1"
parse-entities@^1.0.2, parse-entities@^1.1.0:
version "1.2.2"
resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-1.2.2.tgz#c31bf0f653b6661354f8973559cb86dd1d5edf50"
integrity sha512-NzfpbxW/NPrzZ/yYSoQxyqUZMZXIdCfE0OIN4ESsnptHJECoUk3FZktxNuzQf4tjt5UEopnxpYJbvYuxIFDdsg==
dependencies:
character-entities "^1.0.0"
character-entities-legacy "^1.0.0"
character-reference-invalid "^1.0.0"
is-alphanumerical "^1.0.0"
is-decimal "^1.0.0"
is-hexadecimal "^1.0.0"
parse-entities@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-2.0.0.tgz#53c6eb5b9314a1f4ec99fa0fdf7ce01ecda0cbe8"
@ -7041,6 +7090,11 @@ react-transition-group@^4.4.1:
loose-envify "^1.4.0"
prop-types "^15.6.2"
react-virtualized-auto-sizer@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/react-virtualized-auto-sizer/-/react-virtualized-auto-sizer-1.0.2.tgz#a61dd4f756458bbf63bd895a92379f9b70f803bd"
integrity sha512-MYXhTY1BZpdJFjUovvYHVBmkq79szK/k7V3MO+36gJkWGkrXKtyr4vCPtpphaTLRAdDNoYEYFZWE8LjN+PIHNg==
react-waypoint@^9.0.3:
version "9.0.3"
resolved "https://registry.yarnpkg.com/react-waypoint/-/react-waypoint-9.0.3.tgz#176aa4686b33eb40d0d48d361c468f0367167958"
@ -7050,6 +7104,14 @@ react-waypoint@^9.0.3:
prop-types "^15.0.0"
react-is "^16.6.3"
react-window@^1.8.5:
version "1.8.5"
resolved "https://registry.yarnpkg.com/react-window/-/react-window-1.8.5.tgz#a56b39307e79979721021f5d06a67742ecca52d1"
integrity sha512-HeTwlNa37AFa8MDZFZOKcNEkuF2YflA0hpGPiTT9vR7OawEt+GZbfM6wqkBahD3D3pUjIabQYzsnY/BSJbgq6Q==
dependencies:
"@babel/runtime" "^7.0.0"
memoize-one ">=3.1.1 <6"
react@^0.14.0:
version "0.14.9"
resolved "https://registry.yarnpkg.com/react/-/react-0.14.9.tgz#9110a6497c49d44ba1c0edd317aec29c2e0d91d1"
@ -7257,6 +7319,13 @@ remark-mdx@^1.6.7:
remark-parse "8.0.2"
unified "9.0.0"
remark-normalize-headings@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/remark-normalize-headings/-/remark-normalize-headings-2.0.0.tgz#2e7492f4935346dc5eca96ffdb5f588196233169"
integrity sha512-nXeBQ7luKRWDcuUTnc0ffUYZ7+cO01FomSjnzpGTGCi7rcD9Wbis+z3adbNyqbYtsC+/+o1S+GLHTwh9crnZxA==
dependencies:
mdast-normalize-headings "^2.0.0"
remark-parse@8.0.2, remark-parse@^8.0.0:
version "8.0.2"
resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-8.0.2.tgz#5999bc0b9c2e3edc038800a64ff103d0890b318b"
@ -7279,6 +7348,27 @@ remark-parse@8.0.2, remark-parse@^8.0.0:
vfile-location "^3.0.0"
xtend "^4.0.1"
remark-parse@^7.0.0:
version "7.0.2"
resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-7.0.2.tgz#41e7170d9c1d96c3d32cf1109600a9ed50dba7cf"
integrity sha512-9+my0lQS80IQkYXsMA8Sg6m9QfXYJBnXjWYN5U+kFc5/n69t+XZVXU/ZBYr3cYH8FheEGf1v87rkFDhJ8bVgMA==
dependencies:
collapse-white-space "^1.0.2"
is-alphabetical "^1.0.0"
is-decimal "^1.0.0"
is-whitespace-character "^1.0.0"
is-word-character "^1.0.0"
markdown-escapes "^1.0.0"
parse-entities "^1.1.0"
repeat-string "^1.5.4"
state-toggle "^1.0.0"
trim "0.0.1"
trim-trailing-lines "^1.0.0"
unherit "^1.0.4"
unist-util-remove-position "^1.0.0"
vfile-location "^2.0.0"
xtend "^4.0.1"
remark-slug@6.0.0:
version "6.0.0"
resolved "https://registry.yarnpkg.com/remark-slug/-/remark-slug-6.0.0.tgz#2b54a14a7b50407a5e462ac2f376022cce263e2c"
@ -7288,13 +7378,33 @@ remark-slug@6.0.0:
mdast-util-to-string "^1.0.0"
unist-util-visit "^2.0.0"
remark-squeeze-paragraphs@4.0.0:
remark-squeeze-paragraphs@4.0.0, remark-squeeze-paragraphs@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/remark-squeeze-paragraphs/-/remark-squeeze-paragraphs-4.0.0.tgz#76eb0e085295131c84748c8e43810159c5653ead"
integrity sha512-8qRqmL9F4nuLPIgl92XUuxI3pFxize+F1H0e/W3llTk0UsjJaj01+RrirkMw7P21RKe4X6goQhYRSvNWX+70Rw==
dependencies:
mdast-squeeze-paragraphs "^4.0.0"
remark-stringify@^7.0.0:
version "7.0.4"
resolved "https://registry.yarnpkg.com/remark-stringify/-/remark-stringify-7.0.4.tgz#3de1e3f93853288d3407da1cd44f2212321dd548"
integrity sha512-qck+8NeA1D0utk1ttKcWAoHRrJxERYQzkHDyn+pF5Z4whX1ug98uCNPPSeFgLSaNERRxnD6oxIug6DzZQth6Pg==
dependencies:
ccount "^1.0.0"
is-alphanumeric "^1.0.0"
is-decimal "^1.0.0"
is-whitespace-character "^1.0.0"
longest-streak "^2.0.1"
markdown-escapes "^1.0.0"
markdown-table "^1.1.0"
mdast-util-compact "^1.0.0"
parse-entities "^1.0.2"
repeat-string "^1.5.4"
state-toggle "^1.0.0"
stringify-entities "^2.0.0"
unherit "^1.0.4"
xtend "^4.0.1"
remark-stringify@^8.0.0:
version "8.1.0"
resolved "https://registry.yarnpkg.com/remark-stringify/-/remark-stringify-8.1.0.tgz#1e555f4402e445c364fb23d12fc5f5e0337ec8b7"
@ -7323,6 +7433,15 @@ remark-unwrap-images@2.0.0:
hast-util-whitespace "^1.0.0"
unist-util-visit "^2.0.0"
remark@^11.0.2:
version "11.0.2"
resolved "https://registry.yarnpkg.com/remark/-/remark-11.0.2.tgz#12b90ea100ac3362b1976fa87a6e4e0ab5968202"
integrity sha512-bh+eJgn8wgmbHmIBOuwJFdTVRVpl3fcVP6HxmpPWO0ULGP9Qkh6INJh0N5Uy7GqlV7DQYGoqaKiEIpM5LLvJ8w==
dependencies:
remark-parse "^7.0.0"
remark-stringify "^7.0.0"
unified "^8.2.0"
remark@^12.0.0:
version "12.0.0"
resolved "https://registry.yarnpkg.com/remark/-/remark-12.0.0.tgz#d1c145c07341c9232f93b2f8539d56da15a2548c"
@ -7950,6 +8069,17 @@ string_decoder@~1.1.1:
dependencies:
safe-buffer "~5.1.0"
stringify-entities@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/stringify-entities/-/stringify-entities-2.0.0.tgz#fa7ca6614b355fb6c28448140a20c4ede7462827"
integrity sha512-fqqhZzXyAM6pGD9lky/GOPq6V4X0SeTAFBl0iXb/BzOegl40gpf/bV3QQP7zULNYvjr6+Dx8SCaDULjVoOru0A==
dependencies:
character-entities-html4 "^1.0.0"
character-entities-legacy "^1.0.0"
is-alphanumerical "^1.0.0"
is-decimal "^1.0.2"
is-hexadecimal "^1.0.0"
stringify-entities@^3.0.0:
version "3.0.1"
resolved "https://registry.yarnpkg.com/stringify-entities/-/stringify-entities-3.0.1.tgz#32154b91286ab0869ab2c07696223bd23b6dbfc0"
@ -8244,6 +8374,14 @@ to-regex@^3.0.1, to-regex@^3.0.2:
regex-not "^1.0.2"
safe-regex "^1.1.0"
to-vfile@^6.1.0:
version "6.1.0"
resolved "https://registry.yarnpkg.com/to-vfile/-/to-vfile-6.1.0.tgz#5f7a3f65813c2c4e34ee1f7643a5646344627699"
integrity sha512-BxX8EkCxOAZe+D/ToHdDsJcVI4HqQfmw0tCkp31zf3dNP/XWIAjU4CmeuSwsSoOzOTqHPOL0KUzyZqJplkD0Qw==
dependencies:
is-buffer "^2.0.0"
vfile "^4.0.0"
toidentifier@1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553"
@ -8447,6 +8585,17 @@ unified@9.0.0, unified@^9.0.0:
trough "^1.0.0"
vfile "^4.0.0"
unified@^8.2.0:
version "8.4.2"
resolved "https://registry.yarnpkg.com/unified/-/unified-8.4.2.tgz#13ad58b4a437faa2751a4a4c6a16f680c500fff1"
integrity sha512-JCrmN13jI4+h9UAyKEoGcDZV+i1E7BLFuG7OsaDvTXI5P0qhHX+vZO/kOhz9jn8HGENDKbwSeB0nVOg4gVStGA==
dependencies:
bail "^1.0.0"
extend "^3.0.0"
is-plain-obj "^2.0.0"
trough "^1.0.0"
vfile "^4.0.0"
union-value@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847"
@ -8486,6 +8635,11 @@ unist-builder@2.0.3, unist-builder@^2.0.0:
resolved "https://registry.yarnpkg.com/unist-builder/-/unist-builder-2.0.3.tgz#77648711b5d86af0942f334397a33c5e91516436"
integrity sha512-f98yt5pnlMWlzP539tPc4grGMsFaQQlP/vM396b00jngsiINumNmsY8rkXjfoi1c6QaM8nQ3vaGDuoKWbe/1Uw==
unist-util-flatmap@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/unist-util-flatmap/-/unist-util-flatmap-1.0.0.tgz#f914ed6b36ff040afce938d848f379f88b94b448"
integrity sha512-IG32jcKJlhARCYT2LsYPJWdoXYkzz3ESAdl1aa2hn9Auh+cgUmU6wgkII4yCc/1GgeWibRdELdCZh/p3QKQ1dQ==
unist-util-generated@^1.0.0:
version "1.1.5"
resolved "https://registry.yarnpkg.com/unist-util-generated/-/unist-util-generated-1.1.5.tgz#1e903e68467931ebfaea386dae9ea253628acd42"
@ -8501,11 +8655,26 @@ unist-util-is@^4.0.0, unist-util-is@^4.0.2:
resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-4.0.2.tgz#c7d1341188aa9ce5b3cff538958de9895f14a5de"
integrity sha512-Ofx8uf6haexJwI1gxWMGg6I/dLnF2yE+KibhD3/diOqY2TinLcqHXCV6OI5gFVn3xQqDH+u0M625pfKwIwgBKQ==
unist-util-map@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/unist-util-map/-/unist-util-map-2.0.1.tgz#c3fca064486d3937c4dad8b39c64974faae7c7c4"
integrity sha512-VdNvk4BQUUU9Rgr8iUOvclHa/iN9O+6Dt66FKij8l9OVezGG37gGWCPU5KSax1R2degqXFvl3kWTkvzL79e9tQ==
dependencies:
"@types/mdast" "^3.0.0"
object-assign "^4.0.0"
unist-util-position@^3.0.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/unist-util-position/-/unist-util-position-3.1.0.tgz#1c42ee6301f8d52f47d14f62bbdb796571fa2d47"
integrity sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA==
unist-util-remove-position@^1.0.0:
version "1.1.4"
resolved "https://registry.yarnpkg.com/unist-util-remove-position/-/unist-util-remove-position-1.1.4.tgz#ec037348b6102c897703eee6d0294ca4755a2020"
integrity sha512-tLqd653ArxJIPnKII6LMZwH+mb5q+n/GtXQZo6S6csPRs5zB0u79Yw8ouR3wTw8wxvdJFhpP6Y7jorWdCgLO0A==
dependencies:
unist-util-visit "^1.1.0"
unist-util-remove-position@^2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/unist-util-remove-position/-/unist-util-remove-position-2.0.1.tgz#5d19ca79fdba712301999b2b73553ca8f3b352cc"
@ -8527,6 +8696,13 @@ unist-util-stringify-position@^2.0.0:
dependencies:
"@types/unist" "^2.0.2"
unist-util-visit-parents@^2.0.0:
version "2.1.2"
resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-2.1.2.tgz#25e43e55312166f3348cae6743588781d112c1e9"
integrity sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g==
dependencies:
unist-util-is "^3.0.0"
unist-util-visit-parents@^3.0.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-3.1.0.tgz#4dd262fb9dcfe44f297d53e882fc6ff3421173d5"
@ -8544,6 +8720,13 @@ unist-util-visit@2.0.2:
unist-util-is "^4.0.0"
unist-util-visit-parents "^3.0.0"
unist-util-visit@^1.1.0:
version "1.4.1"
resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-1.4.1.tgz#4724aaa8486e6ee6e26d7ff3c8685960d560b1e3"
integrity sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw==
dependencies:
unist-util-visit-parents "^2.0.0"
unist-util-visit@^2.0.0, unist-util-visit@^2.0.2, unist-util-visit@^2.0.3:
version "2.0.3"
resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-2.0.3.tgz#c3703893146df47203bb8a9795af47d7b971208c"
@ -8707,6 +8890,11 @@ verror@1.10.0:
core-util-is "1.0.2"
extsprintf "^1.2.0"
vfile-location@^2.0.0:
version "2.0.6"
resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-2.0.6.tgz#8a274f39411b8719ea5728802e10d9e0dff1519e"
integrity sha512-sSFdyCP3G6Ka0CEmN83A2YCMKIieHx0EDaj5IDP4g1pa5ZJ4FJDvpO0WODLxo4LUX4oe52gmSCK7Jw4SBghqxA==
vfile-location@^3.0.0:
version "3.0.1"
resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-3.0.1.tgz#d78677c3546de0f7cd977544c367266764d31bb3"

Loading…
Cancel
Save