├── .circleci └── config.yml ├── .github └── workflows │ ├── codeql-analysis.yml │ └── npm-publish.yml ├── .gitignore ├── .npmignore ├── CODEOWNERS ├── LICENSE ├── README.md ├── package.json ├── src ├── address.js ├── build.js ├── graph.js ├── index.js ├── metadata.js ├── query.js ├── script.js ├── templates.js └── utils.js ├── test └── index.js └── yarn.lock /.circleci/config.yml: -------------------------------------------------------------------------------- 1 | # This config is equivalent to both the '.circleci/extended/orb-free.yml' and the base '.circleci/config.yml' 2 | version: 2.1 3 | 4 | # Orbs are reusable packages of CircleCI configuration that you may share across projects, enabling you to create encapsulated, parameterized commands, jobs, and executors that can be used across multiple projects. 5 | # See: https://circleci.com/docs/2.0/orb-intro/ 6 | orbs: 7 | node: circleci/node@4.7 8 | 9 | # Invoke jobs via workflows 10 | # See: https://circleci.com/docs/2.0/configuration-reference/#workflows 11 | workflows: 12 | sample: # This is the name of the workflow, feel free to change it to better match your workflow. 13 | # Inside the workflow, you define the jobs you want to run. 14 | jobs: 15 | - node/test: 16 | # This is the node version to use for the `cimg/node` tag 17 | # Relevant tags can be found on the CircleCI Developer Hub 18 | # https://circleci.com/developer/images/image/cimg/node 19 | version: '16.10' 20 | # If you are using yarn, change the line below from "npm" to "yarn" 21 | pkg-manager: yarn 22 | -------------------------------------------------------------------------------- /.github/workflows/codeql-analysis.yml: -------------------------------------------------------------------------------- 1 | # For most projects, this workflow file will not need changing; you simply need 2 | # to commit it to your repository. 3 | # 4 | # You may wish to alter this file to override the set of languages analyzed, 5 | # or to provide custom queries or build logic. 6 | # 7 | # ******** NOTE ******** 8 | # We have attempted to detect the languages in your repository. Please check 9 | # the `language` matrix defined below to confirm you have the correct set of 10 | # supported CodeQL languages. 11 | # 12 | name: "CodeQL" 13 | 14 | on: 15 | push: 16 | branches: [ main ] 17 | pull_request: 18 | # The branches below must be a subset of the branches above 19 | branches: [ main ] 20 | schedule: 21 | - cron: '23 13 * * 5' 22 | 23 | jobs: 24 | analyze: 25 | name: Analyze 26 | runs-on: ubuntu-latest 27 | permissions: 28 | actions: read 29 | contents: read 30 | security-events: write 31 | 32 | strategy: 33 | fail-fast: false 34 | matrix: 35 | language: [ 'javascript' ] 36 | # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ] 37 | # Learn more about CodeQL language support at https://git.io/codeql-language-support 38 | 39 | steps: 40 | - name: Checkout repository 41 | uses: actions/checkout@v2 42 | 43 | # Initializes the CodeQL tools for scanning. 44 | - name: Initialize CodeQL 45 | uses: github/codeql-action/init@v1 46 | with: 47 | languages: ${{ matrix.language }} 48 | # If you wish to specify custom queries, you can do so here or in a config file. 49 | # By default, queries listed here will override any specified in a config file. 50 | # Prefix the list here with "+" to use these queries and those in the config file. 51 | # queries: ./path/to/local/query, your-org/your-repo/queries@main 52 | 53 | # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). 54 | # If this step fails, then you should remove it and run the build manually (see below) 55 | - name: Autobuild 56 | uses: github/codeql-action/autobuild@v1 57 | 58 | # ℹ️ Command-line programs to run using the OS shell. 59 | # 📚 https://git.io/JvXDl 60 | 61 | # ✏️ If the Autobuild fails above, remove it and uncomment the following three lines 62 | # and modify them (or add more) to build your code if your project 63 | # uses a compiled language 64 | 65 | #- run: | 66 | # make bootstrap 67 | # make release 68 | 69 | - name: Perform CodeQL Analysis 70 | uses: github/codeql-action/analyze@v1 71 | -------------------------------------------------------------------------------- /.github/workflows/npm-publish.yml: -------------------------------------------------------------------------------- 1 | name: Node.js Package 2 | 3 | on: 4 | release: 5 | types: [created] 6 | 7 | jobs: 8 | build: 9 | runs-on: ubuntu-latest 10 | steps: 11 | - uses: actions/checkout@v2 12 | - uses: actions/setup-node@v2 13 | with: 14 | node-version: 16 15 | - run: yarn install --immutable --immutable-cache --check-cache 16 | - run: yarn test 17 | 18 | publish-npm: 19 | needs: build 20 | runs-on: ubuntu-latest 21 | steps: 22 | - uses: actions/checkout@v2 23 | - uses: actions/setup-node@v2 24 | with: 25 | node-version: 16 26 | registry-url: https://registry.npmjs.org/ 27 | - run: yarn install --immutable --immutable-cache --check-cache 28 | - run: yarn publish 29 | env: 30 | NODE_AUTH_TOKEN: ${{secrets.NPM_DEPLOYMENT_TOKEN}} 31 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Dependency directories 2 | node_modules/ 3 | 4 | # Logs 5 | *.log 6 | 7 | # Optional npm cache directory 8 | .npm 9 | 10 | # Coverage coverage 11 | coverage 12 | *.lcov 13 | 14 | # Envirment variables 15 | .env 16 | 17 | # Various operating systems 18 | .Trash-* 19 | .DS_Store 20 | .directory 21 | .nfs* 22 | .fuse_hidden* 23 | 24 | # Custom 25 | dev/ 26 | package-lock.json 27 | -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | # Dependency directories 2 | node_modules/ 3 | 4 | # Logs 5 | *.log 6 | 7 | # Optional npm cache directory 8 | .npm 9 | 10 | # Coverage coverage 11 | coverage 12 | *.lcov 13 | 14 | # Envirment variables 15 | .env 16 | 17 | # Various operating systems 18 | .Trash-* 19 | .DS_Store 20 | .directory 21 | .nfs* 22 | .fuse_hidden* -------------------------------------------------------------------------------- /CODEOWNERS: -------------------------------------------------------------------------------- 1 | # Request review from the best fit approvers* for this repo. 2 | # *Individual approvers are assigned for this repo given that 3 | # it is primarily maintained by an OSS contributor who is not a 4 | # FTE at Art Blocks. 5 | * @sheIby @jakerockland 6 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 Art Blocks 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # node-artblocks 2 | 3 | ![npm](https://img.shields.io/npm/v/artblocks) 4 | [![CircleCI](https://circleci.com/gh/ArtBlocks/node-artblocks/tree/main.svg?style=svg)](https://circleci.com/gh/ArtBlocks/node-artblocks/tree/main) 5 | [![Node.js Package](https://github.com/ArtBlocks/node-artblocks/actions/workflows/npm-publish.yml/badge.svg)](https://github.com/ArtBlocks/node-artblocks/actions/workflows/npm-publish.yml) 6 | ![GitHub package.json version](https://img.shields.io/github/package-json/v/artblocks/node-artblocks?color=blue&label=development) 7 | [![GitPOAPs](https://public-api.gitpoap.io/v1/repo/ArtBlocks/node-artblocks/badge)](https://www.gitpoap.io/gh/ArtBlocks/node-artblocks) 8 | 9 | An open source [node package](https://www.npmjs.com/package/artblocks) for reading on-chain Art Blocks data and recreating generative art projects. By default the package reads data via the [ArtBlocks Subgraph](https://thegraph.com/explorer/subgraph/artblocks/art-blocks). For those using other languages, use this package as a how-to guide for working directly with ArtBlocks on-chain data. 10 | 11 | ## Installation 12 | 13 | ```bash 14 | npm i artblocks 15 | ``` 16 | 17 | ## Usage 18 | 19 | ```javascript 20 | import ArtBlocks from 'artblocks' 21 | 22 | // Ethereum mainnet 23 | let artblocks = new ArtBlocks("thegraph", "mainnet") 24 | 25 | // Artist staging projects 26 | // Please refrain from sharing these projects publicly 27 | let artblocks = new ArtBlocks("thegraph", "goerli") 28 | 29 | // Flex contracts 30 | let artblocks = new ArtBlocks("thegraph", "goerli", contracts=[""] flex=true) 31 | ``` 32 | 33 | ## Methods 34 | 35 | ### Available Projects 36 | 37 | ```javascript 38 | const response = artblocks.projects() 39 | ``` 40 | 41 | ```javascript 42 | Promise { 43 | [ 44 | { id: 0, name: 'Chromie Squiggle' }, 45 | { id: 1, name: 'Genesis' }, 46 | { id: 2, name: 'Construction Token' }, 47 | { id: 3, name: 'Cryptoblots' }, 48 | { id: 4, name: 'Dynamic Slices' }, 49 | { id: 5, name: 'Variant Plan' }, 50 | { id: 6, name: 'View Card' }, 51 | { id: 7, name: 'Elevated Deconstructions' }, 52 | { id: 8, name: 'Singularity' }, 53 | { id: 9, name: 'Ignition' }, 54 | ... 55 | ] 56 | } 57 | ``` 58 | 59 | ### Project Metadata 60 | 61 | ```javascript 62 | const response = artblocks.project_metadata(0) 63 | ``` 64 | 65 | ```javascript 66 | Promise { 67 | { 68 | id: 0, 69 | name: 'Chromie Squiggle', 70 | artist: 'Snowfro', 71 | curation_status: 'curated', 72 | description: 'Simple and easily identifiable, each squiggle embodies the soul of the Art Blocks platform. Consider each my personal signature as an artist, developer, and tinkerer. Public minting of the Chromie Squiggle is permanently paused. They are now reserved for manual distribution to collectors and community members over a longer period of time. Please visit OpenSea to explore Squiggles available on the secondary market.', 73 | license: 'NFT License', 74 | website: 'https://www.twitter.com/artonblockchain', 75 | paused: true, 76 | complete: false, 77 | locked: true, 78 | currency_symbol: 'ETH', 79 | price_eth: 0, 80 | invocations: 9257, 81 | invocations_max: 10000, 82 | contract: '0x059edd72cd353df5106d2b9cc5ab83a52287ac3a' 83 | } 84 | } 85 | ``` 86 | 87 | ### Project Script 88 | 89 | ```javascript 90 | const response = artblocks.project_script(0) 91 | ``` 92 | 93 | ```javascript 94 | Promise { 95 | { 96 | id: 0, 97 | name: 'Chromie Squiggle', 98 | last_updated: '1620363885', 99 | ependency: 'p5js', 100 | dependency_version: '1.0.0', 101 | dependency_url: '"https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.0.0/p5.min.js"', 102 | interactive: 'true', 103 | animation_length_sec: undefined, 104 | instructions: 'click to animate | space bar changes background color', 105 | script: 'let numHashes = tokenData.hashes.length;\n' + 106 | 'let hashPairs = [];\n' + 107 | 'for (let i = 0; i < numHashes; i++) {\n' + 108 | ' for (let j = 0; j < 32; j++) {\n' + 109 | ' hashPairs.push(tokenData.hashes[i].slice(2 + (j * 2), 4 + (j * 2)));\n' + 110 | ' }\n' + 111 | '}\n' + 112 | ... 113 | } 114 | } 115 | ``` 116 | 117 | ### Token Metadata 118 | 119 | ```javascript 120 | const response = artblocks.token_metadata(0) 121 | ``` 122 | 123 | ```javascript 124 | Promise { 125 | { 126 | project_id: 0, 127 | project_name: 'Chromie Squiggle', 128 | token_id: 0, 129 | token_invocation: 0, 130 | token_hash: '0x722899b10c66da3b72fb60a8e71df442ee1c004547ba2227d76bed357469b4ea' 131 | } 132 | } 133 | ``` 134 | 135 | ### Token Script 136 | 137 | ```javascript 138 | const response = artblocks.token_script(0) 139 | ``` 140 | 141 | ```javascript 142 | Promise { 143 | { 144 | token_id: 0, 145 | token_invocation: 0, 146 | token_dependencies: { 147 | dependency: 'p5js', 148 | dependency_version: '1.0.0', 149 | dependency_url: '"https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.0.0/p5.min.js"' 150 | }, 151 | token_data: 'let tokenData = {"hashes":["0x722899b10c66da3b72fb60a8e71df442ee1c004547ba2227d76bed357469b4ea"], "tokenId":"0"}', 152 | token_script: 'let numHashes = tokenData.hashes.length;\n' + 153 | 'let hashPairs = [];\n' + 154 | 'for (let i = 0; i < numHashes; i++) {\n' + 155 | ' for (let j = 0; j < 32; j++) {\n' + 156 | ' hashPairs.push(tokenData.hashes[i].slice(2 + (j * 2), 4 + (j * 2)));\n' + 157 | ' }\n' + 158 | '}\n' + 159 | ... 160 | } 161 | } 162 | ``` 163 | 164 | ### Token Generator 165 | 166 | ```javascript 167 | const response = artblocks.token_generator(0) 168 | ``` 169 | 170 | ```javascript 171 | Promise { 172 | '\n' + 173 | '\n' + 174 | ' \n' + 175 | ' \n' + 176 | ' \n' + 177 | ' \n' + 178 | ' 6 | 22 | 23 | 24 | 25 | 26 | 27 | ` 28 | return template 29 | } 30 | 31 | function p5js(data="", script="", dependency_url="") { 32 | let template = ` 33 | 34 | 35 | 36 | 37 | 38 | 54 | 55 | ` 56 | return template 57 | } 58 | 59 | function threejs(data="", script="", dependency_url="") { 60 | let template = ` 61 | 62 | 63 | 64 | 80 | 81 | 82 | 83 | 84 | ` 85 | return template 86 | } 87 | 88 | function processing(data="", script="", dependency_url="") { 89 | let template = ` 90 | 91 | 92 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | ` 116 | return template 117 | } 118 | 119 | function regl(data="", script="", dependency_url=""){ 120 | let template = ` 121 | 122 | 123 | 124 | 125 | 141 | 142 | 143 | 144 | 145 | ` 146 | return template 147 | } 148 | 149 | function tonejs(data="", script="", dependency_url="") { 150 | let template = ` 151 | 152 | 153 | 154 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | ` 177 | return template 178 | } 179 | 180 | function svg(data="", script="", dependency_url="") { 181 | let template = ` 182 | 183 | 184 | 185 | 202 | 203 | 204 | 205 | 206 | ` 207 | return template 208 | } 209 | 210 | function aframe(data="", script="", dependency_url="") { 211 | let template = ` 212 | 213 | 214 | 215 | 216 | 232 | 233 | 234 | 235 | 236 | 237 | ` 238 | return template 239 | } 240 | 241 | function babylonjs(data="", script="", dependency_url="") { 242 | let template = ` 243 | 244 | 245 | 246 | 247 | 267 | 268 | 269 | 270 | 271 | 272 | ` 273 | return template 274 | } 275 | 276 | export default { 277 | js, 278 | p5js, 279 | threejs, 280 | processing, 281 | regl, 282 | tonejs, 283 | svg, 284 | aframe, 285 | babylonjs 286 | } -------------------------------------------------------------------------------- /src/utils.js: -------------------------------------------------------------------------------- 1 | function arr_to_str(arr) { 2 | return "["+arr.map(x => '"'+x+'"').join(",")+"]" 3 | } 4 | 5 | function mul_by_dec(x, decimals=18) { 6 | return x*Math.pow(10, decimals) 7 | } 8 | 9 | function div_by_dec(x, decimals=18) { 10 | return x/Math.pow(10, decimals) 11 | } 12 | 13 | function wei_to_eth(x) { 14 | return div_by_dec(x, 18) 15 | } 16 | 17 | function eth_to_wei(x) { 18 | return mul_by_dec(x, 18) 19 | } 20 | 21 | export default { 22 | arr_to_str, 23 | mul_by_dec, 24 | div_by_dec, 25 | wei_to_eth, 26 | eth_to_wei 27 | } -------------------------------------------------------------------------------- /test/index.js: -------------------------------------------------------------------------------- 1 | import ArtBlocks from "../src/index.js" 2 | import { expect } from 'chai' 3 | 4 | describe("Mainnet", function() { 5 | 6 | let artblocks = new ArtBlocks("thegraph", "mainnet") 7 | 8 | context("projects()", function() { 9 | it("should return multiple projects", function() { 10 | return artblocks.projects().then(function(x) { 11 | expect(x.length).to.be.above(1) 12 | expect(x[0].id).to.equal(0) 13 | expect(x[0].name).to.equal("Chromie Squiggle") 14 | expect(x[0].artist).to.equal("Snowfro") 15 | expect(x[0].contract).to.equal("0x059edd72cd353df5106d2b9cc5ab83a52287ac3a") 16 | }) 17 | }) 18 | }) 19 | 20 | context("project_metadata()", function() { 21 | it("should return metadata for a given project", function() { 22 | return artblocks.project_metadata(0).then(function(x) { 23 | expect(x.id).to.equal(0) 24 | expect(x.name).to.equal("Chromie Squiggle") 25 | expect(x.artist).to.equal("Snowfro") 26 | expect(x.contract).to.equal("0x059edd72cd353df5106d2b9cc5ab83a52287ac3a") 27 | }) 28 | }) 29 | }) 30 | 31 | context("project_script()", function() { 32 | it("should return script for a given project", function() { 33 | return artblocks.project_script(0).then(function(x) { 34 | expect(x.id).to.equal(0) 35 | expect(x.dependency).to.equal("p5js") 36 | expect(x.dependency_version).to.equal("1.0.0") 37 | expect(x.dependency_url).to.equal('"https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.0.0/p5.min.js"') 38 | expect(x.script.length).to.be.greaterThan(2500) 39 | }) 40 | }) 41 | }) 42 | 43 | context("token_metadata()", function() { 44 | it("should return metadata for a given token", function() { 45 | return artblocks.token_metadata(1000).then(function(x) { 46 | expect(x.project_id).to.equal(0) 47 | expect(x.token_id).to.equal(1000) 48 | expect(x.project_name).to.equal("Chromie Squiggle") 49 | expect(x.token_hash).to.equal("0xfef2aca5be3fe64a87dfc69b64622cb7377a847c2dc378a3f0ed8be794412b22") 50 | }) 51 | }) 52 | }) 53 | 54 | context("token_script()", function() { 55 | it("should return script for a given token", function() { 56 | return artblocks.token_script(1000).then(function(x) { 57 | expect(x.token_id).to.equal(1000) 58 | expect(x.token_dependencies.dependency).to.equal("p5js") 59 | expect(x.token_script.length).to.be.greaterThan(2500) 60 | }) 61 | }) 62 | }) 63 | 64 | context("token_generator()", function() { 65 | it("should return generator for a given token", function() { 66 | return artblocks.token_generator(1000).then(function(x) { 67 | expect(x.length).to.be.greaterThan(2500) 68 | }) 69 | }) 70 | }) 71 | }) 72 | 73 | describe("Goerli", function() { 74 | 75 | let artblocks = new ArtBlocks("thegraph", "goerli", ["0xda62f67be7194775a75be91cbf9feedcc5776d4b"]) 76 | 77 | context("projects()", function() { 78 | it("should return multiple projects", function() { 79 | return artblocks.projects().then(function(x) { 80 | expect(x.length).to.be.above(1) 81 | expect(x[0].id).to.equal(3) 82 | expect(x[0].contract).to.equal("0xda62f67be7194775a75be91cbf9feedcc5776d4b") 83 | }) 84 | }) 85 | }) 86 | 87 | context("project_metadata()", function() { 88 | it("should return metadata for a given project", function() { 89 | return artblocks.project_metadata(3).then(function(x) { 90 | expect(x.id).to.equal(3) 91 | }) 92 | }) 93 | }) 94 | 95 | context("project_script()", function() { 96 | it("should return script for a given project", function() { 97 | return artblocks.project_script(19).then(function(x) { 98 | expect(x.id).to.equal(19) 99 | expect(x.dependency).to.equal("js") 100 | expect(x.script.length).to.be.greaterThan(1000) 101 | }) 102 | }) 103 | }) 104 | 105 | context("token_metadata()", function() { 106 | it("should return metadata for a given token", function() { 107 | return artblocks.token_metadata(19000000).then(function(x) { 108 | expect(x.project_id).to.equal(19) 109 | expect(x.token_id).to.equal(19000000) 110 | expect(x.token_hash).to.equal("0xba7a688859c59a246816423d0f5cb56db8403488c2e3d5a5f27a98bfd17b61b6") 111 | }) 112 | }) 113 | }) 114 | 115 | context("token_script()", function() { 116 | it("should return script for a given token", function() { 117 | return artblocks.token_script(19000000).then(function(x) { 118 | expect(x.token_id).to.equal(19000000) 119 | expect(x.token_dependencies.dependency).to.equal("js") 120 | expect(x.token_script.length).to.be.greaterThan(500) 121 | }) 122 | }) 123 | }) 124 | 125 | context("token_generator()", function() { 126 | it("should return generator for a given token", function() { 127 | return artblocks.token_generator(19000000).then(function(x) { 128 | expect(x.length).to.be.greaterThan(500) 129 | }) 130 | }) 131 | }) 132 | }) 133 | 134 | describe("Flex", function() { 135 | 136 | let artblocks = new ArtBlocks("thegraph", "goerli", ["0x9ff1079a71dd0c77336466a008a4bb817028613c"], true) 137 | 138 | context("projects()", function() { 139 | it("should return multiple projects", function() { 140 | return artblocks.projects().then(function(x) { 141 | expect(x.length).to.be.above(1) 142 | expect(x[0].id).to.equal(0) 143 | expect(x[0].contract).to.equal("0x9ff1079a71dd0c77336466a008a4bb817028613c") 144 | }) 145 | }) 146 | }) 147 | 148 | context("project_metadata()", function() { 149 | it("should return metadata for a given project", function() { 150 | return artblocks.project_metadata(0).then(function(x) { 151 | expect(x.id).to.equal(0) 152 | }) 153 | }) 154 | }) 155 | 156 | context("project_script()", function() { 157 | it("should return script for a given project", function() { 158 | return artblocks.project_script(0).then(function(x) { 159 | expect(x.id).to.equal(0) 160 | expect(x.dependency).to.equal("svg") 161 | expect(x.script.length).to.be.greaterThan(1000) 162 | }) 163 | }) 164 | }) 165 | 166 | context("token_metadata()", function() { 167 | it("should return metadata for a given token", function() { 168 | return artblocks.token_metadata(2).then(function(x) { 169 | expect(x.project_id).to.equal(0) 170 | expect(x.token_id).to.equal(2) 171 | expect(x.token_hash).to.equal("0x864721473c6cc1731797c8a549789b41cfb95c708e7316a2790be7aa397e6868") 172 | }) 173 | }) 174 | }) 175 | 176 | context("token_script()", function() { 177 | it("should return script for a given token", function() { 178 | return artblocks.token_script(2).then(function(x) { 179 | expect(x.token_id).to.equal(2) 180 | expect(x.token_dependencies.dependency).to.equal("svg") 181 | expect(x.token_script.length).to.be.greaterThan(500) 182 | }) 183 | }) 184 | }) 185 | 186 | context("token_generator()", function() { 187 | it("should return generator for a given token", function() { 188 | return artblocks.token_generator(2).then(function(x) { 189 | expect(x.length).to.be.greaterThan(500) 190 | }) 191 | }) 192 | }) 193 | }) 194 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@ungap/promise-all-settled@1.1.2": 6 | version "1.1.2" 7 | resolved "https://registry.yarnpkg.com/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz#aa58042711d6e3275dd37dc597e5d31e8c290a44" 8 | integrity sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q== 9 | 10 | ansi-colors@4.1.1: 11 | version "4.1.1" 12 | resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" 13 | integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== 14 | 15 | ansi-regex@^5.0.1: 16 | version "5.0.1" 17 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" 18 | integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== 19 | 20 | ansi-styles@^4.0.0, ansi-styles@^4.1.0: 21 | version "4.3.0" 22 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" 23 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== 24 | dependencies: 25 | color-convert "^2.0.1" 26 | 27 | anymatch@~3.1.2: 28 | version "3.1.2" 29 | resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" 30 | integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== 31 | dependencies: 32 | normalize-path "^3.0.0" 33 | picomatch "^2.0.4" 34 | 35 | argparse@^2.0.1: 36 | version "2.0.1" 37 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" 38 | integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== 39 | 40 | assertion-error@^1.1.0: 41 | version "1.1.0" 42 | resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" 43 | integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== 44 | 45 | balanced-match@^1.0.0: 46 | version "1.0.2" 47 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" 48 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== 49 | 50 | binary-extensions@^2.0.0: 51 | version "2.2.0" 52 | resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" 53 | integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== 54 | 55 | brace-expansion@^1.1.7: 56 | version "1.1.11" 57 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 58 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 59 | dependencies: 60 | balanced-match "^1.0.0" 61 | concat-map "0.0.1" 62 | 63 | braces@~3.0.2: 64 | version "3.0.2" 65 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" 66 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== 67 | dependencies: 68 | fill-range "^7.0.1" 69 | 70 | browser-stdout@1.3.1: 71 | version "1.3.1" 72 | resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" 73 | integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== 74 | 75 | camelcase@^6.0.0: 76 | version "6.3.0" 77 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" 78 | integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== 79 | 80 | chai@^4.3.4: 81 | version "4.3.6" 82 | resolved "https://registry.yarnpkg.com/chai/-/chai-4.3.6.tgz#ffe4ba2d9fa9d6680cc0b370adae709ec9011e9c" 83 | integrity sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q== 84 | dependencies: 85 | assertion-error "^1.1.0" 86 | check-error "^1.0.2" 87 | deep-eql "^3.0.1" 88 | get-func-name "^2.0.0" 89 | loupe "^2.3.1" 90 | pathval "^1.1.1" 91 | type-detect "^4.0.5" 92 | 93 | chalk@^4.1.0: 94 | version "4.1.2" 95 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" 96 | integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== 97 | dependencies: 98 | ansi-styles "^4.1.0" 99 | supports-color "^7.1.0" 100 | 101 | check-error@^1.0.2: 102 | version "1.0.2" 103 | resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" 104 | integrity sha1-V00xLt2Iu13YkS6Sht1sCu1KrII= 105 | 106 | chokidar@3.5.3: 107 | version "3.5.3" 108 | resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" 109 | integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== 110 | dependencies: 111 | anymatch "~3.1.2" 112 | braces "~3.0.2" 113 | glob-parent "~5.1.2" 114 | is-binary-path "~2.1.0" 115 | is-glob "~4.0.1" 116 | normalize-path "~3.0.0" 117 | readdirp "~3.6.0" 118 | optionalDependencies: 119 | fsevents "~2.3.2" 120 | 121 | cliui@^7.0.2: 122 | version "7.0.4" 123 | resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" 124 | integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== 125 | dependencies: 126 | string-width "^4.2.0" 127 | strip-ansi "^6.0.0" 128 | wrap-ansi "^7.0.0" 129 | 130 | color-convert@^2.0.1: 131 | version "2.0.1" 132 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" 133 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== 134 | dependencies: 135 | color-name "~1.1.4" 136 | 137 | color-name@~1.1.4: 138 | version "1.1.4" 139 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" 140 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 141 | 142 | concat-map@0.0.1: 143 | version "0.0.1" 144 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 145 | integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= 146 | 147 | debug@4.3.3: 148 | version "4.3.3" 149 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664" 150 | integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q== 151 | dependencies: 152 | ms "2.1.2" 153 | 154 | decamelize@^4.0.0: 155 | version "4.0.0" 156 | resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" 157 | integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== 158 | 159 | deep-eql@^3.0.1: 160 | version "3.0.1" 161 | resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-3.0.1.tgz#dfc9404400ad1c8fe023e7da1df1c147c4b444df" 162 | integrity sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw== 163 | dependencies: 164 | type-detect "^4.0.0" 165 | 166 | diff@5.0.0: 167 | version "5.0.0" 168 | resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" 169 | integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== 170 | 171 | emoji-regex@^8.0.0: 172 | version "8.0.0" 173 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" 174 | integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== 175 | 176 | escalade@^3.1.1: 177 | version "3.1.1" 178 | resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" 179 | integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== 180 | 181 | escape-string-regexp@4.0.0: 182 | version "4.0.0" 183 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" 184 | integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== 185 | 186 | fill-range@^7.0.1: 187 | version "7.0.1" 188 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" 189 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== 190 | dependencies: 191 | to-regex-range "^5.0.1" 192 | 193 | find-up@5.0.0: 194 | version "5.0.0" 195 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" 196 | integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== 197 | dependencies: 198 | locate-path "^6.0.0" 199 | path-exists "^4.0.0" 200 | 201 | flat@^5.0.2: 202 | version "5.0.2" 203 | resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" 204 | integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== 205 | 206 | fs.realpath@^1.0.0: 207 | version "1.0.0" 208 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 209 | integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= 210 | 211 | fsevents@~2.3.2: 212 | version "2.3.2" 213 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" 214 | integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== 215 | 216 | get-caller-file@^2.0.5: 217 | version "2.0.5" 218 | resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" 219 | integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== 220 | 221 | get-func-name@^2.0.0: 222 | version "2.0.0" 223 | resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41" 224 | integrity sha1-6td0q+5y4gQJQzoGY2YCPdaIekE= 225 | 226 | glob-parent@~5.1.2: 227 | version "5.1.2" 228 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" 229 | integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== 230 | dependencies: 231 | is-glob "^4.0.1" 232 | 233 | glob@7.2.0: 234 | version "7.2.0" 235 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" 236 | integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== 237 | dependencies: 238 | fs.realpath "^1.0.0" 239 | inflight "^1.0.4" 240 | inherits "2" 241 | minimatch "^3.0.4" 242 | once "^1.3.0" 243 | path-is-absolute "^1.0.0" 244 | 245 | growl@1.10.5: 246 | version "1.10.5" 247 | resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" 248 | integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== 249 | 250 | has-flag@^4.0.0: 251 | version "4.0.0" 252 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" 253 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== 254 | 255 | he@1.2.0: 256 | version "1.2.0" 257 | resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" 258 | integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== 259 | 260 | inflight@^1.0.4: 261 | version "1.0.6" 262 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 263 | integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= 264 | dependencies: 265 | once "^1.3.0" 266 | wrappy "1" 267 | 268 | inherits@2: 269 | version "2.0.4" 270 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 271 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 272 | 273 | is-binary-path@~2.1.0: 274 | version "2.1.0" 275 | resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" 276 | integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== 277 | dependencies: 278 | binary-extensions "^2.0.0" 279 | 280 | is-extglob@^2.1.1: 281 | version "2.1.1" 282 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" 283 | integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= 284 | 285 | is-fullwidth-code-point@^3.0.0: 286 | version "3.0.0" 287 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" 288 | integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== 289 | 290 | is-glob@^4.0.1, is-glob@~4.0.1: 291 | version "4.0.3" 292 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" 293 | integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== 294 | dependencies: 295 | is-extglob "^2.1.1" 296 | 297 | is-number@^7.0.0: 298 | version "7.0.0" 299 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" 300 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== 301 | 302 | is-plain-obj@^2.1.0: 303 | version "2.1.0" 304 | resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" 305 | integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== 306 | 307 | is-unicode-supported@^0.1.0: 308 | version "0.1.0" 309 | resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" 310 | integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== 311 | 312 | isexe@^2.0.0: 313 | version "2.0.0" 314 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 315 | integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= 316 | 317 | js-yaml@4.1.0: 318 | version "4.1.0" 319 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" 320 | integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== 321 | dependencies: 322 | argparse "^2.0.1" 323 | 324 | locate-path@^6.0.0: 325 | version "6.0.0" 326 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" 327 | integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== 328 | dependencies: 329 | p-locate "^5.0.0" 330 | 331 | log-symbols@4.1.0: 332 | version "4.1.0" 333 | resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" 334 | integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== 335 | dependencies: 336 | chalk "^4.1.0" 337 | is-unicode-supported "^0.1.0" 338 | 339 | loupe@^2.3.1: 340 | version "2.3.1" 341 | resolved "https://registry.yarnpkg.com/loupe/-/loupe-2.3.1.tgz#a2e1192c9f452e4e85089766da10ac8288383947" 342 | integrity sha512-EN1D3jyVmaX4tnajVlfbREU4axL647hLec1h/PXAb8CPDMJiYitcWF2UeLVNttRqaIqQs4x+mRvXf+d+TlDrCA== 343 | dependencies: 344 | get-func-name "^2.0.0" 345 | 346 | minimatch@3.0.4, minimatch@^3.0.4: 347 | version "3.0.4" 348 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 349 | integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== 350 | dependencies: 351 | brace-expansion "^1.1.7" 352 | 353 | mocha@^9.1.3: 354 | version "9.2.0" 355 | resolved "https://registry.yarnpkg.com/mocha/-/mocha-9.2.0.tgz#2bfba73d46e392901f877ab9a47b7c9c5d0275cc" 356 | integrity sha512-kNn7E8g2SzVcq0a77dkphPsDSN7P+iYkqE0ZsGCYWRsoiKjOt+NvXfaagik8vuDa6W5Zw3qxe8Jfpt5qKf+6/Q== 357 | dependencies: 358 | "@ungap/promise-all-settled" "1.1.2" 359 | ansi-colors "4.1.1" 360 | browser-stdout "1.3.1" 361 | chokidar "3.5.3" 362 | debug "4.3.3" 363 | diff "5.0.0" 364 | escape-string-regexp "4.0.0" 365 | find-up "5.0.0" 366 | glob "7.2.0" 367 | growl "1.10.5" 368 | he "1.2.0" 369 | js-yaml "4.1.0" 370 | log-symbols "4.1.0" 371 | minimatch "3.0.4" 372 | ms "2.1.3" 373 | nanoid "3.2.0" 374 | serialize-javascript "6.0.0" 375 | strip-json-comments "3.1.1" 376 | supports-color "8.1.1" 377 | which "2.0.2" 378 | workerpool "6.2.0" 379 | yargs "16.2.0" 380 | yargs-parser "20.2.4" 381 | yargs-unparser "2.0.0" 382 | 383 | ms@2.1.2: 384 | version "2.1.2" 385 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" 386 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 387 | 388 | ms@2.1.3: 389 | version "2.1.3" 390 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" 391 | integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== 392 | 393 | nanoid@3.2.0: 394 | version "3.2.0" 395 | resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.2.0.tgz#62667522da6673971cca916a6d3eff3f415ff80c" 396 | integrity sha512-fmsZYa9lpn69Ad5eDn7FMcnnSR+8R34W9qJEijxYhTbfOWzr22n1QxCMzXLK+ODyW2973V3Fux959iQoUxzUIA== 397 | 398 | node-fetch@^2.6.1: 399 | version "2.6.7" 400 | resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" 401 | integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== 402 | dependencies: 403 | whatwg-url "^5.0.0" 404 | 405 | normalize-path@^3.0.0, normalize-path@~3.0.0: 406 | version "3.0.0" 407 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" 408 | integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== 409 | 410 | once@^1.3.0: 411 | version "1.4.0" 412 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 413 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= 414 | dependencies: 415 | wrappy "1" 416 | 417 | p-limit@^3.0.2: 418 | version "3.1.0" 419 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" 420 | integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== 421 | dependencies: 422 | yocto-queue "^0.1.0" 423 | 424 | p-locate@^5.0.0: 425 | version "5.0.0" 426 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" 427 | integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== 428 | dependencies: 429 | p-limit "^3.0.2" 430 | 431 | path-exists@^4.0.0: 432 | version "4.0.0" 433 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" 434 | integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== 435 | 436 | path-is-absolute@^1.0.0: 437 | version "1.0.1" 438 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 439 | integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= 440 | 441 | pathval@^1.1.1: 442 | version "1.1.1" 443 | resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d" 444 | integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== 445 | 446 | picomatch@^2.0.4, picomatch@^2.2.1: 447 | version "2.3.1" 448 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" 449 | integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== 450 | 451 | randombytes@^2.1.0: 452 | version "2.1.0" 453 | resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" 454 | integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== 455 | dependencies: 456 | safe-buffer "^5.1.0" 457 | 458 | readdirp@~3.6.0: 459 | version "3.6.0" 460 | resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" 461 | integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== 462 | dependencies: 463 | picomatch "^2.2.1" 464 | 465 | require-directory@^2.1.1: 466 | version "2.1.1" 467 | resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" 468 | integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= 469 | 470 | safe-buffer@^5.1.0: 471 | version "5.2.1" 472 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" 473 | integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== 474 | 475 | serialize-javascript@6.0.0: 476 | version "6.0.0" 477 | resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8" 478 | integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag== 479 | dependencies: 480 | randombytes "^2.1.0" 481 | 482 | string-width@^4.1.0, string-width@^4.2.0: 483 | version "4.2.3" 484 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" 485 | integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== 486 | dependencies: 487 | emoji-regex "^8.0.0" 488 | is-fullwidth-code-point "^3.0.0" 489 | strip-ansi "^6.0.1" 490 | 491 | strip-ansi@^6.0.0, strip-ansi@^6.0.1: 492 | version "6.0.1" 493 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" 494 | integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== 495 | dependencies: 496 | ansi-regex "^5.0.1" 497 | 498 | strip-json-comments@3.1.1: 499 | version "3.1.1" 500 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" 501 | integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== 502 | 503 | supports-color@8.1.1: 504 | version "8.1.1" 505 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" 506 | integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== 507 | dependencies: 508 | has-flag "^4.0.0" 509 | 510 | supports-color@^7.1.0: 511 | version "7.2.0" 512 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" 513 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== 514 | dependencies: 515 | has-flag "^4.0.0" 516 | 517 | to-regex-range@^5.0.1: 518 | version "5.0.1" 519 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" 520 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== 521 | dependencies: 522 | is-number "^7.0.0" 523 | 524 | tr46@~0.0.3: 525 | version "0.0.3" 526 | resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" 527 | integrity sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o= 528 | 529 | type-detect@^4.0.0, type-detect@^4.0.5: 530 | version "4.0.8" 531 | resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" 532 | integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== 533 | 534 | webidl-conversions@^3.0.0: 535 | version "3.0.1" 536 | resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" 537 | integrity sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE= 538 | 539 | whatwg-url@^5.0.0: 540 | version "5.0.0" 541 | resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" 542 | integrity sha1-lmRU6HZUYuN2RNNib2dCzotwll0= 543 | dependencies: 544 | tr46 "~0.0.3" 545 | webidl-conversions "^3.0.0" 546 | 547 | which@2.0.2: 548 | version "2.0.2" 549 | resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" 550 | integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== 551 | dependencies: 552 | isexe "^2.0.0" 553 | 554 | workerpool@6.2.0: 555 | version "6.2.0" 556 | resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.0.tgz#827d93c9ba23ee2019c3ffaff5c27fccea289e8b" 557 | integrity sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A== 558 | 559 | wrap-ansi@^7.0.0: 560 | version "7.0.0" 561 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" 562 | integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== 563 | dependencies: 564 | ansi-styles "^4.0.0" 565 | string-width "^4.1.0" 566 | strip-ansi "^6.0.0" 567 | 568 | wrappy@1: 569 | version "1.0.2" 570 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 571 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= 572 | 573 | y18n@^5.0.5: 574 | version "5.0.8" 575 | resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" 576 | integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== 577 | 578 | yargs-parser@20.2.4: 579 | version "20.2.4" 580 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" 581 | integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== 582 | 583 | yargs-parser@^20.2.2: 584 | version "20.2.9" 585 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" 586 | integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== 587 | 588 | yargs-unparser@2.0.0: 589 | version "2.0.0" 590 | resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb" 591 | integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA== 592 | dependencies: 593 | camelcase "^6.0.0" 594 | decamelize "^4.0.0" 595 | flat "^5.0.2" 596 | is-plain-obj "^2.1.0" 597 | 598 | yargs@16.2.0: 599 | version "16.2.0" 600 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" 601 | integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== 602 | dependencies: 603 | cliui "^7.0.2" 604 | escalade "^3.1.1" 605 | get-caller-file "^2.0.5" 606 | require-directory "^2.1.1" 607 | string-width "^4.2.0" 608 | y18n "^5.0.5" 609 | yargs-parser "^20.2.2" 610 | 611 | yocto-queue@^0.1.0: 612 | version "0.1.0" 613 | resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" 614 | integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== 615 | --------------------------------------------------------------------------------