Basic tutorial added to docs
@@ -1,25 +0,0 @@
|
||||
---
|
||||
title: Create a Blog Post
|
||||
---
|
||||
|
||||
This page will help you on how to create blog posts in Docusaurus.
|
||||
|
||||
## Create a Blog Post
|
||||
|
||||
Create a file at `blog/2021-02-28-greetings.md`:
|
||||
|
||||
```md title="blog/2021-02-28-greetings.md"
|
||||
---
|
||||
title: Greetings!
|
||||
author: Steven Hansel
|
||||
author_title: Docusaurus Contributor
|
||||
author_url: https://github.com/ShinteiMai
|
||||
author_image_url: https://github.com/ShinteiMai.png
|
||||
---
|
||||
|
||||
Congratulations, you have made your first post!
|
||||
|
||||
Feel free to play around and edit this post as much you like.
|
||||
```
|
||||
|
||||
A new blog post is now available at `http://localhost:3000/blog/greetings`.
|
||||
@@ -1,38 +0,0 @@
|
||||
---
|
||||
title: Create a Document
|
||||
---
|
||||
|
||||
Documents are pages with a **sidebar**, a **previous/next navigation** and many other useful features.
|
||||
|
||||
## Create a Document
|
||||
|
||||
Create a markdown file at `docs/my-doc.md`:
|
||||
|
||||
```mdx title="docs/hello.md"
|
||||
---
|
||||
title: Hello, World!
|
||||
---
|
||||
|
||||
## Hello, World!
|
||||
|
||||
This is your first document in **Docusaurus**, Congratulations!
|
||||
```
|
||||
|
||||
A new document is now available at `http://localhost:3000/docs/hello`.
|
||||
|
||||
## Add your document to the sidebar
|
||||
|
||||
Add `hello` to the `sidebars.js` file:
|
||||
|
||||
```diff title="sidebars.js"
|
||||
module.exports = {
|
||||
docs: [
|
||||
{
|
||||
type: 'category',
|
||||
label: 'Docusaurus Tutorial',
|
||||
- items: ['getting-started', 'create-a-doc', ...],
|
||||
+ items: ['getting-started', 'create-a-doc', 'hello', ...],
|
||||
},
|
||||
],
|
||||
};
|
||||
```
|
||||
@@ -1,45 +0,0 @@
|
||||
---
|
||||
title: Create a Page
|
||||
---
|
||||
|
||||
Any React or Markdown file created under `src/pages` directory is converted into a website page:
|
||||
|
||||
- `src/pages/index.js` -> `localhost:3000/`
|
||||
- `src/pages/foo.md` -> `localhost:3000/foo`
|
||||
- `src/pages/foo/bar.js` -> `localhost:3000/foo/bar`
|
||||
|
||||
## Create a React Page
|
||||
|
||||
Create a file at `src/pages/my-react-page.js`:
|
||||
|
||||
```jsx title="src/pages/my-react-page.js"
|
||||
import React from 'react';
|
||||
import Layout from '@theme/Layout';
|
||||
|
||||
function HelloWorld() {
|
||||
return (
|
||||
<Layout>
|
||||
<h1>My React page</h1>
|
||||
<p>This is a React page</p>
|
||||
</Layout>
|
||||
);
|
||||
}
|
||||
```
|
||||
|
||||
A new page is now available at `http://localhost:3000/my-react-page`.
|
||||
|
||||
## Create a Markdown Page
|
||||
|
||||
Create a file at `src/pages/my-markdown-page.md`:
|
||||
|
||||
```mdx title="src/pages/my-markdown-page.md"
|
||||
---
|
||||
title: My Markdown page
|
||||
---
|
||||
|
||||
# My Markdown page
|
||||
|
||||
This is a Markdown page
|
||||
```
|
||||
|
||||
A new page is now available at `http://localhost:3000/my-markdown-page`.
|
||||
110
docs/docs/definitive-beginners/adding-clearances.mdx
Normal file
@@ -0,0 +1,110 @@
|
||||
---
|
||||
title: Adding Clearances
|
||||
---
|
||||
|
||||
import Image from '@theme/IdealImage';
|
||||
|
||||
import pivotGap from '../../static/img/openscad-tutorial/pivot-gap.png';
|
||||
import clearancePivot from '../../static/img/openscad-tutorial/clearance-pivot.png';
|
||||
import rotate from '../../static/img/openscad-tutorial/rotate.png';
|
||||
import readScad from '../../static/img/openscad-tutorial/read-scad.png';
|
||||
|
||||
Since we've started thinking about how the hinge will be assembled with the pin taper, we also need to think about tolerances and clearance gaps. Because we want this hinge to be a "print in place" which mean it prints pre-assembled, we need to add clearance gaps so that our part doesn't print solid!
|
||||
|
||||
Let start by adding a `clearance` variable and first thing we need to do is extrude our `hingeBodyHalf` slightly less than `hingeLength/2` since there needs to be some play between the two halves.
|
||||
|
||||
```cpp
|
||||
// highlight-next-line
|
||||
clearance=0.2;
|
||||
module hingeBodyHalf() {
|
||||
// highlight-next-line
|
||||
linear_extrude(hingeLength/2-clearance/2){
|
||||
// ... rest of module definition
|
||||
}
|
||||
```
|
||||
|
||||
Oh no! there now a gap between our `pin` and `hingeBodyHalf`
|
||||
|
||||
<Image img={pivotGap} style={{backgroundSize: 'contain'}} />
|
||||
|
||||
Here's the fix for that:
|
||||
|
||||
```cpp
|
||||
hingeHalfExtrudeLength=hingeLength/2-clearance/2;
|
||||
|
||||
module hingeBodyHalf() {
|
||||
linear_extrude(hingeHalfExtrudeLength){
|
||||
// ... rest of module definiton
|
||||
}
|
||||
|
||||
module pin() {
|
||||
translate([0,pivotRadius,hingeHalfExtrudeLength]){
|
||||
cylinder(h=hingeLength/2+clearance/2, r1=pinRadius, r2=pinRadius+pinTaper);
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
We've done something new here, we've defined a variable with other variables and some arithmetic with `hingeHalfExtrudeLength=hingeLength/2-clearance/2;`.
|
||||
This variable is then used both in `hingeBodyHalf` and `pin`.
|
||||
The benefit of doing so is if we need to update this length again we only need to update it in one place since both of the modules need the same calculated length.
|
||||
Also notice that've we increased the length of the `cylinder` too so that it reaches the full `hingeLength`.
|
||||
|
||||
Much better
|
||||
|
||||
<Image img={clearancePivot} style={{backgroundSize: 'contain'}} />
|
||||
|
||||
We still have more work to do on the pin though. We want to re-use the pin to "subtract" its shape from the other of the hinge, basically we can use our current pint to make a hole.
|
||||
Lets make a temporary new module called `pin2` in this new module and we're going to introduce a new function `rotate` to re-orientate the pin
|
||||
|
||||
```cpp
|
||||
module pin2() {
|
||||
translate([0,pivotRadius,hingeHalfExtrudeLength+tiny]){
|
||||
// highlight-next-line
|
||||
rotate([0,45,0]){
|
||||
cylinder(h=hingeLength/2+clearance/2, r1=pinRadius, r2=pinRadius+pinTaper);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
hingeBodyHalf();
|
||||
pin2();
|
||||
```
|
||||
|
||||
<Image img={rotate} style={{backgroundSize: 'contain'}} />
|
||||
|
||||
This is not where we want to leave our pin, but it's a good way to introduce `rotate` as well as using multiple modifiers, i.e. we're using both `translate` and `rotate` together here.
|
||||
`rotate` is similar to `translate` in that it takes an argument `[x, y, z]` but instead of moving it rotates about each of those axes. In the above example of `[0, 45, 0]` it's as if were were to put a pin into the object along the `y` axis and then rotate 45 degrees around that pin.
|
||||
|
||||
## How To Read Chained Operations
|
||||
|
||||
Notice the order that we applied the `rotate` and `transform` we applied the `rotate` first and then the`transform`.
|
||||
This might seem counter intuitive because `translate` is on top, but nesting operations should be read from the most nest outward in openscad.
|
||||
Here's the correct way to read the above code:
|
||||
|
||||
<Image img={readScad} style={{backgroundSize: 'contain'}} />
|
||||
|
||||
The same thing applies to `hingeBodyHalf` that should read as follows:
|
||||
|
||||
```cpp
|
||||
// read as
|
||||
// 1) Add circle, square and hingeBaseProfile
|
||||
// 2) Apply an offset of 1 (far right offset)
|
||||
// 3) then on offset of -2 (middle) then an offset of 1 (far left)
|
||||
// 4) Extrude the 2d shape of hingeHalfExtrudeLength
|
||||
module hingeBodyHalf() {
|
||||
linear_extrude(hingeHalfExtrudeLength){
|
||||
offset(1)offset(-2)offset(1){
|
||||
translate([0,pivotRadius,0]){
|
||||
circle(pivotRadius);
|
||||
}
|
||||
square([pivotRadius,pivotRadius]);
|
||||
hingeBaseProfile();
|
||||
}
|
||||
}
|
||||
linear_extrude(hingeLength){
|
||||
offset(1)offset(-1)hingeBaseProfile();
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Back to our pin and `rotate`. The reason we `rotate` first is because openscad shapes always rotates around the origin point `[0,0,0]` and translating first can make things very confusing, in general you should ALWAYS `rotate` first unless you have a good reason not to.
|
||||
53
docs/docs/definitive-beginners/adding-fillets.mdx
Normal file
@@ -0,0 +1,53 @@
|
||||
---
|
||||
title: Adding Fillets
|
||||
---
|
||||
|
||||
import Image from '@theme/IdealImage';
|
||||
|
||||
import offset1 from '../../static/img/openscad-tutorial/offset1.png';
|
||||
import offset2 from '../../static/img/openscad-tutorial/offset2.png';
|
||||
import offset3 from '../../static/img/openscad-tutorial/offset3.png';
|
||||
|
||||
Next we're going to learn about a hack that every OpenSCAD coder should know, and that's you can create fillets with `offset`.
|
||||
Fillets are often ignored in OpenSCAD because they can be difficult to do, but you're not going to ignore them because you're a good engineer.
|
||||
We need to give fillets their due because they play an important role in reducing stress concentrations, have you ever seen an airplane with sharp square windows?? [Exactly](https://www.youtube.com/watch?v=7rXGRPMD-GQ)!
|
||||
|
||||
## Offset
|
||||
|
||||
Offset works by "expanding" the skin of your 2d shape but importantly it rounds external corners in the process. See our swole hinge profile below:
|
||||
|
||||
```cpp
|
||||
// ... variables above
|
||||
// highlight-next-line
|
||||
offset(1){
|
||||
translate([0,pivotRadius,0]){
|
||||
circle(pivotRadius);
|
||||
}
|
||||
square([pivotRadius,pivotRadius]);
|
||||
translate([pivotRadius,0,0]){
|
||||
square([baseWidth,baseThickness]);
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
<Image img={offset1} style={{backgroundSize: 'contain'}} />
|
||||
|
||||
## Double Offset
|
||||
|
||||
Here's the rub, we can do this again in reverse using a negative number to bring us back to our original dimensions but with an internal fillet.
|
||||
|
||||
```cpp
|
||||
offset(-1)offset(1){
|
||||
// ... hinge profile
|
||||
}
|
||||
```
|
||||
|
||||
<Image img={offset2} style={{backgroundSize: 'contain'}} />
|
||||
|
||||
## Triple Offset
|
||||
|
||||
It gets even better, we can double our negative value and apply a third offset to get external fillets as well, to better understand what's happening here let overlay the shapes after each offset.
|
||||
|
||||
<Image img={offset3} style={{backgroundSize: 'contain'}} />
|
||||
|
||||
In essence we over expand, then under expand before finally expanding back to the original dimensions, but we have gained fillets in the process, it like kneading bread, the more you do it the better the bread . . . not really stick to 3 max.
|
||||
83
docs/docs/definitive-beginners/extruding-2d-shapes.mdx
Normal file
@@ -0,0 +1,83 @@
|
||||
---
|
||||
title: Extruding 2d Shapes
|
||||
---
|
||||
|
||||
import Image from '@theme/IdealImage';
|
||||
|
||||
import extrude from '../../static/img/openscad-tutorial/extrude.png';
|
||||
import differenceMarkup from '../../static/img/openscad-tutorial/difference-markup.png';
|
||||
import extrude2 from '../../static/img/openscad-tutorial/extrude2.png';
|
||||
import noFillet from '../../static/img/openscad-tutorial/no-fillet.png';
|
||||
|
||||
### Let get 3 dimensional
|
||||
|
||||
We've looked at this 2d shape long enough, we can give it some depth by extruding it, `linear_extrude`ing to be precise, let's add a new variable `hingeLength` too.
|
||||
|
||||
```cpp
|
||||
// ... other variables above
|
||||
hingeLength=30;
|
||||
// highlight-next-line
|
||||
linear_extrude(hingeLength){
|
||||
offset(1)offset(-2)offset(1){
|
||||
translate([0,pivotRadius,0]){
|
||||
circle(pivotRadius);
|
||||
}
|
||||
square([pivotRadius,pivotRadius]);
|
||||
translate([pivotRadius,0,0]){
|
||||
square([baseWidth,baseThickness]);
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
<Image img={extrude} style={{backgroundSize: 'contain'}} />
|
||||
|
||||
We do have a bit of a problem though because while want the base to go the full length of the hinge, the pivot should only go half that to make room for the other part of the hinge.
|
||||
Red scribbles shows what we want to remove.
|
||||
|
||||
<Image img={differenceMarkup} style={{backgroundSize: 'contain'}} />
|
||||
|
||||
The best way around this problem is to extrude the base again separately so to stretch further than the pivot.
|
||||
|
||||
```cpp
|
||||
// ... variables above
|
||||
linear_extrude(hingeLength/2){
|
||||
offset(1)offset(-2)offset(1){
|
||||
translate([0,pivotRadius,0]){
|
||||
circle(pivotRadius);
|
||||
}
|
||||
square([pivotRadius,pivotRadius]);
|
||||
translate([pivotRadius,0,0]){
|
||||
square([baseWidth,baseThickness]);
|
||||
}
|
||||
}
|
||||
}
|
||||
// highlight-start
|
||||
linear_extrude(hingeLength){
|
||||
offset(1)offset(-1)translate([pivotRadius,0,0]){
|
||||
square([baseWidth,baseThickness]);
|
||||
}
|
||||
}
|
||||
// highlight-end
|
||||
```
|
||||
|
||||
<Image img={extrude2} style={{backgroundSize: 'contain'}} />
|
||||
|
||||
## Math Operations
|
||||
|
||||
Great, starting to take shape, couple things to go over, first you may have noticed that we just did some inline math with `hingeLength/2`.
|
||||
This works fine, normal math operations can be preformed and it's fine to mix variables with numbers (also `2` here doesn't count as a magic number since `hingeLength/2` is easy to read as "half of `hingeLength`".
|
||||
|
||||
You may notice that we've included the code that forms the hinge base:
|
||||
|
||||
```cpp
|
||||
translate([pivotRadius,0,0]){
|
||||
square([baseWidth,baseThickness]);
|
||||
}
|
||||
```
|
||||
|
||||
within both of the `linear_extrude`s, at first it might seem like we could remove it from first `linear_extrude` since it only goes half the `hingeLength` but this would cause us to loose our internal fillet.
|
||||
|
||||
<Image img={noFillet} style={{backgroundSize: 'contain'}} />
|
||||
|
||||
As it needs to be within `offset` group for this fillet to work.
|
||||
209
docs/docs/definitive-beginners/loops.mdx
Normal file
@@ -0,0 +1,209 @@
|
||||
---
|
||||
title: Loops
|
||||
---
|
||||
|
||||
import Image from '@theme/IdealImage';
|
||||
|
||||
import hole1 from '../../static/img/openscad-tutorial/hole1.png';
|
||||
import hole2 from '../../static/img/openscad-tutorial/hole2.png';
|
||||
import hole3 from '../../static/img/openscad-tutorial/hole3.png';
|
||||
import hole4 from '../../static/img/openscad-tutorial/hole4.png';
|
||||
import hole5 from '../../static/img/openscad-tutorial/hole5.png';
|
||||
import hole6 from '../../static/img/openscad-tutorial/hole6.png';
|
||||
import finishedHinge from '../../static/img/openscad-tutorial/finished-hinge.png';
|
||||
|
||||
Let's remove the male hinge for now and add a new `module` called `plateHoles`.
|
||||
We'll start by adding adding a cylinder that's definitely longer than the plate is thick, we'll than rotate it by 90 degrees and move it a little:
|
||||
|
||||
```cpp
|
||||
// ... other variable definitions
|
||||
mountingHoleRadius=1.5;
|
||||
|
||||
// ... other module definitions
|
||||
// highlight-start
|
||||
module plateHoles() {
|
||||
translate([baseWidth/2+pivotRadius,-baseThickness,0]){
|
||||
rotate([-90,0,0]){
|
||||
cylinder(r=mountingHoleRadius,h=baseThickness*4);
|
||||
}
|
||||
}
|
||||
}
|
||||
// highlight-end
|
||||
|
||||
%hingeHalfFemale();
|
||||
// hingeHalfMale();
|
||||
plateHoles();
|
||||
```
|
||||
|
||||
<Image img={hole1} style={{backgroundSize: 'contain'}} />
|
||||
|
||||
## Basic Loop
|
||||
|
||||
From here we can see how we can use this new `cylinder` along with `difference` to make a hole in the hinge base, but it's not quiet in the right place (it's half hanging off the edge), lets add a variable for how close we want the hole to sit from the edge `mountingHoleEdgeOffset=4;`.
|
||||
But bear in mind we also want to want multiple of these hole and it would be good if we could avoid "hard-coding" each one. Luckly we're able to layout a number of holes efficiently with a `for` loop.
|
||||
Lets add another variable `mountingHoleCount=3;`. There's a few ways to use a `for` loop in OpenSCAD, but we're going to use the simplest case, it's defined as
|
||||
`for(increment=[startNumber:endNmuber]){ /* your code ... */ }`
|
||||
|
||||
`increment` is another variable, we can name it anything we want (`i` is very common) but increment is a good name.
|
||||
The code that runs within the curly braces `{}` is run multiple times for each number in the range between `startNumber` and `endNumber`, and the value of `increment` will update each time it's run. To make this concrete, we want 3 holes so lets add the following to `plateHoles`:
|
||||
|
||||
```cpp
|
||||
module plateHoles() {
|
||||
// highlight-start
|
||||
for(increment=[0:2]){
|
||||
echo("increment is currently", increment);
|
||||
// highlight-end
|
||||
translate([baseWidth/2+pivotRadius,-baseThickness,0]){
|
||||
rotate([-90,0,0]){
|
||||
cylinder(r=mountingHoleRadius,h=baseThickness*4);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
The reason we're using `[0:2]` and not `[0:3]` is because `0` counts so the code still runs 3 times.
|
||||
I've also introduced another function `echo`, this function can be used to display text to the console, we've added it a a temporary measure to help demonstrate that the code in the `for` loop is run multiple times.
|
||||
You should see in the console the following:
|
||||
|
||||
```cpp
|
||||
ECHO: "increment is currently", 0
|
||||
ECHO: "increment is currently", 1
|
||||
ECHO: "increment is currently", 2
|
||||
// followed by some internal OpenSCAD messages
|
||||
```
|
||||
|
||||
## Repeating Geometry
|
||||
|
||||
Great, `echo` runs three times. Since we know the value of `increment` changes, lets use that to our advantage and change the value `translate` Z-axis like so:
|
||||
|
||||
```cpp
|
||||
module plateHoles() {
|
||||
for(increment=[0:2]){
|
||||
// highlight-next-line
|
||||
translate([baseWidth/2+pivotRadius,-baseThickness,increment*10]){
|
||||
rotate([-90,0,0]){
|
||||
cylinder(r=mountingHoleRadius,h=baseThickness*4);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
<Image img={hole2} style={{backgroundSize: 'contain'}} />
|
||||
|
||||
And just like that we have three evenly spaced `cylinders`!
|
||||
|
||||
## Calculating distribution
|
||||
|
||||
I'm sure you can see where this is going, we need to make a few tweaks to get this all polished though.
|
||||
First lets use our variables, both the new `mountingHoleCount` and we can use that calculate a new variable `mountingHoleMoveIncrement=hingeLength/(mountingHoleCount-1);`
|
||||
This will be the gap between each of the holes, the reason we're using `(mountingHoleCount-1)` is because counting the gaps between holes, there's one less than the amount of holes. let's now add `increment*mountingHoleMoveIncrement`:
|
||||
|
||||
```cpp
|
||||
// highlight-next-line
|
||||
mountingHoleMoveIncrement=hingeLength/(mountingHoleCount-1);
|
||||
|
||||
module plateHoles() {
|
||||
// highlight-start
|
||||
for(i=[0:mountingHoleCount-1]){
|
||||
translate([baseWidth/2+pivotRadius,-baseThickness,i*mountingHoleMoveIncrement]){
|
||||
// highlight-end
|
||||
rotate([-90,0,0]){
|
||||
cylinder(r=mountingHoleRadius,h=baseThickness*4);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
<Image img={hole3} style={{backgroundSize: 'contain'}} />
|
||||
|
||||
Awesome, it obvious that the hole spacing is related to the length of the hinge now, we can even increase the amount of holes with mountingHoleCount=4; and it look correct:
|
||||
|
||||
<Image img={hole4} style={{backgroundSize: 'contain'}} />
|
||||
|
||||
Though we still have the problem if the holes sitting right on the edge.
|
||||
We defined `mountingHoleEdgeOffset` earlier lets now use it in the `mountingHoleMoveIncrement` calculation.
|
||||
|
||||
```cpp
|
||||
mountingHoleEdgeOffset=4;
|
||||
// highlight-start
|
||||
mountingHoleMoveIncrement=(hingeLength-2*mountingHoleEdgeOffset)/
|
||||
(mountingHoleCount-1);
|
||||
// highlight-end
|
||||
|
||||
module plateHoles() {
|
||||
// highlight-start
|
||||
for(i=[0:mountingHoleCount-1]){
|
||||
translate([baseWidth/2+pivotRadius,-baseThickness,i*mountingHoleMoveIncrement]){
|
||||
// highlight-end
|
||||
rotate([-90,0,0]){
|
||||
cylinder(r=mountingHoleRadius,h=baseThickness*4);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
<Image img={hole5} style={{backgroundSize: 'contain'}} />
|
||||
|
||||
We subtract `2*mountingHoleEdgeOffset` from the `hingeLength` because we are limiting the amount of space the holes can spread out in, it `2*` the offset because we want that space of both sides, but clearly we don't have a gap on each side yet, but this is just a matter of where the first hole starts, so the last step for our `for` loop is to shift it over a little:
|
||||
|
||||
```cpp
|
||||
module plateHoles() {
|
||||
for(i=[0:mountingHoleCount-1]){
|
||||
translate([
|
||||
baseWidth/2+pivotRadius,
|
||||
-baseThickness,
|
||||
// highlight-next-line
|
||||
i*mountingHoleMoveIncrement+mountingHoleEdgeOffset // <-- add offset
|
||||
]){
|
||||
rotate([-90,0,0]){
|
||||
cylinder(r=mountingHoleRadius,h=baseThickness*4);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
<Image img={hole6} style={{backgroundSize: 'contain'}} />
|
||||
|
||||
Fantastic! now that we have our holes place, we need to use `difference` to actually cut the holes into the part, but where to do it?? We could use difference in both the mail and female parts but that would require doing the same thing twice. The best place to do it is in `hingeBodyHalf` since this module is common to both sides of the hinge:
|
||||
|
||||
```cpp
|
||||
module hingeBodyHalf() {
|
||||
// highlight-start
|
||||
difference() {
|
||||
union() {
|
||||
// highlight-end
|
||||
linear_extrude(hingeHalfExtrudeLength){
|
||||
offset(1)offset(-2)offset(1){
|
||||
translate([0,pivotRadius,0]){
|
||||
circle(pivotRadius);
|
||||
}
|
||||
square([pivotRadius,pivotRadius]);
|
||||
hingeBaseProfile();
|
||||
}
|
||||
}
|
||||
linear_extrude(hingeLength){
|
||||
offset(1)offset(-1)hingeBaseProfile();
|
||||
}
|
||||
}
|
||||
// highlight-next-line
|
||||
plateHoles();
|
||||
}
|
||||
}
|
||||
|
||||
// .. more code
|
||||
|
||||
hingeHalfFemale();
|
||||
hingeHalfMale();
|
||||
```
|
||||
|
||||
We're using `difference` here as planned, but we've also introduced a new operation `union`.
|
||||
`union` allows us to combine shapes into one, which is important here since `difference` works by subtracting the second child from the first and because both of the `linear_extrudes` are children `union` lets us combine them into a single child so that we can subtract `plateHoles`.
|
||||
|
||||
Here's the result!
|
||||
|
||||
<Image img={finishedHinge} style={{backgroundSize: 'contain'}} />
|
||||
70
docs/docs/definitive-beginners/modifiers.mdx
Normal file
@@ -0,0 +1,70 @@
|
||||
---
|
||||
title: Modifiers
|
||||
---
|
||||
|
||||
import Image from '@theme/IdealImage';
|
||||
|
||||
import transparentRotate from '../../static/img/openscad-tutorial/transparent-rotate.png';
|
||||
import difference from '../../static/img/openscad-tutorial/difference.png';
|
||||
import removeArtifact from '../../static/img/openscad-tutorial/remove-artifact.png';
|
||||
|
||||
The reason we're using `rotate` here is because we want to re-orientate our `pin2` to be inside to form a hole, tricky part is that it can be hard to visualise parts that are going to be subtracted from another shape so we're going to use a modifying character `%` for our `hingeBodyHalf`
|
||||
|
||||
```cpp
|
||||
module pin2() {
|
||||
translate([0,pivotRadius,hingeHalfExtrudeLength+tiny]){
|
||||
rotate([0,175,0]){
|
||||
cylinder(h=hingeLength/2+clearance/2, r1=pinRadius, r2=pinRadius+pinTaper);
|
||||
}
|
||||
}
|
||||
}
|
||||
// highlight-next-line
|
||||
%hingeBodyHalf();
|
||||
pin2();
|
||||
```
|
||||
|
||||
<Image img={transparentRotate} style={{backgroundSize: 'contain'}} />
|
||||
|
||||
The `%` character before `hingeBodyHalf()` makes it transparent so that we can see `pin2` within it, and one thing becomes obvious with this view is that a `rotate` of `175` is no right, it needs to be `180`! The `%` character is a "debugging" step, which means it's not going to end up in our final code, it's just helpful in the mean time. There are other characters that can be useful, the full list is
|
||||
|
||||
```xml
|
||||
* disable
|
||||
! show only
|
||||
# highlight / debug
|
||||
% transparent / background
|
||||
```
|
||||
|
||||
To actually make the hole we'll use a `difference` operation like so:
|
||||
|
||||
```cpp
|
||||
module pin2() {
|
||||
translate([0,pivotRadius,hingeHalfExtrudeLength]){
|
||||
rotate([0,180,0]){
|
||||
cylinder(h=hingeLength/2+clearance/2, r1=pinRadius, r2=pinRadius+pinTaper);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// highlight-next-line
|
||||
difference() {
|
||||
hingeBodyHalf();
|
||||
pin2();
|
||||
}
|
||||
```
|
||||
|
||||
<Image img={difference} style={{backgroundSize: 'contain'}} />
|
||||
|
||||
There we, go a hole! The way conceptualise how `difference` works is to think of it as subtracting the second child from the first. "child" simply means nested with `difference` so in the above example `pin2` is the second child that we are subtracting from `hingeBodyHalf`.
|
||||
|
||||
There is one minor annoyance is that the end of the hole looks like it's glitching a little, this can happen in openscad when two surfaces line up.
|
||||
In this case the end of the `hingeBodyHalf` and the start of `pin2`, it only effects the preview and not the 3d STL export, but to make the preview a little nicer in this situations I'll define a variable with a very small value `tiny=0.005;` and add it strategically to resolve this issue, this part is optional but here's where I added it for pin2:
|
||||
|
||||
```cpp
|
||||
module pin2() {
|
||||
translate([0,pivotRadius,hingeHalfExtrudeLength+tiny]){
|
||||
//
|
||||
```
|
||||
|
||||
Fixed!
|
||||
|
||||
<Image img={removeArtifact} style={{backgroundSize: 'contain'}} />
|
||||
154
docs/docs/definitive-beginners/module-arguments.mdx
Normal file
@@ -0,0 +1,154 @@
|
||||
---
|
||||
title: Module Arguments
|
||||
---
|
||||
|
||||
import Image from '@theme/IdealImage';
|
||||
|
||||
import multiRotate from '../../static/img/openscad-tutorial/multi-rotate.png';
|
||||
import bothHalves from '../../static/img/openscad-tutorial/both-halves.png';
|
||||
import exaggeratedClearance from '../../static/img/openscad-tutorial/exaggerated-clearance.png';
|
||||
import transparentAssembly from '../../static/img/openscad-tutorial/transparent-assembly.png';
|
||||
|
||||
Problem still stands that we now have two modules that are almost identical but not quiet, `pin2` was supposed to be temporary.
|
||||
we can resolve this issue by using module arguments, lets start by comparing the two modules.
|
||||
|
||||
```cpp
|
||||
module pin() {
|
||||
translate([0,pivotRadius,hingeHalfExtrudeLength+tiny]){
|
||||
cylinder(h=hingeLength/2+clearance/2, r1=pinRadius, r2=pinRadius+pinTaper);
|
||||
}
|
||||
}
|
||||
|
||||
module pin2() {
|
||||
translate([0,pivotRadius,hingeHalfExtrudeLength+tiny]){
|
||||
rotate([0,180,0]){
|
||||
cylinder(h=hingeLength/2+clearance/2, r1=pinRadius, r2=pinRadius+pinTaper);
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
The only difference between the two is the `rotate` in `pin2`, further if we add a `rotate([0,0,0])` to `pin` it has no effect on the shape but it it does mean now the only difference between the two is the amount the pin is rotated.
|
||||
|
||||
```cpp
|
||||
module pin() {
|
||||
translate([0,pivotRadius,hingeHalfExtrudeLength+tiny]){
|
||||
// highlight-next-line
|
||||
rotate([0,0,0]) {
|
||||
cylinder(h=hingeLength/2+clearance/2, r1=pinRadius, r2=pinRadius+pinTaper);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module pin2() {
|
||||
translate([0,pivotRadius,hingeHalfExtrudeLength+tiny]){
|
||||
rotate([0,180,0]){
|
||||
cylinder(h=hingeLength/2+clearance/2, r1=pinRadius, r2=pinRadius+pinTaper);
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
This is perfect for an argument! What's an argument? Its a value that we can pass into the module instead of having to define it ahead of time, this makes our module more flexible.
|
||||
Here's how we'd modify `pin` to use an argument for the rotation:
|
||||
|
||||
```cpp
|
||||
// highlight-next-line
|
||||
module pin(rotateY) {
|
||||
translate([0,pivotRadius,hingeHalfExtrudeLength+tiny]){
|
||||
// highlight-next-line
|
||||
rotate([0,rotateY,0]) {
|
||||
cylinder(h=hingeLength/2+clearance/2, r1=pinRadius, r2=pinRadius+pinTaper);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pin(0);
|
||||
pin(45);
|
||||
pin(120);
|
||||
```
|
||||
|
||||
<Image img={multiRotate} style={{backgroundSize: 'contain'}} />
|
||||
|
||||
Earlier I said that the syntax was for modules was `module yourName() { /* your code */ }`, lets revise that to `module yourName(yourArguments) { /* your code that uses arguments */ }`.
|
||||
As you can see we're using the argument `rotateY` within `rotate` so that that we can change `pin`'s ordination each time we use it by as demonstrated by using `0`, `45` and `120`.
|
||||
An argument is much like a variable in that we should name it well, the difference is that it's passed to a module and can only be used within the module.
|
||||
Here our code using our new module instead of `pin2`
|
||||
|
||||
```cpp
|
||||
// ... rest of code above
|
||||
module pin(rotateY) {
|
||||
translate([0,pivotRadius,hingeHalfExtrudeLength+tiny]){
|
||||
rotate([0,rotateY,0]) {
|
||||
cylinder(h=hingeLength/2+clearance/2, r1=pinRadius, r2=pinRadius+pinTaper);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
difference() {
|
||||
hingeBodyHalf();
|
||||
// I wouldn't count 180 as a "magic number"
|
||||
// since it's easy to tell it's for a half turn
|
||||
pin(rotateY=180);
|
||||
}
|
||||
```
|
||||
|
||||
And now we can use the pin as both the hole and the shaft, above is the hole, both looks like the following:
|
||||
|
||||
<Image img={bothHalves} style={{backgroundSize: 'contain'}} />
|
||||
|
||||
We're still not done with `pin` though! one more thing. Technically we can use the same module `pin` for the hole and shaft, but practically we can't because we having added any clearance between the two.
|
||||
If we tried to print these together they would print solid.
|
||||
We can fix this with another argument that makes the hole a bit larger:
|
||||
|
||||
```cpp
|
||||
// highlight-next-line
|
||||
module pin(rotateY, radiusOffset) {
|
||||
translate([0,pivotRadius,hingeHalfExtrudeLength+tiny]){
|
||||
rotate([0,rotateY,0]) {
|
||||
cylinder(
|
||||
h=hingeLength/2+clearance/2,
|
||||
// highlight-start
|
||||
r1=pinRadius+radiusOffset,
|
||||
r2=pinRadius+pinTaper+radiusOffset
|
||||
// highlight-end
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
The new argument allows us to increase the radius of the pin, here's an exaggerated example:
|
||||
|
||||
<Image img={exaggeratedClearance} style={{backgroundSize: 'contain'}} />
|
||||
|
||||
That's too much clearance just to demonstrate the principle, in reality we'll use the `clearance` variable that we've already defined with a value of `0.2`. we're ready to put the hinge together now, lets make two modules `hingeHalfMale` and `hingeHalfFemale` which will just be assemblies of modules we've already made.
|
||||
|
||||
```cpp
|
||||
// ... previous module definitions above
|
||||
module hingeHalfFemale() {
|
||||
difference() {
|
||||
hingeBodyHalf();
|
||||
// highlight-next-line
|
||||
pin(rotateY=180, radiusOffset=clearance);
|
||||
}
|
||||
}
|
||||
|
||||
module hingeHalfMale() {
|
||||
translate([0,0,hingeLength]) {
|
||||
rotate([0,180,0]) {
|
||||
hingeBodyHalf();
|
||||
// highlight-next-line
|
||||
pin(rotateY=0, radiusOffset=0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
%hingeHalfFemale(); // make female hinge transparent
|
||||
hingeHalfMale();
|
||||
```
|
||||
|
||||
<Image img={transparentAssembly} style={{backgroundSize: 'contain'}} />
|
||||
|
||||
Well done, it's really coming together (I made the female hinge transparent so we can see how it fits together).
|
||||
The only thing left to do is add mounting holes on the plates.
|
||||
99
docs/docs/definitive-beginners/modules.mdx
Normal file
@@ -0,0 +1,99 @@
|
||||
---
|
||||
title: Modules
|
||||
---
|
||||
|
||||
import Image from '@theme/IdealImage';
|
||||
|
||||
import pivot from '../../static/img/openscad-tutorial/pivot.png';
|
||||
|
||||
Okay so we leave it in both `linear_extrude`s but this leaves us in a situation similar to before we introduced variables, in that we have repeated code that would be difficult to determine why to someone reading our code.
|
||||
Well similar to variables we can also define our own `module`s to associate some code with a name. Here's what it looks like.
|
||||
|
||||
```cpp
|
||||
// highlight-start
|
||||
module hingeBaseProfile() {
|
||||
translate([pivotRadius,0,0]){
|
||||
square([baseWidth,baseThickness]);
|
||||
}
|
||||
}
|
||||
// highlight-end
|
||||
|
||||
linear_extrude(hingeLength/2){
|
||||
offset(1)offset(-2)offset(1){
|
||||
translate([0,pivotRadius,0]){
|
||||
circle(pivotRadius);
|
||||
}
|
||||
square([pivotRadius,pivotRadius]);
|
||||
// highlight-next-line
|
||||
hingeBaseProfile(); // <- used here
|
||||
}
|
||||
}
|
||||
linear_extrude(hingeLength){
|
||||
// highlight-next-line
|
||||
offset(1)offset(-1)hingeBaseProfile(); // <- and here
|
||||
}
|
||||
```
|
||||
|
||||
## Module Syntax
|
||||
|
||||
At the top is the module definition, the syntax here is `module yourName() { /* your code */ }` and then when we want to use it we put parenthesis `()` at the end i.e. `yourName();`.
|
||||
The parenthesis are there because we can also pass arguments to modules which we'll cover soon!
|
||||
|
||||
Now that we know how to use modules, let's wrap everything we've done so far into one, as it's a good way to name and therefore express intent of the code we've written.
|
||||
|
||||
```cpp
|
||||
// ... variables above
|
||||
module hingeBaseProfile() {
|
||||
translate([pivotRadius,0,0]){
|
||||
square([baseWidth,baseThickness]);
|
||||
}
|
||||
}
|
||||
|
||||
module hingeBodyHalf() {
|
||||
linear_extrude(hingeLength/2){
|
||||
offset(1)offset(-2)offset(1){
|
||||
translate([0,pivotRadius,0]){
|
||||
circle(pivotRadius);
|
||||
}
|
||||
square([pivotRadius,pivotRadius]);
|
||||
hingeBaseProfile();
|
||||
}
|
||||
}
|
||||
linear_extrude(hingeLength){
|
||||
offset(1)offset(-1)hingeBaseProfile();
|
||||
}
|
||||
}
|
||||
|
||||
hingeBodyHalf();
|
||||
```
|
||||
|
||||
## 3D Primitives
|
||||
|
||||
Next lets work on the pin, ie. what the other half of the hinge will pivot about.
|
||||
We're going to introduced a new function `cylinder` and to get in good habits lets put this immediately in a module that describes what we're making.
|
||||
|
||||
```cpp
|
||||
// ... other variables above
|
||||
pinRadius=2;
|
||||
pinTaper=0.25;
|
||||
|
||||
// ... other module definitions above
|
||||
// highlight-start
|
||||
module pin() {
|
||||
translate([0,pivotRadius,hingeLength/2]){
|
||||
cylinder(h=hingeLength/2, r1=pinRadius, r2=pinRadius+pinTaper);
|
||||
}
|
||||
}
|
||||
// highlight-end
|
||||
|
||||
hingeBodyHalf();
|
||||
pin();
|
||||
```
|
||||
|
||||
<Image img={pivot} style={{backgroundSize: 'contain'}} />
|
||||
|
||||
A couple notes about the above.
|
||||
|
||||
- `cylinder` is the 3d version of `circle` when `h` for height is the length that we would need to extrude `circle` by. It can also take one or two radii, here we're using two because it allows us to add a taper to the pin. The reason why we want to add a taper is because we're stating to think about the assemble of this hinge and if we taper the pin it means the other half of the hinge will be locked on.
|
||||
- In order to add the taper we've defined two variables `pinRadius` and `pitTaper` when, the latter is extra we add to the second `cylinder` radius.
|
||||
- The `translate` is there move the `cylinder` up so that it's centred with the hinge pivot and along so that it's protruding out of the hinge pivot.
|
||||
111
docs/docs/definitive-beginners/the-basics.mdx
Normal file
@@ -0,0 +1,111 @@
|
||||
---
|
||||
title: The Basics
|
||||
---
|
||||
|
||||
import Image from '@theme/IdealImage';
|
||||
|
||||
import profile from '../../static/img/openscad-tutorial/profile.png';
|
||||
import circleCube from '../../static/img/openscad-tutorial/circle-cube.png';
|
||||
import translate from '../../static/img/openscad-tutorial/translate.png';
|
||||
import unroundedProfile from '../../static/img/openscad-tutorial/unrounded-profile.png';
|
||||
import bigRadius from '../../static/img/openscad-tutorial/big-radius.png';
|
||||
|
||||
## 2D Primitives
|
||||
|
||||
Designing parts in OpenSCAD is a matter of combining shapes and iterating until you get what you want, so with that in mind lets start with this from this perspective focusing just on one half of the hinge, let look at the blue half.
|
||||
|
||||
<Image img={profile} style={{backgroundSize: 'contain'}} />
|
||||
|
||||
We can see at the very least some circles and rectangles will be of use, so lets start there.
|
||||
|
||||
```cpp
|
||||
circle(5);
|
||||
square([15,3]);
|
||||
```
|
||||
|
||||
`circle(5);` gives us a circle with a radius of `5` and `square` is the 2d version of `cube` . Here we've given it dimensions of 15 and 2 for x and y respectively (or width and height if you prefer) .
|
||||
|
||||
<Image img={circleCube} style={{backgroundSize: 'contain'}} />
|
||||
|
||||
## Translate
|
||||
|
||||
It's a start but we need to shift things around a little (I've colored these so we can tell them apart). The cross-hairs represent the origin of the environment and we can see that lines up with the circle's center the corner of the square. Since `5` is the radius of the circle, if want the circle to sit on top of the origin we need to shift it up by the same amount, we do that with `translate` like so:
|
||||
|
||||
```cpp
|
||||
// highlight-next-line
|
||||
translate([0,5,0]){
|
||||
circle(5);
|
||||
}
|
||||
square([15,3]);
|
||||
```
|
||||
|
||||
<Image img={translate} style={{backgroundSize: 'contain'}} />
|
||||
|
||||
`translate` is little different to the modules we've see so far is instead of ending with a semicolon `;` it ends with `{ children }` in the case above it has one child, the `circle`. `tranlates` shifts its children around, we're using it to shift it up by `5`. We put `5` in the second position in the square braces is because we want to shift it along the Y axis, if you're ever not sure which axis you need to shift something just try each until you find the one you're after.
|
||||
|
||||
We also don't want to have the undercut where the circle meets the square, we can fix that with another square so that there's a nice 90 degree transition. Also for reasons we'll get to later, we don't actually want any overlap between these two squares so it will need shift with translate as well. Here's what we're left with:
|
||||
|
||||
```cpp
|
||||
translate([0,5,0]){
|
||||
circle(5);
|
||||
}
|
||||
// highlight-next-line
|
||||
square([5,5]);
|
||||
// highlight-next-line
|
||||
translate([5,0,0]){
|
||||
square([11,2]);
|
||||
}
|
||||
```
|
||||
|
||||
<Image img={unroundedProfile} style={{backgroundSize: 'contain'}} />
|
||||
|
||||
I'm sure you can see the profile of the hinge coming together, that's great, but before we move forward we should quickly reflect on what we've done so far.
|
||||
|
||||
## Variables
|
||||
|
||||
We've written 7 lines and there are 5 module calls and . . . . a bunch of numbers, we have to ask ourselves If we came back to this code in a month would we be able to tell what it's supposed to do?
|
||||
We definitely could, but all of the numbers makes it difficult because it's not easy to tell why each value is that value.
|
||||
|
||||
Have you ever walked into a room only to forget why?
|
||||
You know you came here for a reason but it completely eludes you!? Well reading old code, even only a couple weeks later is a bit like that, you know you put these numbers here for a reason . . .right!
|
||||
|
||||
In programming expressing intent in one of the most important principles for making code understandable and remember what we were doing.
|
||||
Isolated values like the ones in our code so far are commonly called "magic numbers" since we can't tell what they do, they might as well be magical.
|
||||
Luckily this can be solved by variables. Variables are a way of giving a number a name, so that we can reference that same number over and over again.
|
||||
This what it looks like in action.
|
||||
|
||||
```cpp
|
||||
pivotRadius=5;
|
||||
translate([0,pivotRadius,0]){
|
||||
circle(pivotRadius);
|
||||
}
|
||||
square([pivotRadius,pivotRadius]);
|
||||
translate([pivotRadius,0,0]){
|
||||
square([11,2]);
|
||||
}
|
||||
```
|
||||
|
||||
The first line `pivotRadius=5;` is where the variable is assigned, that is the value of `5` is assigned to the name `pivotRadius`, Then we can use it everywhere we need that value.
|
||||
The beauty of this is two fold,
|
||||
|
||||
1) We have now given lots of context about what value of `5` actually means, that it relates to the pivot radius and
|
||||
2) if we ever what to change this value it's easy to just change the first line and the rest will update, for example we can more than double the value and the model stays cohesive, here it is with `pivotRadius=11;`
|
||||
|
||||
<Image img={bigRadius} style={{backgroundSize: 'contain'}} />
|
||||
|
||||
Let's clean up the rest of the magic numbers.
|
||||
|
||||
```cpp
|
||||
pivotRadius=5;
|
||||
baseThickness=3;
|
||||
baseWidth=15;
|
||||
translate([0,pivotRadius,0]){
|
||||
circle(pivotRadius);
|
||||
}
|
||||
square([pivotRadius,pivotRadius]);
|
||||
translate([pivotRadius,0,0]){
|
||||
square([baseWidth,baseThickness]);
|
||||
}
|
||||
```
|
||||
|
||||
There are some exceptions to the "magic number" rule, for example above `0` isn't a "magic number" since this conveys "no value for this axis" quite well.
|
||||
174
docs/docs/definitive-beginners/your-openscad-journey.mdx
Normal file
@@ -0,0 +1,174 @@
|
||||
---
|
||||
title: Your Openscad Journey
|
||||
---
|
||||
|
||||
import Image from '@theme/IdealImage';
|
||||
|
||||
import hinge from '../../static/img/getting-started/complete-hinge.png';
|
||||
import plainCube from '../../static/img/openscad-tutorial/plain-cube.png';
|
||||
import tallCube from '../../static/img/openscad-tutorial/tall-cube.png';
|
||||
|
||||
|
||||
import parametric from '../../static/img/openscad-tutorial/parametric.png';
|
||||
|
||||
Ready to learn some openSCAD!?
|
||||
|
||||
In order to maximise our learning we're actually going to tackle 3 things, that is feed 3 birds with one scone.
|
||||
|
||||
We're going to learn:
|
||||
|
||||
1. The basics programming and the OpenSCAD syntax
|
||||
2. Some best practices so that you can read your own code a couple days after you wrote it
|
||||
3. Get practise designing a real thing with tolerances and all so that you're well equiped to make your next thing
|
||||
|
||||
We're going to achieve that by making this cute print-in-place hinge, print in place means that there will be no assembly step, both parts of the hinge will be printed pre-assembled.
|
||||
|
||||
<Image img={hinge} style={{backgroundSize: 'contain'}} />
|
||||
|
||||
This Tutorial makes no assumption about previous knowledge, which means it fine you you haven't done any programming before, we'll walk you through it.
|
||||
If you have done some programming before and prefer a more concise guide that focuses more on OpenSCAD syntax you might prefer the Definitive OpenSCAD Primer instead.
|
||||
|
||||
If you came here from "getting started" then you would have already got a shape on screen with `cube([10,10,10]);`.
|
||||
If you came from elsewhere, open the OpenSCAD desktop app or go to our online editor, and add `cube([10,10,10]);` to get the following cube:
|
||||
|
||||
<Image img={plainCube} style={{backgroundSize: 'contain'}} />
|
||||
|
||||
OpenSCAD has a number of modules available that allow us to make shapes and cube is one of them.
|
||||
Modules take the form `moduleName(moduleParameters);` or `moduleName(moduleParameters){children}`.
|
||||
Using the `cube` as an example, it take the first form where the moduleName is `cube` and it takes one parameter, though that parameter is an array denoted by the square brackets `[]`, which is basically a series of values.
|
||||
|
||||
Try changes the line to `cube([10,10,20]);`. You should see the cube grow twice as tall as it was previously
|
||||
|
||||
<Image img={tallCube} style={{backgroundSize: 'contain'}} />
|
||||
|
||||
That's because the `[10,10,20]` is giving the cube's dimensions in each axis, the order is `[x, y, z]`, and as we've seen the `z` axis is the vertical axis.
|
||||
|
||||
Before we go any further, now is a good time to mention a couple of principles that you should always keep in mind for OpenSCAD and programming in general
|
||||
|
||||
1. Computers are incredibly stupid, but do exactly what you tell them to do, which means if there's even a small part of code that's incorrect, then OpenSCAD will display errors, it's normal for this to happen often and bears no reflection on your ability to program keep at it! which leads to the next point.
|
||||
2. Never get intimidated, if you don't understand a part of the syntax or code try changing the parameters, see what happens. Playing with the code in this manner is one of the best ways to learn.
|
||||
3. The [OpenSCAD](https://www.openscad.org/cheatsheet/) cheatsheet is very useful as a reference. You should always have it open in a tab.
|
||||
4. There are multiple ways to call these modules, i.e. `cube([10,10,10]); cube(size=[10,10,10]); cube([10,10,10], false);` all have the same result, it depends on if you prefer shorthand or not, to avoid confusion, for this tutorial we'll longhand `argumentName=value` in circumstances where we're using more than one argument, and shorthand if it's only one, i.e. `cube([10,10,10]);` (`[10,10,10]` is considered one value because it a single array).
|
||||
5. Don't worry about units. nominally the units are in the metric millimetre, since that is the standard global engineering unit, but because it exists in virtual space they are effectively unit-less and can be scaled later.
|
||||
6. If you code isn't working, 9 out of 10 times it's because you are missing a semi-colon `;`, all lines apart from ones with curly brace `}` need to end with a semi-colon.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
We'll done, we're done coding and here's the final code in full:
|
||||
|
||||
```cpp
|
||||
baseWidth=15;
|
||||
hingeLength=30;
|
||||
baseThickness=3;
|
||||
pivotRadius=5;
|
||||
pinRadius=2;
|
||||
pinTaper=0.25;
|
||||
mountingHoleRadius=1.5;
|
||||
mountingHoleCount=3;
|
||||
mountingHoleEdgeOffset=4;
|
||||
clearance=0.2;
|
||||
tiny=0.005;
|
||||
|
||||
// calculated values
|
||||
hingeHalfExtrudeLength=hingeLength/2-clearance/2;
|
||||
mountingHoleMoveIncrement=(hingeLength-2*mountingHoleEdgeOffset)/
|
||||
(mountingHoleCount-1);
|
||||
|
||||
// modules
|
||||
module hingeBaseProfile() {
|
||||
translate([pivotRadius,0,0]){
|
||||
square([baseWidth,baseThickness]);
|
||||
}
|
||||
}
|
||||
|
||||
module hingeBodyHalf() {
|
||||
difference() {
|
||||
union() {
|
||||
linear_extrude(hingeHalfExtrudeLength){
|
||||
offset(1)offset(-2)offset(1){
|
||||
translate([0,pivotRadius,0]){
|
||||
circle(pivotRadius);
|
||||
}
|
||||
square([pivotRadius,pivotRadius]);
|
||||
hingeBaseProfile();
|
||||
}
|
||||
}
|
||||
linear_extrude(hingeLength){
|
||||
offset(1)offset(-1)hingeBaseProfile();
|
||||
}
|
||||
}
|
||||
plateHoles();
|
||||
}
|
||||
}
|
||||
|
||||
module pin(rotateY, radiusOffset) {
|
||||
translate([0,pivotRadius,hingeHalfExtrudeLength+tiny]){
|
||||
rotate([0,rotateY,0]) {
|
||||
cylinder(
|
||||
h=hingeLength/2+clearance/2,
|
||||
r1=pinRadius+radiusOffset,
|
||||
r2=pinRadius+pinTaper+radiusOffset
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module hingeHalfFemale() {
|
||||
difference() {
|
||||
hingeBodyHalf();
|
||||
pin(rotateY=180, radiusOffset=clearance);
|
||||
}
|
||||
}
|
||||
|
||||
module hingeHalfMale() {
|
||||
translate([0,0,hingeLength]) {
|
||||
rotate([0,180,0]) {
|
||||
hingeBodyHalf();
|
||||
pin(rotateY=0, radiusOffset=0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module plateHoles() {
|
||||
for(i=[0:mountingHoleCount-1]){
|
||||
translate([
|
||||
baseWidth/2+pivotRadius,
|
||||
-baseThickness,
|
||||
i*mountingHoleMoveIncrement+mountingHoleEdgeOffset
|
||||
]){
|
||||
rotate([-90,0,0]){
|
||||
cylinder(r=mountingHoleRadius,h=baseThickness*4);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// using high-level modules
|
||||
hingeHalfFemale();
|
||||
hingeHalfMale();
|
||||
```
|
||||
|
||||
Lets reflect on what you've achieved
|
||||
|
||||
### Parametric
|
||||
|
||||
By diligently using variables instead of hardcoding values, you have create some code that is not only much easier to read and re-use, but it's now parametric by default, which means we can change the value of the variables and the model adjusts
|
||||
Here are some variations:
|
||||
|
||||
<Image img={parametric} style={{backgroundSize: 'contain'}} />
|
||||
|
||||
### Composed of many small well named modules
|
||||
|
||||
By keeping modules small and making lots of them you've also done a great job of making the code easier to read.
|
||||
|
||||
### Included fillets
|
||||
|
||||
By taking extra steps to add fillets to you part, you've made the part stronger and already puts you head and shoulders above many OpenSCAD designs.
|
||||
|
||||
### Print in place
|
||||
|
||||
You've already tackled clearances for getting parts to fit together or print-in-place.
|
||||
|
||||
Now that you up to speed with openscad you might be interested to learn how to host an OpenSCAD project
|
||||
@@ -1,28 +0,0 @@
|
||||
---
|
||||
title: Getting Started
|
||||
slug: /
|
||||
---
|
||||
|
||||
## Step 1: Generate a new Docusaurus site
|
||||
|
||||
If you haven't already, generate a new Docusaurus site using the classic template:
|
||||
|
||||
```shell
|
||||
npx @docusaurus/init@latest init my-website classic
|
||||
```
|
||||
|
||||
## Step 2: Start your Docusaurus site
|
||||
|
||||
Run the development server in the newly created `my-website` folder:
|
||||
|
||||
```shell
|
||||
cd my-website
|
||||
|
||||
npx docusaurus start
|
||||
```
|
||||
|
||||
Open `docs/getting-started.md` and edit some lines. The site reloads automatically and display your changes.
|
||||
|
||||
## That's it!
|
||||
|
||||
Congratulations! You've successfully run and modified your Docusaurus project.
|
||||
36
docs/docs/getting-started/getting-started.mdx
Normal file
@@ -0,0 +1,36 @@
|
||||
---
|
||||
title: Getting Started
|
||||
slug: /
|
||||
---
|
||||
|
||||
To get started click the "+" button on the top right of CadHub
|
||||
|
||||
import Image from '@theme/IdealImage';
|
||||
import plus from '../../static/img/getting-started/plus.png';
|
||||
import ide from '../../static/img/getting-started/ide.png';
|
||||
import cube from '../../static/img/getting-started/cube.jpg';
|
||||
import hinge from '../../static/img/getting-started/complete-hinge.png';
|
||||
|
||||
|
||||
<Image img={plus} style={{backgroundSize: 'contain', paddingBottom: '2rem'}} />
|
||||
|
||||
|
||||
You should now see the OpenSCAD IDE (integrated development environment)
|
||||
|
||||
<Image img={ide} style={{backgroundSize: 'contain'}} />
|
||||
|
||||
Here we should see the default code in the editor on the left-hand-side, there editor is where we design our CAD parts and we'll cover that more soon. You will also see the result will show up on the right-hand-side along with the console which gives us extra information too. You can click and drag inside the viewer to change the perspective, though the image will only update once you let go of the mouse.
|
||||
|
||||
You can also move the object with with right-click and drag, and scrolling will zoom in and out.
|
||||
|
||||
### What about the editor?
|
||||
|
||||
For that we'll need to learn about the OpenSCAD language. For now, try replacing all of the existing code with `cube([10,10,10]);` and then hit ctrl+s to tell CadHub to render a new image. You should see a cube appear!
|
||||
|
||||
<Image img={cube} style={{backgroundSize: 'contain'}} />
|
||||
|
||||
Don't worry if you don't understand the specifics of what happen here, we'll give you the whole run down next in our introductory tutorial, where you'll learn the basics of OpenSCAD by making a hinge.
|
||||
|
||||
<Image img={hinge} style={{backgroundSize: 'contain'}} />
|
||||
|
||||
Already familiar with OpenSCAD? no worries, you can skip ahead to learn more about how to host a OpenSCAD project on CadHub
|
||||
@@ -1,128 +0,0 @@
|
||||
---
|
||||
title: Markdown Features
|
||||
---
|
||||
|
||||
Docusaurus supports the [Markdown](https://daringfireball.net/projects/markdown/syntax) syntax and has some additional features.
|
||||
|
||||
## Front Matter
|
||||
|
||||
Markdown documents can have associated metadata at the top called [Front Matter](https://jekyllrb.com/docs/front-matter/):
|
||||
|
||||
```md
|
||||
---
|
||||
id: my-doc
|
||||
title: My document title
|
||||
description: My document description
|
||||
sidebar_label: My doc
|
||||
---
|
||||
|
||||
Markdown content
|
||||
```
|
||||
|
||||
## Markdown links
|
||||
|
||||
Regular Markdown links are supported using url paths or relative file paths.
|
||||
|
||||
```md
|
||||
Let's see how to [Create a page](/create-a-page).
|
||||
```
|
||||
|
||||
```md
|
||||
Let's see how to [Create a page](./create-a-page.md).
|
||||
```
|
||||
|
||||
Let's see how to [Create a page](./create-a-page.md).
|
||||
|
||||
## Markdown images
|
||||
|
||||
Regular Markdown images are supported.
|
||||
|
||||
Add an image at `static/img/docusaurus.png` and use this Markdown declaration:
|
||||
|
||||
```md
|
||||

|
||||
```
|
||||
|
||||

|
||||
|
||||
## Code Blocks
|
||||
|
||||
Markdown code blocks are supported with Syntax highlighting.
|
||||
|
||||
```jsx title="src/components/HelloDocusaurus.js"
|
||||
function HelloDocusaurus() {
|
||||
return (
|
||||
<h1>Hello, Docusaurus!</h1>
|
||||
)
|
||||
}
|
||||
```
|
||||
|
||||
```jsx title="src/components/HelloDocusaurus.js"
|
||||
function HelloDocusaurus() {
|
||||
return <h1>Hello, Docusaurus!</h1>;
|
||||
}
|
||||
```
|
||||
|
||||
## Admonitions
|
||||
|
||||
Docusaurus has a special syntax to create admonitions and callouts:
|
||||
|
||||
:::tip My tip
|
||||
|
||||
Use this awesome feature option
|
||||
|
||||
:::
|
||||
|
||||
:::danger Take care
|
||||
|
||||
This action is dangerous
|
||||
|
||||
:::
|
||||
|
||||
:::tip My tip
|
||||
|
||||
Use this awesome feature option
|
||||
|
||||
:::
|
||||
|
||||
:::danger Take care
|
||||
|
||||
This action is dangerous
|
||||
|
||||
:::
|
||||
|
||||
## React components
|
||||
|
||||
Thanks to [MDX](https://mdxjs.com/), you can make your doc more interactive and use React components inside Markdown:
|
||||
|
||||
```jsx
|
||||
export const Highlight = ({children, color}) => (
|
||||
<span
|
||||
style={{
|
||||
backgroundColor: color,
|
||||
borderRadius: '2px',
|
||||
color: 'red',
|
||||
padding: '0.2rem',
|
||||
}}>
|
||||
{children}
|
||||
</span>
|
||||
);
|
||||
|
||||
<Highlight color="#25c2a0">Docusaurus green</Highlight> and <Highlight color="#1877F2">Facebook blue</Highlight> are my favorite colors.
|
||||
```
|
||||
|
||||
export const Highlight = ({children, color}) => (
|
||||
<span
|
||||
style={{
|
||||
backgroundColor: color,
|
||||
borderRadius: '2px',
|
||||
color: '#fff',
|
||||
padding: '0.2rem',
|
||||
}}>
|
||||
{children}
|
||||
</span>
|
||||
);
|
||||
|
||||
<Highlight color="#25c2a0">Docusaurus green</Highlight> and <Highlight color="#1877F2">
|
||||
Facebook blue
|
||||
</Highlight> are my favorite colors.
|
||||
@@ -1,17 +0,0 @@
|
||||
---
|
||||
title: Thank you!
|
||||
---
|
||||
|
||||
Congratulations on making it this far!
|
||||
|
||||
You have learned the **basics of Docusaurus** and made some changes to the **initial template**.
|
||||
|
||||
But Docusaurus has **much more to offer**!
|
||||
|
||||
## What's next?
|
||||
|
||||
- [Read the official documentation](https://v2.docusaurus.io/).
|
||||
- [Design and Layout your Docusaurus site](https://v2.docusaurus.io/docs/styling-layout)
|
||||
- [Integrate a search bar into your site](https://v2.docusaurus.io/docs/search)
|
||||
- [Find inspirations in Docusaurus showcase](https://v2.docusaurus.io/showcase)
|
||||
- [Get involved in the Docusaurus Community](https://v2.docusaurus.io/community/support)
|
||||
8
docs/docs/why-code-cad.mdx
Normal file
@@ -0,0 +1,8 @@
|
||||
---
|
||||
title: Why OpenSCAD
|
||||
---
|
||||
|
||||
## Code CAD
|
||||
|
||||
OpenSCAD is a Code-CAD, which means models are made from a code script rather than from a series of clicks in a user interface.
|
||||
If you want an un-bias opinion on if this is a good paradigm you'll have to look elsewhere because CadHub are massive advocates for it.
|
||||
@@ -1,14 +1,15 @@
|
||||
/** @type {import('@docusaurus/types').DocusaurusConfig} */
|
||||
module.exports = {
|
||||
title: 'My Site',
|
||||
tagline: 'The tagline of my site',
|
||||
tagline: 'Pushing the advent of CodeCad',
|
||||
url: 'https://your-docusaurus-test-site.com',
|
||||
baseUrl: '/',
|
||||
onBrokenLinks: 'throw',
|
||||
onBrokenMarkdownLinks: 'warn',
|
||||
favicon: 'img/favicon.ico',
|
||||
organizationName: 'facebook', // Usually your GitHub org/user name.
|
||||
projectName: 'docusaurus', // Usually your repo name.
|
||||
organizationName: 'IrevDev', // Usually your GitHub org/user name.
|
||||
projectName: 'Cadhub', // Usually your repo name.
|
||||
plugins: ['@docusaurus/plugin-ideal-image'],
|
||||
themeConfig: {
|
||||
navbar: {
|
||||
title: 'My Site',
|
||||
@@ -23,9 +24,9 @@ module.exports = {
|
||||
label: 'Docs',
|
||||
position: 'left',
|
||||
},
|
||||
{to: 'blog', label: 'Blog', position: 'left'},
|
||||
{ to: 'blog', label: 'Blog', position: 'left' },
|
||||
{
|
||||
href: 'https://github.com/facebook/docusaurus',
|
||||
href: 'https://github.com/Irev-Dev/cadhub',
|
||||
label: 'GitHub',
|
||||
position: 'right',
|
||||
},
|
||||
@@ -47,16 +48,16 @@ module.exports = {
|
||||
title: 'Community',
|
||||
items: [
|
||||
{
|
||||
label: 'Stack Overflow',
|
||||
href: 'https://stackoverflow.com/questions/tagged/docusaurus',
|
||||
label: 'Road Map',
|
||||
href: 'https://github.com/Irev-Dev/cadhub/discussions/212',
|
||||
},
|
||||
{
|
||||
label: 'Discord',
|
||||
href: 'https://discordapp.com/invite/docusaurus',
|
||||
href: 'https://discord.gg/SD7zFRNjGH',
|
||||
},
|
||||
{
|
||||
label: 'Twitter',
|
||||
href: 'https://twitter.com/docusaurus',
|
||||
href: 'https://twitter.com/IrevDev',
|
||||
},
|
||||
],
|
||||
},
|
||||
@@ -69,12 +70,12 @@ module.exports = {
|
||||
},
|
||||
{
|
||||
label: 'GitHub',
|
||||
href: 'https://github.com/facebook/docusaurus',
|
||||
href: 'https://github.com/Irev-Dev/cadhub',
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
copyright: `Copyright © ${new Date().getFullYear()} My Project, Inc. Built with Docusaurus.`,
|
||||
copyright: `Copyright © ${new Date().getFullYear()} Kurt Hutten. Built with Docusaurus.`,
|
||||
},
|
||||
},
|
||||
presets: [
|
||||
@@ -83,13 +84,11 @@ module.exports = {
|
||||
{
|
||||
docs: {
|
||||
sidebarPath: require.resolve('./sidebars.js'),
|
||||
// Please change this to your repo.
|
||||
editUrl:
|
||||
'https://github.com/facebook/docusaurus/edit/master/website/',
|
||||
},
|
||||
blog: {
|
||||
showReadingTime: true,
|
||||
// Please change this to your repo.
|
||||
editUrl:
|
||||
'https://github.com/facebook/docusaurus/edit/master/website/blog/',
|
||||
},
|
||||
@@ -99,4 +98,4 @@ module.exports = {
|
||||
},
|
||||
],
|
||||
],
|
||||
};
|
||||
}
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@docusaurus/core": "2.0.0-alpha.72",
|
||||
"@docusaurus/plugin-ideal-image": "^2.0.0-alpha.72",
|
||||
"@docusaurus/preset-classic": "2.0.0-alpha.72",
|
||||
"@mdx-js/react": "^1.6.21",
|
||||
"clsx": "^1.1.1",
|
||||
@@ -33,4 +34,4 @@
|
||||
"last 1 safari version"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,16 +1,26 @@
|
||||
module.exports = {
|
||||
docs: [
|
||||
'getting-started/getting-started',
|
||||
'why-code-cad',
|
||||
{
|
||||
type: 'category',
|
||||
label: 'Docusaurus Tutorial',
|
||||
label: 'Definitive OpenSCAD Tutorial for Beginners',
|
||||
items: [
|
||||
'getting-started',
|
||||
'create-a-page',
|
||||
'create-a-document',
|
||||
'create-a-blog-post',
|
||||
'markdown-features',
|
||||
'thank-you',
|
||||
'definitive-beginners/your-openscad-journey',
|
||||
'definitive-beginners/the-basics',
|
||||
'definitive-beginners/adding-fillets',
|
||||
'definitive-beginners/extruding-2d-shapes',
|
||||
'definitive-beginners/modules',
|
||||
'definitive-beginners/adding-clearances',
|
||||
'definitive-beginners/modifiers',
|
||||
'definitive-beginners/module-arguments',
|
||||
'definitive-beginners/loops',
|
||||
// {
|
||||
// type: 'category',
|
||||
// label: 'OpenSCAD tutorial',
|
||||
// items: ['create-a-page'],
|
||||
// },
|
||||
],
|
||||
},
|
||||
],
|
||||
};
|
||||
}
|
||||
|
||||
BIN
docs/static/img/getting-started/complete-hinge.png
vendored
Normal file
|
After Width: | Height: | Size: 112 KiB |
BIN
docs/static/img/getting-started/cube.jpg
vendored
Normal file
|
After Width: | Height: | Size: 168 KiB |
BIN
docs/static/img/getting-started/ide.png
vendored
Normal file
|
After Width: | Height: | Size: 321 KiB |
BIN
docs/static/img/getting-started/plus.png
vendored
Normal file
|
After Width: | Height: | Size: 194 KiB |
BIN
docs/static/img/openscad-tutorial/big-radius.png
vendored
Normal file
|
After Width: | Height: | Size: 35 KiB |
BIN
docs/static/img/openscad-tutorial/both-halves.png
vendored
Normal file
|
After Width: | Height: | Size: 478 KiB |
BIN
docs/static/img/openscad-tutorial/circle-cube.png
vendored
Normal file
|
After Width: | Height: | Size: 37 KiB |
BIN
docs/static/img/openscad-tutorial/clearance-pivot.png
vendored
Normal file
|
After Width: | Height: | Size: 75 KiB |
BIN
docs/static/img/openscad-tutorial/difference-markup.png
vendored
Normal file
|
After Width: | Height: | Size: 558 KiB |
BIN
docs/static/img/openscad-tutorial/difference.png
vendored
Normal file
|
After Width: | Height: | Size: 130 KiB |
BIN
docs/static/img/openscad-tutorial/exaggerated-clearance.png
vendored
Normal file
|
After Width: | Height: | Size: 533 KiB |
BIN
docs/static/img/openscad-tutorial/extrude.png
vendored
Normal file
|
After Width: | Height: | Size: 57 KiB |
BIN
docs/static/img/openscad-tutorial/extrude2.png
vendored
Normal file
|
After Width: | Height: | Size: 77 KiB |
BIN
docs/static/img/openscad-tutorial/finished-hinge.png
vendored
Normal file
|
After Width: | Height: | Size: 160 KiB |
BIN
docs/static/img/openscad-tutorial/hole1.png
vendored
Normal file
|
After Width: | Height: | Size: 128 KiB |
BIN
docs/static/img/openscad-tutorial/hole2.png
vendored
Normal file
|
After Width: | Height: | Size: 168 KiB |
BIN
docs/static/img/openscad-tutorial/hole3.png
vendored
Normal file
|
After Width: | Height: | Size: 180 KiB |
BIN
docs/static/img/openscad-tutorial/hole4.png
vendored
Normal file
|
After Width: | Height: | Size: 218 KiB |
BIN
docs/static/img/openscad-tutorial/hole5.png
vendored
Normal file
|
After Width: | Height: | Size: 159 KiB |
BIN
docs/static/img/openscad-tutorial/hole6.png
vendored
Normal file
|
After Width: | Height: | Size: 150 KiB |
BIN
docs/static/img/openscad-tutorial/multi-rotate.png
vendored
Normal file
|
After Width: | Height: | Size: 64 KiB |
BIN
docs/static/img/openscad-tutorial/no-fillet.png
vendored
Normal file
|
After Width: | Height: | Size: 306 KiB |
BIN
docs/static/img/openscad-tutorial/offset1.png
vendored
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
docs/static/img/openscad-tutorial/offset2.png
vendored
Normal file
|
After Width: | Height: | Size: 23 KiB |
BIN
docs/static/img/openscad-tutorial/offset3.png
vendored
Normal file
|
After Width: | Height: | Size: 180 KiB |
BIN
docs/static/img/openscad-tutorial/parametric.png
vendored
Normal file
|
After Width: | Height: | Size: 964 KiB |
BIN
docs/static/img/openscad-tutorial/pivot-gap.png
vendored
Normal file
|
After Width: | Height: | Size: 79 KiB |
BIN
docs/static/img/openscad-tutorial/pivot.png
vendored
Normal file
|
After Width: | Height: | Size: 168 KiB |
BIN
docs/static/img/openscad-tutorial/plain-cube.png
vendored
Normal file
|
After Width: | Height: | Size: 33 KiB |
BIN
docs/static/img/openscad-tutorial/profile.png
vendored
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
docs/static/img/openscad-tutorial/read-scad.png
vendored
Normal file
|
After Width: | Height: | Size: 246 KiB |
BIN
docs/static/img/openscad-tutorial/remove-artifact.png
vendored
Normal file
|
After Width: | Height: | Size: 26 KiB |
BIN
docs/static/img/openscad-tutorial/rotate.png
vendored
Normal file
|
After Width: | Height: | Size: 74 KiB |
BIN
docs/static/img/openscad-tutorial/tall-cube.png
vendored
Normal file
|
After Width: | Height: | Size: 36 KiB |
BIN
docs/static/img/openscad-tutorial/translate.png
vendored
Normal file
|
After Width: | Height: | Size: 39 KiB |
BIN
docs/static/img/openscad-tutorial/transparent-assembly.png
vendored
Normal file
|
After Width: | Height: | Size: 158 KiB |
BIN
docs/static/img/openscad-tutorial/transparent-rotate.png
vendored
Normal file
|
After Width: | Height: | Size: 97 KiB |
BIN
docs/static/img/openscad-tutorial/unrounded-profile.png
vendored
Normal file
|
After Width: | Height: | Size: 40 KiB |
@@ -5,6 +5,9 @@
|
||||
"api",
|
||||
"web",
|
||||
"docs"
|
||||
],
|
||||
"nohoist": [
|
||||
"docs/**"
|
||||
]
|
||||
},
|
||||
"scripts": {},
|
||||
|
||||
506
yarn.lock
@@ -1482,6 +1482,17 @@
|
||||
postcss "^7.0.2"
|
||||
postcss-sort-media-queries "^1.7.26"
|
||||
|
||||
"@docusaurus/lqip-loader@2.0.0-alpha.72":
|
||||
version "2.0.0-alpha.72"
|
||||
resolved "https://registry.yarnpkg.com/@docusaurus/lqip-loader/-/lqip-loader-2.0.0-alpha.72.tgz#fbc5423d96e12468fff71a91738d14013460bda5"
|
||||
integrity sha512-d3Kl/W0ydUdqwcJrA26HBPewodKGCXNGua8Tx/XmXi+VLbuDkYixPzXCopP/Ew748gJonHkUG93GzzNmapQKaA==
|
||||
dependencies:
|
||||
file-loader "^6.2.0"
|
||||
loader-utils "^1.2.3"
|
||||
lodash "^4.17.20"
|
||||
node-vibrant "^3.1.5"
|
||||
sharp "^0.27.1"
|
||||
|
||||
"@docusaurus/mdx-loader@2.0.0-alpha.72":
|
||||
version "2.0.0-alpha.72"
|
||||
resolved "https://registry.yarnpkg.com/@docusaurus/mdx-loader/-/mdx-loader-2.0.0-alpha.72.tgz#03369c9fc156318a4696ece15b65b78f8ba727d0"
|
||||
@@ -1593,6 +1604,20 @@
|
||||
dependencies:
|
||||
"@docusaurus/core" "2.0.0-alpha.72"
|
||||
|
||||
"@docusaurus/plugin-ideal-image@^2.0.0-alpha.72":
|
||||
version "2.0.0-alpha.72"
|
||||
resolved "https://registry.yarnpkg.com/@docusaurus/plugin-ideal-image/-/plugin-ideal-image-2.0.0-alpha.72.tgz#3a01d019f939b2881660497791c1723229e85c45"
|
||||
integrity sha512-kXV7bmaRlLH7or5cu6XO8VlljULlAOArmtxicgmzfGhg1QMBD+DK1N4DY+ea7jt/urn3VSbQ0I+dHkGQ/nRFHQ==
|
||||
dependencies:
|
||||
"@docusaurus/core" "2.0.0-alpha.72"
|
||||
"@docusaurus/lqip-loader" "2.0.0-alpha.72"
|
||||
"@docusaurus/types" "2.0.0-alpha.72"
|
||||
"@endiliey/react-ideal-image" "^0.0.11"
|
||||
"@endiliey/responsive-loader" "^1.3.2"
|
||||
react-waypoint "^9.0.2"
|
||||
sharp "^0.27.1"
|
||||
webpack "^4.44.1"
|
||||
|
||||
"@docusaurus/plugin-sitemap@2.0.0-alpha.72":
|
||||
version "2.0.0-alpha.72"
|
||||
resolved "https://registry.yarnpkg.com/@docusaurus/plugin-sitemap/-/plugin-sitemap-2.0.0-alpha.72.tgz#6ad55c894c19315c91847d17f0c9dcfb145132f8"
|
||||
@@ -1832,6 +1857,18 @@
|
||||
resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.2.5.tgz#8eed982e2ee6f7f4e44c253e12962980791efd46"
|
||||
integrity sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA==
|
||||
|
||||
"@endiliey/react-ideal-image@^0.0.11":
|
||||
version "0.0.11"
|
||||
resolved "https://registry.yarnpkg.com/@endiliey/react-ideal-image/-/react-ideal-image-0.0.11.tgz#dc3803d04e1409cf88efa4bba0f67667807bdf27"
|
||||
integrity sha512-QxMjt/Gvur/gLxSoCy7VIyGGGrGmDN+VHcXkN3R2ApoWX0EYUE+hMgPHSW/PV6VVebZ1Nd4t2UnGRBDihu16JQ==
|
||||
|
||||
"@endiliey/responsive-loader@^1.3.2":
|
||||
version "1.3.2"
|
||||
resolved "https://registry.yarnpkg.com/@endiliey/responsive-loader/-/responsive-loader-1.3.2.tgz#b9276747293b57c1ae9df59c6f5bec7624b157b7"
|
||||
integrity sha512-j77koHZIW8L6s7kw/VdZhORamdP7laW4+Gcu7Ddt7iRSXniADDk9HtKUZrBXC90hMYo+Kb4XdlqMizvMI8JGrA==
|
||||
dependencies:
|
||||
loader-utils "^1.2.3"
|
||||
|
||||
"@endiliey/static-site-generator-webpack-plugin@^4.0.0":
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/@endiliey/static-site-generator-webpack-plugin/-/static-site-generator-webpack-plugin-4.0.0.tgz#94bfe58fd83aeda355de797fcb5112adaca3a6b1"
|
||||
@@ -2106,6 +2143,105 @@
|
||||
"@types/yargs" "^15.0.0"
|
||||
chalk "^4.0.0"
|
||||
|
||||
"@jimp/bmp@^0.16.1":
|
||||
version "0.16.1"
|
||||
resolved "https://registry.yarnpkg.com/@jimp/bmp/-/bmp-0.16.1.tgz#6e2da655b2ba22e721df0795423f34e92ef13768"
|
||||
integrity sha512-iwyNYQeBawrdg/f24x3pQ5rEx+/GwjZcCXd3Kgc+ZUd+Ivia7sIqBsOnDaMZdKCBPlfW364ekexnlOqyVa0NWg==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.7.2"
|
||||
"@jimp/utils" "^0.16.1"
|
||||
bmp-js "^0.1.0"
|
||||
|
||||
"@jimp/core@^0.16.1":
|
||||
version "0.16.1"
|
||||
resolved "https://registry.yarnpkg.com/@jimp/core/-/core-0.16.1.tgz#68c4288f6ef7f31a0f6b859ba3fb28dae930d39d"
|
||||
integrity sha512-la7kQia31V6kQ4q1kI/uLimu8FXx7imWVajDGtwUG8fzePLWDFJyZl0fdIXVCL1JW2nBcRHidUot6jvlRDi2+g==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.7.2"
|
||||
"@jimp/utils" "^0.16.1"
|
||||
any-base "^1.1.0"
|
||||
buffer "^5.2.0"
|
||||
exif-parser "^0.1.12"
|
||||
file-type "^9.0.0"
|
||||
load-bmfont "^1.3.1"
|
||||
mkdirp "^0.5.1"
|
||||
phin "^2.9.1"
|
||||
pixelmatch "^4.0.2"
|
||||
tinycolor2 "^1.4.1"
|
||||
|
||||
"@jimp/custom@^0.16.1":
|
||||
version "0.16.1"
|
||||
resolved "https://registry.yarnpkg.com/@jimp/custom/-/custom-0.16.1.tgz#28b659c59e20a1d75a0c46067bd3f4bd302cf9c5"
|
||||
integrity sha512-DNUAHNSiUI/j9hmbatD6WN/EBIyeq4AO0frl5ETtt51VN1SvE4t4v83ZA/V6ikxEf3hxLju4tQ5Pc3zmZkN/3A==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.7.2"
|
||||
"@jimp/core" "^0.16.1"
|
||||
|
||||
"@jimp/gif@^0.16.1":
|
||||
version "0.16.1"
|
||||
resolved "https://registry.yarnpkg.com/@jimp/gif/-/gif-0.16.1.tgz#d1f7c3a58f4666482750933af8b8f4666414f3ca"
|
||||
integrity sha512-r/1+GzIW1D5zrP4tNrfW+3y4vqD935WBXSc8X/wm23QTY9aJO9Lw6PEdzpYCEY+SOklIFKaJYUAq/Nvgm/9ryw==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.7.2"
|
||||
"@jimp/utils" "^0.16.1"
|
||||
gifwrap "^0.9.2"
|
||||
omggif "^1.0.9"
|
||||
|
||||
"@jimp/jpeg@^0.16.1":
|
||||
version "0.16.1"
|
||||
resolved "https://registry.yarnpkg.com/@jimp/jpeg/-/jpeg-0.16.1.tgz#3b7bb08a4173f2f6d81f3049b251df3ee2ac8175"
|
||||
integrity sha512-8352zrdlCCLFdZ/J+JjBslDvml+fS3Z8gttdml0We759PnnZGqrnPRhkOEOJbNUlE+dD4ckLeIe6NPxlS/7U+w==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.7.2"
|
||||
"@jimp/utils" "^0.16.1"
|
||||
jpeg-js "0.4.2"
|
||||
|
||||
"@jimp/plugin-resize@^0.16.1":
|
||||
version "0.16.1"
|
||||
resolved "https://registry.yarnpkg.com/@jimp/plugin-resize/-/plugin-resize-0.16.1.tgz#65e39d848ed13ba2d6c6faf81d5d590396571d10"
|
||||
integrity sha512-u4JBLdRI7dargC04p2Ha24kofQBk3vhaf0q8FwSYgnCRwxfvh2RxvhJZk9H7Q91JZp6wgjz/SjvEAYjGCEgAwQ==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.7.2"
|
||||
"@jimp/utils" "^0.16.1"
|
||||
|
||||
"@jimp/png@^0.16.1":
|
||||
version "0.16.1"
|
||||
resolved "https://registry.yarnpkg.com/@jimp/png/-/png-0.16.1.tgz#f24cfc31529900b13a2dd9d4fdb4460c1e4d814e"
|
||||
integrity sha512-iyWoCxEBTW0OUWWn6SveD4LePW89kO7ZOy5sCfYeDM/oTPLpR8iMIGvZpZUz1b8kvzFr27vPst4E5rJhGjwsdw==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.7.2"
|
||||
"@jimp/utils" "^0.16.1"
|
||||
pngjs "^3.3.3"
|
||||
|
||||
"@jimp/tiff@^0.16.1":
|
||||
version "0.16.1"
|
||||
resolved "https://registry.yarnpkg.com/@jimp/tiff/-/tiff-0.16.1.tgz#0e8756695687d7574b6bc73efab0acd4260b7a12"
|
||||
integrity sha512-3K3+xpJS79RmSkAvFMgqY5dhSB+/sxhwTFA9f4AVHUK0oKW+u6r52Z1L0tMXHnpbAdR9EJ+xaAl2D4x19XShkQ==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.7.2"
|
||||
utif "^2.0.1"
|
||||
|
||||
"@jimp/types@^0.16.1":
|
||||
version "0.16.1"
|
||||
resolved "https://registry.yarnpkg.com/@jimp/types/-/types-0.16.1.tgz#0dbab37b3202315c91010f16c31766d35a2322cc"
|
||||
integrity sha512-g1w/+NfWqiVW4CaXSJyD28JQqZtm2eyKMWPhBBDCJN9nLCN12/Az0WFF3JUAktzdsEC2KRN2AqB1a2oMZBNgSQ==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.7.2"
|
||||
"@jimp/bmp" "^0.16.1"
|
||||
"@jimp/gif" "^0.16.1"
|
||||
"@jimp/jpeg" "^0.16.1"
|
||||
"@jimp/png" "^0.16.1"
|
||||
"@jimp/tiff" "^0.16.1"
|
||||
timm "^1.6.1"
|
||||
|
||||
"@jimp/utils@^0.16.1":
|
||||
version "0.16.1"
|
||||
resolved "https://registry.yarnpkg.com/@jimp/utils/-/utils-0.16.1.tgz#2f51e6f14ff8307c4aa83d5e1a277da14a9fe3f7"
|
||||
integrity sha512-8fULQjB0x4LzUSiSYG6ZtQl355sZjxbv8r9PPAuYHzS9sGiSHJQavNqK/nKnpDsVkU88/vRGcE7t3nMU0dEnVw==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.7.2"
|
||||
regenerator-runtime "^0.13.3"
|
||||
|
||||
"@josephg/resolvable@^1.0.0":
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/@josephg/resolvable/-/resolvable-1.0.0.tgz#cd75b09cfad18cd945de9221d403203aa07e3d0a"
|
||||
@@ -3831,6 +3967,11 @@
|
||||
resolved "https://registry.yarnpkg.com/@types/line-column/-/line-column-1.0.0.tgz#fa5a59c21e885fef3739a273b43dacf55b63437f"
|
||||
integrity sha512-wbw+IDRw/xY/RGy+BL6f4Eey4jsUgHQrMuA4Qj0CSG3x/7C2Oc57pmRoM2z3M4DkylWRz+G1pfX06sCXQm0J+w==
|
||||
|
||||
"@types/lodash@^4.14.53":
|
||||
version "4.14.168"
|
||||
resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.168.tgz#fe24632e79b7ade3f132891afff86caa5e5ce008"
|
||||
integrity sha512-oVfRvqHV/V6D1yifJbVRU3TMp8OT6o6BG+U9MkwuJ3U8/CsDHvalRpsxBqivn71ztOFZBTfJMvETbqHiaNSj7Q==
|
||||
|
||||
"@types/long@^4.0.0":
|
||||
version "4.0.1"
|
||||
resolved "https://registry.yarnpkg.com/@types/long/-/long-4.0.1.tgz#459c65fa1867dafe6a8f322c4c51695663cc55e9"
|
||||
@@ -3893,11 +4034,21 @@
|
||||
resolved "https://registry.yarnpkg.com/@types/node/-/node-10.17.59.tgz#03f440ccf746a27f7da6e141e6cbae64681dbd2f"
|
||||
integrity sha512-7Uc8IRrL8yZz5ti45RaFxpbU8TxlzdC3HvxV+hOWo1EyLsuKv/w7y0n+TwZzwL3vdx3oZ2k3ubxPq131hNtXyg==
|
||||
|
||||
"@types/node@^14.0.10", "@types/node@^14.14.28", "@types/node@^14.6.0":
|
||||
"@types/node@^10.11.7":
|
||||
version "10.17.56"
|
||||
resolved "https://registry.yarnpkg.com/@types/node/-/node-10.17.56.tgz#010c9e047c3ff09ddcd11cbb6cf5912725cdc2b3"
|
||||
integrity sha512-LuAa6t1t0Bfw4CuSR0UITsm1hP17YL+u82kfHGrHUWdhlBtH7sa7jGY5z7glGaIj/WDYDkRtgGd+KCjCzxBW1w==
|
||||
|
||||
"@types/node@^14.0.10", "@types/node@^14.6.0":
|
||||
version "14.14.43"
|
||||
resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.43.tgz#26bcbb0595b305400e8ceaf9a127a7f905ae49c8"
|
||||
integrity sha512-3pwDJjp1PWacPTpH0LcfhgjvurQvrZFBrC6xxjaUEZ7ifUtT32jtjPxEMMblpqd2Mvx+k8haqQJLQxolyGN/cQ==
|
||||
|
||||
"@types/node@^14.14.28":
|
||||
version "14.14.37"
|
||||
resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.37.tgz#a3dd8da4eb84a996c36e331df98d82abd76b516e"
|
||||
integrity sha512-XYmBiy+ohOR4Lh5jE379fV2IU+6Jn4g5qASinhitfyO71b/sCo6MKsMLF5tc7Zf2CE8hViVQyYSobJNke8OvUw==
|
||||
|
||||
"@types/normalize-package-data@^2.4.0":
|
||||
version "2.4.0"
|
||||
resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e"
|
||||
@@ -4654,6 +4805,11 @@ ansi-to-html@^0.6.11:
|
||||
dependencies:
|
||||
entities "^1.1.2"
|
||||
|
||||
any-base@^1.1.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/any-base/-/any-base-1.1.0.tgz#ae101a62bc08a597b4c9ab5b7089d456630549fe"
|
||||
integrity sha512-uMgjozySS8adZZYePpaWs8cxB9/kdzmpX6SgJZ+wbz1K5eYk5QMYDVJaZKhxyIHUdnnJkfR7SVgStgH7LkGUyg==
|
||||
|
||||
any-observable@^0.3.0:
|
||||
version "0.3.0"
|
||||
resolved "https://registry.yarnpkg.com/any-observable/-/any-observable-0.3.0.tgz#af933475e5806a67d0d7df090dd5e8bef65d119b"
|
||||
@@ -4941,6 +5097,11 @@ array-flatten@^2.1.0:
|
||||
resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099"
|
||||
integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==
|
||||
|
||||
array-flatten@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-3.0.0.tgz#6428ca2ee52c7b823192ec600fa3ed2f157cd541"
|
||||
integrity sha512-zPMVc3ZYlGLNk4mpK1NzP2wg0ml9t7fUgDsayR5Y5rSzxQilzR9FGu/EH2jQOcKSAeAfWeylyW8juy3OkWRvNA==
|
||||
|
||||
array-includes@^3.0.3, array-includes@^3.1.1, array-includes@^3.1.2, array-includes@^3.1.3:
|
||||
version "3.1.3"
|
||||
resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.3.tgz#c7f619b382ad2afaf5326cddfdc0afc61af7690a"
|
||||
@@ -5558,6 +5719,11 @@ bluebird@^3.3.5, bluebird@^3.5.5, bluebird@^3.7.1:
|
||||
resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f"
|
||||
integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==
|
||||
|
||||
bmp-js@^0.1.0:
|
||||
version "0.1.0"
|
||||
resolved "https://registry.yarnpkg.com/bmp-js/-/bmp-js-0.1.0.tgz#e05a63f796a6c1ff25f4771ec7adadc148c07233"
|
||||
integrity sha1-4Fpj95amwf8l9Hcex62twUjAcjM=
|
||||
|
||||
bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.9:
|
||||
version "4.12.0"
|
||||
resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88"
|
||||
@@ -5769,6 +5935,11 @@ buffer-equal-constant-time@1.0.1:
|
||||
resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819"
|
||||
integrity sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=
|
||||
|
||||
buffer-equal@0.0.1:
|
||||
version "0.0.1"
|
||||
resolved "https://registry.yarnpkg.com/buffer-equal/-/buffer-equal-0.0.1.tgz#91bc74b11ea405bc916bc6aa908faafa5b4aac4b"
|
||||
integrity sha1-kbx0sR6kBbyRa8aqkI+q+ltKrEs=
|
||||
|
||||
buffer-from@^1.0.0:
|
||||
version "1.1.1"
|
||||
resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef"
|
||||
@@ -5798,7 +5969,7 @@ buffer@^4.3.0:
|
||||
ieee754 "^1.1.4"
|
||||
isarray "^1.0.0"
|
||||
|
||||
buffer@^5.1.0, buffer@^5.5.0:
|
||||
buffer@^5.1.0, buffer@^5.2.0, buffer@^5.5.0:
|
||||
version "5.7.1"
|
||||
resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0"
|
||||
integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==
|
||||
@@ -6421,7 +6592,7 @@ color-string@^1.5.4:
|
||||
color-name "^1.0.0"
|
||||
simple-swizzle "^0.2.2"
|
||||
|
||||
color@^3.0.0, color@^3.1.2:
|
||||
color@^3.0.0, color@^3.1.2, color@^3.1.3:
|
||||
version "3.1.3"
|
||||
resolved "https://registry.yarnpkg.com/color/-/color-3.1.3.tgz#ca67fb4e7b97d611dcde39eceed422067d91596e"
|
||||
integrity sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ==
|
||||
@@ -6583,6 +6754,11 @@ console-control-strings@^1.0.0, console-control-strings@~1.1.0:
|
||||
resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e"
|
||||
integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=
|
||||
|
||||
"consolidated-events@^1.1.0 || ^2.0.0":
|
||||
version "2.0.2"
|
||||
resolved "https://registry.yarnpkg.com/consolidated-events/-/consolidated-events-2.0.2.tgz#da8d8f8c2b232831413d9e190dc11669c79f4a91"
|
||||
integrity sha512-2/uRVMdRypf5z/TW/ncD/66l75P5hH2vM/GR8Jf8HLc2xnfJtmina6F6du8+v4Z2vTrMo7jC+W1tmEEuuELgkQ==
|
||||
|
||||
constants-browserify@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75"
|
||||
@@ -7347,6 +7523,20 @@ decompress-response@^3.3.0:
|
||||
dependencies:
|
||||
mimic-response "^1.0.0"
|
||||
|
||||
decompress-response@^4.2.0:
|
||||
version "4.2.1"
|
||||
resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-4.2.1.tgz#414023cc7a302da25ce2ec82d0d5238ccafd8986"
|
||||
integrity sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==
|
||||
dependencies:
|
||||
mimic-response "^2.0.0"
|
||||
|
||||
decompress-response@^6.0.0:
|
||||
version "6.0.0"
|
||||
resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc"
|
||||
integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==
|
||||
dependencies:
|
||||
mimic-response "^3.1.0"
|
||||
|
||||
dedent@^0.7.0:
|
||||
version "0.7.0"
|
||||
resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c"
|
||||
@@ -7513,6 +7703,11 @@ detect-file@^1.0.0:
|
||||
resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7"
|
||||
integrity sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=
|
||||
|
||||
detect-libc@^1.0.3:
|
||||
version "1.0.3"
|
||||
resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b"
|
||||
integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=
|
||||
|
||||
detect-newline@^3.0.0:
|
||||
version "3.1.0"
|
||||
resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651"
|
||||
@@ -8496,6 +8691,11 @@ execa@^5.0.0:
|
||||
signal-exit "^3.0.3"
|
||||
strip-final-newline "^2.0.0"
|
||||
|
||||
exif-parser@^0.1.12:
|
||||
version "0.1.12"
|
||||
resolved "https://registry.yarnpkg.com/exif-parser/-/exif-parser-0.1.12.tgz#58a9d2d72c02c1f6f02a0ef4a9166272b7760922"
|
||||
integrity sha1-WKnS1ywCwfbwKg70qRZicrd2CSI=
|
||||
|
||||
exit@^0.1.2:
|
||||
version "0.1.2"
|
||||
resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c"
|
||||
@@ -8514,6 +8714,11 @@ expand-brackets@^2.1.4:
|
||||
snapdragon "^0.8.1"
|
||||
to-regex "^3.0.1"
|
||||
|
||||
expand-template@^2.0.3:
|
||||
version "2.0.3"
|
||||
resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c"
|
||||
integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==
|
||||
|
||||
expand-tilde@^2.0.0, expand-tilde@^2.0.2:
|
||||
version "2.0.2"
|
||||
resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502"
|
||||
@@ -8802,6 +9007,11 @@ file-system-cache@^1.0.5:
|
||||
fs-extra "^0.30.0"
|
||||
ramda "^0.21.0"
|
||||
|
||||
file-type@^9.0.0:
|
||||
version "9.0.0"
|
||||
resolved "https://registry.yarnpkg.com/file-type/-/file-type-9.0.0.tgz#a68d5ad07f486414dfb2c8866f73161946714a18"
|
||||
integrity sha512-Qe/5NJrgIOlwijpq3B7BEpzPFcgzggOTagZmkXQY4LA6bsXKTUstK7Wp12lEJ/mLKTpvIZxmIuRcLYWT6ov9lw==
|
||||
|
||||
file-uri-to-path@1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd"
|
||||
@@ -9285,6 +9495,19 @@ getpass@^0.1.1:
|
||||
dependencies:
|
||||
assert-plus "^1.0.0"
|
||||
|
||||
gifwrap@^0.9.2:
|
||||
version "0.9.2"
|
||||
resolved "https://registry.yarnpkg.com/gifwrap/-/gifwrap-0.9.2.tgz#348e286e67d7cf57942172e1e6f05a71cee78489"
|
||||
integrity sha512-fcIswrPaiCDAyO8xnWvHSZdWChjKXUanKKpAiWWJ/UTkEi/aYKn5+90e7DE820zbEaVR9CE2y4z9bzhQijZ0BA==
|
||||
dependencies:
|
||||
image-q "^1.1.1"
|
||||
omggif "^1.0.10"
|
||||
|
||||
github-from-package@0.0.0:
|
||||
version "0.0.0"
|
||||
resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce"
|
||||
integrity sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=
|
||||
|
||||
github-slugger@^1.3.0:
|
||||
version "1.3.0"
|
||||
resolved "https://registry.yarnpkg.com/github-slugger/-/github-slugger-1.3.0.tgz#9bd0a95c5efdfc46005e82a906ef8e2a059124c9"
|
||||
@@ -9389,7 +9612,7 @@ global-prefix@^3.0.0:
|
||||
kind-of "^6.0.2"
|
||||
which "^1.3.1"
|
||||
|
||||
global@^4.4.0:
|
||||
global@^4.4.0, global@~4.4.0:
|
||||
version "4.4.0"
|
||||
resolved "https://registry.yarnpkg.com/global/-/global-4.4.0.tgz#3e7b105179006a323ed71aafca3e9c57a5cc6406"
|
||||
integrity sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==
|
||||
@@ -10145,6 +10368,11 @@ ignore@^5.1.4:
|
||||
resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57"
|
||||
integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==
|
||||
|
||||
image-q@^1.1.1:
|
||||
version "1.1.1"
|
||||
resolved "https://registry.yarnpkg.com/image-q/-/image-q-1.1.1.tgz#fc84099664460b90ca862d9300b6bfbbbfbf8056"
|
||||
integrity sha1-/IQJlmRGC5DKhi2TALa/u7+/gFY=
|
||||
|
||||
immer@8.0.1:
|
||||
version "8.0.1"
|
||||
resolved "https://registry.yarnpkg.com/immer/-/immer-8.0.1.tgz#9c73db683e2b3975c424fb0572af5889877ae656"
|
||||
@@ -10543,7 +10771,7 @@ is-fullwidth-code-point@^3.0.0:
|
||||
resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
|
||||
integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
|
||||
|
||||
is-function@^1.0.2:
|
||||
is-function@^1.0.1, is-function@^1.0.2:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/is-function/-/is-function-1.0.2.tgz#4f097f30abf6efadac9833b17ca5dc03f8144e08"
|
||||
integrity sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==
|
||||
@@ -11321,6 +11549,11 @@ joycon@^3.0.1:
|
||||
resolved "https://registry.yarnpkg.com/joycon/-/joycon-3.0.1.tgz#9074c9b08ccf37a6726ff74a18485f85efcaddaf"
|
||||
integrity sha512-SJcJNBg32dGgxhPtM0wQqxqV0ax9k/9TaUskGDSJkSFSQOEWWvQ3zzWdGQRIUry2j1zA5+ReH13t0Mf3StuVZA==
|
||||
|
||||
jpeg-js@0.4.2:
|
||||
version "0.4.2"
|
||||
resolved "https://registry.yarnpkg.com/jpeg-js/-/jpeg-js-0.4.2.tgz#8b345b1ae4abde64c2da2fe67ea216a114ac279d"
|
||||
integrity sha512-+az2gi/hvex7eLTMTlbRLOhH6P6WFdk2ITI8HJsaH2VqYO0I594zXSYEP+tf4FW+8Cy68ScDXoAsQdyQanv3sw==
|
||||
|
||||
jquery@*, jquery@^3.5.1:
|
||||
version "3.6.0"
|
||||
resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.6.0.tgz#c72a09f15c1bdce142f49dbf1170bdf8adac2470"
|
||||
@@ -11837,6 +12070,20 @@ listr@^0.14.3:
|
||||
p-map "^2.0.0"
|
||||
rxjs "^6.3.3"
|
||||
|
||||
load-bmfont@^1.3.1:
|
||||
version "1.4.1"
|
||||
resolved "https://registry.yarnpkg.com/load-bmfont/-/load-bmfont-1.4.1.tgz#c0f5f4711a1e2ccff725a7b6078087ccfcddd3e9"
|
||||
integrity sha512-8UyQoYmdRDy81Brz6aLAUhfZLwr5zV0L3taTQ4hju7m6biuwiWiJXjPhBJxbUQJA8PrkvJ/7Enqmwk2sM14soA==
|
||||
dependencies:
|
||||
buffer-equal "0.0.1"
|
||||
mime "^1.3.4"
|
||||
parse-bmfont-ascii "^1.0.3"
|
||||
parse-bmfont-binary "^1.0.5"
|
||||
parse-bmfont-xml "^1.1.4"
|
||||
phin "^2.9.1"
|
||||
xhr "^2.0.1"
|
||||
xtend "^4.0.0"
|
||||
|
||||
load-json-file@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8"
|
||||
@@ -12443,7 +12690,7 @@ mime-types@^2.1.12, mime-types@^2.1.26, mime-types@^2.1.27, mime-types@~2.1.17,
|
||||
dependencies:
|
||||
mime-db "1.47.0"
|
||||
|
||||
mime@1.6.0:
|
||||
mime@1.6.0, mime@^1.3.4:
|
||||
version "1.6.0"
|
||||
resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1"
|
||||
integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==
|
||||
@@ -12468,6 +12715,16 @@ mimic-response@^1.0.0, mimic-response@^1.0.1:
|
||||
resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b"
|
||||
integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==
|
||||
|
||||
mimic-response@^2.0.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-2.1.0.tgz#d13763d35f613d09ec37ebb30bac0469c0ee8f43"
|
||||
integrity sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==
|
||||
|
||||
mimic-response@^3.1.0:
|
||||
version "3.1.0"
|
||||
resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9"
|
||||
integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==
|
||||
|
||||
min-document@^2.19.0:
|
||||
version "2.19.0"
|
||||
resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685"
|
||||
@@ -12524,7 +12781,7 @@ minimatch@3.0.4, minimatch@^3.0.2, minimatch@^3.0.4:
|
||||
dependencies:
|
||||
brace-expansion "^1.1.7"
|
||||
|
||||
minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.5:
|
||||
minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.5:
|
||||
version "1.2.5"
|
||||
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602"
|
||||
integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==
|
||||
@@ -12589,6 +12846,11 @@ mixin-deep@^1.2.0:
|
||||
for-in "^1.0.2"
|
||||
is-extendable "^1.0.1"
|
||||
|
||||
mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3:
|
||||
version "0.5.3"
|
||||
resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113"
|
||||
integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==
|
||||
|
||||
mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@^0.5.5, mkdirp@~0.5.1:
|
||||
version "0.5.5"
|
||||
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def"
|
||||
@@ -12745,6 +13007,11 @@ nanomatch@^1.2.9:
|
||||
snapdragon "^0.8.1"
|
||||
to-regex "^3.0.1"
|
||||
|
||||
napi-build-utils@^1.0.1:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.2.tgz#b1fddc0b2c46e380a0b7a76f984dd47c41a13806"
|
||||
integrity sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==
|
||||
|
||||
native-url@^0.2.6:
|
||||
version "0.2.6"
|
||||
resolved "https://registry.yarnpkg.com/native-url/-/native-url-0.2.6.tgz#ca1258f5ace169c716ff44eccbddb674e10399ae"
|
||||
@@ -12795,6 +13062,18 @@ no-case@^3.0.4:
|
||||
lower-case "^2.0.2"
|
||||
tslib "^2.0.3"
|
||||
|
||||
node-abi@^2.7.0:
|
||||
version "2.21.0"
|
||||
resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-2.21.0.tgz#c2dc9ebad6f4f53d6ea9b531e7b8faad81041d48"
|
||||
integrity sha512-smhrivuPqEM3H5LmnY3KU6HfYv0u4QklgAxfFyRNujKUzbUcYZ+Jc2EhukB9SRcD2VpqhxM7n/MIcp1Ua1/JMg==
|
||||
dependencies:
|
||||
semver "^5.4.1"
|
||||
|
||||
node-addon-api@^3.1.0:
|
||||
version "3.1.0"
|
||||
resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-3.1.0.tgz#98b21931557466c6729e51cb77cd39c965f42239"
|
||||
integrity sha512-flmrDNB06LIl5lywUz7YlNGZH/5p0M7W28k8hzd9Lshtdh1wshD2Y+U4h9LD6KObOy1f+fEVdgprPrEymjM5uw==
|
||||
|
||||
node-dir@^0.1.10:
|
||||
version "0.1.17"
|
||||
resolved "https://registry.yarnpkg.com/node-dir/-/node-dir-0.1.17.tgz#5f5665d93351335caabef8f1c554516cf5f1e4e5"
|
||||
@@ -12897,6 +13176,24 @@ node-request-interceptor@^0.5.1:
|
||||
debug "^4.3.0"
|
||||
headers-utils "^1.2.0"
|
||||
|
||||
node-vibrant@^3.1.5:
|
||||
version "3.1.6"
|
||||
resolved "https://registry.yarnpkg.com/node-vibrant/-/node-vibrant-3.1.6.tgz#8554c3108903232cbe1e722f928469ee4379aa18"
|
||||
integrity sha512-Wlc/hQmBMOu6xon12ZJHS2N3M+I6J8DhrD3Yo6m5175v8sFkVIN+UjhKVRcO+fqvre89ASTpmiFEP3nPO13SwA==
|
||||
dependencies:
|
||||
"@jimp/custom" "^0.16.1"
|
||||
"@jimp/plugin-resize" "^0.16.1"
|
||||
"@jimp/types" "^0.16.1"
|
||||
"@types/lodash" "^4.14.53"
|
||||
"@types/node" "^10.11.7"
|
||||
lodash "^4.17.20"
|
||||
url "^0.11.0"
|
||||
|
||||
noop-logger@^0.1.1:
|
||||
version "0.1.1"
|
||||
resolved "https://registry.yarnpkg.com/noop-logger/-/noop-logger-0.1.1.tgz#94a2b1633c4f1317553007d8966fd0e841b6a4c2"
|
||||
integrity sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI=
|
||||
|
||||
normalize-package-data@^2.3.2, normalize-package-data@^2.5.0:
|
||||
version "2.5.0"
|
||||
resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8"
|
||||
@@ -12963,7 +13260,7 @@ npm-run-path@^4.0.0, npm-run-path@^4.0.1:
|
||||
dependencies:
|
||||
path-key "^3.0.0"
|
||||
|
||||
npmlog@^4.1.2:
|
||||
npmlog@^4.0.1, npmlog@^4.1.2:
|
||||
version "4.1.2"
|
||||
resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b"
|
||||
integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==
|
||||
@@ -13135,6 +13432,11 @@ obuf@^1.0.0, obuf@^1.1.2:
|
||||
resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e"
|
||||
integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==
|
||||
|
||||
omggif@^1.0.10, omggif@^1.0.9:
|
||||
version "1.0.10"
|
||||
resolved "https://registry.yarnpkg.com/omggif/-/omggif-1.0.10.tgz#ddaaf90d4a42f532e9e7cb3a95ecdd47f17c7b19"
|
||||
integrity sha512-LMJTtvgc/nugXj0Vcrrs68Mn2D1r0zf630VNtqtpI1FEO7e+O9FP4gqs9AcnBaSEeoHIPm28u6qgPR0oyEpGSw==
|
||||
|
||||
on-finished@~2.3.0:
|
||||
version "2.3.0"
|
||||
resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947"
|
||||
@@ -13414,7 +13716,7 @@ package-json@^6.3.0:
|
||||
registry-url "^5.0.0"
|
||||
semver "^6.2.0"
|
||||
|
||||
pako@~1.0.5:
|
||||
pako@^1.0.5, pako@~1.0.5:
|
||||
version "1.0.11"
|
||||
resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf"
|
||||
integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==
|
||||
@@ -13454,6 +13756,24 @@ parse-asn1@^5.0.0, parse-asn1@^5.1.5:
|
||||
pbkdf2 "^3.0.3"
|
||||
safe-buffer "^5.1.1"
|
||||
|
||||
parse-bmfont-ascii@^1.0.3:
|
||||
version "1.0.6"
|
||||
resolved "https://registry.yarnpkg.com/parse-bmfont-ascii/-/parse-bmfont-ascii-1.0.6.tgz#11ac3c3ff58f7c2020ab22769079108d4dfa0285"
|
||||
integrity sha1-Eaw8P/WPfCAgqyJ2kHkQjU36AoU=
|
||||
|
||||
parse-bmfont-binary@^1.0.5:
|
||||
version "1.0.6"
|
||||
resolved "https://registry.yarnpkg.com/parse-bmfont-binary/-/parse-bmfont-binary-1.0.6.tgz#d038b476d3e9dd9db1e11a0b0e53a22792b69006"
|
||||
integrity sha1-0Di0dtPp3Z2x4RoLDlOiJ5K2kAY=
|
||||
|
||||
parse-bmfont-xml@^1.1.4:
|
||||
version "1.1.4"
|
||||
resolved "https://registry.yarnpkg.com/parse-bmfont-xml/-/parse-bmfont-xml-1.1.4.tgz#015319797e3e12f9e739c4d513872cd2fa35f389"
|
||||
integrity sha512-bjnliEOmGv3y1aMEfREMBJ9tfL3WR0i0CKPj61DnSLaoxWR3nLrsQrEbCId/8rF4NyRF0cCqisSVXyQYWM+mCQ==
|
||||
dependencies:
|
||||
xml-parse-from-string "^1.0.0"
|
||||
xml2js "^0.4.5"
|
||||
|
||||
parse-entities@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-2.0.0.tgz#53c6eb5b9314a1f4ec99fa0fdf7ce01ecda0cbe8"
|
||||
@@ -13466,6 +13786,11 @@ parse-entities@^2.0.0:
|
||||
is-decimal "^1.0.0"
|
||||
is-hexadecimal "^1.0.0"
|
||||
|
||||
parse-headers@^2.0.0:
|
||||
version "2.0.3"
|
||||
resolved "https://registry.yarnpkg.com/parse-headers/-/parse-headers-2.0.3.tgz#5e8e7512383d140ba02f0c7aa9f49b4399c92515"
|
||||
integrity sha512-QhhZ+DCCit2Coi2vmAKbq5RGTRcQUOE2+REgv8vdyu7MnYx2eZztegqtTx99TZ86GTIwqiy3+4nQTWZ2tgmdCA==
|
||||
|
||||
parse-json@^2.2.0:
|
||||
version "2.2.0"
|
||||
resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9"
|
||||
@@ -13631,7 +13956,17 @@ performance-now@^2.1.0:
|
||||
resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
|
||||
integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=
|
||||
|
||||
picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3:
|
||||
phin@^2.9.1:
|
||||
version "2.9.3"
|
||||
resolved "https://registry.yarnpkg.com/phin/-/phin-2.9.3.tgz#f9b6ac10a035636fb65dfc576aaaa17b8743125c"
|
||||
integrity sha512-CzFr90qM24ju5f88quFC/6qohjC144rehe5n6DH900lgXmUe86+xCKc10ev56gRKC4/BkHUoG4uSiQgBiIXwDA==
|
||||
|
||||
picomatch@^2.0.4, picomatch@^2.2.1:
|
||||
version "2.2.2"
|
||||
resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad"
|
||||
integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==
|
||||
|
||||
picomatch@^2.2.3:
|
||||
version "2.2.3"
|
||||
resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.3.tgz#465547f359ccc206d3c48e46a1bcb89bf7ee619d"
|
||||
integrity sha512-KpELjfwcCDUb9PeigTs2mBJzXUPzAuP2oPcA989He8Rte0+YUAjw1JVedDhuTKPkHjSYzMN3npC9luThGYEKdg==
|
||||
@@ -13704,6 +14039,13 @@ pirates@^4.0.0, pirates@^4.0.1:
|
||||
dependencies:
|
||||
node-modules-regexp "^1.0.0"
|
||||
|
||||
pixelmatch@^4.0.2:
|
||||
version "4.0.2"
|
||||
resolved "https://registry.yarnpkg.com/pixelmatch/-/pixelmatch-4.0.2.tgz#8f47dcec5011b477b67db03c243bc1f3085e8854"
|
||||
integrity sha1-j0fc7FARtHe2fbA8JDvB8wheiFQ=
|
||||
dependencies:
|
||||
pngjs "^3.0.0"
|
||||
|
||||
pkg-dir@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b"
|
||||
@@ -13744,6 +14086,11 @@ pluralize@^8.0.0:
|
||||
resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-8.0.0.tgz#1a6fa16a38d12a1901e0320fa017051c539ce3b1"
|
||||
integrity sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==
|
||||
|
||||
pngjs@^3.0.0, pngjs@^3.3.3:
|
||||
version "3.4.0"
|
||||
resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-3.4.0.tgz#99ca7d725965fb655814eaf65f38f12bbdbf555f"
|
||||
integrity sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==
|
||||
|
||||
pnp-webpack-plugin@1.6.4, pnp-webpack-plugin@^1.6.4:
|
||||
version "1.6.4"
|
||||
resolved "https://registry.yarnpkg.com/pnp-webpack-plugin/-/pnp-webpack-plugin-1.6.4.tgz#c9711ac4dc48a685dabafc86f8b6dd9f8df84149"
|
||||
@@ -14530,6 +14877,27 @@ postcss@^8.2.10, postcss@^8.2.7:
|
||||
nanoid "^3.1.22"
|
||||
source-map "^0.6.1"
|
||||
|
||||
prebuild-install@^6.0.1:
|
||||
version "6.1.0"
|
||||
resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-6.1.0.tgz#cee5bfb0317475450d05dbec821be23d9a7c2c32"
|
||||
integrity sha512-ht3ts5ewK1V0RqqelVVBcZh94WEtk/WCWlIzeuztMLdNe+5/65jPGr3sgQKY6tJhX3ib7glckPYazjkW/K0D/g==
|
||||
dependencies:
|
||||
detect-libc "^1.0.3"
|
||||
expand-template "^2.0.3"
|
||||
github-from-package "0.0.0"
|
||||
minimist "^1.2.3"
|
||||
mkdirp-classic "^0.5.3"
|
||||
napi-build-utils "^1.0.1"
|
||||
node-abi "^2.7.0"
|
||||
noop-logger "^0.1.1"
|
||||
npmlog "^4.0.1"
|
||||
pump "^3.0.0"
|
||||
rc "^1.2.7"
|
||||
simple-get "^3.0.3"
|
||||
tar-fs "^2.0.0"
|
||||
tunnel-agent "^0.6.0"
|
||||
which-pm-runs "^1.0.0"
|
||||
|
||||
prelude-ls@^1.2.1:
|
||||
version "1.2.1"
|
||||
resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396"
|
||||
@@ -14683,7 +15051,7 @@ prompts@^2.0.1, prompts@^2.4.0, prompts@^2.4.1:
|
||||
kleur "^3.0.3"
|
||||
sisteransi "^1.0.5"
|
||||
|
||||
prop-types@^15.5.0, prop-types@^15.5.8, prop-types@^15.6.0, prop-types@^15.6.1, prop-types@^15.6.2, prop-types@^15.7.2:
|
||||
prop-types@^15.0.0, prop-types@^15.5.0, prop-types@^15.5.8, prop-types@^15.6.0, prop-types@^15.6.1, prop-types@^15.6.2, prop-types@^15.7.2:
|
||||
version "15.7.2"
|
||||
resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5"
|
||||
integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==
|
||||
@@ -15046,7 +15414,7 @@ raw-loader@^4.0.2:
|
||||
loader-utils "^2.0.0"
|
||||
schema-utils "^3.0.0"
|
||||
|
||||
rc@^1.2.8:
|
||||
rc@^1.2.7, rc@^1.2.8:
|
||||
version "1.2.8"
|
||||
resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed"
|
||||
integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==
|
||||
@@ -15255,7 +15623,7 @@ react-image-crop@^8.6.6:
|
||||
core-js "^3.11.0"
|
||||
prop-types "^15.7.2"
|
||||
|
||||
react-is@^16.6.0, react-is@^16.7.0, react-is@^16.8.1:
|
||||
react-is@^16.6.0, react-is@^16.6.3, react-is@^16.7.0, react-is@^16.8.1:
|
||||
version "16.13.1"
|
||||
resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
|
||||
integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
|
||||
@@ -15472,6 +15840,15 @@ react-use-measure@^2.0.3:
|
||||
dependencies:
|
||||
debounce "^1.2.0"
|
||||
|
||||
react-waypoint@^9.0.2:
|
||||
version "9.0.3"
|
||||
resolved "https://registry.yarnpkg.com/react-waypoint/-/react-waypoint-9.0.3.tgz#176aa4686b33eb40d0d48d361c468f0367167958"
|
||||
integrity sha512-NRmyjW8CUBNNl4WpvBqLDgBs18rFUsixeHVHrRrFlWTdOlWP7eiDjptqlR/cJAPLD6RwP5XFCm3bi9OiofN3nA==
|
||||
dependencies:
|
||||
consolidated-events "^1.1.0 || ^2.0.0"
|
||||
prop-types "^15.0.0"
|
||||
react-is "^16.6.3"
|
||||
|
||||
react@17.0.1, react@^17.0.1:
|
||||
version "17.0.1"
|
||||
resolved "https://registry.yarnpkg.com/react/-/react-17.0.1.tgz#6e0600416bd57574e3f86d92edba3d9008726127"
|
||||
@@ -15626,7 +16003,7 @@ regenerate@^1.4.0:
|
||||
resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a"
|
||||
integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==
|
||||
|
||||
regenerator-runtime@^0.13.4, regenerator-runtime@^0.13.7:
|
||||
regenerator-runtime@^0.13.3, regenerator-runtime@^0.13.4, regenerator-runtime@^0.13.7:
|
||||
version "0.13.7"
|
||||
resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55"
|
||||
integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==
|
||||
@@ -16402,6 +16779,22 @@ shallowequal@^1.1.0:
|
||||
resolved "https://registry.yarnpkg.com/shallowequal/-/shallowequal-1.1.0.tgz#188d521de95b9087404fd4dcb68b13df0ae4e7f8"
|
||||
integrity sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==
|
||||
|
||||
sharp@^0.27.1:
|
||||
version "0.27.2"
|
||||
resolved "https://registry.yarnpkg.com/sharp/-/sharp-0.27.2.tgz#a939775e630e88600c0b5e68f20593aea722252f"
|
||||
integrity sha512-w3FVoONPG/x5MXCc3wsjOS+b9h3CI60qkus6EPQU4dkT0BDm0PyGhDCK6KhtfT3/vbeOMOXAKFNSw+I3QGWkMA==
|
||||
dependencies:
|
||||
array-flatten "^3.0.0"
|
||||
color "^3.1.3"
|
||||
detect-libc "^1.0.3"
|
||||
node-addon-api "^3.1.0"
|
||||
npmlog "^4.1.2"
|
||||
prebuild-install "^6.0.1"
|
||||
semver "^7.3.4"
|
||||
simple-get "^4.0.0"
|
||||
tar-fs "^2.1.1"
|
||||
tunnel-agent "^0.6.0"
|
||||
|
||||
shebang-command@^1.2.0:
|
||||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea"
|
||||
@@ -16464,6 +16857,29 @@ signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3:
|
||||
resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c"
|
||||
integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==
|
||||
|
||||
simple-concat@^1.0.0:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f"
|
||||
integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==
|
||||
|
||||
simple-get@^3.0.3:
|
||||
version "3.1.0"
|
||||
resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-3.1.0.tgz#b45be062435e50d159540b576202ceec40b9c6b3"
|
||||
integrity sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/c1e+qmNIDHRK+oXFDdEqBT8WzUA==
|
||||
dependencies:
|
||||
decompress-response "^4.2.0"
|
||||
once "^1.3.1"
|
||||
simple-concat "^1.0.0"
|
||||
|
||||
simple-get@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-4.0.0.tgz#73fa628278d21de83dadd5512d2cc1f4872bd675"
|
||||
integrity sha512-ZalZGexYr3TA0SwySsr5HlgOOinS4Jsa8YB2GJ6lUNAazyAu4KG/VmzMTwAt2YVXzzVj8QmefmAonZIK2BSGcQ==
|
||||
dependencies:
|
||||
decompress-response "^6.0.0"
|
||||
once "^1.3.1"
|
||||
simple-concat "^1.0.0"
|
||||
|
||||
simple-swizzle@^0.2.2:
|
||||
version "0.2.2"
|
||||
resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a"
|
||||
@@ -17277,7 +17693,17 @@ tapable@^2.0.0:
|
||||
resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.0.tgz#5c373d281d9c672848213d0e037d1c4165ab426b"
|
||||
integrity sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw==
|
||||
|
||||
tar-stream@^2.1.2:
|
||||
tar-fs@^2.0.0, tar-fs@^2.1.1:
|
||||
version "2.1.1"
|
||||
resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.1.tgz#489a15ab85f1f0befabb370b7de4f9eb5cbe8784"
|
||||
integrity sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==
|
||||
dependencies:
|
||||
chownr "^1.1.1"
|
||||
mkdirp-classic "^0.5.2"
|
||||
pump "^3.0.0"
|
||||
tar-stream "^2.1.4"
|
||||
|
||||
tar-stream@^2.1.2, tar-stream@^2.1.4:
|
||||
version "2.2.0"
|
||||
resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287"
|
||||
integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==
|
||||
@@ -17471,6 +17897,11 @@ timers-browserify@^2.0.4:
|
||||
dependencies:
|
||||
setimmediate "^1.0.4"
|
||||
|
||||
timm@^1.6.1:
|
||||
version "1.7.1"
|
||||
resolved "https://registry.yarnpkg.com/timm/-/timm-1.7.1.tgz#96bab60c7d45b5a10a8a4d0f0117c6b7e5aff76f"
|
||||
integrity sha512-IjZc9KIotudix8bMaBW6QvMuq64BrJWFs1+4V0lXwWGQZwH+LnX87doAYhem4caOEusRP9/g6jVDQmZ8XOk1nw==
|
||||
|
||||
timsort@^0.3.0:
|
||||
version "0.3.0"
|
||||
resolved "https://registry.yarnpkg.com/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4"
|
||||
@@ -17496,6 +17927,11 @@ tiny-warning@^1.0.0, tiny-warning@^1.0.2, tiny-warning@^1.0.3:
|
||||
resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754"
|
||||
integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==
|
||||
|
||||
tinycolor2@^1.4.1:
|
||||
version "1.4.2"
|
||||
resolved "https://registry.yarnpkg.com/tinycolor2/-/tinycolor2-1.4.2.tgz#3f6a4d1071ad07676d7fa472e1fac40a719d8803"
|
||||
integrity sha512-vJhccZPs965sV/L2sU4oRQVAos0pQXwsvTLkWYdqJ+a8Q5kPFzJTuOFwy7UniPli44NKQGAglksjvOcpo95aZA==
|
||||
|
||||
tmp@0.2.1:
|
||||
version "0.2.1"
|
||||
resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14"
|
||||
@@ -18125,6 +18561,13 @@ use@^3.1.0:
|
||||
resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f"
|
||||
integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==
|
||||
|
||||
utif@^2.0.1:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/utif/-/utif-2.0.1.tgz#9e1582d9bbd20011a6588548ed3266298e711759"
|
||||
integrity sha512-Z/S1fNKCicQTf375lIP9G8Sa1H/phcysstNrrSdZKj1f9g58J4NMgb5IgiEZN9/nLMPDwF0W7hdOe9Qq2IYoLg==
|
||||
dependencies:
|
||||
pako "^1.0.5"
|
||||
|
||||
util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
|
||||
@@ -18674,6 +19117,11 @@ which-module@^2.0.0:
|
||||
resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a"
|
||||
integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=
|
||||
|
||||
which-pm-runs@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/which-pm-runs/-/which-pm-runs-1.0.0.tgz#670b3afbc552e0b55df6b7780ca74615f23ad1cb"
|
||||
integrity sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs=
|
||||
|
||||
which@^1.2.14, which@^1.2.9, which@^1.3.1:
|
||||
version "1.3.1"
|
||||
resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
|
||||
@@ -18808,6 +19256,16 @@ xdg-basedir@^4.0.0:
|
||||
resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13"
|
||||
integrity sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==
|
||||
|
||||
xhr@^2.0.1:
|
||||
version "2.6.0"
|
||||
resolved "https://registry.yarnpkg.com/xhr/-/xhr-2.6.0.tgz#b69d4395e792b4173d6b7df077f0fc5e4e2b249d"
|
||||
integrity sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==
|
||||
dependencies:
|
||||
global "~4.4.0"
|
||||
is-function "^1.0.1"
|
||||
parse-headers "^2.0.0"
|
||||
xtend "^4.0.0"
|
||||
|
||||
xml-js@^1.6.11:
|
||||
version "1.6.11"
|
||||
resolved "https://registry.yarnpkg.com/xml-js/-/xml-js-1.6.11.tgz#927d2f6947f7f1c19a316dd8eea3614e8b18f8e9"
|
||||
@@ -18820,6 +19278,11 @@ xml-name-validator@^3.0.0:
|
||||
resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a"
|
||||
integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==
|
||||
|
||||
xml-parse-from-string@^1.0.0:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/xml-parse-from-string/-/xml-parse-from-string-1.0.1.tgz#a9029e929d3dbcded169f3c6e28238d95a5d5a28"
|
||||
integrity sha1-qQKekp09vN7RafPG4oI42VpdWig=
|
||||
|
||||
xml2js@0.4.17:
|
||||
version "0.4.17"
|
||||
resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.17.tgz#17be93eaae3f3b779359c795b419705a8817e868"
|
||||
@@ -18828,6 +19291,14 @@ xml2js@0.4.17:
|
||||
sax ">=0.6.0"
|
||||
xmlbuilder "^4.1.0"
|
||||
|
||||
xml2js@^0.4.5:
|
||||
version "0.4.23"
|
||||
resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.23.tgz#a0c69516752421eb2ac758ee4d4ccf58843eac66"
|
||||
integrity sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==
|
||||
dependencies:
|
||||
sax ">=0.6.0"
|
||||
xmlbuilder "~11.0.0"
|
||||
|
||||
xmlbuilder@^4.1.0:
|
||||
version "4.2.1"
|
||||
resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-4.2.1.tgz#aa58a3041a066f90eaa16c2f5389ff19f3f461a5"
|
||||
@@ -18835,6 +19306,11 @@ xmlbuilder@^4.1.0:
|
||||
dependencies:
|
||||
lodash "^4.0.0"
|
||||
|
||||
xmlbuilder@~11.0.0:
|
||||
version "11.0.1"
|
||||
resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-11.0.1.tgz#be9bae1c8a046e76b31127726347d0ad7002beb3"
|
||||
integrity sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==
|
||||
|
||||
xmlchars@^2.2.0:
|
||||
version "2.2.0"
|
||||
resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb"
|
||||
|
||||